diff --git a/.gitignore b/.gitignore index 79e6ea4..3f71f39 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -test \ No newline at end of file +test +debug \ No newline at end of file diff --git a/README_zh-CN.md b/README_zh-CN.md index febb149..15df25d 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -8,8 +8,8 @@ # 安装依赖 npm install -# development: 开启 devServer 带有热更新的开发环境 -npm run devServer +# development: 开启带有热更新的开发环境 +npm run dev # product: 输出内容(生成 dist目录) npm run build @@ -17,12 +17,14 @@ npm run build ### 使用方式 -Tips: 通过 `webpack` 导出为 `umd` 类型的文件。故支持以下几种方式. +Tips: 导出为 `umd` 类型的文件。支持以下几种使用方式. #### 方式1 script 标签使用 + CDN: + CSS: https://unpkg.com/cool-md-editor@版本号/dist/coolMdEditor.css + JS: https://unpkg.com/cool-md-editor@版本号/dist/coolMdEditor.js + ```html ... @@ -117,6 +119,9 @@ const coolMDEditor = new CoolMDEditor({ |--|--|--|:--:|:--:| | `isFullscreen` | Boolean | 是否全屏显示, 全屏为 `true` | `false` 或者本地存储设置值| - | | `isThemeLight` | Boolean | 是否主题为`圣光`, 目前只有 `圣光` 和 `暗黑` 主题 ,根据 `base16` 扩展而来。未来也只考虑两套主题(光/暗) | true 或者本地存储设置值| - | +| `isShowAll` | Boolean |编辑和预览都显示, 与 `isOnlyEdit` `isOnlyPreview`为正反关系 |true | - | +| `isOnlyPreview` | Boolean |只显示预览 |false | - | +| `isOnlyEdit` | Boolean | 只显示编辑|true | - | #### `_options` 属性 @@ -124,10 +129,15 @@ const coolMDEditor = new CoolMDEditor({ |--|--|--|:--:|:--:| | `el` | HTMLElement | 编辑器 `dom` 元素| - | - | | `$tools` | Object | 工具条类名(图标)、title、和绑定的事件等| - | - | -| `lang` | Object | 编辑器的语言内容 | 中文语言(zh) | - | +| `lang` | Object/String | 编辑器的语言内容 | - | - | | `editor` | Object | 编辑器实例对象 | - | - | +|`shortcuts`| Object | 快捷键配置 | - | -| +|`qiniu`| Object | 七牛云配置,图片复制粘贴后上传到七牛云 | - | -| + + + ++ $tools 结构 -**TIPS: $tools 结构像下面这样** ```js { name: 'heading', // 名称 @@ -140,7 +150,43 @@ const coolMDEditor = new CoolMDEditor({ } ``` ++ lang + +类型-字符串: 使用内置的语言,目前内置了 `en: englisth` `zh: 简体中文`, 具体配置可查看 `lang/*` 目录中的配置。 + +类型-对象: 可以扩展第三方语言,具体配置格式可查看 `lang/*` 目录文件。 + ++ qiniu + +需要使用粘贴图片功能,要先引用 `https://unpkg.com/qiniu-js@<版本号>/dist/qiniu.min.js`。粘贴的图片转换为了 base64 格式,为了避免图片路径显示 base64 格式的字符串,造成内容过多问题。编辑器内置了将 base64 格式的图片上传至七牛云存储的功能。 + +默认配置为 +```js +qiniu: { + tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/blog/get_token', + region: 'z1', + config: {}, + putExtra: {} +} +``` + +关于内置的七牛上传需要注意以下几点: + ++ token 的获取编辑器内置了接口处理,可以不用设置,如果需要使用自己的接口服务器需要配置 +`qiniu.tokenApiUrl`, 并且返回如下数据格式 + +```json +{ + data: { + token: 'your token', + domain: 'your 七牛云后台设置的自己的域名' + } +} +``` ++ 上传的空间为测试空间,内容会不定时删除,所以请配置自己的七牛云上传空间 + #### 编辑器实例对象方法 + |方法名|说明|参数|返回值| |--|--|--|:--:| |getMDValue|获取当前Markdown的内容|-|当前Markdown的内容| @@ -154,3 +200,4 @@ const coolMDEditor = new CoolMDEditor({ + [surmon-china/angular-admin](https://github.com/surmon-china/angular-admin/blob/89ad805a7932c4e06560127bf8820640fc079584/src/app/components/saMarkdownEditor/markdownEditor.component.ts) + [codimd](https://demo.codimd.org/features?both) + [md.editor](https://github.com/TeoChoi/md.editor) + \ No newline at end of file diff --git a/dist/cMdEditor.css b/dist/cMdEditor.css new file mode 100644 index 0000000..6caca88 --- /dev/null +++ b/dist/cMdEditor.css @@ -0,0 +1 @@ +:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6,p{margin-top:0}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote{margin:0}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.clearfix:after{display:block;content:"";clear:both}.one-line-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a,a:active,a:hover,a:link,a:visited{text-decoration:none}@media (-webkit-max-device-pixel-ratio:1){.CodeMirror-vscrollbar::-webkit-scrollbar,.cool-md-editor-wrap .editor-md::-webkit-scrollbar,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar{width:6px;height:6px}.CodeMirror-vscrollbar::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar-thumb{background-clip:padding-box;min-height:28px}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}}.cool-md-editor-wrap .editor-tools{position:absolute;left:0;top:0;width:100%;height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 10px}.cool-md-editor-wrap .editor-tools .editor-tools-handle,.cool-md-editor-wrap .editor-tools .editor-tools-main{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.cool-md-editor-wrap .editor-tools .editor-tools-handle>*,.cool-md-editor-wrap .editor-tools .editor-tools-main>*{width:30px;height:30px;text-align:center;line-height:30px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid transparent;border-radius:3px;margin-left:3px}.cool-md-editor-wrap .editor-tools .editor-tools-handle>:hover,.cool-md-editor-wrap .editor-tools .editor-tools-main>:hover{cursor:pointer}.cool-md-editor-wrap .editor-tools .editor-tools-main{-webkit-box-flex:70%;-ms-flex:70%;flex:70%}.cool-md-editor-wrap .editor-tools .editor-tools-main .editor-tools-division{width:13px;height:30px;line-height:25px;text-align:center;border:none;margin:0;cursor:auto}.cool-md-editor-wrap .editor-tools .editor-tools-handle{-webkit-box-flex:30%;-ms-flex:30%;flex:30%;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.editor-theme-light .editor-tools{background-color:#d2d2d2}.editor-theme-light .editor-tools .editor-tools-handle>*,.editor-theme-light .editor-tools .editor-tools-main>*{color:#202020}.editor-theme-light .editor-tools .editor-tools-handle>.active,.editor-theme-light .editor-tools .editor-tools-main>.active{border-color:#202020}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo]{color:#ebebeb}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#202020}.editor-theme-light .editor-tools .editor-tools-main .editor-tools-division{color:#858585}.editor-theme-dark .editor-tools{background-color:#333}.editor-theme-dark .editor-tools .editor-tools-handle>*,.editor-theme-dark .editor-tools .editor-tools-main>*{color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-handle>.active,.editor-theme-dark .editor-tools .editor-tools-main>.active{border-color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo]{color:#4d4d4d}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#e5e5e5}.editor-theme-dark .editor-tools .editor-tools-main .editor-tools-division{color:grey}.editor-theme-dark .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker-subtle,.editor-theme-dark .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.editor-theme-dark .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.editor-theme-dark .cm-s-base16-dark span.cm-comment{color:#8f5536}.editor-theme-dark .cm-s-base16-dark span.cm-atom,.editor-theme-dark .cm-s-base16-dark span.cm-number{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-attribute,.editor-theme-dark .cm-s-base16-dark span.cm-property{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-keyword{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-string{color:#f4bf75}.editor-theme-dark .cm-s-base16-dark span.cm-variable{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.editor-theme-dark .cm-s-base16-dark span.cm-def{color:#d28445}.editor-theme-dark .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark span.cm-tag{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-link{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.editor-theme-dark .cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.editor-theme-dark .hljs-name{color:navy;font-weight:400}.editor-theme-dark .hljs-attr,.editor-theme-dark .hljs-built_in,.editor-theme-dark .hljs-literal,.editor-theme-dark .hljs-number,.editor-theme-dark .hljs-template-variable,.editor-theme-dark .hljs-variable{color:teal}.editor-theme-dark .hljs-tag{color:#222}.editor-theme-dark .hljs-doctag,.editor-theme-dark .hljs-string{color:#d14}.editor-theme-dark .hljs-attribute,.editor-theme-dark .hljs-symbol{color:#da8910}.editor-theme-light .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.editor-theme-light .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker-subtle,.editor-theme-light .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.editor-theme-light .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.editor-theme-light .cm-s-base16-light span.cm-comment{color:#8f5536}.editor-theme-light .cm-s-base16-light span.cm-atom,.editor-theme-light .cm-s-base16-light span.cm-number{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-attribute,.editor-theme-light .cm-s-base16-light span.cm-property{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-keyword{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-string{color:#f4bf75}.editor-theme-light .cm-s-base16-light span.cm-variable{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.editor-theme-light .cm-s-base16-light span.cm-def{color:#d28445}.editor-theme-light .cm-s-base16-light span.cm-bracket{color:#202020}.editor-theme-light .cm-s-base16-light span.cm-tag{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-link{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.editor-theme-light .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.editor-theme-light .cm-s-base16-light .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.editor-theme-light .hljs-name{color:navy;font-weight:400}.editor-theme-light .hljs-attr,.editor-theme-light .hljs-built_in,.editor-theme-light .hljs-literal,.editor-theme-light .hljs-number,.editor-theme-light .hljs-template-variable,.editor-theme-light .hljs-variable{color:teal}.editor-theme-light .hljs-tag{color:#222}.editor-theme-light .hljs-doctag,.editor-theme-light .hljs-string{color:#d14}.editor-theme-light .hljs-attribute,.editor-theme-light .hljs-symbol{color:#da8910}.cool-md-editor-wrap .editor-md{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.cool-md-editor-wrap .editor-md .CodeMirror,.cool-md-editor-wrap .editor-md form{height:100%}.cool-md-editor-wrap .editor-md.hide{display:none}.editor-theme-dark .editor-md,.editor-theme-light .editor-md{background-color:#d2d2d2}.cool-md-editor-wrap .editor-preview{padding-left:5px;height:100%;overflow:hidden;overflow-y:scroll}.cool-md-editor-wrap .editor-preview.hide{display:none}.cool-md-editor-wrap .editor-preview .markdown-body{min-height:100%;border:none}.cool-md-editor-wrap .editor-preview .markdown-body h1>code,.cool-md-editor-wrap .editor-preview .markdown-body h2>code,.cool-md-editor-wrap .editor-preview .markdown-body h3>code,.cool-md-editor-wrap .editor-preview .markdown-body h4>code,.cool-md-editor-wrap .editor-preview .markdown-body h5>code,.cool-md-editor-wrap .editor-preview .markdown-body h6>code,.cool-md-editor-wrap .editor-preview .markdown-body li>code,.cool-md-editor-wrap .editor-preview .markdown-body p>code,.cool-md-editor-wrap .editor-preview .markdown-body ul>code{background-color:#f9f2f4;color:#d02572}.cool-md-editor-wrap .editor-preview .markdown-body a{color:#0269c8;border-bottom:1px solid #d1e9ff}.cool-md-editor-wrap .editor-preview .markdown-body pre{border:1px solid #dce6f0;border-radius:.3rem;background-color:#eee}.cool-md-editor-wrap .editor-preview .markdown-body img{max-width:100%;-webkit-box-shadow:none;box-shadow:none}.editor-theme-dark .editor-preview,.editor-theme-light .editor-preview .preview-bd{background-color:#fff}.cool-md-editor-wrap .editor-status{position:absolute;left:0;bottom:0;width:100%;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:30px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 10px}.cool-md-editor-wrap .editor-status .editor-status-positon{width:80%;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding-right:10px}.cool-md-editor-wrap .editor-status .editor-status-positon .icon-theme{width:45px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;border-left:1px solid transparent;border-right:1px solid transparent;cursor:pointer}.cool-md-editor-wrap .editor-status .editor-status-length{width:20%}.editor-theme-light .editor-status{background-color:#d2d2d2}.editor-theme-light .editor-status .editor-status-positon .icon-theme{border-left-color:#c7bebe;border-right-color:#c7bebe}.editor-theme-dark .editor-status{background-color:#333;color:#fff}.editor-theme-dark .editor-status .editor-status-positon .icon-theme{border-left-color:#fff;border-right-color:#fff}.cool-md-editor-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:100%;height:100%;padding-top:50px;padding-bottom:30px;border-radius:3px;font-size:16px;border-left:1px solid transparent;border-right:1px solid transparent}.cool-md-editor-wrap .editor-md,.cool-md-editor-wrap .editor-preview{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%}.cool-md-editor-wrap.fullscreen{position:fixed;width:100%;height:100%;top:0;left:0;margin:0;z-index:9999}.cool-md-editor-wrap.only-markdown .editor-code,.cool-md-editor-wrap.show-all .editor-code,.cool-md-editor-wrap.show-all .editor-preview{display:block}.cool-md-editor-wrap.only-markdown .editor-preview,.cool-md-editor-wrap.only-preview .editor-code,.cool-md-editor-wrap.only-preview .editor-preview{display:none}.cool-md-editor-wrap.editor-theme-light{border-left-color:#d2d2d2;border-right-color:#d2d2d2}.cool-md-editor-wrap.editor-theme-dark{border-left-color:#333;border-right-color:#333}.margin-tb-zero,.markdown-body ol ol,.markdown-body ol ul,.markdown-body ol ul ol,.markdown-body ol ul ul,.markdown-body ul ol,.markdown-body ul ul,.markdown-body ul ul ol,.markdown-body ul ul ul{margin-top:0;margin-bottom:0}.markdown-body{font-family:Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;color:#333;line-height:1.6;word-wrap:break-word;padding:45px;background:#fff;border:1px solid #ddd;border-radius:0 0 3px 3px}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body *{-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-top:0;margin-bottom:16px}.markdown-body h1{margin:.67em 0;font-size:2.25em;line-height:1.2}.markdown-body h1,.markdown-body h2{padding-bottom:.3em;border-bottom:1px solid #eee}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h4{font-size:1.25em}.markdown-body h5{font-size:1em}.markdown-body h6{font-size:1em;color:#777}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ul,.markdown-body ul ul{list-style-type:circle}.markdown-body ol ul ul,.markdown-body ul ul ul{list-style-type:square}.markdown-body ol{list-style-type:decimal}.markdown-body ul{list-style-type:disc}.markdown-body blockquote{margin-left:0;margin-right:0;padding:0 15px;color:#777;border-left:4px solid #ddd}.markdown-body table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all;border-collapse:collapse;border-spacing:0}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body table td,.markdown-body table th{padding:6px 13px;border:1px solid #ddd}.markdown-body pre{word-wrap:normal;padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f7f7f7;border-radius:3px}.markdown-body pre code{display:inline;max-width:none;padding:0;margin:0;overflow:initial;font-size:100%;line-height:inherit;word-wrap:normal;white-space:pre;border:0;border-radius:3px;background-color:transparent}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body code{font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}.markdown-body code:after,.markdown-body code:before{letter-spacing:-.2em;content:"\A0"}.markdown-body a{color:#4078c0;text-decoration:none;background:transparent}.markdown-body img{max-width:100%;max-height:100%;border-radius:4px;-webkit-box-shadow:0 0 10px #555;box-shadow:0 0 10px #555}.markdown-body strong{font-weight:700}.markdown-body em{font-style:italic}.markdown-body del{text-decoration:line-through}.task-list-item{list-style-type:none}.task-list-item input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;margin:0 .35em .25em -1.6em;vertical-align:middle}.task-list-item input[disabled]{cursor:default}.task-list-item input[type=checkbox],.task-list-item input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body{padding:10px}[class*=" icon-"],[class^=icon-]{font-family:iconfont!important;font-size:100%;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;-moz-osx-font-smoothing:grayscale}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}.hljs{display:block;overflow-x:auto;padding:.5em;background:#23241f}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e} \ No newline at end of file diff --git a/dist/cMdEditor.js b/dist/cMdEditor.js new file mode 100644 index 0000000..c91c32d --- /dev/null +++ b/dist/cMdEditor.js @@ -0,0 +1,20 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CMdEditor=t():e.CMdEditor=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=19)}([function(e,t,n){"use strict";var r=n(5),i="object"==typeof self&&self&&self.Object===Object&&self,a=r.a||i||Function("return this")();t.a=a},function(e,t,n){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),a=/Edge\/(\d+)/.exec(e),o=r||i||a,s=o&&(r?document.documentMode||6:+(a||i)[1]),l=!a&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),d=!a&&/Chrome\//.test(e),u=/Opera\//.test(e),_=/Apple Computer/.test(navigator.vendor),p=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),m=/PhantomJS/.test(e),g=!a&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),f=/Android/.test(e),E=g||f||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),S=g||/Mac/.test(t),h=/\bCrOS\b/.test(e),b=/win/i.test(t),v=u&&e.match(/Version\/(\d*\.\d*)/);v&&(v=Number(v[1])),v&&v>=15&&(u=!1,l=!0);var T=S&&(c||u&&(null==v||v<12.11)),C=n||o&&s>=9;function y(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var O,N=function(e,t){var n=e.className,r=y(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function R(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function A(e,t){return R(e).appendChild(t)}function I(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a=t)return o+(t-a);o+=s-a,o+=n-o%n,a=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:o&&(P=function(e){try{e.select()}catch(e){}});var B=function(){this.id=null,this.f=null,this.time=0,this.handler=k(this.onTimeout,this)};function G(e,t){for(var n=0;n=t)return r+Math.min(o,t-i);if(i+=a-r,r=a+1,(i+=n-i%n)>=t)return r}}var W=[""];function j(e){for(;W.length<=e;)W.push($(W)+" ");return W[e]}function $(e){return e[e.length-1]}function Q(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||Z.test(e))}function ee(e,t){return t?!!(t.source.indexOf("\\w")>-1&&J(e))||t.test(e):J(e)}function te(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function re(e){return e.charCodeAt(0)>=768&&ne.test(e)}function ie(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}var oe=null;function se(e,t,n){var r;oe=null;for(var i=0;it)return i;a.to==t&&(a.from!=a.to&&"before"==n?r=i:oe=i),a.from==t&&(a.from!=a.to&&"before"!=n?r=i:oe=i)}return null!=r?r:oe}var le=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,r=/[Lb1n]/,i=/[1n]/;function a(e,t,n){this.level=e,this.from=t,this.to=n}return function(o,s){var l="ltr"==s?"L":"R";if(0==o.length||"ltr"==s&&!e.test(o))return!1;for(var c,d=o.length,u=[],_=0;_-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function me(e,t){var n=_e(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function Se(e){e.prototype.on=function(e,t){ue(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function he(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function be(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ve(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Te(e){he(e),be(e)}function Ce(e){return e.target||e.srcElement}function ye(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),S&&e.ctrlKey&&1==t&&(t=3),t}var Oe,Ne,Re=function(){if(o&&s<9)return!1;var e=I("div");return"draggable"in e||"dragDrop"in e}();function Ae(e){if(null==Oe){var t=I("span","​");A(e,I("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Oe=t.offsetWidth<=1&&t.offsetHeight>2&&!(o&&s<8))}var n=Oe?I("span","​"):I("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ie(e){if(null!=Ne)return Ne;var t=A(e,document.createTextNode("AخA")),n=O(t,0,1).getBoundingClientRect(),r=O(t,1,2).getBoundingClientRect();return R(e),!(!n||n.left==n.right)&&(Ne=r.right-n.right<3)}var xe,De=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var a=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),o=a.indexOf("\r");-1!=o?(n.push(a.slice(0,o)),t+=o+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},we=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Me="oncopy"in(xe=I("div"))||(xe.setAttribute("oncopy","return;"),"function"==typeof xe.oncopy),Le=null,Pe={},ke={};function Fe(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Pe[e]=t}function Ue(e){if("string"==typeof e&&ke.hasOwnProperty(e))e=ke[e];else if(e&&"string"==typeof e.name&&ke.hasOwnProperty(e.name)){var t=ke[e.name];"string"==typeof t&&(t={name:t}),(e=X(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Ue("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Ue("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Be(e,t){t=Ue(t);var n=Pe[t.name];if(!n)return Be(e,"text/plain");var r=n(e,t);if(Ge.hasOwnProperty(t.name)){var i=Ge[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r["_"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var o in t.modeProps)r[o]=t.modeProps[o];return r}var Ge={};function Ye(e,t){F(t,Ge.hasOwnProperty(e)?Ge[e]:Ge[e]={})}function He(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function qe(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function ze(e,t,n){return!e.startState||e.startState(t,n)}var Ve=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function We(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t=e.first&&tn?et(n,We(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?et(e.line,t):n<0?et(e.line,0):e}(t,We(e,t.line).text.length)}function lt(e,t){for(var n=[],r=0;r=this.string.length},Ve.prototype.sol=function(){return this.pos==this.lineStart},Ve.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ve.prototype.next=function(){if(this.post},Ve.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ve.prototype.skipToEnd=function(){this.pos=this.string.length},Ve.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ve.prototype.backUp=function(e){this.pos-=e},Ve.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ve.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ve.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ve.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ve.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ct=function(e,t){this.state=e,this.lookAhead=t},dt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function ut(e,t,n,r){var i=[e.state.modeGen],a={};bt(e,t.text,e.doc.mode,n,(function(e,t){return i.push(e,t)}),a,r);for(var o=n.state,s=function(r){n.baseTokens=i;var s=e.state.overlays[r],l=1,c=0;n.state=!0,bt(e,t.text,s.mode,n,(function(e,t){for(var n=l;ce&&i.splice(l,1,e,i[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(s.opaque)i.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;ne.options.maxHighlightLength&&He(e.doc.mode,r.state),a=ut(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function pt(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new dt(r,!0,t);var a=function(e,t,n){for(var r,i,a=e.doc,o=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>o;--s){if(s<=a.first)return a.first;var l=We(a,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof ct?c.lookAhead:0)<=a.modeFrontier))return s;var d=U(l.text,null,e.options.tabSize);(null==i||r>d)&&(i=s-1,r=d)}return i}(e,t,n),o=a>r.first&&We(r,a-1).stateAfter,s=o?dt.fromSaved(r,o,a):new dt(r,ze(r.mode),a);return r.iter(a,t,(function(n){mt(e,n.text,s);var r=s.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&rt.start)return a}throw new Error("Mode "+e.name+" failed to advance stream.")}dt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},dt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},dt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},dt.fromSaved=function(e,t,n){return t instanceof ct?new dt(e,He(e.mode,t.state),n,t.lookAhead):new dt(e,He(e.mode,t),n)},dt.prototype.save=function(e){var t=!1!==e?He(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ct(t,this.maxLookAhead):t};var Et=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function St(e,t,n,r){var i,a,o=e.doc,s=o.mode,l=We(o,(t=st(o,t)).line),c=pt(e,t.line,n),d=new Ve(l.text,e.options.tabSize,c);for(r&&(a=[]);(r||d.pose.options.maxHighlightLength?(s=!1,o&&mt(e,t,r,u.pos),u.pos=t.length,l=null):l=ht(ft(n,u,r.state,_),a),_){var p=_[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||d!=l){for(;c=t:a.to>t);(r||(r=[])).push(new Ct(o,a.from,s?null:a.to))}}return r}(n,i,o),l=function(e,t,n){var r;if(e)for(var i=0;i=t:a.to>t)||a.from==t&&"bookmark"==o.type&&(!n||a.marker.insertLeft)){var s=null==a.from||(o.inclusiveLeft?a.from<=t:a.from0&&s)for(var h=0;ht)&&(!n||wt(n,a.marker)<0)&&(n=a.marker)}return n}function Ft(e,t,n,r,i){var a=We(e,t),o=Tt&&a.markedSpans;if(o)for(var s=0;s=0&&u<=0||d<=0&&u>=0)&&(d<=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?tt(c.to,n)>=0:tt(c.to,n)>0)||d>=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?tt(c.from,r)<=0:tt(c.from,r)<0)))return!0}}}function Ut(e){for(var t;t=Lt(e);)e=t.find(-1,!0).line;return e}function Bt(e,t){var n=We(e,t),r=Ut(n);return n==r?t:Ke(r)}function Gt(e,t){if(t>e.lastLine())return t;var n,r=We(e,t);if(!Yt(e,r))return t;for(;n=Pt(r);)r=n.find(1,!0).line;return Ke(r)+1}function Yt(e,t){var n=Tt&&t.markedSpans;if(n)for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Wt=function(e,t,n){this.text=e,It(this,t),this.height=n?n(this):1};function jt(e){e.parent=null,At(e)}Wt.prototype.lineNo=function(){return Ke(this)},Se(Wt);var $t={},Qt={};function Kt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Qt:$t;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Xt(e,t){var n=x("span",null,null,l?"padding-right: .1px":null),r={pre:x("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var a=i?t.rest[i-1]:t.line,o=void 0;r.pos=0,r.addToken=Jt,Ie(e.display.measure)&&(o=ce(a,e.doc.direction))&&(r.addToken=en(r.addToken,o)),r.map=[],nn(a,r,_t(e,a,t!=e.display.externalMeasured&&Ke(a))),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=L(a.styleClasses.bgClass,r.bgClass||"")),a.styleClasses.textClass&&(r.textClass=L(a.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Ae(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var s=r.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return me(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=L(r.pre.className,r.textClass||"")),r}function Zt(e){var t=I("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,n,r,i,a,l){if(t){var c,d=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",i=0;ic&&u.from<=c);_++);if(u.to>=d)return e(n,r,i,a,o,s,l);e(n,r.slice(0,u.to-c),i,a,null,s,l),a=null,r=r.slice(u.to-c),c=u.to}}}function tn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function nn(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(r)for(var o,s,l,c,d,u,_,p=i.length,m=0,g=1,f="",E=0;;){if(E==m){l=c=d=s="",_=null,u=null,E=1/0;for(var S=[],h=void 0,b=0;bm||T.collapsed&&v.to==m&&v.from==m)){if(null!=v.to&&v.to!=m&&E>v.to&&(E=v.to,c=""),T.className&&(l+=" "+T.className),T.css&&(s=(s?s+";":"")+T.css),T.startStyle&&v.from==m&&(d+=" "+T.startStyle),T.endStyle&&v.to==E&&(h||(h=[])).push(T.endStyle,v.to),T.title&&((_||(_={})).title=T.title),T.attributes)for(var C in T.attributes)(_||(_={}))[C]=T.attributes[C];T.collapsed&&(!u||wt(u.marker,T)<0)&&(u=v)}else v.from>m&&E>v.from&&(E=v.from)}if(h)for(var y=0;y=p)break;for(var N=Math.min(p,E);;){if(f){var R=m+f.length;if(!u){var A=R>N?f.slice(0,N-m):f;t.addToken(t,A,o?o+l:l,d,m+A.length==E?c:"",s,_)}if(R>=N){f=f.slice(N-m),m=N;break}m=R,d=""}f=i.slice(a,a=n[g++]),o=Kt(n[g++],t.cm.options)}}else for(var I=1;In)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function xn(e,t,n,r){return Mn(e,wn(e,t),n,r)}function Dn(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&a.push((l.bottom+c.top)/2-n.top)}}a.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(a=function(e,t,n,r){var i,a=kn(t.map,n,r),l=a.node,c=a.start,d=a.end,u=a.collapse;if(3==l.nodeType){for(var _=0;_<4;_++){for(;c&&re(t.line.text.charAt(a.coverStart+c));)--c;for(;a.coverStart+d1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,i))}else{var p;c>0&&(u=r="right"),i=e.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==r?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!i||!i.left&&!i.right)){var m=l.parentNode.getClientRects()[0];i=m?{left:m.left,right:m.left+ir(e.display),top:m.top,bottom:m.bottom}:Pn}for(var g=i.top-t.rect.top,f=i.bottom-t.rect.top,E=(g+f)/2,S=t.view.measure.heights,h=0;ht)&&(i=(a=l-s)-1,t>=l&&(o="right")),null!=i){if(r=e[c+2],s==l&&n==(r.insertLeft?"left":"right")&&(o=n),"left"==n&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],o="left";if("right"==n&&i==l-s)for(;c=0&&(n=e[i]).left==n.right;i--);return n}function Un(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(l=r.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function d(e,t,n){return o(n?e-1:e,1==s[t].level!=n)}var u=se(s,l,c),_=oe,p=d(l,u,"before"==c);return null!=_&&(p.other=d(l,_,"before"!=c)),p}function $n(e,t){var n=0;t=st(e.doc,t),e.options.lineWrapping||(n=ir(e.display)*t.ch);var r=We(e.doc,t.line),i=qt(r)+Cn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Qn(e,t,n,r,i){var a=et(e,t,n);return a.xRel=i,r&&(a.outside=r),a}function Kn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Qn(r.first,0,null,-1,-1);var i=Xe(r,n),a=r.first+r.size-1;if(i>a)return Qn(r.first+r.size-1,We(r,a).text.length,null,1,1);t<0&&(t=0);for(var o=We(r,i);;){var s=er(e,o,i,t,n),l=kt(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==i)return c;o=We(r,i=c.line)}}function Xn(e,t,n,r){r-=qn(t);var i=t.text.length,a=ae((function(t){return Mn(e,n,t-1).bottom<=r}),i,0);return{begin:a,end:i=ae((function(t){return Mn(e,n,t).top>r}),a,i)}}function Zn(e,t,n,r){return n||(n=wn(e,t)),Xn(e,t,n,zn(e,t,Mn(e,n,r),"line").top)}function Jn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function er(e,t,n,r,i){i-=qt(t);var a=wn(e,t),o=qn(t),s=0,l=t.text.length,c=!0,d=ce(t,e.doc.direction);if(d){var u=(e.options.lineWrapping?nr:tr)(e,t,n,a,d,r,i);s=(c=1!=u.level)?u.from:u.to-1,l=c?u.to:u.from-1}var _,p,m=null,g=null,f=ae((function(t){var n=Mn(e,a,t);return n.top+=o,n.bottom+=o,!!Jn(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(m=t,g=n),!0)}),s,l),E=!1;if(g){var S=r-g.left=b.bottom?1:0}return Qn(n,f=ie(t.text,f,1),p,E,r-_)}function tr(e,t,n,r,i,a,o){var s=ae((function(s){var l=i[s],c=1!=l.level;return Jn(jn(e,et(n,c?l.to:l.from,c?"before":"after"),"line",t,r),a,o,!0)}),0,i.length-1),l=i[s];if(s>0){var c=1!=l.level,d=jn(e,et(n,c?l.from:l.to,c?"after":"before"),"line",t,r);Jn(d,a,o,!0)&&d.top>o&&(l=i[s-1])}return l}function nr(e,t,n,r,i,a,o){var s=Xn(e,t,r,o),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var d=null,u=null,_=0;_=c||p.to<=l)){var m=Mn(e,r,1!=p.level?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=mg)&&(d=p,u=g)}}return d||(d=i[i.length-1]),d.fromc&&(d={from:d.from,to:c,level:d.level}),d}function rr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ln){Ln=I("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Ln.appendChild(document.createTextNode("x")),Ln.appendChild(I("br"));Ln.appendChild(document.createTextNode("x"))}A(e.measure,Ln);var n=Ln.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),R(e.measure),n||1}function ir(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=I("span","xxxxxxxxxx"),n=I("pre",[t],"CodeMirror-line-like");A(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function ar(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=e.display.gutterSpecs[o].className;n[s]=a.offsetLeft+a.clientLeft+i,r[s]=a.clientWidth}return{fixedPos:or(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function or(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function sr(e){var t=rr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/ir(e.display)-3);return function(i){if(Yt(e.doc,i))return 0;var a=0;if(i.widgets)for(var o=0;o0&&(l=We(e.doc,c.line).text).length==c.ch){var d=U(l,l.length,e.options.tabSize)-l.length;c=et(c.line,Math.max(0,Math.round((a-On(e.display).left)/ir(e.display))-d))}return c}function dr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Tt&&Bt(e.doc,t)i.viewFrom?pr(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)pr(e);else if(t<=i.viewFrom){var a=mr(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):pr(e)}else if(n>=i.viewTo){var o=mr(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):pr(e)}else{var s=mr(e,t,t,-1),l=mr(e,n,n+r,1);s&&l?(i.view=i.view.slice(0,s.index).concat(an(e,s.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):pr(e)}var c=i.externalMeasured;c&&(n=i.lineN&&t=r.viewTo)){var a=r.view[dr(e,t)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==G(o,n)&&o.push(n)}}}function pr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function mr(e,t,n,r){var i,a=dr(e,t),o=e.display.view;if(!Tt||n==e.doc.first+e.doc.size)return{index:a,lineN:n};for(var s=e.display.viewFrom,l=0;l0){if(a==o.length-1)return null;i=s+o[a].size-t,a++}else i=s-t;t+=i,n+=i}for(;Bt(e.doc,n)!=n;){if(a==(r<0?0:o.length-1))return null;n+=r*o[a-(r<0?1:0)].size,a+=r}return{index:a,lineN:n}}function gr(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||s.to().linet||t==n&&o.to==t)&&(r(Math.max(o.from,t),Math.min(o.to,n),1==o.level?"rtl":"ltr",a),i=!0)}i||r(t,n,"ltr")}(g,n||0,null==r?_:r,(function(e,t,i,u){var f="ltr"==i,E=p(e,f?"left":"right"),S=p(t-1,f?"right":"left"),h=null==n&&0==e,b=null==r&&t==_,v=0==u,T=!g||u==g.length-1;if(S.top-E.top<=3){var C=(c?b:h)&&T,y=(c?h:b)&&v?s:(f?E:S).left,O=C?l:(f?S:E).right;d(y,E.top,O-y,E.bottom)}else{var N,R,A,I;f?(N=c&&h&&v?s:E.left,R=c?l:m(e,i,"before"),A=c?s:m(t,i,"after"),I=c&&b&&T?l:S.right):(N=c?m(e,i,"before"):s,R=!c&&h&&v?l:E.right,A=!c&&b&&T?s:S.left,I=c?m(t,i,"after"):l),d(N,E.top,R-N,E.bottom),E.bottom0?t.blinker=setInterval((function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Tr(e){e.state.focused||(e.display.input.focus(),yr(e))}function Cr(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Or(e))}),100)}function yr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(me(e,"focus",e,t),e.state.focused=!0,M(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),vr(e))}function Or(e,t){e.state.delayingBlurEvent||(e.state.focused&&(me(e,"blur",e,t),e.state.focused=!1,N(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Nr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r.005||_<-.005)&&(Qe(i.line,l),Rr(i.line),i.rest))for(var p=0;pe.display.sizerWidth){var m=Math.ceil(c/ir(e.display));m>e.display.maxLineLength&&(e.display.maxLineLength=m,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function Rr(e){if(e.widgets)for(var t=0;t=o&&(a=Xe(t,qt(We(t,l))-e.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function Ir(e,t){var n=e.display,r=rr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,a=An(e),o={};t.bottom-t.top>a&&(t.bottom=t.top+a);var s=e.doc.height+yn(n),l=t.tops-r;if(t.topi+a){var d=Math.min(t.top,(c?s:t.bottom)-a);d!=i&&(o.scrollTop=d)}var u=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,_=Rn(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),p=t.right-t.left>_;return p&&(t.right=t.left+_),t.left<10?o.scrollLeft=0:t.left_+u-3&&(o.scrollLeft=t.right+(p?0:10)-_),o}function xr(e,t){null!=t&&(Mr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Dr(e){Mr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function wr(e,t,n){null==t&&null==n||Mr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Mr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Lr(e,$n(e,t.from),$n(e,t.to),t.margin))}function Lr(e,t,n,r){var i=Ir(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});wr(e,i.scrollLeft,i.scrollTop)}function Pr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||li(e,{top:t}),kr(e,t,!0),n&&li(e),ri(e,100))}function kr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Fr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,ui(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Ur(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+yn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Nn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Br=function(e,t,n){this.cm=n;var r=this.vert=I("div",[I("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=I("div",[I("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),ue(r,"scroll",(function(){r.clientHeight&&t(r.scrollTop,"vertical")})),ue(i,"scroll",(function(){i.clientWidth&&t(i.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Br.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},Br.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Br.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Br.prototype.zeroWidthHack=function(){var e=S&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new B,this.disableVert=new B},Br.prototype.enableZeroWidthBar=function(e,t,n){e.style.pointerEvents="auto",t.set(1e3,(function r(){var i=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,r)}))},Br.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Gr=function(){};function Yr(e,t){t||(t=Ur(e));var n=e.display.barWidth,r=e.display.barHeight;Hr(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Nr(e),Hr(e,Ur(e)),n=e.display.barWidth,r=e.display.barHeight}function Hr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Gr.prototype.update=function(){return{bottom:0,right:0}},Gr.prototype.setScrollLeft=function(){},Gr.prototype.setScrollTop=function(){},Gr.prototype.clear=function(){};var qr={native:Br,null:Gr};function zr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&N(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new qr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ue(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?Fr(e,t):Pr(e,t)}),e),e.display.scrollbars.addClass&&M(e.display.wrapper,e.display.scrollbars.addClass)}var Vr=0;function Wr(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vr},t=e.curOp,on?on.ops.push(t):t.ownsGroup=on={ops:[t],delayedCallbacks:[]}}function jr(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ai(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Qr(e){e.updatedDisplay=e.mustUpdate&&oi(e.cm,e.update)}function Kr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Nr(t),e.barMeasure=Ur(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=xn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Nn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Rn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Xr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!m){var a=I("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Cn(e.display))+"px;\n height: "+(t.bottom-t.top+Nn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(i),e.display.lineSpace.removeChild(a)}}}(t,function(e,t,n,r){var i;null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var a=0;a<5;a++){var o=!1,s=jn(e,t),l=n&&n!=t?jn(e,n):s,c=Ir(e,i={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-r,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+r}),d=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=c.scrollTop&&(Pr(e,c.scrollTop),Math.abs(e.doc.scrollTop-d)>1&&(o=!0)),null!=c.scrollLeft&&(Fr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return i}(t,st(r,e.scrollToPos.from),st(r,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(i)for(var o=0;o=e.display.viewTo)){var n=+new Date+e.options.workTime,r=pt(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(a){if(r.line>=e.display.viewFrom){var o=a.styles,s=a.text.length>e.options.maxHighlightLength?He(t.mode,r.state):null,l=ut(e,a,r,!0);s&&(r.state=s),a.styles=l.styles;var c=a.styleClasses,d=l.classes;d?a.styleClasses=d:c&&(a.styleClasses=null);for(var u=!o||o.length!=a.styles.length||c!=d&&(!c||!d||c.bgClass!=d.bgClass||c.textClass!=d.textClass),_=0;!u&&_n)return ri(e,e.options.workDelay),!0})),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Jr(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==gr(e))return!1;_i(e)&&(pr(e),t.dims=ar(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),o=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFromo&&n.viewTo-o<20&&(o=Math.min(i,n.viewTo)),Tt&&(a=Bt(e.doc,a),o=Gt(e.doc,o));var s=a!=n.viewFrom||o!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=an(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=an(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,dr(e,n)))),r.viewTo=n}(e,a,o),n.viewOffset=qt(We(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=gr(e);if(!s&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var d=function(e){if(e.hasFocus())return null;var t=w();if(!t||!D(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&D(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,o=a.firstChild;function s(t){var n=t.nextSibling;return l&&S&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,d=r.viewFrom,u=0;u-1&&(p=!1),dn(e,_,d,n)),p&&(R(_.lineNumber),_.lineNumber.appendChild(document.createTextNode(Je(e.options,d)))),o=_.node.nextSibling}else{var m=En(e,_,d,n);a.insertBefore(m,o)}d+=_.size}for(;o;)o=s(o)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=w()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(d),R(n.cursorDiv),R(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ri(e,400)),n.updateLineNumbers=null,!0}function si(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Rn(e))r&&(t.visible=Ar(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+yn(e.display)-An(e),n.top)}),t.visible=Ar(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!oi(e,t))break;Nr(e);var i=Ur(e);fr(e),Yr(e,i),di(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function li(e,t){var n=new ai(e,t);if(oi(e,n)){Nr(e),si(e,n);var r=Ur(e);fr(e),Yr(e,r),di(e,r),n.finish()}}function ci(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function di(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Nn(e)+"px"}function ui(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=or(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+"px",o=0;os.clientWidth,d=s.scrollHeight>s.clientHeight;if(i&&c||a&&d){if(a&&S&&l)e:for(var _=t.target,p=o.view;_!=s;_=_.parentNode)for(var m=0;m=0&&tt(e,r.to())<=0)return n}return-1};var Ci=function(e,t){this.anchor=e,this.head=t};function yi(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort((function(e,t){return tt(e.from(),t.from())})),n=G(t,i);for(var a=1;a0:l>=0){var c=at(s.from(),o.from()),d=it(s.to(),o.to()),u=s.empty()?o.from()==o.head:s.from()==s.head;a<=n&&--n,t.splice(--a,2,new Ci(u?d:c,u?c:d))}}return new Ti(t,n)}function Oi(e,t){return new Ti([new Ci(e,t||e)],0)}function Ni(e){return e.text?et(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Ri(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Ni(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Ni(t).ch-t.to.ch),et(n,r)}function Ai(e,t){for(var n=[],r=0;r1&&e.remove(s.line+1,m-1),e.insert(s.line+1,E)}ln(e,"change",e,t)}function Li(e,t,n){!function e(r,i,a){if(r.linked)for(var o=0;os-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(a=function(e,t){return t?(Bi(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(i,i.lastOp==r)))o=$(a.changes),0==tt(t.from,t.to)&&0==tt(t.from,o.to)?o.to=Ni(t):a.changes.push(Ui(e,t));else{var l=$(i.done);for(l&&l.ranges||Hi(e.sel,i.done),a={changes:[Ui(e,t)],generation:i.generation},i.done.push(a);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,o||me(e,"historyAdded")}function Yi(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,a,$(i.done),t))?i.done[i.done.length-1]=t:Hi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&!1!==r.clearRedo&&Bi(i.undone)}function Hi(e,t){var n=$(t);n&&n.ranges&&n.equals(e)||t.push(e)}function qi(e,t,n,r){var i=t["spans_"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),(function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[a]=n.markedSpans),++a}))}function zi(e){if(!e)return null;for(var t,n=0;n-1&&($(s)[u]=c[u],delete c[u])}}}return r}function ji(e,t,n,r){if(r){var i=e.anchor;if(n){var a=tt(t,i)<0;a!=tt(n,i)<0?(i=t,t=n):a!=tt(t,n)<0&&(t=n)}return new Ci(i,t)}return new Ci(n||t,t)}function $i(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Ji(e,new Ti([ji(e.sel.primary(),t,n,i)],0),r)}function Qi(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a=t.ch:s.to>t.ch))){if(i&&(me(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(n){var u=l.find(r<0?1:-1),_=void 0;if((r<0?d:c)&&(u=oa(e,u,-r,u&&u.line==t.line?a:null)),u&&u.line==t.line&&(_=tt(u,n))&&(r<0?_<0:_>0))return ia(e,u,t,r,i)}var p=l.find(r<0?-1:1);return(r<0?c:d)&&(p=oa(e,p,r,p.line==t.line?a:null)),p?ia(e,p,t,r,i):null}}return t}function aa(e,t,n,r,i){var a=r||1,o=ia(e,t,n,a,i)||!i&&ia(e,t,n,a,!0)||ia(e,t,n,-a,i)||!i&&ia(e,t,n,-a,!0);return o||(e.cantEdit=!0,et(e.first,0))}function oa(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:n>0&&t.ch==(r||We(e,t.line)).text.length?t.line0)){var d=[l,1],u=tt(c.from,s.from),_=tt(c.to,s.to);(u<0||!o.inclusiveLeft&&!u)&&d.push({from:c.from,to:s.from}),(_>0||!o.inclusiveRight&&!_)&&d.push({from:s.to,to:c.to}),i.splice.apply(i,d),l+=d.length-3}}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)da(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else da(e,t)}}function da(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var n=Ai(e,t);Gi(e,t,n,e.cm?e.cm.curOp.id:NaN),pa(e,t,n,Nt(e,t));var r=[];Li(e,(function(e,n){n||-1!=G(r,e.history)||(Ea(e.history,t),r.push(e.history)),pa(e,t,null,Nt(e,t))}))}}function ua(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var i,a=e.history,o=e.sel,s="undo"==t?a.done:a.undone,l="undo"==t?a.undone:a.done,c=0;c=0;--p){var m=_(p);if(m)return m.v}}}}function _a(e,t){if(0!=t&&(e.first+=t,e.sel=new Ti(Q(e.sel.ranges,(function(e){return new Ci(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){ur(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linea&&(t={from:t.from,to:et(a,We(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=je(e,t.from,t.to),n||(n=Ai(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,a=t.from,o=t.to,s=!1,l=a.line;e.options.lineWrapping||(l=Ke(Ut(We(r,a.line))),r.iter(l,o.line+1,(function(e){if(e==i.maxLine)return s=!0,!0}))),r.sel.contains(t.from,t.to)>-1&&fe(e),Mi(r,t,n,sr(e)),e.options.lineWrapping||(r.iter(l,a.line+t.text.length,(function(e){var t=zt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=We(e,r).stateAfter;if(i&&(!(i instanceof ct)||r+i.lookAhead1||!(this.children[0]instanceof ha))){var s=[];this.collapse(s),this.children=[new ha(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var o=i.lines.length%25+25,s=o;s10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=x("span",[a.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Ft(e,t.line,t,n,a)||t.line!=n.line&&Ft(e,n.line,t,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Tt=!0}a.addToHistory&&Gi(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(e){c&&a.collapsed&&!c.options.lineWrapping&&Ut(e)==c.display.maxLine&&(s=!0),a.collapsed&&l!=t.line&&Qe(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Ct(a,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l})),a.collapsed&&e.iter(t.line,n.line+1,(function(t){Yt(e,t)&&Qe(t,0)})),a.clearOnEnter&&ue(a,"beforeCursorEnter",(function(){return a.clear()})),a.readOnly&&(vt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++Ca,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)ur(c,t.line,n.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var d=t.line;d<=n.line;d++)_r(c,d,"text");a.atomic&&na(c.doc),ln(c,"markerAdded",c,a)}return a}ya.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Wr(e),Ee(this,"clear")){var n=this.find();n&&ln(this,"clear",n.from,n.to)}for(var r=null,i=null,a=0;ae.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=d,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&ur(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&na(e.doc)),e&&ln(e,"markerCleared",e,this,r,i),t&&jr(e),this.parent&&this.parent.clear()}},ya.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;l--)ca(this,r[l]);s?Zi(this,s):this.cm&&Dr(this.cm)})),undo:ni((function(){ua(this,"undo")})),redo:ni((function(){ua(this,"redo")})),undoSelection:ni((function(){ua(this,"undo",!0)})),redoSelection:ni((function(){ua(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=st(this,e),t=st(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,(function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&i!=e.line||null!=l.from&&i==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++i})),r},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=a,++n})),st(this,et(n,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var u=e.dataTransfer.getData("Text");if(u){var _;if(t.state.draggingText&&!t.state.draggingText.copy&&(_=t.listSelections()),ea(t.doc,Oi(n,n)),_)for(var p=0;p<_.length;++p)ma(t.doc,"",_[p].anchor,_[p].head,"drag");t.replaceSelection(u,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Ma(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function La(e){if(document.getElementsByClassName){for(var t=document.getElementsByClassName("CodeMirror"),n=[],r=0;r=0;t--)ma(e.doc,"",r[t].from,r[t].to,"+delete");Dr(e)}))}function Xa(e,t,n){var r=ie(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Za(e,t,n){var r=Xa(e,t.ch,n);return null==r?null:new et(t.line,r,n<0?"after":"before")}function Ja(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var a=ce(n,t.doc.direction);if(a){var o,s=i<0?$(a):a[0],l=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=wn(t,n);o=i<0?n.text.length-1:0;var d=Mn(t,c,o).top;o=ae((function(e){return Mn(t,c,e).top==d}),i<0==(1==s.level)?s.from:s.to-1,o),"before"==l&&(o=Xa(n,o,1))}else o=i<0?s.to:s.from;return new et(r,o,l)}}return new et(r,i<0?n.text.length:0,i<0?"before":"after")}Ha.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Ha.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Ha.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Ha.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Ha.default=S?Ha.macDefault:Ha.pcDefault;var eo={selectAll:sa,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),H)},killLine:function(e){return Ka(e,(function(t){if(t.empty()){var n=We(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var o=We(e.doc,i.line-1).text;o&&(i=new et(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+o.charAt(o.length-1),et(i.line-1,o.length-1),i,"+transpose"))}n.push(new Ci(i,i))}e.setSelections(n)}))},newlineAndIndent:function(e){return Jr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(tt((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,a=!1,c=ei(e,(function(t){l&&(i.scroller.draggable=!1),e.state.draggingText=!1,pe(i.wrapper.ownerDocument,"mouseup",c),pe(i.wrapper.ownerDocument,"mousemove",d),pe(i.scroller,"dragstart",u),pe(i.scroller,"drop",c),a||(he(t),r.addNew||$i(e.doc,n,null,null,r.extend),l||o&&9==s?setTimeout((function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()}),20):i.input.focus())})),d=function(e){a=a||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},u=function(){return a=!0};l&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),ue(i.wrapper.ownerDocument,"mouseup",c),ue(i.wrapper.ownerDocument,"mousemove",d),ue(i.scroller,"dragstart",u),ue(i.scroller,"drop",c),Cr(e),setTimeout((function(){return i.input.focus()}),20)}(e,r,t,a):function(e,t,n,r){var i=e.display,a=e.doc;he(t);var o,s,l=a.sel,c=l.ranges;if(r.addNew&&!r.extend?(s=a.sel.contains(n),o=s>-1?c[s]:new Ci(n,n)):(o=a.sel.primary(),s=a.sel.primIndex),"rectangle"==r.unit)r.addNew||(o=new Ci(n,n)),n=cr(e,t,!0,!0),s=-1;else{var d=Eo(e,n,r.unit);o=r.extend?ji(o,d.anchor,d.head,r.extend):d}r.addNew?-1==s?(s=c.length,Ji(a,yi(e,c.concat([o]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==r.unit&&!r.extend?(Ji(a,yi(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),l=a.sel):Ki(a,s,o,q):(s=0,Ji(a,new Ti([o],0),q),l=a.sel);var u=n;function _(t){if(0!=tt(u,t))if(u=t,"rectangle"==r.unit){for(var i=[],c=e.options.tabSize,d=U(We(a,n.line).text,n.ch,c),_=U(We(a,t.line).text,t.ch,c),p=Math.min(d,_),m=Math.max(d,_),g=Math.min(n.line,t.line),f=Math.min(e.lastLine(),Math.max(n.line,t.line));g<=f;g++){var E=We(a,g).text,S=V(E,p,c);p==m?i.push(new Ci(et(g,S),et(g,S))):E.length>S&&i.push(new Ci(et(g,S),et(g,V(E,m,c))))}i.length||i.push(new Ci(n,n)),Ji(a,yi(e,l.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var h,b=o,v=Eo(e,t,r.unit),T=b.anchor;tt(v.anchor,T)>0?(h=v.head,T=at(b.from(),v.anchor)):(h=v.anchor,T=it(b.to(),v.head));var C=l.ranges.slice(0);C[s]=function(e,t){var n=t.anchor,r=t.head,i=We(e.doc,n.line);if(0==tt(n,r)&&n.sticky==r.sticky)return t;var a=ce(i);if(!a)return t;var o=se(a,n.ch,n.sticky),s=a[o];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=o+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return t;if(r.line!=n.line)l=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var d=se(a,r.ch,r.sticky),u=d-o||(r.ch-n.ch)*(1==s.level?-1:1);l=d==c-1||d==c?u<0:u>0}var _=a[c+(l?-1:0)],p=l==(1==_.level),m=p?_.from:_.to,g=p?"after":"before";return n.ch==m&&n.sticky==g?t:new Ci(new et(n.line,m,g),r)}(e,new Ci(st(a,T),h)),Ji(a,yi(e,C,s),q)}}var p=i.wrapper.getBoundingClientRect(),m=0;function g(t){e.state.selectingText=!1,m=1/0,t&&(he(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",f),pe(i.wrapper.ownerDocument,"mouseup",E),a.history.lastSelOrigin=null}var f=ei(e,(function(t){0!==t.buttons&&ye(t)?function t(n){var o=++m,s=cr(e,n,!0,"rectangle"==r.unit);if(s)if(0!=tt(s,u)){e.curOp.focus=w(),_(s);var l=Ar(i,a);(s.line>=l.to||s.linep.bottom?20:0;c&&setTimeout(ei(e,(function(){m==o&&(i.scroller.scrollTop+=c,t(n))})),50)}}(t):g(t)})),E=ei(e,g);e.state.selectingText=E,ue(i.wrapper.ownerDocument,"mousemove",f),ue(i.wrapper.ownerDocument,"mouseup",E)}(e,r,t,a)}(t,r,a,e):Ce(e)==n.scroller&&he(e):2==i?(r&&$i(t.doc,r),setTimeout((function(){return n.input.focus()}),20)):3==i&&(C?t.display.input.onContextMenu(e):Cr(t)))}}function Eo(e,t,n){if("char"==n)return new Ci(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Ci(et(t.line,0),st(e.doc,et(t.line+1,0)));var r=n(e,t);return new Ci(r.from,r.to)}function So(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&he(t);var o=e.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!Ee(e,n))return ve(t);a-=s.top-o.viewOffset;for(var l=0;l=i)return me(e,n,e,Xe(e.doc,a),e.display.gutterSpecs[l].className,t),ve(t)}}function ho(e,t){return So(e,t,"gutterClick",!0)}function bo(e,t){Tn(e.display,t)||function(e,t){return!!Ee(e,"gutterContextMenu")&&So(e,t,"gutterContextMenu",!1)}(e,t)||ge(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function vo(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Gn(e)}go.prototype.compare=function(e,t,n){return this.time+400>e&&0==tt(t,this.pos)&&n==this.button};var To={toString:function(){return"CodeMirror.Init"}},Co={},yo={};function Oo(e,t,n){if(!t!=!(n&&n!=To)){var r=e.display.dragFunctions,i=t?ue:pe;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function No(e){e.options.lineWrapping?(M(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(N(e.display.wrapper,"CodeMirror-wrap"),Vt(e)),lr(e),ur(e),Gn(e),setTimeout((function(){return Yr(e)}),100)}function Ro(e,t){var n=this;if(!(this instanceof Ro))return new Ro(e,t);this.options=t=t?F(t):{},F(Co,t,!1);var r=t.value;"string"==typeof r?r=new xa(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new Ro.inputStyles[t.inputStyle](this),a=this.display=new fi(e,r,i,t);for(var c in a.wrapper.CodeMirror=this,vo(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),zr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new B,keySeq:null,specialChars:null},t.autofocus&&!E&&a.input.focus(),o&&s<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;ue(t.scroller,"mousedown",ei(e,fo)),ue(t.scroller,"dblclick",o&&s<11?ei(e,(function(t){if(!ge(e,t)){var n=cr(e,t);if(n&&!ho(e,t)&&!Tn(e.display,t)){he(t);var r=e.findWordAt(n);$i(e.doc,r.anchor,r.head)}}})):function(t){return ge(e,t)||he(t)}),ue(t.scroller,"contextmenu",(function(t){return bo(e,t)})),ue(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||bo(e,n)}));var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(r=t.activeTouch).end=+new Date)}function a(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}ue(t.scroller,"touchstart",(function(i){if(!ge(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!ho(e,i)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-r.end<=300?r:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}})),ue(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),ue(t.scroller,"touchend",(function(n){var r=t.activeTouch;if(r&&!Tn(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var o,s=e.coordsChar(t.activeTouch,"page");o=!r.prev||a(r,r.prev)?new Ci(s,s):!r.prev.prev||a(r,r.prev.prev)?e.findWordAt(s):new Ci(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),he(n)}i()})),ue(t.scroller,"touchcancel",i),ue(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Pr(e,t.scroller.scrollTop),Fr(e,t.scroller.scrollLeft,!0),me(e,"scroll",e))})),ue(t.scroller,"mousewheel",(function(t){return vi(e,t)})),ue(t.scroller,"DOMMouseScroll",(function(t){return vi(e,t)})),ue(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){ge(e,t)||Te(t)},over:function(t){ge(e,t)||(function(e,t){var n=cr(e,t);if(n){var r=document.createDocumentFragment();Sr(e,n,r),e.display.dragCursor||(e.display.dragCursor=I("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),A(e.display.dragCursor,r)}}(e,t),Te(t))},start:function(t){return function(e,t){if(o&&(!e.state.draggingText||+new Date-Da<100))Te(t);else if(!ge(e,t)&&!Tn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!_)){var n=I("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",u&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),u&&n.parentNode.removeChild(n)}}(e,t)},drop:ei(e,wa),leave:function(t){ge(e,t)||Ma(e)}};var l=t.input.getField();ue(l,"keyup",(function(t){return uo.call(e,t)})),ue(l,"keydown",ei(e,co)),ue(l,"keypress",ei(e,_o)),ue(l,"focus",(function(t){return yr(e,t)})),ue(l,"blur",(function(t){return Or(e,t)}))}(this),ka(),Wr(this),this.curOp.forceUpdate=!0,Pi(this,r),t.autofocus&&!E||this.hasFocus()?setTimeout(k(yr,this),20):Or(this),yo)yo.hasOwnProperty(c)&&yo[c](this,t[c],To);_i(this),t.finishInit&&t.finishInit(this);for(var d=0;d150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>a.first?U(We(a,t-1).text,null,o):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var u="",_=0;if(e.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)_+=o,u+="\t";if(_o,l=De(t),c=null;if(s&&r.ranges.length>1)if(xo&&xo.text.join("\n")==t){if(r.ranges.length%xo.text.length==0){c=[];for(var d=0;d=0;_--){var p=r.ranges[_],m=p.from(),g=p.to();p.empty()&&(n&&n>0?m=et(m.line,m.ch-n):e.state.overwrite&&!s?g=et(g.line,Math.min(We(a,g.line).text.length,g.ch+$(l).length)):s&&xo&&xo.lineWise&&xo.text.join("\n")==t&&(m=g=et(m.line,0)));var f={from:m,to:g,text:c?c[_%c.length]:l,origin:i||(s?"paste":e.state.cutIncoming>o?"cut":"+input")};ca(e.doc,f),ln(e,"inputRead",e,f)}t&&!s&&Lo(e,t),Dr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=u),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Mo(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Jr(t,(function(){return wo(t,n,0,null,"paste")})),!0}function Lo(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Io(e,i.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(We(e.doc,i.head.line).text.slice(0,i.head.ch))&&(o=Io(e,i.head.line,"smart"));o&&ln(e,"electricInput",e,i.head.line)}}}function Po(e){for(var t=[],n=[],r=0;r=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var a=se(i,n.ch,n.sticky),o=i[a];if("ltr"==e.doc.direction&&o.level%2==0&&(r>0?o.to>n.ch:o.from=o.from&&_>=d.begin)){var p=u?"before":"after";return new et(n.line,_,p)}}var m=function(e,t,r){for(var a=function(e,t){return t?new et(n.line,l(e,1),"before"):new et(n.line,e,"after")};e>=0&&e0==(1!=o.level),c=s?r.begin:l(r.end,-1);if(o.from<=c&&c0?d.end:l(d.begin,-1);return null==f||r>0&&f==t.text.length||!(g=m(r>0?0:i.length-1,r,c(f)))?null:g}(e.cm,s,t,n):Za(s,t,n))){if(r||(o=t.line+l)=e.first+e.size||(t=new et(o,t.ch,t.sticky),!(s=We(e,o))))return!1;t=Ja(i,e.cm,s,t.line,l)}else t=a;return!0}if("char"==r)c();else if("column"==r)c(!0);else if("word"==r||"group"==r)for(var d=null,u="group"==r,_=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||c(!p);p=!1){var m=s.text.charAt(t.ch)||"\n",g=ee(m,_)?"w":u&&"\n"==m?"n":!u||/\s/.test(m)?null:"p";if(!u||p||g||(g="s"),d&&d!=g){n<0&&(n=1,c(),t.sticky="after");break}if(g&&(d=g),n>0&&!c(!p))break}var f=aa(e,t,a,o,!0);return nt(a,f)&&(f.hitSide=!0),f}function Bo(e,t,n,r){var i,a,o=e.doc,s=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*rr(e.display),3);i=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;(a=Kn(e,s,i)).outside;){if(n<0?i<=0:i>=o.height){a.hitSide=!0;break}i+=5*n}return a}var Go=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new B,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Yo(e,t){var n=Dn(e,t.line);if(!n||n.hidden)return null;var r=We(e.doc,t.line),i=In(n,r,t.line),a=ce(r,e.doc.direction),o="left";a&&(o=se(a,t.ch)%2?"right":"left");var s=kn(i.map,t.ch,o);return s.offset="right"==s.collapse?s.end:s.start,s}function Ho(e,t){return t&&(e.bad=!0),e}function qo(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Ho(e.clipPos(et(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||a.line=t.display.viewFrom&&Yo(t,i)||{node:l[0].measure.map[2],offset:0},d=a.liner.firstLine()&&(o=et(o.line-1,We(r.doc,o.line-1).length)),s.ch==We(r.doc,s.line).text.length&&s.linei.viewTo-1)return!1;o.line==i.viewFrom||0==(e=dr(r,o.line))?(t=Ke(i.view[0].line),n=i.view[0].node):(t=Ke(i.view[e].line),n=i.view[e-1].node.nextSibling);var l,c,d=dr(r,s.line);if(d==i.view.length-1?(l=i.viewTo-1,c=i.lineDiv.lastChild):(l=Ke(i.view[d+1].line)-1,c=i.view[d+1].node.previousSibling),!n)return!1;for(var u=r.doc.splitLines(function(e,t,n,r,i){var a="",o=!1,s=e.doc.lineSeparator(),l=!1;function c(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(e){e&&(c(),a+=e)}function u(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var a,_=t.getAttribute("cm-marker");if(_){var p=e.findMarks(et(r,0),et(i+1,0),(f=+_,function(e){return e.id==f}));return void(p.length&&(a=p[0].find(0))&&d(je(e.doc,a.from,a.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&c();for(var g=0;g1&&_.length>1;)if($(u)==$(_))u.pop(),_.pop(),l--;else{if(u[0]!=_[0])break;u.shift(),_.shift(),t++}for(var p=0,m=0,g=u[0],f=_[0],E=Math.min(g.length,f.length);po.ch&&S.charCodeAt(S.length-m-1)==h.charCodeAt(h.length-m-1);)p--,m++;u[u.length-1]=S.slice(0,S.length-m).replace(/^\u200b+/,""),u[0]=u[0].slice(p).replace(/\u200b+$/,"");var v=et(t,p),T=et(l,_.length?$(_).length-m:0);return u.length>1||u[0]||tt(v,T)?(ma(r.doc,u,v,T,"+input"),!0):void 0},Go.prototype.ensurePolled=function(){this.forceCompositionEnd()},Go.prototype.reset=function(){this.forceCompositionEnd()},Go.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Go.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Go.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Jr(this.cm,(function(){return ur(e.cm)}))},Go.prototype.setUneditable=function(e){e.contentEditable="false"},Go.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ei(this.cm,wo)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Go.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Go.prototype.onContextMenu=function(){},Go.prototype.resetPosition=function(){},Go.prototype.needsContentAttribute=!0;var Vo=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new B,this.hasSelection=!1,this.composing=null};Vo.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;function a(e){if(!ge(r,e)){if(r.somethingSelected())Do({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=Po(r);Do({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,H):(n.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(r.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),ue(i,"input",(function(){o&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),ue(i,"paste",(function(e){ge(r,e)||Mo(e,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())})),ue(i,"cut",a),ue(i,"copy",a),ue(e.scroller,"paste",(function(t){if(!Tn(e,t)&&!ge(r,t)){if(!i.dispatchEvent)return r.state.pasteIncoming=+new Date,void n.focus();var a=new Event("paste");a.clipboardData=t.clipboardData,i.dispatchEvent(a)}})),ue(e.lineSpace,"selectstart",(function(t){Tn(e,t)||he(t)})),ue(i,"compositionstart",(function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}})),ue(i,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Vo.prototype.createField=function(e){this.wrapper=Fo(),this.textarea=this.wrapper.firstChild},Vo.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=Er(e);if(e.options.moveInputWithCursor){var i=jn(e,n.sel.primary().head,"div"),a=t.wrapper.getBoundingClientRect(),o=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+o.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+o.left-a.left))}return r},Vo.prototype.showSelection=function(e){var t=this.cm.display;A(t.cursorDiv,e.cursors),A(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Vo.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&P(this.textarea),o&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null))}},Vo.prototype.getField=function(){return this.textarea},Vo.prototype.supportsTouch=function(){return!1},Vo.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!E||w()!=this.textarea))try{this.textarea.focus()}catch(e){}},Vo.prototype.blur=function(){this.textarea.blur()},Vo.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Vo.prototype.receivedFocus=function(){this.slowPoll()},Vo.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Vo.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Vo.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||we(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===i||S&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(8203!=a||r||(r="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(r.length,i.length);l1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Vo.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Vo.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},Vo.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var a=cr(n,e),c=r.scroller.scrollTop;if(a&&!u){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(a)&&ei(n,Ji)(n.doc,Oi(a),H);var d,_=i.style.cssText,p=t.wrapper.style.cssText,m=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-m.top-5)+"px; left: "+(e.clientX-m.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=window.scrollY),r.input.focus(),l&&window.scrollTo(null,d),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=E,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),o&&s>=9&&f(),C){Te(e);var g=function(){pe(window,"mouseup",g),setTimeout(E,20)};ue(window,"mouseup",g)}else setTimeout(E,50)}function f(){if(null!=i.selectionStart){var e=n.somethingSelected(),a="​"+(e?i.value:"");i.value="⇚",i.value=a,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=a.length,r.selForContextMenu=n.doc.sel}}function E(){if(t.contextMenuPending==E&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,i.style.cssText=_,o&&s<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=i.selectionStart)){(!o||o&&s<9)&&f();var e=0,a=function(){r.selForContextMenu==n.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?ei(n,sa)(n):e++<10?r.detectingSelectAll=setTimeout(a,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(a,200)}}},Vo.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Vo.prototype.setUneditable=function(){},Vo.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,i,a){e.defaults[n]=r,i&&(t[n]=a?function(e,t,n){n!=To&&i(e,t,n)}:i)}e.defineOption=n,e.Init=To,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,xi(e)}),!0),n("indentUnit",2,xi,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){Di(e),Gn(e),ur(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter((function(e){for(var i=0;;){var a=e.text.indexOf(t,i);if(-1==a)break;i=a+t.length,n.push(et(r,a))}r++}));for(var i=n.length-1;i>=0;i--)ma(e.doc,t,n[i],et(n[i].line,n[i].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=To&&e.refresh()})),n("specialCharPlaceholder",Zt,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",E?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!b),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){vo(e),gi(e)}),!0),n("keyMap","default",(function(e,t,n){var r=Qa(t),i=n!=To&&Qa(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,No,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=pi(t,e.options.lineNumbers),gi(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?or(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Yr(e)}),!0),n("scrollbarStyle","native",(function(e){zr(e),Yr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=pi(e.options.gutters,t),gi(e)}),!0),n("firstLineNumber",1,gi,!0),n("lineNumberFormatter",(function(e){return e}),gi,!0),n("showCursorWhenSelecting",!1,fr,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Or(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Oo),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,fr,!0),n("singleCursorHeightPerLine",!0,fr,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Di,!0),n("addModeClass",!1,Di,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,Di,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(Ro),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&ei(this,t[e])(this,n,i),me(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Qa(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Io(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Dr(this));else{var a=i.from(),o=i.to(),s=Math.max(n,a.line);n=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Ki(this.doc,r,new Ci(a,c[r].to()),H)}}})),getTokenAt:function(e,t){return St(this,e,t)},getLineTokens:function(e,t){return St(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,n=_t(this,We(this.doc,e.line)),r=0,i=(n.length-1)/2,a=e.ch;if(0==a)t=n[2];else for(;;){var o=r+i>>1;if((o?n[2*o-1]:0)>=a)i=o;else{if(!(n[2*o+1]a&&(e=a,i=!0),r=We(this.doc,e)}else r=e;return zn(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-qt(r):0)},defaultTextHeight:function(){return rr(this.display)},defaultCharWidth:function(){return ir(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var a,o,s,l=this.display,c=(e=jn(this,st(this.doc,e))).bottom,d=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),l.sizer.appendChild(t),"over"==r)c=e.top;else if("above"==r||"near"==r){var u=Math.max(l.wrapper.clientHeight,this.doc.height),_=Math.max(l.sizer.clientWidth,l.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>u)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=u&&(c=e.bottom),d+t.offsetWidth>_&&(d=_-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(d=l.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?d=0:"middle"==i&&(d=(l.sizer.clientWidth-t.offsetWidth)/2),t.style.left=d+"px"),n&&(a=this,o={left:d,top:c,right:d+t.offsetWidth,bottom:c+t.offsetHeight},null!=(s=Ir(a,o)).scrollTop&&Pr(a,s.scrollTop),null!=s.scrollLeft&&Fr(a,s.scrollLeft))},triggerOnKeyDown:ti(co),triggerOnKeyPress:ti(_o),triggerOnKeyUp:uo,triggerOnMouseDown:ti(fo),execCommand:function(e){if(eo.hasOwnProperty(e))return eo[e].call(null,this)},triggerElectric:ti((function(e){Lo(this,e)})),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var a=st(this.doc,e),o=0;o0&&o(t.charAt(n-1));)--n;for(;r.5)&&lr(this),me(this,"refresh",this)})),swapDoc:ti((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Pi(this,e),Gn(this),this.display.input.reset(),wr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,ln(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Se(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,a){e.registerHelper(t,r,a),n[t]._global.push({pred:i,val:a})}}(Ro);var Wo="iter insert remove copy getEditor constructor".split(" ");for(var jo in xa.prototype)xa.prototype.hasOwnProperty(jo)&&G(Wo,jo)<0&&(Ro.prototype[jo]=function(e){return function(){return e.apply(this.doc,arguments)}}(xa.prototype[jo]));return Se(xa),Ro.inputStyles={textarea:Vo,contenteditable:Go},Ro.defineMode=function(e){Ro.defaults.mode||"null"==e||(Ro.defaults.mode=e),Fe.apply(this,arguments)},Ro.defineMIME=function(e,t){ke[e]=t},Ro.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Ro.defineMIME("text/plain","null"),Ro.defineExtension=function(e,t){Ro.prototype[e]=t},Ro.defineDocExtension=function(e,t){xa.prototype[e]=t},Ro.fromTextArea=function(e,t){if((t=t?F(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=w();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=s.getValue()}var i;if(e.form&&(ue(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var o=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=o}}catch(e){}}t.finishInit=function(n){n.save=r,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,r(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",r),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Ro((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s},function(e){e.off=pe,e.on=ue,e.wheelEventPixels=bi,e.Doc=xa,e.splitLines=De,e.countColumn=U,e.findColumn=V,e.isWordChar=J,e.Pass=Y,e.signal=me,e.Line=Wt,e.changeEnd=Ni,e.scrollbarModel=qr,e.Pos=et,e.cmpPos=tt,e.modes=Pe,e.mimeModes=ke,e.resolveMode=Ue,e.getMode=Be,e.modeExtensions=Ge,e.extendMode=Ye,e.copyState=He,e.startState=ze,e.innerMode=qe,e.commands=eo,e.keyMap=Ha,e.keyName=$a,e.isModifierKey=Wa,e.lookupKey=Va,e.normalizeKeyMap=za,e.StringStream=Ve,e.SharedTextMarker=Na,e.TextMarker=ya,e.LineWidget=va,e.e_preventDefault=he,e.e_stopPropagation=be,e.e_stop=Te,e.addClass=M,e.contains=D,e.rmClass=N,e.keyNames=Ua}(Ro),Ro.version="5.52.2",Ro}()},function(e,t,n){"use strict";(function(e){var r=n(5),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=a&&a.exports===i&&r.a.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||o&&o.binding&&o.binding("util")}catch(e){}}();t.a=s}).call(this,n(7)(e))},function(e,t,n){"use strict";(function(e){var r=n(0),i=n(4),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=a&&"object"==typeof e&&e&&!e.nodeType&&e,s=o&&o.exports===a?r.a.Buffer:void 0,l=(s?s.isBuffer:void 0)||i.a;t.a=l}).call(this,n(7)(e))},function(e,t,n){"use strict";t.a=function(){return!1}},function(e,t,n){"use strict";(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.a=n}).call(this,n(13))},function(e,t,n){"use strict";(function(e){var r=n(0),i="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=i&&"object"==typeof e&&e&&!e.nodeType&&e,o=a&&a.exports===i?r.a.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.a=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}}).call(this,n(7)(e))},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(9)),i=o(n(10)),a=o(n(12));function o(e){return e&&e.__esModule?e:{default:e}}var s=r.default.isMac,l=r.default.toggleClass,c=r.default.addClass,d=r.default.removeClass,u=i.default.gitGubUrl,_=a.default.getState,p=null,m=function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=(n._options.$tools.blockStyles[i],_(r)),o=r.getCursor("start"),s=r.getCursor("end"),l={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},c={quote:"> ","unordered-list":"* ","ordered-list":"1. "},d=o.line;d<=s.line;d++){var u=r.getLine(d);u=a[i]?u.replace(l[i],"$1"):c[i]+u,r.replaceRange(u,{line:d,ch:0},{line:d,ch:99999999999999})}r.focus()};function g(e,t,n,r){var i,a=n[0],o=n[1],s=e.getCursor("start"),l=e.getCursor("end");o=o.replace("#url#",r),t?(a=(i=e.getLine(s.line)).slice(0,s.ch),o=i.slice(s.ch),e.replaceRange(a+o,{line:s.line,ch:0})):(i=e.getSelection(),e.replaceSelection(a+i+o),s.ch+=a.length,s!==l&&(l.ch+=a.length)),e.setSelection(s,l),e.focus()}var f={bold:{name:"bold",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"bold",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-bold",title:"Bold",default:!0,index:0,isEditTools:!0},italic:{name:"italic",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"italic",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-italic",title:"Italic",default:!0,index:1,isEditTools:!0},heading:{name:"heading",action:function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"Heading",a=(n._options.$tools.blockStyles[i],_(r),r.getCursor("start")),o=r.getCursor("end"),s=a.line;s<=o.line;s++){var l=r.getLine(s),c=l.search(/[^#]/);l="# "+l.substr(c+1),r.replaceRange(l,{line:s,ch:0},{line:s,ch:99999999999999})}r.focus()},className:"icon-heading",title:"Heading",default:!0,index:2,isEditTools:!0},quote:{name:"quote",action:m,className:"icon-quotation-marks",title:"Quote",default:!0,index:3,isEditTools:!0},code:{name:"code",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"code",a=n._options.$tools.blockStyles[i],o=_(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i?s=s.split("~~").join(""):"code"==i&&(s="\n\n"),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,d),r.focus()},className:"icon-code",title:"Code",default:!0,index:4,isEditTools:!0},"unordered-list":{name:"unordered-list",className:"icon-Listofissues",action:function(e){m(e)},title:"Generic List",default:!0,index:5,isEditTools:!0},"ordered-list":{name:"ordered-list",className:"icon-list",action:function(e){m(e)},title:"Number List",default:!0,index:6,isEditTools:!0},link:{name:"link",className:"icon-link",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=n._options.$tools.insertTexts[i];g(r,_(r).link,a,"")},title:"Insert Link",default:!0,index:7,isEditTools:!0},image:{name:"image",className:"icon-img",action:function(e){var t,n=(e=e||windowl.event).currentTarget,r=n.$editor,i=r.$codemirror,a=n.getAttribute("data-name")||"quote",o=r._options.$tools.insertTexts[a],s=_(i);if(!(t=prompt("请输入图片地址","")))return!1;g(i,s.image,o,t)},title:"Insert Image",default:!0,index:8,isEditTools:!0},undo:{name:"undo",className:"icon-goLeft",action:function(e){var t=(e=e||window.event).currentTarget.$editor;p||(p=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("回退",r),n.undoSelection()}},title:"Undo",default:!0,index:9,isEditTools:!0},redo:{name:"redo",className:"icon-goRight",action:function(e){var t=(e=e||window.event).currentTarget.$editor;p||(p=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("取消撤销",r),n.redoSelection()}},title:"Redo",default:!0,index:10,isEditTools:!0},about:{name:"about",className:"icon-question",action:function(){window.open(u)},title:"About Editor",default:!0,index:0,isEditTools:!1},edit:{name:"edit",className:"icon-pen",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isOnlyEdit){p.$status.isOnlyEdit=!0,p.$status.isOnlyPreview=!p.$status.isOnlyEdit,p.$status.isShowAll=!p.$status.isOnlyEdit,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&c(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-eye"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Edit",default:!0,index:1,isEditTools:!1},compare:{name:"compare",className:"icon-columns active",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isShowAll){p.$status.isShowAll=!0,p.$status.isOnlyPreview=!p.$status.isShowAll,p.$status.isOnlyEdit=!p.$status.isShowAll,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&d(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-eye");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Compare",default:!0,index:2,isEditTools:!1},preview:{name:"preview",className:"icon-eye",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(p||(p=n),!p.$status.isOnlyPreview){p.$status.isOnlyPreview=!0,p.$status.isOnlyEdit=!p.$status.isOnlyPreview,p.$status.isShowAll=!p.$status.isOnlyPreview,l(t,"active");var r=p._options.el,i=r.querySelector(".editor-md"),a=r.querySelector(".editor-preview");i&&c(i,"hide"),a&&d(a,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Preview",default:!0,index:3,isEditTools:!1},fullscreen:{name:"fullscreen",className:"icon-full-screen",action:function(e){!function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;l(t,"active"),p||(p=n)}(e);var t=p._options.el;l(t,"fullscreen")},title:"Toggle Fullscreen",default:!0,index:4,isEditTools:!1}};t.default={toolbarBuiltInButtons:f,insertTexts:{link:["[","](#url#)"],image:["![](","#url#)"],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},promptTexts:{link:"URL for the link:",image:"URL of the image:"},blockStyles:{bold:"**",code:"```",italic:"*"},shortcuts:{bold:"Cmd-B",italic:"Cmd-I",link:"Cmd-K",heading:"Cmd-H",quote:"Cmd-'",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",image:"Cmd-Alt-I",back:"Cmd-Z",front:"Cmd-Y",toggleBlockquote:"Cmd-'","ordered-list":"Cmd-Alt-L","unordered-list":"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},fixShortcut:function(e){return e=s?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i={_mergeProperties:function(e,t){for(var n in t)if(t.hasOwnProperty(n))if(t[n]instanceof Array){var i=e[n]instanceof Array?e[n]:[];e[n]=t[n].concat(i)}else null!=t[n]&&"object"===r(t[n])&&t[n].constructor===Object?e[n]=this._mergeProperties(e[n]||{},t[n]):e[n]=t[n];return e},extend:function(e){for(var t=0;t0){var i=void 0;n.forEach((function(n){i=e[n],t.push(i)}))}return t}},isFunction:function(e){var t=!1;return"function"==typeof e&&(t=!0),t}};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=n(11);var a={baseUrl:"https://www.github.com",iconLink:"//at.alicdn.com/t/font_823030_gxvkgahpx49.css",gitGubUrl:"https://github.com/Jesonhu/cool-md-editor",editor:{className:{themeDark:"editor-theme-dark",themeLight:"editor-theme-light",fullscreen:"editor-status_fullscreen",compare:"editor-status_show-all",edit:"editor-status_only-edit",preview:"editor-status_only-preview"},theme:{dark:{className:"editor-theme-dark",mode:"base16-dark"},light:{className:"editor-theme-light",mode:"base16-light"}},language:((r=i)&&r.__esModule?r:{default:r}).default},shortcuts:{isOpen:!1},qiniu:{tokenApiUrl:"http://127.0.0.1:3001/api/qiniu/blog/get_token",region:"z1",config:{},putExtra:{}}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={toolbarItem:{bold:"Bold",italic:"Italic",heading:"Heading",quote:"Quote",code:"Code","unordered-list":"Generic List","ordered-list":"Number List",link:"Insert Link",image:"Insert Image",undo:"Undo",redo:"Redo",about:"About Editor",edit:"Toggle Edit",compare:"Toggle Compare",preview:"Toggle Preview",fullscreen:"Toggle Fullscreen"},statusBar:{line:"line",columns:"columns",length:"length"}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={getState:function(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,a=n.type.split(" "),o={},s=0;s` "'(~:]+/,p=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,m=/^\s*\[[^\]]+?\]:.*$/,g=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function f(e,t,n){return t.f=t.inline=n,n(e,t)}function E(e,t,n){return t.f=t.block=n,n(e,t)}function S(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==b){var n=i;if(!n){var a=e.innerMode(r,t.htmlState);n="xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText}n&&(t.f=y,t.block=h,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function h(r,i){var o,_=r.column()===i.indentation,g=!(o=i.prevLine.stream)||!/\S/.test(o.string),E=i.indentedCode,S=i.prevLine.hr,h=!1!==i.list,b=(i.listStack[i.listStack.length-1]||0)+3;i.indentedCode=!1;var C=i.indentation;if(null===i.indentationDiff&&(i.indentationDiff=i.indentation,h)){for(i.list=null;C=4&&(E||i.prevLine.fencedCodeEnd||i.prevLine.header||g))return r.skipToEnd(),i.indentedCode=!0,a.code;if(r.eatSpace())return null;if(_&&i.indentation<=b&&(N=r.match(d))&&N[1].length<=6)return i.quote=0,i.header=N[1].length,i.thisLine.header=!0,n.highlightFormatting&&(i.formatting="header"),i.f=i.inline,T(i);if(i.indentation<=b&&r.eat(">"))return i.quote=_?1:i.quote+1,n.highlightFormatting&&(i.formatting="quote"),r.eatSpace(),T(i);if(!O&&!i.setext&&_&&i.indentation<=b&&(N=r.match(l))){var R=N[1]?"ol":"ul";return i.indentation=C+r.current().length,i.list=!0,i.quote=0,i.listStack.push(i.indentation),i.em=!1,i.strong=!1,i.code=!1,i.strikethrough=!1,n.taskLists&&r.match(c,!1)&&(i.taskList=!0),i.f=i.inline,n.highlightFormatting&&(i.formatting=["list","list-"+R]),T(i)}return _&&i.indentation<=b&&(N=r.match(p,!0))?(i.quote=0,i.fencedEndRE=new RegExp(N[1]+"+ *$"),i.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}(N[2]),i.localMode&&(i.localState=e.startState(i.localMode)),i.f=i.block=v,n.highlightFormatting&&(i.formatting="code-block"),i.code=-1,T(i)):i.setext||!(y&&h||i.quote||!1!==i.list||i.code||O||m.test(r.string))&&(N=r.lookAhead(1))&&(N=N.match(u))?(i.setext?(i.header=i.setext,i.setext=0,r.skipToEnd(),n.highlightFormatting&&(i.formatting="header")):(i.header="="==N[0].charAt(0)?1:2,i.setext=i.header),i.thisLine.header=!0,i.f=i.inline,T(i)):O?(r.skipToEnd(),i.hr=!0,i.thisLine.hr=!0,a.hr):"["===r.peek()?f(r,i,A):f(r,i,i.inline)}function b(t,n){var a=r.token(t,n.htmlState);if(!i){var o=e.innerMode(r,n.htmlState);("xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=y,n.block=h,n.htmlState=null)}return a}function v(e,t){var r,i=t.listStack[t.listStack.length-1]||0,o=t.indentation=e.quote?t.push(a.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(a.linkHref,"url"):(e.strong&&t.push(a.strong),e.em&&t.push(a.em),e.strikethrough&&t.push(a.strikethrough),e.emoji&&t.push(a.emoji),e.linkText&&t.push(a.linkText),e.code&&t.push(a.code),e.image&&t.push(a.image),e.imageAltText&&t.push(a.imageAltText,"link"),e.imageMarker&&t.push(a.imageMarker)),e.header&&t.push(a.header,a.header+"-"+e.header),e.quote&&(t.push(a.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(a.quote+"-"+e.quote):t.push(a.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var i=(e.listStack.length-1)%3;i?1===i?t.push(a.list2):t.push(a.list3):t.push(a.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function C(e,t){if(e.match(_,!0))return T(t)}function y(t,i){var o=i.text(t,i);if(void 0!==o)return o;if(i.list)return i.list=null,T(i);if(i.taskList)return" "===t.match(c,!0)[1]?i.taskOpen=!0:i.taskClosed=!0,n.highlightFormatting&&(i.formatting="task"),i.taskList=!1,T(i);if(i.taskOpen=!1,i.taskClosed=!1,i.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(i.formatting="header"),T(i);var s=t.next();if(i.linkTitle){i.linkTitle=!1;var l=s;"("===s&&(l=")");var d="^\\s*(?:[^"+(l=(l+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+l;if(t.match(new RegExp(d),!0))return a.linkHref}if("`"===s){var u=i.formatting;n.highlightFormatting&&(i.formatting="code"),t.eatWhile("`");var _=t.current().length;if(0!=i.code||i.quote&&1!=_){if(_==i.code){var p=T(i);return i.code=0,p}return i.formatting=u,T(i)}return i.code=_,T(i)}if(i.code)return T(i);if("\\"===s&&(t.next(),n.highlightFormatting)){var m=T(i),f=a.formatting+"-escape";return m?m+" "+f:f}if("!"===s&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return i.imageMarker=!0,i.image=!0,n.highlightFormatting&&(i.formatting="image"),T(i);if("["===s&&i.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return i.imageMarker=!1,i.imageAltText=!0,n.highlightFormatting&&(i.formatting="image"),T(i);if("]"===s&&i.imageAltText){n.highlightFormatting&&(i.formatting="image");var m=T(i);return i.imageAltText=!1,i.image=!1,i.inline=i.f=N,m}if("["===s&&!i.image)return i.linkText&&t.match(/^.*?\]/)||(i.linkText=!0,n.highlightFormatting&&(i.formatting="link")),T(i);if("]"===s&&i.linkText){n.highlightFormatting&&(i.formatting="link");var m=T(i);return i.linkText=!1,i.inline=i.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?N:y,m}if("<"===s&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return i.f=i.inline=O,n.highlightFormatting&&(i.formatting="link"),(m=T(i))?m+=" ":m="",m+a.linkInline;if("<"===s&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return i.f=i.inline=O,n.highlightFormatting&&(i.formatting="link"),(m=T(i))?m+=" ":m="",m+a.linkEmail;if(n.xml&&"<"===s&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var S=t.string.indexOf(">",t.pos);if(-1!=S){var h=t.string.substring(t.start,S);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(h)&&(i.md_inside=!0)}return t.backUp(1),i.htmlState=e.startState(r),E(t,i,b)}if(n.xml&&"<"===s&&t.match(/^\/\w*?>/))return i.md_inside=!1,"tag";if("*"===s||"_"===s){for(var v=1,C=1==t.pos?" ":t.string.charAt(t.pos-2);v<3&&t.eat(s);)v++;var R=t.peek()||" ",A=!/\s/.test(R)&&(!g.test(R)||/\s/.test(C)||g.test(C)),I=!/\s/.test(C)&&(!g.test(C)||/\s/.test(R)||g.test(R)),x=null,D=null;if(v%2&&(i.em||!A||"*"!==s&&I&&!g.test(C)?i.em!=s||!I||"*"!==s&&A&&!g.test(R)||(x=!1):x=!0),v>1&&(i.strong||!A||"*"!==s&&I&&!g.test(C)?i.strong!=s||!I||"*"!==s&&A&&!g.test(R)||(D=!1):D=!0),null!=D||null!=x)return n.highlightFormatting&&(i.formatting=null==x?"strong":null==D?"em":"strong em"),!0===x&&(i.em=s),!0===D&&(i.strong=s),p=T(i),!1===x&&(i.em=!1),!1===D&&(i.strong=!1),p}else if(" "===s&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return T(i);t.backUp(1)}if(n.strikethrough)if("~"===s&&t.eatWhile(s)){if(i.strikethrough)return n.highlightFormatting&&(i.formatting="strikethrough"),p=T(i),i.strikethrough=!1,p;if(t.match(/^[^\s]/,!1))return i.strikethrough=!0,n.highlightFormatting&&(i.formatting="strikethrough"),T(i)}else if(" "===s&&t.match(/^~~/,!0)){if(" "===t.peek())return T(i);t.backUp(2)}if(n.emoji&&":"===s&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){i.emoji=!0,n.highlightFormatting&&(i.formatting="emoji");var w=T(i);return i.emoji=!1,w}return" "===s&&(t.match(/^ +$/,!1)?i.trailingSpace++:i.trailingSpace&&(i.trailingSpaceNewLine=!0)),T(i)}function O(e,t){if(">"===e.next()){t.f=t.inline=y,n.highlightFormatting&&(t.formatting="link");var r=T(t);return r?r+=" ":r="",r+a.linkInline}return e.match(/^[^>]+/,!0),a.linkInline}function N(e,t){if(e.eatSpace())return null;var r,i=e.next();return"("===i||"["===i?(t.f=t.inline=(r="("===i?")":"]",function(e,t){if(e.next()===r){t.f=t.inline=y,n.highlightFormatting&&(t.formatting="link-string");var i=T(t);return t.linkHref=!1,i}return e.match(R[r]),t.linkHref=!0,T(t)}),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,T(t)):"error"}var R={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function A(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=I,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,T(t)):f(e,t,y)}function I(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=x,n.highlightFormatting&&(t.formatting="link");var r=T(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),a.linkText}function x(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=y,a.linkHref+" url")}var D={startState:function(){return{f:h,prevLine:{stream:null},thisLine:{stream:null},block:h,htmlState:null,indentation:0,inline:y,text:C,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(r,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return S(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=b)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==b?{state:e.htmlState,mode:r}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:D}},indent:function(t,n,i){return t.block==b&&r.indent?r.indent(t.htmlState,n,i):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,i):e.Pass},blankLine:S,getType:T,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return D}),"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")}(n(1),n(32),n(33))},function(e,t,n){!function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function l(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(s(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t+1}}function d(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){i.lastIndex=t,e.ch=t;var n=i.exec(e.text);if(n&&n.index==t)return n}else e.ch=t}}function u(e){for(;;){i.lastIndex=e.ch;var t=i.exec(e.text);if(!t){if(s(e))continue;return}if(o(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function _(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t}}function p(e,n){for(var r=[];;){var i,a=u(e),o=e.line,s=e.ch-(a?a[0].length:0);if(!a||!(i=c(e)))return;if("selfClose"!=i)if(a[1]){for(var l=r.length-1;l>=0;--l)if(r[l]==a[2]){r.length=l;break}if(l<0&&(!n||n==a[2]))return{tag:a[2],from:t(o,s),to:t(e.line,e.ch)}}else r.push(a[2])}}function m(e,n){for(var r=[];;){var i=_(e);if(!i)return;if("selfClose"!=i){var a=e.line,o=e.ch,s=d(e);if(!s)return;if(s[1])r.push(s[2]);else{for(var l=r.length-1;l>=0;--l)if(r[l]==s[2]){r.length=l;break}if(l<0&&(!n||n==s[2]))return{tag:s[2],from:t(e.line,e.ch),to:t(a,o)}}}else d(e)}}e.registerHelper("fold","xml",(function(e,r){for(var i=new a(e,r.line,0);;){var o=u(i);if(!o||i.line!=r.line)return;var s=c(i);if(!s)return;if(!o[1]&&"selfClose"!=s){var l=t(i.line,i.ch),d=p(i,o[2]);return d&&n(d.from,l)>0?{from:l,to:d.from}:null}}})),e.findMatchingTag=function(e,r,i){var o=new a(e,r.line,r.ch,i);if(-1!=o.text.indexOf(">")||-1!=o.text.indexOf("<")){var s=c(o),l=s&&t(o.line,o.ch),u=s&&d(o);if(s&&u&&!(n(o,r)>0)){var _={from:t(o.line,o.ch),to:l,tag:u[2]};return"selfClose"==s?{open:_,close:null,at:"open"}:u[1]?{open:m(o,u[2]),close:_,at:"close"}:{open:_,close:p(o=new a(e,l.line,l.ch,i),u[2]),at:"open"}}}},e.findEnclosingTag=function(e,t,n,r){for(var i=new a(e,t.line,t.ch,n);;){var o=m(i,r);if(!o)break;var s=p(new a(e,t.line,t.ch,n),o.tag);if(s)return{open:o,close:s}}},e.scanForClosingTag=function(e,t,n,r){return p(new a(e,t.line,t.ch,r?{from:0,to:r}:null),n)}}(n(1))},function(e,t,n){!function(e){"use strict";function t(t,n,i,a){if(i&&i.call){var o=i;i=null}else o=r(t,i,"rangeFinder");"number"==typeof n&&(n=e.Pos(n,0));var s=r(t,i,"minFoldSize");function l(e){var r=o(t,n);if(!r||r.to.line-r.from.linet.firstLine();)n=e.Pos(n.line-1,0),c=l(!1);if(c&&!c.cleared&&"unfold"!==a){var d=function(e,t,n){var i=r(e,t,"widget");if("function"==typeof i&&(i=i(n.from,n.to)),"string"==typeof i){var a=document.createTextNode(i);(i=document.createElement("span")).appendChild(a),i.className="CodeMirror-foldmarker"}else i&&(i=i.cloneNode(!0));return i}(t,i,c);e.on(d,"mousedown",(function(t){u.clear(),e.e_preventDefault(t)}));var u=t.markText(c.from,c.to,{replacedWith:d,clearOnEnter:r(t,i,"clearOnEnter"),__isFold:!0});u.on("clear",(function(n,r){e.signal(t,"unfold",t,n,r)})),e.signal(t,"fold",t,c.from,c.to)}}e.newFoldFunction=function(e,n){return function(r,i){t(r,i,{rangeFinder:e,widget:n})}},e.defineExtension("foldCode",(function(e,n,r){t(this,e,n,r)})),e.defineExtension("isFolded",(function(e){for(var t=this.findMarksAt(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};h(this,e),t.editor=this,this.init(t)}return a(e,[{key:"init",value:function(e){var t=this;this.initData(e).then((function(){t.initView(t._options)}))}},{key:"initData",value:function(e){var t=this;return new Promise((function(n,r){t.initOption(e),t.initEditorStatus(),t.initQiniu(t._options.qiniu),n()}))}},{key:"initView",value:function(e){var t=this;this.createIconLink(),this.createElement(e).then((function(){t.initEvent(),t.initCodeMirrorData(),t.initMarkdownData(),t.initDefaultContent(),t.lifecycleMounted()}))}},{key:"initEvent",value:function(){this.initStatusEvent(),this.initToolsEvent()}},{key:"initOption",value:function(e){this._options=u.default.extend({},{shortcuts:{isOpen:!0},lang:"zh",qiniu:{tokenApiUrl:"http://127.0.0.1:3001/api/qiniu/test/get_token",region:"z1",config:{},putExtra:{}}},e),this._options.$tools=d.default;var t=this._options;if(console.log(this._options),"string"==typeof t.lang){var n=t.lang;this._options.lang=v[n]||s.default.editor.language}else this._options.lang=Object.assign({},s.default.editor.language,e.lang)}},{key:"lifecycleMounted",value:function(){this.addEditContainerPaseImg()}},{key:"createIconLink",value:function(){if(!this.isCreatedIconLink()){var e=document.createElement("link");e.setAttribute("data-editor",!0),e.rel="stylesheet",e.href=s.default.iconLink,document.getElementsByTagName("head")[0].appendChild(e)}}},{key:"isCreatedIconLink",value:function(){return!!document.querySelector("link[data-editor]")}},{key:"createElement",value:function(e){return new Promise((function(t,n){o.default.init(e).then((function(){t()}))}))}},{key:"initToolsEvent",value:function(){var e=this,t=this._options.$tools,n=this._options.el,r=t.toolbarBuiltInButtons,i=u.default.obj2Arr(r);i.length>0&&i.forEach((function(t){t.className.indexOf(" ")>0&&(t.className=t.className.split(" ")[0]);var r="."+t.className,i=t.action,a=u.default.isFunction(i);if(""!==r&&a){var o=n.querySelector(".editor-tools").querySelector(r);o&&(e.$status,o.$editor=e,o.addEventListener("click",i,!1))}}))}},{key:"createCodeMirrorElement",value:function(e,t){return m.default.fromTextArea(e,t)}},{key:"initCodeMirrorData",value:function(){this._options;var e=this._options.el.querySelector("#area");this.$codemirror=this.createCodeMirrorElement(e,{mode:{name:"gfm",tokenTypeOverrides:{emoji:"emoji"}},lineNumbers:!0,matchBrackets:!0,indentUnit:4,lineWrapping:!0,styleActiveLine:!0,theme:"base16-dark",autoCloseBrackets:!0,autoCloseTags:!0,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"]}),this.$codemirror.$editor=this,this.initCodeMirrorEvent()}},{key:"initCodeMirrorEvent",value:function(){this.add_CM_change_eventHandle(),this.add_CM_cursorActivity_eventHandle(),this.addScrollSync()}},{key:"add_CM_change_eventHandle",value:function(){this.$codemirror.on("changes",(0,c.debounce)(this.onCodeMirrorChange,300))}},{key:"onCodeMirrorChange",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"add_CM_cursorActivity_eventHandle",value:function(){this.$codemirror.on("cursorActivity",this.onCodeMirrorCursorActivity)}},{key:"onCodeMirrorCursorActivity",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"commonCodeMirrorEventHandle",value:function(e){var t=e.getValue(),n=e.$editor;n.setHtmlValue(t),n.updateStatusBar(n)}},{key:"initMarkdownData",value:function(e){if(g.default){var t={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,smartLists:!0,smartypants:!1,highlight:function(e){return f.default.highlightAuto(e).value}};this.$marked=g.default,this.$marked.setOptions(t)}}},{key:"initMarkdownEvent",value:function(){}},{key:"initDefaultContent",value:function(){var e=this._options.defaultCon;if(e){var t=this.$codemirror;t.setValue(e),this.commonCodeMirrorEventHandle(t)}}},{key:"getMDValue",value:function(){return this.$codemirror.getValue()}},{key:"setHtmlValue",value:function(e){var t=this.$marked(e);this._options.el.querySelector(".editor-preview").querySelector(".preview-bd").innerHTML=t}},{key:"addScrollSync",value:function(){var e=this.$codemirror,t=this._options.el.querySelector(".editor-preview"),n=!1,r=!1;e.on("scroll",(function(e){if(n)n=!1;else{r=!0;var i=e.getScrollInfo().height-e.getScrollInfo().clientHeight,a=parseFloat(e.getScrollInfo().top)/i,o=(t.scrollHeight-t.clientHeight)*a;t.scrollTop=o}})),t.addEventListener("scroll",(function(){if(r)r=!1;else{n=!0;var i=t.scrollHeight-t.clientHeight,a=parseFloat(t.scrollTop)/i,o=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*a;e.scrollTo(0,o)}}))}},{key:"updateStatusBar",value:function(){var e=this.$codemirror.getValue().length;this.renderEditorContentPosition(),this.renderEditContentLength(e)}},{key:"renderEditContentLength",value:function(e){var t=this._options.el.querySelector(".editor-status").querySelector(".editor-status-length"),n=this._options.lang.statusBar.length;t.innerHTML=n+" "+e}},{key:"renderEditorContentPosition",value:function(){var e=this.$codemirror,t=e.lineCount(),n=e.getCursor(),r=n.ch+1,i=n.line+1,a=this._options.lang.statusBar,o=a.line,s=a.columns;this._options.el.querySelector(".editor-status").querySelector(".editor-status-positon").querySelector("span").innerHTML=o+" "+i+","+s+" "+r+" 一 "+t+" "+o}},{key:"initEditorStatus",value:function(e){this.$status={},this.$status.isThemeLight=!0,this.$status.isFullscreen=!1,this.$status.isShowAll=!0,this.$status.isOnlyPreview=!1,this.$status.isOnlyEdit=!1}},{key:"initStatusEvent",value:function(){this.initEventToggleTheme()}},{key:"initEventToggleTheme",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".icon-theme",n=this,r=this._options.el.querySelector(".editor-status").querySelector(t),i=this._options.el,a=u.default.addClass,o=u.default.removeClass;if(r){r.addEventListener("click",(function(){n.$status.isThemeLight?(a(i,"editor-theme-dark"),o(i,"editor-theme-light")):(a(i,"editor-theme-light"),o(i,"editor-theme-dark")),n.$status.isThemeLight=!n.$status.isThemeLight}))}}},{key:"initEventToggleFullscreen",value:function(e){}},{key:"initQiniu",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};T=new E.default(e)}},{key:"addEditContainerPaseImg",value:function(){var e=this._options.el.querySelector(".editor-md"),t=this.$codemirror;e.addEventListener("paste",(function(e){if(e.clipboardData||e.originalEvent){var t=e.clipboardData||e.originalEvent.clipboardData;if(t.items){for(var r,i=0;i\n ",e()}))},createToolsMain:function(e){var t=this,n=this.getToolsEdit(e),r='
';if(n.length>0){var i=n.length;n.forEach((function(e,n){n>0&&(n+1)%3==0&&n!==i-1?r=r+t.createToolsItem(e)+'|':r+=t.createToolsItem(e)}))}return r+="
"},getToolsEdit:function(e){if("object"===(void 0===e?"undefined":i(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var r in n)n[r].isEditTools&&(t[r]=n[r]);return this.sortToolsIcon(t,"index")}},createToolsHandle:function(e){var t=this.getToolsHandle(e),n='
',r=this;return t.forEach((function(e,t){n+=r.createToolsItem(e)})),n+="
"},getToolsHandle:function(e){if("object"===(void 0===e?"undefined":i(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var r in n)n[r].isEditTools||(t[r]=n[r]);return this.sortToolsIcon(t,"index")}},sortToolsIcon:function(e,t){if("object"===(void 0===e?"undefined":i(e))){var n=[];for(var r in e)n.push(e[r]);return n.sort((function(e,t){return e.index-t.index}))}},createToolsItem:function(e){var t=s[e.name],n=void 0;n=t?l(t):"";var r=this.getToolItemTitleText(e.name);return this.$editor.options.fixShortcut&&this.$editor.options.fixShortcut.isOpen?'':''},getToolItemTitleText:function(e){return this.$editor.options.lang.toolbarItem[e.toLowerCase()]},renderCode:function(e){var t=e.el;return new Promise((function(e,n){t.innerHTML+='\n
\n
\n \n
\n
\n ',e()}))},renderPriview:function(e){var t=e.el;return new Promise((function(e,n){t.innerHTML+='\n
\n
\n
\n
\n ',e()}))},renderStatus:function(e){var t=e.el,n=this.createStatusPosition(e),r=this.createStatusLens();return new Promise((function(e,i){t.innerHTML+='\n
'+n+r+"
",e()}))},createStatusPosition:function(e){var t=this.createStatusToggleTheme(),n=this.$editor.options.lang.statusBar,r=n.line;return'
'+r+" ,"+n.columns+" 一 "+r+""+t+"
"},createStatusToggleTheme:function(){return''},createStatusLens:function(){return'
'+this.$editor.options.lang.statusBar.length+"
"}};t.default=c},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={toolbarItem:{bold:"加粗",italic:"斜体",heading:"标题",quote:"引用",code:"代码块","unordered-list":"无序列表","ordered-list":"有序列表",link:"插入链接",image:"插入图片",undo:"撤消",redo:"重做",about:"关于编辑器",edit:"编辑模式",compare:"常规模式",preview:"预览模式",fullscreen:"切换全屏"},statusBar:{line:"行",columns:"列",length:"总长度"}}},function(e,t,n){!function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",(function(r,i){var a,o,s=r.indentUnit,l={},c=i.htmlMode?t:n;for(var d in c)l[d]=c[d];for(var d in i)l[d]=i[d];function u(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();return"<"==r?e.eat("!")?e.eat("[")?e.match("CDATA[")?n(p("atom","]]>")):null:e.match("--")?n(p("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(function e(t){return function(n,r){for(var i;null!=(i=n.next());){if("<"==i)return r.tokenize=e(t+1),r.tokenize(n,r);if(">"==i){if(1==t){r.tokenize=u;break}return r.tokenize=e(t-1),r.tokenize(n,r)}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=p("meta","?>"),"meta"):(a=e.eat("/")?"closeTag":"openTag",t.tokenize=_,"tag bracket"):"&"==r?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function _(e,t){var n,r,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=u,a=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return a="equals",null;if("<"==i){t.tokenize=u,t.state=E,t.tagName=t.tagStart=null;var o=t.tokenize(e,t);return o?o+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(n=i,(r=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=_;break}return"string"}).isInAttribute=!0,r),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function p(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=u;break}n.next()}return e}}function m(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function g(e){e.context&&(e.context=e.context.prev)}function f(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(t))return;g(e)}}function E(e,t,n){return"openTag"==e?(n.tagStart=t.column(),S):"closeTag"==e?h:E}function S(e,t,n){return"word"==e?(n.tagName=t.current(),o="tag",T):l.allowMissingTagName&&"endTag"==e?(o="tag bracket",T(e,0,n)):(o="error",S)}function h(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&g(n),n.context&&n.context.tagName==r||!1===l.matchClosing?(o="tag",b):(o="tag error",v)}return l.allowMissingTagName&&"endTag"==e?(o="tag bracket",b(e,0,n)):(o="error",v)}function b(e,t,n){return"endTag"!=e?(o="error",b):(g(n),E)}function v(e,t,n){return o="error",b(e,0,n)}function T(e,t,n){if("word"==e)return o="attribute",C;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||l.autoSelfClosers.hasOwnProperty(r)?f(n,r):(f(n,r),n.context=new m(n,r,i==n.indented)),E}return o="error",T}function C(e,t,n){return"equals"==e?y:(l.allowMissing||(o="error"),T(e,0,n))}function y(e,t,n){return"string"==e?O:"word"==e&&l.allowUnquoted?(o="string",T):(o="error",T(e,0,n))}function O(e,t,n){return"string"==e?O:T(e,0,n)}return u.isInText=!0,{startState:function(e){var t={tokenize:u,state:E,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var n=t.tokenize(e,t);return(n||a)&&"comment"!=n&&(o=null,t.state=t.state(a||n,e,t),o&&(n="error"==o?n+" error":o)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+s;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=_&&t.tokenize!=u)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+s*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(e){e.state==y&&(e.state=T)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)n.tagName&&t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(1))},function(e,t,n){!function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t-1&&t.substring(i+1,t.length);if(a)return e.findModeByExtension(a)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",(function(n,r){var i=0,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var a=e.pos;e.eatWhile("`");var o=1+e.pos-a;return n.code?o===i&&(n.code=!1):(i=o,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==r.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},o={taskLists:!0,strikethrough:!0,emoji:!0};for(var s in r)o[s]=r[s];return o.name="markdown",e.overlayMode(e.getMode(n,o),a)}),"markdown"),e.defineMIME("text/x-gfm","gfm")}(n(1),n(14),n(15))},function(e,t,n){!function(e){"use strict";e.defineMode("javascript",(function(t,n){var r,i,a=t.indentUnit,o=n.statementIndent,s=n.jsonld,l=n.json||s,c=n.typescript,d=n.wordCharacters||/[\w$\xa1-\uffff]/,u=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),n=e("keyword b"),r=e("keyword c"),i=e("keyword d"),a=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:n,do:n,try:n,finally:n,return:i,break:i,continue:i,new:e("new"),delete:r,void:r,throw:r,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:a,typeof:a,instanceof:a,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:r,export:e("export"),import:e("import"),extends:r,await:r}}(),_=/[+\-*&%=<>!?|~^@]/,p=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function m(e,t,n){return r=e,i=n,t}function g(e,t){var n,r=e.next();if('"'==r||"'"==r)return t.tokenize=(n=r,function(e,t){var r,i=!1;if(s&&"@"==e.peek()&&e.match(p))return t.tokenize=g,m("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=n||i);)i=!i&&"\\"==r;return i||(t.tokenize=g),m("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return m("number","number");if("."==r&&e.match(".."))return m("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return m(r);if("="==r&&e.eat(">"))return m("=>","operator");if("0"==r&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return m("number","number");if(/\d/.test(r))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),m("number","number");if("/"==r)return e.eat("*")?(t.tokenize=f,f(e,t)):e.eat("/")?(e.skipToEnd(),m("comment","comment")):je(e,t,1)?(function(e){for(var t,n=!1,r=!1;null!=(t=e.next());){if(!n){if("/"==t&&!r)return;"["==t?r=!0:r&&"]"==t&&(r=!1)}n=!n&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),m("regexp","string-2")):(e.eat("="),m("operator","operator",e.current()));if("`"==r)return t.tokenize=E,E(e,t);if("#"==r)return e.skipToEnd(),m("error","error");if("<"==r&&e.match("!--")||"-"==r&&e.match("->"))return e.skipToEnd(),m("comment","comment");if(_.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),m("operator","operator",e.current());if(d.test(r)){e.eatWhile(d);var i=e.current();if("."!=t.lastType){if(u.propertyIsEnumerable(i)){var a=u[i];return m(a.type,a.style,i)}if("async"==i&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return m("async","keyword",i)}return m("variable","variable",i)}}function f(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=g;break}r="*"==n}return m("comment","comment")}function E(e,t){for(var n,r=!1;null!=(n=e.next());){if(!r&&("`"==n||"$"==n&&e.eat("{"))){t.tokenize=g;break}r=!r&&"\\"==n}return m("quasi","string-2",e.current())}function S(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(!(n<0)){if(c){var r=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n));r&&(n=r.index)}for(var i=0,a=!1,o=n-1;o>=0;--o){var s=e.string.charAt(o),l="([{}])".indexOf(s);if(l>=0&&l<3){if(!i){++o;break}if(0==--i){"("==s&&(a=!0);break}}else if(l>=3&&l<6)++i;else if(d.test(s))a=!0;else if(/["'\/`]/.test(s))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==s&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(a&&!i){++o;break}}a&&!i&&(t.fatArrowAt=o)}}var h={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function b(e,t,n,r,i,a){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=a,null!=r&&(this.align=r)}function v(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var r=e.context;r;r=r.prev)for(n=r.vars;n;n=n.next)if(n.name==t)return!0}var T={state:null,column:null,marked:null,cc:null};function C(){for(var e=arguments.length-1;e>=0;e--)T.cc.push(arguments[e])}function y(){return C.apply(null,arguments),!0}function O(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function N(e){var t=T.state;if(T.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,n){if(n){if(n.block){var r=e(t,n.prev);return r?r==n.prev?n:new A(r,n.vars,!0):null}return O(t,n.vars)?n:new A(n.prev,new I(t,n.vars),!1)}return null}(e,t.context);if(null!=r)return void(t.context=r)}else if(!O(e,t.localVars))return void(t.localVars=new I(e,t.localVars));n.globalVars&&!O(e,t.globalVars)&&(t.globalVars=new I(e,t.globalVars))}function R(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function A(e,t,n){this.prev=e,this.vars=t,this.block=n}function I(e,t){this.name=e,this.next=t}var x=new I("this",new I("arguments",null));function D(){T.state.context=new A(T.state.context,T.state.localVars,!1),T.state.localVars=x}function w(){T.state.context=new A(T.state.context,T.state.localVars,!0),T.state.localVars=null}function M(){T.state.localVars=T.state.context.vars,T.state.context=T.state.context.prev}function L(e,t){var n=function(){var n=T.state,r=n.indented;if("stat"==n.lexical.type)r=n.lexical.indented;else for(var i=n.lexical;i&&")"==i.type&&i.align;i=i.prev)r=i.indented;n.lexical=new b(r,T.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function P(){var e=T.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function k(e){return function t(n){return n==e?y():";"==e||"}"==n||")"==n||"]"==n?C():y(t)}}function F(e,t){return"var"==e?y(L("vardef",t),Se,k(";"),P):"keyword a"==e?y(L("form"),Y,F,P):"keyword b"==e?y(L("form"),F,P):"keyword d"==e?T.stream.match(/^\s*$/,!1)?y():y(L("stat"),q,k(";"),P):"debugger"==e?y(k(";")):"{"==e?y(L("}"),w,ae,P,M):";"==e?y():"if"==e?("else"==T.state.lexical.info&&T.state.cc[T.state.cc.length-1]==P&&T.state.cc.pop()(),y(L("form"),Y,F,P,ye)):"function"==e?y(Ae):"for"==e?y(L("form"),Oe,F,P):"class"==e||c&&"interface"==t?(T.marked="keyword",y(L("form","class"==e?e:t),Me,P)):"variable"==e?c&&"declare"==t?(T.marked="keyword",y(F)):c&&("module"==t||"enum"==t||"type"==t)&&T.stream.match(/^\s*\w/,!1)?(T.marked="keyword","enum"==t?y(Ve):"type"==t?y(xe,k("operator"),de,k(";")):y(L("form"),he,k("{"),L("}"),ae,P,P)):c&&"namespace"==t?(T.marked="keyword",y(L("form"),B,F,P)):c&&"abstract"==t?(T.marked="keyword",y(F)):y(L("stat"),Z):"switch"==e?y(L("form"),Y,k("{"),L("}","switch"),w,ae,P,P,M):"case"==e?y(B,k(":")):"default"==e?y(k(":")):"catch"==e?y(L("form"),D,U,F,P,M):"export"==e?y(L("stat"),Fe,P):"import"==e?y(L("stat"),Be,P):"async"==e?y(F):"@"==t?y(B,F):C(L("stat"),B,k(";"),P)}function U(e){if("("==e)return y(De,k(")"))}function B(e,t){return H(e,t,!1)}function G(e,t){return H(e,t,!0)}function Y(e){return"("!=e?C():y(L(")"),q,k(")"),P)}function H(e,t,n){if(T.state.fatArrowAt==T.stream.start){var r=n?Q:$;if("("==e)return y(D,L(")"),re(De,")"),P,k("=>"),r,M);if("variable"==e)return C(D,he,k("=>"),r,M)}var i=n?V:z;return h.hasOwnProperty(e)?y(i):"function"==e?y(Ae,i):"class"==e||c&&"interface"==t?(T.marked="keyword",y(L("form"),we,P)):"keyword c"==e||"async"==e?y(n?G:B):"("==e?y(L(")"),q,k(")"),P,i):"operator"==e||"spread"==e?y(n?G:B):"["==e?y(L("]"),ze,P,i):"{"==e?ie(ee,"}",null,i):"quasi"==e?C(W,i):"new"==e?y(function(e){return function(t){return"."==t?y(e?X:K):"variable"==t&&c?y(ge,e?V:z):C(e?G:B)}}(n)):"import"==e?y(B):y()}function q(e){return e.match(/[;\}\)\],]/)?C():C(B)}function z(e,t){return","==e?y(q):V(e,t,!1)}function V(e,t,n){var r=0==n?z:V,i=0==n?B:G;return"=>"==e?y(D,n?Q:$,M):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?y(r):c&&"<"==t&&T.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?y(L(">"),re(de,">"),P,r):"?"==t?y(B,k(":"),i):y(i):"quasi"==e?C(W,r):";"!=e?"("==e?ie(G,")","call",r):"."==e?y(J,r):"["==e?y(L("]"),q,k("]"),P,r):c&&"as"==t?(T.marked="keyword",y(de,r)):"regexp"==e?(T.state.lastType=T.marked="operator",T.stream.backUp(T.stream.pos-T.stream.start-1),y(i)):void 0:void 0}function W(e,t){return"quasi"!=e?C():"${"!=t.slice(t.length-2)?y(W):y(B,j)}function j(e){if("}"==e)return T.marked="string-2",T.state.tokenize=E,y(W)}function $(e){return S(T.stream,T.state),C("{"==e?F:B)}function Q(e){return S(T.stream,T.state),C("{"==e?F:G)}function K(e,t){if("target"==t)return T.marked="keyword",y(z)}function X(e,t){if("target"==t)return T.marked="keyword",y(V)}function Z(e){return":"==e?y(P,F):C(z,k(";"),P)}function J(e){if("variable"==e)return T.marked="property",y()}function ee(e,t){return"async"==e?(T.marked="property",y(ee)):"variable"==e||"keyword"==T.style?(T.marked="property","get"==t||"set"==t?y(te):(c&&T.state.fatArrowAt==T.stream.start&&(n=T.stream.match(/^\s*:\s*/,!1))&&(T.state.fatArrowAt=T.stream.pos+n[0].length),y(ne))):"number"==e||"string"==e?(T.marked=s?"property":T.style+" property",y(ne)):"jsonld-keyword"==e?y(ne):c&&R(t)?(T.marked="keyword",y(ee)):"["==e?y(B,oe,k("]"),ne):"spread"==e?y(G,ne):"*"==t?(T.marked="keyword",y(ee)):":"==e?C(ne):void 0;var n}function te(e){return"variable"!=e?C(ne):(T.marked="property",y(Ae))}function ne(e){return":"==e?y(G):"("==e?C(Ae):void 0}function re(e,t,n){function r(i,a){if(n?n.indexOf(i)>-1:","==i){var o=T.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),y((function(n,r){return n==t||r==t?C():C(e)}),r)}return i==t||a==t?y():n&&n.indexOf(";")>-1?C(e):y(k(t))}return function(n,i){return n==t||i==t?y():C(e,r)}}function ie(e,t,n){for(var r=3;r"),de):void 0}function ue(e){if("=>"==e)return y(de)}function _e(e,t){return"variable"==e||"keyword"==T.style?(T.marked="property",y(_e)):"?"==t||"number"==e||"string"==e?y(_e):":"==e?y(de):"["==e?y(k("variable"),se,k("]"),_e):"("==e?C(Ie,_e):void 0}function pe(e,t){return"variable"==e&&T.stream.match(/^\s*[?:]/,!1)||"?"==t?y(pe):":"==e?y(de):"spread"==e?y(pe):C(de)}function me(e,t){return"<"==t?y(L(">"),re(de,">"),P,me):"|"==t||"."==e||"&"==t?y(de):"["==e?y(de,k("]"),me):"extends"==t||"implements"==t?(T.marked="keyword",y(de)):"?"==t?y(de,k(":"),de):void 0}function ge(e,t){if("<"==t)return y(L(">"),re(de,">"),P,me)}function fe(){return C(de,Ee)}function Ee(e,t){if("="==t)return y(de)}function Se(e,t){return"enum"==t?(T.marked="keyword",y(Ve)):C(he,oe,Te,Ce)}function he(e,t){return c&&R(t)?(T.marked="keyword",y(he)):"variable"==e?(N(t),y()):"spread"==e?y(he):"["==e?ie(ve,"]"):"{"==e?ie(be,"}"):void 0}function be(e,t){return"variable"!=e||T.stream.match(/^\s*:/,!1)?("variable"==e&&(T.marked="property"),"spread"==e?y(he):"}"==e?C():"["==e?y(B,k("]"),k(":"),be):y(k(":"),he,Te)):(N(t),y(Te))}function ve(){return C(he,Te)}function Te(e,t){if("="==t)return y(G)}function Ce(e){if(","==e)return y(Se)}function ye(e,t){if("keyword b"==e&&"else"==t)return y(L("form","else"),F,P)}function Oe(e,t){return"await"==t?y(Oe):"("==e?y(L(")"),Ne,P):void 0}function Ne(e){return"var"==e?y(Se,Re):"variable"==e?y(Re):C(Re)}function Re(e,t){return")"==e?y():";"==e?y(Re):"in"==t||"of"==t?(T.marked="keyword",y(B,Re)):C(B,Re)}function Ae(e,t){return"*"==t?(T.marked="keyword",y(Ae)):"variable"==e?(N(t),y(Ae)):"("==e?y(D,L(")"),re(De,")"),P,le,F,M):c&&"<"==t?y(L(">"),re(fe,">"),P,Ae):void 0}function Ie(e,t){return"*"==t?(T.marked="keyword",y(Ie)):"variable"==e?(N(t),y(Ie)):"("==e?y(D,L(")"),re(De,")"),P,le,M):c&&"<"==t?y(L(">"),re(fe,">"),P,Ie):void 0}function xe(e,t){return"keyword"==e||"variable"==e?(T.marked="type",y(xe)):"<"==t?y(L(">"),re(fe,">"),P):void 0}function De(e,t){return"@"==t&&y(B,De),"spread"==e?y(De):c&&R(t)?(T.marked="keyword",y(De)):c&&"this"==e?y(oe,Te):C(he,oe,Te)}function we(e,t){return"variable"==e?Me(e,t):Le(e,t)}function Me(e,t){if("variable"==e)return N(t),y(Le)}function Le(e,t){return"<"==t?y(L(">"),re(fe,">"),P,Le):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(T.marked="keyword"),y(c?de:B,Le)):"{"==e?y(L("}"),Pe,P):void 0}function Pe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&R(t))&&T.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(T.marked="keyword",y(Pe)):"variable"==e||"keyword"==T.style?(T.marked="property",y(c?ke:Ae,Pe)):"number"==e||"string"==e?y(c?ke:Ae,Pe):"["==e?y(B,oe,k("]"),c?ke:Ae,Pe):"*"==t?(T.marked="keyword",y(Pe)):c&&"("==e?C(Ie,Pe):";"==e||","==e?y(Pe):"}"==e?y():"@"==t?y(B,Pe):void 0}function ke(e,t){if("?"==t)return y(ke);if(":"==e)return y(de,Te);if("="==t)return y(G);var n=T.state.lexical.prev;return C(n&&"interface"==n.info?Ie:Ae)}function Fe(e,t){return"*"==t?(T.marked="keyword",y(qe,k(";"))):"default"==t?(T.marked="keyword",y(B,k(";"))):"{"==e?y(re(Ue,"}"),qe,k(";")):C(F)}function Ue(e,t){return"as"==t?(T.marked="keyword",y(k("variable"))):"variable"==e?C(G,Ue):void 0}function Be(e){return"string"==e?y():"("==e?C(B):C(Ge,Ye,qe)}function Ge(e,t){return"{"==e?ie(Ge,"}"):("variable"==e&&N(t),"*"==t&&(T.marked="keyword"),y(He))}function Ye(e){if(","==e)return y(Ge,Ye)}function He(e,t){if("as"==t)return T.marked="keyword",y(Ge)}function qe(e,t){if("from"==t)return T.marked="keyword",y(B)}function ze(e){return"]"==e?y():C(re(G,"]"))}function Ve(){return C(L("form"),he,k("{"),L("}"),re(We,"}"),P,P)}function We(){return C(he,Te)}function je(e,t,n){return t.tokenize==g&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(n||0)))}return M.lex=!0,P.lex=!0,{startState:function(e){var t={tokenize:g,lastType:"sof",cc:[],lexical:new b((e||0)-a,0,"block",!1),localVars:n.localVars,context:n.localVars&&new A(null,null,!1),indented:e||0};return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),S(e,t)),t.tokenize!=f&&e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==r?n:(t.lastType="operator"!=r||"++"!=i&&"--"!=i?r:"incdec",function(e,t,n,r,i){var a=e.cc;for(T.state=e,T.stream=i,T.marked=null,T.cc=a,T.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((a.length?a.pop():l?B:F)(n,r)){for(;a.length&&a[a.length-1].lex;)a.pop()();return T.marked?T.marked:"variable"==n&&v(e,r)?"variable-2":t}}(t,n,r,i,e))},indent:function(t,r){if(t.tokenize==f)return e.Pass;if(t.tokenize!=g)return 0;var i,s=r&&r.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(r))for(var c=t.cc.length-1;c>=0;--c){var d=t.cc[c];if(d==P)l=l.prev;else if(d!=ye)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(i=t.cc[t.cc.length-1])&&(i==z||i==V)&&!/^[,\.=+\-*:?[\(]/.test(r));)l=l.prev;o&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var u=l.type,p=s==u;return"vardef"==u?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==u&&"{"==s?l.indented:"form"==u?l.indented+a:"stat"==u?l.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||_.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?o||a:0):"switch"!=l.info||p||0==n.doubleIndentSwitch?l.align?l.column+(p?0:1):l.indented+(p?0:a):l.indented+(/^(?:case|default)\b/.test(r)?a:2*a)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:je,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=B&&t!=G||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(1))},function(e,t,n){!function(e){e.defineOption("autoCloseTags",!1,(function(o,s,l){if(l!=e.Init&&l&&o.removeKeyMap("autoCloseTags"),s){var c={name:"autoCloseTags"};("object"!=typeof s||s.whenClosing)&&(c["'/'"]=function(t){return function(t){return t.getOption("disableInput")?e.Pass:r(t,!0)}(t)}),("object"!=typeof s||s.whenOpening)&&(c["'>'"]=function(r){return function(r){if(r.getOption("disableInput"))return e.Pass;for(var o=r.listSelections(),s=[],l=r.getOption("autoCloseTags"),c=0;cd.ch&&(g=g.slice(0,g.length-u.end+d.ch));var h=g.toLowerCase();if(!g||"string"==u.type&&(u.end!=d.ch||!/[\"\']/.test(u.string.charAt(u.string.length-1))||1==u.string.length)||"tag"==u.type&&m.close||u.string.indexOf("/")==d.ch-u.start-1||E&&i(E,h)>-1||a(r,_.mode.xmlCurrentContext&&_.mode.xmlCurrentContext(p)||[],g,d,!0))return e.Pass;var b="object"==typeof l&&l.emptyTags;if(b&&i(b,g)>-1)s[c]={text:"/>",newPos:e.Pos(d.line,d.ch+2)};else{var v=S&&i(S,h)>-1;s[c]={indent:v,text:">"+(v?"\n\n":"")+"",newPos:v?e.Pos(d.line+1,0):e.Pos(d.line,d.ch+1)}}}var T="object"==typeof l&&l.dontIndentOnAutoClose;for(c=o.length-1;c>=0;c--){var C=s[c];r.replaceRange(C.text,o[c].head,o[c].anchor,"+insert");var y=r.listSelections().slice(0);y[c]={head:C.newPos,anchor:C.newPos},r.setSelections(y),!T&&C.indent&&(r.indentLine(C.newPos.line,null,!0),r.indentLine(C.newPos.line+1,null,!0))}}(r)}),o.addKeyMap(c)}}));var t=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],n=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];function r(t,n){for(var r=t.listSelections(),i=[],o=n?"/":""!=t.getLine(d.line).charAt(u.end)&&(m+=">"),i[c]=m}if(t.replaceSelections(i),r=t.listSelections(),!l)for(c=0;c=0&&n[c]==r;c--)++l;for(i=s.to,c=1;c[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;function i(e,n){var r=n.line,i=0,a=0,o=t.exec(e.getLine(r)),s=o[1];do{var l=r+(i+=1),c=e.getLine(l),d=t.exec(c);if(d){var u=d[1],_=parseInt(o[3],10)+i-a,p=parseInt(d[3],10),m=p;if(s!==u||isNaN(p)){if(s.length>u.length)return;if(s.lengthp&&(m=_+1),e.replaceRange(c.replace(t,u+m+d[4]+d[5]),{line:l,ch:0},{line:l,ch:c.length})}}while(d)}e.commands.newlineAndIndentContinueMarkdownList=function(a){if(a.getOption("disableInput"))return e.Pass;for(var o=a.listSelections(),s=[],l=0;l\s*$/.test(m),S=!/>\s*$/.test(m);(E||S)&&a.replaceRange("",{line:c.line,ch:0},{line:c.line,ch:c.ch+1}),s[l]="\n"}else{var h=g[1],b=g[5],v=!(r.test(g[2])||g[2].indexOf(">")>=0),T=v?parseInt(g[3],10)+1+g[4]:g[2].replace("x"," ");s[l]="\n"+h+T+b,v&&i(a,c)}}a.replaceSelections(s)}}(n(1))},function(e,t,n){!function(e){var t={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},n=e.Pos;function r(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,o){o&&o!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(a(r(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))}));var i={Backspace:function(t){var i=s(t);if(!i||t.getOption("disableInput"))return e.Pass;for(var a=r(i,"pairs"),o=t.listSelections(),c=0;c=0;c--){var u=o[c].head;t.replaceRange("",n(u.line,u.ch-1),n(u.line,u.ch+1),"+delete")}},Enter:function(t){var n=s(t),i=n&&r(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var a=t.listSelections(),o=0;o1&&_.indexOf(i)>=0&&t.getRange(n(h.line,h.ch-2),h)==i+i){if(h.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(h.line,h.ch-2))))return e.Pass;E="addFour"}else if(p){var v=0==h.ch?" ":t.getRange(n(h.line,h.ch-1),h);if(e.isWordChar(b)||v==i||e.isWordChar(v))return e.Pass;E="both"}else{if(!g||!(0===b.length||/\s/.test(b)||u.indexOf(b)>-1))return e.Pass;E="both"}else E=p&&c(t,h)?"both":_.indexOf(i)>=0&&t.getRange(h,n(h.line,h.ch+3))==i+i+i?"skipThree":"skip";if(d){if(d!=E)return e.Pass}else d=E}var T=l%2?o.charAt(l-1):i,C=l%2?i:o.charAt(l+1);t.operation((function(){if("skip"==d)t.execCommand("goCharRight");else if("skipThree"==d)for(var r=0;r<3;r++)t.execCommand("goCharRight");else if("surround"==d){var i=t.getSelections();for(r=0;r0,{anchor:new n(a.anchor.line,a.anchor.ch+(o?-1:1)),head:new n(a.head.line,a.head.ch+(o?1:-1))});t.setSelections(i)}else"both"==d?(t.replaceSelection(T+C,null),t.triggerElectric(T+C),t.execCommand("goCharLeft")):"addFour"==d&&(t.replaceSelection(T+T+T+T,"before"),t.execCommand("goCharRight"));var a,o}))}(i,t)}}function s(e){var t=e.state.closeBrackets;return!t||t.override?t:e.getModeAt(e.getCursor()).closeBrackets||t}function l(e,t){var r=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==r.length?r:null}function c(e,t){var r=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}a(t.pairs+"`")}(n(1))},function(e,t,n){!function(e){"use strict";function t(e,t){function n(e){clearTimeout(r.doRedraw),r.doRedraw=setTimeout((function(){r.redraw()}),e)}this.cm=e,this.options=t,this.buttonHeight=t.scrollButtonHeight||e.getOption("scrollButtonHeight"),this.annotations=[],this.doRedraw=this.doUpdate=null,this.div=e.getWrapperElement().appendChild(document.createElement("div")),this.div.style.cssText="position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none",this.computeScale();var r=this;e.on("refresh",this.resizeHandler=function(){clearTimeout(r.doUpdate),r.doUpdate=setTimeout((function(){r.computeScale()&&n(20)}),100)}),e.on("markerAdded",this.resizeHandler),e.on("markerCleared",this.resizeHandler),!1!==t.listenForChanges&&e.on("changes",this.changeHandler=function(){n(250)})}e.defineExtension("annotateScrollbar",(function(e){return"string"==typeof e&&(e={className:e}),new t(this,e)})),e.defineOption("scrollButtonHeight",0),t.prototype.computeScale=function(){var e=this.cm,t=(e.getWrapperElement().clientHeight-e.display.barHeight-2*this.buttonHeight)/e.getScrollerElement().scrollHeight;if(t!=this.hScale)return this.hScale=t,!0},t.prototype.update=function(e){this.annotations=e,this.redraw()},t.prototype.redraw=function(e){!1!==e&&this.computeScale();var t=this.cm,n=this.hScale,r=document.createDocumentFragment(),i=this.annotations,a=t.getOption("lineWrapping"),o=a&&1.5*t.defaultTextHeight(),s=null,l=null;function c(e,n){return s!=e.line&&(s=e.line,l=t.getLineHandle(s)),l.widgets&&l.widgets.length||a&&l.height>o?t.charCoords(e,"local")[n?"top":"bottom"]:t.heightAtLine(l,"local")+(n?0:l.height)}var d=t.lastLine();if(t.display.barWidth)for(var u,_=0;_d)){for(var m=u||c(p.from,!0)*n,g=c(p.to,!1)*n;_d)&&!((u=c(i[_+1].from,!0)*n)>g+.9);)g=c((p=i[++_]).to,!1)*n;if(g!=m){var f=Math.max(g-m,3),E=r.appendChild(document.createElement("div"));E.style.cssText="position: absolute; right: 0px; width: "+Math.max(t.display.barWidth-1,2)+"px; top: "+(m+this.buttonHeight)+"px; height: "+f+"px",E.className=this.options.className,p.id&&E.setAttribute("annotation-id",p.id)}}}this.div.textContent="",this.div.appendChild(r)},t.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("changes",this.changeHandler),this.div.parentNode.removeChild(this.div)}}(n(1))},function(e,t,n){!function(e){"use strict";var t="CodeMirror-activeline-background";function n(e){for(var n=0;n1)return s(e);var t=e.getCursor("start"),n=e.getCursor("end"),r=e.state.markedSelection;if(!r.length)return a(e,t,n);var l=r[0].find(),c=r[r.length-1].find();if(!l||!c||n.line-t.line<=8||i(t,c.to)>=0||i(n,l.from)<=0)return s(e);for(;i(t,l.from)>0;)r.shift().clear(),l=r[0].find();for(i(t,l.from)<0&&(l.to.line-t.line<8?(r.shift().clear(),a(e,t,l.to,0)):a(e,t,l.from,0));i(n,c.to)<0;)r.pop().clear(),c=r[r.length-1].find();i(n,c.to)>0&&(n.line-c.from.line<8?(r.pop().clear(),a(e,c.from,n)):a(e,c.to,n))}(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){o(e)}))}e.defineOption("styleSelectedText",!1,(function(r,i,a){var l=a&&a!=e.Init;i&&!l?(r.state.markedSelection=[],r.state.markedSelectionStyle="string"==typeof i?i:"CodeMirror-selectedtext",s(r),r.on("cursorActivity",t),r.on("change",n)):!i&&l&&(r.off("cursorActivity",t),r.off("change",n),o(r),r.state.markedSelection=r.state.markedSelectionStyle=null)}));var r=e.Pos,i=e.cmpPos;function a(e,t,n,a){if(0!=i(t,n))for(var o=e.state.markedSelection,s=e.state.markedSelectionStyle,l=t.line;;){var c=l==t.line?t:r(l,0),d=l+8,u=d>=n.line,_=u?n:r(d,0),p=e.markText(c,_,{className:s});if(null==a?o.push(p):o.splice(a++,0,p),u)break;l=d}}function o(e){for(var t=e.state.markedSelection,n=0;n=c){if(_&&o&&_.test(o.className))return;a=i(s.indicatorOpen)}}(a||o)&&e.setGutterMarker(n,s.gutter,a)}))}function o(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function s(e){var t=e.getViewport(),n=e.state.foldGutter;n&&(e.operation((function(){a(e,t.from,t.to)})),n.from=t.from,n.to=t.to)}function l(e,n,i){var a=e.state.foldGutter;if(a){var o=a.options;if(i==o.gutter){var s=r(e,n);s?s.clear():e.foldCode(t(n,0),o)}}}function c(e){var t=e.state.foldGutter;if(t){var n=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){s(e)}),n.foldOnChangeTimeSpan||600)}}function d(e){var t=e.state.foldGutter;if(t){var n=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){var n=e.getViewport();t.from==t.to||n.from-t.to>20||t.from-n.to>20?s(e):e.operation((function(){n.fromt.to&&(a(e,t.to,n.to),t.to=n.to)}))}),n.updateViewportTimeSpan||400)}}function u(e,t){var n=e.state.foldGutter;if(n){var r=t.line;r>=n.from&&ri))break;a=o}}return a?{from:e.Pos(r.line,n.getLine(r.line).length),to:e.Pos(a,n.getLine(a).length)}:void 0}}))}(n(1))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","brace",(function(t,n){var r,i=n.line,a=t.getLine(i);function o(o){for(var s=n.ch,l=0;;){var c=s<=0?-1:a.lastIndexOf(o,s-1);if(-1!=c){if(1==l&&ct.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));if(/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"keyword"!=r.type||"import"!=r.string)return null;for(var i=n,a=Math.min(t.lastLine(),n+10);i<=a;++i){var o=t.getLine(i).indexOf(";");if(-1!=o)return{startCh:r.end,end:e.Pos(i,o)}}}var i,a=n.line,o=r(a);if(!o||r(a-1)||(i=r(a-2))&&i.end.line==a-1)return null;for(var s=o.end;;){var l=r(s.line+1);if(null==l)break;s=l.end}return{from:t.clipPos(e.Pos(a,o.startCh+1)),to:s}})),e.registerHelper("fold","include",(function(t,n){function r(n){if(nt.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));return/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"meta"==r.type&&"#include"==r.string.slice(0,8)?r.start+8:void 0}var i=n.line,a=r(i);if(null==a||null!=r(i-1))return null;for(var o=i;null!=r(o+1);)++o;return{from:e.Pos(i,a+1),to:t.clipPos(e.Pos(o))}}))}(n(1))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","markdown",(function(t,n){function r(n){var r=t.getTokenTypeAt(e.Pos(n,0));return r&&/\bheader\b/.test(r)}function i(e,t,n){var i=t&&t.match(/^#+/);return i&&r(e)?i[0].length:(i=n&&n.match(/^[=\-]+\s*$/))&&r(e+1)?"="==n[0]?1:2:100}var a=t.getLine(n.line),o=t.getLine(n.line+1),s=i(n.line,a,o);if(100!==s){for(var l=t.lastLine(),c=n.line,d=t.getLine(c+2);c ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:g,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function r(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||h.defaults,this.rules=n.normal,this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.tables?this.rules=n.tables:this.rules=n.gfm)}n._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,n._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,n.def=u(n.def).replace("label",n._label).replace("title",n._title).getRegex(),n.bullet=/(?:[*+-]|\d+\.)/,n.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,n.item=u(n.item,"gm").replace(/bull/g,n.bullet).getRegex(),n.list=u(n.list).replace(/bull/g,n.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+n.def.source+")").getRegex(),n._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",n._comment=//,n.html=u(n.html,"i").replace("comment",n._comment).replace("tag",n._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),n.paragraph=u(n.paragraph).replace("hr",n.hr).replace("heading",n.heading).replace("lheading",n.lheading).replace("tag",n._tag).getRegex(),n.blockquote=u(n.blockquote).replace("paragraph",n.paragraph).getRegex(),n.normal=f({},n),n.gfm=f({},n.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),n.gfm.paragraph=u(n.paragraph).replace("(?!","(?!"+n.gfm.fences.source.replace("\\1","\\2")+"|"+n.list.source.replace("\\1","\\3")+"|").getRegex(),n.tables=f({},n.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),n.pedantic=f({},n.normal,{html:u("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",n._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),r.rules=n,r.lex=function(e,t){return new r(t).lex(e)},r.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},r.prototype.token=function(e,t){var r,i,a,o,s,l,c,d,u,_,p,m,g,f,h,b;for(e=e.replace(/^ +$/gm,"");e;)if((a=this.rules.newline.exec(e))&&(e=e.substring(a[0].length),a[0].length>1&&this.tokens.push({type:"space"})),a=this.rules.code.exec(e))e=e.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?a:S(a,"\n")});else if(a=this.rules.fences.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=this.rules.heading.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(t&&(a=this.rules.nptable.exec(e))&&(l={type:"table",header:E(a[1].replace(/^ *| *\| *$/g,"")),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3]?a[3].replace(/\n$/,"").split("\n"):[]}).header.length===l.align.length){for(e=e.substring(a[0].length),p=0;p ?/gm,""),this.token(a,t),this.tokens.push({type:"blockquote_end"});else if(a=this.rules.list.exec(e)){for(e=e.substring(a[0].length),c={type:"list_start",ordered:f=(o=a[2]).length>1,start:f?+o:"",loose:!1},this.tokens.push(c),d=[],r=!1,g=(a=a[0].match(this.rules.item)).length,p=0;p1&&s.length>1||(e=a.slice(p+1).join("\n")+e,p=g-1)),i=r||/\n\n(?!\s*$)/.test(l),p!==g-1&&(r="\n"===l.charAt(l.length-1),i||(i=r)),i&&(c.loose=!0),b=void 0,(h=/^\[[ xX]\] /.test(l))&&(b=" "!==l[1],l=l.replace(/^\[[ xX]\] +/,"")),u={type:"list_item_start",task:h,checked:b,loose:i},d.push(u),this.tokens.push(u),this.token(l,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(g=d.length,p=0;p?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:g,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\s.])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\s.])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:g,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\[\]\\^_`{|}~])/g,i._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,i._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,i.autolink=u(i.autolink).replace("scheme",i._scheme).replace("email",i._email).getRegex(),i._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,i.tag=u(i.tag).replace("comment",n._comment).replace("attribute",i._attribute).getRegex(),i._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,i._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,i._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,i.link=u(i.link).replace("label",i._label).replace("href",i._href).replace("title",i._title).getRegex(),i.reflink=u(i.reflink).replace("label",i._label).getRegex(),i.normal=f({},i),i.pedantic=f({},i.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:u(/^!?\[(label)\]\((.*?)\)/).replace("label",i._label).getRegex(),reflink:u(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",i._label).getRegex()}),i.gfm=f({},i.normal,{escape:u(i.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:u(i.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),i.gfm.url=u(i.gfm.url).replace("email",i.gfm._extended_email).getRegex(),i.breaks=f({},i.gfm,{br:u(i.br).replace("{2,}","*").getRegex(),text:u(i.gfm.text).replace("{2,}","*").getRegex()}),a.rules=i,a.output=function(e,t,n){return new a(t,n).output(e)},a.prototype.output=function(e){for(var t,n,r,i,o,s,l="";e;)if(o=this.rules.escape.exec(e))e=e.substring(o[0].length),l+=o[1];else if(o=this.rules.autolink.exec(e))e=e.substring(o[0].length),r="@"===o[2]?"mailto:"+(n=c(this.mangle(o[1]))):n=c(o[1]),l+=this.renderer.link(r,null,n);else if(this.inLink||!(o=this.rules.url.exec(e))){if(o=this.rules.tag.exec(e))!this.inLink&&/^/i.test(o[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(this.inRawBlock=!1),e=e.substring(o[0].length),l+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):c(o[0]):o[0];else if(o=this.rules.link.exec(e))e=e.substring(o[0].length),this.inLink=!0,r=o[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],i=t[3]):i="":i=o[3]?o[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),l+=this.outputLink(o,{href:a.escapes(r),title:a.escapes(i)}),this.inLink=!1;else if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){if(e=e.substring(o[0].length),t=(o[2]||o[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){l+=o[0].charAt(0),e=o[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(o,t),this.inLink=!1}else if(o=this.rules.strong.exec(e))e=e.substring(o[0].length),l+=this.renderer.strong(this.output(o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.em.exec(e))e=e.substring(o[0].length),l+=this.renderer.em(this.output(o[6]||o[5]||o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.code.exec(e))e=e.substring(o[0].length),l+=this.renderer.codespan(c(o[2].trim(),!0));else if(o=this.rules.br.exec(e))e=e.substring(o[0].length),l+=this.renderer.br();else if(o=this.rules.del.exec(e))e=e.substring(o[0].length),l+=this.renderer.del(this.output(o[1]));else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),this.inRawBlock?l+=this.renderer.text(o[0]):l+=this.renderer.text(c(this.smartypants(o[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===o[2])r="mailto:"+(n=c(o[0]));else{do{s=o[0],o[0]=this.rules._backpedal.exec(o[0])[0]}while(s!==o[0]);n=c(o[0]),r="www."===o[1]?"http://"+n:n}e=e.substring(o[0].length),l+=this.renderer.link(r,null,n)}return l},a.escapes=function(e){return e?e.replace(a.rules._escapes,"$1"):e},a.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},a.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},a.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
'+(n?e:c(e,!0))+"
\n":"
"+(n?e:c(e,!0))+"
"},o.prototype.blockquote=function(e){return"
\n"+e+"
\n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},o.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},o.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},o.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},o.prototype.checkbox=function(e){return" "},o.prototype.paragraph=function(e){return"

    "+e+"

    \n"},o.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},o.prototype.tablerow=function(e){return"\n"+e+"\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},o.prototype.strong=function(e){return""+e+""},o.prototype.em=function(e){return""+e+""},o.prototype.codespan=function(e){return""+e+""},o.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},o.prototype.del=function(e){return""+e+""},o.prototype.link=function(e,t,n){if(null===(e=_(this.options.sanitize,this.options.baseUrl,e)))return n;var r='
    "},o.prototype.image=function(e,t,n){if(null===(e=_(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},o.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},l.parse=function(e,t){return new l(t).parse(e)},l.prototype.parse=function(e){this.inline=new a(e.links,this.options),this.inlineText=new a(e.links,f({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},l.prototype.next=function(){return this.token=this.tokens.pop()},l.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},l.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},l.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,d(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",a="";for(n="",e=0;e"']/,c.escapeReplace=/[&<>"']/g,c.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},c.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,c.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var p={},m=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function g(){}function f(e){for(var t,n,r=1;r=0&&"\\"===n[i];)r=!r;return r?"|":" |"})).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.lengthAn error occurred:

    "+c(e.message+"",!0)+"
    ";throw e}}g.exec=g,h.options=h.setOptions=function(e){return f(h.defaults,e),h},h.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new o,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},h.defaults=h.getDefaults(),h.Parser=l,h.parser=l.parse,h.Renderer=o,h.TextRenderer=s,h.Lexer=r,h.lexer=r.lex,h.InlineLexer=a,h.inlineLexer=a.output,h.parse=h,e.exports=h}(this||"undefined"!=typeof window&&window)}).call(this,n(13))},function(e,t,n){var r=n(51);r.registerLanguage("1c",n(52)),r.registerLanguage("abnf",n(53)),r.registerLanguage("accesslog",n(54)),r.registerLanguage("actionscript",n(55)),r.registerLanguage("ada",n(56)),r.registerLanguage("angelscript",n(57)),r.registerLanguage("apache",n(58)),r.registerLanguage("applescript",n(59)),r.registerLanguage("arcade",n(60)),r.registerLanguage("cpp",n(61)),r.registerLanguage("arduino",n(62)),r.registerLanguage("armasm",n(63)),r.registerLanguage("xml",n(64)),r.registerLanguage("asciidoc",n(65)),r.registerLanguage("aspectj",n(66)),r.registerLanguage("autohotkey",n(67)),r.registerLanguage("autoit",n(68)),r.registerLanguage("avrasm",n(69)),r.registerLanguage("awk",n(70)),r.registerLanguage("axapta",n(71)),r.registerLanguage("bash",n(72)),r.registerLanguage("basic",n(73)),r.registerLanguage("bnf",n(74)),r.registerLanguage("brainfuck",n(75)),r.registerLanguage("cal",n(76)),r.registerLanguage("capnproto",n(77)),r.registerLanguage("ceylon",n(78)),r.registerLanguage("clean",n(79)),r.registerLanguage("clojure",n(80)),r.registerLanguage("clojure-repl",n(81)),r.registerLanguage("cmake",n(82)),r.registerLanguage("coffeescript",n(83)),r.registerLanguage("coq",n(84)),r.registerLanguage("cos",n(85)),r.registerLanguage("crmsh",n(86)),r.registerLanguage("crystal",n(87)),r.registerLanguage("cs",n(88)),r.registerLanguage("csp",n(89)),r.registerLanguage("css",n(90)),r.registerLanguage("d",n(91)),r.registerLanguage("markdown",n(92)),r.registerLanguage("dart",n(93)),r.registerLanguage("delphi",n(94)),r.registerLanguage("diff",n(95)),r.registerLanguage("django",n(96)),r.registerLanguage("dns",n(97)),r.registerLanguage("dockerfile",n(98)),r.registerLanguage("dos",n(99)),r.registerLanguage("dsconfig",n(100)),r.registerLanguage("dts",n(101)),r.registerLanguage("dust",n(102)),r.registerLanguage("ebnf",n(103)),r.registerLanguage("elixir",n(104)),r.registerLanguage("elm",n(105)),r.registerLanguage("ruby",n(106)),r.registerLanguage("erb",n(107)),r.registerLanguage("erlang-repl",n(108)),r.registerLanguage("erlang",n(109)),r.registerLanguage("excel",n(110)),r.registerLanguage("fix",n(111)),r.registerLanguage("flix",n(112)),r.registerLanguage("fortran",n(113)),r.registerLanguage("fsharp",n(114)),r.registerLanguage("gams",n(115)),r.registerLanguage("gauss",n(116)),r.registerLanguage("gcode",n(117)),r.registerLanguage("gherkin",n(118)),r.registerLanguage("glsl",n(119)),r.registerLanguage("gml",n(120)),r.registerLanguage("go",n(121)),r.registerLanguage("golo",n(122)),r.registerLanguage("gradle",n(123)),r.registerLanguage("groovy",n(124)),r.registerLanguage("haml",n(125)),r.registerLanguage("handlebars",n(126)),r.registerLanguage("haskell",n(127)),r.registerLanguage("haxe",n(128)),r.registerLanguage("hsp",n(129)),r.registerLanguage("htmlbars",n(130)),r.registerLanguage("http",n(131)),r.registerLanguage("hy",n(132)),r.registerLanguage("inform7",n(133)),r.registerLanguage("ini",n(134)),r.registerLanguage("irpf90",n(135)),r.registerLanguage("isbl",n(136)),r.registerLanguage("java",n(137)),r.registerLanguage("javascript",n(138)),r.registerLanguage("jboss-cli",n(139)),r.registerLanguage("json",n(140)),r.registerLanguage("julia",n(141)),r.registerLanguage("julia-repl",n(142)),r.registerLanguage("kotlin",n(143)),r.registerLanguage("lasso",n(144)),r.registerLanguage("ldif",n(145)),r.registerLanguage("leaf",n(146)),r.registerLanguage("less",n(147)),r.registerLanguage("lisp",n(148)),r.registerLanguage("livecodeserver",n(149)),r.registerLanguage("livescript",n(150)),r.registerLanguage("llvm",n(151)),r.registerLanguage("lsl",n(152)),r.registerLanguage("lua",n(153)),r.registerLanguage("makefile",n(154)),r.registerLanguage("mathematica",n(155)),r.registerLanguage("matlab",n(156)),r.registerLanguage("maxima",n(157)),r.registerLanguage("mel",n(158)),r.registerLanguage("mercury",n(159)),r.registerLanguage("mipsasm",n(160)),r.registerLanguage("mizar",n(161)),r.registerLanguage("perl",n(162)),r.registerLanguage("mojolicious",n(163)),r.registerLanguage("monkey",n(164)),r.registerLanguage("moonscript",n(165)),r.registerLanguage("n1ql",n(166)),r.registerLanguage("nginx",n(167)),r.registerLanguage("nimrod",n(168)),r.registerLanguage("nix",n(169)),r.registerLanguage("nsis",n(170)),r.registerLanguage("objectivec",n(171)),r.registerLanguage("ocaml",n(172)),r.registerLanguage("openscad",n(173)),r.registerLanguage("oxygene",n(174)),r.registerLanguage("parser3",n(175)),r.registerLanguage("pf",n(176)),r.registerLanguage("pgsql",n(177)),r.registerLanguage("php",n(178)),r.registerLanguage("plaintext",n(179)),r.registerLanguage("pony",n(180)),r.registerLanguage("powershell",n(181)),r.registerLanguage("processing",n(182)),r.registerLanguage("profile",n(183)),r.registerLanguage("prolog",n(184)),r.registerLanguage("properties",n(185)),r.registerLanguage("protobuf",n(186)),r.registerLanguage("puppet",n(187)),r.registerLanguage("purebasic",n(188)),r.registerLanguage("python",n(189)),r.registerLanguage("q",n(190)),r.registerLanguage("qml",n(191)),r.registerLanguage("r",n(192)),r.registerLanguage("reasonml",n(193)),r.registerLanguage("rib",n(194)),r.registerLanguage("roboconf",n(195)),r.registerLanguage("routeros",n(196)),r.registerLanguage("rsl",n(197)),r.registerLanguage("ruleslanguage",n(198)),r.registerLanguage("rust",n(199)),r.registerLanguage("sas",n(200)),r.registerLanguage("scala",n(201)),r.registerLanguage("scheme",n(202)),r.registerLanguage("scilab",n(203)),r.registerLanguage("scss",n(204)),r.registerLanguage("shell",n(205)),r.registerLanguage("smali",n(206)),r.registerLanguage("smalltalk",n(207)),r.registerLanguage("sml",n(208)),r.registerLanguage("sqf",n(209)),r.registerLanguage("sql",n(210)),r.registerLanguage("stan",n(211)),r.registerLanguage("stata",n(212)),r.registerLanguage("step21",n(213)),r.registerLanguage("stylus",n(214)),r.registerLanguage("subunit",n(215)),r.registerLanguage("swift",n(216)),r.registerLanguage("taggerscript",n(217)),r.registerLanguage("yaml",n(218)),r.registerLanguage("tap",n(219)),r.registerLanguage("tcl",n(220)),r.registerLanguage("tex",n(221)),r.registerLanguage("thrift",n(222)),r.registerLanguage("tp",n(223)),r.registerLanguage("twig",n(224)),r.registerLanguage("typescript",n(225)),r.registerLanguage("vala",n(226)),r.registerLanguage("vbnet",n(227)),r.registerLanguage("vbscript",n(228)),r.registerLanguage("vbscript-html",n(229)),r.registerLanguage("verilog",n(230)),r.registerLanguage("vhdl",n(231)),r.registerLanguage("vim",n(232)),r.registerLanguage("x86asm",n(233)),r.registerLanguage("xl",n(234)),r.registerLanguage("xquery",n(235)),r.registerLanguage("zephir",n(236)),e.exports=r},function(e,t,n){var r,i,a;i=function(e){var t=[],n=Object.keys,r={},i={},a=!0,o=/^(no-?highlight|plain|text)$/i,s=/\blang(?:uage)?-([\w-]+)\b/i,l=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,c="Could not find the language '{}', did you forget to load/include a language module?",d={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},u="of and for in not or if then".split(" ");function _(e){return e.replace(/&/g,"&").replace(//g,">")}function p(e){return e.nodeName.toLowerCase()}function m(e){return o.test(e)}function g(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach((function(e){for(t in e)n[t]=e[t]})),n}function f(e){var t=[];return function e(n,r){for(var i=n.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:r,node:i}),r=e(i,r),p(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:i}));return r}(e,0),t}function E(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(t){return g(e,{variants:null},t)}))),e.cached_variants?e.cached_variants:function e(t){return!!t&&(t.endsWithParent||e(t.starts))}(e)?[g(e,{starts:e.starts?g(e.starts):null})]:Object.isFrozen(e)?[g(e)]:[e]}function S(e,t){return t?Number(t):(n=e,-1!=u.indexOf(n.toLowerCase())?0:1);var n}function h(e){function t(e){return e&&e.source||e}function r(n,r){return new RegExp(t(n),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}function i(e){var n,i,a={},o=[],s={},l=1;function c(e,t){a[l]=e,o.push([e,t]),l+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(t)+1}for(var d=0;d0&&(a+=n),a+="(";l.length>0;){var c=r.exec(l);if(null==c){a+=l;break}a+=l.substring(0,c.index),l=l.substring(c.index+c[0].length),"\\"==c[0][0]&&c[1]?a+="\\"+String(Number(c[1])+s):(a+=c[0],"("==c[0]&&i++)}a+=")"}return a}(u,"|"),!0),s.lastIndex=0,s.exec=function(t){var r;if(0===o.length)return null;n.lastIndex=s.lastIndex;var i=n.exec(t);if(!i)return null;for(var l=0;l')+t+(n?"":"")}function u(){O+=null!=C.subLanguage?function(){var e="string"==typeof C.subLanguage;if(e&&!r[C.subLanguage])return _(R);var t=e?b(C.subLanguage,R,!0,y[C.subLanguage]):v(R,C.subLanguage.length?C.subLanguage:void 0);return C.relevance>0&&(A+=t.relevance),e&&(y[C.subLanguage]=t.top),l(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!C.keywords)return _(R);for(r="",t=0,C.lexemesRe.lastIndex=0,n=C.lexemesRe.exec(R);n;)r+=_(R.substring(t,n.index)),(e=s(C,n))?(A+=e[1],r+=l(e[0],_(n[0]))):r+=_(n[0]),t=C.lexemesRe.lastIndex,n=C.lexemesRe.exec(R);return r+_(R.substr(t))}(),R=""}function p(e){O+=e.className?l(e.className,"",!0):"",C=Object.create(e,{parent:{value:C}})}function m(e){var t=e[0],n=e.rule;return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?R+=t:(n.excludeBegin&&(R+=t),u(),n.returnBegin||n.excludeBegin||(R=t)),p(n),n.returnBegin?0:t.length}function g(e){var t=e[0],n=o.substr(e.index),r=function e(t,n){if(function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(t.endRe,n)){for(;t.endsParent&&t.parent;)t=t.parent;return t}if(t.endsWithParent)return e(t.parent,n)}(C,n);if(r){var i=C;i.skip?R+=t:(i.returnEnd||i.excludeEnd||(R+=t),u(),i.excludeEnd&&(R=t));do{C.className&&(O+=""),C.skip||C.subLanguage||(A+=C.relevance),C=C.parent}while(C!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.endRe=r.endRe),p(r.starts)),i.returnEnd?0:t.length}}var f={};function E(e,t){var r=t&&t[0];if(R+=e,null==r)return u(),0;if("begin"==f.type&&"end"==t.type&&f.index==t.index&&""===r)return R+=o.slice(t.index,t.index+1),1;if(f=t,"begin"===t.type)return m(t);if("illegal"===t.type&&!n)throw new Error('Illegal lexeme "'+r+'" for mode "'+(C.className||"")+'"');if("end"===t.type){var i=g(t);if(null!=i)return i}return R+=r,r.length}var S=N(e);if(!S)throw console.error(c.replace("{}",e)),new Error('Unknown language: "'+e+'"');h(S);var T,C=i||S,y={},O="";for(T=C;T!==S;T=T.parent)T.className&&(O=l(T.className,"",!0)+O);var R="",A=0;try{for(var I,x,D=0;C.terminators.lastIndex=D,I=C.terminators.exec(o);)x=E(o.substring(D,I.index),I),D=I.index+x;for(E(o.substr(D)),T=C;T.parent;T=T.parent)T.className&&(O+="");return{relevance:A,value:O,illegal:!1,language:e,top:C}}catch(t){if(t.message&&-1!==t.message.indexOf("Illegal"))return{illegal:!0,relevance:0,value:_(o)};if(a)return{relevance:0,value:_(o),language:e,top:C,errorRaised:t};throw t}}function v(e,t){t=t||d.languages||n(r);var i={relevance:0,value:_(e)},a=i;return t.filter(N).filter(R).forEach((function(t){var n=b(t,e,!1);n.language=t,n.relevance>a.relevance&&(a=n),n.relevance>i.relevance&&(a=i,i=n)})),a.language&&(i.second_best=a),i}function T(e){return d.tabReplace||d.useBR?e.replace(l,(function(e,t){return d.useBR&&"\n"===e?"
    ":d.tabReplace?t.replace(/\t/g,d.tabReplace):""})):e}function C(e){var n,r,a,o,l,u=function(e){var t,n,r,i,a=e.className+" ";if(a+=e.parentNode?e.parentNode.className:"",n=s.exec(a)){var o=N(n[1]);return o||(console.warn(c.replace("{}",n[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?n[1]:"no-highlight"}for(t=0,r=(a=a.split(/\s+/)).length;t/g,"\n"):n=e,l=n.textContent,a=u?b(u,l,!0):v(l),(r=f(n)).length&&((o=document.createElement("div")).innerHTML=a.value,a.value=function(e,n,r){var i=0,a="",o=[];function s(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function c(e){a+=""}function d(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){var u=s();if(a+=_(r.substring(i,u[0].offset)),i=u[0].offset,u===e){o.reverse().forEach(c);do{d(u.splice(0,1)[0]),u=s()}while(u===e&&u.length&&u[0].offset===i);o.reverse().forEach(l)}else"start"===u[0].event?o.push(u[0].node):o.pop(),d(u.splice(0,1)[0])}return a+_(r.substr(i))}(r,f(o),l)),a.value=T(a.value),e.innerHTML=a.value,e.className=function(e,t,n){var r=t?i[t]:n,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}(e.className,u,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function y(){if(!y.called){y.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,C)}}var O={disableAutodetect:!0};function N(e){return e=(e||"").toLowerCase(),r[e]||r[i[e]]}function R(e){var t=N(e);return t&&!t.disableAutodetect}return e.highlight=b,e.highlightAuto=v,e.fixMarkup=T,e.highlightBlock=C,e.configure=function(e){d=g(d,e)},e.initHighlighting=y,e.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",y,!1),window.addEventListener("load",y,!1)},e.registerLanguage=function(t,n){var o;try{o=n(e)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",t)),!a)throw e;console.error(e),o=O}r[t]=o,o.rawDefinition=n.bind(null,e),o.aliases&&o.aliases.forEach((function(e){i[e]=t}))},e.listLanguages=function(){return n(r)},e.getLanguage=N,e.requireLanguage=function(e){var t=N(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},e.autoDetection=R,e.inherit=g,e.debugMode=function(){a=!1},e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var i=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return i.contains.push(e.PHRASAL_WORDS_MODE),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),i},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},[e.BACKSLASH_ESCAPE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.PHRASAL_WORDS_MODE,e.COMMENT,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,e.CSS_NUMBER_MODE,e.REGEXP_MODE,e.TITLE_MODE,e.UNDERSCORE_TITLE_MODE,e.METHOD_GUARD].forEach((function(e){!function e(t){Object.freeze(t);var n="function"==typeof t;return Object.getOwnPropertyNames(t).forEach((function(r){!t.hasOwnProperty(r)||null===t[r]||"object"!=typeof t[r]&&"function"!=typeof t[r]||n&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(t[r])||e(t[r])})),t}(e)})),e},a="object"==typeof window&&window||"object"==typeof self&&self,t.nodeType?a&&(a.hljs=i({}),void 0===(r=function(){return a.hljs}.apply(t,[]))||(e.exports=r)):i(t)},function(e,t){e.exports=function(e){var t="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",n="далее возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",r="null истина ложь неопределено",i=e.inherit(e.NUMBER_MODE),a={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},o={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},s=e.inherit(e.C_LINE_COMMENT_MODE);return{case_insensitive:!0,lexemes:t,keywords:{keyword:n,built_in:"разделительстраниц разделительстрок символтабуляции ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",class:"webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц отображениевремениэлементовпланировщика типфайлаформатированногодокумента обходрезультатазапроса типзаписизапроса видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов доступкфайлу режимдиалогавыборафайла режимоткрытияфайла типизмеренияпостроителязапроса видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",type:"comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ",literal:r},contains:[{className:"meta",lexemes:t,begin:"#|&",end:"$",keywords:{"meta-keyword":n+"загрузитьизфайла вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент "},contains:[s]},{className:"function",lexemes:t,variants:[{begin:"процедура|функция",end:"\\)",keywords:"процедура функция"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",lexemes:t,begin:t,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{keyword:"знач",literal:r},contains:[i,a,o]},s]},e.inherit(e.TITLE_MODE,{begin:t})]},s,{className:"symbol",begin:"~",end:";|:",excludeEnd:!0},i,a,o]}}},function(e,t){e.exports=function(e){var t="^[a-zA-Z][a-zA-Z0-9-]*",n="[!@#$^&',?+~`|:]",r=e.COMMENT(";","$"),i={className:"attribute",begin:t+"(?=\\s*=)"};return{illegal:n,keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"].join(" "),contains:[i,r,{className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},{className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},{className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},{className:"symbol",begin:/%[si]/},e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=["GET","POST","HEAD","PUT","DELETE","CONNECT","OPTIONS","PATCH","TRACE"];return{contains:[{className:"number",begin:"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b",relevance:5},{className:"number",begin:"\\b\\d+\\b",relevance:0},{className:"string",begin:'"('+t.join("|")+")",end:'"',keywords:t.join(" "),illegal:"\\n",relevance:5,contains:[{begin:"HTTP/[12]\\.\\d",relevance:5}]},{className:"string",begin:/\[\d[^\]\n]{8,}\]/,illegal:"\\n",relevance:1},{className:"string",begin:/\[/,end:/\]/,illegal:"\\n",relevance:0},{className:"string",begin:'"Mozilla/\\d\\.\\d \\(',end:'"',illegal:"\\n",relevance:3},{className:"string",begin:'"',end:'"',illegal:"\\n",relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"rest_arg",begin:"[.]{3}",end:"[a-zA-Z_$][a-zA-Z0-9_$]*",relevance:10};return{aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"class",beginKeywords:"package",end:"{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.TITLE_MODE]},{className:"meta",beginKeywords:"import include",end:";",keywords:{"meta-keyword":"import include"}},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t]},{begin:":\\s*([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)"}]},e.METHOD_GUARD],illegal:/#/}}},function(e,t){e.exports=function(e){var t="[A-Za-z](_?[A-Za-z0-9.])*",n=e.COMMENT("--","$"),r={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:"[]{}%#'\"",contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:t,endsParent:!0,relevance:0}]};return{case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[n,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"symbol",begin:"'"+t},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[n,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},r,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:"[]{}%#'\""}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:"[]{}%#'\""},r]}}},function(e,t){e.exports=function(e){var t={className:"built_in",begin:"\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)"},n={className:"symbol",begin:"[a-zA-Z0-9_]+@"},r={className:"keyword",begin:"<",end:">",contains:[t,n]};return t.contains=[r],n.contains=[r],{aliases:["asc"],keywords:"for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property",illegal:"(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunctions*[^\\(])",contains:[{className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"""',end:'"""'},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{beginKeywords:"interface namespace",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]},{beginKeywords:"class",end:"{",illegal:"[;.\\-]",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+",contains:[{begin:"[:,]\\s*",contains:[{className:"symbol",begin:"[a-zA-Z0-9_]+"}]}]}]},t,n,{className:"literal",begin:"\\b(null|true|false)"},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)"}]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[\\$%]\\d+"};return{aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:""},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",t]},t,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},function(e,t){e.exports=function(e){var t=e.inherit(e.QUOTE_STRING_MODE,{illegal:""}),n={className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_NUMBER_MODE,t]},r=e.COMMENT("--","$"),i=[r,e.COMMENT("\\(\\*","\\*\\)",{contains:["self",r]}),e.HASH_COMMENT_MODE];return{aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[t,e.C_NUMBER_MODE,{className:"built_in",begin:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{className:"literal",begin:"\\b(text item delimiters|current application|missing value)\\b"},{className:"keyword",begin:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{beginKeywords:"on",illegal:"[${=;\\n]",contains:[e.UNDERSCORE_TITLE_MODE,n]}].concat(i),illegal:"//|->|=>|\\[\\["}}},function(e,t){e.exports=function(e){var t="[A-Za-z_][0-9A-Za-z_]*",n={keyword:"if for while var new function do return void else break",literal:"BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined",built_in:"Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year "},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},a={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,r,e.REGEXP_MODE];var o=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["arcade"],keywords:n,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"symbol",begin:"\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+"},r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(return)\\b)\\s*",keywords:"return",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},i={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},{begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},o={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(i,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},s={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},l=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",c={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i],u={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:c,contains:d.concat([{begin:/\(/,end:/\)/,keywords:c,contains:d.concat(["self"]),relevance:0}]),relevance:0},_={className:"function",begin:"("+n+"[\\*&\\s]+)+"+l,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:c,relevance:0},{begin:l,returnBegin:!0,contains:[s],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a,r,{begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:c,illegal:"",keywords:c,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:c},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:o,strings:i,keywords:c}}}},function(e,t){e.exports=function(e){var t="boolean byte word String",n="setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",r="DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW",i=e.requireLanguage("cpp").rawDefinition(),a=i.keywords;return a.keyword+=" "+t,a.literal+=" "+r,a.built_in+=" "+n,i}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["arm"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",end:"\\s"},e.COMMENT("[;@]","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"[=#]\\w+"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"symbol",begin:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},n={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},r=e.inherit(n,{begin:"\\(",end:"\\)"}),i=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),a=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[n,a,i,r,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[n,r,a,i]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[o],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[o],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},o]}]}}},function(e,t){e.exports=function(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}},function(e,t){e.exports=function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance";return{keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:t+" get set args call",excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:t,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",keywords:t+" get set args call",relevance:0},e.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:t,excludeEnd:!0,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:t,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t={begin:"`[\\s\\S]"};return{case_insensitive:!0,aliases:["ahk"],keywords:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},contains:[t,e.inherit(e.QUOTE_STRING_MODE,{contains:[t]}),e.COMMENT(";","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,{className:"number",begin:e.NUMBER_RE,relevance:0},{className:"variable",begin:"%[a-zA-Z0-9#_$@]+%"},{className:"built_in",begin:"^\\s*\\w+\\s*(,|%)"},{className:"title",variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{className:"meta",begin:"^\\s*#\\w+",end:"$",relevance:0},{className:"built_in",begin:"A_[a-zA-Z0-9]+"},{begin:",\\s*,"}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#cs","#ce"),e.COMMENT("#comments-start","#comments-end")]},n={begin:"\\$[A-z0-9_]+"},r={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",built_in:"Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",literal:"True False And Null Not Or"},contains:[t,n,r,i,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",keywords:{"meta-keyword":"include"},end:"$",contains:[r,{className:"meta-string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},r,t]},{className:"symbol",begin:"@[A-z0-9_]+"},{className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[n,r,i]}]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"\\.?"+e.IDENT_RE,keywords:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{className:"subst",begin:"@[0-9]+"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{keywords:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,illegal:"^.",lexemes:"[a-zA-Z][a-zA-Z0-9_$%!#]*",keywords:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("REM","$",{relevance:10}),e.COMMENT("'","$",{relevance:0}),{className:"symbol",begin:"^[0-9]+ ",relevance:10},{className:"number",begin:"\\b([0-9]+[0-9edED.]*[#!]?)",relevance:0},{className:"number",begin:"(&[hH][0-9a-fA-F]{1,4})"},{className:"number",begin:"(&[oO][0-7]{1,6})"}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin://},{begin:/::=/,starts:{end:/$/,contains:[{begin://},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}]}}},function(e,t){e.exports=function(e){var t={className:"literal",begin:"[\\+\\-]",relevance:0};return{aliases:["bf"],contains:[e.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/(?:\+\+|\-\-)/,contains:[t]},t]}}},function(e,t){e.exports=function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},i={className:"string",begin:/(#\d+)+/},a={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[r,i]}].concat(n)},o={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[e.TITLE_MODE,a]};return{case_insensitive:!0,keywords:{keyword:t,literal:"false true"},illegal:/\/\*/,contains:[r,i,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,a]}}},function(e,t){e.exports=function(e){return{aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.HASH_COMMENT_MODE,{className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}},function(e,t){e.exports=function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",n={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:t,relevance:10},r=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[n]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return n.contains=r,{keywords:{keyword:t+" shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(r)}}},function(e,t){e.exports=function(e){return{aliases:["clean","icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",built_in:"Int Real Char Bool",literal:"True False"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{begin:"->|<-[|:]?|#!?|>>=|\\{\\||\\|\\}|:==|=:|<>"}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b(true|false|nil)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},_={endsWithParent:!0,relevance:0},p={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:t,className:"name",begin:t,starts:_},m=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),p,_],_.contains=m,s.contains=m,c.contains=[s],{aliases:["clj"],illegal:/\S/,contains:[u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)?=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}},function(e,t){e.exports=function(e){return{aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined"},contains:[{className:"variable",begin:"\\${",end:"}"},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[r,e.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+n},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("###","###"),e.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"_|0 as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies DependentDerive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("\\(\\*","\\*\\)"),e.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["cos","cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}},function(e,t){e.exports=function(e){var t="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml";return{aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:"params meta operations op rule attributes utilization read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\ number string",literal:"Master Started Slave Stopped start promote demote stop monitor true false"},contains:[e.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:"primitive rsc_template",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+t.split(" ").join("|")+")\\s+",keywords:t,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:"property rsc_defaults op_defaults",starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},e.QUOTE_STRING_MODE,{className:"meta",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"literal",begin:"[-]?(infinity|inf)",relevance:0},{className:"attr",begin:/([A-Za-z\$_\#][\w_-]+)=/,relevance:0},{className:"tag",begin:"",relevance:0}]}}},function(e,t){e.exports=function(e){var t="(_*[ui](8|16|32|64|128))?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~|]|//|//=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",r={keyword:"abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},i={className:"subst",begin:"#{",end:"}",keywords:r},a={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:r};function o(e,t){var n=[{begin:e,end:t}];return n[0].contains=n,n}var s={className:"string",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[Qwi]?\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%[Qwi]?\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%[Qwi]?{",end:"}",contains:o("{","}")},{begin:"%[Qwi]?<",end:">",contains:o("<",">")},{begin:"%[Qwi]?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},l={className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%q{",end:"}",contains:o("{","}")},{begin:"%q<",end:">",contains:o("<",">")},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},c={begin:"(?!%})("+e.RE_STARTERS_RE+"|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",keywords:"case if select unless until when while",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/(?!\\/)",end:"/[a-z]*"}]}],relevance:0},d=[a,s,l,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"%r\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%r{",end:"}",contains:o("{","}")},{begin:"%r<",end:">",contains:o("<",">")},{begin:"%r\\|",end:"\\|"}],relevance:0},c,{className:"meta",begin:"@\\[",end:"\\]",contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"})]},e.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{beginKeywords:"annotation",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})],relevance:5},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[s,{begin:n}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]+)"+t},{begin:"\\b0o([0-7_]+)"+t},{begin:"\\b0x([A-Fa-f0-9_]+)"+t},{begin:"\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_*[-+]?[0-9_]*)?(_*f(32|64))?(?!_)"},{begin:"\\b([1-9][0-9_]*|0)"+t}],relevance:0}];return i.contains=d,a.contains=d.slice(1),{aliases:["cr"],lexemes:"[a-zA-Z_]\\w*[!?=]?",keywords:r,contains:d}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},n={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},r={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},i=e.inherit(r,{illegal:/\n/}),a={className:"subst",begin:"{",end:"}",keywords:t},o=e.inherit(a,{illegal:/\n/}),s={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,o]},l={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},a]},c=e.inherit(l,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},o]});a.contains=[l,s,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.C_BLOCK_COMMENT_MODE],o.contains=[c,s,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,n,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[l,s,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,n,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+u+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[d,n,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!1,lexemes:"[a-zA-Z][a-zA-Z0-9_-]*",keywords:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,t]}]}}},function(e,t){e.exports=function(e){var t="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",r={className:"number",begin:"\\b"+t+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},i={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+t+"(i|[fF]i|Li))",relevance:0},a={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},o={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},o,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},i,r,a,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}},function(e,t){e.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^\\s*([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```\\w*\\s*$",end:"^```[ ]*$"},{begin:"`.+?`"},{begin:"^( {4}|\\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"}]},n={className:"subst",variants:[{begin:"\\${",end:"}"}],keywords:"true false null this is new super"},r={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"""',end:'"""',contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t,n]}]};n.contains=[e.C_NUMBER_MODE,r];return{keywords:{keyword:"abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is library mixin new null on operator part rethrow return set show static super switch sync this throw true try typedef var void while with yield",built_in:"Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print Element ElementList document querySelector querySelectorAll window"},contains:[r,e.COMMENT("/\\*\\*","\\*/",{subLanguage:"markdown"}),e.COMMENT("///+\\s*","$",{contains:[{subLanguage:"markdown",begin:".",end:"$"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}},function(e,t){e.exports=function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},i={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},a={className:"string",begin:/(#\d+)+/},o={begin:e.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]},s={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[i,a,r].concat(n)},r].concat(n)};return{aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:t,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[i,a,e.NUMBER_MODE,o,s,r].concat(n)}}},function(e,t){e.exports=function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}},function(e,t){e.exports=function(e){var t={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE]};return{aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[t],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:[t]}]}}},function(e,t){e.exports=function(e){return{aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}},function(e,t){e.exports=function(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]$/,subLanguage:"bash"}}],illegal:"",illegal:"\\n"}]},t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},i={className:"variable",begin:"\\&[a-z\\d_]*\\b"},a={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},o={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={className:"params",begin:"<",end:">",contains:[n,i]},l={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{keywords:"",contains:[{className:"class",begin:"/\\s*{",end:"};",relevance:10,contains:[i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t]},i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t,r,{begin:e.IDENT_RE+"::",keywords:""}]}}},function(e,t){e.exports=function(e){return{aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT(/\(\*/,/\*\)/);return{illegal:/\S/,contains:[t,{className:"attribute",begin:/^[ ]*[a-zA-Z][a-zA-Z-_]*([\s-_]+[a-zA-Z][a-zA-Z]*)*/},{begin:/=/,end:/[.;]/,contains:[t,{className:"meta",begin:/\?.*\?/},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"`",end:"`"}]}]}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9_.]*(\\!|\\?)?",n="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0",r={className:"subst",begin:"#\\{",end:"}",lexemes:t,keywords:n},i={className:"string",begin:"~[a-z](?=[/|([{<\"'])",contains:[{endsParent:!0,contains:[{contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin://}]}]}]},a={className:"string",begin:"~[A-Z](?=[/|([{<\"'])",contains:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/\//,end:/\//},{begin:/\|/,end:/\|/},{begin:/\(/,end:/\)/},{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/},{begin:/\/}]},o={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/'''/,end:/'''/},{begin:/~S"""/,end:/"""/,contains:[]},{begin:/~S"/,end:/"/,contains:[]},{begin:/~S'''/,end:/'''/,contains:[]},{begin:/~S'/,end:/'/,contains:[]},{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},s={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:t,endsParent:!0})]},l=e.inherit(s,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),c=[o,a,i,e.HASH_COMMENT_MODE,l,s,{begin:"::"},{className:"symbol",begin:":(?![\\s:])",contains:[o,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:t+":(?!:)",relevance:0},{className:"number",begin:"(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return r.contains=c,{lexemes:t,keywords:n,contains:c}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},r={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]};return{keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[n,r,{begin:"{",end:"}",contains:r.contains},t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"port",end:"$",keywords:"port",contains:[t]},{className:"string",begin:"'\\\\?.",end:"'",illegal:"."},e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,n,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}],illegal:/;/}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},a=[e.COMMENT("#","$",{contains:[r]}),e.COMMENT("^\\=begin","^\\=end",{contains:[r],relevance:10}),e.COMMENT("^__END__","\\n$")],o={className:"subst",begin:"#\\{",end:"}",keywords:n},s={className:"string",contains:[e.BACKSLASH_ESCAPE,o],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},{begin:/\w+/,endSameAsBegin:!0,contains:[e.BACKSLASH_ESCAPE,o]}]}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:n},c=[s,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(a)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:t}),l].concat(a)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[s,{begin:t}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:n},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,o],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(a),relevance:0}].concat(a);o.contains=c,l.contains=c;var d=[{begin:/^\s*=>/,starts:{end:"$",contains:c}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:c}}];return{aliases:["rb","gemspec","podspec","thor","irb"],keywords:n,illegal:/\/\*/,contains:a.concat(d).concat(c)}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[e.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){return{keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}},function(e,t){e.exports=function(e){var t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",r={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.COMMENT("%","$"),a={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},s={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:"{",end:"}",relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},d={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},u={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},_={beginKeywords:"fun receive if try case",end:"end",keywords:r};_.contains=[i,o,e.inherit(e.APOS_STRING_MODE,{className:""}),_,s,e.QUOTE_STRING_MODE,a,l,c,d,u];var p=[i,o,_,s,e.QUOTE_STRING_MODE,a,l,c,d,u];s.contains[1].contains=p,l.contains=p,u.contains[1].contains=p;var m={className:"params",begin:"\\(",end:"\\)",contains:p};return{aliases:["erl"],keywords:r,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[m,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:r,contains:p}},i,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[m]},a,e.QUOTE_STRING_MODE,u,c,d,l,{begin:/\.$/}]}}},function(e,t){e.exports=function(e){return{aliases:["xlsx","xls"],case_insensitive:!0,lexemes:/[a-zA-Z][\w\.]*/,keywords:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},e.BACKSLASH_ESCAPE,e.QUOTE_STRING_MODE,{className:"number",begin:e.NUMBER_RE+"(%)?",relevance:0},e.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}},function(e,t){e.exports=function(e){return{contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}},function(e,t){e.exports=function(e){var t={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[{className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/}]};return{keywords:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},{className:"string",variants:[{begin:'"',end:'"'}]},t,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["f90","f95"],keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:"<",end:">",contains:[e.inherit(e.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},e.COMMENT("\\(\\*","\\*\\)"),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE,t]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[e.BACKSLASH_ESCAPE]},e.C_LINE_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na","built-in":"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},n={className:"symbol",variants:[{begin:/\=[lgenxc]=/},{begin:/\$/}]},r={className:"comment",variants:[{begin:"'",end:"'"},{begin:'"',end:'"'}],illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},i={begin:"/",end:"/",keywords:t,contains:[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},a={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[r,i,{className:"comment",begin:/([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,relevance:0}]};return{aliases:["gms"],case_insensitive:!0,keywords:t,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,a]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[a]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},n]},e.C_NUMBER_MODE,n]}}},function(e,t){e.exports=function(e){var t={keyword:"bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new open output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint ne ge le gt lt and xor or not eq eqv",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin sylvester strtrim",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS __STDIN __STDOUT __STDERR __FILE_DIR"},n=e.COMMENT("@","@"),r={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n]},i={begin:/\bstruct\s+/,end:/\s/,keywords:"struct",contains:[{className:"type",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},a=[{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\.\.\./},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,i]}],o={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},s=function(t,r,i){var s=e.inherit({className:"function",beginKeywords:t,end:r,excludeEnd:!0,contains:[].concat(a)},i||{});return s.contains.push(o),s.contains.push(e.C_NUMBER_MODE),s.contains.push(e.C_BLOCK_COMMENT_MODE),s.contains.push(n),s},l={className:"built_in",begin:"\\b("+t.built_in.split(" ").join("|")+")\\b"},c={className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},d={begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,keywords:t,relevance:0,contains:[{beginKeywords:t.keyword},l,{className:"built_in",begin:e.UNDERSCORE_IDENT_RE,relevance:0}]},u={begin:/\(/,end:/\)/,relevance:0,keywords:{built_in:t.built_in,literal:t.literal},contains:[e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n,l,d,c,"self"]};return d.contains.push(u),{aliases:["gss"],case_insensitive:!0,keywords:t,illegal:/(\{[%#]|[%#]\}| <- )/,contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,c,r,{className:"keyword",begin:/\bexternal (matrix|string|array|sparse matrix|struct|proc|keyword|fn)/},s("proc keyword",";"),s("fn","="),{beginKeywords:"for threadfor",end:/;/,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE,n,u]},{variants:[{begin:e.UNDERSCORE_IDENT_RE+"\\."+e.UNDERSCORE_IDENT_RE},{begin:e.UNDERSCORE_IDENT_RE+"\\s*="}],relevance:0},d,i]}}},function(e,t){e.exports=function(e){var t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\(/,/\)/),e.inherit(e.C_NUMBER_MODE,{begin:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+e.C_NUMBER_RE}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",end:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{aliases:["nc"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",contains:[{className:"meta",begin:"\\%"},{className:"meta",begin:"([O])([0-9]+)"}].concat(t)}}},function(e,t){e.exports=function(e){return{aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},e.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},e.QUOTE_STRING_MODE]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBufferiimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}},function(e,t){e.exports=function(e){return{aliases:["gml","GML"],case_insensitive:!1,keywords:{keyword:"begin end if then else while do for break continue with until repeat exit and or xor not return mod div switch case default var globalvar enum #macro #region #endregion",built_in:"is_real is_string is_array is_undefined is_int32 is_int64 is_ptr is_vec3 is_vec4 is_matrix is_bool typeof variable_global_exists variable_global_get variable_global_set variable_instance_exists variable_instance_get variable_instance_set variable_instance_get_names array_length_1d array_length_2d array_height_2d array_equals array_create array_copy random random_range irandom irandom_range random_set_seed random_get_seed randomize randomise choose abs round floor ceil sign frac sqrt sqr exp ln log2 log10 sin cos tan arcsin arccos arctan arctan2 dsin dcos dtan darcsin darccos darctan darctan2 degtorad radtodeg power logn min max mean median clamp lerp dot_product dot_product_3d dot_product_normalised dot_product_3d_normalised dot_product_normalized dot_product_3d_normalized math_set_epsilon math_get_epsilon angle_difference point_distance_3d point_distance point_direction lengthdir_x lengthdir_y real string int64 ptr string_format chr ansi_char ord string_length string_byte_length string_pos string_copy string_char_at string_ord_at string_byte_at string_set_byte_at string_delete string_insert string_lower string_upper string_repeat string_letters string_digits string_lettersdigits string_replace string_replace_all string_count string_hash_to_newline clipboard_has_text clipboard_set_text clipboard_get_text date_current_datetime date_create_datetime date_valid_datetime date_inc_year date_inc_month date_inc_week date_inc_day date_inc_hour date_inc_minute date_inc_second date_get_year date_get_month date_get_week date_get_day date_get_hour date_get_minute date_get_second date_get_weekday date_get_day_of_year date_get_hour_of_year date_get_minute_of_year date_get_second_of_year date_year_span date_month_span date_week_span date_day_span date_hour_span date_minute_span date_second_span date_compare_datetime date_compare_date date_compare_time date_date_of date_time_of date_datetime_string date_date_string date_time_string date_days_in_month date_days_in_year date_leap_year date_is_today date_set_timezone date_get_timezone game_set_speed game_get_speed motion_set motion_add place_free place_empty place_meeting place_snapped move_random move_snap move_towards_point move_contact_solid move_contact_all move_outside_solid move_outside_all move_bounce_solid move_bounce_all move_wrap distance_to_point distance_to_object position_empty position_meeting path_start path_end mp_linear_step mp_potential_step mp_linear_step_object mp_potential_step_object mp_potential_settings mp_linear_path mp_potential_path mp_linear_path_object mp_potential_path_object mp_grid_create mp_grid_destroy mp_grid_clear_all mp_grid_clear_cell mp_grid_clear_rectangle mp_grid_add_cell mp_grid_get_cell mp_grid_add_rectangle mp_grid_add_instances mp_grid_path mp_grid_draw mp_grid_to_ds_grid collision_point collision_rectangle collision_circle collision_ellipse collision_line collision_point_list collision_rectangle_list collision_circle_list collision_ellipse_list collision_line_list instance_position_list instance_place_list point_in_rectangle point_in_triangle point_in_circle rectangle_in_rectangle rectangle_in_triangle rectangle_in_circle instance_find instance_exists instance_number instance_position instance_nearest instance_furthest instance_place instance_create_depth instance_create_layer instance_copy instance_change instance_destroy position_destroy position_change instance_id_get instance_deactivate_all instance_deactivate_object instance_deactivate_region instance_activate_all instance_activate_object instance_activate_region room_goto room_goto_previous room_goto_next room_previous room_next room_restart game_end game_restart game_load game_save game_save_buffer game_load_buffer event_perform event_user event_perform_object event_inherited show_debug_message show_debug_overlay debug_event debug_get_callstack alarm_get alarm_set font_texture_page_size keyboard_set_map keyboard_get_map keyboard_unset_map keyboard_check keyboard_check_pressed keyboard_check_released keyboard_check_direct keyboard_get_numlock keyboard_set_numlock keyboard_key_press keyboard_key_release keyboard_clear io_clear mouse_check_button mouse_check_button_pressed mouse_check_button_released mouse_wheel_up mouse_wheel_down mouse_clear draw_self draw_sprite draw_sprite_pos draw_sprite_ext draw_sprite_stretched draw_sprite_stretched_ext draw_sprite_tiled draw_sprite_tiled_ext draw_sprite_part draw_sprite_part_ext draw_sprite_general draw_clear draw_clear_alpha draw_point draw_line draw_line_width draw_rectangle draw_roundrect draw_roundrect_ext draw_triangle draw_circle draw_ellipse draw_set_circle_precision draw_arrow draw_button draw_path draw_healthbar draw_getpixel draw_getpixel_ext draw_set_colour draw_set_color draw_set_alpha draw_get_colour draw_get_color draw_get_alpha merge_colour make_colour_rgb make_colour_hsv colour_get_red colour_get_green colour_get_blue colour_get_hue colour_get_saturation colour_get_value merge_color make_color_rgb make_color_hsv color_get_red color_get_green color_get_blue color_get_hue color_get_saturation color_get_value merge_color screen_save screen_save_part draw_set_font draw_set_halign draw_set_valign draw_text draw_text_ext string_width string_height string_width_ext string_height_ext draw_text_transformed draw_text_ext_transformed draw_text_colour draw_text_ext_colour draw_text_transformed_colour draw_text_ext_transformed_colour draw_text_color draw_text_ext_color draw_text_transformed_color draw_text_ext_transformed_color draw_point_colour draw_line_colour draw_line_width_colour draw_rectangle_colour draw_roundrect_colour draw_roundrect_colour_ext draw_triangle_colour draw_circle_colour draw_ellipse_colour draw_point_color draw_line_color draw_line_width_color draw_rectangle_color draw_roundrect_color draw_roundrect_color_ext draw_triangle_color draw_circle_color draw_ellipse_color draw_primitive_begin draw_vertex draw_vertex_colour draw_vertex_color draw_primitive_end sprite_get_uvs font_get_uvs sprite_get_texture font_get_texture texture_get_width texture_get_height texture_get_uvs draw_primitive_begin_texture draw_vertex_texture draw_vertex_texture_colour draw_vertex_texture_color texture_global_scale surface_create surface_create_ext surface_resize surface_free surface_exists surface_get_width surface_get_height surface_get_texture surface_set_target surface_set_target_ext surface_reset_target surface_depth_disable surface_get_depth_disable draw_surface draw_surface_stretched draw_surface_tiled draw_surface_part draw_surface_ext draw_surface_stretched_ext draw_surface_tiled_ext draw_surface_part_ext draw_surface_general surface_getpixel surface_getpixel_ext surface_save surface_save_part surface_copy surface_copy_part application_surface_draw_enable application_get_position application_surface_enable application_surface_is_enabled display_get_width display_get_height display_get_orientation display_get_gui_width display_get_gui_height display_reset display_mouse_get_x display_mouse_get_y display_mouse_set display_set_ui_visibility window_set_fullscreen window_get_fullscreen window_set_caption window_set_min_width window_set_max_width window_set_min_height window_set_max_height window_get_visible_rects window_get_caption window_set_cursor window_get_cursor window_set_colour window_get_colour window_set_color window_get_color window_set_position window_set_size window_set_rectangle window_center window_get_x window_get_y window_get_width window_get_height window_mouse_get_x window_mouse_get_y window_mouse_set window_view_mouse_get_x window_view_mouse_get_y window_views_mouse_get_x window_views_mouse_get_y audio_listener_position audio_listener_velocity audio_listener_orientation audio_emitter_position audio_emitter_create audio_emitter_free audio_emitter_exists audio_emitter_pitch audio_emitter_velocity audio_emitter_falloff audio_emitter_gain audio_play_sound audio_play_sound_on audio_play_sound_at audio_stop_sound audio_resume_music audio_music_is_playing audio_resume_sound audio_pause_sound audio_pause_music audio_channel_num audio_sound_length audio_get_type audio_falloff_set_model audio_play_music audio_stop_music audio_master_gain audio_music_gain audio_sound_gain audio_sound_pitch audio_stop_all audio_resume_all audio_pause_all audio_is_playing audio_is_paused audio_exists audio_sound_set_track_position audio_sound_get_track_position audio_emitter_get_gain audio_emitter_get_pitch audio_emitter_get_x audio_emitter_get_y audio_emitter_get_z audio_emitter_get_vx audio_emitter_get_vy audio_emitter_get_vz audio_listener_set_position audio_listener_set_velocity audio_listener_set_orientation audio_listener_get_data audio_set_master_gain audio_get_master_gain audio_sound_get_gain audio_sound_get_pitch audio_get_name audio_sound_set_track_position audio_sound_get_track_position audio_create_stream audio_destroy_stream audio_create_sync_group audio_destroy_sync_group audio_play_in_sync_group audio_start_sync_group audio_stop_sync_group audio_pause_sync_group audio_resume_sync_group audio_sync_group_get_track_pos audio_sync_group_debug audio_sync_group_is_playing audio_debug audio_group_load audio_group_unload audio_group_is_loaded audio_group_load_progress audio_group_name audio_group_stop_all audio_group_set_gain audio_create_buffer_sound audio_free_buffer_sound audio_create_play_queue audio_free_play_queue audio_queue_sound audio_get_recorder_count audio_get_recorder_info audio_start_recording audio_stop_recording audio_sound_get_listener_mask audio_emitter_get_listener_mask audio_get_listener_mask audio_sound_set_listener_mask audio_emitter_set_listener_mask audio_set_listener_mask audio_get_listener_count audio_get_listener_info audio_system show_message show_message_async clickable_add clickable_add_ext clickable_change clickable_change_ext clickable_delete clickable_exists clickable_set_style show_question show_question_async get_integer get_string get_integer_async get_string_async get_login_async get_open_filename get_save_filename get_open_filename_ext get_save_filename_ext show_error highscore_clear highscore_add highscore_value highscore_name draw_highscore sprite_exists sprite_get_name sprite_get_number sprite_get_width sprite_get_height sprite_get_xoffset sprite_get_yoffset sprite_get_bbox_left sprite_get_bbox_right sprite_get_bbox_top sprite_get_bbox_bottom sprite_save sprite_save_strip sprite_set_cache_size sprite_set_cache_size_ext sprite_get_tpe sprite_prefetch sprite_prefetch_multi sprite_flush sprite_flush_multi sprite_set_speed sprite_get_speed_type sprite_get_speed font_exists font_get_name font_get_fontname font_get_bold font_get_italic font_get_first font_get_last font_get_size font_set_cache_size path_exists path_get_name path_get_length path_get_time path_get_kind path_get_closed path_get_precision path_get_number path_get_point_x path_get_point_y path_get_point_speed path_get_x path_get_y path_get_speed script_exists script_get_name timeline_add timeline_delete timeline_clear timeline_exists timeline_get_name timeline_moment_clear timeline_moment_add_script timeline_size timeline_max_moment object_exists object_get_name object_get_sprite object_get_solid object_get_visible object_get_persistent object_get_mask object_get_parent object_get_physics object_is_ancestor room_exists room_get_name sprite_set_offset sprite_duplicate sprite_assign sprite_merge sprite_add sprite_replace sprite_create_from_surface sprite_add_from_surface sprite_delete sprite_set_alpha_from_sprite sprite_collision_mask font_add_enable_aa font_add_get_enable_aa font_add font_add_sprite font_add_sprite_ext font_replace font_replace_sprite font_replace_sprite_ext font_delete path_set_kind path_set_closed path_set_precision path_add path_assign path_duplicate path_append path_delete path_add_point path_insert_point path_change_point path_delete_point path_clear_points path_reverse path_mirror path_flip path_rotate path_rescale path_shift script_execute object_set_sprite object_set_solid object_set_visible object_set_persistent object_set_mask room_set_width room_set_height room_set_persistent room_set_background_colour room_set_background_color room_set_view room_set_viewport room_get_viewport room_set_view_enabled room_add room_duplicate room_assign room_instance_add room_instance_clear room_get_camera room_set_camera asset_get_index asset_get_type file_text_open_from_string file_text_open_read file_text_open_write file_text_open_append file_text_close file_text_write_string file_text_write_real file_text_writeln file_text_read_string file_text_read_real file_text_readln file_text_eof file_text_eoln file_exists file_delete file_rename file_copy directory_exists directory_create directory_destroy file_find_first file_find_next file_find_close file_attributes filename_name filename_path filename_dir filename_drive filename_ext filename_change_ext file_bin_open file_bin_rewrite file_bin_close file_bin_position file_bin_size file_bin_seek file_bin_write_byte file_bin_read_byte parameter_count parameter_string environment_get_variable ini_open_from_string ini_open ini_close ini_read_string ini_read_real ini_write_string ini_write_real ini_key_exists ini_section_exists ini_key_delete ini_section_delete ds_set_precision ds_exists ds_stack_create ds_stack_destroy ds_stack_clear ds_stack_copy ds_stack_size ds_stack_empty ds_stack_push ds_stack_pop ds_stack_top ds_stack_write ds_stack_read ds_queue_create ds_queue_destroy ds_queue_clear ds_queue_copy ds_queue_size ds_queue_empty ds_queue_enqueue ds_queue_dequeue ds_queue_head ds_queue_tail ds_queue_write ds_queue_read ds_list_create ds_list_destroy ds_list_clear ds_list_copy ds_list_size ds_list_empty ds_list_add ds_list_insert ds_list_replace ds_list_delete ds_list_find_index ds_list_find_value ds_list_mark_as_list ds_list_mark_as_map ds_list_sort ds_list_shuffle ds_list_write ds_list_read ds_list_set ds_map_create ds_map_destroy ds_map_clear ds_map_copy ds_map_size ds_map_empty ds_map_add ds_map_add_list ds_map_add_map ds_map_replace ds_map_replace_map ds_map_replace_list ds_map_delete ds_map_exists ds_map_find_value ds_map_find_previous ds_map_find_next ds_map_find_first ds_map_find_last ds_map_write ds_map_read ds_map_secure_save ds_map_secure_load ds_map_secure_load_buffer ds_map_secure_save_buffer ds_map_set ds_priority_create ds_priority_destroy ds_priority_clear ds_priority_copy ds_priority_size ds_priority_empty ds_priority_add ds_priority_change_priority ds_priority_find_priority ds_priority_delete_value ds_priority_delete_min ds_priority_find_min ds_priority_delete_max ds_priority_find_max ds_priority_write ds_priority_read ds_grid_create ds_grid_destroy ds_grid_copy ds_grid_resize ds_grid_width ds_grid_height ds_grid_clear ds_grid_set ds_grid_add ds_grid_multiply ds_grid_set_region ds_grid_add_region ds_grid_multiply_region ds_grid_set_disk ds_grid_add_disk ds_grid_multiply_disk ds_grid_set_grid_region ds_grid_add_grid_region ds_grid_multiply_grid_region ds_grid_get ds_grid_get_sum ds_grid_get_max ds_grid_get_min ds_grid_get_mean ds_grid_get_disk_sum ds_grid_get_disk_min ds_grid_get_disk_max ds_grid_get_disk_mean ds_grid_value_exists ds_grid_value_x ds_grid_value_y ds_grid_value_disk_exists ds_grid_value_disk_x ds_grid_value_disk_y ds_grid_shuffle ds_grid_write ds_grid_read ds_grid_sort ds_grid_set ds_grid_get effect_create_below effect_create_above effect_clear part_type_create part_type_destroy part_type_exists part_type_clear part_type_shape part_type_sprite part_type_size part_type_scale part_type_orientation part_type_life part_type_step part_type_death part_type_speed part_type_direction part_type_gravity part_type_colour1 part_type_colour2 part_type_colour3 part_type_colour_mix part_type_colour_rgb part_type_colour_hsv part_type_color1 part_type_color2 part_type_color3 part_type_color_mix part_type_color_rgb part_type_color_hsv part_type_alpha1 part_type_alpha2 part_type_alpha3 part_type_blend part_system_create part_system_create_layer part_system_destroy part_system_exists part_system_clear part_system_draw_order part_system_depth part_system_position part_system_automatic_update part_system_automatic_draw part_system_update part_system_drawit part_system_get_layer part_system_layer part_particles_create part_particles_create_colour part_particles_create_color part_particles_clear part_particles_count part_emitter_create part_emitter_destroy part_emitter_destroy_all part_emitter_exists part_emitter_clear part_emitter_region part_emitter_burst part_emitter_stream external_call external_define external_free window_handle window_device matrix_get matrix_set matrix_build_identity matrix_build matrix_build_lookat matrix_build_projection_ortho matrix_build_projection_perspective matrix_build_projection_perspective_fov matrix_multiply matrix_transform_vertex matrix_stack_push matrix_stack_pop matrix_stack_multiply matrix_stack_set matrix_stack_clear matrix_stack_top matrix_stack_is_empty browser_input_capture os_get_config os_get_info os_get_language os_get_region os_lock_orientation display_get_dpi_x display_get_dpi_y display_set_gui_size display_set_gui_maximise display_set_gui_maximize device_mouse_dbclick_enable display_set_timing_method display_get_timing_method display_set_sleep_margin display_get_sleep_margin virtual_key_add virtual_key_hide virtual_key_delete virtual_key_show draw_enable_drawevent draw_enable_swf_aa draw_set_swf_aa_level draw_get_swf_aa_level draw_texture_flush draw_flush gpu_set_blendenable gpu_set_ztestenable gpu_set_zfunc gpu_set_zwriteenable gpu_set_lightingenable gpu_set_fog gpu_set_cullmode gpu_set_blendmode gpu_set_blendmode_ext gpu_set_blendmode_ext_sepalpha gpu_set_colorwriteenable gpu_set_colourwriteenable gpu_set_alphatestenable gpu_set_alphatestref gpu_set_alphatestfunc gpu_set_texfilter gpu_set_texfilter_ext gpu_set_texrepeat gpu_set_texrepeat_ext gpu_set_tex_filter gpu_set_tex_filter_ext gpu_set_tex_repeat gpu_set_tex_repeat_ext gpu_set_tex_mip_filter gpu_set_tex_mip_filter_ext gpu_set_tex_mip_bias gpu_set_tex_mip_bias_ext gpu_set_tex_min_mip gpu_set_tex_min_mip_ext gpu_set_tex_max_mip gpu_set_tex_max_mip_ext gpu_set_tex_max_aniso gpu_set_tex_max_aniso_ext gpu_set_tex_mip_enable gpu_set_tex_mip_enable_ext gpu_get_blendenable gpu_get_ztestenable gpu_get_zfunc gpu_get_zwriteenable gpu_get_lightingenable gpu_get_fog gpu_get_cullmode gpu_get_blendmode gpu_get_blendmode_ext gpu_get_blendmode_ext_sepalpha gpu_get_blendmode_src gpu_get_blendmode_dest gpu_get_blendmode_srcalpha gpu_get_blendmode_destalpha gpu_get_colorwriteenable gpu_get_colourwriteenable gpu_get_alphatestenable gpu_get_alphatestref gpu_get_alphatestfunc gpu_get_texfilter gpu_get_texfilter_ext gpu_get_texrepeat gpu_get_texrepeat_ext gpu_get_tex_filter gpu_get_tex_filter_ext gpu_get_tex_repeat gpu_get_tex_repeat_ext gpu_get_tex_mip_filter gpu_get_tex_mip_filter_ext gpu_get_tex_mip_bias gpu_get_tex_mip_bias_ext gpu_get_tex_min_mip gpu_get_tex_min_mip_ext gpu_get_tex_max_mip gpu_get_tex_max_mip_ext gpu_get_tex_max_aniso gpu_get_tex_max_aniso_ext gpu_get_tex_mip_enable gpu_get_tex_mip_enable_ext gpu_push_state gpu_pop_state gpu_get_state gpu_set_state draw_light_define_ambient draw_light_define_direction draw_light_define_point draw_light_enable draw_set_lighting draw_light_get_ambient draw_light_get draw_get_lighting shop_leave_rating url_get_domain url_open url_open_ext url_open_full get_timer achievement_login achievement_logout achievement_post achievement_increment achievement_post_score achievement_available achievement_show_achievements achievement_show_leaderboards achievement_load_friends achievement_load_leaderboard achievement_send_challenge achievement_load_progress achievement_reset achievement_login_status achievement_get_pic achievement_show_challenge_notifications achievement_get_challenges achievement_event achievement_show achievement_get_info cloud_file_save cloud_string_save cloud_synchronise ads_enable ads_disable ads_setup ads_engagement_launch ads_engagement_available ads_engagement_active ads_event ads_event_preload ads_set_reward_callback ads_get_display_height ads_get_display_width ads_move ads_interstitial_available ads_interstitial_display device_get_tilt_x device_get_tilt_y device_get_tilt_z device_is_keypad_open device_mouse_check_button device_mouse_check_button_pressed device_mouse_check_button_released device_mouse_x device_mouse_y device_mouse_raw_x device_mouse_raw_y device_mouse_x_to_gui device_mouse_y_to_gui iap_activate iap_status iap_enumerate_products iap_restore_all iap_acquire iap_consume iap_product_details iap_purchase_details facebook_init facebook_login facebook_status facebook_graph_request facebook_dialog facebook_logout facebook_launch_offerwall facebook_post_message facebook_send_invite facebook_user_id facebook_accesstoken facebook_check_permission facebook_request_read_permissions facebook_request_publish_permissions gamepad_is_supported gamepad_get_device_count gamepad_is_connected gamepad_get_description gamepad_get_button_threshold gamepad_set_button_threshold gamepad_get_axis_deadzone gamepad_set_axis_deadzone gamepad_button_count gamepad_button_check gamepad_button_check_pressed gamepad_button_check_released gamepad_button_value gamepad_axis_count gamepad_axis_value gamepad_set_vibration gamepad_set_colour gamepad_set_color os_is_paused window_has_focus code_is_compiled http_get http_get_file http_post_string http_request json_encode json_decode zip_unzip load_csv base64_encode base64_decode md5_string_unicode md5_string_utf8 md5_file os_is_network_connected sha1_string_unicode sha1_string_utf8 sha1_file os_powersave_enable analytics_event analytics_event_ext win8_livetile_tile_notification win8_livetile_tile_clear win8_livetile_badge_notification win8_livetile_badge_clear win8_livetile_queue_enable win8_secondarytile_pin win8_secondarytile_badge_notification win8_secondarytile_delete win8_livetile_notification_begin win8_livetile_notification_secondary_begin win8_livetile_notification_expiry win8_livetile_notification_tag win8_livetile_notification_text_add win8_livetile_notification_image_add win8_livetile_notification_end win8_appbar_enable win8_appbar_add_element win8_appbar_remove_element win8_settingscharm_add_entry win8_settingscharm_add_html_entry win8_settingscharm_add_xaml_entry win8_settingscharm_set_xaml_property win8_settingscharm_get_xaml_property win8_settingscharm_remove_entry win8_share_image win8_share_screenshot win8_share_file win8_share_url win8_share_text win8_search_enable win8_search_disable win8_search_add_suggestions win8_device_touchscreen_available win8_license_initialize_sandbox win8_license_trial_version winphone_license_trial_version winphone_tile_title winphone_tile_count winphone_tile_back_title winphone_tile_back_content winphone_tile_back_content_wide winphone_tile_front_image winphone_tile_front_image_small winphone_tile_front_image_wide winphone_tile_back_image winphone_tile_back_image_wide winphone_tile_background_colour winphone_tile_background_color winphone_tile_icon_image winphone_tile_small_icon_image winphone_tile_wide_content winphone_tile_cycle_images winphone_tile_small_background_image physics_world_create physics_world_gravity physics_world_update_speed physics_world_update_iterations physics_world_draw_debug physics_pause_enable physics_fixture_create physics_fixture_set_kinematic physics_fixture_set_density physics_fixture_set_awake physics_fixture_set_restitution physics_fixture_set_friction physics_fixture_set_collision_group physics_fixture_set_sensor physics_fixture_set_linear_damping physics_fixture_set_angular_damping physics_fixture_set_circle_shape physics_fixture_set_box_shape physics_fixture_set_edge_shape physics_fixture_set_polygon_shape physics_fixture_set_chain_shape physics_fixture_add_point physics_fixture_bind physics_fixture_bind_ext physics_fixture_delete physics_apply_force physics_apply_impulse physics_apply_angular_impulse physics_apply_local_force physics_apply_local_impulse physics_apply_torque physics_mass_properties physics_draw_debug physics_test_overlap physics_remove_fixture physics_set_friction physics_set_density physics_set_restitution physics_get_friction physics_get_density physics_get_restitution physics_joint_distance_create physics_joint_rope_create physics_joint_revolute_create physics_joint_prismatic_create physics_joint_pulley_create physics_joint_wheel_create physics_joint_weld_create physics_joint_friction_create physics_joint_gear_create physics_joint_enable_motor physics_joint_get_value physics_joint_set_value physics_joint_delete physics_particle_create physics_particle_delete physics_particle_delete_region_circle physics_particle_delete_region_box physics_particle_delete_region_poly physics_particle_set_flags physics_particle_set_category_flags physics_particle_draw physics_particle_draw_ext physics_particle_count physics_particle_get_data physics_particle_get_data_particle physics_particle_group_begin physics_particle_group_circle physics_particle_group_box physics_particle_group_polygon physics_particle_group_add_point physics_particle_group_end physics_particle_group_join physics_particle_group_delete physics_particle_group_count physics_particle_group_get_data physics_particle_group_get_mass physics_particle_group_get_inertia physics_particle_group_get_centre_x physics_particle_group_get_centre_y physics_particle_group_get_vel_x physics_particle_group_get_vel_y physics_particle_group_get_ang_vel physics_particle_group_get_x physics_particle_group_get_y physics_particle_group_get_angle physics_particle_set_group_flags physics_particle_get_group_flags physics_particle_get_max_count physics_particle_get_radius physics_particle_get_density physics_particle_get_damping physics_particle_get_gravity_scale physics_particle_set_max_count physics_particle_set_radius physics_particle_set_density physics_particle_set_damping physics_particle_set_gravity_scale network_create_socket network_create_socket_ext network_create_server network_create_server_raw network_connect network_connect_raw network_send_packet network_send_raw network_send_broadcast network_send_udp network_send_udp_raw network_set_timeout network_set_config network_resolve network_destroy buffer_create buffer_write buffer_read buffer_seek buffer_get_surface buffer_set_surface buffer_delete buffer_exists buffer_get_type buffer_get_alignment buffer_poke buffer_peek buffer_save buffer_save_ext buffer_load buffer_load_ext buffer_load_partial buffer_copy buffer_fill buffer_get_size buffer_tell buffer_resize buffer_md5 buffer_sha1 buffer_base64_encode buffer_base64_decode buffer_base64_decode_ext buffer_sizeof buffer_get_address buffer_create_from_vertex_buffer buffer_create_from_vertex_buffer_ext buffer_copy_from_vertex_buffer buffer_async_group_begin buffer_async_group_option buffer_async_group_end buffer_load_async buffer_save_async gml_release_mode gml_pragma steam_activate_overlay steam_is_overlay_enabled steam_is_overlay_activated steam_get_persona_name steam_initialised steam_is_cloud_enabled_for_app steam_is_cloud_enabled_for_account steam_file_persisted steam_get_quota_total steam_get_quota_free steam_file_write steam_file_write_file steam_file_read steam_file_delete steam_file_exists steam_file_size steam_file_share steam_is_screenshot_requested steam_send_screenshot steam_is_user_logged_on steam_get_user_steam_id steam_user_owns_dlc steam_user_installed_dlc steam_set_achievement steam_get_achievement steam_clear_achievement steam_set_stat_int steam_set_stat_float steam_set_stat_avg_rate steam_get_stat_int steam_get_stat_float steam_get_stat_avg_rate steam_reset_all_stats steam_reset_all_stats_achievements steam_stats_ready steam_create_leaderboard steam_upload_score steam_upload_score_ext steam_download_scores_around_user steam_download_scores steam_download_friends_scores steam_upload_score_buffer steam_upload_score_buffer_ext steam_current_game_language steam_available_languages steam_activate_overlay_browser steam_activate_overlay_user steam_activate_overlay_store steam_get_user_persona_name steam_get_app_id steam_get_user_account_id steam_ugc_download steam_ugc_create_item steam_ugc_start_item_update steam_ugc_set_item_title steam_ugc_set_item_description steam_ugc_set_item_visibility steam_ugc_set_item_tags steam_ugc_set_item_content steam_ugc_set_item_preview steam_ugc_submit_item_update steam_ugc_get_item_update_progress steam_ugc_subscribe_item steam_ugc_unsubscribe_item steam_ugc_num_subscribed_items steam_ugc_get_subscribed_items steam_ugc_get_item_install_info steam_ugc_get_item_update_info steam_ugc_request_item_details steam_ugc_create_query_user steam_ugc_create_query_user_ex steam_ugc_create_query_all steam_ugc_create_query_all_ex steam_ugc_query_set_cloud_filename_filter steam_ugc_query_set_match_any_tag steam_ugc_query_set_search_text steam_ugc_query_set_ranked_by_trend_days steam_ugc_query_add_required_tag steam_ugc_query_add_excluded_tag steam_ugc_query_set_return_long_description steam_ugc_query_set_return_total_only steam_ugc_query_set_allow_cached_response steam_ugc_send_query shader_set shader_get_name shader_reset shader_current shader_is_compiled shader_get_sampler_index shader_get_uniform shader_set_uniform_i shader_set_uniform_i_array shader_set_uniform_f shader_set_uniform_f_array shader_set_uniform_matrix shader_set_uniform_matrix_array shader_enable_corner_id texture_set_stage texture_get_texel_width texture_get_texel_height shaders_are_supported vertex_format_begin vertex_format_end vertex_format_delete vertex_format_add_position vertex_format_add_position_3d vertex_format_add_colour vertex_format_add_color vertex_format_add_normal vertex_format_add_texcoord vertex_format_add_textcoord vertex_format_add_custom vertex_create_buffer vertex_create_buffer_ext vertex_delete_buffer vertex_begin vertex_end vertex_position vertex_position_3d vertex_colour vertex_color vertex_argb vertex_texcoord vertex_normal vertex_float1 vertex_float2 vertex_float3 vertex_float4 vertex_ubyte4 vertex_submit vertex_freeze vertex_get_number vertex_get_buffer_size vertex_create_buffer_from_buffer vertex_create_buffer_from_buffer_ext push_local_notification push_get_first_local_notification push_get_next_local_notification push_cancel_local_notification skeleton_animation_set skeleton_animation_get skeleton_animation_mix skeleton_animation_set_ext skeleton_animation_get_ext skeleton_animation_get_duration skeleton_animation_get_frames skeleton_animation_clear skeleton_skin_set skeleton_skin_get skeleton_attachment_set skeleton_attachment_get skeleton_attachment_create skeleton_collision_draw_set skeleton_bone_data_get skeleton_bone_data_set skeleton_bone_state_get skeleton_bone_state_set skeleton_get_minmax skeleton_get_num_bounds skeleton_get_bounds skeleton_animation_get_frame skeleton_animation_set_frame draw_skeleton draw_skeleton_time draw_skeleton_instance draw_skeleton_collision skeleton_animation_list skeleton_skin_list skeleton_slot_data layer_get_id layer_get_id_at_depth layer_get_depth layer_create layer_destroy layer_destroy_instances layer_add_instance layer_has_instance layer_set_visible layer_get_visible layer_exists layer_x layer_y layer_get_x layer_get_y layer_hspeed layer_vspeed layer_get_hspeed layer_get_vspeed layer_script_begin layer_script_end layer_shader layer_get_script_begin layer_get_script_end layer_get_shader layer_set_target_room layer_get_target_room layer_reset_target_room layer_get_all layer_get_all_elements layer_get_name layer_depth layer_get_element_layer layer_get_element_type layer_element_move layer_force_draw_depth layer_is_draw_depth_forced layer_get_forced_depth layer_background_get_id layer_background_exists layer_background_create layer_background_destroy layer_background_visible layer_background_change layer_background_sprite layer_background_htiled layer_background_vtiled layer_background_stretch layer_background_yscale layer_background_xscale layer_background_blend layer_background_alpha layer_background_index layer_background_speed layer_background_get_visible layer_background_get_sprite layer_background_get_htiled layer_background_get_vtiled layer_background_get_stretch layer_background_get_yscale layer_background_get_xscale layer_background_get_blend layer_background_get_alpha layer_background_get_index layer_background_get_speed layer_sprite_get_id layer_sprite_exists layer_sprite_create layer_sprite_destroy layer_sprite_change layer_sprite_index layer_sprite_speed layer_sprite_xscale layer_sprite_yscale layer_sprite_angle layer_sprite_blend layer_sprite_alpha layer_sprite_x layer_sprite_y layer_sprite_get_sprite layer_sprite_get_index layer_sprite_get_speed layer_sprite_get_xscale layer_sprite_get_yscale layer_sprite_get_angle layer_sprite_get_blend layer_sprite_get_alpha layer_sprite_get_x layer_sprite_get_y layer_tilemap_get_id layer_tilemap_exists layer_tilemap_create layer_tilemap_destroy tilemap_tileset tilemap_x tilemap_y tilemap_set tilemap_set_at_pixel tilemap_get_tileset tilemap_get_tile_width tilemap_get_tile_height tilemap_get_width tilemap_get_height tilemap_get_x tilemap_get_y tilemap_get tilemap_get_at_pixel tilemap_get_cell_x_at_pixel tilemap_get_cell_y_at_pixel tilemap_clear draw_tilemap draw_tile tilemap_set_global_mask tilemap_get_global_mask tilemap_set_mask tilemap_get_mask tilemap_get_frame tile_set_empty tile_set_index tile_set_flip tile_set_mirror tile_set_rotate tile_get_empty tile_get_index tile_get_flip tile_get_mirror tile_get_rotate layer_tile_exists layer_tile_create layer_tile_destroy layer_tile_change layer_tile_xscale layer_tile_yscale layer_tile_blend layer_tile_alpha layer_tile_x layer_tile_y layer_tile_region layer_tile_visible layer_tile_get_sprite layer_tile_get_xscale layer_tile_get_yscale layer_tile_get_blend layer_tile_get_alpha layer_tile_get_x layer_tile_get_y layer_tile_get_region layer_tile_get_visible layer_instance_get_instance instance_activate_layer instance_deactivate_layer camera_create camera_create_view camera_destroy camera_apply camera_get_active camera_get_default camera_set_default camera_set_view_mat camera_set_proj_mat camera_set_update_script camera_set_begin_script camera_set_end_script camera_set_view_pos camera_set_view_size camera_set_view_speed camera_set_view_border camera_set_view_angle camera_set_view_target camera_get_view_mat camera_get_proj_mat camera_get_update_script camera_get_begin_script camera_get_end_script camera_get_view_x camera_get_view_y camera_get_view_width camera_get_view_height camera_get_view_speed_x camera_get_view_speed_y camera_get_view_border_x camera_get_view_border_y camera_get_view_angle camera_get_view_target view_get_camera view_get_visible view_get_xport view_get_yport view_get_wport view_get_hport view_get_surface_id view_set_camera view_set_visible view_set_xport view_set_yport view_set_wport view_set_hport view_set_surface_id gesture_drag_time gesture_drag_distance gesture_flick_speed gesture_double_tap_time gesture_double_tap_distance gesture_pinch_distance gesture_pinch_angle_towards gesture_pinch_angle_away gesture_rotate_time gesture_rotate_angle gesture_tap_count gesture_get_drag_time gesture_get_drag_distance gesture_get_flick_speed gesture_get_double_tap_time gesture_get_double_tap_distance gesture_get_pinch_distance gesture_get_pinch_angle_towards gesture_get_pinch_angle_away gesture_get_rotate_time gesture_get_rotate_angle gesture_get_tap_count keyboard_virtual_show keyboard_virtual_hide keyboard_virtual_status keyboard_virtual_height",literal:"self other all noone global local undefined pointer_invalid pointer_null path_action_stop path_action_restart path_action_continue path_action_reverse true false pi GM_build_date GM_version GM_runtime_version timezone_local timezone_utc gamespeed_fps gamespeed_microseconds ev_create ev_destroy ev_step ev_alarm ev_keyboard ev_mouse ev_collision ev_other ev_draw ev_draw_begin ev_draw_end ev_draw_pre ev_draw_post ev_keypress ev_keyrelease ev_trigger ev_left_button ev_right_button ev_middle_button ev_no_button ev_left_press ev_right_press ev_middle_press ev_left_release ev_right_release ev_middle_release ev_mouse_enter ev_mouse_leave ev_mouse_wheel_up ev_mouse_wheel_down ev_global_left_button ev_global_right_button ev_global_middle_button ev_global_left_press ev_global_right_press ev_global_middle_press ev_global_left_release ev_global_right_release ev_global_middle_release ev_joystick1_left ev_joystick1_right ev_joystick1_up ev_joystick1_down ev_joystick1_button1 ev_joystick1_button2 ev_joystick1_button3 ev_joystick1_button4 ev_joystick1_button5 ev_joystick1_button6 ev_joystick1_button7 ev_joystick1_button8 ev_joystick2_left ev_joystick2_right ev_joystick2_up ev_joystick2_down ev_joystick2_button1 ev_joystick2_button2 ev_joystick2_button3 ev_joystick2_button4 ev_joystick2_button5 ev_joystick2_button6 ev_joystick2_button7 ev_joystick2_button8 ev_outside ev_boundary ev_game_start ev_game_end ev_room_start ev_room_end ev_no_more_lives ev_animation_end ev_end_of_path ev_no_more_health ev_close_button ev_user0 ev_user1 ev_user2 ev_user3 ev_user4 ev_user5 ev_user6 ev_user7 ev_user8 ev_user9 ev_user10 ev_user11 ev_user12 ev_user13 ev_user14 ev_user15 ev_step_normal ev_step_begin ev_step_end ev_gui ev_gui_begin ev_gui_end ev_cleanup ev_gesture ev_gesture_tap ev_gesture_double_tap ev_gesture_drag_start ev_gesture_dragging ev_gesture_drag_end ev_gesture_flick ev_gesture_pinch_start ev_gesture_pinch_in ev_gesture_pinch_out ev_gesture_pinch_end ev_gesture_rotate_start ev_gesture_rotating ev_gesture_rotate_end ev_global_gesture_tap ev_global_gesture_double_tap ev_global_gesture_drag_start ev_global_gesture_dragging ev_global_gesture_drag_end ev_global_gesture_flick ev_global_gesture_pinch_start ev_global_gesture_pinch_in ev_global_gesture_pinch_out ev_global_gesture_pinch_end ev_global_gesture_rotate_start ev_global_gesture_rotating ev_global_gesture_rotate_end vk_nokey vk_anykey vk_enter vk_return vk_shift vk_control vk_alt vk_escape vk_space vk_backspace vk_tab vk_pause vk_printscreen vk_left vk_right vk_up vk_down vk_home vk_end vk_delete vk_insert vk_pageup vk_pagedown vk_f1 vk_f2 vk_f3 vk_f4 vk_f5 vk_f6 vk_f7 vk_f8 vk_f9 vk_f10 vk_f11 vk_f12 vk_numpad0 vk_numpad1 vk_numpad2 vk_numpad3 vk_numpad4 vk_numpad5 vk_numpad6 vk_numpad7 vk_numpad8 vk_numpad9 vk_divide vk_multiply vk_subtract vk_add vk_decimal vk_lshift vk_lcontrol vk_lalt vk_rshift vk_rcontrol vk_ralt mb_any mb_none mb_left mb_right mb_middle c_aqua c_black c_blue c_dkgray c_fuchsia c_gray c_green c_lime c_ltgray c_maroon c_navy c_olive c_purple c_red c_silver c_teal c_white c_yellow c_orange fa_left fa_center fa_right fa_top fa_middle fa_bottom pr_pointlist pr_linelist pr_linestrip pr_trianglelist pr_trianglestrip pr_trianglefan bm_complex bm_normal bm_add bm_max bm_subtract bm_zero bm_one bm_src_colour bm_inv_src_colour bm_src_color bm_inv_src_color bm_src_alpha bm_inv_src_alpha bm_dest_alpha bm_inv_dest_alpha bm_dest_colour bm_inv_dest_colour bm_dest_color bm_inv_dest_color bm_src_alpha_sat tf_point tf_linear tf_anisotropic mip_off mip_on mip_markedonly audio_falloff_none audio_falloff_inverse_distance audio_falloff_inverse_distance_clamped audio_falloff_linear_distance audio_falloff_linear_distance_clamped audio_falloff_exponent_distance audio_falloff_exponent_distance_clamped audio_old_system audio_new_system audio_mono audio_stereo audio_3d cr_default cr_none cr_arrow cr_cross cr_beam cr_size_nesw cr_size_ns cr_size_nwse cr_size_we cr_uparrow cr_hourglass cr_drag cr_appstart cr_handpoint cr_size_all spritespeed_framespersecond spritespeed_framespergameframe asset_object asset_unknown asset_sprite asset_sound asset_room asset_path asset_script asset_font asset_timeline asset_tiles asset_shader fa_readonly fa_hidden fa_sysfile fa_volumeid fa_directory fa_archive ds_type_map ds_type_list ds_type_stack ds_type_queue ds_type_grid ds_type_priority ef_explosion ef_ring ef_ellipse ef_firework ef_smoke ef_smokeup ef_star ef_spark ef_flare ef_cloud ef_rain ef_snow pt_shape_pixel pt_shape_disk pt_shape_square pt_shape_line pt_shape_star pt_shape_circle pt_shape_ring pt_shape_sphere pt_shape_flare pt_shape_spark pt_shape_explosion pt_shape_cloud pt_shape_smoke pt_shape_snow ps_distr_linear ps_distr_gaussian ps_distr_invgaussian ps_shape_rectangle ps_shape_ellipse ps_shape_diamond ps_shape_line ty_real ty_string dll_cdecl dll_stdcall matrix_view matrix_projection matrix_world os_win32 os_windows os_macosx os_ios os_android os_symbian os_linux os_unknown os_winphone os_tizen os_win8native os_wiiu os_3ds os_psvita os_bb10 os_ps4 os_xboxone os_ps3 os_xbox360 os_uwp os_tvos os_switch browser_not_a_browser browser_unknown browser_ie browser_firefox browser_chrome browser_safari browser_safari_mobile browser_opera browser_tizen browser_edge browser_windows_store browser_ie_mobile device_ios_unknown device_ios_iphone device_ios_iphone_retina device_ios_ipad device_ios_ipad_retina device_ios_iphone5 device_ios_iphone6 device_ios_iphone6plus device_emulator device_tablet display_landscape display_landscape_flipped display_portrait display_portrait_flipped tm_sleep tm_countvsyncs of_challenge_win of_challen ge_lose of_challenge_tie leaderboard_type_number leaderboard_type_time_mins_secs cmpfunc_never cmpfunc_less cmpfunc_equal cmpfunc_lessequal cmpfunc_greater cmpfunc_notequal cmpfunc_greaterequal cmpfunc_always cull_noculling cull_clockwise cull_counterclockwise lighttype_dir lighttype_point iap_ev_storeload iap_ev_product iap_ev_purchase iap_ev_consume iap_ev_restore iap_storeload_ok iap_storeload_failed iap_status_uninitialised iap_status_unavailable iap_status_loading iap_status_available iap_status_processing iap_status_restoring iap_failed iap_unavailable iap_available iap_purchased iap_canceled iap_refunded fb_login_default fb_login_fallback_to_webview fb_login_no_fallback_to_webview fb_login_forcing_webview fb_login_use_system_account fb_login_forcing_safari phy_joint_anchor_1_x phy_joint_anchor_1_y phy_joint_anchor_2_x phy_joint_anchor_2_y phy_joint_reaction_force_x phy_joint_reaction_force_y phy_joint_reaction_torque phy_joint_motor_speed phy_joint_angle phy_joint_motor_torque phy_joint_max_motor_torque phy_joint_translation phy_joint_speed phy_joint_motor_force phy_joint_max_motor_force phy_joint_length_1 phy_joint_length_2 phy_joint_damping_ratio phy_joint_frequency phy_joint_lower_angle_limit phy_joint_upper_angle_limit phy_joint_angle_limits phy_joint_max_length phy_joint_max_torque phy_joint_max_force phy_debug_render_aabb phy_debug_render_collision_pairs phy_debug_render_coms phy_debug_render_core_shapes phy_debug_render_joints phy_debug_render_obb phy_debug_render_shapes phy_particle_flag_water phy_particle_flag_zombie phy_particle_flag_wall phy_particle_flag_spring phy_particle_flag_elastic phy_particle_flag_viscous phy_particle_flag_powder phy_particle_flag_tensile phy_particle_flag_colourmixing phy_particle_flag_colormixing phy_particle_group_flag_solid phy_particle_group_flag_rigid phy_particle_data_flag_typeflags phy_particle_data_flag_position phy_particle_data_flag_velocity phy_particle_data_flag_colour phy_particle_data_flag_color phy_particle_data_flag_category achievement_our_info achievement_friends_info achievement_leaderboard_info achievement_achievement_info achievement_filter_all_players achievement_filter_friends_only achievement_filter_favorites_only achievement_type_achievement_challenge achievement_type_score_challenge achievement_pic_loaded achievement_show_ui achievement_show_profile achievement_show_leaderboard achievement_show_achievement achievement_show_bank achievement_show_friend_picker achievement_show_purchase_prompt network_socket_tcp network_socket_udp network_socket_bluetooth network_type_connect network_type_disconnect network_type_data network_type_non_blocking_connect network_config_connect_timeout network_config_use_non_blocking_socket network_config_enable_reliable_udp network_config_disable_reliable_udp buffer_fixed buffer_grow buffer_wrap buffer_fast buffer_vbuffer buffer_network buffer_u8 buffer_s8 buffer_u16 buffer_s16 buffer_u32 buffer_s32 buffer_u64 buffer_f16 buffer_f32 buffer_f64 buffer_bool buffer_text buffer_string buffer_surface_copy buffer_seek_start buffer_seek_relative buffer_seek_end buffer_generalerror buffer_outofspace buffer_outofbounds buffer_invalidtype text_type button_type input_type ANSI_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET RUSSIAN_CHARSET SYMBOL_CHARSET SHIFTJIS_CHARSET HANGEUL_CHARSET GB2312_CHARSET CHINESEBIG5_CHARSET JOHAB_CHARSET HEBREW_CHARSET ARABIC_CHARSET GREEK_CHARSET TURKISH_CHARSET VIETNAMESE_CHARSET THAI_CHARSET MAC_CHARSET BALTIC_CHARSET OEM_CHARSET gp_face1 gp_face2 gp_face3 gp_face4 gp_shoulderl gp_shoulderr gp_shoulderlb gp_shoulderrb gp_select gp_start gp_stickl gp_stickr gp_padu gp_padd gp_padl gp_padr gp_axislh gp_axislv gp_axisrh gp_axisrv ov_friends ov_community ov_players ov_settings ov_gamegroup ov_achievements lb_sort_none lb_sort_ascending lb_sort_descending lb_disp_none lb_disp_numeric lb_disp_time_sec lb_disp_time_ms ugc_result_success ugc_filetype_community ugc_filetype_microtrans ugc_visibility_public ugc_visibility_friends_only ugc_visibility_private ugc_query_RankedByVote ugc_query_RankedByPublicationDate ugc_query_AcceptedForGameRankedByAcceptanceDate ugc_query_RankedByTrend ugc_query_FavoritedByFriendsRankedByPublicationDate ugc_query_CreatedByFriendsRankedByPublicationDate ugc_query_RankedByNumTimesReported ugc_query_CreatedByFollowedUsersRankedByPublicationDate ugc_query_NotYetRated ugc_query_RankedByTotalVotesAsc ugc_query_RankedByVotesUp ugc_query_RankedByTextSearch ugc_sortorder_CreationOrderDesc ugc_sortorder_CreationOrderAsc ugc_sortorder_TitleAsc ugc_sortorder_LastUpdatedDesc ugc_sortorder_SubscriptionDateDesc ugc_sortorder_VoteScoreDesc ugc_sortorder_ForModeration ugc_list_Published ugc_list_VotedOn ugc_list_VotedUp ugc_list_VotedDown ugc_list_WillVoteLater ugc_list_Favorited ugc_list_Subscribed ugc_list_UsedOrPlayed ugc_list_Followed ugc_match_Items ugc_match_Items_Mtx ugc_match_Items_ReadyToUse ugc_match_Collections ugc_match_Artwork ugc_match_Videos ugc_match_Screenshots ugc_match_AllGuides ugc_match_WebGuides ugc_match_IntegratedGuides ugc_match_UsableInGame ugc_match_ControllerBindings vertex_usage_position vertex_usage_colour vertex_usage_color vertex_usage_normal vertex_usage_texcoord vertex_usage_textcoord vertex_usage_blendweight vertex_usage_blendindices vertex_usage_psize vertex_usage_tangent vertex_usage_binormal vertex_usage_fog vertex_usage_depth vertex_usage_sample vertex_type_float1 vertex_type_float2 vertex_type_float3 vertex_type_float4 vertex_type_colour vertex_type_color vertex_type_ubyte4 layerelementtype_undefined layerelementtype_background layerelementtype_instance layerelementtype_oldtilemap layerelementtype_sprite layerelementtype_tilemap layerelementtype_particlesystem layerelementtype_tile tile_rotate tile_flip tile_mirror tile_index_mask kbv_type_default kbv_type_ascii kbv_type_url kbv_type_email kbv_type_numbers kbv_type_phone kbv_type_phone_name kbv_returnkey_default kbv_returnkey_go kbv_returnkey_google kbv_returnkey_join kbv_returnkey_next kbv_returnkey_route kbv_returnkey_search kbv_returnkey_send kbv_returnkey_yahoo kbv_returnkey_done kbv_returnkey_continue kbv_returnkey_emergency kbv_autocapitalize_none kbv_autocapitalize_words kbv_autocapitalize_sentences kbv_autocapitalize_characters",symbol:"argument_relative argument argument0 argument1 argument2 argument3 argument4 argument5 argument6 argument7 argument8 argument9 argument10 argument11 argument12 argument13 argument14 argument15 argument_count x y xprevious yprevious xstart ystart hspeed vspeed direction speed friction gravity gravity_direction path_index path_position path_positionprevious path_speed path_scale path_orientation path_endaction object_index id solid persistent mask_index instance_count instance_id room_speed fps fps_real current_time current_year current_month current_day current_weekday current_hour current_minute current_second alarm timeline_index timeline_position timeline_speed timeline_running timeline_loop room room_first room_last room_width room_height room_caption room_persistent score lives health show_score show_lives show_health caption_score caption_lives caption_health event_type event_number event_object event_action application_surface gamemaker_pro gamemaker_registered gamemaker_version error_occurred error_last debug_mode keyboard_key keyboard_lastkey keyboard_lastchar keyboard_string mouse_x mouse_y mouse_button mouse_lastbutton cursor_sprite visible sprite_index sprite_width sprite_height sprite_xoffset sprite_yoffset image_number image_index image_speed depth image_xscale image_yscale image_angle image_alpha image_blend bbox_left bbox_right bbox_top bbox_bottom layer background_colour background_showcolour background_color background_showcolor view_enabled view_current view_visible view_xview view_yview view_wview view_hview view_xport view_yport view_wport view_hport view_angle view_hborder view_vborder view_hspeed view_vspeed view_object view_surface_id view_camera game_id game_display_name game_project_name game_save_id working_directory temp_directory program_directory browser_width browser_height os_type os_device os_browser os_version display_aa async_load delta_time webgl_enabled event_data iap_data phy_rotation phy_position_x phy_position_y phy_angular_velocity phy_linear_velocity_x phy_linear_velocity_y phy_speed_x phy_speed_y phy_speed phy_angular_damping phy_linear_damping phy_bullet phy_fixed_rotation phy_active phy_mass phy_inertia phy_com_x phy_com_y phy_dynamic phy_kinematic phy_sleeping phy_collision_points phy_collision_x phy_collision_y phy_col_normal_x phy_col_normal_y phy_position_xprevious phy_position_yprevious"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:t,illegal:"",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}},function(e,t){e.exports=function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield lookup"},n={begin:/".*?"|'.*?'|\[.*?\]|\w+/},r=e.inherit(n,{keywords:t,starts:{endsWithParent:!0,relevance:0,contains:[e.inherit(n,{relevance:0})]}}),i=e.inherit(r,{className:"name"}),a=e.inherit(r,{relevance:0});return{aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},e.COMMENT(/\{\{!--/,/--\}\}/),e.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[i],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[i]},{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[i]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,keywords:t,contains:[a]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,keywords:t,contains:[a]}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"meta",begin:"{-#",end:"#-}"},r={className:"meta",begin:"^#",end:"$"},i={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},a={begin:"\\(",end:"\\)",illegal:'"',contains:[n,r,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),t]};return{aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[a,t],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[a,t],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[i,a,t]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[n,i,a,{begin:"{",end:"}",contains:a.contains},t]},{beginKeywords:"default",end:"$",contains:[i,a,t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[i,e.QUOTE_STRING_MODE,t]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},n,r,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,i,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}]}}},function(e,t){e.exports=function(e){return{aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:"\\W}"}]},e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},e.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:e.IDENT_RE,relevance:0}]},e.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE]}],illegal:/<\//}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:/[\w\._]+/,keywords:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",begin:'{"',end:'"}',contains:[e.BACKSLASH_ESCAPE]},e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),e.NUMBER_MODE,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},e.NUMBER_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",n=(e.QUOTE_STRING_MODE,{endsWithParent:!0,relevance:0,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE,{illegal:/\}\}/,begin:/[a-zA-Z0-9_]+=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[a-zA-Z0-9_]+/}]},e.NUMBER_MODE]});return{case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.\-]+/,keywords:{"builtin-name":t},starts:n}]},{className:"template-variable",begin:/\{\{[a-zA-Z][a-zA-Z\-]+/,end:/\}\}/,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE]}]}}},function(e,t){e.exports=function(e){return{aliases:["https"],illegal:"\\S",contains:[{begin:"^HTTP/[0-9\\.]+",end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:"HTTP/[0-9\\.]+"},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},_={endsWithParent:!0,relevance:0},p={keywords:{"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},lexemes:t,className:"name",begin:t,starts:_},m=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),p,_],_.contains=m,s.contains=m,{aliases:["hylang"],illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},n=e.COMMENT();n.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var r={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},i={className:"literal",begin:/\bon|off|true|false|yes|no\b/},a={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[n,{className:"section",begin:/\[+/,end:/\]+/},{begin:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,className:"attr",starts:{end:/$/,contains:[n,{begin:/\[/,end:/\]/,contains:[n,i,r,a,t,"self"],relevance:0},i,r,a,t]}}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),e.COMMENT("begin_doc","end_doc",{relevance:10}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t="[A-Za-zА-Яа-яёЁ_!][A-Za-zА-Яа-яёЁ_0-9]*",n={className:"number",begin:e.NUMBER_RE,relevance:0},r={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]},i={className:"doctag",begin:"\\b(?:TODO|DONE|BEGIN|END|STUB|CHG|FIXME|NOTE|BUG|XXX)\\b",relevance:0},a={variants:[{className:"comment",begin:"//",end:"$",relevance:0,contains:[e.PHRASAL_WORDS_MODE,i]},{className:"comment",begin:"/\\*",end:"\\*/",relevance:0,contains:[e.PHRASAL_WORDS_MODE,i]}]},o={keyword:"and и else иначе endexcept endfinally endforeach конецвсе endif конецесли endwhile конецпока except exitfor finally foreach все if если in в not не or или try while пока ",built_in:"SYSRES_CONST_ACCES_RIGHT_TYPE_EDIT SYSRES_CONST_ACCES_RIGHT_TYPE_FULL SYSRES_CONST_ACCES_RIGHT_TYPE_VIEW SYSRES_CONST_ACCESS_MODE_REQUISITE_CODE SYSRES_CONST_ACCESS_NO_ACCESS_VIEW SYSRES_CONST_ACCESS_NO_ACCESS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_ADD_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_CHANGE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_DELETE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_EXECUTE_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_NO_ACCESS_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_RATIFY_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW SYSRES_CONST_ACCESS_RIGHTS_VIEW_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_CODE SYSRES_CONST_ACCESS_RIGHTS_VIEW_REQUISITE_YES_CODE SYSRES_CONST_ACCESS_TYPE_CHANGE SYSRES_CONST_ACCESS_TYPE_CHANGE_CODE SYSRES_CONST_ACCESS_TYPE_EXISTS SYSRES_CONST_ACCESS_TYPE_EXISTS_CODE SYSRES_CONST_ACCESS_TYPE_FULL SYSRES_CONST_ACCESS_TYPE_FULL_CODE SYSRES_CONST_ACCESS_TYPE_VIEW SYSRES_CONST_ACCESS_TYPE_VIEW_CODE SYSRES_CONST_ACTION_TYPE_ABORT SYSRES_CONST_ACTION_TYPE_ACCEPT SYSRES_CONST_ACTION_TYPE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ADD_ATTACHMENT SYSRES_CONST_ACTION_TYPE_CHANGE_CARD SYSRES_CONST_ACTION_TYPE_CHANGE_KIND SYSRES_CONST_ACTION_TYPE_CHANGE_STORAGE SYSRES_CONST_ACTION_TYPE_CONTINUE SYSRES_CONST_ACTION_TYPE_COPY SYSRES_CONST_ACTION_TYPE_CREATE SYSRES_CONST_ACTION_TYPE_CREATE_VERSION SYSRES_CONST_ACTION_TYPE_DELETE SYSRES_CONST_ACTION_TYPE_DELETE_ATTACHMENT SYSRES_CONST_ACTION_TYPE_DELETE_VERSION SYSRES_CONST_ACTION_TYPE_DISABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENABLE_DELEGATE_ACCESS_RIGHTS SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_CERTIFICATE_AND_PASSWORD SYSRES_CONST_ACTION_TYPE_ENCRYPTION_BY_PASSWORD SYSRES_CONST_ACTION_TYPE_EXPORT_WITH_LOCK SYSRES_CONST_ACTION_TYPE_EXPORT_WITHOUT_LOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITH_UNLOCK SYSRES_CONST_ACTION_TYPE_IMPORT_WITHOUT_UNLOCK SYSRES_CONST_ACTION_TYPE_LIFE_CYCLE_STAGE SYSRES_CONST_ACTION_TYPE_LOCK SYSRES_CONST_ACTION_TYPE_LOCK_FOR_SERVER SYSRES_CONST_ACTION_TYPE_LOCK_MODIFY SYSRES_CONST_ACTION_TYPE_MARK_AS_READED SYSRES_CONST_ACTION_TYPE_MARK_AS_UNREADED SYSRES_CONST_ACTION_TYPE_MODIFY SYSRES_CONST_ACTION_TYPE_MODIFY_CARD SYSRES_CONST_ACTION_TYPE_MOVE_TO_ARCHIVE SYSRES_CONST_ACTION_TYPE_OFF_ENCRYPTION SYSRES_CONST_ACTION_TYPE_PASSWORD_CHANGE SYSRES_CONST_ACTION_TYPE_PERFORM SYSRES_CONST_ACTION_TYPE_RECOVER_FROM_LOCAL_COPY SYSRES_CONST_ACTION_TYPE_RESTART SYSRES_CONST_ACTION_TYPE_RESTORE_FROM_ARCHIVE SYSRES_CONST_ACTION_TYPE_REVISION SYSRES_CONST_ACTION_TYPE_SEND_BY_MAIL SYSRES_CONST_ACTION_TYPE_SIGN SYSRES_CONST_ACTION_TYPE_START SYSRES_CONST_ACTION_TYPE_UNLOCK SYSRES_CONST_ACTION_TYPE_UNLOCK_FROM_SERVER SYSRES_CONST_ACTION_TYPE_VERSION_STATE SYSRES_CONST_ACTION_TYPE_VERSION_VISIBILITY SYSRES_CONST_ACTION_TYPE_VIEW SYSRES_CONST_ACTION_TYPE_VIEW_SHADOW_COPY SYSRES_CONST_ACTION_TYPE_WORKFLOW_DESCRIPTION_MODIFY SYSRES_CONST_ACTION_TYPE_WRITE_HISTORY SYSRES_CONST_ACTIVE_VERSION_STATE_PICK_VALUE SYSRES_CONST_ADD_REFERENCE_MODE_NAME SYSRES_CONST_ADDITION_REQUISITE_CODE SYSRES_CONST_ADDITIONAL_PARAMS_REQUISITE_CODE SYSRES_CONST_ADITIONAL_JOB_END_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_READ_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_START_DATE_REQUISITE_NAME SYSRES_CONST_ADITIONAL_JOB_STATE_REQUISITE_NAME SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_ADDING_USER_TO_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_CREATION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_DATABASE_USER_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_COMP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_DELETION_USER_FROM_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_GRANTING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_MAIN_SERVER_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_IS_PUBLIC_CHANGED_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_FILTERER_RESTRICTION_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_PRIVILEGE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_REMOVING_RIGHTS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_CREATION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION SYSRES_CONST_ADMINISTRATION_HISTORY_SERVER_LOGIN_DELETION_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_CATEGORY_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_COMP_TITLE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_FULL_NAME_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_PARENT_GROUP_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_AUTH_TYPE_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_LOGIN_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION SYSRES_CONST_ADMINISTRATION_HISTORY_UPDATING_USER_STATUS_ACTION_CODE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE SYSRES_CONST_ADMINISTRATION_HISTORY_USER_PASSWORD_CHANGE_ACTION SYSRES_CONST_ALL_ACCEPT_CONDITION_RUS SYSRES_CONST_ALL_USERS_GROUP SYSRES_CONST_ALL_USERS_GROUP_NAME SYSRES_CONST_ALL_USERS_SERVER_GROUP_NAME SYSRES_CONST_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_APP_VIEWER_TYPE_REQUISITE_CODE SYSRES_CONST_APPROVING_SIGNATURE_NAME SYSRES_CONST_APPROVING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE SYSRES_CONST_ASSISTANT_SUBSTITUE_TYPE_CODE SYSRES_CONST_ATTACH_TYPE_COMPONENT_TOKEN SYSRES_CONST_ATTACH_TYPE_DOC SYSRES_CONST_ATTACH_TYPE_EDOC SYSRES_CONST_ATTACH_TYPE_FOLDER SYSRES_CONST_ATTACH_TYPE_JOB SYSRES_CONST_ATTACH_TYPE_REFERENCE SYSRES_CONST_ATTACH_TYPE_TASK SYSRES_CONST_AUTH_ENCODED_PASSWORD SYSRES_CONST_AUTH_ENCODED_PASSWORD_CODE SYSRES_CONST_AUTH_NOVELL SYSRES_CONST_AUTH_PASSWORD SYSRES_CONST_AUTH_PASSWORD_CODE SYSRES_CONST_AUTH_WINDOWS SYSRES_CONST_AUTHENTICATING_SIGNATURE_NAME SYSRES_CONST_AUTHENTICATING_SIGNATURE_REQUISITE_CODE SYSRES_CONST_AUTO_ENUM_METHOD_FLAG SYSRES_CONST_AUTO_NUMERATION_CODE SYSRES_CONST_AUTO_STRONG_ENUM_METHOD_FLAG SYSRES_CONST_AUTOTEXT_NAME_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_TEXT_REQUISITE_CODE SYSRES_CONST_AUTOTEXT_USAGE_ALL SYSRES_CONST_AUTOTEXT_USAGE_ALL_CODE SYSRES_CONST_AUTOTEXT_USAGE_SIGN SYSRES_CONST_AUTOTEXT_USAGE_SIGN_CODE SYSRES_CONST_AUTOTEXT_USAGE_WORK SYSRES_CONST_AUTOTEXT_USAGE_WORK_CODE SYSRES_CONST_AUTOTEXT_USE_ANYWHERE_CODE SYSRES_CONST_AUTOTEXT_USE_ON_SIGNING_CODE SYSRES_CONST_AUTOTEXT_USE_ON_WORK_CODE SYSRES_CONST_BEGIN_DATE_REQUISITE_CODE SYSRES_CONST_BLACK_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BLUE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_BTN_PART SYSRES_CONST_CALCULATED_ROLE_TYPE_CODE SYSRES_CONST_CALL_TYPE_VARIABLE_BUTTON_VALUE SYSRES_CONST_CALL_TYPE_VARIABLE_PROGRAM_VALUE SYSRES_CONST_CANCEL_MESSAGE_FUNCTION_RESULT SYSRES_CONST_CARD_PART SYSRES_CONST_CARD_REFERENCE_MODE_NAME SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_AND_ENCRYPT_VALUE SYSRES_CONST_CERTIFICATE_TYPE_REQUISITE_SIGN_VALUE SYSRES_CONST_CHECK_PARAM_VALUE_DATE_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_FLOAT_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_INTEGER_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_PICK_PARAM_TYPE SYSRES_CONST_CHECK_PARAM_VALUE_REEFRENCE_PARAM_TYPE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_CLOSED_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_CODE_COMPONENT_TYPE_ADMIN SYSRES_CONST_CODE_COMPONENT_TYPE_DEVELOPER SYSRES_CONST_CODE_COMPONENT_TYPE_DOCS SYSRES_CONST_CODE_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_CODE_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_CODE_COMPONENT_TYPE_OTHER SYSRES_CONST_CODE_COMPONENT_TYPE_REFERENCE SYSRES_CONST_CODE_COMPONENT_TYPE_REPORT SYSRES_CONST_CODE_COMPONENT_TYPE_SCRIPT SYSRES_CONST_CODE_COMPONENT_TYPE_URL SYSRES_CONST_CODE_REQUISITE_ACCESS SYSRES_CONST_CODE_REQUISITE_CODE SYSRES_CONST_CODE_REQUISITE_COMPONENT SYSRES_CONST_CODE_REQUISITE_DESCRIPTION SYSRES_CONST_CODE_REQUISITE_EXCLUDE_COMPONENT SYSRES_CONST_CODE_REQUISITE_RECORD SYSRES_CONST_COMMENT_REQ_CODE SYSRES_CONST_COMMON_SETTINGS_REQUISITE_CODE SYSRES_CONST_COMP_CODE_GRD SYSRES_CONST_COMPONENT_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_COMPONENT_TYPE_ADMIN_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DEVELOPER_COMPONENTS SYSRES_CONST_COMPONENT_TYPE_DOCS SYSRES_CONST_COMPONENT_TYPE_EDOC_CARDS SYSRES_CONST_COMPONENT_TYPE_EDOCS SYSRES_CONST_COMPONENT_TYPE_EXTERNAL_EXECUTABLE SYSRES_CONST_COMPONENT_TYPE_OTHER SYSRES_CONST_COMPONENT_TYPE_REFERENCE_TYPES SYSRES_CONST_COMPONENT_TYPE_REFERENCES SYSRES_CONST_COMPONENT_TYPE_REPORTS SYSRES_CONST_COMPONENT_TYPE_SCRIPTS SYSRES_CONST_COMPONENT_TYPE_URL SYSRES_CONST_COMPONENTS_REMOTE_SERVERS_VIEW_CODE SYSRES_CONST_CONDITION_BLOCK_DESCRIPTION SYSRES_CONST_CONST_FIRM_STATUS_COMMON SYSRES_CONST_CONST_FIRM_STATUS_INDIVIDUAL SYSRES_CONST_CONST_NEGATIVE_VALUE SYSRES_CONST_CONST_POSITIVE_VALUE SYSRES_CONST_CONST_SERVER_STATUS_DONT_REPLICATE SYSRES_CONST_CONST_SERVER_STATUS_REPLICATE SYSRES_CONST_CONTENTS_REQUISITE_CODE SYSRES_CONST_DATA_TYPE_BOOLEAN SYSRES_CONST_DATA_TYPE_DATE SYSRES_CONST_DATA_TYPE_FLOAT SYSRES_CONST_DATA_TYPE_INTEGER SYSRES_CONST_DATA_TYPE_PICK SYSRES_CONST_DATA_TYPE_REFERENCE SYSRES_CONST_DATA_TYPE_STRING SYSRES_CONST_DATA_TYPE_TEXT SYSRES_CONST_DATA_TYPE_VARIANT SYSRES_CONST_DATE_CLOSE_REQ_CODE SYSRES_CONST_DATE_FORMAT_DATE_ONLY_CHAR SYSRES_CONST_DATE_OPEN_REQ_CODE SYSRES_CONST_DATE_REQUISITE SYSRES_CONST_DATE_REQUISITE_CODE SYSRES_CONST_DATE_REQUISITE_NAME SYSRES_CONST_DATE_REQUISITE_TYPE SYSRES_CONST_DATE_TYPE_CHAR SYSRES_CONST_DATETIME_FORMAT_VALUE SYSRES_CONST_DEA_ACCESS_RIGHTS_ACTION_CODE SYSRES_CONST_DESCRIPTION_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_DET1_PART SYSRES_CONST_DET2_PART SYSRES_CONST_DET3_PART SYSRES_CONST_DET4_PART SYSRES_CONST_DET5_PART SYSRES_CONST_DET6_PART SYSRES_CONST_DETAIL_DATASET_KEY_REQUISITE_CODE SYSRES_CONST_DETAIL_PICK_REQUISITE_CODE SYSRES_CONST_DETAIL_REQ_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ACCESS_TYPE_NAME SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_CODE SYSRES_CONST_DO_NOT_USE_ON_VIEW_ACCESS_TYPE_NAME SYSRES_CONST_DOCUMENT_STORAGES_CODE SYSRES_CONST_DOCUMENT_TEMPLATES_TYPE_NAME SYSRES_CONST_DOUBLE_REQUISITE_CODE SYSRES_CONST_EDITOR_CLOSE_FILE_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_CLOSE_PROCESS_OBSERV_TYPE_CODE SYSRES_CONST_EDITOR_TYPE_REQUISITE_CODE SYSRES_CONST_EDITORS_APPLICATION_NAME_REQUISITE_CODE SYSRES_CONST_EDITORS_CREATE_SEVERAL_PROCESSES_REQUISITE_CODE SYSRES_CONST_EDITORS_EXTENSION_REQUISITE_CODE SYSRES_CONST_EDITORS_OBSERVER_BY_PROCESS_TYPE SYSRES_CONST_EDITORS_REFERENCE_CODE SYSRES_CONST_EDITORS_REPLACE_SPEC_CHARS_REQUISITE_CODE SYSRES_CONST_EDITORS_USE_PLUGINS_REQUISITE_CODE SYSRES_CONST_EDITORS_VIEW_DOCUMENT_OPENED_TO_EDIT_CODE SYSRES_CONST_EDOC_CARD_TYPE_REQUISITE_CODE SYSRES_CONST_EDOC_CARD_TYPES_LINK_REQUISITE_CODE SYSRES_CONST_EDOC_CERTIFICATE_AND_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_CERTIFICATE_ENCODE_CODE SYSRES_CONST_EDOC_DATE_REQUISITE_CODE SYSRES_CONST_EDOC_KIND_REFERENCE_CODE SYSRES_CONST_EDOC_KINDS_BY_TEMPLATE_ACTION_CODE SYSRES_CONST_EDOC_MANAGE_ACCESS_CODE SYSRES_CONST_EDOC_NONE_ENCODE_CODE SYSRES_CONST_EDOC_NUMBER_REQUISITE_CODE SYSRES_CONST_EDOC_PASSWORD_ENCODE_CODE SYSRES_CONST_EDOC_READONLY_ACCESS_CODE SYSRES_CONST_EDOC_SHELL_LIFE_TYPE_VIEW_VALUE SYSRES_CONST_EDOC_SIZE_RESTRICTION_PRIORITY_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_CHECK_ACCESS_RIGHTS_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_COMPUTER_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_DATABASE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_EDIT_IN_STORAGE_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_LOCAL_PATH_REQUISITE_CODE SYSRES_CONST_EDOC_STORAGE_SHARED_SOURCE_NAME_REQUISITE_CODE SYSRES_CONST_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_EDOC_TYPES_REFERENCE_CODE SYSRES_CONST_EDOC_VERSION_ACTIVE_STAGE_CODE SYSRES_CONST_EDOC_VERSION_DESIGN_STAGE_CODE SYSRES_CONST_EDOC_VERSION_OBSOLETE_STAGE_CODE SYSRES_CONST_EDOC_WRITE_ACCES_CODE SYSRES_CONST_EDOCUMENT_CARD_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_END_DATE_REQUISITE_CODE SYSRES_CONST_ENUMERATION_TYPE_REQUISITE_CODE SYSRES_CONST_EXECUTE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_EXECUTIVE_FILE_STORAGE_TYPE SYSRES_CONST_EXIST_CONST SYSRES_CONST_EXIST_VALUE SYSRES_CONST_EXPORT_LOCK_TYPE_ASK SYSRES_CONST_EXPORT_LOCK_TYPE_WITH_LOCK SYSRES_CONST_EXPORT_LOCK_TYPE_WITHOUT_LOCK SYSRES_CONST_EXPORT_VERSION_TYPE_ASK SYSRES_CONST_EXPORT_VERSION_TYPE_LAST SYSRES_CONST_EXPORT_VERSION_TYPE_LAST_ACTIVE SYSRES_CONST_EXTENSION_REQUISITE_CODE SYSRES_CONST_FILTER_NAME_REQUISITE_CODE SYSRES_CONST_FILTER_REQUISITE_CODE SYSRES_CONST_FILTER_TYPE_COMMON_CODE SYSRES_CONST_FILTER_TYPE_COMMON_NAME SYSRES_CONST_FILTER_TYPE_USER_CODE SYSRES_CONST_FILTER_TYPE_USER_NAME SYSRES_CONST_FILTER_VALUE_REQUISITE_NAME SYSRES_CONST_FLOAT_NUMBER_FORMAT_CHAR SYSRES_CONST_FLOAT_REQUISITE_TYPE SYSRES_CONST_FOLDER_AUTHOR_VALUE SYSRES_CONST_FOLDER_KIND_ANY_OBJECTS SYSRES_CONST_FOLDER_KIND_COMPONENTS SYSRES_CONST_FOLDER_KIND_EDOCS SYSRES_CONST_FOLDER_KIND_JOBS SYSRES_CONST_FOLDER_KIND_TASKS SYSRES_CONST_FOLDER_TYPE_COMMON SYSRES_CONST_FOLDER_TYPE_COMPONENT SYSRES_CONST_FOLDER_TYPE_FAVORITES SYSRES_CONST_FOLDER_TYPE_INBOX SYSRES_CONST_FOLDER_TYPE_OUTBOX SYSRES_CONST_FOLDER_TYPE_QUICK_LAUNCH SYSRES_CONST_FOLDER_TYPE_SEARCH SYSRES_CONST_FOLDER_TYPE_SHORTCUTS SYSRES_CONST_FOLDER_TYPE_USER SYSRES_CONST_FROM_DICTIONARY_ENUM_METHOD_FLAG SYSRES_CONST_FULL_SUBSTITUTE_TYPE SYSRES_CONST_FULL_SUBSTITUTE_TYPE_CODE SYSRES_CONST_FUNCTION_CANCEL_RESULT SYSRES_CONST_FUNCTION_CATEGORY_SYSTEM SYSRES_CONST_FUNCTION_CATEGORY_USER SYSRES_CONST_FUNCTION_FAILURE_RESULT SYSRES_CONST_FUNCTION_SAVE_RESULT SYSRES_CONST_GENERATED_REQUISITE SYSRES_CONST_GREEN_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_GROUP_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_CODE SYSRES_CONST_GROUP_CATEGORY_NORMAL_NAME SYSRES_CONST_GROUP_CATEGORY_SERVICE_CODE SYSRES_CONST_GROUP_CATEGORY_SERVICE_NAME SYSRES_CONST_GROUP_COMMON_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_FULL_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_CODES_REQUISITE_CODE SYSRES_CONST_GROUP_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_GROUP_SERVICE_CATEGORY_FIELD_VALUE SYSRES_CONST_GROUP_USER_REQUISITE_CODE SYSRES_CONST_GROUPS_REFERENCE_CODE SYSRES_CONST_GROUPS_REQUISITE_CODE SYSRES_CONST_HIDDEN_MODE_NAME SYSRES_CONST_HIGH_LVL_REQUISITE_CODE SYSRES_CONST_HISTORY_ACTION_CREATE_CODE SYSRES_CONST_HISTORY_ACTION_DELETE_CODE SYSRES_CONST_HISTORY_ACTION_EDIT_CODE SYSRES_CONST_HOUR_CHAR SYSRES_CONST_ID_REQUISITE_CODE SYSRES_CONST_IDSPS_REQUISITE_CODE SYSRES_CONST_IMAGE_MODE_COLOR SYSRES_CONST_IMAGE_MODE_GREYSCALE SYSRES_CONST_IMAGE_MODE_MONOCHROME SYSRES_CONST_IMPORTANCE_HIGH SYSRES_CONST_IMPORTANCE_LOW SYSRES_CONST_IMPORTANCE_NORMAL SYSRES_CONST_IN_DESIGN_VERSION_STATE_PICK_VALUE SYSRES_CONST_INCOMING_WORK_RULE_TYPE_CODE SYSRES_CONST_INT_REQUISITE SYSRES_CONST_INT_REQUISITE_TYPE SYSRES_CONST_INTEGER_NUMBER_FORMAT_CHAR SYSRES_CONST_INTEGER_TYPE_CHAR SYSRES_CONST_IS_GENERATED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_PUBLIC_ROLE_REQUISITE_CODE SYSRES_CONST_IS_REMOTE_USER_NEGATIVE_VALUE SYSRES_CONST_IS_REMOTE_USER_POSITIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_NEGATIVE_VALUE SYSRES_CONST_IS_STORED_REQUISITE_STORED_VALUE SYSRES_CONST_ITALIC_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_JOB_BLOCK_DESCRIPTION SYSRES_CONST_JOB_KIND_CONTROL_JOB SYSRES_CONST_JOB_KIND_JOB SYSRES_CONST_JOB_KIND_NOTICE SYSRES_CONST_JOB_STATE_ABORTED SYSRES_CONST_JOB_STATE_COMPLETE SYSRES_CONST_JOB_STATE_WORKING SYSRES_CONST_KIND_REQUISITE_CODE SYSRES_CONST_KIND_REQUISITE_NAME SYSRES_CONST_KINDS_CREATE_SHADOW_COPIES_REQUISITE_CODE SYSRES_CONST_KINDS_DEFAULT_EDOC_LIFE_STAGE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALL_TEPLATES_ALLOWED_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_LIFE_CYCLE_STAGE_CHANGING_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_ALLOW_MULTIPLE_ACTIVE_VERSIONS_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_SHARE_ACCES_RIGHTS_BY_DEFAULT_CODE SYSRES_CONST_KINDS_EDOC_TEMPLATE_REQUISITE_CODE SYSRES_CONST_KINDS_EDOC_TYPE_REQUISITE_CODE SYSRES_CONST_KINDS_SIGNERS_REQUISITES_CODE SYSRES_CONST_KOD_INPUT_TYPE SYSRES_CONST_LAST_UPDATE_DATE_REQUISITE_CODE SYSRES_CONST_LIFE_CYCLE_START_STAGE_REQUISITE_CODE SYSRES_CONST_LILAC_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_LINK_OBJECT_KIND_COMPONENT SYSRES_CONST_LINK_OBJECT_KIND_DOCUMENT SYSRES_CONST_LINK_OBJECT_KIND_EDOC SYSRES_CONST_LINK_OBJECT_KIND_FOLDER SYSRES_CONST_LINK_OBJECT_KIND_JOB SYSRES_CONST_LINK_OBJECT_KIND_REFERENCE SYSRES_CONST_LINK_OBJECT_KIND_TASK SYSRES_CONST_LINK_REF_TYPE_REQUISITE_CODE SYSRES_CONST_LIST_REFERENCE_MODE_NAME SYSRES_CONST_LOCALIZATION_DICTIONARY_MAIN_VIEW_CODE SYSRES_CONST_MAIN_VIEW_CODE SYSRES_CONST_MANUAL_ENUM_METHOD_FLAG SYSRES_CONST_MASTER_COMP_TYPE_REQUISITE_CODE SYSRES_CONST_MASTER_TABLE_REC_ID_REQUISITE_CODE SYSRES_CONST_MAXIMIZED_MODE_NAME SYSRES_CONST_ME_VALUE SYSRES_CONST_MESSAGE_ATTENTION_CAPTION SYSRES_CONST_MESSAGE_CONFIRMATION_CAPTION SYSRES_CONST_MESSAGE_ERROR_CAPTION SYSRES_CONST_MESSAGE_INFORMATION_CAPTION SYSRES_CONST_MINIMIZED_MODE_NAME SYSRES_CONST_MINUTE_CHAR SYSRES_CONST_MODULE_REQUISITE_CODE SYSRES_CONST_MONITORING_BLOCK_DESCRIPTION SYSRES_CONST_MONTH_FORMAT_VALUE SYSRES_CONST_NAME_LOCALIZE_ID_REQUISITE_CODE SYSRES_CONST_NAME_REQUISITE_CODE SYSRES_CONST_NAME_SINGULAR_REQUISITE_CODE SYSRES_CONST_NAMEAN_INPUT_TYPE SYSRES_CONST_NEGATIVE_PICK_VALUE SYSRES_CONST_NEGATIVE_VALUE SYSRES_CONST_NO SYSRES_CONST_NO_PICK_VALUE SYSRES_CONST_NO_SIGNATURE_REQUISITE_CODE SYSRES_CONST_NO_VALUE SYSRES_CONST_NONE_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE SYSRES_CONST_NONOPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_NORMAL_ACCESS_RIGHTS_TYPE_CODE SYSRES_CONST_NORMAL_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_NORMAL_MODE_NAME SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_CODE SYSRES_CONST_NOT_ALLOWED_ACCESS_TYPE_NAME SYSRES_CONST_NOTE_REQUISITE_CODE SYSRES_CONST_NOTICE_BLOCK_DESCRIPTION SYSRES_CONST_NUM_REQUISITE SYSRES_CONST_NUM_STR_REQUISITE_CODE SYSRES_CONST_NUMERATION_AUTO_NOT_STRONG SYSRES_CONST_NUMERATION_AUTO_STRONG SYSRES_CONST_NUMERATION_FROM_DICTONARY SYSRES_CONST_NUMERATION_MANUAL SYSRES_CONST_NUMERIC_TYPE_CHAR SYSRES_CONST_NUMREQ_REQUISITE_CODE SYSRES_CONST_OBSOLETE_VERSION_STATE_PICK_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_FEMININE SYSRES_CONST_OPERATING_RECORD_FLAG_VALUE_MASCULINE SYSRES_CONST_OPTIONAL_FORM_COMP_REQCODE_PREFIX SYSRES_CONST_ORANGE_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_ORIGINALREF_REQUISITE_CODE SYSRES_CONST_OURFIRM_REF_CODE SYSRES_CONST_OURFIRM_REQUISITE_CODE SYSRES_CONST_OURFIRM_VAR SYSRES_CONST_OUTGOING_WORK_RULE_TYPE_CODE SYSRES_CONST_PICK_NEGATIVE_RESULT SYSRES_CONST_PICK_POSITIVE_RESULT SYSRES_CONST_PICK_REQUISITE SYSRES_CONST_PICK_REQUISITE_TYPE SYSRES_CONST_PICK_TYPE_CHAR SYSRES_CONST_PLAN_STATUS_REQUISITE_CODE SYSRES_CONST_PLATFORM_VERSION_COMMENT SYSRES_CONST_PLUGINS_SETTINGS_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_POSITIVE_PICK_VALUE SYSRES_CONST_POWER_TO_CREATE_ACTION_CODE SYSRES_CONST_POWER_TO_SIGN_ACTION_CODE SYSRES_CONST_PRIORITY_REQUISITE_CODE SYSRES_CONST_QUALIFIED_TASK_TYPE SYSRES_CONST_QUALIFIED_TASK_TYPE_CODE SYSRES_CONST_RECSTAT_REQUISITE_CODE SYSRES_CONST_RED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_REF_ID_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_REF_REQUISITE SYSRES_CONST_REF_REQUISITE_TYPE SYSRES_CONST_REF_REQUISITES_REFERENCE_CODE_SELECTED_REQUISITE SYSRES_CONST_REFERENCE_RECORD_HISTORY_CREATE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_DELETE_ACTION_CODE SYSRES_CONST_REFERENCE_RECORD_HISTORY_MODIFY_ACTION_CODE SYSRES_CONST_REFERENCE_TYPE_CHAR SYSRES_CONST_REFERENCE_TYPE_REQUISITE_NAME SYSRES_CONST_REFERENCES_ADD_PARAMS_REQUISITE_CODE SYSRES_CONST_REFERENCES_DISPLAY_REQUISITE_REQUISITE_CODE SYSRES_CONST_REMOTE_SERVER_STATUS_WORKING SYSRES_CONST_REMOTE_SERVER_TYPE_MAIN SYSRES_CONST_REMOTE_SERVER_TYPE_SECONDARY SYSRES_CONST_REMOTE_USER_FLAG_VALUE_CODE SYSRES_CONST_REPORT_APP_EDITOR_INTERNAL SYSRES_CONST_REPORT_BASE_REPORT_ID_REQUISITE_CODE SYSRES_CONST_REPORT_BASE_REPORT_REQUISITE_CODE SYSRES_CONST_REPORT_SCRIPT_REQUISITE_CODE SYSRES_CONST_REPORT_TEMPLATE_REQUISITE_CODE SYSRES_CONST_REPORT_VIEWER_CODE_REQUISITE_CODE SYSRES_CONST_REQ_ALLOW_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_RECORD_DEFAULT_VALUE SYSRES_CONST_REQ_ALLOW_SERVER_COMPONENT_DEFAULT_VALUE SYSRES_CONST_REQ_MODE_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_EDIT_CODE SYSRES_CONST_REQ_MODE_HIDDEN_CODE SYSRES_CONST_REQ_MODE_NOT_AVAILABLE_CODE SYSRES_CONST_REQ_MODE_VIEW_CODE SYSRES_CONST_REQ_NUMBER_REQUISITE_CODE SYSRES_CONST_REQ_SECTION_VALUE SYSRES_CONST_REQ_TYPE_VALUE SYSRES_CONST_REQUISITE_FORMAT_BY_UNIT SYSRES_CONST_REQUISITE_FORMAT_DATE_FULL SYSRES_CONST_REQUISITE_FORMAT_DATE_TIME SYSRES_CONST_REQUISITE_FORMAT_LEFT SYSRES_CONST_REQUISITE_FORMAT_RIGHT SYSRES_CONST_REQUISITE_FORMAT_WITHOUT_UNIT SYSRES_CONST_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_REQUISITE_SECTION_ACTIONS SYSRES_CONST_REQUISITE_SECTION_BUTTON SYSRES_CONST_REQUISITE_SECTION_BUTTONS SYSRES_CONST_REQUISITE_SECTION_CARD SYSRES_CONST_REQUISITE_SECTION_TABLE SYSRES_CONST_REQUISITE_SECTION_TABLE10 SYSRES_CONST_REQUISITE_SECTION_TABLE11 SYSRES_CONST_REQUISITE_SECTION_TABLE12 SYSRES_CONST_REQUISITE_SECTION_TABLE13 SYSRES_CONST_REQUISITE_SECTION_TABLE14 SYSRES_CONST_REQUISITE_SECTION_TABLE15 SYSRES_CONST_REQUISITE_SECTION_TABLE16 SYSRES_CONST_REQUISITE_SECTION_TABLE17 SYSRES_CONST_REQUISITE_SECTION_TABLE18 SYSRES_CONST_REQUISITE_SECTION_TABLE19 SYSRES_CONST_REQUISITE_SECTION_TABLE2 SYSRES_CONST_REQUISITE_SECTION_TABLE20 SYSRES_CONST_REQUISITE_SECTION_TABLE21 SYSRES_CONST_REQUISITE_SECTION_TABLE22 SYSRES_CONST_REQUISITE_SECTION_TABLE23 SYSRES_CONST_REQUISITE_SECTION_TABLE24 SYSRES_CONST_REQUISITE_SECTION_TABLE3 SYSRES_CONST_REQUISITE_SECTION_TABLE4 SYSRES_CONST_REQUISITE_SECTION_TABLE5 SYSRES_CONST_REQUISITE_SECTION_TABLE6 SYSRES_CONST_REQUISITE_SECTION_TABLE7 SYSRES_CONST_REQUISITE_SECTION_TABLE8 SYSRES_CONST_REQUISITE_SECTION_TABLE9 SYSRES_CONST_REQUISITES_PSEUDOREFERENCE_REQUISITE_NUMBER_REQUISITE_CODE SYSRES_CONST_RIGHT_ALIGNMENT_CODE SYSRES_CONST_ROLES_REFERENCE_CODE SYSRES_CONST_ROUTE_STEP_AFTER_RUS SYSRES_CONST_ROUTE_STEP_AND_CONDITION_RUS SYSRES_CONST_ROUTE_STEP_OR_CONDITION_RUS SYSRES_CONST_ROUTE_TYPE_COMPLEX SYSRES_CONST_ROUTE_TYPE_PARALLEL SYSRES_CONST_ROUTE_TYPE_SERIAL SYSRES_CONST_SBDATASETDESC_NEGATIVE_VALUE SYSRES_CONST_SBDATASETDESC_POSITIVE_VALUE SYSRES_CONST_SBVIEWSDESC_POSITIVE_VALUE SYSRES_CONST_SCRIPT_BLOCK_DESCRIPTION SYSRES_CONST_SEARCH_BY_TEXT_REQUISITE_CODE SYSRES_CONST_SEARCHES_COMPONENT_CONTENT SYSRES_CONST_SEARCHES_CRITERIA_ACTION_NAME SYSRES_CONST_SEARCHES_EDOC_CONTENT SYSRES_CONST_SEARCHES_FOLDER_CONTENT SYSRES_CONST_SEARCHES_JOB_CONTENT SYSRES_CONST_SEARCHES_REFERENCE_CODE SYSRES_CONST_SEARCHES_TASK_CONTENT SYSRES_CONST_SECOND_CHAR SYSRES_CONST_SECTION_REQUISITE_ACTIONS_VALUE SYSRES_CONST_SECTION_REQUISITE_CARD_VALUE SYSRES_CONST_SECTION_REQUISITE_CODE SYSRES_CONST_SECTION_REQUISITE_DETAIL_1_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_2_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_3_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_4_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_5_VALUE SYSRES_CONST_SECTION_REQUISITE_DETAIL_6_VALUE SYSRES_CONST_SELECT_REFERENCE_MODE_NAME SYSRES_CONST_SELECT_TYPE_SELECTABLE SYSRES_CONST_SELECT_TYPE_SELECTABLE_ONLY_CHILD SYSRES_CONST_SELECT_TYPE_SELECTABLE_WITH_CHILD SYSRES_CONST_SELECT_TYPE_UNSLECTABLE SYSRES_CONST_SERVER_TYPE_MAIN SYSRES_CONST_SERVICE_USER_CATEGORY_FIELD_VALUE SYSRES_CONST_SETTINGS_USER_REQUISITE_CODE SYSRES_CONST_SIGNATURE_AND_ENCODE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SIGNATURE_CERTIFICATE_TYPE_CODE SYSRES_CONST_SINGULAR_TITLE_REQUISITE_CODE SYSRES_CONST_SQL_SERVER_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_SQL_SERVER_ENCODE_AUTHENTIFICATION_FLAG_VALUE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_CODE SYSRES_CONST_STANDART_ROUTE_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_STANDART_ROUTES_GROUPS_REFERENCE_CODE SYSRES_CONST_STATE_REQ_NAME SYSRES_CONST_STATE_REQUISITE_ACTIVE_VALUE SYSRES_CONST_STATE_REQUISITE_CLOSED_VALUE SYSRES_CONST_STATE_REQUISITE_CODE SYSRES_CONST_STATIC_ROLE_TYPE_CODE SYSRES_CONST_STATUS_PLAN_DEFAULT_VALUE SYSRES_CONST_STATUS_VALUE_AUTOCLEANING SYSRES_CONST_STATUS_VALUE_BLUE_SQUARE SYSRES_CONST_STATUS_VALUE_COMPLETE SYSRES_CONST_STATUS_VALUE_GREEN_SQUARE SYSRES_CONST_STATUS_VALUE_ORANGE_SQUARE SYSRES_CONST_STATUS_VALUE_PURPLE_SQUARE SYSRES_CONST_STATUS_VALUE_RED_SQUARE SYSRES_CONST_STATUS_VALUE_SUSPEND SYSRES_CONST_STATUS_VALUE_YELLOW_SQUARE SYSRES_CONST_STDROUTE_SHOW_TO_USERS_REQUISITE_CODE SYSRES_CONST_STORAGE_TYPE_FILE SYSRES_CONST_STORAGE_TYPE_SQL_SERVER SYSRES_CONST_STR_REQUISITE SYSRES_CONST_STRIKEOUT_LIFE_CYCLE_STAGE_DRAW_STYLE SYSRES_CONST_STRING_FORMAT_LEFT_ALIGN_CHAR SYSRES_CONST_STRING_FORMAT_RIGHT_ALIGN_CHAR SYSRES_CONST_STRING_REQUISITE_CODE SYSRES_CONST_STRING_REQUISITE_TYPE SYSRES_CONST_STRING_TYPE_CHAR SYSRES_CONST_SUBSTITUTES_PSEUDOREFERENCE_CODE SYSRES_CONST_SUBTASK_BLOCK_DESCRIPTION SYSRES_CONST_SYSTEM_SETTING_CURRENT_USER_PARAM_VALUE SYSRES_CONST_SYSTEM_SETTING_EMPTY_VALUE_PARAM_VALUE SYSRES_CONST_SYSTEM_VERSION_COMMENT SYSRES_CONST_TASK_ACCESS_TYPE_ALL SYSRES_CONST_TASK_ACCESS_TYPE_ALL_MEMBERS SYSRES_CONST_TASK_ACCESS_TYPE_MANUAL SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION SYSRES_CONST_TASK_ENCODE_TYPE_CERTIFICATION_AND_PASSWORD SYSRES_CONST_TASK_ENCODE_TYPE_NONE SYSRES_CONST_TASK_ENCODE_TYPE_PASSWORD SYSRES_CONST_TASK_ROUTE_ALL_CONDITION SYSRES_CONST_TASK_ROUTE_AND_CONDITION SYSRES_CONST_TASK_ROUTE_OR_CONDITION SYSRES_CONST_TASK_STATE_ABORTED SYSRES_CONST_TASK_STATE_COMPLETE SYSRES_CONST_TASK_STATE_CONTINUED SYSRES_CONST_TASK_STATE_CONTROL SYSRES_CONST_TASK_STATE_INIT SYSRES_CONST_TASK_STATE_WORKING SYSRES_CONST_TASK_TITLE SYSRES_CONST_TASK_TYPES_GROUPS_REFERENCE_CODE SYSRES_CONST_TASK_TYPES_REFERENCE_CODE SYSRES_CONST_TEMPLATES_REFERENCE_CODE SYSRES_CONST_TEST_DATE_REQUISITE_NAME SYSRES_CONST_TEST_DEV_DATABASE_NAME SYSRES_CONST_TEST_DEV_SYSTEM_CODE SYSRES_CONST_TEST_EDMS_DATABASE_NAME SYSRES_CONST_TEST_EDMS_MAIN_CODE SYSRES_CONST_TEST_EDMS_MAIN_DB_NAME SYSRES_CONST_TEST_EDMS_SECOND_CODE SYSRES_CONST_TEST_EDMS_SECOND_DB_NAME SYSRES_CONST_TEST_EDMS_SYSTEM_CODE SYSRES_CONST_TEST_NUMERIC_REQUISITE_NAME SYSRES_CONST_TEXT_REQUISITE SYSRES_CONST_TEXT_REQUISITE_CODE SYSRES_CONST_TEXT_REQUISITE_TYPE SYSRES_CONST_TEXT_TYPE_CHAR SYSRES_CONST_TYPE_CODE_REQUISITE_CODE SYSRES_CONST_TYPE_REQUISITE_CODE SYSRES_CONST_UNDEFINED_LIFE_CYCLE_STAGE_FONT_COLOR SYSRES_CONST_UNITS_SECTION_ID_REQUISITE_CODE SYSRES_CONST_UNITS_SECTION_REQUISITE_CODE SYSRES_CONST_UNOPERATING_RECORD_FLAG_VALUE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_CODE SYSRES_CONST_UNSTORED_DATA_REQUISITE_NAME SYSRES_CONST_USE_ACCESS_TYPE_CODE SYSRES_CONST_USE_ACCESS_TYPE_NAME SYSRES_CONST_USER_ACCOUNT_TYPE_VALUE_CODE SYSRES_CONST_USER_ADDITIONAL_INFORMATION_REQUISITE_CODE SYSRES_CONST_USER_AND_GROUP_ID_FROM_PSEUDOREFERENCE_REQUISITE_CODE SYSRES_CONST_USER_CATEGORY_NORMAL SYSRES_CONST_USER_CERTIFICATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_STATE_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_SUBJECT_NAME_REQUISITE_CODE SYSRES_CONST_USER_CERTIFICATE_THUMBPRINT_REQUISITE_CODE SYSRES_CONST_USER_COMMON_CATEGORY SYSRES_CONST_USER_COMMON_CATEGORY_CODE SYSRES_CONST_USER_FULL_NAME_REQUISITE_CODE SYSRES_CONST_USER_GROUP_TYPE_REQUISITE_CODE SYSRES_CONST_USER_LOGIN_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USER_REMOTE_SYSTEM_REQUISITE_CODE SYSRES_CONST_USER_RIGHTS_T_REQUISITE_CODE SYSRES_CONST_USER_SERVER_NAME_REQUISITE_CODE SYSRES_CONST_USER_SERVICE_CATEGORY SYSRES_CONST_USER_SERVICE_CATEGORY_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_CODE SYSRES_CONST_USER_STATUS_ADMINISTRATOR_NAME SYSRES_CONST_USER_STATUS_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_DEVELOPER_NAME SYSRES_CONST_USER_STATUS_DISABLED_CODE SYSRES_CONST_USER_STATUS_DISABLED_NAME SYSRES_CONST_USER_STATUS_SYSTEM_DEVELOPER_CODE SYSRES_CONST_USER_STATUS_USER_CODE SYSRES_CONST_USER_STATUS_USER_NAME SYSRES_CONST_USER_STATUS_USER_NAME_DEPRECATED SYSRES_CONST_USER_TYPE_FIELD_VALUE_USER SYSRES_CONST_USER_TYPE_REQUISITE_CODE SYSRES_CONST_USERS_CONTROLLER_REQUISITE_CODE SYSRES_CONST_USERS_IS_MAIN_SERVER_REQUISITE_CODE SYSRES_CONST_USERS_REFERENCE_CODE SYSRES_CONST_USERS_REGISTRATION_CERTIFICATES_ACTION_NAME SYSRES_CONST_USERS_REQUISITE_CODE SYSRES_CONST_USERS_SYSTEM_REQUISITE_CODE SYSRES_CONST_USERS_USER_ACCESS_RIGHTS_TYPR_REQUISITE_CODE SYSRES_CONST_USERS_USER_AUTHENTICATION_REQUISITE_CODE SYSRES_CONST_USERS_USER_COMPONENT_REQUISITE_CODE SYSRES_CONST_USERS_USER_GROUP_REQUISITE_CODE SYSRES_CONST_USERS_VIEW_CERTIFICATES_ACTION_NAME SYSRES_CONST_VIEW_DEFAULT_CODE SYSRES_CONST_VIEW_DEFAULT_NAME SYSRES_CONST_VIEWER_REQUISITE_CODE SYSRES_CONST_WAITING_BLOCK_DESCRIPTION SYSRES_CONST_WIZARD_FORM_LABEL_TEST_STRING SYSRES_CONST_WIZARD_QUERY_PARAM_HEIGHT_ETALON_STRING SYSRES_CONST_WIZARD_REFERENCE_COMMENT_REQUISITE_CODE SYSRES_CONST_WORK_RULES_DESCRIPTION_REQUISITE_CODE SYSRES_CONST_WORK_TIME_CALENDAR_REFERENCE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE SYSRES_CONST_WORK_WORKFLOW_HARD_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORK_WORKFLOW_SOFT_ROUTE_TYPE_VALUE_CODE_RUS SYSRES_CONST_WORKFLOW_ROUTE_TYPR_HARD SYSRES_CONST_WORKFLOW_ROUTE_TYPR_SOFT SYSRES_CONST_XML_ENCODING SYSRES_CONST_XREC_STAT_REQUISITE_CODE SYSRES_CONST_XRECID_FIELD_NAME SYSRES_CONST_YES SYSRES_CONST_YES_NO_2_REQUISITE_CODE SYSRES_CONST_YES_NO_REQUISITE_CODE SYSRES_CONST_YES_NO_T_REF_TYPE_REQUISITE_CODE SYSRES_CONST_YES_PICK_VALUE SYSRES_CONST_YES_VALUE CR FALSE nil NO_VALUE NULL TAB TRUE YES_VALUE ADMINISTRATORS_GROUP_NAME CUSTOMIZERS_GROUP_NAME DEVELOPERS_GROUP_NAME SERVICE_USERS_GROUP_NAME DECISION_BLOCK_FIRST_OPERAND_PROPERTY DECISION_BLOCK_NAME_PROPERTY DECISION_BLOCK_OPERATION_PROPERTY DECISION_BLOCK_RESULT_TYPE_PROPERTY DECISION_BLOCK_SECOND_OPERAND_PROPERTY ANY_FILE_EXTENTION COMPRESSED_DOCUMENT_EXTENSION EXTENDED_DOCUMENT_EXTENSION SHORT_COMPRESSED_DOCUMENT_EXTENSION SHORT_EXTENDED_DOCUMENT_EXTENSION JOB_BLOCK_ABORT_DEADLINE_PROPERTY JOB_BLOCK_AFTER_FINISH_EVENT JOB_BLOCK_AFTER_QUERY_PARAMETERS_EVENT JOB_BLOCK_ATTACHMENT_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY JOB_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY JOB_BLOCK_BEFORE_QUERY_PARAMETERS_EVENT JOB_BLOCK_BEFORE_START_EVENT JOB_BLOCK_CREATED_JOBS_PROPERTY JOB_BLOCK_DEADLINE_PROPERTY JOB_BLOCK_EXECUTION_RESULTS_PROPERTY JOB_BLOCK_IS_PARALLEL_PROPERTY JOB_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY JOB_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY JOB_BLOCK_JOB_TEXT_PROPERTY JOB_BLOCK_NAME_PROPERTY JOB_BLOCK_NEED_SIGN_ON_PERFORM_PROPERTY JOB_BLOCK_PERFORMER_PROPERTY JOB_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY JOB_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY JOB_BLOCK_SUBJECT_PROPERTY ENGLISH_LANGUAGE_CODE RUSSIAN_LANGUAGE_CODE smHidden smMaximized smMinimized smNormal wmNo wmYes COMPONENT_TOKEN_LINK_KIND DOCUMENT_LINK_KIND EDOCUMENT_LINK_KIND FOLDER_LINK_KIND JOB_LINK_KIND REFERENCE_LINK_KIND TASK_LINK_KIND COMPONENT_TOKEN_LOCK_TYPE EDOCUMENT_VERSION_LOCK_TYPE MONITOR_BLOCK_AFTER_FINISH_EVENT MONITOR_BLOCK_BEFORE_START_EVENT MONITOR_BLOCK_DEADLINE_PROPERTY MONITOR_BLOCK_INTERVAL_PROPERTY MONITOR_BLOCK_INTERVAL_TYPE_PROPERTY MONITOR_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY MONITOR_BLOCK_NAME_PROPERTY MONITOR_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY MONITOR_BLOCK_SEARCH_SCRIPT_PROPERTY NOTICE_BLOCK_AFTER_FINISH_EVENT NOTICE_BLOCK_ATTACHMENT_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY NOTICE_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY NOTICE_BLOCK_BEFORE_START_EVENT NOTICE_BLOCK_CREATED_NOTICES_PROPERTY NOTICE_BLOCK_DEADLINE_PROPERTY NOTICE_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY NOTICE_BLOCK_NAME_PROPERTY NOTICE_BLOCK_NOTICE_TEXT_PROPERTY NOTICE_BLOCK_PERFORMER_PROPERTY NOTICE_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY NOTICE_BLOCK_SUBJECT_PROPERTY dseAfterCancel dseAfterClose dseAfterDelete dseAfterDeleteOutOfTransaction dseAfterInsert dseAfterOpen dseAfterScroll dseAfterUpdate dseAfterUpdateOutOfTransaction dseBeforeCancel dseBeforeClose dseBeforeDelete dseBeforeDetailUpdate dseBeforeInsert dseBeforeOpen dseBeforeUpdate dseOnAnyRequisiteChange dseOnCloseRecord dseOnDeleteError dseOnOpenRecord dseOnPrepareUpdate dseOnUpdateError dseOnUpdateRatifiedRecord dseOnValidDelete dseOnValidUpdate reOnChange reOnChangeValues SELECTION_BEGIN_ROUTE_EVENT SELECTION_END_ROUTE_EVENT CURRENT_PERIOD_IS_REQUIRED PREVIOUS_CARD_TYPE_NAME SHOW_RECORD_PROPERTIES_FORM ACCESS_RIGHTS_SETTING_DIALOG_CODE ADMINISTRATOR_USER_CODE ANALYTIC_REPORT_TYPE asrtHideLocal asrtHideRemote CALCULATED_ROLE_TYPE_CODE COMPONENTS_REFERENCE_DEVELOPER_VIEW_CODE DCTS_TEST_PROTOCOLS_FOLDER_PATH E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED E_EDOC_VERSION_ALREADY_APPROVINGLY_SIGNED_BY_USER E_EDOC_VERSION_ALREDY_SIGNED E_EDOC_VERSION_ALREDY_SIGNED_BY_USER EDOC_TYPES_CODE_REQUISITE_FIELD_NAME EDOCUMENTS_ALIAS_NAME FILES_FOLDER_PATH FILTER_OPERANDS_DELIMITER FILTER_OPERATIONS_DELIMITER FORMCARD_NAME FORMLIST_NAME GET_EXTENDED_DOCUMENT_EXTENSION_CREATION_MODE GET_EXTENDED_DOCUMENT_EXTENSION_IMPORT_MODE INTEGRATED_REPORT_TYPE IS_BUILDER_APPLICATION_ROLE IS_BUILDER_APPLICATION_ROLE2 IS_BUILDER_USERS ISBSYSDEV LOG_FOLDER_PATH mbCancel mbNo mbNoToAll mbOK mbYes mbYesToAll MEMORY_DATASET_DESRIPTIONS_FILENAME mrNo mrNoToAll mrYes mrYesToAll MULTIPLE_SELECT_DIALOG_CODE NONOPERATING_RECORD_FLAG_FEMININE NONOPERATING_RECORD_FLAG_MASCULINE OPERATING_RECORD_FLAG_FEMININE OPERATING_RECORD_FLAG_MASCULINE PROFILING_SETTINGS_COMMON_SETTINGS_CODE_VALUE PROGRAM_INITIATED_LOOKUP_ACTION ratDelete ratEdit ratInsert REPORT_TYPE REQUIRED_PICK_VALUES_VARIABLE rmCard rmList SBRTE_PROGID_DEV SBRTE_PROGID_RELEASE STATIC_ROLE_TYPE_CODE SUPPRESS_EMPTY_TEMPLATE_CREATION SYSTEM_USER_CODE UPDATE_DIALOG_DATASET USED_IN_OBJECT_HINT_PARAM USER_INITIATED_LOOKUP_ACTION USER_NAME_FORMAT USER_SELECTION_RESTRICTIONS WORKFLOW_TEST_PROTOCOLS_FOLDER_PATH ELS_SUBTYPE_CONTROL_NAME ELS_FOLDER_KIND_CONTROL_NAME REPEAT_PROCESS_CURRENT_OBJECT_EXCEPTION_NAME PRIVILEGE_COMPONENT_FULL_ACCESS PRIVILEGE_DEVELOPMENT_EXPORT PRIVILEGE_DEVELOPMENT_IMPORT PRIVILEGE_DOCUMENT_DELETE PRIVILEGE_ESD PRIVILEGE_FOLDER_DELETE PRIVILEGE_MANAGE_ACCESS_RIGHTS PRIVILEGE_MANAGE_REPLICATION PRIVILEGE_MANAGE_SESSION_SERVER PRIVILEGE_OBJECT_FULL_ACCESS PRIVILEGE_OBJECT_VIEW PRIVILEGE_RESERVE_LICENSE PRIVILEGE_SYSTEM_CUSTOMIZE PRIVILEGE_SYSTEM_DEVELOP PRIVILEGE_SYSTEM_INSTALL PRIVILEGE_TASK_DELETE PRIVILEGE_USER_PLUGIN_SETTINGS_CUSTOMIZE PRIVILEGES_PSEUDOREFERENCE_CODE ACCESS_TYPES_PSEUDOREFERENCE_CODE ALL_AVAILABLE_COMPONENTS_PSEUDOREFERENCE_CODE ALL_AVAILABLE_PRIVILEGES_PSEUDOREFERENCE_CODE ALL_REPLICATE_COMPONENTS_PSEUDOREFERENCE_CODE AVAILABLE_DEVELOPERS_COMPONENTS_PSEUDOREFERENCE_CODE COMPONENTS_PSEUDOREFERENCE_CODE FILTRATER_SETTINGS_CONFLICTS_PSEUDOREFERENCE_CODE GROUPS_PSEUDOREFERENCE_CODE RECEIVE_PROTOCOL_PSEUDOREFERENCE_CODE REFERENCE_REQUISITE_PSEUDOREFERENCE_CODE REFERENCE_REQUISITES_PSEUDOREFERENCE_CODE REFTYPES_PSEUDOREFERENCE_CODE REPLICATION_SEANCES_DIARY_PSEUDOREFERENCE_CODE SEND_PROTOCOL_PSEUDOREFERENCE_CODE SUBSTITUTES_PSEUDOREFERENCE_CODE SYSTEM_SETTINGS_PSEUDOREFERENCE_CODE UNITS_PSEUDOREFERENCE_CODE USERS_PSEUDOREFERENCE_CODE VIEWERS_PSEUDOREFERENCE_CODE CERTIFICATE_TYPE_ENCRYPT CERTIFICATE_TYPE_SIGN CERTIFICATE_TYPE_SIGN_AND_ENCRYPT STORAGE_TYPE_FILE STORAGE_TYPE_NAS_CIFS STORAGE_TYPE_SAPERION STORAGE_TYPE_SQL_SERVER COMPTYPE2_REQUISITE_DOCUMENTS_VALUE COMPTYPE2_REQUISITE_TASKS_VALUE COMPTYPE2_REQUISITE_FOLDERS_VALUE COMPTYPE2_REQUISITE_REFERENCES_VALUE SYSREQ_CODE SYSREQ_COMPTYPE2 SYSREQ_CONST_AVAILABLE_FOR_WEB SYSREQ_CONST_COMMON_CODE SYSREQ_CONST_COMMON_VALUE SYSREQ_CONST_FIRM_CODE SYSREQ_CONST_FIRM_STATUS SYSREQ_CONST_FIRM_VALUE SYSREQ_CONST_SERVER_STATUS SYSREQ_CONTENTS SYSREQ_DATE_OPEN SYSREQ_DATE_CLOSE SYSREQ_DESCRIPTION SYSREQ_DESCRIPTION_LOCALIZE_ID SYSREQ_DOUBLE SYSREQ_EDOC_ACCESS_TYPE SYSREQ_EDOC_AUTHOR SYSREQ_EDOC_CREATED SYSREQ_EDOC_DELEGATE_RIGHTS_REQUISITE_CODE SYSREQ_EDOC_EDITOR SYSREQ_EDOC_ENCODE_TYPE SYSREQ_EDOC_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_EXPORT_DATE SYSREQ_EDOC_EXPORTER SYSREQ_EDOC_KIND SYSREQ_EDOC_LIFE_STAGE_NAME SYSREQ_EDOC_LOCKED_FOR_SERVER_CODE SYSREQ_EDOC_MODIFIED SYSREQ_EDOC_NAME SYSREQ_EDOC_NOTE SYSREQ_EDOC_QUALIFIED_ID SYSREQ_EDOC_SESSION_KEY SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_NAME SYSREQ_EDOC_SESSION_KEY_ENCRYPTION_PLUGIN_VERSION SYSREQ_EDOC_SIGNATURE_TYPE SYSREQ_EDOC_SIGNED SYSREQ_EDOC_STORAGE SYSREQ_EDOC_STORAGES_ARCHIVE_STORAGE SYSREQ_EDOC_STORAGES_CHECK_RIGHTS SYSREQ_EDOC_STORAGES_COMPUTER_NAME SYSREQ_EDOC_STORAGES_EDIT_IN_STORAGE SYSREQ_EDOC_STORAGES_EXECUTIVE_STORAGE SYSREQ_EDOC_STORAGES_FUNCTION SYSREQ_EDOC_STORAGES_INITIALIZED SYSREQ_EDOC_STORAGES_LOCAL_PATH SYSREQ_EDOC_STORAGES_SAPERION_DATABASE_NAME SYSREQ_EDOC_STORAGES_SEARCH_BY_TEXT SYSREQ_EDOC_STORAGES_SERVER_NAME SYSREQ_EDOC_STORAGES_SHARED_SOURCE_NAME SYSREQ_EDOC_STORAGES_TYPE SYSREQ_EDOC_TEXT_MODIFIED SYSREQ_EDOC_TYPE_ACT_CODE SYSREQ_EDOC_TYPE_ACT_DESCRIPTION SYSREQ_EDOC_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE SYSREQ_EDOC_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_EDOC_TYPE_ACT_SECTION SYSREQ_EDOC_TYPE_ADD_PARAMS SYSREQ_EDOC_TYPE_COMMENT SYSREQ_EDOC_TYPE_EVENT_TEXT SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR SYSREQ_EDOC_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_EDOC_TYPE_NAME_LOCALIZE_ID SYSREQ_EDOC_TYPE_NUMERATION_METHOD SYSREQ_EDOC_TYPE_PSEUDO_REQUISITE_CODE SYSREQ_EDOC_TYPE_REQ_CODE SYSREQ_EDOC_TYPE_REQ_DESCRIPTION SYSREQ_EDOC_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_EDOC_TYPE_REQ_IS_LEADING SYSREQ_EDOC_TYPE_REQ_IS_REQUIRED SYSREQ_EDOC_TYPE_REQ_NUMBER SYSREQ_EDOC_TYPE_REQ_ON_CHANGE SYSREQ_EDOC_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_EDOC_TYPE_REQ_ON_SELECT SYSREQ_EDOC_TYPE_REQ_ON_SELECT_KIND SYSREQ_EDOC_TYPE_REQ_SECTION SYSREQ_EDOC_TYPE_VIEW_CARD SYSREQ_EDOC_TYPE_VIEW_CODE SYSREQ_EDOC_TYPE_VIEW_COMMENT SYSREQ_EDOC_TYPE_VIEW_IS_MAIN SYSREQ_EDOC_TYPE_VIEW_NAME SYSREQ_EDOC_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_EDOC_VERSION_AUTHOR SYSREQ_EDOC_VERSION_CRC SYSREQ_EDOC_VERSION_DATA SYSREQ_EDOC_VERSION_EDITOR SYSREQ_EDOC_VERSION_EXPORT_DATE SYSREQ_EDOC_VERSION_EXPORTER SYSREQ_EDOC_VERSION_HIDDEN SYSREQ_EDOC_VERSION_LIFE_STAGE SYSREQ_EDOC_VERSION_MODIFIED SYSREQ_EDOC_VERSION_NOTE SYSREQ_EDOC_VERSION_SIGNATURE_TYPE SYSREQ_EDOC_VERSION_SIGNED SYSREQ_EDOC_VERSION_SIZE SYSREQ_EDOC_VERSION_SOURCE SYSREQ_EDOC_VERSION_TEXT_MODIFIED SYSREQ_EDOCKIND_DEFAULT_VERSION_STATE_CODE SYSREQ_FOLDER_KIND SYSREQ_FUNC_CATEGORY SYSREQ_FUNC_COMMENT SYSREQ_FUNC_GROUP SYSREQ_FUNC_GROUP_COMMENT SYSREQ_FUNC_GROUP_NUMBER SYSREQ_FUNC_HELP SYSREQ_FUNC_PARAM_DEF_VALUE SYSREQ_FUNC_PARAM_IDENT SYSREQ_FUNC_PARAM_NUMBER SYSREQ_FUNC_PARAM_TYPE SYSREQ_FUNC_TEXT SYSREQ_GROUP_CATEGORY SYSREQ_ID SYSREQ_LAST_UPDATE SYSREQ_LEADER_REFERENCE SYSREQ_LINE_NUMBER SYSREQ_MAIN_RECORD_ID SYSREQ_NAME SYSREQ_NAME_LOCALIZE_ID SYSREQ_NOTE SYSREQ_ORIGINAL_RECORD SYSREQ_OUR_FIRM SYSREQ_PROFILING_SETTINGS_BATCH_LOGING SYSREQ_PROFILING_SETTINGS_BATCH_SIZE SYSREQ_PROFILING_SETTINGS_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_SQL_PROFILING_ENABLED SYSREQ_PROFILING_SETTINGS_START_LOGGED SYSREQ_RECORD_STATUS SYSREQ_REF_REQ_FIELD_NAME SYSREQ_REF_REQ_FORMAT SYSREQ_REF_REQ_GENERATED SYSREQ_REF_REQ_LENGTH SYSREQ_REF_REQ_PRECISION SYSREQ_REF_REQ_REFERENCE SYSREQ_REF_REQ_SECTION SYSREQ_REF_REQ_STORED SYSREQ_REF_REQ_TOKENS SYSREQ_REF_REQ_TYPE SYSREQ_REF_REQ_VIEW SYSREQ_REF_TYPE_ACT_CODE SYSREQ_REF_TYPE_ACT_DESCRIPTION SYSREQ_REF_TYPE_ACT_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_ACT_ON_EXECUTE SYSREQ_REF_TYPE_ACT_ON_EXECUTE_EXISTS SYSREQ_REF_TYPE_ACT_SECTION SYSREQ_REF_TYPE_ADD_PARAMS SYSREQ_REF_TYPE_COMMENT SYSREQ_REF_TYPE_COMMON_SETTINGS SYSREQ_REF_TYPE_DISPLAY_REQUISITE_NAME SYSREQ_REF_TYPE_EVENT_TEXT SYSREQ_REF_TYPE_MAIN_LEADING_REF SYSREQ_REF_TYPE_NAME_IN_SINGULAR SYSREQ_REF_TYPE_NAME_IN_SINGULAR_LOCALIZE_ID SYSREQ_REF_TYPE_NAME_LOCALIZE_ID SYSREQ_REF_TYPE_NUMERATION_METHOD SYSREQ_REF_TYPE_REQ_CODE SYSREQ_REF_TYPE_REQ_DESCRIPTION SYSREQ_REF_TYPE_REQ_DESCRIPTION_LOCALIZE_ID SYSREQ_REF_TYPE_REQ_IS_CONTROL SYSREQ_REF_TYPE_REQ_IS_FILTER SYSREQ_REF_TYPE_REQ_IS_LEADING SYSREQ_REF_TYPE_REQ_IS_REQUIRED SYSREQ_REF_TYPE_REQ_NUMBER SYSREQ_REF_TYPE_REQ_ON_CHANGE SYSREQ_REF_TYPE_REQ_ON_CHANGE_EXISTS SYSREQ_REF_TYPE_REQ_ON_SELECT SYSREQ_REF_TYPE_REQ_ON_SELECT_KIND SYSREQ_REF_TYPE_REQ_SECTION SYSREQ_REF_TYPE_VIEW_CARD SYSREQ_REF_TYPE_VIEW_CODE SYSREQ_REF_TYPE_VIEW_COMMENT SYSREQ_REF_TYPE_VIEW_IS_MAIN SYSREQ_REF_TYPE_VIEW_NAME SYSREQ_REF_TYPE_VIEW_NAME_LOCALIZE_ID SYSREQ_REFERENCE_TYPE_ID SYSREQ_STATE SYSREQ_STATЕ SYSREQ_SYSTEM_SETTINGS_VALUE SYSREQ_TYPE SYSREQ_UNIT SYSREQ_UNIT_ID SYSREQ_USER_GROUPS_GROUP_FULL_NAME SYSREQ_USER_GROUPS_GROUP_NAME SYSREQ_USER_GROUPS_GROUP_SERVER_NAME SYSREQ_USERS_ACCESS_RIGHTS SYSREQ_USERS_AUTHENTICATION SYSREQ_USERS_CATEGORY SYSREQ_USERS_COMPONENT SYSREQ_USERS_COMPONENT_USER_IS_PUBLIC SYSREQ_USERS_DOMAIN SYSREQ_USERS_FULL_USER_NAME SYSREQ_USERS_GROUP SYSREQ_USERS_IS_MAIN_SERVER SYSREQ_USERS_LOGIN SYSREQ_USERS_REFERENCE_USER_IS_PUBLIC SYSREQ_USERS_STATUS SYSREQ_USERS_USER_CERTIFICATE SYSREQ_USERS_USER_CERTIFICATE_INFO SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_NAME SYSREQ_USERS_USER_CERTIFICATE_PLUGIN_VERSION SYSREQ_USERS_USER_CERTIFICATE_STATE SYSREQ_USERS_USER_CERTIFICATE_SUBJECT_NAME SYSREQ_USERS_USER_CERTIFICATE_THUMBPRINT SYSREQ_USERS_USER_DEFAULT_CERTIFICATE SYSREQ_USERS_USER_DESCRIPTION SYSREQ_USERS_USER_GLOBAL_NAME SYSREQ_USERS_USER_LOGIN SYSREQ_USERS_USER_MAIN_SERVER SYSREQ_USERS_USER_TYPE SYSREQ_WORK_RULES_FOLDER_ID RESULT_VAR_NAME RESULT_VAR_NAME_ENG AUTO_NUMERATION_RULE_ID CANT_CHANGE_ID_REQUISITE_RULE_ID CANT_CHANGE_OURFIRM_REQUISITE_RULE_ID CHECK_CHANGING_REFERENCE_RECORD_USE_RULE_ID CHECK_CODE_REQUISITE_RULE_ID CHECK_DELETING_REFERENCE_RECORD_USE_RULE_ID CHECK_FILTRATER_CHANGES_RULE_ID CHECK_RECORD_INTERVAL_RULE_ID CHECK_REFERENCE_INTERVAL_RULE_ID CHECK_REQUIRED_DATA_FULLNESS_RULE_ID CHECK_REQUIRED_REQUISITES_FULLNESS_RULE_ID MAKE_RECORD_UNRATIFIED_RULE_ID RESTORE_AUTO_NUMERATION_RULE_ID SET_FIRM_CONTEXT_FROM_RECORD_RULE_ID SET_FIRST_RECORD_IN_LIST_FORM_RULE_ID SET_IDSPS_VALUE_RULE_ID SET_NEXT_CODE_VALUE_RULE_ID SET_OURFIRM_BOUNDS_RULE_ID SET_OURFIRM_REQUISITE_RULE_ID SCRIPT_BLOCK_AFTER_FINISH_EVENT SCRIPT_BLOCK_BEFORE_START_EVENT SCRIPT_BLOCK_EXECUTION_RESULTS_PROPERTY SCRIPT_BLOCK_NAME_PROPERTY SCRIPT_BLOCK_SCRIPT_PROPERTY SUBTASK_BLOCK_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_AFTER_FINISH_EVENT SUBTASK_BLOCK_ASSIGN_PARAMS_EVENT SUBTASK_BLOCK_ATTACHMENTS_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_GROUP_PROPERTY SUBTASK_BLOCK_ATTACHMENTS_RIGHTS_TYPE_PROPERTY SUBTASK_BLOCK_BEFORE_START_EVENT SUBTASK_BLOCK_CREATED_TASK_PROPERTY SUBTASK_BLOCK_CREATION_EVENT SUBTASK_BLOCK_DEADLINE_PROPERTY SUBTASK_BLOCK_IMPORTANCE_PROPERTY SUBTASK_BLOCK_INITIATOR_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_ABORT_DEADLINE_PROPERTY SUBTASK_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY SUBTASK_BLOCK_JOBS_TYPE_PROPERTY SUBTASK_BLOCK_NAME_PROPERTY SUBTASK_BLOCK_PARALLEL_ROUTE_PROPERTY SUBTASK_BLOCK_PERFORMERS_PROPERTY SUBTASK_BLOCK_RELATIVE_ABORT_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SUBTASK_BLOCK_REQUIRE_SIGN_PROPERTY SUBTASK_BLOCK_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_START_EVENT SUBTASK_BLOCK_STEP_CONTROL_PROPERTY SUBTASK_BLOCK_SUBJECT_PROPERTY SUBTASK_BLOCK_TASK_CONTROL_PROPERTY SUBTASK_BLOCK_TEXT_PROPERTY SUBTASK_BLOCK_UNLOCK_ATTACHMENTS_ON_STOP_PROPERTY SUBTASK_BLOCK_USE_STANDARD_ROUTE_PROPERTY SUBTASK_BLOCK_WAIT_FOR_TASK_COMPLETE_PROPERTY SYSCOMP_CONTROL_JOBS SYSCOMP_FOLDERS SYSCOMP_JOBS SYSCOMP_NOTICES SYSCOMP_TASKS SYSDLG_CREATE_EDOCUMENT SYSDLG_CREATE_EDOCUMENT_VERSION SYSDLG_CURRENT_PERIOD SYSDLG_EDIT_FUNCTION_HELP SYSDLG_EDOCUMENT_KINDS_FOR_TEMPLATE SYSDLG_EXPORT_MULTIPLE_EDOCUMENTS SYSDLG_EXPORT_SINGLE_EDOCUMENT SYSDLG_IMPORT_EDOCUMENT SYSDLG_MULTIPLE_SELECT SYSDLG_SETUP_ACCESS_RIGHTS SYSDLG_SETUP_DEFAULT_RIGHTS SYSDLG_SETUP_FILTER_CONDITION SYSDLG_SETUP_SIGN_RIGHTS SYSDLG_SETUP_TASK_OBSERVERS SYSDLG_SETUP_TASK_ROUTE SYSDLG_SETUP_USERS_LIST SYSDLG_SIGN_EDOCUMENT SYSDLG_SIGN_MULTIPLE_EDOCUMENTS SYSREF_ACCESS_RIGHTS_TYPES SYSREF_ADMINISTRATION_HISTORY SYSREF_ALL_AVAILABLE_COMPONENTS SYSREF_ALL_AVAILABLE_PRIVILEGES SYSREF_ALL_REPLICATING_COMPONENTS SYSREF_AVAILABLE_DEVELOPERS_COMPONENTS SYSREF_CALENDAR_EVENTS SYSREF_COMPONENT_TOKEN_HISTORY SYSREF_COMPONENT_TOKENS SYSREF_COMPONENTS SYSREF_CONSTANTS SYSREF_DATA_RECEIVE_PROTOCOL SYSREF_DATA_SEND_PROTOCOL SYSREF_DIALOGS SYSREF_DIALOGS_REQUISITES SYSREF_EDITORS SYSREF_EDOC_CARDS SYSREF_EDOC_TYPES SYSREF_EDOCUMENT_CARD_REQUISITES SYSREF_EDOCUMENT_CARD_TYPES SYSREF_EDOCUMENT_CARD_TYPES_REFERENCE SYSREF_EDOCUMENT_CARDS SYSREF_EDOCUMENT_HISTORY SYSREF_EDOCUMENT_KINDS SYSREF_EDOCUMENT_REQUISITES SYSREF_EDOCUMENT_SIGNATURES SYSREF_EDOCUMENT_TEMPLATES SYSREF_EDOCUMENT_TEXT_STORAGES SYSREF_EDOCUMENT_VIEWS SYSREF_FILTERER_SETUP_CONFLICTS SYSREF_FILTRATER_SETTING_CONFLICTS SYSREF_FOLDER_HISTORY SYSREF_FOLDERS SYSREF_FUNCTION_GROUPS SYSREF_FUNCTION_PARAMS SYSREF_FUNCTIONS SYSREF_JOB_HISTORY SYSREF_LINKS SYSREF_LOCALIZATION_DICTIONARY SYSREF_LOCALIZATION_LANGUAGES SYSREF_MODULES SYSREF_PRIVILEGES SYSREF_RECORD_HISTORY SYSREF_REFERENCE_REQUISITES SYSREF_REFERENCE_TYPE_VIEWS SYSREF_REFERENCE_TYPES SYSREF_REFERENCES SYSREF_REFERENCES_REQUISITES SYSREF_REMOTE_SERVERS SYSREF_REPLICATION_SESSIONS_LOG SYSREF_REPLICATION_SESSIONS_PROTOCOL SYSREF_REPORTS SYSREF_ROLES SYSREF_ROUTE_BLOCK_GROUPS SYSREF_ROUTE_BLOCKS SYSREF_SCRIPTS SYSREF_SEARCHES SYSREF_SERVER_EVENTS SYSREF_SERVER_EVENTS_HISTORY SYSREF_STANDARD_ROUTE_GROUPS SYSREF_STANDARD_ROUTES SYSREF_STATUSES SYSREF_SYSTEM_SETTINGS SYSREF_TASK_HISTORY SYSREF_TASK_KIND_GROUPS SYSREF_TASK_KINDS SYSREF_TASK_RIGHTS SYSREF_TASK_SIGNATURES SYSREF_TASKS SYSREF_UNITS SYSREF_USER_GROUPS SYSREF_USER_GROUPS_REFERENCE SYSREF_USER_SUBSTITUTION SYSREF_USERS SYSREF_USERS_REFERENCE SYSREF_VIEWERS SYSREF_WORKING_TIME_CALENDARS ACCESS_RIGHTS_TABLE_NAME EDMS_ACCESS_TABLE_NAME EDOC_TYPES_TABLE_NAME TEST_DEV_DB_NAME TEST_DEV_SYSTEM_CODE TEST_EDMS_DB_NAME TEST_EDMS_MAIN_CODE TEST_EDMS_MAIN_DB_NAME TEST_EDMS_SECOND_CODE TEST_EDMS_SECOND_DB_NAME TEST_EDMS_SYSTEM_CODE TEST_ISB5_MAIN_CODE TEST_ISB5_SECOND_CODE TEST_SQL_SERVER_2005_NAME TEST_SQL_SERVER_NAME ATTENTION_CAPTION cbsCommandLinks cbsDefault CONFIRMATION_CAPTION ERROR_CAPTION INFORMATION_CAPTION mrCancel mrOk EDOC_VERSION_ACTIVE_STAGE_CODE EDOC_VERSION_DESIGN_STAGE_CODE EDOC_VERSION_OBSOLETE_STAGE_CODE cpDataEnciphermentEnabled cpDigitalSignatureEnabled cpID cpIssuer cpPluginVersion cpSerial cpSubjectName cpSubjSimpleName cpValidFromDate cpValidToDate ISBL_SYNTAX NO_SYNTAX XML_SYNTAX WAIT_BLOCK_AFTER_FINISH_EVENT WAIT_BLOCK_BEFORE_START_EVENT WAIT_BLOCK_DEADLINE_PROPERTY WAIT_BLOCK_IS_RELATIVE_DEADLINE_PROPERTY WAIT_BLOCK_NAME_PROPERTY WAIT_BLOCK_RELATIVE_DEADLINE_TYPE_PROPERTY SYSRES_COMMON SYSRES_CONST SYSRES_MBFUNC SYSRES_SBDATA SYSRES_SBGUI SYSRES_SBINTF SYSRES_SBREFDSC SYSRES_SQLERRORS SYSRES_SYSCOMP atUser atGroup atRole aemEnabledAlways aemDisabledAlways aemEnabledOnBrowse aemEnabledOnEdit aemDisabledOnBrowseEmpty apBegin apEnd alLeft alRight asmNever asmNoButCustomize asmAsLastTime asmYesButCustomize asmAlways cirCommon cirRevoked ctSignature ctEncode ctSignatureEncode clbUnchecked clbChecked clbGrayed ceISB ceAlways ceNever ctDocument ctReference ctScript ctUnknown ctReport ctDialog ctFunction ctFolder ctEDocument ctTask ctJob ctNotice ctControlJob cfInternal cfDisplay ciUnspecified ciWrite ciRead ckFolder ckEDocument ckTask ckJob ckComponentToken ckAny ckReference ckScript ckReport ckDialog ctISBLEditor ctBevel ctButton ctCheckListBox ctComboBox ctComboEdit ctGrid ctDBCheckBox ctDBComboBox ctDBEdit ctDBEllipsis ctDBMemo ctDBNavigator ctDBRadioGroup ctDBStatusLabel ctEdit ctGroupBox ctInplaceHint ctMemo ctPanel ctListBox ctRadioButton ctRichEdit ctTabSheet ctWebBrowser ctImage ctHyperLink ctLabel ctDBMultiEllipsis ctRibbon ctRichView ctInnerPanel ctPanelGroup ctBitButton cctDate cctInteger cctNumeric cctPick cctReference cctString cctText cltInternal cltPrimary cltGUI dseBeforeOpen dseAfterOpen dseBeforeClose dseAfterClose dseOnValidDelete dseBeforeDelete dseAfterDelete dseAfterDeleteOutOfTransaction dseOnDeleteError dseBeforeInsert dseAfterInsert dseOnValidUpdate dseBeforeUpdate dseOnUpdateRatifiedRecord dseAfterUpdate dseAfterUpdateOutOfTransaction dseOnUpdateError dseAfterScroll dseOnOpenRecord dseOnCloseRecord dseBeforeCancel dseAfterCancel dseOnUpdateDeadlockError dseBeforeDetailUpdate dseOnPrepareUpdate dseOnAnyRequisiteChange dssEdit dssInsert dssBrowse dssInActive dftDate dftShortDate dftDateTime dftTimeStamp dotDays dotHours dotMinutes dotSeconds dtkndLocal dtkndUTC arNone arView arEdit arFull ddaView ddaEdit emLock emEdit emSign emExportWithLock emImportWithUnlock emChangeVersionNote emOpenForModify emChangeLifeStage emDelete emCreateVersion emImport emUnlockExportedWithLock emStart emAbort emReInit emMarkAsReaded emMarkAsUnreaded emPerform emAccept emResume emChangeRights emEditRoute emEditObserver emRecoveryFromLocalCopy emChangeWorkAccessType emChangeEncodeTypeToCertificate emChangeEncodeTypeToPassword emChangeEncodeTypeToNone emChangeEncodeTypeToCertificatePassword emChangeStandardRoute emGetText emOpenForView emMoveToStorage emCreateObject emChangeVersionHidden emDeleteVersion emChangeLifeCycleStage emApprovingSign emExport emContinue emLockFromEdit emUnLockForEdit emLockForServer emUnlockFromServer emDelegateAccessRights emReEncode ecotFile ecotProcess eaGet eaCopy eaCreate eaCreateStandardRoute edltAll edltNothing edltQuery essmText essmCard esvtLast esvtLastActive esvtSpecified edsfExecutive edsfArchive edstSQLServer edstFile edvstNone edvstEDocumentVersionCopy edvstFile edvstTemplate edvstScannedFile vsDefault vsDesign vsActive vsObsolete etNone etCertificate etPassword etCertificatePassword ecException ecWarning ecInformation estAll estApprovingOnly evtLast evtLastActive evtQuery fdtString fdtNumeric fdtInteger fdtDate fdtText fdtUnknown fdtWideString fdtLargeInteger ftInbox ftOutbox ftFavorites ftCommonFolder ftUserFolder ftComponents ftQuickLaunch ftShortcuts ftSearch grhAuto grhX1 grhX2 grhX3 hltText hltRTF hltHTML iffBMP iffJPEG iffMultiPageTIFF iffSinglePageTIFF iffTIFF iffPNG im8bGrayscale im24bRGB im1bMonochrome itBMP itJPEG itWMF itPNG ikhInformation ikhWarning ikhError ikhNoIcon icUnknown icScript icFunction icIntegratedReport icAnalyticReport icDataSetEventHandler icActionHandler icFormEventHandler icLookUpEventHandler icRequisiteChangeEventHandler icBeforeSearchEventHandler icRoleCalculation icSelectRouteEventHandler icBlockPropertyCalculation icBlockQueryParamsEventHandler icChangeSearchResultEventHandler icBlockEventHandler icSubTaskInitEventHandler icEDocDataSetEventHandler icEDocLookUpEventHandler icEDocActionHandler icEDocFormEventHandler icEDocRequisiteChangeEventHandler icStructuredConversionRule icStructuredConversionEventBefore icStructuredConversionEventAfter icWizardEventHandler icWizardFinishEventHandler icWizardStepEventHandler icWizardStepFinishEventHandler icWizardActionEnableEventHandler icWizardActionExecuteEventHandler icCreateJobsHandler icCreateNoticesHandler icBeforeLookUpEventHandler icAfterLookUpEventHandler icTaskAbortEventHandler icWorkflowBlockActionHandler icDialogDataSetEventHandler icDialogActionHandler icDialogLookUpEventHandler icDialogRequisiteChangeEventHandler icDialogFormEventHandler icDialogValidCloseEventHandler icBlockFormEventHandler icTaskFormEventHandler icReferenceMethod icEDocMethod icDialogMethod icProcessMessageHandler isShow isHide isByUserSettings jkJob jkNotice jkControlJob jtInner jtLeft jtRight jtFull jtCross lbpAbove lbpBelow lbpLeft lbpRight eltPerConnection eltPerUser sfcUndefined sfcBlack sfcGreen sfcRed sfcBlue sfcOrange sfcLilac sfsItalic sfsStrikeout sfsNormal ldctStandardRoute ldctWizard ldctScript ldctFunction ldctRouteBlock ldctIntegratedReport ldctAnalyticReport ldctReferenceType ldctEDocumentType ldctDialog ldctServerEvents mrcrtNone mrcrtUser mrcrtMaximal mrcrtCustom vtEqual vtGreaterOrEqual vtLessOrEqual vtRange rdYesterday rdToday rdTomorrow rdThisWeek rdThisMonth rdThisYear rdNextMonth rdNextWeek rdLastWeek rdLastMonth rdWindow rdFile rdPrinter rdtString rdtNumeric rdtInteger rdtDate rdtReference rdtAccount rdtText rdtPick rdtUnknown rdtLargeInteger rdtDocument reOnChange reOnChangeValues ttGlobal ttLocal ttUser ttSystem ssmBrowse ssmSelect ssmMultiSelect ssmBrowseModal smSelect smLike smCard stNone stAuthenticating stApproving sctString sctStream sstAnsiSort sstNaturalSort svtEqual svtContain soatString soatNumeric soatInteger soatDatetime soatReferenceRecord soatText soatPick soatBoolean soatEDocument soatAccount soatIntegerCollection soatNumericCollection soatStringCollection soatPickCollection soatDatetimeCollection soatBooleanCollection soatReferenceRecordCollection soatEDocumentCollection soatAccountCollection soatContents soatUnknown tarAbortByUser tarAbortByWorkflowException tvtAllWords tvtExactPhrase tvtAnyWord usNone usCompleted usRedSquare usBlueSquare usYellowSquare usGreenSquare usOrangeSquare usPurpleSquare usFollowUp utUnknown utUser utDeveloper utAdministrator utSystemDeveloper utDisconnected btAnd btDetailAnd btOr btNotOr btOnly vmView vmSelect vmNavigation vsmSingle vsmMultiple vsmMultipleCheck vsmNoSelection wfatPrevious wfatNext wfatCancel wfatFinish wfepUndefined wfepText3 wfepText6 wfepText9 wfepSpinEdit wfepDropDown wfepRadioGroup wfepFlag wfepText12 wfepText15 wfepText18 wfepText21 wfepText24 wfepText27 wfepText30 wfepRadioGroupColumn1 wfepRadioGroupColumn2 wfepRadioGroupColumn3 wfetQueryParameter wfetText wfetDelimiter wfetLabel wptString wptInteger wptNumeric wptBoolean wptDateTime wptPick wptText wptUser wptUserList wptEDocumentInfo wptEDocumentInfoList wptReferenceRecordInfo wptReferenceRecordInfoList wptFolderInfo wptTaskInfo wptContents wptFileName wptDate wsrComplete wsrGoNext wsrGoPrevious wsrCustom wsrCancel wsrGoFinal wstForm wstEDocument wstTaskCard wstReferenceRecordCard wstFinal waAll waPerformers waManual wsbStart wsbFinish wsbNotice wsbStep wsbDecision wsbWait wsbMonitor wsbScript wsbConnector wsbSubTask wsbLifeCycleStage wsbPause wdtInteger wdtFloat wdtString wdtPick wdtDateTime wdtBoolean wdtTask wdtJob wdtFolder wdtEDocument wdtReferenceRecord wdtUser wdtGroup wdtRole wdtIntegerCollection wdtFloatCollection wdtStringCollection wdtPickCollection wdtDateTimeCollection wdtBooleanCollection wdtTaskCollection wdtJobCollection wdtFolderCollection wdtEDocumentCollection wdtReferenceRecordCollection wdtUserCollection wdtGroupCollection wdtRoleCollection wdtContents wdtUserList wdtSearchDescription wdtDeadLine wdtPickSet wdtAccountCollection wiLow wiNormal wiHigh wrtSoft wrtHard wsInit wsRunning wsDone wsControlled wsAborted wsContinued wtmFull wtmFromCurrent wtmOnlyCurrent ",class:"AltState Application CallType ComponentTokens CreatedJobs CreatedNotices ControlState DialogResult Dialogs EDocuments EDocumentVersionSource Folders GlobalIDs Job Jobs InputValue LookUpReference LookUpRequisiteNames LookUpSearch Object ParentComponent Processes References Requisite ReportName Reports Result Scripts Searches SelectedAttachments SelectedItems SelectMode Sender ServerEvents ServiceFactory ShiftState SubTask SystemDialogs Tasks Wizard Wizards Work ВызовСпособ ИмяОтчета РеквЗнач ",literal:"null true false nil "},s={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,keywords:o,relevance:0},l={className:"type",begin:":[ \\t]*("+"IApplication IAccessRights IAccountRepository IAccountSelectionRestrictions IAction IActionList IAdministrationHistoryDescription IAnchors IApplication IArchiveInfo IAttachment IAttachmentList ICheckListBox ICheckPointedList IColumn IComponent IComponentDescription IComponentToken IComponentTokenFactory IComponentTokenInfo ICompRecordInfo IConnection IContents IControl IControlJob IControlJobInfo IControlList ICrypto ICrypto2 ICustomJob ICustomJobInfo ICustomListBox ICustomObjectWizardStep ICustomWork ICustomWorkInfo IDataSet IDataSetAccessInfo IDataSigner IDateCriterion IDateRequisite IDateRequisiteDescription IDateValue IDeaAccessRights IDeaObjectInfo IDevelopmentComponentLock IDialog IDialogFactory IDialogPickRequisiteItems IDialogsFactory IDICSFactory IDocRequisite IDocumentInfo IDualListDialog IECertificate IECertificateInfo IECertificates IEditControl IEditorForm IEdmsExplorer IEdmsObject IEdmsObjectDescription IEdmsObjectFactory IEdmsObjectInfo IEDocument IEDocumentAccessRights IEDocumentDescription IEDocumentEditor IEDocumentFactory IEDocumentInfo IEDocumentStorage IEDocumentVersion IEDocumentVersionListDialog IEDocumentVersionSource IEDocumentWizardStep IEDocVerSignature IEDocVersionState IEnabledMode IEncodeProvider IEncrypter IEvent IEventList IException IExternalEvents IExternalHandler IFactory IField IFileDialog IFolder IFolderDescription IFolderDialog IFolderFactory IFolderInfo IForEach IForm IFormTitle IFormWizardStep IGlobalIDFactory IGlobalIDInfo IGrid IHasher IHistoryDescription IHyperLinkControl IImageButton IImageControl IInnerPanel IInplaceHint IIntegerCriterion IIntegerList IIntegerRequisite IIntegerValue IISBLEditorForm IJob IJobDescription IJobFactory IJobForm IJobInfo ILabelControl ILargeIntegerCriterion ILargeIntegerRequisite ILargeIntegerValue ILicenseInfo ILifeCycleStage IList IListBox ILocalIDInfo ILocalization ILock IMemoryDataSet IMessagingFactory IMetadataRepository INotice INoticeInfo INumericCriterion INumericRequisite INumericValue IObject IObjectDescription IObjectImporter IObjectInfo IObserver IPanelGroup IPickCriterion IPickProperty IPickRequisite IPickRequisiteDescription IPickRequisiteItem IPickRequisiteItems IPickValue IPrivilege IPrivilegeList IProcess IProcessFactory IProcessMessage IProgress IProperty IPropertyChangeEvent IQuery IReference IReferenceCriterion IReferenceEnabledMode IReferenceFactory IReferenceHistoryDescription IReferenceInfo IReferenceRecordCardWizardStep IReferenceRequisiteDescription IReferencesFactory IReferenceValue IRefRequisite IReport IReportFactory IRequisite IRequisiteDescription IRequisiteDescriptionList IRequisiteFactory IRichEdit IRouteStep IRule IRuleList ISchemeBlock IScript IScriptFactory ISearchCriteria ISearchCriterion ISearchDescription ISearchFactory ISearchFolderInfo ISearchForObjectDescription ISearchResultRestrictions ISecuredContext ISelectDialog IServerEvent IServerEventFactory IServiceDialog IServiceFactory ISignature ISignProvider ISignProvider2 ISignProvider3 ISimpleCriterion IStringCriterion IStringList IStringRequisite IStringRequisiteDescription IStringValue ISystemDialogsFactory ISystemInfo ITabSheet ITask ITaskAbortReasonInfo ITaskCardWizardStep ITaskDescription ITaskFactory ITaskInfo ITaskRoute ITextCriterion ITextRequisite ITextValue ITreeListSelectDialog IUser IUserList IValue IView IWebBrowserControl IWizard IWizardAction IWizardFactory IWizardFormElement IWizardParam IWizardPickParam IWizardReferenceParam IWizardStep IWorkAccessRights IWorkDescription IWorkflowAskableParam IWorkflowAskableParams IWorkflowBlock IWorkflowBlockResult IWorkflowEnabledMode IWorkflowParam IWorkflowPickParam IWorkflowReferenceParam IWorkState IWorkTreeCustomNode IWorkTreeJobNode IWorkTreeTaskNode IXMLEditorForm SBCrypto ".trim().replace(/\s/g,"|")+")",end:"[ \\t]*=",excludeEnd:!0},c={className:"variable",lexemes:t,keywords:o,begin:t,relevance:0,contains:[l,s]};return{aliases:["isbl"],case_insensitive:!0,lexemes:t,keywords:o,illegal:"\\$|\\?|%|,|;$|~|#|@|)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="<>",n="",r={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},i="[A-Za-z$_][0-9A-Za-z$_]*",a={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},o={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},s={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},l={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"xml"}},c={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,s],subLanguage:"css"}},d={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,s]};s.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,d,o,e.REGEXP_MODE];var u=s.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx","mjs","cjs"],keywords:a,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,l,c,d,e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,o,{begin:/[{,\n]\s*/,relevance:0,contains:[{begin:i+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:i,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+i+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:i},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:u}]}]},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:n},{begin:r.begin,end:r.end}],subLanguage:"xml",contains:[{begin:r.begin,end:r.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:i}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:u}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor get set",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){var t={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0};return{aliases:["wildfly-cli"],lexemes:"[a-z-]+",keywords:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"params",begin:/--[\w\-=\/]+/},{className:"function",begin:/:[\w\-.]+/,relevance:0},{className:"string",begin:/\B(([\/.])[\w\-.\/=]+)+/},t]}}},function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],i={end:",",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},a={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(i,{begin:/:/})].concat(n),illegal:"\\S"},o={begin:"\\[",end:"\\]",contains:[e.inherit(i)],illegal:"\\S"};return r.push(a,o),n.forEach((function(e){r.push(e)})),{contains:r,keywords:t,illegal:"\\S"}}},function(e,t){e.exports=function(e){var t={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},n="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",r={lexemes:n,keywords:t,illegal:/<\//},i={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},a={className:"variable",begin:"\\$"+n},o={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],begin:"`",end:"`"},l={className:"meta",begin:"@"+n};return r.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o,s,l,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],i.contains=r.contains,r}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},r={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},a={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,r]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,r]}]};r.contains.push(a);var o={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(a,{className:"meta-string"})]}]},l={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},u=d;return u.variants[1].contains=[d],d.variants[1].contains=[u],{aliases:["kt"],keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,o,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,o,s,a,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},o,s]},a,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},l]}}},function(e,t){e.exports=function(e){var t="\\]|\\?>",n={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},r=e.COMMENT("\x3c!--","--\x3e",{relevance:0}),i={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[r]}},a={className:"meta",begin:"\\[/noprocess|<\\?(lasso(script)?|=)"},o={className:"symbol",begin:"'[a-zA-Z_][\\w.]*'"},s=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$][a-zA-Z_][\\w.]*"},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:"[a-zA-Z_][\\w.]*",illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)[a-zA-Z_][\\w.]*",relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[o]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z_][\\w.]*(=(?!>))?|[-+*/%](?!>)"})]}];return{aliases:["ls","lassoscript"],case_insensitive:!0,lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[|<\\?(lasso(script)?|=)",returnEnd:!0,relevance:0,contains:[r]}},i,a,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[noprocess\\]|<\\?(lasso(script)?|=)",returnEnd:!0,contains:[r]}},i,a].concat(s)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(s)}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:" {",returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}},function(e,t){e.exports=function(e){var t=[],n=[],r=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},i=function(e,t,n){return{className:e,begin:t,relevance:n}},a={begin:"\\(",end:"\\)",contains:n,relevance:0};n.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r("'"),r('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},i("number","#[0-9A-Fa-f]+\\b"),a,i("variable","@@?[\\w-]+",10),i("variable","@{[\\w-]+}"),i("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var o=n.concat({begin:"{",end:"}",contains:t}),s={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(n)},l={begin:"([\\w-]+|@{[\\w-]+})\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:"([\\w-]+|@{[\\w-]+})",end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:n}}]},c={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:n,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:o}},u={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:"([\\w-]+|@{[\\w-]+})",end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,i("keyword","all\\b"),i("variable","@{[\\w-]+}"),i("selector-tag","([\\w-]+|@{[\\w-]+})%?",0),i("selector-id","#([\\w-]+|@{[\\w-]+})"),i("selector-class","\\.([\\w-]+|@{[\\w-]+})",0),i("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:o},{begin:"!important"}]};return t.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,c,d,l,u),{case_insensitive:!0,illegal:"[=>'/<($\"]",contains:t}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",n="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",r={className:"literal",begin:"\\b(t{1}|nil)\\b"},i={className:"number",variants:[{begin:n,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+n+" +"+n,end:"\\)"}]},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),o=e.COMMENT(";","$",{relevance:0}),s={begin:"\\*",end:"\\*"},l={className:"symbol",begin:"[:&]"+t},c={begin:t,relevance:0},d={begin:"\\|[^]*?\\|"},u={contains:[i,a,s,l,{begin:"\\(",end:"\\)",contains:["self",r,a,i,c]},c],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'\\|[^]*?\\|"}]},_={variants:[{begin:"'"+t},{begin:"#'"+t+"(::"+t+")*"}]},p={begin:"\\(\\s*",end:"\\)"},m={endsWithParent:!0,relevance:0};return p.contains=[{className:"name",variants:[{begin:t},{begin:"\\|[^]*?\\|"}]},m],m.contains=[u,_,p,r,i,a,o,s,l,d,c],{illegal:/\S/,contains:[i,{className:"meta",begin:"^#!",end:"$"},r,a,o,u,_,p,c]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\b([gtps][A-Z]{1}[a-zA-Z0-9]*)(\\[.+\\])?(?:\\s*?)"},{begin:"\\$_[A-Z]+"}],relevance:0},n=[e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("--","$"),e.COMMENT("[^:]//","$")],r=e.inherit(e.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),i=e.inherit(e.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress difference directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge messageAuthenticationCode messageDigest millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetDriver libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load extension loadedExtensions multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract symmetric union unload vectorDotProduct wait write"},contains:[t,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[i,r],relevance:0},{beginKeywords:"command on",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r].concat(n),illegal:";$|^\\[|^=|&|{"}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native list map __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},n="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",r=e.inherit(e.TITLE_MODE,{begin:n}),i={className:"subst",begin:/#\{/,end:/}/,keywords:t},a={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:t},o=[e.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[i,e.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W)/}]},{begin:"@"+n},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];i.contains=o;var s={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{aliases:["ls"],keywords:t,illegal:/\/\*/,contains:o.concat([e.COMMENT("\\/\\*","\\*\\/"),e.HASH_COMMENT_MODE,{begin:"(#=>|=>|\\|>>|-?->|\\!->)"},{className:"function",contains:[r,s],returnBegin:!0,variants:[{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",end:"\\->\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[r]},r]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){var t="([-a-zA-Z$._][\\w\\-$.]*)";return{keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[{className:"keyword",begin:"i\\d+"},e.COMMENT(";","\\n",{relevance:0}),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:'"',end:'[^\\\\]"'}],relevance:0},{className:"title",variants:[{begin:"@"+t},{begin:"@\\d+"},{begin:"!"+t},{begin:"!\\d+"+t}]},{className:"symbol",variants:[{begin:"%"+t},{begin:"%\\d+"},{begin:"#\\d+"}]},{className:"number",variants:[{begin:"0[xX][a-fA-F0-9]+"},{begin:"-?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:'"',end:'"',contains:[{className:"subst",begin:/\\[tn"\\]/}]},n={className:"number",begin:e.C_NUMBER_RE};return{illegal:":",contains:[t,{className:"comment",variants:[e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/")],relevance:0},n,{className:"section",variants:[{begin:"\\b(?:state|default)\\b"},{begin:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},{className:"built_in",begin:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|SitOnLink|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"},{className:"literal",variants:[{begin:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{begin:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_(?:ATTACHED|ON_REZ)|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP(?:_TAG)?|CREATOR|ATTACHED_(?:POINT|SLOTS_AVAILABLE)|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALLOW_UNSIT|ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCRIPTED_SIT_ONLY|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIT_TARGET|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|SIT_(?:INVALID_(?:AGENT|LINK_OBJECT)|NO(?:T_EXPERIENCE|_(?:ACCESS|EXPERIENCE_PERMISSION|SIT_TARGET)))|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{begin:"\\b(?:FALSE|TRUE)\\b"},{begin:"\\b(?:ZERO_ROTATION)\\b"},{begin:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{begin:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},{className:"type",begin:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}},function(e,t){e.exports=function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},n=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:n.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:n}].concat(n)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},{className:"built_in",variants:[{begin:":-\\|--\x3e"},{begin:"=",relevance:0}]},t,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},e.NUMBER_MODE,n,r,{begin:/:-/},{begin:/\.$/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["mips"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},contains:[{className:"keyword",begin:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",end:"\\s"},e.COMMENT("[;#](?!s*$)","$"),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"0x[0-9a-f]+"},{begin:"\\b-?\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^\\s*[0-9]+:"},{begin:"[0-9]+[bf]"}],relevance:0}],illegal:"/"}}},function(e,t){e.exports=function(e){return{keywords:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",contains:[e.COMMENT("::","$")]}}},function(e,t){e.exports=function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",n={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:t},r={begin:"->{",end:"}"},i={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},a=[e.BACKSLASH_ESCAPE,n,i],o=[i,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),r,{className:"string",contains:a,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return n.contains=o,r.contains=o,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:t,contains:o}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{className:"meta",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:"[$][a-fA-F0-9]+"},e.NUMBER_MODE]};return{case_insensitive:!0,keywords:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw import",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},illegal:/\/\*/,contains:[e.COMMENT("#rem","#end"),e.COMMENT("'","$",{relevance:0}),{className:"function",beginKeywords:"function method",end:"[(=:]|$",illegal:/\n/,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"$",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{className:"built_in",begin:"\\b(self|super)\\b"},{className:"meta",begin:"\\s*#",end:"$",keywords:{"meta-keyword":"if else elseif endif end then"}},{className:"meta",begin:"^\\s*strict\\b"},{beginKeywords:"alias",end:"=",contains:[e.UNDERSCORE_TITLE_MODE]},e.QUOTE_STRING_MODE,t]}}},function(e,t){e.exports=function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"built_in",begin:"@__"+e.IDENT_RE},{begin:"@"+e.IDENT_RE},{begin:e.IDENT_RE+"\\\\"+e.IDENT_RE}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["moon"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("--","$"),{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[\(,:=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{className:"name",begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{beginKeywords:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",end:/;/,endsWithParent:!0,keywords:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"symbol",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE],relevance:2},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},n={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[t]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},t]};return{aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:n}],relevance:0}],illegal:"[^\\s\\}]"}}},function(e,t){e.exports=function(e){return{aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},n={className:"subst",begin:/\$\{/,end:/}/,keywords:t},r={className:"string",contains:[n],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},i=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return n.contains=i,{aliases:["nixos"],keywords:t,contains:i}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:/\$+{[\w\.:-]+}/},n={className:"variable",begin:/\$+\w+/,illegal:/\(\){}/},r={className:"variable",begin:/\$+\([\w\^\.:-]+\)/},i={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"},{begin:"`",end:"`"}],illegal:/\n/,contains:[{className:"meta",begin:/\$(\\[nrt]|\$)/},{className:"variable",begin:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},t,n,r]};return{case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecShellWait ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText Int64Cmp Int64CmpU Int64Fmt IntCmp IntCmpU IntFmt IntOp IntPtrCmp IntPtrCmpU IntPtrOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegMultiStr WriteRegNone WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},contains:[e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup",end:"$"},i,{className:"keyword",begin:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversion|gettlbversion|if|ifdef|ifmacrodef|ifmacrondef|ifndef|include|insertmacro|macro|macroend|makensis|packhdr|searchparse|searchreplace|system|tempfile|undef|verbose|warning)/},t,n,r,{className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},{className:"class",begin:/\w+\:\:\w+/},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:t,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+n.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:n,lexemes:t,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"function",beginKeywords:"module function",end:"\\=|\\{",contains:[{className:"params",begin:"\\(",end:"\\)",contains:["self",n,r,t,{className:"literal",begin:"false|true|PI|undef"}]},e.UNDERSCORE_TITLE_MODE]};return{aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"meta",keywords:{"meta-keyword":"include use"},begin:"include|use <",end:">"},r,t,{begin:"[*!#%]",relevance:0},i]}}},function(e,t){e.exports=function(e){var t="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",n=e.COMMENT("{","}",{relevance:0}),r=e.COMMENT("\\(\\*","\\*\\)",{relevance:10}),i={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},a={className:"string",begin:"(#\\d+)+"},o={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:t,contains:[i,a]},n,r]};return{case_insensitive:!0,lexemes:/\.?\w+/,keywords:t,illegal:'("|\\$[G-Zg-z]|\\/\\*||->)',contains:[n,r,e.C_LINE_COMMENT_MODE,i,a,e.NUMBER_MODE,o,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:t,contains:[i,a,n,r,e.C_LINE_COMMENT_MODE,o]}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("{","}",{contains:["self"]});return{subLanguage:"xml",relevance:0,contains:[e.COMMENT("^#","$"),e.COMMENT("\\^rem{","}",{relevance:10,contains:[t]}),{className:"meta",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{className:"keyword",begin:"\\^[\\w\\-\\.\\:]+"},{className:"number",begin:"\\^#[0-9a-fA-F]+"},e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["pf.conf"],lexemes:/[a-z0-9_<>-]+/,keywords:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE,{className:"variable",begin:/\$[\w\d#@][\w\d_]*/},{className:"variable",begin:/<(?!\/)/,end:/>/}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("--","$"),n="BIGINT INT8 BIGSERIAL SERIAL8 BIT VARYING VARBIT BOOLEAN BOOL BOX BYTEA CHARACTER CHAR VARCHAR CIDR CIRCLE DATE DOUBLE PRECISION FLOAT8 FLOAT INET INTEGER INT INT4 INTERVAL JSON JSONB LINE LSEG|10 MACADDR MACADDR8 MONEY NUMERIC DEC DECIMAL PATH POINT POLYGON REAL FLOAT4 SMALLINT INT2 SMALLSERIAL|10 SERIAL2|10 SERIAL|10 SERIAL4|10 TEXT TIME ZONE TIMETZ|10 TIMESTAMP TIMESTAMPTZ|10 TSQUERY|10 TSVECTOR|10 TXID_SNAPSHOT|10 UUID XML NATIONAL NCHAR INT4RANGE|10 INT8RANGE|10 NUMRANGE|10 TSRANGE|10 TSTZRANGE|10 DATERANGE|10 ANYELEMENT ANYARRAY ANYNONARRAY ANYENUM ANYRANGE CSTRING INTERNAL RECORD PG_DDL_COMMAND VOID UNKNOWN OPAQUE REFCURSOR NAME OID REGPROC|10 REGPROCEDURE|10 REGOPER|10 REGOPERATOR|10 REGCLASS|10 REGTYPE|10 REGROLE|10 REGNAMESPACE|10 REGCONFIG|10 REGDICTIONARY|10 ",r=n.trim().split(" ").map((function(e){return e.split("|")[0]})).join("|"),i="ARRAY_AGG AVG BIT_AND BIT_OR BOOL_AND BOOL_OR COUNT EVERY JSON_AGG JSONB_AGG JSON_OBJECT_AGG JSONB_OBJECT_AGG MAX MIN MODE STRING_AGG SUM XMLAGG CORR COVAR_POP COVAR_SAMP REGR_AVGX REGR_AVGY REGR_COUNT REGR_INTERCEPT REGR_R2 REGR_SLOPE REGR_SXX REGR_SXY REGR_SYY STDDEV STDDEV_POP STDDEV_SAMP VARIANCE VAR_POP VAR_SAMP PERCENTILE_CONT PERCENTILE_DISC ROW_NUMBER RANK DENSE_RANK PERCENT_RANK CUME_DIST NTILE LAG LEAD FIRST_VALUE LAST_VALUE NTH_VALUE NUM_NONNULLS NUM_NULLS ABS CBRT CEIL CEILING DEGREES DIV EXP FLOOR LN LOG MOD PI POWER RADIANS ROUND SCALE SIGN SQRT TRUNC WIDTH_BUCKET RANDOM SETSEED ACOS ACOSD ASIN ASIND ATAN ATAND ATAN2 ATAN2D COS COSD COT COTD SIN SIND TAN TAND BIT_LENGTH CHAR_LENGTH CHARACTER_LENGTH LOWER OCTET_LENGTH OVERLAY POSITION SUBSTRING TREAT TRIM UPPER ASCII BTRIM CHR CONCAT CONCAT_WS CONVERT CONVERT_FROM CONVERT_TO DECODE ENCODE INITCAPLEFT LENGTH LPAD LTRIM MD5 PARSE_IDENT PG_CLIENT_ENCODING QUOTE_IDENT|10 QUOTE_LITERAL|10 QUOTE_NULLABLE|10 REGEXP_MATCH REGEXP_MATCHES REGEXP_REPLACE REGEXP_SPLIT_TO_ARRAY REGEXP_SPLIT_TO_TABLE REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPLIT_PART STRPOS SUBSTR TO_ASCII TO_HEX TRANSLATE OCTET_LENGTH GET_BIT GET_BYTE SET_BIT SET_BYTE TO_CHAR TO_DATE TO_NUMBER TO_TIMESTAMP AGE CLOCK_TIMESTAMP|10 DATE_PART DATE_TRUNC ISFINITE JUSTIFY_DAYS JUSTIFY_HOURS JUSTIFY_INTERVAL MAKE_DATE MAKE_INTERVAL|10 MAKE_TIME MAKE_TIMESTAMP|10 MAKE_TIMESTAMPTZ|10 NOW STATEMENT_TIMESTAMP|10 TIMEOFDAY TRANSACTION_TIMESTAMP|10 ENUM_FIRST ENUM_LAST ENUM_RANGE AREA CENTER DIAMETER HEIGHT ISCLOSED ISOPEN NPOINTS PCLOSE POPEN RADIUS WIDTH BOX BOUND_BOX CIRCLE LINE LSEG PATH POLYGON ABBREV BROADCAST HOST HOSTMASK MASKLEN NETMASK NETWORK SET_MASKLEN TEXT INET_SAME_FAMILYINET_MERGE MACADDR8_SET7BIT ARRAY_TO_TSVECTOR GET_CURRENT_TS_CONFIG NUMNODE PLAINTO_TSQUERY PHRASETO_TSQUERY WEBSEARCH_TO_TSQUERY QUERYTREE SETWEIGHT STRIP TO_TSQUERY TO_TSVECTOR JSON_TO_TSVECTOR JSONB_TO_TSVECTOR TS_DELETE TS_FILTER TS_HEADLINE TS_RANK TS_RANK_CD TS_REWRITE TSQUERY_PHRASE TSVECTOR_TO_ARRAY TSVECTOR_UPDATE_TRIGGER TSVECTOR_UPDATE_TRIGGER_COLUMN XMLCOMMENT XMLCONCAT XMLELEMENT XMLFOREST XMLPI XMLROOT XMLEXISTS XML_IS_WELL_FORMED XML_IS_WELL_FORMED_DOCUMENT XML_IS_WELL_FORMED_CONTENT XPATH XPATH_EXISTS XMLTABLE XMLNAMESPACES TABLE_TO_XML TABLE_TO_XMLSCHEMA TABLE_TO_XML_AND_XMLSCHEMA QUERY_TO_XML QUERY_TO_XMLSCHEMA QUERY_TO_XML_AND_XMLSCHEMA CURSOR_TO_XML CURSOR_TO_XMLSCHEMA SCHEMA_TO_XML SCHEMA_TO_XMLSCHEMA SCHEMA_TO_XML_AND_XMLSCHEMA DATABASE_TO_XML DATABASE_TO_XMLSCHEMA DATABASE_TO_XML_AND_XMLSCHEMA XMLATTRIBUTES TO_JSON TO_JSONB ARRAY_TO_JSON ROW_TO_JSON JSON_BUILD_ARRAY JSONB_BUILD_ARRAY JSON_BUILD_OBJECT JSONB_BUILD_OBJECT JSON_OBJECT JSONB_OBJECT JSON_ARRAY_LENGTH JSONB_ARRAY_LENGTH JSON_EACH JSONB_EACH JSON_EACH_TEXT JSONB_EACH_TEXT JSON_EXTRACT_PATH JSONB_EXTRACT_PATH JSON_OBJECT_KEYS JSONB_OBJECT_KEYS JSON_POPULATE_RECORD JSONB_POPULATE_RECORD JSON_POPULATE_RECORDSET JSONB_POPULATE_RECORDSET JSON_ARRAY_ELEMENTS JSONB_ARRAY_ELEMENTS JSON_ARRAY_ELEMENTS_TEXT JSONB_ARRAY_ELEMENTS_TEXT JSON_TYPEOF JSONB_TYPEOF JSON_TO_RECORD JSONB_TO_RECORD JSON_TO_RECORDSET JSONB_TO_RECORDSET JSON_STRIP_NULLS JSONB_STRIP_NULLS JSONB_SET JSONB_INSERT JSONB_PRETTY CURRVAL LASTVAL NEXTVAL SETVAL COALESCE NULLIF GREATEST LEAST ARRAY_APPEND ARRAY_CAT ARRAY_NDIMS ARRAY_DIMS ARRAY_FILL ARRAY_LENGTH ARRAY_LOWER ARRAY_POSITION ARRAY_POSITIONS ARRAY_PREPEND ARRAY_REMOVE ARRAY_REPLACE ARRAY_TO_STRING ARRAY_UPPER CARDINALITY STRING_TO_ARRAY UNNEST ISEMPTY LOWER_INC UPPER_INC LOWER_INF UPPER_INF RANGE_MERGE GENERATE_SERIES GENERATE_SUBSCRIPTS CURRENT_DATABASE CURRENT_QUERY CURRENT_SCHEMA|10 CURRENT_SCHEMAS|10 INET_CLIENT_ADDR INET_CLIENT_PORT INET_SERVER_ADDR INET_SERVER_PORT ROW_SECURITY_ACTIVE FORMAT_TYPE TO_REGCLASS TO_REGPROC TO_REGPROCEDURE TO_REGOPER TO_REGOPERATOR TO_REGTYPE TO_REGNAMESPACE TO_REGROLE COL_DESCRIPTION OBJ_DESCRIPTION SHOBJ_DESCRIPTION TXID_CURRENT TXID_CURRENT_IF_ASSIGNED TXID_CURRENT_SNAPSHOT TXID_SNAPSHOT_XIP TXID_SNAPSHOT_XMAX TXID_SNAPSHOT_XMIN TXID_VISIBLE_IN_SNAPSHOT TXID_STATUS CURRENT_SETTING SET_CONFIG BRIN_SUMMARIZE_NEW_VALUES BRIN_SUMMARIZE_RANGE BRIN_DESUMMARIZE_RANGE GIN_CLEAN_PENDING_LIST SUPPRESS_REDUNDANT_UPDATES_TRIGGER LO_FROM_BYTEA LO_PUT LO_GET LO_CREAT LO_CREATE LO_UNLINK LO_IMPORT LO_EXPORT LOREAD LOWRITE GROUPING CAST ".trim().split(" ").map((function(e){return e.split("|")[0]})).join("|");return{aliases:["postgres","postgresql"],case_insensitive:!0,keywords:{keyword:"ABORT ALTER ANALYZE BEGIN CALL CHECKPOINT|10 CLOSE CLUSTER COMMENT COMMIT COPY CREATE DEALLOCATE DECLARE DELETE DISCARD DO DROP END EXECUTE EXPLAIN FETCH GRANT IMPORT INSERT LISTEN LOAD LOCK MOVE NOTIFY PREPARE REASSIGN|10 REFRESH REINDEX RELEASE RESET REVOKE ROLLBACK SAVEPOINT SECURITY SELECT SET SHOW START TRUNCATE UNLISTEN|10 UPDATE VACUUM|10 VALUES AGGREGATE COLLATION CONVERSION|10 DATABASE DEFAULT PRIVILEGES DOMAIN TRIGGER EXTENSION FOREIGN WRAPPER|10 TABLE FUNCTION GROUP LANGUAGE LARGE OBJECT MATERIALIZED VIEW OPERATOR CLASS FAMILY POLICY PUBLICATION|10 ROLE RULE SCHEMA SEQUENCE SERVER STATISTICS SUBSCRIPTION SYSTEM TABLESPACE CONFIGURATION DICTIONARY PARSER TEMPLATE TYPE USER MAPPING PREPARED ACCESS METHOD CAST AS TRANSFORM TRANSACTION OWNED TO INTO SESSION AUTHORIZATION INDEX PROCEDURE ASSERTION ALL ANALYSE AND ANY ARRAY ASC ASYMMETRIC|10 BOTH CASE CHECK COLLATE COLUMN CONCURRENTLY|10 CONSTRAINT CROSS DEFERRABLE RANGE DESC DISTINCT ELSE EXCEPT FOR FREEZE|10 FROM FULL HAVING ILIKE IN INITIALLY INNER INTERSECT IS ISNULL JOIN LATERAL LEADING LIKE LIMIT NATURAL NOT NOTNULL NULL OFFSET ON ONLY OR ORDER OUTER OVERLAPS PLACING PRIMARY REFERENCES RETURNING SIMILAR SOME SYMMETRIC TABLESAMPLE THEN TRAILING UNION UNIQUE USING VARIADIC|10 VERBOSE WHEN WHERE WINDOW WITH BY RETURNS INOUT OUT SETOF|10 IF STRICT CURRENT CONTINUE OWNER LOCATION OVER PARTITION WITHIN BETWEEN ESCAPE EXTERNAL INVOKER DEFINER WORK RENAME VERSION CONNECTION CONNECT TABLES TEMP TEMPORARY FUNCTIONS SEQUENCES TYPES SCHEMAS OPTION CASCADE RESTRICT ADD ADMIN EXISTS VALID VALIDATE ENABLE DISABLE REPLICA|10 ALWAYS PASSING COLUMNS PATH REF VALUE OVERRIDING IMMUTABLE STABLE VOLATILE BEFORE AFTER EACH ROW PROCEDURAL ROUTINE NO HANDLER VALIDATOR OPTIONS STORAGE OIDS|10 WITHOUT INHERIT DEPENDS CALLED INPUT LEAKPROOF|10 COST ROWS NOWAIT SEARCH UNTIL ENCRYPTED|10 PASSWORD CONFLICT|10 INSTEAD INHERITS CHARACTERISTICS WRITE CURSOR ALSO STATEMENT SHARE EXCLUSIVE INLINE ISOLATION REPEATABLE READ COMMITTED SERIALIZABLE UNCOMMITTED LOCAL GLOBAL SQL PROCEDURES RECURSIVE SNAPSHOT ROLLUP CUBE TRUSTED|10 INCLUDE FOLLOWING PRECEDING UNBOUNDED RANGE GROUPS UNENCRYPTED|10 SYSID FORMAT DELIMITER HEADER QUOTE ENCODING FILTER OFF FORCE_QUOTE FORCE_NOT_NULL FORCE_NULL COSTS BUFFERS TIMING SUMMARY DISABLE_PAGE_SKIPPING RESTART CYCLE GENERATED IDENTITY DEFERRED IMMEDIATE LEVEL LOGGED UNLOGGED OF NOTHING NONE EXCLUDE ATTRIBUTE USAGE ROUTINES TRUE FALSE NAN INFINITY ALIAS BEGIN CONSTANT DECLARE END EXCEPTION RETURN PERFORM|10 RAISE GET DIAGNOSTICS STACKED|10 FOREACH LOOP ELSIF EXIT WHILE REVERSE SLICE DEBUG LOG INFO NOTICE WARNING ASSERT OPEN SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB CREATEROLE NOCREATEROLE INHERIT NOINHERIT LOGIN NOLOGIN REPLICATION NOREPLICATION BYPASSRLS NOBYPASSRLS ",built_in:"CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURRENT_CATALOG|10 CURRENT_DATE LOCALTIME LOCALTIMESTAMP CURRENT_ROLE|10 CURRENT_SCHEMA|10 SESSION_USER PUBLIC FOUND NEW OLD TG_NAME|10 TG_WHEN|10 TG_LEVEL|10 TG_OP|10 TG_RELID|10 TG_RELNAME|10 TG_TABLE_NAME|10 TG_TABLE_SCHEMA|10 TG_NARGS|10 TG_ARGV|10 TG_EVENT|10 TG_TAG|10 ROW_COUNT RESULT_OID|10 PG_CONTEXT|10 RETURNED_SQLSTATE COLUMN_NAME CONSTRAINT_NAME PG_DATATYPE_NAME|10 MESSAGE_TEXT TABLE_NAME SCHEMA_NAME PG_EXCEPTION_DETAIL|10 PG_EXCEPTION_HINT|10 PG_EXCEPTION_CONTEXT|10 SQLSTATE SQLERRM|10 SUCCESSFUL_COMPLETION WARNING DYNAMIC_RESULT_SETS_RETURNED IMPLICIT_ZERO_BIT_PADDING NULL_VALUE_ELIMINATED_IN_SET_FUNCTION PRIVILEGE_NOT_GRANTED PRIVILEGE_NOT_REVOKED STRING_DATA_RIGHT_TRUNCATION DEPRECATED_FEATURE NO_DATA NO_ADDITIONAL_DYNAMIC_RESULT_SETS_RETURNED SQL_STATEMENT_NOT_YET_COMPLETE CONNECTION_EXCEPTION CONNECTION_DOES_NOT_EXIST CONNECTION_FAILURE SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION SQLSERVER_REJECTED_ESTABLISHMENT_OF_SQLCONNECTION TRANSACTION_RESOLUTION_UNKNOWN PROTOCOL_VIOLATION TRIGGERED_ACTION_EXCEPTION FEATURE_NOT_SUPPORTED INVALID_TRANSACTION_INITIATION LOCATOR_EXCEPTION INVALID_LOCATOR_SPECIFICATION INVALID_GRANTOR INVALID_GRANT_OPERATION INVALID_ROLE_SPECIFICATION DIAGNOSTICS_EXCEPTION STACKED_DIAGNOSTICS_ACCESSED_WITHOUT_ACTIVE_HANDLER CASE_NOT_FOUND CARDINALITY_VIOLATION DATA_EXCEPTION ARRAY_SUBSCRIPT_ERROR CHARACTER_NOT_IN_REPERTOIRE DATETIME_FIELD_OVERFLOW DIVISION_BY_ZERO ERROR_IN_ASSIGNMENT ESCAPE_CHARACTER_CONFLICT INDICATOR_OVERFLOW INTERVAL_FIELD_OVERFLOW INVALID_ARGUMENT_FOR_LOGARITHM INVALID_ARGUMENT_FOR_NTILE_FUNCTION INVALID_ARGUMENT_FOR_NTH_VALUE_FUNCTION INVALID_ARGUMENT_FOR_POWER_FUNCTION INVALID_ARGUMENT_FOR_WIDTH_BUCKET_FUNCTION INVALID_CHARACTER_VALUE_FOR_CAST INVALID_DATETIME_FORMAT INVALID_ESCAPE_CHARACTER INVALID_ESCAPE_OCTET INVALID_ESCAPE_SEQUENCE NONSTANDARD_USE_OF_ESCAPE_CHARACTER INVALID_INDICATOR_PARAMETER_VALUE INVALID_PARAMETER_VALUE INVALID_REGULAR_EXPRESSION INVALID_ROW_COUNT_IN_LIMIT_CLAUSE INVALID_ROW_COUNT_IN_RESULT_OFFSET_CLAUSE INVALID_TABLESAMPLE_ARGUMENT INVALID_TABLESAMPLE_REPEAT INVALID_TIME_ZONE_DISPLACEMENT_VALUE INVALID_USE_OF_ESCAPE_CHARACTER MOST_SPECIFIC_TYPE_MISMATCH NULL_VALUE_NOT_ALLOWED NULL_VALUE_NO_INDICATOR_PARAMETER NUMERIC_VALUE_OUT_OF_RANGE SEQUENCE_GENERATOR_LIMIT_EXCEEDED STRING_DATA_LENGTH_MISMATCH STRING_DATA_RIGHT_TRUNCATION SUBSTRING_ERROR TRIM_ERROR UNTERMINATED_C_STRING ZERO_LENGTH_CHARACTER_STRING FLOATING_POINT_EXCEPTION INVALID_TEXT_REPRESENTATION INVALID_BINARY_REPRESENTATION BAD_COPY_FILE_FORMAT UNTRANSLATABLE_CHARACTER NOT_AN_XML_DOCUMENT INVALID_XML_DOCUMENT INVALID_XML_CONTENT INVALID_XML_COMMENT INVALID_XML_PROCESSING_INSTRUCTION INTEGRITY_CONSTRAINT_VIOLATION RESTRICT_VIOLATION NOT_NULL_VIOLATION FOREIGN_KEY_VIOLATION UNIQUE_VIOLATION CHECK_VIOLATION EXCLUSION_VIOLATION INVALID_CURSOR_STATE INVALID_TRANSACTION_STATE ACTIVE_SQL_TRANSACTION BRANCH_TRANSACTION_ALREADY_ACTIVE HELD_CURSOR_REQUIRES_SAME_ISOLATION_LEVEL INAPPROPRIATE_ACCESS_MODE_FOR_BRANCH_TRANSACTION INAPPROPRIATE_ISOLATION_LEVEL_FOR_BRANCH_TRANSACTION NO_ACTIVE_SQL_TRANSACTION_FOR_BRANCH_TRANSACTION READ_ONLY_SQL_TRANSACTION SCHEMA_AND_DATA_STATEMENT_MIXING_NOT_SUPPORTED NO_ACTIVE_SQL_TRANSACTION IN_FAILED_SQL_TRANSACTION IDLE_IN_TRANSACTION_SESSION_TIMEOUT INVALID_SQL_STATEMENT_NAME TRIGGERED_DATA_CHANGE_VIOLATION INVALID_AUTHORIZATION_SPECIFICATION INVALID_PASSWORD DEPENDENT_PRIVILEGE_DESCRIPTORS_STILL_EXIST DEPENDENT_OBJECTS_STILL_EXIST INVALID_TRANSACTION_TERMINATION SQL_ROUTINE_EXCEPTION FUNCTION_EXECUTED_NO_RETURN_STATEMENT MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED INVALID_CURSOR_NAME EXTERNAL_ROUTINE_EXCEPTION CONTAINING_SQL_NOT_PERMITTED MODIFYING_SQL_DATA_NOT_PERMITTED PROHIBITED_SQL_STATEMENT_ATTEMPTED READING_SQL_DATA_NOT_PERMITTED EXTERNAL_ROUTINE_INVOCATION_EXCEPTION INVALID_SQLSTATE_RETURNED NULL_VALUE_NOT_ALLOWED TRIGGER_PROTOCOL_VIOLATED SRF_PROTOCOL_VIOLATED EVENT_TRIGGER_PROTOCOL_VIOLATED SAVEPOINT_EXCEPTION INVALID_SAVEPOINT_SPECIFICATION INVALID_CATALOG_NAME INVALID_SCHEMA_NAME TRANSACTION_ROLLBACK TRANSACTION_INTEGRITY_CONSTRAINT_VIOLATION SERIALIZATION_FAILURE STATEMENT_COMPLETION_UNKNOWN DEADLOCK_DETECTED SYNTAX_ERROR_OR_ACCESS_RULE_VIOLATION SYNTAX_ERROR INSUFFICIENT_PRIVILEGE CANNOT_COERCE GROUPING_ERROR WINDOWING_ERROR INVALID_RECURSION INVALID_FOREIGN_KEY INVALID_NAME NAME_TOO_LONG RESERVED_NAME DATATYPE_MISMATCH INDETERMINATE_DATATYPE COLLATION_MISMATCH INDETERMINATE_COLLATION WRONG_OBJECT_TYPE GENERATED_ALWAYS UNDEFINED_COLUMN UNDEFINED_FUNCTION UNDEFINED_TABLE UNDEFINED_PARAMETER UNDEFINED_OBJECT DUPLICATE_COLUMN DUPLICATE_CURSOR DUPLICATE_DATABASE DUPLICATE_FUNCTION DUPLICATE_PREPARED_STATEMENT DUPLICATE_SCHEMA DUPLICATE_TABLE DUPLICATE_ALIAS DUPLICATE_OBJECT AMBIGUOUS_COLUMN AMBIGUOUS_FUNCTION AMBIGUOUS_PARAMETER AMBIGUOUS_ALIAS INVALID_COLUMN_REFERENCE INVALID_COLUMN_DEFINITION INVALID_CURSOR_DEFINITION INVALID_DATABASE_DEFINITION INVALID_FUNCTION_DEFINITION INVALID_PREPARED_STATEMENT_DEFINITION INVALID_SCHEMA_DEFINITION INVALID_TABLE_DEFINITION INVALID_OBJECT_DEFINITION WITH_CHECK_OPTION_VIOLATION INSUFFICIENT_RESOURCES DISK_FULL OUT_OF_MEMORY TOO_MANY_CONNECTIONS CONFIGURATION_LIMIT_EXCEEDED PROGRAM_LIMIT_EXCEEDED STATEMENT_TOO_COMPLEX TOO_MANY_COLUMNS TOO_MANY_ARGUMENTS OBJECT_NOT_IN_PREREQUISITE_STATE OBJECT_IN_USE CANT_CHANGE_RUNTIME_PARAM LOCK_NOT_AVAILABLE OPERATOR_INTERVENTION QUERY_CANCELED ADMIN_SHUTDOWN CRASH_SHUTDOWN CANNOT_CONNECT_NOW DATABASE_DROPPED SYSTEM_ERROR IO_ERROR UNDEFINED_FILE DUPLICATE_FILE SNAPSHOT_TOO_OLD CONFIG_FILE_ERROR LOCK_FILE_EXISTS FDW_ERROR FDW_COLUMN_NAME_NOT_FOUND FDW_DYNAMIC_PARAMETER_VALUE_NEEDED FDW_FUNCTION_SEQUENCE_ERROR FDW_INCONSISTENT_DESCRIPTOR_INFORMATION FDW_INVALID_ATTRIBUTE_VALUE FDW_INVALID_COLUMN_NAME FDW_INVALID_COLUMN_NUMBER FDW_INVALID_DATA_TYPE FDW_INVALID_DATA_TYPE_DESCRIPTORS FDW_INVALID_DESCRIPTOR_FIELD_IDENTIFIER FDW_INVALID_HANDLE FDW_INVALID_OPTION_INDEX FDW_INVALID_OPTION_NAME FDW_INVALID_STRING_LENGTH_OR_BUFFER_LENGTH FDW_INVALID_STRING_FORMAT FDW_INVALID_USE_OF_NULL_POINTER FDW_TOO_MANY_HANDLES FDW_OUT_OF_MEMORY FDW_NO_SCHEMAS FDW_OPTION_NAME_NOT_FOUND FDW_REPLY_HANDLE FDW_SCHEMA_NOT_FOUND FDW_TABLE_NOT_FOUND FDW_UNABLE_TO_CREATE_EXECUTION FDW_UNABLE_TO_CREATE_REPLY FDW_UNABLE_TO_ESTABLISH_CONNECTION PLPGSQL_ERROR RAISE_EXCEPTION NO_DATA_FOUND TOO_MANY_ROWS ASSERT_FAILURE INTERNAL_ERROR DATA_CORRUPTED INDEX_CORRUPTED "},illegal:/:==|\W\s*\(\*|(^|\s)\$[a-z]|{{|[a-z]:\s*$|\.\.\.|TO:|DO:/,contains:[{className:"keyword",variants:[{begin:/\bTEXT\s*SEARCH\b/},{begin:/\b(PRIMARY|FOREIGN|FOR(\s+NO)?)\s+KEY\b/},{begin:/\bPARALLEL\s+(UNSAFE|RESTRICTED|SAFE)\b/},{begin:/\bSTORAGE\s+(PLAIN|EXTERNAL|EXTENDED|MAIN)\b/},{begin:/\bMATCH\s+(FULL|PARTIAL|SIMPLE)\b/},{begin:/\bNULLS\s+(FIRST|LAST)\b/},{begin:/\bEVENT\s+TRIGGER\b/},{begin:/\b(MAPPING|OR)\s+REPLACE\b/},{begin:/\b(FROM|TO)\s+(PROGRAM|STDIN|STDOUT)\b/},{begin:/\b(SHARE|EXCLUSIVE)\s+MODE\b/},{begin:/\b(LEFT|RIGHT)\s+(OUTER\s+)?JOIN\b/},{begin:/\b(FETCH|MOVE)\s+(NEXT|PRIOR|FIRST|LAST|ABSOLUTE|RELATIVE|FORWARD|BACKWARD)\b/},{begin:/\bPRESERVE\s+ROWS\b/},{begin:/\bDISCARD\s+PLANS\b/},{begin:/\bREFERENCING\s+(OLD|NEW)\b/},{begin:/\bSKIP\s+LOCKED\b/},{begin:/\bGROUPING\s+SETS\b/},{begin:/\b(BINARY|INSENSITIVE|SCROLL|NO\s+SCROLL)\s+(CURSOR|FOR)\b/},{begin:/\b(WITH|WITHOUT)\s+HOLD\b/},{begin:/\bWITH\s+(CASCADED|LOCAL)\s+CHECK\s+OPTION\b/},{begin:/\bEXCLUDE\s+(TIES|NO\s+OTHERS)\b/},{begin:/\bFORMAT\s+(TEXT|XML|JSON|YAML)\b/},{begin:/\bSET\s+((SESSION|LOCAL)\s+)?NAMES\b/},{begin:/\bIS\s+(NOT\s+)?UNKNOWN\b/},{begin:/\bSECURITY\s+LABEL\b/},{begin:/\bSTANDALONE\s+(YES|NO|NO\s+VALUE)\b/},{begin:/\bWITH\s+(NO\s+)?DATA\b/},{begin:/\b(FOREIGN|SET)\s+DATA\b/},{begin:/\bSET\s+(CATALOG|CONSTRAINTS)\b/},{begin:/\b(WITH|FOR)\s+ORDINALITY\b/},{begin:/\bIS\s+(NOT\s+)?DOCUMENT\b/},{begin:/\bXML\s+OPTION\s+(DOCUMENT|CONTENT)\b/},{begin:/\b(STRIP|PRESERVE)\s+WHITESPACE\b/},{begin:/\bNO\s+(ACTION|MAXVALUE|MINVALUE)\b/},{begin:/\bPARTITION\s+BY\s+(RANGE|LIST|HASH)\b/},{begin:/\bAT\s+TIME\s+ZONE\b/},{begin:/\bGRANTED\s+BY\b/},{begin:/\bRETURN\s+(QUERY|NEXT)\b/},{begin:/\b(ATTACH|DETACH)\s+PARTITION\b/},{begin:/\bFORCE\s+ROW\s+LEVEL\s+SECURITY\b/},{begin:/\b(INCLUDING|EXCLUDING)\s+(COMMENTS|CONSTRAINTS|DEFAULTS|IDENTITY|INDEXES|STATISTICS|STORAGE|ALL)\b/},{begin:/\bAS\s+(ASSIGNMENT|IMPLICIT|PERMISSIVE|RESTRICTIVE|ENUM|RANGE)\b/}]},{begin:/\b(FORMAT|FAMILY|VERSION)\s*\(/},{begin:/\bINCLUDE\s*\(/,keywords:"INCLUDE"},{begin:/\bRANGE(?!\s*(BETWEEN|UNBOUNDED|CURRENT|[-0-9]+))/},{begin:/\b(VERSION|OWNER|TEMPLATE|TABLESPACE|CONNECTION\s+LIMIT|PROCEDURE|RESTRICT|JOIN|PARSER|COPY|START|END|COLLATION|INPUT|ANALYZE|STORAGE|LIKE|DEFAULT|DELIMITER|ENCODING|COLUMN|CONSTRAINT|TABLE|SCHEMA)\s*=/},{begin:/\b(PG_\w+?|HAS_[A-Z_]+_PRIVILEGE)\b/,relevance:10},{begin:/\bEXTRACT\s*\(/,end:/\bFROM\b/,returnEnd:!0,keywords:{type:"CENTURY DAY DECADE DOW DOY EPOCH HOUR ISODOW ISOYEAR MICROSECONDS MILLENNIUM MILLISECONDS MINUTE MONTH QUARTER SECOND TIMEZONE TIMEZONE_HOUR TIMEZONE_MINUTE WEEK YEAR"}},{begin:/\b(XMLELEMENT|XMLPI)\s*\(\s*NAME/,keywords:{keyword:"NAME"}},{begin:/\b(XMLPARSE|XMLSERIALIZE)\s*\(\s*(DOCUMENT|CONTENT)/,keywords:{keyword:"DOCUMENT CONTENT"}},{beginKeywords:"CACHE INCREMENT MAXVALUE MINVALUE",end:e.C_NUMBER_RE,returnEnd:!0,keywords:"BY CACHE INCREMENT MAXVALUE MINVALUE"},{className:"type",begin:/\b(WITH|WITHOUT)\s+TIME\s+ZONE\b/},{className:"type",begin:/\bINTERVAL\s+(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND)(\s+TO\s+(MONTH|HOUR|MINUTE|SECOND))?\b/},{begin:/\bRETURNS\s+(LANGUAGE_HANDLER|TRIGGER|EVENT_TRIGGER|FDW_HANDLER|INDEX_AM_HANDLER|TSM_HANDLER)\b/,keywords:{keyword:"RETURNS",type:"LANGUAGE_HANDLER TRIGGER EVENT_TRIGGER FDW_HANDLER INDEX_AM_HANDLER TSM_HANDLER"}},{begin:"\\b("+i+")\\s*\\("},{begin:"\\.("+r+")\\b"},{begin:"\\b("+r+")\\s+PATH\\b",keywords:{keyword:"PATH",type:n.replace("PATH ","")}},{className:"type",begin:"\\b("+r+")\\b"},{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:"(e|E|u&|U&)'",end:"'",contains:[{begin:"\\\\."}],relevance:10},{begin:"\\$([a-zA-Z_]?|[a-zA-Z_][a-zA-Z_0-9]*)\\$",endSameAsBegin:!0,contains:[{subLanguage:["pgsql","perl","python","tcl","r","lua","java","php","ruby","bash","scheme","xml","json"],endsWithParent:!0}]},{begin:'"',end:'"',contains:[{begin:'""'}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{className:"meta",variants:[{begin:"%(ROW)?TYPE",relevance:10},{begin:"\\$\\d+"},{begin:"^#\\w",end:"$"}]},{className:"symbol",begin:"<<\\s*[a-zA-Z_][a-zA-Z_0-9$]*\\s*>>",relevance:10}]}}},function(e,t){e.exports=function(e){var t={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},n={className:"meta",begin:/<\?(php)?|\?>/},r={className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[n]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},n,{className:"keyword",begin:/\$this\b/},t,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",t,e.C_BLOCK_COMMENT_MODE,r,i]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},r,i]}}},function(e,t){e.exports=function(e){return{disableAutodetect:!0}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"actor addressof and as be break class compile_error compile_intrinsic consume continue delegate digestof do else elseif embed end error for fun if ifdef in interface is isnt lambda let match new not object or primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},contains:[{className:"type",begin:"\\b_?[A-Z][\\w]*",relevance:0},{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{begin:e.IDENT_RE+"'",relevance:0},{className:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"},n={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},i={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[n,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},a={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},o=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),s={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},d={begin:/using\s/,end:/$/,returnBegin:!0,contains:[i,a,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},u={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},_={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},p=[_,o,n,e.NUMBER_MODE,i,a,s,r,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/\@\B/,relevance:0}],m={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",p,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return _.contains.unshift(m),{aliases:["ps","ps1"],lexemes:/-?[A-z\.\-]+/,case_insensitive:!0,keywords:t,contains:p.concat(l,c,d,u,m)}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{contains:[e.C_NUMBER_MODE,{begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{begin:"function calls",end:"$",contains:[e.C_NUMBER_MODE],relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\(",end:"\\)$",excludeBegin:!0,excludeEnd:!0,relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:/\(/,end:/\)/,relevance:0},n={begin:/\[/,end:/\]/},r={className:"comment",begin:/%/,end:/$/,contains:[e.PHRASAL_WORDS_MODE]},i={className:"string",begin:/`/,end:/`/,contains:[e.BACKSLASH_ESCAPE]},a=[{begin:/[a-z][A-Za-z0-9_]*/,relevance:0},{className:"symbol",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},t,{begin:/:-/},n,r,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,{className:"string",begin:/0\'(\\\'|.)/},{className:"string",begin:/0\'\\s/},e.C_NUMBER_MODE];return t.contains=a,n.contains=a,{contains:a.concat([{begin:/\.$/}])}}},function(e,t){e.exports=function(e){var t="[ \\t\\f]*",n="("+t+"[:=]"+t+"|[ \\t\\f]+)",r="([^\\\\:= \\t\\f\\n]|\\\\.)+",i={end:n,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+n,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:i},{begin:r+n,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:r,endsParent:!0,relevance:0}],starts:i},{className:"attr",relevance:0,begin:r+t+"$"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/;/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+/,end:/\s*=/,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("#","$"),n=e.inherit(e.TITLE_MODE,{begin:"([A-Za-z_]|::)(\\w|::)*"}),r={className:"variable",begin:"\\$([A-Za-z_]|::)(\\w|::)*"},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[t,r,i,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[n,t]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[i,t,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},r]}],relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["pb","pbi"],keywords:"Align And Array As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerElseIf CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect CompilerWarning Continue Data DataSection Debug DebugLevel Declare DeclareC DeclareCDLL DeclareDLL DeclareModule Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndDataSection EndDeclareModule EndEnumeration EndIf EndImport EndInterface EndMacro EndModule EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration EnumerationBinary Extends FakeReturn For ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface List Macro MacroExpandedCount Map Module NewList NewMap Next Not Or Procedure ProcedureC ProcedureCDLL ProcedureDLL ProcedureReturn Protected Prototype PrototypeC ReDim Read Repeat Restore Return Runtime Select Shared Static Step Structure StructureUnion Swap Threaded To UndefineMacro Until Until UnuseModule UseModule Wend While With XIncludeFile XOr",contains:[e.COMMENT(";","$",{relevance:0}),{className:"function",begin:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",end:"\\(",excludeEnd:!0,returnBegin:!0,contains:[{className:"keyword",begin:"(Procedure|Declare)(C|CDLL|DLL)?",excludeEnd:!0},{className:"type",begin:"\\.\\w*"},e.UNDERSCORE_TITLE_MODE]},{className:"string",begin:'(~)?"',end:'"',illegal:"\\n"},{className:"symbol",begin:"#[a-zA-Z_]\\w*\\$?"}]}}},function(e,t){e.exports=function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},n={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,end:/\}/,keywords:t,illegal:/#/},i={begin:/\{\{/,relevance:0},a={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,n,i,r]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,n,i,r]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,i,r]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},o={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},s={className:"params",begin:/\(/,end:/\)/,contains:["self",n,o,a,e.HASH_COMMENT_MODE]};return r.contains=[a,o,n],{aliases:["py","gyp","ipython"],keywords:t,illegal:/(<\/|->|\?)|=>/,contains:[n,o,{beginKeywords:"if",relevance:0},a,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,s,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}},function(e,t){e.exports=function(e){return{aliases:["k","kdb"],keywords:{keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"},lexemes:/(`?)[A-Za-z0-9_]+\b/,contains:[e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9\\._]*",n={className:"attribute",begin:"\\bid\\s*:",starts:{className:"string",end:t,returnEnd:!1}},r={begin:t+"\\s*:",returnBegin:!0,contains:[{className:"attribute",begin:t,end:"\\s*:",excludeEnd:!0,relevance:0}],relevance:0},i={begin:t+"\\s*{",end:"{",returnBegin:!0,relevance:0,contains:[e.inherit(e.TITLE_MODE,{begin:t})]};return{aliases:["qt"],case_insensitive:!1,keywords:{keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4dPromise"},contains:[{className:"meta",begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{begin:/\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"keyword",begin:"\\bsignal\\b",starts:{className:"string",end:"(\\(|:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"keyword",begin:"\\bproperty\\b",starts:{className:"string",end:"(:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:"\\."+e.IDENT_RE,relevance:0},n,r,i],illegal:/#/}}},function(e,t){e.exports=function(e){var t="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{contains:[e.HASH_COMMENT_MODE,{begin:t,lexemes:t,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}},function(e,t){e.exports=function(e){var t="~?[a-z$_][0-9a-zA-Z$_]*",n="`?[A-Z$_][0-9a-zA-Z$_]*",r="("+["||","&&","++","**","+.","*","/","*.","/.","...","|>"].map((function(e){return e.split("").map((function(e){return"\\"+e})).join("")})).join("|")+"|==|===)",i="\\s+"+r+"\\s+",a={keyword:"and as asr assert begin class constraint do done downto else end exception externalfor fun function functor if in include inherit initializerland lazy let lor lsl lsr lxor match method mod module mutable new nonrecobject of open or private rec sig struct then to try type val virtual when while with",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 ref string unit ",literal:"true false"},o="\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",s={className:"number",relevance:0,variants:[{begin:o},{begin:"\\(\\-"+o+"\\)"}]},l={className:"operator",relevance:0,begin:r},c=[{className:"identifier",relevance:0,begin:t},l,s],d=[e.QUOTE_STRING_MODE,l,{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",contains:[{className:"identifier",begin:n,relevance:0}]}],u=[{className:"module",begin:"\\b"+n,returnBegin:!0,end:".",relevance:0,contains:[{className:"identifier",begin:n,relevance:0}]}],_={className:"function",relevance:0,keywords:a,variants:[{begin:"\\s(\\(\\.?.*?\\)|"+t+")\\s*=>",end:"\\s*=>",returnBegin:!0,relevance:0,contains:[{className:"params",variants:[{begin:t},{begin:"~?[a-z$_][0-9a-zA-Z$_]*(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?(s*:s*[a-z$_][0-9a-z$_]*((s*('?[a-z$_][0-9a-z$_]*s*(,'?[a-z$_][0-9a-z$_]*)*)?s*))?)?"},{begin:/\(\s*\)/}]}]},{begin:"\\s\\(\\.?[^;\\|]*\\)\\s*=>",end:"\\s=>",returnBegin:!0,relevance:0,contains:[{className:"params",relevance:0,variants:[{begin:t,end:"(,|\\n|\\))",relevance:0,contains:[l,{className:"typing",begin:":",end:"(,|\\n)",returnBegin:!0,relevance:0,contains:u}]}]}]},{begin:"\\(\\.\\s"+t+"\\)\\s*=>"}]};d.push(_);var p={className:"constructor",begin:n+"\\(",end:"\\)",illegal:"\\n",keywords:a,contains:[e.QUOTE_STRING_MODE,l,{className:"params",begin:"\\b"+t}]},m={className:"pattern-match",begin:"\\|",returnBegin:!0,keywords:a,end:"=>",relevance:0,contains:[p,l,{relevance:0,className:"constructor",begin:n}]},g={className:"module-access",keywords:a,returnBegin:!0,variants:[{begin:"\\b("+n+"\\.)+"+t},{begin:"\\b("+n+"\\.)+\\(",end:"\\)",returnBegin:!0,contains:[_,{begin:"\\(",end:"\\)",skip:!0}].concat(d)},{begin:"\\b("+n+"\\.)+{",end:"}"}],contains:d};return u.push(g),{aliases:["re"],keywords:a,illegal:"(:\\-|:=|\\${|\\+=)",contains:[e.COMMENT("/\\*","\\*/",{illegal:"^(\\#,\\/\\/)"}),{className:"character",begin:"'(\\\\[^']+|[^'])'",illegal:"\\n",relevance:0},e.QUOTE_STRING_MODE,{className:"literal",begin:"\\(\\)",relevance:0},{className:"literal",begin:"\\[\\|",end:"\\|\\]",relevance:0,contains:c},{className:"literal",begin:"\\[",end:"\\]",relevance:0,contains:c},p,{className:"operator",begin:i,illegal:"\\-\\->",relevance:0},s,e.C_LINE_COMMENT_MODE,m,_,{className:"module-def",begin:"\\bmodule\\s+"+t+"\\s+"+n+"\\s+=\\s+{",end:"}",returnBegin:!0,keywords:a,relevance:0,contains:[{className:"module",relevance:0,begin:n},{begin:"{",end:"}",skip:!0}].concat(d)},g]}}},function(e,t){e.exports=function(e){return{keywords:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",illegal:"\]$/},{begin:/<\//,end:/>/},{begin:/^facet /,end:/\}/},{begin:"^1\\.\\.(\\d+)$",end:/$/}],illegal:/./},e.COMMENT("^#","$"),i,a,r,{begin:/[\w-]+\=([^\s\{\}\[\]\(\)]+)/,relevance:0,returnBegin:!0,contains:[{className:"attribute",begin:/[^=]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[i,a,r,{className:"literal",begin:"\\b("+n.split(" ").join("|")+")\\b"},{begin:/("[^"]*"|[^\s\{\}\[\]]+)/}]}]},{className:"number",begin:/\*[0-9a-fA-F]+/},{begin:"\\b("+"add remove enable disable set get print export edit find run debug error info warning".split(" ").join("|")+")([\\s[(]|])",returnBegin:!0,contains:[{className:"builtin-name",begin:/\w+/}]},{className:"built_in",variants:[{begin:"(\\.\\./|/|\\s)(("+"traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firewall firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw".split(" ").join("|")+");?\\s)+",relevance:10},{begin:/\.\./}]}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:""}]}}},function(e,t){e.exports=function(e){return{aliases:["sas","SAS"],case_insensitive:!0,keywords:{literal:"null missing _all_ _automatic_ _character_ _infile_ _n_ _name_ _null_ _numeric_ _user_ _webout_",meta:"do if then else end until while abort array attrib by call cards cards4 catname continue datalines datalines4 delete delim delimiter display dm drop endsas error file filename footnote format goto in infile informat input keep label leave length libname link list lostcard merge missing modify options output out page put redirect remove rename replace retain return select set skip startsas stop title update waitsas where window x systask add and alter as cascade check create delete describe distinct drop foreign from group having index insert into in key like message modify msgtype not null on or order primary references reset restrict select set table unique update validate view where"},contains:[{className:"keyword",begin:/^\s*(proc [\w\d_]+|data|run|quit)[\s\;]/},{className:"variable",begin:/\&[a-zA-Z_\&][a-zA-Z0-9_]*\.?/},{className:"emphasis",begin:/^\s*datalines|cards.*;/,end:/^\s*;\s*$/},{className:"built_in",begin:"%(bquote|nrbquote|cmpres|qcmpres|compstor|datatyp|display|do|else|end|eval|global|goto|if|index|input|keydef|label|left|length|let|local|lowcase|macro|mend|nrbquote|nrquote|nrstr|put|qcmpres|qleft|qlowcase|qscan|qsubstr|qsysfunc|qtrim|quote|qupcase|scan|str|substr|superq|syscall|sysevalf|sysexec|sysfunc|sysget|syslput|sysprod|sysrc|sysrput|then|to|trim|unquote|until|upcase|verify|while|window)"},{className:"name",begin:/%[a-zA-Z_][a-zA-Z_0-9]*/},{className:"meta",begin:"[^%](abs|addr|airy|arcos|arsin|atan|attrc|attrn|band|betainv|blshift|bnot|bor|brshift|bxor|byte|cdf|ceil|cexist|cinv|close|cnonct|collate|compbl|compound|compress|cos|cosh|css|curobs|cv|daccdb|daccdbsl|daccsl|daccsyd|dacctab|dairy|date|datejul|datepart|datetime|day|dclose|depdb|depdbsl|depdbsl|depsl|depsl|depsyd|depsyd|deptab|deptab|dequote|dhms|dif|digamma|dim|dinfo|dnum|dopen|doptname|doptnum|dread|dropnote|dsname|erf|erfc|exist|exp|fappend|fclose|fcol|fdelete|fetch|fetchobs|fexist|fget|fileexist|filename|fileref|finfo|finv|fipname|fipnamel|fipstate|floor|fnonct|fnote|fopen|foptname|foptnum|fpoint|fpos|fput|fread|frewind|frlen|fsep|fuzz|fwrite|gaminv|gamma|getoption|getvarc|getvarn|hbound|hms|hosthelp|hour|ibessel|index|indexc|indexw|input|inputc|inputn|int|intck|intnx|intrr|irr|jbessel|juldate|kurtosis|lag|lbound|left|length|lgamma|libname|libref|log|log10|log2|logpdf|logpmf|logsdf|lowcase|max|mdy|mean|min|minute|mod|month|mopen|mort|n|netpv|nmiss|normal|note|npv|open|ordinal|pathname|pdf|peek|peekc|pmf|point|poisson|poke|probbeta|probbnml|probchi|probf|probgam|probhypr|probit|probnegb|probnorm|probt|put|putc|putn|qtr|quote|ranbin|rancau|ranexp|rangam|range|rank|rannor|ranpoi|rantbl|rantri|ranuni|repeat|resolve|reverse|rewind|right|round|saving|scan|sdf|second|sign|sin|sinh|skewness|soundex|spedis|sqrt|std|stderr|stfips|stname|stnamel|substr|sum|symget|sysget|sysmsg|sysprod|sysrc|system|tan|tanh|time|timepart|tinv|tnonct|today|translate|tranwrd|trigamma|trim|trimn|trunc|uniform|upcase|uss|var|varfmt|varinfmt|varlabel|varlen|varname|varnum|varray|varrayx|vartype|verify|vformat|vformatd|vformatdx|vformatn|vformatnx|vformatw|vformatwx|vformatx|vinarray|vinarrayx|vinformat|vinformatd|vinformatdx|vinformatn|vinformatnx|vinformatw|vinformatwx|vinformatx|vlabel|vlabelx|vlength|vlengthx|vname|vnamex|vtype|vtypex|weekday|year|yyq|zipfips|zipname|zipnamel|zipstate)[(]"},{className:"string",variants:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.COMMENT("\\*",";"),e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[t],relevance:10}]},r={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},i={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},a={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},i]},o={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[i]};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},r,o,a,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",n={className:"literal",begin:"(#t|#f|#\\\\"+t+"|#\\\\.)"},r={className:"number",variants:[{begin:"(\\-|\\+)?\\d+([./]\\d+)?",relevance:0},{begin:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},i=e.QUOTE_STRING_MODE,a=[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#\\|","\\|#")],o={begin:t,relevance:0},s={className:"symbol",begin:"'"+t},l={endsWithParent:!0,relevance:0},c={variants:[{begin:/'/},{begin:"`"}],contains:[{begin:"\\(",end:"\\)",contains:["self",n,i,r,o,s]}]},d={className:"name",begin:t,lexemes:t,keywords:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},u={variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{begin:/lambda/,endsWithParent:!0,returnBegin:!0,contains:[d,{begin:/\(/,end:/\)/,endsParent:!0,contains:[o]}]},d,l]};return l.contains=[n,r,i,o,s,c,u].concat(a),{illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},r,i,s,c,u].concat(a)}}},function(e,t){e.exports=function(e){var t=[e.C_NUMBER_MODE,{className:"string",begin:"'|\"",end:"'|\"",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]}];return{aliases:["sci"],lexemes:/%?\w+/,keywords:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{begin:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",end:"",relevance:0},{begin:"\\[",end:"\\]'*[\\.']*",relevance:0,contains:t},e.COMMENT("//","$")].concat(t)}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},n={className:"number",begin:"#[0-9A-Fa-f]+"};e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE;return{case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,n,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n,e.CSS_NUMBER_MODE]}]}}},function(e,t){e.exports=function(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}},function(e,t){e.exports=function(e){var t=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"];return{aliases:["smali"],contains:[{className:"string",begin:'"',end:'"',relevance:0},e.COMMENT("#","$",{relevance:0}),{className:"keyword",variants:[{begin:"\\s*\\.end\\s[a-zA-Z0-9]*"},{begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{begin:"\\s("+["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"].join("|")+")"}]},{className:"built_in",variants:[{begin:"\\s("+t.join("|")+")\\s"},{begin:"\\s("+t.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{begin:"\\s("+["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"].join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",relevance:10}]},{className:"class",begin:"L[^(;:\n]*;",relevance:0},{begin:"[vp][0-9]+"}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:"\\$.{1}"},n={className:"symbol",begin:"#"+e.UNDERSCORE_IDENT_RE};return{aliases:["st"],keywords:"self super nil true false thisContext",contains:[e.COMMENT('"','"'),e.APOS_STRING_MODE,{className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:"[a-z][a-zA-Z0-9_]*:",relevance:0},e.C_NUMBER_MODE,n,t,{begin:"\\|[ ]*[a-z][a-zA-Z0-9_]*([ ]+[a-z][a-zA-Z0-9_]*)*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?[a-z][a-zA-Z0-9_]*"}]},{begin:"\\#\\(",end:"\\)",contains:[e.APOS_STRING_MODE,t,e.C_NUMBER_MODE,n]}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:/\[(\|\|)?\]|\(\)/,relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t={className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]},{begin:"'",end:"'",contains:[{begin:"''",relevance:0}]}]},n={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"define undef ifdef ifndef else endif include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(t,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]};return{aliases:["sqf"],case_insensitive:!0,keywords:{keyword:"case catch default do else exit exitWith for forEach from if private switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addForce addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addTorque addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret admin agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airplaneThrottle airportSide AISFinishHeal alive all3DENEntities allAirports allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSimpleObjects allSites allTurrets allUnits allUnitsUAV allVariables ammo ammoOnPylon and animate animateBay animateDoor animatePylon animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canTriggerDynamicSimulation canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory collectiveRTD combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configProperties configSourceAddonList configSourceMod configSourceModList confirmSensorTarget connectTerminalToUAV controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctAddHeader ctAddRow ctClear ctCurSel ctData ctFindHeaderRows ctFindRowHeader ctHeaderControls ctHeaderCount ctRemoveHeaders ctRemoveRows ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPixelPrecision ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlTextWidth ctrlType ctrlVisible ctRowControls ctRowCount ctSetCurSel ctSetData ctSetHeaderTemplate ctSetRowTemplate ctSetValue ctValue curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteGroupWhenEmpty deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureFrameToFile diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_lightNewLoad diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_setLightNew diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableMapIndicators disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle drawTriangle driver drop dynamicSimulationDistance dynamicSimulationDistanceCoef dynamicSimulationEnabled dynamicSimulationSystemEnabled echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableAutoStartUpRTD enableAutoTrimRTD enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableDynamicSimulation enableDynamicSimulationSystem enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableInfoPanelComponent enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableTraffic enableUAVConnectability enableUAVWaypoints enableVehicleCargo enableVehicleSensor enableWeaponDisassembly endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities environmentEnabled estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findIf findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagAnimationPhase flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceFlagTexture forceFollowRoad forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam forgetTarget format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllEnvSoundControllers getAllHitPointsDamage getAllOwnedMines getAllSoundControllers getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getCompatiblePylonMagazines getConnectedUAV getContainerMaxLoad getCursorObjectParams getCustomAimCoef getDammage getDescription getDir getDirVisual getDLCAssetsUsage getDLCAssetsUsageByName getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getEnvSoundController getFatigue getForcedFlagTexture getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getMusicPlayedTime getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlateNumber getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getPylonMagazines getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSoundController getSoundControllerResult getSpeed getStamina getStatValue getSuppression getTerrainGrid getTerrainHeightASL getText getTotalDLCUsageTime getUnitLoadout getUnitTrait getUserMFDText getUserMFDvalue getVariable getVehicleCargo getWeaponCargo getWeaponSway getWingsOrientationRTD getWingsPositionRTD getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState inflame inflamed infoPanel infoPanelComponentEnabled infoPanelComponents infoPanels inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDamageAllowed isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isGroupDeletedWhenEmpty isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLaserOn isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSimpleObject isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUIContext isUniformAllowed isVehicleCargo isVehicleRadarOn isVehicleSensorEnabled isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbColorRight lbCurSel lbData lbDelete lbIsSelected lbPicture lbPictureRight lbSelection lbSetColor lbSetColorRight lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetPictureRight lbSetPictureRightColor lbSetPictureRightColorDisabled lbSetPictureRightColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetText lbSetTextRight lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbTextRight lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaderboardRequestRowsFriends leaderboardsRequestUploadScore leaderboardsRequestUploadScoreKeepBest leaderboardState leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects listRemoteTargets listVehicleSensors ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbSort lnbSortByValue lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modelToWorldVisualWorld modelToWorldWorld modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberOfEnginesRTD numberToDate objectCurators objectFromNetId objectParent objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openSteamApp openYoutubeVideo or orderGetIn overcast overcastForecast owner param params parseNumber parseSimpleArray parseText parsingNamespace particlesQuality pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remoteExecutedOwner remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponAttachmentCargo removeWeaponCargo removeWeaponGlobal removeWeaponTurret reportRemoteTarget requiredVersion resetCamShake resetSubgroupDirection resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectRandomWeighted selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENLogicType set3DENMissionAttribute set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setActualCollectiveRTD setAirplaneThrottle setAirportSide setAmmo setAmmoCargo setAmmoOnPylon setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setBrakesRTD setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTI setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setConvoySeparation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setCustomWeightRTD setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDriveOnPath setDropInterval setDynamicSimulationDistance setDynamicSimulationDistanceCoef setEditorMode setEditorObjectScope setEffectCondition setEngineRPMRTD setFace setFaceAnimation setFatigue setFeatureType setFlagAnimationPhase setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setInfoPanel setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlateNumber setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setPylonLoadOut setPylonsPriority setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setRotorBrakeRTD setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskMarkerOffset setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTrafficDensity setTrafficDistance setTrafficGap setTrafficSpeed setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setUserMFDText setUserMFDvalue setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleRadar setVehicleReceiveRemoteTargets setVehicleReportOwnPosition setVehicleReportRemoteTargets setVehicleTIPars setVehicleVarName setVelocity setVelocityModelSpace setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWantedRPMRTD setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWingForceScaleRTD setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideChat sideEnemy sideFriendly sideRadio simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targets targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskParent taskResult taskState taskType teamMember teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL terrainIntersectAtASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerDynamicSimulation triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCollapseAll tvCount tvCurSel tvData tvDelete tvExpand tvExpandAll tvPicture tvSetColor tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves userInputDisabled vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorModelToWorld vectorModelToWorldVisual vectorMultiply vectorNormalized vectorUp vectorUpVisual vectorWorldToModel vectorWorldToModelVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicleReceiveRemoteTargets vehicleReportOwnPosition vehicleReportRemoteTargets vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD WFSideText wind ",literal:"blufor civilian configNull controlNull displayNull east endl false grpNull independent lineBreak locationNull nil objNull opfor pi resistance scriptNull sideAmbientLife sideEmpty sideLogic sideUnknown taskNull teamMemberNull true west"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.NUMBER_MODE,{className:"variable",begin:/\b_+[a-zA-Z_]\w*/},{className:"title",begin:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},t,n],illegal:/#|^\$ /}}},function(e,t){e.exports=function(e){var t=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["stanfuncs"],keywords:{title:["functions","model","data","parameters","quantities","transformed","generated"].join(" "),keyword:["for","in","if","else","while","break","continue","return"].concat(["int","real","vector","ordered","positive_ordered","simplex","unit_vector","row_vector","matrix","cholesky_factor_corr|10","cholesky_factor_cov|10","corr_matrix|10","cov_matrix|10","void"]).concat(["print","reject","increment_log_prob|10","integrate_ode|10","integrate_ode_rk45|10","integrate_ode_bdf|10","algebra_solver"]).join(" "),built_in:["Phi","Phi_approx","abs","acos","acosh","algebra_solver","append_array","append_col","append_row","asin","asinh","atan","atan2","atanh","bernoulli_cdf","bernoulli_lccdf","bernoulli_lcdf","bernoulli_logit_lpmf","bernoulli_logit_rng","bernoulli_lpmf","bernoulli_rng","bessel_first_kind","bessel_second_kind","beta_binomial_cdf","beta_binomial_lccdf","beta_binomial_lcdf","beta_binomial_lpmf","beta_binomial_rng","beta_cdf","beta_lccdf","beta_lcdf","beta_lpdf","beta_rng","binary_log_loss","binomial_cdf","binomial_coefficient_log","binomial_lccdf","binomial_lcdf","binomial_logit_lpmf","binomial_lpmf","binomial_rng","block","categorical_logit_lpmf","categorical_logit_rng","categorical_lpmf","categorical_rng","cauchy_cdf","cauchy_lccdf","cauchy_lcdf","cauchy_lpdf","cauchy_rng","cbrt","ceil","chi_square_cdf","chi_square_lccdf","chi_square_lcdf","chi_square_lpdf","chi_square_rng","cholesky_decompose","choose","col","cols","columns_dot_product","columns_dot_self","cos","cosh","cov_exp_quad","crossprod","csr_extract_u","csr_extract_v","csr_extract_w","csr_matrix_times_vector","csr_to_dense_matrix","cumulative_sum","determinant","diag_matrix","diag_post_multiply","diag_pre_multiply","diagonal","digamma","dims","dirichlet_lpdf","dirichlet_rng","distance","dot_product","dot_self","double_exponential_cdf","double_exponential_lccdf","double_exponential_lcdf","double_exponential_lpdf","double_exponential_rng","e","eigenvalues_sym","eigenvectors_sym","erf","erfc","exp","exp2","exp_mod_normal_cdf","exp_mod_normal_lccdf","exp_mod_normal_lcdf","exp_mod_normal_lpdf","exp_mod_normal_rng","expm1","exponential_cdf","exponential_lccdf","exponential_lcdf","exponential_lpdf","exponential_rng","fabs","falling_factorial","fdim","floor","fma","fmax","fmin","fmod","frechet_cdf","frechet_lccdf","frechet_lcdf","frechet_lpdf","frechet_rng","gamma_cdf","gamma_lccdf","gamma_lcdf","gamma_lpdf","gamma_p","gamma_q","gamma_rng","gaussian_dlm_obs_lpdf","get_lp","gumbel_cdf","gumbel_lccdf","gumbel_lcdf","gumbel_lpdf","gumbel_rng","head","hypergeometric_lpmf","hypergeometric_rng","hypot","inc_beta","int_step","integrate_ode","integrate_ode_bdf","integrate_ode_rk45","inv","inv_Phi","inv_chi_square_cdf","inv_chi_square_lccdf","inv_chi_square_lcdf","inv_chi_square_lpdf","inv_chi_square_rng","inv_cloglog","inv_gamma_cdf","inv_gamma_lccdf","inv_gamma_lcdf","inv_gamma_lpdf","inv_gamma_rng","inv_logit","inv_sqrt","inv_square","inv_wishart_lpdf","inv_wishart_rng","inverse","inverse_spd","is_inf","is_nan","lbeta","lchoose","lgamma","lkj_corr_cholesky_lpdf","lkj_corr_cholesky_rng","lkj_corr_lpdf","lkj_corr_rng","lmgamma","lmultiply","log","log10","log1m","log1m_exp","log1m_inv_logit","log1p","log1p_exp","log2","log_determinant","log_diff_exp","log_falling_factorial","log_inv_logit","log_mix","log_rising_factorial","log_softmax","log_sum_exp","logistic_cdf","logistic_lccdf","logistic_lcdf","logistic_lpdf","logistic_rng","logit","lognormal_cdf","lognormal_lccdf","lognormal_lcdf","lognormal_lpdf","lognormal_rng","machine_precision","matrix_exp","max","mdivide_left_spd","mdivide_left_tri_low","mdivide_right_spd","mdivide_right_tri_low","mean","min","modified_bessel_first_kind","modified_bessel_second_kind","multi_gp_cholesky_lpdf","multi_gp_lpdf","multi_normal_cholesky_lpdf","multi_normal_cholesky_rng","multi_normal_lpdf","multi_normal_prec_lpdf","multi_normal_rng","multi_student_t_lpdf","multi_student_t_rng","multinomial_lpmf","multinomial_rng","multiply_log","multiply_lower_tri_self_transpose","neg_binomial_2_cdf","neg_binomial_2_lccdf","neg_binomial_2_lcdf","neg_binomial_2_log_lpmf","neg_binomial_2_log_rng","neg_binomial_2_lpmf","neg_binomial_2_rng","neg_binomial_cdf","neg_binomial_lccdf","neg_binomial_lcdf","neg_binomial_lpmf","neg_binomial_rng","negative_infinity","normal_cdf","normal_lccdf","normal_lcdf","normal_lpdf","normal_rng","not_a_number","num_elements","ordered_logistic_lpmf","ordered_logistic_rng","owens_t","pareto_cdf","pareto_lccdf","pareto_lcdf","pareto_lpdf","pareto_rng","pareto_type_2_cdf","pareto_type_2_lccdf","pareto_type_2_lcdf","pareto_type_2_lpdf","pareto_type_2_rng","pi","poisson_cdf","poisson_lccdf","poisson_lcdf","poisson_log_lpmf","poisson_log_rng","poisson_lpmf","poisson_rng","positive_infinity","pow","print","prod","qr_Q","qr_R","quad_form","quad_form_diag","quad_form_sym","rank","rayleigh_cdf","rayleigh_lccdf","rayleigh_lcdf","rayleigh_lpdf","rayleigh_rng","reject","rep_array","rep_matrix","rep_row_vector","rep_vector","rising_factorial","round","row","rows","rows_dot_product","rows_dot_self","scaled_inv_chi_square_cdf","scaled_inv_chi_square_lccdf","scaled_inv_chi_square_lcdf","scaled_inv_chi_square_lpdf","scaled_inv_chi_square_rng","sd","segment","sin","singular_values","sinh","size","skew_normal_cdf","skew_normal_lccdf","skew_normal_lcdf","skew_normal_lpdf","skew_normal_rng","softmax","sort_asc","sort_desc","sort_indices_asc","sort_indices_desc","sqrt","sqrt2","square","squared_distance","step","student_t_cdf","student_t_lccdf","student_t_lcdf","student_t_lpdf","student_t_rng","sub_col","sub_row","sum","tail","tan","tanh","target","tcrossprod","tgamma","to_array_1d","to_array_2d","to_matrix","to_row_vector","to_vector","trace","trace_gen_quad_form","trace_quad_form","trigamma","trunc","uniform_cdf","uniform_lccdf","uniform_lcdf","uniform_lpdf","uniform_rng","variance","von_mises_lpdf","von_mises_rng","weibull_cdf","weibull_lccdf","weibull_lcdf","weibull_lpdf","weibull_rng","wiener_lpdf","wishart_lpdf","wishart_rng"].join(" ")},lexemes:e.IDENT_RE,contains:[e.C_LINE_COMMENT_MODE,e.COMMENT(/#/,/$/,{relevance:0,keywords:{"meta-keyword":"include"}}),e.COMMENT(/\/\*/,/\*\//,{relevance:0,contains:[{className:"doctag",begin:/@(return|param)/}]}),{begin:/<\s*lower\s*=/,keywords:"lower"},{begin:/[<,]*upper\s*=/,keywords:"upper"},{className:"keyword",begin:/\btarget\s*\+=/,relevance:10},{begin:"~\\s*("+e.IDENT_RE+")\\s*\\(",keywords:["bernoulli","bernoulli_logit","beta","beta_binomial","binomial","binomial_logit","categorical","categorical_logit","cauchy","chi_square","dirichlet","double_exponential","exp_mod_normal","exponential","frechet","gamma","gaussian_dlm_obs","gumbel","hypergeometric","inv_chi_square","inv_gamma","inv_wishart","lkj_corr","lkj_corr_cholesky","logistic","lognormal","multi_gp","multi_gp_cholesky","multi_normal","multi_normal_cholesky","multi_normal_prec","multi_student_t","multinomial","neg_binomial","neg_binomial_2","neg_binomial_2_log","normal","ordered_logistic","pareto","pareto_type_2","poisson","poisson_log","rayleigh","scaled_inv_chi_square","skew_normal","student_t","uniform","von_mises","weibull","wiener","wishart"].join(" ")},{className:"number",variants:[{begin:/\b\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/},{begin:/\.\d+(?:[eE][+-]?\d+)?\b/}],relevance:0},{className:"string",begin:'"',end:'"',relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey bias binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 bubble bubbleplot ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error esize est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 forest forestplot form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate funnel funnelplot g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labbe labbeplot labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize menl meqparse mer merg merge meta mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trimfill trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"symbol",begin:/`[a-zA-Z0-9_]+'/},{className:"variable",begin:/\$\{?[a-zA-Z0-9_]+\}?/},{className:"string",variants:[{begin:'`"[^\r\n]*?"\''},{begin:'"[^\r\n"]*"'}]},{className:"built_in",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\()"}]},e.COMMENT("^[ \t]*\\*.*$",!1),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["p21","step","stp"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:{keyword:"HEADER ENDSEC DATA"},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*!","\\*/"),e.C_NUMBER_MODE,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"\\$"+e.IDENT_RE},n={className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"};return{aliases:["styl"],case_insensitive:!1,keywords:"if else for in",illegal:"("+["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"].join("|")+")",contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-class"},{begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*(?=[\\.\\s\\n\\[\\:,])",className:"selector-id"},{begin:"\\b("+["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"].join("|")+")(?=[\\.\\s\\n\\[\\:,])",className:"selector-tag"},{begin:"&?:?:\\b("+["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"].join("|")+")(?=[\\.\\s\\n\\[\\:,])"},{begin:"@("+["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"].join("|")+")\\b"},t,e.CSS_NUMBER_MODE,e.NUMBER_MODE,{className:"function",begin:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[n,t,e.APOS_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse().join("|")+")\\b",starts:{end:/;|$/,contains:[n,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/\./,relevance:0}}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{className:"string",begin:"\\[\n(multipart)?",end:"\\]\n"},{className:"string",begin:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},{className:"string",begin:"(\\+|-)\\d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{begin:"^progress(:?)(\\s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}}},function(e,t){e.exports=function(e){var t={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),r={className:"subst",begin:/\\\(/,end:"\\)",keywords:t,contains:[]},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},a={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return r.contains=[a],{keywords:t,contains:[i,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,contains:["self",a,i,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:t,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"comment",begin:/\$noop\(/,end:/\)/,contains:[{begin:/\(/,end:/\)/,contains:["self",{begin:/\\./}]}],relevance:10},{className:"keyword",begin:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,end:/\(/,excludeEnd:!0},{className:"variable",begin:/%[_a-zA-Z0-9:]*/,end:"%"},{className:"symbol",begin:/\\./}]}}},function(e,t){e.exports=function(e){var t={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!"+e.UNDERSCORE_IDENT_RE},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:"true false yes no null",keywords:{literal:"true false yes no null"}},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"meta",variants:[{begin:"^TAP version (\\d+)$"},{begin:"^1\\.\\.(\\d+)$"}]},{begin:"(s+)?---$",end:"\\.\\.\\.$",subLanguage:"yaml",relevance:0},{className:"number",begin:" (\\d+) "},{className:"symbol",variants:[{begin:"^ok"},{begin:"^not ok"}]}]}}},function(e,t){e.exports=function(e){return{aliases:["tk"],keywords:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",contains:[e.COMMENT(";[ \\t]*#","$"),e.COMMENT("^[ \\t]*#","$"),{beginKeywords:"proc",end:"[\\{]",excludeEnd:!0,contains:[{className:"title",begin:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"[ \\t\\n\\r]",endsWithParent:!0,excludeEnd:!0}]},{excludeEnd:!0,variants:[{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",end:"[^a-zA-Z0-9_\\}\\$]"},{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},{className:"number",variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"tag",begin:/\\/,relevance:0,contains:[{className:"name",variants:[{begin:/[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/},{begin:/[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/}],starts:{endsWithParent:!0,relevance:0,contains:[{className:"string",variants:[{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/}]},{begin:/\s*=\s*/,endsWithParent:!0,relevance:0,contains:[{className:"number",begin:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{contains:[t,{className:"formula",contains:[t],relevance:0,variants:[{begin:/\$\$/,end:/\$\$/},{begin:/\$/,end:/\$/}]},e.COMMENT("%","$",{relevance:0})]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:"bool byte i16 i32 i64 double string binary",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:"bool byte i16 i32 i64 double string binary",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[1-9][0-9]*",relevance:0},n={className:"symbol",begin:":[^\\]]+"};return{keywords:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET PROG ATTR MN POS",literal:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},contains:[{className:"built_in",begin:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",end:"\\]",contains:["self",t,n]},{className:"built_in",begin:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",end:"\\]",contains:["self",t,e.QUOTE_STRING_MODE,n]},{className:"keyword",begin:"/(PROG|ATTR|MN|POS|END)\\b"},{className:"keyword",begin:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{className:"keyword",begin:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{className:"number",begin:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",relevance:0},e.COMMENT("//","[;$]"),e.COMMENT("!","[;$]"),e.COMMENT("--eg:","$"),e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"'"},e.C_NUMBER_MODE,{className:"variable",begin:"\\$[A-Za-z0-9_]+"}]}}},function(e,t){e.exports=function(e){var t="attribute block constant cycle date dump include max min parent random range source template_from_string",n={beginKeywords:t,keywords:{name:t},relevance:0,contains:[{className:"params",begin:"\\(",end:"\\)"}]},r={begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize column convert_encoding date date_modify default escape filter first format inky_to_html inline_css join json_encode keys last length lower map markdown merge nl2br number_format raw reduce replace reverse round slice sort spaceless split striptags title trim upper url_encode",contains:[n]},i="apply autoescape block deprecated do embed extends filter flush for from if import include macro sandbox set use verbatim with";return i=i+" "+i.split(" ").map((function(e){return"end"+e})).join(" "),{aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:i,starts:{endsWithParent:!0,contains:[r,n],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:["self",r,n]}]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},r={begin:"\\(",end:/\)/,keywords:t,contains:["self",e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.NUMBER_MODE]},i={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,r]},a={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:e.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},s={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},c={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]};return o.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,a,e.REGEXP_MODE],{aliases:["ts"],keywords:t,contains:[{className:"meta",begin:/^\s*['"]use strict['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,l,c,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+e.IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.IDENT_RE},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",e.inherit(e.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),i],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",i]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0},n,r]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface namespace",end:"{",excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[e.UNDERSCORE_TITLE_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"^#",end:"$",relevance:2}]}}},function(e,t){e.exports=function(e){return{aliases:["vb"],case_insensitive:!0,keywords:{keyword:"addhandler addressof alias and andalso aggregate ansi as async assembly auto await binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue iterator join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass nameof namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor yield",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},illegal:"//|{|}|endif|gosub|variant|wend|^\\$ ",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT("'","$",{returnBegin:!0,contains:[{className:"doctag",begin:"'''|\x3c!--|--\x3e",contains:[e.PHRASAL_WORDS_MODE]},{className:"doctag",begin:"",contains:[e.PHRASAL_WORDS_MODE]}]}),e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end region externalsource"}}]}}},function(e,t){e.exports=function(e){return{aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},illegal:"//",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT(/'/,/$/,{relevance:0}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{begin:"<%",end:"%>",subLanguage:"vbscript"}]}}},function(e,t){e.exports=function(e){return{aliases:["v","sv","svh"],case_insensitive:!1,keywords:{keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"},lexemes:/[\w\$]+/,contains:[e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"number",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\b([0-9_])+",relevance:0}]},{className:"variable",variants:[{begin:"#\\((?!parameter).+\\)"},{begin:"\\.\\w+",relevance:0}]},{className:"meta",begin:"`",end:"$",keywords:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},relevance:0}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package parameter port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable view vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signed real_vector time_vector",literal:"false true note warning error failure line text side width"},illegal:"{",contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT("--","$"),e.QUOTE_STRING_MODE,{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"string",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[e.BACKSLASH_ESCAPE]},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[e.BACKSLASH_ESCAPE]}]}}},function(e,t){e.exports=function(e){return{lexemes:/[!#@\w]+/,keywords:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},illegal:/;/,contains:[e.NUMBER_MODE,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:/"(\\"|\n\\|[^"\n])*"/},e.COMMENT('"',"$"),{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"symbol",begin:/<[\w-]+>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"[.%]?"+e.IDENT_RE,keywords:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}},function(e,t){e.exports=function(e){var t={keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts"},n={className:"string",begin:'"',end:'"',illegal:"\\n"},r={beginKeywords:"import",end:"$",keywords:t,contains:[n]},i={className:"function",begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,keywords:t}})]};return{aliases:["tao"],lexemes:/[a-zA-Z][a-zA-Z0-9_?]*/,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:"<<",end:">>"},i,r,{className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=[{className:"variable",begin:/[\$][\w-:]+/},{className:"built_in",variants:[{begin:/\barray\:/,end:/(?:append|filter|flatten|fold\-(?:left|right)|for-each(?:\-pair)?|get|head|insert\-before|join|put|remove|reverse|size|sort|subarray|tail)\b/},{begin:/\bmap\:/,end:/(?:contains|entry|find|for\-each|get|keys|merge|put|remove|size)\b/},{begin:/\bmath\:/,end:/(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/},{begin:/\bop\:/,end:/\(/,excludeEnd:!0},{begin:/\bfn\:/,end:/\(/,excludeEnd:!0},{begin:/[^<\/\$\:'"-]\b(?:abs|accumulator\-(?:after|before)|adjust\-(?:date(?:Time)?|time)\-to\-timezone|analyze\-string|apply|available\-(?:environment\-variables|system\-properties)|avg|base\-uri|boolean|ceiling|codepoints?\-(?:equal|to\-string)|collation\-key|collection|compare|concat|contains(?:\-token)?|copy\-of|count|current(?:\-)?(?:date(?:Time)?|time|group(?:ing\-key)?|output\-uri|merge\-(?:group|key))?data|dateTime|days?\-from\-(?:date(?:Time)?|duration)|deep\-equal|default\-(?:collation|language)|distinct\-values|document(?:\-uri)?|doc(?:\-available)?|element\-(?:available|with\-id)|empty|encode\-for\-uri|ends\-with|environment\-variable|error|escape\-html\-uri|exactly\-one|exists|false|filter|floor|fold\-(?:left|right)|for\-each(?:\-pair)?|format\-(?:date(?:Time)?|time|integer|number)|function\-(?:arity|available|lookup|name)|generate\-id|has\-children|head|hours\-from\-(?:dateTime|duration|time)|id(?:ref)?|implicit\-timezone|in\-scope\-prefixes|index\-of|innermost|insert\-before|iri\-to\-uri|json\-(?:doc|to\-xml)|key|lang|last|load\-xquery\-module|local\-name(?:\-from\-QName)?|(?:lower|upper)\-case|matches|max|minutes\-from\-(?:dateTime|duration|time)|min|months?\-from\-(?:date(?:Time)?|duration)|name(?:space\-uri\-?(?:for\-prefix|from\-QName)?)?|nilled|node\-name|normalize\-(?:space|unicode)|not|number|one\-or\-more|outermost|parse\-(?:ietf\-date|json)|path|position|(?:prefix\-from\-)?QName|random\-number\-generator|regex\-group|remove|replace|resolve\-(?:QName|uri)|reverse|root|round(?:\-half\-to\-even)?|seconds\-from\-(?:dateTime|duration|time)|snapshot|sort|starts\-with|static\-base\-uri|stream\-available|string\-?(?:join|length|to\-codepoints)?|subsequence|substring\-?(?:after|before)?|sum|system\-property|tail|timezone\-from\-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type\-available|unordered|unparsed\-(?:entity|text)?\-?(?:public\-id|uri|available|lines)?|uri\-collection|xml\-to\-json|years?\-from\-(?:date(?:Time)?|duration)|zero\-or\-one)\b/},{begin:/\blocal\:/,end:/\(/,excludeEnd:!0},{begin:/\bzip\:/,end:/(?:zip\-file|(?:xml|html|text|binary)\-entry| (?:update\-)?entries)\b/},{begin:/\b(?:util|db|functx|app|xdmp|xmldb)\:/,end:/\(/,excludeEnd:!0}]},{className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doctag",begin:"@\\w+"}]},{className:"meta",begin:/%[\w-:]+/},{className:"title",begin:/\bxquery version "[13]\.[01]"\s?(?:encoding ".+")?/,end:/;/},{beginKeywords:"element attribute comment document processing-instruction",end:"{",excludeEnd:!0},{begin:/<([\w\._:\-]+)((\s*.*)=('|").*('|"))?>/,end:/(\/[\w\._:\-]+>)/,subLanguage:"xml",contains:[{begin:"{",end:"}",subLanguage:"xquery"},"self"]}];return{aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:"module schema namespace boundary-space preserve no-preserve strip default collation base-uri ordering context decimal-format decimal-separator copy-namespaces empty-sequence except exponent-separator external grouping-separator inherit no-inherit lax minus-sign per-mille percent schema-attribute schema-element strict unordered zero-digit declare import option function validate variable for at in let where order group by return if then else tumbling sliding window start when only end previous next stable ascending descending allowing empty greatest least some every satisfies switch case typeswitch try catch and or to union intersect instance of treat as castable cast map array delete insert into replace value rename copy modify update",type:"item document-node node attribute document element comment namespace namespace-node processing-instruction text construction xs:anyAtomicType xs:untypedAtomic xs:duration xs:time xs:decimal xs:float xs:double xs:gYearMonth xs:gYear xs:gMonthDay xs:gMonth xs:gDay xs:boolean xs:base64Binary xs:hexBinary xs:anyURI xs:QName xs:NOTATION xs:dateTime xs:dateTimeStamp xs:date xs:string xs:normalizedString xs:token xs:language xs:NMTOKEN xs:Name xs:NCName xs:ID xs:IDREF xs:ENTITY xs:integer xs:nonPositiveInteger xs:negativeInteger xs:long xs:int xs:short xs:byte xs:nonNegativeInteger xs:unisignedLong xs:unsignedInt xs:unsignedShort xs:unsignedByte xs:positiveInteger xs:yearMonthDuration xs:dayTimeDuration",literal:"eq ne lt le gt ge is self:: child:: descendant:: descendant-or-self:: attribute:: following:: following-sibling:: parent:: ancestor:: ancestor-or-self:: preceding:: preceding-sibling:: NaN"},contains:t}}},function(e,t){e.exports=function(e){var t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["zep"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",contains:[e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[e.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_BLOCK_COMMENT_MODE,t,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,n]}}},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,e),this.initData(t)}return i(e,[{key:"initData",value:function(e){this.qiniuOptions=Object.assign({token:"",baseUrl:"",config:{useCdnDomain:!0,disableStatisticsReport:!1,retryCount:6,region:qiniu.region.z1},putExtra:{fname:"",params:{},mimeType:null}},e);var t=this;this.fetchGetToken().then((function(e){var n=e,r=n.status,i=n.data;r&&(t.qiniuOptions.token=i.token,t.qiniuOptions.baseUrl=i.domain)})).catch((function(e){console.log(e)}))}},{key:"fetchGetToken",value:function(){var e=this.qiniuOptions.tokenApiUrl||l.getToken;return new Promise((function(t,n){o.default.ajax({url:e,success:function(e){t(e)},error:function(e){n(e)}})}))}},{key:"getRegionUrl",value:function(e){return{z0:"//upload.qiniup.com",z1:"//upload-z1.qiniup.com",z2:"//upload-z2.qiniup.com",na0:"//upload-na0.qiniup.com",as0:"//upload-as0.qiniup.com"}[e]||""}},{key:"uploadWithSDK",value:function(e,t){var n=this.qiniuOptions.token,r=this.qiniuOptions.putExtra,i=this.qiniuOptions.config;r.params["x:name"]=t;var a={next:function(e){},error:function(e){},complete:function(e){e.key&&e.key.match(/\.(jpg|jpeg|png|gif)$/)&&consoel.log("===== complete ===== res: %o",e)}};qiniu.upload(e,t,n,r,i).subscribe(a)}},{key:"putb64",value:function(e){var t=this.base64encode(e),n=this.qiniuOptions.token,r=this.getBase64Size(e),i=this.getRegionUrl(this.qiniuOptions.region)+"/putb64/"+r,a=this;return new Promise((function(e,r){o.default.ajax({url:i,type:"POST",data:t,headers:{"Content-Type":"application/octet-stream",Authorization:"UpToken "+n},success:function(t){console.log("domain",a.qiniuOptions),e({domain:a.qiniuOptions.baseUrl,hash:t.hash})},error:function(e){r(e)}})}))}},{key:"getBase64Size",value:function(e){var t=e.replace("data:image/png;base64,",""),n=t.indexOf("=");t.indexOf("=")>0&&(t=t.substring(0,n));var r=t.length;return parseInt(r-r/8*2)}},{key:"base64encode",value:function(e){return e.replace("data:image/png;base64,","")}}]),e}();t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={ajax:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign({url:"",type:"GET",dataType:"json",async:!0,data:null,headers:{},timeout:1e3,beforeSend:function(e){},success:function(e,t,n){},error:function(e,t,n){},complete:function(e,t){}},e);if(t.url&&t.type&&t.dataType&&t.async){var n=new XMLHttpRequest;n.addEventListener("loadstart",(function(e){t.beforeSend(n)})),n.addEventListener("load",(function(e){var r=n.status;if(r>=200&&r<300||304===r){var i=void 0;i="text"===n.responseType?n.responseText:"document"===n.responseType?n.responseXML:n.response,t.success(i,r,n)}else t.error(n,r,e)})),n.addEventListener("loadend",(function(e){t.complete(n,n.status)})),n.addEventListener("error",(function(e){t.error(n,n.status,e)})),n.addEventListener("timeout",(function(e){t.error(n,408,e)}));var i=!1,a=t.type.toUpperCase();"GET"!==a&&"DELETE"!==a||(i=!0,t.url+=r.getUrlParam(t.url,t.data)),n.open(t.type,t.url,t.async),n.responseType=t.dataType;var o=!0,s=!1,l=void 0;try{for(var c,d=Object.keys(t.headers)[Symbol.iterator]();!(o=(c=d.next()).done);o=!0){var u=c.value;n.setRequestHeader(u,t.headers[u])}}catch(e){s=!0,l=e}finally{try{!o&&d.return&&d.return()}finally{if(s)throw l}}t.async&&t.timeout&&(n.timeout=t.timeout),n.send(i?null:r.getQueryData(t.data))}else alert("参数有误")},getUrlParam:function(e,t){if(!t)return"";var n=t instanceof Object?r.getQueryString(t):t;return-1!==e.indexOf("?")?n:"?"+n},getQueryData:function(e){return e?"string"==typeof e||e instanceof FormData?e:r.getQueryString(e):null},getQueryString:function(e){var t=[];return e instanceof Object&&Object.keys(e).forEach((function(n){var r=e[n];Date,t.push(encodeURIComponent(n)+"="+encodeURIComponent(r))})),t.join("&")}};t.default=r},function(e,t,n){"use strict";n.r(t),n.d(t,"add",(function(){return C})),n.d(t,"after",(function(){return M})),n.d(t,"ary",(function(){return ot})),n.d(t,"assign",(function(){return Ht})),n.d(t,"assignIn",(function(){return jt})),n.d(t,"assignInWith",(function(){return $t})),n.d(t,"assignWith",(function(){return Qt})),n.d(t,"at",(function(){return Wn})),n.d(t,"attempt",(function(){return tr})),n.d(t,"before",(function(){return nr})),n.d(t,"bind",(function(){return ir})),n.d(t,"bindAll",(function(){return ar})),n.d(t,"bindKey",(function(){return sr})),n.d(t,"camelCase",(function(){return ri})),n.d(t,"capitalize",(function(){return Rr})),n.d(t,"castArray",(function(){return ii})),n.d(t,"ceil",(function(){return li})),n.d(t,"chain",(function(){return ci})),n.d(t,"chunk",(function(){return _i})),n.d(t,"clamp",(function(){return mi})),n.d(t,"clone",(function(){return pa})),n.d(t,"cloneDeep",(function(){return ma})),n.d(t,"cloneDeepWith",(function(){return ga})),n.d(t,"cloneWith",(function(){return fa})),n.d(t,"commit",(function(){return Ea})),n.d(t,"compact",(function(){return Sa})),n.d(t,"concat",(function(){return ha})),n.d(t,"cond",(function(){return Ka})),n.d(t,"conforms",(function(){return Ja})),n.d(t,"conformsTo",(function(){return eo})),n.d(t,"constant",(function(){return Le})),n.d(t,"countBy",(function(){return uo})),n.d(t,"create",(function(){return _o})),n.d(t,"curry",(function(){return mo})),n.d(t,"curryRight",(function(){return fo})),n.d(t,"debounce",(function(){return bo})),n.d(t,"deburr",(function(){return Mr})),n.d(t,"defaultTo",(function(){return vo})),n.d(t,"defaults",(function(){return yo})),n.d(t,"defaultsDeep",(function(){return Mo})),n.d(t,"defer",(function(){return Po})),n.d(t,"delay",(function(){return ko})),n.d(t,"difference",(function(){return Bo})),n.d(t,"differenceBy",(function(){return Yo})),n.d(t,"differenceWith",(function(){return Ho})),n.d(t,"divide",(function(){return qo})),n.d(t,"drop",(function(){return zo})),n.d(t,"dropRight",(function(){return Vo})),n.d(t,"dropRightWhile",(function(){return jo})),n.d(t,"dropWhile",(function(){return $o})),n.d(t,"each",(function(){return Ko})),n.d(t,"eachRight",(function(){return ts})),n.d(t,"endsWith",(function(){return ns})),n.d(t,"entries",(function(){return os})),n.d(t,"entriesIn",(function(){return ss})),n.d(t,"eq",(function(){return lt})),n.d(t,"escape",(function(){return us})),n.d(t,"escapeRegExp",(function(){return ms})),n.d(t,"every",(function(){return Es})),n.d(t,"extend",(function(){return jt})),n.d(t,"extendWith",(function(){return $t})),n.d(t,"fill",(function(){return bs})),n.d(t,"filter",(function(){return Ts})),n.d(t,"find",(function(){return Ns})),n.d(t,"findIndex",(function(){return Os})),n.d(t,"findKey",(function(){return As})),n.d(t,"findLast",(function(){return ws})),n.d(t,"findLastIndex",(function(){return Ds})),n.d(t,"findLastKey",(function(){return Ms})),n.d(t,"first",(function(){return Ls})),n.d(t,"flatMap",(function(){return Fs})),n.d(t,"flatMapDeep",(function(){return Us})),n.d(t,"flatMapDepth",(function(){return Bs})),n.d(t,"flatten",(function(){return zn})),n.d(t,"flattenDeep",(function(){return Gs})),n.d(t,"flattenDepth",(function(){return Ys})),n.d(t,"flip",(function(){return Hs})),n.d(t,"floor",(function(){return qs})),n.d(t,"flow",(function(){return Vs})),n.d(t,"flowRight",(function(){return Ws})),n.d(t,"forEach",(function(){return Ko})),n.d(t,"forEachRight",(function(){return ts})),n.d(t,"forIn",(function(){return js})),n.d(t,"forInRight",(function(){return $s})),n.d(t,"forOwn",(function(){return Qs})),n.d(t,"forOwnRight",(function(){return Ks})),n.d(t,"fromPairs",(function(){return Xs})),n.d(t,"functions",(function(){return Js})),n.d(t,"functionsIn",(function(){return el})),n.d(t,"get",(function(){return Un})),n.d(t,"groupBy",(function(){return nl})),n.d(t,"gt",(function(){return al})),n.d(t,"gte",(function(){return ol})),n.d(t,"has",(function(){return cl})),n.d(t,"hasIn",(function(){return za})),n.d(t,"head",(function(){return Ls})),n.d(t,"identity",(function(){return L})),n.d(t,"inRange",(function(){return pl})),n.d(t,"includes",(function(){return Sl})),n.d(t,"indexOf",(function(){return bl})),n.d(t,"initial",(function(){return vl})),n.d(t,"intersection",(function(){return Ol})),n.d(t,"intersectionBy",(function(){return Nl})),n.d(t,"intersectionWith",(function(){return Rl})),n.d(t,"invert",(function(){return Dl})),n.d(t,"invertBy",(function(){return Pl})),n.d(t,"invoke",(function(){return Ul})),n.d(t,"invokeMap",(function(){return Bl})),n.d(t,"isArguments",(function(){return Nt})),n.d(t,"isArray",(function(){return S})),n.d(t,"isArrayBuffer",(function(){return Hl})),n.d(t,"isArrayLike",(function(){return ft})),n.d(t,"isArrayLikeObject",(function(){return No})),n.d(t,"isBoolean",(function(){return ql})),n.d(t,"isBuffer",(function(){return Rt.a})),n.d(t,"isDate",(function(){return Wl})),n.d(t,"isElement",(function(){return jl})),n.d(t,"isEmpty",(function(){return Ql})),n.d(t,"isEqual",(function(){return Kl})),n.d(t,"isEqualWith",(function(){return Xl})),n.d(t,"isError",(function(){return er})),n.d(t,"isFinite",(function(){return Jl})),n.d(t,"isFunction",(function(){return k})),n.d(t,"isInteger",(function(){return ec})),n.d(t,"isLength",(function(){return gt})),n.d(t,"isMap",(function(){return sa})),n.d(t,"isMatch",(function(){return tc})),n.d(t,"isMatchWith",(function(){return nc})),n.d(t,"isNaN",(function(){return ic})),n.d(t,"isNative",(function(){return sc})),n.d(t,"isNil",(function(){return lc})),n.d(t,"isNull",(function(){return cc})),n.d(t,"isNumber",(function(){return rc})),n.d(t,"isObject",(function(){return y})),n.d(t,"isObjectLike",(function(){return m})),n.d(t,"isPlainObject",(function(){return Jn})),n.d(t,"isRegExp",(function(){return _c})),n.d(t,"isSafeInteger",(function(){return pc})),n.d(t,"isSet",(function(){return da})),n.d(t,"isString",(function(){return ml})),n.d(t,"isSymbol",(function(){return g})),n.d(t,"isTypedArray",(function(){return Mt})),n.d(t,"isUndefined",(function(){return mc})),n.d(t,"isWeakMap",(function(){return gc})),n.d(t,"isWeakSet",(function(){return fc})),n.d(t,"iteratee",(function(){return Ec})),n.d(t,"join",(function(){return hc})),n.d(t,"kebabCase",(function(){return bc})),n.d(t,"keyBy",(function(){return vc})),n.d(t,"keys",(function(){return Gt})),n.d(t,"keysIn",(function(){return Wt})),n.d(t,"last",(function(){return Go})),n.d(t,"lastIndexOf",(function(){return Oc})),n.d(t,"lodash",(function(){return ye})),n.d(t,"lowerCase",(function(){return Nc})),n.d(t,"lowerFirst",(function(){return Rc})),n.d(t,"lt",(function(){return Ic})),n.d(t,"lte",(function(){return xc})),n.d(t,"map",(function(){return ks})),n.d(t,"mapKeys",(function(){return Dc})),n.d(t,"mapValues",(function(){return wc})),n.d(t,"matches",(function(){return Mc})),n.d(t,"matchesProperty",(function(){return Lc})),n.d(t,"max",(function(){return kc})),n.d(t,"maxBy",(function(){return Fc})),n.d(t,"mean",(function(){return Gc})),n.d(t,"meanBy",(function(){return Yc})),n.d(t,"memoize",(function(){return xn})),n.d(t,"merge",(function(){return Hc})),n.d(t,"mergeWith",(function(){return wo})),n.d(t,"method",(function(){return qc})),n.d(t,"methodOf",(function(){return zc})),n.d(t,"min",(function(){return Vc})),n.d(t,"minBy",(function(){return Wc})),n.d(t,"mixin",(function(){return jc})),n.d(t,"multiply",(function(){return $c})),n.d(t,"negate",(function(){return Qc})),n.d(t,"next",(function(){return Jc})),n.d(t,"noop",(function(){return pe})),n.d(t,"now",(function(){return Eo})),n.d(t,"nth",(function(){return td})),n.d(t,"nthArg",(function(){return nd})),n.d(t,"omit",(function(){return ad})),n.d(t,"omitBy",(function(){return cd})),n.d(t,"once",(function(){return dd})),n.d(t,"orderBy",(function(){return gd})),n.d(t,"over",(function(){return Ed})),n.d(t,"overArgs",(function(){return bd})),n.d(t,"overEvery",(function(){return vd})),n.d(t,"overSome",(function(){return Td})),n.d(t,"pad",(function(){return Yd})),n.d(t,"padEnd",(function(){return Hd})),n.d(t,"padStart",(function(){return qd})),n.d(t,"parseInt",(function(){return Wd})),n.d(t,"partial",(function(){return $d})),n.d(t,"partialRight",(function(){return Kd})),n.d(t,"partition",(function(){return Xd})),n.d(t,"pick",(function(){return Jd})),n.d(t,"pickBy",(function(){return ld})),n.d(t,"plant",(function(){return eu})),n.d(t,"property",(function(){return $a})),n.d(t,"propertyOf",(function(){return tu})),n.d(t,"pull",(function(){return ou})),n.d(t,"pullAll",(function(){return au})),n.d(t,"pullAllBy",(function(){return su})),n.d(t,"pullAllWith",(function(){return lu})),n.d(t,"pullAt",(function(){return uu})),n.d(t,"random",(function(){return Su})),n.d(t,"range",(function(){return Cu})),n.d(t,"rangeRight",(function(){return yu})),n.d(t,"rearg",(function(){return Ou})),n.d(t,"reduce",(function(){return Ru})),n.d(t,"reduceRight",(function(){return Iu})),n.d(t,"reject",(function(){return xu})),n.d(t,"remove",(function(){return Du})),n.d(t,"repeat",(function(){return wu})),n.d(t,"replace",(function(){return Mu})),n.d(t,"rest",(function(){return Lu})),n.d(t,"result",(function(){return Pu})),n.d(t,"reverse",(function(){return Fu})),n.d(t,"round",(function(){return Uu})),n.d(t,"sample",(function(){return Yu})),n.d(t,"sampleSize",(function(){return Vu})),n.d(t,"set",(function(){return Wu})),n.d(t,"setWith",(function(){return ju})),n.d(t,"shuffle",(function(){return Ku})),n.d(t,"size",(function(){return Xu})),n.d(t,"slice",(function(){return Zu})),n.d(t,"snakeCase",(function(){return Ju})),n.d(t,"some",(function(){return t_})),n.d(t,"sortBy",(function(){return n_})),n.d(t,"sortedIndex",(function(){return s_})),n.d(t,"sortedIndexBy",(function(){return l_})),n.d(t,"sortedIndexOf",(function(){return c_})),n.d(t,"sortedLastIndex",(function(){return d_})),n.d(t,"sortedLastIndexBy",(function(){return u_})),n.d(t,"sortedLastIndexOf",(function(){return __})),n.d(t,"sortedUniq",(function(){return m_})),n.d(t,"sortedUniqBy",(function(){return g_})),n.d(t,"split",(function(){return f_})),n.d(t,"spread",(function(){return S_})),n.d(t,"startCase",(function(){return h_})),n.d(t,"startsWith",(function(){return b_})),n.d(t,"stubArray",(function(){return Ni})),n.d(t,"stubFalse",(function(){return ac.a})),n.d(t,"stubObject",(function(){return v_})),n.d(t,"stubString",(function(){return T_})),n.d(t,"stubTrue",(function(){return C_})),n.d(t,"subtract",(function(){return y_})),n.d(t,"sum",(function(){return O_})),n.d(t,"sumBy",(function(){return N_})),n.d(t,"tail",(function(){return R_})),n.d(t,"take",(function(){return A_})),n.d(t,"takeRight",(function(){return I_})),n.d(t,"takeRightWhile",(function(){return x_})),n.d(t,"takeWhile",(function(){return D_})),n.d(t,"tap",(function(){return w_})),n.d(t,"template",(function(){return j_})),n.d(t,"templateSettings",(function(){return B_})),n.d(t,"throttle",(function(){return $_})),n.d(t,"thru",(function(){return Q_})),n.d(t,"times",(function(){return X_})),n.d(t,"toArray",(function(){return Zc})),n.d(t,"toFinite",(function(){return D})),n.d(t,"toInteger",(function(){return w})),n.d(t,"toIterator",(function(){return Z_})),n.d(t,"toJSON",(function(){return ep})),n.d(t,"toLength",(function(){return Ss})),n.d(t,"toLower",(function(){return tp})),n.d(t,"toNumber",(function(){return x})),n.d(t,"toPairs",(function(){return os})),n.d(t,"toPairsIn",(function(){return ss})),n.d(t,"toPath",(function(){return np})),n.d(t,"toPlainObject",(function(){return Ao})),n.d(t,"toSafeInteger",(function(){return rp})),n.d(t,"toString",(function(){return Ln})),n.d(t,"toUpper",(function(){return ip})),n.d(t,"transform",(function(){return ap})),n.d(t,"trim",(function(){return cp})),n.d(t,"trimEnd",(function(){return up})),n.d(t,"trimStart",(function(){return pp})),n.d(t,"truncate",(function(){return gp})),n.d(t,"unary",(function(){return fp})),n.d(t,"unescape",(function(){return bp})),n.d(t,"union",(function(){return Cp})),n.d(t,"unionBy",(function(){return yp})),n.d(t,"unionWith",(function(){return Op})),n.d(t,"uniq",(function(){return Np})),n.d(t,"uniqBy",(function(){return Rp})),n.d(t,"uniqWith",(function(){return Ap})),n.d(t,"uniqueId",(function(){return xp})),n.d(t,"unset",(function(){return Dp})),n.d(t,"unzip",(function(){return Mp})),n.d(t,"unzipWith",(function(){return Lp})),n.d(t,"update",(function(){return kp})),n.d(t,"updateWith",(function(){return Fp})),n.d(t,"upperCase",(function(){return Up})),n.d(t,"upperFirst",(function(){return Nr})),n.d(t,"value",(function(){return ep})),n.d(t,"valueOf",(function(){return ep})),n.d(t,"values",(function(){return fl})),n.d(t,"valuesIn",(function(){return Bp})),n.d(t,"without",(function(){return Gp})),n.d(t,"words",(function(){return ei})),n.d(t,"wrap",(function(){return Yp})),n.d(t,"wrapperAt",(function(){return Hp})),n.d(t,"wrapperChain",(function(){return qp})),n.d(t,"wrapperCommit",(function(){return Ea})),n.d(t,"wrapperLodash",(function(){return ye})),n.d(t,"wrapperNext",(function(){return Jc})),n.d(t,"wrapperPlant",(function(){return eu})),n.d(t,"wrapperReverse",(function(){return zp})),n.d(t,"wrapperToIterator",(function(){return Z_})),n.d(t,"wrapperValue",(function(){return ep})),n.d(t,"xor",(function(){return Wp})),n.d(t,"xorBy",(function(){return jp})),n.d(t,"xorWith",(function(){return $p})),n.d(t,"zip",(function(){return Qp})),n.d(t,"zipObject",(function(){return Xp})),n.d(t,"zipObjectDeep",(function(){return Zp})),n.d(t,"zipWith",(function(){return Jp})),n.d(t,"default",(function(){return Nm}));var r=n(0),i=r.a.Symbol,a=Object.prototype,o=a.hasOwnProperty,s=a.toString,l=i?i.toStringTag:void 0;var c=function(e){var t=o.call(e,l),n=e[l];try{e[l]=void 0;var r=!0}catch(e){}var i=s.call(e);return r&&(t?e[l]=n:delete e[l]),i},d=Object.prototype.toString;var u=function(e){return d.call(e)},_=i?i.toStringTag:void 0;var p=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":_&&_ in Object(e)?c(e):u(e)};var m=function(e){return null!=e&&"object"==typeof e};var g=function(e){return"symbol"==typeof e||m(e)&&"[object Symbol]"==p(e)};var f=function(e){return"number"==typeof e?e:g(e)?NaN:+e};var E=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}},Ae=Re(J),Ie=/\{\n\/\* \[wrapped with (.+)\] \*/,xe=/,? & /;var De=function(e){var t=e.match(Ie);return t?t[1].split(xe):[]},we=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;var Me=function(e,t){var n=t.length;if(!n)return e;var r=n-1;return t[r]=(n>1?"& ":"")+t[r],t=t.join(n>2?", ":" "),e.replace(we,"{\n/* [wrapped with "+t+"] */\n")};var Le=function(e){return function(){return e}},Pe=function(){try{var e=K(Object,"defineProperty");return e({},"",{}),e}catch(e){}}(),ke=Re(Pe?function(e,t){return Pe(e,"toString",{configurable:!0,enumerable:!1,value:Le(t),writable:!0})}:L);var Fe=function(e,t){for(var n=-1,r=null==e?0:e.length;++n-1},qe=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];var ze=function(e,t){return Fe(qe,(function(n){var r="_."+n[0];t&n[1]&&!He(e,r)&&e.push(r)})),e.sort()};var Ve=function(e,t,n){var r=t+"";return ke(e,Me(r,ze(De(r),n)))};var We=function(e,t,n,r,i,a,o,s,l,c){var d=8&t;t|=d?32:64,4&(t&=~(d?64:32))||(t&=-4);var u=[e,t,i,d?a:void 0,d?o:void 0,d?void 0:a,d?void 0:o,s,l,c],_=n.apply(void 0,u);return Oe(e)&&Ae(_,u),_.placeholder=r,Ve(_,e,t)};var je=function(e){return e.placeholder},$e=/^(?:0|[1-9]\d*)$/;var Qe=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&$e.test(e))&&e>-1&&e%1==0&&e1&&b.reverse(),_&&d-1&&e%1==0&&e<=9007199254740991};var ft=function(e){return null!=e&>(e.length)&&!k(e)};var Et=function(e,t,n){if(!y(n))return!1;var r=typeof t;return!!("number"==r?ft(n)&&Qe(t,n.length):"string"==r&&t in n)&<(n[t],e)};var St=function(e){return mt((function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,o=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,o&&Et(n[0],n[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++r-1};var fn=function(e,t){var n=this.__data__,r=un(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function En(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t0&&r(l)?n>1?e(l,n-1,r,i,a):Gn(a,l):i||(a[a.length]=l)}return a};var zn=function(e){return(null==e?0:e.length)?qn(e,1):[]};var Vn=function(e){return ke(pt(e,void 0,zn),e+"")},Wn=Vn(Bn),jn=kt(Object.getPrototypeOf,Object),$n=Function.prototype,Qn=Object.prototype,Kn=$n.toString,Xn=Qn.hasOwnProperty,Zn=Kn.call(Object);var Jn=function(e){if(!m(e)||"[object Object]"!=p(e))return!1;var t=jn(e);if(null===t)return!0;var n=Xn.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&Kn.call(n)==Zn};var er=function(e){if(!m(e))return!1;var t=p(e);return"[object Error]"==t||"[object DOMException]"==t||"string"==typeof e.message&&"string"==typeof e.name&&!Jn(e)},tr=mt((function(e,t){try{return ie(e,void 0,t)}catch(e){return er(e)?e:new Error(e)}}));var nr=function(e,t){var n;if("function"!=typeof t)throw new TypeError("Expected a function");return e=w(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=void 0),n}},rr=mt((function(e,t,n){var r=1;if(n.length){var i=Ze(n,je(rr));r|=32}return at(e,r,t,n,i)}));rr.placeholder={};var ir=rr,ar=Vn((function(e,t){return Fe(t,(function(t){t=kn(t),st(e,t,ir(e[t],e))})),e})),or=mt((function(e,t,n){var r=3;if(n.length){var i=Ze(n,je(or));r|=32}return at(t,r,e,n,i)}));or.placeholder={};var sr=or;var lr=function(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),(n=n>i?i:n)<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(i);++r=r?e:lr(e,t,n)},dr=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");var ur=function(e){return dr.test(e)};var _r=function(e){return e.split("")},pr="[\\ud800-\\udfff]",mr="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",gr="\\ud83c[\\udffb-\\udfff]",fr="[^\\ud800-\\udfff]",Er="(?:\\ud83c[\\udde6-\\uddff]){2}",Sr="[\\ud800-\\udbff][\\udc00-\\udfff]",hr="(?:"+mr+"|"+gr+")"+"?",br="[\\ufe0e\\ufe0f]?"+hr+("(?:\\u200d(?:"+[fr,Er,Sr].join("|")+")[\\ufe0e\\ufe0f]?"+hr+")*"),vr="(?:"+[fr+mr+"?",mr,Er,Sr,pr].join("|")+")",Tr=RegExp(gr+"(?="+gr+")|"+vr+br,"g");var Cr=function(e){return e.match(Tr)||[]};var yr=function(e){return ur(e)?Cr(e):_r(e)};var Or=function(e){return function(t){t=Ln(t);var n=ur(t)?yr(t):void 0,r=n?n[0]:t.charAt(0),i=n?cr(n,1).join(""):t.slice(1);return r[e]()+i}},Nr=Or("toUpperCase");var Rr=function(e){return Nr(Ln(e).toLowerCase())};var Ar=function(e,t,n,r){var i=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++i]);++i=t?e:t)),e};var mi=function(e,t,n){return void 0===n&&(n=t,t=void 0),void 0!==n&&(n=(n=x(n))==n?n:0),void 0!==t&&(t=(t=x(t))==t?t:0),pi(x(e),t,n)};var gi=function(){this.__data__=new Sn,this.size=0};var fi=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n};var Ei=function(e){return this.__data__.get(e)};var Si=function(e){return this.__data__.has(e)};var hi=function(e,t){var n=this.__data__;if(n instanceof Sn){var r=n.__data__;if(!hn||r.length<199)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new An(r)}return n.set(e,t),this.size=n.size,this};function bi(e){var t=this.__data__=new Sn(e);this.size=t.size}bi.prototype.clear=gi,bi.prototype.delete=fi,bi.prototype.get=Ei,bi.prototype.has=Si,bi.prototype.set=hi;var vi=bi;var Ti=function(e,t){return e&&ut(t,Gt(t),e)};var Ci=function(e,t){return e&&ut(t,Wt(t),e)},yi=n(6);var Oi=function(e,t){for(var n=-1,r=null==e?0:e.length,i=0,a=[];++ns))return!1;var c=a.get(e);if(c&&a.get(t))return c==t;var d=-1,u=!0,_=2&n?new Ca:void 0;for(a.set(e,t),a.set(t,e);++d=t||n<0||u&&e-c>=a}function f(){var e=Eo();if(g(e))return E(e);s=setTimeout(f,function(e){var n=t-(e-l);return u?ho(n,a-(e-c)):n}(e))}function E(e){return s=void 0,_&&r?p(e):(r=i=void 0,o)}function S(){var e=Eo(),n=g(e);if(r=arguments,i=this,l=e,n){if(void 0===s)return m(l);if(u)return clearTimeout(s),s=setTimeout(f,t),p(l)}return void 0===s&&(s=setTimeout(f,t)),o}return t=x(t)||0,y(n)&&(d=!!n.leading,a=(u="maxWait"in n)?So(x(n.maxWait)||0,t):a,_="trailing"in n?!!n.trailing:_),S.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=i=s=void 0},S.flush=function(){return void 0===s?o:E(Eo())},S};var vo=function(e,t){return null==e||e!=e?t:e},To=Object.prototype,Co=To.hasOwnProperty,yo=mt((function(e,t){e=Object(e);var n=-1,r=t.length,i=r>2?t[2]:void 0;for(i&&Et(t[0],t[1],i)&&(r=1);++n=200&&(a=Oa,o=!1,t=new Ca(t));e:for(;++i=0&&e.slice(n,i)==t};var rs=function(e,t){return E(t,(function(t){return[t,e[t]]}))};var is=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=[e,e]})),n};var as=function(e){return function(t){var n=Vi(t);return"[object Map]"==n?Ra(t):"[object Set]"==n?is(t):rs(t,e(t))}},os=as(Gt),ss=as(Wt),ls=Ir({"&":"&","<":"<",">":">",'"':""","'":"'"}),cs=/[&<>"']/g,ds=RegExp(cs.source);var us=function(e){return(e=Ln(e))&&ds.test(e)?e.replace(cs,ls):e},_s=/[\\^$.*+?()[\]{}|]/g,ps=RegExp(_s.source);var ms=function(e){return(e=Ln(e))&&ps.test(e)?e.replace(_s,"\\$&"):e};var gs=function(e,t){for(var n=-1,r=null==e?0:e.length;++ni?0:i+n),(r=void 0===r||r>i?i:w(r))<0&&(r+=i),r=n>r?0:Ss(r);n-1?i[a?t[o]:o]:void 0}},ys=Math.max;var Os=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:w(n);return i<0&&(i=ys(r+i,0)),Ue(e,Qa(t,3),i)},Ns=Cs(Os);var Rs=function(e,t,n){var r;return n(e,(function(e,n,i){if(t(e,n,i))return r=n,!1})),r};var As=function(e,t){return Rs(e,Qa(t,3),io)},Is=Math.max,xs=Math.min;var Ds=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r-1;return void 0!==n&&(i=w(n),i=n<0?Is(r+i,0):xs(i,r-1)),Ue(e,Qa(t,3),i,!0)},ws=Cs(Ds);var Ms=function(e,t){return Rs(e,Qa(t,3),Jo)};var Ls=function(e){return e&&e.length?e[0]:void 0};var Ps=function(e,t){var n=-1,r=ft(e)?Array(e.length):[];return oo(e,(function(e,i,a){r[++n]=t(e,i,a)})),r};var ks=function(e,t){return(S(e)?E:Ps)(e,Qa(t,3))};var Fs=function(e,t){return qn(ks(e,t),1)};var Us=function(e,t){return qn(ks(e,t),1/0)};var Bs=function(e,t,n){return n=void 0===n?1:w(n),qn(ks(e,t),n)};var Gs=function(e){return(null==e?0:e.length)?qn(e,1/0):[]};var Ys=function(e,t){return(null==e?0:e.length)?(t=void 0===t?1:w(t),qn(e,t)):[]};var Hs=function(e){return at(e,512)},qs=si("floor");var zs=function(e){return Vn((function(t){var n=t.length,r=n,i=he.prototype.thru;for(e&&t.reverse();r--;){var a=t[r];if("function"!=typeof a)throw new TypeError("Expected a function");if(i&&!o&&"wrapper"==Ee(a))var o=new he([],!0)}for(r=o?r:n;++rt};var il=function(e){return function(t,n){return"string"==typeof t&&"string"==typeof n||(t=x(t),n=x(n)),e(t,n)}},al=il(rl),ol=il((function(e,t){return e>=t})),sl=Object.prototype.hasOwnProperty;var ll=function(e,t){return null!=e&&sl.call(e,t)};var cl=function(e,t){return null!=e&&qa(e,t,ll)},dl=Math.max,ul=Math.min;var _l=function(e,t,n){return e>=ul(t,n)&&e-1:!!i&&Ye(e,t,n)>-1},hl=Math.max;var bl=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=null==n?0:w(n);return i<0&&(i=hl(r+i,0)),Ye(e,t,i)};var vl=function(e){return(null==e?0:e.length)?lr(e,0,-1):[]},Tl=Math.min;var Cl=function(e,t,n){for(var r=n?Fo:He,i=e[0].length,a=e.length,o=a,s=Array(a),l=1/0,c=[];o--;){var d=e[o];o&&t&&(d=E(d,xt(t))),l=Tl(d.length,l),s[o]=!n&&(t||i>=120&&d.length>=120)?new Ca(o&&d):void 0}d=e[0];var u=-1,_=s[0];e:for(;++u=-9007199254740991&&e<=9007199254740991};var mc=function(e){return void 0===e};var gc=function(e){return m(e)&&"[object WeakMap]"==Vi(e)};var fc=function(e){return m(e)&&"[object WeakSet]"==p(e)};var Ec=function(e){return Qa("function"==typeof e?e:_a(e,1))},Sc=Array.prototype.join;var hc=function(e,t){return null==e?"":Sc.call(e,t)},bc=ni((function(e,t,n){return e+(n?"-":"")+t.toLowerCase()})),vc=lo((function(e,t,n){st(e,n,t)}));var Tc=function(e,t,n){for(var r=n+1;r--;)if(e[r]===t)return r;return r},Cc=Math.max,yc=Math.min;var Oc=function(e,t,n){var r=null==e?0:e.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=w(n))<0?Cc(r+i,0):yc(i,r-1)),t==t?Tc(e,t,i):Ue(e,Be,i,!0)},Nc=ni((function(e,t,n){return e+(n?" ":"")+t.toLowerCase()})),Rc=Or("toLowerCase");var Ac=function(e,t){return e=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}};var ed=function(e,t){var n=e.length;if(n)return Qe(t+=t<0?n:0,n)?e[t]:void 0};var td=function(e,t){return e&&e.length?ed(e,w(t)):void 0};var nd=function(e){return e=w(e),mt((function(t){return ed(t,e)}))};var rd=function(e,t){return t=Pn(t,e),null==(e=kl(e,t))||delete e[kn(Go(t))]};var id=function(e){return Jn(e)?void 0:e},ad=Vn((function(e,t){var n={};if(null==e)return n;var r=!1;t=E(t,(function(t){return t=Pn(t,e),r||(r=t.length>1),t})),ut(e,Pi(e),n),r&&(n=_a(n,7,id));for(var i=t.length;i--;)rd(n,t[i]);return n}));var od=function(e,t,n,r){if(!y(e))return e;for(var i=-1,a=(t=Pn(t,e)).length,o=a-1,s=e;null!=s&&++it||a&&o&&l&&!s&&!c||r&&o&&l||!n&&l||!i)return 1;if(!r&&!a&&!c&&e=s?l:l*("desc"==n[r]?-1:1)}return e.index-t.index};var md=function(e,t,n){var r=-1;t=E(t.length?t:[L],xt(Qa));var i=Ps(e,(function(e,n,i){return{criteria:E(t,(function(t){return t(e)})),index:++r,value:e}}));return ud(i,(function(e,t){return pd(e,t,n)}))};var gd=function(e,t,n,r){return null==e?[]:(S(t)||(t=null==t?[]:[t]),S(n=r?void 0:n)||(n=null==n?[]:[n]),md(e,t,n))};var fd=function(e){return Vn((function(t){return t=E(t,xt(Qa)),mt((function(n){var r=this;return e(t,(function(e){return ie(e,r,n)}))}))}))},Ed=fd(E),Sd=mt,hd=Math.min,bd=Sd((function(e,t){var n=(t=1==t.length&&S(t[0])?E(t[0],xt(Qa)):E(qn(t,1),xt(Qa))).length;return mt((function(r){for(var i=-1,a=hd(r.length,n);++i9007199254740991)return n;do{t%2&&(n+=e),(t=Cd(t/2))&&(e+=e)}while(t);return n},Od=Wa("length"),Nd="[\\ud800-\\udfff]",Rd="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",Ad="[^\\ud800-\\udfff]",Id="(?:\\ud83c[\\udde6-\\uddff]){2}",xd="[\\ud800-\\udbff][\\udc00-\\udfff]",Dd="(?:"+Rd+"|\\ud83c[\\udffb-\\udfff])"+"?",wd="[\\ufe0e\\ufe0f]?"+Dd+("(?:\\u200d(?:"+[Ad,Id,xd].join("|")+")[\\ufe0e\\ufe0f]?"+Dd+")*"),Md="(?:"+[Ad+Rd+"?",Rd,Id,xd,Nd].join("|")+")",Ld=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+Md+wd,"g");var Pd=function(e){for(var t=Ld.lastIndex=0;Ld.test(e);)++t;return t};var kd=function(e){return ur(e)?Pd(e):Od(e)},Fd=Math.ceil;var Ud=function(e,t){var n=(t=void 0===t?" ":v(t)).length;if(n<2)return n?yd(t,e):t;var r=yd(t,Fd(e/kd(t)));return ur(t)?cr(yr(r),0,e).join(""):r.slice(0,e)},Bd=Math.ceil,Gd=Math.floor;var Yd=function(e,t,n){e=Ln(e);var r=(t=w(t))?kd(e):0;if(!t||r>=t)return e;var i=(t-r)/2;return Ud(Gd(i),n)+e+Ud(Bd(i),n)};var Hd=function(e,t,n){e=Ln(e);var r=(t=w(t))?kd(e):0;return t&&r-1;)s!==e&&ru.call(s,l,1),ru.call(e,l,1);return e};var au=function(e,t){return e&&e.length&&t&&t.length?iu(e,t):e},ou=mt(au);var su=function(e,t,n){return e&&e.length&&t&&t.length?iu(e,t,Qa(n,2)):e};var lu=function(e,t,n){return e&&e.length&&t&&t.length?iu(e,t,void 0,n):e},cu=Array.prototype.splice;var du=function(e,t){for(var n=e?t.length:0,r=n-1;n--;){var i=t[n];if(n==r||i!==a){var a=i;Qe(i)?cu.call(e,i,1):rd(e,i)}}return e},uu=Vn((function(e,t){var n=null==e?0:e.length,r=Bn(e,t);return du(e,E(t,(function(e){return Qe(e,n)?+e:e})).sort(_d)),r})),_u=Math.floor,pu=Math.random;var mu=function(e,t){return e+_u(pu()*(t-e+1))},gu=parseFloat,fu=Math.min,Eu=Math.random;var Su=function(e,t,n){if(n&&"boolean"!=typeof n&&Et(e,t,n)&&(t=n=void 0),void 0===n&&("boolean"==typeof t?(n=t,t=void 0):"boolean"==typeof e&&(n=e,e=void 0)),void 0===e&&void 0===t?(e=0,t=1):(e=D(e),void 0===t?(t=e,e=0):t=D(t)),e>t){var r=e;e=t,t=r}if(n||e%1||t%1){var i=Eu();return fu(e+i*(t-e+gu("1e-"+((i+"").length-1))),t)}return mu(e,t)},hu=Math.ceil,bu=Math.max;var vu=function(e,t,n,r){for(var i=-1,a=bu(hu((t-e)/(n||1)),0),o=Array(a);a--;)o[r?a:++i]=e,e+=n;return o};var Tu=function(e){return function(t,n,r){return r&&"number"!=typeof r&&Et(t,n,r)&&(n=r=void 0),t=D(t),void 0===n?(n=t,t=0):n=D(n),r=void 0===r?t1&&Et(e,t[0],t[1])?t=[]:n>2&&Et(t[0],t[1],t[2])&&(t=[t[0]]),md(e,qn(t,1),[])})),r_=Math.floor,i_=Math.min;var a_=function(e,t,n,r){t=n(t);for(var i=0,a=null==e?0:e.length,o=t!=t,s=null===t,l=g(t),c=void 0===t;i>>1,o=e[a];null!==o&&!g(o)&&(n?o<=t:o>>0)?(e=Ln(e))&&("string"==typeof t||null!=t&&!_c(t))&&!(t=v(t))&&ur(e)?cr(yr(e),0,n):e.split(t,n):[]},E_=Math.max;var S_=function(e,t){if("function"!=typeof e)throw new TypeError("Expected a function");return t=null==t?0:E_(w(t),0),mt((function(n){var r=n[t],i=cr(n,0,t);return r&&Gn(i,r),ie(e,this,i)}))},h_=ni((function(e,t,n){return e+(n?" ":"")+Nr(t)}));var b_=function(e,t,n){return e=Ln(e),n=null==n?0:pi(w(n),0,e.length),t=v(t),e.slice(n,n+t.length)==t};var v_=function(){return{}};var T_=function(){return""};var C_=function(){return!0},y_=T((function(e,t){return e-t}),0);var O_=function(e){return e&&e.length?Uc(e,L):0};var N_=function(e,t){return e&&e.length?Uc(e,Qa(t,2)):0};var R_=function(e){var t=null==e?0:e.length;return t?lr(e,1,t):[]};var A_=function(e,t,n){return e&&e.length?(t=n||void 0===t?1:w(t),lr(e,0,t<0?0:t)):[]};var I_=function(e,t,n){var r=null==e?0:e.length;return r?(t=n||void 0===t?1:w(t),lr(e,(t=r-t)<0?0:t,r)):[]};var x_=function(e,t){return e&&e.length?Wo(e,Qa(t,3),!1,!0):[]};var D_=function(e,t){return e&&e.length?Wo(e,Qa(t,3)):[]};var w_=function(e,t){return t(e),e},M_=Object.prototype,L_=M_.hasOwnProperty;var P_=function(e,t,n,r){return void 0===e||lt(e,M_[n])&&!L_.call(r,n)?t:e},k_={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};var F_=function(e){return"\\"+k_[e]},U_=/<%=([\s\S]+?)%>/g,B_={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:U_,variable:"",imports:{_:{escape:us}}},G_=/\b__p \+= '';/g,Y_=/\b(__p \+=) '' \+/g,H_=/(__e\(.*?\)|\b__t\)) \+\n'';/g,q_=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,z_=/($^)/,V_=/['\n\r\u2028\u2029\\]/g,W_=Object.prototype.hasOwnProperty;var j_=function(e,t,n){var r=B_.imports._.templateSettings||B_;n&&Et(e,t,n)&&(t=void 0),e=Ln(e),t=$t({},t,r,P_);var i,a,o=$t({},t.imports,r.imports,P_),s=Gt(o),l=gl(o,s),c=0,d=t.interpolate||z_,u="__p += '",_=RegExp((t.escape||z_).source+"|"+d.source+"|"+(d===U_?q_:z_).source+"|"+(t.evaluate||z_).source+"|$","g"),p=W_.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";e.replace(_,(function(t,n,r,o,s,l){return r||(r=o),u+=e.slice(c,l).replace(V_,F_),n&&(i=!0,u+="' +\n__e("+n+") +\n'"),s&&(a=!0,u+="';\n"+s+";\n__p += '"),r&&(u+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),c=l+t.length,t})),u+="';\n";var m=W_.call(t,"variable")&&t.variable;m||(u="with (obj) {\n"+u+"\n}\n"),u=(a?u.replace(G_,""):u).replace(Y_,"$1").replace(H_,"$1;"),u="function("+(m||"obj")+") {\n"+(m?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(a?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+u+"return __p\n}";var g=tr((function(){return Function(s,p+"return "+u).apply(void 0,l)}));if(g.source=u,er(g))throw g;return g};var $_=function(e,t,n){var r=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return y(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),bo(e,t,{leading:r,maxWait:t,trailing:i})};var Q_=function(e,t){return t(e)},K_=Math.min;var X_=function(e,t){if((e=w(e))<1||e>9007199254740991)return[];var n=4294967295,r=K_(e,4294967295);t=Qo(t),e-=4294967295;for(var i=vt(r,t);++n-1;);return n};var sp=function(e,t){for(var n=-1,r=e.length;++n-1;);return n},lp=/^\s+|\s+$/g;var cp=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(lp,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=yr(t),a=sp(r,i),o=op(r,i)+1;return cr(r,a,o).join("")},dp=/\s+$/;var up=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(dp,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=op(r,yr(t))+1;return cr(r,0,i).join("")},_p=/^\s+/;var pp=function(e,t,n){if((e=Ln(e))&&(n||void 0===t))return e.replace(_p,"");if(!e||!(t=v(t)))return e;var r=yr(e),i=sp(r,yr(t));return cr(r,i).join("")},mp=/\w*$/;var gp=function(e,t){var n=30,r="...";if(y(t)){var i="separator"in t?t.separator:i;n="length"in t?w(t.length):n,r="omission"in t?v(t.omission):r}var a=(e=Ln(e)).length;if(ur(e)){var o=yr(e);a=o.length}if(n>=a)return e;var s=n-kd(r);if(s<1)return r;var l=o?cr(o,0,s).join(""):e.slice(0,s);if(void 0===i)return l+r;if(o&&(s+=l.length-s),_c(i)){if(e.slice(s).search(i)){var c,d=l;for(i.global||(i=RegExp(i.source,Ln(mp.exec(i))+"g")),i.lastIndex=0;c=i.exec(d);)var u=c.index;l=l.slice(0,void 0===u?s:u)}}else if(e.indexOf(v(i),s)!=s){var _=l.lastIndexOf(i);_>-1&&(l=l.slice(0,_))}return l+r};var fp=function(e){return ot(e,1)},Ep=Ir({"&":"&","<":"<",">":">",""":'"',"'":"'"}),Sp=/&(?:amp|lt|gt|quot|#39);/g,hp=RegExp(Sp.source);var bp=function(e){return(e=Ln(e))&&hp.test(e)?e.replace(Sp,Ep):e},vp=Ui&&1/Aa(new Ui([,-0]))[1]==1/0?function(e){return new Ui(e)}:pe;var Tp=function(e,t,n){var r=-1,i=He,a=e.length,o=!0,s=[],l=s;if(n)o=!1,i=Fo;else if(a>=200){var c=t?null:vp(e);if(c)return Aa(c);o=!1,i=Oa,l=new Ca}else l=t?[]:s;e:for(;++r1||this.__actions__.length)&&r instanceof _e&&Qe(n)?((r=r.slice(n,+n+(t?1:0))).__actions__.push({func:Q_,args:[i],thisArg:void 0}),new he(r,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(i)}));var qp=function(){return ci(this)};var zp=function(){var e=this.__wrapped__;if(e instanceof _e){var t=e;return this.__actions__.length&&(t=new _e(this)),(t=t.reverse()).__actions__.push({func:Q_,args:[Fu],thisArg:void 0}),new he(t,this.__chain__)}return this.thru(Fu)};var Vp=function(e,t,n){var r=e.length;if(r<2)return r?Tp(e[0]):[];for(var i=-1,a=Array(r);++i1?e[t-1]:void 0;return n="function"==typeof n?(e.pop(),n):void 0,Lp(e,n)})),em={chunk:_i,compact:Sa,concat:ha,difference:Bo,differenceBy:Yo,differenceWith:Ho,drop:zo,dropRight:Vo,dropRightWhile:jo,dropWhile:$o,fill:bs,findIndex:Os,findLastIndex:Ds,first:Ls,flatten:zn,flattenDeep:Gs,flattenDepth:Ys,fromPairs:Xs,head:Ls,indexOf:bl,initial:vl,intersection:Ol,intersectionBy:Nl,intersectionWith:Rl,join:hc,last:Go,lastIndexOf:Oc,nth:td,pull:ou,pullAll:au,pullAllBy:su,pullAllWith:lu,pullAt:uu,remove:Du,reverse:Fu,slice:Zu,sortedIndex:s_,sortedIndexBy:l_,sortedIndexOf:c_,sortedLastIndex:d_,sortedLastIndexBy:u_,sortedLastIndexOf:__,sortedUniq:m_,sortedUniqBy:g_,tail:R_,take:A_,takeRight:I_,takeRightWhile:x_,takeWhile:D_,union:Cp,unionBy:yp,unionWith:Op,uniq:Np,uniqBy:Rp,uniqWith:Ap,unzip:Mp,unzipWith:Lp,without:Gp,xor:Wp,xorBy:jp,xorWith:$p,zip:Qp,zipObject:Xp,zipObjectDeep:Zp,zipWith:Jp},tm={countBy:uo,each:Ko,eachRight:ts,every:Es,filter:Ts,find:Ns,findLast:ws,flatMap:Fs,flatMapDeep:Us,flatMapDepth:Bs,forEach:Ko,forEachRight:ts,groupBy:nl,includes:Sl,invokeMap:Bl,keyBy:vc,map:ks,orderBy:gd,partition:Xd,reduce:Ru,reduceRight:Iu,reject:xu,sample:Yu,sampleSize:Vu,shuffle:Ku,size:Xu,some:t_,sortBy:n_},nm={now:Eo},rm={after:M,ary:ot,before:nr,bind:ir,bindKey:sr,curry:mo,curryRight:fo,debounce:bo,defer:Po,delay:ko,flip:Hs,memoize:xn,negate:Qc,once:dd,overArgs:bd,partial:$d,partialRight:Kd,rearg:Ou,rest:Lu,spread:S_,throttle:$_,unary:fp,wrap:Yp},im={castArray:ii,clone:pa,cloneDeep:ma,cloneDeepWith:ga,cloneWith:fa,conformsTo:eo,eq:lt,gt:al,gte:ol,isArguments:Nt,isArray:S,isArrayBuffer:Hl,isArrayLike:ft,isArrayLikeObject:No,isBoolean:ql,isBuffer:Rt.a,isDate:Wl,isElement:jl,isEmpty:Ql,isEqual:Kl,isEqualWith:Xl,isError:er,isFinite:Jl,isFunction:k,isInteger:ec,isLength:gt,isMap:sa,isMatch:tc,isMatchWith:nc,isNaN:ic,isNative:sc,isNil:lc,isNull:cc,isNumber:rc,isObject:y,isObjectLike:m,isPlainObject:Jn,isRegExp:_c,isSafeInteger:pc,isSet:da,isString:ml,isSymbol:g,isTypedArray:Mt,isUndefined:mc,isWeakMap:gc,isWeakSet:fc,lt:Ic,lte:xc,toArray:Zc,toFinite:D,toInteger:w,toLength:Ss,toNumber:x,toPlainObject:Ao,toSafeInteger:rp,toString:Ln},am={add:C,ceil:li,divide:qo,floor:qs,max:kc,maxBy:Fc,mean:Gc,meanBy:Yc,min:Vc,minBy:Wc,multiply:$c,round:Uu,subtract:y_,sum:O_,sumBy:N_},om={clamp:mi,inRange:pl,random:Su},sm={assign:Ht,assignIn:jt,assignInWith:$t,assignWith:Qt,at:Wn,create:_o,defaults:yo,defaultsDeep:Mo,entries:os,entriesIn:ss,extend:jt,extendWith:$t,findKey:As,findLastKey:Ms,forIn:js,forInRight:$s,forOwn:Qs,forOwnRight:Ks,functions:Js,functionsIn:el,get:Un,has:cl,hasIn:za,invert:Dl,invertBy:Pl,invoke:Ul,keys:Gt,keysIn:Wt,mapKeys:Dc,mapValues:wc,merge:Hc,mergeWith:wo,omit:ad,omitBy:cd,pick:Jd,pickBy:ld,result:Pu,set:Wu,setWith:ju,toPairs:os,toPairsIn:ss,transform:ap,unset:Dp,update:kp,updateWith:Fp,values:fl,valuesIn:Bp},lm={at:Hp,chain:ci,commit:Ea,lodash:ye,next:Jc,plant:eu,reverse:zp,tap:w_,thru:Q_,toIterator:Z_,toJSON:ep,value:ep,valueOf:ep,wrapperChain:qp},cm={camelCase:ri,capitalize:Rr,deburr:Mr,endsWith:ns,escape:us,escapeRegExp:ms,kebabCase:bc,lowerCase:Nc,lowerFirst:Rc,pad:Yd,padEnd:Hd,padStart:qd,parseInt:Wd,repeat:wu,replace:Mu,snakeCase:Ju,split:f_,startCase:h_,startsWith:b_,template:j_,templateSettings:B_,toLower:tp,toUpper:ip,trim:cp,trimEnd:up,trimStart:pp,truncate:gp,unescape:bp,upperCase:Up,upperFirst:Nr,words:ei},dm={attempt:tr,bindAll:ar,cond:Ka,conforms:Ja,constant:Le,defaultTo:vo,flow:Vs,flowRight:Ws,identity:L,iteratee:Ec,matches:Mc,matchesProperty:Lc,method:qc,methodOf:zc,mixin:jc,noop:pe,nthArg:nd,over:Ed,overEvery:vd,overSome:Td,property:$a,propertyOf:tu,range:Cu,rangeRight:yu,stubArray:Ni,stubFalse:ac.a,stubObject:v_,stubString:T_,stubTrue:C_,times:X_,toPath:np,uniqueId:xp};var um=function(){var e=new _e(this.__wrapped__);return e.__actions__=be(this.__actions__),e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=be(this.__iteratees__),e.__takeCount__=this.__takeCount__,e.__views__=be(this.__views__),e};var _m=function(){if(this.__filtered__){var e=new _e(this);e.__dir__=-1,e.__filtered__=!0}else(e=this.clone()).__dir__*=-1;return e},pm=Math.max,mm=Math.min;var gm=function(e,t,n){for(var r=-1,i=n.length;++r + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ye.after=rm.after,ye.ary=rm.ary,ye.assign=sm.assign,ye.assignIn=sm.assignIn,ye.assignInWith=sm.assignInWith,ye.assignWith=sm.assignWith,ye.at=sm.at,ye.before=rm.before,ye.bind=rm.bind,ye.bindAll=dm.bindAll,ye.bindKey=rm.bindKey,ye.castArray=im.castArray,ye.chain=lm.chain,ye.chunk=em.chunk,ye.compact=em.compact,ye.concat=em.concat,ye.cond=dm.cond,ye.conforms=dm.conforms,ye.constant=dm.constant,ye.countBy=tm.countBy,ye.create=sm.create,ye.curry=rm.curry,ye.curryRight=rm.curryRight,ye.debounce=rm.debounce,ye.defaults=sm.defaults,ye.defaultsDeep=sm.defaultsDeep,ye.defer=rm.defer,ye.delay=rm.delay,ye.difference=em.difference,ye.differenceBy=em.differenceBy,ye.differenceWith=em.differenceWith,ye.drop=em.drop,ye.dropRight=em.dropRight,ye.dropRightWhile=em.dropRightWhile,ye.dropWhile=em.dropWhile,ye.fill=em.fill,ye.filter=tm.filter,ye.flatMap=tm.flatMap,ye.flatMapDeep=tm.flatMapDeep,ye.flatMapDepth=tm.flatMapDepth,ye.flatten=em.flatten,ye.flattenDeep=em.flattenDeep,ye.flattenDepth=em.flattenDepth,ye.flip=rm.flip,ye.flow=dm.flow,ye.flowRight=dm.flowRight,ye.fromPairs=em.fromPairs,ye.functions=sm.functions,ye.functionsIn=sm.functionsIn,ye.groupBy=tm.groupBy,ye.initial=em.initial,ye.intersection=em.intersection,ye.intersectionBy=em.intersectionBy,ye.intersectionWith=em.intersectionWith,ye.invert=sm.invert,ye.invertBy=sm.invertBy,ye.invokeMap=tm.invokeMap,ye.iteratee=dm.iteratee,ye.keyBy=tm.keyBy,ye.keys=Gt,ye.keysIn=sm.keysIn,ye.map=tm.map,ye.mapKeys=sm.mapKeys,ye.mapValues=sm.mapValues,ye.matches=dm.matches,ye.matchesProperty=dm.matchesProperty,ye.memoize=rm.memoize,ye.merge=sm.merge,ye.mergeWith=sm.mergeWith,ye.method=dm.method,ye.methodOf=dm.methodOf,ye.mixin=Om,ye.negate=Qc,ye.nthArg=dm.nthArg,ye.omit=sm.omit,ye.omitBy=sm.omitBy,ye.once=rm.once,ye.orderBy=tm.orderBy,ye.over=dm.over,ye.overArgs=rm.overArgs,ye.overEvery=dm.overEvery,ye.overSome=dm.overSome,ye.partial=rm.partial,ye.partialRight=rm.partialRight,ye.partition=tm.partition,ye.pick=sm.pick,ye.pickBy=sm.pickBy,ye.property=dm.property,ye.propertyOf=dm.propertyOf,ye.pull=em.pull,ye.pullAll=em.pullAll,ye.pullAllBy=em.pullAllBy,ye.pullAllWith=em.pullAllWith,ye.pullAt=em.pullAt,ye.range=dm.range,ye.rangeRight=dm.rangeRight,ye.rearg=rm.rearg,ye.reject=tm.reject,ye.remove=em.remove,ye.rest=rm.rest,ye.reverse=em.reverse,ye.sampleSize=tm.sampleSize,ye.set=sm.set,ye.setWith=sm.setWith,ye.shuffle=tm.shuffle,ye.slice=em.slice,ye.sortBy=tm.sortBy,ye.sortedUniq=em.sortedUniq,ye.sortedUniqBy=em.sortedUniqBy,ye.split=cm.split,ye.spread=rm.spread,ye.tail=em.tail,ye.take=em.take,ye.takeRight=em.takeRight,ye.takeRightWhile=em.takeRightWhile,ye.takeWhile=em.takeWhile,ye.tap=lm.tap,ye.throttle=rm.throttle,ye.thru=Q_,ye.toArray=im.toArray,ye.toPairs=sm.toPairs,ye.toPairsIn=sm.toPairsIn,ye.toPath=dm.toPath,ye.toPlainObject=im.toPlainObject,ye.transform=sm.transform,ye.unary=rm.unary,ye.union=em.union,ye.unionBy=em.unionBy,ye.unionWith=em.unionWith,ye.uniq=em.uniq,ye.uniqBy=em.uniqBy,ye.uniqWith=em.uniqWith,ye.unset=sm.unset,ye.unzip=em.unzip,ye.unzipWith=em.unzipWith,ye.update=sm.update,ye.updateWith=sm.updateWith,ye.values=sm.values,ye.valuesIn=sm.valuesIn,ye.without=em.without,ye.words=cm.words,ye.wrap=rm.wrap,ye.xor=em.xor,ye.xorBy=em.xorBy,ye.xorWith=em.xorWith,ye.zip=em.zip,ye.zipObject=em.zipObject,ye.zipObjectDeep=em.zipObjectDeep,ye.zipWith=em.zipWith,ye.entries=sm.toPairs,ye.entriesIn=sm.toPairsIn,ye.extend=sm.assignIn,ye.extendWith=sm.assignInWith,Om(ye,ye),ye.add=am.add,ye.attempt=dm.attempt,ye.camelCase=cm.camelCase,ye.capitalize=cm.capitalize,ye.ceil=am.ceil,ye.clamp=om.clamp,ye.clone=im.clone,ye.cloneDeep=im.cloneDeep,ye.cloneDeepWith=im.cloneDeepWith,ye.cloneWith=im.cloneWith,ye.conformsTo=im.conformsTo,ye.deburr=cm.deburr,ye.defaultTo=dm.defaultTo,ye.divide=am.divide,ye.endsWith=cm.endsWith,ye.eq=im.eq,ye.escape=cm.escape,ye.escapeRegExp=cm.escapeRegExp,ye.every=tm.every,ye.find=tm.find,ye.findIndex=em.findIndex,ye.findKey=sm.findKey,ye.findLast=tm.findLast,ye.findLastIndex=em.findLastIndex,ye.findLastKey=sm.findLastKey,ye.floor=am.floor,ye.forEach=tm.forEach,ye.forEachRight=tm.forEachRight,ye.forIn=sm.forIn,ye.forInRight=sm.forInRight,ye.forOwn=sm.forOwn,ye.forOwnRight=sm.forOwnRight,ye.get=sm.get,ye.gt=im.gt,ye.gte=im.gte,ye.has=sm.has,ye.hasIn=sm.hasIn,ye.head=em.head,ye.identity=L,ye.includes=tm.includes,ye.indexOf=em.indexOf,ye.inRange=om.inRange,ye.invoke=sm.invoke,ye.isArguments=im.isArguments,ye.isArray=S,ye.isArrayBuffer=im.isArrayBuffer,ye.isArrayLike=im.isArrayLike,ye.isArrayLikeObject=im.isArrayLikeObject,ye.isBoolean=im.isBoolean,ye.isBuffer=im.isBuffer,ye.isDate=im.isDate,ye.isElement=im.isElement,ye.isEmpty=im.isEmpty,ye.isEqual=im.isEqual,ye.isEqualWith=im.isEqualWith,ye.isError=im.isError,ye.isFinite=im.isFinite,ye.isFunction=im.isFunction,ye.isInteger=im.isInteger,ye.isLength=im.isLength,ye.isMap=im.isMap,ye.isMatch=im.isMatch,ye.isMatchWith=im.isMatchWith,ye.isNaN=im.isNaN,ye.isNative=im.isNative,ye.isNil=im.isNil,ye.isNull=im.isNull,ye.isNumber=im.isNumber,ye.isObject=y,ye.isObjectLike=im.isObjectLike,ye.isPlainObject=im.isPlainObject,ye.isRegExp=im.isRegExp,ye.isSafeInteger=im.isSafeInteger,ye.isSet=im.isSet,ye.isString=im.isString,ye.isSymbol=im.isSymbol,ye.isTypedArray=im.isTypedArray,ye.isUndefined=im.isUndefined,ye.isWeakMap=im.isWeakMap,ye.isWeakSet=im.isWeakSet,ye.join=em.join,ye.kebabCase=cm.kebabCase,ye.last=Go,ye.lastIndexOf=em.lastIndexOf,ye.lowerCase=cm.lowerCase,ye.lowerFirst=cm.lowerFirst,ye.lt=im.lt,ye.lte=im.lte,ye.max=am.max,ye.maxBy=am.maxBy,ye.mean=am.mean,ye.meanBy=am.meanBy,ye.min=am.min,ye.minBy=am.minBy,ye.stubArray=dm.stubArray,ye.stubFalse=dm.stubFalse,ye.stubObject=dm.stubObject,ye.stubString=dm.stubString,ye.stubTrue=dm.stubTrue,ye.multiply=am.multiply,ye.nth=em.nth,ye.noop=dm.noop,ye.now=nm.now,ye.pad=cm.pad,ye.padEnd=cm.padEnd,ye.padStart=cm.padStart,ye.parseInt=cm.parseInt,ye.random=om.random,ye.reduce=tm.reduce,ye.reduceRight=tm.reduceRight,ye.repeat=cm.repeat,ye.replace=cm.replace,ye.result=sm.result,ye.round=am.round,ye.sample=tm.sample,ye.size=tm.size,ye.snakeCase=cm.snakeCase,ye.some=tm.some,ye.sortedIndex=em.sortedIndex,ye.sortedIndexBy=em.sortedIndexBy,ye.sortedIndexOf=em.sortedIndexOf,ye.sortedLastIndex=em.sortedLastIndex,ye.sortedLastIndexBy=em.sortedLastIndexBy,ye.sortedLastIndexOf=em.sortedLastIndexOf,ye.startCase=cm.startCase,ye.startsWith=cm.startsWith,ye.subtract=am.subtract,ye.sum=am.sum,ye.sumBy=am.sumBy,ye.template=cm.template,ye.times=dm.times,ye.toFinite=im.toFinite,ye.toInteger=w,ye.toLength=im.toLength,ye.toLower=cm.toLower,ye.toNumber=im.toNumber,ye.toSafeInteger=im.toSafeInteger,ye.toString=im.toString,ye.toUpper=cm.toUpper,ye.trim=cm.trim,ye.trimEnd=cm.trimEnd,ye.trimStart=cm.trimStart,ye.truncate=cm.truncate,ye.unescape=cm.unescape,ye.uniqueId=dm.uniqueId,ye.upperCase=cm.upperCase,ye.upperFirst=cm.upperFirst,ye.each=tm.forEach,ye.eachRight=tm.forEachRight,ye.first=em.head,Om(ye,(Sm={},io(ye,(function(e,t){vm.call(ye.prototype,t)||(Sm[t]=e)})),Sm),{chain:!1}),ye.VERSION="4.17.15",(ye.templateSettings=cm.templateSettings).imports._=ye,Fe(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(e){ye[e].placeholder=ye})),Fe(["drop","take"],(function(e,t){_e.prototype[e]=function(n){n=void 0===n?1:Cm(w(n),0);var r=this.__filtered__&&!t?new _e(this):this.clone();return r.__filtered__?r.__takeCount__=ym(n,r.__takeCount__):r.__views__.push({size:ym(n,4294967295),type:e+(r.__dir__<0?"Right":"")}),r},_e.prototype[e+"Right"]=function(t){return this.reverse()[e](t).reverse()}})),Fe(["filter","map","takeWhile"],(function(e,t){var n=t+1,r=1==n||3==n;_e.prototype[e]=function(e){var t=this.clone();return t.__iteratees__.push({iteratee:Qa(e,3),type:n}),t.__filtered__=t.__filtered__||r,t}})),Fe(["head","last"],(function(e,t){var n="take"+(t?"Right":"");_e.prototype[e]=function(){return this[n](1).value()[0]}})),Fe(["initial","tail"],(function(e,t){var n="drop"+(t?"":"Right");_e.prototype[e]=function(){return this.__filtered__?new _e(this):this[n](1)}})),_e.prototype.compact=function(){return this.filter(L)},_e.prototype.find=function(e){return this.filter(e).head()},_e.prototype.findLast=function(e){return this.reverse().find(e)},_e.prototype.invokeMap=mt((function(e,t){return"function"==typeof e?new _e(this):this.map((function(n){return Fl(n,e,t)}))})),_e.prototype.reject=function(e){return this.filter(Qc(Qa(e)))},_e.prototype.slice=function(e,t){e=w(e);var n=this;return n.__filtered__&&(e>0||t<0)?new _e(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),void 0!==t&&(n=(t=w(t))<0?n.dropRight(-t):n.take(t-e)),n)},_e.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},_e.prototype.toArray=function(){return this.take(4294967295)},io(_e.prototype,(function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),r=/^(?:head|last)$/.test(t),i=ye[r?"take"+("last"==t?"Right":""):t],a=r||/^find/.test(t);i&&(ye.prototype[t]=function(){var t=this.__wrapped__,o=r?[1]:arguments,s=t instanceof _e,l=o[0],c=s||S(t),d=function(e){var t=i.apply(ye,Gn([e],o));return r&&u?t[0]:t};c&&n&&"function"==typeof l&&1!=l.length&&(s=c=!1);var u=this.__chain__,_=!!this.__actions__.length,p=a&&!u,m=s&&!_;if(!a&&c){t=m?t:new _e(this);var g=e.apply(t,o);return g.__actions__.push({func:Q_,args:[d],thisArg:void 0}),new he(g,u)}return p&&m?e.apply(this,o):(g=this.thru(d),p?r?g.value()[0]:g.value():g)})})),Fe(["pop","push","shift","sort","splice","unshift"],(function(e){var t=bm[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",r=/^(?:pop|shift)$/.test(e);ye.prototype[e]=function(){var e=arguments;if(r&&!this.__chain__){var i=this.value();return t.apply(S(i)?i:[],e)}return this[n]((function(n){return t.apply(S(n)?n:[],e)}))}})),io(_e.prototype,(function(e,t){var n=ye[t];if(n){var r=n.name+"";vm.call(ge,r)||(ge[r]=[]),ge[r].push({name:t,func:n})}})),ge[Je(void 0,2).name]=[{name:"wrapper",func:void 0}],_e.prototype.clone=um,_e.prototype.reverse=_m,_e.prototype.value=hm,ye.prototype.at=lm.at,ye.prototype.chain=lm.wrapperChain,ye.prototype.commit=lm.commit,ye.prototype.next=lm.next,ye.prototype.plant=lm.plant,ye.prototype.reverse=lm.reverse,ye.prototype.toJSON=ye.prototype.valueOf=ye.prototype.value=lm.value,ye.prototype.first=ye.prototype.head,Tm&&(ye.prototype[Tm]=lm.toIterator);var Nm=ye; +/** + * @license + * Lodash (Custom Build) + * Build: `lodash modularize exports="es" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */}])})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DTWRFZGl0b3Ivd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0NNZEVkaXRvci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcm9vdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX25vZGVVdGlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQnVmZmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLyh3ZWJwYWNrKS9idWlsZGluL2hhcm1vbnktbW9kdWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvdG9vbGJhckhhbmRsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvdXRpbC9VdGlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvY29uZmlnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvbGFuZy9lbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvZWRpdG9yL2NvZGVtaXJyb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9mb2xkL3htbC1mb2xkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRjb2RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vc3JjL2VkaXRvci9jcmVhdGVFbGVtZW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvbGFuZy96aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS94bWwveG1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9tb2RlL21ldGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL21vZGUvZ2ZtL2dmbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2V0YWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2VkaXQvY29udGludWVsaXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9lZGl0L2Nsb3NlYnJhY2tldHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL3Njcm9sbC9hbm5vdGF0ZXNjcm9sbGJhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fY29kZW1pcnJvckA1LjUyLjJAY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vbWFyay1zZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGd1dHRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvaW5kZW50LWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19jb2RlbWlycm9yQDUuNTIuMkBjb2RlbWlycm9yL2FkZG9uL2ZvbGQvYnJhY2UtZm9sZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2NvZGVtaXJyb3JANS41Mi4yQGNvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbWFya2VkQDAuNS4yQG1hcmtlZC9saWIvbWFya2VkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2luZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2hpZ2hsaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvMWMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FjY2Vzc2xvZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hZGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FuZ2Vsc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcGFjaGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwcGxlc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hcmNhZGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NwcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJkdWluby5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJtYXNtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94bWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzY2lpZG9jLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hc3BlY3RqLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaG90a2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F2cmFzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXdrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9heGFwdGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2ljLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JyYWluZnVjay5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jYXBucHJvdG8uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NleWxvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2xlYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUtcmVwbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY21ha2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NvZmZlZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29xLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NybXNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcnlzdGFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hcmtkb3duLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kYXJ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kZWxwaGkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RpZmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RqYW5nby5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG5zLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb2NrZXJmaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RzY29uZmlnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kdHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R1c3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VibmYuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsaXhpci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWxtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VybGFuZy1yZXBsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9maXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZsaXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZvcnRyYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZzaGFycC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2Ftcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2F1c3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2djb2RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9naGVya2luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbHNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nb2xvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncmFkbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2dyb292eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFuZGxlYmFycy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGFza2VsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaGF4ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHNwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9odG1sYmFycy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHR0cC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2luZm9ybTcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2luaS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaXJwZjkwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pc2JsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYXZhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYXZhc2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qYm9zcy1jbGkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2pzb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2p1bGlhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS1yZXBsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9rb3RsaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xhc3NvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZGlmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZWFmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sZXNzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXNwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9saXZlY29kZXNlcnZlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGx2bS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sdWEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21ha2VmaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXRoZW1hdGljYS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF0bGFiLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYXhpbWEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWVyY3VyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWlwc2FzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWl6YXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BlcmwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vam9saWNpb3VzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tb25rZXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21vb25zY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL24xcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25naW54LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uaW1yb2QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25peC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbnNpcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb2JqZWN0aXZlYy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb2NhbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29wZW5zY2FkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9veHlnZW5lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wYXJzZXIzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGdzcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGxhaW50ZXh0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb255LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wb3dlcnNoZWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9jZXNzaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9maWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm9sb2cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Byb3RvYnVmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wdXBwZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B1cmViYXNpYy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHl0aG9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9xbWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JlYXNvbm1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yaWIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JvYm9jb25mLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb3V0ZXJvcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnNsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWxlc2xhbmd1YWdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjYWxhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2hlbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NjaWxhYi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2Nzcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2hlbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtYWxpLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsbHRhbGsuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FmLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zcWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0YXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGVwMjEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N0eWx1cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3VidW5pdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3dpZnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RhZ2dlcnNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveWFtbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90Y2wuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGhyaWZ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90cC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHdpZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHlwZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmFsYS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmJuZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Zic2NyaXB0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC1odG1sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92ZXJpbG9nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aGRsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9faGlnaGxpZ2h0LmpzQDkuMTguMUBoaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92aW0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3g4NmFzbS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMveGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19oaWdobGlnaHQuanNAOS4xOC4xQGhpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3hxdWVyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2hpZ2hsaWdodC5qc0A5LjE4LjFAaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvemVwaGlyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL3NyYy9lZGl0b3IvcWluaXUtc2RrLXVwbG9hZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9zcmMvdXRpbC9odHRwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU3ltYm9sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5TWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlTWF0aE9wZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hZGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9JbnRlZ2VyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2FmdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lkZW50aXR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzTWFza2VkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRWYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19XZWFrTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tZXRhTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2V0RGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ3Rvci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQmluZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXBwbHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvbXBvc2VBcmdzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb3VudEhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL25vb3AuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3JlYWxOYW1lcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0RnVuY05hbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0xvZGFzaFdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvcHlBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fd3JhcHBlckNsb25lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dyYXBwZXJMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzTGF6aWFibGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXREYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faW5zZXJ0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVNldFRvU3RyaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUVhY2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc05hTi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5SW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3VwZGF0ZVdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRXcmFwVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJlY3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVvcmRlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUh5YnJpZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVBhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21lcmdlRGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlV3JhcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9lcS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXNzaWduVmFsdWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NvcHlPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX292ZXJSZXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmVzdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0xlbmd0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUFzc2lnbmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbmFyeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2tleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYXNzaWduLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19uYXRpdmVLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VLZXlzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMva2V5c0luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Fzc2lnbkluLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Fzc2lnbkluV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9hc3NpZ25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc0tleS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbmF0aXZlQ3JlYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hHZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX0hhc2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc3NvY0luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19saXN0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fTGlzdENhY2hlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19NYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzS2V5YWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tYXBDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX01hcENhY2hlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdFBhdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3RvS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2dldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzRmxhdHRlbmFibGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGbGF0dGVuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2ZsYXRSZXN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2F0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0Vycm9yLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2F0dGVtcHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYmVmb3JlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYmluZEFsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9iaW5kS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2xpY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Nhc3RTbGljZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faGFzVW5pY29kZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaW5nVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VwcGVyRmlyc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2FwaXRhbGl6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlSZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VQcm9wZXJ0eU9mLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19kZWJ1cnJMZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVidXJyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc2NpaVdvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19oYXNVbmljb2RlV29yZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fdW5pY29kZVdvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dvcmRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVDb21wb3VuZGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NhbWVsQ2FzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jYXN0QXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJvdW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NlaWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2hhaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2h1bmsuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VDbGFtcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jbGFtcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tDbGVhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3N0YWNrR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zdGFja0hhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1N0YWNrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQXNzaWduLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQXNzaWduSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5RmlsdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0U3ltYm9scy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY29weVN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY29weVN5bWJvbHNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldEFsbEtleXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX1NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0VGFnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pbml0Q2xvbmVBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fVWludDhBcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVEYXRhVmlldy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2xvbmVSZWdFeHAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Nsb25lU3ltYm9sLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jbG9uZVR5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2luaXRDbG9uZUJ5VGFnLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pbml0Q2xvbmVPYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc01hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc01hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzU2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmVEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Nsb25lRGVlcFdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY2xvbmVXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NvbW1pdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb21wYWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc2V0Q2FjaGVBZGQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3NldENhY2hlSGFzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX21hcFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNFcXVhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzTWF0Y2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VIYXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9oYXNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVByb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Byb3BlcnR5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY29uZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUNvbmZvcm1zVG8uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VDb25mb3Jtcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb25mb3Jtcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb25mb3Jtc1RvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUJhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRWFjaC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUFnZ3JlZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY291bnRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY3VycnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvY3VycnlSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9ub3cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVib3VuY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmYXVsdFRvLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RlZmF1bHRzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zYWZlR2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvUGxhaW5PYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZXJnZURlZXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZXJnZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNNZXJnZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tZXJnZVdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmYXVsdHNEZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRGVsYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGVsYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5SW5jbHVkZXNXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRGlmZmVyZW5jZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2xhc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGlmZmVyZW5jZUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RpZmZlcmVuY2VXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9kcm9wLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BSaWdodFdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Ryb3BXaGlsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdEZ1bmN0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZvckVhY2guanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2FycmF5RWFjaFJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRm9yUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGb3JPd25SaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUVhY2hSaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mb3JFYWNoUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZW5kc1dpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zZXRUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVUb1BhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvUGFpcnMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9QYWlyc0luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19lc2NhcGVIdG1sQ2hhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZXNjYXBlUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheUV2ZXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRXZlcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZXZlcnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmlsdGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVGaW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9maW5kLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRmluZEtleS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9maW5kS2V5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZpbmRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmluZExhc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmluZExhc3RLZXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaGVhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZU1hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdE1hcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbGF0TWFwRGVlcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbGF0TWFwRGVwdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdHRlbkRlZXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxhdHRlbkRlcHRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ZsaXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxvb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUZsb3cuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZmxvdy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mbG93UmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9ySW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9ySW5SaWdodC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mb3JPd24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZm9yT3duUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZnJvbVBhaXJzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlRnVuY3Rpb25zLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Z1bmN0aW9ucy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9mdW5jdGlvbnNJbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9ncm91cEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlR3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZ3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZ3RlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSGFzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2hhcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUluUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5SYW5nZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVZhbHVlcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbml0aWFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW50ZXJzZWN0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludGVyc2VjdGlvbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnRlcnNlY3Rpb25CeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnRlcnNlY3Rpb25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW52ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZUludmVydGVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludmVydC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnZlcnRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcGFyZW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSW52b2tlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2ludm9rZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pbnZva2VNYXAuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJc0FycmF5QnVmZmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzQXJyYXlCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNCb29sZWFuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlSXNEYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0VsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc0VxdWFsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRXF1YWxXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzRmluaXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzSW50ZWdlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pc01hdGNoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTWF0Y2hXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTnVtYmVyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmFOLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pc01hc2thYmxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmF0aXZlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTmlsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzTnVsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZUlzUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzUmVnRXhwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzU2FmZUludGVnZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNVbmRlZmluZWQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvaXNXZWFrTWFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2lzV2Vha1NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9pdGVyYXRlZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9qb2luLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2tlYmFiQ2FzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9rZXlCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fc3RyaWN0TGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbG93ZXJDYXNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2xvd2VyRmlyc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VMdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWFwS2V5cy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXBWYWx1ZXMuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWF0Y2hlcy5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VFeHRyZW11bS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tYXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWF4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTdW0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VNZWFuLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lYW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWVhbkJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21lcmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21ldGhvZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9tZXRob2RPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9taW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWluQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbWl4aW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbXVsdGlwbHkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbmVnYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19pdGVyYXRvclRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9uZXh0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlTnRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL250aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9udGhBcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbnNldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tT21pdENsb25lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29taXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VQaWNrQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGlja0J5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29taXRCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9vbmNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU29ydEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wYXJlQXNjZW5kaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jb21wYXJlTXVsdGlwbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VPcmRlckJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL29yZGVyQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZU92ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3Zlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY2FzdFJlc3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3ZlckFyZ3MuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvb3ZlckV2ZXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL292ZXJTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmVwZWF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hc2NpaVNpemUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX3VuaWNvZGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zdHJpbmdTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVQYWRkaW5nLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3BhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wYWRFbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFkU3RhcnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFyc2VJbnQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFydGlhbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wYXJ0aWFsUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcGFydGl0aW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUGljay5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9waWNrLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3BsYW50LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Byb3BlcnR5T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VJbmRleE9mV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVB1bGxBbGwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcHVsbEFsbC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3B1bGxBbGxCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsQWxsV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVB1bGxBdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9wdWxsQXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VSYW5kb20uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmFuZG9tLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NyZWF0ZVJhbmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JhbmdlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JhbmdlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVhcmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VSZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVkdWNlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVJlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlZHVjZVJpZ2h0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yZW1vdmUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVwZWF0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3JlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmVzdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yZXN1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9yb3VuZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTYW1wbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTYW1wbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc2FtcGxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19zaHVmZmxlU2VsZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYXJyYXlTYW1wbGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU2FtcGxlU2l6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zYW1wbGVTaXplLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NldC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zZXRXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19hcnJheVNodWZmbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTaHVmZmxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NodWZmbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc2l6ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zbGljZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zbmFrZUNhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTb21lLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvbWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydEJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlU29ydGVkSW5kZXhCeS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVNvcnRlZEluZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZEluZGV4LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZEluZGV4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zb3J0ZWRMYXN0SW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkTGFzdEluZGV4QnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkTGFzdEluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VTb3J0ZWRVbmlxLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NvcnRlZFVuaXEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc29ydGVkVW5pcUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NwbGl0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3NwcmVhZC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdGFydENhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdHViT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N0dWJTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3R1YlRydWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3VidHJhY3QuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvc3VtLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3N1bUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RhaWwuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90YWtlUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZVJpZ2h0V2hpbGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdGFrZVdoaWxlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RhcC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fZXNjYXBlU3RyaW5nQ2hhci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVJbnRlcnBvbGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19yZUVzY2FwZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fcmVFdmFsdWF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90aHJ1LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RpbWVzLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvSXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VXcmFwcGVyVmFsdWUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd3JhcHBlclZhbHVlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvTG93ZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9QYXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RvU2FmZUludGVnZXIuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdG9VcHBlci5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90cmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NoYXJzRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2NoYXJzU3RhcnRJbmRleC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy90cmltLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RyaW1FbmQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdHJpbVN0YXJ0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3RydW5jYXRlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuYXJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL191bmVzY2FwZUh0bWxDaGFyLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuZXNjYXBlLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19jcmVhdGVTZXQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VVbmlxLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaW9uLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaW9uQnkuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdW5pb25XaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXEuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdW5pcUJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXFXaXRoLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuaXF1ZUlkLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3Vuc2V0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuemlwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3VuemlwV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fYmFzZVVwZGF0ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91cGRhdGUuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdXBkYXRlV2l0aC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91cHBlckNhc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvdmFsdWVzSW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd2l0aG91dC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy93cmFwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3dyYXBwZXJBdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy93cmFwcGVyQ2hhaW4uanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvd3JhcHBlclJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2Jhc2VYb3IuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMveG9yLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3hvckJ5LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3hvcldpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvemlwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL19iYXNlWmlwT2JqZWN0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3ppcE9iamVjdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy96aXBPYmplY3REZWVwLmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL3ppcFdpdGguanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvYXJyYXkuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9jb2xsZWN0aW9uLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvZGF0ZS5kZWZhdWx0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL2Z1bmN0aW9uLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvbGFuZy5kZWZhdWx0LmpzIiwid2VicGFjazovL0NNZEVkaXRvci8uL25vZGVfbW9kdWxlcy9fbG9kYXNoLWVzQDQuMTcuMTVAbG9kYXNoLWVzL21hdGguZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9udW1iZXIuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9vYmplY3QuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zZXEuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9zdHJpbmcuZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy91dGlsLmRlZmF1bHQuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xhenlDbG9uZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9fbGF6eVJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2dldFZpZXcuanMiLCJ3ZWJwYWNrOi8vQ01kRWRpdG9yLy4vbm9kZV9tb2R1bGVzL19sb2Rhc2gtZXNANC4xNy4xNUBsb2Rhc2gtZXMvX2xhenlWYWx1ZS5qcyIsIndlYnBhY2s6Ly9DTWRFZGl0b3IvLi9ub2RlX21vZHVsZXMvX2xvZGFzaC1lc0A0LjE3LjE1QGxvZGFzaC1lcy9sb2Rhc2guZGVmYXVsdC5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJ3aW5kb3ciLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZnJlZVNlbGYiLCJzZWxmIiwiRnVuY3Rpb24iLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsImdlY2tvIiwidGVzdCIsImllX3VwdG8xMCIsImllXzExdXAiLCJleGVjIiwiZWRnZSIsImllIiwiaWVfdmVyc2lvbiIsImRvY3VtZW50IiwiZG9jdW1lbnRNb2RlIiwid2Via2l0IiwicXR3ZWJraXQiLCJjaHJvbWUiLCJwcmVzdG8iLCJzYWZhcmkiLCJ2ZW5kb3IiLCJtYWNfZ2VNb3VudGFpbkxpb24iLCJwaGFudG9tIiwiaW9zIiwiYW5kcm9pZCIsIm1vYmlsZSIsIm1hYyIsImNocm9tZU9TIiwid2luZG93cyIsInByZXN0b192ZXJzaW9uIiwibWF0Y2giLCJOdW1iZXIiLCJmbGlwQ3RybENtZCIsImNhcHR1cmVSaWdodENsaWNrIiwiY2xhc3NUZXN0IiwiY2xzIiwiUmVnRXhwIiwicmFuZ2UiLCJybUNsYXNzIiwibm9kZSIsImN1cnJlbnQiLCJjbGFzc05hbWUiLCJhZnRlciIsInNsaWNlIiwiaW5kZXgiLCJsZW5ndGgiLCJyZW1vdmVDaGlsZHJlbiIsImUiLCJjb3VudCIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZCIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZHJlbkFuZEFkZCIsInBhcmVudCIsImFwcGVuZENoaWxkIiwiZWx0IiwidGFnIiwiY29udGVudCIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsImVsdFAiLCJzZXRBdHRyaWJ1dGUiLCJjb250YWlucyIsImNoaWxkIiwibm9kZVR5cGUiLCJwYXJlbnROb2RlIiwiaG9zdCIsImFjdGl2ZUVsdCIsImFjdGl2ZUVsZW1lbnQiLCJib2R5Iiwic2hhZG93Um9vdCIsImFkZENsYXNzIiwiam9pbkNsYXNzZXMiLCJhIiwiYiIsImFzIiwic3BsaXQiLCJjcmVhdGVSYW5nZSIsInN0YXJ0IiwiZW5kIiwiZW5kTm9kZSIsInNldEVuZCIsInNldFN0YXJ0IiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJjb2xsYXBzZSIsIm1vdmVFbmQiLCJtb3ZlU3RhcnQiLCJzZWxlY3RJbnB1dCIsInNlbGVjdCIsImYiLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJhcHBseSIsImNvcHlPYmoiLCJvYmoiLCJ0YXJnZXQiLCJvdmVyd3JpdGUiLCJwcm9wIiwiY291bnRDb2x1bW4iLCJzdHJpbmciLCJ0YWJTaXplIiwic3RhcnRJbmRleCIsInN0YXJ0VmFsdWUiLCJzZWFyY2giLCJuZXh0VGFiIiwiaW5kZXhPZiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiX2UiLCJEZWxheWVkIiwidGhpcyIsImlkIiwidGltZSIsImhhbmRsZXIiLCJvblRpbWVvdXQiLCJhcnJheSIsIkRhdGUiLCJzZXRUaW1lb3V0Iiwic2V0IiwibXMiLCJjbGVhclRpbWVvdXQiLCJQYXNzIiwidG9TdHJpbmciLCJzZWxfZG9udFNjcm9sbCIsInNjcm9sbCIsInNlbF9tb3VzZSIsIm9yaWdpbiIsInNlbF9tb3ZlIiwiZmluZENvbHVtbiIsImdvYWwiLCJwb3MiLCJjb2wiLCJza2lwcGVkIiwiTWF0aCIsIm1pbiIsInNwYWNlU3RycyIsInNwYWNlU3RyIiwicHVzaCIsImxzdCIsImFyciIsIm1hcCIsIm91dCIsIm5vdGhpbmciLCJjcmVhdGVPYmoiLCJiYXNlIiwicHJvcHMiLCJpbnN0Iiwibm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIiLCJpc1dvcmRDaGFyQmFzaWMiLCJjaCIsInRvVXBwZXJDYXNlIiwidG9Mb3dlckNhc2UiLCJpc1dvcmRDaGFyIiwiaGVscGVyIiwic291cmNlIiwiaXNFbXB0eSIsImV4dGVuZGluZ0NoYXJzIiwiaXNFeHRlbmRpbmdDaGFyIiwiY2hhckNvZGVBdCIsInNraXBFeHRlbmRpbmdDaGFycyIsInN0ciIsImRpciIsImNoYXJBdCIsImZpbmRGaXJzdCIsInByZWQiLCJmcm9tIiwidG8iLCJtaWRGIiwibWlkIiwiY2VpbCIsImZsb29yIiwiYmlkaU90aGVyIiwiZ2V0QmlkaVBhcnRBdCIsIm9yZGVyIiwic3RpY2t5IiwiZm91bmQiLCJjdXIiLCJiaWRpT3JkZXJpbmciLCJiaWRpUkUiLCJpc05ldXRyYWwiLCJpc1N0cm9uZyIsImNvdW50c0FzTGVmdCIsImNvdW50c0FzTnVtIiwiQmlkaVNwYW4iLCJsZXZlbCIsImRpcmVjdGlvbiIsIm91dGVyVHlwZSIsImNvZGUiLCJsZW4iLCJ0eXBlcyIsImkkMSIsInByZXYiLCJ0eXBlIiwiaSQyIiwidHlwZSQxIiwiaSQzIiwicHJldiQxIiwidHlwZSQyIiwiaSQ0IiwidHlwZSQzIiwicmVwbGFjZSIsImoiLCJpJDUiLCJjdXIkMSIsInR5cGUkNCIsImkkNiIsImVuZCQxIiwiYmVmb3JlIiwicmVwbGFjZSQxIiwiaiQxIiwiaSQ3IiwiYXQiLCJpc1JUTCIsImokMiIsInNwbGljZSIsIm5zdGFydCIsInVuc2hpZnQiLCJyZXZlcnNlIiwiZ2V0T3JkZXIiLCJsaW5lIiwidGV4dCIsIm5vSGFuZGxlcnMiLCJvbiIsImVtaXR0ZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlcnMiLCJjb25jYXQiLCJnZXRIYW5kbGVycyIsIm9mZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInNpZ25hbCIsImhhbmRsZXJzIiwic2lnbmFsRE9NRXZlbnQiLCJjbSIsIm92ZXJyaWRlIiwicHJldmVudERlZmF1bHQiLCJkZWZhdWx0UHJldmVudGVkIiwiZV9kZWZhdWx0UHJldmVudGVkIiwiY29kZW1pcnJvcklnbm9yZSIsInNpZ25hbEN1cnNvckFjdGl2aXR5IiwiY3Vyc29yQWN0aXZpdHkiLCJjdXJPcCIsImN1cnNvckFjdGl2aXR5SGFuZGxlcnMiLCJoYXNIYW5kbGVyIiwiZXZlbnRNaXhpbiIsImN0b3IiLCJlX3ByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJlX3N0b3BQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImVfc3RvcCIsImVfdGFyZ2V0Iiwic3JjRWxlbWVudCIsImVfYnV0dG9uIiwid2hpY2giLCJidXR0b24iLCJjdHJsS2V5IiwiendzcFN1cHBvcnRlZCIsImJhZEJpZGlSZWN0cyIsImRyYWdBbmREcm9wIiwiZGl2IiwiemVyb1dpZHRoRWxlbWVudCIsIm1lYXN1cmUiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRXaWR0aCIsImhhc0JhZEJpZGlSZWN0cyIsInR4dCIsInIwIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicjEiLCJsZWZ0IiwicmlnaHQiLCJzcGxpdExpbmVzQXV0byIsInJlc3VsdCIsIm5sIiwicnQiLCJoYXNTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJ0ZSIsIm93bmVyRG9jdW1lbnQiLCJzZWxlY3Rpb24iLCJwYXJlbnRFbGVtZW50IiwiY29tcGFyZUVuZFBvaW50cyIsImhhc0NvcHlFdmVudCIsIm9uY29weSIsImJhZFpvb21lZFJlY3RzIiwibW9kZXMiLCJtaW1lTW9kZXMiLCJkZWZpbmVNb2RlIiwiZGVwZW5kZW5jaWVzIiwicmVzb2x2ZU1vZGUiLCJzcGVjIiwiZ2V0TW9kZSIsIm9wdGlvbnMiLCJtZmFjdG9yeSIsIm1vZGVPYmoiLCJtb2RlRXh0ZW5zaW9ucyIsImV4dHMiLCJoZWxwZXJUeXBlIiwibW9kZVByb3BzIiwicHJvcCQxIiwiZXh0ZW5kTW9kZSIsInByb3BlcnRpZXMiLCJjb3B5U3RhdGUiLCJzdGF0ZSIsIm5zdGF0ZSIsInZhbCIsImlubmVyTW9kZSIsImluZm8iLCJzdGFydFN0YXRlIiwiYTEiLCJhMiIsIlN0cmluZ1N0cmVhbSIsImxpbmVPcmFjbGUiLCJsYXN0Q29sdW1uUG9zIiwibGFzdENvbHVtblZhbHVlIiwibGluZVN0YXJ0IiwiZ2V0TGluZSIsImRvYyIsImZpcnN0Iiwic2l6ZSIsIkVycm9yIiwiY2h1bmsiLCJsaW5lcyIsImNoaWxkcmVuIiwic3oiLCJjaHVua1NpemUiLCJnZXRCZXR3ZWVuIiwiaXRlciIsImdldExpbmVzIiwidXBkYXRlTGluZUhlaWdodCIsImhlaWdodCIsImRpZmYiLCJsaW5lTm8iLCJubyIsImxpbmVBdEhlaWdodCIsImgiLCJvdXRlciIsImxoIiwiaXNMaW5lIiwibGluZU51bWJlckZvciIsIlN0cmluZyIsImxpbmVOdW1iZXJGb3JtYXR0ZXIiLCJmaXJzdExpbmVOdW1iZXIiLCJQb3MiLCJjbXAiLCJlcXVhbEN1cnNvclBvcyIsImNvcHlQb3MiLCJ4IiwibWF4UG9zIiwibWluUG9zIiwiY2xpcExpbmUiLCJtYXgiLCJjbGlwUG9zIiwibGFzdCIsImxpbmVsZW4iLCJjbGlwVG9MZW4iLCJjbGlwUG9zQXJyYXkiLCJlb2wiLCJzb2wiLCJwZWVrIiwidW5kZWZpbmVkIiwibmV4dCIsImVhdCIsImVhdFdoaWxlIiwiZWF0U3BhY2UiLCJza2lwVG9FbmQiLCJza2lwVG8iLCJiYWNrVXAiLCJjb2x1bW4iLCJpbmRlbnRhdGlvbiIsInBhdHRlcm4iLCJjb25zdW1lIiwiY2FzZUluc2Vuc2l0aXZlIiwiY2FzZWQiLCJzdWJzdHIiLCJoaWRlRmlyc3RDaGFycyIsImlubmVyIiwibG9va0FoZWFkIiwib3JhY2xlIiwiYmFzZVRva2VuIiwiU2F2ZWRDb250ZXh0IiwiQ29udGV4dCIsIm1heExvb2tBaGVhZCIsImJhc2VUb2tlbnMiLCJiYXNlVG9rZW5Qb3MiLCJoaWdobGlnaHRMaW5lIiwiY29udGV4dCIsImZvcmNlVG9FbmQiLCJzdCIsIm1vZGVHZW4iLCJsaW5lQ2xhc3NlcyIsInJ1bk1vZGUiLCJsb29wIiwib3ZlcmxheSIsIm92ZXJsYXlzIiwiaV9lbmQiLCJvcGFxdWUiLCJzdHlsZXMiLCJjbGFzc2VzIiwiYmdDbGFzcyIsInRleHRDbGFzcyIsImdldExpbmVTdHlsZXMiLCJ1cGRhdGVGcm9udGllciIsImdldENvbnRleHRCZWZvcmUiLCJyZXNldFN0YXRlIiwibWF4SGlnaGxpZ2h0TGVuZ3RoIiwic3RhdGVBZnRlciIsInNhdmUiLCJzdHlsZUNsYXNzZXMiLCJoaWdobGlnaHRGcm9udGllciIsIm1vZGVGcm9udGllciIsInByZWNpc2UiLCJkaXNwbGF5IiwibWluaW5kZW50IiwibWlubGluZSIsImxpbSIsImluZGVudGVkIiwiZmluZFN0YXJ0TGluZSIsInNhdmVkIiwiZnJvbVNhdmVkIiwicHJvY2Vzc0xpbmUiLCJ2aWV3RnJvbSIsInZpZXdUbyIsIm5leHRMaW5lIiwic3RhcnRBdCIsInN0cmVhbSIsImNhbGxCbGFua0xpbmUiLCJyZWFkVG9rZW4iLCJibGFua0xpbmUiLCJ0b2tlbiIsImNvcHkiLCJUb2tlbiIsInRha2VUb2tlbiIsImFzQXJyYXkiLCJ0b2tlbnMiLCJleHRyYWN0TGluZUNsYXNzZXMiLCJvdXRwdXQiLCJsaW5lQ2xhc3MiLCJmbGF0dGVuU3BhbnMiLCJjdXJTdGFydCIsImN1clN0eWxlIiwiYWRkTW9kZUNsYXNzIiwibU5hbWUiLCJzYXdSZWFkT25seVNwYW5zIiwic2F3Q29sbGFwc2VkU3BhbnMiLCJNYXJrZWRTcGFuIiwibWFya2VyIiwiZ2V0TWFya2VkU3BhbkZvciIsInNwYW5zIiwic3BhbiIsInJlbW92ZU1hcmtlZFNwYW4iLCJzdHJldGNoU3BhbnNPdmVyQ2hhbmdlIiwiY2hhbmdlIiwiZnVsbCIsIm9sZEZpcnN0IiwibWFya2VkU3BhbnMiLCJvbGRMYXN0Iiwic3RhcnRDaCIsImVuZENoIiwiaXNJbnNlcnQiLCJvbGQiLCJudyIsImluY2x1c2l2ZUxlZnQiLCJpbnNlcnRMZWZ0IiwiZW5kc0FmdGVyIiwiaW5jbHVzaXZlUmlnaHQiLCJtYXJrZWRTcGFuc0JlZm9yZSIsInN0YXJ0c0JlZm9yZSIsIm1hcmtlZFNwYW5zQWZ0ZXIiLCJzYW1lTGluZSIsIm9mZnNldCIsInNwYW4kMSIsImNsZWFyRW1wdHlTcGFucyIsIm5ld01hcmtlcnMiLCJnYXBNYXJrZXJzIiwiZ2FwIiwiY2xlYXJXaGVuRW1wdHkiLCJkZXRhY2hNYXJrZWRTcGFucyIsImRldGFjaExpbmUiLCJhdHRhY2hNYXJrZWRTcGFucyIsImF0dGFjaExpbmUiLCJleHRyYUxlZnQiLCJleHRyYVJpZ2h0IiwiY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMiLCJsZW5EaWZmIiwiYVBvcyIsImZpbmQiLCJiUG9zIiwiZnJvbUNtcCIsInRvQ21wIiwiY29sbGFwc2VkU3BhbkF0U2lkZSIsInNwcyIsInNwIiwiY29sbGFwc2VkIiwiY29sbGFwc2VkU3BhbkF0U3RhcnQiLCJjb2xsYXBzZWRTcGFuQXRFbmQiLCJjb2xsYXBzZWRTcGFuQXJvdW5kIiwiY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZSIsInZpc3VhbExpbmUiLCJtZXJnZWQiLCJ2aXN1YWxMaW5lTm8iLCJsaW5lTiIsInZpcyIsInZpc3VhbExpbmVFbmRObyIsImxhc3RMaW5lIiwibGluZUlzSGlkZGVuIiwid2lkZ2V0Tm9kZSIsImxpbmVJc0hpZGRlbklubmVyIiwiaGVpZ2h0QXRMaW5lIiwibGluZU9iaiIsImxpbmVMZW5ndGgiLCJmb3VuZCQxIiwiZmluZE1heExpbmUiLCJtYXhMaW5lIiwibWF4TGluZUxlbmd0aCIsIm1heExpbmVDaGFuZ2VkIiwiTGluZSIsImVzdGltYXRlSGVpZ2h0IiwiY2xlYW5VcExpbmUiLCJzdHlsZVRvQ2xhc3NDYWNoZSIsInN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUiLCJpbnRlcnByZXRUb2tlblN0eWxlIiwiY2FjaGUiLCJidWlsZExpbmVDb250ZW50IiwibGluZVZpZXciLCJidWlsZGVyIiwicHJlIiwidHJhaWxpbmdTcGFjZSIsInNwbGl0U3BhY2VzIiwiZ2V0T3B0aW9uIiwicmVzdCIsImFkZFRva2VuIiwiYnVpbGRUb2tlbiIsImJ1aWxkVG9rZW5CYWRCaWRpIiwiaW5zZXJ0TGluZUNvbnRlbnQiLCJleHRlcm5hbE1lYXN1cmVkIiwibWFwcyIsImNhY2hlcyIsImxhc3RDaGlsZCIsInF1ZXJ5U2VsZWN0b3IiLCJkZWZhdWx0U3BlY2lhbENoYXJQbGFjZWhvbGRlciIsInRpdGxlIiwic3RhcnRTdHlsZSIsImVuZFN0eWxlIiwiY3NzIiwiYXR0cmlidXRlcyIsImRpc3BsYXlUZXh0IiwidHJhaWxpbmdCZWZvcmUiLCJzcGFjZUJlZm9yZSIsInNwZWNpYWwiLCJzcGVjaWFsQ2hhcnMiLCJtdXN0V3JhcCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJsYXN0SW5kZXgiLCJ0eHQkMSIsInRhYldpZHRoIiwic3BlY2lhbENoYXJQbGFjZWhvbGRlciIsImZ1bGxTdHlsZSIsImF0dHIiLCJwYXJ0IiwiYnVpbGRDb2xsYXBzZWRTcGFuIiwiaWdub3JlV2lkZ2V0Iiwid2lkZ2V0IiwiaW5wdXQiLCJuZWVkc0NvbnRlbnRBdHRyaWJ1dGUiLCJzZXRVbmVkaXRhYmxlIiwiYWxsVGV4dCIsInNwYW5TdHlsZSIsInNwYW5FbmRTdHlsZSIsInNwYW5TdGFydFN0eWxlIiwibmV4dENoYW5nZSIsIkluZmluaXR5IiwiZm91bmRCb29rbWFya3MiLCJlbmRTdHlsZXMiLCJ1cHRvIiwidG9rZW5UZXh0IiwiTGluZVZpZXciLCJ2aXN1YWxMaW5lQ29udGludWVkIiwiaGlkZGVuIiwiYnVpbGRWaWV3QXJyYXkiLCJuZXh0UG9zIiwidmlldyIsIm9wZXJhdGlvbkdyb3VwIiwib3JwaGFuRGVsYXllZENhbGxiYWNrcyIsInNpZ25hbExhdGVyIiwibGlzdCIsImRlbGF5ZWRDYWxsYmFja3MiLCJmaXJlT3JwaGFuRGVsYXllZCIsImRlbGF5ZWQiLCJ1cGRhdGVMaW5lRm9yQ2hhbmdlcyIsImRpbXMiLCJjaGFuZ2VzIiwidXBkYXRlTGluZVRleHQiLCJ1cGRhdGVMaW5lR3V0dGVyIiwidXBkYXRlTGluZUNsYXNzZXMiLCJ1cGRhdGVMaW5lV2lkZ2V0cyIsImVuc3VyZUxpbmVXcmFwcGVkIiwicmVwbGFjZUNoaWxkIiwiekluZGV4IiwiZ2V0TGluZUNvbnRlbnQiLCJleHQiLCJidWlsdCIsImJhY2tncm91bmQiLCJ3cmFwIiwiaW5zZXJ0QmVmb3JlIiwidXBkYXRlTGluZUJhY2tncm91bmQiLCJ3cmFwQ2xhc3MiLCJndXR0ZXIiLCJndXR0ZXJCYWNrZ3JvdW5kIiwiZ3V0dGVyQ2xhc3MiLCJmaXhlZEd1dHRlciIsImZpeGVkUG9zIiwiZ3V0dGVyVG90YWxXaWR0aCIsIm1hcmtlcnMiLCJndXR0ZXJNYXJrZXJzIiwibGluZU51bWJlcnMiLCJ3cmFwJDEiLCJndXR0ZXJXcmFwIiwibGluZU51bWJlciIsImd1dHRlckxlZnQiLCJrIiwiZ3V0dGVyU3BlY3MiLCJndXR0ZXJXaWR0aCIsImFsaWduYWJsZSIsImlzV2lkZ2V0IiwibmV4dFNpYmxpbmciLCJpbnNlcnRMaW5lV2lkZ2V0cyIsImJ1aWxkTGluZUVsZW1lbnQiLCJpbnNlcnRMaW5lV2lkZ2V0c0ZvciIsImFsbG93QWJvdmUiLCJ3aWRnZXRzIiwid3MiLCJoYW5kbGVNb3VzZUV2ZW50cyIsInBvc2l0aW9uTGluZVdpZGdldCIsImFib3ZlIiwibm9IU2Nyb2xsIiwid2lkdGgiLCJ3cmFwcGVyV2lkdGgiLCJjb3Zlckd1dHRlciIsInBhZGRpbmdMZWZ0IiwicG9zaXRpb24iLCJtYXJnaW5MZWZ0Iiwid2lkZ2V0SGVpZ2h0IiwicGFyZW50U3R5bGUiLCJndXR0ZXJzIiwid3JhcHBlciIsImNsaWVudFdpZHRoIiwiZXZlbnRJbldpZGdldCIsImdldEF0dHJpYnV0ZSIsInNpemVyIiwibW92ZXIiLCJwYWRkaW5nVG9wIiwibGluZVNwYWNlIiwib2Zmc2V0VG9wIiwicGFkZGluZ1ZlcnQiLCJwYWRkaW5nSCIsImNhY2hlZFBhZGRpbmdIIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsImRhdGEiLCJwYXJzZUludCIsInBhZGRpbmdSaWdodCIsImlzTmFOIiwic2Nyb2xsR2FwIiwibmF0aXZlQmFyV2lkdGgiLCJkaXNwbGF5V2lkdGgiLCJzY3JvbGxlciIsImJhcldpZHRoIiwiZGlzcGxheUhlaWdodCIsImNsaWVudEhlaWdodCIsImJhckhlaWdodCIsIm1hcEZyb21MaW5lVmlldyIsIm1lYXN1cmVDaGFyIiwiYmlhcyIsIm1lYXN1cmVDaGFyUHJlcGFyZWQiLCJwcmVwYXJlTWVhc3VyZUZvckxpbmUiLCJmaW5kVmlld0ZvckxpbmUiLCJmaW5kVmlld0luZGV4IiwiZ2V0RGltZW5zaW9ucyIsImZvcmNlVXBkYXRlIiwibGluZU1lYXN1cmUiLCJ1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50IiwicmVjdCIsImhhc0hlaWdodHMiLCJwcmVwYXJlZCIsInZhckhlaWdodCIsIndyYXBwaW5nIiwibGluZVdyYXBwaW5nIiwiY3VyV2lkdGgiLCJoZWlnaHRzIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsImFicyIsImJvdHRvbSIsInRvcCIsImVuc3VyZUxpbmVIZWlnaHRzIiwicGxhY2UiLCJub2RlQW5kT2Zmc2V0SW5MaW5lTWFwIiwiY292ZXJTdGFydCIsImNvdmVyRW5kIiwiZ2V0VXNlZnVsUmVjdCIsInNjcmVlbiIsImxvZ2ljYWxYRFBJIiwiZGV2aWNlWERQSSIsIm5vcm1hbCIsImZyb21SYW5nZSIsImhhc0JhZFpvb21lZFJlY3RzIiwic2NhbGVYIiwic2NhbGVZIiwibG9naWNhbFlEUEkiLCJkZXZpY2VZRFBJIiwibWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyIsInJTcGFuIiwiY2hhcldpZHRoIiwibnVsbFJlY3QiLCJydG9wIiwicmJvdCIsImJvdCIsImJvZ3VzIiwic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsInJib3R0b20iLCJtZWFzdXJlQ2hhcklubmVyIiwibWVhc3VyZVRleHQiLCJtU3RhcnQiLCJtRW5kIiwiY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvciIsImNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUiLCJleHRlcm5hbE1lYXN1cmUiLCJjbGVhckNhY2hlcyIsImNhY2hlZENoYXJXaWR0aCIsImNhY2hlZFRleHRIZWlnaHQiLCJsaW5lTnVtQ2hhcnMiLCJwYWdlU2Nyb2xsWCIsInBhZ2VYT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsInBhZ2VTY3JvbGxZIiwibWFyZ2luVG9wIiwicGFnZVlPZmZzZXQiLCJzY3JvbGxUb3AiLCJ3aWRnZXRUb3BIZWlnaHQiLCJpbnRvQ29vcmRTeXN0ZW0iLCJpbmNsdWRlV2lkZ2V0cyIsInlPZmYiLCJ2aWV3T2Zmc2V0IiwibE9mZiIsInhPZmYiLCJmcm9tQ29vcmRTeXN0ZW0iLCJjb29yZHMiLCJsb2NhbEJveCIsImxpbmVTcGFjZUJveCIsImNoYXJDb29yZHMiLCJjdXJzb3JDb29yZHMiLCJwcmVwYXJlZE1lYXN1cmUiLCJnZXRCaWRpIiwicGFydFBvcyIsImludmVydCIsIm90aGVyIiwiZXN0aW1hdGVDb29yZHMiLCJQb3NXaXRoSW5mbyIsIm91dHNpZGUiLCJ4UmVsIiwiY29vcmRzQ2hhciIsInkiLCJjb29yZHNDaGFySW5uZXIiLCJyYW5nZUVuZCIsIndyYXBwZWRMaW5lRXh0ZW50IiwiYmVnaW4iLCJ3cmFwcGVkTGluZUV4dGVudENoYXIiLCJib3hJc0FmdGVyIiwiYm94IiwibHRyIiwiY29vcmRzQmlkaVBhcnRXcmFwcGVkIiwiY29vcmRzQmlkaVBhcnQiLCJiYXNlWCIsImNoQXJvdW5kIiwiYm94QXJvdW5kIiwiYXRMZWZ0IiwiYXRTdGFydCIsIl9saW5lTm8iLCJyZWYiLCJjbG9zZXN0RGlzdCIsImVuZFgiLCJkaXN0IiwidGV4dEhlaWdodCIsImFuY2hvciIsImNsaWVudExlZnQiLCJvZmZzZXRMZWZ0IiwiY29tcGVuc2F0ZUZvckhTY3JvbGwiLCJ0aCIsInBlckxpbmUiLCJ3aWRnZXRzSGVpZ2h0IiwiZXN0aW1hdGVMaW5lSGVpZ2h0cyIsImVzdCIsImVzdEhlaWdodCIsInBvc0Zyb21Nb3VzZSIsImxpYmVyYWwiLCJmb3JSZWN0Iiwic3BhY2UiLCJjbGllbnRYIiwiY2xpZW50WSIsImNvbERpZmYiLCJyb3VuZCIsInJlZ0NoYW5nZSIsImxlbmRpZmYiLCJ1cGRhdGVMaW5lTnVtYmVycyIsInZpZXdDaGFuZ2VkIiwicmVzZXRWaWV3IiwiY3V0Iiwidmlld0N1dHRpbmdQb2ludCIsImN1dCQxIiwiY3V0VG9wIiwiY3V0Qm90IiwicmVnTGluZUNoYW5nZSIsIm9sZE4iLCJuZXdOIiwiY291bnREaXJ0eVZpZXciLCJkaXJ0eSIsInVwZGF0ZVNlbGVjdGlvbiIsInNob3dTZWxlY3Rpb24iLCJwcmVwYXJlU2VsZWN0aW9uIiwicHJpbWFyeSIsImN1ckZyYWdtZW50IiwiY3Vyc29ycyIsInNlbEZyYWdtZW50Iiwic2VsIiwicmFuZ2VzIiwicHJpbUluZGV4IiwiZW1wdHkiLCJzaG93Q3Vyc29yV2hlblNlbGVjdGluZyIsImRyYXdTZWxlY3Rpb25DdXJzb3IiLCJoZWFkIiwiZHJhd1NlbGVjdGlvblJhbmdlIiwiY3Vyc29yIiwiY3Vyc29ySGVpZ2h0Iiwib3RoZXJDdXJzb3IiLCJjbXBDb29yZHMiLCJmcmFnbWVudCIsInBhZGRpbmciLCJsZWZ0U2lkZSIsInJpZ2h0U2lkZSIsInNpemVyV2lkdGgiLCJkb2NMVFIiLCJhZGQiLCJkcmF3Rm9yTGluZSIsImZyb21BcmciLCJ0b0FyZyIsImxpbmVMZW4iLCJ3cmFwWCIsInNpZGUiLCJleHRlbnQiLCJpdGVyYXRlQmlkaVNlY3Rpb25zIiwiZnJvbVBvcyIsInRvUG9zIiwib3BlblN0YXJ0Iiwib3BlbkVuZCIsIm9wZW5SaWdodCIsInRvcExlZnQiLCJ0b3BSaWdodCIsImJvdExlZnQiLCJib3RSaWdodCIsInNGcm9tIiwic1RvIiwiZnJvbUxpbmUiLCJ0b0xpbmUiLCJzaW5nbGVWTGluZSIsImxlZnRFbmQiLCJyaWdodFN0YXJ0IiwicmVzdGFydEJsaW5rIiwiZm9jdXNlZCIsImNsZWFySW50ZXJ2YWwiLCJibGlua2VyIiwiY3Vyc29yRGl2IiwidmlzaWJpbGl0eSIsImN1cnNvckJsaW5rUmF0ZSIsInNldEludGVydmFsIiwiZW5zdXJlRm9jdXMiLCJmb2N1cyIsIm9uRm9jdXMiLCJkZWxheUJsdXJFdmVudCIsImRlbGF5aW5nQmx1ckV2ZW50Iiwib25CbHVyIiwicmVhZE9ubHkiLCJzZWxGb3JDb250ZXh0TWVudSIsInJlc2V0IiwicmVjZWl2ZWRGb2N1cyIsInNoaWZ0IiwidXBkYXRlSGVpZ2h0c0luVmlld3BvcnQiLCJwcmV2Qm90dG9tIiwibGluZURpdiIsInVwZGF0ZVdpZGdldEhlaWdodCIsImNoV2lkdGgiLCJ3IiwidmlzaWJsZUxpbmVzIiwidmlld3BvcnQiLCJlbnN1cmUiLCJlbnN1cmVGcm9tIiwiZW5zdXJlVG8iLCJjYWxjdWxhdGVTY3JvbGxQb3MiLCJzbmFwTWFyZ2luIiwic2NyZWVudG9wIiwiZG9jQm90dG9tIiwiYXRUb3AiLCJhdEJvdHRvbSIsIm5ld1RvcCIsInNjcmVlbmxlZnQiLCJzY3JlZW53IiwidG9vV2lkZSIsImFkZFRvU2Nyb2xsVG9wIiwicmVzb2x2ZVNjcm9sbFRvUG9zIiwiZW5zdXJlQ3Vyc29yVmlzaWJsZSIsImdldEN1cnNvciIsInNjcm9sbFRvUG9zIiwibWFyZ2luIiwiY3Vyc29yU2Nyb2xsTWFyZ2luIiwic2Nyb2xsVG9Db29yZHMiLCJzY3JvbGxUb0Nvb3Jkc1JhbmdlIiwic1BvcyIsInVwZGF0ZVNjcm9sbFRvcCIsInVwZGF0ZURpc3BsYXlTaW1wbGUiLCJzZXRTY3JvbGxUb3AiLCJzdGFydFdvcmtlciIsImZvcmNlU2Nyb2xsIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsYmFycyIsInNldFNjcm9sbExlZnQiLCJpc1Njcm9sbGVyIiwic2Nyb2xsV2lkdGgiLCJhbGlnbkhvcml6b250YWxseSIsIm1lYXN1cmVGb3JTY3JvbGxiYXJzIiwiZ3V0dGVyVyIsImRvY0giLCJ2aWV3SGVpZ2h0Iiwidmlld1dpZHRoIiwiYmFyTGVmdCIsImRvY0hlaWdodCIsIk5hdGl2ZVNjcm9sbGJhcnMiLCJ2ZXJ0IiwiaG9yaXoiLCJ0YWJJbmRleCIsImNoZWNrZWRaZXJvV2lkdGgiLCJtaW5IZWlnaHQiLCJtaW5XaWR0aCIsInVwZGF0ZSIsIm5lZWRzSCIsIm5lZWRzViIsInNXaWR0aCIsInRvdGFsSGVpZ2h0IiwidG90YWxXaWR0aCIsInplcm9XaWR0aEhhY2siLCJkaXNhYmxlSG9yaXoiLCJlbmFibGVaZXJvV2lkdGhCYXIiLCJkaXNhYmxlVmVydCIsInBvaW50ZXJFdmVudHMiLCJiYXIiLCJkZWxheSIsIm1heWJlRGlzYWJsZSIsImVsZW1lbnRGcm9tUG9pbnQiLCJjbGVhciIsIk51bGxTY3JvbGxiYXJzIiwidXBkYXRlU2Nyb2xsYmFycyIsInN0YXJ0V2lkdGgiLCJzdGFydEhlaWdodCIsInVwZGF0ZVNjcm9sbGJhcnNJbm5lciIsInNpemVzIiwicGFkZGluZ0JvdHRvbSIsImhlaWdodEZvcmNlciIsImJvcmRlckJvdHRvbSIsInNjcm9sbGJhckZpbGxlciIsImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwiZ3V0dGVyRmlsbGVyIiwic2Nyb2xsYmFyTW9kZWwiLCJpbml0U2Nyb2xsYmFycyIsInNjcm9sbGJhclN0eWxlIiwiYXhpcyIsIm5leHRPcElkIiwic3RhcnRPcGVyYXRpb24iLCJvcCIsInVwZGF0ZUlucHV0IiwidHlwaW5nIiwiY2hhbmdlT2JqcyIsImN1cnNvckFjdGl2aXR5Q2FsbGVkIiwic2VsZWN0aW9uQ2hhbmdlZCIsInVwZGF0ZU1heExpbmUiLCJvcHMiLCJvd25zR3JvdXAiLCJlbmRPcGVyYXRpb24iLCJlbmRDYiIsImdyb3VwIiwiY2FsbGJhY2tzIiwiZmlyZUNhbGxiYWNrc0Zvck9wcyIsImZpbmlzaE9wZXJhdGlvbiIsImVuZE9wZXJhdGlvbl9SMSIsImVuZE9wZXJhdGlvbl9XMSIsImVuZE9wZXJhdGlvbl9SMiIsImVuZE9wZXJhdGlvbl9XMiIsImVuZE9wZXJhdGlvbl9maW5pc2giLCJlbmRPcGVyYXRpb25zIiwic2Nyb2xsYmFyc0NsaXBwZWQiLCJtYXJnaW5Cb3R0b20iLCJib3JkZXJSaWdodFdpZHRoIiwibWF5YmVDbGlwU2Nyb2xsYmFycyIsIm11c3RVcGRhdGUiLCJEaXNwbGF5VXBkYXRlIiwidXBkYXRlZERpc3BsYXkiLCJ1cGRhdGVEaXNwbGF5SWZOZWVkZWQiLCJiYXJNZWFzdXJlIiwiYWRqdXN0V2lkdGhUbyIsIm1heFNjcm9sbExlZnQiLCJwcmVwYXJlZFNlbGVjdGlvbiIsInRha2VGb2N1cyIsInNldERvY3VtZW50SGVpZ2h0IiwicG9zdFVwZGF0ZURpc3BsYXkiLCJ3aGVlbFN0YXJ0WCIsIndoZWVsU3RhcnRZIiwiZG9TY3JvbGwiLCJpbm5lckhlaWdodCIsInNjcm9sbE5vZGUiLCJzY3JvbGxJbnRvVmlldyIsIm1heWJlU2Nyb2xsV2luZG93IiwibGltaXQiLCJjaGFuZ2VkIiwiZW5kQ29vcmRzIiwic2Nyb2xsUG9zIiwic3RhcnRUb3AiLCJzdGFydExlZnQiLCJzY3JvbGxQb3NJbnRvVmlldyIsIm1heWJlSGlkZGVuTWFya2VycyIsInVuaGlkZGVuIiwibWF5YmVVbmhpZGRlbk1hcmtlcnMiLCJmaW5pc2giLCJydW5Jbk9wIiwib3BlcmF0aW9uIiwibWV0aG9kT3AiLCJkb2NNZXRob2RPcCIsImhpZ2hsaWdodCIsImhpZ2hsaWdodFdvcmtlciIsIndvcmtUaW1lIiwiY2hhbmdlZExpbmVzIiwib2xkU3R5bGVzIiwiaGlnaGxpZ2h0ZWQiLCJvbGRDbHMiLCJuZXdDbHMiLCJpc2NoYW5nZSIsIndvcmtEZWxheSIsImZvcmNlIiwidmlzaWJsZSIsImVkaXRvcklzSGlkZGVuIiwid3JhcHBlckhlaWdodCIsIm9sZERpc3BsYXlXaWR0aCIsImV2ZW50cyIsInJlbmRlcmVkVmlldyIsIm1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoIiwidmlld3BvcnRNYXJnaW4iLCJkaWZmZXJlbnQiLCJsYXN0V3JhcEhlaWdodCIsImxhc3RXcmFwV2lkdGgiLCJhZGp1c3RWaWV3IiwidG9VcGRhdGUiLCJzZWxTbmFwc2hvdCIsImhhc0ZvY3VzIiwiYWN0aXZlIiwiYW5jaG9yTm9kZSIsImV4dGVuZCIsImFuY2hvck9mZnNldCIsImZvY3VzTm9kZSIsImZvY3VzT2Zmc2V0Iiwic2VsZWN0aW9uU25hcHNob3QiLCJ1cGRhdGVOdW1iZXJzRnJvbSIsImNvbnRhaW5lciIsInJtIiwiY3VycmVudFdoZWVsVGFyZ2V0IiwidXBkYXRlTnVtYmVyIiwicGF0Y2hEaXNwbGF5Iiwic25hcHNob3QiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInJlc3RvcmVTZWxlY3Rpb24iLCJzZWxlY3Rpb25EaXYiLCJyZXBvcnRlZFZpZXdGcm9tIiwicmVwb3J0ZWRWaWV3VG8iLCJ1cGRhdGVHdXR0ZXJTcGFjZSIsImFsaWduV2lkZ2V0cyIsImNvbXAiLCJhbGlnbiIsImlubmVyVyIsImxpbmVHdXR0ZXIiLCJsaW5lTnVtSW5uZXJXaWR0aCIsImxpbmVOdW1XaWR0aCIsImdldEd1dHRlcnMiLCJzYXdMaW5lTnVtYmVycyIsInJlbmRlckd1dHRlcnMiLCJzcGVjcyIsImdFbHQiLCJ1cGRhdGVHdXR0ZXJzIiwiRGlzcGxheSIsImRyYWdnYWJsZSIsIndoZWVsRFgiLCJ3aGVlbERZIiwiYWN0aXZlVG91Y2giLCJpbml0Iiwid2hlZWxTYW1wbGVzIiwid2hlZWxQaXhlbHNQZXJVbml0Iiwid2hlZWxFdmVudERlbHRhIiwiZHgiLCJ3aGVlbERlbHRhWCIsImR5Iiwid2hlZWxEZWx0YVkiLCJkZXRhaWwiLCJIT1JJWk9OVEFMX0FYSVMiLCJWRVJUSUNBTF9BWElTIiwid2hlZWxEZWx0YSIsIndoZWVsRXZlbnRQaXhlbHMiLCJkZWx0YSIsIm9uU2Nyb2xsV2hlZWwiLCJjYW5TY3JvbGxYIiwiY2FuU2Nyb2xsWSIsInBpeGVscyIsIm1vdmVkWCIsIm1vdmVkWSIsInNhbXBsZSIsIlNlbGVjdGlvbiIsImVxdWFscyIsImhlcmUiLCJ0aGVyZSIsImRlZXBDb3B5IiwiUmFuZ2UiLCJzb21ldGhpbmdTZWxlY3RlZCIsIm5vcm1hbGl6ZVNlbGVjdGlvbiIsIm1heVRvdWNoIiwic2VsZWN0aW9uc01heVRvdWNoIiwicHJpbSIsInNvcnQiLCJpbnYiLCJzaW1wbGVTZWxlY3Rpb24iLCJjaGFuZ2VFbmQiLCJhZGp1c3RGb3JDaGFuZ2UiLCJjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UiLCJvZmZzZXRQb3MiLCJsb2FkTW9kZSIsIm1vZGVPcHRpb24iLCJyZXNldE1vZGVTdGF0ZSIsImlzV2hvbGVMaW5lVXBkYXRlIiwid2hvbGVMaW5lVXBkYXRlQmVmb3JlIiwidXBkYXRlRG9jIiwic3BhbnNGb3IiLCJ1cGRhdGVMaW5lIiwibGluZXNGb3IiLCJmaXJzdExpbmUiLCJsYXN0VGV4dCIsImxhc3RTcGFucyIsIm5saW5lcyIsImluc2VydCIsInJlbW92ZSIsImFkZGVkIiwiYWRkZWQkMSIsImFkZGVkJDIiLCJsaW5rZWREb2NzIiwic2hhcmVkSGlzdE9ubHkiLCJwcm9wYWdhdGUiLCJza2lwIiwic2hhcmVkSGlzdCIsImxpbmtlZCIsInJlbCIsInNoYXJlZCIsImF0dGFjaERvYyIsInNldERpcmVjdGlvbkNsYXNzIiwiSGlzdG9yeSIsInN0YXJ0R2VuIiwiZG9uZSIsInVuZG9uZSIsInVuZG9EZXB0aCIsImxhc3RNb2RUaW1lIiwibGFzdFNlbFRpbWUiLCJsYXN0T3AiLCJsYXN0U2VsT3AiLCJsYXN0T3JpZ2luIiwibGFzdFNlbE9yaWdpbiIsImdlbmVyYXRpb24iLCJtYXhHZW5lcmF0aW9uIiwiaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UiLCJoaXN0Q2hhbmdlIiwiYXR0YWNoTG9jYWxTcGFucyIsImNsZWFyU2VsZWN0aW9uRXZlbnRzIiwicG9wIiwiYWRkQ2hhbmdlVG9IaXN0b3J5Iiwic2VsQWZ0ZXIiLCJvcElkIiwiaGlzdCIsImhpc3RvcnkiLCJoaXN0b3J5RXZlbnREZWxheSIsImxhc3RDaGFuZ2VFdmVudCIsInB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkiLCJhZGRTZWxlY3Rpb25Ub0hpc3RvcnkiLCJzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkIiwiY2xlYXJSZWRvIiwiZGVzdCIsImV4aXN0aW5nIiwicmVtb3ZlQ2xlYXJlZFNwYW5zIiwiZXhwbGljaXRseUNsZWFyZWQiLCJtZXJnZU9sZFNwYW5zIiwiZ2V0T2xkU3BhbnMiLCJzdHJldGNoZWQiLCJvbGRDdXIiLCJzdHJldGNoQ3VyIiwiY29weUhpc3RvcnlBcnJheSIsIm5ld0dyb3VwIiwiaW5zdGFudGlhdGVTZWwiLCJldmVudCIsIm5ld0NoYW5nZXMiLCJleHRlbmRSYW5nZSIsInBvc0JlZm9yZSIsImV4dGVuZFNlbGVjdGlvbiIsInNldFNlbGVjdGlvbiIsImV4dGVuZFNlbGVjdGlvbnMiLCJoZWFkcyIsInJlcGxhY2VPbmVTZWxlY3Rpb24iLCJzZXRTaW1wbGVTZWxlY3Rpb24iLCJzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSIsInNldFNlbGVjdGlvbk5vVW5kbyIsIk5hTiIsImZpbHRlclNlbGVjdGlvbkNoYW5nZSIsInNldFNlbGVjdGlvbklubmVyIiwic2tpcEF0b21pY0luU2VsZWN0aW9uIiwicmVDaGVja1NlbGVjdGlvbiIsIm1heUNsZWFyIiwibmV3QW5jaG9yIiwic2tpcEF0b21pYyIsIm5ld0hlYWQiLCJza2lwQXRvbWljSW5uZXIiLCJvbGRQb3MiLCJwcmV2ZW50Q3Vyc29yTGVmdCIsInNlbGVjdExlZnQiLCJwcmV2ZW50Q3Vyc29yUmlnaHQiLCJzZWxlY3RSaWdodCIsImF0b21pYyIsIm5lYXIiLCJtb3ZlUG9zIiwiZmFyIiwiY2FudEVkaXQiLCJzZWxlY3RBbGwiLCJmaWx0ZXJDaGFuZ2UiLCJjYW5jZWxlZCIsImNhbmNlbCIsIm1ha2VDaGFuZ2UiLCJpZ25vcmVSZWFkT25seSIsInN1cHByZXNzRWRpdHMiLCJtYXJrIiwicGFydHMiLCJtayIsIm5ld1BhcnRzIiwiZGZyb20iLCJkdG8iLCJyZW1vdmVSZWFkT25seVJhbmdlcyIsIm1ha2VDaGFuZ2VJbm5lciIsIm1ha2VDaGFuZ2VTaW5nbGVEb2MiLCJyZWJhc2VkIiwicmViYXNlSGlzdCIsIm1ha2VDaGFuZ2VGcm9tSGlzdG9yeSIsImFsbG93U2VsZWN0aW9uT25seSIsInN1cHByZXNzIiwiYW50aUNoYW5nZXMiLCJmaWx0ZXIiLCJyZXR1cm5lZCIsInYiLCJzaGlmdERvYyIsImRpc3RhbmNlIiwicmVtb3ZlZCIsInJlY29tcHV0ZU1heExlbmd0aCIsImNoZWNrV2lkdGhTdGFydCIsInJldHJlYXRGcm9udGllciIsImNoYW5nZXNIYW5kbGVyIiwiY2hhbmdlSGFuZGxlciIsIm1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvciIsInJlcGxhY2VSYW5nZSIsImFzc2lnbiIsInNwbGl0TGluZXMiLCJyZWJhc2VIaXN0U2VsU2luZ2xlIiwicmViYXNlSGlzdEFycmF5Iiwic3ViIiwib2siLCJjb3BpZWQiLCJjaGFuZ2VMaW5lIiwiaGFuZGxlIiwiY2hhbmdlVHlwZSIsIkxlYWZDaHVuayIsIkJyYW5jaENodW5rIiwicmVtb3ZlSW5uZXIiLCJpbnNlcnRJbm5lciIsIml0ZXJOIiwib2xkSGVpZ2h0IiwicmVtYWluaW5nIiwibGVhZiIsIm1heWJlU3BpbGwiLCJtZSIsInNpYmxpbmciLCJteUluZGV4IiwidXNlZCIsIkxpbmVXaWRnZXQiLCJvcHQiLCJhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlIiwidGhpcyQxIiwib2xkSCIsIm5leHRNYXJrZXJJZCIsIlRleHRNYXJrZXIiLCJtYXJrVGV4dCIsImNsb25lTm9kZSIsImlzUGFyZW50IiwiU2hhcmVkVGV4dE1hcmtlciIsIm1hcmtUZXh0U2hhcmVkIiwicmVwbGFjZWRXaXRoIiwiYWRkVG9IaXN0b3J5IiwiY3VyTGluZSIsImFkZE1hcmtlZFNwYW4iLCJjbGVhck9uRW50ZXIiLCJjbGVhckhpc3RvcnkiLCJ3aXRoT3AiLCJ2aXN1YWwiLCJkSGVpZ2h0IiwiZmluZFNoYXJlZE1hcmtlcnMiLCJmaW5kTWFya3MiLCJkZXRhY2hTaGFyZWRNYXJrZXJzIiwic3ViTWFya2VyIiwibmV4dERvY0lkIiwiRG9jIiwibGluZVNlcCIsImNsZWFuR2VuZXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiZ2V0VmFsdWUiLCJqb2luIiwibGluZVNlcGFyYXRvciIsInNldFZhbHVlIiwiZ2V0UmFuZ2UiLCJnZXRMaW5lSGFuZGxlIiwiZ2V0TGluZU51bWJlciIsImdldExpbmVIYW5kbGVWaXN1YWxTdGFydCIsImxpbmVDb3VudCIsImxpc3RTZWxlY3Rpb25zIiwic2V0Q3Vyc29yIiwiZXh0ZW5kU2VsZWN0aW9uc0J5Iiwic2V0U2VsZWN0aW9ucyIsImFkZFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbnMiLCJyZXBsYWNlU2VsZWN0aW9uIiwiZHVwIiwicmVwbGFjZVNlbGVjdGlvbnMiLCJuZXdTZWwiLCJoaW50Iiwib2xkUHJldiIsIm5ld1ByZXYiLCJjb21wdXRlUmVwbGFjZWRTZWwiLCJ1bmRvIiwicmVkbyIsInVuZG9TZWxlY3Rpb24iLCJyZWRvU2VsZWN0aW9uIiwic2V0RXh0ZW5kaW5nIiwiZ2V0RXh0ZW5kaW5nIiwiaGlzdG9yeVNpemUiLCJtYXJrQ2xlYW4iLCJjaGFuZ2VHZW5lcmF0aW9uIiwiZm9yY2VTcGxpdCIsImlzQ2xlYW4iLCJnZW4iLCJnZXRIaXN0b3J5Iiwic2V0SGlzdG9yeSIsImhpc3REYXRhIiwic2V0R3V0dGVyTWFya2VyIiwiZ3V0dGVySUQiLCJjbGVhckd1dHRlciIsImxpbmVJbmZvIiwiYWRkTGluZUNsYXNzIiwid2hlcmUiLCJyZW1vdmVMaW5lQ2xhc3MiLCJhZGRMaW5lV2lkZ2V0IiwiaW5zZXJ0QXQiLCJhYm92ZVZpc2libGUiLCJyZW1vdmVMaW5lV2lkZ2V0Iiwic2V0Qm9va21hcmsiLCJyZWFsT3B0cyIsImZpbmRNYXJrc0F0IiwiZ2V0QWxsTWFya3MiLCJwb3NGcm9tSW5kZXgiLCJzZXBTaXplIiwiaW5kZXhGcm9tUG9zIiwiY29weUhpc3RvcnkiLCJsaW5rZWREb2MiLCJtRnJvbSIsIm1UbyIsInN1Yk1hcmsiLCJjb3B5U2hhcmVkTWFya2VycyIsInVubGlua0RvYyIsIkNvZGVNaXJyb3IiLCJzcGxpdElkcyIsIml0ZXJMaW5rZWREb2NzIiwiZ2V0RWRpdG9yIiwic2V0RGlyZWN0aW9uIiwiZWFjaExpbmUiLCJsYXN0RHJvcCIsIm9uRHJvcCIsImNsZWFyRHJhZ0N1cnNvciIsImZpbGVzIiwiZGF0YVRyYW5zZmVyIiwiaXNSZWFkT25seSIsIkZpbGVSZWFkZXIiLCJGaWxlIiwicmVhZCIsIm1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkIiwicmVhZFRleHRGcm9tRmlsZSIsImZpbGUiLCJhbGxvd0Ryb3BGaWxlVHlwZXMiLCJyZWFkZXIiLCJvbmVycm9yIiwib25sb2FkIiwicmVhZEFzVGV4dCIsImRyYWdnaW5nVGV4dCIsInRleHQkMSIsImdldERhdGEiLCJzZWxlY3RlZCIsImRyYWdDdXJzb3IiLCJmb3JFYWNoQ29kZU1pcnJvciIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJieUNsYXNzIiwiZWRpdG9ycyIsImdsb2JhbHNSZWdpc3RlcmVkIiwiZW5zdXJlR2xvYmFsSGFuZGxlcnMiLCJyZXNpemVUaW1lciIsIm9uUmVzaXplIiwic2V0U2l6ZSIsImtleU5hbWVzIiwiMyIsIjgiLCI5IiwiMTMiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjciLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0NCIsIjQ1IiwiNDYiLCI1OSIsIjYxIiwiOTEiLCI5MiIsIjkzIiwiMTA2IiwiMTA3IiwiMTA5IiwiMTEwIiwiMTExIiwiMTQ1IiwiMTczIiwiMTg2IiwiMTg3IiwiMTg4IiwiMTg5IiwiMTkwIiwiMTkxIiwiMTkyIiwiMjE5IiwiMjIwIiwiMjIxIiwiMjIyIiwiNjMyMzIiLCI2MzIzMyIsIjYzMjM0IiwiNjMyMzUiLCI2MzI3MiIsIjYzMjczIiwiNjMyNzUiLCI2MzI3NiIsIjYzMjc3IiwiNjMzMDIiLCJmcm9tQ2hhckNvZGUiLCJrZXlNYXAiLCJub3JtYWxpemVLZXlOYW1lIiwiYWx0IiwiY3RybCIsImNtZCIsIm1vZCIsIm5vcm1hbGl6ZUtleU1hcCIsImtleW1hcCIsImtleW5hbWUiLCJrZXlzIiwibG9va3VwS2V5IiwiZ2V0S2V5TWFwIiwiZmFsbHRocm91Z2giLCJpc01vZGlmaWVyS2V5Iiwia2V5Q29kZSIsImFkZE1vZGlmaWVyTmFtZXMiLCJub1NoaWZ0IiwiYWx0S2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Iiwia2V5TmFtZSIsImFsdEdyYXBoS2V5IiwiZGVsZXRlTmVhclNlbGVjdGlvbiIsImNvbXB1dGUiLCJraWxsIiwidG9LaWxsIiwicmVwbGFjZWQiLCJtb3ZlQ2hhckxvZ2ljYWxseSIsIm1vdmVMb2dpY2FsbHkiLCJlbmRPZkxpbmUiLCJ2aXN1YWxseSIsInByZXAiLCJ0YXJnZXRUb3AiLCJiYXNpYyIsInBjRGVmYXVsdCIsImVtYWNzeSIsIm1hY0RlZmF1bHQiLCJjb21tYW5kcyIsInNpbmdsZVNlbGVjdGlvbiIsImtpbGxMaW5lIiwiZGVsZXRlTGluZSIsImRlbExpbmVMZWZ0IiwiZGVsV3JhcHBlZExpbmVMZWZ0IiwiZGVsV3JhcHBlZExpbmVSaWdodCIsInJpZ2h0UG9zIiwiZ29Eb2NTdGFydCIsImdvRG9jRW5kIiwiZ29MaW5lU3RhcnQiLCJnb0xpbmVTdGFydFNtYXJ0IiwibGluZVN0YXJ0U21hcnQiLCJnb0xpbmVFbmQiLCJ2aXN1YWxMaW5lRW5kIiwibGluZUVuZCIsImdvTGluZVJpZ2h0IiwiZ29MaW5lTGVmdCIsImdvTGluZUxlZnRTbWFydCIsImdvTGluZVVwIiwibW92ZVYiLCJnb0xpbmVEb3duIiwiZ29QYWdlVXAiLCJnb1BhZ2VEb3duIiwiZ29DaGFyTGVmdCIsIm1vdmVIIiwiZ29DaGFyUmlnaHQiLCJnb0NvbHVtbkxlZnQiLCJnb0NvbHVtblJpZ2h0IiwiZ29Xb3JkTGVmdCIsImdvR3JvdXBSaWdodCIsImdvR3JvdXBMZWZ0IiwiZ29Xb3JkUmlnaHQiLCJkZWxDaGFyQmVmb3JlIiwiZGVsZXRlSCIsImRlbENoYXJBZnRlciIsImRlbFdvcmRCZWZvcmUiLCJkZWxXb3JkQWZ0ZXIiLCJkZWxHcm91cEJlZm9yZSIsImRlbEdyb3VwQWZ0ZXIiLCJpbmRlbnRBdXRvIiwiaW5kZW50U2VsZWN0aW9uIiwiaW5kZW50TW9yZSIsImluZGVudExlc3MiLCJpbnNlcnRUYWIiLCJpbnNlcnRTb2Z0VGFiIiwic3BhY2VzIiwiZGVmYXVsdFRhYiIsImV4ZWNDb21tYW5kIiwidHJhbnNwb3NlQ2hhcnMiLCJuZXdsaW5lQW5kSW5kZW50Iiwic2VscyIsImluZGVudExpbmUiLCJvcGVuTGluZSIsInRvZ2dsZU92ZXJ3cml0ZSIsImZpcnN0Tm9uV1MiLCJpbldTIiwiZG9IYW5kbGVCaW5kaW5nIiwiYm91bmQiLCJkcm9wU2hpZnQiLCJlbnN1cmVQb2xsZWQiLCJwcmV2U2hpZnQiLCJzdG9wU2VxIiwiZGlzcGF0Y2hLZXkiLCJzZXEiLCJrZXlTZXEiLCJkaXNwYXRjaEtleUlubmVyIiwia2V5TWFwcyIsImV4dHJhS2V5cyIsImxvb2t1cEtleUZvckVkaXRvciIsImhhbmRsZUtleUJpbmRpbmciLCJtb3Rpb24iLCJsYXN0U3RvcHBlZEtleSIsIm9uS2V5RG93biIsImhhbmRsZWQiLCJ1cCIsInNob3dDcm9zc0hhaXIiLCJvbktleVVwIiwib25LZXlQcmVzcyIsImNoYXJDb2RlIiwiaGFuZGxlQ2hhckJpbmRpbmciLCJsYXN0Q2xpY2siLCJsYXN0RG91YmxlQ2xpY2siLCJQYXN0Q2xpY2siLCJvbk1vdXNlRG93biIsInN1cHBvcnRzVG91Y2giLCJjbGlja0luR3V0dGVyIiwicmVwZWF0Iiwibm93IiwiY29tcGFyZSIsImNsaWNrUmVwZWF0Iiwic2VsZWN0aW5nVGV4dCIsImhhbmRsZU1hcHBlZEJ1dHRvbiIsImNvbnRhaW5lZCIsImJlaGF2aW9yIiwib3B0aW9uIiwidW5pdCIsImFkZE5ldyIsIm1vdmVPbkRyYWciLCJjb25maWd1cmVNb3VzZSIsImRyYWdEcm9wIiwibW92ZWQiLCJkcmFnRW5kIiwibW91c2VNb3ZlIiwiZHJhZ1N0YXJ0IiwiZTIiLCJsZWZ0QnV0dG9uU3RhcnREcmFnIiwib3VyUmFuZ2UiLCJvdXJJbmRleCIsInN0YXJ0U2VsIiwicmFuZ2VGb3JVbml0IiwibGFzdFBvcyIsImV4dGVuZFRvIiwic3RhcnRDb2wiLCJwb3NDb2wiLCJsZWZ0UG9zIiwib2xkUmFuZ2UiLCJyYW5nZXMkMSIsImFuY2hvckxpbmUiLCJib3VuZGFyeSIsImhlYWRJbmRleCIsInVzZVBhcnQiLCJiaWRpU2ltcGxpZnkiLCJlZGl0b3JTaXplIiwiY291bnRlciIsIm1vdmUiLCJidXR0b25zIiwiY3VyQ291bnQiLCJsZWZ0QnV0dG9uU2VsZWN0IiwibGVmdEJ1dHRvbkRvd24iLCJvbkNvbnRleHRNZW51IiwiZmluZFdvcmRBdCIsImd1dHRlckV2ZW50IiwicHJldmVudCIsIm1YIiwibVkiLCJ0b3VjaGVzIiwibGluZUJveCIsImciLCJjb250ZXh0TWVudUluR3V0dGVyIiwidGhlbWVDaGFuZ2VkIiwidGhlbWUiLCJJbml0IiwiZGVmYXVsdHMiLCJvcHRpb25IYW5kbGVycyIsImRyYWdEcm9wQ2hhbmdlZCIsImZ1bmNzIiwiZHJhZ0Z1bmN0aW9ucyIsInRvZ2dsZSIsImVudGVyIiwib3ZlciIsImxlYXZlIiwiZHJvcCIsIndyYXBwaW5nQ2hhbmdlZCIsImlucHV0U3R5bGVzIiwiaW5wdXRTdHlsZSIsInBhc3RlSW5jb21pbmciLCJjdXRJbmNvbWluZyIsImF1dG9mb2N1cyIsIndvcmQiLCJnZXRGaWVsZCIsInRvdWNoRmluaXNoZWQiLCJwcmV2VG91Y2giLCJmaW5pc2hUb3VjaCIsImZhckF3YXkiLCJ0b3VjaCIsInJhZGl1c1giLCJyYWRpdXNZIiwiaXNNb3VzZUxpa2VUb3VjaEV2ZW50IiwicGFnZVgiLCJwYWdlWSIsImZyYWciLCJvbkRyYWdPdmVyIiwic2V0RGF0YSIsImVmZmVjdEFsbG93ZWQiLCJzZXREcmFnSW1hZ2UiLCJpbWciLCJzcmMiLCJfdG9wIiwib25EcmFnU3RhcnQiLCJpbnAiLCJyZWdpc3RlckV2ZW50SGFuZGxlcnMiLCJmaW5pc2hJbml0IiwiaW5pdEhvb2tzIiwidGV4dFJlbmRlcmluZyIsImhvdyIsImFnZ3Jlc3NpdmUiLCJpbmRlbnQiLCJjdXJTcGFjZSIsImN1clNwYWNlU3RyaW5nIiwiaW5kZW50VW5pdCIsImluZGVudFN0cmluZyIsImluZGVudFdpdGhUYWJzIiwicG9zJDEiLCJkZWZpbmVJbml0SG9vayIsImxhc3RDb3BpZWQiLCJzZXRMYXN0Q29waWVkIiwibmV3TGFzdENvcGllZCIsImFwcGx5VGV4dElucHV0IiwiaW5zZXJ0ZWQiLCJkZWxldGVkIiwicmVjZW50IiwicGFzdGUiLCJ0ZXh0TGluZXMiLCJtdWx0aVBhc3RlIiwicGFzdGVMaW5lc1BlclNlbGVjdGlvbiIsImxpbmVXaXNlIiwiY2hhbmdlRXZlbnQiLCJ0cmlnZ2VyRWxlY3RyaWMiLCJoYW5kbGVQYXN0ZSIsInBhc3RlZCIsImNsaXBib2FyZERhdGEiLCJkaXNhYmxlSW5wdXQiLCJlbGVjdHJpY0NoYXJzIiwic21hcnRJbmRlbnQiLCJnZXRNb2RlQXQiLCJlbGVjdHJpY0lucHV0IiwiY29weWFibGVSYW5nZXMiLCJsaW5lUmFuZ2UiLCJkaXNhYmxlQnJvd3Nlck1hZ2ljIiwiZmllbGQiLCJzcGVsbGNoZWNrIiwiYXV0b2NvcnJlY3QiLCJhdXRvY2FwaXRhbGl6ZSIsImhpZGRlblRleHRhcmVhIiwiYm9yZGVyIiwiZmluZFBvc0giLCJvcmlnRGlyIiwibGluZURpciIsIm1vdmVPbmNlIiwiYm91bmRUb0xpbmUiLCJiaWRpIiwibXYiLCJnZXRXcmFwcGVkTGluZUV4dGVudCIsIm1vdmVJblN0b3JhZ2VPcmRlciIsInNlYXJjaEluVmlzdWFsTGluZSIsImdldFJlcyIsInJlcyIsIm5leHRDaCIsIm1vdmVWaXN1YWxseSIsInNhd1R5cGUiLCJnZXRIZWxwZXIiLCJoaXRTaWRlIiwiZmluZFBvc1YiLCJwYWdlU2l6ZSIsIm1vdmVBbW91bnQiLCJDb250ZW50RWRpdGFibGVJbnB1dCIsImxhc3RBbmNob3JOb2RlIiwibGFzdEFuY2hvck9mZnNldCIsImxhc3RGb2N1c05vZGUiLCJsYXN0Rm9jdXNPZmZzZXQiLCJwb2xsaW5nIiwiY29tcG9zaW5nIiwiZ3JhY2VQZXJpb2QiLCJyZWFkRE9NVGltZW91dCIsInBvc1RvRE9NIiwiYmFkUG9zIiwiYmFkIiwiZG9tVG9Qb3MiLCJsaW5lTm9kZSIsImxvY2F0ZU5vZGVJbkxpbmVWaWV3IiwidGV4dE5vZGUiLCJ0b3BOb2RlIiwibm9kZVZhbHVlIiwiY3VyTm9kZSIsInRleHRDb250ZW50IiwicHJldmlvdXNTaWJsaW5nIiwiZGlzdCQxIiwib25Db3B5Q3V0IiwibGluZVdpc2VDb3B5Q3V0IiwiY2xlYXJEYXRhIiwia2x1ZGdlIiwiaGFkRm9jdXMiLCJzaG93UHJpbWFyeVNlbGVjdGlvbiIsInVwZGF0ZUZyb21ET00iLCJyZWFkRnJvbURPTVNvb24iLCJmb3JjZUNvbXBvc2l0aW9uRW5kIiwic2hvd011bHRpcGxlU2VsZWN0aW9ucyIsImN1ckFuY2hvciIsImN1ckZvY3VzIiwicm5nIiwicmFuZ2VDb3VudCIsImdldFJhbmdlQXQiLCJzdGFydEdyYWNlUGVyaW9kIiwicmVtZW1iZXJTZWxlY3Rpb24iLCJzZWxlY3Rpb25JbkVkaXRvciIsImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwiYmx1ciIsInBvbGxTZWxlY3Rpb24iLCJwb2xsSW50ZXJ2YWwiLCJwb2xsIiwic2NhbiIsImlzSW5HdXR0ZXIiLCJ0cmlnZ2VyT25LZXlEb3duIiwicG9sbENvbnRlbnQiLCJmcm9tSW5kZXgiLCJmcm9tTm9kZSIsInRvTm9kZSIsInRvSW5kZXgiLCJuZXdUZXh0IiwiY2xvc2luZyIsImV4dHJhTGluZWJyZWFrIiwiY2xvc2UiLCJhZGRUZXh0Iiwid2FsayIsImNtVGV4dCIsIm1hcmtlcklEIiwiaXNCbG9jayIsIm5vZGVOYW1lIiwiZG9tVGV4dEJldHdlZW4iLCJvbGRUZXh0IiwiY3V0RnJvbnQiLCJjdXRFbmQiLCJvbGRUb3AiLCJtYXhDdXRGcm9udCIsIm5ld0JvdCIsIm9sZEJvdCIsIm1heEN1dEVuZCIsImNoRnJvbSIsImNoVG8iLCJjb250ZW50RWRpdGFibGUiLCJyZWFkT25seUNoYW5nZWQiLCJyZXNldFBvc2l0aW9uIiwiVGV4dGFyZWFJbnB1dCIsInByZXZJbnB1dCIsInBvbGxpbmdGYXN0IiwiY3JlYXRlRmllbGQiLCJ0ZXh0YXJlYSIsInByZXBhcmVDb3B5Q3V0IiwiZmFzdFBvbGwiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJfZGlzcGxheSIsIm1vdmVJbnB1dFdpdGhDdXJzb3IiLCJoZWFkUG9zIiwid3JhcE9mZiIsImxpbmVPZmYiLCJ0ZVRvcCIsInRlTGVmdCIsImRyYXduIiwiY29udGV4dE1lbnVQZW5kaW5nIiwic2xvd1BvbGwiLCJtaXNzZWQiLCJzYW1lIiwicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51Iiwib2xkU2Nyb2xsWSIsIm9sZENTUyIsIm9sZFdyYXBwZXJDU1MiLCJ3cmFwcGVyQm94Iiwib2Zmc2V0UGFyZW50Iiwic2Nyb2xsWSIsInNjcm9sbFRvIiwicmVoaWRlIiwiZGV0ZWN0aW5nU2VsZWN0QWxsIiwicHJlcGFyZVNlbGVjdEFsbEhhY2siLCJtb3VzZXVwIiwiZXh0dmFsIiwiZGlzYWJsZWQiLCJkZWZsdCIsIm5vdE9uSW5pdCIsImRlZmluZU9wdGlvbiIsIm5ld0JyZWFrcyIsInJlZnJlc2giLCJnZXRJbnB1dEZpZWxkIiwiZGV0YWNoIiwiYXR0YWNoIiwiaW50ZWdlciIsImRlZmluZU9wdGlvbnMiLCJoZWxwZXJzIiwic2V0T3B0aW9uIiwiZ2V0RG9jIiwiYWRkS2V5TWFwIiwicmVtb3ZlS2V5TWFwIiwiYWRkT3ZlcmxheSIsInNjb3JlIiwicHJpb3JpdHkiLCJpbnNlcnRTb3J0ZWQiLCJtb2RlU3BlYyIsInJlbW92ZU92ZXJsYXkiLCJuZXdSYW5nZXMiLCJnZXRUb2tlbkF0IiwiZ2V0TGluZVRva2VucyIsImdldFRva2VuVHlwZUF0IiwiZ2V0SGVscGVycyIsImhlbHAiLCJfZ2xvYmFsIiwiZ2V0U3RhdGVBZnRlciIsImRlZmF1bHRUZXh0SGVpZ2h0IiwiZGVmYXVsdENoYXJXaWR0aCIsImdldFZpZXdwb3J0IiwiYWRkV2lkZ2V0IiwidnNwYWNlIiwiaHNwYWNlIiwidHJpZ2dlck9uS2V5UHJlc3MiLCJ0cmlnZ2VyT25LZXlVcCIsInRyaWdnZXJPbk1vdXNlRG93biIsImFtb3VudCIsInJ0bE1vdmVWaXN1YWxseSIsImdvYWxDb2x1bW4iLCJnb2FscyIsInN0YXJ0Q2hhciIsImNoZWNrIiwiZ2V0U2Nyb2xsSW5mbyIsInNjcm9sbFRvUmFuZ2UiLCJpbnRlcnByZXQiLCJzd2FwRG9jIiwicGhyYXNlIiwicGhyYXNlVGV4dCIsInBocmFzZXMiLCJnZXRXcmFwcGVyRWxlbWVudCIsImdldFNjcm9sbGVyRWxlbWVudCIsImdldEd1dHRlckVsZW1lbnQiLCJyZWdpc3RlckhlbHBlciIsInJlZ2lzdGVyR2xvYmFsSGVscGVyIiwicHJlZGljYXRlIiwiYWRkRWRpdG9yTWV0aG9kcyIsImRvbnREZWxlZ2F0ZSIsIm1ldGhvZCIsImRlZmluZU1JTUUiLCJtaW1lIiwiZGVmaW5lRXh0ZW5zaW9uIiwiZnVuYyIsImRlZmluZURvY0V4dGVuc2lvbiIsImZyb21UZXh0QXJlYSIsInRhYmluZGV4IiwicGxhY2Vob2xkZXIiLCJyZWFsU3VibWl0IiwiZm9ybSIsImxlYXZlU3VibWl0TWV0aG9kQWxvbmUiLCJzdWJtaXQiLCJ3cmFwcGVkU3VibWl0IiwiZ2V0VGV4dEFyZWEiLCJ0b1RleHRBcmVhIiwiY21wUG9zIiwiYWRkTGVnYWN5UHJvcHMiLCJ2ZXJzaW9uIiwiZnJlZUV4cG9ydHMiLCJmcmVlTW9kdWxlIiwiZnJlZVByb2Nlc3MiLCJwcm9jZXNzIiwibm9kZVV0aWwiLCJyZXF1aXJlIiwiYmluZGluZyIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsImFsbG9jVW5zYWZlIiwiYnVmZmVyIiwiaXNEZWVwIiwib3JpZ2luYWxNb2R1bGUiLCJ3ZWJwYWNrUG9seWZpbGwiLCJpc01hYyIsIlVUSUwiLCJ0b2dnbGVDbGFzcyIsInJlbW92ZUNsYXNzIiwiZ2l0R3ViVXJsIiwiQ09ORklHIiwiZ2V0U3RhdGUiLCJDTSIsIkVESVRPUiIsInRvZ2dsZUJsb2NrcXVvdGUiLCJ3aW5kb3dsIiwiY3VycmVudFRhcmdldCIsImVkaXRvciIsIiRlZGl0b3IiLCIkY29kZW1pcnJvciIsInN0YXQiLCJfb3B0aW9ucyIsIiR0b29scyIsImJsb2NrU3R5bGVzIiwic3RhcnRQb2ludCIsImVuZFBvaW50IiwicmVwbCIsIl9yZXBsYWNlU2VsZWN0aW9uIiwic3RhcnRFbmQiLCJ1cmwiLCJ0b29sYmFyQnVpbHRJbkJ1dHRvbnMiLCJhY3Rpb24iLCJzdGFydENoYXJzIiwiZW5kQ2hhcnMiLCJkZWZhdWx0IiwiaXNFZGl0VG9vbHMiLCJjdXJySGVhZGluZ0xldmVsIiwiaW5zZXJ0VGV4dHMiLCJsaW5rIiwicHJvbXB0IiwiaW1hZ2UiLCJjb25zb2xlIiwibG9nIiwib3BlbiIsIiRzdGF0dXMiLCJlZGl0b3JFbCIsImVsIiwicHJldmlld0VsIiwibWRFbCIsInRvb2xQcmV2aWV3RWwiLCJ0b29sU2hvd0FsbEVsIiwidG9vbEVkaXRFbCIsImNvbW1vbkFjdGlvbiIsInRhYmxlIiwiaG9yaXpvbnRhbFJ1bGUiLCJwcm9tcHRUZXh0cyIsInNob3J0Y3V0cyIsImZpeFNob3J0Y3V0IiwiVXRpbCIsIl9tZXJnZVByb3BlcnRpZXMiLCJjbGFzc0xpc3QiLCJvYmoyQXJyIiwiaXNBcnJheSIsImtleUFyciIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwiaXRlbSIsImlzRnVuY3Rpb24iLCJmbiIsImNvbmZpZyIsImJhc2VVcmwiLCJpY29uTGluayIsInRoZW1lRGFyayIsInRoZW1lTGlnaHQiLCJmdWxsc2NyZWVuIiwiZWRpdCIsInByZXZpZXciLCJkYXJrIiwibGlnaHQiLCJsYW5ndWFnZSIsImxhbmciLCJpc09wZW4iLCJxaW5pdSIsInRva2VuQXBpVXJsIiwicmVnaW9uIiwicHV0RXh0cmEiLCJ0b29sYmFySXRlbSIsInN0YXR1c0JhciIsImNvbHVtbnMiLCJyZXQiLCJib2xkIiwicXVvdGUiLCJpdGFsaWMiLCJzdHJpa2V0aHJvdWdoIiwiY21DZmciLCJtb2RlQ2ZnIiwiaHRtbE1vZGUiLCJodG1sTW9kZU1pc3NpbmciLCJoaWdobGlnaHRGb3JtYXR0aW5nIiwibWF4QmxvY2txdW90ZURlcHRoIiwidGFza0xpc3RzIiwiZW1vamkiLCJmZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmciLCJ4bWwiLCJ0b2tlblR5cGVPdmVycmlkZXMiLCJ0b2tlblR5cGVzIiwiaGVhZGVyIiwibGlzdDEiLCJsaXN0MiIsImxpc3QzIiwiaHIiLCJpbWFnZUFsdFRleHQiLCJpbWFnZU1hcmtlciIsImZvcm1hdHRpbmciLCJsaW5rSW5saW5lIiwibGlua0VtYWlsIiwibGlua1RleHQiLCJsaW5rSHJlZiIsImVtIiwic3Ryb25nIiwidG9rZW5UeXBlIiwiaHJSRSIsImxpc3RSRSIsInRhc2tMaXN0UkUiLCJhdHhIZWFkZXJSRSIsImFsbG93QXR4SGVhZGVyV2l0aG91dFNwYWNlIiwic2V0ZXh0SGVhZGVyUkUiLCJ0ZXh0UkUiLCJmZW5jZWRDb2RlUkUiLCJsaW5rRGVmUkUiLCJwdW5jdHVhdGlvbiIsInN3aXRjaElubGluZSIsImlubGluZSIsInN3aXRjaEJsb2NrIiwiYmxvY2siLCJsaW5rVGl0bGUiLCJpbmRlbnRlZENvZGUiLCJodG1sQmxvY2siLCJleGl0IiwiaHRtbFN0YXRlIiwidGFnU3RhcnQiLCJ0b2tlbml6ZSIsImlzSW5UZXh0IiwiaW5saW5lTm9ybWFsIiwiYmxvY2tOb3JtYWwiLCJ0cmFpbGluZ1NwYWNlTmV3TGluZSIsInByZXZMaW5lIiwidGhpc0xpbmUiLCJmaXJzdFRva2VuT25MaW5lIiwicHJldkxpbmVMaW5lSXNFbXB0eSIsInByZXZMaW5lSXNJbmRlbnRlZENvZGUiLCJwcmV2TGluZUlzSHIiLCJwcmV2TGluZUlzTGlzdCIsIm1heE5vbkNvZGVJbmRlbnRhdGlvbiIsImxpc3RTdGFjayIsImxpbmVJbmRlbnRhdGlvbiIsImluZGVudGF0aW9uRGlmZiIsImFsbG93c0lubGluZUNvbnRpbnVhdGlvbiIsImZlbmNlZENvZGVFbmQiLCJpc0hyIiwiZ2V0VHlwZSIsInNldGV4dCIsImxpc3RUeXBlIiwidGFza0xpc3QiLCJmZW5jZWRFbmRSRSIsImxvY2FsTW9kZSIsImZpbmRNb2RlQnlOYW1lIiwibWltZXMiLCJsb2NhbFN0YXRlIiwibG9jYWwiLCJmb290bm90ZUxpbmsiLCJtZF9pbnNpZGUiLCJyZXR1cm5UeXBlIiwiY3Vyckxpc3RJbmQiLCJoYXNFeGl0ZWRMaXN0IiwibWF4RmVuY2VkRW5kSW5kIiwidGFza09wZW4iLCJ0YXNrQ2xvc2VkIiwibGlzdE1vZCIsImhhbmRsZVRleHQiLCJtYXRjaENoIiwicmVnZXgiLCJwcmV2aW91c0Zvcm1hdHRpbmciLCJmb3JtYXR0aW5nRXNjYXBlIiwiYXR0cyIsInN1YnN0cmluZyIsImxlZnRGbGFua2luZyIsInJpZ2h0RmxhbmtpbmciLCJzZXRFbSIsInNldFN0cm9uZyIsInJldFR5cGUiLCJlbmRDaGFyIiwicmV0dXJuU3RhdGUiLCJsaW5rUkUiLCJmb290bm90ZUxpbmtJbnNpZGUiLCJmb290bm90ZVVybCIsInRleHRBZnRlciIsImJsb2NrQ29tbWVudFN0YXJ0IiwiYmxvY2tDb21tZW50RW5kIiwiY2xvc2VCcmFja2V0cyIsImZvbGQiLCJvdmVybGF5TW9kZSIsImNvbWJpbmUiLCJiYXNlUG9zIiwiYmFzZUN1ciIsIm92ZXJsYXlQb3MiLCJvdmVybGF5Q3VyIiwic3RyZWFtU2VlbiIsImNvbWJpbmVUb2tlbnMiLCJvdmVybGF5VG9rZW4iLCJuYW1lU3RhcnRDaGFyIiwieG1sVGFnU3RhcnQiLCJJdGVyIiwidGFnQXQiLCJ0b1RhZ0VuZCIsImd0IiwibGFzdFNsYXNoIiwibGFzdEluZGV4T2YiLCJzZWxmQ2xvc2UiLCJ0b1RhZ1N0YXJ0IiwibHQiLCJ0b05leHRUYWciLCJ0b1ByZXZUYWciLCJmaW5kTWF0Y2hpbmdDbG9zZSIsInN0YWNrIiwic3RhcnRMaW5lIiwiZmluZE1hdGNoaW5nT3BlbiIsImVuZExpbmUiLCJvcGVuVGFnIiwic3RhcnRQb3MiLCJlbmRQb3MiLCJmaW5kTWF0Y2hpbmdUYWciLCJmaW5kRW5jbG9zaW5nVGFnIiwic2NhbkZvckNsb3NpbmdUYWciLCJkb0ZvbGQiLCJmaW5kZXIiLCJtaW5TaXplIiwiYWxsb3dGb2xkZWQiLCJtYXJrcyIsIl9faXNGb2xkIiwiY2xlYXJlZCIsIm15V2lkZ2V0IiwibWFrZVdpZGdldCIsIm15UmFuZ2UiLCJuZXdGb2xkRnVuY3Rpb24iLCJyYW5nZUZpbmRlciIsInRvZ2dsZUZvbGQiLCJmb2xkQ29kZSIsInVuZm9sZCIsImZvbGRBbGwiLCJ1bmZvbGRBbGwiLCJkZWZhdWx0T3B0aW9ucyIsImF1dG8iLCJtaW5Gb2xkU2l6ZSIsInNjYW5VcCIsImVkaXRvck9wdGlvbnMiLCJmb2xkT3B0aW9ucyIsIl9fd2VicGFja19hbWRfb3B0aW9uc19fIiwiY29kZW1pcm9yVG9vbHMiLCJsYW5nTWFwIiwibGFuZ0VuIiwibGFuZ1poIiwicWluaXVVcGxvYWQiLCJDTWRFZGl0b3IiLCJpbml0RGF0YSIsInRoZW4iLCJpbml0VmlldyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiaW5pdE9wdGlvbiIsImluaXRFZGl0b3JTdGF0dXMiLCJpbml0UWluaXUiLCJjcmVhdGVJY29uTGluayIsImluaXRFdmVudCIsImluaXRDb2RlTWlycm9yRGF0YSIsImluaXRNYXJrZG93bkRhdGEiLCJpbml0RGVmYXVsdENvbnRlbnQiLCJsaWZlY3ljbGVNb3VudGVkIiwiaW5pdFN0YXR1c0V2ZW50IiwiaW5pdFRvb2xzRXZlbnQiLCJsYW5nS2V5IiwiYWRkRWRpdENvbnRhaW5lclBhc2VJbWciLCJpc0NyZWF0ZWRJY29uTGluayIsIm9saW5rIiwiaHJlZiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9tUmVuZGVyIiwidG9vbHNPYmoiLCJ0b29sc0FyciIsImNhbGxCYWNrIiwidG9vbEVsIiwiQ29kZW1pcnJvciIsInRleHRBcmVhRWxlbWVudCIsImNyZWF0ZUNvZGVNaXJyb3JFbGVtZW50IiwibWF0Y2hCcmFja2V0cyIsInN0eWxlQWN0aXZlTGluZSIsImF1dG9DbG9zZUJyYWNrZXRzIiwiYXV0b0Nsb3NlVGFncyIsImZvbGRHdXR0ZXIiLCJpbml0Q29kZU1pcnJvckV2ZW50IiwiYWRkX0NNX2NoYW5nZV9ldmVudEhhbmRsZSIsImFkZF9DTV9jdXJzb3JBY3Rpdml0eV9ldmVudEhhbmRsZSIsImFkZFNjcm9sbFN5bmMiLCJkZWJvdW5jZSIsIm9uQ29kZU1pcnJvckNoYW5nZSIsImNvbW1vbkNvZGVNaXJyb3JFdmVudEhhbmRsZSIsIm9uQ29kZU1pcnJvckN1cnNvckFjdGl2aXR5Iiwic2V0SHRtbFZhbHVlIiwidXBkYXRlU3RhdHVzQmFyIiwibWFya2VkIiwibWFya2VkT3B0aW9ucyIsImdmbSIsInRhYmxlcyIsImJyZWFrcyIsInBlZGFudGljIiwic2FuaXRpemUiLCJzbWFydExpc3RzIiwic21hcnR5cGFudHMiLCJobGpzIiwiaGlnaGxpZ2h0QXV0byIsIiRtYXJrZWQiLCJzZXRPcHRpb25zIiwiZGVmYXVsdENvbiIsIm1kVmFsdWUiLCJodG1sU3RyIiwiaW5uZXJIVE1MIiwiY1Njcm9sbCIsInBTY3JvbGwiLCJyYXRpbyIsInBhcnNlRmxvYXQiLCJjb25MZW4iLCJyZW5kZXJFZGl0b3JDb250ZW50UG9zaXRpb24iLCJyZW5kZXJFZGl0Q29udGVudExlbmd0aCIsImxlbkVsZW1lbnQiLCJjbUN1cnNvciIsImN1cnJDb2wiLCJjdXJyTGluZSIsImluaXRFdmVudFRvZ2dsZVRoZW1lIiwib1RoZW1lRWwiLCJRaW5pdVVwbGFvZCIsIm9FbCIsIm9yaWdpbmFsRXZlbnQiLCJpdGVtcyIsImJsb2IiLCJnZXRBc0ZpbGUiLCJyZW5kZXIiLCJldnQiLCJoYW5kbGVJbWFnZVVwbG9hZCIsInJlYWRBc0RhdGFVUkwiLCJpbWdVcmwiLCJwdXRiNjQiLCJkb21haW4iLCJoYXNoIiwiY2F0Y2giLCJlcnIiLCJlbGVtZW50IiwiYmluZGluZ3MiLCJnZXRPcHRpb25zIiwidG9nZ2xlRnVsbFNjcmVlbiIsImNvZGVtaXJyb3IiLCJUT09MUyIsInJlbmRlclRvb2xzIiwicmVuZGVyQ29kZSIsInJlbmRlclByaXZpZXciLCJyZW5kZXJTdGF0dXMiLCJlcnJvciIsInRvb2xzTWFpbkh0bWxTdHIiLCJjcmVhdGVUb29sc01haW4iLCJ0b29sc0hhbmRsZUh0bWxTdHIiLCJjcmVhdGVUb29sc0hhbmRsZSIsImljb25zIiwidG9vbHNFZGl0IiwiZ2V0VG9vbHNFZGl0IiwidG9vbHNFZGl0TGVuIiwiY3JlYXRlVG9vbHNJdGVtIiwiaWNvbnNPcHRpb24iLCJyZXN1bHRPYmoiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJzb3J0VG9vbHNJY29uIiwiX2ljb25zIiwiZ2V0VG9vbHNIYW5kbGUiLCJvYmoxIiwib2JqMiIsImN1cnJTaG9ydGN1dHNJdGVtIiwiY3VyclBsYXRTaG9ydGN1dHNJdGVtIiwiaXRlbVRpdGxlIiwiZ2V0VG9vbEl0ZW1UaXRsZVRleHQiLCJpdGVtTmFtZSIsInBvc2l0b25IdG1sU3RyIiwiY3JlYXRlU3RhdHVzUG9zaXRpb24iLCJsZW5ndGhIdG1sU3RyIiwiY3JlYXRlU3RhdHVzTGVucyIsInRvZ2dsZVRoZW1lSHRtbFN0ciIsImNyZWF0ZVN0YXR1c1RvZ2dsZVRoZW1lIiwiaHRtbENvbmZpZyIsImF1dG9TZWxmQ2xvc2VycyIsImltcGxpY2l0bHlDbG9zZWQiLCJjb250ZXh0R3JhYmJlcnMiLCJkb05vdEluZGVudCIsImFsbG93VW5xdW90ZWQiLCJhbGxvd01pc3NpbmciLCJjYXNlRm9sZCIsInhtbENvbmZpZyIsImFsbG93TWlzc2luZ1RhZ05hbWUiLCJlZGl0b3JDb25mIiwiY29uZmlnXyIsInNldFN0eWxlIiwiaW5UZXh0IiwiY2hhaW4iLCJwYXJzZXIiLCJpbkJsb2NrIiwiZG9jdHlwZSIsImRlcHRoIiwiaW5UYWciLCJjbG9zdXJlIiwiYmFzZVN0YXRlIiwidGFnTmFtZSIsImlzSW5BdHRyaWJ1dGUiLCJzdHJpbmdTdGFydENvbCIsInRlcm1pbmF0b3IiLCJzdGFydE9mTGluZSIsIm5vSW5kZW50IiwicG9wQ29udGV4dCIsIm1heWJlUG9wQ29udGV4dCIsIm5leHRUYWdOYW1lIiwicGFyZW50VGFnTmFtZSIsInRhZ05hbWVTdGF0ZSIsImNsb3NlVGFnTmFtZVN0YXRlIiwiYXR0clN0YXRlIiwibWF0Y2hDbG9zaW5nIiwiY2xvc2VTdGF0ZSIsImNsb3NlU3RhdGVFcnIiLCJfc3RyZWFtIiwiYXR0ckVxU3RhdGUiLCJhdHRyVmFsdWVTdGF0ZSIsImF0dHJDb250aW51ZWRTdGF0ZSIsImJhc2VJbmRlbnQiLCJmdWxsTGluZSIsIm11bHRpbGluZVRhZ0luZGVudFBhc3RUYWciLCJtdWx0aWxpbmVUYWdJbmRlbnRGYWN0b3IiLCJhbGlnbkNEQVRBIiwidGFnQWZ0ZXIiLCJncmFiYmVycyIsImNvbmZpZ3VyYXRpb24iLCJza2lwQXR0cmlidXRlIiwieG1sQ3VycmVudFRhZyIsInhtbEN1cnJlbnRDb250ZXh0IiwiY3giLCJtb2RlSW5mbyIsImFsaWFzIiwiZmluZE1vZGVCeU1JTUUiLCJmaW5kTW9kZUJ5RXh0ZW5zaW9uIiwiZmluZE1vZGVCeUZpbGVOYW1lIiwiZmlsZW5hbWUiLCJkb3QiLCJ1cmxSRSIsIm1vZGVDb25maWciLCJjb2RlRGVwdGgiLCJnZm1PdmVybGF5IiwiY29kZUJsb2NrIiwiYXRlU3BhY2UiLCJkaWZmZXJlbmNlIiwiZ2l0SHViU3BpY2UiLCJtYXJrZG93bkNvbmZpZyIsInBhcnNlckNvbmZpZyIsInN0YXRlbWVudEluZGVudCIsImpzb25sZE1vZGUiLCJqc29ubGQiLCJqc29uTW9kZSIsImpzb24iLCJpc1RTIiwidHlwZXNjcmlwdCIsIndvcmRSRSIsIndvcmRDaGFyYWN0ZXJzIiwia2V5d29yZHMiLCJrdyIsIkEiLCJCIiwiQyIsIkQiLCJvcGVyYXRvciIsImF0b20iLCJpc09wZXJhdG9yQ2hhciIsImlzSnNvbmxkS2V5d29yZCIsInRwIiwiY29udCIsInRva2VuQmFzZSIsImVzY2FwZWQiLCJ0b2tlbkNvbW1lbnQiLCJleHByZXNzaW9uQWxsb3dlZCIsImluU2V0IiwicmVhZFJlZ2V4cCIsInRva2VuUXVhc2kiLCJsZXhpY2FsIiwibGFzdFR5cGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm1heWJlRW5kIiwiZmluZEZhdEFycm93IiwiZmF0QXJyb3dBdCIsImFycm93Iiwic2F3U29tZXRoaW5nIiwiYnJhY2tldCIsImF0b21pY1R5cGVzIiwiSlNMZXhpY2FsIiwiaW5TY29wZSIsInZhcm5hbWUiLCJsb2NhbFZhcnMiLCJ2YXJzIiwiY2MiLCJwYXNzIiwiaW5MaXN0IiwicmVnaXN0ZXIiLCJuZXdDb250ZXh0IiwicmVnaXN0ZXJWYXJTY29wZWQiLCJWYXIiLCJnbG9iYWxWYXJzIiwiaXNNb2RpZmllciIsImRlZmF1bHRWYXJzIiwicHVzaGNvbnRleHQiLCJwdXNoYmxvY2tjb250ZXh0IiwicG9wY29udGV4dCIsInB1c2hsZXgiLCJsZXgiLCJwb3BsZXgiLCJleHBlY3QiLCJ3YW50ZWQiLCJleHAiLCJzdGF0ZW1lbnQiLCJ2YXJkZWYiLCJwYXJlbkV4cHIiLCJtYXliZWV4cHJlc3Npb24iLCJtYXliZWVsc2UiLCJmdW5jdGlvbmRlZiIsImZvcnNwZWMiLCJlbnVtZGVmIiwidHlwZW5hbWUiLCJ0eXBlZXhwciIsImV4cHJlc3Npb24iLCJtYXliZWxhYmVsIiwibWF5YmVDYXRjaEJpbmRpbmciLCJhZnRlckV4cG9ydCIsImFmdGVySW1wb3J0IiwiZnVuYXJnIiwiZXhwcmVzc2lvbklubmVyIiwiZXhwcmVzc2lvbk5vQ29tbWEiLCJub0NvbW1hIiwiYXJyb3dCb2R5Tm9Db21tYSIsImFycm93Qm9keSIsImNvbW1hc2VwIiwibWF5YmVvcCIsIm1heWJlb3BlcmF0b3JOb0NvbW1hIiwibWF5YmVvcGVyYXRvckNvbW1hIiwiY2xhc3NFeHByZXNzaW9uIiwiYXJyYXlMaXRlcmFsIiwiY29udENvbW1hc2VwIiwib2JqcHJvcCIsInF1YXNpIiwidGFyZ2V0Tm9Db21tYSIsIm1heWJlVHlwZUFyZ3MiLCJtYXliZVRhcmdldCIsImV4cHIiLCJjb250aW51ZVF1YXNpIiwiXyIsImdldHRlclNldHRlciIsImFmdGVycHJvcCIsIm1heWJldHlwZSIsIndoYXQiLCJzZXAiLCJwcm9jZWVkIiwibWF5YmV0eXBlT3JJbiIsIm1heWJlcmV0dHlwZSIsImlzS1ciLCJhZnRlclR5cGUiLCJ0eXBlcHJvcCIsInR5cGVhcmciLCJtYXliZVJldHVyblR5cGUiLCJmdW5jdGlvbmRlY2wiLCJ0eXBlcGFyYW0iLCJtYXliZVR5cGVEZWZhdWx0IiwibWF5YmVBc3NpZ24iLCJ2YXJkZWZDb250IiwiZWx0cGF0dGVybiIsInByb3BwYXR0ZXJuIiwiX3R5cGUiLCJmb3JzcGVjMSIsImZvcnNwZWMyIiwiY2xhc3NOYW1lQWZ0ZXIiLCJjbGFzc0JvZHkiLCJjbGFzc2ZpZWxkIiwibWF5YmVGcm9tIiwiZXhwb3J0RmllbGQiLCJpbXBvcnRTcGVjIiwibWF5YmVNb3JlSW1wb3J0cyIsIm1heWJlQXMiLCJlbnVtbWVtYmVyIiwiYmFzZWNvbHVtbiIsInBhcnNlSlMiLCJmaXJzdENoYXIiLCJpc0NvbnRpbnVlZFN0YXRlbWVudCIsImRvdWJsZUluZGVudFN3aXRjaCIsImJsb2NrQ29tbWVudENvbnRpbnVlIiwibGluZUNvbW1lbnQiLCJza2lwRXhwcmVzc2lvbiIsIndoZW5DbG9zaW5nIiwiYXV0b0Nsb3NlQ3VycmVudCIsImF1dG9DbG9zZVNsYXNoIiwid2hlbk9wZW5pbmciLCJyZXBsYWNlbWVudHMiLCJ0b2siLCJ0YWdJbmZvIiwiaHRtbCIsImRvbnRDbG9zZVRhZ3MiLCJodG1sRG9udENsb3NlIiwiaW5kZW50VGFncyIsImh0bWxJbmRlbnQiLCJsb3dlclRhZ05hbWUiLCJjbG9zaW5nVGFnRXhpc3RzIiwiZW1wdHlUYWdzIiwibmV3UG9zIiwiZG9udEluZGVudE9uQXV0b0Nsb3NlIiwiYXV0b0Nsb3NlR1QiLCJ0eXBpbmdTbGFzaCIsImRvbnRJbmRlbnRPblNsYXNoIiwicmVwbGFjZW1lbnQiLCJtaXhlZCIsImNvbGxlY3Rpb24iLCJuZXdUYWciLCJuZXh0Q2xvc2UiLCJvbkN4IiwiY2xvc2VUYWciLCJlbXB0eUxpc3RSRSIsInVub3JkZXJlZExpc3RSRSIsImluY3JlbWVudFJlbWFpbmluZ01hcmtkb3duTGlzdE51bWJlcnMiLCJza2lwQ291bnQiLCJzdGFydEl0ZW0iLCJzdGFydEluZGVudCIsIm5leHRMaW5lTnVtYmVyIiwibmV4dEl0ZW0iLCJuZXh0SW5kZW50IiwibmV3TnVtYmVyIiwibmV4dE51bWJlciIsIml0ZW1OdW1iZXIiLCJuZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QiLCJlb2xTdGF0ZSIsImluUXVvdGUiLCJjdXJzb3JCZWZvcmVCdWxsZXQiLCJlbmRPZlF1b3RlIiwiZW5kT2ZMaXN0IiwibnVtYmVyZWQiLCJidWxsZXQiLCJwYWlycyIsImNsb3NlQmVmb3JlIiwidHJpcGxlcyIsImV4cGxvZGUiLCJjb25mIiwiZW5zdXJlQm91bmQiLCJCYWNrc3BhY2UiLCJnZXRDb25maWciLCJhcm91bmQiLCJjaGFyc0Fyb3VuZCIsIkVudGVyIiwibGluZXNlcCIsImNoYXJzIiwiaWRlbnRpY2FsIiwib3BlbmluZyIsImN1clR5cGUiLCJzdHJpbmdTdGFydHNBZnRlciIsImludmVydGVkIiwiaGFuZGxlQ2hhciIsIkFubm90YXRpb24iLCJzY2hlZHVsZVJlZHJhdyIsImRvUmVkcmF3IiwicmVkcmF3IiwiYnV0dG9uSGVpZ2h0Iiwic2Nyb2xsQnV0dG9uSGVpZ2h0IiwiYW5ub3RhdGlvbnMiLCJkb1VwZGF0ZSIsImNvbXB1dGVTY2FsZSIsInJlc2l6ZUhhbmRsZXIiLCJsaXN0ZW5Gb3JDaGFuZ2VzIiwiaFNjYWxlIiwiYW5ucyIsInNpbmdsZUxpbmVIIiwiY3VyTGluZU9iaiIsImdldFkiLCJuZXh0VG9wIiwiYW5uIiwiQkFDS19DTEFTUyIsImNsZWFyQWN0aXZlTGluZXMiLCJhY3RpdmVMaW5lcyIsInVwZGF0ZUFjdGl2ZUxpbmVzIiwibm9uRW1wdHkiLCJzYW1lQXJyYXkiLCJzZWxlY3Rpb25DaGFuZ2UiLCJvbkN1cnNvckFjdGl2aXR5IiwibWFya2VkU2VsZWN0aW9uIiwiY292ZXJSYW5nZSIsIm9uQ2hhbmdlIiwibWFya2VkU2VsZWN0aW9uU3R5bGUiLCJhZGRBdCIsImF0RW5kIiwib3B0cyIsIm9uR3V0dGVyQ2xpY2siLCJvblZpZXdwb3J0Q2hhbmdlIiwib25Gb2xkIiwiU3RhdGUiLCJpbmRpY2F0b3JPcGVuIiwiaW5kaWNhdG9yRm9sZGVkIiwidXBkYXRlSW5WaWV3cG9ydCIsImlzRm9sZGVkIiwidXBkYXRlRm9sZEluZm8iLCJmb2xkT3B0aW9uIiwiY2xzRm9sZGVkIiwiY2xzT3BlbiIsInZwIiwiZm9sZGVkIiwiY2hhbmdlVXBkYXRlIiwiZm9sZE9uQ2hhbmdlVGltZVNwYW4iLCJ1cGRhdGVWaWV3cG9ydFRpbWVTcGFuIiwic3RhcnRUb2tlbiIsImVuZFRva2VuIiwibGluZVRleHQiLCJuZXh0T3BlbiIsImxpbmVJbmRlbnQiLCJzcGFjZVRvIiwibXlJbmRlbnQiLCJsYXN0TGluZUluRm9sZCIsImZpbmRPcGVuaW5nIiwib3BlbkNoIiwiaGFzSW1wb3J0Iiwic2VtaSIsImhhcyIsImhhc0luY2x1ZGUiLCJpc0hlYWRlciIsInRva2VudHlwZSIsImhlYWRlckxldmVsIiwibGFzdExpbmVObyIsIm5leHROZXh0TGluZSIsIm5ld2xpbmUiLCJmZW5jZXMiLCJub29wIiwiaGVhZGluZyIsIm5wdGFibGUiLCJibG9ja3F1b3RlIiwiZGVmIiwibGhlYWRpbmciLCJwYXJhZ3JhcGgiLCJMZXhlciIsImxpbmtzIiwicnVsZXMiLCJfbGFiZWwiLCJfdGl0bGUiLCJnZXRSZWdleCIsIl90YWciLCJfY29tbWVudCIsIm1lcmdlIiwibG9vc2UiLCJjYXAiLCJidWxsIiwibGlzdFN0YXJ0IiwibGlzdEl0ZW1zIiwiaXNvcmRlcmVkIiwiaXN0YXNrIiwiaXNjaGVja2VkIiwicnRyaW0iLCJzcGxpdENlbGxzIiwiY2VsbHMiLCJvcmRlcmVkIiwidGFzayIsImNoZWNrZWQiLCJzYW5pdGl6ZXIiLCJlc2NhcGUiLCJhdXRvbGluayIsInJlZmxpbmsiLCJub2xpbmsiLCJiciIsImRlbCIsIklubGluZUxleGVyIiwicmVuZGVyZXIiLCJSZW5kZXJlciIsIlRleHRSZW5kZXJlciIsIlBhcnNlciIsImVuY29kZSIsImVzY2FwZVRlc3QiLCJlc2NhcGVSZXBsYWNlIiwiZXNjYXBlVGVzdE5vRW5jb2RlIiwiZXNjYXBlUmVwbGFjZU5vRW5jb2RlIiwidW5lc2NhcGUiLCJjbGVhblVybCIsInByb3QiLCJkZWNvZGVVUklDb21wb25lbnQiLCJvcmlnaW5JbmRlcGVuZGVudFVybCIsImJhc2VVcmxzIiwicmVzb2x2ZVVybCIsImVuY29kZVVSSSIsIl9lc2NhcGVzIiwiX3NjaGVtZSIsIl9lbWFpbCIsIl9hdHRyaWJ1dGUiLCJfaHJlZiIsIl9leHRlbmRlZF9lbWFpbCIsIl9iYWNrcGVkYWwiLCJwcmV2Q2FwWmVybyIsIm1hbmdsZSIsImluTGluayIsImluUmF3QmxvY2siLCJ0cmltIiwib3V0cHV0TGluayIsImVzY2FwZXMiLCJjb2Rlc3BhbiIsInJhbmRvbSIsImxhbmdQcmVmaXgiLCJyYXciLCJoZWFkZXJJZHMiLCJoZWFkZXJQcmVmaXgiLCJ4aHRtbCIsImxpc3RpdGVtIiwiY2hlY2tib3giLCJ0YWJsZXJvdyIsInRhYmxlY2VsbCIsImZsYWdzIiwiaW5saW5lVGV4dCIsInBhcnNlVGV4dCIsInJvdyIsImNlbGwiLCJ0YWJsZVJvdyIsImN1cnIiLCJzdWZmTGVuIiwiY3VyckNoYXIiLCJjYWxsYmFjayIsInBlbmRpbmciLCJtZXNzYWdlIiwic2lsZW50IiwiZ2V0RGVmYXVsdHMiLCJsZXhlciIsImlubGluZUxleGVyIiwicmVnaXN0ZXJMYW5ndWFnZSIsImdsb2JhbE9iamVjdCIsIkFycmF5UHJvdG8iLCJvYmplY3RLZXlzIiwibGFuZ3VhZ2VzIiwiYWxpYXNlcyIsIlNBRkVfTU9ERSIsIm5vSGlnaGxpZ2h0UmUiLCJsYW5ndWFnZVByZWZpeFJlIiwiZml4TWFya3VwUmUiLCJMQU5HVUFHRV9OT1RfRk9VTkQiLCJjbGFzc1ByZWZpeCIsInRhYlJlcGxhY2UiLCJ1c2VCUiIsIkNPTU1PTl9LRVlXT1JEUyIsImlzTm90SGlnaGxpZ2h0ZWQiLCJpbmhlcml0Iiwib2JqZWN0cyIsIm5vZGVTdHJlYW0iLCJfbm9kZVN0cmVhbSIsImV4cGFuZF9vcl9jbG9uZV9tb2RlIiwidmFyaWFudHMiLCJjYWNoZWRfdmFyaWFudHMiLCJ2YXJpYW50IiwiZGVwZW5kZW5jeU9uUGFyZW50IiwiZW5kc1dpdGhQYXJlbnQiLCJzdGFydHMiLCJpc0Zyb3plbiIsInNjb3JlRm9yS2V5d29yZCIsImtleXdvcmQiLCJwcm92aWRlZFNjb3JlIiwiY29tcGlsZUxhbmd1YWdlIiwicmVTdHIiLCJyZSIsImxhbmdSZSIsImNhc2VfaW5zZW5zaXRpdmUiLCJidWlsZE1vZGVSZWdleCIsIm1hdGNoZXJSZSIsInRlcm0iLCJtYXRjaEluZGV4ZXMiLCJyZWdleGVzIiwibWF0Y2hlciIsIm1hdGNoQXQiLCJhZGRSdWxlIiwicnVsZSIsInJlQ291bnRNYXRjaEdyb3VwcyIsImJlZ2luS2V5d29yZHMiLCJ0ZXJtaW5hdG9yX2VuZCIsImlsbGVnYWwiLCJ0ZXJtaW5hdG9ycyIsInJlZ2V4cHMiLCJzZXBhcmF0b3IiLCJiYWNrcmVmZXJlbmNlUmUiLCJudW1DYXB0dXJlcyIsImpvaW5SZSIsImV4dHJhIiwiY29tcGlsZU1vZGUiLCJjb21waWxlZCIsInJhd0tleXdvcmRzIiwiY29tcGlsZWRfa2V5d29yZHMiLCJzcGxpdEFuZENvbXBpbGUiLCJwYWlyIiwiY29tcGlsZUtleXdvcmRzIiwibGV4ZW1lc1JlIiwibGV4ZW1lcyIsImJlZ2luUmUiLCJlbmRTYW1lQXNCZWdpbiIsImVuZFJlIiwiaWxsZWdhbFJlIiwicmVsZXZhbmNlIiwibGFuZ3VhZ2VOYW1lIiwiaWdub3JlX2lsbGVnYWxzIiwiY29udGludWF0aW9uIiwiY29kZVRvSGlnaGxpZ2h0Iiwia2V5d29yZE1hdGNoIiwibWF0Y2hfc3RyIiwiYnVpbGRTcGFuIiwiaW5zaWRlU3BhbiIsImxlYXZlT3BlbiIsIm5vUHJlZml4Iiwib3BlblNwYW4iLCJwcm9jZXNzQnVmZmVyIiwic3ViTGFuZ3VhZ2UiLCJleHBsaWNpdCIsIm1vZGVfYnVmZmVyIiwiY29udGludWF0aW9ucyIsInByb2Nlc3NTdWJMYW5ndWFnZSIsImtleXdvcmRfbWF0Y2giLCJsYXN0X2luZGV4IiwicHJvY2Vzc0tleXdvcmRzIiwic3RhcnROZXdNb2RlIiwiZG9CZWdpbk1hdGNoIiwibGV4ZW1lIiwibmV3X21vZGUiLCJleGNsdWRlQmVnaW4iLCJyZXR1cm5CZWdpbiIsImRvRW5kTWF0Y2giLCJtYXRjaFBsdXNSZW1haW5kZXIiLCJlbmRfbW9kZSIsImVuZE9mTW9kZSIsInRlc3RSZSIsImVuZHNQYXJlbnQiLCJyZXR1cm5FbmQiLCJleGNsdWRlRW5kIiwibGFzdE1hdGNoIiwicHJvY2Vzc0xleGVtZSIsInRleHRfYmVmb3JlX21hdGNoIiwicHJvY2Vzc2VkIiwiZ2V0TGFuZ3VhZ2UiLCJlcnJvclJhaXNlZCIsImxhbmd1YWdlU3Vic2V0Iiwic2Vjb25kX2Jlc3QiLCJhdXRvRGV0ZWN0aW9uIiwiZml4TWFya3VwIiwicDEiLCJoaWdobGlnaHRCbG9jayIsIm9yaWdpbmFsU3RyZWFtIiwicmVzdWx0Tm9kZSIsIl9jbGFzcyIsIndhcm4iLCJibG9ja0xhbmd1YWdlIiwib3JpZ2luYWwiLCJub2RlU3RhY2siLCJzZWxlY3RTdHJlYW0iLCJtZXJnZVN0cmVhbXMiLCJwcmV2Q2xhc3NOYW1lIiwiY3VycmVudExhbmciLCJyZXN1bHRMYW5nIiwiYnVpbGRDbGFzc05hbWUiLCJpbml0SGlnaGxpZ2h0aW5nIiwiY2FsbGVkIiwiYmxvY2tzIiwicXVlcnlTZWxlY3RvckFsbCIsIlBMQUlOVEVYVF9MQU5HVUFHRSIsImRpc2FibGVBdXRvZGV0ZWN0IiwiY29uZmlndXJlIiwidXNlcl9vcHRpb25zIiwiaW5pdEhpZ2hsaWdodGluZ09uTG9hZCIsInJhd0RlZmluaXRpb24iLCJsaXN0TGFuZ3VhZ2VzIiwicmVxdWlyZUxhbmd1YWdlIiwiZGVidWdNb2RlIiwiSURFTlRfUkUiLCJVTkRFUlNDT1JFX0lERU5UX1JFIiwiTlVNQkVSX1JFIiwiQ19OVU1CRVJfUkUiLCJCSU5BUllfTlVNQkVSX1JFIiwiUkVfU1RBUlRFUlNfUkUiLCJCQUNLU0xBU0hfRVNDQVBFIiwiQVBPU19TVFJJTkdfTU9ERSIsIlFVT1RFX1NUUklOR19NT0RFIiwiUEhSQVNBTF9XT1JEU19NT0RFIiwiQ09NTUVOVCIsImluaGVyaXRzIiwiQ19MSU5FX0NPTU1FTlRfTU9ERSIsIkNfQkxPQ0tfQ09NTUVOVF9NT0RFIiwiSEFTSF9DT01NRU5UX01PREUiLCJOVU1CRVJfTU9ERSIsIkNfTlVNQkVSX01PREUiLCJCSU5BUllfTlVNQkVSX01PREUiLCJDU1NfTlVNQkVSX01PREUiLCJSRUdFWFBfTU9ERSIsIlRJVExFX01PREUiLCJVTkRFUlNDT1JFX1RJVExFX01PREUiLCJNRVRIT0RfR1VBUkQiLCJkZWVwRnJlZXplIiwiZnJlZXplIiwib2JqSXNGdW5jdGlvbiIsIktFWVdPUkQiLCJ2N19rZXl3b3JkcyIsIkxJVEVSQUwiLCJOVU1CRVJTIiwiU1RSSU5HUyIsIkRBVEUiLCJDT01NRU5UUyIsImJ1aWx0X2luIiwidjdfc3lzdGVtX2NvbnN0YW50cyIsImNsYXNzIiwidjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzIiwidjhfc2hhcmVkX29iamVjdCIsImxpdGVyYWwiLCJ2N19tZXRhX2tleXdvcmRzIiwiY29tbWVudE1vZGUiLCJydWxlRGVjbGFyYXRpb25Nb2RlIiwiSFRUUF9WRVJCUyIsIkFTM19SRVNUX0FSR19NT0RFIiwiSURfUkVHRVgiLCJWQVJfREVDTFMiLCJidWlsdEluVHlwZU1vZGUiLCJvYmplY3RIYW5kbGVNb2RlIiwiZ2VuZXJpY01vZGUiLCJOVU1CRVIiLCJub21hcmt1cCIsIlNUUklORyIsIlBBUkFNUyIsIkNPTU1FTlRfTU9ERV8xIiwiS0VZV09SRFMiLCJTVUJTVCIsIlRFTVBMQVRFX1NUUklORyIsIlBBUkFNU19DT05UQUlOUyIsIm9wdGlvbmFsIiwiRlVOQ1RJT05fVFlQRV9SRSIsIkNQUF9QUklNSVRJVkVfVFlQRVMiLCJQUkVQUk9DRVNTT1IiLCJGVU5DVElPTl9USVRMRSIsIkNQUF9LRVlXT1JEUyIsIkVYUFJFU1NJT05fQ09OVEFJTlMiLCJFWFBSRVNTSU9OX0NPTlRFWFQiLCJGVU5DVElPTl9ERUNMQVJBVElPTiIsInByZXByb2Nlc3NvciIsInN0cmluZ3MiLCJBUkRVSU5PX0tXIiwiQVJEVUlOTyIsImt3cyIsIm1ldGEiLCJYTUxfRU5USVRJRVMiLCJYTUxfTUVUQV9LRVlXT1JEUyIsIlhNTF9NRVRBX1BBUl9LRVlXT1JEUyIsIkFQT1NfTUVUQV9TVFJJTkdfTU9ERSIsIlFVT1RFX01FVEFfU1RSSU5HX01PREUiLCJUQUdfSU5URVJOQUxTIiwiQkFDS1RJQ0tfRVNDQVBFIiwiVkFSSUFCTEUiLCJWQVIiLCJRVU9URV9TVFJJTkciLCJDT01NRU5UX01PREVTIiwiQ0hBUl9TVFJJTkciLCJQUk9DRURVUkUiLCJPQkpFQ1QiLCJFWFBSRVNTSU9OUyIsIlNZTUJPTF9SRSIsIlNZTUJPTCIsIkNPTExFQ1RJT04iLCJISU5UIiwiSElOVF9DT0wiLCJLRVkiLCJMSVNUIiwiQk9EWSIsIk5BTUUiLCJERUZBVUxUX0NPTlRBSU5TIiwiSlNfSURFTlRfUkUiLCJUSVRMRSIsIkNPTU1BTkRTIiwiSU5UX1NVRkZJWCIsIkNSWVNUQUxfTUVUSE9EX1JFIiwiQ1JZU1RBTF9LRVlXT1JEUyIsIkVYUEFOU0lPTiIsInJlY3Vyc2l2ZVBhcmVuIiwiUV9TVFJJTkciLCJSRUdFWFAiLCJDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlMiLCJWRVJCQVRJTV9TVFJJTkciLCJWRVJCQVRJTV9TVFJJTkdfTk9fTEYiLCJTVUJTVF9OT19MRiIsIklOVEVSUE9MQVRFRF9TVFJJTkciLCJJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HIiwiSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiIsIlRZUEVfSURFTlRfUkUiLCJSVUxFIiwiaW50ZWdlcl9yZSIsImVzY2FwZV9zZXF1ZW5jZV9yZSIsIkRfSU5URUdFUl9NT0RFIiwiRF9GTE9BVF9NT0RFIiwiRF9DSEFSQUNURVJfTU9ERSIsIkRfU1RSSU5HX01PREUiLCJEX05FU1RJTkdfQ09NTUVOVF9NT0RFIiwiQlJBQ0VEX1NVQlNUIiwiRElSRUNUSVZFIiwiQ0xBU1MiLCJGVU5DVElPTiIsIkZJTFRFUiIsIkRUU19SRUZFUkVOQ0UiLCJEVFNfS0VZV09SRCIsIkRUU19MQUJFTCIsIkRUU19DRUxMX1BST1BFUlRZIiwiRFRTX05PREUiLCJFTElYSVJfSURFTlRfUkUiLCJFTElYSVJfS0VZV09SRFMiLCJMT1dFUkNBU0VfU0lHSUwiLCJVUENBU0VfU0lHSUwiLCJFTElYSVJfREVGQVVMVF9DT05UQUlOUyIsIkNPTlNUUlVDVE9SIiwiUlVCWV9NRVRIT0RfUkUiLCJSVUJZX0tFWVdPUkRTIiwiWUFSRE9DVEFHIiwiSVJCX09CSkVDVCIsIlJVQllfREVGQVVMVF9DT05UQUlOUyIsIklSQl9ERUZBVUxUIiwiQkFTSUNfQVRPTV9SRSIsIkZVTkNUSU9OX05BTUVfUkUiLCJFUkxBTkdfUkVTRVJWRUQiLCJOQU1FRF9GVU4iLCJGVU5DVElPTl9DQUxMIiwiVFVQTEUiLCJWQVIxIiwiVkFSMiIsIlJFQ09SRF9BQ0NFU1MiLCJCTE9DS19TVEFURU1FTlRTIiwiQkFTSUNfTU9ERVMiLCJNRVRIT0QiLCJUWVBFUEFSQU0iLCJTWU1CT0xTIiwiUVNUUiIsIkFTU0lHTk1FTlQiLCJERVNDVEVYVCIsIkFUX0NPTU1FTlRfTU9ERSIsIlNUUlVDVF9UWVBFIiwiUEFSU0VfUEFSQU1TIiwiRlVOQ1RJT05fREVGIiwiREVGSU5JVElPTiIsIkJVSUxUX0lOX1JFRiIsIlNUUklOR19SRUYiLCJGVU5DVElPTl9SRUYiLCJGVU5DVElPTl9SRUZfUEFSQU1TIiwiR0NPREVfQ09ERSIsInN5bWJvbCIsIkdPX0tFWVdPUkRTIiwiQlVJTFRfSU5TIiwiSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQiLCJFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMIiwiQkxPQ0tfTVVTVEFDSEVfQ09OVEVOVFMiLCJCQVNJQ19NVVNUQUNIRV9DT05URU5UUyIsIlBSQUdNQSIsIlRBR19JTk5BUkRTIiwiVkFSSUFCTEVTIiwiTElURVJBTFMiLCJET0NUQUdTIiwiQ09OU1RBTlRTIiwiTUVUSE9EUyIsIlRZUEVTIiwiRlVOQ1RJT05fTkFNRV9JREVOVF9SRSIsIkpBVkFfTlVNQkVSX01PREUiLCJGUkFHTUVOVCIsIlhNTF9UQUciLCJIVE1MX1RFTVBMQVRFIiwiQ1NTX1RFTVBMQVRFIiwiUEFSQU1TQkxPQ0siLCJBTExPV0VEX0NPTU1FTlRTIiwiVkFMVUVfQ09OVEFJTkVSIiwiQVJSQVkiLCJWQVJJQUJMRV9OQU1FX1JFIiwiREVGQVVMVCIsIklOVEVSUE9MQVRJT04iLCJJTlRFUlBPTEFURURfVkFSSUFCTEUiLCJDT01NQU5EIiwiTUFDUk9DQUxMIiwiTEFCRUwiLCJBTk5PVEFUSU9OX1VTRV9TSVRFIiwiQU5OT1RBVElPTiIsIktPVExJTl9OVU1CRVJfTU9ERSIsIktPVExJTl9ORVNURURfQ09NTUVOVCIsIktPVExJTl9QQVJFTl9UWVBFIiwiS09UTElOX1BBUkVOX1RZUEUyIiwiTEFTU09fQ0xPU0VfUkUiLCJMQVNTT19LRVlXT1JEUyIsIkhUTUxfQ09NTUVOVCIsIkxBU1NPX05PUFJPQ0VTUyIsIkxBU1NPX1NUQVJUIiwiTEFTU09fREFUQU1FTUJFUiIsIkxBU1NPX0NPREUiLCJMQVNTT19JREVOVF9SRSIsIlJVTEVTIiwiVkFMVUUiLCJTVFJJTkdfTU9ERSIsIklERU5UX01PREUiLCJQQVJFTlNfTU9ERSIsIlZBTFVFX1dJVEhfUlVMRVNFVFMiLCJNSVhJTl9HVUFSRF9NT0RFIiwiUlVMRV9NT0RFIiwiSU5URVJQX0lERU5UX1JFIiwiQVRfUlVMRV9NT0RFIiwiVkFSX1JVTEVfTU9ERSIsIlNFTEVDVE9SX01PREUiLCJMSVNQX0lERU5UX1JFIiwiTElTUF9TSU1QTEVfTlVNQkVSX1JFIiwiSURFTlQiLCJNRUMiLCJRVU9URUQiLCJRVU9URURfQVRPTSIsIlRJVExFMSIsIlRJVExFMiIsIlNVQlNUX1NJTVBMRSIsImlkZW50aWZpZXIiLCJMU0xfU1RSSU5HUyIsIkxTTF9OVU1CRVJTIiwiTE9OR19CUkFDS0VUUyIsIkZVTkMiLCJUQVJHRVQiLCJUUkFOU1BPU0UiLCJBVE9NIiwiUEVSTF9LRVlXT1JEUyIsIlNUUklOR19DT05UQUlOUyIsIlBFUkxfREVGQVVMVF9DT05UQUlOUyIsIk5JWF9LRVlXT1JEUyIsIkFOVElRVU9URSIsIkRFRklORVMiLCJMQU5HVUFHRVMiLCJMRVhFTUVTIiwiQ0xBU1NfS0VZV09SRFMiLCJTUEVDSUFMX1ZBUlMiLCJGVU5DVElPTlMiLCJPWFlHRU5FX0tFWVdPUkRTIiwiQ1VSTFlfQ09NTUVOVCIsIlBBUkVOX0NPTU1FTlQiLCJDVVJMWV9TVUJDT01NRU5UIiwiQ09NTUVOVF9NT0RFIiwiVFlQRVNfUkUiLCJGVU5DVElPTlNfUkUiLCJTUUxfS1ciLCJTUUxfQkkiLCJBUE9TX1NUUklORyIsIlBTX0NPTU1FTlQiLCJDTURMRVRTIiwiUFNfQ0xBU1MiLCJQU19GVU5DVElPTiIsIlBTX1VTSU5HIiwiUFNfQVJHVU1FTlRTIiwiUFNfTUVUSE9EUyIsIkdFTlRMRU1BTlNfU0VUIiwiUFNfVFlQRSIsIlBBUkVOVEVEIiwiTElORV9DT01NRU5UIiwiQkFDS1RJQ0tfU1RSSU5HIiwiV1MwIiwiREVMSU0iLCJLRVlfT1RIRVIiLCJERUxJTV9BTkRfVkFMVUUiLCJQUk9NUFQiLCJMSVRFUkFMX0JSQUNLRVQiLCJRTUxfSURFTlRfUkUiLCJJRF9JRCIsIlFNTF9BVFRSSUJVVEUiLCJRTUxfT0JKRUNUIiwiUkVfSURFTlQiLCJSRV9NT0RVTEVfSURFTlQiLCJSRV9PUEVSQVRPUiIsImNoYXIiLCJSRV9PUEVSQVRPUl9TUEFDRUQiLCJSRV9OVU1CRVIiLCJPUEVSQVRPUl9NT0RFIiwiTElTVF9DT05URU5UU19NT0RFUyIsIk1PRFVMRV9BQ0NFU1NfQ09OVEVOVFMiLCJQQVJBTVNfQ09OVEVOVFMiLCJGVU5DVElPTl9CTE9DS19NT0RFIiwiQ09OU1RSVUNUT1JfTU9ERSIsIlBBVFRFUk5fTUFUQ0hfQkxPQ0tfTU9ERSIsIk1PRFVMRV9BQ0NFU1NfTU9ERSIsIlBST1BFUlRZIiwiU1RBVEVNRU5UUyIsIk5VTV9TVUZGSVgiLCJCVUlMVElOUyIsIlRZUEUiLCJTQ0hFTUVfSURFTlRfUkUiLCJTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSIsIlFVT1RFRF9JREVOVCIsIlFVT1RFRF9MSVNUIiwiQ09NTU9OX0NPTlRBSU5TIiwiSEVYQ09MT1IiLCJzbWFsaV9pbnN0cl9sb3dfcHJpbyIsIkNIQVIiLCJWQVJfSURFTlRfUkUiLCJIRVhfQ09MT1IiLCJTV0lGVF9LRVlXT1JEUyIsIkJMT0NLX0NPTU1FTlQiLCJUUElEIiwiVFBMQUJFTCIsIkZVTkNUSU9OX05BTUVTIiwiVEFHUyIsIkRFQ09SQVRPUiIsIkFSR1MiLCJYTF9LRVlXT1JEUyIsIkRPVUJMRV9RVU9URV9URVhUIiwiSU1QT1JUIiwiRlVOQ1RJT05fREVGSU5JVElPTiIsIkNPTlRBSU5TIiwiYXBpVXJsIiwiZ2V0VG9rZW4iLCJCQVNFX0FQSV9VUkwiLCJxaW5pdU9wdGlvbnMiLCJ1c2VDZG5Eb21haW4iLCJkaXNhYmxlU3RhdGlzdGljc1JlcG9ydCIsInJldHJ5Q291bnQiLCJ6MSIsImZuYW1lIiwicGFyYW1zIiwibWltZVR5cGUiLCJmZXRjaEdldFRva2VuIiwicmVzRGF0YSIsInN0YXR1cyIsInJlcXVlc3QiLCJhamF4Iiwic3VjY2VzcyIsInN1Yk9iamVjdCIsInJlc3BvbnNlIiwiY29tcGxldGUiLCJjb25zb2VsIiwidXBsb2FkIiwic3Vic2NyaWJlIiwiYmFzZTY0IiwicGljIiwiYmFzZTY0ZW5jb2RlIiwiZmlsZVNpemUiLCJnZXRCYXNlNjRTaXplIiwiZ2V0UmVnaW9uVXJsIiwiaGVhZGVycyIsImJhc2U2NHVybCIsImVxdWFsSW5kZXgiLCJzdHJMZW5ndGgiLCJodHRwIiwic2V0dGluZ3MiLCJfcyIsImRhdGFUeXBlIiwiYXN5bmMiLCJ0aW1lb3V0IiwiYmVmb3JlU2VuZCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwicmVzcG9uc2VYTUwiLCJ1c2VVcmxQYXJhbSIsInNUeXBlIiwiZ2V0VXJsUGFyYW0iLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImdldFF1ZXJ5RGF0YSIsImFsZXJ0IiwicGFyYW1zU3RyIiwiZ2V0UXVlcnlTdHJpbmciLCJGb3JtRGF0YSIsInBhcmFtc0FyciIsImVuY29kZVVSSUNvbXBvbmVudCIsIm9iamVjdFByb3RvIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImlzT3duIiwidW5tYXNrZWQiLCJpdGVyYXRlZSIsInN5bWJvbFByb3RvIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlVG9TdHJpbmciLCJkZWZhdWx0VmFsdWUiLCJhdWdlbmQiLCJhZGRlbmQiLCJyZVRyaW0iLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsInZhbHVlT2YiLCJpc0JpbmFyeSIsInJlbWFpbmRlciIsIlR5cGVFcnJvciIsInVpZCIsIm1hc2tTcmNLZXkiLCJJRV9QUk9UTyIsImZ1bmNUb1N0cmluZyIsInJlSXNIb3N0Q3RvciIsInJlSXNOYXRpdmUiLCJvYmplY3RDcmVhdGUiLCJwcm90byIsIkN0b3IiLCJ0aGlzQmluZGluZyIsImJpdG1hc2siLCJ0aGlzQXJnIiwiaXNCaW5kIiwibmF0aXZlTWF4IiwicGFydGlhbHMiLCJob2xkZXJzIiwiaXNDdXJyaWVkIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIkxhenlXcmFwcGVyIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fZGlyX18iLCJfX2ZpbHRlcmVkX18iLCJfX2l0ZXJhdGVlc19fIiwiX190YWtlQ291bnRfXyIsIl9fdmlld3NfXyIsIm90aGVyRnVuYyIsIkxvZGFzaFdyYXBwZXIiLCJjaGFpbkFsbCIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJjbG9uZSIsImxvZGFzaCIsImZ1bmNOYW1lIiwibmF0aXZlTm93IiwibGFzdENhbGxlZCIsInN0YW1wIiwicmVXcmFwRGV0YWlscyIsInJlU3BsaXREZXRhaWxzIiwicmVXcmFwQ29tbWVudCIsImRldGFpbHMiLCJmcm9tUmlnaHQiLCJ3cmFwRmxhZ3MiLCJyZWZlcmVuY2UiLCJ3cmFwRnVuYyIsImFyZ1BvcyIsImFyeSIsImFyaXR5IiwiaXNDdXJyeSIsIm5ld0RhdGEiLCJyZUlzVWludCIsIm5hdGl2ZU1pbiIsImluZGV4ZXMiLCJhcnJMZW5ndGgiLCJvbGRBcnJheSIsInJlc0luZGV4IiwiY3JlYXRlSHlicmlkIiwicGFydGlhbHNSaWdodCIsImhvbGRlcnNSaWdodCIsImlzQXJ5IiwiaXNCaW5kS2V5IiwiaXNGbGlwIiwiaG9sZGVyc0NvdW50IiwibmV3SG9sZGVycyIsInNyY0JpdG1hc2siLCJuZXdCaXRtYXNrIiwiaXNDb21tb24iLCJpc0NvbWJvIiwiZ3VhcmQiLCJvYmpWYWx1ZSIsImN1c3RvbWl6ZXIiLCJpc05ldyIsIm5ld1ZhbHVlIiwidHJhbnNmb3JtIiwib3RoZXJBcmdzIiwiYXNzaWduZXIiLCJzb3VyY2VzIiwidHlwZWRBcnJheVRhZ3MiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiYXJnIiwiaXNQcm90byIsInNyY0luZGV4IiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIl9fZGF0YV9fIiwiSGFzaCIsImVudHJpZXMiLCJlbnRyeSIsIkxpc3RDYWNoZSIsIk1hcENhY2hlIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJudW1iZXIiLCJzdWJTdHJpbmciLCJwYXRoIiwicGF0aHMiLCJ2YWx1ZXMiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiYmFzZUZsYXR0ZW4iLCJpc1N0cmljdCIsImdldFByb3RvdHlwZU9mIiwib2JqZWN0Q3RvclN0cmluZyIsIm1ldGhvZE5hbWVzIiwiYmluZEtleSIsInJlSGFzVW5pY29kZSIsInJzQXN0cmFsIiwicnNDb21ibyIsInJzRml0eiIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyZU9wdE1vZCIsInJzU2VxIiwicnNTeW1ib2wiLCJyZVVuaWNvZGUiLCJtZXRob2ROYW1lIiwic3RyU3ltYm9scyIsImNociIsInRyYWlsaW5nIiwiYWNjdW11bGF0b3IiLCJpbml0QWNjdW0iLCJyZUxhdGluIiwicmVDb21ib01hcmsiLCJyZUFzY2lpV29yZCIsInJlSGFzVW5pY29kZVdvcmQiLCJyc0JyZWFrUmFuZ2UiLCJyc01hdGhPcFJhbmdlIiwicnNCcmVhayIsInJzRGlnaXRzIiwicnNEaW5nYmF0IiwicnNMb3dlciIsInJzTWlzYyIsInJzVXBwZXIiLCJyc01pc2NMb3dlciIsInJzTWlzY1VwcGVyIiwicnNFbW9qaSIsInJlVW5pY29kZVdvcmQiLCJyZUFwb3MiLCJuYXRpdmVJc0Zpbml0ZSIsImlzRmluaXRlIiwicHJlY2lzaW9uIiwibmF0aXZlQ2VpbCIsImxvd2VyIiwidXBwZXIiLCJMQVJHRV9BUlJBWV9TSVpFIiwiU3RhY2siLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsImRhdGFWaWV3Q3RvclN0cmluZyIsIm1hcEN0b3JTdHJpbmciLCJwcm9taXNlQ3RvclN0cmluZyIsInNldEN0b3JTdHJpbmciLCJ3ZWFrTWFwQ3RvclN0cmluZyIsImdldFRhZyIsIkFycmF5QnVmZmVyIiwiY3RvclN0cmluZyIsIlVpbnQ4QXJyYXkiLCJhcnJheUJ1ZmZlciIsImJ5dGVMZW5ndGgiLCJkYXRhVmlldyIsImJ5dGVPZmZzZXQiLCJyZUZsYWdzIiwicmVnZXhwIiwic3ltYm9sVmFsdWVPZiIsInR5cGVkQXJyYXkiLCJub2RlSXNNYXAiLCJpc01hcCIsIm5vZGVJc1NldCIsImlzU2V0IiwiY2xvbmVhYmxlVGFncyIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImlzRnVuYyIsInN0YWNrZWQiLCJzdWJWYWx1ZSIsImtleXNJbiIsIlNldENhY2hlIiwiZXF1YWxGdW5jIiwiaXNQYXJ0aWFsIiwib3RoTGVuZ3RoIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwiY29udmVydCIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwic2tpcEN0b3IiLCJvYmpDdG9yIiwib3RoQ3RvciIsIm9iaklzQXJyIiwib3RoSXNBcnIiLCJvYmpUYWciLCJvdGhUYWciLCJvYmpJc09iaiIsIm90aElzT2JqIiwiaXNTYW1lVGFnIiwib2JqSXNXcmFwcGVkIiwib3RoSXNXcmFwcGVkIiwib2JqVW53cmFwcGVkIiwib3RoVW53cmFwcGVkIiwiYmFzZUlzRXF1YWwiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJzcmNWYWx1ZSIsImhhc0Z1bmMiLCJ0b0l0ZXJhdGVlIiwic2V0dGVyIiwiaXRlcmFibGUiLCJlYWNoRnVuYyIsImluaXRpYWxpemVyIiwiY3VycnkiLCJjdXJyeVJpZ2h0Iiwid2FpdCIsImxhc3RBcmdzIiwibGFzdFRoaXMiLCJtYXhXYWl0IiwidGltZXJJZCIsImxhc3RDYWxsVGltZSIsImxhc3RJbnZva2VUaW1lIiwibGVhZGluZyIsIm1heGluZyIsImludm9rZUZ1bmMiLCJsZWFkaW5nRWRnZSIsInRpbWVyRXhwaXJlZCIsInNob3VsZEludm9rZSIsInRpbWVTaW5jZUxhc3RDYWxsIiwidHJhaWxpbmdFZGdlIiwidGltZVdhaXRpbmciLCJyZW1haW5pbmdXYWl0IiwiZGVib3VuY2VkIiwiaXNJbnZva2luZyIsImZsdXNoIiwicHJvcHNJbmRleCIsInByb3BzTGVuZ3RoIiwibWVyZ2VGdW5jIiwiaXNUeXBlZCIsImJhc2VNZXJnZSIsImN1c3RvbURlZmF1bHRzTWVyZ2UiLCJjb21wYXJhdG9yIiwiaW5jbHVkZXMiLCJ2YWx1ZXNMZW5ndGgiLCJjb21wdXRlZCIsInZhbHVlc0luZGV4IiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiaXNEcm9wIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2FwZWRIdG1sIiwicmVIYXNSZWdFeHBDaGFyIiwiZmluZEluZGV4RnVuYyIsInByZXJlcSIsInRocnUiLCJwbGFudCIsImFycmF5cyIsIm1heExlbmd0aCIsIm1hcHBlZCIsIm5vZGVJc0FycmF5QnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsIm5vZGVJc0RhdGUiLCJpc0RhdGUiLCJzdHViRmFsc2UiLCJub2RlSXNSZWdFeHAiLCJpc1JlZ0V4cCIsIm5hdGl2ZUpvaW4iLCJhY3Rpb25zIiwibXVsdGlwbGllciIsIm11bHRpcGxpY2FuZCIsIml0ZXJhdG9yIiwic3ltSXRlcmF0b3IiLCJuZXN0ZWQiLCJjb21wYXJlciIsInZhbElzRGVmaW5lZCIsInZhbElzTnVsbCIsInZhbElzUmVmbGV4aXZlIiwidmFsSXNTeW1ib2wiLCJvdGhJc0RlZmluZWQiLCJvdGhJc051bGwiLCJvdGhJc1JlZmxleGl2ZSIsIm90aElzU3ltYm9sIiwib3JkZXJzIiwib2JqQ3JpdGVyaWEiLCJjcml0ZXJpYSIsIm90aENyaXRlcmlhIiwib3JkZXJzTGVuZ3RoIiwiaXRlcmF0ZWVzIiwiYXJyYXlGdW5jIiwidHJhbnNmb3JtcyIsImZ1bmNzTGVuZ3RoIiwibmF0aXZlRmxvb3IiLCJjaGFyc0xlbmd0aCIsInJlVHJpbVN0YXJ0IiwibmF0aXZlUGFyc2VJbnQiLCJyYWRpeCIsInBhcnRpYWwiLCJwYXJ0aWFsUmlnaHQiLCJwcmV2aW91cyIsIm5hdGl2ZVJhbmRvbSIsImZyZWVQYXJzZUZsb2F0IiwiZmxvYXRpbmciLCJ0ZW1wIiwicmFuZCIsInN0ZXAiLCJuYXRpdmVSZXZlcnNlIiwicmV0SGlnaGVzdCIsImxvdyIsImhpZ2giLCJ2YWxJc05hTiIsInZhbElzVW5kZWZpbmVkIiwic2V0TG93IiwibWludWVuZCIsInN1YnRyYWhlbmQiLCJpbnRlcmNlcHRvciIsInN0cmluZ0VzY2FwZXMiLCJyZUVtcHR5U3RyaW5nTGVhZGluZyIsInJlRW1wdHlTdHJpbmdNaWRkbGUiLCJyZUVtcHR5U3RyaW5nVHJhaWxpbmciLCJyZUVzVGVtcGxhdGUiLCJyZU5vTWF0Y2giLCJyZVVuZXNjYXBlZFN0cmluZyIsImltcG9ydHMiLCJ0ZW1wbGF0ZVNldHRpbmdzIiwiaXNFc2NhcGluZyIsImlzRXZhbHVhdGluZyIsImltcG9ydHNLZXlzIiwiaW1wb3J0c1ZhbHVlcyIsImludGVycG9sYXRlIiwicmVEZWxpbWl0ZXJzIiwiZXZhbHVhdGUiLCJzb3VyY2VVUkwiLCJlc2NhcGVWYWx1ZSIsImludGVycG9sYXRlVmFsdWUiLCJlc1RlbXBsYXRlVmFsdWUiLCJldmFsdWF0ZVZhbHVlIiwidmFyaWFibGUiLCJpc0Fyckxpa2UiLCJjaHJTeW1ib2xzIiwicmVUcmltRW5kIiwib21pc3Npb24iLCJuZXdFbmQiLCJyZUVzY2FwZWRIdG1sIiwicmVIYXNFc2NhcGVkSHRtbCIsInNlZW5JbmRleCIsImlkQ291bnRlciIsInByZWZpeCIsInVwZGF0ZXIiLCJ3cmFwcGVkIiwiYXNzaWduRnVuYyIsInZhbHNMZW5ndGgiLCJjb21wYWN0IiwiZGlmZmVyZW5jZUJ5IiwiZGlmZmVyZW5jZVdpdGgiLCJkcm9wUmlnaHQiLCJkcm9wUmlnaHRXaGlsZSIsImRyb3BXaGlsZSIsImZpbGwiLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4IiwiZmxhdHRlbiIsImZsYXR0ZW5EZWVwIiwiZmxhdHRlbkRlcHRoIiwiZnJvbVBhaXJzIiwiaW5pdGlhbCIsImludGVyc2VjdGlvbiIsImludGVyc2VjdGlvbkJ5IiwiaW50ZXJzZWN0aW9uV2l0aCIsIm50aCIsInB1bGwiLCJwdWxsQWxsIiwicHVsbEFsbEJ5IiwicHVsbEFsbFdpdGgiLCJwdWxsQXQiLCJzb3J0ZWRJbmRleCIsInNvcnRlZEluZGV4QnkiLCJzb3J0ZWRJbmRleE9mIiwic29ydGVkTGFzdEluZGV4Iiwic29ydGVkTGFzdEluZGV4QnkiLCJzb3J0ZWRMYXN0SW5kZXhPZiIsInNvcnRlZFVuaXEiLCJzb3J0ZWRVbmlxQnkiLCJ0YWlsIiwidGFrZSIsInRha2VSaWdodCIsInRha2VSaWdodFdoaWxlIiwidGFrZVdoaWxlIiwidW5pb24iLCJ1bmlvbkJ5IiwidW5pb25XaXRoIiwidW5pcSIsInVuaXFCeSIsInVuaXFXaXRoIiwidW56aXAiLCJ1bnppcFdpdGgiLCJ3aXRob3V0IiwieG9yIiwieG9yQnkiLCJ4b3JXaXRoIiwiemlwIiwiemlwT2JqZWN0IiwiemlwT2JqZWN0RGVlcCIsInppcFdpdGgiLCJjb3VudEJ5IiwiZWFjaCIsImVhY2hSaWdodCIsImV2ZXJ5IiwiZmluZExhc3QiLCJmbGF0TWFwIiwiZmxhdE1hcERlZXAiLCJmbGF0TWFwRGVwdGgiLCJmb3JFYWNoUmlnaHQiLCJncm91cEJ5IiwiaW52b2tlTWFwIiwia2V5QnkiLCJvcmRlckJ5IiwicGFydGl0aW9uIiwicmVkdWNlIiwicmVkdWNlUmlnaHQiLCJzYW1wbGVTaXplIiwic2h1ZmZsZSIsInNvbWUiLCJzb3J0QnkiLCJkZWZlciIsImZsaXAiLCJuZWdhdGUiLCJvbmNlIiwib3ZlckFyZ3MiLCJyZWFyZyIsInNwcmVhZCIsInRocm90dGxlIiwidW5hcnkiLCJjYXN0QXJyYXkiLCJjbG9uZURlZXAiLCJjbG9uZURlZXBXaXRoIiwiY2xvbmVXaXRoIiwiY29uZm9ybXNUbyIsImVxIiwiZ3RlIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5TGlrZSIsImlzQXJyYXlMaWtlT2JqZWN0IiwiaXNCb29sZWFuIiwiaXNFbGVtZW50IiwiaXNFcXVhbCIsImlzRXF1YWxXaXRoIiwiaXNFcnJvciIsImlzSW50ZWdlciIsImlzTGVuZ3RoIiwiaXNNYXRjaCIsImlzTWF0Y2hXaXRoIiwiaXNOYXRpdmUiLCJpc05pbCIsImlzTnVsbCIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc09iamVjdExpa2UiLCJpc1BsYWluT2JqZWN0IiwiaXNTYWZlSW50ZWdlciIsImlzU3RyaW5nIiwiaXNTeW1ib2wiLCJpc1VuZGVmaW5lZCIsImlzV2Vha01hcCIsImlzV2Vha1NldCIsImx0ZSIsInRvQXJyYXkiLCJ0b0Zpbml0ZSIsInRvSW50ZWdlciIsInRvTGVuZ3RoIiwidG9OdW1iZXIiLCJ0b1BsYWluT2JqZWN0IiwidG9TYWZlSW50ZWdlciIsImRpdmlkZSIsIm1heEJ5IiwibWVhbiIsIm1lYW5CeSIsIm1pbkJ5IiwibXVsdGlwbHkiLCJzdWJ0cmFjdCIsInN1bSIsInN1bUJ5IiwiY2xhbXAiLCJpblJhbmdlIiwiYXNzaWduSW4iLCJhc3NpZ25JbldpdGgiLCJhc3NpZ25XaXRoIiwiZGVmYXVsdHNEZWVwIiwiZW50cmllc0luIiwiZXh0ZW5kV2l0aCIsImZpbmRLZXkiLCJmaW5kTGFzdEtleSIsImZvckluIiwiZm9ySW5SaWdodCIsImZvck93biIsImZvck93blJpZ2h0IiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25zSW4iLCJoYXNJbiIsImludmVydEJ5IiwiaW52b2tlIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsIm1lcmdlV2l0aCIsIm9taXQiLCJvbWl0QnkiLCJwaWNrIiwicGlja0J5Iiwic2V0V2l0aCIsInRvUGFpcnMiLCJ0b1BhaXJzSW4iLCJ1bnNldCIsInVwZGF0ZVdpdGgiLCJ2YWx1ZXNJbiIsImNvbW1pdCIsInRhcCIsInRvSXRlcmF0b3IiLCJ0b0pTT04iLCJ3cmFwcGVyQ2hhaW4iLCJjYW1lbENhc2UiLCJjYXBpdGFsaXplIiwiZGVidXJyIiwiZW5kc1dpdGgiLCJlc2NhcGVSZWdFeHAiLCJrZWJhYkNhc2UiLCJsb3dlckNhc2UiLCJsb3dlckZpcnN0IiwicGFkIiwicGFkRW5kIiwicGFkU3RhcnQiLCJzbmFrZUNhc2UiLCJzdGFydENhc2UiLCJzdGFydHNXaXRoIiwidGVtcGxhdGUiLCJ0b0xvd2VyIiwidG9VcHBlciIsInRyaW1FbmQiLCJ0cmltU3RhcnQiLCJ0cnVuY2F0ZSIsInVwcGVyQ2FzZSIsInVwcGVyRmlyc3QiLCJ3b3JkcyIsImF0dGVtcHQiLCJiaW5kQWxsIiwiY29uZCIsImNvbmZvcm1zIiwiY29uc3RhbnQiLCJkZWZhdWx0VG8iLCJmbG93IiwiZmxvd1JpZ2h0IiwiaWRlbnRpdHkiLCJtYXRjaGVzIiwibWF0Y2hlc1Byb3BlcnR5IiwibWV0aG9kT2YiLCJtaXhpbiIsIm50aEFyZyIsIm92ZXJFdmVyeSIsIm92ZXJTb21lIiwicHJvcGVydHlPZiIsInJhbmdlUmlnaHQiLCJzdHViQXJyYXkiLCJzdHViT2JqZWN0Iiwic3R1YlN0cmluZyIsInN0dWJUcnVlIiwidGltZXMiLCJ0b1BhdGgiLCJ1bmlxdWVJZCIsImlzUmlnaHQiLCJpdGVyTGVuZ3RoIiwidGFrZUNvdW50IiwiaXRlckluZGV4IiwiaXNPYmoiLCJWRVJTSU9OIiwiaXNGaWx0ZXIiLCJ0YWtlTmFtZSIsImRyb3BOYW1lIiwiY2hlY2tJdGVyYXRlZSIsImlzVGFrZXIiLCJsb2Rhc2hGdW5jIiwicmV0VW53cmFwcGVkIiwiaXNMYXp5IiwidXNlTGF6eSIsImlzSHlicmlkIiwiaXNVbndyYXBwZWQiLCJvbmx5TGF6eSIsImNoYWluTmFtZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUFtQixVQUFJRCxJQUV2QkQsRUFBZ0IsVUFBSUMsSUFSdEIsQ0FTR0ssUUFBUSxXQUNYLE8sWUNURSxJQUFJQyxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIs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QUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFDaEQsSUFBUSxJQUFNLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUNoRCxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQ3RCLElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUMxRSxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUFLLElBQVEsSUFDMUUsSUFBUSxJQUFNLElBQVEsSUFBSyxJQUFRLElBQUssSUFBUSxJQUNoRCxJQUFRLElBQU0sSUFBUSxJQUFLLElBQVEsSUFBSyxJQUFRLElBQ2hELElBQVEsSUFBTSxJQUFRLElBQUssSUFBUSxJQUNuQyxJQUFRLEtBQU0sSUFBUSxLQUN0QixJQUFRLEtBQU0sSUFBUSxLQUN0QixJQUFRLEtBRVIsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQ3pDLElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUN6QyxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2RSxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQ3hELElBQVUsSUFBTSxJQUFVLElBQUssSUFBVSxJQUFLLElBQVUsSUFDeEQsSUFBVSxJQUFNLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN4RCxJQUFVLElBQU0sSUFBVSxJQUFLLElBQVUsSUFBSyxJQUFVLElBQUssSUFBVSxJQUN2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WCxVQUFVcWtILE1BQVEsR0FBSUEsTUFDN0IsR0FBT3JrSCxVQUFVa08sUUFBVSxHQUFJQSxRQUMvQixHQUFPbE8sVUFBVTAwSCxPQUFTLEdBQU8xMEgsVUFBVTB5RyxRQUFVLEdBQU8xeUcsVUFBVVgsTUFBUSxHQUFJQSxNQUdsRixHQUFPVyxVQUFVMlUsTUFBUSxHQUFPM1UsVUFBVTQwQixLQUV0QyxLQUNGLEdBQU81MEIsVUFBVSxJQUFlLEdBQUl5MEgsWUFHdkIiLCJmaWxlIjoiY01kRWRpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiQ01kRWRpdG9yXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNNZEVkaXRvclwiXSA9IGZhY3RvcnkoKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE5KTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBUaGlzIGlzIENvZGVNaXJyb3IgKGh0dHBzOi8vY29kZW1pcnJvci5uZXQpLCBhIGNvZGUgZWRpdG9yXG4vLyBpbXBsZW1lbnRlZCBpbiBKYXZhU2NyaXB0IG9uIHRvcCBvZiB0aGUgYnJvd3NlcidzIERPTS5cbi8vXG4vLyBZb3UgY2FuIGZpbmQgc29tZSB0ZWNobmljYWwgYmFja2dyb3VuZCBmb3Igc29tZSBvZiB0aGUgY29kZSBiZWxvd1xuLy8gYXQgaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nLyNjbS1pbnRlcm5hbHMgLlxuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkNvZGVNaXJyb3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgLy8gS2x1ZGdlcyBmb3IgYnVncyBhbmQgYmVoYXZpb3IgZGlmZmVyZW5jZXMgdGhhdCBjYW4ndCBiZSBmZWF0dXJlXG4gIC8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuXG4gIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgcGxhdGZvcm0gPSBuYXZpZ2F0b3IucGxhdGZvcm07XG5cbiAgdmFyIGdlY2tvID0gL2dlY2tvXFwvXFxkL2kudGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgaWVfdXB0bzEwID0gL01TSUUgXFxkLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBpZV8xMXVwID0gL1RyaWRlbnRcXC8oPzpbNy05XXxcXGR7Mix9KVxcLi4qcnY6KFxcZCspLy5leGVjKHVzZXJBZ2VudCk7XG4gIHZhciBlZGdlID0gL0VkZ2VcXC8oXFxkKykvLmV4ZWModXNlckFnZW50KTtcbiAgdmFyIGllID0gaWVfdXB0bzEwIHx8IGllXzExdXAgfHwgZWRnZTtcbiAgdmFyIGllX3ZlcnNpb24gPSBpZSAmJiAoaWVfdXB0bzEwID8gZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDYgOiArKGVkZ2UgfHwgaWVfMTF1cClbMV0pO1xuICB2YXIgd2Via2l0ID0gIWVkZ2UgJiYgL1dlYktpdFxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcXR3ZWJraXQgPSB3ZWJraXQgJiYgL1F0XFwvXFxkK1xcLlxcZCsvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIC9DaHJvbWVcXC8vLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHByZXN0byA9IC9PcGVyYVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpO1xuICB2YXIgbWFjX2dlTW91bnRhaW5MaW9uID0gL01hYyBPUyBYIDFcXGRcXEQoWzgtOV18XFxkXFxkKVxcRC8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgcGhhbnRvbSA9IC9QaGFudG9tSlMvLnRlc3QodXNlckFnZW50KTtcblxuICB2YXIgaW9zID0gIWVkZ2UgJiYgL0FwcGxlV2ViS2l0Ly50ZXN0KHVzZXJBZ2VudCkgJiYgL01vYmlsZVxcL1xcdysvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGFuZHJvaWQgPSAvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpO1xuICAvLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZvciBhbHRlcm5hdGl2ZSBtZXRob2RzIHdlbGNvbWUuXG4gIHZhciBtb2JpbGUgPSBpb3MgfHwgYW5kcm9pZCB8fCAvd2ViT1N8QmxhY2tCZXJyeXxPcGVyYSBNaW5pfE9wZXJhIE1vYml8SUVNb2JpbGUvaS50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBtYWMgPSBpb3MgfHwgL01hYy8udGVzdChwbGF0Zm9ybSk7XG4gIHZhciBjaHJvbWVPUyA9IC9cXGJDck9TXFxiLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciB3aW5kb3dzID0gL3dpbi9pLnRlc3QocGxhdGZvcm0pO1xuXG4gIHZhciBwcmVzdG9fdmVyc2lvbiA9IHByZXN0byAmJiB1c2VyQWdlbnQubWF0Y2goL1ZlcnNpb25cXC8oXFxkKlxcLlxcZCopLyk7XG4gIGlmIChwcmVzdG9fdmVyc2lvbikgeyBwcmVzdG9fdmVyc2lvbiA9IE51bWJlcihwcmVzdG9fdmVyc2lvblsxXSk7IH1cbiAgaWYgKHByZXN0b192ZXJzaW9uICYmIHByZXN0b192ZXJzaW9uID49IDE1KSB7IHByZXN0byA9IGZhbHNlOyB3ZWJraXQgPSB0cnVlOyB9XG4gIC8vIFNvbWUgYnJvd3NlcnMgdXNlIHRoZSB3cm9uZyBldmVudCBwcm9wZXJ0aWVzIHRvIHNpZ25hbCBjbWQvY3RybCBvbiBPUyBYXG4gIHZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTtcbiAgdmFyIGNhcHR1cmVSaWdodENsaWNrID0gZ2Vja28gfHwgKGllICYmIGllX3ZlcnNpb24gPj0gOSk7XG5cbiAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xzICsgXCIoPzokfFxcXFxzKVxcXFxzKlwiKSB9XG5cbiAgdmFyIHJtQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lO1xuICAgIHZhciBtYXRjaCA9IGNsYXNzVGVzdChjbHMpLmV4ZWMoY3VycmVudCk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgYWZ0ZXIgPSBjdXJyZW50LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgIG5vZGUuY2xhc3NOYW1lID0gY3VycmVudC5zbGljZSgwLCBtYXRjaC5pbmRleCkgKyAoYWZ0ZXIgPyBtYXRjaFsxXSArIGFmdGVyIDogXCJcIik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuKGUpIHtcbiAgICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudClcbiAgICAgIHsgZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpOyB9XG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHBhcmVudCwgZSkge1xuICAgIHJldHVybiByZW1vdmVDaGlsZHJlbihwYXJlbnQpLmFwcGVuZENoaWxkKGUpXG4gIH1cblxuICBmdW5jdGlvbiBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7XG4gICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgaWYgKGNsYXNzTmFtZSkgeyBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuICAgIGlmIChzdHlsZSkgeyBlLnN0eWxlLmNzc1RleHQgPSBzdHlsZTsgfVxuICAgIGlmICh0eXBlb2YgY29udGVudCA9PSBcInN0cmluZ1wiKSB7IGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOyB9XG4gICAgZWxzZSBpZiAoY29udGVudCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIHsgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsgfSB9XG4gICAgcmV0dXJuIGVcbiAgfVxuICAvLyB3cmFwcGVyIGZvciBlbHQsIHdoaWNoIHJlbW92ZXMgdGhlIGVsdCBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWVcbiAgZnVuY3Rpb24gZWx0UCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpIHtcbiAgICB2YXIgZSA9IGVsdCh0YWcsIGNvbnRlbnQsIGNsYXNzTmFtZSwgc3R5bGUpO1xuICAgIGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInByZXNlbnRhdGlvblwiKTtcbiAgICByZXR1cm4gZVxuICB9XG5cbiAgdmFyIHJhbmdlO1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kLCBlbmROb2RlKSB7XG4gICAgdmFyIHIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9kZSwgZW5kKTtcbiAgICByLnNldFN0YXJ0KG5vZGUsIHN0YXJ0KTtcbiAgICByZXR1cm4gclxuICB9OyB9XG4gIGVsc2UgeyByYW5nZSA9IGZ1bmN0aW9uKG5vZGUsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgdHJ5IHsgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9XG4gICAgY2F0Y2goZSkgeyByZXR1cm4gciB9XG4gICAgci5jb2xsYXBzZSh0cnVlKTtcbiAgICByLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIiwgZW5kKTtcbiAgICByLm1vdmVTdGFydChcImNoYXJhY3RlclwiLCBzdGFydCk7XG4gICAgcmV0dXJuIHJcbiAgfTsgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT0gMykgLy8gQW5kcm9pZCBicm93c2VyIGFsd2F5cyByZXR1cm5zIGZhbHNlIHdoZW4gY2hpbGQgaXMgYSB0ZXh0bm9kZVxuICAgICAgeyBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7IH1cbiAgICBpZiAocGFyZW50LmNvbnRhaW5zKVxuICAgICAgeyByZXR1cm4gcGFyZW50LmNvbnRhaW5zKGNoaWxkKSB9XG4gICAgZG8ge1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDExKSB7IGNoaWxkID0gY2hpbGQuaG9zdDsgfVxuICAgICAgaWYgKGNoaWxkID09IHBhcmVudCkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKVxuICB9XG5cbiAgZnVuY3Rpb24gYWN0aXZlRWx0KCkge1xuICAgIC8vIElFIGFuZCBFZGdlIG1heSB0aHJvdyBhbiBcIlVuc3BlY2lmaWVkIEVycm9yXCIgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5cbiAgICAvLyBJRSA8IDEwIHdpbGwgdGhyb3cgd2hlbiBhY2Nlc3NlZCB3aGlsZSB0aGUgcGFnZSBpcyBsb2FkaW5nIG9yIGluIGFuIGlmcmFtZS5cbiAgICAvLyBJRSA+IDkgYW5kIEVkZ2Ugd2lsbCB0aHJvdyB3aGVuIGFjY2Vzc2VkIGluIGFuIGlmcmFtZSBpZiBkb2N1bWVudC5ib2R5IGlzIHVuYXZhaWxhYmxlLlxuICAgIHZhciBhY3RpdmVFbGVtZW50O1xuICAgIHRyeSB7XG4gICAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5ib2R5IHx8IG51bGw7XG4gICAgfVxuICAgIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCAmJiBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudClcbiAgICAgIHsgYWN0aXZlRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50OyB9XG4gICAgcmV0dXJuIGFjdGl2ZUVsZW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNscykge1xuICAgIHZhciBjdXJyZW50ID0gbm9kZS5jbGFzc05hbWU7XG4gICAgaWYgKCFjbGFzc1Rlc3QoY2xzKS50ZXN0KGN1cnJlbnQpKSB7IG5vZGUuY2xhc3NOYW1lICs9IChjdXJyZW50ID8gXCIgXCIgOiBcIlwiKSArIGNsczsgfVxuICB9XG4gIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGEsIGIpIHtcbiAgICB2YXIgYXMgPSBhLnNwbGl0KFwiIFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAoYXNbaV0gJiYgIWNsYXNzVGVzdChhc1tpXSkudGVzdChiKSkgeyBiICs9IFwiIFwiICsgYXNbaV07IH0gfVxuICAgIHJldHVybiBiXG4gIH1cblxuICB2YXIgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0KCk7IH07XG4gIGlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLlxuICAgIHsgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IG5vZGUuc2VsZWN0aW9uU3RhcnQgPSAwOyBub2RlLnNlbGVjdGlvbkVuZCA9IG5vZGUudmFsdWUubGVuZ3RoOyB9OyB9XG4gIGVsc2UgaWYgKGllKSAvLyBTdXBwcmVzcyBteXN0ZXJpb3VzIElFMTAgZXJyb3JzXG4gICAgeyBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsgfVxuXG4gIGZ1bmN0aW9uIGJpbmQoZikge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKX1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlPYmoob2JqLCB0YXJnZXQsIG92ZXJ3cml0ZSkge1xuICAgIGlmICghdGFyZ2V0KSB7IHRhcmdldCA9IHt9OyB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopXG4gICAgICB7IGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkgJiYgKG92ZXJ3cml0ZSAhPT0gZmFsc2UgfHwgIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkpXG4gICAgICAgIHsgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOyB9IH1cbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC5cbiAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi5cbiAgZnVuY3Rpb24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQsIHRhYlNpemUsIHN0YXJ0SW5kZXgsIHN0YXJ0VmFsdWUpIHtcbiAgICBpZiAoZW5kID09IG51bGwpIHtcbiAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXFxzXFx1MDBhMF0vKTtcbiAgICAgIGlmIChlbmQgPT0gLTEpIHsgZW5kID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleCB8fCAwLCBuID0gc3RhcnRWYWx1ZSB8fCAwOzspIHtcbiAgICAgIHZhciBuZXh0VGFiID0gc3RyaW5nLmluZGV4T2YoXCJcXHRcIiwgaSk7XG4gICAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4dFRhYiA+PSBlbmQpXG4gICAgICAgIHsgcmV0dXJuIG4gKyAoZW5kIC0gaSkgfVxuICAgICAgbiArPSBuZXh0VGFiIC0gaTtcbiAgICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7XG4gICAgICBpID0gbmV4dFRhYiArIDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIERlbGF5ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlkID0gbnVsbDtcbiAgICB0aGlzLmYgPSBudWxsO1xuICAgIHRoaXMudGltZSA9IDA7XG4gICAgdGhpcy5oYW5kbGVyID0gYmluZCh0aGlzLm9uVGltZW91dCwgdGhpcyk7XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLm9uVGltZW91dCA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gICAgc2VsZi5pZCA9IDA7XG4gICAgaWYgKHNlbGYudGltZSA8PSArbmV3IERhdGUpIHtcbiAgICAgIHNlbGYuZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KHNlbGYuaGFuZGxlciwgc2VsZi50aW1lIC0gK25ldyBEYXRlKTtcbiAgICB9XG4gIH07XG4gIERlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtcywgZikge1xuICAgIHRoaXMuZiA9IGY7XG4gICAgdmFyIHRpbWUgPSArbmV3IERhdGUgKyBtcztcbiAgICBpZiAoIXRoaXMuaWQgfHwgdGltZSA8IHRoaXMudGltZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaWQpO1xuICAgICAgdGhpcy5pZCA9IHNldFRpbWVvdXQodGhpcy5oYW5kbGVyLCBtcyk7XG4gICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCBlbHQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKVxuICAgICAgeyBpZiAoYXJyYXlbaV0gPT0gZWx0KSB7IHJldHVybiBpIH0gfVxuICAgIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTnVtYmVyIG9mIHBpeGVscyBhZGRlZCB0byBzY3JvbGxlciBhbmQgc2l6ZXIgdG8gaGlkZSBzY3JvbGxiYXJcbiAgdmFyIHNjcm9sbGVyR2FwID0gMzA7XG5cbiAgLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdFxuICAvLyBoYW5kbGluZyB0aGlzJy5cbiAgdmFyIFBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuIFwiQ29kZU1pcnJvci5QYXNzXCJ9fTtcblxuICAvLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHNcbiAgdmFyIHNlbF9kb250U2Nyb2xsID0ge3Njcm9sbDogZmFsc2V9LCBzZWxfbW91c2UgPSB7b3JpZ2luOiBcIiptb3VzZVwifSwgc2VsX21vdmUgPSB7b3JpZ2luOiBcIittb3ZlXCJ9O1xuXG4gIC8vIFRoZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvXG4gIC8vIGEgcGFydGljdWxhciBjb2x1bW4uXG4gIGZ1bmN0aW9uIGZpbmRDb2x1bW4oc3RyaW5nLCBnb2FsLCB0YWJTaXplKSB7XG4gICAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7XG4gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKFwiXFx0XCIsIHBvcyk7XG4gICAgICBpZiAobmV4dFRhYiA9PSAtMSkgeyBuZXh0VGFiID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgaWYgKG5leHRUYWIgPT0gc3RyaW5nLmxlbmd0aCB8fCBjb2wgKyBza2lwcGVkID49IGdvYWwpXG4gICAgICAgIHsgcmV0dXJuIHBvcyArIE1hdGgubWluKHNraXBwZWQsIGdvYWwgLSBjb2wpIH1cbiAgICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zO1xuICAgICAgY29sICs9IHRhYlNpemUgLSAoY29sICUgdGFiU2l6ZSk7XG4gICAgICBwb3MgPSBuZXh0VGFiICsgMTtcbiAgICAgIGlmIChjb2wgPj0gZ29hbCkgeyByZXR1cm4gcG9zIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3BhY2VTdHJzID0gW1wiXCJdO1xuICBmdW5jdGlvbiBzcGFjZVN0cihuKSB7XG4gICAgd2hpbGUgKHNwYWNlU3Rycy5sZW5ndGggPD0gbilcbiAgICAgIHsgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyBcIiBcIik7IH1cbiAgICByZXR1cm4gc3BhY2VTdHJzW25dXG4gIH1cblxuICBmdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXSB9XG5cbiAgZnVuY3Rpb24gbWFwKGFycmF5LCBmKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7IH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRTb3J0ZWQoYXJyYXksIHZhbHVlLCBzY29yZSkge1xuICAgIHZhciBwb3MgPSAwLCBwcmlvcml0eSA9IHNjb3JlKHZhbHVlKTtcbiAgICB3aGlsZSAocG9zIDwgYXJyYXkubGVuZ3RoICYmIHNjb3JlKGFycmF5W3Bvc10pIDw9IHByaW9yaXR5KSB7IHBvcysrOyB9XG4gICAgYXJyYXkuc3BsaWNlKHBvcywgMCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90aGluZygpIHt9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7XG4gICAgdmFyIGluc3Q7XG4gICAgaWYgKE9iamVjdC5jcmVhdGUpIHtcbiAgICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RoaW5nLnByb3RvdHlwZSA9IGJhc2U7XG4gICAgICBpbnN0ID0gbmV3IG5vdGhpbmcoKTtcbiAgICB9XG4gICAgaWYgKHByb3BzKSB7IGNvcHlPYmoocHJvcHMsIGluc3QpOyB9XG4gICAgcmV0dXJuIGluc3RcbiAgfVxuXG4gIHZhciBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhciA9IC9bXFx1MDBkZlxcdTA1ODdcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUzMDQwLVxcdTMwOWZcXHUzMGEwLVxcdTMwZmZcXHUzNDAwLVxcdTRkYjVcXHU0ZTAwLVxcdTlmY2NcXHVhYzAwLVxcdWQ3YWZdLztcbiAgZnVuY3Rpb24gaXNXb3JkQ2hhckJhc2ljKGNoKSB7XG4gICAgcmV0dXJuIC9cXHcvLnRlc3QoY2gpIHx8IGNoID4gXCJcXHg4MFwiICYmXG4gICAgICAoY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpIHx8IG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyLnRlc3QoY2gpKVxuICB9XG4gIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gsIGhlbHBlcikge1xuICAgIGlmICghaGVscGVyKSB7IHJldHVybiBpc1dvcmRDaGFyQmFzaWMoY2gpIH1cbiAgICBpZiAoaGVscGVyLnNvdXJjZS5pbmRleE9mKFwiXFxcXHdcIikgPiAtMSAmJiBpc1dvcmRDaGFyQmFzaWMoY2gpKSB7IHJldHVybiB0cnVlIH1cbiAgICByZXR1cm4gaGVscGVyLnRlc3QoY2gpXG4gIH1cblxuICBmdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICAgIGZvciAodmFyIG4gaW4gb2JqKSB7IGlmIChvYmouaGFzT3duUHJvcGVydHkobikgJiYgb2JqW25dKSB7IHJldHVybiBmYWxzZSB9IH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gRXh0ZW5kaW5nIHVuaWNvZGUgY2hhcmFjdGVycy4gQSBzZXJpZXMgb2YgYSBub24tZXh0ZW5kaW5nIGNoYXIgK1xuICAvLyBhbnkgbnVtYmVyIG9mIGV4dGVuZGluZyBjaGFycyBpcyB0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgYXMgZmFyXG4gIC8vIGFzIGVkaXRpbmcgYW5kIG1lYXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsXG4gIC8vIHNpbmNlIHNvbWUgc2NyaXB0cy9mb250cy9icm93c2VycyBhbHNvIHRyZWF0IG90aGVyIGNvbmZpZ3VyYXRpb25zXG4gIC8vIG9mIGNvZGUgcG9pbnRzIGFzIGEgZ3JvdXAuXG4gIHZhciBleHRlbmRpbmdDaGFycyA9IC9bXFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg5XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjVlXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGUtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA5MDAtXFx1MDkwMlxcdTA5M2NcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDliY1xcdTA5YmVcXHUwOWMxLVxcdTA5YzRcXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MGEwMVxcdTBhMDJcXHUwYTNjXFx1MGE0MVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTcwXFx1MGE3MVxcdTBhNzVcXHUwYTgxXFx1MGE4MlxcdTBhYmNcXHUwYWMxLVxcdTBhYzVcXHUwYWM3XFx1MGFjOFxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBiMDFcXHUwYjNjXFx1MGIzZVxcdTBiM2ZcXHUwYjQxLVxcdTBiNDRcXHUwYjRkXFx1MGI1NlxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiODJcXHUwYmJlXFx1MGJjMFxcdTBiY2RcXHUwYmQ3XFx1MGMzZS1cXHUwYzQwXFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjYmNcXHUwY2JmXFx1MGNjMlxcdTBjYzZcXHUwY2NjXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwZDNlXFx1MGQ0MS1cXHUwZDQ0XFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkY2FcXHUwZGNmXFx1MGRkMi1cXHUwZGQ0XFx1MGRkNlxcdTBkZGZcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGYxOFxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOTAtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5XFx1MTAzYVxcdTEwM2RcXHUxMDNlXFx1MTA1OFxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzRcXHUxMDgyXFx1MTA4NVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyN1xcdTE5MjhcXHUxOTMyXFx1MTkzOS1cXHUxOTNiXFx1MWExN1xcdTFhMThcXHUxYTU2XFx1MWE1OC1cXHUxYTVlXFx1MWE2MFxcdTFhNjJcXHUxYTY1LVxcdTFhNmNcXHUxYTczLVxcdTFhN2NcXHUxYTdmXFx1MWIwMC1cXHUxYjAzXFx1MWIzNFxcdTFiMzYtXFx1MWIzYVxcdTFiM2NcXHUxYjQyXFx1MWI2Yi1cXHUxYjczXFx1MWI4MFxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4XFx1MWJhOVxcdTFjMmMtXFx1MWMzM1xcdTFjMzZcXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFkYzAtXFx1MWRlNlxcdTFkZmQtXFx1MWRmZlxcdTIwMGNcXHUyMDBkXFx1MjBkMC1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjZmLVxcdWE2NzJcXHVhNjdjXFx1YTY3ZFxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyNVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmNcXHVhYTI5LVxcdWFhMmVcXHVhYTMxXFx1YWEzMlxcdWFhMzVcXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYmU1XFx1YWJlOFxcdWFiZWRcXHVkYzAwLVxcdWRmZmZcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTI2XFx1ZmY5ZVxcdWZmOWZdLztcbiAgZnVuY3Rpb24gaXNFeHRlbmRpbmdDaGFyKGNoKSB7IHJldHVybiBjaC5jaGFyQ29kZUF0KDApID49IDc2OCAmJiBleHRlbmRpbmdDaGFycy50ZXN0KGNoKSB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSByYW5nZSBbYDBgOyBgc3RyLmxlbmd0aGBdIHVubGVzcyBgcG9zYCBpcyBvdXRzaWRlIHRoYXQgcmFuZ2UuXG4gIGZ1bmN0aW9uIHNraXBFeHRlbmRpbmdDaGFycyhzdHIsIHBvcywgZGlyKSB7XG4gICAgd2hpbGUgKChkaXIgPCAwID8gcG9zID4gMCA6IHBvcyA8IHN0ci5sZW5ndGgpICYmIGlzRXh0ZW5kaW5nQ2hhcihzdHIuY2hhckF0KHBvcykpKSB7IHBvcyArPSBkaXI7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBmcm9tIHRoZSByYW5nZSBbYGZyb21gOyBgdG9gXSB0aGF0IHNhdGlzZmllc1xuICAvLyBgcHJlZGAgYW5kIGlzIGNsb3Nlc3QgdG8gYGZyb21gLiBBc3N1bWVzIHRoYXQgYXQgbGVhc3QgYHRvYFxuICAvLyBzYXRpc2ZpZXMgYHByZWRgLiBTdXBwb3J0cyBgZnJvbWAgYmVpbmcgZ3JlYXRlciB0aGFuIGB0b2AuXG4gIGZ1bmN0aW9uIGZpbmRGaXJzdChwcmVkLCBmcm9tLCB0bykge1xuICAgIC8vIEF0IGFueSBwb2ludCB3ZSBhcmUgY2VydGFpbiBgdG9gIHNhdGlzZmllcyBgcHJlZGAsIGRvbid0IGtub3dcbiAgICAvLyB3aGV0aGVyIGBmcm9tYCBkb2VzLlxuICAgIHZhciBkaXIgPSBmcm9tID4gdG8gPyAtMSA6IDE7XG4gICAgZm9yICg7Oykge1xuICAgICAgaWYgKGZyb20gPT0gdG8pIHsgcmV0dXJuIGZyb20gfVxuICAgICAgdmFyIG1pZEYgPSAoZnJvbSArIHRvKSAvIDIsIG1pZCA9IGRpciA8IDAgPyBNYXRoLmNlaWwobWlkRikgOiBNYXRoLmZsb29yKG1pZEYpO1xuICAgICAgaWYgKG1pZCA9PSBmcm9tKSB7IHJldHVybiBwcmVkKG1pZCkgPyBmcm9tIDogdG8gfVxuICAgICAgaWYgKHByZWQobWlkKSkgeyB0byA9IG1pZDsgfVxuICAgICAgZWxzZSB7IGZyb20gPSBtaWQgKyBkaXI7IH1cbiAgICB9XG4gIH1cblxuICAvLyBCSURJIEhFTFBFUlNcblxuICBmdW5jdGlvbiBpdGVyYXRlQmlkaVNlY3Rpb25zKG9yZGVyLCBmcm9tLCB0bywgZikge1xuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIGYoZnJvbSwgdG8sIFwibHRyXCIsIDApIH1cbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgaWYgKHBhcnQuZnJvbSA8IHRvICYmIHBhcnQudG8gPiBmcm9tIHx8IGZyb20gPT0gdG8gJiYgcGFydC50byA9PSBmcm9tKSB7XG4gICAgICAgIGYoTWF0aC5tYXgocGFydC5mcm9tLCBmcm9tKSwgTWF0aC5taW4ocGFydC50bywgdG8pLCBwYXJ0LmxldmVsID09IDEgPyBcInJ0bFwiIDogXCJsdHJcIiwgaSk7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgeyBmKGZyb20sIHRvLCBcImx0clwiKTsgfVxuICB9XG5cbiAgdmFyIGJpZGlPdGhlciA9IG51bGw7XG4gIGZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpIHtcbiAgICB2YXIgZm91bmQ7XG4gICAgYmlkaU90aGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY3VyID0gb3JkZXJbaV07XG4gICAgICBpZiAoY3VyLmZyb20gPCBjaCAmJiBjdXIudG8gPiBjaCkgeyByZXR1cm4gaSB9XG4gICAgICBpZiAoY3VyLnRvID09IGNoKSB7XG4gICAgICAgIGlmIChjdXIuZnJvbSAhPSBjdXIudG8gJiYgc3RpY2t5ID09IFwiYmVmb3JlXCIpIHsgZm91bmQgPSBpOyB9XG4gICAgICAgIGVsc2UgeyBiaWRpT3RoZXIgPSBpOyB9XG4gICAgICB9XG4gICAgICBpZiAoY3VyLmZyb20gPT0gY2gpIHtcbiAgICAgICAgaWYgKGN1ci5mcm9tICE9IGN1ci50byAmJiBzdGlja3kgIT0gXCJiZWZvcmVcIikgeyBmb3VuZCA9IGk7IH1cbiAgICAgICAgZWxzZSB7IGJpZGlPdGhlciA9IGk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kICE9IG51bGwgPyBmb3VuZCA6IGJpZGlPdGhlclxuICB9XG5cbiAgLy8gQmlkaXJlY3Rpb25hbCBvcmRlcmluZyBhbGdvcml0aG1cbiAgLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobVxuICAvLyB0aGF0IHRoaXMgKHBhcnRpYWxseSkgaW1wbGVtZW50cy5cblxuICAvLyBPbmUtY2hhciBjb2RlcyB1c2VkIGZvciBjaGFyYWN0ZXIgdHlwZXM6XG4gIC8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHRcbiAgLy8gUiAoUik6ICAgUmlnaHQtdG8tTGVmdFxuICAvLyByIChBTCk6ICBSaWdodC10by1MZWZ0IEFyYWJpY1xuICAvLyAxIChFTik6ICBFdXJvcGVhbiBOdW1iZXJcbiAgLy8gKyAoRVMpOiAgRXVyb3BlYW4gTnVtYmVyIFNlcGFyYXRvclxuICAvLyAlIChFVCk6ICBFdXJvcGVhbiBOdW1iZXIgVGVybWluYXRvclxuICAvLyBuIChBTik6ICBBcmFiaWMgTnVtYmVyXG4gIC8vICwgKENTKTogIENvbW1vbiBOdW1iZXIgU2VwYXJhdG9yXG4gIC8vIG0gKE5TTSk6IE5vbi1TcGFjaW5nIE1hcmtcbiAgLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbFxuICAvLyBzIChCKTogICBQYXJhZ3JhcGggU2VwYXJhdG9yXG4gIC8vIHQgKFMpOiAgIFNlZ21lbnQgU2VwYXJhdG9yXG4gIC8vIHcgKFdTKTogIFdoaXRlc3BhY2VcbiAgLy8gTiAoT04pOiAgT3RoZXIgTmV1dHJhbHNcblxuICAvLyBSZXR1cm5zIG51bGwgaWYgY2hhcmFjdGVycyBhcmUgb3JkZXJlZCBhcyB0aGV5IGFwcGVhclxuICAvLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfVxuICAvLyBvYmplY3RzKSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1ciB2aXN1YWxseS5cbiAgdmFyIGJpZGlPcmRlcmluZyA9IChmdW5jdGlvbigpIHtcbiAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmXG4gICAgdmFyIGxvd1R5cGVzID0gXCJiYmJiYmJiYmJ0c3R3c2JiYmJiYmJiYmJiYmJic3NzdHdOTiUlJU5OTk5OTixOLE4xMTExMTExMTExTk5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTk5OTExMTExMTExMTExMTExMTExMTExMTExMTExOTk5OYmJiYmJic2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLE4lJSUlTk5OTkxOTk5OTiUlMTFOTE5OTjFMTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTE5MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTlwiO1xuICAgIC8vIENoYXJhY3RlciB0eXBlcyBmb3IgY29kZXBvaW50cyAweDYwMCB0byAweDZmOVxuICAgIHZhciBhcmFiaWNUeXBlcyA9IFwibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiO1xuICAgIGZ1bmN0aW9uIGNoYXJUeXBlKGNvZGUpIHtcbiAgICAgIGlmIChjb2RlIDw9IDB4ZjcpIHsgcmV0dXJuIGxvd1R5cGVzLmNoYXJBdChjb2RlKSB9XG4gICAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHsgcmV0dXJuIFwiUlwiIH1cbiAgICAgIGVsc2UgaWYgKDB4NjAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDZmOSkgeyByZXR1cm4gYXJhYmljVHlwZXMuY2hhckF0KGNvZGUgLSAweDYwMCkgfVxuICAgICAgZWxzZSBpZiAoMHg2ZWUgPD0gY29kZSAmJiBjb2RlIDw9IDB4OGFjKSB7IHJldHVybiBcInJcIiB9XG4gICAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgeyByZXR1cm4gXCJ3XCIgfVxuICAgICAgZWxzZSBpZiAoY29kZSA9PSAweDIwMGMpIHsgcmV0dXJuIFwiYlwiIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gXCJMXCIgfVxuICAgIH1cblxuICAgIHZhciBiaWRpUkUgPSAvW1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTA3MDAtXFx1MDhhY10vO1xuICAgIHZhciBpc05ldXRyYWwgPSAvW3N0d05dLywgaXNTdHJvbmcgPSAvW0xScl0vLCBjb3VudHNBc0xlZnQgPSAvW0xiMW5dLywgY291bnRzQXNOdW0gPSAvWzFuXS87XG5cbiAgICBmdW5jdGlvbiBCaWRpU3BhbihsZXZlbCwgZnJvbSwgdG8pIHtcbiAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bztcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyLCBkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBvdXRlclR5cGUgPSBkaXJlY3Rpb24gPT0gXCJsdHJcIiA/IFwiTFwiIDogXCJSXCI7XG5cbiAgICAgIGlmIChzdHIubGVuZ3RoID09IDAgfHwgZGlyZWN0aW9uID09IFwibHRyXCIgJiYgIWJpZGlSRS50ZXN0KHN0cikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLCB0eXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgeyB0eXBlcy5wdXNoKGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7IH1cblxuICAgICAgLy8gVzEuIEV4YW1pbmUgZWFjaCBub24tc3BhY2luZyBtYXJrIChOU00pIGluIHRoZSBsZXZlbCBydW4sIGFuZFxuICAgICAgLy8gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBOU00gdG8gdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzXG4gICAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGxcbiAgICAgIC8vIGdldCB0aGUgdHlwZSBvZiBzb3IuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBwcmV2ID0gb3V0ZXJUeXBlOyBpJDEgPCBsZW47ICsraSQxKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZXNbaSQxXTtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJtXCIpIHsgdHlwZXNbaSQxXSA9IHByZXY7IH1cbiAgICAgICAgZWxzZSB7IHByZXYgPSB0eXBlOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIFcyLiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlclxuICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBBTCwgb3Igc29yKSBpcyBmb3VuZC4gSWYgYW5cbiAgICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWNcbiAgICAgIC8vIG51bWJlci5cbiAgICAgIC8vIFczLiBDaGFuZ2UgYWxsIEFMcyB0byBSLlxuICAgICAgZm9yICh2YXIgaSQyID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpJDIgPCBsZW47ICsraSQyKSB7XG4gICAgICAgIHZhciB0eXBlJDEgPSB0eXBlc1tpJDJdO1xuICAgICAgICBpZiAodHlwZSQxID09IFwiMVwiICYmIGN1ciA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJuXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDEpKSB7IGN1ciA9IHR5cGUkMTsgaWYgKHR5cGUkMSA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJSXCI7IH0gfVxuICAgICAgfVxuXG4gICAgICAvLyBXNC4gQSBzaW5nbGUgRXVyb3BlYW4gc2VwYXJhdG9yIGJldHdlZW4gdHdvIEV1cm9wZWFuIG51bWJlcnNcbiAgICAgIC8vIGNoYW5nZXMgdG8gYSBFdXJvcGVhbiBudW1iZXIuIEEgc2luZ2xlIGNvbW1vbiBzZXBhcmF0b3IgYmV0d2VlblxuICAgICAgLy8gdHdvIG51bWJlcnMgb2YgdGhlIHNhbWUgdHlwZSBjaGFuZ2VzIHRvIHRoYXQgdHlwZS5cbiAgICAgIGZvciAodmFyIGkkMyA9IDEsIHByZXYkMSA9IHR5cGVzWzBdOyBpJDMgPCBsZW4gLSAxOyArK2kkMykge1xuICAgICAgICB2YXIgdHlwZSQyID0gdHlwZXNbaSQzXTtcbiAgICAgICAgaWYgKHR5cGUkMiA9PSBcIitcIiAmJiBwcmV2JDEgPT0gXCIxXCIgJiYgdHlwZXNbaSQzKzFdID09IFwiMVwiKSB7IHR5cGVzW2kkM10gPSBcIjFcIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDIgPT0gXCIsXCIgJiYgcHJldiQxID09IHR5cGVzW2kkMysxXSAmJlxuICAgICAgICAgICAgICAgICAocHJldiQxID09IFwiMVwiIHx8IHByZXYkMSA9PSBcIm5cIikpIHsgdHlwZXNbaSQzXSA9IHByZXYkMTsgfVxuICAgICAgICBwcmV2JDEgPSB0eXBlJDI7XG4gICAgICB9XG5cbiAgICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFuIHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuXG4gICAgICAvLyBudW1iZXJzIGNoYW5nZXMgdG8gYWxsIEV1cm9wZWFuIG51bWJlcnMuXG4gICAgICAvLyBXNi4gT3RoZXJ3aXNlLCBzZXBhcmF0b3JzIGFuZCB0ZXJtaW5hdG9ycyBjaGFuZ2UgdG8gT3RoZXJcbiAgICAgIC8vIE5ldXRyYWwuXG4gICAgICBmb3IgKHZhciBpJDQgPSAwOyBpJDQgPCBsZW47ICsraSQ0KSB7XG4gICAgICAgIHZhciB0eXBlJDMgPSB0eXBlc1tpJDRdO1xuICAgICAgICBpZiAodHlwZSQzID09IFwiLFwiKSB7IHR5cGVzW2kkNF0gPSBcIk5cIjsgfVxuICAgICAgICBlbHNlIGlmICh0eXBlJDMgPT0gXCIlXCIpIHtcbiAgICAgICAgICB2YXIgZW5kID0gKHZvaWQgMCk7XG4gICAgICAgICAgZm9yIChlbmQgPSBpJDQgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIiVcIjsgKytlbmQpIHt9XG4gICAgICAgICAgdmFyIHJlcGxhY2UgPSAoaSQ0ICYmIHR5cGVzW2kkNC0xXSA9PSBcIiFcIikgfHwgKGVuZCA8IGxlbiAmJiB0eXBlc1tlbmRdID09IFwiMVwiKSA/IFwiMVwiIDogXCJOXCI7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGkkNDsgaiA8IGVuZDsgKytqKSB7IHR5cGVzW2pdID0gcmVwbGFjZTsgfVxuICAgICAgICAgIGkkNCA9IGVuZCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVzcuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyXG4gICAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEwgaXNcbiAgICAgIC8vIGZvdW5kLCB0aGVuIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyIHRvIEwuXG4gICAgICBmb3IgKHZhciBpJDUgPSAwLCBjdXIkMSA9IG91dGVyVHlwZTsgaSQ1IDwgbGVuOyArK2kkNSkge1xuICAgICAgICB2YXIgdHlwZSQ0ID0gdHlwZXNbaSQ1XTtcbiAgICAgICAgaWYgKGN1ciQxID09IFwiTFwiICYmIHR5cGUkNCA9PSBcIjFcIikgeyB0eXBlc1tpJDVdID0gXCJMXCI7IH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDQpKSB7IGN1ciQxID0gdHlwZSQ0OyB9XG4gICAgICB9XG5cbiAgICAgIC8vIE4xLiBBIHNlcXVlbmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlXG4gICAgICAvLyBzdXJyb3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVzIGhhcyB0aGUgc2FtZVxuICAgICAgLy8gZGlyZWN0aW9uLiBFdXJvcGVhbiBhbmQgQXJhYmljIG51bWJlcnMgYWN0IGFzIGlmIHRoZXkgd2VyZSBSIGluXG4gICAgICAvLyB0ZXJtcyBvZiB0aGVpciBpbmZsdWVuY2Ugb24gbmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKVxuICAgICAgLy8gYW5kIGVuZC1vZi1sZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMuXG4gICAgICAvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uLlxuICAgICAgZm9yICh2YXIgaSQ2ID0gMDsgaSQ2IDwgbGVuOyArK2kkNikge1xuICAgICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlwZXNbaSQ2XSkpIHtcbiAgICAgICAgICB2YXIgZW5kJDEgPSAodm9pZCAwKTtcbiAgICAgICAgICBmb3IgKGVuZCQxID0gaSQ2ICsgMTsgZW5kJDEgPCBsZW4gJiYgaXNOZXV0cmFsLnRlc3QodHlwZXNbZW5kJDFdKTsgKytlbmQkMSkge31cbiAgICAgICAgICB2YXIgYmVmb3JlID0gKGkkNiA/IHR5cGVzW2kkNi0xXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgICAgdmFyIGFmdGVyID0gKGVuZCQxIDwgbGVuID8gdHlwZXNbZW5kJDFdIDogb3V0ZXJUeXBlKSA9PSBcIkxcIjtcbiAgICAgICAgICB2YXIgcmVwbGFjZSQxID0gYmVmb3JlID09IGFmdGVyID8gKGJlZm9yZSA/IFwiTFwiIDogXCJSXCIpIDogb3V0ZXJUeXBlO1xuICAgICAgICAgIGZvciAodmFyIGokMSA9IGkkNjsgaiQxIDwgZW5kJDE7ICsraiQxKSB7IHR5cGVzW2okMV0gPSByZXBsYWNlJDE7IH1cbiAgICAgICAgICBpJDYgPSBlbmQkMSAtIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSGVyZSB3ZSBkZXBhcnQgZnJvbSB0aGUgZG9jdW1lbnRlZCBhbGdvcml0aG0sIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgICAvLyBidWlsZGluZyB1cCBhbiBhY3R1YWwgbGV2ZWxzIGFycmF5LiBTaW5jZSB0aGVyZSBhcmUgb25seSB0aHJlZVxuICAgICAgLy8gbGV2ZWxzICgwLCAxLCAyKSBpbiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZVxuICAgICAgLy8gZXhwbGljaXQgZW1iZWRkaW5nIGludG8gYWNjb3VudCwgd2UgY2FuIGJ1aWxkIHVwIHRoZSBvcmRlciBvblxuICAgICAgLy8gdGhlIGZseSwgd2l0aG91dCBmb2xsb3dpbmcgdGhlIGxldmVsLWJhc2VkIGFsZ29yaXRobS5cbiAgICAgIHZhciBvcmRlciA9IFtdLCBtO1xuICAgICAgZm9yICh2YXIgaSQ3ID0gMDsgaSQ3IDwgbGVuOykge1xuICAgICAgICBpZiAoY291bnRzQXNMZWZ0LnRlc3QodHlwZXNbaSQ3XSkpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSBpJDc7XG4gICAgICAgICAgZm9yICgrK2kkNzsgaSQ3IDwgbGVuICYmIGNvdW50c0FzTGVmdC50ZXN0KHR5cGVzW2kkN10pOyArK2kkNykge31cbiAgICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBzdGFydCwgaSQ3KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHBvcyA9IGkkNywgYXQgPSBvcmRlci5sZW5ndGgsIGlzUlRMID0gZGlyZWN0aW9uID09IFwicnRsXCIgPyAxIDogMDtcbiAgICAgICAgICBmb3IgKCsraSQ3OyBpJDcgPCBsZW4gJiYgdHlwZXNbaSQ3XSAhPSBcIkxcIjsgKytpJDcpIHt9XG4gICAgICAgICAgZm9yICh2YXIgaiQyID0gcG9zOyBqJDIgPCBpJDc7KSB7XG4gICAgICAgICAgICBpZiAoY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKSkge1xuICAgICAgICAgICAgICBpZiAocG9zIDwgaiQyKSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaiQyKSk7IGF0ICs9IGlzUlRMOyB9XG4gICAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqJDI7XG4gICAgICAgICAgICAgIGZvciAoKytqJDI7IGokMiA8IGkkNyAmJiBjb3VudHNBc051bS50ZXN0KHR5cGVzW2okMl0pOyArK2okMikge31cbiAgICAgICAgICAgICAgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMiwgbnN0YXJ0LCBqJDIpKTtcbiAgICAgICAgICAgICAgYXQgKz0gaXNSVEw7XG4gICAgICAgICAgICAgIHBvcyA9IGokMjtcbiAgICAgICAgICAgIH0gZWxzZSB7ICsraiQyOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3MgPCBpJDcpIHsgb3JkZXIuc3BsaWNlKGF0LCAwLCBuZXcgQmlkaVNwYW4oMSwgcG9zLCBpJDcpKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09IFwibHRyXCIpIHtcbiAgICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL15cXHMrLykpKSB7XG4gICAgICAgICAgb3JkZXJbMF0uZnJvbSA9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnVuc2hpZnQobmV3IEJpZGlTcGFuKDAsIDAsIG1bMF0ubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxzdChvcmRlcikubGV2ZWwgPT0gMSAmJiAobSA9IHN0ci5tYXRjaCgvXFxzKyQvKSkpIHtcbiAgICAgICAgICBsc3Qob3JkZXIpLnRvIC09IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3RoLCBsZW4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09IFwicnRsXCIgPyBvcmRlci5yZXZlcnNlKCkgOiBvcmRlclxuICAgIH1cbiAgfSkoKTtcblxuICAvLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zXG4gIC8vIGZhbHNlIGZvciBsaW5lcyB0aGF0IGFyZSBmdWxseSBsZWZ0LXRvLXJpZ2h0LCBhbmQgYW4gYXJyYXkgb2ZcbiAgLy8gQmlkaVNwYW4gb2JqZWN0cyBvdGhlcndpc2UuXG4gIGZ1bmN0aW9uIGdldE9yZGVyKGxpbmUsIGRpcmVjdGlvbikge1xuICAgIHZhciBvcmRlciA9IGxpbmUub3JkZXI7XG4gICAgaWYgKG9yZGVyID09IG51bGwpIHsgb3JkZXIgPSBsaW5lLm9yZGVyID0gYmlkaU9yZGVyaW5nKGxpbmUudGV4dCwgZGlyZWN0aW9uKTsgfVxuICAgIHJldHVybiBvcmRlclxuICB9XG5cbiAgLy8gRVZFTlQgSEFORExJTkdcblxuICAvLyBMaWdodHdlaWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLFxuICAvLyByZWdpc3RlcmluZyBuYXRpdmUgRE9NIGhhbmRsZXJzLlxuXG4gIHZhciBub0hhbmRsZXJzID0gW107XG5cbiAgdmFyIG9uID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikge1xuICAgIGlmIChlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KSB7XG4gICAgICBlbWl0dGVyLmF0dGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGYpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWFwID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pO1xuICAgICAgbWFwW3R5cGVdID0gKG1hcFt0eXBlXSB8fCBub0hhbmRsZXJzKS5jb25jYXQoZik7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZW1pdHRlci5faGFuZGxlcnMgJiYgZW1pdHRlci5faGFuZGxlcnNbdHlwZV0gfHwgbm9IYW5kbGVyc1xuICB9XG5cbiAgZnVuY3Rpb24gb2ZmKGVtaXR0ZXIsIHR5cGUsIGYpIHtcbiAgICBpZiAoZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZW1pdHRlci5kZXRhY2hFdmVudCkge1xuICAgICAgZW1pdHRlci5kZXRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hcCA9IGVtaXR0ZXIuX2hhbmRsZXJzLCBhcnIgPSBtYXAgJiYgbWFwW3R5cGVdO1xuICAgICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleE9mKGFyciwgZik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgICAgIHsgbWFwW3R5cGVdID0gYXJyLnNsaWNlKDAsIGluZGV4KS5jb25jYXQoYXJyLnNsaWNlKGluZGV4ICsgMSkpOyB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7XG4gICAgdmFyIGhhbmRsZXJzID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSk7XG4gICAgaWYgKCFoYW5kbGVycy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7ICsraSkgeyBoYW5kbGVyc1tpXS5hcHBseShudWxsLCBhcmdzKTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSBldmVudHMgdGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnlcbiAgLy8gcmVnaXN0ZXJpbmcgYSAobm9uLURPTSkgaGFuZGxlciBvbiB0aGUgZWRpdG9yIGZvciB0aGUgZXZlbnQgbmFtZSxcbiAgLy8gYW5kIHByZXZlbnREZWZhdWx0LWluZyB0aGUgZXZlbnQgaW4gdGhhdCBoYW5kbGVyLlxuICBmdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHtcbiAgICBpZiAodHlwZW9mIGUgPT0gXCJzdHJpbmdcIilcbiAgICAgIHsgZSA9IHt0eXBlOiBlLCBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7IHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7IH19OyB9XG4gICAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTtcbiAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIHx8IGUuY29kZW1pcnJvcklnbm9yZVxuICB9XG5cbiAgZnVuY3Rpb24gc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pIHtcbiAgICB2YXIgYXJyID0gY20uX2hhbmRsZXJzICYmIGNtLl9oYW5kbGVycy5jdXJzb3JBY3Rpdml0eTtcbiAgICBpZiAoIWFycikgeyByZXR1cm4gfVxuICAgIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0gW10pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKSB7IGlmIChpbmRleE9mKHNldCwgYXJyW2ldKSA9PSAtMSlcbiAgICAgIHsgc2V0LnB1c2goYXJyW2ldKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNIYW5kbGVyKGVtaXR0ZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSkubGVuZ3RoID4gMFxuICB9XG5cbiAgLy8gQWRkIG9uIGFuZCBvZmYgbWV0aG9kcyB0byBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlLCB0byBtYWtlXG4gIC8vIHJlZ2lzdGVyaW5nIGV2ZW50cyBvbiBzdWNoIG9iamVjdHMgbW9yZSBjb252ZW5pZW50LlxuICBmdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHtcbiAgICBjdG9yLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvbih0aGlzLCB0eXBlLCBmKTt9O1xuICAgIGN0b3IucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uKHR5cGUsIGYpIHtvZmYodGhpcywgdHlwZSwgZik7fTtcbiAgfVxuXG4gIC8vIER1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIHN0aWxsIHN1cHBvcnQganVyYXNzaWMgSUUgdmVyc2lvbnMsIHNvbWVcbiAgLy8gY29tcGF0aWJpbGl0eSB3cmFwcGVycyBhcmUgbmVlZGVkLlxuXG4gIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkge1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7IGUucHJldmVudERlZmF1bHQoKTsgfVxuICAgIGVsc2UgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH1cbiAgfVxuICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7XG4gICAgaWYgKGUuc3RvcFByb3BhZ2F0aW9uKSB7IGUuc3RvcFByb3BhZ2F0aW9uKCk7IH1cbiAgICBlbHNlIHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlOyB9XG4gIH1cbiAgZnVuY3Rpb24gZV9kZWZhdWx0UHJldmVudGVkKGUpIHtcbiAgICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNlXG4gIH1cbiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9XG5cbiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnR9XG4gIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHtcbiAgICB2YXIgYiA9IGUud2hpY2g7XG4gICAgaWYgKGIgPT0gbnVsbCkge1xuICAgICAgaWYgKGUuYnV0dG9uICYgMSkgeyBiID0gMTsgfVxuICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSB7IGIgPSAzOyB9XG4gICAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDQpIHsgYiA9IDI7IH1cbiAgICB9XG4gICAgaWYgKG1hYyAmJiBlLmN0cmxLZXkgJiYgYiA9PSAxKSB7IGIgPSAzOyB9XG4gICAgcmV0dXJuIGJcbiAgfVxuXG4gIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wXG4gIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRoZXJlIGlzICpzb21lKiBraW5kIG9mIGRyYWctYW5kLWRyb3Agc3VwcG9ydCBpbiBJRTYtOCwgYnV0IElcbiAgICAvLyBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRpdiA9IGVsdCgnZGl2Jyk7XG4gICAgcmV0dXJuIFwiZHJhZ2dhYmxlXCIgaW4gZGl2IHx8IFwiZHJhZ0Ryb3BcIiBpbiBkaXZcbiAgfSgpO1xuXG4gIHZhciB6d3NwU3VwcG9ydGVkO1xuICBmdW5jdGlvbiB6ZXJvV2lkdGhFbGVtZW50KG1lYXN1cmUpIHtcbiAgICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7XG4gICAgICB2YXIgdGVzdCA9IGVsdChcInNwYW5cIiwgXCJcXHUyMDBiXCIpO1xuICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBbdGVzdCwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpXSkpO1xuICAgICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMClcbiAgICAgICAgeyB6d3NwU3VwcG9ydGVkID0gdGVzdC5vZmZzZXRXaWR0aCA8PSAxICYmIHRlc3Qub2Zmc2V0SGVpZ2h0ID4gMiAmJiAhKGllICYmIGllX3ZlcnNpb24gPCA4KTsgfVxuICAgIH1cbiAgICB2YXIgbm9kZSA9IHp3c3BTdXBwb3J0ZWQgPyBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKSA6XG4gICAgICBlbHQoXCJzcGFuXCIsIFwiXFx1MDBhMFwiLCBudWxsLCBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDFweDsgbWFyZ2luLXJpZ2h0OiAtMXB4XCIpO1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBcIlwiKTtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgLy8gRmVhdHVyZS1kZXRlY3QgSUUncyBjcnVtbXkgY2xpZW50IHJlY3QgcmVwb3J0aW5nIGZvciBiaWRpIHRleHRcbiAgdmFyIGJhZEJpZGlSZWN0cztcbiAgZnVuY3Rpb24gaGFzQmFkQmlkaVJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkQmlkaVJlY3RzICE9IG51bGwpIHsgcmV0dXJuIGJhZEJpZGlSZWN0cyB9XG4gICAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiQVxcdTA2MmVBXCIpKTtcbiAgICB2YXIgcjAgPSByYW5nZSh0eHQsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciByMSA9IHJhbmdlKHR4dCwgMSwgMikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSk7XG4gICAgaWYgKCFyMCB8fCByMC5sZWZ0ID09IHIwLnJpZ2h0KSB7IHJldHVybiBmYWxzZSB9IC8vIFNhZmFyaSByZXR1cm5zIG51bGwgaW4gc29tZSBjYXNlcyAoIzI3ODApXG4gICAgcmV0dXJuIGJhZEJpZGlSZWN0cyA9IChyMS5yaWdodCAtIHIwLnJpZ2h0IDwgMylcbiAgfVxuXG4gIC8vIFNlZSBpZiBcIlwiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW5cbiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLlxuICB2YXIgc3BsaXRMaW5lc0F1dG8gPSBcIlxcblxcbmJcIi5zcGxpdCgvXFxuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgdmFyIHBvcyA9IDAsIHJlc3VsdCA9IFtdLCBsID0gc3RyaW5nLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zIDw9IGwpIHtcbiAgICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKFwiXFxuXCIsIHBvcyk7XG4gICAgICBpZiAobmwgPT0gLTEpIHsgbmwgPSBzdHJpbmcubGVuZ3RoOyB9XG4gICAgICB2YXIgbGluZSA9IHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwgLSAxKSA9PSBcIlxcclwiID8gbmwgLSAxIDogbmwpO1xuICAgICAgdmFyIHJ0ID0gbGluZS5pbmRleE9mKFwiXFxyXCIpO1xuICAgICAgaWYgKHJ0ICE9IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUuc2xpY2UoMCwgcnQpKTtcbiAgICAgICAgcG9zICs9IHJ0ICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGxpbmUpO1xuICAgICAgICBwb3MgPSBubCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHN0cmluZy5zcGxpdCgvXFxyXFxuP3xcXG4vKTsgfTtcblxuICB2YXIgaGFzU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbiA/IGZ1bmN0aW9uICh0ZSkge1xuICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQgfVxuICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgfSA6IGZ1bmN0aW9uICh0ZSkge1xuICAgIHZhciByYW5nZTtcbiAgICB0cnkge3JhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9XG4gICAgY2F0Y2goZSkge31cbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKFwiU3RhcnRUb0VuZFwiLCByYW5nZSkgIT0gMFxuICB9O1xuXG4gIHZhciBoYXNDb3B5RXZlbnQgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBlID0gZWx0KFwiZGl2XCIpO1xuICAgIGlmIChcIm9uY29weVwiIGluIGUpIHsgcmV0dXJuIHRydWUgfVxuICAgIGUuc2V0QXR0cmlidXRlKFwib25jb3B5XCIsIFwicmV0dXJuO1wiKTtcbiAgICByZXR1cm4gdHlwZW9mIGUub25jb3B5ID09IFwiZnVuY3Rpb25cIlxuICB9KSgpO1xuXG4gIHZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7XG4gIGZ1bmN0aW9uIGhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpIHtcbiAgICBpZiAoYmFkWm9vbWVkUmVjdHMgIT0gbnVsbCkgeyByZXR1cm4gYmFkWm9vbWVkUmVjdHMgfVxuICAgIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBcInhcIikpO1xuICAgIHZhciBub3JtYWwgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBmcm9tUmFuZ2UgPSByYW5nZShub2RlLCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gYmFkWm9vbWVkUmVjdHMgPSBNYXRoLmFicyhub3JtYWwubGVmdCAtIGZyb21SYW5nZS5sZWZ0KSA+IDFcbiAgfVxuXG4gIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FXG4gIHZhciBtb2RlcyA9IHt9LCBtaW1lTW9kZXMgPSB7fTtcblxuICAvLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXNcbiAgLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseVxuICAvLyBsb2FkIGEgbW9kZS4gKFByZWZlcnJlZCBtZWNoYW5pc20gaXMgdGhlIHJlcXVpcmUvZGVmaW5lIGNhbGxzLilcbiAgZnVuY3Rpb24gZGVmaW5lTW9kZShuYW1lLCBtb2RlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKVxuICAgICAgeyBtb2RlLmRlcGVuZGVuY2llcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7IH1cbiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7XG4gIH1cblxuICBmdW5jdGlvbiBkZWZpbmVNSU1FKG1pbWUsIHNwZWMpIHtcbiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjO1xuICB9XG5cbiAgLy8gR2l2ZW4gYSBNSU1FIHR5cGUsIGEge25hbWUsIC4uLm9wdGlvbnN9IGNvbmZpZyBvYmplY3QsIG9yIGEgbmFtZVxuICAvLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC5cbiAgZnVuY3Rpb24gcmVzb2x2ZU1vZGUoc3BlYykge1xuICAgIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkge1xuICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTtcbiAgICB9IGVsc2UgaWYgKHNwZWMgJiYgdHlwZW9mIHNwZWMubmFtZSA9PSBcInN0cmluZ1wiICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZm91bmQgPSBtaW1lTW9kZXNbc3BlYy5uYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgZm91bmQgPT0gXCJzdHJpbmdcIikgeyBmb3VuZCA9IHtuYW1lOiBmb3VuZH07IH1cbiAgICAgIHNwZWMgPSBjcmVhdGVPYmooZm91bmQsIHNwZWMpO1xuICAgICAgc3BlYy5uYW1lID0gZm91bmQubmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCt4bWwkLy50ZXN0KHNwZWMpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZU1vZGUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCtqc29uJC8udGVzdChzcGVjKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24vanNvblwiKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIikgeyByZXR1cm4ge25hbWU6IHNwZWN9IH1cbiAgICBlbHNlIHsgcmV0dXJuIHNwZWMgfHwge25hbWU6IFwibnVsbFwifSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgc3BlYyAoYW55dGhpbmcgdGhhdCByZXNvbHZlTW9kZSBhY2NlcHRzKSwgZmluZCBhbmRcbiAgLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGdldE1vZGUob3B0aW9ucywgc3BlYykge1xuICAgIHNwZWMgPSByZXNvbHZlTW9kZShzcGVjKTtcbiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdO1xuICAgIGlmICghbWZhY3RvcnkpIHsgcmV0dXJuIGdldE1vZGUob3B0aW9ucywgXCJ0ZXh0L3BsYWluXCIpIH1cbiAgICB2YXIgbW9kZU9iaiA9IG1mYWN0b3J5KG9wdGlvbnMsIHNwZWMpO1xuICAgIGlmIChtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgICB2YXIgZXh0cyA9IG1vZGVFeHRlbnNpb25zW3NwZWMubmFtZV07XG4gICAgICBmb3IgKHZhciBwcm9wIGluIGV4dHMpIHtcbiAgICAgICAgaWYgKCFleHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1vZGVPYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsgbW9kZU9ialtcIl9cIiArIHByb3BdID0gbW9kZU9ialtwcm9wXTsgfVxuICAgICAgICBtb2RlT2JqW3Byb3BdID0gZXh0c1twcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kZU9iai5uYW1lID0gc3BlYy5uYW1lO1xuICAgIGlmIChzcGVjLmhlbHBlclR5cGUpIHsgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOyB9XG4gICAgaWYgKHNwZWMubW9kZVByb3BzKSB7IGZvciAodmFyIHByb3AkMSBpbiBzcGVjLm1vZGVQcm9wcylcbiAgICAgIHsgbW9kZU9ialtwcm9wJDFdID0gc3BlYy5tb2RlUHJvcHNbcHJvcCQxXTsgfSB9XG5cbiAgICByZXR1cm4gbW9kZU9ialxuICB9XG5cbiAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBhdHRhY2ggcHJvcGVydGllcyB0byBtb2RlIG9iamVjdHMgZnJvbVxuICAvLyBvdXRzaWRlIHRoZSBhY3R1YWwgbW9kZSBkZWZpbml0aW9uLlxuICB2YXIgbW9kZUV4dGVuc2lvbnMgPSB7fTtcbiAgZnVuY3Rpb24gZXh0ZW5kTW9kZShtb2RlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pO1xuICAgIGNvcHlPYmoocHJvcGVydGllcywgZXh0cyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUgPT09IHRydWUpIHsgcmV0dXJuIHN0YXRlIH1cbiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHsgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKSB9XG4gICAgdmFyIG5zdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHtcbiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTtcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgeyB2YWwgPSB2YWwuY29uY2F0KFtdKTsgfVxuICAgICAgbnN0YXRlW25dID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gbnN0YXRlXG4gIH1cblxuICAvLyBHaXZlbiBhIG1vZGUgYW5kIGEgc3RhdGUgKGZvciB0aGF0IG1vZGUpLCBmaW5kIHRoZSBpbm5lciBtb2RlIGFuZFxuICAvLyBzdGF0ZSBhdCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLlxuICBmdW5jdGlvbiBpbm5lck1vZGUobW9kZSwgc3RhdGUpIHtcbiAgICB2YXIgaW5mbztcbiAgICB3aGlsZSAobW9kZS5pbm5lck1vZGUpIHtcbiAgICAgIGluZm8gPSBtb2RlLmlubmVyTW9kZShzdGF0ZSk7XG4gICAgICBpZiAoIWluZm8gfHwgaW5mby5tb2RlID09IG1vZGUpIHsgYnJlYWsgfVxuICAgICAgc3RhdGUgPSBpbmZvLnN0YXRlO1xuICAgICAgbW9kZSA9IGluZm8ubW9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7XG4gICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZVxuICB9XG5cbiAgLy8gU1RSSU5HIFNUUkVBTVxuXG4gIC8vIEZlZCB0byB0aGUgbW9kZSBwYXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2VcbiAgLy8gcGFyc2VycyBtb3JlIHN1Y2NpbmN0LlxuXG4gIHZhciBTdHJpbmdTdHJlYW0gPSBmdW5jdGlvbihzdHJpbmcsIHRhYlNpemUsIGxpbmVPcmFjbGUpIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwO1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODtcbiAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7XG4gICAgdGhpcy5saW5lU3RhcnQgPSAwO1xuICAgIHRoaXMubGluZU9yYWNsZSA9IGxpbmVPcmFjbGU7XG4gIH07XG5cbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lb2wgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc29sID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnBvcyA9PSB0aGlzLmxpbmVTdGFydH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWR9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKVxuICAgICAgeyByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspIH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lYXQgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO1xuICAgIHZhciBvaztcbiAgICBpZiAodHlwZW9mIG1hdGNoID09IFwic3RyaW5nXCIpIHsgb2sgPSBjaCA9PSBtYXRjaDsgfVxuICAgIGVsc2UgeyBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOyB9XG4gICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNofVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFdoaWxlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0U3BhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgd2hpbGUgKC9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHsgKyt0aGlzLnBvczsgfVxuICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvRW5kID0gZnVuY3Rpb24gKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpO1xuICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWV9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFja1VwID0gZnVuY3Rpb24gKG4pIHt0aGlzLnBvcyAtPSBuO307XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY29sdW1uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7XG4gICAgICB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUsIHRoaXMubGFzdENvbHVtblBvcywgdGhpcy5sYXN0Q29sdW1uVmFsdWUpO1xuICAgICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5zdGFydDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGFzdENvbHVtblZhbHVlIC0gKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIG51bGwsIHRoaXMudGFiU2l6ZSkgLVxuICAgICAgKHRoaXMubGluZVN0YXJ0ID8gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMubGluZVN0YXJ0LCB0aGlzLnRhYlNpemUpIDogMClcbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uIChwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIGNhc2VkID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7IH07XG4gICAgICB2YXIgc3Vic3RyID0gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLCBwYXR0ZXJuLmxlbmd0aCk7XG4gICAgICBpZiAoY2FzZWQoc3Vic3RyKSA9PSBjYXNlZChwYXR0ZXJuKSkge1xuICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ID4gMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOyB9XG4gICAgICByZXR1cm4gbWF0Y2hcbiAgICB9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uICgpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyl9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmhpZGVGaXJzdENoYXJzID0gZnVuY3Rpb24gKG4sIGlubmVyKSB7XG4gICAgdGhpcy5saW5lU3RhcnQgKz0gbjtcbiAgICB0cnkgeyByZXR1cm4gaW5uZXIoKSB9XG4gICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUubG9va0FoZWFkKG4pXG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gICAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUuYmFzZVRva2VuKHRoaXMucG9zKVxuICB9O1xuXG4gIC8vIEZpbmQgdGhlIGxpbmUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBnZXRMaW5lKGRvYywgbikge1xuICAgIG4gLT0gZG9jLmZpcnN0O1xuICAgIGlmIChuIDwgMCB8fCBuID49IGRvYy5zaXplKSB7IHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIGxpbmUgXCIgKyAobiArIGRvYy5maXJzdCkgKyBcIiBpbiB0aGUgZG9jdW1lbnQuXCIpIH1cbiAgICB2YXIgY2h1bmsgPSBkb2M7XG4gICAgd2hpbGUgKCFjaHVuay5saW5lcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWsgfVxuICAgICAgICBuIC09IHN6O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2h1bmsubGluZXNbbl1cbiAgfVxuXG4gIC8vIEdldCB0aGUgcGFydCBvZiBhIGRvY3VtZW50IGJldHdlZW4gdHdvIHBvc2l0aW9ucywgYXMgYW4gYXJyYXkgb2ZcbiAgLy8gc3RyaW5ncy5cbiAgZnVuY3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgb3V0ID0gW10sIG4gPSBzdGFydC5saW5lO1xuICAgIGRvYy5pdGVyKHN0YXJ0LmxpbmUsIGVuZC5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciB0ZXh0ID0gbGluZS50ZXh0O1xuICAgICAgaWYgKG4gPT0gZW5kLmxpbmUpIHsgdGV4dCA9IHRleHQuc2xpY2UoMCwgZW5kLmNoKTsgfVxuICAgICAgaWYgKG4gPT0gc3RhcnQubGluZSkgeyB0ZXh0ID0gdGV4dC5zbGljZShzdGFydC5jaCk7IH1cbiAgICAgIG91dC5wdXNoKHRleHQpO1xuICAgICAgKytuO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXRcbiAgfVxuICAvLyBHZXQgdGhlIGxpbmVzIGJldHdlZW4gZnJvbSBhbmQgdG8sIGFzIGFycmF5IG9mIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8pIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZG9jLml0ZXIoZnJvbSwgdG8sIGZ1bmN0aW9uIChsaW5lKSB7IG91dC5wdXNoKGxpbmUudGV4dCk7IH0pOyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgdHJ1dGh5IHZhbHVlXG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgLy8gVXBkYXRlIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCBwcm9wYWdhdGluZyB0aGUgaGVpZ2h0IGNoYW5nZVxuICAvLyB1cHdhcmRzIHRvIHBhcmVudCBub2Rlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHtcbiAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0O1xuICAgIGlmIChkaWZmKSB7IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIHsgbi5oZWlnaHQgKz0gZGlmZjsgfSB9XG4gIH1cblxuICAvLyBHaXZlbiBhIGxpbmUgb2JqZWN0LCBmaW5kIGl0cyBsaW5lIG51bWJlciBieSB3YWxraW5nIHVwIHRocm91Z2hcbiAgLy8gaXRzIHBhcmVudCBsaW5rcy5cbiAgZnVuY3Rpb24gbGluZU5vKGxpbmUpIHtcbiAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTtcbiAgICBmb3IgKHZhciBjaHVuayA9IGN1ci5wYXJlbnQ7IGNodW5rOyBjdXIgPSBjaHVuaywgY2h1bmsgPSBjaHVuay5wYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7XG4gICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIHsgYnJlYWsgfVxuICAgICAgICBubyArPSBjaHVuay5jaGlsZHJlbltpXS5jaHVua1NpemUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vICsgY3VyLmZpcnN0XG4gIH1cblxuICAvLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodFxuICAvLyBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgdHJlZS5cbiAgZnVuY3Rpb24gbGluZUF0SGVpZ2h0KGNodW5rLCBoKSB7XG4gICAgdmFyIG4gPSBjaHVuay5maXJzdDtcbiAgICBvdXRlcjogZG8ge1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpJDFdLCBjaCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlciB9XG4gICAgICAgIGggLT0gY2g7XG4gICAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gblxuICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcylcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDtcbiAgICAgIGlmIChoIDwgbGgpIHsgYnJlYWsgfVxuICAgICAgaCAtPSBsaDtcbiAgICB9XG4gICAgcmV0dXJuIG4gKyBpXG4gIH1cblxuICBmdW5jdGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZX1cblxuICBmdW5jdGlvbiBsaW5lTnVtYmVyRm9yKG9wdGlvbnMsIGkpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbnMubGluZU51bWJlckZvcm1hdHRlcihpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIpKVxuICB9XG5cbiAgLy8gQSBQb3MgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBvc2l0aW9uIHdpdGhpbiB0aGUgdGV4dC5cbiAgZnVuY3Rpb24gUG9zKGxpbmUsIGNoLCBzdGlja3kpIHtcbiAgICBpZiAoIHN0aWNreSA9PT0gdm9pZCAwICkgc3RpY2t5ID0gbnVsbDtcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb3MpKSB7IHJldHVybiBuZXcgUG9zKGxpbmUsIGNoLCBzdGlja3kpIH1cbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIHRoaXMuY2ggPSBjaDtcbiAgICB0aGlzLnN0aWNreSA9IHN0aWNreTtcbiAgfVxuXG4gIC8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmVcbiAgLy8gbnVtYmVyIHdoZW4gYSBpcyBsZXNzLCBhbmQgYSBwb3NpdGl2ZSBudW1iZXIgb3RoZXJ3aXNlLlxuICBmdW5jdGlvbiBjbXAoYSwgYikgeyByZXR1cm4gYS5saW5lIC0gYi5saW5lIHx8IGEuY2ggLSBiLmNoIH1cblxuICBmdW5jdGlvbiBlcXVhbEN1cnNvclBvcyhhLCBiKSB7IHJldHVybiBhLnN0aWNreSA9PSBiLnN0aWNreSAmJiBjbXAoYSwgYikgPT0gMCB9XG5cbiAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIFBvcyh4LmxpbmUsIHguY2gpfVxuICBmdW5jdGlvbiBtYXhQb3MoYSwgYikgeyByZXR1cm4gY21wKGEsIGIpIDwgMCA/IGIgOiBhIH1cbiAgZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYiB9XG5cbiAgLy8gTW9zdCBvZiB0aGUgZXh0ZXJuYWwgQVBJIGNsaXBzIGdpdmVuIHBvc2l0aW9ucyB0byBtYWtlIHN1cmUgdGhleVxuICAvLyBhY3R1YWxseSBleGlzdCB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKX1cbiAgZnVuY3Rpb24gY2xpcFBvcyhkb2MsIHBvcykge1xuICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCkgeyByZXR1cm4gUG9zKGRvYy5maXJzdCwgMCkgfVxuICAgIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChwb3MubGluZSA+IGxhc3QpIHsgcmV0dXJuIFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpIH1cbiAgICByZXR1cm4gY2xpcFRvTGVuKHBvcywgZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0Lmxlbmd0aClcbiAgfVxuICBmdW5jdGlvbiBjbGlwVG9MZW4ocG9zLCBsaW5lbGVuKSB7XG4gICAgdmFyIGNoID0gcG9zLmNoO1xuICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikgeyByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKSB9XG4gICAgZWxzZSBpZiAoY2ggPCAwKSB7IHJldHVybiBQb3MocG9zLmxpbmUsIDApIH1cbiAgICBlbHNlIHsgcmV0dXJuIHBvcyB9XG4gIH1cbiAgZnVuY3Rpb24gY2xpcFBvc0FycmF5KGRvYywgYXJyYXkpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBvdXRbaV0gPSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOyB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgdmFyIFNhdmVkQ29udGV4dCA9IGZ1bmN0aW9uKHN0YXRlLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG4gIH07XG5cbiAgdmFyIENvbnRleHQgPSBmdW5jdGlvbihkb2MsIHN0YXRlLCBsaW5lLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLm1heExvb2tBaGVhZCA9IGxvb2tBaGVhZCB8fCAwO1xuICAgIHRoaXMuYmFzZVRva2VucyA9IG51bGw7XG4gICAgdGhpcy5iYXNlVG9rZW5Qb3MgPSAxO1xuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLmxvb2tBaGVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHRoaXMubGluZSArIG4pO1xuICAgIGlmIChsaW5lICE9IG51bGwgJiYgbiA+IHRoaXMubWF4TG9va0FoZWFkKSB7IHRoaXMubWF4TG9va0FoZWFkID0gbjsgfVxuICAgIHJldHVybiBsaW5lXG4gIH07XG5cbiAgQ29udGV4dC5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKG4pIHtcbiAgICBpZiAoIXRoaXMuYmFzZVRva2VucykgeyByZXR1cm4gbnVsbCB9XG4gICAgd2hpbGUgKHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvc10gPD0gbilcbiAgICAgIHsgdGhpcy5iYXNlVG9rZW5Qb3MgKz0gMjsgfVxuICAgIHZhciB0eXBlID0gdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zICsgMV07XG4gICAgcmV0dXJuIHt0eXBlOiB0eXBlICYmIHR5cGUucmVwbGFjZSgvKCB8XilvdmVybGF5IC4qLywgXCJcIiksXG4gICAgICAgICAgICBzaXplOiB0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdIC0gbn1cbiAgfTtcblxuICBDb250ZXh0LnByb3RvdHlwZS5uZXh0TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmxpbmUrKztcbiAgICBpZiAodGhpcy5tYXhMb29rQWhlYWQgPiAwKSB7IHRoaXMubWF4TG9va0FoZWFkLS07IH1cbiAgfTtcblxuICBDb250ZXh0LmZyb21TYXZlZCA9IGZ1bmN0aW9uIChkb2MsIHNhdmVkLCBsaW5lKSB7XG4gICAgaWYgKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkLnN0YXRlKSwgbGluZSwgc2F2ZWQubG9va0FoZWFkKSB9XG4gICAgZWxzZVxuICAgICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkKSwgbGluZSkgfVxuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbiAoY29weSkge1xuICAgIHZhciBzdGF0ZSA9IGNvcHkgIT09IGZhbHNlID8gY29weVN0YXRlKHRoaXMuZG9jLm1vZGUsIHRoaXMuc3RhdGUpIDogdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gdGhpcy5tYXhMb29rQWhlYWQgPiAwID8gbmV3IFNhdmVkQ29udGV4dChzdGF0ZSwgdGhpcy5tYXhMb29rQWhlYWQpIDogc3RhdGVcbiAgfTtcblxuXG4gIC8vIENvbXB1dGUgYSBzdHlsZSBhcnJheSAoYW4gYXJyYXkgc3RhcnRpbmcgd2l0aCBhIG1vZGUgZ2VuZXJhdGlvblxuICAvLyAtLSBmb3IgaW52YWxpZGF0aW9uIC0tIGZvbGxvd2VkIGJ5IHBhaXJzIG9mIGVuZCBwb3NpdGlvbnMgYW5kXG4gIC8vIHN0eWxlIHN0cmluZ3MpLCB3aGljaCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgdG9rZW5zIG9uIHRoZVxuICAvLyBsaW5lLlxuICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0LCBmb3JjZVRvRW5kKSB7XG4gICAgLy8gQSBzdHlsZXMgYXJyYXkgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbnVtYmVyIGlkZW50aWZ5aW5nIHRoZVxuICAgIC8vIG1vZGUvb3ZlcmxheXMgdGhhdCBpdCBpcyBiYXNlZCBvbiAoZm9yIGVhc3kgaW52YWxpZGF0aW9uKS5cbiAgICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307XG4gICAgLy8gQ29tcHV0ZSB0aGUgYmFzZSBhcnJheSBvZiBzdHlsZXNcbiAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIGNtLmRvYy5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkgeyByZXR1cm4gc3QucHVzaChlbmQsIHN0eWxlKTsgfSxcbiAgICAgICAgICAgIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKTtcbiAgICB2YXIgc3RhdGUgPSBjb250ZXh0LnN0YXRlO1xuXG4gICAgLy8gUnVuIG92ZXJsYXlzLCBhZGp1c3Qgc3R5bGUgYXJyYXkuXG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIG8gKSB7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlbnMgPSBzdDtcbiAgICAgIHZhciBvdmVybGF5ID0gY20uc3RhdGUub3ZlcmxheXNbb10sIGkgPSAxLCBhdCA9IDA7XG4gICAgICBjb250ZXh0LnN0YXRlID0gdHJ1ZTtcbiAgICAgIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgb3ZlcmxheS5tb2RlLCBjb250ZXh0LCBmdW5jdGlvbiAoZW5kLCBzdHlsZSkge1xuICAgICAgICB2YXIgc3RhcnQgPSBpO1xuICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXRcbiAgICAgICAgd2hpbGUgKGF0IDwgZW5kKSB7XG4gICAgICAgICAgdmFyIGlfZW5kID0gc3RbaV07XG4gICAgICAgICAgaWYgKGlfZW5kID4gZW5kKVxuICAgICAgICAgICAgeyBzdC5zcGxpY2UoaSwgMSwgZW5kLCBzdFtpKzFdLCBpX2VuZCk7IH1cbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0eWxlKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkge1xuICAgICAgICAgIHN0LnNwbGljZShzdGFydCwgaSAtIHN0YXJ0LCBlbmQsIFwib3ZlcmxheSBcIiArIHN0eWxlKTtcbiAgICAgICAgICBpID0gc3RhcnQgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAoOyBzdGFydCA8IGk7IHN0YXJ0ICs9IDIpIHtcbiAgICAgICAgICAgIHZhciBjdXIgPSBzdFtzdGFydCsxXTtcbiAgICAgICAgICAgIHN0W3N0YXJ0KzFdID0gKGN1ciA/IGN1ciArIFwiIFwiIDogXCJcIikgKyBcIm92ZXJsYXkgXCIgKyBzdHlsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIGxpbmVDbGFzc2VzKTtcbiAgICAgIGNvbnRleHQuc3RhdGUgPSBzdGF0ZTtcbiAgICAgIGNvbnRleHQuYmFzZVRva2VucyA9IG51bGw7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlblBvcyA9IDE7XG4gICAgfTtcblxuICAgIGZvciAodmFyIG8gPSAwOyBvIDwgY20uc3RhdGUub3ZlcmxheXMubGVuZ3RoOyArK28pIGxvb3AoIG8gKTtcblxuICAgIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW5lU3R5bGVzKGNtLCBsaW5lLCB1cGRhdGVGcm9udGllcikge1xuICAgIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikge1xuICAgICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBsaW5lTm8obGluZSkpO1xuICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggJiYgY29weVN0YXRlKGNtLmRvYy5tb2RlLCBjb250ZXh0LnN0YXRlKTtcbiAgICAgIHZhciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0KTtcbiAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoIXJlc2V0U3RhdGUpO1xuICAgICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzO1xuICAgICAgaWYgKHJlc3VsdC5jbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gcmVzdWx0LmNsYXNzZXM7IH1cbiAgICAgIGVsc2UgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgaWYgKHVwZGF0ZUZyb250aWVyID09PSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIpXG4gICAgICAgIHsgY20uZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGNtLmRvYy5tb2RlRnJvbnRpZXIsICsrY20uZG9jLmhpZ2hsaWdodEZyb250aWVyKTsgfVxuICAgIH1cbiAgICByZXR1cm4gbGluZS5zdHlsZXNcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbnRleHRCZWZvcmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWRvYy5tb2RlLnN0YXJ0U3RhdGUpIHsgcmV0dXJuIG5ldyBDb250ZXh0KGRvYywgdHJ1ZSwgbikgfVxuICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpO1xuICAgIHZhciBzYXZlZCA9IHN0YXJ0ID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBzdGFydCAtIDEpLnN0YXRlQWZ0ZXI7XG4gICAgdmFyIGNvbnRleHQgPSBzYXZlZCA/IENvbnRleHQuZnJvbVNhdmVkKGRvYywgc2F2ZWQsIHN0YXJ0KSA6IG5ldyBDb250ZXh0KGRvYywgc3RhcnRTdGF0ZShkb2MubW9kZSksIHN0YXJ0KTtcblxuICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgY29udGV4dCk7XG4gICAgICB2YXIgcG9zID0gY29udGV4dC5saW5lO1xuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gcG9zID09IG4gLSAxIHx8IHBvcyAlIDUgPT0gMCB8fCBwb3MgPj0gZGlzcGxheS52aWV3RnJvbSAmJiBwb3MgPCBkaXNwbGF5LnZpZXdUbyA/IGNvbnRleHQuc2F2ZSgpIDogbnVsbDtcbiAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICB9KTtcbiAgICBpZiAocHJlY2lzZSkgeyBkb2MubW9kZUZyb250aWVyID0gY29udGV4dC5saW5lOyB9XG4gICAgcmV0dXJuIGNvbnRleHRcbiAgfVxuXG4gIC8vIExpZ2h0d2VpZ2h0IGZvcm0gb2YgaGlnaGxpZ2h0IC0tIHByb2NlZWQgb3ZlciB0aGlzIGxpbmUgYW5kXG4gIC8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMgdGhhdFxuICAvLyBhcmVuJ3QgY3VycmVudGx5IHZpc2libGUuXG4gIGZ1bmN0aW9uIHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdGFydEF0KSB7XG4gICAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpO1xuICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3MgPSBzdGFydEF0IHx8IDA7XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBjYWxsQmxhbmtMaW5lKG1vZGUsIGNvbnRleHQuc3RhdGUpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7XG4gICAgaWYgKG1vZGUuYmxhbmtMaW5lKSB7IHJldHVybiBtb2RlLmJsYW5rTGluZShzdGF0ZSkgfVxuICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIH1cbiAgICB2YXIgaW5uZXIgPSBpbm5lck1vZGUobW9kZSwgc3RhdGUpO1xuICAgIGlmIChpbm5lci5tb2RlLmJsYW5rTGluZSkgeyByZXR1cm4gaW5uZXIubW9kZS5ibGFua0xpbmUoaW5uZXIuc3RhdGUpIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgaWYgKGlubmVyKSB7IGlubmVyWzBdID0gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKS5tb2RlOyB9XG4gICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHN0cmVhbS5wb3MgPiBzdHJlYW0uc3RhcnQpIHsgcmV0dXJuIHN0eWxlIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIiArIG1vZGUubmFtZSArIFwiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIilcbiAgfVxuXG4gIHZhciBUb2tlbiA9IGZ1bmN0aW9uKHN0cmVhbSwgdHlwZSwgc3RhdGUpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyB0aGlzLmVuZCA9IHN0cmVhbS5wb3M7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJlYW0uY3VycmVudCgpO1xuICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgbnVsbDtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH07XG5cbiAgLy8gVXRpbGl0eSBmb3IgZ2V0VG9rZW5BdCBhbmQgZ2V0TGluZVRva2Vuc1xuICBmdW5jdGlvbiB0YWtlVG9rZW4oY20sIHBvcywgcHJlY2lzZSwgYXNBcnJheSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIG1vZGUgPSBkb2MubW9kZSwgc3R5bGU7XG4gICAgcG9zID0gY2xpcFBvcyhkb2MsIHBvcyk7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLCBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKGxpbmUudGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KSwgdG9rZW5zO1xuICAgIGlmIChhc0FycmF5KSB7IHRva2VucyA9IFtdOyB9XG4gICAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHlsZSA9IHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUpO1xuICAgICAgaWYgKGFzQXJyYXkpIHsgdG9rZW5zLnB1c2gobmV3IFRva2VuKHN0cmVhbSwgc3R5bGUsIGNvcHlTdGF0ZShkb2MubW9kZSwgY29udGV4dC5zdGF0ZSkpKTsgfVxuICAgIH1cbiAgICByZXR1cm4gYXNBcnJheSA/IHRva2VucyA6IG5ldyBUb2tlbihzdHJlYW0sIHN0eWxlLCBjb250ZXh0LnN0YXRlKVxuICB9XG5cbiAgZnVuY3Rpb24gZXh0cmFjdExpbmVDbGFzc2VzKHR5cGUsIG91dHB1dCkge1xuICAgIGlmICh0eXBlKSB7IGZvciAoOzspIHtcbiAgICAgIHZhciBsaW5lQ2xhc3MgPSB0eXBlLm1hdGNoKC8oPzpefFxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcXFMrKS8pO1xuICAgICAgaWYgKCFsaW5lQ2xhc3MpIHsgYnJlYWsgfVxuICAgICAgdHlwZSA9IHR5cGUuc2xpY2UoMCwgbGluZUNsYXNzLmluZGV4KSArIHR5cGUuc2xpY2UobGluZUNsYXNzLmluZGV4ICsgbGluZUNsYXNzWzBdLmxlbmd0aCk7XG4gICAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/IFwiYmdDbGFzc1wiIDogXCJ0ZXh0Q2xhc3NcIjtcbiAgICAgIGlmIChvdXRwdXRbcHJvcF0gPT0gbnVsbClcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gPSBsaW5lQ2xhc3NbMl07IH1cbiAgICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cChcIig/Ol58XFxzKVwiICsgbGluZUNsYXNzWzJdICsgXCIoPzokfFxccylcIikpLnRlc3Qob3V0cHV0W3Byb3BdKSlcbiAgICAgICAgeyBvdXRwdXRbcHJvcF0gKz0gXCIgXCIgKyBsaW5lQ2xhc3NbMl07IH1cbiAgICB9IH1cbiAgICByZXR1cm4gdHlwZVxuICB9XG5cbiAgLy8gUnVuIHRoZSBnaXZlbiBtb2RlJ3MgcGFyc2VyIG92ZXIgYSBsaW5lLCBjYWxsaW5nIGYgZm9yIGVhY2ggdG9rZW4uXG4gIGZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIGNvbnRleHQsIGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7XG4gICAgdmFyIGZsYXR0ZW5TcGFucyA9IG1vZGUuZmxhdHRlblNwYW5zO1xuICAgIGlmIChmbGF0dGVuU3BhbnMgPT0gbnVsbCkgeyBmbGF0dGVuU3BhbnMgPSBjbS5vcHRpb25zLmZsYXR0ZW5TcGFuczsgfVxuICAgIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0ZXh0LCBjbS5vcHRpb25zLnRhYlNpemUsIGNvbnRleHQpLCBzdHlsZTtcbiAgICB2YXIgaW5uZXIgPSBjbS5vcHRpb25zLmFkZE1vZGVDbGFzcyAmJiBbbnVsbF07XG4gICAgaWYgKHRleHQgPT0gXCJcIikgeyBleHRyYWN0TGluZUNsYXNzZXMoY2FsbEJsYW5rTGluZShtb2RlLCBjb250ZXh0LnN0YXRlKSwgbGluZUNsYXNzZXMpOyB9XG4gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgIGlmIChzdHJlYW0ucG9zID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpIHtcbiAgICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7XG4gICAgICAgIGlmIChmb3JjZVRvRW5kKSB7IHByb2Nlc3NMaW5lKGNtLCB0ZXh0LCBjb250ZXh0LCBzdHJlYW0ucG9zKTsgfVxuICAgICAgICBzdHJlYW0ucG9zID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIHN0eWxlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZXh0cmFjdExpbmVDbGFzc2VzKHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIGNvbnRleHQuc3RhdGUsIGlubmVyKSwgbGluZUNsYXNzZXMpO1xuICAgICAgfVxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIHZhciBtTmFtZSA9IGlubmVyWzBdLm5hbWU7XG4gICAgICAgIGlmIChtTmFtZSkgeyBzdHlsZSA9IFwibS1cIiArIChzdHlsZSA/IG1OYW1lICsgXCIgXCIgKyBzdHlsZSA6IG1OYW1lKTsgfVxuICAgICAgfVxuICAgICAgaWYgKCFmbGF0dGVuU3BhbnMgfHwgY3VyU3R5bGUgIT0gc3R5bGUpIHtcbiAgICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgICAgY3VyU3RhcnQgPSBNYXRoLm1pbihzdHJlYW0uc3RhcnQsIGN1clN0YXJ0ICsgNTAwMCk7XG4gICAgICAgICAgZihjdXJTdGFydCwgY3VyU3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGN1clN0eWxlID0gc3R5bGU7XG4gICAgICB9XG4gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICAgIH1cbiAgICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0ucG9zKSB7XG4gICAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxvbmdlciB0aGFuIDU3NDQ0XG4gICAgICAvLyBjaGFyYWN0ZXJzLCBhbmQgcmV0dXJucyBpbmFjY3VyYXRlIG1lYXN1cmVtZW50cyBpbiBub2Rlc1xuICAgICAgLy8gc3RhcnRpbmcgYXJvdW5kIDUwMDAgY2hhcnMuXG4gICAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3VyU3RhcnQgKyA1MDAwKTtcbiAgICAgIGYocG9zLCBjdXJTdHlsZSk7XG4gICAgICBjdXJTdGFydCA9IHBvcztcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG9cbiAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYVxuICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZVxuICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0b1xuICAvLyBwYXJzZSBjb3JyZWN0bHkuXG4gIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUoY20sIG4sIHByZWNpc2UpIHtcbiAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lLCBkb2MgPSBjbS5kb2M7XG4gICAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJNb2RlID8gMTAwMCA6IDEwMCk7XG4gICAgZm9yICh2YXIgc2VhcmNoID0gbjsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkge1xuICAgICAgaWYgKHNlYXJjaCA8PSBkb2MuZmlyc3QpIHsgcmV0dXJuIGRvYy5maXJzdCB9XG4gICAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2ggLSAxKSwgYWZ0ZXIgPSBsaW5lLnN0YXRlQWZ0ZXI7XG4gICAgICBpZiAoYWZ0ZXIgJiYgKCFwcmVjaXNlIHx8IHNlYXJjaCArIChhZnRlciBpbnN0YW5jZW9mIFNhdmVkQ29udGV4dCA/IGFmdGVyLmxvb2tBaGVhZCA6IDApIDw9IGRvYy5tb2RlRnJvbnRpZXIpKVxuICAgICAgICB7IHJldHVybiBzZWFyY2ggfVxuICAgICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpO1xuICAgICAgaWYgKG1pbmxpbmUgPT0gbnVsbCB8fCBtaW5pbmRlbnQgPiBpbmRlbnRlZCkge1xuICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTtcbiAgICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaW5saW5lXG4gIH1cblxuICBmdW5jdGlvbiByZXRyZWF0RnJvbnRpZXIoZG9jLCBuKSB7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWluKGRvYy5tb2RlRnJvbnRpZXIsIG4pO1xuICAgIGlmIChkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBuIC0gMTApIHsgcmV0dXJuIH1cbiAgICB2YXIgc3RhcnQgPSBkb2MuZmlyc3Q7XG4gICAgZm9yICh2YXIgbGluZSA9IG4gLSAxOyBsaW5lID4gc3RhcnQ7IGxpbmUtLSkge1xuICAgICAgdmFyIHNhdmVkID0gZ2V0TGluZShkb2MsIGxpbmUpLnN0YXRlQWZ0ZXI7XG4gICAgICAvLyBjaGFuZ2UgaXMgb24gM1xuICAgICAgLy8gc3RhdGUgb24gbGluZSAxIGxvb2tlZCBhaGVhZCAyIC0tIHNvIHNhdyAzXG4gICAgICAvLyB0ZXN0IDEgKyAyIDwgMyBzaG91bGQgY292ZXIgdGhpc1xuICAgICAgaWYgKHNhdmVkICYmICghKHNhdmVkIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0KSB8fCBsaW5lICsgc2F2ZWQubG9va0FoZWFkIDwgbikpIHtcbiAgICAgICAgc3RhcnQgPSBsaW5lICsgMTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jLmhpZ2hsaWdodEZyb250aWVyID0gTWF0aC5taW4oZG9jLmhpZ2hsaWdodEZyb250aWVyLCBzdGFydCk7XG4gIH1cblxuICAvLyBPcHRpbWl6ZSBzb21lIGNvZGUgd2hlbiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IHVzZWQuXG4gIHZhciBzYXdSZWFkT25seVNwYW5zID0gZmFsc2UsIHNhd0NvbGxhcHNlZFNwYW5zID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gc2VlUmVhZE9ubHlTcGFucygpIHtcbiAgICBzYXdSZWFkT25seVNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlZUNvbGxhcHNlZFNwYW5zKCkge1xuICAgIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRFWFRNQVJLRVIgU1BBTlNcblxuICBmdW5jdGlvbiBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHtcbiAgICB0aGlzLm1hcmtlciA9IG1hcmtlcjtcbiAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87XG4gIH1cblxuICAvLyBTZWFyY2ggYW4gYXJyYXkgb2Ygc3BhbnMgZm9yIGEgc3BhbiBtYXRjaGluZyB0aGUgZ2l2ZW4gbWFya2VyLlxuICBmdW5jdGlvbiBnZXRNYXJrZWRTcGFuRm9yKHNwYW5zLCBtYXJrZXIpIHtcbiAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLm1hcmtlciA9PSBtYXJrZXIpIHsgcmV0dXJuIHNwYW4gfVxuICAgIH0gfVxuICB9XG4gIC8vIFJlbW92ZSBhIHNwYW4gZnJvbSBhbiBhcnJheSwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBubyBzcGFucyBhcmVcbiAgLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5lcyB3aXRob3V0IHNwYW5zKS5cbiAgZnVuY3Rpb24gcmVtb3ZlTWFya2VkU3BhbihzcGFucywgc3Bhbikge1xuICAgIHZhciByO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IGlmIChzcGFuc1tpXSAhPSBzcGFuKSB7IChyIHx8IChyID0gW10pKS5wdXNoKHNwYW5zW2ldKTsgfSB9XG4gICAgcmV0dXJuIHJcbiAgfVxuICAvLyBBZGQgYSBzcGFuIHRvIGEgbGluZS5cbiAgZnVuY3Rpb24gYWRkTWFya2VkU3BhbihsaW5lLCBzcGFuKSB7XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDogW3NwYW5dO1xuICAgIHNwYW4ubWFya2VyLmF0dGFjaExpbmUobGluZSk7XG4gIH1cblxuICAvLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIFRoZXNlIGZ1bmN0aW9ucyBjdXQgYW4gYXJyYXkgb2Ygc3BhbnMgYXQgYSBnaXZlblxuICAvLyBjaGFyYWN0ZXIgcG9zaXRpb24sIHJldHVybmluZyBhbiBhcnJheSBvZiByZW1haW5pbmcgY2h1bmtzIChvclxuICAvLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1haW5zKS5cbiAgZnVuY3Rpb24gbWFya2VkU3BhbnNCZWZvcmUob2xkLCBzdGFydENoLCBpc0luc2VydCkge1xuICAgIHZhciBudztcbiAgICBpZiAob2xkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IG9sZFtpXSwgbWFya2VyID0gc3Bhbi5tYXJrZXI7XG4gICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IHN0YXJ0Q2ggOiBzcGFuLmZyb20gPCBzdGFydENoKTtcbiAgICAgIGlmIChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7XG4gICAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gc3RhcnRDaCA6IHNwYW4udG8gPiBzdGFydENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8pKTtcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gbndcbiAgfVxuICBmdW5jdGlvbiBtYXJrZWRTcGFuc0FmdGVyKG9sZCwgZW5kQ2gsIGlzSW5zZXJ0KSB7XG4gICAgdmFyIG53O1xuICAgIGlmIChvbGQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjtcbiAgICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gZW5kQ2ggOiBzcGFuLnRvID4gZW5kQ2gpO1xuICAgICAgaWYgKGVuZHNBZnRlciB8fCBzcGFuLmZyb20gPT0gZW5kQ2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHtcbiAgICAgICAgdmFyIHN0YXJ0c0JlZm9yZSA9IHNwYW4uZnJvbSA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IHNwYW4uZnJvbSA8PSBlbmRDaCA6IHNwYW4uZnJvbSA8IGVuZENoKVxuICAgICAgICA7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHN0YXJ0c0JlZm9yZSA/IG51bGwgOiBzcGFuLmZyb20gLSBlbmRDaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuLnRvID09IG51bGwgPyBudWxsIDogc3Bhbi50byAtIGVuZENoKSk7XG4gICAgICB9XG4gICAgfSB9XG4gICAgcmV0dXJuIG53XG4gIH1cblxuICAvLyBHaXZlbiBhIGNoYW5nZSBvYmplY3QsIGNvbXB1dGUgdGhlIG5ldyBzZXQgb2YgbWFya2VyIHNwYW5zIHRoYXRcbiAgLy8gY292ZXIgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIGNoYW5nZSB0b29rIHBsYWNlLiBSZW1vdmVzIHNwYW5zXG4gIC8vIGVudGlyZWx5IHdpdGhpbiB0aGUgY2hhbmdlLCByZWNvbm5lY3RzIHNwYW5zIGJlbG9uZ2luZyB0byB0aGVcbiAgLy8gc2FtZSBtYXJrZXIgdGhhdCBhcHBlYXIgb24gYm90aCBzaWRlcyBvZiB0aGUgY2hhbmdlLCBhbmQgY3V0cyBvZmZcbiAgLy8gc3BhbnMgcGFydGlhbGx5IHdpdGhpbiB0aGUgY2hhbmdlLiBSZXR1cm5zIGFuIGFycmF5IG9mIHNwYW5cbiAgLy8gYXJyYXlzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBpbiAoYWZ0ZXIpIHRoZSBjaGFuZ2UuXG4gIGZ1bmN0aW9uIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIHtcbiAgICBpZiAoY2hhbmdlLmZ1bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFucztcbiAgICB2YXIgb2xkTGFzdCA9IGlzTGluZShkb2MsIGNoYW5nZS50by5saW5lKSAmJiBnZXRMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgIGlmICghb2xkRmlyc3QgJiYgIW9sZExhc3QpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7XG4gICAgLy8gR2V0IHRoZSBzcGFucyB0aGF0ICdzdGljayBvdXQnIG9uIGJvdGggc2lkZXNcbiAgICB2YXIgZmlyc3QgPSBtYXJrZWRTcGFuc0JlZm9yZShvbGRGaXJzdCwgc3RhcnRDaCwgaXNJbnNlcnQpO1xuICAgIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNlcnQpO1xuXG4gICAgLy8gTmV4dCwgbWVyZ2UgdGhvc2UgdHdvIGVuZHNcbiAgICB2YXIgc2FtZUxpbmUgPSBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSwgb2Zmc2V0ID0gbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoc2FtZUxpbmUgPyBzdGFydENoIDogMCk7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAvLyBGaXggdXAgLnRvIHByb3BlcnRpZXMgb2YgZmlyc3RcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTtcbiAgICAgICAgaWYgKHNwYW4udG8gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCA9IGdldE1hcmtlZFNwYW5Gb3IobGFzdCwgc3Bhbi5tYXJrZXIpO1xuICAgICAgICAgIGlmICghZm91bmQpIHsgc3Bhbi50byA9IHN0YXJ0Q2g7IH1cbiAgICAgICAgICBlbHNlIGlmIChzYW1lTGluZSkgeyBzcGFuLnRvID0gZm91bmQudG8gPT0gbnVsbCA/IG51bGwgOiBmb3VuZC50byArIG9mZnNldDsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsYXN0KSB7XG4gICAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFzdCAob3IgbW92ZSB0aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSlcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGxhc3QubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgc3BhbiQxID0gbGFzdFtpJDFdO1xuICAgICAgICBpZiAoc3BhbiQxLnRvICE9IG51bGwpIHsgc3BhbiQxLnRvICs9IG9mZnNldDsgfVxuICAgICAgICBpZiAoc3BhbiQxLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBmb3VuZCQxID0gZ2V0TWFya2VkU3BhbkZvcihmaXJzdCwgc3BhbiQxLm1hcmtlcik7XG4gICAgICAgICAgaWYgKCFmb3VuZCQxKSB7XG4gICAgICAgICAgICBzcGFuJDEuZnJvbSA9IG9mZnNldDtcbiAgICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3BhbiQxLmZyb20gKz0gb2Zmc2V0O1xuICAgICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgd2UgZGlkbid0IGNyZWF0ZSBhbnkgemVyby1sZW5ndGggc3BhbnNcbiAgICBpZiAoZmlyc3QpIHsgZmlyc3QgPSBjbGVhckVtcHR5U3BhbnMoZmlyc3QpOyB9XG4gICAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgeyBsYXN0ID0gY2xlYXJFbXB0eVNwYW5zKGxhc3QpOyB9XG5cbiAgICB2YXIgbmV3TWFya2VycyA9IFtmaXJzdF07XG4gICAgaWYgKCFzYW1lTGluZSkge1xuICAgICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zXG4gICAgICB2YXIgZ2FwID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMiwgZ2FwTWFya2VycztcbiAgICAgIGlmIChnYXAgPiAwICYmIGZpcnN0KVxuICAgICAgICB7IGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IGZpcnN0Lmxlbmd0aDsgKytpJDIpXG4gICAgICAgICAgeyBpZiAoZmlyc3RbaSQyXS50byA9PSBudWxsKVxuICAgICAgICAgICAgeyAoZ2FwTWFya2VycyB8fCAoZ2FwTWFya2VycyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihmaXJzdFtpJDJdLm1hcmtlciwgbnVsbCwgbnVsbCkpOyB9IH0gfVxuICAgICAgZm9yICh2YXIgaSQzID0gMDsgaSQzIDwgZ2FwOyArK2kkMylcbiAgICAgICAgeyBuZXdNYXJrZXJzLnB1c2goZ2FwTWFya2Vycyk7IH1cbiAgICAgIG5ld01hcmtlcnMucHVzaChsYXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01hcmtlcnNcbiAgfVxuXG4gIC8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFyV2hlbkVtcHR5XG4gIC8vIG9wdGlvbiBvZiBmYWxzZS5cbiAgZnVuY3Rpb24gY2xlYXJFbXB0eVNwYW5zKHNwYW5zKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCAmJiBzcGFuLmZyb20gPT0gc3Bhbi50byAmJiBzcGFuLm1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgICAgIHsgc3BhbnMuc3BsaWNlKGktLSwgMSk7IH1cbiAgICB9XG4gICAgaWYgKCFzcGFucy5sZW5ndGgpIHsgcmV0dXJuIG51bGwgfVxuICAgIHJldHVybiBzcGFuc1xuICB9XG5cbiAgLy8gVXNlZCB0byAnY2xpcCcgb3V0IHJlYWRPbmx5IHJhbmdlcyB3aGVuIG1ha2luZyBhIGNoYW5nZS5cbiAgZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykge1xuICAgIHZhciBtYXJrZXJzID0gbnVsbDtcbiAgICBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBtYXJrID0gbGluZS5tYXJrZWRTcGFuc1tpXS5tYXJrZXI7XG4gICAgICAgIGlmIChtYXJrLnJlYWRPbmx5ICYmICghbWFya2VycyB8fCBpbmRleE9mKG1hcmtlcnMsIG1hcmspID09IC0xKSlcbiAgICAgICAgICB7IChtYXJrZXJzIHx8IChtYXJrZXJzID0gW10pKS5wdXNoKG1hcmspOyB9XG4gICAgICB9IH1cbiAgICB9KTtcbiAgICBpZiAoIW1hcmtlcnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBwYXJ0cyA9IFt7ZnJvbTogZnJvbSwgdG86IHRvfV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFydHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIHAgPSBwYXJ0c1tqXTtcbiAgICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIHsgY29udGludWUgfVxuICAgICAgICB2YXIgbmV3UGFydHMgPSBbaiwgMV0sIGRmcm9tID0gY21wKHAuZnJvbSwgbS5mcm9tKSwgZHRvID0gY21wKHAudG8sIG0udG8pO1xuICAgICAgICBpZiAoZGZyb20gPCAwIHx8ICFtay5pbmNsdXNpdmVMZWZ0ICYmICFkZnJvbSlcbiAgICAgICAgICB7IG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwgdG86IG0uZnJvbX0pOyB9XG4gICAgICAgIGlmIChkdG8gPiAwIHx8ICFtay5pbmNsdXNpdmVSaWdodCAmJiAhZHRvKVxuICAgICAgICAgIHsgbmV3UGFydHMucHVzaCh7ZnJvbTogbS50bywgdG86IHAudG99KTsgfVxuICAgICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMsIG5ld1BhcnRzKTtcbiAgICAgICAgaiArPSBuZXdQYXJ0cy5sZW5ndGggLSAzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydHNcbiAgfVxuXG4gIC8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS5cbiAgZnVuY3Rpb24gZGV0YWNoTWFya2VkU3BhbnMobGluZSkge1xuICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgaWYgKCFzcGFucykgeyByZXR1cm4gfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgICB7IHNwYW5zW2ldLm1hcmtlci5kZXRhY2hMaW5lKGxpbmUpOyB9XG4gICAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gYXR0YWNoTWFya2VkU3BhbnMobGluZSwgc3BhbnMpIHtcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSlcbiAgICAgIHsgc3BhbnNbaV0ubWFya2VyLmF0dGFjaExpbmUobGluZSk7IH1cbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7XG4gIH1cblxuICAvLyBIZWxwZXJzIHVzZWQgd2hlbiBjb21wdXRpbmcgd2hpY2ggb3ZlcmxhcHBpbmcgY29sbGFwc2VkIHNwYW5cbiAgLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLlxuICBmdW5jdGlvbiBleHRyYUxlZnQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IC0xIDogMCB9XG4gIGZ1bmN0aW9uIGV4dHJhUmlnaHQobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyAxIDogMCB9XG5cbiAgLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBzZWRcbiAgLy8gc3BhbnMgaXMgbGFyZ2VyIChhbmQgdGh1cyBpbmNsdWRlcyB0aGUgb3RoZXIpLiBGYWxscyBiYWNrIHRvXG4gIC8vIGNvbXBhcmluZyBpZHMgd2hlbiB0aGUgc3BhbnMgY292ZXIgZXhhY3RseSB0aGUgc2FtZSByYW5nZS5cbiAgZnVuY3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoYSwgYikge1xuICAgIHZhciBsZW5EaWZmID0gYS5saW5lcy5sZW5ndGggLSBiLmxpbmVzLmxlbmd0aDtcbiAgICBpZiAobGVuRGlmZiAhPSAwKSB7IHJldHVybiBsZW5EaWZmIH1cbiAgICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7XG4gICAgdmFyIGZyb21DbXAgPSBjbXAoYVBvcy5mcm9tLCBiUG9zLmZyb20pIHx8IGV4dHJhTGVmdChhKSAtIGV4dHJhTGVmdChiKTtcbiAgICBpZiAoZnJvbUNtcCkgeyByZXR1cm4gLWZyb21DbXAgfVxuICAgIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTtcbiAgICBpZiAodG9DbXApIHsgcmV0dXJuIHRvQ21wIH1cbiAgICByZXR1cm4gYi5pZCAtIGEuaWRcbiAgfVxuXG4gIC8vIEZpbmQgb3V0IHdoZXRoZXIgYSBsaW5lIGVuZHMgb3Igc3RhcnRzIGluIGEgY29sbGFwc2VkIHNwYW4uIElmXG4gIC8vIHNvLCByZXR1cm4gdGhlIG1hcmtlciBmb3IgdGhhdCBzcGFuLlxuICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7XG4gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZvdW5kO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgc3AgPSAodm9pZCAwKSwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gc3BzW2ldO1xuICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHN0YXJ0ID8gc3AuZnJvbSA6IHNwLnRvKSA9PSBudWxsICYmXG4gICAgICAgICAgKCFmb3VuZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhmb3VuZCwgc3AubWFya2VyKSA8IDApKVxuICAgICAgICB7IGZvdW5kID0gc3AubWFya2VyOyB9XG4gICAgfSB9XG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0U3RhcnQobGluZSkgeyByZXR1cm4gY29sbGFwc2VkU3BhbkF0U2lkZShsaW5lLCB0cnVlKSB9XG4gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIGZhbHNlKSB9XG5cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkFyb3VuZChsaW5lLCBjaCkge1xuICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDtcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3AuZnJvbSA9PSBudWxsIHx8IHNwLmZyb20gPCBjaCkgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBjaCkgJiZcbiAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpIHsgZm91bmQgPSBzcC5tYXJrZXI7IH1cbiAgICB9IH1cbiAgICByZXR1cm4gZm91bmRcbiAgfVxuXG4gIC8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBzZWQgc3BhbiB0aGF0IHBhcnRpYWxseVxuICAvLyBvdmVybGFwcyAoY292ZXJzIHRoZSBzdGFydCBvciBlbmQsIGJ1dCBub3QgYm90aCkgb2YgYSBuZXcgc3Bhbi5cbiAgLy8gU3VjaCBvdmVybGFwIGlzIG5vdCBhbGxvd2VkLlxuICBmdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgbGluZU5vLCBmcm9tLCB0bywgbWFya2VyKSB7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU5vKTtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoIXNwLm1hcmtlci5jb2xsYXBzZWQpIHsgY29udGludWUgfVxuICAgICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7XG4gICAgICB2YXIgZnJvbUNtcCA9IGNtcChmb3VuZC5mcm9tLCBmcm9tKSB8fCBleHRyYUxlZnQoc3AubWFya2VyKSAtIGV4dHJhTGVmdChtYXJrZXIpO1xuICAgICAgdmFyIHRvQ21wID0gY21wKGZvdW5kLnRvLCB0bykgfHwgZXh0cmFSaWdodChzcC5tYXJrZXIpIC0gZXh0cmFSaWdodChtYXJrZXIpO1xuICAgICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChmcm9tQ21wIDw9IDAgJiYgKHNwLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBtYXJrZXIuaW5jbHVzaXZlTGVmdCA/IGNtcChmb3VuZC50bywgZnJvbSkgPj0gMCA6IGNtcChmb3VuZC50bywgZnJvbSkgPiAwKSB8fFxuICAgICAgICAgIGZyb21DbXAgPj0gMCAmJiAoc3AubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gY21wKGZvdW5kLmZyb20sIHRvKSA8PSAwIDogY21wKGZvdW5kLmZyb20sIHRvKSA8IDApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuXG4gIC8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRpbmcsIGZvclxuICAvLyBleGFtcGxlLCBjYW4gY2F1c2UgbXVsdGlwbGUgbG9naWNhbCBsaW5lcyB0byBhcHBlYXIgb24gdGhlIHNhbWVcbiAgLy8gdmlzdWFsIGxpbmUuIFRoaXMgZmluZHMgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZVxuICAvLyBnaXZlbiBsaW5lIGlzIHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLlxuICBmdW5jdGlvbiB2aXN1YWxMaW5lKGxpbmUpIHtcbiAgICB2YXIgbWVyZ2VkO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKC0xLCB0cnVlKS5saW5lOyB9XG4gICAgcmV0dXJuIGxpbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVFbmQobGluZSkge1xuICAgIHZhciBtZXJnZWQ7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSlcbiAgICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBsb2dpY2FsIGxpbmVzIHRoYXQgY29udGludWUgdGhlIHZpc3VhbCBsaW5lXG4gIC8vIHN0YXJ0ZWQgYnkgdGhlIGFyZ3VtZW50LCBvciB1bmRlZmluZWQgaWYgdGhlcmUgYXJlIG5vIHN1Y2ggbGluZXMuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkge1xuICAgIHZhciBtZXJnZWQsIGxpbmVzO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpIHtcbiAgICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lXG4gICAgICA7KGxpbmVzIHx8IChsaW5lcyA9IFtdKSkucHVzaChsaW5lKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgdmlzdWFsIGxpbmUgdGhhdCB0aGVcbiAgLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZU5vKGRvYywgbGluZU4pIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIHZpcyA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgaWYgKGxpbmUgPT0gdmlzKSB7IHJldHVybiBsaW5lTiB9XG4gICAgcmV0dXJuIGxpbmVObyh2aXMpXG4gIH1cblxuICAvLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRlclxuICAvLyB0aGUgZ2l2ZW4gbGluZS5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZE5vKGRvYywgbGluZU4pIHtcbiAgICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gbGluZU4gfVxuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgbWVyZ2VkO1xuICAgIGlmICghbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHsgcmV0dXJuIGxpbmVOIH1cbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKVxuICAgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsgfVxuICAgIHJldHVybiBsaW5lTm8obGluZSkgKyAxXG4gIH1cblxuICAvLyBDb21wdXRlIHdoZXRoZXIgYSBsaW5lIGlzIGhpZGRlbi4gTGluZXMgY291bnQgYXMgaGlkZGVuIHdoZW4gdGhleVxuICAvLyBhcmUgcGFydCBvZiBhIHZpc3VhbCBsaW5lIHRoYXQgc3RhcnRzIHdpdGggYW5vdGhlciBsaW5lLCBvciB3aGVuXG4gIC8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29sbGFwc2VkLCBub24td2lkZ2V0IHNwYW4uXG4gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpIHtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoc3BzKSB7IGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgICBzcCA9IHNwc1tpXTtcbiAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmIChzcC5tYXJrZXIud2lkZ2V0Tm9kZSkgeyBjb250aW51ZSB9XG4gICAgICBpZiAoc3AuZnJvbSA9PSAwICYmIHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0ICYmIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9IH1cbiAgfVxuICBmdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHtcbiAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7XG4gICAgICB2YXIgZW5kID0gc3Bhbi5tYXJrZXIuZmluZCgxLCB0cnVlKTtcbiAgICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZC5saW5lLCBnZXRNYXJrZWRTcGFuRm9yKGVuZC5saW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpXG4gICAgfVxuICAgIGlmIChzcGFuLm1hcmtlci5pbmNsdXNpdmVSaWdodCAmJiBzcGFuLnRvID09IGxpbmUudGV4dC5sZW5ndGgpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgICBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gbGluZS5tYXJrZWRTcGFuc1tpXTtcbiAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiZcbiAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCBzcC50byAhPSBzcGFuLmZyb20pICYmXG4gICAgICAgICAgKHNwLm1hcmtlci5pbmNsdXNpdmVMZWZ0IHx8IHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0KSAmJlxuICAgICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuXG4gIGZ1bmN0aW9uIGhlaWdodEF0TGluZShsaW5lT2JqKSB7XG4gICAgbGluZU9iaiA9IHZpc3VhbExpbmUobGluZU9iaik7XG5cbiAgICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVuay5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXTtcbiAgICAgIGlmIChsaW5lID09IGxpbmVPYmopIHsgYnJlYWsgfVxuICAgICAgZWxzZSB7IGggKz0gbGluZS5oZWlnaHQ7IH1cbiAgICB9XG4gICAgZm9yICh2YXIgcCA9IGNodW5rLnBhcmVudDsgcDsgY2h1bmsgPSBwLCBwID0gY2h1bmsucGFyZW50KSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwLmNoaWxkcmVuLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgICAgdmFyIGN1ciA9IHAuY2hpbGRyZW5baSQxXTtcbiAgICAgICAgaWYgKGN1ciA9PSBjaHVuaykgeyBicmVhayB9XG4gICAgICAgIGVsc2UgeyBoICs9IGN1ci5oZWlnaHQ7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50XG4gIC8vIGNvbGxhcHNlZCByYW5nZXMgKHNlZSBtYXJrVGV4dCkgdGhhdCBtaWdodCBoaWRlIHBhcnRzLCBhbmQgam9pblxuICAvLyBvdGhlciBsaW5lcyBvbnRvIGl0LlxuICBmdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHtcbiAgICBpZiAobGluZS5oZWlnaHQgPT0gMCkgeyByZXR1cm4gMCB9XG4gICAgdmFyIGxlbiA9IGxpbmUudGV4dC5sZW5ndGgsIG1lcmdlZCwgY3VyID0gbGluZTtcbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7XG4gICAgICBjdXIgPSBmb3VuZC5mcm9tLmxpbmU7XG4gICAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoO1xuICAgIH1cbiAgICBjdXIgPSBsaW5lO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkge1xuICAgICAgdmFyIGZvdW5kJDEgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTtcbiAgICAgIGxlbiAtPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZCQxLmZyb20uY2g7XG4gICAgICBjdXIgPSBmb3VuZCQxLnRvLmxpbmU7XG4gICAgICBsZW4gKz0gY3VyLnRleHQubGVuZ3RoIC0gZm91bmQkMS50by5jaDtcbiAgICB9XG4gICAgcmV0dXJuIGxlblxuICB9XG5cbiAgLy8gRmluZCB0aGUgbG9uZ2VzdCBsaW5lIGluIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICBkLm1heExpbmUgPSBnZXRMaW5lKGRvYywgZG9jLmZpcnN0KTtcbiAgICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7XG4gICAgZC5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7XG4gICAgZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgICAgaWYgKGxlbiA+IGQubWF4TGluZUxlbmd0aCkge1xuICAgICAgICBkLm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgIGQubWF4TGluZSA9IGxpbmU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBMSU5FIERBVEEgU1RSVUNUVVJFXG5cbiAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmdcbiAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLlxuICB2YXIgTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkge1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgYXR0YWNoTWFya2VkU3BhbnModGhpcywgbWFya2VkU3BhbnMpO1xuICAgIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7XG4gIH07XG5cbiAgTGluZS5wcm90b3R5cGUubGluZU5vID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbGluZU5vKHRoaXMpIH07XG4gIGV2ZW50TWl4aW4oTGluZSk7XG5cbiAgLy8gQ2hhbmdlIHRoZSBjb250ZW50ICh0ZXh0LCBtYXJrZXJzKSBvZiBhIGxpbmUuIEF1dG9tYXRpY2FsbHlcbiAgLy8gaW52YWxpZGF0ZXMgY2FjaGVkIGluZm9ybWF0aW9uIGFuZCB0cmllcyB0byByZS1lc3RpbWF0ZSB0aGVcbiAgLy8gbGluZSdzIGhlaWdodC5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHtcbiAgICBsaW5lLnRleHQgPSB0ZXh0O1xuICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0eWxlcyA9IG51bGw7IH1cbiAgICBpZiAobGluZS5vcmRlciAhPSBudWxsKSB7IGxpbmUub3JkZXIgPSBudWxsOyB9XG4gICAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7XG4gICAgYXR0YWNoTWFya2VkU3BhbnMobGluZSwgbWFya2VkU3BhbnMpO1xuICAgIHZhciBlc3RIZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KGxpbmUpIDogMTtcbiAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxuICB9XG5cbiAgLy8gRGV0YWNoIGEgbGluZSBmcm9tIHRoZSBkb2N1bWVudCB0cmVlIGFuZCBpdHMgbWFya2Vycy5cbiAgZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkge1xuICAgIGxpbmUucGFyZW50ID0gbnVsbDtcbiAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgYSBzdHlsZSBhcyByZXR1cm5lZCBieSBhIG1vZGUgKGVpdGhlciBudWxsLCBvciBhIHN0cmluZ1xuICAvLyBjb250YWluaW5nIG9uZSBvciBtb3JlIHN0eWxlcykgdG8gYSBDU1Mgc3R5bGUuIFRoaXMgaXMgY2FjaGVkLFxuICAvLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy5cbiAgdmFyIHN0eWxlVG9DbGFzc0NhY2hlID0ge30sIHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTtcbiAgZnVuY3Rpb24gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZSwgb3B0aW9ucykge1xuICAgIGlmICghc3R5bGUgfHwgL15cXHMqJC8udGVzdChzdHlsZSkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjYWNoZSA9IG9wdGlvbnMuYWRkTW9kZUNsYXNzID8gc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA6IHN0eWxlVG9DbGFzc0NhY2hlO1xuICAgIHJldHVybiBjYWNoZVtzdHlsZV0gfHxcbiAgICAgIChjYWNoZVtzdHlsZV0gPSBzdHlsZS5yZXBsYWNlKC9cXFMrL2csIFwiY20tJCZcIikpXG4gIH1cblxuICAvLyBSZW5kZXIgdGhlIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBvZiBhIGxpbmUuIEFsc28gYnVpbGRzXG4gIC8vIHVwIGEgJ2xpbmUgbWFwJywgd2hpY2ggcG9pbnRzIGF0IHRoZSBET00gbm9kZXMgdGhhdCByZXByZXNlbnRcbiAgLy8gc3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcgY29kZS5cbiAgLy8gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWlucyB0aGUgRE9NIG5vZGUsIHRoaXMgbWFwLCBhbmRcbiAgLy8gaW5mb3JtYXRpb24gYWJvdXQgbGluZS13aWRlIHN0eWxlcyB0aGF0IHdlcmUgc2V0IGJ5IHRoZSBtb2RlLlxuICBmdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIC8vIFRoZSBwYWRkaW5nLXJpZ2h0IGZvcmNlcyB0aGUgZWxlbWVudCB0byBoYXZlIGEgJ2JvcmRlcicsIHdoaWNoXG4gICAgLy8gaXMgbmVlZGVkIG9uIFdlYmtpdCB0byBiZSBhYmxlIHRvIGdldCBsaW5lLWxldmVsIGJvdW5kaW5nXG4gICAgLy8gcmVjdGFuZ2xlcyBmb3IgaXQgKGluIG1lYXN1cmVDaGFyKS5cbiAgICB2YXIgY29udGVudCA9IGVsdFAoXCJzcGFuXCIsIG51bGwsIG51bGwsIHdlYmtpdCA/IFwicGFkZGluZy1yaWdodDogLjFweFwiIDogbnVsbCk7XG4gICAgdmFyIGJ1aWxkZXIgPSB7cHJlOiBlbHRQKFwicHJlXCIsIFtjb250ZW50XSwgXCJDb2RlTWlycm9yLWxpbmVcIiksIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSxcbiAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICBzcGxpdFNwYWNlczogY20uZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpfTtcbiAgICBsaW5lVmlldy5tZWFzdXJlID0ge307XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGxvZ2ljYWwgbGluZXMgdGhhdCBtYWtlIHVwIHRoaXMgdmlzdWFsIGxpbmUuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gKGxpbmVWaWV3LnJlc3QgPyBsaW5lVmlldy5yZXN0Lmxlbmd0aCA6IDApOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gaSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXIgPSAodm9pZCAwKTtcbiAgICAgIGJ1aWxkZXIucG9zID0gMDtcbiAgICAgIGJ1aWxkZXIuYWRkVG9rZW4gPSBidWlsZFRva2VuO1xuICAgICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9rZW4tcmVuZGVyaW5nXG4gICAgICAvLyBhbGdvcml0aG0sIHRvIGRlYWwgd2l0aCBicm93c2VyIHF1aXJrcy5cbiAgICAgIGlmIChoYXNCYWRCaWRpUmVjdHMoY20uZGlzcGxheS5tZWFzdXJlKSAmJiAob3JkZXIgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKSkpXG4gICAgICAgIHsgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsgfVxuICAgICAgYnVpbGRlci5tYXAgPSBbXTtcbiAgICAgIHZhciBhbGxvd0Zyb250aWVyVXBkYXRlID0gbGluZVZpZXcgIT0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkICYmIGxpbmVObyhsaW5lKTtcbiAgICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIGFsbG93RnJvbnRpZXJVcGRhdGUpKTtcbiAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcykge1xuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcylcbiAgICAgICAgICB7IGJ1aWxkZXIuYmdDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFzcyB8fCBcIlwiKTsgfVxuICAgICAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMudGV4dENsYXNzKVxuICAgICAgICAgIHsgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MsIGJ1aWxkZXIudGV4dENsYXNzIHx8IFwiXCIpOyB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBhIHNpbmdsZSBub2RlIGlzIHByZXNlbnQsIGZvciBtZWFzdXJpbmcuXG4gICAgICBpZiAoYnVpbGRlci5tYXAubGVuZ3RoID09IDApXG4gICAgICAgIHsgYnVpbGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSk7IH1cblxuICAgICAgLy8gU3RvcmUgdGhlIG1hcCBhbmQgYSBjYWNoZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluZVxuICAgICAgaWYgKGkgPT0gMCkge1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLm1hcCA9IGJ1aWxkZXIubWFwO1xuICAgICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICB9IGVsc2Uge1xuICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmlldy5tZWFzdXJlLm1hcHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApXG4gICAgICAgIDsobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzID0gW10pKS5wdXNoKHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWUgaXNzdWUgIzI5MDFcbiAgICBpZiAod2Via2l0KSB7XG4gICAgICB2YXIgbGFzdCA9IGJ1aWxkZXIuY29udGVudC5sYXN0Q2hpbGQ7XG4gICAgICBpZiAoL1xcYmNtLXRhYlxcYi8udGVzdChsYXN0LmNsYXNzTmFtZSkgfHwgKGxhc3QucXVlcnlTZWxlY3RvciAmJiBsYXN0LnF1ZXJ5U2VsZWN0b3IoXCIuY20tdGFiXCIpKSlcbiAgICAgICAgeyBidWlsZGVyLmNvbnRlbnQuY2xhc3NOYW1lID0gXCJjbS10YWItd3JhcC1oYWNrXCI7IH1cbiAgICB9XG5cbiAgICBzaWduYWwoY20sIFwicmVuZGVyTGluZVwiLCBjbSwgbGluZVZpZXcubGluZSwgYnVpbGRlci5wcmUpO1xuICAgIGlmIChidWlsZGVyLnByZS5jbGFzc05hbWUpXG4gICAgICB7IGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMoYnVpbGRlci5wcmUuY2xhc3NOYW1lLCBidWlsZGVyLnRleHRDbGFzcyB8fCBcIlwiKTsgfVxuXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7XG4gICAgdmFyIHRva2VuID0gZWx0KFwic3BhblwiLCBcIlxcdTIwMjJcIiwgXCJjbS1pbnZhbGlkY2hhclwiKTtcbiAgICB0b2tlbi50aXRsZSA9IFwiXFxcXHVcIiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuICAgIHRva2VuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdG9rZW4udGl0bGUpO1xuICAgIHJldHVybiB0b2tlblxuICB9XG5cbiAgLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG9cbiAgLy8gdGhlIGxpbmUgbWFwLiBUYWtlcyBjYXJlIHRvIHJlbmRlciBzcGVjaWFsIGNoYXJhY3RlcnMgc2VwYXJhdGVseS5cbiAgZnVuY3Rpb24gYnVpbGRUb2tlbihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIGNzcywgYXR0cmlidXRlcykge1xuICAgIGlmICghdGV4dCkgeyByZXR1cm4gfVxuICAgIHZhciBkaXNwbGF5VGV4dCA9IGJ1aWxkZXIuc3BsaXRTcGFjZXMgPyBzcGxpdFNwYWNlcyh0ZXh0LCBidWlsZGVyLnRyYWlsaW5nU3BhY2UpIDogdGV4dDtcbiAgICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlO1xuICAgIHZhciBjb250ZW50O1xuICAgIGlmICghc3BlY2lhbC50ZXN0KHRleHQpKSB7XG4gICAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5VGV4dCk7XG4gICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHRleHQubGVuZ3RoLCBjb250ZW50KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBtdXN0V3JhcCA9IHRydWU7IH1cbiAgICAgIGJ1aWxkZXIucG9zICs9IHRleHQubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvcztcbiAgICAgICAgdmFyIG0gPSBzcGVjaWFsLmV4ZWModGV4dCk7XG4gICAgICAgIHZhciBza2lwcGVkID0gbSA/IG0uaW5kZXggLSBwb3MgOiB0ZXh0Lmxlbmd0aCAtIHBvcztcbiAgICAgICAgaWYgKHNraXBwZWQpIHtcbiAgICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQuc2xpY2UocG9zLCBwb3MgKyBza2lwcGVkKSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0XSkpOyB9XG4gICAgICAgICAgZWxzZSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsgfVxuICAgICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgc2tpcHBlZCwgdHh0KTtcbiAgICAgICAgICBidWlsZGVyLmNvbCArPSBza2lwcGVkO1xuICAgICAgICAgIGJ1aWxkZXIucG9zICs9IHNraXBwZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtKSB7IGJyZWFrIH1cbiAgICAgICAgcG9zICs9IHNraXBwZWQgKyAxO1xuICAgICAgICB2YXIgdHh0JDEgPSAodm9pZCAwKTtcbiAgICAgICAgaWYgKG1bMF0gPT0gXCJcXHRcIikge1xuICAgICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTtcbiAgICAgICAgICB0eHQkMSA9IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBzcGFjZVN0cih0YWJXaWR0aCksIFwiY20tdGFiXCIpKTtcbiAgICAgICAgICB0eHQkMS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwicHJlc2VudGF0aW9uXCIpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgXCJcXHRcIik7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gdGFiV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSBcIlxcclwiIHx8IG1bMF0gPT0gXCJcXG5cIikge1xuICAgICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIG1bMF0gPT0gXCJcXHJcIiA/IFwiXFx1MjQwZFwiIDogXCJcXHUyNDI0XCIsIFwiY20taW52YWxpZGNoYXJcIikpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgYnVpbGRlci5jb2wgKz0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0eHQkMSA9IGJ1aWxkZXIuY20ub3B0aW9ucy5zcGVjaWFsQ2hhclBsYWNlaG9sZGVyKG1bMF0pO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgbVswXSk7XG4gICAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0JDFdKSk7IH1cbiAgICAgICAgICBlbHNlIHsgY29udGVudC5hcHBlbmRDaGlsZCh0eHQkMSk7IH1cbiAgICAgICAgICBidWlsZGVyLmNvbCArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgMSwgdHh0JDEpO1xuICAgICAgICBidWlsZGVyLnBvcysrO1xuICAgICAgfVxuICAgIH1cbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBkaXNwbGF5VGV4dC5jaGFyQ29kZUF0KHRleHQubGVuZ3RoIC0gMSkgPT0gMzI7XG4gICAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXAgfHwgY3NzKSB7XG4gICAgICB2YXIgZnVsbFN0eWxlID0gc3R5bGUgfHwgXCJcIjtcbiAgICAgIGlmIChzdGFydFN0eWxlKSB7IGZ1bGxTdHlsZSArPSBzdGFydFN0eWxlOyB9XG4gICAgICBpZiAoZW5kU3R5bGUpIHsgZnVsbFN0eWxlICs9IGVuZFN0eWxlOyB9XG4gICAgICB2YXIgdG9rZW4gPSBlbHQoXCJzcGFuXCIsIFtjb250ZW50XSwgZnVsbFN0eWxlLCBjc3MpO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7IGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpICYmIGF0dHIgIT0gXCJzdHlsZVwiICYmIGF0dHIgIT0gXCJjbGFzc1wiKVxuICAgICAgICAgIHsgdG9rZW4uc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJpYnV0ZXNbYXR0cl0pOyB9IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pXG4gICAgfVxuICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZChjb250ZW50KTtcbiAgfVxuXG4gIC8vIENoYW5nZSBzb21lIHNwYWNlcyB0byBOQlNQIHRvIHByZXZlbnQgdGhlIGJyb3dzZXIgZnJvbSBjb2xsYXBzaW5nXG4gIC8vIHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGEgbGluZSB3aGVuIHJlbmRlcmluZyB0ZXh0IChpc3N1ZSAjMTM2MikuXG4gIGZ1bmN0aW9uIHNwbGl0U3BhY2VzKHRleHQsIHRyYWlsaW5nQmVmb3JlKSB7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMSAmJiAhLyAgLy50ZXN0KHRleHQpKSB7IHJldHVybiB0ZXh0IH1cbiAgICB2YXIgc3BhY2VCZWZvcmUgPSB0cmFpbGluZ0JlZm9yZSwgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IHRleHQuY2hhckF0KGkpO1xuICAgICAgaWYgKGNoID09IFwiIFwiICYmIHNwYWNlQmVmb3JlICYmIChpID09IHRleHQubGVuZ3RoIC0gMSB8fCB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09IDMyKSlcbiAgICAgICAgeyBjaCA9IFwiXFx1MDBhMFwiOyB9XG4gICAgICByZXN1bHQgKz0gY2g7XG4gICAgICBzcGFjZUJlZm9yZSA9IGNoID09IFwiIFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBXb3JrIGFyb3VuZCBub25zZW5zZSBkaW1lbnNpb25zIGJlaW5nIHJlcG9ydGVkIGZvciBzdHJldGNoZXMgb2ZcbiAgLy8gcmlnaHQtdG8tbGVmdCB0ZXh0LlxuICBmdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3JkZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB7XG4gICAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyBcIiBjbS1mb3JjZS1ib3JkZXJcIiA6IFwiY20tZm9yY2UtYm9yZGVyXCI7XG4gICAgICB2YXIgc3RhcnQgPSBidWlsZGVyLnBvcywgZW5kID0gc3RhcnQgKyB0ZXh0Lmxlbmd0aDtcbiAgICAgIGZvciAoOzspIHtcbiAgICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXJ0IG9mIHRoaXMgdGV4dFxuICAgICAgICB2YXIgcGFydCA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgICAgIGlmIChwYXJ0LnRvID4gc3RhcnQgJiYgcGFydC5mcm9tIDw9IHN0YXJ0KSB7IGJyZWFrIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydC50byA+PSBlbmQpIHsgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB9XG4gICAgICAgIGlubmVyKGJ1aWxkZXIsIHRleHQuc2xpY2UoMCwgcGFydC50byAtIHN0YXJ0KSwgc3R5bGUsIHN0YXJ0U3R5bGUsIG51bGwsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgIHN0YXJ0U3R5bGUgPSBudWxsO1xuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZShwYXJ0LnRvIC0gc3RhcnQpO1xuICAgICAgICBzdGFydCA9IHBhcnQudG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIHNpemUsIG1hcmtlciwgaWdub3JlV2lkZ2V0KSB7XG4gICAgdmFyIHdpZGdldCA9ICFpZ25vcmVXaWRnZXQgJiYgbWFya2VyLndpZGdldE5vZGU7XG4gICAgaWYgKHdpZGdldCkgeyBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7IH1cbiAgICBpZiAoIWlnbm9yZVdpZGdldCAmJiBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQubmVlZHNDb250ZW50QXR0cmlidXRlKSB7XG4gICAgICBpZiAoIXdpZGdldClcbiAgICAgICAgeyB3aWRnZXQgPSBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpOyB9XG4gICAgICB3aWRnZXQuc2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIsIG1hcmtlci5pZCk7XG4gICAgfVxuICAgIGlmICh3aWRnZXQpIHtcbiAgICAgIGJ1aWxkZXIuY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKHdpZGdldCk7XG4gICAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQod2lkZ2V0KTtcbiAgICB9XG4gICAgYnVpbGRlci5wb3MgKz0gc2l6ZTtcbiAgICBidWlsZGVyLnRyYWlsaW5nU3BhY2UgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIE91dHB1dHMgYSBudW1iZXIgb2Ygc3BhbnMgdG8gbWFrZSB1cCBhIGxpbmUsIHRha2luZyBoaWdobGlnaHRpbmdcbiAgLy8gYW5kIG1hcmtlZCB0ZXh0IGludG8gYWNjb3VudC5cbiAgZnVuY3Rpb24gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgc3R5bGVzKSB7XG4gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucywgYWxsVGV4dCA9IGxpbmUudGV4dCwgYXQgPSAwO1xuICAgIGlmICghc3BhbnMpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IHN0eWxlcy5sZW5ndGg7IGkkMSs9MilcbiAgICAgICAgeyBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIGFsbFRleHQuc2xpY2UoYXQsIGF0ID0gc3R5bGVzW2kkMV0pLCBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpJDErMV0sIGJ1aWxkZXIuY20ub3B0aW9ucykpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGgsIHBvcyA9IDAsIGkgPSAxLCB0ZXh0ID0gXCJcIiwgc3R5bGUsIGNzcztcbiAgICB2YXIgbmV4dENoYW5nZSA9IDAsIHNwYW5TdHlsZSwgc3BhbkVuZFN0eWxlLCBzcGFuU3RhcnRTdHlsZSwgY29sbGFwc2VkLCBhdHRyaWJ1dGVzO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgeyAvLyBVcGRhdGUgY3VycmVudCBtYXJrZXIgc2V0XG4gICAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gY3NzID0gXCJcIjtcbiAgICAgICAgYXR0cmlidXRlcyA9IG51bGw7XG4gICAgICAgIGNvbGxhcHNlZCA9IG51bGw7IG5leHRDaGFuZ2UgPSBJbmZpbml0eTtcbiAgICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW10sIGVuZFN0eWxlcyA9ICh2b2lkIDApO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNwYW5zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgdmFyIHNwID0gc3BhbnNbal0sIG0gPSBzcC5tYXJrZXI7XG4gICAgICAgICAgaWYgKG0udHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7XG4gICAgICAgICAgICBmb3VuZEJvb2ttYXJrcy5wdXNoKG0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA8PSBwb3MgJiYgKHNwLnRvID09IG51bGwgfHwgc3AudG8gPiBwb3MgfHwgbS5jb2xsYXBzZWQgJiYgc3AudG8gPT0gcG9zICYmIHNwLmZyb20gPT0gcG9zKSkge1xuICAgICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykge1xuICAgICAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AudG87XG4gICAgICAgICAgICAgIHNwYW5FbmRTdHlsZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jbGFzc05hbWUpIHsgc3BhblN0eWxlICs9IFwiIFwiICsgbS5jbGFzc05hbWU7IH1cbiAgICAgICAgICAgIGlmIChtLmNzcykgeyBjc3MgPSAoY3NzID8gY3NzICsgXCI7XCIgOiBcIlwiKSArIG0uY3NzOyB9XG4gICAgICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSB7IHNwYW5TdGFydFN0eWxlICs9IFwiIFwiICsgbS5zdGFydFN0eWxlOyB9XG4gICAgICAgICAgICBpZiAobS5lbmRTdHlsZSAmJiBzcC50byA9PSBuZXh0Q2hhbmdlKSB7IChlbmRTdHlsZXMgfHwgKGVuZFN0eWxlcyA9IFtdKSkucHVzaChtLmVuZFN0eWxlLCBzcC50byk7IH1cbiAgICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIHRoZSBvbGQgdGl0bGUgcHJvcGVydHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RlbWlycm9yL0NvZGVNaXJyb3IvcHVsbC81NjczXG4gICAgICAgICAgICBpZiAobS50aXRsZSkgeyAoYXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyA9IHt9KSkudGl0bGUgPSBtLnRpdGxlOyB9XG4gICAgICAgICAgICBpZiAobS5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gbS5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIHsgKGF0dHJpYnV0ZXMgfHwgKGF0dHJpYnV0ZXMgPSB7fSkpW2F0dHJdID0gbS5hdHRyaWJ1dGVzW2F0dHJdOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobS5jb2xsYXBzZWQgJiYgKCFjb2xsYXBzZWQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoY29sbGFwc2VkLm1hcmtlciwgbSkgPCAwKSlcbiAgICAgICAgICAgICAgeyBjb2xsYXBzZWQgPSBzcDsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoc3AuZnJvbSA+IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AuZnJvbSkge1xuICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLmZyb207XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRTdHlsZXMpIHsgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgZW5kU3R5bGVzLmxlbmd0aDsgaiQxICs9IDIpXG4gICAgICAgICAgeyBpZiAoZW5kU3R5bGVzW2okMSArIDFdID09IG5leHRDaGFuZ2UpIHsgc3BhbkVuZFN0eWxlICs9IFwiIFwiICsgZW5kU3R5bGVzW2okMV07IH0gfSB9XG5cbiAgICAgICAgaWYgKCFjb2xsYXBzZWQgfHwgY29sbGFwc2VkLmZyb20gPT0gcG9zKSB7IGZvciAodmFyIGokMiA9IDA7IGokMiA8IGZvdW5kQm9va21hcmtzLmxlbmd0aDsgKytqJDIpXG4gICAgICAgICAgeyBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgMCwgZm91bmRCb29rbWFya3NbaiQyXSk7IH0gfVxuICAgICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHtcbiAgICAgICAgICBidWlsZENvbGxhcHNlZFNwYW4oYnVpbGRlciwgKGNvbGxhcHNlZC50byA9PSBudWxsID8gbGVuICsgMSA6IGNvbGxhcHNlZC50bykgLSBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZC5tYXJrZXIsIGNvbGxhcHNlZC5mcm9tID09IG51bGwpO1xuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gcG9zKSB7IGNvbGxhcHNlZCA9IGZhbHNlOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb3MgPj0gbGVuKSB7IGJyZWFrIH1cblxuICAgICAgdmFyIHVwdG8gPSBNYXRoLm1pbihsZW4sIG5leHRDaGFuZ2UpO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICB2YXIgZW5kID0gcG9zICsgdGV4dC5sZW5ndGg7XG4gICAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHZhciB0b2tlblRleHQgPSBlbmQgPiB1cHRvID8gdGV4dC5zbGljZSgwLCB1cHRvIC0gcG9zKSA6IHRleHQ7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFRva2VuKGJ1aWxkZXIsIHRva2VuVGV4dCwgc3R5bGUgPyBzdHlsZSArIHNwYW5TdHlsZSA6IHNwYW5TdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6IFwiXCIsIGNzcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVha31cbiAgICAgICAgICBwb3MgPSBlbmQ7XG4gICAgICAgICAgc3BhblN0YXJ0U3R5bGUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHRleHQgPSBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpKytdKTtcbiAgICAgICAgc3R5bGUgPSBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlc1tpKytdLCBidWlsZGVyLmNtLm9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRseSBkcmF3bilcbiAgLy8gcGFydCBvZiB0aGUgZG9jdW1lbnQuIEEgTGluZVZpZXcgbWF5IGNvcnJlc3BvbmQgdG8gbXVsdGlwbGVcbiAgLy8gbG9naWNhbCBsaW5lcywgaWYgdGhvc2UgYXJlIGNvbm5lY3RlZCBieSBjb2xsYXBzZWQgcmFuZ2VzLlxuICBmdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUsIGxpbmVOKSB7XG4gICAgLy8gVGhlIHN0YXJ0aW5nIGxpbmVcbiAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueVxuICAgIHRoaXMucmVzdCA9IHZpc3VhbExpbmVDb250aW51ZWQobGluZSk7XG4gICAgLy8gTnVtYmVyIG9mIGxvZ2ljYWwgbGluZXMgaW4gdGhpcyB2aXN1YWwgbGluZVxuICAgIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/IGxpbmVObyhsc3QodGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxO1xuICAgIHRoaXMubm9kZSA9IHRoaXMudGV4dCA9IG51bGw7XG4gICAgdGhpcy5oaWRkZW4gPSBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIHJhbmdlIG9mIExpbmVWaWV3IG9iamVjdHMgZm9yIHRoZSBnaXZlbiBsaW5lcy5cbiAgZnVuY3Rpb24gYnVpbGRWaWV3QXJyYXkoY20sIGZyb20sIHRvKSB7XG4gICAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7XG4gICAgZm9yICh2YXIgcG9zID0gZnJvbTsgcG9zIDwgdG87IHBvcyA9IG5leHRQb3MpIHtcbiAgICAgIHZhciB2aWV3ID0gbmV3IExpbmVWaWV3KGNtLmRvYywgZ2V0TGluZShjbS5kb2MsIHBvcyksIHBvcyk7XG4gICAgICBuZXh0UG9zID0gcG9zICsgdmlldy5zaXplO1xuICAgICAgYXJyYXkucHVzaCh2aWV3KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICB2YXIgb3BlcmF0aW9uR3JvdXAgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgICBpZiAob3BlcmF0aW9uR3JvdXApIHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwLm9wcy5wdXNoKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3Aub3duc0dyb3VwID0gb3BlcmF0aW9uR3JvdXAgPSB7XG4gICAgICAgIG9wczogW29wXSxcbiAgICAgICAgZGVsYXllZENhbGxiYWNrczogW11cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCkge1xuICAgIC8vIENhbGxzIGRlbGF5ZWQgY2FsbGJhY2tzIGFuZCBjdXJzb3JBY3Rpdml0eSBoYW5kbGVycyB1bnRpbCBub1xuICAgIC8vIG5ldyBvbmVzIGFwcGVhclxuICAgIHZhciBjYWxsYmFja3MgPSBncm91cC5kZWxheWVkQ2FsbGJhY2tzLCBpID0gMDtcbiAgICBkbyB7XG4gICAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBjYWxsYmFja3NbaV0uY2FsbChudWxsKTsgfVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC5vcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG9wID0gZ3JvdXAub3BzW2pdO1xuICAgICAgICBpZiAob3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycylcbiAgICAgICAgICB7IHdoaWxlIChvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCA8IG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMubGVuZ3RoKVxuICAgICAgICAgICAgeyBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCwgb3AuY20pOyB9IH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChpIDwgY2FsbGJhY2tzLmxlbmd0aClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaE9wZXJhdGlvbihvcCwgZW5kQ2IpIHtcbiAgICB2YXIgZ3JvdXAgPSBvcC5vd25zR3JvdXA7XG4gICAgaWYgKCFncm91cCkgeyByZXR1cm4gfVxuXG4gICAgdHJ5IHsgZmlyZUNhbGxiYWNrc0Zvck9wcyhncm91cCk7IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIG9wZXJhdGlvbkdyb3VwID0gbnVsbDtcbiAgICAgIGVuZENiKGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICB2YXIgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7XG5cbiAgLy8gT2Z0ZW4sIHdlIHdhbnQgdG8gc2lnbmFsIGV2ZW50cyBhdCBhIHBvaW50IHdoZXJlIHdlIGFyZSBpbiB0aGVcbiAgLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZ1xuICAvLyBvdGhlciBtZXRob2RzIG9uIHRoZSBlZGl0b3IsIHdoaWNoIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudFxuICAvLyBzdGF0ZSBvciBzaW1wbHkgbm90IGV4cGVjdCBhbnkgb3RoZXIgZXZlbnRzIHRvIGhhcHBlbi5cbiAgLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzXG4gIC8vIHRoZW0gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbGFzdCBvcGVyYXRpb24gZW5kcywgb3IsIGlmIG5vXG4gIC8vIG9wZXJhdGlvbiBpcyBhY3RpdmUsIHdoZW4gYSB0aW1lb3V0IGZpcmVzLlxuICBmdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykge1xuICAgIHZhciBhcnIgPSBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKTtcbiAgICBpZiAoIWFyci5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7XG4gICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7XG4gICAgICBsaXN0ID0gb3BlcmF0aW9uR3JvdXAuZGVsYXllZENhbGxiYWNrcztcbiAgICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHtcbiAgICAgIGxpc3QgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IFtdO1xuICAgICAgc2V0VGltZW91dChmaXJlT3JwaGFuRGVsYXllZCwgMCk7XG4gICAgfVxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgICAgbGlzdC5wdXNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFycltpXS5hcHBseShudWxsLCBhcmdzKTsgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKVxuICAgICAgbG9vcCggaSApO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlyZU9ycGhhbkRlbGF5ZWQoKSB7XG4gICAgdmFyIGRlbGF5ZWQgPSBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzO1xuICAgIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgeyBkZWxheWVkW2ldKCk7IH1cbiAgfVxuXG4gIC8vIFdoZW4gYW4gYXNwZWN0IG9mIGEgbGluZSBjaGFuZ2VzLCBhIHN0cmluZyBpcyBhZGRlZCB0b1xuICAvLyBsaW5lVmlldy5jaGFuZ2VzLiBUaGlzIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUnc1xuICAvLyBET00gc3RydWN0dXJlLlxuICBmdW5jdGlvbiB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lVmlldy5jaGFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIgdHlwZSA9IGxpbmVWaWV3LmNoYW5nZXNbal07XG4gICAgICBpZiAodHlwZSA9PSBcInRleHRcIikgeyB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpOyB9XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwiZ3V0dGVyXCIpIHsgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImNsYXNzXCIpIHsgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcIndpZGdldFwiKSB7IHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7IH1cbiAgICB9XG4gICAgbGluZVZpZXcuY2hhbmdlcyA9IG51bGw7XG4gIH1cblxuICAvLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQgY2xhc3MgbmVlZCB0b1xuICAvLyBiZSB3cmFwcGVkLCBhbmQgaGF2ZSB0aGUgZXh0cmEgZWxlbWVudHMgYWRkZWQgdG8gdGhlIHdyYXBwZXIgZGl2XG4gIGZ1bmN0aW9uIGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KSB7XG4gICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkge1xuICAgICAgbGluZVZpZXcubm9kZSA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTtcbiAgICAgIGlmIChsaW5lVmlldy50ZXh0LnBhcmVudE5vZGUpXG4gICAgICAgIHsgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgbGluZVZpZXcubm9kZS5hcHBlbmRDaGlsZChsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBsaW5lVmlldy5ub2RlLnN0eWxlLnpJbmRleCA9IDI7IH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldykge1xuICAgIHZhciBjbHMgPSBsaW5lVmlldy5iZ0NsYXNzID8gbGluZVZpZXcuYmdDbGFzcyArIFwiIFwiICsgKGxpbmVWaWV3LmxpbmUuYmdDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUuYmdDbGFzcztcbiAgICBpZiAoY2xzKSB7IGNscyArPSBcIiBDb2RlTWlycm9yLWxpbmViYWNrZ3JvdW5kXCI7IH1cbiAgICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkge1xuICAgICAgaWYgKGNscykgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLmNsYXNzTmFtZSA9IGNsczsgfVxuICAgICAgZWxzZSB7IGxpbmVWaWV3LmJhY2tncm91bmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5iYWNrZ3JvdW5kKTsgbGluZVZpZXcuYmFja2dyb3VuZCA9IG51bGw7IH1cbiAgICB9IGVsc2UgaWYgKGNscykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5iYWNrZ3JvdW5kID0gd3JhcC5pbnNlcnRCZWZvcmUoZWx0KFwiZGl2XCIsIG51bGwsIGNscyksIHdyYXAuZmlyc3RDaGlsZCk7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobGluZVZpZXcuYmFja2dyb3VuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV3JhcHBlciBhcm91bmQgYnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBzdHJ1Y3R1cmVcbiAgLy8gaW4gZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkIHdoZW4gcG9zc2libGUuXG4gIGZ1bmN0aW9uIGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAgIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBleHQubGluZSA9PSBsaW5lVmlldy5saW5lKSB7XG4gICAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsO1xuICAgICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlO1xuICAgICAgcmV0dXJuIGV4dC5idWlsdFxuICAgIH1cbiAgICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpXG4gIH1cblxuICAvLyBSZWRyYXcgdGhlIGxpbmUncyB0ZXh0LiBJbnRlcmFjdHMgd2l0aCB0aGUgYmFja2dyb3VuZCBhbmQgdGV4dFxuICAvLyBjbGFzc2VzIGJlY2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2VcbiAgLy8gY2xhc3Nlcy5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KSB7XG4gICAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lO1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LnRleHQgPT0gbGluZVZpZXcubm9kZSkgeyBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlOyB9XG4gICAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpO1xuICAgIGxpbmVWaWV3LnRleHQgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MgIT0gbGluZVZpZXcuYmdDbGFzcyB8fCBidWlsdC50ZXh0Q2xhc3MgIT0gbGluZVZpZXcudGV4dENsYXNzKSB7XG4gICAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzcztcbiAgICAgIGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzcztcbiAgICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7XG4gICAgfSBlbHNlIGlmIChjbHMpIHtcbiAgICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gY2xzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldykge1xuICAgIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldyk7XG4gICAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKVxuICAgICAgeyBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldykuY2xhc3NOYW1lID0gbGluZVZpZXcubGluZS53cmFwQ2xhc3M7IH1cbiAgICBlbHNlIGlmIChsaW5lVmlldy5ub2RlICE9IGxpbmVWaWV3LnRleHQpXG4gICAgICB7IGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gXCJcIjsgfVxuICAgIHZhciB0ZXh0Q2xhc3MgPSBsaW5lVmlldy50ZXh0Q2xhc3MgPyBsaW5lVmlldy50ZXh0Q2xhc3MgKyBcIiBcIiArIChsaW5lVmlldy5saW5lLnRleHRDbGFzcyB8fCBcIlwiKSA6IGxpbmVWaWV3LmxpbmUudGV4dENsYXNzO1xuICAgIGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lID0gdGV4dENsYXNzIHx8IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyKSB7XG4gICAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7XG4gICAgICBsaW5lVmlldy5ndXR0ZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkge1xuICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTtcbiAgICAgIGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcykge1xuICAgICAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcImxlZnQ6IFwiICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4OyB3aWR0aDogXCIgKyAoZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQpO1xuICAgICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZpZXcudGV4dCk7XG4gICAgfVxuICAgIHZhciBtYXJrZXJzID0gbGluZVZpZXcubGluZS5ndXR0ZXJNYXJrZXJzO1xuICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHtcbiAgICAgIHZhciB3cmFwJDEgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gICAgICB2YXIgZ3V0dGVyV3JhcCA9IGxpbmVWaWV3Lmd1dHRlciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXJcIiwgKFwibGVmdDogXCIgKyAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpbXMuZml4ZWRQb3MgOiAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoKSArIFwicHhcIikpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApO1xuICAgICAgd3JhcCQxLmluc2VydEJlZm9yZShndXR0ZXJXcmFwLCBsaW5lVmlldy50ZXh0KTtcbiAgICAgIGlmIChsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzKVxuICAgICAgICB7IGd1dHRlcldyYXAuY2xhc3NOYW1lICs9IFwiIFwiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsgfVxuICAgICAgaWYgKGNtLm9wdGlvbnMubGluZU51bWJlcnMgJiYgKCFtYXJrZXJzIHx8ICFtYXJrZXJzW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkpXG4gICAgICAgIHsgbGluZVZpZXcubGluZU51bWJlciA9IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoXG4gICAgICAgICAgZWx0KFwiZGl2XCIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pLFxuICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgKFwibGVmdDogXCIgKyAoZGltcy5ndXR0ZXJMZWZ0W1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSkgKyBcInB4OyB3aWR0aDogXCIgKyAoY20uZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCkgKyBcInB4XCIpKSk7IH1cbiAgICAgIGlmIChtYXJrZXJzKSB7IGZvciAodmFyIGsgPSAwOyBrIDwgY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsraykge1xuICAgICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2tdLmNsYXNzTmFtZSwgZm91bmQgPSBtYXJrZXJzLmhhc093blByb3BlcnR5KGlkKSAmJiBtYXJrZXJzW2lkXTtcbiAgICAgICAgaWYgKGZvdW5kKVxuICAgICAgICAgIHsgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2ZvdW5kXSwgXCJDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChkaW1zLmd1dHRlckxlZnRbaWRdKSArIFwicHg7IHdpZHRoOiBcIiArIChkaW1zLmd1dHRlcldpZHRoW2lkXSkgKyBcInB4XCIpKSk7IH1cbiAgICAgIH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGlmIChsaW5lVmlldy5hbGlnbmFibGUpIHsgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsgfVxuICAgIHZhciBpc1dpZGdldCA9IGNsYXNzVGVzdChcIkNvZGVNaXJyb3ItbGluZXdpZGdldFwiKTtcbiAgICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0ID0gKHZvaWQgMCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7XG4gICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIGlmIChpc1dpZGdldC50ZXN0KG5vZGUuY2xhc3NOYW1lKSkgeyBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgfVxuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGxpbmUncyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoXG4gIGZ1bmN0aW9uIGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykge1xuICAgIHZhciBidWlsdCA9IGdldExpbmVDb250ZW50KGNtLCBsaW5lVmlldyk7XG4gICAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7XG4gICAgaWYgKGJ1aWx0LmJnQ2xhc3MpIHsgbGluZVZpZXcuYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7IH1cbiAgICBpZiAoYnVpbHQudGV4dENsYXNzKSB7IGxpbmVWaWV3LnRleHRDbGFzcyA9IGJ1aWx0LnRleHRDbGFzczsgfVxuXG4gICAgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTtcbiAgICB1cGRhdGVMaW5lR3V0dGVyKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpO1xuICAgIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcyk7XG4gICAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbiAgfVxuXG4gIC8vIEEgbGluZVZpZXcgbWF5IGNvbnRhaW4gbXVsdGlwbGUgbG9naWNhbCBsaW5lcyAod2hlbiBtZXJnZWQgYnlcbiAgLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdldHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uXG4gIGZ1bmN0aW9uIGluc2VydExpbmVXaWRnZXRzKGNtLCBsaW5lVmlldywgZGltcykge1xuICAgIGluc2VydExpbmVXaWRnZXRzRm9yKGNtLCBsaW5lVmlldy5saW5lLCBsaW5lVmlldywgZGltcywgdHJ1ZSk7XG4gICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcucmVzdFtpXSwgbGluZVZpZXcsIGRpbXMsIGZhbHNlKTsgfSB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHtcbiAgICBpZiAoIWxpbmUud2lkZ2V0cykgeyByZXR1cm4gfVxuICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgd2lkZ2V0ID0gd3NbaV0sIG5vZGUgPSBlbHQoXCJkaXZcIiwgW3dpZGdldC5ub2RlXSwgXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIiArICh3aWRnZXQuY2xhc3NOYW1lID8gXCIgXCIgKyB3aWRnZXQuY2xhc3NOYW1lIDogXCJcIikpO1xuICAgICAgaWYgKCF3aWRnZXQuaGFuZGxlTW91c2VFdmVudHMpIHsgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTsgfVxuICAgICAgcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgaWYgKGFsbG93QWJvdmUgJiYgd2lkZ2V0LmFib3ZlKVxuICAgICAgICB7IHdyYXAuaW5zZXJ0QmVmb3JlKG5vZGUsIGxpbmVWaWV3Lmd1dHRlciB8fCBsaW5lVmlldy50ZXh0KTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHdyYXAuYXBwZW5kQ2hpbGQobm9kZSk7IH1cbiAgICAgIHNpZ25hbExhdGVyKHdpZGdldCwgXCJyZWRyYXdcIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcG9zaXRpb25MaW5lV2lkZ2V0KHdpZGdldCwgbm9kZSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkge1xuICAobGluZVZpZXcuYWxpZ25hYmxlIHx8IChsaW5lVmlldy5hbGlnbmFibGUgPSBbXSkpLnB1c2gobm9kZSk7XG4gICAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJXaWR0aDtcbiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGRpbXMuZml4ZWRQb3MgKyBcInB4XCI7XG4gICAgICBpZiAoIXdpZGdldC5jb3Zlckd1dHRlcikge1xuICAgICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUucGFkZGluZ0xlZnQgPSBkaW1zLmd1dHRlclRvdGFsV2lkdGggKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gICAgfVxuICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpIHtcbiAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTtcbiAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gICAgICBpZiAoIXdpZGdldC5ub0hTY3JvbGwpIHsgbm9kZS5zdHlsZS5tYXJnaW5MZWZ0ID0gLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCArIFwicHhcIjsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdpZGdldEhlaWdodCh3aWRnZXQpIHtcbiAgICBpZiAod2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7IHJldHVybiB3aWRnZXQuaGVpZ2h0IH1cbiAgICB2YXIgY20gPSB3aWRnZXQuZG9jLmNtO1xuICAgIGlmICghY20pIHsgcmV0dXJuIDAgfVxuICAgIGlmICghY29udGFpbnMoZG9jdW1lbnQuYm9keSwgd2lkZ2V0Lm5vZGUpKSB7XG4gICAgICB2YXIgcGFyZW50U3R5bGUgPSBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIjtcbiAgICAgIGlmICh3aWRnZXQuY292ZXJHdXR0ZXIpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJtYXJnaW4tbGVmdDogLVwiICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgXCJweDtcIjsgfVxuICAgICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpXG4gICAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJ3aWR0aDogXCIgKyBjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggKyBcInB4O1wiOyB9XG4gICAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdChcImRpdlwiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0LmhlaWdodCA9IHdpZGdldC5ub2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0XG4gIH1cblxuICAvLyBSZXR1cm4gdHJ1ZSB3aGVuIHRoZSBnaXZlbiBtb3VzZSBldmVudCBoYXBwZW5lZCBpbiBhIHdpZGdldFxuICBmdW5jdGlvbiBldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHtcbiAgICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIW4gfHwgKG4ubm9kZVR5cGUgPT0gMSAmJiBuLmdldEF0dHJpYnV0ZShcImNtLWlnbm9yZS1ldmVudHNcIikgPT0gXCJ0cnVlXCIpIHx8XG4gICAgICAgICAgKG4ucGFyZW50Tm9kZSA9PSBkaXNwbGF5LnNpemVyICYmIG4gIT0gZGlzcGxheS5tb3ZlcikpXG4gICAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBPU0lUSU9OIE1FQVNVUkVNRU5UXG5cbiAgZnVuY3Rpb24gcGFkZGluZ1RvcChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldFRvcH1cbiAgZnVuY3Rpb24gcGFkZGluZ1ZlcnQoZGlzcGxheSkge3JldHVybiBkaXNwbGF5Lm1vdmVyLm9mZnNldEhlaWdodCAtIGRpc3BsYXkubGluZVNwYWNlLm9mZnNldEhlaWdodH1cbiAgZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZFBhZGRpbmdIKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIIH1cbiAgICB2YXIgZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgZWx0KFwicHJlXCIsIFwieFwiLCBcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpKTtcbiAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpIDogZS5jdXJyZW50U3R5bGU7XG4gICAgdmFyIGRhdGEgPSB7bGVmdDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpLCByaWdodDogcGFyc2VJbnQoc3R5bGUucGFkZGluZ1JpZ2h0KX07XG4gICAgaWYgKCFpc05hTihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgeyBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gZGF0YTsgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aCB9XG4gIGZ1bmN0aW9uIGRpc3BsYXlXaWR0aChjbSkge1xuICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFyV2lkdGhcbiAgfVxuICBmdW5jdGlvbiBkaXNwbGF5SGVpZ2h0KGNtKSB7XG4gICAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IC0gc2Nyb2xsR2FwKGNtKSAtIGNtLmRpc3BsYXkuYmFySGVpZ2h0XG4gIH1cblxuICAvLyBFbnN1cmUgdGhlIGxpbmVWaWV3LndyYXBwaW5nLmhlaWdodHMgYXJyYXkgaXMgcG9wdWxhdGVkLiBUaGlzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGJvdHRvbSBvZmZzZXRzIGZvciB0aGUgbGluZXMgdGhhdCBtYWtlIHVwIGEgZHJhd25cbiAgLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmVcbiAgLy8gaGVpZ2h0LlxuICBmdW5jdGlvbiBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgbGluZVZpZXcsIHJlY3QpIHtcbiAgICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgY3VyV2lkdGggPSB3cmFwcGluZyAmJiBkaXNwbGF5V2lkdGgoY20pO1xuICAgIGlmICghbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzIHx8IHdyYXBwaW5nICYmIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggIT0gY3VyV2lkdGgpIHtcbiAgICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107XG4gICAgICBpZiAod3JhcHBpbmcpIHtcbiAgICAgICAgbGluZVZpZXcubWVhc3VyZS53aWR0aCA9IGN1cldpZHRoO1xuICAgICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICB2YXIgY3VyID0gcmVjdHNbaV0sIG5leHQgPSByZWN0c1tpICsgMV07XG4gICAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKVxuICAgICAgICAgICAgeyBoZWlnaHRzLnB1c2goKGN1ci5ib3R0b20gKyBuZXh0LnRvcCkgLyAyIC0gcmVjdC50b3ApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhlaWdodHMucHVzaChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTtcbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSBtYXAgKG1hcHBpbmcgY2hhcmFjdGVyIG9mZnNldHMgdG8gdGV4dCBub2RlcykgYW5kIGFcbiAgLy8gbWVhc3VyZW1lbnQgY2FjaGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKEEgbGluZSB2aWV3IG1pZ2h0XG4gIC8vIGNvbnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LilcbiAgZnVuY3Rpb24gbWFwRnJvbUxpbmVWaWV3KGxpbmVWaWV3LCBsaW5lLCBsaW5lTikge1xuICAgIGlmIChsaW5lVmlldy5saW5lID09IGxpbmUpXG4gICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVWaWV3LnJlc3QubGVuZ3RoOyBpKyspXG4gICAgICB7IGlmIChsaW5lVmlldy5yZXN0W2ldID09IGxpbmUpXG4gICAgICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldfSB9IH1cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSQxKyspXG4gICAgICB7IGlmIChsaW5lTm8obGluZVZpZXcucmVzdFtpJDFdKSA+IGxpbmVOKVxuICAgICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaSQxXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2kkMV0sIGJlZm9yZTogdHJ1ZX0gfSB9XG4gIH1cblxuICAvLyBSZW5kZXIgYSBsaW5lIGludG8gdGhlIGhpZGRlbiBub2RlIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZC4gVXNlZFxuICAvLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LlxuICBmdW5jdGlvbiB1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50KGNtLCBsaW5lKSB7XG4gICAgbGluZSA9IHZpc3VhbExpbmUobGluZSk7XG4gICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpO1xuICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbmV3IExpbmVWaWV3KGNtLmRvYywgbGluZSwgbGluZU4pO1xuICAgIHZpZXcubGluZU4gPSBsaW5lTjtcbiAgICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7XG4gICAgdmlldy50ZXh0ID0gYnVpbHQucHJlO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGNtLmRpc3BsYXkubGluZU1lYXN1cmUsIGJ1aWx0LnByZSk7XG4gICAgcmV0dXJuIHZpZXdcbiAgfVxuXG4gIC8vIEdldCBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCAoaW4gbGluZS1sb2NhbCBjb29yZGluYXRlcylcbiAgLy8gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhcihjbSwgbGluZSwgY2gsIGJpYXMpIHtcbiAgICByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSwgY2gsIGJpYXMpXG4gIH1cblxuICAvLyBGaW5kIGEgbGluZSB2aWV3IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGdpdmVuIGxpbmUgbnVtYmVyLlxuICBmdW5jdGlvbiBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKSB7XG4gICAgaWYgKGxpbmVOID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgcmV0dXJuIGNtLmRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lTildIH1cbiAgICB2YXIgZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgIGlmIChleHQgJiYgbGluZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IHJldHVybiBleHQgfVxuICB9XG5cbiAgLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBzdGVwcywgdGhlIHNldC11cCB3b3JrIHRoYXRcbiAgLy8gYXBwbGllcyB0byB0aGUgd2hvbGUgbGluZSwgYW5kIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgYWN0dWFsXG4gIC8vIGNoYXJhY3Rlci4gRnVuY3Rpb25zIGxpa2UgY29vcmRzQ2hhciwgdGhhdCBuZWVkIHRvIGRvIGEgbG90IG9mXG4gIC8vIG1lYXN1cmVtZW50cyBpbiBhIHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3JrIGlzXG4gIC8vIG9ubHkgZG9uZSBvbmNlLlxuICBmdW5jdGlvbiBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpIHtcbiAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7XG4gICAgdmFyIHZpZXcgPSBmaW5kVmlld0ZvckxpbmUoY20sIGxpbmVOKTtcbiAgICBpZiAodmlldyAmJiAhdmlldy50ZXh0KSB7XG4gICAgICB2aWV3ID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZpZXcgJiYgdmlldy5jaGFuZ2VzKSB7XG4gICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgdmlldywgbGluZU4sIGdldERpbWVuc2lvbnMoY20pKTtcbiAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF2aWV3KVxuICAgICAgeyB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7IH1cblxuICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIGxpbmVOKTtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCxcbiAgICAgIG1hcDogaW5mby5tYXAsIGNhY2hlOiBpbmZvLmNhY2hlLCBiZWZvcmU6IGluZm8uYmVmb3JlLFxuICAgICAgaGFzSGVpZ2h0czogZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBHaXZlbiBhIHByZXBhcmVkIG1lYXN1cmVtZW50IG9iamVjdCwgbWVhc3VyZXMgdGhlIHBvc2l0aW9uIG9mIGFuXG4gIC8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLlxuICBmdW5jdGlvbiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMsIHZhckhlaWdodCkge1xuICAgIGlmIChwcmVwYXJlZC5iZWZvcmUpIHsgY2ggPSAtMTsgfVxuICAgIHZhciBrZXkgPSBjaCArIChiaWFzIHx8IFwiXCIpLCBmb3VuZDtcbiAgICBpZiAocHJlcGFyZWQuY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgZm91bmQgPSBwcmVwYXJlZC5jYWNoZVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXByZXBhcmVkLnJlY3QpXG4gICAgICAgIHsgcHJlcGFyZWQucmVjdCA9IHByZXBhcmVkLnZpZXcudGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgfVxuICAgICAgaWYgKCFwcmVwYXJlZC5oYXNIZWlnaHRzKSB7XG4gICAgICAgIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBwcmVwYXJlZC52aWV3LCBwcmVwYXJlZC5yZWN0KTtcbiAgICAgICAgcHJlcGFyZWQuaGFzSGVpZ2h0cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBmb3VuZCA9IG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcyk7XG4gICAgICBpZiAoIWZvdW5kLmJvZ3VzKSB7IHByZXBhcmVkLmNhY2hlW2tleV0gPSBmb3VuZDsgfVxuICAgIH1cbiAgICByZXR1cm4ge2xlZnQ6IGZvdW5kLmxlZnQsIHJpZ2h0OiBmb3VuZC5yaWdodCxcbiAgICAgICAgICAgIHRvcDogdmFySGVpZ2h0ID8gZm91bmQucnRvcCA6IGZvdW5kLnRvcCxcbiAgICAgICAgICAgIGJvdHRvbTogdmFySGVpZ2h0ID8gZm91bmQucmJvdHRvbSA6IGZvdW5kLmJvdHRvbX1cbiAgfVxuXG4gIHZhciBudWxsUmVjdCA9IHtsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDB9O1xuXG4gIGZ1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwLCBjaCwgYmlhcykge1xuICAgIHZhciBub2RlLCBzdGFydCwgZW5kLCBjb2xsYXBzZSwgbVN0YXJ0LCBtRW5kO1xuICAgIC8vIEZpcnN0LCBzZWFyY2ggdGhlIGxpbmUgbWFwIGZvciB0aGUgdGV4dCBub2RlIGNvcnJlc3BvbmRpbmcgdG8sXG4gICAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIG1TdGFydCA9IG1hcFtpXTtcbiAgICAgIG1FbmQgPSBtYXBbaSArIDFdO1xuICAgICAgaWYgKGNoIDwgbVN0YXJ0KSB7XG4gICAgICAgIHN0YXJ0ID0gMDsgZW5kID0gMTtcbiAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPCBtRW5kKSB7XG4gICAgICAgIHN0YXJ0ID0gY2ggLSBtU3RhcnQ7XG4gICAgICAgIGVuZCA9IHN0YXJ0ICsgMTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PSBtYXAubGVuZ3RoIC0gMyB8fCBjaCA9PSBtRW5kICYmIG1hcFtpICsgM10gPiBjaCkge1xuICAgICAgICBlbmQgPSBtRW5kIC0gbVN0YXJ0O1xuICAgICAgICBzdGFydCA9IGVuZCAtIDE7XG4gICAgICAgIGlmIChjaCA+PSBtRW5kKSB7IGNvbGxhcHNlID0gXCJyaWdodFwiOyB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBub2RlID0gbWFwW2kgKyAyXTtcbiAgICAgICAgaWYgKG1TdGFydCA9PSBtRW5kICYmIGJpYXMgPT0gKG5vZGUuaW5zZXJ0TGVmdCA/IFwibGVmdFwiIDogXCJyaWdodFwiKSlcbiAgICAgICAgICB7IGNvbGxhcHNlID0gYmlhczsgfVxuICAgICAgICBpZiAoYmlhcyA9PSBcImxlZnRcIiAmJiBzdGFydCA9PSAwKVxuICAgICAgICAgIHsgd2hpbGUgKGkgJiYgbWFwW2kgLSAyXSA9PSBtYXBbaSAtIDNdICYmIG1hcFtpIC0gMV0uaW5zZXJ0TGVmdCkge1xuICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSAtPSAzKSArIDJdO1xuICAgICAgICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgaWYgKGJpYXMgPT0gXCJyaWdodFwiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpXG4gICAgICAgICAgeyB3aGlsZSAoaSA8IG1hcC5sZW5ndGggLSAzICYmIG1hcFtpICsgM10gPT0gbWFwW2kgKyA0XSAmJiAhbWFwW2kgKyA1XS5pbnNlcnRMZWZ0KSB7XG4gICAgICAgICAgICBub2RlID0gbWFwWyhpICs9IDMpICsgMl07XG4gICAgICAgICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICAgICAgICB9IH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtub2RlOiBub2RlLCBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBjb2xsYXBzZTogY29sbGFwc2UsIGNvdmVyU3RhcnQ6IG1TdGFydCwgY292ZXJFbmQ6IG1FbmR9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRVc2VmdWxSZWN0KHJlY3RzLCBiaWFzKSB7XG4gICAgdmFyIHJlY3QgPSBudWxsUmVjdDtcbiAgICBpZiAoYmlhcyA9PSBcImxlZnRcIikgeyBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoKHJlY3QgPSByZWN0c1tpXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH0gZWxzZSB7IGZvciAodmFyIGkkMSA9IHJlY3RzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSkge1xuICAgICAgaWYgKChyZWN0ID0gcmVjdHNbaSQxXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgICB9IH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgZnVuY3Rpb24gbWVhc3VyZUNoYXJJbm5lcihjbSwgcHJlcGFyZWQsIGNoLCBiaWFzKSB7XG4gICAgdmFyIHBsYWNlID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChwcmVwYXJlZC5tYXAsIGNoLCBiaWFzKTtcbiAgICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xsYXBzZTtcblxuICAgIHZhciByZWN0O1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHsgLy8gSWYgaXQgaXMgYSB0ZXh0IG5vZGUsIHVzZSBhIHJhbmdlIHRvIHJldHJpZXZlIHRoZSBjb29yZGluYXRlcy5cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7IC8vIFJldHJ5IGEgbWF4aW11bSBvZiA0IHRpbWVzIHdoZW4gbm9uc2Vuc2UgcmVjdGFuZ2xlcyBhcmUgcmV0dXJuZWRcbiAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBzdGFydCkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgd2hpbGUgKHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQgPCBwbGFjZS5jb3ZlckVuZCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgZW5kKSkpIHsgKytlbmQ7IH1cbiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmIHN0YXJ0ID09IDAgJiYgZW5kID09IHBsYWNlLmNvdmVyRW5kIC0gcGxhY2UuY292ZXJTdGFydClcbiAgICAgICAgICB7IHJlY3QgPSBub2RlLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgcmVjdCA9IGdldFVzZWZ1bFJlY3QocmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Q2xpZW50UmVjdHMoKSwgYmlhcyk7IH1cbiAgICAgICAgaWYgKHJlY3QubGVmdCB8fCByZWN0LnJpZ2h0IHx8IHN0YXJ0ID09IDApIHsgYnJlYWsgfVxuICAgICAgICBlbmQgPSBzdGFydDtcbiAgICAgICAgc3RhcnQgPSBzdGFydCAtIDE7XG4gICAgICAgIGNvbGxhcHNlID0gXCJyaWdodFwiO1xuICAgICAgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyByZWN0ID0gbWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyhjbS5kaXNwbGF5Lm1lYXN1cmUsIHJlY3QpOyB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXQgaXMgYSB3aWRnZXQsIHNpbXBseSBnZXQgdGhlIGJveCBmb3IgdGhlIHdob2xlIHdpZGdldC5cbiAgICAgIGlmIChzdGFydCA+IDApIHsgY29sbGFwc2UgPSBiaWFzID0gXCJyaWdodFwiOyB9XG4gICAgICB2YXIgcmVjdHM7XG4gICAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgKHJlY3RzID0gbm9kZS5nZXRDbGllbnRSZWN0cygpKS5sZW5ndGggPiAxKVxuICAgICAgICB7IHJlY3QgPSByZWN0c1tiaWFzID09IFwicmlnaHRcIiA/IHJlY3RzLmxlbmd0aCAtIDEgOiAwXTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgfVxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpKSB7XG4gICAgICB2YXIgclNwYW4gPSBub2RlLnBhcmVudE5vZGUuZ2V0Q2xpZW50UmVjdHMoKVswXTtcbiAgICAgIGlmIChyU3BhbilcbiAgICAgICAgeyByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmVjdCA9IG51bGxSZWN0OyB9XG4gICAgfVxuXG4gICAgdmFyIHJ0b3AgPSByZWN0LnRvcCAtIHByZXBhcmVkLnJlY3QudG9wLCByYm90ID0gcmVjdC5ib3R0b20gLSBwcmVwYXJlZC5yZWN0LnRvcDtcbiAgICB2YXIgbWlkID0gKHJ0b3AgKyByYm90KSAvIDI7XG4gICAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3Lm1lYXN1cmUuaGVpZ2h0cztcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBoZWlnaHRzLmxlbmd0aCAtIDE7IGkrKylcbiAgICAgIHsgaWYgKG1pZCA8IGhlaWdodHNbaV0pIHsgYnJlYWsgfSB9XG4gICAgdmFyIHRvcCA9IGkgPyBoZWlnaHRzW2kgLSAxXSA6IDAsIGJvdCA9IGhlaWdodHNbaV07XG4gICAgdmFyIHJlc3VsdCA9IHtsZWZ0OiAoY29sbGFwc2UgPT0gXCJyaWdodFwiID8gcmVjdC5yaWdodCA6IHJlY3QubGVmdCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09IFwibGVmdFwiID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICB0b3A6IHRvcCwgYm90dG9tOiBib3R9O1xuICAgIGlmICghcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSB7IHJlc3VsdC5ib2d1cyA9IHRydWU7IH1cbiAgICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSkgeyByZXN1bHQucnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmdcbiAgLy8gcmV0dXJuZWQgaW5jb3JyZWN0bHkgd2hlbiB6b29tZWQgb24gSUUxMCBhbmQgYmVsb3cuXG4gIGZ1bmN0aW9uIG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmcobWVhc3VyZSwgcmVjdCkge1xuICAgIGlmICghd2luZG93LnNjcmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fFxuICAgICAgICBzY3JlZW4ubG9naWNhbFhEUEkgPT0gc2NyZWVuLmRldmljZVhEUEkgfHwgIWhhc0JhZFpvb21lZFJlY3RzKG1lYXN1cmUpKVxuICAgICAgeyByZXR1cm4gcmVjdCB9XG4gICAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2FsWERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJO1xuICAgIHZhciBzY2FsZVkgPSBzY3JlZW4ubG9naWNhbFlEUEkgLyBzY3JlZW4uZGV2aWNlWURQSTtcbiAgICByZXR1cm4ge2xlZnQ6IHJlY3QubGVmdCAqIHNjYWxlWCwgcmlnaHQ6IHJlY3QucmlnaHQgKiBzY2FsZVgsXG4gICAgICAgICAgICB0b3A6IHJlY3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihsaW5lVmlldykge1xuICAgIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmNhY2hlID0ge307XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgPSBudWxsO1xuICAgICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICB7IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldID0ge307IH0gfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pIHtcbiAgICBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZSA9IG51bGw7XG4gICAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspXG4gICAgICB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IoY20uZGlzcGxheS52aWV3W2ldKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJDYWNoZXMoY20pIHtcbiAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKTtcbiAgICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgY20uZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7IH1cbiAgICBjbS5kaXNwbGF5LmxpbmVOdW1DaGFycyA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWCgpIHtcbiAgICAvLyBXb3JrIGFyb3VuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00ODkyMDZcbiAgICAvLyB3aGljaCBjYXVzZXMgcGFnZV9PZmZzZXQgYW5kIGJvdW5kaW5nIGNsaWVudCByZWN0cyB0byB1c2VcbiAgICAvLyBkaWZmZXJlbnQgcmVmZXJlbmNlIHZpZXdwb3J0cyBhbmQgaW52YWxpZGF0ZSBvdXIgY2FsY3VsYXRpb25zLlxuICAgIGlmIChjaHJvbWUgJiYgYW5kcm9pZCkgeyByZXR1cm4gLShkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpbkxlZnQpKSB9XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnRcbiAgfVxuICBmdW5jdGlvbiBwYWdlU2Nyb2xsWSgpIHtcbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQpIHsgcmV0dXJuIC0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpblRvcCkpIH1cbiAgICByZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuc2Nyb2xsVG9wXG4gIH1cblxuICBmdW5jdGlvbiB3aWRnZXRUb3BIZWlnaHQobGluZU9iaikge1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIGlmIChsaW5lT2JqLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lT2JqLndpZGdldHMubGVuZ3RoOyArK2kpIHsgaWYgKGxpbmVPYmoud2lkZ2V0c1tpXS5hYm92ZSlcbiAgICAgIHsgaGVpZ2h0ICs9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOyB9IH0gfVxuICAgIHJldHVybiBoZWlnaHRcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbFxuICAvLyBjb29yZGluYXRlcyBpbnRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uIENvbnRleHQgbWF5IGJlIG9uZSBvZlxuICAvLyBcImxpbmVcIiwgXCJkaXZcIiAoZGlzcGxheS5saW5lRGl2KSwgXCJsb2NhbFwiLi9udWxsIChlZGl0b3IpLCBcIndpbmRvd1wiLFxuICAvLyBvciBcInBhZ2VcIi5cbiAgZnVuY3Rpb24gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCByZWN0LCBjb250ZXh0LCBpbmNsdWRlV2lkZ2V0cykge1xuICAgIGlmICghaW5jbHVkZVdpZGdldHMpIHtcbiAgICAgIHZhciBoZWlnaHQgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgICByZWN0LnRvcCArPSBoZWlnaHQ7IHJlY3QuYm90dG9tICs9IGhlaWdodDtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsaW5lXCIpIHsgcmV0dXJuIHJlY3QgfVxuICAgIGlmICghY29udGV4dCkgeyBjb250ZXh0ID0gXCJsb2NhbFwiOyB9XG4gICAgdmFyIHlPZmYgPSBoZWlnaHRBdExpbmUobGluZU9iaik7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiKSB7IHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsgfVxuICAgIGVsc2UgeyB5T2ZmIC09IGNtLmRpc3BsYXkudmlld09mZnNldDsgfVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiIHx8IGNvbnRleHQgPT0gXCJ3aW5kb3dcIikge1xuICAgICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHlPZmYgKz0gbE9mZi50b3AgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxZKCkpO1xuICAgICAgdmFyIHhPZmYgPSBsT2ZmLmxlZnQgKyAoY29udGV4dCA9PSBcIndpbmRvd1wiID8gMCA6IHBhZ2VTY3JvbGxYKCkpO1xuICAgICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjtcbiAgICB9XG4gICAgcmVjdC50b3AgKz0geU9mZjsgcmVjdC5ib3R0b20gKz0geU9mZjtcbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gQ292ZXJ0cyBhIGJveCBmcm9tIFwiZGl2XCIgY29vcmRzIHRvIGFub3RoZXIgY29vcmRpbmF0ZSBzeXN0ZW0uXG4gIC8vIENvbnRleHQgbWF5IGJlIFwid2luZG93XCIsIFwicGFnZVwiLCBcImRpdlwiLCBvciBcImxvY2FsXCIuL251bGwuXG4gIGZ1bmN0aW9uIGZyb21Db29yZFN5c3RlbShjbSwgY29vcmRzLCBjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT0gXCJkaXZcIikgeyByZXR1cm4gY29vcmRzIH1cbiAgICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wO1xuICAgIC8vIEZpcnN0IG1vdmUgaW50byBcInBhZ2VcIiBjb29yZGluYXRlIHN5c3RlbVxuICAgIGlmIChjb250ZXh0ID09IFwicGFnZVwiKSB7XG4gICAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7XG4gICAgICB0b3AgLT0gcGFnZVNjcm9sbFkoKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiIHx8ICFjb250ZXh0KSB7XG4gICAgICB2YXIgbG9jYWxCb3ggPSBjbS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgbGVmdCArPSBsb2NhbEJveC5sZWZ0O1xuICAgICAgdG9wICs9IGxvY2FsQm94LnRvcDtcbiAgICB9XG5cbiAgICB2YXIgbGluZVNwYWNlQm94ID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHtsZWZ0OiBsZWZ0IC0gbGluZVNwYWNlQm94LmxlZnQsIHRvcDogdG9wIC0gbGluZVNwYWNlQm94LnRvcH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYXJDb29yZHMoY20sIHBvcywgY29udGV4dCwgbGluZU9iaiwgYmlhcykge1xuICAgIGlmICghbGluZU9iaikgeyBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTsgfVxuICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJpYXMpLCBjb250ZXh0KVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJveCBmb3IgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHdoaWNoIG1heSBoYXZlIGFuXG4gIC8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3JcbiAgLy8gb24gYSBiaWRpIGJvdW5kYXJ5LlxuICAvLyBBIGN1cnNvciBQb3MobGluZSwgY2hhciwgXCJiZWZvcmVcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXIgLSAxYFxuICAvLyBhbmQgYWZ0ZXIgYGNoYXIgLSAxYCBpbiB3cml0aW5nIG9yZGVyIG9mIGBjaGFyIC0gMWBcbiAgLy8gQSBjdXJzb3IgUG9zKGxpbmUsIGNoYXIsIFwiYWZ0ZXJcIikgaXMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmUgYXMgYGNoYXJgXG4gIC8vIGFuZCBiZWZvcmUgYGNoYXJgIGluIHdyaXRpbmcgb3JkZXIgb2YgYGNoYXJgXG4gIC8vIEV4YW1wbGVzICh1cHBlci1jYXNlIGxldHRlcnMgYXJlIFJUTCwgbG93ZXItY2FzZSBhcmUgTFRSKTpcbiAgLy8gICAgIFBvcygwLCAxLCAuLi4pXG4gIC8vICAgICBiZWZvcmUgICBhZnRlclxuICAvLyBhYiAgICAgYXxiICAgICBhfGJcbiAgLy8gYUIgICAgIGF8QiAgICAgYUJ8XG4gIC8vIEFiICAgICB8QWIgICAgIEF8YlxuICAvLyBBQiAgICAgQnxBICAgICBCfEFcbiAgLy8gRXZlcnkgcG9zaXRpb24gYWZ0ZXIgdGhlIGxhc3QgY2hhcmFjdGVyIG9uIGEgbGluZSBpcyBjb25zaWRlcmVkIHRvIHN0aWNrXG4gIC8vIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvbiB0aGUgbGluZS5cbiAgZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7XG4gICAgbGluZU9iaiA9IGxpbmVPYmogfHwgZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkge1xuICAgICAgdmFyIG0gPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoLCByaWdodCA/IFwicmlnaHRcIiA6IFwibGVmdFwiLCB2YXJIZWlnaHQpO1xuICAgICAgaWYgKHJpZ2h0KSB7IG0ubGVmdCA9IG0ucmlnaHQ7IH0gZWxzZSB7IG0ucmlnaHQgPSBtLmxlZnQ7IH1cbiAgICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQpXG4gICAgfVxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pLCBjaCA9IHBvcy5jaCwgc3RpY2t5ID0gcG9zLnN0aWNreTtcbiAgICBpZiAoY2ggPj0gbGluZU9iai50ZXh0Lmxlbmd0aCkge1xuICAgICAgY2ggPSBsaW5lT2JqLnRleHQubGVuZ3RoO1xuICAgICAgc3RpY2t5ID0gXCJiZWZvcmVcIjtcbiAgICB9IGVsc2UgaWYgKGNoIDw9IDApIHtcbiAgICAgIGNoID0gMDtcbiAgICAgIHN0aWNreSA9IFwiYWZ0ZXJcIjtcbiAgICB9XG4gICAgaWYgKCFvcmRlcikgeyByZXR1cm4gZ2V0KHN0aWNreSA9PSBcImJlZm9yZVwiID8gY2ggLSAxIDogY2gsIHN0aWNreSA9PSBcImJlZm9yZVwiKSB9XG5cbiAgICBmdW5jdGlvbiBnZXRCaWRpKGNoLCBwYXJ0UG9zLCBpbnZlcnQpIHtcbiAgICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCA9PSAxO1xuICAgICAgcmV0dXJuIGdldChpbnZlcnQgPyBjaCAtIDEgOiBjaCwgcmlnaHQgIT0gaW52ZXJ0KVxuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpO1xuICAgIHZhciBvdGhlciA9IGJpZGlPdGhlcjtcbiAgICB2YXIgdmFsID0gZ2V0QmlkaShjaCwgcGFydFBvcywgc3RpY2t5ID09IFwiYmVmb3JlXCIpO1xuICAgIGlmIChvdGhlciAhPSBudWxsKSB7IHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIG90aGVyLCBzdGlja3kgIT0gXCJiZWZvcmVcIik7IH1cbiAgICByZXR1cm4gdmFsXG4gIH1cblxuICAvLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvclxuICAvLyBpbnRlcm1lZGlhdGUgc2Nyb2xsIHVwZGF0ZXMuXG4gIGZ1bmN0aW9uIGVzdGltYXRlQ29vcmRzKGNtLCBwb3MpIHtcbiAgICB2YXIgbGVmdCA9IDA7XG4gICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBsZWZ0ID0gY2hhcldpZHRoKGNtLmRpc3BsYXkpICogcG9zLmNoOyB9XG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpO1xuICAgIHZhciB0b3AgPSBoZWlnaHRBdExpbmUobGluZU9iaikgKyBwYWRkaW5nVG9wKGNtLmRpc3BsYXkpO1xuICAgIHJldHVybiB7bGVmdDogbGVmdCwgcmlnaHQ6IGxlZnQsIHRvcDogdG9wLCBib3R0b206IHRvcCArIGxpbmVPYmouaGVpZ2h0fVxuICB9XG5cbiAgLy8gUG9zaXRpb25zIHJldHVybmVkIGJ5IGNvb3Jkc0NoYXIgY29udGFpbiBzb21lIGV4dHJhIGluZm9ybWF0aW9uLlxuICAvLyB4UmVsIGlzIHRoZSByZWxhdGl2ZSB4IHBvc2l0aW9uIG9mIHRoZSBpbnB1dCBjb29yZGluYXRlcyBjb21wYXJlZFxuICAvLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBjb29yZGluYXRlcyBhcmUgdG9cbiAgLy8gdGhlIHJpZ2h0IG9mIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24sIGZvciBleGFtcGxlKS4gV2hlbiBvdXRzaWRlXG4gIC8vIGlzIHRydWUsIHRoYXQgbWVhbnMgdGhlIGNvb3JkaW5hdGVzIGxpZSBvdXRzaWRlIHRoZSBsaW5lJ3NcbiAgLy8gdmVydGljYWwgcmFuZ2UuXG4gIGZ1bmN0aW9uIFBvc1dpdGhJbmZvKGxpbmUsIGNoLCBzdGlja3ksIG91dHNpZGUsIHhSZWwpIHtcbiAgICB2YXIgcG9zID0gUG9zKGxpbmUsIGNoLCBzdGlja3kpO1xuICAgIHBvcy54UmVsID0geFJlbDtcbiAgICBpZiAob3V0c2lkZSkgeyBwb3Mub3V0c2lkZSA9IG91dHNpZGU7IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gY2xvc2VzdCB0byB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuXG4gIC8vIElucHV0IG11c3QgYmUgbGluZVNwYWNlLWxvY2FsIChcImRpdlwiIGNvb3JkaW5hdGUgc3lzdGVtKS5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2M7XG4gICAgeSArPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7XG4gICAgaWYgKHkgPCAwKSB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIG51bGwsIC0xLCAtMSkgfVxuICAgIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICAgIGlmIChsaW5lTiA+IGxhc3QpXG4gICAgICB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEsIGdldExpbmUoZG9jLCBsYXN0KS50ZXh0Lmxlbmd0aCwgbnVsbCwgMSwgMSkgfVxuICAgIGlmICh4IDwgMCkgeyB4ID0gMDsgfVxuXG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4pO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU4sIHgsIHkpO1xuICAgICAgdmFyIGNvbGxhcHNlZCA9IGNvbGxhcHNlZFNwYW5Bcm91bmQobGluZU9iaiwgZm91bmQuY2ggKyAoZm91bmQueFJlbCA+IDAgfHwgZm91bmQub3V0c2lkZSA+IDAgPyAxIDogMCkpO1xuICAgICAgaWYgKCFjb2xsYXBzZWQpIHsgcmV0dXJuIGZvdW5kIH1cbiAgICAgIHZhciByYW5nZUVuZCA9IGNvbGxhcHNlZC5maW5kKDEpO1xuICAgICAgaWYgKHJhbmdlRW5kLmxpbmUgPT0gbGluZU4pIHsgcmV0dXJuIHJhbmdlRW5kIH1cbiAgICAgIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbGluZU4gPSByYW5nZUVuZC5saW5lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB5KSB7XG4gICAgeSAtPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgdmFyIGVuZCA9IGxpbmVPYmoudGV4dC5sZW5ndGg7XG4gICAgdmFyIGJlZ2luID0gZmluZEZpcnN0KGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCAtIDEpLmJvdHRvbSA8PSB5OyB9LCBlbmQsIDApO1xuICAgIGVuZCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpLnRvcCA+IHk7IH0sIGJlZ2luLCBlbmQpO1xuICAgIHJldHVybiB7YmVnaW46IGJlZ2luLCBlbmQ6IGVuZH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpIHtcbiAgICBpZiAoIXByZXBhcmVkTWVhc3VyZSkgeyBwcmVwYXJlZE1lYXN1cmUgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopOyB9XG4gICAgdmFyIHRhcmdldFRvcCA9IGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpLCBcImxpbmVcIikudG9wO1xuICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXRUb3ApXG4gIH1cblxuICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHNpZGUgb2YgYSBib3ggaXMgYWZ0ZXIgdGhlIGdpdmVuXG4gIC8vIGNvb3JkaW5hdGVzLCBpbiB0b3AtdG8tYm90dG9tLCBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICBmdW5jdGlvbiBib3hJc0FmdGVyKGJveCwgeCwgeSwgbGVmdCkge1xuICAgIHJldHVybiBib3guYm90dG9tIDw9IHkgPyBmYWxzZSA6IGJveC50b3AgPiB5ID8gdHJ1ZSA6IChsZWZ0ID8gYm94LmxlZnQgOiBib3gucmlnaHQpID4geFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQ2hhcklubmVyKGNtLCBsaW5lT2JqLCBsaW5lTm8sIHgsIHkpIHtcbiAgICAvLyBNb3ZlIHkgaW50byBsaW5lLWxvY2FsIGNvb3JkaW5hdGUgc3BhY2VcbiAgICB5IC09IGhlaWdodEF0TGluZShsaW5lT2JqKTtcbiAgICB2YXIgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTtcbiAgICAvLyBXaGVuIGRpcmVjdGx5IGNhbGxpbmcgYG1lYXN1cmVDaGFyUHJlcGFyZWRgLCB3ZSBoYXZlIHRvIGFkanVzdFxuICAgIC8vIGZvciB0aGUgd2lkZ2V0cyBhdCB0aGlzIGxpbmUuXG4gICAgdmFyIHdpZGdldEhlaWdodCA9IHdpZGdldFRvcEhlaWdodChsaW5lT2JqKTtcbiAgICB2YXIgYmVnaW4gPSAwLCBlbmQgPSBsaW5lT2JqLnRleHQubGVuZ3RoLCBsdHIgPSB0cnVlO1xuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgY20uZG9jLmRpcmVjdGlvbik7XG4gICAgLy8gSWYgdGhlIGxpbmUgaXNuJ3QgcGxhaW4gbGVmdC10by1yaWdodCB0ZXh0LCBmaXJzdCBmaWd1cmUgb3V0XG4gICAgLy8gd2hpY2ggYmlkaSBzZWN0aW9uIHRoZSBjb29yZGluYXRlcyBmYWxsIGludG8uXG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICB2YXIgcGFydCA9IChjbS5vcHRpb25zLmxpbmVXcmFwcGluZyA/IGNvb3Jkc0JpZGlQYXJ0V3JhcHBlZCA6IGNvb3Jkc0JpZGlQYXJ0KVxuICAgICAgICAgICAgICAgICAgIChjbSwgbGluZU9iaiwgbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KTtcbiAgICAgIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIC8vIFRoZSBhd2t3YXJkIC0xIG9mZnNldHMgYXJlIG5lZWRlZCBiZWNhdXNlIGZpbmRGaXJzdCAoY2FsbGVkXG4gICAgICAvLyBvbiB0aGVzZSBiZWxvdykgd2lsbCB0cmVhdCBpdHMgZmlyc3QgYm91bmQgYXMgaW5jbHVzaXZlLFxuICAgICAgLy8gc2Vjb25kIGFzIGV4Y2x1c2l2ZSwgYnV0IHdlIHdhbnQgdG8gYWN0dWFsbHkgYWRkcmVzcyB0aGVcbiAgICAgIC8vIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnQncyByYW5nZVxuICAgICAgYmVnaW4gPSBsdHIgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMTtcbiAgICAgIGVuZCA9IGx0ciA/IHBhcnQudG8gOiBwYXJ0LmZyb20gLSAxO1xuICAgIH1cblxuICAgIC8vIEEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hvc2UgYm91bmRpbmcgYm94XG4gICAgLy8gc3RhcnRzIGFmdGVyIHRoZSBjb29yZGluYXRlcy4gSWYgd2UgcnVuIGFjcm9zcyBhbnkgd2hvc2UgYm94IHdyYXBcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIHN0b3JlIHRoYXQuXG4gICAgdmFyIGNoQXJvdW5kID0gbnVsbCwgYm94QXJvdW5kID0gbnVsbDtcbiAgICB2YXIgY2ggPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7XG4gICAgICB2YXIgYm94ID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCk7XG4gICAgICBib3gudG9wICs9IHdpZGdldEhlaWdodDsgYm94LmJvdHRvbSArPSB3aWRnZXRIZWlnaHQ7XG4gICAgICBpZiAoIWJveElzQWZ0ZXIoYm94LCB4LCB5LCBmYWxzZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGlmIChib3gudG9wIDw9IHkgJiYgYm94LmxlZnQgPD0geCkge1xuICAgICAgICBjaEFyb3VuZCA9IGNoO1xuICAgICAgICBib3hBcm91bmQgPSBib3g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sIGJlZ2luLCBlbmQpO1xuXG4gICAgdmFyIGJhc2VYLCBzdGlja3ksIG91dHNpZGUgPSBmYWxzZTtcbiAgICAvLyBJZiBhIGJveCBhcm91bmQgdGhlIGNvb3JkaW5hdGVzIHdhcyBmb3VuZCwgdXNlIHRoYXRcbiAgICBpZiAoYm94QXJvdW5kKSB7XG4gICAgICAvLyBEaXN0aW5ndWlzaCBjb29yZGluYXRlcyBuZWFyZXIgdG8gdGhlIGxlZnQgb3IgcmlnaHQgc2lkZSBvZiB0aGUgYm94XG4gICAgICB2YXIgYXRMZWZ0ID0geCAtIGJveEFyb3VuZC5sZWZ0IDwgYm94QXJvdW5kLnJpZ2h0IC0geCwgYXRTdGFydCA9IGF0TGVmdCA9PSBsdHI7XG4gICAgICBjaCA9IGNoQXJvdW5kICsgKGF0U3RhcnQgPyAwIDogMSk7XG4gICAgICBzdGlja3kgPSBhdFN0YXJ0ID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIGJhc2VYID0gYXRMZWZ0ID8gYm94QXJvdW5kLmxlZnQgOiBib3hBcm91bmQucmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIChBZGp1c3QgZm9yIGV4dGVuZGVkIGJvdW5kLCBpZiBuZWNlc3NhcnkuKVxuICAgICAgaWYgKCFsdHIgJiYgKGNoID09IGVuZCB8fCBjaCA9PSBiZWdpbikpIHsgY2grKzsgfVxuICAgICAgLy8gVG8gZGV0ZXJtaW5lIHdoaWNoIHNpZGUgdG8gYXNzb2NpYXRlIHdpdGgsIGdldCB0aGUgYm94IHRvIHRoZVxuICAgICAgLy8gbGVmdCBvZiB0aGUgY2hhcmFjdGVyIGFuZCBjb21wYXJlIGl0J3MgdmVydGljYWwgcG9zaXRpb24gdG8gdGhlXG4gICAgICAvLyBjb29yZGluYXRlc1xuICAgICAgc3RpY2t5ID0gY2ggPT0gMCA/IFwiYWZ0ZXJcIiA6IGNoID09IGxpbmVPYmoudGV4dC5sZW5ndGggPyBcImJlZm9yZVwiIDpcbiAgICAgICAgKG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2ggLSAobHRyID8gMSA6IDApKS5ib3R0b20gKyB3aWRnZXRIZWlnaHQgPD0geSkgPT0gbHRyID9cbiAgICAgICAgXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICAgIC8vIE5vdyBnZXQgYWNjdXJhdGUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgcGxhY2UsIGluIG9yZGVyIHRvIGdldCBhXG4gICAgICAvLyBiYXNlIFggcG9zaXRpb25cbiAgICAgIHZhciBjb29yZHMgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGNoLCBzdGlja3kpLCBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKTtcbiAgICAgIGJhc2VYID0gY29vcmRzLmxlZnQ7XG4gICAgICBvdXRzaWRlID0geSA8IGNvb3Jkcy50b3AgPyAtMSA6IHkgPj0gY29vcmRzLmJvdHRvbSA/IDEgOiAwO1xuICAgIH1cblxuICAgIGNoID0gc2tpcEV4dGVuZGluZ0NoYXJzKGxpbmVPYmoudGV4dCwgY2gsIDEpO1xuICAgIHJldHVybiBQb3NXaXRoSW5mbyhsaW5lTm8sIGNoLCBzdGlja3ksIG91dHNpZGUsIHggLSBiYXNlWClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3Jkc0JpZGlQYXJ0KGNtLCBsaW5lT2JqLCBsaW5lTm8sIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpIHtcbiAgICAvLyBCaWRpIHBhcnRzIGFyZSBzb3J0ZWQgbGVmdC10by1yaWdodCwgYW5kIGluIGEgbm9uLWxpbmUtd3JhcHBpbmdcbiAgICAvLyBzaXR1YXRpb24sIHdlIGNhbiB0YWtlIHRoaXMgb3JkZXJpbmcgdG8gY29ycmVzcG9uZCB0byB0aGUgdmlzdWFsXG4gICAgLy8gb3JkZXJpbmcuIFRoaXMgZmluZHMgdGhlIGZpcnN0IHBhcnQgd2hvc2UgZW5kIGlzIGFmdGVyIHRoZSBnaXZlblxuICAgIC8vIGNvb3JkaW5hdGVzLlxuICAgIHZhciBpbmRleCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoaSkge1xuICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXSwgbHRyID0gcGFydC5sZXZlbCAhPSAxO1xuICAgICAgcmV0dXJuIGJveElzQWZ0ZXIoY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBsdHIgPyBwYXJ0LnRvIDogcGFydC5mcm9tLCBsdHIgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKSwgeCwgeSwgdHJ1ZSlcbiAgICB9LCAwLCBvcmRlci5sZW5ndGggLSAxKTtcbiAgICB2YXIgcGFydCA9IG9yZGVyW2luZGV4XTtcbiAgICAvLyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJ0LCB0aGUgcGFydCdzIHN0YXJ0IGlzIGFsc28gYWZ0ZXJcbiAgICAvLyB0aGUgY29vcmRpbmF0ZXMsIGFuZCB0aGUgY29vcmRpbmF0ZXMgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUgYXNcbiAgICAvLyB0aGF0IHN0YXJ0LCBtb3ZlIG9uZSBwYXJ0IGJhY2suXG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdmFyIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIHZhciBzdGFydCA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgbHRyID8gcGFydC5mcm9tIDogcGFydC50bywgbHRyID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lXCIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7XG4gICAgICBpZiAoYm94SXNBZnRlcihzdGFydCwgeCwgeSwgdHJ1ZSkgJiYgc3RhcnQudG9wID4geSlcbiAgICAgICAgeyBwYXJ0ID0gb3JkZXJbaW5kZXggLSAxXTsgfVxuICAgIH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgZnVuY3Rpb24gY29vcmRzQmlkaVBhcnRXcmFwcGVkKGNtLCBsaW5lT2JqLCBfbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KSB7XG4gICAgLy8gSW4gYSB3cmFwcGVkIGxpbmUsIHJ0bCB0ZXh0IG9uIHdyYXBwaW5nIGJvdW5kYXJpZXMgY2FuIGRvIHRoaW5nc1xuICAgIC8vIHRoYXQgZG9uJ3QgY29ycmVzcG9uZCB0byB0aGUgb3JkZXJpbmcgaW4gb3VyIGBvcmRlcmAgYXJyYXkgYXRcbiAgICAvLyBhbGwsIHNvIGEgYmluYXJ5IHNlYXJjaCBkb2Vzbid0IHdvcmssIGFuZCB3ZSB3YW50IHRvIHJldHVybiBhXG4gICAgLy8gcGFydCB0aGF0IG9ubHkgc3BhbnMgb25lIGxpbmUgc28gdGhhdCB0aGUgYmluYXJ5IHNlYXJjaCBpblxuICAgIC8vIGNvb3Jkc0NoYXJJbm5lciBpcyBzYWZlLiBBcyBzdWNoLCB3ZSBmaXJzdCBmaW5kIHRoZSBleHRlbnQgb2YgdGhlXG4gICAgLy8gd3JhcHBlZCBsaW5lLCBhbmQgdGhlbiBkbyBhIGZsYXQgc2VhcmNoIGluIHdoaWNoIHdlIGRpc2NhcmQgYW55XG4gICAgLy8gc3BhbnMgdGhhdCBhcmVuJ3Qgb24gdGhlIGxpbmUuXG4gICAgdmFyIHJlZiA9IHdyYXBwZWRMaW5lRXh0ZW50KGNtLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUsIHkpO1xuICAgIHZhciBiZWdpbiA9IHJlZi5iZWdpbjtcbiAgICB2YXIgZW5kID0gcmVmLmVuZDtcbiAgICBpZiAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGVuZCAtIDEpKSkgeyBlbmQtLTsgfVxuICAgIHZhciBwYXJ0ID0gbnVsbCwgY2xvc2VzdERpc3QgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwID0gb3JkZXJbaV07XG4gICAgICBpZiAocC5mcm9tID49IGVuZCB8fCBwLnRvIDw9IGJlZ2luKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBsdHIgPSBwLmxldmVsICE9IDE7XG4gICAgICB2YXIgZW5kWCA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgbHRyID8gTWF0aC5taW4oZW5kLCBwLnRvKSAtIDEgOiBNYXRoLm1heChiZWdpbiwgcC5mcm9tKSkucmlnaHQ7XG4gICAgICAvLyBXZWlnaCBhZ2FpbnN0IHNwYW5zIGVuZGluZyBiZWZvcmUgdGhpcywgc28gdGhhdCB0aGV5IGFyZSBvbmx5XG4gICAgICAvLyBwaWNrZWQgaWYgbm90aGluZyBlbmRzIGFmdGVyXG4gICAgICB2YXIgZGlzdCA9IGVuZFggPCB4ID8geCAtIGVuZFggKyAxZTkgOiBlbmRYIC0geDtcbiAgICAgIGlmICghcGFydCB8fCBjbG9zZXN0RGlzdCA+IGRpc3QpIHtcbiAgICAgICAgcGFydCA9IHA7XG4gICAgICAgIGNsb3Nlc3REaXN0ID0gZGlzdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwYXJ0KSB7IHBhcnQgPSBvcmRlcltvcmRlci5sZW5ndGggLSAxXTsgfVxuICAgIC8vIENsaXAgdGhlIHBhcnQgdG8gdGhlIHdyYXBwZWQgbGluZS5cbiAgICBpZiAocGFydC5mcm9tIDwgYmVnaW4pIHsgcGFydCA9IHtmcm9tOiBiZWdpbiwgdG86IHBhcnQudG8sIGxldmVsOiBwYXJ0LmxldmVsfTsgfVxuICAgIGlmIChwYXJ0LnRvID4gZW5kKSB7IHBhcnQgPSB7ZnJvbTogcGFydC5mcm9tLCB0bzogZW5kLCBsZXZlbDogcGFydC5sZXZlbH07IH1cbiAgICByZXR1cm4gcGFydFxuICB9XG5cbiAgdmFyIG1lYXN1cmVUZXh0O1xuICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IHRleHQgaGVpZ2h0LlxuICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3BsYXkpIHtcbiAgICBpZiAoZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ICE9IG51bGwpIHsgcmV0dXJuIGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCB9XG4gICAgaWYgKG1lYXN1cmVUZXh0ID09IG51bGwpIHtcbiAgICAgIG1lYXN1cmVUZXh0ID0gZWx0KFwicHJlXCIsIG51bGwsIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgICAvLyBNZWFzdXJlIGEgYnVuY2ggb2YgbGluZXMsIGZvciBicm93c2VycyB0aGF0IGNvbXB1dGVcbiAgICAgIC8vIGZyYWN0aW9uYWwgaGVpZ2h0cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDk7ICsraSkge1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChlbHQoXCJiclwiKSk7XG4gICAgICB9XG4gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIikpO1xuICAgIH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIG1lYXN1cmVUZXh0KTtcbiAgICB2YXIgaGVpZ2h0ID0gbWVhc3VyZVRleHQub2Zmc2V0SGVpZ2h0IC8gNTA7XG4gICAgaWYgKGhlaWdodCA+IDMpIHsgZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gaGVpZ2h0OyB9XG4gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5tZWFzdXJlKTtcbiAgICByZXR1cm4gaGVpZ2h0IHx8IDFcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHdpZHRoLlxuICBmdW5jdGlvbiBjaGFyV2lkdGgoZGlzcGxheSkge1xuICAgIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCB9XG4gICAgdmFyIGFuY2hvciA9IGVsdChcInNwYW5cIiwgXCJ4eHh4eHh4eHh4XCIpO1xuICAgIHZhciBwcmUgPSBlbHQoXCJwcmVcIiwgW2FuY2hvcl0sIFwiQ29kZU1pcnJvci1saW5lLWxpa2VcIik7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBwcmUpO1xuICAgIHZhciByZWN0ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB3aWR0aCA9IChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAvIDEwO1xuICAgIGlmICh3aWR0aCA+IDIpIHsgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsgfVxuICAgIHJldHVybiB3aWR0aCB8fCAxMFxuICB9XG5cbiAgLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMgYW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZVxuICAvLyB2aWV3LCBzbyB0aGF0IHdlIGRvbid0IGludGVybGVhdmUgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgRE9NLlxuICBmdW5jdGlvbiBnZXREaW1lbnNpb25zKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdpZHRoID0ge307XG4gICAgdmFyIGd1dHRlckxlZnQgPSBkLmd1dHRlcnMuY2xpZW50TGVmdDtcbiAgICBmb3IgKHZhciBuID0gZC5ndXR0ZXJzLmZpcnN0Q2hpbGQsIGkgPSAwOyBuOyBuID0gbi5uZXh0U2libGluZywgKytpKSB7XG4gICAgICB2YXIgaWQgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ldLmNsYXNzTmFtZTtcbiAgICAgIGxlZnRbaWRdID0gbi5vZmZzZXRMZWZ0ICsgbi5jbGllbnRMZWZ0ICsgZ3V0dGVyTGVmdDtcbiAgICAgIHdpZHRoW2lkXSA9IG4uY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB7Zml4ZWRQb3M6IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGQpLFxuICAgICAgICAgICAgZ3V0dGVyVG90YWxXaWR0aDogZC5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgZ3V0dGVyTGVmdDogbGVmdCxcbiAgICAgICAgICAgIGd1dHRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIHdyYXBwZXJXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRofVxuICB9XG5cbiAgLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuICAvLyBidXQgdXNpbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IHRvIGdldCBhIHN1Yi1waXhlbC1hY2N1cmF0ZVxuICAvLyByZXN1bHQuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHtcbiAgICByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBlc3RpbWF0ZXMgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHRvIHVzZSBhc1xuICAvLyBmaXJzdCBhcHByb3hpbWF0aW9uIHVudGlsIHRoZSBsaW5lIGJlY29tZXMgdmlzaWJsZSAoYW5kIGlzIHRodXNcbiAgLy8gcHJvcGVybHkgbWVhc3VyYWJsZSkuXG4gIGZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7XG4gICAgdmFyIHRoID0gdGV4dEhlaWdodChjbS5kaXNwbGF5KSwgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgICB2YXIgcGVyTGluZSA9IHdyYXBwaW5nICYmIE1hdGgubWF4KDUsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoY20uZGlzcGxheSkgLSAzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lSXNIaWRkZW4oY20uZG9jLCBsaW5lKSkgeyByZXR1cm4gMCB9XG5cbiAgICAgIHZhciB3aWRnZXRzSGVpZ2h0ID0gMDtcbiAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGxpbmUud2lkZ2V0c1tpXS5oZWlnaHQpIHsgd2lkZ2V0c0hlaWdodCArPSBsaW5lLndpZGdldHNbaV0uaGVpZ2h0OyB9XG4gICAgICB9IH1cblxuICAgICAgaWYgKHdyYXBwaW5nKVxuICAgICAgICB7IHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgKE1hdGguY2VpbChsaW5lLnRleHQubGVuZ3RoIC8gcGVyTGluZSkgfHwgMSkgKiB0aCB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aCB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIGVzdCA9IGVzdGltYXRlSGVpZ2h0KGNtKTtcbiAgICBkb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIGVzdEhlaWdodCA9IGVzdChsaW5lKTtcbiAgICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOyB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBHaXZlbiBhIG1vdXNlIGV2ZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uLiBJZiBsaWJlcmFsXG4gIC8vIGlzIGZhbHNlLCBpdCBjaGVja3Mgd2hldGhlciBhIGd1dHRlciBvciBzY3JvbGxiYXIgd2FzIGNsaWNrZWQsXG4gIC8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVjdGFuZ3VsYXJcbiAgLy8gc2VsZWN0aW9ucywgYW5kIHRyaWVzIHRvIGVzdGltYXRlIGEgY2hhcmFjdGVyIHBvc2l0aW9uIGV2ZW4gZm9yXG4gIC8vIGNvb3JkaW5hdGVzIGJleW9uZCB0aGUgcmlnaHQgb2YgdGhlIHRleHQuXG4gIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9yUmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoIWxpYmVyYWwgJiYgZV90YXJnZXQoZSkuZ2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIikgPT0gXCJ0cnVlXCIpIHsgcmV0dXJuIG51bGwgfVxuXG4gICAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LlxuICAgIHRyeSB7IHggPSBlLmNsaWVudFggLSBzcGFjZS5sZWZ0OyB5ID0gZS5jbGllbnRZIC0gc3BhY2UudG9wOyB9XG4gICAgY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTtcbiAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA+IDAgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHtcbiAgICAgIHZhciBjb2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFiU2l6ZSkgLSBsaW5lLmxlbmd0aDtcbiAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSAtIGNvbERpZmYpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3Jkc1xuICB9XG5cbiAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbFxuICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuXG4gIGZ1bmN0aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHtcbiAgICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gbnVsbCB9XG4gICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tO1xuICAgIGlmIChuIDwgMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuIC09IHZpZXdbaV0uc2l6ZTtcbiAgICAgIGlmIChuIDwgMCkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGVcbiAgLy8gZG9jdW1lbnQuIEZyb20gYW5kIHRvIGFyZSBpbiBwcmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzXG4gIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzXG4gIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheVxuICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVnTGluZUNoYW5nZSAoYmVsb3cpXG4gIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLlxuICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7XG4gICAgaWYgKGZyb20gPT0gbnVsbCkgeyBmcm9tID0gY20uZG9jLmZpcnN0OyB9XG4gICAgaWYgKHRvID09IG51bGwpIHsgdG8gPSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsgfVxuICAgIGlmICghbGVuZGlmZikgeyBsZW5kaWZmID0gMDsgfVxuXG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiZcbiAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID4gZnJvbSkpXG4gICAgICB7IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOyB9XG5cbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG5cbiAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBDaGFuZ2UgYWZ0ZXJcbiAgICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKSA8IGRpc3BsYXkudmlld1RvKVxuICAgICAgICB7IHJlc2V0VmlldyhjbSk7IH1cbiAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZVxuICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7XG4gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwXG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwXG4gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0KSB7XG4gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpO1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOO1xuICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVybGFwXG4gICAgICB2YXIgY3V0JDEgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICBpZiAoY3V0JDEpIHtcbiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dCQxLmluZGV4KTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQkMS5saW5lTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGVcbiAgICAgIHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICB2YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkge1xuICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0VG9wLmluZGV4KVxuICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGN1dFRvcC5saW5lTiwgY3V0Qm90LmxpbmVOKSlcbiAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgICBpZiAoZXh0KSB7XG4gICAgICBpZiAodG8gPCBleHQubGluZU4pXG4gICAgICAgIHsgZXh0LmxpbmVOICs9IGxlbmRpZmY7IH1cbiAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSlcbiAgICAgICAgeyBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgdG8gYSBzaW5nbGUgbGluZS4gVHlwZSBtdXN0IGJlIG9uZSBvZiBcInRleHRcIixcbiAgLy8gXCJndXR0ZXJcIiwgXCJjbGFzc1wiLCBcIndpZGdldFwiXG4gIGZ1bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHtcbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7IH1cblxuICAgIGlmIChsaW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGxpbmVWaWV3ID0gZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmUpXTtcbiAgICBpZiAobGluZVZpZXcubm9kZSA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgdmFyIGFyciA9IGxpbmVWaWV3LmNoYW5nZXMgfHwgKGxpbmVWaWV3LmNoYW5nZXMgPSBbXSk7XG4gICAgaWYgKGluZGV4T2YoYXJyLCB0eXBlKSA9PSAtMSkgeyBhcnIucHVzaCh0eXBlKTsgfVxuICB9XG5cbiAgLy8gQ2xlYXIgdGhlIHZpZXcuXG4gIGZ1bmN0aW9uIHJlc2V0VmlldyhjbSkge1xuICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDtcbiAgICBjbS5kaXNwbGF5LnZpZXcgPSBbXTtcbiAgICBjbS5kaXNwbGF5LnZpZXdPZmZzZXQgPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucyB8fCBuZXdOID09IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplKVxuICAgICAgeyByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059IH1cbiAgICB2YXIgbiA9IGNtLmRpc3BsYXkudmlld0Zyb207XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKVxuICAgICAgeyBuICs9IHZpZXdbaV0uc2l6ZTsgfVxuICAgIGlmIChuICE9IG9sZE4pIHtcbiAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWZmID0gbiAtIG9sZE47XG4gICAgICB9XG4gICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjtcbiAgICB9XG4gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHtcbiAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSB7IHJldHVybiBudWxsIH1cbiAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059XG4gIH1cblxuICAvLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50XG4gIC8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC5cbiAgZnVuY3Rpb24gYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKHZpZXcubGVuZ3RoID09IDAgfHwgZnJvbSA+PSBkaXNwbGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pO1xuICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tID4gZnJvbSlcbiAgICAgICAgeyBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgZGlzcGxheS52aWV3RnJvbSkuY29uY2F0KGRpc3BsYXkudmlldyk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKVxuICAgICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7IH1cbiAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tO1xuICAgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGZpbmRWaWV3SW5kZXgoY20sIHRvKSk7IH1cbiAgICB9XG4gICAgZGlzcGxheS52aWV3VG8gPSB0bztcbiAgfVxuXG4gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlzXG4gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuXG4gIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpIHsgKytkaXJ0eTsgfVxuICAgIH1cbiAgICByZXR1cm4gZGlydHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihjbSkge1xuICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7XG4gICAgaWYgKCBwcmltYXJ5ID09PSB2b2lkIDAgKSBwcmltYXJ5ID0gdHJ1ZTtcblxuICAgIHZhciBkb2MgPSBjbS5kb2MsIHJlc3VsdCA9IHt9O1xuICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXByaW1hcnkgJiYgaSA9PSBkb2Muc2VsLnByaW1JbmRleCkgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5mcm9tKCkubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCByYW5nZS50bygpLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5nZS5lbXB0eSgpO1xuICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKVxuICAgICAgICB7IGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KTsgfVxuICAgICAgaWYgKCFjb2xsYXBzZWQpXG4gICAgICAgIHsgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOyB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2VcbiAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7XG4gICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgXCJkaXZcIiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7XG5cbiAgICB2YXIgY3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBcIlxcdTAwYTBcIiwgXCJDb2RlTWlycm9yLWN1cnNvclwiKSk7XG4gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyBcInB4XCI7XG5cbiAgICBpZiAocG9zLm90aGVyKSB7XG4gICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHRcbiAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgXCJcXHUwMGEwXCIsIFwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3JcIikpO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyBcInB4XCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgXCJweFwiO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArIFwicHhcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbXBDb29yZHMoYSwgYikgeyByZXR1cm4gYS50b3AgLSBiLnRvcCB8fCBhLmxlZnQgLSBiLmxlZnQgfVxuXG4gIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVjdGlvblxuICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQ7XG4gICAgdmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0O1xuICAgIHZhciBkb2NMVFIgPSBkb2MuZGlyZWN0aW9uID09IFwibHRyXCI7XG5cbiAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7XG4gICAgICBpZiAodG9wIDwgMCkgeyB0b3AgPSAwOyB9XG4gICAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7XG4gICAgICBib3R0b20gPSBNYXRoLnJvdW5kKGJvdHRvbSk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNlbGVjdGVkXCIsIChcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogXCIgKyBsZWZ0ICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIgKyB0b3AgKyBcInB4OyB3aWR0aDogXCIgKyAod2lkdGggPT0gbnVsbCA/IHJpZ2h0U2lkZSAtIGxlZnQgOiB3aWR0aCkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIiArIChib3R0b20gLSB0b3ApICsgXCJweFwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnKSB7XG4gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTtcbiAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICAgIHZhciBzdGFydCwgZW5kO1xuICAgICAgZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCBcImRpdlwiLCBsaW5lT2JqLCBiaWFzKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB3cmFwWChwb3MsIGRpciwgc2lkZSkge1xuICAgICAgICB2YXIgZXh0ZW50ID0gd3JhcHBlZExpbmVFeHRlbnRDaGFyKGNtLCBsaW5lT2JqLCBudWxsLCBwb3MpO1xuICAgICAgICB2YXIgcHJvcCA9IChkaXIgPT0gXCJsdHJcIikgPT0gKHNpZGUgPT0gXCJhZnRlclwiKSA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICB2YXIgY2ggPSBzaWRlID09IFwiYWZ0ZXJcIiA/IGV4dGVudC5iZWdpbiA6IGV4dGVudC5lbmQgLSAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGV4dGVudC5lbmQgLSAxKSkgPyAyIDogMSk7XG4gICAgICAgIHJldHVybiBjb29yZHMoY2gsIHByb3ApW3Byb3BdXG4gICAgICB9XG5cbiAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGRvYy5kaXJlY3Rpb24pO1xuICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbiAoZnJvbSwgdG8sIGRpciwgaSkge1xuICAgICAgICB2YXIgbHRyID0gZGlyID09IFwibHRyXCI7XG4gICAgICAgIHZhciBmcm9tUG9zID0gY29vcmRzKGZyb20sIGx0ciA/IFwibGVmdFwiIDogXCJyaWdodFwiKTtcbiAgICAgICAgdmFyIHRvUG9zID0gY29vcmRzKHRvIC0gMSwgbHRyID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpO1xuXG4gICAgICAgIHZhciBvcGVuU3RhcnQgPSBmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwLCBvcGVuRW5kID0gdG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuO1xuICAgICAgICB2YXIgZmlyc3QgPSBpID09IDAsIGxhc3QgPSAhb3JkZXIgfHwgaSA9PSBvcmRlci5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodG9Qb3MudG9wIC0gZnJvbVBvcy50b3AgPD0gMykgeyAvLyBTaW5nbGUgbGluZVxuICAgICAgICAgIHZhciBvcGVuTGVmdCA9IChkb2NMVFIgPyBvcGVuU3RhcnQgOiBvcGVuRW5kKSAmJiBmaXJzdDtcbiAgICAgICAgICB2YXIgb3BlblJpZ2h0ID0gKGRvY0xUUiA/IG9wZW5FbmQgOiBvcGVuU3RhcnQpICYmIGxhc3Q7XG4gICAgICAgICAgdmFyIGxlZnQgPSBvcGVuTGVmdCA/IGxlZnRTaWRlIDogKGx0ciA/IGZyb21Qb3MgOiB0b1BvcykubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBvcGVuUmlnaHQgPyByaWdodFNpZGUgOiAobHRyID8gdG9Qb3MgOiBmcm9tUG9zKS5yaWdodDtcbiAgICAgICAgICBhZGQobGVmdCwgZnJvbVBvcy50b3AsIHJpZ2h0IC0gbGVmdCwgZnJvbVBvcy5ib3R0b20pO1xuICAgICAgICB9IGVsc2UgeyAvLyBNdWx0aXBsZSBsaW5lc1xuICAgICAgICAgIHZhciB0b3BMZWZ0LCB0b3BSaWdodCwgYm90TGVmdCwgYm90UmlnaHQ7XG4gICAgICAgICAgaWYgKGx0cikge1xuICAgICAgICAgICAgdG9wTGVmdCA9IGRvY0xUUiAmJiBvcGVuU3RhcnQgJiYgZmlyc3QgPyBsZWZ0U2lkZSA6IGZyb21Qb3MubGVmdDtcbiAgICAgICAgICAgIHRvcFJpZ2h0ID0gZG9jTFRSID8gcmlnaHRTaWRlIDogd3JhcFgoZnJvbSwgZGlyLCBcImJlZm9yZVwiKTtcbiAgICAgICAgICAgIGJvdExlZnQgPSBkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgICBib3RSaWdodCA9IGRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyByaWdodFNpZGUgOiB0b1Bvcy5yaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9wTGVmdCA9ICFkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKGZyb20sIGRpciwgXCJiZWZvcmVcIik7XG4gICAgICAgICAgICB0b3BSaWdodCA9ICFkb2NMVFIgJiYgb3BlblN0YXJ0ICYmIGZpcnN0ID8gcmlnaHRTaWRlIDogZnJvbVBvcy5yaWdodDtcbiAgICAgICAgICAgIGJvdExlZnQgPSAhZG9jTFRSICYmIG9wZW5FbmQgJiYgbGFzdCA/IGxlZnRTaWRlIDogdG9Qb3MubGVmdDtcbiAgICAgICAgICAgIGJvdFJpZ2h0ID0gIWRvY0xUUiA/IHJpZ2h0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZCh0b3BMZWZ0LCBmcm9tUG9zLnRvcCwgdG9wUmlnaHQgLSB0b3BMZWZ0LCBmcm9tUG9zLmJvdHRvbSk7XG4gICAgICAgICAgaWYgKGZyb21Qb3MuYm90dG9tIDwgdG9Qb3MudG9wKSB7IGFkZChsZWZ0U2lkZSwgZnJvbVBvcy5ib3R0b20sIG51bGwsIHRvUG9zLnRvcCk7IH1cbiAgICAgICAgICBhZGQoYm90TGVmdCwgdG9Qb3MudG9wLCBib3RSaWdodCAtIGJvdExlZnQsIHRvUG9zLmJvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXJ0IHx8IGNtcENvb3Jkcyhmcm9tUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gZnJvbVBvczsgfVxuICAgICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gdG9Qb3M7IH1cbiAgICAgICAgaWYgKCFlbmQgfHwgY21wQ29vcmRzKGZyb21Qb3MsIGVuZCkgPCAwKSB7IGVuZCA9IGZyb21Qb3M7IH1cbiAgICAgICAgaWYgKGNtcENvb3Jkcyh0b1BvcywgZW5kKSA8IDApIHsgZW5kID0gdG9Qb3M7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfVxuICAgIH1cblxuICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1RvID0gcmFuZ2UudG8oKTtcbiAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkge1xuICAgICAgZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTtcbiAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5lKTtcbiAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kO1xuICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDtcbiAgICAgIGlmIChzaW5nbGVWTGluZSkge1xuICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApXG4gICAgICAgIHsgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOyB9XG4gICAgfVxuXG4gICAgb3V0cHV0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxuXG4gIC8vIEN1cnNvci1ibGlua2luZ1xuICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5rZXIpO1xuICAgIHZhciBvbiA9IHRydWU7XG4gICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XG4gICAgaWYgKGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlID4gMClcbiAgICAgIHsgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyBcIlwiIDogXCJoaWRkZW5cIjsgfSxcbiAgICAgICAgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOyB9XG4gICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKVxuICAgICAgeyBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHtcbiAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkge1xuICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIG9uQmx1cihjbSk7XG4gICAgfSB9LCAxMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2N1cyhjbSwgZSkge1xuICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOyB9XG5cbiAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSBcIm5vY3Vyc29yXCIpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgIHNpZ25hbChjbSwgXCJmb2N1c1wiLCBjbSwgZSk7XG4gICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dFxuICAgICAgLy8gbWVudSBpcyBjbG9zZWQgKHNpbmNlIHRoZSBpbnB1dCByZXNldCB3b3VsZCBraWxsIHRoZVxuICAgICAgLy8gc2VsZWN0LWFsbCBkZXRlY3Rpb24gaGFjaylcbiAgICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7XG4gICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgaWYgKHdlYmtpdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfSAvLyBJc3N1ZSAjMTczMFxuICAgICAgfVxuICAgICAgY20uZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCk7XG4gICAgfVxuICAgIHJlc3RhcnRCbGluayhjbSk7XG4gIH1cbiAgZnVuY3Rpb24gb25CbHVyKGNtLCBlKSB7XG4gICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7IHJldHVybiB9XG5cbiAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgc2lnbmFsKGNtLCBcImJsdXJcIiwgY20sIGUpO1xuICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci1mb2N1c2VkXCIpO1xuICAgIH1cbiAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH0gfSwgMTUwKTtcbiAgfVxuXG4gIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpclxuICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC5cbiAgZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nO1xuICAgICAgdmFyIGhlaWdodCA9ICh2b2lkIDApLCB3aWR0aCA9IDA7XG4gICAgICBpZiAoY3VyLmhpZGRlbikgeyBjb250aW51ZSB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHtcbiAgICAgICAgdmFyIGJvdCA9IGN1ci5ub2RlLm9mZnNldFRvcCArIGN1ci5ub2RlLm9mZnNldEhlaWdodDtcbiAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTtcbiAgICAgICAgcHJldkJvdHRvbSA9IGJvdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbGluZXMgZG9uJ3QgZXh0ZW5kIHBhc3QgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGVkaXRvciB3aWR0aFxuICAgICAgICBpZiAoIXdyYXBwaW5nICYmIGN1ci50ZXh0LmZpcnN0Q2hpbGQpXG4gICAgICAgICAgeyB3aWR0aCA9IGN1ci50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSBib3gubGVmdCAtIDE7IH1cbiAgICAgIH1cbiAgICAgIHZhciBkaWZmID0gY3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgaWYgKGRpZmYgPiAuMDA1IHx8IGRpZmYgPCAtLjAwNSkge1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGN1ci5saW5lLCBoZWlnaHQpO1xuICAgICAgICB1cGRhdGVXaWRnZXRIZWlnaHQoY3VyLmxpbmUpO1xuICAgICAgICBpZiAoY3VyLnJlc3QpIHsgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKylcbiAgICAgICAgICB7IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7IH0gfVxuICAgICAgfVxuICAgICAgaWYgKHdpZHRoID4gY20uZGlzcGxheS5zaXplcldpZHRoKSB7XG4gICAgICAgIHZhciBjaFdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKTtcbiAgICAgICAgaWYgKGNoV2lkdGggPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBjaFdpZHRoO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IGN1ci5saW5lO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBnaXZlbiBsaW5lLlxuICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkge1xuICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldLCBwYXJlbnQgPSB3Lm5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGlmIChwYXJlbnQpIHsgdy5oZWlnaHQgPSBwYXJlbnQub2Zmc2V0SGVpZ2h0OyB9XG4gICAgfSB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzXG4gIC8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3cG9ydCBtYXkgY29udGFpbiB0b3AsXG4gIC8vIGhlaWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9zKSBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkge1xuICAgIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpO1xuICAgIHZhciBib3R0b20gPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdwb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG5cbiAgICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTtcbiAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kXG4gICAgLy8gZm9yY2VzIHRob3NlIGxpbmVzIGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSkuXG4gICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkge1xuICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3cG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdwb3J0LmVuc3VyZS50by5saW5lO1xuICAgICAgaWYgKGVuc3VyZUZyb20gPCBmcm9tKSB7XG4gICAgICAgIGZyb20gPSBlbnN1cmVGcm9tO1xuICAgICAgICB0byA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7XG4gICAgICB9IGVsc2UgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2MubGFzdExpbmUoKSkgPj0gdG8pIHtcbiAgICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgICAgICB0byA9IGVuc3VyZVRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfVxuICB9XG5cbiAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVdcblxuICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHlcbiAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS5cbiAgZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpIHtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIFwic2Nyb2xsQ3Vyc29ySW50b1ZpZXdcIikpIHsgcmV0dXJuIH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBudWxsO1xuICAgIGlmIChyZWN0LnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKHJlY3QuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIHsgZG9TY3JvbGwgPSBmYWxzZTsgfVxuICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7XG4gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdChcImRpdlwiLCBcIlxcdTIwMGJcIiwgbnVsbCwgKFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiICsgKHJlY3QudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIgKyAocmVjdC5sZWZ0KSArIFwicHg7IHdpZHRoOiBcIiArIChNYXRoLm1heCgyLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSkgKyBcInB4O1wiKSk7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3JvbGxOb2RlKTtcbiAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0XG4gIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHlcbiAgLy8gbWVhc3VyZWQsIHRoZSBwb3NpdGlvbiBvZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLlxuICBmdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikge1xuICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSAwOyB9XG4gICAgdmFyIHJlY3Q7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwb3MgPT0gZW5kKSB7XG4gICAgICAvLyBTZXQgcG9zIGFuZCBlbmQgdG8gdGhlIGN1cnNvciBwb3NpdGlvbnMgYXJvdW5kIHRoZSBjaGFyYWN0ZXIgcG9zIHN0aWNrcyB0b1xuICAgICAgLy8gSWYgcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiLCB0aGF0IGlzIGFyb3VuZCBwb3MuY2ggLSAxLCBvdGhlcndpc2UgYXJvdW5kIHBvcy5jaFxuICAgICAgLy8gSWYgcG9zID09IFBvcyhfLCAwLCBcImJlZm9yZVwiKSwgcG9zIGFuZCBlbmQgYXJlIHVuY2hhbmdlZFxuICAgICAgcG9zID0gcG9zLmNoID8gUG9zKHBvcy5saW5lLCBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBwb3MuY2ggLSAxIDogcG9zLmNoLCBcImFmdGVyXCIpIDogcG9zO1xuICAgICAgZW5kID0gcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiID8gUG9zKHBvcy5saW5lLCBwb3MuY2ggKyAxLCBcImJlZm9yZVwiKSA6IHBvcztcbiAgICB9XG4gICAgZm9yICh2YXIgbGltaXQgPSAwOyBsaW1pdCA8IDU7IGxpbWl0KyspIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpO1xuICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTtcbiAgICAgIHJlY3QgPSB7bGVmdDogTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSxcbiAgICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbixcbiAgICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksXG4gICAgICAgICAgICAgIGJvdHRvbTogTWF0aC5tYXgoY29vcmRzLmJvdHRvbSwgZW5kQ29vcmRzLmJvdHRvbSkgKyBtYXJnaW59O1xuICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCk7XG4gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFydExlZnQgPSBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7XG4gICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoYW5nZWQpIHsgYnJlYWsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLlxuICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgcmVjdCkge1xuICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHJlY3QpO1xuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsgfVxuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGEgbmV3IHNjcm9sbCBwb3NpdGlvbiBuZWVkZWQgdG8gc2Nyb2xsIHRoZSBnaXZlblxuICAvLyByZWN0YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmRcbiAgLy8gc2Nyb2xsTGVmdCBwcm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZVxuICAvLyB2ZXJ0aWNhbC9ob3Jpem9udGFsIHBvc2l0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7XG4gICAgaWYgKHJlY3QudG9wIDwgMCkgeyByZWN0LnRvcCA9IDA7IH1cbiAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9O1xuICAgIGlmIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wID4gc2NyZWVuKSB7IHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBzY3JlZW47IH1cbiAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpO1xuICAgIHZhciBhdFRvcCA9IHJlY3QudG9wIDwgc25hcE1hcmdpbiwgYXRCb3R0b20gPSByZWN0LmJvdHRvbSA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47XG4gICAgaWYgKHJlY3QudG9wIDwgc2NyZWVudG9wKSB7XG4gICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogcmVjdC50b3A7XG4gICAgfSBlbHNlIGlmIChyZWN0LmJvdHRvbSA+IHNjcmVlbnRvcCArIHNjcmVlbikge1xuICAgICAgdmFyIG5ld1RvcCA9IE1hdGgubWluKHJlY3QudG9wLCAoYXRCb3R0b20gPyBkb2NCb3R0b20gOiByZWN0LmJvdHRvbSkgLSBzY3JlZW4pO1xuICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHsgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsgfVxuICAgIH1cblxuICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdDtcbiAgICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApO1xuICAgIHZhciB0b29XaWRlID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdCA+IHNjcmVlbnc7XG4gICAgaWYgKHRvb1dpZGUpIHsgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIHNjcmVlbnc7IH1cbiAgICBpZiAocmVjdC5sZWZ0IDwgMTApXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gMDsgfVxuICAgIGVsc2UgaWYgKHJlY3QubGVmdCA8IHNjcmVlbmxlZnQpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0IC0gKHRvb1dpZGUgPyAwIDogMTApKTsgfVxuICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPiBzY3JlZW53ICsgc2NyZWVubGVmdCAtIDMpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gcmVjdC5yaWdodCArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7IH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICAvLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS5cbiAgZnVuY3Rpb24gYWRkVG9TY3JvbGxUb3AoY20sIHRvcCkge1xuICAgIGlmICh0b3AgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9wID0gKGNtLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9wLnNjcm9sbFRvcCkgKyB0b3A7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzXG4gIC8vIHNob3duLlxuICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogY3VyLCB0bzogY3VyLCBtYXJnaW46IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2lufTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzKGNtLCB4LCB5KSB7XG4gICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHsgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsgfVxuICAgIGlmICh4ICE9IG51bGwpIHsgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IHg7IH1cbiAgICBpZiAoeSAhPSBudWxsKSB7IGNtLmN1ck9wLnNjcm9sbFRvcCA9IHk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UoY20sIHJhbmdlKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHJhbmdlO1xuICB9XG5cbiAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyXG4gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLCB0aGlzXG4gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc29cbiAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuXG4gIGZ1bmN0aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkge1xuICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsO1xuICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTtcbiAgICAgIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCByYW5nZS5tYXJnaW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCBtYXJnaW4pIHtcbiAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwge1xuICAgICAgbGVmdDogTWF0aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSxcbiAgICAgIHRvcDogTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSBtYXJnaW4sXG4gICAgICByaWdodDogTWF0aC5tYXgoZnJvbS5yaWdodCwgdG8ucmlnaHQpLFxuICAgICAgYm90dG9tOiBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIG1hcmdpblxuICAgIH0pO1xuICAgIHNjcm9sbFRvQ29vcmRzKGNtLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTtcbiAgfVxuXG4gIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydFxuICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS5cbiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsVG9wKGNtLCB2YWwpIHtcbiAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSB7IHJldHVybiB9XG4gICAgaWYgKCFnZWNrbykgeyB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB2YWx9KTsgfVxuICAgIHNldFNjcm9sbFRvcChjbSwgdmFsLCB0cnVlKTtcbiAgICBpZiAoZ2Vja28pIHsgdXBkYXRlRGlzcGxheVNpbXBsZShjbSk7IH1cbiAgICBzdGFydFdvcmtlcihjbSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNjcm9sbFRvcChjbSwgdmFsLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIHZhbCkpO1xuICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9PSB2YWwgJiYgIWZvcmNlU2Nyb2xsKSB7IHJldHVybiB9XG4gICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDtcbiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgeyBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsgfVxuICB9XG5cbiAgLy8gU3luYyBzY3JvbGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50cyBhcmVcbiAgLy8gYWxpZ25lZC5cbiAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZhbCwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKTtcbiAgICBpZiAoKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSAmJiAhZm9yY2VTY3JvbGwpIHsgcmV0dXJuIH1cbiAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIHsgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOyB9XG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQodmFsKTtcbiAgfVxuXG4gIC8vIFNDUk9MTEJBUlNcblxuICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZVxuICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuXG4gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpO1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LFxuICAgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICAgIHNjcm9sbFdpZHRoOiBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aDogZC5zY3JvbGxlci5jbGllbnRXaWR0aCxcbiAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRoLFxuICAgICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLFxuICAgICAgZG9jSGVpZ2h0OiBkb2NILFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NIICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LFxuICAgICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsXG4gICAgICBndXR0ZXJXaWR0aDogZ3V0dGVyV1xuICAgIH1cbiAgfVxuXG4gIHZhciBOYXRpdmVTY3JvbGxiYXJzID0gZnVuY3Rpb24ocGxhY2UsIHNjcm9sbCwgY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcIm1pbi13aWR0aDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIik7XG4gICAgdmFyIGhvcml6ID0gdGhpcy5ob3JpeiA9IGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLCBcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtcbiAgICB2ZXJ0LnRhYkluZGV4ID0gaG9yaXoudGFiSW5kZXggPSAtMTtcbiAgICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopO1xuXG4gICAgb24odmVydCwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHZlcnQuY2xpZW50SGVpZ2h0KSB7IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgXCJ2ZXJ0aWNhbFwiKTsgfVxuICAgIH0pO1xuICAgIG9uKGhvcml6LCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaG9yaXouY2xpZW50V2lkdGgpIHsgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsIFwiaG9yaXpvbnRhbFwiKTsgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGVja2VkWmVyb1dpZHRoID0gZmFsc2U7XG4gICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLlxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyB0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lYXN1cmUpIHtcbiAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGggKyAxO1xuICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICB2YXIgc1dpZHRoID0gbWVhc3VyZS5uYXRpdmVCYXJXaWR0aDtcblxuICAgIGlmIChuZWVkc1YpIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArIFwicHhcIiA6IFwiMFwiO1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5lZWRzSCA/IHNXaWR0aCA6IDApO1xuICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC5cbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyB0b3RhbEhlaWdodCkgKyBcInB4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIH1cblxuICAgIGlmIChuZWVkc0gpIHtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzV2lkdGggKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IG1lYXN1cmUuYmFyTGVmdCArIFwicHhcIjtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCk7XG4gICAgICB0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPVxuICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIHRvdGFsV2lkdGgpICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrZWRaZXJvV2lkdGggJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICBpZiAoc1dpZHRoID09IDApIHsgdGhpcy56ZXJvV2lkdGhIYWNrKCk7IH1cbiAgICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAwfVxuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHsgdGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKHBvcykge1xuICAgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZVZlcnQpIHsgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0LCBcInZlcnRcIik7IH1cbiAgfTtcblxuICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3ID0gbWFjICYmICFtYWNfZ2VNb3VudGFpbkxpb24gPyBcIjEycHhcIiA6IFwiMThweFwiO1xuICAgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRoID0gdztcbiAgICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgIHRoaXMuZGlzYWJsZUhvcml6ID0gbmV3IERlbGF5ZWQ7XG4gICAgdGhpcy5kaXNhYmxlVmVydCA9IG5ldyBEZWxheWVkO1xuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhciA9IGZ1bmN0aW9uIChiYXIsIGRlbGF5LCB0eXBlKSB7XG4gICAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICBmdW5jdGlvbiBtYXliZURpc2FibGUoKSB7XG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc3RpbGwgdmlzaWJsZSwgd2VcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGVsZW1lbnQgdW5kZXIgdGhlIHBpeGVsIGluIHRoZSBib3R0b21cbiAgICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFyIGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveFxuICAgICAgLy8gaXRzZWxmICh3aGVuIHRoZSBiYXIgaXMgc3RpbGwgdmlzaWJsZSkgb3IgaXRzIGZpbGxlciBjaGlsZFxuICAgICAgLy8gKHdoZW4gdGhlIGJhciBpcyBoaWRkZW4pLiBJZiBpdCBpcyBzdGlsbCB2aXNpYmxlLCB3ZSBrZWVwXG4gICAgICAvLyBpdCBlbmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy5cbiAgICAgIHZhciBib3ggPSBiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgZWx0ID0gdHlwZSA9PSBcInZlcnRcIiA/IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYm94LnJpZ2h0IC0gMSwgKGJveC50b3AgKyBib3guYm90dG9tKSAvIDIpXG4gICAgICAgICAgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChib3gucmlnaHQgKyBib3gubGVmdCkgLyAyLCBib3guYm90dG9tIC0gMSk7XG4gICAgICBpZiAoZWx0ICE9IGJhcikgeyBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlIHsgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7IH1cbiAgICB9XG4gICAgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5ob3Jpeik7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7XG4gIH07XG5cbiAgdmFyIE51bGxTY3JvbGxiYXJzID0gZnVuY3Rpb24gKCkge307XG5cbiAgTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfSB9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uICgpIHt9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKCkge307XG4gIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnMoY20sIG1lYXN1cmUpIHtcbiAgICBpZiAoIW1lYXN1cmUpIHsgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsgfVxuICAgIHZhciBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aCwgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDtcbiAgICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggfHwgc3RhcnRIZWlnaHQgIT0gY20uZGlzcGxheS5iYXJIZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgICAgeyB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7IH1cbiAgICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pKTtcbiAgICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlXG4gIC8vIGNvbnRlbnQuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheTtcbiAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpO1xuXG4gICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArIFwicHhcIjtcbiAgICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgXCJweFwiO1xuICAgIGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbSA9IHNpemVzLmJvdHRvbSArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcblxuICAgIGlmIChzaXplcy5yaWdodCAmJiBzaXplcy5ib3R0b20pIHtcbiAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgXCJweFwiO1xuICAgIH0gZWxzZSB7IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gICAgaWYgKHNpemVzLmJvdHRvbSAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHtcbiAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aCA9IG1lYXN1cmUuZ3V0dGVyV2lkdGggKyBcInB4XCI7XG4gICAgfSBlbHNlIHsgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiXCI7IH1cbiAgfVxuXG4gIHZhciBzY3JvbGxiYXJNb2RlbCA9IHtcIm5hdGl2ZVwiOiBOYXRpdmVTY3JvbGxiYXJzLCBcIm51bGxcIjogTnVsbFNjcm9sbGJhcnN9O1xuXG4gIGZ1bmN0aW9uIGluaXRTY3JvbGxiYXJzKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykge1xuICAgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCk7XG4gICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgICB7IHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOyB9XG4gICAgfVxuXG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzID0gbmV3IHNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTtcbiAgICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1c1xuICAgICAgb24obm9kZSwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH1cbiAgICAgIH0pO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykge1xuICAgICAgaWYgKGF4aXMgPT0gXCJob3Jpem9udGFsXCIpIHsgc2V0U2Nyb2xsTGVmdChjbSwgcG9zKTsgfVxuICAgICAgZWxzZSB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgcG9zKTsgfVxuICAgIH0sIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgeyBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7IH1cbiAgfVxuXG4gIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBhIHNlcmllcyBvZiBjaGFuZ2VzIHRvIHRoZSBlZGl0b3JcbiAgLy8gc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZVxuICAvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZFxuICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0Y2hlZCBhbmQgdGhlbiBhbGxcbiAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuXG5cbiAgdmFyIG5leHRPcElkID0gMDtcbiAgLy8gU3RhcnQgYSBuZXcgb3BlcmF0aW9uLlxuICBmdW5jdGlvbiBzdGFydE9wZXJhdGlvbihjbSkge1xuICAgIGNtLmN1ck9wID0ge1xuICAgICAgY206IGNtLFxuICAgICAgdmlld0NoYW5nZWQ6IGZhbHNlLCAgICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBsaW5lcyBtaWdodCBuZWVkIHRvIGJlIHJlZHJhd25cbiAgICAgIHN0YXJ0SGVpZ2h0OiBjbS5kb2MuaGVpZ2h0LCAvLyBVc2VkIHRvIGRldGVjdCBuZWVkIHRvIHVwZGF0ZSBzY3JvbGxiYXJcbiAgICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEgcmVkcmF3XG4gICAgICB1cGRhdGVJbnB1dDogMCwgICAgICAgLy8gV2hldGhlciB0byByZXNldCB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVzZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0aW5nKVxuICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50c1xuICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVyczogbnVsbCwgLy8gU2V0IG9mIGhhbmRsZXJzIHRvIGZpcmUgY3Vyc29yQWN0aXZpdHkgb25cbiAgICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5XG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd25cbiAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLCAgICAvLyBTZXQgd2hlbiB0aGUgd2lkZXN0IGxpbmUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBhbmV3XG4gICAgICBzY3JvbGxMZWZ0OiBudWxsLCBzY3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNoZWQgdG8gRE9NIHlldFxuICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb25cbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSURcbiAgICB9O1xuICAgIHB1c2hPcGVyYXRpb24oY20uY3VyT3ApO1xuICB9XG5cbiAgLy8gRmluaXNoIGFuIG9wZXJhdGlvbiwgdXBkYXRpbmcgdGhlIGRpc3BsYXkgYW5kIHNpZ25hbGxpbmcgZGVsYXllZCBldmVudHNcbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7XG4gICAgdmFyIG9wID0gY20uY3VyT3A7XG4gICAgaWYgKG9wKSB7IGZpbmlzaE9wZXJhdGlvbihvcCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm9wcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOyB9XG4gICAgICBlbmRPcGVyYXRpb25zKGdyb3VwKTtcbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc29cbiAgLy8gdGhhdCB0aGUgbWluaW11bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkge1xuICAgIHZhciBvcHMgPSBncm91cC5vcHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9SMShvcHNbaV0pOyB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgb3BzLmxlbmd0aDsgaSQxKyspIC8vIFdyaXRlIERPTSAobWF5YmUpXG4gICAgICB7IGVuZE9wZXJhdGlvbl9XMShvcHNbaSQxXSk7IH1cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBvcHMubGVuZ3RoOyBpJDIrKykgLy8gUmVhZCBET01cbiAgICAgIHsgZW5kT3BlcmF0aW9uX1IyKG9wc1tpJDJdKTsgfVxuICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG9wcy5sZW5ndGg7IGkkMysrKSAvLyBXcml0ZSBET00gKG1heWJlKVxuICAgICAgeyBlbmRPcGVyYXRpb25fVzIob3BzW2kkM10pOyB9XG4gICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgb3BzLmxlbmd0aDsgaSQ0KyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2kkNF0pOyB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjEob3ApIHtcbiAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSk7XG4gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIHsgZmluZE1heExpbmUoY20pOyB9XG5cbiAgICBvcC5tdXN0VXBkYXRlID0gb3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHxcbiAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHxcbiAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJlxuICAgICAgbmV3IERpc3BsYXlVcGRhdGUoY20sIG9wLm11c3RVcGRhdGUgJiYge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cxKG9wKSB7XG4gICAgb3AudXBkYXRlZERpc3BsYXkgPSBvcC5tdXN0VXBkYXRlICYmIHVwZGF0ZURpc3BsYXlJZk5lZWRlZChvcC5jbSwgb3AudXBkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAob3AudXBkYXRlZERpc3BsYXkpIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOyB9XG5cbiAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuXG4gICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsXG4gICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LlxuICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nXG4gICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMztcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87XG4gICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID1cbiAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTtcbiAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQpXG4gICAgICB7IG9wLnByZXBhcmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9XMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtO1xuXG4gICAgaWYgKG9wLmFkanVzdFdpZHRoVG8gIT0gbnVsbCkge1xuICAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG9wLmFkanVzdFdpZHRoVG8gKyBcInB4XCI7XG4gICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KVxuICAgICAgICB7IHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgb3AubWF4U2Nyb2xsTGVmdCksIHRydWUpOyB9XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRha2VGb2N1cyA9IG9wLmZvY3VzICYmIG9wLmZvY3VzID09IGFjdGl2ZUVsdCgpO1xuICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbilcbiAgICAgIHsgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uLCB0YWtlRm9jdXMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpXG4gICAgICB7IHVwZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KVxuICAgICAgeyBzZXREb2N1bWVudEhlaWdodChjbSwgb3AuYmFyTWVhc3VyZSk7IH1cblxuICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSB7IHJlc3RhcnRCbGluayhjbSk7IH1cblxuICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KVxuICAgICAgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KG9wLnR5cGluZyk7IH1cbiAgICBpZiAodGFrZUZvY3VzKSB7IGVuc3VyZUZvY3VzKG9wLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpOyB9XG5cbiAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hlbiBzY3JvbGxpbmcgZXhwbGljaXRseVxuICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51bGwgJiYgKG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBvcC5zY3JvbGxUb1BvcykpXG4gICAgICB7IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBET00gc2Nyb2xsZXJcbiAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwpIHsgc2V0U2Nyb2xsVG9wKGNtLCBvcC5zY3JvbGxUb3AsIG9wLmZvcmNlU2Nyb2xsKTsgfVxuXG4gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRTY3JvbGxMZWZ0KGNtLCBvcC5zY3JvbGxMZWZ0LCB0cnVlLCB0cnVlKTsgfVxuICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby5cbiAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHtcbiAgICAgIHZhciByZWN0ID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTtcbiAgICAgIG1heWJlU2Nyb2xsV2luZG93KGNtLCByZWN0KTtcbiAgICB9XG5cbiAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBlZGl0aW5nIG9yXG4gICAgLy8gdW5kb2luZ1xuICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7XG4gICAgaWYgKGhpZGRlbikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlbi5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbChoaWRkZW5baV0sIFwiaGlkZVwiKTsgfSB9IH1cbiAgICBpZiAodW5oaWRkZW4pIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kkMSlcbiAgICAgIHsgaWYgKHVuaGlkZGVuW2kkMV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbCh1bmhpZGRlbltpJDFdLCBcInVuaGlkZVwiKTsgfSB9IH1cblxuICAgIGlmIChkaXNwbGF5LndyYXBwZXIub2Zmc2V0SGVpZ2h0KVxuICAgICAgeyBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7IH1cblxuICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAob3AuY2hhbmdlT2JqcylcbiAgICAgIHsgc2lnbmFsKGNtLCBcImNoYW5nZXNcIiwgY20sIG9wLmNoYW5nZU9ianMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZSlcbiAgICAgIHsgb3AudXBkYXRlLmZpbmlzaCgpOyB9XG4gIH1cblxuICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvblxuICBmdW5jdGlvbiBydW5Jbk9wKGNtLCBmKSB7XG4gICAgaWYgKGNtLmN1ck9wKSB7IHJldHVybiBmKCkgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTtcbiAgICB0cnkgeyByZXR1cm4gZigpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG4gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY20uY3VyT3ApIHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICB9XG4gIH1cbiAgLy8gVXNlZCB0byBhZGQgbWV0aG9kcyB0byBlZGl0b3IgYW5kIGRvYyBpbnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW5cbiAgLy8gb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gbWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbiAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG4gICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJR0hMSUdIVCBXT1JLRVJcblxuICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkge1xuICAgIGlmIChjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYztcbiAgICBpZiAoZG9jLmhpZ2hsaWdodEZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIpO1xuICAgIHZhciBjaGFuZ2VkTGluZXMgPSBbXTtcblxuICAgIGRvYy5pdGVyKGNvbnRleHQubGluZSwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChjb250ZXh0LmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlXG4gICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlcztcbiAgICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggPyBjb3B5U3RhdGUoZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpIDogbnVsbDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzO1xuICAgICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7XG4gICAgICAgIGlmIChuZXdDbHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7IH1cbiAgICAgICAgZWxzZSBpZiAob2xkQ2xzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgeyBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsgfVxuICAgICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goY29udGV4dC5saW5lKTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgY29udGV4dC5uZXh0TGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpXG4gICAgICAgICAgeyBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBjb250ZXh0KTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LmxpbmUgJSA1ID09IDAgPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHtcbiAgICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjb250ZXh0LmxpbmU7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGRvYy5tb2RlRnJvbnRpZXIsIGNvbnRleHQubGluZSk7XG4gICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkTGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdlZExpbmVzW2ldLCBcInRleHRcIik7IH1cbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gRElTUExBWSBEUkFXSU5HXG5cbiAgdmFyIERpc3BsYXlVcGRhdGUgPSBmdW5jdGlvbihjbSwgdmlld3BvcnQsIGZvcmNlKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuXG4gICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIC8vIFN0b3JlIHNvbWUgdmFsdWVzIHRoYXQgd2UnbGwgbmVlZCBsYXRlciAoYnV0IGRvbid0IHdhbnQgdG8gZm9yY2UgYSByZWxheW91dCBmb3IpXG4gICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoO1xuICAgIHRoaXMud3JhcHBlckhlaWdodCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy53cmFwcGVyV2lkdGggPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGg7XG4gICAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pO1xuICAgIHRoaXMuZm9yY2UgPSBmb3JjZTtcbiAgICB0aGlzLmRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICB9O1xuXG4gIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uIChlbWl0dGVyLCB0eXBlKSB7XG4gICAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpXG4gICAgICB7IHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsgfVxuICB9O1xuICBEaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIHsgc2lnbmFsLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2ldKTsgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG1heWJlQ2xpcFNjcm9sbGJhcnMoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkICYmIGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpIHtcbiAgICAgIGRpc3BsYXkubmF0aXZlQmFyV2lkdGggPSBkaXNwbGF5LnNjcm9sbGVyLm9mZnNldFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtcbiAgICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyBcInB4XCI7XG4gICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgXCJweFwiO1xuICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2FwKGNtKSArIFwicHhcIjtcbiAgICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvblNuYXBzaG90KGNtKSB7XG4gICAgaWYgKGNtLmhhc0ZvY3VzKCkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbHQoKTtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhY29udGFpbnMoY20uZGlzcGxheS5saW5lRGl2LCBhY3RpdmUpKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgcmVzdWx0ID0ge2FjdGl2ZUVsdDogYWN0aXZlfTtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAmJiBzZWwuZXh0ZW5kICYmIGNvbnRhaW5zKGNtLmRpc3BsYXkubGluZURpdiwgc2VsLmFuY2hvck5vZGUpKSB7XG4gICAgICAgIHJlc3VsdC5hbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gICAgICAgIHJlc3VsdC5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgICByZXN1bHQuZm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgcmVzdWx0LmZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHNuYXBzaG90KSB7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNob3QuYWN0aXZlRWx0IHx8IHNuYXBzaG90LmFjdGl2ZUVsdCA9PSBhY3RpdmVFbHQoKSkgeyByZXR1cm4gfVxuICAgIHNuYXBzaG90LmFjdGl2ZUVsdC5mb2N1cygpO1xuICAgIGlmIChzbmFwc2hvdC5hbmNob3JOb2RlICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmFuY2hvck5vZGUpICYmIGNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHNuYXBzaG90LmZvY3VzTm9kZSkpIHtcbiAgICAgIHZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCksIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldEVuZChzbmFwc2hvdC5hbmNob3JOb2RlLCBzbmFwc2hvdC5hbmNob3JPZmZzZXQpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbC5leHRlbmQoc25hcHNob3QuZm9jdXNOb2RlLCBzbmFwc2hvdC5mb2N1c09mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIG9mIHRoZSBsaW5lIGRpc3BsYXkuIEJhaWxzIG91dFxuICAvLyAocmV0dXJuaW5nIGZhbHNlKSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBhbmQgZm9yY2VkIGlzXG4gIC8vIGZhbHNlLlxuICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKHVwZGF0ZS5lZGl0b3JJc0hpZGRlbikge1xuICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEJhaWwgb3V0IGlmIHRoZSB2aXNpYmxlIGFyZWEgaXMgYWxyZWFkeSByZW5kZXJlZCBhbmQgbm90aGluZyBjaGFuZ2VkLlxuICAgIGlmICghdXBkYXRlLmZvcmNlICYmXG4gICAgICAgIHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pICYmXG4gICAgICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJiBjb3VudERpcnR5VmlldyhjbSkgPT0gMClcbiAgICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChtYXliZVVwZGF0ZUxpbmVOdW1iZXJXaWR0aChjbSkpIHtcbiAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20pO1xuICAgIH1cblxuICAgIC8vIENvbXB1dGUgYSBzdWl0YWJsZSBuZXcgdmlld3BvcnQgKGZyb20gJiB0bylcbiAgICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7XG4gICAgdmFyIGZyb20gPSBNYXRoLm1heCh1cGRhdGUudmlzaWJsZS5mcm9tIC0gY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbiwgZG9jLmZpcnN0KTtcbiAgICB2YXIgdG8gPSBNYXRoLm1pbihlbmQsIHVwZGF0ZS52aXNpYmxlLnRvICsgY20ub3B0aW9ucy52aWV3cG9ydE1hcmdpbik7XG4gICAgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnZpZXdGcm9tIDwgMjApIHsgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7IH1cbiAgICBpZiAoZGlzcGxheS52aWV3VG8gPiB0byAmJiBkaXNwbGF5LnZpZXdUbyAtIHRvIDwgMjApIHsgdG8gPSBNYXRoLm1pbihlbmQsIGRpc3BsYXkudmlld1RvKTsgfVxuICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucykge1xuICAgICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pO1xuICAgICAgdG8gPSB2aXN1YWxMaW5lRW5kTm8oY20uZG9jLCB0byk7XG4gICAgfVxuXG4gICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fFxuICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCAhPSB1cGRhdGUud3JhcHBlckhlaWdodCB8fCBkaXNwbGF5Lmxhc3RXcmFwV2lkdGggIT0gdXBkYXRlLndyYXBwZXJXaWR0aDtcbiAgICBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0byk7XG5cbiAgICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTtcbiAgICAvLyBQb3NpdGlvbiB0aGUgbW92ZXIgZGl2IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uXG4gICAgY20uZGlzcGxheS5tb3Zlci5zdHlsZS50b3AgPSBkaXNwbGF5LnZpZXdPZmZzZXQgKyBcInB4XCI7XG5cbiAgICB2YXIgdG9VcGRhdGUgPSBjb3VudERpcnR5VmlldyhjbSk7XG4gICAgaWYgKCFkaWZmZXJlbnQgJiYgdG9VcGRhdGUgPT0gMCAmJiAhdXBkYXRlLmZvcmNlICYmIGRpc3BsYXkucmVuZGVyZWRWaWV3ID09IGRpc3BsYXkudmlldyAmJlxuICAgICAgICAoZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9PSBudWxsIHx8IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPj0gZGlzcGxheS52aWV3VG8pKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgLy8gRm9yIGJpZyBjaGFuZ2VzLCB3ZSBoaWRlIHRoZSBlbmNsb3NpbmcgZWxlbWVudCBkdXJpbmcgdGhlXG4gICAgLy8gdXBkYXRlLCBzaW5jZSB0aGF0IHNwZWVkcyB1cCB0aGUgb3BlcmF0aW9ucyBvbiBtb3N0IGJyb3dzZXJzLlxuICAgIHZhciBzZWxTbmFwc2hvdCA9IHNlbGVjdGlvblNuYXBzaG90KGNtKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IH1cbiAgICBwYXRjaERpc3BsYXkoY20sIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMsIHVwZGF0ZS5kaW1zKTtcbiAgICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJcIjsgfVxuICAgIGRpc3BsYXkucmVuZGVyZWRWaWV3ID0gZGlzcGxheS52aWV3O1xuICAgIC8vIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHdpZGdldCB3aXRoIGEgZm9jdXNlZCBlbGVtZW50IHRoYXQgZ290XG4gICAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LlxuICAgIHJlc3RvcmVTZWxlY3Rpb24oc2VsU25hcHNob3QpO1xuXG4gICAgLy8gUHJldmVudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBzY3JvbGxcbiAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0LlxuICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuY3Vyc29yRGl2KTtcbiAgICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LnNlbGVjdGlvbkRpdik7XG4gICAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gMDtcblxuICAgIGlmIChkaWZmZXJlbnQpIHtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgPSB1cGRhdGUud3JhcHBlckhlaWdodDtcbiAgICAgIGRpc3BsYXkubGFzdFdyYXBXaWR0aCA9IHVwZGF0ZS53cmFwcGVyV2lkdGg7XG4gICAgICBzdGFydFdvcmtlcihjbSwgNDAwKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7XG4gICAgdmFyIHZpZXdwb3J0ID0gdXBkYXRlLnZpZXdwb3J0O1xuXG4gICAgZm9yICh2YXIgZmlyc3QgPSB0cnVlOzsgZmlyc3QgPSBmYWxzZSkge1xuICAgICAgaWYgKCFmaXJzdCB8fCAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgdXBkYXRlLm9sZERpc3BsYXlXaWR0aCA9PSBkaXNwbGF5V2lkdGgoY20pKSB7XG4gICAgICAgIC8vIENsaXAgZm9yY2VkIHZpZXdwb3J0IHRvIGFjdHVhbCBzY3JvbGxhYmxlIGFyZWEuXG4gICAgICAgIGlmICh2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbClcbiAgICAgICAgICB7IHZpZXdwb3J0ID0ge3RvcDogTWF0aC5taW4oY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpIC0gZGlzcGxheUhlaWdodChjbSksIHZpZXdwb3J0LnRvcCl9OyB9XG4gICAgICAgIC8vIFVwZGF0ZWQgbGluZSBoZWlnaHRzIG1pZ2h0IHJlc3VsdCBpbiB0aGUgZHJhd24gYXJlYSBub3RcbiAgICAgICAgLy8gYWN0dWFsbHkgY292ZXJpbmcgdGhlIHZpZXdwb3J0LiBLZWVwIGxvb3BpbmcgdW50aWwgaXQgZG9lcy5cbiAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gICAgICAgIGlmICh1cGRhdGUudmlzaWJsZS5mcm9tID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgdXBkYXRlLnZpc2libGUudG8gPD0gY20uZGlzcGxheS52aWV3VG8pXG4gICAgICAgICAgeyBicmVhayB9XG4gICAgICB9IGVsc2UgaWYgKGZpcnN0KSB7XG4gICAgICAgIHVwZGF0ZS52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGNtLmRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgICAgfVxuICAgICAgaWYgKCF1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHsgYnJlYWsgfVxuICAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pO1xuICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTZWxlY3Rpb24oY20pO1xuICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7XG4gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7XG4gICAgICB1cGRhdGUuZm9yY2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGUuc2lnbmFsKGNtLCBcInVwZGF0ZVwiLCBjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8pIHtcbiAgICAgIHVwZGF0ZS5zaWduYWwoY20sIFwidmlld3BvcnRDaGFuZ2VcIiwgY20sIGNtLmRpc3BsYXkudmlld0Zyb20sIGNtLmRpc3BsYXkudmlld1RvKTtcbiAgICAgIGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3RnJvbSA9IGNtLmRpc3BsYXkudmlld0Zyb207IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8gPSBjbS5kaXNwbGF5LnZpZXdUbztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB2aWV3cG9ydCkge1xuICAgIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpO1xuICAgIGlmICh1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHtcbiAgICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTtcbiAgICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpO1xuICAgICAgdmFyIGJhck1lYXN1cmUgPSBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTZWxlY3Rpb24oY20pO1xuICAgICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7XG4gICAgICBzZXREb2N1bWVudEhlaWdodChjbSwgYmFyTWVhc3VyZSk7XG4gICAgICB1cGRhdGUuZmluaXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3luYyB0aGUgYWN0dWFsIGRpc3BsYXkgRE9NIHN0cnVjdHVyZSB3aXRoIGRpc3BsYXkudmlldywgcmVtb3ZpbmdcbiAgLy8gbm9kZXMgZm9yIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9uZXNcbiAgLy8gdGhhdCBhcmUgbm90IHRoZXJlIHlldCwgYW5kIHVwZGF0aW5nIHRoZSBvbmVzIHRoYXQgYXJlIG91dCBvZlxuICAvLyBkYXRlLlxuICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVwZGF0ZU51bWJlcnNGcm9tLCBkaW1zKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBsaW5lTnVtYmVycyA9IGNtLm9wdGlvbnMubGluZU51bWJlcnM7XG4gICAgdmFyIGNvbnRhaW5lciA9IGRpc3BsYXkubGluZURpdiwgY3VyID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG5cbiAgICBmdW5jdGlvbiBybShub2RlKSB7XG4gICAgICB2YXIgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAvLyBXb3JrcyBhcm91bmQgYSB0aHJvdy1zY3JvbGwgYnVnIGluIE9TIFggV2Via2l0XG4gICAgICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2RlKVxuICAgICAgICB7IG5vZGUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgICByZXR1cm4gbmV4dFxuICAgIH1cblxuICAgIHZhciB2aWV3ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRpc3BsYXkudmlld0Zyb207XG4gICAgLy8gTG9vcCBvdmVyIHRoZSBlbGVtZW50cyBpbiB0aGUgdmlldywgc3luY2luZyBjdXIgKHRoZSBET00gbm9kZXNcbiAgICAvLyBpbiBkaXNwbGF5LmxpbmVEaXYpIHdpdGggdGhlIHZpZXcgYXMgd2UgZ28uXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZVZpZXcgPSB2aWV3W2ldO1xuICAgICAgaWYgKGxpbmVWaWV3LmhpZGRlbikgOyBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5ZXRcbiAgICAgICAgdmFyIG5vZGUgPSBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpO1xuICAgICAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGN1cik7XG4gICAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduXG4gICAgICAgIHdoaWxlIChjdXIgIT0gbGluZVZpZXcubm9kZSkgeyBjdXIgPSBybShjdXIpOyB9XG4gICAgICAgIHZhciB1cGRhdGVOdW1iZXIgPSBsaW5lTnVtYmVycyAmJiB1cGRhdGVOdW1iZXJzRnJvbSAhPSBudWxsICYmXG4gICAgICAgICAgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgbGluZVZpZXcubGluZU51bWJlcjtcbiAgICAgICAgaWYgKGxpbmVWaWV3LmNoYW5nZXMpIHtcbiAgICAgICAgICBpZiAoaW5kZXhPZihsaW5lVmlldy5jaGFuZ2VzLCBcImd1dHRlclwiKSA+IC0xKSB7IHVwZGF0ZU51bWJlciA9IGZhbHNlOyB9XG4gICAgICAgICAgdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU51bWJlcikge1xuICAgICAgICAgIHJlbW92ZUNoaWxkcmVuKGxpbmVWaWV3LmxpbmVOdW1iZXIpO1xuICAgICAgICAgIGxpbmVWaWV3LmxpbmVOdW1iZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZU51bWJlckZvcihjbS5vcHRpb25zLCBsaW5lTikpKTtcbiAgICAgICAgfVxuICAgICAgICBjdXIgPSBsaW5lVmlldy5ub2RlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgbGluZU4gKz0gbGluZVZpZXcuc2l6ZTtcbiAgICB9XG4gICAgd2hpbGUgKGN1cikgeyBjdXIgPSBybShjdXIpOyB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShkaXNwbGF5KSB7XG4gICAgdmFyIHdpZHRoID0gZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIGRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdCA9IHdpZHRoICsgXCJweFwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0RG9jdW1lbnRIZWlnaHQoY20sIG1lYXN1cmUpIHtcbiAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgXCJweFwiO1xuICAgIGNtLmRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLnRvcCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgXCJweFwiO1xuICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5oZWlnaHQgPSAobWVhc3VyZS5kb2NIZWlnaHQgKyBjbS5kaXNwbGF5LmJhckhlaWdodCArIHNjcm9sbEdhcChjbSkpICsgXCJweFwiO1xuICB9XG5cbiAgLy8gUmUtYWxpZ24gbGluZSBudW1iZXJzIGFuZCBndXR0ZXIgbWFya3MgdG8gY29tcGVuc2F0ZSBmb3JcbiAgLy8gaG9yaXpvbnRhbCBzY3JvbGxpbmcuXG4gIGZ1bmN0aW9uIGFsaWduSG9yaXpvbnRhbGx5KGNtKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3O1xuICAgIGlmICghZGlzcGxheS5hbGlnbldpZGdldHMgJiYgKCFkaXNwbGF5Lmd1dHRlcnMuZmlyc3RDaGlsZCB8fCAhY20ub3B0aW9ucy5maXhlZEd1dHRlcikpIHsgcmV0dXJuIH1cbiAgICB2YXIgY29tcCA9IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIC0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgY20uZG9jLnNjcm9sbExlZnQ7XG4gICAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsIGxlZnQgPSBjb21wICsgXCJweFwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykgeyBpZiAoIXZpZXdbaV0uaGlkZGVuKSB7XG4gICAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcikge1xuICAgICAgICBpZiAodmlld1tpXS5ndXR0ZXIpXG4gICAgICAgICAgeyB2aWV3W2ldLmd1dHRlci5zdHlsZS5sZWZ0ID0gbGVmdDsgfVxuICAgICAgICBpZiAodmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kKVxuICAgICAgICAgIHsgdmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kLnN0eWxlLmxlZnQgPSBsZWZ0OyB9XG4gICAgICB9XG4gICAgICB2YXIgYWxpZ24gPSB2aWV3W2ldLmFsaWduYWJsZTtcbiAgICAgIGlmIChhbGlnbikgeyBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKVxuICAgICAgICB7IGFsaWduW2pdLnN0eWxlLmxlZnQgPSBsZWZ0OyB9IH1cbiAgICB9IH1cbiAgICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcilcbiAgICAgIHsgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmxlZnQgPSAoY29tcCArIGd1dHRlclcpICsgXCJweFwiOyB9XG4gIH1cblxuICAvLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaW5lIG51bWJlciBndXR0ZXIgaXMgc3RpbGwgdGhlIHJpZ2h0XG4gIC8vIHNpemUgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IHNpemUuIFJldHVybnMgdHJ1ZSB3aGVuIGFuIHVwZGF0ZVxuICAvLyBpcyBuZWVkZWQuXG4gIGZ1bmN0aW9uIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVOdW1iZXJzKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgbGFzdCA9IGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7XG4gICAgICB2YXIgdGVzdCA9IGRpc3BsYXkubWVhc3VyZS5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBsYXN0KV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIpKTtcbiAgICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRpbmcgPSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXO1xuICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxlLndpZHRoID0gXCJcIjtcbiAgICAgIGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPSBNYXRoLm1heChpbm5lclcsIGRpc3BsYXkubGluZUd1dHRlci5vZmZzZXRXaWR0aCAtIHBhZGRpbmcpICsgMTtcbiAgICAgIGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArIHBhZGRpbmc7XG4gICAgICBkaXNwbGF5LmxpbmVOdW1DaGFycyA9IGRpc3BsYXkubGluZU51bUlubmVyV2lkdGggPyBsYXN0Lmxlbmd0aCA6IC0xO1xuICAgICAgZGlzcGxheS5saW5lR3V0dGVyLnN0eWxlLndpZHRoID0gZGlzcGxheS5saW5lTnVtV2lkdGggKyBcInB4XCI7XG4gICAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbS5kaXNwbGF5KTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0R3V0dGVycyhndXR0ZXJzLCBsaW5lTnVtYmVycykge1xuICAgIHZhciByZXN1bHQgPSBbXSwgc2F3TGluZU51bWJlcnMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGd1dHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuYW1lID0gZ3V0dGVyc1tpXSwgc3R5bGUgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIHsgc3R5bGUgPSBuYW1lLnN0eWxlOyBuYW1lID0gbmFtZS5jbGFzc05hbWU7IH1cbiAgICAgIGlmIChuYW1lID09IFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiKSB7XG4gICAgICAgIGlmICghbGluZU51bWJlcnMpIHsgY29udGludWUgfVxuICAgICAgICBlbHNlIHsgc2F3TGluZU51bWJlcnMgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh7Y2xhc3NOYW1lOiBuYW1lLCBzdHlsZTogc3R5bGV9KTtcbiAgICB9XG4gICAgaWYgKGxpbmVOdW1iZXJzICYmICFzYXdMaW5lTnVtYmVycykgeyByZXN1bHQucHVzaCh7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIiwgc3R5bGU6IG51bGx9KTsgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIFJlYnVpbGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8gdGhlIGxlZnQgb2YgdGhlXG4gIC8vIGNvZGUgbWF0Y2hlcyB0aGVpciB3aWR0aC5cbiAgZnVuY3Rpb24gcmVuZGVyR3V0dGVycyhkaXNwbGF5KSB7XG4gICAgdmFyIGd1dHRlcnMgPSBkaXNwbGF5Lmd1dHRlcnMsIHNwZWNzID0gZGlzcGxheS5ndXR0ZXJTcGVjcztcbiAgICByZW1vdmVDaGlsZHJlbihndXR0ZXJzKTtcbiAgICBkaXNwbGF5LmxpbmVHdXR0ZXIgPSBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BlY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciByZWYgPSBzcGVjc1tpXTtcbiAgICAgIHZhciBjbGFzc05hbWUgPSByZWYuY2xhc3NOYW1lO1xuICAgICAgdmFyIHN0eWxlID0gcmVmLnN0eWxlO1xuICAgICAgdmFyIGdFbHQgPSBndXR0ZXJzLmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyIFwiICsgY2xhc3NOYW1lKSk7XG4gICAgICBpZiAoc3R5bGUpIHsgZ0VsdC5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7IH1cbiAgICAgIGlmIChjbGFzc05hbWUgPT0gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIpIHtcbiAgICAgICAgZGlzcGxheS5saW5lR3V0dGVyID0gZ0VsdDtcbiAgICAgICAgZ0VsdC5zdHlsZS53aWR0aCA9IChkaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ3V0dGVycy5zdHlsZS5kaXNwbGF5ID0gc3BlY3MubGVuZ3RoID8gXCJcIiA6IFwibm9uZVwiO1xuICAgIHVwZGF0ZUd1dHRlclNwYWNlKGRpc3BsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlR3V0dGVycyhjbSkge1xuICAgIHJlbmRlckd1dHRlcnMoY20uZGlzcGxheSk7XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gIH1cblxuICAvLyBUaGUgZGlzcGxheSBoYW5kbGVzIHRoZSBET00gaW50ZWdyYXRpb24sIGJvdGggZm9yIGlucHV0IHJlYWRpbmdcbiAgLy8gYW5kIGNvbnRlbnQgZHJhd2luZy4gSXQgaG9sZHMgcmVmZXJlbmNlcyB0byBET00gbm9kZXMgYW5kXG4gIC8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS5cblxuICBmdW5jdGlvbiBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0LCBvcHRpb25zKSB7XG4gICAgdmFyIGQgPSB0aGlzO1xuICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgIC8vIENvdmVycyBib3R0b20tcmlnaHQgc3F1YXJlIHdoZW4gYm90aCBzY3JvbGxiYXJzIGFyZSBwcmVzZW50LlxuICAgIGQuc2Nyb2xsYmFyRmlsbGVyID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1zY3JvbGxiYXItZmlsbGVyXCIpO1xuICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKTtcbiAgICAvLyBDb3ZlcnMgYm90dG9tIG9mIGd1dHRlciB3aGVuIGNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIGlzIG9uXG4gICAgLy8gYW5kIGggc2Nyb2xsYmFyIGlzIHByZXNlbnQuXG4gICAgZC5ndXR0ZXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXJcIik7XG4gICAgZC5ndXR0ZXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIC8vIFdpbGwgY29udGFpbiB0aGUgYWN0dWFsIGNvZGUsIHBvc2l0aW9uZWQgdG8gY292ZXIgdGhlIHZpZXdwb3J0LlxuICAgIGQubGluZURpdiA9IGVsdFAoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWNvZGVcIik7XG4gICAgLy8gRWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZXNlIHRvIHJlcHJlc2VudCBzZWxlY3Rpb24gYW5kIGN1cnNvcnMuXG4gICAgZC5zZWxlY3Rpb25EaXYgPSBlbHQoXCJkaXZcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IDFcIik7XG4gICAgZC5jdXJzb3JEaXYgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWN1cnNvcnNcIik7XG4gICAgLy8gQSB2aXNpYmlsaXR5OiBoaWRkZW4gZWxlbWVudCB1c2VkIHRvIGZpbmQgdGhlIHNpemUgb2YgdGhpbmdzLlxuICAgIGQubWVhc3VyZSA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKTtcbiAgICAvLyBXaGVuIGxpbmVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IGFyZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJhd24gaW4gdGhpcy5cbiAgICBkLmxpbmVNZWFzdXJlID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO1xuICAgIC8vIFdyYXBzIGV2ZXJ5dGhpbmcgdGhhdCBuZWVkcyB0byBleGlzdCBpbnNpZGUgdGhlIHZlcnRpY2FsbHktcGFkZGVkIGNvb3JkaW5hdGUgc3lzdGVtXG4gICAgZC5saW5lU3BhY2UgPSBlbHRQKFwiZGl2XCIsIFtkLm1lYXN1cmUsIGQubGluZU1lYXN1cmUsIGQuc2VsZWN0aW9uRGl2LCBkLmN1cnNvckRpdiwgZC5saW5lRGl2XSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgb3V0bGluZTogbm9uZVwiKTtcbiAgICB2YXIgbGluZXMgPSBlbHRQKFwiZGl2XCIsIFtkLmxpbmVTcGFjZV0sIFwiQ29kZU1pcnJvci1saW5lc1wiKTtcbiAgICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuXG4gICAgZC5tb3ZlciA9IGVsdChcImRpdlwiLCBbbGluZXNdLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiKTtcbiAgICAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQsIGFsbG93aW5nIHNjcm9sbGluZy5cbiAgICBkLnNpemVyID0gZWx0KFwiZGl2XCIsIFtkLm1vdmVyXSwgXCJDb2RlTWlycm9yLXNpemVyXCIpO1xuICAgIGQuc2l6ZXJXaWR0aCA9IG51bGw7XG4gICAgLy8gQmVoYXZpb3Igb2YgZWx0cyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCBwYWRkaW5nIGlzXG4gICAgLy8gaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGVcbiAgICAvLyBzY3JvbGxhYmxlIGFyZWEgaXMgYmlnIGVub3VnaC5cbiAgICBkLmhlaWdodEZvcmNlciA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiBcIiArIHNjcm9sbGVyR2FwICsgXCJweDsgd2lkdGg6IDFweDtcIik7XG4gICAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkuXG4gICAgZC5ndXR0ZXJzID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXJzXCIpO1xuICAgIGQubGluZUd1dHRlciA9IG51bGw7XG4gICAgLy8gQWN0dWFsIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgICBkLnNjcm9sbGVyID0gZWx0KFwiZGl2XCIsIFtkLnNpemVyLCBkLmhlaWdodEZvcmNlciwgZC5ndXR0ZXJzXSwgXCJDb2RlTWlycm9yLXNjcm9sbFwiKTtcbiAgICBkLnNjcm9sbGVyLnNldEF0dHJpYnV0ZShcInRhYkluZGV4XCIsIFwiLTFcIik7XG4gICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy5cbiAgICBkLndyYXBwZXIgPSBlbHQoXCJkaXZcIiwgW2Quc2Nyb2xsYmFyRmlsbGVyLCBkLmd1dHRlckZpbGxlciwgZC5zY3JvbGxlcl0sIFwiQ29kZU1pcnJvclwiKTtcblxuICAgIC8vIFdvcmsgYXJvdW5kIElFNyB6LWluZGV4IGJ1ZyAobm90IHBlcmZlY3QsIGhlbmNlIElFNyBub3QgcmVhbGx5IGJlaW5nIHN1cHBvcnRlZClcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH1cbiAgICBpZiAoIXdlYmtpdCAmJiAhKGdlY2tvICYmIG1vYmlsZSkpIHsgZC5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9XG5cbiAgICBpZiAocGxhY2UpIHtcbiAgICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgeyBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyB9XG4gICAgICBlbHNlIHsgcGxhY2UoZC53cmFwcGVyKTsgfVxuICAgIH1cblxuICAgIC8vIEN1cnJlbnQgcmVuZGVyZWQgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLlxuICAgIGQudmlld0Zyb20gPSBkLnZpZXdUbyA9IGRvYy5maXJzdDtcbiAgICBkLnJlcG9ydGVkVmlld0Zyb20gPSBkLnJlcG9ydGVkVmlld1RvID0gZG9jLmZpcnN0O1xuICAgIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy5cbiAgICBkLnZpZXcgPSBbXTtcbiAgICBkLnJlbmRlcmVkVmlldyA9IG51bGw7XG4gICAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkXG4gICAgLy8gZm9yIG1lYXN1cmVtZW50LCB3aGlsZSBub3QgaW4gdmlldy5cbiAgICBkLmV4dGVybmFsTWVhc3VyZWQgPSBudWxsO1xuICAgIC8vIEVtcHR5IHNwYWNlIChpbiBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3XG4gICAgZC52aWV3T2Zmc2V0ID0gMDtcbiAgICBkLmxhc3RXcmFwSGVpZ2h0ID0gZC5sYXN0V3JhcFdpZHRoID0gMDtcbiAgICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICAgIGQubmF0aXZlQmFyV2lkdGggPSBkLmJhckhlaWdodCA9IGQuYmFyV2lkdGggPSAwO1xuICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5lY2Vzc2FyeSAod2hlblxuICAgIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgY3Jvc3NlcyBhIGJvdW5kYXJ5IHRoYXQgbWFrZXMgaXRzIHdpZHRoIGNoYW5nZSlcbiAgICBkLmxpbmVOdW1XaWR0aCA9IGQubGluZU51bUlubmVyV2lkdGggPSBkLmxpbmVOdW1DaGFycyA9IG51bGw7XG4gICAgLy8gU2V0IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpc1xuICAgIC8vIGFkZGVkLiBBcyBhbiBvcHRpbWl6YXRpb24sIGxpbmUgd2lkZ2V0IGFsaWduaW5nIGlzIHNraXBwZWQgd2hlblxuICAgIC8vIHRoaXMgaXMgZmFsc2UuXG4gICAgZC5hbGlnbldpZGdldHMgPSBmYWxzZTtcblxuICAgIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7XG5cbiAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXJcbiAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuXG4gICAgZC5tYXhMaW5lID0gbnVsbDtcbiAgICBkLm1heExpbmVMZW5ndGggPSAwO1xuICAgIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgZm9yIG1lYXN1cmluZyB3aGVlbCBzY3JvbGxpbmcgZ3JhbnVsYXJpdHlcbiAgICBkLndoZWVsRFggPSBkLndoZWVsRFkgPSBkLndoZWVsU3RhcnRYID0gZC53aGVlbFN0YXJ0WSA9IG51bGw7XG5cbiAgICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLlxuICAgIGQuc2hpZnQgPSBmYWxzZTtcblxuICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hldGhlciBhbnl0aGluZyBoYXBwZW5lZCBzaW5jZSB0aGUgY29udGV4dCBtZW51XG4gICAgLy8gd2FzIG9wZW5lZC5cbiAgICBkLnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDtcblxuICAgIGQuYWN0aXZlVG91Y2ggPSBudWxsO1xuXG4gICAgZC5ndXR0ZXJTcGVjcyA9IGdldEd1dHRlcnMob3B0aW9ucy5ndXR0ZXJzLCBvcHRpb25zLmxpbmVOdW1iZXJzKTtcbiAgICByZW5kZXJHdXR0ZXJzKGQpO1xuXG4gICAgaW5wdXQuaW5pdChkKTtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZSBkZWx0YSB2YWx1ZXMgcmVwb3J0ZWQgb24gbW91c2Ugd2hlZWwgZXZlbnRzIGFyZVxuICAvLyB1bnN0YW5kYXJkaXplZCBiZXR3ZWVuIGJyb3dzZXJzIGFuZCBldmVuIGJyb3dzZXIgdmVyc2lvbnMsIGFuZFxuICAvLyBnZW5lcmFsbHkgaG9ycmlibHkgdW5wcmVkaWN0YWJsZSwgdGhpcyBjb2RlIHN0YXJ0cyBieSBtZWFzdXJpbmdcbiAgLy8gdGhlIHNjcm9sbCBlZmZlY3QgdGhhdCB0aGUgZmlyc3QgZmV3IG1vdXNlIHdoZWVsIGV2ZW50cyBoYXZlLFxuICAvLyBhbmQsIGZyb20gdGhhdCwgZGV0ZWN0cyB0aGUgd2F5IGl0IGNhbiBjb252ZXJ0IGRlbHRhcyB0byBwaXhlbFxuICAvLyBvZmZzZXRzIGFmdGVyd2FyZHMuXG4gIC8vXG4gIC8vIFRoZSByZWFzb24gd2Ugd2FudCB0byBrbm93IHRoZSBhbW91bnQgYSB3aGVlbCBldmVudCB3aWxsIHNjcm9sbFxuICAvLyBpcyB0aGF0IGl0IGdpdmVzIHVzIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgdGhlXG4gIC8vIGFjdHVhbCBzY3JvbGxpbmcgaGFwcGVucywgcmVkdWNpbmcgZmxpY2tlcmluZy5cblxuICB2YXIgd2hlZWxTYW1wbGVzID0gMCwgd2hlZWxQaXhlbHNQZXJVbml0ID0gbnVsbDtcbiAgLy8gRmlsbCBpbiBhIGJyb3dzZXItZGV0ZWN0ZWQgc3RhcnRpbmcgdmFsdWUgb24gYnJvd3NlcnMgd2hlcmUgd2VcbiAgLy8ga25vdyBvbmUuIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgYWNjdXJhdGUgLS0gdGhlIHJlc3VsdCBvZiB0aGVtXG4gIC8vIGJlaW5nIHdyb25nIHdvdWxkIGp1c3QgYmUgYSBzbGlnaHQgZmxpY2tlciBvbiB0aGUgZmlyc3Qgd2hlZWxcbiAgLy8gc2Nyb2xsIChpZiBpdCBpcyBsYXJnZSBlbm91Z2gpLlxuICBpZiAoaWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS41MzsgfVxuICBlbHNlIGlmIChnZWNrbykgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAxNTsgfVxuICBlbHNlIGlmIChjaHJvbWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS43OyB9XG4gIGVsc2UgaWYgKHNhZmFyaSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtMS8zOyB9XG5cbiAgZnVuY3Rpb24gd2hlZWxFdmVudERlbHRhKGUpIHtcbiAgICB2YXIgZHggPSBlLndoZWVsRGVsdGFYLCBkeSA9IGUud2hlZWxEZWx0YVk7XG4gICAgaWYgKGR4ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7IGR4ID0gZS5kZXRhaWw7IH1cbiAgICBpZiAoZHkgPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5WRVJUSUNBTF9BWElTKSB7IGR5ID0gZS5kZXRhaWw7IH1cbiAgICBlbHNlIGlmIChkeSA9PSBudWxsKSB7IGR5ID0gZS53aGVlbERlbHRhOyB9XG4gICAgcmV0dXJuIHt4OiBkeCwgeTogZHl9XG4gIH1cbiAgZnVuY3Rpb24gd2hlZWxFdmVudFBpeGVscyhlKSB7XG4gICAgdmFyIGRlbHRhID0gd2hlZWxFdmVudERlbHRhKGUpO1xuICAgIGRlbHRhLnggKj0gd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgIGRlbHRhLnkgKj0gd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgIHJldHVybiBkZWx0YVxuICB9XG5cbiAgZnVuY3Rpb24gb25TY3JvbGxXaGVlbChjbSwgZSkge1xuICAgIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7XG5cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNjcm9sbCA9IGRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgLy8gUXVpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2Nyb2xsIGhlcmVcbiAgICB2YXIgY2FuU2Nyb2xsWCA9IHNjcm9sbC5zY3JvbGxXaWR0aCA+IHNjcm9sbC5jbGllbnRXaWR0aDtcbiAgICB2YXIgY2FuU2Nyb2xsWSA9IHNjcm9sbC5zY3JvbGxIZWlnaHQgPiBzY3JvbGwuY2xpZW50SGVpZ2h0O1xuICAgIGlmICghKGR4ICYmIGNhblNjcm9sbFggfHwgZHkgJiYgY2FuU2Nyb2xsWSkpIHsgcmV0dXJuIH1cblxuICAgIC8vIFdlYmtpdCBicm93c2VycyBvbiBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0aGUgdGFyZ2V0XG4gICAgLy8gb2YgdGhlIHNjcm9sbCBldmVudCBpcyByZW1vdmVkIGZyb20gdGhlIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgICAvLyBUaGlzIGhhY2sgKHNlZSByZWxhdGVkIGNvZGUgaW4gcGF0Y2hEaXNwbGF5KSBtYWtlcyBzdXJlIHRoZVxuICAgIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQuXG4gICAgaWYgKGR5ICYmIG1hYyAmJiB3ZWJraXQpIHtcbiAgICAgIG91dGVyOiBmb3IgKHZhciBjdXIgPSBlLnRhcmdldCwgdmlldyA9IGRpc3BsYXkudmlldzsgY3VyICE9IHNjcm9sbDsgY3VyID0gY3VyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHZpZXdbaV0ubm9kZSA9PSBjdXIpIHtcbiAgICAgICAgICAgIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID0gY3VyO1xuICAgICAgICAgICAgYnJlYWsgb3V0ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbiBzb21lIGJyb3dzZXJzLCBob3Jpem9udGFsIHNjcm9sbGluZyB3aWxsIGNhdXNlIHJlZHJhd3MgdG9cbiAgICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIgaGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvXG4gICAgLy8gd3JpZ2dsZSBhcm91bmQgaW4gYSBtb3N0IHVuc2VlbWx5IHdheS4gV2hlbiB3ZSBoYXZlIGFuXG4gICAgLy8gZXN0aW1hdGVkIHBpeGVscy9kZWx0YSB2YWx1ZSwgd2UganVzdCBoYW5kbGUgaG9yaXpvbnRhbFxuICAgIC8vIHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dFxuICAgIC8vIGJldHRlciB0aGFuIGdsaXRjaGluZyBvdXQuXG4gICAgaWYgKGR4ICYmICFnZWNrbyAmJiAhcHJlc3RvICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7XG4gICAgICBpZiAoZHkgJiYgY2FuU2Nyb2xsWSlcbiAgICAgICAgeyB1cGRhdGVTY3JvbGxUb3AoY20sIE1hdGgubWF4KDAsIHNjcm9sbC5zY3JvbGxUb3AgKyBkeSAqIHdoZWVsUGl4ZWxzUGVyVW5pdCkpOyB9XG4gICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1heCgwLCBzY3JvbGwuc2Nyb2xsTGVmdCArIGR4ICogd2hlZWxQaXhlbHNQZXJVbml0KSk7XG4gICAgICAvLyBPbmx5IHByZXZlbnQgZGVmYXVsdCBzY3JvbGxpbmcgaWYgdmVydGljYWwgc2Nyb2xsaW5nIGlzXG4gICAgICAvLyBhY3R1YWxseSBwb3NzaWJsZS4gT3RoZXJ3aXNlLCBpdCBjYXVzZXMgdmVydGljYWwgc2Nyb2xsXG4gICAgICAvLyBqaXR0ZXIgb24gT1NYIHRyYWNrcGFkcyB3aGVuIGRlbHRhWCBpcyBzbWFsbCBhbmQgZGVsdGFZXG4gICAgICAvLyBpcyBsYXJnZSAoaXNzdWUgIzM1NzkpXG4gICAgICBpZiAoIWR5IHx8IChkeSAmJiBjYW5TY3JvbGxZKSlcbiAgICAgICAgeyBlX3ByZXZlbnREZWZhdWx0KGUpOyB9XG4gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVsbDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAnUHJvamVjdCcgdGhlIHZpc2libGUgdmlld3BvcnQgdG8gY292ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZ1xuICAgIC8vIHNjcm9sbGVkIGludG8gdmlldyAoaWYgd2Uga25vdyBlbm91Z2ggdG8gZXN0aW1hdGUgaXQpLlxuICAgIGlmIChkeSAmJiB3aGVlbFBpeGVsc1BlclVuaXQgIT0gbnVsbCkge1xuICAgICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgICAgdmFyIHRvcCA9IGNtLmRvYy5zY3JvbGxUb3AsIGJvdCA9IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgICBpZiAocGl4ZWxzIDwgMCkgeyB0b3AgPSBNYXRoLm1heCgwLCB0b3AgKyBwaXhlbHMgLSA1MCk7IH1cbiAgICAgIGVsc2UgeyBib3QgPSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCk7IH1cbiAgICAgIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHRvcCwgYm90dG9tOiBib3R9KTtcbiAgICB9XG5cbiAgICBpZiAod2hlZWxTYW1wbGVzIDwgMjApIHtcbiAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHtcbiAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IHNjcm9sbC5zY3JvbGxMZWZ0OyBkaXNwbGF5LndoZWVsU3RhcnRZID0gc2Nyb2xsLnNjcm9sbFRvcDtcbiAgICAgICAgZGlzcGxheS53aGVlbERYID0gZHg7IGRpc3BsYXkud2hlZWxEWSA9IGR5O1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoZGlzcGxheS53aGVlbFN0YXJ0WCA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgICAgdmFyIG1vdmVkWCA9IHNjcm9sbC5zY3JvbGxMZWZ0IC0gZGlzcGxheS53aGVlbFN0YXJ0WDtcbiAgICAgICAgICB2YXIgbW92ZWRZID0gc2Nyb2xsLnNjcm9sbFRvcCAtIGRpc3BsYXkud2hlZWxTdGFydFk7XG4gICAgICAgICAgdmFyIHNhbXBsZSA9IChtb3ZlZFkgJiYgZGlzcGxheS53aGVlbERZICYmIG1vdmVkWSAvIGRpc3BsYXkud2hlZWxEWSkgfHxcbiAgICAgICAgICAgIChtb3ZlZFggJiYgZGlzcGxheS53aGVlbERYICYmIG1vdmVkWCAvIGRpc3BsYXkud2hlZWxEWCk7XG4gICAgICAgICAgZGlzcGxheS53aGVlbFN0YXJ0WCA9IGRpc3BsYXkud2hlZWxTdGFydFkgPSBudWxsO1xuICAgICAgICAgIGlmICghc2FtcGxlKSB7IHJldHVybiB9XG4gICAgICAgICAgd2hlZWxQaXhlbHNQZXJVbml0ID0gKHdoZWVsUGl4ZWxzUGVyVW5pdCAqIHdoZWVsU2FtcGxlcyArIHNhbXBsZSkgLyAod2hlZWxTYW1wbGVzICsgMSk7XG4gICAgICAgICAgKyt3aGVlbFNhbXBsZXM7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LndoZWVsRFggKz0gZHg7IGRpc3BsYXkud2hlZWxEWSArPSBkeTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gb2JqZWN0cyBhcmUgaW1tdXRhYmxlLiBBIG5ldyBvbmUgaXMgY3JlYXRlZCBldmVyeSB0aW1lXG4gIC8vIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gQSBzZWxlY3Rpb24gaXMgb25lIG9yIG1vcmUgbm9uLW92ZXJsYXBwaW5nXG4gIC8vIChhbmQgbm9uLXRvdWNoaW5nKSByYW5nZXMsIHNvcnRlZCwgYW5kIGFuIGludGVnZXIgdGhhdCBpbmRpY2F0ZXNcbiAgLy8gd2hpY2ggb25lIGlzIHRoZSBwcmltYXJ5IHNlbGVjdGlvbiAodGhlIG9uZSB0aGF0J3Mgc2Nyb2xsZWQgaW50b1xuICAvLyB2aWV3LCB0aGF0IGdldEN1cnNvciByZXR1cm5zLCBldGMpLlxuICB2YXIgU2VsZWN0aW9uID0gZnVuY3Rpb24ocmFuZ2VzLCBwcmltSW5kZXgpIHtcbiAgICB0aGlzLnJhbmdlcyA9IHJhbmdlcztcbiAgICB0aGlzLnByaW1JbmRleCA9IHByaW1JbmRleDtcbiAgfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLnByaW1hcnkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnJhbmdlc1t0aGlzLnByaW1JbmRleF0gfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmIChvdGhlciA9PSB0aGlzKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAob3RoZXIucHJpbUluZGV4ICE9IHRoaXMucHJpbUluZGV4IHx8IG90aGVyLnJhbmdlcy5sZW5ndGggIT0gdGhpcy5yYW5nZXMubGVuZ3RoKSB7IHJldHVybiBmYWxzZSB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlcmUgPSB0aGlzLnJhbmdlc1tpXSwgdGhlcmUgPSBvdGhlci5yYW5nZXNbaV07XG4gICAgICBpZiAoIWVxdWFsQ3Vyc29yUG9zKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpIHx8ICFlcXVhbEN1cnNvclBvcyhoZXJlLmhlYWQsIHRoZXJlLmhlYWQpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5kZWVwQ29weSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcy5yYW5nZXNbaV0uYW5jaG9yKSwgY29weVBvcyh0aGlzLnJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIHRoaXMucHJpbUluZGV4KVxuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuc29tZXRoaW5nU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgaWYgKCF0aGlzLnJhbmdlc1tpXS5lbXB0eSgpKSB7IHJldHVybiB0cnVlIH0gfVxuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAocG9zLCBlbmQpIHtcbiAgICBpZiAoIWVuZCkgeyBlbmQgPSBwb3M7IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLnJhbmdlc1tpXTtcbiAgICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49IDAgJiYgY21wKHBvcywgcmFuZ2UudG8oKSkgPD0gMClcbiAgICAgICAgeyByZXR1cm4gaSB9XG4gICAgfVxuICAgIHJldHVybiAtMVxuICB9O1xuXG4gIHZhciBSYW5nZSA9IGZ1bmN0aW9uKGFuY2hvciwgaGVhZCkge1xuICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yOyB0aGlzLmhlYWQgPSBoZWFkO1xuICB9O1xuXG4gIFJhbmdlLnByb3RvdHlwZS5mcm9tID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWluUG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpIH07XG4gIFJhbmdlLnByb3RvdHlwZS50byA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKSB9O1xuICBSYW5nZS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmhlYWQubGluZSA9PSB0aGlzLmFuY2hvci5saW5lICYmIHRoaXMuaGVhZC5jaCA9PSB0aGlzLmFuY2hvci5jaCB9O1xuXG4gIC8vIFRha2UgYW4gdW5zb3J0ZWQsIHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNldCBvZiByYW5nZXMsIGFuZFxuICAvLyBidWlsZCBhIHNlbGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2VzIGFycmF5IChtb2RpZnlpbmdcbiAgLy8gaXQpLlxuICBmdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcywgcHJpbUluZGV4KSB7XG4gICAgdmFyIG1heVRvdWNoID0gY20gJiYgY20ub3B0aW9ucy5zZWxlY3Rpb25zTWF5VG91Y2g7XG4gICAgdmFyIHByaW0gPSByYW5nZXNbcHJpbUluZGV4XTtcbiAgICByYW5nZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gY21wKGEuZnJvbSgpLCBiLmZyb20oKSk7IH0pO1xuICAgIHByaW1JbmRleCA9IGluZGV4T2YocmFuZ2VzLCBwcmltKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07XG4gICAgICB2YXIgZGlmZiA9IGNtcChwcmV2LnRvKCksIGN1ci5mcm9tKCkpO1xuICAgICAgaWYgKG1heVRvdWNoICYmICFjdXIuZW1wdHkoKSA/IGRpZmYgPiAwIDogZGlmZiA+PSAwKSB7XG4gICAgICAgIHZhciBmcm9tID0gbWluUG9zKHByZXYuZnJvbSgpLCBjdXIuZnJvbSgpKSwgdG8gPSBtYXhQb3MocHJldi50bygpLCBjdXIudG8oKSk7XG4gICAgICAgIHZhciBpbnYgPSBwcmV2LmVtcHR5KCkgPyBjdXIuZnJvbSgpID09IGN1ci5oZWFkIDogcHJldi5mcm9tKCkgPT0gcHJldi5oZWFkO1xuICAgICAgICBpZiAoaSA8PSBwcmltSW5kZXgpIHsgLS1wcmltSW5kZXg7IH1cbiAgICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihbbmV3IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMClcbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbmQgb2YgYSBjaGFuZ2UgKGl0cyAndG8nIHByb3BlcnR5XG4gIC8vIHJlZmVycyB0byB0aGUgcHJlLWNoYW5nZSBlbmQpLlxuICBmdW5jdGlvbiBjaGFuZ2VFbmQoY2hhbmdlKSB7XG4gICAgaWYgKCFjaGFuZ2UudGV4dCkgeyByZXR1cm4gY2hhbmdlLnRvIH1cbiAgICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgbHN0KGNoYW5nZS50ZXh0KS5sZW5ndGggKyAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgPyBjaGFuZ2UuZnJvbS5jaCA6IDApKVxuICB9XG5cbiAgLy8gQWRqdXN0IGEgcG9zaXRpb24gdG8gcmVmZXIgdG8gdGhlIHBvc3QtY2hhbmdlIHBvc2l0aW9uIG9mIHRoZVxuICAvLyBzYW1lIHRleHQsIG9yIHRoZSBlbmQgb2YgdGhlIGNoYW5nZSBpZiB0aGUgY2hhbmdlIGNvdmVycyBpdC5cbiAgZnVuY3Rpb24gYWRqdXN0Rm9yQ2hhbmdlKHBvcywgY2hhbmdlKSB7XG4gICAgaWYgKGNtcChwb3MsIGNoYW5nZS5mcm9tKSA8IDApIHsgcmV0dXJuIHBvcyB9XG4gICAgaWYgKGNtcChwb3MsIGNoYW5nZS50bykgPD0gMCkgeyByZXR1cm4gY2hhbmdlRW5kKGNoYW5nZSkgfVxuXG4gICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpIC0gMSwgY2ggPSBwb3MuY2g7XG4gICAgaWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSB7IGNoICs9IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOyB9XG4gICAgcmV0dXJuIFBvcyhsaW5lLCBjaClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIG91dC5wdXNoKG5ldyBSYW5nZShhZGp1c3RGb3JDaGFuZ2UocmFuZ2UuYW5jaG9yLCBjaGFuZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdEZvckNoYW5nZShyYW5nZS5oZWFkLCBjaGFuZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIGRvYy5zZWwucHJpbUluZGV4KVxuICB9XG5cbiAgZnVuY3Rpb24gb2Zmc2V0UG9zKHBvcywgb2xkLCBudykge1xuICAgIGlmIChwb3MubGluZSA9PSBvbGQubGluZSlcbiAgICAgIHsgcmV0dXJuIFBvcyhudy5saW5lLCBwb3MuY2ggLSBvbGQuY2ggKyBudy5jaCkgfVxuICAgIGVsc2VcbiAgICAgIHsgcmV0dXJuIFBvcyhudy5saW5lICsgKHBvcy5saW5lIC0gb2xkLmxpbmUpLCBwb3MuY2gpIH1cbiAgfVxuXG4gIC8vIFVzZWQgYnkgcmVwbGFjZVNlbGVjdGlvbnMgdG8gYWxsb3cgbW92aW5nIHRoZSBzZWxlY3Rpb24gdG8gdGhlXG4gIC8vIHN0YXJ0IG9yIGFyb3VuZCB0aGUgcmVwbGFjZWQgdGVzdC4gSGludCBtYXkgYmUgXCJzdGFydFwiIG9yIFwiYXJvdW5kXCIuXG4gIGZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChkb2MsIGNoYW5nZXMsIGhpbnQpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIG9sZFByZXYgPSBQb3MoZG9jLmZpcnN0LCAwKSwgbmV3UHJldiA9IG9sZFByZXY7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tpXTtcbiAgICAgIHZhciBmcm9tID0gb2Zmc2V0UG9zKGNoYW5nZS5mcm9tLCBvbGRQcmV2LCBuZXdQcmV2KTtcbiAgICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xkUHJldiwgbmV3UHJldik7XG4gICAgICBvbGRQcmV2ID0gY2hhbmdlLnRvO1xuICAgICAgbmV3UHJldiA9IHRvO1xuICAgICAgaWYgKGhpbnQgPT0gXCJhcm91bmRcIikge1xuICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXSwgaW52ID0gY21wKHJhbmdlLmhlYWQsIHJhbmdlLmFuY2hvcikgPCAwO1xuICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoaW52ID8gdG8gOiBmcm9tLCBpbnYgPyBmcm9tIDogdG8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKGZyb20sIGZyb20pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbihvdXQsIGRvYy5zZWwucHJpbUluZGV4KVxuICB9XG5cbiAgLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRvciBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLlxuXG4gIGZ1bmN0aW9uIGxvYWRNb2RlKGNtKSB7XG4gICAgY20uZG9jLm1vZGUgPSBnZXRNb2RlKGNtLm9wdGlvbnMsIGNtLmRvYy5tb2RlT3B0aW9uKTtcbiAgICByZXNldE1vZGVTdGF0ZShjbSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldE1vZGVTdGF0ZShjbSkge1xuICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH1cbiAgICAgIGlmIChsaW5lLnN0eWxlcykgeyBsaW5lLnN0eWxlcyA9IG51bGw7IH1cbiAgICB9KTtcbiAgICBjbS5kb2MubW9kZUZyb250aWVyID0gY20uZG9jLmhpZ2hsaWdodEZyb250aWVyID0gY20uZG9jLmZpcnN0O1xuICAgIHN0YXJ0V29ya2VyKGNtLCAxMDApO1xuICAgIGNtLnN0YXRlLm1vZGVHZW4rKztcbiAgICBpZiAoY20uY3VyT3ApIHsgcmVnQ2hhbmdlKGNtKTsgfVxuICB9XG5cbiAgLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkVcblxuICAvLyBCeSBkZWZhdWx0LCB1cGRhdGVzIHRoYXQgc3RhcnQgYW5kIGVuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZVxuICAvLyBhcmUgdHJlYXRlZCBzcGVjaWFsbHksIGluIG9yZGVyIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIG9mIGxpbmVcbiAgLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdpdGggdGhlIHRleHQgYmVoYXZlIG1vcmUgaW50dWl0aXZlLlxuICBmdW5jdGlvbiBpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkge1xuICAgIHJldHVybiBjaGFuZ2UuZnJvbS5jaCA9PSAwICYmIGNoYW5nZS50by5jaCA9PSAwICYmIGxzdChjaGFuZ2UudGV4dCkgPT0gXCJcIiAmJlxuICAgICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKVxuICB9XG5cbiAgLy8gUGVyZm9ybSBhIGNoYW5nZSBvbiB0aGUgZG9jdW1lbnQgZGF0YSBzdHJ1Y3R1cmUuXG4gIGZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7XG4gICAgZnVuY3Rpb24gc3BhbnNGb3Iobikge3JldHVybiBtYXJrZWRTcGFucyA/IG1hcmtlZFNwYW5zW25dIDogbnVsbH1cbiAgICBmdW5jdGlvbiB1cGRhdGUobGluZSwgdGV4dCwgc3BhbnMpIHtcbiAgICAgIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KTtcbiAgICAgIHNpZ25hbExhdGVyKGxpbmUsIFwiY2hhbmdlXCIsIGxpbmUsIGNoYW5nZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpbmVzRm9yKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKVxuICAgICAgICB7IHJlc3VsdC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCkpOyB9XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDtcbiAgICB2YXIgZmlyc3RMaW5lID0gZ2V0TGluZShkb2MsIGZyb20ubGluZSksIGxhc3RMaW5lID0gZ2V0TGluZShkb2MsIHRvLmxpbmUpO1xuICAgIHZhciBsYXN0VGV4dCA9IGxzdCh0ZXh0KSwgbGFzdFNwYW5zID0gc3BhbnNGb3IodGV4dC5sZW5ndGggLSAxKSwgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZTtcblxuICAgIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmVcbiAgICBpZiAoY2hhbmdlLmZ1bGwpIHtcbiAgICAgIGRvYy5pbnNlcnQoMCwgbGluZXNGb3IoMCwgdGV4dC5sZW5ndGgpKTtcbiAgICAgIGRvYy5yZW1vdmUodGV4dC5sZW5ndGgsIGRvYy5zaXplIC0gdGV4dC5sZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoaXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgd2hvbGUtbGluZSByZXBsYWNlLiBUcmVhdGVkIHNwZWNpYWxseSB0byBtYWtlXG4gICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uXG4gICAgICB2YXIgYWRkZWQgPSBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0TGluZS50ZXh0LCBsYXN0U3BhbnMpO1xuICAgICAgaWYgKG5saW5lcykgeyBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsgfVxuICAgICAgaWYgKGFkZGVkLmxlbmd0aCkgeyBkb2MuaW5zZXJ0KGZyb20ubGluZSwgYWRkZWQpOyB9XG4gICAgfSBlbHNlIGlmIChmaXJzdExpbmUgPT0gbGFzdExpbmUpIHtcbiAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgbGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYWRkZWQkMSA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIGFkZGVkJDEucHVzaChuZXcgTGluZShsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkpO1xuICAgICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIHRleHRbMF0sIHNwYW5zRm9yKDApKTtcbiAgICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCQxKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRleHQubGVuZ3RoID09IDEpIHtcbiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBzcGFuc0ZvcigwKSk7XG4gICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgICAgdXBkYXRlKGxhc3RMaW5lLCBsYXN0VGV4dCArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpO1xuICAgICAgdmFyIGFkZGVkJDIgPSBsaW5lc0ZvcigxLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgaWYgKG5saW5lcyA+IDEpIHsgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxKTsgfVxuICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCQyKTtcbiAgICB9XG5cbiAgICBzaWduYWxMYXRlcihkb2MsIFwiY2hhbmdlXCIsIGRvYywgY2hhbmdlKTtcbiAgfVxuXG4gIC8vIENhbGwgZiBmb3IgYWxsIGxpbmtlZCBkb2N1bWVudHMuXG4gIGZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkge1xuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZShkb2MsIHNraXAsIHNoYXJlZEhpc3QpIHtcbiAgICAgIGlmIChkb2MubGlua2VkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcmVsID0gZG9jLmxpbmtlZFtpXTtcbiAgICAgICAgaWYgKHJlbC5kb2MgPT0gc2tpcCkgeyBjb250aW51ZSB9XG4gICAgICAgIHZhciBzaGFyZWQgPSBzaGFyZWRIaXN0ICYmIHJlbC5zaGFyZWRIaXN0O1xuICAgICAgICBpZiAoc2hhcmVkSGlzdE9ubHkgJiYgIXNoYXJlZCkgeyBjb250aW51ZSB9XG4gICAgICAgIGYocmVsLmRvYywgc2hhcmVkKTtcbiAgICAgICAgcHJvcGFnYXRlKHJlbC5kb2MsIGRvYywgc2hhcmVkKTtcbiAgICAgIH0gfVxuICAgIH1cbiAgICBwcm9wYWdhdGUoZG9jLCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIC8vIEF0dGFjaCBhIGRvY3VtZW50IHRvIGFuIGVkaXRvci5cbiAgZnVuY3Rpb24gYXR0YWNoRG9jKGNtLCBkb2MpIHtcbiAgICBpZiAoZG9jLmNtKSB7IHRocm93IG5ldyBFcnJvcihcIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuXCIpIH1cbiAgICBjbS5kb2MgPSBkb2M7XG4gICAgZG9jLmNtID0gY207XG4gICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gICAgbG9hZE1vZGUoY20pO1xuICAgIHNldERpcmVjdGlvbkNsYXNzKGNtKTtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGZpbmRNYXhMaW5lKGNtKTsgfVxuICAgIGNtLm9wdGlvbnMubW9kZSA9IGRvYy5tb2RlT3B0aW9uO1xuICAgIHJlZ0NoYW5nZShjbSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXREaXJlY3Rpb25DbGFzcyhjbSkge1xuICAoY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiID8gYWRkQ2xhc3MgOiBybUNsYXNzKShjbS5kaXNwbGF5LmxpbmVEaXYsIFwiQ29kZU1pcnJvci1ydGxcIik7XG4gIH1cblxuICBmdW5jdGlvbiBkaXJlY3Rpb25DaGFuZ2VkKGNtKSB7XG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0RGlyZWN0aW9uQ2xhc3MoY20pO1xuICAgICAgcmVnQ2hhbmdlKGNtKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEhpc3Rvcnkoc3RhcnRHZW4pIHtcbiAgICAvLyBBcnJheXMgb2YgY2hhbmdlIGV2ZW50cyBhbmQgc2VsZWN0aW9ucy4gRG9pbmcgc29tZXRoaW5nIGFkZHMgYW5cbiAgICAvLyBldmVudCB0byBkb25lIGFuZCBjbGVhcnMgdW5kby4gVW5kb2luZyBtb3ZlcyBldmVudHMgZnJvbSBkb25lXG4gICAgLy8gdG8gdW5kb25lLCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgICB0aGlzLmRvbmUgPSBbXTsgdGhpcy51bmRvbmUgPSBbXTtcbiAgICB0aGlzLnVuZG9EZXB0aCA9IEluZmluaXR5O1xuICAgIC8vIFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1bmRvXG4gICAgLy8gZXZlbnRcbiAgICB0aGlzLmxhc3RNb2RUaW1lID0gdGhpcy5sYXN0U2VsVGltZSA9IDA7XG4gICAgdGhpcy5sYXN0T3AgPSB0aGlzLmxhc3RTZWxPcCA9IG51bGw7XG4gICAgdGhpcy5sYXN0T3JpZ2luID0gdGhpcy5sYXN0U2VsT3JpZ2luID0gbnVsbDtcbiAgICAvLyBVc2VkIGJ5IHRoZSBpc0NsZWFuKCkgbWV0aG9kXG4gICAgdGhpcy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGhpc3RvcnkgY2hhbmdlIGV2ZW50IGZyb20gYW4gdXBkYXRlRG9jLXN0eWxlIGNoYW5nZVxuICAvLyBvYmplY3QuXG4gIGZ1bmN0aW9uIGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIGhpc3RDaGFuZ2UgPSB7ZnJvbTogY29weVBvcyhjaGFuZ2UuZnJvbSksIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKSwgdGV4dDogZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pfTtcbiAgICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTtcbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gYXR0YWNoTG9jYWxTcGFucyhkb2MsIGhpc3RDaGFuZ2UsIGNoYW5nZS5mcm9tLmxpbmUsIGNoYW5nZS50by5saW5lICsgMSk7IH0sIHRydWUpO1xuICAgIHJldHVybiBoaXN0Q2hhbmdlXG4gIH1cblxuICAvLyBQb3AgYWxsIHNlbGVjdGlvbiBldmVudHMgb2ZmIHRoZSBlbmQgb2YgYSBoaXN0b3J5IGFycmF5LiBTdG9wIGF0XG4gIC8vIGEgY2hhbmdlIGV2ZW50LlxuICBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbkV2ZW50cyhhcnJheSkge1xuICAgIHdoaWxlIChhcnJheS5sZW5ndGgpIHtcbiAgICAgIHZhciBsYXN0ID0gbHN0KGFycmF5KTtcbiAgICAgIGlmIChsYXN0LnJhbmdlcykgeyBhcnJheS5wb3AoKTsgfVxuICAgICAgZWxzZSB7IGJyZWFrIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5kIHRoZSB0b3AgY2hhbmdlIGV2ZW50IGluIHRoZSBoaXN0b3J5LiBQb3Agb2ZmIHNlbGVjdGlvblxuICAvLyBldmVudHMgdGhhdCBhcmUgaW4gdGhlIHdheS5cbiAgZnVuY3Rpb24gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LmRvbmUpO1xuICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoICYmICFsc3QoaGlzdC5kb25lKS5yYW5nZXMpIHtcbiAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKVxuICAgIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMl0ucmFuZ2VzKSB7XG4gICAgICBoaXN0LmRvbmUucG9wKCk7XG4gICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSlcbiAgICB9XG4gIH1cblxuICAvLyBSZWdpc3RlciBhIGNoYW5nZSBpbiB0aGUgaGlzdG9yeS4gTWVyZ2VzIGNoYW5nZXMgdGhhdCBhcmUgd2l0aGluXG4gIC8vIGEgc2luZ2xlIG9wZXJhdGlvbiwgb3IgYXJlIGNsb3NlIHRvZ2V0aGVyIHdpdGggYW4gb3JpZ2luIHRoYXRcbiAgLy8gYWxsb3dzIG1lcmdpbmcgKHN0YXJ0aW5nIHdpdGggXCIrXCIpIGludG8gYSBzaW5nbGUgZXZlbnQuXG4gIGZ1bmN0aW9uIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIG9wSWQpIHtcbiAgICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5O1xuICAgIGhpc3QudW5kb25lLmxlbmd0aCA9IDA7XG4gICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1cjtcbiAgICB2YXIgbGFzdDtcblxuICAgIGlmICgoaGlzdC5sYXN0T3AgPT0gb3BJZCB8fFxuICAgICAgICAgaGlzdC5sYXN0T3JpZ2luID09IGNoYW5nZS5vcmlnaW4gJiYgY2hhbmdlLm9yaWdpbiAmJlxuICAgICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSBcIitcIiAmJiBoaXN0Lmxhc3RNb2RUaW1lID4gdGltZSAtIChkb2MuY20gPyBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSA6IDUwMCkpIHx8XG4gICAgICAgICAgY2hhbmdlLm9yaWdpbi5jaGFyQXQoMCkgPT0gXCIqXCIpKSAmJlxuICAgICAgICAoY3VyID0gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGhpc3QubGFzdE9wID09IG9wSWQpKSkge1xuICAgICAgLy8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUgbGFzdCBldmVudFxuICAgICAgbGFzdCA9IGxzdChjdXIuY2hhbmdlcyk7XG4gICAgICBpZiAoY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDAgJiYgY21wKGNoYW5nZS5mcm9tLCBsYXN0LnRvKSA9PSAwKSB7XG4gICAgICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzaW1wbGUgaW5zZXJ0aW9uIC0tIGRvbid0IHdhbnQgdG8gYWRkXG4gICAgICAgIC8vIG5ldyBjaGFuZ2VzZXRzIGZvciBldmVyeSBjaGFyYWN0ZXIgdHlwZWRcbiAgICAgICAgbGFzdC50byA9IGNoYW5nZUVuZChjaGFuZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIG5ldyBzdWItZXZlbnRcbiAgICAgICAgY3VyLmNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYW4gbm90IGJlIG1lcmdlZCwgc3RhcnQgYSBuZXcgZXZlbnQuXG4gICAgICB2YXIgYmVmb3JlID0gbHN0KGhpc3QuZG9uZSk7XG4gICAgICBpZiAoIWJlZm9yZSB8fCAhYmVmb3JlLnJhbmdlcylcbiAgICAgICAgeyBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGRvYy5zZWwsIGhpc3QuZG9uZSk7IH1cbiAgICAgIGN1ciA9IHtjaGFuZ2VzOiBbaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpXSxcbiAgICAgICAgICAgICBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259O1xuICAgICAgaGlzdC5kb25lLnB1c2goY3VyKTtcbiAgICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpIHtcbiAgICAgICAgaGlzdC5kb25lLnNoaWZ0KCk7XG4gICAgICAgIGlmICghaGlzdC5kb25lWzBdLnJhbmdlcykgeyBoaXN0LmRvbmUuc2hpZnQoKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBoaXN0LmRvbmUucHVzaChzZWxBZnRlcik7XG4gICAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247XG4gICAgaGlzdC5sYXN0TW9kVGltZSA9IGhpc3QubGFzdFNlbFRpbWUgPSB0aW1lO1xuICAgIGhpc3QubGFzdE9wID0gaGlzdC5sYXN0U2VsT3AgPSBvcElkO1xuICAgIGhpc3QubGFzdE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47XG5cbiAgICBpZiAoIWxhc3QpIHsgc2lnbmFsKGRvYywgXCJoaXN0b3J5QWRkZWRcIik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIHByZXYsIHNlbCkge1xuICAgIHZhciBjaCA9IG9yaWdpbi5jaGFyQXQoMCk7XG4gICAgcmV0dXJuIGNoID09IFwiKlwiIHx8XG4gICAgICBjaCA9PSBcIitcIiAmJlxuICAgICAgcHJldi5yYW5nZXMubGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoICYmXG4gICAgICBwcmV2LnNvbWV0aGluZ1NlbGVjdGVkKCkgPT0gc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkgJiZcbiAgICAgIG5ldyBEYXRlIC0gZG9jLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKVxuICB9XG5cbiAgLy8gQ2FsbGVkIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcywgc2V0cyB0aGUgbmV3IHNlbGVjdGlvbiBhc1xuICAvLyB0aGUgcGVuZGluZyBzZWxlY3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5nXG4gIC8vIHNlbGVjdGlvbiBpbnRvIHRoZSAnZG9uZScgYXJyYXkgd2hlbiBpdCB3YXMgc2lnbmlmaWNhbnRseVxuICAvLyBkaWZmZXJlbnQgKGluIG51bWJlciBvZiBzZWxlY3RlZCByYW5nZXMsIGVtcHRpbmVzcywgb3IgdGltZSkuXG4gIGZ1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIHNlbCwgb3BJZCwgb3B0aW9ucykge1xuICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIG9yaWdpbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW47XG5cbiAgICAvLyBBIG5ldyBldmVudCBpcyBzdGFydGVkIHdoZW4gdGhlIHByZXZpb3VzIG9yaWdpbiBkb2VzIG5vdCBtYXRjaFxuICAgIC8vIHRoZSBjdXJyZW50LCBvciB0aGUgb3JpZ2lucyBkb24ndCBhbGxvdyBtYXRjaGluZy4gT3JpZ2luc1xuICAgIC8vIHN0YXJ0aW5nIHdpdGggKiBhcmUgYWx3YXlzIG1lcmdlZCwgdGhvc2Ugc3RhcnRpbmcgd2l0aCArIGFyZVxuICAgIC8vIG1lcmdlZCB3aGVuIHNpbWlsYXIgYW5kIGNsb3NlIHRvZ2V0aGVyIGluIHRpbWUuXG4gICAgaWYgKG9wSWQgPT0gaGlzdC5sYXN0U2VsT3AgfHxcbiAgICAgICAgKG9yaWdpbiAmJiBoaXN0Lmxhc3RTZWxPcmlnaW4gPT0gb3JpZ2luICYmXG4gICAgICAgICAoaGlzdC5sYXN0TW9kVGltZSA9PSBoaXN0Lmxhc3RTZWxUaW1lICYmIGhpc3QubGFzdE9yaWdpbiA9PSBvcmlnaW4gfHxcbiAgICAgICAgICBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBsc3QoaGlzdC5kb25lKSwgc2VsKSkpKVxuICAgICAgeyBoaXN0LmRvbmVbaGlzdC5kb25lLmxlbmd0aCAtIDFdID0gc2VsOyB9XG4gICAgZWxzZVxuICAgICAgeyBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgaGlzdC5kb25lKTsgfVxuXG4gICAgaGlzdC5sYXN0U2VsVGltZSA9ICtuZXcgRGF0ZTtcbiAgICBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBvcmlnaW47XG4gICAgaGlzdC5sYXN0U2VsT3AgPSBvcElkO1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY2xlYXJSZWRvICE9PSBmYWxzZSlcbiAgICAgIHsgY2xlYXJTZWxlY3Rpb25FdmVudHMoaGlzdC51bmRvbmUpOyB9XG4gIH1cblxuICBmdW5jdGlvbiBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgZGVzdCkge1xuICAgIHZhciB0b3AgPSBsc3QoZGVzdCk7XG4gICAgaWYgKCEodG9wICYmIHRvcC5yYW5nZXMgJiYgdG9wLmVxdWFscyhzZWwpKSlcbiAgICAgIHsgZGVzdC5wdXNoKHNlbCk7IH1cbiAgfVxuXG4gIC8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3RvcnkuXG4gIGZ1bmN0aW9uIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBjaGFuZ2UsIGZyb20sIHRvKSB7XG4gICAgdmFyIGV4aXN0aW5nID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdLCBuID0gMDtcbiAgICBkb2MuaXRlcihNYXRoLm1heChkb2MuZmlyc3QsIGZyb20pLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgdG8pLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUubWFya2VkU3BhbnMpXG4gICAgICAgIHsgKGV4aXN0aW5nIHx8IChleGlzdGluZyA9IGNoYW5nZVtcInNwYW5zX1wiICsgZG9jLmlkXSA9IHt9KSlbbl0gPSBsaW5lLm1hcmtlZFNwYW5zOyB9XG4gICAgICArK247XG4gICAgfSk7XG4gIH1cblxuICAvLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBtYXJrZWQgc3BhbnMsIHRob3NlXG4gIC8vIHRoYXQgaGF2ZSBiZWVuIGV4cGxpY2l0bHkgY2xlYXJlZCBzaG91bGQgbm90IGJlIHJlc3RvcmVkLlxuICBmdW5jdGlvbiByZW1vdmVDbGVhcmVkU3BhbnMoc3BhbnMpIHtcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgb3V0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChzcGFuc1tpXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIHsgb3V0ID0gc3BhbnMuc2xpY2UoMCwgaSk7IH0gfVxuICAgICAgZWxzZSBpZiAob3V0KSB7IG91dC5wdXNoKHNwYW5zW2ldKTsgfVxuICAgIH1cbiAgICByZXR1cm4gIW91dCA/IHNwYW5zIDogb3V0Lmxlbmd0aCA/IG91dCA6IG51bGxcbiAgfVxuXG4gIC8vIFJldHJpZXZlIGFuZCBmaWx0ZXIgdGhlIG9sZCBtYXJrZWQgc3BhbnMgc3RvcmVkIGluIGEgY2hhbmdlIGV2ZW50LlxuICBmdW5jdGlvbiBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSkge1xuICAgIHZhciBmb3VuZCA9IGNoYW5nZVtcInNwYW5zX1wiICsgZG9jLmlkXTtcbiAgICBpZiAoIWZvdW5kKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgbncgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZS50ZXh0Lmxlbmd0aDsgKytpKVxuICAgICAgeyBudy5wdXNoKHJlbW92ZUNsZWFyZWRTcGFucyhmb3VuZFtpXSkpOyB9XG4gICAgcmV0dXJuIG53XG4gIH1cblxuICAvLyBVc2VkIGZvciB1bi9yZS1kb2luZyBjaGFuZ2VzIGZyb20gdGhlIGhpc3RvcnkuIENvbWJpbmVzIHRoZVxuICAvLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRoIHRoZSBzZXQgb2Ygc3BhbnMgdGhhdFxuICAvLyBleGlzdGVkIGluIHRoZSBoaXN0b3J5IChzbyB0aGF0IGRlbGV0aW5nIGFyb3VuZCBhIHNwYW4gYW5kIHRoZW5cbiAgLy8gdW5kb2luZyBicmluZ3MgYmFjayB0aGUgc3BhbikuXG4gIGZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHtcbiAgICB2YXIgb2xkID0gZ2V0T2xkU3BhbnMoZG9jLCBjaGFuZ2UpO1xuICAgIHZhciBzdHJldGNoZWQgPSBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKTtcbiAgICBpZiAoIW9sZCkgeyByZXR1cm4gc3RyZXRjaGVkIH1cbiAgICBpZiAoIXN0cmV0Y2hlZCkgeyByZXR1cm4gb2xkIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgb2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldO1xuICAgICAgaWYgKG9sZEN1ciAmJiBzdHJldGNoQ3VyKSB7XG4gICAgICAgIHNwYW5zOiBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmV0Y2hDdXIubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICB2YXIgc3BhbiA9IHN0cmV0Y2hDdXJbal07XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBvbGRDdXIubGVuZ3RoOyArK2spXG4gICAgICAgICAgICB7IGlmIChvbGRDdXJba10ubWFya2VyID09IHNwYW4ubWFya2VyKSB7IGNvbnRpbnVlIHNwYW5zIH0gfVxuICAgICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0cmV0Y2hDdXIpIHtcbiAgICAgICAgb2xkW2ldID0gc3RyZXRjaEN1cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9sZFxuICB9XG5cbiAgLy8gVXNlZCBib3RoIHRvIHByb3ZpZGUgYSBKU09OLXNhZmUgb2JqZWN0IGluIC5nZXRIaXN0b3J5LCBhbmQsIHdoZW5cbiAgLy8gZGV0YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5IGluIHR3b1xuICBmdW5jdGlvbiBjb3B5SGlzdG9yeUFycmF5KGV2ZW50cywgbmV3R3JvdXAsIGluc3RhbnRpYXRlU2VsKSB7XG4gICAgdmFyIGNvcHkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2ldO1xuICAgICAgaWYgKGV2ZW50LnJhbmdlcykge1xuICAgICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgdmFyIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107XG4gICAgICBjb3B5LnB1c2goe2NoYW5nZXM6IG5ld0NoYW5nZXN9KTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwgbSA9ICh2b2lkIDApO1xuICAgICAgICBuZXdDaGFuZ2VzLnB1c2goe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlLnRvLCB0ZXh0OiBjaGFuZ2UudGV4dH0pO1xuICAgICAgICBpZiAobmV3R3JvdXApIHsgZm9yICh2YXIgcHJvcCBpbiBjaGFuZ2UpIHsgaWYgKG0gPSBwcm9wLm1hdGNoKC9ec3BhbnNfKFxcZCspJC8pKSB7XG4gICAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAtMSkge1xuICAgICAgICAgICAgbHN0KG5ld0NoYW5nZXMpW3Byb3BdID0gY2hhbmdlW3Byb3BdO1xuICAgICAgICAgICAgZGVsZXRlIGNoYW5nZVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gfSB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH1cblxuICAvLyBUaGUgJ3Njcm9sbCcgcGFyYW1ldGVyIGdpdmVuIHRvIG1hbnkgb2YgdGhlc2UgaW5kaWNhdGVkIHdoZXRoZXJcbiAgLy8gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24gc2hvdWxkIGJlIHNjcm9sbGVkIGludG8gdmlldyBhZnRlclxuICAvLyBtb2RpZnlpbmcgdGhlIHNlbGVjdGlvbi5cblxuICAvLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBleHRlbmQgZmxhZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0b1xuICAvLyBpbmNsdWRlIGEgZ2l2ZW4gcG9zaXRpb24gKGFuZCBvcHRpb25hbGx5IGEgc2Vjb25kIHBvc2l0aW9uKS5cbiAgLy8gT3RoZXJ3aXNlLCBzaW1wbHkgcmV0dXJucyB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9zaXRpb25zLlxuICAvLyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLlxuICBmdW5jdGlvbiBleHRlbmRSYW5nZShyYW5nZSwgaGVhZCwgb3RoZXIsIGV4dGVuZCkge1xuICAgIGlmIChleHRlbmQpIHtcbiAgICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3I7XG4gICAgICBpZiAob3RoZXIpIHtcbiAgICAgICAgdmFyIHBvc0JlZm9yZSA9IGNtcChoZWFkLCBhbmNob3IpIDwgMDtcbiAgICAgICAgaWYgKHBvc0JlZm9yZSAhPSAoY21wKG90aGVyLCBhbmNob3IpIDwgMCkpIHtcbiAgICAgICAgICBhbmNob3IgPSBoZWFkO1xuICAgICAgICAgIGhlYWQgPSBvdGhlcjtcbiAgICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNtcChoZWFkLCBvdGhlcikgPCAwKSkge1xuICAgICAgICAgIGhlYWQgPSBvdGhlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBSYW5nZShhbmNob3IsIGhlYWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZClcbiAgICB9XG4gIH1cblxuICAvLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSByZXN0LlxuICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb24oZG9jLCBoZWFkLCBvdGhlciwgb3B0aW9ucywgZXh0ZW5kKSB7XG4gICAgaWYgKGV4dGVuZCA9PSBudWxsKSB7IGV4dGVuZCA9IGRvYy5jbSAmJiAoZG9jLmNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCk7IH1cbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtleHRlbmRSYW5nZShkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIsIGV4dGVuZCldLCAwKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBFeHRlbmQgYWxsIHNlbGVjdGlvbnMgKHBvcyBpcyBhbiBhcnJheSBvZiBzZWxlY3Rpb25zIHdpdGggbGVuZ3RoXG4gIC8vIGVxdWFsIHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucylcbiAgZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9ucyhkb2MsIGhlYWRzLCBvcHRpb25zKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBleHRlbmQgPSBkb2MuY20gJiYgKGRvYy5jbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICB7IG91dFtpXSA9IGV4dGVuZFJhbmdlKGRvYy5zZWwucmFuZ2VzW2ldLCBoZWFkc1tpXSwgbnVsbCwgZXh0ZW5kKTsgfVxuICAgIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIGRvYy5zZWwucHJpbUluZGV4KTtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBuZXdTZWwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyBhIHNpbmdsZSByYW5nZSBpbiB0aGUgc2VsZWN0aW9uLlxuICBmdW5jdGlvbiByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgaSwgcmFuZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgcmFuZ2VzID0gZG9jLnNlbC5yYW5nZXMuc2xpY2UoMCk7XG4gICAgcmFuZ2VzW2ldID0gcmFuZ2U7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGRvYy5jbSwgcmFuZ2VzLCBkb2Muc2VsLnByaW1JbmRleCksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUmVzZXQgdGhlIHNlbGVjdGlvbiB0byBhIHNpbmdsZSByYW5nZS5cbiAgZnVuY3Rpb24gc2V0U2ltcGxlU2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gR2l2ZSBiZWZvcmVTZWxlY3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBjaGFuZ2UgdG8gaW5mbHVlbmNlIGFcbiAgLy8gc2VsZWN0aW9uIHVwZGF0ZS5cbiAgZnVuY3Rpb24gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIHJhbmdlczogc2VsLnJhbmdlcyxcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24ocmFuZ2VzKSB7XG4gICAgICAgIHRoaXMucmFuZ2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgdGhpcy5yYW5nZXNbaV0gPSBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5hbmNob3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uaGVhZCkpOyB9XG4gICAgICB9LFxuICAgICAgb3JpZ2luOiBvcHRpb25zICYmIG9wdGlvbnMub3JpZ2luXG4gICAgfTtcbiAgICBzaWduYWwoZG9jLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBkb2MsIG9iaik7XG4gICAgaWYgKGRvYy5jbSkgeyBzaWduYWwoZG9jLmNtLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBkb2MuY20sIG9iaik7IH1cbiAgICBpZiAob2JqLnJhbmdlcyAhPSBzZWwucmFuZ2VzKSB7IHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvYmoucmFuZ2VzLCBvYmoucmFuZ2VzLmxlbmd0aCAtIDEpIH1cbiAgICBlbHNlIHsgcmV0dXJuIHNlbCB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeShkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIHZhciBkb25lID0gZG9jLmhpc3RvcnkuZG9uZSwgbGFzdCA9IGxzdChkb25lKTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LnJhbmdlcykge1xuICAgICAgZG9uZVtkb25lLmxlbmd0aCAtIDFdID0gc2VsO1xuICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgc2VsLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgYSBuZXcgc2VsZWN0aW9uLlxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIGRvYy5zZWwsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTiwgb3B0aW9ucyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIikpXG4gICAgICB7IHNlbCA9IGZpbHRlclNlbGVjdGlvbkNoYW5nZShkb2MsIHNlbCwgb3B0aW9ucyk7IH1cblxuICAgIHZhciBiaWFzID0gb3B0aW9ucyAmJiBvcHRpb25zLmJpYXMgfHxcbiAgICAgIChjbXAoc2VsLnByaW1hcnkoKS5oZWFkLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkKSA8IDAgPyAtMSA6IDEpO1xuICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCB0cnVlKSk7XG5cbiAgICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMuc2Nyb2xsID09PSBmYWxzZSkgJiYgZG9jLmNtKVxuICAgICAgeyBlbnN1cmVDdXJzb3JWaXNpYmxlKGRvYy5jbSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2VsKSB7XG4gICAgaWYgKHNlbC5lcXVhbHMoZG9jLnNlbCkpIHsgcmV0dXJuIH1cblxuICAgIGRvYy5zZWwgPSBzZWw7XG5cbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICBkb2MuY20uY3VyT3AudXBkYXRlSW5wdXQgPSAxO1xuICAgICAgZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgICAgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoZG9jLmNtKTtcbiAgICB9XG4gICAgc2lnbmFsTGF0ZXIoZG9jLCBcImN1cnNvckFjdGl2aXR5XCIsIGRvYyk7XG4gIH1cblxuICAvLyBWZXJpZnkgdGhhdCB0aGUgc2VsZWN0aW9uIGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pY1xuICAvLyBtYXJrZWQgcmFuZ2VzLlxuICBmdW5jdGlvbiByZUNoZWNrU2VsZWN0aW9uKGRvYykge1xuICAgIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgZG9jLnNlbCwgbnVsbCwgZmFsc2UpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHNlbGVjdGlvbiB0aGF0IGRvZXMgbm90IHBhcnRpYWxseSBzZWxlY3QgYW55IGF0b21pY1xuICAvLyByYW5nZXMuXG4gIGZ1bmN0aW9uIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHtcbiAgICB2YXIgb3V0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgIHZhciBvbGQgPSBzZWwucmFuZ2VzLmxlbmd0aCA9PSBkb2Muc2VsLnJhbmdlcy5sZW5ndGggJiYgZG9jLnNlbC5yYW5nZXNbaV07XG4gICAgICB2YXIgbmV3QW5jaG9yID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmFuY2hvciwgb2xkICYmIG9sZC5hbmNob3IsIGJpYXMsIG1heUNsZWFyKTtcbiAgICAgIHZhciBuZXdIZWFkID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmhlYWQsIG9sZCAmJiBvbGQuaGVhZCwgYmlhcywgbWF5Q2xlYXIpO1xuICAgICAgaWYgKG91dCB8fCBuZXdBbmNob3IgIT0gcmFuZ2UuYW5jaG9yIHx8IG5ld0hlYWQgIT0gcmFuZ2UuaGVhZCkge1xuICAgICAgICBpZiAoIW91dCkgeyBvdXQgPSBzZWwucmFuZ2VzLnNsaWNlKDAsIGkpOyB9XG4gICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShuZXdBbmNob3IsIG5ld0hlYWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0ID8gbm9ybWFsaXplU2VsZWN0aW9uKGRvYy5jbSwgb3V0LCBzZWwucHJpbUluZGV4KSA6IHNlbFxuICB9XG5cbiAgZnVuY3Rpb24gc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBwb3MubGluZSk7XG4gICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLCBtID0gc3AubWFya2VyO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHByZXZlbnQgdGhlIGN1cnNvciBiZWluZyBwbGFjZWQgdG8gdGhlIGxlZnQvcmlnaHQgb2YgYW4gYXRvbWljIG1hcmtlclxuICAgICAgLy8gSGlzdG9yaWNhbGx5IHRoaXMgd2FzIGRldGVybWluZWQgdXNpbmcgdGhlIGluY2x1c2l2ZUxlZnQvUmlnaHQgb3B0aW9uLCBidXQgdGhlIG5ldyB3YXkgdG8gY29udHJvbCBpdFxuICAgICAgLy8gaXMgd2l0aCBzZWxlY3RMZWZ0L1JpZ2h0XG4gICAgICB2YXIgcHJldmVudEN1cnNvckxlZnQgPSAoXCJzZWxlY3RMZWZ0XCIgaW4gbSkgPyAhbS5zZWxlY3RMZWZ0IDogbS5pbmNsdXNpdmVMZWZ0O1xuICAgICAgdmFyIHByZXZlbnRDdXJzb3JSaWdodCA9IChcInNlbGVjdFJpZ2h0XCIgaW4gbSkgPyAhbS5zZWxlY3RSaWdodCA6IG0uaW5jbHVzaXZlUmlnaHQ7XG5cbiAgICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IChwcmV2ZW50Q3Vyc29yTGVmdCA/IHNwLmZyb20gPD0gcG9zLmNoIDogc3AuZnJvbSA8IHBvcy5jaCkpICYmXG4gICAgICAgICAgKHNwLnRvID09IG51bGwgfHwgKHByZXZlbnRDdXJzb3JSaWdodCA/IHNwLnRvID49IHBvcy5jaCA6IHNwLnRvID4gcG9zLmNoKSkpIHtcbiAgICAgICAgaWYgKG1heUNsZWFyKSB7XG4gICAgICAgICAgc2lnbmFsKG0sIFwiYmVmb3JlQ3Vyc29yRW50ZXJcIik7XG4gICAgICAgICAgaWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHtcbiAgICAgICAgICAgIGlmICghbGluZS5tYXJrZWRTcGFucykgeyBicmVhayB9XG4gICAgICAgICAgICBlbHNlIHstLWk7IGNvbnRpbnVlfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW0uYXRvbWljKSB7IGNvbnRpbnVlIH1cblxuICAgICAgICBpZiAob2xkUG9zKSB7XG4gICAgICAgICAgdmFyIG5lYXIgPSBtLmZpbmQoZGlyIDwgMCA/IDEgOiAtMSksIGRpZmYgPSAodm9pZCAwKTtcbiAgICAgICAgICBpZiAoZGlyIDwgMCA/IHByZXZlbnRDdXJzb3JSaWdodCA6IHByZXZlbnRDdXJzb3JMZWZ0KVxuICAgICAgICAgICAgeyBuZWFyID0gbW92ZVBvcyhkb2MsIG5lYXIsIC1kaXIsIG5lYXIgJiYgbmVhci5saW5lID09IHBvcy5saW5lID8gbGluZSA6IG51bGwpOyB9XG4gICAgICAgICAgaWYgKG5lYXIgJiYgbmVhci5saW5lID09IHBvcy5saW5lICYmIChkaWZmID0gY21wKG5lYXIsIG9sZFBvcykpICYmIChkaXIgPCAwID8gZGlmZiA8IDAgOiBkaWZmID4gMCkpXG4gICAgICAgICAgICB7IHJldHVybiBza2lwQXRvbWljSW5uZXIoZG9jLCBuZWFyLCBwb3MsIGRpciwgbWF5Q2xlYXIpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmYXIgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7XG4gICAgICAgIGlmIChkaXIgPCAwID8gcHJldmVudEN1cnNvckxlZnQgOiBwcmV2ZW50Q3Vyc29yUmlnaHQpXG4gICAgICAgICAgeyBmYXIgPSBtb3ZlUG9zKGRvYywgZmFyLCBkaXIsIGZhci5saW5lID09IHBvcy5saW5lID8gbGluZSA6IG51bGwpOyB9XG4gICAgICAgIHJldHVybiBmYXIgPyBza2lwQXRvbWljSW5uZXIoZG9jLCBmYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgOiBudWxsXG4gICAgICB9XG4gICAgfSB9XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgLy8gRW5zdXJlIGEgZ2l2ZW4gcG9zaXRpb24gaXMgbm90IGluc2lkZSBhbiBhdG9taWMgcmFuZ2UuXG4gIGZ1bmN0aW9uIHNraXBBdG9taWMoZG9jLCBwb3MsIG9sZFBvcywgYmlhcywgbWF5Q2xlYXIpIHtcbiAgICB2YXIgZGlyID0gYmlhcyB8fCAxO1xuICAgIHZhciBmb3VuZCA9IHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCBkaXIsIG1heUNsZWFyKSB8fFxuICAgICAgICAoIW1heUNsZWFyICYmIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCBkaXIsIHRydWUpKSB8fFxuICAgICAgICBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgLWRpciwgbWF5Q2xlYXIpIHx8XG4gICAgICAgICghbWF5Q2xlYXIgJiYgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIC1kaXIsIHRydWUpKTtcbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICBkb2MuY2FudEVkaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApXG4gICAgfVxuICAgIHJldHVybiBmb3VuZFxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZVBvcyhkb2MsIHBvcywgZGlyLCBsaW5lKSB7XG4gICAgaWYgKGRpciA8IDAgJiYgcG9zLmNoID09IDApIHtcbiAgICAgIGlmIChwb3MubGluZSA+IGRvYy5maXJzdCkgeyByZXR1cm4gY2xpcFBvcyhkb2MsIFBvcyhwb3MubGluZSAtIDEpKSB9XG4gICAgICBlbHNlIHsgcmV0dXJuIG51bGwgfVxuICAgIH0gZWxzZSBpZiAoZGlyID4gMCAmJiBwb3MuY2ggPT0gKGxpbmUgfHwgZ2V0TGluZShkb2MsIHBvcy5saW5lKSkudGV4dC5sZW5ndGgpIHtcbiAgICAgIGlmIChwb3MubGluZSA8IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSkgeyByZXR1cm4gUG9zKHBvcy5saW5lICsgMSwgMCkgfVxuICAgICAgZWxzZSB7IHJldHVybiBudWxsIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQb3MocG9zLmxpbmUsIHBvcy5jaCArIGRpcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RBbGwoY20pIHtcbiAgICBjbS5zZXRTZWxlY3Rpb24oUG9zKGNtLmZpcnN0TGluZSgpLCAwKSwgUG9zKGNtLmxhc3RMaW5lKCkpLCBzZWxfZG9udFNjcm9sbCk7XG4gIH1cblxuICAvLyBVUERBVElOR1xuXG4gIC8vIEFsbG93IFwiYmVmb3JlQ2hhbmdlXCIgZXZlbnQgaGFuZGxlcnMgdG8gaW5mbHVlbmNlIGEgY2hhbmdlXG4gIGZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICAgIGZyb206IGNoYW5nZS5mcm9tLFxuICAgICAgdG86IGNoYW5nZS50byxcbiAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LFxuICAgICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLFxuICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7IHJldHVybiBvYmouY2FuY2VsZWQgPSB0cnVlOyB9XG4gICAgfTtcbiAgICBpZiAodXBkYXRlKSB7IG9iai51cGRhdGUgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHRleHQsIG9yaWdpbikge1xuICAgICAgaWYgKGZyb20pIHsgb2JqLmZyb20gPSBjbGlwUG9zKGRvYywgZnJvbSk7IH1cbiAgICAgIGlmICh0bykgeyBvYmoudG8gPSBjbGlwUG9zKGRvYywgdG8pOyB9XG4gICAgICBpZiAodGV4dCkgeyBvYmoudGV4dCA9IHRleHQ7IH1cbiAgICAgIGlmIChvcmlnaW4gIT09IHVuZGVmaW5lZCkgeyBvYmoub3JpZ2luID0gb3JpZ2luOyB9XG4gICAgfTsgfVxuICAgIHNpZ25hbChkb2MsIFwiYmVmb3JlQ2hhbmdlXCIsIGRvYywgb2JqKTtcbiAgICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIsIGRvYy5jbSwgb2JqKTsgfVxuXG4gICAgaWYgKG9iai5jYW5jZWxlZCkge1xuICAgICAgaWYgKGRvYy5jbSkgeyBkb2MuY20uY3VyT3AudXBkYXRlSW5wdXQgPSAyOyB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IG9iai5mcm9tLCB0bzogb2JqLnRvLCB0ZXh0OiBvYmoudGV4dCwgb3JpZ2luOiBvYmoub3JpZ2lufVxuICB9XG5cbiAgLy8gQXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQnc1xuICAvLyBoaXN0b3J5LCBhbmQgcHJvcGFnYXRpbmcgaXQgdG8gYWxsIGxpbmtlZCBkb2N1bWVudHMuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2UoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB7XG4gICAgaWYgKGRvYy5jbSkge1xuICAgICAgaWYgKCFkb2MuY20uY3VyT3ApIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1ha2VDaGFuZ2UpKGRvYywgY2hhbmdlLCBpZ25vcmVSZWFkT25seSkgfVxuICAgICAgaWYgKGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzKSB7IHJldHVybiB9XG4gICAgfVxuXG4gICAgaWYgKGhhc0hhbmRsZXIoZG9jLCBcImJlZm9yZUNoYW5nZVwiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIpKSB7XG4gICAgICBjaGFuZ2UgPSBmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIHRydWUpO1xuICAgICAgaWYgKCFjaGFuZ2UpIHsgcmV0dXJuIH1cbiAgICB9XG5cbiAgICAvLyBQb3NzaWJseSBzcGxpdCBvciBzdXBwcmVzcyB0aGUgdXBkYXRlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZVxuICAgIC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuXG4gICAgdmFyIHNwbGl0ID0gc2F3UmVhZE9ubHlTcGFucyAmJiAhaWdub3JlUmVhZE9ubHkgJiYgcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKTtcbiAgICBpZiAoc3BsaXQpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSlcbiAgICAgICAgeyBtYWtlQ2hhbmdlSW5uZXIoZG9jLCB7ZnJvbTogc3BsaXRbaV0uZnJvbSwgdG86IHNwbGl0W2ldLnRvLCB0ZXh0OiBpID8gW1wiXCJdIDogY2hhbmdlLnRleHQsIG9yaWdpbjogY2hhbmdlLm9yaWdpbn0pOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1ha2VDaGFuZ2VJbm5lcihkb2MsIGNoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKSB7XG4gICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmIGNoYW5nZS50ZXh0WzBdID09IFwiXCIgJiYgY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDApIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpO1xuICAgIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7XG5cbiAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkpO1xuICAgIHZhciByZWJhc2VkID0gW107XG5cbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkge1xuICAgICAgaWYgKCFzaGFyZWRIaXN0ICYmIGluZGV4T2YocmViYXNlZCwgZG9jLmhpc3RvcnkpID09IC0xKSB7XG4gICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7XG4gICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7XG4gICAgICB9XG4gICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZXZlcnQgYSBjaGFuZ2Ugc3RvcmVkIGluIGEgZG9jdW1lbnQncyBoaXN0b3J5LlxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlRnJvbUhpc3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHtcbiAgICB2YXIgc3VwcHJlc3MgPSBkb2MuY20gJiYgZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHM7XG4gICAgaWYgKHN1cHByZXNzICYmICFhbGxvd1NlbGVjdGlvbk9ubHkpIHsgcmV0dXJuIH1cblxuICAgIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7XG4gICAgdmFyIHNvdXJjZSA9IHR5cGUgPT0gXCJ1bmRvXCIgPyBoaXN0LmRvbmUgOiBoaXN0LnVuZG9uZSwgZGVzdCA9IHR5cGUgPT0gXCJ1bmRvXCIgPyBoaXN0LnVuZG9uZSA6IGhpc3QuZG9uZTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgdXNlYWJsZSBldmVudCAoc28gdGhhdCBjdHJsLXogd29uJ3RcbiAgICAvLyBuZWVkbGVzc2x5IGNsZWFyIHNlbGVjdGlvbiBldmVudHMpXG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBldmVudCA9IHNvdXJjZVtpXTtcbiAgICAgIGlmIChhbGxvd1NlbGVjdGlvbk9ubHkgPyBldmVudC5yYW5nZXMgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSA6ICFldmVudC5yYW5nZXMpXG4gICAgICAgIHsgYnJlYWsgfVxuICAgIH1cbiAgICBpZiAoaSA9PSBzb3VyY2UubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gbnVsbDtcblxuICAgIGZvciAoOzspIHtcbiAgICAgIGV2ZW50ID0gc291cmNlLnBvcCgpO1xuICAgICAgaWYgKGV2ZW50LnJhbmdlcykge1xuICAgICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGV2ZW50LCBkZXN0KTtcbiAgICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpKSB7XG4gICAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgZXZlbnQsIHtjbGVhclJlZG86IGZhbHNlfSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsQWZ0ZXIgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcHJlc3MpIHtcbiAgICAgICAgc291cmNlLnB1c2goZXZlbnQpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7IGJyZWFrIH1cbiAgICB9XG5cbiAgICAvLyBCdWlsZCB1cCBhIHJldmVyc2UgY2hhbmdlIG9iamVjdCB0byBhZGQgdG8gdGhlIG9wcG9zaXRlIGhpc3RvcnlcbiAgICAvLyBzdGFjayAocmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS5cbiAgICB2YXIgYW50aUNoYW5nZXMgPSBbXTtcbiAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbEFmdGVyLCBkZXN0KTtcbiAgICBkZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259KTtcbiAgICBoaXN0LmdlbmVyYXRpb24gPSBldmVudC5nZW5lcmF0aW9uIHx8ICsraGlzdC5tYXhHZW5lcmF0aW9uO1xuXG4gICAgdmFyIGZpbHRlciA9IGhhc0hhbmRsZXIoZG9jLCBcImJlZm9yZUNoYW5nZVwiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sIFwiYmVmb3JlQ2hhbmdlXCIpO1xuXG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGkgKSB7XG4gICAgICB2YXIgY2hhbmdlID0gZXZlbnQuY2hhbmdlc1tpXTtcbiAgICAgIGNoYW5nZS5vcmlnaW4gPSB0eXBlO1xuICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBmYWxzZSkpIHtcbiAgICAgICAgc291cmNlLmxlbmd0aCA9IDA7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuXG4gICAgICBhbnRpQ2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG5cbiAgICAgIHZhciBhZnRlciA9IGkgPyBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpIDogbHN0KHNvdXJjZSk7XG4gICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgICAgaWYgKCFpICYmIGRvYy5jbSkgeyBkb2MuY20uc2Nyb2xsSW50b1ZpZXcoe2Zyb206IGNoYW5nZS5mcm9tLCB0bzogY2hhbmdlRW5kKGNoYW5nZSl9KTsgfVxuICAgICAgdmFyIHJlYmFzZWQgPSBbXTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBsaW5rZWQgZG9jdW1lbnRzXG4gICAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkge1xuICAgICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHtcbiAgICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0b3J5LCBjaGFuZ2UpO1xuICAgICAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkkMSA9IGV2ZW50LmNoYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IC0taSQxKSB7XG4gICAgICB2YXIgcmV0dXJuZWQgPSBsb29wKCBpJDEgKTtcblxuICAgICAgaWYgKCByZXR1cm5lZCApIHJldHVybiByZXR1cm5lZC52O1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1Yi12aWV3cyBuZWVkIHRoZWlyIGxpbmUgbnVtYmVycyBzaGlmdGVkIHdoZW4gdGV4dCBpcyBhZGRlZFxuICAvLyBhYm92ZSBvciBiZWxvdyB0aGVtIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuXG4gIGZ1bmN0aW9uIHNoaWZ0RG9jKGRvYywgZGlzdGFuY2UpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT0gMCkgeyByZXR1cm4gfVxuICAgIGRvYy5maXJzdCArPSBkaXN0YW5jZTtcbiAgICBkb2Muc2VsID0gbmV3IFNlbGVjdGlvbihtYXAoZG9jLnNlbC5yYW5nZXMsIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbmV3IFJhbmdlKFxuICAgICAgUG9zKHJhbmdlLmFuY2hvci5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmFuY2hvci5jaCksXG4gICAgICBQb3MocmFuZ2UuaGVhZC5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmhlYWQuY2gpXG4gICAgKTsgfSksIGRvYy5zZWwucHJpbUluZGV4KTtcbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7XG4gICAgICBmb3IgKHZhciBkID0gZG9jLmNtLmRpc3BsYXksIGwgPSBkLnZpZXdGcm9tOyBsIDwgZC52aWV3VG87IGwrKylcbiAgICAgICAgeyByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbCwgXCJndXR0ZXJcIik7IH1cbiAgICB9XG4gIH1cblxuICAvLyBNb3JlIGxvd2VyLWxldmVsIGNoYW5nZSBmdW5jdGlvbiwgaGFuZGxpbmcgb25seSBhIHNpbmdsZSBkb2N1bWVudFxuICAvLyAobm90IGxpbmtlZCBvbmVzKS5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKSB7XG4gICAgaWYgKGRvYy5jbSAmJiAhZG9jLmNtLmN1ck9wKVxuICAgICAgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZVNpbmdsZURvYykoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgfVxuXG4gICAgaWYgKGNoYW5nZS50by5saW5lIDwgZG9jLmZpcnN0KSB7XG4gICAgICBzaGlmdERvYyhkb2MsIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoY2hhbmdlLnRvLmxpbmUgLSBjaGFuZ2UuZnJvbS5saW5lKSk7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gfVxuXG4gICAgLy8gQ2xpcCB0aGUgY2hhbmdlIHRvIHRoZSBzaXplIG9mIHRoaXMgZG9jXG4gICAgaWYgKGNoYW5nZS5mcm9tLmxpbmUgPCBkb2MuZmlyc3QpIHtcbiAgICAgIHZhciBzaGlmdCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEgLSAoZG9jLmZpcnN0IC0gY2hhbmdlLmZyb20ubGluZSk7XG4gICAgICBzaGlmdERvYyhkb2MsIHNoaWZ0KTtcbiAgICAgIGNoYW5nZSA9IHtmcm9tOiBQb3MoZG9jLmZpcnN0LCAwKSwgdG86IFBvcyhjaGFuZ2UudG8ubGluZSArIHNoaWZ0LCBjaGFuZ2UudG8uY2gpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFtsc3QoY2hhbmdlLnRleHQpXSwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTtcbiAgICB9XG4gICAgdmFyIGxhc3QgPSBkb2MubGFzdExpbmUoKTtcbiAgICBpZiAoY2hhbmdlLnRvLmxpbmUgPiBsYXN0KSB7XG4gICAgICBjaGFuZ2UgPSB7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBbY2hhbmdlLnRleHRbMF1dLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59O1xuICAgIH1cblxuICAgIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pO1xuXG4gICAgaWYgKCFzZWxBZnRlcikgeyBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7IH1cbiAgICBpZiAoZG9jLmNtKSB7IG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihkb2MuY20sIGNoYW5nZSwgc3BhbnMpOyB9XG4gICAgZWxzZSB7IHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpOyB9XG4gICAgc2V0U2VsZWN0aW9uTm9VbmRvKGRvYywgc2VsQWZ0ZXIsIHNlbF9kb250U2Nyb2xsKTtcblxuICAgIGlmIChkb2MuY2FudEVkaXQgJiYgc2tpcEF0b21pYyhkb2MsIFBvcyhkb2MuZmlyc3RMaW5lKCksIDApKSlcbiAgICAgIHsgZG9jLmNhbnRFZGl0ID0gZmFsc2U7IH1cbiAgfVxuXG4gIC8vIEhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gb2YgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCB3aXRoIHRoZSBlZGl0b3JcbiAgLy8gdGhhdCB0aGlzIGRvY3VtZW50IGlzIHBhcnQgb2YuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2NJbkVkaXRvcihjbSwgY2hhbmdlLCBzcGFucykge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvO1xuXG4gICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBjaGVja1dpZHRoU3RhcnQgPSBmcm9tLmxpbmU7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTtcbiAgICAgIGRvYy5pdGVyKGNoZWNrV2lkdGhTdGFydCwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lID09IGRpc3BsYXkubWF4TGluZSkge1xuICAgICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zZWwuY29udGFpbnMoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPiAtMSlcbiAgICAgIHsgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pOyB9XG5cbiAgICB1cGRhdGVEb2MoZG9jLCBjaGFuZ2UsIHNwYW5zLCBlc3RpbWF0ZUhlaWdodChjbSkpO1xuXG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCBmcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGgsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgICAgICBpZiAobGVuID4gZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICAgICAgZGlzcGxheS5tYXhMaW5lID0gbGluZTtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgeyBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsgfVxuICAgIH1cblxuICAgIHJldHJlYXRGcm9udGllcihkb2MsIGZyb20ubGluZSk7XG4gICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7XG5cbiAgICB2YXIgbGVuZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7XG4gICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXlcbiAgICBpZiAoY2hhbmdlLmZ1bGwpXG4gICAgICB7IHJlZ0NoYW5nZShjbSk7IH1cbiAgICBlbHNlIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiAhaXNXaG9sZUxpbmVVcGRhdGUoY20uZG9jLCBjaGFuZ2UpKVxuICAgICAgeyByZWdMaW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIFwidGV4dFwiKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgcmVnQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBsZW5kaWZmKTsgfVxuXG4gICAgdmFyIGNoYW5nZXNIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VzXCIpLCBjaGFuZ2VIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VcIik7XG4gICAgaWYgKGNoYW5nZUhhbmRsZXIgfHwgY2hhbmdlc0hhbmRsZXIpIHtcbiAgICAgIHZhciBvYmogPSB7XG4gICAgICAgIGZyb206IGZyb20sIHRvOiB0byxcbiAgICAgICAgdGV4dDogY2hhbmdlLnRleHQsXG4gICAgICAgIHJlbW92ZWQ6IGNoYW5nZS5yZW1vdmVkLFxuICAgICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW5cbiAgICAgIH07XG4gICAgICBpZiAoY2hhbmdlSGFuZGxlcikgeyBzaWduYWxMYXRlcihjbSwgXCJjaGFuZ2VcIiwgY20sIG9iaik7IH1cbiAgICAgIGlmIChjaGFuZ2VzSGFuZGxlcikgeyAoY20uY3VyT3AuY2hhbmdlT2JqcyB8fCAoY20uY3VyT3AuY2hhbmdlT2JqcyA9IFtdKSkucHVzaChvYmopOyB9XG4gICAgfVxuICAgIGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZVJhbmdlKGRvYywgY29kZSwgZnJvbSwgdG8sIG9yaWdpbikge1xuICAgIHZhciBhc3NpZ247XG5cbiAgICBpZiAoIXRvKSB7IHRvID0gZnJvbTsgfVxuICAgIGlmIChjbXAodG8sIGZyb20pIDwgMCkgeyAoYXNzaWduID0gW3RvLCBmcm9tXSwgZnJvbSA9IGFzc2lnblswXSwgdG8gPSBhc3NpZ25bMV0pOyB9XG4gICAgaWYgKHR5cGVvZiBjb2RlID09IFwic3RyaW5nXCIpIHsgY29kZSA9IGRvYy5zcGxpdExpbmVzKGNvZGUpOyB9XG4gICAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSk7XG4gIH1cblxuICAvLyBSZWJhc2luZy9yZXNldHRpbmcgaGlzdG9yeSB0byBkZWFsIHdpdGggZXh0ZXJuYWxseS1zb3VyY2VkIGNoYW5nZXNcblxuICBmdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xlKHBvcywgZnJvbSwgdG8sIGRpZmYpIHtcbiAgICBpZiAodG8gPCBwb3MubGluZSkge1xuICAgICAgcG9zLmxpbmUgKz0gZGlmZjtcbiAgICB9IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkge1xuICAgICAgcG9zLmxpbmUgPSBmcm9tO1xuICAgICAgcG9zLmNoID0gMDtcbiAgICB9XG4gIH1cblxuICAvLyBUcmllcyB0byByZWJhc2UgYW4gYXJyYXkgb2YgaGlzdG9yeSBldmVudHMgZ2l2ZW4gYSBjaGFuZ2UgaW4gdGhlXG4gIC8vIGRvY3VtZW50LiBJZiB0aGUgY2hhbmdlIHRvdWNoZXMgdGhlIHNhbWUgbGluZXMgYXMgdGhlIGV2ZW50LCB0aGVcbiAgLy8gZXZlbnQsIGFuZCBldmVyeXRoaW5nICdiZWhpbmQnIGl0LCBpcyBkaXNjYXJkZWQuIElmIHRoZSBjaGFuZ2UgaXNcbiAgLy8gYmVmb3JlIHRoZSBldmVudCwgdGhlIGV2ZW50J3MgcG9zaXRpb25zIGFyZSB1cGRhdGVkLiBVc2VzIGFcbiAgLy8gY29weS1vbi13cml0ZSBzY2hlbWUgZm9yIHRoZSBwb3NpdGlvbnMsIHRvIGF2b2lkIGhhdmluZyB0b1xuICAvLyByZWFsbG9jYXRlIHRoZW0gYWxsIG9uIGV2ZXJ5IHJlYmFzZSwgYnV0IGFsc28gYXZvaWQgcHJvYmxlbXMgd2l0aFxuICAvLyBzaGFyZWQgcG9zaXRpb24gb2JqZWN0cyBiZWluZyB1bnNhZmVseSB1cGRhdGVkLlxuICBmdW5jdGlvbiByZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHN1YiA9IGFycmF5W2ldLCBvayA9IHRydWU7XG4gICAgICBpZiAoc3ViLnJhbmdlcykge1xuICAgICAgICBpZiAoIXN1Yi5jb3BpZWQpIHsgc3ViID0gYXJyYXlbaV0gPSBzdWIuZGVlcENvcHkoKTsgc3ViLmNvcGllZCA9IHRydWU7IH1cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdWIucmFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwgZnJvbSwgdG8sIGRpZmYpO1xuICAgICAgICAgIHJlYmFzZUhpc3RTZWxTaW5nbGUoc3ViLnJhbmdlc1tqXS5oZWFkLCBmcm9tLCB0bywgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGokMSA9IDA7IGokMSA8IHN1Yi5jaGFuZ2VzLmxlbmd0aDsgKytqJDEpIHtcbiAgICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2okMV07XG4gICAgICAgIGlmICh0byA8IGN1ci5mcm9tLmxpbmUpIHtcbiAgICAgICAgICBjdXIuZnJvbSA9IFBvcyhjdXIuZnJvbS5saW5lICsgZGlmZiwgY3VyLmZyb20uY2gpO1xuICAgICAgICAgIGN1ci50byA9IFBvcyhjdXIudG8ubGluZSArIGRpZmYsIGN1ci50by5jaCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBjdXIudG8ubGluZSkge1xuICAgICAgICAgIG9rID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvaykge1xuICAgICAgICBhcnJheS5zcGxpY2UoMCwgaSArIDEpO1xuICAgICAgICBpID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWJhc2VIaXN0KGhpc3QsIGNoYW5nZSkge1xuICAgIHZhciBmcm9tID0gY2hhbmdlLmZyb20ubGluZSwgdG8gPSBjaGFuZ2UudG8ubGluZSwgZGlmZiA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pIC0gMTtcbiAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC5kb25lLCBmcm9tLCB0bywgZGlmZik7XG4gICAgcmViYXNlSGlzdEFycmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7XG4gIH1cblxuICAvLyBVdGlsaXR5IGZvciBhcHBseWluZyBhIGNoYW5nZSB0byBhIGxpbmUgYnkgaGFuZGxlIG9yIG51bWJlcixcbiAgLy8gcmV0dXJuaW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXNcbiAgLy8gY2hhbmdlZC5cbiAgZnVuY3Rpb24gY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgY2hhbmdlVHlwZSwgb3ApIHtcbiAgICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gXCJudW1iZXJcIikgeyBsaW5lID0gZ2V0TGluZShkb2MsIGNsaXBMaW5lKGRvYywgaGFuZGxlKSk7IH1cbiAgICBlbHNlIHsgbm8gPSBsaW5lTm8oaGFuZGxlKTsgfVxuICAgIGlmIChubyA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgICBpZiAob3AobGluZSwgbm8pICYmIGRvYy5jbSkgeyByZWdMaW5lQ2hhbmdlKGRvYy5jbSwgbm8sIGNoYW5nZVR5cGUpOyB9XG4gICAgcmV0dXJuIGxpbmVcbiAgfVxuXG4gIC8vIFRoZSBkb2N1bWVudCBpcyByZXByZXNlbnRlZCBhcyBhIEJUcmVlIGNvbnNpc3Rpbmcgb2YgbGVhdmVzLCB3aXRoXG4gIC8vIGNodW5rIG9mIGxpbmVzIGluIHRoZW0sIGFuZCBicmFuY2hlcywgd2l0aCB1cCB0byB0ZW4gbGVhdmVzIG9yXG4gIC8vIG90aGVyIGJyYW5jaCBub2RlcyBiZWxvdyB0aGVtLiBUaGUgdG9wIG5vZGUgaXMgYWx3YXlzIGEgYnJhbmNoXG4gIC8vIG5vZGUsIGFuZCBpcyB0aGUgZG9jdW1lbnQgb2JqZWN0IGl0c2VsZiAobWVhbmluZyBpdCBoYXNcbiAgLy8gYWRkaXRpb25hbCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzKS5cbiAgLy9cbiAgLy8gQWxsIG5vZGVzIGhhdmUgcGFyZW50IGxpbmtzLiBUaGUgdHJlZSBpcyB1c2VkIGJvdGggdG8gZ28gZnJvbVxuICAvLyBsaW5lIG51bWJlcnMgdG8gbGluZSBvYmplY3RzLCBhbmQgdG8gZ28gZnJvbSBvYmplY3RzIHRvIG51bWJlcnMuXG4gIC8vIEl0IGFsc28gaW5kZXhlcyBieSBoZWlnaHQsIGFuZCBpcyB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBoZWlnaHRcbiAgLy8gYW5kIGxpbmUgb2JqZWN0LCBhbmQgdG8gZmluZCB0aGUgdG90YWwgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudC5cbiAgLy9cbiAgLy8gU2VlIGFsc28gaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nL2NvZGVtaXJyb3ItbGluZS10cmVlLmh0bWxcblxuICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHtcbiAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHZhciBoZWlnaHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7XG4gICAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIExlYWZDaHVuay5wcm90b3R5cGUgPSB7XG4gICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoIH0sXG5cbiAgICAvLyBSZW1vdmUgdGhlIG4gbGluZXMgYXQgb2Zmc2V0ICdhdCcuXG4gICAgcmVtb3ZlSW5uZXI6IGZ1bmN0aW9uKGF0LCBuKSB7XG4gICAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHtcbiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuICAgICAgICB0aGlzLmhlaWdodCAtPSBsaW5lLmhlaWdodDtcbiAgICAgICAgY2xlYW5VcExpbmUobGluZSk7XG4gICAgICAgIHNpZ25hbExhdGVyKGxpbmUsIFwiZGVsZXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pO1xuICAgIH0sXG5cbiAgICAvLyBIZWxwZXIgdXNlZCB0byBjb2xsYXBzZSBhIHNtYWxsIGJyYW5jaCBpbnRvIGEgc2luZ2xlIGxlYWYuXG4gICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7XG4gICAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVzKTtcbiAgICB9LFxuXG4gICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBhcnJheSBvZiBsaW5lcyBhdCBvZmZzZXQgJ2F0JywgY291bnQgdGhlbSBhc1xuICAgIC8vIGhhdmluZyB0aGUgZ2l2ZW4gaGVpZ2h0LlxuICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkge1xuICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0O1xuICAgICAgdGhpcy5saW5lcyA9IHRoaXMubGluZXMuc2xpY2UoMCwgYXQpLmNvbmNhdChsaW5lcykuY29uY2F0KHRoaXMubGluZXMuc2xpY2UoYXQpKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgbGluZXNbaV0ucGFyZW50ID0gdGhpczsgfVxuICAgIH0sXG5cbiAgICAvLyBVc2VkIHRvIGl0ZXJhdGUgb3ZlciBhIHBhcnQgb2YgdGhlIHRyZWUuXG4gICAgaXRlck46IGZ1bmN0aW9uKGF0LCBuLCBvcCkge1xuICAgICAgZm9yICh2YXIgZSA9IGF0ICsgbjsgYXQgPCBlOyArK2F0KVxuICAgICAgICB7IGlmIChvcCh0aGlzLmxpbmVzW2F0XSkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxkcmVuKSB7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHZhciBzaXplID0gMCwgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTtcbiAgICAgIHNpemUgKz0gY2guY2h1bmtTaXplKCk7IGhlaWdodCArPSBjaC5oZWlnaHQ7XG4gICAgICBjaC5wYXJlbnQgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLnNpemUgPSBzaXplO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgfVxuXG4gIEJyYW5jaENodW5rLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zaXplIH0sXG5cbiAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHtcbiAgICAgIHRoaXMuc2l6ZSAtPSBuO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChhdCA8IHN6KSB7XG4gICAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgICBjaGlsZC5yZW1vdmVJbm5lcihhdCwgcm0pO1xuICAgICAgICAgIHRoaXMuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDtcbiAgICAgICAgICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFyZW50ID0gbnVsbDsgfVxuICAgICAgICAgIGlmICgobiAtPSBybSkgPT0gMCkgeyBicmVhayB9XG4gICAgICAgICAgYXQgPSAwO1xuICAgICAgICB9IGVsc2UgeyBhdCAtPSBzejsgfVxuICAgICAgfVxuICAgICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVuc3VyZSB0aGF0IGl0IGlzIGFcbiAgICAgIC8vIHNpbmdsZSBsZWFmIG5vZGUuXG4gICAgICBpZiAodGhpcy5zaXplIC0gbiA8IDI1ICYmXG4gICAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkge1xuICAgICAgICB2YXIgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jb2xsYXBzZShsaW5lcyk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldO1xuICAgICAgICB0aGlzLmNoaWxkcmVuWzBdLnBhcmVudCA9IHRoaXM7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7IHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOyB9XG4gICAgfSxcblxuICAgIGluc2VydElubmVyOiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkge1xuICAgICAgdGhpcy5zaXplICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgICBpZiAoYXQgPD0gc3opIHtcbiAgICAgICAgICBjaGlsZC5pbnNlcnRJbm5lcihhdCwgbGluZXMsIGhlaWdodCk7XG4gICAgICAgICAgaWYgKGNoaWxkLmxpbmVzICYmIGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICAgICAgICAvLyBUbyBhdm9pZCBtZW1vcnkgdGhyYXNoaW5nIHdoZW4gY2hpbGQubGluZXMgaXMgaHVnZSAoZS5nLiBmaXJzdCB2aWV3IG9mIGEgbGFyZ2UgZmlsZSksIGl0J3MgbmV2ZXIgc3BsaWNlZC5cbiAgICAgICAgICAgIC8vIEluc3RlYWQsIHNtYWxsIHNsaWNlcyBhcmUgdGFrZW4uIFRoZXkncmUgdGFrZW4gaW4gb3JkZXIgYmVjYXVzZSBzZXF1ZW50aWFsIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZmFzdGVzdC5cbiAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSBjaGlsZC5saW5lcy5sZW5ndGggJSAyNSArIDI1O1xuICAgICAgICAgICAgZm9yICh2YXIgcG9zID0gcmVtYWluaW5nOyBwb3MgPCBjaGlsZC5saW5lcy5sZW5ndGg7KSB7XG4gICAgICAgICAgICAgIHZhciBsZWFmID0gbmV3IExlYWZDaHVuayhjaGlsZC5saW5lcy5zbGljZShwb3MsIHBvcyArPSAyNSkpO1xuICAgICAgICAgICAgICBjaGlsZC5oZWlnaHQgLT0gbGVhZi5oZWlnaHQ7XG4gICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKCsraSwgMCwgbGVhZik7XG4gICAgICAgICAgICAgIGxlYWYucGFyZW50ID0gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkLmxpbmVzID0gY2hpbGQubGluZXMuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICAgIHRoaXMubWF5YmVTcGlsbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGF0IC09IHN6O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBXaGVuIGEgbm9kZSBoYXMgZ3Jvd24sIGNoZWNrIHdoZXRoZXIgaXQgc2hvdWxkIGJlIHNwbGl0LlxuICAgIG1heWJlU3BpbGw6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSB7IHJldHVybiB9XG4gICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTtcbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXcgQnJhbmNoQ2h1bmsoc3BpbGxlZCk7XG4gICAgICAgIGlmICghbWUucGFyZW50KSB7IC8vIEJlY29tZSB0aGUgcGFyZW50IG5vZGVcbiAgICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7XG4gICAgICAgICAgY29weS5wYXJlbnQgPSBtZTtcbiAgICAgICAgICBtZS5jaGlsZHJlbiA9IFtjb3B5LCBzaWJsaW5nXTtcbiAgICAgICAgICBtZSA9IGNvcHk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtZS5zaXplIC09IHNpYmxpbmcuc2l6ZTtcbiAgICAgICAgICBtZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7XG4gICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRleE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpO1xuICAgICAgICAgIG1lLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UobXlJbmRleCArIDEsIDAsIHNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHNpYmxpbmcucGFyZW50ID0gbWUucGFyZW50O1xuICAgICAgfSB3aGlsZSAobWUuY2hpbGRyZW4ubGVuZ3RoID4gMTApXG4gICAgICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpO1xuICAgIH0sXG5cbiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTtcbiAgICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpO1xuICAgICAgICAgIGlmIChjaGlsZC5pdGVyTihhdCwgdXNlZCwgb3ApKSB7IHJldHVybiB0cnVlIH1cbiAgICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgeyBicmVhayB9XG4gICAgICAgICAgYXQgPSAwO1xuICAgICAgICB9IGVsc2UgeyBhdCAtPSBzejsgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBhIGxpbmUuXG5cbiAgdmFyIExpbmVXaWRnZXQgPSBmdW5jdGlvbihkb2MsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykgeyBmb3IgKHZhciBvcHQgaW4gb3B0aW9ucykgeyBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpKVxuICAgICAgeyB0aGlzW29wdF0gPSBvcHRpb25zW29wdF07IH0gfSB9XG4gICAgdGhpcy5kb2MgPSBkb2M7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgfTtcblxuICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7XG4gICAgaWYgKG5vID09IG51bGwgfHwgIXdzKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3cy5sZW5ndGg7ICsraSkgeyBpZiAod3NbaV0gPT0gdGhpcykgeyB3cy5zcGxpY2UoaS0tLCAxKTsgfSB9XG4gICAgaWYgKCF3cy5sZW5ndGgpIHsgbGluZS53aWRnZXRzID0gbnVsbDsgfVxuICAgIHZhciBoZWlnaHQgPSB3aWRnZXRIZWlnaHQodGhpcyk7XG4gICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBNYXRoLm1heCgwLCBsaW5lLmhlaWdodCAtIGhlaWdodCkpO1xuICAgIGlmIChjbSkge1xuICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlKGNtLCBsaW5lLCAtaGVpZ2h0KTtcbiAgICAgICAgcmVnTGluZUNoYW5nZShjbSwgbm8sIFwid2lkZ2V0XCIpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0Q2xlYXJlZFwiLCBjbSwgdGhpcywgbm8pO1xuICAgIH1cbiAgfTtcblxuICBMaW5lV2lkZ2V0LnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuZG9jLmNtLCBsaW5lID0gdGhpcy5saW5lO1xuICAgIHRoaXMuaGVpZ2h0ID0gbnVsbDtcbiAgICB2YXIgZGlmZiA9IHdpZGdldEhlaWdodCh0aGlzKSAtIG9sZEg7XG4gICAgaWYgKCFkaWZmKSB7IHJldHVybiB9XG4gICAgaWYgKCFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpKSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkaWZmKTsgfVxuICAgIGlmIChjbSkge1xuICAgICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpO1xuICAgICAgICBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0Q2hhbmdlZFwiLCBjbSwgdGhpcyQxLCBsaW5lTm8obGluZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBldmVudE1peGluKExpbmVXaWRnZXQpO1xuXG4gIGZ1bmN0aW9uIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIGRpZmYpIHtcbiAgICBpZiAoaGVpZ2h0QXRMaW5lKGxpbmUpIDwgKChjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxUb3ApIHx8IGNtLmRvYy5zY3JvbGxUb3ApKVxuICAgICAgeyBhZGRUb1Njcm9sbFRvcChjbSwgZGlmZik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2lkZ2V0ID0gbmV3IExpbmVXaWRnZXQoZG9jLCBub2RlLCBvcHRpb25zKTtcbiAgICB2YXIgY20gPSBkb2MuY207XG4gICAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIHsgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOyB9XG4gICAgY2hhbmdlTGluZShkb2MsIGhhbmRsZSwgXCJ3aWRnZXRcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciB3aWRnZXRzID0gbGluZS53aWRnZXRzIHx8IChsaW5lLndpZGdldHMgPSBbXSk7XG4gICAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHsgd2lkZ2V0cy5wdXNoKHdpZGdldCk7IH1cbiAgICAgIGVsc2UgeyB3aWRnZXRzLnNwbGljZShNYXRoLm1pbih3aWRnZXRzLmxlbmd0aCAtIDEsIE1hdGgubWF4KDAsIHdpZGdldC5pbnNlcnRBdCkpLCAwLCB3aWRnZXQpOyB9XG4gICAgICB3aWRnZXQubGluZSA9IGxpbmU7XG4gICAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB7XG4gICAgICAgIHZhciBhYm92ZVZpc2libGUgPSBoZWlnaHRBdExpbmUobGluZSkgPCBkb2Muc2Nyb2xsVG9wO1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgd2lkZ2V0SGVpZ2h0KHdpZGdldCkpO1xuICAgICAgICBpZiAoYWJvdmVWaXNpYmxlKSB7IGFkZFRvU2Nyb2xsVG9wKGNtLCB3aWRnZXQuaGVpZ2h0KTsgfVxuICAgICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChjbSkgeyBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0QWRkZWRcIiwgY20sIHdpZGdldCwgdHlwZW9mIGhhbmRsZSA9PSBcIm51bWJlclwiID8gaGFuZGxlIDogbGluZU5vKGhhbmRsZSkpOyB9XG4gICAgcmV0dXJuIHdpZGdldFxuICB9XG5cbiAgLy8gVEVYVE1BUktFUlNcblxuICAvLyBDcmVhdGVkIHdpdGggbWFya1RleHQgYW5kIHNldEJvb2ttYXJrIG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhXG4gIC8vIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNsZWFyIG9yIGZpbmQgYSBtYXJrZWQgcG9zaXRpb24gaW4gdGhlXG4gIC8vIGRvY3VtZW50LiBMaW5lIG9iamVjdHMgaG9sZCBhcnJheXMgKG1hcmtlZFNwYW5zKSBjb250YWluaW5nXG4gIC8vIHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcgdG8gc3VjaCBtYXJrZXIgb2JqZWN0cywgYW5kXG4gIC8vIGluZGljYXRpbmcgdGhhdCBzdWNoIGEgbWFya2VyIGlzIHByZXNlbnQgb24gdGhhdCBsaW5lLiBNdWx0aXBsZVxuICAvLyBsaW5lcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgbWFya2VyIHdoZW4gaXQgc3BhbnMgYWNyb3NzIGxpbmVzLlxuICAvLyBUaGUgc3BhbnMgd2lsbCBoYXZlIG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3aGVuIHRoZVxuICAvLyBtYXJrZXIgY29udGludWVzIGJleW9uZCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBsaW5lLiBNYXJrZXJzIGhhdmVcbiAgLy8gbGlua3MgYmFjayB0byB0aGUgbGluZXMgdGhleSBjdXJyZW50bHkgdG91Y2guXG5cbiAgLy8gQ29sbGFwc2VkIG1hcmtlcnMgaGF2ZSB1bmlxdWUgaWRzLCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIG9yZGVyXG4gIC8vIHRoZW0sIHdoaWNoIGlzIG5lZWRlZCBmb3IgdW5pcXVlbHkgZGV0ZXJtaW5pbmcgYW4gb3V0ZXIgbWFya2VyXG4gIC8vIHdoZW4gdGhleSBvdmVybGFwICh0aGV5IG1heSBuZXN0LCBidXQgbm90IHBhcnRpYWxseSBvdmVybGFwKS5cbiAgdmFyIG5leHRNYXJrZXJJZCA9IDA7XG5cbiAgdmFyIFRleHRNYXJrZXIgPSBmdW5jdGlvbihkb2MsIHR5cGUpIHtcbiAgICB0aGlzLmxpbmVzID0gW107XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgICB0aGlzLmlkID0gKytuZXh0TWFya2VySWQ7XG4gIH07XG5cbiAgLy8gQ2xlYXIgdGhlIG1hcmtlci5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wO1xuICAgIGlmICh3aXRoT3ApIHsgc3RhcnRPcGVyYXRpb24oY20pOyB9XG4gICAgaWYgKGhhc0hhbmRsZXIodGhpcywgXCJjbGVhclwiKSkge1xuICAgICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKCk7XG4gICAgICBpZiAoZm91bmQpIHsgc2lnbmFsTGF0ZXIodGhpcywgXCJjbGVhclwiLCBmb3VuZC5mcm9tLCBmb3VuZC50byk7IH1cbiAgICB9XG4gICAgdmFyIG1pbiA9IG51bGwsIG1heCA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7XG4gICAgICBpZiAoY20gJiYgIXRoaXMuY29sbGFwc2VkKSB7IHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmVObyhsaW5lKSwgXCJ0ZXh0XCIpOyB9XG4gICAgICBlbHNlIGlmIChjbSkge1xuICAgICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7IG1heCA9IGxpbmVObyhsaW5lKTsgfVxuICAgICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHsgbWluID0gbGluZU5vKGxpbmUpOyB9XG4gICAgICB9XG4gICAgICBsaW5lLm1hcmtlZFNwYW5zID0gcmVtb3ZlTWFya2VkU3BhbihsaW5lLm1hcmtlZFNwYW5zLCBzcGFuKTtcbiAgICAgIGlmIChzcGFuLmZyb20gPT0gbnVsbCAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSAmJiBjbSlcbiAgICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOyB9XG4gICAgfVxuICAgIGlmIChjbSAmJiB0aGlzLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSQxKSB7XG4gICAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZSh0aGlzLmxpbmVzW2kkMV0pLCBsZW4gPSBsaW5lTGVuZ3RoKHZpc3VhbCk7XG4gICAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IHZpc3VhbDtcbiAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuO1xuICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IH1cblxuICAgIGlmIChtaW4gIT0gbnVsbCAmJiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkgeyByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7IH1cbiAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5leHBsaWNpdGx5Q2xlYXJlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7XG4gICAgICB0aGlzLmRvYy5jYW50RWRpdCA9IGZhbHNlO1xuICAgICAgaWYgKGNtKSB7IHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsgfVxuICAgIH1cbiAgICBpZiAoY20pIHsgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQ2xlYXJlZFwiLCBjbSwgdGhpcywgbWluLCBtYXgpOyB9XG4gICAgaWYgKHdpdGhPcCkgeyBlbmRPcGVyYXRpb24oY20pOyB9XG4gICAgaWYgKHRoaXMucGFyZW50KSB7IHRoaXMucGFyZW50LmNsZWFyKCk7IH1cbiAgfTtcblxuICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWFya2VyIGluIHRoZSBkb2N1bWVudC4gUmV0dXJucyBhIHtmcm9tLFxuICAvLyB0b30gb2JqZWN0IGJ5IGRlZmF1bHQuIFNpZGUgY2FuIGJlIHBhc3NlZCB0byBnZXQgYSBzcGVjaWZpYyBzaWRlXG4gIC8vIC0tIDAgKGJvdGgpLCAtMSAobGVmdCksIG9yIDEgKHJpZ2h0KS4gV2hlbiBsaW5lT2JqIGlzIHRydWUsIHRoZVxuICAvLyBQb3Mgb2JqZWN0cyByZXR1cm5lZCBjb250YWluIGEgbGluZSBvYmplY3QsIHJhdGhlciB0aGFuIGEgbGluZVxuICAvLyBudW1iZXIgKHVzZWQgdG8gcHJldmVudCBsb29raW5nIHVwIHRoZSBzYW1lIGxpbmUgdHdpY2UpLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKHNpZGUsIGxpbmVPYmopIHtcbiAgICBpZiAoc2lkZSA9PSBudWxsICYmIHRoaXMudHlwZSA9PSBcImJvb2ttYXJrXCIpIHsgc2lkZSA9IDE7IH1cbiAgICB2YXIgZnJvbSwgdG87XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICB2YXIgc3BhbiA9IGdldE1hcmtlZFNwYW5Gb3IobGluZS5tYXJrZWRTcGFucywgdGhpcyk7XG4gICAgICBpZiAoc3Bhbi5mcm9tICE9IG51bGwpIHtcbiAgICAgICAgZnJvbSA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi5mcm9tKTtcbiAgICAgICAgaWYgKHNpZGUgPT0gLTEpIHsgcmV0dXJuIGZyb20gfVxuICAgICAgfVxuICAgICAgaWYgKHNwYW4udG8gIT0gbnVsbCkge1xuICAgICAgICB0byA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi50byk7XG4gICAgICAgIGlmIChzaWRlID09IDEpIHsgcmV0dXJuIHRvIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZyb20gJiYge2Zyb206IGZyb20sIHRvOiB0b31cbiAgfTtcblxuICAvLyBTaWduYWxzIHRoYXQgdGhlIG1hcmtlcidzIHdpZGdldCBjaGFuZ2VkLCBhbmQgc3Vycm91bmRpbmcgbGF5b3V0XG4gIC8vIHNob3VsZCBiZSByZWNvbXB1dGVkLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5jaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcG9zID0gdGhpcy5maW5kKC0xLCB0cnVlKSwgd2lkZ2V0ID0gdGhpcywgY20gPSB0aGlzLmRvYy5jbTtcbiAgICBpZiAoIXBvcyB8fCAhY20pIHsgcmV0dXJuIH1cbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGluZSA9IHBvcy5saW5lLCBsaW5lTiA9IGxpbmVObyhwb3MubGluZSk7XG4gICAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pO1xuICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcih2aWV3KTtcbiAgICAgICAgY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlO1xuICAgICAgaWYgKCFsaW5lSXNIaWRkZW4od2lkZ2V0LmRvYywgbGluZSkgJiYgd2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvbGRIZWlnaHQgPSB3aWRnZXQuaGVpZ2h0O1xuICAgICAgICB3aWRnZXQuaGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgdmFyIGRIZWlnaHQgPSB3aWRnZXRIZWlnaHQod2lkZ2V0KSAtIG9sZEhlaWdodDtcbiAgICAgICAgaWYgKGRIZWlnaHQpXG4gICAgICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZEhlaWdodCk7IH1cbiAgICAgIH1cbiAgICAgIHNpZ25hbExhdGVyKGNtLCBcIm1hcmtlckNoYW5nZWRcIiwgY20sIHRoaXMkMSk7XG4gICAgfSk7XG4gIH07XG5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNoTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkge1xuICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3A7XG4gICAgICBpZiAoIW9wLm1heWJlSGlkZGVuTWFya2VycyB8fCBpbmRleE9mKG9wLm1heWJlSGlkZGVuTWFya2VycywgdGhpcykgPT0gLTEpXG4gICAgICAgIHsgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZVVuaGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTsgfVxuICAgIH1cbiAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gIH07XG5cbiAgVGV4dE1hcmtlci5wcm90b3R5cGUuZGV0YWNoTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgdGhpcy5saW5lcy5zcGxpY2UoaW5kZXhPZih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7XG4gICAgaWYgKCF0aGlzLmxpbmVzLmxlbmd0aCAmJiB0aGlzLmRvYy5jbSkge1xuICAgICAgdmFyIG9wID0gdGhpcy5kb2MuY20uY3VyT3BcbiAgICAgIDsob3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZUhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7XG4gICAgfVxuICB9O1xuICBldmVudE1peGluKFRleHRNYXJrZXIpO1xuXG4gIC8vIENyZWF0ZSBhIG1hcmtlciwgd2lyZSBpdCB1cCB0byB0aGUgcmlnaHQgbGluZXMsIGFuZFxuICBmdW5jdGlvbiBtYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7XG4gICAgLy8gU2hhcmVkIG1hcmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gICAgLy8gKG1hcmtUZXh0U2hhcmVkIHdpbGwgY2FsbCBvdXQgdG8gdGhpcyBhZ2Fpbiwgb25jZSBwZXJcbiAgICAvLyBkb2N1bWVudCkuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQpIHsgcmV0dXJuIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cbiAgICAvLyBFbnN1cmUgd2UgYXJlIGluIGFuIG9wZXJhdGlvbi5cbiAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApIHsgcmV0dXJuIG9wZXJhdGlvbihkb2MuY20sIG1hcmtUZXh0KShkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB9XG5cbiAgICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0byk7XG4gICAgaWYgKG9wdGlvbnMpIHsgY29weU9iaihvcHRpb25zLCBtYXJrZXIsIGZhbHNlKTsgfVxuICAgIC8vIERvbid0IGNvbm5lY3QgZW1wdHkgbWFya2VycyB1bmxlc3MgY2xlYXJXaGVuRW1wdHkgaXMgZmFsc2VcbiAgICBpZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgICB7IHJldHVybiBtYXJrZXIgfVxuICAgIGlmIChtYXJrZXIucmVwbGFjZWRXaXRoKSB7XG4gICAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGltcGxpZXMgY29sbGFwc2VkICh3aWRnZXQgcmVwbGFjZXMgdGV4dClcbiAgICAgIG1hcmtlci5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgbWFya2VyLndpZGdldE5vZGUgPSBlbHRQKFwic3BhblwiLCBbbWFya2VyLnJlcGxhY2VkV2l0aF0sIFwiQ29kZU1pcnJvci13aWRnZXRcIik7XG4gICAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIHsgbWFya2VyLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7IH1cbiAgICAgIGlmIChvcHRpb25zLmluc2VydExlZnQpIHsgbWFya2VyLndpZGdldE5vZGUuaW5zZXJ0TGVmdCA9IHRydWU7IH1cbiAgICB9XG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICAgIGlmIChjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgZnJvbS5saW5lLCBmcm9tLCB0bywgbWFya2VyKSB8fFxuICAgICAgICAgIGZyb20ubGluZSAhPSB0by5saW5lICYmIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCB0by5saW5lLCBmcm9tLCB0bywgbWFya2VyKSlcbiAgICAgICAgeyB0aHJvdyBuZXcgRXJyb3IoXCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lXCIpIH1cbiAgICAgIHNlZUNvbGxhcHNlZFNwYW5zKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hcmtlci5hZGRUb0hpc3RvcnkpXG4gICAgICB7IGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIG9yaWdpbjogXCJtYXJrVGV4dFwifSwgZG9jLnNlbCwgTmFOKTsgfVxuXG4gICAgdmFyIGN1ckxpbmUgPSBmcm9tLmxpbmUsIGNtID0gZG9jLmNtLCB1cGRhdGVNYXhMaW5lO1xuICAgIGRvYy5pdGVyKGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGNtICYmIG1hcmtlci5jb2xsYXBzZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIHZpc3VhbExpbmUobGluZSkgPT0gY20uZGlzcGxheS5tYXhMaW5lKVxuICAgICAgICB7IHVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZCAmJiBjdXJMaW5lICE9IGZyb20ubGluZSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gICAgICBhZGRNYXJrZWRTcGFuKGxpbmUsIG5ldyBNYXJrZWRTcGFuKG1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5lID8gdG8uY2ggOiBudWxsKSk7XG4gICAgICArK2N1ckxpbmU7XG4gICAgfSk7XG4gICAgLy8gbGluZUlzSGlkZGVuIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQgcGFzc1xuICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7IGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCAwKTsgfVxuICAgIH0pOyB9XG5cbiAgICBpZiAobWFya2VyLmNsZWFyT25FbnRlcikgeyBvbihtYXJrZXIsIFwiYmVmb3JlQ3Vyc29yRW50ZXJcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFya2VyLmNsZWFyKCk7IH0pOyB9XG5cbiAgICBpZiAobWFya2VyLnJlYWRPbmx5KSB7XG4gICAgICBzZWVSZWFkT25seVNwYW5zKCk7XG4gICAgICBpZiAoZG9jLmhpc3RvcnkuZG9uZS5sZW5ndGggfHwgZG9jLmhpc3RvcnkudW5kb25lLmxlbmd0aClcbiAgICAgICAgeyBkb2MuY2xlYXJIaXN0b3J5KCk7IH1cbiAgICB9XG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICAgIG1hcmtlci5pZCA9ICsrbmV4dE1hcmtlcklkO1xuICAgICAgbWFya2VyLmF0b21pYyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChjbSkge1xuICAgICAgLy8gU3luYyBlZGl0b3Igc3RhdGVcbiAgICAgIGlmICh1cGRhdGVNYXhMaW5lKSB7IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgICBpZiAobWFya2VyLmNvbGxhcHNlZClcbiAgICAgICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOyB9XG4gICAgICBlbHNlIGlmIChtYXJrZXIuY2xhc3NOYW1lIHx8IG1hcmtlci5zdGFydFN0eWxlIHx8IG1hcmtlci5lbmRTdHlsZSB8fCBtYXJrZXIuY3NzIHx8XG4gICAgICAgICAgICAgICBtYXJrZXIuYXR0cmlidXRlcyB8fCBtYXJrZXIudGl0bGUpXG4gICAgICAgIHsgZm9yICh2YXIgaSA9IGZyb20ubGluZTsgaSA8PSB0by5saW5lOyBpKyspIHsgcmVnTGluZUNoYW5nZShjbSwgaSwgXCJ0ZXh0XCIpOyB9IH1cbiAgICAgIGlmIChtYXJrZXIuYXRvbWljKSB7IHJlQ2hlY2tTZWxlY3Rpb24oY20uZG9jKTsgfVxuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQWRkZWRcIiwgY20sIG1hcmtlcik7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJcbiAgfVxuXG4gIC8vIFNIQVJFRCBURVhUTUFSS0VSU1xuXG4gIC8vIEEgc2hhcmVkIG1hcmtlciBzcGFucyBtdWx0aXBsZSBsaW5rZWQgZG9jdW1lbnRzLiBJdCBpc1xuICAvLyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBub3JtYWxcbiAgLy8gbWFya2Vycy5cbiAgdmFyIFNoYXJlZFRleHRNYXJrZXIgPSBmdW5jdGlvbihtYXJrZXJzLCBwcmltYXJ5KSB7XG4gICAgdGhpcy5tYXJrZXJzID0gbWFya2VycztcbiAgICB0aGlzLnByaW1hcnkgPSBwcmltYXJ5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7ICsraSlcbiAgICAgIHsgbWFya2Vyc1tpXS5wYXJlbnQgPSB0aGlzOyB9XG4gIH07XG5cbiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZXhwbGljaXRseUNsZWFyZWQpIHsgcmV0dXJuIH1cbiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSlcbiAgICAgIHsgdGhpcy5tYXJrZXJzW2ldLmNsZWFyKCk7IH1cbiAgICBzaWduYWxMYXRlcih0aGlzLCBcImNsZWFyXCIpO1xuICB9O1xuXG4gIFNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2lkZSwgbGluZU9iaikge1xuICAgIHJldHVybiB0aGlzLnByaW1hcnkuZmluZChzaWRlLCBsaW5lT2JqKVxuICB9O1xuICBldmVudE1peGluKFNoYXJlZFRleHRNYXJrZXIpO1xuXG4gIGZ1bmN0aW9uIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHtcbiAgICBvcHRpb25zID0gY29weU9iaihvcHRpb25zKTtcbiAgICBvcHRpb25zLnNoYXJlZCA9IGZhbHNlO1xuICAgIHZhciBtYXJrZXJzID0gW21hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpXSwgcHJpbWFyeSA9IG1hcmtlcnNbMF07XG4gICAgdmFyIHdpZGdldCA9IG9wdGlvbnMud2lkZ2V0Tm9kZTtcbiAgICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykge1xuICAgICAgaWYgKHdpZGdldCkgeyBvcHRpb25zLndpZGdldE5vZGUgPSB3aWRnZXQuY2xvbmVOb2RlKHRydWUpOyB9XG4gICAgICBtYXJrZXJzLnB1c2gobWFya1RleHQoZG9jLCBjbGlwUG9zKGRvYywgZnJvbSksIGNsaXBQb3MoZG9jLCB0byksIG9wdGlvbnMsIHR5cGUpKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSlcbiAgICAgICAgeyBpZiAoZG9jLmxpbmtlZFtpXS5pc1BhcmVudCkgeyByZXR1cm4gfSB9XG4gICAgICBwcmltYXJ5ID0gbHN0KG1hcmtlcnMpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXcgU2hhcmVkVGV4dE1hcmtlcihtYXJrZXJzLCBwcmltYXJ5KVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFNoYXJlZE1hcmtlcnMoZG9jKSB7XG4gICAgcmV0dXJuIGRvYy5maW5kTWFya3MoUG9zKGRvYy5maXJzdCwgMCksIGRvYy5jbGlwUG9zKFBvcyhkb2MubGFzdExpbmUoKSkpLCBmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5wYXJlbnQ7IH0pXG4gIH1cblxuICBmdW5jdGlvbiBjb3B5U2hhcmVkTWFya2Vycyhkb2MsIG1hcmtlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBwb3MgPSBtYXJrZXIuZmluZCgpO1xuICAgICAgdmFyIG1Gcm9tID0gZG9jLmNsaXBQb3MocG9zLmZyb20pLCBtVG8gPSBkb2MuY2xpcFBvcyhwb3MudG8pO1xuICAgICAgaWYgKGNtcChtRnJvbSwgbVRvKSkge1xuICAgICAgICB2YXIgc3ViTWFyayA9IG1hcmtUZXh0KGRvYywgbUZyb20sIG1UbywgbWFya2VyLnByaW1hcnksIG1hcmtlci5wcmltYXJ5LnR5cGUpO1xuICAgICAgICBtYXJrZXIubWFya2Vycy5wdXNoKHN1Yk1hcmspO1xuICAgICAgICBzdWJNYXJrLnBhcmVudCA9IG1hcmtlcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXRhY2hTaGFyZWRNYXJrZXJzKG1hcmtlcnMpIHtcbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJzW2ldLCBsaW5rZWQgPSBbbWFya2VyLnByaW1hcnkuZG9jXTtcbiAgICAgIGxpbmtlZERvY3MobWFya2VyLnByaW1hcnkuZG9jLCBmdW5jdGlvbiAoZCkgeyByZXR1cm4gbGlua2VkLnB1c2goZCk7IH0pO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgc3ViTWFya2VyID0gbWFya2VyLm1hcmtlcnNbal07XG4gICAgICAgIGlmIChpbmRleE9mKGxpbmtlZCwgc3ViTWFya2VyLmRvYykgPT0gLTEpIHtcbiAgICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVsbDtcbiAgICAgICAgICBtYXJrZXIubWFya2Vycy5zcGxpY2Uoai0tLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIGxvb3AoIGkgKTtcbiAgfVxuXG4gIHZhciBuZXh0RG9jSWQgPSAwO1xuICB2YXIgRG9jID0gZnVuY3Rpb24odGV4dCwgbW9kZSwgZmlyc3RMaW5lLCBsaW5lU2VwLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgeyByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikgfVxuICAgIGlmIChmaXJzdExpbmUgPT0gbnVsbCkgeyBmaXJzdExpbmUgPSAwOyB9XG5cbiAgICBCcmFuY2hDaHVuay5jYWxsKHRoaXMsIFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZShcIlwiLCBudWxsKV0pXSk7XG4gICAgdGhpcy5maXJzdCA9IGZpcnN0TGluZTtcbiAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgdGhpcy5jYW50RWRpdCA9IGZhbHNlO1xuICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTtcbiAgICB0aGlzLm1vZGVGcm9udGllciA9IHRoaXMuaGlnaGxpZ2h0RnJvbnRpZXIgPSBmaXJzdExpbmU7XG4gICAgdmFyIHN0YXJ0ID0gUG9zKGZpcnN0TGluZSwgMCk7XG4gICAgdGhpcy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpO1xuICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpO1xuICAgIHRoaXMuaWQgPSArK25leHREb2NJZDtcbiAgICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlO1xuICAgIHRoaXMubGluZVNlcCA9IGxpbmVTZXA7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSAoZGlyZWN0aW9uID09IFwicnRsXCIpID8gXCJydGxcIiA6IFwibHRyXCI7XG4gICAgdGhpcy5leHRlbmQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgdGV4dCA9PSBcInN0cmluZ1wiKSB7IHRleHQgPSB0aGlzLnNwbGl0TGluZXModGV4dCk7IH1cbiAgICB1cGRhdGVEb2ModGhpcywge2Zyb206IHN0YXJ0LCB0bzogc3RhcnQsIHRleHQ6IHRleHR9KTtcbiAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KSwgc2VsX2RvbnRTY3JvbGwpO1xuICB9O1xuXG4gIERvYy5wcm90b3R5cGUgPSBjcmVhdGVPYmooQnJhbmNoQ2h1bmsucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IERvYyxcbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIGRvY3VtZW50LiBTdXBwb3J0cyB0d28gZm9ybXMgLS0gd2l0aCBvbmx5IG9uZVxuICAgIC8vIGFyZ3VtZW50LCBpdCBjYWxscyB0aGF0IGZvciBlYWNoIGxpbmUgaW4gdGhlIGRvY3VtZW50LiBXaXRoXG4gICAgLy8gdGhyZWUsIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gKHdpdGhcbiAgICAvLyB0aGUgc2Vjb25kIGJlaW5nIG5vbi1pbmNsdXNpdmUpLlxuICAgIGl0ZXI6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcCkge1xuICAgICAgaWYgKG9wKSB7IHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApOyB9XG4gICAgICBlbHNlIHsgdGhpcy5pdGVyTih0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplLCBmcm9tKTsgfVxuICAgIH0sXG5cbiAgICAvLyBOb24tcHVibGljIGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy5cbiAgICBpbnNlcnQ6IGZ1bmN0aW9uKGF0LCBsaW5lcykge1xuICAgICAgdmFyIGhlaWdodCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7IGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7IH1cbiAgICAgIHRoaXMuaW5zZXJ0SW5uZXIoYXQgLSB0aGlzLmZpcnN0LCBsaW5lcywgaGVpZ2h0KTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4pIHsgdGhpcy5yZW1vdmVJbm5lcihhdCAtIHRoaXMuZmlyc3QsIG4pOyB9LFxuXG4gICAgLy8gRnJvbSBoZXJlLCB0aGUgbWV0aG9kcyBhcmUgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4gTW9zdFxuICAgIC8vIGFyZSBhbHNvIGF2YWlsYWJsZSBmcm9tIENvZGVNaXJyb3IgKGVkaXRvcikgaW5zdGFuY2VzLlxuXG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICAgIHZhciBsaW5lcyA9IGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpO1xuICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKVxuICAgIH0sXG4gICAgc2V0VmFsdWU6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGNvZGUpIHtcbiAgICAgIHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTtcbiAgICAgIG1ha2VDaGFuZ2UodGhpcywge2Zyb206IHRvcCwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKHRoaXMsIGxhc3QpLnRleHQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlKSwgb3JpZ2luOiBcInNldFZhbHVlXCIsIGZ1bGw6IHRydWV9LCB0cnVlKTtcbiAgICAgIGlmICh0aGlzLmNtKSB7IHNjcm9sbFRvQ29vcmRzKHRoaXMuY20sIDAsIDApOyB9XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHRvcCksIHNlbF9kb250U2Nyb2xsKTtcbiAgICB9KSxcbiAgICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHtcbiAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pO1xuICAgICAgdG8gPSB0byA/IGNsaXBQb3ModGhpcywgdG8pIDogZnJvbTtcbiAgICAgIHJlcGxhY2VSYW5nZSh0aGlzLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKTtcbiAgICB9LFxuICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bywgbGluZVNlcCkge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSk7XG4gICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH1cbiAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpXG4gICAgfSxcblxuICAgIGdldExpbmU6IGZ1bmN0aW9uKGxpbmUpIHt2YXIgbCA9IHRoaXMuZ2V0TGluZUhhbmRsZShsaW5lKTsgcmV0dXJuIGwgJiYgbC50ZXh0fSxcblxuICAgIGdldExpbmVIYW5kbGU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKHRoaXMsIGxpbmUpKSB7IHJldHVybiBnZXRMaW5lKHRoaXMsIGxpbmUpIH19LFxuICAgIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpfSxcblxuICAgIGdldExpbmVIYW5kbGVWaXN1YWxTdGFydDogZnVuY3Rpb24obGluZSkge1xuICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHsgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7IH1cbiAgICAgIHJldHVybiB2aXN1YWxMaW5lKGxpbmUpXG4gICAgfSxcblxuICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2l6ZX0sXG4gICAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdH0sXG4gICAgbGFzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMX0sXG5cbiAgICBjbGlwUG9zOiBmdW5jdGlvbihwb3MpIHtyZXR1cm4gY2xpcFBvcyh0aGlzLCBwb3MpfSxcblxuICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHtcbiAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsLnByaW1hcnkoKSwgcG9zO1xuICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPT0gXCJoZWFkXCIpIHsgcG9zID0gcmFuZ2UuaGVhZDsgfVxuICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gXCJhbmNob3JcIikgeyBwb3MgPSByYW5nZS5hbmNob3I7IH1cbiAgICAgIGVsc2UgaWYgKHN0YXJ0ID09IFwiZW5kXCIgfHwgc3RhcnQgPT0gXCJ0b1wiIHx8IHN0YXJ0ID09PSBmYWxzZSkgeyBwb3MgPSByYW5nZS50bygpOyB9XG4gICAgICBlbHNlIHsgcG9zID0gcmFuZ2UuZnJvbSgpOyB9XG4gICAgICByZXR1cm4gcG9zXG4gICAgfSxcbiAgICBsaXN0U2VsZWN0aW9uczogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNlbC5yYW5nZXMgfSxcbiAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCl9LFxuXG4gICAgc2V0Q3Vyc29yOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5lLCBjaCwgb3B0aW9ucykge1xuICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgdHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIiA/IFBvcyhsaW5lLCBjaCB8fCAwKSA6IGxpbmUpLCBudWxsLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBzZXRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykge1xuICAgICAgc2V0U2ltcGxlU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvciksIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIGV4dGVuZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZCwgb3RoZXIsIG9wdGlvbnMpIHtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbih0aGlzLCBjbGlwUG9zKHRoaXMsIGhlYWQpLCBvdGhlciAmJiBjbGlwUG9zKHRoaXMsIG90aGVyKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGVhZHMsIG9wdGlvbnMpIHtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uc0J5OiBkb2NNZXRob2RPcChmdW5jdGlvbihmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgaGVhZHMgPSBtYXAodGhpcy5zZWwucmFuZ2VzLCBmKTtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgc2V0U2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2VzLCBwcmltYXJ5LCBvcHRpb25zKSB7XG4gICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7IG91dFtpXSA9IG5ldyBSYW5nZShjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5hbmNob3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyh0aGlzLCByYW5nZXNbaV0uaGVhZCkpOyB9XG4gICAgICBpZiAocHJpbWFyeSA9PSBudWxsKSB7IHByaW1hcnkgPSBNYXRoLm1pbihyYW5nZXMubGVuZ3RoIC0gMSwgdGhpcy5zZWwucHJpbUluZGV4KTsgfVxuICAgICAgc2V0U2VsZWN0aW9uKHRoaXMsIG5vcm1hbGl6ZVNlbGVjdGlvbih0aGlzLmNtLCBvdXQsIHByaW1hcnkpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBhZGRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGFuY2hvciwgaGVhZCwgb3B0aW9ucykge1xuICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICAgIHJhbmdlcy5wdXNoKG5ldyBSYW5nZShjbGlwUG9zKHRoaXMsIGFuY2hvciksIGNsaXBQb3ModGhpcywgaGVhZCB8fCBhbmNob3IpKSk7XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKHRoaXMuY20sIHJhbmdlcywgcmFuZ2VzLmxlbmd0aCAtIDEpLCBvcHRpb25zKTtcbiAgICB9KSxcblxuICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcywgbGluZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gICAgICAgIGxpbmVzID0gbGluZXMgPyBsaW5lcy5jb25jYXQoc2VsKSA6IHNlbDtcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgeyByZXR1cm4gbGluZXMgfVxuICAgICAgZWxzZSB7IHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpIH1cbiAgICB9LFxuICAgIGdldFNlbGVjdGlvbnM6IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdLCByYW5nZXMgPSB0aGlzLnNlbC5yYW5nZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gICAgICAgIGlmIChsaW5lU2VwICE9PSBmYWxzZSkgeyBzZWwgPSBzZWwuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKTsgfVxuICAgICAgICBwYXJ0c1tpXSA9IHNlbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJ0c1xuICAgIH0sXG4gICAgcmVwbGFjZVNlbGVjdGlvbjogZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikge1xuICAgICAgdmFyIGR1cCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgZHVwW2ldID0gY29kZTsgfVxuICAgICAgdGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhkdXAsIGNvbGxhcHNlLCBvcmlnaW4gfHwgXCIraW5wdXRcIik7XG4gICAgfSxcbiAgICByZXBsYWNlU2VsZWN0aW9uczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSwgY29sbGFwc2UsIG9yaWdpbikge1xuICAgICAgdmFyIGNoYW5nZXMgPSBbXSwgc2VsID0gdGhpcy5zZWw7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgICAgY2hhbmdlc1tpXSA9IHtmcm9tOiByYW5nZS5mcm9tKCksIHRvOiByYW5nZS50bygpLCB0ZXh0OiB0aGlzLnNwbGl0TGluZXMoY29kZVtpXSksIG9yaWdpbjogb3JpZ2lufTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSBcImVuZFwiICYmIGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBjaGFuZ2VzLCBjb2xsYXBzZSk7XG4gICAgICBmb3IgKHZhciBpJDEgPSBjaGFuZ2VzLmxlbmd0aCAtIDE7IGkkMSA+PSAwOyBpJDEtLSlcbiAgICAgICAgeyBtYWtlQ2hhbmdlKHRoaXMsIGNoYW5nZXNbaSQxXSk7IH1cbiAgICAgIGlmIChuZXdTZWwpIHsgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkodGhpcywgbmV3U2VsKTsgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jbSkgeyBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOyB9XG4gICAgfSksXG4gICAgdW5kbzogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwidW5kb1wiKTt9KSxcbiAgICByZWRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIpO30pLFxuICAgIHVuZG9TZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCBcInVuZG9cIiwgdHJ1ZSk7fSksXG4gICAgcmVkb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwicmVkb1wiLCB0cnVlKTt9KSxcblxuICAgIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFsKSB7dGhpcy5leHRlbmQgPSB2YWw7fSxcbiAgICBnZXRFeHRlbmRpbmc6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmV4dGVuZH0sXG5cbiAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSwgZG9uZSA9IDAsIHVuZG9uZSA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpc3QuZG9uZS5sZW5ndGg7IGkrKykgeyBpZiAoIWhpc3QuZG9uZVtpXS5yYW5nZXMpIHsgKytkb25lOyB9IH1cbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGhpc3QudW5kb25lLmxlbmd0aDsgaSQxKyspIHsgaWYgKCFoaXN0LnVuZG9uZVtpJDFdLnJhbmdlcykgeyArK3VuZG9uZTsgfSB9XG4gICAgICByZXR1cm4ge3VuZG86IGRvbmUsIHJlZG86IHVuZG9uZX1cbiAgICB9LFxuICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO1xuICAgICAgbGlua2VkRG9jcyh0aGlzLCBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBkb2MuaGlzdG9yeSA9IHRoaXMkMS5oaXN0b3J5OyB9LCB0cnVlKTtcbiAgICB9LFxuXG4gICAgbWFya0NsZWFuOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKHRydWUpO1xuICAgIH0sXG4gICAgY2hhbmdlR2VuZXJhdGlvbjogZnVuY3Rpb24oZm9yY2VTcGxpdCkge1xuICAgICAgaWYgKGZvcmNlU3BsaXQpXG4gICAgICAgIHsgdGhpcy5oaXN0b3J5Lmxhc3RPcCA9IHRoaXMuaGlzdG9yeS5sYXN0U2VsT3AgPSB0aGlzLmhpc3RvcnkubGFzdE9yaWdpbiA9IG51bGw7IH1cbiAgICAgIHJldHVybiB0aGlzLmhpc3RvcnkuZ2VuZXJhdGlvblxuICAgIH0sXG4gICAgaXNDbGVhbjogZnVuY3Rpb24gKGdlbikge1xuICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uID09IChnZW4gfHwgdGhpcy5jbGVhbkdlbmVyYXRpb24pXG4gICAgfSxcblxuICAgIGdldEhpc3Rvcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtkb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lKSxcbiAgICAgICAgICAgICAgdW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfVxuICAgIH0sXG4gICAgc2V0SGlzdG9yeTogZnVuY3Rpb24oaGlzdERhdGEpIHtcbiAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO1xuICAgICAgaGlzdC5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS5kb25lLnNsaWNlKDApLCBudWxsLCB0cnVlKTtcbiAgICAgIGhpc3QudW5kb25lID0gY29weUhpc3RvcnlBcnJheShoaXN0RGF0YS51bmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpO1xuICAgIH0sXG5cbiAgICBzZXRHdXR0ZXJNYXJrZXI6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGd1dHRlcklELCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgbGluZSwgXCJndXR0ZXJcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTtcbiAgICAgICAgbWFya2Vyc1tndXR0ZXJJRF0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF2YWx1ZSAmJiBpc0VtcHR5KG1hcmtlcnMpKSB7IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG5cbiAgICBjbGVhckd1dHRlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7XG4gICAgICAgICAgY2hhbmdlTGluZSh0aGlzJDEsIGxpbmUsIFwiZ3V0dGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgeyBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOyB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KSxcblxuICAgIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgbjtcbiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGlmICghaXNMaW5lKHRoaXMsIGxpbmUpKSB7IHJldHVybiBudWxsIH1cbiAgICAgICAgbiA9IGxpbmU7XG4gICAgICAgIGxpbmUgPSBnZXRMaW5lKHRoaXMsIGxpbmUpO1xuICAgICAgICBpZiAoIWxpbmUpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IGxpbmVObyhsaW5lKTtcbiAgICAgICAgaWYgKG4gPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBndXR0ZXJNYXJrZXJzOiBsaW5lLmd1dHRlck1hcmtlcnMsXG4gICAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJnQ2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcyxcbiAgICAgICAgICAgICAgd2lkZ2V0czogbGluZS53aWRnZXRzfVxuICAgIH0sXG5cbiAgICBhZGRMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJcIiA6IFwiY2xhc3NcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSBcInRleHRcIiA/IFwidGV4dENsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyQ2xhc3NcIiA6IFwid3JhcENsYXNzXCI7XG4gICAgICAgIGlmICghbGluZVtwcm9wXSkgeyBsaW5lW3Byb3BdID0gY2xzOyB9XG4gICAgICAgIGVsc2UgaWYgKGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgZWxzZSB7IGxpbmVbcHJvcF0gKz0gXCIgXCIgKyBjbHM7IH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG4gICAgcmVtb3ZlTGluZUNsYXNzOiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIHdoZXJlLCBjbHMpIHtcbiAgICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyXCIgOiBcImNsYXNzXCIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIHZhciBwcm9wID0gd2hlcmUgPT0gXCJ0ZXh0XCIgPyBcInRleHRDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJiYWNrZ3JvdW5kXCIgPyBcImJnQ2xhc3NcIlxuICAgICAgICAgICAgICAgICA6IHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlckNsYXNzXCIgOiBcIndyYXBDbGFzc1wiO1xuICAgICAgICB2YXIgY3VyID0gbGluZVtwcm9wXTtcbiAgICAgICAgaWYgKCFjdXIpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIHsgbGluZVtwcm9wXSA9IG51bGw7IH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gY3VyLm1hdGNoKGNsYXNzVGVzdChjbHMpKTtcbiAgICAgICAgICBpZiAoIWZvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgdmFyIGVuZCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxpbmVbcHJvcF0gPSBjdXIuc2xpY2UoMCwgZm91bmQuaW5kZXgpICsgKCFmb3VuZC5pbmRleCB8fCBlbmQgPT0gY3VyLmxlbmd0aCA/IFwiXCIgOiBcIiBcIikgKyBjdXIuc2xpY2UoZW5kKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0pLFxuXG4gICAgYWRkTGluZVdpZGdldDogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCBub2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYWRkTGluZVdpZGdldCh0aGlzLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpXG4gICAgfSksXG4gICAgcmVtb3ZlTGluZVdpZGdldDogZnVuY3Rpb24od2lkZ2V0KSB7IHdpZGdldC5jbGVhcigpOyB9LFxuXG4gICAgbWFya1RleHQ6IGZ1bmN0aW9uKGZyb20sIHRvLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gbWFya1RleHQodGhpcywgY2xpcFBvcyh0aGlzLCBmcm9tKSwgY2xpcFBvcyh0aGlzLCB0byksIG9wdGlvbnMsIG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlIHx8IFwicmFuZ2VcIilcbiAgICB9LFxuICAgIHNldEJvb2ttYXJrOiBmdW5jdGlvbihwb3MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGVmdDogb3B0aW9ucyAmJiBvcHRpb25zLmluc2VydExlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IGZhbHNlLCBzaGFyZWQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50c307XG4gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7XG4gICAgICByZXR1cm4gbWFya1RleHQodGhpcywgcG9zLCBwb3MsIHJlYWxPcHRzLCBcImJvb2ttYXJrXCIpXG4gICAgfSxcbiAgICBmaW5kTWFya3NBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICBwb3MgPSBjbGlwUG9zKHRoaXMsIHBvcyk7XG4gICAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgICAgaWYgKHNwYW5zKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHNwYW4gPSBzcGFuc1tpXTtcbiAgICAgICAgaWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJlxuICAgICAgICAgICAgKHNwYW4udG8gPT0gbnVsbCB8fCBzcGFuLnRvID49IHBvcy5jaCkpXG4gICAgICAgICAgeyBtYXJrZXJzLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsgfVxuICAgICAgfSB9XG4gICAgICByZXR1cm4gbWFya2Vyc1xuICAgIH0sXG4gICAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7XG4gICAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTsgdG8gPSBjbGlwUG9zKHRoaXMsIHRvKTtcbiAgICAgIHZhciBmb3VuZCA9IFtdLCBsaW5lTm8gPSBmcm9tLmxpbmU7XG4gICAgICB0aGlzLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucztcbiAgICAgICAgaWYgKHNwYW5zKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICAgIGlmICghKHNwYW4udG8gIT0gbnVsbCAmJiBsaW5lTm8gPT0gZnJvbS5saW5lICYmIGZyb20uY2ggPj0gc3Bhbi50byB8fFxuICAgICAgICAgICAgICAgIHNwYW4uZnJvbSA9PSBudWxsICYmIGxpbmVObyAhPSBmcm9tLmxpbmUgfHxcbiAgICAgICAgICAgICAgICBzcGFuLmZyb20gIT0gbnVsbCAmJiBsaW5lTm8gPT0gdG8ubGluZSAmJiBzcGFuLmZyb20gPj0gdG8uY2gpICYmXG4gICAgICAgICAgICAgICghZmlsdGVyIHx8IGZpbHRlcihzcGFuLm1hcmtlcikpKVxuICAgICAgICAgICAgeyBmb3VuZC5wdXNoKHNwYW4ubWFya2VyLnBhcmVudCB8fCBzcGFuLm1hcmtlcik7IH1cbiAgICAgICAgfSB9XG4gICAgICAgICsrbGluZU5vO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZm91bmRcbiAgICB9LFxuICAgIGdldEFsbE1hcmtzOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBtYXJrZXJzID0gW107XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHNwcyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgICAgIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgeyBpZiAoc3BzW2ldLmZyb20gIT0gbnVsbCkgeyBtYXJrZXJzLnB1c2goc3BzW2ldLm1hcmtlcik7IH0gfSB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBtYXJrZXJzXG4gICAgfSxcblxuICAgIHBvc0Zyb21JbmRleDogZnVuY3Rpb24ob2ZmKSB7XG4gICAgICB2YXIgY2gsIGxpbmVObyA9IHRoaXMuZmlyc3QsIHNlcFNpemUgPSB0aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGg7XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHN6ID0gbGluZS50ZXh0Lmxlbmd0aCArIHNlcFNpemU7XG4gICAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWUgfVxuICAgICAgICBvZmYgLT0gc3o7XG4gICAgICAgICsrbGluZU5vO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xpcFBvcyh0aGlzLCBQb3MobGluZU5vLCBjaCkpXG4gICAgfSxcbiAgICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgIGNvb3JkcyA9IGNsaXBQb3ModGhpcywgY29vcmRzKTtcbiAgICAgIHZhciBpbmRleCA9IGNvb3Jkcy5jaDtcbiAgICAgIGlmIChjb29yZHMubGluZSA8IHRoaXMuZmlyc3QgfHwgY29vcmRzLmNoIDwgMCkgeyByZXR1cm4gMCB9XG4gICAgICB2YXIgc2VwU2l6ZSA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgIHRoaXMuaXRlcih0aGlzLmZpcnN0LCBjb29yZHMubGluZSwgZnVuY3Rpb24gKGxpbmUpIHsgLy8gaXRlciBhYm9ydHMgd2hlbiBjYWxsYmFjayByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlXG4gICAgICAgIGluZGV4ICs9IGxpbmUudGV4dC5sZW5ndGggKyBzZXBTaXplO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5kZXhcbiAgICB9LFxuXG4gICAgY29weTogZnVuY3Rpb24oY29weUhpc3RvcnkpIHtcbiAgICAgIHZhciBkb2MgPSBuZXcgRG9jKGdldExpbmVzKHRoaXMsIHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgIGRvYy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsgZG9jLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQ7XG4gICAgICBkb2Muc2VsID0gdGhpcy5zZWw7XG4gICAgICBkb2MuZXh0ZW5kID0gZmFsc2U7XG4gICAgICBpZiAoY29weUhpc3RvcnkpIHtcbiAgICAgICAgZG9jLmhpc3RvcnkudW5kb0RlcHRoID0gdGhpcy5oaXN0b3J5LnVuZG9EZXB0aDtcbiAgICAgICAgZG9jLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRvY1xuICAgIH0sXG5cbiAgICBsaW5rZWREb2M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIGlmICghb3B0aW9ucykgeyBvcHRpb25zID0ge307IH1cbiAgICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplO1xuICAgICAgaWYgKG9wdGlvbnMuZnJvbSAhPSBudWxsICYmIG9wdGlvbnMuZnJvbSA+IGZyb20pIHsgZnJvbSA9IG9wdGlvbnMuZnJvbTsgfVxuICAgICAgaWYgKG9wdGlvbnMudG8gIT0gbnVsbCAmJiBvcHRpb25zLnRvIDwgdG8pIHsgdG8gPSBvcHRpb25zLnRvOyB9XG4gICAgICB2YXIgY29weSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlT3B0aW9uLCBmcm9tLCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICAgIGlmIChvcHRpb25zLnNoYXJlZEhpc3QpIHsgY29weS5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5XG4gICAgICA7IH0odGhpcy5saW5rZWQgfHwgKHRoaXMubGlua2VkID0gW10pKS5wdXNoKHtkb2M6IGNvcHksIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH0pO1xuICAgICAgY29weS5saW5rZWQgPSBbe2RvYzogdGhpcywgaXNQYXJlbnQ6IHRydWUsIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH1dO1xuICAgICAgY29weVNoYXJlZE1hcmtlcnMoY29weSwgZmluZFNoYXJlZE1hcmtlcnModGhpcykpO1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuICAgIHVubGlua0RvYzogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIENvZGVNaXJyb3IpIHsgb3RoZXIgPSBvdGhlci5kb2M7IH1cbiAgICAgIGlmICh0aGlzLmxpbmtlZCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGlua2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBsaW5rID0gdGhpcy5saW5rZWRbaV07XG4gICAgICAgIGlmIChsaW5rLmRvYyAhPSBvdGhlcikgeyBjb250aW51ZSB9XG4gICAgICAgIHRoaXMubGlua2VkLnNwbGljZShpLCAxKTtcbiAgICAgICAgb3RoZXIudW5saW5rRG9jKHRoaXMpO1xuICAgICAgICBkZXRhY2hTaGFyZWRNYXJrZXJzKGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gfVxuICAgICAgLy8gSWYgdGhlIGhpc3RvcmllcyB3ZXJlIHNoYXJlZCwgc3BsaXQgdGhlbSBhZ2FpblxuICAgICAgaWYgKG90aGVyLmhpc3RvcnkgPT0gdGhpcy5oaXN0b3J5KSB7XG4gICAgICAgIHZhciBzcGxpdElkcyA9IFtvdGhlci5pZF07XG4gICAgICAgIGxpbmtlZERvY3Mob3RoZXIsIGZ1bmN0aW9uIChkb2MpIHsgcmV0dXJuIHNwbGl0SWRzLnB1c2goZG9jLmlkKTsgfSwgdHJ1ZSk7XG4gICAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTtcbiAgICAgICAgb3RoZXIuaGlzdG9yeS5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkuZG9uZSwgc3BsaXRJZHMpO1xuICAgICAgICBvdGhlci5oaXN0b3J5LnVuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSwgc3BsaXRJZHMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXRlckxpbmtlZERvY3M6IGZ1bmN0aW9uKGYpIHtsaW5rZWREb2NzKHRoaXMsIGYpO30sXG5cbiAgICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlfSxcbiAgICBnZXRFZGl0b3I6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmNtfSxcblxuICAgIHNwbGl0TGluZXM6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgaWYgKHRoaXMubGluZVNlcCkgeyByZXR1cm4gc3RyLnNwbGl0KHRoaXMubGluZVNlcCkgfVxuICAgICAgcmV0dXJuIHNwbGl0TGluZXNBdXRvKHN0cilcbiAgICB9LFxuICAgIGxpbmVTZXBhcmF0b3I6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lU2VwIHx8IFwiXFxuXCIgfSxcblxuICAgIHNldERpcmVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24gKGRpcikge1xuICAgICAgaWYgKGRpciAhPSBcInJ0bFwiKSB7IGRpciA9IFwibHRyXCI7IH1cbiAgICAgIGlmIChkaXIgPT0gdGhpcy5kaXJlY3Rpb24pIHsgcmV0dXJuIH1cbiAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyO1xuICAgICAgdGhpcy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7IHJldHVybiBsaW5lLm9yZGVyID0gbnVsbDsgfSk7XG4gICAgICBpZiAodGhpcy5jbSkgeyBkaXJlY3Rpb25DaGFuZ2VkKHRoaXMuY20pOyB9XG4gICAgfSlcbiAgfSk7XG5cbiAgLy8gUHVibGljIGFsaWFzLlxuICBEb2MucHJvdG90eXBlLmVhY2hMaW5lID0gRG9jLnByb3RvdHlwZS5pdGVyO1xuXG4gIC8vIEtsdWRnZSB0byB3b3JrIGFyb3VuZCBzdHJhbmdlIElFIGJlaGF2aW9yIHdoZXJlIGl0J2xsIHNvbWV0aW1lc1xuICAvLyByZS1maXJlIGEgc2VyaWVzIG9mIGRyYWctcmVsYXRlZCBldmVudHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKVxuICB2YXIgbGFzdERyb3AgPSAwO1xuXG4gIGZ1bmN0aW9uIG9uRHJvcChlKSB7XG4gICAgdmFyIGNtID0gdGhpcztcbiAgICBjbGVhckRyYWdDdXJzb3IoY20pO1xuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSlcbiAgICAgIHsgcmV0dXJuIH1cbiAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgIGlmIChpZSkgeyBsYXN0RHJvcCA9ICtuZXcgRGF0ZTsgfVxuICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzO1xuICAgIGlmICghcG9zIHx8IGNtLmlzUmVhZE9ubHkoKSkgeyByZXR1cm4gfVxuICAgIC8vIE1pZ2h0IGJlIGEgZmlsZSBkcm9wLCBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBleHRyYWN0IHRoZSB0ZXh0XG4gICAgLy8gYW5kIGluc2VydCBpdC5cbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7XG4gICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDtcbiAgICAgIHZhciBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7XG4gICAgICAgICAgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwb3MgPSBjbGlwUG9zKGNtLmRvYywgcG9zKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSB7ZnJvbTogcG9zLCB0bzogcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5kb2Muc3BsaXRMaW5lcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuZmlsdGVyKGZ1bmN0aW9uICh0KSB7IHJldHVybiB0ICE9IG51bGw7IH0pLmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFwicGFzdGVcIn07XG4gICAgICAgICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlKTtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKGNsaXBQb3MoY20uZG9jLCBwb3MpLCBjbGlwUG9zKGNtLmRvYywgY2hhbmdlRW5kKGNoYW5nZSkpKSk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciByZWFkVGV4dEZyb21GaWxlID0gZnVuY3Rpb24gKGZpbGUsIGkpIHtcbiAgICAgICAgaWYgKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzICYmXG4gICAgICAgICAgICBpbmRleE9mKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzLCBmaWxlLnR5cGUpID09IC0xKSB7XG4gICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTsgfTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgY29udGVudCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICAgICAgaWYgKC9bXFx4MDAtXFx4MDhcXHgwZS1cXHgxZl17Mn0vLnRlc3QoY29udGVudCkpIHtcbiAgICAgICAgICAgIG1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkKCk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dFtpXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gICAgICB9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgeyByZWFkVGV4dEZyb21GaWxlKGZpbGVzW2ldLCBpKTsgfVxuICAgIH0gZWxzZSB7IC8vIE5vcm1hbCBkcm9wXG4gICAgICAvLyBEb24ndCBkbyBhIHJlcGxhY2UgaWYgdGhlIGRyb3AgaGFwcGVuZWQgaW5zaWRlIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LlxuICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPiAtMSkge1xuICAgICAgICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQoZSk7XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgZWRpdG9yIGlzIHJlLWZvY3VzZWRcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdGV4dCQxID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcIlRleHRcIik7XG4gICAgICAgIGlmICh0ZXh0JDEpIHtcbiAgICAgICAgICB2YXIgc2VsZWN0ZWQ7XG4gICAgICAgICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiAhY20uc3RhdGUuZHJhZ2dpbmdUZXh0LmNvcHkpXG4gICAgICAgICAgICB7IHNlbGVjdGVkID0gY20ubGlzdFNlbGVjdGlvbnMoKTsgfVxuICAgICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpO1xuICAgICAgICAgIGlmIChzZWxlY3RlZCkgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzZWxlY3RlZC5sZW5ndGg7ICsraSQxKVxuICAgICAgICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCBcIlwiLCBzZWxlY3RlZFtpJDFdLmFuY2hvciwgc2VsZWN0ZWRbaSQxXS5oZWFkLCBcImRyYWdcIik7IH0gfVxuICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCQxLCBcImFyb3VuZFwiLCBcInBhc3RlXCIpO1xuICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2F0Y2goZSl7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGNtLCBlKSB7XG4gICAgaWYgKGllICYmICghY20uc3RhdGUuZHJhZ2dpbmdUZXh0IHx8ICtuZXcgRGF0ZSAtIGxhc3REcm9wIDwgMTAwKSkgeyBlX3N0b3AoZSk7IHJldHVybiB9XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSB7IHJldHVybiB9XG5cbiAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKFwiVGV4dFwiLCBjbS5nZXRTZWxlY3Rpb24oKSk7XG4gICAgZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IFwiY29weU1vdmVcIjtcblxuICAgIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuXG4gICAgLy8gUmVjZW50IFNhZmFyaSAofjYuMC4yKSBoYXZlIGEgdGVuZGVuY3kgdG8gc2VnZmF1bHQgd2hlbiB0aGlzIGhhcHBlbnMsIHNvIHdlIGRvbid0IGRvIGl0IHRoZXJlLlxuICAgIGlmIChlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UgJiYgIXNhZmFyaSkge1xuICAgICAgdmFyIGltZyA9IGVsdChcImltZ1wiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwO1wiKTtcbiAgICAgIGltZy5zcmMgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09XCI7XG4gICAgICBpZiAocHJlc3RvKSB7XG4gICAgICAgIGltZy53aWR0aCA9IGltZy5oZWlnaHQgPSAxO1xuICAgICAgICBjbS5kaXNwbGF5LndyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcbiAgICAgICAgLy8gRm9yY2UgYSByZWxheW91dCwgb3IgT3BlcmEgd29uJ3QgdXNlIG91ciBpbWFnZSBmb3Igc29tZSBvYnNjdXJlIHJlYXNvblxuICAgICAgICBpbWcuX3RvcCA9IGltZy5vZmZzZXRUb3A7XG4gICAgICB9XG4gICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgIGlmIChwcmVzdG8pIHsgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRHJhZ092ZXIoY20sIGUpIHtcbiAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTtcbiAgICBpZiAoIXBvcykgeyByZXR1cm4gfVxuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHBvcywgZnJhZyk7XG4gICAgaWYgKCFjbS5kaXNwbGF5LmRyYWdDdXJzb3IpIHtcbiAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY3Vyc29ycyBDb2RlTWlycm9yLWRyYWdjdXJzb3JzXCIpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UuaW5zZXJ0QmVmb3JlKGNtLmRpc3BsYXkuZHJhZ0N1cnNvciwgY20uZGlzcGxheS5jdXJzb3JEaXYpO1xuICAgIH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGZyYWcpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJEcmFnQ3Vyc29yKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcikge1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoY20uZGlzcGxheS5kcmFnQ3Vyc29yKTtcbiAgICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIGNhcmVmdWxseSwgYmVjYXVzZSBuYWl2ZWx5IHJlZ2lzdGVyaW5nIGFcbiAgLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2lsbCBjYXVzZSB0aGUgZWRpdG9ycyB0byBuZXZlciBiZVxuICAvLyBnYXJiYWdlIGNvbGxlY3RlZC5cblxuICBmdW5jdGlvbiBmb3JFYWNoQ29kZU1pcnJvcihmKSB7XG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7IHJldHVybiB9XG4gICAgdmFyIGJ5Q2xhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiQ29kZU1pcnJvclwiKSwgZWRpdG9ycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnlDbGFzcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNtID0gYnlDbGFzc1tpXS5Db2RlTWlycm9yO1xuICAgICAgaWYgKGNtKSB7IGVkaXRvcnMucHVzaChjbSk7IH1cbiAgICB9XG4gICAgaWYgKGVkaXRvcnMubGVuZ3RoKSB7IGVkaXRvcnNbMF0ub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRpdG9ycy5sZW5ndGg7IGkrKykgeyBmKGVkaXRvcnNbaV0pOyB9XG4gICAgfSk7IH1cbiAgfVxuXG4gIHZhciBnbG9iYWxzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBlbnN1cmVHbG9iYWxIYW5kbGVycygpIHtcbiAgICBpZiAoZ2xvYmFsc1JlZ2lzdGVyZWQpIHsgcmV0dXJuIH1cbiAgICByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCk7XG4gICAgZ2xvYmFsc1JlZ2lzdGVyZWQgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyR2xvYmFsSGFuZGxlcnMoKSB7XG4gICAgLy8gV2hlbiB0aGUgd2luZG93IHJlc2l6ZXMsIHdlIG5lZWQgdG8gcmVmcmVzaCBhY3RpdmUgZWRpdG9ycy5cbiAgICB2YXIgcmVzaXplVGltZXI7XG4gICAgb24od2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocmVzaXplVGltZXIgPT0gbnVsbCkgeyByZXNpemVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNpemVUaW1lciA9IG51bGw7XG4gICAgICAgIGZvckVhY2hDb2RlTWlycm9yKG9uUmVzaXplKTtcbiAgICAgIH0sIDEwMCk7IH1cbiAgICB9KTtcbiAgICAvLyBXaGVuIHRoZSB3aW5kb3cgbG9zZXMgZm9jdXMsIHdlIHdhbnQgdG8gc2hvdyB0aGUgZWRpdG9yIGFzIGJsdXJyZWRcbiAgICBvbih3aW5kb3csIFwiYmx1clwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBmb3JFYWNoQ29kZU1pcnJvcihvbkJsdXIpOyB9KTtcbiAgfVxuICAvLyBDYWxsZWQgd2hlbiB0aGUgd2luZG93IHJlc2l6ZXNcbiAgZnVuY3Rpb24gb25SZXNpemUoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXk7XG4gICAgLy8gTWlnaHQgYmUgYSB0ZXh0IHNjYWxpbmcgb3BlcmF0aW9uLCBjbGVhciBzaXplIGNhY2hlcy5cbiAgICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICAgIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTtcbiAgICBjbS5zZXRTaXplKCk7XG4gIH1cblxuICB2YXIga2V5TmFtZXMgPSB7XG4gICAgMzogXCJQYXVzZVwiLCA4OiBcIkJhY2tzcGFjZVwiLCA5OiBcIlRhYlwiLCAxMzogXCJFbnRlclwiLCAxNjogXCJTaGlmdFwiLCAxNzogXCJDdHJsXCIsIDE4OiBcIkFsdFwiLFxuICAgIDE5OiBcIlBhdXNlXCIsIDIwOiBcIkNhcHNMb2NrXCIsIDI3OiBcIkVzY1wiLCAzMjogXCJTcGFjZVwiLCAzMzogXCJQYWdlVXBcIiwgMzQ6IFwiUGFnZURvd25cIiwgMzU6IFwiRW5kXCIsXG4gICAgMzY6IFwiSG9tZVwiLCAzNzogXCJMZWZ0XCIsIDM4OiBcIlVwXCIsIDM5OiBcIlJpZ2h0XCIsIDQwOiBcIkRvd25cIiwgNDQ6IFwiUHJpbnRTY3JuXCIsIDQ1OiBcIkluc2VydFwiLFxuICAgIDQ2OiBcIkRlbGV0ZVwiLCA1OTogXCI7XCIsIDYxOiBcIj1cIiwgOTE6IFwiTW9kXCIsIDkyOiBcIk1vZFwiLCA5MzogXCJNb2RcIixcbiAgICAxMDY6IFwiKlwiLCAxMDc6IFwiPVwiLCAxMDk6IFwiLVwiLCAxMTA6IFwiLlwiLCAxMTE6IFwiL1wiLCAxNDU6IFwiU2Nyb2xsTG9ja1wiLFxuICAgIDE3MzogXCItXCIsIDE4NjogXCI7XCIsIDE4NzogXCI9XCIsIDE4ODogXCIsXCIsIDE4OTogXCItXCIsIDE5MDogXCIuXCIsIDE5MTogXCIvXCIsIDE5MjogXCJgXCIsIDIxOTogXCJbXCIsIDIyMDogXCJcXFxcXCIsXG4gICAgMjIxOiBcIl1cIiwgMjIyOiBcIidcIiwgNjMyMzI6IFwiVXBcIiwgNjMyMzM6IFwiRG93blwiLCA2MzIzNDogXCJMZWZ0XCIsIDYzMjM1OiBcIlJpZ2h0XCIsIDYzMjcyOiBcIkRlbGV0ZVwiLFxuICAgIDYzMjczOiBcIkhvbWVcIiwgNjMyNzU6IFwiRW5kXCIsIDYzMjc2OiBcIlBhZ2VVcFwiLCA2MzI3NzogXCJQYWdlRG93blwiLCA2MzMwMjogXCJJbnNlcnRcIlxuICB9O1xuXG4gIC8vIE51bWJlciBrZXlzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeyBrZXlOYW1lc1tpICsgNDhdID0ga2V5TmFtZXNbaSArIDk2XSA9IFN0cmluZyhpKTsgfVxuICAvLyBBbHBoYWJldGljIGtleXNcbiAgZm9yICh2YXIgaSQxID0gNjU7IGkkMSA8PSA5MDsgaSQxKyspIHsga2V5TmFtZXNbaSQxXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSQxKTsgfVxuICAvLyBGdW5jdGlvbiBrZXlzXG4gIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8PSAxMjsgaSQyKyspIHsga2V5TmFtZXNbaSQyICsgMTExXSA9IGtleU5hbWVzW2kkMiArIDYzMjM1XSA9IFwiRlwiICsgaSQyOyB9XG5cbiAgdmFyIGtleU1hcCA9IHt9O1xuXG4gIGtleU1hcC5iYXNpYyA9IHtcbiAgICBcIkxlZnRcIjogXCJnb0NoYXJMZWZ0XCIsIFwiUmlnaHRcIjogXCJnb0NoYXJSaWdodFwiLCBcIlVwXCI6IFwiZ29MaW5lVXBcIiwgXCJEb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiRW5kXCI6IFwiZ29MaW5lRW5kXCIsIFwiSG9tZVwiOiBcImdvTGluZVN0YXJ0U21hcnRcIiwgXCJQYWdlVXBcIjogXCJnb1BhZ2VVcFwiLCBcIlBhZ2VEb3duXCI6IFwiZ29QYWdlRG93blwiLFxuICAgIFwiRGVsZXRlXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQmFja3NwYWNlXCI6IFwiZGVsQ2hhckJlZm9yZVwiLCBcIlNoaWZ0LUJhY2tzcGFjZVwiOiBcImRlbENoYXJCZWZvcmVcIixcbiAgICBcIlRhYlwiOiBcImRlZmF1bHRUYWJcIiwgXCJTaGlmdC1UYWJcIjogXCJpbmRlbnRBdXRvXCIsXG4gICAgXCJFbnRlclwiOiBcIm5ld2xpbmVBbmRJbmRlbnRcIiwgXCJJbnNlcnRcIjogXCJ0b2dnbGVPdmVyd3JpdGVcIixcbiAgICBcIkVzY1wiOiBcInNpbmdsZVNlbGVjdGlvblwiXG4gIH07XG4gIC8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5XG4gIC8vIGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRlZmluZSB0aGVtLiBVbmtub3duIGNvbW1hbmRzXG4gIC8vIGFyZSBzaW1wbHkgaWdub3JlZC5cbiAga2V5TWFwLnBjRGVmYXVsdCA9IHtcbiAgICBcIkN0cmwtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkN0cmwtRFwiOiBcImRlbGV0ZUxpbmVcIiwgXCJDdHJsLVpcIjogXCJ1bmRvXCIsIFwiU2hpZnQtQ3RybC1aXCI6IFwicmVkb1wiLCBcIkN0cmwtWVwiOiBcInJlZG9cIixcbiAgICBcIkN0cmwtSG9tZVwiOiBcImdvRG9jU3RhcnRcIiwgXCJDdHJsLUVuZFwiOiBcImdvRG9jRW5kXCIsIFwiQ3RybC1VcFwiOiBcImdvTGluZVVwXCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiQ3RybC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIiwgXCJDdHJsLVJpZ2h0XCI6IFwiZ29Hcm91cFJpZ2h0XCIsIFwiQWx0LUxlZnRcIjogXCJnb0xpbmVTdGFydFwiLCBcIkFsdC1SaWdodFwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLCBcIkN0cmwtRGVsZXRlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkN0cmwtU1wiOiBcInNhdmVcIiwgXCJDdHJsLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDdHJsLUdcIjogXCJmaW5kTmV4dFwiLCBcIlNoaWZ0LUN0cmwtR1wiOiBcImZpbmRQcmV2XCIsIFwiU2hpZnQtQ3RybC1GXCI6IFwicmVwbGFjZVwiLCBcIlNoaWZ0LUN0cmwtUlwiOiBcInJlcGxhY2VBbGxcIixcbiAgICBcIkN0cmwtW1wiOiBcImluZGVudExlc3NcIiwgXCJDdHJsLV1cIjogXCJpbmRlbnRNb3JlXCIsXG4gICAgXCJDdHJsLVVcIjogXCJ1bmRvU2VsZWN0aW9uXCIsIFwiU2hpZnQtQ3RybC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkFsdC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgIFwiZmFsbHRocm91Z2hcIjogXCJiYXNpY1wiXG4gIH07XG4gIC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuXG4gIGtleU1hcC5lbWFjc3kgPSB7XG4gICAgXCJDdHJsLUZcIjogXCJnb0NoYXJSaWdodFwiLCBcIkN0cmwtQlwiOiBcImdvQ2hhckxlZnRcIiwgXCJDdHJsLVBcIjogXCJnb0xpbmVVcFwiLCBcIkN0cmwtTlwiOiBcImdvTGluZURvd25cIixcbiAgICBcIkFsdC1GXCI6IFwiZ29Xb3JkUmlnaHRcIiwgXCJBbHQtQlwiOiBcImdvV29yZExlZnRcIiwgXCJDdHJsLUFcIjogXCJnb0xpbmVTdGFydFwiLCBcIkN0cmwtRVwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1WXCI6IFwiZ29QYWdlRG93blwiLCBcIlNoaWZ0LUN0cmwtVlwiOiBcImdvUGFnZVVwXCIsIFwiQ3RybC1EXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQ3RybC1IXCI6IFwiZGVsQ2hhckJlZm9yZVwiLFxuICAgIFwiQWx0LURcIjogXCJkZWxXb3JkQWZ0ZXJcIiwgXCJBbHQtQmFja3NwYWNlXCI6IFwiZGVsV29yZEJlZm9yZVwiLCBcIkN0cmwtS1wiOiBcImtpbGxMaW5lXCIsIFwiQ3RybC1UXCI6IFwidHJhbnNwb3NlQ2hhcnNcIixcbiAgICBcIkN0cmwtT1wiOiBcIm9wZW5MaW5lXCJcbiAgfTtcbiAga2V5TWFwLm1hY0RlZmF1bHQgPSB7XG4gICAgXCJDbWQtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkNtZC1EXCI6IFwiZGVsZXRlTGluZVwiLCBcIkNtZC1aXCI6IFwidW5kb1wiLCBcIlNoaWZ0LUNtZC1aXCI6IFwicmVkb1wiLCBcIkNtZC1ZXCI6IFwicmVkb1wiLFxuICAgIFwiQ21kLUhvbWVcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ21kLVVwXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkNtZC1FbmRcIjogXCJnb0RvY0VuZFwiLCBcIkNtZC1Eb3duXCI6IFwiZ29Eb2NFbmRcIiwgXCJBbHQtTGVmdFwiOiBcImdvR3JvdXBMZWZ0XCIsXG4gICAgXCJBbHQtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIiwgXCJDbWQtTGVmdFwiOiBcImdvTGluZUxlZnRcIiwgXCJDbWQtUmlnaHRcIjogXCJnb0xpbmVSaWdodFwiLCBcIkFsdC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLFxuICAgIFwiQ3RybC1BbHQtQmFja3NwYWNlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkFsdC1EZWxldGVcIjogXCJkZWxHcm91cEFmdGVyXCIsIFwiQ21kLVNcIjogXCJzYXZlXCIsIFwiQ21kLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDbWQtR1wiOiBcImZpbmROZXh0XCIsIFwiU2hpZnQtQ21kLUdcIjogXCJmaW5kUHJldlwiLCBcIkNtZC1BbHQtRlwiOiBcInJlcGxhY2VcIiwgXCJTaGlmdC1DbWQtQWx0LUZcIjogXCJyZXBsYWNlQWxsXCIsXG4gICAgXCJDbWQtW1wiOiBcImluZGVudExlc3NcIiwgXCJDbWQtXVwiOiBcImluZGVudE1vcmVcIiwgXCJDbWQtQmFja3NwYWNlXCI6IFwiZGVsV3JhcHBlZExpbmVMZWZ0XCIsIFwiQ21kLURlbGV0ZVwiOiBcImRlbFdyYXBwZWRMaW5lUmlnaHRcIixcbiAgICBcIkNtZC1VXCI6IFwidW5kb1NlbGVjdGlvblwiLCBcIlNoaWZ0LUNtZC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkN0cmwtVXBcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29Eb2NFbmRcIixcbiAgICBcImZhbGx0aHJvdWdoXCI6IFtcImJhc2ljXCIsIFwiZW1hY3N5XCJdXG4gIH07XG4gIGtleU1hcFtcImRlZmF1bHRcIl0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7XG5cbiAgLy8gS0VZTUFQIERJU1BBVENIXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyk7XG4gICAgbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBhbHQsIGN0cmwsIHNoaWZ0LCBjbWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIHZhciBtb2QgPSBwYXJ0c1tpXTtcbiAgICAgIGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIHsgY21kID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSB7IGFsdCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpIHsgY3RybCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9ecyhoaWZ0KT8kL2kudGVzdChtb2QpKSB7IHNoaWZ0ID0gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiBcIiArIG1vZCkgfVxuICAgIH1cbiAgICBpZiAoYWx0KSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoY3RybCkgeyBuYW1lID0gXCJDdHJsLVwiICsgbmFtZTsgfVxuICAgIGlmIChjbWQpIHsgbmFtZSA9IFwiQ21kLVwiICsgbmFtZTsgfVxuICAgIGlmIChzaGlmdCkgeyBuYW1lID0gXCJTaGlmdC1cIiArIG5hbWU7IH1cbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLy8gVGhpcyBpcyBhIGtsdWRnZSB0byBrZWVwIGtleW1hcHMgbW9zdGx5IHdvcmtpbmcgYXMgcmF3IG9iamVjdHNcbiAgLy8gKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KSB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIHN1cHBvcnQgZmVhdHVyZXNcbiAgLy8gbGlrZSBub3JtYWxpemF0aW9uIGFuZCBtdWx0aS1zdHJva2Uga2V5IGJpbmRpbmdzLiBJdCBjb21waWxlcyBhXG4gIC8vIG5ldyBub3JtYWxpemVkIGtleW1hcCwgYW5kIHRoZW4gdXBkYXRlcyB0aGUgb2xkIG9iamVjdCB0byByZWZsZWN0XG4gIC8vIHRoaXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleU1hcChrZXltYXApIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIGZvciAodmFyIGtleW5hbWUgaW4ga2V5bWFwKSB7IGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGtleW1hcFtrZXluYW1lXTtcbiAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIHsgY29udGludWUgfVxuICAgICAgaWYgKHZhbHVlID09IFwiLi4uXCIpIHsgZGVsZXRlIGtleW1hcFtrZXluYW1lXTsgY29udGludWUgfVxuXG4gICAgICB2YXIga2V5cyA9IG1hcChrZXluYW1lLnNwbGl0KFwiIFwiKSwgbm9ybWFsaXplS2V5TmFtZSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbCA9ICh2b2lkIDApLCBuYW1lID0gKHZvaWQgMCk7XG4gICAgICAgIGlmIChpID09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIHZhbCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiIFwiKTtcbiAgICAgICAgICB2YWwgPSBcIi4uLlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2ID0gY29weVtuYW1lXTtcbiAgICAgICAgaWYgKCFwcmV2KSB7IGNvcHlbbmFtZV0gPSB2YWw7IH1cbiAgICAgICAgZWxzZSBpZiAocHJldiAhPSB2YWwpIHsgdGhyb3cgbmV3IEVycm9yKFwiSW5jb25zaXN0ZW50IGJpbmRpbmdzIGZvciBcIiArIG5hbWUpIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBrZXltYXBba2V5bmFtZV07XG4gICAgfSB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSB7IGtleW1hcFtwcm9wXSA9IGNvcHlbcHJvcF07IH1cbiAgICByZXR1cm4ga2V5bWFwXG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBLZXkoa2V5LCBtYXAsIGhhbmRsZSwgY29udGV4dCkge1xuICAgIG1hcCA9IGdldEtleU1hcChtYXApO1xuICAgIHZhciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldO1xuICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIFwibm90aGluZ1wiIH1cbiAgICBpZiAoZm91bmQgPT09IFwiLi4uXCIpIHsgcmV0dXJuIFwibXVsdGlcIiB9XG4gICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgeyByZXR1cm4gXCJoYW5kbGVkXCIgfVxuXG4gICAgaWYgKG1hcC5mYWxsdGhyb3VnaCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtYXAuZmFsbHRocm91Z2gpICE9IFwiW29iamVjdCBBcnJheV1cIilcbiAgICAgICAgeyByZXR1cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUsIGNvbnRleHQpIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2hbaV0sIGhhbmRsZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdCB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGVcbiAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guXG4gIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkodmFsdWUpIHtcbiAgICB2YXIgbmFtZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXTtcbiAgICByZXR1cm4gbmFtZSA9PSBcIkN0cmxcIiB8fCBuYW1lID09IFwiQWx0XCIgfHwgbmFtZSA9PSBcIlNoaWZ0XCIgfHwgbmFtZSA9PSBcIk1vZFwiXG4gIH1cblxuICBmdW5jdGlvbiBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50LCBub1NoaWZ0KSB7XG4gICAgdmFyIGJhc2UgPSBuYW1lO1xuICAgIGlmIChldmVudC5hbHRLZXkgJiYgYmFzZSAhPSBcIkFsdFwiKSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXkpICYmIGJhc2UgIT0gXCJDdHJsXCIpIHsgbmFtZSA9IFwiQ3RybC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpICYmIGJhc2UgIT0gXCJDbWRcIikgeyBuYW1lID0gXCJDbWQtXCIgKyBuYW1lOyB9XG4gICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGJhc2UgIT0gXCJTaGlmdFwiKSB7IG5hbWUgPSBcIlNoaWZ0LVwiICsgbmFtZTsgfVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBieSBhbiBldmVudCBvYmplY3QuXG4gIGZ1bmN0aW9uIGtleU5hbWUoZXZlbnQsIG5vU2hpZnQpIHtcbiAgICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNvZGUgPT0gMzQgJiYgZXZlbnRbXCJjaGFyXCJdKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlDb2RlXTtcbiAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgLy8gQ3RybC1TY3JvbGxMb2NrIGhhcyBrZXlDb2RlIDMsIHNhbWUgYXMgQ3RybC1QYXVzZSxcbiAgICAvLyBzbyB3ZSdsbCB1c2UgZXZlbnQuY29kZSB3aGVuIGF2YWlsYWJsZSAoQ2hyb21lIDQ4KywgRkYgMzgrLCBTYWZhcmkgMTAuMSspXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMyAmJiBldmVudC5jb2RlKSB7IG5hbWUgPSBldmVudC5jb2RlOyB9XG4gICAgcmV0dXJuIGFkZE1vZGlmaWVyTmFtZXMobmFtZSwgZXZlbnQsIG5vU2hpZnQpXG4gIH1cblxuICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiA/IGtleU1hcFt2YWxdIDogdmFsXG4gIH1cblxuICAvLyBIZWxwZXIgZm9yIGRlbGV0aW5nIHRleHQgbmVhciB0aGUgc2VsZWN0aW9uKHMpLCB1c2VkIHRvIGltcGxlbWVudFxuICAvLyBiYWNrc3BhY2UsIGRlbGV0ZSwgYW5kIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS5cbiAgZnVuY3Rpb24gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgY29tcHV0ZSkge1xuICAgIHZhciByYW5nZXMgPSBjbS5kb2Muc2VsLnJhbmdlcywga2lsbCA9IFtdO1xuICAgIC8vIEJ1aWxkIHVwIGEgc2V0IG9mIHJhbmdlcyB0byBraWxsIGZpcnN0LCBtZXJnaW5nIG92ZXJsYXBwaW5nXG4gICAgLy8gcmFuZ2VzLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9LaWxsID0gY29tcHV0ZShyYW5nZXNbaV0pO1xuICAgICAgd2hpbGUgKGtpbGwubGVuZ3RoICYmIGNtcCh0b0tpbGwuZnJvbSwgbHN0KGtpbGwpLnRvKSA8PSAwKSB7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGtpbGwucG9wKCk7XG4gICAgICAgIGlmIChjbXAocmVwbGFjZWQuZnJvbSwgdG9LaWxsLmZyb20pIDwgMCkge1xuICAgICAgICAgIHRvS2lsbC5mcm9tID0gcmVwbGFjZWQuZnJvbTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBraWxsLnB1c2godG9LaWxsKTtcbiAgICB9XG4gICAgLy8gTmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCByYW5nZXMuXG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGtpbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHsgcmVwbGFjZVJhbmdlKGNtLmRvYywgXCJcIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCBcIitkZWxldGVcIik7IH1cbiAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgY2gsIGRpcikge1xuICAgIHZhciB0YXJnZXQgPSBza2lwRXh0ZW5kaW5nQ2hhcnMobGluZS50ZXh0LCBjaCArIGRpciwgZGlyKTtcbiAgICByZXR1cm4gdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPiBsaW5lLnRleHQubGVuZ3RoID8gbnVsbCA6IHRhcmdldFxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGNoID0gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgc3RhcnQuY2gsIGRpcik7XG4gICAgcmV0dXJuIGNoID09IG51bGwgPyBudWxsIDogbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgZGlyIDwgMCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRPZkxpbmUodmlzdWFsbHksIGNtLCBsaW5lT2JqLCBsaW5lTm8sIGRpcikge1xuICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIikgeyBkaXIgPSAtZGlyOyB9XG4gICAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lT2JqLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICB2YXIgcGFydCA9IGRpciA8IDAgPyBsc3Qob3JkZXIpIDogb3JkZXJbMF07XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSk7XG4gICAgICAgIHZhciBzdGlja3kgPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgICAgICB2YXIgY2g7XG4gICAgICAgIC8vIFdpdGggYSB3cmFwcGVkIHJ0bCBjaHVuayAocG9zc2libHkgc3Bhbm5pbmcgbXVsdGlwbGUgYmlkaSBwYXJ0cyksXG4gICAgICAgIC8vIGl0IGNvdWxkIGJlIHRoYXQgdGhlIGxhc3QgYmlkaSBwYXJ0IGlzIG5vdCBvbiB0aGUgbGFzdCB2aXN1YWwgbGluZSxcbiAgICAgICAgLy8gc2luY2UgdmlzdWFsIGxpbmVzIGNvbnRhaW4gY29udGVudCBvcmRlci1jb25zZWN1dGl2ZSBjaHVua3MuXG4gICAgICAgIC8vIFRodXMsIGluIHJ0bCwgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCAoY29udGVudC1vcmRlcikgY2hhcmFjdGVyXG4gICAgICAgIC8vIGluIHRoZSBydGwgY2h1bmsgdGhhdCBpcyBvbiB0aGUgbGFzdCBsaW5lICh0aGF0IGlzLCB0aGUgc2FtZSBsaW5lXG4gICAgICAgIC8vIGFzIHRoZSBsYXN0IChjb250ZW50LW9yZGVyKSBjaGFyYWN0ZXIpLlxuICAgICAgICBpZiAocGFydC5sZXZlbCA+IDAgfHwgY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiKSB7XG4gICAgICAgICAgdmFyIHByZXAgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopO1xuICAgICAgICAgIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgICB2YXIgdGFyZ2V0VG9wID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcCwgY2gpLnRvcDtcbiAgICAgICAgICBjaCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXAsIGNoKS50b3AgPT0gdGFyZ2V0VG9wOyB9LCAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSkgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMSwgY2gpO1xuICAgICAgICAgIGlmIChzdGlja3kgPT0gXCJiZWZvcmVcIikgeyBjaCA9IG1vdmVDaGFyTG9naWNhbGx5KGxpbmVPYmosIGNoLCAxKTsgfVxuICAgICAgICB9IGVsc2UgeyBjaCA9IGRpciA8IDAgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9XG4gICAgICAgIHJldHVybiBuZXcgUG9zKGxpbmVObywgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQb3MobGluZU5vLCBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDAsIGRpciA8IDAgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKVxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZVZpc3VhbGx5KGNtLCBsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICBpZiAoIWJpZGkpIHsgcmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpcikgfVxuICAgIGlmIChzdGFydC5jaCA+PSBsaW5lLnRleHQubGVuZ3RoKSB7XG4gICAgICBzdGFydC5jaCA9IGxpbmUudGV4dC5sZW5ndGg7XG4gICAgICBzdGFydC5zdGlja3kgPSBcImJlZm9yZVwiO1xuICAgIH0gZWxzZSBpZiAoc3RhcnQuY2ggPD0gMCkge1xuICAgICAgc3RhcnQuY2ggPSAwO1xuICAgICAgc3RhcnQuc3RpY2t5ID0gXCJhZnRlclwiO1xuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQoYmlkaSwgc3RhcnQuY2gsIHN0YXJ0LnN0aWNreSksIHBhcnQgPSBiaWRpW3BhcnRQb3NdO1xuICAgIGlmIChjbS5kb2MuZGlyZWN0aW9uID09IFwibHRyXCIgJiYgcGFydC5sZXZlbCAlIDIgPT0gMCAmJiAoZGlyID4gMCA/IHBhcnQudG8gPiBzdGFydC5jaCA6IHBhcnQuZnJvbSA8IHN0YXJ0LmNoKSkge1xuICAgICAgLy8gQ2FzZSAxOiBXZSBtb3ZlIHdpdGhpbiBhbiBsdHIgcGFydCBpbiBhbiBsdHIgZWRpdG9yLiBFdmVuIHdpdGggd3JhcHBlZCBsaW5lcyxcbiAgICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy5cbiAgICAgIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIpXG4gICAgfVxuXG4gICAgdmFyIG12ID0gZnVuY3Rpb24gKHBvcywgZGlyKSB7IHJldHVybiBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBwb3MgaW5zdGFuY2VvZiBQb3MgPyBwb3MuY2ggOiBwb3MsIGRpcik7IH07XG4gICAgdmFyIHByZXA7XG4gICAgdmFyIGdldFdyYXBwZWRMaW5lRXh0ZW50ID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IHJldHVybiB7YmVnaW46IDAsIGVuZDogbGluZS50ZXh0Lmxlbmd0aH0gfVxuICAgICAgcHJlcCA9IHByZXAgfHwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKTtcbiAgICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudENoYXIoY20sIGxpbmUsIHByZXAsIGNoKVxuICAgIH07XG4gICAgdmFyIHdyYXBwZWRMaW5lRXh0ZW50ID0gZ2V0V3JhcHBlZExpbmVFeHRlbnQoc3RhcnQuc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBtdihzdGFydCwgLTEpIDogc3RhcnQuY2gpO1xuXG4gICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiB8fCBwYXJ0LmxldmVsID09IDEpIHtcbiAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAocGFydC5sZXZlbCA9PSAxKSA9PSAoZGlyIDwgMCk7XG4gICAgICB2YXIgY2ggPSBtdihzdGFydCwgbW92ZUluU3RvcmFnZU9yZGVyID8gMSA6IC0xKTtcbiAgICAgIGlmIChjaCAhPSBudWxsICYmICghbW92ZUluU3RvcmFnZU9yZGVyID8gY2ggPj0gcGFydC5mcm9tICYmIGNoID49IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogY2ggPD0gcGFydC50byAmJiBjaCA8PSB3cmFwcGVkTGluZUV4dGVudC5lbmQpKSB7XG4gICAgICAgIC8vIENhc2UgMjogV2UgbW92ZSB3aXRoaW4gYW4gcnRsIHBhcnQgb3IgaW4gYW4gcnRsIGVkaXRvciBvbiB0aGUgc2FtZSB2aXN1YWwgbGluZVxuICAgICAgICB2YXIgc3RpY2t5ID0gbW92ZUluU3RvcmFnZU9yZGVyID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIjtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDM6IENvdWxkIG5vdCBtb3ZlIHdpdGhpbiB0aGlzIGJpZGkgcGFydCBpbiB0aGlzIHZpc3VhbCBsaW5lLCBzbyBsZWF2ZVxuICAgIC8vIHRoZSBjdXJyZW50IGJpZGkgcGFydFxuXG4gICAgdmFyIHNlYXJjaEluVmlzdWFsTGluZSA9IGZ1bmN0aW9uIChwYXJ0UG9zLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KSB7XG4gICAgICB2YXIgZ2V0UmVzID0gZnVuY3Rpb24gKGNoLCBtb3ZlSW5TdG9yYWdlT3JkZXIpIHsgcmV0dXJuIG1vdmVJblN0b3JhZ2VPcmRlclxuICAgICAgICA/IG5ldyBQb3Moc3RhcnQubGluZSwgbXYoY2gsIDEpLCBcImJlZm9yZVwiKVxuICAgICAgICA6IG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIFwiYWZ0ZXJcIik7IH07XG5cbiAgICAgIGZvciAoOyBwYXJ0UG9zID49IDAgJiYgcGFydFBvcyA8IGJpZGkubGVuZ3RoOyBwYXJ0UG9zICs9IGRpcikge1xuICAgICAgICB2YXIgcGFydCA9IGJpZGlbcGFydFBvc107XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyID4gMCkgPT0gKHBhcnQubGV2ZWwgIT0gMSk7XG4gICAgICAgIHZhciBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogbXYod3JhcHBlZExpbmVFeHRlbnQuZW5kLCAtMSk7XG4gICAgICAgIGlmIChwYXJ0LmZyb20gPD0gY2ggJiYgY2ggPCBwYXJ0LnRvKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgICBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHBhcnQuZnJvbSA6IG12KHBhcnQudG8sIC0xKTtcbiAgICAgICAgaWYgKHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDw9IGNoICYmIGNoIDwgd3JhcHBlZExpbmVFeHRlbnQuZW5kKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDYXNlIDNhOiBMb29rIGZvciBvdGhlciBiaWRpIHBhcnRzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lXG4gICAgdmFyIHJlcyA9IHNlYXJjaEluVmlzdWFsTGluZShwYXJ0UG9zICsgZGlyLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KTtcbiAgICBpZiAocmVzKSB7IHJldHVybiByZXMgfVxuXG4gICAgLy8gQ2FzZSAzYjogTG9vayBmb3Igb3RoZXIgYmlkaSBwYXJ0cyBvbiB0aGUgbmV4dCB2aXN1YWwgbGluZVxuICAgIHZhciBuZXh0Q2ggPSBkaXIgPiAwID8gd3JhcHBlZExpbmVFeHRlbnQuZW5kIDogbXYod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4sIC0xKTtcbiAgICBpZiAobmV4dENoICE9IG51bGwgJiYgIShkaXIgPiAwICYmIG5leHRDaCA9PSBsaW5lLnRleHQubGVuZ3RoKSkge1xuICAgICAgcmVzID0gc2VhcmNoSW5WaXN1YWxMaW5lKGRpciA+IDAgPyAwIDogYmlkaS5sZW5ndGggLSAxLCBkaXIsIGdldFdyYXBwZWRMaW5lRXh0ZW50KG5leHRDaCkpO1xuICAgICAgaWYgKHJlcykgeyByZXR1cm4gcmVzIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDQ6IE5vd2hlcmUgdG8gbW92ZVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxlc3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW5cbiAgLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuXG4gIHZhciBjb21tYW5kcyA9IHtcbiAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcbiAgICBzaW5nbGVTZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcihcImFuY2hvclwiKSwgY20uZ2V0Q3Vyc29yKFwiaGVhZFwiKSwgc2VsX2RvbnRTY3JvbGwpOyB9LFxuICAgIGtpbGxMaW5lOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX0gfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4ge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBQb3MocmFuZ2UuaGVhZC5saW5lLCBsZW4pfSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9XG4gICAgICB9XG4gICAgfSk7IH0sXG4gICAgZGVsZXRlTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuICh7XG4gICAgICBmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLFxuICAgICAgdG86IGNsaXBQb3MoY20uZG9jLCBQb3MocmFuZ2UudG8oKS5saW5lICsgMSwgMCkpXG4gICAgfSk7IH0pOyB9LFxuICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gKHtcbiAgICAgIGZyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKClcbiAgICB9KTsgfSk7IH0sXG4gICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBvcywgdG86IHJhbmdlLmZyb20oKX1cbiAgICB9KTsgfSxcbiAgICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciByaWdodFBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmlnaHRQb3MgfVxuICAgIH0pOyB9LFxuICAgIHVuZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kbygpOyB9LFxuICAgIHJlZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkbygpOyB9LFxuICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kb1NlbGVjdGlvbigpOyB9LFxuICAgIHJlZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkb1NlbGVjdGlvbigpOyB9LFxuICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpOyB9LFxuICAgIGdvRG9jRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpOyB9LFxuICAgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSxcbiAgICAgIHtvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMX1cbiAgICApOyB9LFxuICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOyB9LFxuICAgICAge29yaWdpbjogXCIrbW92ZVwiLCBiaWFzOiAxfVxuICAgICk7IH0sXG4gICAgZ29MaW5lRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVFbmQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sXG4gICAgICB7b3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IC0xfVxuICAgICk7IH0sXG4gICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmN1cnNvckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKVxuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgIHZhciB0b3AgPSBjbS5jdXJzb3JDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpXG4gICAgfSwgc2VsX21vdmUpOyB9LFxuICAgIGdvTGluZUxlZnRTbWFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY3Vyc29yQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIGlmIChwb3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xcUy8pKSB7IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCkgfVxuICAgICAgcmV0dXJuIHBvc1xuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVVcDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigtMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvTGluZURvd246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvUGFnZVVwOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKC0xLCBcInBhZ2VcIik7IH0sXG4gICAgZ29QYWdlRG93bjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCBcInBhZ2VcIik7IH0sXG4gICAgZ29DaGFyTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJjaGFyXCIpOyB9LFxuICAgIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwiY2hhclwiKTsgfSxcbiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsIFwiY29sdW1uXCIpOyB9LFxuICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJjb2x1bW5cIik7IH0sXG4gICAgZ29Xb3JkTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvR3JvdXBMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwid29yZFwiKTsgfSxcbiAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwiY2hhclwiKTsgfSxcbiAgICBkZWxDaGFyQWZ0ZXI6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgxLCBcImNoYXJcIik7IH0sXG4gICAgZGVsV29yZEJlZm9yZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKC0xLCBcIndvcmRcIik7IH0sXG4gICAgZGVsV29yZEFmdGVyOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGRlbEdyb3VwQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwiZ3JvdXBcIik7IH0sXG4gICAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiZ3JvdXBcIik7IH0sXG4gICAgaW5kZW50QXV0bzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5pbmRlbnRTZWxlY3Rpb24oXCJzbWFydFwiKTsgfSxcbiAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTsgfSxcbiAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcInN1YnRyYWN0XCIpOyB9LFxuICAgIGluc2VydFRhYjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXFx0XCIpOyB9LFxuICAgIGluc2VydFNvZnRUYWI6IGZ1bmN0aW9uIChjbSkge1xuICAgICAgdmFyIHNwYWNlcyA9IFtdLCByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5mcm9tKCk7XG4gICAgICAgIHZhciBjb2wgPSBjb3VudENvbHVtbihjbS5nZXRMaW5lKHBvcy5saW5lKSwgcG9zLmNoLCB0YWJTaXplKTtcbiAgICAgICAgc3BhY2VzLnB1c2goc3BhY2VTdHIodGFiU2l6ZSAtIGNvbCAlIHRhYlNpemUpKTtcbiAgICAgIH1cbiAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNwYWNlcyk7XG4gICAgfSxcbiAgICBkZWZhdWx0VGFiOiBmdW5jdGlvbiAoY20pIHtcbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IGNtLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTsgfVxuICAgICAgZWxzZSB7IGNtLmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGFiXCIpOyB9XG4gICAgfSxcbiAgICAvLyBTd2FwIHRoZSB0d28gY2hhcnMgbGVmdCBhbmQgcmlnaHQgb2YgZWFjaCBzZWxlY3Rpb24ncyBoZWFkLlxuICAgIC8vIE1vdmUgY3Vyc29yIGJlaGluZCB0aGUgdHdvIHN3YXBwZWQgY2hhcmFjdGVycyBhZnRlcndhcmRzLlxuICAgIC8vXG4gICAgLy8gRG9lc24ndCBjb25zaWRlciBsaW5lIGZlZWRzIGEgY2hhcmFjdGVyLlxuICAgIC8vIERvZXNuJ3Qgc2NhbiBtb3JlIHRoYW4gb25lIGxpbmUgYWJvdmUgdG8gZmluZCBhIGNoYXJhY3Rlci5cbiAgICAvLyBEb2Vzbid0IGRvIGFueXRoaW5nIG9uIGFuIGVtcHR5IGxpbmUuXG4gICAgLy8gRG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIG5vbi1lbXB0eSBzZWxlY3Rpb25zLlxuICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCBuZXdTZWwgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHsgY29udGludWUgfVxuICAgICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLmhlYWQsIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUpLnRleHQ7XG4gICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgaWYgKGN1ci5jaCA9PSBsaW5lLmxlbmd0aCkgeyBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKTsgfVxuICAgICAgICAgIGlmIChjdXIuY2ggPiAwKSB7XG4gICAgICAgICAgICBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTtcbiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2ggLSAxKSArIGxpbmUuY2hhckF0KGN1ci5jaCAtIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMiksIGN1ciwgXCIrdHJhbnNwb3NlXCIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHtcbiAgICAgICAgICAgIHZhciBwcmV2ID0gZ2V0TGluZShjbS5kb2MsIGN1ci5saW5lIC0gMSkudGV4dDtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIDEpO1xuICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoMCkgKyBjbS5kb2MubGluZVNlcGFyYXRvcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYuY2hhckF0KHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MoY3VyLmxpbmUgLSAxLCBwcmV2Lmxlbmd0aCAtIDEpLCBjdXIsIFwiK3RyYW5zcG9zZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsLnB1c2gobmV3IFJhbmdlKGN1ciwgY3VyKSk7XG4gICAgICB9XG4gICAgICBjbS5zZXRTZWxlY3Rpb25zKG5ld1NlbCk7XG4gICAgfSk7IH0sXG4gICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgICBmb3IgKHZhciBpID0gc2Vscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgeyBjbS5yZXBsYWNlUmFuZ2UoY20uZG9jLmxpbmVTZXBhcmF0b3IoKSwgc2Vsc1tpXS5hbmNob3IsIHNlbHNbaV0uaGVhZCwgXCIraW5wdXRcIik7IH1cbiAgICAgIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2Vscy5sZW5ndGg7IGkkMSsrKVxuICAgICAgICB7IGNtLmluZGVudExpbmUoc2Vsc1tpJDFdLmZyb20oKS5saW5lLCBudWxsLCB0cnVlKTsgfVxuICAgICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7XG4gICAgfSk7IH0sXG4gICAgb3BlbkxpbmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiLCBcInN0YXJ0XCIpOyB9LFxuICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS50b2dnbGVPdmVyd3JpdGUoKTsgfVxuICB9O1xuXG5cbiAgZnVuY3Rpb24gbGluZVN0YXJ0KGNtLCBsaW5lTikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTtcbiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZShsaW5lKTtcbiAgICBpZiAodmlzdWFsICE9IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsgfVxuICAgIHJldHVybiBlbmRPZkxpbmUodHJ1ZSwgY20sIHZpc3VhbCwgbGluZU4sIDEpXG4gIH1cbiAgZnVuY3Rpb24gbGluZUVuZChjbSwgbGluZU4pIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7XG4gICAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmVFbmQobGluZSk7XG4gICAgaWYgKHZpc3VhbCAhPSBsaW5lKSB7IGxpbmVOID0gbGluZU5vKHZpc3VhbCk7IH1cbiAgICByZXR1cm4gZW5kT2ZMaW5lKHRydWUsIGNtLCBsaW5lLCBsaW5lTiwgLTEpXG4gIH1cbiAgZnVuY3Rpb24gbGluZVN0YXJ0U21hcnQoY20sIHBvcykge1xuICAgIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpO1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIHN0YXJ0LmxpbmUpO1xuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkge1xuICAgICAgdmFyIGZpcnN0Tm9uV1MgPSBNYXRoLm1heChzdGFydC5jaCwgbGluZS50ZXh0LnNlYXJjaCgvXFxTLykpO1xuICAgICAgdmFyIGluV1MgPSBwb3MubGluZSA9PSBzdGFydC5saW5lICYmIHBvcy5jaCA8PSBmaXJzdE5vbldTICYmIHBvcy5jaDtcbiAgICAgIHJldHVybiBQb3Moc3RhcnQubGluZSwgaW5XUyA/IDAgOiBmaXJzdE5vbldTLCBzdGFydC5zdGlja3kpXG4gICAgfVxuICAgIHJldHVybiBzdGFydFxuICB9XG5cbiAgLy8gUnVuIGEgaGFuZGxlciB0aGF0IHdhcyBib3VuZCB0byBhIGtleS5cbiAgZnVuY3Rpb24gZG9IYW5kbGVCaW5kaW5nKGNtLCBib3VuZCwgZHJvcFNoaWZ0KSB7XG4gICAgaWYgKHR5cGVvZiBib3VuZCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTtcbiAgICAgIGlmICghYm91bmQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgLy8gRW5zdXJlIHByZXZpb3VzIGlucHV0IGhhcyBiZWVuIHJlYWQsIHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBhXG4gICAgLy8gY29uc2lzdGVudCB2aWV3IG9mIHRoZSBkb2N1bWVudFxuICAgIGNtLmRpc3BsYXkuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgdmFyIHByZXZTaGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKGNtLmlzUmVhZE9ubHkoKSkgeyBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsgfVxuICAgICAgaWYgKGRyb3BTaGlmdCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH1cbiAgICAgIGRvbmUgPSBib3VuZChjbSkgIT0gUGFzcztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY20uZGlzcGxheS5zaGlmdCA9IHByZXZTaGlmdDtcbiAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5zdGF0ZS5rZXlNYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9va3VwS2V5KG5hbWUsIGNtLnN0YXRlLmtleU1hcHNbaV0sIGhhbmRsZSwgY20pO1xuICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0IH1cbiAgICB9XG4gICAgcmV0dXJuIChjbS5vcHRpb25zLmV4dHJhS2V5cyAmJiBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5leHRyYUtleXMsIGhhbmRsZSwgY20pKVxuICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMua2V5TWFwLCBoYW5kbGUsIGNtKVxuICB9XG5cbiAgLy8gTm90ZSB0aGF0LCBkZXNwaXRlIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB0byBjaGVja1xuICAvLyBmb3IgYm91bmQgbW91c2UgY2xpY2tzLlxuXG4gIHZhciBzdG9wU2VxID0gbmV3IERlbGF5ZWQ7XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGhhbmRsZSkge1xuICAgIHZhciBzZXEgPSBjbS5zdGF0ZS5rZXlTZXE7XG4gICAgaWYgKHNlcSkge1xuICAgICAgaWYgKGlzTW9kaWZpZXJLZXkobmFtZSkpIHsgcmV0dXJuIFwiaGFuZGxlZFwiIH1cbiAgICAgIGlmICgvXFwnJC8udGVzdChuYW1lKSlcbiAgICAgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgc3RvcFNlcS5zZXQoNTAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY20uc3RhdGUua2V5U2VxID09IHNlcSkge1xuICAgICAgICAgICAgY20uc3RhdGUua2V5U2VxID0gbnVsbDtcbiAgICAgICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyB9XG4gICAgICBpZiAoZGlzcGF0Y2hLZXlJbm5lcihjbSwgc2VxICsgXCIgXCIgKyBuYW1lLCBlLCBoYW5kbGUpKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5SW5uZXIoY20sIG5hbWUsIGUsIGhhbmRsZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoS2V5SW5uZXIoY20sIG5hbWUsIGUsIGhhbmRsZSkge1xuICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXlGb3JFZGl0b3IoY20sIG5hbWUsIGhhbmRsZSk7XG5cbiAgICBpZiAocmVzdWx0ID09IFwibXVsdGlcIilcbiAgICAgIHsgY20uc3RhdGUua2V5U2VxID0gbmFtZTsgfVxuICAgIGlmIChyZXN1bHQgPT0gXCJoYW5kbGVkXCIpXG4gICAgICB7IHNpZ25hbExhdGVyKGNtLCBcImtleUhhbmRsZWRcIiwgY20sIG5hbWUsIGUpOyB9XG5cbiAgICBpZiAocmVzdWx0ID09IFwiaGFuZGxlZFwiIHx8IHJlc3VsdCA9PSBcIm11bHRpXCIpIHtcbiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICByZXN0YXJ0QmxpbmsoY20pO1xuICAgIH1cblxuICAgIHJldHVybiAhIXJlc3VsdFxuICB9XG5cbiAgLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpIHtcbiAgICB2YXIgbmFtZSA9IGtleU5hbWUoZSwgdHJ1ZSk7XG4gICAgaWYgKCFuYW1lKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgICBpZiAoZS5zaGlmdEtleSAmJiAhY20uc3RhdGUua2V5U2VxKSB7XG4gICAgICAvLyBGaXJzdCB0cnkgdG8gcmVzb2x2ZSBmdWxsIG5hbWUgKGluY2x1ZGluZyAnU2hpZnQtJykuIEZhaWxpbmdcbiAgICAgIC8vIHRoYXQsIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnNvci1tb3Rpb24gY29tbWFuZCAoc3RhcnRpbmcgd2l0aFxuICAgICAgLy8gJ2dvJykgYm91bmQgdG8gdGhlIGtleW5hbWUgd2l0aG91dCAnU2hpZnQtJy5cbiAgICAgIHJldHVybiBkaXNwYXRjaEtleShjbSwgXCJTaGlmdC1cIiArIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KVxuICAgICAgICAgIHx8IGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiID09IFwic3RyaW5nXCIgPyAvXmdvW0EtWl0vLnRlc3QoYikgOiBiLm1vdGlvbilcbiAgICAgICAgICAgICAgICAgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKSB9XG4gICAgICAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbiAoYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiKTsgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgYSBrZXkgZnJvbSB0aGUga2V5cHJlc3MgZXZlbnRcbiAgZnVuY3Rpb24gaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBcIidcIiArIGNoICsgXCInXCIsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIsIHRydWUpOyB9KVxuICB9XG5cbiAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDtcbiAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzO1xuICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTtcbiAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpO1xuICAgIGlmIChwcmVzdG8pIHtcbiAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsO1xuICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ib1xuICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAmJiAobWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSlcbiAgICAgICAgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgfVxuICAgIGlmIChnZWNrbyAmJiAhbWFjICYmICFoYW5kbGVkICYmIGNvZGUgPT0gNDYgJiYgZS5zaGlmdEtleSAmJiAhZS5jdHJsS2V5ICYmIGRvY3VtZW50LmV4ZWNDb21tYW5kKVxuICAgICAgeyBkb2N1bWVudC5leGVjQ29tbWFuZChcImN1dFwiKTsgfVxuXG4gICAgLy8gVHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVuIEFsdCBpcyBoZWxkIG9uIE1hYy5cbiAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xcYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXFxiLy50ZXN0KGNtLmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpKVxuICAgICAgeyBzaG93Q3Jvc3NIYWlyKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkge1xuICAgIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2O1xuICAgIGFkZENsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG5cbiAgICBmdW5jdGlvbiB1cChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09IDE4IHx8ICFlLmFsdEtleSkge1xuICAgICAgICBybUNsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJtb3VzZW92ZXJcIiwgdXApO1xuICAgICAgfVxuICAgIH1cbiAgICBvbihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2VvdmVyXCIsIHVwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIHsgdGhpcy5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7IH1cbiAgICBzaWduYWxET01FdmVudCh0aGlzLCBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkge1xuICAgIHZhciBjbSA9IHRoaXM7XG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGUuY3RybEtleSAmJiAhZS5hbHRLZXkgfHwgbWFjICYmIGUubWV0YUtleSkgeyByZXR1cm4gfVxuICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlLCBjaGFyQ29kZSA9IGUuY2hhckNvZGU7XG4gICAgaWYgKHByZXN0byAmJiBrZXlDb2RlID09IGxhc3RTdG9wcGVkS2V5KSB7bGFzdFN0b3BwZWRLZXkgPSBudWxsOyBlX3ByZXZlbnREZWZhdWx0KGUpOyByZXR1cm59XG4gICAgaWYgKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSB7IHJldHVybiB9XG4gICAgdmFyIGNoID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA9PSBudWxsID8ga2V5Q29kZSA6IGNoYXJDb2RlKTtcbiAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUga2V5cHJlc3MgZXZlbnRzIGZvciBiYWNrc3BhY2VcbiAgICBpZiAoY2ggPT0gXCJcXHgwOFwiKSB7IHJldHVybiB9XG4gICAgaWYgKGhhbmRsZUNoYXJCaW5kaW5nKGNtLCBlLCBjaCkpIHsgcmV0dXJuIH1cbiAgICBjbS5kaXNwbGF5LmlucHV0Lm9uS2V5UHJlc3MoZSk7XG4gIH1cblxuICB2YXIgRE9VQkxFQ0xJQ0tfREVMQVkgPSA0MDA7XG5cbiAgdmFyIFBhc3RDbGljayA9IGZ1bmN0aW9uKHRpbWUsIHBvcywgYnV0dG9uKSB7XG4gICAgdGhpcy50aW1lID0gdGltZTtcbiAgICB0aGlzLnBvcyA9IHBvcztcbiAgICB0aGlzLmJ1dHRvbiA9IGJ1dHRvbjtcbiAgfTtcblxuICBQYXN0Q2xpY2sucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAodGltZSwgcG9zLCBidXR0b24pIHtcbiAgICByZXR1cm4gdGhpcy50aW1lICsgRE9VQkxFQ0xJQ0tfREVMQVkgPiB0aW1lICYmXG4gICAgICBjbXAocG9zLCB0aGlzLnBvcykgPT0gMCAmJiBidXR0b24gPT0gdGhpcy5idXR0b25cbiAgfTtcblxuICB2YXIgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2s7XG4gIGZ1bmN0aW9uIGNsaWNrUmVwZWF0KHBvcywgYnV0dG9uKSB7XG4gICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTtcbiAgICBpZiAobGFzdERvdWJsZUNsaWNrICYmIGxhc3REb3VibGVDbGljay5jb21wYXJlKG5vdywgcG9zLCBidXR0b24pKSB7XG4gICAgICBsYXN0Q2xpY2sgPSBsYXN0RG91YmxlQ2xpY2sgPSBudWxsO1xuICAgICAgcmV0dXJuIFwidHJpcGxlXCJcbiAgICB9IGVsc2UgaWYgKGxhc3RDbGljayAmJiBsYXN0Q2xpY2suY29tcGFyZShub3csIHBvcywgYnV0dG9uKSkge1xuICAgICAgbGFzdERvdWJsZUNsaWNrID0gbmV3IFBhc3RDbGljayhub3csIHBvcywgYnV0dG9uKTtcbiAgICAgIGxhc3RDbGljayA9IG51bGw7XG4gICAgICByZXR1cm4gXCJkb3VibGVcIlxuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0Q2xpY2sgPSBuZXcgUGFzdENsaWNrKG5vdywgcG9zLCBidXR0b24pO1xuICAgICAgbGFzdERvdWJsZUNsaWNrID0gbnVsbDtcbiAgICAgIHJldHVybiBcInNpbmdsZVwiXG4gICAgfVxuICB9XG5cbiAgLy8gQSBtb3VzZSBkb3duIGNhbiBiZSBhIHNpbmdsZSBjbGljaywgZG91YmxlIGNsaWNrLCB0cmlwbGUgY2xpY2ssXG4gIC8vIHN0YXJ0IG9mIHNlbGVjdGlvbiBkcmFnLCBzdGFydCBvZiB0ZXh0IGRyYWcsIG5ldyBjdXJzb3JcbiAgLy8gKGN0cmwtY2xpY2spLCByZWN0YW5nbGUgZHJhZyAoYWx0LWRyYWcpLCBvciB4d2luXG4gIC8vIG1pZGRsZS1jbGljay1wYXN0ZS4gT3IgaXQgbWlnaHQgYmUgYSBjbGljayBvbiBzb21ldGhpbmcgd2Ugc2hvdWxkXG4gIC8vIG5vdCBpbnRlcmZlcmUgd2l0aCwgc3VjaCBhcyBhIHNjcm9sbGJhciBvciB3aWRnZXQuXG4gIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGRpc3BsYXkuYWN0aXZlVG91Y2ggJiYgZGlzcGxheS5pbnB1dC5zdXBwb3J0c1RvdWNoKCkpIHsgcmV0dXJuIH1cbiAgICBkaXNwbGF5LmlucHV0LmVuc3VyZVBvbGxlZCgpO1xuICAgIGRpc3BsYXkuc2hpZnQgPSBlLnNoaWZ0S2V5O1xuXG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHtcbiAgICAgIGlmICghd2Via2l0KSB7XG4gICAgICAgIC8vIEJyaWVmbHkgdHVybiBvZmYgZHJhZ2dhYmlsaXR5LCB0byBhbGxvdyB3aWRnZXRzIHRvIGRvXG4gICAgICAgIC8vIG5vcm1hbCBkcmFnZ2luZyB0aGluZ3MuXG4gICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9LCAxMDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjbGlja0luR3V0dGVyKGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpLCBidXR0b24gPSBlX2J1dHRvbihlKSwgcmVwZWF0ID0gcG9zID8gY2xpY2tSZXBlYXQocG9zLCBidXR0b24pIDogXCJzaW5nbGVcIjtcbiAgICB3aW5kb3cuZm9jdXMoKTtcblxuICAgIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUgbm90IHN0YXJ0aW5nIGEgc2Vjb25kIHNlbGVjdGlvblxuICAgIGlmIChidXR0b24gPT0gMSAmJiBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KVxuICAgICAgeyBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0KGUpOyB9XG5cbiAgICBpZiAocG9zICYmIGhhbmRsZU1hcHBlZEJ1dHRvbihjbSwgYnV0dG9uLCBwb3MsIHJlcGVhdCwgZSkpIHsgcmV0dXJuIH1cblxuICAgIGlmIChidXR0b24gPT0gMSkge1xuICAgICAgaWYgKHBvcykgeyBsZWZ0QnV0dG9uRG93bihjbSwgcG9zLCByZXBlYXQsIGUpOyB9XG4gICAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICB9IGVsc2UgaWYgKGJ1dHRvbiA9PSAyKSB7XG4gICAgICBpZiAocG9zKSB7IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHBvcyk7IH1cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCk7XG4gICAgfSBlbHNlIGlmIChidXR0b24gPT0gMykge1xuICAgICAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7IGNtLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKTsgfVxuICAgICAgZWxzZSB7IGRlbGF5Qmx1ckV2ZW50KGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZU1hcHBlZEJ1dHRvbihjbSwgYnV0dG9uLCBwb3MsIHJlcGVhdCwgZXZlbnQpIHtcbiAgICB2YXIgbmFtZSA9IFwiQ2xpY2tcIjtcbiAgICBpZiAocmVwZWF0ID09IFwiZG91YmxlXCIpIHsgbmFtZSA9IFwiRG91YmxlXCIgKyBuYW1lOyB9XG4gICAgZWxzZSBpZiAocmVwZWF0ID09IFwidHJpcGxlXCIpIHsgbmFtZSA9IFwiVHJpcGxlXCIgKyBuYW1lOyB9XG4gICAgbmFtZSA9IChidXR0b24gPT0gMSA/IFwiTGVmdFwiIDogYnV0dG9uID09IDIgPyBcIk1pZGRsZVwiIDogXCJSaWdodFwiKSArIG5hbWU7XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sICBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50KSwgZXZlbnQsIGZ1bmN0aW9uIChib3VuZCkge1xuICAgICAgaWYgKHR5cGVvZiBib3VuZCA9PSBcInN0cmluZ1wiKSB7IGJvdW5kID0gY29tbWFuZHNbYm91bmRdOyB9XG4gICAgICBpZiAoIWJvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNtLmlzUmVhZE9ubHkoKSkgeyBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsgfVxuICAgICAgICBkb25lID0gYm91bmQoY20sIHBvcykgIT0gUGFzcztcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb25lXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZU1vdXNlKGNtLCByZXBlYXQsIGV2ZW50KSB7XG4gICAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIpO1xuICAgIHZhciB2YWx1ZSA9IG9wdGlvbiA/IG9wdGlvbihjbSwgcmVwZWF0LCBldmVudCkgOiB7fTtcbiAgICBpZiAodmFsdWUudW5pdCA9PSBudWxsKSB7XG4gICAgICB2YXIgcmVjdCA9IGNocm9tZU9TID8gZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQubWV0YUtleSA6IGV2ZW50LmFsdEtleTtcbiAgICAgIHZhbHVlLnVuaXQgPSByZWN0ID8gXCJyZWN0YW5nbGVcIiA6IHJlcGVhdCA9PSBcInNpbmdsZVwiID8gXCJjaGFyXCIgOiByZXBlYXQgPT0gXCJkb3VibGVcIiA/IFwid29yZFwiIDogXCJsaW5lXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5leHRlbmQgPT0gbnVsbCB8fCBjbS5kb2MuZXh0ZW5kKSB7IHZhbHVlLmV4dGVuZCA9IGNtLmRvYy5leHRlbmQgfHwgZXZlbnQuc2hpZnRLZXk7IH1cbiAgICBpZiAodmFsdWUuYWRkTmV3ID09IG51bGwpIHsgdmFsdWUuYWRkTmV3ID0gbWFjID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXk7IH1cbiAgICBpZiAodmFsdWUubW92ZU9uRHJhZyA9PSBudWxsKSB7IHZhbHVlLm1vdmVPbkRyYWcgPSAhKG1hYyA/IGV2ZW50LmFsdEtleSA6IGV2ZW50LmN0cmxLZXkpOyB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0QnV0dG9uRG93bihjbSwgcG9zLCByZXBlYXQsIGV2ZW50KSB7XG4gICAgaWYgKGllKSB7IHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsgfVxuICAgIGVsc2UgeyBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpOyB9XG5cbiAgICB2YXIgYmVoYXZpb3IgPSBjb25maWd1cmVNb3VzZShjbSwgcmVwZWF0LCBldmVudCk7XG5cbiAgICB2YXIgc2VsID0gY20uZG9jLnNlbCwgY29udGFpbmVkO1xuICAgIGlmIChjbS5vcHRpb25zLmRyYWdEcm9wICYmIGRyYWdBbmREcm9wICYmICFjbS5pc1JlYWRPbmx5KCkgJiZcbiAgICAgICAgcmVwZWF0ID09IFwic2luZ2xlXCIgJiYgKGNvbnRhaW5lZCA9IHNlbC5jb250YWlucyhwb3MpKSA+IC0xICYmXG4gICAgICAgIChjbXAoKGNvbnRhaW5lZCA9IHNlbC5yYW5nZXNbY29udGFpbmVkXSkuZnJvbSgpLCBwb3MpIDwgMCB8fCBwb3MueFJlbCA+IDApICYmXG4gICAgICAgIChjbXAoY29udGFpbmVkLnRvKCksIHBvcykgPiAwIHx8IHBvcy54UmVsIDwgMCkpXG4gICAgICB7IGxlZnRCdXR0b25TdGFydERyYWcoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgbGVmdEJ1dHRvblNlbGVjdChjbSwgZXZlbnQsIHBvcywgYmVoYXZpb3IpOyB9XG4gIH1cblxuICAvLyBTdGFydCBhIHRleHQgZHJhZy4gV2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5XG4gIC8vIGhhcHBlbiwgYW5kIHRyZWF0IGFzIGEgY2xpY2sgaWYgaXQgZGlkbid0LlxuICBmdW5jdGlvbiBsZWZ0QnV0dG9uU3RhcnREcmFnKGNtLCBldmVudCwgcG9zLCBiZWhhdmlvcikge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbW92ZWQgPSBmYWxzZTtcbiAgICB2YXIgZHJhZ0VuZCA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICh3ZWJraXQpIHsgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSBmYWxzZTsgfVxuICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFsc2U7XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCBkcmFnRW5kKTtcbiAgICAgIG9mZihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW91c2VNb3ZlKTtcbiAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBkcmFnU3RhcnQpO1xuICAgICAgb2ZmKGRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJvcFwiLCBkcmFnRW5kKTtcbiAgICAgIGlmICghbW92ZWQpIHtcbiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgaWYgKCFiZWhhdmlvci5hZGROZXcpXG4gICAgICAgICAgeyBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBwb3MsIG51bGwsIG51bGwsIGJlaGF2aW9yLmV4dGVuZCk7IH1cbiAgICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKVxuICAgICAgICBpZiAod2Via2l0IHx8IGllICYmIGllX3ZlcnNpb24gPT0gOSlcbiAgICAgICAgICB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge2Rpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmJvZHkuZm9jdXMoKTsgZGlzcGxheS5pbnB1dC5mb2N1cygpO30sIDIwKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB2YXIgbW91c2VNb3ZlID0gZnVuY3Rpb24oZTIpIHtcbiAgICAgIG1vdmVkID0gbW92ZWQgfHwgTWF0aC5hYnMoZXZlbnQuY2xpZW50WCAtIGUyLmNsaWVudFgpICsgTWF0aC5hYnMoZXZlbnQuY2xpZW50WSAtIGUyLmNsaWVudFkpID49IDEwO1xuICAgIH07XG4gICAgdmFyIGRyYWdTdGFydCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1vdmVkID0gdHJ1ZTsgfTtcbiAgICAvLyBMZXQgdGhlIGRyYWcgaGFuZGxlciBoYW5kbGUgdGhpcy5cbiAgICBpZiAod2Via2l0KSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsgfVxuICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGRyYWdFbmQ7XG4gICAgZHJhZ0VuZC5jb3B5ID0gIWJlaGF2aW9yLm1vdmVPbkRyYWc7XG4gICAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGVcbiAgICBpZiAoZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCkgeyBkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKCk7IH1cbiAgICBvbihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZXVwXCIsIGRyYWdFbmQpO1xuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3VzZU1vdmUpO1xuICAgIG9uKGRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGRyYWdTdGFydCk7XG4gICAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJkcm9wXCIsIGRyYWdFbmQpO1xuXG4gICAgZGVsYXlCbHVyRXZlbnQoY20pO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCk7XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZUZvclVuaXQoY20sIHBvcywgdW5pdCkge1xuICAgIGlmICh1bml0ID09IFwiY2hhclwiKSB7IHJldHVybiBuZXcgUmFuZ2UocG9zLCBwb3MpIH1cbiAgICBpZiAodW5pdCA9PSBcIndvcmRcIikgeyByZXR1cm4gY20uZmluZFdvcmRBdChwb3MpIH1cbiAgICBpZiAodW5pdCA9PSBcImxpbmVcIikgeyByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpIH1cbiAgICB2YXIgcmVzdWx0ID0gdW5pdChjbSwgcG9zKTtcbiAgICByZXR1cm4gbmV3IFJhbmdlKHJlc3VsdC5mcm9tLCByZXN1bHQudG8pXG4gIH1cblxuICAvLyBOb3JtYWwgc2VsZWN0aW9uLCBhcyBvcHBvc2VkIHRvIHRleHQgZHJhZ2dpbmcuXG4gIGZ1bmN0aW9uIGxlZnRCdXR0b25TZWxlY3QoY20sIGV2ZW50LCBzdGFydCwgYmVoYXZpb3IpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICBlX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgIHZhciBvdXJSYW5nZSwgb3VySW5kZXgsIHN0YXJ0U2VsID0gZG9jLnNlbCwgcmFuZ2VzID0gc3RhcnRTZWwucmFuZ2VzO1xuICAgIGlmIChiZWhhdmlvci5hZGROZXcgJiYgIWJlaGF2aW9yLmV4dGVuZCkge1xuICAgICAgb3VySW5kZXggPSBkb2Muc2VsLmNvbnRhaW5zKHN0YXJ0KTtcbiAgICAgIGlmIChvdXJJbmRleCA+IC0xKVxuICAgICAgICB7IG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IG91clJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBzdGFydCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3VyUmFuZ2UgPSBkb2Muc2VsLnByaW1hcnkoKTtcbiAgICAgIG91ckluZGV4ID0gZG9jLnNlbC5wcmltSW5kZXg7XG4gICAgfVxuXG4gICAgaWYgKGJlaGF2aW9yLnVuaXQgPT0gXCJyZWN0YW5nbGVcIikge1xuICAgICAgaWYgKCFiZWhhdmlvci5hZGROZXcpIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsgfVxuICAgICAgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICAgIG91ckluZGV4ID0gLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByYW5nZSA9IHJhbmdlRm9yVW5pdChjbSwgc3RhcnQsIGJlaGF2aW9yLnVuaXQpO1xuICAgICAgaWYgKGJlaGF2aW9yLmV4dGVuZClcbiAgICAgICAgeyBvdXJSYW5nZSA9IGV4dGVuZFJhbmdlKG91clJhbmdlLCByYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQsIGJlaGF2aW9yLmV4dGVuZCk7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBvdXJSYW5nZSA9IHJhbmdlOyB9XG4gICAgfVxuXG4gICAgaWYgKCFiZWhhdmlvci5hZGROZXcpIHtcbiAgICAgIG91ckluZGV4ID0gMDtcbiAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW291clJhbmdlXSwgMCksIHNlbF9tb3VzZSk7XG4gICAgICBzdGFydFNlbCA9IGRvYy5zZWw7XG4gICAgfSBlbHNlIGlmIChvdXJJbmRleCA9PSAtMSkge1xuICAgICAgb3VySW5kZXggPSByYW5nZXMubGVuZ3RoO1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMuY29uY2F0KFtvdXJSYW5nZV0pLCBvdXJJbmRleCksXG4gICAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICAgIH0gZWxzZSBpZiAocmFuZ2VzLmxlbmd0aCA+IDEgJiYgcmFuZ2VzW291ckluZGV4XS5lbXB0eSgpICYmIGJlaGF2aW9yLnVuaXQgPT0gXCJjaGFyXCIgJiYgIWJlaGF2aW9yLmV4dGVuZCkge1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMuc2xpY2Uob3VySW5kZXggKyAxKSksIDApLFxuICAgICAgICAgICAgICAgICAgIHtzY3JvbGw6IGZhbHNlLCBvcmlnaW46IFwiKm1vdXNlXCJ9KTtcbiAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIG91ckluZGV4LCBvdXJSYW5nZSwgc2VsX21vdXNlKTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdFBvcyA9IHN0YXJ0O1xuICAgIGZ1bmN0aW9uIGV4dGVuZFRvKHBvcykge1xuICAgICAgaWYgKGNtcChsYXN0UG9zLCBwb3MpID09IDApIHsgcmV0dXJuIH1cbiAgICAgIGxhc3RQb3MgPSBwb3M7XG5cbiAgICAgIGlmIChiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IFtdLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgICAgICB2YXIgc3RhcnRDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgc3RhcnQubGluZSkudGV4dCwgc3RhcnQuY2gsIHRhYlNpemUpO1xuICAgICAgICB2YXIgcG9zQ29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0LCBwb3MuY2gsIHRhYlNpemUpO1xuICAgICAgICB2YXIgbGVmdCA9IE1hdGgubWluKHN0YXJ0Q29sLCBwb3NDb2wpLCByaWdodCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBwb3NDb2wpO1xuICAgICAgICBmb3IgKHZhciBsaW5lID0gTWF0aC5taW4oc3RhcnQubGluZSwgcG9zLmxpbmUpLCBlbmQgPSBNYXRoLm1pbihjbS5sYXN0TGluZSgpLCBNYXRoLm1heChzdGFydC5saW5lLCBwb3MubGluZSkpO1xuICAgICAgICAgICAgIGxpbmUgPD0gZW5kOyBsaW5lKyspIHtcbiAgICAgICAgICB2YXIgdGV4dCA9IGdldExpbmUoZG9jLCBsaW5lKS50ZXh0LCBsZWZ0UG9zID0gZmluZENvbHVtbih0ZXh0LCBsZWZ0LCB0YWJTaXplKTtcbiAgICAgICAgICBpZiAobGVmdCA9PSByaWdodClcbiAgICAgICAgICAgIHsgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwgUG9zKGxpbmUsIGxlZnRQb3MpKSk7IH1cbiAgICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpXG4gICAgICAgICAgICB7IHJhbmdlcy5wdXNoKG5ldyBSYW5nZShQb3MobGluZSwgbGVmdFBvcyksIFBvcyhsaW5lLCBmaW5kQ29sdW1uKHRleHQsIHJpZ2h0LCB0YWJTaXplKSkpKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSk7IH1cbiAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCBzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksXG4gICAgICAgICAgICAgICAgICAgICB7b3JpZ2luOiBcIiptb3VzZVwiLCBzY3JvbGw6IGZhbHNlfSk7XG4gICAgICAgIGNtLnNjcm9sbEludG9WaWV3KHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2xkUmFuZ2UgPSBvdXJSYW5nZTtcbiAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VGb3JVbml0KGNtLCBwb3MsIGJlaGF2aW9yLnVuaXQpO1xuICAgICAgICB2YXIgYW5jaG9yID0gb2xkUmFuZ2UuYW5jaG9yLCBoZWFkO1xuICAgICAgICBpZiAoY21wKHJhbmdlLmFuY2hvciwgYW5jaG9yKSA+IDApIHtcbiAgICAgICAgICBoZWFkID0gcmFuZ2UuaGVhZDtcbiAgICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCByYW5nZS5hbmNob3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWQgPSByYW5nZS5hbmNob3I7XG4gICAgICAgICAgYW5jaG9yID0gbWF4UG9zKG9sZFJhbmdlLnRvKCksIHJhbmdlLmhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByYW5nZXMkMSA9IHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICAgICAgcmFuZ2VzJDFbb3VySW5kZXhdID0gYmlkaVNpbXBsaWZ5KGNtLCBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIGFuY2hvciksIGhlYWQpKTtcbiAgICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKGNtLCByYW5nZXMkMSwgb3VySW5kZXgpLCBzZWxfbW91c2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vIFVzZWQgdG8gZW5zdXJlIHRpbWVvdXQgcmUtdHJpZXMgZG9uJ3QgZmlyZSB3aGVuIGFub3RoZXIgZXh0ZW5kXG4gICAgLy8gaGFwcGVuZWQgaW4gdGhlIG1lYW50aW1lIChjbGVhclRpbWVvdXQgaXNuJ3QgcmVsaWFibGUgLS0gYXRcbiAgICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFyZWQsXG4gICAgLy8gaWYgdGhlIGNsZWFyIGhhcHBlbnMgYWZ0ZXIgdGhlaXIgc2NoZWR1bGVkIGZpcmluZyB0aW1lKS5cbiAgICB2YXIgY291bnRlciA9IDA7XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoZSkge1xuICAgICAgdmFyIGN1ckNvdW50ID0gKytjb3VudGVyO1xuICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSwgYmVoYXZpb3IudW5pdCA9PSBcInJlY3RhbmdsZVwiKTtcbiAgICAgIGlmICghY3VyKSB7IHJldHVybiB9XG4gICAgICBpZiAoY21wKGN1ciwgbGFzdFBvcykgIT0gMCkge1xuICAgICAgICBjbS5jdXJPcC5mb2N1cyA9IGFjdGl2ZUVsdCgpO1xuICAgICAgICBleHRlbmRUbyhjdXIpO1xuICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MpO1xuICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIubGluZSA8IHZpc2libGUuZnJvbSlcbiAgICAgICAgICB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7aWYgKGNvdW50ZXIgPT0gY3VyQ291bnQpIHsgZXh0ZW5kKGUpOyB9fSksIDE1MCk7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvdXRzaWRlID0gZS5jbGllbnRZIDwgZWRpdG9yU2l6ZS50b3AgPyAtMjAgOiBlLmNsaWVudFkgPiBlZGl0b3JTaXplLmJvdHRvbSA/IDIwIDogMDtcbiAgICAgICAgaWYgKG91dHNpZGUpIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY291bnRlciAhPSBjdXJDb3VudCkgeyByZXR1cm4gfVxuICAgICAgICAgIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICs9IG91dHNpZGU7XG4gICAgICAgICAgZXh0ZW5kKGUpO1xuICAgICAgICB9KSwgNTApOyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZG9uZShlKSB7XG4gICAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gZmFsc2U7XG4gICAgICBjb3VudGVyID0gSW5maW5pdHk7XG4gICAgICAvLyBJZiBlIGlzIG51bGwgb3IgdW5kZWZpbmVkIHdlIGludGVycHJldCB0aGlzIGFzIHNvbWVvbmUgdHJ5aW5nXG4gICAgICAvLyB0byBleHBsaWNpdGx5IGNhbmNlbCB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIHRoZSB1c2VyXG4gICAgICAvLyBsZXR0aW5nIGdvIG9mIHRoZSBtb3VzZSBidXR0b24uXG4gICAgICBpZiAoZSkge1xuICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdmUpO1xuICAgICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgdXApO1xuICAgICAgZG9jLmhpc3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG1vdmUgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5idXR0b25zID09PSAwIHx8ICFlX2J1dHRvbihlKSkgeyBkb25lKGUpOyB9XG4gICAgICBlbHNlIHsgZXh0ZW5kKGUpOyB9XG4gICAgfSk7XG4gICAgdmFyIHVwID0gb3BlcmF0aW9uKGNtLCBkb25lKTtcbiAgICBjbS5zdGF0ZS5zZWxlY3RpbmdUZXh0ID0gdXA7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdmUpO1xuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgdXApO1xuICB9XG5cbiAgLy8gVXNlZCB3aGVuIG1vdXNlLXNlbGVjdGluZyB0byBhZGp1c3QgdGhlIGFuY2hvciB0byB0aGUgcHJvcGVyIHNpZGVcbiAgLy8gb2YgYSBiaWRpIGp1bXAgZGVwZW5kaW5nIG9uIHRoZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIGhlYWQuXG4gIGZ1bmN0aW9uIGJpZGlTaW1wbGlmeShjbSwgcmFuZ2UpIHtcbiAgICB2YXIgYW5jaG9yID0gcmFuZ2UuYW5jaG9yO1xuICAgIHZhciBoZWFkID0gcmFuZ2UuaGVhZDtcbiAgICB2YXIgYW5jaG9yTGluZSA9IGdldExpbmUoY20uZG9jLCBhbmNob3IubGluZSk7XG4gICAgaWYgKGNtcChhbmNob3IsIGhlYWQpID09IDAgJiYgYW5jaG9yLnN0aWNreSA9PSBoZWFkLnN0aWNreSkgeyByZXR1cm4gcmFuZ2UgfVxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGFuY2hvckxpbmUpO1xuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIHJhbmdlIH1cbiAgICB2YXIgaW5kZXggPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBhbmNob3IuY2gsIGFuY2hvci5zdGlja3kpLCBwYXJ0ID0gb3JkZXJbaW5kZXhdO1xuICAgIGlmIChwYXJ0LmZyb20gIT0gYW5jaG9yLmNoICYmIHBhcnQudG8gIT0gYW5jaG9yLmNoKSB7IHJldHVybiByYW5nZSB9XG4gICAgdmFyIGJvdW5kYXJ5ID0gaW5kZXggKyAoKHBhcnQuZnJvbSA9PSBhbmNob3IuY2gpID09IChwYXJ0LmxldmVsICE9IDEpID8gMCA6IDEpO1xuICAgIGlmIChib3VuZGFyeSA9PSAwIHx8IGJvdW5kYXJ5ID09IG9yZGVyLmxlbmd0aCkgeyByZXR1cm4gcmFuZ2UgfVxuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcmVsYXRpdmUgdmlzdWFsIHBvc2l0aW9uIG9mIHRoZSBoZWFkIGNvbXBhcmVkIHRvIHRoZVxuICAgIC8vIGFuY2hvciAoPDAgaXMgdG8gdGhlIGxlZnQsID4wIHRvIHRoZSByaWdodClcbiAgICB2YXIgbGVmdFNpZGU7XG4gICAgaWYgKGhlYWQubGluZSAhPSBhbmNob3IubGluZSkge1xuICAgICAgbGVmdFNpZGUgPSAoaGVhZC5saW5lIC0gYW5jaG9yLmxpbmUpICogKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJsdHJcIiA/IDEgOiAtMSkgPiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaGVhZEluZGV4ID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgaGVhZC5jaCwgaGVhZC5zdGlja3kpO1xuICAgICAgdmFyIGRpciA9IGhlYWRJbmRleCAtIGluZGV4IHx8IChoZWFkLmNoIC0gYW5jaG9yLmNoKSAqIChwYXJ0LmxldmVsID09IDEgPyAtMSA6IDEpO1xuICAgICAgaWYgKGhlYWRJbmRleCA9PSBib3VuZGFyeSAtIDEgfHwgaGVhZEluZGV4ID09IGJvdW5kYXJ5KVxuICAgICAgICB7IGxlZnRTaWRlID0gZGlyIDwgMDsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGxlZnRTaWRlID0gZGlyID4gMDsgfVxuICAgIH1cblxuICAgIHZhciB1c2VQYXJ0ID0gb3JkZXJbYm91bmRhcnkgKyAobGVmdFNpZGUgPyAtMSA6IDApXTtcbiAgICB2YXIgZnJvbSA9IGxlZnRTaWRlID09ICh1c2VQYXJ0LmxldmVsID09IDEpO1xuICAgIHZhciBjaCA9IGZyb20gPyB1c2VQYXJ0LmZyb20gOiB1c2VQYXJ0LnRvLCBzdGlja3kgPSBmcm9tID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgICByZXR1cm4gYW5jaG9yLmNoID09IGNoICYmIGFuY2hvci5zdGlja3kgPT0gc3RpY2t5ID8gcmFuZ2UgOiBuZXcgUmFuZ2UobmV3IFBvcyhhbmNob3IubGluZSwgY2gsIHN0aWNreSksIGhlYWQpXG4gIH1cblxuXG4gIC8vIERldGVybWluZXMgd2hldGhlciBhbiBldmVudCBoYXBwZW5lZCBpbiB0aGUgZ3V0dGVyLCBhbmQgZmlyZXMgdGhlXG4gIC8vIGhhbmRsZXJzIGZvciB0aGUgY29ycmVzcG9uZGluZyBldmVudC5cbiAgZnVuY3Rpb24gZ3V0dGVyRXZlbnQoY20sIGUsIHR5cGUsIHByZXZlbnQpIHtcbiAgICB2YXIgbVgsIG1ZO1xuICAgIGlmIChlLnRvdWNoZXMpIHtcbiAgICAgIG1YID0gZS50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICBtWSA9IGUudG91Y2hlc1swXS5jbGllbnRZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkgeyBtWCA9IGUuY2xpZW50WDsgbVkgPSBlLmNsaWVudFk7IH1cbiAgICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgaWYgKG1YID49IE1hdGguZmxvb3IoY20uZGlzcGxheS5ndXR0ZXJzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmIChwcmV2ZW50KSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICB2YXIgbGluZUJveCA9IGRpc3BsYXkubGluZURpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmIChtWSA+IGxpbmVCb3guYm90dG9tIHx8ICFoYXNIYW5kbGVyKGNtLCB0eXBlKSkgeyByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIH1cbiAgICBtWSAtPSBsaW5lQm94LnRvcCAtIGRpc3BsYXkudmlld09mZnNldDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGcgPSBkaXNwbGF5Lmd1dHRlcnMuY2hpbGROb2Rlc1tpXTtcbiAgICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHtcbiAgICAgICAgdmFyIGxpbmUgPSBsaW5lQXRIZWlnaHQoY20uZG9jLCBtWSk7XG4gICAgICAgIHZhciBndXR0ZXIgPSBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzW2ldO1xuICAgICAgICBzaWduYWwoY20sIHR5cGUsIGNtLCBsaW5lLCBndXR0ZXIuY2xhc3NOYW1lLCBlKTtcbiAgICAgICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHtcbiAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsIFwiZ3V0dGVyQ2xpY2tcIiwgdHJ1ZSlcbiAgfVxuXG4gIC8vIENPTlRFWFQgTUVOVSBIQU5ETElOR1xuXG4gIC8vIFRvIG1ha2UgdGhlIGNvbnRleHQgbWVudSB3b3JrLCB3ZSBuZWVkIHRvIGJyaWVmbHkgdW5oaWRlIHRoZVxuICAvLyB0ZXh0YXJlYSAobWFraW5nIGl0IGFzIHVub2J0cnVzaXZlIGFzIHBvc3NpYmxlKSB0byBsZXQgdGhlXG4gIC8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9uIGl0LlxuICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGNtLCBlKSB7XG4gICAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUsIFwiY29udGV4dG1lbnVcIikpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNhcHR1cmVSaWdodENsaWNrKSB7IGNtLmRpc3BsYXkuaW5wdXQub25Db250ZXh0TWVudShlKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29udGV4dE1lbnVJbkd1dHRlcihjbSwgZSkge1xuICAgIGlmICghaGFzSGFuZGxlcihjbSwgXCJndXR0ZXJDb250ZXh0TWVudVwiKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHJldHVybiBndXR0ZXJFdmVudChjbSwgZSwgXCJndXR0ZXJDb250ZXh0TWVudVwiLCBmYWxzZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkge1xuICAgIGNtLmRpc3BsYXkud3JhcHBlci5jbGFzc05hbWUgPSBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xccypjbS1zLVxcUysvZywgXCJcIikgK1xuICAgICAgY20ub3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxcXHMpXFxzKi9nLCBcIiBjbS1zLVwiKTtcbiAgICBjbGVhckNhY2hlcyhjbSk7XG4gIH1cblxuICB2YXIgSW5pdCA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gXCJDb2RlTWlycm9yLkluaXRcIn19O1xuXG4gIHZhciBkZWZhdWx0cyA9IHt9O1xuICB2YXIgb3B0aW9uSGFuZGxlcnMgPSB7fTtcblxuICBmdW5jdGlvbiBkZWZpbmVPcHRpb25zKENvZGVNaXJyb3IpIHtcbiAgICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzO1xuXG4gICAgZnVuY3Rpb24gb3B0aW9uKG5hbWUsIGRlZmx0LCBoYW5kbGUsIG5vdE9uSW5pdCkge1xuICAgICAgQ29kZU1pcnJvci5kZWZhdWx0c1tuYW1lXSA9IGRlZmx0O1xuICAgICAgaWYgKGhhbmRsZSkgeyBvcHRpb25IYW5kbGVyc1tuYW1lXSA9XG4gICAgICAgIG5vdE9uSW5pdCA/IGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtpZiAob2xkICE9IEluaXQpIHsgaGFuZGxlKGNtLCB2YWwsIG9sZCk7IH19IDogaGFuZGxlOyB9XG4gICAgfVxuXG4gICAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBvcHRpb247XG5cbiAgICAvLyBQYXNzZWQgdG8gb3B0aW9uIGhhbmRsZXJzIHdoZW4gdGhlcmUgaXMgbm8gb2xkIHZhbHVlLlxuICAgIENvZGVNaXJyb3IuSW5pdCA9IEluaXQ7XG5cbiAgICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5XG4gICAgLy8gaGF2ZSB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGVkaXRvciBjYW4gc3RhcnQgYXQgYWxsLlxuICAgIG9wdGlvbihcInZhbHVlXCIsIFwiXCIsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5zZXRWYWx1ZSh2YWwpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJtb2RlXCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kb2MubW9kZU9wdGlvbiA9IHZhbDtcbiAgICAgIGxvYWRNb2RlKGNtKTtcbiAgICB9LCB0cnVlKTtcblxuICAgIG9wdGlvbihcImluZGVudFVuaXRcIiwgMiwgbG9hZE1vZGUsIHRydWUpO1xuICAgIG9wdGlvbihcImluZGVudFdpdGhUYWJzXCIsIGZhbHNlKTtcbiAgICBvcHRpb24oXCJzbWFydEluZGVudFwiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJ0YWJTaXplXCIsIDQsIGZ1bmN0aW9uIChjbSkge1xuICAgICAgcmVzZXRNb2RlU3RhdGUoY20pO1xuICAgICAgY2xlYXJDYWNoZXMoY20pO1xuICAgICAgcmVnQ2hhbmdlKGNtKTtcbiAgICB9LCB0cnVlKTtcblxuICAgIG9wdGlvbihcImxpbmVTZXBhcmF0b3JcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRvYy5saW5lU2VwID0gdmFsO1xuICAgICAgaWYgKCF2YWwpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBuZXdCcmVha3MgPSBbXSwgbGluZU5vID0gY20uZG9jLmZpcnN0O1xuICAgICAgY20uZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgZm9yICh2YXIgcG9zID0gMDs7KSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gbGluZS50ZXh0LmluZGV4T2YodmFsLCBwb3MpO1xuICAgICAgICAgIGlmIChmb3VuZCA9PSAtMSkgeyBicmVhayB9XG4gICAgICAgICAgcG9zID0gZm91bmQgKyB2YWwubGVuZ3RoO1xuICAgICAgICAgIG5ld0JyZWFrcy5wdXNoKFBvcyhsaW5lTm8sIGZvdW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGluZU5vKys7XG4gICAgICB9KTtcbiAgICAgIGZvciAodmFyIGkgPSBuZXdCcmVha3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHsgcmVwbGFjZVJhbmdlKGNtLmRvYywgdmFsLCBuZXdCcmVha3NbaV0sIFBvcyhuZXdCcmVha3NbaV0ubGluZSwgbmV3QnJlYWtzW2ldLmNoICsgdmFsLmxlbmd0aCkpOyB9XG4gICAgfSk7XG4gICAgb3B0aW9uKFwic3BlY2lhbENoYXJzXCIsIC9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXFx1MDBhZFxcdTA2MWNcXHUyMDBiLVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdWZlZmZcXHVmZmY5LVxcdWZmZmNdL2csIGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtcbiAgICAgIGNtLnN0YXRlLnNwZWNpYWxDaGFycyA9IG5ldyBSZWdFeHAodmFsLnNvdXJjZSArICh2YWwudGVzdChcIlxcdFwiKSA/IFwiXCIgOiBcInxcXHRcIiksIFwiZ1wiKTtcbiAgICAgIGlmIChvbGQgIT0gSW5pdCkgeyBjbS5yZWZyZXNoKCk7IH1cbiAgICB9KTtcbiAgICBvcHRpb24oXCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyXCIsIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZWxlY3RyaWNDaGFyc1wiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJpbnB1dFN0eWxlXCIsIG1vYmlsZSA/IFwiY29udGVudGVkaXRhYmxlXCIgOiBcInRleHRhcmVhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3JcIikgLy8gRklYTUVcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJzcGVsbGNoZWNrXCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2sgPSB2YWw7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcImF1dG9jb3JyZWN0XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLmF1dG9jb3JyZWN0ID0gdmFsOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJhdXRvY2FwaXRhbGl6ZVwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmdldElucHV0RmllbGQoKS5hdXRvY2FwaXRhbGl6ZSA9IHZhbDsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicnRsTW92ZVZpc3VhbGx5XCIsICF3aW5kb3dzKTtcbiAgICBvcHRpb24oXCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmVcIiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJ0aGVtZVwiLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICB0aGVtZUNoYW5nZWQoY20pO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwia2V5TWFwXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7XG4gICAgICB2YXIgbmV4dCA9IGdldEtleU1hcCh2YWwpO1xuICAgICAgdmFyIHByZXYgPSBvbGQgIT0gSW5pdCAmJiBnZXRLZXlNYXAob2xkKTtcbiAgICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNoKSB7IHByZXYuZGV0YWNoKGNtLCBuZXh0KTsgfVxuICAgICAgaWYgKG5leHQuYXR0YWNoKSB7IG5leHQuYXR0YWNoKGNtLCBwcmV2IHx8IG51bGwpOyB9XG4gICAgfSk7XG4gICAgb3B0aW9uKFwiZXh0cmFLZXlzXCIsIG51bGwpO1xuICAgIG9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIsIG51bGwpO1xuXG4gICAgb3B0aW9uKFwibGluZVdyYXBwaW5nXCIsIGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUpO1xuICAgIG9wdGlvbihcImd1dHRlcnNcIiwgW10sIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyh2YWwsIGNtLm9wdGlvbnMubGluZU51bWJlcnMpO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZml4ZWRHdXR0ZXJcIiwgdHJ1ZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIGNtLnJlZnJlc2goKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhclwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2Nyb2xsYmFyU3R5bGVcIiwgXCJuYXRpdmVcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICBpbml0U2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTtcbiAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoY20uZG9jLnNjcm9sbFRvcCk7XG4gICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlcnNcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyhjbS5vcHRpb25zLmd1dHRlcnMsIHZhbCk7XG4gICAgICB1cGRhdGVHdXR0ZXJzKGNtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJmaXJzdExpbmVOdW1iZXJcIiwgMSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlckZvcm1hdHRlclwiLCBmdW5jdGlvbiAoaW50ZWdlcikgeyByZXR1cm4gaW50ZWdlcjsgfSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwgZmFsc2UsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnVcIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZVdpc2VDb3B5Q3V0XCIsIHRydWUpO1xuICAgIG9wdGlvbihcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2VsZWN0aW9uc01heVRvdWNoXCIsIGZhbHNlKTtcblxuICAgIG9wdGlvbihcInJlYWRPbmx5XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgaWYgKHZhbCA9PSBcIm5vY3Vyc29yXCIpIHtcbiAgICAgICAgb25CbHVyKGNtKTtcbiAgICAgICAgY20uZGlzcGxheS5pbnB1dC5ibHVyKCk7XG4gICAgICB9XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZCh2YWwpO1xuICAgIH0pO1xuICAgIG9wdGlvbihcImRpc2FibGVJbnB1dFwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7IH19LCB0cnVlKTtcbiAgICBvcHRpb24oXCJkcmFnRHJvcFwiLCB0cnVlLCBkcmFnRHJvcENoYW5nZWQpO1xuICAgIG9wdGlvbihcImFsbG93RHJvcEZpbGVUeXBlc1wiLCBudWxsKTtcblxuICAgIG9wdGlvbihcImN1cnNvckJsaW5rUmF0ZVwiLCA1MzApO1xuICAgIG9wdGlvbihcImN1cnNvclNjcm9sbE1hcmdpblwiLCAwKTtcbiAgICBvcHRpb24oXCJjdXJzb3JIZWlnaHRcIiwgMSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTtcbiAgICBvcHRpb24oXCJzaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lXCIsIHRydWUsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwid29ya1RpbWVcIiwgMTAwKTtcbiAgICBvcHRpb24oXCJ3b3JrRGVsYXlcIiwgMTAwKTtcbiAgICBvcHRpb24oXCJmbGF0dGVuU3BhbnNcIiwgdHJ1ZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpO1xuICAgIG9wdGlvbihcImFkZE1vZGVDbGFzc1wiLCBmYWxzZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpO1xuICAgIG9wdGlvbihcInBvbGxJbnRlcnZhbFwiLCAxMDApO1xuICAgIG9wdGlvbihcInVuZG9EZXB0aFwiLCAyMDAsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7IH0pO1xuICAgIG9wdGlvbihcImhpc3RvcnlFdmVudERlbGF5XCIsIDEyNTApO1xuICAgIG9wdGlvbihcInZpZXdwb3J0TWFyZ2luXCIsIDEwLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibWF4SGlnaGxpZ2h0TGVuZ3RoXCIsIDEwMDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibW92ZUlucHV0V2l0aEN1cnNvclwiLCB0cnVlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgaWYgKCF2YWwpIHsgY20uZGlzcGxheS5pbnB1dC5yZXNldFBvc2l0aW9uKCk7IH1cbiAgICB9KTtcblxuICAgIG9wdGlvbihcInRhYmluZGV4XCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkudGFiSW5kZXggPSB2YWwgfHwgXCJcIjsgfSk7XG4gICAgb3B0aW9uKFwiYXV0b2ZvY3VzXCIsIG51bGwpO1xuICAgIG9wdGlvbihcImRpcmVjdGlvblwiLCBcImx0clwiLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZG9jLnNldERpcmVjdGlvbih2YWwpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJwaHJhc2VzXCIsIG51bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZHJhZ0Ryb3BDaGFuZ2VkKGNtLCB2YWx1ZSwgb2xkKSB7XG4gICAgdmFyIHdhc09uID0gb2xkICYmIG9sZCAhPSBJbml0O1xuICAgIGlmICghdmFsdWUgIT0gIXdhc09uKSB7XG4gICAgICB2YXIgZnVuY3MgPSBjbS5kaXNwbGF5LmRyYWdGdW5jdGlvbnM7XG4gICAgICB2YXIgdG9nZ2xlID0gdmFsdWUgPyBvbiA6IG9mZjtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBmdW5jcy5zdGFydCk7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnZW50ZXJcIiwgZnVuY3MuZW50ZXIpO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ292ZXJcIiwgZnVuY3Mub3Zlcik7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnbGVhdmVcIiwgZnVuY3MubGVhdmUpO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJvcFwiLCBmdW5jcy5kcm9wKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHtcbiAgICBpZiAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLXdyYXBcIik7XG4gICAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gXCJcIjtcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICAgIGZpbmRNYXhMaW5lKGNtKTtcbiAgICB9XG4gICAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgICBjbGVhckNhY2hlcyhjbSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIEEgQ29kZU1pcnJvciBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGVkaXRvci4gVGhpcyBpcyB0aGUgb2JqZWN0XG4gIC8vIHRoYXQgdXNlciBjb2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLlxuXG4gIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb2RlTWlycm9yKSkgeyByZXR1cm4gbmV3IENvZGVNaXJyb3IocGxhY2UsIG9wdGlvbnMpIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPSBvcHRpb25zID8gY29weU9iaihvcHRpb25zKSA6IHt9O1xuICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLlxuICAgIGNvcHlPYmooZGVmYXVsdHMsIG9wdGlvbnMsIGZhbHNlKTtcblxuICAgIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlO1xuICAgIGlmICh0eXBlb2YgZG9jID09IFwic3RyaW5nXCIpIHsgZG9jID0gbmV3IERvYyhkb2MsIG9wdGlvbnMubW9kZSwgbnVsbCwgb3B0aW9ucy5saW5lU2VwYXJhdG9yLCBvcHRpb25zLmRpcmVjdGlvbik7IH1cbiAgICBlbHNlIGlmIChvcHRpb25zLm1vZGUpIHsgZG9jLm1vZGVPcHRpb24gPSBvcHRpb25zLm1vZGU7IH1cbiAgICB0aGlzLmRvYyA9IGRvYztcblxuICAgIHZhciBpbnB1dCA9IG5ldyBDb2RlTWlycm9yLmlucHV0U3R5bGVzW29wdGlvbnMuaW5wdXRTdHlsZV0odGhpcyk7XG4gICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXkgPSBuZXcgRGlzcGxheShwbGFjZSwgZG9jLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgZGlzcGxheS53cmFwcGVyLkNvZGVNaXJyb3IgPSB0aGlzO1xuICAgIHRoZW1lQ2hhbmdlZCh0aGlzKTtcbiAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpXG4gICAgICB7IHRoaXMuZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZSArPSBcIiBDb2RlTWlycm9yLXdyYXBcIjsgfVxuICAgIGluaXRTY3JvbGxiYXJzKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGtleU1hcHM6IFtdLCAgLy8gc3RvcmVzIG1hcHMgYWRkZWQgYnkgYWRkS2V5TWFwXG4gICAgICBvdmVybGF5czogW10sIC8vIGhpZ2hsaWdodGluZyBvdmVybGF5cywgYXMgYWRkZWQgYnkgYWRkT3ZlcmxheVxuICAgICAgbW9kZUdlbjogMCwgICAvLyBidW1wZWQgd2hlbiBtb2RlL292ZXJsYXkgY2hhbmdlcywgdXNlZCB0byBpbnZhbGlkYXRlIGhpZ2hsaWdodGluZyBpbmZvXG4gICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgZGVsYXlpbmdCbHVyRXZlbnQ6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2UsXG4gICAgICBzdXBwcmVzc0VkaXRzOiBmYWxzZSwgLy8gdXNlZCB0byBkaXNhYmxlIGVkaXRpbmcgZHVyaW5nIGtleSBoYW5kbGVycyB3aGVuIGluIHJlYWRPbmx5IG1vZGVcbiAgICAgIHBhc3RlSW5jb21pbmc6IC0xLCBjdXRJbmNvbWluZzogLTEsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiBpbnB1dC5wb2xsXG4gICAgICBzZWxlY3RpbmdUZXh0OiBmYWxzZSxcbiAgICAgIGRyYWdnaW5nVGV4dDogZmFsc2UsXG4gICAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCksIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXRcbiAgICAgIGtleVNlcTogbnVsbCwgIC8vIFVuZmluaXNoZWQga2V5IHNlcXVlbmNlXG4gICAgICBzcGVjaWFsQ2hhcnM6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHsgZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9XG5cbiAgICAvLyBPdmVycmlkZSBtYWdpYyB0ZXh0YXJlYSBjb250ZW50IHJlc3RvcmUgdGhhdCBJRSBzb21ldGltZXMgZG9lc1xuICAgIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5kaXNwbGF5LmlucHV0LnJlc2V0KHRydWUpOyB9LCAyMCk7IH1cblxuICAgIHJlZ2lzdGVyRXZlbnRIYW5kbGVycyh0aGlzKTtcbiAgICBlbnN1cmVHbG9iYWxIYW5kbGVycygpO1xuXG4gICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7XG5cbiAgICBpZiAoKG9wdGlvbnMuYXV0b2ZvY3VzICYmICFtb2JpbGUpIHx8IHRoaXMuaGFzRm9jdXMoKSlcbiAgICAgIHsgc2V0VGltZW91dChiaW5kKG9uRm9jdXMsIHRoaXMpLCAyMCk7IH1cbiAgICBlbHNlXG4gICAgICB7IG9uQmx1cih0aGlzKTsgfVxuXG4gICAgZm9yICh2YXIgb3B0IGluIG9wdGlvbkhhbmRsZXJzKSB7IGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHQpKVxuICAgICAgeyBvcHRpb25IYW5kbGVyc1tvcHRdKHRoaXMsIG9wdGlvbnNbb3B0XSwgSW5pdCk7IH0gfVxuICAgIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKHRoaXMpO1xuICAgIGlmIChvcHRpb25zLmZpbmlzaEluaXQpIHsgb3B0aW9ucy5maW5pc2hJbml0KHRoaXMpOyB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0SG9va3MubGVuZ3RoOyArK2kpIHsgaW5pdEhvb2tzW2ldKHRoaXMpOyB9XG4gICAgZW5kT3BlcmF0aW9uKHRoaXMpO1xuICAgIC8vIFN1cHByZXNzIG9wdGltaXplbGVnaWJpbGl0eSBpbiBXZWJraXQsIHNpbmNlIGl0IGJyZWFrcyB0ZXh0XG4gICAgLy8gbWVhc3VyaW5nIG9uIGxpbmUgd3JhcHBpbmcgYm91bmRhcmllcy5cbiAgICBpZiAod2Via2l0ICYmIG9wdGlvbnMubGluZVdyYXBwaW5nICYmXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZGlzcGxheS5saW5lRGl2KS50ZXh0UmVuZGVyaW5nID09IFwib3B0aW1pemVsZWdpYmlsaXR5XCIpXG4gICAgICB7IGRpc3BsYXkubGluZURpdi5zdHlsZS50ZXh0UmVuZGVyaW5nID0gXCJhdXRvXCI7IH1cbiAgfVxuXG4gIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgQ29kZU1pcnJvci5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAvLyBGdW5jdGlvbnMgdG8gcnVuIHdoZW4gb3B0aW9ucyBhcmUgY2hhbmdlZC5cbiAgQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycyA9IG9wdGlvbkhhbmRsZXJzO1xuXG4gIC8vIEF0dGFjaCB0aGUgbmVjZXNzYXJ5IGV2ZW50IGhhbmRsZXJzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBlZGl0b3JcbiAgZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5O1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwibW91c2Vkb3duXCIsIG9wZXJhdGlvbihjbSwgb25Nb3VzZURvd24pKTtcbiAgICAvLyBPbGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBjbGlja1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpXG4gICAgICB7IG9uKGQuc2Nyb2xsZXIsIFwiZGJsY2xpY2tcIiwgb3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUpO1xuICAgICAgICBpZiAoIXBvcyB8fCBjbGlja0luR3V0dGVyKGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSB7IHJldHVybiB9XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIHZhciB3b3JkID0gY20uZmluZFdvcmRBdChwb3MpO1xuICAgICAgICBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCB3b3JkLmFuY2hvciwgd29yZC5oZWFkKTtcbiAgICAgIH0pKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb24oZC5zY3JvbGxlciwgXCJkYmxjbGlja1wiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGVfcHJldmVudERlZmF1bHQoZSk7IH0pOyB9XG4gICAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXRcbiAgICAvLyB3aGljaCBwb2ludCB3ZSBjYW4ndCBtZXNzIHdpdGggaXQgYW55bW9yZS4gQ29udGV4dCBtZW51IGlzXG4gICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgdGhlc2UgYnJvd3NlcnMuXG4gICAgb24oZC5zY3JvbGxlciwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25Db250ZXh0TWVudShjbSwgZSk7IH0pO1xuICAgIG9uKGQuaW5wdXQuZ2V0RmllbGQoKSwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCFkLnNjcm9sbGVyLmNvbnRhaW5zKGUudGFyZ2V0KSkgeyBvbkNvbnRleHRNZW51KGNtLCBlKTsgfVxuICAgIH0pO1xuXG4gICAgLy8gVXNlZCB0byBzdXBwcmVzcyBtb3VzZSBldmVudCBoYW5kbGluZyB3aGVuIGEgdG91Y2ggaGFwcGVuc1xuICAgIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTtcbiAgICBmdW5jdGlvbiBmaW5pc2hUb3VjaCgpIHtcbiAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7XG4gICAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGQuYWN0aXZlVG91Y2ggPSBudWxsOyB9LCAxMDAwKTtcbiAgICAgICAgcHJldlRvdWNoID0gZC5hY3RpdmVUb3VjaDtcbiAgICAgICAgcHJldlRvdWNoLmVuZCA9ICtuZXcgRGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpIHtcbiAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHZhciB0b3VjaCA9IGUudG91Y2hlc1swXTtcbiAgICAgIHJldHVybiB0b3VjaC5yYWRpdXNYIDw9IDEgJiYgdG91Y2gucmFkaXVzWSA8PSAxXG4gICAgfVxuICAgIGZ1bmN0aW9uIGZhckF3YXkodG91Y2gsIG90aGVyKSB7XG4gICAgICBpZiAob3RoZXIubGVmdCA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICAgIHZhciBkeCA9IG90aGVyLmxlZnQgLSB0b3VjaC5sZWZ0LCBkeSA9IG90aGVyLnRvcCAtIHRvdWNoLnRvcDtcbiAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSA+IDIwICogMjBcbiAgICB9XG4gICAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSAmJiAhaXNNb3VzZUxpa2VUb3VjaEV2ZW50KGUpICYmICFjbGlja0luR3V0dGVyKGNtLCBlKSkge1xuICAgICAgICBkLmlucHV0LmVuc3VyZVBvbGxlZCgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodG91Y2hGaW5pc2hlZCk7XG4gICAgICAgIHZhciBub3cgPSArbmV3IERhdGU7XG4gICAgICAgIGQuYWN0aXZlVG91Y2ggPSB7c3RhcnQ6IG5vdywgbW92ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHByZXY6IG5vdyAtIHByZXZUb3VjaC5lbmQgPD0gMzAwID8gcHJldlRvdWNoIDogbnVsbH07XG4gICAgICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICBkLmFjdGl2ZVRvdWNoLmxlZnQgPSBlLnRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgICAgZC5hY3RpdmVUb3VjaC50b3AgPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNobW92ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZC5hY3RpdmVUb3VjaCkgeyBkLmFjdGl2ZVRvdWNoLm1vdmVkID0gdHJ1ZTsgfVxuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2hlbmRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciB0b3VjaCA9IGQuYWN0aXZlVG91Y2g7XG4gICAgICBpZiAodG91Y2ggJiYgIWV2ZW50SW5XaWRnZXQoZCwgZSkgJiYgdG91Y2gubGVmdCAhPSBudWxsICYmXG4gICAgICAgICAgIXRvdWNoLm1vdmVkICYmIG5ldyBEYXRlIC0gdG91Y2guc3RhcnQgPCAzMDApIHtcbiAgICAgICAgdmFyIHBvcyA9IGNtLmNvb3Jkc0NoYXIoZC5hY3RpdmVUb3VjaCwgXCJwYWdlXCIpLCByYW5nZTtcbiAgICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYpKSAvLyBTaW5nbGUgdGFwXG4gICAgICAgICAgeyByYW5nZSA9IG5ldyBSYW5nZShwb3MsIHBvcyk7IH1cbiAgICAgICAgZWxzZSBpZiAoIXRvdWNoLnByZXYucHJldiB8fCBmYXJBd2F5KHRvdWNoLCB0b3VjaC5wcmV2LnByZXYpKSAvLyBEb3VibGUgdGFwXG4gICAgICAgICAgeyByYW5nZSA9IGNtLmZpbmRXb3JkQXQocG9zKTsgfVxuICAgICAgICBlbHNlIC8vIFRyaXBsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpOyB9XG4gICAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQpO1xuICAgICAgICBjbS5mb2N1cygpO1xuICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgICAgfVxuICAgICAgZmluaXNoVG91Y2goKTtcbiAgICB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNoY2FuY2VsXCIsIGZpbmlzaFRvdWNoKTtcblxuICAgIC8vIFN5bmMgc2Nyb2xsaW5nIGJldHdlZW4gZmFrZSBzY3JvbGxiYXJzIGFuZCByZWFsIHNjcm9sbGFibGVcbiAgICAvLyBhcmVhLCBlbnN1cmUgdmlld3BvcnQgaXMgdXBkYXRlZCB3aGVuIHNjcm9sbGluZy5cbiAgICBvbihkLnNjcm9sbGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZC5zY3JvbGxlci5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBkLnNjcm9sbGVyLnNjcm9sbFRvcCk7XG4gICAgICAgIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7XG4gICAgICAgIHNpZ25hbChjbSwgXCJzY3JvbGxcIiwgY20pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTGlzdGVuIHRvIHdoZWVsIGV2ZW50cyBpbiBvcmRlciB0byB0cnkgYW5kIHVwZGF0ZSB0aGUgdmlld3BvcnQgb24gdGltZS5cbiAgICBvbihkLnNjcm9sbGVyLCBcIm1vdXNld2hlZWxcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uU2Nyb2xsV2hlZWwoY20sIGUpOyB9KTtcbiAgICBvbihkLnNjcm9sbGVyLCBcIkRPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvblNjcm9sbFdoZWVsKGNtLCBlKTsgfSk7XG5cbiAgICAvLyBQcmV2ZW50IHdyYXBwZXIgZnJvbSBldmVyIHNjcm9sbGluZ1xuICAgIG9uKGQud3JhcHBlciwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZC53cmFwcGVyLnNjcm9sbFRvcCA9IGQud3JhcHBlci5zY3JvbGxMZWZ0ID0gMDsgfSk7XG5cbiAgICBkLmRyYWdGdW5jdGlvbnMgPSB7XG4gICAgICBlbnRlcjogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBlX3N0b3AoZSk7IH19LFxuICAgICAgb3ZlcjogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBvbkRyYWdPdmVyKGNtLCBlKTsgZV9zdG9wKGUpOyB9fSxcbiAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25EcmFnU3RhcnQoY20sIGUpOyB9LFxuICAgICAgZHJvcDogb3BlcmF0aW9uKGNtLCBvbkRyb3ApLFxuICAgICAgbGVhdmU6IGZ1bmN0aW9uIChlKSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgY2xlYXJEcmFnQ3Vyc29yKGNtKTsgfX1cbiAgICB9O1xuXG4gICAgdmFyIGlucCA9IGQuaW5wdXQuZ2V0RmllbGQoKTtcbiAgICBvbihpbnAsIFwia2V5dXBcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uS2V5VXAuY2FsbChjbSwgZSk7IH0pO1xuICAgIG9uKGlucCwgXCJrZXlkb3duXCIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7XG4gICAgb24oaW5wLCBcImtleXByZXNzXCIsIG9wZXJhdGlvbihjbSwgb25LZXlQcmVzcykpO1xuICAgIG9uKGlucCwgXCJmb2N1c1wiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25Gb2N1cyhjbSwgZSk7IH0pO1xuICAgIG9uKGlucCwgXCJibHVyXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkJsdXIoY20sIGUpOyB9KTtcbiAgfVxuXG4gIHZhciBpbml0SG9va3MgPSBbXTtcbiAgQ29kZU1pcnJvci5kZWZpbmVJbml0SG9vayA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBpbml0SG9va3MucHVzaChmKTsgfTtcblxuICAvLyBJbmRlbnQgdGhlIGdpdmVuIGxpbmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSBcInNtYXJ0XCIsXG4gIC8vIFwiYWRkXCIvbnVsbCwgXCJzdWJ0cmFjdFwiLCBvciBcInByZXZcIi4gV2hlbiBhZ2dyZXNzaXZlIGlzIGZhbHNlXG4gIC8vICh0eXBpY2FsbHkgc2V0IHRvIHRydWUgZm9yIGZvcmNlZCBzaW5nbGUtbGluZSBpbmRlbnRzKSwgZW1wdHlcbiAgLy8gbGluZXMgYXJlIG5vdCBpbmRlbnRlZCwgYW5kIHBsYWNlcyB3aGVyZSB0aGUgbW9kZSByZXR1cm5zIFBhc3NcbiAgLy8gYXJlIGxlZnQgYWxvbmUuXG4gIGZ1bmN0aW9uIGluZGVudExpbmUoY20sIG4sIGhvdywgYWdncmVzc2l2ZSkge1xuICAgIHZhciBkb2MgPSBjbS5kb2MsIHN0YXRlO1xuICAgIGlmIChob3cgPT0gbnVsbCkgeyBob3cgPSBcImFkZFwiOyB9XG4gICAgaWYgKGhvdyA9PSBcInNtYXJ0XCIpIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBcInByZXZcIiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvblxuICAgICAgLy8gbWV0aG9kLlxuICAgICAgaWYgKCFkb2MubW9kZS5pbmRlbnQpIHsgaG93ID0gXCJwcmV2XCI7IH1cbiAgICAgIGVsc2UgeyBzdGF0ZSA9IGdldENvbnRleHRCZWZvcmUoY20sIG4pLnN0YXRlOyB9XG4gICAgfVxuXG4gICAgdmFyIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbiksIGN1clNwYWNlID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCB0YWJTaXplKTtcbiAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH1cbiAgICB2YXIgY3VyU3BhY2VTdHJpbmcgPSBsaW5lLnRleHQubWF0Y2goL15cXHMqLylbMF0sIGluZGVudGF0aW9uO1xuICAgIGlmICghYWdncmVzc2l2ZSAmJiAhL1xcUy8udGVzdChsaW5lLnRleHQpKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IDA7XG4gICAgICBob3cgPSBcIm5vdFwiO1xuICAgIH0gZWxzZSBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBkb2MubW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBsaW5lLnRleHQpO1xuICAgICAgaWYgKGluZGVudGF0aW9uID09IFBhc3MgfHwgaW5kZW50YXRpb24gPiAxNTApIHtcbiAgICAgICAgaWYgKCFhZ2dyZXNzaXZlKSB7IHJldHVybiB9XG4gICAgICAgIGhvdyA9IFwicHJldlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaG93ID09IFwicHJldlwiKSB7XG4gICAgICBpZiAobiA+IGRvYy5maXJzdCkgeyBpbmRlbnRhdGlvbiA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBuLTEpLnRleHQsIG51bGwsIHRhYlNpemUpOyB9XG4gICAgICBlbHNlIHsgaW5kZW50YXRpb24gPSAwOyB9XG4gICAgfSBlbHNlIGlmIChob3cgPT0gXCJhZGRcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGNtLm9wdGlvbnMuaW5kZW50VW5pdDtcbiAgICB9IGVsc2UgaWYgKGhvdyA9PSBcInN1YnRyYWN0XCIpIHtcbiAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBjbS5vcHRpb25zLmluZGVudFVuaXQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaG93ID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBob3c7XG4gICAgfVxuICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pO1xuXG4gICAgdmFyIGluZGVudFN0cmluZyA9IFwiXCIsIHBvcyA9IDA7XG4gICAgaWYgKGNtLm9wdGlvbnMuaW5kZW50V2l0aFRhYnMpXG4gICAgICB7IGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gXCJcXHRcIjt9IH1cbiAgICBpZiAocG9zIDwgaW5kZW50YXRpb24pIHsgaW5kZW50U3RyaW5nICs9IHNwYWNlU3RyKGluZGVudGF0aW9uIC0gcG9zKTsgfVxuXG4gICAgaWYgKGluZGVudFN0cmluZyAhPSBjdXJTcGFjZVN0cmluZykge1xuICAgICAgcmVwbGFjZVJhbmdlKGRvYywgaW5kZW50U3RyaW5nLCBQb3MobiwgMCksIFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpLCBcIitpbnB1dFwiKTtcbiAgICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0XG4gICAgICAvLyBvZiB0aGUgbGluZSwgaXQgaXMgbW92ZWQgdG8gdGhlIGVuZCBvZiB0aGF0IHNwYWNlLlxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpJDFdO1xuICAgICAgICBpZiAocmFuZ2UuaGVhZC5saW5lID09IG4gJiYgcmFuZ2UuaGVhZC5jaCA8IGN1clNwYWNlU3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBwb3MkMSA9IFBvcyhuLCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpO1xuICAgICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpJDEsIG5ldyBSYW5nZShwb3MkMSwgcG9zJDEpKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhpcyB3aWxsIGJlIHNldCB0byBhIHtsaW5lV2lzZTogYm9vbCwgdGV4dDogW3N0cmluZ119IG9iamVjdCwgc29cbiAgLy8gdGhhdCwgd2hlbiBwYXN0aW5nLCB3ZSBrbm93IHdoYXQga2luZCBvZiBzZWxlY3Rpb25zIHRoZSBjb3BpZWRcbiAgLy8gdGV4dCB3YXMgbWFkZSBvdXQgb2YuXG4gIHZhciBsYXN0Q29waWVkID0gbnVsbDtcblxuICBmdW5jdGlvbiBzZXRMYXN0Q29waWVkKG5ld0xhc3RDb3BpZWQpIHtcbiAgICBsYXN0Q29waWVkID0gbmV3TGFzdENvcGllZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGV4dElucHV0KGNtLCBpbnNlcnRlZCwgZGVsZXRlZCwgc2VsLCBvcmlnaW4pIHtcbiAgICB2YXIgZG9jID0gY20uZG9jO1xuICAgIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTtcbiAgICBpZiAoIXNlbCkgeyBzZWwgPSBkb2Muc2VsOyB9XG5cbiAgICB2YXIgcmVjZW50ID0gK25ldyBEYXRlIC0gMjAwO1xuICAgIHZhciBwYXN0ZSA9IG9yaWdpbiA9PSBcInBhc3RlXCIgfHwgY20uc3RhdGUucGFzdGVJbmNvbWluZyA+IHJlY2VudDtcbiAgICB2YXIgdGV4dExpbmVzID0gc3BsaXRMaW5lc0F1dG8oaW5zZXJ0ZWQpLCBtdWx0aVBhc3RlID0gbnVsbDtcbiAgICAvLyBXaGVuIHBhc3RpbmcgTiBsaW5lcyBpbnRvIE4gc2VsZWN0aW9ucywgaW5zZXJ0IG9uZSBsaW5lIHBlciBzZWxlY3Rpb25cbiAgICBpZiAocGFzdGUgJiYgc2VsLnJhbmdlcy5sZW5ndGggPiAxKSB7XG4gICAgICBpZiAobGFzdENvcGllZCAmJiBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKSA9PSBpbnNlcnRlZCkge1xuICAgICAgICBpZiAoc2VsLnJhbmdlcy5sZW5ndGggJSBsYXN0Q29waWVkLnRleHQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBtdWx0aVBhc3RlID0gW107XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0Q29waWVkLnRleHQubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB7IG11bHRpUGFzdGUucHVzaChkb2Muc3BsaXRMaW5lcyhsYXN0Q29waWVkLnRleHRbaV0pKTsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRleHRMaW5lcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiYgY20ub3B0aW9ucy5wYXN0ZUxpbmVzUGVyU2VsZWN0aW9uKSB7XG4gICAgICAgIG11bHRpUGFzdGUgPSBtYXAodGV4dExpbmVzLCBmdW5jdGlvbiAobCkgeyByZXR1cm4gW2xdOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdXBkYXRlSW5wdXQgPSBjbS5jdXJPcC51cGRhdGVJbnB1dDtcbiAgICAvLyBOb3JtYWwgYmVoYXZpb3IgaXMgdG8gaW5zZXJ0IHRoZSBuZXcgdGV4dCBpbnRvIGV2ZXJ5IHNlbGVjdGlvblxuICAgIGZvciAodmFyIGkkMSA9IHNlbC5yYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IGkkMS0tKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2kkMV07XG4gICAgICB2YXIgZnJvbSA9IHJhbmdlLmZyb20oKSwgdG8gPSByYW5nZS50bygpO1xuICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgaWYgKGRlbGV0ZWQgJiYgZGVsZXRlZCA+IDApIC8vIEhhbmRsZSBkZWxldGlvblxuICAgICAgICAgIHsgZnJvbSA9IFBvcyhmcm9tLmxpbmUsIGZyb20uY2ggLSBkZWxldGVkKTsgfVxuICAgICAgICBlbHNlIGlmIChjbS5zdGF0ZS5vdmVyd3JpdGUgJiYgIXBhc3RlKSAvLyBIYW5kbGUgb3ZlcndyaXRlXG4gICAgICAgICAgeyB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgbHN0KHRleHRMaW5lcykubGVuZ3RoKSk7IH1cbiAgICAgICAgZWxzZSBpZiAocGFzdGUgJiYgbGFzdENvcGllZCAmJiBsYXN0Q29waWVkLmxpbmVXaXNlICYmIGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpID09IGluc2VydGVkKVxuICAgICAgICAgIHsgZnJvbSA9IHRvID0gUG9zKGZyb20ubGluZSwgMCk7IH1cbiAgICAgIH1cbiAgICAgIHZhciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IG11bHRpUGFzdGUgPyBtdWx0aVBhc3RlW2kkMSAlIG11bHRpUGFzdGUubGVuZ3RoXSA6IHRleHRMaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IG9yaWdpbiB8fCAocGFzdGUgPyBcInBhc3RlXCIgOiBjbS5zdGF0ZS5jdXRJbmNvbWluZyA+IHJlY2VudCA/IFwiY3V0XCIgOiBcIitpbnB1dFwiKX07XG4gICAgICBtYWtlQ2hhbmdlKGNtLmRvYywgY2hhbmdlRXZlbnQpO1xuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwiaW5wdXRSZWFkXCIsIGNtLCBjaGFuZ2VFdmVudCk7XG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCAmJiAhcGFzdGUpXG4gICAgICB7IHRyaWdnZXJFbGVjdHJpYyhjbSwgaW5zZXJ0ZWQpOyB9XG5cbiAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTtcbiAgICBpZiAoY20uY3VyT3AudXBkYXRlSW5wdXQgPCAyKSB7IGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7IH1cbiAgICBjbS5jdXJPcC50eXBpbmcgPSB0cnVlO1xuICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGFzdGUoZSwgY20pIHtcbiAgICB2YXIgcGFzdGVkID0gZS5jbGlwYm9hcmREYXRhICYmIGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICBpZiAocGFzdGVkKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoIWNtLmlzUmVhZE9ubHkoKSAmJiAhY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQpXG4gICAgICAgIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwbHlUZXh0SW5wdXQoY20sIHBhc3RlZCwgMCwgbnVsbCwgXCJwYXN0ZVwiKTsgfSk7IH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCkge1xuICAgIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudFxuICAgIGlmICghY20ub3B0aW9ucy5lbGVjdHJpY0NoYXJzIHx8ICFjbS5vcHRpb25zLnNtYXJ0SW5kZW50KSB7IHJldHVybiB9XG4gICAgdmFyIHNlbCA9IGNtLmRvYy5zZWw7XG5cbiAgICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5oZWFkLmNoID4gMTAwIHx8IChpICYmIHNlbC5yYW5nZXNbaSAtIDFdLmhlYWQubGluZSA9PSByYW5nZS5oZWFkLmxpbmUpKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlLmhlYWQpO1xuICAgICAgdmFyIGluZGVudGVkID0gZmFsc2U7XG4gICAgICBpZiAobW9kZS5lbGVjdHJpY0NoYXJzKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKVxuICAgICAgICAgIHsgaWYgKGluc2VydGVkLmluZGV4T2YobW9kZS5lbGVjdHJpY0NoYXJzLmNoYXJBdChqKSkgPiAtMSkge1xuICAgICAgICAgICAgaW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsIFwic21hcnRcIik7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH0gfVxuICAgICAgfSBlbHNlIGlmIChtb2RlLmVsZWN0cmljSW5wdXQpIHtcbiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCwgcmFuZ2UuaGVhZC5jaCkpKVxuICAgICAgICAgIHsgaW5kZW50ZWQgPSBpbmRlbnRMaW5lKGNtLCByYW5nZS5oZWFkLmxpbmUsIFwic21hcnRcIik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChpbmRlbnRlZCkgeyBzaWduYWxMYXRlcihjbSwgXCJlbGVjdHJpY0lucHV0XCIsIGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29weWFibGVSYW5nZXMoY20pIHtcbiAgICB2YXIgdGV4dCA9IFtdLCByYW5nZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwucmFuZ2VzW2ldLmhlYWQubGluZTtcbiAgICAgIHZhciBsaW5lUmFuZ2UgPSB7YW5jaG9yOiBQb3MobGluZSwgMCksIGhlYWQ6IFBvcyhsaW5lICsgMSwgMCl9O1xuICAgICAgcmFuZ2VzLnB1c2gobGluZVJhbmdlKTtcbiAgICAgIHRleHQucHVzaChjbS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5lUmFuZ2UuaGVhZCkpO1xuICAgIH1cbiAgICByZXR1cm4ge3RleHQ6IHRleHQsIHJhbmdlczogcmFuZ2VzfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzYWJsZUJyb3dzZXJNYWdpYyhmaWVsZCwgc3BlbGxjaGVjaywgYXV0b2NvcnJlY3QsIGF1dG9jYXBpdGFsaXplKSB7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NvcnJlY3RcIiwgYXV0b2NvcnJlY3QgPyBcIlwiIDogXCJvZmZcIik7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NhcGl0YWxpemVcIiwgYXV0b2NhcGl0YWxpemUgPyBcIlwiIDogXCJvZmZcIik7XG4gICAgZmllbGQuc2V0QXR0cmlidXRlKFwic3BlbGxjaGVja1wiLCAhIXNwZWxsY2hlY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gaGlkZGVuVGV4dGFyZWEoKSB7XG4gICAgdmFyIHRlID0gZWx0KFwidGV4dGFyZWFcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogLTFlbTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxZW07IG91dGxpbmU6IG5vbmVcIik7XG4gICAgdmFyIGRpdiA9IGVsdChcImRpdlwiLCBbdGVdLCBudWxsLCBcIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7XCIpO1xuICAgIC8vIFRoZSB0ZXh0YXJlYSBpcyBrZXB0IHBvc2l0aW9uZWQgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgdGhlXG4gICAgLy8gZmFjdCB0aGF0IGl0J2xsIGJlIHNjcm9sbGVkIGludG8gdmlldyBvbiBpbnB1dCBmcm9tIHNjcm9sbGluZ1xuICAgIC8vIG91ciBmYWtlIGN1cnNvciBvdXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9b2ZmLCBwYXN0ZSBpc1xuICAgIC8vIHZlcnkgc2xvdy4gU28gbWFrZSB0aGUgYXJlYSB3aWRlIGluc3RlYWQuXG4gICAgaWYgKHdlYmtpdCkgeyB0ZS5zdHlsZS53aWR0aCA9IFwiMTAwMHB4XCI7IH1cbiAgICBlbHNlIHsgdGUuc2V0QXR0cmlidXRlKFwid3JhcFwiLCBcIm9mZlwiKTsgfVxuICAgIC8vIElmIGJvcmRlcjogMDsgLS0gaU9TIGZhaWxzIHRvIG9wZW4ga2V5Ym9hcmQgKGlzc3VlICMxMjg3KVxuICAgIGlmIChpb3MpIHsgdGUuc3R5bGUuYm9yZGVyID0gXCIxcHggc29saWQgYmxhY2tcIjsgfVxuICAgIGRpc2FibGVCcm93c2VyTWFnaWModGUpO1xuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIC8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1lYW5zXG4gIC8vICd3cmFwIGYgaW4gYW4gb3BlcmF0aW9uLCBwZXJmb3JtZWQgb24gaXRzIGB0aGlzYCBwYXJhbWV0ZXInLlxuXG4gIC8vIFRoaXMgaXMgbm90IHRoZSBjb21wbGV0ZSBzZXQgb2YgZWRpdG9yIG1ldGhvZHMuIE1vc3Qgb2YgdGhlXG4gIC8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50b1xuICAvLyBDb2RlTWlycm9yLnByb3RvdHlwZSwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZFxuICAvLyBjb252ZW5pZW5jZS5cblxuICBmdW5jdGlvbiBhZGRFZGl0b3JNZXRob2RzKENvZGVNaXJyb3IpIHtcbiAgICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzO1xuXG4gICAgdmFyIGhlbHBlcnMgPSBDb2RlTWlycm9yLmhlbHBlcnMgPSB7fTtcblxuICAgIENvZGVNaXJyb3IucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IENvZGVNaXJyb3IsXG4gICAgICBmb2N1czogZnVuY3Rpb24oKXt3aW5kb3cuZm9jdXMoKTsgdGhpcy5kaXNwbGF5LmlucHV0LmZvY3VzKCk7fSxcblxuICAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLCBvbGQgPSBvcHRpb25zW29wdGlvbl07XG4gICAgICAgIGlmIChvcHRpb25zW29wdGlvbl0gPT0gdmFsdWUgJiYgb3B0aW9uICE9IFwibW9kZVwiKSB7IHJldHVybiB9XG4gICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICBpZiAob3B0aW9uSGFuZGxlcnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSlcbiAgICAgICAgICB7IG9wZXJhdGlvbih0aGlzLCBvcHRpb25IYW5kbGVyc1tvcHRpb25dKSh0aGlzLCB2YWx1ZSwgb2xkKTsgfVxuICAgICAgICBzaWduYWwodGhpcywgXCJvcHRpb25DaGFuZ2VcIiwgdGhpcywgb3B0aW9uKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJuIHRoaXMub3B0aW9uc1tvcHRpb25dfSxcbiAgICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jfSxcblxuICAgICAgYWRkS2V5TWFwOiBmdW5jdGlvbihtYXAsIGJvdHRvbSkge1xuICAgICAgICB0aGlzLnN0YXRlLmtleU1hcHNbYm90dG9tID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl0oZ2V0S2V5TWFwKG1hcCkpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUtleU1hcDogZnVuY3Rpb24obWFwKSB7XG4gICAgICAgIHZhciBtYXBzID0gdGhpcy5zdGF0ZS5rZXlNYXBzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgeyBpZiAobWFwc1tpXSA9PSBtYXAgfHwgbWFwc1tpXS5uYW1lID09IG1hcCkge1xuICAgICAgICAgICAgbWFwcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0gfVxuICAgICAgfSxcblxuICAgICAgYWRkT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYywgb3B0aW9ucykge1xuICAgICAgICB2YXIgbW9kZSA9IHNwZWMudG9rZW4gPyBzcGVjIDogQ29kZU1pcnJvci5nZXRNb2RlKHRoaXMub3B0aW9ucywgc3BlYyk7XG4gICAgICAgIGlmIChtb2RlLnN0YXJ0U3RhdGUpIHsgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcmxheXMgbWF5IG5vdCBiZSBzdGF0ZWZ1bC5cIikgfVxuICAgICAgICBpbnNlcnRTb3J0ZWQodGhpcy5zdGF0ZS5vdmVybGF5cyxcbiAgICAgICAgICAgICAgICAgICAgIHttb2RlOiBtb2RlLCBtb2RlU3BlYzogc3BlYywgb3BhcXVlOiBvcHRpb25zICYmIG9wdGlvbnMub3BhcXVlLFxuICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAob3B0aW9ucyAmJiBvcHRpb25zLnByaW9yaXR5KSB8fCAwfSxcbiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdmVybGF5KSB7IHJldHVybiBvdmVybGF5LnByaW9yaXR5OyB9KTtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7XG4gICAgICAgIHJlZ0NoYW5nZSh0aGlzKTtcbiAgICAgIH0pLFxuICAgICAgcmVtb3ZlT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYykge1xuICAgICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG92ZXJsYXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IG92ZXJsYXlzW2ldLm1vZGVTcGVjO1xuICAgICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIGN1ci5uYW1lID09IHNwZWMpIHtcbiAgICAgICAgICAgIG92ZXJsYXlzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubW9kZUdlbisrO1xuICAgICAgICAgICAgcmVnQ2hhbmdlKHRoaXMpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcblxuICAgICAgaW5kZW50TGluZTogbWV0aG9kT3AoZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGlyICE9IFwic3RyaW5nXCIgJiYgdHlwZW9mIGRpciAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgaWYgKGRpciA9PSBudWxsKSB7IGRpciA9IHRoaXMub3B0aW9ucy5zbWFydEluZGVudCA/IFwic21hcnRcIiA6IFwicHJldlwiOyB9XG4gICAgICAgICAgZWxzZSB7IGRpciA9IGRpciA/IFwiYWRkXCIgOiBcInN1YnRyYWN0XCI7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMaW5lKHRoaXMuZG9jLCBuKSkgeyBpbmRlbnRMaW5lKHRoaXMsIG4sIGRpciwgYWdncmVzc2l2ZSk7IH1cbiAgICAgIH0pLFxuICAgICAgaW5kZW50U2VsZWN0aW9uOiBtZXRob2RPcChmdW5jdGlvbihob3cpIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICBpZiAoIXJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgICAgIHZhciBmcm9tID0gcmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBNYXRoLm1heChlbmQsIGZyb20ubGluZSk7XG4gICAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzLmxhc3RMaW5lKCksIHRvLmxpbmUgLSAodG8uY2ggPyAwIDogMSkpICsgMTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKVxuICAgICAgICAgICAgICB7IGluZGVudExpbmUodGhpcywgaiwgaG93KTsgfVxuICAgICAgICAgICAgdmFyIG5ld1JhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXM7XG4gICAgICAgICAgICBpZiAoZnJvbS5jaCA9PSAwICYmIHJhbmdlcy5sZW5ndGggPT0gbmV3UmFuZ2VzLmxlbmd0aCAmJiBuZXdSYW5nZXNbaV0uZnJvbSgpLmNoID4gMClcbiAgICAgICAgICAgICAgeyByZXBsYWNlT25lU2VsZWN0aW9uKHRoaXMuZG9jLCBpLCBuZXcgUmFuZ2UoZnJvbSwgbmV3UmFuZ2VzW2ldLnRvKCkpLCBzZWxfZG9udFNjcm9sbCk7IH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmhlYWQubGluZSA+IGVuZCkge1xuICAgICAgICAgICAgaW5kZW50TGluZSh0aGlzLCByYW5nZS5oZWFkLmxpbmUsIGhvdywgdHJ1ZSk7XG4gICAgICAgICAgICBlbmQgPSByYW5nZS5oZWFkLmxpbmU7XG4gICAgICAgICAgICBpZiAoaSA9PSB0aGlzLmRvYy5zZWwucHJpbUluZGV4KSB7IGVuc3VyZUN1cnNvclZpc2libGUodGhpcyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrc1xuICAgICAgLy8gdGhhdCB3YW50IHRvIGluc3BlY3QgdGhlIG1vZGUgc3RhdGUgKHNheSwgZm9yIGNvbXBsZXRpb24pLlxuICAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zLCBwcmVjaXNlKSB7XG4gICAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVjaXNlKVxuICAgICAgfSxcblxuICAgICAgZ2V0TGluZVRva2VuczogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkge1xuICAgICAgICByZXR1cm4gdGFrZVRva2VuKHRoaXMsIFBvcyhsaW5lKSwgcHJlY2lzZSwgdHJ1ZSlcbiAgICAgIH0sXG5cbiAgICAgIGdldFRva2VuVHlwZUF0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgcG9zKTtcbiAgICAgICAgdmFyIHN0eWxlcyA9IGdldExpbmVTdHlsZXModGhpcywgZ2V0TGluZSh0aGlzLmRvYywgcG9zLmxpbmUpKTtcbiAgICAgICAgdmFyIGJlZm9yZSA9IDAsIGFmdGVyID0gKHN0eWxlcy5sZW5ndGggLSAxKSAvIDIsIGNoID0gcG9zLmNoO1xuICAgICAgICB2YXIgdHlwZTtcbiAgICAgICAgaWYgKGNoID09IDApIHsgdHlwZSA9IHN0eWxlc1syXTsgfVxuICAgICAgICBlbHNlIHsgZm9yICg7Oykge1xuICAgICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7XG4gICAgICAgICAgaWYgKChtaWQgPyBzdHlsZXNbbWlkICogMiAtIDFdIDogMCkgPj0gY2gpIHsgYWZ0ZXIgPSBtaWQ7IH1cbiAgICAgICAgICBlbHNlIGlmIChzdHlsZXNbbWlkICogMiArIDFdIDwgY2gpIHsgYmVmb3JlID0gbWlkICsgMTsgfVxuICAgICAgICAgIGVsc2UgeyB0eXBlID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWsgfVxuICAgICAgICB9IH1cbiAgICAgICAgdmFyIGN1dCA9IHR5cGUgPyB0eXBlLmluZGV4T2YoXCJvdmVybGF5IFwiKSA6IC0xO1xuICAgICAgICByZXR1cm4gY3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNlKDAsIGN1dCAtIDEpXG4gICAgICB9LFxuXG4gICAgICBnZXRNb2RlQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7XG4gICAgICAgIGlmICghbW9kZS5pbm5lck1vZGUpIHsgcmV0dXJuIG1vZGUgfVxuICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5pbm5lck1vZGUobW9kZSwgdGhpcy5nZXRUb2tlbkF0KHBvcykuc3RhdGUpLm1vZGVcbiAgICAgIH0sXG5cbiAgICAgIGdldEhlbHBlcjogZnVuY3Rpb24ocG9zLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhlbHBlcnMocG9zLCB0eXBlKVswXVxuICAgICAgfSxcblxuICAgICAgZ2V0SGVscGVyczogZnVuY3Rpb24ocG9zLCB0eXBlKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IFtdO1xuICAgICAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHsgcmV0dXJuIGZvdW5kIH1cbiAgICAgICAgdmFyIGhlbHAgPSBoZWxwZXJzW3R5cGVdLCBtb2RlID0gdGhpcy5nZXRNb2RlQXQocG9zKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoaGVscFttb2RlW3R5cGVdXSkgeyBmb3VuZC5wdXNoKGhlbHBbbW9kZVt0eXBlXV0pOyB9XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZVt0eXBlXSkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVt0eXBlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbCA9IGhlbHBbbW9kZVt0eXBlXVtpXV07XG4gICAgICAgICAgICBpZiAodmFsKSB7IGZvdW5kLnB1c2godmFsKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChtb2RlLmhlbHBlclR5cGUgJiYgaGVscFttb2RlLmhlbHBlclR5cGVdKSB7XG4gICAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUuaGVscGVyVHlwZV0pO1xuICAgICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkge1xuICAgICAgICAgIGZvdW5kLnB1c2goaGVscFttb2RlLm5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBoZWxwLl9nbG9iYWwubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgIHZhciBjdXIgPSBoZWxwLl9nbG9iYWxbaSQxXTtcbiAgICAgICAgICBpZiAoY3VyLnByZWQobW9kZSwgdGhpcykgJiYgaW5kZXhPZihmb3VuZCwgY3VyLnZhbCkgPT0gLTEpXG4gICAgICAgICAgICB7IGZvdW5kLnB1c2goY3VyLnZhbCk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgIH0sXG5cbiAgICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHtcbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jO1xuICAgICAgICBsaW5lID0gY2xpcExpbmUoZG9jLCBsaW5lID09IG51bGwgPyBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDE6IGxpbmUpO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dEJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSkuc3RhdGVcbiAgICAgIH0sXG5cbiAgICAgIGN1cnNvckNvb3JkczogZnVuY3Rpb24oc3RhcnQsIG1vZGUpIHtcbiAgICAgICAgdmFyIHBvcywgcmFuZ2UgPSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgeyBwb3MgPSByYW5nZS5oZWFkOyB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzdGFydCA9PSBcIm9iamVjdFwiKSB7IHBvcyA9IGNsaXBQb3ModGhpcy5kb2MsIHN0YXJ0KTsgfVxuICAgICAgICBlbHNlIHsgcG9zID0gc3RhcnQgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpOyB9XG4gICAgICAgIHJldHVybiBjdXJzb3JDb29yZHModGhpcywgcG9zLCBtb2RlIHx8IFwicGFnZVwiKVxuICAgICAgfSxcblxuICAgICAgY2hhckNvb3JkczogZnVuY3Rpb24ocG9zLCBtb2RlKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKHRoaXMsIGNsaXBQb3ModGhpcy5kb2MsIHBvcyksIG1vZGUgfHwgXCJwYWdlXCIpXG4gICAgICB9LFxuXG4gICAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUpIHtcbiAgICAgICAgY29vcmRzID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIGNvb3JkcywgbW9kZSB8fCBcInBhZ2VcIik7XG4gICAgICAgIHJldHVybiBjb29yZHNDaGFyKHRoaXMsIGNvb3Jkcy5sZWZ0LCBjb29yZHMudG9wKVxuICAgICAgfSxcblxuICAgICAgbGluZUF0SGVpZ2h0OiBmdW5jdGlvbihoZWlnaHQsIG1vZGUpIHtcbiAgICAgICAgaGVpZ2h0ID0gZnJvbUNvb3JkU3lzdGVtKHRoaXMsIHt0b3A6IGhlaWdodCwgbGVmdDogMH0sIG1vZGUgfHwgXCJwYWdlXCIpLnRvcDtcbiAgICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpXG4gICAgICB9LFxuICAgICAgaGVpZ2h0QXRMaW5lOiBmdW5jdGlvbihsaW5lLCBtb2RlLCBpbmNsdWRlV2lkZ2V0cykge1xuICAgICAgICB2YXIgZW5kID0gZmFsc2UsIGxpbmVPYmo7XG4gICAgICAgIGlmICh0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdmFyIGxhc3QgPSB0aGlzLmRvYy5maXJzdCArIHRoaXMuZG9jLnNpemUgLSAxO1xuICAgICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIHsgbGluZSA9IHRoaXMuZG9jLmZpcnN0OyB9XG4gICAgICAgICAgZWxzZSBpZiAobGluZSA+IGxhc3QpIHsgbGluZSA9IGxhc3Q7IGVuZCA9IHRydWU7IH1cbiAgICAgICAgICBsaW5lT2JqID0gZ2V0TGluZSh0aGlzLmRvYywgbGluZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZU9iaiA9IGxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIiwgaW5jbHVkZVdpZGdldHMgfHwgZW5kKS50b3AgK1xuICAgICAgICAgIChlbmQgPyB0aGlzLmRvYy5oZWlnaHQgLSBoZWlnaHRBdExpbmUobGluZU9iaikgOiAwKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdFRleHRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpIH0sXG4gICAgICBkZWZhdWx0Q2hhcldpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYXJXaWR0aCh0aGlzLmRpc3BsYXkpIH0sXG5cbiAgICAgIGdldFZpZXdwb3J0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHtmcm9tOiB0aGlzLmRpc3BsYXkudmlld0Zyb20sIHRvOiB0aGlzLmRpc3BsYXkudmlld1RvfX0sXG5cbiAgICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7XG4gICAgICAgIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5O1xuICAgICAgICBwb3MgPSBjdXJzb3JDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSk7XG4gICAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7XG4gICAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgICBkaXNwbGF5LnNpemVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICBpZiAodmVydCA9PSBcIm92ZXJcIikge1xuICAgICAgICAgIHRvcCA9IHBvcy50b3A7XG4gICAgICAgIH0gZWxzZSBpZiAodmVydCA9PSBcImFib3ZlXCIgfHwgdmVydCA9PSBcIm5lYXJcIikge1xuICAgICAgICAgIHZhciB2c3BhY2UgPSBNYXRoLm1heChkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB0aGlzLmRvYy5oZWlnaHQpLFxuICAgICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGgsIGRpc3BsYXkubGluZVNwYWNlLmNsaWVudFdpZHRoKTtcbiAgICAgICAgICAvLyBEZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGFib3ZlIChpZiBzcGVjaWZpZWQgYW5kIHBvc3NpYmxlKTsgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gcG9zaXRpb25pbmcgYmVsb3dcbiAgICAgICAgICBpZiAoKHZlcnQgPT0gJ2Fib3ZlJyB8fCBwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UpICYmIHBvcy50b3AgPiBub2RlLm9mZnNldEhlaWdodClcbiAgICAgICAgICAgIHsgdG9wID0gcG9zLnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OyB9XG4gICAgICAgICAgZWxzZSBpZiAocG9zLmJvdHRvbSArIG5vZGUub2Zmc2V0SGVpZ2h0IDw9IHZzcGFjZSlcbiAgICAgICAgICAgIHsgdG9wID0gcG9zLmJvdHRvbTsgfVxuICAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSlcbiAgICAgICAgICAgIHsgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0V2lkdGg7IH1cbiAgICAgICAgfVxuICAgICAgICBub2RlLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9IFwiXCI7XG4gICAgICAgIGlmIChob3JpeiA9PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICBsZWZ0ID0gZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9IFwiMHB4XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhvcml6ID09IFwibGVmdFwiKSB7IGxlZnQgPSAwOyB9XG4gICAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gXCJtaWRkbGVcIikgeyBsZWZ0ID0gKGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7IH1cbiAgICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGwpXG4gICAgICAgICAgeyBzY3JvbGxJbnRvVmlldyh0aGlzLCB7bGVmdDogbGVmdCwgdG9wOiB0b3AsIHJpZ2h0OiBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgYm90dG9tOiB0b3AgKyBub2RlLm9mZnNldEhlaWdodH0pOyB9XG4gICAgICB9LFxuXG4gICAgICB0cmlnZ2VyT25LZXlEb3duOiBtZXRob2RPcChvbktleURvd24pLFxuICAgICAgdHJpZ2dlck9uS2V5UHJlc3M6IG1ldGhvZE9wKG9uS2V5UHJlc3MpLFxuICAgICAgdHJpZ2dlck9uS2V5VXA6IG9uS2V5VXAsXG4gICAgICB0cmlnZ2VyT25Nb3VzZURvd246IG1ldGhvZE9wKG9uTW91c2VEb3duKSxcblxuICAgICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNtZCkge1xuICAgICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSlcbiAgICAgICAgICB7IHJldHVybiBjb21tYW5kc1tjbWRdLmNhbGwobnVsbCwgdGhpcykgfVxuICAgICAgfSxcblxuICAgICAgdHJpZ2dlckVsZWN0cmljOiBtZXRob2RPcChmdW5jdGlvbih0ZXh0KSB7IHRyaWdnZXJFbGVjdHJpYyh0aGlzLCB0ZXh0KTsgfSksXG5cbiAgICAgIGZpbmRQb3NIOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIHZpc3VhbGx5KSB7XG4gICAgICAgIHZhciBkaXIgPSAxO1xuICAgICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfVxuICAgICAgICB2YXIgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgICBjdXIgPSBmaW5kUG9zSCh0aGlzLmRvYywgY3VyLCBkaXIsIHVuaXQsIHZpc3VhbGx5KTtcbiAgICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJcbiAgICAgIH0sXG5cbiAgICAgIG1vdmVIOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMkMS5kaXNwbGF5LnNoaWZ0IHx8IHRoaXMkMS5kb2MuZXh0ZW5kIHx8IHJhbmdlLmVtcHR5KCkpXG4gICAgICAgICAgICB7IHJldHVybiBmaW5kUG9zSCh0aGlzJDEuZG9jLCByYW5nZS5oZWFkLCBkaXIsIHVuaXQsIHRoaXMkMS5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSkgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHsgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpIH1cbiAgICAgICAgfSwgc2VsX21vdmUpO1xuICAgICAgfSksXG5cbiAgICAgIGRlbGV0ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYztcbiAgICAgICAgaWYgKHNlbC5zb21ldGhpbmdTZWxlY3RlZCgpKVxuICAgICAgICAgIHsgZG9jLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCIrZGVsZXRlXCIpOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IGRlbGV0ZU5lYXJTZWxlY3Rpb24odGhpcywgZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBmaW5kUG9zSChkb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyB7ZnJvbTogb3RoZXIsIHRvOiByYW5nZS5oZWFkfSA6IHtmcm9tOiByYW5nZS5oZWFkLCB0bzogb3RoZXJ9XG4gICAgICAgICAgfSk7IH1cbiAgICAgIH0pLFxuXG4gICAgICBmaW5kUG9zVjogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7XG4gICAgICAgIHZhciBkaXIgPSAxLCB4ID0gZ29hbENvbHVtbjtcbiAgICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3VudCA9IC1hbW91bnQ7IH1cbiAgICAgICAgdmFyIGN1ciA9IGNsaXBQb3ModGhpcy5kb2MsIGZyb20pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFtb3VudDsgKytpKSB7XG4gICAgICAgICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjdXIsIFwiZGl2XCIpO1xuICAgICAgICAgIGlmICh4ID09IG51bGwpIHsgeCA9IGNvb3Jkcy5sZWZ0OyB9XG4gICAgICAgICAgZWxzZSB7IGNvb3Jkcy5sZWZ0ID0geDsgfVxuICAgICAgICAgIGN1ciA9IGZpbmRQb3NWKHRoaXMsIGNvb3JkcywgZGlyLCB1bml0KTtcbiAgICAgICAgICBpZiAoY3VyLmhpdFNpZGUpIHsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJcbiAgICAgIH0sXG5cbiAgICAgIG1vdmVWOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBnb2FscyA9IFtdO1xuICAgICAgICB2YXIgY29sbGFwc2UgPSAhdGhpcy5kaXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTtcbiAgICAgICAgZG9jLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICBpZiAoY29sbGFwc2UpXG4gICAgICAgICAgICB7IHJldHVybiBkaXIgPCAwID8gcmFuZ2UuZnJvbSgpIDogcmFuZ2UudG8oKSB9XG4gICAgICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHModGhpcyQxLCByYW5nZS5oZWFkLCBcImRpdlwiKTtcbiAgICAgICAgICBpZiAocmFuZ2UuZ29hbENvbHVtbiAhPSBudWxsKSB7IGhlYWRQb3MubGVmdCA9IHJhbmdlLmdvYWxDb2x1bW47IH1cbiAgICAgICAgICBnb2Fscy5wdXNoKGhlYWRQb3MubGVmdCk7XG4gICAgICAgICAgdmFyIHBvcyA9IGZpbmRQb3NWKHRoaXMkMSwgaGVhZFBvcywgZGlyLCB1bml0KTtcbiAgICAgICAgICBpZiAodW5pdCA9PSBcInBhZ2VcIiAmJiByYW5nZSA9PSBkb2Muc2VsLnByaW1hcnkoKSlcbiAgICAgICAgICAgIHsgYWRkVG9TY3JvbGxUb3AodGhpcyQxLCBjaGFyQ29vcmRzKHRoaXMkMSwgcG9zLCBcImRpdlwiKS50b3AgLSBoZWFkUG9zLnRvcCk7IH1cbiAgICAgICAgICByZXR1cm4gcG9zXG4gICAgICAgIH0sIHNlbF9tb3ZlKTtcbiAgICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgZG9jLnNlbC5yYW5nZXNbaV0uZ29hbENvbHVtbiA9IGdvYWxzW2ldOyB9IH1cbiAgICAgIH0pLFxuXG4gICAgICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuXG4gICAgICBmaW5kV29yZEF0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jLCBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKS50ZXh0O1xuICAgICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDtcbiAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICB2YXIgaGVscGVyID0gdGhpcy5nZXRIZWxwZXIocG9zLCBcIndvcmRDaGFyc1wiKTtcbiAgICAgICAgICBpZiAoKHBvcy5zdGlja3kgPT0gXCJiZWZvcmVcIiB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSB7IC0tc3RhcnQ7IH0gZWxzZSB7ICsrZW5kOyB9XG4gICAgICAgICAgdmFyIHN0YXJ0Q2hhciA9IGxpbmUuY2hhckF0KHN0YXJ0KTtcbiAgICAgICAgICB2YXIgY2hlY2sgPSBpc1dvcmRDaGFyKHN0YXJ0Q2hhciwgaGVscGVyKVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH1cbiAgICAgICAgICAgIDogL1xccy8udGVzdChzdGFydENoYXIpID8gZnVuY3Rpb24gKGNoKSB7IHJldHVybiAvXFxzLy50ZXN0KGNoKTsgfVxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuICghL1xccy8udGVzdChjaCkgJiYgIWlzV29yZENoYXIoY2gpKTsgfTtcbiAgICAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgY2hlY2sobGluZS5jaGFyQXQoZW5kKSkpIHsgKytlbmQ7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpXG4gICAgICB9LFxuXG4gICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRoaXMuc3RhdGUub3ZlcndyaXRlKSB7IHJldHVybiB9XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJ3cml0ZSA9ICF0aGlzLnN0YXRlLm92ZXJ3cml0ZSlcbiAgICAgICAgICB7IGFkZENsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIik7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgcm1DbGFzcyh0aGlzLmRpc3BsYXkuY3Vyc29yRGl2LCBcIkNvZGVNaXJyb3Itb3ZlcndyaXRlXCIpOyB9XG5cbiAgICAgICAgc2lnbmFsKHRoaXMsIFwib3ZlcndyaXRlVG9nZ2xlXCIsIHRoaXMsIHRoaXMuc3RhdGUub3ZlcndyaXRlKTtcbiAgICAgIH0sXG4gICAgICBoYXNGb2N1czogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSA9PSBhY3RpdmVFbHQoKSB9LFxuICAgICAgaXNSZWFkT25seTogZnVuY3Rpb24oKSB7IHJldHVybiAhISh0aGlzLm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5kb2MuY2FudEVkaXQpIH0sXG5cbiAgICAgIHNjcm9sbFRvOiBtZXRob2RPcChmdW5jdGlvbiAoeCwgeSkgeyBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCB4LCB5KTsgfSksXG4gICAgICBnZXRTY3JvbGxJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNjcm9sbGVyID0gdGhpcy5kaXNwbGF5LnNjcm9sbGVyO1xuICAgICAgICByZXR1cm4ge2xlZnQ6IHNjcm9sbGVyLnNjcm9sbExlZnQsIHRvcDogc2Nyb2xsZXIuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICAgIGhlaWdodDogc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsR2FwKHRoaXMpIC0gdGhpcy5kaXNwbGF5LmJhckhlaWdodCxcbiAgICAgICAgICAgICAgICB3aWR0aDogc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgY2xpZW50SGVpZ2h0OiBkaXNwbGF5SGVpZ2h0KHRoaXMpLCBjbGllbnRXaWR0aDogZGlzcGxheVdpZHRoKHRoaXMpfVxuICAgICAgfSxcblxuICAgICAgc2Nyb2xsSW50b1ZpZXc6IG1ldGhvZE9wKGZ1bmN0aW9uKHJhbmdlLCBtYXJnaW4pIHtcbiAgICAgICAgaWYgKHJhbmdlID09IG51bGwpIHtcbiAgICAgICAgICByYW5nZSA9IHtmcm9tOiB0aGlzLmRvYy5zZWwucHJpbWFyeSgpLmhlYWQsIHRvOiBudWxsfTtcbiAgICAgICAgICBpZiAobWFyZ2luID09IG51bGwpIHsgbWFyZ2luID0gdGhpcy5vcHRpb25zLmN1cnNvclNjcm9sbE1hcmdpbjsgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYW5nZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7ZnJvbTogUG9zKHJhbmdlLCAwKSwgdG86IG51bGx9O1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmZyb20gPT0gbnVsbCkge1xuICAgICAgICAgIHJhbmdlID0ge2Zyb206IHJhbmdlLCB0bzogbnVsbH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYW5nZS50bykgeyByYW5nZS50byA9IHJhbmdlLmZyb207IH1cbiAgICAgICAgcmFuZ2UubWFyZ2luID0gbWFyZ2luIHx8IDA7XG5cbiAgICAgICAgaWYgKHJhbmdlLmZyb20ubGluZSAhPSBudWxsKSB7XG4gICAgICAgICAgc2Nyb2xsVG9SYW5nZSh0aGlzLCByYW5nZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsVG9Db29yZHNSYW5nZSh0aGlzLCByYW5nZS5mcm9tLCByYW5nZS50bywgcmFuZ2UubWFyZ2luKTtcbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIHNldFNpemU6IG1ldGhvZE9wKGZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgICAgdmFyIGludGVycHJldCA9IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIiB8fCAvXlxcZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArIFwicHhcIiA6IHZhbDsgfTtcbiAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuc3R5bGUud2lkdGggPSBpbnRlcnByZXQod2lkdGgpOyB9XG4gICAgICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgeyB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpbnRlcnByZXQoaGVpZ2h0KTsgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOyB9XG4gICAgICAgIHZhciBsaW5lTm8gPSB0aGlzLmRpc3BsYXkudmlld0Zyb207XG4gICAgICAgIHRoaXMuZG9jLml0ZXIobGluZU5vLCB0aGlzLmRpc3BsYXkudmlld1RvLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB7IGlmIChsaW5lLndpZGdldHNbaV0ubm9IU2Nyb2xsKSB7IHJlZ0xpbmVDaGFuZ2UodGhpcyQxLCBsaW5lTm8sIFwid2lkZ2V0XCIpOyBicmVhayB9IH0gfVxuICAgICAgICAgICsrbGluZU5vO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHNpZ25hbCh0aGlzLCBcInJlZnJlc2hcIiwgdGhpcyk7XG4gICAgICB9KSxcblxuICAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gcnVuSW5PcCh0aGlzLCBmKX0sXG4gICAgICBzdGFydE9wZXJhdGlvbjogZnVuY3Rpb24oKXtyZXR1cm4gc3RhcnRPcGVyYXRpb24odGhpcyl9LFxuICAgICAgZW5kT3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBlbmRPcGVyYXRpb24odGhpcyl9LFxuXG4gICAgICByZWZyZXNoOiBtZXRob2RPcChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG9sZEhlaWdodCA9IHRoaXMuZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0O1xuICAgICAgICByZWdDaGFuZ2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgICBjbGVhckNhY2hlcyh0aGlzKTtcbiAgICAgICAgc2Nyb2xsVG9Db29yZHModGhpcywgdGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTtcbiAgICAgICAgdXBkYXRlR3V0dGVyU3BhY2UodGhpcy5kaXNwbGF5KTtcbiAgICAgICAgaWYgKG9sZEhlaWdodCA9PSBudWxsIHx8IE1hdGguYWJzKG9sZEhlaWdodCAtIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KSkgPiAuNSlcbiAgICAgICAgICB7IGVzdGltYXRlTGluZUhlaWdodHModGhpcyk7IH1cbiAgICAgICAgc2lnbmFsKHRoaXMsIFwicmVmcmVzaFwiLCB0aGlzKTtcbiAgICAgIH0pLFxuXG4gICAgICBzd2FwRG9jOiBtZXRob2RPcChmdW5jdGlvbihkb2MpIHtcbiAgICAgICAgdmFyIG9sZCA9IHRoaXMuZG9jO1xuICAgICAgICBvbGQuY20gPSBudWxsO1xuICAgICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgdGV4dCBzZWxlY3Rpb24gaWYgYW55ICgjNTgyMSlcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW5nVGV4dCkgeyB0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQoKTsgfVxuICAgICAgICBhdHRhY2hEb2ModGhpcywgZG9jKTtcbiAgICAgICAgY2xlYXJDYWNoZXModGhpcyk7XG4gICAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCBkb2Muc2Nyb2xsTGVmdCwgZG9jLnNjcm9sbFRvcCk7XG4gICAgICAgIHRoaXMuY3VyT3AuZm9yY2VTY3JvbGwgPSB0cnVlO1xuICAgICAgICBzaWduYWxMYXRlcih0aGlzLCBcInN3YXBEb2NcIiwgdGhpcywgb2xkKTtcbiAgICAgICAgcmV0dXJuIG9sZFxuICAgICAgfSksXG5cbiAgICAgIHBocmFzZTogZnVuY3Rpb24ocGhyYXNlVGV4dCkge1xuICAgICAgICB2YXIgcGhyYXNlcyA9IHRoaXMub3B0aW9ucy5waHJhc2VzO1xuICAgICAgICByZXR1cm4gcGhyYXNlcyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGhyYXNlcywgcGhyYXNlVGV4dCkgPyBwaHJhc2VzW3BocmFzZVRleHRdIDogcGhyYXNlVGV4dFxuICAgICAgfSxcblxuICAgICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCl9LFxuICAgICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS53cmFwcGVyfSxcbiAgICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxcbiAgICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5ndXR0ZXJzfVxuICAgIH07XG4gICAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTtcblxuICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSB7IGhlbHBlcnNbdHlwZV0gPSBDb2RlTWlycm9yW3R5cGVdID0ge19nbG9iYWw6IFtdfTsgfVxuICAgICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gICAgQ29kZU1pcnJvci5yZWdpc3Rlckdsb2JhbEhlbHBlciA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHByZWRpY2F0ZSwgdmFsdWUpIHtcbiAgICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgaGVscGVyc1t0eXBlXS5fZ2xvYmFsLnB1c2goe3ByZWQ6IHByZWRpY2F0ZSwgdmFsOiB2YWx1ZX0pO1xuICAgIH07XG4gIH1cblxuICAvLyBVc2VkIGZvciBob3Jpem9udGFsIHJlbGF0aXZlIG1vdGlvbi4gRGlyIGlzIC0xIG9yIDEgKGxlZnQgb3JcbiAgLy8gcmlnaHQpLCB1bml0IGNhbiBiZSBcImNoYXJcIiwgXCJjb2x1bW5cIiAobGlrZSBjaGFyLCBidXQgZG9lc24ndFxuICAvLyBjcm9zcyBsaW5lIGJvdW5kYXJpZXMpLCBcIndvcmRcIiAoYWNyb3NzIG5leHQgd29yZCksIG9yIFwiZ3JvdXBcIiAodG9cbiAgLy8gdGhlIHN0YXJ0IG9mIG5leHQgZ3JvdXAgb2Ygd29yZCBvciBub24td29yZC1ub24td2hpdGVzcGFjZVxuICAvLyBjaGFycykuIFRoZSB2aXN1YWxseSBwYXJhbSBjb250cm9scyB3aGV0aGVyLCBpbiByaWdodC10by1sZWZ0XG4gIC8vIHRleHQsIGRpcmVjdGlvbiAxIG1lYW5zIHRvIG1vdmUgdG93YXJkcyB0aGUgbmV4dCBpbmRleCBpbiB0aGVcbiAgLy8gc3RyaW5nLCBvciB0b3dhcmRzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gIC8vIHBvc2l0aW9uLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZVxuICAvLyBwcm9wZXJ0eSBpZiBpdCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBmaW5kUG9zSChkb2MsIHBvcywgZGlyLCB1bml0LCB2aXN1YWxseSkge1xuICAgIHZhciBvbGRQb3MgPSBwb3M7XG4gICAgdmFyIG9yaWdEaXIgPSBkaXI7XG4gICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpO1xuICAgIHZhciBsaW5lRGlyID0gdmlzdWFsbHkgJiYgZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiID8gLWRpciA6IGRpcjtcbiAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUoKSB7XG4gICAgICB2YXIgbCA9IHBvcy5saW5lICsgbGluZURpcjtcbiAgICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwgPj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIHBvcyA9IG5ldyBQb3MobCwgcG9zLmNoLCBwb3Muc3RpY2t5KTtcbiAgICAgIHJldHVybiBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGwpXG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7XG4gICAgICB2YXIgbmV4dDtcbiAgICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgICBuZXh0ID0gbW92ZVZpc3VhbGx5KGRvYy5jbSwgbGluZU9iaiwgcG9zLCBkaXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IG1vdmVMb2dpY2FsbHkobGluZU9iaiwgcG9zLCBkaXIpO1xuICAgICAgfVxuICAgICAgaWYgKG5leHQgPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZpbmROZXh0TGluZSgpKVxuICAgICAgICAgIHsgcG9zID0gZW5kT2ZMaW5lKHZpc3VhbGx5LCBkb2MuY20sIGxpbmVPYmosIHBvcy5saW5lLCBsaW5lRGlyKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zID0gbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHVuaXQgPT0gXCJjaGFyXCIpIHtcbiAgICAgIG1vdmVPbmNlKCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09IFwiY29sdW1uXCIpIHtcbiAgICAgIG1vdmVPbmNlKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PSBcIndvcmRcIiB8fCB1bml0ID09IFwiZ3JvdXBcIikge1xuICAgICAgdmFyIHNhd1R5cGUgPSBudWxsLCBncm91cCA9IHVuaXQgPT0gXCJncm91cFwiO1xuICAgICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVscGVyKHBvcywgXCJ3b3JkQ2hhcnNcIik7XG4gICAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkaXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSB7IGJyZWFrIH1cbiAgICAgICAgdmFyIGN1ciA9IGxpbmVPYmoudGV4dC5jaGFyQXQocG9zLmNoKSB8fCBcIlxcblwiO1xuICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gXCJ3XCJcbiAgICAgICAgICA6IGdyb3VwICYmIGN1ciA9PSBcIlxcblwiID8gXCJuXCJcbiAgICAgICAgICA6ICFncm91cCB8fCAvXFxzLy50ZXN0KGN1cikgPyBudWxsXG4gICAgICAgICAgOiBcInBcIjtcbiAgICAgICAgaWYgKGdyb3VwICYmICFmaXJzdCAmJiAhdHlwZSkgeyB0eXBlID0gXCJzXCI7IH1cbiAgICAgICAgaWYgKHNhd1R5cGUgJiYgc2F3VHlwZSAhPSB0eXBlKSB7XG4gICAgICAgICAgaWYgKGRpciA8IDApIHtkaXIgPSAxOyBtb3ZlT25jZSgpOyBwb3Muc3RpY2t5ID0gXCJhZnRlclwiO31cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUpIHsgc2F3VHlwZSA9IHR5cGU7IH1cbiAgICAgICAgaWYgKGRpciA+IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBvcmlnRGlyLCB0cnVlKTtcbiAgICBpZiAoZXF1YWxDdXJzb3JQb3Mob2xkUG9zLCByZXN1bHQpKSB7IHJlc3VsdC5oaXRTaWRlID0gdHJ1ZTsgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIEZvciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAtMSBvciAxLiBVbml0IGNhbiBiZVxuICAvLyBcInBhZ2VcIiBvciBcImxpbmVcIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWVcbiAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5O1xuICAgIGlmICh1bml0ID09IFwicGFnZVwiKSB7XG4gICAgICB2YXIgcGFnZVNpemUgPSBNYXRoLm1pbihjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICB2YXIgbW92ZUFtb3VudCA9IE1hdGgubWF4KHBhZ2VTaXplIC0gLjUgKiB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCAzKTtcbiAgICAgIHkgPSAoZGlyID4gMCA/IHBvcy5ib3R0b20gOiBwb3MudG9wKSArIGRpciAqIG1vdmVBbW91bnQ7XG5cbiAgICB9IGVsc2UgaWYgKHVuaXQgPT0gXCJsaW5lXCIpIHtcbiAgICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMgOiBwb3MudG9wIC0gMztcbiAgICB9XG4gICAgdmFyIHRhcmdldDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0YXJnZXQgPSBjb29yZHNDaGFyKGNtLCB4LCB5KTtcbiAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIHsgYnJlYWsgfVxuICAgICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhayB9XG4gICAgICB5ICs9IGRpciAqIDU7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRcbiAgfVxuXG4gIC8vIENPTlRFTlRFRElUQUJMRSBJTlBVVCBTVFlMRVxuXG4gIHZhciBDb250ZW50RWRpdGFibGVJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgdGhpcy5jbSA9IGNtO1xuICAgIHRoaXMubGFzdEFuY2hvck5vZGUgPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSB0aGlzLmxhc3RGb2N1c05vZGUgPSB0aGlzLmxhc3RGb2N1c09mZnNldCA9IG51bGw7XG4gICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgdGhpcy5ncmFjZVBlcmlvZCA9IGZhbHNlO1xuICAgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGRpc3BsYXkpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSBpbnB1dC5jbTtcbiAgICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2O1xuICAgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2LCBjbS5vcHRpb25zLnNwZWxsY2hlY2ssIGNtLm9wdGlvbnMuYXV0b2NvcnJlY3QsIGNtLm9wdGlvbnMuYXV0b2NhcGl0YWxpemUpO1xuXG4gICAgb24oZGl2LCBcInBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGhhbmRsZVBhc3RlKGUsIGNtKSkgeyByZXR1cm4gfVxuICAgICAgLy8gSUUgZG9lc24ndCBmaXJlIGlucHV0IGV2ZW50cywgc28gd2Ugc2NoZWR1bGUgYSByZWFkIGZvciB0aGUgcGFzdGVkIGNvbnRlbnQgaW4gdGhpcyB3YXlcbiAgICAgIGlmIChpZV92ZXJzaW9uIDw9IDExKSB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEudXBkYXRlRnJvbURPTSgpOyB9KSwgMjApOyB9XG4gICAgfSk7XG5cbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdGhpcyQxLmNvbXBvc2luZyA9IHtkYXRhOiBlLmRhdGEsIGRvbmU6IGZhbHNlfTtcbiAgICB9KTtcbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb251cGRhdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghdGhpcyQxLmNvbXBvc2luZykgeyB0aGlzJDEuY29tcG9zaW5nID0ge2RhdGE6IGUuZGF0YSwgZG9uZTogZmFsc2V9OyB9XG4gICAgfSk7XG4gICAgb24oZGl2LCBcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgICBpZiAoZS5kYXRhICE9IHRoaXMkMS5jb21wb3NpbmcuZGF0YSkgeyB0aGlzJDEucmVhZEZyb21ET01Tb29uKCk7IH1cbiAgICAgICAgdGhpcyQxLmNvbXBvc2luZy5kb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG9uKGRpdiwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0LmZvcmNlQ29tcG9zaXRpb25FbmQoKTsgfSk7XG5cbiAgICBvbihkaXYsIFwiaW5wdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCF0aGlzJDEuY29tcG9zaW5nKSB7IHRoaXMkMS5yZWFkRnJvbURPTVNvb24oKTsgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gb25Db3B5Q3V0KGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiBmYWxzZSwgdGV4dDogY20uZ2V0U2VsZWN0aW9ucygpfSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiB0cnVlLCB0ZXh0OiByYW5nZXMudGV4dH0pO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHtcbiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7XG4gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIGUuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgICAgLy8gaU9TIGV4cG9zZXMgdGhlIGNsaXBib2FyZCBBUEksIGJ1dCBzZWVtcyB0byBkaXNjYXJkIGNvbnRlbnQgaW5zZXJ0ZWQgaW50byBpdFxuICAgICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YShcIlRleHRcIiwgY29udGVudCk7XG4gICAgICAgIGlmIChlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIikgPT0gY29udGVudCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2xkLWZhc2hpb25lZCBicmllZmx5LWZvY3VzLWEtdGV4dGFyZWEgaGFja1xuICAgICAgdmFyIGtsdWRnZSA9IGhpZGRlblRleHRhcmVhKCksIHRlID0ga2x1ZGdlLmZpcnN0Q2hpbGQ7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTtcbiAgICAgIHRlLnZhbHVlID0gbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIik7XG4gICAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgc2VsZWN0SW5wdXQodGUpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGtsdWRnZSk7XG4gICAgICAgIGhhZEZvY3VzLmZvY3VzKCk7XG4gICAgICAgIGlmIChoYWRGb2N1cyA9PSBkaXYpIHsgaW5wdXQuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgICBvbihkaXYsIFwiY29weVwiLCBvbkNvcHlDdXQpO1xuICAgIG9uKGRpdiwgXCJjdXRcIiwgb25Db3B5Q3V0KTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbih0aGlzLmNtLCBmYWxzZSk7XG4gICAgcmVzdWx0LmZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSB0aGlzLmRpdjtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNob3dTZWxlY3Rpb24gPSBmdW5jdGlvbiAoaW5mbywgdGFrZUZvY3VzKSB7XG4gICAgaWYgKCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICBpZiAoaW5mby5mb2N1cyB8fCB0YWtlRm9jdXMpIHsgdGhpcy5zaG93UHJpbWFyeVNlbGVjdGlvbigpOyB9XG4gICAgdGhpcy5zaG93TXVsdGlwbGVTZWxlY3Rpb25zKGluZm8pO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY20uZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuZ2V0U2VsZWN0aW9uKClcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd1ByaW1hcnlTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksIGNtID0gdGhpcy5jbSwgcHJpbSA9IGNtLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgIHZhciBmcm9tID0gcHJpbS5mcm9tKCksIHRvID0gcHJpbS50bygpO1xuXG4gICAgaWYgKGNtLmRpc3BsYXkudmlld1RvID09IGNtLmRpc3BsYXkudmlld0Zyb20gfHwgZnJvbS5saW5lID49IGNtLmRpc3BsYXkudmlld1RvIHx8IHRvLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY3VyQW5jaG9yID0gZG9tVG9Qb3MoY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTtcbiAgICB2YXIgY3VyRm9jdXMgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgICBpZiAoY3VyQW5jaG9yICYmICFjdXJBbmNob3IuYmFkICYmIGN1ckZvY3VzICYmICFjdXJGb2N1cy5iYWQgJiZcbiAgICAgICAgY21wKG1pblBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgZnJvbSkgPT0gMCAmJlxuICAgICAgICBjbXAobWF4UG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCB0bykgPT0gMClcbiAgICAgIHsgcmV0dXJuIH1cblxuICAgIHZhciB2aWV3ID0gY20uZGlzcGxheS52aWV3O1xuICAgIHZhciBzdGFydCA9IChmcm9tLmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBwb3NUb0RPTShjbSwgZnJvbSkpIHx8XG4gICAgICAgIHtub2RlOiB2aWV3WzBdLm1lYXN1cmUubWFwWzJdLCBvZmZzZXQ6IDB9O1xuICAgIHZhciBlbmQgPSB0by5saW5lIDwgY20uZGlzcGxheS52aWV3VG8gJiYgcG9zVG9ET00oY20sIHRvKTtcbiAgICBpZiAoIWVuZCkge1xuICAgICAgdmFyIG1lYXN1cmUgPSB2aWV3W3ZpZXcubGVuZ3RoIC0gMV0ubWVhc3VyZTtcbiAgICAgIHZhciBtYXAgPSBtZWFzdXJlLm1hcHMgPyBtZWFzdXJlLm1hcHNbbWVhc3VyZS5tYXBzLmxlbmd0aCAtIDFdIDogbWVhc3VyZS5tYXA7XG4gICAgICBlbmQgPSB7bm9kZTogbWFwW21hcC5sZW5ndGggLSAxXSwgb2Zmc2V0OiBtYXBbbWFwLmxlbmd0aCAtIDJdIC0gbWFwW21hcC5sZW5ndGggLSAzXX07XG4gICAgfVxuXG4gICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgb2xkID0gc2VsLnJhbmdlQ291bnQgJiYgc2VsLmdldFJhbmdlQXQoMCksIHJuZztcbiAgICB0cnkgeyBybmcgPSByYW5nZShzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQsIGVuZC5vZmZzZXQsIGVuZC5ub2RlKTsgfVxuICAgIGNhdGNoKGUpIHt9IC8vIE91ciBtb2RlbCBvZiB0aGUgRE9NIG1pZ2h0IGJlIG91dGRhdGVkLCBpbiB3aGljaCBjYXNlIHRoZSByYW5nZSB3ZSB0cnkgdG8gc2V0IGNhbiBiZSBpbXBvc3NpYmxlXG4gICAgaWYgKHJuZykge1xuICAgICAgaWYgKCFnZWNrbyAmJiBjbS5zdGF0ZS5mb2N1c2VkKSB7XG4gICAgICAgIHNlbC5jb2xsYXBzZShzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpO1xuICAgICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgICB9XG4gICAgICBpZiAob2xkICYmIHNlbC5hbmNob3JOb2RlID09IG51bGwpIHsgc2VsLmFkZFJhbmdlKG9sZCk7IH1cbiAgICAgIGVsc2UgaWYgKGdlY2tvKSB7IHRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpOyB9XG4gICAgfVxuICAgIHRoaXMucmVtZW1iZXJTZWxlY3Rpb24oKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc3RhcnRHcmFjZVBlcmlvZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2QpO1xuICAgIHRoaXMuZ3JhY2VQZXJpb2QgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMkMS5ncmFjZVBlcmlvZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMkMS5zZWxlY3Rpb25DaGFuZ2VkKCkpXG4gICAgICAgIHsgdGhpcyQxLmNtLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7IH0pOyB9XG4gICAgfSwgMjApO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zaG93TXVsdGlwbGVTZWxlY3Rpb25zID0gZnVuY3Rpb24gKGluZm8pIHtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuY3Vyc29yRGl2LCBpbmZvLmN1cnNvcnMpO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsIGluZm8uc2VsZWN0aW9uKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVtZW1iZXJTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHNlbC5hbmNob3JOb2RlOyB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgIHRoaXMubGFzdEZvY3VzTm9kZSA9IHNlbC5mb2N1c05vZGU7IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zZWxlY3Rpb25JbkVkaXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbC5yYW5nZUNvdW50KSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5vZGUgPSBzZWwuZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcbiAgICByZXR1cm4gY29udGFpbnModGhpcy5kaXYsIG5vZGUpXG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9IHRoaXMuZGl2KVxuICAgICAgICB7IHRoaXMuc2hvd1NlbGVjdGlvbih0aGlzLnByZXBhcmVTZWxlY3Rpb24oKSwgdHJ1ZSk7IH1cbiAgICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5kaXYuYmx1cigpOyB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZ2V0RmllbGQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmRpdiB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdHJ1ZSB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dCA9IHRoaXM7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSlcbiAgICAgIHsgdGhpcy5wb2xsU2VsZWN0aW9uKCk7IH1cbiAgICBlbHNlXG4gICAgICB7IHJ1bkluT3AodGhpcy5jbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5wdXQuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7IH0pOyB9XG5cbiAgICBmdW5jdGlvbiBwb2xsKCkge1xuICAgICAgaWYgKGlucHV0LmNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgICAgaW5wdXQucG9sbFNlbGVjdGlvbigpO1xuICAgICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNlbGVjdGlvbkNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHNlbC5hbmNob3JOb2RlICE9IHRoaXMubGFzdEFuY2hvck5vZGUgfHwgc2VsLmFuY2hvck9mZnNldCAhPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgfHxcbiAgICAgIHNlbC5mb2N1c05vZGUgIT0gdGhpcy5sYXN0Rm9jdXNOb2RlIHx8IHNlbC5mb2N1c09mZnNldCAhPSB0aGlzLmxhc3RGb2N1c09mZnNldFxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5wb2xsU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwgfHwgdGhpcy5ncmFjZVBlcmlvZCB8fCAhdGhpcy5zZWxlY3Rpb25DaGFuZ2VkKCkpIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKSwgY20gPSB0aGlzLmNtO1xuICAgIC8vIE9uIEFuZHJvaWQgQ2hyb21lICh2ZXJzaW9uIDU2LCBhdCBsZWFzdCksIGJhY2tzcGFjaW5nIGludG8gYW5cbiAgICAvLyB1bmVkaXRhYmxlIGJsb2NrIGVsZW1lbnQgd2lsbCBwdXQgdGhlIGN1cnNvciBpbiB0aGF0IGVsZW1lbnQsXG4gICAgLy8gYW5kIHRoZW4sIGJlY2F1c2UgaXQncyBub3QgZWRpdGFibGUsIGhpZGUgdGhlIHZpcnR1YWwga2V5Ym9hcmQuXG4gICAgLy8gQmVjYXVzZSBBbmRyb2lkIGRvZXNuJ3QgYWxsb3cgdXMgdG8gYWN0dWFsbHkgZGV0ZWN0IGJhY2tzcGFjZVxuICAgIC8vIHByZXNzZXMgaW4gYSBzYW5lIHdheSwgdGhpcyBjb2RlIGNoZWNrcyBmb3Igd2hlbiB0aGF0IGhhcHBlbnNcbiAgICAvLyBhbmQgc2ltdWxhdGVzIGEgYmFja3NwYWNlIHByZXNzIGluIHRoaXMgY2FzZS5cbiAgICBpZiAoYW5kcm9pZCAmJiBjaHJvbWUgJiYgdGhpcy5jbS5kaXNwbGF5Lmd1dHRlclNwZWNzLmxlbmd0aCAmJiBpc0luR3V0dGVyKHNlbC5hbmNob3JOb2RlKSkge1xuICAgICAgdGhpcy5jbS50cmlnZ2VyT25LZXlEb3duKHt0eXBlOiBcImtleWRvd25cIiwga2V5Q29kZTogOCwgcHJldmVudERlZmF1bHQ6IE1hdGguYWJzfSk7XG4gICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7XG4gICAgdmFyIGFuY2hvciA9IGRvbVRvUG9zKGNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7XG4gICAgdmFyIGhlYWQgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgICBpZiAoYW5jaG9yICYmIGhlYWQpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0U2VsZWN0aW9uKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCksIHNlbF9kb250U2Nyb2xsKTtcbiAgICAgIGlmIChhbmNob3IuYmFkIHx8IGhlYWQuYmFkKSB7IGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9XG4gICAgfSk7IH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVhZERPTVRpbWVvdXQpO1xuICAgICAgdGhpcy5yZWFkRE9NVGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNlbCA9IGNtLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKTtcbiAgICBpZiAoZnJvbS5jaCA9PSAwICYmIGZyb20ubGluZSA+IGNtLmZpcnN0TGluZSgpKVxuICAgICAgeyBmcm9tID0gUG9zKGZyb20ubGluZSAtIDEsIGdldExpbmUoY20uZG9jLCBmcm9tLmxpbmUgLSAxKS5sZW5ndGgpOyB9XG4gICAgaWYgKHRvLmNoID09IGdldExpbmUoY20uZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCAmJiB0by5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICAgIHsgdG8gPSBQb3ModG8ubGluZSArIDEsIDApOyB9XG4gICAgaWYgKGZyb20ubGluZSA8IGRpc3BsYXkudmlld0Zyb20gfHwgdG8ubGluZSA+IGRpc3BsYXkudmlld1RvIC0gMSkgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgdmFyIGZyb21JbmRleCwgZnJvbUxpbmUsIGZyb21Ob2RlO1xuICAgIGlmIChmcm9tLmxpbmUgPT0gZGlzcGxheS52aWV3RnJvbSB8fCAoZnJvbUluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgZnJvbS5saW5lKSkgPT0gMCkge1xuICAgICAgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3WzBdLmxpbmUpO1xuICAgICAgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbMF0ubm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbUxpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W2Zyb21JbmRleF0ubGluZSk7XG4gICAgICBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1tmcm9tSW5kZXggLSAxXS5ub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICB2YXIgdG9JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIHRvLmxpbmUpO1xuICAgIHZhciB0b0xpbmUsIHRvTm9kZTtcbiAgICBpZiAodG9JbmRleCA9PSBkaXNwbGF5LnZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgdG9MaW5lID0gZGlzcGxheS52aWV3VG8gLSAxO1xuICAgICAgdG9Ob2RlID0gZGlzcGxheS5saW5lRGl2Lmxhc3RDaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1t0b0luZGV4ICsgMV0ubGluZSkgLSAxO1xuICAgICAgdG9Ob2RlID0gZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5ub2RlLnByZXZpb3VzU2libGluZztcbiAgICB9XG5cbiAgICBpZiAoIWZyb21Ob2RlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5ld1RleHQgPSBjbS5kb2Muc3BsaXRMaW5lcyhkb21UZXh0QmV0d2VlbihjbSwgZnJvbU5vZGUsIHRvTm9kZSwgZnJvbUxpbmUsIHRvTGluZSkpO1xuICAgIHZhciBvbGRUZXh0ID0gZ2V0QmV0d2VlbihjbS5kb2MsIFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUsIGdldExpbmUoY20uZG9jLCB0b0xpbmUpLnRleHQubGVuZ3RoKSk7XG4gICAgd2hpbGUgKG5ld1RleHQubGVuZ3RoID4gMSAmJiBvbGRUZXh0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChsc3QobmV3VGV4dCkgPT0gbHN0KG9sZFRleHQpKSB7IG5ld1RleHQucG9wKCk7IG9sZFRleHQucG9wKCk7IHRvTGluZS0tOyB9XG4gICAgICBlbHNlIGlmIChuZXdUZXh0WzBdID09IG9sZFRleHRbMF0pIHsgbmV3VGV4dC5zaGlmdCgpOyBvbGRUZXh0LnNoaWZ0KCk7IGZyb21MaW5lKys7IH1cbiAgICAgIGVsc2UgeyBicmVhayB9XG4gICAgfVxuXG4gICAgdmFyIGN1dEZyb250ID0gMCwgY3V0RW5kID0gMDtcbiAgICB2YXIgbmV3VG9wID0gbmV3VGV4dFswXSwgb2xkVG9wID0gb2xkVGV4dFswXSwgbWF4Q3V0RnJvbnQgPSBNYXRoLm1pbihuZXdUb3AubGVuZ3RoLCBvbGRUb3AubGVuZ3RoKTtcbiAgICB3aGlsZSAoY3V0RnJvbnQgPCBtYXhDdXRGcm9udCAmJiBuZXdUb3AuY2hhckNvZGVBdChjdXRGcm9udCkgPT0gb2xkVG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpKVxuICAgICAgeyArK2N1dEZyb250OyB9XG4gICAgdmFyIG5ld0JvdCA9IGxzdChuZXdUZXh0KSwgb2xkQm90ID0gbHN0KG9sZFRleHQpO1xuICAgIHZhciBtYXhDdXRFbmQgPSBNYXRoLm1pbihuZXdCb3QubGVuZ3RoIC0gKG5ld1RleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRCb3QubGVuZ3RoIC0gKG9sZFRleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApKTtcbiAgICB3aGlsZSAoY3V0RW5kIDwgbWF4Q3V0RW5kICYmXG4gICAgICAgICAgIG5ld0JvdC5jaGFyQ29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChvbGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpXG4gICAgICB7ICsrY3V0RW5kOyB9XG4gICAgLy8gVHJ5IHRvIG1vdmUgc3RhcnQgb2YgY2hhbmdlIHRvIHN0YXJ0IG9mIHNlbGVjdGlvbiBpZiBhbWJpZ3VvdXNcbiAgICBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSAmJiBvbGRUZXh0Lmxlbmd0aCA9PSAxICYmIGZyb21MaW5lID09IGZyb20ubGluZSkge1xuICAgICAgd2hpbGUgKGN1dEZyb250ICYmIGN1dEZyb250ID4gZnJvbS5jaCAmJlxuICAgICAgICAgICAgIG5ld0JvdC5jaGFyQ29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChvbGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpIHtcbiAgICAgICAgY3V0RnJvbnQtLTtcbiAgICAgICAgY3V0RW5kKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID0gbmV3Qm90LnNsaWNlKDAsIG5ld0JvdC5sZW5ndGggLSBjdXRFbmQpLnJlcGxhY2UoL15cXHUyMDBiKy8sIFwiXCIpO1xuICAgIG5ld1RleHRbMF0gPSBuZXdUZXh0WzBdLnNsaWNlKGN1dEZyb250KS5yZXBsYWNlKC9cXHUyMDBiKyQvLCBcIlwiKTtcblxuICAgIHZhciBjaEZyb20gPSBQb3MoZnJvbUxpbmUsIGN1dEZyb250KTtcbiAgICB2YXIgY2hUbyA9IFBvcyh0b0xpbmUsIG9sZFRleHQubGVuZ3RoID8gbHN0KG9sZFRleHQpLmxlbmd0aCAtIGN1dEVuZCA6IDApO1xuICAgIGlmIChuZXdUZXh0Lmxlbmd0aCA+IDEgfHwgbmV3VGV4dFswXSB8fCBjbXAoY2hGcm9tLCBjaFRvKSkge1xuICAgICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgbmV3VGV4dCwgY2hGcm9tLCBjaFRvLCBcIitpbnB1dFwiKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5lbnN1cmVQb2xsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCk7XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTtcbiAgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmZvcmNlQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlYWRET01UaW1lb3V0KTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVGcm9tRE9NKCk7XG4gICAgdGhpcy5kaXYuYmx1cigpO1xuICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWFkRnJvbURPTVNvb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwpIHsgcmV0dXJuIH1cbiAgICB0aGlzLnJlYWRET01UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcuZG9uZSkgeyB0aGlzJDEuY29tcG9zaW5nID0gbnVsbDsgfVxuICAgICAgICBlbHNlIHsgcmV0dXJuIH1cbiAgICAgIH1cbiAgICAgIHRoaXMkMS51cGRhdGVGcm9tRE9NKCk7XG4gICAgfSwgODApO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS51cGRhdGVGcm9tRE9NID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5jbS5pc1JlYWRPbmx5KCkgfHwgIXRoaXMucG9sbENvbnRlbnQoKSlcbiAgICAgIHsgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWdDaGFuZ2UodGhpcyQxLmNtKTsgfSk7IH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgbm9kZS5jb250ZW50RWRpdGFibGUgPSBcImZhbHNlXCI7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLmNoYXJDb2RlID09IDAgfHwgdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLmNtLmlzUmVhZE9ubHkoKSlcbiAgICAgIHsgb3BlcmF0aW9uKHRoaXMuY20sIGFwcGx5VGV4dElucHV0KSh0aGlzLmNtLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUgPT0gbnVsbCA/IGUua2V5Q29kZSA6IGUuY2hhckNvZGUpLCAwKTsgfVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWFkT25seUNoYW5nZWQgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgdGhpcy5kaXYuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKHZhbCAhPSBcIm5vY3Vyc29yXCIpO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24gKCkge307XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge307XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm5lZWRzQ29udGVudEF0dHJpYnV0ZSA9IHRydWU7XG5cbiAgZnVuY3Rpb24gcG9zVG9ET00oY20sIHBvcykge1xuICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBwb3MubGluZSk7XG4gICAgaWYgKCF2aWV3IHx8IHZpZXcuaGlkZGVuKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7XG4gICAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9zLmxpbmUpO1xuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSwgY20uZG9jLmRpcmVjdGlvbiksIHNpZGUgPSBcImxlZnRcIjtcbiAgICBpZiAob3JkZXIpIHtcbiAgICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zLmNoKTtcbiAgICAgIHNpZGUgPSBwYXJ0UG9zICUgMiA/IFwicmlnaHRcIiA6IFwibGVmdFwiO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChpbmZvLm1hcCwgcG9zLmNoLCBzaWRlKTtcbiAgICByZXN1bHQub2Zmc2V0ID0gcmVzdWx0LmNvbGxhcHNlID09IFwicmlnaHRcIiA/IHJlc3VsdC5lbmQgOiByZXN1bHQuc3RhcnQ7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gaXNJbkd1dHRlcihub2RlKSB7XG4gICAgZm9yICh2YXIgc2NhbiA9IG5vZGU7IHNjYW47IHNjYW4gPSBzY2FuLnBhcmVudE5vZGUpXG4gICAgICB7IGlmICgvQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlci8udGVzdChzY2FuLmNsYXNzTmFtZSkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBiYWRQb3MocG9zLCBiYWQpIHsgaWYgKGJhZCkgeyBwb3MuYmFkID0gdHJ1ZTsgfSByZXR1cm4gcG9zIH1cblxuICBmdW5jdGlvbiBkb21UZXh0QmV0d2VlbihjbSwgZnJvbSwgdG8sIGZyb21MaW5lLCB0b0xpbmUpIHtcbiAgICB2YXIgdGV4dCA9IFwiXCIsIGNsb3NpbmcgPSBmYWxzZSwgbGluZVNlcCA9IGNtLmRvYy5saW5lU2VwYXJhdG9yKCksIGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlvbiAobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaWQgPT0gaWQ7IH0gfVxuICAgIGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgaWYgKGNsb3NpbmcpIHtcbiAgICAgICAgdGV4dCArPSBsaW5lU2VwO1xuICAgICAgICBpZiAoZXh0cmFMaW5lYnJlYWspIHsgdGV4dCArPSBsaW5lU2VwOyB9XG4gICAgICAgIGNsb3NpbmcgPSBleHRyYUxpbmVicmVhayA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUZXh0KHN0cikge1xuICAgICAgaWYgKHN0cikge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgICB0ZXh0ICs9IHN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fsayhub2RlKSB7XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICAgIHZhciBjbVRleHQgPSBub2RlLmdldEF0dHJpYnV0ZShcImNtLXRleHRcIik7XG4gICAgICAgIGlmIChjbVRleHQpIHtcbiAgICAgICAgICBhZGRUZXh0KGNtVGV4dCk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1hcmtlcklEID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJjbS1tYXJrZXJcIiksIHJhbmdlO1xuICAgICAgICBpZiAobWFya2VySUQpIHtcbiAgICAgICAgICB2YXIgZm91bmQgPSBjbS5maW5kTWFya3MoUG9zKGZyb21MaW5lLCAwKSwgUG9zKHRvTGluZSArIDEsIDApLCByZWNvZ25pemVNYXJrZXIoK21hcmtlcklEKSk7XG4gICAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UgPSBmb3VuZFswXS5maW5kKDApKSlcbiAgICAgICAgICAgIHsgYWRkVGV4dChnZXRCZXR3ZWVuKGNtLmRvYywgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pLmpvaW4obGluZVNlcCkpOyB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpID09IFwiZmFsc2VcIikgeyByZXR1cm4gfVxuICAgICAgICB2YXIgaXNCbG9jayA9IC9eKHByZXxkaXZ8cHxsaXx0YWJsZXxicikkL2kudGVzdChub2RlLm5vZGVOYW1lKTtcbiAgICAgICAgaWYgKCEvXmJyJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiYgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT0gMCkgeyByZXR1cm4gfVxuXG4gICAgICAgIGlmIChpc0Jsb2NrKSB7IGNsb3NlKCk7IH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7IH1cblxuICAgICAgICBpZiAoL14ocHJlfHApJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkpIHsgZXh0cmFMaW5lYnJlYWsgPSB0cnVlOyB9XG4gICAgICAgIGlmIChpc0Jsb2NrKSB7IGNsb3NpbmcgPSB0cnVlOyB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykge1xuICAgICAgICBhZGRUZXh0KG5vZGUubm9kZVZhbHVlLnJlcGxhY2UoL1xcdTIwMGIvZywgXCJcIikucmVwbGFjZSgvXFx1MDBhMC9nLCBcIiBcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDs7KSB7XG4gICAgICB3YWxrKGZyb20pO1xuICAgICAgaWYgKGZyb20gPT0gdG8pIHsgYnJlYWsgfVxuICAgICAgZnJvbSA9IGZyb20ubmV4dFNpYmxpbmc7XG4gICAgICBleHRyYUxpbmVicmVhayA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dFxuICB9XG5cbiAgZnVuY3Rpb24gZG9tVG9Qb3MoY20sIG5vZGUsIG9mZnNldCkge1xuICAgIHZhciBsaW5lTm9kZTtcbiAgICBpZiAobm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHtcbiAgICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICAgIGlmICghbGluZU5vZGUpIHsgcmV0dXJuIGJhZFBvcyhjbS5jbGlwUG9zKFBvcyhjbS5kaXNwbGF5LnZpZXdUbyAtIDEpKSwgdHJ1ZSkgfVxuICAgICAgbm9kZSA9IG51bGw7IG9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGluZU5vZGUgPSBub2RlOzsgbGluZU5vZGUgPSBsaW5lTm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmICghbGluZU5vZGUgfHwgbGluZU5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7IHJldHVybiBudWxsIH1cbiAgICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUgJiYgbGluZU5vZGUucGFyZW50Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpbmVWaWV3ID0gY20uZGlzcGxheS52aWV3W2ldO1xuICAgICAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZU5vZGUpXG4gICAgICAgIHsgcmV0dXJuIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7XG4gICAgdmFyIHdyYXBwZXIgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQsIGJhZCA9IGZhbHNlO1xuICAgIGlmICghbm9kZSB8fCAhY29udGFpbnMod3JhcHBlciwgbm9kZSkpIHsgcmV0dXJuIGJhZFBvcyhQb3MobGluZU5vKGxpbmVWaWV3LmxpbmUpLCAwKSwgdHJ1ZSkgfVxuICAgIGlmIChub2RlID09IHdyYXBwZXIpIHtcbiAgICAgIGJhZCA9IHRydWU7XG4gICAgICBub2RlID0gd3JhcHBlci5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICBvZmZzZXQgPSAwO1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHZhciBsaW5lID0gbGluZVZpZXcucmVzdCA/IGxzdChsaW5lVmlldy5yZXN0KSA6IGxpbmVWaWV3LmxpbmU7XG4gICAgICAgIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lKSwgbGluZS50ZXh0Lmxlbmd0aCksIGJhZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdGV4dE5vZGUgPSBub2RlLm5vZGVUeXBlID09IDMgPyBub2RlIDogbnVsbCwgdG9wTm9kZSA9IG5vZGU7XG4gICAgaWYgKCF0ZXh0Tm9kZSAmJiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgJiYgbm9kZS5maXJzdENoaWxkLm5vZGVUeXBlID09IDMpIHtcbiAgICAgIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgaWYgKG9mZnNldCkgeyBvZmZzZXQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOyB9XG4gICAgfVxuICAgIHdoaWxlICh0b3BOb2RlLnBhcmVudE5vZGUgIT0gd3JhcHBlcikgeyB0b3BOb2RlID0gdG9wTm9kZS5wYXJlbnROb2RlOyB9XG4gICAgdmFyIG1lYXN1cmUgPSBsaW5lVmlldy5tZWFzdXJlLCBtYXBzID0gbWVhc3VyZS5tYXBzO1xuXG4gICAgZnVuY3Rpb24gZmluZCh0ZXh0Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KSB7XG4gICAgICBmb3IgKHZhciBpID0gLTE7IGkgPCAobWFwcyA/IG1hcHMubGVuZ3RoIDogMCk7IGkrKykge1xuICAgICAgICB2YXIgbWFwID0gaSA8IDAgPyBtZWFzdXJlLm1hcCA6IG1hcHNbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWFwLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgdmFyIGN1ck5vZGUgPSBtYXBbaiArIDJdO1xuICAgICAgICAgIGlmIChjdXJOb2RlID09IHRleHROb2RlIHx8IGN1ck5vZGUgPT0gdG9wTm9kZSkge1xuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lTm8oaSA8IDAgPyBsaW5lVmlldy5saW5lIDogbGluZVZpZXcucmVzdFtpXSk7XG4gICAgICAgICAgICB2YXIgY2ggPSBtYXBbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjdXJOb2RlICE9IHRleHROb2RlKSB7IGNoID0gbWFwW2ogKyAob2Zmc2V0ID8gMSA6IDApXTsgfVxuICAgICAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBjaClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGZvdW5kID0gZmluZCh0ZXh0Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoZm91bmQpIHsgcmV0dXJuIGJhZFBvcyhmb3VuZCwgYmFkKSB9XG5cbiAgICAvLyBGSVhNRSB0aGlzIGlzIGFsbCByZWFsbHkgc2hha3kuIG1pZ2h0IGhhbmRsZSB0aGUgZmV3IGNhc2VzIGl0IG5lZWRzIHRvIGhhbmRsZSwgYnV0IGxpa2VseSB0byBjYXVzZSBwcm9ibGVtc1xuICAgIGZvciAodmFyIGFmdGVyID0gdG9wTm9kZS5uZXh0U2libGluZywgZGlzdCA9IHRleHROb2RlID8gdGV4dE5vZGUubm9kZVZhbHVlLmxlbmd0aCAtIG9mZnNldCA6IDA7IGFmdGVyOyBhZnRlciA9IGFmdGVyLm5leHRTaWJsaW5nKSB7XG4gICAgICBmb3VuZCA9IGZpbmQoYWZ0ZXIsIGFmdGVyLmZpcnN0Q2hpbGQsIDApO1xuICAgICAgaWYgKGZvdW5kKVxuICAgICAgICB7IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCkgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGRpc3QgKz0gYWZ0ZXIudGV4dENvbnRlbnQubGVuZ3RoOyB9XG4gICAgfVxuICAgIGZvciAodmFyIGJlZm9yZSA9IHRvcE5vZGUucHJldmlvdXNTaWJsaW5nLCBkaXN0JDEgPSBvZmZzZXQ7IGJlZm9yZTsgYmVmb3JlID0gYmVmb3JlLnByZXZpb3VzU2libGluZykge1xuICAgICAgZm91bmQgPSBmaW5kKGJlZm9yZSwgYmVmb3JlLmZpcnN0Q2hpbGQsIC0xKTtcbiAgICAgIGlmIChmb3VuZClcbiAgICAgICAgeyByZXR1cm4gYmFkUG9zKFBvcyhmb3VuZC5saW5lLCBmb3VuZC5jaCArIGRpc3QkMSksIGJhZCkgfVxuICAgICAgZWxzZVxuICAgICAgICB7IGRpc3QkMSArPSBiZWZvcmUudGV4dENvbnRlbnQubGVuZ3RoOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gVEVYVEFSRUEgSU5QVVQgU1RZTEVcblxuICB2YXIgVGV4dGFyZWFJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgdGhpcy5jbSA9IGNtO1xuICAgIC8vIFNlZSBpbnB1dC5wb2xsIGFuZCBpbnB1dC5yZXNldFxuICAgIHRoaXMucHJldklucHV0ID0gXCJcIjtcblxuICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBleHBlY3QgaW5wdXQgdG8gYXBwZWFyIHJlYWwgc29vblxuICAgIC8vIG5vdyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlwcmVzcycgb3IgJ2lucHV0JykgYW5kIGFyZVxuICAgIC8vIHBvbGxpbmcgaW50ZW5zaXZlbHkuXG4gICAgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNlO1xuICAgIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xsZXJcbiAgICB0aGlzLnBvbGxpbmcgPSBuZXcgRGVsYXllZCgpO1xuICAgIC8vIFVzZWQgdG8gd29yayBhcm91bmQgSUUgaXNzdWUgd2l0aCBzZWxlY3Rpb24gYmVpbmcgZm9yZ290dGVuIHdoZW4gZm9jdXMgbW92ZXMgYXdheSBmcm9tIHRleHRhcmVhXG4gICAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChkaXNwbGF5KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gdGhpcy5jbTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkKGRpc3BsYXkpO1xuICAgIHZhciB0ZSA9IHRoaXMudGV4dGFyZWE7XG5cbiAgICBkaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKHRoaXMud3JhcHBlciwgZGlzcGxheS53cmFwcGVyLmZpcnN0Q2hpbGQpO1xuXG4gICAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkgKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIGlPUyA4IGFueW1vcmUpXG4gICAgaWYgKGlvcykgeyB0ZS5zdHlsZS53aWR0aCA9IFwiMHB4XCI7IH1cblxuICAgIG9uKHRlLCBcImlucHV0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgdGhpcyQxLmhhc1NlbGVjdGlvbikgeyB0aGlzJDEuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgICAgaW5wdXQucG9sbCgpO1xuICAgIH0pO1xuXG4gICAgb24odGUsIFwicGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20pKSB7IHJldHVybiB9XG5cbiAgICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSArbmV3IERhdGU7XG4gICAgICBpbnB1dC5mYXN0UG9sbCgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkge1xuICAgICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IGZhbHNlLCB0ZXh0OiBjbS5nZXRTZWxlY3Rpb25zKCl9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNtLm9wdGlvbnMubGluZVdpc2VDb3B5Q3V0KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJhbmdlcyA9IGNvcHlhYmxlUmFuZ2VzKGNtKTtcbiAgICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IHRydWUsIHRleHQ6IHJhbmdlcy50ZXh0fSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikge1xuICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMocmFuZ2VzLnJhbmdlcywgbnVsbCwgc2VsX2RvbnRTY3JvbGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0LnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICAgICAgdGUudmFsdWUgPSByYW5nZXMudGV4dC5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgIHNlbGVjdElucHV0KHRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGUudHlwZSA9PSBcImN1dFwiKSB7IGNtLnN0YXRlLmN1dEluY29taW5nID0gK25ldyBEYXRlOyB9XG4gICAgfVxuICAgIG9uKHRlLCBcImN1dFwiLCBwcmVwYXJlQ29weUN1dCk7XG4gICAgb24odGUsIFwiY29weVwiLCBwcmVwYXJlQ29weUN1dCk7XG5cbiAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcInBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmICghdGUuZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gK25ldyBEYXRlO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUGFzcyB0aGUgYHBhc3RlYCBldmVudCB0byB0aGUgdGV4dGFyZWEgc28gaXQncyBoYW5kbGVkIGJ5IGl0cyBldmVudCBsaXN0ZW5lci5cbiAgICAgIHZhciBldmVudCA9IG5ldyBFdmVudChcInBhc3RlXCIpO1xuICAgICAgZXZlbnQuY2xpcGJvYXJkRGF0YSA9IGUuY2xpcGJvYXJkRGF0YTtcbiAgICAgIHRlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgLy8gUHJldmVudCBub3JtYWwgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3IgKHdlIGhhbmRsZSBvdXIgb3duKVxuICAgIG9uKGRpc3BsYXkubGluZVNwYWNlLCBcInNlbGVjdHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsgZV9wcmV2ZW50RGVmYXVsdChlKTsgfVxuICAgIH0pO1xuXG4gICAgb24odGUsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhcnQgPSBjbS5nZXRDdXJzb3IoXCJmcm9tXCIpO1xuICAgICAgaWYgKGlucHV0LmNvbXBvc2luZykgeyBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTsgfVxuICAgICAgaW5wdXQuY29tcG9zaW5nID0ge1xuICAgICAgICBzdGFydDogc3RhcnQsXG4gICAgICAgIHJhbmdlOiBjbS5tYXJrVGV4dChzdGFydCwgY20uZ2V0Q3Vyc29yKFwidG9cIiksIHtjbGFzc05hbWU6IFwiQ29kZU1pcnJvci1jb21wb3NpbmdcIn0pXG4gICAgICB9O1xuICAgIH0pO1xuICAgIG9uKHRlLCBcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHtcbiAgICAgICAgaW5wdXQucG9sbCgpO1xuICAgICAgICBpbnB1dC5jb21wb3NpbmcucmFuZ2UuY2xlYXIoKTtcbiAgICAgICAgaW5wdXQuY29tcG9zaW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5jcmVhdGVGaWVsZCA9IGZ1bmN0aW9uIChfZGlzcGxheSkge1xuICAgIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYVxuICAgIHRoaXMud3JhcHBlciA9IGhpZGRlblRleHRhcmVhKCk7XG4gICAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpc1xuICAgIC8vIGZvY3VzZWQsIGFuZCByZWNlaXZlcyBpbnB1dC5cbiAgICB0aGlzLnRleHRhcmVhID0gdGhpcy53cmFwcGVyLmZpcnN0Q2hpbGQ7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucHJlcGFyZVNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZWRyYXcgdGhlIHNlbGVjdGlvbiBhbmQvb3IgY3Vyc29yXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgcmVzdWx0ID0gcHJlcGFyZVNlbGVjdGlvbihjbSk7XG5cbiAgICAvLyBNb3ZlIHRoZSBoaWRkZW4gdGV4dGFyZWEgbmVhciB0aGUgY3Vyc29yIHRvIHByZXZlbnQgc2Nyb2xsaW5nIGFydGlmYWN0c1xuICAgIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3IpIHtcbiAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKGNtLCBkb2Muc2VsLnByaW1hcnkoKS5oZWFkLCBcImRpdlwiKTtcbiAgICAgIHZhciB3cmFwT2ZmID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBsaW5lT2ZmID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmVzdWx0LnRlVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy50b3AgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSk7XG4gICAgICByZXN1bHQudGVMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoIC0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNob3dTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZHJhd24pIHtcbiAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgZHJhd24uY3Vyc29ycyk7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5zZWxlY3Rpb25EaXYsIGRyYXduLnNlbGVjdGlvbik7XG4gICAgaWYgKGRyYXduLnRlVG9wICE9IG51bGwpIHtcbiAgICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSBkcmF3bi50ZVRvcCArIFwicHhcIjtcbiAgICAgIHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gZHJhd24udGVMZWZ0ICsgXCJweFwiO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXNldCB0aGUgaW5wdXQgdG8gY29ycmVzcG9uZCB0byB0aGUgc2VsZWN0aW9uIChvciB0byBiZSBlbXB0eSxcbiAgLy8gd2hlbiBub3QgdHlwaW5nIGFuZCBub3RoaW5nIGlzIHNlbGVjdGVkKVxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICh0eXBpbmcpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcgfHwgdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICB2YXIgY20gPSB0aGlzLmNtO1xuICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICB2YXIgY29udGVudCA9IGNtLmdldFNlbGVjdGlvbigpO1xuICAgICAgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZWxlY3RJbnB1dCh0aGlzLnRleHRhcmVhKTsgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSkgeyB0aGlzLmhhc1NlbGVjdGlvbiA9IGNvbnRlbnQ7IH1cbiAgICB9IGVsc2UgaWYgKCF0eXBpbmcpIHtcbiAgICAgIHRoaXMucHJldklucHV0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZSA9IFwiXCI7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgIH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5nZXRGaWVsZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudGV4dGFyZWEgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2UgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIiAmJiAoIW1vYmlsZSB8fCBhY3RpdmVFbHQoKSAhPSB0aGlzLnRleHRhcmVhKSkge1xuICAgICAgdHJ5IHsgdGhpcy50ZXh0YXJlYS5mb2N1cygpOyB9XG4gICAgICBjYXRjaCAoZSkge30gLy8gSUU4IHdpbGwgdGhyb3cgaWYgdGhlIHRleHRhcmVhIGlzIGRpc3BsYXk6IG5vbmUgb3Igbm90IGluIERPTVxuICAgIH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5ibHVyID0gZnVuY3Rpb24gKCkgeyB0aGlzLnRleHRhcmVhLmJsdXIoKTsgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IDA7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cyA9IGZ1bmN0aW9uICgpIHsgdGhpcy5zbG93UG9sbCgpOyB9O1xuXG4gIC8vIFBvbGwgZm9yIGlucHV0IGNoYW5nZXMsIHVzaW5nIHRoZSBub3JtYWwgcmF0ZSBvZiBwb2xsaW5nLiBUaGlzXG4gIC8vIHJ1bnMgYXMgbG9uZyBhcyB0aGUgZWRpdG9yIGlzIGZvY3VzZWQuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNsb3dQb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5wb2xsaW5nRmFzdCkgeyByZXR1cm4gfVxuICAgIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLnBvbGwoKTtcbiAgICAgIGlmICh0aGlzJDEuY20uc3RhdGUuZm9jdXNlZCkgeyB0aGlzJDEuc2xvd1BvbGwoKTsgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8vIFdoZW4gYW4gZXZlbnQgaGFzIGp1c3QgY29tZSBpbiB0aGF0IGlzIGxpa2VseSB0byBhZGQgb3IgY2hhbmdlXG4gIC8vIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dGFyZWEsIHdlIHBvbGwgZmFzdGVyLCB0byBlbnN1cmUgdGhhdFxuICAvLyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LlxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5mYXN0UG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbWlzc2VkID0gZmFsc2UsIGlucHV0ID0gdGhpcztcbiAgICBpbnB1dC5wb2xsaW5nRmFzdCA9IHRydWU7XG4gICAgZnVuY3Rpb24gcCgpIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gaW5wdXQucG9sbCgpO1xuICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBpbnB1dC5wb2xsaW5nLnNldCg2MCwgcCk7fVxuICAgICAgZWxzZSB7aW5wdXQucG9sbGluZ0Zhc3QgPSBmYWxzZTsgaW5wdXQuc2xvd1BvbGwoKTt9XG4gICAgfVxuICAgIGlucHV0LnBvbGxpbmcuc2V0KDIwLCBwKTtcbiAgfTtcblxuICAvLyBSZWFkIGlucHV0IGZyb20gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIHRoZSBkb2N1bWVudCB0byBtYXRjaC5cbiAgLy8gV2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQsIGl0IGlzIHByZXNlbnQgaW4gdGhlIHRleHRhcmVhLCBhbmRcbiAgLy8gc2VsZWN0ZWQgKHVubGVzcyBpdCBpcyBodWdlLCBpbiB3aGljaCBjYXNlIGEgcGxhY2Vob2xkZXIgaXNcbiAgLy8gdXNlZCkuIFdoZW4gbm90aGluZyBpcyBzZWxlY3RlZCwgdGhlIGN1cnNvciBzaXRzIGFmdGVyIHByZXZpb3VzbHlcbiAgLy8gc2VlbiB0ZXh0IChjYW4gYmUgZW1wdHkpLCB3aGljaCBpcyBzdG9yZWQgaW4gcHJldklucHV0ICh3ZSBtdXN0XG4gIC8vIG5vdCByZXNldCB0aGUgdGV4dGFyZWEgd2hlbiB0eXBpbmcsIGJlY2F1c2UgdGhhdCBicmVha3MgSU1FKS5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGNtID0gdGhpcy5jbSwgaW5wdXQgPSB0aGlzLnRleHRhcmVhLCBwcmV2SW5wdXQgPSB0aGlzLnByZXZJbnB1dDtcbiAgICAvLyBTaW5jZSB0aGlzIGlzIGNhbGxlZCBhICpsb3QqLCB0cnkgdG8gYmFpbCBvdXQgYXMgY2hlYXBseSBhc1xuICAgIC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xlYXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNTZWxlY3Rpb25cbiAgICAvLyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlcmUgaXMgYSBsb3Qgb2YgdGV4dCBpbiB0aGUgdGV4dGFyZWEsXG4gICAgLy8gaW4gd2hpY2ggY2FzZSByZWFkaW5nIGl0cyB2YWx1ZSB3b3VsZCBiZSBleHBlbnNpdmUuXG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8ICFjbS5zdGF0ZS5mb2N1c2VkIHx8XG4gICAgICAgIChoYXNTZWxlY3Rpb24oaW5wdXQpICYmICFwcmV2SW5wdXQgJiYgIXRoaXMuY29tcG9zaW5nKSB8fFxuICAgICAgICBjbS5pc1JlYWRPbmx5KCkgfHwgY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQgfHwgY20uc3RhdGUua2V5U2VxKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTtcbiAgICAvLyBJZiBub3RoaW5nIGNoYW5nZWQsIGJhaWwuXG4gICAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2ljYWwgc2VsZWN0aW9uIHJlc2V0dGluZyBpbiBJRTkvMTAsIGFuZFxuICAgIC8vIGluZXhwbGljYWJsZSBhcHBlYXJhbmNlIG9mIHByaXZhdGUgYXJlYSB1bmljb2RlIGNoYXJhY3RlcnMgb25cbiAgICAvLyBzb21lIGtleSBjb21ib3MgaW4gTWFjICgjMjY4OSkuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPj0gOSAmJiB0aGlzLmhhc1NlbGVjdGlvbiA9PT0gdGV4dCB8fFxuICAgICAgICBtYWMgJiYgL1tcXHVmNzAwLVxcdWY3ZmZdLy50ZXN0KHRleHQpKSB7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoY20uZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7XG4gICAgICB2YXIgZmlyc3QgPSB0ZXh0LmNoYXJDb2RlQXQoMCk7XG4gICAgICBpZiAoZmlyc3QgPT0gMHgyMDBiICYmICFwcmV2SW5wdXQpIHsgcHJldklucHV0ID0gXCJcXHUyMDBiXCI7IH1cbiAgICAgIGlmIChmaXJzdCA9PSAweDIxZGEpIHsgdGhpcy5yZXNldCgpOyByZXR1cm4gdGhpcy5jbS5leGVjQ29tbWFuZChcInVuZG9cIikgfVxuICAgIH1cbiAgICAvLyBGaW5kIHRoZSBwYXJ0IG9mIHRoZSBpbnB1dCB0aGF0IGlzIGFjdHVhbGx5IG5ld1xuICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTtcbiAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0LmNoYXJDb2RlQXQoc2FtZSkgPT0gdGV4dC5jaGFyQ29kZUF0KHNhbWUpKSB7ICsrc2FtZTsgfVxuXG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHlUZXh0SW5wdXQoY20sIHRleHQuc2xpY2Uoc2FtZSksIHByZXZJbnB1dC5sZW5ndGggLSBzYW1lLFxuICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdGhpcyQxLmNvbXBvc2luZyA/IFwiKmNvbXBvc2VcIiA6IG51bGwpO1xuXG4gICAgICAvLyBEb24ndCBsZWF2ZSBsb25nIHRleHQgaW4gdGhlIHRleHRhcmVhLCBzaW5jZSBpdCBtYWtlcyBmdXJ0aGVyIHBvbGxpbmcgc2xvd1xuICAgICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCB8fCB0ZXh0LmluZGV4T2YoXCJcXG5cIikgPiAtMSkgeyBpbnB1dC52YWx1ZSA9IHRoaXMkMS5wcmV2SW5wdXQgPSBcIlwiOyB9XG4gICAgICBlbHNlIHsgdGhpcyQxLnByZXZJbnB1dCA9IHRleHQ7IH1cblxuICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcpIHtcbiAgICAgICAgdGhpcyQxLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpO1xuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLnJhbmdlID0gY20ubWFya1RleHQodGhpcyQxLmNvbXBvc2luZy5zdGFydCwgY20uZ2V0Q3Vyc29yKFwidG9cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJDb2RlTWlycm9yLWNvbXBvc2luZ1wifSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5lbnN1cmVQb2xsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucG9sbGluZ0Zhc3QgJiYgdGhpcy5wb2xsKCkpIHsgdGhpcy5wb2xsaW5nRmFzdCA9IGZhbHNlOyB9XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgIHRoaXMuZmFzdFBvbGwoKTtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5vbkNvbnRleHRNZW51ID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdGUgPSBpbnB1dC50ZXh0YXJlYTtcbiAgICBpZiAoaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nKSB7IGlucHV0LmNvbnRleHRNZW51UGVuZGluZygpOyB9XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wO1xuICAgIGlmICghcG9zIHx8IHByZXN0bykgeyByZXR1cm4gfSAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuXG5cbiAgICAvLyBSZXNldCB0aGUgY3VycmVudCB0ZXh0IHNlbGVjdGlvbiBvbmx5IGlmIHRoZSBjbGljayBpcyBkb25lIG91dHNpZGUgb2YgdGhlIHNlbGVjdGlvblxuICAgIC8vIGFuZCAncmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51JyBvcHRpb24gaXMgdHJ1ZS5cbiAgICB2YXIgcmVzZXQgPSBjbS5vcHRpb25zLnJlc2V0U2VsZWN0aW9uT25Db250ZXh0TWVudTtcbiAgICBpZiAocmVzZXQgJiYgY20uZG9jLnNlbC5jb250YWlucyhwb3MpID09IC0xKVxuICAgICAgeyBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOyB9XG5cbiAgICB2YXIgb2xkQ1NTID0gdGUuc3R5bGUuY3NzVGV4dCwgb2xkV3JhcHBlckNTUyA9IGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dDtcbiAgICB2YXIgd3JhcHBlckJveCA9IGlucHV0LndyYXBwZXIub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IHN0YXRpY1wiO1xuICAgIHRlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDtcXG4gICAgICB0b3A6IFwiICsgKGUuY2xpZW50WSAtIHdyYXBwZXJCb3gudG9wIC0gNSkgKyBcInB4OyBsZWZ0OiBcIiArIChlLmNsaWVudFggLSB3cmFwcGVyQm94LmxlZnQgLSA1KSArIFwicHg7XFxuICAgICAgei1pbmRleDogMTAwMDsgYmFja2dyb3VuZDogXCIgKyAoaWUgPyBcInJnYmEoMjU1LCAyNTUsIDI1NSwgLjA1KVwiIDogXCJ0cmFuc3BhcmVudFwiKSArIFwiO1xcbiAgICAgIG91dGxpbmU6IG5vbmU7IGJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7XCI7XG4gICAgdmFyIG9sZFNjcm9sbFk7XG4gICAgaWYgKHdlYmtpdCkgeyBvbGRTY3JvbGxZID0gd2luZG93LnNjcm9sbFk7IH0gLy8gV29yayBhcm91bmQgQ2hyb21lIGlzc3VlICgjMjcxMilcbiAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgaWYgKHdlYmtpdCkgeyB3aW5kb3cuc2Nyb2xsVG8obnVsbCwgb2xkU2Nyb2xsWSk7IH1cbiAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgLy8gQWRkcyBcIlNlbGVjdCBhbGxcIiB0byBjb250ZXh0IG1lbnUgaW4gRkZcbiAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgdGUudmFsdWUgPSBpbnB1dC5wcmV2SW5wdXQgPSBcIiBcIjsgfVxuICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IHJlaGlkZTtcbiAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDtcbiAgICBjbGVhclRpbWVvdXQoZGlzcGxheS5kZXRlY3RpbmdTZWxlY3RBbGwpO1xuXG4gICAgLy8gU2VsZWN0LWFsbCB3aWxsIGJlIGdyZXllZCBvdXQgaWYgdGhlcmUncyBub3RoaW5nIHRvIHNlbGVjdCwgc29cbiAgICAvLyB0aGlzIGFkZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNoZWNrIHdoZXRoZXJcbiAgICAvLyBpdCBnb3Qgc2VsZWN0ZWQuXG4gICAgZnVuY3Rpb24gcHJlcGFyZVNlbGVjdEFsbEhhY2soKSB7XG4gICAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgICB2YXIgc2VsZWN0ZWQgPSBjbS5zb21ldGhpbmdTZWxlY3RlZCgpO1xuICAgICAgICB2YXIgZXh0dmFsID0gXCJcXHUyMDBiXCIgKyAoc2VsZWN0ZWQgPyB0ZS52YWx1ZSA6IFwiXCIpO1xuICAgICAgICB0ZS52YWx1ZSA9IFwiXFx1MjFkYVwiOyAvLyBVc2VkIHRvIGNhdGNoIGNvbnRleHQtbWVudSB1bmRvXG4gICAgICAgIHRlLnZhbHVlID0gZXh0dmFsO1xuICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSBzZWxlY3RlZCA/IFwiXCIgOiBcIlxcdTIwMGJcIjtcbiAgICAgICAgdGUuc2VsZWN0aW9uU3RhcnQgPSAxOyB0ZS5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoO1xuICAgICAgICAvLyBSZS1zZXQgdGhpcywgaW4gY2FzZSBzb21lIG90aGVyIGhhbmRsZXIgdG91Y2hlZCB0aGVcbiAgICAgICAgLy8gc2VsZWN0aW9uIGluIHRoZSBtZWFudGltZS5cbiAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRvYy5zZWw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHtcbiAgICAgIGlmIChpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgIT0gcmVoaWRlKSB7IHJldHVybiB9XG4gICAgICBpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSBmYWxzZTtcbiAgICAgIGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dCA9IG9sZFdyYXBwZXJDU1M7XG4gICAgICB0ZS5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTO1xuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxQb3MpOyB9XG5cbiAgICAgIC8vIFRyeSB0byBkZXRlY3QgdGhlIHVzZXIgY2hvb3Npbmcgc2VsZWN0LWFsbFxuICAgICAgaWYgKHRlLnNlbGVjdGlvblN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFpZSB8fCAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpKSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgICAgICAgdmFyIGkgPSAwLCBwb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID09IGNtLmRvYy5zZWwgJiYgdGUuc2VsZWN0aW9uU3RhcnQgPT0gMCAmJlxuICAgICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSBcIlxcdTIwMGJcIikge1xuICAgICAgICAgICAgb3BlcmF0aW9uKGNtLCBzZWxlY3RBbGwpKGNtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkrKyA8IDEwKSB7XG4gICAgICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG4gICAgICAgICAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgMjAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHtcbiAgICAgIGVfc3RvcChlKTtcbiAgICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvZmYod2luZG93LCBcIm1vdXNldXBcIiwgbW91c2V1cCk7XG4gICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7XG4gICAgICB9O1xuICAgICAgb24od2luZG93LCBcIm1vdXNldXBcIiwgbW91c2V1cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7XG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICBpZiAoIXZhbCkgeyB0aGlzLnJlc2V0KCk7IH1cbiAgICB0aGlzLnRleHRhcmVhLmRpc2FibGVkID0gdmFsID09IFwibm9jdXJzb3JcIjtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24gKCkge307XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUubmVlZHNDb250ZW50QXR0cmlidXRlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZnJvbVRleHRBcmVhKHRleHRhcmVhLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307XG4gICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlO1xuICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleClcbiAgICAgIHsgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYkluZGV4OyB9XG4gICAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKVxuICAgICAgeyBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7IH1cbiAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXNcbiAgICAvLyBhdXRvZm9jdXMgYW5kIG5vIG90aGVyIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkge1xuICAgICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IGhhc0ZvY3VzID09IHRleHRhcmVhIHx8XG4gICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9IGNtLmdldFZhbHVlKCk7fVxuXG4gICAgdmFyIHJlYWxTdWJtaXQ7XG4gICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgIG9uKHRleHRhcmVhLmZvcm0sIFwic3VibWl0XCIsIHNhdmUpO1xuICAgICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpIHtcbiAgICAgICAgdmFyIGZvcm0gPSB0ZXh0YXJlYS5mb3JtO1xuICAgICAgICByZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHdyYXBwZWRTdWJtaXQgPSBmb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdmUoKTtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMuZmluaXNoSW5pdCA9IGZ1bmN0aW9uIChjbSkge1xuICAgICAgY20uc2F2ZSA9IHNhdmU7XG4gICAgICBjbS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRleHRhcmVhOyB9O1xuICAgICAgY20udG9UZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2VcbiAgICAgICAgc2F2ZSgpO1xuICAgICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpO1xuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgICAgICBvZmYodGV4dGFyZWEuZm9ybSwgXCJzdWJtaXRcIiwgc2F2ZSk7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUgJiYgdHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHsgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OyB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7IH0sXG4gICAgICBvcHRpb25zKTtcbiAgICByZXR1cm4gY21cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExlZ2FjeVByb3BzKENvZGVNaXJyb3IpIHtcbiAgICBDb2RlTWlycm9yLm9mZiA9IG9mZjtcbiAgICBDb2RlTWlycm9yLm9uID0gb247XG4gICAgQ29kZU1pcnJvci53aGVlbEV2ZW50UGl4ZWxzID0gd2hlZWxFdmVudFBpeGVscztcbiAgICBDb2RlTWlycm9yLkRvYyA9IERvYztcbiAgICBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzQXV0bztcbiAgICBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gY291bnRDb2x1bW47XG4gICAgQ29kZU1pcnJvci5maW5kQ29sdW1uID0gZmluZENvbHVtbjtcbiAgICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBpc1dvcmRDaGFyQmFzaWM7XG4gICAgQ29kZU1pcnJvci5QYXNzID0gUGFzcztcbiAgICBDb2RlTWlycm9yLnNpZ25hbCA9IHNpZ25hbDtcbiAgICBDb2RlTWlycm9yLkxpbmUgPSBMaW5lO1xuICAgIENvZGVNaXJyb3IuY2hhbmdlRW5kID0gY2hhbmdlRW5kO1xuICAgIENvZGVNaXJyb3Iuc2Nyb2xsYmFyTW9kZWwgPSBzY3JvbGxiYXJNb2RlbDtcbiAgICBDb2RlTWlycm9yLlBvcyA9IFBvcztcbiAgICBDb2RlTWlycm9yLmNtcFBvcyA9IGNtcDtcbiAgICBDb2RlTWlycm9yLm1vZGVzID0gbW9kZXM7XG4gICAgQ29kZU1pcnJvci5taW1lTW9kZXMgPSBtaW1lTW9kZXM7XG4gICAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IHJlc29sdmVNb2RlO1xuICAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGdldE1vZGU7XG4gICAgQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IG1vZGVFeHRlbnNpb25zO1xuICAgIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGV4dGVuZE1vZGU7XG4gICAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7XG4gICAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTtcbiAgICBDb2RlTWlycm9yLmlubmVyTW9kZSA9IGlubmVyTW9kZTtcbiAgICBDb2RlTWlycm9yLmNvbW1hbmRzID0gY29tbWFuZHM7XG4gICAgQ29kZU1pcnJvci5rZXlNYXAgPSBrZXlNYXA7XG4gICAgQ29kZU1pcnJvci5rZXlOYW1lID0ga2V5TmFtZTtcbiAgICBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBpc01vZGlmaWVyS2V5O1xuICAgIENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9va3VwS2V5O1xuICAgIENvZGVNaXJyb3Iubm9ybWFsaXplS2V5TWFwID0gbm9ybWFsaXplS2V5TWFwO1xuICAgIENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuICAgIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7XG4gICAgQ29kZU1pcnJvci5UZXh0TWFya2VyID0gVGV4dE1hcmtlcjtcbiAgICBDb2RlTWlycm9yLkxpbmVXaWRnZXQgPSBMaW5lV2lkZ2V0O1xuICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7XG4gICAgQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGVfc3RvcFByb3BhZ2F0aW9uO1xuICAgIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wO1xuICAgIENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBhZGRDbGFzcztcbiAgICBDb2RlTWlycm9yLmNvbnRhaW5zID0gY29udGFpbnM7XG4gICAgQ29kZU1pcnJvci5ybUNsYXNzID0gcm1DbGFzcztcbiAgICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7XG4gIH1cblxuICAvLyBFRElUT1IgQ09OU1RSVUNUT1JcblxuICBkZWZpbmVPcHRpb25zKENvZGVNaXJyb3IpO1xuXG4gIGFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvcik7XG5cbiAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuXG4gIHZhciBkb250RGVsZWdhdGUgPSBcIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvclwiLnNwbGl0KFwiIFwiKTtcbiAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSB7IGlmIChEb2MucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGluZGV4T2YoZG9udERlbGVnYXRlLCBwcm9wKSA8IDApXG4gICAgeyBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpfVxuICAgIH0pKERvYy5wcm90b3R5cGVbcHJvcF0pOyB9IH1cblxuICBldmVudE1peGluKERvYyk7XG4gIENvZGVNaXJyb3IuaW5wdXRTdHlsZXMgPSB7XCJ0ZXh0YXJlYVwiOiBUZXh0YXJlYUlucHV0LCBcImNvbnRlbnRlZGl0YWJsZVwiOiBDb250ZW50RWRpdGFibGVJbnB1dH07XG5cbiAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzXG4gIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHlcbiAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUvKiwgbW9kZSwg4oCmKi8pIHtcbiAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9IFwibnVsbFwiKSB7IENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7IH1cbiAgICBkZWZpbmVNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FID0gZGVmaW5lTUlNRTtcblxuICAvLyBNaW5pbWFsIGRlZmF1bHQgbW9kZS5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibnVsbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoe3Rva2VuOiBmdW5jdGlvbiAoc3RyZWFtKSB7IHJldHVybiBzdHJlYW0uc2tpcFRvRW5kKCk7IH19KTsgfSk7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvcGxhaW5cIiwgXCJudWxsXCIpO1xuXG4gIC8vIEVYVEVOU0lPTlNcblxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jO1xuICB9O1xuICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgRG9jLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmcm9tVGV4dEFyZWE7XG5cbiAgYWRkTGVnYWN5UHJvcHMoQ29kZU1pcnJvcik7XG5cbiAgQ29kZU1pcnJvci52ZXJzaW9uID0gXCI1LjUyLjJcIjtcblxuICByZXR1cm4gQ29kZU1pcnJvcjtcblxufSkpKTtcbiIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5leHBvcnQgZGVmYXVsdCBub2RlVXRpbDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJGYWxzZTtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xvbmVCdWZmZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9yaWdpbmFsTW9kdWxlKSB7XG5cdGlmICghb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImV4cG9ydHNcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiaW1wb3J0IFVUSUwgZnJvbSAnLi4vdXRpbC9VdGlsJztcclxuaW1wb3J0IENPTkZJRyBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCBDTSBmcm9tICcuL2NvZGVtaXJyb3InO1xyXG5cclxuY29uc3QgeyBpc01hYywgdG9nZ2xlQ2xhc3MsIGFkZENsYXNzLCByZW1vdmVDbGFzcyB9ID0gVVRJTDtcclxuY29uc3QgeyBnaXRHdWJVcmwgfSA9IENPTkZJRztcclxuY29uc3QgeyBnZXRTdGF0ZSB9ID0gQ007XHJcblxyXG5cclxubGV0IEVESVRPUiA9IG51bGw7XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDlt6XlhbfmoI/lm77moIflip/og73lpITnkIblh73mlbAgXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcblxyXG4gLyoqIFxyXG4gICogQWN0aW9uIGZybyB0b2dnbGUgQm9sZC5cclxuICAqIGDliqDnspdgIOWbvuagh+WkhOeQhuWKn+iDvVxyXG4gICovXHJcbmNvbnN0IHRvZ2dsZUJvbGQgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvd2wuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcbiAgY29uc3QgY20gPSBlZGl0b3IuJGNvZGVtaXJyb3I7XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGNvbnN0IHR5cGUgPSBzZWxmLmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJykgfHwgJ2JvbGQnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIC8vIOaPkuWFpeWGheWuuVxyXG4gIGxldCB0ZXh0O1xyXG4gIGxldCBzdGFydENoYXJzID0gYmxvY2tTdHlsZXM7XHJcbiAgbGV0IGVuZENoYXJzID0gYmxvY2tTdHlsZXM7XHJcblxyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcblxyXG4gIC8vIOW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGlmIChzdGF0W3R5cGVdKSB7XHJcbiAgICAvLyB0ZXh0ID0gY20uZ2V0TGluZShzdGFydFBvaW50LmxpbmUpO1xyXG4gICAgLy8gc3RhcnRDaGFycyA9IHRleHQuc2xpY2UoMCwgc3RhcnRQb2ludC5jaCk7XHJcbiAgICAvLyBlbmRDaGFycyA9IHRleHQuc2xpY2Uoc3RhcnRQb2ludC5jaCk7XHJcblxyXG4gICAgLy8gaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0Ly8gXHRzdGFydENoYXJzID0gc3RhcnRDaGFycy5yZXBsYWNlKC8oXFwqXFwqfF9fKSg/IVtcXHNcXFNdKihcXCpcXCp8X18pKS8sIFwiXCIpO1xyXG5cdFx0Ly8gXHRlbmRDaGFycyA9IGVuZENoYXJzLnJlcGxhY2UoLyhcXCpcXCp8X18pLywgXCJcIik7XHJcblx0XHQvLyB9IGVsc2UgaWYodHlwZSA9PSBcIml0YWxpY1wiKSB7XHJcblx0XHQvLyBcdHN0YXJ0Q2hhcnMgPSBzdGFydENoYXJzLnJlcGxhY2UoLyhcXCp8XykoPyFbXFxzXFxTXSooXFwqfF8pKS8sIFwiXCIpO1xyXG5cdFx0Ly8gXHRlbmRDaGFycyA9IGVuZENoYXJzLnJlcGxhY2UoLyhcXCp8XykvLCBcIlwiKTtcclxuXHRcdC8vIH0gZWxzZSBpZih0eXBlID09IFwic3RyaWtldGhyb3VnaFwiKSB7XHJcblx0XHQvLyBcdHN0YXJ0Q2hhcnMgPSBzdGFydENoYXJzLnJlcGxhY2UoLyhcXCpcXCp8fn4pKD8hW1xcc1xcU10qKFxcKlxcKnx+fikpLywgXCJcIik7XHJcblx0XHQvLyBcdGVuZENoYXJzID0gZW5kQ2hhcnMucmVwbGFjZSgvKFxcKlxcKnx+fikvLCBcIlwiKTtcclxuICAgIC8vIH1cclxuICAgIFxyXG4gICAgLy8gY20ucmVwbGFjZVJhbmdlKHN0YXJ0Q2hhcnMgKyBlbmRDaGFycywge1xyXG4gICAgLy8gICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcbiAgICAvLyAgIGNoOiAwXHJcbiAgICAvLyB9LCB7XHJcbiAgICAvLyAgIGxpbmU6IHN0YXJ0UG9pbnQubGluZSxcclxuICAgIC8vICAgY2g6IDk5OTk5OTk5OTk5OTk5XHJcbiAgICAvLyB9KTtcclxuICB9IGVsc2UgeyAvLyDpnIDopoHmj5LlhaXnmoTlhoXlrrlcclxuICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBpZih0eXBlID09IFwiYm9sZFwiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiKipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJpdGFsaWNcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfXCIpLmpvaW4oXCJcIik7XHJcblx0XHR9IGVsc2UgaWYodHlwZSA9PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIn5+XCIpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0Q2hhcnMgKyB0ZXh0ICsgZW5kQ2hhcnMpO1xyXG5cclxuICAgIHN0YXJ0UG9pbnQuY2ggKz0gc3RhcnRDaGFycy5sZW5ndGg7XHJcbiAgICBlbmRQb2ludC5jaCA9IHN0YXJ0UG9pbnQuY2ggKyB0ZXh0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqIFxyXG4gKiBBY3Rpb24gZnJvIHRvZ2dsZSBJdGFsaWMuXHJcbiAqIGDmlpzkvZNgIOWbvuagh+WkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlSXRhbGljID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdpdGFsaWMnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG4gIGNvbnN0IHN0YXQgPSBnZXRTdGF0ZShjbSk7XHJcbiAgLy8g5o+S5YWl5YaF5a65XHJcbiAgbGV0IHRleHQ7XHJcbiAgbGV0IHN0YXJ0Q2hhcnMgPSBibG9ja1N0eWxlcztcclxuICBsZXQgZW5kQ2hhcnMgPSBibG9ja1N0eWxlcztcclxuXHJcbiAgbGV0IHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XHJcbiAgbGV0IGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcclxuXHJcbiAgLy8g5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgaWYgKHN0YXRbdHlwZV0pIHtcclxuICAgIFxyXG4gIH0gZWxzZSB7IC8vIOmcgOimgeaPkuWFpeeahOWGheWuuVxyXG4gICAgdGV4dCA9IGNtLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmKHR5cGUgPT0gXCJib2xkXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqKlwiKS5qb2luKFwiXCIpO1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIl9fXCIpLmpvaW4oXCJcIik7XHJcblx0XHR9IGVsc2UgaWYodHlwZSA9PSBcIml0YWxpY1wiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiKlwiKS5qb2luKFwiXCIpO1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIl9cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwic3RyaWtldGhyb3VnaFwiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwifn5cIikuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oc3RhcnRDaGFycyArIHRleHQgKyBlbmRDaGFycyk7XHJcblxyXG4gICAgc3RhcnRQb2ludC5jaCArPSBzdGFydENoYXJzLmxlbmd0aDtcclxuICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgY20uc2V0U2VsZWN0aW9uKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcclxuICBjbS5mb2N1cygpO1xyXG59XHJcblxyXG4vLyA9PT09PT09PT09IOagh+mimOebuOWFsyA9PT09PT09PT09XHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIHRvZ2dsZSBIZWFkaW5nLlxyXG4gKiBg5qCH6aKYYCDlm77moIflpITnkIblip/og71cclxuICovXHJcbmNvbnN0IHRvZ2dsZUhlYWRpbmcgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvd2wuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcbiAgY29uc3QgY20gPSBlZGl0b3IuJGNvZGVtaXJyb3I7XHJcblxyXG4gIC8vIOiOt+WPluW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGNvbnN0IHR5cGUgPSBzZWxmLmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJykgfHwgJ0hlYWRpbmcnO1xyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgYmxvY2tTdHlsZXMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmJsb2NrU3R5bGVzW3R5cGVdO1xyXG4gIGNvbnN0IHN0YXQgPSBnZXRTdGF0ZShjbSk7XHJcbiAgXHJcbiAgbGV0IHN0YXJ0Q2hhcnMgPSBibG9ja1N0eWxlcztcclxuICBsZXQgZW5kQ2hhcnMgPSBibG9ja1N0eWxlcztcclxuXHJcbiAgbGV0IHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7XHJcbiAgbGV0IGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdlbmQnKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IHN0YXJ0UG9pbnQubGluZTsgaSA8PSBlbmRQb2ludC5saW5lOyBpKyspIHtcclxuICAgIC8vIOaPkuWFpeWGheWuuVxyXG4gICAgbGV0IHRleHQgPSBjbS5nZXRMaW5lKGkpO1xyXG4gICAgY29uc3QgY3VyckhlYWRpbmdMZXZlbCA9IHRleHQuc2VhcmNoKC9bXiNdLyk7XHJcblxyXG4gICAgdGV4dCA9IFwiIyBcIiArIHRleHQuc3Vic3RyKGN1cnJIZWFkaW5nTGV2ZWwgKyAxKTtcclxuXHJcbiAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogMFxyXG4gICAgfSwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogOTk5OTk5OTk5OTk5OTlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xpbmcgaGVhZGluZyBzaXplOiBub3JtYWwgLT4gaDEgLT4gaDIgLT4gaDMgLT4gaDQgLT4gaDUgLT4gaDYgLT4gbm9ybWFsXHJcbiAqIGDlsI/moIfpophgIOWkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlSGVhZGluZ1NtYWxsZXIgPSAoZSkgPT4ge31cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIHRvZ2dsaW5nIGhlYWRpbmcgc2l6ZTogbm9ybWFsIC0+IGg2IC0+IGg1IC0+IGg0IC0+IGgzIC0+IGgyIC0+IGgxIC0+IG5vcm1hbFxyXG4gKiBg5aSn5qCH6aKYYCDlpITnkIblip/og71cclxuICovXHJcbmNvbnN0IHRvZ2dsZUhlYWRpbmdCaWdnZXIgPSAoZSkgPT4ge31cclxuXHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciB0b2dnbGUgQmxvY2txdW90ZS5cclxuICogYOW8leWPt2Ag5aSE55CG5Yqf6IO9XHJcbiAqL1xyXG5jb25zdCB0b2dnbGVCbG9ja3F1b3RlID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcbiAgY29uc3QgcmVwbCA9IHtcclxuXHRcdFwicXVvdGVcIjogL14oXFxzKilcXD5cXHMrLyxcclxuXHRcdFwidW5vcmRlcmVkLWxpc3RcIjogL14oXFxzKikoXFwqfFxcLXxcXCspXFxzKy8sXHJcblx0XHRcIm9yZGVyZWQtbGlzdFwiOiAvXihcXHMqKVxcZCtcXC5cXHMrL1xyXG5cdH07XHJcblx0Y29uc3QgbWFwID0ge1xyXG5cdFx0XCJxdW90ZVwiOiBcIj4gXCIsXHJcblx0XHRcInVub3JkZXJlZC1saXN0XCI6IFwiKiBcIixcclxuXHRcdFwib3JkZXJlZC1saXN0XCI6IFwiMS4gXCJcclxuICB9O1xyXG4gIFxyXG4gIGZvciAobGV0IGkgPSBzdGFydFBvaW50LmxpbmU7IGkgPD0gZW5kUG9pbnQubGluZTsgaSsrKSB7XHJcbiAgICBsZXQgdGV4dCA9IGNtLmdldExpbmUoaSk7XHJcbiAgICBpZihzdGF0W3R5cGVdKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVwbFt0eXBlXSwgJyQxJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0ID0gbWFwW3R5cGVdICsgdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogMFxyXG4gICAgfSwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogOTk5OTk5OTk5OTk5OTlcclxuICAgIH0pO1xyXG4gIH1cclxuICBjbS5mb2N1cygpO1xyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIGNvZGUuXHJcbiAqIGDku6PnoIHlnZdgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZUNvZGVCbG9jayA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAnY29kZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICAvLyDmj5LlhaXlhoXlrrlcclxuICBsZXQgdGV4dDtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG5cclxuICBsZXQgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcclxuICBsZXQgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xyXG5cclxuICAvLyDlvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBpZiAoc3RhdFt0eXBlXSkge1xyXG4gICAgXHJcbiAgfSBlbHNlIHsgLy8g6ZyA6KaB5o+S5YWl55qE5YaF5a65XHJcbiAgICB0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIioqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX19cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwiaXRhbGljXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJzdHJpa2V0aHJvdWdoXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJ+flwiKS5qb2luKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY29kZVwiKSB7XHJcbiAgICAgIHRleHQgPSAnXFxuXFxuJztcclxuICAgIH1cclxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oc3RhcnRDaGFycyArIHRleHQgKyBlbmRDaGFycyk7XHJcblxyXG4gICAgc3RhcnRQb2ludC5jaCArPSBzdGFydENoYXJzLmxlbmd0aDtcclxuICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8gY20uc2V0U2VsZWN0aW9uKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcclxuICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgc3RhcnRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIFVub3JkZXJlZExpc3QuXHJcbiAqIGDml6Dluo/liJfooahgIOWkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlVW5vcmRlcmVkTGlzdCA9IChlKSA9PiB7XHJcbiAgdG9nZ2xlQmxvY2txdW90ZShlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlT3JkZXJlZExpc3QuXHJcbiAqIGDmnInluo/liJfooahgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZU9yZGVyZWRMaXN0ID0gKGUpID0+IHtcclxuICB0b2dnbGVCbG9ja3F1b3RlKGUpO1xyXG59XHJcblxyXG4vKipcclxuICog5o+S5YWl5Zu+54mHLlxyXG4gKi9cclxuY29uc3QgZHJhd0ltYWdlID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcblxyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgaW5zZXJ0VGV4dHMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmluc2VydFRleHRzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIGxldCB1cmwgPSAnJztcclxuICBcclxuICB1cmwgPSBwcm9tcHQoJ+ivt+i+k+WFpeWbvueJh+WcsOWdgCcsICcnKTtcclxuICBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xyXG4gIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmltYWdlLCBpbnNlcnRUZXh0cywgdXJsKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOaPkuWFpemTvuaOpS5cclxuICovXHJcbmNvbnN0IGRyYXdMaW5rID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcblxyXG4gIC8vIOW9k+WJjeWdl+WvueW6lOeahCBtYXJrZG93biDnsbvlnosuXHJcbiAgY29uc3QgaW5zZXJ0VGV4dHMgPSBlZGl0b3IuX29wdGlvbnMuJHRvb2xzLmluc2VydFRleHRzW3R5cGVdO1xyXG5cclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIGxldCB1cmwgPSAnJztcclxuICBcclxuICAvLyB1cmwgPSBwcm9tcHQoJ+ivt+i+k+WFpemTvuaOpScsICcnKTtcclxuICAvLyBpZiAoIXVybCkgcmV0dXJuIGZhbHNlO1xyXG4gIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmxpbmssIGluc2VydFRleHRzLCB1cmwpO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgQmFjay5cclxuICog6L+U5Zue5LiA5q2lKOaSpOmUgCkuIFxyXG4gKi9cclxuY29uc3Qgb25VbmRvID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcblxyXG4gIGlmICghRURJVE9SKSBFRElUT1IgPSBlZGl0b3I7XHJcblxyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG4gIGlmIChjbSkge1xyXG4gICAgY29uc3QgaGlzdG9yeSA9IGNtLmdldEhpc3RvcnkoKTtcclxuICAgIGNvbnNvbGUubG9nKCflm57pgIAnLCBoaXN0b3J5KTtcclxuICAgIGNtLnVuZG9TZWxlY3Rpb24oKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIEZyb250LlxyXG4gKiDliY3ov5vkuIDmraUo6YeN5YGaKS5cclxuICovXHJcbmNvbnN0IG9uUmVkbyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG5cclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuICBpZiAoY20pIHtcclxuICAgIGNvbnN0IGhpc3RvcnkgPSBjbS5nZXRIaXN0b3J5KCk7XHJcbiAgICBjb25zb2xlLmxvZygn5Y+W5raI5pKk6ZSAJywgaGlzdG9yeSk7XHJcbiAgICBjbS5yZWRvU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5LuF5pi+56S657yW6L6R6YOo5YiGXHJcbiAqL1xyXG5jb25zdCBvcGVuRWRpdCA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzT25seUVkaXQgPSBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddO1xyXG5cclxuICAvLyDlvZPliY3lj6rmmL7npLrnvJbovpHmlYjmnpxcclxuICBpZiAoaXNPbmx5RWRpdCkgcmV0dXJuO1xyXG5cclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gdHJ1ZTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddID0gIUVESVRPUi4kc3RhdHVzWydpc09ubHlFZGl0J107XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzU2hvd0FsbCddID0gIUVESVRPUi4kc3RhdHVzWydpc09ubHlFZGl0J107XHJcblxyXG4gIHRvZ2dsZUNsYXNzKHNlbGYsICdhY3RpdmUnKTtcclxuXHJcbiAgLy8g6ZqQ6JePIGDpooTop4jlrrnlmahg77yM5pi+56S6IGDlhoXlrrnnvJbovpHlrrnlmahgLlxyXG4gIGNvbnN0IGVkaXRvckVsID0gRURJVE9SLl9vcHRpb25zLmVsO1xyXG4gIGNvbnN0IHByZXZpZXdFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItcHJldmlldycpO1xyXG4gIGNvbnN0IG1kRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgaWYgKG1kRWwpIHJlbW92ZUNsYXNzKG1kRWwsICdoaWRlJyk7XHJcbiAgaWYgKHByZXZpZXdFbCkgYWRkQ2xhc3MocHJldmlld0VsLCAnaGlkZScpO1xyXG5cclxuICAvLyBg5Y+q5pi+56S66aKE6KeI5Zu+5qCHYCDljrvmjonmv4DmtLvnirbmgIEuXHJcbiAgY29uc3QgdG9vbFByZXZpZXdFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1leWUnKTtcclxuICBjb25zdCB0b29sU2hvd0FsbEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLWNvbHVtbnMnKTtcclxuICBpZiAodG9vbFByZXZpZXdFbCkgcmVtb3ZlQ2xhc3ModG9vbFByZXZpZXdFbCwgJ2FjdGl2ZScpO1xyXG4gIGlmICh0b29sU2hvd0FsbEVsKSByZW1vdmVDbGFzcyh0b29sU2hvd0FsbEVsLCAnYWN0aXZlJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmmL7npLrnvJbovpHlkozpooTop4guXHJcbiAqL1xyXG5jb25zdCBvcGVuQ29tcGFyZSA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzU2hvd0FsbCA9IEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuXHJcbiAgLy8g5bey57uP5r+A5rS75YaN5qyh54K55Ye75LiN6L+b6KGM5aSE55CGLlxyXG4gIGlmIChpc1Nob3dBbGwpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzU2hvd0FsbCddID0gdHJ1ZTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuXHJcbiAgdG9nZ2xlQ2xhc3Moc2VsZiwgJ2FjdGl2ZScpO1xyXG5cclxuICAvLyDmmL7npLogYOmihOiniOWuueWZqGDvvIzmmL7npLogYOWGheWuuee8lui+keWuueWZqGAuXHJcbiAgY29uc3QgZWRpdG9yRWwgPSBFRElUT1IuX29wdGlvbnMuZWw7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgY29uc3QgbWRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItbWQnKTtcclxuICBpZiAobWRFbCkgcmVtb3ZlQ2xhc3MobWRFbCwgJ2hpZGUnKTtcclxuICBpZiAocHJldmlld0VsKSByZW1vdmVDbGFzcyhwcmV2aWV3RWwsICdoaWRlJyk7XHJcblxyXG4gIC8vIOWOu+aOiSBg57yW6L6RYCBg6aKE6KeIYCDmv4DmtLvmlYjmnpwuXHJcbiAgY29uc3QgdG9vbEVkaXRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1wZW4nKTtcclxuICBjb25zdCB0b29sUHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLWV5ZScpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xQcmV2aWV3RWwpIHJlbW92ZUNsYXNzKHRvb2xQcmV2aWV3RWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOS7heaYvuekuumihOiniOmDqOWIhi4gXHJcbiAqL1xyXG5jb25zdCBvcGVuUHJldmlldyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzT25seVByZXZpZXcgPSBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICAvLyDlvZPliY3lj6rmmL7npLrpooTop4jop4blm74uXHJcbiAgaWYgKGlzT25seVByZXZpZXcpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seVByZXZpZXcnXSA9IHRydWU7XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seUVkaXQnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG4gIEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICB0b2dnbGVDbGFzcyhzZWxmLCAnYWN0aXZlJyk7XHJcblxyXG4gIC8vIOaYvuekuu+8miBg6aKE6KeI5a655ZmoYO+8jOmakOiXj++8mmDlhoXlrrnnvJbovpHlrrnlmahgLlxyXG4gIGNvbnN0IGVkaXRvckVsID0gRURJVE9SLl9vcHRpb25zLmVsO1xyXG4gIGNvbnN0IG1kRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgaWYgKG1kRWwpIGFkZENsYXNzKG1kRWwsICdoaWRlJyk7XHJcbiAgaWYgKHByZXZpZXdFbCkgcmVtb3ZlQ2xhc3MocHJldmlld0VsLCAnaGlkZScpO1xyXG5cclxuICAvLyBg5Y+q5pi+56S657yW6L6R5Zu+5qCHYCDljrvmjonmv4DmtLvnirbmgIFcclxuICBjb25zdCB0b29sRWRpdEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLXBlbicpO1xyXG4gIGNvbnN0IHRvb2xTaG93QWxsRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXRvb2xzJykucXVlcnlTZWxlY3RvcignLmljb24tY29sdW1ucycpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xTaG93QWxsRWwpIHJlbW92ZUNsYXNzKHRvb2xTaG93QWxsRWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWFqOWxj+aMiemSrueCueWHu+WkhOeQhuWbnuiwgy4gXHJcbiAqL1xyXG5jb25zdCBvcGVuRnVsbFNjcmVlbiA9IChlKSA9PiB7XHJcbiAgY29tbW9uQWN0aW9uKGUpO1xyXG5cclxuICBjb25zdCBlZGl0b3JFbCA9IEVESVRPUi5fb3B0aW9ucy5lbDtcclxuXHJcbiAgdG9nZ2xlQ2xhc3MoZWRpdG9yRWwsICdmdWxsc2NyZWVuJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBg5YWz5LqOYCDngrnlh7vlpITnkIblm57osIMuXHJcbiAqL1xyXG5jb25zdCBhYm91dEVkaXRvciA9ICgpID0+IHtcclxuICB3aW5kb3cub3BlbihnaXRHdWJVcmwpO1xyXG59XHJcblxyXG4vKipcclxuICog5Zu+54mH5ZKM5Zyw5Z2A5o+S5YWl5YaF5a655aSE55CGLiBcclxuICovXHJcbmZ1bmN0aW9uIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBhY3RpdmUsIHN0YXJ0RW5kLCB1cmwpIHtcclxuXHR2YXIgdGV4dDtcclxuXHR2YXIgc3RhcnQgPSBzdGFydEVuZFswXTtcclxuXHR2YXIgZW5kID0gc3RhcnRFbmRbMV07XHJcblx0dmFyIHN0YXJ0UG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJzdGFydFwiKTtcclxuXHR2YXIgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJlbmRcIik7XHJcblx0Ly8gaWYodXJsKSB7XHJcbiAgLy8gICBlbmQgPSBlbmQucmVwbGFjZShcIiN1cmwjXCIsIHVybCk7XHJcbiAgLy8gfVxyXG4gIGVuZCA9IGVuZC5yZXBsYWNlKFwiI3VybCNcIiwgdXJsKTtcclxuXHRpZihhY3RpdmUpIHtcclxuXHRcdHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XHJcblx0XHRzdGFydCA9IHRleHQuc2xpY2UoMCwgc3RhcnRQb2ludC5jaCk7XHJcblx0XHRlbmQgPSB0ZXh0LnNsaWNlKHN0YXJ0UG9pbnQuY2gpO1xyXG5cdFx0Y20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XHJcblx0XHRcdGxpbmU6IHN0YXJ0UG9pbnQubGluZSxcclxuXHRcdFx0Y2g6IDBcclxuXHRcdH0pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XHJcblxyXG5cdFx0c3RhcnRQb2ludC5jaCArPSBzdGFydC5sZW5ndGg7XHJcblx0XHRpZihzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xyXG5cdFx0XHRlbmRQb2ludC5jaCArPSBzdGFydC5sZW5ndGg7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRvb2xzIOWbvuagh+eCueWHu+Wbnuiwg+WkhOeQhuWHveaVsOS4reebuOWQjOeahOWkhOeQhumDqOWIhi4gXHJcbiAqIFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZSDop6blj5Hlm77moIflr7nlupTlm57osIPnmoTkuovku7blr7nosaEuXHJcbiAqIEByZXR1cm4ge09iamVjdH0gZWRpdG9yIOe8lui+keWZqOWunuS+i+WvueixoS5cclxuICovXHJcbmZ1bmN0aW9uIGNvbW1vbkFjdGlvbiAoZSkge1xyXG4gIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuXHJcbiAgdG9nZ2xlQ2xhc3Moc2VsZiwgJ2FjdGl2ZScpO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG5cclxuICByZXR1cm4gZWRpdG9yO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICog5bel5YW35oyJ6ZKu5a6a5LmJ6ZuG5ZCILlxyXG4gKiBcclxuICogYGl0ZW0ubmFtZWAgICAgICAgICAgICAgICDmjInpkq7lkI1cclxuICogYGl0ZW0uYWN0aW9uYCAgICAgICAgICAgICDlpITnkIblh73mlbBcclxuICogYGl0ZW0uY2xhc3NOYW1lYCAgICAgICAgICDlm77moIflkI1cclxuICogYGl0ZW0udGl0bGVgICAgICAgICAgICAgICBob3ZlciDmoIfpophcclxuICogYGl0ZW0uZGVmYXVsdGAgICAgICAgICAgICDpu5jorqTlrprkuYnnmoRcclxuICogYGl0ZW0uaW5kZXhgICAgICAgICAgICAgICDmlL7nva7nmoTpobrluo/vvIzotorlsI/otorpnaDliY1cclxuICogYGl0ZW0uaXNFZGl0VG9vbHNgICAgICAgICDmmK/lkKbkuLrlhoXlrrnnvJbovpHlm77moIfjgIJcclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICDlt6XlhbfmoI/lm77moIfliIbkuKTlpKfnsbs6IDEuIOWGheWuuee8lui+keW3peWFt+Wbvuagh++8jDIuIOmihOiniOWPiuW4g+WxgOiuvue9ruW3peWFt+Wbvuagh1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqL1xyXG5jb25zdCB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgPSB7XHJcbiAgJ2JvbGQnOiB7XHJcbiAgICBuYW1lOiAnYm9sZCcsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUJvbGQsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWJvbGQnLFxyXG4gICAgdGl0bGU6ICdCb2xkJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaXRhbGljJzoge1xyXG4gICAgbmFtZTogJ2l0YWxpYycsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUl0YWxpYyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24taXRhbGljJyxcclxuICAgIHRpdGxlOiAnSXRhbGljJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMSxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaGVhZGluZyc6IHtcclxuICAgIG5hbWU6ICdoZWFkaW5nJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlSGVhZGluZyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24taGVhZGluZycsXHJcbiAgICB0aXRsZTogJ0hlYWRpbmcnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAyLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdxdW90ZSc6IHtcclxuICAgIG5hbWU6ICdxdW90ZScsXHJcbiAgICBhY3Rpb246IHRvZ2dsZUJsb2NrcXVvdGUsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLXF1b3RhdGlvbi1tYXJrcycsXHJcbiAgICB0aXRsZTogJ1F1b3RlJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMyxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnY29kZSc6IHtcclxuICAgIG5hbWU6ICdjb2RlJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlQ29kZUJsb2NrLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1jb2RlJyxcclxuICAgIHRpdGxlOiAnQ29kZScsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDQsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3Vub3JkZXJlZC1saXN0Jzoge1xyXG4gICAgbmFtZTogJ3Vub3JkZXJlZC1saXN0JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tTGlzdG9maXNzdWVzJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlVW5vcmRlcmVkTGlzdCxcclxuICAgIHRpdGxlOiAnR2VuZXJpYyBMaXN0JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNSxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnb3JkZXJlZC1saXN0Jzoge1xyXG4gICAgbmFtZTogJ29yZGVyZWQtbGlzdCcsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWxpc3QnLFxyXG4gICAgYWN0aW9uOiB0b2dnbGVPcmRlcmVkTGlzdCxcclxuICAgIHRpdGxlOiAnTnVtYmVyIExpc3QnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiA2LFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdsaW5rJzoge1xyXG4gICAgbmFtZTogJ2xpbmsnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1saW5rJyxcclxuICAgIGFjdGlvbjogZHJhd0xpbmssXHJcbiAgICB0aXRsZTogJ0luc2VydCBMaW5rJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNyxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnaW1hZ2UnOiB7XHJcbiAgICBuYW1lOiAnaW1hZ2UnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1pbWcnLFxyXG4gICAgYWN0aW9uOiBkcmF3SW1hZ2UsXHJcbiAgICB0aXRsZTogJ0luc2VydCBJbWFnZScsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDgsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3VuZG8nOiB7XHJcbiAgICBuYW1lOiAndW5kbycsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWdvTGVmdCcsXHJcbiAgICBhY3Rpb246IG9uVW5kbyxcclxuICAgIHRpdGxlOiAnVW5kbycsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDksXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3JlZG8nOiB7XHJcbiAgICBuYW1lOiAncmVkbycsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWdvUmlnaHQnLFxyXG4gICAgYWN0aW9uOiBvblJlZG8sXHJcbiAgICB0aXRsZTogJ1JlZG8nLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAxMCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAnYWJvdXQnOiB7XHJcbiAgICBuYW1lOiAnYWJvdXQnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1xdWVzdGlvbicsXHJcbiAgICBhY3Rpb246IGFib3V0RWRpdG9yLFxyXG4gICAgdGl0bGU6ICdBYm91dCBFZGl0b3InLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAwLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAnZWRpdCc6IHtcclxuICAgIG5hbWU6ICdlZGl0JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tcGVuJyxcclxuICAgIGFjdGlvbjogb3BlbkVkaXQsXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBFZGl0JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMSxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcbiAgJ2NvbXBhcmUnOiB7XHJcbiAgICBuYW1lOiAnY29tcGFyZScsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWNvbHVtbnMnICsgJyBhY3RpdmUnLFxyXG4gICAgYWN0aW9uOiBvcGVuQ29tcGFyZSxcclxuICAgIHRpdGxlOiAnVG9nZ2xlIENvbXBhcmUnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAyLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAncHJldmlldyc6IHtcclxuICAgIG5hbWU6ICdwcmV2aWV3JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tZXllJyxcclxuICAgIGFjdGlvbjogb3BlblByZXZpZXcsXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBQcmV2aWV3JyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogMyxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcbiAgJ2Z1bGxzY3JlZW4nOiB7XHJcbiAgICBuYW1lOiAnZnVsbHNjcmVlbicsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWZ1bGwtc2NyZWVuJyxcclxuICAgIGFjdGlvbjogb3BlbkZ1bGxTY3JlZW4sXHJcbiAgICB0aXRsZTogJ1RvZ2dsZSBGdWxsc2NyZWVuJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNCxcclxuICAgIGlzRWRpdFRvb2xzOiBmYWxzZVxyXG4gIH0sXHJcblxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBNYXJrZG93biDmoLzlvI/mqKHmnb8uXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IGluc2VydFRleHRzID0ge1xyXG4gIGxpbms6IFtcIltcIiwgXCJdKCN1cmwjKVwiXSxcclxuXHRpbWFnZTogW1wiIVtdKFwiLCBcIiN1cmwjKVwiXSxcclxuXHR0YWJsZTogW1wiXCIsIFwiXFxuXFxufCBDb2x1bW4gMSB8IENvbHVtbiAyIHwgQ29sdW1uIDMgfFxcbnwgLS0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tIHxcXG58IFRleHQgICAgIHwgVGV4dCAgICAgfCBUZXh0ICAgICB8XFxuXFxuXCJdLFxyXG5cdGhvcml6b250YWxSdWxlOiBbXCJcIiwgXCJcXG5cXG4tLS0tLVxcblxcblwiXVxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDov5znqIvpu5jorqTnmoTmloflrZcuXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IHByb21wdFRleHRzID0ge1xyXG5cdGxpbms6IFwiVVJMIGZvciB0aGUgbGluazpcIixcclxuXHRpbWFnZTogXCJVUkwgb2YgdGhlIGltYWdlOlwiXHJcbn1cclxuXHJcbi8qKlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIE1hcmtkb3duIOWdl+e6p+agvOW8j+aooeadvy5cclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKi9cclxuY29uc3QgYmxvY2tTdHlsZXMgPSB7XHJcbiAgXCJib2xkXCI6IFwiKipcIixcclxuXHRcImNvZGVcIjogXCJgYGBcIixcclxuXHRcIml0YWxpY1wiOiBcIipcIlxyXG59XHJcblxyXG4vKipcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiDlv6vmjbfplK7mjInplK7or7TmmI7mloflrZcuXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICovXHJcbmNvbnN0IHNob3J0Y3V0cyA9IHtcclxuICBcImJvbGRcIjogXCJDbWQtQlwiLFxyXG5cdFwiaXRhbGljXCI6IFwiQ21kLUlcIixcclxuXHRcImxpbmtcIjogXCJDbWQtS1wiLFxyXG4gIFwiaGVhZGluZ1wiOiBcIkNtZC1IXCIsXHJcbiAgXCJxdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJ0b2dnbGVIZWFkaW5nQmlnZ2VyXCI6IFwiU2hpZnQtQ21kLUhcIixcclxuXHRcImNsZWFuQmxvY2tcIjogXCJDbWQtRVwiLFxyXG4gIFwiaW1hZ2VcIjogXCJDbWQtQWx0LUlcIixcclxuICBcImJhY2tcIjogXCJDbWQtWlwiLFxyXG4gIFwiZnJvbnRcIjogXCJDbWQtWVwiLFxyXG5cdFwidG9nZ2xlQmxvY2txdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJvcmRlcmVkLWxpc3RcIjogXCJDbWQtQWx0LUxcIixcclxuXHRcInVub3JkZXJlZC1saXN0XCI6IFwiQ21kLUxcIixcclxuXHRcInRvZ2dsZUNvZGVCbG9ja1wiOiBcIkNtZC1BbHQtQ1wiLFxyXG5cdFwidG9nZ2xlUHJldmlld1wiOiBcIkNtZC1QXCIsXHJcblx0XCJ0b2dnbGVTaWRlQnlTaWRlXCI6IFwiRjlcIixcclxuXHRcInRvZ2dsZUZ1bGxTY3JlZW5cIjogXCJGMTFcIlxyXG59XHJcblxyXG4vKipcclxuICogd2luIOWSjCBNYWMg5b+r5o236ZSu5YW85a655aSE55CG5Yqf6IO95Ye95pWwXHJcbiAqIEBwYXJhbSB7b2JqZXR9IG5hbWUgXHJcbiAqIEBkZXNjIHdpbjogQ3RybDsgbWFjOiBDbWRcclxuICovXHJcbmNvbnN0IGZpeFNob3J0Y3V0ID0gKG5hbWUpID0+IHtcclxuICBpZiAoaXNNYWMpIHtcclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ0N0cmwnLCAnQ21kJyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJ0NtZCcsICdDdHJsJyk7XHJcbiAgfVxyXG4gIHJldHVybiBuYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgdG9vbGJhckJ1aWx0SW5CdXR0b25zLFxyXG5cclxuICBpbnNlcnRUZXh0cyxcclxuXHJcbiAgcHJvbXB0VGV4dHMsXHJcblxyXG4gIGJsb2NrU3R5bGVzLFxyXG5cclxuICBzaG9ydGN1dHMsXHJcblxyXG4gIGZpeFNob3J0Y3V0XHJcbn0iLCJjb25zdCBVdGlsID0ge1xyXG4gIC8qKlxyXG4gICAqIE1lcmdlIHRoZSBwcm9wZXJ0aWVzIG9mIG9uZSBvYmplY3QgaW50byBhbm90aGVyLlxyXG4gICAqIOWwhuS4gOS4quWvueixoeeahOWxnuaAp+WQiOW5tuWIsOWPpuS4gOS4quWvueixoeS4ii4gXHJcbiAgICogT2JqZWN0LmFzc2lnbih7fSwge3BlcnNvbjoge25hbWU6IDEsIGFnZTogMTZ9fSwge3BlcnNvbjoge25hbWU6MX19KVxyXG4gICAqIOS9v+eUqCBPYmplY3QuYXNzaWduIOmcgOimgeWkhOeQhuWkmuWxguaVsOaNruWJjeWPsOeahOmXrumimO+8jOi/memHjOWwseiHquihjOWwgeijheS6hi5cclxuICAgKi9cclxuICBfbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcclxuICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBpZiAoc291cmNlW3Byb3BlcnR5XSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wZXJ0eV0gaW5zdGFuY2VvZiBBcnJheSA/IHRhcmdldFtwcm9wZXJ0eV0gOiBbXTtcclxuICAgICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldLmNvbmNhdCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdHlwZW9mIHNvdXJjZVtwcm9wZXJ0eV0gPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICBzb3VyY2VbcHJvcGVydHldLmNvbnN0cnVjdG9yID09PSBPYmplY3QgKSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gdGhpcy5fbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldFtwcm9wZXJ0eV0gfHwge30sIHNvdXJjZVtwcm9wZXJ0eV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0YXJnZXRbcHJvcGVydHldID0gc291cmNlW3Byb3BlcnR5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG4gIH0sXHJcbiAgXHJcbiAgLyoqIFxyXG4gICAqIE1lcmdlIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygb2JqZWN0cyBpbnQgb25lLlxyXG4gICAqIOWwhuS7u+aEj+aVsOmHj+eahOWvueixoeWQiOW5tuWIsOS4gOS4quWvueixoeS4ii5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge30gdGFyZ2V0IFxyXG4gICAqL1xyXG4gIGV4dGVuZCh0YXJnZXQpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRhcmdldCA9IHRoaXMuX21lcmdlUHJvcGVydGllcyh0YXJnZXQsIGFyZ3VtZW50c1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxuICB9LFxyXG5cclxuICBpc01hYzogL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLFxyXG5cclxuICAvKipcclxuICAgKiDlhYPntKDmoLflvI/liIfmjaIuIFxyXG4gICAqL1xyXG4gIHRvZ2dsZUNsYXNzKGVsLCBjbGFzc05hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgZWwgIT09ICdvYmplY3QnKSByZXR1cm47XHJcbiAgICBjb25zdCBpc0V4aXN0ID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XHJcbiAgICBpZiAoaXNFeGlzdCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICog5YWD57Sg5qC35byP5aKe5YqgLiBcclxuICAgKi9cclxuICBhZGRDbGFzcyhlbCwgY2xhc3NOYW1lKSB7XHJcbiAgICBpZiAodHlwZW9mIGVsICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNFeGlzdCA9IGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xyXG4gICAgaWYgKCFpc0V4aXN0KSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOWFg+e0oOagt+W8j+WIoOmZpC4gXHJcbiAgICovXHJcbiAgcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xyXG4gICAgaWYgKHR5cGVvZiBlbCAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuICAgIGNvbnN0IGlzRXhpc3QgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcclxuICAgIGlmIChpc0V4aXN0KSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiDlr7nosaHovazkuLrmlbDnu4QuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiDpnIDopoHovazmjaLnmoTlr7nosaEuIFxyXG4gICAqL1xyXG4gIG9iajJBcnIob2JqKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgIGNvbnN0IGtleUFyciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XHJcbiAgICBpZiAoa2V5QXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICBrZXlBcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICB2YWx1ZSA9IG9ialtpdGVtXTtcclxuICAgICAgICBhcnIucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiDliKTmlq3mmK/lkKbkuLrlh73mlbAuIFxyXG4gICAqL1xyXG4gIGlzRnVuY3Rpb24oZm4pIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlsOyIsImltcG9ydCBsYW5nIGZyb20gJy4vbGFuZy9lbic7XHJcblxyXG4vKiogPT09PT09PT09PSDnvJbovpHlmajpu5jorqTphY3nva7moLzlvI8gPT09PT09PT09PSAgKi9cclxuY29uc3QgY29uZmlnID0ge1xyXG4gIGJhc2VVcmw6ICdodHRwczovL3d3dy5naXRodWIuY29tJyxcclxuICAvKiog6Zi/6YeM5Zu+5qCH6L+e5o6lICovXHJcbiAgaWNvbkxpbms6ICcvL2F0LmFsaWNkbi5jb20vdC9mb250XzgyMzAzMF9neHZrZ2FocHg0OS5jc3MnLFxyXG4gIGdpdEd1YlVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9KZXNvbmh1L2Nvb2wtbWQtZWRpdG9yJyxcclxuICBlZGl0b3I6IHtcclxuICAgIC8qKiDmt7vliqDnu5lg57yW6L6R5ZmoYOmhtue6p+WuueWZqOeahOagt+W8j+exu+WQjSAqL1xyXG4gICAgY2xhc3NOYW1lOiB7XHJcbiAgICAgIC8qKiDpu5HoibLkuLvpopggKi9cclxuICAgICAgdGhlbWVEYXJrOiAnZWRpdG9yLXRoZW1lLWRhcmsnLFxyXG4gICAgICAvKiog5Lqu6Imy5Li76aKYICovXHJcbiAgICAgIHRoZW1lTGlnaHQ6ICdlZGl0b3ItdGhlbWUtbGlnaHQnLFxyXG4gICAgICAvKiog5YWo5bGPICovXHJcbiAgICAgIGZ1bGxzY3JlZW46ICdlZGl0b3Itc3RhdHVzX2Z1bGxzY3JlZW4nLFxyXG4gICAgICAvKiog5a+55q+U6aKE6KeIICovXHJcbiAgICAgIGNvbXBhcmU6ICdlZGl0b3Itc3RhdHVzX3Nob3ctYWxsJyxcclxuICAgICAgLyoqIOS7hee8lui+kSAqL1xyXG4gICAgICBlZGl0OiAnZWRpdG9yLXN0YXR1c19vbmx5LWVkaXQnLFxyXG4gICAgICAvKiog5LuF55yL6aKE6KeIICovXHJcbiAgICAgIHByZXZpZXc6ICdlZGl0b3Itc3RhdHVzX29ubHktcHJldmlldycsXHJcbiAgICB9LFxyXG4gICAgdGhlbWU6IHtcclxuICAgICAgZGFyazoge1xyXG4gICAgICAgIGNsYXNzTmFtZTogJ2VkaXRvci10aGVtZS1kYXJrJyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWRhcmsnXHJcbiAgICAgIH0sXHJcbiAgICAgIGxpZ2h0OiB7XHJcbiAgICAgICAgY2xhc3NOYW1lOiAnZWRpdG9yLXRoZW1lLWxpZ2h0JyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWxpZ2h0J1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbGFuZ3VhZ2U6IGxhbmdcclxuICB9LFxyXG4gIHNob3J0Y3V0czoge1xyXG4gICAgaXNPcGVuOiBmYWxzZSxcclxuICB9LFxyXG4gIFxyXG4gIC8vID09PT09IHFpbml1ID09PT09XHJcbiAgcWluaXU6IHtcclxuICAgIHRva2VuQXBpVXJsOiAnaHR0cDovLzEyNy4wLjAuMTozMDAxL2FwaS9xaW5pdS9ibG9nL2dldF90b2tlbicsXHJcbiAgICByZWdpb246ICd6MScsXHJcbiAgICBjb25maWc6IHt9LFxyXG4gICAgcHV0RXh0cmE6IHt9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWc7IiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gZWRpdG9yIGVuZ2xpc2ggbGFudWFnZS5cclxuLy9cclxuLy8gQHVwZGF0ZSAyMDE5LzAxLzIyXHJcbi8vIEBhdXRob3IgSmVzb25odShnaXRodWIpXHJcbi8vIEBlbWlhbCBqZXNvbmh1X3dlYkAxNjMuY29tXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgdG9vbGJhckl0ZW06IHtcclxuICAgICdib2xkJzogJ0JvbGQnLFxyXG4gICAgJ2l0YWxpYyc6ICdJdGFsaWMnLFxyXG4gICAgJ2hlYWRpbmcnOiAnSGVhZGluZycsXHJcbiAgICAncXVvdGUnOiAnUXVvdGUnLFxyXG4gICAgJ2NvZGUnOiAnQ29kZScsXHJcbiAgICAndW5vcmRlcmVkLWxpc3QnOiAnR2VuZXJpYyBMaXN0JyxcclxuICAgICdvcmRlcmVkLWxpc3QnOiAnTnVtYmVyIExpc3QnLFxyXG4gICAgJ2xpbmsnOiAnSW5zZXJ0IExpbmsnLFxyXG4gICAgJ2ltYWdlJzogJ0luc2VydCBJbWFnZScsXHJcbiAgICAndW5kbyc6ICdVbmRvJyxcclxuICAgICdyZWRvJzogJ1JlZG8nLFxyXG4gICAgJ2Fib3V0JzogJ0Fib3V0IEVkaXRvcicsXHJcbiAgICAnZWRpdCc6ICdUb2dnbGUgRWRpdCcsXHJcbiAgICAnY29tcGFyZSc6ICdUb2dnbGUgQ29tcGFyZScsXHJcbiAgICAncHJldmlldyc6ICdUb2dnbGUgUHJldmlldycsXHJcbiAgICAnZnVsbHNjcmVlbic6ICdUb2dnbGUgRnVsbHNjcmVlbidcclxuICB9LFxyXG4gIHN0YXR1c0Jhcjoge1xyXG4gICAgbGluZTogJ2xpbmUnLFxyXG4gICAgY29sdW1uczogJ2NvbHVtbnMnLFxyXG4gICAgbGVuZ3RoOiAnbGVuZ3RoJ1xyXG4gIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IHtcclxuICAvKipcclxuICAgKiDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnosuIFxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7Y219IGNvZGVtaXJyb3Ig5a+56LGhLlxyXG4gICAqIEBwYXJhbSB7cG9zfSBwb3Mg5L2N572uLlxyXG4gICAqL1xyXG4gIGdldFN0YXRlKGNtLCBwb3MpIHtcclxuICAgIHBvcyA9IHBvcyB8fCBjbS5nZXRDdXJzb3IoXCJzdGFydFwiKTtcclxuICAgIHZhciBzdGF0ID0gY20uZ2V0VG9rZW5BdChwb3MpO1xyXG4gICAgaWYgKCFzdGF0LnR5cGUpIHJldHVybiB7fTtcclxuXHJcbiAgICB2YXIgdHlwZXMgPSBzdGF0LnR5cGUuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgIHZhciByZXQgPSB7fSxcclxuICAgICAgZGF0YSwgdGV4dDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGF0YSA9IHR5cGVzW2ldO1xyXG4gICAgICBpZiAoZGF0YSA9PT0gXCJzdHJvbmdcIikge1xyXG4gICAgICAgIHJldC5ib2xkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInZhcmlhYmxlLTJcIikge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHBvcy5saW5lKTtcclxuICAgICAgICBpZiAoL15cXHMqXFxkK1xcLlxccy8udGVzdCh0ZXh0KSkge1xyXG4gICAgICAgICAgcmV0W1wib3JkZXJlZC1saXN0XCJdID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0W1widW5vcmRlcmVkLWxpc3RcIl0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImF0b21cIikge1xyXG4gICAgICAgIHJldC5xdW90ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gXCJlbVwiKSB7XHJcbiAgICAgICAgcmV0Lml0YWxpYyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gXCJxdW90ZVwiKSB7XHJcbiAgICAgICAgcmV0LnF1b3RlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG4gICAgICAgIHJldC5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImNvbW1lbnRcIikge1xyXG4gICAgICAgIHJldC5jb2RlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImxpbmtcIikge1xyXG4gICAgICAgIHJldC5saW5rID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInRhZ1wiKSB7XHJcbiAgICAgICAgcmV0LmltYWdlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLm1hdGNoKC9eaGVhZGVyKFxcLVsxLTZdKT8kLykpIHtcclxuICAgICAgICByZXRbZGF0YS5yZXBsYWNlKFwiaGVhZGVyXCIsIFwiaGVhZGluZ1wiKV0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxufSIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiksIHJlcXVpcmUoXCIuLi94bWwveG1sXCIpLCByZXF1aXJlKFwiLi4vbWV0YVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL3htbC94bWxcIiwgXCIuLi9tZXRhXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcIm1hcmtkb3duXCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7XG5cbiAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtQ2ZnLCBcInRleHQvaHRtbFwiKTtcbiAgdmFyIGh0bWxNb2RlTWlzc2luZyA9IGh0bWxNb2RlLm5hbWUgPT0gXCJudWxsXCJcblxuICBmdW5jdGlvbiBnZXRNb2RlKG5hbWUpIHtcbiAgICBpZiAoQ29kZU1pcnJvci5maW5kTW9kZUJ5TmFtZSkge1xuICAgICAgdmFyIGZvdW5kID0gQ29kZU1pcnJvci5maW5kTW9kZUJ5TmFtZShuYW1lKTtcbiAgICAgIGlmIChmb3VuZCkgbmFtZSA9IGZvdW5kLm1pbWUgfHwgZm91bmQubWltZXNbMF07XG4gICAgfVxuICAgIHZhciBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNtQ2ZnLCBuYW1lKTtcbiAgICByZXR1cm4gbW9kZS5uYW1lID09IFwibnVsbFwiID8gbnVsbCA6IG1vZGU7XG4gIH1cblxuICAvLyBTaG91bGQgY2hhcmFjdGVycyB0aGF0IGFmZmVjdCBoaWdobGlnaHRpbmcgYmUgaGlnaGxpZ2h0ZWQgc2VwYXJhdGU/XG4gIC8vIERvZXMgbm90IGluY2x1ZGUgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgb3V0cHV0IChzdWNoIGFzIGAxLmAgYW5kIGAtYCBmb3IgbGlzdHMpXG4gIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcgPSBmYWxzZTtcblxuICAvLyBNYXhpbXVtIG51bWJlciBvZiBuZXN0ZWQgYmxvY2txdW90ZXMuIFNldCB0byAwIGZvciBpbmZpbml0ZSBuZXN0aW5nLlxuICAvLyBFeGNlc3MgYD5gIHdpbGwgZW1pdCBgZXJyb3JgIHRva2VuLlxuICBpZiAobW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA9IDA7XG5cbiAgLy8gVHVybiBvbiB0YXNrIGxpc3RzPyAoXCItIFsgXSBcIiBhbmQgXCItIFt4XSBcIilcbiAgaWYgKG1vZGVDZmcudGFza0xpc3RzID09PSB1bmRlZmluZWQpIG1vZGVDZmcudGFza0xpc3RzID0gZmFsc2U7XG5cbiAgLy8gVHVybiBvbiBzdHJpa2V0aHJvdWdoIHN5bnRheFxuICBpZiAobW9kZUNmZy5zdHJpa2V0aHJvdWdoID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG5cbiAgaWYgKG1vZGVDZmcuZW1vamkgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLmVtb2ppID0gZmFsc2U7XG5cbiAgaWYgKG1vZGVDZmcuZmVuY2VkQ29kZUJsb2NrSGlnaGxpZ2h0aW5nID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5mZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmcgPSB0cnVlO1xuXG4gIGlmIChtb2RlQ2ZnLnhtbCA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcueG1sID0gdHJ1ZTtcblxuICAvLyBBbGxvdyB0b2tlbiB0eXBlcyB0byBiZSBvdmVycmlkZGVuIGJ5IHVzZXItcHJvdmlkZWQgdG9rZW4gdHlwZXMuXG4gIGlmIChtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlcyA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcudG9rZW5UeXBlT3ZlcnJpZGVzID0ge307XG5cbiAgdmFyIHRva2VuVHlwZXMgPSB7XG4gICAgaGVhZGVyOiBcImhlYWRlclwiLFxuICAgIGNvZGU6IFwiY29tbWVudFwiLFxuICAgIHF1b3RlOiBcInF1b3RlXCIsXG4gICAgbGlzdDE6IFwidmFyaWFibGUtMlwiLFxuICAgIGxpc3QyOiBcInZhcmlhYmxlLTNcIixcbiAgICBsaXN0MzogXCJrZXl3b3JkXCIsXG4gICAgaHI6IFwiaHJcIixcbiAgICBpbWFnZTogXCJpbWFnZVwiLFxuICAgIGltYWdlQWx0VGV4dDogXCJpbWFnZS1hbHQtdGV4dFwiLFxuICAgIGltYWdlTWFya2VyOiBcImltYWdlLW1hcmtlclwiLFxuICAgIGZvcm1hdHRpbmc6IFwiZm9ybWF0dGluZ1wiLFxuICAgIGxpbmtJbmxpbmU6IFwibGlua1wiLFxuICAgIGxpbmtFbWFpbDogXCJsaW5rXCIsXG4gICAgbGlua1RleHQ6IFwibGlua1wiLFxuICAgIGxpbmtIcmVmOiBcInN0cmluZ1wiLFxuICAgIGVtOiBcImVtXCIsXG4gICAgc3Ryb25nOiBcInN0cm9uZ1wiLFxuICAgIHN0cmlrZXRocm91Z2g6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGVtb2ppOiBcImJ1aWx0aW5cIlxuICB9O1xuXG4gIGZvciAodmFyIHRva2VuVHlwZSBpbiB0b2tlblR5cGVzKSB7XG4gICAgaWYgKHRva2VuVHlwZXMuaGFzT3duUHJvcGVydHkodG9rZW5UeXBlKSAmJiBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlc1t0b2tlblR5cGVdKSB7XG4gICAgICB0b2tlblR5cGVzW3Rva2VuVHlwZV0gPSBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlc1t0b2tlblR5cGVdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBoclJFID0gL14oWypcXC1fXSkoPzpcXHMqXFwxKXsyLH1cXHMqJC9cbiAgLCAgIGxpc3RSRSA9IC9eKD86WypcXC0rXXxeWzAtOV0rKFsuKV0pKVxccysvXG4gICwgICB0YXNrTGlzdFJFID0gL15cXFsoeHwgKVxcXSg/PVxccykvaSAvLyBNdXN0IGZvbGxvdyBsaXN0UkVcbiAgLCAgIGF0eEhlYWRlclJFID0gbW9kZUNmZy5hbGxvd0F0eEhlYWRlcldpdGhvdXRTcGFjZSA/IC9eKCMrKS8gOiAvXigjKykoPzogfCQpL1xuICAsICAgc2V0ZXh0SGVhZGVyUkUgPSAvXiB7MCwzfSg/OlxcPXsxLH18LXsyLH0pXFxzKiQvXG4gICwgICB0ZXh0UkUgPSAvXlteIyFcXFtcXF0qX1xcXFw8PmAgXCInKH46XSsvXG4gICwgICBmZW5jZWRDb2RlUkUgPSAvXih+fn4rfGBgYCspWyBcXHRdKihbXFx3KyMtXSopW15cXG5gXSokL1xuICAsICAgbGlua0RlZlJFID0gL15cXHMqXFxbW15cXF1dKz9cXF06LiokLyAvLyBuYWl2ZSBsaW5rLWRlZmluaXRpb25cbiAgLCAgIHB1bmN0dWF0aW9uID0gL1shXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0vXG4gICwgICBleHBhbmRlZFRhYiA9IFwiICAgIFwiIC8vIENvbW1vbk1hcmsgc3BlY2lmaWVzIHRhYiBhcyA0IHNwYWNlc1xuXG4gIGZ1bmN0aW9uIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gZjtcbiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVJc0VtcHR5KGxpbmUpIHtcbiAgICByZXR1cm4gIWxpbmUgfHwgIS9cXFMvLnRlc3QobGluZS5zdHJpbmcpXG4gIH1cblxuICAvLyBCbG9ja3NcblxuICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHtcbiAgICAvLyBSZXNldCBsaW5rVGl0bGUgc3RhdGVcbiAgICBzdGF0ZS5saW5rVGl0bGUgPSBmYWxzZTtcbiAgICBzdGF0ZS5saW5rSHJlZiA9IGZhbHNlO1xuICAgIHN0YXRlLmxpbmtUZXh0ID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgRU0gc3RhdGVcbiAgICBzdGF0ZS5lbSA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IFNUUk9ORyBzdGF0ZVxuICAgIHN0YXRlLnN0cm9uZyA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IHN0cmlrZXRocm91Z2ggc3RhdGVcbiAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgc3RhdGUucXVvdGVcbiAgICBzdGF0ZS5xdW90ZSA9IDA7XG4gICAgLy8gUmVzZXQgc3RhdGUuaW5kZW50ZWRDb2RlXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlLmYgPT0gaHRtbEJsb2NrKSB7XG4gICAgICB2YXIgZXhpdCA9IGh0bWxNb2RlTWlzc2luZ1xuICAgICAgaWYgKCFleGl0KSB7XG4gICAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpXG4gICAgICAgIGV4aXQgPSBpbm5lci5tb2RlLm5hbWUgPT0gXCJ4bWxcIiAmJiBpbm5lci5zdGF0ZS50YWdTdGFydCA9PT0gbnVsbCAmJlxuICAgICAgICAgICghaW5uZXIuc3RhdGUuY29udGV4dCAmJiBpbm5lci5zdGF0ZS50b2tlbml6ZS5pc0luVGV4dClcbiAgICAgIH1cbiAgICAgIGlmIChleGl0KSB7XG4gICAgICAgIHN0YXRlLmYgPSBpbmxpbmVOb3JtYWw7XG4gICAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2VcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlID0gMDtcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IGZhbHNlO1xuICAgIC8vIE1hcmsgdGhpcyBsaW5lIGFzIGJsYW5rXG4gICAgc3RhdGUucHJldkxpbmUgPSBzdGF0ZS50aGlzTGluZVxuICAgIHN0YXRlLnRoaXNMaW5lID0ge3N0cmVhbTogbnVsbH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsb2NrTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZmlyc3RUb2tlbk9uTGluZSA9IHN0cmVhbS5jb2x1bW4oKSA9PT0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgdmFyIHByZXZMaW5lTGluZUlzRW1wdHkgPSBsaW5lSXNFbXB0eShzdGF0ZS5wcmV2TGluZS5zdHJlYW0pO1xuICAgIHZhciBwcmV2TGluZUlzSW5kZW50ZWRDb2RlID0gc3RhdGUuaW5kZW50ZWRDb2RlO1xuICAgIHZhciBwcmV2TGluZUlzSHIgPSBzdGF0ZS5wcmV2TGluZS5ocjtcbiAgICB2YXIgcHJldkxpbmVJc0xpc3QgPSBzdGF0ZS5saXN0ICE9PSBmYWxzZTtcbiAgICB2YXIgbWF4Tm9uQ29kZUluZGVudGF0aW9uID0gKHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMCkgKyAzO1xuXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG5cbiAgICB2YXIgbGluZUluZGVudGF0aW9uID0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgLy8gY29tcHV0ZSBvbmNlIHBlciBsaW5lIChvbiBmaXJzdCB0b2tlbilcbiAgICBpZiAoc3RhdGUuaW5kZW50YXRpb25EaWZmID09PSBudWxsKSB7XG4gICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBzdGF0ZS5pbmRlbnRhdGlvbjtcbiAgICAgIGlmIChwcmV2TGluZUlzTGlzdCkge1xuICAgICAgICBzdGF0ZS5saXN0ID0gbnVsbDtcbiAgICAgICAgLy8gV2hpbGUgdGhpcyBsaXN0IGl0ZW0ncyBtYXJrZXIncyBpbmRlbnRhdGlvbiBpcyBsZXNzIHRoYW4gdGhlIGRlZXBlc3RcbiAgICAgICAgLy8gIGxpc3QgaXRlbSdzIGNvbnRlbnQncyBpbmRlbnRhdGlvbixwb3AgdGhlIGRlZXBlc3QgbGlzdCBpdGVtXG4gICAgICAgIC8vICBpbmRlbnRhdGlvbiBvZmYgdGhlIHN0YWNrLCBhbmQgdXBkYXRlIGJsb2NrIGluZGVudGF0aW9uIHN0YXRlXG4gICAgICAgIHdoaWxlIChsaW5lSW5kZW50YXRpb24gPCBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgc3RhdGUubGlzdFN0YWNrLnBvcCgpO1xuICAgICAgICAgIGlmIChzdGF0ZS5saXN0U3RhY2subGVuZ3RoKSB7XG4gICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgLy8gbGVzcyB0aGFuIHRoZSBmaXJzdCBsaXN0J3MgaW5kZW50IC0+IHRoZSBsaW5lIGlzIG5vIGxvbmdlciBhIGxpc3RcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUubGlzdCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUubGlzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBsaW5lSW5kZW50YXRpb24gLSBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBub3QgY29tcHJlaGVuc2l2ZSAoY3VycmVudGx5IG9ubHkgZm9yIHNldGV4dCBkZXRlY3Rpb24gcHVycG9zZXMpXG4gICAgdmFyIGFsbG93c0lubGluZUNvbnRpbnVhdGlvbiA9IChcbiAgICAgICAgIXByZXZMaW5lTGluZUlzRW1wdHkgJiYgIXByZXZMaW5lSXNIciAmJiAhc3RhdGUucHJldkxpbmUuaGVhZGVyICYmXG4gICAgICAgICghcHJldkxpbmVJc0xpc3QgfHwgIXByZXZMaW5lSXNJbmRlbnRlZENvZGUpICYmXG4gICAgICAgICFzdGF0ZS5wcmV2TGluZS5mZW5jZWRDb2RlRW5kXG4gICAgKTtcblxuICAgIHZhciBpc0hyID0gKHN0YXRlLmxpc3QgPT09IGZhbHNlIHx8IHByZXZMaW5lSXNIciB8fCBwcmV2TGluZUxpbmVJc0VtcHR5KSAmJlxuICAgICAgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIHN0cmVhbS5tYXRjaChoclJFKTtcblxuICAgIHZhciBtYXRjaCA9IG51bGw7XG4gICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA+PSA0ICYmIChwcmV2TGluZUlzSW5kZW50ZWRDb2RlIHx8IHN0YXRlLnByZXZMaW5lLmZlbmNlZENvZGVFbmQgfHxcbiAgICAgICAgIHN0YXRlLnByZXZMaW5lLmhlYWRlciB8fCBwcmV2TGluZUxpbmVJc0VtcHR5KSkge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0b2tlblR5cGVzLmNvZGU7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChmaXJzdFRva2VuT25MaW5lICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2goYXR4SGVhZGVyUkUpKSAmJiBtYXRjaFsxXS5sZW5ndGggPD0gNikge1xuICAgICAgc3RhdGUucXVvdGUgPSAwO1xuICAgICAgc3RhdGUuaGVhZGVyID0gbWF0Y2hbMV0ubGVuZ3RoO1xuICAgICAgc3RhdGUudGhpc0xpbmUuaGVhZGVyID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImhlYWRlclwiO1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiBzdHJlYW0uZWF0KCc+JykpIHtcbiAgICAgIHN0YXRlLnF1b3RlID0gZmlyc3RUb2tlbk9uTGluZSA/IDEgOiBzdGF0ZS5xdW90ZSArIDE7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJxdW90ZVwiO1xuICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfSBlbHNlIGlmICghaXNIciAmJiAhc3RhdGUuc2V0ZXh0ICYmIGZpcnN0VG9rZW5PbkxpbmUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChsaXN0UkUpKSkge1xuICAgICAgdmFyIGxpc3RUeXBlID0gbWF0Y2hbMV0gPyBcIm9sXCIgOiBcInVsXCI7XG5cbiAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gbGluZUluZGVudGF0aW9uICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGg7XG4gICAgICBzdGF0ZS5saXN0ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnF1b3RlID0gMDtcblxuICAgICAgLy8gQWRkIHRoaXMgbGlzdCBpdGVtJ3MgY29udGVudCdzIGluZGVudGF0aW9uIHRvIHRoZSBzdGFja1xuICAgICAgc3RhdGUubGlzdFN0YWNrLnB1c2goc3RhdGUuaW5kZW50YXRpb24pO1xuICAgICAgLy8gUmVzZXQgaW5saW5lIHN0eWxlcyB3aGljaCBzaG91bGRuJ3QgcHJvcGFnYXRlIGFyb3NzIGxpc3QgaXRlbXNcbiAgICAgIHN0YXRlLmVtID0gZmFsc2U7XG4gICAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTtcbiAgICAgIHN0YXRlLnN0cmlrZXRocm91Z2ggPSBmYWxzZTtcblxuICAgICAgaWYgKG1vZGVDZmcudGFza0xpc3RzICYmIHN0cmVhbS5tYXRjaCh0YXNrTGlzdFJFLCBmYWxzZSkpIHtcbiAgICAgICAgc3RhdGUudGFza0xpc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBbXCJsaXN0XCIsIFwibGlzdC1cIiArIGxpc3RUeXBlXTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW5PbkxpbmUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChmZW5jZWRDb2RlUkUsIHRydWUpKSkge1xuICAgICAgc3RhdGUucXVvdGUgPSAwO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBuZXcgUmVnRXhwKG1hdGNoWzFdICsgXCIrICokXCIpO1xuICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZyAmJiBnZXRNb2RlKG1hdGNoWzJdKTtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHN0YXRlLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoc3RhdGUubG9jYWxNb2RlKTtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGxvY2FsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiY29kZS1ibG9ja1wiO1xuICAgICAgc3RhdGUuY29kZSA9IC0xXG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgLy8gU0VURVhUIGhhcyBsb3dlc3QgYmxvY2stc2NvcGUgcHJlY2VkZW5jZSBhZnRlciBIUiwgc28gY2hlY2sgaXQgYWZ0ZXJcbiAgICAvLyAgdGhlIG90aGVycyAoY29kZSwgYmxvY2txdW90ZSwgbGlzdC4uLilcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gaWYgc2V0ZXh0IHNldCwgaW5kaWNhdGVzIGxpbmUgYWZ0ZXIgLS0tLz09PVxuICAgICAgc3RhdGUuc2V0ZXh0IHx8IChcbiAgICAgICAgLy8gbGluZSBiZWZvcmUgLS0tLz09PVxuICAgICAgICAoIWFsbG93c0lubGluZUNvbnRpbnVhdGlvbiB8fCAhcHJldkxpbmVJc0xpc3QpICYmICFzdGF0ZS5xdW90ZSAmJiBzdGF0ZS5saXN0ID09PSBmYWxzZSAmJlxuICAgICAgICAhc3RhdGUuY29kZSAmJiAhaXNIciAmJiAhbGlua0RlZlJFLnRlc3Qoc3RyZWFtLnN0cmluZykgJiZcbiAgICAgICAgKG1hdGNoID0gc3RyZWFtLmxvb2tBaGVhZCgxKSkgJiYgKG1hdGNoID0gbWF0Y2gubWF0Y2goc2V0ZXh0SGVhZGVyUkUpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKCAhc3RhdGUuc2V0ZXh0ICkge1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSBtYXRjaFswXS5jaGFyQXQoMCkgPT0gJz0nID8gMSA6IDI7XG4gICAgICAgIHN0YXRlLnNldGV4dCA9IHN0YXRlLmhlYWRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmhlYWRlciA9IHN0YXRlLnNldGV4dDtcbiAgICAgICAgLy8gaGFzIG5vIGVmZmVjdCBvbiB0eXBlIHNvIHdlIGNhbiByZXNldCBpdCBub3dcbiAgICAgICAgc3RhdGUuc2V0ZXh0ID0gMDtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhlYWRlciA9IHRydWU7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoaXNIcikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgc3RhdGUuaHIgPSB0cnVlO1xuICAgICAgc3RhdGUudGhpc0xpbmUuaHIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRva2VuVHlwZXMuaHI7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09PSAnWycpIHtcbiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZm9vdG5vdGVMaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7XG4gIH1cblxuICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTtcbiAgICBpZiAoIWh0bWxNb2RlTWlzc2luZykge1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSlcbiAgICAgIGlmICgoaW5uZXIubW9kZS5uYW1lID09IFwieG1sXCIgJiYgaW5uZXIuc3RhdGUudGFnU3RhcnQgPT09IG51bGwgJiZcbiAgICAgICAgICAgKCFpbm5lci5zdGF0ZS5jb250ZXh0ICYmIGlubmVyLnN0YXRlLnRva2VuaXplLmlzSW5UZXh0KSkgfHxcbiAgICAgICAgICAoc3RhdGUubWRfaW5zaWRlICYmIHN0cmVhbS5jdXJyZW50KCkuaW5kZXhPZihcIj5cIikgPiAtMSkpIHtcbiAgICAgICAgc3RhdGUuZiA9IGlubGluZU5vcm1hbDtcbiAgICAgICAgc3RhdGUuYmxvY2sgPSBibG9ja05vcm1hbDtcbiAgICAgICAgc3RhdGUuaHRtbFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjdXJyTGlzdEluZCA9IHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMDtcbiAgICB2YXIgaGFzRXhpdGVkTGlzdCA9IHN0YXRlLmluZGVudGF0aW9uIDwgY3Vyckxpc3RJbmQ7XG4gICAgdmFyIG1heEZlbmNlZEVuZEluZCA9IGN1cnJMaXN0SW5kICsgMztcbiAgICBpZiAoc3RhdGUuZmVuY2VkRW5kUkUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4RmVuY2VkRW5kSW5kICYmIChoYXNFeGl0ZWRMaXN0IHx8IHN0cmVhbS5tYXRjaChzdGF0ZS5mZW5jZWRFbmRSRSkpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJjb2RlLWJsb2NrXCI7XG4gICAgICB2YXIgcmV0dXJuVHlwZTtcbiAgICAgIGlmICghaGFzRXhpdGVkTGlzdCkgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDtcbiAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBudWxsO1xuICAgICAgc3RhdGUuY29kZSA9IDBcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmZlbmNlZENvZGVFbmQgPSB0cnVlO1xuICAgICAgaWYgKGhhc0V4aXRlZExpc3QpIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBzdGF0ZS5ibG9jayk7XG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxvY2FsTW9kZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZVxuICBmdW5jdGlvbiBnZXRUeXBlKHN0YXRlKSB7XG4gICAgdmFyIHN0eWxlcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLmZvcm1hdHRpbmcpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3RhdGUuZm9ybWF0dGluZyA9PT0gXCJzdHJpbmdcIikgc3RhdGUuZm9ybWF0dGluZyA9IFtzdGF0ZS5mb3JtYXR0aW5nXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5mb3JtYXR0aW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLVwiICsgc3RhdGUuZm9ybWF0dGluZ1tpXSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmZvcm1hdHRpbmdbaV0gPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgYGZvcm1hdHRpbmctcXVvdGVgIGFuZCBgZm9ybWF0dGluZy1xdW90ZS0jYCBmb3IgYmxvY2txdW90ZXNcbiAgICAgICAgLy8gQWRkIGBlcnJvcmAgaW5zdGVhZCBpZiB0aGUgbWF4aW11bSBibG9ja3F1b3RlIG5lc3RpbmcgZGVwdGggaXMgcGFzc2VkXG4gICAgICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nW2ldID09PSBcInF1b3RlXCIpIHtcbiAgICAgICAgICBpZiAoIW1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoIHx8IG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID49IHN0YXRlLnF1b3RlKSB7XG4gICAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLnF1b3RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVzLnB1c2goXCJlcnJvclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFza09wZW4pIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibWV0YVwiKTtcbiAgICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50YXNrQ2xvc2VkKSB7XG4gICAgICBzdHlsZXMucHVzaChcInByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbignICcpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubGlua0hyZWYpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua0hyZWYsIFwidXJsXCIpO1xuICAgIH0gZWxzZSB7IC8vIE9ubHkgYXBwbHkgaW5saW5lIHN0eWxlcyB0byBub24tdXJsIHRleHRcbiAgICAgIGlmIChzdGF0ZS5zdHJvbmcpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5zdHJvbmcpOyB9XG4gICAgICBpZiAoc3RhdGUuZW0pIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5lbSk7IH1cbiAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuc3RyaWtldGhyb3VnaCk7IH1cbiAgICAgIGlmIChzdGF0ZS5lbW9qaSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmVtb2ppKTsgfVxuICAgICAgaWYgKHN0YXRlLmxpbmtUZXh0KSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua1RleHQpOyB9XG4gICAgICBpZiAoc3RhdGUuY29kZSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmNvZGUpOyB9XG4gICAgICBpZiAoc3RhdGUuaW1hZ2UpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZSk7IH1cbiAgICAgIGlmIChzdGF0ZS5pbWFnZUFsdFRleHQpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZUFsdFRleHQsIFwibGlua1wiKTsgfVxuICAgICAgaWYgKHN0YXRlLmltYWdlTWFya2VyKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuaW1hZ2VNYXJrZXIpOyB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmhlYWRlcikgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmhlYWRlciwgdG9rZW5UeXBlcy5oZWFkZXIgKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7IH1cblxuICAgIGlmIChzdGF0ZS5xdW90ZSkge1xuICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5xdW90ZSk7XG5cbiAgICAgIC8vIEFkZCBgcXVvdGUtI2Agd2hlcmUgdGhlIG1heGltdW0gZm9yIGAjYCBpcyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aFxuICAgICAgaWYgKCFtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCB8fCBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA+PSBzdGF0ZS5xdW90ZSkge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBzdGF0ZS5xdW90ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpc3QgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgbGlzdE1vZCA9IChzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMSkgJSAzO1xuICAgICAgaWYgKCFsaXN0TW9kKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDEpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0TW9kID09PSAxKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5saXN0Myk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lKSB7XG4gICAgICBzdHlsZXMucHVzaChcInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lXCIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUudHJhaWxpbmdTcGFjZSkge1xuICAgICAgc3R5bGVzLnB1c2goXCJ0cmFpbGluZy1zcGFjZS1cIiArIChzdGF0ZS50cmFpbGluZ1NwYWNlICUgMiA/IFwiYVwiIDogXCJiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXh0UkUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVOb3JtYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnRleHQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICByZXR1cm4gc3R5bGU7XG5cbiAgICBpZiAoc3RhdGUubGlzdCkgeyAvLyBMaXN0IG1hcmtlciAoKiwgKywgLSwgMS4sIGV0YylcbiAgICAgIHN0YXRlLmxpc3QgPSBudWxsO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50YXNrTGlzdCkge1xuICAgICAgdmFyIHRhc2tPcGVuID0gc3RyZWFtLm1hdGNoKHRhc2tMaXN0UkUsIHRydWUpWzFdID09PSBcIiBcIjtcbiAgICAgIGlmICh0YXNrT3Blbikgc3RhdGUudGFza09wZW4gPSB0cnVlO1xuICAgICAgZWxzZSBzdGF0ZS50YXNrQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcInRhc2tcIjtcbiAgICAgIHN0YXRlLnRhc2tMaXN0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUudGFza09wZW4gPSBmYWxzZTtcbiAgICBzdGF0ZS50YXNrQ2xvc2VkID0gZmFsc2U7XG5cbiAgICBpZiAoc3RhdGUuaGVhZGVyICYmIHN0cmVhbS5tYXRjaCgvXiMrJC8sIHRydWUpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gTWF0Y2hlcyBsaW5rIHRpdGxlcyBwcmVzZW50IG9uIG5leHQgbGluZVxuICAgIGlmIChzdGF0ZS5saW5rVGl0bGUpIHtcbiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IGZhbHNlO1xuICAgICAgdmFyIG1hdGNoQ2ggPSBjaDtcbiAgICAgIGlmIChjaCA9PT0gJygnKSB7XG4gICAgICAgIG1hdGNoQ2ggPSAnKSc7XG4gICAgICB9XG4gICAgICBtYXRjaENoID0gKG1hdGNoQ2grJycpLnJlcGxhY2UoLyhbLj8qK15cXFtcXF1cXFxcKCl7fXwtXSkvZywgXCJcXFxcJDFcIik7XG4gICAgICB2YXIgcmVnZXggPSAnXlxcXFxzKig/OlteJyArIG1hdGNoQ2ggKyAnXFxcXFxcXFxdK3xcXFxcXFxcXFxcXFxcXFxcfFxcXFxcXFxcLiknICsgbWF0Y2hDaDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleCksIHRydWUpKSB7XG4gICAgICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtIcmVmO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBHRk0gbW9kZVxuICAgIGlmIChjaCA9PT0gJ2AnKSB7XG4gICAgICB2YXIgcHJldmlvdXNGb3JtYXR0aW5nID0gc3RhdGUuZm9ybWF0dGluZztcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImNvZGVcIjtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgnYCcpO1xuICAgICAgdmFyIGNvdW50ID0gc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGhcbiAgICAgIGlmIChzdGF0ZS5jb2RlID09IDAgJiYgKCFzdGF0ZS5xdW90ZSB8fCBjb3VudCA9PSAxKSkge1xuICAgICAgICBzdGF0ZS5jb2RlID0gY291bnRcbiAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICB9IGVsc2UgaWYgKGNvdW50ID09IHN0YXRlLmNvZGUpIHsgLy8gTXVzdCBiZSBleGFjdFxuICAgICAgICB2YXIgdCA9IGdldFR5cGUoc3RhdGUpXG4gICAgICAgIHN0YXRlLmNvZGUgPSAwXG4gICAgICAgIHJldHVybiB0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5mb3JtYXR0aW5nID0gcHJldmlvdXNGb3JtYXR0aW5nXG4gICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuY29kZSkge1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB2YXIgZm9ybWF0dGluZ0VzY2FwZSA9IHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLWVzY2FwZVwiO1xuICAgICAgICByZXR1cm4gdHlwZSA/IHR5cGUgKyBcIiBcIiArIGZvcm1hdHRpbmdFc2NhcGUgOiBmb3JtYXR0aW5nRXNjYXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJyEnICYmIHN0cmVhbS5tYXRjaCgvXFxbW15cXF1dKlxcXSA/KD86XFwofFxcWykvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmltYWdlID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImltYWdlXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnWycgJiYgc3RhdGUuaW1hZ2VNYXJrZXIgJiYgc3RyZWFtLm1hdGNoKC9bXlxcXV0qXFxdKFxcKC4qP1xcKXwgP1xcWy4qP1xcXSkvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSB0cnVlXG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJpbWFnZVwiO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ10nICYmIHN0YXRlLmltYWdlQWx0VGV4dCkge1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaW1hZ2VcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmltYWdlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdbJyAmJiAhc3RhdGUuaW1hZ2UpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5rVGV4dCAmJiBzdHJlYW0ubWF0Y2goL14uKj9cXF0vKSkgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnXScgJiYgc3RhdGUubGlua1RleHQpIHtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlO1xuICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IHN0cmVhbS5tYXRjaCgvXFwoLio/XFwpfCA/XFxbLio/XFxdLywgZmFsc2UpID8gbGlua0hyZWYgOiBpbmxpbmVOb3JtYWxcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlxcL1xcLyg/OlteXFxcXD5dfFxcXFwuKSs+LywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gbGlua0lubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBpZiAodHlwZSl7XG4gICAgICAgIHR5cGUgKz0gXCIgXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlICsgdG9rZW5UeXBlcy5saW5rSW5saW5lO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXltePiBcXFxcXStAKD86W15cXFxcPl18XFxcXC4pKz4vLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBsaW5rSW5saW5lO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIGlmICh0eXBlKXtcbiAgICAgICAgdHlwZSArPSBcIiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtFbWFpbDtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL14oIS0tfFxcP3whXFxbQ0RBVEFcXFt8W2Etel1bYS16MC05LV0qKD86XFxzK1thLXpfOi5cXC1dKyg/Olxccyo9XFxzKltePl0rKT8pKlxccyooPzo+fCQpKS9pLCBmYWxzZSkpIHtcbiAgICAgIHZhciBlbmQgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI+XCIsIHN0cmVhbS5wb3MpO1xuICAgICAgaWYgKGVuZCAhPSAtMSkge1xuICAgICAgICB2YXIgYXR0cyA9IHN0cmVhbS5zdHJpbmcuc3Vic3RyaW5nKHN0cmVhbS5zdGFydCwgZW5kKTtcbiAgICAgICAgaWYgKC9tYXJrZG93blxccyo9XFxzKignfFwiKXswLDF9MSgnfFwiKXswLDF9Ly50ZXN0KGF0dHMpKSBzdGF0ZS5tZF9pbnNpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShodG1sTW9kZSk7XG4gICAgICByZXR1cm4gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgaHRtbEJsb2NrKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL15cXC9cXHcqPz4vKSkge1xuICAgICAgc3RhdGUubWRfaW5zaWRlID0gZmFsc2U7XG4gICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIipcIiB8fCBjaCA9PT0gXCJfXCIpIHtcbiAgICAgIHZhciBsZW4gPSAxLCBiZWZvcmUgPSBzdHJlYW0ucG9zID09IDEgPyBcIiBcIiA6IHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5wb3MgLSAyKVxuICAgICAgd2hpbGUgKGxlbiA8IDMgJiYgc3RyZWFtLmVhdChjaCkpIGxlbisrXG4gICAgICB2YXIgYWZ0ZXIgPSBzdHJlYW0ucGVlaygpIHx8IFwiIFwiXG4gICAgICAvLyBTZWUgaHR0cDovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4yNy8jZW1waGFzaXMtYW5kLXN0cm9uZy1lbXBoYXNpc1xuICAgICAgdmFyIGxlZnRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGFmdGVyKSAmJiAoIXB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpIHx8IC9cXHMvLnRlc3QoYmVmb3JlKSB8fCBwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkpXG4gICAgICB2YXIgcmlnaHRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGJlZm9yZSkgJiYgKCFwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkgfHwgL1xccy8udGVzdChhZnRlcikgfHwgcHVuY3R1YXRpb24udGVzdChhZnRlcikpXG4gICAgICB2YXIgc2V0RW0gPSBudWxsLCBzZXRTdHJvbmcgPSBudWxsXG4gICAgICBpZiAobGVuICUgMikgeyAvLyBFbVxuICAgICAgICBpZiAoIXN0YXRlLmVtICYmIGxlZnRGbGFua2luZyAmJiAoY2ggPT09IFwiKlwiIHx8ICFyaWdodEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYmVmb3JlKSkpXG4gICAgICAgICAgc2V0RW0gPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLmVtID09IGNoICYmIHJpZ2h0RmxhbmtpbmcgJiYgKGNoID09PSBcIipcIiB8fCAhbGVmdEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpKSlcbiAgICAgICAgICBzZXRFbSA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAobGVuID4gMSkgeyAvLyBTdHJvbmdcbiAgICAgICAgaWYgKCFzdGF0ZS5zdHJvbmcgJiYgbGVmdEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIXJpZ2h0RmxhbmtpbmcgfHwgcHVuY3R1YXRpb24udGVzdChiZWZvcmUpKSlcbiAgICAgICAgICBzZXRTdHJvbmcgPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9uZyA9PSBjaCAmJiByaWdodEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIWxlZnRGbGFua2luZyB8fCBwdW5jdHVhdGlvbi50ZXN0KGFmdGVyKSkpXG4gICAgICAgICAgc2V0U3Ryb25nID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmIChzZXRTdHJvbmcgIT0gbnVsbCB8fCBzZXRFbSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBzZXRFbSA9PSBudWxsID8gXCJzdHJvbmdcIiA6IHNldFN0cm9uZyA9PSBudWxsID8gXCJlbVwiIDogXCJzdHJvbmcgZW1cIlxuICAgICAgICBpZiAoc2V0RW0gPT09IHRydWUpIHN0YXRlLmVtID0gY2hcbiAgICAgICAgaWYgKHNldFN0cm9uZyA9PT0gdHJ1ZSkgc3RhdGUuc3Ryb25nID0gY2hcbiAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKVxuICAgICAgICBpZiAoc2V0RW0gPT09IGZhbHNlKSBzdGF0ZS5lbSA9IGZhbHNlXG4gICAgICAgIGlmIChzZXRTdHJvbmcgPT09IGZhbHNlKSBzdGF0ZS5zdHJvbmcgPSBmYWxzZVxuICAgICAgICByZXR1cm4gdFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcgJykge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJyonKSB8fCBzdHJlYW0uZWF0KCdfJykpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZXNcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcgJykgeyAvLyBTdXJyb3VuZGVkIGJ5IHNwYWNlcywgaWdub3JlXG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9IGVsc2UgeyAvLyBOb3Qgc3Vycm91bmRlZCBieSBzcGFjZXMsIGJhY2sgdXAgcG9pbnRlclxuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy5zdHJpa2V0aHJvdWdoKSB7XG4gICAgICBpZiAoY2ggPT09ICd+JyAmJiBzdHJlYW0uZWF0V2hpbGUoY2gpKSB7XG4gICAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7Ly8gUmVtb3ZlIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXHNdLywgZmFsc2UpKSB7Ly8gQWRkIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAnICcpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXn5+LywgdHJ1ZSkpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZVxuICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnICcpIHsgLy8gU3Vycm91bmRlZCBieSBzcGFjZXMsIGlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIE5vdCBzdXJyb3VuZGVkIGJ5IHNwYWNlcywgYmFjayB1cCBwb2ludGVyXG4gICAgICAgICAgICBzdHJlYW0uYmFja1VwKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlQ2ZnLmVtb2ppICYmIGNoID09PSBcIjpcIiAmJiBzdHJlYW0ubWF0Y2goL14oPzpbYS16X1xcZCtdW2Etel9cXGQrLV0qfFxcLVthLXpfXFxkK11bYS16X1xcZCstXSopOi8pKSB7XG4gICAgICBzdGF0ZS5lbW9qaSA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJlbW9qaVwiO1xuICAgICAgdmFyIHJldFR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIHN0YXRlLmVtb2ppID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0VHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICcgJykge1xuICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXiArJC8sIGZhbHNlKSkge1xuICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlKys7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2UpIHtcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmtJbmxpbmUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICBpZiAoY2ggPT09IFwiPlwiKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIGlmICh0eXBlKXtcbiAgICAgICAgdHlwZSArPSBcIiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtJbmxpbmU7XG4gICAgfVxuXG4gICAgc3RyZWFtLm1hdGNoKC9eW14+XSsvLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtJbmxpbmU7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5rSHJlZihzdHJlYW0sIHN0YXRlKSB7XG4gICAgLy8gQ2hlY2sgaWYgc3BhY2UsIGFuZCByZXR1cm4gTlVMTCBpZiBzbyAodG8gYXZvaWQgbWFya2luZyB0aGUgc3BhY2UpXG4gICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09PSAnKCcgfHwgY2ggPT09ICdbJykge1xuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGdldExpbmtIcmVmSW5zaWRlKGNoID09PSBcIihcIiA/IFwiKVwiIDogXCJdXCIpO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGluay1zdHJpbmdcIjtcbiAgICAgIHN0YXRlLmxpbmtIcmVmID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuICdlcnJvcic7XG4gIH1cblxuICB2YXIgbGlua1JFID0ge1xuICAgIFwiKVwiOiAvXig/OlteXFxcXFxcKFxcKV18XFxcXC58XFwoKD86W15cXFxcXFwoXFwpXXxcXFxcLikqXFwpKSo/KD89XFwpKS8sXG4gICAgXCJdXCI6IC9eKD86W15cXFxcXFxbXFxdXXxcXFxcLnxcXFsoPzpbXlxcXFxcXFtcXF1dfFxcXFwuKSpcXF0pKj8oPz1cXF0pL1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGlua0hyZWZJbnNpZGUoZW5kQ2hhcikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgICBpZiAoY2ggPT09IGVuZENoYXIpIHtcbiAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDtcbiAgICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGluay1zdHJpbmdcIjtcbiAgICAgICAgdmFyIHJldHVyblN0YXRlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmxpbmtIcmVmID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXR1cm5TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLm1hdGNoKGxpbmtSRVtlbmRDaGFyXSlcbiAgICAgIHN0YXRlLmxpbmtIcmVmID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVMaW5rKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKFteXFxdXFxcXF18XFxcXC4pKlxcXTovLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBmb290bm90ZUxpbmtJbnNpZGU7XG4gICAgICBzdHJlYW0ubmV4dCgpOyAvLyBDb25zdW1lIFtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHN0YXRlLmxpbmtUZXh0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVOb3JtYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVMaW5rSW5zaWRlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxdOi8sIHRydWUpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gZm9vdG5vdGVVcmw7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICB2YXIgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgc3RhdGUubGlua1RleHQgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXR1cm5UeXBlO1xuICAgIH1cblxuICAgIHN0cmVhbS5tYXRjaCgvXihbXlxcXVxcXFxdfFxcXFwuKSsvLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtUZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9vdG5vdGVVcmwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIC8vIENoZWNrIGlmIHNwYWNlLCBhbmQgcmV0dXJuIE5VTEwgaWYgc28gKHRvIGF2b2lkIG1hcmtpbmcgdGhlIHNwYWNlKVxuICAgIGlmKHN0cmVhbS5lYXRTcGFjZSgpKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBNYXRjaCBVUkxcbiAgICBzdHJlYW0ubWF0Y2goL15bXlxcc10rLywgdHJ1ZSk7XG4gICAgLy8gQ2hlY2sgZm9yIGxpbmsgdGl0bGVcbiAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gdW5kZWZpbmVkKSB7IC8vIEVuZCBvZiBsaW5lLCBzZXQgZmxhZyB0byBjaGVjayBuZXh0IGxpbmVcbiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IHRydWU7XG4gICAgfSBlbHNlIHsgLy8gTW9yZSBjb250ZW50IG9uIGxpbmUsIGNoZWNrIGlmIGxpbmsgdGl0bGVcbiAgICAgIHN0cmVhbS5tYXRjaCgvXig/OlxccysoPzpcIig/OlteXCJcXFxcXXxcXFxcXFxcXHxcXFxcLikrXCJ8Jyg/OlteJ1xcXFxdfFxcXFxcXFxcfFxcXFwuKSsnfFxcKCg/OlteKVxcXFxdfFxcXFxcXFxcfFxcXFwuKStcXCkpKT8vLCB0cnVlKTtcbiAgICB9XG4gICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDtcbiAgICByZXR1cm4gdG9rZW5UeXBlcy5saW5rSHJlZiArIFwiIHVybFwiO1xuICB9XG5cbiAgdmFyIG1vZGUgPSB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmOiBibG9ja05vcm1hbCxcblxuICAgICAgICBwcmV2TGluZToge3N0cmVhbTogbnVsbH0sXG4gICAgICAgIHRoaXNMaW5lOiB7c3RyZWFtOiBudWxsfSxcblxuICAgICAgICBibG9jazogYmxvY2tOb3JtYWwsXG4gICAgICAgIGh0bWxTdGF0ZTogbnVsbCxcbiAgICAgICAgaW5kZW50YXRpb246IDAsXG5cbiAgICAgICAgaW5saW5lOiBpbmxpbmVOb3JtYWwsXG4gICAgICAgIHRleHQ6IGhhbmRsZVRleHQsXG5cbiAgICAgICAgZm9ybWF0dGluZzogZmFsc2UsXG4gICAgICAgIGxpbmtUZXh0OiBmYWxzZSxcbiAgICAgICAgbGlua0hyZWY6IGZhbHNlLFxuICAgICAgICBsaW5rVGl0bGU6IGZhbHNlLFxuICAgICAgICBjb2RlOiAwLFxuICAgICAgICBlbTogZmFsc2UsXG4gICAgICAgIHN0cm9uZzogZmFsc2UsXG4gICAgICAgIGhlYWRlcjogMCxcbiAgICAgICAgc2V0ZXh0OiAwLFxuICAgICAgICBocjogZmFsc2UsXG4gICAgICAgIHRhc2tMaXN0OiBmYWxzZSxcbiAgICAgICAgbGlzdDogZmFsc2UsXG4gICAgICAgIGxpc3RTdGFjazogW10sXG4gICAgICAgIHF1b3RlOiAwLFxuICAgICAgICB0cmFpbGluZ1NwYWNlOiAwLFxuICAgICAgICB0cmFpbGluZ1NwYWNlTmV3TGluZTogZmFsc2UsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IGZhbHNlLFxuICAgICAgICBlbW9qaTogZmFsc2UsXG4gICAgICAgIGZlbmNlZEVuZFJFOiBudWxsXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGY6IHMuZixcblxuICAgICAgICBwcmV2TGluZTogcy5wcmV2TGluZSxcbiAgICAgICAgdGhpc0xpbmU6IHMudGhpc0xpbmUsXG5cbiAgICAgICAgYmxvY2s6IHMuYmxvY2ssXG4gICAgICAgIGh0bWxTdGF0ZTogcy5odG1sU3RhdGUgJiYgQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHMuaHRtbFN0YXRlKSxcbiAgICAgICAgaW5kZW50YXRpb246IHMuaW5kZW50YXRpb24sXG5cbiAgICAgICAgbG9jYWxNb2RlOiBzLmxvY2FsTW9kZSxcbiAgICAgICAgbG9jYWxTdGF0ZTogcy5sb2NhbE1vZGUgPyBDb2RlTWlycm9yLmNvcHlTdGF0ZShzLmxvY2FsTW9kZSwgcy5sb2NhbFN0YXRlKSA6IG51bGwsXG5cbiAgICAgICAgaW5saW5lOiBzLmlubGluZSxcbiAgICAgICAgdGV4dDogcy50ZXh0LFxuICAgICAgICBmb3JtYXR0aW5nOiBmYWxzZSxcbiAgICAgICAgbGlua1RleHQ6IHMubGlua1RleHQsXG4gICAgICAgIGxpbmtUaXRsZTogcy5saW5rVGl0bGUsXG4gICAgICAgIGxpbmtIcmVmOiBzLmxpbmtIcmVmLFxuICAgICAgICBjb2RlOiBzLmNvZGUsXG4gICAgICAgIGVtOiBzLmVtLFxuICAgICAgICBzdHJvbmc6IHMuc3Ryb25nLFxuICAgICAgICBzdHJpa2V0aHJvdWdoOiBzLnN0cmlrZXRocm91Z2gsXG4gICAgICAgIGVtb2ppOiBzLmVtb2ppLFxuICAgICAgICBoZWFkZXI6IHMuaGVhZGVyLFxuICAgICAgICBzZXRleHQ6IHMuc2V0ZXh0LFxuICAgICAgICBocjogcy5ocixcbiAgICAgICAgdGFza0xpc3Q6IHMudGFza0xpc3QsXG4gICAgICAgIGxpc3Q6IHMubGlzdCxcbiAgICAgICAgbGlzdFN0YWNrOiBzLmxpc3RTdGFjay5zbGljZSgwKSxcbiAgICAgICAgcXVvdGU6IHMucXVvdGUsXG4gICAgICAgIGluZGVudGVkQ29kZTogcy5pbmRlbnRlZENvZGUsXG4gICAgICAgIHRyYWlsaW5nU3BhY2U6IHMudHJhaWxpbmdTcGFjZSxcbiAgICAgICAgdHJhaWxpbmdTcGFjZU5ld0xpbmU6IHMudHJhaWxpbmdTcGFjZU5ld0xpbmUsXG4gICAgICAgIG1kX2luc2lkZTogcy5tZF9pbnNpZGUsXG4gICAgICAgIGZlbmNlZEVuZFJFOiBzLmZlbmNlZEVuZFJFXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuXG4gICAgICAvLyBSZXNldCBzdGF0ZS5mb3JtYXR0aW5nXG4gICAgICBzdGF0ZS5mb3JtYXR0aW5nID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdHJlYW0gIT0gc3RhdGUudGhpc0xpbmUuc3RyZWFtKSB7XG4gICAgICAgIHN0YXRlLmhlYWRlciA9IDA7XG4gICAgICAgIHN0YXRlLmhyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxccyokLywgdHJ1ZSkpIHtcbiAgICAgICAgICBibGFua0xpbmUoc3RhdGUpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUucHJldkxpbmUgPSBzdGF0ZS50aGlzTGluZVxuICAgICAgICBzdGF0ZS50aGlzTGluZSA9IHtzdHJlYW06IHN0cmVhbX1cblxuICAgICAgICAvLyBSZXNldCBzdGF0ZS50YXNrTGlzdFxuICAgICAgICBzdGF0ZS50YXNrTGlzdCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2VcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZSA9IDA7XG4gICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sb2NhbFN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrO1xuICAgICAgICAgIGlmIChzdGF0ZS5mICE9IGh0bWxCbG9jaykge1xuICAgICAgICAgICAgdmFyIGluZGVudGF0aW9uID0gc3RyZWFtLm1hdGNoKC9eXFxzKi8sIHRydWUpWzBdLnJlcGxhY2UoL1xcdC9nLCBleHBhbmRlZFRhYikubGVuZ3RoO1xuICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uRGlmZiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaW5kZW50YXRpb24gPiAwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0sXG5cbiAgICBpbm5lck1vZGU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuYmxvY2sgPT0gaHRtbEJsb2NrKSByZXR1cm4ge3N0YXRlOiBzdGF0ZS5odG1sU3RhdGUsIG1vZGU6IGh0bWxNb2RlfTtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbFN0YXRlKSByZXR1cm4ge3N0YXRlOiBzdGF0ZS5sb2NhbFN0YXRlLCBtb2RlOiBzdGF0ZS5sb2NhbE1vZGV9O1xuICAgICAgcmV0dXJuIHtzdGF0ZTogc3RhdGUsIG1vZGU6IG1vZGV9O1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpIHtcbiAgICAgIGlmIChzdGF0ZS5ibG9jayA9PSBodG1sQmxvY2sgJiYgaHRtbE1vZGUuaW5kZW50KSByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKVxuICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUgJiYgc3RhdGUubG9jYWxNb2RlLmluZGVudCkgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxTdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKVxuICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzc1xuICAgIH0sXG5cbiAgICBibGFua0xpbmU6IGJsYW5rTGluZSxcblxuICAgIGdldFR5cGU6IGdldFR5cGUsXG5cbiAgICBibG9ja0NvbW1lbnRTdGFydDogXCI8IS0tXCIsXG4gICAgYmxvY2tDb21tZW50RW5kOiBcIi0tPlwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG4gICAgZm9sZDogXCJtYXJrZG93blwiXG4gIH07XG4gIHJldHVybiBtb2RlO1xufSwgXCJ4bWxcIik7XG5cbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvbWFya2Rvd25cIiwgXCJtYXJrZG93blwiKTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94LW1hcmtkb3duXCIsIFwibWFya2Rvd25cIik7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW5cbi8vIGFzIHRoZSBiYXNlIGFyZ3VtZW50IHRha2VzIGNhcmUgb2YgbW9zdCBvZiB0aGUgbm9ybWFsIG1vZGVcbi8vIGZ1bmN0aW9uYWxpdHksIGJ1dCBhIHNlY29uZCAodHlwaWNhbGx5IHNpbXBsZSkgbW9kZSBpcyB1c2VkLCB3aGljaFxuLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlXG4vLyB0ZXh0LCBidXQgd2hlbiBib3RoIGFzc2lnbiBhIG5vbi1udWxsIHN0eWxlIHRvIGEgcGllY2Ugb2YgY29kZSwgdGhlXG4vLyBvdmVybGF5IHdpbnMsIHVubGVzcyB0aGUgY29tYmluZSBhcmd1bWVudCB3YXMgdHJ1ZSBhbmQgbm90IG92ZXJyaWRkZW4sXG4vLyBvciBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UgdGhlIHN0eWxlcyBhcmVcbi8vIGNvbWJpbmVkLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3Iub3ZlcmxheU1vZGUgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlOiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoYmFzZSksXG4gICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShvdmVybGF5KSxcbiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCxcbiAgICAgICAgb3ZlcmxheVBvczogMCwgb3ZlcmxheUN1cjogbnVsbCxcbiAgICAgICAgc3RyZWFtU2VlbjogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLFxuICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLmNvcHlTdGF0ZShvdmVybGF5LCBzdGF0ZS5vdmVybGF5KSxcbiAgICAgICAgYmFzZVBvczogc3RhdGUuYmFzZVBvcywgYmFzZUN1cjogbnVsbCxcbiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0gIT0gc3RhdGUuc3RyZWFtU2VlbiB8fFxuICAgICAgICAgIE1hdGgubWluKHN0YXRlLmJhc2VQb3MsIHN0YXRlLm92ZXJsYXlQb3MpIDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgIHN0YXRlLnN0cmVhbVNlZW4gPSBzdHJlYW07XG4gICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnN0YXJ0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHtcbiAgICAgICAgc3RhdGUuYmFzZUN1ciA9IGJhc2UudG9rZW4oc3RyZWFtLCBzdGF0ZS5iYXNlKTtcbiAgICAgICAgc3RhdGUuYmFzZVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICB9XG4gICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLm92ZXJsYXlQb3MpIHtcbiAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbS5zdGFydDtcbiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTtcbiAgICAgICAgc3RhdGUub3ZlcmxheVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICB9XG4gICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7XG5cbiAgICAgIC8vIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyBhbHdheXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGNvbWJpbmUsXG4gICAgICAvLyB1bmxlc3Mgc2V0IHRvIG51bGxcbiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyO1xuICAgICAgZWxzZSBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmXG4gICAgICAgICAgICAgICBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgfHxcbiAgICAgICAgICAgICAgIGNvbWJpbmUgJiYgc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zID09IG51bGwpXG4gICAgICAgIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgXCIgXCIgKyBzdGF0ZS5vdmVybGF5Q3VyO1xuICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBiYXNlLmluZGVudCAmJiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBsaW5lKSB7XG4gICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyLCBsaW5lKTtcbiAgICB9LFxuICAgIGVsZWN0cmljQ2hhcnM6IGJhc2UuZWxlY3RyaWNDaGFycyxcblxuICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHsgcmV0dXJuIHtzdGF0ZTogc3RhdGUuYmFzZSwgbW9kZTogYmFzZX07IH0sXG5cbiAgICBibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICB2YXIgYmFzZVRva2VuLCBvdmVybGF5VG9rZW47XG4gICAgICBpZiAoYmFzZS5ibGFua0xpbmUpIGJhc2VUb2tlbiA9IGJhc2UuYmxhbmtMaW5lKHN0YXRlLmJhc2UpO1xuICAgICAgaWYgKG92ZXJsYXkuYmxhbmtMaW5lKSBvdmVybGF5VG9rZW4gPSBvdmVybGF5LmJsYW5rTGluZShzdGF0ZS5vdmVybGF5KTtcblxuICAgICAgcmV0dXJuIG92ZXJsYXlUb2tlbiA9PSBudWxsID9cbiAgICAgICAgYmFzZVRva2VuIDpcbiAgICAgICAgKGNvbWJpbmUgJiYgYmFzZVRva2VuICE9IG51bGwgPyBiYXNlVG9rZW4gKyBcIiBcIiArIG92ZXJsYXlUb2tlbiA6IG92ZXJsYXlUb2tlbik7XG4gICAgfVxuICB9O1xufTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7XG4gIGZ1bmN0aW9uIGNtcChhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2g7IH1cblxuICB2YXIgbmFtZVN0YXJ0Q2hhciA9IFwiQS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4gIHZhciBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyBcIlxcLVxcOlxcLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG4gIHZhciB4bWxUYWdTdGFydCA9IG5ldyBSZWdFeHAoXCI8KC8/KShbXCIgKyBuYW1lU3RhcnRDaGFyICsgXCJdW1wiICsgbmFtZUNoYXIgKyBcIl0qKVwiLCBcImdcIik7XG5cbiAgZnVuY3Rpb24gSXRlcihjbSwgbGluZSwgY2gsIHJhbmdlKSB7XG4gICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoO1xuICAgIHRoaXMuY20gPSBjbTsgdGhpcy50ZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcbiAgICB0aGlzLm1pbiA9IHJhbmdlID8gTWF0aC5tYXgocmFuZ2UuZnJvbSwgY20uZmlyc3RMaW5lKCkpIDogY20uZmlyc3RMaW5lKCk7XG4gICAgdGhpcy5tYXggPSByYW5nZSA/IE1hdGgubWluKHJhbmdlLnRvIC0gMSwgY20ubGFzdExpbmUoKSkgOiBjbS5sYXN0TGluZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnQXQoaXRlciwgY2gpIHtcbiAgICB2YXIgdHlwZSA9IGl0ZXIuY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGl0ZXIubGluZSwgY2gpKTtcbiAgICByZXR1cm4gdHlwZSAmJiAvXFxidGFnXFxiLy50ZXN0KHR5cGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dExpbmUoaXRlcikge1xuICAgIGlmIChpdGVyLmxpbmUgPj0gaXRlci5tYXgpIHJldHVybjtcbiAgICBpdGVyLmNoID0gMDtcbiAgICBpdGVyLnRleHQgPSBpdGVyLmNtLmdldExpbmUoKytpdGVyLmxpbmUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIHByZXZMaW5lKGl0ZXIpIHtcbiAgICBpZiAoaXRlci5saW5lIDw9IGl0ZXIubWluKSByZXR1cm47XG4gICAgaXRlci50ZXh0ID0gaXRlci5jbS5nZXRMaW5lKC0taXRlci5saW5lKTtcbiAgICBpdGVyLmNoID0gaXRlci50ZXh0Lmxlbmd0aDtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvVGFnRW5kKGl0ZXIpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZ3QgPSBpdGVyLnRleHQuaW5kZXhPZihcIj5cIiwgaXRlci5jaCk7XG4gICAgICBpZiAoZ3QgPT0gLTEpIHsgaWYgKG5leHRMaW5lKGl0ZXIpKSBjb250aW51ZTsgZWxzZSByZXR1cm47IH1cbiAgICAgIGlmICghdGFnQXQoaXRlciwgZ3QgKyAxKSkgeyBpdGVyLmNoID0gZ3QgKyAxOyBjb250aW51ZTsgfVxuICAgICAgdmFyIGxhc3RTbGFzaCA9IGl0ZXIudGV4dC5sYXN0SW5kZXhPZihcIi9cIiwgZ3QpO1xuICAgICAgdmFyIHNlbGZDbG9zZSA9IGxhc3RTbGFzaCA+IC0xICYmICEvXFxTLy50ZXN0KGl0ZXIudGV4dC5zbGljZShsYXN0U2xhc2ggKyAxLCBndCkpO1xuICAgICAgaXRlci5jaCA9IGd0ICsgMTtcbiAgICAgIHJldHVybiBzZWxmQ2xvc2UgPyBcInNlbGZDbG9zZVwiIDogXCJyZWd1bGFyXCI7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHRvVGFnU3RhcnQoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBsdCA9IGl0ZXIuY2ggPyBpdGVyLnRleHQubGFzdEluZGV4T2YoXCI8XCIsIGl0ZXIuY2ggLSAxKSA6IC0xO1xuICAgICAgaWYgKGx0ID09IC0xKSB7IGlmIChwcmV2TGluZShpdGVyKSkgY29udGludWU7IGVsc2UgcmV0dXJuOyB9XG4gICAgICBpZiAoIXRhZ0F0KGl0ZXIsIGx0ICsgMSkpIHsgaXRlci5jaCA9IGx0OyBjb250aW51ZTsgfVxuICAgICAgeG1sVGFnU3RhcnQubGFzdEluZGV4ID0gbHQ7XG4gICAgICBpdGVyLmNoID0gbHQ7XG4gICAgICB2YXIgbWF0Y2ggPSB4bWxUYWdTdGFydC5leGVjKGl0ZXIudGV4dCk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPT0gbHQpIHJldHVybiBtYXRjaDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b05leHRUYWcoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHhtbFRhZ1N0YXJ0Lmxhc3RJbmRleCA9IGl0ZXIuY2g7XG4gICAgICB2YXIgZm91bmQgPSB4bWxUYWdTdGFydC5leGVjKGl0ZXIudGV4dCk7XG4gICAgICBpZiAoIWZvdW5kKSB7IGlmIChuZXh0TGluZShpdGVyKSkgY29udGludWU7IGVsc2UgcmV0dXJuOyB9XG4gICAgICBpZiAoIXRhZ0F0KGl0ZXIsIGZvdW5kLmluZGV4ICsgMSkpIHsgaXRlci5jaCA9IGZvdW5kLmluZGV4ICsgMTsgY29udGludWU7IH1cbiAgICAgIGl0ZXIuY2ggPSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdG9QcmV2VGFnKGl0ZXIpIHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZ3QgPSBpdGVyLmNoID8gaXRlci50ZXh0Lmxhc3RJbmRleE9mKFwiPlwiLCBpdGVyLmNoIC0gMSkgOiAtMTtcbiAgICAgIGlmIChndCA9PSAtMSkgeyBpZiAocHJldkxpbmUoaXRlcikpIGNvbnRpbnVlOyBlbHNlIHJldHVybjsgfVxuICAgICAgaWYgKCF0YWdBdChpdGVyLCBndCArIDEpKSB7IGl0ZXIuY2ggPSBndDsgY29udGludWU7IH1cbiAgICAgIHZhciBsYXN0U2xhc2ggPSBpdGVyLnRleHQubGFzdEluZGV4T2YoXCIvXCIsIGd0KTtcbiAgICAgIHZhciBzZWxmQ2xvc2UgPSBsYXN0U2xhc2ggPiAtMSAmJiAhL1xcUy8udGVzdChpdGVyLnRleHQuc2xpY2UobGFzdFNsYXNoICsgMSwgZ3QpKTtcbiAgICAgIGl0ZXIuY2ggPSBndCArIDE7XG4gICAgICByZXR1cm4gc2VsZkNsb3NlID8gXCJzZWxmQ2xvc2VcIiA6IFwicmVndWxhclwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ0Nsb3NlKGl0ZXIsIHRhZykge1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBuZXh0ID0gdG9OZXh0VGFnKGl0ZXIpLCBlbmQsIHN0YXJ0TGluZSA9IGl0ZXIubGluZSwgc3RhcnRDaCA9IGl0ZXIuY2ggLSAobmV4dCA/IG5leHRbMF0ubGVuZ3RoIDogMCk7XG4gICAgICBpZiAoIW5leHQgfHwgIShlbmQgPSB0b1RhZ0VuZChpdGVyKSkpIHJldHVybjtcbiAgICAgIGlmIChlbmQgPT0gXCJzZWxmQ2xvc2VcIikgY29udGludWU7XG4gICAgICBpZiAobmV4dFsxXSkgeyAvLyBjbG9zaW5nIHRhZ1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIGlmIChzdGFja1tpXSA9PSBuZXh0WzJdKSB7XG4gICAgICAgICAgc3RhY2subGVuZ3RoID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IDAgJiYgKCF0YWcgfHwgdGFnID09IG5leHRbMl0pKSByZXR1cm4ge1xuICAgICAgICAgIHRhZzogbmV4dFsyXSxcbiAgICAgICAgICBmcm9tOiBQb3Moc3RhcnRMaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogUG9zKGl0ZXIubGluZSwgaXRlci5jaClcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7IC8vIG9wZW5pbmcgdGFnXG4gICAgICAgIHN0YWNrLnB1c2gobmV4dFsyXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGZpbmRNYXRjaGluZ09wZW4oaXRlciwgdGFnKSB7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIHByZXYgPSB0b1ByZXZUYWcoaXRlcik7XG4gICAgICBpZiAoIXByZXYpIHJldHVybjtcbiAgICAgIGlmIChwcmV2ID09IFwic2VsZkNsb3NlXCIpIHsgdG9UYWdTdGFydChpdGVyKTsgY29udGludWU7IH1cbiAgICAgIHZhciBlbmRMaW5lID0gaXRlci5saW5lLCBlbmRDaCA9IGl0ZXIuY2g7XG4gICAgICB2YXIgc3RhcnQgPSB0b1RhZ1N0YXJ0KGl0ZXIpO1xuICAgICAgaWYgKCFzdGFydCkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXJ0WzFdKSB7IC8vIGNsb3NpbmcgdGFnXG4gICAgICAgIHN0YWNrLnB1c2goc3RhcnRbMl0pO1xuICAgICAgfSBlbHNlIHsgLy8gb3BlbmluZyB0YWdcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSBpZiAoc3RhY2tbaV0gPT0gc3RhcnRbMl0pIHtcbiAgICAgICAgICBzdGFjay5sZW5ndGggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgMCAmJiAoIXRhZyB8fCB0YWcgPT0gc3RhcnRbMl0pKSByZXR1cm4ge1xuICAgICAgICAgIHRhZzogc3RhcnRbMl0sXG4gICAgICAgICAgZnJvbTogUG9zKGl0ZXIubGluZSwgaXRlci5jaCksXG4gICAgICAgICAgdG86IFBvcyhlbmRMaW5lLCBlbmRDaClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcInhtbFwiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBJdGVyKGNtLCBzdGFydC5saW5lLCAwKTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgb3BlblRhZyA9IHRvTmV4dFRhZyhpdGVyKVxuICAgICAgaWYgKCFvcGVuVGFnIHx8IGl0ZXIubGluZSAhPSBzdGFydC5saW5lKSByZXR1cm5cbiAgICAgIHZhciBlbmQgPSB0b1RhZ0VuZChpdGVyKVxuICAgICAgaWYgKCFlbmQpIHJldHVyblxuICAgICAgaWYgKCFvcGVuVGFnWzFdICYmIGVuZCAhPSBcInNlbGZDbG9zZVwiKSB7XG4gICAgICAgIHZhciBzdGFydFBvcyA9IFBvcyhpdGVyLmxpbmUsIGl0ZXIuY2gpO1xuICAgICAgICB2YXIgZW5kUG9zID0gZmluZE1hdGNoaW5nQ2xvc2UoaXRlciwgb3BlblRhZ1syXSk7XG4gICAgICAgIHJldHVybiBlbmRQb3MgJiYgY21wKGVuZFBvcy5mcm9tLCBzdGFydFBvcykgPiAwID8ge2Zyb206IHN0YXJ0UG9zLCB0bzogZW5kUG9zLmZyb219IDogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIENvZGVNaXJyb3IuZmluZE1hdGNoaW5nVGFnID0gZnVuY3Rpb24oY20sIHBvcywgcmFuZ2UpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBJdGVyKGNtLCBwb3MubGluZSwgcG9zLmNoLCByYW5nZSk7XG4gICAgaWYgKGl0ZXIudGV4dC5pbmRleE9mKFwiPlwiKSA9PSAtMSAmJiBpdGVyLnRleHQuaW5kZXhPZihcIjxcIikgPT0gLTEpIHJldHVybjtcbiAgICB2YXIgZW5kID0gdG9UYWdFbmQoaXRlciksIHRvID0gZW5kICYmIFBvcyhpdGVyLmxpbmUsIGl0ZXIuY2gpO1xuICAgIHZhciBzdGFydCA9IGVuZCAmJiB0b1RhZ1N0YXJ0KGl0ZXIpO1xuICAgIGlmICghZW5kIHx8ICFzdGFydCB8fCBjbXAoaXRlciwgcG9zKSA+IDApIHJldHVybjtcbiAgICB2YXIgaGVyZSA9IHtmcm9tOiBQb3MoaXRlci5saW5lLCBpdGVyLmNoKSwgdG86IHRvLCB0YWc6IHN0YXJ0WzJdfTtcbiAgICBpZiAoZW5kID09IFwic2VsZkNsb3NlXCIpIHJldHVybiB7b3BlbjogaGVyZSwgY2xvc2U6IG51bGwsIGF0OiBcIm9wZW5cIn07XG5cbiAgICBpZiAoc3RhcnRbMV0pIHsgLy8gY2xvc2luZyB0YWdcbiAgICAgIHJldHVybiB7b3BlbjogZmluZE1hdGNoaW5nT3BlbihpdGVyLCBzdGFydFsyXSksIGNsb3NlOiBoZXJlLCBhdDogXCJjbG9zZVwifTtcbiAgICB9IGVsc2UgeyAvLyBvcGVuaW5nIHRhZ1xuICAgICAgaXRlciA9IG5ldyBJdGVyKGNtLCB0by5saW5lLCB0by5jaCwgcmFuZ2UpO1xuICAgICAgcmV0dXJuIHtvcGVuOiBoZXJlLCBjbG9zZTogZmluZE1hdGNoaW5nQ2xvc2UoaXRlciwgc3RhcnRbMl0pLCBhdDogXCJvcGVuXCJ9O1xuICAgIH1cbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRFbmNsb3NpbmdUYWcgPSBmdW5jdGlvbihjbSwgcG9zLCByYW5nZSwgdGFnKSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgSXRlcihjbSwgcG9zLmxpbmUsIHBvcy5jaCwgcmFuZ2UpO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBvcGVuID0gZmluZE1hdGNoaW5nT3BlbihpdGVyLCB0YWcpO1xuICAgICAgaWYgKCFvcGVuKSBicmVhaztcbiAgICAgIHZhciBmb3J3YXJkID0gbmV3IEl0ZXIoY20sIHBvcy5saW5lLCBwb3MuY2gsIHJhbmdlKTtcbiAgICAgIHZhciBjbG9zZSA9IGZpbmRNYXRjaGluZ0Nsb3NlKGZvcndhcmQsIG9wZW4udGFnKTtcbiAgICAgIGlmIChjbG9zZSkgcmV0dXJuIHtvcGVuOiBvcGVuLCBjbG9zZTogY2xvc2V9O1xuICAgIH1cbiAgfTtcblxuICAvLyBVc2VkIGJ5IGFkZG9uL2VkaXQvY2xvc2V0YWcuanNcbiAgQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZyA9IGZ1bmN0aW9uKGNtLCBwb3MsIG5hbWUsIGVuZCkge1xuICAgIHZhciBpdGVyID0gbmV3IEl0ZXIoY20sIHBvcy5saW5lLCBwb3MuY2gsIGVuZCA/IHtmcm9tOiAwLCB0bzogZW5kfSA6IG51bGwpO1xuICAgIHJldHVybiBmaW5kTWF0Y2hpbmdDbG9zZShpdGVyLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgZnVuY3Rpb24gZG9Gb2xkKGNtLCBwb3MsIG9wdGlvbnMsIGZvcmNlKSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jYWxsKSB7XG4gICAgICB2YXIgZmluZGVyID0gb3B0aW9ucztcbiAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmluZGVyID0gZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcInJhbmdlRmluZGVyXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBvcyA9PSBcIm51bWJlclwiKSBwb3MgPSBDb2RlTWlycm9yLlBvcyhwb3MsIDApO1xuICAgIHZhciBtaW5TaXplID0gZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcIm1pbkZvbGRTaXplXCIpO1xuXG4gICAgZnVuY3Rpb24gZ2V0UmFuZ2UoYWxsb3dGb2xkZWQpIHtcbiAgICAgIHZhciByYW5nZSA9IGZpbmRlcihjbSwgcG9zKTtcbiAgICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UudG8ubGluZSAtIHJhbmdlLmZyb20ubGluZSA8IG1pblNpemUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIG1hcmtzID0gY20uZmluZE1hcmtzQXQocmFuZ2UuZnJvbSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChtYXJrc1tpXS5fX2lzRm9sZCAmJiBmb3JjZSAhPT0gXCJmb2xkXCIpIHtcbiAgICAgICAgICBpZiAoIWFsbG93Rm9sZGVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICByYW5nZS5jbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgICBtYXJrc1tpXS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZ2V0UmFuZ2UodHJ1ZSk7XG4gICAgaWYgKGdldE9wdGlvbihjbSwgb3B0aW9ucywgXCJzY2FuVXBcIikpIHdoaWxlICghcmFuZ2UgJiYgcG9zLmxpbmUgPiBjbS5maXJzdExpbmUoKSkge1xuICAgICAgcG9zID0gQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUgLSAxLCAwKTtcbiAgICAgIHJhbmdlID0gZ2V0UmFuZ2UoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLmNsZWFyZWQgfHwgZm9yY2UgPT09IFwidW5mb2xkXCIpIHJldHVybjtcblxuICAgIHZhciBteVdpZGdldCA9IG1ha2VXaWRnZXQoY20sIG9wdGlvbnMsIHJhbmdlKTtcbiAgICBDb2RlTWlycm9yLm9uKG15V2lkZ2V0LCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbihlKSB7XG4gICAgICBteVJhbmdlLmNsZWFyKCk7XG4gICAgICBDb2RlTWlycm9yLmVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgfSk7XG4gICAgdmFyIG15UmFuZ2UgPSBjbS5tYXJrVGV4dChyYW5nZS5mcm9tLCByYW5nZS50bywge1xuICAgICAgcmVwbGFjZWRXaXRoOiBteVdpZGdldCxcbiAgICAgIGNsZWFyT25FbnRlcjogZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcImNsZWFyT25FbnRlclwiKSxcbiAgICAgIF9faXNGb2xkOiB0cnVlXG4gICAgfSk7XG4gICAgbXlSYW5nZS5vbihcImNsZWFyXCIsIGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgXCJ1bmZvbGRcIiwgY20sIGZyb20sIHRvKTtcbiAgICB9KTtcbiAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgXCJmb2xkXCIsIGNtLCByYW5nZS5mcm9tLCByYW5nZS50byk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlV2lkZ2V0KGNtLCBvcHRpb25zLCByYW5nZSkge1xuICAgIHZhciB3aWRnZXQgPSBnZXRPcHRpb24oY20sIG9wdGlvbnMsIFwid2lkZ2V0XCIpO1xuXG4gICAgaWYgKHR5cGVvZiB3aWRnZXQgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB3aWRnZXQgPSB3aWRnZXQocmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkZ2V0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2lkZ2V0KTtcbiAgICAgIHdpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgd2lkZ2V0LmFwcGVuZENoaWxkKHRleHQpO1xuICAgICAgd2lkZ2V0LmNsYXNzTmFtZSA9IFwiQ29kZU1pcnJvci1mb2xkbWFya2VyXCI7XG4gICAgfSBlbHNlIGlmICh3aWRnZXQpIHtcbiAgICAgIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpZGdldDtcbiAgfVxuXG4gIC8vIENsdW1zeSBiYWNrd2FyZHMtY29tcGF0aWJsZSBpbnRlcmZhY2VcbiAgQ29kZU1pcnJvci5uZXdGb2xkRnVuY3Rpb24gPSBmdW5jdGlvbihyYW5nZUZpbmRlciwgd2lkZ2V0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNtLCBwb3MpIHsgZG9Gb2xkKGNtLCBwb3MsIHtyYW5nZUZpbmRlcjogcmFuZ2VGaW5kZXIsIHdpZGdldDogd2lkZ2V0fSk7IH07XG4gIH07XG5cbiAgLy8gTmV3LXN0eWxlIGludGVyZmFjZVxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbihcImZvbGRDb2RlXCIsIGZ1bmN0aW9uKHBvcywgb3B0aW9ucywgZm9yY2UpIHtcbiAgICBkb0ZvbGQodGhpcywgcG9zLCBvcHRpb25zLCBmb3JjZSk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKFwiaXNGb2xkZWRcIiwgZnVuY3Rpb24ocG9zKSB7XG4gICAgdmFyIG1hcmtzID0gdGhpcy5maW5kTWFya3NBdChwb3MpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpXG4gICAgICBpZiAobWFya3NbaV0uX19pc0ZvbGQpIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBDb2RlTWlycm9yLmNvbW1hbmRzLnRvZ2dsZUZvbGQgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLmZvbGRDb2RlKGNtLmdldEN1cnNvcigpKTtcbiAgfTtcbiAgQ29kZU1pcnJvci5jb21tYW5kcy5mb2xkID0gZnVuY3Rpb24oY20pIHtcbiAgICBjbS5mb2xkQ29kZShjbS5nZXRDdXJzb3IoKSwgbnVsbCwgXCJmb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20uZm9sZENvZGUoY20uZ2V0Q3Vyc29yKCksIG51bGwsIFwidW5mb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLmZvbGRBbGwgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIGkgPSBjbS5maXJzdExpbmUoKSwgZSA9IGNtLmxhc3RMaW5lKCk7IGkgPD0gZTsgaSsrKVxuICAgICAgICBjbS5mb2xkQ29kZShDb2RlTWlycm9yLlBvcyhpLCAwKSwgbnVsbCwgXCJmb2xkXCIpO1xuICAgIH0pO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZEFsbCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGNtLmZpcnN0TGluZSgpLCBlID0gY20ubGFzdExpbmUoKTsgaSA8PSBlOyBpKyspXG4gICAgICAgIGNtLmZvbGRDb2RlKENvZGVNaXJyb3IuUG9zKGksIDApLCBudWxsLCBcInVuZm9sZFwiKTtcbiAgICB9KTtcbiAgfTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcImNvbWJpbmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZ1bmNzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IGZ1bmNzW2ldKGNtLCBzdGFydCk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiYXV0b1wiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgICB2YXIgaGVscGVycyA9IGNtLmdldEhlbHBlcnMoc3RhcnQsIFwiZm9sZFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlbHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXIgPSBoZWxwZXJzW2ldKGNtLCBzdGFydCk7XG4gICAgICBpZiAoY3VyKSByZXR1cm4gY3VyO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHJhbmdlRmluZGVyOiBDb2RlTWlycm9yLmZvbGQuYXV0byxcbiAgICB3aWRnZXQ6IFwiXFx1MjE5NFwiLFxuICAgIG1pbkZvbGRTaXplOiAwLFxuICAgIHNjYW5VcDogZmFsc2UsXG4gICAgY2xlYXJPbkVudGVyOiB0cnVlXG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJmb2xkT3B0aW9uc1wiLCBudWxsKTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb24oY20sIG9wdGlvbnMsIG5hbWUpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zW25hbWVdICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gb3B0aW9uc1tuYW1lXTtcbiAgICB2YXIgZWRpdG9yT3B0aW9ucyA9IGNtLm9wdGlvbnMuZm9sZE9wdGlvbnM7XG4gICAgaWYgKGVkaXRvck9wdGlvbnMgJiYgZWRpdG9yT3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGVkaXRvck9wdGlvbnNbbmFtZV07XG4gICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zW25hbWVdO1xuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oXCJmb2xkT3B0aW9uXCIsIGZ1bmN0aW9uKG9wdGlvbnMsIG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uKHRoaXMsIG9wdGlvbnMsIG5hbWUpO1xuICB9KTtcbn0pO1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsIi8vIOWwgeijhVxyXG5pbXBvcnQgZG9tUmVuZGVyIGZyb20gJy4vZWRpdG9yL2NyZWF0ZUVsZW1lbnQnO1xyXG5pbXBvcnQgQ09ORklHIGZyb20gJy4vZWRpdG9yL2NvbmZpZyc7XHJcbmltcG9ydCBjb2RlbWlyb3JUb29scyBmcm9tICcuL2VkaXRvci9jb2RlbWlycm9yJztcclxuY29uc3QgeyBnZXRTdGF0ZSB9ID0gY29kZW1pcm9yVG9vbHM7XHJcblxyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmNvbnN0IElOUFVUX0VWRU5UX0RFQk9VTkNFX1dBSVQgPSAzMDA7XHJcblxyXG4vLyDlt6Xlhbflm77moIflip/og71cclxuaW1wb3J0ICcuL3N0eWxlL2luZGV4Lmxlc3MnO1xyXG5cclxuaW1wb3J0ICR0b29scyBmcm9tICcuL2VkaXRvci90b29sYmFySGFuZGxlJztcclxuXHJcbi8qKiDlt6Xlhbfpm4blkIjlr7nosaEuICAqL1xyXG5pbXBvcnQgVVRJTCBmcm9tICcuL3V0aWwvVXRpbCc7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmajor63oqIAgPT09PT09PT09PT09PT09PT09PT1cclxuaW1wb3J0IGxhbmdFbiBmcm9tICcuL2VkaXRvci9sYW5nL2VuJztcclxuaW1wb3J0IGxhbmdaaCBmcm9tICcuL2VkaXRvci9sYW5nL3poJztcclxuXHJcbmNvbnN0IGxhbmdNYXAgPSB7XHJcbiAgJ2VuJzogbGFuZ0VuLFxyXG4gICd6aCc6IGxhbmdaaFxyXG59XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBjb2RlbWlycm9yID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBDb2RlbWlycm9yIGZyb20gJ2NvZGVtaXJyb3InO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9tYXJrZG93bi9tYXJrZG93bic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2dmbS9nZm0nO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5JztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2V0YWcnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jbG9zZWJyYWNrZXRzJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL3Njcm9sbC9hbm5vdGF0ZXNjcm9sbGJhcic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGNvZGUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC94bWwtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRndXR0ZXInO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9pbmRlbnQtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2JyYWNlLWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2xpYi9jb2RlbWlycm9yLmNzcyc7XHJcbi8vIGltcG9ydCAnY29kZW1pcnJvci90aGVtZS9iYXNlMTYtbGlnaHQuY3NzJ1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9mb2xkZ3V0dGVyLmNzcyc7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBtYXJrZWQgPT09PT09PT09PT09PT09PT09PT1cclxuaW1wb3J0IG1hcmtlZCBmcm9tICdtYXJrZWQnO1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0gaGlnaGxpZ2h0LmpzID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBobGpzIGZyb20gJ2hpZ2hsaWdodC5qcyc7XHJcbmltcG9ydCAnaGlnaGxpZ2h0LmpzL3N0eWxlcy9tb25va2FpLXN1YmxpbWUuY3NzJztcclxuXHJcbi8vIEBzZWUgW2NvbmZpZy1zZWVdKVtodHRwczovL2dpdGh1Yi5jb20vaGFja21kaW8vY29kaW1kL2Jsb2IvbWFzdGVyL3B1YmxpYy9qcy9saWIvZWRpdG9yL2luZGV4LmpzXVxyXG5cclxuY29uc3QgY29kZW1pcnJvciA9IHtcclxuICAvKiogQ29kZW1pcnJvciDorr7nva4uICovXHJcbiAgY29uZmlnOiB7XHJcbiAgICBtb2RlOiB7XHJcbiAgICAgIG5hbWU6ICdnZm0nLFxyXG4gICAgICB0b2tlblR5cGVPdmVycmlkZXM6IHtcclxuICAgICAgICBlbW9qaTogJ2Vtb2ppJ1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqIOaYvuekuuihjOWPtyAqL1xyXG4gICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAvLyDoh6rliqjpqozor4HplJnor69cclxuICAgIG1hdGNoQnJhY2tldHM6IHRydWUsXHJcbiAgICAvLyDnvKnov5tcclxuICAgIGluZGVudFVuaXQ6IDQsXHJcbiAgICAvLyDmmK/lkKbmjaLooYxcclxuICAgIGxpbmVXcmFwcGluZzogZmFsc2UsXHJcbiAgICAvLyDngrnlh7vpq5jkuq7mraPooYxcclxuICAgIHN0eWxlQWN0aXZlTGluZTogdHJ1ZSxcclxuICAgIC8vIOmFjeiJsijkuLvpopgpXHJcbiAgICB0aGVtZTogJ2Jhc2UxNi1kYXJrJyxcclxuICAgIC8vIOiHquWKqOihpeWFqOaLrOWPt1xyXG4gICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUsXHJcbiAgICAvLyDoh6rliqjpl63lkIjmoIfnrb5cclxuICAgIGF1dG9DbG9zZVRhZ3M6IHRydWUsXHJcbiAgICAvLyDlsZXlvIDmipjlj6BcclxuICAgIGZvbGRHdXR0ZXI6IHRydWUsXHJcbiAgICBndXR0ZXJzOiBbJ0NvZGVNaXJyb3ItbGluZW51bWJlcnMnLCAnYXV0aG9yc2hpcC1ndXR0ZXJzJywgJ0NvZGVNaXJyb3ItZm9sZGd1dHRlciddLFxyXG4gICAgcGxhY2Vob2xkZXI6IFwi4oaQIFN0YXJ0IGJ5IGVudGVyaW5nIGEgdGl0bGUgaGVyZVxcbj09PVxcblZpc2l0IC9mZWF0dXJlcyBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvLlxcbkhhcHB5IGhhY2tpbmcgOilcIlxyXG4gIH1cclxufVxyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0g5LiD54mb5LiK5LygID09PT09PT09PT09PT09PT09PT09XHJcbmltcG9ydCBRaW5pdVVwbGFvZCBmcm9tICcuL2VkaXRvci9xaW5pdS1zZGstdXBsb2FkJztcclxubGV0IHFpbml1VXBsb2FkID0gbnVsbDtcclxuXHJcblxyXG5jbGFzcyBDTWRFZGl0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcclxuICAgIG9wdGlvbnMuZWRpdG9yID0gdGhpcztcclxuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMli4gXHJcbiAgICovXHJcbiAgaW5pdChvcHRpb25zKSB7XHJcbiAgICB0aGlzLmluaXREYXRhKG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmluaXRWaWV3KHRoaXMuX29wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9riBjb25maWdcclxuICBzZXQgb3B0aW9ucyhvcHRpb24pIHtcclxuICAgIC8vIOWQjOWAvOWvueixoeWAvOimhuebllxyXG4gIH1cclxuXHJcbiAgZ2V0IG9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIneWni+WMlue8lui+keWZqOaVsOaNri4gXHJcbiAgICovXHJcbiAgLy8gaW5pdERhdGEob3B0aW9ucykge1xyXG4gIC8vICAgLy8gRmluZCB0aGUgZWxlbWVudCBhdHRyXHJcbiAgLy8gICBpZiAob3B0aW9ucy5lbGVtZW50KSB7XHJcbiAgLy8gICAgIHRoaXMuZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcclxuICAvLyAgICAgdGhpcy50ZXh0QXJlYUVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07XHJcbiAgLy8gICB9IGVsc2UgaWYgKG9wdGlvbnMuZWxlbWVudCA9PT0gbnVsbCkge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZygnTURFZGl0b3I6IEVycm9yLiBObyBlbGVtZW50IHdhcyBmb3VuZC4nKTtcclxuICAvLyAgICAgcmV0dXJuO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIEhhbmRsZSB0b29sYmFyXHJcbiAgLy8gICBpZiAob3B0aW9ucy50b29sYmFyID09PSB1bmRlZmluZWQpIHtcclxuICAvLyAgICAgb3B0aW9ucy50b29sYmFyID0gW107XHJcblxyXG4gIC8vICAgICAvLyBMb29wIG92ZXIgdGhlIGJ1aWx0IGluIGJ1dHRvbnMsIHRvIGdldCB0aGUgcHJlZmVycmVkIG9yZGVyXHJcbiAgLy8gICAgIGZvciAobGV0IGtleSBpbiB0b29sYmFyQnVpbHRJbkJ1dHRvbnMpIHtcclxuICAvLyAgICAgICBpZiAodG9vbGJhckJ1aWx0SW5CdXR0b25zLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHJcbiAgLy8gICAgICAgICAvLyDliIbpmpTnrKblip/og71cclxuICAvLyAgICAgICAgIGlmIChrZXkuaW5kZXhPZignc2VwYXJhdG9yLScpICE9IC0xKSB7XHJcbiAgLy8gICAgICAgICAgIG9wdGlvbnMudG9vbGJhci5wdXNoKCd8JylcclxuICAvLyAgICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgICAvLyBcclxuICAvLyAgICAgICAgIGlmICh0b29sYmFyQnVpbHRJbkJ1dHRvbnNba2V5XS5kZWZhdWx0ID09PSB0cnVlIHx8IFxyXG4gIC8vICAgICAgICAgICAgKG9wdGlvbnMuc2hvd0ljb25zICYmIFxyXG4gIC8vICAgICAgICAgICAgIG9wdGlvbnMuc2hvd0ljb25zLmNvbnN0cnV0b3IgPT09IEFycmF5ICYmIFxyXG4gIC8vICAgICAgICAgICAgIG9wdGlvbnMuc2hvd0ljb25zLmluZGV4T2Yoa2V5KSAhPSAtMSkpIHtcclxuICAvLyAgICAgICAgICAgb3B0aW9ucy50b29sYmFyLnB1c2goa2V5KTsgICAgXHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8gSGFuZGxlIHN0YXR1cyBiYXJcclxuICAvLyAgIGlmICghb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnc3RhdHVzJykpIHtcclxuICAvLyAgICAgb3B0aW9ucy5zdGF0dXMgPSBbJ2F1dG9zYXZlJywgJ2xpbmVzJywgJ3dvcmRzJywgJ2N1cnNvciddO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIEFkZCBkZWZhdWx0IHByZXZpZXcgcmVuZGVyaW5nIGZ1bmN0aW9uXHJcbiAgLy8gICBpZiAoIW9wdGlvbnMucHJldmlld1JlbmRlcikge1xyXG4gIC8vICAgICBvcHRpb25zLnByZXZpZXdSZW5kZXIgPSBmdW5jdGlvbihwbGFpblRleHQpIHtcclxuICAvLyAgICAgICByZXR1cm4gdGhpcy5lZGl0b3IubWFya2Rvd24ocGxhaW5UZXh0KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIFNldCBkZWZhdWx0IG9wdGlvbnMgZm9yIHBhcnNpbmcgY29uZmlnXHJcbiAgLy8gICBvcHRpb25zLnBhcnNpbmdDb25maWcgPSBleHRlbmQoXHJcbiAgLy8gICAgIHsgaGlnaGxpZ2h0Rm9ybWF0dGluZzogdHJ1ZSB9LFxyXG4gIC8vICAgICBvcHRpb25zLnBhcnNpbmdDb25maWcgfHwge31cclxuICAvLyAgICk7XHJcblxyXG4gIC8vICAgLy8gTWVyZ2luZyB0aGUgaW5zZXJ0VGV4dHMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnNcclxuICAvLyAgIG9wdGlvbnMuaW5zZXJ0VGV4dHMgPSBleHRlbmQoe30sIGluc2VydFRleHRzLCBvcHRpb25zLmluc2VydFRleHRzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBNZXJnaW5nIHRoZSBwcm9tcHRUZXh0cywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICAvLyAgIG9wdGlvbnMucHJvbXB0VGV4dHMgPSBwcm9tcHRUZXh0cztcclxuXHJcbiAgLy8gICAvLyBNZXJnaW5nIHRoZSBibG9ja1N0eWxlcywgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICAvLyAgIG9wdGlvbnMuYmxvY2tTdHlsZXMgPSBleHRlbmQoe30sIGJsb2NrU3R5bGVzLCBvcHRpb25zLmJsb2NrU3R5bGVzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBNZXJnaW50IHRoZSBzaG9ydGN1dHMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgLy8gICAvLyDlv6vmjbfplK7phY3nva7orr7nva5cclxuICAvLyAgIG9wdGlvbnMuc2hvcnRjdXRzID0gZXh0ZW5kKHt9LCBzaG9ydGN1dHMsIG9wdGlvbnMuc2hvcnRjdXRzIHx8IHt9KTtcclxuXHJcbiAgLy8gICAvLyBVcGRhdGUgdGhpcyBvcHRpb25zXHJcbiAgLy8gICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG5cclxuICAvLyAgIC8vIFRoZSBjb2RlbWlycm9yIGNvbW1wb25lbnQgaXMgb25seSBhdmFsaWFibGUgYWZ0ZXIgcmVuZGVyZWQuXHJcbiAgLy8gICAvLyBzbyBzZXR0ZXIgZm9yIHRoZSBpbml0aWFsVmFsdWUgY2FuIG9ubHkgcnVuIGFmdGVyXHJcbiAgLy8gICAvLyB0aGUgZWxlbWVudCBoYXMgYmVuIHJlbmVyZWRcclxuICAvLyAgIGlmIChvcHRpb25zLmluaXRpYWxWYWx1ZSAmJiAoIXRoaXMub3B0aW9ucy5hdXRvc2F2ZSB8fCB0aGlzLm9wdGlvbnMuYXV0b3NhdmUuZm91bmRTYXZlVmFsdWUgIT09IHRydWUpKSB7XHJcbiAgLy8gICAgIHRoaXMudmFsdWUob3B0aW9ucy5pbml0aWFsVmFsdWUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBpbml0RGF0YShvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmluaXRPcHRpb24ob3B0aW9ucyk7XHJcbiAgICAgIHRoaXMuaW5pdEVkaXRvclN0YXR1cygpO1xyXG4gICAgICB0aGlzLmluaXRRaW5pdSh0aGlzLl9vcHRpb25zLnFpbml1KTtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7IFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yid5aeL57yW6L6R5Zmo5YyW6KeG5Zu+5pi+56S6LiBcclxuICAgKi9cclxuICBpbml0VmlldyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIHRoaXMuY3JlYXRlSWNvbkxpbmsoKTtcclxuICAgIHRoaXMuY3JlYXRlRWxlbWVudChvcHRpb25zKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgc2VsZi5pbml0RXZlbnQoKTtcclxuICAgICAgICBzZWxmLmluaXRDb2RlTWlycm9yRGF0YSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdE1hcmtkb3duRGF0YSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdERlZmF1bHRDb250ZW50KCk7XHJcbiAgICAgICAgc2VsZi5saWZlY3ljbGVNb3VudGVkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yid5aeL5YyWYOe8lui+keWZqGDkuovku7blpITnkIYuIFxyXG4gICAqL1xyXG4gIGluaXRFdmVudCgpIHtcclxuICAgIHRoaXMuaW5pdFN0YXR1c0V2ZW50KCk7XHJcbiAgICB0aGlzLmluaXRUb29sc0V2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBpbml0T3B0aW9uKG9wdGlvbnMpIHtcclxuICAgIC8vIFRvZG86IOWPguaVsOaLt+i0neWSjOimhuebluWKn+iDvemcgOimgeS8mOWMli5cclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xyXG4gICAgICAvLyA9PT09PT09PT09IOW/q+aNt+mUriA9PT09PT09PT09XHJcbiAgICAgIHNob3J0Y3V0czoge1xyXG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgLy8gPT09PT09PT09PSDor63oqIAgPT09PT09PT09PVxyXG4gICAgICBsYW5nOiAnemgnLFxyXG4gICAgICAvLyA9PT09PT09PT09IOS4g+eJmyA9PT09PT09PT09XHJcbiAgICAgIHFpbml1OiB7XHJcbiAgICAgICAgdG9rZW5BcGlVcmw6ICdodHRwOi8vMTI3LjAuMC4xOjMwMDEvYXBpL3Fpbml1L3Rlc3QvZ2V0X3Rva2VuJyxcclxuICAgICAgICByZWdpb246ICd6MScsXHJcbiAgICAgICAgY29uZmlnOiB7fSxcclxuICAgICAgICBwdXRFeHRyYToge31cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gT2JqZWN0LmFzc2lnbihkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICAvLyB0aGlzLl9vcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gVVRJTC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcclxuICAgIHRoaXMuX29wdGlvbnMuJHRvb2xzID0gJHRvb2xzO1xyXG4gICAgY29uc3QgX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5fb3B0aW9ucyk7XHJcblxyXG4gICAgLy8g6buY6K6k6K+t6KiA5aSE55CGLlxyXG4gICAgaWYgKHR5cGVvZiBfb3B0aW9ucy5sYW5nID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBsYW5nS2V5ID0gX29wdGlvbnMubGFuZztcclxuICAgICAgdGhpcy5fb3B0aW9ucy5sYW5nID0gbGFuZ01hcFtsYW5nS2V5XSB8fCBDT05GSUcuZWRpdG9yLmxhbmd1YWdlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g6Ieq5bex6YWN572u6K+t6KiALlxyXG4gICAgICB0aGlzLl9vcHRpb25zLmxhbmcgPSBPYmplY3QuYXNzaWduKHt9LCBDT05GSUcuZWRpdG9yLmxhbmd1YWdlLCBvcHRpb25zLmxhbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqOeUn+WRveWRqOacnyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIC8qKiDnvJbovpHlmajmiYDmnInpg73lh4blpIflpb3kuoYgKi9cclxuICBsaWZlY3ljbGVNb3VudGVkKCkge1xyXG4gICAgdGhpcy5hZGRFZGl0Q29udGFpbmVyUGFzZUltZygpO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5Yib5bu657yW6L6R5Zmo5YWD57SgID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog57yW6L6R5ZmoIGDlm77moIdjc3Ppk77mjqVgIOWFg+e0oOWIm+W7ui5cclxuICAgKi9cclxuICBjcmVhdGVJY29uTGluaygpIHtcclxuICAgIGNvbnN0IGlzQ3JlYXRlZEljb25MaW5rID0gdGhpcy5pc0NyZWF0ZWRJY29uTGluaygpO1xyXG4gICAgaWYgKGlzQ3JlYXRlZEljb25MaW5rKSByZXR1cm47XHJcblxyXG4gICAgLy8gQHNlZSBodHRwOi8vd3d3LnJ1bm9vYi5jb20vanNyZWYvbWV0LWRvY3VtZW50LWNyZWF0ZWVsZW1lbnQuaHRtbFxyXG4gICAgY29uc3Qgb2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICBvbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtZWRpdG9yJywgdHJ1ZSk7XHJcbiAgICBvbGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjtcclxuICAgIG9saW5rLmhyZWYgPSBDT05GSUcuaWNvbkxpbms7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQob2xpbmspO1xyXG4gIH1cclxuICAvKipcclxuICAgKiDmo4DmtYvmmK/lkKblt7Lnu4/liJvlu7rkuobnvJbovpHlmajlm77moIfmoLflvI/pk77mjqUuIFxyXG4gICAqL1xyXG4gIGlzQ3JlYXRlZEljb25MaW5rKCkge1xyXG4gICAgY29uc3Qgb0xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibGlua1tkYXRhLWVkaXRvcl1cIik7XHJcbiAgICBjb25zdCByZXN1bHQgPSBvTGluayA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJvlu7rnvJbovpHlmaggYOaYvuekuuWuueWZqGAuIFxyXG4gICAqL1xyXG4gIGNyZWF0ZUVsZW1lbnQob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZG9tUmVuZGVyLmluaXQob3B0aW9ucykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5ZmoIGBUb29sc2Ag55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog5Zu+5qCH5re75Yqg54K55Ye75LqL5Lu255uR5ZCsLiBcclxuICAgKi9cclxuICBpbml0VG9vbHNFdmVudCgpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgdG9vbHNPYmogPSB0aGlzLl9vcHRpb25zLiR0b29scztcclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IHsgdG9vbGJhckJ1aWx0SW5CdXR0b25zIH0gPSB0b29sc09iajtcclxuICAgIGNvbnN0IHRvb2xzQXJyID0gVVRJTC5vYmoyQXJyKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcblxyXG4gICAgaWYgKHRvb2xzQXJyLmxlbmd0aCA+IDApIHtcclxuICAgICAgdG9vbHNBcnIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAvLyBjbGFzTmFtZSDmnInlpJrkuKrnsbvlkI3ml7blj5bnrKzkuIDkuKouXHJcbiAgICAgICAgaWYgKGl0ZW1bJ2NsYXNzTmFtZSddLmluZGV4T2YoJyAnKSA+IDApIHtcclxuICAgICAgICAgIGl0ZW1bJ2NsYXNzTmFtZSddID0gaXRlbVsnY2xhc3NOYW1lJ10uc3BsaXQoJyAnKVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICcuJyArIGl0ZW1bJ2NsYXNzTmFtZSddO1xyXG4gICAgICAgIGNvbnN0IGNhbGxCYWNrID0gaXRlbVsnYWN0aW9uJ107XHJcbiAgICAgICAgY29uc3QgaXNGdW5jdGlvbiA9IFVUSUwuaXNGdW5jdGlvbihjYWxsQmFjayk7XHJcblxyXG4gICAgICAgIGlmIChjbGFzc05hbWUgIT09ICcnICYmIGlzRnVuY3Rpb24pIHtcclxuICAgICAgICAgIGNvbnN0IHRvb2xFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICBpZiAodG9vbEVsKSB7XHJcbiAgICAgICAgICAgIC8vIOm7mOiupOaYvuekuiBjb21wYXJlIOW4g+WxgFxyXG4gICAgICAgICAgICBzZWxmLiRzdGF0dXNcclxuICAgICAgICAgICAgdG9vbEVsLiRlZGl0b3IgPSBzZWxmO1xyXG4gICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyXHJcbiAgICAgICAgICAgIHRvb2xFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNhbGxCYWNrLCBmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqCBgQ29kZU1pcnJvcmAg55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog5Yib5bu6IENvZGVtaXJyb3Ig5a655ZmoLiBcclxuICAgKi9cclxuICBjcmVhdGVDb2RlTWlycm9yRWxlbWVudChlbCwgY29uZmlnKSB7XHJcbiAgICByZXR1cm4gQ29kZW1pcnJvci5mcm9tVGV4dEFyZWEoZWwsIGNvbmZpZyk7XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRDb2RlTWlycm9yRGF0YSgpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xyXG4gICAgbGV0IG1vZGU7XHJcbiAgICBsZXQgYmFja2Ryb3A7XHJcbiAgICBsZXQgdGV4dEFyZWFFbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcjYXJlYScpO1xyXG4gICAgXHJcbiAgICAvLyBpZiAob3B0aW9ucy5zcGVsbENoZWNrZGVyICE9PSBmYWxzZSkge1xyXG4gICAgLy8gICBtb2RlID0gJ3NwZWxsLWNoZWNrZXInO1xyXG4gICAgLy8gICBiYWNrZHJvcCA9IG9wdGlvbnMucGFyc2luZ0NvbmZpZztcclxuICAgIC8vICAgYmFja2Ryb3AubmFtZSA9ICdnZm0nO1xyXG4gICAgLy8gICBiYWNrZHJvcC5naXRIdWJTcGljZSA9IGZhbHNlO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgbW9kZSA9IG9wdGlvbnMucGFyc2luZ0NvbmZpZztcclxuICAgIC8vICAgbW9kZS5uYW1lID0gJ2dmbSc7XHJcbiAgICAvLyAgIG1vZGUuZ2l0SHViU3BpY2UgPSBmYWxzZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBDb2RlTWlycm9yIOiHquWumuS5ieiuvue9rlxyXG4gICAgY29uc3QgY21EaXlDb25maWcgPSB7XHJcbiAgICAgIG1vZGU6IHtcclxuICAgICAgICBuYW1lOiBcImdmbVwiLFxyXG4gICAgICAgIHRva2VuVHlwZU92ZXJyaWRlczoge1xyXG4gICAgICAgICAgZW1vamk6IFwiZW1vamlcIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgLyoqIOaYvuekuuihjOWPtyAqL1xyXG4gICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgLy8g6Ieq5Yqo6aqM6K+B6ZSZ6K+vXHJcbiAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsXHJcbiAgICAgIC8vIOe8qei/m1xyXG4gICAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgICAvLyDmmK/lkKbmjaLooYxcclxuICAgICAgbGluZVdyYXBwaW5nOiB0cnVlLFxyXG4gICAgICAvLyDngrnlh7vpq5jkuq7mraPooYxcclxuICAgICAgc3R5bGVBY3RpdmVMaW5lOiB0cnVlLFxyXG4gICAgICAvLyDphY3oibIo5Li76aKYKVxyXG4gICAgICB0aGVtZTogXCJiYXNlMTYtZGFya1wiLFxyXG4gICAgICAvLyDoh6rliqjooaXlhajmi6zlj7dcclxuICAgICAgYXV0b0Nsb3NlQnJhY2tldHM6IHRydWUsXHJcbiAgICAgIC8vIOiHquWKqOmXreWQiOagh+etvlxyXG4gICAgICBhdXRvQ2xvc2VUYWdzOiB0cnVlLFxyXG4gICAgICAvLyDlsZXlvIDmipjlj6BcclxuICAgICAgZm9sZEd1dHRlcjogdHJ1ZSxcclxuICAgICAgZ3V0dGVyczogW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiLCBcIkNvZGVNaXJyb3ItZm9sZGd1dHRlclwiXVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOe8lui+keWZqOm7mOiupOiuvue9rlxyXG4gICAgLy8g5a6e5L6L5YyW57yW6L6R5Zmo5pe26buY6K6k55qE5Lyg5Y+CXHJcbiAgICAvLyBjb25zdCBlZGl0b3JEZWZhdWx0Q29uZmlnID0ge1xyXG4gICAgLy8gICBtb2RlOiBtb2RlLFxyXG4gICAgLy8gICBiYWNrZHJvcDogYmFja2Ryb3AsXHJcbiAgICAvLyAgIHRoZW1lOiBcInBhcGVyXCIsXHJcbiAgICAvLyAgIHRhYlNpemU6IChvcHRpb25zLnRhYlNpemUgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMudGFiU2l6ZSA6IDIsXHJcbiAgICAvLyAgIGluZGVudFVuaXQ6IChvcHRpb25zLnRhYlNpemUgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMudGFiU2l6ZSA6IDIsXHJcbiAgICAvLyAgIGluZGVudFdpdGhUYWJzOiAob3B0aW9ucy5pbmRlbnRXaXRoVGFicyA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgLy8gICBsaW5lTnVtYmVyczogZmFsc2UsXHJcbiAgICAvLyAgIGF1dG9mb2N1czogKG9wdGlvbnMuYXV0b2ZvY3VzID09PSB0cnVlKSA/IHRydWUgOiBmYWxzZSxcclxuICAgIC8vICAgZXh0cmFLZXlzOiBrZXlNYXBzLFxyXG4gICAgLy8gICBsaW5lV3JhcHBpbmc6IChvcHRpb25zLmxpbmVXcmFwcGluZyA9PT0gZmFsc2UpID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgLy8gICBhbGxvd0Ryb3BGaWxlVHlwZXM6IFtcInRleHQvcGxhaW5cIl0sXHJcbiAgICAvLyAgIHBsYWNlaG9sZGVyOiBvcHRpb25zLnBsYWNlaG9sZGVyIHx8IHRleHRBcmVhRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSB8fCBcIlwiLFxyXG4gICAgLy8gICBzdHlsZVNlbGVjdGVkVGV4dDogKG9wdGlvbnMuc3R5bGVTZWxlY3RlZFRleHQgIT0gdW5kZWZpbmVkKSA/IG9wdGlvbnMuc3R5bGVTZWxlY3RlZFRleHQgOiB0cnVlXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8g5Y+C5pWw5re35ZCIXHJcbiAgICAvLyBPYmplY3QuYXNzaWduKHt9LCBjbURpeUNvbmZpZyk7XHJcbiAgICAvLyB0aGlzLiRjb2RlbWlycm9yID0gQ29kZW1pcnJvci5mcm9tVGV4dEFyZWEodGV4dEFyZWFFbGVtZW50LCBjbURpeUNvbmZpZyk7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yID0gdGhpcy5jcmVhdGVDb2RlTWlycm9yRWxlbWVudCh0ZXh0QXJlYUVsZW1lbnQsIGNtRGl5Q29uZmlnKTtcclxuICAgIFxyXG4gICAgLy8gY29kZW1pcnJvciDmt7vliqDorr/pl67nvJbovpHlmajlv6vmjbfmlrnlvI9cclxuICAgIHRoaXMuJGNvZGVtaXJyb3IuJGVkaXRvciA9IHRoaXM7XHJcblxyXG4gICAgdGhpcy5pbml0Q29kZU1pcnJvckV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29kZU1pcnJvckV2ZW50KCkge1xyXG4gICAgdGhpcy5hZGRfQ01fY2hhbmdlX2V2ZW50SGFuZGxlKCk7XHJcbiAgICB0aGlzLmFkZF9DTV9jdXJzb3JBY3Rpdml0eV9ldmVudEhhbmRsZSgpO1xyXG4gICAgdGhpcy5hZGRTY3JvbGxTeW5jKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBgQ29kZU1pcnJvcmAg5YaF5a655Y+Y5YyW5LqL5Lu255uR5ZCsLlxyXG4gICAqL1xyXG4gIGFkZF9DTV9jaGFuZ2VfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjaGFuZ2VzJywgZGVib3VuY2UodGhpcy5vbkNvZGVNaXJyb3JDaGFuZ2UsIElOUFVUX0VWRU5UX0RFQk9VTkNFX1dBSVQpKTtcclxuICB9XHJcblxyXG4gIG9uQ29kZU1pcnJvckNoYW5nZShjbSkge1xyXG4gICAgLy8g57yW6L6R5Zmo5a6e5L6LLlxyXG4gICAgY29uc3QgZWRpdG9yID0gY20uJGVkaXRvcjtcclxuICAgIGVkaXRvci5jb21tb25Db2RlTWlycm9yRXZlbnRIYW5kbGUoY20pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYENvZGVNaXJyb3JgIOWFieagh+enu+WKqOS6i+S7tuebkeWQrC5cclxuICAgKi9cclxuICBhZGRfQ01fY3Vyc29yQWN0aXZpdHlfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjdXJzb3JBY3Rpdml0eScsIHRoaXMub25Db2RlTWlycm9yQ3Vyc29yQWN0aXZpdHkpO1xyXG4gIH1cclxuXHJcbiAgb25Db2RlTWlycm9yQ3Vyc29yQWN0aXZpdHkoY20pIHtcclxuICAgIC8vIOe8lui+keWZqOWunuS+iy5cclxuICAgIGNvbnN0IGVkaXRvciA9IGNtLiRlZGl0b3I7XHJcbiAgICBlZGl0b3IuY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGBDb2RlTWlycm9yYCDkuovku7blm57osIPkuK3pg73pnIDopoHlpITnkIbnmoTlhoXlrrkuIFxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7Q29kZU1pcnJvcn0gY20gQ29kZU1pcnJvciDlr7nosaEuXHJcbiAgICovXHJcbiAgY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gY20uZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IGVkaXRvciA9IGNtLiRlZGl0b3I7XHJcbiAgICBlZGl0b3Iuc2V0SHRtbFZhbHVlKGNvbnRlbnQpO1xyXG4gICAgZWRpdG9yLnVwZGF0ZVN0YXR1c0JhcihlZGl0b3IpO1xyXG4gIH1cclxuICBcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5ZmoIGBtYXJrZG93bmAg55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgaW5pdE1hcmtkb3duRGF0YSh0ZXh0KSB7XHJcbiAgICBpZiAobWFya2VkKSB7XHJcbiAgICAgIGNvbnN0IG1hcmtlZE9wdGlvbnMgPSB7XHJcbiAgICAgICAgZ2ZtOiB0cnVlLFxyXG4gICAgICAgIHRhYmxlczogdHJ1ZSxcclxuICAgICAgICBicmVha3M6IGZhbHNlLFxyXG4gICAgICAgIHBlZGFudGljOiBmYWxzZSxcclxuICAgICAgICBzYW5pdGl6ZTogZmFsc2UsXHJcbiAgICAgICAgc21hcnRMaXN0czogdHJ1ZSxcclxuICAgICAgICBzbWFydHlwYW50czogZmFsc2UsXHJcbiAgICAgICAgaGlnaGxpZ2h0OiBmdW5jdGlvbihjb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGxqcy5oaWdobGlnaHRBdXRvKGNvZGUpLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRtYXJrZWQgPSBtYXJrZWQ7XHJcbiAgICAgIC8vIFNldCBvcHRpb25zXHJcbiAgICAgIHRoaXMuJG1hcmtlZC5zZXRPcHRpb25zKG1hcmtlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdE1hcmtkb3duRXZlbnQoKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXJrZG93biDlhoXlrrnmmL7npLrorr7nva4uXHJcbiAgICovXHJcbiAgaW5pdERlZmF1bHRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZGVmYXVsdENvbiA9IHRoaXMuX29wdGlvbnMuZGVmYXVsdENvbjtcclxuICAgIGlmIChkZWZhdWx0Q29uKSB7XHJcbiAgICAgIGNvbnN0IGNtID0gdGhpcy4kY29kZW1pcnJvcjtcclxuICAgICAgY20uc2V0VmFsdWUoZGVmYXVsdENvbik7XHJcbiAgICAgIHRoaXMuY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiDojrflj5YgYENvZGVNaXJyb3JgIOeahOWAvC5cclxuICAgKi9cclxuICBnZXRNRFZhbHVlKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgcmV0dXJuIGNtLmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva4gYENvZGVNaXJyb3JgIOeahOWAvC4gXHJcbiAgICovXHJcbiAgc2V0SHRtbFZhbHVlKG1kVmFsdWUpIHtcclxuICAgIGNvbnN0IGh0bWxTdHIgPSB0aGlzLiRtYXJrZWQobWRWYWx1ZSk7XHJcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3JykucXVlcnlTZWxlY3RvcignLnByZXZpZXctYmQnKTtcclxuICAgIGh0bWxFbGVtZW50LmlubmVySFRNTCA9IGh0bWxTdHI7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYHByZXZpZXdgIOWuueWZqOebuOWFsyA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYOa7muWKqOadoWAgPT09PT09PT09PT09PT09PT09PT1cclxuICAvKipcclxuICAgKiDmu5rliqjlhoXlrrnlkIzmraUuIFxyXG4gICAqL1xyXG4gIGFkZFNjcm9sbFN5bmMoKSB7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXByZXZpZXcnKTtcclxuXHJcbiAgICBsZXQgY1Njcm9sbCA9IGZhbHNlO1xyXG4gICAgbGV0IHBTY3JvbGwgPSBmYWxzZTtcclxuICAgIC8vIFN5bmNzIHNjcm9sbCAgZWRpdG9yIC0+IHByZXZpZXdcclxuICAgIGNtLm9uKFwic2Nyb2xsXCIsIGZ1bmN0aW9uKHYpIHtcclxuICAgICAgaWYoY1Njcm9sbCkge1xyXG4gICAgICAgIGNTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcFNjcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSB2LmdldFNjcm9sbEluZm8oKS5oZWlnaHQgLSB2LmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHZhciByYXRpbyA9IHBhcnNlRmxvYXQodi5nZXRTY3JvbGxJbmZvKCkudG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAocHJldmlldy5zY3JvbGxIZWlnaHQgLSBwcmV2aWV3LmNsaWVudEhlaWdodCkgKiByYXRpbztcclxuICAgICAgcHJldmlldy5zY3JvbGxUb3AgPSBtb3ZlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU3luY3Mgc2Nyb2xsICBwcmV2aWV3IC0+IGVkaXRvclxyXG4gICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgaWYocFNjcm9sbCkge1xyXG4gICAgICAgIHBTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY1Njcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBwcmV2aWV3LnNjcm9sbEhlaWdodCAtIHByZXZpZXcuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB2YXIgcmF0aW8gPSBwYXJzZUZsb2F0KHByZXZpZXcuc2Nyb2xsVG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAoY20uZ2V0U2Nyb2xsSW5mbygpLmhlaWdodCAtIGNtLmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQpICogcmF0aW87XHJcbiAgICAgIGNtLnNjcm9sbFRvKDAsIG1vdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmaggYHN0YXR1c2Ag55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcbiAgdXBkYXRlU3RhdHVzQmFyKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG5cclxuICAgIGNvbnN0IGNvbkxlbiA9IGNtLmdldFZhbHVlKCkubGVuZ3RoO1xyXG4gICAgdGhpcy5yZW5kZXJFZGl0b3JDb250ZW50UG9zaXRpb24oKTtcclxuICAgIHRoaXMucmVuZGVyRWRpdENvbnRlbnRMZW5ndGgoY29uTGVuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaYvuekuui+k+WFpeWGheWuueaAu+mVv+W6pi5cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IGxlbiDplb/luqZcclxuICAgKi9cclxuICByZW5kZXJFZGl0Q29udGVudExlbmd0aChsZW4pIHtcclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IGxlbkVsZW1lbnQgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cycpLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3Itc3RhdHVzLWxlbmd0aCcpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLl9vcHRpb25zLmxhbmc7XHJcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG5cclxuICAgIGxlbkVsZW1lbnQuaW5uZXJIVE1MID0gYCR7bGVuZ3RofSAke2xlbn1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pi+56S65b2T5YmN5YWJ5qCH5omA5Zyo55qEIGDooYzmlbBg44CBYOWIl+aVsGAuIGDmgLvliJfmlbBg44CBYOaAu+mVv+W6pmAuXHJcbiAgICovXHJcbiAgcmVuZGVyRWRpdG9yQ29udGVudFBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgLy8gQHNlZSBbY29kZW1pcnJvci1hcGldKGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI2FwaSlcclxuICAgIC8vIEBzZWUgW+iOt+WPluWFieagh+aJgOWcqOeahOS9jee9rl1odHRwczovL2dpdGh1Yi5jb20vaGFja21kaW8vY29kaW1kL2Jsb2IvZGI2OTk4M2E2MjI2OTM5NjJhMGZkNDJiMmYwOTFiM2YzYjZmNjkwNi9wdWJsaWMvanMvbGliL2VkaXRvci9pbmRleC5qc1xyXG4gICAgY29uc3QgbGluZUNvdW50ID0gY20ubGluZUNvdW50KCk7XHJcbiAgICBjb25zdCBjbUN1cnNvciA9IGNtLmdldEN1cnNvcigpO1xyXG4gICAgY29uc3QgY3VyckNvbCA9IGNtQ3Vyc29yLmNoICsgMTtcclxuICAgIGNvbnN0IGN1cnJMaW5lID0gY21DdXJzb3IubGluZSArIDE7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuX29wdGlvbnMubGFuZztcclxuICAgIGNvbnN0IHsgbGluZSwgY29sdW1ucyB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG5cclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cy1wb3NpdG9uJykucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgc3RhdHVzQmFyRWwuaW5uZXJIVE1MID0gYCR7bGluZX0gJHtjdXJyTGluZX0sJHtjb2x1bW5zfSAke2N1cnJDb2x9IOS4gCAke2xpbmVDb3VudH0gJHtsaW5lfWA7XHJcbiAgfVxyXG4gIFxyXG4gIGluaXRFZGl0b3JTdGF0dXMob3B0aW9ucykge1xyXG4gICAgLy8g5Li76aKY6K6+572uLlxyXG4gICAgdGhpcy4kc3RhdHVzID0ge307XHJcbiAgICB0aGlzLiRzdGF0dXNbJ2lzVGhlbWVMaWdodCddID0gdHJ1ZTtcclxuICAgIHRoaXMuJHN0YXR1c1snaXNGdWxsc2NyZWVuJ10gPSBmYWxzZTtcclxuICAgIC8qKiDpu5jorqTmmL7npLrnvJbovpHluIPlsYAgKi9cclxuICAgIHRoaXMuJHN0YXR1c1snaXNTaG93QWxsJ10gPSB0cnVlO1xyXG4gICAgdGhpcy4kc3RhdHVzWydpc09ubHlQcmV2aWV3J10gPSBmYWxzZTtcclxuICAgIHRoaXMuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnvJbovpHlmajkuovku7blpITnkIYgPT09PT09PT09PT09PT09PT09PT1cclxuICAvKipcclxuICAgKiDnirbmgIHmnaHvvIzmjaLnmq7ogqQuIFxyXG4gICAqL1xyXG4gIGluaXRTdGF0dXNFdmVudCgpIHtcclxuICAgIHRoaXMuaW5pdEV2ZW50VG9nZ2xlVGhlbWUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaNouiCpOWKn+iDvea3u+WKoC4gXHJcbiAgICovXHJcbiAgaW5pdEV2ZW50VG9nZ2xlVGhlbWUob3B0aW9ucywgY2xhc3NOYW1lID0gJy5pY29uLXRoZW1lJykge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBvVGhlbWVFbCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX29wdGlvbnMuZWw7XHJcbiAgICBjb25zdCB7IGFkZENsYXNzLCByZW1vdmVDbGFzcyB9ID0gVVRJTDtcclxuXHJcbiAgICBpZiAob1RoZW1lRWwpIHtcclxuICAgICAgbGV0IGlzVGhlbWVMaWdodDtcclxuICAgICAgb1RoZW1lRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaXNUaGVtZUxpZ2h0ID0gc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgICAvLyDlvZPliY0gYOWco+WFieagt+W8j2AgPT0+IOWIh+aNouWIsCBg5pqX6buR5qC35byPYFxyXG4gICAgICAgIGlmIChpc1RoZW1lTGlnaHQpIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWRhcmsnKTtcclxuICAgICAgICAgIHJlbW92ZUNsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgJ2VkaXRvci10aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuJHN0YXR1c1snaXNUaGVtZUxpZ2h0J10gPSAhc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0RXZlbnRUb2dnbGVGdWxsc2NyZWVuKG9wdGlvbnMpIHtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOe8lui+keWZqOaJqeWxleWKn+iDvSA9PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIOeymOi0tOWbvueJh++8jOW5tuS4iuS8oOiHs+S4g+eJm+S6kVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICBpbml0UWluaXUob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBxaW5pdVVwbG9hZCA9IG5ldyBRaW5pdVVwbGFvZChvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLyoqIOe8lui+keWZqOWGheWuue+8jOeymOi0tOWbvueJh+WkhOeQhuWKn+iDvSAqL1xyXG4gIGFkZEVkaXRDb250YWluZXJQYXNlSW1nKCkge1xyXG4gICAgY29uc3Qgb0VsID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcblxyXG4gICAgb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgZXZlbnQub3JpZ2luYWxFdmVudCkge1xyXG4gICAgICAgIHZhciBjbGlwYm9hcmREYXRhID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgZXZlbnQub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhKTtcclxuICAgICAgICBpZihjbGlwYm9hcmREYXRhLml0ZW1zKXtcclxuICAgICAgICAgICAgdmFyICBibG9iO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLml0ZW1zW2ldLnR5cGUuaW5kZXhPZihcImltYWdlXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsb2IgPSBjbGlwYm9hcmREYXRhLml0ZW1zW2ldLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIOWPquWkhOeQhueymOi0tOeahOexu+Wei+S4uuWbvueJhy5cclxuICAgICAgICAgICAgaWYgKCFibG9iKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVuZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVuZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldnQpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUltYWdlVXBsb2FkKGV2dC50YXJnZXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlbmRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKiDlm77niYfkuIrkvKDlpITnkIYgKi9cclxuICAgIGNvbnN0IGhhbmRsZUltYWdlVXBsb2FkID0gKHRhcmdldCkgPT4ge1xyXG4gICAgICAvLyDnvJbovpHlmajkuK3mj5LlhaXlhoXlrrlcclxuICAgICAgY29uc3QgaW5zZXJ0VGV4dHMgPSBbXCIhW10oXCIsIFwiI3VybCMpXCJdO1xyXG4gICAgICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gICAgICAvLyBiYXNlNjTnvJbnoIFcclxuICAgICAgY29uc3QgaW1nVXJsID0gdGFyZ2V0LnJlc3VsdDtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ+eymOi0tOWbvueJh+WkhOeQhicsIHRhcmdldCk7XHJcbiAgICAgIHFpbml1VXBsb2FkLnB1dGI2NChpbWdVcmwpXHJcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHJlcy5kb21haW4gKyAnLycgKyByZXMuaGFzaDtcclxuICAgICAgICAgIF9yZXBsYWNlU2VsZWN0aW9uKGNtLCBzdGF0LmltYWdlLCBpbnNlcnRUZXh0cywgdXJsKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBfcmVwbGFjZVNlbGVjdGlvbiA9IChjbSwgYWN0aXZlLCBzdGFydEVuZCwgdXJsKSA9PiB7XHJcbiAgICAgIHZhciB0ZXh0O1xyXG4gICAgICB2YXIgc3RhcnQgPSBzdGFydEVuZFswXTtcclxuICAgICAgdmFyIGVuZCA9IHN0YXJ0RW5kWzFdO1xyXG4gICAgICB2YXIgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcihcInN0YXJ0XCIpO1xyXG4gICAgICB2YXIgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoXCJlbmRcIik7XHJcbiAgICAgIC8vIGlmKHVybCkge1xyXG4gICAgICAvLyAgIGVuZCA9IGVuZC5yZXBsYWNlKFwiI3VybCNcIiwgdXJsKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBlbmQgPSBlbmQucmVwbGFjZShcIiN1cmwjXCIsIHVybCk7XHJcbiAgICAgIGlmKGFjdGl2ZSkge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRMaW5lKHN0YXJ0UG9pbnQubGluZSk7XHJcbiAgICAgICAgc3RhcnQgPSB0ZXh0LnNsaWNlKDAsIHN0YXJ0UG9pbnQuY2gpO1xyXG4gICAgICAgIGVuZCA9IHRleHQuc2xpY2Uoc3RhcnRQb2ludC5jaCk7XHJcbiAgICAgICAgY20ucmVwbGFjZVJhbmdlKHN0YXJ0ICsgZW5kLCB7XHJcbiAgICAgICAgICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcbiAgICAgICAgICBjaDogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0ICsgdGV4dCArIGVuZCk7XHJcbiAgICBcclxuICAgICAgICBzdGFydFBvaW50LmNoICs9IHN0YXJ0Lmxlbmd0aDtcclxuICAgICAgICBpZihzdGFydFBvaW50ICE9PSBlbmRQb2ludCkge1xyXG4gICAgICAgICAgZW5kUG9pbnQuY2ggKz0gc3RhcnQubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xyXG4gICAgICBjbS5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZW5kZXIgZWRpdG9yIHRvIHRoZSBnaXZlbiBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgXHJcbiAgICovXHJcbiAgcmVuZGVyKGVsKSB7XHJcbiAgICBpZiAoIWVsKSB7XHJcbiAgICAgIGVsID0gdGhpcy50ZXh0QXJlYUVsZW1lbnQgfHwgdGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzO1xyXG4gICAgY29uc3Qga2V5TWFwcyA9IHt9O1xyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBvcHRpb25zLnNob3J0Y3V0cykge1xyXG4gICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNba2V5XSAhPT0gbnVsbCAmJiBiaW5kaW5nc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAga2V5TWFwc1tmaXhTaG9ydGN1dChvcHRpb25zLnNob3J0Y3V0c1trZXldKV0gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdzW2tleV0oZWRpdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KShrZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aKe5Yqg5pON5L2c5b+r5o236ZSuXHJcbiAgICBrZXlNYXBzWydFbnRlciddID0gJ25ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCc7XHJcbiAgICBrZXlNYXBzWydUYWInXSA9ICd0YWJBbmRJbmRlbnRNYXJrZG93bkxpc3QnO1xyXG4gICAga2V5TWFwc1snRXNjJ10gPSAoY20pID0+IHtcclxuICAgICAgaWYgKGNtLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xyXG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgaWYgKGVkaXRvci5jb2RlbWlycm9yLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09IHVtZCDmqKHlnZflr7zlh7ogPT09PT09PT09PT09PT09PT09PT1cclxuaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRlZmluZS5hbWQgPT09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHtcclxuICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXHJcbiAgZGVmaW5lKGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIENNZEVkaXRvcjtcclxuICB9KTtcclxufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gIG1vZHVsZS5leHBvcnRzID0gQ01kRWRpdG9yO1xyXG59IGVsc2Uge1xyXG4gIHdpbmRvdy5DTWRFZGl0b3IgPSBDTWRFZGl0b3I7XHJcbn1cclxuXHJcblxyXG4iLCJpbXBvcnQgVE9PTFMgZnJvbSAnLi90b29sYmFySGFuZGxlJztcclxuY29uc3QgeyBzaG9ydGN1dHMsIGZpeFNob3J0Y3V0IH0gPSBUT09MUztcclxuXHJcbmNvbnN0IGRvbVJlbmRlciA9IHtcclxuICBpbml0KG9wdGlvbnMpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdkb21SZW5kZXIgb3B0aW9uczogJW8nLCBvcHRpb25zKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdkb21SZW5kZXIgdGhpczogJW8nLCB0aGlzKTtcclxuICAgIHRoaXMuaW5pdERhdGEob3B0aW9ucyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlclRvb2xzKG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckNvZGUob3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlclByaXZpZXcob3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlclN0YXR1cyhvcHRpb25zKTtcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVycm9yID0+IGVycm9yKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGJldHRlciB3YXkgYnV0IG11c3QgdGhpbmsgYnJvd3NlciBzdXBwb3J0XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJlbmRlclRvb2xzKHBhcmVudCk7XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJlbmRlckNvZGUocGFyZW50KTtcclxuICAgIC8vIGF3YWl0IHRoaXMucmVuZGVyUHJpdmlldyhwYXJlbnQpO1xyXG4gICAgLy8gYXdhaXQgdGhpcy5yZW5kZXJTdGF0dXMocGFyZW50KTtcclxuICB9LFxyXG5cclxuICBpbml0RGF0YShvcHRpb25zKSB7XHJcbiAgICB0aGlzLiRlZGl0b3IgPSB7fTtcclxuICAgIHRoaXMuJGVkaXRvci5vcHRpb25zID0gb3B0aW9ucztcclxuICB9LFxyXG5cclxuICAvLyDliJvlu7ogRWRpdCBUb29scyBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyVG9vbHMob3B0aW9ucykge1xyXG4gICAgY29uc3QgZWwgPSBvcHRpb25zLmVsO1xyXG4gICAgY29uc3QgeyB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgfSA9IG9wdGlvbnMuJHRvb2xzO1xyXG4gICAgY29uc3QgdG9vbHNNYWluSHRtbFN0ciA9IHRoaXMuY3JlYXRlVG9vbHNNYWluKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICBjb25zdCB0b29sc0hhbmRsZUh0bWxTdHIgPSB0aGlzLmNyZWF0ZVRvb2xzSGFuZGxlKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItdG9vbHNcIj4ke3Rvb2xzTWFpbkh0bWxTdHJ9JHt0b29sc0hhbmRsZUh0bWxTdHJ9PC9kaXY+XHJcbiAgICAgIGA7XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDnvJbovpHlt6Xlhbflm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc01haW4oaWNvbnMpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgdG9vbHNFZGl0ID0gdGhpcy5nZXRUb29sc0VkaXQoaWNvbnMpO1xyXG4gICAgbGV0IGh0bWxTdHIgPSAnPGRpdiBjbGFzcz1cImVkaXRvci10b29scy1tYWluXCI+JztcclxuXHJcbiAgICAvLyDlvqrnjq/liJvlu7rlm77moIdcclxuICAgIGlmICh0b29sc0VkaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKiDmmK/lkKbmmK8z55qE5YCN5pWwICovXHJcbiAgICAgIGxldCBpc1RocmVlO1xyXG5cclxuICAgICAgY29uc3QgdG9vbHNFZGl0TGVuID0gdG9vbHNFZGl0Lmxlbmd0aDtcclxuICAgICAgdG9vbHNFZGl0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaXNUaHJlZSA9IGluZGV4ID4gMCAmJiAoKGluZGV4ICsgMSkgJSAzID09PSAwKTtcclxuICAgICAgICBpZiAoaXNUaHJlZSkge1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAodG9vbHNFZGl0TGVuIC0gMSkpIHtcclxuICAgICAgICAgICAgaHRtbFN0ciA9IGh0bWxTdHIgKyBzZWxmLmNyZWF0ZVRvb2xzSXRlbShpdGVtKSArICc8c3BhbiBjbGFzcz1cImVkaXRvci10b29scy1kaXZpc2lvblwiPnw8L3NwYW4+JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIGh0bWxTdHIgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgcmV0dXJuIGh0bWxTdHI7XHJcbiAgfSxcclxuICAvKipcclxuICAgKiDojrflj5YgYOW3peWFt+adoe+8mue8lui+keWbvuagh2AuIFxyXG4gICAqIFxyXG4gICAqIEBkZXNjIOW3peWFt+adoeWbvuagh+aMieeFp+e8lui+keWKn+iDveWIhuS4uu+8mmDnvJbovpHlm77moIdg44CBYOinhuWbvuWbvuagh2Ag6YCa6L+HIGBpc0VkaXRUb29sc2DmmK/lkKbkuLogYHRydWVgIOagh+iusFxyXG4gICAqL1xyXG4gIGdldFRvb2xzRWRpdChpY29uc09wdGlvbikge1xyXG4gICAgaWYgKHR5cGVvZiBpY29uc09wdGlvbiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7fTtcclxuICAgIGxldCBfb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWNvbnNPcHRpb24pKTtcclxuICAgIGZvciAobGV0IGtleSBpbiBfb3B0aW9ucykge1xyXG4gICAgICBpZiAoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkge1xyXG4gICAgICAgIHJlc3VsdE9ialtrZXldID0gX29wdGlvbnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydEVkaXRUb29sc0FyciA9IHRoaXMuc29ydFRvb2xzSWNvbihyZXN1bHRPYmosICdpbmRleCcpO1xyXG5cclxuICAgIHJldHVybiBzb3J0RWRpdFRvb2xzQXJyO1xyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDop4blm77mk43kvZzlm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc0hhbmRsZShpY29ucykge1xyXG4gICAgY29uc3QgX2ljb25zID0gdGhpcy5nZXRUb29sc0hhbmRsZShpY29ucyk7XHJcbiAgICBsZXQgaHRtbFN0ciA9ICc8ZGl2IGNsYXNzPVwiZWRpdG9yLXRvb2xzLWhhbmRsZVwiPic7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyDlvqrnjq/nlJ/miJAgaWNvbnNcclxuICAgIF9pY29ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBodG1sU3RyICs9IHNlbGYuY3JlYXRlVG9vbHNJdGVtKGl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaHRtbFN0ciArPSAnPC9kaXY+JztcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOiOt+WPliBg5bel5YW35p2h77ya6KeG5Zu+5Zu+5qCHYC4gXHJcbiAgICogXHJcbiAgICogQGRlc2Mg5bel5YW35p2h5Zu+5qCH5oyJ54Wn57yW6L6R5Yqf6IO95YiG5Li677yaYOe8lui+keWbvuagh2DjgIFg6KeG5Zu+5Zu+5qCHYCDpgJrov4cgYGlzRWRpdFRvb2xzYOaYr+WQpuS4uiBgdHJ1ZWAg5qCH6K6wXHJcbiAgICovXHJcbiAgZ2V0VG9vbHNIYW5kbGUoaWNvbnNPcHRpb24pIHtcclxuICAgIGlmICh0eXBlb2YgaWNvbnNPcHRpb24gIT09ICdvYmplY3QnKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0T2JqID0ge307XHJcbiAgICBsZXQgX29wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGljb25zT3B0aW9uKSk7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gX29wdGlvbnMpIHtcclxuICAgICAgaWYgKCEoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkpIHtcclxuICAgICAgICByZXN1bHRPYmpba2V5XSA9IF9vcHRpb25zW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRFZGl0VG9vbHNBcnIgPSB0aGlzLnNvcnRUb29sc0ljb24ocmVzdWx0T2JqLCAnaW5kZXgnKTtcclxuXHJcbiAgICByZXR1cm4gc29ydEVkaXRUb29sc0FycjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOWbvuagh+aOkuW6jy4gXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiDpnIDopoHmjpLluo/nmoTlr7nosaEuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIg5o6S5bqP5Y+C54Wn5bGe5oCnLlxyXG4gICAqL1xyXG4gIHNvcnRUb29sc0ljb24ob2JqLCBhdHRyKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBsZXQgYXJyID0gW107XHJcbiAgICBsZXQgc29ydEFyciA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICBhcnIucHVzaChvYmpba2V5XSlcclxuICAgIH1cclxuXHJcbiAgICBzb3J0QXJyID0gYXJyLnNvcnQoKG9iajEsIG9iajIpID0+IHtcclxuICAgICAgcmV0dXJuIG9iajFbJ2luZGV4J10gLSBvYmoyWydpbmRleCddO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNvcnRBcnI7XHJcbiAgfSxcclxuICBjcmVhdGVUb29sc0l0ZW0oY29uZmlnKSB7XHJcbiAgICBjb25zdCBjdXJyU2hvcnRjdXRzSXRlbSA9IHNob3J0Y3V0c1tjb25maWcubmFtZV07XHJcbiAgICBsZXQgY3VyclBsYXRTaG9ydGN1dHNJdGVtO1xyXG4gICAgXHJcbiAgICBpZihjdXJyU2hvcnRjdXRzSXRlbSkge1xyXG4gICAgICBjdXJyUGxhdFNob3J0Y3V0c0l0ZW0gPSBmaXhTaG9ydGN1dChjdXJyU2hvcnRjdXRzSXRlbSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN1cnJQbGF0U2hvcnRjdXRzSXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1UaXRsZSA9IHRoaXMuZ2V0VG9vbEl0ZW1UaXRsZVRleHQoY29uZmlnLm5hbWUpO1xyXG5cclxuICAgIC8vIOW8gOWQr+S6huW/q+aNt+mUruaPkOekui5cclxuICAgIGlmICh0aGlzLiRlZGl0b3Iub3B0aW9ucy5maXhTaG9ydGN1dCAmJiB0aGlzLiRlZGl0b3Iub3B0aW9ucy5maXhTaG9ydGN1dC5pc09wZW4pIHtcclxuICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7Y29uZmlnLmNsYXNzTmFtZX1cIiB0aXRsZT1cIiR7aXRlbVRpdGxlfSAoJHtjdXJyUGxhdFNob3J0Y3V0c0l0ZW19KVwiIGRhdGEtbmFtZT1cIiR7Y29uZmlnLm5hbWV9XCI+PC9zcGFuPmA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtjb25maWcuY2xhc3NOYW1lfVwiIHRpdGxlPVwiJHtpdGVtVGl0bGV9XCIgZGF0YS1uYW1lPVwiJHtjb25maWcubmFtZX1cIj48L3NwYW4+YDtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvKiogXHJcbiAgICog6I635Y+W6I+c5Y2V5oyJ6ZKu55qEIHRpdGxlIOaWh+Wtly4gXHJcbiAgICog5qC55o2u57yW6L6R5Zmo55qE6K+t6KiA6L+U5Zue5a+55bqU55qE5YaF5a65LlxyXG4gICAqL1xyXG4gIGdldFRvb2xJdGVtVGl0bGVUZXh0KGl0ZW1OYW1lKSB7XHJcbiAgICBjb25zdCB1c2VMYW5nSXRlbSA9IHRoaXMuJGVkaXRvci5vcHRpb25zLmxhbmcudG9vbGJhckl0ZW07XHJcbiAgICBjb25zdCBrZXkgPSBpdGVtTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHVzZUxhbmdJdGVtW2tleV07XHJcbiAgfSxcclxuXHJcbiAgLy8g5Yib5bu6IEVkaXQgVG9vbHMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIHN0YXJ0ID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICByZW5kZXJDb2RlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGVsID0gb3B0aW9ucy5lbDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGVsLmlubmVySFRNTCArPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1tZFwiPlxyXG4gICAgICAgIDxmb3JtPlxyXG4gICAgICAgICAgPHRleHRBcmVhIGlkPVwiYXJlYVwiPjwvdGV4dEFyZWE+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgYDtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSlcclxuICAgIFxyXG4gIH0sXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyUHJpdmlldyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXByZXZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iZCBtYXJrZG93bi1ib2R5XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBgO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9LFxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDliJvlu7ogRWRpdCBTdGF0dXMgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIHJlbmRlclN0YXR1cyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcblxyXG4gICAgY29uc3QgcG9zaXRvbkh0bWxTdHIgPSB0aGlzLmNyZWF0ZVN0YXR1c1Bvc2l0aW9uKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgbGVuZ3RoSHRtbFN0ciA9IHRoaXMuY3JlYXRlU3RhdHVzTGVucygpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZWwuaW5uZXJIVE1MICs9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXNcIj4ke3Bvc2l0b25IdG1sU3RyfSR7bGVuZ3RoSHRtbFN0cn08L2Rpdj5gO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzUG9zaXRpb24ob3B0aW9ucykge1xyXG4gICAgY29uc3QgdG9nZ2xlVGhlbWVIdG1sU3RyID0gdGhpcy5jcmVhdGVTdGF0dXNUb2dnbGVUaGVtZSgpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLiRlZGl0b3Iub3B0aW9ucy5sYW5nO1xyXG4gICAgY29uc3QgeyBsaW5lLCAgY29sdW1ucyB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG4gICAgbGV0IGh0bWxTdHIgPSBgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXMtcG9zaXRvblwiPjxzcGFuPiR7bGluZX0gLCR7Y29sdW1uc30gIOS4gCAgJHtsaW5lfTwvc3Bhbj4ke3RvZ2dsZVRoZW1lSHRtbFN0cn08L2Rpdj5gO1xyXG5cclxuICAgIHJldHVybiBodG1sU3RyO1xyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzVG9nZ2xlVGhlbWUoKSB7XHJcbiAgICBsZXQgaHRtbFN0ciA9ICc8c3BhbiBjbGFzcz1cImljb24tdGhlbWVcIj48L3NwYW4+JztcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9LFxyXG4gIGNyZWF0ZVN0YXR1c0xlbnMoKSB7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuJGVkaXRvci5vcHRpb25zLmxhbmc7XHJcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG4gICAgbGV0IGh0bWxTdHIgPSBgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXMtbGVuZ3RoXCI+JHtsZW5ndGh9PC9kaXY+YDtcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9XHJcbiAgLy8g5Yib5bu6IEVkaXQgU3RhdHVzIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRvbVJlbmRlcjsiLCIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4vLyDkuK3mlofnlYzpnaLmloflrZfmmL7npLouXHJcbi8vXHJcbi8vIEB1cGRhdGUgMjAxOS8wMS8yMlxyXG4vLyBAYXV0aG9yIEplc29uaHUoZ2l0aHViKVxyXG4vLyBAZW1pYWwgamVzb25odV93ZWJAMTYzLmNvbVxyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHRvb2xiYXJJdGVtOiB7XHJcbiAgICAnYm9sZCc6ICfliqDnspcnLFxyXG4gICAgJ2l0YWxpYyc6ICfmlpzkvZMnLFxyXG4gICAgJ2hlYWRpbmcnOiAn5qCH6aKYJyxcclxuICAgICdxdW90ZSc6ICflvJXnlKgnLFxyXG4gICAgJ2NvZGUnOiAn5Luj56CB5Z2XJyxcclxuICAgICd1bm9yZGVyZWQtbGlzdCc6ICfml6Dluo/liJfooagnLFxyXG4gICAgJ29yZGVyZWQtbGlzdCc6ICfmnInluo/liJfooagnLFxyXG4gICAgJ2xpbmsnOiAn5o+S5YWl6ZO+5o6lJyxcclxuICAgICdpbWFnZSc6ICfmj5LlhaXlm77niYcnLFxyXG4gICAgJ3VuZG8nOiAn5pKk5raIJyxcclxuICAgICdyZWRvJzogJ+mHjeWBmicsXHJcbiAgICAnYWJvdXQnOiAn5YWz5LqO57yW6L6R5ZmoJyxcclxuICAgICdlZGl0JzogJ+e8lui+keaooeW8jycsXHJcbiAgICAnY29tcGFyZSc6ICfluLjop4TmqKHlvI8nLFxyXG4gICAgJ3ByZXZpZXcnOiAn6aKE6KeI5qih5byPJyxcclxuICAgICdmdWxsc2NyZWVuJzogJ+WIh+aNouWFqOWxjydcclxuICB9LFxyXG4gIHN0YXR1c0Jhcjoge1xyXG4gICAgbGluZTogJ+ihjCcsXHJcbiAgICBjb2x1bW5zOiAn5YiXJyxcclxuICAgIGxlbmd0aDogJ+aAu+mVv+W6pidcclxuICB9XHJcbn1cclxuXHJcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGh0bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2VyczogeydhcmVhJzogdHJ1ZSwgJ2Jhc2UnOiB0cnVlLCAnYnInOiB0cnVlLCAnY29sJzogdHJ1ZSwgJ2NvbW1hbmQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnZW1iZWQnOiB0cnVlLCAnZnJhbWUnOiB0cnVlLCAnaHInOiB0cnVlLCAnaW1nJzogdHJ1ZSwgJ2lucHV0JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2tleWdlbic6IHRydWUsICdsaW5rJzogdHJ1ZSwgJ21ldGEnOiB0cnVlLCAncGFyYW0nOiB0cnVlLCAnc291cmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYWNrJzogdHJ1ZSwgJ3dicic6IHRydWUsICdtZW51aXRlbSc6IHRydWV9LFxuICBpbXBsaWNpdGx5Q2xvc2VkOiB7J2RkJzogdHJ1ZSwgJ2xpJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZSwgJ29wdGlvbic6IHRydWUsICdwJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICdycCc6IHRydWUsICdydCc6IHRydWUsICd0Ym9keSc6IHRydWUsICd0ZCc6IHRydWUsICd0Zm9vdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAndGgnOiB0cnVlLCAndHInOiB0cnVlfSxcbiAgY29udGV4dEdyYWJiZXJzOiB7XG4gICAgJ2RkJzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LFxuICAgICdkdCc6IHsnZGQnOiB0cnVlLCAnZHQnOiB0cnVlfSxcbiAgICAnbGknOiB7J2xpJzogdHJ1ZX0sXG4gICAgJ29wdGlvbic6IHsnb3B0aW9uJzogdHJ1ZSwgJ29wdGdyb3VwJzogdHJ1ZX0sXG4gICAgJ29wdGdyb3VwJzogeydvcHRncm91cCc6IHRydWV9LFxuICAgICdwJzogeydhZGRyZXNzJzogdHJ1ZSwgJ2FydGljbGUnOiB0cnVlLCAnYXNpZGUnOiB0cnVlLCAnYmxvY2txdW90ZSc6IHRydWUsICdkaXInOiB0cnVlLFxuICAgICAgICAgICdkaXYnOiB0cnVlLCAnZGwnOiB0cnVlLCAnZmllbGRzZXQnOiB0cnVlLCAnZm9vdGVyJzogdHJ1ZSwgJ2Zvcm0nOiB0cnVlLFxuICAgICAgICAgICdoMSc6IHRydWUsICdoMic6IHRydWUsICdoMyc6IHRydWUsICdoNCc6IHRydWUsICdoNSc6IHRydWUsICdoNic6IHRydWUsXG4gICAgICAgICAgJ2hlYWRlcic6IHRydWUsICdoZ3JvdXAnOiB0cnVlLCAnaHInOiB0cnVlLCAnbWVudSc6IHRydWUsICduYXYnOiB0cnVlLCAnb2wnOiB0cnVlLFxuICAgICAgICAgICdwJzogdHJ1ZSwgJ3ByZSc6IHRydWUsICdzZWN0aW9uJzogdHJ1ZSwgJ3RhYmxlJzogdHJ1ZSwgJ3VsJzogdHJ1ZX0sXG4gICAgJ3JwJzogeydycCc6IHRydWUsICdydCc6IHRydWV9LFxuICAgICdydCc6IHsncnAnOiB0cnVlLCAncnQnOiB0cnVlfSxcbiAgICAndGJvZHknOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sXG4gICAgJ3RkJzogeyd0ZCc6IHRydWUsICd0aCc6IHRydWV9LFxuICAgICd0Zm9vdCc6IHsndGJvZHknOiB0cnVlfSxcbiAgICAndGgnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sXG4gICAgJ3RoZWFkJzogeyd0Ym9keSc6IHRydWUsICd0Zm9vdCc6IHRydWV9LFxuICAgICd0cic6IHsndHInOiB0cnVlfVxuICB9LFxuICBkb05vdEluZGVudDoge1wicHJlXCI6IHRydWV9LFxuICBhbGxvd1VucXVvdGVkOiB0cnVlLFxuICBhbGxvd01pc3Npbmc6IHRydWUsXG4gIGNhc2VGb2xkOiB0cnVlXG59XG5cbnZhciB4bWxDb25maWcgPSB7XG4gIGF1dG9TZWxmQ2xvc2Vyczoge30sXG4gIGltcGxpY2l0bHlDbG9zZWQ6IHt9LFxuICBjb250ZXh0R3JhYmJlcnM6IHt9LFxuICBkb05vdEluZGVudDoge30sXG4gIGFsbG93VW5xdW90ZWQ6IGZhbHNlLFxuICBhbGxvd01pc3Npbmc6IGZhbHNlLFxuICBhbGxvd01pc3NpbmdUYWdOYW1lOiBmYWxzZSxcbiAgY2FzZUZvbGQ6IGZhbHNlXG59XG5cbkNvZGVNaXJyb3IuZGVmaW5lTW9kZShcInhtbFwiLCBmdW5jdGlvbihlZGl0b3JDb25mLCBjb25maWdfKSB7XG4gIHZhciBpbmRlbnRVbml0ID0gZWRpdG9yQ29uZi5pbmRlbnRVbml0XG4gIHZhciBjb25maWcgPSB7fVxuICB2YXIgZGVmYXVsdHMgPSBjb25maWdfLmh0bWxNb2RlID8gaHRtbENvbmZpZyA6IHhtbENvbmZpZ1xuICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSBjb25maWdbcHJvcF0gPSBkZWZhdWx0c1twcm9wXVxuICBmb3IgKHZhciBwcm9wIGluIGNvbmZpZ18pIGNvbmZpZ1twcm9wXSA9IGNvbmZpZ19bcHJvcF1cblxuICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzXG4gIHZhciB0eXBlLCBzZXRTdHlsZTtcblxuICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGZ1bmN0aW9uIGNoYWluKHBhcnNlcikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7XG4gICAgICByZXR1cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG4gICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiFcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJbXCIpKSB7XG4gICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChcIkNEQVRBW1wiKSkgcmV0dXJuIGNoYWluKGluQmxvY2soXCJhdG9tXCIsIFwiXV0+XCIpKTtcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIi0tXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYWluKGluQmxvY2soXCJjb21tZW50XCIsIFwiLS0+XCIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goXCJET0NUWVBFXCIsIHRydWUsIHRydWUpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oZG9jdHlwZSgxKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIj9cIikpIHtcbiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuX1xcLV0vKTtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkJsb2NrKFwibWV0YVwiLCBcIj8+XCIpO1xuICAgICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gc3RyZWFtLmVhdChcIi9cIikgPyBcImNsb3NlVGFnXCIgOiBcIm9wZW5UYWdcIjtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZztcbiAgICAgICAgcmV0dXJuIFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09IFwiJlwiKSB7XG4gICAgICB2YXIgb2s7XG4gICAgICBpZiAoc3RyZWFtLmVhdChcIiNcIikpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCJ4XCIpKSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1thLWZBLUZcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcXGRdLykgJiYgc3RyZWFtLmVhdChcIjtcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bXFx3XFwuXFwtOl0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvayA/IFwiYXRvbVwiIDogXCJlcnJvclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgaW5UZXh0LmlzSW5UZXh0ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCI+XCIgfHwgKGNoID09IFwiL1wiICYmIHN0cmVhbS5lYXQoXCI+XCIpKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICB0eXBlID0gY2ggPT0gXCI+XCIgPyBcImVuZFRhZ1wiIDogXCJzZWxmY2xvc2VUYWdcIjtcbiAgICAgIHJldHVybiBcInRhZyBicmFja2V0XCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIj1cIikge1xuICAgICAgdHlwZSA9IFwiZXF1YWxzXCI7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIHN0YXRlLnN0YXRlID0gYmFzZVN0YXRlO1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0YXRlLnRhZ1N0YXJ0ID0gbnVsbDtcbiAgICAgIHZhciBuZXh0ID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICByZXR1cm4gbmV4dCA/IG5leHQgKyBcIiB0YWcgZXJyb3JcIiA6IFwidGFnIGVycm9yXCI7XG4gICAgfSBlbHNlIGlmICgvW1xcJ1xcXCJdLy50ZXN0KGNoKSkge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7XG4gICAgICBzdGF0ZS5zdHJpbmdTdGFydENvbCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyZWFtLm1hdGNoKC9eW15cXHNcXHUwMGEwPTw+XFxcIlxcJ10qW15cXHNcXHUwMGEwPTw+XFxcIlxcJ1xcL10vKTtcbiAgICAgIHJldHVybiBcIndvcmRcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkge1xuICAgIHZhciBjbG9zdXJlID0gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICB9O1xuICAgIGNsb3N1cmUuaXNJbkF0dHJpYnV0ZSA9IHRydWU7XG4gICAgcmV0dXJuIGNsb3N1cmU7XG4gIH1cblxuICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGNoO1xuICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoID09IFwiPFwiKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoICsgMSk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09IFwiPlwiKSB7XG4gICAgICAgICAgaWYgKGRlcHRoID09IDEpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gZG9jdHlwZShkZXB0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwibWV0YVwiO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCBzdGFydE9mTGluZSkge1xuICAgIHRoaXMucHJldiA9IHN0YXRlLmNvbnRleHQ7XG4gICAgdGhpcy50YWdOYW1lID0gdGFnTmFtZTtcbiAgICB0aGlzLmluZGVudCA9IHN0YXRlLmluZGVudGVkO1xuICAgIHRoaXMuc3RhcnRPZkxpbmUgPSBzdGFydE9mTGluZTtcbiAgICBpZiAoY29uZmlnLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQubm9JbmRlbnQpKVxuICAgICAgdGhpcy5ub0luZGVudCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgbmV4dFRhZ05hbWUpIHtcbiAgICB2YXIgcGFyZW50VGFnTmFtZTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCFzdGF0ZS5jb250ZXh0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBhcmVudFRhZ05hbWUgPSBzdGF0ZS5jb250ZXh0LnRhZ05hbWU7XG4gICAgICBpZiAoIWNvbmZpZy5jb250ZXh0R3JhYmJlcnMuaGFzT3duUHJvcGVydHkocGFyZW50VGFnTmFtZSkgfHxcbiAgICAgICAgICAhY29uZmlnLmNvbnRleHRHcmFiYmVyc1twYXJlbnRUYWdOYW1lXS5oYXNPd25Qcm9wZXJ0eShuZXh0VGFnTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmFzZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIm9wZW5UYWdcIikge1xuICAgICAgc3RhdGUudGFnU3RhcnQgPSBzdHJlYW0uY29sdW1uKCk7XG4gICAgICByZXR1cm4gdGFnTmFtZVN0YXRlO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImNsb3NlVGFnXCIpIHtcbiAgICAgIHJldHVybiBjbG9zZVRhZ05hbWVTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdGFnTmFtZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIikge1xuICAgICAgc3RhdGUudGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICByZXR1cm4gYXR0clN0YXRlO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93TWlzc2luZ1RhZ05hbWUgJiYgdHlwZSA9PSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIHJldHVybiBhdHRyU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgICAgcmV0dXJuIHRhZ05hbWVTdGF0ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gY2xvc2VUYWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0cmVhbS5jdXJyZW50KCk7XG4gICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZSAmJlxuICAgICAgICAgIGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KHN0YXRlLmNvbnRleHQudGFnTmFtZSkpXG4gICAgICAgIHBvcENvbnRleHQoc3RhdGUpO1xuICAgICAgaWYgKChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSA9PSB0YWdOYW1lKSB8fCBjb25maWcubWF0Y2hDbG9zaW5nID09PSBmYWxzZSkge1xuICAgICAgICBzZXRTdHlsZSA9IFwidGFnXCI7XG4gICAgICAgIHJldHVybiBjbG9zZVN0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U3R5bGUgPSBcInRhZyBlcnJvclwiO1xuICAgICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5hbGxvd01pc3NpbmdUYWdOYW1lICYmIHR5cGUgPT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcInRhZyBicmFja2V0XCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZUVycjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJlbmRUYWdcIikge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gY2xvc2VTdGF0ZTtcbiAgICB9XG4gICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBjbG9zZVN0YXRlRXJyKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gY2xvc2VTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJTdGF0ZSh0eXBlLCBfc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwiYXR0cmlidXRlXCI7XG4gICAgICByZXR1cm4gYXR0ckVxU3RhdGU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZW5kVGFnXCIgfHwgdHlwZSA9PSBcInNlbGZjbG9zZVRhZ1wiKSB7XG4gICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLnRhZ05hbWUsIHRhZ1N0YXJ0ID0gc3RhdGUudGFnU3RhcnQ7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsO1xuICAgICAgaWYgKHR5cGUgPT0gXCJzZWxmY2xvc2VUYWdcIiB8fFxuICAgICAgICAgIGNvbmZpZy5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkpIHtcbiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heWJlUG9wQ29udGV4dChzdGF0ZSwgdGFnTmFtZSk7XG4gICAgICAgIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZSwgdGFnTmFtZSwgdGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTdGF0ZTtcbiAgICB9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyRXFTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJlcXVhbHNcIikgcmV0dXJuIGF0dHJWYWx1ZVN0YXRlO1xuICAgIGlmICghY29uZmlnLmFsbG93TWlzc2luZykgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyVmFsdWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTtcbiAgICBpZiAodHlwZSA9PSBcIndvcmRcIiAmJiBjb25maWcuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gXCJzdHJpbmdcIjsgcmV0dXJuIGF0dHJTdGF0ZTt9XG4gICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBhdHRyQ29udGludWVkU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIpIHJldHVybiBhdHRyQ29udGludWVkU3RhdGU7XG4gICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZUluZGVudCkge1xuICAgICAgdmFyIHN0YXRlID0ge3Rva2VuaXplOiBpblRleHQsXG4gICAgICAgICAgICAgICAgICAgc3RhdGU6IGJhc2VTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICBpbmRlbnRlZDogYmFzZUluZGVudCB8fCAwLFxuICAgICAgICAgICAgICAgICAgIHRhZ05hbWU6IG51bGwsIHRhZ1N0YXJ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGx9XG4gICAgICBpZiAoYmFzZUluZGVudCAhPSBudWxsKSBzdGF0ZS5iYXNlSW5kZW50ID0gYmFzZUluZGVudFxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBpZiAoIXN0YXRlLnRhZ05hbWUgJiYgc3RyZWFtLnNvbCgpKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuXG4gICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsO1xuICAgICAgdHlwZSA9IG51bGw7XG4gICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gXCJjb21tZW50XCIpIHtcbiAgICAgICAgc2V0U3R5bGUgPSBudWxsO1xuICAgICAgICBzdGF0ZS5zdGF0ZSA9IHN0YXRlLnN0YXRlKHR5cGUgfHwgc3R5bGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgICAgICBpZiAoc2V0U3R5bGUpXG4gICAgICAgICAgc3R5bGUgPSBzZXRTdHlsZSA9PSBcImVycm9yXCIgPyBzdHlsZSArIFwiIGVycm9yXCIgOiBzZXRTdHlsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuXG4gICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgICAgLy8gSW5kZW50IG11bHRpLWxpbmUgc3RyaW5ncyAoZS5nLiBjc3MpLlxuICAgICAgaWYgKHN0YXRlLnRva2VuaXplLmlzSW5BdHRyaWJ1dGUpIHtcbiAgICAgICAgaWYgKHN0YXRlLnRhZ1N0YXJ0ID09IHN0YXRlLmluZGVudGVkKVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5zdHJpbmdTdGFydENvbCArIDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50ZWQgKyBpbmRlbnRVbml0O1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBpblRhZyAmJiBzdGF0ZS50b2tlbml6ZSAhPSBpblRleHQpXG4gICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxccyopLylbMF0ubGVuZ3RoIDogMDtcbiAgICAgIC8vIEluZGVudCB0aGUgc3RhcnRzIG9mIGF0dHJpYnV0ZSBuYW1lcy5cbiAgICAgIGlmIChzdGF0ZS50YWdOYW1lKSB7XG4gICAgICAgIGlmIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50UGFzdFRhZyAhPT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgc3RhdGUudGFnTmFtZS5sZW5ndGggKyAyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnRhZ1N0YXJ0ICsgaW5kZW50VW5pdCAqIChjb25maWcubXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIHx8IDEpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5hbGlnbkNEQVRBICYmIC88IVxcW0NEQVRBXFxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwO1xuICAgICAgdmFyIHRhZ0FmdGVyID0gdGV4dEFmdGVyICYmIC9ePChcXC8pPyhbXFx3XzpcXC4tXSopLy5leGVjKHRleHRBZnRlcik7XG4gICAgICBpZiAodGFnQWZ0ZXIgJiYgdGFnQWZ0ZXJbMV0pIHsgLy8gQ2xvc2luZyB0YWcgc3BvdHRlZFxuICAgICAgICB3aGlsZSAoY29udGV4dCkge1xuICAgICAgICAgIGlmIChjb250ZXh0LnRhZ05hbWUgPT0gdGFnQWZ0ZXJbMl0pIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5pbXBsaWNpdGx5Q2xvc2VkLmhhc093blByb3BlcnR5KGNvbnRleHQudGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdBZnRlcikgeyAvLyBPcGVuaW5nIHRhZyBzcG90dGVkXG4gICAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgICAgdmFyIGdyYWJiZXJzID0gY29uZmlnLmNvbnRleHRHcmFiYmVyc1tjb250ZXh0LnRhZ05hbWVdO1xuICAgICAgICAgIGlmIChncmFiYmVycyAmJiBncmFiYmVycy5oYXNPd25Qcm9wZXJ0eSh0YWdBZnRlclsyXSkpXG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5wcmV2O1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoY29udGV4dCAmJiBjb250ZXh0LnByZXYgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICBpZiAoY29udGV4dCkgcmV0dXJuIGNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgfHwgMDtcbiAgICB9LFxuXG4gICAgZWxlY3RyaWNJbnB1dDogLzxcXC9bXFxzXFx3Ol0rPiQvLFxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIjwhLS1cIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiLS0+XCIsXG5cbiAgICBjb25maWd1cmF0aW9uOiBjb25maWcuaHRtbE1vZGUgPyBcImh0bWxcIiA6IFwieG1sXCIsXG4gICAgaGVscGVyVHlwZTogY29uZmlnLmh0bWxNb2RlID8gXCJodG1sXCIgOiBcInhtbFwiLFxuXG4gICAgc2tpcEF0dHJpYnV0ZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSA9PSBhdHRyVmFsdWVTdGF0ZSlcbiAgICAgICAgc3RhdGUuc3RhdGUgPSBhdHRyU3RhdGVcbiAgICB9LFxuXG4gICAgeG1sQ3VycmVudFRhZzogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHJldHVybiBzdGF0ZS50YWdOYW1lID8ge25hbWU6IHN0YXRlLnRhZ05hbWUsIGNsb3NlOiBzdGF0ZS50eXBlID09IFwiY2xvc2VUYWdcIn0gOiBudWxsXG4gICAgfSxcblxuICAgIHhtbEN1cnJlbnRDb250ZXh0OiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgdmFyIGNvbnRleHQgPSBbXVxuICAgICAgZm9yICh2YXIgY3ggPSBzdGF0ZS5jb250ZXh0OyBjeDsgY3ggPSBjeC5wcmV2KVxuICAgICAgICBpZiAoY3gudGFnTmFtZSkgY29udGV4dC5wdXNoKGN4LnRhZ05hbWUpXG4gICAgICByZXR1cm4gY29udGV4dC5yZXZlcnNlKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC94bWxcIiwgXCJ4bWxcIik7XG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ4bWxcIik7XG5pZiAoIUNvZGVNaXJyb3IubWltZU1vZGVzLmhhc093blByb3BlcnR5KFwidGV4dC9odG1sXCIpKVxuICBDb2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2h0bWxcIiwge25hbWU6IFwieG1sXCIsIGh0bWxNb2RlOiB0cnVlfSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5tb2RlSW5mbyA9IFtcbiAgICB7bmFtZTogXCJBUExcIiwgbWltZTogXCJ0ZXh0L2FwbFwiLCBtb2RlOiBcImFwbFwiLCBleHQ6IFtcImR5YWxvZ1wiLCBcImFwbFwiXX0sXG4gICAge25hbWU6IFwiUEdQXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi9wZ3BcIiwgXCJhcHBsaWNhdGlvbi9wZ3AtZW5jcnlwdGVkXCIsIFwiYXBwbGljYXRpb24vcGdwLWtleXNcIiwgXCJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlXCJdLCBtb2RlOiBcImFzY2lpYXJtb3JcIiwgZXh0OiBbXCJhc2NcIiwgXCJwZ3BcIiwgXCJzaWdcIl19LFxuICAgIHtuYW1lOiBcIkFTTi4xXCIsIG1pbWU6IFwidGV4dC94LXR0Y24tYXNuXCIsIG1vZGU6IFwiYXNuLjFcIiwgZXh0OiBbXCJhc25cIiwgXCJhc24xXCJdfSxcbiAgICB7bmFtZTogXCJBc3Rlcmlza1wiLCBtaW1lOiBcInRleHQveC1hc3Rlcmlza1wiLCBtb2RlOiBcImFzdGVyaXNrXCIsIGZpbGU6IC9eZXh0ZW5zaW9uc1xcLmNvbmYkL2l9LFxuICAgIHtuYW1lOiBcIkJyYWluZnVja1wiLCBtaW1lOiBcInRleHQveC1icmFpbmZ1Y2tcIiwgbW9kZTogXCJicmFpbmZ1Y2tcIiwgZXh0OiBbXCJiXCIsIFwiYmZcIl19LFxuICAgIHtuYW1lOiBcIkNcIiwgbWltZTogXCJ0ZXh0L3gtY3NyY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY1wiLCBcImhcIiwgXCJpbm9cIl19LFxuICAgIHtuYW1lOiBcIkMrK1wiLCBtaW1lOiBcInRleHQveC1jKytzcmNcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImNwcFwiLCBcImMrK1wiLCBcImNjXCIsIFwiY3h4XCIsIFwiaHBwXCIsIFwiaCsrXCIsIFwiaGhcIiwgXCJoeHhcIl0sIGFsaWFzOiBbXCJjcHBcIl19LFxuICAgIHtuYW1lOiBcIkNvYm9sXCIsIG1pbWU6IFwidGV4dC94LWNvYm9sXCIsIG1vZGU6IFwiY29ib2xcIiwgZXh0OiBbXCJjb2JcIiwgXCJjcHlcIl19LFxuICAgIHtuYW1lOiBcIkMjXCIsIG1pbWU6IFwidGV4dC94LWNzaGFycFwiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY3NcIl0sIGFsaWFzOiBbXCJjc2hhcnBcIiwgXCJjc1wiXX0sXG4gICAge25hbWU6IFwiQ2xvanVyZVwiLCBtaW1lOiBcInRleHQveC1jbG9qdXJlXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImNsalwiLCBcImNsamNcIiwgXCJjbGp4XCJdfSxcbiAgICB7bmFtZTogXCJDbG9qdXJlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWNsb2p1cmVzY3JpcHRcIiwgbW9kZTogXCJjbG9qdXJlXCIsIGV4dDogW1wiY2xqc1wiXX0sXG4gICAge25hbWU6IFwiQ2xvc3VyZSBTdHlsZXNoZWV0cyAoR1NTKVwiLCBtaW1lOiBcInRleHQveC1nc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJnc3NcIl19LFxuICAgIHtuYW1lOiBcIkNNYWtlXCIsIG1pbWU6IFwidGV4dC94LWNtYWtlXCIsIG1vZGU6IFwiY21ha2VcIiwgZXh0OiBbXCJjbWFrZVwiLCBcImNtYWtlLmluXCJdLCBmaWxlOiAvXkNNYWtlTGlzdHMudHh0JC99LFxuICAgIHtuYW1lOiBcIkNvZmZlZVNjcmlwdFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiLCBcInRleHQvY29mZmVlc2NyaXB0XCIsIFwidGV4dC94LWNvZmZlZXNjcmlwdFwiXSwgbW9kZTogXCJjb2ZmZWVzY3JpcHRcIiwgZXh0OiBbXCJjb2ZmZWVcIl0sIGFsaWFzOiBbXCJjb2ZmZWVcIiwgXCJjb2ZmZWUtc2NyaXB0XCJdfSxcbiAgICB7bmFtZTogXCJDb21tb24gTGlzcFwiLCBtaW1lOiBcInRleHQveC1jb21tb24tbGlzcFwiLCBtb2RlOiBcImNvbW1vbmxpc3BcIiwgZXh0OiBbXCJjbFwiLCBcImxpc3BcIiwgXCJlbFwiXSwgYWxpYXM6IFtcImxpc3BcIl19LFxuICAgIHtuYW1lOiBcIkN5cGhlclwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtY3lwaGVyLXF1ZXJ5XCIsIG1vZGU6IFwiY3lwaGVyXCIsIGV4dDogW1wiY3lwXCIsIFwiY3lwaGVyXCJdfSxcbiAgICB7bmFtZTogXCJDeXRob25cIiwgbWltZTogXCJ0ZXh0L3gtY3l0aG9uXCIsIG1vZGU6IFwicHl0aG9uXCIsIGV4dDogW1wicHl4XCIsIFwicHhkXCIsIFwicHhpXCJdfSxcbiAgICB7bmFtZTogXCJDcnlzdGFsXCIsIG1pbWU6IFwidGV4dC94LWNyeXN0YWxcIiwgbW9kZTogXCJjcnlzdGFsXCIsIGV4dDogW1wiY3JcIl19LFxuICAgIHtuYW1lOiBcIkNTU1wiLCBtaW1lOiBcInRleHQvY3NzXCIsIG1vZGU6IFwiY3NzXCIsIGV4dDogW1wiY3NzXCJdfSxcbiAgICB7bmFtZTogXCJDUUxcIiwgbWltZTogXCJ0ZXh0L3gtY2Fzc2FuZHJhXCIsIG1vZGU6IFwic3FsXCIsIGV4dDogW1wiY3FsXCJdfSxcbiAgICB7bmFtZTogXCJEXCIsIG1pbWU6IFwidGV4dC94LWRcIiwgbW9kZTogXCJkXCIsIGV4dDogW1wiZFwiXX0sXG4gICAge25hbWU6IFwiRGFydFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vZGFydFwiLCBcInRleHQveC1kYXJ0XCJdLCBtb2RlOiBcImRhcnRcIiwgZXh0OiBbXCJkYXJ0XCJdfSxcbiAgICB7bmFtZTogXCJkaWZmXCIsIG1pbWU6IFwidGV4dC94LWRpZmZcIiwgbW9kZTogXCJkaWZmXCIsIGV4dDogW1wiZGlmZlwiLCBcInBhdGNoXCJdfSxcbiAgICB7bmFtZTogXCJEamFuZ29cIiwgbWltZTogXCJ0ZXh0L3gtZGphbmdvXCIsIG1vZGU6IFwiZGphbmdvXCJ9LFxuICAgIHtuYW1lOiBcIkRvY2tlcmZpbGVcIiwgbWltZTogXCJ0ZXh0L3gtZG9ja2VyZmlsZVwiLCBtb2RlOiBcImRvY2tlcmZpbGVcIiwgZmlsZTogL15Eb2NrZXJmaWxlJC99LFxuICAgIHtuYW1lOiBcIkRURFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3htbC1kdGRcIiwgbW9kZTogXCJkdGRcIiwgZXh0OiBbXCJkdGRcIl19LFxuICAgIHtuYW1lOiBcIkR5bGFuXCIsIG1pbWU6IFwidGV4dC94LWR5bGFuXCIsIG1vZGU6IFwiZHlsYW5cIiwgZXh0OiBbXCJkeWxhblwiLCBcImR5bFwiLCBcImludHJcIl19LFxuICAgIHtuYW1lOiBcIkVCTkZcIiwgbWltZTogXCJ0ZXh0L3gtZWJuZlwiLCBtb2RlOiBcImVibmZcIn0sXG4gICAge25hbWU6IFwiRUNMXCIsIG1pbWU6IFwidGV4dC94LWVjbFwiLCBtb2RlOiBcImVjbFwiLCBleHQ6IFtcImVjbFwiXX0sXG4gICAge25hbWU6IFwiZWRuXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vZWRuXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImVkblwiXX0sXG4gICAge25hbWU6IFwiRWlmZmVsXCIsIG1pbWU6IFwidGV4dC94LWVpZmZlbFwiLCBtb2RlOiBcImVpZmZlbFwiLCBleHQ6IFtcImVcIl19LFxuICAgIHtuYW1lOiBcIkVsbVwiLCBtaW1lOiBcInRleHQveC1lbG1cIiwgbW9kZTogXCJlbG1cIiwgZXh0OiBbXCJlbG1cIl19LFxuICAgIHtuYW1lOiBcIkVtYmVkZGVkIEphdmFzY3JpcHRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWVqc1wiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImVqc1wiXX0sXG4gICAge25hbWU6IFwiRW1iZWRkZWQgUnVieVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtZXJiXCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wiZXJiXCJdfSxcbiAgICB7bmFtZTogXCJFcmxhbmdcIiwgbWltZTogXCJ0ZXh0L3gtZXJsYW5nXCIsIG1vZGU6IFwiZXJsYW5nXCIsIGV4dDogW1wiZXJsXCJdfSxcbiAgICB7bmFtZTogXCJFc3BlclwiLCBtaW1lOiBcInRleHQveC1lc3BlclwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJGYWN0b3JcIiwgbWltZTogXCJ0ZXh0L3gtZmFjdG9yXCIsIG1vZGU6IFwiZmFjdG9yXCIsIGV4dDogW1wiZmFjdG9yXCJdfSxcbiAgICB7bmFtZTogXCJGQ0xcIiwgbWltZTogXCJ0ZXh0L3gtZmNsXCIsIG1vZGU6IFwiZmNsXCJ9LFxuICAgIHtuYW1lOiBcIkZvcnRoXCIsIG1pbWU6IFwidGV4dC94LWZvcnRoXCIsIG1vZGU6IFwiZm9ydGhcIiwgZXh0OiBbXCJmb3J0aFwiLCBcImZ0aFwiLCBcIjR0aFwiXX0sXG4gICAge25hbWU6IFwiRm9ydHJhblwiLCBtaW1lOiBcInRleHQveC1mb3J0cmFuXCIsIG1vZGU6IFwiZm9ydHJhblwiLCBleHQ6IFtcImZcIiwgXCJmb3JcIiwgXCJmNzdcIiwgXCJmOTBcIiwgXCJmOTVcIl19LFxuICAgIHtuYW1lOiBcIkYjXCIsIG1pbWU6IFwidGV4dC94LWZzaGFycFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcImZzXCJdLCBhbGlhczogW1wiZnNoYXJwXCJdfSxcbiAgICB7bmFtZTogXCJHYXNcIiwgbWltZTogXCJ0ZXh0L3gtZ2FzXCIsIG1vZGU6IFwiZ2FzXCIsIGV4dDogW1wic1wiXX0sXG4gICAge25hbWU6IFwiR2hlcmtpblwiLCBtaW1lOiBcInRleHQveC1mZWF0dXJlXCIsIG1vZGU6IFwiZ2hlcmtpblwiLCBleHQ6IFtcImZlYXR1cmVcIl19LFxuICAgIHtuYW1lOiBcIkdpdEh1YiBGbGF2b3JlZCBNYXJrZG93blwiLCBtaW1lOiBcInRleHQveC1nZm1cIiwgbW9kZTogXCJnZm1cIiwgZmlsZTogL14ocmVhZG1lfGNvbnRyaWJ1dGluZ3xoaXN0b3J5KS5tZCQvaX0sXG4gICAge25hbWU6IFwiR29cIiwgbWltZTogXCJ0ZXh0L3gtZ29cIiwgbW9kZTogXCJnb1wiLCBleHQ6IFtcImdvXCJdfSxcbiAgICB7bmFtZTogXCJHcm9vdnlcIiwgbWltZTogXCJ0ZXh0L3gtZ3Jvb3Z5XCIsIG1vZGU6IFwiZ3Jvb3Z5XCIsIGV4dDogW1wiZ3Jvb3Z5XCIsIFwiZ3JhZGxlXCJdLCBmaWxlOiAvXkplbmtpbnNmaWxlJC99LFxuICAgIHtuYW1lOiBcIkhBTUxcIiwgbWltZTogXCJ0ZXh0L3gtaGFtbFwiLCBtb2RlOiBcImhhbWxcIiwgZXh0OiBbXCJoYW1sXCJdfSxcbiAgICB7bmFtZTogXCJIYXNrZWxsXCIsIG1pbWU6IFwidGV4dC94LWhhc2tlbGxcIiwgbW9kZTogXCJoYXNrZWxsXCIsIGV4dDogW1wiaHNcIl19LFxuICAgIHtuYW1lOiBcIkhhc2tlbGwgKExpdGVyYXRlKVwiLCBtaW1lOiBcInRleHQveC1saXRlcmF0ZS1oYXNrZWxsXCIsIG1vZGU6IFwiaGFza2VsbC1saXRlcmF0ZVwiLCBleHQ6IFtcImxoc1wiXX0sXG4gICAge25hbWU6IFwiSGF4ZVwiLCBtaW1lOiBcInRleHQveC1oYXhlXCIsIG1vZGU6IFwiaGF4ZVwiLCBleHQ6IFtcImh4XCJdfSxcbiAgICB7bmFtZTogXCJIWE1MXCIsIG1pbWU6IFwidGV4dC94LWh4bWxcIiwgbW9kZTogXCJoYXhlXCIsIGV4dDogW1wiaHhtbFwiXX0sXG4gICAge25hbWU6IFwiQVNQLk5FVFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtYXNweFwiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImFzcHhcIl0sIGFsaWFzOiBbXCJhc3BcIiwgXCJhc3B4XCJdfSxcbiAgICB7bmFtZTogXCJIVE1MXCIsIG1pbWU6IFwidGV4dC9odG1sXCIsIG1vZGU6IFwiaHRtbG1peGVkXCIsIGV4dDogW1wiaHRtbFwiLCBcImh0bVwiLCBcImhhbmRsZWJhcnNcIiwgXCJoYnNcIl0sIGFsaWFzOiBbXCJ4aHRtbFwiXX0sXG4gICAge25hbWU6IFwiSFRUUFwiLCBtaW1lOiBcIm1lc3NhZ2UvaHR0cFwiLCBtb2RlOiBcImh0dHBcIn0sXG4gICAge25hbWU6IFwiSURMXCIsIG1pbWU6IFwidGV4dC94LWlkbFwiLCBtb2RlOiBcImlkbFwiLCBleHQ6IFtcInByb1wiXX0sXG4gICAge25hbWU6IFwiUHVnXCIsIG1pbWU6IFwidGV4dC94LXB1Z1wiLCBtb2RlOiBcInB1Z1wiLCBleHQ6IFtcImphZGVcIiwgXCJwdWdcIl0sIGFsaWFzOiBbXCJqYWRlXCJdfSxcbiAgICB7bmFtZTogXCJKYXZhXCIsIG1pbWU6IFwidGV4dC94LWphdmFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImphdmFcIl19LFxuICAgIHtuYW1lOiBcIkphdmEgU2VydmVyIFBhZ2VzXCIsIG1pbWU6IFwiYXBwbGljYXRpb24veC1qc3BcIiwgbW9kZTogXCJodG1sZW1iZWRkZWRcIiwgZXh0OiBbXCJqc3BcIl0sIGFsaWFzOiBbXCJqc3BcIl19LFxuICAgIHtuYW1lOiBcIkphdmFTY3JpcHRcIiwgbWltZXM6IFtcInRleHQvamF2YXNjcmlwdFwiLCBcInRleHQvZWNtYXNjcmlwdFwiLCBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCJdLFxuICAgICBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJqc1wiXSwgYWxpYXM6IFtcImVjbWFzY3JpcHRcIiwgXCJqc1wiLCBcIm5vZGVcIl19LFxuICAgIHtuYW1lOiBcIkpTT05cIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJhcHBsaWNhdGlvbi94LWpzb25cIl0sIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzb25cIiwgXCJtYXBcIl0sIGFsaWFzOiBbXCJqc29uNVwiXX0sXG4gICAge25hbWU6IFwiSlNPTi1MRFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1wianNvbmxkXCJdLCBhbGlhczogW1wianNvbmxkXCJdfSxcbiAgICB7bmFtZTogXCJKU1hcIiwgbWltZTogXCJ0ZXh0L2pzeFwiLCBtb2RlOiBcImpzeFwiLCBleHQ6IFtcImpzeFwiXX0sXG4gICAge25hbWU6IFwiSmluamEyXCIsIG1pbWU6IFwidGV4dC9qaW5qYTJcIiwgbW9kZTogXCJqaW5qYTJcIiwgZXh0OiBbXCJqMlwiLCBcImppbmphXCIsIFwiamluamEyXCJdfSxcbiAgICB7bmFtZTogXCJKdWxpYVwiLCBtaW1lOiBcInRleHQveC1qdWxpYVwiLCBtb2RlOiBcImp1bGlhXCIsIGV4dDogW1wiamxcIl19LFxuICAgIHtuYW1lOiBcIktvdGxpblwiLCBtaW1lOiBcInRleHQveC1rb3RsaW5cIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImt0XCJdfSxcbiAgICB7bmFtZTogXCJMRVNTXCIsIG1pbWU6IFwidGV4dC94LWxlc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJsZXNzXCJdfSxcbiAgICB7bmFtZTogXCJMaXZlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWxpdmVzY3JpcHRcIiwgbW9kZTogXCJsaXZlc2NyaXB0XCIsIGV4dDogW1wibHNcIl0sIGFsaWFzOiBbXCJsc1wiXX0sXG4gICAge25hbWU6IFwiTHVhXCIsIG1pbWU6IFwidGV4dC94LWx1YVwiLCBtb2RlOiBcImx1YVwiLCBleHQ6IFtcImx1YVwiXX0sXG4gICAge25hbWU6IFwiTWFya2Rvd25cIiwgbWltZTogXCJ0ZXh0L3gtbWFya2Rvd25cIiwgbW9kZTogXCJtYXJrZG93blwiLCBleHQ6IFtcIm1hcmtkb3duXCIsIFwibWRcIiwgXCJta2RcIl19LFxuICAgIHtuYW1lOiBcIm1JUkNcIiwgbWltZTogXCJ0ZXh0L21pcmNcIiwgbW9kZTogXCJtaXJjXCJ9LFxuICAgIHtuYW1lOiBcIk1hcmlhREIgU1FMXCIsIG1pbWU6IFwidGV4dC94LW1hcmlhZGJcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiTWF0aGVtYXRpY2FcIiwgbWltZTogXCJ0ZXh0L3gtbWF0aGVtYXRpY2FcIiwgbW9kZTogXCJtYXRoZW1hdGljYVwiLCBleHQ6IFtcIm1cIiwgXCJuYlwiLCBcIndsXCIsIFwid2xzXCJdfSxcbiAgICB7bmFtZTogXCJNb2RlbGljYVwiLCBtaW1lOiBcInRleHQveC1tb2RlbGljYVwiLCBtb2RlOiBcIm1vZGVsaWNhXCIsIGV4dDogW1wibW9cIl19LFxuICAgIHtuYW1lOiBcIk1VTVBTXCIsIG1pbWU6IFwidGV4dC94LW11bXBzXCIsIG1vZGU6IFwibXVtcHNcIiwgZXh0OiBbXCJtcHNcIl19LFxuICAgIHtuYW1lOiBcIk1TIFNRTFwiLCBtaW1lOiBcInRleHQveC1tc3NxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJtYm94XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vbWJveFwiLCBtb2RlOiBcIm1ib3hcIiwgZXh0OiBbXCJtYm94XCJdfSxcbiAgICB7bmFtZTogXCJNeVNRTFwiLCBtaW1lOiBcInRleHQveC1teXNxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJOZ2lueFwiLCBtaW1lOiBcInRleHQveC1uZ2lueC1jb25mXCIsIG1vZGU6IFwibmdpbnhcIiwgZmlsZTogL25naW54LipcXC5jb25mJC9pfSxcbiAgICB7bmFtZTogXCJOU0lTXCIsIG1pbWU6IFwidGV4dC94LW5zaXNcIiwgbW9kZTogXCJuc2lzXCIsIGV4dDogW1wibnNoXCIsIFwibnNpXCJdfSxcbiAgICB7bmFtZTogXCJOVHJpcGxlc1wiLCBtaW1lczogW1wiYXBwbGljYXRpb24vbi10cmlwbGVzXCIsIFwiYXBwbGljYXRpb24vbi1xdWFkc1wiLCBcInRleHQvbi10cmlwbGVzXCJdLFxuICAgICBtb2RlOiBcIm50cmlwbGVzXCIsIGV4dDogW1wibnRcIiwgXCJucVwiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUNcIiwgbWltZTogXCJ0ZXh0L3gtb2JqZWN0aXZlY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wibVwiXSwgYWxpYXM6IFtcIm9iamVjdGl2ZS1jXCIsIFwib2JqY1wiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUMrK1wiLCBtaW1lOiBcInRleHQveC1vYmplY3RpdmVjKytcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm1tXCJdLCBhbGlhczogW1wib2JqZWN0aXZlLWMrK1wiLCBcIm9iamMrK1wiXX0sXG4gICAge25hbWU6IFwiT0NhbWxcIiwgbWltZTogXCJ0ZXh0L3gtb2NhbWxcIiwgbW9kZTogXCJtbGxpa2VcIiwgZXh0OiBbXCJtbFwiLCBcIm1saVwiLCBcIm1sbFwiLCBcIm1seVwiXX0sXG4gICAge25hbWU6IFwiT2N0YXZlXCIsIG1pbWU6IFwidGV4dC94LW9jdGF2ZVwiLCBtb2RlOiBcIm9jdGF2ZVwiLCBleHQ6IFtcIm1cIl19LFxuICAgIHtuYW1lOiBcIk96XCIsIG1pbWU6IFwidGV4dC94LW96XCIsIG1vZGU6IFwib3pcIiwgZXh0OiBbXCJvelwiXX0sXG4gICAge25hbWU6IFwiUGFzY2FsXCIsIG1pbWU6IFwidGV4dC94LXBhc2NhbFwiLCBtb2RlOiBcInBhc2NhbFwiLCBleHQ6IFtcInBcIiwgXCJwYXNcIl19LFxuICAgIHtuYW1lOiBcIlBFRy5qc1wiLCBtaW1lOiBcIm51bGxcIiwgbW9kZTogXCJwZWdqc1wiLCBleHQ6IFtcImpzb25sZFwiXX0sXG4gICAge25hbWU6IFwiUGVybFwiLCBtaW1lOiBcInRleHQveC1wZXJsXCIsIG1vZGU6IFwicGVybFwiLCBleHQ6IFtcInBsXCIsIFwicG1cIl19LFxuICAgIHtuYW1lOiBcIlBIUFwiLCBtaW1lczogW1widGV4dC94LXBocFwiLCBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCIsIFwiYXBwbGljYXRpb24veC1odHRwZC1waHAtb3BlblwiXSwgbW9kZTogXCJwaHBcIiwgZXh0OiBbXCJwaHBcIiwgXCJwaHAzXCIsIFwicGhwNFwiLCBcInBocDVcIiwgXCJwaHA3XCIsIFwicGh0bWxcIl19LFxuICAgIHtuYW1lOiBcIlBpZ1wiLCBtaW1lOiBcInRleHQveC1waWdcIiwgbW9kZTogXCJwaWdcIiwgZXh0OiBbXCJwaWdcIl19LFxuICAgIHtuYW1lOiBcIlBsYWluIFRleHRcIiwgbWltZTogXCJ0ZXh0L3BsYWluXCIsIG1vZGU6IFwibnVsbFwiLCBleHQ6IFtcInR4dFwiLCBcInRleHRcIiwgXCJjb25mXCIsIFwiZGVmXCIsIFwibGlzdFwiLCBcImxvZ1wiXX0sXG4gICAge25hbWU6IFwiUExTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGxzcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJwbHNcIl19LFxuICAgIHtuYW1lOiBcIlBvc3RncmVTUUxcIiwgbWltZTogXCJ0ZXh0L3gtcGdzcWxcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiUG93ZXJTaGVsbFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtcG93ZXJzaGVsbFwiLCBtb2RlOiBcInBvd2Vyc2hlbGxcIiwgZXh0OiBbXCJwczFcIiwgXCJwc2QxXCIsIFwicHNtMVwiXX0sXG4gICAge25hbWU6IFwiUHJvcGVydGllcyBmaWxlc1wiLCBtaW1lOiBcInRleHQveC1wcm9wZXJ0aWVzXCIsIG1vZGU6IFwicHJvcGVydGllc1wiLCBleHQ6IFtcInByb3BlcnRpZXNcIiwgXCJpbmlcIiwgXCJpblwiXSwgYWxpYXM6IFtcImluaVwiLCBcInByb3BlcnRpZXNcIl19LFxuICAgIHtuYW1lOiBcIlByb3RvQnVmXCIsIG1pbWU6IFwidGV4dC94LXByb3RvYnVmXCIsIG1vZGU6IFwicHJvdG9idWZcIiwgZXh0OiBbXCJwcm90b1wiXX0sXG4gICAge25hbWU6IFwiUHl0aG9uXCIsIG1pbWU6IFwidGV4dC94LXB5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcIkJVSUxEXCIsIFwiYnpsXCIsIFwicHlcIiwgXCJweXdcIl0sIGZpbGU6IC9eKEJVQ0t8QlVJTEQpJC99LFxuICAgIHtuYW1lOiBcIlB1cHBldFwiLCBtaW1lOiBcInRleHQveC1wdXBwZXRcIiwgbW9kZTogXCJwdXBwZXRcIiwgZXh0OiBbXCJwcFwiXX0sXG4gICAge25hbWU6IFwiUVwiLCBtaW1lOiBcInRleHQveC1xXCIsIG1vZGU6IFwicVwiLCBleHQ6IFtcInFcIl19LFxuICAgIHtuYW1lOiBcIlJcIiwgbWltZTogXCJ0ZXh0L3gtcnNyY1wiLCBtb2RlOiBcInJcIiwgZXh0OiBbXCJyXCIsIFwiUlwiXSwgYWxpYXM6IFtcInJzY3JpcHRcIl19LFxuICAgIHtuYW1lOiBcInJlU3RydWN0dXJlZFRleHRcIiwgbWltZTogXCJ0ZXh0L3gtcnN0XCIsIG1vZGU6IFwicnN0XCIsIGV4dDogW1wicnN0XCJdLCBhbGlhczogW1wicnN0XCJdfSxcbiAgICB7bmFtZTogXCJSUE0gQ2hhbmdlc1wiLCBtaW1lOiBcInRleHQveC1ycG0tY2hhbmdlc1wiLCBtb2RlOiBcInJwbVwifSxcbiAgICB7bmFtZTogXCJSUE0gU3BlY1wiLCBtaW1lOiBcInRleHQveC1ycG0tc3BlY1wiLCBtb2RlOiBcInJwbVwiLCBleHQ6IFtcInNwZWNcIl19LFxuICAgIHtuYW1lOiBcIlJ1YnlcIiwgbWltZTogXCJ0ZXh0L3gtcnVieVwiLCBtb2RlOiBcInJ1YnlcIiwgZXh0OiBbXCJyYlwiXSwgYWxpYXM6IFtcImpydWJ5XCIsIFwibWFjcnVieVwiLCBcInJha2VcIiwgXCJyYlwiLCBcInJieFwiXX0sXG4gICAge25hbWU6IFwiUnVzdFwiLCBtaW1lOiBcInRleHQveC1ydXN0c3JjXCIsIG1vZGU6IFwicnVzdFwiLCBleHQ6IFtcInJzXCJdfSxcbiAgICB7bmFtZTogXCJTQVNcIiwgbWltZTogXCJ0ZXh0L3gtc2FzXCIsIG1vZGU6IFwic2FzXCIsIGV4dDogW1wic2FzXCJdfSxcbiAgICB7bmFtZTogXCJTYXNzXCIsIG1pbWU6IFwidGV4dC94LXNhc3NcIiwgbW9kZTogXCJzYXNzXCIsIGV4dDogW1wic2Fzc1wiXX0sXG4gICAge25hbWU6IFwiU2NhbGFcIiwgbWltZTogXCJ0ZXh0L3gtc2NhbGFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcInNjYWxhXCJdfSxcbiAgICB7bmFtZTogXCJTY2hlbWVcIiwgbWltZTogXCJ0ZXh0L3gtc2NoZW1lXCIsIG1vZGU6IFwic2NoZW1lXCIsIGV4dDogW1wic2NtXCIsIFwic3NcIl19LFxuICAgIHtuYW1lOiBcIlNDU1NcIiwgbWltZTogXCJ0ZXh0L3gtc2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcInNjc3NcIl19LFxuICAgIHtuYW1lOiBcIlNoZWxsXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2hcIiwgXCJhcHBsaWNhdGlvbi94LXNoXCJdLCBtb2RlOiBcInNoZWxsXCIsIGV4dDogW1wic2hcIiwgXCJrc2hcIiwgXCJiYXNoXCJdLCBhbGlhczogW1wiYmFzaFwiLCBcInNoXCIsIFwienNoXCJdLCBmaWxlOiAvXlBLR0JVSUxEJC99LFxuICAgIHtuYW1lOiBcIlNpZXZlXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vc2lldmVcIiwgbW9kZTogXCJzaWV2ZVwiLCBleHQ6IFtcInNpdlwiLCBcInNpZXZlXCJdfSxcbiAgICB7bmFtZTogXCJTbGltXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2xpbVwiLCBcImFwcGxpY2F0aW9uL3gtc2xpbVwiXSwgbW9kZTogXCJzbGltXCIsIGV4dDogW1wic2xpbVwiXX0sXG4gICAge25hbWU6IFwiU21hbGx0YWxrXCIsIG1pbWU6IFwidGV4dC94LXN0c3JjXCIsIG1vZGU6IFwic21hbGx0YWxrXCIsIGV4dDogW1wic3RcIl19LFxuICAgIHtuYW1lOiBcIlNtYXJ0eVwiLCBtaW1lOiBcInRleHQveC1zbWFydHlcIiwgbW9kZTogXCJzbWFydHlcIiwgZXh0OiBbXCJ0cGxcIl19LFxuICAgIHtuYW1lOiBcIlNvbHJcIiwgbWltZTogXCJ0ZXh0L3gtc29sclwiLCBtb2RlOiBcInNvbHJcIn0sXG4gICAge25hbWU6IFwiU01MXCIsIG1pbWU6IFwidGV4dC94LXNtbFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcInNtbFwiLCBcInNpZ1wiLCBcImZ1blwiLCBcInNtYWNrc3BlY1wiXX0sXG4gICAge25hbWU6IFwiU295XCIsIG1pbWU6IFwidGV4dC94LXNveVwiLCBtb2RlOiBcInNveVwiLCBleHQ6IFtcInNveVwiXSwgYWxpYXM6IFtcImNsb3N1cmUgdGVtcGxhdGVcIl19LFxuICAgIHtuYW1lOiBcIlNQQVJRTFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiLCBtb2RlOiBcInNwYXJxbFwiLCBleHQ6IFtcInJxXCIsIFwic3BhcnFsXCJdLCBhbGlhczogW1wic3BhcnVsXCJdfSxcbiAgICB7bmFtZTogXCJTcHJlYWRzaGVldFwiLCBtaW1lOiBcInRleHQveC1zcHJlYWRzaGVldFwiLCBtb2RlOiBcInNwcmVhZHNoZWV0XCIsIGFsaWFzOiBbXCJleGNlbFwiLCBcImZvcm11bGFcIl19LFxuICAgIHtuYW1lOiBcIlNRTFwiLCBtaW1lOiBcInRleHQveC1zcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJzcWxcIl19LFxuICAgIHtuYW1lOiBcIlNRTGl0ZVwiLCBtaW1lOiBcInRleHQveC1zcWxpdGVcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiU3F1aXJyZWxcIiwgbWltZTogXCJ0ZXh0L3gtc3F1aXJyZWxcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm51dFwiXX0sXG4gICAge25hbWU6IFwiU3R5bHVzXCIsIG1pbWU6IFwidGV4dC94LXN0eWxcIiwgbW9kZTogXCJzdHlsdXNcIiwgZXh0OiBbXCJzdHlsXCJdfSxcbiAgICB7bmFtZTogXCJTd2lmdFwiLCBtaW1lOiBcInRleHQveC1zd2lmdFwiLCBtb2RlOiBcInN3aWZ0XCIsIGV4dDogW1wic3dpZnRcIl19LFxuICAgIHtuYW1lOiBcInNUZVhcIiwgbWltZTogXCJ0ZXh0L3gtc3RleFwiLCBtb2RlOiBcInN0ZXhcIn0sXG4gICAge25hbWU6IFwiTGFUZVhcIiwgbWltZTogXCJ0ZXh0L3gtbGF0ZXhcIiwgbW9kZTogXCJzdGV4XCIsIGV4dDogW1widGV4dFwiLCBcImx0eFwiLCBcInRleFwiXSwgYWxpYXM6IFtcInRleFwiXX0sXG4gICAge25hbWU6IFwiU3lzdGVtVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC1zeXN0ZW12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIiwgXCJzdlwiLCBcInN2aFwiXX0sXG4gICAge25hbWU6IFwiVGNsXCIsIG1pbWU6IFwidGV4dC94LXRjbFwiLCBtb2RlOiBcInRjbFwiLCBleHQ6IFtcInRjbFwiXX0sXG4gICAge25hbWU6IFwiVGV4dGlsZVwiLCBtaW1lOiBcInRleHQveC10ZXh0aWxlXCIsIG1vZGU6IFwidGV4dGlsZVwiLCBleHQ6IFtcInRleHRpbGVcIl19LFxuICAgIHtuYW1lOiBcIlRpZGRseVdpa2kgXCIsIG1pbWU6IFwidGV4dC94LXRpZGRseXdpa2lcIiwgbW9kZTogXCJ0aWRkbHl3aWtpXCJ9LFxuICAgIHtuYW1lOiBcIlRpa2kgd2lraVwiLCBtaW1lOiBcInRleHQvdGlraVwiLCBtb2RlOiBcInRpa2lcIn0sXG4gICAge25hbWU6IFwiVE9NTFwiLCBtaW1lOiBcInRleHQveC10b21sXCIsIG1vZGU6IFwidG9tbFwiLCBleHQ6IFtcInRvbWxcIl19LFxuICAgIHtuYW1lOiBcIlRvcm5hZG9cIiwgbWltZTogXCJ0ZXh0L3gtdG9ybmFkb1wiLCBtb2RlOiBcInRvcm5hZG9cIn0sXG4gICAge25hbWU6IFwidHJvZmZcIiwgbWltZTogXCJ0ZXh0L3Ryb2ZmXCIsIG1vZGU6IFwidHJvZmZcIiwgZXh0OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05cIiwgbWltZTogXCJ0ZXh0L3gtdHRjblwiLCBtb2RlOiBcInR0Y25cIiwgZXh0OiBbXCJ0dGNuXCIsIFwidHRjbjNcIiwgXCJ0dGNucHBcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05fQ0ZHXCIsIG1pbWU6IFwidGV4dC94LXR0Y24tY2ZnXCIsIG1vZGU6IFwidHRjbi1jZmdcIiwgZXh0OiBbXCJjZmdcIl19LFxuICAgIHtuYW1lOiBcIlR1cnRsZVwiLCBtaW1lOiBcInRleHQvdHVydGxlXCIsIG1vZGU6IFwidHVydGxlXCIsIGV4dDogW1widHRsXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJ0c1wiXSwgYWxpYXM6IFtcInRzXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0LUpTWFwiLCBtaW1lOiBcInRleHQvdHlwZXNjcmlwdC1qc3hcIiwgbW9kZTogXCJqc3hcIiwgZXh0OiBbXCJ0c3hcIl0sIGFsaWFzOiBbXCJ0c3hcIl19LFxuICAgIHtuYW1lOiBcIlR3aWdcIiwgbWltZTogXCJ0ZXh0L3gtdHdpZ1wiLCBtb2RlOiBcInR3aWdcIn0sXG4gICAge25hbWU6IFwiV2ViIElETFwiLCBtaW1lOiBcInRleHQveC13ZWJpZGxcIiwgbW9kZTogXCJ3ZWJpZGxcIiwgZXh0OiBbXCJ3ZWJpZGxcIl19LFxuICAgIHtuYW1lOiBcIlZCLk5FVFwiLCBtaW1lOiBcInRleHQveC12YlwiLCBtb2RlOiBcInZiXCIsIGV4dDogW1widmJcIl19LFxuICAgIHtuYW1lOiBcIlZCU2NyaXB0XCIsIG1pbWU6IFwidGV4dC92YnNjcmlwdFwiLCBtb2RlOiBcInZic2NyaXB0XCIsIGV4dDogW1widmJzXCJdfSxcbiAgICB7bmFtZTogXCJWZWxvY2l0eVwiLCBtaW1lOiBcInRleHQvdmVsb2NpdHlcIiwgbW9kZTogXCJ2ZWxvY2l0eVwiLCBleHQ6IFtcInZ0bFwiXX0sXG4gICAge25hbWU6IFwiVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIl19LFxuICAgIHtuYW1lOiBcIlZIRExcIiwgbWltZTogXCJ0ZXh0L3gtdmhkbFwiLCBtb2RlOiBcInZoZGxcIiwgZXh0OiBbXCJ2aGRcIiwgXCJ2aGRsXCJdfSxcbiAgICB7bmFtZTogXCJWdWUuanMgQ29tcG9uZW50XCIsIG1pbWVzOiBbXCJzY3JpcHQveC12dWVcIiwgXCJ0ZXh0L3gtdnVlXCJdLCBtb2RlOiBcInZ1ZVwiLCBleHQ6IFtcInZ1ZVwiXX0sXG4gICAge25hbWU6IFwiWE1MXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ0ZXh0L3htbFwiXSwgbW9kZTogXCJ4bWxcIiwgZXh0OiBbXCJ4bWxcIiwgXCJ4c2xcIiwgXCJ4c2RcIiwgXCJzdmdcIl0sIGFsaWFzOiBbXCJyc3NcIiwgXCJ3c2RsXCIsIFwieHNkXCJdfSxcbiAgICB7bmFtZTogXCJYUXVlcnlcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94cXVlcnlcIiwgbW9kZTogXCJ4cXVlcnlcIiwgZXh0OiBbXCJ4eVwiLCBcInhxdWVyeVwiXX0sXG4gICAge25hbWU6IFwiWWFjYXNcIiwgbWltZTogXCJ0ZXh0L3gteWFjYXNcIiwgbW9kZTogXCJ5YWNhc1wiLCBleHQ6IFtcInlzXCJdfSxcbiAgICB7bmFtZTogXCJZQU1MXCIsIG1pbWVzOiBbXCJ0ZXh0L3gteWFtbFwiLCBcInRleHQveWFtbFwiXSwgbW9kZTogXCJ5YW1sXCIsIGV4dDogW1wieWFtbFwiLCBcInltbFwiXSwgYWxpYXM6IFtcInltbFwiXX0sXG4gICAge25hbWU6IFwiWjgwXCIsIG1pbWU6IFwidGV4dC94LXo4MFwiLCBtb2RlOiBcIno4MFwiLCBleHQ6IFtcIno4MFwiXX0sXG4gICAge25hbWU6IFwibXNjZ2VuXCIsIG1pbWU6IFwidGV4dC94LW1zY2dlblwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcIm1zY2dlblwiLCBcIm1zY2luXCIsIFwibXNjXCJdfSxcbiAgICB7bmFtZTogXCJ4dVwiLCBtaW1lOiBcInRleHQveC14dVwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcInh1XCJdfSxcbiAgICB7bmFtZTogXCJtc2dlbm55XCIsIG1pbWU6IFwidGV4dC94LW1zZ2VubnlcIiwgbW9kZTogXCJtc2NnZW5cIiwgZXh0OiBbXCJtc2dlbm55XCJdfVxuICBdO1xuICAvLyBFbnN1cmUgYWxsIG1vZGVzIGhhdmUgYSBtaW1lIHByb3BlcnR5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgaWYgKGluZm8ubWltZXMpIGluZm8ubWltZSA9IGluZm8ubWltZXNbMF07XG4gIH1cblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlNSU1FID0gZnVuY3Rpb24obWltZSkge1xuICAgIG1pbWUgPSBtaW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5taW1lID09IG1pbWUpIHJldHVybiBpbmZvO1xuICAgICAgaWYgKGluZm8ubWltZXMpIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5taW1lcy5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8ubWltZXNbal0gPT0gbWltZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIGlmICgvXFwreG1sJC8udGVzdChtaW1lKSkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICBpZiAoL1xcK2pzb24kLy50ZXN0KG1pbWUpKSByZXR1cm4gQ29kZU1pcnJvci5maW5kTW9kZUJ5TUlNRShcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlFeHRlbnNpb24gPSBmdW5jdGlvbihleHQpIHtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmV4dCkgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLmV4dC5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8uZXh0W2pdID09IGV4dCkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeUZpbGVOYW1lID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmZpbGUgJiYgaW5mby5maWxlLnRlc3QoZmlsZW5hbWUpKSByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgdmFyIGRvdCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgZXh0ID0gZG90ID4gLTEgJiYgZmlsZW5hbWUuc3Vic3RyaW5nKGRvdCArIDEsIGZpbGVuYW1lLmxlbmd0aCk7XG4gICAgaWYgKGV4dCkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeUV4dGVuc2lvbihleHQpO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLm5hbWUudG9Mb3dlckNhc2UoKSA9PSBuYW1lKSByZXR1cm4gaW5mbztcbiAgICAgIGlmIChpbmZvLmFsaWFzKSBmb3IgKHZhciBqID0gMDsgaiA8IGluZm8uYWxpYXMubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLmFsaWFzW2pdLnRvTG93ZXJDYXNlKCkgPT0gbmFtZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vbWFya2Rvd24vbWFya2Rvd25cIiksIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9tYXJrZG93bi9tYXJrZG93blwiLCBcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgdXJsUkUgPSAvXigoPzooPzphYWFzP3xhYm91dHxhY2FwfGFkaXVteHRyYXxhZltwc118YWltfGFwdHxhdHRhY2htZW50fGF3fGJlc2hhcmV8Yml0Y29pbnxib2xvfGNhbGx0b3xjYXB8Y2hyb21lKD86LWV4dGVuc2lvbik/fGNpZHxjb2FwfGNvbS1ldmVudGJyaXRlLWF0dGVuZGVlfGNvbnRlbnR8Y3JpZHxjdnN8ZGF0YXxkYXZ8ZGljdHxkbG5hLSg/OnBsYXljb250YWluZXJ8cGxheXNpbmdsZSl8ZG5zfGRvaXxkdG58ZHZifGVkMmt8ZmFjZXRpbWV8ZmVlZHxmaWxlfGZpbmdlcnxmaXNofGZ0cHxnZW98Z2d8Z2l0fGdpem1vcHJvamVjdHxnb3xnb3BoZXJ8Z3RhbGt8aDMyM3xoY3B8aHR0cHM/fGlheHxpY2FwfGljb258aW18aW1hcHxpbmZvfGlwbnxpcHB8aXJjWzZzXT98aXJpcyg/OlxcLmJlZXB8XFwubHd6fFxcLnhwY3xcXC54cGNzKT98aXRtc3xqYXJ8amF2YXNjcmlwdHxqbXN8a2V5cGFyY3xsYXN0Zm18bGRhcHM/fG1hZ25ldHxtYWlsdG98bWFwc3xtYXJrZXR8bWVzc2FnZXxtaWR8bW1zfG1zLWhlbHB8bXNuaW18bXNycHM/fG10cXB8bXVtYmxlfG11cGRhdGV8bXZufG5ld3N8bmZzfG5paD98bm50cHxub3Rlc3xvaWR8b3BhcXVlbG9ja3Rva2VufHBhbG18cGFwYXJhenppfHBsYXRmb3JtfHBvcHxwcmVzfHByb3h5fHBzeWN8cXVlcnl8cmVzKD86b3VyY2UpP3xybWl8cnN5bmN8cnRtcHxydHNwfHNlY29uZGxpZmV8c2VydmljZXxzZXNzaW9ufHNmdHB8c2dufHNodHRwfHNpZXZlfHNpcHM/fHNreXBlfHNtW2JzXXxzbm1wfHNvYXBcXC5iZWVwcz98c29sZGF0fHNwb3RpZnl8c3NofHN0ZWFtfHN2bnx0YWd8dGVhbXNwZWFrfHRlbCg/Om5ldCk/fHRmdHB8dGhpbmdzfHRoaXNtZXNzYWdlfHRpcHx0bjMyNzB8dHZ8dWRwfHVucmVhbHx1cm58dXQyMDA0fHZlbW1pfHZlbnRyaWxvfHZpZXctc291cmNlfHdlYmNhbHx3c3M/fHd0YWl8d3ljaXd5Z3x4Y29uKD86LXVzZXJpZCk/fHhmaXJlfHhtbHJwY1xcLmJlZXBzP3x4bXBwfHhyaXx5bXNncnx6MzlcXC41MFtyc10/KTooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl18XFwoW15cXHMoKTw+XSpcXCkpKyg/OlxcKFteXFxzKCk8Pl0qXFwpfFteXFxzYCohKClcXFtcXF17fTs6J1wiLiw8Pj/Cq8K74oCc4oCd4oCY4oCZXSkpL2lcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZ2ZtXCIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykge1xuICB2YXIgY29kZURlcHRoID0gMDtcbiAgZnVuY3Rpb24gYmxhbmtMaW5lKHN0YXRlKSB7XG4gICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBnZm1PdmVybGF5ID0ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZmFsc2UsXG4gICAgICAgIGNvZGVCbG9jazogZmFsc2UsXG4gICAgICAgIGF0ZVNwYWNlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogcy5jb2RlLFxuICAgICAgICBjb2RlQmxvY2s6IHMuY29kZUJsb2NrLFxuICAgICAgICBhdGVTcGFjZTogcy5hdGVTcGFjZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gbnVsbDtcblxuICAgICAgLy8gSGFjayB0byBwcmV2ZW50IGZvcm1hdHRpbmcgb3ZlcnJpZGUgaW5zaWRlIGNvZGUgYmxvY2tzIChibG9jayBhbmQgaW5saW5lKVxuICAgICAgaWYgKHN0YXRlLmNvZGVCbG9jaykge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eYGBgKy8pKSB7XG4gICAgICAgICAgc3RhdGUuY29kZUJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goL15gYGArLykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBzdGF0ZS5jb2RlQmxvY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBNYXJrZG93biBtb2RlXG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ2AnKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHZhciBiZWZvcmUgPSBzdHJlYW0ucG9zO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoJ2AnKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAxICsgc3RyZWFtLnBvcyAtIGJlZm9yZTtcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlKSB7XG4gICAgICAgICAgY29kZURlcHRoID0gZGlmZmVyZW5jZTtcbiAgICAgICAgICBzdGF0ZS5jb2RlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gY29kZURlcHRoKSB7IC8vIE11c3QgYmUgZXhhY3RcbiAgICAgICAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmNvZGUpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBzcGFjZS4gSWYgc28sIGxpbmtzIGNhbiBiZSBmb3JtYXR0ZWQgbGF0ZXIgb25cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdGF0ZS5hdGVTcGFjZSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IGZhbHNlO1xuICAgICAgICBpZiAobW9kZUNvbmZpZy5naXRIdWJTcGljZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goL14oPzpbYS16QS1aMC05XFwtX10rXFwvKT8oPzpbYS16QS1aMC05XFwtX10rQCk/KD89LnswLDZ9XFxkKSg/OlthLWYwLTldezcsNDB9XFxiKS8pKSB7XG4gICAgICAgICAgICAvLyBVc2VyL1Byb2plY3RAU0hBXG4gICAgICAgICAgICAvLyBVc2VyQFNIQVxuICAgICAgICAgICAgLy8gU0hBXG4gICAgICAgICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXig/OlthLXpBLVowLTlcXC1fXStcXC8pPyg/OlthLXpBLVowLTlcXC1fXSspPyNbMC05XStcXGIvKSkge1xuICAgICAgICAgICAgLy8gVXNlci9Qcm9qZWN0I051bVxuICAgICAgICAgICAgLy8gVXNlciNOdW1cbiAgICAgICAgICAgIC8vICNOdW1cbiAgICAgICAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFwibGlua1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh1cmxSRSkgJiZcbiAgICAgICAgICBzdHJlYW0uc3RyaW5nLnNsaWNlKHN0cmVhbS5zdGFydCAtIDIsIHN0cmVhbS5zdGFydCkgIT0gXCJdKFwiICYmXG4gICAgICAgICAgKHN0cmVhbS5zdGFydCA9PSAwIHx8IC9cXFcvLnRlc3Qoc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnN0YXJ0IC0gMSkpKSkge1xuICAgICAgICAvLyBVUkxzXG4gICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC8yMDEwLzA3L2ltcHJvdmVkX3JlZ2V4X2Zvcl9tYXRjaGluZ191cmxzXG4gICAgICAgIC8vIEFuZCB0aGVuIChpc3N1ZSAjMTE2MCkgc2ltcGxpZmllZCB0byBtYWtlIGl0IG5vdCBjcmFzaCB0aGUgQ2hyb21lIFJlZ2V4cCBlbmdpbmVcbiAgICAgICAgLy8gQW5kIHRoZW4gbGltaXRlZCB1cmwgc2NoZW1lcyB0byB0aGUgQ29tbW9uTWFyayBsaXN0LCBzbyBmb286YmFyIGlzbid0IG1hdGNoZWQgYXMgYSBVUkxcbiAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7XG4gICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGJsYW5rTGluZTogYmxhbmtMaW5lXG4gIH07XG5cbiAgdmFyIG1hcmtkb3duQ29uZmlnID0ge1xuICAgIHRhc2tMaXN0czogdHJ1ZSxcbiAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxuICAgIGVtb2ppOiB0cnVlXG4gIH07XG4gIGZvciAodmFyIGF0dHIgaW4gbW9kZUNvbmZpZykge1xuICAgIG1hcmtkb3duQ29uZmlnW2F0dHJdID0gbW9kZUNvbmZpZ1thdHRyXTtcbiAgfVxuICBtYXJrZG93bkNvbmZpZy5uYW1lID0gXCJtYXJrZG93blwiO1xuICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtYXJrZG93bkNvbmZpZyksIGdmbU92ZXJsYXkpO1xuXG59LCBcIm1hcmtkb3duXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1nZm1cIiwgXCJnZm1cIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiamF2YXNjcmlwdFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICB2YXIgc3RhdGVtZW50SW5kZW50ID0gcGFyc2VyQ29uZmlnLnN0YXRlbWVudEluZGVudDtcbiAgdmFyIGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkO1xuICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlO1xuICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0O1xuICB2YXIgd29yZFJFID0gcGFyc2VyQ29uZmlnLndvcmRDaGFyYWN0ZXJzIHx8IC9bXFx3JFxceGExLVxcdWZmZmZdLztcblxuICAvLyBUb2tlbml6ZXJcblxuICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpe1xuICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiBcImtleXdvcmRcIn07fVxuICAgIHZhciBBID0ga3coXCJrZXl3b3JkIGFcIiksIEIgPSBrdyhcImtleXdvcmQgYlwiKSwgQyA9IGt3KFwia2V5d29yZCBjXCIpLCBEID0ga3coXCJrZXl3b3JkIGRcIik7XG4gICAgdmFyIG9wZXJhdG9yID0ga3coXCJvcGVyYXRvclwiKSwgYXRvbSA9IHt0eXBlOiBcImF0b21cIiwgc3R5bGU6IFwiYXRvbVwifTtcblxuICAgIHJldHVybiB7XG4gICAgICBcImlmXCI6IGt3KFwiaWZcIiksIFwid2hpbGVcIjogQSwgXCJ3aXRoXCI6IEEsIFwiZWxzZVwiOiBCLCBcImRvXCI6IEIsIFwidHJ5XCI6IEIsIFwiZmluYWxseVwiOiBCLFxuICAgICAgXCJyZXR1cm5cIjogRCwgXCJicmVha1wiOiBELCBcImNvbnRpbnVlXCI6IEQsIFwibmV3XCI6IGt3KFwibmV3XCIpLCBcImRlbGV0ZVwiOiBDLCBcInZvaWRcIjogQywgXCJ0aHJvd1wiOiBDLFxuICAgICAgXCJkZWJ1Z2dlclwiOiBrdyhcImRlYnVnZ2VyXCIpLCBcInZhclwiOiBrdyhcInZhclwiKSwgXCJjb25zdFwiOiBrdyhcInZhclwiKSwgXCJsZXRcIjoga3coXCJ2YXJcIiksXG4gICAgICBcImZ1bmN0aW9uXCI6IGt3KFwiZnVuY3Rpb25cIiksIFwiY2F0Y2hcIjoga3coXCJjYXRjaFwiKSxcbiAgICAgIFwiZm9yXCI6IGt3KFwiZm9yXCIpLCBcInN3aXRjaFwiOiBrdyhcInN3aXRjaFwiKSwgXCJjYXNlXCI6IGt3KFwiY2FzZVwiKSwgXCJkZWZhdWx0XCI6IGt3KFwiZGVmYXVsdFwiKSxcbiAgICAgIFwiaW5cIjogb3BlcmF0b3IsIFwidHlwZW9mXCI6IG9wZXJhdG9yLCBcImluc3RhbmNlb2ZcIjogb3BlcmF0b3IsXG4gICAgICBcInRydWVcIjogYXRvbSwgXCJmYWxzZVwiOiBhdG9tLCBcIm51bGxcIjogYXRvbSwgXCJ1bmRlZmluZWRcIjogYXRvbSwgXCJOYU5cIjogYXRvbSwgXCJJbmZpbml0eVwiOiBhdG9tLFxuICAgICAgXCJ0aGlzXCI6IGt3KFwidGhpc1wiKSwgXCJjbGFzc1wiOiBrdyhcImNsYXNzXCIpLCBcInN1cGVyXCI6IGt3KFwiYXRvbVwiKSxcbiAgICAgIFwieWllbGRcIjogQywgXCJleHBvcnRcIjoga3coXCJleHBvcnRcIiksIFwiaW1wb3J0XCI6IGt3KFwiaW1wb3J0XCIpLCBcImV4dGVuZHNcIjogQyxcbiAgICAgIFwiYXdhaXRcIjogQ1xuICAgIH07XG4gIH0oKTtcblxuICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcXC0qJiU9PD4hP3x+XkBdLztcbiAgdmFyIGlzSnNvbmxkS2V5d29yZCA9IC9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaClcIi87XG5cbiAgZnVuY3Rpb24gcmVhZFJlZ2V4cChzdHJlYW0pIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBpblNldCA9IGZhbHNlO1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAobmV4dCA9PSBcIi9cIiAmJiAhaW5TZXQpIHJldHVybjtcbiAgICAgICAgaWYgKG5leHQgPT0gXCJbXCIpIGluU2V0ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoaW5TZXQgJiYgbmV4dCA9PSBcIl1cIikgaW5TZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXRcbiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuXG4gIHZhciB0eXBlLCBjb250ZW50O1xuICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7XG4gICAgdHlwZSA9IHRwOyBjb250ZW50ID0gY29udDtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaCgvXlxcZFtcXGRfXSooPzpbZUVdWytcXC1dP1tcXGRfXSspPy8pKSB7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKFwiLi5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCJzcHJlYWRcIiwgXCJtZXRhXCIpO1xuICAgIH0gZWxzZSBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiByZXQoY2gpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI9XCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCI9PlwiLCBcIm9wZXJhdG9yXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIwXCIgJiYgc3RyZWFtLm1hdGNoKC9eKD86eFtcXGRBLUZhLWZfXSt8b1swLTdfXSt8YlswMV9dKyluPy8pKSB7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoL1xcZC8udGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5tYXRjaCgvXltcXGRfXSooPzpufCg/OlxcLltcXGRfXSopPyg/OltlRV1bK1xcLV0/W1xcZF9dKyk/KT8vKTtcbiAgICAgIHJldHVybiByZXQoXCJudW1iZXJcIiwgXCJudW1iZXJcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIi9cIikge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoXCIqXCIpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50O1xuICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpO1xuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiL1wiKSkge1xuICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbkFsbG93ZWQoc3RyZWFtLCBzdGF0ZSwgMSkpIHtcbiAgICAgICAgcmVhZFJlZ2V4cChzdHJlYW0pO1xuICAgICAgICBzdHJlYW0ubWF0Y2goL15cXGIoKFtnaW15dXNdKSg/IVtnaW15dXNdKlxcMikpK1xcYi8pO1xuICAgICAgICByZXR1cm4gcmV0KFwicmVnZXhwXCIsIFwic3RyaW5nLTJcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJlYW0uZWF0KFwiPVwiKTtcbiAgICAgICAgcmV0dXJuIHJldChcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcImBcIikge1xuICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpO1xuICAgICAgcmV0dXJuIHRva2VuUXVhc2koc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIiNcIikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgcmV0dXJuIHJldChcImVycm9yXCIsIFwiZXJyb3JcIik7XG4gICAgfSBlbHNlIGlmIChjaCA9PSBcIjxcIiAmJiBzdHJlYW0ubWF0Y2goXCIhLS1cIikgfHwgY2ggPT0gXCItXCIgJiYgc3RyZWFtLm1hdGNoKFwiLT5cIikpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKVxuICAgICAgcmV0dXJuIHJldChcImNvbW1lbnRcIiwgXCJjb21tZW50XCIpXG4gICAgfSBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkge1xuICAgICAgaWYgKGNoICE9IFwiPlwiIHx8ICFzdGF0ZS5sZXhpY2FsIHx8IHN0YXRlLmxleGljYWwudHlwZSAhPSBcIj5cIikge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIj1cIikpIHtcbiAgICAgICAgICBpZiAoY2ggPT0gXCIhXCIgfHwgY2ggPT0gXCI9XCIpIHN0cmVhbS5lYXQoXCI9XCIpXG4gICAgICAgIH0gZWxzZSBpZiAoL1s8PiorXFwtXS8udGVzdChjaCkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0KGNoKVxuICAgICAgICAgIGlmIChjaCA9PSBcIj5cIikgc3RyZWFtLmVhdChjaClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcIm9wZXJhdG9yXCIsIFwib3BlcmF0b3JcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gICAgfSBlbHNlIGlmICh3b3JkUkUudGVzdChjaCkpIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSh3b3JkUkUpO1xuICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpXG4gICAgICBpZiAoc3RhdGUubGFzdFR5cGUgIT0gXCIuXCIpIHtcbiAgICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7XG4gICAgICAgICAgdmFyIGt3ID0ga2V5d29yZHNbd29yZF1cbiAgICAgICAgICByZXR1cm4gcmV0KGt3LnR5cGUsIGt3LnN0eWxlLCB3b3JkKVxuICAgICAgICB9XG4gICAgICAgIGlmICh3b3JkID09IFwiYXN5bmNcIiAmJiBzdHJlYW0ubWF0Y2goL14oXFxzfFxcL1xcKi4qP1xcKlxcLykqW1xcW1xcKFxcd10vLCBmYWxzZSkpXG4gICAgICAgICAgcmV0dXJuIHJldChcImFzeW5jXCIsIFwia2V5d29yZFwiLCB3b3JkKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldChcInZhcmlhYmxlXCIsIFwidmFyaWFibGVcIiwgd29yZClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgICAgaWYgKGpzb25sZE1vZGUgJiYgc3RyZWFtLnBlZWsoKSA9PSBcIkBcIiAmJiBzdHJlYW0ubWF0Y2goaXNKc29ubGRLZXl3b3JkKSl7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICByZXR1cm4gcmV0KFwianNvbmxkLWtleXdvcmRcIiwgXCJtZXRhXCIpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgYnJlYWs7XG4gICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgICAgfVxuICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgIHJldHVybiByZXQoXCJzdHJpbmdcIiwgXCJzdHJpbmdcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoO1xuICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHtcbiAgICAgIGlmIChjaCA9PSBcIi9cIiAmJiBtYXliZUVuZCkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXliZUVuZCA9IChjaCA9PSBcIipcIik7XG4gICAgfVxuICAgIHJldHVybiByZXQoXCJjb21tZW50XCIsIFwiY29tbWVudFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRva2VuUXVhc2koc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7XG4gICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgaWYgKCFlc2NhcGVkICYmIChuZXh0ID09IFwiYFwiIHx8IG5leHQgPT0gXCIkXCIgJiYgc3RyZWFtLmVhdChcIntcIikpKSB7XG4gICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwicXVhc2lcIiwgXCJzdHJpbmctMlwiLCBzdHJlYW0uY3VycmVudCgpKTtcbiAgfVxuXG4gIHZhciBicmFja2V0cyA9IFwiKFt7fV0pXCI7XG4gIC8vIFRoaXMgaXMgYSBjcnVkZSBsb29rYWhlYWQgdHJpY2sgdG8gdHJ5IGFuZCBub3RpY2UgdGhhdCB3ZSdyZVxuICAvLyBwYXJzaW5nIHRoZSBhcmd1bWVudCBwYXR0ZXJucyBmb3IgYSBmYXQtYXJyb3cgZnVuY3Rpb24gYmVmb3JlIHdlXG4gIC8vIGFjdHVhbGx5IGhpdCB0aGUgYXJyb3cgdG9rZW4uIEl0IG9ubHkgd29ya3MgaWYgdGhlIGFycm93IGlzIG9uXG4gIC8vIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGFyZ3VtZW50cyBhbmQgdGhlcmUncyBubyBzdHJhbmdlIG5vaXNlXG4gIC8vIChjb21tZW50cykgaW4gYmV0d2Vlbi4gRmFsbGJhY2sgaXMgdG8gb25seSBub3RpY2Ugd2hlbiB3ZSBoaXQgdGhlXG4gIC8vIGFycm93LCBhbmQgbm90IGRlY2xhcmUgdGhlIGFyZ3VtZW50cyBhcyBsb2NhbHMgZm9yIHRoZSBhcnJvd1xuICAvLyBib2R5LlxuICBmdW5jdGlvbiBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5mYXRBcnJvd0F0KSBzdGF0ZS5mYXRBcnJvd0F0ID0gbnVsbDtcbiAgICB2YXIgYXJyb3cgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI9PlwiLCBzdHJlYW0uc3RhcnQpO1xuICAgIGlmIChhcnJvdyA8IDApIHJldHVybjtcblxuICAgIGlmIChpc1RTKSB7IC8vIFRyeSB0byBza2lwIFR5cGVTY3JpcHQgcmV0dXJuIHR5cGUgZGVjbGFyYXRpb25zIGFmdGVyIHRoZSBhcmd1bWVudHNcbiAgICAgIHZhciBtID0gLzpcXHMqKD86XFx3Kyg/OjxbXj5dKj58XFxbXFxdKT98XFx7W159XSpcXH0pXFxzKiQvLmV4ZWMoc3RyZWFtLnN0cmluZy5zbGljZShzdHJlYW0uc3RhcnQsIGFycm93KSlcbiAgICAgIGlmIChtKSBhcnJvdyA9IG0uaW5kZXhcbiAgICB9XG5cbiAgICB2YXIgZGVwdGggPSAwLCBzYXdTb21ldGhpbmcgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBwb3MgPSBhcnJvdyAtIDE7IHBvcyA+PSAwOyAtLXBvcykge1xuICAgICAgdmFyIGNoID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zKTtcbiAgICAgIHZhciBicmFja2V0ID0gYnJhY2tldHMuaW5kZXhPZihjaCk7XG4gICAgICBpZiAoYnJhY2tldCA+PSAwICYmIGJyYWNrZXQgPCAzKSB7XG4gICAgICAgIGlmICghZGVwdGgpIHsgKytwb3M7IGJyZWFrOyB9XG4gICAgICAgIGlmICgtLWRlcHRoID09IDApIHsgaWYgKGNoID09IFwiKFwiKSBzYXdTb21ldGhpbmcgPSB0cnVlOyBicmVhazsgfVxuICAgICAgfSBlbHNlIGlmIChicmFja2V0ID49IDMgJiYgYnJhY2tldCA8IDYpIHtcbiAgICAgICAgKytkZXB0aDtcbiAgICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7XG4gICAgICAgIHNhd1NvbWV0aGluZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKC9bXCInXFwvYF0vLnRlc3QoY2gpKSB7XG4gICAgICAgIGZvciAoOzsgLS1wb3MpIHtcbiAgICAgICAgICBpZiAocG9zID09IDApIHJldHVyblxuICAgICAgICAgIHZhciBuZXh0ID0gc3RyZWFtLnN0cmluZy5jaGFyQXQocG9zIC0gMSlcbiAgICAgICAgICBpZiAobmV4dCA9PSBjaCAmJiBzdHJlYW0uc3RyaW5nLmNoYXJBdChwb3MgLSAyKSAhPSBcIlxcXFxcIikgeyBwb3MtLTsgYnJlYWsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNhd1NvbWV0aGluZyAmJiAhZGVwdGgpIHtcbiAgICAgICAgKytwb3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2F3U29tZXRoaW5nICYmICFkZXB0aCkgc3RhdGUuZmF0QXJyb3dBdCA9IHBvcztcbiAgfVxuXG4gIC8vIFBhcnNlclxuXG4gIHZhciBhdG9taWNUeXBlcyA9IHtcImF0b21cIjogdHJ1ZSwgXCJudW1iZXJcIjogdHJ1ZSwgXCJ2YXJpYWJsZVwiOiB0cnVlLCBcInN0cmluZ1wiOiB0cnVlLCBcInJlZ2V4cFwiOiB0cnVlLCBcInRoaXNcIjogdHJ1ZSwgXCJqc29ubGQta2V5d29yZFwiOiB0cnVlfTtcblxuICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHtcbiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7XG4gICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnByZXYgPSBwcmV2O1xuICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHtcbiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBjeCA9IHN0YXRlLmNvbnRleHQ7IGN4OyBjeCA9IGN4LnByZXYpIHtcbiAgICAgIGZvciAodmFyIHYgPSBjeC52YXJzOyB2OyB2ID0gdi5uZXh0KVxuICAgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pIHtcbiAgICB2YXIgY2MgPSBzdGF0ZS5jYztcbiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuXG4gICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVyeSBjYWxsLilcbiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7IGN4LnN0eWxlID0gc3R5bGU7XG5cbiAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoXCJhbGlnblwiKSlcbiAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlO1xuXG4gICAgd2hpbGUodHJ1ZSkge1xuICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDtcbiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7XG4gICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpXG4gICAgICAgICAgY2MucG9wKCkoKTtcbiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDtcbiAgICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gXCJ2YXJpYWJsZS0yXCI7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21iaW5hdG9yIHV0aWxzXG5cbiAgdmFyIGN4ID0ge3N0YXRlOiBudWxsLCBjb2x1bW46IG51bGwsIG1hcmtlZDogbnVsbCwgY2M6IG51bGx9O1xuICBmdW5jdGlvbiBwYXNzKCkge1xuICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgfVxuICBmdW5jdGlvbiBjb250KCkge1xuICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBpbkxpc3QobmFtZSwgbGlzdCkge1xuICAgIGZvciAodmFyIHYgPSBsaXN0OyB2OyB2ID0gdi5uZXh0KSBpZiAodi5uYW1lID09IG5hbWUpIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBjeC5tYXJrZWQgPSBcImRlZlwiO1xuICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC5pbmZvID09IFwidmFyXCIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LmJsb2NrKSB7XG4gICAgICAgIC8vIEZJWE1FIGZ1bmN0aW9uIGRlY2xzIGFyZSBhbHNvIG5vdCBibG9jayBzY29wZWRcbiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSByZWdpc3RlclZhclNjb3BlZCh2YXJuYW1lLCBzdGF0ZS5jb250ZXh0KVxuICAgICAgICBpZiAobmV3Q29udGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ld0NvbnRleHRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghaW5MaXN0KHZhcm5hbWUsIHN0YXRlLmxvY2FsVmFycykpIHtcbiAgICAgICAgc3RhdGUubG9jYWxWYXJzID0gbmV3IFZhcih2YXJuYW1lLCBzdGF0ZS5sb2NhbFZhcnMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsIHRocm91Z2ggbWVhbnMgdGhpcyBpcyBnbG9iYWxcbiAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgIWluTGlzdCh2YXJuYW1lLCBzdGF0ZS5nbG9iYWxWYXJzKSlcbiAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBuZXcgVmFyKHZhcm5hbWUsIHN0YXRlLmdsb2JhbFZhcnMpXG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXJWYXJTY29wZWQodmFybmFtZSwgY29udGV4dCkge1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQuYmxvY2spIHtcbiAgICAgIHZhciBpbm5lciA9IHJlZ2lzdGVyVmFyU2NvcGVkKHZhcm5hbWUsIGNvbnRleHQucHJldilcbiAgICAgIGlmICghaW5uZXIpIHJldHVybiBudWxsXG4gICAgICBpZiAoaW5uZXIgPT0gY29udGV4dC5wcmV2KSByZXR1cm4gY29udGV4dFxuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGlubmVyLCBjb250ZXh0LnZhcnMsIHRydWUpXG4gICAgfSBlbHNlIGlmIChpbkxpc3QodmFybmFtZSwgY29udGV4dC52YXJzKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KGNvbnRleHQucHJldiwgbmV3IFZhcih2YXJuYW1lLCBjb250ZXh0LnZhcnMpLCBmYWxzZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc01vZGlmaWVyKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSA9PSBcInB1YmxpY1wiIHx8IG5hbWUgPT0gXCJwcml2YXRlXCIgfHwgbmFtZSA9PSBcInByb3RlY3RlZFwiIHx8IG5hbWUgPT0gXCJhYnN0cmFjdFwiIHx8IG5hbWUgPT0gXCJyZWFkb25seVwiXG4gIH1cblxuICAvLyBDb21iaW5hdG9yc1xuXG4gIGZ1bmN0aW9uIENvbnRleHQocHJldiwgdmFycywgYmxvY2spIHsgdGhpcy5wcmV2ID0gcHJldjsgdGhpcy52YXJzID0gdmFyczsgdGhpcy5ibG9jayA9IGJsb2NrIH1cbiAgZnVuY3Rpb24gVmFyKG5hbWUsIG5leHQpIHsgdGhpcy5uYW1lID0gbmFtZTsgdGhpcy5uZXh0ID0gbmV4dCB9XG5cbiAgdmFyIGRlZmF1bHRWYXJzID0gbmV3IFZhcihcInRoaXNcIiwgbmV3IFZhcihcImFyZ3VtZW50c1wiLCBudWxsKSlcbiAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGN4LnN0YXRlLmNvbnRleHQsIGN4LnN0YXRlLmxvY2FsVmFycywgZmFsc2UpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnNcbiAgfVxuICBmdW5jdGlvbiBwdXNoYmxvY2tjb250ZXh0KCkge1xuICAgIGN4LnN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChjeC5zdGF0ZS5jb250ZXh0LCBjeC5zdGF0ZS5sb2NhbFZhcnMsIHRydWUpXG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gbnVsbFxuICB9XG4gIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7XG4gICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzXG4gICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHQucHJldlxuICB9XG4gIHBvcGNvbnRleHQubGV4ID0gdHJ1ZVxuICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHtcbiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZSwgaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwic3RhdFwiKSBpbmRlbnQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkO1xuICAgICAgZWxzZSBmb3IgKHZhciBvdXRlciA9IHN0YXRlLmxleGljYWw7IG91dGVyICYmIG91dGVyLnR5cGUgPT0gXCIpXCIgJiYgb3V0ZXIuYWxpZ247IG91dGVyID0gb3V0ZXIucHJldilcbiAgICAgICAgaW5kZW50ID0gb3V0ZXIuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChpbmRlbnQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbyk7XG4gICAgfTtcbiAgICByZXN1bHQubGV4ID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGZ1bmN0aW9uIHBvcGxleCgpIHtcbiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTtcbiAgICBpZiAoc3RhdGUubGV4aWNhbC5wcmV2KSB7XG4gICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09IFwiKVwiKVxuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7XG4gICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2O1xuICAgIH1cbiAgfVxuICBwb3BsZXgubGV4ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7XG4gICAgZnVuY3Rpb24gZXhwKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTtcbiAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSBcIjtcIiB8fCB0eXBlID09IFwifVwiIHx8IHR5cGUgPT0gXCIpXCIgfHwgdHlwZSA9PSBcIl1cIikgcmV0dXJuIHBhc3MoKTtcbiAgICAgIGVsc2UgcmV0dXJuIGNvbnQoZXhwKTtcbiAgICB9O1xuICAgIHJldHVybiBleHA7XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhclwiKSByZXR1cm4gY29udChwdXNobGV4KFwidmFyZGVmXCIsIHZhbHVlKSwgdmFyZGVmLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBhXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgYlwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBkXCIpIHJldHVybiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqJC8sIGZhbHNlKSA/IGNvbnQoKSA6IGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImRlYnVnZ2VyXCIpIHJldHVybiBjb250KGV4cGVjdChcIjtcIikpO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udChwdXNobGV4KFwifVwiKSwgcHVzaGJsb2NrY29udGV4dCwgYmxvY2ssIHBvcGxleCwgcG9wY29udGV4dCk7XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHR5cGUgPT0gXCJpZlwiKSB7XG4gICAgICBpZiAoY3guc3RhdGUubGV4aWNhbC5pbmZvID09IFwiZWxzZVwiICYmIGN4LnN0YXRlLmNjW2N4LnN0YXRlLmNjLmxlbmd0aCAtIDFdID09IHBvcGxleClcbiAgICAgICAgY3guc3RhdGUuY2MucG9wKCkoKTtcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXJlbkV4cHIsIHN0YXRlbWVudCwgcG9wbGV4LCBtYXliZWVsc2UpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTtcbiAgICBpZiAodHlwZSA9PSBcImZvclwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgZm9yc3BlYywgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiY2xhc3NcIiB8fCAoaXNUUyAmJiB2YWx1ZSA9PSBcImludGVyZmFjZVwiKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIsIHR5cGUgPT0gXCJjbGFzc1wiID8gdHlwZSA6IHZhbHVlKSwgY2xhc3NOYW1lLCBwb3BsZXgpXG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJkZWNsYXJlXCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIGlmIChpc1RTICYmICh2YWx1ZSA9PSBcIm1vZHVsZVwiIHx8IHZhbHVlID09IFwiZW51bVwiIHx8IHZhbHVlID09IFwidHlwZVwiKSAmJiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3LywgZmFsc2UpKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIGlmICh2YWx1ZSA9PSBcImVudW1cIikgcmV0dXJuIGNvbnQoZW51bWRlZik7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IFwidHlwZVwiKSByZXR1cm4gY29udCh0eXBlbmFtZSwgZXhwZWN0KFwib3BlcmF0b3JcIiksIHR5cGVleHByLCBleHBlY3QoXCI7XCIpKTtcbiAgICAgICAgZWxzZSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGF0dGVybiwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiksIGJsb2NrLCBwb3BsZXgsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIm5hbWVzcGFjZVwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleClcbiAgICAgIH0gZWxzZSBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcImFic3RyYWN0XCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcInN0YXRcIiksIG1heWJlbGFiZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgcGFyZW5FeHByLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiLCBcInN3aXRjaFwiKSwgcHVzaGJsb2NrY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImNhc2VcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJkZWZhdWx0XCIpIHJldHVybiBjb250KGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiY2F0Y2hcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHB1c2hjb250ZXh0LCBtYXliZUNhdGNoQmluZGluZywgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpO1xuICAgIGlmICh0eXBlID09IFwiZXhwb3J0XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBhZnRlckV4cG9ydCwgcG9wbGV4KTtcbiAgICBpZiAodHlwZSA9PSBcImltcG9ydFwiKSByZXR1cm4gY29udChwdXNobGV4KFwic3RhdFwiKSwgYWZ0ZXJJbXBvcnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChzdGF0ZW1lbnQpXG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBzdGF0ZW1lbnQpXG4gICAgcmV0dXJuIHBhc3MocHVzaGxleChcInN0YXRcIiksIGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVDYXRjaEJpbmRpbmcodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChmdW5hcmcsIGV4cGVjdChcIilcIikpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uTm9Db21tYSh0eXBlLCB2YWx1ZSkge1xuICAgIHJldHVybiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIHRydWUpO1xuICB9XG4gIGZ1bmN0aW9uIHBhcmVuRXhwcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCIoXCIpIHJldHVybiBwYXNzKClcbiAgICByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCIpXCIpLCBwb3BsZXgpXG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCBub0NvbW1hKSB7XG4gICAgaWYgKGN4LnN0YXRlLmZhdEFycm93QXQgPT0gY3guc3RyZWFtLnN0YXJ0KSB7XG4gICAgICB2YXIgYm9keSA9IG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5O1xuICAgICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgZXhwZWN0KFwiPT5cIiksIGJvZHksIHBvcGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBwYXNzKHB1c2hjb250ZXh0LCBwYXR0ZXJuLCBleHBlY3QoXCI9PlwiKSwgYm9keSwgcG9wY29udGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIG1heWJlb3AgPSBub0NvbW1hID8gbWF5YmVvcGVyYXRvck5vQ29tbWEgOiBtYXliZW9wZXJhdG9yQ29tbWE7XG4gICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcImNsYXNzXCIgfHwgKGlzVFMgJiYgdmFsdWUgPT0gXCJpbnRlcmZhY2VcIikpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBjbGFzc0V4cHJlc3Npb24sIHBvcGxleCk7IH1cbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmQgY1wiIHx8IHR5cGUgPT0gXCJhc3luY1wiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiKVwiKSwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIgfHwgdHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIGFycmF5TGl0ZXJhbCwgcG9wbGV4LCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChvYmpwcm9wLCBcIn1cIiwgbnVsbCwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcyhxdWFzaSwgbWF5YmVvcCk7XG4gICAgaWYgKHR5cGUgPT0gXCJuZXdcIikgcmV0dXJuIGNvbnQobWF5YmVUYXJnZXQobm9Db21tYSkpO1xuICAgIGlmICh0eXBlID09IFwiaW1wb3J0XCIpIHJldHVybiBjb250KGV4cHJlc3Npb24pO1xuICAgIHJldHVybiBjb250KCk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHtcbiAgICBpZiAodHlwZS5tYXRjaCgvWztcXH1cXClcXF0sXS8pKSByZXR1cm4gcGFzcygpO1xuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvckNvbW1hKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG1heWJlb3BlcmF0b3JOb0NvbW1hKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVvcGVyYXRvckNvbW1hIDogbWF5YmVvcGVyYXRvck5vQ29tbWE7XG4gICAgdmFyIGV4cHIgPSBub0NvbW1hID09IGZhbHNlID8gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hO1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIpIHtcbiAgICAgIGlmICgvXFwrXFwrfC0tLy50ZXN0KHZhbHVlKSB8fCBpc1RTICYmIHZhbHVlID09IFwiIVwiKSByZXR1cm4gY29udChtZSk7XG4gICAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL14oW14+XXw8Lio/PikqPlxccypcXCgvLCBmYWxzZSkpXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIG1lKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSwgZXhwcik7XG4gICAgICByZXR1cm4gY29udChleHByKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSB7IHJldHVybiBwYXNzKHF1YXNpLCBtZSk7IH1cbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udENvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCBcIilcIiwgXCJjYWxsXCIsIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiXVwiKSwgcG9wbGV4LCBtZSk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udCh0eXBlZXhwciwgbWUpIH1cbiAgICBpZiAodHlwZSA9PSBcInJlZ2V4cFwiKSB7XG4gICAgICBjeC5zdGF0ZS5sYXN0VHlwZSA9IGN4Lm1hcmtlZCA9IFwib3BlcmF0b3JcIlxuICAgICAgY3guc3RyZWFtLmJhY2tVcChjeC5zdHJlYW0ucG9zIC0gY3guc3RyZWFtLnN0YXJ0IC0gMSlcbiAgICAgIHJldHVybiBjb250KGV4cHIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHF1YXNpKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcygpO1xuICAgIGlmICh2YWx1ZS5zbGljZSh2YWx1ZS5sZW5ndGggLSAyKSAhPSBcIiR7XCIpIHJldHVybiBjb250KHF1YXNpKTtcbiAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBjb250aW51ZVF1YXNpKTtcbiAgfVxuICBmdW5jdGlvbiBjb250aW51ZVF1YXNpKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgY3gubWFya2VkID0gXCJzdHJpbmctMlwiO1xuICAgICAgY3guc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpO1xuICAgICAgcmV0dXJuIGNvbnQocXVhc2kpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcnJvd0JvZHkodHlwZSkge1xuICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTtcbiAgICByZXR1cm4gcGFzcyh0eXBlID09IFwie1wiID8gc3RhdGVtZW50IDogZXhwcmVzc2lvbik7XG4gIH1cbiAgZnVuY3Rpb24gYXJyb3dCb2R5Tm9Db21tYSh0eXBlKSB7XG4gICAgZmluZEZhdEFycm93KGN4LnN0cmVhbSwgY3guc3RhdGUpO1xuICAgIHJldHVybiBwYXNzKHR5cGUgPT0gXCJ7XCIgPyBzdGF0ZW1lbnQgOiBleHByZXNzaW9uTm9Db21tYSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUYXJnZXQobm9Db21tYSkge1xuICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IHRhcmdldE5vQ29tbWEgOiB0YXJnZXQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgaXNUUykgcmV0dXJuIGNvbnQobWF5YmVUeXBlQXJncywgbm9Db21tYSA/IG1heWJlb3BlcmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hKVxuICAgICAgZWxzZSByZXR1cm4gcGFzcyhub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHRhcmdldChfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yQ29tbWEpOyB9XG4gIH1cbiAgZnVuY3Rpb24gdGFyZ2V0Tm9Db21tYShfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yTm9Db21tYSk7IH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpO1xuICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3JDb21tYSwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7Y3gubWFya2VkID0gXCJwcm9wZXJ0eVwiOyByZXR1cm4gY29udCgpO31cbiAgfVxuICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICByZXR1cm4gY29udChvYmpwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICBpZiAodmFsdWUgPT0gXCJnZXRcIiB8fCB2YWx1ZSA9PSBcInNldFwiKSByZXR1cm4gY29udChnZXR0ZXJTZXR0ZXIpO1xuICAgICAgdmFyIG0gLy8gV29yayBhcm91bmQgZmF0LWFycm93LWRldGVjdGlvbiBjb21wbGljYXRpb24gZm9yIGRldGVjdGluZyB0eXBlc2NyaXB0IHR5cGVkIGFycm93IHBhcmFtc1xuICAgICAgaWYgKGlzVFMgJiYgY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQgJiYgKG0gPSBjeC5zdHJlYW0ubWF0Y2goL15cXHMqOlxccyovLCBmYWxzZSkpKVxuICAgICAgICBjeC5zdGF0ZS5mYXRBcnJvd0F0ID0gY3guc3RyZWFtLnBvcyArIG1bMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/IFwicHJvcGVydHlcIiA6IChjeC5zdHlsZSArIFwiIHByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJqc29ubGQta2V5d29yZFwiKSB7XG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KG9ianByb3ApXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiW1wiKSB7XG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHtcbiAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hLCBhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCIqXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQob2JqcHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiOlwiKSB7XG4gICAgICByZXR1cm4gcGFzcyhhZnRlcnByb3ApXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldHRlclNldHRlcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gcGFzcyhhZnRlcnByb3ApO1xuICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJwcm9wKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcGFzcyhmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kLCBzZXApIHtcbiAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAoc2VwID8gc2VwLmluZGV4T2YodHlwZSkgPiAtMSA6IHR5cGUgPT0gXCIsXCIpIHtcbiAgICAgICAgdmFyIGxleCA9IGN4LnN0YXRlLmxleGljYWw7XG4gICAgICAgIGlmIChsZXguaW5mbyA9PSBcImNhbGxcIikgbGV4LnBvcyA9IChsZXgucG9zIHx8IDApICsgMTtcbiAgICAgICAgcmV0dXJuIGNvbnQoZnVuY3Rpb24odHlwZSwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gcGFzcygpXG4gICAgICAgICAgcmV0dXJuIHBhc3Mod2hhdClcbiAgICAgICAgfSwgcHJvY2VlZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgaWYgKHNlcCAmJiBzZXAuaW5kZXhPZihcIjtcIikgPiAtMSkgcmV0dXJuIHBhc3Mod2hhdClcbiAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgcmV0dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjb250Q29tbWFzZXAod2hhdCwgZW5kLCBpbmZvKSB7XG4gICAgZm9yICh2YXIgaSA9IDM7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgcmV0dXJuIGNvbnQocHVzaGxleChlbmQsIGluZm8pLCBjb21tYXNlcCh3aGF0LCBlbmQpLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQsIGJsb2NrKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZXR5cGUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNUUykge1xuICAgICAgaWYgKHR5cGUgPT0gXCI6XCIpIHJldHVybiBjb250KHR5cGVleHByKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQobWF5YmV0eXBlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmV0eXBlT3JJbih0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTICYmICh0eXBlID09IFwiOlwiIHx8IHZhbHVlID09IFwiaW5cIikpIHJldHVybiBjb250KHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlcmV0dHlwZSh0eXBlKSB7XG4gICAgaWYgKGlzVFMgJiYgdHlwZSA9PSBcIjpcIikge1xuICAgICAgaWYgKGN4LnN0cmVhbS5tYXRjaCgvXlxccypcXHcrXFxzK2lzXFxiLywgZmFsc2UpKSByZXR1cm4gY29udChleHByZXNzaW9uLCBpc0tXLCB0eXBlZXhwcilcbiAgICAgIGVsc2UgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGlzS1coXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJpc1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgcmV0dXJuIGNvbnQoKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0eXBlZXhwcih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImtleW9mXCIgfHwgdmFsdWUgPT0gXCJ0eXBlb2ZcIiB8fCB2YWx1ZSA9PSBcImluZmVyXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udCh2YWx1ZSA9PSBcInR5cGVvZlwiID8gZXhwcmVzc2lvbk5vQ29tbWEgOiB0eXBlZXhwcilcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IHZhbHVlID09IFwidm9pZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInR5cGVcIlxuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJUeXBlKVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdmFsdWUgPT0gXCImXCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIgfHwgdHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJhdG9tXCIpIHJldHVybiBjb250KGFmdGVyVHlwZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJdXCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCJdXCIsIFwiLFwiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjb21tYXNlcCh0eXBlcHJvcCwgXCJ9XCIsIFwiLDtcIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChjb21tYXNlcCh0eXBlYXJnLCBcIilcIiksIG1heWJlUmV0dXJuVHlwZSwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwiPFwiKSByZXR1cm4gY29udChjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCB0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBtYXliZVJldHVyblR5cGUodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gdHlwZXByb3AodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgY3guc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIlxuICAgICAgcmV0dXJuIGNvbnQodHlwZXByb3ApXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIj9cIiB8fCB0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gY29udCh0eXBlcHJvcClcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIltcIikge1xuICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KFwidmFyaWFibGVcIiksIG1heWJldHlwZU9ySW4sIGV4cGVjdChcIl1cIiksIHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIihcIikge1xuICAgICAgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWNsLCB0eXBlcHJvcClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHlwZWFyZyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL15cXHMqWz86XS8sIGZhbHNlKSB8fCB2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQodHlwZWFyZylcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQodHlwZWFyZylcbiAgICByZXR1cm4gcGFzcyh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBhZnRlclR5cGUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdHlwZSA9PSBcIi5cIiB8fCB2YWx1ZSA9PSBcIiZcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHR5cGVleHByLCBleHBlY3QoXCJdXCIpLCBhZnRlclR5cGUpXG4gICAgaWYgKHZhbHVlID09IFwiZXh0ZW5kc1wiIHx8IHZhbHVlID09IFwiaW1wbGVtZW50c1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udCh0eXBlZXhwcikgfVxuICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIGV4cGVjdChcIjpcIiksIHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlVHlwZUFyZ3MoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgfVxuICBmdW5jdGlvbiB0eXBlcGFyYW0oKSB7XG4gICAgcmV0dXJuIHBhc3ModHlwZWV4cHIsIG1heWJlVHlwZURlZmF1bHQpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUeXBlRGVmYXVsdChfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gdmFyZGVmKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiZW51bVwiKSB7Y3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGVudW1kZWYpfVxuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVBc3NpZ24sIHZhcmRlZkNvbnQpO1xuICB9XG4gIGZ1bmN0aW9uIHBhdHRlcm4odHlwZSwgdmFsdWUpIHtcbiAgICBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQocGF0dGVybikgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgeyByZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KCk7IH1cbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChwYXR0ZXJuKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnRDb21tYXNlcChlbHRwYXR0ZXJuLCBcIl1cIik7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250Q29tbWFzZXAocHJvcHBhdHRlcm4sIFwifVwiKTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wcGF0dGVybih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiAmJiAhY3guc3RyZWFtLm1hdGNoKC9eXFxzKjovLCBmYWxzZSkpIHtcbiAgICAgIHJlZ2lzdGVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBjb250KG1heWJlQXNzaWduKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgaWYgKHR5cGUgPT0gXCJzcHJlYWRcIikgcmV0dXJuIGNvbnQocGF0dGVybik7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBwYXNzKCk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgnXScpLCBleHBlY3QoJzonKSwgcHJvcHBhdHRlcm4pO1xuICAgIHJldHVybiBjb250KGV4cGVjdChcIjpcIiksIHBhdHRlcm4sIG1heWJlQXNzaWduKTtcbiAgfVxuICBmdW5jdGlvbiBlbHRwYXR0ZXJuKCkge1xuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJlQXNzaWduKVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlQXNzaWduKF90eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpO1xuICB9XG4gIGZ1bmN0aW9uIHZhcmRlZkNvbnQodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwiLFwiKSByZXR1cm4gY29udCh2YXJkZWYpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlZWxzZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBiXCIgJiYgdmFsdWUgPT0gXCJlbHNlXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIsIFwiZWxzZVwiKSwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGZvcnNwZWModHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhd2FpdFwiKSByZXR1cm4gY29udChmb3JzcGVjKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGZvcnNwZWMxLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInZhclwiKSByZXR1cm4gY29udCh2YXJkZWYsIGZvcnNwZWMyKTtcbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjb250KGZvcnNwZWMyKTtcbiAgICByZXR1cm4gcGFzcyhmb3JzcGVjMilcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwiKVwiKSByZXR1cm4gY29udCgpXG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KGZvcnNwZWMyKVxuICAgIGlmICh2YWx1ZSA9PSBcImluXCIgfHwgdmFsdWUgPT0gXCJvZlwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBmb3JzcGVjMikgfVxuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGZvcnNwZWMyKVxuICB9XG4gIGZ1bmN0aW9uIGZ1bmN0aW9uZGVmKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7Y3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleChcIilcIiksIGNvbW1hc2VwKGZ1bmFyZywgXCIpXCIpLCBwb3BsZXgsIG1heWJlcmV0dHlwZSwgc3RhdGVtZW50LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgsIGZ1bmN0aW9uZGVmKVxuICB9XG4gIGZ1bmN0aW9uIGZ1bmN0aW9uZGVjbCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikge2N4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChmdW5jdGlvbmRlY2wpO31cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVjbCk7fVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNoY29udGV4dCwgcHVzaGxleChcIilcIiksIGNvbW1hc2VwKGZ1bmFyZywgXCIpXCIpLCBwb3BsZXgsIG1heWJlcmV0dHlwZSwgcG9wY29udGV4dCk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4LCBmdW5jdGlvbmRlY2wpXG4gIH1cbiAgZnVuY3Rpb24gdHlwZW5hbWUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImtleXdvcmRcIiB8fCB0eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgY3gubWFya2VkID0gXCJ0eXBlXCJcbiAgICAgIHJldHVybiBjb250KHR5cGVuYW1lKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCI8XCIpIHtcbiAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlcGFyYW0sIFwiPlwiKSwgcG9wbGV4KVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBmdW5hcmcodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJAXCIpIGNvbnQoZXhwcmVzc2lvbiwgZnVuYXJnKVxuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KGZ1bmFyZyk7XG4gICAgaWYgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGZ1bmFyZyk7IH1cbiAgICBpZiAoaXNUUyAmJiB0eXBlID09IFwidGhpc1wiKSByZXR1cm4gY29udChtYXliZXR5cGUsIG1heWJlQXNzaWduKVxuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJldHlwZSwgbWF5YmVBc3NpZ24pO1xuICB9XG4gIGZ1bmN0aW9uIGNsYXNzRXhwcmVzc2lvbih0eXBlLCB2YWx1ZSkge1xuICAgIC8vIENsYXNzIGV4cHJlc3Npb25zIG1heSBoYXZlIGFuIG9wdGlvbmFsIG5hbWUuXG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKTtcbiAgICByZXR1cm4gY2xhc3NOYW1lQWZ0ZXIodHlwZSwgdmFsdWUpO1xuICB9XG4gIGZ1bmN0aW9uIGNsYXNzTmFtZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoY2xhc3NOYW1lQWZ0ZXIpO31cbiAgfVxuICBmdW5jdGlvbiBjbGFzc05hbWVBZnRlcih0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVwYXJhbSwgXCI+XCIpLCBwb3BsZXgsIGNsYXNzTmFtZUFmdGVyKVxuICAgIGlmICh2YWx1ZSA9PSBcImV4dGVuZHNcIiB8fCB2YWx1ZSA9PSBcImltcGxlbWVudHNcIiB8fCAoaXNUUyAmJiB0eXBlID09IFwiLFwiKSkge1xuICAgICAgaWYgKHZhbHVlID09IFwiaW1wbGVtZW50c1wiKSBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGlzVFMgPyB0eXBlZXhwciA6IGV4cHJlc3Npb24sIGNsYXNzTmFtZUFmdGVyKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjbGFzc0JvZHksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NCb2R5KHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiIHx8XG4gICAgICAgICh0eXBlID09IFwidmFyaWFibGVcIiAmJlxuICAgICAgICAgKHZhbHVlID09IFwic3RhdGljXCIgfHwgdmFsdWUgPT0gXCJnZXRcIiB8fCB2YWx1ZSA9PSBcInNldFwiIHx8IChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSkgJiZcbiAgICAgICAgIGN4LnN0cmVhbS5tYXRjaCgvXlxccytbXFx3JFxceGExLVxcdWZmZmZdLywgZmFsc2UpKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgICByZXR1cm4gY29udChjbGFzc0JvZHkpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgY3guc3R5bGUgPT0gXCJrZXl3b3JkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICAgIHJldHVybiBjb250KGlzVFMgPyBjbGFzc2ZpZWxkIDogZnVuY3Rpb25kZWYsIGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwibnVtYmVyXCIgfHwgdHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29udChpc1RTID8gY2xhc3NmaWVsZCA6IGZ1bmN0aW9uZGVmLCBjbGFzc0JvZHkpO1xuICAgIGlmICh0eXBlID09IFwiW1wiKVxuICAgICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgbWF5YmV0eXBlLCBleHBlY3QoXCJdXCIpLCBpc1RTID8gY2xhc3NmaWVsZCA6IGZ1bmN0aW9uZGVmLCBjbGFzc0JvZHkpXG4gICAgaWYgKHZhbHVlID09IFwiKlwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmIChpc1RTICYmIHR5cGUgPT0gXCIoXCIpIHJldHVybiBwYXNzKGZ1bmN0aW9uZGVjbCwgY2xhc3NCb2R5KVxuICAgIGlmICh0eXBlID09IFwiO1wiIHx8IHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBjbGFzc0JvZHkpXG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NmaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoY2xhc3NmaWVsZClcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIG1heWJlQXNzaWduKVxuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpXG4gICAgdmFyIGNvbnRleHQgPSBjeC5zdGF0ZS5sZXhpY2FsLnByZXYsIGlzSW50ZXJmYWNlID0gY29udGV4dCAmJiBjb250ZXh0LmluZm8gPT0gXCJpbnRlcmZhY2VcIlxuICAgIHJldHVybiBwYXNzKGlzSW50ZXJmYWNlID8gZnVuY3Rpb25kZWNsIDogZnVuY3Rpb25kZWYpXG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJFeHBvcnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7IH1cbiAgICBpZiAodmFsdWUgPT0gXCJkZWZhdWx0XCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIikpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cG9ydEZpZWxkLCBcIn1cIiksIG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7XG4gICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50KTtcbiAgfVxuICBmdW5jdGlvbiBleHBvcnRGaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImFzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cGVjdChcInZhcmlhYmxlXCIpKTsgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEsIGV4cG9ydEZpZWxkKTtcbiAgfVxuICBmdW5jdGlvbiBhZnRlckltcG9ydCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIHBhc3MoaW1wb3J0U3BlYywgbWF5YmVNb3JlSW1wb3J0cywgbWF5YmVGcm9tKTtcbiAgfVxuICBmdW5jdGlvbiBpbXBvcnRTcGVjKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250Q29tbWFzZXAoaW1wb3J0U3BlYywgXCJ9XCIpO1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmVnaXN0ZXIodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgcmV0dXJuIGNvbnQobWF5YmVBcyk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVNb3JlSW1wb3J0cyh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KGltcG9ydFNwZWMsIG1heWJlTW9yZUltcG9ydHMpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVBcyhfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChpbXBvcnRTcGVjKTsgfVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJmcm9tXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9XG4gIH1cbiAgZnVuY3Rpb24gYXJyYXlMaXRlcmFsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIl1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgXCJdXCIpKTtcbiAgfVxuICBmdW5jdGlvbiBlbnVtZGVmKCkge1xuICAgIHJldHVybiBwYXNzKHB1c2hsZXgoXCJmb3JtXCIpLCBwYXR0ZXJuLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiKSwgY29tbWFzZXAoZW51bW1lbWJlciwgXCJ9XCIpLCBwb3BsZXgsIHBvcGxleClcbiAgfVxuICBmdW5jdGlvbiBlbnVtbWVtYmVyKCkge1xuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJlQXNzaWduKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiIHx8XG4gICAgICBpc09wZXJhdG9yQ2hhci50ZXN0KHRleHRBZnRlci5jaGFyQXQoMCkpIHx8XG4gICAgICAvWywuXS8udGVzdCh0ZXh0QWZ0ZXIuY2hhckF0KDApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIGJhY2tVcCkge1xuICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkJhc2UgJiZcbiAgICAgIC9eKD86b3BlcmF0b3J8c29mfGtleXdvcmQgW2JjZF18Y2FzZXxuZXd8ZXhwb3J0fGRlZmF1bHR8c3ByZWFkfFtcXFt7fVxcKCw7Ol18PT4pJC8udGVzdChzdGF0ZS5sYXN0VHlwZSkgfHxcbiAgICAgIChzdGF0ZS5sYXN0VHlwZSA9PSBcInF1YXNpXCIgJiYgL1xce1xccyokLy50ZXN0KHN0cmVhbS5zdHJpbmcuc2xpY2UoMCwgc3RyZWFtLnBvcyAtIChiYWNrVXAgfHwgMCkpKSlcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICBsYXN0VHlwZTogXCJzb2ZcIixcbiAgICAgICAgY2M6IFtdLFxuICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJibG9ja1wiLCBmYWxzZSksXG4gICAgICAgIGxvY2FsVmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyxcbiAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiBuZXcgQ29udGV4dChudWxsLCBudWxsLCBmYWxzZSksXG4gICAgICAgIGluZGVudGVkOiBiYXNlY29sdW1uIHx8IDBcbiAgICAgIH07XG4gICAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgdHlwZW9mIHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzID09IFwib2JqZWN0XCIpXG4gICAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFsVmFycztcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikpXG4gICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5Db21tZW50ICYmIHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHR5cGUgPT0gXCJjb21tZW50XCIpIHJldHVybiBzdHlsZTtcbiAgICAgIHN0YXRlLmxhc3RUeXBlID0gdHlwZSA9PSBcIm9wZXJhdG9yXCIgJiYgKGNvbnRlbnQgPT0gXCIrK1wiIHx8IGNvbnRlbnQgPT0gXCItLVwiKSA/IFwiaW5jZGVjXCIgOiB0eXBlO1xuICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsIHRvcFxuICAgICAgLy8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2NvcGUgcG9wc1xuICAgICAgaWYgKCEvXlxccyplbHNlXFxiLy50ZXN0KHRleHRBZnRlcikpIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgYyA9IHN0YXRlLmNjW2ldO1xuICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7XG4gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobGV4aWNhbC50eXBlID09IFwic3RhdFwiIHx8IGxleGljYWwudHlwZSA9PSBcImZvcm1cIikgJiZcbiAgICAgICAgICAgICAoZmlyc3RDaGFyID09IFwifVwiIHx8ICgodG9wID0gc3RhdGUuY2Nbc3RhdGUuY2MubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3AgPT0gbWF5YmVvcGVyYXRvckNvbW1hIHx8IHRvcCA9PSBtYXliZW9wZXJhdG9yTm9Db21tYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9eWyxcXC49K1xcLSo6P1tcXChdLy50ZXN0KHRleHRBZnRlcikpKSlcbiAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJldjtcbiAgICAgIGlmIChzdGF0ZW1lbnRJbmRlbnQgJiYgbGV4aWNhbC50eXBlID09IFwiKVwiICYmIGxleGljYWwucHJldi50eXBlID09IFwic3RhdFwiKVxuICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTtcblxuICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJkZWZcIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiID8gbGV4aWNhbC5pbmZvLmxlbmd0aCArIDEgOiAwKTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIgJiYgZmlyc3RDaGFyID09IFwie1wiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJzdGF0XCIpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSBcInN3aXRjaFwiICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2ggIT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDoganNvbk1vZGUgPyBudWxsIDogXCIqL1wiLFxuICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBqc29uTW9kZSA/IG51bGwgOiBcIiAqIFwiLFxuICAgIGxpbmVDb21tZW50OiBqc29uTW9kZSA/IG51bGwgOiBcIi8vXCIsXG4gICAgZm9sZDogXCJicmFjZVwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG5cbiAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/IFwianNvblwiIDogXCJqYXZhc2NyaXB0XCIsXG4gICAganNvbmxkTW9kZToganNvbmxkTW9kZSxcbiAgICBqc29uTW9kZToganNvbk1vZGUsXG5cbiAgICBleHByZXNzaW9uQWxsb3dlZDogZXhwcmVzc2lvbkFsbG93ZWQsXG5cbiAgICBza2lwRXhwcmVzc2lvbjogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHZhciB0b3AgPSBzdGF0ZS5jY1tzdGF0ZS5jYy5sZW5ndGggLSAxXVxuICAgICAgaWYgKHRvcCA9PSBleHByZXNzaW9uIHx8IHRvcCA9PSBleHByZXNzaW9uTm9Db21tYSkgc3RhdGUuY2MucG9wKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLCBcImphdmFzY3JpcHRcIiwgL1tcXHckXS8pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9lY21hc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29ubGQ6IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qKlxuICogVGFnLWNsb3NlciBleHRlbnNpb24gZm9yIENvZGVNaXJyb3IuXG4gKlxuICogVGhpcyBleHRlbnNpb24gYWRkcyBhbiBcImF1dG9DbG9zZVRhZ3NcIiBvcHRpb24gdGhhdCBjYW4gYmUgc2V0IHRvXG4gKiBlaXRoZXIgdHJ1ZSB0byBnZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIG9yIGFuIG9iamVjdCB0byBmdXJ0aGVyXG4gKiBjb25maWd1cmUgaXRzIGJlaGF2aW9yLlxuICpcbiAqIFRoZXNlIGFyZSBzdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiBgd2hlbkNsb3NpbmdgIChkZWZhdWx0IHRydWUpXG4gKiAgIFdoZXRoZXIgdG8gYXV0b2Nsb3NlIHdoZW4gdGhlICcvJyBvZiBhIGNsb3NpbmcgdGFnIGlzIHR5cGVkLlxuICogYHdoZW5PcGVuaW5nYCAoZGVmYXVsdCB0cnVlKVxuICogICBXaGV0aGVyIHRvIGF1dG9jbG9zZSB0aGUgdGFnIHdoZW4gdGhlIGZpbmFsICc+JyBvZiBhbiBvcGVuaW5nXG4gKiAgIHRhZyBpcyB0eXBlZC5cbiAqIGBkb250Q2xvc2VUYWdzYCAoZGVmYXVsdCBpcyBlbXB0eSB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCBub3QgYmUgYXV0b2Nsb3NlZC5cbiAqIGBpbmRlbnRUYWdzYCAoZGVmYXVsdCBpcyBibG9jayB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCwgd2hlbiBvcGVuZWQsIGNhdXNlIGFcbiAqICAgYmxhbmsgbGluZSB0byBiZSBhZGRlZCBpbnNpZGUgdGhlIHRhZywgYW5kIHRoZSBibGFuayBsaW5lIGFuZFxuICogICBjbG9zaW5nIGxpbmUgdG8gYmUgaW5kZW50ZWQuXG4gKiBgZW1wdHlUYWdzYCAoZGVmYXVsdCBpcyBub25lKVxuICogICBBbiBhcnJheSBvZiBYTUwgdGFnIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGF1dG9jbG9zZWQgd2l0aCAnLz4nLlxuICpcbiAqIFNlZSBkZW1vcy9jbG9zZXRhZy5odG1sIGZvciBhIHVzYWdlIGV4YW1wbGUuXG4gKi9cblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSwgcmVxdWlyZShcIi4uL2ZvbGQveG1sLWZvbGRcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9mb2xkL3htbC1mb2xkXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge1xuICAgIGlmIChvbGQgIT0gQ29kZU1pcnJvci5Jbml0ICYmIG9sZClcbiAgICAgIGNtLnJlbW92ZUtleU1hcChcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICB2YXIgbWFwID0ge25hbWU6IFwiYXV0b0Nsb3NlVGFnc1wifTtcbiAgICBpZiAodHlwZW9mIHZhbCAhPSBcIm9iamVjdFwiIHx8IHZhbC53aGVuQ2xvc2luZylcbiAgICAgIG1hcFtcIicvJ1wiXSA9IGZ1bmN0aW9uKGNtKSB7IHJldHVybiBhdXRvQ2xvc2VTbGFzaChjbSk7IH07XG4gICAgaWYgKHR5cGVvZiB2YWwgIT0gXCJvYmplY3RcIiB8fCB2YWwud2hlbk9wZW5pbmcpXG4gICAgICBtYXBbXCInPidcIl0gPSBmdW5jdGlvbihjbSkgeyByZXR1cm4gYXV0b0Nsb3NlR1QoY20pOyB9O1xuICAgIGNtLmFkZEtleU1hcChtYXApO1xuICB9KTtcblxuICB2YXIgaHRtbERvbnRDbG9zZSA9IFtcImFyZWFcIiwgXCJiYXNlXCIsIFwiYnJcIiwgXCJjb2xcIiwgXCJjb21tYW5kXCIsIFwiZW1iZWRcIiwgXCJoclwiLCBcImltZ1wiLCBcImlucHV0XCIsIFwia2V5Z2VuXCIsIFwibGlua1wiLCBcIm1ldGFcIiwgXCJwYXJhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICBcInNvdXJjZVwiLCBcInRyYWNrXCIsIFwid2JyXCJdO1xuICB2YXIgaHRtbEluZGVudCA9IFtcImFwcGxldFwiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnV0dG9uXCIsIFwiZGl2XCIsIFwiZGxcIiwgXCJmaWVsZHNldFwiLCBcImZvcm1cIiwgXCJmcmFtZXNldFwiLCBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJodG1sXCIsIFwiaWZyYW1lXCIsIFwibGF5ZXJcIiwgXCJsZWdlbmRcIiwgXCJvYmplY3RcIiwgXCJvbFwiLCBcInBcIiwgXCJzZWxlY3RcIiwgXCJ0YWJsZVwiLCBcInVsXCJdO1xuXG4gIGZ1bmN0aW9uIGF1dG9DbG9zZUdUKGNtKSB7XG4gICAgaWYgKGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB2YXIgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKSwgcmVwbGFjZW1lbnRzID0gW107XG4gICAgdmFyIG9wdCA9IGNtLmdldE9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmhlYWQsIHRvayA9IGNtLmdldFRva2VuQXQocG9zKTtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGNtLmdldE1vZGUoKSwgdG9rLnN0YXRlKSwgc3RhdGUgPSBpbm5lci5zdGF0ZTtcbiAgICAgIHZhciB0YWdJbmZvID0gaW5uZXIubW9kZS54bWxDdXJyZW50VGFnICYmIGlubmVyLm1vZGUueG1sQ3VycmVudFRhZyhzdGF0ZSlcbiAgICAgIHZhciB0YWdOYW1lID0gdGFnSW5mbyAmJiB0YWdJbmZvLm5hbWVcbiAgICAgIGlmICghdGFnTmFtZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzc1xuXG4gICAgICB2YXIgaHRtbCA9IGlubmVyLm1vZGUuY29uZmlndXJhdGlvbiA9PSBcImh0bWxcIjtcbiAgICAgIHZhciBkb250Q2xvc2VUYWdzID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udENsb3NlVGFncykgfHwgKGh0bWwgJiYgaHRtbERvbnRDbG9zZSk7XG4gICAgICB2YXIgaW5kZW50VGFncyA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmluZGVudFRhZ3MpIHx8IChodG1sICYmIGh0bWxJbmRlbnQpO1xuXG4gICAgICBpZiAodG9rLmVuZCA+IHBvcy5jaCkgdGFnTmFtZSA9IHRhZ05hbWUuc2xpY2UoMCwgdGFnTmFtZS5sZW5ndGggLSB0b2suZW5kICsgcG9zLmNoKTtcbiAgICAgIHZhciBsb3dlclRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBEb24ndCBwcm9jZXNzIHRoZSAnPicgYXQgdGhlIGVuZCBvZiBhbiBlbmQtdGFnIG9yIHNlbGYtY2xvc2luZyB0YWdcbiAgICAgIGlmICghdGFnTmFtZSB8fFxuICAgICAgICAgIHRvay50eXBlID09IFwic3RyaW5nXCIgJiYgKHRvay5lbmQgIT0gcG9zLmNoIHx8ICEvW1xcXCJcXCddLy50ZXN0KHRvay5zdHJpbmcuY2hhckF0KHRvay5zdHJpbmcubGVuZ3RoIC0gMSkpIHx8IHRvay5zdHJpbmcubGVuZ3RoID09IDEpIHx8XG4gICAgICAgICAgdG9rLnR5cGUgPT0gXCJ0YWdcIiAmJiB0YWdJbmZvLmNsb3NlIHx8XG4gICAgICAgICAgdG9rLnN0cmluZy5pbmRleE9mKFwiL1wiKSA9PSAocG9zLmNoIC0gdG9rLnN0YXJ0IC0gMSkgfHwgLy8gbWF0Y2ggc29tZXRoaW5nIGxpa2UgPHNvbWVUYWdOYW1lIC8+XG4gICAgICAgICAgZG9udENsb3NlVGFncyAmJiBpbmRleE9mKGRvbnRDbG9zZVRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMSB8fFxuICAgICAgICAgIGNsb3NpbmdUYWdFeGlzdHMoY20sIGlubmVyLm1vZGUueG1sQ3VycmVudENvbnRleHQgJiYgaW5uZXIubW9kZS54bWxDdXJyZW50Q29udGV4dChzdGF0ZSkgfHwgW10sIHRhZ05hbWUsIHBvcywgdHJ1ZSkpXG4gICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG5cbiAgICAgIHZhciBlbXB0eVRhZ3MgPSB0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmVtcHR5VGFncztcbiAgICAgIGlmIChlbXB0eVRhZ3MgJiYgaW5kZXhPZihlbXB0eVRhZ3MsIHRhZ05hbWUpID4gLTEpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0geyB0ZXh0OiBcIi8+XCIsIG5ld1BvczogQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDIpIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZW50ID0gaW5kZW50VGFncyAmJiBpbmRleE9mKGluZGVudFRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMTtcbiAgICAgIHJlcGxhY2VtZW50c1tpXSA9IHtpbmRlbnQ6IGluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIj5cIiArIChpbmRlbnQgPyBcIlxcblxcblwiIDogXCJcIikgKyBcIjwvXCIgKyB0YWdOYW1lICsgXCI+XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zOiBpbmRlbnQgPyBDb2RlTWlycm9yLlBvcyhwb3MubGluZSArIDEsIDApIDogQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpfTtcbiAgICB9XG5cbiAgICB2YXIgZG9udEluZGVudE9uQXV0b0Nsb3NlID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udEluZGVudE9uQXV0b0Nsb3NlKTtcbiAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgaW5mbyA9IHJlcGxhY2VtZW50c1tpXTtcbiAgICAgIGNtLnJlcGxhY2VSYW5nZShpbmZvLnRleHQsIHJhbmdlc1tpXS5oZWFkLCByYW5nZXNbaV0uYW5jaG9yLCBcIitpbnNlcnRcIik7XG4gICAgICB2YXIgc2VsID0gY20ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgwKTtcbiAgICAgIHNlbFtpXSA9IHtoZWFkOiBpbmZvLm5ld1BvcywgYW5jaG9yOiBpbmZvLm5ld1Bvc307XG4gICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbCk7XG4gICAgICBpZiAoIWRvbnRJbmRlbnRPbkF1dG9DbG9zZSAmJiBpbmZvLmluZGVudCkge1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUsIG51bGwsIHRydWUpO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUgKyAxLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvQ2xvc2VDdXJyZW50KGNtLCB0eXBpbmdTbGFzaCkge1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICB2YXIgaGVhZCA9IHR5cGluZ1NsYXNoID8gXCIvXCIgOiBcIjwvXCI7XG4gICAgdmFyIG9wdCA9IGNtLmdldE9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgdmFyIGRvbnRJbmRlbnRPbkF1dG9DbG9zZSA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmRvbnRJbmRlbnRPblNsYXNoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBwb3MgPSByYW5nZXNbaV0uaGVhZCwgdG9rID0gY20uZ2V0VG9rZW5BdChwb3MpO1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoY20uZ2V0TW9kZSgpLCB0b2suc3RhdGUpLCBzdGF0ZSA9IGlubmVyLnN0YXRlO1xuICAgICAgaWYgKHR5cGluZ1NsYXNoICYmICh0b2sudHlwZSA9PSBcInN0cmluZ1wiIHx8IHRvay5zdHJpbmcuY2hhckF0KDApICE9IFwiPFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvay5zdGFydCAhPSBwb3MuY2ggLSAxKSlcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIC8vIEtsdWRnZSB0byBnZXQgYXJvdW5kIHRoZSBmYWN0IHRoYXQgd2UgYXJlIG5vdCBpbiBYTUwgbW9kZVxuICAgICAgLy8gd2hlbiBjb21wbGV0aW5nIGluIEpTL0NTUyBzbmlwcGV0IGluIGh0bWxtaXhlZCBtb2RlLiBEb2VzIG5vdFxuICAgICAgLy8gd29yayBmb3Igb3RoZXIgWE1MIGVtYmVkZGVkIGxhbmd1YWdlcyAodGhlcmUgaXMgbm8gZ2VuZXJhbFxuICAgICAgLy8gd2F5IHRvIGdvIGZyb20gYSBtaXhlZCBtb2RlIHRvIGl0cyBjdXJyZW50IFhNTCBzdGF0ZSkuXG4gICAgICB2YXIgcmVwbGFjZW1lbnQsIG1peGVkID0gaW5uZXIubW9kZS5uYW1lICE9IFwieG1sXCIgJiYgY20uZ2V0TW9kZSgpLm5hbWUgPT0gXCJodG1sbWl4ZWRcIlxuICAgICAgaWYgKG1peGVkICYmIGlubmVyLm1vZGUubmFtZSA9PSBcImphdmFzY3JpcHRcIikge1xuICAgICAgICByZXBsYWNlbWVudCA9IGhlYWQgKyBcInNjcmlwdFwiO1xuICAgICAgfSBlbHNlIGlmIChtaXhlZCAmJiBpbm5lci5tb2RlLm5hbWUgPT0gXCJjc3NcIikge1xuICAgICAgICByZXBsYWNlbWVudCA9IGhlYWQgKyBcInN0eWxlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY29udGV4dCA9IGlubmVyLm1vZGUueG1sQ3VycmVudENvbnRleHQgJiYgaW5uZXIubW9kZS54bWxDdXJyZW50Q29udGV4dChzdGF0ZSlcbiAgICAgICAgaWYgKCFjb250ZXh0IHx8IChjb250ZXh0Lmxlbmd0aCAmJiBjbG9zaW5nVGFnRXhpc3RzKGNtLCBjb250ZXh0LCBjb250ZXh0W2NvbnRleHQubGVuZ3RoIC0gMV0sIHBvcykpKVxuICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICAgIHJlcGxhY2VtZW50ID0gaGVhZCArIGNvbnRleHRbY29udGV4dC5sZW5ndGggLSAxXVxuICAgICAgfVxuICAgICAgaWYgKGNtLmdldExpbmUocG9zLmxpbmUpLmNoYXJBdCh0b2suZW5kKSAhPSBcIj5cIikgcmVwbGFjZW1lbnQgKz0gXCI+XCI7XG4gICAgICByZXBsYWNlbWVudHNbaV0gPSByZXBsYWNlbWVudDtcbiAgICB9XG4gICAgY20ucmVwbGFjZVNlbGVjdGlvbnMocmVwbGFjZW1lbnRzKTtcbiAgICByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGlmICghZG9udEluZGVudE9uQXV0b0Nsb3NlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgaWYgKGkgPT0gcmFuZ2VzLmxlbmd0aCAtIDEgfHwgcmFuZ2VzW2ldLmhlYWQubGluZSA8IHJhbmdlc1tpICsgMV0uaGVhZC5saW5lKVxuICAgICAgICAgICAgICAgIGNtLmluZGVudExpbmUocmFuZ2VzW2ldLmhlYWQubGluZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXV0b0Nsb3NlU2xhc2goY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHJldHVybiBhdXRvQ2xvc2VDdXJyZW50KGNtLCB0cnVlKTtcbiAgfVxuXG4gIENvZGVNaXJyb3IuY29tbWFuZHMuY2xvc2VUYWcgPSBmdW5jdGlvbihjbSkgeyByZXR1cm4gYXV0b0Nsb3NlQ3VycmVudChjbSk7IH07XG5cbiAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHtcbiAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsdCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSlcbiAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gSWYgeG1sLWZvbGQgaXMgbG9hZGVkLCB3ZSB1c2UgaXRzIGZ1bmN0aW9uYWxpdHkgdG8gdHJ5IGFuZCB2ZXJpZnlcbiAgLy8gd2hldGhlciBhIGdpdmVuIHRhZyBpcyBhY3R1YWxseSB1bmNsb3NlZC5cbiAgZnVuY3Rpb24gY2xvc2luZ1RhZ0V4aXN0cyhjbSwgY29udGV4dCwgdGFnTmFtZSwgcG9zLCBuZXdUYWcpIHtcbiAgICBpZiAoIUNvZGVNaXJyb3Iuc2NhbkZvckNsb3NpbmdUYWcpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSArIDEsIHBvcy5saW5lICsgNTAwKTtcbiAgICB2YXIgbmV4dENsb3NlID0gQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZyhjbSwgcG9zLCBudWxsLCBlbmQpO1xuICAgIGlmICghbmV4dENsb3NlIHx8IG5leHRDbG9zZS50YWcgIT0gdGFnTmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIElmIHRoZSBpbW1lZGlhdGUgd3JhcHBpbmcgY29udGV4dCBjb250YWlucyBvbkN4IGluc3RhbmNlcyBvZlxuICAgIC8vIHRoZSBzYW1lIHRhZywgYSBjbG9zaW5nIHRhZyBvbmx5IGV4aXN0cyBpZiB0aGVyZSBhcmUgYXQgbGVhc3RcbiAgICAvLyB0aGF0IG1hbnkgY2xvc2luZyB0YWdzIG9mIHRoYXQgdHlwZSBmb2xsb3dpbmcuXG4gICAgdmFyIG9uQ3ggPSBuZXdUYWcgPyAxIDogMFxuICAgIGZvciAodmFyIGkgPSBjb250ZXh0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29udGV4dFtpXSA9PSB0YWdOYW1lKSArK29uQ3hcbiAgICAgIGVsc2UgYnJlYWtcbiAgICB9XG4gICAgcG9zID0gbmV4dENsb3NlLnRvO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgb25DeDsgaSsrKSB7XG4gICAgICB2YXIgbmV4dCA9IENvZGVNaXJyb3Iuc2NhbkZvckNsb3NpbmdUYWcoY20sIHBvcywgbnVsbCwgZW5kKTtcbiAgICAgIGlmICghbmV4dCB8fCBuZXh0LnRhZyAhPSB0YWdOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICBwb3MgPSBuZXh0LnRvO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgbGlzdFJFID0gL14oXFxzKikoPls+IF0qfFsqKy1dIFxcW1t4IF1cXF1cXHN8WyorLV1cXHN8KFxcZCspKFsuKV0pKShcXHMqKS8sXG4gICAgICBlbXB0eUxpc3RSRSA9IC9eKFxccyopKD5bPiBdKnxbKistXSBcXFtbeCBdXFxdfFsqKy1dfChcXGQrKVsuKV0pKFxccyopJC8sXG4gICAgICB1bm9yZGVyZWRMaXN0UkUgPSAvWyorLV1cXHMvO1xuXG4gIENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0ID0gZnVuY3Rpb24oY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBvcyA9IHJhbmdlc1tpXS5oZWFkO1xuXG4gICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gTWFya2Rvd24gbW9kZSwgZmFsbCBiYWNrIHRvIG5vcm1hbCBuZXdsaW5lQW5kSW5kZW50XG4gICAgICB2YXIgZW9sU3RhdGUgPSBjbS5nZXRTdGF0ZUFmdGVyKHBvcy5saW5lKTtcbiAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGNtLmdldE1vZGUoKSwgZW9sU3RhdGUpO1xuICAgICAgaWYgKGlubmVyLm1vZGUubmFtZSAhPT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW9sU3RhdGUgPSBpbm5lci5zdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluTGlzdCA9IGVvbFN0YXRlLmxpc3QgIT09IGZhbHNlO1xuICAgICAgdmFyIGluUXVvdGUgPSBlb2xTdGF0ZS5xdW90ZSAhPT0gMDtcblxuICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKHBvcy5saW5lKSwgbWF0Y2ggPSBsaXN0UkUuZXhlYyhsaW5lKTtcbiAgICAgIHZhciBjdXJzb3JCZWZvcmVCdWxsZXQgPSAvXlxccyokLy50ZXN0KGxpbmUuc2xpY2UoMCwgcG9zLmNoKSk7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpIHx8ICghaW5MaXN0ICYmICFpblF1b3RlKSB8fCAhbWF0Y2ggfHwgY3Vyc29yQmVmb3JlQnVsbGV0KSB7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwibmV3bGluZUFuZEluZGVudFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVtcHR5TGlzdFJFLnRlc3QobGluZSkpIHtcbiAgICAgICAgdmFyIGVuZE9mUXVvdGUgPSBpblF1b3RlICYmIC8+XFxzKiQvLnRlc3QobGluZSlcbiAgICAgICAgdmFyIGVuZE9mTGlzdCA9ICEvPlxccyokLy50ZXN0KGxpbmUpXG4gICAgICAgIGlmIChlbmRPZlF1b3RlIHx8IGVuZE9mTGlzdCkgY20ucmVwbGFjZVJhbmdlKFwiXCIsIHtcbiAgICAgICAgICBsaW5lOiBwb3MubGluZSwgY2g6IDBcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLCBjaDogcG9zLmNoICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBtYXRjaFsxXSwgYWZ0ZXIgPSBtYXRjaFs1XTtcbiAgICAgICAgdmFyIG51bWJlcmVkID0gISh1bm9yZGVyZWRMaXN0UkUudGVzdChtYXRjaFsyXSkgfHwgbWF0Y2hbMl0uaW5kZXhPZihcIj5cIikgPj0gMCk7XG4gICAgICAgIHZhciBidWxsZXQgPSBudW1iZXJlZCA/IChwYXJzZUludChtYXRjaFszXSwgMTApICsgMSkgKyBtYXRjaFs0XSA6IG1hdGNoWzJdLnJlcGxhY2UoXCJ4XCIsIFwiIFwiKTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIiArIGluZGVudCArIGJ1bGxldCArIGFmdGVyO1xuXG4gICAgICAgIGlmIChudW1iZXJlZCkgaW5jcmVtZW50UmVtYWluaW5nTWFya2Rvd25MaXN0TnVtYmVycyhjbSwgcG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhyZXBsYWNlbWVudHMpO1xuICB9O1xuXG4gIC8vIEF1dG8tdXBkYXRpbmcgTWFya2Rvd24gbGlzdCBudW1iZXJzIHdoZW4gYSBuZXcgaXRlbSBpcyBhZGRlZCB0byB0aGVcbiAgLy8gbWlkZGxlIG9mIGEgbGlzdFxuICBmdW5jdGlvbiBpbmNyZW1lbnRSZW1haW5pbmdNYXJrZG93bkxpc3ROdW1iZXJzKGNtLCBwb3MpIHtcbiAgICB2YXIgc3RhcnRMaW5lID0gcG9zLmxpbmUsIGxvb2tBaGVhZCA9IDAsIHNraXBDb3VudCA9IDA7XG4gICAgdmFyIHN0YXJ0SXRlbSA9IGxpc3RSRS5leGVjKGNtLmdldExpbmUoc3RhcnRMaW5lKSksIHN0YXJ0SW5kZW50ID0gc3RhcnRJdGVtWzFdO1xuXG4gICAgZG8ge1xuICAgICAgbG9va0FoZWFkICs9IDE7XG4gICAgICB2YXIgbmV4dExpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsb29rQWhlYWQ7XG4gICAgICB2YXIgbmV4dExpbmUgPSBjbS5nZXRMaW5lKG5leHRMaW5lTnVtYmVyKSwgbmV4dEl0ZW0gPSBsaXN0UkUuZXhlYyhuZXh0TGluZSk7XG5cbiAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHRJdGVtWzFdO1xuICAgICAgICB2YXIgbmV3TnVtYmVyID0gKHBhcnNlSW50KHN0YXJ0SXRlbVszXSwgMTApICsgbG9va0FoZWFkIC0gc2tpcENvdW50KTtcbiAgICAgICAgdmFyIG5leHROdW1iZXIgPSAocGFyc2VJbnQobmV4dEl0ZW1bM10sIDEwKSksIGl0ZW1OdW1iZXIgPSBuZXh0TnVtYmVyO1xuXG4gICAgICAgIGlmIChzdGFydEluZGVudCA9PT0gbmV4dEluZGVudCAmJiAhaXNOYU4obmV4dE51bWJlcikpIHtcbiAgICAgICAgICBpZiAobmV3TnVtYmVyID09PSBuZXh0TnVtYmVyKSBpdGVtTnVtYmVyID0gbmV4dE51bWJlciArIDE7XG4gICAgICAgICAgaWYgKG5ld051bWJlciA+IG5leHROdW1iZXIpIGl0ZW1OdW1iZXIgPSBuZXdOdW1iZXIgKyAxO1xuICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgIG5leHRMaW5lLnJlcGxhY2UobGlzdFJFLCBuZXh0SW5kZW50ICsgaXRlbU51bWJlciArIG5leHRJdGVtWzRdICsgbmV4dEl0ZW1bNV0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogMFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogbmV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0YXJ0SW5kZW50Lmxlbmd0aCA+IG5leHRJbmRlbnQubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHJ1biBpZiB0aGUgbmV4dCBsaW5lIGltbWVkaWF0bGV5IGluZGVudHMsIGFzIGl0IGlzXG4gICAgICAgICAgLy8gbm90IGNsZWFyIG9mIHRoZSB1c2VycyBpbnRlbnRpb24gKG5ldyBpbmRlbnRlZCBpdGVtIG9yIHNhbWUgbGV2ZWwpXG4gICAgICAgICAgaWYgKChzdGFydEluZGVudC5sZW5ndGggPCBuZXh0SW5kZW50Lmxlbmd0aCkgJiYgKGxvb2tBaGVhZCA9PT0gMSkpIHJldHVybjtcbiAgICAgICAgICBza2lwQ291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRJdGVtKTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgcGFpcnM6IFwiKClbXXt9JydcXFwiXFxcIlwiLFxuICAgIGNsb3NlQmVmb3JlOiBcIildfSdcXFwiOjs+XCIsXG4gICAgdHJpcGxlczogXCJcIixcbiAgICBleHBsb2RlOiBcIltde31cIlxuICB9O1xuXG4gIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvcztcblxuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcImF1dG9DbG9zZUJyYWNrZXRzXCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICBpZiAob2xkICYmIG9sZCAhPSBDb2RlTWlycm9yLkluaXQpIHtcbiAgICAgIGNtLnJlbW92ZUtleU1hcChrZXlNYXApO1xuICAgICAgY20uc3RhdGUuY2xvc2VCcmFja2V0cyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2YWwpIHtcbiAgICAgIGVuc3VyZUJvdW5kKGdldE9wdGlvbih2YWwsIFwicGFpcnNcIikpXG4gICAgICBjbS5zdGF0ZS5jbG9zZUJyYWNrZXRzID0gdmFsO1xuICAgICAgY20uYWRkS2V5TWFwKGtleU1hcCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb24oY29uZiwgbmFtZSkge1xuICAgIGlmIChuYW1lID09IFwicGFpcnNcIiAmJiB0eXBlb2YgY29uZiA9PSBcInN0cmluZ1wiKSByZXR1cm4gY29uZjtcbiAgICBpZiAodHlwZW9mIGNvbmYgPT0gXCJvYmplY3RcIiAmJiBjb25mW25hbWVdICE9IG51bGwpIHJldHVybiBjb25mW25hbWVdO1xuICAgIHJldHVybiBkZWZhdWx0c1tuYW1lXTtcbiAgfVxuXG4gIHZhciBrZXlNYXAgPSB7QmFja3NwYWNlOiBoYW5kbGVCYWNrc3BhY2UsIEVudGVyOiBoYW5kbGVFbnRlcn07XG4gIGZ1bmN0aW9uIGVuc3VyZUJvdW5kKGNoYXJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoID0gY2hhcnMuY2hhckF0KGkpLCBrZXkgPSBcIidcIiArIGNoICsgXCInXCJcbiAgICAgIGlmICgha2V5TWFwW2tleV0pIGtleU1hcFtrZXldID0gaGFuZGxlcihjaClcbiAgICB9XG4gIH1cbiAgZW5zdXJlQm91bmQoZGVmYXVsdHMucGFpcnMgKyBcImBcIilcblxuICBmdW5jdGlvbiBoYW5kbGVyKGNoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7IHJldHVybiBoYW5kbGVDaGFyKGNtLCBjaCk7IH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb25maWcoY20pIHtcbiAgICB2YXIgZGVmbHQgPSBjbS5zdGF0ZS5jbG9zZUJyYWNrZXRzO1xuICAgIGlmICghZGVmbHQgfHwgZGVmbHQub3ZlcnJpZGUpIHJldHVybiBkZWZsdDtcbiAgICB2YXIgbW9kZSA9IGNtLmdldE1vZGVBdChjbS5nZXRDdXJzb3IoKSk7XG4gICAgcmV0dXJuIG1vZGUuY2xvc2VCcmFja2V0cyB8fCBkZWZsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUJhY2tzcGFjZShjbSkge1xuICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTtcbiAgICBpZiAoIWNvbmYgfHwgY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIHBhaXJzID0gZ2V0T3B0aW9uKGNvbmYsIFwicGFpcnNcIik7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTtcbiAgICAgIGlmICghYXJvdW5kIHx8IHBhaXJzLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGN1ciA9IHJhbmdlc1tpXS5oZWFkO1xuICAgICAgY20ucmVwbGFjZVJhbmdlKFwiXCIsIFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSksIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSksIFwiK2RlbGV0ZVwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFbnRlcihjbSkge1xuICAgIHZhciBjb25mID0gZ2V0Q29uZmlnKGNtKTtcbiAgICB2YXIgZXhwbG9kZSA9IGNvbmYgJiYgZ2V0T3B0aW9uKGNvbmYsIFwiZXhwbG9kZVwiKTtcbiAgICBpZiAoIWV4cGxvZGUgfHwgY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghcmFuZ2VzW2ldLmVtcHR5KCkpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB2YXIgYXJvdW5kID0gY2hhcnNBcm91bmQoY20sIHJhbmdlc1tpXS5oZWFkKTtcbiAgICAgIGlmICghYXJvdW5kIHx8IGV4cGxvZGUuaW5kZXhPZihhcm91bmQpICUgMiAhPSAwKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIH1cbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZXNlcCA9IGNtLmxpbmVTZXBhcmF0b3IoKSB8fCBcIlxcblwiO1xuICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsaW5lc2VwICsgbGluZXNlcCwgbnVsbCk7XG4gICAgICBjbS5leGVjQ29tbWFuZChcImdvQ2hhckxlZnRcIik7XG4gICAgICByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpbmUgPSByYW5nZXNbaV0uaGVhZC5saW5lO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUsIG51bGwsIHRydWUpO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGxpbmUgKyAxLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRyYWN0U2VsZWN0aW9uKHNlbCkge1xuICAgIHZhciBpbnZlcnRlZCA9IENvZGVNaXJyb3IuY21wUG9zKHNlbC5hbmNob3IsIHNlbC5oZWFkKSA+IDA7XG4gICAgcmV0dXJuIHthbmNob3I6IG5ldyBQb3Moc2VsLmFuY2hvci5saW5lLCBzZWwuYW5jaG9yLmNoICsgKGludmVydGVkID8gLTEgOiAxKSksXG4gICAgICAgICAgICBoZWFkOiBuZXcgUG9zKHNlbC5oZWFkLmxpbmUsIHNlbC5oZWFkLmNoICsgKGludmVydGVkID8gMSA6IC0xKSl9O1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQ2hhcihjbSwgY2gpIHtcbiAgICB2YXIgY29uZiA9IGdldENvbmZpZyhjbSk7XG4gICAgaWYgKCFjb25mIHx8IGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCBcInBhaXJzXCIpO1xuICAgIHZhciBwb3MgPSBwYWlycy5pbmRleE9mKGNoKTtcbiAgICBpZiAocG9zID09IC0xKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgdmFyIGNsb3NlQmVmb3JlID0gZ2V0T3B0aW9uKGNvbmYsXCJjbG9zZUJlZm9yZVwiKTtcblxuICAgIHZhciB0cmlwbGVzID0gZ2V0T3B0aW9uKGNvbmYsIFwidHJpcGxlc1wiKTtcblxuICAgIHZhciBpZGVudGljYWwgPSBwYWlycy5jaGFyQXQocG9zICsgMSkgPT0gY2g7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgdmFyIG9wZW5pbmcgPSBwb3MgJSAyID09IDA7XG5cbiAgICB2YXIgdHlwZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldLCBjdXIgPSByYW5nZS5oZWFkLCBjdXJUeXBlO1xuICAgICAgdmFyIG5leHQgPSBjbS5nZXRSYW5nZShjdXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMSkpO1xuICAgICAgaWYgKG9wZW5pbmcgJiYgIXJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgY3VyVHlwZSA9IFwic3Vycm91bmRcIjtcbiAgICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCB8fCAhb3BlbmluZykgJiYgbmV4dCA9PSBjaCkge1xuICAgICAgICBpZiAoaWRlbnRpY2FsICYmIHN0cmluZ1N0YXJ0c0FmdGVyKGNtLCBjdXIpKVxuICAgICAgICAgIGN1clR5cGUgPSBcImJvdGhcIjtcbiAgICAgICAgZWxzZSBpZiAodHJpcGxlcy5pbmRleE9mKGNoKSA+PSAwICYmIGNtLmdldFJhbmdlKGN1ciwgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAzKSkgPT0gY2ggKyBjaCArIGNoKVxuICAgICAgICAgIGN1clR5cGUgPSBcInNraXBUaHJlZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY3VyVHlwZSA9IFwic2tpcFwiO1xuICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwgJiYgY3VyLmNoID4gMSAmJiB0cmlwbGVzLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgY20uZ2V0UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyKSA9PSBjaCArIGNoKSB7XG4gICAgICAgIGlmIChjdXIuY2ggPiAyICYmIC9cXGJzdHJpbmcvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSkpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgICBjdXJUeXBlID0gXCJhZGRGb3VyXCI7XG4gICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCkge1xuICAgICAgICB2YXIgcHJldiA9IGN1ci5jaCA9PSAwID8gXCIgXCIgOiBjbS5nZXRSYW5nZShQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBjdXIpXG4gICAgICAgIGlmICghQ29kZU1pcnJvci5pc1dvcmRDaGFyKG5leHQpICYmIHByZXYgIT0gY2ggJiYgIUNvZGVNaXJyb3IuaXNXb3JkQ2hhcihwcmV2KSkgY3VyVHlwZSA9IFwiYm90aFwiO1xuICAgICAgICBlbHNlIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB9IGVsc2UgaWYgKG9wZW5pbmcgJiYgKG5leHQubGVuZ3RoID09PSAwIHx8IC9cXHMvLnRlc3QobmV4dCkgfHwgY2xvc2VCZWZvcmUuaW5kZXhPZihuZXh0KSA+IC0xKSkge1xuICAgICAgICBjdXJUeXBlID0gXCJib3RoXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgfVxuICAgICAgaWYgKCF0eXBlKSB0eXBlID0gY3VyVHlwZTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgIT0gY3VyVHlwZSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB9XG5cbiAgICB2YXIgbGVmdCA9IHBvcyAlIDIgPyBwYWlycy5jaGFyQXQocG9zIC0gMSkgOiBjaDtcbiAgICB2YXIgcmlnaHQgPSBwb3MgJSAyID8gY2ggOiBwYWlycy5jaGFyQXQocG9zICsgMSk7XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHR5cGUgPT0gXCJza2lwXCIpIHtcbiAgICAgICAgY20uZXhlY0NvbW1hbmQoXCJnb0NoYXJSaWdodFwiKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInNraXBUaHJlZVwiKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKVxuICAgICAgICAgIGNtLmV4ZWNDb21tYW5kKFwiZ29DaGFyUmlnaHRcIik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdXJyb3VuZFwiKSB7XG4gICAgICAgIHZhciBzZWxzID0gY20uZ2V0U2VsZWN0aW9ucygpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgc2Vsc1tpXSA9IGxlZnQgKyBzZWxzW2ldICsgcmlnaHQ7XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNlbHMsIFwiYXJvdW5kXCIpO1xuICAgICAgICBzZWxzID0gY20ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgc2Vsc1tpXSA9IGNvbnRyYWN0U2VsZWN0aW9uKHNlbHNbaV0pO1xuICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbHMpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYm90aFwiKSB7XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIHJpZ2h0LCBudWxsKTtcbiAgICAgICAgY20udHJpZ2dlckVsZWN0cmljKGxlZnQgKyByaWdodCk7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwiZ29DaGFyTGVmdFwiKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFkZEZvdXJcIikge1xuICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGxlZnQgKyBsZWZ0ICsgbGVmdCArIGxlZnQsIFwiYmVmb3JlXCIpO1xuICAgICAgICBjbS5leGVjQ29tbWFuZChcImdvQ2hhclJpZ2h0XCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhcnNBcm91bmQoY20sIHBvcykge1xuICAgIHZhciBzdHIgPSBjbS5nZXRSYW5nZShQb3MocG9zLmxpbmUsIHBvcy5jaCAtIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpKTtcbiAgICByZXR1cm4gc3RyLmxlbmd0aCA9PSAyID8gc3RyIDogbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ1N0YXJ0c0FmdGVyKGNtLCBwb3MpIHtcbiAgICB2YXIgdG9rZW4gPSBjbS5nZXRUb2tlbkF0KFBvcyhwb3MubGluZSwgcG9zLmNoICsgMSkpXG4gICAgcmV0dXJuIC9cXGJzdHJpbmcvLnRlc3QodG9rZW4udHlwZSkgJiYgdG9rZW4uc3RhcnQgPT0gcG9zLmNoICYmXG4gICAgICAocG9zLmNoID09IDAgfHwgIS9cXGJzdHJpbmcvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQocG9zKSkpXG4gIH1cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oXCJhbm5vdGF0ZVNjcm9sbGJhclwiLCBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwic3RyaW5nXCIpIG9wdGlvbnMgPSB7Y2xhc3NOYW1lOiBvcHRpb25zfTtcbiAgICByZXR1cm4gbmV3IEFubm90YXRpb24odGhpcywgb3B0aW9ucyk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwic2Nyb2xsQnV0dG9uSGVpZ2h0XCIsIDApO1xuXG4gIGZ1bmN0aW9uIEFubm90YXRpb24oY20sIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmJ1dHRvbkhlaWdodCA9IG9wdGlvbnMuc2Nyb2xsQnV0dG9uSGVpZ2h0IHx8IGNtLmdldE9wdGlvbihcInNjcm9sbEJ1dHRvbkhlaWdodFwiKTtcbiAgICB0aGlzLmFubm90YXRpb25zID0gW107XG4gICAgdGhpcy5kb1JlZHJhdyA9IHRoaXMuZG9VcGRhdGUgPSBudWxsO1xuICAgIHRoaXMuZGl2ID0gY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICB0aGlzLmRpdi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAwOyB0b3A6IDA7IHotaW5kZXg6IDc7IHBvaW50ZXItZXZlbnRzOiBub25lXCI7XG4gICAgdGhpcy5jb21wdXRlU2NhbGUoKTtcblxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVkcmF3KGRlbGF5KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5kb1JlZHJhdyk7XG4gICAgICBzZWxmLmRvUmVkcmF3ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgc2VsZi5yZWRyYXcoKTsgfSwgZGVsYXkpO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBjbS5vbihcInJlZnJlc2hcIiwgdGhpcy5yZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5kb1VwZGF0ZSk7XG4gICAgICBzZWxmLmRvVXBkYXRlID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHNlbGYuY29tcHV0ZVNjYWxlKCkpIHNjaGVkdWxlUmVkcmF3KDIwKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSk7XG4gICAgY20ub24oXCJtYXJrZXJBZGRlZFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIGNtLm9uKFwibWFya2VyQ2xlYXJlZFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIGlmIChvcHRpb25zLmxpc3RlbkZvckNoYW5nZXMgIT09IGZhbHNlKVxuICAgICAgY20ub24oXCJjaGFuZ2VzXCIsIHRoaXMuY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBzY2hlZHVsZVJlZHJhdygyNTApO1xuICAgICAgfSk7XG4gIH1cblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5jb21wdXRlU2NhbGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY20gPSB0aGlzLmNtO1xuICAgIHZhciBoU2NhbGUgPSAoY20uZ2V0V3JhcHBlckVsZW1lbnQoKS5jbGllbnRIZWlnaHQgLSBjbS5kaXNwbGF5LmJhckhlaWdodCAtIHRoaXMuYnV0dG9uSGVpZ2h0ICogMikgL1xuICAgICAgY20uZ2V0U2Nyb2xsZXJFbGVtZW50KCkuc2Nyb2xsSGVpZ2h0XG4gICAgaWYgKGhTY2FsZSAhPSB0aGlzLmhTY2FsZSkge1xuICAgICAgdGhpcy5oU2NhbGUgPSBoU2NhbGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgQW5ub3RhdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHtcbiAgICB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfTtcblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5yZWRyYXcgPSBmdW5jdGlvbihjb21wdXRlKSB7XG4gICAgaWYgKGNvbXB1dGUgIT09IGZhbHNlKSB0aGlzLmNvbXB1dGVTY2FsZSgpO1xuICAgIHZhciBjbSA9IHRoaXMuY20sIGhTY2FsZSA9IHRoaXMuaFNjYWxlO1xuXG4gICAgdmFyIGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGFubnMgPSB0aGlzLmFubm90YXRpb25zO1xuXG4gICAgdmFyIHdyYXBwaW5nID0gY20uZ2V0T3B0aW9uKFwibGluZVdyYXBwaW5nXCIpO1xuICAgIHZhciBzaW5nbGVMaW5lSCA9IHdyYXBwaW5nICYmIGNtLmRlZmF1bHRUZXh0SGVpZ2h0KCkgKiAxLjU7XG4gICAgdmFyIGN1ckxpbmUgPSBudWxsLCBjdXJMaW5lT2JqID0gbnVsbDtcbiAgICBmdW5jdGlvbiBnZXRZKHBvcywgdG9wKSB7XG4gICAgICBpZiAoY3VyTGluZSAhPSBwb3MubGluZSkge1xuICAgICAgICBjdXJMaW5lID0gcG9zLmxpbmU7XG4gICAgICAgIGN1ckxpbmVPYmogPSBjbS5nZXRMaW5lSGFuZGxlKGN1ckxpbmUpO1xuICAgICAgfVxuICAgICAgaWYgKChjdXJMaW5lT2JqLndpZGdldHMgJiYgY3VyTGluZU9iai53aWRnZXRzLmxlbmd0aCkgfHxcbiAgICAgICAgICAod3JhcHBpbmcgJiYgY3VyTGluZU9iai5oZWlnaHQgPiBzaW5nbGVMaW5lSCkpXG4gICAgICAgIHJldHVybiBjbS5jaGFyQ29vcmRzKHBvcywgXCJsb2NhbFwiKVt0b3AgPyBcInRvcFwiIDogXCJib3R0b21cIl07XG4gICAgICB2YXIgdG9wWSA9IGNtLmhlaWdodEF0TGluZShjdXJMaW5lT2JqLCBcImxvY2FsXCIpO1xuICAgICAgcmV0dXJuIHRvcFkgKyAodG9wID8gMCA6IGN1ckxpbmVPYmouaGVpZ2h0KTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdExpbmUgPSBjbS5sYXN0TGluZSgpXG4gICAgaWYgKGNtLmRpc3BsYXkuYmFyV2lkdGgpIGZvciAodmFyIGkgPSAwLCBuZXh0VG9wOyBpIDwgYW5ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGFubiA9IGFubnNbaV07XG4gICAgICBpZiAoYW5uLnRvLmxpbmUgPiBsYXN0TGluZSkgY29udGludWU7XG4gICAgICB2YXIgdG9wID0gbmV4dFRvcCB8fCBnZXRZKGFubi5mcm9tLCB0cnVlKSAqIGhTY2FsZTtcbiAgICAgIHZhciBib3R0b20gPSBnZXRZKGFubi50bywgZmFsc2UpICogaFNjYWxlO1xuICAgICAgd2hpbGUgKGkgPCBhbm5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaWYgKGFubnNbaSArIDFdLnRvLmxpbmUgPiBsYXN0TGluZSkgYnJlYWs7XG4gICAgICAgIG5leHRUb3AgPSBnZXRZKGFubnNbaSArIDFdLmZyb20sIHRydWUpICogaFNjYWxlO1xuICAgICAgICBpZiAobmV4dFRvcCA+IGJvdHRvbSArIC45KSBicmVhaztcbiAgICAgICAgYW5uID0gYW5uc1srK2ldO1xuICAgICAgICBib3R0b20gPSBnZXRZKGFubi50bywgZmFsc2UpICogaFNjYWxlO1xuICAgICAgfVxuICAgICAgaWYgKGJvdHRvbSA9PSB0b3ApIGNvbnRpbnVlO1xuICAgICAgdmFyIGhlaWdodCA9IE1hdGgubWF4KGJvdHRvbSAtIHRvcCwgMyk7XG5cbiAgICAgIHZhciBlbHQgPSBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgZWx0LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDBweDsgd2lkdGg6IFwiICsgTWF0aC5tYXgoY20uZGlzcGxheS5iYXJXaWR0aCAtIDEsIDIpICsgXCJweDsgdG9wOiBcIlxuICAgICAgICArICh0b3AgKyB0aGlzLmJ1dHRvbkhlaWdodCkgKyBcInB4OyBoZWlnaHQ6IFwiICsgaGVpZ2h0ICsgXCJweFwiO1xuICAgICAgZWx0LmNsYXNzTmFtZSA9IHRoaXMub3B0aW9ucy5jbGFzc05hbWU7XG4gICAgICBpZiAoYW5uLmlkKSB7XG4gICAgICAgIGVsdC5zZXRBdHRyaWJ1dGUoXCJhbm5vdGF0aW9uLWlkXCIsIGFubi5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZGl2LnRleHRDb250ZW50ID0gXCJcIjtcbiAgICB0aGlzLmRpdi5hcHBlbmRDaGlsZChmcmFnKTtcbiAgfTtcblxuICBBbm5vdGF0aW9uLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY20ub2ZmKFwicmVmcmVzaFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIpO1xuICAgIHRoaXMuY20ub2ZmKFwibWFya2VyQWRkZWRcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICB0aGlzLmNtLm9mZihcIm1hcmtlckNsZWFyZWRcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5jaGFuZ2VIYW5kbGVyKSB0aGlzLmNtLm9mZihcImNoYW5nZXNcIiwgdGhpcy5jaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcbiAgfTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBXUkFQX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmVcIjtcbiAgdmFyIEJBQ0tfQ0xBU1MgPSBcIkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kXCI7XG4gIHZhciBHVVRUX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmUtZ3V0dGVyXCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJzdHlsZUFjdGl2ZUxpbmVcIiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge1xuICAgIHZhciBwcmV2ID0gb2xkID09IENvZGVNaXJyb3IuSW5pdCA/IGZhbHNlIDogb2xkO1xuICAgIGlmICh2YWwgPT0gcHJldikgcmV0dXJuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGNtLm9mZihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgY2xlYXJBY3RpdmVMaW5lcyhjbSk7XG4gICAgICBkZWxldGUgY20uc3RhdGUuYWN0aXZlTGluZXM7XG4gICAgfVxuICAgIGlmICh2YWwpIHtcbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gW107XG4gICAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgY20ubGlzdFNlbGVjdGlvbnMoKSk7XG4gICAgICBjbS5vbihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2xlYXJBY3RpdmVMaW5lcyhjbSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUuYWN0aXZlTGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNtLnJlbW92ZUxpbmVDbGFzcyhjbS5zdGF0ZS5hY3RpdmVMaW5lc1tpXSwgXCJ3cmFwXCIsIFdSQVBfQ0xBU1MpO1xuICAgICAgY20ucmVtb3ZlTGluZUNsYXNzKGNtLnN0YXRlLmFjdGl2ZUxpbmVzW2ldLCBcImJhY2tncm91bmRcIiwgQkFDS19DTEFTUyk7XG4gICAgICBjbS5yZW1vdmVMaW5lQ2xhc3MoY20uc3RhdGUuYWN0aXZlTGluZXNbaV0sIFwiZ3V0dGVyXCIsIEdVVFRfQ0xBU1MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhbWVBcnJheShhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZlTGluZXMoY20sIHJhbmdlcykge1xuICAgIHZhciBhY3RpdmUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcInN0eWxlQWN0aXZlTGluZVwiKTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09IFwib2JqZWN0XCIgJiYgb3B0aW9uLm5vbkVtcHR5ID8gcmFuZ2UuYW5jaG9yLmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lIDogIXJhbmdlLmVtcHR5KCkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB2YXIgbGluZSA9IGNtLmdldExpbmVIYW5kbGVWaXN1YWxTdGFydChyYW5nZS5oZWFkLmxpbmUpO1xuICAgICAgaWYgKGFjdGl2ZVthY3RpdmUubGVuZ3RoIC0gMV0gIT0gbGluZSkgYWN0aXZlLnB1c2gobGluZSk7XG4gICAgfVxuICAgIGlmIChzYW1lQXJyYXkoY20uc3RhdGUuYWN0aXZlTGluZXMsIGFjdGl2ZSkpIHJldHVybjtcbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhckFjdGl2ZUxpbmVzKGNtKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aXZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNtLmFkZExpbmVDbGFzcyhhY3RpdmVbaV0sIFwid3JhcFwiLCBXUkFQX0NMQVNTKTtcbiAgICAgICAgY20uYWRkTGluZUNsYXNzKGFjdGl2ZVtpXSwgXCJiYWNrZ3JvdW5kXCIsIEJBQ0tfQ0xBU1MpO1xuICAgICAgICBjbS5hZGRMaW5lQ2xhc3MoYWN0aXZlW2ldLCBcImd1dHRlclwiLCBHVVRUX0NMQVNTKTtcbiAgICAgIH1cbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gYWN0aXZlO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uQ2hhbmdlKGNtLCBzZWwpIHtcbiAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgc2VsLnJhbmdlcyk7XG4gIH1cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gQmVjYXVzZSBzb21ldGltZXMgeW91IG5lZWQgdG8gbWFyayB0aGUgc2VsZWN0ZWQgKnRleHQqLlxuLy9cbi8vIEFkZHMgYW4gb3B0aW9uICdzdHlsZVNlbGVjdGVkVGV4dCcgd2hpY2gsIHdoZW4gZW5hYmxlZCwgZ2l2ZXNcbi8vIHNlbGVjdGVkIHRleHQgdGhlIENTUyBjbGFzcyBnaXZlbiBhcyBvcHRpb24gdmFsdWUsIG9yXG4vLyBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCIgd2hlbiB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcInN0eWxlU2VsZWN0ZWRUZXh0XCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICB2YXIgcHJldiA9IG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0O1xuICAgIGlmICh2YWwgJiYgIXByZXYpIHtcbiAgICAgIGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbiA9IFtdO1xuICAgICAgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUgPSB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyB2YWwgOiBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCI7XG4gICAgICByZXNldChjbSk7XG4gICAgICBjbS5vbihcImN1cnNvckFjdGl2aXR5XCIsIG9uQ3Vyc29yQWN0aXZpdHkpO1xuICAgICAgY20ub24oXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAoIXZhbCAmJiBwcmV2KSB7XG4gICAgICBjbS5vZmYoXCJjdXJzb3JBY3Rpdml0eVwiLCBvbkN1cnNvckFjdGl2aXR5KTtcbiAgICAgIGNtLm9mZihcImNoYW5nZVwiLCBvbkNoYW5nZSk7XG4gICAgICBjbGVhcihjbSk7XG4gICAgICBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb25TdHlsZSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBvbkN1cnNvckFjdGl2aXR5KGNtKSB7XG4gICAgaWYgKGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbilcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgdXBkYXRlKGNtKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjbSkge1xuICAgIGlmIChjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gJiYgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uLmxlbmd0aClcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgY2xlYXIoY20pOyB9KTtcbiAgfVxuXG4gIHZhciBDSFVOS19TSVpFID0gODtcbiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zO1xuICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3M7XG5cbiAgZnVuY3Rpb24gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8sIGFkZEF0KSB7XG4gICAgaWYgKGNtcChmcm9tLCB0bykgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBhcnJheSA9IGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtcbiAgICB2YXIgY2xzID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU7XG4gICAgZm9yICh2YXIgbGluZSA9IGZyb20ubGluZTs7KSB7XG4gICAgICB2YXIgc3RhcnQgPSBsaW5lID09IGZyb20ubGluZSA/IGZyb20gOiBQb3MobGluZSwgMCk7XG4gICAgICB2YXIgZW5kTGluZSA9IGxpbmUgKyBDSFVOS19TSVpFLCBhdEVuZCA9IGVuZExpbmUgPj0gdG8ubGluZTtcbiAgICAgIHZhciBlbmQgPSBhdEVuZCA/IHRvIDogUG9zKGVuZExpbmUsIDApO1xuICAgICAgdmFyIG1hcmsgPSBjbS5tYXJrVGV4dChzdGFydCwgZW5kLCB7Y2xhc3NOYW1lOiBjbHN9KTtcbiAgICAgIGlmIChhZGRBdCA9PSBudWxsKSBhcnJheS5wdXNoKG1hcmspO1xuICAgICAgZWxzZSBhcnJheS5zcGxpY2UoYWRkQXQrKywgMCwgbWFyayk7XG4gICAgICBpZiAoYXRFbmQpIGJyZWFrO1xuICAgICAgbGluZSA9IGVuZExpbmU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoY20pIHtcbiAgICB2YXIgYXJyYXkgPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb247XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgYXJyYXlbaV0uY2xlYXIoKTtcbiAgICBhcnJheS5sZW5ndGggPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoY20pIHtcbiAgICBjbGVhcihjbSk7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICBjb3ZlclJhbmdlKGNtLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoY20pIHtcbiAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBjbGVhcihjbSk7XG4gICAgaWYgKGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoID4gMSkgcmV0dXJuIHJlc2V0KGNtKTtcblxuICAgIHZhciBmcm9tID0gY20uZ2V0Q3Vyc29yKFwic3RhcnRcIiksIHRvID0gY20uZ2V0Q3Vyc29yKFwiZW5kXCIpO1xuXG4gICAgdmFyIGFycmF5ID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uO1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSByZXR1cm4gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8pO1xuXG4gICAgdmFyIGNvdmVyU3RhcnQgPSBhcnJheVswXS5maW5kKCksIGNvdmVyRW5kID0gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0uZmluZCgpO1xuICAgIGlmICghY292ZXJTdGFydCB8fCAhY292ZXJFbmQgfHwgdG8ubGluZSAtIGZyb20ubGluZSA8PSBDSFVOS19TSVpFIHx8XG4gICAgICAgIGNtcChmcm9tLCBjb3ZlckVuZC50bykgPj0gMCB8fCBjbXAodG8sIGNvdmVyU3RhcnQuZnJvbSkgPD0gMClcbiAgICAgIHJldHVybiByZXNldChjbSk7XG5cbiAgICB3aGlsZSAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPiAwKSB7XG4gICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICBjb3ZlclN0YXJ0ID0gYXJyYXlbMF0uZmluZCgpO1xuICAgIH1cbiAgICBpZiAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPCAwKSB7XG4gICAgICBpZiAoY292ZXJTdGFydC50by5saW5lIC0gZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICAgIGNvdmVyUmFuZ2UoY20sIGZyb20sIGNvdmVyU3RhcnQudG8sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY292ZXJSYW5nZShjbSwgZnJvbSwgY292ZXJTdGFydC5mcm9tLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoY21wKHRvLCBjb3ZlckVuZC50bykgPCAwKSB7XG4gICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgY292ZXJFbmQgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXS5maW5kKCk7XG4gICAgfVxuICAgIGlmIChjbXAodG8sIGNvdmVyRW5kLnRvKSA+IDApIHtcbiAgICAgIGlmICh0by5saW5lIC0gY292ZXJFbmQuZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC5mcm9tLCB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC50bywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi9mb2xkY29kZVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4vZm9sZGNvZGVcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwiZm9sZEd1dHRlclwiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0KSB7XG4gICAgICBjbS5jbGVhckd1dHRlcihjbS5zdGF0ZS5mb2xkR3V0dGVyLm9wdGlvbnMuZ3V0dGVyKTtcbiAgICAgIGNtLnN0YXRlLmZvbGRHdXR0ZXIgPSBudWxsO1xuICAgICAgY20ub2ZmKFwiZ3V0dGVyQ2xpY2tcIiwgb25HdXR0ZXJDbGljayk7XG4gICAgICBjbS5vZmYoXCJjaGFuZ2VzXCIsIG9uQ2hhbmdlKTtcbiAgICAgIGNtLm9mZihcInZpZXdwb3J0Q2hhbmdlXCIsIG9uVmlld3BvcnRDaGFuZ2UpO1xuICAgICAgY20ub2ZmKFwiZm9sZFwiLCBvbkZvbGQpO1xuICAgICAgY20ub2ZmKFwidW5mb2xkXCIsIG9uRm9sZCk7XG4gICAgICBjbS5vZmYoXCJzd2FwRG9jXCIsIG9uQ2hhbmdlKTtcbiAgICB9XG4gICAgaWYgKHZhbCkge1xuICAgICAgY20uc3RhdGUuZm9sZEd1dHRlciA9IG5ldyBTdGF0ZShwYXJzZU9wdGlvbnModmFsKSk7XG4gICAgICB1cGRhdGVJblZpZXdwb3J0KGNtKTtcbiAgICAgIGNtLm9uKFwiZ3V0dGVyQ2xpY2tcIiwgb25HdXR0ZXJDbGljayk7XG4gICAgICBjbS5vbihcImNoYW5nZXNcIiwgb25DaGFuZ2UpO1xuICAgICAgY20ub24oXCJ2aWV3cG9ydENoYW5nZVwiLCBvblZpZXdwb3J0Q2hhbmdlKTtcbiAgICAgIGNtLm9uKFwiZm9sZFwiLCBvbkZvbGQpO1xuICAgICAgY20ub24oXCJ1bmZvbGRcIiwgb25Gb2xkKTtcbiAgICAgIGNtLm9uKFwic3dhcERvY1wiLCBvbkNoYW5nZSk7XG4gICAgfVxuICB9KTtcblxuICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7XG5cbiAgZnVuY3Rpb24gU3RhdGUob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mcm9tID0gdGhpcy50byA9IDA7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmIChvcHRzID09PSB0cnVlKSBvcHRzID0ge307XG4gICAgaWYgKG9wdHMuZ3V0dGVyID09IG51bGwpIG9wdHMuZ3V0dGVyID0gXCJDb2RlTWlycm9yLWZvbGRndXR0ZXJcIjtcbiAgICBpZiAob3B0cy5pbmRpY2F0b3JPcGVuID09IG51bGwpIG9wdHMuaW5kaWNhdG9yT3BlbiA9IFwiQ29kZU1pcnJvci1mb2xkZ3V0dGVyLW9wZW5cIjtcbiAgICBpZiAob3B0cy5pbmRpY2F0b3JGb2xkZWQgPT0gbnVsbCkgb3B0cy5pbmRpY2F0b3JGb2xkZWQgPSBcIkNvZGVNaXJyb3ItZm9sZGd1dHRlci1mb2xkZWRcIjtcbiAgICByZXR1cm4gb3B0cztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRm9sZGVkKGNtLCBsaW5lKSB7XG4gICAgdmFyIG1hcmtzID0gY20uZmluZE1hcmtzKFBvcyhsaW5lLCAwKSwgUG9zKGxpbmUgKyAxLCAwKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG1hcmtzW2ldLl9faXNGb2xkKSB7XG4gICAgICAgIHZhciBmcm9tUG9zID0gbWFya3NbaV0uZmluZCgtMSk7XG4gICAgICAgIGlmIChmcm9tUG9zICYmIGZyb21Qb3MubGluZSA9PT0gbGluZSlcbiAgICAgICAgICByZXR1cm4gbWFya3NbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya2VyKHNwZWMpIHtcbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFyIGVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICBlbHQuY2xhc3NOYW1lID0gc3BlYyArIFwiIENvZGVNaXJyb3ItZ3V0dGVybWFya2VyLXN1YnRsZVwiO1xuICAgICAgcmV0dXJuIGVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNwZWMuY2xvbmVOb2RlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZvbGRJbmZvKGNtLCBmcm9tLCB0bykge1xuICAgIHZhciBvcHRzID0gY20uc3RhdGUuZm9sZEd1dHRlci5vcHRpb25zLCBjdXIgPSBmcm9tIC0gMTtcbiAgICB2YXIgbWluU2l6ZSA9IGNtLmZvbGRPcHRpb24ob3B0cywgXCJtaW5Gb2xkU2l6ZVwiKTtcbiAgICB2YXIgZnVuYyA9IGNtLmZvbGRPcHRpb24ob3B0cywgXCJyYW5nZUZpbmRlclwiKTtcbiAgICAvLyB3ZSBjYW4gcmV1c2UgdGhlIGJ1aWx0LWluIGluZGljYXRvciBlbGVtZW50IGlmIGl0cyBjbGFzc05hbWUgbWF0Y2hlcyB0aGUgbmV3IHN0YXRlXG4gICAgdmFyIGNsc0ZvbGRlZCA9IHR5cGVvZiBvcHRzLmluZGljYXRvckZvbGRlZCA9PSBcInN0cmluZ1wiICYmIGNsYXNzVGVzdChvcHRzLmluZGljYXRvckZvbGRlZCk7XG4gICAgdmFyIGNsc09wZW4gPSB0eXBlb2Ygb3B0cy5pbmRpY2F0b3JPcGVuID09IFwic3RyaW5nXCIgJiYgY2xhc3NUZXN0KG9wdHMuaW5kaWNhdG9yT3Blbik7XG4gICAgY20uZWFjaExpbmUoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICsrY3VyO1xuICAgICAgdmFyIG1hcmsgPSBudWxsO1xuICAgICAgdmFyIG9sZCA9IGxpbmUuZ3V0dGVyTWFya2VycztcbiAgICAgIGlmIChvbGQpIG9sZCA9IG9sZFtvcHRzLmd1dHRlcl07XG4gICAgICBpZiAoaXNGb2xkZWQoY20sIGN1cikpIHtcbiAgICAgICAgaWYgKGNsc0ZvbGRlZCAmJiBvbGQgJiYgY2xzRm9sZGVkLnRlc3Qob2xkLmNsYXNzTmFtZSkpIHJldHVybjtcbiAgICAgICAgbWFyayA9IG1hcmtlcihvcHRzLmluZGljYXRvckZvbGRlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcG9zID0gUG9zKGN1ciwgMCk7XG4gICAgICAgIHZhciByYW5nZSA9IGZ1bmMgJiYgZnVuYyhjbSwgcG9zKTtcbiAgICAgICAgaWYgKHJhbmdlICYmIHJhbmdlLnRvLmxpbmUgLSByYW5nZS5mcm9tLmxpbmUgPj0gbWluU2l6ZSkge1xuICAgICAgICAgIGlmIChjbHNPcGVuICYmIG9sZCAmJiBjbHNPcGVuLnRlc3Qob2xkLmNsYXNzTmFtZSkpIHJldHVybjtcbiAgICAgICAgICBtYXJrID0gbWFya2VyKG9wdHMuaW5kaWNhdG9yT3Blbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWFyayAmJiAhb2xkKSByZXR1cm47XG4gICAgICBjbS5zZXRHdXR0ZXJNYXJrZXIobGluZSwgb3B0cy5ndXR0ZXIsIG1hcmspO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29waWVkIGZyb20gQ29kZU1pcnJvci9zcmMvdXRpbC9kb20uanNcbiAgZnVuY3Rpb24gY2xhc3NUZXN0KGNscykgeyByZXR1cm4gbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xzICsgXCIoPzokfFxcXFxzKVxcXFxzKlwiKSB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlSW5WaWV3cG9ydChjbSkge1xuICAgIHZhciB2cCA9IGNtLmdldFZpZXdwb3J0KCksIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgdXBkYXRlRm9sZEluZm8oY20sIHZwLmZyb20sIHZwLnRvKTtcbiAgICB9KTtcbiAgICBzdGF0ZS5mcm9tID0gdnAuZnJvbTsgc3RhdGUudG8gPSB2cC50bztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR3V0dGVyQ2xpY2soY20sIGxpbmUsIGd1dHRlcikge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBvcHRzID0gc3RhdGUub3B0aW9ucztcbiAgICBpZiAoZ3V0dGVyICE9IG9wdHMuZ3V0dGVyKSByZXR1cm47XG4gICAgdmFyIGZvbGRlZCA9IGlzRm9sZGVkKGNtLCBsaW5lKTtcbiAgICBpZiAoZm9sZGVkKSBmb2xkZWQuY2xlYXIoKTtcbiAgICBlbHNlIGNtLmZvbGRDb2RlKFBvcyhsaW5lLCAwKSwgb3B0cyk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjbSkge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBvcHRzID0gc3RhdGUub3B0aW9ucztcbiAgICBzdGF0ZS5mcm9tID0gc3RhdGUudG8gPSAwO1xuICAgIGNsZWFyVGltZW91dChzdGF0ZS5jaGFuZ2VVcGRhdGUpO1xuICAgIHN0YXRlLmNoYW5nZVVwZGF0ZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHVwZGF0ZUluVmlld3BvcnQoY20pOyB9LCBvcHRzLmZvbGRPbkNoYW5nZVRpbWVTcGFuIHx8IDYwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBvblZpZXdwb3J0Q2hhbmdlKGNtKSB7XG4gICAgdmFyIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgdmFyIG9wdHMgPSBzdGF0ZS5vcHRpb25zO1xuICAgIGNsZWFyVGltZW91dChzdGF0ZS5jaGFuZ2VVcGRhdGUpO1xuICAgIHN0YXRlLmNoYW5nZVVwZGF0ZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdnAgPSBjbS5nZXRWaWV3cG9ydCgpO1xuICAgICAgaWYgKHN0YXRlLmZyb20gPT0gc3RhdGUudG8gfHwgdnAuZnJvbSAtIHN0YXRlLnRvID4gMjAgfHwgc3RhdGUuZnJvbSAtIHZwLnRvID4gMjApIHtcbiAgICAgICAgdXBkYXRlSW5WaWV3cG9ydChjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHZwLmZyb20gPCBzdGF0ZS5mcm9tKSB7XG4gICAgICAgICAgICB1cGRhdGVGb2xkSW5mbyhjbSwgdnAuZnJvbSwgc3RhdGUuZnJvbSk7XG4gICAgICAgICAgICBzdGF0ZS5mcm9tID0gdnAuZnJvbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZwLnRvID4gc3RhdGUudG8pIHtcbiAgICAgICAgICAgIHVwZGF0ZUZvbGRJbmZvKGNtLCBzdGF0ZS50bywgdnAudG8pO1xuICAgICAgICAgICAgc3RhdGUudG8gPSB2cC50bztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIG9wdHMudXBkYXRlVmlld3BvcnRUaW1lU3BhbiB8fCA0MDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2xkKGNtLCBmcm9tKSB7XG4gICAgdmFyIHN0YXRlID0gY20uc3RhdGUuZm9sZEd1dHRlcjtcbiAgICBpZiAoIXN0YXRlKSByZXR1cm47XG4gICAgdmFyIGxpbmUgPSBmcm9tLmxpbmU7XG4gICAgaWYgKGxpbmUgPj0gc3RhdGUuZnJvbSAmJiBsaW5lIDwgc3RhdGUudG8pXG4gICAgICB1cGRhdGVGb2xkSW5mbyhjbSwgbGluZSwgbGluZSArIDEpO1xuICB9XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5yZWdpc3Rlckdsb2JhbEhlbHBlcihcImZvbGRcIiwgXCJjb21tZW50XCIsIGZ1bmN0aW9uKG1vZGUpIHtcbiAgcmV0dXJuIG1vZGUuYmxvY2tDb21tZW50U3RhcnQgJiYgbW9kZS5ibG9ja0NvbW1lbnRFbmQ7XG59LCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQoc3RhcnQpLCBzdGFydFRva2VuID0gbW9kZS5ibG9ja0NvbW1lbnRTdGFydCwgZW5kVG9rZW4gPSBtb2RlLmJsb2NrQ29tbWVudEVuZDtcbiAgaWYgKCFzdGFydFRva2VuIHx8ICFlbmRUb2tlbikgcmV0dXJuO1xuICB2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcblxuICB2YXIgc3RhcnRDaDtcbiAgZm9yICh2YXIgYXQgPSBzdGFydC5jaCwgcGFzcyA9IDA7Oykge1xuICAgIHZhciBmb3VuZCA9IGF0IDw9IDAgPyAtMSA6IGxpbmVUZXh0Lmxhc3RJbmRleE9mKHN0YXJ0VG9rZW4sIGF0IC0gMSk7XG4gICAgaWYgKGZvdW5kID09IC0xKSB7XG4gICAgICBpZiAocGFzcyA9PSAxKSByZXR1cm47XG4gICAgICBwYXNzID0gMTtcbiAgICAgIGF0ID0gbGluZVRleHQubGVuZ3RoO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwYXNzID09IDEgJiYgZm91bmQgPCBzdGFydC5jaCkgcmV0dXJuO1xuICAgIGlmICgvY29tbWVudC8udGVzdChjbS5nZXRUb2tlblR5cGVBdChDb2RlTWlycm9yLlBvcyhsaW5lLCBmb3VuZCArIDEpKSkgJiZcbiAgICAgICAgKGZvdW5kID09IDAgfHwgbGluZVRleHQuc2xpY2UoZm91bmQgLSBlbmRUb2tlbi5sZW5ndGgsIGZvdW5kKSA9PSBlbmRUb2tlbiB8fFxuICAgICAgICAgIS9jb21tZW50Ly50ZXN0KGNtLmdldFRva2VuVHlwZUF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIGZvdW5kKSkpKSkge1xuICAgICAgc3RhcnRDaCA9IGZvdW5kICsgc3RhcnRUb2tlbi5sZW5ndGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYXQgPSBmb3VuZCAtIDE7XG4gIH1cblxuICB2YXIgZGVwdGggPSAxLCBsYXN0TGluZSA9IGNtLmxhc3RMaW5lKCksIGVuZCwgZW5kQ2g7XG4gIG91dGVyOiBmb3IgKHZhciBpID0gbGluZTsgaSA8PSBsYXN0TGluZTsgKytpKSB7XG4gICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSBpID09IGxpbmUgPyBzdGFydENoIDogMDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2Yoc3RhcnRUb2tlbiwgcG9zKSwgbmV4dENsb3NlID0gdGV4dC5pbmRleE9mKGVuZFRva2VuLCBwb3MpO1xuICAgICAgaWYgKG5leHRPcGVuIDwgMCkgbmV4dE9wZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGlmIChuZXh0Q2xvc2UgPCAwKSBuZXh0Q2xvc2UgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpO1xuICAgICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCkgYnJlYWs7XG4gICAgICBpZiAocG9zID09IG5leHRPcGVuKSArK2RlcHRoO1xuICAgICAgZWxzZSBpZiAoIS0tZGVwdGgpIHsgZW5kID0gaTsgZW5kQ2ggPSBwb3M7IGJyZWFrIG91dGVyOyB9XG4gICAgICArK3BvcztcbiAgICB9XG4gIH1cbiAgaWYgKGVuZCA9PSBudWxsIHx8IGxpbmUgPT0gZW5kICYmIGVuZENoID09IHN0YXJ0Q2gpIHJldHVybjtcbiAgcmV0dXJuIHtmcm9tOiBDb2RlTWlycm9yLlBvcyhsaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogQ29kZU1pcnJvci5Qb3MoZW5kLCBlbmRDaCl9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBsaW5lSW5kZW50KGNtLCBsaW5lTm8pIHtcbiAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGxpbmVObylcbiAgdmFyIHNwYWNlVG8gPSB0ZXh0LnNlYXJjaCgvXFxTLylcbiAgaWYgKHNwYWNlVG8gPT0gLTEgfHwgL1xcYmNvbW1lbnRcXGIvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZU5vLCBzcGFjZVRvICsgMSkpKSlcbiAgICByZXR1cm4gLTFcbiAgcmV0dXJuIENvZGVNaXJyb3IuY291bnRDb2x1bW4odGV4dCwgbnVsbCwgY20uZ2V0T3B0aW9uKFwidGFiU2l6ZVwiKSlcbn1cblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJpbmRlbnRcIiwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBteUluZGVudCA9IGxpbmVJbmRlbnQoY20sIHN0YXJ0LmxpbmUpXG4gIGlmIChteUluZGVudCA8IDApIHJldHVyblxuICB2YXIgbGFzdExpbmVJbkZvbGQgPSBudWxsXG5cbiAgLy8gR28gdGhyb3VnaCBsaW5lcyB1bnRpbCB3ZSBmaW5kIGEgbGluZSB0aGF0IGRlZmluaXRlbHkgZG9lc24ndCBiZWxvbmcgaW5cbiAgLy8gdGhlIGJsb2NrIHdlJ3JlIGZvbGRpbmcsIG9yIHRvIHRoZSBlbmQuXG4gIGZvciAodmFyIGkgPSBzdGFydC5saW5lICsgMSwgZW5kID0gY20ubGFzdExpbmUoKTsgaSA8PSBlbmQ7ICsraSkge1xuICAgIHZhciBpbmRlbnQgPSBsaW5lSW5kZW50KGNtLCBpKVxuICAgIGlmIChpbmRlbnQgPT0gLTEpIHtcbiAgICB9IGVsc2UgaWYgKGluZGVudCA+IG15SW5kZW50KSB7XG4gICAgICAvLyBMaW5lcyB3aXRoIGEgZ3JlYXRlciBpbmRlbnQgYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYmxvY2suXG4gICAgICBsYXN0TGluZUluRm9sZCA9IGk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoaXMgbGluZSBoYXMgbm9uLXNwYWNlLCBub24tY29tbWVudCBjb250ZW50LCBhbmQgaXNcbiAgICAgIC8vIGluZGVudGVkIGxlc3Mgb3IgZXF1YWwgdG8gdGhlIHN0YXJ0IGxpbmUsIGl0IGlzIHRoZSBzdGFydCBvZlxuICAgICAgLy8gYW5vdGhlciBibG9jay5cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAobGFzdExpbmVJbkZvbGQpIHJldHVybiB7XG4gICAgZnJvbTogQ29kZU1pcnJvci5Qb3Moc3RhcnQubGluZSwgY20uZ2V0TGluZShzdGFydC5saW5lKS5sZW5ndGgpLFxuICAgIHRvOiBDb2RlTWlycm9yLlBvcyhsYXN0TGluZUluRm9sZCwgY20uZ2V0TGluZShsYXN0TGluZUluRm9sZCkubGVuZ3RoKVxuICB9O1xufSk7XG5cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcImJyYWNlXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICB2YXIgbGluZSA9IHN0YXJ0LmxpbmUsIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTtcbiAgdmFyIHRva2VuVHlwZTtcblxuICBmdW5jdGlvbiBmaW5kT3BlbmluZyhvcGVuQ2gpIHtcbiAgICBmb3IgKHZhciBhdCA9IHN0YXJ0LmNoLCBwYXNzID0gMDs7KSB7XG4gICAgICB2YXIgZm91bmQgPSBhdCA8PSAwID8gLTEgOiBsaW5lVGV4dC5sYXN0SW5kZXhPZihvcGVuQ2gsIGF0IC0gMSk7XG4gICAgICBpZiAoZm91bmQgPT0gLTEpIHtcbiAgICAgICAgaWYgKHBhc3MgPT0gMSkgYnJlYWs7XG4gICAgICAgIHBhc3MgPSAxO1xuICAgICAgICBhdCA9IGxpbmVUZXh0Lmxlbmd0aDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocGFzcyA9PSAxICYmIGZvdW5kIDwgc3RhcnQuY2gpIGJyZWFrO1xuICAgICAgdG9rZW5UeXBlID0gY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgZm91bmQgKyAxKSk7XG4gICAgICBpZiAoIS9eKGNvbW1lbnR8c3RyaW5nKS8udGVzdCh0b2tlblR5cGUpKSByZXR1cm4gZm91bmQgKyAxO1xuICAgICAgYXQgPSBmb3VuZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXJ0VG9rZW4gPSBcIntcIiwgZW5kVG9rZW4gPSBcIn1cIiwgc3RhcnRDaCA9IGZpbmRPcGVuaW5nKFwie1wiKTtcbiAgaWYgKHN0YXJ0Q2ggPT0gbnVsbCkge1xuICAgIHN0YXJ0VG9rZW4gPSBcIltcIiwgZW5kVG9rZW4gPSBcIl1cIjtcbiAgICBzdGFydENoID0gZmluZE9wZW5pbmcoXCJbXCIpO1xuICB9XG5cbiAgaWYgKHN0YXJ0Q2ggPT0gbnVsbCkgcmV0dXJuO1xuICB2YXIgY291bnQgPSAxLCBsYXN0TGluZSA9IGNtLmxhc3RMaW5lKCksIGVuZCwgZW5kQ2g7XG4gIG91dGVyOiBmb3IgKHZhciBpID0gbGluZTsgaSA8PSBsYXN0TGluZTsgKytpKSB7XG4gICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSBpID09IGxpbmUgPyBzdGFydENoIDogMDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2Yoc3RhcnRUb2tlbiwgcG9zKSwgbmV4dENsb3NlID0gdGV4dC5pbmRleE9mKGVuZFRva2VuLCBwb3MpO1xuICAgICAgaWYgKG5leHRPcGVuIDwgMCkgbmV4dE9wZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIGlmIChuZXh0Q2xvc2UgPCAwKSBuZXh0Q2xvc2UgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpO1xuICAgICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCkgYnJlYWs7XG4gICAgICBpZiAoY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MoaSwgcG9zICsgMSkpID09IHRva2VuVHlwZSkge1xuICAgICAgICBpZiAocG9zID09IG5leHRPcGVuKSArK2NvdW50O1xuICAgICAgICBlbHNlIGlmICghLS1jb3VudCkgeyBlbmQgPSBpOyBlbmRDaCA9IHBvczsgYnJlYWsgb3V0ZXI7IH1cbiAgICAgIH1cbiAgICAgICsrcG9zO1xuICAgIH1cbiAgfVxuICBpZiAoZW5kID09IG51bGwgfHwgbGluZSA9PSBlbmQpIHJldHVybjtcbiAgcmV0dXJuIHtmcm9tOiBDb2RlTWlycm9yLlBvcyhsaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogQ29kZU1pcnJvci5Qb3MoZW5kLCBlbmRDaCl9O1xufSk7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiaW1wb3J0XCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbXBvcnQobGluZSkge1xuICAgIGlmIChsaW5lIDwgY20uZmlyc3RMaW5lKCkgfHwgbGluZSA+IGNtLmxhc3RMaW5lKCkpIHJldHVybiBudWxsO1xuICAgIHZhciBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgMSkpO1xuICAgIGlmICghL1xcUy8udGVzdChzdGFydC5zdHJpbmcpKSBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgc3RhcnQuZW5kICsgMSkpO1xuICAgIGlmIChzdGFydC50eXBlICE9IFwia2V5d29yZFwiIHx8IHN0YXJ0LnN0cmluZyAhPSBcImltcG9ydFwiKSByZXR1cm4gbnVsbDtcbiAgICAvLyBOb3cgZmluZCBjbG9zaW5nIHNlbWljb2xvbiwgcmV0dXJuIGl0cyBwb3NpdGlvblxuICAgIGZvciAodmFyIGkgPSBsaW5lLCBlID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgbGluZSArIDEwKTsgaSA8PSBlOyArK2kpIHtcbiAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgc2VtaSA9IHRleHQuaW5kZXhPZihcIjtcIik7XG4gICAgICBpZiAoc2VtaSAhPSAtMSkgcmV0dXJuIHtzdGFydENoOiBzdGFydC5lbmQsIGVuZDogQ29kZU1pcnJvci5Qb3MoaSwgc2VtaSl9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGFydExpbmUgPSBzdGFydC5saW5lLCBoYXMgPSBoYXNJbXBvcnQoc3RhcnRMaW5lKSwgcHJldjtcbiAgaWYgKCFoYXMgfHwgaGFzSW1wb3J0KHN0YXJ0TGluZSAtIDEpIHx8ICgocHJldiA9IGhhc0ltcG9ydChzdGFydExpbmUgLSAyKSkgJiYgcHJldi5lbmQubGluZSA9PSBzdGFydExpbmUgLSAxKSlcbiAgICByZXR1cm4gbnVsbDtcbiAgZm9yICh2YXIgZW5kID0gaGFzLmVuZDs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbXBvcnQoZW5kLmxpbmUgKyAxKTtcbiAgICBpZiAobmV4dCA9PSBudWxsKSBicmVhaztcbiAgICBlbmQgPSBuZXh0LmVuZDtcbiAgfVxuICByZXR1cm4ge2Zyb206IGNtLmNsaXBQb3MoQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMuc3RhcnRDaCArIDEpKSwgdG86IGVuZH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJpbmNsdWRlXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbmNsdWRlKGxpbmUpIHtcbiAgICBpZiAobGluZSA8IGNtLmZpcnN0TGluZSgpIHx8IGxpbmUgPiBjbS5sYXN0TGluZSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIDEpKTtcbiAgICBpZiAoIS9cXFMvLnRlc3Qoc3RhcnQuc3RyaW5nKSkgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIHN0YXJ0LmVuZCArIDEpKTtcbiAgICBpZiAoc3RhcnQudHlwZSA9PSBcIm1ldGFcIiAmJiBzdGFydC5zdHJpbmcuc2xpY2UoMCwgOCkgPT0gXCIjaW5jbHVkZVwiKSByZXR1cm4gc3RhcnQuc3RhcnQgKyA4O1xuICB9XG5cbiAgdmFyIHN0YXJ0TGluZSA9IHN0YXJ0LmxpbmUsIGhhcyA9IGhhc0luY2x1ZGUoc3RhcnRMaW5lKTtcbiAgaWYgKGhhcyA9PSBudWxsIHx8IGhhc0luY2x1ZGUoc3RhcnRMaW5lIC0gMSkgIT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGZvciAodmFyIGVuZCA9IHN0YXJ0TGluZTs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbmNsdWRlKGVuZCArIDEpO1xuICAgIGlmIChuZXh0ID09IG51bGwpIGJyZWFrO1xuICAgICsrZW5kO1xuICB9XG4gIHJldHVybiB7ZnJvbTogQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMgKyAxKSxcbiAgICAgICAgICB0bzogY20uY2xpcFBvcyhDb2RlTWlycm9yLlBvcyhlbmQpKX07XG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwibWFya2Rvd25cIiwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBtYXhEZXB0aCA9IDEwMDtcblxuICBmdW5jdGlvbiBpc0hlYWRlcihsaW5lTm8pIHtcbiAgICB2YXIgdG9rZW50eXBlID0gY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZU5vLCAwKSk7XG4gICAgcmV0dXJuIHRva2VudHlwZSAmJiAvXFxiaGVhZGVyXFxiLy50ZXN0KHRva2VudHlwZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoZWFkZXJMZXZlbChsaW5lTm8sIGxpbmUsIG5leHRMaW5lKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZSAmJiBsaW5lLm1hdGNoKC9eIysvKTtcbiAgICBpZiAobWF0Y2ggJiYgaXNIZWFkZXIobGluZU5vKSkgcmV0dXJuIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBtYXRjaCA9IG5leHRMaW5lICYmIG5leHRMaW5lLm1hdGNoKC9eWz1cXC1dK1xccyokLyk7XG4gICAgaWYgKG1hdGNoICYmIGlzSGVhZGVyKGxpbmVObyArIDEpKSByZXR1cm4gbmV4dExpbmVbMF0gPT0gXCI9XCIgPyAxIDogMjtcbiAgICByZXR1cm4gbWF4RGVwdGg7XG4gIH1cblxuICB2YXIgZmlyc3RMaW5lID0gY20uZ2V0TGluZShzdGFydC5saW5lKSwgbmV4dExpbmUgPSBjbS5nZXRMaW5lKHN0YXJ0LmxpbmUgKyAxKTtcbiAgdmFyIGxldmVsID0gaGVhZGVyTGV2ZWwoc3RhcnQubGluZSwgZmlyc3RMaW5lLCBuZXh0TGluZSk7XG4gIGlmIChsZXZlbCA9PT0gbWF4RGVwdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdmFyIGxhc3RMaW5lTm8gPSBjbS5sYXN0TGluZSgpO1xuICB2YXIgZW5kID0gc3RhcnQubGluZSwgbmV4dE5leHRMaW5lID0gY20uZ2V0TGluZShlbmQgKyAyKTtcbiAgd2hpbGUgKGVuZCA8IGxhc3RMaW5lTm8pIHtcbiAgICBpZiAoaGVhZGVyTGV2ZWwoZW5kICsgMSwgbmV4dExpbmUsIG5leHROZXh0TGluZSkgPD0gbGV2ZWwpIGJyZWFrO1xuICAgICsrZW5kO1xuICAgIG5leHRMaW5lID0gbmV4dE5leHRMaW5lO1xuICAgIG5leHROZXh0TGluZSA9IGNtLmdldExpbmUoZW5kICsgMik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZyb206IENvZGVNaXJyb3IuUG9zKHN0YXJ0LmxpbmUsIGZpcnN0TGluZS5sZW5ndGgpLFxuICAgIHRvOiBDb2RlTWlycm9yLlBvcyhlbmQsIGNtLmdldExpbmUoZW5kKS5sZW5ndGgpXG4gIH07XG59KTtcblxufSk7XG4iLCIvKipcbiAqIG1hcmtlZCAtIGEgbWFya2Rvd24gcGFyc2VyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxOCwgQ2hyaXN0b3BoZXIgSmVmZnJleS4gKE1JVCBMaWNlbnNlZClcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWRcbiAqL1xuXG47KGZ1bmN0aW9uKHJvb3QpIHtcbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cblxudmFyIGJsb2NrID0ge1xuICBuZXdsaW5lOiAvXlxcbisvLFxuICBjb2RlOiAvXiggezR9W15cXG5dK1xcbiopKy8sXG4gIGZlbmNlczogbm9vcCxcbiAgaHI6IC9eIHswLDN9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKS8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSAqKFteXFxuXSs/KSAqKD86IysgKik/KD86XFxuK3wkKS8sXG4gIG5wdGFibGU6IG5vb3AsXG4gIGJsb2NrcXVvdGU6IC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cXG5dKikoPzpcXG58JCkpKy8sXG4gIGxpc3Q6IC9eKCAqKShidWxsKSBbXFxzXFxTXSs/KD86aHJ8ZGVmfFxcbnsyLH0oPyEgKSg/IVxcMWJ1bGwgKVxcbip8XFxzKiQpLyxcbiAgaHRtbDogJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj9cXFxcPz5cXFxcbionIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8+XFxcXG4qJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+XFxcXG4qJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzpcXFxcbnsyLH18JCknIC8vICg2KVxuICAgICsgJ3w8KD8hc2NyaXB0fHByZXxzdHlsZSkoW2Etel1bXFxcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIG9wZW4gdGFnXG4gICAgKyAnfDwvKD8hc2NyaXB0fHByZXxzdHlsZSlbYS16XVtcXFxcdy1dKlxcXFxzKj4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsXG4gIGRlZjogL14gezAsM31cXFsobGFiZWwpXFxdOiAqXFxuPyAqPD8oW15cXHM+XSspPj8oPzooPzogK1xcbj8gKnwgKlxcbiAqKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8sXG4gIHRhYmxlOiBub29wLFxuICBsaGVhZGluZzogL14oW15cXG5dKylcXG4gKig9fC0pezIsfSAqKD86XFxuK3wkKS8sXG4gIHBhcmFncmFwaDogL14oW15cXG5dKyg/Olxcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8IHswLDN9Pnw8XFwvPyg/OnRhZykoPzogK3xcXG58XFwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfCEtLSkpW15cXG5dKykqKS8sXG4gIHRleHQ6IC9eW15cXG5dKy9cbn07XG5cbmJsb2NrLl9sYWJlbCA9IC8oPyFcXHMqXFxdKSg/OlxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKy87XG5ibG9jay5fdGl0bGUgPSAvKD86XCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8J1teJ1xcbl0qKD86XFxuW14nXFxuXSspKlxcbj8nfFxcKFteKCldKlxcKSkvO1xuYmxvY2suZGVmID0gZWRpdChibG9jay5kZWYpXG4gIC5yZXBsYWNlKCdsYWJlbCcsIGJsb2NrLl9sYWJlbClcbiAgLnJlcGxhY2UoJ3RpdGxlJywgYmxvY2suX3RpdGxlKVxuICAuZ2V0UmVnZXgoKTtcblxuYmxvY2suYnVsbGV0ID0gLyg/OlsqKy1dfFxcZCtcXC4pLztcbmJsb2NrLml0ZW0gPSAvXiggKikoYnVsbCkgW15cXG5dKig/Olxcbig/IVxcMWJ1bGwgKVteXFxuXSopKi87XG5ibG9jay5pdGVtID0gZWRpdChibG9jay5pdGVtLCAnZ20nKVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5saXN0ID0gZWRpdChibG9jay5saXN0KVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5yZXBsYWNlKCdocicsICdcXFxcbisoPz1cXFxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXFxcKiAqKXszLH0pKD86XFxcXG4rfCQpKScpXG4gIC5yZXBsYWNlKCdkZWYnLCAnXFxcXG4rKD89JyArIGJsb2NrLmRlZi5zb3VyY2UgKyAnKScpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5fdGFnID0gJ2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9uJ1xuICArICd8Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb24nXG4gICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICArICd8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbidcbiAgKyAnfHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cidcbiAgKyAnfHRyYWNrfHVsJztcbmJsb2NrLl9jb21tZW50ID0gLzwhLS0oPyEtPz4pW1xcc1xcU10qPy0tPi87XG5ibG9jay5odG1sID0gZWRpdChibG9jay5odG1sLCAnaScpXG4gIC5yZXBsYWNlKCdjb21tZW50JywgYmxvY2suX2NvbW1lbnQpXG4gIC5yZXBsYWNlKCd0YWcnLCBibG9jay5fdGFnKVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgLyArW2EtekEtWjpfXVtcXHcuOi1dKig/OiAqPSAqXCJbXlwiXFxuXSpcInwgKj0gKidbXidcXG5dKid8ICo9ICpbXlxcc1wiJz08PmBdKyk/LylcbiAgLmdldFJlZ2V4KCk7XG5cbmJsb2NrLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnaHInLCBibG9jay5ocilcbiAgLnJlcGxhY2UoJ2hlYWRpbmcnLCBibG9jay5oZWFkaW5nKVxuICAucmVwbGFjZSgnbGhlYWRpbmcnLCBibG9jay5saGVhZGluZylcbiAgLnJlcGxhY2UoJ3RhZycsIGJsb2NrLl90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5ibG9ja3F1b3RlID0gZWRpdChibG9jay5ibG9ja3F1b3RlKVxuICAucmVwbGFjZSgncGFyYWdyYXBoJywgYmxvY2sucGFyYWdyYXBoKVxuICAuZ2V0UmVnZXgoKTtcblxuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLm5vcm1hbCA9IG1lcmdlKHt9LCBibG9jayk7XG5cbi8qKlxuICogR0ZNIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5ibG9jay5nZm0gPSBtZXJnZSh7fSwgYmxvY2subm9ybWFsLCB7XG4gIGZlbmNlczogL14gKihgezMsfXx+ezMsfSlbIFxcLl0qKFxcUyspPyAqXFxuKFtcXHNcXFNdKj8pXFxuPyAqXFwxICooPzpcXG4rfCQpLyxcbiAgcGFyYWdyYXBoOiAvXi8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSArKFteXFxuXSs/KSAqIyogKig/Olxcbit8JCkvXG59KTtcblxuYmxvY2suZ2ZtLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnKD8hJywgJyg/ISdcbiAgICArIGJsb2NrLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwyJykgKyAnfCdcbiAgICArIGJsb2NrLmxpc3Quc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwzJykgKyAnfCcpXG4gIC5nZXRSZWdleCgpO1xuXG4vKipcbiAqIEdGTSArIFRhYmxlcyBCbG9jayBHcmFtbWFyXG4gKi9cblxuYmxvY2sudGFibGVzID0gbWVyZ2Uoe30sIGJsb2NrLmdmbSwge1xuICBucHRhYmxlOiAvXiAqKFtefFxcbiBdLipcXHwuKilcXG4gKihbLTpdKyAqXFx8Wy18IDpdKikoPzpcXG4oKD86LipbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS8sXG4gIHRhYmxlOiAvXiAqXFx8KC4rKVxcbiAqXFx8PyggKlstOl0rWy18IDpdKikoPzpcXG4oKD86ICpbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS9cbn0pO1xuXG4vKipcbiAqIFBlZGFudGljIGdyYW1tYXJcbiAqL1xuXG5ibG9jay5wZWRhbnRpYyA9IG1lcmdlKHt9LCBibG9jay5ub3JtYWwsIHtcbiAgaHRtbDogZWRpdChcbiAgICAnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgKyAnfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKScgLy8gY2xvc2VkIHRhZ1xuICAgICsgJ3w8dGFnKD86XCJbXlwiXSpcInxcXCdbXlxcJ10qXFwnfFxcXFxzW15cXCdcIi8+XFxcXHNdKikqPy8/PiAqKD86XFxcXG57Mix9fFxcXFxzKiQpKScpXG4gICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBibG9jay5fY29tbWVudClcbiAgICAucmVwbGFjZSgvdGFnL2csICcoPyEoPzonXG4gICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgKyAnfHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZyknXG4gICAgICArICdcXFxcYilcXFxcdysoPyE6fFteXFxcXHdcXFxcc0BdKkApXFxcXGInKVxuICAgIC5nZXRSZWdleCgpLFxuICBkZWY6IC9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpL1xufSk7XG5cbi8qKlxuICogQmxvY2sgTGV4ZXJcbiAqL1xuXG5mdW5jdGlvbiBMZXhlcihvcHRpb25zKSB7XG4gIHRoaXMudG9rZW5zID0gW107XG4gIHRoaXMudG9rZW5zLmxpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBtYXJrZWQuZGVmYXVsdHM7XG4gIHRoaXMucnVsZXMgPSBibG9jay5ub3JtYWw7XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgIHRoaXMucnVsZXMgPSBibG9jay5wZWRhbnRpYztcbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2ZtKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50YWJsZXMpIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay50YWJsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay5nZm07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhwb3NlIEJsb2NrIFJ1bGVzXG4gKi9cblxuTGV4ZXIucnVsZXMgPSBibG9jaztcblxuLyoqXG4gKiBTdGF0aWMgTGV4IE1ldGhvZFxuICovXG5cbkxleGVyLmxleCA9IGZ1bmN0aW9uKHNyYywgb3B0aW9ucykge1xuICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIob3B0aW9ucyk7XG4gIHJldHVybiBsZXhlci5sZXgoc3JjKTtcbn07XG5cbi8qKlxuICogUHJlcHJvY2Vzc2luZ1xuICovXG5cbkxleGVyLnByb3RvdHlwZS5sZXggPSBmdW5jdGlvbihzcmMpIHtcbiAgc3JjID0gc3JjXG4gICAgLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoL1xcdC9nLCAnICAgICcpXG4gICAgLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKVxuICAgIC5yZXBsYWNlKC9cXHUyNDI0L2csICdcXG4nKTtcblxuICByZXR1cm4gdGhpcy50b2tlbihzcmMsIHRydWUpO1xufTtcblxuLyoqXG4gKiBMZXhpbmdcbiAqL1xuXG5MZXhlci5wcm90b3R5cGUudG9rZW4gPSBmdW5jdGlvbihzcmMsIHRvcCkge1xuICBzcmMgPSBzcmMucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICB2YXIgbmV4dCxcbiAgICAgIGxvb3NlLFxuICAgICAgY2FwLFxuICAgICAgYnVsbCxcbiAgICAgIGIsXG4gICAgICBpdGVtLFxuICAgICAgbGlzdFN0YXJ0LFxuICAgICAgbGlzdEl0ZW1zLFxuICAgICAgdCxcbiAgICAgIHNwYWNlLFxuICAgICAgaSxcbiAgICAgIHRhZyxcbiAgICAgIGwsXG4gICAgICBpc29yZGVyZWQsXG4gICAgICBpc3Rhc2ssXG4gICAgICBpc2NoZWNrZWQ7XG5cbiAgd2hpbGUgKHNyYykge1xuICAgIC8vIG5ld2xpbmVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGlmIChjYXBbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3BhY2UnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eIHs0fS9nbSwgJycpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgdGV4dDogIXRoaXMub3B0aW9ucy5wZWRhbnRpY1xuICAgICAgICAgID8gcnRyaW0oY2FwLCAnXFxuJylcbiAgICAgICAgICA6IGNhcFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmZW5jZXMgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgbGFuZzogY2FwWzJdLFxuICAgICAgICB0ZXh0OiBjYXBbM10gfHwgJydcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaGVhZGluZ1xuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IGNhcFsyXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSBubyBsZWFkaW5nIHBpcGUgKGdmbSlcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhpdGVtLmNlbGxzW2ldLCBpdGVtLmhlYWRlci5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChpdGVtKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoclxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhyLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnaHInXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGJsb2NrcXVvdGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdibG9ja3F1b3RlX3N0YXJ0J1xuICAgICAgfSk7XG5cbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eICo+ID8vZ20sICcnKTtcblxuICAgICAgLy8gUGFzcyBgdG9wYCB0byBrZWVwIHRoZSBjdXJyZW50XG4gICAgICAvLyBcInRvcGxldmVsXCIgc3RhdGUuIFRoaXMgaXMgZXhhY3RseVxuICAgICAgLy8gaG93IG1hcmtkb3duLnBsIHdvcmtzLlxuICAgICAgdGhpcy50b2tlbihjYXAsIHRvcCk7XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnYmxvY2txdW90ZV9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbGlzdFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmxpc3QuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgYnVsbCA9IGNhcFsyXTtcbiAgICAgIGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcblxuICAgICAgbGlzdFN0YXJ0ID0ge1xuICAgICAgICB0eXBlOiAnbGlzdF9zdGFydCcsXG4gICAgICAgIG9yZGVyZWQ6IGlzb3JkZXJlZCxcbiAgICAgICAgc3RhcnQ6IGlzb3JkZXJlZCA/ICtidWxsIDogJycsXG4gICAgICAgIGxvb3NlOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaChsaXN0U3RhcnQpO1xuXG4gICAgICAvLyBHZXQgZWFjaCB0b3AtbGV2ZWwgaXRlbS5cbiAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pO1xuXG4gICAgICBsaXN0SXRlbXMgPSBbXTtcbiAgICAgIG5leHQgPSBmYWxzZTtcbiAgICAgIGwgPSBjYXAubGVuZ3RoO1xuICAgICAgaSA9IDA7XG5cbiAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjYXBbaV07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaXN0IGl0ZW0ncyBidWxsZXRcbiAgICAgICAgLy8gc28gaXQgaXMgc2VlbiBhcyB0aGUgbmV4dCB0b2tlbi5cbiAgICAgICAgc3BhY2UgPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXiAqKFsqKy1dfFxcZCtcXC4pICsvLCAnJyk7XG5cbiAgICAgICAgLy8gT3V0ZGVudCB3aGF0ZXZlciB0aGVcbiAgICAgICAgLy8gbGlzdCBpdGVtIGNvbnRhaW5zLiBIYWNreS5cbiAgICAgICAgaWYgKH5pdGVtLmluZGV4T2YoJ1xcbiAnKSkge1xuICAgICAgICAgIHNwYWNlIC09IGl0ZW0ubGVuZ3RoO1xuICAgICAgICAgIGl0ZW0gPSAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgICA/IGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCdeIHsxLCcgKyBzcGFjZSArICd9JywgJ2dtJyksICcnKVxuICAgICAgICAgICAgOiBpdGVtLnJlcGxhY2UoL14gezEsNH0vZ20sICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBuZXh0IGxpc3QgaXRlbSBiZWxvbmdzIGhlcmUuXG4gICAgICAgIC8vIEJhY2twZWRhbCBpZiBpdCBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBsaXN0LlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMgJiYgaSAhPT0gbCAtIDEpIHtcbiAgICAgICAgICBiID0gYmxvY2suYnVsbGV0LmV4ZWMoY2FwW2kgKyAxXSlbMF07XG4gICAgICAgICAgaWYgKGJ1bGwgIT09IGIgJiYgIShidWxsLmxlbmd0aCA+IDEgJiYgYi5sZW5ndGggPiAxKSkge1xuICAgICAgICAgICAgc3JjID0gY2FwLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKSArIHNyYztcbiAgICAgICAgICAgIGkgPSBsIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBpdGVtIGlzIGxvb3NlIG9yIG5vdC5cbiAgICAgICAgLy8gVXNlOiAvKF58XFxuKSg/ISApW15cXG5dK1xcblxcbig/IVxccyokKS9cbiAgICAgICAgLy8gZm9yIGRpc2NvdW50IGJlaGF2aW9yLlxuICAgICAgICBsb29zZSA9IG5leHQgfHwgL1xcblxcbig/IVxccyokKS8udGVzdChpdGVtKTtcbiAgICAgICAgaWYgKGkgIT09IGwgLSAxKSB7XG4gICAgICAgICAgbmV4dCA9IGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09ICdcXG4nO1xuICAgICAgICAgIGlmICghbG9vc2UpIGxvb3NlID0gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29zZSkge1xuICAgICAgICAgIGxpc3RTdGFydC5sb29zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgdGFzayBsaXN0IGl0ZW1zXG4gICAgICAgIGlzdGFzayA9IC9eXFxbWyB4WF1cXF0gLy50ZXN0KGl0ZW0pO1xuICAgICAgICBpc2NoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc3Rhc2spIHtcbiAgICAgICAgICBpc2NoZWNrZWQgPSBpdGVtWzFdICE9PSAnICc7XG4gICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ID0ge1xuICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW1fc3RhcnQnLFxuICAgICAgICAgIHRhc2s6IGlzdGFzayxcbiAgICAgICAgICBjaGVja2VkOiBpc2NoZWNrZWQsXG4gICAgICAgICAgbG9vc2U6IGxvb3NlXG4gICAgICAgIH07XG5cbiAgICAgICAgbGlzdEl0ZW1zLnB1c2godCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godCk7XG5cbiAgICAgICAgLy8gUmVjdXJzZS5cbiAgICAgICAgdGhpcy50b2tlbihpdGVtLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbV9lbmQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdFN0YXJ0Lmxvb3NlKSB7XG4gICAgICAgIGwgPSBsaXN0SXRlbXMubGVuZ3RoO1xuICAgICAgICBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBsaXN0SXRlbXNbaV0ubG9vc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnbGlzdF9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaHRtbFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmh0bWwuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICAgID8gJ3BhcmFncmFwaCdcbiAgICAgICAgICA6ICdodG1sJyxcbiAgICAgICAgcHJlOiAhdGhpcy5vcHRpb25zLnNhbml0aXplclxuICAgICAgICAgICYmIChjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnKSxcbiAgICAgICAgdGV4dDogY2FwWzBdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlZlxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMuZGVmLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBpZiAoY2FwWzNdKSBjYXBbM10gPSBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKTtcbiAgICAgIHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubGlua3NbdGFnXSkge1xuICAgICAgICB0aGlzLnRva2Vucy5saW5rc1t0YWddID0ge1xuICAgICAgICAgIGhyZWY6IGNhcFsyXSxcbiAgICAgICAgICB0aXRsZTogY2FwWzNdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSAoZ2ZtKVxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMudGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoLyg/OiAqXFx8ICopP1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhcbiAgICAgICAgICAgIGl0ZW0uY2VsbHNbaV0ucmVwbGFjZSgvXiAqXFx8ICp8ICpcXHwgKiQvZywgJycpLFxuICAgICAgICAgICAgaXRlbS5oZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbGhlYWRpbmdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saGVhZGluZy5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICBkZXB0aDogY2FwWzJdID09PSAnPScgPyAxIDogMixcbiAgICAgICAgdGV4dDogY2FwWzFdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRvcC1sZXZlbCBwYXJhZ3JhcGhcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKHNyYykpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB0ZXh0OiBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICA6IGNhcFsxXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIC8vIFRvcC1sZXZlbCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS5cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0ZXh0OiBjYXBbMF1cbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMudG9rZW5zO1xufTtcblxuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5cbnZhciBpbmxpbmUgPSB7XG4gIGVzY2FwZTogL15cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS8sXG4gIGF1dG9saW5rOiAvXjwoc2NoZW1lOlteXFxzXFx4MDAtXFx4MWY8Pl0qfGVtYWlsKT4vLFxuICB1cmw6IG5vb3AsXG4gIHRhZzogJ15jb21tZW50J1xuICAgICsgJ3xePC9bYS16QS1aXVtcXFxcdzotXSpcXFxccyo+JyAvLyBzZWxmLWNsb3NpbmcgdGFnXG4gICAgKyAnfF48W2EtekEtWl1bXFxcXHctXSooPzphdHRyaWJ1dGUpKj9cXFxccyovPz4nIC8vIG9wZW4gdGFnXG4gICAgKyAnfF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PicgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgZS5nLiA8P3BocCA/PlxuICAgICsgJ3xePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PicgLy8gZGVjbGFyYXRpb24sIGUuZy4gPCFET0NUWVBFIGh0bWw+XG4gICAgKyAnfF48IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/XFxcXF1cXFxcXT4nLCAvLyBDREFUQSBzZWN0aW9uXG4gIGxpbms6IC9eIT9cXFsobGFiZWwpXFxdXFwoaHJlZig/OlxccysodGl0bGUpKT9cXHMqXFwpLyxcbiAgcmVmbGluazogL14hP1xcWyhsYWJlbClcXF1cXFsoPyFcXHMqXFxdKSgoPzpcXFxcW1xcW1xcXV0/fFteXFxbXFxdXFxcXF0pKylcXF0vLFxuICBub2xpbms6IC9eIT9cXFsoPyFcXHMqXFxdKSgoPzpcXFtbXlxcW1xcXV0qXFxdfFxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKilcXF0oPzpcXFtcXF0pPy8sXG4gIHN0cm9uZzogL15fXyhbXlxcc10pX18oPyFfKXxeXFwqXFwqKFteXFxzXSlcXCpcXCooPyFcXCopfF5fXyhbXlxcc11bXFxzXFxTXSo/W15cXHNdKV9fKD8hXyl8XlxcKlxcKihbXlxcc11bXFxzXFxTXSo/W15cXHNdKVxcKlxcKig/IVxcKikvLFxuICBlbTogL15fKFteXFxzX10pXyg/IV8pfF5cXCooW15cXHMqXCI8XFxbXSlcXCooPyFcXCopfF5fKFteXFxzXVtcXHNcXFNdKj9bXlxcc19dKV8oPyFffFteXFxzLl0pfF5fKFteXFxzX11bXFxzXFxTXSo/W15cXHNdKV8oPyFffFteXFxzLl0pfF5cXCooW15cXHNcIjxcXFtdW1xcc1xcU10qP1teXFxzKl0pXFwqKD8hXFwqKXxeXFwqKFteXFxzKlwiPFxcW11bXFxzXFxTXSo/W15cXHNdKVxcKig/IVxcKikvLFxuICBjb2RlOiAvXihgKykoW15gXXxbXmBdW1xcc1xcU10qP1teYF0pXFwxKD8hYCkvLFxuICBicjogL14oIHsyLH18XFxcXClcXG4oPyFcXHMqJCkvLFxuICBkZWw6IG5vb3AsXG4gIHRleHQ6IC9eKGArfFteYF0pW1xcc1xcU10qPyg/PVtcXFxcPCFcXFtgKl18XFxiX3wgezIsfVxcbnwkKS9cbn07XG5cbmlubGluZS5fZXNjYXBlcyA9IC9cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS9nO1xuXG5pbmxpbmUuX3NjaGVtZSA9IC9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LztcbmlubGluZS5fZW1haWwgPSAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLztcbmlubGluZS5hdXRvbGluayA9IGVkaXQoaW5saW5lLmF1dG9saW5rKVxuICAucmVwbGFjZSgnc2NoZW1lJywgaW5saW5lLl9zY2hlbWUpXG4gIC5yZXBsYWNlKCdlbWFpbCcsIGlubGluZS5fZW1haWwpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUuX2F0dHJpYnV0ZSA9IC9cXHMrW2EtekEtWjpfXVtcXHcuOi1dKig/Olxccyo9XFxzKlwiW15cIl0qXCJ8XFxzKj1cXHMqJ1teJ10qJ3xcXHMqPVxccypbXlxcc1wiJz08PmBdKyk/LztcblxuaW5saW5lLnRhZyA9IGVkaXQoaW5saW5lLnRhZylcbiAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBibG9jay5fY29tbWVudClcbiAgLnJlcGxhY2UoJ2F0dHJpYnV0ZScsIGlubGluZS5fYXR0cmlidXRlKVxuICAuZ2V0UmVnZXgoKTtcblxuaW5saW5lLl9sYWJlbCA9IC8oPzpcXFtbXlxcW1xcXV0qXFxdfFxcXFxbXFxbXFxdXT98YFteYF0qYHxbXlxcW1xcXVxcXFxdKSo/LztcbmlubGluZS5faHJlZiA9IC9cXHMqKDwoPzpcXFxcWzw+XT98W15cXHM8PlxcXFxdKSo+fCg/OlxcXFxbKCldP3xcXChbXlxcc1xceDAwLVxceDFmXFxcXF0qXFwpfFteXFxzXFx4MDAtXFx4MWYoKVxcXFxdKSo/KS87XG5pbmxpbmUuX3RpdGxlID0gL1wiKD86XFxcXFwiP3xbXlwiXFxcXF0pKlwifCcoPzpcXFxcJz98W14nXFxcXF0pKid8XFwoKD86XFxcXFxcKT98W14pXFxcXF0pKlxcKS87XG5cbmlubGluZS5saW5rID0gZWRpdChpbmxpbmUubGluaylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgLnJlcGxhY2UoJ2hyZWYnLCBpbmxpbmUuX2hyZWYpXG4gIC5yZXBsYWNlKCd0aXRsZScsIGlubGluZS5fdGl0bGUpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUucmVmbGluayA9IGVkaXQoaW5saW5lLnJlZmxpbmspXG4gIC5yZXBsYWNlKCdsYWJlbCcsIGlubGluZS5fbGFiZWwpXG4gIC5nZXRSZWdleCgpO1xuXG4vKipcbiAqIE5vcm1hbCBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5ub3JtYWwgPSBtZXJnZSh7fSwgaW5saW5lKTtcblxuLyoqXG4gKiBQZWRhbnRpYyBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5wZWRhbnRpYyA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7XG4gIHN0cm9uZzogL15fXyg/PVxcUykoW1xcc1xcU10qP1xcUylfXyg/IV8pfF5cXCpcXCooPz1cXFMpKFtcXHNcXFNdKj9cXFMpXFwqXFwqKD8hXFwqKS8sXG4gIGVtOiAvXl8oPz1cXFMpKFtcXHNcXFNdKj9cXFMpXyg/IV8pfF5cXCooPz1cXFMpKFtcXHNcXFNdKj9cXFMpXFwqKD8hXFwqKS8sXG4gIGxpbms6IGVkaXQoL14hP1xcWyhsYWJlbClcXF1cXCgoLio/KVxcKS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgICAuZ2V0UmVnZXgoKSxcbiAgcmVmbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxccypcXFsoW15cXF1dKilcXF0vKVxuICAgIC5yZXBsYWNlKCdsYWJlbCcsIGlubGluZS5fbGFiZWwpXG4gICAgLmdldFJlZ2V4KClcbn0pO1xuXG4vKipcbiAqIEdGTSBJbmxpbmUgR3JhbW1hclxuICovXG5cbmlubGluZS5nZm0gPSBtZXJnZSh7fSwgaW5saW5lLm5vcm1hbCwge1xuICBlc2NhcGU6IGVkaXQoaW5saW5lLmVzY2FwZSkucmVwbGFjZSgnXSknLCAnfnxdKScpLmdldFJlZ2V4KCksXG4gIF9leHRlbmRlZF9lbWFpbDogL1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlxcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyxcbiAgdXJsOiAvXigoPzpmdHB8aHR0cHM/KTpcXC9cXC98d3d3XFwuKSg/OlthLXpBLVowLTlcXC1dK1xcLj8pK1teXFxzPF0qfF5lbWFpbC8sXG4gIF9iYWNrcGVkYWw6IC8oPzpbXj8hLiw6OypffigpJl0rfFxcKFteKV0qXFwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypffildKyg/ISQpKSsvLFxuICBkZWw6IC9efisoPz1cXFMpKFtcXHNcXFNdKj9cXFMpfisvLFxuICB0ZXh0OiBlZGl0KGlubGluZS50ZXh0KVxuICAgIC5yZXBsYWNlKCddfCcsICd+XXwnKVxuICAgIC5yZXBsYWNlKCd8JCcsICd8aHR0cHM/Oi8vfGZ0cDovL3x3d3dcXFxcLnxbYS16QS1aMC05LiEjJCUmXFwnKisvPT9eX2B7XFxcXHx9fi1dK0B8JCcpXG4gICAgLmdldFJlZ2V4KClcbn0pO1xuXG5pbmxpbmUuZ2ZtLnVybCA9IGVkaXQoaW5saW5lLmdmbS51cmwpXG4gIC5yZXBsYWNlKCdlbWFpbCcsIGlubGluZS5nZm0uX2V4dGVuZGVkX2VtYWlsKVxuICAuZ2V0UmVnZXgoKTtcbi8qKlxuICogR0ZNICsgTGluZSBCcmVha3MgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5pbmxpbmUuYnJlYWtzID0gbWVyZ2Uoe30sIGlubGluZS5nZm0sIHtcbiAgYnI6IGVkaXQoaW5saW5lLmJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICB0ZXh0OiBlZGl0KGlubGluZS5nZm0udGV4dCkucmVwbGFjZSgnezIsfScsICcqJykuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogSW5saW5lIExleGVyICYgQ29tcGlsZXJcbiAqL1xuXG5mdW5jdGlvbiBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICB0aGlzLnJ1bGVzID0gaW5saW5lLm5vcm1hbDtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXIoKTtcbiAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIGlmICghdGhpcy5saW5rcykge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4nKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICB0aGlzLnJ1bGVzID0gaW5saW5lLnBlZGFudGljO1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5icmVha3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuZ2ZtO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBJbmxpbmUgUnVsZXNcbiAqL1xuXG5JbmxpbmVMZXhlci5ydWxlcyA9IGlubGluZTtcblxuLyoqXG4gKiBTdGF0aWMgTGV4aW5nL0NvbXBpbGluZyBNZXRob2RcbiAqL1xuXG5JbmxpbmVMZXhlci5vdXRwdXQgPSBmdW5jdGlvbihzcmMsIGxpbmtzLCBvcHRpb25zKSB7XG4gIHZhciBpbmxpbmUgPSBuZXcgSW5saW5lTGV4ZXIobGlua3MsIG9wdGlvbnMpO1xuICByZXR1cm4gaW5saW5lLm91dHB1dChzcmMpO1xufTtcblxuLyoqXG4gKiBMZXhpbmcvQ29tcGlsaW5nXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKHNyYykge1xuICB2YXIgb3V0ID0gJycsXG4gICAgICBsaW5rLFxuICAgICAgdGV4dCxcbiAgICAgIGhyZWYsXG4gICAgICB0aXRsZSxcbiAgICAgIGNhcCxcbiAgICAgIHByZXZDYXBaZXJvO1xuXG4gIHdoaWxlIChzcmMpIHtcbiAgICAvLyBlc2NhcGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IGNhcFsxXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGF1dG9saW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBlc2NhcGUodGhpcy5tYW5nbGUoY2FwWzFdKSk7XG4gICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMV0pO1xuICAgICAgICBocmVmID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB1cmwgKGdmbSlcbiAgICBpZiAoIXRoaXMuaW5MaW5rICYmIChjYXAgPSB0aGlzLnJ1bGVzLnVybC5leGVjKHNyYykpKSB7XG4gICAgICBpZiAoY2FwWzJdID09PSAnQCcpIHtcbiAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMF0pO1xuICAgICAgICBocmVmID0gJ21haWx0bzonICsgdGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvIGV4dGVuZGVkIGF1dG9saW5rIHBhdGggdmFsaWRhdGlvblxuICAgICAgICBkbyB7XG4gICAgICAgICAgcHJldkNhcFplcm8gPSBjYXBbMF07XG4gICAgICAgICAgY2FwWzBdID0gdGhpcy5ydWxlcy5fYmFja3BlZGFsLmV4ZWMoY2FwWzBdKVswXTtcbiAgICAgICAgfSB3aGlsZSAocHJldkNhcFplcm8gIT09IGNhcFswXSk7XG4gICAgICAgIHRleHQgPSBlc2NhcGUoY2FwWzBdKTtcbiAgICAgICAgaWYgKGNhcFsxXSA9PT0gJ3d3dy4nKSB7XG4gICAgICAgICAgaHJlZiA9ICdodHRwOi8vJyArIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaHJlZiA9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIG51bGwsIHRleHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGFnXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGFnLmV4ZWMoc3JjKSkge1xuICAgICAgaWYgKCF0aGlzLmluTGluayAmJiAvXjxhIC9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5MaW5rICYmIC9ePFxcL2E+L2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaW5SYXdCbG9jayAmJiAvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5SYXdCbG9jayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5SYXdCbG9jayAmJiAvXjxcXC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXFxzfD4pL2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5SYXdCbG9jayA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXJcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIoY2FwWzBdKVxuICAgICAgICAgIDogZXNjYXBlKGNhcFswXSlcbiAgICAgICAgOiBjYXBbMF07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsaW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMubGluay5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBocmVmID0gY2FwWzJdO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgICAgICBsaW5rID0gL14oW14nXCJdKlteXFxzXSlcXHMrKFsnXCJdKSguKilcXDIvLmV4ZWMoaHJlZik7XG5cbiAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICBocmVmID0gbGlua1sxXTtcbiAgICAgICAgICB0aXRsZSA9IGxpbmtbM107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGUgPSBjYXBbM10gPyBjYXBbM10uc2xpY2UoMSwgLTEpIDogJyc7XG4gICAgICB9XG4gICAgICBocmVmID0gaHJlZi50cmltKCkucmVwbGFjZSgvXjwoW1xcc1xcU10qKT4kLywgJyQxJyk7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwge1xuICAgICAgICBocmVmOiBJbmxpbmVMZXhlci5lc2NhcGVzKGhyZWYpLFxuICAgICAgICB0aXRsZTogSW5saW5lTGV4ZXIuZXNjYXBlcyh0aXRsZSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbkxpbmsgPSBmYWxzZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHJlZmxpbmssIG5vbGlua1xuICAgIGlmICgoY2FwID0gdGhpcy5ydWxlcy5yZWZsaW5rLmV4ZWMoc3JjKSlcbiAgICAgICAgfHwgKGNhcCA9IHRoaXMucnVsZXMubm9saW5rLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBsaW5rID0gKGNhcFsyXSB8fCBjYXBbMV0pLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGxpbmsgPSB0aGlzLmxpbmtzW2xpbmsudG9Mb3dlckNhc2UoKV07XG4gICAgICBpZiAoIWxpbmsgfHwgIWxpbmsuaHJlZikge1xuICAgICAgICBvdXQgKz0gY2FwWzBdLmNoYXJBdCgwKTtcbiAgICAgICAgc3JjID0gY2FwWzBdLnN1YnN0cmluZygxKSArIHNyYztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICBvdXQgKz0gdGhpcy5vdXRwdXRMaW5rKGNhcCwgbGluayk7XG4gICAgICB0aGlzLmluTGluayA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gc3Ryb25nXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuc3Ryb25nLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLnN0cm9uZyh0aGlzLm91dHB1dChjYXBbNF0gfHwgY2FwWzNdIHx8IGNhcFsyXSB8fCBjYXBbMV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGVtXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuZW0uZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuZW0odGhpcy5vdXRwdXQoY2FwWzZdIHx8IGNhcFs1XSB8fCBjYXBbNF0gfHwgY2FwWzNdIHx8IGNhcFsyXSB8fCBjYXBbMV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmNvZGVzcGFuKGVzY2FwZShjYXBbMl0udHJpbSgpLCB0cnVlKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBiclxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmJyLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmJyKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBkZWwgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5kZWwuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuZGVsKHRoaXMub3V0cHV0KGNhcFsxXSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGV4dFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLnRleHQuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKHRoaXMuaW5SYXdCbG9jaykge1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50ZXh0KGNhcFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50ZXh0KGVzY2FwZSh0aGlzLnNtYXJ0eXBhbnRzKGNhcFswXSkpKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5JbmxpbmVMZXhlci5lc2NhcGVzID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dCA/IHRleHQucmVwbGFjZShJbmxpbmVMZXhlci5ydWxlcy5fZXNjYXBlcywgJyQxJykgOiB0ZXh0O1xufTtcblxuLyoqXG4gKiBDb21waWxlIExpbmtcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUub3V0cHV0TGluayA9IGZ1bmN0aW9uKGNhcCwgbGluaykge1xuICB2YXIgaHJlZiA9IGxpbmsuaHJlZixcbiAgICAgIHRpdGxlID0gbGluay50aXRsZSA/IGVzY2FwZShsaW5rLnRpdGxlKSA6IG51bGw7XG5cbiAgcmV0dXJuIGNhcFswXS5jaGFyQXQoMCkgIT09ICchJ1xuICAgID8gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIHRpdGxlLCB0aGlzLm91dHB1dChjYXBbMV0pKVxuICAgIDogdGhpcy5yZW5kZXJlci5pbWFnZShocmVmLCB0aXRsZSwgZXNjYXBlKGNhcFsxXSkpO1xufTtcblxuLyoqXG4gKiBTbWFydHlwYW50cyBUcmFuc2Zvcm1hdGlvbnNcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUuc21hcnR5cGFudHMgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIGlmICghdGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAvLyBlbS1kYXNoZXNcbiAgICAucmVwbGFjZSgvLS0tL2csICdcXHUyMDE0JylcbiAgICAvLyBlbi1kYXNoZXNcbiAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgIC8vIG9wZW5pbmcgc2luZ2xlc1xuICAgIC5yZXBsYWNlKC8oXnxbLVxcdTIwMTQvKFxcW3tcIlxcc10pJy9nLCAnJDFcXHUyMDE4JylcbiAgICAvLyBjbG9zaW5nIHNpbmdsZXMgJiBhcG9zdHJvcGhlc1xuICAgIC5yZXBsYWNlKC8nL2csICdcXHUyMDE5JylcbiAgICAvLyBvcGVuaW5nIGRvdWJsZXNcbiAgICAucmVwbGFjZSgvKF58Wy1cXHUyMDE0LyhcXFt7XFx1MjAxOFxcc10pXCIvZywgJyQxXFx1MjAxYycpXG4gICAgLy8gY2xvc2luZyBkb3VibGVzXG4gICAgLnJlcGxhY2UoL1wiL2csICdcXHUyMDFkJylcbiAgICAvLyBlbGxpcHNlc1xuICAgIC5yZXBsYWNlKC9cXC57M30vZywgJ1xcdTIwMjYnKTtcbn07XG5cbi8qKlxuICogTWFuZ2xlIExpbmtzXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLm1hbmdsZSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgaWYgKCF0aGlzLm9wdGlvbnMubWFuZ2xlKSByZXR1cm4gdGV4dDtcbiAgdmFyIG91dCA9ICcnLFxuICAgICAgbCA9IHRleHQubGVuZ3RoLFxuICAgICAgaSA9IDAsXG4gICAgICBjaDtcblxuICBmb3IgKDsgaSA8IGw7IGkrKykge1xuICAgIGNoID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC41KSB7XG4gICAgICBjaCA9ICd4JyArIGNoLnRvU3RyaW5nKDE2KTtcbiAgICB9XG4gICAgb3V0ICs9ICcmIycgKyBjaCArICc7JztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG4vKipcbiAqIFJlbmRlcmVyXG4gKi9cblxuZnVuY3Rpb24gUmVuZGVyZXIob3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbn1cblxuUmVuZGVyZXIucHJvdG90eXBlLmNvZGUgPSBmdW5jdGlvbihjb2RlLCBsYW5nLCBlc2NhcGVkKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KSB7XG4gICAgdmFyIG91dCA9IHRoaXMub3B0aW9ucy5oaWdobGlnaHQoY29kZSwgbGFuZyk7XG4gICAgaWYgKG91dCAhPSBudWxsICYmIG91dCAhPT0gY29kZSkge1xuICAgICAgZXNjYXBlZCA9IHRydWU7XG4gICAgICBjb2RlID0gb3V0O1xuICAgIH1cbiAgfVxuXG4gIGlmICghbGFuZykge1xuICAgIHJldHVybiAnPHByZT48Y29kZT4nXG4gICAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICAgICsgJzwvY29kZT48L3ByZT4nO1xuICB9XG5cbiAgcmV0dXJuICc8cHJlPjxjb2RlIGNsYXNzPVwiJ1xuICAgICsgdGhpcy5vcHRpb25zLmxhbmdQcmVmaXhcbiAgICArIGVzY2FwZShsYW5nLCB0cnVlKVxuICAgICsgJ1wiPidcbiAgICArIChlc2NhcGVkID8gY29kZSA6IGVzY2FwZShjb2RlLCB0cnVlKSlcbiAgICArICc8L2NvZGU+PC9wcmU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5ibG9ja3F1b3RlID0gZnVuY3Rpb24ocXVvdGUpIHtcbiAgcmV0dXJuICc8YmxvY2txdW90ZT5cXG4nICsgcXVvdGUgKyAnPC9ibG9ja3F1b3RlPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHtcbiAgcmV0dXJuIGh0bWw7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaGVhZGluZyA9IGZ1bmN0aW9uKHRleHQsIGxldmVsLCByYXcpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJJZHMpIHtcbiAgICByZXR1cm4gJzxoJ1xuICAgICAgKyBsZXZlbFxuICAgICAgKyAnIGlkPVwiJ1xuICAgICAgKyB0aGlzLm9wdGlvbnMuaGVhZGVyUHJlZml4XG4gICAgICArIHJhdy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teXFx3XSsvZywgJy0nKVxuICAgICAgKyAnXCI+J1xuICAgICAgKyB0ZXh0XG4gICAgICArICc8L2gnXG4gICAgICArIGxldmVsXG4gICAgICArICc+XFxuJztcbiAgfVxuICAvLyBpZ25vcmUgSURzXG4gIHJldHVybiAnPGgnICsgbGV2ZWwgKyAnPicgKyB0ZXh0ICsgJzwvaCcgKyBsZXZlbCArICc+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5ociA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sID8gJzxoci8+XFxuJyA6ICc8aHI+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saXN0ID0gZnVuY3Rpb24oYm9keSwgb3JkZXJlZCwgc3RhcnQpIHtcbiAgdmFyIHR5cGUgPSBvcmRlcmVkID8gJ29sJyA6ICd1bCcsXG4gICAgICBzdGFydGF0dCA9IChvcmRlcmVkICYmIHN0YXJ0ICE9PSAxKSA/ICgnIHN0YXJ0PVwiJyArIHN0YXJ0ICsgJ1wiJykgOiAnJztcbiAgcmV0dXJuICc8JyArIHR5cGUgKyBzdGFydGF0dCArICc+XFxuJyArIGJvZHkgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saXN0aXRlbSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuICc8bGk+JyArIHRleHQgKyAnPC9saT5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmNoZWNrYm94ID0gZnVuY3Rpb24oY2hlY2tlZCkge1xuICByZXR1cm4gJzxpbnB1dCAnXG4gICAgKyAoY2hlY2tlZCA/ICdjaGVja2VkPVwiXCIgJyA6ICcnKVxuICAgICsgJ2Rpc2FibGVkPVwiXCIgdHlwZT1cImNoZWNrYm94XCInXG4gICAgKyAodGhpcy5vcHRpb25zLnhodG1sID8gJyAvJyA6ICcnKVxuICAgICsgJz4gJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wYXJhZ3JhcGggPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPHA+JyArIHRleHQgKyAnPC9wPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGFibGUgPSBmdW5jdGlvbihoZWFkZXIsIGJvZHkpIHtcbiAgaWYgKGJvZHkpIGJvZHkgPSAnPHRib2R5PicgKyBib2R5ICsgJzwvdGJvZHk+JztcblxuICByZXR1cm4gJzx0YWJsZT5cXG4nXG4gICAgKyAnPHRoZWFkPlxcbidcbiAgICArIGhlYWRlclxuICAgICsgJzwvdGhlYWQ+XFxuJ1xuICAgICsgYm9keVxuICAgICsgJzwvdGFibGU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS50YWJsZXJvdyA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgcmV0dXJuICc8dHI+XFxuJyArIGNvbnRlbnQgKyAnPC90cj5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlY2VsbCA9IGZ1bmN0aW9uKGNvbnRlbnQsIGZsYWdzKSB7XG4gIHZhciB0eXBlID0gZmxhZ3MuaGVhZGVyID8gJ3RoJyA6ICd0ZCc7XG4gIHZhciB0YWcgPSBmbGFncy5hbGlnblxuICAgID8gJzwnICsgdHlwZSArICcgYWxpZ249XCInICsgZmxhZ3MuYWxpZ24gKyAnXCI+J1xuICAgIDogJzwnICsgdHlwZSArICc+JztcbiAgcmV0dXJuIHRhZyArIGNvbnRlbnQgKyAnPC8nICsgdHlwZSArICc+XFxuJztcbn07XG5cbi8vIHNwYW4gbGV2ZWwgcmVuZGVyZXJcblJlbmRlcmVyLnByb3RvdHlwZS5zdHJvbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPHN0cm9uZz4nICsgdGV4dCArICc8L3N0cm9uZz4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmVtID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxlbT4nICsgdGV4dCArICc8L2VtPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY29kZXNwYW4gPSBmdW5jdGlvbih0ZXh0KSB7XG4gIHJldHVybiAnPGNvZGU+JyArIHRleHQgKyAnPC9jb2RlPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbCA/ICc8YnIvPicgOiAnPGJyPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuZGVsID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxkZWw+JyArIHRleHQgKyAnPC9kZWw+Jztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5saW5rID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgaHJlZiA9IGNsZWFuVXJsKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSwgdGhpcy5vcHRpb25zLmJhc2VVcmwsIGhyZWYpO1xuICBpZiAoaHJlZiA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHZhciBvdXQgPSAnPGEgaHJlZj1cIicgKyBlc2NhcGUoaHJlZikgKyAnXCInO1xuICBpZiAodGl0bGUpIHtcbiAgICBvdXQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gIH1cbiAgb3V0ICs9ICc+JyArIHRleHQgKyAnPC9hPic7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuaW1hZ2UgPSBmdW5jdGlvbihocmVmLCB0aXRsZSwgdGV4dCkge1xuICBocmVmID0gY2xlYW5VcmwodGhpcy5vcHRpb25zLnNhbml0aXplLCB0aGlzLm9wdGlvbnMuYmFzZVVybCwgaHJlZik7XG4gIGlmIChocmVmID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB2YXIgb3V0ID0gJzxpbWcgc3JjPVwiJyArIGhyZWYgKyAnXCIgYWx0PVwiJyArIHRleHQgKyAnXCInO1xuICBpZiAodGl0bGUpIHtcbiAgICBvdXQgKz0gJyB0aXRsZT1cIicgKyB0aXRsZSArICdcIic7XG4gIH1cbiAgb3V0ICs9IHRoaXMub3B0aW9ucy54aHRtbCA/ICcvPicgOiAnPic7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQ7XG59O1xuXG4vKipcbiAqIFRleHRSZW5kZXJlclxuICogcmV0dXJucyBvbmx5IHRoZSB0ZXh0dWFsIHBhcnQgb2YgdGhlIHRva2VuXG4gKi9cblxuZnVuY3Rpb24gVGV4dFJlbmRlcmVyKCkge31cblxuLy8gbm8gbmVlZCBmb3IgYmxvY2sgbGV2ZWwgcmVuZGVyZXJzXG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUuc3Ryb25nID1cblRleHRSZW5kZXJlci5wcm90b3R5cGUuZW0gPVxuVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5jb2Rlc3BhbiA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmRlbCA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICByZXR1cm4gdGV4dDtcbn07XG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUubGluayA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmltYWdlID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgcmV0dXJuICcnICsgdGV4dDtcbn07XG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICcnO1xufTtcblxuLyoqXG4gKiBQYXJzaW5nICYgQ29tcGlsaW5nXG4gKi9cblxuZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMpIHtcbiAgdGhpcy50b2tlbnMgPSBbXTtcbiAgdGhpcy50b2tlbiA9IG51bGw7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzO1xuICB0aGlzLm9wdGlvbnMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXIgfHwgbmV3IFJlbmRlcmVyKCk7XG4gIHRoaXMucmVuZGVyZXIgPSB0aGlzLm9wdGlvbnMucmVuZGVyZXI7XG4gIHRoaXMucmVuZGVyZXIub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbn1cblxuLyoqXG4gKiBTdGF0aWMgUGFyc2UgTWV0aG9kXG4gKi9cblxuUGFyc2VyLnBhcnNlID0gZnVuY3Rpb24oc3JjLCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgUGFyc2VyKG9wdGlvbnMpO1xuICByZXR1cm4gcGFyc2VyLnBhcnNlKHNyYyk7XG59O1xuXG4vKipcbiAqIFBhcnNlIExvb3BcbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24oc3JjKSB7XG4gIHRoaXMuaW5saW5lID0gbmV3IElubGluZUxleGVyKHNyYy5saW5rcywgdGhpcy5vcHRpb25zKTtcbiAgLy8gdXNlIGFuIElubGluZUxleGVyIHdpdGggYSBUZXh0UmVuZGVyZXIgdG8gZXh0cmFjdCBwdXJlIHRleHRcbiAgdGhpcy5pbmxpbmVUZXh0ID0gbmV3IElubGluZUxleGVyKFxuICAgIHNyYy5saW5rcyxcbiAgICBtZXJnZSh7fSwgdGhpcy5vcHRpb25zLCB7cmVuZGVyZXI6IG5ldyBUZXh0UmVuZGVyZXIoKX0pXG4gICk7XG4gIHRoaXMudG9rZW5zID0gc3JjLnJldmVyc2UoKTtcblxuICB2YXIgb3V0ID0gJyc7XG4gIHdoaWxlICh0aGlzLm5leHQoKSkge1xuICAgIG91dCArPSB0aGlzLnRvaygpO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogTmV4dCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b2tlbiA9IHRoaXMudG9rZW5zLnBvcCgpO1xufTtcblxuLyoqXG4gKiBQcmV2aWV3IE5leHQgVG9rZW5cbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdIHx8IDA7XG59O1xuXG4vKipcbiAqIFBhcnNlIFRleHQgVG9rZW5zXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS5wYXJzZVRleHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGJvZHkgPSB0aGlzLnRva2VuLnRleHQ7XG5cbiAgd2hpbGUgKHRoaXMucGVlaygpLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgIGJvZHkgKz0gJ1xcbicgKyB0aGlzLm5leHQoKS50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuaW5saW5lLm91dHB1dChib2R5KTtcbn07XG5cbi8qKlxuICogUGFyc2UgQ3VycmVudCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUudG9rID0gZnVuY3Rpb24oKSB7XG4gIHN3aXRjaCAodGhpcy50b2tlbi50eXBlKSB7XG4gICAgY2FzZSAnc3BhY2UnOiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNhc2UgJ2hyJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaHIoKTtcbiAgICB9XG4gICAgY2FzZSAnaGVhZGluZyc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmhlYWRpbmcoXG4gICAgICAgIHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpLFxuICAgICAgICB0aGlzLnRva2VuLmRlcHRoLFxuICAgICAgICB1bmVzY2FwZSh0aGlzLmlubGluZVRleHQub3V0cHV0KHRoaXMudG9rZW4udGV4dCkpKTtcbiAgICB9XG4gICAgY2FzZSAnY29kZSc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmNvZGUodGhpcy50b2tlbi50ZXh0LFxuICAgICAgICB0aGlzLnRva2VuLmxhbmcsXG4gICAgICAgIHRoaXMudG9rZW4uZXNjYXBlZCk7XG4gICAgfVxuICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgdmFyIGhlYWRlciA9ICcnLFxuICAgICAgICAgIGJvZHkgPSAnJyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjZWxsLFxuICAgICAgICAgIGo7XG5cbiAgICAgIC8vIGhlYWRlclxuICAgICAgY2VsbCA9ICcnO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudG9rZW4uaGVhZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNlbGwgKz0gdGhpcy5yZW5kZXJlci50YWJsZWNlbGwoXG4gICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4uaGVhZGVyW2ldKSxcbiAgICAgICAgICB7IGhlYWRlcjogdHJ1ZSwgYWxpZ246IHRoaXMudG9rZW4uYWxpZ25baV0gfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaGVhZGVyICs9IHRoaXMucmVuZGVyZXIudGFibGVyb3coY2VsbCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnRva2VuLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJvdyA9IHRoaXMudG9rZW4uY2VsbHNbaV07XG5cbiAgICAgICAgY2VsbCA9ICcnO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbChcbiAgICAgICAgICAgIHRoaXMuaW5saW5lLm91dHB1dChyb3dbal0pLFxuICAgICAgICAgICAgeyBoZWFkZXI6IGZhbHNlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltqXSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgKz0gdGhpcy5yZW5kZXJlci50YWJsZXJvdyhjZWxsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnRhYmxlKGhlYWRlciwgYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2Jsb2NrcXVvdGVfc3RhcnQnOiB7XG4gICAgICBib2R5ID0gJyc7XG5cbiAgICAgIHdoaWxlICh0aGlzLm5leHQoKS50eXBlICE9PSAnYmxvY2txdW90ZV9lbmQnKSB7XG4gICAgICAgIGJvZHkgKz0gdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnbGlzdF9zdGFydCc6IHtcbiAgICAgIGJvZHkgPSAnJztcbiAgICAgIHZhciBvcmRlcmVkID0gdGhpcy50b2tlbi5vcmRlcmVkLFxuICAgICAgICAgIHN0YXJ0ID0gdGhpcy50b2tlbi5zdGFydDtcblxuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdsaXN0X2VuZCcpIHtcbiAgICAgICAgYm9keSArPSB0aGlzLnRvaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0KGJvZHksIG9yZGVyZWQsIHN0YXJ0KTtcbiAgICB9XG4gICAgY2FzZSAnbGlzdF9pdGVtX3N0YXJ0Jzoge1xuICAgICAgYm9keSA9ICcnO1xuICAgICAgdmFyIGxvb3NlID0gdGhpcy50b2tlbi5sb29zZTtcblxuICAgICAgaWYgKHRoaXMudG9rZW4udGFzaykge1xuICAgICAgICBib2R5ICs9IHRoaXMucmVuZGVyZXIuY2hlY2tib3godGhpcy50b2tlbi5jaGVja2VkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdsaXN0X2l0ZW1fZW5kJykge1xuICAgICAgICBib2R5ICs9ICFsb29zZSAmJiB0aGlzLnRva2VuLnR5cGUgPT09ICd0ZXh0J1xuICAgICAgICAgID8gdGhpcy5wYXJzZVRleHQoKVxuICAgICAgICAgIDogdGhpcy50b2soKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIubGlzdGl0ZW0oYm9keSk7XG4gICAgfVxuICAgIGNhc2UgJ2h0bWwnOiB7XG4gICAgICAvLyBUT0RPIHBhcnNlIGlubGluZSBjb250ZW50IGlmIHBhcmFtZXRlciBtYXJrZG93bj0xXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5odG1sKHRoaXMudG9rZW4udGV4dCk7XG4gICAgfVxuICAgIGNhc2UgJ3BhcmFncmFwaCc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSk7XG4gICAgfVxuICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZVRleHQoKSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlcnNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoaHRtbCwgZW5jb2RlKSB7XG4gIGlmIChlbmNvZGUpIHtcbiAgICBpZiAoZXNjYXBlLmVzY2FwZVRlc3QudGVzdChodG1sKSkge1xuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZShlc2NhcGUuZXNjYXBlUmVwbGFjZSwgZnVuY3Rpb24gKGNoKSB7IHJldHVybiBlc2NhcGUucmVwbGFjZW1lbnRzW2NoXTsgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChlc2NhcGUuZXNjYXBlVGVzdE5vRW5jb2RlLnRlc3QoaHRtbCkpIHtcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoZXNjYXBlLmVzY2FwZVJlcGxhY2VOb0VuY29kZSwgZnVuY3Rpb24gKGNoKSB7IHJldHVybiBlc2NhcGUucmVwbGFjZW1lbnRzW2NoXTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmVzY2FwZS5lc2NhcGVUZXN0ID0gL1smPD5cIiddLztcbmVzY2FwZS5lc2NhcGVSZXBsYWNlID0gL1smPD5cIiddL2c7XG5lc2NhcGUucmVwbGFjZW1lbnRzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnXG59O1xuXG5lc2NhcGUuZXNjYXBlVGVzdE5vRW5jb2RlID0gL1s8PlwiJ118Jig/ISM/XFx3KzspLztcbmVzY2FwZS5lc2NhcGVSZXBsYWNlTm9FbmNvZGUgPSAvWzw+XCInXXwmKD8hIz9cXHcrOykvZztcblxuZnVuY3Rpb24gdW5lc2NhcGUoaHRtbCkge1xuICAvLyBleHBsaWNpdGx5IG1hdGNoIGRlY2ltYWwsIGhleCwgYW5kIG5hbWVkIEhUTUwgZW50aXRpZXNcbiAgcmV0dXJuIGh0bWwucmVwbGFjZSgvJigjKD86XFxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/OlxcdyspKTs/L2lnLCBmdW5jdGlvbihfLCBuKSB7XG4gICAgbiA9IG4udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobiA9PT0gJ2NvbG9uJykgcmV0dXJuICc6JztcbiAgICBpZiAobi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgcmV0dXJuIG4uY2hhckF0KDEpID09PSAneCdcbiAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpXG4gICAgICAgIDogU3RyaW5nLmZyb21DaGFyQ29kZSgrbi5zdWJzdHJpbmcoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZGl0KHJlZ2V4LCBvcHQpIHtcbiAgcmVnZXggPSByZWdleC5zb3VyY2UgfHwgcmVnZXg7XG4gIG9wdCA9IG9wdCB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICByZXBsYWNlOiBmdW5jdGlvbihuYW1lLCB2YWwpIHtcbiAgICAgIHZhbCA9IHZhbC5zb3VyY2UgfHwgdmFsO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLyhefFteXFxbXSlcXF4vZywgJyQxJyk7XG4gICAgICByZWdleCA9IHJlZ2V4LnJlcGxhY2UobmFtZSwgdmFsKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZ2V0UmVnZXg6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsIG9wdCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGVhblVybChzYW5pdGl6ZSwgYmFzZSwgaHJlZikge1xuICBpZiAoc2FuaXRpemUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHByb3QgPSBkZWNvZGVVUklDb21wb25lbnQodW5lc2NhcGUoaHJlZikpXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcdzpdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHByb3QuaW5kZXhPZignamF2YXNjcmlwdDonKSA9PT0gMCB8fCBwcm90LmluZGV4T2YoJ3Zic2NyaXB0OicpID09PSAwIHx8IHByb3QuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIGlmIChiYXNlICYmICFvcmlnaW5JbmRlcGVuZGVudFVybC50ZXN0KGhyZWYpKSB7XG4gICAgaHJlZiA9IHJlc29sdmVVcmwoYmFzZSwgaHJlZik7XG4gIH1cbiAgdHJ5IHtcbiAgICBocmVmID0gZW5jb2RlVVJJKGhyZWYpLnJlcGxhY2UoLyUyNS9nLCAnJScpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGhyZWY7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVVcmwoYmFzZSwgaHJlZikge1xuICBpZiAoIWJhc2VVcmxzWycgJyArIGJhc2VdKSB7XG4gICAgLy8gd2UgY2FuIGlnbm9yZSBldmVyeXRoaW5nIGluIGJhc2UgYWZ0ZXIgdGhlIGxhc3Qgc2xhc2ggb2YgaXRzIHBhdGggY29tcG9uZW50LFxuICAgIC8vIGJ1dCB3ZSBtaWdodCBuZWVkIHRvIGFkZCBfdGhhdF9cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTNcbiAgICBpZiAoL15bXjpdKzpcXC8qW14vXSokLy50ZXN0KGJhc2UpKSB7XG4gICAgICBiYXNlVXJsc1snICcgKyBiYXNlXSA9IGJhc2UgKyAnLyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VVcmxzWycgJyArIGJhc2VdID0gcnRyaW0oYmFzZSwgJy8nLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgYmFzZSA9IGJhc2VVcmxzWycgJyArIGJhc2VdO1xuXG4gIGlmIChocmVmLnNsaWNlKDAsIDIpID09PSAnLy8nKSB7XG4gICAgcmV0dXJuIGJhc2UucmVwbGFjZSgvOltcXHNcXFNdKi8sICc6JykgKyBocmVmO1xuICB9IGVsc2UgaWYgKGhyZWYuY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC8oOlxcLypbXi9dKilbXFxzXFxTXSovLCAnJDEnKSArIGhyZWY7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2UgKyBocmVmO1xuICB9XG59XG52YXIgYmFzZVVybHMgPSB7fTtcbnZhciBvcmlnaW5JbmRlcGVuZGVudFVybCA9IC9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxubm9vcC5leGVjID0gbm9vcDtcblxuZnVuY3Rpb24gbWVyZ2Uob2JqKSB7XG4gIHZhciBpID0gMSxcbiAgICAgIHRhcmdldCxcbiAgICAgIGtleTtcblxuICBmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHRhcmdldCA9IGFyZ3VtZW50c1tpXTtcbiAgICBmb3IgKGtleSBpbiB0YXJnZXQpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gdGFyZ2V0W2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gc3BsaXRDZWxscyh0YWJsZVJvdywgY291bnQpIHtcbiAgLy8gZW5zdXJlIHRoYXQgZXZlcnkgY2VsbC1kZWxpbWl0aW5nIHBpcGUgaGFzIGEgc3BhY2VcbiAgLy8gYmVmb3JlIGl0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYW4gZXNjYXBlZCBwaXBlXG4gIHZhciByb3cgPSB0YWJsZVJvdy5yZXBsYWNlKC9cXHwvZywgZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cikge1xuICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLFxuICAgICAgICAgICAgY3VyciA9IG9mZnNldDtcbiAgICAgICAgd2hpbGUgKC0tY3VyciA+PSAwICYmIHN0cltjdXJyXSA9PT0gJ1xcXFwnKSBlc2NhcGVkID0gIWVzY2FwZWQ7XG4gICAgICAgIGlmIChlc2NhcGVkKSB7XG4gICAgICAgICAgLy8gb2RkIG51bWJlciBvZiBzbGFzaGVzIG1lYW5zIHwgaXMgZXNjYXBlZFxuICAgICAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IGFsb25lXG4gICAgICAgICAgcmV0dXJuICd8JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBhZGQgc3BhY2UgYmVmb3JlIHVuZXNjYXBlZCB8XG4gICAgICAgICAgcmV0dXJuICcgfCc7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2VsbHMgPSByb3cuc3BsaXQoLyBcXHwvKSxcbiAgICAgIGkgPSAwO1xuXG4gIGlmIChjZWxscy5sZW5ndGggPiBjb3VudCkge1xuICAgIGNlbGxzLnNwbGljZShjb3VudCk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGNlbGxzLmxlbmd0aCA8IGNvdW50KSBjZWxscy5wdXNoKCcnKTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBwZXIgdGhlIGdmbSBzcGVjXG4gICAgY2VsbHNbaV0gPSBjZWxsc1tpXS50cmltKCkucmVwbGFjZSgvXFxcXFxcfC9nLCAnfCcpO1xuICB9XG4gIHJldHVybiBjZWxscztcbn1cblxuLy8gUmVtb3ZlIHRyYWlsaW5nICdjJ3MuIEVxdWl2YWxlbnQgdG8gc3RyLnJlcGxhY2UoL2MqJC8sICcnKS5cbi8vIC9jKiQvIGlzIHZ1bG5lcmFibGUgdG8gUkVET1MuXG4vLyBpbnZlcnQ6IFJlbW92ZSBzdWZmaXggb2Ygbm9uLWMgY2hhcnMgaW5zdGVhZC4gRGVmYXVsdCBmYWxzZXkuXG5mdW5jdGlvbiBydHJpbShzdHIsIGMsIGludmVydCkge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIExlbmd0aCBvZiBzdWZmaXggbWF0Y2hpbmcgdGhlIGludmVydCBjb25kaXRpb24uXG4gIHZhciBzdWZmTGVuID0gMDtcblxuICAvLyBTdGVwIGxlZnQgdW50aWwgd2UgZmFpbCB0byBtYXRjaCB0aGUgaW52ZXJ0IGNvbmRpdGlvbi5cbiAgd2hpbGUgKHN1ZmZMZW4gPCBzdHIubGVuZ3RoKSB7XG4gICAgdmFyIGN1cnJDaGFyID0gc3RyLmNoYXJBdChzdHIubGVuZ3RoIC0gc3VmZkxlbiAtIDEpO1xuICAgIGlmIChjdXJyQ2hhciA9PT0gYyAmJiAhaW52ZXJ0KSB7XG4gICAgICBzdWZmTGVuKys7XG4gICAgfSBlbHNlIGlmIChjdXJyQ2hhciAhPT0gYyAmJiBpbnZlcnQpIHtcbiAgICAgIHN1ZmZMZW4rKztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ci5zdWJzdHIoMCwgc3RyLmxlbmd0aCAtIHN1ZmZMZW4pO1xufVxuXG4vKipcbiAqIE1hcmtlZFxuICovXG5cbmZ1bmN0aW9uIG1hcmtlZChzcmMsIG9wdCwgY2FsbGJhY2spIHtcbiAgLy8gdGhyb3cgZXJyb3IgaW4gY2FzZSBvZiBub24gc3RyaW5nIGlucHV0XG4gIGlmICh0eXBlb2Ygc3JjID09PSAndW5kZWZpbmVkJyB8fCBzcmMgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgfVxuICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAnXG4gICAgICArIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzcmMpICsgJywgc3RyaW5nIGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoY2FsbGJhY2sgfHwgdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0O1xuICAgICAgb3B0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBvcHQgPSBtZXJnZSh7fSwgbWFya2VkLmRlZmF1bHRzLCBvcHQgfHwge30pO1xuXG4gICAgdmFyIGhpZ2hsaWdodCA9IG9wdC5oaWdobGlnaHQsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgcGVuZGluZyxcbiAgICAgICAgaSA9IDA7XG5cbiAgICB0cnkge1xuICAgICAgdG9rZW5zID0gTGV4ZXIubGV4KHNyYywgb3B0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgfVxuXG4gICAgcGVuZGluZyA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBvcHQuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG91dDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0ID0gUGFyc2VyLnBhcnNlKHRva2Vucywgb3B0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyID0gZTtcbiAgICAgIH1cblxuICAgICAgb3B0LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcblxuICAgICAgcmV0dXJuIGVyclxuICAgICAgICA/IGNhbGxiYWNrKGVycilcbiAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvdXQpO1xuICAgIH07XG5cbiAgICBpZiAoIWhpZ2hsaWdodCB8fCBoaWdobGlnaHQubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgb3B0LmhpZ2hsaWdodDtcblxuICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUoKTtcblxuICAgIGZvciAoOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xuICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQodG9rZW4udGV4dCwgdG9rZW4ubGFuZywgZnVuY3Rpb24oZXJyLCBjb2RlKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IHRva2VuLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbi50ZXh0ID0gY29kZTtcbiAgICAgICAgICB0b2tlbi5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKHRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdCkgb3B0ID0gbWVyZ2Uoe30sIG1hcmtlZC5kZWZhdWx0cywgb3B0KTtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKExleGVyLmxleChzcmMsIG9wdCksIG9wdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlLm1lc3NhZ2UgKz0gJ1xcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLic7XG4gICAgaWYgKChvcHQgfHwgbWFya2VkLmRlZmF1bHRzKS5zaWxlbnQpIHtcbiAgICAgIHJldHVybiAnPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+J1xuICAgICAgICArIGVzY2FwZShlLm1lc3NhZ2UgKyAnJywgdHJ1ZSlcbiAgICAgICAgKyAnPC9wcmU+JztcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnNcbiAqL1xuXG5tYXJrZWQub3B0aW9ucyA9XG5tYXJrZWQuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdCkge1xuICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7XG4gIHJldHVybiBtYXJrZWQ7XG59O1xuXG5tYXJrZWQuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogbnVsbCxcbiAgICBicmVha3M6IGZhbHNlLFxuICAgIGdmbTogdHJ1ZSxcbiAgICBoZWFkZXJJZHM6IHRydWUsXG4gICAgaGVhZGVyUHJlZml4OiAnJyxcbiAgICBoaWdobGlnaHQ6IG51bGwsXG4gICAgbGFuZ1ByZWZpeDogJ2xhbmd1YWdlLScsXG4gICAgbWFuZ2xlOiB0cnVlLFxuICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICByZW5kZXJlcjogbmV3IFJlbmRlcmVyKCksXG4gICAgc2FuaXRpemU6IGZhbHNlLFxuICAgIHNhbml0aXplcjogbnVsbCxcbiAgICBzaWxlbnQ6IGZhbHNlLFxuICAgIHNtYXJ0TGlzdHM6IGZhbHNlLFxuICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICB0YWJsZXM6IHRydWUsXG4gICAgeGh0bWw6IGZhbHNlXG4gIH07XG59O1xuXG5tYXJrZWQuZGVmYXVsdHMgPSBtYXJrZWQuZ2V0RGVmYXVsdHMoKTtcblxuLyoqXG4gKiBFeHBvc2VcbiAqL1xuXG5tYXJrZWQuUGFyc2VyID0gUGFyc2VyO1xubWFya2VkLnBhcnNlciA9IFBhcnNlci5wYXJzZTtcblxubWFya2VkLlJlbmRlcmVyID0gUmVuZGVyZXI7XG5tYXJrZWQuVGV4dFJlbmRlcmVyID0gVGV4dFJlbmRlcmVyO1xuXG5tYXJrZWQuTGV4ZXIgPSBMZXhlcjtcbm1hcmtlZC5sZXhlciA9IExleGVyLmxleDtcblxubWFya2VkLklubGluZUxleGVyID0gSW5saW5lTGV4ZXI7XG5tYXJrZWQuaW5saW5lTGV4ZXIgPSBJbmxpbmVMZXhlci5vdXRwdXQ7XG5cbm1hcmtlZC5wYXJzZSA9IG1hcmtlZDtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICBtb2R1bGUuZXhwb3J0cyA9IG1hcmtlZDtcbn0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gIGRlZmluZShmdW5jdGlvbigpIHsgcmV0dXJuIG1hcmtlZDsgfSk7XG59IGVsc2Uge1xuICByb290Lm1hcmtlZCA9IG1hcmtlZDtcbn1cbn0pKHRoaXMgfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKSk7XG4iLCJ2YXIgaGxqcyA9IHJlcXVpcmUoJy4vaGlnaGxpZ2h0Jyk7XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnMWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy8xYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWJuZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FjY2Vzc2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FjY2Vzc2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWN0aW9uc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhZGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hZGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FuZ2Vsc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYW5nZWxzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FwYWNoZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FwYWNoZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXBwbGVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcHBsZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXJjYWRlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJjYWRlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjcHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FyZHVpbm8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcmR1aW5vJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhcm1hc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcm1hc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3htbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3htbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXNjaWlkb2MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hc2NpaWRvYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXNwZWN0aicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FzcGVjdGonKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F1dG9ob3RrZXknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdXRvaG90a2V5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdXRvaXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdXRvaXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F2cmFzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2F2cmFzbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXdrJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXdrJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdheGFwdGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9heGFwdGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Jhc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9iYXNoJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdiYXNpYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Jhc2ljJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdibmYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2JyYWluZnVjaycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2JyYWluZnVjaycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjYXBucHJvdG8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jYXBucHJvdG8nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NleWxvbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NleWxvbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2xlYW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbGVhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2xvanVyZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Nsb2p1cmUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Nsb2p1cmUtcmVwbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2Nsb2p1cmUtcmVwbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY21ha2UnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbWFrZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY29mZmVlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY29mZmVlc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjb3EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jb3EnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NvcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NvcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3Jtc2gnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcm1zaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3J5c3RhbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NyeXN0YWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3NzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWFya2Rvd24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXJrZG93bicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGFydCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RhcnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RlbHBoaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RlbHBoaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZGlmZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RpZmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RqYW5nbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RqYW5nbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZG5zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG5zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkb2NrZXJmaWxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG9ja2VyZmlsZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZG9zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZG9zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkc2NvbmZpZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RzY29uZmlnJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkdHMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kdHMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2R1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kdXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlYm5mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZWJuZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZWxpeGlyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZWxpeGlyJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlbG0nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lbG0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1YnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydWJ5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlcmInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lcmInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VybGFuZy1yZXBsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZXJsYW5nLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VybGFuZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VybGFuZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZXhjZWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9leGNlbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZml4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZml4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdmbGl4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZmxpeCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZm9ydHJhbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZvcnRyYW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2ZzaGFycCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZzaGFycCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2FtcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dhbXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dhdXNzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2F1c3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2djb2RlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2NvZGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2doZXJraW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9naGVya2luJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbHNsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2xzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ21sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ21sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnb2xvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ29sbycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ3JhZGxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ3JhZGxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdncm9vdnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ncm9vdnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoYW5kbGViYXJzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaGFuZGxlYmFycycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGFza2VsbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hhc2tlbGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hheGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYXhlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoc3AnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oc3AnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h0bWxiYXJzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaHRtbGJhcnMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h0dHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9odHRwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoeScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2h5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpbmZvcm03JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaW5mb3JtNycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaW5pJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaW5pJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpcnBmOTAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pcnBmOTAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2lzYmwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pc2JsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYXZhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvamF2YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamF2YXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2phdmFzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2pib3NzLWNsaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2pib3NzLWNsaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnanNvbicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2pzb24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2p1bGlhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvanVsaWEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2p1bGlhLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qdWxpYS1yZXBsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdrb3RsaW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9rb3RsaW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xhc3NvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGFzc28nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xkaWYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sZGlmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsZWFmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGVhZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGVzcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xlc3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xpc3AnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9saXNwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsaXZlY29kZXNlcnZlcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xpdmVjb2Rlc2VydmVyJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsaXZlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGl2ZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGx2bScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xsdm0nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbHVhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbHVhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYWtlZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21ha2VmaWxlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXRoZW1hdGljYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21hdGhlbWF0aWNhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXRsYWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXRsYWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21heGltYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21heGltYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWVsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWVsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtZXJjdXJ5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWVyY3VyeScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWlwc2FzbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21pcHNhc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21pemFyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWl6YXInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BlcmwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZXJsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtb2pvbGljaW91cycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21vam9saWNpb3VzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtb25rZXknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tb25rZXknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21vb25zY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tb29uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduMXFsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbjFxbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbmdpbngnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uZ2lueCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbmltcm9kJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbmltcm9kJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduaXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uaXgnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ25zaXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9uc2lzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdvYmplY3RpdmVjJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb2JqZWN0aXZlYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb2NhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9vY2FtbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb3BlbnNjYWQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9vcGVuc2NhZCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb3h5Z2VuZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL294eWdlbmUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BhcnNlcjMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wYXJzZXIzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZ3NxbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Bnc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwaHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9waHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3BsYWludGV4dCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BsYWludGV4dCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncG9ueScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3BvbnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Bvd2Vyc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wb3dlcnNoZWxsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwcm9jZXNzaW5nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvY2Vzc2luZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2ZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvcGVydGllcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb3BlcnRpZXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb3RvYnVmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvdG9idWYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B1cHBldCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B1cHBldCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHVyZWJhc2ljJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHVyZWJhc2ljJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdweXRob24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9weXRob24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdxbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9xbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3InLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyZWFzb25tbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JlYXNvbm1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyaWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yaWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvYm9jb25mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm9ib2NvbmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JvdXRlcm9zJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcm91dGVyb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3JzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JzbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncnVsZXNsYW5ndWFnZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3J1bGVzbGFuZ3VhZ2UnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1c3QnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydXN0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzYXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zYXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjYWxhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NhbGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NjaGVtZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NjaGVtZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2NpbGFiJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NpbGFiJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY3NzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2hlbGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zaGVsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWFsaScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc21hbGx0YWxrJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc21hbGx0YWxrJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NxZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NxZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3FsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdGFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RhbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RhdGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdGF0YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3RlcDIxJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3RlcDIxJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdHlsdXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdHlsdXMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N1YnVuaXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdWJ1bml0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzd2lmdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N3aWZ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YWdnZXJzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YWdnZXJzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3lhbWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy95YW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0YXAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90YXAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RjbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RjbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndGV4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdGV4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0aHJpZnQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90aHJpZnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R3aWcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90d2lnJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0eXBlc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdHlwZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmFsYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZhbGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZibmV0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJuZXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Zic2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmJzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Zic2NyaXB0LWh0bWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92YnNjcmlwdC1odG1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2ZXJpbG9nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmVyaWxvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmhkbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZoZGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3ZpbScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3ZpbScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneDg2YXNtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveDg2YXNtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3hsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4cXVlcnknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94cXVlcnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3plcGhpcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3plcGhpcicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBobGpzOyIsIi8qXG5TeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggbGFuZ3VhZ2UgYXV0b2RldGVjdGlvbi5cbmh0dHBzOi8vaGlnaGxpZ2h0anMub3JnL1xuKi9cblxuKGZ1bmN0aW9uKGZhY3RvcnkpIHtcblxuICAvLyBGaW5kIHRoZSBnbG9iYWwgb2JqZWN0IGZvciBleHBvcnQgdG8gYm90aCB0aGUgYnJvd3NlciBhbmQgd2ViIHdvcmtlcnMuXG4gIHZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB3aW5kb3cgfHxcbiAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxmID09PSAnb2JqZWN0JyAmJiBzZWxmO1xuXG4gIC8vIFNldHVwIGhpZ2hsaWdodC5qcyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy4gRmlyc3QgaXMgTm9kZS5qcyBvclxuICAvLyBDb21tb25KUy5cbiAgLy8gYG5vZGVUeXBlYCBpcyBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IGBleHBvcnRzYCBpcyBub3QgYSBIVE1MIGVsZW1lbnQuXG4gIGlmKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyAmJiAhZXhwb3J0cy5ub2RlVHlwZSkge1xuICAgIGZhY3RvcnkoZXhwb3J0cyk7XG4gIH0gZWxzZSBpZihnbG9iYWxPYmplY3QpIHtcbiAgICAvLyBFeHBvcnQgaGxqcyBnbG9iYWxseSBldmVuIHdoZW4gdXNpbmcgQU1EIGZvciBjYXNlcyB3aGVuIHRoaXMgc2NyaXB0XG4gICAgLy8gaXMgbG9hZGVkIHdpdGggb3RoZXJzIHRoYXQgbWF5IHN0aWxsIGV4cGVjdCBhIGdsb2JhbCBobGpzLlxuICAgIGdsb2JhbE9iamVjdC5obGpzID0gZmFjdG9yeSh7fSk7XG5cbiAgICAvLyBGaW5hbGx5IHJlZ2lzdGVyIHRoZSBnbG9iYWwgaGxqcyB3aXRoIEFNRC5cbiAgICBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxPYmplY3QuaGxqcztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59KGZ1bmN0aW9uKGhsanMpIHtcbiAgLy8gQ29udmVuaWVuY2UgdmFyaWFibGVzIGZvciBidWlsZC1pbiBvYmplY3RzXG4gIHZhciBBcnJheVByb3RvID0gW10sXG4gICAgICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XG5cbiAgLy8gR2xvYmFsIGludGVybmFsIHZhcmlhYmxlcyB1c2VkIHdpdGhpbiB0aGUgaGlnaGxpZ2h0LmpzIGxpYnJhcnkuXG4gIHZhciBsYW5ndWFnZXMgPSB7fSxcbiAgICAgIGFsaWFzZXMgICA9IHt9O1xuXG4gIC8vIHNhZmUvcHJvZHVjdGlvbiBtb2RlIC0gc3dhbGxvd3MgbW9yZSBlcnJvcnMsIHRyaWVzIHRvIGtlZXAgcnVubmluZ1xuICAvLyBldmVuIGlmIGEgc2luZ2xlIHN5bnRheCBvciBwYXJzZSBoaXRzIGEgZmF0YWwgZXJyb3JcbiAgdmFyIFNBRkVfTU9ERSA9IHRydWU7XG5cbiAgLy8gUmVndWxhciBleHByZXNzaW9ucyB1c2VkIHRocm91Z2hvdXQgdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICB2YXIgbm9IaWdobGlnaHRSZSAgICA9IC9eKG5vLT9oaWdobGlnaHR8cGxhaW58dGV4dCkkL2ksXG4gICAgICBsYW5ndWFnZVByZWZpeFJlID0gL1xcYmxhbmcoPzp1YWdlKT8tKFtcXHctXSspXFxiL2ksXG4gICAgICBmaXhNYXJrdXBSZSAgICAgID0gLygoXig8W14+XSs+fFxcdHwpK3woPzpcXG4pKSkvZ207XG5cbiAgLy8gVGhlIG9iamVjdCB3aWxsIGJlIGFzc2lnbmVkIGJ5IHRoZSBidWlsZCB0b29sLiBJdCB1c2VkIHRvIHN5bmNocm9uaXplIEFQSVxuICAvLyBvZiBleHRlcm5hbCBsYW5ndWFnZSBmaWxlcyB3aXRoIG1pbmlmaWVkIHZlcnNpb24gb2YgdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICB2YXIgQVBJX1JFUExBQ0VTO1xuXG4gIHZhciBzcGFuRW5kVGFnID0gJzwvc3Bhbj4nO1xuICB2YXIgTEFOR1VBR0VfTk9UX0ZPVU5EID0gXCJDb3VsZCBub3QgZmluZCB0aGUgbGFuZ3VhZ2UgJ3t9JywgZGlkIHlvdSBmb3JnZXQgdG8gbG9hZC9pbmNsdWRlIGEgbGFuZ3VhZ2UgbW9kdWxlP1wiO1xuXG4gIC8vIEdsb2JhbCBvcHRpb25zIHVzZWQgd2hlbiB3aXRoaW4gZXh0ZXJuYWwgQVBJcy4gVGhpcyBpcyBtb2RpZmllZCB3aGVuXG4gIC8vIGNhbGxpbmcgdGhlIGBobGpzLmNvbmZpZ3VyZWAgZnVuY3Rpb24uXG4gIHZhciBvcHRpb25zID0ge1xuICAgIGNsYXNzUHJlZml4OiAnaGxqcy0nLFxuICAgIHRhYlJlcGxhY2U6IG51bGwsXG4gICAgdXNlQlI6IGZhbHNlLFxuICAgIGxhbmd1YWdlczogdW5kZWZpbmVkXG4gIH07XG5cbiAgLy8ga2V5d29yZHMgdGhhdCBzaG91bGQgaGF2ZSBubyBkZWZhdWx0IHJlbGV2YW5jZSB2YWx1ZVxuICB2YXIgQ09NTU9OX0tFWVdPUkRTID0gJ29mIGFuZCBmb3IgaW4gbm90IG9yIGlmIHRoZW4nLnNwbGl0KCcgJyk7XG5cblxuICAvKiBVdGlsaXR5IGZ1bmN0aW9ucyAqL1xuXG4gIGZ1bmN0aW9uIGVzY2FwZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWcobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXN0UmUocmUsIGxleGVtZSkge1xuICAgIHZhciBtYXRjaCA9IHJlICYmIHJlLmV4ZWMobGV4ZW1lKTtcbiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2guaW5kZXggPT09IDA7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vdEhpZ2hsaWdodGVkKGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIG5vSGlnaGxpZ2h0UmUudGVzdChsYW5ndWFnZSk7XG4gIH1cblxuICBmdW5jdGlvbiBibG9ja0xhbmd1YWdlKGJsb2NrKSB7XG4gICAgdmFyIGksIG1hdGNoLCBsZW5ndGgsIF9jbGFzcztcbiAgICB2YXIgY2xhc3NlcyA9IGJsb2NrLmNsYXNzTmFtZSArICcgJztcblxuICAgIGNsYXNzZXMgKz0gYmxvY2sucGFyZW50Tm9kZSA/IGJsb2NrLnBhcmVudE5vZGUuY2xhc3NOYW1lIDogJyc7XG5cbiAgICAvLyBsYW5ndWFnZS0qIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBub24tcHJlZml4ZWQgY2xhc3MgbmFtZXMuXG4gICAgbWF0Y2ggPSBsYW5ndWFnZVByZWZpeFJlLmV4ZWMoY2xhc3Nlcyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShtYXRjaFsxXSk7XG4gICAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIG1hdGNoWzFdKSk7XG4gICAgICAgIGNvbnNvbGUud2FybihcIkZhbGxpbmcgYmFjayB0byBuby1oaWdobGlnaHQgbW9kZSBmb3IgdGhpcyBibG9jay5cIiwgYmxvY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhbmd1YWdlID8gbWF0Y2hbMV0gOiAnbm8taGlnaGxpZ2h0JztcbiAgICB9XG5cbiAgICBjbGFzc2VzID0gY2xhc3Nlcy5zcGxpdCgvXFxzKy8pO1xuXG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgX2NsYXNzID0gY2xhc3Nlc1tpXTtcblxuICAgICAgaWYgKGlzTm90SGlnaGxpZ2h0ZWQoX2NsYXNzKSB8fCBnZXRMYW5ndWFnZShfY2xhc3MpKSB7XG4gICAgICAgIHJldHVybiBfY2xhc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHBlcmZvcm1zIGEgc2hhbGxvdyBtZXJnZSBvZiBtdWx0aXBsZSBvYmplY3RzIGludG8gb25lXG4gICAqXG4gICAqIEBhcmd1bWVudHMgbGlzdCBvZiBvYmplY3RzIHdpdGggcHJvcGVydGllcyB0byBtZXJnZVxuICAgKiBAcmV0dXJucyBhIHNpbmdsZSBuZXcgb2JqZWN0XG4gICAqL1xuICBmdW5jdGlvbiBpbmhlcml0KHBhcmVudCkgeyAgLy8gaW5oZXJpdChwYXJlbnQsIG92ZXJyaWRlX29iaiwgb3ZlcnJpZGVfb2JqLCAuLi4pXG4gICAgdmFyIGtleTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIG9iamVjdHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgZm9yIChrZXkgaW4gcGFyZW50KVxuICAgICAgcmVzdWx0W2tleV0gPSBwYXJlbnRba2V5XTtcbiAgICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICBmb3IgKGtleSBpbiBvYmopXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qIFN0cmVhbSBtZXJnaW5nICovXG5cbiAgZnVuY3Rpb24gbm9kZVN0cmVhbShub2RlKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIChmdW5jdGlvbiBfbm9kZVN0cmVhbShub2RlLCBvZmZzZXQpIHtcbiAgICAgIGZvciAodmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZykge1xuICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDMpXG4gICAgICAgICAgb2Zmc2V0ICs9IGNoaWxkLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICAgIGVsc2UgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6ICdzdGFydCcsXG4gICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgIG5vZGU6IGNoaWxkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgb2Zmc2V0ID0gX25vZGVTdHJlYW0oY2hpbGQsIG9mZnNldCk7XG4gICAgICAgICAgLy8gUHJldmVudCB2b2lkIGVsZW1lbnRzIGZyb20gaGF2aW5nIGFuIGVuZCB0YWcgdGhhdCB3b3VsZCBhY3R1YWxseVxuICAgICAgICAgIC8vIGRvdWJsZSB0aGVtIGluIHRoZSBvdXRwdXQuIFRoZXJlIGFyZSBtb3JlIHZvaWQgZWxlbWVudHMgaW4gSFRNTFxuICAgICAgICAgIC8vIGJ1dCB3ZSBsaXN0IG9ubHkgdGhvc2UgcmVhbGlzdGljYWxseSBleHBlY3RlZCBpbiBjb2RlIGRpc3BsYXkuXG4gICAgICAgICAgaWYgKCF0YWcoY2hpbGQpLm1hdGNoKC9icnxocnxpbWd8aW5wdXQvKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICBldmVudDogJ3N0b3AnLFxuICAgICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9KShub2RlLCAwKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2VTdHJlYW1zKG9yaWdpbmFsLCBoaWdobGlnaHRlZCwgdmFsdWUpIHtcbiAgICB2YXIgcHJvY2Vzc2VkID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIG5vZGVTdGFjayA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0U3RyZWFtKCkge1xuICAgICAgaWYgKCFvcmlnaW5hbC5sZW5ndGggfHwgIWhpZ2hsaWdodGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWwubGVuZ3RoID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICAgIH1cbiAgICAgIGlmIChvcmlnaW5hbFswXS5vZmZzZXQgIT09IGhpZ2hsaWdodGVkWzBdLm9mZnNldCkge1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsWzBdLm9mZnNldCA8IGhpZ2hsaWdodGVkWzBdLm9mZnNldCkgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkO1xuICAgICAgfVxuXG4gICAgICAvKlxuICAgICAgVG8gYXZvaWQgc3RhcnRpbmcgdGhlIHN0cmVhbSBqdXN0IGJlZm9yZSBpdCBzaG91bGQgc3RvcCB0aGUgb3JkZXIgaXNcbiAgICAgIGVuc3VyZWQgdGhhdCBvcmlnaW5hbCBhbHdheXMgc3RhcnRzIGZpcnN0IGFuZCBjbG9zZXMgbGFzdDpcblxuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RhcnQnICYmIGV2ZW50MiA9PSAnc3RhcnQnKVxuICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICBpZiAoZXZlbnQxID09ICdzdGFydCcgJiYgZXZlbnQyID09ICdzdG9wJylcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodGVkO1xuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RvcCcgJiYgZXZlbnQyID09ICdzdGFydCcpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbDtcbiAgICAgIGlmIChldmVudDEgPT0gJ3N0b3AnICYmIGV2ZW50MiA9PSAnc3RvcCcpXG4gICAgICAgIHJldHVybiBoaWdobGlnaHRlZDtcblxuICAgICAgLi4uIHdoaWNoIGlzIGNvbGxhcHNlZCB0bzpcbiAgICAgICovXG4gICAgICByZXR1cm4gaGlnaGxpZ2h0ZWRbMF0uZXZlbnQgPT09ICdzdGFydCcgPyBvcmlnaW5hbCA6IGhpZ2hsaWdodGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW4obm9kZSkge1xuICAgICAgZnVuY3Rpb24gYXR0cl9zdHIoYSkge1xuICAgICAgICByZXR1cm4gJyAnICsgYS5ub2RlTmFtZSArICc9XCInICsgZXNjYXBlKGEudmFsdWUpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKSArICdcIic7XG4gICAgICB9XG4gICAgICByZXN1bHQgKz0gJzwnICsgdGFnKG5vZGUpICsgQXJyYXlQcm90by5tYXAuY2FsbChub2RlLmF0dHJpYnV0ZXMsIGF0dHJfc3RyKS5qb2luKCcnKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZShub2RlKSB7XG4gICAgICByZXN1bHQgKz0gJzwvJyArIHRhZyhub2RlKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXIoZXZlbnQpIHtcbiAgICAgIChldmVudC5ldmVudCA9PT0gJ3N0YXJ0JyA/IG9wZW4gOiBjbG9zZSkoZXZlbnQubm9kZSk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG9yaWdpbmFsLmxlbmd0aCB8fCBoaWdobGlnaHRlZC5sZW5ndGgpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGUodmFsdWUuc3Vic3RyaW5nKHByb2Nlc3NlZCwgc3RyZWFtWzBdLm9mZnNldCkpO1xuICAgICAgcHJvY2Vzc2VkID0gc3RyZWFtWzBdLm9mZnNldDtcbiAgICAgIGlmIChzdHJlYW0gPT09IG9yaWdpbmFsKSB7XG4gICAgICAgIC8qXG4gICAgICAgIE9uIGFueSBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIG9mIHRoZSBvcmlnaW5hbCBtYXJrdXAgd2UgZmlyc3QgY2xvc2VcbiAgICAgICAgdGhlIGVudGlyZSBoaWdobGlnaHRlZCBub2RlIHN0YWNrLCB0aGVuIHJlbmRlciB0aGUgb3JpZ2luYWwgdGFnIGFsb25nXG4gICAgICAgIHdpdGggYWxsIHRoZSBmb2xsb3dpbmcgb3JpZ2luYWwgdGFncyBhdCB0aGUgc2FtZSBvZmZzZXQgYW5kIHRoZW5cbiAgICAgICAgcmVvcGVuIGFsbCB0aGUgdGFncyBvbiB0aGUgaGlnaGxpZ2h0ZWQgc3RhY2suXG4gICAgICAgICovXG4gICAgICAgIG5vZGVTdGFjay5yZXZlcnNlKCkuZm9yRWFjaChjbG9zZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICAgICAgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7XG4gICAgICAgIH0gd2hpbGUgKHN0cmVhbSA9PT0gb3JpZ2luYWwgJiYgc3RyZWFtLmxlbmd0aCAmJiBzdHJlYW1bMF0ub2Zmc2V0ID09PSBwcm9jZXNzZWQpO1xuICAgICAgICBub2RlU3RhY2sucmV2ZXJzZSgpLmZvckVhY2gob3Blbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RyZWFtWzBdLmV2ZW50ID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goc3RyZWFtWzBdLm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgKyBlc2NhcGUodmFsdWUuc3Vic3RyKHByb2Nlc3NlZCkpO1xuICB9XG5cbiAgLyogSW5pdGlhbGl6YXRpb24gKi9cblxuICBmdW5jdGlvbiBkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkge1xuICAgIGlmICghbW9kZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIG1vZGUuZW5kc1dpdGhQYXJlbnQgfHwgZGVwZW5kZW5jeU9uUGFyZW50KG1vZGUuc3RhcnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGFuZF9vcl9jbG9uZV9tb2RlKG1vZGUpIHtcbiAgICBpZiAobW9kZS52YXJpYW50cyAmJiAhbW9kZS5jYWNoZWRfdmFyaWFudHMpIHtcbiAgICAgIG1vZGUuY2FjaGVkX3ZhcmlhbnRzID0gbW9kZS52YXJpYW50cy5tYXAoZnVuY3Rpb24odmFyaWFudCkge1xuICAgICAgICByZXR1cm4gaW5oZXJpdChtb2RlLCB7dmFyaWFudHM6IG51bGx9LCB2YXJpYW50KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEVYUEFORFxuICAgIC8vIGlmIHdlIGhhdmUgdmFyaWFudHMgdGhlbiBlc3NlbnRpYWxseSBcInJlcGxhY2VcIiB0aGUgbW9kZSB3aXRoIHRoZSB2YXJpYW50c1xuICAgIC8vIHRoaXMgaGFwcGVucyBpbiBjb21waWxlTW9kZSwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICAgIGlmIChtb2RlLmNhY2hlZF92YXJpYW50cylcbiAgICAgIHJldHVybiBtb2RlLmNhY2hlZF92YXJpYW50cztcblxuICAgIC8vIENMT05FXG4gICAgLy8gaWYgd2UgaGF2ZSBkZXBlbmRlbmNpZXMgb24gcGFyZW50cyB0aGVuIHdlIG5lZWQgYSB1bmlxdWVcbiAgICAvLyBpbnN0YW5jZSBvZiBvdXJzZWx2ZXMsIHNvIHdlIGNhbiBiZSByZXVzZWQgd2l0aCBtYW55XG4gICAgLy8gZGlmZmVyZW50IHBhcmVudHMgd2l0aG91dCBpc3N1ZVxuICAgIGlmIChkZXBlbmRlbmN5T25QYXJlbnQobW9kZSkpXG4gICAgICByZXR1cm4gW2luaGVyaXQobW9kZSwgeyBzdGFydHM6IG1vZGUuc3RhcnRzID8gaW5oZXJpdChtb2RlLnN0YXJ0cykgOiBudWxsIH0pXTtcblxuICAgIGlmIChPYmplY3QuaXNGcm96ZW4obW9kZSkpXG4gICAgICByZXR1cm4gW2luaGVyaXQobW9kZSldO1xuXG4gICAgLy8gbm8gc3BlY2lhbCBkZXBlbmRlbmN5IGlzc3VlcywganVzdCByZXR1cm4gb3Vyc2VsdmVzXG4gICAgcmV0dXJuIFttb2RlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3RvcmVMYW5ndWFnZUFwaShvYmopIHtcbiAgICBpZihBUElfUkVQTEFDRVMgJiYgIW9iai5sYW5nQXBpUmVzdG9yZWQpIHtcbiAgICAgIG9iai5sYW5nQXBpUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgZm9yKHZhciBrZXkgaW4gQVBJX1JFUExBQ0VTKSB7XG4gICAgICAgIGlmIChvYmpba2V5XSkge1xuICAgICAgICAgIG9ialtBUElfUkVQTEFDRVNba2V5XV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKG9iai5jb250YWlucyB8fCBbXSkuY29uY2F0KG9iai52YXJpYW50cyB8fCBbXSkuZm9yRWFjaChyZXN0b3JlTGFuZ3VhZ2VBcGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBpbGVLZXl3b3JkcyhyYXdLZXl3b3JkcywgY2FzZV9pbnNlbnNpdGl2ZSkge1xuICAgICAgdmFyIGNvbXBpbGVkX2tleXdvcmRzID0ge307XG5cbiAgICAgIGlmICh0eXBlb2YgcmF3S2V5d29yZHMgPT09ICdzdHJpbmcnKSB7IC8vIHN0cmluZ1xuICAgICAgICBzcGxpdEFuZENvbXBpbGUoJ2tleXdvcmQnLCByYXdLZXl3b3Jkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3RLZXlzKHJhd0tleXdvcmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICBzcGxpdEFuZENvbXBpbGUoY2xhc3NOYW1lLCByYXdLZXl3b3Jkc1tjbGFzc05hbWVdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkX2tleXdvcmRzO1xuXG4gICAgLy8gLS0tXG5cbiAgICBmdW5jdGlvbiBzcGxpdEFuZENvbXBpbGUoY2xhc3NOYW1lLCBzdHIpIHtcbiAgICAgIGlmIChjYXNlX2luc2Vuc2l0aXZlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgc3RyLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHZhciBwYWlyID0ga2V5d29yZC5zcGxpdCgnfCcpO1xuICAgICAgICBjb21waWxlZF9rZXl3b3Jkc1twYWlyWzBdXSA9IFtjbGFzc05hbWUsIHNjb3JlRm9yS2V5d29yZChwYWlyWzBdLCBwYWlyWzFdKV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY29yZUZvcktleXdvcmQoa2V5d29yZCwgcHJvdmlkZWRTY29yZSkge1xuICAgIC8vIG1hbnVhbCBzY29yZXMgYWx3YXlzIHdpbiBvdmVyIGNvbW1vbiBrZXl3b3Jkc1xuICAgIC8vIHNvIHlvdSBjYW4gZm9yY2UgYSBzY29yZSBvZiAxIGlmIHlvdSByZWFsbHkgaW5zaXN0XG4gICAgaWYgKHByb3ZpZGVkU2NvcmUpXG4gICAgICByZXR1cm4gTnVtYmVyKHByb3ZpZGVkU2NvcmUpO1xuXG4gICAgcmV0dXJuIGNvbW1vbktleXdvcmQoa2V5d29yZCkgPyAwIDogMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbW1vbktleXdvcmQod29yZCkge1xuICAgIHJldHVybiBDT01NT05fS0VZV09SRFMuaW5kZXhPZih3b3JkLnRvTG93ZXJDYXNlKCkpICE9IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKSB7XG5cbiAgICBmdW5jdGlvbiByZVN0cihyZSkge1xuICAgICAgICByZXR1cm4gKHJlICYmIHJlLnNvdXJjZSkgfHwgcmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGFuZ1JlKHZhbHVlLCBnbG9iYWwpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICByZVN0cih2YWx1ZSksXG4gICAgICAgICdtJyArIChsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gJ2knIDogJycpICsgKGdsb2JhbCA/ICdnJyA6ICcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZUNvdW50TWF0Y2hHcm91cHMocmUpIHtcbiAgICAgIHJldHVybiAobmV3IFJlZ0V4cChyZS50b1N0cmluZygpICsgJ3wnKSkuZXhlYygnJykubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICAvLyBqb2luUmUgbG9naWNhbGx5IGNvbXB1dGVzIHJlZ2V4cHMuam9pbihzZXBhcmF0b3IpLCBidXQgZml4ZXMgdGhlXG4gICAgLy8gYmFja3JlZmVyZW5jZXMgc28gdGhleSBjb250aW51ZSB0byBtYXRjaC5cbiAgICAvLyBpdCBhbHNvIHBsYWNlcyBlYWNoIGluZGl2aWR1YWwgcmVndWxhciBleHByZXNzaW9uIGludG8gaXQncyBvd25cbiAgICAvLyBtYXRjaCBncm91cCwga2VlcGluZyB0cmFjayBvZiB0aGUgc2VxdWVuY2luZyBvZiB0aG9zZSBtYXRjaCBncm91cHNcbiAgICAvLyBpcyBjdXJyZW50bHkgYW4gZXhlcmNpc2UgZm9yIHRoZSBjYWxsZXIuIDotKVxuICAgIGZ1bmN0aW9uIGpvaW5SZShyZWdleHBzLCBzZXBhcmF0b3IpIHtcbiAgICAgIC8vIGJhY2tyZWZlcmVuY2VSZSBtYXRjaGVzIGFuIG9wZW4gcGFyZW50aGVzaXMgb3IgYmFja3JlZmVyZW5jZS4gVG8gYXZvaWRcbiAgICAgIC8vIGFuIGluY29ycmVjdCBwYXJzZSwgaXQgYWRkaXRpb25hbGx5IG1hdGNoZXMgdGhlIGZvbGxvd2luZzpcbiAgICAgIC8vIC0gWy4uLl0gZWxlbWVudHMsIHdoZXJlIHRoZSBtZWFuaW5nIG9mIHBhcmVudGhlc2VzIGFuZCBlc2NhcGVzIGNoYW5nZVxuICAgICAgLy8gLSBvdGhlciBlc2NhcGUgc2VxdWVuY2VzLCBzbyB3ZSBkbyBub3QgbWlzcGFyc2UgZXNjYXBlIHNlcXVlbmNlcyBhc1xuICAgICAgLy8gICBpbnRlcmVzdGluZyBlbGVtZW50c1xuICAgICAgLy8gLSBub24tbWF0Y2hpbmcgb3IgbG9va2FoZWFkIHBhcmVudGhlc2VzLCB3aGljaCBkbyBub3QgY2FwdHVyZS4gVGhlc2VcbiAgICAgIC8vICAgZm9sbG93IHRoZSAnKCcgd2l0aCBhICc/Jy5cbiAgICAgIHZhciBiYWNrcmVmZXJlbmNlUmUgPSAvXFxbKD86W15cXFxcXFxdXXxcXFxcLikqXFxdfFxcKFxcPz98XFxcXChbMS05XVswLTldKil8XFxcXC4vO1xuICAgICAgdmFyIG51bUNhcHR1cmVzID0gMDtcbiAgICAgIHZhciByZXQgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBudW1DYXB0dXJlcyArPSAxO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gbnVtQ2FwdHVyZXM7XG4gICAgICAgIHZhciByZSA9IHJlU3RyKHJlZ2V4cHNbaV0pO1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICByZXQgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldCArPSBcIihcIjtcbiAgICAgICAgd2hpbGUgKHJlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBiYWNrcmVmZXJlbmNlUmUuZXhlYyhyZSk7XG4gICAgICAgICAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldCArPSByZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXQgKz0gcmUuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICByZSA9IHJlLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgaWYgKG1hdGNoWzBdWzBdID09ICdcXFxcJyAmJiBtYXRjaFsxXSkge1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBiYWNrcmVmZXJlbmNlLlxuICAgICAgICAgICAgcmV0ICs9ICdcXFxcJyArIFN0cmluZyhOdW1iZXIobWF0Y2hbMV0pICsgb2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0ICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09ICcoJykge1xuICAgICAgICAgICAgICBudW1DYXB0dXJlcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXQgKz0gXCIpXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1aWxkTW9kZVJlZ2V4KG1vZGUpIHtcblxuICAgICAgdmFyIG1hdGNoSW5kZXhlcyA9IHt9O1xuICAgICAgdmFyIG1hdGNoZXJSZTtcbiAgICAgIHZhciByZWdleGVzID0gW107XG4gICAgICB2YXIgbWF0Y2hlciA9IHt9O1xuICAgICAgdmFyIG1hdGNoQXQgPSAxO1xuXG4gICAgICBmdW5jdGlvbiBhZGRSdWxlKHJ1bGUsIHJlZ2V4KSB7XG4gICAgICAgIG1hdGNoSW5kZXhlc1ttYXRjaEF0XSA9IHJ1bGU7XG4gICAgICAgIHJlZ2V4ZXMucHVzaChbcnVsZSwgcmVnZXhdKTtcbiAgICAgICAgbWF0Y2hBdCArPSByZUNvdW50TWF0Y2hHcm91cHMocmVnZXgpICsgMTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRlcm07XG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBtb2RlLmNvbnRhaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZTtcbiAgICAgICAgdGVybSA9IG1vZGUuY29udGFpbnNbaV07XG4gICAgICAgIGlmICh0ZXJtLmJlZ2luS2V5d29yZHMpIHtcbiAgICAgICAgICByZSA9ICdcXFxcLj8oPzonICsgdGVybS5iZWdpbiArICcpXFxcXC4/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZSA9IHRlcm0uYmVnaW47XG4gICAgICAgIH1cbiAgICAgICAgYWRkUnVsZSh0ZXJtLCByZSk7XG4gICAgICB9XG4gICAgICBpZiAobW9kZS50ZXJtaW5hdG9yX2VuZClcbiAgICAgICAgYWRkUnVsZShcImVuZFwiLCBtb2RlLnRlcm1pbmF0b3JfZW5kKTtcbiAgICAgIGlmIChtb2RlLmlsbGVnYWwpXG4gICAgICAgIGFkZFJ1bGUoXCJpbGxlZ2FsXCIsIG1vZGUuaWxsZWdhbCk7XG5cbiAgICAgIHZhciB0ZXJtaW5hdG9ycyA9IHJlZ2V4ZXMubWFwKGZ1bmN0aW9uKGVsKSB7IHJldHVybiBlbFsxXTsgfSk7XG4gICAgICBtYXRjaGVyUmUgPSBsYW5nUmUoam9pblJlKHRlcm1pbmF0b3JzLCAnfCcpLCB0cnVlKTtcblxuICAgICAgbWF0Y2hlci5sYXN0SW5kZXggPSAwO1xuICAgICAgbWF0Y2hlci5leGVjID0gZnVuY3Rpb24ocykge1xuICAgICAgICB2YXIgcnVsZTtcblxuICAgICAgICBpZiggcmVnZXhlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgIG1hdGNoZXJSZS5sYXN0SW5kZXggPSBtYXRjaGVyLmxhc3RJbmRleDtcbiAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hlclJlLmV4ZWMocyk7XG4gICAgICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBmb3IodmFyIGkgPSAwOyBpPG1hdGNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG1hdGNoW2ldICE9IHVuZGVmaW5lZCAmJiBtYXRjaEluZGV4ZXNbXCJcIiAraV0gIT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgcnVsZSA9IG1hdGNoSW5kZXhlc1tcIlwiK2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWxsZWdhbCBvciBlbmQgbWF0Y2hcbiAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWF0Y2gudHlwZSA9IHJ1bGU7XG4gICAgICAgICAgbWF0Y2guZXh0cmEgPSBbbW9kZS5pbGxlZ2FsLCBtb2RlLnRlcm1pbmF0b3JfZW5kXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaC50eXBlID0gXCJiZWdpblwiO1xuICAgICAgICAgIG1hdGNoLnJ1bGUgPSBydWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBtYXRjaGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBpbGVNb2RlKG1vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKG1vZGUuY29tcGlsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIG1vZGUuY29tcGlsZWQgPSB0cnVlO1xuXG4gICAgICBtb2RlLmtleXdvcmRzID0gbW9kZS5rZXl3b3JkcyB8fCBtb2RlLmJlZ2luS2V5d29yZHM7XG4gICAgICBpZiAobW9kZS5rZXl3b3JkcylcbiAgICAgICAgbW9kZS5rZXl3b3JkcyA9IGNvbXBpbGVLZXl3b3Jkcyhtb2RlLmtleXdvcmRzLCBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlKTtcblxuICAgICAgbW9kZS5sZXhlbWVzUmUgPSBsYW5nUmUobW9kZS5sZXhlbWVzIHx8IC9cXHcrLywgdHJ1ZSk7XG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKG1vZGUuYmVnaW5LZXl3b3Jkcykge1xuICAgICAgICAgIG1vZGUuYmVnaW4gPSAnXFxcXGIoJyArIG1vZGUuYmVnaW5LZXl3b3Jkcy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXGInO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9kZS5iZWdpbilcbiAgICAgICAgICBtb2RlLmJlZ2luID0gL1xcQnxcXGIvO1xuICAgICAgICBtb2RlLmJlZ2luUmUgPSBsYW5nUmUobW9kZS5iZWdpbik7XG4gICAgICAgIGlmIChtb2RlLmVuZFNhbWVBc0JlZ2luKVxuICAgICAgICAgIG1vZGUuZW5kID0gbW9kZS5iZWdpbjtcbiAgICAgICAgaWYgKCFtb2RlLmVuZCAmJiAhbW9kZS5lbmRzV2l0aFBhcmVudClcbiAgICAgICAgICBtb2RlLmVuZCA9IC9cXEJ8XFxiLztcbiAgICAgICAgaWYgKG1vZGUuZW5kKVxuICAgICAgICAgIG1vZGUuZW5kUmUgPSBsYW5nUmUobW9kZS5lbmQpO1xuICAgICAgICBtb2RlLnRlcm1pbmF0b3JfZW5kID0gcmVTdHIobW9kZS5lbmQpIHx8ICcnO1xuICAgICAgICBpZiAobW9kZS5lbmRzV2l0aFBhcmVudCAmJiBwYXJlbnQudGVybWluYXRvcl9lbmQpXG4gICAgICAgICAgbW9kZS50ZXJtaW5hdG9yX2VuZCArPSAobW9kZS5lbmQgPyAnfCcgOiAnJykgKyBwYXJlbnQudGVybWluYXRvcl9lbmQ7XG4gICAgICB9XG4gICAgICBpZiAobW9kZS5pbGxlZ2FsKVxuICAgICAgICBtb2RlLmlsbGVnYWxSZSA9IGxhbmdSZShtb2RlLmlsbGVnYWwpO1xuICAgICAgaWYgKG1vZGUucmVsZXZhbmNlID09IG51bGwpXG4gICAgICAgIG1vZGUucmVsZXZhbmNlID0gMTtcbiAgICAgIGlmICghbW9kZS5jb250YWlucykge1xuICAgICAgICBtb2RlLmNvbnRhaW5zID0gW107XG4gICAgICB9XG4gICAgICBtb2RlLmNvbnRhaW5zID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgbW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICByZXR1cm4gZXhwYW5kX29yX2Nsb25lX21vZGUoYyA9PT0gJ3NlbGYnID8gbW9kZSA6IGMpO1xuICAgICAgfSkpO1xuICAgICAgbW9kZS5jb250YWlucy5mb3JFYWNoKGZ1bmN0aW9uKGMpIHtjb21waWxlTW9kZShjLCBtb2RlKTt9KTtcblxuICAgICAgaWYgKG1vZGUuc3RhcnRzKSB7XG4gICAgICAgIGNvbXBpbGVNb2RlKG1vZGUuc3RhcnRzLCBwYXJlbnQpO1xuICAgICAgfVxuXG4gICAgICBtb2RlLnRlcm1pbmF0b3JzID0gYnVpbGRNb2RlUmVnZXgobW9kZSk7XG4gICAgfVxuXG4gICAgLy8gc2VsZiBpcyBub3QgdmFsaWQgYXQgdGhlIHRvcC1sZXZlbFxuICAgIGlmIChsYW5ndWFnZS5jb250YWlucyAmJiBsYW5ndWFnZS5jb250YWlucy5pbmRleE9mKCdzZWxmJykgIT0gLTEpIHtcbiAgICAgIGlmICghU0FGRV9NT0RFKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVSUjogY29udGFpbnMgYHNlbGZgIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiBhIGxhbmd1YWdlLiAgU2VlIGRvY3VtZW50YXRpb24uXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzaWxlbnRseSByZW1vdmUgdGhlIGJyb2tlbiBydWxlIChlZmZlY3RpdmVseSBpZ25vcmluZyBpdCksIHRoaXMgaGFzIGhpc3RvcmljYWxseVxuICAgICAgICAvLyBiZWVuIHRoZSBiZWhhdmlvciBpbiB0aGUgcGFzdCwgc28gdGhpcyByZW1vdmFsIHByZXNlcnZlcyBjb21wYXRpYmlsaXR5IHdpdGggYnJva2VuXG4gICAgICAgIC8vIGdyYW1tYXJzIHdoZW4gcnVubmluZyBpbiBTYWZlIE1vZGVcbiAgICAgICAgbGFuZ3VhZ2UuY29udGFpbnMgPSBsYW5ndWFnZS5jb250YWlucy5maWx0ZXIoZnVuY3Rpb24obW9kZSkgeyByZXR1cm4gbW9kZSAhPSAnc2VsZic7IH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb21waWxlTW9kZShsYW5ndWFnZSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDb3JlIGhpZ2hsaWdodGluZyBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlTmFtZSAtIHRoZSBsYW5ndWFnZSB0byB1c2UgZm9yIGhpZ2hsaWdodGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIHRoZSBjb2RlIHRvIGhpZ2hsaWdodFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZV9pbGxlZ2FscyAtIHdoZXRoZXIgdG8gaWdub3JlIGlsbGVnYWwgbWF0Y2hlcywgZGVmYXVsdCBpcyB0byBiYWlsXG4gICAqIEBwYXJhbSB7YXJyYXk8bW9kZT59IGNvbnRpbnVhdGlvbiAtIGFycmF5IG9mIGNvbnRpbnVhdGlvbiBtb2Rlc1xuICAgKlxuICAgKiBAcmV0dXJucyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxhbmd1YWdlIC0gdGhlIGxhbmd1YWdlIG5hbWVcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IHJlbGV2YW5jZSAtIHRoZSByZWxldmFuY2Ugc2NvcmVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlIC0gdGhlIGhpZ2hsaWdodGVkIEhUTUwgY29kZVxuICAgKiBAcHJvcGVydHkge21vZGV9IHRvcCAtIHRvcCBvZiB0aGUgY3VycmVudCBtb2RlIHN0YWNrXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaWxsZWdhbCAtIGluZGljYXRlcyB3aGV0aGVyIGFueSBpbGxlZ2FsIG1hdGNoZXMgd2VyZSBmb3VuZFxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHQobGFuZ3VhZ2VOYW1lLCBjb2RlLCBpZ25vcmVfaWxsZWdhbHMsIGNvbnRpbnVhdGlvbikge1xuICAgIHZhciBjb2RlVG9IaWdobGlnaHQgPSBjb2RlO1xuXG4gICAgZnVuY3Rpb24gZXNjYXBlUmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHZhbHVlLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpLCAnbScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mTW9kZShtb2RlLCBsZXhlbWUpIHtcbiAgICAgIGlmICh0ZXN0UmUobW9kZS5lbmRSZSwgbGV4ZW1lKSkge1xuICAgICAgICB3aGlsZSAobW9kZS5lbmRzUGFyZW50ICYmIG1vZGUucGFyZW50KSB7XG4gICAgICAgICAgbW9kZSA9IG1vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGUuZW5kc1dpdGhQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGVuZE9mTW9kZShtb2RlLnBhcmVudCwgbGV4ZW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrZXl3b3JkTWF0Y2gobW9kZSwgbWF0Y2gpIHtcbiAgICAgIHZhciBtYXRjaF9zdHIgPSBsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKSA6IG1hdGNoWzBdO1xuICAgICAgcmV0dXJuIG1vZGUua2V5d29yZHMuaGFzT3duUHJvcGVydHkobWF0Y2hfc3RyKSAmJiBtb2RlLmtleXdvcmRzW21hdGNoX3N0cl07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRTcGFuKGNsYXNzTmFtZSwgaW5zaWRlU3BhbiwgbGVhdmVPcGVuLCBub1ByZWZpeCkge1xuICAgICAgaWYgKCFsZWF2ZU9wZW4gJiYgaW5zaWRlU3BhbiA9PT0gJycpIHJldHVybiAnJztcbiAgICAgIGlmICghY2xhc3NOYW1lKSByZXR1cm4gaW5zaWRlU3BhbjtcblxuICAgICAgdmFyIGNsYXNzUHJlZml4ID0gbm9QcmVmaXggPyAnJyA6IG9wdGlvbnMuY2xhc3NQcmVmaXgsXG4gICAgICAgICAgb3BlblNwYW4gICAgPSAnPHNwYW4gY2xhc3M9XCInICsgY2xhc3NQcmVmaXgsXG4gICAgICAgICAgY2xvc2VTcGFuICAgPSBsZWF2ZU9wZW4gPyAnJyA6IHNwYW5FbmRUYWc7XG5cbiAgICAgIG9wZW5TcGFuICs9IGNsYXNzTmFtZSArICdcIj4nO1xuXG4gICAgICByZXR1cm4gb3BlblNwYW4gKyBpbnNpZGVTcGFuICsgY2xvc2VTcGFuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NLZXl3b3JkcygpIHtcbiAgICAgIHZhciBrZXl3b3JkX21hdGNoLCBsYXN0X2luZGV4LCBtYXRjaCwgcmVzdWx0O1xuXG4gICAgICBpZiAoIXRvcC5rZXl3b3JkcylcbiAgICAgICAgcmV0dXJuIGVzY2FwZShtb2RlX2J1ZmZlcik7XG5cbiAgICAgIHJlc3VsdCA9ICcnO1xuICAgICAgbGFzdF9pbmRleCA9IDA7XG4gICAgICB0b3AubGV4ZW1lc1JlLmxhc3RJbmRleCA9IDA7XG4gICAgICBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG5cbiAgICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICByZXN1bHQgKz0gZXNjYXBlKG1vZGVfYnVmZmVyLnN1YnN0cmluZyhsYXN0X2luZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICBrZXl3b3JkX21hdGNoID0ga2V5d29yZE1hdGNoKHRvcCwgbWF0Y2gpO1xuICAgICAgICBpZiAoa2V5d29yZF9tYXRjaCkge1xuICAgICAgICAgIHJlbGV2YW5jZSArPSBrZXl3b3JkX21hdGNoWzFdO1xuICAgICAgICAgIHJlc3VsdCArPSBidWlsZFNwYW4oa2V5d29yZF9tYXRjaFswXSwgZXNjYXBlKG1hdGNoWzBdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShtYXRjaFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdF9pbmRleCA9IHRvcC5sZXhlbWVzUmUubGFzdEluZGV4O1xuICAgICAgICBtYXRjaCA9IHRvcC5sZXhlbWVzUmUuZXhlYyhtb2RlX2J1ZmZlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0ICsgZXNjYXBlKG1vZGVfYnVmZmVyLnN1YnN0cihsYXN0X2luZGV4KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1N1Ykxhbmd1YWdlKCkge1xuICAgICAgdmFyIGV4cGxpY2l0ID0gdHlwZW9mIHRvcC5zdWJMYW5ndWFnZSA9PT0gJ3N0cmluZyc7XG4gICAgICBpZiAoZXhwbGljaXQgJiYgIWxhbmd1YWdlc1t0b3Auc3ViTGFuZ3VhZ2VdKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGUobW9kZV9idWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0ID0gZXhwbGljaXQgP1xuICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodCh0b3Auc3ViTGFuZ3VhZ2UsIG1vZGVfYnVmZmVyLCB0cnVlLCBjb250aW51YXRpb25zW3RvcC5zdWJMYW5ndWFnZV0pIDpcbiAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRBdXRvKG1vZGVfYnVmZmVyLCB0b3Auc3ViTGFuZ3VhZ2UubGVuZ3RoID8gdG9wLnN1Ykxhbmd1YWdlIDogdW5kZWZpbmVkKTtcblxuICAgICAgLy8gQ291bnRpbmcgZW1iZWRkZWQgbGFuZ3VhZ2Ugc2NvcmUgdG93YXJkcyB0aGUgaG9zdCBsYW5ndWFnZSBtYXkgYmUgZGlzYWJsZWRcbiAgICAgIC8vIHdpdGggemVyb2luZyB0aGUgY29udGFpbmluZyBtb2RlIHJlbGV2YW5jZS4gVXNlIGNhc2UgaW4gcG9pbnQgaXMgTWFya2Rvd24gdGhhdFxuICAgICAgLy8gYWxsb3dzIFhNTCBldmVyeXdoZXJlIGFuZCBtYWtlcyBldmVyeSBYTUwgc25pcHBldCB0byBoYXZlIGEgbXVjaCBsYXJnZXIgTWFya2Rvd25cbiAgICAgIC8vIHNjb3JlLlxuICAgICAgaWYgKHRvcC5yZWxldmFuY2UgPiAwKSB7XG4gICAgICAgIHJlbGV2YW5jZSArPSByZXN1bHQucmVsZXZhbmNlO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSA9IHJlc3VsdC50b3A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVpbGRTcGFuKHJlc3VsdC5sYW5ndWFnZSwgcmVzdWx0LnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0J1ZmZlcigpIHtcbiAgICAgIHJlc3VsdCArPSAodG9wLnN1Ykxhbmd1YWdlICE9IG51bGwgPyBwcm9jZXNzU3ViTGFuZ3VhZ2UoKSA6IHByb2Nlc3NLZXl3b3JkcygpKTtcbiAgICAgIG1vZGVfYnVmZmVyID0gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnROZXdNb2RlKG1vZGUpIHtcbiAgICAgIHJlc3VsdCArPSBtb2RlLmNsYXNzTmFtZT8gYnVpbGRTcGFuKG1vZGUuY2xhc3NOYW1lLCAnJywgdHJ1ZSk6ICcnO1xuICAgICAgdG9wID0gT2JqZWN0LmNyZWF0ZShtb2RlLCB7cGFyZW50OiB7dmFsdWU6IHRvcH19KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGRvQmVnaW5NYXRjaChtYXRjaCkge1xuICAgICAgdmFyIGxleGVtZSA9IG1hdGNoWzBdO1xuICAgICAgdmFyIG5ld19tb2RlID0gbWF0Y2gucnVsZTtcblxuICAgICAgaWYgKG5ld19tb2RlICYmIG5ld19tb2RlLmVuZFNhbWVBc0JlZ2luKSB7XG4gICAgICAgIG5ld19tb2RlLmVuZFJlID0gZXNjYXBlUmUoIGxleGVtZSApO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3X21vZGUuc2tpcCkge1xuICAgICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobmV3X21vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgaWYgKCFuZXdfbW9kZS5yZXR1cm5CZWdpbiAmJiAhbmV3X21vZGUuZXhjbHVkZUJlZ2luKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgPSBsZXhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXJ0TmV3TW9kZShuZXdfbW9kZSk7XG4gICAgICByZXR1cm4gbmV3X21vZGUucmV0dXJuQmVnaW4gPyAwIDogbGV4ZW1lLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb0VuZE1hdGNoKG1hdGNoKSB7XG4gICAgICB2YXIgbGV4ZW1lID0gbWF0Y2hbMF07XG4gICAgICB2YXIgbWF0Y2hQbHVzUmVtYWluZGVyID0gY29kZVRvSGlnaGxpZ2h0LnN1YnN0cihtYXRjaC5pbmRleCk7XG4gICAgICB2YXIgZW5kX21vZGUgPSBlbmRPZk1vZGUodG9wLCBtYXRjaFBsdXNSZW1haW5kZXIpO1xuICAgICAgaWYgKCFlbmRfbW9kZSkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIG9yaWdpbiA9IHRvcDtcbiAgICAgIGlmIChvcmlnaW4uc2tpcCkge1xuICAgICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIShvcmlnaW4ucmV0dXJuRW5kIHx8IG9yaWdpbi5leGNsdWRlRW5kKSkge1xuICAgICAgICAgIG1vZGVfYnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzQnVmZmVyKCk7XG4gICAgICAgIGlmIChvcmlnaW4uZXhjbHVkZUVuZCkge1xuICAgICAgICAgIG1vZGVfYnVmZmVyID0gbGV4ZW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0b3AuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHNwYW5FbmRUYWc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b3Auc2tpcCAmJiAhdG9wLnN1Ykxhbmd1YWdlKSB7XG4gICAgICAgICAgcmVsZXZhbmNlICs9IHRvcC5yZWxldmFuY2U7XG4gICAgICAgIH1cbiAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKHRvcCAhPT0gZW5kX21vZGUucGFyZW50KTtcbiAgICAgIGlmIChlbmRfbW9kZS5zdGFydHMpIHtcbiAgICAgICAgaWYgKGVuZF9tb2RlLmVuZFNhbWVBc0JlZ2luKSB7XG4gICAgICAgICAgZW5kX21vZGUuc3RhcnRzLmVuZFJlID0gZW5kX21vZGUuZW5kUmU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnROZXdNb2RlKGVuZF9tb2RlLnN0YXJ0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luLnJldHVybkVuZCA/IDAgOiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBsYXN0TWF0Y2ggPSB7fTtcbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKHRleHRfYmVmb3JlX21hdGNoLCBtYXRjaCkge1xuXG4gICAgICB2YXIgbGV4ZW1lID0gbWF0Y2ggJiYgbWF0Y2hbMF07XG5cbiAgICAgIC8vIGFkZCBub24tbWF0Y2hlZCB0ZXh0IHRvIHRoZSBjdXJyZW50IG1vZGUgYnVmZmVyXG4gICAgICBtb2RlX2J1ZmZlciArPSB0ZXh0X2JlZm9yZV9tYXRjaDtcblxuICAgICAgaWYgKGxleGVtZSA9PSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlJ3ZlIGZvdW5kIGEgMCB3aWR0aCBtYXRjaCBhbmQgd2UncmUgc3R1Y2ssIHNvIHdlIG5lZWQgdG8gYWR2YW5jZVxuICAgICAgLy8gdGhpcyBoYXBwZW5zIHdoZW4gd2UgaGF2ZSBiYWRseSBiZWhhdmVkIHJ1bGVzIHRoYXQgaGF2ZSBvcHRpb25hbCBtYXRjaGVycyB0byB0aGUgZGVncmVlIHRoYXRcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGV5IGNhbiBlbmQgdXAgbWF0Y2hpbmcgbm90aGluZyBhdCBhbGxcbiAgICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjE0MFxuICAgICAgaWYgKGxhc3RNYXRjaC50eXBlPT1cImJlZ2luXCIgJiYgbWF0Y2gudHlwZT09XCJlbmRcIiAmJiBsYXN0TWF0Y2guaW5kZXggPT0gbWF0Y2guaW5kZXggJiYgbGV4ZW1lID09PSBcIlwiKSB7XG4gICAgICAgIC8vIHNwaXQgdGhlIFwic2tpcHBlZFwiIGNoYXJhY3RlciB0aGF0IG91ciByZWdleCBjaG9rZWQgb24gYmFjayBpbnRvIHRoZSBvdXRwdXQgc2VxdWVuY2VcbiAgICAgICAgbW9kZV9idWZmZXIgKz0gY29kZVRvSGlnaGxpZ2h0LnNsaWNlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RNYXRjaCA9IG1hdGNoO1xuXG4gICAgICBpZiAobWF0Y2gudHlwZT09PVwiYmVnaW5cIikge1xuICAgICAgICByZXR1cm4gZG9CZWdpbk1hdGNoKG1hdGNoKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2gudHlwZT09PVwiaWxsZWdhbFwiICYmICFpZ25vcmVfaWxsZWdhbHMpIHtcbiAgICAgICAgLy8gaWxsZWdhbCBtYXRjaCwgd2UgZG8gbm90IGNvbnRpbnVlIHByb2Nlc3NpbmdcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGxleGVtZSBcIicgKyBsZXhlbWUgKyAnXCIgZm9yIG1vZGUgXCInICsgKHRvcC5jbGFzc05hbWUgfHwgJzx1bm5hbWVkPicpICsgJ1wiJyk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoLnR5cGU9PT1cImVuZFwiKSB7XG4gICAgICAgIHZhciBwcm9jZXNzZWQgPSBkb0VuZE1hdGNoKG1hdGNoKTtcbiAgICAgICAgaWYgKHByb2Nlc3NlZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIFdoeSBtaWdodCBiZSBmaW5kIG91cnNlbHZlcyBoZXJlPyAgT25seSBvbmUgb2NjYXNpb24gbm93LiAgQW4gZW5kIG1hdGNoIHRoYXQgd2FzXG4gICAgICB0cmlnZ2VyZWQgYnV0IGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQuICBXaGVuIG1pZ2h0IHRoaXMgaGFwcGVuPyAgV2hlbiBhbiBgZW5kU2FtZWFzQmVnaW5gXG4gICAgICBydWxlIHNldHMgdGhlIGVuZCBydWxlIHRvIGEgc3BlY2lmaWMgbWF0Y2guICBTaW5jZSB0aGUgb3ZlcmFsbCBtb2RlIHRlcm1pbmF0aW9uIHJ1bGUgdGhhdCdzXG4gICAgICBiZWluZyB1c2VkIHRvIHNjYW4gdGhlIHRleHQgaXNuJ3QgcmVjb21waWxlZCB0aGF0IG1lYW5zIHRoYXQgYW55IG1hdGNoIHRoYXQgTE9PS1MgbGlrZVxuICAgICAgdGhlIGVuZCAoYnV0IGlzIG5vdCwgYmVjYXVzZSBpdCBpcyBub3QgYW4gZXhhY3QgbWF0Y2ggdG8gdGhlIGJlZ2lubmluZykgd2lsbFxuICAgICAgZW5kIHVwIGhlcmUuICBBIGRlZmluaXRlIGVuZCBtYXRjaCwgYnV0IHdoZW4gYGRvRW5kTWF0Y2hgIHRyaWVzIHRvIFwicmVhcHBseVwiXG4gICAgICB0aGUgZW5kIHJ1bGUgYW5kIGZhaWxzIHRvIG1hdGNoLCB3ZSB3aW5kIHVwIGhlcmUsIGFuZCBqdXN0IHNpbGVudGx5IGlnbm9yZSB0aGUgZW5kLlxuXG4gICAgICBUaGlzIGNhdXNlcyBubyByZWFsIGhhcm0gb3RoZXIgdGhhbiBzdG9wcGluZyBhIGZldyB0aW1lcyB0b28gbWFueS5cbiAgICAgICovXG5cbiAgICAgIG1vZGVfYnVmZmVyICs9IGxleGVtZTtcbiAgICAgIHJldHVybiBsZXhlbWUubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGxhbmd1YWdlTmFtZSk7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgY29uc29sZS5lcnJvcihMQU5HVUFHRV9OT1RfRk9VTkQucmVwbGFjZShcInt9XCIsIGxhbmd1YWdlTmFtZSkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGxhbmd1YWdlOiBcIicgKyBsYW5ndWFnZU5hbWUgKyAnXCInKTtcbiAgICB9XG5cbiAgICBjb21waWxlTGFuZ3VhZ2UobGFuZ3VhZ2UpO1xuICAgIHZhciB0b3AgPSBjb250aW51YXRpb24gfHwgbGFuZ3VhZ2U7XG4gICAgdmFyIGNvbnRpbnVhdGlvbnMgPSB7fTsgLy8ga2VlcCBjb250aW51YXRpb25zIGZvciBzdWItbGFuZ3VhZ2VzXG4gICAgdmFyIHJlc3VsdCA9ICcnLCBjdXJyZW50O1xuICAgIGZvcihjdXJyZW50ID0gdG9wOyBjdXJyZW50ICE9PSBsYW5ndWFnZTsgY3VycmVudCA9IGN1cnJlbnQucGFyZW50KSB7XG4gICAgICBpZiAoY3VycmVudC5jbGFzc05hbWUpIHtcbiAgICAgICAgcmVzdWx0ID0gYnVpbGRTcGFuKGN1cnJlbnQuY2xhc3NOYW1lLCAnJywgdHJ1ZSkgKyByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBtb2RlX2J1ZmZlciA9ICcnO1xuICAgIHZhciByZWxldmFuY2UgPSAwO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbWF0Y2gsIGNvdW50LCBpbmRleCA9IDA7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB0b3AudGVybWluYXRvcnMubGFzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIG1hdGNoID0gdG9wLnRlcm1pbmF0b3JzLmV4ZWMoY29kZVRvSGlnaGxpZ2h0KTtcbiAgICAgICAgaWYgKCFtYXRjaClcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY291bnQgPSBwcm9jZXNzTGV4ZW1lKGNvZGVUb0hpZ2hsaWdodC5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSwgbWF0Y2gpO1xuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4ICsgY291bnQ7XG4gICAgICB9XG4gICAgICBwcm9jZXNzTGV4ZW1lKGNvZGVUb0hpZ2hsaWdodC5zdWJzdHIoaW5kZXgpKTtcbiAgICAgIGZvcihjdXJyZW50ID0gdG9wOyBjdXJyZW50LnBhcmVudDsgY3VycmVudCA9IGN1cnJlbnQucGFyZW50KSB7IC8vIGNsb3NlIGRhbmdsaW5nIG1vZGVzXG4gICAgICAgIGlmIChjdXJyZW50LmNsYXNzTmFtZSkge1xuICAgICAgICAgIHJlc3VsdCArPSBzcGFuRW5kVGFnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWxldmFuY2U6IHJlbGV2YW5jZSxcbiAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgaWxsZWdhbDpmYWxzZSxcbiAgICAgICAgbGFuZ3VhZ2U6IGxhbmd1YWdlTmFtZSxcbiAgICAgICAgdG9wOiB0b3BcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLm1lc3NhZ2UgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignSWxsZWdhbCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlsbGVnYWw6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIHZhbHVlOiBlc2NhcGUoY29kZVRvSGlnaGxpZ2h0KVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChTQUZFX01PREUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgdmFsdWU6IGVzY2FwZShjb2RlVG9IaWdobGlnaHQpLFxuICAgICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZU5hbWUsXG4gICAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgICAgZXJyb3JSYWlzZWQ6IGVyclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qXG4gIEhpZ2hsaWdodGluZyB3aXRoIGxhbmd1YWdlIGRldGVjdGlvbi4gQWNjZXB0cyBhIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvXG4gIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG5cbiAgLSBsYW5ndWFnZSAoZGV0ZWN0ZWQgbGFuZ3VhZ2UpXG4gIC0gcmVsZXZhbmNlIChpbnQpXG4gIC0gdmFsdWUgKGFuIEhUTUwgc3RyaW5nIHdpdGggaGlnaGxpZ2h0aW5nIG1hcmt1cClcbiAgLSBzZWNvbmRfYmVzdCAob2JqZWN0IHdpdGggdGhlIHNhbWUgc3RydWN0dXJlIGZvciBzZWNvbmQtYmVzdCBoZXVyaXN0aWNhbGx5XG4gICAgZGV0ZWN0ZWQgbGFuZ3VhZ2UsIG1heSBiZSBhYnNlbnQpXG5cbiAgKi9cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0QXV0byhjb2RlLCBsYW5ndWFnZVN1YnNldCkge1xuICAgIGxhbmd1YWdlU3Vic2V0ID0gbGFuZ3VhZ2VTdWJzZXQgfHwgb3B0aW9ucy5sYW5ndWFnZXMgfHwgb2JqZWN0S2V5cyhsYW5ndWFnZXMpO1xuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICB2YWx1ZTogZXNjYXBlKGNvZGUpXG4gICAgfTtcbiAgICB2YXIgc2Vjb25kX2Jlc3QgPSByZXN1bHQ7XG4gICAgbGFuZ3VhZ2VTdWJzZXQuZmlsdGVyKGdldExhbmd1YWdlKS5maWx0ZXIoYXV0b0RldGVjdGlvbikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhpZ2hsaWdodChuYW1lLCBjb2RlLCBmYWxzZSk7XG4gICAgICBjdXJyZW50Lmxhbmd1YWdlID0gbmFtZTtcbiAgICAgIGlmIChjdXJyZW50LnJlbGV2YW5jZSA+IHNlY29uZF9iZXN0LnJlbGV2YW5jZSkge1xuICAgICAgICBzZWNvbmRfYmVzdCA9IGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudC5yZWxldmFuY2UgPiByZXN1bHQucmVsZXZhbmNlKSB7XG4gICAgICAgIHNlY29uZF9iZXN0ID0gcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSBjdXJyZW50O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzZWNvbmRfYmVzdC5sYW5ndWFnZSkge1xuICAgICAgcmVzdWx0LnNlY29uZF9iZXN0ID0gc2Vjb25kX2Jlc3Q7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKlxuICBQb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGhpZ2hsaWdodGVkIG1hcmt1cDpcblxuICAtIHJlcGxhY2UgVEFCcyB3aXRoIHNvbWV0aGluZyBtb3JlIHVzZWZ1bFxuICAtIHJlcGxhY2UgcmVhbCBsaW5lLWJyZWFrcyB3aXRoICc8YnI+JyBmb3Igbm9uLXByZSBjb250YWluZXJzXG5cbiAgKi9cbiAgZnVuY3Rpb24gZml4TWFya3VwKHZhbHVlKSB7XG4gICAgaWYgKCEob3B0aW9ucy50YWJSZXBsYWNlIHx8IG9wdGlvbnMudXNlQlIpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoZml4TWFya3VwUmUsIGZ1bmN0aW9uKG1hdGNoLCBwMSkge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VCUiAmJiBtYXRjaCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICByZXR1cm4gJzxicj4nO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudGFiUmVwbGFjZSkge1xuICAgICAgICAgIHJldHVybiBwMS5yZXBsYWNlKC9cXHQvZywgb3B0aW9ucy50YWJSZXBsYWNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZENsYXNzTmFtZShwcmV2Q2xhc3NOYW1lLCBjdXJyZW50TGFuZywgcmVzdWx0TGFuZykge1xuICAgIHZhciBsYW5ndWFnZSA9IGN1cnJlbnRMYW5nID8gYWxpYXNlc1tjdXJyZW50TGFuZ10gOiByZXN1bHRMYW5nLFxuICAgICAgICByZXN1bHQgICA9IFtwcmV2Q2xhc3NOYW1lLnRyaW0oKV07XG5cbiAgICBpZiAoIXByZXZDbGFzc05hbWUubWF0Y2goL1xcYmhsanNcXGIvKSkge1xuICAgICAgcmVzdWx0LnB1c2goJ2hsanMnKTtcbiAgICB9XG5cbiAgICBpZiAocHJldkNsYXNzTmFtZS5pbmRleE9mKGxhbmd1YWdlKSA9PT0gLTEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGxhbmd1YWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKS50cmltKCk7XG4gIH1cblxuICAvKlxuICBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhIERPTSBub2RlIGNvbnRhaW5pbmcgY29kZS4gQWNjZXB0cyBhIERPTSBub2RlIGFuZFxuICB0d28gb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZml4TWFya3VwLlxuICAqL1xuICBmdW5jdGlvbiBoaWdobGlnaHRCbG9jayhibG9jaykge1xuICAgIHZhciBub2RlLCBvcmlnaW5hbFN0cmVhbSwgcmVzdWx0LCByZXN1bHROb2RlLCB0ZXh0O1xuICAgIHZhciBsYW5ndWFnZSA9IGJsb2NrTGFuZ3VhZ2UoYmxvY2spO1xuXG4gICAgaWYgKGlzTm90SGlnaGxpZ2h0ZWQobGFuZ3VhZ2UpKVxuICAgICAgICByZXR1cm47XG5cbiAgICBpZiAob3B0aW9ucy51c2VCUikge1xuICAgICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSBibG9jay5pbm5lckhUTUwucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC88YnJbIFxcL10qPi9nLCAnXFxuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBibG9jaztcbiAgICB9XG4gICAgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQobGFuZ3VhZ2UsIHRleHQsIHRydWUpIDogaGlnaGxpZ2h0QXV0byh0ZXh0KTtcblxuICAgIG9yaWdpbmFsU3RyZWFtID0gbm9kZVN0cmVhbShub2RlKTtcbiAgICBpZiAob3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSB7XG4gICAgICByZXN1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXN1bHROb2RlLmlubmVySFRNTCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJlc3VsdC52YWx1ZSA9IG1lcmdlU3RyZWFtcyhvcmlnaW5hbFN0cmVhbSwgbm9kZVN0cmVhbShyZXN1bHROb2RlKSwgdGV4dCk7XG4gICAgfVxuICAgIHJlc3VsdC52YWx1ZSA9IGZpeE1hcmt1cChyZXN1bHQudmFsdWUpO1xuXG4gICAgYmxvY2suaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlO1xuICAgIGJsb2NrLmNsYXNzTmFtZSA9IGJ1aWxkQ2xhc3NOYW1lKGJsb2NrLmNsYXNzTmFtZSwgbGFuZ3VhZ2UsIHJlc3VsdC5sYW5ndWFnZSk7XG4gICAgYmxvY2sucmVzdWx0ID0ge1xuICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5sYW5ndWFnZSxcbiAgICAgIHJlOiByZXN1bHQucmVsZXZhbmNlXG4gICAgfTtcbiAgICBpZiAocmVzdWx0LnNlY29uZF9iZXN0KSB7XG4gICAgICBibG9jay5zZWNvbmRfYmVzdCA9IHtcbiAgICAgICAgbGFuZ3VhZ2U6IHJlc3VsdC5zZWNvbmRfYmVzdC5sYW5ndWFnZSxcbiAgICAgICAgcmU6IHJlc3VsdC5zZWNvbmRfYmVzdC5yZWxldmFuY2VcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLypcbiAgVXBkYXRlcyBoaWdobGlnaHQuanMgZ2xvYmFsIG9wdGlvbnMgd2l0aCB2YWx1ZXMgcGFzc2VkIGluIHRoZSBmb3JtIG9mIGFuIG9iamVjdC5cbiAgKi9cbiAgZnVuY3Rpb24gY29uZmlndXJlKHVzZXJfb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBpbmhlcml0KG9wdGlvbnMsIHVzZXJfb3B0aW9ucyk7XG4gIH1cblxuICAvKlxuICBBcHBsaWVzIGhpZ2hsaWdodGluZyB0byBhbGwgPHByZT48Y29kZT4uLjwvY29kZT48L3ByZT4gYmxvY2tzIG9uIGEgcGFnZS5cbiAgKi9cbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZygpIHtcbiAgICBpZiAoaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQpXG4gICAgICByZXR1cm47XG4gICAgaW5pdEhpZ2hsaWdodGluZy5jYWxsZWQgPSB0cnVlO1xuXG4gICAgdmFyIGJsb2NrcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZSBjb2RlJyk7XG4gICAgQXJyYXlQcm90by5mb3JFYWNoLmNhbGwoYmxvY2tzLCBoaWdobGlnaHRCbG9jayk7XG4gIH1cblxuICAvKlxuICBBdHRhY2hlcyBoaWdobGlnaHRpbmcgdG8gdGhlIHBhZ2UgbG9hZCBldmVudC5cbiAgKi9cbiAgZnVuY3Rpb24gaW5pdEhpZ2hsaWdodGluZ09uTG9hZCgpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgfVxuXG4gIHZhciBQTEFJTlRFWFRfTEFOR1VBR0UgPSB7IGRpc2FibGVBdXRvZGV0ZWN0OiB0cnVlIH07XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMYW5ndWFnZShuYW1lLCBsYW5ndWFnZSkge1xuICAgIHZhciBsYW5nO1xuICAgIHRyeSB7IGxhbmcgPSBsYW5ndWFnZShobGpzKTsgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkxhbmd1YWdlIGRlZmluaXRpb24gZm9yICd7fScgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQuXCIucmVwbGFjZShcInt9XCIsIG5hbWUpKTtcbiAgICAgIC8vIGhhcmQgb3Igc29mdCBlcnJvclxuICAgICAgaWYgKCFTQUZFX01PREUpIHsgdGhyb3cgZXJyb3I7IH0gZWxzZSB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9XG4gICAgICAvLyBsYW5ndWFnZXMgdGhhdCBoYXZlIHNlcmlvdXMgZXJyb3JzIGFyZSByZXBsYWNlZCB3aXRoIGVzc2VudGlhbGx5IGFcbiAgICAgIC8vIFwicGxhaW50ZXh0XCIgc3RhbmQtaW4gc28gdGhhdCB0aGUgY29kZSBibG9ja3Mgd2lsbCBzdGlsbCBnZXQgbm9ybWFsXG4gICAgICAvLyBjc3MgY2xhc3NlcyBhcHBsaWVkIHRvIHRoZW0gLSBhbmQgb25lIGJhZCBsYW5ndWFnZSB3b24ndCBicmVhayB0aGVcbiAgICAgIC8vIGVudGlyZSBoaWdobGlnaHRlclxuICAgICAgbGFuZyA9IFBMQUlOVEVYVF9MQU5HVUFHRTtcbiAgICB9XG4gICAgbGFuZ3VhZ2VzW25hbWVdID0gbGFuZztcbiAgICByZXN0b3JlTGFuZ3VhZ2VBcGkobGFuZyk7XG4gICAgbGFuZy5yYXdEZWZpbml0aW9uID0gbGFuZ3VhZ2UuYmluZChudWxsLGhsanMpO1xuXG4gICAgaWYgKGxhbmcuYWxpYXNlcykge1xuICAgICAgbGFuZy5hbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHthbGlhc2VzW2FsaWFzXSA9IG5hbWU7fSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gb2JqZWN0S2V5cyhsYW5ndWFnZXMpO1xuICB9XG5cbiAgLypcbiAgICBpbnRlbmRlZCB1c2FnZTogV2hlbiBvbmUgbGFuZ3VhZ2UgdHJ1bHkgcmVxdWlyZXMgYW5vdGhlclxuXG4gICAgVW5saWtlIGBnZXRMYW5ndWFnZWAsIHRoaXMgd2lsbCB0aHJvdyB3aGVuIHRoZSByZXF1ZXN0ZWQgbGFuZ3VhZ2VcbiAgICBpcyBub3QgYXZhaWxhYmxlLlxuICAqL1xuICBmdW5jdGlvbiByZXF1aXJlTGFuZ3VhZ2UobmFtZSkge1xuICAgIHZhciBsYW5nID0gZ2V0TGFuZ3VhZ2UobmFtZSk7XG4gICAgaWYgKGxhbmcpIHsgcmV0dXJuIGxhbmc7IH1cblxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBcXCd7fVxcJyBsYW5ndWFnZSBpcyByZXF1aXJlZCwgYnV0IG5vdCBsb2FkZWQuJy5yZXBsYWNlKCd7fScsbmFtZSkpO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldExhbmd1YWdlKG5hbWUpIHtcbiAgICBuYW1lID0gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGxhbmd1YWdlc1tuYW1lXSB8fCBsYW5ndWFnZXNbYWxpYXNlc1tuYW1lXV07XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvRGV0ZWN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbGFuZyA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIHJldHVybiBsYW5nICYmICFsYW5nLmRpc2FibGVBdXRvZGV0ZWN0O1xuICB9XG5cbiAgLyogSW50ZXJmYWNlIGRlZmluaXRpb24gKi9cblxuICBobGpzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbiAgaGxqcy5oaWdobGlnaHRBdXRvID0gaGlnaGxpZ2h0QXV0bztcbiAgaGxqcy5maXhNYXJrdXAgPSBmaXhNYXJrdXA7XG4gIGhsanMuaGlnaGxpZ2h0QmxvY2sgPSBoaWdobGlnaHRCbG9jaztcbiAgaGxqcy5jb25maWd1cmUgPSBjb25maWd1cmU7XG4gIGhsanMuaW5pdEhpZ2hsaWdodGluZyA9IGluaXRIaWdobGlnaHRpbmc7XG4gIGhsanMuaW5pdEhpZ2hsaWdodGluZ09uTG9hZCA9IGluaXRIaWdobGlnaHRpbmdPbkxvYWQ7XG4gIGhsanMucmVnaXN0ZXJMYW5ndWFnZSA9IHJlZ2lzdGVyTGFuZ3VhZ2U7XG4gIGhsanMubGlzdExhbmd1YWdlcyA9IGxpc3RMYW5ndWFnZXM7XG4gIGhsanMuZ2V0TGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZTtcbiAgaGxqcy5yZXF1aXJlTGFuZ3VhZ2UgPSByZXF1aXJlTGFuZ3VhZ2U7XG4gIGhsanMuYXV0b0RldGVjdGlvbiA9IGF1dG9EZXRlY3Rpb247XG4gIGhsanMuaW5oZXJpdCA9IGluaGVyaXQ7XG4gIGhsanMuZGVidWdNb2RlID0gZnVuY3Rpb24oKSB7IFNBRkVfTU9ERSA9IGZhbHNlOyB9XG5cbiAgLy8gQ29tbW9uIHJlZ2V4cHNcbiAgaGxqcy5JREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG4gIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdyonO1xuICBobGpzLk5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbiAgaGxqcy5DX05VTUJFUl9SRSA9ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KSc7IC8vIDB4Li4uLCAwLi4uLCBkZWNpbWFsLCBmbG9hdFxuICBobGpzLkJJTkFSWV9OVU1CRVJfUkUgPSAnXFxcXGIoMGJbMDFdKyknOyAvLyAwYi4uLlxuICBobGpzLlJFX1NUQVJURVJTX1JFID0gJyF8IT18IT09fCV8JT18JnwmJnwmPXxcXFxcKnxcXFxcKj18XFxcXCt8XFxcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXFxcP3xcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG5cbiAgLy8gQ29tbW9uIG1vZGVzXG4gIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ1xcXFxcXFxcW1xcXFxzXFxcXFNdJywgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQVBPU19TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlFVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSA9IHtcbiAgICBiZWdpbjogL1xcYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXFxiL1xuICB9O1xuICBobGpzLkNPTU1FTlQgPSBmdW5jdGlvbiAoYmVnaW4sIGVuZCwgaW5oZXJpdHMpIHtcbiAgICB2YXIgbW9kZSA9IGhsanMuaW5oZXJpdChcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiBiZWdpbiwgZW5kOiBlbmQsXG4gICAgICAgIGNvbnRhaW5zOiBbXVxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5QSFJBU0FMX1dPUkRTX01PREUpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaCh7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46ICcoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlO1xuICB9O1xuICBobGpzLkNfTElORV9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy8vJywgJyQnKTtcbiAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycpO1xuICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcbiAgaGxqcy5OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQklOQVJZX05VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DU1NfTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCcgK1xuICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyAgK1xuICAgICAgJ3x2d3x2aHx2bWlufHZtYXgnICtcbiAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICd8ZGVnfGdyYWR8cmFkfHR1cm4nICtcbiAgICAgICd8c3xtcycgK1xuICAgICAgJ3xIenxrSHonICtcbiAgICAgICd8ZHBpfGRwY218ZHBweCcgK1xuICAgICAgJyk/JyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5SRUdFWFBfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvXFwvLywgZW5kOiAvXFwvW2dpbXV5XSovLFxuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGhsanMuVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLk1FVEhPRF9HVUFSRCA9IHtcbiAgICAvLyBleGNsdWRlcyBtZXRob2QgbmFtZXMgZnJvbSBrZXl3b3JkIHByb2Nlc3NpbmdcbiAgICBiZWdpbjogJ1xcXFwuXFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgY29uc3RhbnRzID0gW1xuICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQsXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICBobGpzLk1FVEhPRF9HVUFSRFxuICBdXG4gIGNvbnN0YW50cy5mb3JFYWNoKGZ1bmN0aW9uKG9iaikgeyBkZWVwRnJlZXplKG9iaik7IH0pO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9kZWVwLWZyZWV6ZS9ibG9iL21hc3Rlci9pbmRleC5qc1xuICBmdW5jdGlvbiBkZWVwRnJlZXplIChvKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShvKTtcblxuICAgIHZhciBvYmpJc0Z1bmN0aW9uID0gdHlwZW9mIG8gPT09ICdmdW5jdGlvbic7XG5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShwcm9wKVxuICAgICAgJiYgb1twcm9wXSAhPT0gbnVsbFxuICAgICAgJiYgKHR5cGVvZiBvW3Byb3BdID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvW3Byb3BdID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAvLyBJRTExIGZpeDogaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjMxOFxuICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmVcbiAgICAgICYmIChvYmpJc0Z1bmN0aW9uID8gcHJvcCAhPT0gJ2NhbGxlcicgJiYgcHJvcCAhPT0gJ2NhbGxlZScgJiYgcHJvcCAhPT0gJ2FyZ3VtZW50cycgOiB0cnVlKVxuICAgICAgJiYgIU9iamVjdC5pc0Zyb3plbihvW3Byb3BdKSkge1xuICAgICAgICBkZWVwRnJlZXplKG9bcHJvcF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG87XG4gIH07XG5cblxuICByZXR1cm4gaGxqcztcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcyl7XG5cbiAgLy8g0L7QsdGJ0LjQuSDQv9Cw0YLRgtC10YDQvSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LJcbiAgdmFyIFVOREVSU0NPUkVfSURFTlRfUkUgPSAnW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSsnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4ga2V5d29yZFxuICB2YXIgdjdfa2V5d29yZHMgPVxuICAn0LTQsNC70LXQtSAnO1xuXG4gIC8vIHY4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCA9PT4ga2V5d29yZFxuICB2YXIgdjhfa2V5d29yZHMgPVxuICAn0LLQvtC30LLRgNCw0YIg0LLRi9C30LLQsNGC0YzQuNGB0LrQu9GO0YfQtdC90LjQtSDQstGL0L/QvtC70L3QuNGC0Ywg0LTQu9GPINC10YHQu9C4INC4INC40Lcg0LjQu9C4INC40L3QsNGH0LUg0LjQvdCw0YfQtdC10YHQu9C4INC40YHQutC70Y7Rh9C10L3QuNC1INC60LDQttC00L7Qs9C+INC60L7QvdC10YbQtdGB0LvQuCAnICtcbiAgJ9C60L7QvdC10YbQv9C+0L/Ri9GC0LrQuCDQutC+0L3QtdGG0YbQuNC60LvQsCDQvdC1INC90L7QstGL0Lkg0L/QtdGA0LXQudGC0Lgg0L/QtdGA0LXQvCDQv9C+INC/0L7QutCwINC/0L7Qv9GL0YLQutCwINC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YLQvtCz0LTQsCDRhtC40LrQuyDRjdC60YHQv9C+0YDRgiAnO1xuXG4gIC8vIGtleXdvcmQgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkQgPSB2N19rZXl3b3JkcyArIHY4X2tleXdvcmRzO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LTQuNGA0LXQutGC0LjQstGLLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2N19tZXRhX2tleXdvcmRzID1cbiAgJ9C30LDQs9GA0YPQt9C40YLRjNC40LfRhNCw0LnQu9CwICc7XG5cbiAgLy8gdjgg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINCyINC40L3RgdGC0YDRg9C60YbQuNGP0YUg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLQsNGFINC60L7QvNC/0LjQu9GP0YbQuNC4LCDQsNC90L3QvtGC0LDRhtC40Y/RhSA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2OF9tZXRhX2tleXdvcmRzID1cbiAgJ9Cy0LXQsdC60LvQuNC10L3RgiDQstC80LXRgdGC0L4g0LLQvdC10YjQvdC10LXRgdC+0LXQtNC40L3QtdC90LjQtSDQutC70LjQtdC90YIg0LrQvtC90LXRhtC+0LHQu9Cw0YHRgtC4INC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10LrQu9C40LXQvdGCINC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10YHQtdGA0LLQtdGAICcgK1xuICAn0L3QsNC60LvQuNC10L3RgtC1INC90LDQutC70LjQtdC90YLQtdC90LDRgdC10YDQstC10YDQtSDQvdCw0LrQu9C40LXQvdGC0LXQvdCw0YHQtdGA0LLQtdGA0LXQsdC10LfQutC+0L3RgtC10LrRgdGC0LAg0L3QsNGB0LXRgNCy0LXRgNC1INC90LDRgdC10YDQstC10YDQtdCx0LXQt9C60L7QvdGC0LXQutGB0YLQsCDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC0ICcgK1xuICAn0L/QvtGB0LvQtSDRgdC10YDQstC10YAg0YLQvtC70YHRgtGL0LnQutC70LjQtdC90YLQvtCx0YvRh9C90L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7Qu9GB0YLRi9C50LrQu9C40LXQvdGC0YPQv9GA0LDQstC70Y/QtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7QvdC60LjQudC60LvQuNC10L3RgiAnO1xuXG4gIC8vIG1ldGEta2V5d29yZCA6INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDQsiDQuNC90YHRgtGA0YPQutGG0LjRj9GFINC/0YDQtdC/0YDQvtGG0LXRgdGB0L7RgNCwLCDQtNC40YDQtdC60YLQuNCy0LDRhSDQutC+0LzQv9C40LvRj9GG0LjQuCwg0LDQvdC90L7RgtCw0YbQuNGP0YVcbiAgdmFyIE1FVEFLRVlXT1JEID0gdjdfbWV0YV9rZXl3b3JkcyArIHY4X21ldGFfa2V5d29yZHM7XG5cbiAgLy8gdjcg0YHQuNGB0YLQtdC80L3Ri9C1INC60L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X3N5c3RlbV9jb25zdGFudHMgPVxuICAn0YDQsNC30LTQtdC70LjRgtC10LvRjNGB0YLRgNCw0L3QuNGGINGA0LDQt9C00LXQu9C40YLQtdC70YzRgdGC0YDQvtC6INGB0LjQvNCy0L7Qu9GC0LDQsdGD0LvRj9GG0LjQuCAnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgPVxuICAnYW5zaXRvb2VtIG9lbXRvYW5zaSDQstCy0LXRgdGC0LjQstC40LTRgdGD0LHQutC+0L3RgtC+INCy0LLQtdGB0YLQuNC/0LXRgNC10YfQuNGB0LvQtdC90LjQtSDQstCy0LXRgdGC0LjQv9C10YDQuNC+0LQg0LLQstC10YHRgtC40L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0LLRi9Cx0YDQsNC90L3Ri9C50L/Qu9Cw0L3RgdGH0LXRgtC+0LIgJyArXG4gICfQtNCw0YLQsNCz0L7QtCDQtNCw0YLQsNC80LXRgdGP0YYg0LTQsNGC0LDRh9C40YHQu9C+INC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC30L3QsNGH0LXQvdC40LXQstGB0YLRgNC+0LrRgyDQt9C90LDRh9C10L3QuNC10LjQt9GB0YLRgNC+0LrQuCDQutCw0YLQsNC70L7Qs9C40LEg0LrQsNGC0LDQu9C+0LPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQutC+0LTRgdC40LzQsiDQutC+0L3Qs9C+0LTQsCDQutC+0L3QtdGG0L/QtdGA0LjQvtC00LDQsdC4INC60L7QvdC10YbRgNCw0YHRgdGH0LjRgtCw0L3QvdC+0LPQvtC/0LXRgNC40L7QtNCw0LHQuCDQutC+0L3QtdGG0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0LjQvdGC0LXRgNCy0LDQu9CwINC60L7QvdC60LLQsNGA0YLQsNC70LAg0LrQvtC90LzQtdGB0Y/RhtCwICcgK1xuICAn0LrQvtC90L3QtdC00LXQu9C4INC70L7QsyDQu9C+0LMxMCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LXQutC+0LvQuNGH0LXRgdGC0LLQvtGB0YPQsdC60L7QvdGC0L4g0L3QsNC30LLQsNC90LjQtdC40L3RgtC10YDRhNC10LnRgdCwINC90LDQt9Cy0LDQvdC40LXQvdCw0LHQvtGA0LDQv9GA0LDQsiDQvdCw0LfQvdCw0YfQuNGC0YzQstC40LQgJyArXG4gICfQvdCw0LfQvdCw0YfQuNGC0YzRgdGH0LXRgiDQvdCw0LnRgtC40YHRgdGL0LvQutC4INC90LDRh9Cw0LvQvtC/0LXRgNC40L7QtNCw0LHQuCDQvdCw0YfQsNC70L7RgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0LLQsNC70LAg0L3QsNGH0LPQvtC00LAg0L3QsNGH0LrQstCw0YDRgtCw0LvQsCDQvdCw0YfQvNC10YHRj9GG0LAgJyArXG4gICfQvdCw0YfQvdC10LTQtdC70Lgg0L3QvtC80LXRgNC00L3Rj9Cz0L7QtNCwINC90L7QvNC10YDQtNC90Y/QvdC10LTQtdC70Lgg0L3QvtC80LXRgNC90LXQtNC10LvQuNCz0L7QtNCwINC+0LHRgNCw0LHQvtGC0LrQsNC+0LbQuNC00LDQvdC40Y8g0L7RgdC90L7QstC90L7QudC20YPRgNC90LDQu9GA0LDRgdGH0LXRgtC+0LIgJyArXG4gICfQvtGB0L3QvtCy0L3QvtC50L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0L7RgdC90L7QstC90L7QudGP0LfRi9C6INC+0YfQuNGB0YLQuNGC0YzQvtC60L3QvtGB0L7QvtCx0YnQtdC90LjQuSDQv9C10YDQuNC+0LTRgdGC0YAg0L/QvtC70YPRh9C40YLRjNCy0YDQtdC80Y/RgtCwINC/0L7Qu9GD0YfQuNGC0YzQtNCw0YLRg9GC0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC60YPQvNC10L3RgtGC0LAg0L/QvtC70YPRh9C40YLRjNC30L3QsNGH0LXQvdC40Y/QvtGC0LHQvtGA0LAg0L/QvtC70YPRh9C40YLRjNC/0L7Qt9C40YbQuNGO0YLQsCDQv9C+0LvRg9GH0LjRgtGM0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDQv9C+0LvRg9GH0LjRgtGM0YLQsCAnICtcbiAgJ9C/0YDQtdGE0LjQutGB0LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40Lgg0L/RgNC+0L/QuNGB0Ywg0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDRgNCw0LfQvCDRgNCw0LfQvtCx0YDQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCDRgNCw0YHRgdGH0LjRgtCw0YLRjNGA0LXQs9C40YHRgtGA0YvQvdCwICcgK1xuICAn0YDQsNGB0YHRh9C40YLQsNGC0YzRgNC10LPQuNGB0YLRgNGL0L/QviDRgdC40LzQsiDRgdC+0LfQtNCw0YLRjNC+0LHRitC10LrRgiDRgdGC0LDRgtGD0YHQstC+0LfQstGA0LDRgtCwINGB0YLRgNC60L7Qu9C40YfQtdGB0YLQstC+0YHRgtGA0L7QuiDRgdGE0L7RgNC80LjRgNC+0LLQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0YfQtdGC0L/QvtC60L7QtNGDINGC0LXQutGD0YnQtdC10LLRgNC10LzRjyDRgtC40L/Qt9C90LDRh9C10L3QuNGPINGC0LjQv9C30L3QsNGH0LXQvdC40Y/RgdGC0YAg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgtCw0L3QsCDRg9GB0YLQsNC90L7QstC40YLRjNGC0LDQv9C+INGE0LjQutGB0YjQsNCx0LvQvtC9INGI0LDQsdC70L7QvSAnO1xuICBcbiAgLy8gdjgg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyA9XG4gICdhY29zIGFzaW4gYXRhbiBiYXNlNjTQt9C90LDRh9C10L3QuNC1IGJhc2U2NNGB0YLRgNC+0LrQsCBjb3MgZXhwIGxvZyBsb2cxMCBwb3cgc2luIHNxcnQgdGFuIHhtbNC30L3QsNGH0LXQvdC40LUgeG1s0YHRgtGA0L7QutCwICcgK1xuICAneG1s0YLQuNC/IHhtbNGC0LjQv9C30L3RhyDQsNC60YLQuNCy0L3QvtC10L7QutC90L4g0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC8INCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINCx0YPQu9C10LLQviDQstCy0LXRgdGC0LjQtNCw0YLRgyDQstCy0LXRgdGC0LjQt9C90LDRh9C10L3QuNC1ICcgK1xuICAn0LLQstC10YHRgtC40YHRgtGA0L7QutGDINCy0LLQtdGB0YLQuNGH0LjRgdC70L4g0LLQvtC30LzQvtC20L3QvtGB0YLRjNGH0YLQtdC90LjRj3htbCDQstC+0L/RgNC+0YEg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGM0LfQvdCw0YfQtdC90LjQtSDQstGA0LXQsyDQstGL0LPRgNGD0LfQuNGC0YzQttGD0YDQvdCw0LvRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0LLRi9C/0L7Qu9C90LjRgtGM0L7QsdGA0LDQsdC+0YLQutGD0L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0LLRi9C/0L7Qu9C90LjRgtGM0L/RgNC+0LLQtdGA0LrRg9C/0YDQsNCy0LTQvtGB0YLRg9C/0LAg0LLRi9GH0LjRgdC70LjRgtGMINCz0L7QtCDQtNCw0L3QvdGL0LXRhNC+0YDQvNGL0LLQt9C90LDRh9C10L3QuNC1INC00LDRgtCwINC00LXQvdGMINC00LXQvdGM0LPQvtC00LAgJyArXG4gICfQtNC10L3RjNC90LXQtNC10LvQuCDQtNC+0LHQsNCy0LjRgtGM0LzQtdGB0Y/RhiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YzRgNCw0LHQvtGC0YPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LfQsNCy0LXRgNGI0LjRgtGM0YDQsNCx0L7RgtGD0YHQuNGB0YLQtdC80YsgJyArXG4gICfQt9Cw0LPRgNGD0LfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDINC30LDQutGA0YvRgtGM0YHQv9GA0LDQstC60YMg0LfQsNC/0LjRgdCw0YLRjGpzb24g0LfQsNC/0LjRgdCw0YLRjHhtbCDQt9Cw0L/QuNGB0LDRgtGM0LTQsNGC0YNqc29uINC30LDQv9C40YHRjNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C30LDQv9C+0LvQvdC40YLRjNC30L3QsNGH0LXQvdC40Y/RgdCy0L7QudGB0YLQsiDQt9Cw0L/RgNC+0YHQuNGC0YzRgNCw0LfRgNC10YjQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQt9Cw0L/Rg9GB0YLQuNGC0YzQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GB0YLQuNGC0YzRgdC40YHRgtC10LzRgyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOICcgK1xuICAn0LfQvdCw0YfQtdC90LjQtdCy0LTQsNC90L3Ri9C10YTQvtGA0LzRiyDQt9C90LDRh9C10L3QuNC10LLRgdGC0YDQvtC60YPQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQstGE0LDQudC7INC30L3QsNGH0LXQvdC40LXQt9Cw0L/QvtC70L3QtdC90L4g0LfQvdCw0YfQtdC90LjQtdC40LfRgdGC0YDQvtC60LjQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQuNC30YTQsNC50LvQsCAnICtcbiAgJ9C40Ld4bWzRgtC40L/QsCDQuNC80L/QvtGA0YLQvNC+0LTQtdC70Lh4ZHRvINC40LzRj9C60L7QvNC/0YzRjtGC0LXRgNCwINC40LzRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjNC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C10LTQsNC90L3Ri9C1INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC+0YjQuNCx0LrQtSAnICtcbiAgJ9C60LDRgtCw0LvQvtCz0LHQuNCx0LvQuNC+0YLQtdC60LjQvNC+0LHQuNC70YzQvdC+0LPQvtGD0YHRgtGA0L7QudGB0YLQstCwINC60LDRgtCw0LvQvtCz0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC60LDRgtCw0LvQvtCz0LTQvtC60YPQvNC10L3RgtC+0LIg0LrQsNGC0LDQu9C+0LPQv9GA0L7Qs9GA0LDQvNC80Ysg0LrQvtC00LjRgNC+0LLQsNGC0YzRgdGC0YDQvtC60YMgJyArXG4gICfQutC+0LTQu9C+0LrQsNC70LjQt9Cw0YbQuNC40LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC60L7QtNGB0LjQvNCy0L7Qu9CwINC60L7QvNCw0L3QtNCw0YHQuNGB0YLQtdC80Ysg0LrQvtC90LXRhtCz0L7QtNCwINC60L7QvdC10YbQtNC90Y8g0LrQvtC90LXRhtC60LLQsNGA0YLQsNC70LAg0LrQvtC90LXRhtC80LXRgdGP0YbQsCDQutC+0L3QtdGG0LzQuNC90YPRgtGLICcgK1xuICAn0LrQvtC90LXRhtC90LXQtNC10LvQuCDQutC+0L3QtdGG0YfQsNGB0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0LHQsNC30YvQtNCw0L3QvdGL0YXQuNC30LzQtdC90LXQvdCw0LTQuNC90LDQvNC40YfQtdGB0LrQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/QuNC30LzQtdC90LXQvdCwINC60L7Qv9C40YDQvtCy0LDRgtGM0LTQsNC90L3Ri9C10YTQvtGA0LzRiyAnICtcbiAgJ9C60L7Qv9C40YDQvtCy0LDRgtGM0YTQsNC50Lsg0LrRgNCw0YLQutC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCDQu9C10LIg0LzQsNC60YEg0LzQtdGB0YLQvdC+0LXQstGA0LXQvNGPINC80LXRgdGP0YYg0LzQuNC9INC80LjQvdGD0YLQsCDQvNC+0L3QvtC/0L7Qu9GM0L3Ri9C50YDQtdC20LjQvCDQvdCw0LnRgtC4ICcgK1xuICAn0L3QsNC50YLQuNC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtdGB0LjQvNCy0L7Qu9GLeG1sINC90LDQudGC0LjQvtC60L3QvtC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQvdCw0LnRgtC40L/QvtC80LXRh9C10L3QvdGL0LXQvdCw0YPQtNCw0LvQtdC90LjQtSDQvdCw0LnRgtC40L/QvtGB0YHRi9C70LrQsNC8INC90LDQudGC0LjRhNCw0LnQu9GLICcgK1xuICAn0L3QsNGH0LDQu9C+0LPQvtC00LAg0L3QsNGH0LDQu9C+0LTQvdGPINC90LDRh9Cw0LvQvtC60LLQsNGA0YLQsNC70LAg0L3QsNGH0LDQu9C+0LzQtdGB0Y/RhtCwINC90LDRh9Cw0LvQvtC80LjQvdGD0YLRiyDQvdCw0YfQsNC70L7QvdC10LTQtdC70Lgg0L3QsNGH0LDQu9C+0YfQsNGB0LAg0L3QsNGH0LDRgtGM0LfQsNC/0YDQvtGB0YDQsNC30YDQtdGI0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQt9Cw0L/Rg9GB0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0YfQsNGC0YzQutC+0L/QuNGA0L7QstCw0L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C10YDQtdC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyAnICtcbiAgJ9C90LDRh9Cw0YLRjNC/0L7QtNC60LvRjtGH0LXQvdC40LXRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10Lkg0L3QsNGH0LDRgtGM0L/QvtC00LrQu9GO0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQvdCw0YfQsNGC0YzQv9C+0LjRgdC60YTQsNC50LvQvtCyICcgK1xuICAn0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10LrQsNGC0LDQu9C+0LPQsNCy0YDQtdC80LXQvdC90YvRhdGE0LDQudC70L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXQutCw0YLQsNC70L7Qs9Cw0LTQvtC60YPQvNC10L3RgtC+0LIg0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10YDQsNCx0L7Rh9C10LPQvtC60LDRgtCw0LvQvtCz0LDQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0L/QvtC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LzQtdGJ0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YHQvtC30LTQsNC90LjQtdC00LLQvtC40YfQvdGL0YXQtNCw0L3QvdGL0YXQuNC30YTQsNC50LvQsCDQvdCw0YfQsNGC0YzRgdC+0LfQtNCw0L3QuNC10LrQsNGC0LDQu9C+0LPQsCAnICtcbiAgJ9C90LDRh9Cw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOINC90LDRh9Cw0YLRjNGD0LTQsNC70LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YPRgdGC0LDQvdC+0LLQutGD0LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyDQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10LkgJyArXG4gICfQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L3QtdC00LXQu9GP0LPQvtC00LAg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0YzQt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L7QtdC00LjQvdC10L3QuNGPINC90L7QvNC10YDRgdC10LDQvdGB0LDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfQvdC+0LzQtdGA0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L3RgNC10LMg0L3RgdGC0YAg0L7QsdC90L7QstC40YLRjNC40L3RgtC10YDRhNC10LnRgSDQvtCx0L3QvtCy0LjRgtGM0L3Rg9C80LXRgNCw0YbQuNGO0L7QsdGK0LXQutGC0L7QsiDQvtCx0L3QvtCy0LjRgtGM0L/QvtCy0YLQvtGA0L3QvtC40YHQv9C+0LvRjNC30YPQtdC80YvQtdC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQvtCx0YDQsNCx0L7RgtC60LDQv9GA0LXRgNGL0LLQsNC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvtCx0YrQtdC00LjQvdC40YLRjNGE0LDQudC70Ysg0L7QutGAINC+0L/QuNGB0LDQvdC40LXQvtGI0LjQsdC60Lgg0L7Qv9C+0LLQtdGB0YLQuNGC0Ywg0L7Qv9C+0LLQtdGB0YLQuNGC0YzQvtCx0LjQt9C80LXQvdC10L3QuNC4ICcgK1xuICAn0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQt9Cw0L/RgNC+0YHQsNC90LDRgdGC0YDQvtC10LrQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQvtC20LjQtNCw0L3QuNGPINC+0YLQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQvtGC0LrRgNGL0YLRjNC30L3QsNGH0LXQvdC40LUg0L7RgtC60YDRi9GC0YzQuNC90LTQtdC60YHRgdC/0YDQsNCy0LrQuCDQvtGC0LrRgNGL0YLRjNGB0L7QtNC10YDQttCw0L3QuNC10YHQv9GA0LDQstC60Lgg0L7RgtC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQvtGC0LrRgNGL0YLRjNGE0L7RgNC80YMg0L7RgtC60YDRi9GC0YzRhNC+0YDQvNGD0LzQvtC00LDQu9GM0L3QviAnICtcbiAgJ9C+0YLQvNC10L3QuNGC0YzRgtGA0LDQvdC30LDQutGG0LjRjiDQvtGH0LjRgdGC0LjRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQvtGH0LjRgdGC0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC+0YfQuNGB0YLQuNGC0YzRgdC+0L7QsdGJ0LXQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNGL0LTQvtGB0YLRg9C/0LAgJyArXG4gICfQv9C10YDQtdC50YLQuNC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQv9C10YDQtdC80LXRgdGC0LjRgtGM0YTQsNC50Lsg0L/QvtC00LrQu9GO0YfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDICcgK1xuICAn0L/QvtC00LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7QttC40LTQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHQutGA0LjQv9GC0L7Qs9GA0LDRhNC40LXQuSDQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQv9C+0LTRgNC+0LHQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC00LDRgtGLINC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC30L3QsNGH0LXQvdC40Y8g0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00YHRgtGA0L7QutC4INC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNGH0LjRgdC70LAg0L/QvtC60LDQt9Cw0YLRjNCy0L7Qv9GA0L7RgSDQv9C+0LrQsNC30LDRgtGM0LfQvdCw0YfQtdC90LjQtSAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQuNC90YTQvtGA0LzQsNGG0LjRjtC+0LHQvtGI0LjQsdC60LUg0L/QvtC60LDQt9Cw0YLRjNC90LDQutCw0YDRgtC1INC/0L7QutCw0LfQsNGC0YzQvtC/0L7QstC10YnQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+0LrQsNC30LDRgtGM0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQv9C+0LvQvdC+0LXQuNC80Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGMY29t0L7QsdGK0LXQutGCINC/0L7Qu9GD0YfQuNGC0Yx4bWzRgtC40L8g0L/QvtC70YPRh9C40YLRjNCw0LTRgNC10YHQv9C+0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjiDQv9C+0LvRg9GH0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDQstC10YDRiNC10L3QuNGP0YHQv9GP0YnQtdCz0L7RgdC10LDQvdGB0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINC/0L7Qu9GD0YfQuNGC0YzQstGA0LXQvNGP0L7QttC40LTQsNC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQtNCw0L3QvdGL0LXQstGL0LHQvtGA0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQudC/0LDRgNCw0LzQtdGC0YDQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC00L7Qv9GD0YHRgtC40LzRi9C10LrQvtC00YvQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQtNC+0L/Rg9GB0YLQuNC80YvQtdGH0LDRgdC+0LLRi9C10L/QvtGP0YHQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQt9Cw0LPQvtC70L7QstC+0LrQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC/0L7Qu9GD0YfQuNGC0YzQt9C90LDRh9C10L3QuNGP0L7RgtCx0L7RgNCw0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQuNC30LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAg0L/QvtC70YPRh9C40YLRjNC40LzRj9Cy0YDQtdC80LXQvdC90L7Qs9C+0YTQsNC50LvQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQuNC80Y/QutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC40L3RhNC+0YDQvNCw0YbQuNGO0Y3QutGA0LDQvdC+0LLQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40LggJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LvRg9GH0LjRgtGM0LrRgNCw0YLQutC40LnQt9Cw0LPQvtC70L7QstC+0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQv9C+0LvRg9GH0LjRgtGM0LzQsNC60LXRgtC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GLINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9C60LvQuNC10L3RgtCwINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9GB0LXRgNCy0LXRgNCwINC/0L7Qu9GD0YfQuNGC0YzQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10L/QvtCw0LTRgNC10YHRgyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvNC40L3QuNC80LDQu9GM0L3Rg9GO0LTQu9C40L3Rg9C/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNC90LDQstC40LPQsNGG0LjQvtC90L3Rg9GO0YHRgdGL0LvQutGDINC/0L7Qu9GD0YfQuNGC0YzQvdCw0LLQuNCz0LDRhtC40L7QvdC90YPRjtGB0YHRi9C70LrRg9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuNCx0LDQt9GL0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzQvtCx0YnQuNC50LzQsNC60LXRgiAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0YnRg9GO0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0L7QutC90LAg0L/QvtC70YPRh9C40YLRjNC+0L/QtdGA0LDRgtC40LLQvdGD0Y7QvtGC0LzQtdGC0LrRg9Cy0YDQtdC80LXQvdC4INC/0L7Qu9GD0YfQuNGC0YzQvtGC0LrQu9GO0YfQtdC90LjQtdCx0LXQt9C+0L/QsNGB0L3QvtCz0L7RgNC10LbQuNC80LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/QsNGA0LDQvNC10YLRgNGL0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhdC+0L/RhtC40LnQuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC70L3QvtC10LjQvNGP0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQvtC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y/QvdCw0LLQuNCz0LDRhtC40L7QvdC90YvRhdGB0YHRi9C70L7QuiDQv9C+0LvRg9GH0LjRgtGM0L/RgNC+0LLQtdGA0LrRg9GB0LvQvtC20L3QvtGB0YLQuNC/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNGA0LDQt9C00LXQu9C40YLQtdC70YzQv9GD0YLQuCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0LjQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0YDQsNC30LTQtdC70LjRgtC10LvRjNC/0YPRgtC40YHQtdGA0LLQtdGA0LAg0L/QvtC70YPRh9C40YLRjNGB0LXQsNC90YHRi9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgdC60L7RgNC+0YHRgtGM0LrQu9C40LXQvdGC0YHQutC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjRj9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtC+0LHRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLINC/0L7Qu9GD0YfQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDRg9C60YLRg9GA0YPRhdGA0LDQvdC10L3QuNGP0LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YLQtdC60YPRidC40LnRgdC10LDQvdGB0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzRhNCw0LnQuyDQv9C+0LvRg9GH0LjRgtGM0YTQsNC50LvRiyDQv9C+0LvRg9GH0LjRgtGM0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y4gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y7QuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQvtGBINC/0L7QvNC10YHRgtC40YLRjNCy0L7QstGA0LXQvNC10L3QvdC+0LXRhdGA0LDQvdC40LvQuNGJ0LUgJyArXG4gICfQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQuyDQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQu9GLINC/0YDQsNCyINC/0YDQsNCy0L7QtNC+0YHRgtGD0L/QsCDQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90L7QtdC30L3QsNGH0LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQutC+0LTQsNC70L7QutCw0LvQuNC30LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9C10YDQuNC+0LTQsCAnICtcbiAgJ9C/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/RgNCw0LLQsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC/0YDQuNC70L7QttC10L3QuNGPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10YHQvtCx0YvRgtC40Y/QttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRh9Cw0YHQvtCy0L7Qs9C+0L/QvtGP0YHQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1ICcgK1xuICAn0L/RgNC10LrRgNCw0YLQuNGC0YzRgNCw0LHQvtGC0YPRgdC40YHRgtC10LzRiyDQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDQv9GA0L7QtNC+0LvQttC40YLRjNCy0YvQt9C+0LIg0L/RgNC+0YfQuNGC0LDRgtGManNvbiDQv9GA0L7Rh9C40YLQsNGC0Yx4bWwg0L/RgNC+0YfQuNGC0LDRgtGM0LTQsNGC0YNqc29uINC/0YPRgdGC0LDRj9GB0YLRgNC+0LrQsCAnICtcbiAgJ9GA0LDQsdC+0YfQuNC50LrQsNGC0LDQu9C+0LPQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YDQsNC30LTQtdC70LjRgtGM0YTQsNC50Lsg0YDQsNC30L7RgNCy0LDRgtGM0YHQvtC10LTQuNC90LXQvdC40LXRgdCy0L3QtdGI0L3QuNC80LjRgdGC0L7Rh9C90LjQutC+0LzQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQutC+0LTQuNGA0L7QstCw0YLRjNGB0YLRgNC+0LrRgyDRgNC+0LvRjNC00L7RgdGC0YPQv9C90LAg0YHQtdC60YPQvdC00LAg0YHQuNCz0L3QsNC7INGB0LjQvNCy0L7QuyDRgdC60L7Qv9C40YDQvtCy0LDRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgdC80LXRidC10L3QuNC10LvQtdGC0L3QtdCz0L7QstGA0LXQvNC10L3QuCAnICtcbiAgJ9GB0LzQtdGJ0LXQvdC40LXRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QstGA0LXQvNC10L3QuCDRgdC+0LXQtNC40L3QuNGC0YzQsdGD0YTQtdGA0YvQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINGB0L7Qt9C00LDRgtGM0LrQsNGC0LDQu9C+0LMg0YHQvtC30LTQsNGC0YzRhNCw0LHRgNC40LrRg3hkdG8g0YHQvtC60YDQuyDRgdC+0LrRgNC70L8g0YHQvtC60YDQvyDRgdC+0L7QsdGJ0LjRgtGMICcgK1xuICAn0YHQvtGB0YLQvtGP0L3QuNC1INGB0L7RhdGA0LDQvdC40YLRjNC30L3QsNGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGB0YDQtdC0INGB0YLRgNC00LvQuNC90LAg0YHRgtGA0LfQsNC60LDQvdGH0LjQstCw0LXRgtGB0Y/QvdCwINGB0YLRgNC30LDQvNC10L3QuNGC0Ywg0YHRgtGA0L3QsNC50YLQuCDRgdGC0YDQvdCw0YfQuNC90LDQtdGC0YHRj9GBICcgK1xuICAn0YHRgtGA0L7QutCwINGB0YLRgNC+0LrQsNGB0L7QtdC00LjQvdC10L3QuNGP0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGB0YLRgNC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDQvtC60YMg0YHRgtGA0YDQsNC30LTQtdC70LjRgtGMINGB0YLRgNGB0L7QtdC00LjQvdC40YLRjCDRgdGC0YDRgdGA0LDQstC90LjRgtGMINGB0YLRgNGH0LjRgdC70L7QstGF0L7QttC00LXQvdC40LkgJytcbiAgJ9GB0YLRgNGH0LjRgdC70L7RgdGC0YDQvtC6INGB0YLRgNGI0LDQsdC70L7QvSDRgtC10LrRg9GJ0LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0LTQsNGC0LDRgdC10LDQvdGB0LAg0YLQtdC60YPRidCw0Y/Rg9C90LjQstC10YDRgdCw0LvRjNC90LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0YPQvdC40LLQtdGA0YHQsNC70YzQvdCw0Y/QtNCw0YLQsNCy0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgJyArXG4gICfRgtC10LrRg9GJ0LjQudCy0LDRgNC40LDQvdGC0LjQvdGC0LXRgNGE0LXQudGB0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YLQtdC60YPRidC40LnQstCw0YDQuNCw0L3RgtC+0YHQvdC+0LLQvdC+0LPQvtGI0YDQuNGE0YLQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgtC10LrRg9GJ0LjQudC60L7QtNC70L7QutCw0LvQuNC30LDRhtC40LggJyArXG4gICfRgtC10LrRg9GJ0LjQudGA0LXQttC40LzQt9Cw0L/Rg9GB0LrQsCDRgtC10LrRg9GJ0LjQudGP0LfRi9C6INGC0LXQutGD0YnQuNC50Y/Qt9GL0LrRgdC40YHRgtC10LzRiyDRgtC40L8g0YLQuNC/0LfQvdGHINGC0YDQsNC90LfQsNC60YbQuNGP0LDQutGC0LjQstC90LAg0YLRgNC10LMg0YPQtNCw0LvQuNGC0YzQtNCw0L3QvdGL0LXQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfRg9C00LDQu9C40YLRjNC40LfQstGA0LXQvNC10L3QvdC+0LPQvtGF0YDQsNC90LjQu9C40YnQsCDRg9C00LDQu9C40YLRjNC+0LHRitC10LrRgtGLINGD0LTQsNC70LjRgtGM0YTQsNC50LvRiyDRg9C90LjQstC10YDRgdCw0LvRjNC90L7QtdCy0YDQtdC80Y8g0YPRgdGC0LDQvdC+0LLQuNGC0YzQsdC10LfQvtC/0LDRgdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDRg9GB0YLQsNC90L7QstC40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C+0LbQuNC00LDQvdC40Y/QsdC70L7QutC40YDQvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60YHQuNGB0YLQtdC80Ysg0YPRgdGC0LDQvdC+0LLQuNGC0YzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRg9GB0YLQsNC90L7QstC40YLRjNC60YDQsNGC0LrQuNC50LfQsNCz0L7Qu9C+0LLQvtC60L/RgNC40LvQvtC20LXQvdC40Y8gJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC80LjQvdC40LzQsNC70YzQvdGD0Y7QtNC70LjQvdGD0L/QsNGA0L7Qu9C10LnQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDRg9GB0YLQsNC90L7QstC40YLRjNC80L7QvdC+0L/QvtC70YzQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40LrQu9C40LXQvdGC0LDQu9C40YbQtdC90LfQuNGA0L7QstCw0L3QuNGPICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGD0YHRgtCw0L3QvtCy0LjRgtGM0L7RgtC60LvRjtGH0LXQvdC40LXQsdC10LfQvtC/0LDRgdC90L7Qs9C+0YDQtdC20LjQvNCwICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQv9Cw0YDQsNC80LXRgtGA0YvRhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Ri9GF0L7Qv9GG0LjQudC40L3RgtC10YDRhNC10LnRgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0L/RgNC40LLQuNC70LXQs9C40YDQvtCy0LDQvdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5ICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjQtdGB0LLQvdC10YjQvdC40LzQuNGB0YLQvtGH0L3QuNC60L7QvNC00LDQvdC90YvRhSDRg9GB0YLQsNC90L7QstC40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINGD0YHRgtCw0L3QvtCy0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDRg9GB0YLQsNC90L7QstC40YLRjNGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAgJyArXG4gICfRhNC+0YDQvNCw0YIg0YbQtdC7INGH0LDRgSDRh9Cw0YHQvtCy0L7QudC/0L7Rj9GBINGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAg0YfQuNGB0LvQviDRh9C40YHQu9C+0L/RgNC+0L/QuNGB0YzRjiDRjdGC0L7QsNC00YDQtdGB0LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAgJztcblxuICAvLyB2OCDRgdCy0L7QudGB0YLQstCwINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfcHJvcGVydHkgPVxuICAnd3PRgdGB0YvQu9C60Lgg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INCx0LjQsdC70LjQvtGC0LXQutCw0LzQsNC60LXRgtC+0LLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCx0LjQsdC70LjQvtGC0LXQutCw0YHRgtC40LvQtdC5INCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0YsgJyArXG4gICfQstC90LXRiNC90LjQtdC40YHRgtC+0YfQvdC40LrQuNC00LDQvdC90YvRhSDQstC90LXRiNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuCDQstC90LXRiNC90LjQtdC+0YLRh9C10YLRiyDQstGB0YLRgNC+0LXQvdC90YvQtdC/0L7QutGD0L/QutC4INCz0LvQsNCy0L3Ri9C50LjQvdGC0LXRgNGE0LXQudGBINCz0LvQsNCy0L3Ri9C50YHRgtC40LvRjCAnICtcbiAgJ9C00L7QutGD0LzQtdC90YLRiyDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0LXRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC20YPRgNC90LDQu9GL0LTQvtC60YPQvNC10L3RgtC+0LIg0LfQsNC00LDRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC40L3RgtC10YDQvdC10YLRgdC+0LXQtNC40L3QtdC90LjQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDQsdC+0YfQtdC50LTQsNGC0YsgJyArXG4gICfQuNGB0YLQvtGA0LjRj9GA0LDQsdC+0YLRi9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0LrRgNC40YLQtdGA0LjQuNC+0YLQsdC+0YDQsCDQvNC10YLQsNC00LDQvdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGA0LXQutC70LDQvNGLINC+0YLQv9GA0LDQstC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5ICcgK1xuICAn0L7RgtGH0LXRgtGLINC/0LDQvdC10LvRjNC30LDQtNCw0YfQvtGBINC/0LDRgNCw0LzQtdGC0YDQt9Cw0L/Rg9GB0LrQsCDQv9Cw0YDQsNC80LXRgtGA0YvRgdC10LDQvdGB0LAg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPINC/0LvQsNC90YvQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0L/Qu9Cw0L3Ri9Cy0LjQtNC+0LLRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiAnICtcbiAgJ9C/0LvQsNC90YvQvtCx0LzQtdC90LAg0L/Qu9Cw0L3Ri9GB0YfQtdGC0L7QsiDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQuiDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4INC/0YDQvtCy0LXRgNC60LDQstGB0YLRgNC+0LXQvdC90YvRhdC/0L7QutGD0L/QvtC6ICcgK1xuICAn0YDQsNCx0L7Rh9Cw0Y/QtNCw0YLQsCDRgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgNC10LPQuNGB0YLRgNGL0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDRgNC10LPQuNGB0YLRgNGL0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdCz0LjRgdGC0YDRi9GA0LDRgdGH0LXRgtCwINGA0LXQs9C40YHRgtGA0YvRgdCy0LXQtNC10L3QuNC5ICcgK1xuICAn0YDQtdCz0LvQsNC80LXQvdGC0L3Ri9C10LfQsNC00LDQvdC40Y8g0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byDRgdC/0YDQsNCy0L7Rh9C90LjQutC4INGB0YDQtdC00YHRgtCy0LDQs9C10L7Qv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjyDRgdGA0LXQtNGB0YLQstCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGB0YDQtdC00YHRgtCy0LDQvNGD0LvRjNGC0LjQvNC10LTQuNCwICcgK1xuICAn0YHRgNC10LTRgdGC0LLQsNC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgNC10LrQu9Cw0LzRiyDRgdGA0LXQtNGB0YLQstCw0L/QvtGH0YLRiyDRgdGA0LXQtNGB0YLQstCw0YLQtdC70LXRhNC+0L3QuNC4INGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQu9C+0LLRi9C10L/QvtGC0L7QutC4INGE0L7QvdC+0LLRi9C10LfQsNC00LDQvdC40Y8g0YXRgNCw0L3QuNC70LjRidCw0L3QsNGB0YLRgNC+0LXQuiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdCy0LDRgNC40LDQvdGC0L7QstC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdC90LDRgdGC0YDQvtC10LrQtNCw0L3QvdGL0YXRhNC+0YDQvCDRhdGA0LDQvdC40LvQuNGJ0LXQvtCx0YnQuNGF0L3QsNGB0YLRgNC+0LXQuiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQtNC40L3QsNC80LjRh9C10YHQutC40YXRgdC/0LjRgdC60L7QsiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNGF0L3QsNGB0YLRgNC+0LXQutC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdGB0LjRgdGC0LXQvNC90YvRhdC90LDRgdGC0YDQvtC10LogJztcblxuICAvLyBidWlsdF9pbiA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC40LvQuCDQsdC40LHQu9C40L7RgtC10YfQvdGL0LUg0L7QsdGK0LXQutGC0YsgKNC60L7QvdGB0YLQsNC90YLRiywg0LrQu9Cw0YHRgdGLLCDRhNGD0L3QutGG0LjQuClcbiAgdmFyIEJVSUxUSU4gPVxuICB2N19zeXN0ZW1fY29uc3RhbnRzICtcbiAgdjdfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyArIHY4X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgK1xuICB2OF9nbG9iYWxfY29udGV4dF9wcm9wZXJ0eTtcbiAgXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQvdCw0LHQvtGA0Ysg0LfQvdCw0YfQtdC90LjQuSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9zZXRzX29mX3ZhbHVlcyA9XG4gICd3ZWLRhtCy0LXRgtCwIHdpbmRvd3PRhtCy0LXRgtCwIHdpbmRvd3PRiNGA0LjRhNGC0Ysg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INGA0LDQvNC60LjRgdGC0LjQu9GPINGB0LjQvNCy0L7Qu9GLINGG0LLQtdGC0LDRgdGC0LjQu9GPINGI0YDQuNGE0YLRi9GB0YLQuNC70Y8gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LjQvdGC0LXRgNGE0LXQudGB0L3Ri9C1ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSA9XG4gICfQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC10YHQvtGF0YDQsNC90LXQvdC40LXQtNCw0L3QvdGL0YXRhNC+0YDQvNGL0LLQvdCw0YHRgtGA0L7QudC60LDRhSDQsNCy0YLQvtC90YPQvNC10YDQsNGG0LjRj9Cy0YTQvtGA0LzQtSDQsNCy0YLQvtGA0LDQt9C00LLQuNC20LXQvdC40LXRgdC10YDQuNC5ICcgK1xuICAn0LDQvdC40LzQsNGG0LjRj9C00LjQsNCz0YDQsNC80LzRiyDQstCw0YDQuNCw0L3RgtCy0YvRgNCw0LLQvdC40LLQsNC90LjRj9GN0LvQtdC80LXQvdGC0L7QstC40LfQsNCz0L7Qu9C+0LLQutC+0LIg0LLQsNGA0LjQsNC90YLRg9C/0YDQsNCy0LvQtdC90LjRj9Cy0YvRgdC+0YLQvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQstC10YDRgtC40LrQsNC70YzQvdCw0Y/Qv9GA0L7QutGA0YPRgtC60LDRhNC+0YDQvNGLINCy0LXRgNGC0LjQutCw0LvRjNC90L7QtdC/0L7Qu9C+0LbQtdC90LjQtSDQstC10YDRgtC40LrQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LXRjdC70LXQvNC10L3RgtCwINCy0LjQtNCz0YDRg9C/0L/Ri9GE0L7RgNC80YsgJyArXG4gICfQstC40LTQtNC10LrQvtGA0LDRhtC40LjRhNC+0YDQvNGLINCy0LjQtNC00L7Qv9C+0LvQvdC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0LLQuNC00LjQt9C80LXQvdC10L3QuNGP0LTQsNC90L3Ri9GFINCy0LjQtNC60L3QvtC/0LrQuNGE0L7RgNC80Ysg0LLQuNC00L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Y8gJyArXG4gICfQstC40LTQv9C+0LTQv9C40YHQtdC50LrQtNC40LDQs9GA0LDQvNC80LUg0LLQuNC00L/QvtC70Y/RhNC+0YDQvNGLINCy0LjQtNGE0LvQsNC20LrQsCDQstC70LjRj9C90LjQtdGA0LDQt9C80LXRgNCw0L3QsNC/0YPQt9GL0YDQtdC60LTQuNCw0LPRgNCw0LzQvNGLINCz0L7RgNC40LfQvtC90YLQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LUgJyArXG4gICfQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC10Y3Qu9C10LzQtdC90YLQsCDQs9GA0YPQv9C/0LjRgNC+0LLQutCw0LrQvtC70L7QvdC+0Log0LPRgNGD0L/Qv9C40YDQvtCy0LrQsNC/0L7QtNGH0LjQvdC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRhNC+0YDQvNGLICcgK1xuICAn0LPRgNGD0L/Qv9GL0LjRjdC70LXQvNC10L3RgtGLINC00LXQudGB0YLQstC40LXQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LnRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQtNC+0L/Rg9GB0YLQuNC80YvQtdC00LXQudGB0YLQstC40Y/Qv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPICcgK1xuICAn0LjQvdGC0LXRgNCy0LDQu9C80LXQttC00YPRjdC70LXQvNC10L3RgtCw0LzQuNGE0L7RgNC80Ysg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQstGL0LLQvtC00LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LvQvtGB0YvQv9GA0L7QutGA0YPRgtC60LggJyArXG4gICfQuNGB0L/QvtC70YzQt9GD0LXQvNC+0LXQt9C90LDRh9C10L3QuNC10YLQvtGH0LrQuNCx0LjRgNC20LXQstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0LjRgdGC0L7RgNC40Y/QstGL0LHQvtGA0LDQv9GA0LjQstCy0L7QtNC1INC40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNC50L7RgdC40YLQvtGH0LXQutC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNGP0YDQsNC30LzQtdGA0LDQv9GD0LfRi9GA0YzQutCw0LTQuNCw0LPRgNCw0LzQvNGLINC60LDRgtC10LPQvtGA0LjRj9Cz0YDRg9C/0L/Ri9C60L7QvNCw0L3QtCDQvNCw0LrRgdC40LzRg9C80YHQtdGA0LjQuSDQvdCw0YfQsNC70YzQvdC+0LXQvtGC0L7QsdGA0LDQttC10L3QuNC10LTQtdGA0LXQstCwICcgK1xuICAn0L3QsNGH0LDQu9GM0L3QvtC10L7RgtC+0LHRgNCw0LbQtdC90LjQtdGB0L/QuNGB0LrQsCDQvtCx0L3QvtCy0LvQtdC90LjQtdGC0LXQutGB0YLQsNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC10L3QtNGA0L7Qs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQvtGA0LjQtdC90YLQsNGG0LjRj9C80LXRgtC+0LrQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QvNC10YLQvtC60YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/RjdC70LXQvNC10L3RgtCw0YTQvtGA0LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQtNC40LDQs9GA0LDQvNC80LUgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQu9C10LPQtdC90LTQtdC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LPRgNGD0L/Qv9GL0LrQvdC+0L/QvtC6INC+0YLQvtCx0YDQsNC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC30L3QsNGH0LXQvdC40LnRgdCy0L7QtNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LfQvdCw0YfQtdC90LjRj9C40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC40L3RgtC10YDQstCw0LvQsNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC60L3QvtC/0LrQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC10LrQvdC+0L/QutC40LLRi9Cx0L7RgNCwINC+0YLQvtCx0YDQsNC20LXQvdC40LXQvtCx0YHRg9C20LTQtdC90LjQudGE0L7RgNC80YsgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10L7QsdGL0YfQvdC+0LnQs9GA0YPQv9C/0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9GF0LfQvdCw0YfQtdC90LjQudC/0YPQt9GL0YDRjNC60L7QstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNC/0L7QuNGB0LrQsCAnICtcbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQv9C+0LTRgdC60LDQt9C60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y/Qv9GA0LjRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXRgNCw0LfQvNC10YLQutC40L/QvtC70L7RgdGL0YDQtdCz0YPQu9C40YDQvtCy0LDQvdC40Y8gJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YHRgtGA0LDQvdC40YbRhNC+0YDQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXRgtCw0LHQu9C40YbRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YLQtdC60YHRgtCw0LfQvdCw0YfQtdC90LjRj9C00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YPQv9GA0LDQstC70LXQvdC40Y/QvtCx0YvRh9C90L7QudCz0YDRg9C/0L/RiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YTQuNCz0YPRgNGL0LrQvdC+0L/QutC4INC/0LDQu9C40YLRgNCw0YbQstC10YLQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINC/0L7QstC10LTQtdC90LjQtdC+0LHRi9GH0L3QvtC50LPRgNGD0L/Qv9GLICcgK1xuICAn0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNC00LXQvdC00YDQvtCz0YDQsNC80LzRiyDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQv9C+0LjRgdC60LLRgtCw0LHQu9C40YbQtdC/0YDQuNCy0LLQvtC00LUg0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQsNGA0YLQuNC90LrQuNC60L3QvtC/0LrQuNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQutCw0YDRgtC40L3QutC40Y3Qu9C10LzQtdC90YLQsNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60L7QvNCw0L3QtNC90L7QudC/0LDQvdC10LvQuNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQvtC80LDQvdC00L3QvtC50L/QsNC90LXQu9C40Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQvtC/0L7RgNC90L7QudGC0L7Rh9C60LjQvtGC0YDQuNGB0L7QstC60Lgg0L/QvtC70L7QttC10L3QuNC10L/QvtC00L/QuNGB0LXQudC60LTQuNCw0LPRgNCw0LzQvNC1INC/0L7Qu9C+0LbQtdC90LjQtdC/0L7QtNC/0LjRgdC10LnRiNC60LDQu9GL0LfQvdCw0YfQtdC90LjQudC40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YHQvtGB0YLQvtGP0L3QuNGP0L/RgNC+0YHQvNC+0YLRgNCwINC/0L7Qu9C+0LbQtdC90LjQtdGB0YLRgNC+0LrQuNC/0L7QuNGB0LrQsCDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDRgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDQv9C+0LvQvtC20LXQvdC40LXRg9C/0YDQsNCy0LvQtdC90LjRj9C/0L7QuNGB0LrQvtC8ICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4INC/0L7RgNGP0LTQvtC60L7RgtC+0LHRgNCw0LbQtdC90LjRj9GC0L7Rh9C10LrQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC50LPQuNGB0YLQvtCz0YDQsNC80LzRiyDQv9C+0YDRj9C00L7QutGB0LXRgNC40LnQstC70LXQs9C10L3QtNC10LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YDQsNC30LzQtdGA0LrQsNGA0YLQuNC90LrQuCDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLINGA0LDRgdGC0Y/Qs9C40LLQsNC90LjQtdC/0L7QstC10YDRgtC40LrQsNC70LjQtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwICcgK1xuICAn0YDQtdC20LjQvNCw0LLRgtC+0L7RgtC+0LHRgNCw0LbQtdC90LjRj9GB0L7RgdGC0L7Rj9C90LjRjyDRgNC10LbQuNC80LLQstC+0LTQsNGB0YLRgNC+0LrRgtCw0LHQu9C40YbRiyDRgNC10LbQuNC80LLRi9Cx0L7RgNCw0L3QtdC30LDQv9C+0LvQvdC10L3QvdC+0LPQviDRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0LTQsNGC0YsgJyArXG4gICfRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0YHRgtGA0L7QutC40YLQsNCx0LvQuNGG0Ysg0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRhtGLINGA0LXQttC40LzQuNC30LzQtdC90LXQvdC40Y/RgNCw0LfQvNC10YDQsCDRgNC10LbQuNC80LjQt9C80LXQvdC10L3QuNGP0YHQstGP0LfQsNC90L3QvtCz0L7Qt9C90LDRh9C10L3QuNGPICcgK1xuICAn0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LTQuNCw0LvQvtCz0LDQv9C10YfQsNGC0Lgg0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0L/QsNGA0LDQvNC10YLRgNCw0LrQvtC80LDQvdC00Ysg0YDQtdC20LjQvNC80LDRgdGI0YLQsNCx0LjRgNC+0LLQsNC90LjRj9C/0YDQvtGB0LzQvtGC0YDQsCAnICtcbiAgJ9GA0LXQttC40LzQvtGB0L3QvtCy0L3QvtCz0L7QvtC60L3QsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9C+0LrQvdCw0YTQvtGA0LzRiyDRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50YHQtdGA0LjQuCDRgNC10LbQuNC80L7RgtGA0LjRgdC+0LLQutC40YHQtdGC0LrQuNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLICcgK1xuICAn0YDQtdC20LjQvNC/0L7Qu9GD0L/RgNC+0LfRgNCw0YfQvdC+0YHRgtC40LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzQv9GA0L7QsdC10LvQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzRgNCw0LfQvNC10YnQtdC90LjRj9C90LDRgdGC0YDQsNC90LjRhtC1INGA0LXQttC40LzRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0LrQvtC70L7QvdC60LggJyArXG4gICfRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C40L3QtNC40LrQsNGC0L7RgNCwINGA0LXQttC40LzRgdC/0LjRgdC60LDQt9Cw0LTQsNGHINGB0LrQstC+0LfQvdC+0LXQstGL0YDQsNCy0L3QuNCy0LDQvdC40LUgJyArXG4gICfRgdC+0YXRgNCw0L3QtdC90LjQtdC00LDQvdC90YvRhdGE0L7RgNC80YvQstC90LDRgdGC0YDQvtC50LrQsNGFINGB0L/QvtGB0L7QsdC30LDQv9C+0LvQvdC10L3QuNGP0YLQtdC60YHRgtCw0LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GB0L/QvtGB0L7QsdC+0L/RgNC10LTQtdC70LXQvdC40Y/QvtCz0YDQsNC90LjRh9C40LLQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGP0LTQuNCw0LPRgNCw0LzQvNGLINGB0YLQsNC90LTQsNGA0YLQvdCw0Y/Qs9GA0YPQv9C/0LDQutC+0LzQsNC90LQg0YHRgtCw0L3QtNCw0YDRgtC90L7QtdC+0YTQvtGA0LzQu9C10L3QuNC1ICcgK1xuICAn0YHRgtCw0YLRg9GB0L7Qv9C+0LLQtdGJ0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YHRgtC40LvRjNGB0YLRgNC10LvQutC4INGC0LjQv9Cw0L/Qv9GA0L7QutGB0LjQvNCw0YbQuNC40LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/QtdC00LjQvdC40YbRi9GI0LrQsNC70YvQstGA0LXQvNC10L3QuCDRgtC40L/QuNC80L/QvtGA0YLQsNGB0LXRgNC40LnRgdC70L7Rj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C70LjQvdC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/Qu9C40L3QuNC40LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0LzQsNGA0LrQtdGA0LDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/QvNCw0YDQutC10YDQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QvtCx0LvQsNGB0YLQuNC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0YLQuNC/0L7RgNCz0LDQvdC40LfQsNGG0LjQuNC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhdCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgdC10YDQuNC40YHQu9C+0Y/Qs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyAnICtcbiAgJ9GC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgtC+0YfQtdGH0L3QvtCz0L7QvtCx0YrQtdC60YLQsNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RiNC60LDQu9GL0Y3Qu9C10LzQtdC90YLQsNC70LXQs9C10L3QtNGL0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80YsgJyArXG4gICfRgtC40L/Qv9C+0LjRgdC60LDQvtCx0YrQtdC60YLQvtCy0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0L/RgNC+0LXQutGG0LjQuNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjQt9C80LXRgNC10L3QuNC5ICcgK1xuICAn0YLQuNC/0YDQsNC30LzQtdGJ0LXQvdC40Y/RgNC10LrQstC40LfQuNGC0L7QstC40LfQvNC10YDQtdC90LjQuSDRgtC40L/RgNCw0LzQutC40Y3Qu9C10LzQtdC90YLQsNGD0L/RgNCw0LLQu9C10L3QuNGPINGC0LjQv9GB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0YHQstGP0LfQuNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50L/QvtGB0LXRgNC40Y/QvNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GC0L7Rh9C10LrQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/RgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDRgtC40L/RgdGC0L7RgNC+0L3Ri9GN0LvQtdC80LXQvdGC0LDQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/RhNC+0YDQvNGL0L7RgtGH0LXRgtCwINGC0LjQv9GI0LrQsNC70YvRgNCw0LTQsNGA0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YTQsNC60YLQvtGA0LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRhNC40LPRg9GA0LDQutC90L7Qv9C60Lgg0YTQuNCz0YPRgNGL0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YTQuNC60YHQsNGG0LjRj9Cy0YLQsNCx0LvQuNGG0LUg0YTQvtGA0LzQsNGC0LTQvdGP0YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4ICcgK1xuICAn0YTQvtGA0LzQsNGC0LrQsNGA0YLQuNC90LrQuCDRiNC40YDQuNC90LDQv9C+0LTRh9C40L3QtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YTQvtGA0LzRiyAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC/0YDQuNC60LvQsNC00L3Ri9GFINC+0LHRitC10LrRgtC+0LIgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb2JqZWN0c19wcm9wZXJ0aWVzID1cbiAgJ9Cy0LjQtNC00LLQuNC20LXQvdC40Y/QsdGD0YXQs9Cw0LvRgtC10YDQuNC4INCy0LjQtNC00LLQuNC20LXQvdC40Y/QvdCw0LrQvtC/0LvQtdC90LjRjyDQstC40LTQv9C10YDQuNC+0LTQsNGA0LXQs9C40YHRgtGA0LDRgNCw0YHRh9C10YLQsCDQstC40LTRgdGH0LXRgtCwINCy0LjQtNGC0L7Rh9C60LjQvNCw0YDRiNGA0YPRgtCw0LHQuNC30L3QtdGB0L/RgNC+0YbQtdGB0YHQsCAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCz0YDRg9C/0L/QuNGN0LvQtdC80LXQvdGC0L7QsiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQttC40LzQsNC/0YDQvtCy0LXQtNC10L3QuNGPICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdGA0LXQt9CwINC/0LXRgNC40L7QtNC40YfQvdC+0YHRgtGM0LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDRgNC10LbQuNC80LDQstGC0L7QstGA0LXQvNGPINGA0LXQttC40LzQt9Cw0L/QuNGB0LjQtNC+0LrRg9C80LXQvdGC0LAg0YDQtdC20LjQvNC/0YDQvtCy0LXQtNC10L3QuNGP0LTQvtC60YPQvNC10L3RgtCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90Ysg0L7QsdC80LXQvdCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2V4Y2hhbmdlX3BsYW5zID1cbiAgJ9Cw0LLRgtC+0YDQtdCz0LjRgdGC0YDQsNGG0LjRj9C40LfQvNC10L3QtdC90LjQuSDQtNC+0L/Rg9GB0YLQuNC80YvQudC90L7QvNC10YDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7RgtC/0YDQsNCy0LrQsNGN0LvQtdC80LXQvdGC0LDQtNCw0L3QvdGL0YUg0L/QvtC70YPRh9C10L3QuNC10Y3Qu9C10LzQtdC90YLQsNC00LDQvdC90YvRhSAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgtCw0LHQu9C40YfQvdGL0Lkg0LTQvtC60YPQvNC10L3RgiA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc190YWJ1bGFyX2RvY3VtZW50ID1cbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINC+0YDQuNC10L3RgtCw0YbQuNGP0YHRgtGA0LDQvdC40YbRiyDQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLQutC+0LvQvtC90L7QutGB0LLQvtC00L3QvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLRgdGC0YDQvtC60YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L7QutCw0YDRgtC40L3QutC4INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC30LDQs9C+0LvQvtCy0LrQsNCz0YDRg9C/0L/QuNGA0L7QstC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0L/QvtGB0L7QsdGH0YLQtdC90LjRj9C30L3QsNGH0LXQvdC40LnRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QtNCy0YPRgdGC0L7RgNC+0L3QvdC10LnQv9C10YfQsNGC0Lgg0YLQuNC/0LfQsNC/0L7Qu9C90LXQvdC40Y/QvtCx0LvQsNGB0YLQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwICcgK1xuICAn0YLQuNC/0LrRg9GA0YHQvtGA0L7QstGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRgNC40YHRg9C90LrQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRj9GH0LXQudC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GC0LjQv9C90LDQv9GA0LDQstC70LXQvdC40Y/Qv9C10YDQtdGF0L7QtNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/Qu9C40L3QuNC50YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyAnICtcbiAgJ9GC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0YLQtdC60YHRgtCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/RgdC80LXRidC10L3QuNGP0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJyArXG4gICfRgtC40L/Rg9C30L7RgNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YTQsNC50LvQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0L7Rh9C90L7RgdGC0YzQv9C10YfQsNGC0Lgg0YfQtdGA0LXQtNC+0LLQsNC90LjQtdGA0LDRgdC/0L7Qu9C+0LbQtdC90LjRj9GB0YLRgNCw0L3QuNGGICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90LjRgNC+0LLRidC40LogPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfc2hlZHVsZXIgPVxuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCy0YDQtdC80LXQvdC40Y3Qu9C10LzQtdC90YLQvtCy0L/Qu9Cw0L3QuNGA0L7QstGJ0LjQutCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQuSDQtNC+0LrRg9C80LXQvdGCID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2Zvcm1hdHRlZF9kb2N1bWVudCA9XG4gICfRgtC40L/RhNCw0LnQu9Cw0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LfQsNC/0YDQvtGBID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3F1ZXJ5ID1cbiAgJ9C+0LHRhdC+0LTRgNC10LfRg9C70YzRgtCw0YLQsNC30LDQv9GA0L7RgdCwINGC0LjQv9C30LDQv9C40YHQuNC30LDQv9GA0L7RgdCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7RgdGC0YDQvtC40YLQtdC70Ywg0L7RgtGH0LXRgtCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3JlcG9ydF9idWlsZGVyID1cbiAgJ9Cy0LjQtNC30LDQv9C+0LvQvdC10L3QuNGP0YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC/0L7RgdGC0YDQvtC40YLQtdC70Y/QvtGC0YfQtdGC0LAg0YLQuNC/0LTQvtCx0LDQstC70LXQvdC40Y/Qv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0L7RgtGH0LXRgtCwINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjRgtC+0LPQvtCyICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQsdC+0YLQsCDRgSDRhNCw0LnQu9Cw0LzQuCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19maWxlcyA9XG4gICfQtNC+0YHRgtGD0L/QutGE0LDQudC70YMg0YDQtdC20LjQvNC00LjQsNC70L7Qs9Cw0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9GE0LDQudC70LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0L/QvtGB0YLRgNC+0LjRgtC10LvRjCDQt9Cw0L/RgNC+0YHQsCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19xdWVyeV9idWlsZGVyID1cbiAgJ9GC0LjQv9C40LfQvNC10YDQtdC90LjRj9C/0L7RgdGC0YDQvtC40YLQtdC70Y/Qt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQsNC90LDQu9C40Lcg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfYW5hbHlzaXMgPVxuICAn0LLQuNC00LTQsNC90L3Ri9GF0LDQvdCw0LvQuNC30LAg0LzQtdGC0L7QtNC60LvQsNGB0YLQtdGA0LjQt9Cw0YbQuNC4INGC0LjQv9C10LTQuNC90LjRhtGL0LjQvdGC0LXRgNCy0LDQu9Cw0LLRgNC10LzQtdC90LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/Qt9Cw0L/QvtC70L3QtdC90LjRj9GC0LDQsdC70LjRhtGL0YDQtdC30YPQu9GM0YLQsNGC0LDQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YfQuNGB0LvQvtCy0YvRhdC30L3QsNGH0LXQvdC40LnQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/QuNGB0YLQvtGH0L3QuNC60LDQtNCw0L3QvdGL0YXQv9C+0LjRgdC60LDQsNGB0YHQvtGG0LjQsNGG0LjQuSDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LTQtdGA0LXQstC+0YDQtdGI0LXQvdC40LkgJyArXG4gICfRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LrQu9Cw0YHRgtC10YDQuNC30LDRhtC40Y8g0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC+0LHRidCw0Y/RgdGC0LDRgtC40YHRgtC40LrQsCDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0L/QvtC40YHQutCw0YHRgdC+0YbQuNCw0YbQuNC5ICcgK1xuICAn0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC/0L7QuNGB0LrQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQuSDRgtC40L/QutC+0LvQvtC90LrQuNC80L7QtNC10LvQuNC/0YDQvtCz0L3QvtC30LAg0YLQuNC/0LzQtdGA0YvRgNCw0YHRgdGC0L7Rj9C90LjRj9Cw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L7RgtGB0LXRh9C10L3QuNGP0L/RgNCw0LLQuNC70LDRgdGB0L7RhtC40LDRhtC40Lgg0YLQuNC/0L/QvtC70Y/QsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/RgdGC0LDQvdC00LDRgNGC0LjQt9Cw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9C+0YDRj9C00L7Rh9C40LLQsNC90LjRj9C/0YDQsNCy0LjQu9Cw0YHRgdC+0YbQuNCw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfRgtC40L/Rg9C/0L7RgNGP0LTQvtGH0LjQstCw0L3QuNGP0YjQsNCx0LvQvtC90L7QstC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC50LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9GA0L7RidC10L3QuNGP0LTQtdGA0LXQstCw0YDQtdGI0LXQvdC40LkgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0geG1sLCBqc29uLCB4cywgZG9tLCB4ZHRvLCB3ZWIt0YHQtdGA0LLQuNGB0YsgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfeG1sX2pzb25feHNfZG9tX3hkdG9fd3MgPVxuICAnd3PQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QsNGA0LDQvNC10YLRgNCwINCy0LDRgNC40LDQvdGCeHBhdGh4cyDQstCw0YDQuNCw0L3RgtC30LDQv9C40YHQuNC00LDRgtGLanNvbiDQstCw0YDQuNCw0L3RgtC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINCy0LjQtNCz0YDRg9C/0L/Ri9C80L7QtNC10LvQuHhzINCy0LjQtNGE0LDRgdC10YLQsHhkdG8gJyArXG4gICfQtNC10LnRgdGC0LLQuNC10L/QvtGB0YLRgNC+0LjRgtC10LvRj2RvbSDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHQvtGB0YLQsNCy0L3QvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHRhdC10LzRi3hzINC30LDQv9GA0LXRidC10L3QvdGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMgJyArXG4gICfQuNGB0LrQu9GO0YfQtdC90LjRj9Cz0YDRg9C/0L/Qv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0LrQsNGC0LXQs9C+0YDQuNGP0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/QsNGC0YDQuNCx0YPRgtCweHMg0LrQsNGC0LXQs9C+0YDQuNGP0L7Qs9GA0LDQvdC40YfQtdC90LjRj9C40LTQtdC90YLQuNGH0L3QvtGB0YLQuHhzINC60LDRgtC10LPQvtGA0LjRj9C+0LPRgNCw0L3QuNGH0LXQvdC40Y/Qv9GA0L7RgdGC0YDQsNC90YHRgtCy0LjQvNC10L14cyAnICtcbiAgJ9C80LXRgtC+0LTQvdCw0YHQu9C10LTQvtCy0LDQvdC40Y94cyDQvNC+0LTQtdC70YzRgdC+0LTQtdGA0LbQuNC80L7Qs9C+eHMg0L3QsNC30L3QsNGH0LXQvdC40LXRgtC40L/QsHhtbCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0L7QsdGA0LDQsdC+0YLQutCw0L/RgNC+0LHQtdC70YzQvdGL0YXRgdC40LzQstC+0LvQvtCyeHMg0L7QsdGA0LDQsdC+0YLQutCw0YHQvtC00LXRgNC20LjQvNC+0LPQvnhzICcgK1xuICAn0L7Qs9GA0LDQvdC40YfQtdC90LjQtdC30L3QsNGH0LXQvdC40Y94cyDQv9Cw0YDQsNC80LXRgtGA0YvQvtGC0LHQvtGA0LDRg9C30LvQvtCyZG9tINC/0LXRgNC10L3QvtGB0YHRgtGA0L7Qumpzb24g0L/QvtC30LjRhtC40Y/QstC00L7QutGD0LzQtdC90YLQtWRvbSDQv9GA0L7QsdC10LvRjNC90YvQtdGB0LjQvNCy0L7Qu9GLeG1sINGC0LjQv9Cw0YLRgNC40LHRg9GC0LB4bWwg0YLQuNC/0LfQvdCw0YfQtdC90LjRj2pzb24gJyArXG4gICfRgtC40L/QutCw0L3QvtC90LjRh9C10YHQutC+0LPQvnhtbCDRgtC40L/QutC+0LzQv9C+0L3QtdC90YLRi3hzINGC0LjQv9C/0YDQvtCy0LXRgNC60Lh4bWwg0YLQuNC/0YDQtdC30YPQu9GM0YLQsNGC0LBkb214cGF0aCDRgtC40L/Rg9C30LvQsGRvbSDRgtC40L/Rg9C30LvQsHhtbCDRhNC+0YDQvNCweG1sINGE0L7RgNC80LDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj3hzICcgK1xuICAn0YTQvtGA0LzQsNGC0LTQsNGC0Ytqc29uINGN0LrRgNCw0L3QuNGA0L7QstCw0L3QuNC10YHQuNC80LLQvtC70L7Qsmpzb24gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0YHQuNGB0YLQtdC80LAg0LrQvtC80L/QvtC90L7QstC60Lgg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtID1cbiAgJ9Cy0LjQtNGB0YDQsNCy0L3QtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LXQudGB0YLQstC40LXQvtCx0YDQsNCx0L7RgtC60LjRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdGB0L7RgNGC0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQstC70L7QttC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC40YLQvtCz0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdCz0YDRg9C/0L/QuNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC/0L7Qu9C10LnQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10L/QvtC70Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXRgNC10LrQstC40LfQuNGC0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cx0YPRhdCz0LDQu9GC0LXRgNGB0LrQvtCz0L7QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cy0YvQstC+0LTQsNGC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cz0YDRg9C/0L/Ri9GN0LvQtdC80LXQvdGC0L7QstC+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C30LDQs9C+0LvQvtCy0LrQsNC/0L7Qu9C10LnQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvNCw0LrQtdGC0LDQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LzQsNC60LXRgtCw0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9GC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GB0LLRj9C30LjQvdCw0LHQvtGA0L7QstC00LDQvdC90YvRhdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GN0LvQtdC80LXQvdGC0LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LvQtdCz0LXQvdC00YvQtNC40LDQs9GA0LDQvNC80YvQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/Qv9GA0LjQvNC10L3QtdC90LjRj9C+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQvtGB0YLQvtGP0L3QuNC10Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGB0L/QvtGB0L7QsdCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNC10LbQuNC80LrQvtC80L/QvtC90L7QstC60LjRgNC10LfRg9C70YzRgtCw0YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC/0LDRgNCw0LzQtdGC0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCw0LLRgtC+0L/QvtC30LjRhtC40Y/RgNC10YHRg9GA0YHQvtCy0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJytcbiAgJ9Cy0LDRgNC40LDQvdGC0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstCy0LTQuNCw0LPRgNCw0LzQvNC10LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YTQuNC60YHQsNGG0LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRg9GB0LvQvtCy0L3QvtCz0L7QvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7Rh9GC0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfZW1haWwgPVxuICAn0LLQsNC20L3QvtGB0YLRjNC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsdGA0LDQsdC+0YLQutCw0YLQtdC60YHRgtCw0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtCy0LvQvtC20LXQvdC40Y8gJyArXG4gICfRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0L3QtWFzY2lp0YHQuNC80LLQvtC70L7QstC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0YLQuNC/0YLQtdC60YHRgtCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINC/0YDQvtGC0L7QutC+0LvQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLRiyAnICtcbiAgJ9GB0YLQsNGC0YPRgdGA0LDQt9Cx0L7RgNCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC20YPRgNC90LDQuyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgPVxuICAn0YDQtdC20LjQvNGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGB0YLQsNGC0YPRgdGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGD0YDQvtCy0LXQvdGM0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC60YDQuNC/0YLQvtCz0YDQsNGE0LjRjyA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19jcnlwdG9ncmFwaHkgPVxuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGA0LXQttC40LzQstC60LvRjtGH0LXQvdC40Y/RgdC10YDRgtC40YTQuNC60LDRgtC+0LLQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Lgg0YDQtdC20LjQvNC/0YDQvtCy0LXRgNC60LjRgdC10YDRgtC40YTQuNC60LDRgtCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICcgK1xuICAn0YLQuNC/0YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFpJUCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc196aXAgPVxuICAn0LrQvtC00LjRgNC+0LLQutCw0LjQvNC10L3RhNCw0LnQu9C+0LLQsnppcNGE0LDQudC70LUg0LzQtdGC0L7QtNGB0LbQsNGC0LjRj3ppcCDQvNC10YLQvtC00YjQuNGE0YDQvtCy0LDQvdC40Y96aXAg0YDQtdC20LjQvNCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/Qv9GD0YLQtdC50YTQsNC50LvQvtCyemlwINGA0LXQttC40LzQvtCx0YDQsNCx0L7RgtC60LjQv9C+0LTQutCw0YLQsNC70L7Qs9C+0LJ6aXAgJyArXG4gICfRgNC10LbQuNC80YHQvtGF0YDQsNC90LXQvdC40Y/Qv9GD0YLQtdC5emlwINGD0YDQvtCy0LXQvdGM0YHQttCw0YLQuNGPemlwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFxuICAvLyDQkdC70L7QutC40YDQvtCy0LrQsCDQtNCw0L3QvdGL0YUsINCk0L7QvdC+0LLRi9C1INC30LDQtNCw0L3QuNGPLCDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdC+0LUg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNC1LFxuICAvLyDQlNC+0YHRgtCw0LLQu9GP0LXQvNGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjywg0JLRgdGC0YDQvtC10L3QvdGL0LUg0L/QvtC60YPQv9C60LgsINCY0L3RgtC10YDQvdC10YIsINCg0LDQsdC+0YLQsCDRgSDQtNCy0L7QuNGH0L3Ri9C80Lgg0LTQsNC90L3Ri9C80LggPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb3RoZXIgPVxuICAn0LfQstGD0LrQvtCy0L7QtdC+0L/QvtCy0LXRidC10L3QuNC1INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdGF0L7QtNCw0LrRgdGC0YDQvtC60LUg0L/QvtC30LjRhtC40Y/QstC/0L7RgtC+0LrQtSDQv9C+0YDRj9C00L7QutCx0LDQudGC0L7QsiDRgNC10LbQuNC80LHQu9C+0LrQuNGA0L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhSAnICtcbiAgJ9GB0LXRgNCy0LjRgdCy0YHRgtGA0L7QtdC90L3Ri9GF0L/QvtC60YPQv9C+0Log0YHQvtGB0YLQvtGP0L3QuNC10YTQvtC90L7QstC+0LPQvtC30LDQtNCw0L3QuNGPINGC0LjQv9C/0L7QtNC/0LjRgdGH0LjQutCw0LTQvtGB0YLQsNCy0LvRj9C10LzRi9GF0YPQstC10LTQvtC80LvQtdC90LjQuSDRg9GA0L7QstC10L3RjNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LfQsNGJ0LjRidC10L3QvdC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPZnRwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGB0YXQtdC80LAg0LfQsNC/0YDQvtGB0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcmVxdWVzdF9zY2hlbWEgPVxuICAn0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0L7RgNGP0LTQutCw0YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQvNC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C60L7QvdGC0YDQvtC70YzQvdC+0LnRgtC+0YfQutC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C+0LHRitC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAgJyArXG4gICfRgtC40L/Qv9Cw0YDQsNC80LXRgtGA0LDQtNC+0YHRgtGD0L/QvdC+0LnRgtCw0LHQu9C40YbRi9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC+0LHRitC10LrRgtC+0LIg0LzQtdGC0LDQtNCw0L3QvdGL0YUgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcHJvcGVydGllc19vZl9tZXRhZGF0YV9vYmplY3RzID1cbiAgJ2h0dHDQvNC10YLQvtC0INCw0LLRgtC+0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LDQstGC0L7Qv9GA0LXRhNC40LrRgdC90L7QvNC10YDQsNC30LDQtNCw0YfQuCDQstCw0YDQuNCw0L3RgtCy0YHRgtGA0L7QtdC90L3QvtCz0L7Rj9C30YvQutCwINCy0LjQtNC40LXRgNCw0YDRhdC40Lgg0LLQuNC00YDQtdCz0LjRgdGC0YDQsNC90LDQutC+0L/Qu9C10L3QuNGPICcgK1xuICAn0LLQuNC00YLQsNCx0LvQuNGG0YvQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNC00LLQuNC20LXQvdC40LnQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQt9Cw0L/QvtC70L3QtdC90LjQtdC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUgJyArXG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0LDQt9GL0L/Qu9Cw0L3QsNCy0LjQtNC+0LLRgNCw0YHRh9C10YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0YvRgdGC0YDQvtCz0L7QstGL0LHQvtGA0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LTRh9C40L3QtdC90LjRjyAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNC30LTQtdC70Y/QtdC80YvRhdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQutCy0LjQt9C40YLQsCAnICtcbiAgJ9C90LDQt9C90LDRh9C10L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0LfQvdCw0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdC00LDRh9C4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUgJyArXG4gICfQvtC/0LXRgNCw0YLQuNCy0L3QvtC10L/RgNC+0LLQtdC00LXQvdC40LUg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LLQuNC00LDRgNCw0YHRh9C10YLQsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQstC40LTQsNGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LfQsNC00LDRh9C4ICcgK1xuICAn0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/Qu9Cw0L3QsNC+0LHQvNC10L3QsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRgdC/0YDQsNCy0L7Rh9C90LjQutCwINC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGB0YfQtdGC0LAg0L/QtdGA0LXQvNC10YnQtdC90LjQtdCz0YDQsNC90LjRhtGL0L/RgNC40L/RgNC+0LLQtdC00LXQvdC40LggJyArXG4gICfQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNC90L7QvNC10YDQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzQvdC+0LzQtdGA0LDQtNC+0LrRg9C80LXQvdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YHQstC10LTQtdC90LjQuSAnICtcbiAgJ9C/0L7QstGC0L7RgNC90L7QtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLQvtC30LLRgNCw0YnQsNC10LzRi9GF0LfQvdCw0YfQtdC90LjQuSDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQutC/0YDQuNCy0LLQvtC00LXQv9C+0YHRgtGA0L7QutC1INC/0YDQuNC90LDQtNC70LXQttC90L7RgdGC0YzQvtCx0YrQtdC60YLQsCDQv9GA0L7QstC10LTQtdC90LjQtSAnICtcbiAgJ9GA0LDQt9C00LXQu9C10L3QuNC10LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuNC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwICcrXG4gICfRgNC10LbQuNC80LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40LjQvtCx0YrQtdC60YLQvtCyINGA0LXQttC40LzQt9Cw0L/QuNGB0LjRgNC10LPQuNGB0YLRgNCwINGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C80L7QtNCw0LvRjNC90L7RgdGC0LggJyArXG4gICfRgNC10LbQuNC80LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC40L3RhdGA0L7QvdC90YvRhdCy0YvQt9C+0LLQvtCy0YDQsNGB0YjQuNGA0LXQvdC40LnQv9C70LDRgtGE0L7RgNC80YvQuNCy0L3QtdGI0L3QuNGF0LrQvtC80L/QvtC90LXQvdGCINGA0LXQttC40LzQv9C+0LLRgtC+0YDQvdC+0LPQvtC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YHQtdCw0L3RgdC+0LIgJyArXG4gICfRgNC10LbQuNC80L/QvtC70YPRh9C10L3QuNGP0LTQsNC90L3Ri9GF0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YDQtdC20LjQvNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LXQttC40LzRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuNC40L3RgtC10YDRhNC10LnRgdCwICcgK1xuICAn0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhdC/0L7Rg9C80L7Qu9GH0LDQvdC40Y4g0YHQtdGA0LjQuNC60L7QtNC+0LLQv9C70LDQvdCw0LLQuNC00L7QstGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INGB0LXRgNC40LjQutC+0LTQvtCy0L/Qu9Cw0L3QsNGB0YfQtdGC0L7QsiAnICtcbiAgJ9GB0LXRgNC40LjQutC+0LTQvtCy0YHQv9GA0LDQstC+0YfQvdC40LrQsCDRgdC+0LfQtNCw0L3QuNC10L/RgNC40LLQstC+0LTQtSDRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LAg0YHQv9C+0YHQvtCx0L/QvtC40YHQutCw0YHRgtGA0L7QutC40L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YHQv9C+0YHQvtCx0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyAnICtcbiAgJ9GC0LjQv9C00LDQvdC90YvRhdGC0LDQsdC70LjRhtGL0LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgtC40L/QutC+0LTQsNC/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0YLQuNC/0LrQvtC00LDRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGC0LjQv9C80LDQutC10YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQsdC40LfQvdC10YHQv9GA0L7RhtC10YHRgdCwICcgK1xuICAn0YLQuNC/0L3QvtC80LXRgNCw0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C90L7QvNC10YDQsNC30LDQtNCw0YfQuCDRgtC40L/RhNC+0YDQvNGLINGD0LTQsNC70LXQvdC40LXQtNCy0LjQttC10L3QuNC5ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQt9C90YvQtSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kaWZmZXJlbnRzID1cbiAgJ9Cy0LDQttC90L7RgdGC0YzQv9GA0L7QsdC70LXQvNGL0L/RgNC40LzQtdC90LXQvdC40Y/RgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQstCw0YDQuNCw0L3RgtC40L3RgtC10YDRhNC10LnRgdCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINCy0LDRgNC40LDQvdGC0LzQsNGB0YjRgtCw0LHQsNGE0L7RgNC80LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPICcgK1xuICAn0LLQsNGA0LjQsNC90YLQvtGB0L3QvtCy0L3QvtCz0L7RiNGA0LjRhNGC0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0LLQsNGA0LjQsNC90YLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7Qv9C10YDQuNC+0LTQsCDQstCw0YDQuNCw0L3RgtGB0YLQsNC90LTQsNGA0YLQvdC+0LnQtNCw0YLRi9C90LDRh9Cw0LvQsCDQstC40LTQs9GA0LDQvdC40YbRiyDQstC40LTQutCw0YDRgtC40L3QutC4ICcgK1xuICAn0LLQuNC00L7RgtC+0LHRgNCw0LbQtdC90LjRj9C/0L7Qu9C90L7RgtC10LrRgdGC0L7QstC+0LPQvtC/0L7QuNGB0LrQsCDQstC40LTRgNCw0LzQutC4INCy0LjQtNGB0YDQsNCy0L3QtdC90LjRjyDQstC40LTRhtCy0LXRgtCwINCy0LjQtNGH0LjRgdC70L7QstC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0LLQuNC00YjRgNC40YTRgtCwINC00L7Qv9GD0YHRgtC40LzQsNGP0LTQu9C40L3QsCDQtNC+0L/Rg9GB0YLQuNC80YvQudC30L3QsNC6ICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LVieXRlb3JkZXJtYXJrINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LzQtdGC0LDQtNCw0L3QvdGL0YXQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0LjRgdGC0L7Rh9C90LjQutGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC60LvQsNCy0LjRiNCwINC60L7QtNCy0L7Qt9Cy0YDQsNGC0LDQtNC40LDQu9C+0LPQsCAnICtcbiAgJ9C60L7QtNC40YDQvtCy0LrQsHhiYXNlINC60L7QtNC40YDQvtCy0LrQsNGC0LXQutGB0YLQsCDQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QvtC40YHQutCwINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuCDQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GFINC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC40LjQt9C80LXQvdC10L3QuNC40LTQsNC90L3Ri9GFICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNGA0LDQt9C00LXQu9C+0LIg0L/RgNC+0LLQtdGA0LrQsNC30LDQv9C+0LvQvdC10L3QuNGPINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0L7Qv9GA0L7RgSDRgNC10LbQuNC80LfQsNC/0YPRgdC60LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0LrRgNGD0LPQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQvtGA0LzQv9GA0LjQu9C+0LbQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0YHQutC+0YDQvtGB0YLRjNC60LvQuNC10L3RgtGB0LrQvtCz0L7RgdC+0LXQtNC40L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40LXQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINGB0L7RgdGC0L7Rj9C90LjQtdC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LDRgdC10YDRgtC40YTQuNC60LDRgtCwd2luZG93cyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0YHRgtGA0L7QutC4INGB0YLQsNGC0YPRgdGB0L7QvtCx0YnQtdC90LjRjyDRgtC40L/QstC90LXRiNC90LXQudC60L7QvNC/0L7QvdC10L3RgtGLINGC0LjQv9C/0LvQsNGC0YTQvtGA0LzRiyDRgtC40L/Qv9C+0LLQtdC00LXQvdC40Y/QutC70LDQstC40YjQuGVudGVyICcgK1xuICAn0YLQuNC/0Y3Qu9C10LzQtdC90YLQsNC40L3RhNC+0YDQvNCw0YbQuNC40L7QstGL0L/QvtC70L3QtdC90LjQuNC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUg0YPRgNC+0LLQtdC90YzQuNC30L7Qu9GP0YbQuNC40YLRgNCw0L3Qt9Cw0LrRhtC40Lkg0YXQtdGI0YTRg9C90LrRhtC40Y8g0YfQsNGB0YLQuNC00LDRgtGLJztcblxuICAvLyBjbGFzczog0LLRgdGC0YDQvtC10L3QvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LksINGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gKNGB0L7QtNC10YDQttCw0YIg0LTQvtGH0LXRgNC90LjQtSDQt9C90LDRh9C10L3QuNGPLCDQvtCx0YDQsNGJ0LXQvdC40Y8g0Log0LrQvtGC0L7RgNGL0Lwg0YfQtdGA0LXQtyDRgNCw0LfRi9C80LXQvdC+0LLQsNC90LjQtSlcbiAgdmFyIENMQVNTID1cbiAgdjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzICtcbiAgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSArXG4gIHY4X3N5c3RlbV9lbnVtc19vYmplY3RzX3Byb3BlcnRpZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZXhjaGFuZ2VfcGxhbnMgK1xuICB2OF9zeXN0ZW1fZW51bXNfdGFidWxhcl9kb2N1bWVudCArXG4gIHY4X3N5c3RlbV9lbnVtc19zaGVkdWxlciArXG4gIHY4X3N5c3RlbV9lbnVtc19mb3JtYXR0ZWRfZG9jdW1lbnQgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnkgK1xuICB2OF9zeXN0ZW1fZW51bXNfcmVwb3J0X2J1aWxkZXIgK1xuICB2OF9zeXN0ZW1fZW51bXNfZmlsZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnlfYnVpbGRlciArXG4gIHY4X3N5c3RlbV9lbnVtc19kYXRhX2FuYWx5c2lzICtcbiAgdjhfc3lzdGVtX2VudW1zX3htbF9qc29uX3hzX2RvbV94ZHRvX3dzICtcbiAgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtICtcbiAgdjhfc3lzdGVtX2VudW1zX2VtYWlsICtcbiAgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgK1xuICB2OF9zeXN0ZW1fZW51bXNfY3J5cHRvZ3JhcGh5ICtcbiAgdjhfc3lzdGVtX2VudW1zX3ppcCArXG4gIHY4X3N5c3RlbV9lbnVtc19vdGhlciArXG4gIHY4X3N5c3RlbV9lbnVtc19yZXF1ZXN0X3NjaGVtYSArXG4gIHY4X3N5c3RlbV9lbnVtc19wcm9wZXJ0aWVzX29mX21ldGFkYXRhX29iamVjdHMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZGlmZmVyZW50cztcblxuICAvLyB2OCDQvtCx0YnQuNC1INC+0LHRitC10LrRgtGLICjRgyDQvtCx0YrQtdC60YLQvtCyINC10YHRgtGMINC60L7QvdGB0YLRgNGD0LrRgtC+0YAsINGN0LrQt9C10LzQv9C70Y/RgNGLINGB0L7Qt9C00LDRjtGC0YHRjyDQvNC10YLQvtC00L7QvCDQndCe0JLQq9CZKSA9PT4gdHlwZVxuICB2YXIgdjhfc2hhcmVkX29iamVjdCA9XG4gICdjb23QvtCx0YrQtdC60YIgZnRw0YHQvtC10LTQuNC90LXQvdC40LUgaHR0cNC30LDQv9GA0L7RgSBodHRw0YHQtdGA0LLQuNGB0L7RgtCy0LXRgiBodHRw0YHQvtC10LTQuNC90LXQvdC40LUgd3PQvtC/0YDQtdC00LXQu9C10L3QuNGPIHdz0L/RgNC+0LrRgdC4IHhiYXNlINCw0L3QsNC70LjQt9C00LDQvdC90YvRhSDQsNC90L3QvtGC0LDRhtC40Y94cyAnICtcbiAgJ9Cx0LvQvtC60LjRgNC+0LLQutCw0LTQsNC90L3Ri9GFINCx0YPRhNC10YDQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINCy0LrQu9GO0YfQtdC90LjQtXhzINCy0YvRgNCw0LbQtdC90LjQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCz0LXQvdC10YDQsNGC0L7RgNGB0LvRg9GH0LDQudC90YvRhdGH0LjRgdC10Lsg0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAgJyArXG4gICfQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC10LrQvtC+0YDQtNC40L3QsNGC0Ysg0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAg0LPRgNGD0L/Qv9Cw0LzQvtC00LXQu9C4eHMg0LTQsNC90L3Ri9C10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LLQvtC40YfQvdGL0LXQtNCw0L3QvdGL0LUg0LTQtdC90LTRgNC+0LPRgNCw0LzQvNCwICcgK1xuICAn0LTQuNCw0LPRgNCw0LzQvNCwINC00LjQsNCz0YDQsNC80LzQsNCz0LDQvdGC0LAg0LTQuNCw0LvQvtCz0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDQtNC40LDQu9C+0LPQstGL0LHQvtGA0LDRhtCy0LXRgtCwINC00LjQsNC70L7Qs9Cy0YvQsdC+0YDQsNGI0YDQuNGE0YLQsCDQtNC40LDQu9C+0LPRgNCw0YHQv9C40YHQsNC90LjRj9GA0LXQs9C70LDQvNC10L3RgtC90L7Qs9C+0LfQsNC00LDQvdC40Y8gJyArXG4gICfQtNC40LDQu9C+0LPRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0L/QtdGA0LjQvtC00LAg0LTQuNCw0L/QsNC30L7QvSDQtNC+0LrRg9C80LXQvdGCZG9tINC00L7QutGD0LzQtdC90YJodG1sINC00L7QutGD0LzQtdC90YLQsNGG0LjRj3hzINC00L7RgdGC0LDQstC70Y/QtdC80L7QtdGD0LLQtdC00L7QvNC70LXQvdC40LUgJyArXG4gICfQt9Cw0L/QuNGB0Yxkb20g0LfQsNC/0LjRgdGMZmFzdGluZm9zZXQg0LfQsNC/0LjRgdGMaHRtbCDQt9Cw0L/QuNGB0Yxqc29uINC30LDQv9C40YHRjHhtbCDQt9Cw0L/QuNGB0Yx6aXDRhNCw0LnQu9CwINC30LDQv9C40YHRjNC00LDQvdC90YvRhSDQt9Cw0L/QuNGB0YzRgtC10LrRgdGC0LAg0LfQsNC/0LjRgdGM0YPQt9C70L7QsmRvbSAnICtcbiAgJ9C30LDQv9GA0L7RgSDQt9Cw0YnQuNGJ0LXQvdC90L7QtdGB0L7QtdC00LjQvdC10L3QuNC1b3BlbnNzbCDQt9C90LDRh9C10L3QuNGP0L/QvtC70LXQudGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQuNC30LLQu9C10YfQtdC90LjQtdGC0LXQutGB0YLQsCDQuNC80L/QvtGA0YJ4cyDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQsCAnICtcbiAgJ9C40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtC10YHQvtC+0LHRidC10L3QuNC1INC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLRi9C50L/RgNC+0YTQuNC70Ywg0LjQvdGC0LXRgNC90LXRgtC/0YDQvtC60YHQuCDQuNC90YLQtdGA0L3QtdGC0YHQvtC10LTQuNC90LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Y/QtNC70Y/Qv9GA0LjQu9C+0LbQtdC90LjRj3hzICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsNGC0YDQuNCx0YPRgtCweHMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQuNGB0YLQvtGH0L3QuNC60LTQvtGB0YLRg9C/0L3Ri9GF0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgtC10YDQsNGC0L7RgNGD0LfQu9C+0LJkb20g0LrQsNGA0YLQuNC90LrQsCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9C00LDRgtGLINC60LLQsNC70LjRhNC40LrQsNGC0L7RgNGL0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GB0YLRgNC+0LrQuCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GH0LjRgdC70LAgJyArXG4gICfQutC+0LzQv9C+0L3QvtCy0YnQuNC60LzQsNC60LXRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC80L/QvtC90L7QstGJ0LjQutC90LDRgdGC0YDQvtC10LrQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LzQsNC60LXRgtCw0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C60L7QvdGB0YLRgNGD0LrRgtC+0YDQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNGE0L7RgNC80LDRgtC90L7QudGB0YLRgNC+0LrQuCDQu9C40L3QuNGPINC80LDQutC10YLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvNCw0LrQtdGC0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDRgdC60LB4cyDQvNC10L3QtdC00LbQtdGA0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INC90LDQsdC+0YDRgdGF0LXQvHhtbCDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvdCw0YHRgtGA0L7QudC60LjRgdC10YDQuNCw0LvQuNC30LDRhtC40Lhqc29uICcgK1xuICAn0L7QsdGA0LDQsdC+0YLQutCw0LrQsNGA0YLQuNC90L7QuiDQvtCx0YDQsNCx0L7RgtC60LDRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L7QsdGF0L7QtNC00LXRgNC10LLQsGRvbSDQvtCx0YrRj9Cy0LvQtdC90LjQtdCw0YLRgNC40LHRg9GC0LB4cyDQvtCx0YrRj9Cy0LvQtdC90LjQtdC90L7RgtCw0YbQuNC4eHMgJyArXG4gICfQvtCx0YrRj9Cy0LvQtdC90LjQtdGN0LvQtdC80LXQvdGC0LB4cyDQvtC/0LjRgdCw0L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC+0LHRi9GC0LjRj9C00L7RgdGC0YPQv9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0L7RgtC60LDQt9Cy0LTQvtGB0YLRg9C/0LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Qv9C40YHQsNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuNGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQv9C10YDQtdC00LDQstCw0LXQvNC+0LPQvtGE0LDQudC70LAg0L7Qv9C40YHQsNC90LjQtdGC0LjQv9C+0LIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdCz0YDRg9C/0L/Ri9Cw0YLRgNC40LHRg9GC0L7QsnhzINC+0L/RgNC10LTQtdC70LXQvdC40LXQs9GA0YPQv9C/0YvQvNC+0LTQtdC70Lh4cyAnICtcbiAgJ9C+0L/RgNC10LTQtdC70LXQvdC40LXQvtCz0YDQsNC90LjRh9C10L3QuNGP0LjQtNC10L3RgtC40YfQvdC+0YHRgtC4eHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC+0L/RgNC10LTQtdC70LXQvdC40LXRgdC+0YHRgtCw0LLQvdC+0LPQvtGC0LjQv9CweHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdGC0LjQv9Cw0LTQvtC60YPQvNC10L3RgtCwZG9tICcgK1xuICAn0L7Qv9GA0LXQtNC10LvQtdC90LjRj3hwYXRoeHMg0L7RgtCx0L7RgNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0LDQutC10YLQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YXQtNC+0LrRg9C80LXQvdGC0L7QsiDQv9Cw0YDQsNC80LXRgtGA0LLRi9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C/0LDRgNCw0LzQtdGC0YDRi9C30LDQv9C40YHQuGpzb24g0L/QsNGA0LDQvNC10YLRgNGL0LfQsNC/0LjRgdC4eG1sINC/0LDRgNCw0LzQtdGC0YDRi9GH0YLQtdC90LjRj3htbCDQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LV4cyDQv9C70LDQvdC40YDQvtCy0YnQuNC6INC/0L7Qu9C10LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7RgdGC0YDQvtC40YLQtdC70Yxkb20g0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC30LDQv9GA0L7RgdCwINC/0L7RgdGC0YDQvtC40YLQtdC70YzQvtGC0YfQtdGC0LAg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC+0YLRh9C10YLQsNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0L/QvtGB0YLRgNC+0LjRgtC10LvRjNGB0YXQtdC8eG1sINC/0L7RgtC+0Log0L/QvtGC0L7QutCy0L/QsNC80Y/RgtC4INC/0L7Rh9GC0LAg0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1eHNsINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LXQutC60LDQvdC+0L3QuNGH0LXRgdC60L7QvNGDeG1sICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LLRi9Cy0L7QtNCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhdCy0LrQvtC70LvQtdC60YbQuNGO0LfQvdCw0YfQtdC90LjQuSDQv9GA0L7RhtC10YHRgdC+0YDQstGL0LLQvtC00LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GF0LLRgtCw0LHQu9C40YfQvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNC30YvQvNC10L3QvtCy0LDRgtC10LvRjNC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQuNC80LXQvWRvbSDRgNCw0LzQutCwINGA0LDRgdC/0LjRgdCw0L3QuNC10YDQtdCz0LvQsNC80LXQvdGC0L3QvtCz0L7Qt9Cw0LTQsNC90LjRjyDRgNCw0YHRiNC40YDQtdC90L3QvtC10LjQvNGPeG1sICcgK1xuICAn0YDQtdC30YPQu9GM0YLQsNGC0YfRgtC10L3QuNGP0LTQsNC90L3Ri9GFINGB0LLQvtC00L3QsNGP0LTQuNCw0LPRgNCw0LzQvNCwINGB0LLRj9C30YzQv9Cw0YDQsNC80LXRgtGA0LDQstGL0LHQvtGA0LAg0YHQstGP0LfRjNC/0L7RgtC40L/RgyDRgdCy0Y/Qt9GM0L/QvtGC0LjQv9GD0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LB3aW5kb3dzINGB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LDRhNCw0LnQuyDRgdC10YDRgtC40YTQuNC60LDRgtC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgdC10YDRgtC40YTQuNC60LDRgtGL0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjRhdGG0LXQvdGC0YDQvtCyd2luZG93cyAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0YvRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNGF0YbQtdC90YLRgNC+0LLRhNCw0LnQuyDRgdC20LDRgtC40LXQtNCw0L3QvdGL0YUg0YHQuNGB0YLQtdC80L3QsNGP0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHQvtC+0LHRidC10L3QuNC10L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOINGB0L7Rh9C10YLQsNC90LjQtdC60LvQsNCy0LjRiCAnICtcbiAgJ9GB0YDQsNCy0L3QtdC90LjQtdC30L3QsNGH0LXQvdC40Lkg0YHRgtCw0L3QtNCw0YDRgtC90LDRj9C00LDRgtCw0L3QsNGH0LDQu9CwINGB0YLQsNC90LTQsNGA0YLQvdGL0LnQv9C10YDQuNC+0LQg0YHRhdC10LzQsHhtbCDRgdGF0LXQvNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiAnICtcbiAgJ9GC0LXQutGB0YLQvtCy0YvQudC00L7QutGD0LzQtdC90YIg0YLQtdGB0YLQuNGA0YPQtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0LjQv9C00LDQvdC90YvRhXhtbCDRg9C90LjQutCw0LvRjNC90YvQudC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQuyDRhNCw0LnQu9C+0LLRi9C50L/QvtGC0L7QuiAnICtcbiAgJ9GE0LDRgdC10YLQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QstC00YDQvtCx0L3QvtC50YfQsNGB0YLQuHhzINGE0LDRgdC10YLQvNCw0LrRgdC40LzQsNC70YzQvdC+0LPQvtCy0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMgJyArXG4gICfRhNCw0YHQtdGC0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7QudC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyAnICtcbiAgJ9GE0LDRgdC10YLQvNC40L3QuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LjQvdC40LzQsNC70YzQvdC+0LnQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC+0LHRgNCw0LfRhtCweHMg0YTQsNGB0LXRgtC+0LHRidC10LPQvtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QsnhzICcgK1xuICAn0YTQsNGB0LXRgtC/0LXRgNC10YfQuNGB0LvQtdC90LjRj3hzINGE0LDRgdC10YLQv9GA0L7QsdC10LvRjNC90YvRhdGB0LjQvNCy0L7Qu9C+0LJ4cyDRhNC40LvRjNGC0YDRg9C30LvQvtCyZG9tINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90LDRj9GB0YLRgNC+0LrQsCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0YTRgNCw0LPQvNC10L3RgnhzINGF0LXRiNC40YDQvtCy0LDQvdC40LXQtNCw0L3QvdGL0YUg0YXRgNCw0L3QuNC70LjRidC10LfQvdCw0YfQtdC90LjRjyDRhtCy0LXRgiDRh9GC0LXQvdC40LVmYXN0aW5mb3NldCDRh9GC0LXQvdC40LVodG1sINGH0YLQtdC90LjQtWpzb24g0YfRgtC10L3QuNC1eG1sINGH0YLQtdC90LjQtXppcNGE0LDQudC70LAgJyArXG4gICfRh9GC0LXQvdC40LXQtNCw0L3QvdGL0YUg0YfRgtC10L3QuNC10YLQtdC60YHRgtCwINGH0YLQtdC90LjQtdGD0LfQu9C+0LJkb20g0YjRgNC40YTRgiDRjdC70LXQvNC10L3RgtGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJztcblxuICAvLyB2OCDRg9C90LjQstC10YDRgdCw0LvRjNC90YvQtSDQutC+0LvQu9C10LrRhtC40Lgg0LfQvdCw0YfQtdC90LjQuSA9PT4gdHlwZVxuICB2YXIgdjhfdW5pdmVyc2FsX2NvbGxlY3Rpb24gPVxuICAnY29tc2FmZWFycmF5INC00LXRgNC10LLQvtC30L3QsNGH0LXQvdC40Lkg0LzQsNGB0YHQuNCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgdC/0LjRgdC+0LrQt9C90LDRh9C10L3QuNC5INGB0YLRgNGD0LrRgtGD0YDQsCDRgtCw0LHQu9C40YbQsNC30L3QsNGH0LXQvdC40Lkg0YTQuNC60YHQuNGA0L7QstCw0L3QvdCw0Y/RgdGC0YDRg9C60YLRg9GA0LAgJyArXG4gICfRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQudC80LDRgdGB0LjQsiAnO1xuXG4gIC8vIHR5cGUgOiDQstGB0YLRgNC+0LXQvdC90YvQtSDRgtC40L/Ri1xuICB2YXIgVFlQRSA9XG4gIHY4X3NoYXJlZF9vYmplY3QgK1xuICB2OF91bml2ZXJzYWxfY29sbGVjdGlvbjtcblxuICAvLyBsaXRlcmFsIDog0L/RgNC40LzQuNGC0LjQstC90YvQtSDRgtC40L/Ri1xuICB2YXIgTElURVJBTCA9ICdudWxsINC40YHRgtC40L3QsCDQu9C+0LbRjCDQvdC10L7Qv9GA0LXQtNC10LvQtdC90L4nO1xuICBcbiAgLy8gbnVtYmVyIDog0YfQuNGB0LvQsFxuICB2YXIgTlVNQkVSUyA9IGhsanMuaW5oZXJpdChobGpzLk5VTUJFUl9NT0RFKTtcblxuICAvLyBzdHJpbmcgOiDRgdGC0YDQvtC60LhcbiAgdmFyIFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wifFxcXFx8JywgZW5kOiAnXCJ8JCcsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gIH07XG5cbiAgLy8gbnVtYmVyIDog0LTQsNGC0YtcbiAgdmFyIERBVEUgPSB7XG4gICAgYmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wiLCBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcZHs0fShbXFxcXC5cXFxcXFxcXC86LV0/XFxcXGR7Mn0pezAsNX0nXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBcbiAgLy8gY29tbWVudCA6INC60L7QvNC80LXQvdGC0LDRgNC40LhcbiAgdmFyIENPTU1FTlRTID0gaGxqcy5pbmhlcml0KGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSk7XG4gIFxuICAvLyBtZXRhIDog0LjQvdGB0YLRgNGD0LrRhtC40Lgg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLRiyDQutC+0LzQv9C40LvRj9GG0LjQuFxuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGJlZ2luOiAnI3wmJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogS0VZV09SRCArIE1FVEFLRVlXT1JEfSxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFNcbiAgICBdXG4gIH07XG4gIFxuICAvLyBzeW1ib2wgOiDQvNC10YLQutCwIGdvdG9cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnficsIGVuZDogJzt8OicsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTsgIFxuICBcbiAgLy8gZnVuY3Rpb24gOiDQvtCx0YrRj9Cy0LvQtdC90LjQtSDQv9GA0L7RhtC10LTRg9GAINC4INGE0YPQvdC60YbQuNC5XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgbGV4ZW1lczogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAn0L/RgNC+0YbQtdC00YPRgNCwfNGE0YPQvdC60YbQuNGPJywgZW5kOiAnXFxcXCknLCBrZXl3b3JkczogJ9C/0YDQvtGG0LXQtNGD0YDQsCDRhNGD0L3QutGG0LjRjyd9LFxuICAgICAge2JlZ2luOiAn0LrQvtC90LXRhtC/0YDQvtGG0LXQtNGD0YDRi3zQutC+0L3QtdGG0YTRg9C90LrRhtC40LgnLCBrZXl3b3JkczogJ9C60L7QvdC10YbQv9GA0L7RhtC10LTRg9GA0Ysg0LrQvtC90LXRhtGE0YPQvdC60YbQuNC4J31cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGVuZHNQYXJlbnQgOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsIGVuZDogJywnLCBleGNsdWRlRW5kOiB0cnVlLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIGtleXdvcmQ6ICfQt9C90LDRhycsXG4gICAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBEQVRFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBDT01NRU5UU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBVTkRFUlNDT1JFX0lERU5UX1JFfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTixcbiAgICAgIGNsYXNzOiBDTEFTUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgTUVUQSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQ09NTUVOVFMsXG4gICAgICBTWU1CT0wsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIERBVEVcbiAgICBdICBcbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICB2YXIgcmVnZXhlcyA9IHtcbiAgICAgICAgcnVsZURlY2xhcmF0aW9uOiBcIl5bYS16QS1aXVthLXpBLVowLTktXSpcIixcbiAgICAgICAgdW5leHBlY3RlZENoYXJzOiBcIlshQCMkXiYnLD8rfmB8Ol1cIlxuICAgIH07XG5cbiAgICB2YXIga2V5d29yZHMgPSBbXG4gICAgICAgIFwiQUxQSEFcIixcbiAgICAgICAgXCJCSVRcIixcbiAgICAgICAgXCJDSEFSXCIsXG4gICAgICAgIFwiQ1JcIixcbiAgICAgICAgXCJDUkxGXCIsXG4gICAgICAgIFwiQ1RMXCIsXG4gICAgICAgIFwiRElHSVRcIixcbiAgICAgICAgXCJEUVVPVEVcIixcbiAgICAgICAgXCJIRVhESUdcIixcbiAgICAgICAgXCJIVEFCXCIsXG4gICAgICAgIFwiTEZcIixcbiAgICAgICAgXCJMV1NQXCIsXG4gICAgICAgIFwiT0NURVRcIixcbiAgICAgICAgXCJTUFwiLFxuICAgICAgICBcIlZDSEFSXCIsXG4gICAgICAgIFwiV1NQXCJcbiAgICBdO1xuXG4gICAgdmFyIGNvbW1lbnRNb2RlID0gaGxqcy5DT01NRU5UKFwiO1wiLCBcIiRcIik7XG5cbiAgICB2YXIgdGVybWluYWxCaW5hcnlNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWJbMC0xXSsoLVswLTFdK3woXFwuWzAtMV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbERlY2ltYWxNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWRbMC05XSsoLVswLTldK3woXFwuWzAtOV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbEhleGFkZWNpbWFsTW9kZSA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogLyV4WzAtOUEtRl0rKC1bMC05QS1GXSt8KFxcLlswLTlBLUZdKykrKXswLDF9LyxcbiAgICB9O1xuXG4gICAgdmFyIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzeW1ib2xcIixcbiAgICAgICAgYmVnaW46IC8lW3NpXS9cbiAgICB9O1xuXG4gICAgdmFyIHJ1bGVEZWNsYXJhdGlvbk1vZGUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJhdHRyaWJ1dGVcIixcbiAgICAgICAgYmVnaW46IHJlZ2V4ZXMucnVsZURlY2xhcmF0aW9uICsgJyg/PVxcXFxzKj0pJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlsbGVnYWw6IHJlZ2V4ZXMudW5leHBlY3RlZENoYXJzLFxuICAgICAga2V5d29yZHM6IGtleXdvcmRzLmpvaW4oXCIgXCIpLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBydWxlRGVjbGFyYXRpb25Nb2RlLFxuICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsQmluYXJ5TW9kZSxcbiAgICAgICAgICB0ZXJtaW5hbERlY2ltYWxNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsSGV4YWRlY2ltYWxNb2RlLFxuICAgICAgICAgIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvTWV0aG9kc1xuICB2YXIgSFRUUF9WRVJCUyA9IFtcbiAgICBcIkdFVFwiLCBcIlBPU1RcIiwgXCJIRUFEXCIsIFwiUFVUXCIsIFwiREVMRVRFXCIsIFwiQ09OTkVDVFwiLCBcIk9QVElPTlNcIiwgXCJQQVRDSFwiLCBcIlRSQUNFXCJcbiAgXVxuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBJUFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ15cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTo1XG4gICAgICB9LFxuICAgICAgLy8gT3RoZXIgbnVtYmVyc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrXFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBSZXF1ZXN0c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiKCcgKyBIVFRQX1ZFUkJTLmpvaW4oXCJ8XCIpICsgJyknLCBlbmQ6ICdcIicsXG4gICAgICAgIGtleXdvcmRzOiBIVFRQX1ZFUkJTLmpvaW4oXCIgXCIpLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDUsXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAnSFRUUC9bMTJdXFxcXC5cXFxcZCcsXG4gICAgICAgICAgcmVsZXZhbmNlOjVcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICAvLyBEYXRlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAvLyBkYXRlcyBtdXN0IGhhdmUgYSBjZXJ0YWluIGxlbmd0aCwgdGhpcyBwcmV2ZW50cyBtYXRjaGluZ1xuICAgICAgICAvLyBzaW1wbGUgYXJyYXkgYWNjZXNzZXMgYVsxMjNdIGFuZCBbXSBhbmQgb3RoZXIgY29tbW9uIHBhdHRlcm5zXG4gICAgICAgIC8vIGZvdW5kIGluIG90aGVyIGxhbmd1YWdlc1xuICAgICAgICBiZWdpbjogL1xcW1xcZFteXFxdXFxuXXs4LH1cXF0vLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDFcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gVXNlciBhZ2VudCAvIHJlbGV2YW5jZSBib29zdFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiTW96aWxsYS9cXFxcZFxcXFwuXFxcXGQgXFxcXFxcKCcsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAzXG4gICAgICB9LFxuICAgICAgLy8gU3RyaW5nc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJztcbiAgdmFyIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAnKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJztcblxuICB2YXIgQVMzX1JFU1RfQVJHX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVzdF9hcmcnLFxuICAgIGJlZ2luOiAnWy5dezN9JywgZW5kOiBJREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2FzJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhcyBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGRvIGR5bmFtaWMgZWFjaCAnICtcbiAgICAgICAgJ2Vsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZvciBmdW5jdGlvbiBnZXQgaWYgaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luc3RhbmNlb2YgaW50ZXJmYWNlIGludGVybmFsIGlzIG5hbWVzcGFjZSBuYXRpdmUgbmV3IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSAnICtcbiAgICAgICAgJ3Byb3RlY3RlZCBwdWJsaWMgcmV0dXJuIHNldCBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1c2UgdmFyIHZvaWQgJyArXG4gICAgICAgICd3aGlsZSB3aXRoJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwYWNrYWdlJywgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCBpbmNsdWRlJywgZW5kOiAnOycsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbXBvcnQgaW5jbHVkZSd9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJ1t7O10nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBBUzNfUkVTVF9BUkdfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc6XFxcXHMqJyArIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLk1FVEhPRF9HVUFSRFxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLy8gV2UgdHJ5IHRvIHN1cHBvcnQgZnVsbCBBZGEyMDEyXG4vL1xuLy8gV2UgaGlnaGxpZ2h0IGFsbCBhcHBlYXJhbmNlcyBvZiB0eXBlcywga2V5d29yZHMsIGxpdGVyYWxzIChzdHJpbmcsIGNoYXIsIG51bWJlciwgYm9vbClcbi8vIGFuZCB0aXRsZXMgKHVzZXIgZGVmaW5lZCBmdW5jdGlvbi9wcm9jZWR1cmUvcGFja2FnZSlcbi8vIENTUyBjbGFzc2VzIGFyZSBzZXQgYWNjb3JkaW5nbHlcbi8vXG4vLyBMYW5ndWFnZXMgY2F1c2luZyBwcm9ibGVtcyBmb3IgbGFuZ3VhZ2UgZGV0ZWN0aW9uOlxuLy8geG1sIChicm9rZW4gYnkgRm9vIDogQmFyIHR5cGUpLCBlbG0gKGJyb2tlbiBieSBGb28gOiBCYXIgdHlwZSksIHZic2NyaXB0LWh0bWwgKGJyb2tlbiBieSBib2R5IGtleXdvcmQpXG4vLyBzcWwgKGFkYSBkZWZhdWx0LnR4dCBoYXMgYSBsb3Qgb2Ygc3FsIGtleXdvcmRzKVxuXG5mdW5jdGlvbihobGpzKSB7XG4gICAgLy8gUmVndWxhciBleHByZXNzaW9uIGZvciBBZGEgbnVtZXJpYyBsaXRlcmFscy5cbiAgICAvLyBzdG9sZW4gZm9ybSB0aGUgVkhETCBoaWdobGlnaHRlclxuXG4gICAgLy8gRGVjaW1hbCBsaXRlcmFsOlxuICAgIHZhciBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gICAgdmFyIEVYUE9ORU5UX1JFID0gJ1tlRV1bLStdPycgKyBJTlRFR0VSX1JFO1xuICAgIHZhciBERUNJTUFMX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyhcXFxcLicgKyBJTlRFR0VSX1JFICsgJyk/JyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIC8vIEJhc2VkIGxpdGVyYWw6XG4gICAgdmFyIEJBU0VEX0lOVEVHRVJfUkUgPSAnXFxcXHcrJztcbiAgICB2YXIgQkFTRURfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnIycgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyhcXFxcLicgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyk/JyArICcjJyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIHZhciBOVU1CRVJfUkUgPSAnXFxcXGIoJyArIEJBU0VEX0xJVEVSQUxfUkUgKyAnfCcgKyBERUNJTUFMX0xJVEVSQUxfUkUgKyAnKSc7XG5cbiAgICAvLyBJZGVudGlmaWVyIHJlZ2V4XG4gICAgdmFyIElEX1JFR0VYID0gJ1tBLVphLXpdKF8/W0EtWmEtejAtOS5dKSonO1xuXG4gICAgLy8gYmFkIGNoYXJzLCBvbmx5IGFsbG93ZWQgaW4gbGl0ZXJhbHNcbiAgICB2YXIgQkFEX0NIQVJTID0gJ1tde30lI1xcJ1xcXCInXG5cbiAgICAvLyBBZGEgZG9lc24ndCBoYXZlIGJsb2NrIGNvbW1lbnRzLCBvbmx5IGxpbmUgY29tbWVudHNcbiAgICB2YXIgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcblxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9ybVxuICAgIC8vIEZvbyA6IEJhciA6PSBCYXo7XG4gICAgLy8gd2hlcmUgb25seSBCYXIgd2lsbCBiZSBoaWdobGlnaHRlZFxuICAgIHZhciBWQVJfREVDTFMgPSB7XG4gICAgICAgIC8vIFRPRE86IFRoZXNlIHNwYWNlcyBhcmUgbm90IHJlcXVpcmVkIGJ5IHRoZSBBZGEgc3ludGF4XG4gICAgICAgIC8vIGhvd2V2ZXIsIEkgaGF2ZSB5ZXQgdG8gc2VlIGhhbmR3cml0dGVuIEFkYSBjb2RlIHdoZXJlXG4gICAgICAgIC8vIHNvbWVvbmUgZG9lcyBub3QgcHV0IHNwYWNlcyBhcm91bmQgOlxuICAgICAgICBiZWdpbjogJ1xcXFxzKzpcXFxccysnLCBlbmQ6ICdcXFxccyooOj18O3xcXFxcKXw9PnwkKScsXG4gICAgICAgIC8vIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAvLyByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdvcmthcm91bmQgdG8gYXZvaWQgaGlnaGxpZ2h0aW5nXG4gICAgICAgICAgICAgICAgLy8gbmFtZWQgbG9vcHMgYW5kIGRlY2xhcmUgYmxvY2tzXG4gICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2xvb3AgZm9yIGRlY2xhcmUgb3RoZXJzJyxcbiAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJseSBoaWdobGlnaHQgYWxsIG1vZGlmaWVyc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdub3QgbnVsbCBjb25zdGFudCBhY2Nlc3MgZnVuY3Rpb24gcHJvY2VkdXJlIGluIG91dCBhbGlhc2VkIGV4Y2VwdGlvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46IElEX1JFR0VYLFxuICAgICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgICAgICdhYm9ydCBlbHNlIG5ldyByZXR1cm4gYWJzIGVsc2lmIG5vdCByZXZlcnNlIGFic3RyYWN0IGVuZCAnICtcbiAgICAgICAgICAgICAgICAnYWNjZXB0IGVudHJ5IHNlbGVjdCBhY2Nlc3MgZXhjZXB0aW9uIG9mIHNlcGFyYXRlIGFsaWFzZWQgZXhpdCBvciBzb21lICcgK1xuICAgICAgICAgICAgICAgICdhbGwgb3RoZXJzIHN1YnR5cGUgYW5kIGZvciBvdXQgc3luY2hyb25pemVkIGFycmF5IGZ1bmN0aW9uIG92ZXJyaWRpbmcgJyArXG4gICAgICAgICAgICAgICAgJ2F0IHRhZ2dlZCBnZW5lcmljIHBhY2thZ2UgdGFzayBiZWdpbiBnb3RvIHByYWdtYSB0ZXJtaW5hdGUgJyArXG4gICAgICAgICAgICAgICAgJ2JvZHkgcHJpdmF0ZSB0aGVuIGlmIHByb2NlZHVyZSB0eXBlIGNhc2UgaW4gcHJvdGVjdGVkIGNvbnN0YW50IGludGVyZmFjZSAnICtcbiAgICAgICAgICAgICAgICAnaXMgcmFpc2UgdXNlIGRlY2xhcmUgcmFuZ2UgZGVsYXkgbGltaXRlZCByZWNvcmQgd2hlbiBkZWx0YSBsb29wIHJlbSB3aGlsZSAnICtcbiAgICAgICAgICAgICAgICAnZGlnaXRzIHJlbmFtZXMgd2l0aCBkbyBtb2QgcmVxdWV1ZSB4b3InLFxuICAgICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICAgICAnVHJ1ZSBGYWxzZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgXCJmb29iYXJcIlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tiZWdpbjogL1wiXCIvLCByZWxldmFuY2U6IDB9XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgJydcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbHMgYWx3YXlzIGNvbnRhaW4gb25lIGNoYXJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvJy4nL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBudW1iZXIgbGl0ZXJhbHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBOVU1CRVJfUkUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIidcIiArIElEX1JFR0VYLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwYWNrYWdlIGRlZmluaXRpb24sIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/KFxcXFxicHJpdmF0ZVxcXFxzKyk/XFxcXGJwYWNrYWdlXFxcXHMrKFxcXFxiYm9keVxcXFxzKyk/JywgZW5kOiAnKGlzfCQpJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ3BhY2thZ2UgYm9keScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uL3Byb2NlZHVyZSBkZWNsYXJhdGlvbi9kZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgLy8gbWF5YmUgaW5zaWRlIGdlbmVyaWNcbiAgICAgICAgICAgICAgICBiZWdpbjogJyhcXFxcYih3aXRofG92ZXJyaWRpbmcpXFxcXHMrKT9cXFxcYihmdW5jdGlvbnxwcm9jZWR1cmUpXFxcXHMrJywgZW5kOiAnKFxcXFxiaXN8XFxcXGJ3aXRofFxcXFxicmVuYW1lc3xcXFxcKVxcXFxzKjspJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ292ZXJyaWRpbmcgZnVuY3Rpb24gcHJvY2VkdXJlIHdpdGggaXMgcmVuYW1lcyByZXR1cm4nLFxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmUtbWF0Y2ggdGhlICdmdW5jdGlvbicga2V5d29yZCwgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSB0aXRsZSBtb2RlIGJlbG93IG1hdGNoZXMgb25seSBleGFjdGx5IG9uY2VcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczpcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIENPTU1FTlRTLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmdW5jdGlvbi9wcm9jZWR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/XFxcXGIoZnVuY3Rpb258cHJvY2VkdXJlKVxcXFxzKycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ICcoXFxcXCh8XFxcXHMrfCQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsOiBCQURfQ0hBUlNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnXG4gICAgICAgICAgICAgICAgICAgIC8vIC8vIHBhcmFtZXRlciB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBWQVJfREVDTFMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGJyZXR1cm5cXFxccysnLCBlbmQ6ICcoXFxcXHMrfDt8JCknLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6ICdyZXR1cm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBkb25lIHdpdGggZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG5ldyB0eXBlIGRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIC8vIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYihzdWIpP3R5cGVcXFxccysnLCBlbmQ6ICdcXFxccysnLFxuICAgICAgICAgICAgICAgIGtleXdvcmRzOiAndHlwZScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlsbGVnYWw6IEJBRF9DSEFSU1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIFZBUl9ERUNMUyxcblxuICAgICAgICAgICAgLy8gbm8gbWFya3VwXG4gICAgICAgICAgICAvLyByZWxldmFuY2UgYm9vc3RlcnMgZm9yIHNtYWxsIHNuaXBwZXRzXG4gICAgICAgICAgICAvLyB7YmVnaW46ICdcXFxccyo9PlxcXFxzKid9LFxuICAgICAgICAgICAgLy8ge2JlZ2luOiAnXFxcXHMqOj1cXFxccyonfSxcbiAgICAgICAgICAgIC8vIHtiZWdpbjogJ1xcXFxzKzo9XFxcXHMrJ30sXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIGJ1aWx0SW5UeXBlTW9kZSA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYih2b2lkfGJvb2x8aW50fGludDh8aW50MTZ8aW50MzJ8aW50NjR8dWludHx1aW50OHx1aW50MTZ8dWludDMyfHVpbnQ2NHxzdHJpbmd8cmVmfGFycmF5fGRvdWJsZXxmbG9hdHxhdXRvfGRpY3Rpb25hcnkpJ1xuICB9O1xuXG4gIHZhciBvYmplY3RIYW5kbGVNb2RlID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbYS16QS1aMC05X10rQCdcbiAgfTtcblxuICB2YXIgZ2VuZXJpY01vZGUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgY29udGFpbnM6IFsgYnVpbHRJblR5cGVNb2RlLCBvYmplY3RIYW5kbGVNb2RlIF1cbiAgfTtcblxuICBidWlsdEluVHlwZU1vZGUuY29udGFpbnMgPSBbIGdlbmVyaWNNb2RlIF07XG4gIG9iamVjdEhhbmRsZU1vZGUuY29udGFpbnMgPSBbIGdlbmVyaWNNb2RlIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbICdhc2MnIF0sXG5cbiAgICBrZXl3b3JkczpcbiAgICAgICdmb3IgaW58MCBicmVhayBjb250aW51ZSB3aGlsZSBkb3wwIHJldHVybiBpZiBlbHNlIGNhc2Ugc3dpdGNoIG5hbWVzcGFjZSBpcyBjYXN0ICcgK1xuICAgICAgJ29yIGFuZCB4b3Igbm90IGdldHwwIGluIGlub3V0fDEwIG91dCBvdmVycmlkZSBzZXR8MCBwcml2YXRlIHB1YmxpYyBjb25zdCBkZWZhdWx0fDAgJyArXG4gICAgICAnZmluYWwgc2hhcmVkIGV4dGVybmFsIG1peGlufDEwIGVudW0gdHlwZWRlZiBmdW5jZGVmIHRoaXMgc3VwZXIgaW1wb3J0IGZyb20gaW50ZXJmYWNlICcgK1xuICAgICAgJ2Fic3RyYWN0fDAgdHJ5IGNhdGNoIHByb3RlY3RlZCBleHBsaWNpdCBwcm9wZXJ0eScsXG5cbiAgICAvLyBhdm9pZCBjbG9zZSBkZXRlY3Rpb24gd2l0aCBDIyBhbmQgSlNcbiAgICBpbGxlZ2FsOiAnKF51c2luZ1xcXFxzK1tBLVphLXowLTlfXFxcXC5dKzskfFxcXFxiZnVuY3Rpb25cXHMqW15cXFxcKF0pJyxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vICdzdHJpbmdzJ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gXCJzdHJpbmdzXCJcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFsgaGxqcy5CQUNLU0xBU0hfRVNDQVBFIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblxuICAgICAgLy8gXCJcIlwiaGVyZWRvYyBzdHJpbmdzXCJcIlwiXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcblxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLCAvLyBzaW5nbGUtbGluZSBjb21tZW50c1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgLy8gY29tbWVudCBibG9ja3NcblxuICAgICAgeyAvLyBpbnRlcmZhY2Ugb3IgbmFtZXNwYWNlIGRlY2xhcmF0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbnRlcmZhY2UgbmFtZXNwYWNlJywgZW5kOiAneycsXG4gICAgICAgIGlsbGVnYWw6ICdbOy5cXFxcLV0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgLy8gaW50ZXJmYWNlIG9yIG5hbWVzcGFjZSBuYW1lXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgeyAvLyBjbGFzcyBkZWNsYXJhdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MnLCBlbmQ6ICd7JyxcbiAgICAgICAgaWxsZWdhbDogJ1s7LlxcXFwtXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyBjbGFzcyBuYW1lXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdbYS16QS1aMC05X10rJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1s6LF1cXFxccyonLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnW2EtekEtWjAtOV9dKydcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIGJ1aWx0SW5UeXBlTW9kZSwgLy8gYnVpbHQtaW4gdHlwZXNcbiAgICAgIG9iamVjdEhhbmRsZU1vZGUsIC8vIG9iamVjdCBoYW5kbGVzXG5cbiAgICAgIHsgLy8gbGl0ZXJhbHNcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIobnVsbHx0cnVlfGZhbHNlKSdcbiAgICAgIH0sXG5cbiAgICAgIHsgLy8gbnVtYmVyc1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTldK3woXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCopP2Y/fFxcXFwuXFxcXGQrZj8pKFtlRV1bLStdP1xcXFxkK2Y/KT8pJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBOVU1CRVIgPSB7Y2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdbXFxcXCQlXVxcXFxkKyd9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYXBhY2hlY29uZiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7Y2xhc3NOYW1lOiAnc2VjdGlvbicsIGJlZ2luOiAnPC8/JywgZW5kOiAnPid9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogL1xcdysvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIC8vIGtleXdvcmRzIGFyZW7igJl0IG5lZWRlZCBmb3IgaGlnaGxpZ2h0aW5nIHBlciBzZSwgdGhleSBvbmx5IGJvb3N0IHJlbGV2YW5jZVxuICAgICAgICAvLyBmb3IgYSB2ZXJ5IGdlbmVyYWxseSBkZWZpbmVkIG1vZGUgKHN0YXJ0cyB3aXRoIGEgd29yZCwgZW5kcyB3aXRoIGxpbmUtZW5kXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgbm9tYXJrdXA6XG4gICAgICAgICAgICAnb3JkZXIgZGVueSBhbGxvdyBzZXRlbnYgcmV3cml0ZXJ1bGUgcmV3cml0ZWVuZ2luZSByZXdyaXRlY29uZCBkb2N1bWVudHJvb3QgJyArXG4gICAgICAgICAgICAnc2V0aGFuZGxlciBlcnJvcmRvY3VtZW50IGxvYWRtb2R1bGUgb3B0aW9ucyBoZWFkZXIgbGlzdGVuIHNlcnZlcnJvb3QgJyArXG4gICAgICAgICAgICAnc2VydmVybmFtZSdcbiAgICAgICAgfSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBsaXRlcmFsOiAnb24gb2ZmIGFsbCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxzXFxcXFsnLCBlbmQ6ICdcXFxcXSQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgICAgICAgIGJlZ2luOiAnW1xcXFwkJV1cXFxceycsIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIE5VTUJFUl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBOVU1CRVIsXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvXFxTL1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogJyd9KTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IFsnc2VsZicsIGhsanMuQ19OVU1CRVJfTU9ERSwgU1RSSU5HXVxuICB9O1xuICB2YXIgQ09NTUVOVF9NT0RFXzEgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcbiAgdmFyIENPTU1FTlRfTU9ERV8yID0gaGxqcy5DT01NRU5UKFxuICAgICdcXFxcKFxcXFwqJyxcbiAgICAnXFxcXCpcXFxcKScsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsnc2VsZicsIENPTU1FTlRfTU9ERV8xXSAvL2FsbG93IG5lc3RpbmdcbiAgICB9XG4gICk7XG4gIHZhciBDT01NRU5UUyA9IFtcbiAgICBDT01NRU5UX01PREVfMSxcbiAgICBDT01NRU5UX01PREVfMixcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ29zYXNjcmlwdCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWJvdXQgYWJvdmUgYWZ0ZXIgYWdhaW5zdCBhbmQgYXJvdW5kIGFzIGF0IGJhY2sgYmVmb3JlIGJlZ2lubmluZyAnICtcbiAgICAgICAgJ2JlaGluZCBiZWxvdyBiZW5lYXRoIGJlc2lkZSBiZXR3ZWVuIGJ1dCBieSBjb25zaWRlcmluZyAnICtcbiAgICAgICAgJ2NvbnRhaW4gY29udGFpbnMgY29udGludWUgY29weSBkaXYgZG9lcyBlaWdodGggZWxzZSBlbmQgZXF1YWwgJyArXG4gICAgICAgICdlcXVhbHMgZXJyb3IgZXZlcnkgZXhpdCBmaWZ0aCBmaXJzdCBmb3IgZm91cnRoIGZyb20gZnJvbnQgJyArXG4gICAgICAgICdnZXQgZ2l2ZW4gZ2xvYmFsIGlmIGlnbm9yaW5nIGluIGludG8gaXMgaXQgaXRzIGxhc3QgbG9jYWwgbWUgJyArXG4gICAgICAgICdtaWRkbGUgbW9kIG15IG5pbnRoIG5vdCBvZiBvbiBvbnRvIG9yIG92ZXIgcHJvcCBwcm9wZXJ0eSBwdXQgcmVmICcgK1xuICAgICAgICAncmVmZXJlbmNlIHJlcGVhdCByZXR1cm5pbmcgc2NyaXB0IHNlY29uZCBzZXQgc2V2ZW50aCBzaW5jZSAnICtcbiAgICAgICAgJ3NpeHRoIHNvbWUgdGVsbCB0ZW50aCB0aGF0IHRoZXwwIHRoZW4gdGhpcmQgdGhyb3VnaCB0aHJ1ICcgK1xuICAgICAgICAndGltZW91dCB0aW1lcyB0byB0cmFuc2FjdGlvbiB0cnkgdW50aWwgd2hlcmUgd2hpbGUgd2hvc2Ugd2l0aCAnICtcbiAgICAgICAgJ3dpdGhvdXQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ0FwcGxlU2NyaXB0IGZhbHNlIGxpbmVmZWVkIHJldHVybiBwaSBxdW90ZSByZXN1bHQgc3BhY2UgdGFiIHRydWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhbGlhcyBhcHBsaWNhdGlvbiBib29sZWFuIGNsYXNzIGNvbnN0YW50IGRhdGUgZmlsZSBpbnRlZ2VyIGxpc3QgJyArXG4gICAgICAgICdudW1iZXIgcmVhbCByZWNvcmQgc3RyaW5nIHRleHQgJyArXG4gICAgICAgICdhY3RpdmF0ZSBiZWVwIGNvdW50IGRlbGF5IGxhdW5jaCBsb2cgb2Zmc2V0IHJlYWQgcm91bmQgJyArXG4gICAgICAgICdydW4gc2F5IHN1bW1hcml6ZSB3cml0ZSAnICtcbiAgICAgICAgJ2NoYXJhY3RlciBjaGFyYWN0ZXJzIGNvbnRlbnRzIGRheSBmcm9udG1vc3QgaWQgaXRlbSBsZW5ndGggJyArXG4gICAgICAgICdtb250aCBuYW1lIHBhcmFncmFwaCBwYXJhZ3JhcGhzIHJlc3QgcmV2ZXJzZSBydW5uaW5nIHRpbWUgdmVyc2lvbiAnICtcbiAgICAgICAgJ3dlZWtkYXkgd29yZCB3b3JkcyB5ZWFyJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjpcbiAgICAgICAgICAnXFxcXGIoY2xpcGJvYXJkIGluZm98dGhlIGNsaXBib2FyZHxpbmZvIGZvcnxsaXN0IChkaXNrc3xmb2xkZXIpfCcgK1xuICAgICAgICAgICdtb3VudCB2b2x1bWV8cGF0aCB0b3woY2xvc2V8b3BlbiBmb3IpIGFjY2Vzc3woZ2V0fHNldCkgZW9mfCcgK1xuICAgICAgICAgICdjdXJyZW50IGRhdGV8ZG8gc2hlbGwgc2NyaXB0fGdldCB2b2x1bWUgc2V0dGluZ3N8cmFuZG9tIG51bWJlcnwnICtcbiAgICAgICAgICAnc2V0IHZvbHVtZXxzeXN0ZW0gYXR0cmlidXRlfHN5c3RlbSBpbmZvfHRpbWUgdG8gR01UfCcgK1xuICAgICAgICAgICcobG9hZHxydW58c3RvcmUpIHNjcmlwdHxzY3JpcHRpbmcgY29tcG9uZW50c3wnICtcbiAgICAgICAgICAnQVNDSUkgKGNoYXJhY3RlcnxudW1iZXIpfGxvY2FsaXplZCBzdHJpbmd8JyArXG4gICAgICAgICAgJ2Nob29zZSAoYXBwbGljYXRpb258Y29sb3J8ZmlsZXxmaWxlIG5hbWV8JyArXG4gICAgICAgICAgJ2ZvbGRlcnxmcm9tIGxpc3R8cmVtb3RlIGFwcGxpY2F0aW9ufFVSTCl8JyArXG4gICAgICAgICAgJ2Rpc3BsYXkgKGFsZXJ0fGRpYWxvZykpXFxcXGJ8XlxcXFxzKnJldHVyblxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYih0ZXh0IGl0ZW0gZGVsaW1pdGVyc3xjdXJyZW50IGFwcGxpY2F0aW9ufG1pc3NpbmcgdmFsdWUpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgJ1xcXFxiKGFwYXJ0IGZyb218YXNpZGUgZnJvbXxpbnN0ZWFkIG9mfG91dCBvZnxncmVhdGVyIHRoYW58JyArXG4gICAgICAgICAgXCJpc24ndHwoZG9lc24ndHxkb2VzIG5vdCkgKGVxdWFsfGNvbWUgYmVmb3JlfGNvbWUgYWZ0ZXJ8Y29udGFpbil8XCIgK1xuICAgICAgICAgICcoZ3JlYXRlcnxsZXNzKSB0aGFuKCBvciBlcXVhbCk/fChzdGFydHM/fGVuZHN8YmVnaW5zPykgd2l0aHwnICtcbiAgICAgICAgICAnY29udGFpbmVkIGJ5fGNvbWVzIChiZWZvcmV8YWZ0ZXIpfGEgKHJlZnxyZWZlcmVuY2UpfFBPU0lYIGZpbGV8JyArXG4gICAgICAgICAgJ1BPU0lYIHBhdGh8KGRhdGV8dGltZSkgc3RyaW5nfHF1b3RlZCBmb3JtKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ29uJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez07XFxcXG5dJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgUEFSQU1TXVxuICAgICAgfVxuICAgIF0uY29uY2F0KENPTU1FTlRTKSxcbiAgICBpbGxlZ2FsOiAnLy98LT58PT58XFxcXFtcXFxcWydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbQS1aYS16X11bMC05QS1aYS16X10qJztcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaWYgZm9yIHdoaWxlIHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhaycsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdCYWNrU2xhc2ggRG91YmxlUXVvdGUgZmFsc2UgRm9yd2FyZFNsYXNoIEluZmluaXR5IE5hTiBOZXdMaW5lIG51bGwgUEkgU2luZ2xlUXVvdGUgVGFiIFRleHRGb3JtYXR0aW5nIHRydWUgdW5kZWZpbmVkJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdBYnMgQWNvcyBBbmdsZSBBdHRhY2htZW50cyBBcmVhIEFyZWFHZW9kZXRpYyBBc2luIEF0YW4gQXRhbjIgQXZlcmFnZSBCZWFyaW5nIEJvb2xlYW4gQnVmZmVyIEJ1ZmZlckdlb2RldGljICcgK1xuICAgICAgJ0NlaWwgQ2VudHJvaWQgQ2xpcCBDb25zb2xlIENvbnN0cmFpbiBDb250YWlucyBDb3MgQ291bnQgQ3Jvc3NlcyBDdXQgRGF0ZSBEYXRlQWRkICcgK1xuICAgICAgJ0RhdGVEaWZmIERheSBEZWNvZGUgRGVmYXVsdFZhbHVlIERpY3Rpb25hcnkgRGlmZmVyZW5jZSBEaXNqb2ludCBEaXN0YW5jZSBEaXN0YW5jZUdlb2RldGljIERpc3RpbmN0ICcgK1xuICAgICAgJ0RvbWFpbkNvZGUgRG9tYWluTmFtZSBFcXVhbHMgRXhwIEV4dGVudCBGZWF0dXJlIEZlYXR1cmVTZXQgRmVhdHVyZVNldEJ5QXNzb2NpYXRpb24gRmVhdHVyZVNldEJ5SWQgRmVhdHVyZVNldEJ5UG9ydGFsSXRlbSAnICtcbiAgICAgICdGZWF0dXJlU2V0QnlSZWxhdGlvbnNoaXBOYW1lIEZlYXR1cmVTZXRCeVRpdGxlIEZlYXR1cmVTZXRCeVVybCBGaWx0ZXIgRmlyc3QgRmxvb3IgR2VvbWV0cnkgR3JvdXBCeSBHdWlkIEhhc0tleSBIb3VyIElJZiBJbmRleE9mICcgK1xuICAgICAgJ0ludGVyc2VjdGlvbiBJbnRlcnNlY3RzIElzRW1wdHkgSXNOYW4gSXNTZWxmSW50ZXJzZWN0aW5nIExlbmd0aCBMZW5ndGhHZW9kZXRpYyBMb2cgTWF4IE1lYW4gTWlsbGlzZWNvbmQgTWluIE1pbnV0ZSBNb250aCAnICtcbiAgICAgICdNdWx0aVBhcnRUb1NpbmdsZVBhcnQgTXVsdGlwb2ludCBOZXh0U2VxdWVuY2VWYWx1ZSBOb3cgTnVtYmVyIE9yZGVyQnkgT3ZlcmxhcHMgUG9pbnQgUG9seWdvbiAnICtcbiAgICAgICdQb2x5bGluZSBQb3J0YWwgUG93IFJhbmRvbSBSZWxhdGUgUmV2ZXJzZSBSaW5nSXNDbG9ja1dpc2UgUm91bmQgU2Vjb25kIFNldEdlb21ldHJ5IFNpbiBTb3J0IFNxcnQgU3RkZXYgU3VtICcgK1xuICAgICAgJ1N5bW1ldHJpY0RpZmZlcmVuY2UgVGFuIFRleHQgVGltZXN0YW1wIFRvZGF5IFRvTG9jYWwgVG9wIFRvdWNoZXMgVG9VVEMgVHJhY2tDdXJyZW50VGltZSAnICtcbiAgICAgICdUcmFja0dlb21ldHJ5V2luZG93IFRyYWNrSW5kZXggVHJhY2tTdGFydFRpbWUgVHJhY2tXaW5kb3cgVHlwZU9mIFVuaW9uIFVybEVuY29kZSBWYXJpYW5jZSAnICtcbiAgICAgICdXZWVrZGF5IFdoZW4gV2l0aGluIFllYXIgJ1xuICB9O1xuICB2YXIgRVhQUkVTU0lPTlM7XG4gIHZhciBTWU1CT0wgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1xcXFwkW2RhdGFzdG9yZXxmZWF0dXJlfGxheWVyfG1hcHxtZWFzdXJlfHNvdXJjZWZlYXR1cmV8c291cmNlbGF5ZXJ8dGFyZ2V0ZmVhdHVyZXx0YXJnZXRsYXllcnx2YWx1ZXx2aWV3XSsnXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJyB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKScgfSxcbiAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW10gIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIFRFTVBMQVRFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBTVUJTVFxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMgPSBbXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgVEVNUExBVEVfU1RSSU5HLFxuICAgIE5VTUJFUixcbiAgICBobGpzLlJFR0VYUF9NT0RFXG4gIF07XG4gIHZhciBQQVJBTVNfQ09OVEFJTlMgPSBTVUJTVC5jb250YWlucy5jb25jYXQoW1xuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydhcmNhZGUnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgU1lNQk9MLFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IC9beyxdXFxzKi8sIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnYXR0cicsIGJlZ2luOiBJREVOVF9SRSwgcmVsZXZhbmNlOiAwfV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKHJldHVybilcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5SRUdFWFBfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogJyhcXFxcKC4qP1xcXFwpfCcgKyBJREVOVF9SRSArICcpXFxcXHMqPT4nLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBJREVOVF9SRVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXChcXHMqXFwpLyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSURFTlRfUkV9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkWyguXS9cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jKD8hISkvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICBmdW5jdGlvbiBvcHRpb25hbChzKSB7XG4gICAgcmV0dXJuICcoPzonICsgcyArICcpPyc7XG4gIH1cbiAgdmFyIERFQ0xUWVBFX0FVVE9fUkUgPSAnZGVjbHR5cGVcXFxcKGF1dG9cXFxcKSdcbiAgdmFyIE5BTUVTUEFDRV9SRSA9ICdbYS16QS1aX11cXFxcdyo6OidcbiAgdmFyIFRFTVBMQVRFX0FSR1VNRU5UX1JFID0gJzwuKj8+JztcbiAgdmFyIEZVTkNUSU9OX1RZUEVfUkUgPSAnKCcgK1xuICAgIERFQ0xUWVBFX0FVVE9fUkUgKyAnfCcgK1xuICAgIG9wdGlvbmFsKE5BTUVTUEFDRV9SRSkgKydbYS16QS1aX11cXFxcdyonICsgb3B0aW9uYWwoVEVNUExBVEVfQVJHVU1FTlRfUkUpICtcbiAgJyknO1xuICB2YXIgQ1BQX1BSSU1JVElWRV9UWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogJ1xcXFxiW2EtelxcXFxkX10qX3RcXFxcYidcbiAgfTtcblxuICAvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvZXNjYXBlXG4gIC8vIFxcXFwgXFx4IFxceEZGIFxcdTI4MzcgXFx1MDAzMjM3NDcgXFwzNzRcbiAgdmFyIENIQVJBQ1RFUl9FU0NBUEVTID0gJ1xcXFxcXFxcKHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NCw4fXxbMC03XXszfXxcXFxcUyknXG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFV8TCk/XFwnKCcgKyBDSEFSQUNURVJfRVNDQVBFUyArIFwifC4pXCIsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfSxcbiAgICAgIHsgYmVnaW46IC8oPzp1OD98VXxMKT9SXCIoW14oKVxcXFwgXXswLDE2fSlcXCgoPzoufFxcbikqP1xcKVxcMVwiLyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBOVU1CRVJTID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwYlswMVxcJ10rKScgfSxcbiAgICAgIHsgYmVnaW46ICcoLT8pXFxcXGIoW1xcXFxkXFwnXSsoXFxcXC5bXFxcXGRcXCddKik/fFxcXFwuW1xcXFxkXFwnXSspKHV8VXxsfEx8dWx8VUx8ZnxGfGJ8QiknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOVxcJ10rfChcXFxcYltcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKShbZUVdWy0rXT9bXFxcXGRcXCddKyk/KScgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBSRVBST0NFU1NPUiA9ICAgICAgIHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLywgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgJyArXG4gICAgICAgICdwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC88Lio/Pi8sIGVuZDogLyQvLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgdmFyIFRJVExFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgRlVOQ1RJT05fVElUTEUgPSBvcHRpb25hbChOQU1FU1BBQ0VfUkUpICsgaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCc7XG5cbiAgdmFyIENQUF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjaGFyOF90IGNoYXIxNl90IGNoYXIzMl90IGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mICcgK1xuICAgICAgJ2R5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSAnICtcbiAgICAgICd1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgJyArXG4gICAgICAnZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgd2NoYXJfdCcgK1xuICAgICAgJ3Nob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSAnICtcbiAgICAgICdjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyAnICtcbiAgICAgICdub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSAnICtcbiAgICAgICdhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgJyArXG4gICAgICAnYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyAnICtcbiAgICAgICdhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gJyArXG4gICAgICAnYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxJyxcbiAgICBidWlsdF9pbjogJ3N0ZCBzdHJpbmcgd3N0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtICcgK1xuICAgICAgJ2F1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgJyArXG4gICAgICAndW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgdGVybWluYXRlIGFicyBhY29zICcgK1xuICAgICAgJ2FzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwICcgK1xuICAgICAgJ2ZzY2FuZiBmdXR1cmUgaXNhbG51bSBpc2FscGhhIGlzY250cmwgaXNkaWdpdCBpc2dyYXBoIGlzbG93ZXIgaXNwcmludCBpc3B1bmN0IGlzc3BhY2UgaXN1cHBlciAnICtcbiAgICAgICdpc3hkaWdpdCB0b2xvd2VyIHRvdXBwZXIgbGFicyBsZGV4cCBsb2cxMCBsb2cgbWFsbG9jIHJlYWxsb2MgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtc2V0IG1vZGYgcG93ICcgK1xuICAgICAgJ3ByaW50ZiBwdXRjaGFyIHB1dHMgc2NhbmYgc2luaCBzaW4gc25wcmludGYgc3ByaW50ZiBzcXJ0IHNzY2FuZiBzdHJjYXQgc3RyY2hyIHN0cmNtcCAnICtcbiAgICAgICdzdHJjcHkgc3RyY3NwbiBzdHJsZW4gc3RybmNhdCBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBzdHJzdHIgdGFuaCB0YW4gJyArXG4gICAgICAndmZwcmludGYgdnByaW50ZiB2c3ByaW50ZiBlbmRsIGluaXRpYWxpemVyX2xpc3QgdW5pcXVlX3B0ciBfQm9vbCBjb21wbGV4IF9Db21wbGV4IGltYWdpbmFyeSBfSW1hZ2luYXJ5JyxcbiAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxscHRyIE5VTEwnXG4gIH07XG5cbiAgdmFyIEVYUFJFU1NJT05fQ09OVEFJTlMgPSBbXG4gICAgQ1BQX1BSSU1JVElWRV9UWVBFUyxcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBOVU1CRVJTLFxuICAgIFNUUklOR1NcbiAgXTtcblxuICB2YXIgRVhQUkVTU0lPTl9DT05URVhUID0ge1xuICAgIC8vIFRoaXMgbW9kZSBjb3ZlcnMgZXhwcmVzc2lvbiBjb250ZXh0IHdoZXJlIHdlIGNhbid0IGV4cGVjdCBhIGZ1bmN0aW9uXG4gICAgLy8gZGVmaW5pdGlvbiBhbmQgc2hvdWxkbid0IGhpZ2hsaWdodCBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2Ugb25lOlxuICAgIC8vIGByZXR1cm4gc29tZSgpYCwgYGVsc2UgaWYoKWAsIGAoeCpzdW0oMSwgMikpYFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC89LywgZW5kOiAvOy99LFxuICAgICAge2JlZ2luOiAvXFwoLywgZW5kOiAvXFwpL30sXG4gICAgICB7YmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsIGVuZDogLzsvfVxuICAgIF0sXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTl9DT05UQUlOUy5jb25jYXQoW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OX0NPTlRBSU5TLmNvbmNhdChbJ3NlbGYnXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9ERUNMQVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46ICcoJyArIEZVTkNUSU9OX1RZUEVfUkUgKyAnW1xcXFwqJlxcXFxzXSspKycgKyBGVU5DVElPTl9USVRMRSxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvW15cXHdcXHNcXComOjw+XS8sXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgeyAvLyB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY29uZnVzZWQgYXMgdGhlIGZ1bmN0aW9uIHRpdGxlXG4gICAgICAgIGJlZ2luOiBERUNMVFlQRV9BVVRPX1JFLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1RJVExFX01PREVdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgICAgICAgIC8vIENvdW50IG1hdGNoaW5nIHBhcmVudGhlc2VzLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgU1RSSU5HUyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgQ1BQX1BSSU1JVElWRV9UWVBFU1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIENQUF9QUklNSVRJVkVfVFlQRVMsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgUFJFUFJPQ0VTU09SXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjJywgJ2NjJywgJ2gnLCAnYysrJywgJ2grKycsICdocHAnLCAnaGgnLCAnaHh4JywgJ2N4eCddLFxuICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW10uY29uY2F0KFxuICAgICAgRVhQUkVTU0lPTl9DT05URVhULFxuICAgICAgRlVOQ1RJT05fREVDTEFSQVRJT04sXG4gICAgICBFWFBSRVNTSU9OX0NPTlRBSU5TLFxuICAgICAgW1xuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKGRlcXVlfGxpc3R8cXVldWV8c3RhY2t8dmVjdG9yfG1hcHxzZXR8Yml0c2V0fG11bHRpc2V0fG11bHRpbWFwfHVub3JkZXJlZF9tYXB8dW5vcmRlcmVkX3NldHx1bm9yZGVyZWRfbXVsdGlzZXR8dW5vcmRlcmVkX211bHRpbWFwfGFycmF5KVxcXFxzKjwnLCBlbmQ6ICc+JyxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIENQUF9QUklNSVRJVkVfVFlQRVNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIHN0cnVjdCcsIGVuZDogL1t7OzpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW46IC88LywgZW5kOiAvPi8sIGNvbnRhaW5zOiBbJ3NlbGYnXX0sIC8vIHNraXAgZ2VuZXJpYyBzdHVmZlxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSksXG4gICAgZXhwb3J0czoge1xuICAgICAgcHJlcHJvY2Vzc29yOiBQUkVQUk9DRVNTT1IsXG4gICAgICBzdHJpbmdzOiBTVFJJTkdTLFxuICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEU1xuICAgIH1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cblx0dmFyIEFSRFVJTk9fS1cgPSB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYm9vbGVhbiBieXRlIHdvcmQgU3RyaW5nJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc2V0dXAgbG9vcCcgK1xuICAgICAgICAnS2V5Ym9hcmRDb250cm9sbGVyIE1vdXNlQ29udHJvbGxlciBTb2Z0d2FyZVNlcmlhbCAnICtcbiAgICAgICAgJ0V0aGVybmV0U2VydmVyIEV0aGVybmV0Q2xpZW50IExpcXVpZENyeXN0YWwgJyArXG4gICAgICAgICdSb2JvdENvbnRyb2wgR1NNVm9pY2VDYWxsIEV0aGVybmV0VURQIEVzcGxvcmFURlQgJyArXG4gICAgICAgICdIdHRwQ2xpZW50IFJvYm90TW90b3IgV2lGaUNsaWVudCBHU01TY2FubmVyICcgK1xuICAgICAgICAnRmlsZVN5c3RlbSBTY2hlZHVsZXIgR1NNU2VydmVyIFl1bkNsaWVudCBZdW5TZXJ2ZXIgJyArXG4gICAgICAgICdJUEFkZHJlc3MgR1NNQ2xpZW50IEdTTU1vZGVtIEtleWJvYXJkIEV0aGVybmV0ICcgK1xuICAgICAgICAnQ29uc29sZSBHU01CYW5kIEVzcGxvcmEgU3RlcHBlciBQcm9jZXNzICcgK1xuICAgICAgICAnV2lGaVVEUCBHU01fU01TIE1haWxib3ggVVNCSG9zdCBGaXJtYXRhIFBJbWFnZSAnICtcbiAgICAgICAgJ0NsaWVudCBTZXJ2ZXIgR1NNUElOIEZpbGVJTyBCcmlkZ2UgU2VyaWFsICcgK1xuICAgICAgICAnRUVQUk9NIFN0cmVhbSBNb3VzZSBBdWRpbyBTZXJ2byBGaWxlIFRhc2sgJyArXG4gICAgICAgICdHUFJTIFdpRmkgV2lyZSBURlQgR1NNIFNQSSBTRCAnICtcbiAgICAgICAgJ3J1blNoZWxsQ29tbWFuZEFzeW5jaHJvbm91c2x5IGFuYWxvZ1dyaXRlUmVzb2x1dGlvbiAnICtcbiAgICAgICAgJ3JldHJpZXZlQ2FsbGluZ051bWJlciBwcmludEZpcm13YXJlVmVyc2lvbiAnICtcbiAgICAgICAgJ2FuYWxvZ1JlYWRSZXNvbHV0aW9uIHNlbmREaWdpdGFsUG9ydFBhaXIgJyArXG4gICAgICAgICdub0xpc3Rlbk9uTG9jYWxob3N0IHJlYWRKb3lzdGlja0J1dHRvbiBzZXRGaXJtd2FyZVZlcnNpb24gJyArXG4gICAgICAgICdyZWFkSm95c3RpY2tTd2l0Y2ggc2Nyb2xsRGlzcGxheVJpZ2h0IGdldFZvaWNlQ2FsbFN0YXR1cyAnICtcbiAgICAgICAgJ3Njcm9sbERpc3BsYXlMZWZ0IHdyaXRlTWljcm9zZWNvbmRzIGRlbGF5TWljcm9zZWNvbmRzICcgK1xuICAgICAgICAnYmVnaW5UcmFuc21pc3Npb24gZ2V0U2lnbmFsU3RyZW5ndGggcnVuQXN5bmNocm9ub3VzbHkgJyArXG4gICAgICAgICdnZXRBc3luY2hyb25vdXNseSBsaXN0ZW5PbkxvY2FsaG9zdCBnZXRDdXJyZW50Q2FycmllciAnICtcbiAgICAgICAgJ3JlYWRBY2NlbGVyb21ldGVyIG1lc3NhZ2VBdmFpbGFibGUgc2VuZERpZ2l0YWxQb3J0cyAnICtcbiAgICAgICAgJ2xpbmVGb2xsb3dDb25maWcgY291bnRyeU5hbWVXcml0ZSBydW5TaGVsbENvbW1hbmQgJyArXG4gICAgICAgICdyZWFkU3RyaW5nVW50aWwgcmV3aW5kRGlyZWN0b3J5IHJlYWRUZW1wZXJhdHVyZSAnICtcbiAgICAgICAgJ3NldENsb2NrRGl2aWRlciByZWFkTGlnaHRTZW5zb3IgZW5kVHJhbnNtaXNzaW9uICcgK1xuICAgICAgICAnYW5hbG9nUmVmZXJlbmNlIGRldGFjaEludGVycnVwdCBjb3VudHJ5TmFtZVJlYWQgJyArXG4gICAgICAgICdhdHRhY2hJbnRlcnJ1cHQgZW5jcnlwdGlvblR5cGUgcmVhZEJ5dGVzVW50aWwgJyArXG4gICAgICAgICdyb2JvdE5hbWVXcml0ZSByZWFkTWljcm9waG9uZSByb2JvdE5hbWVSZWFkIGNpdHlOYW1lV3JpdGUgJyArXG4gICAgICAgICd1c2VyTmFtZVdyaXRlIHJlYWRKb3lzdGlja1kgcmVhZEpveXN0aWNrWCBtb3VzZVJlbGVhc2VkICcgK1xuICAgICAgICAnb3Blbk5leHRGaWxlIHNjYW5OZXR3b3JrcyBub0ludGVycnVwdHMgZGlnaXRhbFdyaXRlICcgK1xuICAgICAgICAnYmVnaW5TcGVha2VyIG1vdXNlUHJlc3NlZCBpc0FjdGlvbkRvbmUgbW91c2VEcmFnZ2VkICcgK1xuICAgICAgICAnZGlzcGxheUxvZ29zIG5vQXV0b3Njcm9sbCBhZGRQYXJhbWV0ZXIgcmVtb3RlTnVtYmVyICcgK1xuICAgICAgICAnZ2V0TW9kaWZpZXJzIGtleWJvYXJkUmVhZCB1c2VyTmFtZVJlYWQgd2FpdENvbnRpbnVlICcgK1xuICAgICAgICAncHJvY2Vzc0lucHV0IHBhcnNlQ29tbWFuZCBwcmludFZlcnNpb24gcmVhZE5ldHdvcmtzICcgK1xuICAgICAgICAnd3JpdGVNZXNzYWdlIGJsaW5rVmVyc2lvbiBjaXR5TmFtZVJlYWQgcmVhZE1lc3NhZ2UgJyArXG4gICAgICAgICdzZXREYXRhTW9kZSBwYXJzZVBhY2tldCBpc0xpc3RlbmluZyBzZXRCaXRPcmRlciAnICtcbiAgICAgICAgJ2JlZ2luUGFja2V0IGlzRGlyZWN0b3J5IG1vdG9yc1dyaXRlIGRyYXdDb21wYXNzICcgK1xuICAgICAgICAnZGlnaXRhbFJlYWQgY2xlYXJTY3JlZW4gc2VyaWFsRXZlbnQgcmlnaHRUb0xlZnQgJyArXG4gICAgICAgICdzZXRUZXh0U2l6ZSBsZWZ0VG9SaWdodCByZXF1ZXN0RnJvbSBrZXlSZWxlYXNlZCAnICtcbiAgICAgICAgJ2NvbXBhc3NSZWFkIGFuYWxvZ1dyaXRlIGludGVycnVwdHMgV2lGaVNlcnZlciAnICtcbiAgICAgICAgJ2Rpc2Nvbm5lY3QgcGxheU1lbG9keSBwYXJzZUZsb2F0IGF1dG9zY3JvbGwgJyArXG4gICAgICAgICdnZXRQSU5Vc2VkIHNldFBJTlVzZWQgc2V0VGltZW91dCBzZW5kQW5hbG9nICcgK1xuICAgICAgICAncmVhZFNsaWRlciBhbmFsb2dSZWFkIGJlZ2luV3JpdGUgY3JlYXRlQ2hhciAnICtcbiAgICAgICAgJ21vdG9yc1N0b3Aga2V5UHJlc3NlZCB0ZW1wb1dyaXRlIHJlYWRCdXR0b24gJyArXG4gICAgICAgICdzdWJuZXRNYXNrIGRlYnVnUHJpbnQgbWFjQWRkcmVzcyB3cml0ZUdyZWVuICcgK1xuICAgICAgICAncmFuZG9tU2VlZCBhdHRhY2hHUFJTIHJlYWRTdHJpbmcgc2VuZFN0cmluZyAnICtcbiAgICAgICAgJ3JlbW90ZVBvcnQgcmVsZWFzZUFsbCBtb3VzZU1vdmVkIGJhY2tncm91bmQgJyArXG4gICAgICAgICdnZXRYQ2hhbmdlIGdldFlDaGFuZ2UgYW5zd2VyQ2FsbCBnZXRSZXN1bHQgJyArXG4gICAgICAgICd2b2ljZUNhbGwgZW5kUGFja2V0IGNvbnN0cmFpbiBnZXRTb2NrZXQgd3JpdGVKU09OICcgK1xuICAgICAgICAnZ2V0QnV0dG9uIGF2YWlsYWJsZSBjb25uZWN0ZWQgZmluZFVudGlsIHJlYWRCeXRlcyAnICtcbiAgICAgICAgJ2V4aXRWYWx1ZSByZWFkR3JlZW4gd3JpdGVCbHVlIHN0YXJ0TG9vcCBJUEFkZHJlc3MgJyArXG4gICAgICAgICdpc1ByZXNzZWQgc2VuZFN5c2V4IHBhdXNlTW9kZSBnYXRld2F5SVAgc2V0Q3Vyc29yICcgK1xuICAgICAgICAnZ2V0T2VtS2V5IHR1bmVXcml0ZSBub0Rpc3BsYXkgbG9hZEltYWdlIHN3aXRjaFBJTiAnICtcbiAgICAgICAgJ29uUmVxdWVzdCBvblJlY2VpdmUgY2hhbmdlUElOIHBsYXlGaWxlIG5vQnVmZmVyICcgK1xuICAgICAgICAncGFyc2VJbnQgb3ZlcmZsb3cgY2hlY2tQSU4ga25vYlJlYWQgYmVnaW5URlQgJyArXG4gICAgICAgICdiaXRDbGVhciB1cGRhdGVJUiBiaXRXcml0ZSBwb3NpdGlvbiB3cml0ZVJHQiAnICtcbiAgICAgICAgJ2hpZ2hCeXRlIHdyaXRlUmVkIHNldFNwZWVkIHJlYWRCbHVlIG5vU3Ryb2tlICcgK1xuICAgICAgICAncmVtb3RlSVAgdHJhbnNmZXIgc2h1dGRvd24gaGFuZ0NhbGwgYmVnaW5TTVMgJyArXG4gICAgICAgICdlbmRXcml0ZSBhdHRhY2hlZCBtYWludGFpbiBub0N1cnNvciBjaGVja1JlZyAnICtcbiAgICAgICAgJ2NoZWNrUFVLIHNoaWZ0T3V0IGlzVmFsaWQgc2hpZnRJbiBwdWxzZUluICcgK1xuICAgICAgICAnY29ubmVjdCBwcmludGxuIGxvY2FsSVAgcGluTW9kZSBnZXRJTUVJICcgK1xuICAgICAgICAnZGlzcGxheSBub0JsaW5rIHByb2Nlc3MgZ2V0QmFuZCBydW5uaW5nIGJlZ2luU0QgJyArXG4gICAgICAgICdkcmF3Qk1QIGxvd0J5dGUgc2V0QmFuZCByZWxlYXNlIGJpdFJlYWQgcHJlcGFyZSAnICtcbiAgICAgICAgJ3BvaW50VG8gcmVhZFJlZCBzZXRNb2RlIG5vRmlsbCByZW1vdmUgbGlzdGVuICcgK1xuICAgICAgICAnc3Ryb2tlIGRldGFjaCBhdHRhY2ggbm9Ub25lIGV4aXN0cyBidWZmZXIgJyArXG4gICAgICAgICdoZWlnaHQgYml0U2V0IGNpcmNsZSBjb25maWcgY3Vyc29yIHJhbmRvbSAnICtcbiAgICAgICAgJ0lScmVhZCBzZXRETlMgZW5kU01TIGdldEtleSBtaWNyb3MgJyArXG4gICAgICAgICdtaWxsaXMgYmVnaW4gcHJpbnQgd3JpdGUgcmVhZHkgZmx1c2ggd2lkdGggJyArXG4gICAgICAgICdpc1BJTiBibGluayBjbGVhciBwcmVzcyBta2RpciBybWRpciBjbG9zZSAnICtcbiAgICAgICAgJ3BvaW50IHlpZWxkIGltYWdlIEJTU0lEIGNsaWNrIGRlbGF5ICcgK1xuICAgICAgICAncmVhZCB0ZXh0IG1vdmUgcGVlayBiZWVwIHJlY3QgbGluZSBvcGVuICcgK1xuICAgICAgICAnc2VlayBmaWxsIHNpemUgdHVybiBzdG9wIGhvbWUgZmluZCAnICtcbiAgICAgICAgJ3N0ZXAgdG9uZSBzcXJ0IFJTU0kgU1NJRCAnICtcbiAgICAgICAgJ2VuZCBiaXQgdGFuIGNvcyBzaW4gcG93IG1hcCBhYnMgbWF4ICcgK1xuICAgICAgICAnbWluIGdldCBydW4gcHV0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdESUdJVEFMX01FU1NBR0UgRklSTUFUQV9TVFJJTkcgQU5BTE9HX01FU1NBR0UgJyArXG4gICAgICAgICdSRVBPUlRfRElHSVRBTCBSRVBPUlRfQU5BTE9HIElOUFVUX1BVTExVUCAnICtcbiAgICAgICAgJ1NFVF9QSU5fTU9ERSBJTlRFUk5BTDJWNTYgU1lTVEVNX1JFU0VUIExFRF9CVUlMVElOICcgK1xuICAgICAgICAnSU5URVJOQUwxVjEgU1lTRVhfU1RBUlQgSU5URVJOQUwgRVhURVJOQUwgJyArXG4gICAgICAgICdERUZBVUxUIE9VVFBVVCBJTlBVVCBISUdIIExPVydcbiAgfTtcblxuICB2YXIgQVJEVUlOTyA9IGhsanMucmVxdWlyZUxhbmd1YWdlKCdjcHAnKS5yYXdEZWZpbml0aW9uKCk7XG5cbiAgdmFyIGt3cyA9IEFSRFVJTk8ua2V5d29yZHM7XG5cbiAga3dzLmtleXdvcmQgKz0gJyAnICsgQVJEVUlOT19LVy5rZXl3b3JkO1xuICBrd3MubGl0ZXJhbCArPSAnICcgKyBBUkRVSU5PX0tXLmxpdGVyYWw7XG4gIGt3cy5idWlsdF9pbiArPSAnICcgKyBBUkRVSU5PX0tXLmJ1aWx0X2luO1xuXG4gIHJldHVybiBBUkRVSU5PO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICAvL2xvY2FsIGxhYmVsczogJT9bRkJdP1tBVF0/XFxkezEsMn1cXHcrXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ2FybSddLFxuICAgIGxleGVtZXM6ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbWV0YTpcbiAgICAgICAgLy9HTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmFybSAudGh1bWIgLmNvZGUxNiAuY29kZTMyIC5mb3JjZV90aHVtYiAudGh1bWJfZnVuYyAubHRvcmcgJytcbiAgICAgICAgLy9BUk0gZGlyZWN0aXZlc1xuICAgICAgICAnQUxJQVMgQUxJR04gQVJNIEFSRUEgQVNTRVJUIEFUVFIgQ04gQ09ERSBDT0RFMTYgQ09ERTMyIENPTU1PTiBDUCBEQVRBIERDQiBEQ0QgRENEVSBEQ0RPIERDRkQgRENGRFUgRENJIERDUSBEQ1FVIERDVyBEQ1dVIEROIEVMSUYgRUxTRSBFTkQgRU5ERlVOQyBFTkRJRiBFTkRQIEVOVFJZIEVRVSBFWFBPUlQgRVhQT1JUQVMgRVhURVJOIEZJRUxEIEZJTEwgRlVOQ1RJT04gR0JMQSBHQkxMIEdCTFMgR0VUIEdMT0JBTCBJRiBJTVBPUlQgSU5DQklOIElOQ0xVREUgSU5GTyBLRUVQIExDTEEgTENMTCBMQ0xTIExUT1JHIE1BQ1JPIE1BUCBNRU5EIE1FWElUIE5PRlAgT1BUIFBSRVNFUlZFOCBQUk9DIFFOIFJFQURPTkxZIFJFTE9DIFJFUVVJUkUgUkVRVUlSRTggUkxJU1QgRk4gUk9VVCBTRVRBIFNFVEwgU0VUUyBTTiBTUEFDRSBTVUJUIFRIVU1CIFRIVU1CWCBUVEwgV0hJTEUgV0VORCAnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnKyAvL3N0YW5kYXJkIHJlZ2lzdGVyc1xuICAgICAgICAncGMgbHIgc3AgaXAgc2wgc2IgZnAgJysgLy90eXBpY2FsIHJlZ3MgcGx1cyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICdhMSBhMiBhMyBhNCB2MSB2MiB2MyB2NCB2NSB2NiB2NyB2OCBmMCBmMSBmMiBmMyBmNCBmNSBmNiBmNyAnKyAvL21vcmUgcmVncyBhbmQgZnBcbiAgICAgICAgJ3AwIHAxIHAyIHAzIHA0IHA1IHA2IHA3IHA4IHA5IHAxMCBwMTEgcDEyIHAxMyBwMTQgcDE1ICcrIC8vY29wcm9jZXNzb3IgcmVnc1xuICAgICAgICAnYzAgYzEgYzIgYzMgYzQgYzUgYzYgYzcgYzggYzkgYzEwIGMxMSBjMTIgYzEzIGMxNCBjMTUgJysgLy9tb3JlIGNvcHJvY1xuICAgICAgICAncTAgcTEgcTIgcTMgcTQgcTUgcTYgcTcgcTggcTkgcTEwIHExMSBxMTIgcTEzIHExNCBxMTUgJysgLy9hZHZhbmNlZCBTSU1EIE5FT04gcmVnc1xuXG4gICAgICAgIC8vcHJvZ3JhbSBzdGF0dXMgcmVnaXN0ZXJzXG4gICAgICAgICdjcHNyX2MgY3Bzcl94IGNwc3JfcyBjcHNyX2YgY3Bzcl9jeCBjcHNyX2N4cyBjcHNyX3hzIGNwc3JfeHNmIGNwc3Jfc2YgY3Bzcl9jeHNmICcrXG4gICAgICAgICdzcHNyX2Mgc3Bzcl94IHNwc3JfcyBzcHNyX2Ygc3Bzcl9jeCBzcHNyX2N4cyBzcHNyX3hzIHNwc3JfeHNmIHNwc3Jfc2Ygc3Bzcl9jeHNmICcrXG5cbiAgICAgICAgLy9ORU9OIGFuZCBWRlAgcmVnaXN0ZXJzXG4gICAgICAgICdzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCBzOSBzMTAgczExIHMxMiBzMTMgczE0IHMxNSAnK1xuICAgICAgICAnczE2IHMxNyBzMTggczE5IHMyMCBzMjEgczIyIHMyMyBzMjQgczI1IHMyNiBzMjcgczI4IHMyOSBzMzAgczMxICcrXG4gICAgICAgICdkMCBkMSBkMiBkMyBkNCBkNSBkNiBkNyBkOCBkOSBkMTAgZDExIGQxMiBkMTMgZDE0IGQxNSAnK1xuICAgICAgICAnZDE2IGQxNyBkMTggZDE5IGQyMCBkMjEgZDIyIGQyMyBkMjQgZDI1IGQyNiBkMjcgZDI4IGQyOSBkMzAgZDMxICcgK1xuXG4gICAgICAgICd7UEN9IHtWQVJ9IHtUUlVFfSB7RkFMU0V9IHtPUFR9IHtDT05GSUd9IHtFTkRJQU59IHtDT0RFU0laRX0ge0NQVX0ge0ZQVX0ge0FSQ0hJVEVDVFVSRX0ge1BDU1RPUkVPRkZTRVR9IHtBUk1BU01fVkVSU0lPTn0ge0lOVEVSfSB7Uk9QSX0ge1JXUEl9IHtTV1NUfSB7Tk9TV1NUfSAuIEAnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignKyAgICAgLy9tbmVtb25pY3NcbiAgICAgICAgICAgICdhZGN8JytcbiAgICAgICAgICAgICcocWQ/fHNoP3x1W3FoXT8pP2FkZCg4fDE2KT98dXNhZGE/OHwocXxzaD98dVtxaF0/KT8oYXN8c2EpeHwnK1xuICAgICAgICAgICAgJ2FuZHxhZHJsP3xzYmN8cnNbYmNdfGFzcnxiW2x4XT98Ymx4fGJ4anxjYm4/enx0YltiaF18YmljfCcrXG4gICAgICAgICAgICAnYmZjfGJmaXxbc3VdYmZ4fGJrcHR8Y2RwMj98Y2x6fGNscmV4fGNtcHxjbW58Y3BzaVtlZF18Y3BzfCcrXG4gICAgICAgICAgICAnc2V0ZW5kfGRiZ3xkbWJ8ZHNifGVvcnxpc2J8aXRbdGVdezAsM318bHNsfGxzcnxyb3J8cnJ4fCcrXG4gICAgICAgICAgICAnbGRtKChbaWRdW2FiXSl8Zltkc10pP3xsZHIoKHN8ZXgpP1tiaGRdKT98bW92dD98bXZufG1yYXxtYXJ8JytcbiAgICAgICAgICAgICdtdWx8W3VzXW11bGx8c211bFtid3RdW2J0XXxzbXVbYXNdZHxzbW11bHxzbW1sYXwnK1xuICAgICAgICAgICAgJ21sYXx1bWxhYWx8c21sYWw/KFt3YnRdW2J0XXxkKXxtbHN8c21sc2w/W2RzXXxzbWN8c3ZjfHNldnwnK1xuICAgICAgICAgICAgJ21pYShbYnRdezJ9fHBoKT98bXJyP2MyP3xtY3JyMj98bXJzfG1zcnxvcnJ8b3JufHBraCh0YnxidCl8cmJpdHwnK1xuICAgICAgICAgICAgJ3JldigxNnxzaCk/fHNlbHxbc3Vdc2F0KDE2KT98bm9wfHBvcHxwdXNofHJmZShbaWRdW2FiXSk/fCcrXG4gICAgICAgICAgICAnc3RtKFtpZF1bYWJdKT98c3RyKGV4KT9bYmhkXT98KHFkPyk/c3VifChzaD98cXx1W3FoXT8pP3N1Yig4fDE2KXwnK1xuICAgICAgICAgICAgJ1tzdV14dChhP2h8YT9iKDE2KT8pfHNycyhbaWRdW2FiXSk/fHN3cGI/fHN3aXxzbWl8dHN0fHRlcXwnK1xuICAgICAgICAgICAgJ3dmZXx3Zml8eWllbGQnK1xuICAgICAgICAnKScrXG4gICAgICAgICcoZXF8bmV8Y3N8Y2N8bWl8cGx8dnN8dmN8aGl8bHN8Z2V8bHR8Z3R8bGV8YWx8aHN8bG8pPycrIC8vY29uZGl0aW9uIGNvZGVzXG4gICAgICAgICdbc3B0cnhdPycgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGVnYWwgcG9zdGZpeGVzXG4gICAgICAgIGVuZDogJ1xcXFxzJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnWztAXScsICckJywge3JlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJyxcbiAgICAgICAgZW5kOiAnW15cXFxcXFxcXF1cXCcnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcfCcsIGVuZDogJ1xcXFx8JyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAge2JlZ2luOiAnWyMkPV0/MHhbMC05YS1mXSsnfSwgLy9oZXhcbiAgICAgICAgICAgIHtiZWdpbjogJ1sjJD1dPzBiWzAxXSsnfSwgICAgIC8vYmluXG4gICAgICAgICAgICB7YmVnaW46ICdbIyQ9XVxcXFxkKyd9LCAgICAgICAgLy9saXRlcmFsXG4gICAgICAgICAgICB7YmVnaW46ICdcXFxcYlxcXFxkKyd9ICAgICAgICAgICAvL2JhcmUgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ15bYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSsnfSwgLy9BUk0gc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdeXFxcXHMqW2Etel9cXFxcLlxcXFwkXVthLXowLTlfXFxcXC5cXFxcJF0rOid9LCAvL0dOVSBBUk0gc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdbPSNdXFxcXHcrJyB9ICAvL2xhYmVsIHJlZmVyZW5jZVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgWE1MX0lERU5UX1JFID0gJ1tBLVphLXowLTlcXFxcLl86LV0rJztcbiAgdmFyIFhNTF9FTlRJVElFUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnJlthLXpdKzt8JiNbMC05XSs7fCYjeFthLWYwLTldKzsnXG4gIH07XG4gIHZhciBYTUxfTUVUQV9LRVlXT1JEUyA9IHtcblx0ICBiZWdpbjogJ1xcXFxzJyxcblx0ICBjb250YWluczpbXG5cdCAgICB7XG5cdCAgICAgIGNsYXNzTmFtZTogJ21ldGEta2V5d29yZCcsXG5cdCAgICAgIGJlZ2luOiAnIz9bYS16X11bYS16MS05Xy1dKycsXG5cdCAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICB9XG5cdCAgXVxuICB9O1xuICB2YXIgWE1MX01FVEFfUEFSX0tFWVdPUkRTID0gaGxqcy5pbmhlcml0KFhNTF9NRVRBX0tFWVdPUkRTLCB7YmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ30pO1xuICB2YXIgQVBPU19NRVRBX1NUUklOR19NT0RFID0gaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pO1xuICB2YXIgUVVPVEVfTUVUQV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSk7XG4gIHZhciBUQUdfSU5URVJOQUxTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC88LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiBYTUxfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89XFxzKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvLCBjb250YWluczogW1hNTF9FTlRJVElFU119LFxuICAgICAgICAgICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy8sIGNvbnRhaW5zOiBbWE1MX0VOVElUSUVTXX0sXG4gICAgICAgICAgICAgIHtiZWdpbjogL1teXFxzXCInPTw+YF0rL31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydodG1sJywgJ3hodG1sJywgJ3JzcycsICdhdG9tJywgJ3hqYicsICd4c2QnLCAneHNsJywgJ3BsaXN0JywgJ3dzZicsICdzdmcnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJzwhW2Etel0nLCBlbmQ6ICc+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgY29udGFpbnM6IFtcblx0XHRcdFx0ICBYTUxfTUVUQV9LRVlXT1JEUyxcblx0XHRcdFx0ICBRVU9URV9NRVRBX1NUUklOR19NT0RFLFxuXHRcdFx0XHQgIEFQT1NfTUVUQV9TVFJJTkdfTU9ERSxcblx0XHRcdFx0XHRYTUxfTUVUQV9QQVJfS0VZV09SRFMsXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdCAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcblx0XHRcdFx0XHQgIGNvbnRhaW5zOltcblx0XHRcdFx0XHRcdCAge1xuXHRcdFx0XHRcdCAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuXHRcdFx0XHRcdCAgICAgIGJlZ2luOiAnPCFbYS16XScsIGVuZDogJz4nLFxuXHRcdFx0XHRcdCAgICAgIGNvbnRhaW5zOiBbXG5cdFx0XHRcdFx0ICAgICAgICBYTUxfTUVUQV9LRVlXT1JEUyxcblx0XHRcdFx0XHQgICAgICAgIFhNTF9NRVRBX1BBUl9LRVlXT1JEUyxcblx0XHRcdFx0XHQgICAgICAgIFFVT1RFX01FVEFfU1RSSU5HX01PREUsXG5cdFx0XHRcdFx0ICAgICAgICBBUE9TX01FVEFfU1RSSU5HX01PREVcblx0XHRcdFx0XHRcdCAgICBdXG5cdFx0XHQgICAgICAgIH1cblx0XHRcdFx0XHQgIF1cblx0XHRcdFx0ICB9XG5cdFx0XHRcdF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc8IS0tJyxcbiAgICAgICAgJy0tPicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPFxcXFwhXFxcXFtDREFUQVxcXFxbJywgZW5kOiAnXFxcXF1cXFxcXT4nLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgWE1MX0VOVElUSUVTLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC88XFw/eG1sLywgZW5kOiAvXFw/Pi8sIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPFxcPyhwaHApPy8sIGVuZDogL1xcPz4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BocCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcGhwIGNsb3NpbmcgdGFnID8+IHRvIGNsb3NlIHRoZSBQSFAgYmxvY2sgd2hlblxuICAgICAgICAgIC8vIGluc2lkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBibG9ja3M6XG4gICAgICAgICAge2JlZ2luOiAnL1xcXFwqJywgZW5kOiAnXFxcXCovJywgc2tpcDogdHJ1ZX0sXG4gICAgICAgICAge2JlZ2luOiAnYlwiJywgZW5kOiAnXCInLCBza2lwOiB0cnVlfSxcbiAgICAgICAgICB7YmVnaW46ICdiXFwnJywgZW5kOiAnXFwnJywgc2tpcDogdHJ1ZX0sXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGwsIGNsYXNzTmFtZTogbnVsbCwgY29udGFpbnM6IG51bGwsIHNraXA6IHRydWV9KSxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGwsIGNsYXNzTmFtZTogbnVsbCwgY29udGFpbnM6IG51bGwsIHNraXA6IHRydWV9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICAvKlxuICAgICAgICBUaGUgbG9va2FoZWFkIHBhdHRlcm4gKD89Li4uKSBlbnN1cmVzIHRoYXQgJ2JlZ2luJyBvbmx5IG1hdGNoZXNcbiAgICAgICAgJzxzdHlsZScgYXMgYSBzaW5nbGUgd29yZCwgZm9sbG93ZWQgYnkgYSB3aGl0ZXNwYWNlIG9yIGFuXG4gICAgICAgIGVuZGluZyBicmFrZXQuIFRoZSAnJCcgaXMgbmVlZGVkIGZvciB0aGUgbGV4ZW1lIHRvIGJlIHJlY29nbml6ZWRcbiAgICAgICAgYnkgaGxqcy5zdWJNb2RlKCkgdGhhdCB0ZXN0cyBsZXhlbWVzIG91dHNpZGUgdGhlIHN0cmVhbS5cbiAgICAgICAgKi9cbiAgICAgICAgYmVnaW46ICc8c3R5bGUoPz1cXFxcc3w+KScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdzdHlsZSd9LFxuICAgICAgICBjb250YWluczogW1RBR19JTlRFUk5BTFNdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc8L3N0eWxlPicsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogWydjc3MnLCAneG1sJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZSA8c3R5bGUgdGFnIGFib3V0IHRoZSBsb29rYWhlYWQgcGF0dGVyblxuICAgICAgICBiZWdpbjogJzxzY3JpcHQoPz1cXFxcc3w+KScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdzY3JpcHQnfSxcbiAgICAgICAgY29udGFpbnM6IFtUQUdfSU5URVJOQUxTXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFw8XFwvc2NyaXB0XFw+JywgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiBbJ2FjdGlvbnNjcmlwdCcsICdqYXZhc2NyaXB0JywgJ2hhbmRsZWJhcnMnLCAneG1sJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICc8Lz8nLCBlbmQ6ICcvPz4nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCBiZWdpbjogL1teXFwvPjxcXHNdKy8sIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgVEFHX0lOVEVSTkFMU1xuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2Fkb2MnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gYmxvY2sgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXi97NCx9XFxcXG4nLFxuICAgICAgICAnXFxcXG4vezQsfSQnLFxuICAgICAgICAvLyBjYW4gYWxzbyBiZSBkb25lIGFzLi4uXG4gICAgICAgIC8vJ14vezQsfSQnLFxuICAgICAgICAvLydeL3s0LH0kJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIC8vIGxpbmUgY29tbWVudFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXi8vJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvLyB0aXRsZVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFwuXFxcXHcuKiQnXG4gICAgICB9LFxuICAgICAgLy8gZXhhbXBsZSwgYWRtb25pdGlvbiAmIHNpZGViYXIgYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXls9XFxcXCpdezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5eWz1cXFxcKl17NCx9JCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBoZWFkaW5nc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdeKD17MSw1fSkgLis/KCBcXFxcMSk/JCd9LFxuICAgICAgICAgIHtiZWdpbjogJ15bXlxcXFxbXFxcXF1cXFxcbl0rP1xcXFxuWz1cXFxcLX5cXFxcXlxcXFwrXXsyLH0kJ30sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBkb2N1bWVudCBhdHRyaWJ1dGVzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ146Lis/OicsXG4gICAgICAgIGVuZDogJ1xcXFxzJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGJsb2NrIGF0dHJpYnV0ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxbLis/XFxcXF0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gcXVvdGVibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ15fezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5fezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gbGlzdGluZyBhbmQgbGl0ZXJhbCBibG9ja3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnXltcXFxcLVxcXFwuXXs0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuW1xcXFwtXFxcXC5dezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gcGFzc3Rocm91Z2ggYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlxcXFwrezQsfVxcXFxuJyxcbiAgICAgICAgZW5kOiAnXFxcXG5cXFxcK3s0LH0kJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+JyxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RzIChjYW4gb25seSBjYXB0dXJlIGluZGljYXRvcnMpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXihcXFxcKit8XFxcXC0rfFxcXFwuK3xbXlxcXFxuXSs/OjopXFxcXHMrJ1xuICAgICAgfSxcbiAgICAgIC8vIGFkbW9uaXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeKE5PVEV8VElQfElNUE9SVEFOVHxXQVJOSU5HfENBVVRJT04pOlxcXFxzKycsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBpbmxpbmUgc3Ryb25nXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cm9uZycsXG4gICAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNrIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXFxcXEJcXFxcKig/IVtcXFxcKlxcXFxzXSknLFxuICAgICAgICBlbmQ6ICcoXFxcXG57Mn18XFxcXCopJyxcbiAgICAgICAgLy8gYWxsb3cgZXNjYXBlZCBhc3RlcmlzayBmb2xsb3dlZCBieSB3b3JkIGNoYXJcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxcXFxcKlxcXFx3JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBlbXBoYXNpc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIHF1b3RlIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXFxcXEJcXCcoPyFbXFwnXFxcXHNdKScsXG4gICAgICAgIGVuZDogJyhcXFxcbnsyfXxcXCcpJyxcbiAgICAgICAgLy8gYWxsb3cgZXNjYXBlZCBzaW5nbGUgcXVvdGUgZm9sbG93ZWQgYnkgd29yZCBjaGFyXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcXFxcXFxcJ1xcXFx3JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5saW5lIGVtcGhhc2lzIChhbHQpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgICAgLy8gbXVzdCBub3QgZm9sbG93IGEgd29yZCBjaGFyYWN0ZXIgb3IgYmUgZm9sbG93ZWQgYnkgYW4gdW5kZXJsaW5lIG9yIHNwYWNlXG4gICAgICAgIGJlZ2luOiAnXyg/IVtfXFxcXHNdKScsXG4gICAgICAgIGVuZDogJyhcXFxcbnsyfXxfKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBzbWFydCBxdW90ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IFwiYGAuKz8nJ1wifSxcbiAgICAgICAgICB7YmVnaW46IFwiYC4rPydcIn1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBjb2RlIHNuaXBwZXRzIChUT0RPIHNob3VsZCBnZXQgc2FtZSB0cmVhdG1lbnQgYXMgc3Ryb25nIGFuZCBlbXBoYXNpcylcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnKGAuKz9gfFxcXFwrLis/XFxcXCspJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaW5kZW50ZWQgbGl0ZXJhbCBibG9ja1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb2RlJyxcbiAgICAgICAgYmVnaW46ICdeWyBcXFxcdF0nLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gaG9yaXpvbnRhbCBydWxlc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXCd7Myx9WyBcXFxcdF0qJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBpbWFnZXMgYW5kIGxpbmtzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKGxpbms6KT8oaHR0cHxodHRwc3xmdHB8ZmlsZXxpcmN8aW1hZ2U6Pyk6XFxcXFMrXFxcXFsuKj9cXFxcXScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKGxpbmt8aW1hZ2U6Pyk6JyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFx3JyxcbiAgICAgICAgICAgIGVuZDogJ1teXFxcXFtdKycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxbJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID1cbiAgICAnZmFsc2Ugc3luY2hyb25pemVkIGludCBhYnN0cmFjdCBmbG9hdCBwcml2YXRlIGNoYXIgYm9vbGVhbiBzdGF0aWMgbnVsbCBpZiBjb25zdCAnICtcbiAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkICcgK1xuICAgICdlbnVtIGVsc2UgZXh0ZW5kcyBpbXBsZW1lbnRzIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgJyArXG4gICAgJ2Fzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByaXZpbGVnZWQgJyArXG4gICAgJ2FzcGVjdE9mIGFkdmljZWV4ZWN1dGlvbiBwcm9jZWVkIGNmbG93YmVsb3cgY2Zsb3cgaW5pdGlhbGl6YXRpb24gcHJlaW5pdGlhbGl6YXRpb24gJyArXG4gICAgJ3N0YXRpY2luaXRpYWxpemF0aW9uIHdpdGhpbmNvZGUgdGFyZ2V0IHdpdGhpbiBleGVjdXRpb24gZ2V0V2l0aGluVHlwZU5hbWUgaGFuZGxlciAnICtcbiAgICAndGhpc0pvaW5Qb2ludCB0aGlzSm9pblBvaW50U3RhdGljUGFydCB0aGlzRW5jbG9zaW5nSm9pblBvaW50U3RhdGljUGFydCBkZWNsYXJlIHBhcmVudHMgJytcbiAgICAnd2FybmluZyBlcnJvciBzb2Z0IHByZWNlZGVuY2UgdGhpc0FzcGVjdEluc3RhbmNlJztcbiAgdmFyIFNIT1JUS0VZUyA9ICdnZXQgc2V0IGFyZ3MgY2FsbCc7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHMgOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsIDogLzxcXC98Iy8sXG4gICAgY29udGFpbnMgOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gZWF0IHVwIEAncyBpbiBlbWFpbHMgdG8gcHJldmVudCB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgZG9jdGFnc1xuICAgICAgICAgICAgICBiZWdpbjogL1xcdytALywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW4gOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lIDogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkcyA6ICdhc3BlY3QnLFxuICAgICAgICBlbmQgOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kIDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbCA6IC9bOjtcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzIDogJ2V4dGVuZHMgaW1wbGVtZW50cyBwZXJ0eXBld2l0aGluIHBlcnRoaXMgcGVydGFyZ2V0IHBlcmNmbG93YmVsb3cgcGVyY2Zsb3cgaXNzaW5nbGV0b24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbiA6IC9cXChbXlxcKV0qLyxcbiAgICAgICAgICAgIGVuZCA6IC9bKV0rLyxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMgKyAnICcgKyBTSE9SVEtFWVMsXG4gICAgICAgICAgICBleGNsdWRlRW5kIDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZSA6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHMgOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgZW5kIDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZCA6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAga2V5d29yZHMgOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgaWxsZWdhbCA6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtiZWdpbktleXdvcmRzIDogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEFzcGVjdEogQ29uc3RydWN0c1xuICAgICAgICBiZWdpbktleXdvcmRzIDogJ3BvaW50Y3V0IGFmdGVyIGJlZm9yZSBhcm91bmQgdGhyb3dpbmcgcmV0dXJuaW5nJyxcbiAgICAgICAgZW5kIDogL1spXS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQgOiBmYWxzZSxcbiAgICAgICAgaWxsZWdhbCA6IC9bXCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW4gOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgICAgICAgICAgcmV0dXJuQmVnaW4gOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnMgOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbiA6IC9bOl0vLFxuICAgICAgICByZXR1cm5CZWdpbiA6IHRydWUsXG4gICAgICAgIGVuZCA6IC9beztdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kIDogZmFsc2UsXG4gICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgICAgIGlsbGVnYWwgOiAvW1wiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luIDogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMgKyAnICcgKyBTSE9SVEtFWVMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBwcmV2ZW50cyAnbmV3IE5hbWUoLi4uKSwgb3IgdGhyb3cgLi4uJyBmcm9tIGJlaW5nIHJlY29nbml6ZWQgYXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHMgOiAnbmV3IHRocm93JyxcbiAgICAgICAgcmVsZXZhbmNlIDogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIGNsYXNzIGlzIGEgYml0IGRpZmZlcmVudCBmb3IgQXNwZWN0SiBjb21wYXJlZCB0byB0aGUgSmF2YSBsYW5ndWFnZVxuICAgICAgICBjbGFzc05hbWUgOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbiA6IC9cXHcrICtcXHcrKFxcLik/XFx3K1xccypcXChbXlxcKV0qXFwpXFxzKigodGhyb3dzKVtcXHdcXHMsXSspP1tcXHs7XS8sXG4gICAgICAgIHJldHVybkJlZ2luIDogdHJ1ZSxcbiAgICAgICAgZW5kIDogL1t7Oz1dLyxcbiAgICAgICAga2V5d29yZHMgOiBLRVlXT1JEUyxcbiAgICAgICAgZXhjbHVkZUVuZCA6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luIDogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zIDogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lIDogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbiA6IC9cXCgvLCBlbmQgOiAvXFwpLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIC8vIGFubm90YXRpb24gaXMgYWxzbyB1c2VkIGluIHRoaXMgbGFuZ3VhZ2VcbiAgICAgICAgY2xhc3NOYW1lIDogJ21ldGEnLFxuICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCQUNLVElDS19FU0NBUEUgPSB7XG4gICAgYmVnaW46ICdgW1xcXFxzXFxcXFNdJ1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbICdhaGsnIF0sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdCcmVhayBDb250aW51ZSBDcml0aWNhbCBFeGl0IEV4aXRBcHAgR29zdWIgR290byBOZXcgT25FeGl0IFBhdXNlIHJldHVybiBTZXRCYXRjaExpbmVzIFNldFRpbWVyIFN1c3BlbmQgVGhyZWFkIFRocm93IFVudGlsIGFoa19pZCBhaGtfY2xhc3MgYWhrX3BpZCBhaGtfZXhlIGFoa19ncm91cCcsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBOT1QgQU5EIE9SJyxcbiAgICAgIGJ1aWx0X2luOiAnQ29tU3BlYyBDbGlwYm9hcmQgQ2xpcGJvYXJkQWxsIEVycm9yTGV2ZWwnLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tUSUNLX0VTQ0FQRSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y29udGFpbnM6IFtCQUNLVElDS19FU0NBUEVdfSksXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsIC8vc3Vic3Qgd291bGQgYmUgdGhlIG1vc3QgYWNjdXJhdGUgaG93ZXZlciBmYWlscyB0aGUgcG9pbnQgb2YgaGlnaGxpZ2h0aW5nLiB2YXJpYWJsZSBpcyBjb21wYXJhYmx5IHRoZSBtb3N0IGFjY3VyYXRlIHRoYXQgYWN0dWFsbHkgaGFzIHNvbWUgZWZmZWN0XG4gICAgICAgIGJlZ2luOiAnJVthLXpBLVowLTkjXyRAXSslJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcdytcXFxccyooLHwlKSdcbiAgICAgICAgLy9JIGRvbid0IHJlYWxseSBrbm93IGlmIHRoaXMgaXMgdG90YWxseSByZWxldmFudFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLCAvL3N5bWJvbCB3b3VsZCBiZSBtb3N0IGFjY3VyYXRlIGhvd2V2ZXIgaXMgaGlnbGlnaHRlZCBqdXN0IGxpa2UgYnVpbHRfaW4gYW5kIHRoYXQgbWFrZXMgdXAgYSBsb3Qgb2YgQXV0b0hvdGtleSBjb2RlXG5cdFx0ICAgICAgICAgICAgICAgICAgICAgICAgLy9tZWFuaW5nIHRoYXQgaXQgd291bGQgZmFpbCB0byBoaWdobGlnaHQgYW55dGhpbmdcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdeW15cXFxcblwiO10rOjooPyE9KSd9LFxuICAgICAgICAgIHtiZWdpbjogJ15bXlxcXFxuXCI7XSs6KD8hPSknLCByZWxldmFuY2U6IDB9IC8vIHplcm8gcmVsZXZhbmNlIGFzIGl0IGNhdGNoZXMgYSBsb3Qgb2YgdGhpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93ZWQgYnkgYSBzaW5nbGUgJzonIGluIG1hbnkgbGFuZ3VhZ2VzXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqI1xcXFx3KycsIGVuZDonJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblx0ICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ0FfW2EtekEtWjAtOV0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc2VjdXRpdmUgY29tbWFzLCBub3QgZm9yIGhpZ2hsaWdodGluZyBidXQganVzdCBmb3IgcmVsZXZhbmNlXG4gICAgICAgIGJlZ2luOiAnLFxcXFxzKiwnXG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBLRVlXT1JEUyA9ICdCeVJlZiBDYXNlIENvbnN0IENvbnRpbnVlQ2FzZSBDb250aW51ZUxvb3AgJyArXG4gICAgICAgICdEZWZhdWx0IERpbSBEbyBFbHNlIEVsc2VJZiBFbmRGdW5jIEVuZElmIEVuZFNlbGVjdCAnICtcbiAgICAgICAgJ0VuZFN3aXRjaCBFbmRXaXRoIEVudW0gRXhpdCBFeGl0TG9vcCBGb3IgRnVuYyAnICtcbiAgICAgICAgJ0dsb2JhbCBJZiBJbiBMb2NhbCBOZXh0IFJlRGltIFJldHVybiBTZWxlY3QgU3RhdGljICcgK1xuICAgICAgICAnU3RlcCBTd2l0Y2ggVGhlbiBUbyBVbnRpbCBWb2xhdGlsZSBXRW5kIFdoaWxlIFdpdGgnLFxuXG4gICAgICAgIExJVEVSQUwgPSAnVHJ1ZSBGYWxzZSBBbmQgTnVsbCBOb3QgT3InLFxuXG4gICAgICAgIEJVSUxUX0lOID1cbiAgICAgICAgICAnQWJzIEFDb3MgQWRsaWJSZWdpc3RlciBBZGxpYlVuUmVnaXN0ZXIgQXNjIEFzY1cgQVNpbiBBc3NpZ24gQVRhbiBBdXRvSXRTZXRPcHRpb24gQXV0b0l0V2luR2V0VGl0bGUgQXV0b0l0V2luU2V0VGl0bGUgQmVlcCBCaW5hcnkgQmluYXJ5TGVuIEJpbmFyeU1pZCBCaW5hcnlUb1N0cmluZyBCaXRBTkQgQml0Tk9UIEJpdE9SIEJpdFJvdGF0ZSBCaXRTaGlmdCBCaXRYT1IgQmxvY2tJbnB1dCBCcmVhayBDYWxsIENEVHJheSBDZWlsaW5nIENociBDaHJXIENsaXBHZXQgQ2xpcFB1dCBDb25zb2xlUmVhZCBDb25zb2xlV3JpdGUgQ29uc29sZVdyaXRlRXJyb3IgQ29udHJvbENsaWNrIENvbnRyb2xDb21tYW5kIENvbnRyb2xEaXNhYmxlIENvbnRyb2xFbmFibGUgQ29udHJvbEZvY3VzIENvbnRyb2xHZXRGb2N1cyBDb250cm9sR2V0SGFuZGxlIENvbnRyb2xHZXRQb3MgQ29udHJvbEdldFRleHQgQ29udHJvbEhpZGUgQ29udHJvbExpc3RWaWV3IENvbnRyb2xNb3ZlIENvbnRyb2xTZW5kIENvbnRyb2xTZXRUZXh0IENvbnRyb2xTaG93IENvbnRyb2xUcmVlVmlldyBDb3MgRGVjIERpckNvcHkgRGlyQ3JlYXRlIERpckdldFNpemUgRGlyTW92ZSBEaXJSZW1vdmUgRGxsQ2FsbCBEbGxDYWxsQWRkcmVzcyBEbGxDYWxsYmFja0ZyZWUgRGxsQ2FsbGJhY2tHZXRQdHIgRGxsQ2FsbGJhY2tSZWdpc3RlciBEbGxDbG9zZSBEbGxPcGVuIERsbFN0cnVjdENyZWF0ZSBEbGxTdHJ1Y3RHZXREYXRhIERsbFN0cnVjdEdldFB0ciBEbGxTdHJ1Y3RHZXRTaXplIERsbFN0cnVjdFNldERhdGEgRHJpdmVHZXREcml2ZSBEcml2ZUdldEZpbGVTeXN0ZW0gRHJpdmVHZXRMYWJlbCBEcml2ZUdldFNlcmlhbCBEcml2ZUdldFR5cGUgRHJpdmVNYXBBZGQgRHJpdmVNYXBEZWwgRHJpdmVNYXBHZXQgRHJpdmVTZXRMYWJlbCBEcml2ZVNwYWNlRnJlZSBEcml2ZVNwYWNlVG90YWwgRHJpdmVTdGF0dXMgRW52R2V0IEVudlNldCBFbnZVcGRhdGUgRXZhbCBFeGVjdXRlIEV4cCBGaWxlQ2hhbmdlRGlyIEZpbGVDbG9zZSBGaWxlQ29weSBGaWxlQ3JlYXRlTlRGU0xpbmsgRmlsZUNyZWF0ZVNob3J0Y3V0IEZpbGVEZWxldGUgRmlsZUV4aXN0cyBGaWxlRmluZEZpcnN0RmlsZSBGaWxlRmluZE5leHRGaWxlIEZpbGVGbHVzaCBGaWxlR2V0QXR0cmliIEZpbGVHZXRFbmNvZGluZyBGaWxlR2V0TG9uZ05hbWUgRmlsZUdldFBvcyBGaWxlR2V0U2hvcnRjdXQgRmlsZUdldFNob3J0TmFtZSBGaWxlR2V0U2l6ZSBGaWxlR2V0VGltZSBGaWxlR2V0VmVyc2lvbiBGaWxlSW5zdGFsbCBGaWxlTW92ZSBGaWxlT3BlbiBGaWxlT3BlbkRpYWxvZyBGaWxlUmVhZCBGaWxlUmVhZExpbmUgRmlsZVJlYWRUb0FycmF5IEZpbGVSZWN5Y2xlIEZpbGVSZWN5Y2xlRW1wdHkgRmlsZVNhdmVEaWFsb2cgRmlsZVNlbGVjdEZvbGRlciBGaWxlU2V0QXR0cmliIEZpbGVTZXRFbmQgRmlsZVNldFBvcyBGaWxlU2V0VGltZSBGaWxlV3JpdGUgRmlsZVdyaXRlTGluZSBGbG9vciBGdHBTZXRQcm94eSBGdW5jTmFtZSBHVUlDcmVhdGUgR1VJQ3RybENyZWF0ZUF2aSBHVUlDdHJsQ3JlYXRlQnV0dG9uIEdVSUN0cmxDcmVhdGVDaGVja2JveCBHVUlDdHJsQ3JlYXRlQ29tYm8gR1VJQ3RybENyZWF0ZUNvbnRleHRNZW51IEdVSUN0cmxDcmVhdGVEYXRlIEdVSUN0cmxDcmVhdGVEdW1teSBHVUlDdHJsQ3JlYXRlRWRpdCBHVUlDdHJsQ3JlYXRlR3JhcGhpYyBHVUlDdHJsQ3JlYXRlR3JvdXAgR1VJQ3RybENyZWF0ZUljb24gR1VJQ3RybENyZWF0ZUlucHV0IEdVSUN0cmxDcmVhdGVMYWJlbCBHVUlDdHJsQ3JlYXRlTGlzdCBHVUlDdHJsQ3JlYXRlTGlzdFZpZXcgR1VJQ3RybENyZWF0ZUxpc3RWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlTWVudSBHVUlDdHJsQ3JlYXRlTWVudUl0ZW0gR1VJQ3RybENyZWF0ZU1vbnRoQ2FsIEdVSUN0cmxDcmVhdGVPYmogR1VJQ3RybENyZWF0ZVBpYyBHVUlDdHJsQ3JlYXRlUHJvZ3Jlc3MgR1VJQ3RybENyZWF0ZVJhZGlvIEdVSUN0cmxDcmVhdGVTbGlkZXIgR1VJQ3RybENyZWF0ZVRhYiBHVUlDdHJsQ3JlYXRlVGFiSXRlbSBHVUlDdHJsQ3JlYXRlVHJlZVZpZXcgR1VJQ3RybENyZWF0ZVRyZWVWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlVXBkb3duIEdVSUN0cmxEZWxldGUgR1VJQ3RybEdldEhhbmRsZSBHVUlDdHJsR2V0U3RhdGUgR1VJQ3RybFJlYWQgR1VJQ3RybFJlY3ZNc2cgR1VJQ3RybFJlZ2lzdGVyTGlzdFZpZXdTb3J0IEdVSUN0cmxTZW5kTXNnIEdVSUN0cmxTZW5kVG9EdW1teSBHVUlDdHJsU2V0QmtDb2xvciBHVUlDdHJsU2V0Q29sb3IgR1VJQ3RybFNldEN1cnNvciBHVUlDdHJsU2V0RGF0YSBHVUlDdHJsU2V0RGVmQmtDb2xvciBHVUlDdHJsU2V0RGVmQ29sb3IgR1VJQ3RybFNldEZvbnQgR1VJQ3RybFNldEdyYXBoaWMgR1VJQ3RybFNldEltYWdlIEdVSUN0cmxTZXRMaW1pdCBHVUlDdHJsU2V0T25FdmVudCBHVUlDdHJsU2V0UG9zIEdVSUN0cmxTZXRSZXNpemluZyBHVUlDdHJsU2V0U3RhdGUgR1VJQ3RybFNldFN0eWxlIEdVSUN0cmxTZXRUaXAgR1VJRGVsZXRlIEdVSUdldEN1cnNvckluZm8gR1VJR2V0TXNnIEdVSUdldFN0eWxlIEdVSVJlZ2lzdGVyTXNnIEdVSVNldEFjY2VsZXJhdG9ycyBHVUlTZXRCa0NvbG9yIEdVSVNldENvb3JkIEdVSVNldEN1cnNvciBHVUlTZXRGb250IEdVSVNldEhlbHAgR1VJU2V0SWNvbiBHVUlTZXRPbkV2ZW50IEdVSVNldFN0YXRlIEdVSVNldFN0eWxlIEdVSVN0YXJ0R3JvdXAgR1VJU3dpdGNoIEhleCBIb3RLZXlTZXQgSHR0cFNldFByb3h5IEh0dHBTZXRVc2VyQWdlbnQgSFduZCBJbmV0Q2xvc2UgSW5ldEdldCBJbmV0R2V0SW5mbyBJbmV0R2V0U2l6ZSBJbmV0UmVhZCBJbmlEZWxldGUgSW5pUmVhZCBJbmlSZWFkU2VjdGlvbiBJbmlSZWFkU2VjdGlvbk5hbWVzIEluaVJlbmFtZVNlY3Rpb24gSW5pV3JpdGUgSW5pV3JpdGVTZWN0aW9uIElucHV0Qm94IEludCBJc0FkbWluIElzQXJyYXkgSXNCaW5hcnkgSXNCb29sIElzRGVjbGFyZWQgSXNEbGxTdHJ1Y3QgSXNGbG9hdCBJc0Z1bmMgSXNIV25kIElzSW50IElzS2V5d29yZCBJc051bWJlciBJc09iaiBJc1B0ciBJc1N0cmluZyBMb2cgTWVtR2V0U3RhdHMgTW9kIE1vdXNlQ2xpY2sgTW91c2VDbGlja0RyYWcgTW91c2VEb3duIE1vdXNlR2V0Q3Vyc29yIE1vdXNlR2V0UG9zIE1vdXNlTW92ZSBNb3VzZVVwIE1vdXNlV2hlZWwgTXNnQm94IE51bWJlciBPYmpDcmVhdGUgT2JqQ3JlYXRlSW50ZXJmYWNlIE9iakV2ZW50IE9iakdldCBPYmpOYW1lIE9uQXV0b0l0RXhpdFJlZ2lzdGVyIE9uQXV0b0l0RXhpdFVuUmVnaXN0ZXIgUGluZyBQaXhlbENoZWNrc3VtIFBpeGVsR2V0Q29sb3IgUGl4ZWxTZWFyY2ggUHJvY2Vzc0Nsb3NlIFByb2Nlc3NFeGlzdHMgUHJvY2Vzc0dldFN0YXRzIFByb2Nlc3NMaXN0IFByb2Nlc3NTZXRQcmlvcml0eSBQcm9jZXNzV2FpdCBQcm9jZXNzV2FpdENsb3NlIFByb2dyZXNzT2ZmIFByb2dyZXNzT24gUHJvZ3Jlc3NTZXQgUHRyIFJhbmRvbSBSZWdEZWxldGUgUmVnRW51bUtleSBSZWdFbnVtVmFsIFJlZ1JlYWQgUmVnV3JpdGUgUm91bmQgUnVuIFJ1bkFzIFJ1bkFzV2FpdCBSdW5XYWl0IFNlbmQgU2VuZEtlZXBBY3RpdmUgU2V0RXJyb3IgU2V0RXh0ZW5kZWQgU2hlbGxFeGVjdXRlIFNoZWxsRXhlY3V0ZVdhaXQgU2h1dGRvd24gU2luIFNsZWVwIFNvdW5kUGxheSBTb3VuZFNldFdhdmVWb2x1bWUgU3BsYXNoSW1hZ2VPbiBTcGxhc2hPZmYgU3BsYXNoVGV4dE9uIFNxcnQgU1JhbmRvbSBTdGF0dXNiYXJHZXRUZXh0IFN0ZGVyclJlYWQgU3RkaW5Xcml0ZSBTdGRpb0Nsb3NlIFN0ZG91dFJlYWQgU3RyaW5nIFN0cmluZ0FkZENSIFN0cmluZ0NvbXBhcmUgU3RyaW5nRm9ybWF0IFN0cmluZ0Zyb21BU0NJSUFycmF5IFN0cmluZ0luU3RyIFN0cmluZ0lzQWxOdW0gU3RyaW5nSXNBbHBoYSBTdHJpbmdJc0FTQ0lJIFN0cmluZ0lzRGlnaXQgU3RyaW5nSXNGbG9hdCBTdHJpbmdJc0ludCBTdHJpbmdJc0xvd2VyIFN0cmluZ0lzU3BhY2UgU3RyaW5nSXNVcHBlciBTdHJpbmdJc1hEaWdpdCBTdHJpbmdMZWZ0IFN0cmluZ0xlbiBTdHJpbmdMb3dlciBTdHJpbmdNaWQgU3RyaW5nUmVnRXhwIFN0cmluZ1JlZ0V4cFJlcGxhY2UgU3RyaW5nUmVwbGFjZSBTdHJpbmdSZXZlcnNlIFN0cmluZ1JpZ2h0IFN0cmluZ1NwbGl0IFN0cmluZ1N0cmlwQ1IgU3RyaW5nU3RyaXBXUyBTdHJpbmdUb0FTQ0lJQXJyYXkgU3RyaW5nVG9CaW5hcnkgU3RyaW5nVHJpbUxlZnQgU3RyaW5nVHJpbVJpZ2h0IFN0cmluZ1VwcGVyIFRhbiBUQ1BBY2NlcHQgVENQQ2xvc2VTb2NrZXQgVENQQ29ubmVjdCBUQ1BMaXN0ZW4gVENQTmFtZVRvSVAgVENQUmVjdiBUQ1BTZW5kIFRDUFNodXRkb3duLCBVRFBTaHV0ZG93biBUQ1BTdGFydHVwLCBVRFBTdGFydHVwIFRpbWVyRGlmZiBUaW1lckluaXQgVG9vbFRpcCBUcmF5Q3JlYXRlSXRlbSBUcmF5Q3JlYXRlTWVudSBUcmF5R2V0TXNnIFRyYXlJdGVtRGVsZXRlIFRyYXlJdGVtR2V0SGFuZGxlIFRyYXlJdGVtR2V0U3RhdGUgVHJheUl0ZW1HZXRUZXh0IFRyYXlJdGVtU2V0T25FdmVudCBUcmF5SXRlbVNldFN0YXRlIFRyYXlJdGVtU2V0VGV4dCBUcmF5U2V0Q2xpY2sgVHJheVNldEljb24gVHJheVNldE9uRXZlbnQgVHJheVNldFBhdXNlSWNvbiBUcmF5U2V0U3RhdGUgVHJheVNldFRvb2xUaXAgVHJheVRpcCBVQm91bmQgVURQQmluZCBVRFBDbG9zZVNvY2tldCBVRFBPcGVuIFVEUFJlY3YgVURQU2VuZCBWYXJHZXRUeXBlIFdpbkFjdGl2YXRlIFdpbkFjdGl2ZSBXaW5DbG9zZSBXaW5FeGlzdHMgV2luRmxhc2ggV2luR2V0Q2FyZXRQb3MgV2luR2V0Q2xhc3NMaXN0IFdpbkdldENsaWVudFNpemUgV2luR2V0SGFuZGxlIFdpbkdldFBvcyBXaW5HZXRQcm9jZXNzIFdpbkdldFN0YXRlIFdpbkdldFRleHQgV2luR2V0VGl0bGUgV2luS2lsbCBXaW5MaXN0IFdpbk1lbnVTZWxlY3RJdGVtIFdpbk1pbmltaXplQWxsIFdpbk1pbmltaXplQWxsVW5kbyBXaW5Nb3ZlIFdpblNldE9uVG9wIFdpblNldFN0YXRlIFdpblNldFRpdGxlIFdpblNldFRyYW5zIFdpbldhaXQnLFxuXG4gICAgICAgIENPTU1FTlQgPSB7XG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgICAgICAgICAgaGxqcy5DT01NRU5UKCcjY3MnLCAnI2NlJyksXG4gICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnI2NvbW1lbnRzLXN0YXJ0JywgJyNjb21tZW50cy1lbmQnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIFZBUklBQkxFID0ge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFtBLXowLTlfXSsnXG4gICAgICAgIH0sXG5cbiAgICAgICAgU1RSSU5HID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbe1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogLycnLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG5cbiAgICAgICAgTlVNQkVSID0ge1xuICAgICAgICAgICAgdmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICAgICAgICB9LFxuXG4gICAgICAgIFBSRVBST0NFU1NPUiA9IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2NvbW1lbnRzIGluY2x1ZGUgaW5jbHVkZS1vbmNlIE5vVHJheUljb24gT25BdXRvSXRTdGFydFJlZ2lzdGVyIHByYWdtYSBjb21waWxlIFJlcXVpcmVBZG1pbid9LFxuICAgICAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICc8JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgICAgQ09NTUVOVFxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIENPTlNUQU5UID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIC8vIGJlZ2luOiAnQCcsXG4gICAgICAgICAgICAvLyBlbmQ6ICckJyxcbiAgICAgICAgICAgIC8vIGtleXdvcmRzOiAnQXBwRGF0YUNvbW1vbkRpciBBcHBEYXRhRGlyIEF1dG9JdEV4ZSBBdXRvSXRQSUQgQXV0b0l0VmVyc2lvbiBBdXRvSXRYNjQgQ09NX0V2ZW50T2JqIENvbW1vbkZpbGVzRGlyIENvbXBpbGVkIENvbXB1dGVyTmFtZSBDb21TcGVjIENQVUFyY2ggQ1IgQ1JMRiBEZXNrdG9wQ29tbW9uRGlyIERlc2t0b3BEZXB0aCBEZXNrdG9wRGlyIERlc2t0b3BIZWlnaHQgRGVza3RvcFJlZnJlc2ggRGVza3RvcFdpZHRoIERvY3VtZW50c0NvbW1vbkRpciBlcnJvciBleGl0Q29kZSBleGl0TWV0aG9kIGV4dGVuZGVkIEZhdm9yaXRlc0NvbW1vbkRpciBGYXZvcml0ZXNEaXIgR1VJX0N0cmxIYW5kbGUgR1VJX0N0cmxJZCBHVUlfRHJhZ0ZpbGUgR1VJX0RyYWdJZCBHVUlfRHJvcElkIEdVSV9XaW5IYW5kbGUgSG9tZURyaXZlIEhvbWVQYXRoIEhvbWVTaGFyZSBIb3RLZXlQcmVzc2VkIEhPVVIgSVBBZGRyZXNzMSBJUEFkZHJlc3MyIElQQWRkcmVzczMgSVBBZGRyZXNzNCBLQkxheW91dCBMRiBMb2NhbEFwcERhdGFEaXIgTG9nb25ETlNEb21haW4gTG9nb25Eb21haW4gTG9nb25TZXJ2ZXIgTURBWSBNSU4gTU9OIE1TRUMgTVVJTGFuZyBNeURvY3VtZW50c0RpciBOdW1QYXJhbXMgT1NBcmNoIE9TQnVpbGQgT1NMYW5nIE9TU2VydmljZVBhY2sgT1NUeXBlIE9TVmVyc2lvbiBQcm9ncmFtRmlsZXNEaXIgUHJvZ3JhbXNDb21tb25EaXIgUHJvZ3JhbXNEaXIgU2NyaXB0RGlyIFNjcmlwdEZ1bGxQYXRoIFNjcmlwdExpbmVOdW1iZXIgU2NyaXB0TmFtZSBTRUMgU3RhcnRNZW51Q29tbW9uRGlyIFN0YXJ0TWVudURpciBTdGFydHVwQ29tbW9uRGlyIFN0YXJ0dXBEaXIgU1dfRElTQUJMRSBTV19FTkFCTEUgU1dfSElERSBTV19MT0NLIFNXX01BWElNSVpFIFNXX01JTklNSVpFIFNXX1JFU1RPUkUgU1dfU0hPVyBTV19TSE9XREVGQVVMVCBTV19TSE9XTUFYSU1JWkVEIFNXX1NIT1dNSU5JTUlaRUQgU1dfU0hPV01JTk5PQUNUSVZFIFNXX1NIT1dOQSBTV19TSE9XTk9BQ1RJVkFURSBTV19TSE9XTk9STUFMIFNXX1VOTE9DSyBTeXN0ZW1EaXIgVEFCIFRlbXBEaXIgVFJBWV9JRCBUcmF5SWNvbkZsYXNoaW5nIFRyYXlJY29uVmlzaWJsZSBVc2VyTmFtZSBVc2VyUHJvZmlsZURpciBXREFZIFdpbmRvd3NEaXIgV29ya2luZ0RpciBZREFZIFlFQVInLFxuICAgICAgICAgICAgLy8gcmVsZXZhbmNlOiA1XG4gICAgICAgICAgICBiZWdpbjogJ0BbQS16MC05X10rJ1xuICAgICAgICB9LFxuXG4gICAgICAgIEZVTkNUSU9OID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ0Z1bmMnLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXCR8XFxcXFt8JScsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGJ1aWx0X2luOiBCVUlMVF9JTixcbiAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIENPTU1FTlQsXG4gICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgICAgIENPTlNUQU5ULFxuICAgICAgICAgICAgRlVOQ1RJT05cbiAgICAgICAgXVxuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIG1uZW1vbmljICovXG4gICAgICAgICdhZGMgYWRkIGFkaXcgYW5kIGFuZGkgYXNyIGJjbHIgYmxkIGJyYmMgYnJicyBicmNjIGJyY3MgYnJlYWsgYnJlcSBicmdlIGJyaGMgYnJocyAnICtcbiAgICAgICAgJ2JyaWQgYnJpZSBicmxvIGJybHQgYnJtaSBicm5lIGJycGwgYnJzaCBicnRjIGJydHMgYnJ2YyBicnZzIGJzZXQgYnN0IGNhbGwgY2JpIGNiciAnICtcbiAgICAgICAgJ2NsYyBjbGggY2xpIGNsbiBjbHIgY2xzIGNsdCBjbHYgY2x6IGNvbSBjcCBjcGMgY3BpIGNwc2UgZGVjIGVpY2FsbCBlaWptcCBlbHBtIGVvciAnICtcbiAgICAgICAgJ2ZtdWwgZm11bHMgZm11bHN1IGljYWxsIGlqbXAgaW4gaW5jIGptcCBsZCBsZGQgbGRpIGxkcyBscG0gbHNsIGxzciBtb3YgbW92dyBtdWwgJyArXG4gICAgICAgICdtdWxzIG11bHN1IG5lZyBub3Agb3Igb3JpIG91dCBwb3AgcHVzaCByY2FsbCByZXQgcmV0aSByam1wIHJvbCByb3Igc2JjIHNiciBzYnJjIHNicnMgJyArXG4gICAgICAgICdzZWMgc2VoIHNiaSBzYmNpIHNiaWMgc2JpcyBzYml3IHNlaSBzZW4gc2VyIHNlcyBzZXQgc2V2IHNleiBzbGVlcCBzcG0gc3Qgc3RkIHN0cyBzdWIgJyArXG4gICAgICAgICdzdWJpIHN3YXAgdHN0IHdkcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqL1xuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgcjE2IHIxNyByMTggcjE5IHIyMCByMjEgcjIyICcgK1xuICAgICAgICAncjIzIHIyNCByMjUgcjI2IHIyNyByMjggcjI5IHIzMCByMzEgeHwwIHhoIHhsIHl8MCB5aCB5bCB6fDAgemggemwgJyArXG4gICAgICAgIC8qIElPIFJlZ2lzdGVycyAoQVRNZWdhMTI4KSAqL1xuICAgICAgICAndWNzcjFjIHVkcjEgdWNzcjFhIHVjc3IxYiB1YnJyMWwgdWJycjFoIHVjc3IwYyB1YnJyMGggdGNjcjNjIHRjY3IzYSB0Y2NyM2IgdGNudDNoICcgK1xuICAgICAgICAndGNudDNsIG9jcjNhaCBvY3IzYWwgb2NyM2JoIG9jcjNibCBvY3IzY2ggb2NyM2NsIGljcjNoIGljcjNsIGV0aW1zayBldGlmciB0Y2NyMWMgJyArXG4gICAgICAgICdvY3IxY2ggb2NyMWNsIHR3Y3IgdHdkciB0d2FyIHR3c3IgdHdiciBvc2NjYWwgeG1jcmEgeG1jcmIgZWljcmEgc3BtY3NyIHNwbWNyIHBvcnRnICcgK1xuICAgICAgICAnZGRyZyBwaW5nIHBvcnRmIGRkcmYgc3JlZyBzcGggc3BsIHhkaXYgcmFtcHogZWljcmIgZWltc2sgZ2ltc2sgZ2ljciBlaWZyIGdpZnIgdGltc2sgJyArXG4gICAgICAgICd0aWZyIG1jdWNyIG1jdWNzciB0Y2NyMCB0Y250MCBvY3IwIGFzc3IgdGNjcjFhIHRjY3IxYiB0Y250MWggdGNudDFsIG9jcjFhaCBvY3IxYWwgJyArXG4gICAgICAgICdvY3IxYmggb2NyMWJsIGljcjFoIGljcjFsIHRjY3IyIHRjbnQyIG9jcjIgb2NkciB3ZHRjciBzZmlvciBlZWFyaCBlZWFybCBlZWRyIGVlY3IgJyArXG4gICAgICAgICdwb3J0YSBkZHJhIHBpbmEgcG9ydGIgZGRyYiBwaW5iIHBvcnRjIGRkcmMgcGluYyBwb3J0ZCBkZHJkIHBpbmQgc3BkciBzcHNyIHNwY3IgdWRyMCAnICtcbiAgICAgICAgJ3Vjc3IwYSB1Y3NyMGIgdWJycjBsIGFjc3IgYWRtdXggYWRjc3IgYWRjaCBhZGNsIHBvcnRlIGRkcmUgcGluZSBwaW5mJyxcbiAgICAgIG1ldGE6XG4gICAgICAgICcuYnl0ZSAuY3NlZyAuZGIgLmRlZiAuZGV2aWNlIC5kc2VnIC5kdyAuZW5kbWFjcm8gLmVxdSAuZXNlZyAuZXhpdCAuaW5jbHVkZSAubGlzdCAnICtcbiAgICAgICAgJy5saXN0bWFjIC5tYWNybyAubm9saXN0IC5vcmcgLnNldCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnOycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLCAvLyAweC4uLiwgZGVjaW1hbCwgZmxvYXRcbiAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLCAvLyAwYi4uLlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFwkW2EtekEtWjAtOV0rfDBvWzAtN10rKScgLy8gJC4uLiwgMG8uLi5cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1teXFxcXFxcXFxdW15cXCddJ1xuICAgICAgfSxcbiAgICAgIHtjbGFzc05hbWU6ICdzeW1ib2wnLCAgYmVnaW46ICdeW0EtWmEtejAtOV8uJF0rOid9LFxuICAgICAge2NsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyMnLCBlbmQ6ICckJ30sXG4gICAgICB7ICAvLyBzdWJzdGl0dXRpb24gd2l0aGluIGEgbWFjcm9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJ0BbMC05XSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFwkW1xcd1xcZCNAXVtcXHdcXGRfXSovfSxcbiAgICAgIHtiZWdpbjogL1xcJFxceyguKj8pfS99XG4gICAgXVxuICB9O1xuICB2YXIgS0VZV09SRFMgPSAnQkVHSU4gRU5EIGlmIGVsc2Ugd2hpbGUgZG8gZm9yIGluIGJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBuZXh0IG5leHRmaWxlIGZ1bmN0aW9uIGZ1bmMgZXhpdHwxMCc7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxiKT9yPycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpJy8sIGVuZDogLycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKGJ8YnIpJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKVwiLywgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcblx0IGtleXdvcmRzOiB7XG5cdCAgIGtleXdvcmQ6IEtFWVdPUkRTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6ICdmYWxzZSBpbnQgYWJzdHJhY3QgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgZm9yIHRydWUgJyArXG4gICAgICAnd2hpbGUgbG9uZyB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgJyArXG4gICAgICAnYnJlYWsgbmV3IGNhdGNoIGJ5dGUgc3VwZXIgY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoICcgK1xuICAgICAgJ2NvbnRpbnVlIHJldmVyc2UgZmlyc3RmYXN0IGZpcnN0b25seSBmb3J1cGRhdGUgbm9mZXRjaCBzdW0gYXZnIG1pbm9mIG1heG9mIGNvdW50ICcgK1xuICAgICAgJ29yZGVyIGdyb3VwIGJ5IGFzYyBkZXNjIGluZGV4IGhpbnQgbGlrZSBkaXNwYWx5IGVkaXQgY2xpZW50IHNlcnZlciB0dHNiZWdpbiAnICtcbiAgICAgICd0dHNjb21taXQgc3RyIHJlYWwgZGF0ZSBjb250YWluZXIgYW55dHlwZSBjb21tb24gZGl2IG1vZCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEVTQ0FQRURfUVVPVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBiZWdpbjogL1xcXFxcIi9cblxuICB9O1xuICB2YXIgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLycvLCBlbmQ6IC8nL1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzaCcsICd6c2gnXSxcbiAgICBsZXhlbWVzOiAvXFxiLT9bYS16XFwuX10rXFxiLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBlbGlmIGZpIGZvciB3aGlsZSBpbiBkbyBkb25lIGNhc2UgZXNhYyBmdW5jdGlvbicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gU2hlbGwgYnVpbHQtaW5zXG4gICAgICAgIC8vIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2hlbGwtQnVpbHRpbi1Db21tYW5kcy5odG1sXG4gICAgICAgICdicmVhayBjZCBjb250aW51ZSBldmFsIGV4ZWMgZXhpdCBleHBvcnQgZ2V0b3B0cyBoYXNoIHB3ZCByZWFkb25seSByZXR1cm4gc2hpZnQgdGVzdCB0aW1lcyAnICtcbiAgICAgICAgJ3RyYXAgdW1hc2sgdW5zZXQgJyArXG4gICAgICAgIC8vIEJhc2ggYnVpbHQtaW5zXG4gICAgICAgICdhbGlhcyBiaW5kIGJ1aWx0aW4gY2FsbGVyIGNvbW1hbmQgZGVjbGFyZSBlY2hvIGVuYWJsZSBoZWxwIGxldCBsb2NhbCBsb2dvdXQgbWFwZmlsZSBwcmludGYgJyArXG4gICAgICAgICdyZWFkIHJlYWRhcnJheSBzb3VyY2UgdHlwZSB0eXBlc2V0IHVsaW1pdCB1bmFsaWFzICcgK1xuICAgICAgICAvLyBTaGVsbCBtb2RpZmllcnNcbiAgICAgICAgJ3NldCBzaG9wdCAnICtcbiAgICAgICAgLy8gWnNoIGJ1aWx0LWluc1xuICAgICAgICAnYXV0b2xvYWQgYmcgYmluZGtleSBieWUgY2FwIGNoZGlyIGNsb25lIGNvbXBhcmd1bWVudHMgY29tcGNhbGwgY29tcGN0bCBjb21wZGVzY3JpYmUgY29tcGZpbGVzICcgK1xuICAgICAgICAnY29tcGdyb3VwcyBjb21wcXVvdGUgY29tcHRhZ3MgY29tcHRyeSBjb21wdmFsdWVzIGRpcnMgZGlzYWJsZSBkaXNvd24gZWNob3RjIGVjaG90aSBlbXVsYXRlICcgK1xuICAgICAgICAnZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCAnICtcbiAgICAgICAgJ3B1c2hkIHB1c2hsbiByZWhhc2ggc2NoZWQgc2V0Y2FwIHNldG9wdCBzdGF0IHN1c3BlbmQgdHR5Y3RsIHVuZnVuY3Rpb24gdW5oYXNoIHVubGltaXQgJyArXG4gICAgICAgICd1bnNldG9wdCB2YXJlZCB3YWl0IHdoZW5jZSB3aGVyZSB3aGljaCB6Y29tcGlsZSB6Zm9ybWF0IHpmdHAgemxlIHptb2Rsb2FkIHpwYXJzZW9wdHMgenByb2YgJyArXG4gICAgICAgICd6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AnLFxuICAgICAgXzpcbiAgICAgICAgJy1uZSAtZXEgLWx0IC1ndCAtZiAtZCAtZSAtcyAtbCAtYScgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL14jIVteXFxuXStzaFxccyokLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcd1tcXHdcXGRfXSpcXHMqXFwoXFxzKlxcKVxccypcXHsvLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9cXHdbXFx3XFxkX10qL30pXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEVTQ0FQRURfUVVPVEUsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnXlxcLicsXG4gICAgLy8gU3VwcG9ydCBleHBsaWNpdGVseSB0eXBlZCB2YXJpYWJsZXMgdGhhdCBlbmQgd2l0aCAkJSEgb3IgIy5cbiAgICBsZXhlbWVzOiAnW2EtekEtWl1bYS16QS1aMC05X1xcJFxcJVxcIVxcI10qJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICdBQlMgQVNDIEFORCBBVE4gQVVUT3wwIEJFRVAgQkxPQUR8MTAgQlNBVkV8MTAgQ0FMTCBDQUxMUyBDREJMIENIQUlOIENIRElSIENIUiR8MTAgQ0lOVCBDSVJDTEUgJyArXG4gICAgICAgICAgJ0NMRUFSIENMT1NFIENMUyBDT0xPUiBDT00gQ09NTU9OIENPTlQgQ09TIENTTkcgQ1NSTElOIENWRCBDVkkgQ1ZTIERBVEEgREFURSQgJyArXG4gICAgICAgICAgJ0RFRkRCTCBERUZJTlQgREVGU05HIERFRlNUUiBERUZ8MCBTRUcgVVNSIERFTEVURSBESU0gRFJBVyBFRElUIEVORCBFTlZJUk9OIEVOVklST04kICcgK1xuICAgICAgICAgICdFT0YgRVFWIEVSQVNFIEVSREVWIEVSREVWJCBFUkwgRVJSIEVSUk9SIEVYUCBGSUVMRCBGSUxFUyBGSVggRk9SfDAgRlJFIEdFVCBHT1NVQnwxMCBHT1RPICcgK1xuICAgICAgICAgICdIRVgkIElGIFRIRU4gRUxTRXwwIElOS0VZJCBJTlAgSU5QVVQgSU5QVVQjIElOUFVUJCBJTlNUUiBJTVAgSU5UIElPQ1RMIElPQ1RMJCBLRVkgT04gJyArXG4gICAgICAgICAgJ09GRiBMSVNUIEtJTEwgTEVGVCQgTEVOIExFVCBMSU5FIExMSVNUIExPQUQgTE9DIExPQ0FURSBMT0YgTE9HIExQUklOVCBVU0lORyBMU0VUICcgK1xuICAgICAgICAgICdNRVJHRSBNSUQkIE1LRElSIE1LRCQgTUtJJCBNS1MkIE1PRCBOQU1FIE5FVyBORVhUIE5PSVNFIE5PVCBPQ1QkIE9OIE9SIFBFTiBQTEFZIFNUUklHIE9QRU4gT1BUSU9OICcgK1xuICAgICAgICAgICdCQVNFIE9VVCBQQUlOVCBQQUxFVFRFIFBDT1BZIFBFRUsgUE1BUCBQT0lOVCBQT0tFIFBPUyBQUklOVCBQUklOVF0gUFNFVCBQUkVTRVQgJyArXG4gICAgICAgICAgJ1BVVCBSQU5ET01JWkUgUkVBRCBSRU0gUkVOVU0gUkVTRVR8MCBSRVNUT1JFIFJFU1VNRSBSRVRVUk58MCBSSUdIVCQgUk1ESVIgUk5EIFJTRVQgJyArXG4gICAgICAgICAgJ1JVTiBTQVZFIFNDUkVFTiBTR04gU0hFTEwgU0lOIFNPVU5EIFNQQUNFJCBTUEMgU1FSIFNURVAgU1RJQ0sgU1RPUCBTVFIkIFNUUklORyQgU1dBUCAnICtcbiAgICAgICAgICAnU1lTVEVNIFRBQiBUQU4gVElNRSQgVElNRVIgVFJPRkYgVFJPTiBUTyBVU1IgVkFMIFZBUlBUUiBWQVJQVFIkIFZJRVcgV0FJVCBXSElMRSAnICtcbiAgICAgICAgICAnV0VORCBXSURUSCBXSU5ET1cgV1JJVEUgWE9SJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJ1JFTScsICckJywge3JlbGV2YW5jZTogMTB9KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXFwnJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIGxpbmUgbnVtYmVyc1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ15bMC05XStcXCAnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCB0eXBlZCBudW1lcmljIGNvbnN0YW50cyAoMTAwMCwgMTIuMzQhLCAxLjJlNSwgMS41IywgMS4yRDIpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoWzAtOV0rWzAtOWVkRURcXC5dKlsjXFwhXT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBNYXRjaCBoZXhhZGVjaW1hbCBudW1iZXJzICgmSHh4eHgpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKFxcJltoSF1bMC05YS1mQS1GXXsxLDR9KSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIG9jdGFsIG51bWJlcnMgKCZPeHh4eHh4KVxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJyhcXCZbb09dWzAtN117MSw2fSknXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpe1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBBdHRyaWJ1dGVcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi9cbiAgICAgIH0sXG4gICAgICAvLyBTcGVjaWZpY1xuICAgICAge1xuICAgICAgICBiZWdpbjogLzo6PS8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvPC8sIGVuZDogLz4vXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQ29tbW9uXG4gICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKXtcbiAgdmFyIExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46ICdbXFxcXCtcXFxcLV0nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYmYnXSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnW15cXFxcW1xcXFxdXFxcXC4sXFxcXCtcXFxcLTw+IFxcclxcbl0nLFxuICAgICAgICAnW1xcXFxbXFxcXF1cXFxcLixcXFxcK1xcXFwtPD4gXFxyXFxuXScsXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46ICdbXFxcXFtcXFxcXV0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW1xcXFwuLF0nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgbW9kZSB3b3JrcyBhcyB0aGUgb25seSByZWxldmFuY2UgY291bnRlclxuICAgICAgICBiZWdpbjogLyg/OlxcK1xcK3xcXC1cXC0pLyxcbiAgICAgICAgY29udGFpbnM6IFtMSVRFUkFMXVxuICAgICAgfSxcbiAgICAgIExJVEVSQUxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdkaXYgbW9kIGluIGFuZCBvciBub3QgeG9yIGFzc2VydGVycm9yIGJlZ2luIGNhc2UgZG8gZG93bnRvIGVsc2UgZW5kIGV4aXQgZm9yIGlmIG9mIHJlcGVhdCB0aGVuIHRvICcgK1xuICAgICd1bnRpbCB3aGlsZSB3aXRoIHZhcic7XG4gIHZhciBMSVRFUkFMUyA9ICdmYWxzZSB0cnVlJztcbiAgdmFyIENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgIC9cXHsvLFxuICAgICAgL1xcfS8sXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL1xcKFxcKi8sXG4gICAgICAvXFwqXFwpLyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIClcbiAgXTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvJycvfV1cbiAgfTtcbiAgdmFyIENIQVJfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIHZhciBEQVRFID0ge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyhEVHxEfFQpJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgREJMX1FVT1RFRF9WQVJJQUJMRSA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIG5vdCBhIHN0cmluZyB0ZWNobmljYWxseSBidXQgbWFrZXMgc2Vuc2UgdG8gYmUgaGlnaGxpZ2h0ZWQgaW4gdGhlIHNhbWUgc3R5bGVcbiAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgZW5kOiAnXCInXG4gIH07XG5cbiAgdmFyIFBST0NFRFVSRSA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ3Byb2NlZHVyZScsIGVuZDogL1s6O10vLFxuICAgIGtleXdvcmRzOiAncHJvY2VkdXJlfDEwJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtTVFJJTkcsIENIQVJfU1RSSU5HXVxuICAgICAgfVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG5cbiAgdmFyIE9CSkVDVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46ICdPQkpFQ1QgKFRhYmxlfEZvcm18UmVwb3J0fERhdGFwb3J0fENvZGV1bml0fFhNTHBvcnR8TWVudVN1aXRlfFBhZ2V8UXVlcnkpIChcXFxcZCspIChbXlxcXFxyXFxcXG5dKyknLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHsga2V5d29yZDogS0VZV09SRFMsIGxpdGVyYWw6IExJVEVSQUxTIH0sXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORywgQ0hBUl9TVFJJTkcsXG4gICAgICBEQVRFLCBEQkxfUVVPVEVEX1ZBUklBQkxFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIE9CSkVDVCxcbiAgICAgIFBST0NFRFVSRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjYXBucCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnc3RydWN0IGVudW0gaW50ZXJmYWNlIHVuaW9uIGdyb3VwIGltcG9ydCB1c2luZyBjb25zdCBhbm5vdGF0aW9uIGV4dGVuZHMgaW4gb2Ygb24gYXMgd2l0aCBmcm9tIGZpeGVkJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnVm9pZCBCb29sIEludDggSW50MTYgSW50MzIgSW50NjQgVUludDggVUludDE2IFVJbnQzMiBVSW50NjQgRmxvYXQzMiBGbG9hdDY0ICcgK1xuICAgICAgICAnVGV4dCBEYXRhIEFueVBvaW50ZXIgQW55U3RydWN0IENhcGFiaWxpdHkgTGlzdCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL0AweFtcXHdcXGRdezE2fTsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9AXFxkK1xcYi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N0cnVjdCBlbnVtJywgZW5kOiAvXFx7LyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgc3RhcnRzOiB7ZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWV9IC8vIGhhY2s6IGVhdGluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCB0aXRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsIGVuZDogL1xcey8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICAgIHN0YXJ0czoge2VuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlfSAvLyBoYWNrOiBlYXRpbmcgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgdGl0bGVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLy8gMi4zLiBJZGVudGlmaWVycyBhbmQga2V5d29yZHNcbiAgdmFyIEtFWVdPUkRTID1cbiAgICAnYXNzZW1ibHkgbW9kdWxlIHBhY2thZ2UgaW1wb3J0IGFsaWFzIGNsYXNzIGludGVyZmFjZSBvYmplY3QgZ2l2ZW4gdmFsdWUgJyArXG4gICAgJ2Fzc2lnbiB2b2lkIGZ1bmN0aW9uIG5ldyBvZiBleHRlbmRzIHNhdGlzZmllcyBhYnN0cmFjdHMgaW4gb3V0IHJldHVybiAnICtcbiAgICAnYnJlYWsgY29udGludWUgdGhyb3cgYXNzZXJ0IGR5bmFtaWMgaWYgZWxzZSBzd2l0Y2ggY2FzZSBmb3Igd2hpbGUgdHJ5ICcgK1xuICAgICdjYXRjaCBmaW5hbGx5IHRoZW4gbGV0IHRoaXMgb3V0ZXIgc3VwZXIgaXMgZXhpc3RzIG5vbmVtcHR5JztcbiAgLy8gNy40LjEgRGVjbGFyYXRpb24gTW9kaWZpZXJzXG4gIHZhciBERUNMQVJBVElPTl9NT0RJRklFUlMgPVxuICAgICdzaGFyZWQgYWJzdHJhY3QgZm9ybWFsIGRlZmF1bHQgYWN0dWFsIHZhcmlhYmxlIGxhdGUgbmF0aXZlIGRlcHJlY2F0ZWQnICtcbiAgICAnZmluYWwgc2VhbGVkIGFubm90YXRpb24gc3VwcHJlc3NXYXJuaW5ncyBzbWFsbCc7XG4gIC8vIDcuNC4yIERvY3VtZW50YXRpb25cbiAgdmFyIERPQ1VNRU5UQVRJT04gPVxuICAgICdkb2MgYnkgbGljZW5zZSBzZWUgdGhyb3dzIHRhZ2dlZCc7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBiZWdpbjogL2BgLywgZW5kOiAvYGAvLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICB7XG4gICAgICAvLyB2ZXJiYXRpbSBzdHJpbmdcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICBlbmQ6ICdcIlwiXCInLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RyaW5nIGxpdGVyYWwgb3IgdGVtcGxhdGVcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgY29udGFpbnM6IFtTVUJTVF1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIGNoYXJhY3RlciBsaXRlcmFsXG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgYmVnaW46IFwiJ1wiLFxuICAgICAgZW5kOiBcIidcIlxuICAgIH0sXG4gICAge1xuICAgICAgLy8gbnVtZXJpYyBsaXRlcmFsXG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcjWzAtOWEtZkEtRl9dK3xcXFxcJFswMV9dK3xbMC05X10rKD86XFxcXC5bMC05X10oPzpbZUVdWystXT9cXFxcZCspPyk/W2tNR1RQbXVucGZdPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMgKyAnICcgKyBERUNMQVJBVElPTl9NT0RJRklFUlMsXG4gICAgICBtZXRhOiBET0NVTUVOVEFUSU9OXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnXFxcXCRbXjAxXXwjW14wLTlhLWZBLUZdJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywge2NvbnRhaW5zOiBbJ3NlbGYnXX0pLFxuICAgICAge1xuICAgICAgICAvLyBjb21waWxlciBhbm5vdGF0aW9uXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ0BbYS16XVxcXFx3Kig/OlxcXFw6XFxcIlteXFxcIl0qXFxcIik/J1xuICAgICAgfVxuICAgIF0uY29uY2F0KEVYUFJFU1NJT05TKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NsZWFuJywnaWNsJywnZGNsJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpZiBsZXQgaW4gd2l0aCB3aGVyZSBjYXNlIG9mIGNsYXNzIGluc3RhbmNlIG90aGVyd2lzZSAnICtcbiAgICAgICAgJ2ltcGxlbWVudGF0aW9uIGRlZmluaXRpb24gc3lzdGVtIG1vZHVsZSBmcm9tIGltcG9ydCBxdWFsaWZpZWQgYXMgJyArXG4gICAgICAgICdzcGVjaWFsIGNvZGUgaW5saW5lIGZvcmVpZ24gZXhwb3J0IGNjYWxsIHN0ZGNhbGwgZ2VuZXJpYyBkZXJpdmUgJyArXG4gICAgICAgICdpbmZpeCBpbmZpeGwgaW5maXhyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnSW50IFJlYWwgQ2hhciBCb29sJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdUcnVlIEZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG5cbiAgICAgIHtiZWdpbjogJy0+fDwtW3w6XT98IyE/fD4+PXxcXFxce1xcXFx8fFxcXFx8XFxcXH18Oj09fD06fDw+J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIga2V5d29yZHMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBDbG9qdXJlIGtleXdvcmRzXG4gICAgICAnZGVmIGRlZm9uY2UgY29uZCBhcHBseSBpZi1ub3QgaWYtbGV0IGlmIG5vdCBub3Q9ID0gPCA+IDw9ID49ID09ICsgLyAqIC0gcmVtICcrXG4gICAgICAncXVvdCBuZWc/IHBvcz8gZGVsYXk/IHN5bWJvbD8ga2V5d29yZD8gdHJ1ZT8gZmFsc2U/IGludGVnZXI/IGVtcHR5PyBjb2xsPyBsaXN0PyAnK1xuICAgICAgJ3NldD8gaWZuPyBmbj8gYXNzb2NpYXRpdmU/IHNlcXVlbnRpYWw/IHNvcnRlZD8gY291bnRlZD8gcmV2ZXJzaWJsZT8gbnVtYmVyPyBkZWNpbWFsPyAnK1xuICAgICAgJ2NsYXNzPyBkaXN0aW5jdD8gaXNhPyBmbG9hdD8gcmF0aW9uYWw/IHJlZHVjZWQ/IHJhdGlvPyBvZGQ/IGV2ZW4/IGNoYXI/IHNlcT8gdmVjdG9yPyAnK1xuICAgICAgJ3N0cmluZz8gbWFwPyBuaWw/IGNvbnRhaW5zPyB6ZXJvPyBpbnN0YW5jZT8gbm90LWV2ZXJ5PyBub3QtYW55PyBsaWJzcGVjPyAtPiAtPj4gLi4gLiAnK1xuICAgICAgJ2luYyBjb21wYXJlIGRvIGRvdGltZXMgbWFwY2F0IHRha2UgcmVtb3ZlIHRha2Utd2hpbGUgZHJvcCBsZXRmbiBkcm9wLWxhc3QgdGFrZS1sYXN0ICcrXG4gICAgICAnZHJvcC13aGlsZSB3aGlsZSBpbnRlcm4gY29uZHAgY2FzZSByZWR1Y2VkIGN5Y2xlIHNwbGl0LWF0IHNwbGl0LXdpdGggcmVwZWF0IHJlcGxpY2F0ZSAnK1xuICAgICAgJ2l0ZXJhdGUgcmFuZ2UgbWVyZ2UgemlwbWFwIGRlY2xhcmUgbGluZS1zZXEgc29ydCBjb21wYXJhdG9yIHNvcnQtYnkgZG9ydW4gZG9hbGwgbnRobmV4dCAnK1xuICAgICAgJ250aHJlc3QgcGFydGl0aW9uIGV2YWwgZG9zZXEgYXdhaXQgYXdhaXQtZm9yIGxldCBhZ2VudCBhdG9tIHNlbmQgc2VuZC1vZmYgcmVsZWFzZS1wZW5kaW5nLXNlbmRzICcrXG4gICAgICAnYWRkLXdhdGNoIG1hcHYgZmlsdGVydiByZW1vdmUtd2F0Y2ggYWdlbnQtZXJyb3IgcmVzdGFydC1hZ2VudCBzZXQtZXJyb3ItaGFuZGxlciBlcnJvci1oYW5kbGVyICcrXG4gICAgICAnc2V0LWVycm9yLW1vZGUhIGVycm9yLW1vZGUgc2h1dGRvd24tYWdlbnRzIHF1b3RlIHZhciBmbiBsb29wIHJlY3VyIHRocm93IHRyeSBtb25pdG9yLWVudGVyICcrXG4gICAgICAnbW9uaXRvci1leGl0IGRlZm1hY3JvIGRlZm4gZGVmbi0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBmb3IgZG9zeW5jIGFuZCBvciAnK1xuICAgICAgJ3doZW4gd2hlbi1ub3Qgd2hlbi1sZXQgY29tcCBqdXh0IHBhcnRpYWwgc2VxdWVuY2UgbWVtb2l6ZSBjb25zdGFudGx5IGNvbXBsZW1lbnQgaWRlbnRpdHkgYXNzZXJ0ICcrXG4gICAgICAncGVlayBwb3AgZG90byBwcm94eSBkZWZzdHJ1Y3QgZmlyc3QgcmVzdCBjb25zIGRlZnByb3RvY29sIGNhc3QgY29sbCBkZWZ0eXBlIGRlZnJlY29yZCBsYXN0IGJ1dGxhc3QgJytcbiAgICAgICdzaWdzIHJlaWZ5IHNlY29uZCBmZmlyc3QgZm5leHQgbmZpcnN0IG5uZXh0IGRlZm11bHRpIGRlZm1ldGhvZCBtZXRhIHdpdGgtbWV0YSBucyBpbi1ucyBjcmVhdGUtbnMgaW1wb3J0ICcrXG4gICAgICAncmVmZXIga2V5cyBzZWxlY3Qta2V5cyB2YWxzIGtleSB2YWwgcnNlcSBuYW1lIG5hbWVzcGFjZSBwcm9taXNlIGludG8gdHJhbnNpZW50IHBlcnNpc3RlbnQhIGNvbmohICcrXG4gICAgICAnYXNzb2MhIGRpc3NvYyEgcG9wISBkaXNqISB1c2UgY2xhc3MgdHlwZSBudW0gZmxvYXQgZG91YmxlIHNob3J0IGJ5dGUgYm9vbGVhbiBiaWdpbnQgYmlnaW50ZWdlciAnK1xuICAgICAgJ2JpZ2RlYyBwcmludC1tZXRob2QgcHJpbnQtZHVwIHRocm93LWlmIHByaW50ZiBmb3JtYXQgbG9hZCBjb21waWxlIGdldC1pbiB1cGRhdGUtaW4gcHIgcHItb24gbmV3bGluZSAnK1xuICAgICAgJ2ZsdXNoIHJlYWQgc2x1cnAgcmVhZC1saW5lIHN1YnZlYyB3aXRoLW9wZW4gbWVtZm4gdGltZSByZS1maW5kIHJlLWdyb3VwcyByYW5kLWludCByYW5kIG1vZCBsb2NraW5nICcrXG4gICAgICAnYXNzZXJ0LXZhbGlkLWZkZWNsIGFsaWFzIHJlc29sdmUgcmVmIGRlcmVmIHJlZnNldCBzd2FwISByZXNldCEgc2V0LXZhbGlkYXRvciEgY29tcGFyZS1hbmQtc2V0ISBhbHRlci1tZXRhISAnK1xuICAgICAgJ3Jlc2V0LW1ldGEhIGNvbW11dGUgZ2V0LXZhbGlkYXRvciBhbHRlciByZWYtc2V0IHJlZi1oaXN0b3J5LWNvdW50IHJlZi1taW4taGlzdG9yeSByZWYtbWF4LWhpc3RvcnkgZW5zdXJlIHN5bmMgaW8hICcrXG4gICAgICAnbmV3IG5leHQgY29uaiBzZXQhIHRvLWFycmF5IGZ1dHVyZSBmdXR1cmUtY2FsbCBpbnRvLWFycmF5IGFzZXQgZ2VuLWNsYXNzIHJlZHVjZSBtYXAgZmlsdGVyIGZpbmQgZW1wdHkgJytcbiAgICAgICdoYXNoLW1hcCBoYXNoLXNldCBzb3J0ZWQtbWFwIHNvcnRlZC1tYXAtYnkgc29ydGVkLXNldCBzb3J0ZWQtc2V0LWJ5IHZlYyB2ZWN0b3Igc2VxIGZsYXR0ZW4gcmV2ZXJzZSBhc3NvYyBkaXNzb2MgbGlzdCAnK1xuICAgICAgJ2Rpc2ogZ2V0IHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGV4dGVuZCBleHRlbmQtdHlwZSBleHRlbmQtcHJvdG9jb2wgaW50IG50aCBkZWxheSBjb3VudCBjb25jYXQgY2h1bmsgY2h1bmstYnVmZmVyICcrXG4gICAgICAnY2h1bmstYXBwZW5kIGNodW5rLWZpcnN0IGNodW5rLXJlc3QgbWF4IG1pbiBkZWMgdW5jaGVja2VkLWluYy1pbnQgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtZGVjLWluYyB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1uZWdhdGUgJytcbiAgICAgICd1bmNoZWNrZWQtYWRkLWludCB1bmNoZWNrZWQtYWRkIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgdW5jaGVja2VkLXN1YnRyYWN0IGNodW5rLW5leHQgY2h1bmstY29ucyBjaHVua2VkLXNlcT8gcHJuIHZhcnktbWV0YSAnK1xuICAgICAgJ2xhenktc2VxIHNwcmVhZCBsaXN0KiBzdHIgZmluZC1rZXl3b3JkIGtleXdvcmQgc3ltYm9sIGdlbnN5bSBmb3JjZSByYXRpb25hbGl6ZSdcbiAgIH07XG5cbiAgdmFyIFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JiNcXCcnO1xuICB2YXIgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICB2YXIgU0lNUExFX05VTUJFUl9SRSA9ICdbLStdP1xcXFxkKyhcXFxcLlxcXFxkKyk/JztcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46IFNJTVBMRV9OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KTtcbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzsnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFxiKHRydWV8ZmFsc2V8bmlsKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IFNZTUJPTF9SRSxcbiAgICBzdGFydHM6IEJPRFlcbiAgfTtcbiAgdmFyIERFRkFVTFRfQ09OVEFJTlMgPSBbTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUwsIFNZTUJPTF07XG5cbiAgTElTVC5jb250YWlucyA9IFtobGpzLkNPTU1FTlQoJ2NvbW1lbnQnLCAnJyksIE5BTUUsIEJPRFldO1xuICBCT0RZLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgQ09MTEVDVElPTi5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG4gIEhJTlRfQ09MLmNvbnRhaW5zID0gW0NPTExFQ1RJT05dO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjbGonXSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW0xJU1QsIFNUUklORywgSElOVCwgSElOVF9DT0wsIENPTU1FTlQsIEtFWSwgQ09MTEVDVElPTiwgTlVNQkVSLCBMSVRFUkFMXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL14oW1xcdy4tXSt8XFxzKiNfKT89Pi8sXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAnY2xvanVyZSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NtYWtlLmluJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gc2NyaXB0aW5nIGNvbW1hbmRzXG4gICAgICAgICdicmVhayBjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbiBjbWFrZV9taW5pbXVtX3JlcXVpcmVkIGNtYWtlX3BhcnNlX2FyZ3VtZW50cyAnICtcbiAgICAgICAgJ2NtYWtlX3BvbGljeSBjb25maWd1cmVfZmlsZSBjb250aW51ZSBlbHNlaWYgZWxzZSBlbmRmb3JlYWNoIGVuZGZ1bmN0aW9uIGVuZGlmIGVuZG1hY3JvICcgK1xuICAgICAgICAnZW5kd2hpbGUgZXhlY3V0ZV9wcm9jZXNzIGZpbGUgZmluZF9maWxlIGZpbmRfbGlicmFyeSBmaW5kX3BhY2thZ2UgZmluZF9wYXRoICcgK1xuICAgICAgICAnZmluZF9wcm9ncmFtIGZvcmVhY2ggZnVuY3Rpb24gZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgJyArXG4gICAgICAgICdnZXRfZmlsZW5hbWVfY29tcG9uZW50IGdldF9wcm9wZXJ0eSBpZiBpbmNsdWRlIGluY2x1ZGVfZ3VhcmQgbGlzdCBtYWNybyAnICtcbiAgICAgICAgJ21hcmtfYXNfYWR2YW5jZWQgbWF0aCBtZXNzYWdlIG9wdGlvbiByZXR1cm4gc2VwYXJhdGVfYXJndW1lbnRzICcgK1xuICAgICAgICAnc2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzIHNldF9wcm9wZXJ0eSBzZXQgc2l0ZV9uYW1lIHN0cmluZyB1bnNldCB2YXJpYWJsZV93YXRjaCB3aGlsZSAnICtcbiAgICAgICAgLy8gcHJvamVjdCBjb21tYW5kc1xuICAgICAgICAnYWRkX2NvbXBpbGVfZGVmaW5pdGlvbnMgYWRkX2NvbXBpbGVfb3B0aW9ucyBhZGRfY3VzdG9tX2NvbW1hbmQgYWRkX2N1c3RvbV90YXJnZXQgJyArXG4gICAgICAgICdhZGRfZGVmaW5pdGlvbnMgYWRkX2RlcGVuZGVuY2llcyBhZGRfZXhlY3V0YWJsZSBhZGRfbGlicmFyeSBhZGRfbGlua19vcHRpb25zICcgK1xuICAgICAgICAnYWRkX3N1YmRpcmVjdG9yeSBhZGRfdGVzdCBhdXhfc291cmNlX2RpcmVjdG9yeSBidWlsZF9jb21tYW5kIGNyZWF0ZV90ZXN0X3NvdXJjZWxpc3QgJyArXG4gICAgICAgICdkZWZpbmVfcHJvcGVydHkgZW5hYmxlX2xhbmd1YWdlIGVuYWJsZV90ZXN0aW5nIGV4cG9ydCBmbHRrX3dyYXBfdWkgJyArXG4gICAgICAgICdnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpbmNsdWRlX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnaW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3QgaW5jbHVkZV9yZWd1bGFyX2V4cHJlc3Npb24gaW5zdGFsbCBsaW5rX2RpcmVjdG9yaWVzICcgK1xuICAgICAgICAnbGlua19saWJyYXJpZXMgbG9hZF9jYWNoZSBwcm9qZWN0IHF0X3dyYXBfY3BwIHF0X3dyYXBfdWkgcmVtb3ZlX2RlZmluaXRpb25zICcgK1xuICAgICAgICAnc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzb3VyY2VfZ3JvdXAgJyArXG4gICAgICAgICd0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyB0YXJnZXRfY29tcGlsZV9mZWF0dXJlcyB0YXJnZXRfY29tcGlsZV9vcHRpb25zICcgK1xuICAgICAgICAndGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXMgdGFyZ2V0X2xpbmtfbGlicmFyaWVzICcgK1xuICAgICAgICAndGFyZ2V0X2xpbmtfb3B0aW9ucyB0YXJnZXRfc291cmNlcyB0cnlfY29tcGlsZSB0cnlfcnVuICcgK1xuICAgICAgICAvLyBDVGVzdCBjb21tYW5kc1xuICAgICAgICAnY3Rlc3RfYnVpbGQgY3Rlc3RfY29uZmlndXJlIGN0ZXN0X2NvdmVyYWdlIGN0ZXN0X2VtcHR5X2JpbmFyeV9kaXJlY3RvcnkgY3Rlc3RfbWVtY2hlY2sgJyArXG4gICAgICAgICdjdGVzdF9yZWFkX2N1c3RvbV9maWxlcyBjdGVzdF9ydW5fc2NyaXB0IGN0ZXN0X3NsZWVwIGN0ZXN0X3N0YXJ0IGN0ZXN0X3N1Ym1pdCAnICtcbiAgICAgICAgJ2N0ZXN0X3Rlc3QgY3Rlc3RfdXBkYXRlIGN0ZXN0X3VwbG9hZCAnICtcbiAgICAgICAgLy8gZGVwcmVjYXRlZCBjb21tYW5kc1xuICAgICAgICAnYnVpbGRfbmFtZSBleGVjX3Byb2dyYW0gZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzIGluc3RhbGxfZmlsZXMgaW5zdGFsbF9wcm9ncmFtcyAnICtcbiAgICAgICAgJ2luc3RhbGxfdGFyZ2V0cyBsb2FkX2NvbW1hbmQgbWFrZV9kaXJlY3Rvcnkgb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHJlbW92ZSAnICtcbiAgICAgICAgJ3N1YmRpcl9kZXBlbmRzIHN1YmRpcnMgdXNlX21hbmdsZWRfbWVzYSB1dGlsaXR5X3NvdXJjZSB2YXJpYWJsZV9yZXF1aXJlcyB3cml0ZV9maWxlICcgK1xuICAgICAgICAncXQ1X3VzZV9tb2R1bGVzIHF0NV91c2VfcGFja2FnZSBxdDVfd3JhcF9jcHAgJyArXG4gICAgICAgIC8vIGNvcmUga2V5d29yZHNcbiAgICAgICAgJ29uIG9mZiB0cnVlIGZhbHNlIGFuZCBvciBub3QgY29tbWFuZCBwb2xpY3kgdGFyZ2V0IHRlc3QgZXhpc3RzIGlzX25ld2VyX3RoYW4gJyArXG4gICAgICAgICdpc19kaXJlY3RvcnkgaXNfc3ltbGluayBpc19hYnNvbHV0ZSBtYXRjaGVzIGxlc3MgZ3JlYXRlciBlcXVhbCBsZXNzX2VxdWFsICcgK1xuICAgICAgICAnZ3JlYXRlcl9lcXVhbCBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgc3RybGVzc19lcXVhbCBzdHJncmVhdGVyX2VxdWFsIHZlcnNpb25fbGVzcyAnICtcbiAgICAgICAgJ3ZlcnNpb25fZ3JlYXRlciB2ZXJzaW9uX2VxdWFsIHZlcnNpb25fbGVzc19lcXVhbCB2ZXJzaW9uX2dyZWF0ZXJfZXF1YWwgaW5fbGlzdCBkZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFwkeycsIGVuZDogJ30nXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBKUyBrZXl3b3Jkc1xuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIHN1cGVyIHlpZWxkIGltcG9ydCBleHBvcnQgZnJvbSBhcyBkZWZhdWx0IGF3YWl0ICcgK1xuICAgICAgLy8gQ29mZmVlIGtleXdvcmRzXG4gICAgICAndGhlbiB1bmxlc3MgdW50aWwgbG9vcCBvZiBieSB3aGVuIGFuZCBvciBpcyBpc250IG5vdCcsXG4gICAgbGl0ZXJhbDpcbiAgICAgIC8vIEpTIGxpdGVyYWxzXG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCAnICtcbiAgICAgIC8vIENvZmZlZSBsaXRlcmFsc1xuICAgICAgJ3llcyBubyBvbiBvZmYnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ25wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQnXG4gIH07XG4gIHZhciBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1xcey8sIGVuZDogL30vLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEU1xuICB9O1xuICB2YXIgRVhQUkVTU0lPTlMgPSBbXG4gICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge3N0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9fSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy8vJywgZW5kOiAnLy8vJyxcbiAgICAgICAgICBjb250YWluczogW1NVQlNULCBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcvL1tnaW1dezAsM30oPz1cXFxcVyknLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pLio/KD8hW1xcXFxdKS5cXC9bZ2ltXXswLDN9KD89XFxXKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdAJyArIEpTX0lERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJMYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYGBgJywgZW5kOiAnYGBgJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIHZhciBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSlNfSURFTlRfUkV9KTtcbiAgdmFyIFBBUkFNU19SRSA9ICcoXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstPV0+JztcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXChbXlxcXFwoXScsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIC8qIFdlIG5lZWQgYW5vdGhlciBjb250YWluZWQgbmFtZWxlc3MgbW9kZSB0byBub3QgaGF2ZSBldmVyeSBuZXN0ZWRcbiAgICBwYWlyIG9mIHBhcmVucyB0byBiZSBjYWxsZWQgXCJwYXJhbXNcIiAqL1xuICAgIGNvbnRhaW5zOiBbe1xuICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICB9XVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjb2ZmZWUnLCAnY3NvbicsICdpY2VkJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCcjIyMnLCAnIyMjJyksXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uIHN0YXJ0XG4gICAgICAgIGJlZ2luOiAvWzpcXCgsPV1cXHMqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBKU19JREVOVF9SRSArICc6JywgZW5kOiAnOicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnX3wwIGFzIGF0IGNvZml4IGVsc2UgZW5kIGV4aXN0cyBleGlzdHMyIGZpeCBmb3IgZm9yYWxsIGZ1biBpZiBJRiBpbiBsZXQgJyArXG4gICAgICAgICdtYXRjaCBtb2QgUHJvcCByZXR1cm4gU2V0IHRoZW4gVHlwZSB1c2luZyB3aGVyZSB3aXRoICcgK1xuICAgICAgICAnQWJvcnQgQWJvdXQgQWRkIEFkbWl0IEFkbWl0dGVkIEFsbCBBcmd1bWVudHMgQXNzdW1wdGlvbnMgQXhpb20gQmFjayBCYWNrVG8gJyArXG4gICAgICAgICdCYWNrdHJhY2sgQmluZCBCbGFja2xpc3QgQ2Fub25pY2FsIENkIENoZWNrIENsYXNzIENsYXNzZXMgQ2xvc2UgQ29lcmNpb24gJyArXG4gICAgICAgICdDb2VyY2lvbnMgQ29GaXhwb2ludCBDb0luZHVjdGl2ZSBDb2xsZWN0aW9uIENvbWJpbmVkIENvbXB1dGUgQ29uamVjdHVyZSAnICtcbiAgICAgICAgJ0NvbmplY3R1cmVzIENvbnN0YW50IGNvbnN0ciBDb25zdHJhaW50IENvbnN0cnVjdG9ycyBDb250ZXh0IENvcm9sbGFyeSAnICtcbiAgICAgICAgJ0NyZWF0ZUhpbnREYiBDdXQgRGVjbGFyZSBEZWZpbmVkIERlZmluaXRpb24gRGVsaW1pdCBEZXBlbmRlbmNpZXMgRGVwZW5kZW50JyArXG4gICAgICAgICdEZXJpdmUgRHJvcCBlYXV0byBFbmQgRXF1YWxpdHkgRXZhbCBFeGFtcGxlIEV4aXN0ZW50aWFsIEV4aXN0ZW50aWFscyAnICtcbiAgICAgICAgJ0V4aXN0aW5nIEV4cG9ydCBleHBvcnRpbmcgRXh0ZXJuIEV4dHJhY3QgRXh0cmFjdGlvbiBGYWN0IEZpZWxkIEZpZWxkcyBGaWxlICcgK1xuICAgICAgICAnRml4cG9pbnQgRm9jdXMgZm9yIEZyb20gRnVuY3Rpb24gRnVuY3Rpb25hbCBHZW5lcmFsaXphYmxlIEdsb2JhbCBHb2FsIEdyYWIgJyArXG4gICAgICAgICdHcmFtbWFyIEdyYXBoIEd1YXJkZWQgSGVhcCBIaW50IEhpbnREYiBIaW50cyBIeXBvdGhlc2VzIEh5cG90aGVzaXMgaWRlbnQgJyArXG4gICAgICAgICdJZGVudGl0eSBJZiBJbW1lZGlhdGUgSW1wbGljaXQgSW1wb3J0IEluY2x1ZGUgSW5kdWN0aXZlIEluZml4IEluZm8gSW5pdGlhbCAnICtcbiAgICAgICAgJ0lubGluZSBJbnNwZWN0IEluc3RhbmNlIEluc3RhbmNlcyBJbnRybyBJbnRyb3MgSW52ZXJzaW9uIEludmVyc2lvbl9jbGVhciAnICtcbiAgICAgICAgJ0xhbmd1YWdlIExlZnQgTGVtbWEgTGV0IExpYnJhcmllcyBMaWJyYXJ5IExvYWQgTG9hZFBhdGggTG9jYWwgTG9jYXRlIEx0YWMgTUwgJyArXG4gICAgICAgICdNb2RlIE1vZHVsZSBNb2R1bGVzIE1vbm9tb3JwaGljIE1vcnBoaXNtIE5leHQgTm9JbmxpbmUgTm90YXRpb24gT2JsaWdhdGlvbiAnICtcbiAgICAgICAgJ09ibGlnYXRpb25zIE9wYXF1ZSBPcGVuIE9wdGltaXplIE9wdGlvbnMgUGFyYW1ldGVyIFBhcmFtZXRlcnMgUGFyYW1ldHJpYyAnICtcbiAgICAgICAgJ1BhdGggUGF0aHMgcGF0dGVybiBQb2x5bW9ycGhpYyBQcmV0ZXJtIFByaW50IFByaW50aW5nIFByb2dyYW0gUHJvamVjdGlvbnMgJyArXG4gICAgICAgICdQcm9vZiBQcm9wb3NpdGlvbiBQd2QgUWVkIFF1aXQgUmVjIFJlY29yZCBSZWN1cnNpdmUgUmVkaXJlY3QgUmVsYXRpb24gUmVtYXJrICcgK1xuICAgICAgICAnUmVtb3ZlIFJlcXVpcmUgUmVzZXJ2ZWQgUmVzZXQgUmVzb2x2ZSBSZXN0YXJ0IFJld3JpdGUgUmlnaHQgUmluZyBSaW5ncyBTYXZlICcgK1xuICAgICAgICAnU2NoZW1lIFNjb3BlIFNjb3BlcyBTY3JpcHQgU2VhcmNoIFNlYXJjaEFib3V0IFNlYXJjaEhlYWQgU2VhcmNoUGF0dGVybiAnICtcbiAgICAgICAgJ1NlYXJjaFJld3JpdGUgU2VjdGlvbiBTZXBhcmF0ZSBTZXQgU2V0b2lkIFNob3cgU29sdmUgU29ydGVkIFN0ZXAgU3RyYXRlZ2llcyAnICtcbiAgICAgICAgJ1N0cmF0ZWd5IFN0cnVjdHVyZSBTdWJDbGFzcyBUYWJsZSBUYWJsZXMgVGFjdGljIFRlcm0gVGVzdCBUaGVvcmVtIFRpbWUgJyArXG4gICAgICAgICdUaW1lb3V0IFRyYW5zcGFyZW50IFR5cGUgVHlwZWNsYXNzZXMgVHlwZXMgVW5kZWxpbWl0IFVuZG8gVW5mb2N1cyBVbmZvY3VzZWQgJyArXG4gICAgICAgICdVbmZvbGQgVW5pdmVyc2UgVW5pdmVyc2VzIFVuc2V0IFVuc2hlbHZlIHVzaW5nIFZhcmlhYmxlIFZhcmlhYmxlcyBWYXJpYW50ICcgK1xuICAgICAgICAnVmVyYm9zZSBWaXNpYmlsaXR5IHdoZXJlIHdpdGgnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhYnN0cmFjdCBhYnN1cmQgYWRtaXQgYWZ0ZXIgYXBwbHkgYXMgYXNzZXJ0IGFzc3VtcHRpb24gYXQgYXV0byBhdXRvcmV3cml0ZSAnICtcbiAgICAgICAgJ2F1dG91bmZvbGQgYmVmb3JlIGJvdHRvbSBidGF1dG8gYnkgY2FzZSBjYXNlX2VxIGNibiBjYnYgY2hhbmdlICcgK1xuICAgICAgICAnY2xhc3NpY2FsX2xlZnQgY2xhc3NpY2FsX3JpZ2h0IGNsZWFyIGNsZWFyYm9keSBjb2ZpeCBjb21wYXJlIGNvbXB1dGUgJyArXG4gICAgICAgICdjb25ncnVlbmNlIGNvbnN0cl9lcSBjb25zdHJ1Y3RvciBjb250cmFkaWN0IGNvbnRyYWRpY3Rpb24gY3V0IGN1dHJld3JpdGUgJyArXG4gICAgICAgICdjeWNsZSBkZWNpZGUgZGVjb21wb3NlIGRlcGVuZGVudCBkZXN0cnVjdCBkZXN0cnVjdGlvbiBkaW50dWl0aW9uICcgK1xuICAgICAgICAnZGlzY3JpbWluYXRlIGRpc2NyUiBkbyBkb3VibGUgZHRhdXRvIGVhcHBseSBlYXNzdW1wdGlvbiBlYXV0byBlY2FzZSAnICtcbiAgICAgICAgJ2Vjb25zdHJ1Y3RvciBlZGVzdHJ1Y3QgZWRpc2NyaW1pbmF0ZSBlZWxpbSBlZXhhY3QgZWV4aXN0cyBlaW5kdWN0aW9uICcgK1xuICAgICAgICAnZWluamVjdGlvbiBlbGVmdCBlbGltIGVsaW10eXBlIGVub3VnaCBlcXVhbGl0eSBlcmV3cml0ZSBlcmlnaHQgJyArXG4gICAgICAgICdlc2ltcGxpZnlfZXEgZXNwbGl0IGV2YXIgZXhhY3QgZXhhY3RseV9vbmNlIGV4ZmFsc28gZXhpc3RzIGZfZXF1YWwgZmFpbCAnICtcbiAgICAgICAgJ2ZpZWxkIGZpZWxkX3NpbXBsaWZ5IGZpZWxkX3NpbXBsaWZ5X2VxIGZpcnN0IGZpcnN0b3JkZXIgZml4IGZvbGQgZm91cmllciAnICtcbiAgICAgICAgJ2Z1bmN0aW9uYWwgZ2VuZXJhbGl6ZSBnZW5lcmFsaXppbmcgZ2ZhaWwgZ2l2ZV91cCBoYXNfZXZhciBobmYgaWR0YWMgaW4gJyArXG4gICAgICAgICdpbmR1Y3Rpb24gaW5qZWN0aW9uIGluc3RhbnRpYXRlIGludHJvIGludHJvX3BhdHRlcm4gaW50cm9zIGludHVpdGlvbiAnICtcbiAgICAgICAgJ2ludmVyc2lvbiBpbnZlcnNpb25fY2xlYXIgaXNfZXZhciBpc192YXIgbGFwcGx5IGxhenkgbGVmdCBsaWEgbHJhIG1vdmUgJyArXG4gICAgICAgICduYXRpdmVfY29tcHV0ZSBuaWEgbnNhdHogb21lZ2Egb25jZSBwYXR0ZXJuIHBvc2UgcHJvZ3Jlc3MgcHJvb2YgcHNhdHogcXVvdGUgJyArXG4gICAgICAgICdyZWNvcmQgcmVkIHJlZmluZSByZWZsZXhpdml0eSByZW1lbWJlciByZW5hbWUgcmVwZWF0IHJlcGxhY2UgcmV2ZXJ0ICcgK1xuICAgICAgICAncmV2Z29hbHMgcmV3cml0ZSByZXdyaXRlX3N0cmF0IHJpZ2h0IHJpbmcgcmluZ19zaW1wbGlmeSBydGF1dG8gc2V0ICcgK1xuICAgICAgICAnc2V0b2lkX3JlZmxleGl2aXR5IHNldG9pZF9yZXBsYWNlIHNldG9pZF9yZXdyaXRlIHNldG9pZF9zeW1tZXRyeSAnICtcbiAgICAgICAgJ3NldG9pZF90cmFuc2l0aXZpdHkgc2hlbHZlIHNoZWx2ZV91bmlmaWFibGUgc2ltcGwgc2ltcGxlIHNpbXBsaWZ5X2VxIHNvbHZlICcgK1xuICAgICAgICAnc3BlY2lhbGl6ZSBzcGxpdCBzcGxpdF9SYWJzIHNwbGl0X1JtdWx0IHN0ZXBsIHN0ZXByIHN1YnN0IHN1bSBzd2FwICcgK1xuICAgICAgICAnc3ltbWV0cnkgdGFjdGljIHRhdXRvIHRpbWUgdGltZW91dCB0b3AgdHJhbnNpdGl2aXR5IHRyaXZpYWwgdHJ5IHRyeWlmICcgK1xuICAgICAgICAndW5mb2xkIHVuaWZ5IHVudGlsIHVzaW5nIHZtX2NvbXB1dGUgd2l0aCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKFxcXFwqJywgJ1xcXFwqXFxcXCknKSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgYmVnaW46ICdcXFxcfFxcXFxzKicsXG4gICAgICAgIGVuZDogJ1xcXFx3KydcbiAgICAgIH0sXG4gICAgICB7YmVnaW46IC9bLT1dPi99IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvcyAoaGxqcykge1xuXG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsXG4gICAgICAgIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFt7IC8vIGVzY2FwZWRcbiAgICAgICAgICBiZWdpbjogXCJcXFwiXFxcIlwiLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6IFwibnVtYmVyXCIsXG4gICAgYmVnaW46IFwiXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspXCIsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIENPU19LRVlXT1JEUyA9XG4gICAgJ3Byb3BlcnR5IHBhcmFtZXRlciBjbGFzcyBjbGFzc21ldGhvZCBjbGllbnRtZXRob2QgZXh0ZW5kcyBhcyBicmVhayAnICtcbiAgICAnY2F0Y2ggY2xvc2UgY29udGludWUgZG8gZHwwIGVsc2UgZWxzZWlmIGZvciBnb3RvIGhhbHQgaGFuZyBofDAgaWYgam9iICcgK1xuICAgICdqfDAga2lsbCBrfDAgbG9jayBsfDAgbWVyZ2UgbmV3IG9wZW4gcXVpdCBxfDAgcmVhZCByfDAgcmV0dXJuIHNldCBzfDAgJyArXG4gICAgJ3Rjb21taXQgdGhyb3cgdHJvbGxiYWNrIHRyeSB0c3RhcnQgdXNlIHZpZXcgd2hpbGUgd3JpdGUgd3wwIHhlY3V0ZSB4fDAgJyArXG4gICAgJ3praWxsIHpuc3BhY2Ugem4genRyYXAgendyaXRlIHp3IHp6ZHVtcCB6endyaXRlIHByaW50IHpicmVhayB6aW5zZXJ0ICcgK1xuICAgICd6bG9hZCB6cHJpbnQgenJlbW92ZSB6c2F2ZSB6enByaW50IG12IG12Y2FsbCBtdmNydCBtdmRpbSBtdnByaW50IHpxdWl0ICcgK1xuICAgICd6c3luYyBhc2NpaSc7XG5cbiAgICAvLyByZWdpc3RlcmVkIGZ1bmN0aW9uIC0gbm8gbmVlZCBpbiB0aGVtIGR1ZSB0byBhbGwgZnVuY3Rpb25zIGFyZSBoaWdobGlnaHRlZCxcbiAgICAvLyBidXQgSSdsbCBqdXN0IGxlYXZlIHRoaXMgaGVyZS5cblxuICAgIC8vXCIkYml0XCIsIFwiJGJpdGNvdW50XCIsXG4gICAgLy9cIiRiaXRmaW5kXCIsIFwiJGJpdGxvZ2ljXCIsIFwiJGNhc2VcIiwgXCIkY2hhclwiLCBcIiRjbGFzc21ldGhvZFwiLCBcIiRjbGFzc25hbWVcIixcbiAgICAvL1wiJGNvbXBpbGVcIiwgXCIkZGF0YVwiLCBcIiRkZWNpbWFsXCIsIFwiJGRvdWJsZVwiLCBcIiRleHRyYWN0XCIsIFwiJGZhY3RvclwiLFxuICAgIC8vXCIkZmluZFwiLCBcIiRmbnVtYmVyXCIsIFwiJGdldFwiLCBcIiRpbmNyZW1lbnRcIiwgXCIkaW51bWJlclwiLCBcIiRpc29iamVjdFwiLFxuICAgIC8vXCIkaXN2YWxpZGRvdWJsZVwiLCBcIiRpc3ZhbGlkbnVtXCIsIFwiJGp1c3RpZnlcIiwgXCIkbGVuZ3RoXCIsIFwiJGxpc3RcIixcbiAgICAvL1wiJGxpc3RidWlsZFwiLCBcIiRsaXN0ZGF0YVwiLCBcIiRsaXN0ZmluZFwiLCBcIiRsaXN0ZnJvbXN0cmluZ1wiLCBcIiRsaXN0Z2V0XCIsXG4gICAgLy9cIiRsaXN0bGVuZ3RoXCIsIFwiJGxpc3RuZXh0XCIsIFwiJGxpc3RzYW1lXCIsIFwiJGxpc3R0b3N0cmluZ1wiLCBcIiRsaXN0dmFsaWRcIixcbiAgICAvL1wiJGxvY2F0ZVwiLCBcIiRtYXRjaFwiLCBcIiRtZXRob2RcIiwgXCIkbmFtZVwiLCBcIiRuY29udmVydFwiLCBcIiRuZXh0XCIsXG4gICAgLy9cIiRub3JtYWxpemVcIiwgXCIkbm93XCIsIFwiJG51bWJlclwiLCBcIiRvcmRlclwiLCBcIiRwYXJhbWV0ZXJcIiwgXCIkcGllY2VcIixcbiAgICAvL1wiJHByZWZldGNob2ZmXCIsIFwiJHByZWZldGNob25cIiwgXCIkcHJvcGVydHlcIiwgXCIkcWxlbmd0aFwiLCBcIiRxc3Vic2NyaXB0XCIsXG4gICAgLy9cIiRxdWVyeVwiLCBcIiRyYW5kb21cIiwgXCIkcmVwbGFjZVwiLCBcIiRyZXZlcnNlXCIsIFwiJHNjb252ZXJ0XCIsIFwiJHNlbGVjdFwiLFxuICAgIC8vXCIkc29ydGJlZ2luXCIsIFwiJHNvcnRlbmRcIiwgXCIkc3RhY2tcIiwgXCIkdGV4dFwiLCBcIiR0cmFuc2xhdGVcIiwgXCIkdmlld1wiLFxuICAgIC8vXCIkd2FzY2lpXCIsIFwiJHdjaGFyXCIsIFwiJHdleHRyYWN0XCIsIFwiJHdmaW5kXCIsIFwiJHdpc3dpZGVcIiwgXCIkd2xlbmd0aFwiLFxuICAgIC8vXCIkd3JldmVyc2VcIiwgXCIkeGVjdXRlXCIsIFwiJHphYnNcIiwgXCIkemFyY2Nvc1wiLCBcIiR6YXJjc2luXCIsIFwiJHphcmN0YW5cIixcbiAgICAvL1wiJHpjb3NcIiwgXCIkemNvdFwiLCBcIiR6Y3NjXCIsIFwiJHpkYXRlXCIsIFwiJHpkYXRlaFwiLCBcIiR6ZGF0ZXRpbWVcIixcbiAgICAvL1wiJHpkYXRldGltZWhcIiwgXCIkemV4cFwiLCBcIiR6aGV4XCIsIFwiJHpsblwiLCBcIiR6bG9nXCIsIFwiJHpwb3dlclwiLCBcIiR6c2VjXCIsXG4gICAgLy9cIiR6c2luXCIsIFwiJHpzcXJcIiwgXCIkenRhblwiLCBcIiR6dGltZVwiLCBcIiR6dGltZWhcIiwgXCIkemJvb2xlYW5cIixcbiAgICAvL1wiJHpjb252ZXJ0XCIsIFwiJHpjcmNcIiwgXCIkemN5Y1wiLCBcIiR6ZGFzY2lpXCIsIFwiJHpkY2hhclwiLCBcIiR6ZlwiLFxuICAgIC8vXCIkemlzd2lkZVwiLCBcIiR6bGFzY2lpXCIsIFwiJHpsY2hhclwiLCBcIiR6bmFtZVwiLCBcIiR6cG9zaXRpb25cIiwgXCIkenFhc2NpaVwiLFxuICAgIC8vXCIkenFjaGFyXCIsIFwiJHpzZWFyY2hcIiwgXCIkenNlZWtcIiwgXCIkenN0cmlwXCIsIFwiJHp3YXNjaWlcIiwgXCIkendjaGFyXCIsXG4gICAgLy9cIiR6d2lkdGhcIiwgXCIkendwYWNrXCIsIFwiJHp3YnBhY2tcIiwgXCIkend1bnBhY2tcIiwgXCIkendidW5wYWNrXCIsIFwiJHp6ZW5rYWt1XCIsXG4gICAgLy9cIiRjaGFuZ2VcIiwgXCIkbXZcIiwgXCIkbXZhdFwiLCBcIiRtdmZtdFwiLCBcIiRtdmZtdHNcIiwgXCIkbXZpY29udlwiLFxuICAgIC8vXCIkbXZpY29udnNcIiwgXCIkbXZpbm1hdFwiLCBcIiRtdmxvdmVyXCIsIFwiJG12b2NvbnZcIiwgXCIkbXZvY29udnNcIiwgXCIkbXZyYWlzZVwiLFxuICAgIC8vXCIkbXZ0cmFuc1wiLCBcIiRtdnZcIiwgXCIkbXZuYW1lXCIsIFwiJHpiaXRhbmRcIiwgXCIkemJpdGNvdW50XCIsIFwiJHpiaXRmaW5kXCIsXG4gICAgLy9cIiR6Yml0Z2V0XCIsIFwiJHpiaXRsZW5cIiwgXCIkemJpdG5vdFwiLCBcIiR6Yml0b3JcIiwgXCIkemJpdHNldFwiLCBcIiR6Yml0c3RyXCIsXG4gICAgLy9cIiR6Yml0eG9yXCIsIFwiJHppbmNyZW1lbnRcIiwgXCIkem5leHRcIiwgXCIkem9yZGVyXCIsIFwiJHpwcmV2aW91c1wiLCBcIiR6c29ydFwiLFxuICAgIC8vXCJkZXZpY2VcIiwgXCIkZWNvZGVcIiwgXCIkZXN0YWNrXCIsIFwiJGV0cmFwXCIsIFwiJGhhbHRcIiwgXCIkaG9yb2xvZ1wiLFxuICAgIC8vXCIkaW9cIiwgXCIkam9iXCIsIFwiJGtleVwiLCBcIiRuYW1lc3BhY2VcIiwgXCIkcHJpbmNpcGFsXCIsIFwiJHF1aXRcIiwgXCIkcm9sZXNcIixcbiAgICAvL1wiJHN0b3JhZ2VcIiwgXCIkc3lzdGVtXCIsIFwiJHRlc3RcIiwgXCIkdGhpc1wiLCBcIiR0bGV2ZWxcIiwgXCIkdXNlcm5hbWVcIixcbiAgICAvL1wiJHhcIiwgXCIkeVwiLCBcIiR6YVwiLCBcIiR6YlwiLCBcIiR6Y2hpbGRcIiwgXCIkemVvZlwiLCBcIiR6ZW9zXCIsIFwiJHplcnJvclwiLFxuICAgIC8vXCIkemhvcm9sb2dcIiwgXCIkemlvXCIsIFwiJHpqb2JcIiwgXCIkem1vZGVcIiwgXCIkem5zcGFjZVwiLCBcIiR6cGFyZW50XCIsIFwiJHpwaVwiLFxuICAgIC8vXCIkenBvc1wiLCBcIiR6cmVmZXJlbmNlXCIsIFwiJHpzdG9yYWdlXCIsIFwiJHp0aW1lc3RhbXBcIiwgXCIkenRpbWV6b25lXCIsXG4gICAgLy9cIiR6dHJhcFwiLCBcIiR6dmVyc2lvblwiXG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFtcImNvc1wiLCBcImNsc1wiXSxcbiAgICBrZXl3b3JkczogQ09TX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgICAgIGJlZ2luOiAvOy8sIGVuZDogXCIkXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gRnVuY3Rpb25zIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOiB3cml0ZSAkenRpbWUoNjAqNjAqMyksICQkbXlGdW5jKDEwKSwgJCReVmFsKDEpXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogLyg/OlxcJFxcJD98XFwuXFwuKVxcXj9bYS16QS1aXSsvXG4gICAgICB9LFxuICAgICAgeyAvLyBNYWNybyBjb21tYW5kOiBxdWl0ICQkJE9LXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogL1xcJFxcJFxcJFthLXpBLVpdKy9cbiAgICAgIH0sXG4gICAgICB7IC8vIFNwZWNpYWwgKGdsb2JhbCkgdmFyaWFibGVzOiB3cml0ZSAlcmVxdWVzdC5Db250ZW50OyBCdWlsdC1pbiBjbGFzc2VzOiAlTGlicmFyeS5JbnRlZ2VyXG4gICAgICAgIGNsYXNzTmFtZTogXCJidWlsdF9pblwiLFxuICAgICAgICBiZWdpbjogLyVbYS16XSsoPzpcXC5bYS16XSspKi9cbiAgICAgIH0sXG4gICAgICB7IC8vIEdsb2JhbCB2YXJpYWJsZTogc2V0IF5nbG9iYWxOYW1lID0gMTIgd3JpdGUgXmdsb2JhbE5hbWVcbiAgICAgICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogL1xcXiU/W2EtekEtWl1bXFx3XSovXG4gICAgICB9LFxuICAgICAgeyAvLyBTb21lIGNvbnRyb2wgY29uc3RydWN0aW9uczogZG8gIyNjbGFzcyhQYWNrYWdlLkNsYXNzTmFtZSkuTWV0aG9kKCksICMjc3VwZXIoKVxuICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiLFxuICAgICAgICBiZWdpbjogLyMjY2xhc3N8IyNzdXBlcnwjZGVmaW5lfCNkaW0vXG4gICAgICB9LFxuXG4gICAgICAvLyBzdWItbGFuZ3VhZ2VzOiBhcmUgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSBobGpzIGJ5IDExLzE1LzIwMTVcbiAgICAgIC8vIGxlZnQgZm9yIHRoZSBmdXR1cmUgaW1wbGVtZW50YXRpb24uXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJnNxbFxcKC8sICAgIGVuZDogL1xcKS8sXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFwic3FsXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJihqc3xqc2NyaXB0fGphdmFzY3JpcHQpPC8sIGVuZDogLz4vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcImphdmFzY3JpcHRcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBicmFrZXMgZmlyc3QgYW5kIGxhc3QgdGFnLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZW1iZWQgYSB2YWxpZCBodG1sXG4gICAgICAgIGJlZ2luOiAvJmh0bWw8XFxzKjwvLCBlbmQ6IC8+XFxzKj4vLFxuICAgICAgICBzdWJMYW5ndWFnZTogXCJ4bWxcIlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBSRVNPVVJDRVMgPSAncHJpbWl0aXZlIHJzY190ZW1wbGF0ZSc7XG5cbiAgdmFyIENPTU1BTkRTID0gJ2dyb3VwIGNsb25lIG1zIG1hc3RlciBsb2NhdGlvbiBjb2xvY2F0aW9uIG9yZGVyIGZlbmNpbmdfdG9wb2xvZ3kgJyArXG4gICAgICAncnNjX3RpY2tldCBhY2xfdGFyZ2V0IGFjbF9ncm91cCB1c2VyIHJvbGUgJyArXG4gICAgICAndGFnIHhtbCc7XG5cbiAgdmFyIFBST1BFUlRZX1NFVFMgPSAncHJvcGVydHkgcnNjX2RlZmF1bHRzIG9wX2RlZmF1bHRzJztcblxuICB2YXIgS0VZV09SRFMgPSAncGFyYW1zIG1ldGEgb3BlcmF0aW9ucyBvcCBydWxlIGF0dHJpYnV0ZXMgdXRpbGl6YXRpb24nO1xuXG4gIHZhciBPUEVSQVRPUlMgPSAncmVhZCB3cml0ZSBkZW55IGRlZmluZWQgbm90X2RlZmluZWQgaW5fcmFuZ2UgZGF0ZSBzcGVjIGluICcgK1xuICAgICAgJ3JlZiByZWZlcmVuY2UgYXR0cmlidXRlIHR5cGUgeHBhdGggdmVyc2lvbiBhbmQgb3IgbHQgZ3QgdGFnICcgK1xuICAgICAgJ2x0ZSBndGUgZXEgbmUgXFxcXCc7XG5cbiAgdmFyIFRZUEVTID0gJ251bWJlciBzdHJpbmcnO1xuXG4gIHZhciBMSVRFUkFMUyA9ICdNYXN0ZXIgU3RhcnRlZCBTbGF2ZSBTdG9wcGVkIHN0YXJ0IHByb21vdGUgZGVtb3RlIHN0b3AgbW9uaXRvciB0cnVlIGZhbHNlJztcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3JtJywgJ3BjbWsnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyArICcgJyArIE9QRVJBVE9SUyArICcgJyArIFRZUEVTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbm9kZScsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogJ1xcXFxzKihbXFxcXHdfLV0rOik/JyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKltcXFxcJFxcXFx3X11bXFxcXHdfLV0qJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogUkVTT1VSQ0VTLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgZW5kOiAnXFxcXHMqW1xcXFwkXFxcXHdfXVtcXFxcd18tXSonLFxuICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgZW5kOiAnXFxcXHMqQD9bXFxcXHdfXVtcXFxcd19cXFxcLjotXSonXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBDT01NQU5EUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXHMrJyxcbiAgICAgICAga2V5d29yZHM6IENPTU1BTkRTLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgZW5kOiAnW1xcXFwkXFxcXHdfXVtcXFxcd18tXSonXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFBST1BFUlRZX1NFVFMsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICBlbmQ6ICdcXFxccyooW1xcXFx3Xy1dKzopPydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyhvY2Z8c3lzdGVtZHxzZXJ2aWNlfGxzYik6W1xcXFx3XzotXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCsoXFxcXC5cXFxcZCspPyhtc3xzfGh8bSk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdbLV0/KGluZmluaXR5fGluZiknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogLyhbQS1aYS16XFwkX1xcI11bXFx3Xy1dKyk9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgICAgICBiZWdpbjogJzwvPycsXG4gICAgICAgIGVuZDogJy8/PicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJTlRfU1VGRklYID0gJyhfKlt1aV0oOHwxNnwzMnw2NHwxMjgpKT8nO1xuICB2YXIgRkxPQVRfU1VGRklYID0gJyhfKmYoMzJ8NjQpKT8nO1xuICB2YXIgQ1JZU1RBTF9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT8nO1xuICB2YXIgQ1JZU1RBTF9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dXFxcXEB8PDx8Pj58Wz0hXX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+fF18Ly98Ly89fCZbLSsqXT0/fCZcXFxcKlxcXFwqfFxcXFxbXFxcXF1bPT9dPyc7XG4gIHZhciBDUllTVEFMX1BBVEhfUkUgPSAnW0EtWmEtel9dXFxcXHcqKDo6XFxcXHcrKSooXFxcXD98XFxcXCEpPyc7XG4gIHZhciBDUllTVEFMX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWJzdHJhY3QgYWxpYXMgYW5ub3RhdGlvbiBhcyBhcz8gYXNtIGJlZ2luIGJyZWFrIGNhc2UgY2xhc3MgZGVmIGRvIGVsc2UgZWxzaWYgZW5kIGVuc3VyZSBlbnVtIGV4dGVuZCBmb3IgZnVuIGlmICcgK1xuICAgICAgJ2luY2x1ZGUgaW5zdGFuY2Vfc2l6ZW9mIGlzX2E/IGxpYiBtYWNybyBtb2R1bGUgbmV4dCBuaWw/IG9mIG91dCBwb2ludGVyb2YgcHJpdmF0ZSBwcm90ZWN0ZWQgcmVzY3VlIHJlc3BvbmRzX3RvPyAnICtcbiAgICAgICdyZXR1cm4gcmVxdWlyZSBzZWxlY3Qgc2VsZiBzaXplb2Ygc3RydWN0IHN1cGVyIHRoZW4gdHlwZSB0eXBlb2YgdW5pb24gdW5pbml0aWFsaXplZCB1bmxlc3MgdW50aWwgdmVyYmF0aW0gd2hlbiB3aGlsZSB3aXRoIHlpZWxkICcgK1xuICAgICAgJ19fRElSX18gX19FTkRfTElORV9fIF9fRklMRV9fIF9fTElORV9fJyxcbiAgICBsaXRlcmFsOiAnZmFsc2UgbmlsIHRydWUnXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjeycsIGVuZDogJ30nLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBBTlNJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxce1xcXFx7JywgZW5kOiAnXFxcXH1cXFxcfSd9LFxuICAgICAge2JlZ2luOiAnXFxcXHslJywgZW5kOiAnJVxcXFx9J31cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlUGFyZW4oYmVnaW4sIGVuZCkge1xuICAgIHZhclxuICAgIGNvbnRhaW5zID0gW3tiZWdpbjogYmVnaW4sIGVuZDogZW5kfV07XG4gICAgY29udGFpbnNbMF0uY29udGFpbnMgPSBjb250YWlucztcbiAgICByZXR1cm4gY29udGFpbnM7XG4gIH1cbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogLycvLCBlbmQ6IC8nL30sXG4gICAgICB7YmVnaW46IC9cIi8sIGVuZDogL1wiL30sXG4gICAgICB7YmVnaW46IC9gLywgZW5kOiAvYC99LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP1xcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFwoJywgJ1xcXFwpJyl9LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP1xcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJVtRd2ldP3snLCBlbmQ6ICd9JywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCd7JywgJ30nKX0sXG4gICAgICB7YmVnaW46ICclW1F3aV0/PCcsIGVuZDogJz4nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJzwnLCAnPicpfSxcbiAgICAgIHtiZWdpbjogJyVbUXdpXT9cXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgICB7YmVnaW46IC88PC1cXHcrJC8sIGVuZDogL15cXHMqXFx3KyQvfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcbiAgdmFyIFFfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJyVxXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICB7YmVnaW46ICclcVxcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJXF7JywgZW5kOiAnfScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbigneycsICd9Jyl9LFxuICAgICAge2JlZ2luOiAnJXE8JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAge2JlZ2luOiAnJXFcXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgICB7YmVnaW46IC88PC0nXFx3KyckLywgZW5kOiAvXlxccypcXHcrJC99LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwLFxuICB9O1xuICB2YXIgUkVHRVhQID0ge1xuICAgIGJlZ2luOiAnKD8hJX0pKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcbnxcXFxcYihjYXNlfGlmfHNlbGVjdHx1bmxlc3N8dW50aWx8d2hlbnx3aGlsZSlcXFxcYilcXFxccyonLFxuICAgIGtleXdvcmRzOiAnY2FzZSBpZiBzZWxlY3QgdW5sZXNzIHVudGlsIHdoZW4gd2hpbGUnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnLy9bYS16XSonLCByZWxldmFuY2U6IDB9LFxuICAgICAgICAgIHtiZWdpbjogJy8oPyFcXFxcLyknLCBlbmQ6ICcvW2Etel0qJ30sXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgUkVHRVhQMiA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJyVyXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICB7YmVnaW46ICclclxcXFxbJywgZW5kOiAnXFxcXF0nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFxbJywgJ1xcXFxdJyl9LFxuICAgICAge2JlZ2luOiAnJXJ7JywgZW5kOiAnfScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbigneycsICd9Jyl9LFxuICAgICAge2JlZ2luOiAnJXI8JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAge2JlZ2luOiAnJXJcXFxcfCcsIGVuZDogJ1xcXFx8J30sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIEFUVFJJQlVURSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0BcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KVxuICAgIF1cbiAgfTtcbiAgdmFyIENSWVNUQUxfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBFWFBBTlNJT04sXG4gICAgU1RSSU5HLFxuICAgIFFfU1RSSU5HLFxuICAgIFJFR0VYUDIsXG4gICAgUkVHRVhQLFxuICAgIEFUVFJJQlVURSxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBtb2R1bGUgc3RydWN0JywgZW5kOiAnJHw7JyxcbiAgICAgIGlsbGVnYWw6IC89LyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogQ1JZU1RBTF9QQVRIX1JFfSksXG4gICAgICAgIHtiZWdpbjogJzwnfSAvLyByZWxldmFuY2UgYm9vc3RlciBmb3IgaW5oZXJpdGFuY2VcbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdsaWIgZW51bSB1bmlvbicsIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IENSWVNUQUxfUEFUSF9SRX0pLFxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdhbm5vdGF0aW9uJywgZW5kOiAnJHw7JyxcbiAgICAgIGlsbGVnYWw6IC89LyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogQ1JZU1RBTF9QQVRIX1JFfSksXG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZicsIGVuZDogL1xcQlxcYi8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgYmVnaW46IENSWVNUQUxfTUVUSE9EX1JFLFxuICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW4gbWFjcm8nLCBlbmQ6IC9cXEJcXGIvLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgIGJlZ2luOiBDUllTVEFMX01FVEhPRF9SRSxcbiAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiA1XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoXFxcXCF8XFxcXD8pPzonLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6JyxcbiAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCB7YmVnaW46IENSWVNUQUxfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7IGJlZ2luOiAnXFxcXGIwYihbMDFfXSspJyArIElOVF9TVUZGSVggfSxcbiAgICAgICAgeyBiZWdpbjogJ1xcXFxiMG8oWzAtN19dKyknICsgSU5UX1NVRkZJWCB9LFxuICAgICAgICB7IGJlZ2luOiAnXFxcXGIweChbQS1GYS1mMC05X10rKScgKyBJTlRfU1VGRklYIH0sXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYihbMS05XVswLTlfXSpbMC05XXxbMC05XSkoXFxcXC5bMC05XVswLTlfXSopPyhbZUVdXypbLStdP1swLTlfXSopPycgKyBGTE9BVF9TVUZGSVggKyAnKD8hXyknIH0sXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYihbMS05XVswLTlfXSp8MCknICsgSU5UX1NVRkZJWCB9XG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IENSWVNUQUxfREVGQVVMVF9DT05UQUlOUztcbiAgRVhQQU5TSU9OLmNvbnRhaW5zID0gQ1JZU1RBTF9ERUZBVUxUX0NPTlRBSU5TLnNsaWNlKDEpOyAvLyB3aXRob3V0IEVYUEFOU0lPTlxuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjciddLFxuICAgIGxleGVtZXM6IENSWVNUQUxfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IENSWVNUQUxfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IENSWVNUQUxfREVGQVVMVF9DT05UQUlOU1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBOb3JtYWwga2V5d29yZHMuXG4gICAgICAnYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY29uc3QgY29udGludWUgZGVjaW1hbCAnICtcbiAgICAgICdkZWZhdWx0IGRlbGVnYXRlIGRvIGRvdWJsZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmaW5hbGx5IGZpeGVkIGZsb2F0ICcgK1xuICAgICAgJ2ZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgJyArXG4gICAgICAnb2JqZWN0IG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiBzYnl0ZSAnICtcbiAgICAgICdzZWFsZWQgc2hvcnQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdHJ5IHR5cGVvZiAnICtcbiAgICAgICd1aW50IHVsb25nIHVuY2hlY2tlZCB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSAnICtcbiAgICAgIC8vIENvbnRleHR1YWwga2V5d29yZHMuXG4gICAgICAnYWRkIGFsaWFzIGFzY2VuZGluZyBhc3luYyBhd2FpdCBieSBkZXNjZW5kaW5nIGR5bmFtaWMgZXF1YWxzIGZyb20gZ2V0IGdsb2JhbCBncm91cCBpbnRvIGpvaW4gJyArXG4gICAgICAnbGV0IG5hbWVvZiBvbiBvcmRlcmJ5IHBhcnRpYWwgcmVtb3ZlIHNlbGVjdCBzZXQgdmFsdWUgdmFyIHdoZW4gd2hlcmUgeWllbGQnLFxuICAgIGxpdGVyYWw6XG4gICAgICAnbnVsbCBmYWxzZSB0cnVlJ1xuICB9O1xuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgVkVSQkFUSU1fU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gIH07XG4gIHZhciBWRVJCQVRJTV9TVFJJTkdfTk9fTEYgPSBobGpzLmluaGVyaXQoVkVSQkFUSU1fU1RSSU5HLCB7aWxsZWdhbDogL1xcbi99KTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ3snLCBlbmQ6ICd9JyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIFNVQlNUX05PX0xGID0gaGxqcy5pbmhlcml0KFNVQlNULCB7aWxsZWdhbDogL1xcbi99KTtcbiAgdmFyIElOVEVSUE9MQVRFRF9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJFwiLywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAne3snfSwge2JlZ2luOiAnfX0nfSwgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF9OT19MRl1cbiAgfTtcbiAgdmFyIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1xcJEBcIi8sIGVuZDogJ1wiJyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ3t7J30sIHtiZWdpbjogJ319J30sIHtiZWdpbjogJ1wiXCInfSwgU1VCU1RdXG4gIH07XG4gIHZhciBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsIHtcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ3t7J30sIHtiZWdpbjogJ319J30sIHtiZWdpbjogJ1wiXCInfSwgU1VCU1RfTk9fTEZdXG4gIH0pO1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdO1xuICBTVUJTVF9OT19MRi5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsIHtpbGxlZ2FsOiAvXFxuL30pXG4gIF07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIElOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkcsXG4gICAgICBJTlRFUlBPTEFURURfU1RSSU5HLFxuICAgICAgVkVSQkFUSU1fU1RSSU5HLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgVFlQRV9JREVOVF9SRSA9IGhsanMuSURFTlRfUkUgKyAnKDwnICsgaGxqcy5JREVOVF9SRSArICcoXFxcXHMqLFxcXFxzKicgKyBobGpzLklERU5UX1JFICsgJykqPik/KFxcXFxbXFxcXF0pPyc7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NzaGFycCcsICdjIyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvOjovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvLy8nLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAnLy8vJywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJzwhLS18LS0+J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICc8Lz8nLCBlbmQ6ICc+J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHJlZ2lvbiBlbmRyZWdpb24gcHJhZ21hIGNoZWNrc3VtJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOixdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJ1thLXpBLVpdKFxcXFwuP1xcXFx3KSonfSksXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gW0F0dHJpYnV0ZXMoXCJcIildXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcWycsIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZW5kOiAnXFxcXF0nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyByZXR1cm4gdGhyb3cgYXdhaXQgZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgVFlQRV9JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xccypbezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlRJVExFX01PREVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAgbGV4ZW1lczogJ1thLXpBLVpdW2EtekEtWjAtOV8tXSonLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnYmFzZS11cmkgY2hpbGQtc3JjIGNvbm5lY3Qtc3JjIGRlZmF1bHQtc3JjIGZvbnQtc3JjIGZvcm0tYWN0aW9uJyArXG4gICAgICAgICcgZnJhbWUtYW5jZXN0b3JzIGZyYW1lLXNyYyBpbWctc3JjIG1lZGlhLXNyYyBvYmplY3Qtc3JjIHBsdWdpbi10eXBlcycgK1xuICAgICAgICAnIHJlcG9ydC11cmkgc2FuZGJveCBzY3JpcHQtc3JjIHN0eWxlLXNyYycsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogXCInXCIsIGVuZDogXCInXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICBiZWdpbjogJ15Db250ZW50JywgZW5kOiAnOicsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgfSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgRlVOQ1RJT05fTElLRSA9IHtcbiAgICBiZWdpbjogL1tcXHctXStcXCgvLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfVxuICB2YXIgQVRUUklCVVRFID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46IC9cXFMvLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgRlVOQ1RJT05fTElLRSxcbiAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cbiAgdmFyIEFUX0lERU5USUZJRVIgPSAnQFthLXotXSsnIC8vIEBmb250LWZhY2VcbiAgdmFyIEFUX01PRElGSUVSUyA9IFwiYW5kIG9yIG5vdCBvbmx5XCJcbiAgdmFyIE1FRElBX1RZUEVTID0gXCJhbGwgcHJpbnQgc2NyZWVuIHNwZWVjaFwiXG4gIHZhciBBVF9QUk9QRVJUWV9SRSA9IC9AXFwtP1xcd1tcXHddKihcXC1cXHcrKSovIC8vIEAtd2Via2l0LWtleWZyYW1lc1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICB2YXIgUlVMRSA9IHtcbiAgICBiZWdpbjogLyg/OltBLVpcXF9cXC5cXC1dK3wtLVthLXpBLVowLTlfLV0rKVxccyo6LywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJzsnLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgQVRUUklCVVRFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz1cXC98J1xcJF0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsIGJlZ2luOiAvI1tBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLCBiZWdpbjogL1xcLltBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgaWxsZWdhbDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogLzooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVwiJy5dKy9cbiAgICAgIH0sXG4gICAgICAvLyBtYXRjaGluZyB0aGVzZSBoZXJlIGFsbG93cyB1cyB0byB0cmVhdCB0aGVtIG1vcmUgbGlrZSByZWd1bGFyIENTU1xuICAgICAgLy8gcnVsZXMgc28gZXZlcnl0aGluZyBiZXR3ZWVuIHRoZSB7fSBnZXRzIHJlZ3VsYXIgcnVsZSBoaWdobGlnaHRpbmcsXG4gICAgICAvLyB3aGljaCBpcyB3aGF0IHdlIHdhbnQgZm9yIHBhZ2UgYW5kIGZvbnQtZmFjZVxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AocGFnZXxmb250LWZhY2UpJyxcbiAgICAgICAgbGV4ZW1lczogQVRfSURFTlRJRklFUixcbiAgICAgICAga2V5d29yZHM6ICdAcGFnZSBAZm9udC1mYWNlJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdAJywgZW5kOiAnW3s7XScsIC8vIGF0X3J1bGUgZWF0aW5nIGZpcnN0IFwie1wiIGlzIGEgZ29vZCB0aGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpdCBkb2VzbuKAmXQgbGV0IGl0IHRvIGJlIHBhcnNlZCBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBydWxlIHNldCBidXQgaW5zdGVhZCBkcm9wcyBwYXJzZXIgaW50b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgbW9kZSB3aGljaCBpcyBob3cgaXQgc2hvdWxkIGJlLlxuICAgICAgICBpbGxlZ2FsOiAvOi8sIC8vIGJyZWFrIG9uIExlc3MgdmFyaWFibGVzIEB2YXI6IC4uLlxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiBBVF9QUk9QRVJUWV9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHMvLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGtleXdvcmRzOiBBVF9NT0RJRklFUlMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IC9bYS16LV0rOi8sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOlwiYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJywgYmVnaW46IElERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFJVTEUsXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLyoqXG4gKiBLbm93biBpc3N1ZXM6XG4gKlxuICogLSBpbnZhbGlkIGhleCBzdHJpbmcgbGl0ZXJhbHMgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEgZG91YmxlIHF1b3RlZCBzdHJpbmdzXG4gKiAgIGJ1dCAneCcgYXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmcgd2lsbCBub3QgYmUgbWF0Y2hlZFxuICpcbiAqIC0gZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFscyBhcmUgbm90IGNoZWNrZWQgZm9yIG1hdGNoaW5nIGVuZCBkZWxpbWl0ZXJcbiAqICAgKG5vdCBwb3NzaWJsZSB0byBkbyB3aXRoIGpzIHJlZ2V4cClcbiAqXG4gKiAtIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIGNvbG9yZWQgYXMgYSBzdHJpbmcgKGkuZS4gbm8ga2V5d29yZCBjb2xvcmluZyBpbnNpZGUgYSB0b2tlbiBzdHJpbmcpXG4gKiAgIGFsc28sIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIG5vdCB2YWxpZGF0ZWQgdG8gY29udGFpbiBvbmx5IHZhbGlkIEQgdG9rZW5zXG4gKlxuICogLSBzcGVjaWFsIHRva2VuIHNlcXVlbmNlIHJ1bGUgaXMgbm90IHN0cmljdGx5IGZvbGxvd2luZyBEIGdyYW1tYXIgKGFueXRoaW5nIGZvbGxvd2luZyAjbGluZVxuICogICB1cCB0byB0aGUgZW5kIG9mIGxpbmUgaXMgbWF0Y2hlZCBhcyBzcGVjaWFsIHRva2VuIHNlcXVlbmNlKVxuICovXG5cbmZ1bmN0aW9uKGhsanMpIHtcbiAgLyoqXG4gICAqIExhbmd1YWdlIGtleXdvcmRzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFsaWFzIGFsaWduIGFzbSBhc3NlcnQgYXV0byBib2R5IGJyZWFrIGJ5dGUgY2FzZSBjYXN0IGNhdGNoIGNsYXNzICcgK1xuICAgICAgJ2NvbnN0IGNvbnRpbnVlIGRlYnVnIGRlZmF1bHQgZGVsZXRlIGRlcHJlY2F0ZWQgZG8gZWxzZSBlbnVtIGV4cG9ydCBleHRlcm4gZmluYWwgJyArXG4gICAgICAnZmluYWxseSBmb3IgZm9yZWFjaCBmb3JlYWNoX3JldmVyc2V8MTAgZ290byBpZiBpbW11dGFibGUgaW1wb3J0IGluIGlub3V0IGludCAnICtcbiAgICAgICdpbnRlcmZhY2UgaW52YXJpYW50IGlzIGxhenkgbWFjcm8gbWl4aW4gbW9kdWxlIG5ldyBub3Rocm93IG91dCBvdmVycmlkZSBwYWNrYWdlICcgK1xuICAgICAgJ3ByYWdtYSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcHVyZSByZWYgcmV0dXJuIHNjb3BlIHNoYXJlZCBzdGF0aWMgc3RydWN0ICcgK1xuICAgICAgJ3N1cGVyIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGVtcGxhdGUgdGhpcyB0aHJvdyB0cnkgdHlwZWRlZiB0eXBlaWQgdHlwZW9mIHVuaW9uICcgK1xuICAgICAgJ3VuaXR0ZXN0IHZlcnNpb24gdm9pZCB2b2xhdGlsZSB3aGlsZSB3aXRoIF9fRklMRV9fIF9fTElORV9fIF9fZ3NoYXJlZHwxMCAnICtcbiAgICAgICdfX3RocmVhZCBfX3RyYWl0cyBfX0RBVEVfXyBfX0VPRl9fIF9fVElNRV9fIF9fVElNRVNUQU1QX18gX19WRU5ET1JfXyBfX1ZFUlNJT05fXycsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYm9vbCBjZG91YmxlIGNlbnQgY2Zsb2F0IGNoYXIgY3JlYWwgZGNoYXIgZGVsZWdhdGUgZG91YmxlIGRzdHJpbmcgZmxvYXQgZnVuY3Rpb24gJyArXG4gICAgICAnaWRvdWJsZSBpZmxvYXQgaXJlYWwgbG9uZyByZWFsIHNob3J0IHN0cmluZyB1Ynl0ZSB1Y2VudCB1aW50IHVsb25nIHVzaG9ydCB3Y2hhciAnICtcbiAgICAgICd3c3RyaW5nJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIG51bGwgdHJ1ZSdcbiAgfTtcblxuICAvKipcbiAgICogTnVtYmVyIGxpdGVyYWwgcmVnZXhwc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGRlY2ltYWxfaW50ZWdlcl9yZSA9ICcoMHxbMS05XVtcXFxcZF9dKiknLFxuICAgIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSA9ICcoMHxbMS05XVtcXFxcZF9dKnxcXFxcZFtcXFxcZF9dKnxbXFxcXGRfXSs/XFxcXGQpJyxcbiAgICBiaW5hcnlfaW50ZWdlcl9yZSA9ICcwW2JCXVswMV9dKycsXG4gICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlID0gJyhbXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qfF9bXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qKScsXG4gICAgaGV4YWRlY2ltYWxfaW50ZWdlcl9yZSA9ICcwW3hYXScgKyBoZXhhZGVjaW1hbF9kaWdpdHNfcmUsXG5cbiAgICBkZWNpbWFsX2V4cG9uZW50X3JlID0gJyhbZUVdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuICAgIGRlY2ltYWxfZmxvYXRfcmUgPSAnKCcgKyBkZWNpbWFsX2ludGVnZXJfbm9zdXNfcmUgKyAnKFxcXFwuXFxcXGQqfCcgKyBkZWNpbWFsX2V4cG9uZW50X3JlICsgJyl8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFxkK1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArICd8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9yZSArIGRlY2ltYWxfZXhwb25lbnRfcmUgKyAnPycgK1xuICAgICAgICAgICAgICAnKScsXG4gICAgaGV4YWRlY2ltYWxfZmxvYXRfcmUgPSAnKDBbeFhdKCcgK1xuICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICsgJ1xcXFwuJyArIGhleGFkZWNpbWFsX2RpZ2l0c19yZSArICd8JytcbiAgICAgICAgICAgICAgICAgICdcXFxcLj8nICsgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICtcbiAgICAgICAgICAgICAgICAgJylbcFBdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuXG4gICAgaW50ZWdlcl9yZSA9ICcoJyArXG4gICAgICBkZWNpbWFsX2ludGVnZXJfcmUgKyAnfCcgK1xuICAgICAgYmluYXJ5X2ludGVnZXJfcmUgICsgJ3wnICtcbiAgICAgICBoZXhhZGVjaW1hbF9pbnRlZ2VyX3JlICAgK1xuICAgICcpJyxcblxuICAgIGZsb2F0X3JlID0gJygnICtcbiAgICAgIGhleGFkZWNpbWFsX2Zsb2F0X3JlICsgJ3wnICtcbiAgICAgIGRlY2ltYWxfZmxvYXRfcmUgICtcbiAgICAnKSc7XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0ZWQgaW4gRCBzdHJpbmcgYW5kIGNoYXJhY3RlciBsaXRlcmFsc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGVzY2FwZV9zZXF1ZW5jZV9yZSA9ICdcXFxcXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1tcXCdcIlxcXFw/XFxcXFxcXFxhYmZucnR2XXwnICsgIC8vIGNvbW1vbiBlc2NhcGVzXG4gICAgICAgICAgICAgICd1W1xcXFxkQS1GYS1mXXs0fXwnICsgICAgIC8vIGZvdXIgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICdbMC03XXsxLDN9fCcgKyAgICAgICAvLyBvbmUgdG8gdGhyZWUgb2N0YWwgZGlnaXQgYXNjaWkgY2hhciBjb2RlXG4gICAgICAgICAgICAgICd4W1xcXFxkQS1GYS1mXXsyfXwnICsgICAgLy8gdHdvIGhleCBkaWdpdCBhc2NpaSBjaGFyIGNvZGVcbiAgICAgICAgICAgICAgJ1VbXFxcXGRBLUZhLWZdezh9JyArICAgICAgLy8gZWlnaHQgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICcpfCcgK1xuICAgICAgICAgICAgICAnJlthLXpBLVpcXFxcZF17Mix9Oyc7ICAgICAgLy8gbmFtZWQgY2hhcmFjdGVyIGVudGl0eVxuXG4gIC8qKlxuICAgKiBEIGludGVnZXIgbnVtYmVyIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9JTlRFR0VSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGInICsgaW50ZWdlcl9yZSArICcoTHx1fFV8THV8TFV8dUx8VUwpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogW0RfRkxPQVRfTU9ERSBkZXNjcmlwdGlvbl1cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0ZMT0FUX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiKCcgK1xuICAgICAgICBmbG9hdF9yZSArICcoW2ZGXXxMfGl8W2ZGXWl8TGkpP3wnICtcbiAgICAgICAgaW50ZWdlcl9yZSArICcoaXxbZkZdaXxMaSknICtcbiAgICAgICcpJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogRCBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQ0hBUkFDVEVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJygnICsgZXNjYXBlX3NlcXVlbmNlX3JlICsgJ3wuKScsIGVuZDogJ1xcJycsXG4gICAgaWxsZWdhbDogJy4nXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfRVNDQVBFX1NFUVVFTkNFID0ge1xuICAgIGJlZ2luOiBlc2NhcGVfc2VxdWVuY2VfcmUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgZG91YmxlIHF1b3RlZCBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJyxcbiAgICBjb250YWluczogW0RfRVNDQVBFX1NFUVVFTkNFXSxcbiAgICBlbmQ6ICdcIltjd2RdPydcbiAgfTtcblxuICAvKipcbiAgICogRCB3eXNpd3lnIGFuZCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9XWVNJV1lHX0RFTElNSVRFRF9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnW3JxXVwiJyxcbiAgICBlbmQ6ICdcIltjd2RdPycsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYWx0ZXJuYXRlIHd5c2l3eWcgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgW2N3ZF0/J1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9IRVhfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ3hcIltcXFxcZGEtZkEtRlxcXFxzXFxcXG5cXFxccl0qXCJbY3dkXT8nLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICAvKipcbiAgICogRCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX1RPS0VOX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdxXCJcXFxceycsXG4gICAgZW5kOiAnXFxcXH1cIidcbiAgfTtcblxuICAvKipcbiAgICogSGFzaGJhbmcgc3VwcG9ydFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfSEFTSEJBTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnIyhsaW5lKScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQVRUUklCVVRFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAW2EtekEtWl9dW2EtekEtWl9cXFxcZF0qJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIG5lc3RpbmcgY29tbWVudFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfTkVTVElOR19DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwvXFxcXCsnLFxuICAgICdcXFxcK1xcXFwvJyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ10sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBEX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgIERfTkVTVElOR19DT01NRU5UX01PREUsXG4gICAgICAgIERfSEVYX1NUUklOR19NT0RFLFxuICAgICAgICBEX1NUUklOR19NT0RFLFxuICAgICAgICBEX1dZU0lXWUdfREVMSU1JVEVEX1NUUklOR19NT0RFLFxuICAgICAgICBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFLFxuICAgICAgICBEX1RPS0VOX1NUUklOR19NT0RFLFxuICAgICAgICBEX0ZMT0FUX01PREUsXG4gICAgICAgIERfSU5URUdFUl9NT0RFLFxuICAgICAgICBEX0NIQVJBQ1RFUl9NT0RFLFxuICAgICAgICBEX0hBU0hCQU5HX01PREUsXG4gICAgICAgIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFLFxuICAgICAgICBEX0FUVFJJQlVURV9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21kJywgJ21rZG93bicsICdta2QnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gaGlnaGxpZ2h0IGhlYWRlcnNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ14jezEsNn0nLCBlbmQ6ICckJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdeLis/XFxcXG5bPS1dezIsfSQnIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBodG1sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCcsIGVuZDogJz4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RzIChpbmRpY2F0b3JzIG9ubHkpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKihbKistXXwoXFxcXGQrXFxcXC4pKVxcXFxzKydcbiAgICAgIH0sXG4gICAgICAvLyBzdHJvbmcgc2VnbWVudHNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Ryb25nJyxcbiAgICAgICAgYmVnaW46ICdbKl9dezJ9Lis/WypfXXsyfSdcbiAgICAgIH0sXG4gICAgICAvLyBlbXBoYXNpcyBzZWdtZW50c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwqLis/XFxcXConIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ18uKz9fJ1xuICAgICAgICAgICwgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYmxvY2txdW90ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ14+XFxcXHMrJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXmBgYFxcXFx3KlxcXFxzKiQnLCBlbmQ6ICdeYGBgWyBdKiQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ2AuKz9gJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdeKCB7NH18XFxcXHQpJywgZW5kOiAnJCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBob3Jpem9udGFsIHJ1bGVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlstXFxcXCpdezMsfScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgLy8gdXNpbmcgbGlua3MgLSB0aXRsZSBhbmQgbGlua1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxbLis/XFxcXF1bXFxcXChcXFxcW10uKj9bXFxcXClcXFxcXV0nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXlxcW1teXFxuXStcXF06LyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogLzpcXHMqLywgZW5kOiAvJC8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbe1xuICAgICAgYmVnaW46ICdcXFxcJFtBLVphLXowLTlfXSsnXG4gICAgfV0sXG4gIH07XG5cbiAgdmFyIEJSQUNFRF9TVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICBiZWdpbjogJ1xcXFwkeycsXG4gICAgICBlbmQ6ICd9J1xuICAgIH0sIF0sXG4gICAga2V5d29yZHM6ICd0cnVlIGZhbHNlIG51bGwgdGhpcyBpcyBuZXcgc3VwZXInLFxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgICAgYmVnaW46ICdyXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCJcIlwiJyxcbiAgICAgICAgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgZW5kOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNULCBCUkFDRURfU1VCU1RdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsXG4gICAgICAgIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVCwgQlJBQ0VEX1NVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIEJSQUNFRF9TVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVCwgQlJBQ0VEX1NVQlNUXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgQlJBQ0VEX1NVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQ19OVU1CRVJfTU9ERSwgU1RSSU5HXG4gIF07XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdhYnN0cmFjdCBhcyBhc3NlcnQgYXN5bmMgYXdhaXQgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBjb3ZhcmlhbnQgZGVmYXVsdCBkZWZlcnJlZCBkbyAnICtcbiAgICAgICdkeW5hbWljIGVsc2UgZW51bSBleHBvcnQgZXh0ZW5kcyBleHRlbnNpb24gZXh0ZXJuYWwgZmFjdG9yeSBmYWxzZSBmaW5hbCBmaW5hbGx5IGZvciBGdW5jdGlvbiBnZXQgaGlkZSBpZiAnICtcbiAgICAgICdpbXBsZW1lbnRzIGltcG9ydCBpbiBpbmZlcmZhY2UgaXMgbGlicmFyeSBtaXhpbiBuZXcgbnVsbCBvbiBvcGVyYXRvciBwYXJ0IHJldGhyb3cgcmV0dXJuIHNldCBzaG93IHN0YXRpYyAnICtcbiAgICAgICdzdXBlciBzd2l0Y2ggc3luYyB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVkZWYgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAvLyBkYXJ0OmNvcmVcbiAgICAgICdDb21wYXJhYmxlIERhdGVUaW1lIER1cmF0aW9uIEZ1bmN0aW9uIEl0ZXJhYmxlIEl0ZXJhdG9yIExpc3QgTWFwIE1hdGNoIE51bGwgT2JqZWN0IFBhdHRlcm4gUmVnRXhwIFNldCAnICtcbiAgICAgICdTdG9wd2F0Y2ggU3RyaW5nIFN0cmluZ0J1ZmZlciBTdHJpbmdTaW5rIFN5bWJvbCBUeXBlIFVyaSBib29sIGRvdWJsZSBkeW5hbWljIGludCBudW0gcHJpbnQgJyArXG4gICAgICAvLyBkYXJ0Omh0bWxcbiAgICAgICdFbGVtZW50IEVsZW1lbnRMaXN0IGRvY3VtZW50IHF1ZXJ5U2VsZWN0b3IgcXVlcnlTZWxlY3RvckFsbCB3aW5kb3cnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsIHtcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ21hcmtkb3duJ1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnLy8vK1xcXFxzKicsXG4gICAgICAgICckJywge1xuICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdtYXJrZG93bicsXG4gICAgICAgICAgICBiZWdpbjogJy4nLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZDogJ3snLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2V4cG9ydHMgcmVnaXN0ZXIgZmlsZSBzaGwgYXJyYXkgcmVjb3JkIHByb3BlcnR5IGZvciBtb2Qgd2hpbGUgc2V0IGFsbHkgbGFiZWwgdXNlcyByYWlzZSBub3QgJyArXG4gICAgJ3N0b3JlZCBjbGFzcyBzYWZlY2FsbCB2YXIgaW50ZXJmYWNlIG9yIHByaXZhdGUgc3RhdGljIGV4aXQgaW5kZXggaW5oZXJpdGVkIHRvIGVsc2Ugc3RkY2FsbCAnICtcbiAgICAnb3ZlcnJpZGUgc2hyIGFzbSBmYXIgcmVzb3VyY2VzdHJpbmcgZmluYWxpemF0aW9uIHBhY2tlZCB2aXJ0dWFsIG91dCBhbmQgcHJvdGVjdGVkIGxpYnJhcnkgZG8gJyArXG4gICAgJ3hvcndyaXRlIGdvdG8gbmVhciBmdW5jdGlvbiBlbmQgZGl2IG92ZXJsb2FkIG9iamVjdCB1bml0IGJlZ2luIHN0cmluZyBvbiBpbmxpbmUgcmVwZWF0IHVudGlsICcgK1xuICAgICdkZXN0cnVjdG9yIHdyaXRlIG1lc3NhZ2UgcHJvZ3JhbSB3aXRoIHJlYWQgaW5pdGlhbGl6YXRpb24gZXhjZXB0IGRlZmF1bHQgbmlsIGlmIGNhc2UgY2RlY2wgaW4gJyArXG4gICAgJ2Rvd250byB0aHJlYWR2YXIgb2YgdHJ5IHBhc2NhbCBjb25zdCBleHRlcm5hbCBjb25zdHJ1Y3RvciB0eXBlIHB1YmxpYyB0aGVuIGltcGxlbWVudGF0aW9uICcgK1xuICAgICdmaW5hbGx5IHB1Ymxpc2hlZCBwcm9jZWR1cmUgYWJzb2x1dGUgcmVpbnRyb2R1Y2Ugb3BlcmF0b3IgYXMgaXMgYWJzdHJhY3QgYWxpYXMgYXNzZW1ibGVyICcgK1xuICAgICdiaXRwYWNrZWQgYnJlYWsgY29udGludWUgY3BwZGVjbCBjdmFyIGVudW1lcmF0b3IgZXhwZXJpbWVudGFsIHBsYXRmb3JtIGRlcHJlY2F0ZWQgJyArXG4gICAgJ3VuaW1wbGVtZW50ZWQgZHluYW1pYyBleHBvcnQgZmFyMTYgZm9yd2FyZCBnZW5lcmljIGhlbHBlciBpbXBsZW1lbnRzIGludGVycnVwdCBpb2NoZWNrcyAnICtcbiAgICAnbG9jYWwgbmFtZSBub2RlZmF1bHQgbm9yZXR1cm4gbm9zdGFja2ZyYW1lIG9sZGZwY2NhbGwgb3RoZXJ3aXNlIHNhdmVyZWdpc3RlcnMgc29mdGZsb2F0ICcgK1xuICAgICdzcGVjaWFsaXplIHN0cmljdCB1bmFsaWduZWQgdmFyYXJncyAnO1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKC9cXHsvLCAvXFx9Lywge3JlbGV2YW5jZTogMH0pLFxuICAgIGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8sIHtyZWxldmFuY2U6IDEwfSlcbiAgXTtcbiAgdmFyIERJUkVDVElWRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L30sXG4gICAgICB7YmVnaW46IC9cXChcXCpcXCQvLCBlbmQ6IC9cXCpcXCkvfVxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvJycvfV1cbiAgfTtcbiAgdmFyIENIQVJfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIHZhciBDTEFTUyA9IHtcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccyo9XFxcXHMqY2xhc3NcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREVcbiAgICBdXG4gIH07XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yIGRlc3RydWN0b3IgcHJvY2VkdXJlJywgZW5kOiAvWzo7XS8sXG4gICAga2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvcnwxMCBkZXN0cnVjdG9yfDEwIHByb2NlZHVyZXwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklORywgRElSRUNUSVZFXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgICAgIH0sXG4gICAgICBESVJFQ1RJVkVcbiAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZHByJywgJ2RmbScsICdwYXMnLCAncGFzY2FsJywgJ2ZyZWVwYXNjYWwnLCAnbGF6YXJ1cycsICdscHInLCAnbGZtJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1wifFxcJFtHLVpnLXpdfFxcL1xcKnw8XFwvfFxcfC8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORywgQ0hBUl9TVFJJTkcsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQ0xBU1MsXG4gICAgICBGVU5DVElPTixcbiAgICAgIERJUkVDVElWRVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGF0Y2gnXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9eQEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtAQCQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQvfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9JbmRleDogLywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogLz17Myx9LywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogL15cXC17M30vLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcKnszfSAvLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcK3szfS8sIGVuZDogLyQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwqezE1fSQvIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYWRkaXRpb24nLFxuICAgICAgICBiZWdpbjogJ15cXFxcKycsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkZWxldGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFwtJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2FkZGl0aW9uJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCEnLCBlbmQ6ICckJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16XSs6Py8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG5hbWU6XG4gICAgICAgICd0cnVuY2F0ZXdvcmRzIHJlbW92ZXRhZ3MgbGluZWJyZWFrc2JyIHllc25vIGdldF9kaWdpdCB0aW1lc2luY2UgcmFuZG9tIHN0cmlwdGFncyAnICtcbiAgICAgICAgJ2ZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzICcgK1xuICAgICAgICAndGl0bGUgZmxvYXRmb3JtYXQgY2FwZmlyc3QgcHByaW50IGRpdmlzaWJsZWJ5IGFkZCBtYWtlX2xpc3QgdW5vcmRlcmVkX2xpc3QgdXJsZW5jb2RlICcgK1xuICAgICAgICAndGltZXVudGlsIHVybGl6ZXRydW5jIHdvcmRjb3VudCBzdHJpbmdmb3JtYXQgbGluZW51bWJlcnMgc2xpY2UgZGF0ZSBkaWN0c29ydCAnICtcbiAgICAgICAgJ2RpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0ICcgK1xuICAgICAgICAndHJ1bmNhdGV3b3Jkc19odG1sIHVwcGVyIGxlbmd0aCBwaG9uZTJudW1lcmljIHdvcmR3cmFwIHRpbWUgYWRkc2xhc2hlcyBzbHVnaWZ5IGZpcnN0ICcgK1xuICAgICAgICAnZXNjYXBlanMgZm9yY2VfZXNjYXBlIGlyaWVuY29kZSBsYXN0IHNhZmUgc2FmZXNlcSB0cnVuY2F0ZWNoYXJzIGxvY2FsaXplIHVubG9jYWxpemUgJyArXG4gICAgICAgICdsb2NhbHRpbWUgdXRjIHRpbWV6b25lJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2ppbmphJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7JVxccypjb21tZW50XFxzKiV9LywgL1xceyVcXHMqZW5kY29tbWVudFxccyolfS8pLFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICdjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yICcgK1xuICAgICAgICAgICAgICAgICdlbmRmb3IgaWZub3RlcXVhbCBlbmRpZm5vdGVxdWFsIHdpZHRocmF0aW8gZXh0ZW5kcyBpbmNsdWRlIHNwYWNlbGVzcyAnICtcbiAgICAgICAgICAgICAgICAnZW5kc3BhY2VsZXNzIHJlZ3JvdXAgaWZlcXVhbCBlbmRpZmVxdWFsIHNzaSBub3cgd2l0aCBjeWNsZSB1cmwgZmlsdGVyICcgK1xuICAgICAgICAgICAgICAgICdlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmICcgK1xuICAgICAgICAgICAgICAgICdlbmR3aXRoIHN0YXRpYyB0cmFucyBibG9ja3RyYW5zIGVuZGJsb2NrdHJhbnMgZ2V0X3N0YXRpY19wcmVmaXggZ2V0X21lZGlhX3ByZWZpeCAnICtcbiAgICAgICAgICAgICAgICAncGx1cmFsIGdldF9jdXJyZW50X2xhbmd1YWdlIGxhbmd1YWdlIGdldF9hdmFpbGFibGVfbGFuZ3VhZ2VzICcgK1xuICAgICAgICAgICAgICAgICdnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgJyArXG4gICAgICAgICAgICAgICAgJ2VuZGxvY2FsaXplIGxvY2FsdGltZSBlbmRsb2NhbHRpbWUgdGltZXpvbmUgZW5kdGltZXpvbmUgZ2V0X2N1cnJlbnRfdGltZXpvbmUgJyArXG4gICAgICAgICAgICAgICAgJ3ZlcmJhdGltJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5d29yZHM6ICdpbiBieSBhcycsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbRklMVEVSXSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvfX0vLFxuICAgICAgICBjb250YWluczogW0ZJTFRFUl1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYmluZCcsICd6b25lJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdJTiBBIEFBQUEgQUZTREIgQVBMIENBQSBDRE5TS0VZIENEUyBDRVJUIENOQU1FIERIQ0lEIERMViBETkFNRSBETlNLRVkgRFMgSElQIElQU0VDS0VZIEtFWSBLWCAnICtcbiAgICAgICAgJ0xPQyBNWCBOQVBUUiBOUyBOU0VDIE5TRUMzIE5TRUMzUEFSQU0gUFRSIFJSU0lHIFJQIFNJRyBTT0EgU1JWIFNTSEZQIFRBIFRLRVkgVExTQSBUU0lHIFRYVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxcJChUVEx8R0VORVJBVEV8SU5DTFVERXxPUklHSU4pXFxiL1xuICAgICAgfSxcbiAgICAgIC8vIElQdjZcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKSlcXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyBJUHY0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxcXGInXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuTlVNQkVSX01PREUsIHtiZWdpbjogL1xcYlxcZCtbZGh3bV0/L30pXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RvY2tlciddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6ICdmcm9tIG1haW50YWluZXIgZXhwb3NlIGVudiBhcmcgdXNlciBvbmJ1aWxkIHN0b3BzaWduYWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdydW4gY21kIGVudHJ5cG9pbnQgdm9sdW1lIGFkZCBjb3B5IHdvcmtkaXIgbGFiZWwgaGVhbHRoY2hlY2sgc2hlbGwnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9bXlxcXFxdJC8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdiYXNoJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnPC8nXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgIC9eXFxzKkA/cmVtXFxiLywgLyQvLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMTBcbiAgICB9XG4gICk7XG4gIHZhciBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKltBLVphLXouXz9dW0EtWmEtejAtOV8kI0B+Lj9dKig6fFxcXFxzK2xhYmVsKScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydiYXQnLCAnY21kJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIGVsc2UgZ290byBmb3IgaW4gZG8gY2FsbCBleGl0IG5vdCBleGlzdCBlcnJvcmxldmVsIGRlZmluZWQgJyArXG4gICAgICAgICdlcXUgbmVxIGxzcyBsZXEgZ3RyIGdlcScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3BybiBudWwgbHB0MyBscHQyIGxwdDEgY29uIGNvbTQgY29tMyBjb20yIGNvbTEgYXV4ICcgK1xuICAgICAgICAnc2hpZnQgY2QgZGlyIGVjaG8gc2V0bG9jYWwgZW5kbG9jYWwgc2V0IHBhdXNlIGNvcHkgJyArXG4gICAgICAgICdhcHBlbmQgYXNzb2MgYXQgYXR0cmliIGJyZWFrIGNhY2xzIGNkIGNoY3AgY2hkaXIgY2hrZHNrIGNoa250ZnMgY2xzIGNtZCBjb2xvciAnICtcbiAgICAgICAgJ2NvbXAgY29tcGFjdCBjb252ZXJ0IGRhdGUgZGlyIGRpc2tjb21wIGRpc2tjb3B5IGRvc2tleSBlcmFzZSBmcyAnICtcbiAgICAgICAgJ2ZpbmQgZmluZHN0ciBmb3JtYXQgZnR5cGUgZ3JhZnRhYmwgaGVscCBrZXliIGxhYmVsIG1kIG1rZGlyIG1vZGUgbW9yZSBtb3ZlIHBhdGggJyArXG4gICAgICAgICdwYXVzZSBwcmludCBwb3BkIHB1c2hkIHByb210IHJkIHJlY292ZXIgcmVtIHJlbmFtZSByZXBsYWNlIHJlc3RvcmUgcm1kaXIgc2hpZnQnICtcbiAgICAgICAgJ3NvcnQgc3RhcnQgc3Vic3QgdGltZSB0aXRsZSB0cmVlIHR5cGUgdmVyIHZlcmlmeSB2b2wgJyArXG4gICAgICAgIC8vIHdpbnV0aWxzXG4gICAgICAgICdwaW5nIG5ldCBpcGNvbmZpZyB0YXNra2lsbCB4Y29weSByZW4gZGVsJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLCBiZWdpbjogLyUlW14gXXwlW14gXSs/JXwhW14gXSs/IS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IExBQkVMLmJlZ2luLCBlbmQ6ICdnb3RvOmVvZicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnKFtfYS16QS1aXVxcXFx3KlxcXFwuKSooW19hLXpBLVpdXFxcXHcqOik/W19hLXpBLVpdXFxcXHcqJ30pLFxuICAgICAgICAgIENPTU1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdcXFxcYlxcXFxkKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIENPTU1FTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUVVPVEVEX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiL1xuICB9O1xuICB2YXIgQVBPU19QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gIH07XG4gIHZhciBVTlFVT1RFRF9QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnW1xcXFx3LT9dKzpcXFxcdysnLCBlbmQ6ICdcXFxcVycsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBWQUxVRUxFU1NfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFx3Ky0/XFxcXHcrJywgZW5kOiAnXFxcXFcnLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6ICdkc2NvbmZpZycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXmRzY29uZmlnJywgZW5kOiAnXFxcXHMnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnKGxpc3R8Y3JlYXRlfGdldHxzZXR8ZGVsZXRlKS0oXFxcXHcrKScsIGVuZDogJ1xcXFxzJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJyFAIyQlXiYqKCknLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnLS0oXFxcXHcrKScsIGVuZDogJ1xcXFxzJywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIEFQT1NfUFJPUEVSVFksXG4gICAgICBVTlFVT1RFRF9QUk9QRVJUWSxcbiAgICAgIFZBTFVFTEVTU19QUk9QRVJUWSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgeyBiZWdpbjogJygodTg/fFUpfEwpP1wiJyB9KSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcodTg/fFUpP1JcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJ1xcXFxcXFxcPy4nLCBlbmQ6ICdcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnLidcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKFxcXFxkKyhcXFxcLlxcXFxkKik/fFxcXFwuXFxcXGQrKSh1fFV8bHxMfHVsfFVMfGZ8RiknIH0sXG4gICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgaWZkZWYgaWZuZGVmJ30sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5jbHVkZScsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChTVFJJTkdTLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgdmFyIERUU19SRUZFUkVOQ0UgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnXFxcXCZbYS16XFxcXGRfXSpcXFxcYidcbiAgfTtcblxuICB2YXIgRFRTX0tFWVdPUkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YS1rZXl3b3JkJyxcbiAgICBiZWdpbjogJy9bYS16XVthLXpcXFxcZC1dKi8nXG4gIH07XG5cbiAgdmFyIERUU19MQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnXlxcXFxzKlthLXpBLVpfXVthLXpBLVpcXFxcZF9dKjonXG4gIH07XG5cbiAgdmFyIERUU19DRUxMX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICc8JyxcbiAgICBlbmQ6ICc+JyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSUyxcbiAgICAgIERUU19SRUZFUkVOQ0VcbiAgICBdXG4gIH07XG5cbiAgdmFyIERUU19OT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogL1thLXpBLVpfXVthLXpBLVpcXGRfQF0qXFxzey8sXG4gICAgZW5kOiAvW3s7PV0vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTtcblxuICB2YXIgRFRTX1JPT1RfTk9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46ICcvXFxcXHMqeycsXG4gICAgZW5kOiAnfTsnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIERUU19SRUZFUkVOQ0UsXG4gICAgICBEVFNfS0VZV09SRCxcbiAgICAgIERUU19MQUJFTCxcbiAgICAgIERUU19OT0RFLFxuICAgICAgRFRTX0NFTExfUFJPUEVSVFksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1NcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogXCJcIixcbiAgICBjb250YWluczogW1xuICAgICAgRFRTX1JPT1RfTk9ERSxcbiAgICAgIERUU19SRUZFUkVOQ0UsXG4gICAgICBEVFNfS0VZV09SRCxcbiAgICAgIERUU19MQUJFTCxcbiAgICAgIERUU19OT0RFLFxuICAgICAgRFRTX0NFTExfUFJPUEVSVFksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJzo6JyxcbiAgICAgICAga2V5d29yZHM6IFwiXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgRVhQUkVTU0lPTl9LRVlXT1JEUyA9ICdpZiBlcSBuZSBsdCBsdGUgZ3QgZ3RlIHNlbGVjdCBkZWZhdWx0IG1hdGggc2VwJztcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RzdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7WyNcXC9dLywgZW5kOiAvXFx9LywgaWxsZWdhbDogLzsvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IC9bYS16QS1aXFwuLV0rLyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcey8sIGVuZDogL1xcfS8sIGlsbGVnYWw6IC87LyxcbiAgICAgICAga2V5d29yZHM6IEVYUFJFU1NJT05fS0VZV09SRFNcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBjb21tZW50TW9kZSA9IGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8pO1xuXG4gICAgdmFyIG5vblRlcm1pbmFsTW9kZSA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBcImF0dHJpYnV0ZVwiLFxuICAgICAgICBiZWdpbjogL15bIF0qW2EtekEtWl1bYS16QS1aLV9dKihbXFxzLV9dK1thLXpBLVpdW2EtekEtWl0qKSovXG4gICAgfTtcblxuICAgIHZhciBzcGVjaWFsU2VxdWVuY2VNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgICBiZWdpbjogL1xcPy4qXFw/L1xuICAgIH07XG5cbiAgICB2YXIgcnVsZUJvZHlNb2RlID0ge1xuICAgICAgICBiZWdpbjogLz0vLCBlbmQ6IC9bLjtdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgICAgc3BlY2lhbFNlcXVlbmNlTW9kZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gdGVybWluYWxzXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAge2JlZ2luOiAnYCcsIGVuZDogJ2AnfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgICAgbm9uVGVybWluYWxNb2RlLFxuICAgICAgICAgICAgcnVsZUJvZHlNb2RlXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEVMSVhJUl9JREVOVF9SRSA9ICdbYS16QS1aX11bYS16QS1aMC05Xy5dKihcXFxcIXxcXFxcPyk/JztcbiAgdmFyIEVMSVhJUl9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dXFxcXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09Pyc7XG4gIHZhciBFTElYSVJfS0VZV09SRFMgPVxuICAgICdhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuICcgK1xuICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBuaWwgYnJlYWsgbm90IGNhc2UgY29uZCBhbGlhcyB3aGlsZSBlbnN1cmUgb3IgJyArXG4gICAgJ2luY2x1ZGUgdXNlIGFsaWFzIGZuIHF1b3RlIHJlcXVpcmUgaW1wb3J0IHdpdGh8MCc7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjXFxcXHsnLCBlbmQ6ICd9JyxcbiAgICBsZXhlbWVzOiBFTElYSVJfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEVMSVhJUl9LRVlXT1JEU1xuICB9O1xuXG4gIHZhciBTSUdJTF9ERUxJTUlURVJTID0gJ1svfChbezxcIlxcJ10nXG4gIHZhciBMT1dFUkNBU0VfU0lHSUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ35bYS16XScgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZW5kc1BhcmVudDp0cnVlLFxuICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7IGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC8nLywgZW5kOiAvJy8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC9cXC8vLCBlbmQ6IC9cXC8vIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAvXFx8LywgZW5kOiAvXFx8LyB9LFxuICAgICAgICAgICAgeyBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8gfSxcbiAgICAgICAgICAgIHsgYmVnaW46IC9cXFsvLCBlbmQ6IC9cXF0vIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAvXFx7LywgZW5kOiAvXFx9LyB9LFxuICAgICAgICAgICAgeyBiZWdpbjogLzwvLCBlbmQ6IC8+LyB9XG4gICAgICAgICAgXVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHZhciBVUENBU0VfU0lHSUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ35bQS1aXScgKyAnKD89JyArIFNJR0lMX0RFTElNSVRFUlMgKyAnKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9cIi8sIGVuZDogL1wiLyB9LFxuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL1xcLy8sIGVuZDogL1xcLy8gfSxcbiAgICAgIHsgYmVnaW46IC9cXHwvLCBlbmQ6IC9cXHwvIH0sXG4gICAgICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyB9LFxuICAgICAgeyBiZWdpbjogL1xcWy8sIGVuZDogL1xcXS8gfSxcbiAgICAgIHsgYmVnaW46IC9cXHsvLCBlbmQ6IC9cXH0vIH0sXG4gICAgICB7IGJlZ2luOiAvXFw8LywgZW5kOiAvXFw+LyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXCJcIlwiLywgZW5kOiAvXCJcIlwiLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJycnLywgZW5kOiAvJycnLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflNcIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvflNcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL35TJy8sIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogW11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAnZGVmIGRlZnAgZGVmbWFjcm8nLCBlbmQ6IC9cXEJcXGIvLCAvLyB0aGUgbW9kZSBpcyBlbmRlZCBieSB0aGUgdGl0bGVcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICBiZWdpbjogRUxJWElSX0lERU5UX1JFLFxuICAgICAgICBlbmRzUGFyZW50OiB0cnVlXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbiAgdmFyIENMQVNTID0gaGxqcy5pbmhlcml0KEZVTkNUSU9OLCB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWZpbXBsIGRlZm1vZHVsZSBkZWZwcm90b2NvbCBkZWZyZWNvcmQnLCBlbmQ6IC9cXGJkb1xcYnwkfDsvXG4gIH0pO1xuICB2YXIgRUxJWElSX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIFVQQ0FTRV9TSUdJTCxcbiAgICBMT1dFUkNBU0VfU0lHSUwsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBDTEFTUyxcbiAgICBGVU5DVElPTixcbiAgICB7XG4gICAgICBiZWdpbjogJzo6J1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiAnOig/IVtcXFxcczpdKScsXG4gICAgICBjb250YWluczogW1NUUklORywge2JlZ2luOiBFTElYSVJfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogRUxJWElSX0lERU5UX1JFICsgJzooPyE6KScsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBvWzAtN19dKyl8KFxcXFxiMGJbMDFfXSspfChcXFxcYjB4WzAtOWEtZkEtRl9dKyl8KC0/XFxcXGJbMS05XVswLTlfXSooLlswLTlfXSsoW2VFXVstK10/WzAtOV0rKT8pPyknLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICBiZWdpbjogJyhcXFxcJFxcXFxXKXwoKFxcXFwkfFxcXFxAXFxcXEA/KShcXFxcdyspKSdcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLT4nXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJylcXFxccyonLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAnLycsIGVuZDogJy9bYS16XSonXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJyVyXFxcXFsnLCBlbmQ6ICdcXFxcXVthLXpdKidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRUxJWElSX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBsZXhlbWVzOiBFTElYSVJfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEVMSVhJUl9LRVlXT1JEUyxcbiAgICBjb250YWluczogRUxJWElSX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ3stJyxcbiAgICAgICAgJy19JyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9O1xuXG4gIHZhciBDT05TVFJVQ1RPUiA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXCddKicsIC8vIFRPRE86IG90aGVyIGNvbnN0cnVjdG9ycyAoYnVpbHQtaW4sIGluZml4KS5cbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgIGlsbGVnYWw6ICdcIicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtjbGFzc05hbWU6ICd0eXBlJywgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XSooXFxcXCgoXFxcXC5cXFxcLnwsfFxcXFx3KylcXFxcKSk/J30sXG4gICAgICBDT01NRU5UXG4gICAgXVxuICB9O1xuXG4gIHZhciBSRUNPUkQgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgY29udGFpbnM6IExJU1QuY29udGFpbnNcbiAgfTtcblxuICB2YXIgQ0hBUkFDVEVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCdcXFxcXFxcXD8uJywgZW5kOiAnXFwnJyxcbiAgICBpbGxlZ2FsOiAnLidcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOlxuICAgICAgJ2xldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBtb2R1bGUgaW1wb3J0IGV4cG9zaW5nICcgK1xuICAgICAgJ3R5cGUgYWxpYXMgYXMgaW5maXggaW5maXhsIGluZml4ciBwb3J0IGVmZmVjdCBjb21tYW5kIHN1YnNjcmlwdGlvbicsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gVG9wLWxldmVsIGNvbnN0cnVjdGlvbnMuXG5cbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3BvcnQgZWZmZWN0IG1vZHVsZScsIGVuZDogJ2V4cG9zaW5nJyxcbiAgICAgICAga2V5d29yZHM6ICdwb3J0IGVmZmVjdCBtb2R1bGUgd2hlcmUgY29tbWFuZCBzdWJzY3JpcHRpb24gZXhwb3NpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdpbXBvcnQnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdpbXBvcnQgYXMgZXhwb3NpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd0eXBlJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAndHlwZSBhbGlhcycsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09OU1RSVUNUT1IsIExJU1QsIFJFQ09SRCwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmZpeCBpbmZpeGwgaW5maXhyJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFLCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdwb3J0JywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAncG9ydCcsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09NTUVOVF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIExpdGVyYWxzIGFuZCBuYW1lcy5cblxuICAgICAgQ0hBUkFDVEVSLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXltfYS16XVtcXFxcd1xcJ10qJ30pLFxuICAgICAgQ09NTUVOVCxcblxuICAgICAge2JlZ2luOiAnLT58PC0nfSAvLyBObyBtYXJrdXAsIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvOy9cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBSVUJZX01FVEhPRF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT98Wy0rfl1cXFxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn5gfF18XFxcXFtcXFxcXT0/JztcbiAgdmFyIFJVQllfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhbmQgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyBpZiBCRUdJTiByZXRyeSBlbmQgZm9yIHNlbGYgd2hlbiAnICtcbiAgICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBFTkQgcmVzY3VlIGVsc2UgYnJlYWsgdW5kZWYgbm90IHN1cGVyIGNsYXNzIGNhc2UgJyArXG4gICAgICAncmVxdWlyZSB5aWVsZCBhbGlhcyB3aGlsZSBlbnN1cmUgZWxzaWYgb3IgaW5jbHVkZSBhdHRyX3JlYWRlciBhdHRyX3dyaXRlciBhdHRyX2FjY2Vzc29yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbmlsJ1xuICB9O1xuICB2YXIgWUFSRE9DVEFHID0ge1xuICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgYmVnaW46ICdAW0EtWmEtel0rJ1xuICB9O1xuICB2YXIgSVJCX09CSkVDVCA9IHtcbiAgICBiZWdpbjogJyM8JywgZW5kOiAnPidcbiAgfTtcbiAgdmFyIENPTU1FTlRfTU9ERVMgPSBbXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJyMnLFxuICAgICAgJyQnLFxuICAgICAge1xuICAgICAgICBjb250YWluczogW1lBUkRPQ1RBR11cbiAgICAgIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICdeXFxcXD1iZWdpbicsXG4gICAgICAnXlxcXFw9ZW5kJyxcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IFtZQVJET0NUQUddLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgKSxcbiAgICBobGpzLkNPTU1FTlQoJ15fX0VORF9fJywgJ1xcXFxuJCcpXG4gIF07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjXFxcXHsnLCBlbmQ6ICd9JyxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgIHtiZWdpbjogL2AvLCBlbmQ6IC9gL30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT9cXFxcKCcsIGVuZDogJ1xcXFwpJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT9cXFxcWycsIGVuZDogJ1xcXFxdJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT97JywgZW5kOiAnfSd9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/PCcsIGVuZDogJz4nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdPy8nLCBlbmQ6ICcvJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT8lJywgZW5kOiAnJSd9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/LScsIGVuZDogJy0nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdP1xcXFx8JywgZW5kOiAnXFxcXHwnfSxcbiAgICAgIHtcbiAgICAgICAgLy8gXFxCIGluIHRoZSBiZWdpbm5pbmcgc3VwcHJlc3NlcyByZWNvZ25pdGlvbiBvZiA/LXNlcXVlbmNlcyB3aGVyZSA/XG4gICAgICAgIC8vIGlzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHByZWNlZGluZyBpZGVudGlmaWVyLCBhcyBpbjogYGZ1bmM/NGBcbiAgICAgICAgYmVnaW46IC9cXEJcXD8oXFxcXFxcZHsxLDN9fFxcXFx4W0EtRmEtZjAtOV17MSwyfXxcXFxcdVtBLUZhLWYwLTldezR9fFxcXFw/XFxTKVxcYi9cbiAgICAgIH0sXG4gICAgICB7IC8vIGhlcmVkb2NzXG4gICAgICAgIGJlZ2luOiAvPDxbLX5dPyc/KFxcdyspKD86LnxcXG4pKj9cXG5cXHMqXFwxXFxiLyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBiZWdpbjogLzw8Wy1+XT8nPy8gfSxcbiAgICAgICAgICB7IGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBlbmRTYW1lQXNCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICB9O1xuXG4gIHZhciBSVUJZX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgU1RSSU5HLFxuICAgIElSQl9PQkpFQ1QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIG1vZHVsZScsIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdbQS1aYS16X11cXFxcdyooOjpcXFxcdyspKihcXFxcP3xcXFxcISk/J30pLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICc8XFxcXHMqJyxcbiAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLklERU5UX1JFICsgJzo6KT8nICsgaGxqcy5JREVOVF9SRVxuICAgICAgICAgIH1dXG4gICAgICAgIH1cbiAgICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmJywgZW5kOiAnJHw7JyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogUlVCWV9NRVRIT0RfUkV9KSxcbiAgICAgICAgUEFSQU1TXG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3dhbGxvdyBuYW1lc3BhY2UgcXVhbGlmaWVycyBiZWZvcmUgc3ltYm9sc1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcoXFxcXCF8XFxcXD8pPzonLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6KD8hXFxcXHMpJyxcbiAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCB7YmVnaW46IFJVQllfTUVUSE9EX1JFfV0sXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICcoXFxcXCRcXFxcVyl8KChcXFxcJHxcXFxcQFxcXFxAPykoXFxcXHcrKSknIC8vIHZhcmlhYmxlc1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgIGJlZ2luOiAvXFx8LywgZW5kOiAvXFx8LyxcbiAgICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gICAgfSxcbiAgICB7IC8vIHJlZ2V4cCBjb250YWluZXJcbiAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3x1bmxlc3MpXFxcXHMqJyxcbiAgICAgIGtleXdvcmRzOiAndW5sZXNzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIElSQl9PQkpFQ1QsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJy8nLCBlbmQ6ICcvW2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclcnsnLCBlbmQ6ICd9W2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclclxcXFwoJywgZW5kOiAnXFxcXClbYS16XSonfSxcbiAgICAgICAgICAgIHtiZWdpbjogJyVyIScsIGVuZDogJyFbYS16XSonfSxcbiAgICAgICAgICAgIHtiZWdpbjogJyVyXFxcXFsnLCBlbmQ6ICdcXFxcXVthLXpdKid9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUyk7XG5cbiAgU1VCU1QuY29udGFpbnMgPSBSVUJZX0RFRkFVTFRfQ09OVEFJTlM7XG4gIFBBUkFNUy5jb250YWlucyA9IFJVQllfREVGQVVMVF9DT05UQUlOUztcblxuICB2YXIgU0lNUExFX1BST01QVCA9IFwiWz4/XT5cIjtcbiAgdmFyIERFRkFVTFRfUFJPTVBUID0gXCJbXFxcXHcjXStcXFxcKFxcXFx3K1xcXFwpOlxcXFxkKzpcXFxcZCs+XCI7XG4gIHZhciBSVk1fUFJPTVBUID0gXCIoXFxcXHcrLSk/XFxcXGQrXFxcXC5cXFxcZCtcXFxcLlxcXFxkKHBcXFxcZCspP1tePl0rPlwiO1xuXG4gIHZhciBJUkJfREVGQVVMVCA9IFtcbiAgICB7XG4gICAgICBiZWdpbjogL15cXHMqPT4vLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLCBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgIGJlZ2luOiAnXignK1NJTVBMRV9QUk9NUFQrXCJ8XCIrREVGQVVMVF9QUk9NUFQrJ3wnK1JWTV9QUk9NUFQrJyknLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGVuZDogJyQnLCBjb250YWluczogUlVCWV9ERUZBVUxUX0NPTlRBSU5TXG4gICAgICB9XG4gICAgfVxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydyYicsICdnZW1zcGVjJywgJ3BvZHNwZWMnLCAndGhvcicsICdpcmInXSxcbiAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogQ09NTUVOVF9NT0RFUy5jb25jYXQoSVJCX0RFRkFVTFQpLmNvbmNhdChSVUJZX0RFRkFVTFRfQ09OVEFJTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCc8JSMnLCAnJT4nKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8JVslPS1dPycsIGVuZDogJ1slLV0/JT4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3NwYXduIHNwYXduX2xpbmsgc2VsZicsXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWZ0ZXIgYW5kIGFuZGFsc298MTAgYmFuZCBiZWdpbiBibm90IGJvciBic2wgYnNyIGJ4b3IgY2FzZSBjYXRjaCBjb25kIGRpdiBlbmQgZnVuIGlmICcgK1xuICAgICAgICAnbGV0IG5vdCBvZiBvciBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnXlswLTldKz4gJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnJScsICckJyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrI1thLWZBLUYwLTldK3xcXFxcZCsoXFxcXC5cXFxcZCspPyhbZUVdWy0rXT9cXFxcZCspPyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFw/KDo6KT8oW0EtWl1cXFxcdyooOjopPykrJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnb2snXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyEnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKjpbYS16XFwnXVthLXpBLVowLTlfXFwnXSopfChcXFxcYlthLXpcXCddW2EtekEtWjAtOV9cXCddKiknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW0EtWl1bYS16QS1aMC05X1xcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEJBU0lDX0FUT01fUkUgPSAnW2EtelxcJ11bYS16QS1aMC05X1xcJ10qJztcbiAgdmFyIEZVTkNUSU9OX05BTUVfUkUgPSAnKCcgKyBCQVNJQ19BVE9NX1JFICsgJzonICsgQkFTSUNfQVRPTV9SRSArICd8JyArIEJBU0lDX0FUT01fUkUgKyAnKSc7XG4gIHZhciBFUkxBTkdfUkVTRVJWRUQgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhZnRlciBhbmQgYW5kYWxzb3wxMCBiYW5kIGJlZ2luIGJub3QgYm9yIGJzbCBienIgYnhvciBjYXNlIGNhdGNoIGNvbmQgZGl2IGVuZCBmdW4gaWYgJyArXG4gICAgICAnbGV0IG5vdCBvZiBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIHRydWUnXG4gIH07XG5cbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoJyUnLCAnJCcpO1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdcXFxcYihcXFxcZCsjW2EtZkEtRjAtOV0rfFxcXFxkKyhcXFxcLlxcXFxkKyk/KFtlRV1bLStdP1xcXFxkKyk/KScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOQU1FRF9GVU4gPSB7XG4gICAgYmVnaW46ICdmdW5cXFxccysnICsgQkFTSUNfQVRPTV9SRSArICcvXFxcXGQrJ1xuICB9O1xuICB2YXIgRlVOQ1RJT05fQ0FMTCA9IHtcbiAgICBiZWdpbjogRlVOQ1RJT05fTkFNRV9SRSArICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEZVTkNUSU9OX05BTUVfUkUsIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIC8vIFwiY29udGFpbnNcIiBkZWZpbmVkIGxhdGVyXG4gICAgICB9XG4gICAgXVxuICB9O1xuICB2YXIgVFVQTEUgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgcmVsZXZhbmNlOiAwXG4gICAgLy8gXCJjb250YWluc1wiIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIFZBUjEgPSB7XG4gICAgYmVnaW46ICdcXFxcYl8oW0EtWl1bQS1aYS16MC05X10qKT8nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgVkFSMiA9IHtcbiAgICBiZWdpbjogJ1tBLVpdW2EtekEtWjAtOV9dKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBSRUNPUkRfQUNDRVNTID0ge1xuICAgIGJlZ2luOiAnIycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnIycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAvLyBcImNvbnRhaW5zXCIgZGVmaW5lZCBsYXRlclxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQkxPQ0tfU1RBVEVNRU5UUyA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnZnVuIHJlY2VpdmUgaWYgdHJ5IGNhc2UnLCBlbmQ6ICdlbmQnLFxuICAgIGtleXdvcmRzOiBFUkxBTkdfUkVTRVJWRURcbiAgfTtcbiAgQkxPQ0tfU1RBVEVNRU5UUy5jb250YWlucyA9IFtcbiAgICBDT01NRU5ULFxuICAgIE5BTUVEX0ZVTixcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnJ30pLFxuICAgIEJMT0NLX1NUQVRFTUVOVFMsXG4gICAgRlVOQ1RJT05fQ0FMTCxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUixcbiAgICBUVVBMRSxcbiAgICBWQVIxLCBWQVIyLFxuICAgIFJFQ09SRF9BQ0NFU1NcbiAgXTtcblxuICB2YXIgQkFTSUNfTU9ERVMgPSBbXG4gICAgQ09NTUVOVCxcbiAgICBOQU1FRF9GVU4sXG4gICAgQkxPQ0tfU1RBVEVNRU5UUyxcbiAgICBGVU5DVElPTl9DQUxMLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgTlVNQkVSLFxuICAgIFRVUExFLFxuICAgIFZBUjEsIFZBUjIsXG4gICAgUkVDT1JEX0FDQ0VTU1xuICBdO1xuICBGVU5DVElPTl9DQUxMLmNvbnRhaW5zWzFdLmNvbnRhaW5zID0gQkFTSUNfTU9ERVM7XG4gIFRVUExFLmNvbnRhaW5zID0gQkFTSUNfTU9ERVM7XG4gIFJFQ09SRF9BQ0NFU1MuY29udGFpbnNbMV0uY29udGFpbnMgPSBCQVNJQ19NT0RFUztcblxuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogQkFTSUNfTU9ERVNcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2VybCddLFxuICAgIGtleXdvcmRzOiBFUkxBTkdfUkVTRVJWRUQsXG4gICAgaWxsZWdhbDogJyg8L3xcXFxcKj18XFxcXCs9fC09fC9cXFxcKnxcXFxcKi98XFxcXChcXFxcKnxcXFxcKlxcXFwpKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ14nICsgQkFTSUNfQVRPTV9SRSArICdcXFxccypcXFxcKCcsIGVuZDogJy0+JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcKHwjfC8vfC9cXFxcKnxcXFxcXFxcXHw6fDsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IEJBU0lDX0FUT01fUkV9KVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc7fFxcXFwuJyxcbiAgICAgICAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVELFxuICAgICAgICAgIGNvbnRhaW5zOiBCQVNJQ19NT0RFU1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ09NTUVOVCxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeLScsIGVuZDogJ1xcXFwuJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgbGV4ZW1lczogJy0nICsgaGxqcy5JREVOVF9SRSxcbiAgICAgICAga2V5d29yZHM6XG4gICAgICAgICAgJy1tb2R1bGUgLXJlY29yZCAtdW5kZWYgLWV4cG9ydCAtaWZkZWYgLWlmbmRlZiAtYXV0aG9yIC1jb3B5cmlnaHQgLWRvYyAtdnNuICcgK1xuICAgICAgICAgICctaW1wb3J0IC1pbmNsdWRlIC1pbmNsdWRlX2xpYiAtY29tcGlsZSAtZGVmaW5lIC1lbHNlIC1lbmRpZiAtZmlsZSAtYmVoYXZpb3VyICcgK1xuICAgICAgICAgICctYmVoYXZpb3IgLXNwZWMnLFxuICAgICAgICBjb250YWluczogW1BBUkFNU11cbiAgICAgIH0sXG4gICAgICBOVU1CRVIsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgUkVDT1JEX0FDQ0VTUyxcbiAgICAgIFZBUjEsIFZBUjIsXG4gICAgICBUVVBMRSxcbiAgICAgIHtiZWdpbjogL1xcLiQvfSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd4bHN4JywgJ3hscyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1thLXpBLVpdW1xcd1xcLl0qLyxcbiAgICAvLyBidWlsdC1pbiBmdW5jdGlvbnMgaW1wb3J0ZWQgZnJvbSBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNjA1MTMwNDI3MTAvaHR0cHM6Ly9zdXBwb3J0Lm9mZmljZS5jb20vZW4tdXMvYXJ0aWNsZS9FeGNlbC1mdW5jdGlvbnMtYWxwaGFiZXRpY2FsLWIzOTQ0NTcyLTI1NWQtNGVmYi1iYjk2LWM2ZDkwMDMzZTE4OFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAgIGJ1aWx0X2luOiAnQUJTIEFDQ1JJTlQgQUNDUklOVE0gQUNPUyBBQ09TSCBBQ09UIEFDT1RIIEFHR1JFR0FURSBBRERSRVNTIEFNT1JERUdSQyBBTU9STElOQyBBTkQgQVJBQklDIEFSRUFTIEFTQyBBU0lOIEFTSU5IIEFUQU4gQVRBTjIgQVRBTkggQVZFREVWIEFWRVJBR0UgQVZFUkFHRUEgQVZFUkFHRUlGIEFWRVJBR0VJRlMgQkFIVFRFWFQgQkFTRSBCRVNTRUxJIEJFU1NFTEogQkVTU0VMSyBCRVNTRUxZIEJFVEFESVNUIEJFVEEuRElTVCBCRVRBSU5WIEJFVEEuSU5WIEJJTjJERUMgQklOMkhFWCBCSU4yT0NUIEJJTk9NRElTVCBCSU5PTS5ESVNUIEJJTk9NLkRJU1QuUkFOR0UgQklOT00uSU5WIEJJVEFORCBCSVRMU0hJRlQgQklUT1IgQklUUlNISUZUIEJJVFhPUiBDQUxMIENFSUxJTkcgQ0VJTElORy5NQVRIIENFSUxJTkcuUFJFQ0lTRSBDRUxMIENIQVIgQ0hJRElTVCBDSElJTlYgQ0hJVEVTVCBDSElTUS5ESVNUIENISVNRLkRJU1QuUlQgQ0hJU1EuSU5WIENISVNRLklOVi5SVCBDSElTUS5URVNUIENIT09TRSBDTEVBTiBDT0RFIENPTFVNTiBDT0xVTU5TIENPTUJJTiBDT01CSU5BIENPTVBMRVggQ09OQ0FUIENPTkNBVEVOQVRFIENPTkZJREVOQ0UgQ09ORklERU5DRS5OT1JNIENPTkZJREVOQ0UuVCBDT05WRVJUIENPUlJFTCBDT1MgQ09TSCBDT1QgQ09USCBDT1VOVCBDT1VOVEEgQ09VTlRCTEFOSyBDT1VOVElGIENPVU5USUZTIENPVVBEQVlCUyBDT1VQREFZUyBDT1VQREFZU05DIENPVVBOQ0QgQ09VUE5VTSBDT1VQUENEIENPVkFSIENPVkFSSUFOQ0UuUCBDT1ZBUklBTkNFLlMgQ1JJVEJJTk9NIENTQyBDU0NIIENVQkVLUElNRU1CRVIgQ1VCRU1FTUJFUiBDVUJFTUVNQkVSUFJPUEVSVFkgQ1VCRVJBTktFRE1FTUJFUiBDVUJFU0VUIENVQkVTRVRDT1VOVCBDVUJFVkFMVUUgQ1VNSVBNVCBDVU1QUklOQyBEQVRFIERBVEVESUYgREFURVZBTFVFIERBVkVSQUdFIERBWSBEQVlTIERBWVMzNjAgREIgREJDUyBEQ09VTlQgRENPVU5UQSBEREIgREVDMkJJTiBERUMySEVYIERFQzJPQ1QgREVDSU1BTCBERUdSRUVTIERFTFRBIERFVlNRIERHRVQgRElTQyBETUFYIERNSU4gRE9MTEFSIERPTExBUkRFIERPTExBUkZSIERQUk9EVUNUIERTVERFViBEU1RERVZQIERTVU0gRFVSQVRJT04gRFZBUiBEVkFSUCBFREFURSBFRkZFQ1QgRU5DT0RFVVJMIEVPTU9OVEggRVJGIEVSRi5QUkVDSVNFIEVSRkMgRVJGQy5QUkVDSVNFIEVSUk9SLlRZUEUgRVVST0NPTlZFUlQgRVZFTiBFWEFDVCBFWFAgRVhQT04uRElTVCBFWFBPTkRJU1QgRkFDVCBGQUNURE9VQkxFIEZBTFNFfDAgRi5ESVNUIEZESVNUIEYuRElTVC5SVCBGSUxURVJYTUwgRklORCBGSU5EQiBGLklOViBGLklOVi5SVCBGSU5WIEZJU0hFUiBGSVNIRVJJTlYgRklYRUQgRkxPT1IgRkxPT1IuTUFUSCBGTE9PUi5QUkVDSVNFIEZPUkVDQVNUIEZPUkVDQVNULkVUUyBGT1JFQ0FTVC5FVFMuQ09ORklOVCBGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkgRk9SRUNBU1QuRVRTLlNUQVQgRk9SRUNBU1QuTElORUFSIEZPUk1VTEFURVhUIEZSRVFVRU5DWSBGLlRFU1QgRlRFU1QgRlYgRlZTQ0hFRFVMRSBHQU1NQSBHQU1NQS5ESVNUIEdBTU1BRElTVCBHQU1NQS5JTlYgR0FNTUFJTlYgR0FNTUFMTiBHQU1NQUxOLlBSRUNJU0UgR0FVU1MgR0NEIEdFT01FQU4gR0VTVEVQIEdFVFBJVk9UREFUQSBHUk9XVEggSEFSTUVBTiBIRVgyQklOIEhFWDJERUMgSEVYMk9DVCBITE9PS1VQIEhPVVIgSFlQRVJMSU5LIEhZUEdFT00uRElTVCBIWVBHRU9NRElTVCBJRiBJRkVSUk9SIElGTkEgSUZTIElNQUJTIElNQUdJTkFSWSBJTUFSR1VNRU5UIElNQ09OSlVHQVRFIElNQ09TIElNQ09TSCBJTUNPVCBJTUNTQyBJTUNTQ0ggSU1ESVYgSU1FWFAgSU1MTiBJTUxPRzEwIElNTE9HMiBJTVBPV0VSIElNUFJPRFVDVCBJTVJFQUwgSU1TRUMgSU1TRUNIIElNU0lOIElNU0lOSCBJTVNRUlQgSU1TVUIgSU1TVU0gSU1UQU4gSU5ERVggSU5ESVJFQ1QgSU5GTyBJTlQgSU5URVJDRVBUIElOVFJBVEUgSVBNVCBJUlIgSVNCTEFOSyBJU0VSUiBJU0VSUk9SIElTRVZFTiBJU0ZPUk1VTEEgSVNMT0dJQ0FMIElTTkEgSVNOT05URVhUIElTTlVNQkVSIElTT0REIElTUkVGIElTVEVYVCBJU08uQ0VJTElORyBJU09XRUVLTlVNIElTUE1UIEpJUyBLVVJUIExBUkdFIExDTSBMRUZUIExFRlRCIExFTiBMRU5CIExJTkVTVCBMTiBMT0cgTE9HMTAgTE9HRVNUIExPR0lOViBMT0dOT1JNLkRJU1QgTE9HTk9STURJU1QgTE9HTk9STS5JTlYgTE9PS1VQIExPV0VSIE1BVENIIE1BWCBNQVhBIE1BWElGUyBNREVURVJNIE1EVVJBVElPTiBNRURJQU4gTUlEIE1JREJzIE1JTiBNSU5JRlMgTUlOQSBNSU5VVEUgTUlOVkVSU0UgTUlSUiBNTVVMVCBNT0QgTU9ERSBNT0RFLk1VTFQgTU9ERS5TTkdMIE1PTlRIIE1ST1VORCBNVUxUSU5PTUlBTCBNVU5JVCBOIE5BIE5FR0JJTk9NLkRJU1QgTkVHQklOT01ESVNUIE5FVFdPUktEQVlTIE5FVFdPUktEQVlTLklOVEwgTk9NSU5BTCBOT1JNLkRJU1QgTk9STURJU1QgTk9STUlOViBOT1JNLklOViBOT1JNLlMuRElTVCBOT1JNU0RJU1QgTk9STS5TLklOViBOT1JNU0lOViBOT1QgTk9XIE5QRVIgTlBWIE5VTUJFUlZBTFVFIE9DVDJCSU4gT0NUMkRFQyBPQ1QySEVYIE9ERCBPRERGUFJJQ0UgT0RERllJRUxEIE9ERExQUklDRSBPRERMWUlFTEQgT0ZGU0VUIE9SIFBEVVJBVElPTiBQRUFSU09OIFBFUkNFTlRJTEUuRVhDIFBFUkNFTlRJTEUuSU5DIFBFUkNFTlRJTEUgUEVSQ0VOVFJBTksuRVhDIFBFUkNFTlRSQU5LLklOQyBQRVJDRU5UUkFOSyBQRVJNVVQgUEVSTVVUQVRJT05BIFBISSBQSE9ORVRJQyBQSSBQTVQgUE9JU1NPTi5ESVNUIFBPSVNTT04gUE9XRVIgUFBNVCBQUklDRSBQUklDRURJU0MgUFJJQ0VNQVQgUFJPQiBQUk9EVUNUIFBST1BFUiBQViBRVUFSVElMRSBRVUFSVElMRS5FWEMgUVVBUlRJTEUuSU5DIFFVT1RJRU5UIFJBRElBTlMgUkFORCBSQU5EQkVUV0VFTiBSQU5LLkFWRyBSQU5LLkVRIFJBTksgUkFURSBSRUNFSVZFRCBSRUdJU1RFUi5JRCBSRVBMQUNFIFJFUExBQ0VCIFJFUFQgUklHSFQgUklHSFRCIFJPTUFOIFJPVU5EIFJPVU5ERE9XTiBST1VORFVQIFJPVyBST1dTIFJSSSBSU1EgUlREIFNFQVJDSCBTRUFSQ0hCIFNFQyBTRUNIIFNFQ09ORCBTRVJJRVNTVU0gU0hFRVQgU0hFRVRTIFNJR04gU0lOIFNJTkggU0tFVyBTS0VXLlAgU0xOIFNMT1BFIFNNQUxMIFNRTC5SRVFVRVNUIFNRUlQgU1FSVFBJIFNUQU5EQVJESVpFIFNUREVWIFNUREVWLlAgU1RERVYuUyBTVERFVkEgU1RERVZQIFNUREVWUEEgU1RFWVggU1VCU1RJVFVURSBTVUJUT1RBTCBTVU0gU1VNSUYgU1VNSUZTIFNVTVBST0RVQ1QgU1VNU1EgU1VNWDJNWTIgU1VNWDJQWTIgU1VNWE1ZMiBTV0lUQ0ggU1lEIFQgVEFOIFRBTkggVEJJTExFUSBUQklMTFBSSUNFIFRCSUxMWUlFTEQgVC5ESVNUIFQuRElTVC4yVCBULkRJU1QuUlQgVERJU1QgVEVYVCBURVhUSk9JTiBUSU1FIFRJTUVWQUxVRSBULklOViBULklOVi4yVCBUSU5WIFRPREFZIFRSQU5TUE9TRSBUUkVORCBUUklNIFRSSU1NRUFOIFRSVUV8MCBUUlVOQyBULlRFU1QgVFRFU1QgVFlQRSBVTklDSEFSIFVOSUNPREUgVVBQRVIgVkFMVUUgVkFSIFZBUi5QIFZBUi5TIFZBUkEgVkFSUCBWQVJQQSBWREIgVkxPT0tVUCBXRUJTRVJWSUNFIFdFRUtEQVkgV0VFS05VTSBXRUlCVUxMIFdFSUJVTEwuRElTVCBXT1JLREFZIFdPUktEQVkuSU5UTCBYSVJSIFhOUFYgWE9SIFlFQVIgWUVBUkZSQUMgWUlFTEQgWUlFTERESVNDIFlJRUxETUFUIFouVEVTVCBaVEVTVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSBiZWdpbm5pbmcgZXF1YWwgc2lnbiBmb3VuZCBpbiBFeGNlbCBmb3JtdWxhIGV4YW1wbGVzICovXG4gICAgICAgIGJlZ2luOiAvXj0vLFxuICAgICAgICBlbmQ6IC9bXj1dLywgcmV0dXJuRW5kOiB0cnVlLCBpbGxlZ2FsOiAvPS8sIC8qIG9ubHkgYWxsb3cgc2luZ2xlIGVxdWFsIHNpZ24gYXQgZnJvbnQgb2YgbGluZSAqL1xuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLyogdGVjaG5pY2FsbHksIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gMiBsZXR0ZXJzIGluIGNvbHVtbiBuYW1lcywgYnV0IHRoaXMgcHJldmVudHMgY29uZmxpY3Qgd2l0aCBzb21lIGtleXdvcmRzICovXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSByZWZlcmVuY2UgdG8gYSBzaW5nbGUgY2VsbCAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL1xcYltBLVpdezEsMn1cXGQrXFxiLyxcbiAgICAgICAgZW5kOiAvW15cXGRdLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvKiBtYXRjaGVzIGEgcmVmZXJlbmNlIHRvIGEgcmFuZ2Ugb2YgY2VsbHMgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9bQS1aXXswLDJ9XFxkKjpbQS1aXXswLDJ9XFxkKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSArICcoJSk/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLyogRXhjZWwgZm9ybXVsYSBjb21tZW50cyBhcmUgZG9uZSBieSBwdXR0aW5nIHRoZSBjb21tZW50IGluIGEgZnVuY3Rpb24gY2FsbCB0byBOKCkgKi9cbiAgICAgIGhsanMuQ09NTUVOVCgvXFxiTlxcKC8sL1xcKS8sXG4gICAgICB7XG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcbi9cbiAgICAgIH0pXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogW1xuICAgIHtcbiAgICAgIGJlZ2luOiAvW15cXHUyNDAxXFx1MDAwMV0rLyxcbiAgICAgIGVuZDogL1tcXHUyNDAxXFx1MDAwMV0vLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKFteXFx1MjQwMVxcdTAwMDE9XSspLyxcbiAgICAgICAgZW5kOiAvPShbXlxcdTI0MDFcXHUwMDAxPV0rKS8sXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IGZhbHNlLFxuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89LyxcbiAgICAgICAgZW5kOiAvKFtcXHUyNDAxXFx1MDAwMV0pLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnXG4gICAgICB9XVxuICAgIH1dLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWVcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuXG4gICAgdmFyIENIQVIgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvJygufFxcXFxbeFh1VV1bYS16QS1aMC05XSspJy9cbiAgICB9O1xuXG4gICAgdmFyIFNUUklORyA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIE5BTUUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vXG4gICAgfTtcblxuICAgIHZhciBNRVRIT0QgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZicsXG4gICAgICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW05BTUVdXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZScsXG4gICAgICAgICAgICBrZXl3b3JkOiAnY2FzZSBjbGFzcyBkZWYgZWxzZSBlbnVtIGlmIGltcGwgaW1wb3J0IGluIGxhdCByZWwgaW5kZXggbGV0IG1hdGNoIG5hbWVzcGFjZSBzd2l0Y2ggdHlwZSB5aWVsZCB3aXRoJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIENIQVIsXG4gICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICBNRVRIT0QsXG4gICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuXG4gIHZhciBGX0tFWVdPUkRTID0ge1xuICAgIGxpdGVyYWw6ICcuRmFsc2UuIC5UcnVlLicsXG4gICAga2V5d29yZDogJ2tpbmQgZG8gd2hpbGUgcHJpdmF0ZSBjYWxsIGludHJpbnNpYyB3aGVyZSBlbHNld2hlcmUgJyArXG4gICAgICAndHlwZSBlbmR0eXBlIGVuZG1vZHVsZSBlbmRzZWxlY3QgZW5kaW50ZXJmYWNlIGVuZCBlbmRkbyBlbmRpZiBpZiBmb3JhbGwgZW5kZm9yYWxsIG9ubHkgY29udGFpbnMgZGVmYXVsdCByZXR1cm4gc3RvcCB0aGVuIGJsb2NrIGVuZGJsb2NrICcgK1xuICAgICAgJ3B1YmxpYyBzdWJyb3V0aW5lfDEwIGZ1bmN0aW9uIHByb2dyYW0gLmFuZC4gLm9yLiAubm90LiAubGUuIC5lcS4gLmdlLiAuZ3QuIC5sdC4gJyArXG4gICAgICAnZ290byBzYXZlIGVsc2UgdXNlIG1vZHVsZSBzZWxlY3QgY2FzZSAnICtcbiAgICAgICdhY2Nlc3MgYmxhbmsgZGlyZWN0IGV4aXN0IGZpbGUgZm10IGZvcm0gZm9ybWF0dGVkIGlvc3RhdCBuYW1lIG5hbWVkIG5leHRyZWMgbnVtYmVyIG9wZW5lZCByZWMgcmVjbCBzZXF1ZW50aWFsIHN0YXR1cyB1bmZvcm1hdHRlZCB1bml0ICcgK1xuICAgICAgJ2NvbnRpbnVlIGZvcm1hdCBwYXVzZSBjeWNsZSBleGl0ICcgK1xuICAgICAgJ2NfbnVsbF9jaGFyIGNfYWxlcnQgY19iYWNrc3BhY2UgY19mb3JtX2ZlZWQgZmx1c2ggd2FpdCBkZWNpbWFsIHJvdW5kIGlvbXNnICcgK1xuICAgICAgJ3N5bmNocm9ub3VzIG5vcGFzcyBub25fb3ZlcnJpZGFibGUgcGFzcyBwcm90ZWN0ZWQgdm9sYXRpbGUgYWJzdHJhY3QgZXh0ZW5kcyBpbXBvcnQgJyArXG4gICAgICAnbm9uX2ludHJpbnNpYyB2YWx1ZSBkZWZlcnJlZCBnZW5lcmljIGZpbmFsIGVudW1lcmF0b3IgY2xhc3MgYXNzb2NpYXRlIGJpbmQgZW51bSAnICtcbiAgICAgICdjX2ludCBjX3Nob3J0IGNfbG9uZyBjX2xvbmdfbG9uZyBjX3NpZ25lZF9jaGFyIGNfc2l6ZV90IGNfaW50OF90IGNfaW50MTZfdCBjX2ludDMyX3QgY19pbnQ2NF90IGNfaW50X2xlYXN0OF90IGNfaW50X2xlYXN0MTZfdCAnICtcbiAgICAgICdjX2ludF9sZWFzdDMyX3QgY19pbnRfbGVhc3Q2NF90IGNfaW50X2Zhc3Q4X3QgY19pbnRfZmFzdDE2X3QgY19pbnRfZmFzdDMyX3QgY19pbnRfZmFzdDY0X3QgY19pbnRtYXhfdCBDX2ludHB0cl90IGNfZmxvYXQgY19kb3VibGUgJyArXG4gICAgICAnY19sb25nX2RvdWJsZSBjX2Zsb2F0X2NvbXBsZXggY19kb3VibGVfY29tcGxleCBjX2xvbmdfZG91YmxlX2NvbXBsZXggY19ib29sIGNfY2hhciBjX251bGxfcHRyIGNfbnVsbF9mdW5wdHIgJyArXG4gICAgICAnY19uZXdfbGluZSBjX2NhcnJpYWdlX3JldHVybiBjX2hvcml6b250YWxfdGFiIGNfdmVydGljYWxfdGFiIGlzb19jX2JpbmRpbmcgY19sb2MgY19mdW5sb2MgY19hc3NvY2lhdGVkICBjX2ZfcG9pbnRlciAnICtcbiAgICAgICdjX3B0ciBjX2Z1bnB0ciBpc29fZm9ydHJhbl9lbnYgY2hhcmFjdGVyX3N0b3JhZ2Vfc2l6ZSBlcnJvcl91bml0IGZpbGVfc3RvcmFnZV9zaXplIGlucHV0X3VuaXQgaW9zdGF0X2VuZCBpb3N0YXRfZW9yICcgK1xuICAgICAgJ251bWVyaWNfc3RvcmFnZV9zaXplIG91dHB1dF91bml0IGNfZl9wcm9jcG9pbnRlciBpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sICcgK1xuICAgICAgJ2llZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlIG5ld3VuaXQgY29udGlndW91cyByZWN1cnNpdmUgJyArXG4gICAgICAncGFkIHBvc2l0aW9uIGFjdGlvbiBkZWxpbSByZWFkd3JpdGUgZW9yIGFkdmFuY2Ugbm1sIGludGVyZmFjZSBwcm9jZWR1cmUgbmFtZWxpc3QgaW5jbHVkZSBzZXF1ZW5jZSBlbGVtZW50YWwgcHVyZSAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgY2hhcmFjdGVyIGNvbXBsZXggbG9naWNhbCBkaW1lbnNpb24gYWxsb2NhdGFibGV8MTAgcGFyYW1ldGVyICcgK1xuICAgICAgJ2V4dGVybmFsIGltcGxpY2l0fDEwIG5vbmUgZG91YmxlIHByZWNpc2lvbiBhc3NpZ24gaW50ZW50IG9wdGlvbmFsIHBvaW50ZXIgJyArXG4gICAgICAndGFyZ2V0IGluIG91dCBjb21tb24gZXF1aXZhbGVuY2UgZGF0YScsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICcgK1xuICAgICAgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJyArXG4gICAgICAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICcgK1xuICAgICAgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJyArXG4gICAgICAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJyArXG4gICAgICAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJyArXG4gICAgICAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJyArXG4gICAgICAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnICtcbiAgICAgICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICcgK1xuICAgICAgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICcgK1xuICAgICAgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJyArXG4gICAgICAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICcgK1xuICAgICAgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJyArXG4gICAgICAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mJyAgK1xuICAgICAgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnICtcbiAgICAgICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICcgK1xuICAgICAgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnICtcbiAgICAgICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UnXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ2Y5MCcsICdmOTUnXSxcbiAgICBrZXl3b3JkczogRl9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez1cXFxcbl0nLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCBQQVJBTVNdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKD89XFxcXGJ8XFxcXCt8XFxcXC18XFxcXC4pKD89XFxcXC5cXFxcZHxcXFxcZCkoPzpcXFxcZCspPyg/OlxcXFwuP1xcXFxkKikoPzpbZGVdWystXT9cXFxcZCspP1xcXFxiXFxcXC4/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFRZUEVQQVJBTSA9IHtcbiAgICBiZWdpbjogJzwnLCBlbmQ6ICc+JyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvJ1thLXpBLVowLTlfXSsvfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2ZzJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnYWJzdHJhY3QgYW5kIGFzIGFzc2VydCBiYXNlIGJlZ2luIGNsYXNzIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG9uZSAnICtcbiAgICAgICdkb3duY2FzdCBkb3dudG8gZWxpZiBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuIGZhbHNlIGZpbmFsbHkgZm9yICcgK1xuICAgICAgJ2Z1biBmdW5jdGlvbiBnbG9iYWwgaWYgaW4gaW5oZXJpdCBpbmxpbmUgaW50ZXJmYWNlIGludGVybmFsIGxhenkgbGV0ICcgK1xuICAgICAgJ21hdGNoIG1lbWJlciBtb2R1bGUgbXV0YWJsZSBuYW1lc3BhY2UgbmV3IG51bGwgb2Ygb3BlbiBvciAnICtcbiAgICAgICdvdmVycmlkZSBwcml2YXRlIHB1YmxpYyByZWMgcmV0dXJuIHNpZyBzdGF0aWMgc3RydWN0IHRoZW4gdG8gJyArXG4gICAgICAndHJ1ZSB0cnkgdHlwZSB1cGNhc3QgdXNlIHZhbCB2b2lkIHdoZW4gd2hpbGUgd2l0aCB5aWVsZCcsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgLy8gbW9uYWQgYnVpbGRlciBrZXl3b3JkcyAobWF0Y2hlcyBiZWZvcmUgbm9uLWJhbmcga3dzKVxuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46IC9cXGIoeWllbGR8cmV0dXJufGxldHxkbykhL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcKFxcXFwqJywgJ1xcXFwqXFxcXCknKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndHlwZScsIGVuZDogJ1xcXFwofD18JCcsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAgVFlQRVBBUkFNXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ1xcXFxbPCcsIGVuZDogJz5cXFxcXScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXEIoXFwnW0EtWmEtel0pXFxcXGInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgJ2tleXdvcmQnOlxuICAgICAgJ2Fib3J0IGFjcm9ueW0gYWNyb255bXMgYWxpYXMgYWxsIGFuZCBhc3NpZ24gYmluYXJ5IGNhcmQgZGlhZyBkaXNwbGF5ICcgK1xuICAgICAgJ2Vsc2UgZXEgZmlsZSBmaWxlcyBmb3IgZnJlZSBnZSBndCBpZiBpbnRlZ2VyIGxlIGxvb3AgbHQgbWF4aW1pemluZyAnICtcbiAgICAgICdtaW5pbWl6aW5nIG1vZGVsIG1vZGVscyBuZSBuZWdhdGl2ZSBubyBub3Qgb3B0aW9uIG9wdGlvbnMgb3Igb3JkICcgK1xuICAgICAgJ3Bvc2l0aXZlIHByb2QgcHV0IHB1dHBhZ2UgcHV0dGwgcmVwZWF0IHNhbWVhcyBzZW1pY29udCBzZW1paW50IHNtYXggJyArXG4gICAgICAnc21pbiBzb2x2ZSBzb3MxIHNvczIgc3VtIHN5c3RlbSB0YWJsZSB0aGVuIHVudGlsIHVzaW5nIHdoaWxlIHhvciB5ZXMnLFxuICAgICdsaXRlcmFsJzogJ2VwcyBpbmYgbmEnLFxuICAgICdidWlsdC1pbic6XG4gICAgICAnYWJzIGFyY2NvcyBhcmNzaW4gYXJjdGFuIGFyY3RhbjIgQmV0YSBiZXRhUmVnIGJpbm9taWFsIGNlaWwgY2VudHJvcHkgJyArXG4gICAgICAnY29zIGNvc2ggY3ZQb3dlciBkaXYgZGl2MCBlRGlzdCBlbnRyb3B5IGVycm9yZiBleGVjU2VlZCBleHAgZmFjdCAnICtcbiAgICAgICdmbG9vciBmcmFjIGdhbW1hIGdhbW1hUmVnIGxvZyBsb2dCZXRhIGxvZ0dhbW1hIGxvZzEwIGxvZzIgbWFwVmFsIG1heCAnICtcbiAgICAgICdtaW4gbW9kIG5jcENNIG5jcEYgbmNwVlVwb3cgbmNwVlVzaW4gbm9ybWFsIHBpIHBvbHkgcG93ZXIgJyArXG4gICAgICAncmFuZEJpbm9taWFsIHJhbmRMaW5lYXIgcmFuZFRyaWFuZ2xlIHJvdW5kIHJQb3dlciBzaWdtb2lkIHNpZ24gJyArXG4gICAgICAnc2lnblBvd2VyIHNpbiBzaW5oIHNsZXhwIHNsbG9nMTAgc2xyZWMgc3FleHAgc3Fsb2cxMCBzcXIgc3FyZWMgc3FydCAnICtcbiAgICAgICd0YW4gdGFuaCB0cnVuYyB1bmlmb3JtIHVuaWZvcm1JbnQgdmNQb3dlciBib29sX2FuZCBib29sX2VxdiBib29sX2ltcCAnICtcbiAgICAgICdib29sX25vdCBib29sX29yIGJvb2xfeG9yIGlmVGhlbiByZWxfZXEgcmVsX2dlIHJlbF9ndCByZWxfbGUgcmVsX2x0ICcgK1xuICAgICAgJ3JlbF9uZSBnZGF5IGdkb3cgZ2hvdXIgZ2xlYXAgZ21pbGxpc2VjIGdtaW51dGUgZ21vbnRoIGdzZWNvbmQgZ3llYXIgJyArXG4gICAgICAnamRhdGUgam5vdyBqc3RhcnQganRpbWUgZXJyb3JMZXZlbCBleGVjRXJyb3IgZ2Ftc1JlbGVhc2UgZ2Ftc1ZlcnNpb24gJyArXG4gICAgICAnaGFuZGxlQ29sbGVjdCBoYW5kbGVEZWxldGUgaGFuZGxlU3RhdHVzIGhhbmRsZVN1Ym1pdCBoZWFwRnJlZSAnICtcbiAgICAgICdoZWFwTGltaXQgaGVhcFNpemUgam9iSGFuZGxlIGpvYktpbGwgam9iU3RhdHVzIGpvYlRlcm1pbmF0ZSAnICtcbiAgICAgICdsaWNlbnNlTGV2ZWwgbGljZW5zZVN0YXR1cyBtYXhFeGVjRXJyb3Igc2xlZXAgdGltZUNsb3NlIHRpbWVDb21wICcgK1xuICAgICAgJ3RpbWVFbGFwc2VkIHRpbWVFeGVjIHRpbWVTdGFydCdcbiAgfTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgfTtcbiAgdmFyIFNZTUJPTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFw9W2xnZW54Y109L30sXG4gICAgICB7YmVnaW46IC9cXCQvfSxcbiAgICBdXG4gIH07XG4gIHZhciBRU1RSID0geyAvLyBPbmUtbGluZSBxdW90ZWQgY29tbWVudCBzdHJpbmdcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAnXFwnJywgZW5kOiAnXFwnJ30sXG4gICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ30sXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICB2YXIgQVNTSUdOTUVOVCA9IHtcbiAgICBiZWdpbjogJy8nLFxuICAgIGVuZDogJy8nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgUVNUUixcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIF0sXG4gIH07XG4gIHZhciBERVNDVEVYVCA9IHsgLy8gUGFyYW1ldGVyL3NldC92YXJpYWJsZSBkZXNjcmlwdGlvbiB0ZXh0XG4gICAgYmVnaW46IC9bYS16XVthLXowLTlfXSooXFwoW2EtejAtOV8sIF0qXFwpKT9bIFxcdF0rLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZW5kOiAnJCcsXG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFTVFIsXG4gICAgICBBU1NJR05NRU5ULFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgYmVnaW46IC8oWyBdKlthLXowLTkmIyo9P0A+XFxcXDw6XFwtLCgpJFxcW1xcXV8ue30hKyVeXSspKy8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydnbXMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9eXFwkb250ZXh0LywgL15cXCRvZmZ0ZXh0LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxcJFthLXowLTldKycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLWtleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdeXFxcXCRbYS16MC05XSsnLFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgLy8gRGVjbGFyYXRpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ3NldCBzZXRzIHBhcmFtZXRlciBwYXJhbWV0ZXJzIHZhcmlhYmxlIHZhcmlhYmxlcyAnICtcbiAgICAgICAgICAnc2NhbGFyIHNjYWxhcnMgZXF1YXRpb24gZXF1YXRpb25zJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXConLCAnJCcpLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIEFTU0lHTk1FTlQsXG4gICAgICAgICAgREVTQ1RFWFQsXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIHRhYmxlIGVudmlyb25tZW50XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd0YWJsZScsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IC8vIHRhYmxlIGhlYWRlciByb3dcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICd0YWJsZScsXG4gICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbREVTQ1RFWFRdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXConLCAnJCcpLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyBUYWJsZSBkb2VzIG5vdCBjb250YWluIERFU0NURVhUIG9yIEFTU0lHTk1FTlRcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eW2Etel1bYS16MC05XyxcXC0rJyAoKSRdK1xcLnsyfS8sXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7IC8vIEZ1bmN0aW9uIHRpdGxlXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXlthLXowLTlfXSsvLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgICAgIFNZTUJPTFMsXG4gICAgICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFNZTUJPTFMsXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICAnYm9vbCBicmVhayBjYWxsIGNhbGxleGUgY2hlY2tpbnRlcnJ1cHQgY2xlYXIgY2xlYXJnIGNsb3NlYWxsIGNscyBjb21sb2cgY29tcGlsZSAnICtcbiAgICAgICAgICAgICAgJ2NvbnRpbnVlIGNyZWF0ZSBkZWJ1ZyBkZWNsYXJlIGRlbGV0ZSBkaXNhYmxlIGRsaWJyYXJ5IGRsbGNhbGwgZG8gZG9zIGVkIGVkaXQgZWxzZSAnICtcbiAgICAgICAgICAgICAgJ2Vsc2VpZiBlbmFibGUgZW5kIGVuZGZvciBlbmRpZiBlbmRwIGVuZG8gZXJyb3Jsb2cgZXJyb3Jsb2dhdCBleHByIGV4dGVybmFsIGZuICcgK1xuICAgICAgICAgICAgICAnZm9yIGZvcm1hdCBnb3RvIGdvc3ViIGdyYXBoIGlmIGtleXdvcmQgbGV0IGxpYiBsaWJyYXJ5IGxpbmUgbG9hZCBsb2FkYXJyYXkgbG9hZGV4ZSAnICtcbiAgICAgICAgICAgICAgJ2xvYWRmIGxvYWRrIGxvYWRtIGxvYWRwIGxvYWRzIGxvYWR4IGxvY2FsIGxvY2F0ZSBsb29wbmV4dGluZGV4IGxwcmludCBscHdpZHRoIGxzaG93ICcgK1xuICAgICAgICAgICAgICAnbWF0cml4IG1zeW0gbmRwY2xleCBuZXcgb3BlbiBvdXRwdXQgb3V0d2lkdGggcGxvdCBwbG90c3ltIHBvcCBwcmNzbiBwcmludCAnICtcbiAgICAgICAgICAgICAgJ3ByaW50ZG9zIHByb2MgcHVzaCByZXRwIHJldHVybiBybmRjb24gcm5kbW9kIHJuZG11bHQgcm5kc2VlZCBydW4gc2F2ZSBzYXZlYWxsIHNjcmVlbiAnICtcbiAgICAgICAgICAgICAgJ3Njcm9sbCBzZXRhcnJheSBzaG93IHNwYXJzZSBzdG9wIHN0cmluZyBzdHJ1Y3Qgc3lzdGVtIHRyYWNlIHRyYXAgdGhyZWFkZm9yICcgK1xuICAgICAgICAgICAgICAndGhyZWFkZW5kZm9yIHRocmVhZGJlZ2luIHRocmVhZGpvaW4gdGhyZWFkc3RhdCB0aHJlYWRlbmQgdW50aWwgdXNlIHdoaWxlIHdpbnByaW50ICcgK1xuICAgICAgICAgICAgICAnbmUgZ2UgbGUgZ3QgbHQgYW5kIHhvciBvciBub3QgZXEgZXF2JyxcbiAgICBidWlsdF9pbjogJ2FicyBhY2YgYWNvbmNhdCBhZXllIGFtYXggYW1lYW4gQW1lcmljYW5CaW5vbUNhbGwgQW1lcmljYW5CaW5vbUNhbGxfR3JlZWtzIEFtZXJpY2FuQmlub21DYWxsX0ltcFZvbCAnICtcbiAgICAgICAgICAgICAgJ0FtZXJpY2FuQmlub21QdXQgQW1lcmljYW5CaW5vbVB1dF9HcmVla3MgQW1lcmljYW5CaW5vbVB1dF9JbXBWb2wgQW1lcmljYW5CU0NhbGwgQW1lcmljYW5CU0NhbGxfR3JlZWtzICcgK1xuICAgICAgICAgICAgICAnQW1lcmljYW5CU0NhbGxfSW1wVm9sIEFtZXJpY2FuQlNQdXQgQW1lcmljYW5CU1B1dF9HcmVla3MgQW1lcmljYW5CU1B1dF9JbXBWb2wgYW1pbiBhbXVsdCBhbm5vdGF0aW9uR2V0RGVmYXVsdHMgJyArXG4gICAgICAgICAgICAgICdhbm5vdGF0aW9uU2V0QmtkIGFubm90YXRpb25TZXRGb250IGFubm90YXRpb25TZXRMaW5lQ29sb3IgYW5ub3RhdGlvblNldExpbmVTdHlsZSBhbm5vdGF0aW9uU2V0TGluZVRoaWNrbmVzcyAnICtcbiAgICAgICAgICAgICAgJ2FubnVhbFRyYWRpbmdEYXlzIGFyY2NvcyBhcmNzaW4gYXJlc2hhcGUgYXJyYXlhbGxvYyBhcnJheWluZGV4IGFycmF5aW5pdCBhcnJheXRvbWF0IGFzY2lpbG9hZCBhc2NsYWJlbCBhc3RkICcgK1xuICAgICAgICAgICAgICAnYXN0ZHMgYXN1bSBhdGFuIGF0YW4yIGF0cmFuc3Bvc2UgYXhtYXJnaW4gYmFsYW5jZSBiYW5kIGJhbmRjaG9sIGJhbmRjaG9sc29sIGJhbmRsdHNvbCBiYW5kcnYgYmFuZHNvbHBkIGJhciAnICtcbiAgICAgICAgICAgICAgJ2Jhc2UxMCBiZWd3aW5kIGJlc3NlbGogYmVzc2VseSBiZXRhIGJveCBib3hjb3ggY2RmQmV0YSBjZGZCZXRhSW52IGNkZkJpbm9taWFsIGNkZkJpbm9taWFsSW52IGNkZkJ2biBjZGZCdm4yICcgK1xuICAgICAgICAgICAgICAnY2RmQnZuMmUgY2RmQ2F1Y2h5IGNkZkNhdWNoeUludiBjZGZDaGljIGNkZkNoaWkgY2RmQ2hpbmMgY2RmQ2hpbmNJbnYgY2RmRXhwIGNkZkV4cEludiBjZGZGYyBjZGZGbmMgY2RmRm5jSW52ICcgK1xuICAgICAgICAgICAgICAnY2RmR2FtIGNkZkdlblBhcmV0byBjZGZIeXBlckdlbyBjZGZMYXBsYWNlIGNkZkxhcGxhY2VJbnYgY2RmTG9naXN0aWMgY2RmTG9naXN0aWNJbnYgY2RmbUNvbnRyb2xDcmVhdGUgY2RmTXZuICcgK1xuICAgICAgICAgICAgICAnY2RmTXZuMmUgY2RmTXZuY2UgY2RmTXZuZSBjZGZNdnQyZSBjZGZNdnRjZSBjZGZNdnRlIGNkZk4gY2RmTjIgY2RmTmMgY2RmTmVnQmlub21pYWwgY2RmTmVnQmlub21pYWxJbnYgY2RmTmkgJyArXG4gICAgICAgICAgICAgICdjZGZQb2lzc29uIGNkZlBvaXNzb25JbnYgY2RmUmF5bGVpZ2ggY2RmUmF5bGVpZ2hJbnYgY2RmVGMgY2RmVGNpIGNkZlRuYyBjZGZUdm4gY2RmV2VpYnVsbCBjZGZXZWlidWxsSW52IGNkaXIgJyArXG4gICAgICAgICAgICAgICdjZWlsIENoYW5nZURpciBjaGRpciBjaGlCYXJTcXVhcmUgY2hvbCBjaG9sZG4gY2hvbHNvbCBjaG9sdXAgY2hycyBjbG9zZSBjb2RlIGNvbHMgY29sc2YgY29tYmluYXRlIGNvbWJpbmF0ZWQgJyArXG4gICAgICAgICAgICAgICdjb21wbGV4IGNvbiBjb25kIGNvbmogY29ucyBDb25TY29yZSBjb250b3VyIGNvbnYgY29udmVydHNhdG9zdHIgY29udmVydHN0cnRvc2EgY29ycm0gY29ycm1zIGNvcnJ2YyBjb3JyeCBjb3JyeHMgJyArXG4gICAgICAgICAgICAgICdjb3MgY29zaCBjb3VudHMgY291bnR3dHMgY3Jvc3NwcmQgY3JvdXQgY3JvdXRwIGNzcmNvbCBjc3JsaW4gY3N2UmVhZE0gY3N2UmVhZFNBIGN1bXByb2RjIGN1bXN1bWMgY3VydmUgY3Z0b3MgJyArXG4gICAgICAgICAgICAgICdkYXRhY3JlYXRlIGRhdGFjcmVhdGVjb21wbGV4IGRhdGFsaXN0IGRhdGFsb2FkIGRhdGFsb29wIGRhdGFvcGVuIGRhdGFzYXZlIGRhdGUgZGF0ZXN0ciBkYXRlc3RyaW5nIGRhdGVzdHJ5bWQgJyArXG4gICAgICAgICAgICAgICdkYXlpbnlyIGRheW9md2VlayBkYkFkZERhdGFiYXNlIGRiQ2xvc2UgZGJDb21taXQgZGJDcmVhdGVRdWVyeSBkYkV4ZWNRdWVyeSBkYkdldENvbm5lY3RPcHRpb25zIGRiR2V0RGF0YWJhc2VOYW1lICcgK1xuICAgICAgICAgICAgICAnZGJHZXREcml2ZXJOYW1lIGRiR2V0RHJpdmVycyBkYkdldEhvc3ROYW1lIGRiR2V0TGFzdEVycm9yTnVtIGRiR2V0TGFzdEVycm9yVGV4dCBkYkdldE51bWVyaWNhbFByZWNQb2xpY3kgJyArXG4gICAgICAgICAgICAgICdkYkdldFBhc3N3b3JkIGRiR2V0UG9ydCBkYkdldFRhYmxlSGVhZGVycyBkYkdldFRhYmxlcyBkYkdldFVzZXJOYW1lIGRiSGFzRmVhdHVyZSBkYklzRHJpdmVyQXZhaWxhYmxlIGRiSXNPcGVuICcgK1xuICAgICAgICAgICAgICAnZGJJc09wZW5FcnJvciBkYk9wZW4gZGJRdWVyeUJpbmRWYWx1ZSBkYlF1ZXJ5Q2xlYXIgZGJRdWVyeUNvbHMgZGJRdWVyeUV4ZWNQcmVwYXJlZCBkYlF1ZXJ5RmV0Y2hBbGxNIGRiUXVlcnlGZXRjaEFsbFNBICcgK1xuICAgICAgICAgICAgICAnZGJRdWVyeUZldGNoT25lTSBkYlF1ZXJ5RmV0Y2hPbmVTQSBkYlF1ZXJ5RmluaXNoIGRiUXVlcnlHZXRCb3VuZFZhbHVlIGRiUXVlcnlHZXRCb3VuZFZhbHVlcyBkYlF1ZXJ5R2V0RmllbGQgJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5R2V0TGFzdEVycm9yTnVtIGRiUXVlcnlHZXRMYXN0RXJyb3JUZXh0IGRiUXVlcnlHZXRMYXN0SW5zZXJ0SUQgZGJRdWVyeUdldExhc3RRdWVyeSBkYlF1ZXJ5R2V0UG9zaXRpb24gJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5SXNBY3RpdmUgZGJRdWVyeUlzRm9yd2FyZE9ubHkgZGJRdWVyeUlzTnVsbCBkYlF1ZXJ5SXNTZWxlY3QgZGJRdWVyeUlzVmFsaWQgZGJRdWVyeVByZXBhcmUgZGJRdWVyeVJvd3MgJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5U2VlayBkYlF1ZXJ5U2Vla0ZpcnN0IGRiUXVlcnlTZWVrTGFzdCBkYlF1ZXJ5U2Vla05leHQgZGJRdWVyeVNlZWtQcmV2aW91cyBkYlF1ZXJ5U2V0Rm9yd2FyZE9ubHkgJyArXG4gICAgICAgICAgICAgICdkYlJlbW92ZURhdGFiYXNlIGRiUm9sbGJhY2sgZGJTZXRDb25uZWN0T3B0aW9ucyBkYlNldERhdGFiYXNlTmFtZSBkYlNldEhvc3ROYW1lIGRiU2V0TnVtZXJpY2FsUHJlY1BvbGljeSAnICtcbiAgICAgICAgICAgICAgJ2RiU2V0UG9ydCBkYlNldFVzZXJOYW1lIGRiVHJhbnNhY3Rpb24gRGVsZXRlRmlsZSBkZWxpZiBkZWxyb3dzIGRlbnNlVG9TcCBkZW5zZVRvU3BSRSBkZW5Ub1plcm8gZGVzaWduIGRldCBkZXRsICcgK1xuICAgICAgICAgICAgICAnZGZmdCBkZmZ0aSBkaWFnIGRpYWdydiBkaWdhbW1hIGRvc3dpbiBET1NXaW5DbG9zZWFsbCBET1NXaW5PcGVuIGRvdGZlcSBkb3RmZXFtdCBkb3RmZ2UgZG90ZmdlbXQgZG90Zmd0IGRvdGZndG10ICcgK1xuICAgICAgICAgICAgICAnZG90ZmxlIGRvdGZsZW10IGRvdGZsdCBkb3RmbHRtdCBkb3RmbmUgZG90Zm5lbXQgZHJhdyBkcm9wIGRzQ3JlYXRlIGRzdGF0IGRzdGF0bXQgZHN0YXRtdENvbnRyb2xDcmVhdGUgZHRkYXRlIGR0ZGF5ICcgK1xuICAgICAgICAgICAgICAnZHR0aW1lIGR0dG9kdHYgZHR0b3N0ciBkdHRvdXRjIGR0dm5vcm1hbCBkdHZ0b2R0IGR0dnRvdXRjIGR1bW15IGR1bW15YnIgZHVtbXlkbiBlaWcgZWlnaCBlaWdodiBlaWd2IGVsYXBzZWRUcmFkaW5nRGF5cyAnICtcbiAgICAgICAgICAgICAgJ2VuZHdpbmQgZW52Z2V0IGVvZiBlcVNvbHZlIGVxU29sdmVtdCBlcVNvbHZlbXRDb250cm9sQ3JlYXRlIGVxU29sdmVtdE91dENyZWF0ZSBlcVNvbHZlc2V0IGVyZiBlcmZjIGVyZmNjcGx4IGVyZmNwbHggZXJyb3IgJyArXG4gICAgICAgICAgICAgICdldGRheXMgZXRoc2VjIGV0c3RyIEV1cm9wZWFuQmlub21DYWxsIEV1cm9wZWFuQmlub21DYWxsX0dyZWVrcyBFdXJvcGVhbkJpbm9tQ2FsbF9JbXBWb2wgRXVyb3BlYW5CaW5vbVB1dCAnICtcbiAgICAgICAgICAgICAgJ0V1cm9wZWFuQmlub21QdXRfR3JlZWtzIEV1cm9wZWFuQmlub21QdXRfSW1wVm9sIEV1cm9wZWFuQlNDYWxsIEV1cm9wZWFuQlNDYWxsX0dyZWVrcyBFdXJvcGVhbkJTQ2FsbF9JbXBWb2wgJyArXG4gICAgICAgICAgICAgICdFdXJvcGVhbkJTUHV0IEV1cm9wZWFuQlNQdXRfR3JlZWtzIEV1cm9wZWFuQlNQdXRfSW1wVm9sIGV4Y3RzbXBsIGV4ZWMgZXhlY2JnIGV4cCBleHRlcm4gZXllIGZjaGVja2VyciBmY2xlYXJlcnIgZmVxICcgK1xuICAgICAgICAgICAgICAnZmVxbXQgZmZsdXNoIGZmdCBmZnRpIGZmdG0gZmZ0bWkgZmZ0biBmZ2UgZmdlbXQgZmdldHMgZmdldHNhIGZnZXRzYXQgZmdldHN0IGZndCBmZ3RtdCBmaWxlaW5mbyBmaWxlc2EgZmxlIGZsZW10ICcgK1xuICAgICAgICAgICAgICAnZmxvb3IgZmx0IGZsdG10IGZtb2QgZm5lIGZuZW10IGZvbnRzIGZvcGVuIGZvcm1hdGN2IGZvcm1hdG52IGZwdXRzIGZwdXRzdCBmc2VlayBmc3RyZXJyb3IgZnRlbGwgZnRvY3YgZnRvcyBmdG9zdHJDICcgK1xuICAgICAgICAgICAgICAnZ2FtbWEgZ2FtbWFjcGx4IGdhbW1haWkgZ2F1c3NldCBnZGFBcHBlbmQgZ2RhQ3JlYXRlIGdkYURTdGF0IGdkYURTdGF0TWF0IGdkYUdldEluZGV4IGdkYUdldE5hbWUgZ2RhR2V0TmFtZXMgZ2RhR2V0T3JkZXJzICcgK1xuICAgICAgICAgICAgICAnZ2RhR2V0VHlwZSBnZGFHZXRUeXBlcyBnZGFHZXRWYXJJbmZvIGdkYUlzQ3BseCBnZGFMb2FkIGdkYVBhY2sgZ2RhUmVhZCBnZGFSZWFkQnlJbmRleCBnZGFSZWFkU29tZSBnZGFSZWFkU3BhcnNlICcgK1xuICAgICAgICAgICAgICAnZ2RhUmVhZFN0cnVjdCBnZGFSZXBvcnRWYXJJbmZvIGdkYVNhdmUgZ2RhVXBkYXRlIGdkYVVwZGF0ZUFuZFBhY2sgZ2RhVmFycyBnZGFXcml0ZSBnZGFXcml0ZTMyIGdkYVdyaXRlU29tZSBnZXRhcnJheSAnICtcbiAgICAgICAgICAgICAgJ2dldGRpbXMgZ2V0ZiBnZXRHQVVTU2hvbWUgZ2V0bWF0cml4IGdldG1hdHJpeDREIGdldG5hbWUgZ2V0bmFtZWYgZ2V0TmV4dFRyYWRpbmdEYXkgZ2V0TmV4dFdlZWtEYXkgZ2V0bnIgZ2V0b3JkZXJzICcgK1xuICAgICAgICAgICAgICAnZ2V0cGF0aCBnZXRQcmV2aW91c1RyYWRpbmdEYXkgZ2V0UHJldmlvdXNXZWVrRGF5IGdldFJvdyBnZXRzY2FsYXIzRCBnZXRzY2FsYXI0RCBnZXRUclJvdyBnZXR3aW5kIGdsbSBncmFkY3BseCBncmFkTVQgJyArXG4gICAgICAgICAgICAgICdncmFkTVRtIGdyYWRNVFQgZ3JhZE1UVG0gZ3JhZHAgZ3JhcGhwcnQgZ3JhcGhzZXQgaGFzaW1hZyBoZWFkZXIgaGVhZGVybXQgaGVzcyBoZXNzTVQgaGVzc01UZyBoZXNzTVRndyBoZXNzTVRtICcgK1xuICAgICAgICAgICAgICAnaGVzc01UbXcgaGVzc01UVCBoZXNzTVRUZyBoZXNzTVRUZ3cgaGVzc01UVG0gaGVzc01UdyBoZXNzcCBoaXN0IGhpc3RmIGhpc3RwIGhzZWMgaW1hZyBpbmRjdiBpbmRleGNhdCBpbmRpY2VzIGluZGljZXMyICcgK1xuICAgICAgICAgICAgICAnaW5kaWNlc2YgaW5kaWNlc2ZuIGluZG52IGluZHNhdiBpbnRlZ3JhdGUxZCBpbnRlZ3JhdGVDb250cm9sQ3JlYXRlIGludGdyYXQyIGludGdyYXQzIGludGhwMSBpbnRocDIgaW50aHAzIGludGhwNCAnICtcbiAgICAgICAgICAgICAgJ2ludGhwQ29udHJvbENyZWF0ZSBpbnRxdWFkMSBpbnRxdWFkMiBpbnRxdWFkMyBpbnRybGVhdiBpbnRybGVhdnNhIGludHJzZWN0IGludHNpbXAgaW52IGludnBkIGludnN3cCBpc2NwbHggaXNjcGx4ZiAnICtcbiAgICAgICAgICAgICAgJ2lzZGVuIGlzaW5mbmFubWlzcyBpc21pc3Mga2V5IGtleWF2IGtleXcgbGFnIGxhZzEgbGFnbiBsYXBFaWdoYiBsYXBFaWdoaSBsYXBFaWdodmIgbGFwRWlnaHZpIGxhcGdFaWcgbGFwZ0VpZ2ggbGFwZ0VpZ2h2ICcgK1xuICAgICAgICAgICAgICAnbGFwZ0VpZ3YgbGFwZ1NjaHVyIGxhcGdTdmRjc3QgbGFwZ1N2ZHMgbGFwZ1N2ZHN0IGxhcFN2ZGN1c3YgbGFwU3ZkcyBsYXBTdmR1c3YgbGRscCBsZGxzb2wgbGluU29sdmUgbGlzdHdpc2UgbG4gbG5jZGZidm4gJyArXG4gICAgICAgICAgICAgICdsbmNkZmJ2bjIgbG5jZGZtdm4gbG5jZGZuIGxuY2RmbjIgbG5jZGZuYyBsbmZhY3QgbG5nYW1tYWNwbHggbG5wZGZtdm4gbG5wZGZtdnQgbG5wZGZuIGxucGRmdCBsb2FkZCBsb2Fkc3RydWN0IGxvYWR3aW5kICcgK1xuICAgICAgICAgICAgICAnbG9lc3MgbG9lc3NtdCBsb2Vzc210Q29udHJvbENyZWF0ZSBsb2cgbG9nbG9nIGxvZ3ggbG9neSBsb3dlciBsb3dtYXQgbG93bWF0MSBsdHJpc29sIGx1IGx1c29sIG1hY2hFcHNpbG9uIG1ha2UgbWFrZXZhcnMgJyArXG4gICAgICAgICAgICAgICdtYWtld2luZCBtYXJnaW4gbWF0YWxsb2MgbWF0aW5pdCBtYXR0b2FycmF5IG1heGJ5dGVzIG1heGMgbWF4aW5kYyBtYXh2IG1heHZlYyBtYmVzc2VsZWkgbWJlc3NlbGVpMCBtYmVzc2VsZWkxIG1iZXNzZWxpICcgK1xuICAgICAgICAgICAgICAnbWJlc3NlbGkwIG1iZXNzZWxpMSBtZWFuYyBtZWRpYW4gbWVyZ2VieSBtZXJnZXZhciBtaW5jIG1pbmluZGMgbWludiBtaXNzIG1pc3NleCBtaXNzcnYgbW9tZW50IG1vbWVudGQgbW92aW5nYXZlICcgK1xuICAgICAgICAgICAgICAnbW92aW5nYXZlRXhwd2d0IG1vdmluZ2F2ZVdndCBuZXh0aW5kZXggbmV4dG4gbmV4dG5ldm4gbmV4dHdpbmQgbnRvcyBudWxsIG51bGwxIG51bUNvbWJpbmF0aW9ucyBvbHMgb2xzbXQgb2xzbXRDb250cm9sQ3JlYXRlICcgK1xuICAgICAgICAgICAgICAnb2xzcXIgb2xzcXIyIG9sc3FybXQgb25lcyBvcHRuIG9wdG5ldm4gb3J0aCBvdXR0eXAgcGFjZiBwYWNrZWRUb1NwIHBhY2tyIHBhcnNlIHBhdXNlIHBkZkNhdWNoeSBwZGZDaGkgcGRmRXhwIHBkZkdlblBhcmV0byAnICtcbiAgICAgICAgICAgICAgJ3BkZkh5cGVyR2VvIHBkZkxhcGxhY2UgcGRmTG9naXN0aWMgcGRmbiBwZGZQb2lzc29uIHBkZlJheWxlaWdoIHBkZldlaWJ1bGwgcGkgcGludiBwaW52bXQgcGxvdEFkZEFycm93IHBsb3RBZGRCYXIgcGxvdEFkZEJveCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RBZGRIaXN0IHBsb3RBZGRIaXN0RiBwbG90QWRkSGlzdFAgcGxvdEFkZFBvbGFyIHBsb3RBZGRTY2F0dGVyIHBsb3RBZGRTaGFwZSBwbG90QWRkVGV4dGJveCBwbG90QWRkVFMgcGxvdEFkZFhZIHBsb3RBcmVhICcgK1xuICAgICAgICAgICAgICAncGxvdEJhciBwbG90Qm94IHBsb3RDbGVhckxheW91dCBwbG90Q29udG91ciBwbG90Q3VzdG9tTGF5b3V0IHBsb3RHZXREZWZhdWx0cyBwbG90SGlzdCBwbG90SGlzdEYgcGxvdEhpc3RQIHBsb3RMYXlvdXQgJyArXG4gICAgICAgICAgICAgICdwbG90TG9nTG9nIHBsb3RMb2dYIHBsb3RMb2dZIHBsb3RPcGVuV2luZG93IHBsb3RQb2xhciBwbG90U2F2ZSBwbG90U2NhdHRlciBwbG90U2V0QXhlc1BlbiBwbG90U2V0QmFyIHBsb3RTZXRCYXJGaWxsICcgK1xuICAgICAgICAgICAgICAncGxvdFNldEJhclN0YWNrZWQgcGxvdFNldEJrZENvbG9yIHBsb3RTZXRGaWxsIHBsb3RTZXRHcmlkIHBsb3RTZXRMZWdlbmQgcGxvdFNldExpbmVDb2xvciBwbG90U2V0TGluZVN0eWxlIHBsb3RTZXRMaW5lU3ltYm9sICcgK1xuICAgICAgICAgICAgICAncGxvdFNldExpbmVUaGlja25lc3MgcGxvdFNldE5ld1dpbmRvdyBwbG90U2V0VGl0bGUgcGxvdFNldFdoaWNoWUF4aXMgcGxvdFNldFhBeGlzU2hvdyBwbG90U2V0WExhYmVsIHBsb3RTZXRYUmFuZ2UgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0WFRpY0ludGVydmFsIHBsb3RTZXRYVGljTGFiZWwgcGxvdFNldFlBeGlzU2hvdyBwbG90U2V0WUxhYmVsIHBsb3RTZXRZUmFuZ2UgcGxvdFNldFpBeGlzU2hvdyBwbG90U2V0WkxhYmVsICcgK1xuICAgICAgICAgICAgICAncGxvdFN1cmZhY2UgcGxvdFRTIHBsb3RYWSBwb2xhciBwb2x5Y2hhciBwb2x5ZXZhbCBwb2x5Z2FtbWEgcG9seWludCBwb2x5bWFrZSBwb2x5bWF0IHBvbHltcm9vdCBwb2x5bXVsdCBwb2x5cm9vdCAnICtcbiAgICAgICAgICAgICAgJ3BxZ3dpbiBwcmV2aW91c2luZGV4IHByaW5jb21wIHByaW50Zm0gcHJpbnRmbXQgcHJvZGMgcHNpIHB1dGFycmF5IHB1dGYgcHV0dmFscyBwdkNyZWF0ZSBwdkdldEluZGV4IHB2R2V0UGFyTmFtZXMgJyArXG4gICAgICAgICAgICAgICdwdkdldFBhclZlY3RvciBwdkxlbmd0aCBwdkxpc3QgcHZQYWNrIHB2UGFja2kgcHZQYWNrbSBwdlBhY2ttaSBwdlBhY2tzIHB2UGFja3NpIHB2UGFja3NtIHB2UGFja3NtaSBwdlB1dFBhclZlY3RvciAnICtcbiAgICAgICAgICAgICAgJ3B2VGVzdCBwdlVucGFjayBRTmV3dG9uIFFOZXd0b25tdCBRTmV3dG9ubXRDb250cm9sQ3JlYXRlIFFOZXd0b25tdE91dENyZWF0ZSBRTmV3dG9uU2V0IFFQcm9nIFFQcm9nbXQgUVByb2dtdEluQ3JlYXRlICcgK1xuICAgICAgICAgICAgICAncXFyIHFxcmUgcXFyZXAgcXIgcXJlIHFyZXAgcXJzb2wgcXJ0c29sIHF0eXIgcXR5cmUgcXR5cmVwIHF1YW50aWxlIHF1YW50aWxlZCBxeXIgcXlyZSBxeXJlcCBxeiByYW5rIHJhbmtpbmR4IHJlYWRyICcgK1xuICAgICAgICAgICAgICAncmVhbCByZWNsYXNzaWZ5IHJlY2xhc3NpZnlDdXRzIHJlY29kZSByZWNzZXJhciByZWNzZXJjcCByZWNzZXJyYyByZXJ1biByZXNjYWxlIHJlc2hhcGUgcmV0cyByZXYgcmZmdCByZmZ0aSByZmZ0aXAgcmZmdG4gJyArXG4gICAgICAgICAgICAgICdyZmZ0bnAgcmZmdHAgcm5kQmVybm91bGxpIHJuZEJldGEgcm5kQmlub21pYWwgcm5kQ2F1Y2h5IHJuZENoaVNxdWFyZSBybmRDb24gcm5kQ3JlYXRlU3RhdGUgcm5kRXhwIHJuZEdhbW1hIHJuZEdlbyBybmRHdW1iZWwgJyArXG4gICAgICAgICAgICAgICdybmRIeXBlckdlbyBybmRpIHJuZEtNYmV0YSBybmRLTWdhbSBybmRLTWkgcm5kS01uIHJuZEtNbmIgcm5kS01wIHJuZEtNdSBybmRLTXZtIHJuZExhcGxhY2Ugcm5kTENiZXRhIHJuZExDZ2FtIHJuZExDaSBybmRMQ24gJyArXG4gICAgICAgICAgICAgICdybmRMQ25iIHJuZExDcCBybmRMQ3Ugcm5kTEN2bSBybmRMb2dOb3JtIHJuZE1UdSBybmRNVm4gcm5kTVZ0IHJuZG4gcm5kbmIgcm5kTmVnQmlub21pYWwgcm5kcCBybmRQb2lzc29uIHJuZFJheWxlaWdoICcgK1xuICAgICAgICAgICAgICAncm5kU3RhdGVTa2lwIHJuZHUgcm5kdm0gcm5kV2VpYnVsbCBybmRXaXNoYXJ0IHJvdGF0ZXIgcm91bmQgcm93cyByb3dzZiBycmVmIHNhbXBsZURhdGEgc2F0b3N0ckMgc2F2ZWQgc2F2ZVN0cnVjdCBzYXZld2luZCAnICtcbiAgICAgICAgICAgICAgJ3NjYWxlIHNjYWxlM2Qgc2NhbGVyciBzY2FsaW5mbmFubWlzcyBzY2FsbWlzcyBzY2h0b2Mgc2NodXIgc2VhcmNoc291cmNlcGF0aCBzZWVrciBzZWxlY3Qgc2VsaWYgc2VxYSBzZXFtIHNldGRpZiBzZXRkaWZzYSAnICtcbiAgICAgICAgICAgICAgJ3NldHZhcnMgc2V0dndybW9kZSBzZXR3aW5kIHNoZWxsIHNoaWZ0ciBzaW4gc2luZ2xlaW5kZXggc2luaCBzbGVlcCBzb2xwZCBzb3J0YyBzb3J0Y2Mgc29ydGQgc29ydGhjIHNvcnRoY2Mgc29ydGluZCAnICtcbiAgICAgICAgICAgICAgJ3NvcnRpbmRjIHNvcnRtYyBzb3J0ciBzb3J0cmMgc3BCaWNvbmpHcmFkU29sIHNwQ2hvbCBzcENvbmpHcmFkU29sIHNwQ3JlYXRlIHNwRGVuc2VTdWJtYXQgc3BEaWFnUnZNYXQgc3BFaWd2IHNwRXllIHNwTERMICcgK1xuICAgICAgICAgICAgICAnc3BsaW5lIHNwTFUgc3BOdW1OWkUgc3BPbmVzIHNwcmVhZFNoZWV0UmVhZE0gc3ByZWFkU2hlZXRSZWFkU0Egc3ByZWFkU2hlZXRXcml0ZSBzcFNjYWxlIHNwU3VibWF0IHNwVG9EZW5zZSBzcFRyVERlbnNlICcgK1xuICAgICAgICAgICAgICAnc3BUU2NhbGFyIHNwWmVyb3Mgc3FwU29sdmUgc3FwU29sdmVNVCBzcXBTb2x2ZU1UQ29udHJvbENyZWF0ZSBzcXBTb2x2ZU1UbGFncmFuZ2VDcmVhdGUgc3FwU29sdmVNVG91dENyZWF0ZSBzcXBTb2x2ZVNldCAnICtcbiAgICAgICAgICAgICAgJ3NxcnQgc3RhdGVtZW50cyBzdGRjIHN0ZHNjIHN0b2N2IHN0b2Ygc3RyY29tYmluZSBzdHJpbmR4IHN0cmxlbiBzdHJwdXQgc3RycmluZHggc3Ryc2VjdCBzdHJzcGxpdCBzdHJzcGxpdFBhZCBzdHJ0b2R0ICcgK1xuICAgICAgICAgICAgICAnc3RydG9mIHN0cnRvZmNwbHggc3RydHJpbWwgc3RydHJpbXIgc3RydHJ1bmMgc3RydHJ1bmNsIHN0cnRydW5jcGFkIHN0cnRydW5jciBzdWJtYXQgc3Vic2NhdCBzdWJzdHV0ZSBzdWJ2ZWMgc3VtYyBzdW1yICcgK1xuICAgICAgICAgICAgICAnc3VyZmFjZSBzdmQgc3ZkMSBzdmQyIHN2ZGN1c3Ygc3ZkcyBzdmR1c3Ygc3lzc3RhdGUgdGFiIHRhbiB0YW5oIHRlbXBuYW1lICcgK1xuICAgICAgICAgICAgICAndGltZSB0aW1lZHQgdGltZXN0ciB0aW1ldXRjIHRpdGxlIHRrZjJlcHMgdGtmMnBzIHRvY2FydCB0b2RheWR0IHRvZXBsaXR6IHRva2VuIHRvcG9sYXIgdHJhcGNoayAnICtcbiAgICAgICAgICAgICAgJ3RyaWdhbW1hIHRyaW1yIHRydW5jIHR5cGUgdHlwZWN2IHR5cGVmIHVuaW9uIHVuaW9uc2EgdW5pcWluZHggdW5pcWluZHhzYSB1bmlxdWUgdW5pcXVlc2EgdXBtYXQgdXBtYXQxIHVwcGVyIHV0Y3RvZHQgJyArXG4gICAgICAgICAgICAgICd1dGN0b2R0diB1dHJpc29sIHZhbHMgdmFyQ292TVMgdmFyQ292WFMgdmFyZ2V0IHZhcmdldGwgdmFybWFsbCB2YXJtYXJlcyB2YXJwdXQgdmFycHV0bCB2YXJ0eXBlZiB2Y20gdmNtcyB2Y3ggdmN4cyAnICtcbiAgICAgICAgICAgICAgJ3ZlYyB2ZWNoIHZlY3IgdmVjdG9yIHZnZXQgdmlldyB2aWV3eHl6IHZsaXN0IHZuYW1lY3Ygdm9sdW1lIHZwdXQgdnJlYWQgdnR5cGVjdiB3YWl0IHdhaXRjIHdhbGtpbmRleCB3aGVyZSB3aW5kb3cgJyArXG4gICAgICAgICAgICAgICd3cml0ZXIgeGxhYmVsIHhsc0dldFNoZWV0Q291bnQgeGxzR2V0U2hlZXRTaXplIHhsc0dldFNoZWV0VHlwZXMgeGxzTWFrZVJhbmdlIHhsc1JlYWRNIHhsc1JlYWRTQSB4bHNXcml0ZSB4bHNXcml0ZU0gJyArXG4gICAgICAgICAgICAgICd4bHNXcml0ZVNBIHhwbmQgeHRpY3MgeHkgeHl6IHlsYWJlbCB5dGljcyB6ZXJvcyB6ZXRhIHpsYWJlbCB6dGljcyBjZGZFbXBpcmljYWwgZG90IGg1Y3JlYXRlIGg1b3BlbiBoNXJlYWQgaDVyZWFkQXR0cmlidXRlICcgK1xuICAgICAgICAgICAgICAnaDV3cml0ZSBoNXdyaXRlQXR0cmlidXRlIGxkbCBwbG90QWRkRXJyb3JCYXIgcGxvdEFkZFN1cmZhY2UgcGxvdENERkVtcGlyaWNhbCBwbG90U2V0Q29sb3JtYXAgcGxvdFNldENvbnRvdXJMYWJlbHMgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0TGVnZW5kRm9udCBwbG90U2V0VGV4dEludGVycHJldGVyIHBsb3RTZXRYVGljQ291bnQgcGxvdFNldFlUaWNDb3VudCBwbG90U2V0WkxldmVscyBwb3dlcm0gc3Ryam9pbiBzeWx2ZXN0ZXIgJyArXG4gICAgICAgICAgICAgICdzdHJ0cmltJyxcbiAgICBsaXRlcmFsOiAnREJfQUZURVJfTEFTVF9ST1cgREJfQUxMX1RBQkxFUyBEQl9CQVRDSF9PUEVSQVRJT05TIERCX0JFRk9SRV9GSVJTVF9ST1cgREJfQkxPQiBEQl9FVkVOVF9OT1RJRklDQVRJT05TICcgK1xuICAgICAgICAgICAgICdEQl9GSU5JU0hfUVVFUlkgREJfSElHSF9QUkVDSVNJT04gREJfTEFTVF9JTlNFUlRfSUQgREJfTE9XX1BSRUNJU0lPTl9ET1VCTEUgREJfTE9XX1BSRUNJU0lPTl9JTlQzMiAnICtcbiAgICAgICAgICAgICAnREJfTE9XX1BSRUNJU0lPTl9JTlQ2NCBEQl9MT1dfUFJFQ0lTSU9OX05VTUJFUlMgREJfTVVMVElQTEVfUkVTVUxUX1NFVFMgREJfTkFNRURfUExBQ0VIT0xERVJTICcgK1xuICAgICAgICAgICAgICdEQl9QT1NJVElPTkFMX1BMQUNFSE9MREVSUyBEQl9QUkVQQVJFRF9RVUVSSUVTIERCX1FVRVJZX1NJWkUgREJfU0lNUExFX0xPQ0tJTkcgREJfU1lTVEVNX1RBQkxFUyBEQl9UQUJMRVMgJyArXG4gICAgICAgICAgICAgJ0RCX1RSQU5TQUNUSU9OUyBEQl9VTklDT0RFIERCX1ZJRVdTIF9fU1RESU4gX19TVERPVVQgX19TVERFUlIgX19GSUxFX0RJUidcbiAgfTtcblxuXG4gIHZhciBBVF9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJ0AnLCAnQCcpO1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPVxuICB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2RlZmluZSBkZWZpbmVjc3wxMCB1bmRlZiBpZmRlZiBpZm5kZWYgaWZsaWdodCBpZmRsbGNhbGwgaWZtYWMgaWZvczJ3aW4gaWZ1bml4IGVsc2UgZW5kaWYgbGluZXNvbiBsaW5lc29mZiBzcmNmaWxlIHNyY2xpbmUnfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmNsdWRlJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ30sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSVUNUX1RZUEUgPVxuICB7XG4gICAgYmVnaW46IC9cXGJzdHJ1Y3RcXHMrLyxcbiAgICBlbmQ6IC9cXHMvLFxuICAgIGtleXdvcmRzOiBcInN0cnVjdFwiLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJ0eXBlXCIsXG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICAvLyBvbmx5IGZvciBkZWZpbml0aW9uc1xuICB2YXIgUEFSU0VfUEFSQU1TID0gW1xuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7IC8vIGRvdHNcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgICBiZWdpbjogL1xcLlxcLlxcLi8sXG4gICAgICAgIH0sXG4gICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgICBTVFJVQ1RfVFlQRSxcbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgdmFyIEZVTkNUSU9OX0RFRiA9XG4gIHtcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcblxuICB2YXIgREVGSU5JVElPTiA9IGZ1bmN0aW9uIChiZWdpbktleXdvcmRzLCBlbmQsIGluaGVyaXRzKSB7XG4gICAgdmFyIG1vZGUgPSBobGpzLmluaGVyaXQoXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBiZWdpbktleXdvcmRzOiBiZWdpbktleXdvcmRzLFxuICAgICAgICBlbmQ6IGVuZCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtdLmNvbmNhdChQQVJTRV9QQVJBTVMpLFxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goRlVOQ1RJT05fREVGKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5DX05VTUJFUl9NT0RFKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSk7XG4gICAgbW9kZS5jb250YWlucy5wdXNoKEFUX0NPTU1FTlRfTU9ERSk7XG4gICAgcmV0dXJuIG1vZGU7XG4gIH07XG5cbiAgdmFyIEJVSUxUX0lOX1JFRiA9XG4gIHsgLy8gdGhlc2UgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbHNcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYignICsgS0VZV09SRFMuYnVpbHRfaW4uc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgfTtcblxuICB2YXIgU1RSSU5HX1JFRiA9XG4gIHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcblxuICB2YXIgRlVOQ1RJT05fUkVGID1cbiAge1xuICAgIC8vY2xhc3NOYW1lOiBcImZuX3JlZlwiLFxuICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogS0VZV09SRFMua2V5d29yZCxcbiAgICAgIH0sXG4gICAgICBCVUlMVF9JTl9SRUYsXG4gICAgICB7IC8vIGFtYmlndW91c2x5IG5hbWVkIGZ1bmN0aW9uIGNhbGxzIGdldCBhIHJlbGV2YW5jZSBvZiAwXG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9SRUZfUEFSQU1TID1cbiAge1xuICAgIC8vY2xhc3NOYW1lOiBcImZuX3JlZl9wYXJhbXNcIixcbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IHsgYnVpbHRfaW46IEtFWVdPUkRTLmJ1aWx0X2luLCBsaXRlcmFsOiBLRVlXT1JEUy5saXRlcmFsIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICBCVUlMVF9JTl9SRUYsXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJJTkdfUkVGLFxuICAgICAgJ3NlbGYnLFxuICAgIF0sXG4gIH07XG5cbiAgRlVOQ1RJT05fUkVGLmNvbnRhaW5zLnB1c2goRlVOQ1RJT05fUkVGX1BBUkFNUyk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2dzcyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIGxhbmd1YWdlIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyhcXHtbJSNdfFslI11cXH18IDwtICkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQVRfQ09NTUVOVF9NT0RFLFxuICAgICAgU1RSSU5HX1JFRixcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxiZXh0ZXJuYWwgKG1hdHJpeHxzdHJpbmd8YXJyYXl8c3BhcnNlIG1hdHJpeHxzdHJ1Y3R8cHJvY3xrZXl3b3JkfGZuKS8sXG4gICAgICB9LFxuICAgICAgREVGSU5JVElPTigncHJvYyBrZXl3b3JkJywgJzsnKSxcbiAgICAgIERFRklOSVRJT04oJ2ZuJywgJz0nKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZvciB0aHJlYWRmb3InLFxuICAgICAgICBlbmQ6IC87LyxcbiAgICAgICAgLy9lbmQ6IC9cXCgvLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBBVF9DT01NRU5UX01PREUsXG4gICAgICAgICAgRlVOQ1RJT05fUkVGX1BBUkFNUyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7IC8vIGN1c3RvbSBtZXRob2QgZ3VhcmRcbiAgICAgICAgLy8gZXhjbHVkZXMgbWV0aG9kIG5hbWVzIGZyb20ga2V5d29yZCBwcm9jZXNzaW5nXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFwuJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSwgfSxcbiAgICAgICAgICB7IGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqPScsIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIH0sXG4gICAgICBGVU5DVElPTl9SRUYsXG4gICAgICBTVFJVQ1RfVFlQRSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBHQ09ERV9JREVOVF9SRSA9ICdbQS1aX11bQS1aMC05Xy5dKic7XG4gICAgdmFyIEdDT0RFX0NMT1NFX1JFID0gJ1xcXFwlJztcbiAgICB2YXIgR0NPREVfS0VZV09SRFMgPVxuICAgICAgJ0lGIERPIFdISUxFIEVORFdISUxFIENBTEwgRU5ESUYgU1VCIEVORFNVQiBHT1RPIFJFUEVBVCBFTkRSRVBFQVQgJyArXG4gICAgICAnRVEgTFQgR1QgTkUgR0UgTEUgT1IgWE9SJztcbiAgICB2YXIgR0NPREVfU1RBUlQgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyhbT10pKFswLTldKyknXG4gICAgfTtcbiAgICB2YXIgR0NPREVfQ09ERSA9IFtcbiAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNPTU1FTlQoL1xcKC8sIC9cXCkvKSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge2JlZ2luOiAnKFstK10/KFswLTldKlxcXFwuP1swLTldK1xcXFwuPykpfCcgKyBobGpzLkNfTlVNQkVSX1JFfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKFtHXSkoWzAtOV0rXFxcXC4/WzAtOV0/KSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogJyhbTV0pKFswLTldK1xcXFwuP1swLTldPyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVkN8VlN8IyknLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFxkKyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVlpPRlh8VlpPRll8VlpPRlopJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgICAgICBiZWdpbjogJyhBVEFOfEFCU3xBQ09TfEFTSU58U0lOfENPU3xFWFB8RklYfEZVUHxST1VORHxMTnxUQU4pKFxcXFxbKScsXG4gICAgICAgICAgICBlbmQ6ICcoWy0rXT8oWzAtOV0qXFxcXC4/WzAtOV0rXFxcXC4/KSkoXFxcXF0pJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnTicsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcVydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxpYXNlczogWyduYyddLFxuICAgICAgICAvLyBTb21lIGltcGxlbWVudGF0aW9ucyAoQ05DIGNvbnRyb2xzKSBvZiBHLWNvZGUgYXJlIGludGVyb3BlcmFibGUgd2l0aCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIHNlYW1sZXNzbHkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIG1vc3QgcHJlZmVyIGFsbCB1cHBlcmNhc2UgYW5kIHVwcGVyY2FzZSBpcyBjdXN0b21hcnkuXG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGxleGVtZXM6IEdDT0RFX0lERU5UX1JFLFxuICAgICAgICBrZXl3b3JkczogR0NPREVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgICAgICAgICAgYmVnaW46IEdDT0RFX0NMT1NFX1JFXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgR0NPREVfU1RBUlRcbiAgICAgICAgXS5jb25jYXQoR0NPREVfQ09ERSlcbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydmZWF0dXJlJ10sXG4gICAga2V5d29yZHM6ICdGZWF0dXJlIEJhY2tncm91bmQgQWJpbGl0eSBCdXNpbmVzc1xcIE5lZWQgU2NlbmFyaW8gU2NlbmFyaW9zIFNjZW5hcmlvXFwgT3V0bGluZSBTY2VuYXJpb1xcIFRlbXBsYXRlIEV4YW1wbGVzIEdpdmVuIEFuZCBUaGVuIEJ1dCBXaGVuJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcXFwqJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW15AXFxcXHNdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLCBlbmQ6ICdcXFxcfFxcXFx3KiQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1tefF0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+J1xuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBTdGF0ZW1lbnRzXG4gICAgICAgICdicmVhayBjb250aW51ZSBkaXNjYXJkIGRvIGVsc2UgZm9yIGlmIHJldHVybiB3aGlsZSBzd2l0Y2ggY2FzZSBkZWZhdWx0ICcgK1xuICAgICAgICAvLyBRdWFsaWZpZXJzXG4gICAgICAgICdhdHRyaWJ1dGUgYmluZGluZyBidWZmZXIgY2N3IGNlbnRyb2lkIGNlbnRyb2lkIHZhcnlpbmcgY29oZXJlbnQgY29sdW1uX21ham9yIGNvbnN0IGN3ICcgK1xuICAgICAgICAnZGVwdGhfYW55IGRlcHRoX2dyZWF0ZXIgZGVwdGhfbGVzcyBkZXB0aF91bmNoYW5nZWQgZWFybHlfZnJhZ21lbnRfdGVzdHMgZXF1YWxfc3BhY2luZyAnICtcbiAgICAgICAgJ2ZsYXQgZnJhY3Rpb25hbF9ldmVuX3NwYWNpbmcgZnJhY3Rpb25hbF9vZGRfc3BhY2luZyBoaWdocCBpbiBpbmRleCBpbm91dCBpbnZhcmlhbnQgJyArXG4gICAgICAgICdpbnZvY2F0aW9ucyBpc29saW5lcyBsYXlvdXQgbGluZV9zdHJpcCBsaW5lcyBsaW5lc19hZGphY2VuY3kgbG9jYWxfc2l6ZV94IGxvY2FsX3NpemVfeSAnICtcbiAgICAgICAgJ2xvY2FsX3NpemVfeiBsb2NhdGlvbiBsb3dwIG1heF92ZXJ0aWNlcyBtZWRpdW1wIG5vcGVyc3BlY3RpdmUgb2Zmc2V0IG9yaWdpbl91cHBlcl9sZWZ0ICcgK1xuICAgICAgICAnb3V0IHBhY2tlZCBwYXRjaCBwaXhlbF9jZW50ZXJfaW50ZWdlciBwb2ludF9tb2RlIHBvaW50cyBwcmVjaXNlIHByZWNpc2lvbiBxdWFkcyByMTFmX2cxMWZfYjEwZiAnK1xuICAgICAgICAncjE2IHIxNl9zbm9ybSByMTZmIHIxNmkgcjE2dWkgcjMyZiByMzJpIHIzMnVpIHI4IHI4X3Nub3JtIHI4aSByOHVpIHJlYWRvbmx5IHJlc3RyaWN0ICcgK1xuICAgICAgICAncmcxNiByZzE2X3Nub3JtIHJnMTZmIHJnMTZpIHJnMTZ1aSByZzMyZiByZzMyaSByZzMydWkgcmc4IHJnOF9zbm9ybSByZzhpIHJnOHVpIHJnYjEwX2EyICcgK1xuICAgICAgICAncmdiMTBfYTJ1aSByZ2JhMTYgcmdiYTE2X3Nub3JtIHJnYmExNmYgcmdiYTE2aSByZ2JhMTZ1aSByZ2JhMzJmIHJnYmEzMmkgcmdiYTMydWkgcmdiYTggJyArXG4gICAgICAgICdyZ2JhOF9zbm9ybSByZ2JhOGkgcmdiYTh1aSByb3dfbWFqb3Igc2FtcGxlIHNoYXJlZCBzbW9vdGggc3RkMTQwIHN0ZDQzMCBzdHJlYW0gdHJpYW5nbGVfc3RyaXAgJyArXG4gICAgICAgICd0cmlhbmdsZXMgdHJpYW5nbGVzX2FkamFjZW5jeSB1bmlmb3JtIHZhcnlpbmcgdmVydGljZXMgdm9sYXRpbGUgd3JpdGVvbmx5JyxcbiAgICAgIHR5cGU6XG4gICAgICAgICdhdG9taWNfdWludCBib29sIGJ2ZWMyIGJ2ZWMzIGJ2ZWM0IGRtYXQyIGRtYXQyeDIgZG1hdDJ4MyBkbWF0Mng0IGRtYXQzIGRtYXQzeDIgZG1hdDN4MyAnICtcbiAgICAgICAgJ2RtYXQzeDQgZG1hdDQgZG1hdDR4MiBkbWF0NHgzIGRtYXQ0eDQgZG91YmxlIGR2ZWMyIGR2ZWMzIGR2ZWM0IGZsb2F0IGlpbWFnZTFEIGlpbWFnZTFEQXJyYXkgJyArXG4gICAgICAgICdpaW1hZ2UyRCBpaW1hZ2UyREFycmF5IGlpbWFnZTJETVMgaWltYWdlMkRNU0FycmF5IGlpbWFnZTJEUmVjdCBpaW1hZ2UzRCBpaW1hZ2VCdWZmZXInICtcbiAgICAgICAgJ2lpbWFnZUN1YmUgaWltYWdlQ3ViZUFycmF5IGltYWdlMUQgaW1hZ2UxREFycmF5IGltYWdlMkQgaW1hZ2UyREFycmF5IGltYWdlMkRNUyBpbWFnZTJETVNBcnJheSAnICtcbiAgICAgICAgJ2ltYWdlMkRSZWN0IGltYWdlM0QgaW1hZ2VCdWZmZXIgaW1hZ2VDdWJlIGltYWdlQ3ViZUFycmF5IGludCBpc2FtcGxlcjFEIGlzYW1wbGVyMURBcnJheSAnICtcbiAgICAgICAgJ2lzYW1wbGVyMkQgaXNhbXBsZXIyREFycmF5IGlzYW1wbGVyMkRNUyBpc2FtcGxlcjJETVNBcnJheSBpc2FtcGxlcjJEUmVjdCBpc2FtcGxlcjNEICcgK1xuICAgICAgICAnaXNhbXBsZXJCdWZmZXIgaXNhbXBsZXJDdWJlIGlzYW1wbGVyQ3ViZUFycmF5IGl2ZWMyIGl2ZWMzIGl2ZWM0IG1hdDIgbWF0MngyIG1hdDJ4MyAnICtcbiAgICAgICAgJ21hdDJ4NCBtYXQzIG1hdDN4MiBtYXQzeDMgbWF0M3g0IG1hdDQgbWF0NHgyIG1hdDR4MyBtYXQ0eDQgc2FtcGxlcjFEIHNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAnc2FtcGxlcjFEQXJyYXlTaGFkb3cgc2FtcGxlcjFEU2hhZG93IHNhbXBsZXIyRCBzYW1wbGVyMkRBcnJheSBzYW1wbGVyMkRBcnJheVNoYWRvdyAnICtcbiAgICAgICAgJ3NhbXBsZXIyRE1TIHNhbXBsZXIyRE1TQXJyYXkgc2FtcGxlcjJEUmVjdCBzYW1wbGVyMkRSZWN0U2hhZG93IHNhbXBsZXIyRFNoYWRvdyBzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHNhbXBsZXJDdWJlIHNhbXBsZXJDdWJlQXJyYXkgc2FtcGxlckN1YmVBcnJheVNoYWRvdyBzYW1wbGVyQ3ViZVNoYWRvdyAnICtcbiAgICAgICAgJ2ltYWdlMUQgdWltYWdlMURBcnJheSB1aW1hZ2UyRCB1aW1hZ2UyREFycmF5IHVpbWFnZTJETVMgdWltYWdlMkRNU0FycmF5IHVpbWFnZTJEUmVjdCAnICtcbiAgICAgICAgJ3VpbWFnZTNEIHVpbWFnZUJ1ZmZlciB1aW1hZ2VDdWJlIHVpbWFnZUN1YmVBcnJheSB1aW50IHVzYW1wbGVyMUQgdXNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAndXNhbXBsZXIyRCB1c2FtcGxlcjJEQXJyYXkgdXNhbXBsZXIyRE1TIHVzYW1wbGVyMkRNU0FycmF5IHVzYW1wbGVyMkRSZWN0IHVzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHVzYW1wbGVyQ3ViZSB1c2FtcGxlckN1YmVBcnJheSB1dmVjMiB1dmVjMyB1dmVjNCB2ZWMyIHZlYzMgdmVjNCB2b2lkJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBDb25zdGFudHNcbiAgICAgICAgJ2dsX01heEF0b21pY0NvdW50ZXJCaW5kaW5ncyBnbF9NYXhBdG9taWNDb3VudGVyQnVmZmVyU2l6ZSBnbF9NYXhDbGlwRGlzdGFuY2VzIGdsX01heENsaXBQbGFuZXMgJyArXG4gICAgICAgICdnbF9NYXhDb21iaW5lZEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heENvbWJpbmVkQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tYmluZWRJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4Q29tYmluZWRJbWFnZVVuaXRzQW5kRnJhZ21lbnRPdXRwdXRzIGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJCdWZmZXJzICcgK1xuICAgICAgICAnZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJzIGdsX01heENvbXB1dGVJbWFnZVVuaWZvcm1zIGdsX01heENvbXB1dGVUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heENvbXB1dGVVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhDb21wdXRlV29ya0dyb3VwQ291bnQgZ2xfTWF4Q29tcHV0ZVdvcmtHcm91cFNpemUgJyArXG4gICAgICAgICdnbF9NYXhEcmF3QnVmZmVycyBnbF9NYXhGcmFnbWVudEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heEZyYWdtZW50QXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudEltYWdlVW5pZm9ybXMgZ2xfTWF4RnJhZ21lbnRJbnB1dENvbXBvbmVudHMgZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgZ2xfTWF4R2VvbWV0cnlBdG9taWNDb3VudGVyQnVmZmVycyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5QXRvbWljQ291bnRlcnMgZ2xfTWF4R2VvbWV0cnlJbWFnZVVuaWZvcm1zIGdsX01heEdlb21ldHJ5SW5wdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4R2VvbWV0cnlPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5T3V0cHV0VmVydGljZXMgZ2xfTWF4R2VvbWV0cnlUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5VG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlWYXJ5aW5nQ29tcG9uZW50cyAnICtcbiAgICAgICAgJ2dsX01heEltYWdlU2FtcGxlcyBnbF9NYXhJbWFnZVVuaXRzIGdsX01heExpZ2h0cyBnbF9NYXhQYXRjaFZlcnRpY2VzIGdsX01heFByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VGVzc0NvbnRyb2xBdG9taWNDb3VudGVycyBnbF9NYXhUZXNzQ29udHJvbEltYWdlVW5pZm9ybXMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzQ29udHJvbElucHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0NvbnRyb2xUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sVG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heFRlc3NDb250cm9sVW5pZm9ybUNvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heFRlc3NFdmFsdWF0aW9uQXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkltYWdlVW5pZm9ybXMgZ2xfTWF4VGVzc0V2YWx1YXRpb25JbnB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0V2YWx1YXRpb25PdXRwdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0V2YWx1YXRpb25UZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhUZXNzRXZhbHVhdGlvblVuaWZvcm1Db21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0dlbkxldmVsIGdsX01heFRlc3NQYXRjaENvbXBvbmVudHMgZ2xfTWF4VGV4dHVyZUNvb3JkcyBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRleHR1cmVVbml0cyBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cyBnbF9NYXhWYXJ5aW5nRmxvYXRzIGdsX01heFZhcnlpbmdWZWN0b3JzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlcnMgZ2xfTWF4VmVydGV4QXR0cmlicyBnbF9NYXhWZXJ0ZXhJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4T3V0cHV0Q29tcG9uZW50cyBnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgZ2xfTWF4Vmlld3BvcnRzIGdsX01pblByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgICdnbF9CYWNrQ29sb3IgZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IGdsX0JhY2tMaWdodFByb2R1Y3QgZ2xfQmFja01hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfQmFja1NlY29uZGFyeUNvbG9yIGdsX0NsaXBEaXN0YW5jZSBnbF9DbGlwUGxhbmUgZ2xfQ2xpcFZlcnRleCBnbF9Db2xvciAnICtcbiAgICAgICAgJ2dsX0RlcHRoUmFuZ2UgZ2xfRXllUGxhbmVRIGdsX0V5ZVBsYW5lUiBnbF9FeWVQbGFuZVMgZ2xfRXllUGxhbmVUIGdsX0ZvZyBnbF9Gb2dDb29yZCAnICtcbiAgICAgICAgJ2dsX0ZvZ0ZyYWdDb29yZCBnbF9GcmFnQ29sb3IgZ2xfRnJhZ0Nvb3JkIGdsX0ZyYWdEYXRhIGdsX0ZyYWdEZXB0aCBnbF9Gcm9udENvbG9yICcgK1xuICAgICAgICAnZ2xfRnJvbnRGYWNpbmcgZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCBnbF9Gcm9udExpZ2h0UHJvZHVjdCBnbF9Gcm9udE1hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciBnbF9HbG9iYWxJbnZvY2F0aW9uSUQgZ2xfSW5zdGFuY2VJRCBnbF9JbnZvY2F0aW9uSUQgZ2xfTGF5ZXIgZ2xfTGlnaHRNb2RlbCAnICtcbiAgICAgICAgJ2dsX0xpZ2h0U291cmNlIGdsX0xvY2FsSW52b2NhdGlvbklEIGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IGdsX01vZGVsVmlld01hdHJpeCAnICtcbiAgICAgICAgJ2dsX01vZGVsVmlld01hdHJpeEludmVyc2UgZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UgJyArXG4gICAgICAgICdnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9NdWx0aVRleENvb3JkMCBnbF9NdWx0aVRleENvb3JkMSBnbF9NdWx0aVRleENvb3JkMiAnICtcbiAgICAgICAgJ2dsX011bHRpVGV4Q29vcmQzIGdsX011bHRpVGV4Q29vcmQ0IGdsX011bHRpVGV4Q29vcmQ1IGdsX011bHRpVGV4Q29vcmQ2IGdsX011bHRpVGV4Q29vcmQ3ICcgK1xuICAgICAgICAnZ2xfTm9ybWFsIGdsX05vcm1hbE1hdHJpeCBnbF9Ob3JtYWxTY2FsZSBnbF9OdW1TYW1wbGVzIGdsX051bVdvcmtHcm91cHMgZ2xfT2JqZWN0UGxhbmVRICcgK1xuICAgICAgICAnZ2xfT2JqZWN0UGxhbmVSIGdsX09iamVjdFBsYW5lUyBnbF9PYmplY3RQbGFuZVQgZ2xfUGF0Y2hWZXJ0aWNlc0luIGdsX1BvaW50IGdsX1BvaW50Q29vcmQgJyArXG4gICAgICAgICdnbF9Qb2ludFNpemUgZ2xfUG9zaXRpb24gZ2xfUHJpbWl0aXZlSUQgZ2xfUHJpbWl0aXZlSURJbiBnbF9Qcm9qZWN0aW9uTWF0cml4IGdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlICcgK1xuICAgICAgICAnZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UgZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9TYW1wbGVJRCBnbF9TYW1wbGVNYXNrICcgK1xuICAgICAgICAnZ2xfU2FtcGxlTWFza0luIGdsX1NhbXBsZVBvc2l0aW9uIGdsX1NlY29uZGFyeUNvbG9yIGdsX1Rlc3NDb29yZCBnbF9UZXNzTGV2ZWxJbm5lciBnbF9UZXNzTGV2ZWxPdXRlciAnICtcbiAgICAgICAgJ2dsX1RleENvb3JkIGdsX1RleHR1cmVFbnZDb2xvciBnbF9UZXh0dXJlTWF0cml4IGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZSBnbF9WZXJ0ZXggZ2xfVmVydGV4SUQgZ2xfVmlld3BvcnRJbmRleCBnbF9Xb3JrR3JvdXBJRCBnbF9Xb3JrR3JvdXBTaXplIGdsX2luIGdsX291dCAnICtcbiAgICAgICAgLy8gRnVuY3Rpb25zXG4gICAgICAgICdFbWl0U3RyZWFtVmVydGV4IEVtaXRWZXJ0ZXggRW5kUHJpbWl0aXZlIEVuZFN0cmVhbVByaW1pdGl2ZSBhYnMgYWNvcyBhY29zaCBhbGwgYW55IGFzaW4gJyArXG4gICAgICAgICdhc2luaCBhdGFuIGF0YW5oIGF0b21pY0FkZCBhdG9taWNBbmQgYXRvbWljQ29tcFN3YXAgYXRvbWljQ291bnRlciBhdG9taWNDb3VudGVyRGVjcmVtZW50ICcgK1xuICAgICAgICAnYXRvbWljQ291bnRlckluY3JlbWVudCBhdG9taWNFeGNoYW5nZSBhdG9taWNNYXggYXRvbWljTWluIGF0b21pY09yIGF0b21pY1hvciBiYXJyaWVyICcgK1xuICAgICAgICAnYml0Q291bnQgYml0ZmllbGRFeHRyYWN0IGJpdGZpZWxkSW5zZXJ0IGJpdGZpZWxkUmV2ZXJzZSBjZWlsIGNsYW1wIGNvcyBjb3NoIGNyb3NzICcgK1xuICAgICAgICAnZEZkeCBkRmR5IGRlZ3JlZXMgZGV0ZXJtaW5hbnQgZGlzdGFuY2UgZG90IGVxdWFsIGV4cCBleHAyIGZhY2Vmb3J3YXJkIGZpbmRMU0IgZmluZE1TQiAnICtcbiAgICAgICAgJ2Zsb2F0Qml0c1RvSW50IGZsb2F0Qml0c1RvVWludCBmbG9vciBmbWEgZnJhY3QgZnJleHAgZnRyYW5zZm9ybSBmd2lkdGggZ3JlYXRlclRoYW4gJyArXG4gICAgICAgICdncmVhdGVyVGhhbkVxdWFsIGdyb3VwTWVtb3J5QmFycmllciBpbWFnZUF0b21pY0FkZCBpbWFnZUF0b21pY0FuZCBpbWFnZUF0b21pY0NvbXBTd2FwICcgK1xuICAgICAgICAnaW1hZ2VBdG9taWNFeGNoYW5nZSBpbWFnZUF0b21pY01heCBpbWFnZUF0b21pY01pbiBpbWFnZUF0b21pY09yIGltYWdlQXRvbWljWG9yIGltYWdlTG9hZCAnICtcbiAgICAgICAgJ2ltYWdlU2l6ZSBpbWFnZVN0b3JlIGltdWxFeHRlbmRlZCBpbnRCaXRzVG9GbG9hdCBpbnRlcnBvbGF0ZUF0Q2VudHJvaWQgaW50ZXJwb2xhdGVBdE9mZnNldCAnICtcbiAgICAgICAgJ2ludGVycG9sYXRlQXRTYW1wbGUgaW52ZXJzZSBpbnZlcnNlc3FydCBpc2luZiBpc25hbiBsZGV4cCBsZW5ndGggbGVzc1RoYW4gbGVzc1RoYW5FcXVhbCBsb2cgJyArXG4gICAgICAgICdsb2cyIG1hdHJpeENvbXBNdWx0IG1heCBtZW1vcnlCYXJyaWVyIG1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyIG1lbW9yeUJhcnJpZXJCdWZmZXIgJyArXG4gICAgICAgICdtZW1vcnlCYXJyaWVySW1hZ2UgbWVtb3J5QmFycmllclNoYXJlZCBtaW4gbWl4IG1vZCBtb2RmIG5vaXNlMSBub2lzZTIgbm9pc2UzIG5vaXNlNCAnICtcbiAgICAgICAgJ25vcm1hbGl6ZSBub3Qgbm90RXF1YWwgb3V0ZXJQcm9kdWN0IHBhY2tEb3VibGUyeDMyIHBhY2tIYWxmMngxNiBwYWNrU25vcm0yeDE2IHBhY2tTbm9ybTR4OCAnICtcbiAgICAgICAgJ3BhY2tVbm9ybTJ4MTYgcGFja1Vub3JtNHg4IHBvdyByYWRpYW5zIHJlZmxlY3QgcmVmcmFjdCByb3VuZCByb3VuZEV2ZW4gc2hhZG93MUQgc2hhZG93MURMb2QgJyArXG4gICAgICAgICdzaGFkb3cxRFByb2ogc2hhZG93MURQcm9qTG9kIHNoYWRvdzJEIHNoYWRvdzJETG9kIHNoYWRvdzJEUHJvaiBzaGFkb3cyRFByb2pMb2Qgc2lnbiBzaW4gc2luaCAnICtcbiAgICAgICAgJ3Ntb290aHN0ZXAgc3FydCBzdGVwIHRhbiB0YW5oIHRleGVsRmV0Y2ggdGV4ZWxGZXRjaE9mZnNldCB0ZXh0dXJlIHRleHR1cmUxRCB0ZXh0dXJlMURMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlMURQcm9qIHRleHR1cmUxRFByb2pMb2QgdGV4dHVyZTJEIHRleHR1cmUyRExvZCB0ZXh0dXJlMkRQcm9qIHRleHR1cmUyRFByb2pMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlM0QgdGV4dHVyZTNETG9kIHRleHR1cmUzRFByb2ogdGV4dHVyZTNEUHJvakxvZCB0ZXh0dXJlQ3ViZSB0ZXh0dXJlQ3ViZUxvZCAnICtcbiAgICAgICAgJ3RleHR1cmVHYXRoZXIgdGV4dHVyZUdhdGhlck9mZnNldCB0ZXh0dXJlR2F0aGVyT2Zmc2V0cyB0ZXh0dXJlR3JhZCB0ZXh0dXJlR3JhZE9mZnNldCAnICtcbiAgICAgICAgJ3RleHR1cmVMb2QgdGV4dHVyZUxvZE9mZnNldCB0ZXh0dXJlT2Zmc2V0IHRleHR1cmVQcm9qIHRleHR1cmVQcm9qR3JhZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQgJyArXG4gICAgICAgICd0ZXh0dXJlUHJvakxvZCB0ZXh0dXJlUHJvakxvZE9mZnNldCB0ZXh0dXJlUHJvak9mZnNldCB0ZXh0dXJlUXVlcnlMZXZlbHMgdGV4dHVyZVF1ZXJ5TG9kICcgK1xuICAgICAgICAndGV4dHVyZVNpemUgdHJhbnNwb3NlIHRydW5jIHVhZGRDYXJyeSB1aW50Qml0c1RvRmxvYXQgdW11bEV4dGVuZGVkIHVucGFja0RvdWJsZTJ4MzIgJyArXG4gICAgICAgICd1bnBhY2tIYWxmMngxNiB1bnBhY2tTbm9ybTJ4MTYgdW5wYWNrU25vcm00eDggdW5wYWNrVW5vcm0yeDE2IHVucGFja1Vub3JtNHg4IHVzdWJCb3Jyb3cnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgR01MX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdiZWdpbiBlbmQgaWYgdGhlbiBlbHNlIHdoaWxlIGRvIGZvciBicmVhayBjb250aW51ZSB3aXRoIHVudGlsICcgK1xuICAgICAgJ3JlcGVhdCBleGl0IGFuZCBvciB4b3Igbm90IHJldHVybiBtb2QgZGl2IHN3aXRjaCBjYXNlIGRlZmF1bHQgdmFyICcgK1xuICAgICAgJ2dsb2JhbHZhciBlbnVtICNtYWNybyAjcmVnaW9uICNlbmRyZWdpb24nLFxuICAgIGJ1aWx0X2luOiAnaXNfcmVhbCBpc19zdHJpbmcgaXNfYXJyYXkgaXNfdW5kZWZpbmVkIGlzX2ludDMyIGlzX2ludDY0ICcgK1xuICAgICAgJ2lzX3B0ciBpc192ZWMzIGlzX3ZlYzQgaXNfbWF0cml4IGlzX2Jvb2wgdHlwZW9mICcgK1xuICAgICAgJ3ZhcmlhYmxlX2dsb2JhbF9leGlzdHMgdmFyaWFibGVfZ2xvYmFsX2dldCB2YXJpYWJsZV9nbG9iYWxfc2V0ICcgK1xuICAgICAgJ3ZhcmlhYmxlX2luc3RhbmNlX2V4aXN0cyB2YXJpYWJsZV9pbnN0YW5jZV9nZXQgdmFyaWFibGVfaW5zdGFuY2Vfc2V0ICcgK1xuICAgICAgJ3ZhcmlhYmxlX2luc3RhbmNlX2dldF9uYW1lcyBhcnJheV9sZW5ndGhfMWQgYXJyYXlfbGVuZ3RoXzJkICcgK1xuICAgICAgJ2FycmF5X2hlaWdodF8yZCBhcnJheV9lcXVhbHMgYXJyYXlfY3JlYXRlIGFycmF5X2NvcHkgcmFuZG9tICcgK1xuICAgICAgJ3JhbmRvbV9yYW5nZSBpcmFuZG9tIGlyYW5kb21fcmFuZ2UgcmFuZG9tX3NldF9zZWVkIHJhbmRvbV9nZXRfc2VlZCAnICtcbiAgICAgICdyYW5kb21pemUgcmFuZG9taXNlIGNob29zZSBhYnMgcm91bmQgZmxvb3IgY2VpbCBzaWduIGZyYWMgc3FydCBzcXIgJyArXG4gICAgICAnZXhwIGxuIGxvZzIgbG9nMTAgc2luIGNvcyB0YW4gYXJjc2luIGFyY2NvcyBhcmN0YW4gYXJjdGFuMiBkc2luIGRjb3MgJyArXG4gICAgICAnZHRhbiBkYXJjc2luIGRhcmNjb3MgZGFyY3RhbiBkYXJjdGFuMiBkZWd0b3JhZCByYWR0b2RlZyBwb3dlciBsb2duICcgK1xuICAgICAgJ21pbiBtYXggbWVhbiBtZWRpYW4gY2xhbXAgbGVycCBkb3RfcHJvZHVjdCBkb3RfcHJvZHVjdF8zZCAnICtcbiAgICAgICdkb3RfcHJvZHVjdF9ub3JtYWxpc2VkIGRvdF9wcm9kdWN0XzNkX25vcm1hbGlzZWQgJyArXG4gICAgICAnZG90X3Byb2R1Y3Rfbm9ybWFsaXplZCBkb3RfcHJvZHVjdF8zZF9ub3JtYWxpemVkIG1hdGhfc2V0X2Vwc2lsb24gJyArXG4gICAgICAnbWF0aF9nZXRfZXBzaWxvbiBhbmdsZV9kaWZmZXJlbmNlIHBvaW50X2Rpc3RhbmNlXzNkIHBvaW50X2Rpc3RhbmNlICcgK1xuICAgICAgJ3BvaW50X2RpcmVjdGlvbiBsZW5ndGhkaXJfeCBsZW5ndGhkaXJfeSByZWFsIHN0cmluZyBpbnQ2NCBwdHIgJyArXG4gICAgICAnc3RyaW5nX2Zvcm1hdCBjaHIgYW5zaV9jaGFyIG9yZCBzdHJpbmdfbGVuZ3RoIHN0cmluZ19ieXRlX2xlbmd0aCAnICtcbiAgICAgICdzdHJpbmdfcG9zIHN0cmluZ19jb3B5IHN0cmluZ19jaGFyX2F0IHN0cmluZ19vcmRfYXQgc3RyaW5nX2J5dGVfYXQgJyArXG4gICAgICAnc3RyaW5nX3NldF9ieXRlX2F0IHN0cmluZ19kZWxldGUgc3RyaW5nX2luc2VydCBzdHJpbmdfbG93ZXIgJyArXG4gICAgICAnc3RyaW5nX3VwcGVyIHN0cmluZ19yZXBlYXQgc3RyaW5nX2xldHRlcnMgc3RyaW5nX2RpZ2l0cyAnICtcbiAgICAgICdzdHJpbmdfbGV0dGVyc2RpZ2l0cyBzdHJpbmdfcmVwbGFjZSBzdHJpbmdfcmVwbGFjZV9hbGwgc3RyaW5nX2NvdW50ICcgK1xuICAgICAgJ3N0cmluZ19oYXNoX3RvX25ld2xpbmUgY2xpcGJvYXJkX2hhc190ZXh0IGNsaXBib2FyZF9zZXRfdGV4dCAnICtcbiAgICAgICdjbGlwYm9hcmRfZ2V0X3RleHQgZGF0ZV9jdXJyZW50X2RhdGV0aW1lIGRhdGVfY3JlYXRlX2RhdGV0aW1lICcgK1xuICAgICAgJ2RhdGVfdmFsaWRfZGF0ZXRpbWUgZGF0ZV9pbmNfeWVhciBkYXRlX2luY19tb250aCBkYXRlX2luY193ZWVrICcgK1xuICAgICAgJ2RhdGVfaW5jX2RheSBkYXRlX2luY19ob3VyIGRhdGVfaW5jX21pbnV0ZSBkYXRlX2luY19zZWNvbmQgJyArXG4gICAgICAnZGF0ZV9nZXRfeWVhciBkYXRlX2dldF9tb250aCBkYXRlX2dldF93ZWVrIGRhdGVfZ2V0X2RheSAnICtcbiAgICAgICdkYXRlX2dldF9ob3VyIGRhdGVfZ2V0X21pbnV0ZSBkYXRlX2dldF9zZWNvbmQgZGF0ZV9nZXRfd2Vla2RheSAnICtcbiAgICAgICdkYXRlX2dldF9kYXlfb2ZfeWVhciBkYXRlX2dldF9ob3VyX29mX3llYXIgZGF0ZV9nZXRfbWludXRlX29mX3llYXIgJyArXG4gICAgICAnZGF0ZV9nZXRfc2Vjb25kX29mX3llYXIgZGF0ZV95ZWFyX3NwYW4gZGF0ZV9tb250aF9zcGFuICcgK1xuICAgICAgJ2RhdGVfd2Vla19zcGFuIGRhdGVfZGF5X3NwYW4gZGF0ZV9ob3VyX3NwYW4gZGF0ZV9taW51dGVfc3BhbiAnICtcbiAgICAgICdkYXRlX3NlY29uZF9zcGFuIGRhdGVfY29tcGFyZV9kYXRldGltZSBkYXRlX2NvbXBhcmVfZGF0ZSAnICtcbiAgICAgICdkYXRlX2NvbXBhcmVfdGltZSBkYXRlX2RhdGVfb2YgZGF0ZV90aW1lX29mIGRhdGVfZGF0ZXRpbWVfc3RyaW5nICcgK1xuICAgICAgJ2RhdGVfZGF0ZV9zdHJpbmcgZGF0ZV90aW1lX3N0cmluZyBkYXRlX2RheXNfaW5fbW9udGggJyArXG4gICAgICAnZGF0ZV9kYXlzX2luX3llYXIgZGF0ZV9sZWFwX3llYXIgZGF0ZV9pc190b2RheSBkYXRlX3NldF90aW1lem9uZSAnICtcbiAgICAgICdkYXRlX2dldF90aW1lem9uZSBnYW1lX3NldF9zcGVlZCBnYW1lX2dldF9zcGVlZCBtb3Rpb25fc2V0ICcgK1xuICAgICAgJ21vdGlvbl9hZGQgcGxhY2VfZnJlZSBwbGFjZV9lbXB0eSBwbGFjZV9tZWV0aW5nIHBsYWNlX3NuYXBwZWQgJyArXG4gICAgICAnbW92ZV9yYW5kb20gbW92ZV9zbmFwIG1vdmVfdG93YXJkc19wb2ludCBtb3ZlX2NvbnRhY3Rfc29saWQgJyArXG4gICAgICAnbW92ZV9jb250YWN0X2FsbCBtb3ZlX291dHNpZGVfc29saWQgbW92ZV9vdXRzaWRlX2FsbCAnICtcbiAgICAgICdtb3ZlX2JvdW5jZV9zb2xpZCBtb3ZlX2JvdW5jZV9hbGwgbW92ZV93cmFwIGRpc3RhbmNlX3RvX3BvaW50ICcgK1xuICAgICAgJ2Rpc3RhbmNlX3RvX29iamVjdCBwb3NpdGlvbl9lbXB0eSBwb3NpdGlvbl9tZWV0aW5nIHBhdGhfc3RhcnQgJyArXG4gICAgICAncGF0aF9lbmQgbXBfbGluZWFyX3N0ZXAgbXBfcG90ZW50aWFsX3N0ZXAgbXBfbGluZWFyX3N0ZXBfb2JqZWN0ICcgK1xuICAgICAgJ21wX3BvdGVudGlhbF9zdGVwX29iamVjdCBtcF9wb3RlbnRpYWxfc2V0dGluZ3MgbXBfbGluZWFyX3BhdGggJyArXG4gICAgICAnbXBfcG90ZW50aWFsX3BhdGggbXBfbGluZWFyX3BhdGhfb2JqZWN0IG1wX3BvdGVudGlhbF9wYXRoX29iamVjdCAnICtcbiAgICAgICdtcF9ncmlkX2NyZWF0ZSBtcF9ncmlkX2Rlc3Ryb3kgbXBfZ3JpZF9jbGVhcl9hbGwgbXBfZ3JpZF9jbGVhcl9jZWxsICcgK1xuICAgICAgJ21wX2dyaWRfY2xlYXJfcmVjdGFuZ2xlIG1wX2dyaWRfYWRkX2NlbGwgbXBfZ3JpZF9nZXRfY2VsbCAnICtcbiAgICAgICdtcF9ncmlkX2FkZF9yZWN0YW5nbGUgbXBfZ3JpZF9hZGRfaW5zdGFuY2VzIG1wX2dyaWRfcGF0aCAnICtcbiAgICAgICdtcF9ncmlkX2RyYXcgbXBfZ3JpZF90b19kc19ncmlkIGNvbGxpc2lvbl9wb2ludCBjb2xsaXNpb25fcmVjdGFuZ2xlICcgK1xuICAgICAgJ2NvbGxpc2lvbl9jaXJjbGUgY29sbGlzaW9uX2VsbGlwc2UgY29sbGlzaW9uX2xpbmUgJyArXG4gICAgICAnY29sbGlzaW9uX3BvaW50X2xpc3QgY29sbGlzaW9uX3JlY3RhbmdsZV9saXN0IGNvbGxpc2lvbl9jaXJjbGVfbGlzdCAnICtcbiAgICAgICdjb2xsaXNpb25fZWxsaXBzZV9saXN0IGNvbGxpc2lvbl9saW5lX2xpc3QgaW5zdGFuY2VfcG9zaXRpb25fbGlzdCAnICtcbiAgICAgICdpbnN0YW5jZV9wbGFjZV9saXN0IHBvaW50X2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdwb2ludF9pbl90cmlhbmdsZSBwb2ludF9pbl9jaXJjbGUgcmVjdGFuZ2xlX2luX3JlY3RhbmdsZSAnICtcbiAgICAgICdyZWN0YW5nbGVfaW5fdHJpYW5nbGUgcmVjdGFuZ2xlX2luX2NpcmNsZSBpbnN0YW5jZV9maW5kICcgK1xuICAgICAgJ2luc3RhbmNlX2V4aXN0cyBpbnN0YW5jZV9udW1iZXIgaW5zdGFuY2VfcG9zaXRpb24gaW5zdGFuY2VfbmVhcmVzdCAnICtcbiAgICAgICdpbnN0YW5jZV9mdXJ0aGVzdCBpbnN0YW5jZV9wbGFjZSBpbnN0YW5jZV9jcmVhdGVfZGVwdGggJyArXG4gICAgICAnaW5zdGFuY2VfY3JlYXRlX2xheWVyIGluc3RhbmNlX2NvcHkgaW5zdGFuY2VfY2hhbmdlIGluc3RhbmNlX2Rlc3Ryb3kgJyArXG4gICAgICAncG9zaXRpb25fZGVzdHJveSBwb3NpdGlvbl9jaGFuZ2UgaW5zdGFuY2VfaWRfZ2V0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfYWxsIGluc3RhbmNlX2RlYWN0aXZhdGVfb2JqZWN0ICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfcmVnaW9uIGluc3RhbmNlX2FjdGl2YXRlX2FsbCAnICtcbiAgICAgICdpbnN0YW5jZV9hY3RpdmF0ZV9vYmplY3QgaW5zdGFuY2VfYWN0aXZhdGVfcmVnaW9uIHJvb21fZ290byAnICtcbiAgICAgICdyb29tX2dvdG9fcHJldmlvdXMgcm9vbV9nb3RvX25leHQgcm9vbV9wcmV2aW91cyByb29tX25leHQgJyArXG4gICAgICAncm9vbV9yZXN0YXJ0IGdhbWVfZW5kIGdhbWVfcmVzdGFydCBnYW1lX2xvYWQgZ2FtZV9zYXZlICcgK1xuICAgICAgJ2dhbWVfc2F2ZV9idWZmZXIgZ2FtZV9sb2FkX2J1ZmZlciBldmVudF9wZXJmb3JtIGV2ZW50X3VzZXIgJyArXG4gICAgICAnZXZlbnRfcGVyZm9ybV9vYmplY3QgZXZlbnRfaW5oZXJpdGVkIHNob3dfZGVidWdfbWVzc2FnZSAnICtcbiAgICAgICdzaG93X2RlYnVnX292ZXJsYXkgZGVidWdfZXZlbnQgZGVidWdfZ2V0X2NhbGxzdGFjayBhbGFybV9nZXQgJyArXG4gICAgICAnYWxhcm1fc2V0IGZvbnRfdGV4dHVyZV9wYWdlX3NpemUga2V5Ym9hcmRfc2V0X21hcCBrZXlib2FyZF9nZXRfbWFwICcgK1xuICAgICAgJ2tleWJvYXJkX3Vuc2V0X21hcCBrZXlib2FyZF9jaGVjayBrZXlib2FyZF9jaGVja19wcmVzc2VkICcgK1xuICAgICAgJ2tleWJvYXJkX2NoZWNrX3JlbGVhc2VkIGtleWJvYXJkX2NoZWNrX2RpcmVjdCBrZXlib2FyZF9nZXRfbnVtbG9jayAnICtcbiAgICAgICdrZXlib2FyZF9zZXRfbnVtbG9jayBrZXlib2FyZF9rZXlfcHJlc3Mga2V5Ym9hcmRfa2V5X3JlbGVhc2UgJyArXG4gICAgICAna2V5Ym9hcmRfY2xlYXIgaW9fY2xlYXIgbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ21vdXNlX2NoZWNrX2J1dHRvbl9wcmVzc2VkIG1vdXNlX2NoZWNrX2J1dHRvbl9yZWxlYXNlZCAnICtcbiAgICAgICdtb3VzZV93aGVlbF91cCBtb3VzZV93aGVlbF9kb3duIG1vdXNlX2NsZWFyIGRyYXdfc2VsZiBkcmF3X3Nwcml0ZSAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wb3MgZHJhd19zcHJpdGVfZXh0IGRyYXdfc3ByaXRlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9zdHJldGNoZWRfZXh0IGRyYXdfc3ByaXRlX3RpbGVkIGRyYXdfc3ByaXRlX3RpbGVkX2V4dCAnICtcbiAgICAgICdkcmF3X3Nwcml0ZV9wYXJ0IGRyYXdfc3ByaXRlX3BhcnRfZXh0IGRyYXdfc3ByaXRlX2dlbmVyYWwgZHJhd19jbGVhciAnICtcbiAgICAgICdkcmF3X2NsZWFyX2FscGhhIGRyYXdfcG9pbnQgZHJhd19saW5lIGRyYXdfbGluZV93aWR0aCBkcmF3X3JlY3RhbmdsZSAnICtcbiAgICAgICdkcmF3X3JvdW5kcmVjdCBkcmF3X3JvdW5kcmVjdF9leHQgZHJhd190cmlhbmdsZSBkcmF3X2NpcmNsZSAnICtcbiAgICAgICdkcmF3X2VsbGlwc2UgZHJhd19zZXRfY2lyY2xlX3ByZWNpc2lvbiBkcmF3X2Fycm93IGRyYXdfYnV0dG9uICcgK1xuICAgICAgJ2RyYXdfcGF0aCBkcmF3X2hlYWx0aGJhciBkcmF3X2dldHBpeGVsIGRyYXdfZ2V0cGl4ZWxfZXh0ICcgK1xuICAgICAgJ2RyYXdfc2V0X2NvbG91ciBkcmF3X3NldF9jb2xvciBkcmF3X3NldF9hbHBoYSBkcmF3X2dldF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19nZXRfY29sb3IgZHJhd19nZXRfYWxwaGEgbWVyZ2VfY29sb3VyIG1ha2VfY29sb3VyX3JnYiAnICtcbiAgICAgICdtYWtlX2NvbG91cl9oc3YgY29sb3VyX2dldF9yZWQgY29sb3VyX2dldF9ncmVlbiBjb2xvdXJfZ2V0X2JsdWUgJyArXG4gICAgICAnY29sb3VyX2dldF9odWUgY29sb3VyX2dldF9zYXR1cmF0aW9uIGNvbG91cl9nZXRfdmFsdWUgbWVyZ2VfY29sb3IgJyArXG4gICAgICAnbWFrZV9jb2xvcl9yZ2IgbWFrZV9jb2xvcl9oc3YgY29sb3JfZ2V0X3JlZCBjb2xvcl9nZXRfZ3JlZW4gJyArXG4gICAgICAnY29sb3JfZ2V0X2JsdWUgY29sb3JfZ2V0X2h1ZSBjb2xvcl9nZXRfc2F0dXJhdGlvbiBjb2xvcl9nZXRfdmFsdWUgJyArXG4gICAgICAnbWVyZ2VfY29sb3Igc2NyZWVuX3NhdmUgc2NyZWVuX3NhdmVfcGFydCBkcmF3X3NldF9mb250ICcgK1xuICAgICAgJ2RyYXdfc2V0X2hhbGlnbiBkcmF3X3NldF92YWxpZ24gZHJhd190ZXh0IGRyYXdfdGV4dF9leHQgc3RyaW5nX3dpZHRoICcgK1xuICAgICAgJ3N0cmluZ19oZWlnaHQgc3RyaW5nX3dpZHRoX2V4dCBzdHJpbmdfaGVpZ2h0X2V4dCAnICtcbiAgICAgICdkcmF3X3RleHRfdHJhbnNmb3JtZWQgZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZCBkcmF3X3RleHRfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfdGV4dF9leHRfY29sb3VyIGRyYXdfdGV4dF90cmFuc2Zvcm1lZF9jb2xvdXIgJyArXG4gICAgICAnZHJhd190ZXh0X2V4dF90cmFuc2Zvcm1lZF9jb2xvdXIgZHJhd190ZXh0X2NvbG9yIGRyYXdfdGV4dF9leHRfY29sb3IgJyArXG4gICAgICAnZHJhd190ZXh0X3RyYW5zZm9ybWVkX2NvbG9yIGRyYXdfdGV4dF9leHRfdHJhbnNmb3JtZWRfY29sb3IgJyArXG4gICAgICAnZHJhd19wb2ludF9jb2xvdXIgZHJhd19saW5lX2NvbG91ciBkcmF3X2xpbmVfd2lkdGhfY29sb3VyICcgK1xuICAgICAgJ2RyYXdfcmVjdGFuZ2xlX2NvbG91ciBkcmF3X3JvdW5kcmVjdF9jb2xvdXIgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3VyX2V4dCBkcmF3X3RyaWFuZ2xlX2NvbG91ciBkcmF3X2NpcmNsZV9jb2xvdXIgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG91ciBkcmF3X3BvaW50X2NvbG9yIGRyYXdfbGluZV9jb2xvciAnICtcbiAgICAgICdkcmF3X2xpbmVfd2lkdGhfY29sb3IgZHJhd19yZWN0YW5nbGVfY29sb3IgZHJhd19yb3VuZHJlY3RfY29sb3IgJyArXG4gICAgICAnZHJhd19yb3VuZHJlY3RfY29sb3JfZXh0IGRyYXdfdHJpYW5nbGVfY29sb3IgZHJhd19jaXJjbGVfY29sb3IgJyArXG4gICAgICAnZHJhd19lbGxpcHNlX2NvbG9yIGRyYXdfcHJpbWl0aXZlX2JlZ2luIGRyYXdfdmVydGV4ICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X2NvbG91ciBkcmF3X3ZlcnRleF9jb2xvciBkcmF3X3ByaW1pdGl2ZV9lbmQgJyArXG4gICAgICAnc3ByaXRlX2dldF91dnMgZm9udF9nZXRfdXZzIHNwcml0ZV9nZXRfdGV4dHVyZSBmb250X2dldF90ZXh0dXJlICcgK1xuICAgICAgJ3RleHR1cmVfZ2V0X3dpZHRoIHRleHR1cmVfZ2V0X2hlaWdodCB0ZXh0dXJlX2dldF91dnMgJyArXG4gICAgICAnZHJhd19wcmltaXRpdmVfYmVnaW5fdGV4dHVyZSBkcmF3X3ZlcnRleF90ZXh0dXJlICcgK1xuICAgICAgJ2RyYXdfdmVydGV4X3RleHR1cmVfY29sb3VyIGRyYXdfdmVydGV4X3RleHR1cmVfY29sb3IgJyArXG4gICAgICAndGV4dHVyZV9nbG9iYWxfc2NhbGUgc3VyZmFjZV9jcmVhdGUgc3VyZmFjZV9jcmVhdGVfZXh0ICcgK1xuICAgICAgJ3N1cmZhY2VfcmVzaXplIHN1cmZhY2VfZnJlZSBzdXJmYWNlX2V4aXN0cyBzdXJmYWNlX2dldF93aWR0aCAnICtcbiAgICAgICdzdXJmYWNlX2dldF9oZWlnaHQgc3VyZmFjZV9nZXRfdGV4dHVyZSBzdXJmYWNlX3NldF90YXJnZXQgJyArXG4gICAgICAnc3VyZmFjZV9zZXRfdGFyZ2V0X2V4dCBzdXJmYWNlX3Jlc2V0X3RhcmdldCBzdXJmYWNlX2RlcHRoX2Rpc2FibGUgJyArXG4gICAgICAnc3VyZmFjZV9nZXRfZGVwdGhfZGlzYWJsZSBkcmF3X3N1cmZhY2UgZHJhd19zdXJmYWNlX3N0cmV0Y2hlZCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2VfdGlsZWQgZHJhd19zdXJmYWNlX3BhcnQgZHJhd19zdXJmYWNlX2V4dCAnICtcbiAgICAgICdkcmF3X3N1cmZhY2Vfc3RyZXRjaGVkX2V4dCBkcmF3X3N1cmZhY2VfdGlsZWRfZXh0ICcgK1xuICAgICAgJ2RyYXdfc3VyZmFjZV9wYXJ0X2V4dCBkcmF3X3N1cmZhY2VfZ2VuZXJhbCBzdXJmYWNlX2dldHBpeGVsICcgK1xuICAgICAgJ3N1cmZhY2VfZ2V0cGl4ZWxfZXh0IHN1cmZhY2Vfc2F2ZSBzdXJmYWNlX3NhdmVfcGFydCBzdXJmYWNlX2NvcHkgJyArXG4gICAgICAnc3VyZmFjZV9jb3B5X3BhcnQgYXBwbGljYXRpb25fc3VyZmFjZV9kcmF3X2VuYWJsZSAnICtcbiAgICAgICdhcHBsaWNhdGlvbl9nZXRfcG9zaXRpb24gYXBwbGljYXRpb25fc3VyZmFjZV9lbmFibGUgJyArXG4gICAgICAnYXBwbGljYXRpb25fc3VyZmFjZV9pc19lbmFibGVkIGRpc3BsYXlfZ2V0X3dpZHRoIGRpc3BsYXlfZ2V0X2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X2dldF9vcmllbnRhdGlvbiBkaXNwbGF5X2dldF9ndWlfd2lkdGggZGlzcGxheV9nZXRfZ3VpX2hlaWdodCAnICtcbiAgICAgICdkaXNwbGF5X3Jlc2V0IGRpc3BsYXlfbW91c2VfZ2V0X3ggZGlzcGxheV9tb3VzZV9nZXRfeSAnICtcbiAgICAgICdkaXNwbGF5X21vdXNlX3NldCBkaXNwbGF5X3NldF91aV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3dpbmRvd19zZXRfZnVsbHNjcmVlbiB3aW5kb3dfZ2V0X2Z1bGxzY3JlZW4gJyArXG4gICAgICAnd2luZG93X3NldF9jYXB0aW9uIHdpbmRvd19zZXRfbWluX3dpZHRoIHdpbmRvd19zZXRfbWF4X3dpZHRoICcgK1xuICAgICAgJ3dpbmRvd19zZXRfbWluX2hlaWdodCB3aW5kb3dfc2V0X21heF9oZWlnaHQgd2luZG93X2dldF92aXNpYmxlX3JlY3RzICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY2FwdGlvbiB3aW5kb3dfc2V0X2N1cnNvciB3aW5kb3dfZ2V0X2N1cnNvciAnICtcbiAgICAgICd3aW5kb3dfc2V0X2NvbG91ciB3aW5kb3dfZ2V0X2NvbG91ciB3aW5kb3dfc2V0X2NvbG9yICcgK1xuICAgICAgJ3dpbmRvd19nZXRfY29sb3Igd2luZG93X3NldF9wb3NpdGlvbiB3aW5kb3dfc2V0X3NpemUgJyArXG4gICAgICAnd2luZG93X3NldF9yZWN0YW5nbGUgd2luZG93X2NlbnRlciB3aW5kb3dfZ2V0X3ggd2luZG93X2dldF95ICcgK1xuICAgICAgJ3dpbmRvd19nZXRfd2lkdGggd2luZG93X2dldF9oZWlnaHQgd2luZG93X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd19tb3VzZV9nZXRfeSB3aW5kb3dfbW91c2Vfc2V0IHdpbmRvd192aWV3X21vdXNlX2dldF94ICcgK1xuICAgICAgJ3dpbmRvd192aWV3X21vdXNlX2dldF95IHdpbmRvd192aWV3c19tb3VzZV9nZXRfeCAnICtcbiAgICAgICd3aW5kb3dfdmlld3NfbW91c2VfZ2V0X3kgYXVkaW9fbGlzdGVuZXJfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fbGlzdGVuZXJfdmVsb2NpdHkgYXVkaW9fbGlzdGVuZXJfb3JpZW50YXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9wb3NpdGlvbiBhdWRpb19lbWl0dGVyX2NyZWF0ZSBhdWRpb19lbWl0dGVyX2ZyZWUgJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9leGlzdHMgYXVkaW9fZW1pdHRlcl9waXRjaCBhdWRpb19lbWl0dGVyX3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZmFsbG9mZiBhdWRpb19lbWl0dGVyX2dhaW4gYXVkaW9fcGxheV9zb3VuZCAnICtcbiAgICAgICdhdWRpb19wbGF5X3NvdW5kX29uIGF1ZGlvX3BsYXlfc291bmRfYXQgYXVkaW9fc3RvcF9zb3VuZCAnICtcbiAgICAgICdhdWRpb19yZXN1bWVfbXVzaWMgYXVkaW9fbXVzaWNfaXNfcGxheWluZyBhdWRpb19yZXN1bWVfc291bmQgJyArXG4gICAgICAnYXVkaW9fcGF1c2Vfc291bmQgYXVkaW9fcGF1c2VfbXVzaWMgYXVkaW9fY2hhbm5lbF9udW0gJyArXG4gICAgICAnYXVkaW9fc291bmRfbGVuZ3RoIGF1ZGlvX2dldF90eXBlIGF1ZGlvX2ZhbGxvZmZfc2V0X21vZGVsICcgK1xuICAgICAgJ2F1ZGlvX3BsYXlfbXVzaWMgYXVkaW9fc3RvcF9tdXNpYyBhdWRpb19tYXN0ZXJfZ2FpbiBhdWRpb19tdXNpY19nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dhaW4gYXVkaW9fc291bmRfcGl0Y2ggYXVkaW9fc3RvcF9hbGwgYXVkaW9fcmVzdW1lX2FsbCAnICtcbiAgICAgICdhdWRpb19wYXVzZV9hbGwgYXVkaW9faXNfcGxheWluZyBhdWRpb19pc19wYXVzZWQgYXVkaW9fZXhpc3RzICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX3NldF90cmFja19wb3NpdGlvbiBhdWRpb19zb3VuZF9nZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fZW1pdHRlcl9nZXRfZ2FpbiBhdWRpb19lbWl0dGVyX2dldF9waXRjaCBhdWRpb19lbWl0dGVyX2dldF94ICcgK1xuICAgICAgJ2F1ZGlvX2VtaXR0ZXJfZ2V0X3kgYXVkaW9fZW1pdHRlcl9nZXRfeiBhdWRpb19lbWl0dGVyX2dldF92eCAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX2dldF92eSBhdWRpb19lbWl0dGVyX2dldF92eiAnICtcbiAgICAgICdhdWRpb19saXN0ZW5lcl9zZXRfcG9zaXRpb24gYXVkaW9fbGlzdGVuZXJfc2V0X3ZlbG9jaXR5ICcgK1xuICAgICAgJ2F1ZGlvX2xpc3RlbmVyX3NldF9vcmllbnRhdGlvbiBhdWRpb19saXN0ZW5lcl9nZXRfZGF0YSAnICtcbiAgICAgICdhdWRpb19zZXRfbWFzdGVyX2dhaW4gYXVkaW9fZ2V0X21hc3Rlcl9nYWluIGF1ZGlvX3NvdW5kX2dldF9nYWluICcgK1xuICAgICAgJ2F1ZGlvX3NvdW5kX2dldF9waXRjaCBhdWRpb19nZXRfbmFtZSBhdWRpb19zb3VuZF9zZXRfdHJhY2tfcG9zaXRpb24gJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X3RyYWNrX3Bvc2l0aW9uIGF1ZGlvX2NyZWF0ZV9zdHJlYW0gJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zdHJlYW0gYXVkaW9fY3JlYXRlX3N5bmNfZ3JvdXAgJyArXG4gICAgICAnYXVkaW9fZGVzdHJveV9zeW5jX2dyb3VwIGF1ZGlvX3BsYXlfaW5fc3luY19ncm91cCAnICtcbiAgICAgICdhdWRpb19zdGFydF9zeW5jX2dyb3VwIGF1ZGlvX3N0b3Bfc3luY19ncm91cCBhdWRpb19wYXVzZV9zeW5jX2dyb3VwICcgK1xuICAgICAgJ2F1ZGlvX3Jlc3VtZV9zeW5jX2dyb3VwIGF1ZGlvX3N5bmNfZ3JvdXBfZ2V0X3RyYWNrX3BvcyAnICtcbiAgICAgICdhdWRpb19zeW5jX2dyb3VwX2RlYnVnIGF1ZGlvX3N5bmNfZ3JvdXBfaXNfcGxheWluZyBhdWRpb19kZWJ1ZyAnICtcbiAgICAgICdhdWRpb19ncm91cF9sb2FkIGF1ZGlvX2dyb3VwX3VubG9hZCBhdWRpb19ncm91cF9pc19sb2FkZWQgJyArXG4gICAgICAnYXVkaW9fZ3JvdXBfbG9hZF9wcm9ncmVzcyBhdWRpb19ncm91cF9uYW1lIGF1ZGlvX2dyb3VwX3N0b3BfYWxsICcgK1xuICAgICAgJ2F1ZGlvX2dyb3VwX3NldF9nYWluIGF1ZGlvX2NyZWF0ZV9idWZmZXJfc291bmQgJyArXG4gICAgICAnYXVkaW9fZnJlZV9idWZmZXJfc291bmQgYXVkaW9fY3JlYXRlX3BsYXlfcXVldWUgJyArXG4gICAgICAnYXVkaW9fZnJlZV9wbGF5X3F1ZXVlIGF1ZGlvX3F1ZXVlX3NvdW5kIGF1ZGlvX2dldF9yZWNvcmRlcl9jb3VudCAnICtcbiAgICAgICdhdWRpb19nZXRfcmVjb3JkZXJfaW5mbyBhdWRpb19zdGFydF9yZWNvcmRpbmcgYXVkaW9fc3RvcF9yZWNvcmRpbmcgJyArXG4gICAgICAnYXVkaW9fc291bmRfZ2V0X2xpc3RlbmVyX21hc2sgYXVkaW9fZW1pdHRlcl9nZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19nZXRfbGlzdGVuZXJfbWFzayBhdWRpb19zb3VuZF9zZXRfbGlzdGVuZXJfbWFzayAnICtcbiAgICAgICdhdWRpb19lbWl0dGVyX3NldF9saXN0ZW5lcl9tYXNrIGF1ZGlvX3NldF9saXN0ZW5lcl9tYXNrICcgK1xuICAgICAgJ2F1ZGlvX2dldF9saXN0ZW5lcl9jb3VudCBhdWRpb19nZXRfbGlzdGVuZXJfaW5mbyBhdWRpb19zeXN0ZW0gJyArXG4gICAgICAnc2hvd19tZXNzYWdlIHNob3dfbWVzc2FnZV9hc3luYyBjbGlja2FibGVfYWRkIGNsaWNrYWJsZV9hZGRfZXh0ICcgK1xuICAgICAgJ2NsaWNrYWJsZV9jaGFuZ2UgY2xpY2thYmxlX2NoYW5nZV9leHQgY2xpY2thYmxlX2RlbGV0ZSAnICtcbiAgICAgICdjbGlja2FibGVfZXhpc3RzIGNsaWNrYWJsZV9zZXRfc3R5bGUgc2hvd19xdWVzdGlvbiAnICtcbiAgICAgICdzaG93X3F1ZXN0aW9uX2FzeW5jIGdldF9pbnRlZ2VyIGdldF9zdHJpbmcgZ2V0X2ludGVnZXJfYXN5bmMgJyArXG4gICAgICAnZ2V0X3N0cmluZ19hc3luYyBnZXRfbG9naW5fYXN5bmMgZ2V0X29wZW5fZmlsZW5hbWUgZ2V0X3NhdmVfZmlsZW5hbWUgJyArXG4gICAgICAnZ2V0X29wZW5fZmlsZW5hbWVfZXh0IGdldF9zYXZlX2ZpbGVuYW1lX2V4dCBzaG93X2Vycm9yICcgK1xuICAgICAgJ2hpZ2hzY29yZV9jbGVhciBoaWdoc2NvcmVfYWRkIGhpZ2hzY29yZV92YWx1ZSBoaWdoc2NvcmVfbmFtZSAnICtcbiAgICAgICdkcmF3X2hpZ2hzY29yZSBzcHJpdGVfZXhpc3RzIHNwcml0ZV9nZXRfbmFtZSBzcHJpdGVfZ2V0X251bWJlciAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3dpZHRoIHNwcml0ZV9nZXRfaGVpZ2h0IHNwcml0ZV9nZXRfeG9mZnNldCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3lvZmZzZXQgc3ByaXRlX2dldF9iYm94X2xlZnQgc3ByaXRlX2dldF9iYm94X3JpZ2h0ICcgK1xuICAgICAgJ3Nwcml0ZV9nZXRfYmJveF90b3Agc3ByaXRlX2dldF9iYm94X2JvdHRvbSBzcHJpdGVfc2F2ZSAnICtcbiAgICAgICdzcHJpdGVfc2F2ZV9zdHJpcCBzcHJpdGVfc2V0X2NhY2hlX3NpemUgc3ByaXRlX3NldF9jYWNoZV9zaXplX2V4dCAnICtcbiAgICAgICdzcHJpdGVfZ2V0X3RwZSBzcHJpdGVfcHJlZmV0Y2ggc3ByaXRlX3ByZWZldGNoX211bHRpIHNwcml0ZV9mbHVzaCAnICtcbiAgICAgICdzcHJpdGVfZmx1c2hfbXVsdGkgc3ByaXRlX3NldF9zcGVlZCBzcHJpdGVfZ2V0X3NwZWVkX3R5cGUgJyArXG4gICAgICAnc3ByaXRlX2dldF9zcGVlZCBmb250X2V4aXN0cyBmb250X2dldF9uYW1lIGZvbnRfZ2V0X2ZvbnRuYW1lICcgK1xuICAgICAgJ2ZvbnRfZ2V0X2JvbGQgZm9udF9nZXRfaXRhbGljIGZvbnRfZ2V0X2ZpcnN0IGZvbnRfZ2V0X2xhc3QgJyArXG4gICAgICAnZm9udF9nZXRfc2l6ZSBmb250X3NldF9jYWNoZV9zaXplIHBhdGhfZXhpc3RzIHBhdGhfZ2V0X25hbWUgJyArXG4gICAgICAncGF0aF9nZXRfbGVuZ3RoIHBhdGhfZ2V0X3RpbWUgcGF0aF9nZXRfa2luZCBwYXRoX2dldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9nZXRfcHJlY2lzaW9uIHBhdGhfZ2V0X251bWJlciBwYXRoX2dldF9wb2ludF94IHBhdGhfZ2V0X3BvaW50X3kgJyArXG4gICAgICAncGF0aF9nZXRfcG9pbnRfc3BlZWQgcGF0aF9nZXRfeCBwYXRoX2dldF95IHBhdGhfZ2V0X3NwZWVkICcgK1xuICAgICAgJ3NjcmlwdF9leGlzdHMgc2NyaXB0X2dldF9uYW1lIHRpbWVsaW5lX2FkZCB0aW1lbGluZV9kZWxldGUgJyArXG4gICAgICAndGltZWxpbmVfY2xlYXIgdGltZWxpbmVfZXhpc3RzIHRpbWVsaW5lX2dldF9uYW1lICcgK1xuICAgICAgJ3RpbWVsaW5lX21vbWVudF9jbGVhciB0aW1lbGluZV9tb21lbnRfYWRkX3NjcmlwdCB0aW1lbGluZV9zaXplICcgK1xuICAgICAgJ3RpbWVsaW5lX21heF9tb21lbnQgb2JqZWN0X2V4aXN0cyBvYmplY3RfZ2V0X25hbWUgb2JqZWN0X2dldF9zcHJpdGUgJyArXG4gICAgICAnb2JqZWN0X2dldF9zb2xpZCBvYmplY3RfZ2V0X3Zpc2libGUgb2JqZWN0X2dldF9wZXJzaXN0ZW50ICcgK1xuICAgICAgJ29iamVjdF9nZXRfbWFzayBvYmplY3RfZ2V0X3BhcmVudCBvYmplY3RfZ2V0X3BoeXNpY3MgJyArXG4gICAgICAnb2JqZWN0X2lzX2FuY2VzdG9yIHJvb21fZXhpc3RzIHJvb21fZ2V0X25hbWUgc3ByaXRlX3NldF9vZmZzZXQgJyArXG4gICAgICAnc3ByaXRlX2R1cGxpY2F0ZSBzcHJpdGVfYXNzaWduIHNwcml0ZV9tZXJnZSBzcHJpdGVfYWRkICcgK1xuICAgICAgJ3Nwcml0ZV9yZXBsYWNlIHNwcml0ZV9jcmVhdGVfZnJvbV9zdXJmYWNlIHNwcml0ZV9hZGRfZnJvbV9zdXJmYWNlICcgK1xuICAgICAgJ3Nwcml0ZV9kZWxldGUgc3ByaXRlX3NldF9hbHBoYV9mcm9tX3Nwcml0ZSBzcHJpdGVfY29sbGlzaW9uX21hc2sgJyArXG4gICAgICAnZm9udF9hZGRfZW5hYmxlX2FhIGZvbnRfYWRkX2dldF9lbmFibGVfYWEgZm9udF9hZGQgZm9udF9hZGRfc3ByaXRlICcgK1xuICAgICAgJ2ZvbnRfYWRkX3Nwcml0ZV9leHQgZm9udF9yZXBsYWNlIGZvbnRfcmVwbGFjZV9zcHJpdGUgJyArXG4gICAgICAnZm9udF9yZXBsYWNlX3Nwcml0ZV9leHQgZm9udF9kZWxldGUgcGF0aF9zZXRfa2luZCBwYXRoX3NldF9jbG9zZWQgJyArXG4gICAgICAncGF0aF9zZXRfcHJlY2lzaW9uIHBhdGhfYWRkIHBhdGhfYXNzaWduIHBhdGhfZHVwbGljYXRlIHBhdGhfYXBwZW5kICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlIHBhdGhfYWRkX3BvaW50IHBhdGhfaW5zZXJ0X3BvaW50IHBhdGhfY2hhbmdlX3BvaW50ICcgK1xuICAgICAgJ3BhdGhfZGVsZXRlX3BvaW50IHBhdGhfY2xlYXJfcG9pbnRzIHBhdGhfcmV2ZXJzZSBwYXRoX21pcnJvciAnICtcbiAgICAgICdwYXRoX2ZsaXAgcGF0aF9yb3RhdGUgcGF0aF9yZXNjYWxlIHBhdGhfc2hpZnQgc2NyaXB0X2V4ZWN1dGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9zcHJpdGUgb2JqZWN0X3NldF9zb2xpZCBvYmplY3Rfc2V0X3Zpc2libGUgJyArXG4gICAgICAnb2JqZWN0X3NldF9wZXJzaXN0ZW50IG9iamVjdF9zZXRfbWFzayByb29tX3NldF93aWR0aCByb29tX3NldF9oZWlnaHQgJyArXG4gICAgICAncm9vbV9zZXRfcGVyc2lzdGVudCByb29tX3NldF9iYWNrZ3JvdW5kX2NvbG91ciAnICtcbiAgICAgICdyb29tX3NldF9iYWNrZ3JvdW5kX2NvbG9yIHJvb21fc2V0X3ZpZXcgcm9vbV9zZXRfdmlld3BvcnQgJyArXG4gICAgICAncm9vbV9nZXRfdmlld3BvcnQgcm9vbV9zZXRfdmlld19lbmFibGVkIHJvb21fYWRkIHJvb21fZHVwbGljYXRlICcgK1xuICAgICAgJ3Jvb21fYXNzaWduIHJvb21faW5zdGFuY2VfYWRkIHJvb21faW5zdGFuY2VfY2xlYXIgcm9vbV9nZXRfY2FtZXJhICcgK1xuICAgICAgJ3Jvb21fc2V0X2NhbWVyYSBhc3NldF9nZXRfaW5kZXggYXNzZXRfZ2V0X3R5cGUgJyArXG4gICAgICAnZmlsZV90ZXh0X29wZW5fZnJvbV9zdHJpbmcgZmlsZV90ZXh0X29wZW5fcmVhZCBmaWxlX3RleHRfb3Blbl93cml0ZSAnICtcbiAgICAgICdmaWxlX3RleHRfb3Blbl9hcHBlbmQgZmlsZV90ZXh0X2Nsb3NlIGZpbGVfdGV4dF93cml0ZV9zdHJpbmcgJyArXG4gICAgICAnZmlsZV90ZXh0X3dyaXRlX3JlYWwgZmlsZV90ZXh0X3dyaXRlbG4gZmlsZV90ZXh0X3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2ZpbGVfdGV4dF9yZWFkX3JlYWwgZmlsZV90ZXh0X3JlYWRsbiBmaWxlX3RleHRfZW9mIGZpbGVfdGV4dF9lb2xuICcgK1xuICAgICAgJ2ZpbGVfZXhpc3RzIGZpbGVfZGVsZXRlIGZpbGVfcmVuYW1lIGZpbGVfY29weSBkaXJlY3RvcnlfZXhpc3RzICcgK1xuICAgICAgJ2RpcmVjdG9yeV9jcmVhdGUgZGlyZWN0b3J5X2Rlc3Ryb3kgZmlsZV9maW5kX2ZpcnN0IGZpbGVfZmluZF9uZXh0ICcgK1xuICAgICAgJ2ZpbGVfZmluZF9jbG9zZSBmaWxlX2F0dHJpYnV0ZXMgZmlsZW5hbWVfbmFtZSBmaWxlbmFtZV9wYXRoICcgK1xuICAgICAgJ2ZpbGVuYW1lX2RpciBmaWxlbmFtZV9kcml2ZSBmaWxlbmFtZV9leHQgZmlsZW5hbWVfY2hhbmdlX2V4dCAnICtcbiAgICAgICdmaWxlX2Jpbl9vcGVuIGZpbGVfYmluX3Jld3JpdGUgZmlsZV9iaW5fY2xvc2UgZmlsZV9iaW5fcG9zaXRpb24gJyArXG4gICAgICAnZmlsZV9iaW5fc2l6ZSBmaWxlX2Jpbl9zZWVrIGZpbGVfYmluX3dyaXRlX2J5dGUgZmlsZV9iaW5fcmVhZF9ieXRlICcgK1xuICAgICAgJ3BhcmFtZXRlcl9jb3VudCBwYXJhbWV0ZXJfc3RyaW5nIGVudmlyb25tZW50X2dldF92YXJpYWJsZSAnICtcbiAgICAgICdpbmlfb3Blbl9mcm9tX3N0cmluZyBpbmlfb3BlbiBpbmlfY2xvc2UgaW5pX3JlYWRfc3RyaW5nICcgK1xuICAgICAgJ2luaV9yZWFkX3JlYWwgaW5pX3dyaXRlX3N0cmluZyBpbmlfd3JpdGVfcmVhbCBpbmlfa2V5X2V4aXN0cyAnICtcbiAgICAgICdpbmlfc2VjdGlvbl9leGlzdHMgaW5pX2tleV9kZWxldGUgaW5pX3NlY3Rpb25fZGVsZXRlICcgK1xuICAgICAgJ2RzX3NldF9wcmVjaXNpb24gZHNfZXhpc3RzIGRzX3N0YWNrX2NyZWF0ZSBkc19zdGFja19kZXN0cm95ICcgK1xuICAgICAgJ2RzX3N0YWNrX2NsZWFyIGRzX3N0YWNrX2NvcHkgZHNfc3RhY2tfc2l6ZSBkc19zdGFja19lbXB0eSAnICtcbiAgICAgICdkc19zdGFja19wdXNoIGRzX3N0YWNrX3BvcCBkc19zdGFja190b3AgZHNfc3RhY2tfd3JpdGUgZHNfc3RhY2tfcmVhZCAnICtcbiAgICAgICdkc19xdWV1ZV9jcmVhdGUgZHNfcXVldWVfZGVzdHJveSBkc19xdWV1ZV9jbGVhciBkc19xdWV1ZV9jb3B5ICcgK1xuICAgICAgJ2RzX3F1ZXVlX3NpemUgZHNfcXVldWVfZW1wdHkgZHNfcXVldWVfZW5xdWV1ZSBkc19xdWV1ZV9kZXF1ZXVlICcgK1xuICAgICAgJ2RzX3F1ZXVlX2hlYWQgZHNfcXVldWVfdGFpbCBkc19xdWV1ZV93cml0ZSBkc19xdWV1ZV9yZWFkICcgK1xuICAgICAgJ2RzX2xpc3RfY3JlYXRlIGRzX2xpc3RfZGVzdHJveSBkc19saXN0X2NsZWFyIGRzX2xpc3RfY29weSAnICtcbiAgICAgICdkc19saXN0X3NpemUgZHNfbGlzdF9lbXB0eSBkc19saXN0X2FkZCBkc19saXN0X2luc2VydCAnICtcbiAgICAgICdkc19saXN0X3JlcGxhY2UgZHNfbGlzdF9kZWxldGUgZHNfbGlzdF9maW5kX2luZGV4IGRzX2xpc3RfZmluZF92YWx1ZSAnICtcbiAgICAgICdkc19saXN0X21hcmtfYXNfbGlzdCBkc19saXN0X21hcmtfYXNfbWFwIGRzX2xpc3Rfc29ydCAnICtcbiAgICAgICdkc19saXN0X3NodWZmbGUgZHNfbGlzdF93cml0ZSBkc19saXN0X3JlYWQgZHNfbGlzdF9zZXQgZHNfbWFwX2NyZWF0ZSAnICtcbiAgICAgICdkc19tYXBfZGVzdHJveSBkc19tYXBfY2xlYXIgZHNfbWFwX2NvcHkgZHNfbWFwX3NpemUgZHNfbWFwX2VtcHR5ICcgK1xuICAgICAgJ2RzX21hcF9hZGQgZHNfbWFwX2FkZF9saXN0IGRzX21hcF9hZGRfbWFwIGRzX21hcF9yZXBsYWNlICcgK1xuICAgICAgJ2RzX21hcF9yZXBsYWNlX21hcCBkc19tYXBfcmVwbGFjZV9saXN0IGRzX21hcF9kZWxldGUgZHNfbWFwX2V4aXN0cyAnICtcbiAgICAgICdkc19tYXBfZmluZF92YWx1ZSBkc19tYXBfZmluZF9wcmV2aW91cyBkc19tYXBfZmluZF9uZXh0ICcgK1xuICAgICAgJ2RzX21hcF9maW5kX2ZpcnN0IGRzX21hcF9maW5kX2xhc3QgZHNfbWFwX3dyaXRlIGRzX21hcF9yZWFkICcgK1xuICAgICAgJ2RzX21hcF9zZWN1cmVfc2F2ZSBkc19tYXBfc2VjdXJlX2xvYWQgZHNfbWFwX3NlY3VyZV9sb2FkX2J1ZmZlciAnICtcbiAgICAgICdkc19tYXBfc2VjdXJlX3NhdmVfYnVmZmVyIGRzX21hcF9zZXQgZHNfcHJpb3JpdHlfY3JlYXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X2Rlc3Ryb3kgZHNfcHJpb3JpdHlfY2xlYXIgZHNfcHJpb3JpdHlfY29weSAnICtcbiAgICAgICdkc19wcmlvcml0eV9zaXplIGRzX3ByaW9yaXR5X2VtcHR5IGRzX3ByaW9yaXR5X2FkZCAnICtcbiAgICAgICdkc19wcmlvcml0eV9jaGFuZ2VfcHJpb3JpdHkgZHNfcHJpb3JpdHlfZmluZF9wcmlvcml0eSAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfdmFsdWUgZHNfcHJpb3JpdHlfZGVsZXRlX21pbiBkc19wcmlvcml0eV9maW5kX21pbiAnICtcbiAgICAgICdkc19wcmlvcml0eV9kZWxldGVfbWF4IGRzX3ByaW9yaXR5X2ZpbmRfbWF4IGRzX3ByaW9yaXR5X3dyaXRlICcgK1xuICAgICAgJ2RzX3ByaW9yaXR5X3JlYWQgZHNfZ3JpZF9jcmVhdGUgZHNfZ3JpZF9kZXN0cm95IGRzX2dyaWRfY29weSAnICtcbiAgICAgICdkc19ncmlkX3Jlc2l6ZSBkc19ncmlkX3dpZHRoIGRzX2dyaWRfaGVpZ2h0IGRzX2dyaWRfY2xlYXIgJyArXG4gICAgICAnZHNfZ3JpZF9zZXQgZHNfZ3JpZF9hZGQgZHNfZ3JpZF9tdWx0aXBseSBkc19ncmlkX3NldF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfcmVnaW9uIGRzX2dyaWRfbXVsdGlwbHlfcmVnaW9uIGRzX2dyaWRfc2V0X2Rpc2sgJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZGlzayBkc19ncmlkX211bHRpcGx5X2Rpc2sgZHNfZ3JpZF9zZXRfZ3JpZF9yZWdpb24gJyArXG4gICAgICAnZHNfZ3JpZF9hZGRfZ3JpZF9yZWdpb24gZHNfZ3JpZF9tdWx0aXBseV9ncmlkX3JlZ2lvbiBkc19ncmlkX2dldCAnICtcbiAgICAgICdkc19ncmlkX2dldF9zdW0gZHNfZ3JpZF9nZXRfbWF4IGRzX2dyaWRfZ2V0X21pbiBkc19ncmlkX2dldF9tZWFuICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfc3VtIGRzX2dyaWRfZ2V0X2Rpc2tfbWluIGRzX2dyaWRfZ2V0X2Rpc2tfbWF4ICcgK1xuICAgICAgJ2RzX2dyaWRfZ2V0X2Rpc2tfbWVhbiBkc19ncmlkX3ZhbHVlX2V4aXN0cyBkc19ncmlkX3ZhbHVlX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV95IGRzX2dyaWRfdmFsdWVfZGlza19leGlzdHMgZHNfZ3JpZF92YWx1ZV9kaXNrX3ggJyArXG4gICAgICAnZHNfZ3JpZF92YWx1ZV9kaXNrX3kgZHNfZ3JpZF9zaHVmZmxlIGRzX2dyaWRfd3JpdGUgZHNfZ3JpZF9yZWFkICcgK1xuICAgICAgJ2RzX2dyaWRfc29ydCBkc19ncmlkX3NldCBkc19ncmlkX2dldCBlZmZlY3RfY3JlYXRlX2JlbG93ICcgK1xuICAgICAgJ2VmZmVjdF9jcmVhdGVfYWJvdmUgZWZmZWN0X2NsZWFyIHBhcnRfdHlwZV9jcmVhdGUgcGFydF90eXBlX2Rlc3Ryb3kgJyArXG4gICAgICAncGFydF90eXBlX2V4aXN0cyBwYXJ0X3R5cGVfY2xlYXIgcGFydF90eXBlX3NoYXBlIHBhcnRfdHlwZV9zcHJpdGUgJyArXG4gICAgICAncGFydF90eXBlX3NpemUgcGFydF90eXBlX3NjYWxlIHBhcnRfdHlwZV9vcmllbnRhdGlvbiBwYXJ0X3R5cGVfbGlmZSAnICtcbiAgICAgICdwYXJ0X3R5cGVfc3RlcCBwYXJ0X3R5cGVfZGVhdGggcGFydF90eXBlX3NwZWVkIHBhcnRfdHlwZV9kaXJlY3Rpb24gJyArXG4gICAgICAncGFydF90eXBlX2dyYXZpdHkgcGFydF90eXBlX2NvbG91cjEgcGFydF90eXBlX2NvbG91cjIgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cjMgcGFydF90eXBlX2NvbG91cl9taXggcGFydF90eXBlX2NvbG91cl9yZ2IgJyArXG4gICAgICAncGFydF90eXBlX2NvbG91cl9oc3YgcGFydF90eXBlX2NvbG9yMSBwYXJ0X3R5cGVfY29sb3IyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcjMgcGFydF90eXBlX2NvbG9yX21peCBwYXJ0X3R5cGVfY29sb3JfcmdiICcgK1xuICAgICAgJ3BhcnRfdHlwZV9jb2xvcl9oc3YgcGFydF90eXBlX2FscGhhMSBwYXJ0X3R5cGVfYWxwaGEyICcgK1xuICAgICAgJ3BhcnRfdHlwZV9hbHBoYTMgcGFydF90eXBlX2JsZW5kIHBhcnRfc3lzdGVtX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9jcmVhdGVfbGF5ZXIgcGFydF9zeXN0ZW1fZGVzdHJveSBwYXJ0X3N5c3RlbV9leGlzdHMgJyArXG4gICAgICAncGFydF9zeXN0ZW1fY2xlYXIgcGFydF9zeXN0ZW1fZHJhd19vcmRlciBwYXJ0X3N5c3RlbV9kZXB0aCAnICtcbiAgICAgICdwYXJ0X3N5c3RlbV9wb3NpdGlvbiBwYXJ0X3N5c3RlbV9hdXRvbWF0aWNfdXBkYXRlICcgK1xuICAgICAgJ3BhcnRfc3lzdGVtX2F1dG9tYXRpY19kcmF3IHBhcnRfc3lzdGVtX3VwZGF0ZSBwYXJ0X3N5c3RlbV9kcmF3aXQgJyArXG4gICAgICAncGFydF9zeXN0ZW1fZ2V0X2xheWVyIHBhcnRfc3lzdGVtX2xheWVyIHBhcnRfcGFydGljbGVzX2NyZWF0ZSAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jcmVhdGVfY29sb3VyIHBhcnRfcGFydGljbGVzX2NyZWF0ZV9jb2xvciAnICtcbiAgICAgICdwYXJ0X3BhcnRpY2xlc19jbGVhciBwYXJ0X3BhcnRpY2xlc19jb3VudCBwYXJ0X2VtaXR0ZXJfY3JlYXRlICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9kZXN0cm95IHBhcnRfZW1pdHRlcl9kZXN0cm95X2FsbCBwYXJ0X2VtaXR0ZXJfZXhpc3RzICcgK1xuICAgICAgJ3BhcnRfZW1pdHRlcl9jbGVhciBwYXJ0X2VtaXR0ZXJfcmVnaW9uIHBhcnRfZW1pdHRlcl9idXJzdCAnICtcbiAgICAgICdwYXJ0X2VtaXR0ZXJfc3RyZWFtIGV4dGVybmFsX2NhbGwgZXh0ZXJuYWxfZGVmaW5lIGV4dGVybmFsX2ZyZWUgJyArXG4gICAgICAnd2luZG93X2hhbmRsZSB3aW5kb3dfZGV2aWNlIG1hdHJpeF9nZXQgbWF0cml4X3NldCAnICtcbiAgICAgICdtYXRyaXhfYnVpbGRfaWRlbnRpdHkgbWF0cml4X2J1aWxkIG1hdHJpeF9idWlsZF9sb29rYXQgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fb3J0aG8gbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmUgJyArXG4gICAgICAnbWF0cml4X2J1aWxkX3Byb2plY3Rpb25fcGVyc3BlY3RpdmVfZm92IG1hdHJpeF9tdWx0aXBseSAnICtcbiAgICAgICdtYXRyaXhfdHJhbnNmb3JtX3ZlcnRleCBtYXRyaXhfc3RhY2tfcHVzaCBtYXRyaXhfc3RhY2tfcG9wICcgK1xuICAgICAgJ21hdHJpeF9zdGFja19tdWx0aXBseSBtYXRyaXhfc3RhY2tfc2V0IG1hdHJpeF9zdGFja19jbGVhciAnICtcbiAgICAgICdtYXRyaXhfc3RhY2tfdG9wIG1hdHJpeF9zdGFja19pc19lbXB0eSBicm93c2VyX2lucHV0X2NhcHR1cmUgJyArXG4gICAgICAnb3NfZ2V0X2NvbmZpZyBvc19nZXRfaW5mbyBvc19nZXRfbGFuZ3VhZ2Ugb3NfZ2V0X3JlZ2lvbiAnICtcbiAgICAgICdvc19sb2NrX29yaWVudGF0aW9uIGRpc3BsYXlfZ2V0X2RwaV94IGRpc3BsYXlfZ2V0X2RwaV95ICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X2d1aV9zaXplIGRpc3BsYXlfc2V0X2d1aV9tYXhpbWlzZSAnICtcbiAgICAgICdkaXNwbGF5X3NldF9ndWlfbWF4aW1pemUgZGV2aWNlX21vdXNlX2RiY2xpY2tfZW5hYmxlICcgK1xuICAgICAgJ2Rpc3BsYXlfc2V0X3RpbWluZ19tZXRob2QgZGlzcGxheV9nZXRfdGltaW5nX21ldGhvZCAnICtcbiAgICAgICdkaXNwbGF5X3NldF9zbGVlcF9tYXJnaW4gZGlzcGxheV9nZXRfc2xlZXBfbWFyZ2luIHZpcnR1YWxfa2V5X2FkZCAnICtcbiAgICAgICd2aXJ0dWFsX2tleV9oaWRlIHZpcnR1YWxfa2V5X2RlbGV0ZSB2aXJ0dWFsX2tleV9zaG93ICcgK1xuICAgICAgJ2RyYXdfZW5hYmxlX2RyYXdldmVudCBkcmF3X2VuYWJsZV9zd2ZfYWEgZHJhd19zZXRfc3dmX2FhX2xldmVsICcgK1xuICAgICAgJ2RyYXdfZ2V0X3N3Zl9hYV9sZXZlbCBkcmF3X3RleHR1cmVfZmx1c2ggZHJhd19mbHVzaCAnICtcbiAgICAgICdncHVfc2V0X2JsZW5kZW5hYmxlIGdwdV9zZXRfenRlc3RlbmFibGUgZ3B1X3NldF96ZnVuYyAnICtcbiAgICAgICdncHVfc2V0X3p3cml0ZWVuYWJsZSBncHVfc2V0X2xpZ2h0aW5nZW5hYmxlIGdwdV9zZXRfZm9nICcgK1xuICAgICAgJ2dwdV9zZXRfY3VsbG1vZGUgZ3B1X3NldF9ibGVuZG1vZGUgZ3B1X3NldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfc2V0X2NvbG9yd3JpdGVlbmFibGUgJyArXG4gICAgICAnZ3B1X3NldF9jb2xvdXJ3cml0ZWVuYWJsZSBncHVfc2V0X2FscGhhdGVzdGVuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X2FscGhhdGVzdHJlZiBncHVfc2V0X2FscGhhdGVzdGZ1bmMgZ3B1X3NldF90ZXhmaWx0ZXIgJyArXG4gICAgICAnZ3B1X3NldF90ZXhmaWx0ZXJfZXh0IGdwdV9zZXRfdGV4cmVwZWF0IGdwdV9zZXRfdGV4cmVwZWF0X2V4dCAnICtcbiAgICAgICdncHVfc2V0X3RleF9maWx0ZXIgZ3B1X3NldF90ZXhfZmlsdGVyX2V4dCBncHVfc2V0X3RleF9yZXBlYXQgJyArXG4gICAgICAnZ3B1X3NldF90ZXhfcmVwZWF0X2V4dCBncHVfc2V0X3RleF9taXBfZmlsdGVyICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9maWx0ZXJfZXh0IGdwdV9zZXRfdGV4X21pcF9iaWFzICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21pcF9iaWFzX2V4dCBncHVfc2V0X3RleF9taW5fbWlwIGdwdV9zZXRfdGV4X21pbl9taXBfZXh0ICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9taXAgZ3B1X3NldF90ZXhfbWF4X21pcF9leHQgZ3B1X3NldF90ZXhfbWF4X2FuaXNvICcgK1xuICAgICAgJ2dwdV9zZXRfdGV4X21heF9hbmlzb19leHQgZ3B1X3NldF90ZXhfbWlwX2VuYWJsZSAnICtcbiAgICAgICdncHVfc2V0X3RleF9taXBfZW5hYmxlX2V4dCBncHVfZ2V0X2JsZW5kZW5hYmxlIGdwdV9nZXRfenRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF96ZnVuYyBncHVfZ2V0X3p3cml0ZWVuYWJsZSBncHVfZ2V0X2xpZ2h0aW5nZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfZm9nIGdwdV9nZXRfY3VsbG1vZGUgZ3B1X2dldF9ibGVuZG1vZGUgZ3B1X2dldF9ibGVuZG1vZGVfZXh0ICcgK1xuICAgICAgJ2dwdV9nZXRfYmxlbmRtb2RlX2V4dF9zZXBhbHBoYSBncHVfZ2V0X2JsZW5kbW9kZV9zcmMgJyArXG4gICAgICAnZ3B1X2dldF9ibGVuZG1vZGVfZGVzdCBncHVfZ2V0X2JsZW5kbW9kZV9zcmNhbHBoYSAnICtcbiAgICAgICdncHVfZ2V0X2JsZW5kbW9kZV9kZXN0YWxwaGEgZ3B1X2dldF9jb2xvcndyaXRlZW5hYmxlICcgK1xuICAgICAgJ2dwdV9nZXRfY29sb3Vyd3JpdGVlbmFibGUgZ3B1X2dldF9hbHBoYXRlc3RlbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF9hbHBoYXRlc3RyZWYgZ3B1X2dldF9hbHBoYXRlc3RmdW5jIGdwdV9nZXRfdGV4ZmlsdGVyICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4ZmlsdGVyX2V4dCBncHVfZ2V0X3RleHJlcGVhdCBncHVfZ2V0X3RleHJlcGVhdF9leHQgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfZmlsdGVyIGdwdV9nZXRfdGV4X2ZpbHRlcl9leHQgZ3B1X2dldF90ZXhfcmVwZWF0ICcgK1xuICAgICAgJ2dwdV9nZXRfdGV4X3JlcGVhdF9leHQgZ3B1X2dldF90ZXhfbWlwX2ZpbHRlciAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfZmlsdGVyX2V4dCBncHVfZ2V0X3RleF9taXBfYmlhcyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9taXBfYmlhc19leHQgZ3B1X2dldF90ZXhfbWluX21pcCBncHVfZ2V0X3RleF9taW5fbWlwX2V4dCAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfbWlwIGdwdV9nZXRfdGV4X21heF9taXBfZXh0IGdwdV9nZXRfdGV4X21heF9hbmlzbyAnICtcbiAgICAgICdncHVfZ2V0X3RleF9tYXhfYW5pc29fZXh0IGdwdV9nZXRfdGV4X21pcF9lbmFibGUgJyArXG4gICAgICAnZ3B1X2dldF90ZXhfbWlwX2VuYWJsZV9leHQgZ3B1X3B1c2hfc3RhdGUgZ3B1X3BvcF9zdGF0ZSAnICtcbiAgICAgICdncHVfZ2V0X3N0YXRlIGdwdV9zZXRfc3RhdGUgZHJhd19saWdodF9kZWZpbmVfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2RlZmluZV9kaXJlY3Rpb24gZHJhd19saWdodF9kZWZpbmVfcG9pbnQgJyArXG4gICAgICAnZHJhd19saWdodF9lbmFibGUgZHJhd19zZXRfbGlnaHRpbmcgZHJhd19saWdodF9nZXRfYW1iaWVudCAnICtcbiAgICAgICdkcmF3X2xpZ2h0X2dldCBkcmF3X2dldF9saWdodGluZyBzaG9wX2xlYXZlX3JhdGluZyB1cmxfZ2V0X2RvbWFpbiAnICtcbiAgICAgICd1cmxfb3BlbiB1cmxfb3Blbl9leHQgdXJsX29wZW5fZnVsbCBnZXRfdGltZXIgYWNoaWV2ZW1lbnRfbG9naW4gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbG9nb3V0IGFjaGlldmVtZW50X3Bvc3QgYWNoaWV2ZW1lbnRfaW5jcmVtZW50ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Bvc3Rfc2NvcmUgYWNoaWV2ZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnRzIGFjaGlldmVtZW50X3Nob3dfbGVhZGVyYm9hcmRzICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2xvYWRfZnJpZW5kcyBhY2hpZXZlbWVudF9sb2FkX2xlYWRlcmJvYXJkICcgK1xuICAgICAgJ2FjaGlldmVtZW50X3NlbmRfY2hhbGxlbmdlIGFjaGlldmVtZW50X2xvYWRfcHJvZ3Jlc3MgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfcmVzZXQgYWNoaWV2ZW1lbnRfbG9naW5fc3RhdHVzIGFjaGlldmVtZW50X2dldF9waWMgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19jaGFsbGVuZ2Vfbm90aWZpY2F0aW9ucyBhY2hpZXZlbWVudF9nZXRfY2hhbGxlbmdlcyAnICtcbiAgICAgICdhY2hpZXZlbWVudF9ldmVudCBhY2hpZXZlbWVudF9zaG93IGFjaGlldmVtZW50X2dldF9pbmZvICcgK1xuICAgICAgJ2Nsb3VkX2ZpbGVfc2F2ZSBjbG91ZF9zdHJpbmdfc2F2ZSBjbG91ZF9zeW5jaHJvbmlzZSBhZHNfZW5hYmxlICcgK1xuICAgICAgJ2Fkc19kaXNhYmxlIGFkc19zZXR1cCBhZHNfZW5nYWdlbWVudF9sYXVuY2ggYWRzX2VuZ2FnZW1lbnRfYXZhaWxhYmxlICcgK1xuICAgICAgJ2Fkc19lbmdhZ2VtZW50X2FjdGl2ZSBhZHNfZXZlbnQgYWRzX2V2ZW50X3ByZWxvYWQgJyArXG4gICAgICAnYWRzX3NldF9yZXdhcmRfY2FsbGJhY2sgYWRzX2dldF9kaXNwbGF5X2hlaWdodCBhZHNfZ2V0X2Rpc3BsYXlfd2lkdGggJyArXG4gICAgICAnYWRzX21vdmUgYWRzX2ludGVyc3RpdGlhbF9hdmFpbGFibGUgYWRzX2ludGVyc3RpdGlhbF9kaXNwbGF5ICcgK1xuICAgICAgJ2RldmljZV9nZXRfdGlsdF94IGRldmljZV9nZXRfdGlsdF95IGRldmljZV9nZXRfdGlsdF96ICcgK1xuICAgICAgJ2RldmljZV9pc19rZXlwYWRfb3BlbiBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV9jaGVja19idXR0b25fcHJlc3NlZCBkZXZpY2VfbW91c2VfY2hlY2tfYnV0dG9uX3JlbGVhc2VkICcgK1xuICAgICAgJ2RldmljZV9tb3VzZV94IGRldmljZV9tb3VzZV95IGRldmljZV9tb3VzZV9yYXdfeCBkZXZpY2VfbW91c2VfcmF3X3kgJyArXG4gICAgICAnZGV2aWNlX21vdXNlX3hfdG9fZ3VpIGRldmljZV9tb3VzZV95X3RvX2d1aSBpYXBfYWN0aXZhdGUgaWFwX3N0YXR1cyAnICtcbiAgICAgICdpYXBfZW51bWVyYXRlX3Byb2R1Y3RzIGlhcF9yZXN0b3JlX2FsbCBpYXBfYWNxdWlyZSBpYXBfY29uc3VtZSAnICtcbiAgICAgICdpYXBfcHJvZHVjdF9kZXRhaWxzIGlhcF9wdXJjaGFzZV9kZXRhaWxzIGZhY2Vib29rX2luaXQgJyArXG4gICAgICAnZmFjZWJvb2tfbG9naW4gZmFjZWJvb2tfc3RhdHVzIGZhY2Vib29rX2dyYXBoX3JlcXVlc3QgJyArXG4gICAgICAnZmFjZWJvb2tfZGlhbG9nIGZhY2Vib29rX2xvZ291dCBmYWNlYm9va19sYXVuY2hfb2ZmZXJ3YWxsICcgK1xuICAgICAgJ2ZhY2Vib29rX3Bvc3RfbWVzc2FnZSBmYWNlYm9va19zZW5kX2ludml0ZSBmYWNlYm9va191c2VyX2lkICcgK1xuICAgICAgJ2ZhY2Vib29rX2FjY2Vzc3Rva2VuIGZhY2Vib29rX2NoZWNrX3Blcm1pc3Npb24gJyArXG4gICAgICAnZmFjZWJvb2tfcmVxdWVzdF9yZWFkX3Blcm1pc3Npb25zICcgK1xuICAgICAgJ2ZhY2Vib29rX3JlcXVlc3RfcHVibGlzaF9wZXJtaXNzaW9ucyBnYW1lcGFkX2lzX3N1cHBvcnRlZCAnICtcbiAgICAgICdnYW1lcGFkX2dldF9kZXZpY2VfY291bnQgZ2FtZXBhZF9pc19jb25uZWN0ZWQgJyArXG4gICAgICAnZ2FtZXBhZF9nZXRfZGVzY3JpcHRpb24gZ2FtZXBhZF9nZXRfYnV0dG9uX3RocmVzaG9sZCAnICtcbiAgICAgICdnYW1lcGFkX3NldF9idXR0b25fdGhyZXNob2xkIGdhbWVwYWRfZ2V0X2F4aXNfZGVhZHpvbmUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfYXhpc19kZWFkem9uZSBnYW1lcGFkX2J1dHRvbl9jb3VudCBnYW1lcGFkX2J1dHRvbl9jaGVjayAnICtcbiAgICAgICdnYW1lcGFkX2J1dHRvbl9jaGVja19wcmVzc2VkIGdhbWVwYWRfYnV0dG9uX2NoZWNrX3JlbGVhc2VkICcgK1xuICAgICAgJ2dhbWVwYWRfYnV0dG9uX3ZhbHVlIGdhbWVwYWRfYXhpc19jb3VudCBnYW1lcGFkX2F4aXNfdmFsdWUgJyArXG4gICAgICAnZ2FtZXBhZF9zZXRfdmlicmF0aW9uIGdhbWVwYWRfc2V0X2NvbG91ciBnYW1lcGFkX3NldF9jb2xvciAnICtcbiAgICAgICdvc19pc19wYXVzZWQgd2luZG93X2hhc19mb2N1cyBjb2RlX2lzX2NvbXBpbGVkIGh0dHBfZ2V0ICcgK1xuICAgICAgJ2h0dHBfZ2V0X2ZpbGUgaHR0cF9wb3N0X3N0cmluZyBodHRwX3JlcXVlc3QganNvbl9lbmNvZGUganNvbl9kZWNvZGUgJyArXG4gICAgICAnemlwX3VuemlwIGxvYWRfY3N2IGJhc2U2NF9lbmNvZGUgYmFzZTY0X2RlY29kZSBtZDVfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnbWQ1X3N0cmluZ191dGY4IG1kNV9maWxlIG9zX2lzX25ldHdvcmtfY29ubmVjdGVkIHNoYTFfc3RyaW5nX3VuaWNvZGUgJyArXG4gICAgICAnc2hhMV9zdHJpbmdfdXRmOCBzaGExX2ZpbGUgb3NfcG93ZXJzYXZlX2VuYWJsZSBhbmFseXRpY3NfZXZlbnQgJyArXG4gICAgICAnYW5hbHl0aWNzX2V2ZW50X2V4dCB3aW44X2xpdmV0aWxlX3RpbGVfbm90aWZpY2F0aW9uICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfdGlsZV9jbGVhciB3aW44X2xpdmV0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX2JhZGdlX2NsZWFyIHdpbjhfbGl2ZXRpbGVfcXVldWVfZW5hYmxlICcgK1xuICAgICAgJ3dpbjhfc2Vjb25kYXJ5dGlsZV9waW4gd2luOF9zZWNvbmRhcnl0aWxlX2JhZGdlX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICd3aW44X3NlY29uZGFyeXRpbGVfZGVsZXRlIHdpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2JlZ2luICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3NlY29uZGFyeV9iZWdpbiAnICtcbiAgICAgICd3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9leHBpcnkgd2luOF9saXZldGlsZV9ub3RpZmljYXRpb25fdGFnICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX3RleHRfYWRkICcgK1xuICAgICAgJ3dpbjhfbGl2ZXRpbGVfbm90aWZpY2F0aW9uX2ltYWdlX2FkZCB3aW44X2xpdmV0aWxlX25vdGlmaWNhdGlvbl9lbmQgJyArXG4gICAgICAnd2luOF9hcHBiYXJfZW5hYmxlIHdpbjhfYXBwYmFyX2FkZF9lbGVtZW50ICcgK1xuICAgICAgJ3dpbjhfYXBwYmFyX3JlbW92ZV9lbGVtZW50IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfZW50cnkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2FkZF9odG1sX2VudHJ5IHdpbjhfc2V0dGluZ3NjaGFybV9hZGRfeGFtbF9lbnRyeSAnICtcbiAgICAgICd3aW44X3NldHRpbmdzY2hhcm1fc2V0X3hhbWxfcHJvcGVydHkgJyArXG4gICAgICAnd2luOF9zZXR0aW5nc2NoYXJtX2dldF94YW1sX3Byb3BlcnR5IHdpbjhfc2V0dGluZ3NjaGFybV9yZW1vdmVfZW50cnkgJyArXG4gICAgICAnd2luOF9zaGFyZV9pbWFnZSB3aW44X3NoYXJlX3NjcmVlbnNob3Qgd2luOF9zaGFyZV9maWxlICcgK1xuICAgICAgJ3dpbjhfc2hhcmVfdXJsIHdpbjhfc2hhcmVfdGV4dCB3aW44X3NlYXJjaF9lbmFibGUgJyArXG4gICAgICAnd2luOF9zZWFyY2hfZGlzYWJsZSB3aW44X3NlYXJjaF9hZGRfc3VnZ2VzdGlvbnMgJyArXG4gICAgICAnd2luOF9kZXZpY2VfdG91Y2hzY3JlZW5fYXZhaWxhYmxlIHdpbjhfbGljZW5zZV9pbml0aWFsaXplX3NhbmRib3ggJyArXG4gICAgICAnd2luOF9saWNlbnNlX3RyaWFsX3ZlcnNpb24gd2lucGhvbmVfbGljZW5zZV90cmlhbF92ZXJzaW9uICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfdGl0bGUgd2lucGhvbmVfdGlsZV9jb3VudCB3aW5waG9uZV90aWxlX2JhY2tfdGl0bGUgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnQgd2lucGhvbmVfdGlsZV9iYWNrX2NvbnRlbnRfd2lkZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2Zyb250X2ltYWdlIHdpbnBob25lX3RpbGVfZnJvbnRfaW1hZ2Vfc21hbGwgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9mcm9udF9pbWFnZV93aWRlIHdpbnBob25lX3RpbGVfYmFja19pbWFnZSAnICtcbiAgICAgICd3aW5waG9uZV90aWxlX2JhY2tfaW1hZ2Vfd2lkZSB3aW5waG9uZV90aWxlX2JhY2tncm91bmRfY29sb3VyICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfYmFja2dyb3VuZF9jb2xvciB3aW5waG9uZV90aWxlX2ljb25faW1hZ2UgJyArXG4gICAgICAnd2lucGhvbmVfdGlsZV9zbWFsbF9pY29uX2ltYWdlIHdpbnBob25lX3RpbGVfd2lkZV9jb250ZW50ICcgK1xuICAgICAgJ3dpbnBob25lX3RpbGVfY3ljbGVfaW1hZ2VzIHdpbnBob25lX3RpbGVfc21hbGxfYmFja2dyb3VuZF9pbWFnZSAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2NyZWF0ZSBwaHlzaWNzX3dvcmxkX2dyYXZpdHkgJyArXG4gICAgICAncGh5c2ljc193b3JsZF91cGRhdGVfc3BlZWQgcGh5c2ljc193b3JsZF91cGRhdGVfaXRlcmF0aW9ucyAnICtcbiAgICAgICdwaHlzaWNzX3dvcmxkX2RyYXdfZGVidWcgcGh5c2ljc19wYXVzZV9lbmFibGUgcGh5c2ljc19maXh0dXJlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2tpbmVtYXRpYyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2RlbnNpdHkgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9hd2FrZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X3Jlc3RpdHV0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZml4dHVyZV9zZXRfZnJpY3Rpb24gcGh5c2ljc19maXh0dXJlX3NldF9jb2xsaXNpb25fZ3JvdXAgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9zZW5zb3IgcGh5c2ljc19maXh0dXJlX3NldF9saW5lYXJfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2FuZ3VsYXJfZGFtcGluZyBwaHlzaWNzX2ZpeHR1cmVfc2V0X2NpcmNsZV9zaGFwZSAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfc2V0X2JveF9zaGFwZSBwaHlzaWNzX2ZpeHR1cmVfc2V0X2VkZ2Vfc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX3NldF9wb2x5Z29uX3NoYXBlIHBoeXNpY3NfZml4dHVyZV9zZXRfY2hhaW5fc2hhcGUgJyArXG4gICAgICAncGh5c2ljc19maXh0dXJlX2FkZF9wb2ludCBwaHlzaWNzX2ZpeHR1cmVfYmluZCAnICtcbiAgICAgICdwaHlzaWNzX2ZpeHR1cmVfYmluZF9leHQgcGh5c2ljc19maXh0dXJlX2RlbGV0ZSBwaHlzaWNzX2FwcGx5X2ZvcmNlICcgK1xuICAgICAgJ3BoeXNpY3NfYXBwbHlfaW1wdWxzZSBwaHlzaWNzX2FwcGx5X2FuZ3VsYXJfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X2xvY2FsX2ZvcmNlIHBoeXNpY3NfYXBwbHlfbG9jYWxfaW1wdWxzZSAnICtcbiAgICAgICdwaHlzaWNzX2FwcGx5X3RvcnF1ZSBwaHlzaWNzX21hc3NfcHJvcGVydGllcyBwaHlzaWNzX2RyYXdfZGVidWcgJyArXG4gICAgICAncGh5c2ljc190ZXN0X292ZXJsYXAgcGh5c2ljc19yZW1vdmVfZml4dHVyZSBwaHlzaWNzX3NldF9mcmljdGlvbiAnICtcbiAgICAgICdwaHlzaWNzX3NldF9kZW5zaXR5IHBoeXNpY3Nfc2V0X3Jlc3RpdHV0aW9uIHBoeXNpY3NfZ2V0X2ZyaWN0aW9uICcgK1xuICAgICAgJ3BoeXNpY3NfZ2V0X2RlbnNpdHkgcGh5c2ljc19nZXRfcmVzdGl0dXRpb24gJyArXG4gICAgICAncGh5c2ljc19qb2ludF9kaXN0YW5jZV9jcmVhdGUgcGh5c2ljc19qb2ludF9yb3BlX2NyZWF0ZSAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X3Jldm9sdXRlX2NyZWF0ZSBwaHlzaWNzX2pvaW50X3ByaXNtYXRpY19jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9wdWxsZXlfY3JlYXRlIHBoeXNpY3Nfam9pbnRfd2hlZWxfY3JlYXRlICcgK1xuICAgICAgJ3BoeXNpY3Nfam9pbnRfd2VsZF9jcmVhdGUgcGh5c2ljc19qb2ludF9mcmljdGlvbl9jcmVhdGUgJyArXG4gICAgICAncGh5c2ljc19qb2ludF9nZWFyX2NyZWF0ZSBwaHlzaWNzX2pvaW50X2VuYWJsZV9tb3RvciAnICtcbiAgICAgICdwaHlzaWNzX2pvaW50X2dldF92YWx1ZSBwaHlzaWNzX2pvaW50X3NldF92YWx1ZSBwaHlzaWNzX2pvaW50X2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2NyZWF0ZSBwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2RlbGV0ZV9yZWdpb25fY2lyY2xlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZGVsZXRlX3JlZ2lvbl9ib3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9kZWxldGVfcmVnaW9uX3BvbHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9zZXRfY2F0ZWdvcnlfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9kcmF3ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZHJhd19leHQgcGh5c2ljc19wYXJ0aWNsZV9jb3VudCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dldF9kYXRhIHBoeXNpY3NfcGFydGljbGVfZ2V0X2RhdGFfcGFydGljbGUgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9iZWdpbiBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2NpcmNsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2JveCBwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX3BvbHlnb24gJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9hZGRfcG9pbnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9lbmQgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9qb2luIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZGVsZXRlICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ3JvdXBfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfZGF0YSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF9tYXNzIHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X2luZXJ0aWEgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfY2VudHJlX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3ggJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfdmVsX3kgcGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nX3ZlbCAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX2dyb3VwX2dldF94IHBoeXNpY3NfcGFydGljbGVfZ3JvdXBfZ2V0X3kgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9ncm91cF9nZXRfYW5nbGUgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZ3JvdXBfZmxhZ3MgJyArXG4gICAgICAncGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3JvdXBfZmxhZ3MgcGh5c2ljc19wYXJ0aWNsZV9nZXRfbWF4X2NvdW50ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X3JhZGl1cyBwaHlzaWNzX3BhcnRpY2xlX2dldF9kZW5zaXR5ICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfZ2V0X2RhbXBpbmcgcGh5c2ljc19wYXJ0aWNsZV9nZXRfZ3Jhdml0eV9zY2FsZSAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9tYXhfY291bnQgcGh5c2ljc19wYXJ0aWNsZV9zZXRfcmFkaXVzICcgK1xuICAgICAgJ3BoeXNpY3NfcGFydGljbGVfc2V0X2RlbnNpdHkgcGh5c2ljc19wYXJ0aWNsZV9zZXRfZGFtcGluZyAnICtcbiAgICAgICdwaHlzaWNzX3BhcnRpY2xlX3NldF9ncmF2aXR5X3NjYWxlIG5ldHdvcmtfY3JlYXRlX3NvY2tldCAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zb2NrZXRfZXh0IG5ldHdvcmtfY3JlYXRlX3NlcnZlciAnICtcbiAgICAgICduZXR3b3JrX2NyZWF0ZV9zZXJ2ZXJfcmF3IG5ldHdvcmtfY29ubmVjdCBuZXR3b3JrX2Nvbm5lY3RfcmF3ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF9wYWNrZXQgbmV0d29ya19zZW5kX3JhdyBuZXR3b3JrX3NlbmRfYnJvYWRjYXN0ICcgK1xuICAgICAgJ25ldHdvcmtfc2VuZF91ZHAgbmV0d29ya19zZW5kX3VkcF9yYXcgbmV0d29ya19zZXRfdGltZW91dCAnICtcbiAgICAgICduZXR3b3JrX3NldF9jb25maWcgbmV0d29ya19yZXNvbHZlIG5ldHdvcmtfZGVzdHJveSBidWZmZXJfY3JlYXRlICcgK1xuICAgICAgJ2J1ZmZlcl93cml0ZSBidWZmZXJfcmVhZCBidWZmZXJfc2VlayBidWZmZXJfZ2V0X3N1cmZhY2UgJyArXG4gICAgICAnYnVmZmVyX3NldF9zdXJmYWNlIGJ1ZmZlcl9kZWxldGUgYnVmZmVyX2V4aXN0cyBidWZmZXJfZ2V0X3R5cGUgJyArXG4gICAgICAnYnVmZmVyX2dldF9hbGlnbm1lbnQgYnVmZmVyX3Bva2UgYnVmZmVyX3BlZWsgYnVmZmVyX3NhdmUgJyArXG4gICAgICAnYnVmZmVyX3NhdmVfZXh0IGJ1ZmZlcl9sb2FkIGJ1ZmZlcl9sb2FkX2V4dCBidWZmZXJfbG9hZF9wYXJ0aWFsICcgK1xuICAgICAgJ2J1ZmZlcl9jb3B5IGJ1ZmZlcl9maWxsIGJ1ZmZlcl9nZXRfc2l6ZSBidWZmZXJfdGVsbCBidWZmZXJfcmVzaXplICcgK1xuICAgICAgJ2J1ZmZlcl9tZDUgYnVmZmVyX3NoYTEgYnVmZmVyX2Jhc2U2NF9lbmNvZGUgYnVmZmVyX2Jhc2U2NF9kZWNvZGUgJyArXG4gICAgICAnYnVmZmVyX2Jhc2U2NF9kZWNvZGVfZXh0IGJ1ZmZlcl9zaXplb2YgYnVmZmVyX2dldF9hZGRyZXNzICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyICcgK1xuICAgICAgJ2J1ZmZlcl9jcmVhdGVfZnJvbV92ZXJ0ZXhfYnVmZmVyX2V4dCBidWZmZXJfY29weV9mcm9tX3ZlcnRleF9idWZmZXIgJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2JlZ2luIGJ1ZmZlcl9hc3luY19ncm91cF9vcHRpb24gJyArXG4gICAgICAnYnVmZmVyX2FzeW5jX2dyb3VwX2VuZCBidWZmZXJfbG9hZF9hc3luYyBidWZmZXJfc2F2ZV9hc3luYyAnICtcbiAgICAgICdnbWxfcmVsZWFzZV9tb2RlIGdtbF9wcmFnbWEgc3RlYW1fYWN0aXZhdGVfb3ZlcmxheSAnICtcbiAgICAgICdzdGVhbV9pc19vdmVybGF5X2VuYWJsZWQgc3RlYW1faXNfb3ZlcmxheV9hY3RpdmF0ZWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3BlcnNvbmFfbmFtZSBzdGVhbV9pbml0aWFsaXNlZCAnICtcbiAgICAgICdzdGVhbV9pc19jbG91ZF9lbmFibGVkX2Zvcl9hcHAgc3RlYW1faXNfY2xvdWRfZW5hYmxlZF9mb3JfYWNjb3VudCAnICtcbiAgICAgICdzdGVhbV9maWxlX3BlcnNpc3RlZCBzdGVhbV9nZXRfcXVvdGFfdG90YWwgc3RlYW1fZ2V0X3F1b3RhX2ZyZWUgJyArXG4gICAgICAnc3RlYW1fZmlsZV93cml0ZSBzdGVhbV9maWxlX3dyaXRlX2ZpbGUgc3RlYW1fZmlsZV9yZWFkICcgK1xuICAgICAgJ3N0ZWFtX2ZpbGVfZGVsZXRlIHN0ZWFtX2ZpbGVfZXhpc3RzIHN0ZWFtX2ZpbGVfc2l6ZSBzdGVhbV9maWxlX3NoYXJlICcgK1xuICAgICAgJ3N0ZWFtX2lzX3NjcmVlbnNob3RfcmVxdWVzdGVkIHN0ZWFtX3NlbmRfc2NyZWVuc2hvdCAnICtcbiAgICAgICdzdGVhbV9pc191c2VyX2xvZ2dlZF9vbiBzdGVhbV9nZXRfdXNlcl9zdGVhbV9pZCBzdGVhbV91c2VyX293bnNfZGxjICcgK1xuICAgICAgJ3N0ZWFtX3VzZXJfaW5zdGFsbGVkX2RsYyBzdGVhbV9zZXRfYWNoaWV2ZW1lbnQgc3RlYW1fZ2V0X2FjaGlldmVtZW50ICcgK1xuICAgICAgJ3N0ZWFtX2NsZWFyX2FjaGlldmVtZW50IHN0ZWFtX3NldF9zdGF0X2ludCBzdGVhbV9zZXRfc3RhdF9mbG9hdCAnICtcbiAgICAgICdzdGVhbV9zZXRfc3RhdF9hdmdfcmF0ZSBzdGVhbV9nZXRfc3RhdF9pbnQgc3RlYW1fZ2V0X3N0YXRfZmxvYXQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3N0YXRfYXZnX3JhdGUgc3RlYW1fcmVzZXRfYWxsX3N0YXRzICcgK1xuICAgICAgJ3N0ZWFtX3Jlc2V0X2FsbF9zdGF0c19hY2hpZXZlbWVudHMgc3RlYW1fc3RhdHNfcmVhZHkgJyArXG4gICAgICAnc3RlYW1fY3JlYXRlX2xlYWRlcmJvYXJkIHN0ZWFtX3VwbG9hZF9zY29yZSBzdGVhbV91cGxvYWRfc2NvcmVfZXh0ICcgK1xuICAgICAgJ3N0ZWFtX2Rvd25sb2FkX3Njb3Jlc19hcm91bmRfdXNlciBzdGVhbV9kb3dubG9hZF9zY29yZXMgJyArXG4gICAgICAnc3RlYW1fZG93bmxvYWRfZnJpZW5kc19zY29yZXMgc3RlYW1fdXBsb2FkX3Njb3JlX2J1ZmZlciAnICtcbiAgICAgICdzdGVhbV91cGxvYWRfc2NvcmVfYnVmZmVyX2V4dCBzdGVhbV9jdXJyZW50X2dhbWVfbGFuZ3VhZ2UgJyArXG4gICAgICAnc3RlYW1fYXZhaWxhYmxlX2xhbmd1YWdlcyBzdGVhbV9hY3RpdmF0ZV9vdmVybGF5X2Jyb3dzZXIgJyArXG4gICAgICAnc3RlYW1fYWN0aXZhdGVfb3ZlcmxheV91c2VyIHN0ZWFtX2FjdGl2YXRlX292ZXJsYXlfc3RvcmUgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfcGVyc29uYV9uYW1lIHN0ZWFtX2dldF9hcHBfaWQgJyArXG4gICAgICAnc3RlYW1fZ2V0X3VzZXJfYWNjb3VudF9pZCBzdGVhbV91Z2NfZG93bmxvYWQgc3RlYW1fdWdjX2NyZWF0ZV9pdGVtICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zdGFydF9pdGVtX3VwZGF0ZSBzdGVhbV91Z2Nfc2V0X2l0ZW1fdGl0bGUgJyArXG4gICAgICAnc3RlYW1fdWdjX3NldF9pdGVtX2Rlc2NyaXB0aW9uIHN0ZWFtX3VnY19zZXRfaXRlbV92aXNpYmlsaXR5ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV90YWdzIHN0ZWFtX3VnY19zZXRfaXRlbV9jb250ZW50ICcgK1xuICAgICAgJ3N0ZWFtX3VnY19zZXRfaXRlbV9wcmV2aWV3IHN0ZWFtX3VnY19zdWJtaXRfaXRlbV91cGRhdGUgJyArXG4gICAgICAnc3RlYW1fdWdjX2dldF9pdGVtX3VwZGF0ZV9wcm9ncmVzcyBzdGVhbV91Z2Nfc3Vic2NyaWJlX2l0ZW0gJyArXG4gICAgICAnc3RlYW1fdWdjX3Vuc3Vic2NyaWJlX2l0ZW0gc3RlYW1fdWdjX251bV9zdWJzY3JpYmVkX2l0ZW1zICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfc3Vic2NyaWJlZF9pdGVtcyBzdGVhbV91Z2NfZ2V0X2l0ZW1faW5zdGFsbF9pbmZvICcgK1xuICAgICAgJ3N0ZWFtX3VnY19nZXRfaXRlbV91cGRhdGVfaW5mbyBzdGVhbV91Z2NfcmVxdWVzdF9pdGVtX2RldGFpbHMgJyArXG4gICAgICAnc3RlYW1fdWdjX2NyZWF0ZV9xdWVyeV91c2VyIHN0ZWFtX3VnY19jcmVhdGVfcXVlcnlfdXNlcl9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbCBzdGVhbV91Z2NfY3JlYXRlX3F1ZXJ5X2FsbF9leCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2Nsb3VkX2ZpbGVuYW1lX2ZpbHRlciAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X21hdGNoX2FueV90YWcgc3RlYW1fdWdjX3F1ZXJ5X3NldF9zZWFyY2hfdGV4dCAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X3JhbmtlZF9ieV90cmVuZF9kYXlzICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9hZGRfcmVxdWlyZWRfdGFnIHN0ZWFtX3VnY19xdWVyeV9hZGRfZXhjbHVkZWRfdGFnICcgK1xuICAgICAgJ3N0ZWFtX3VnY19xdWVyeV9zZXRfcmV0dXJuX2xvbmdfZGVzY3JpcHRpb24gJyArXG4gICAgICAnc3RlYW1fdWdjX3F1ZXJ5X3NldF9yZXR1cm5fdG90YWxfb25seSAnICtcbiAgICAgICdzdGVhbV91Z2NfcXVlcnlfc2V0X2FsbG93X2NhY2hlZF9yZXNwb25zZSBzdGVhbV91Z2Nfc2VuZF9xdWVyeSAnICtcbiAgICAgICdzaGFkZXJfc2V0IHNoYWRlcl9nZXRfbmFtZSBzaGFkZXJfcmVzZXQgc2hhZGVyX2N1cnJlbnQgJyArXG4gICAgICAnc2hhZGVyX2lzX2NvbXBpbGVkIHNoYWRlcl9nZXRfc2FtcGxlcl9pbmRleCBzaGFkZXJfZ2V0X3VuaWZvcm0gJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2kgc2hhZGVyX3NldF91bmlmb3JtX2lfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX2YgJyArXG4gICAgICAnc2hhZGVyX3NldF91bmlmb3JtX2ZfYXJyYXkgc2hhZGVyX3NldF91bmlmb3JtX21hdHJpeCAnICtcbiAgICAgICdzaGFkZXJfc2V0X3VuaWZvcm1fbWF0cml4X2FycmF5IHNoYWRlcl9lbmFibGVfY29ybmVyX2lkICcgK1xuICAgICAgJ3RleHR1cmVfc2V0X3N0YWdlIHRleHR1cmVfZ2V0X3RleGVsX3dpZHRoIHRleHR1cmVfZ2V0X3RleGVsX2hlaWdodCAnICtcbiAgICAgICdzaGFkZXJzX2FyZV9zdXBwb3J0ZWQgdmVydGV4X2Zvcm1hdF9iZWdpbiB2ZXJ0ZXhfZm9ybWF0X2VuZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2RlbGV0ZSB2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbiAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9wb3NpdGlvbl8zZCB2ZXJ0ZXhfZm9ybWF0X2FkZF9jb2xvdXIgJyArXG4gICAgICAndmVydGV4X2Zvcm1hdF9hZGRfY29sb3IgdmVydGV4X2Zvcm1hdF9hZGRfbm9ybWFsICcgK1xuICAgICAgJ3ZlcnRleF9mb3JtYXRfYWRkX3RleGNvb3JkIHZlcnRleF9mb3JtYXRfYWRkX3RleHRjb29yZCAnICtcbiAgICAgICd2ZXJ0ZXhfZm9ybWF0X2FkZF9jdXN0b20gdmVydGV4X2NyZWF0ZV9idWZmZXIgJyArXG4gICAgICAndmVydGV4X2NyZWF0ZV9idWZmZXJfZXh0IHZlcnRleF9kZWxldGVfYnVmZmVyIHZlcnRleF9iZWdpbiAnICtcbiAgICAgICd2ZXJ0ZXhfZW5kIHZlcnRleF9wb3NpdGlvbiB2ZXJ0ZXhfcG9zaXRpb25fM2QgdmVydGV4X2NvbG91ciAnICtcbiAgICAgICd2ZXJ0ZXhfY29sb3IgdmVydGV4X2FyZ2IgdmVydGV4X3RleGNvb3JkIHZlcnRleF9ub3JtYWwgdmVydGV4X2Zsb2F0MSAnICtcbiAgICAgICd2ZXJ0ZXhfZmxvYXQyIHZlcnRleF9mbG9hdDMgdmVydGV4X2Zsb2F0NCB2ZXJ0ZXhfdWJ5dGU0ICcgK1xuICAgICAgJ3ZlcnRleF9zdWJtaXQgdmVydGV4X2ZyZWV6ZSB2ZXJ0ZXhfZ2V0X251bWJlciB2ZXJ0ZXhfZ2V0X2J1ZmZlcl9zaXplICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyICcgK1xuICAgICAgJ3ZlcnRleF9jcmVhdGVfYnVmZmVyX2Zyb21fYnVmZmVyX2V4dCBwdXNoX2xvY2FsX25vdGlmaWNhdGlvbiAnICtcbiAgICAgICdwdXNoX2dldF9maXJzdF9sb2NhbF9ub3RpZmljYXRpb24gcHVzaF9nZXRfbmV4dF9sb2NhbF9ub3RpZmljYXRpb24gJyArXG4gICAgICAncHVzaF9jYW5jZWxfbG9jYWxfbm90aWZpY2F0aW9uIHNrZWxldG9uX2FuaW1hdGlvbl9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2dldCBza2VsZXRvbl9hbmltYXRpb25fbWl4ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9zZXRfZXh0IHNrZWxldG9uX2FuaW1hdGlvbl9nZXRfZXh0ICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZHVyYXRpb24gc2tlbGV0b25fYW5pbWF0aW9uX2dldF9mcmFtZXMgJyArXG4gICAgICAnc2tlbGV0b25fYW5pbWF0aW9uX2NsZWFyIHNrZWxldG9uX3NraW5fc2V0IHNrZWxldG9uX3NraW5fZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfc2V0IHNrZWxldG9uX2F0dGFjaG1lbnRfZ2V0ICcgK1xuICAgICAgJ3NrZWxldG9uX2F0dGFjaG1lbnRfY3JlYXRlIHNrZWxldG9uX2NvbGxpc2lvbl9kcmF3X3NldCAnICtcbiAgICAgICdza2VsZXRvbl9ib25lX2RhdGFfZ2V0IHNrZWxldG9uX2JvbmVfZGF0YV9zZXQgJyArXG4gICAgICAnc2tlbGV0b25fYm9uZV9zdGF0ZV9nZXQgc2tlbGV0b25fYm9uZV9zdGF0ZV9zZXQgc2tlbGV0b25fZ2V0X21pbm1heCAnICtcbiAgICAgICdza2VsZXRvbl9nZXRfbnVtX2JvdW5kcyBza2VsZXRvbl9nZXRfYm91bmRzICcgK1xuICAgICAgJ3NrZWxldG9uX2FuaW1hdGlvbl9nZXRfZnJhbWUgc2tlbGV0b25fYW5pbWF0aW9uX3NldF9mcmFtZSAnICtcbiAgICAgICdkcmF3X3NrZWxldG9uIGRyYXdfc2tlbGV0b25fdGltZSBkcmF3X3NrZWxldG9uX2luc3RhbmNlICcgK1xuICAgICAgJ2RyYXdfc2tlbGV0b25fY29sbGlzaW9uIHNrZWxldG9uX2FuaW1hdGlvbl9saXN0IHNrZWxldG9uX3NraW5fbGlzdCAnICtcbiAgICAgICdza2VsZXRvbl9zbG90X2RhdGEgbGF5ZXJfZ2V0X2lkIGxheWVyX2dldF9pZF9hdF9kZXB0aCAnICtcbiAgICAgICdsYXllcl9nZXRfZGVwdGggbGF5ZXJfY3JlYXRlIGxheWVyX2Rlc3Ryb3kgbGF5ZXJfZGVzdHJveV9pbnN0YW5jZXMgJyArXG4gICAgICAnbGF5ZXJfYWRkX2luc3RhbmNlIGxheWVyX2hhc19pbnN0YW5jZSBsYXllcl9zZXRfdmlzaWJsZSAnICtcbiAgICAgICdsYXllcl9nZXRfdmlzaWJsZSBsYXllcl9leGlzdHMgbGF5ZXJfeCBsYXllcl95IGxheWVyX2dldF94ICcgK1xuICAgICAgJ2xheWVyX2dldF95IGxheWVyX2hzcGVlZCBsYXllcl92c3BlZWQgbGF5ZXJfZ2V0X2hzcGVlZCAnICtcbiAgICAgICdsYXllcl9nZXRfdnNwZWVkIGxheWVyX3NjcmlwdF9iZWdpbiBsYXllcl9zY3JpcHRfZW5kIGxheWVyX3NoYWRlciAnICtcbiAgICAgICdsYXllcl9nZXRfc2NyaXB0X2JlZ2luIGxheWVyX2dldF9zY3JpcHRfZW5kIGxheWVyX2dldF9zaGFkZXIgJyArXG4gICAgICAnbGF5ZXJfc2V0X3RhcmdldF9yb29tIGxheWVyX2dldF90YXJnZXRfcm9vbSBsYXllcl9yZXNldF90YXJnZXRfcm9vbSAnICtcbiAgICAgICdsYXllcl9nZXRfYWxsIGxheWVyX2dldF9hbGxfZWxlbWVudHMgbGF5ZXJfZ2V0X25hbWUgbGF5ZXJfZGVwdGggJyArXG4gICAgICAnbGF5ZXJfZ2V0X2VsZW1lbnRfbGF5ZXIgbGF5ZXJfZ2V0X2VsZW1lbnRfdHlwZSBsYXllcl9lbGVtZW50X21vdmUgJyArXG4gICAgICAnbGF5ZXJfZm9yY2VfZHJhd19kZXB0aCBsYXllcl9pc19kcmF3X2RlcHRoX2ZvcmNlZCAnICtcbiAgICAgICdsYXllcl9nZXRfZm9yY2VkX2RlcHRoIGxheWVyX2JhY2tncm91bmRfZ2V0X2lkICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZXhpc3RzIGxheWVyX2JhY2tncm91bmRfY3JlYXRlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfZGVzdHJveSBsYXllcl9iYWNrZ3JvdW5kX3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9jaGFuZ2UgbGF5ZXJfYmFja2dyb3VuZF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9odGlsZWQgbGF5ZXJfYmFja2dyb3VuZF92dGlsZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX2JhY2tncm91bmRfeHNjYWxlIGxheWVyX2JhY2tncm91bmRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9hbHBoYSBsYXllcl9iYWNrZ3JvdW5kX2luZGV4IGxheWVyX2JhY2tncm91bmRfc3BlZWQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfdmlzaWJsZSBsYXllcl9iYWNrZ3JvdW5kX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfaHRpbGVkIGxheWVyX2JhY2tncm91bmRfZ2V0X3Z0aWxlZCAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF9zdHJldGNoIGxheWVyX2JhY2tncm91bmRfZ2V0X3lzY2FsZSAnICtcbiAgICAgICdsYXllcl9iYWNrZ3JvdW5kX2dldF94c2NhbGUgbGF5ZXJfYmFja2dyb3VuZF9nZXRfYmxlbmQgJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfYWxwaGEgbGF5ZXJfYmFja2dyb3VuZF9nZXRfaW5kZXggJyArXG4gICAgICAnbGF5ZXJfYmFja2dyb3VuZF9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF9pZCBsYXllcl9zcHJpdGVfZXhpc3RzICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9jcmVhdGUgbGF5ZXJfc3ByaXRlX2Rlc3Ryb3kgbGF5ZXJfc3ByaXRlX2NoYW5nZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfaW5kZXggbGF5ZXJfc3ByaXRlX3NwZWVkIGxheWVyX3Nwcml0ZV94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX3lzY2FsZSBsYXllcl9zcHJpdGVfYW5nbGUgbGF5ZXJfc3ByaXRlX2JsZW5kICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9hbHBoYSBsYXllcl9zcHJpdGVfeCBsYXllcl9zcHJpdGVfeSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X3Nwcml0ZSBsYXllcl9zcHJpdGVfZ2V0X2luZGV4ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfc3BlZWQgbGF5ZXJfc3ByaXRlX2dldF94c2NhbGUgJyArXG4gICAgICAnbGF5ZXJfc3ByaXRlX2dldF95c2NhbGUgbGF5ZXJfc3ByaXRlX2dldF9hbmdsZSAnICtcbiAgICAgICdsYXllcl9zcHJpdGVfZ2V0X2JsZW5kIGxheWVyX3Nwcml0ZV9nZXRfYWxwaGEgbGF5ZXJfc3ByaXRlX2dldF94ICcgK1xuICAgICAgJ2xheWVyX3Nwcml0ZV9nZXRfeSBsYXllcl90aWxlbWFwX2dldF9pZCBsYXllcl90aWxlbWFwX2V4aXN0cyAnICtcbiAgICAgICdsYXllcl90aWxlbWFwX2NyZWF0ZSBsYXllcl90aWxlbWFwX2Rlc3Ryb3kgdGlsZW1hcF90aWxlc2V0IHRpbGVtYXBfeCAnICtcbiAgICAgICd0aWxlbWFwX3kgdGlsZW1hcF9zZXQgdGlsZW1hcF9zZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfdGlsZXNldCAnICtcbiAgICAgICd0aWxlbWFwX2dldF90aWxlX3dpZHRoIHRpbGVtYXBfZ2V0X3RpbGVfaGVpZ2h0IHRpbGVtYXBfZ2V0X3dpZHRoICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2hlaWdodCB0aWxlbWFwX2dldF94IHRpbGVtYXBfZ2V0X3kgdGlsZW1hcF9nZXQgJyArXG4gICAgICAndGlsZW1hcF9nZXRfYXRfcGl4ZWwgdGlsZW1hcF9nZXRfY2VsbF94X2F0X3BpeGVsICcgK1xuICAgICAgJ3RpbGVtYXBfZ2V0X2NlbGxfeV9hdF9waXhlbCB0aWxlbWFwX2NsZWFyIGRyYXdfdGlsZW1hcCBkcmF3X3RpbGUgJyArXG4gICAgICAndGlsZW1hcF9zZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9nZXRfZ2xvYmFsX21hc2sgdGlsZW1hcF9zZXRfbWFzayAnICtcbiAgICAgICd0aWxlbWFwX2dldF9tYXNrIHRpbGVtYXBfZ2V0X2ZyYW1lIHRpbGVfc2V0X2VtcHR5IHRpbGVfc2V0X2luZGV4ICcgK1xuICAgICAgJ3RpbGVfc2V0X2ZsaXAgdGlsZV9zZXRfbWlycm9yIHRpbGVfc2V0X3JvdGF0ZSB0aWxlX2dldF9lbXB0eSAnICtcbiAgICAgICd0aWxlX2dldF9pbmRleCB0aWxlX2dldF9mbGlwIHRpbGVfZ2V0X21pcnJvciB0aWxlX2dldF9yb3RhdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9leGlzdHMgbGF5ZXJfdGlsZV9jcmVhdGUgbGF5ZXJfdGlsZV9kZXN0cm95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfY2hhbmdlIGxheWVyX3RpbGVfeHNjYWxlIGxheWVyX3RpbGVfeXNjYWxlICcgK1xuICAgICAgJ2xheWVyX3RpbGVfYmxlbmQgbGF5ZXJfdGlsZV9hbHBoYSBsYXllcl90aWxlX3ggbGF5ZXJfdGlsZV95ICcgK1xuICAgICAgJ2xheWVyX3RpbGVfcmVnaW9uIGxheWVyX3RpbGVfdmlzaWJsZSBsYXllcl90aWxlX2dldF9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfeHNjYWxlIGxheWVyX3RpbGVfZ2V0X3lzY2FsZSBsYXllcl90aWxlX2dldF9ibGVuZCAnICtcbiAgICAgICdsYXllcl90aWxlX2dldF9hbHBoYSBsYXllcl90aWxlX2dldF94IGxheWVyX3RpbGVfZ2V0X3kgJyArXG4gICAgICAnbGF5ZXJfdGlsZV9nZXRfcmVnaW9uIGxheWVyX3RpbGVfZ2V0X3Zpc2libGUgJyArXG4gICAgICAnbGF5ZXJfaW5zdGFuY2VfZ2V0X2luc3RhbmNlIGluc3RhbmNlX2FjdGl2YXRlX2xheWVyICcgK1xuICAgICAgJ2luc3RhbmNlX2RlYWN0aXZhdGVfbGF5ZXIgY2FtZXJhX2NyZWF0ZSBjYW1lcmFfY3JlYXRlX3ZpZXcgJyArXG4gICAgICAnY2FtZXJhX2Rlc3Ryb3kgY2FtZXJhX2FwcGx5IGNhbWVyYV9nZXRfYWN0aXZlIGNhbWVyYV9nZXRfZGVmYXVsdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2RlZmF1bHQgY2FtZXJhX3NldF92aWV3X21hdCBjYW1lcmFfc2V0X3Byb2pfbWF0ICcgK1xuICAgICAgJ2NhbWVyYV9zZXRfdXBkYXRlX3NjcmlwdCBjYW1lcmFfc2V0X2JlZ2luX3NjcmlwdCAnICtcbiAgICAgICdjYW1lcmFfc2V0X2VuZF9zY3JpcHQgY2FtZXJhX3NldF92aWV3X3BvcyBjYW1lcmFfc2V0X3ZpZXdfc2l6ZSAnICtcbiAgICAgICdjYW1lcmFfc2V0X3ZpZXdfc3BlZWQgY2FtZXJhX3NldF92aWV3X2JvcmRlciBjYW1lcmFfc2V0X3ZpZXdfYW5nbGUgJyArXG4gICAgICAnY2FtZXJhX3NldF92aWV3X3RhcmdldCBjYW1lcmFfZ2V0X3ZpZXdfbWF0IGNhbWVyYV9nZXRfcHJval9tYXQgJyArXG4gICAgICAnY2FtZXJhX2dldF91cGRhdGVfc2NyaXB0IGNhbWVyYV9nZXRfYmVnaW5fc2NyaXB0ICcgK1xuICAgICAgJ2NhbWVyYV9nZXRfZW5kX3NjcmlwdCBjYW1lcmFfZ2V0X3ZpZXdfeCBjYW1lcmFfZ2V0X3ZpZXdfeSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfd2lkdGggY2FtZXJhX2dldF92aWV3X2hlaWdodCBjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeCAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfc3BlZWRfeSBjYW1lcmFfZ2V0X3ZpZXdfYm9yZGVyX3ggJyArXG4gICAgICAnY2FtZXJhX2dldF92aWV3X2JvcmRlcl95IGNhbWVyYV9nZXRfdmlld19hbmdsZSAnICtcbiAgICAgICdjYW1lcmFfZ2V0X3ZpZXdfdGFyZ2V0IHZpZXdfZ2V0X2NhbWVyYSB2aWV3X2dldF92aXNpYmxlICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3hwb3J0IHZpZXdfZ2V0X3lwb3J0IHZpZXdfZ2V0X3dwb3J0IHZpZXdfZ2V0X2hwb3J0ICcgK1xuICAgICAgJ3ZpZXdfZ2V0X3N1cmZhY2VfaWQgdmlld19zZXRfY2FtZXJhIHZpZXdfc2V0X3Zpc2libGUgdmlld19zZXRfeHBvcnQgJyArXG4gICAgICAndmlld19zZXRfeXBvcnQgdmlld19zZXRfd3BvcnQgdmlld19zZXRfaHBvcnQgdmlld19zZXRfc3VyZmFjZV9pZCAnICtcbiAgICAgICdnZXN0dXJlX2RyYWdfdGltZSBnZXN0dXJlX2RyYWdfZGlzdGFuY2UgZ2VzdHVyZV9mbGlja19zcGVlZCAnICtcbiAgICAgICdnZXN0dXJlX2RvdWJsZV90YXBfdGltZSBnZXN0dXJlX2RvdWJsZV90YXBfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9kaXN0YW5jZSBnZXN0dXJlX3BpbmNoX2FuZ2xlX3Rvd2FyZHMgJyArXG4gICAgICAnZ2VzdHVyZV9waW5jaF9hbmdsZV9hd2F5IGdlc3R1cmVfcm90YXRlX3RpbWUgZ2VzdHVyZV9yb3RhdGVfYW5nbGUgJyArXG4gICAgICAnZ2VzdHVyZV90YXBfY291bnQgZ2VzdHVyZV9nZXRfZHJhZ190aW1lIGdlc3R1cmVfZ2V0X2RyYWdfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfZmxpY2tfc3BlZWQgZ2VzdHVyZV9nZXRfZG91YmxlX3RhcF90aW1lICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X2RvdWJsZV90YXBfZGlzdGFuY2UgZ2VzdHVyZV9nZXRfcGluY2hfZGlzdGFuY2UgJyArXG4gICAgICAnZ2VzdHVyZV9nZXRfcGluY2hfYW5nbGVfdG93YXJkcyBnZXN0dXJlX2dldF9waW5jaF9hbmdsZV9hd2F5ICcgK1xuICAgICAgJ2dlc3R1cmVfZ2V0X3JvdGF0ZV90aW1lIGdlc3R1cmVfZ2V0X3JvdGF0ZV9hbmdsZSAnICtcbiAgICAgICdnZXN0dXJlX2dldF90YXBfY291bnQga2V5Ym9hcmRfdmlydHVhbF9zaG93IGtleWJvYXJkX3ZpcnR1YWxfaGlkZSAnICtcbiAgICAgICdrZXlib2FyZF92aXJ0dWFsX3N0YXR1cyBrZXlib2FyZF92aXJ0dWFsX2hlaWdodCcsXG4gICAgbGl0ZXJhbDogJ3NlbGYgb3RoZXIgYWxsIG5vb25lIGdsb2JhbCBsb2NhbCB1bmRlZmluZWQgcG9pbnRlcl9pbnZhbGlkICcgK1xuICAgICAgJ3BvaW50ZXJfbnVsbCBwYXRoX2FjdGlvbl9zdG9wIHBhdGhfYWN0aW9uX3Jlc3RhcnQgJyArXG4gICAgICAncGF0aF9hY3Rpb25fY29udGludWUgcGF0aF9hY3Rpb25fcmV2ZXJzZSB0cnVlIGZhbHNlIHBpIEdNX2J1aWxkX2RhdGUgJyArXG4gICAgICAnR01fdmVyc2lvbiBHTV9ydW50aW1lX3ZlcnNpb24gIHRpbWV6b25lX2xvY2FsIHRpbWV6b25lX3V0YyAnICtcbiAgICAgICdnYW1lc3BlZWRfZnBzIGdhbWVzcGVlZF9taWNyb3NlY29uZHMgIGV2X2NyZWF0ZSBldl9kZXN0cm95IGV2X3N0ZXAgJyArXG4gICAgICAnZXZfYWxhcm0gZXZfa2V5Ym9hcmQgZXZfbW91c2UgZXZfY29sbGlzaW9uIGV2X290aGVyIGV2X2RyYXcgJyArXG4gICAgICAnZXZfZHJhd19iZWdpbiBldl9kcmF3X2VuZCBldl9kcmF3X3ByZSBldl9kcmF3X3Bvc3QgZXZfa2V5cHJlc3MgJyArXG4gICAgICAnZXZfa2V5cmVsZWFzZSBldl90cmlnZ2VyIGV2X2xlZnRfYnV0dG9uIGV2X3JpZ2h0X2J1dHRvbiAnICtcbiAgICAgICdldl9taWRkbGVfYnV0dG9uIGV2X25vX2J1dHRvbiBldl9sZWZ0X3ByZXNzIGV2X3JpZ2h0X3ByZXNzICcgK1xuICAgICAgJ2V2X21pZGRsZV9wcmVzcyBldl9sZWZ0X3JlbGVhc2UgZXZfcmlnaHRfcmVsZWFzZSBldl9taWRkbGVfcmVsZWFzZSAnICtcbiAgICAgICdldl9tb3VzZV9lbnRlciBldl9tb3VzZV9sZWF2ZSBldl9tb3VzZV93aGVlbF91cCBldl9tb3VzZV93aGVlbF9kb3duICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X2J1dHRvbiBldl9nbG9iYWxfcmlnaHRfYnV0dG9uIGV2X2dsb2JhbF9taWRkbGVfYnV0dG9uICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3ByZXNzIGV2X2dsb2JhbF9yaWdodF9wcmVzcyBldl9nbG9iYWxfbWlkZGxlX3ByZXNzICcgK1xuICAgICAgJ2V2X2dsb2JhbF9sZWZ0X3JlbGVhc2UgZXZfZ2xvYmFsX3JpZ2h0X3JlbGVhc2UgJyArXG4gICAgICAnZXZfZ2xvYmFsX21pZGRsZV9yZWxlYXNlIGV2X2pveXN0aWNrMV9sZWZ0IGV2X2pveXN0aWNrMV9yaWdodCAnICtcbiAgICAgICdldl9qb3lzdGljazFfdXAgZXZfam95c3RpY2sxX2Rvd24gZXZfam95c3RpY2sxX2J1dHRvbjEgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjIgZXZfam95c3RpY2sxX2J1dHRvbjMgZXZfam95c3RpY2sxX2J1dHRvbjQgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjUgZXZfam95c3RpY2sxX2J1dHRvbjYgZXZfam95c3RpY2sxX2J1dHRvbjcgJyArXG4gICAgICAnZXZfam95c3RpY2sxX2J1dHRvbjggZXZfam95c3RpY2syX2xlZnQgZXZfam95c3RpY2syX3JpZ2h0ICcgK1xuICAgICAgJ2V2X2pveXN0aWNrMl91cCBldl9qb3lzdGljazJfZG93biBldl9qb3lzdGljazJfYnV0dG9uMSAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uMiBldl9qb3lzdGljazJfYnV0dG9uMyBldl9qb3lzdGljazJfYnV0dG9uNCAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uNSBldl9qb3lzdGljazJfYnV0dG9uNiBldl9qb3lzdGljazJfYnV0dG9uNyAnICtcbiAgICAgICdldl9qb3lzdGljazJfYnV0dG9uOCBldl9vdXRzaWRlIGV2X2JvdW5kYXJ5IGV2X2dhbWVfc3RhcnQgJyArXG4gICAgICAnZXZfZ2FtZV9lbmQgZXZfcm9vbV9zdGFydCBldl9yb29tX2VuZCBldl9ub19tb3JlX2xpdmVzICcgK1xuICAgICAgJ2V2X2FuaW1hdGlvbl9lbmQgZXZfZW5kX29mX3BhdGggZXZfbm9fbW9yZV9oZWFsdGggZXZfY2xvc2VfYnV0dG9uICcgK1xuICAgICAgJ2V2X3VzZXIwIGV2X3VzZXIxIGV2X3VzZXIyIGV2X3VzZXIzIGV2X3VzZXI0IGV2X3VzZXI1IGV2X3VzZXI2ICcgK1xuICAgICAgJ2V2X3VzZXI3IGV2X3VzZXI4IGV2X3VzZXI5IGV2X3VzZXIxMCBldl91c2VyMTEgZXZfdXNlcjEyIGV2X3VzZXIxMyAnICtcbiAgICAgICdldl91c2VyMTQgZXZfdXNlcjE1IGV2X3N0ZXBfbm9ybWFsIGV2X3N0ZXBfYmVnaW4gZXZfc3RlcF9lbmQgZXZfZ3VpICcgK1xuICAgICAgJ2V2X2d1aV9iZWdpbiBldl9ndWlfZW5kIGV2X2NsZWFudXAgZXZfZ2VzdHVyZSBldl9nZXN0dXJlX3RhcCAnICtcbiAgICAgICdldl9nZXN0dXJlX2RvdWJsZV90YXAgZXZfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dlc3R1cmVfZHJhZ2dpbmcgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9kcmFnX2VuZCBldl9nZXN0dXJlX2ZsaWNrIGV2X2dlc3R1cmVfcGluY2hfc3RhcnQgJyArXG4gICAgICAnZXZfZ2VzdHVyZV9waW5jaF9pbiBldl9nZXN0dXJlX3BpbmNoX291dCBldl9nZXN0dXJlX3BpbmNoX2VuZCAnICtcbiAgICAgICdldl9nZXN0dXJlX3JvdGF0ZV9zdGFydCBldl9nZXN0dXJlX3JvdGF0aW5nIGV2X2dlc3R1cmVfcm90YXRlX2VuZCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV90YXAgZXZfZ2xvYmFsX2dlc3R1cmVfZG91YmxlX3RhcCAnICtcbiAgICAgICdldl9nbG9iYWxfZ2VzdHVyZV9kcmFnX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX2RyYWdnaW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX2RyYWdfZW5kIGV2X2dsb2JhbF9nZXN0dXJlX2ZsaWNrICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX2luICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3BpbmNoX291dCBldl9nbG9iYWxfZ2VzdHVyZV9waW5jaF9lbmQgJyArXG4gICAgICAnZXZfZ2xvYmFsX2dlc3R1cmVfcm90YXRlX3N0YXJ0IGV2X2dsb2JhbF9nZXN0dXJlX3JvdGF0aW5nICcgK1xuICAgICAgJ2V2X2dsb2JhbF9nZXN0dXJlX3JvdGF0ZV9lbmQgdmtfbm9rZXkgdmtfYW55a2V5IHZrX2VudGVyIHZrX3JldHVybiAnICtcbiAgICAgICd2a19zaGlmdCB2a19jb250cm9sIHZrX2FsdCB2a19lc2NhcGUgdmtfc3BhY2UgdmtfYmFja3NwYWNlIHZrX3RhYiAnICtcbiAgICAgICd2a19wYXVzZSB2a19wcmludHNjcmVlbiB2a19sZWZ0IHZrX3JpZ2h0IHZrX3VwIHZrX2Rvd24gdmtfaG9tZSAnICtcbiAgICAgICd2a19lbmQgdmtfZGVsZXRlIHZrX2luc2VydCB2a19wYWdldXAgdmtfcGFnZWRvd24gdmtfZjEgdmtfZjIgdmtfZjMgJyArXG4gICAgICAndmtfZjQgdmtfZjUgdmtfZjYgdmtfZjcgdmtfZjggdmtfZjkgdmtfZjEwIHZrX2YxMSB2a19mMTIgdmtfbnVtcGFkMCAnICtcbiAgICAgICd2a19udW1wYWQxIHZrX251bXBhZDIgdmtfbnVtcGFkMyB2a19udW1wYWQ0IHZrX251bXBhZDUgdmtfbnVtcGFkNiAnICtcbiAgICAgICd2a19udW1wYWQ3IHZrX251bXBhZDggdmtfbnVtcGFkOSB2a19kaXZpZGUgdmtfbXVsdGlwbHkgdmtfc3VidHJhY3QgJyArXG4gICAgICAndmtfYWRkIHZrX2RlY2ltYWwgdmtfbHNoaWZ0IHZrX2xjb250cm9sIHZrX2xhbHQgdmtfcnNoaWZ0ICcgK1xuICAgICAgJ3ZrX3Jjb250cm9sIHZrX3JhbHQgIG1iX2FueSBtYl9ub25lIG1iX2xlZnQgbWJfcmlnaHQgbWJfbWlkZGxlICcgK1xuICAgICAgJ2NfYXF1YSBjX2JsYWNrIGNfYmx1ZSBjX2RrZ3JheSBjX2Z1Y2hzaWEgY19ncmF5IGNfZ3JlZW4gY19saW1lICcgK1xuICAgICAgJ2NfbHRncmF5IGNfbWFyb29uIGNfbmF2eSBjX29saXZlIGNfcHVycGxlIGNfcmVkIGNfc2lsdmVyIGNfdGVhbCAnICtcbiAgICAgICdjX3doaXRlIGNfeWVsbG93IGNfb3JhbmdlIGZhX2xlZnQgZmFfY2VudGVyIGZhX3JpZ2h0IGZhX3RvcCAnICtcbiAgICAgICdmYV9taWRkbGUgZmFfYm90dG9tIHByX3BvaW50bGlzdCBwcl9saW5lbGlzdCBwcl9saW5lc3RyaXAgJyArXG4gICAgICAncHJfdHJpYW5nbGVsaXN0IHByX3RyaWFuZ2xlc3RyaXAgcHJfdHJpYW5nbGVmYW4gYm1fY29tcGxleCBibV9ub3JtYWwgJyArXG4gICAgICAnYm1fYWRkIGJtX21heCBibV9zdWJ0cmFjdCBibV96ZXJvIGJtX29uZSBibV9zcmNfY29sb3VyICcgK1xuICAgICAgJ2JtX2ludl9zcmNfY29sb3VyIGJtX3NyY19jb2xvciBibV9pbnZfc3JjX2NvbG9yIGJtX3NyY19hbHBoYSAnICtcbiAgICAgICdibV9pbnZfc3JjX2FscGhhIGJtX2Rlc3RfYWxwaGEgYm1faW52X2Rlc3RfYWxwaGEgYm1fZGVzdF9jb2xvdXIgJyArXG4gICAgICAnYm1faW52X2Rlc3RfY29sb3VyIGJtX2Rlc3RfY29sb3IgYm1faW52X2Rlc3RfY29sb3IgYm1fc3JjX2FscGhhX3NhdCAnICtcbiAgICAgICd0Zl9wb2ludCB0Zl9saW5lYXIgdGZfYW5pc290cm9waWMgbWlwX29mZiBtaXBfb24gbWlwX21hcmtlZG9ubHkgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9ub25lIGF1ZGlvX2ZhbGxvZmZfaW52ZXJzZV9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2ludmVyc2VfZGlzdGFuY2VfY2xhbXBlZCBhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZSAnICtcbiAgICAgICdhdWRpb19mYWxsb2ZmX2xpbmVhcl9kaXN0YW5jZV9jbGFtcGVkICcgK1xuICAgICAgJ2F1ZGlvX2ZhbGxvZmZfZXhwb25lbnRfZGlzdGFuY2UgJyArXG4gICAgICAnYXVkaW9fZmFsbG9mZl9leHBvbmVudF9kaXN0YW5jZV9jbGFtcGVkIGF1ZGlvX29sZF9zeXN0ZW0gJyArXG4gICAgICAnYXVkaW9fbmV3X3N5c3RlbSBhdWRpb19tb25vIGF1ZGlvX3N0ZXJlbyBhdWRpb18zZCBjcl9kZWZhdWx0IGNyX25vbmUgJyArXG4gICAgICAnY3JfYXJyb3cgY3JfY3Jvc3MgY3JfYmVhbSBjcl9zaXplX25lc3cgY3Jfc2l6ZV9ucyBjcl9zaXplX253c2UgJyArXG4gICAgICAnY3Jfc2l6ZV93ZSBjcl91cGFycm93IGNyX2hvdXJnbGFzcyBjcl9kcmFnIGNyX2FwcHN0YXJ0IGNyX2hhbmRwb2ludCAnICtcbiAgICAgICdjcl9zaXplX2FsbCBzcHJpdGVzcGVlZF9mcmFtZXNwZXJzZWNvbmQgJyArXG4gICAgICAnc3ByaXRlc3BlZWRfZnJhbWVzcGVyZ2FtZWZyYW1lIGFzc2V0X29iamVjdCBhc3NldF91bmtub3duICcgK1xuICAgICAgJ2Fzc2V0X3Nwcml0ZSBhc3NldF9zb3VuZCBhc3NldF9yb29tIGFzc2V0X3BhdGggYXNzZXRfc2NyaXB0ICcgK1xuICAgICAgJ2Fzc2V0X2ZvbnQgYXNzZXRfdGltZWxpbmUgYXNzZXRfdGlsZXMgYXNzZXRfc2hhZGVyIGZhX3JlYWRvbmx5ICcgK1xuICAgICAgJ2ZhX2hpZGRlbiBmYV9zeXNmaWxlIGZhX3ZvbHVtZWlkIGZhX2RpcmVjdG9yeSBmYV9hcmNoaXZlICAnICtcbiAgICAgICdkc190eXBlX21hcCBkc190eXBlX2xpc3QgZHNfdHlwZV9zdGFjayBkc190eXBlX3F1ZXVlIGRzX3R5cGVfZ3JpZCAnICtcbiAgICAgICdkc190eXBlX3ByaW9yaXR5IGVmX2V4cGxvc2lvbiBlZl9yaW5nIGVmX2VsbGlwc2UgZWZfZmlyZXdvcmsgJyArXG4gICAgICAnZWZfc21va2UgZWZfc21va2V1cCBlZl9zdGFyIGVmX3NwYXJrIGVmX2ZsYXJlIGVmX2Nsb3VkIGVmX3JhaW4gJyArXG4gICAgICAnZWZfc25vdyBwdF9zaGFwZV9waXhlbCBwdF9zaGFwZV9kaXNrIHB0X3NoYXBlX3NxdWFyZSBwdF9zaGFwZV9saW5lICcgK1xuICAgICAgJ3B0X3NoYXBlX3N0YXIgcHRfc2hhcGVfY2lyY2xlIHB0X3NoYXBlX3JpbmcgcHRfc2hhcGVfc3BoZXJlICcgK1xuICAgICAgJ3B0X3NoYXBlX2ZsYXJlIHB0X3NoYXBlX3NwYXJrIHB0X3NoYXBlX2V4cGxvc2lvbiBwdF9zaGFwZV9jbG91ZCAnICtcbiAgICAgICdwdF9zaGFwZV9zbW9rZSBwdF9zaGFwZV9zbm93IHBzX2Rpc3RyX2xpbmVhciBwc19kaXN0cl9nYXVzc2lhbiAnICtcbiAgICAgICdwc19kaXN0cl9pbnZnYXVzc2lhbiBwc19zaGFwZV9yZWN0YW5nbGUgcHNfc2hhcGVfZWxsaXBzZSAnICtcbiAgICAgICdwc19zaGFwZV9kaWFtb25kIHBzX3NoYXBlX2xpbmUgdHlfcmVhbCB0eV9zdHJpbmcgZGxsX2NkZWNsICcgK1xuICAgICAgJ2RsbF9zdGRjYWxsIG1hdHJpeF92aWV3IG1hdHJpeF9wcm9qZWN0aW9uIG1hdHJpeF93b3JsZCBvc193aW4zMiAnICtcbiAgICAgICdvc193aW5kb3dzIG9zX21hY29zeCBvc19pb3Mgb3NfYW5kcm9pZCBvc19zeW1iaWFuIG9zX2xpbnV4ICcgK1xuICAgICAgJ29zX3Vua25vd24gb3Nfd2lucGhvbmUgb3NfdGl6ZW4gb3Nfd2luOG5hdGl2ZSAnICtcbiAgICAgICdvc193aWl1IG9zXzNkcyAgb3NfcHN2aXRhIG9zX2JiMTAgb3NfcHM0IG9zX3hib3hvbmUgJyArXG4gICAgICAnb3NfcHMzIG9zX3hib3gzNjAgb3NfdXdwIG9zX3R2b3Mgb3Nfc3dpdGNoICcgK1xuICAgICAgJ2Jyb3dzZXJfbm90X2FfYnJvd3NlciBicm93c2VyX3Vua25vd24gYnJvd3Nlcl9pZSBicm93c2VyX2ZpcmVmb3ggJyArXG4gICAgICAnYnJvd3Nlcl9jaHJvbWUgYnJvd3Nlcl9zYWZhcmkgYnJvd3Nlcl9zYWZhcmlfbW9iaWxlIGJyb3dzZXJfb3BlcmEgJyArXG4gICAgICAnYnJvd3Nlcl90aXplbiBicm93c2VyX2VkZ2UgYnJvd3Nlcl93aW5kb3dzX3N0b3JlIGJyb3dzZXJfaWVfbW9iaWxlICAnICtcbiAgICAgICdkZXZpY2VfaW9zX3Vua25vd24gZGV2aWNlX2lvc19pcGhvbmUgZGV2aWNlX2lvc19pcGhvbmVfcmV0aW5hICcgK1xuICAgICAgJ2RldmljZV9pb3NfaXBhZCBkZXZpY2VfaW9zX2lwYWRfcmV0aW5hIGRldmljZV9pb3NfaXBob25lNSAnICtcbiAgICAgICdkZXZpY2VfaW9zX2lwaG9uZTYgZGV2aWNlX2lvc19pcGhvbmU2cGx1cyBkZXZpY2VfZW11bGF0b3IgJyArXG4gICAgICAnZGV2aWNlX3RhYmxldCBkaXNwbGF5X2xhbmRzY2FwZSBkaXNwbGF5X2xhbmRzY2FwZV9mbGlwcGVkICcgK1xuICAgICAgJ2Rpc3BsYXlfcG9ydHJhaXQgZGlzcGxheV9wb3J0cmFpdF9mbGlwcGVkIHRtX3NsZWVwIHRtX2NvdW50dnN5bmNzICcgK1xuICAgICAgJ29mX2NoYWxsZW5nZV93aW4gb2ZfY2hhbGxlbiBnZV9sb3NlIG9mX2NoYWxsZW5nZV90aWUgJyArXG4gICAgICAnbGVhZGVyYm9hcmRfdHlwZV9udW1iZXIgbGVhZGVyYm9hcmRfdHlwZV90aW1lX21pbnNfc2VjcyAnICtcbiAgICAgICdjbXBmdW5jX25ldmVyIGNtcGZ1bmNfbGVzcyBjbXBmdW5jX2VxdWFsIGNtcGZ1bmNfbGVzc2VxdWFsICcgK1xuICAgICAgJ2NtcGZ1bmNfZ3JlYXRlciBjbXBmdW5jX25vdGVxdWFsIGNtcGZ1bmNfZ3JlYXRlcmVxdWFsIGNtcGZ1bmNfYWx3YXlzICcgK1xuICAgICAgJ2N1bGxfbm9jdWxsaW5nIGN1bGxfY2xvY2t3aXNlIGN1bGxfY291bnRlcmNsb2Nrd2lzZSBsaWdodHR5cGVfZGlyICcgK1xuICAgICAgJ2xpZ2h0dHlwZV9wb2ludCBpYXBfZXZfc3RvcmVsb2FkIGlhcF9ldl9wcm9kdWN0IGlhcF9ldl9wdXJjaGFzZSAnICtcbiAgICAgICdpYXBfZXZfY29uc3VtZSBpYXBfZXZfcmVzdG9yZSBpYXBfc3RvcmVsb2FkX29rIGlhcF9zdG9yZWxvYWRfZmFpbGVkICcgK1xuICAgICAgJ2lhcF9zdGF0dXNfdW5pbml0aWFsaXNlZCBpYXBfc3RhdHVzX3VuYXZhaWxhYmxlIGlhcF9zdGF0dXNfbG9hZGluZyAnICtcbiAgICAgICdpYXBfc3RhdHVzX2F2YWlsYWJsZSBpYXBfc3RhdHVzX3Byb2Nlc3NpbmcgaWFwX3N0YXR1c19yZXN0b3JpbmcgJyArXG4gICAgICAnaWFwX2ZhaWxlZCBpYXBfdW5hdmFpbGFibGUgaWFwX2F2YWlsYWJsZSBpYXBfcHVyY2hhc2VkIGlhcF9jYW5jZWxlZCAnICtcbiAgICAgICdpYXBfcmVmdW5kZWQgZmJfbG9naW5fZGVmYXVsdCBmYl9sb2dpbl9mYWxsYmFja190b193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX25vX2ZhbGxiYWNrX3RvX3dlYnZpZXcgZmJfbG9naW5fZm9yY2luZ193ZWJ2aWV3ICcgK1xuICAgICAgJ2ZiX2xvZ2luX3VzZV9zeXN0ZW1fYWNjb3VudCBmYl9sb2dpbl9mb3JjaW5nX3NhZmFyaSAgJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8xX3ggcGh5X2pvaW50X2FuY2hvcl8xX3kgcGh5X2pvaW50X2FuY2hvcl8yX3ggJyArXG4gICAgICAncGh5X2pvaW50X2FuY2hvcl8yX3kgcGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3ggJyArXG4gICAgICAncGh5X2pvaW50X3JlYWN0aW9uX2ZvcmNlX3kgcGh5X2pvaW50X3JlYWN0aW9uX3RvcnF1ZSAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3Jfc3BlZWQgcGh5X2pvaW50X2FuZ2xlIHBoeV9qb2ludF9tb3Rvcl90b3JxdWUgJyArXG4gICAgICAncGh5X2pvaW50X21heF9tb3Rvcl90b3JxdWUgcGh5X2pvaW50X3RyYW5zbGF0aW9uIHBoeV9qb2ludF9zcGVlZCAnICtcbiAgICAgICdwaHlfam9pbnRfbW90b3JfZm9yY2UgcGh5X2pvaW50X21heF9tb3Rvcl9mb3JjZSBwaHlfam9pbnRfbGVuZ3RoXzEgJyArXG4gICAgICAncGh5X2pvaW50X2xlbmd0aF8yIHBoeV9qb2ludF9kYW1waW5nX3JhdGlvIHBoeV9qb2ludF9mcmVxdWVuY3kgJyArXG4gICAgICAncGh5X2pvaW50X2xvd2VyX2FuZ2xlX2xpbWl0IHBoeV9qb2ludF91cHBlcl9hbmdsZV9saW1pdCAnICtcbiAgICAgICdwaHlfam9pbnRfYW5nbGVfbGltaXRzIHBoeV9qb2ludF9tYXhfbGVuZ3RoIHBoeV9qb2ludF9tYXhfdG9ycXVlICcgK1xuICAgICAgJ3BoeV9qb2ludF9tYXhfZm9yY2UgcGh5X2RlYnVnX3JlbmRlcl9hYWJiICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfY29sbGlzaW9uX3BhaXJzIHBoeV9kZWJ1Z19yZW5kZXJfY29tcyAnICtcbiAgICAgICdwaHlfZGVidWdfcmVuZGVyX2NvcmVfc2hhcGVzIHBoeV9kZWJ1Z19yZW5kZXJfam9pbnRzICcgK1xuICAgICAgJ3BoeV9kZWJ1Z19yZW5kZXJfb2JiIHBoeV9kZWJ1Z19yZW5kZXJfc2hhcGVzICAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZmxhZ193YXRlciBwaHlfcGFydGljbGVfZmxhZ196b21iaWUgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfd2FsbCBwaHlfcGFydGljbGVfZmxhZ19zcHJpbmcgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2ZsYWdfZWxhc3RpYyBwaHlfcGFydGljbGVfZmxhZ192aXNjb3VzICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX3Bvd2RlciBwaHlfcGFydGljbGVfZmxhZ190ZW5zaWxlICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9mbGFnX2NvbG91cm1peGluZyBwaHlfcGFydGljbGVfZmxhZ19jb2xvcm1peGluZyAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19zb2xpZCBwaHlfcGFydGljbGVfZ3JvdXBfZmxhZ19yaWdpZCAnICtcbiAgICAgICdwaHlfcGFydGljbGVfZGF0YV9mbGFnX3R5cGVmbGFncyBwaHlfcGFydGljbGVfZGF0YV9mbGFnX3Bvc2l0aW9uICcgK1xuICAgICAgJ3BoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfdmVsb2NpdHkgcGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvdXIgJyArXG4gICAgICAncGh5X3BhcnRpY2xlX2RhdGFfZmxhZ19jb2xvciBwaHlfcGFydGljbGVfZGF0YV9mbGFnX2NhdGVnb3J5ICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9vdXJfaW5mbyBhY2hpZXZlbWVudF9mcmllbmRzX2luZm8gJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfbGVhZGVyYm9hcmRfaW5mbyBhY2hpZXZlbWVudF9hY2hpZXZlbWVudF9pbmZvICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9hbGxfcGxheWVycyBhY2hpZXZlbWVudF9maWx0ZXJfZnJpZW5kc19vbmx5ICcgK1xuICAgICAgJ2FjaGlldmVtZW50X2ZpbHRlcl9mYXZvcml0ZXNfb25seSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX2FjaGlldmVtZW50X2NoYWxsZW5nZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF90eXBlX3Njb3JlX2NoYWxsZW5nZSBhY2hpZXZlbWVudF9waWNfbG9hZGVkICAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3VpIGFjaGlldmVtZW50X3Nob3dfcHJvZmlsZSAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X2xlYWRlcmJvYXJkIGFjaGlldmVtZW50X3Nob3dfYWNoaWV2ZW1lbnQgJyArXG4gICAgICAnYWNoaWV2ZW1lbnRfc2hvd19iYW5rIGFjaGlldmVtZW50X3Nob3dfZnJpZW5kX3BpY2tlciAnICtcbiAgICAgICdhY2hpZXZlbWVudF9zaG93X3B1cmNoYXNlX3Byb21wdCBuZXR3b3JrX3NvY2tldF90Y3AgJyArXG4gICAgICAnbmV0d29ya19zb2NrZXRfdWRwIG5ldHdvcmtfc29ja2V0X2JsdWV0b290aCBuZXR3b3JrX3R5cGVfY29ubmVjdCAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfZGlzY29ubmVjdCBuZXR3b3JrX3R5cGVfZGF0YSAnICtcbiAgICAgICduZXR3b3JrX3R5cGVfbm9uX2Jsb2NraW5nX2Nvbm5lY3QgbmV0d29ya19jb25maWdfY29ubmVjdF90aW1lb3V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX3VzZV9ub25fYmxvY2tpbmdfc29ja2V0ICcgK1xuICAgICAgJ25ldHdvcmtfY29uZmlnX2VuYWJsZV9yZWxpYWJsZV91ZHAgJyArXG4gICAgICAnbmV0d29ya19jb25maWdfZGlzYWJsZV9yZWxpYWJsZV91ZHAgYnVmZmVyX2ZpeGVkIGJ1ZmZlcl9ncm93ICcgK1xuICAgICAgJ2J1ZmZlcl93cmFwIGJ1ZmZlcl9mYXN0IGJ1ZmZlcl92YnVmZmVyIGJ1ZmZlcl9uZXR3b3JrIGJ1ZmZlcl91OCAnICtcbiAgICAgICdidWZmZXJfczggYnVmZmVyX3UxNiBidWZmZXJfczE2IGJ1ZmZlcl91MzIgYnVmZmVyX3MzMiBidWZmZXJfdTY0ICcgK1xuICAgICAgJ2J1ZmZlcl9mMTYgYnVmZmVyX2YzMiBidWZmZXJfZjY0IGJ1ZmZlcl9ib29sIGJ1ZmZlcl90ZXh0ICcgK1xuICAgICAgJ2J1ZmZlcl9zdHJpbmcgYnVmZmVyX3N1cmZhY2VfY29weSBidWZmZXJfc2Vla19zdGFydCAnICtcbiAgICAgICdidWZmZXJfc2Vla19yZWxhdGl2ZSBidWZmZXJfc2Vla19lbmQgJyArXG4gICAgICAnYnVmZmVyX2dlbmVyYWxlcnJvciBidWZmZXJfb3V0b2ZzcGFjZSBidWZmZXJfb3V0b2Zib3VuZHMgJyArXG4gICAgICAnYnVmZmVyX2ludmFsaWR0eXBlICB0ZXh0X3R5cGUgYnV0dG9uX3R5cGUgaW5wdXRfdHlwZSBBTlNJX0NIQVJTRVQgJyArXG4gICAgICAnREVGQVVMVF9DSEFSU0VUIEVBU1RFVVJPUEVfQ0hBUlNFVCBSVVNTSUFOX0NIQVJTRVQgU1lNQk9MX0NIQVJTRVQgJyArXG4gICAgICAnU0hJRlRKSVNfQ0hBUlNFVCBIQU5HRVVMX0NIQVJTRVQgR0IyMzEyX0NIQVJTRVQgQ0hJTkVTRUJJRzVfQ0hBUlNFVCAnICtcbiAgICAgICdKT0hBQl9DSEFSU0VUIEhFQlJFV19DSEFSU0VUIEFSQUJJQ19DSEFSU0VUIEdSRUVLX0NIQVJTRVQgJyArXG4gICAgICAnVFVSS0lTSF9DSEFSU0VUIFZJRVROQU1FU0VfQ0hBUlNFVCBUSEFJX0NIQVJTRVQgTUFDX0NIQVJTRVQgJyArXG4gICAgICAnQkFMVElDX0NIQVJTRVQgT0VNX0NIQVJTRVQgIGdwX2ZhY2UxIGdwX2ZhY2UyIGdwX2ZhY2UzIGdwX2ZhY2U0ICcgK1xuICAgICAgJ2dwX3Nob3VsZGVybCBncF9zaG91bGRlcnIgZ3Bfc2hvdWxkZXJsYiBncF9zaG91bGRlcnJiIGdwX3NlbGVjdCAnICtcbiAgICAgICdncF9zdGFydCBncF9zdGlja2wgZ3Bfc3RpY2tyIGdwX3BhZHUgZ3BfcGFkZCBncF9wYWRsIGdwX3BhZHIgJyArXG4gICAgICAnZ3BfYXhpc2xoIGdwX2F4aXNsdiBncF9heGlzcmggZ3BfYXhpc3J2IG92X2ZyaWVuZHMgb3ZfY29tbXVuaXR5ICcgK1xuICAgICAgJ292X3BsYXllcnMgb3Zfc2V0dGluZ3Mgb3ZfZ2FtZWdyb3VwIG92X2FjaGlldmVtZW50cyBsYl9zb3J0X25vbmUgJyArXG4gICAgICAnbGJfc29ydF9hc2NlbmRpbmcgbGJfc29ydF9kZXNjZW5kaW5nIGxiX2Rpc3Bfbm9uZSBsYl9kaXNwX251bWVyaWMgJyArXG4gICAgICAnbGJfZGlzcF90aW1lX3NlYyBsYl9kaXNwX3RpbWVfbXMgdWdjX3Jlc3VsdF9zdWNjZXNzICcgK1xuICAgICAgJ3VnY19maWxldHlwZV9jb21tdW5pdHkgdWdjX2ZpbGV0eXBlX21pY3JvdHJhbnMgdWdjX3Zpc2liaWxpdHlfcHVibGljICcgK1xuICAgICAgJ3VnY192aXNpYmlsaXR5X2ZyaWVuZHNfb25seSB1Z2NfdmlzaWJpbGl0eV9wcml2YXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVZvdGUgdWdjX3F1ZXJ5X1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9BY2NlcHRlZEZvckdhbWVSYW5rZWRCeUFjY2VwdGFuY2VEYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeVRyZW5kICcgK1xuICAgICAgJ3VnY19xdWVyeV9GYXZvcml0ZWRCeUZyaWVuZHNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfQ3JlYXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlICcgK1xuICAgICAgJ3VnY19xdWVyeV9SYW5rZWRCeU51bVRpbWVzUmVwb3J0ZWQgJyArXG4gICAgICAndWdjX3F1ZXJ5X0NyZWF0ZWRCeUZvbGxvd2VkVXNlcnNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZSAnICtcbiAgICAgICd1Z2NfcXVlcnlfTm90WWV0UmF0ZWQgdWdjX3F1ZXJ5X1JhbmtlZEJ5VG90YWxWb3Rlc0FzYyAnICtcbiAgICAgICd1Z2NfcXVlcnlfUmFua2VkQnlWb3Rlc1VwIHVnY19xdWVyeV9SYW5rZWRCeVRleHRTZWFyY2ggJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9DcmVhdGlvbk9yZGVyRGVzYyB1Z2Nfc29ydG9yZGVyX0NyZWF0aW9uT3JkZXJBc2MgJyArXG4gICAgICAndWdjX3NvcnRvcmRlcl9UaXRsZUFzYyB1Z2Nfc29ydG9yZGVyX0xhc3RVcGRhdGVkRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX1N1YnNjcmlwdGlvbkRhdGVEZXNjIHVnY19zb3J0b3JkZXJfVm90ZVNjb3JlRGVzYyAnICtcbiAgICAgICd1Z2Nfc29ydG9yZGVyX0Zvck1vZGVyYXRpb24gdWdjX2xpc3RfUHVibGlzaGVkIHVnY19saXN0X1ZvdGVkT24gJyArXG4gICAgICAndWdjX2xpc3RfVm90ZWRVcCB1Z2NfbGlzdF9Wb3RlZERvd24gdWdjX2xpc3RfV2lsbFZvdGVMYXRlciAnICtcbiAgICAgICd1Z2NfbGlzdF9GYXZvcml0ZWQgdWdjX2xpc3RfU3Vic2NyaWJlZCB1Z2NfbGlzdF9Vc2VkT3JQbGF5ZWQgJyArXG4gICAgICAndWdjX2xpc3RfRm9sbG93ZWQgdWdjX21hdGNoX0l0ZW1zIHVnY19tYXRjaF9JdGVtc19NdHggJyArXG4gICAgICAndWdjX21hdGNoX0l0ZW1zX1JlYWR5VG9Vc2UgdWdjX21hdGNoX0NvbGxlY3Rpb25zIHVnY19tYXRjaF9BcnR3b3JrICcgK1xuICAgICAgJ3VnY19tYXRjaF9WaWRlb3MgdWdjX21hdGNoX1NjcmVlbnNob3RzIHVnY19tYXRjaF9BbGxHdWlkZXMgJyArXG4gICAgICAndWdjX21hdGNoX1dlYkd1aWRlcyB1Z2NfbWF0Y2hfSW50ZWdyYXRlZEd1aWRlcyAnICtcbiAgICAgICd1Z2NfbWF0Y2hfVXNhYmxlSW5HYW1lIHVnY19tYXRjaF9Db250cm9sbGVyQmluZGluZ3MgICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wb3NpdGlvbiB2ZXJ0ZXhfdXNhZ2VfY29sb3VyIHZlcnRleF91c2FnZV9jb2xvciAnICtcbiAgICAgICd2ZXJ0ZXhfdXNhZ2Vfbm9ybWFsIHZlcnRleF91c2FnZV90ZXhjb29yZCB2ZXJ0ZXhfdXNhZ2VfdGV4dGNvb3JkICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9ibGVuZHdlaWdodCB2ZXJ0ZXhfdXNhZ2VfYmxlbmRpbmRpY2VzICcgK1xuICAgICAgJ3ZlcnRleF91c2FnZV9wc2l6ZSB2ZXJ0ZXhfdXNhZ2VfdGFuZ2VudCB2ZXJ0ZXhfdXNhZ2VfYmlub3JtYWwgJyArXG4gICAgICAndmVydGV4X3VzYWdlX2ZvZyB2ZXJ0ZXhfdXNhZ2VfZGVwdGggdmVydGV4X3VzYWdlX3NhbXBsZSAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDEgdmVydGV4X3R5cGVfZmxvYXQyIHZlcnRleF90eXBlX2Zsb2F0MyAnICtcbiAgICAgICd2ZXJ0ZXhfdHlwZV9mbG9hdDQgdmVydGV4X3R5cGVfY29sb3VyIHZlcnRleF90eXBlX2NvbG9yICcgK1xuICAgICAgJ3ZlcnRleF90eXBlX3VieXRlNCBsYXllcmVsZW1lbnR0eXBlX3VuZGVmaW5lZCAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX2JhY2tncm91bmQgbGF5ZXJlbGVtZW50dHlwZV9pbnN0YW5jZSAnICtcbiAgICAgICdsYXllcmVsZW1lbnR0eXBlX29sZHRpbGVtYXAgbGF5ZXJlbGVtZW50dHlwZV9zcHJpdGUgJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlbWFwIGxheWVyZWxlbWVudHR5cGVfcGFydGljbGVzeXN0ZW0gJyArXG4gICAgICAnbGF5ZXJlbGVtZW50dHlwZV90aWxlIHRpbGVfcm90YXRlIHRpbGVfZmxpcCB0aWxlX21pcnJvciAnICtcbiAgICAgICd0aWxlX2luZGV4X21hc2sga2J2X3R5cGVfZGVmYXVsdCBrYnZfdHlwZV9hc2NpaSBrYnZfdHlwZV91cmwgJyArXG4gICAgICAna2J2X3R5cGVfZW1haWwga2J2X3R5cGVfbnVtYmVycyBrYnZfdHlwZV9waG9uZSBrYnZfdHlwZV9waG9uZV9uYW1lICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfZGVmYXVsdCBrYnZfcmV0dXJua2V5X2dvIGtidl9yZXR1cm5rZXlfZ29vZ2xlICcgK1xuICAgICAgJ2tidl9yZXR1cm5rZXlfam9pbiBrYnZfcmV0dXJua2V5X25leHQga2J2X3JldHVybmtleV9yb3V0ZSAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X3NlYXJjaCBrYnZfcmV0dXJua2V5X3NlbmQga2J2X3JldHVybmtleV95YWhvbyAnICtcbiAgICAgICdrYnZfcmV0dXJua2V5X2RvbmUga2J2X3JldHVybmtleV9jb250aW51ZSBrYnZfcmV0dXJua2V5X2VtZXJnZW5jeSAnICtcbiAgICAgICdrYnZfYXV0b2NhcGl0YWxpemVfbm9uZSBrYnZfYXV0b2NhcGl0YWxpemVfd29yZHMgJyArXG4gICAgICAna2J2X2F1dG9jYXBpdGFsaXplX3NlbnRlbmNlcyBrYnZfYXV0b2NhcGl0YWxpemVfY2hhcmFjdGVycycsXG4gICAgc3ltYm9sOiAnYXJndW1lbnRfcmVsYXRpdmUgYXJndW1lbnQgYXJndW1lbnQwIGFyZ3VtZW50MSBhcmd1bWVudDIgJyArXG4gICAgICAnYXJndW1lbnQzIGFyZ3VtZW50NCBhcmd1bWVudDUgYXJndW1lbnQ2IGFyZ3VtZW50NyBhcmd1bWVudDggJyArXG4gICAgICAnYXJndW1lbnQ5IGFyZ3VtZW50MTAgYXJndW1lbnQxMSBhcmd1bWVudDEyIGFyZ3VtZW50MTMgYXJndW1lbnQxNCAnICtcbiAgICAgICdhcmd1bWVudDE1IGFyZ3VtZW50X2NvdW50IHggeSB4cHJldmlvdXMgeXByZXZpb3VzIHhzdGFydCB5c3RhcnQgJyArXG4gICAgICAnaHNwZWVkIHZzcGVlZCBkaXJlY3Rpb24gc3BlZWQgZnJpY3Rpb24gZ3Jhdml0eSBncmF2aXR5X2RpcmVjdGlvbiAnICtcbiAgICAgICdwYXRoX2luZGV4IHBhdGhfcG9zaXRpb24gcGF0aF9wb3NpdGlvbnByZXZpb3VzIHBhdGhfc3BlZWQgJyArXG4gICAgICAncGF0aF9zY2FsZSBwYXRoX29yaWVudGF0aW9uIHBhdGhfZW5kYWN0aW9uIG9iamVjdF9pbmRleCBpZCBzb2xpZCAnICtcbiAgICAgICdwZXJzaXN0ZW50IG1hc2tfaW5kZXggaW5zdGFuY2VfY291bnQgaW5zdGFuY2VfaWQgcm9vbV9zcGVlZCBmcHMgJyArXG4gICAgICAnZnBzX3JlYWwgY3VycmVudF90aW1lIGN1cnJlbnRfeWVhciBjdXJyZW50X21vbnRoIGN1cnJlbnRfZGF5ICcgK1xuICAgICAgJ2N1cnJlbnRfd2Vla2RheSBjdXJyZW50X2hvdXIgY3VycmVudF9taW51dGUgY3VycmVudF9zZWNvbmQgYWxhcm0gJyArXG4gICAgICAndGltZWxpbmVfaW5kZXggdGltZWxpbmVfcG9zaXRpb24gdGltZWxpbmVfc3BlZWQgdGltZWxpbmVfcnVubmluZyAnICtcbiAgICAgICd0aW1lbGluZV9sb29wIHJvb20gcm9vbV9maXJzdCByb29tX2xhc3Qgcm9vbV93aWR0aCByb29tX2hlaWdodCAnICtcbiAgICAgICdyb29tX2NhcHRpb24gcm9vbV9wZXJzaXN0ZW50IHNjb3JlIGxpdmVzIGhlYWx0aCBzaG93X3Njb3JlICcgK1xuICAgICAgJ3Nob3dfbGl2ZXMgc2hvd19oZWFsdGggY2FwdGlvbl9zY29yZSBjYXB0aW9uX2xpdmVzIGNhcHRpb25faGVhbHRoICcgK1xuICAgICAgJ2V2ZW50X3R5cGUgZXZlbnRfbnVtYmVyIGV2ZW50X29iamVjdCBldmVudF9hY3Rpb24gJyArXG4gICAgICAnYXBwbGljYXRpb25fc3VyZmFjZSBnYW1lbWFrZXJfcHJvIGdhbWVtYWtlcl9yZWdpc3RlcmVkICcgK1xuICAgICAgJ2dhbWVtYWtlcl92ZXJzaW9uIGVycm9yX29jY3VycmVkIGVycm9yX2xhc3QgZGVidWdfbW9kZSAnICtcbiAgICAgICdrZXlib2FyZF9rZXkga2V5Ym9hcmRfbGFzdGtleSBrZXlib2FyZF9sYXN0Y2hhciBrZXlib2FyZF9zdHJpbmcgJyArXG4gICAgICAnbW91c2VfeCBtb3VzZV95IG1vdXNlX2J1dHRvbiBtb3VzZV9sYXN0YnV0dG9uIGN1cnNvcl9zcHJpdGUgJyArXG4gICAgICAndmlzaWJsZSBzcHJpdGVfaW5kZXggc3ByaXRlX3dpZHRoIHNwcml0ZV9oZWlnaHQgc3ByaXRlX3hvZmZzZXQgJyArXG4gICAgICAnc3ByaXRlX3lvZmZzZXQgaW1hZ2VfbnVtYmVyIGltYWdlX2luZGV4IGltYWdlX3NwZWVkIGRlcHRoICcgK1xuICAgICAgJ2ltYWdlX3hzY2FsZSBpbWFnZV95c2NhbGUgaW1hZ2VfYW5nbGUgaW1hZ2VfYWxwaGEgaW1hZ2VfYmxlbmQgJyArXG4gICAgICAnYmJveF9sZWZ0IGJib3hfcmlnaHQgYmJveF90b3AgYmJveF9ib3R0b20gbGF5ZXIgYmFja2dyb3VuZF9jb2xvdXIgICcgK1xuICAgICAgJ2JhY2tncm91bmRfc2hvd2NvbG91ciBiYWNrZ3JvdW5kX2NvbG9yIGJhY2tncm91bmRfc2hvd2NvbG9yICcgK1xuICAgICAgJ3ZpZXdfZW5hYmxlZCB2aWV3X2N1cnJlbnQgdmlld192aXNpYmxlIHZpZXdfeHZpZXcgdmlld195dmlldyAnICtcbiAgICAgICd2aWV3X3d2aWV3IHZpZXdfaHZpZXcgdmlld194cG9ydCB2aWV3X3lwb3J0IHZpZXdfd3BvcnQgdmlld19ocG9ydCAnICtcbiAgICAgICd2aWV3X2FuZ2xlIHZpZXdfaGJvcmRlciB2aWV3X3Zib3JkZXIgdmlld19oc3BlZWQgdmlld192c3BlZWQgJyArXG4gICAgICAndmlld19vYmplY3Qgdmlld19zdXJmYWNlX2lkIHZpZXdfY2FtZXJhIGdhbWVfaWQgZ2FtZV9kaXNwbGF5X25hbWUgJyArXG4gICAgICAnZ2FtZV9wcm9qZWN0X25hbWUgZ2FtZV9zYXZlX2lkIHdvcmtpbmdfZGlyZWN0b3J5IHRlbXBfZGlyZWN0b3J5ICcgK1xuICAgICAgJ3Byb2dyYW1fZGlyZWN0b3J5IGJyb3dzZXJfd2lkdGggYnJvd3Nlcl9oZWlnaHQgb3NfdHlwZSBvc19kZXZpY2UgJyArXG4gICAgICAnb3NfYnJvd3NlciBvc192ZXJzaW9uIGRpc3BsYXlfYWEgYXN5bmNfbG9hZCBkZWx0YV90aW1lICcgK1xuICAgICAgJ3dlYmdsX2VuYWJsZWQgZXZlbnRfZGF0YSBpYXBfZGF0YSBwaHlfcm90YXRpb24gcGh5X3Bvc2l0aW9uX3ggJyArXG4gICAgICAncGh5X3Bvc2l0aW9uX3kgcGh5X2FuZ3VsYXJfdmVsb2NpdHkgcGh5X2xpbmVhcl92ZWxvY2l0eV94ICcgK1xuICAgICAgJ3BoeV9saW5lYXJfdmVsb2NpdHlfeSBwaHlfc3BlZWRfeCBwaHlfc3BlZWRfeSBwaHlfc3BlZWQgJyArXG4gICAgICAncGh5X2FuZ3VsYXJfZGFtcGluZyBwaHlfbGluZWFyX2RhbXBpbmcgcGh5X2J1bGxldCAnICtcbiAgICAgICdwaHlfZml4ZWRfcm90YXRpb24gcGh5X2FjdGl2ZSBwaHlfbWFzcyBwaHlfaW5lcnRpYSBwaHlfY29tX3ggJyArXG4gICAgICAncGh5X2NvbV95IHBoeV9keW5hbWljIHBoeV9raW5lbWF0aWMgcGh5X3NsZWVwaW5nICcgK1xuICAgICAgJ3BoeV9jb2xsaXNpb25fcG9pbnRzIHBoeV9jb2xsaXNpb25feCBwaHlfY29sbGlzaW9uX3kgJyArXG4gICAgICAncGh5X2NvbF9ub3JtYWxfeCBwaHlfY29sX25vcm1hbF95IHBoeV9wb3NpdGlvbl94cHJldmlvdXMgJyArXG4gICAgICAncGh5X3Bvc2l0aW9uX3lwcmV2aW91cydcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ21sJywgJ0dNTCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLCAvLyBsYW5ndWFnZSBpcyBjYXNlLWluc2Vuc2l0aXZlXG4gICAga2V5d29yZHM6IEdNTF9LRVlXT1JEUyxcblxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBHT19LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2JyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCAnICtcbiAgICAgICdjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciAnICtcbiAgICAgICdib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4ICcgK1xuICAgICAgJ3VpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICAndHJ1ZSBmYWxzZSBpb3RhIG5pbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYXBwZW5kIGNhcCBjbG9zZSBjb21wbGV4IGNvcHkgaW1hZyBsZW4gbWFrZSBuZXcgcGFuaWMgcHJpbnQgcHJpbnRsbiByZWFsIHJlY292ZXIgZGVsZXRlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ29sYW5nJ10sXG4gICAga2V5d29yZHM6IEdPX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAge2JlZ2luOiAnYCcsIGVuZDogJ2AnfSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnW2ldJywgcmVsZXZhbmNlOiAxfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86PS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLCBlbmQ6ICdcXFxccyooXFxcXHt8JCknLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEdPX0tFWVdPUkRTLFxuICAgICAgICAgICAgaWxsZWdhbDogL1tcIiddL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgJ3ByaW50bG4gcmVhZGxuIHByaW50IGltcG9ydCBtb2R1bGUgZnVuY3Rpb24gbG9jYWwgcmV0dXJuIGxldCB2YXIgJyArXG4gICAgICAgICAgJ3doaWxlIGZvciBmb3JlYWNoIHRpbWVzIGluIGNhc2Ugd2hlbiBtYXRjaCB3aXRoIGJyZWFrIGNvbnRpbnVlICcgK1xuICAgICAgICAgICdhdWdtZW50IGF1Z21lbnRhdGlvbiBlYWNoIGZpbmQgZmlsdGVyIHJlZHVjZSAnICtcbiAgICAgICAgICAnaWYgdGhlbiBlbHNlIG90aGVyd2lzZSB0cnkgY2F0Y2ggZmluYWxseSByYWlzZSB0aHJvdyBvcklmTnVsbCAnICtcbiAgICAgICAgICAnRHluYW1pY09iamVjdHwxMCBEeW5hbWljVmFyaWFibGUgc3RydWN0IE9ic2VydmFibGUgbWFwIHNldCB2ZWN0b3IgbGlzdCBhcnJheScsXG4gICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCdcbiAgICAgIH0sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAndGFzayBwcm9qZWN0IGFsbHByb2plY3RzIHN1YnByb2plY3RzIGFydGlmYWN0cyBidWlsZHNjcmlwdCBjb25maWd1cmF0aW9ucyAnICtcbiAgICAgICAgJ2RlcGVuZGVuY2llcyByZXBvc2l0b3JpZXMgc291cmNlU2V0cyBkZXNjcmlwdGlvbiBkZWxldGUgZnJvbSBpbnRvIGluY2x1ZGUgJyArXG4gICAgICAgICdleGNsdWRlIHNvdXJjZSBjbGFzc3BhdGggZGVzdGluYXRpb25EaXIgaW5jbHVkZXMgb3B0aW9ucyBzb3VyY2VDb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAndGFyZ2V0Q29tcGF0aWJpbGl0eSBncm91cCBmbGF0RGlyIGRvTGFzdCBkb0ZpcnN0IGZsYXR0ZW4gdG9kaXIgZnJvbWRpciBhbnQgJyArXG4gICAgICAgICdkZWYgYWJzdHJhY3QgYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWZhdWx0IGRvIGVsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBuYXRpdmUgbmV3IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZXR1cm4gc3RhdGljICcgK1xuICAgICAgICAnc3dpdGNoIHN5bmNocm9uaXplZCB0aHJvdyB0aHJvd3MgdHJhbnNpZW50IHRyeSB2b2xhdGlsZSB3aGlsZSBzdHJpY3RmcCBwYWNrYWdlICcgK1xuICAgICAgICAnaW1wb3J0IGZhbHNlIG51bGwgc3VwZXIgdGhpcyB0cnVlIGFudGxydGFzayBjaGVja3N0eWxlIGNvZGVuYXJjIGNvcHkgYm9vbGVhbiAnICtcbiAgICAgICAgJ2J5dGUgY2hhciBjbGFzcyBkb3VibGUgZmxvYXQgaW50IGludGVyZmFjZSBsb25nIHNob3J0IHZvaWQgY29tcGlsZSBydW5UaW1lICcgK1xuICAgICAgICAnZmlsZSBmaWxlVHJlZSBhYnMgYW55IGFwcGVuZCBhc0xpc3QgYXNXcml0YWJsZSBjYWxsIGNvbGxlY3QgY29tcGFyZVRvIGNvdW50ICcgK1xuICAgICAgICAnZGl2IGR1bXAgZWFjaCBlYWNoQnl0ZSBlYWNoRmlsZSBlYWNoTGluZSBldmVyeSBmaW5kIGZpbmRBbGwgZmxhdHRlbiBnZXRBdCAnICtcbiAgICAgICAgJ2dldEVyciBnZXRJbiBnZXRPdXQgZ2V0VGV4dCBncmVwIGltbXV0YWJsZSBpbmplY3QgaW5zcGVjdCBpbnRlcnNlY3QgaW52b2tlTWV0aG9kcyAnICtcbiAgICAgICAgJ2lzQ2FzZSBqb2luIGxlZnRTaGlmdCBtaW51cyBtdWx0aXBseSBuZXdJbnB1dFN0cmVhbSBuZXdPdXRwdXRTdHJlYW0gbmV3UHJpbnRXcml0ZXIgJyArXG4gICAgICAgICduZXdSZWFkZXIgbmV3V3JpdGVyIG5leHQgcGx1cyBwb3AgcG93ZXIgcHJldmlvdXMgcHJpbnQgcHJpbnRsbiBwdXNoIHB1dEF0IHJlYWQgJyArXG4gICAgICAgICdyZWFkQnl0ZXMgcmVhZExpbmVzIHJldmVyc2UgcmV2ZXJzZUVhY2ggcm91bmQgc2l6ZSBzb3J0IHNwbGl0RWFjaExpbmUgc3RlcCBzdWJNYXAgJyArXG4gICAgICAgICd0aW1lcyB0b0ludGVnZXIgdG9MaXN0IHRva2VuaXplIHVwdG8gd2FpdEZvck9yS2lsbCB3aXRoUHJpbnRXcml0ZXIgd2l0aFJlYWRlciAnICtcbiAgICAgICAgJ3dpdGhTdHJlYW0gd2l0aFdyaXRlciB3aXRoV3JpdGVyQXBwZW5kIHdyaXRlIHdyaXRlTGluZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFXG5cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgIGxpdGVyYWwgOiAndHJ1ZSBmYWxzZSBudWxsJyxcbiAgICAgICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAnYnl0ZSBzaG9ydCBjaGFyIGludCBsb25nIGJvb2xlYW4gZmxvYXQgZG91YmxlIHZvaWQgJyArXG4gICAgICAgICAgICAvLyBncm9vdnkgc3BlY2lmaWMga2V5d29yZHNcbiAgICAgICAgICAgICdkZWYgYXMgaW4gYXNzZXJ0IHRyYWl0ICcgK1xuICAgICAgICAgICAgLy8gY29tbW9uIGtleXdvcmRzIHdpdGggSmF2YVxuICAgICAgICAgICAgJ3N1cGVyIHRoaXMgYWJzdHJhY3Qgc3RhdGljIHZvbGF0aWxlIHRyYW5zaWVudCBwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgc3luY2hyb25pemVkIGZpbmFsICcgK1xuICAgICAgICAgICAgJ2NsYXNzIGludGVyZmFjZSBlbnVtIGlmIGVsc2UgZm9yIHdoaWxlIHN3aXRjaCBjYXNlIGJyZWFrIGRlZmF1bHQgY29udGludWUgJyArXG4gICAgICAgICAgICAndGhyb3cgdGhyb3dzIHRyeSBjYXRjaCBmaW5hbGx5IGltcGxlbWVudHMgZXh0ZW5kcyBuZXcgaW1wb3J0IHBhY2thZ2UgcmV0dXJuIGluc3RhbmNlb2YnXG4gICAgICAgIH0sXG5cbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAgICAgICAgICdcXFxcKi8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lIDogJ2RvY3RhZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogXCInJydcIiwgZW5kOiBcIicnJ1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IFwiXFxcXCQvXCIsIGVuZDogXCIvXFxcXCRcIixcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9+P1xcL1teXFwvXFxuXStcXC8vLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIl4jIS91c3IvYmluL2VudlwiLCBlbmQ6ICckJyxcbiAgICAgICAgICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIHRyYWl0IGVudW0nLCBlbmQ6ICd7JyxcbiAgICAgICAgICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBtYXAga2V5cyBhbmQgbmFtZWQgcGFyYW1ldGVycyBhcyBzdHJpbmdzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46IC9bXlxcP117MH1bQS1aYS16MC05XyRdKyAqOi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gY2F0Y2ggbWlkZGxlIGVsZW1lbnQgb2YgdGhlIHRlcm5hcnkgb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBoaWdobGlnaHQgaXQgYXMgYSBsYWJlbCwgbmFtZWQgcGFyYW1ldGVyLCBvciBtYXAga2V5XG4gICAgICAgICAgICAgICAgYmVnaW46IC9cXD8vLCBlbmQ6IC9cXDovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGhpZ2hsaWdodCBsYWJlbGVkIHN0YXRlbWVudHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLCBiZWdpbjogJ15cXFxccypbQS1aYS16MC05XyRdKzonLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvI3w8XFwvL1xuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSAvLyBUT0RPIHN1cHBvcnQgZmlsdGVyIHRhZ3MgbGlrZSA6amF2YXNjcmlwdCwgc3VwcG9ydCBpbmxpbmUgSFRNTFxuZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiEhISggKDV8MVxcXFwuMXxTdHJpY3R8RnJhbWVzZXR8QmFzaWN8TW9iaWxlfFJERmF8WE1MXFxcXGIuKikpPyQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gRklYTUUgdGhlc2UgY29tbWVudHMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc3BhbiBpbmRlbnRlZCBsaW5lc1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXlxcXFxzKighPSN8PSN8LSN8LykuKiQnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyooLXw9fCE9KSg/ISMpJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnXFxcXG4nLFxuICAgICAgICAgIHN1Ykxhbmd1YWdlOiAncnVieSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqJScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLFxuICAgICAgICAgICAgYmVnaW46ICcjW1xcXFx3LV0rJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcLltcXFxcdy1dKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAne1xcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyp9JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJzpcXFxcdytcXFxccyo9PicsXG4gICAgICAgICAgICAgICAgZW5kOiAnLFxcXFxzKycsXG4gICAgICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnOlxcXFx3KydcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFxcXFxzKicsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccypcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrXFxcXHMqPScsXG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXHMrJyxcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3KycsXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqWz1+XVxcXFxzKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnI3snLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIEJVSUxUX0lOUyA9IHsnYnVpbHRpbi1uYW1lJzogJ2VhY2ggaW4gd2l0aCBpZiBlbHNlIHVubGVzcyBiaW5kYXR0ciBhY3Rpb24gY29sbGVjdGlvbiBkZWJ1Z2dlciBsb2cgb3V0bGV0IHRlbXBsYXRlIHVuYm91bmQgdmlldyB5aWVsZCBsb29rdXAnfTtcblxuICB2YXIgSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQgPSB7XG4gICAgYmVnaW46IC9cIi4qP1wifCcuKj8nfFxcWy4qP1xcXXxcXHcrL1xuICB9O1xuXG4gIHZhciBFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMID0gaGxqcy5pbmhlcml0KElERU5USUZJRVJfUExBSU5fT1JfUVVPVEVELCB7XG4gICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICBzdGFydHM6IHtcbiAgICAgIC8vIGhlbHBlciBwYXJhbXNcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoSURFTlRJRklFUl9QTEFJTl9PUl9RVU9URUQsIHtyZWxldmFuY2U6IDB9KV1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciBCTE9DS19NVVNUQUNIRV9DT05URU5UUyA9IGhsanMuaW5oZXJpdChFWFBSRVNTSU9OX09SX0hFTFBFUl9DQUxMLCB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZSdcbiAgfSk7XG5cbiAgdmFyIEJBU0lDX01VU1RBQ0hFX0NPTlRFTlRTID0gaGxqcy5pbmhlcml0KEVYUFJFU1NJT05fT1JfSEVMUEVSX0NBTEwsIHtcbiAgICAvLyByZWxldmFuY2UgMCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb25jZXJuaW5nIGF1dG8tZGV0ZWN0aW9uXG4gICAgcmVsZXZhbmNlOiAwXG4gIH0pO1xuXG4gIHZhciBFU0NBUEVfTVVTVEFDSEVfV0lUSF9QUkVDRUVESU5HX0JBQ0tTTEFTSCA9IHtiZWdpbjogL1xcXFxcXHtcXHsvLCBza2lwOiB0cnVlfTtcbiAgdmFyIFBSRVZFTlRfRVNDQVBFX1dJVEhfQU5PVEhFUl9QUkVDRUVESU5HX0JBQ0tTTEFTSCA9IHtiZWdpbjogL1xcXFxcXFxcKD89XFx7XFx7KS8sIHNraXA6IHRydWV9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydoYnMnLCAnaHRtbC5oYnMnLCAnaHRtbC5oYW5kbGViYXJzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEVTQ0FQRV9NVVNUQUNIRV9XSVRIX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgUFJFVkVOVF9FU0NBUEVfV0lUSF9BTk9USEVSX1BSRUNFRURJTkdfQkFDS1NMQVNILFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHtcXHshLS0vLCAvLS1cXH1cXH0vKSxcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7XFx7IS8sIC9cXH1cXH0vKSxcbiAgICAgIHtcbiAgICAgICAgLy8gb3BlbiByYXcgYmxvY2sgXCJ7e3t7cmF3fX19fSBjb250ZW50IG5vdCBldmFsdWF0ZWQge3t7ey9yYXd9fX19XCJcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtcXHtcXHsoPyFcXC8pLywgZW5kOiAvXFx9XFx9XFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU10sXG4gICAgICAgIHN0YXJ0czoge2VuZDogL1xce1xce1xce1xce1xcLy8sIHJldHVybkVuZDogdHJ1ZSwgc3ViTGFuZ3VhZ2U6ICd4bWwnfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY2xvc2UgcmF3IGJsb2NrXG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7XFx7XFx7XFwvLywgZW5kOiAvXFx9XFx9XFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG9wZW4gYmxvY2sgc3RhdGVtZW50XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7WyNcXC9dLywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtCTE9DS19NVVNUQUNIRV9DT05URU5UU10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIE5PVCBodG1sLWVzY2FwZWRcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xce1xcey8sIGVuZDogL1xcfVxcfVxcfS8sXG4gICAgICAgIGtleXdvcmRzOiBCVUlMVF9JTlMsXG4gICAgICAgIGNvbnRhaW5zOiBbQkFTSUNfTVVTVEFDSEVfQ09OVEVOVFNdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0ZW1wbGF0ZSB2YXJpYWJsZSBvciBoZWxwZXItY2FsbCB0aGF0IGlzIGh0bWwtZXNjYXBlZFxuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAga2V5d29yZHM6IEJVSUxUX0lOUyxcbiAgICAgICAgY29udGFpbnM6IFtCQVNJQ19NVVNUQUNIRV9DT05URU5UU11cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICd7LScsXG4gICAgICAgICctfScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcblxuICB2YXIgUFJBR01BID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAney0jJywgZW5kOiAnIy19J1xuICB9O1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdeIycsIGVuZDogJyQnXG4gIH07XG5cbiAgdmFyIENPTlNUUlVDVE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAnXFxcXGJbQS1aXVtcXFxcd1xcJ10qJywgLy8gVE9ETzogb3RoZXIgY29uc3RydWN0b3JzIChidWlsZC1pbiwgaW5maXgpLlxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBMSVNUID0ge1xuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1wiJyxcbiAgICBjb250YWluczogW1xuICAgICAgUFJBR01BLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge2NsYXNzTmFtZTogJ3R5cGUnLCBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHddKihcXFxcKChcXFxcLlxcXFwufCx8XFxcXHcrKVxcXFwpKT8nfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJ1tfYS16XVtcXFxcd1xcJ10qJ30pLFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcblxuICB2YXIgUkVDT1JEID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIGNvbnRhaW5zOiBMSVNULmNvbnRhaW5zXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2hzJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnbGV0IGluIGlmIHRoZW4gZWxzZSBjYXNlIG9mIHdoZXJlIGRvIG1vZHVsZSBpbXBvcnQgaGlkaW5nICcgK1xuICAgICAgJ3F1YWxpZmllZCB0eXBlIGRhdGEgbmV3dHlwZSBkZXJpdmluZyBjbGFzcyBpbnN0YW5jZSBhcyBkZWZhdWx0ICcgK1xuICAgICAgJ2luZml4IGluZml4bCBpbmZpeHIgZm9yZWlnbiBleHBvcnQgY2NhbGwgc3RkY2FsbCBjcGx1c3BsdXMgJyArXG4gICAgICAnanZtIGRvdG5ldCBzYWZlIHVuc2FmZSBmYW1pbHkgZm9yYWxsIG1kbyBwcm9jIHJlYycsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gVG9wLWxldmVsIGNvbnN0cnVjdGlvbnMuXG5cbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ21vZHVsZScsIGVuZDogJ3doZXJlJyxcbiAgICAgICAga2V5d29yZHM6ICdtb2R1bGUgd2hlcmUnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYmltcG9ydFxcXFxiJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnaW1wb3J0IHF1YWxpZmllZCBhcyBoaWRpbmcnLFxuICAgICAgICBjb250YWluczogW0xJU1QsIENPTU1FTlRdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFdcXFxcLnw7J1xuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXihcXFxccyopPyhjbGFzc3xpbnN0YW5jZSlcXFxcYicsIGVuZDogJ3doZXJlJyxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBmYW1pbHkgaW5zdGFuY2Ugd2hlcmUnLFxuICAgICAgICBjb250YWluczogW0NPTlNUUlVDVE9SLCBMSVNULCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKGRhdGF8KG5ldyk/dHlwZSlcXFxcYicsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2RhdGEgZmFtaWx5IHR5cGUgbmV3dHlwZSBkZXJpdmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbUFJBR01BLCBDT05TVFJVQ1RPUiwgTElTVCwgUkVDT1JELCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZmF1bHQnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtDT05TVFJVQ1RPUiwgTElTVCwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmZpeCBpbmZpeGwgaW5maXhyJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFLCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYmZvcmVpZ25cXFxcYicsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2ZvcmVpZ24gaW1wb3J0IGV4cG9ydCBjY2FsbCBzdGRjYWxsIGNwbHVzcGx1cyBqdm0gJyArXG4gICAgICAgICAgICAgICAgICAnZG90bmV0IHNhZmUgdW5zYWZlJyxcbiAgICAgICAgY29udGFpbnM6IFtDT05TVFJVQ1RPUiwgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMhXFxcXC91c3JcXFxcL2JpblxcXFwvZW52XFwgcnVuaGFza2VsbCcsIGVuZDogJyQnXG4gICAgICB9LFxuXG4gICAgICAvLyBcIldoaXRlc3BhY2VzXCIuXG5cbiAgICAgIFBSQUdNQSxcbiAgICAgIFBSRVBST0NFU1NPUixcblxuICAgICAgLy8gTGl0ZXJhbHMgYW5kIG5hbWVzLlxuXG4gICAgICAvLyBUT0RPOiBjaGFyYWN0ZXJzLlxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIENPTlNUUlVDVE9SLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXltfYS16XVtcXFxcd1xcJ10qJ30pLFxuXG4gICAgICBDT01NRU5ULFxuXG4gICAgICB7YmVnaW46ICctPnw8LSd9IC8vIE5vIG1hcmt1cCwgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJztcbiAgdmFyIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAnKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJztcblxuICB2YXIgSEFYRV9CQVNJQ19UWVBFUyA9ICdJbnQgRmxvYXQgU3RyaW5nIEJvb2wgRHluYW1pYyBWb2lkIEFycmF5ICc7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2h4J10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdicmVhayBjYXNlIGNhc3QgY2F0Y2ggY29udGludWUgZGVmYXVsdCBkbyBkeW5hbWljIGVsc2UgZW51bSBleHRlcm4gJyArXG4gICAgICAgICAgICAgICAnZm9yIGZ1bmN0aW9uIGhlcmUgaWYgaW1wb3J0IGluIGlubGluZSBuZXZlciBuZXcgb3ZlcnJpZGUgcGFja2FnZSBwcml2YXRlIGdldCBzZXQgJyArXG4gICAgICAgICAgICAgICAncHVibGljIHJldHVybiBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJhY2UgdHJ5IHR5cGVkZWYgdW50eXBlZCB1c2luZyB2YXIgd2hpbGUgJyArXG4gICAgICAgICAgICAgICBIQVhFX0JBU0lDX1RZUEVTLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICd0cmFjZSB0aGlzJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIGludGVycG9sYXRlLWFibGUgc3RyaW5nc1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnc3Vic3QnLCAvLyBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAnc3Vic3QnLCAvLyBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkJywgZW5kOiAnXFxcXFd9J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgeyBjbGFzc05hbWU6ICdtZXRhJywgLy8gY29tcGlsZXIgbWV0YVxuICAgICAgICBiZWdpbjogJ0A6JywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ21ldGEnLCAvLyBjb21waWxlciBjb25kaXRpb25hbHNcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmQgZXJyb3InfVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsIC8vIGZ1bmN0aW9uIHR5cGVzXG4gICAgICAgIGJlZ2luOiAnOlsgXFx0XSonLCBlbmQ6ICdbXkEtWmEtejAtOV8gXFx0XFxcXC0+XScsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJywgLy8gdHlwZXNcbiAgICAgICAgYmVnaW46ICc6WyBcXHRdKicsIGVuZDogJ1xcXFxXJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJywgLy8gaW5zdGFudGlhdGlvblxuICAgICAgICBiZWdpbjogJ25ldyAqJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2NsYXNzJywgLy8gZW51bXNcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2VudW0nLCBlbmQ6ICdcXFxceycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2NsYXNzJywgLy8gYWJzdHJhY3RzXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdhYnN0cmFjdCcsIGVuZDogJ1tcXFxceyRdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnZnJvbSArJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICd0byArJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXSxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBrZXl3b3JkOiAnYWJzdHJhY3QgZnJvbSB0bydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAnY2xhc3MnLCAvLyBjbGFzc2VzXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoY2xhc3N8aW50ZXJmYWNlKSArJywgZW5kOiAnW1xcXFx7JF0nLCAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKGV4dGVuZHN8aW1wbGVtZW50cykgKycsXG4gICAgICAgICAgICBrZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cycsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJ1xcXFwoJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxTJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogLzxcXC8vXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1tcXHdcXC5fXSsvLFxuICAgIGtleXdvcmRzOiAnZ290byBnb3N1YiByZXR1cm4gYnJlYWsgcmVwZWF0IGxvb3AgY29udGludWUgd2FpdCBhd2FpdCBkaW0gc2RpbSBmb3JlYWNoIGRpbXR5cGUgZHVwIGR1cHB0ciBlbmQgc3RvcCBuZXdtb2QgZGVsbW9kIG1yZWYgcnVuIGV4Z290byBvbiBtY2FsbCBhc3NlcnQgbG9nbWVzIG5ld2xhYiByZXN1bWUgeWllbGQgb25leGl0IG9uZXJyb3Igb25rZXkgb25jbGljayBvbmNtZCBleGlzdCBkZWxldGUgbWtkaXIgY2hkaXIgZGlybGlzdCBibG9hZCBic2F2ZSBiY29weSBtZW1maWxlIGlmIGVsc2UgcG9rZSB3cG9rZSBscG9rZSBnZXRzdHIgY2hkcG0gbWVtZXhwYW5kIG1lbWNweSBtZW1zZXQgbm90ZXNlbCBub3RlYWRkIG5vdGVkZWwgbm90ZWxvYWQgbm90ZXNhdmUgcmFuZG9taXplIG5vdGV1bnNlbCBub3RlZ2V0IHNwbGl0IHN0cnJlcCBzZXRlYXNlIGJ1dHRvbiBjaGdkaXNwIGV4ZWMgZGlhbG9nIG1tbG9hZCBtbXBsYXkgbW1zdG9wIG1jaSBwc2V0IHBnZXQgc3lzY29sb3IgbWVzIHByaW50IHRpdGxlIHBvcyBjaXJjbGUgY2xzIGZvbnQgc3lzZm9udCBvYmpzaXplIHBpY2xvYWQgY29sb3IgcGFsY29sb3IgcGFsZXR0ZSByZWRyYXcgd2lkdGggZ3NlbCBnY29weSBnem9vbSBnbW9kZSBibXBzYXZlIGhzdmNvbG9yIGdldGtleSBsaXN0Ym94IGNoa2JveCBjb21ib3ggaW5wdXQgbWVzYm94IGJ1ZmZlciBzY3JlZW4gYmdzY3IgbW91c2Ugb2Jqc2VsIGdyb2xsIGxpbmUgY2xyb2JqIGJveGYgb2JqcHJtIG9iam1vZGUgc3RpY2sgZ3JlY3QgZ3JvdGF0ZSBnc3F1YXJlIGdyYWRmIG9iamltYWdlIG9ianNraXAgb2JqZW5hYmxlIGNlbGxvYWQgY2VsZGl2IGNlbHB1dCBuZXdjb20gcXVlcnljb20gZGVsY29tIGNudnN0b3cgY29tcmVzIGF4b2JqIHdpbm9iaiBzZW5kbXNnIGNvbWV2ZW50IGNvbWV2YXJnIHNhcnJheWNvbnYgY2FsbGZ1bmMgY252d3RvcyBjb21ldmRpc3AgbGlicHRyIHN5c3RlbSBoc3BzdGF0IGhzcHZlciBzdGF0IGNudCBlcnIgc3Ryc2l6ZSBsb29wbGV2IHN1YmxldiBpcGFyYW0gd3BhcmFtIGxwYXJhbSByZWZzdHIgcmVmZHZhbCBpbnQgcm5kIHN0cmxlbiBsZW5ndGggbGVuZ3RoMiBsZW5ndGgzIGxlbmd0aDQgdmFydHlwZSBnZXR0aW1lIHBlZWsgd3BlZWsgbHBlZWsgdmFycHRyIHZhcnVzZSBub3RlaW5mbyBpbnN0ciBhYnMgbGltaXQgZ2V0ZWFzZSBzdHIgc3RybWlkIHN0cmYgZ2V0cGF0aCBzdHJ0cmltIHNpbiBjb3MgdGFuIGF0YW4gc3FydCBkb3VibGUgYWJzZiBleHBmIGxvZ2YgbGltaXRmIHBvd2YgZ2V0ZWFzZWYgbW91c2V4IG1vdXNleSBtb3VzZXcgaHduZCBoaW5zdGFuY2UgaGRjIGdpbmZvIG9iamluZm8gZGlyaW5mbyBzeXNpbmZvIHRoaXNtb2QgX19oc3B2ZXJfXyBfX2hzcDMwX18gX19kYXRlX18gX190aW1lX18gX19saW5lX18gX19maWxlX18gX2RlYnVnIF9faHNwZGVmX18gYW5kIG9yIHhvciBub3Qgc2NyZWVuX25vcm1hbCBzY3JlZW5fcGFsZXR0ZSBzY3JlZW5faGlkZSBzY3JlZW5fZml4ZWRzaXplIHNjcmVlbl90b29sIHNjcmVlbl9mcmFtZSBnbW9kZV9nZGkgZ21vZGVfbWVtIGdtb2RlX3JnYjAgZ21vZGVfYWxwaGEgZ21vZGVfcmdiMGFscGhhIGdtb2RlX2FkZCBnbW9kZV9zdWIgZ21vZGVfcGl4ZWxhIGdpbmZvX214IGdpbmZvX215IGdpbmZvX2FjdCBnaW5mb19zZWwgZ2luZm9fd3gxIGdpbmZvX3d5MSBnaW5mb193eDIgZ2luZm9fd3kyIGdpbmZvX3Z4IGdpbmZvX3Z5IGdpbmZvX3NpemV4IGdpbmZvX3NpemV5IGdpbmZvX3dpbnggZ2luZm9fd2lueSBnaW5mb19tZXN4IGdpbmZvX21lc3kgZ2luZm9fciBnaW5mb19nIGdpbmZvX2IgZ2luZm9fcGFsdXNlIGdpbmZvX2Rpc3B4IGdpbmZvX2Rpc3B5IGdpbmZvX2N4IGdpbmZvX2N5IGdpbmZvX2ludGlkIGdpbmZvX25ld2lkIGdpbmZvX3N4IGdpbmZvX3N5IG9iamluZm9fbW9kZSBvYmppbmZvX2Jtc2NyIG9iamluZm9faHduZCBub3RlbWF4IG5vdGVzaXplIGRpcl9jdXIgZGlyX2V4ZSBkaXJfd2luIGRpcl9zeXMgZGlyX2NtZGxpbmUgZGlyX2Rlc2t0b3AgZGlyX215ZG9jIGRpcl90diBmb250X25vcm1hbCBmb250X2JvbGQgZm9udF9pdGFsaWMgZm9udF91bmRlcmxpbmUgZm9udF9zdHJpa2VvdXQgZm9udF9hbnRpYWxpYXMgb2JqbW9kZV9ub3JtYWwgb2JqbW9kZV9ndWlmb250IG9iam1vZGVfdXNlZm9udCBnc3F1YXJlX2dyYWQgbXNnb3RoaWMgbXNtaW5jaG8gZG8gdW50aWwgd2hpbGUgd2VuZCBmb3IgbmV4dCBfYnJlYWsgX2NvbnRpbnVlIHN3aXRjaCBjYXNlIGRlZmF1bHQgc3dicmVhayBzd2VuZCBkZGltIGxkaW0gYWxsb2MgbV9waSByYWQyZGVnIGRlZzJyYWQgZWFzZV9saW5lYXIgZWFzZV9xdWFkX2luIGVhc2VfcXVhZF9vdXQgZWFzZV9xdWFkX2lub3V0IGVhc2VfY3ViaWNfaW4gZWFzZV9jdWJpY19vdXQgZWFzZV9jdWJpY19pbm91dCBlYXNlX3F1YXJ0aWNfaW4gZWFzZV9xdWFydGljX291dCBlYXNlX3F1YXJ0aWNfaW5vdXQgZWFzZV9ib3VuY2VfaW4gZWFzZV9ib3VuY2Vfb3V0IGVhc2VfYm91bmNlX2lub3V0IGVhc2Vfc2hha2VfaW4gZWFzZV9zaGFrZV9vdXQgZWFzZV9zaGFrZV9pbm91dCBlYXNlX2xvb3AnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAge1xuICAgICAgICAvLyBtdWx0aS1saW5lIHN0cmluZ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ3tcIicsIGVuZDogJ1wifScsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcblxuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG5cbiAgICAgIHtcbiAgICAgICAgLy8gcHJlLXByb2Nlc3NvclxuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdhZGRpb24gY2Z1bmMgY21kIGNtcG9wdCBjb21mdW5jIGNvbnN0IGRlZmNmdW5jIGRlZmZ1bmMgZGVmaW5lIGVsc2UgZW5kaWYgZW51bSBlcGFjayBmdW5jIGdsb2JhbCBpZiBpZmRlZiBpZm5kZWYgaW5jbHVkZSBtb2RjZnVuYyBtb2RmdW5jIG1vZGluaXQgbW9kdGVybSBtb2R1bGUgcGFjayBwYWNrb3B0IHJlZ2NtZCBydW50aW1lIHVuZGVmIHVzZWNvbSB1c2VsaWInfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pLFxuICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgLy8gbGFiZWxcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCooXFxcXHcrfEApJ1xuICAgICAgfSxcblxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVF9JTlMgPSAnYWN0aW9uIGNvbGxlY3Rpb24gY29tcG9uZW50IGNvbmNhdCBkZWJ1Z2dlciBlYWNoIGVhY2gtaW4gZWxzZSBnZXQgaGFzaCBpZiBpbnB1dCBsaW5rLXRvIGxvYyBsb2cgbXV0IG91dGxldCBwYXJ0aWFsIHF1ZXJ5LXBhcmFtcyByZW5kZXIgdGV4dGFyZWEgdW5ib3VuZCB1bmxlc3Mgd2l0aCB5aWVsZCB2aWV3JztcblxuICB2YXIgQVRUUl9BU1NJR05NRU5UID0ge1xuICAgIGlsbGVnYWw6IC9cXH1cXH0vLFxuICAgIGJlZ2luOiAvW2EtekEtWjAtOV9dKz0vLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJywgYmVnaW46IC9bYS16QS1aMC05X10rL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1VCX0VYUFIgPSB7XG4gICAgaWxsZWdhbDogL1xcfVxcfS8sXG4gICAgYmVnaW46IC9cXCkvLCBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvW2EtekEtWlxcLlxcLV0rLyxcbiAgICAgICAga2V5d29yZHM6IHtidWlsdF9pbjogQlVJTFRfSU5TfSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFRBR19JTk5BUkRTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IHtrZXl3b3JkOiAnYXMnLCBidWlsdF9pbjogQlVJTFRfSU5TfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIEFUVFJfQVNTSUdOTUVOVCxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCd7eyEoLS0pPycsICcoLS0pP319JyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7WyNcXC9dLywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW2EtekEtWlxcLlxcLV0rLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7J2J1aWx0aW4tbmFtZSc6IEJVSUxUX0lOU30sXG4gICAgICAgICAgICBzdGFydHM6IFRBR19JTk5BUkRTXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7W2EtekEtWl1bYS16QS1aXFwtXSsvLCBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBrZXl3b3Jkczoge2tleXdvcmQ6ICdhcycsIGJ1aWx0X2luOiBCVUlMVF9JTlN9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWRVJTSU9OID0gJ0hUVFAvWzAtOVxcXFwuXSsnO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaHR0cHMnXSxcbiAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXicgKyBWRVJTSU9OLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICdcXFxcYlxcXFxkezN9XFxcXGInfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXltBLVpdKyAoLio/KSAnICsgVkVSU0lPTiArICckJywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJyAnLCBlbmQ6ICcgJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IFZFUlNJT05cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICdbQS1aXSsnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ15cXFxcdycsIGVuZDogJzogJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxufFxcXFxzfD0nLFxuICAgICAgICBzdGFydHM6IHtlbmQ6ICckJywgcmVsZXZhbmNlOiAwfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcblxcXFxuJyxcbiAgICAgICAgc3RhcnRzOiB7c3ViTGFuZ3VhZ2U6IFtdLCBlbmRzV2l0aFBhcmVudDogdHJ1ZX1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIga2V5d29yZHMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBrZXl3b3Jkc1xuICAgICAgJyE9ICUgJT0gJiAmPSAqICoqICoqPSAqPSAqbWFwICcgK1xuICAgICAgJysgKz0gLCAtLWJ1aWxkLWNsYXNzLS0gLS1pbXBvcnQtLSAtPSAuIC8gLy8gLy89ICcgK1xuICAgICAgJy89IDwgPDwgPDw9IDw9ID0gPiA+PSA+PiA+Pj0gJyArXG4gICAgICAnQCBAPSBeIF49IGFicyBhY2N1bXVsYXRlIGFsbCBhbmQgYW55IGFwLWNvbXBvc2UgJyArXG4gICAgICAnYXAtZG90aW1lcyBhcC1lYWNoIGFwLWVhY2gtd2hpbGUgYXAtZmlsdGVyIGFwLWZpcnN0IGFwLWlmIGFwLWxhc3QgYXAtbWFwIGFwLW1hcC13aGVuIGFwLXBpcGUgJyArXG4gICAgICAnYXAtcmVkdWNlIGFwLXJlamVjdCBhcHBseSBhcy0+IGFzY2lpIGFzc2VydCBhc3NvYyBiaW4gYnJlYWsgYnV0bGFzdCAnICtcbiAgICAgICdjYWxsYWJsZSBjYWxsaW5nLW1vZHVsZS1uYW1lIGNhciBjYXNlIGNkciBjaGFpbiBjaHIgY29sbD8gY29tYmluYXRpb25zIGNvbXBpbGUgJyArXG4gICAgICAnY29tcHJlc3MgY29uZCBjb25zIGNvbnM/IGNvbnRpbnVlIGNvdW50IGN1cnJ5IGN1dCBjeWNsZSBkZWMgJyArXG4gICAgICAnZGVmIGRlZmF1bHQtbWV0aG9kIGRlZmNsYXNzIGRlZm1hY3JvIGRlZm1hY3JvLWFsaWFzIGRlZm1hY3JvL2chIGRlZm1haW4gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gJyArXG4gICAgICAnZGVmbi1hbGlhcyBkZWZuYyBkZWZuciBkZWZyZWFkZXIgZGVmc2VxIGRlbCBkZWxhdHRyIGRlbGV0ZS1yb3V0ZSBkaWN0LWNvbXAgZGlyICcgK1xuICAgICAgJ2Rpc2Fzc2VtYmxlIGRpc3BhdGNoLXJlYWRlci1tYWNybyBkaXN0aW5jdCBkaXZtb2QgZG8gZG90byBkcm9wIGRyb3AtbGFzdCBkcm9wLXdoaWxlIGVtcHR5PyAnICtcbiAgICAgICdlbmQtc2VxdWVuY2UgZXZhbCBldmFsLWFuZC1jb21waWxlIGV2YWwtd2hlbi1jb21waWxlIGV2ZW4/IGV2ZXJ5PyBleGNlcHQgZXhlYyBmaWx0ZXIgZmlyc3QgJyArXG4gICAgICAnZmxhdHRlbiBmbG9hdD8gZm4gZm5jIGZuciBmb3IgZm9yKiBmb3JtYXQgZnJhY3Rpb24gZ2VuZXhwciAnICtcbiAgICAgICdnZW5zeW0gZ2V0IGdldGF0dHIgZ2xvYmFsIGdsb2JhbHMgZ3JvdXAtYnkgaGFzYXR0ciBoYXNoIGhleCBpZCAnICtcbiAgICAgICdpZGVudGl0eSBpZiBpZiogaWYtbm90IGlmLXB5dGhvbjIgaW1wb3J0IGluIGluYyBpbnB1dCBpbnN0YW5jZT8gJyArXG4gICAgICAnaW50ZWdlciBpbnRlZ2VyLWNoYXI/IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJwb3NlIGlzIGlzLWNvbGwgaXMtY29ucyBpcy1lbXB0eSBpcy1ldmVuICcgK1xuICAgICAgJ2lzLWV2ZXJ5IGlzLWZsb2F0IGlzLWluc3RhbmNlIGlzLWludGVnZXIgaXMtaW50ZWdlci1jaGFyIGlzLWl0ZXJhYmxlIGlzLWl0ZXJhdG9yIGlzLWtleXdvcmQgaXMtbmVnIGlzLW5vbmUgJyArXG4gICAgICAnaXMtbm90IGlzLW51bWVyaWMgaXMtb2RkIGlzLXBvcyBpcy1zdHJpbmcgaXMtc3ltYm9sIGlzLXplcm8gaXNpbnN0YW5jZSBpc2xpY2UgaXNzdWJjbGFzcyAnICtcbiAgICAgICdpdGVyIGl0ZXJhYmxlPyBpdGVyYXRlIGl0ZXJhdG9yPyBrZXl3b3JkIGtleXdvcmQ/IGxhbWJkYSBsYXN0IGxlbiBsZXQgJyArXG4gICAgICAnbGlmIGxpZi1ub3QgbGlzdCogbGlzdC1jb21wIGxvY2FscyBsb29wIG1hY3JvLWVycm9yIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFjcm9leHBhbmQtYWxsICcgK1xuICAgICAgJ21hcCBtYXggbWVyZ2Utd2l0aCBtZXRob2QtZGVjb3JhdG9yIG1pbiBtdWx0aS1kZWNvcmF0b3IgbXVsdGljb21iaW5hdGlvbnMgbmFtZSBuZWc/IG5leHQgJyArXG4gICAgICAnbm9uZT8gbm9ubG9jYWwgbm90IG5vdC1pbiBub3Q/IG50aCBudW1lcmljPyBvY3Qgb2RkPyBvcGVuICcgK1xuICAgICAgJ29yIG9yZCBwYXJ0aXRpb24gcGVybXV0YXRpb25zIHBvcz8gcG9zdC1yb3V0ZSBwb3N0d2FsayBwb3cgcHJld2FsayBwcmludCAnICtcbiAgICAgICdwcm9kdWN0IHByb2ZpbGUvY2FsbHMgcHJvZmlsZS9jcHUgcHV0LXJvdXRlIHF1YXNpcXVvdGUgcXVvdGUgcmFpc2UgcmFuZ2UgcmVhZCByZWFkLXN0ciAnICtcbiAgICAgICdyZWN1cnNpdmUtcmVwbGFjZSByZWR1Y2UgcmVtb3ZlIHJlcGVhdCByZXBlYXRlZGx5IHJlcHIgcmVxdWlyZSByZXN0IHJvdW5kIHJvdXRlICcgK1xuICAgICAgJ3JvdXRlLXdpdGgtbWV0aG9kcyByd20gc2Vjb25kIHNlcSBzZXQtY29tcCBzZXRhdHRyIHNldHYgc29tZSBzb3J0ZWQgc3RyaW5nICcgK1xuICAgICAgJ3N0cmluZz8gc3VtIHN3aXRjaCBzeW1ib2w/IHRha2UgdGFrZS1udGggdGFrZS13aGlsZSB0ZWUgdHJ5IHVubGVzcyAnICtcbiAgICAgICd1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdmFycyB3YWxrIHdoZW4gd2hpbGUgd2l0aCB3aXRoKiB3aXRoLWRlY29yYXRvciB3aXRoLWdlbnN5bXMgJyArXG4gICAgICAneGkgeG9yIHlpZWxkIHlpZWxkLWZyb20gemVybz8gemlwIHppcC1sb25nZXN0IHwgfD0gfidcbiAgIH07XG5cbiAgdmFyIFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JiNcXCcnO1xuICB2YXIgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICB2YXIgU0lNUExFX05VTUJFUl9SRSA9ICdbLStdP1xcXFxkKyhcXFxcLlxcXFxkKyk/JztcblxuICB2YXIgU0hFQkFORyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsIGVuZDogJyQnXG4gIH07XG5cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBiZWdpbjogU1lNQk9MX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiBTSU1QTEVfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JyxcbiAgICAnJCcsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICApO1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcYihbVHRdcnVlfFtGZl1hbHNlfG5pbHxOb25lKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IFNZTUJPTF9SRSxcbiAgICBzdGFydHM6IEJPRFlcbiAgfTtcbiAgdmFyIERFRkFVTFRfQ09OVEFJTlMgPSBbTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUwsIFNZTUJPTF07XG5cbiAgTElTVC5jb250YWlucyA9IFtobGpzLkNPTU1FTlQoJ2NvbW1lbnQnLCAnJyksIE5BTUUsIEJPRFldO1xuICBCT0RZLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgQ09MTEVDVElPTi5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2h5bGFuZyddLFxuICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgIGNvbnRhaW5zOiBbU0hFQkFORywgTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUxdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVEFSVF9CUkFDS0VUID0gJ1xcXFxbJztcbiAgdmFyIEVORF9CUkFDS0VUID0gJ1xcXFxdJztcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2k3J10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgLy8gU29tZSBrZXl3b3JkcyBtb3JlIG9yIGxlc3MgdW5pcXVlIHRvIEk3LCBmb3IgcmVsZXZhbmNlLlxuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8ga2luZDpcbiAgICAgICAgJ3RoaW5nIHJvb20gcGVyc29uIG1hbiB3b21hbiBhbmltYWwgY29udGFpbmVyICcgK1xuICAgICAgICAnc3VwcG9ydGVyIGJhY2tkcm9wIGRvb3IgJyArXG4gICAgICAgIC8vIGNoYXJhY3RlcmlzdGljOlxuICAgICAgICAnc2NlbmVyeSBvcGVuIGNsb3NlZCBsb2NrZWQgaW5zaWRlIGdlbmRlciAnICtcbiAgICAgICAgLy8gdmVyYjpcbiAgICAgICAgJ2lzIGFyZSBzYXkgdW5kZXJzdGFuZCAnICtcbiAgICAgICAgLy8gbWlzYyBrZXl3b3JkOlxuICAgICAgICAna2luZCBvZiBydWxlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIGJlZ2luOiBTVEFSVF9CUkFDS0VULCBlbmQ6IEVORF9CUkFDS0VUXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9eKFZvbHVtZXxCb29rfFBhcnR8Q2hhcHRlcnxTZWN0aW9ufFRhYmxlKVxcYi8sXG4gICAgICAgIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBSdWxlIGRlZmluaXRpb25cbiAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGZvciByZWxldmFuY2UuXG4gICAgICAgIGJlZ2luOiAvXihDaGVja3xDYXJyeSBvdXR8UmVwb3J0fEluc3RlYWQgb2Z8VG98UnVsZXxXaGVufEJlZm9yZXxBZnRlcilcXGIvLFxuICAgICAgICBlbmQ6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvL1J1bGUgbmFtZVxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKFRoaXMnLCBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICBiZWdpbjogU1RBUlRfQlJBQ0tFVCwgZW5kOiBFTkRfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC8oW1xcK1xcLV0rKT9bXFxkXStfW1xcZF9dKy8gfSxcbiAgICAgIHsgYmVnaW46IGhsanMuTlVNQkVSX1JFIH1cbiAgICBdXG4gIH07XG4gIHZhciBDT01NRU5UUyA9IGhsanMuQ09NTUVOVCgpO1xuICBDT01NRU5UUy52YXJpYW50cyA9IFtcbiAgICB7YmVnaW46IC87LywgZW5kOiAvJC99LFxuICAgIHtiZWdpbjogLyMvLCBlbmQ6IC8kL30sXG4gIF07XG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkW1xcd1xcZFwiXVtcXHdcXGRfXSovIH0sXG4gICAgICB7IGJlZ2luOiAvXFwkXFx7KC4qPyl9LyB9XG4gICAgXVxuICB9O1xuICB2YXIgTElURVJBTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXGJvbnxvZmZ8dHJ1ZXxmYWxzZXx5ZXN8bm9cXGIvXG4gIH07XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IFwiJycnXCIsIGVuZDogXCInJydcIiwgcmVsZXZhbmNlOiAxMCB9LFxuICAgICAgeyBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46ICdcIicsIGVuZDogJ1wiJyB9LFxuICAgICAgeyBiZWdpbjogXCInXCIsIGVuZDogXCInXCIgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEFSUkFZID0ge1xuICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICBMSVRFUkFMUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgJ3NlbGYnXG4gICAgXSxcbiAgICByZWxldmFuY2U6MFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd0b21sJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogL1xcWysvLCBlbmQ6IC9cXF0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9eW2EtejAtOVxcW1xcXV9cXC4tXSsoPz1cXHMqPVxccyopLyxcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogLyQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIEFSUkFZLFxuICAgICAgICAgICAgTElURVJBTFMsXG4gICAgICAgICAgICBWQVJJQUJMRVMsXG4gICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgTlVNQkVSU1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG5cbiAgdmFyIEZfS0VZV09SRFMgPSB7XG4gICAgbGl0ZXJhbDogJy5GYWxzZS4gLlRydWUuJyxcbiAgICBrZXl3b3JkOiAna2luZCBkbyB3aGlsZSBwcml2YXRlIGNhbGwgaW50cmluc2ljIHdoZXJlIGVsc2V3aGVyZSAnICtcbiAgICAgICd0eXBlIGVuZHR5cGUgZW5kbW9kdWxlIGVuZHNlbGVjdCBlbmRpbnRlcmZhY2UgZW5kIGVuZGRvIGVuZGlmIGlmIGZvcmFsbCBlbmRmb3JhbGwgb25seSBjb250YWlucyBkZWZhdWx0IHJldHVybiBzdG9wIHRoZW4gJyArXG4gICAgICAncHVibGljIHN1YnJvdXRpbmV8MTAgZnVuY3Rpb24gcHJvZ3JhbSAuYW5kLiAub3IuIC5ub3QuIC5sZS4gLmVxLiAuZ2UuIC5ndC4gLmx0LiAnICtcbiAgICAgICdnb3RvIHNhdmUgZWxzZSB1c2UgbW9kdWxlIHNlbGVjdCBjYXNlICcgK1xuICAgICAgJ2FjY2VzcyBibGFuayBkaXJlY3QgZXhpc3QgZmlsZSBmbXQgZm9ybSBmb3JtYXR0ZWQgaW9zdGF0IG5hbWUgbmFtZWQgbmV4dHJlYyBudW1iZXIgb3BlbmVkIHJlYyByZWNsIHNlcXVlbnRpYWwgc3RhdHVzIHVuZm9ybWF0dGVkIHVuaXQgJyArXG4gICAgICAnY29udGludWUgZm9ybWF0IHBhdXNlIGN5Y2xlIGV4aXQgJyArXG4gICAgICAnY19udWxsX2NoYXIgY19hbGVydCBjX2JhY2tzcGFjZSBjX2Zvcm1fZmVlZCBmbHVzaCB3YWl0IGRlY2ltYWwgcm91bmQgaW9tc2cgJyArXG4gICAgICAnc3luY2hyb25vdXMgbm9wYXNzIG5vbl9vdmVycmlkYWJsZSBwYXNzIHByb3RlY3RlZCB2b2xhdGlsZSBhYnN0cmFjdCBleHRlbmRzIGltcG9ydCAnICtcbiAgICAgICdub25faW50cmluc2ljIHZhbHVlIGRlZmVycmVkIGdlbmVyaWMgZmluYWwgZW51bWVyYXRvciBjbGFzcyBhc3NvY2lhdGUgYmluZCBlbnVtICcgK1xuICAgICAgJ2NfaW50IGNfc2hvcnQgY19sb25nIGNfbG9uZ19sb25nIGNfc2lnbmVkX2NoYXIgY19zaXplX3QgY19pbnQ4X3QgY19pbnQxNl90IGNfaW50MzJfdCBjX2ludDY0X3QgY19pbnRfbGVhc3Q4X3QgY19pbnRfbGVhc3QxNl90ICcgK1xuICAgICAgJ2NfaW50X2xlYXN0MzJfdCBjX2ludF9sZWFzdDY0X3QgY19pbnRfZmFzdDhfdCBjX2ludF9mYXN0MTZfdCBjX2ludF9mYXN0MzJfdCBjX2ludF9mYXN0NjRfdCBjX2ludG1heF90IENfaW50cHRyX3QgY19mbG9hdCBjX2RvdWJsZSAnICtcbiAgICAgICdjX2xvbmdfZG91YmxlIGNfZmxvYXRfY29tcGxleCBjX2RvdWJsZV9jb21wbGV4IGNfbG9uZ19kb3VibGVfY29tcGxleCBjX2Jvb2wgY19jaGFyIGNfbnVsbF9wdHIgY19udWxsX2Z1bnB0ciAnICtcbiAgICAgICdjX25ld19saW5lIGNfY2FycmlhZ2VfcmV0dXJuIGNfaG9yaXpvbnRhbF90YWIgY192ZXJ0aWNhbF90YWIgaXNvX2NfYmluZGluZyBjX2xvYyBjX2Z1bmxvYyBjX2Fzc29jaWF0ZWQgIGNfZl9wb2ludGVyICcgK1xuICAgICAgJ2NfcHRyIGNfZnVucHRyIGlzb19mb3J0cmFuX2VudiBjaGFyYWN0ZXJfc3RvcmFnZV9zaXplIGVycm9yX3VuaXQgZmlsZV9zdG9yYWdlX3NpemUgaW5wdXRfdW5pdCBpb3N0YXRfZW5kIGlvc3RhdF9lb3IgJyArXG4gICAgICAnbnVtZXJpY19zdG9yYWdlX3NpemUgb3V0cHV0X3VuaXQgY19mX3Byb2Nwb2ludGVyIGllZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgJyArXG4gICAgICAnaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgbmV3dW5pdCBjb250aWd1b3VzIHJlY3Vyc2l2ZSAnICtcbiAgICAgICdwYWQgcG9zaXRpb24gYWN0aW9uIGRlbGltIHJlYWR3cml0ZSBlb3IgYWR2YW5jZSBubWwgaW50ZXJmYWNlIHByb2NlZHVyZSBuYW1lbGlzdCBpbmNsdWRlIHNlcXVlbmNlIGVsZW1lbnRhbCBwdXJlICcgK1xuICAgICAgJ2ludGVnZXIgcmVhbCBjaGFyYWN0ZXIgY29tcGxleCBsb2dpY2FsIGRpbWVuc2lvbiBhbGxvY2F0YWJsZXwxMCBwYXJhbWV0ZXIgJyArXG4gICAgICAnZXh0ZXJuYWwgaW1wbGljaXR8MTAgbm9uZSBkb3VibGUgcHJlY2lzaW9uIGFzc2lnbiBpbnRlbnQgb3B0aW9uYWwgcG9pbnRlciAnICtcbiAgICAgICd0YXJnZXQgaW4gb3V0IGNvbW1vbiBlcXVpdmFsZW5jZSBkYXRhICcgK1xuICAgICAgLy8gSVJQRjkwIHNwZWNpYWwga2V5d29yZHNcbiAgICAgICdiZWdpbl9wcm92aWRlciAmYmVnaW5fcHJvdmlkZXIgZW5kX3Byb3ZpZGVyIGJlZ2luX3NoZWxsIGVuZF9zaGVsbCBiZWdpbl90ZW1wbGF0ZSBlbmRfdGVtcGxhdGUgc3Vic3QgYXNzZXJ0IHRvdWNoICcgK1xuICAgICAgJ3NvZnRfdG91Y2ggcHJvdmlkZSBub19kZXAgZnJlZSBpcnBfaWYgaXJwX2Vsc2UgaXJwX2VuZGlmIGlycF93cml0ZSBpcnBfcmVhZCcsXG4gICAgYnVpbHRfaW46ICdhbG9nIGFsb2cxMCBhbWF4MCBhbWF4MSBhbWluMCBhbWluMSBhbW9kIGNhYnMgY2NvcyBjZXhwIGNsb2cgY3NpbiBjc3FydCBkYWJzIGRhY29zIGRhc2luIGRhdGFuIGRhdGFuMiBkY29zIGRjb3NoIGRkaW0gZGV4cCBkaW50ICcgK1xuICAgICAgJ2Rsb2cgZGxvZzEwIGRtYXgxIGRtaW4xIGRtb2QgZG5pbnQgZHNpZ24gZHNpbiBkc2luaCBkc3FydCBkdGFuIGR0YW5oIGZsb2F0IGlhYnMgaWRpbSBpZGludCBpZG5pbnQgaWZpeCBpc2lnbiBtYXgwIG1heDEgbWluMCBtaW4xIHNuZ2wgJyArXG4gICAgICAnYWxnYW1hIGNkYWJzIGNkY29zIGNkZXhwIGNkbG9nIGNkc2luIGNkc3FydCBjcWFicyBjcWNvcyBjcWV4cCBjcWxvZyBjcXNpbiBjcXNxcnQgZGNtcGx4IGRjb25qZyBkZXJmIGRlcmZjIGRmbG9hdCBkZ2FtbWEgZGltYWcgZGxnYW1hICcgK1xuICAgICAgJ2lxaW50IHFhYnMgcWFjb3MgcWFzaW4gcWF0YW4gcWF0YW4yIHFjbXBseCBxY29uamcgcWNvcyBxY29zaCBxZGltIHFlcmYgcWVyZmMgcWV4cCBxZ2FtbWEgcWltYWcgcWxnYW1hIHFsb2cgcWxvZzEwIHFtYXgxIHFtaW4xIHFtb2QgJyArXG4gICAgICAncW5pbnQgcXNpZ24gcXNpbiBxc2luaCBxc3FydCBxdGFuIHF0YW5oIGFicyBhY29zIGFpbWFnIGFpbnQgYW5pbnQgYXNpbiBhdGFuIGF0YW4yIGNoYXIgY21wbHggY29uamcgY29zIGNvc2ggZXhwIGljaGFyIGluZGV4IGludCBsb2cgJyArXG4gICAgICAnbG9nMTAgbWF4IG1pbiBuaW50IHNpZ24gc2luIHNpbmggc3FydCB0YW4gdGFuaCBwcmludCB3cml0ZSBkaW0gbGdlIGxndCBsbGUgbGx0IG1vZCBudWxsaWZ5IGFsbG9jYXRlIGRlYWxsb2NhdGUgJyArXG4gICAgICAnYWRqdXN0bCBhZGp1c3RyIGFsbCBhbGxvY2F0ZWQgYW55IGFzc29jaWF0ZWQgYml0X3NpemUgYnRlc3QgY2VpbGluZyBjb3VudCBjc2hpZnQgZGF0ZV9hbmRfdGltZSBkaWdpdHMgZG90X3Byb2R1Y3QgJyArXG4gICAgICAnZW9zaGlmdCBlcHNpbG9uIGV4cG9uZW50IGZsb29yIGZyYWN0aW9uIGh1Z2UgaWFuZCBpYmNsciBpYml0cyBpYnNldCBpZW9yIGlvciBpc2hmdCBpc2hmdGMgbGJvdW5kIGxlbl90cmltIG1hdG11bCAnICtcbiAgICAgICdtYXhleHBvbmVudCBtYXhsb2MgbWF4dmFsIG1lcmdlIG1pbmV4cG9uZW50IG1pbmxvYyBtaW52YWwgbW9kdWxvIG12Yml0cyBuZWFyZXN0IHBhY2sgcHJlc2VudCBwcm9kdWN0ICcgK1xuICAgICAgJ3JhZGl4IHJhbmRvbV9udW1iZXIgcmFuZG9tX3NlZWQgcmFuZ2UgcmVwZWF0IHJlc2hhcGUgcnJzcGFjaW5nIHNjYWxlIHNjYW4gc2VsZWN0ZWRfaW50X2tpbmQgc2VsZWN0ZWRfcmVhbF9raW5kICcgK1xuICAgICAgJ3NldF9leHBvbmVudCBzaGFwZSBzaXplIHNwYWNpbmcgc3ByZWFkIHN1bSBzeXN0ZW1fY2xvY2sgdGlueSB0cmFuc3Bvc2UgdHJpbSB1Ym91bmQgdW5wYWNrIHZlcmlmeSBhY2hhciBpYWNoYXIgdHJhbnNmZXIgJyArXG4gICAgICAnZGJsZSBlbnRyeSBkcHJvZCBjcHVfdGltZSBjb21tYW5kX2FyZ3VtZW50X2NvdW50IGdldF9jb21tYW5kIGdldF9jb21tYW5kX2FyZ3VtZW50IGdldF9lbnZpcm9ubWVudF92YXJpYWJsZSBpc19pb3N0YXRfZW5kICcgK1xuICAgICAgJ2llZWVfYXJpdGhtZXRpYyBpZWVlX3N1cHBvcnRfdW5kZXJmbG93X2NvbnRyb2wgaWVlZV9nZXRfdW5kZXJmbG93X21vZGUgaWVlZV9zZXRfdW5kZXJmbG93X21vZGUgJyArXG4gICAgICAnaXNfaW9zdGF0X2VvciBtb3ZlX2FsbG9jIG5ld19saW5lIHNlbGVjdGVkX2NoYXJfa2luZCBzYW1lX3R5cGVfYXMgZXh0ZW5kc190eXBlX29mJyAgK1xuICAgICAgJ2Fjb3NoIGFzaW5oIGF0YW5oIGJlc3NlbF9qMCBiZXNzZWxfajEgYmVzc2VsX2puIGJlc3NlbF95MCBiZXNzZWxfeTEgYmVzc2VsX3luIGVyZiBlcmZjIGVyZmNfc2NhbGVkIGdhbW1hIGxvZ19nYW1tYSBoeXBvdCBub3JtMiAnICtcbiAgICAgICdhdG9taWNfZGVmaW5lIGF0b21pY19yZWYgZXhlY3V0ZV9jb21tYW5kX2xpbmUgbGVhZHogdHJhaWx6IHN0b3JhZ2Vfc2l6ZSBtZXJnZV9iaXRzICcgK1xuICAgICAgJ2JnZSBiZ3QgYmxlIGJsdCBkc2hpZnRsIGRzaGlmdHIgZmluZGxvYyBpYWxsIGlhbnkgaXBhcml0eSBpbWFnZV9pbmRleCBsY29ib3VuZCB1Y29ib3VuZCBtYXNrbCBtYXNrciAnICtcbiAgICAgICdudW1faW1hZ2VzIHBhcml0eSBwb3BjbnQgcG9wcGFyIHNoaWZ0YSBzaGlmdGwgc2hpZnRyIHRoaXNfaW1hZ2UgJyArXG4gICAgICAvLyBJUlBGOTAgc3BlY2lhbCBidWlsdF9pbnNcbiAgICAgICdJUlBfQUxJR04gaXJwX2hlcmUnXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogRl9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3Vicm91dGluZSBmdW5jdGlvbiBwcm9ncmFtJyxcbiAgICAgICAgaWxsZWdhbDogJ1skez1cXFxcbl0nLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCBQQVJBTVNdXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJyQnLCB7cmVsZXZhbmNlOiAwfSksXG4gICAgICBobGpzLkNPTU1FTlQoJ2JlZ2luX2RvYycsICdlbmRfZG9jJywge3JlbGV2YW5jZTogMTB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoPz1cXFxcYnxcXFxcK3xcXFxcLXxcXFxcLikoPz1cXFxcLlxcXFxkfFxcXFxkKSg/OlxcXFxkKyk/KD86XFxcXC4/XFxcXGQqKSg/OltkZV1bKy1dP1xcXFxkKyk/XFxcXGJcXFxcLj8nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyDQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QslxuICB2YXIgVU5ERVJTQ09SRV9JREVOVF9SRSA9IFwiW0EtWmEtetCQLdCv0LAt0Y/RkdCBXyFdW0EtWmEtetCQLdCv0LAt0Y/RkdCBXzAtOV0qXCI7XG5cbiAgLy8g0J7Qv9GA0LXQtNC10LvQtdC90LjQtSDQuNC80LXQvSDRhNGD0L3QutGG0LjQuVxuICB2YXIgRlVOQ1RJT05fTkFNRV9JREVOVF9SRSA9IFwiW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSpcIjtcblxuICAvLyBrZXl3b3JkIDog0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwXG4gIHZhciBLRVlXT1JEID1cbiAgICBcImFuZCDQuCBlbHNlINC40L3QsNGH0LUgZW5kZXhjZXB0IGVuZGZpbmFsbHkgZW5kZm9yZWFjaCDQutC+0L3QtdGG0LLRgdC1IGVuZGlmINC60L7QvdC10YbQtdGB0LvQuCBlbmR3aGlsZSDQutC+0L3QtdGG0L/QvtC60LAgXCIgK1xuICAgIFwiZXhjZXB0IGV4aXRmb3IgZmluYWxseSBmb3JlYWNoINCy0YHQtSBpZiDQtdGB0LvQuCBpbiDQsiBub3Qg0L3QtSBvciDQuNC70LggdHJ5IHdoaWxlINC/0L7QutCwIFwiO1xuXG4gIC8vIFNZU1JFUyBDb25zdGFudHNcbiAgdmFyIHN5c3Jlc19jb25zdGFudHMgPVxuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTX1JJR0hUX1RZUEVfRURJVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNfUklHSFRfVFlQRV9GVUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU19SSUdIVF9UWVBFX1ZJRVcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19NT0RFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfTk9fQUNDRVNTX1ZJRVcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19OT19BQ0NFU1NfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0FERF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19BRERfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0NIQU5HRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19DSEFOR0VfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0RFTEVURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19ERUxFVEVfUkVRVUlTSVRFX1lFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX0VYRUNVVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfRVhFQ1VURV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfTk9fQUNDRVNTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX05PX0FDQ0VTU19SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfUkFUSUZZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfUklHSFRTX1JBVElGWV9SRVFVSVNJVEVfWUVTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDQ0VTU19SSUdIVFNfVklFV19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1JJR0hUU19WSUVXX1JFUVVJU0lURV9ZRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfQ0hBTkdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9DSEFOR0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRVhJU1RTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9FWElTVFNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRlVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNDRVNTX1RZUEVfRlVMTF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9WSUVXIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ0NFU1NfVFlQRV9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FCT1JUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9BQ0NFUFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0FERF9BVFRBQ0hNRU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DSEFOR0VfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ0hBTkdFX0tJTkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0NIQU5HRV9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DT05USU5VRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ09QWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfQ1JFQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9DUkVBVEVfVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfREVMRVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9ERUxFVEVfQVRUQUNITUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfREVMRVRFX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0RJU0FCTEVfREVMRUdBVEVfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfRU5BQkxFX0RFTEVHQVRFX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQ1JZUFRJT05fQllfQ0VSVElGSUNBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0VOQ1JZUFRJT05fQllfQ0VSVElGSUNBVEVfQU5EX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FTkNSWVBUSU9OX0JZX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FWFBPUlRfV0lUSF9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9FWFBPUlRfV0lUSE9VVF9MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9JTVBPUlRfV0lUSF9VTkxPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX0lNUE9SVF9XSVRIT1VUX1VOTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTElGRV9DWUNMRV9TVEFHRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTE9DS19GT1JfU0VSVkVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9MT0NLX01PRElGWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTUFSS19BU19SRUFERUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01BUktfQVNfVU5SRUFERUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01PRElGWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfTU9ESUZZX0NBUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX01PVkVfVE9fQVJDSElWRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfT0ZGX0VOQ1JZUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1BBU1NXT1JEX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUEVSRk9STSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfUkVDT1ZFUl9GUk9NX0xPQ0FMX0NPUFkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFU1RBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1JFU1RPUkVfRlJPTV9BUkNISVZFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9SRVZJU0lPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfU0VORF9CWV9NQUlMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9TSUdOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9TVEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVU5MT0NLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9VTkxPQ0tfRlJPTV9TRVJWRVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZFUlNJT05fU1RBVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FDVElPTl9UWVBFX1ZFUlNJT05fVklTSUJJTElUWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVklFVyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfVklFV19TSEFET1dfQ09QWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUNUSU9OX1RZUEVfV09SS0ZMT1dfREVTQ1JJUFRJT05fTU9ESUZZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJT05fVFlQRV9XUklURV9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BQ1RJVkVfVkVSU0lPTl9TVEFURV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRERfUkVGRVJFTkNFX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURESVRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FERElUSU9OQUxfUEFSQU1TX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX0VORF9EQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRElUSU9OQUxfSk9CX1JFQURfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FESVRJT05BTF9KT0JfU1RBUlRfREFURV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURJVElPTkFMX0pPQl9TVEFURV9SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9BRERJTkdfVVNFUl9UT19HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQURESU5HX1VTRVJfVE9fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fQ09NUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fQ09NUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9DUkVBVElPTl9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fVVNFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfQ1JFQVRJT05fVVNFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9EQVRBQkFTRV9VU0VSX0NSRUFUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfQ1JFQVRJT05fQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RBVEFCQVNFX1VTRVJfREVMRVRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREFUQUJBU0VfVVNFUl9ERUxFVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fQ09NUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fQ09NUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fR1JPVVBfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfREVMRVRJT05fVVNFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9ERUxFVElPTl9VU0VSX0ZST01fR1JPVVBfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0RFTEVUSU9OX1VTRVJfRlJPTV9HUk9VUF9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9HUkFOVElOR19GSUxURVJFUl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX0ZJTFRFUkVSX1JFU1RSSUNUSU9OX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1BSSVZJTEVHRV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUFJJVklMRUdFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0dSQU5USU5HX1JJR0hUU19BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfR1JBTlRJTkdfUklHSFRTX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX01BSU5fU0VSVkVSX0NIQU5HRURfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX01BSU5fU0VSVkVSX0NIQU5HRURfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfSVNfUFVCTElDX0NIQU5HRURfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX0lTX1BVQkxJQ19DSEFOR0VEX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1JFTU9WSU5HX0ZJTFRFUkVSX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19GSUxURVJFUl9SRVNUUklDVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfRklMVEVSRVJfUkVTVFJJQ1RJT05fQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUFJJVklMRUdFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19QUklWSUxFR0VfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfUkVNT1ZJTkdfUklHSFRTX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9SRU1PVklOR19SSUdIVFNfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0NSRUFUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9DUkVBVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfU0VSVkVSX0xPR0lOX0RFTEVUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1NFUlZFUl9MT0dJTl9ERUxFVElPTl9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfQ0FURUdPUllfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NBVEVHT1JZX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NPTVBfVElUTEVfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0NPTVBfVElUTEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfRlVMTF9OQU1FX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19GVUxMX05BTUVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfR1JPVVBfQUNUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX0dST1VQX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1BBUkVOVF9HUk9VUF9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FETUlOSVNUUkFUSU9OX0hJU1RPUllfVVBEQVRJTkdfUEFSRU5UX0dST1VQX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfQVVUSF9UWVBFX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0FVVEhfVFlQRV9BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0xPR0lOX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX0xPR0lOX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BRE1JTklTVFJBVElPTl9ISVNUT1JZX1VQREFUSU5HX1VTRVJfU1RBVFVTX0FDVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VUERBVElOR19VU0VSX1NUQVRVU19BQ1RJT05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VU0VSX1BBU1NXT1JEX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQURNSU5JU1RSQVRJT05fSElTVE9SWV9VU0VSX1BBU1NXT1JEX0NIQU5HRV9BQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTF9BQ0NFUFRfQ09ORElUSU9OX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMX1VTRVJTX0dST1VQIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExfVVNFUlNfR1JPVVBfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQUxMX1VTRVJTX1NFUlZFUl9HUk9VUF9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BTExPV0VEX0FDQ0VTU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FMTE9XRURfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVBQX1ZJRVdFUl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BUFBST1ZJTkdfU0lHTkFUVVJFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FQUFJPVklOR19TSUdOQVRVUkVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FTU0lTVEFOVF9TVUJTVElUVUVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVNTSVNUQU5UX1NVQlNUSVRVRV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0NPTVBPTkVOVF9UT0tFTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9FRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9GT0xERVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FUVEFDSF9UWVBFX0pPQiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVRUQUNIX1RZUEVfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVFRBQ0hfVFlQRV9UQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX0VOQ09ERURfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhfRU5DT0RFRF9QQVNTV09SRF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX05PVkVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSF9QQVNTV09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUSF9QQVNTV09SRF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIX1dJTkRPV1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVEhFTlRJQ0FUSU5HX1NJR05BVFVSRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRIRU5USUNBVElOR19TSUdOQVRVUkVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9fRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT19OVU1FUkFUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9fU1RST05HX0VOVU1fTUVUSE9EX0ZMQUcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1RFWFRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX0FMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfQUxMX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1NJR04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0FVVE9URVhUX1VTQUdFX1NJR05fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfV09SSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNBR0VfV09SS19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9BVVRPVEVYVF9VU0VfQU5ZV0hFUkVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNFX09OX1NJR05JTkdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQVVUT1RFWFRfVVNFX09OX1dPUktfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQkVHSU5fREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQkxBQ0tfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9CTFVFX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQlROX1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTENVTEFURURfUk9MRV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTExfVFlQRV9WQVJJQUJMRV9CVVRUT05fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBTExfVFlQRV9WQVJJQUJMRV9QUk9HUkFNX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DQU5DRUxfTUVTU0FHRV9GVU5DVElPTl9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NBUkRfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0FSRF9SRUZFUkVOQ0VfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9FTkNSWVBUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9TSUdOX0FORF9FTkNSWVBUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DRVJUSUZJQ0FURV9UWVBFX1JFUVVJU0lURV9TSUdOX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9EQVRFX1BBUkFNX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX0ZMT0FUX1BBUkFNX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NIRUNLX1BBUkFNX1ZBTFVFX0lOVEVHRVJfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0hFQ0tfUEFSQU1fVkFMVUVfUElDS19QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DSEVDS19QQVJBTV9WQUxVRV9SRUVGUkVOQ0VfUEFSQU1fVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ0xPU0VEX1JFQ09SRF9GTEFHX1ZBTFVFX0ZFTUlOSU5FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DTE9TRURfUkVDT1JEX0ZMQUdfVkFMVUVfTUFTQ1VMSU5FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0FETUlOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0RFVkVMT1BFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9ET0NTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfRVhURVJOQUxfRVhFQ1VUQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9PVEhFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfQ09NUE9ORU5UX1RZUEVfUkVQT1JUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX0NPTVBPTkVOVF9UWVBFX1NDUklQVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9DT01QT05FTlRfVFlQRV9VUkwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX0FDQ0VTUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT0RFX1JFUVVJU0lURV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09ERV9SRVFVSVNJVEVfRVhDTFVERV9DT01QT05FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPREVfUkVRVUlTSVRFX1JFQ09SRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NTUVOVF9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NTU9OX1NFVFRJTkdTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QX0NPREVfR1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfR1JPVVBfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfQURNSU5fQ09NUE9ORU5UUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfREVWRUxPUEVSX0NPTVBPTkVOVFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0RPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVF9UWVBFX0VET0NTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9FWFRFUk5BTF9FWEVDVVRBQkxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9PVEhFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09NUE9ORU5UX1RZUEVfUkVGRVJFTkNFX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9SRUZFUkVOQ0VTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9SRVBPUlRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9TQ1JJUFRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT01QT05FTlRfVFlQRV9VUkwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTVBPTkVOVFNfUkVNT1RFX1NFUlZFUlNfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05ESVRJT05fQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX0ZJUk1fU1RBVFVTX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfRklSTV9TVEFUVVNfSU5ESVZJRFVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OU1RfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0NPTlNUX1BPU0lUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9TRVJWRVJfU1RBVFVTX0RPTlRfUkVQTElDQVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9DT05TVF9TRVJWRVJfU1RBVFVTX1JFUExJQ0FURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfQ09OVEVOVFNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9CT09MRUFOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfREFURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX0ZMT0FUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfSU5URUdFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFUQV9UWVBFX1BJQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9TVFJJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEFfVFlQRV9URVhUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRBX1RZUEVfVkFSSUFOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9DTE9TRV9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9GT1JNQVRfREFURV9PTkxZX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfT1BFTl9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREFURV9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RBVEVfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9EQVRFVElNRV9GT1JNQVRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFQV9BQ0NFU1NfUklHSFRTX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVNDUklQVElPTl9MT0NBTElaRV9JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVTQ1JJUFRJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDFfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUMl9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQzX1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVDRfUEFSVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUNV9QQVJUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ERVQ2X1BBUlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVEFJTF9EQVRBU0VUX0tFWV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfREVUQUlMX1BJQ0tfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RFVEFJTF9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9fTk9UX1VTRV9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET19OT1RfVVNFX0FDQ0VTU19UWVBFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0RPX05PVF9VU0VfT05fVklFV19BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ET19OT1RfVVNFX09OX1ZJRVdfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9DVU1FTlRfU1RPUkFHRVNfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9DVU1FTlRfVEVNUExBVEVTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRE9VQkxFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfQ0xPU0VfRklMRV9PQlNFUlZfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfQ0xPU0VfUFJPQ0VTU19PQlNFUlZfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19BUFBMSUNBVElPTl9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX0NSRUFURV9TRVZFUkFMX1BST0NFU1NFU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19FWFRFTlNJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VESVRPUlNfT0JTRVJWRVJfQllfUFJPQ0VTU19UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRElUT1JTX1JFUExBQ0VfU1BFQ19DSEFSU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19VU0VfUExVR0lOU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURJVE9SU19WSUVXX0RPQ1VNRU5UX09QRU5FRF9UT19FRElUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfQ0FSRF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0NBUkRfVFlQRVNfTElOS19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19DRVJUSUZJQ0FURV9BTkRfUEFTU1dPUkRfRU5DT0RFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfQ0VSVElGSUNBVEVfRU5DT0RFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19LSU5EX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX0tJTkRTX0JZX1RFTVBMQVRFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX01BTkFHRV9BQ0NFU1NfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19OT05FX0VOQ09ERV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX05VTUJFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19QQVNTV09SRF9FTkNPREVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19SRUFET05MWV9BQ0NFU1NfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TSEVMTF9MSUZFX1RZUEVfVklFV19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TSVpFX1JFU1RSSUNUSU9OX1BSSU9SSVRZX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfQ0hFQ0tfQUNDRVNTX1JJR0hUU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX0NPTVBVVEVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfU1RPUkFHRV9EQVRBQkFTRV9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfRURJVF9JTl9TVE9SQUdFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1NUT1JBR0VfTE9DQUxfUEFUSF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19TVE9SQUdFX1NIQVJFRF9TT1VSQ0VfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19URU1QTEFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19UWVBFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRURPQ19WRVJTSU9OX0FDVElWRV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1ZFUlNJT05fREVTSUdOX1NUQUdFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NfVkVSU0lPTl9PQlNPTEVURV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FRE9DX1dSSVRFX0FDQ0VTX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VET0NVTUVOVF9DQVJEX1JFUVVJU0lURVNfUkVGRVJFTkNFX0NPREVfU0VMRUNURURfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FTkNPREVfQ0VSVElGSUNBVEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FTkRfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRU5VTUVSQVRJT05fVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhFQ1VURV9BQ0NFU1NfUklHSFRTX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhFQ1VUSVZFX0ZJTEVfU1RPUkFHRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWElTVF9DT05TVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhJU1RfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9MT0NLX1RZUEVfQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWFBPUlRfTE9DS19UWVBFX1dJVEhfTE9DSyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRVhQT1JUX0xPQ0tfVFlQRV9XSVRIT1VUX0xPQ0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9WRVJTSU9OX1RZUEVfQVNLIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9FWFBPUlRfVkVSU0lPTl9UWVBFX0xBU1QgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYUE9SVF9WRVJTSU9OX1RZUEVfTEFTVF9BQ1RJVkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0VYVEVOU0lPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1RZUEVfQ09NTU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX0NPTU1PTl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GSUxURVJfVFlQRV9VU0VSX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZJTFRFUl9UWVBFX1VTRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRklMVEVSX1ZBTFVFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GTE9BVF9OVU1CRVJfRk9STUFUX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZMT0FUX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfQVVUSE9SX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfS0lORF9BTllfT0JKRUNUUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfQ09NUE9ORU5UUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX0tJTkRfRURPQ1MgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX0pPQlMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9LSU5EX1RBU0tTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9DT01NT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX0NPTVBPTkVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfRkFWT1JJVEVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9JTkJPWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfT1VUQk9YIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9RVUlDS19MQVVOQ0ggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZPTERFUl9UWVBFX1NFQVJDSCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRk9MREVSX1RZUEVfU0hPUlRDVVRTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GT0xERVJfVFlQRV9VU0VSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9GUk9NX0RJQ1RJT05BUllfRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVMTF9TVUJTVElUVVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTExfU1VCU1RJVFVURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0NBTkNFTF9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX0NBVEVHT1JZX1NZU1RFTSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fQ0FURUdPUllfVVNFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfRlVOQ1RJT05fRkFJTFVSRV9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0ZVTkNUSU9OX1NBVkVfUkVTVUxUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HRU5FUkFURURfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUkVFTl9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0FDQ09VTlRfVFlQRV9WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DQVRFR09SWV9OT1JNQUxfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfTk9STUFMX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0NBVEVHT1JZX1NFUlZJQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfQ0FURUdPUllfU0VSVklDRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9HUk9VUF9DT01NT05fQ0FURUdPUllfRklFTERfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX0ZVTExfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfUklHSFRTX1RfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1NFUlZFUl9DT0RFU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBfU0VSVkVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1NFUlZJQ0VfQ0FURUdPUllfRklFTERfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQX1VTRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0dST1VQU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfR1JPVVBTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISURERU5fTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISUdIX0xWTF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSElTVE9SWV9BQ1RJT05fQ1JFQVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hJU1RPUllfQUNUSU9OX0RFTEVURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ISVNUT1JZX0FDVElPTl9FRElUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0hPVVJfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lEU1BTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTUFHRV9NT0RFX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTUFHRV9NT0RFX0dSRVlTQ0FMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU1BR0VfTU9ERV9NT05PQ0hST01FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTVBPUlRBTkNFX0hJR0ggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lNUE9SVEFOQ0VfTE9XIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTVBPUlRBTkNFX05PUk1BTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5fREVTSUdOX1ZFUlNJT05fU1RBVEVfUElDS19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5DT01JTkdfV09SS19SVUxFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5UX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5UX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JTlRFR0VSX05VTUJFUl9GT1JNQVRfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSU5URUdFUl9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX0dFTkVSQVRFRF9SRVFVSVNJVEVfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1BVQkxJQ19ST0xFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JU19SRU1PVEVfVVNFUl9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSVNfUkVNT1RFX1VTRVJfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1NUT1JFRF9SRVFVSVNJVEVfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0lTX1NUT1JFRF9SRVFVSVNJVEVfU1RPUkVEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9JVEFMSUNfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9LSU5EX0NPTlRST0xfSk9CIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9KT0JfS0lORF9KT0IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9LSU5EX05PVElDRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX1NUQVRFX0FCT1JURUQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0pPQl9TVEFURV9DT01QTEVURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfSk9CX1NUQVRFX1dPUktJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX0NSRUFURV9TSEFET1dfQ09QSUVTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19ERUZBVUxUX0VET0NfTElGRV9TVEFHRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19BTExfVEVQTEFURVNfQUxMT1dFRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19BTExPV19MSUZFX0NZQ0xFX1NUQUdFX0NIQU5HSU5HX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX0FMTE9XX01VTFRJUExFX0FDVElWRV9WRVJTSU9OU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfS0lORFNfRURPQ19TSEFSRV9BQ0NFU19SSUdIVFNfQllfREVGQVVMVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX1RFTVBMQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LSU5EU19FRE9DX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0tJTkRTX1NJR05FUlNfUkVRVUlTSVRFU19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9LT0RfSU5QVVRfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTEFTVF9VUERBVEVfREFURV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElGRV9DWUNMRV9TVEFSVF9TVEFHRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElMQUNfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0NPTVBPTkVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9ET0NVTUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9FRE9DIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX0ZPTERFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTElOS19PQkpFQ1RfS0lORF9KT0IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfT0JKRUNUX0tJTkRfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9MSU5LX09CSkVDVF9LSU5EX1RBU0sgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJTktfUkVGX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX0xJU1RfUkVGRVJFTkNFX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTE9DQUxJWkFUSU9OX0RJQ1RJT05BUllfTUFJTl9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01BSU5fVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NQU5VQUxfRU5VTV9NRVRIT0RfRkxBRyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFTVEVSX0NPTVBfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFTVEVSX1RBQkxFX1JFQ19JRF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUFYSU1JWkVEX01PREVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfQVRURU5USU9OX0NBUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfQ09ORklSTUFUSU9OX0NBUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX01FU1NBR0VfRVJST1JfQ0FQVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTUVTU0FHRV9JTkZPUk1BVElPTl9DQVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NSU5JTUlaRURfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NSU5VVEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTU9EVUxFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NT05JVE9SSU5HX0JMT0NLX0RFU0NSSVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9NT05USF9GT1JNQVRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfTE9DQUxJWkVfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVfU0lOR1VMQVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05BTUVBTl9JTlBVVF9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ORUdBVElWRV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ORUdBVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk8gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PX1BJQ0tfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PX1NJR05BVFVSRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PTkVfQUNDRVNTX1JJR0hUU19UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05PTk9QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX01BU0NVTElORSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTk9STUFMX0FDQ0VTU19SSUdIVFNfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1JNQUxfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1JNQUxfTU9ERV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RfQUxMT1dFRF9BQ0NFU1NfVFlQRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OT1RJQ0VfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTV9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTV9TVFJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTUVSQVRJT05fQVVUT19OT1RfU1RST05HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX0FVVE9fU1RST05HIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX0ZST01fRElDVE9OQVJZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9OVU1FUkFUSU9OX01BTlVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfTlVNRVJJQ19UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX05VTVJFUV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT0JTT0xFVEVfVkVSU0lPTl9TVEFURV9QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfVkFMVUVfRkVNSU5JTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QRVJBVElOR19SRUNPUkRfRkxBR19WQUxVRV9NQVNDVUxJTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09QVElPTkFMX0ZPUk1fQ09NUF9SRVFDT0RFX1BSRUZJWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1JBTkdFX0xJRkVfQ1lDTEVfU1RBR0VfRk9OVF9DT0xPUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfT1JJR0lOQUxSRUZfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fUkVGX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX09VUkZJUk1fVkFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9PVVRHT0lOR19XT1JLX1JVTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX05FR0FUSVZFX1JFU1VMVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUElDS19QT1NJVElWRV9SRVNVTFQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BJQ0tfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QSUNLX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUExBTl9TVEFUVVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1BMQVRGT1JNX1ZFUlNJT05fQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUExVR0lOU19TRVRUSU5HU19ERVNDUklQVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUE9TSVRJVkVfUElDS19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUE9XRVJfVE9fQ1JFQVRFX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QT1dFUl9UT19TSUdOX0FDVElPTl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9QUklPUklUWV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUVVBTElGSUVEX1RBU0tfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUVVBTElGSUVEX1RBU0tfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUNTVEFUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRURfTElGRV9DWUNMRV9TVEFHRV9GT05UX0NPTE9SIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfSURfVF9SRUZfVFlQRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGX1JFUVVJU0lURSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVGX1JFUVVJU0lURV9UWVBFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZfUkVRVUlTSVRFU19SRUZFUkVOQ0VfQ09ERV9TRUxFQ1RFRF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9DUkVBVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9ERUxFVEVfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9SRUNPUkRfSElTVE9SWV9NT0RJRllfQUNUSU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9UWVBFX0NIQVIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRV9UWVBFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRUZFUkVOQ0VTX0FERF9QQVJBTVNfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFRkVSRU5DRVNfRElTUExBWV9SRVFVSVNJVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9TRVJWRVJfU1RBVFVTX1dPUktJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFTU9URV9TRVJWRVJfVFlQRV9NQUlOIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRU1PVEVfU0VSVkVSX1RZUEVfU0VDT05EQVJZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRU1PVEVfVVNFUl9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9BUFBfRURJVE9SX0lOVEVSTkFMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfQkFTRV9SRVBPUlRfSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUE9SVF9CQVNFX1JFUE9SVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX1NDUklQVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVQT1JUX1RFTVBMQVRFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVBPUlRfVklFV0VSX0NPREVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9BTExPV19DT01QT05FTlRfREVGQVVMVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX0FMTE9XX1JFQ09SRF9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfQUxMT1dfU0VSVkVSX0NPTVBPTkVOVF9ERUZBVUxUX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9BVkFJTEFCTEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX01PREVfRURJVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9ISURERU5fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRX01PREVfTk9UX0FWQUlMQUJMRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfTU9ERV9WSUVXX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9OVU1CRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUV9TRUNUSU9OX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFfVFlQRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9CWV9VTklUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfRk9STUFUX0RBVEVfRlVMTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9EQVRFX1RJTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9GT1JNQVRfTEVGVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9SSUdIVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX0ZPUk1BVF9XSVRIT1VUX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9OVU1CRVJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0FDVElPTlMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX0JVVFRPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQlVUVE9OUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fQ0FSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTAgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTEgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTIgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTYgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTggXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMTkgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFMiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyMyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUyNCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEUzIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFNSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU2IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVfU0VDVElPTl9UQUJMRTcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JFUVVJU0lURV9TRUNUSU9OX1RBQkxFOCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUkVRVUlTSVRFX1NFQ1RJT05fVEFCTEU5IFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SRVFVSVNJVEVTX1BTRVVET1JFRkVSRU5DRV9SRVFVSVNJVEVfTlVNQkVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9SSUdIVF9BTElHTk1FTlRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9MRVNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1NURVBfQUZURVJfUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9TVEVQX0FORF9DT05ESVRJT05fUlVTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ST1VURV9TVEVQX09SX0NPTkRJVElPTl9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1JPVVRFX1RZUEVfQ09NUExFWCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfVFlQRV9QQVJBTExFTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfUk9VVEVfVFlQRV9TRVJJQUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCREFUQVNFVERFU0NfTkVHQVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCREFUQVNFVERFU0NfUE9TSVRJVkVfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NCVklFV1NERVNDX1BPU0lUSVZFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TQ1JJUFRfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSF9CWV9URVhUX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19DT01QT05FTlRfQ09OVEVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfQ1JJVEVSSUFfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0VET0NfQ09OVEVOVCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfRk9MREVSX0NPTlRFTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQVJDSEVTX0pPQl9DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUFSQ0hFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VBUkNIRVNfVEFTS19DT05URU5UIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNPTkRfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQUNUSU9OU19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQ0FSRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzFfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF8yX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfM19WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VDVElPTl9SRVFVSVNJVEVfREVUQUlMXzRfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFQ1RJT05fUkVRVUlTSVRFX0RFVEFJTF81X1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUNUSU9OX1JFUVVJU0lURV9ERVRBSUxfNl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1JFRkVSRU5DRV9NT0RFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1NFTEVDVEFCTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NFTEVDVF9UWVBFX1NFTEVDVEFCTEVfT05MWV9DSElMRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VMRUNUX1RZUEVfU0VMRUNUQUJMRV9XSVRIX0NISUxEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRUxFQ1RfVFlQRV9VTlNMRUNUQUJMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VSVkVSX1RZUEVfTUFJTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU0VSVklDRV9VU0VSX0NBVEVHT1JZX0ZJRUxEX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TRVRUSU5HU19VU0VSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TSUdOQVRVUkVfQU5EX0VOQ09ERV9DRVJUSUZJQ0FURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NJR05BVFVSRV9DRVJUSUZJQ0FURV9UWVBFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NJTkdVTEFSX1RJVExFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TUUxfU0VSVkVSX0FVVEhFTlRJRklDQVRJT05fRkxBR19WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TUUxfU0VSVkVSX0VOQ09ERV9BVVRIRU5USUZJQ0FUSU9OX0ZMQUdfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBTkRBUlRfUk9VVEVfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQU5EQVJUX1JPVVRFX1JFRkVSRU5DRV9DT01NRU5UX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFOREFSVF9ST1VURVNfR1JPVVBTX1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFURV9SRVFfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0FDVElWRV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0NMT1NFRF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRJQ19ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1BMQU5fREVGQVVMVF9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0FVVE9DTEVBTklORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX0JMVUVfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfQ09NUExFVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9HUkVFTl9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9PUkFOR0VfU1FVQVJFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfUFVSUExFX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RBVFVTX1ZBTFVFX1JFRF9TUVVBUkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUQVRVU19WQUxVRV9TVVNQRU5EIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVEFUVVNfVkFMVUVfWUVMTE9XX1NRVUFSRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1REUk9VVEVfU0hPV19UT19VU0VSU19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RPUkFHRV9UWVBFX0ZJTEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUT1JBR0VfVFlQRV9TUUxfU0VSVkVSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJfUkVRVUlTSVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJS0VPVVRfTElGRV9DWUNMRV9TVEFHRV9EUkFXX1NUWUxFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfRk9STUFUX0xFRlRfQUxJR05fQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RSSU5HX0ZPUk1BVF9SSUdIVF9BTElHTl9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9TVFJJTkdfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NUUklOR19SRVFVSVNJVEVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1RSSU5HX1RZUEVfQ0hBUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1VCU1RJVFVURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NVQlRBU0tfQkxPQ0tfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NZU1RFTV9TRVRUSU5HX0NVUlJFTlRfVVNFUl9QQVJBTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfU1lTVEVNX1NFVFRJTkdfRU1QVFlfVkFMVUVfUEFSQU1fVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1NZU1RFTV9WRVJTSU9OX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfQUNDRVNTX1RZUEVfQUxMIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0FDQ0VTU19UWVBFX0FMTF9NRU1CRVJTIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0FDQ0VTU19UWVBFX01BTlVBTCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19FTkNPREVfVFlQRV9DRVJUSUZJQ0FUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX0NFUlRJRklDQVRJT05fQU5EX1BBU1NXT1JEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX0VOQ09ERV9UWVBFX05PTkUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfRU5DT0RFX1RZUEVfUEFTU1dPUkQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfUk9VVEVfQUxMX0NPTkRJVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19ST1VURV9BTkRfQ09ORElUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1JPVVRFX09SX0NPTkRJVElPTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9BQk9SVEVEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0NPTVBMRVRFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0NPTlRJTlVFRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19TVEFURV9DT05UUk9MIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UQVNLX1NUQVRFX0lOSVQgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfU1RBVEVfV09SS0lORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19USVRMRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEFTS19UWVBFU19HUk9VUFNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RBU0tfVFlQRVNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFTVBMQVRFU19SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9EQVRFX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0RFVl9EQVRBQkFTRV9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0RFVl9TWVNURU1fQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX0RBVEFCQVNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19NQUlOX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19NQUlOX0RCX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfRURNU19TRUNPTkRfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9URVNUX0VETVNfU1lTVEVNX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFU1RfTlVNRVJJQ19SRVFVSVNJVEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVEVYVF9SRVFVSVNJVEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfUkVRVUlTSVRFX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RFWFRfVFlQRV9DSEFSIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9UWVBFX0NPREVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOREVGSU5FRF9MSUZFX0NZQ0xFX1NUQUdFX0ZPTlRfQ09MT1IgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOSVRTX1NFQ1RJT05fSURfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOSVRTX1NFQ1RJT05fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOT1BFUkFUSU5HX1JFQ09SRF9GTEFHX1ZBTFVFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOU1RPUkVEX0RBVEFfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VOU1RPUkVEX0RBVEFfUkVRVUlTSVRFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRV9BQ0NFU1NfVFlQRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VfQUNDRVNTX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9BQ0NPVU5UX1RZUEVfVkFMVUVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9BRERJVElPTkFMX0lORk9STUFUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0FORF9HUk9VUF9JRF9GUk9NX1BTRVVET1JFRkVSRU5DRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9DQVRFR09SWV9OT1JNQUwgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfU1RBVEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ0VSVElGSUNBVEVfU1VCSkVDVF9OQU1FX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0NFUlRJRklDQVRFX1RIVU1CUFJJTlRfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfQ09NTU9OX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0NPTU1PTl9DQVRFR09SWV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0ZVTExfTkFNRV9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9HUk9VUF9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX0xPR0lOX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1JFTU9URV9DT05UUk9MTEVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1JFTU9URV9TWVNURU1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfUklHSFRTX1RfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU0VSVkVSX05BTUVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU0VSVklDRV9DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TRVJWSUNFX0NBVEVHT1JZX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0FETUlOSVNUUkFUT1JfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfQURNSU5JU1RSQVRPUl9OQU1FIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19ERVZFTE9QRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfREVWRUxPUEVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RJU0FCTEVEX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX0RJU0FCTEVEX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1NZU1RFTV9ERVZFTE9QRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9TVEFUVVNfVVNFUl9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1NUQVRVU19VU0VSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJfU1RBVFVTX1VTRVJfTkFNRV9ERVBSRUNBVEVEIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSX1RZUEVfRklFTERfVkFMVUVfVVNFUiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUl9UWVBFX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19DT05UUk9MTEVSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19JU19NQUlOX1NFUlZFUl9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1JFR0lTVFJBVElPTl9DRVJUSUZJQ0FURVNfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19TWVNURU1fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1VTRVJTX1VTRVJfQUNDRVNTX1JJR0hUU19UWVBSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19VU0VSX0FVVEhFTlRJQ0FUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9VU0VSU19VU0VSX0NPTVBPTkVOVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfVVNFUl9HUk9VUF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVVNFUlNfVklFV19DRVJUSUZJQ0FURVNfQUNUSU9OX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1ZJRVdfREVGQVVMVF9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9WSUVXX0RFRkFVTFRfTkFNRSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfVklFV0VSX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XQUlUSU5HX0JMT0NLX0RFU0NSSVBUSU9OIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XSVpBUkRfRk9STV9MQUJFTF9URVNUX1NUUklORyAgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dJWkFSRF9RVUVSWV9QQVJBTV9IRUlHSFRfRVRBTE9OX1NUUklORyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV0laQVJEX1JFRkVSRU5DRV9DT01NRU5UX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1JVTEVTX0RFU0NSSVBUSU9OX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1RJTUVfQ0FMRU5EQVJfUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktfV09SS0ZMT1dfSEFSRF9ST1VURV9UWVBFX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX0hBUkRfUk9VVEVfVFlQRV9WQUxVRV9DT0RFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9XT1JLX1dPUktGTE9XX0hBUkRfUk9VVEVfVFlQRV9WQUxVRV9DT0RFX1JVUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS19XT1JLRkxPV19TT0ZUX1JPVVRFX1RZUEVfVkFMVUVfQ09ERV9SVVMgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1dPUktGTE9XX1JPVVRFX1RZUFJfSEFSRCBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfV09SS0ZMT1dfUk9VVEVfVFlQUl9TT0ZUIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9YTUxfRU5DT0RJTkcgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1hSRUNfU1RBVF9SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWFJFQ0lEX0ZJRUxEX05BTUUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFUyBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX05PXzJfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFU19OT19SRVFVSVNJVEVfQ09ERSBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1RfWUVTX05PX1RfUkVGX1RZUEVfUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVTX0NPTlNUX1lFU19QSUNLX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFU19DT05TVF9ZRVNfVkFMVUUgXCI7XG5cbiAgLy8gQmFzZSBjb25zdGFudFxuICB2YXIgYmFzZV9jb25zdGFudHMgPSBcIkNSIEZBTFNFIG5pbCBOT19WQUxVRSBOVUxMIFRBQiBUUlVFIFlFU19WQUxVRSBcIjtcblxuICAvLyBCYXNlIGdyb3VwIG5hbWVcbiAgdmFyIGJhc2VfZ3JvdXBfbmFtZV9jb25zdGFudHMgPVxuICAgIFwiQURNSU5JU1RSQVRPUlNfR1JPVVBfTkFNRSBDVVNUT01JWkVSU19HUk9VUF9OQU1FIERFVkVMT1BFUlNfR1JPVVBfTkFNRSBTRVJWSUNFX1VTRVJTX0dST1VQX05BTUUgXCI7XG5cbiAgLy8gRGVjaXNpb24gYmxvY2sgcHJvcGVydGllc1xuICB2YXIgZGVjaXNpb25fYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiREVDSVNJT05fQkxPQ0tfRklSU1RfT1BFUkFORF9QUk9QRVJUWSBERUNJU0lPTl9CTE9DS19OQU1FX1BST1BFUlRZIERFQ0lTSU9OX0JMT0NLX09QRVJBVElPTl9QUk9QRVJUWSBcIiArXG4gICAgXCJERUNJU0lPTl9CTE9DS19SRVNVTFRfVFlQRV9QUk9QRVJUWSBERUNJU0lPTl9CTE9DS19TRUNPTkRfT1BFUkFORF9QUk9QRVJUWSBcIjtcblxuICAvLyBGaWxlIGV4dGVuc2lvblxuICB2YXIgZmlsZV9leHRlbnNpb25fY29uc3RhbnRzID1cbiAgICBcIkFOWV9GSUxFX0VYVEVOVElPTiBDT01QUkVTU0VEX0RPQ1VNRU5UX0VYVEVOU0lPTiBFWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT04gXCIgK1xuICAgIFwiU0hPUlRfQ09NUFJFU1NFRF9ET0NVTUVOVF9FWFRFTlNJT04gU0hPUlRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OIFwiO1xuXG4gIC8vIEpvYiBibG9jayBwcm9wZXJ0aWVzXG4gIHZhciBqb2JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiSk9CX0JMT0NLX0FCT1JUX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FGVEVSX1FVRVJZX1BBUkFNRVRFUlNfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0JFRk9SRV9RVUVSWV9QQVJBTUVURVJTX0VWRU5UIFwiICtcbiAgICBcIkpPQl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0NSRUFURURfSk9CU19QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0VYRUNVVElPTl9SRVNVTFRTX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19JU19QQVJBTExFTF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfSVNfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIkpPQl9CTE9DS19KT0JfVEVYVF9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfTkVFRF9TSUdOX09OX1BFUkZPUk1fUFJPUEVSVFkgXCIgK1xuICAgIFwiSk9CX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfQUJPUlRfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJKT0JfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBMYW5ndWFnZSBjb2RlXG4gIHZhciBsYW5ndWFnZV9jb2RlX2NvbnN0YW50cyA9IFwiRU5HTElTSF9MQU5HVUFHRV9DT0RFIFJVU1NJQU5fTEFOR1VBR0VfQ09ERSBcIjtcblxuICAvLyBMYXVuY2hpbmcgZXh0ZXJuYWwgYXBwbGljYXRpb25zXG4gIHZhciBsYXVuY2hpbmdfZXh0ZXJuYWxfYXBwbGljYXRpb25zX2NvbnN0YW50cyA9XG4gICAgXCJzbUhpZGRlbiBzbU1heGltaXplZCBzbU1pbmltaXplZCBzbU5vcm1hbCB3bU5vIHdtWWVzIFwiO1xuXG4gIC8vIExpbmsga2luZFxuICB2YXIgbGlua19raW5kX2NvbnN0YW50cyA9XG4gICAgXCJDT01QT05FTlRfVE9LRU5fTElOS19LSU5EIFwiICtcbiAgICBcIkRPQ1VNRU5UX0xJTktfS0lORCBcIiArXG4gICAgXCJFRE9DVU1FTlRfTElOS19LSU5EIFwiICtcbiAgICBcIkZPTERFUl9MSU5LX0tJTkQgXCIgK1xuICAgIFwiSk9CX0xJTktfS0lORCBcIiArXG4gICAgXCJSRUZFUkVOQ0VfTElOS19LSU5EIFwiICtcbiAgICBcIlRBU0tfTElOS19LSU5EIFwiO1xuXG4gIC8vIExvY2sgdHlwZVxuICB2YXIgbG9ja190eXBlX2NvbnN0YW50cyA9XG4gICAgXCJDT01QT05FTlRfVE9LRU5fTE9DS19UWVBFIEVET0NVTUVOVF9WRVJTSU9OX0xPQ0tfVFlQRSBcIjtcblxuICAvLyBNb25pdG9yIGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIG1vbml0b3JfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiTU9OSVRPUl9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX0lOVEVSVkFMX1BST1BFUlRZIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfSU5URVJWQUxfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIk1PTklUT1JfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJNT05JVE9SX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiTU9OSVRPUl9CTE9DS19TRUFSQ0hfU0NSSVBUX1BST1BFUlRZIFwiO1xuXG4gIC8vIE5vdGljZSBibG9jayBwcm9wZXJ0aWVzXG4gIHZhciBub3RpY2VfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiTk9USUNFX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVF9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQVRUQUNITUVOVFNfUklHSFRTX0dST1VQX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19BVFRBQ0hNRU5UU19SSUdIVFNfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19DUkVBVEVEX05PVElDRVNfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIk5PVElDRV9CTE9DS19JU19SRUxBVElWRV9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfTk9USUNFX1RFWFRfUFJPUEVSVFkgXCIgK1xuICAgIFwiTk9USUNFX0JMT0NLX1BFUkZPUk1FUl9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfUkVMQVRJVkVfREVBRExJTkVfVFlQRV9QUk9QRVJUWSBcIiArXG4gICAgXCJOT1RJQ0VfQkxPQ0tfU1VCSkVDVF9QUk9QRVJUWSBcIjtcblxuICAvLyBPYmplY3QgZXZlbnRzXG4gIHZhciBvYmplY3RfZXZlbnRzX2NvbnN0YW50cyA9XG4gICAgXCJkc2VBZnRlckNhbmNlbCBcIiArXG4gICAgXCJkc2VBZnRlckNsb3NlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VBZnRlckluc2VydCBcIiArXG4gICAgXCJkc2VBZnRlck9wZW4gXCIgK1xuICAgIFwiZHNlQWZ0ZXJTY3JvbGwgXCIgK1xuICAgIFwiZHNlQWZ0ZXJVcGRhdGUgXCIgK1xuICAgIFwiZHNlQWZ0ZXJVcGRhdGVPdXRPZlRyYW5zYWN0aW9uIFwiICtcbiAgICBcImRzZUJlZm9yZUNhbmNlbCBcIiArXG4gICAgXCJkc2VCZWZvcmVDbG9zZSBcIiArXG4gICAgXCJkc2VCZWZvcmVEZWxldGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGV0YWlsVXBkYXRlIFwiICtcbiAgICBcImRzZUJlZm9yZUluc2VydCBcIiArXG4gICAgXCJkc2VCZWZvcmVPcGVuIFwiICtcbiAgICBcImRzZUJlZm9yZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPbkFueVJlcXVpc2l0ZUNoYW5nZSBcIiArXG4gICAgXCJkc2VPbkNsb3NlUmVjb3JkIFwiICtcbiAgICBcImRzZU9uRGVsZXRlRXJyb3IgXCIgK1xuICAgIFwiZHNlT25PcGVuUmVjb3JkIFwiICtcbiAgICBcImRzZU9uUHJlcGFyZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPblVwZGF0ZUVycm9yIFwiICtcbiAgICBcImRzZU9uVXBkYXRlUmF0aWZpZWRSZWNvcmQgXCIgK1xuICAgIFwiZHNlT25WYWxpZERlbGV0ZSBcIiArXG4gICAgXCJkc2VPblZhbGlkVXBkYXRlIFwiICtcbiAgICBcInJlT25DaGFuZ2UgXCIgK1xuICAgIFwicmVPbkNoYW5nZVZhbHVlcyBcIiArXG4gICAgXCJTRUxFQ1RJT05fQkVHSU5fUk9VVEVfRVZFTlQgXCIgK1xuICAgIFwiU0VMRUNUSU9OX0VORF9ST1VURV9FVkVOVCBcIjtcblxuICAvLyBPYmplY3QgcGFyYW1zXG4gIHZhciBvYmplY3RfcGFyYW1zX2NvbnN0YW50cyA9XG4gICAgXCJDVVJSRU5UX1BFUklPRF9JU19SRVFVSVJFRCBcIiArXG4gICAgXCJQUkVWSU9VU19DQVJEX1RZUEVfTkFNRSBcIiArXG4gICAgXCJTSE9XX1JFQ09SRF9QUk9QRVJUSUVTX0ZPUk0gXCI7XG5cbiAgLy8gT3RoZXJcbiAgdmFyIG90aGVyX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfUklHSFRTX1NFVFRJTkdfRElBTE9HX0NPREUgXCIgK1xuICAgIFwiQURNSU5JU1RSQVRPUl9VU0VSX0NPREUgXCIgK1xuICAgIFwiQU5BTFlUSUNfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiYXNydEhpZGVMb2NhbCBcIiArXG4gICAgXCJhc3J0SGlkZVJlbW90ZSBcIiArXG4gICAgXCJDQUxDVUxBVEVEX1JPTEVfVFlQRV9DT0RFIFwiICtcbiAgICBcIkNPTVBPTkVOVFNfUkVGRVJFTkNFX0RFVkVMT1BFUl9WSUVXX0NPREUgXCIgK1xuICAgIFwiRENUU19URVNUX1BST1RPQ09MU19GT0xERVJfUEFUSCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRCBcIiArXG4gICAgXCJFX0VET0NfVkVSU0lPTl9BTFJFQURZX0FQUFJPVklOR0xZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVfRURPQ19WRVJTSU9OX0FMUkVEWV9TSUdORUQgXCIgK1xuICAgIFwiRV9FRE9DX1ZFUlNJT05fQUxSRURZX1NJR05FRF9CWV9VU0VSIFwiICtcbiAgICBcIkVET0NfVFlQRVNfQ09ERV9SRVFVSVNJVEVfRklFTERfTkFNRSBcIiArXG4gICAgXCJFRE9DVU1FTlRTX0FMSUFTX05BTUUgXCIgK1xuICAgIFwiRklMRVNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRklMVEVSX09QRVJBTkRTX0RFTElNSVRFUiBcIiArXG4gICAgXCJGSUxURVJfT1BFUkFUSU9OU19ERUxJTUlURVIgXCIgK1xuICAgIFwiRk9STUNBUkRfTkFNRSBcIiArXG4gICAgXCJGT1JNTElTVF9OQU1FIFwiICtcbiAgICBcIkdFVF9FWFRFTkRFRF9ET0NVTUVOVF9FWFRFTlNJT05fQ1JFQVRJT05fTU9ERSBcIiArXG4gICAgXCJHRVRfRVhURU5ERURfRE9DVU1FTlRfRVhURU5TSU9OX0lNUE9SVF9NT0RFIFwiICtcbiAgICBcIklOVEVHUkFURURfUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9BUFBMSUNBVElPTl9ST0xFIFwiICtcbiAgICBcIklTX0JVSUxERVJfQVBQTElDQVRJT05fUk9MRTIgXCIgK1xuICAgIFwiSVNfQlVJTERFUl9VU0VSUyBcIiArXG4gICAgXCJJU0JTWVNERVYgXCIgK1xuICAgIFwiTE9HX0ZPTERFUl9QQVRIIFwiICtcbiAgICBcIm1iQ2FuY2VsIFwiICtcbiAgICBcIm1iTm8gXCIgK1xuICAgIFwibWJOb1RvQWxsIFwiICtcbiAgICBcIm1iT0sgXCIgK1xuICAgIFwibWJZZXMgXCIgK1xuICAgIFwibWJZZXNUb0FsbCBcIiArXG4gICAgXCJNRU1PUllfREFUQVNFVF9ERVNSSVBUSU9OU19GSUxFTkFNRSBcIiArXG4gICAgXCJtck5vIFwiICtcbiAgICBcIm1yTm9Ub0FsbCBcIiArXG4gICAgXCJtclllcyBcIiArXG4gICAgXCJtclllc1RvQWxsIFwiICtcbiAgICBcIk1VTFRJUExFX1NFTEVDVF9ESUFMT0dfQ09ERSBcIiArXG4gICAgXCJOT05PUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiTk9OT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJPUEVSQVRJTkdfUkVDT1JEX0ZMQUdfRkVNSU5JTkUgXCIgK1xuICAgIFwiT1BFUkFUSU5HX1JFQ09SRF9GTEFHX01BU0NVTElORSBcIiArXG4gICAgXCJQUk9GSUxJTkdfU0VUVElOR1NfQ09NTU9OX1NFVFRJTkdTX0NPREVfVkFMVUUgXCIgK1xuICAgIFwiUFJPR1JBTV9JTklUSUFURURfTE9PS1VQX0FDVElPTiBcIiArXG4gICAgXCJyYXREZWxldGUgXCIgK1xuICAgIFwicmF0RWRpdCBcIiArXG4gICAgXCJyYXRJbnNlcnQgXCIgK1xuICAgIFwiUkVQT1JUX1RZUEUgXCIgK1xuICAgIFwiUkVRVUlSRURfUElDS19WQUxVRVNfVkFSSUFCTEUgXCIgK1xuICAgIFwicm1DYXJkIFwiICtcbiAgICBcInJtTGlzdCBcIiArXG4gICAgXCJTQlJURV9QUk9HSURfREVWIFwiICtcbiAgICBcIlNCUlRFX1BST0dJRF9SRUxFQVNFIFwiICtcbiAgICBcIlNUQVRJQ19ST0xFX1RZUEVfQ09ERSBcIiArXG4gICAgXCJTVVBQUkVTU19FTVBUWV9URU1QTEFURV9DUkVBVElPTiBcIiArXG4gICAgXCJTWVNURU1fVVNFUl9DT0RFIFwiICtcbiAgICBcIlVQREFURV9ESUFMT0dfREFUQVNFVCBcIiArXG4gICAgXCJVU0VEX0lOX09CSkVDVF9ISU5UX1BBUkFNIFwiICtcbiAgICBcIlVTRVJfSU5JVElBVEVEX0xPT0tVUF9BQ1RJT04gXCIgK1xuICAgIFwiVVNFUl9OQU1FX0ZPUk1BVCBcIiArXG4gICAgXCJVU0VSX1NFTEVDVElPTl9SRVNUUklDVElPTlMgXCIgK1xuICAgIFwiV09SS0ZMT1dfVEVTVF9QUk9UT0NPTFNfRk9MREVSX1BBVEggXCIgK1xuICAgIFwiRUxTX1NVQlRZUEVfQ09OVFJPTF9OQU1FIFwiICtcbiAgICBcIkVMU19GT0xERVJfS0lORF9DT05UUk9MX05BTUUgXCIgK1xuICAgIFwiUkVQRUFUX1BST0NFU1NfQ1VSUkVOVF9PQkpFQ1RfRVhDRVBUSU9OX05BTUUgXCI7XG5cbiAgLy8gUHJpdmlsZWdlc1xuICB2YXIgcHJpdmlsZWdlc19jb25zdGFudHMgPVxuICAgIFwiUFJJVklMRUdFX0NPTVBPTkVOVF9GVUxMX0FDQ0VTUyBcIiArXG4gICAgXCJQUklWSUxFR0VfREVWRUxPUE1FTlRfRVhQT1JUIFwiICtcbiAgICBcIlBSSVZJTEVHRV9ERVZFTE9QTUVOVF9JTVBPUlQgXCIgK1xuICAgIFwiUFJJVklMRUdFX0RPQ1VNRU5UX0RFTEVURSBcIiArXG4gICAgXCJQUklWSUxFR0VfRVNEIFwiICtcbiAgICBcIlBSSVZJTEVHRV9GT0xERVJfREVMRVRFIFwiICtcbiAgICBcIlBSSVZJTEVHRV9NQU5BR0VfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJQUklWSUxFR0VfTUFOQUdFX1JFUExJQ0FUSU9OIFwiICtcbiAgICBcIlBSSVZJTEVHRV9NQU5BR0VfU0VTU0lPTl9TRVJWRVIgXCIgK1xuICAgIFwiUFJJVklMRUdFX09CSkVDVF9GVUxMX0FDQ0VTUyBcIiArXG4gICAgXCJQUklWSUxFR0VfT0JKRUNUX1ZJRVcgXCIgK1xuICAgIFwiUFJJVklMRUdFX1JFU0VSVkVfTElDRU5TRSBcIiArXG4gICAgXCJQUklWSUxFR0VfU1lTVEVNX0NVU1RPTUlaRSBcIiArXG4gICAgXCJQUklWSUxFR0VfU1lTVEVNX0RFVkVMT1AgXCIgK1xuICAgIFwiUFJJVklMRUdFX1NZU1RFTV9JTlNUQUxMIFwiICtcbiAgICBcIlBSSVZJTEVHRV9UQVNLX0RFTEVURSBcIiArXG4gICAgXCJQUklWSUxFR0VfVVNFUl9QTFVHSU5fU0VUVElOR1NfQ1VTVE9NSVpFIFwiICtcbiAgICBcIlBSSVZJTEVHRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCI7XG5cbiAgLy8gUHNldWRvcmVmZXJlbmNlIGNvZGVcbiAgdmFyIHBzZXVkb3JlZmVyZW5jZV9jb2RlX2NvbnN0YW50cyA9XG4gICAgXCJBQ0NFU1NfVFlQRVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkFMTF9BVkFJTEFCTEVfUFJJVklMRUdFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJBTExfUkVQTElDQVRFX0NPTVBPTkVOVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiQVZBSUxBQkxFX0RFVkVMT1BFUlNfQ09NUE9ORU5UU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJDT01QT05FTlRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIkZJTFRSQVRFUl9TRVRUSU5HU19DT05GTElDVFNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiR1JPVVBTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlJFQ0VJVkVfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiUkVGRVJFTkNFX1JFUVVJU0lURV9QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRUZFUkVOQ0VfUkVRVUlTSVRFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRUZUWVBFU19QU0VVRE9SRUZFUkVOQ0VfQ09ERSBcIiArXG4gICAgXCJSRVBMSUNBVElPTl9TRUFOQ0VTX0RJQVJZX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlNFTkRfUFJPVE9DT0xfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1VCU1RJVFVURVNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCIgK1xuICAgIFwiU1lTVEVNX1NFVFRJTkdTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlVOSVRTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlVTRVJTX1BTRVVET1JFRkVSRU5DRV9DT0RFIFwiICtcbiAgICBcIlZJRVdFUlNfUFNFVURPUkVGRVJFTkNFX0NPREUgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIElTQkNlcnRpZmljYXRlVHlwZSB2YWx1ZXNcbiAgdmFyIHJlcXVpc2l0ZV9JU0JDZXJ0aWZpY2F0ZVR5cGVfdmFsdWVzX2NvbnN0YW50cyA9XG4gICAgXCJDRVJUSUZJQ0FURV9UWVBFX0VOQ1JZUFQgXCIgK1xuICAgIFwiQ0VSVElGSUNBVEVfVFlQRV9TSUdOIFwiICtcbiAgICBcIkNFUlRJRklDQVRFX1RZUEVfU0lHTl9BTkRfRU5DUllQVCBcIjtcblxuICAvLyBSZXF1aXNpdGUgSVNCRURvY1N0b3JhZ2VUeXBlIHZhbHVlc1xuICB2YXIgcmVxdWlzaXRlX0lTQkVEb2NTdG9yYWdlVHlwZV92YWx1ZXNfY29uc3RhbnRzID1cbiAgICBcIlNUT1JBR0VfVFlQRV9GSUxFIFwiICtcbiAgICBcIlNUT1JBR0VfVFlQRV9OQVNfQ0lGUyBcIiArXG4gICAgXCJTVE9SQUdFX1RZUEVfU0FQRVJJT04gXCIgK1xuICAgIFwiU1RPUkFHRV9UWVBFX1NRTF9TRVJWRVIgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIENvbXBUeXBlMiB2YWx1ZXNcbiAgdmFyIHJlcXVpc2l0ZV9jb21wVHlwZTJfdmFsdWVzX2NvbnN0YW50cyA9XG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX0RPQ1VNRU5UU19WQUxVRSBcIiArXG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX1RBU0tTX1ZBTFVFIFwiICtcbiAgICBcIkNPTVBUWVBFMl9SRVFVSVNJVEVfRk9MREVSU19WQUxVRSBcIiArXG4gICAgXCJDT01QVFlQRTJfUkVRVUlTSVRFX1JFRkVSRU5DRVNfVkFMVUUgXCI7XG5cbiAgLy8gUmVxdWlzaXRlIG5hbWVcbiAgdmFyIHJlcXVpc2l0ZV9uYW1lX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfQ09NUFRZUEUyIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9BVkFJTEFCTEVfRk9SX1dFQiBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfQ09NTU9OX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0NPTlNUX0NPTU1PTl9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9DT05TVF9GSVJNX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfRklSTV9WQUxVRSBcIiArXG4gICAgXCJTWVNSRVFfQ09OU1RfU0VSVkVSX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfQ09OVEVOVFMgXCIgK1xuICAgIFwiU1lTUkVRX0RBVEVfT1BFTiBcIiArXG4gICAgXCJTWVNSRVFfREFURV9DTE9TRSBcIiArXG4gICAgXCJTWVNSRVFfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9ET1VCTEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQUNDRVNTX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfQVVUSE9SIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0NSRUFURUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfREVMRUdBVEVfUklHSFRTX1JFUVVJU0lURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VESVRPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNPREVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19FTkNSWVBUSU9OX1BMVUdJTl9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX0VOQ1JZUFRJT05fUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JUX0RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfRVhQT1JURVIgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19MSUZFX1NUQUdFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfTE9DS0VEX0ZPUl9TRVJWRVJfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19NT0RJRklFRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX05PVEUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfUVVBTElGSUVEX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NFU1NJT05fS0VZX0VOQ1JZUFRJT05fUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU0VTU0lPTl9LRVlfRU5DUllQVElPTl9QTFVHSU5fVkVSU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdOQVRVUkVfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TSUdORUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19BUkNISVZFX1NUT1JBR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfQ0hFQ0tfUklHSFRTIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0NPTVBVVEVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfRURJVF9JTl9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0VYRUNVVElWRV9TVE9SQUdFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0ZVTkNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0lOSVRJQUxJWkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1NUT1JBR0VTX0xPQ0FMX1BBVEggXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfU0FQRVJJT05fREFUQUJBU0VfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRUFSQ0hfQllfVEVYVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TRVJWRVJfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19TVE9SQUdFU19TSEFSRURfU09VUkNFX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfU1RPUkFHRVNfVFlQRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19URVhUX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT04gXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfREVTQ1JJUFRJT05fTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9PTl9FWEVDVVRFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0FDVF9TRUNUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTkFNRV9JTl9TSU5HVUxBUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX05BTUVfSU5fU0lOR1VMQVJfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfTlVNRVJBVElPTl9NRVRIT0QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9QU0VVRE9fUkVRVUlTSVRFX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9ERVNDUklQVElPTl9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9JU19MRUFESU5HIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX0lTX1JFUVVJUkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9DSEFOR0UgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fQ0hBTkdFX0VYSVNUUyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfT05fU0VMRUNUX0tJTkQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVFlQRV9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09ERSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19UWVBFX1ZJRVdfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0FVVEhPUiBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0NSQyBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0RBVEEgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FRElUT1IgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NfVkVSU0lPTl9FWFBPUlRfREFURSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX0VYUE9SVEVSIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fSElEREVOIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTElGRV9TVEFHRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX01PRElGSUVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fTk9URSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NJR05BVFVSRV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0lHTkVEIFwiICtcbiAgICBcIlNZU1JFUV9FRE9DX1ZFUlNJT05fU0laRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1NPVVJDRSBcIiArXG4gICAgXCJTWVNSRVFfRURPQ19WRVJTSU9OX1RFWFRfTU9ESUZJRUQgXCIgK1xuICAgIFwiU1lTUkVRX0VET0NLSU5EX0RFRkFVTFRfVkVSU0lPTl9TVEFURV9DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9GT0xERVJfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19DT01NRU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0dST1VQX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfR1JPVVBfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX0hFTFAgXCIgK1xuICAgIFwiU1lTUkVRX0ZVTkNfUEFSQU1fREVGX1ZBTFVFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX0lERU5UIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1BBUkFNX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfRlVOQ19QQVJBTV9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9GVU5DX1RFWFQgXCIgK1xuICAgIFwiU1lTUkVRX0dST1VQX0NBVEVHT1JZIFwiICtcbiAgICBcIlNZU1JFUV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTEFTVF9VUERBVEUgXCIgK1xuICAgIFwiU1lTUkVRX0xFQURFUl9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX0xJTkVfTlVNQkVSIFwiICtcbiAgICBcIlNZU1JFUV9NQUlOX1JFQ09SRF9JRCBcIiArXG4gICAgXCJTWVNSRVFfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfTkFNRV9MT0NBTElaRV9JRCBcIiArXG4gICAgXCJTWVNSRVFfTk9URSBcIiArXG4gICAgXCJTWVNSRVFfT1JJR0lOQUxfUkVDT1JEIFwiICtcbiAgICBcIlNZU1JFUV9PVVJfRklSTSBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX0xPR0lORyBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX0JBVENIX1NJWkUgXCIgK1xuICAgIFwiU1lTUkVRX1BST0ZJTElOR19TRVRUSU5HU19QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NRTF9QUk9GSUxJTkdfRU5BQkxFRCBcIiArXG4gICAgXCJTWVNSRVFfUFJPRklMSU5HX1NFVFRJTkdTX1NUQVJUX0xPR0dFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVDT1JEX1NUQVRVUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9GSUVMRF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX0ZPUk1BVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9HRU5FUkFURUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfTEVOR1RIIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1BSRUNJU0lPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1JFUV9TVE9SRUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVE9LRU5TIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9SRVFfVklFVyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX0FDVF9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfT05fRVhFQ1VURSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUNUX09OX0VYRUNVVEVfRVhJU1RTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9BQ1RfU0VDVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQUREX1BBUkFNUyBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTUVOVCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfQ09NTU9OX1NFVFRJTkdTIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9ESVNQTEFZX1JFUVVJU0lURV9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9FVkVOVF9URVhUIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9NQUlOX0xFQURJTkdfUkVGIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0lOX1NJTkdVTEFSX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OQU1FX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9OVU1FUkFUSU9OX01FVEhPRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0NPREUgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0RFU0NSSVBUSU9OX0xPQ0FMSVpFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9SRVFfSVNfQ09OVFJPTCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0ZJTFRFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX0lTX0xFQURJTkcgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9JU19SRVFVSVJFRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX05VTUJFUiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRSBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX09OX0NIQU5HRV9FWElTVFMgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1QgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1JFUV9PTl9TRUxFQ1RfS0lORCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfUkVRX1NFQ1RJT04gXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfQ0FSRCBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19DT0RFIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX0NPTU1FTlQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRl9UWVBFX1ZJRVdfSVNfTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfUkVGX1RZUEVfVklFV19OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9SRUZfVFlQRV9WSUVXX05BTUVfTE9DQUxJWkVfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1JFRkVSRU5DRV9UWVBFX0lEIFwiICtcbiAgICBcIlNZU1JFUV9TVEFURSBcIiArXG4gICAgXCJTWVNSRVFfU1RBVNCVIFwiICtcbiAgICBcIlNZU1JFUV9TWVNURU1fU0VUVElOR1NfVkFMVUUgXCIgK1xuICAgIFwiU1lTUkVRX1RZUEUgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVQgXCIgK1xuICAgIFwiU1lTUkVRX1VOSVRfSUQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJfR1JPVVBTX0dST1VQX0ZVTExfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUl9HUk9VUFNfR1JPVVBfU0VSVkVSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FDQ0VTU19SSUdIVFMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0FVVEhFTlRJQ0FUSU9OIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DQVRFR09SWSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfQ09NUE9ORU5UIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19DT01QT05FTlRfVVNFUl9JU19QVUJMSUMgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0RPTUFJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfRlVMTF9VU0VSX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX0dST1VQIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19JU19NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfTE9HSU4gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1JFRkVSRU5DRV9VU0VSX0lTX1BVQkxJQyBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfU1RBVFVTIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX0lORk8gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX05BTUUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfUExVR0lOX1ZFUlNJT04gXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1RBVEUgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfQ0VSVElGSUNBVEVfU1VCSkVDVF9OQU1FIFwiICtcbiAgICBcIlNZU1JFUV9VU0VSU19VU0VSX0NFUlRJRklDQVRFX1RIVU1CUFJJTlQgXCIgK1xuICAgIFwiU1lTUkVRX1VTRVJTX1VTRVJfREVGQVVMVF9DRVJUSUZJQ0FURSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9ERVNDUklQVElPTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9HTE9CQUxfTkFNRSBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9MT0dJTiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9NQUlOX1NFUlZFUiBcIiArXG4gICAgXCJTWVNSRVFfVVNFUlNfVVNFUl9UWVBFIFwiICtcbiAgICBcIlNZU1JFUV9XT1JLX1JVTEVTX0ZPTERFUl9JRCBcIjtcblxuICAvLyBSZXN1bHRcbiAgdmFyIHJlc3VsdF9jb25zdGFudHMgPSBcIlJFU1VMVF9WQVJfTkFNRSBSRVNVTFRfVkFSX05BTUVfRU5HIFwiO1xuXG4gIC8vIFJ1bGUgaWRlbnRpZmljYXRpb25cbiAgdmFyIHJ1bGVfaWRlbnRpZmljYXRpb25fY29uc3RhbnRzID1cbiAgICBcIkFVVE9fTlVNRVJBVElPTl9SVUxFX0lEIFwiICtcbiAgICBcIkNBTlRfQ0hBTkdFX0lEX1JFUVVJU0lURV9SVUxFX0lEIFwiICtcbiAgICBcIkNBTlRfQ0hBTkdFX09VUkZJUk1fUkVRVUlTSVRFX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfQ0hBTkdJTkdfUkVGRVJFTkNFX1JFQ09SRF9VU0VfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19DT0RFX1JFUVVJU0lURV9SVUxFX0lEIFwiICtcbiAgICBcIkNIRUNLX0RFTEVUSU5HX1JFRkVSRU5DRV9SRUNPUkRfVVNFX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfRklMVFJBVEVSX0NIQU5HRVNfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRUNPUkRfSU5URVJWQUxfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRUZFUkVOQ0VfSU5URVJWQUxfUlVMRV9JRCBcIiArXG4gICAgXCJDSEVDS19SRVFVSVJFRF9EQVRBX0ZVTExORVNTX1JVTEVfSUQgXCIgK1xuICAgIFwiQ0hFQ0tfUkVRVUlSRURfUkVRVUlTSVRFU19GVUxMTkVTU19SVUxFX0lEIFwiICtcbiAgICBcIk1BS0VfUkVDT1JEX1VOUkFUSUZJRURfUlVMRV9JRCBcIiArXG4gICAgXCJSRVNUT1JFX0FVVE9fTlVNRVJBVElPTl9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9GSVJNX0NPTlRFWFRfRlJPTV9SRUNPUkRfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfRklSU1RfUkVDT1JEX0lOX0xJU1RfRk9STV9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9JRFNQU19WQUxVRV9SVUxFX0lEIFwiICtcbiAgICBcIlNFVF9ORVhUX0NPREVfVkFMVUVfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfT1VSRklSTV9CT1VORFNfUlVMRV9JRCBcIiArXG4gICAgXCJTRVRfT1VSRklSTV9SRVFVSVNJVEVfUlVMRV9JRCBcIjtcblxuICAvLyBTY3JpcHQgYmxvY2sgcHJvcGVydGllc1xuICB2YXIgc2NyaXB0X2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzID1cbiAgICBcIlNDUklQVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX0JFRk9SRV9TVEFSVF9FVkVOVCBcIiArXG4gICAgXCJTQ1JJUFRfQkxPQ0tfRVhFQ1VUSU9OX1JFU1VMVFNfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX05BTUVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU0NSSVBUX0JMT0NLX1NDUklQVF9QUk9QRVJUWSBcIjtcblxuICAvLyBTdWJ0YXNrIGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIHN1YnRhc2tfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiU1VCVEFTS19CTE9DS19BQk9SVF9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FGVEVSX0ZJTklTSF9FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FTU0lHTl9QQVJBTVNfRVZFTlQgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19BVFRBQ0hNRU5UU19QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19HUk9VUF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0FUVEFDSE1FTlRTX1JJR0hUU19UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQkVGT1JFX1NUQVJUX0VWRU5UIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQ1JFQVRFRF9UQVNLX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfQ1JFQVRJT05fRVZFTlQgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lNUE9SVEFOQ0VfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19JTklUSUFUT1JfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19JU19SRUxBVElWRV9BQk9SVF9ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfSk9CU19UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1BBUkFMTEVMX1JPVVRFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUEVSRk9STUVSU19QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1JFTEFUSVZFX0FCT1JUX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19SRUxBVElWRV9ERUFETElORV9UWVBFX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfUkVRVUlSRV9TSUdOX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfU1RBTkRBUkRfUk9VVEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19TVEFSVF9FVkVOVCBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1NURVBfQ09OVFJPTF9QUk9QRVJUWSBcIiArXG4gICAgXCJTVUJUQVNLX0JMT0NLX1NVQkpFQ1RfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19UQVNLX0NPTlRST0xfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19URVhUX1BST1BFUlRZIFwiICtcbiAgICBcIlNVQlRBU0tfQkxPQ0tfVU5MT0NLX0FUVEFDSE1FTlRTX09OX1NUT1BfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19VU0VfU1RBTkRBUkRfUk9VVEVfUFJPUEVSVFkgXCIgK1xuICAgIFwiU1VCVEFTS19CTE9DS19XQUlUX0ZPUl9UQVNLX0NPTVBMRVRFX1BST1BFUlRZIFwiO1xuXG4gIC8vIFN5c3RlbSBjb21wb25lbnRcbiAgdmFyIHN5c3RlbV9jb21wb25lbnRfY29uc3RhbnRzID1cbiAgICBcIlNZU0NPTVBfQ09OVFJPTF9KT0JTIFwiICtcbiAgICBcIlNZU0NPTVBfRk9MREVSUyBcIiArXG4gICAgXCJTWVNDT01QX0pPQlMgXCIgK1xuICAgIFwiU1lTQ09NUF9OT1RJQ0VTIFwiICtcbiAgICBcIlNZU0NPTVBfVEFTS1MgXCI7XG5cbiAgLy8gU3lzdGVtIGRpYWxvZ3NcbiAgdmFyIHN5c3RlbV9kaWFsb2dzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVCBcIiArXG4gICAgXCJTWVNETEdfQ1JFQVRFX0VET0NVTUVOVF9WRVJTSU9OIFwiICtcbiAgICBcIlNZU0RMR19DVVJSRU5UX1BFUklPRCBcIiArXG4gICAgXCJTWVNETEdfRURJVF9GVU5DVElPTl9IRUxQIFwiICtcbiAgICBcIlNZU0RMR19FRE9DVU1FTlRfS0lORFNfRk9SX1RFTVBMQVRFIFwiICtcbiAgICBcIlNZU0RMR19FWFBPUlRfTVVMVElQTEVfRURPQ1VNRU5UUyBcIiArXG4gICAgXCJTWVNETEdfRVhQT1JUX1NJTkdMRV9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX0lNUE9SVF9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX01VTFRJUExFX1NFTEVDVCBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfQUNDRVNTX1JJR0hUUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfREVGQVVMVF9SSUdIVFMgXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX0ZJTFRFUl9DT05ESVRJT04gXCIgK1xuICAgIFwiU1lTRExHX1NFVFVQX1NJR05fUklHSFRTIFwiICtcbiAgICBcIlNZU0RMR19TRVRVUF9UQVNLX09CU0VSVkVSUyBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVEFTS19ST1VURSBcIiArXG4gICAgXCJTWVNETEdfU0VUVVBfVVNFUlNfTElTVCBcIiArXG4gICAgXCJTWVNETEdfU0lHTl9FRE9DVU1FTlQgXCIgK1xuICAgIFwiU1lTRExHX1NJR05fTVVMVElQTEVfRURPQ1VNRU5UUyBcIjtcblxuICAvLyBTeXN0ZW0gcmVmZXJlbmNlIG5hbWVzXG4gIHZhciBzeXN0ZW1fcmVmZXJlbmNlX25hbWVzX2NvbnN0YW50cyA9XG4gICAgXCJTWVNSRUZfQUNDRVNTX1JJR0hUU19UWVBFUyBcIiArXG4gICAgXCJTWVNSRUZfQURNSU5JU1RSQVRJT05fSElTVE9SWSBcIiArXG4gICAgXCJTWVNSRUZfQUxMX0FWQUlMQUJMRV9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9BTExfQVZBSUxBQkxFX1BSSVZJTEVHRVMgXCIgK1xuICAgIFwiU1lTUkVGX0FMTF9SRVBMSUNBVElOR19DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9BVkFJTEFCTEVfREVWRUxPUEVSU19DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9DQUxFTkRBUl9FVkVOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0NPTVBPTkVOVF9UT0tFTl9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9DT01QT05FTlRfVE9LRU5TIFwiICtcbiAgICBcIlNZU1JFRl9DT01QT05FTlRTIFwiICtcbiAgICBcIlNZU1JFRl9DT05TVEFOVFMgXCIgK1xuICAgIFwiU1lTUkVGX0RBVEFfUkVDRUlWRV9QUk9UT0NPTCBcIiArXG4gICAgXCJTWVNSRUZfREFUQV9TRU5EX1BST1RPQ09MIFwiICtcbiAgICBcIlNZU1JFRl9ESUFMT0dTIFwiICtcbiAgICBcIlNZU1JFRl9ESUFMT0dTX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VESVRPUlMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NfQ0FSRFMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NfVFlQRVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEX1RZUEVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfQ0FSRF9UWVBFU19SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9DQVJEUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9LSU5EUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX1JFUVVJU0lURVMgXCIgK1xuICAgIFwiU1lTUkVGX0VET0NVTUVOVF9TSUdOQVRVUkVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfVEVNUExBVEVTIFwiICtcbiAgICBcIlNZU1JFRl9FRE9DVU1FTlRfVEVYVF9TVE9SQUdFUyBcIiArXG4gICAgXCJTWVNSRUZfRURPQ1VNRU5UX1ZJRVdTIFwiICtcbiAgICBcIlNZU1JFRl9GSUxURVJFUl9TRVRVUF9DT05GTElDVFMgXCIgK1xuICAgIFwiU1lTUkVGX0ZJTFRSQVRFUl9TRVRUSU5HX0NPTkZMSUNUUyBcIiArXG4gICAgXCJTWVNSRUZfRk9MREVSX0hJU1RPUlkgXCIgK1xuICAgIFwiU1lTUkVGX0ZPTERFUlMgXCIgK1xuICAgIFwiU1lTUkVGX0ZVTkNUSU9OX0dST1VQUyBcIiArXG4gICAgXCJTWVNSRUZfRlVOQ1RJT05fUEFSQU1TIFwiICtcbiAgICBcIlNZU1JFRl9GVU5DVElPTlMgXCIgK1xuICAgIFwiU1lTUkVGX0pPQl9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9MSU5LUyBcIiArXG4gICAgXCJTWVNSRUZfTE9DQUxJWkFUSU9OX0RJQ1RJT05BUlkgXCIgK1xuICAgIFwiU1lTUkVGX0xPQ0FMSVpBVElPTl9MQU5HVUFHRVMgXCIgK1xuICAgIFwiU1lTUkVGX01PRFVMRVMgXCIgK1xuICAgIFwiU1lTUkVGX1BSSVZJTEVHRVMgXCIgK1xuICAgIFwiU1lTUkVGX1JFQ09SRF9ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9SRUZFUkVOQ0VfUkVRVUlTSVRFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFX1RZUEVfVklFV1MgXCIgK1xuICAgIFwiU1lTUkVGX1JFRkVSRU5DRV9UWVBFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFUyBcIiArXG4gICAgXCJTWVNSRUZfUkVGRVJFTkNFU19SRVFVSVNJVEVTIFwiICtcbiAgICBcIlNZU1JFRl9SRU1PVEVfU0VSVkVSUyBcIiArXG4gICAgXCJTWVNSRUZfUkVQTElDQVRJT05fU0VTU0lPTlNfTE9HIFwiICtcbiAgICBcIlNZU1JFRl9SRVBMSUNBVElPTl9TRVNTSU9OU19QUk9UT0NPTCBcIiArXG4gICAgXCJTWVNSRUZfUkVQT1JUUyBcIiArXG4gICAgXCJTWVNSRUZfUk9MRVMgXCIgK1xuICAgIFwiU1lTUkVGX1JPVVRFX0JMT0NLX0dST1VQUyBcIiArXG4gICAgXCJTWVNSRUZfUk9VVEVfQkxPQ0tTIFwiICtcbiAgICBcIlNZU1JFRl9TQ1JJUFRTIFwiICtcbiAgICBcIlNZU1JFRl9TRUFSQ0hFUyBcIiArXG4gICAgXCJTWVNSRUZfU0VSVkVSX0VWRU5UUyBcIiArXG4gICAgXCJTWVNSRUZfU0VSVkVSX0VWRU5UU19ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9TVEFOREFSRF9ST1VURV9HUk9VUFMgXCIgK1xuICAgIFwiU1lTUkVGX1NUQU5EQVJEX1JPVVRFUyBcIiArXG4gICAgXCJTWVNSRUZfU1RBVFVTRVMgXCIgK1xuICAgIFwiU1lTUkVGX1NZU1RFTV9TRVRUSU5HUyBcIiArXG4gICAgXCJTWVNSRUZfVEFTS19ISVNUT1JZIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX0tJTkRfR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX0tJTkRTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLX1JJR0hUUyBcIiArXG4gICAgXCJTWVNSRUZfVEFTS19TSUdOQVRVUkVTIFwiICtcbiAgICBcIlNZU1JFRl9UQVNLUyBcIiArXG4gICAgXCJTWVNSRUZfVU5JVFMgXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJfR1JPVVBTIFwiICtcbiAgICBcIlNZU1JFRl9VU0VSX0dST1VQU19SRUZFUkVOQ0UgXCIgK1xuICAgIFwiU1lTUkVGX1VTRVJfU1VCU1RJVFVUSU9OIFwiICtcbiAgICBcIlNZU1JFRl9VU0VSUyBcIiArXG4gICAgXCJTWVNSRUZfVVNFUlNfUkVGRVJFTkNFIFwiICtcbiAgICBcIlNZU1JFRl9WSUVXRVJTIFwiICtcbiAgICBcIlNZU1JFRl9XT1JLSU5HX1RJTUVfQ0FMRU5EQVJTIFwiO1xuXG4gIC8vIFRhYmxlIG5hbWVcbiAgdmFyIHRhYmxlX25hbWVfY29uc3RhbnRzID1cbiAgICBcIkFDQ0VTU19SSUdIVFNfVEFCTEVfTkFNRSBcIiArXG4gICAgXCJFRE1TX0FDQ0VTU19UQUJMRV9OQU1FIFwiICtcbiAgICBcIkVET0NfVFlQRVNfVEFCTEVfTkFNRSBcIjtcblxuICAvLyBUZXN0XG4gIHZhciB0ZXN0X2NvbnN0YW50cyA9XG4gICAgXCJURVNUX0RFVl9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfREVWX1NZU1RFTV9DT0RFIFwiICtcbiAgICBcIlRFU1RfRURNU19EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19NQUlOX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX01BSU5fREJfTkFNRSBcIiArXG4gICAgXCJURVNUX0VETVNfU0VDT05EX0NPREUgXCIgK1xuICAgIFwiVEVTVF9FRE1TX1NFQ09ORF9EQl9OQU1FIFwiICtcbiAgICBcIlRFU1RfRURNU19TWVNURU1fQ09ERSBcIiArXG4gICAgXCJURVNUX0lTQjVfTUFJTl9DT0RFIFwiICtcbiAgICBcIlRFU1RfSVNCNV9TRUNPTkRfQ09ERSBcIiArXG4gICAgXCJURVNUX1NRTF9TRVJWRVJfMjAwNV9OQU1FIFwiICtcbiAgICBcIlRFU1RfU1FMX1NFUlZFUl9OQU1FIFwiO1xuXG4gIC8vIFVzaW5nIHRoZSBkaWFsb2cgd2luZG93c1xuICB2YXIgdXNpbmdfdGhlX2RpYWxvZ193aW5kb3dzX2NvbnN0YW50cyA9XG4gICAgXCJBVFRFTlRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJjYnNDb21tYW5kTGlua3MgXCIgK1xuICAgIFwiY2JzRGVmYXVsdCBcIiArXG4gICAgXCJDT05GSVJNQVRJT05fQ0FQVElPTiBcIiArXG4gICAgXCJFUlJPUl9DQVBUSU9OIFwiICtcbiAgICBcIklORk9STUFUSU9OX0NBUFRJT04gXCIgK1xuICAgIFwibXJDYW5jZWwgXCIgK1xuICAgIFwibXJPayBcIjtcblxuICAvLyBVc2luZyB0aGUgZG9jdW1lbnRcbiAgdmFyIHVzaW5nX3RoZV9kb2N1bWVudF9jb25zdGFudHMgPVxuICAgIFwiRURPQ19WRVJTSU9OX0FDVElWRV9TVEFHRV9DT0RFIFwiICtcbiAgICBcIkVET0NfVkVSU0lPTl9ERVNJR05fU1RBR0VfQ09ERSBcIiArXG4gICAgXCJFRE9DX1ZFUlNJT05fT0JTT0xFVEVfU1RBR0VfQ09ERSBcIjtcblxuICAvLyBVc2luZyB0aGUgRUEgYW5kIGVuY3J5cHRpb25cbiAgdmFyIHVzaW5nX3RoZV9FQV9hbmRfZW5jcnlwdGlvbl9jb25zdGFudHMgPVxuICAgIFwiY3BEYXRhRW5jaXBoZXJtZW50RW5hYmxlZCBcIiArXG4gICAgXCJjcERpZ2l0YWxTaWduYXR1cmVFbmFibGVkIFwiICtcbiAgICBcImNwSUQgXCIgK1xuICAgIFwiY3BJc3N1ZXIgXCIgK1xuICAgIFwiY3BQbHVnaW5WZXJzaW9uIFwiICtcbiAgICBcImNwU2VyaWFsIFwiICtcbiAgICBcImNwU3ViamVjdE5hbWUgXCIgK1xuICAgIFwiY3BTdWJqU2ltcGxlTmFtZSBcIiArXG4gICAgXCJjcFZhbGlkRnJvbURhdGUgXCIgK1xuICAgIFwiY3BWYWxpZFRvRGF0ZSBcIjtcblxuICAvLyBVc2luZyB0aGUgSVNCTC1lZGl0b3JcbiAgdmFyIHVzaW5nX3RoZV9JU0JMX2VkaXRvcl9jb25zdGFudHMgPVxuICAgIFwiSVNCTF9TWU5UQVggXCIgKyBcIk5PX1NZTlRBWCBcIiArIFwiWE1MX1NZTlRBWCBcIjtcblxuICAvLyBXYWl0IGJsb2NrIHByb3BlcnRpZXNcbiAgdmFyIHdhaXRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgPVxuICAgIFwiV0FJVF9CTE9DS19BRlRFUl9GSU5JU0hfRVZFTlQgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19CRUZPUkVfU1RBUlRfRVZFTlQgXCIgK1xuICAgIFwiV0FJVF9CTE9DS19ERUFETElORV9QUk9QRVJUWSBcIiArXG4gICAgXCJXQUlUX0JMT0NLX0lTX1JFTEFUSVZFX0RFQURMSU5FX1BST1BFUlRZIFwiICtcbiAgICBcIldBSVRfQkxPQ0tfTkFNRV9QUk9QRVJUWSBcIiArXG4gICAgXCJXQUlUX0JMT0NLX1JFTEFUSVZFX0RFQURMSU5FX1RZUEVfUFJPUEVSVFkgXCI7XG5cbiAgLy8gU1lTUkVTIENvbW1vblxuICB2YXIgc3lzcmVzX2NvbW1vbl9jb25zdGFudHMgPVxuICAgIFwiU1lTUkVTX0NPTU1PTiBcIiArXG4gICAgXCJTWVNSRVNfQ09OU1QgXCIgK1xuICAgIFwiU1lTUkVTX01CRlVOQyBcIiArXG4gICAgXCJTWVNSRVNfU0JEQVRBIFwiICtcbiAgICBcIlNZU1JFU19TQkdVSSBcIiArXG4gICAgXCJTWVNSRVNfU0JJTlRGIFwiICtcbiAgICBcIlNZU1JFU19TQlJFRkRTQyBcIiArXG4gICAgXCJTWVNSRVNfU1FMRVJST1JTIFwiICtcbiAgICBcIlNZU1JFU19TWVNDT01QIFwiO1xuXG4gIC8vINCa0L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgdmFyIENPTlNUQU5UUyA9XG4gICAgc3lzcmVzX2NvbnN0YW50cyArXG4gICAgYmFzZV9jb25zdGFudHMgK1xuICAgIGJhc2VfZ3JvdXBfbmFtZV9jb25zdGFudHMgK1xuICAgIGRlY2lzaW9uX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzICtcbiAgICBmaWxlX2V4dGVuc2lvbl9jb25zdGFudHMgK1xuICAgIGpvYl9ibG9ja19wcm9wZXJ0aWVzX2NvbnN0YW50cyArXG4gICAgbGFuZ3VhZ2VfY29kZV9jb25zdGFudHMgK1xuICAgIGxhdW5jaGluZ19leHRlcm5hbF9hcHBsaWNhdGlvbnNfY29uc3RhbnRzICtcbiAgICBsaW5rX2tpbmRfY29uc3RhbnRzICtcbiAgICBsb2NrX3R5cGVfY29uc3RhbnRzICtcbiAgICBtb25pdG9yX2Jsb2NrX3Byb3BlcnRpZXNfY29uc3RhbnRzICtcbiAgICBub3RpY2VfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIG9iamVjdF9ldmVudHNfY29uc3RhbnRzICtcbiAgICBvYmplY3RfcGFyYW1zX2NvbnN0YW50cyArXG4gICAgb3RoZXJfY29uc3RhbnRzICtcbiAgICBwcml2aWxlZ2VzX2NvbnN0YW50cyArXG4gICAgcHNldWRvcmVmZXJlbmNlX2NvZGVfY29uc3RhbnRzICtcbiAgICByZXF1aXNpdGVfSVNCQ2VydGlmaWNhdGVUeXBlX3ZhbHVlc19jb25zdGFudHMgK1xuICAgIHJlcXVpc2l0ZV9JU0JFRG9jU3RvcmFnZVR5cGVfdmFsdWVzX2NvbnN0YW50cyArXG4gICAgcmVxdWlzaXRlX2NvbXBUeXBlMl92YWx1ZXNfY29uc3RhbnRzICtcbiAgICByZXF1aXNpdGVfbmFtZV9jb25zdGFudHMgK1xuICAgIHJlc3VsdF9jb25zdGFudHMgK1xuICAgIHJ1bGVfaWRlbnRpZmljYXRpb25fY29uc3RhbnRzICtcbiAgICBzY3JpcHRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN1YnRhc2tfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN5c3RlbV9jb21wb25lbnRfY29uc3RhbnRzICtcbiAgICBzeXN0ZW1fZGlhbG9nc19jb25zdGFudHMgK1xuICAgIHN5c3RlbV9yZWZlcmVuY2VfbmFtZXNfY29uc3RhbnRzICtcbiAgICB0YWJsZV9uYW1lX2NvbnN0YW50cyArXG4gICAgdGVzdF9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9kaWFsb2dfd2luZG93c19jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9kb2N1bWVudF9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9FQV9hbmRfZW5jcnlwdGlvbl9jb25zdGFudHMgK1xuICAgIHVzaW5nX3RoZV9JU0JMX2VkaXRvcl9jb25zdGFudHMgK1xuICAgIHdhaXRfYmxvY2tfcHJvcGVydGllc19jb25zdGFudHMgK1xuICAgIHN5c3Jlc19jb21tb25fY29uc3RhbnRzO1xuXG4gIC8vIGVudW0gVEFjY291bnRUeXBlXG4gIHZhciBUQWNjb3VudFR5cGUgPSBcImF0VXNlciBhdEdyb3VwIGF0Um9sZSBcIjtcblxuICAvLyBlbnVtIFRBY3Rpb25FbmFibGVkTW9kZVxuICB2YXIgVEFjdGlvbkVuYWJsZWRNb2RlID1cbiAgICBcImFlbUVuYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRBbHdheXMgXCIgK1xuICAgIFwiYWVtRW5hYmxlZE9uQnJvd3NlIFwiICtcbiAgICBcImFlbUVuYWJsZWRPbkVkaXQgXCIgK1xuICAgIFwiYWVtRGlzYWJsZWRPbkJyb3dzZUVtcHR5IFwiO1xuXG4gIC8vIGVudW0gVEFkZFBvc2l0aW9uXG4gIHZhciBUQWRkUG9zaXRpb24gPSBcImFwQmVnaW4gYXBFbmQgXCI7XG5cbiAgLy8gZW51bSBUQWxpZ25tZW50XG4gIHZhciBUQWxpZ25tZW50ID0gXCJhbExlZnQgYWxSaWdodCBcIjtcblxuICAvLyBlbnVtIFRBcmVhU2hvd01vZGVcbiAgdmFyIFRBcmVhU2hvd01vZGUgPVxuICAgIFwiYXNtTmV2ZXIgXCIgK1xuICAgIFwiYXNtTm9CdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQXNMYXN0VGltZSBcIiArXG4gICAgXCJhc21ZZXNCdXRDdXN0b21pemUgXCIgK1xuICAgIFwiYXNtQWx3YXlzIFwiO1xuXG4gIC8vIGVudW0gVENlcnRpZmljYXRlSW52YWxpZGF0aW9uUmVhc29uXG4gIHZhciBUQ2VydGlmaWNhdGVJbnZhbGlkYXRpb25SZWFzb24gPSBcImNpckNvbW1vbiBjaXJSZXZva2VkIFwiO1xuXG4gIC8vIGVudW0gVENlcnRpZmljYXRlVHlwZVxuICB2YXIgVENlcnRpZmljYXRlVHlwZSA9IFwiY3RTaWduYXR1cmUgY3RFbmNvZGUgY3RTaWduYXR1cmVFbmNvZGUgXCI7XG5cbiAgLy8gZW51bSBUQ2hlY2tMaXN0Qm94SXRlbVN0YXRlXG4gIHZhciBUQ2hlY2tMaXN0Qm94SXRlbVN0YXRlID0gXCJjbGJVbmNoZWNrZWQgY2xiQ2hlY2tlZCBjbGJHcmF5ZWQgXCI7XG5cbiAgLy8gZW51bSBUQ2xvc2VPbkVzY1xuICB2YXIgVENsb3NlT25Fc2MgPSBcImNlSVNCIGNlQWx3YXlzIGNlTmV2ZXIgXCI7XG5cbiAgLy8gZW51bSBUQ29tcFR5cGVcbiAgdmFyIFRDb21wVHlwZSA9XG4gICAgXCJjdERvY3VtZW50IFwiICtcbiAgICBcImN0UmVmZXJlbmNlIFwiICtcbiAgICBcImN0U2NyaXB0IFwiICtcbiAgICBcImN0VW5rbm93biBcIiArXG4gICAgXCJjdFJlcG9ydCBcIiArXG4gICAgXCJjdERpYWxvZyBcIiArXG4gICAgXCJjdEZ1bmN0aW9uIFwiICtcbiAgICBcImN0Rm9sZGVyIFwiICtcbiAgICBcImN0RURvY3VtZW50IFwiICtcbiAgICBcImN0VGFzayBcIiArXG4gICAgXCJjdEpvYiBcIiArXG4gICAgXCJjdE5vdGljZSBcIiArXG4gICAgXCJjdENvbnRyb2xKb2IgXCI7XG5cbiAgLy8gZW51bSBUQ29uZGl0aW9uRm9ybWF0XG4gIHZhciBUQ29uZGl0aW9uRm9ybWF0ID0gXCJjZkludGVybmFsIGNmRGlzcGxheSBcIjtcblxuICAvLyBlbnVtIFRDb25uZWN0aW9uSW50ZW50XG4gIHZhciBUQ29ubmVjdGlvbkludGVudCA9IFwiY2lVbnNwZWNpZmllZCBjaVdyaXRlIGNpUmVhZCBcIjtcblxuICAvLyBlbnVtIFRDb250ZW50S2luZFxuICB2YXIgVENvbnRlbnRLaW5kID1cbiAgICBcImNrRm9sZGVyIFwiICtcbiAgICBcImNrRURvY3VtZW50IFwiICtcbiAgICBcImNrVGFzayBcIiArXG4gICAgXCJja0pvYiBcIiArXG4gICAgXCJja0NvbXBvbmVudFRva2VuIFwiICtcbiAgICBcImNrQW55IFwiICtcbiAgICBcImNrUmVmZXJlbmNlIFwiICtcbiAgICBcImNrU2NyaXB0IFwiICtcbiAgICBcImNrUmVwb3J0IFwiICtcbiAgICBcImNrRGlhbG9nIFwiO1xuXG4gIC8vIGVudW0gVENvbnRyb2xUeXBlXG4gIHZhciBUQ29udHJvbFR5cGUgPVxuICAgIFwiY3RJU0JMRWRpdG9yIFwiICtcbiAgICBcImN0QmV2ZWwgXCIgK1xuICAgIFwiY3RCdXR0b24gXCIgK1xuICAgIFwiY3RDaGVja0xpc3RCb3ggXCIgK1xuICAgIFwiY3RDb21ib0JveCBcIiArXG4gICAgXCJjdENvbWJvRWRpdCBcIiArXG4gICAgXCJjdEdyaWQgXCIgK1xuICAgIFwiY3REQkNoZWNrQm94IFwiICtcbiAgICBcImN0REJDb21ib0JveCBcIiArXG4gICAgXCJjdERCRWRpdCBcIiArXG4gICAgXCJjdERCRWxsaXBzaXMgXCIgK1xuICAgIFwiY3REQk1lbW8gXCIgK1xuICAgIFwiY3REQk5hdmlnYXRvciBcIiArXG4gICAgXCJjdERCUmFkaW9Hcm91cCBcIiArXG4gICAgXCJjdERCU3RhdHVzTGFiZWwgXCIgK1xuICAgIFwiY3RFZGl0IFwiICtcbiAgICBcImN0R3JvdXBCb3ggXCIgK1xuICAgIFwiY3RJbnBsYWNlSGludCBcIiArXG4gICAgXCJjdE1lbW8gXCIgK1xuICAgIFwiY3RQYW5lbCBcIiArXG4gICAgXCJjdExpc3RCb3ggXCIgK1xuICAgIFwiY3RSYWRpb0J1dHRvbiBcIiArXG4gICAgXCJjdFJpY2hFZGl0IFwiICtcbiAgICBcImN0VGFiU2hlZXQgXCIgK1xuICAgIFwiY3RXZWJCcm93c2VyIFwiICtcbiAgICBcImN0SW1hZ2UgXCIgK1xuICAgIFwiY3RIeXBlckxpbmsgXCIgK1xuICAgIFwiY3RMYWJlbCBcIiArXG4gICAgXCJjdERCTXVsdGlFbGxpcHNpcyBcIiArXG4gICAgXCJjdFJpYmJvbiBcIiArXG4gICAgXCJjdFJpY2hWaWV3IFwiICtcbiAgICBcImN0SW5uZXJQYW5lbCBcIiArXG4gICAgXCJjdFBhbmVsR3JvdXAgXCIgK1xuICAgIFwiY3RCaXRCdXR0b24gXCI7XG5cbiAgLy8gZW51bSBUQ3JpdGVyaW9uQ29udGVudFR5cGVcbiAgdmFyIFRDcml0ZXJpb25Db250ZW50VHlwZSA9XG4gICAgXCJjY3REYXRlIFwiICtcbiAgICBcImNjdEludGVnZXIgXCIgK1xuICAgIFwiY2N0TnVtZXJpYyBcIiArXG4gICAgXCJjY3RQaWNrIFwiICtcbiAgICBcImNjdFJlZmVyZW5jZSBcIiArXG4gICAgXCJjY3RTdHJpbmcgXCIgK1xuICAgIFwiY2N0VGV4dCBcIjtcblxuICAvLyBlbnVtIFRDdWx0dXJlVHlwZVxuICB2YXIgVEN1bHR1cmVUeXBlID0gXCJjbHRJbnRlcm5hbCBjbHRQcmltYXJ5IGNsdEdVSSBcIjtcblxuICAvLyBlbnVtIFREYXRhU2V0RXZlbnRUeXBlXG4gIHZhciBURGF0YVNldEV2ZW50VHlwZSA9XG4gICAgXCJkc2VCZWZvcmVPcGVuIFwiICtcbiAgICBcImRzZUFmdGVyT3BlbiBcIiArXG4gICAgXCJkc2VCZWZvcmVDbG9zZSBcIiArXG4gICAgXCJkc2VBZnRlckNsb3NlIFwiICtcbiAgICBcImRzZU9uVmFsaWREZWxldGUgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlIFwiICtcbiAgICBcImRzZUFmdGVyRGVsZXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPbkRlbGV0ZUVycm9yIFwiICtcbiAgICBcImRzZUJlZm9yZUluc2VydCBcIiArXG4gICAgXCJkc2VBZnRlckluc2VydCBcIiArXG4gICAgXCJkc2VPblZhbGlkVXBkYXRlIFwiICtcbiAgICBcImRzZUJlZm9yZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPblVwZGF0ZVJhdGlmaWVkUmVjb3JkIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlIFwiICtcbiAgICBcImRzZUFmdGVyVXBkYXRlT3V0T2ZUcmFuc2FjdGlvbiBcIiArXG4gICAgXCJkc2VPblVwZGF0ZUVycm9yIFwiICtcbiAgICBcImRzZUFmdGVyU2Nyb2xsIFwiICtcbiAgICBcImRzZU9uT3BlblJlY29yZCBcIiArXG4gICAgXCJkc2VPbkNsb3NlUmVjb3JkIFwiICtcbiAgICBcImRzZUJlZm9yZUNhbmNlbCBcIiArXG4gICAgXCJkc2VBZnRlckNhbmNlbCBcIiArXG4gICAgXCJkc2VPblVwZGF0ZURlYWRsb2NrRXJyb3IgXCIgK1xuICAgIFwiZHNlQmVmb3JlRGV0YWlsVXBkYXRlIFwiICtcbiAgICBcImRzZU9uUHJlcGFyZVVwZGF0ZSBcIiArXG4gICAgXCJkc2VPbkFueVJlcXVpc2l0ZUNoYW5nZSBcIjtcblxuICAvLyBlbnVtIFREYXRhU2V0U3RhdGVcbiAgdmFyIFREYXRhU2V0U3RhdGUgPSBcImRzc0VkaXQgZHNzSW5zZXJ0IGRzc0Jyb3dzZSBkc3NJbkFjdGl2ZSBcIjtcblxuICAvLyBlbnVtIFREYXRlRm9ybWF0VHlwZVxuICB2YXIgVERhdGVGb3JtYXRUeXBlID0gXCJkZnREYXRlIGRmdFNob3J0RGF0ZSBkZnREYXRlVGltZSBkZnRUaW1lU3RhbXAgXCI7XG5cbiAgLy8gZW51bSBURGF0ZU9mZnNldFR5cGVcbiAgdmFyIFREYXRlT2Zmc2V0VHlwZSA9IFwiZG90RGF5cyBkb3RIb3VycyBkb3RNaW51dGVzIGRvdFNlY29uZHMgXCI7XG5cbiAgLy8gZW51bSBURGF0ZVRpbWVLaW5kXG4gIHZhciBURGF0ZVRpbWVLaW5kID0gXCJkdGtuZExvY2FsIGR0a25kVVRDIFwiO1xuXG4gIC8vIGVudW0gVERlYUFjY2Vzc1JpZ2h0c1xuICB2YXIgVERlYUFjY2Vzc1JpZ2h0cyA9IFwiYXJOb25lIGFyVmlldyBhckVkaXQgYXJGdWxsIFwiO1xuXG4gIC8vIGVudW0gVERvY3VtZW50RGVmYXVsdEFjdGlvblxuICB2YXIgVERvY3VtZW50RGVmYXVsdEFjdGlvbiA9IFwiZGRhVmlldyBkZGFFZGl0IFwiO1xuXG4gIC8vIGVudW0gVEVkaXRNb2RlXG4gIHZhciBURWRpdE1vZGUgPVxuICAgIFwiZW1Mb2NrIFwiICtcbiAgICBcImVtRWRpdCBcIiArXG4gICAgXCJlbVNpZ24gXCIgK1xuICAgIFwiZW1FeHBvcnRXaXRoTG9jayBcIiArXG4gICAgXCJlbUltcG9ydFdpdGhVbmxvY2sgXCIgK1xuICAgIFwiZW1DaGFuZ2VWZXJzaW9uTm90ZSBcIiArXG4gICAgXCJlbU9wZW5Gb3JNb2RpZnkgXCIgK1xuICAgIFwiZW1DaGFuZ2VMaWZlU3RhZ2UgXCIgK1xuICAgIFwiZW1EZWxldGUgXCIgK1xuICAgIFwiZW1DcmVhdGVWZXJzaW9uIFwiICtcbiAgICBcImVtSW1wb3J0IFwiICtcbiAgICBcImVtVW5sb2NrRXhwb3J0ZWRXaXRoTG9jayBcIiArXG4gICAgXCJlbVN0YXJ0IFwiICtcbiAgICBcImVtQWJvcnQgXCIgK1xuICAgIFwiZW1SZUluaXQgXCIgK1xuICAgIFwiZW1NYXJrQXNSZWFkZWQgXCIgK1xuICAgIFwiZW1NYXJrQXNVbnJlYWRlZCBcIiArXG4gICAgXCJlbVBlcmZvcm0gXCIgK1xuICAgIFwiZW1BY2NlcHQgXCIgK1xuICAgIFwiZW1SZXN1bWUgXCIgK1xuICAgIFwiZW1DaGFuZ2VSaWdodHMgXCIgK1xuICAgIFwiZW1FZGl0Um91dGUgXCIgK1xuICAgIFwiZW1FZGl0T2JzZXJ2ZXIgXCIgK1xuICAgIFwiZW1SZWNvdmVyeUZyb21Mb2NhbENvcHkgXCIgK1xuICAgIFwiZW1DaGFuZ2VXb3JrQWNjZXNzVHlwZSBcIiArXG4gICAgXCJlbUNoYW5nZUVuY29kZVR5cGVUb0NlcnRpZmljYXRlIFwiICtcbiAgICBcImVtQ2hhbmdlRW5jb2RlVHlwZVRvUGFzc3dvcmQgXCIgK1xuICAgIFwiZW1DaGFuZ2VFbmNvZGVUeXBlVG9Ob25lIFwiICtcbiAgICBcImVtQ2hhbmdlRW5jb2RlVHlwZVRvQ2VydGlmaWNhdGVQYXNzd29yZCBcIiArXG4gICAgXCJlbUNoYW5nZVN0YW5kYXJkUm91dGUgXCIgK1xuICAgIFwiZW1HZXRUZXh0IFwiICtcbiAgICBcImVtT3BlbkZvclZpZXcgXCIgK1xuICAgIFwiZW1Nb3ZlVG9TdG9yYWdlIFwiICtcbiAgICBcImVtQ3JlYXRlT2JqZWN0IFwiICtcbiAgICBcImVtQ2hhbmdlVmVyc2lvbkhpZGRlbiBcIiArXG4gICAgXCJlbURlbGV0ZVZlcnNpb24gXCIgK1xuICAgIFwiZW1DaGFuZ2VMaWZlQ3ljbGVTdGFnZSBcIiArXG4gICAgXCJlbUFwcHJvdmluZ1NpZ24gXCIgK1xuICAgIFwiZW1FeHBvcnQgXCIgK1xuICAgIFwiZW1Db250aW51ZSBcIiArXG4gICAgXCJlbUxvY2tGcm9tRWRpdCBcIiArXG4gICAgXCJlbVVuTG9ja0ZvckVkaXQgXCIgK1xuICAgIFwiZW1Mb2NrRm9yU2VydmVyIFwiICtcbiAgICBcImVtVW5sb2NrRnJvbVNlcnZlciBcIiArXG4gICAgXCJlbURlbGVnYXRlQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcImVtUmVFbmNvZGUgXCI7XG5cbiAgLy8gZW51bSBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlXG4gIHZhciBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlID0gXCJlY290RmlsZSBlY290UHJvY2VzcyBcIjtcblxuICAvLyBlbnVtIFRFZG1zQXBwbGljYXRpb25BY3Rpb25cbiAgdmFyIFRFZG1zQXBwbGljYXRpb25BY3Rpb24gPSBcImVhR2V0IGVhQ29weSBlYUNyZWF0ZSBlYUNyZWF0ZVN0YW5kYXJkUm91dGUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50TG9ja1R5cGVcbiAgdmFyIFRFRG9jdW1lbnRMb2NrVHlwZSA9IFwiZWRsdEFsbCBlZGx0Tm90aGluZyBlZGx0UXVlcnkgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RlcFNob3dNb2RlXG4gIHZhciBURURvY3VtZW50U3RlcFNob3dNb2RlID0gXCJlc3NtVGV4dCBlc3NtQ2FyZCBcIjtcblxuICAvLyBlbnVtIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGVcbiAgdmFyIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgPSBcImVzdnRMYXN0IGVzdnRMYXN0QWN0aXZlIGVzdnRTcGVjaWZpZWQgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50U3RvcmFnZUZ1bmN0aW9uXG4gIHZhciBURURvY3VtZW50U3RvcmFnZUZ1bmN0aW9uID0gXCJlZHNmRXhlY3V0aXZlIGVkc2ZBcmNoaXZlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFN0b3JhZ2VUeXBlXG4gIHZhciBURURvY3VtZW50U3RvcmFnZVR5cGUgPSBcImVkc3RTUUxTZXJ2ZXIgZWRzdEZpbGUgXCI7XG5cbiAgLy8gZW51bSBURURvY3VtZW50VmVyc2lvblNvdXJjZVR5cGVcbiAgdmFyIFRFRG9jdW1lbnRWZXJzaW9uU291cmNlVHlwZSA9XG4gICAgXCJlZHZzdE5vbmUgZWR2c3RFRG9jdW1lbnRWZXJzaW9uQ29weSBlZHZzdEZpbGUgZWR2c3RUZW1wbGF0ZSBlZHZzdFNjYW5uZWRGaWxlIFwiO1xuXG4gIC8vIGVudW0gVEVEb2N1bWVudFZlcnNpb25TdGF0ZVxuICB2YXIgVEVEb2N1bWVudFZlcnNpb25TdGF0ZSA9IFwidnNEZWZhdWx0IHZzRGVzaWduIHZzQWN0aXZlIHZzT2Jzb2xldGUgXCI7XG5cbiAgLy8gZW51bSBURW5jb2RlVHlwZVxuICB2YXIgVEVuY29kZVR5cGUgPSBcImV0Tm9uZSBldENlcnRpZmljYXRlIGV0UGFzc3dvcmQgZXRDZXJ0aWZpY2F0ZVBhc3N3b3JkIFwiO1xuXG4gIC8vIGVudW0gVEV4Y2VwdGlvbkNhdGVnb3J5XG4gIHZhciBURXhjZXB0aW9uQ2F0ZWdvcnkgPSBcImVjRXhjZXB0aW9uIGVjV2FybmluZyBlY0luZm9ybWF0aW9uIFwiO1xuXG4gIC8vIGVudW0gVEV4cG9ydGVkU2lnbmF0dXJlc1R5cGVcbiAgdmFyIFRFeHBvcnRlZFNpZ25hdHVyZXNUeXBlID0gXCJlc3RBbGwgZXN0QXBwcm92aW5nT25seSBcIjtcblxuICAvLyBlbnVtIFRFeHBvcnRlZFZlcnNpb25UeXBlXG4gIHZhciBURXhwb3J0ZWRWZXJzaW9uVHlwZSA9IFwiZXZ0TGFzdCBldnRMYXN0QWN0aXZlIGV2dFF1ZXJ5IFwiO1xuXG4gIC8vIGVudW0gVEZpZWxkRGF0YVR5cGVcbiAgdmFyIFRGaWVsZERhdGFUeXBlID1cbiAgICBcImZkdFN0cmluZyBcIiArXG4gICAgXCJmZHROdW1lcmljIFwiICtcbiAgICBcImZkdEludGVnZXIgXCIgK1xuICAgIFwiZmR0RGF0ZSBcIiArXG4gICAgXCJmZHRUZXh0IFwiICtcbiAgICBcImZkdFVua25vd24gXCIgK1xuICAgIFwiZmR0V2lkZVN0cmluZyBcIiArXG4gICAgXCJmZHRMYXJnZUludGVnZXIgXCI7XG5cbiAgLy8gZW51bSBURm9sZGVyVHlwZVxuICB2YXIgVEZvbGRlclR5cGUgPVxuICAgIFwiZnRJbmJveCBcIiArXG4gICAgXCJmdE91dGJveCBcIiArXG4gICAgXCJmdEZhdm9yaXRlcyBcIiArXG4gICAgXCJmdENvbW1vbkZvbGRlciBcIiArXG4gICAgXCJmdFVzZXJGb2xkZXIgXCIgK1xuICAgIFwiZnRDb21wb25lbnRzIFwiICtcbiAgICBcImZ0UXVpY2tMYXVuY2ggXCIgK1xuICAgIFwiZnRTaG9ydGN1dHMgXCIgK1xuICAgIFwiZnRTZWFyY2ggXCI7XG5cbiAgLy8gZW51bSBUR3JpZFJvd0hlaWdodFxuICB2YXIgVEdyaWRSb3dIZWlnaHQgPSBcImdyaEF1dG8gXCIgKyBcImdyaFgxIFwiICsgXCJncmhYMiBcIiArIFwiZ3JoWDMgXCI7XG5cbiAgLy8gZW51bSBUSHlwZXJsaW5rVHlwZVxuICB2YXIgVEh5cGVybGlua1R5cGUgPSBcImhsdFRleHQgXCIgKyBcImhsdFJURiBcIiArIFwiaGx0SFRNTCBcIjtcblxuICAvLyBlbnVtIFRJbWFnZUZpbGVGb3JtYXRcbiAgdmFyIFRJbWFnZUZpbGVGb3JtYXQgPVxuICAgIFwiaWZmQk1QIFwiICtcbiAgICBcImlmZkpQRUcgXCIgK1xuICAgIFwiaWZmTXVsdGlQYWdlVElGRiBcIiArXG4gICAgXCJpZmZTaW5nbGVQYWdlVElGRiBcIiArXG4gICAgXCJpZmZUSUZGIFwiICtcbiAgICBcImlmZlBORyBcIjtcblxuICAvLyBlbnVtIFRJbWFnZU1vZGVcbiAgdmFyIFRJbWFnZU1vZGUgPSBcImltOGJHcmF5c2NhbGUgXCIgKyBcImltMjRiUkdCIFwiICsgXCJpbTFiTW9ub2Nocm9tZSBcIjtcblxuICAvLyBlbnVtIFRJbWFnZVR5cGVcbiAgdmFyIFRJbWFnZVR5cGUgPSBcIml0Qk1QIFwiICsgXCJpdEpQRUcgXCIgKyBcIml0V01GIFwiICsgXCJpdFBORyBcIjtcblxuICAvLyBlbnVtIFRJbnBsYWNlSGludEtpbmRcbiAgdmFyIFRJbnBsYWNlSGludEtpbmQgPVxuICAgIFwiaWtoSW5mb3JtYXRpb24gXCIgKyBcImlraFdhcm5pbmcgXCIgKyBcImlraEVycm9yIFwiICsgXCJpa2hOb0ljb24gXCI7XG5cbiAgLy8gZW51bSBUSVNCTENvbnRleHRcbiAgdmFyIFRJU0JMQ29udGV4dCA9XG4gICAgXCJpY1Vua25vd24gXCIgK1xuICAgIFwiaWNTY3JpcHQgXCIgK1xuICAgIFwiaWNGdW5jdGlvbiBcIiArXG4gICAgXCJpY0ludGVncmF0ZWRSZXBvcnQgXCIgK1xuICAgIFwiaWNBbmFseXRpY1JlcG9ydCBcIiArXG4gICAgXCJpY0RhdGFTZXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNBY3Rpb25IYW5kbGVyIFwiICtcbiAgICBcImljRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0xvb2tVcEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0JlZm9yZVNlYXJjaEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JvbGVDYWxjdWxhdGlvbiBcIiArXG4gICAgXCJpY1NlbGVjdFJvdXRlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQmxvY2tQcm9wZXJ0eUNhbGN1bGF0aW9uIFwiICtcbiAgICBcImljQmxvY2tRdWVyeVBhcmFtc0V2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0NoYW5nZVNlYXJjaFJlc3VsdEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0Jsb2NrRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljU3ViVGFza0luaXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jRGF0YVNldEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0VEb2NMb29rVXBFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNFRG9jQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0VEb2NGb3JtRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRURvY1JlcXVpc2l0ZUNoYW5nZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1N0cnVjdHVyZWRDb252ZXJzaW9uUnVsZSBcIiArXG4gICAgXCJpY1N0cnVjdHVyZWRDb252ZXJzaW9uRXZlbnRCZWZvcmUgXCIgK1xuICAgIFwiaWNTdHJ1Y3R1cmVkQ29udmVyc2lvbkV2ZW50QWZ0ZXIgXCIgK1xuICAgIFwiaWNXaXphcmRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRGaW5pc2hFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXaXphcmRTdGVwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljV2l6YXJkU3RlcEZpbmlzaEV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1dpemFyZEFjdGlvbkVuYWJsZUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1dpemFyZEFjdGlvbkV4ZWN1dGVFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNDcmVhdGVKb2JzSGFuZGxlciBcIiArXG4gICAgXCJpY0NyZWF0ZU5vdGljZXNIYW5kbGVyIFwiICtcbiAgICBcImljQmVmb3JlTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljQWZ0ZXJMb29rVXBFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNUYXNrQWJvcnRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNXb3JrZmxvd0Jsb2NrQWN0aW9uSGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ0RhdGFTZXRFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNEaWFsb2dBY3Rpb25IYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nTG9va1VwRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nUmVxdWlzaXRlQ2hhbmdlRXZlbnRIYW5kbGVyIFwiICtcbiAgICBcImljRGlhbG9nRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY0RpYWxvZ1ZhbGlkQ2xvc2VFdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNCbG9ja0Zvcm1FdmVudEhhbmRsZXIgXCIgK1xuICAgIFwiaWNUYXNrRm9ybUV2ZW50SGFuZGxlciBcIiArXG4gICAgXCJpY1JlZmVyZW5jZU1ldGhvZCBcIiArXG4gICAgXCJpY0VEb2NNZXRob2QgXCIgK1xuICAgIFwiaWNEaWFsb2dNZXRob2QgXCIgK1xuICAgIFwiaWNQcm9jZXNzTWVzc2FnZUhhbmRsZXIgXCI7XG5cbiAgLy8gZW51bSBUSXRlbVNob3dcbiAgdmFyIFRJdGVtU2hvdyA9IFwiaXNTaG93IFwiICsgXCJpc0hpZGUgXCIgKyBcImlzQnlVc2VyU2V0dGluZ3MgXCI7XG5cbiAgLy8gZW51bSBUSm9iS2luZFxuICB2YXIgVEpvYktpbmQgPSBcImprSm9iIFwiICsgXCJqa05vdGljZSBcIiArIFwiamtDb250cm9sSm9iIFwiO1xuXG4gIC8vIGVudW0gVEpvaW5UeXBlXG4gIHZhciBUSm9pblR5cGUgPSBcImp0SW5uZXIgXCIgKyBcImp0TGVmdCBcIiArIFwianRSaWdodCBcIiArIFwianRGdWxsIFwiICsgXCJqdENyb3NzIFwiO1xuXG4gIC8vIGVudW0gVExhYmVsUG9zXG4gIHZhciBUTGFiZWxQb3MgPSBcImxicEFib3ZlIFwiICsgXCJsYnBCZWxvdyBcIiArIFwibGJwTGVmdCBcIiArIFwibGJwUmlnaHQgXCI7XG5cbiAgLy8gZW51bSBUTGljZW5zaW5nVHlwZVxuICB2YXIgVExpY2Vuc2luZ1R5cGUgPSBcImVsdFBlckNvbm5lY3Rpb24gXCIgKyBcImVsdFBlclVzZXIgXCI7XG5cbiAgLy8gZW51bSBUTGlmZUN5Y2xlU3RhZ2VGb250Q29sb3JcbiAgdmFyIFRMaWZlQ3ljbGVTdGFnZUZvbnRDb2xvciA9XG4gICAgXCJzZmNVbmRlZmluZWQgXCIgK1xuICAgIFwic2ZjQmxhY2sgXCIgK1xuICAgIFwic2ZjR3JlZW4gXCIgK1xuICAgIFwic2ZjUmVkIFwiICtcbiAgICBcInNmY0JsdWUgXCIgK1xuICAgIFwic2ZjT3JhbmdlIFwiICtcbiAgICBcInNmY0xpbGFjIFwiO1xuXG4gIC8vIGVudW0gVExpZmVDeWNsZVN0YWdlRm9udFN0eWxlXG4gIHZhciBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgPSBcInNmc0l0YWxpYyBcIiArIFwic2ZzU3RyaWtlb3V0IFwiICsgXCJzZnNOb3JtYWwgXCI7XG5cbiAgLy8gZW51bSBUTG9ja2FibGVEZXZlbG9wbWVudENvbXBvbmVudFR5cGVcbiAgdmFyIFRMb2NrYWJsZURldmVsb3BtZW50Q29tcG9uZW50VHlwZSA9XG4gICAgXCJsZGN0U3RhbmRhcmRSb3V0ZSBcIiArXG4gICAgXCJsZGN0V2l6YXJkIFwiICtcbiAgICBcImxkY3RTY3JpcHQgXCIgK1xuICAgIFwibGRjdEZ1bmN0aW9uIFwiICtcbiAgICBcImxkY3RSb3V0ZUJsb2NrIFwiICtcbiAgICBcImxkY3RJbnRlZ3JhdGVkUmVwb3J0IFwiICtcbiAgICBcImxkY3RBbmFseXRpY1JlcG9ydCBcIiArXG4gICAgXCJsZGN0UmVmZXJlbmNlVHlwZSBcIiArXG4gICAgXCJsZGN0RURvY3VtZW50VHlwZSBcIiArXG4gICAgXCJsZGN0RGlhbG9nIFwiICtcbiAgICBcImxkY3RTZXJ2ZXJFdmVudHMgXCI7XG5cbiAgLy8gZW51bSBUTWF4UmVjb3JkQ291bnRSZXN0cmljdGlvblR5cGVcbiAgdmFyIFRNYXhSZWNvcmRDb3VudFJlc3RyaWN0aW9uVHlwZSA9XG4gICAgXCJtcmNydE5vbmUgXCIgKyBcIm1yY3J0VXNlciBcIiArIFwibXJjcnRNYXhpbWFsIFwiICsgXCJtcmNydEN1c3RvbSBcIjtcblxuICAvLyBlbnVtIFRSYW5nZVZhbHVlVHlwZVxuICB2YXIgVFJhbmdlVmFsdWVUeXBlID1cbiAgICBcInZ0RXF1YWwgXCIgKyBcInZ0R3JlYXRlck9yRXF1YWwgXCIgKyBcInZ0TGVzc09yRXF1YWwgXCIgKyBcInZ0UmFuZ2UgXCI7XG5cbiAgLy8gZW51bSBUUmVsYXRpdmVEYXRlXG4gIHZhciBUUmVsYXRpdmVEYXRlID1cbiAgICBcInJkWWVzdGVyZGF5IFwiICtcbiAgICBcInJkVG9kYXkgXCIgK1xuICAgIFwicmRUb21vcnJvdyBcIiArXG4gICAgXCJyZFRoaXNXZWVrIFwiICtcbiAgICBcInJkVGhpc01vbnRoIFwiICtcbiAgICBcInJkVGhpc1llYXIgXCIgK1xuICAgIFwicmROZXh0TW9udGggXCIgK1xuICAgIFwicmROZXh0V2VlayBcIiArXG4gICAgXCJyZExhc3RXZWVrIFwiICtcbiAgICBcInJkTGFzdE1vbnRoIFwiO1xuXG4gIC8vIGVudW0gVFJlcG9ydERlc3RpbmF0aW9uXG4gIHZhciBUUmVwb3J0RGVzdGluYXRpb24gPSBcInJkV2luZG93IFwiICsgXCJyZEZpbGUgXCIgKyBcInJkUHJpbnRlciBcIjtcblxuICAvLyBlbnVtIFRSZXFEYXRhVHlwZVxuICB2YXIgVFJlcURhdGFUeXBlID1cbiAgICBcInJkdFN0cmluZyBcIiArXG4gICAgXCJyZHROdW1lcmljIFwiICtcbiAgICBcInJkdEludGVnZXIgXCIgK1xuICAgIFwicmR0RGF0ZSBcIiArXG4gICAgXCJyZHRSZWZlcmVuY2UgXCIgK1xuICAgIFwicmR0QWNjb3VudCBcIiArXG4gICAgXCJyZHRUZXh0IFwiICtcbiAgICBcInJkdFBpY2sgXCIgK1xuICAgIFwicmR0VW5rbm93biBcIiArXG4gICAgXCJyZHRMYXJnZUludGVnZXIgXCIgK1xuICAgIFwicmR0RG9jdW1lbnQgXCI7XG5cbiAgLy8gZW51bSBUUmVxdWlzaXRlRXZlbnRUeXBlXG4gIHZhciBUUmVxdWlzaXRlRXZlbnRUeXBlID0gXCJyZU9uQ2hhbmdlIFwiICsgXCJyZU9uQ2hhbmdlVmFsdWVzIFwiO1xuXG4gIC8vIGVudW0gVFNCVGltZVR5cGVcbiAgdmFyIFRTQlRpbWVUeXBlID0gXCJ0dEdsb2JhbCBcIiArIFwidHRMb2NhbCBcIiArIFwidHRVc2VyIFwiICsgXCJ0dFN5c3RlbSBcIjtcblxuICAvLyBlbnVtIFRTZWFyY2hTaG93TW9kZVxuICB2YXIgVFNlYXJjaFNob3dNb2RlID1cbiAgICBcInNzbUJyb3dzZSBcIiArIFwic3NtU2VsZWN0IFwiICsgXCJzc21NdWx0aVNlbGVjdCBcIiArIFwic3NtQnJvd3NlTW9kYWwgXCI7XG5cbiAgLy8gZW51bSBUU2VsZWN0TW9kZVxuICB2YXIgVFNlbGVjdE1vZGUgPSBcInNtU2VsZWN0IFwiICsgXCJzbUxpa2UgXCIgKyBcInNtQ2FyZCBcIjtcblxuICAvLyBlbnVtIFRTaWduYXR1cmVUeXBlXG4gIHZhciBUU2lnbmF0dXJlVHlwZSA9IFwic3ROb25lIFwiICsgXCJzdEF1dGhlbnRpY2F0aW5nIFwiICsgXCJzdEFwcHJvdmluZyBcIjtcblxuICAvLyBlbnVtIFRTaWduZXJDb250ZW50VHlwZVxuICB2YXIgVFNpZ25lckNvbnRlbnRUeXBlID0gXCJzY3RTdHJpbmcgXCIgKyBcInNjdFN0cmVhbSBcIjtcblxuICAvLyBlbnVtIFRTdHJpbmdzU29ydFR5cGVcbiAgdmFyIFRTdHJpbmdzU29ydFR5cGUgPSBcInNzdEFuc2lTb3J0IFwiICsgXCJzc3ROYXR1cmFsU29ydCBcIjtcblxuICAvLyBlbnVtIFRTdHJpbmdWYWx1ZVR5cGVcbiAgdmFyIFRTdHJpbmdWYWx1ZVR5cGUgPSBcInN2dEVxdWFsIFwiICsgXCJzdnRDb250YWluIFwiO1xuXG4gIC8vIGVudW0gVFN0cnVjdHVyZWRPYmplY3RBdHRyaWJ1dGVUeXBlXG4gIHZhciBUU3RydWN0dXJlZE9iamVjdEF0dHJpYnV0ZVR5cGUgPVxuICAgIFwic29hdFN0cmluZyBcIiArXG4gICAgXCJzb2F0TnVtZXJpYyBcIiArXG4gICAgXCJzb2F0SW50ZWdlciBcIiArXG4gICAgXCJzb2F0RGF0ZXRpbWUgXCIgK1xuICAgIFwic29hdFJlZmVyZW5jZVJlY29yZCBcIiArXG4gICAgXCJzb2F0VGV4dCBcIiArXG4gICAgXCJzb2F0UGljayBcIiArXG4gICAgXCJzb2F0Qm9vbGVhbiBcIiArXG4gICAgXCJzb2F0RURvY3VtZW50IFwiICtcbiAgICBcInNvYXRBY2NvdW50IFwiICtcbiAgICBcInNvYXRJbnRlZ2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0TnVtZXJpY0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFN0cmluZ0NvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdFBpY2tDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXREYXRldGltZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwic29hdEJvb2xlYW5Db2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRSZWZlcmVuY2VSZWNvcmRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRFRG9jdW1lbnRDb2xsZWN0aW9uIFwiICtcbiAgICBcInNvYXRBY2NvdW50Q29sbGVjdGlvbiBcIiArXG4gICAgXCJzb2F0Q29udGVudHMgXCIgK1xuICAgIFwic29hdFVua25vd24gXCI7XG5cbiAgLy8gZW51bSBUVGFza0Fib3J0UmVhc29uXG4gIHZhciBUVGFza0Fib3J0UmVhc29uID0gXCJ0YXJBYm9ydEJ5VXNlciBcIiArIFwidGFyQWJvcnRCeVdvcmtmbG93RXhjZXB0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFRleHRWYWx1ZVR5cGVcbiAgdmFyIFRUZXh0VmFsdWVUeXBlID0gXCJ0dnRBbGxXb3JkcyBcIiArIFwidHZ0RXhhY3RQaHJhc2UgXCIgKyBcInR2dEFueVdvcmQgXCI7XG5cbiAgLy8gZW51bSBUVXNlck9iamVjdFN0YXR1c1xuICB2YXIgVFVzZXJPYmplY3RTdGF0dXMgPVxuICAgIFwidXNOb25lIFwiICtcbiAgICBcInVzQ29tcGxldGVkIFwiICtcbiAgICBcInVzUmVkU3F1YXJlIFwiICtcbiAgICBcInVzQmx1ZVNxdWFyZSBcIiArXG4gICAgXCJ1c1llbGxvd1NxdWFyZSBcIiArXG4gICAgXCJ1c0dyZWVuU3F1YXJlIFwiICtcbiAgICBcInVzT3JhbmdlU3F1YXJlIFwiICtcbiAgICBcInVzUHVycGxlU3F1YXJlIFwiICtcbiAgICBcInVzRm9sbG93VXAgXCI7XG5cbiAgLy8gZW51bSBUVXNlclR5cGVcbiAgdmFyIFRVc2VyVHlwZSA9XG4gICAgXCJ1dFVua25vd24gXCIgK1xuICAgIFwidXRVc2VyIFwiICtcbiAgICBcInV0RGV2ZWxvcGVyIFwiICtcbiAgICBcInV0QWRtaW5pc3RyYXRvciBcIiArXG4gICAgXCJ1dFN5c3RlbURldmVsb3BlciBcIiArXG4gICAgXCJ1dERpc2Nvbm5lY3RlZCBcIjtcblxuICAvLyBlbnVtIFRWYWx1ZXNCdWlsZFR5cGVcbiAgdmFyIFRWYWx1ZXNCdWlsZFR5cGUgPVxuICAgIFwiYnRBbmQgXCIgKyBcImJ0RGV0YWlsQW5kIFwiICsgXCJidE9yIFwiICsgXCJidE5vdE9yIFwiICsgXCJidE9ubHkgXCI7XG5cbiAgLy8gZW51bSBUVmlld01vZGVcbiAgdmFyIFRWaWV3TW9kZSA9IFwidm1WaWV3IFwiICsgXCJ2bVNlbGVjdCBcIiArIFwidm1OYXZpZ2F0aW9uIFwiO1xuXG4gIC8vIGVudW0gVFZpZXdTZWxlY3Rpb25Nb2RlXG4gIHZhciBUVmlld1NlbGVjdGlvbk1vZGUgPVxuICAgIFwidnNtU2luZ2xlIFwiICsgXCJ2c21NdWx0aXBsZSBcIiArIFwidnNtTXVsdGlwbGVDaGVjayBcIiArIFwidnNtTm9TZWxlY3Rpb24gXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkQWN0aW9uVHlwZVxuICB2YXIgVFdpemFyZEFjdGlvblR5cGUgPVxuICAgIFwid2ZhdFByZXZpb3VzIFwiICsgXCJ3ZmF0TmV4dCBcIiArIFwid2ZhdENhbmNlbCBcIiArIFwid2ZhdEZpbmlzaCBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRGb3JtRWxlbWVudFByb3BlcnR5XG4gIHZhciBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSA9XG4gICAgXCJ3ZmVwVW5kZWZpbmVkIFwiICtcbiAgICBcIndmZXBUZXh0MyBcIiArXG4gICAgXCJ3ZmVwVGV4dDYgXCIgK1xuICAgIFwid2ZlcFRleHQ5IFwiICtcbiAgICBcIndmZXBTcGluRWRpdCBcIiArXG4gICAgXCJ3ZmVwRHJvcERvd24gXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXAgXCIgK1xuICAgIFwid2ZlcEZsYWcgXCIgK1xuICAgIFwid2ZlcFRleHQxMiBcIiArXG4gICAgXCJ3ZmVwVGV4dDE1IFwiICtcbiAgICBcIndmZXBUZXh0MTggXCIgK1xuICAgIFwid2ZlcFRleHQyMSBcIiArXG4gICAgXCJ3ZmVwVGV4dDI0IFwiICtcbiAgICBcIndmZXBUZXh0MjcgXCIgK1xuICAgIFwid2ZlcFRleHQzMCBcIiArXG4gICAgXCJ3ZmVwUmFkaW9Hcm91cENvbHVtbjEgXCIgK1xuICAgIFwid2ZlcFJhZGlvR3JvdXBDb2x1bW4yIFwiICtcbiAgICBcIndmZXBSYWRpb0dyb3VwQ29sdW1uMyBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRGb3JtRWxlbWVudFR5cGVcbiAgdmFyIFRXaXphcmRGb3JtRWxlbWVudFR5cGUgPVxuICAgIFwid2ZldFF1ZXJ5UGFyYW1ldGVyIFwiICsgXCJ3ZmV0VGV4dCBcIiArIFwid2ZldERlbGltaXRlciBcIiArIFwid2ZldExhYmVsIFwiO1xuXG4gIC8vIGVudW0gVFdpemFyZFBhcmFtVHlwZVxuICB2YXIgVFdpemFyZFBhcmFtVHlwZSA9XG4gICAgXCJ3cHRTdHJpbmcgXCIgK1xuICAgIFwid3B0SW50ZWdlciBcIiArXG4gICAgXCJ3cHROdW1lcmljIFwiICtcbiAgICBcIndwdEJvb2xlYW4gXCIgK1xuICAgIFwid3B0RGF0ZVRpbWUgXCIgK1xuICAgIFwid3B0UGljayBcIiArXG4gICAgXCJ3cHRUZXh0IFwiICtcbiAgICBcIndwdFVzZXIgXCIgK1xuICAgIFwid3B0VXNlckxpc3QgXCIgK1xuICAgIFwid3B0RURvY3VtZW50SW5mbyBcIiArXG4gICAgXCJ3cHRFRG9jdW1lbnRJbmZvTGlzdCBcIiArXG4gICAgXCJ3cHRSZWZlcmVuY2VSZWNvcmRJbmZvIFwiICtcbiAgICBcIndwdFJlZmVyZW5jZVJlY29yZEluZm9MaXN0IFwiICtcbiAgICBcIndwdEZvbGRlckluZm8gXCIgK1xuICAgIFwid3B0VGFza0luZm8gXCIgK1xuICAgIFwid3B0Q29udGVudHMgXCIgK1xuICAgIFwid3B0RmlsZU5hbWUgXCIgK1xuICAgIFwid3B0RGF0ZSBcIjtcblxuICAvLyBlbnVtIFRXaXphcmRTdGVwUmVzdWx0XG4gIHZhciBUV2l6YXJkU3RlcFJlc3VsdCA9XG4gICAgXCJ3c3JDb21wbGV0ZSBcIiArXG4gICAgXCJ3c3JHb05leHQgXCIgK1xuICAgIFwid3NyR29QcmV2aW91cyBcIiArXG4gICAgXCJ3c3JDdXN0b20gXCIgK1xuICAgIFwid3NyQ2FuY2VsIFwiICtcbiAgICBcIndzckdvRmluYWwgXCI7XG5cbiAgLy8gZW51bSBUV2l6YXJkU3RlcFR5cGVcbiAgdmFyIFRXaXphcmRTdGVwVHlwZSA9XG4gICAgXCJ3c3RGb3JtIFwiICtcbiAgICBcIndzdEVEb2N1bWVudCBcIiArXG4gICAgXCJ3c3RUYXNrQ2FyZCBcIiArXG4gICAgXCJ3c3RSZWZlcmVuY2VSZWNvcmRDYXJkIFwiICtcbiAgICBcIndzdEZpbmFsIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtBY2Nlc3NUeXBlXG4gIHZhciBUV29ya0FjY2Vzc1R5cGUgPSBcIndhQWxsIFwiICsgXCJ3YVBlcmZvcm1lcnMgXCIgKyBcIndhTWFudWFsIFwiO1xuXG4gIC8vIGVudW0gVFdvcmtmbG93QmxvY2tUeXBlXG4gIHZhciBUV29ya2Zsb3dCbG9ja1R5cGUgPVxuICAgIFwid3NiU3RhcnQgXCIgK1xuICAgIFwid3NiRmluaXNoIFwiICtcbiAgICBcIndzYk5vdGljZSBcIiArXG4gICAgXCJ3c2JTdGVwIFwiICtcbiAgICBcIndzYkRlY2lzaW9uIFwiICtcbiAgICBcIndzYldhaXQgXCIgK1xuICAgIFwid3NiTW9uaXRvciBcIiArXG4gICAgXCJ3c2JTY3JpcHQgXCIgK1xuICAgIFwid3NiQ29ubmVjdG9yIFwiICtcbiAgICBcIndzYlN1YlRhc2sgXCIgK1xuICAgIFwid3NiTGlmZUN5Y2xlU3RhZ2UgXCIgK1xuICAgIFwid3NiUGF1c2UgXCI7XG5cbiAgLy8gZW51bSBUV29ya2Zsb3dEYXRhVHlwZVxuICB2YXIgVFdvcmtmbG93RGF0YVR5cGUgPVxuICAgIFwid2R0SW50ZWdlciBcIiArXG4gICAgXCJ3ZHRGbG9hdCBcIiArXG4gICAgXCJ3ZHRTdHJpbmcgXCIgK1xuICAgIFwid2R0UGljayBcIiArXG4gICAgXCJ3ZHREYXRlVGltZSBcIiArXG4gICAgXCJ3ZHRCb29sZWFuIFwiICtcbiAgICBcIndkdFRhc2sgXCIgK1xuICAgIFwid2R0Sm9iIFwiICtcbiAgICBcIndkdEZvbGRlciBcIiArXG4gICAgXCJ3ZHRFRG9jdW1lbnQgXCIgK1xuICAgIFwid2R0UmVmZXJlbmNlUmVjb3JkIFwiICtcbiAgICBcIndkdFVzZXIgXCIgK1xuICAgIFwid2R0R3JvdXAgXCIgK1xuICAgIFwid2R0Um9sZSBcIiArXG4gICAgXCJ3ZHRJbnRlZ2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRGbG9hdENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0U3RyaW5nQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRQaWNrQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHREYXRlVGltZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Qm9vbGVhbkNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0VGFza0NvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Sm9iQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRGb2xkZXJDb2xsZWN0aW9uIFwiICtcbiAgICBcIndkdEVEb2N1bWVudENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0UmVmZXJlbmNlUmVjb3JkQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRVc2VyQ29sbGVjdGlvbiBcIiArXG4gICAgXCJ3ZHRHcm91cENvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Um9sZUNvbGxlY3Rpb24gXCIgK1xuICAgIFwid2R0Q29udGVudHMgXCIgK1xuICAgIFwid2R0VXNlckxpc3QgXCIgK1xuICAgIFwid2R0U2VhcmNoRGVzY3JpcHRpb24gXCIgK1xuICAgIFwid2R0RGVhZExpbmUgXCIgK1xuICAgIFwid2R0UGlja1NldCBcIiArXG4gICAgXCJ3ZHRBY2NvdW50Q29sbGVjdGlvbiBcIjtcblxuICAvLyBlbnVtIFRXb3JrSW1wb3J0YW5jZVxuICB2YXIgVFdvcmtJbXBvcnRhbmNlID0gXCJ3aUxvdyBcIiArIFwid2lOb3JtYWwgXCIgKyBcIndpSGlnaCBcIjtcblxuICAvLyBlbnVtIFRXb3JrUm91dGVUeXBlXG4gIHZhciBUV29ya1JvdXRlVHlwZSA9IFwid3J0U29mdCBcIiArIFwid3J0SGFyZCBcIjtcblxuICAvLyBlbnVtIFRXb3JrU3RhdGVcbiAgdmFyIFRXb3JrU3RhdGUgPVxuICAgIFwid3NJbml0IFwiICtcbiAgICBcIndzUnVubmluZyBcIiArXG4gICAgXCJ3c0RvbmUgXCIgK1xuICAgIFwid3NDb250cm9sbGVkIFwiICtcbiAgICBcIndzQWJvcnRlZCBcIiArXG4gICAgXCJ3c0NvbnRpbnVlZCBcIjtcblxuICAvLyBlbnVtIFRXb3JrVGV4dEJ1aWxkaW5nTW9kZVxuICB2YXIgVFdvcmtUZXh0QnVpbGRpbmdNb2RlID1cbiAgICBcInd0bUZ1bGwgXCIgKyBcInd0bUZyb21DdXJyZW50IFwiICsgXCJ3dG1Pbmx5Q3VycmVudCBcIjtcblxuICAvLyDQn9C10YDQtdGH0LjRgdC70LXQvdC40Y9cbiAgdmFyIEVOVU1TID1cbiAgICBUQWNjb3VudFR5cGUgK1xuICAgIFRBY3Rpb25FbmFibGVkTW9kZSArXG4gICAgVEFkZFBvc2l0aW9uICtcbiAgICBUQWxpZ25tZW50ICtcbiAgICBUQXJlYVNob3dNb2RlICtcbiAgICBUQ2VydGlmaWNhdGVJbnZhbGlkYXRpb25SZWFzb24gK1xuICAgIFRDZXJ0aWZpY2F0ZVR5cGUgK1xuICAgIFRDaGVja0xpc3RCb3hJdGVtU3RhdGUgK1xuICAgIFRDbG9zZU9uRXNjICtcbiAgICBUQ29tcFR5cGUgK1xuICAgIFRDb25kaXRpb25Gb3JtYXQgK1xuICAgIFRDb25uZWN0aW9uSW50ZW50ICtcbiAgICBUQ29udGVudEtpbmQgK1xuICAgIFRDb250cm9sVHlwZSArXG4gICAgVENyaXRlcmlvbkNvbnRlbnRUeXBlICtcbiAgICBUQ3VsdHVyZVR5cGUgK1xuICAgIFREYXRhU2V0RXZlbnRUeXBlICtcbiAgICBURGF0YVNldFN0YXRlICtcbiAgICBURGF0ZUZvcm1hdFR5cGUgK1xuICAgIFREYXRlT2Zmc2V0VHlwZSArXG4gICAgVERhdGVUaW1lS2luZCArXG4gICAgVERlYUFjY2Vzc1JpZ2h0cyArXG4gICAgVERvY3VtZW50RGVmYXVsdEFjdGlvbiArXG4gICAgVEVkaXRNb2RlICtcbiAgICBURWRpdG9yQ2xvc2VPYnNlcnZUeXBlICtcbiAgICBURWRtc0FwcGxpY2F0aW9uQWN0aW9uICtcbiAgICBURURvY3VtZW50TG9ja1R5cGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwU2hvd01vZGUgK1xuICAgIFRFRG9jdW1lbnRTdGVwVmVyc2lvblR5cGUgK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlRnVuY3Rpb24gK1xuICAgIFRFRG9jdW1lbnRTdG9yYWdlVHlwZSArXG4gICAgVEVEb2N1bWVudFZlcnNpb25Tb3VyY2VUeXBlICtcbiAgICBURURvY3VtZW50VmVyc2lvblN0YXRlICtcbiAgICBURW5jb2RlVHlwZSArXG4gICAgVEV4Y2VwdGlvbkNhdGVnb3J5ICtcbiAgICBURXhwb3J0ZWRTaWduYXR1cmVzVHlwZSArXG4gICAgVEV4cG9ydGVkVmVyc2lvblR5cGUgK1xuICAgIFRGaWVsZERhdGFUeXBlICtcbiAgICBURm9sZGVyVHlwZSArXG4gICAgVEdyaWRSb3dIZWlnaHQgK1xuICAgIFRIeXBlcmxpbmtUeXBlICtcbiAgICBUSW1hZ2VGaWxlRm9ybWF0ICtcbiAgICBUSW1hZ2VNb2RlICtcbiAgICBUSW1hZ2VUeXBlICtcbiAgICBUSW5wbGFjZUhpbnRLaW5kICtcbiAgICBUSVNCTENvbnRleHQgK1xuICAgIFRJdGVtU2hvdyArXG4gICAgVEpvYktpbmQgK1xuICAgIFRKb2luVHlwZSArXG4gICAgVExhYmVsUG9zICtcbiAgICBUTGljZW5zaW5nVHlwZSArXG4gICAgVExpZmVDeWNsZVN0YWdlRm9udENvbG9yICtcbiAgICBUTGlmZUN5Y2xlU3RhZ2VGb250U3R5bGUgK1xuICAgIFRMb2NrYWJsZURldmVsb3BtZW50Q29tcG9uZW50VHlwZSArXG4gICAgVE1heFJlY29yZENvdW50UmVzdHJpY3Rpb25UeXBlICtcbiAgICBUUmFuZ2VWYWx1ZVR5cGUgK1xuICAgIFRSZWxhdGl2ZURhdGUgK1xuICAgIFRSZXBvcnREZXN0aW5hdGlvbiArXG4gICAgVFJlcURhdGFUeXBlICtcbiAgICBUUmVxdWlzaXRlRXZlbnRUeXBlICtcbiAgICBUU0JUaW1lVHlwZSArXG4gICAgVFNlYXJjaFNob3dNb2RlICtcbiAgICBUU2VsZWN0TW9kZSArXG4gICAgVFNpZ25hdHVyZVR5cGUgK1xuICAgIFRTaWduZXJDb250ZW50VHlwZSArXG4gICAgVFN0cmluZ3NTb3J0VHlwZSArXG4gICAgVFN0cmluZ1ZhbHVlVHlwZSArXG4gICAgVFN0cnVjdHVyZWRPYmplY3RBdHRyaWJ1dGVUeXBlICtcbiAgICBUVGFza0Fib3J0UmVhc29uICtcbiAgICBUVGV4dFZhbHVlVHlwZSArXG4gICAgVFVzZXJPYmplY3RTdGF0dXMgK1xuICAgIFRVc2VyVHlwZSArXG4gICAgVFZhbHVlc0J1aWxkVHlwZSArXG4gICAgVFZpZXdNb2RlICtcbiAgICBUVmlld1NlbGVjdGlvbk1vZGUgK1xuICAgIFRXaXphcmRBY3Rpb25UeXBlICtcbiAgICBUV2l6YXJkRm9ybUVsZW1lbnRQcm9wZXJ0eSArXG4gICAgVFdpemFyZEZvcm1FbGVtZW50VHlwZSArXG4gICAgVFdpemFyZFBhcmFtVHlwZSArXG4gICAgVFdpemFyZFN0ZXBSZXN1bHQgK1xuICAgIFRXaXphcmRTdGVwVHlwZSArXG4gICAgVFdvcmtBY2Nlc3NUeXBlICtcbiAgICBUV29ya2Zsb3dCbG9ja1R5cGUgK1xuICAgIFRXb3JrZmxvd0RhdGFUeXBlICtcbiAgICBUV29ya0ltcG9ydGFuY2UgK1xuICAgIFRXb3JrUm91dGVUeXBlICtcbiAgICBUV29ya1N0YXRlICtcbiAgICBUV29ya1RleHRCdWlsZGluZ01vZGU7XG5cbiAgLy8g0KHQuNGB0YLQtdC80L3Ri9C1INGE0YPQvdC60YbQuNC4ID09PiBTWVNGVU5DVElPTlNcbiAgdmFyIHN5c3RlbV9mdW5jdGlvbnMgPVxuICAgIFwiQWRkU3ViU3RyaW5nIFwiICtcbiAgICBcIkFkanVzdExpbmVCcmVha3MgXCIgK1xuICAgIFwiQW1vdW50SW5Xb3JkcyBcIiArXG4gICAgXCJBbmFseXNpcyBcIiArXG4gICAgXCJBcnJheURpbUNvdW50IFwiICtcbiAgICBcIkFycmF5SGlnaEJvdW5kIFwiICtcbiAgICBcIkFycmF5TG93Qm91bmQgXCIgK1xuICAgIFwiQXJyYXlPZiBcIiArXG4gICAgXCJBcnJheVJlRGltIFwiICtcbiAgICBcIkFzc2VydCBcIiArXG4gICAgXCJBc3NpZ25lZCBcIiArXG4gICAgXCJCZWdpbk9mTW9udGggXCIgK1xuICAgIFwiQmVnaW5PZlBlcmlvZCBcIiArXG4gICAgXCJCdWlsZFByb2ZpbGluZ09wZXJhdGlvbkFuYWx5c2lzIFwiICtcbiAgICBcIkNhbGxQcm9jZWR1cmUgXCIgK1xuICAgIFwiQ2FuUmVhZEZpbGUgXCIgK1xuICAgIFwiQ0FycmF5RWxlbWVudCBcIiArXG4gICAgXCJDRGF0YVNldFJlcXVpc2l0ZSBcIiArXG4gICAgXCJDaGFuZ2VEYXRlIFwiICtcbiAgICBcIkNoYW5nZVJlZmVyZW5jZURhdGFzZXQgXCIgK1xuICAgIFwiQ2hhciBcIiArXG4gICAgXCJDaGFyUG9zIFwiICtcbiAgICBcIkNoZWNrUGFyYW0gXCIgK1xuICAgIFwiQ2hlY2tQYXJhbVZhbHVlIFwiICtcbiAgICBcIkNvbXBhcmVTdHJpbmdzIFwiICtcbiAgICBcIkNvbnN0YW50RXhpc3RzIFwiICtcbiAgICBcIkNvbnRyb2xTdGF0ZSBcIiArXG4gICAgXCJDb252ZXJ0RGF0ZVN0ciBcIiArXG4gICAgXCJDb3B5IFwiICtcbiAgICBcIkNvcHlGaWxlIFwiICtcbiAgICBcIkNyZWF0ZUFycmF5IFwiICtcbiAgICBcIkNyZWF0ZUNhY2hlZFJlZmVyZW5jZSBcIiArXG4gICAgXCJDcmVhdGVDb25uZWN0aW9uIFwiICtcbiAgICBcIkNyZWF0ZURpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVEdWFsTGlzdERpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVFZGl0b3IgXCIgK1xuICAgIFwiQ3JlYXRlRXhjZXB0aW9uIFwiICtcbiAgICBcIkNyZWF0ZUZpbGUgXCIgK1xuICAgIFwiQ3JlYXRlRm9sZGVyRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUlucHV0RGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZUxpbmtGaWxlIFwiICtcbiAgICBcIkNyZWF0ZUxpc3QgXCIgK1xuICAgIFwiQ3JlYXRlTG9jayBcIiArXG4gICAgXCJDcmVhdGVNZW1vcnlEYXRhU2V0IFwiICtcbiAgICBcIkNyZWF0ZU9iamVjdCBcIiArXG4gICAgXCJDcmVhdGVPcGVuRGlhbG9nIFwiICtcbiAgICBcIkNyZWF0ZVByb2dyZXNzIFwiICtcbiAgICBcIkNyZWF0ZVF1ZXJ5IFwiICtcbiAgICBcIkNyZWF0ZVJlZmVyZW5jZSBcIiArXG4gICAgXCJDcmVhdGVSZXBvcnQgXCIgK1xuICAgIFwiQ3JlYXRlU2F2ZURpYWxvZyBcIiArXG4gICAgXCJDcmVhdGVTY3JpcHQgXCIgK1xuICAgIFwiQ3JlYXRlU1FMUGl2b3RGdW5jdGlvbiBcIiArXG4gICAgXCJDcmVhdGVTdHJpbmdMaXN0IFwiICtcbiAgICBcIkNyZWF0ZVRyZWVMaXN0U2VsZWN0RGlhbG9nIFwiICtcbiAgICBcIkNTZWxlY3RTUUwgXCIgK1xuICAgIFwiQ1NRTCBcIiArXG4gICAgXCJDU3ViU3RyaW5nIFwiICtcbiAgICBcIkN1cnJlbnRVc2VySUQgXCIgK1xuICAgIFwiQ3VycmVudFVzZXJOYW1lIFwiICtcbiAgICBcIkN1cnJlbnRWZXJzaW9uIFwiICtcbiAgICBcIkRhdGFTZXRMb2NhdGVFeCBcIiArXG4gICAgXCJEYXRlRGlmZiBcIiArXG4gICAgXCJEYXRlVGltZURpZmYgXCIgK1xuICAgIFwiRGF0ZVRvU3RyIFwiICtcbiAgICBcIkRheU9mV2VlayBcIiArXG4gICAgXCJEZWxldGVGaWxlIFwiICtcbiAgICBcIkRpcmVjdG9yeUV4aXN0cyBcIiArXG4gICAgXCJEaXNhYmxlQ2hlY2tBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiRGlzYWJsZUNoZWNrRnVsbFNob3dpbmdSZXN0cmljdGlvbiBcIiArXG4gICAgXCJEaXNhYmxlTWFzc1Rhc2tTZW5kaW5nUmVzdHJpY3Rpb25zIFwiICtcbiAgICBcIkRyb3BUYWJsZSBcIiArXG4gICAgXCJEdXBlU3RyaW5nIFwiICtcbiAgICBcIkVkaXRUZXh0IFwiICtcbiAgICBcIkVuYWJsZUNoZWNrQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIkVuYWJsZUNoZWNrRnVsbFNob3dpbmdSZXN0cmljdGlvbiBcIiArXG4gICAgXCJFbmFibGVNYXNzVGFza1NlbmRpbmdSZXN0cmljdGlvbnMgXCIgK1xuICAgIFwiRW5kT2ZNb250aCBcIiArXG4gICAgXCJFbmRPZlBlcmlvZCBcIiArXG4gICAgXCJFeGNlcHRpb25FeGlzdHMgXCIgK1xuICAgIFwiRXhjZXB0aW9uc09mZiBcIiArXG4gICAgXCJFeGNlcHRpb25zT24gXCIgK1xuICAgIFwiRXhlY3V0ZSBcIiArXG4gICAgXCJFeGVjdXRlUHJvY2VzcyBcIiArXG4gICAgXCJFeGl0IFwiICtcbiAgICBcIkV4cGFuZEVudmlyb25tZW50VmFyaWFibGVzIFwiICtcbiAgICBcIkV4dHJhY3RGaWxlRHJpdmUgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVFeHQgXCIgK1xuICAgIFwiRXh0cmFjdEZpbGVOYW1lIFwiICtcbiAgICBcIkV4dHJhY3RGaWxlUGF0aCBcIiArXG4gICAgXCJFeHRyYWN0UGFyYW1zIFwiICtcbiAgICBcIkZpbGVFeGlzdHMgXCIgK1xuICAgIFwiRmlsZVNpemUgXCIgK1xuICAgIFwiRmluZEZpbGUgXCIgK1xuICAgIFwiRmluZFN1YlN0cmluZyBcIiArXG4gICAgXCJGaXJtQ29udGV4dCBcIiArXG4gICAgXCJGb3JjZURpcmVjdG9yaWVzIFwiICtcbiAgICBcIkZvcm1hdCBcIiArXG4gICAgXCJGb3JtYXREYXRlIFwiICtcbiAgICBcIkZvcm1hdE51bWVyaWMgXCIgK1xuICAgIFwiRm9ybWF0U1FMRGF0ZSBcIiArXG4gICAgXCJGb3JtYXRTdHJpbmcgXCIgK1xuICAgIFwiRnJlZUV4Y2VwdGlvbiBcIiArXG4gICAgXCJHZXRDb21wb25lbnQgXCIgK1xuICAgIFwiR2V0Q29tcG9uZW50TGF1bmNoUGFyYW0gXCIgK1xuICAgIFwiR2V0Q29uc3RhbnQgXCIgK1xuICAgIFwiR2V0TGFzdEV4Y2VwdGlvbiBcIiArXG4gICAgXCJHZXRSZWZlcmVuY2VSZWNvcmQgXCIgK1xuICAgIFwiR2V0UmVmVHlwZUJ5UmVmSUQgXCIgK1xuICAgIFwiR2V0VGFibGVJRCBcIiArXG4gICAgXCJHZXRUZW1wRm9sZGVyIFwiICtcbiAgICBcIklmVGhlbiBcIiArXG4gICAgXCJJbiBcIiArXG4gICAgXCJJbmRleE9mIFwiICtcbiAgICBcIklucHV0RGlhbG9nIFwiICtcbiAgICBcIklucHV0RGlhbG9nRXggXCIgK1xuICAgIFwiSW50ZXJhY3RpdmVNb2RlIFwiICtcbiAgICBcIklzRmlsZUxvY2tlZCBcIiArXG4gICAgXCJJc0dyYXBoaWNGaWxlIFwiICtcbiAgICBcIklzTnVtZXJpYyBcIiArXG4gICAgXCJMZW5ndGggXCIgK1xuICAgIFwiTG9hZFN0cmluZyBcIiArXG4gICAgXCJMb2FkU3RyaW5nRm10IFwiICtcbiAgICBcIkxvY2FsVGltZVRvVVRDIFwiICtcbiAgICBcIkxvd2VyQ2FzZSBcIiArXG4gICAgXCJNYXggXCIgK1xuICAgIFwiTWVzc2FnZUJveCBcIiArXG4gICAgXCJNZXNzYWdlQm94RXggXCIgK1xuICAgIFwiTWltZURlY29kZUJpbmFyeSBcIiArXG4gICAgXCJNaW1lRGVjb2RlU3RyaW5nIFwiICtcbiAgICBcIk1pbWVFbmNvZGVCaW5hcnkgXCIgK1xuICAgIFwiTWltZUVuY29kZVN0cmluZyBcIiArXG4gICAgXCJNaW4gXCIgK1xuICAgIFwiTW9uZXlJbldvcmRzIFwiICtcbiAgICBcIk1vdmVGaWxlIFwiICtcbiAgICBcIk5ld0lEIFwiICtcbiAgICBcIk5vdyBcIiArXG4gICAgXCJPcGVuRmlsZSBcIiArXG4gICAgXCJPcmQgXCIgK1xuICAgIFwiUHJlY2lzaW9uIFwiICtcbiAgICBcIlJhaXNlIFwiICtcbiAgICBcIlJlYWRDZXJ0aWZpY2F0ZUZyb21GaWxlIFwiICtcbiAgICBcIlJlYWRGaWxlIFwiICtcbiAgICBcIlJlZmVyZW5jZUNvZGVCeUlEIFwiICtcbiAgICBcIlJlZmVyZW5jZU51bWJlciBcIiArXG4gICAgXCJSZWZlcmVuY2VSZXF1aXNpdGVNb2RlIFwiICtcbiAgICBcIlJlZmVyZW5jZVJlcXVpc2l0ZVZhbHVlIFwiICtcbiAgICBcIlJlZ2lvbkRhdGVTZXR0aW5ncyBcIiArXG4gICAgXCJSZWdpb25OdW1iZXJTZXR0aW5ncyBcIiArXG4gICAgXCJSZWdpb25UaW1lU2V0dGluZ3MgXCIgK1xuICAgIFwiUmVnUmVhZCBcIiArXG4gICAgXCJSZWdXcml0ZSBcIiArXG4gICAgXCJSZW5hbWVGaWxlIFwiICtcbiAgICBcIlJlcGxhY2UgXCIgK1xuICAgIFwiUm91bmQgXCIgK1xuICAgIFwiU2VsZWN0U2VydmVyQ29kZSBcIiArXG4gICAgXCJTZWxlY3RTUUwgXCIgK1xuICAgIFwiU2VydmVyRGF0ZVRpbWUgXCIgK1xuICAgIFwiU2V0Q29uc3RhbnQgXCIgK1xuICAgIFwiU2V0TWFuYWdlZEZvbGRlckZpZWxkc1N0YXRlIFwiICtcbiAgICBcIlNob3dDb25zdGFudHNJbnB1dERpYWxvZyBcIiArXG4gICAgXCJTaG93TWVzc2FnZSBcIiArXG4gICAgXCJTbGVlcCBcIiArXG4gICAgXCJTcGxpdCBcIiArXG4gICAgXCJTUUwgXCIgK1xuICAgIFwiU1FMMlhMU1RBQiBcIiArXG4gICAgXCJTUUxQcm9maWxpbmdTZW5kUmVwb3J0IFwiICtcbiAgICBcIlN0clRvRGF0ZSBcIiArXG4gICAgXCJTdWJTdHJpbmcgXCIgK1xuICAgIFwiU3ViU3RyaW5nQ291bnQgXCIgK1xuICAgIFwiU3lzdGVtU2V0dGluZyBcIiArXG4gICAgXCJUaW1lIFwiICtcbiAgICBcIlRpbWVEaWZmIFwiICtcbiAgICBcIlRvZGF5IFwiICtcbiAgICBcIlRyYW5zbGl0ZXJhdGUgXCIgK1xuICAgIFwiVHJpbSBcIiArXG4gICAgXCJVcHBlckNhc2UgXCIgK1xuICAgIFwiVXNlclN0YXR1cyBcIiArXG4gICAgXCJVVENUb0xvY2FsVGltZSBcIiArXG4gICAgXCJWYWxpZGF0ZVhNTCBcIiArXG4gICAgXCJWYXJJc0NsZWFyIFwiICtcbiAgICBcIlZhcklzRW1wdHkgXCIgK1xuICAgIFwiVmFySXNOdWxsIFwiICtcbiAgICBcIldvcmtUaW1lRGlmZiBcIiArXG4gICAgXCJXcml0ZUZpbGUgXCIgK1xuICAgIFwiV3JpdGVGaWxlRXggXCIgK1xuICAgIFwiV3JpdGVPYmplY3RIaXN0b3J5IFwiICtcbiAgICBcItCQ0L3QsNC70LjQtyBcIiArXG4gICAgXCLQkdCw0LfQsNCU0LDQvdC90YvRhSBcIiArXG4gICAgXCLQkdC70L7QutCV0YHRgtGMIFwiICtcbiAgICBcItCR0LvQvtC60JXRgdGC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQkdC70L7QutCY0L3RhNC+IFwiICtcbiAgICBcItCR0LvQvtC60KHQvdGP0YLRjCBcIiArXG4gICAgXCLQkdC70L7QutCh0L3Rj9GC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQkdC70L7QutCj0YHRgtCw0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCS0LLQvtC0IFwiICtcbiAgICBcItCS0LLQvtC00JzQtdC90Y4gXCIgK1xuICAgIFwi0JLQtdC00KEgXCIgK1xuICAgIFwi0JLQtdC00KHQv9GAIFwiICtcbiAgICBcItCS0LXRgNGF0L3Rj9GP0JPRgNCw0L3QuNGG0LDQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQktC90LXRiNCf0YDQvtCz0YAgXCIgK1xuICAgIFwi0JLQvtGB0YHRgiBcIiArXG4gICAgXCLQktGA0LXQvNC10L3QvdCw0Y/Qn9Cw0L/QutCwIFwiICtcbiAgICBcItCS0YDQtdC80Y8gXCIgK1xuICAgIFwi0JLRi9Cx0L7RgFNRTCBcIiArXG4gICAgXCLQktGL0LHRgNCw0YLRjNCX0LDQv9C40YHRjCBcIiArXG4gICAgXCLQktGL0LTQtdC70LjRgtGM0KHRgtGAIFwiICtcbiAgICBcItCS0YvQt9Cy0LDRgtGMIFwiICtcbiAgICBcItCS0YvQv9C+0LvQvdC40YLRjCBcIiArXG4gICAgXCLQktGL0L/Qn9GA0L7Qs9GAIFwiICtcbiAgICBcItCT0YDQsNGE0LjRh9C10YHQutC40LnQpNCw0LnQuyBcIiArXG4gICAgXCLQk9GA0YPQv9C/0LDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviBcIiArXG4gICAgXCLQlNCw0YLQsNCS0YDQtdC80Y/QodC10YDQsiBcIiArXG4gICAgXCLQlNC10L3RjNCd0LXQtNC10LvQuCBcIiArXG4gICAgXCLQlNC40LDQu9C+0LPQlNCw0J3QtdGCIFwiICtcbiAgICBcItCU0LvQuNC90LDQodGC0YAgXCIgK1xuICAgIFwi0JTQvtCx0J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCV0J/Rg9GB0YLQviBcIiArXG4gICAgXCLQldGB0LvQuNCi0L4gXCIgK1xuICAgIFwi0JXQp9C40YHQu9C+IFwiICtcbiAgICBcItCX0LDQvNCf0L7QtNGB0YLRgCBcIiArXG4gICAgXCLQl9Cw0L/QuNGB0YzQodC/0YDQsNCy0L7Rh9C90LjQutCwIFwiICtcbiAgICBcItCX0L3QsNGH0J/QvtC70Y/QodC/0YAgXCIgK1xuICAgIFwi0JjQlNCi0LjQv9Ch0L/RgCBcIiArXG4gICAgXCLQmNC30LLQu9C10YfRjNCU0LjRgdC6IFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0JjQvNGP0KTQsNC50LvQsCBcIiArXG4gICAgXCLQmNC30LLQu9C10YfRjNCf0YPRgtGMIFwiICtcbiAgICBcItCY0LfQstC70LXRh9GM0KDQsNGB0YjQuNGA0LXQvdC40LUgXCIgK1xuICAgIFwi0JjQt9C80JTQsNGCIFwiICtcbiAgICBcItCY0LfQvNC10L3QuNGC0YzQoNCw0LfQvNC10YDQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQmNC30LzQtdGA0LXQvdC40LnQnNCw0YHRgdC40LLQsCBcIiArXG4gICAgXCLQmNC80Y/QntGA0LMgXCIgK1xuICAgIFwi0JjQvNGP0J/QvtC70Y/QodC/0YAgXCIgK1xuICAgIFwi0JjQvdC00LXQutGBIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCX0LDQutGA0YvRgtGMIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCe0YLQutGA0YvRgtGMIFwiICtcbiAgICBcItCY0L3QtNC40LrQsNGC0L7RgNCo0LDQsyBcIiArXG4gICAgXCLQmNC90YLQtdGA0LDQutGC0LjQstC90YvQudCg0LXQttC40LwgXCIgK1xuICAgIFwi0JjRgtC+0LPQotCx0LvQodC/0YAgXCIgK1xuICAgIFwi0JrQvtC00JLQuNC00JLQtdC00KHQv9GAIFwiICtcbiAgICBcItCa0L7QtNCS0LjQtNCh0L/RgNCf0L7QmNCUIFwiICtcbiAgICBcItCa0L7QtNCf0L5BbmFsaXQgXCIgK1xuICAgIFwi0JrQvtC00KHQuNC80LLQvtC70LAgXCIgK1xuICAgIFwi0JrQvtC00KHQv9GAIFwiICtcbiAgICBcItCa0L7Qu9Cf0L7QtNGB0YLRgCBcIiArXG4gICAgXCLQmtC+0LvQn9GA0L7QvyBcIiArXG4gICAgXCLQmtC+0L3QnNC10YEgXCIgK1xuICAgIFwi0JrQvtC90YHRgiBcIiArXG4gICAgXCLQmtC+0L3RgdGC0JXRgdGC0YwgXCIgK1xuICAgIFwi0JrQvtC90YHRgtCX0L3QsNGHIFwiICtcbiAgICBcItCa0L7QvdCi0YDQsNC9IFwiICtcbiAgICBcItCa0L7Qv9C40YDQvtCy0LDRgtGM0KTQsNC50LsgXCIgK1xuICAgIFwi0JrQvtC/0LjRj9Ch0YLRgCBcIiArXG4gICAgXCLQmtCf0LXRgNC40L7QtCBcIiArXG4gICAgXCLQmtCh0YLRgNCi0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQnNCw0LrRgSBcIiArXG4gICAgXCLQnNCw0LrRgdCh0YLRgNCi0LHQu9Ch0L/RgCBcIiArXG4gICAgXCLQnNCw0YHRgdC40LIgXCIgK1xuICAgIFwi0JzQtdC90Y4gXCIgK1xuICAgIFwi0JzQtdC90Y7QoNCw0YHRiCBcIiArXG4gICAgXCLQnNC40L0gXCIgK1xuICAgIFwi0J3QsNCx0L7RgNCU0LDQvdC90YvRhdCd0LDQudGC0LjQoNCw0YHRiCBcIiArXG4gICAgXCLQndCw0LjQvNCS0LjQtNCh0L/RgCBcIiArXG4gICAgXCLQndCw0LjQvNCf0L5BbmFsaXQgXCIgK1xuICAgIFwi0J3QsNC40LzQodC/0YAgXCIgK1xuICAgIFwi0J3QsNGB0YLRgNC+0LjRgtGM0J/QtdGA0LXQstC+0LTRi9Ch0YLRgNC+0LogXCIgK1xuICAgIFwi0J3QsNGH0JzQtdGBIFwiICtcbiAgICBcItCd0LDRh9Ci0YDQsNC9IFwiICtcbiAgICBcItCd0LjQttC90Y/Rj9CT0YDQsNC90LjRhtCw0JzQsNGB0YHQuNCy0LAgXCIgK1xuICAgIFwi0J3QvtC80LXRgNCh0L/RgCBcIiArXG4gICAgXCLQndCf0LXRgNC40L7QtCBcIiArXG4gICAgXCLQntC60L3QviBcIiArXG4gICAgXCLQntC60YAgXCIgK1xuICAgIFwi0J7QutGA0YPQttC10L3QuNC1IFwiICtcbiAgICBcItCe0YLQu9CY0L3RhNCU0L7QsdCw0LLQuNGC0YwgXCIgK1xuICAgIFwi0J7RgtC70JjQvdGE0KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0J7RgtGH0LXRgiBcIiArXG4gICAgXCLQntGC0YfQtdGC0JDQvdCw0LsgXCIgK1xuICAgIFwi0J7RgtGH0LXRgtCY0L3RgiBcIiArXG4gICAgXCLQn9Cw0L/QutCw0KHRg9GJ0LXRgdGC0LLRg9C10YIgXCIgK1xuICAgIFwi0J/QsNGD0LfQsCBcIiArXG4gICAgXCLQn9CS0YvQsdC+0YBTUUwgXCIgK1xuICAgIFwi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQn9C10YDQtdC80LXQvdC90YvQtSBcIiArXG4gICAgXCLQn9C10YDQtdC80LXRgdGC0LjRgtGM0KTQsNC50LsgXCIgK1xuICAgIFwi0J/QvtC00YHRgtGAIFwiICtcbiAgICBcItCf0L7QuNGB0LrQn9C+0LTRgdGC0YAgXCIgK1xuICAgIFwi0J/QvtC40YHQutCh0YLRgCBcIiArXG4gICAgXCLQn9C+0LvRg9GH0LjRgtGM0JjQlNCi0LDQsdC70LjRhtGLIFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+IFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCY0JQgXCIgK1xuICAgIFwi0J/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0JjQvNGPIFwiICtcbiAgICBcItCf0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNCh0YLQsNGC0YPRgSBcIiArXG4gICAgXCLQn9GA0LXRgNCy0LDRgtGMIFwiICtcbiAgICBcItCf0YDQvtCy0LXRgNC40YLRjNCf0LDRgNCw0LzQtdGC0YAgXCIgK1xuICAgIFwi0J/RgNC+0LLQtdGA0LjRgtGM0J/QsNGA0LDQvNC10YLRgNCX0L3QsNGHIFwiICtcbiAgICBcItCf0YDQvtCy0LXRgNC40YLRjNCj0YHQu9C+0LLQuNC1IFwiICtcbiAgICBcItCg0LDQt9Cx0KHRgtGAIFwiICtcbiAgICBcItCg0LDQt9C90JLRgNC10LzRjyBcIiArXG4gICAgXCLQoNCw0LfQvdCU0LDRgiBcIiArXG4gICAgXCLQoNCw0LfQvdCU0LDRgtCw0JLRgNC10LzRjyBcIiArXG4gICAgXCLQoNCw0LfQvdCg0LDQsdCS0YDQtdC80Y8gXCIgK1xuICAgIFwi0KDQtdCz0KPRgdGC0JLRgNC10LwgXCIgK1xuICAgIFwi0KDQtdCz0KPRgdGC0JTQsNGCIFwiICtcbiAgICBcItCg0LXQs9Cj0YHRgtCn0YHQuyBcIiArXG4gICAgXCLQoNC10LTQotC10LrRgdGCIFwiICtcbiAgICBcItCg0LXQtdGB0YLRgNCX0LDQv9C40YHRjCBcIiArXG4gICAgXCLQoNC10LXRgdGC0YDQodC/0LjRgdC+0LrQmNC80LXQvdCf0LDRgNCw0LwgXCIgK1xuICAgIFwi0KDQtdC10YHRgtGA0KfRgtC10L3QuNC1IFwiICtcbiAgICBcItCg0LXQutCy0KHQv9GAIFwiICtcbiAgICBcItCg0LXQutCy0KHQv9GA0J/RgCBcIiArXG4gICAgXCLQodC10LPQvtC00L3RjyBcIiArXG4gICAgXCLQodC10LnRh9Cw0YEgXCIgK1xuICAgIFwi0KHQtdGA0LLQtdGAIFwiICtcbiAgICBcItCh0LXRgNCy0LXRgNCf0YDQvtGG0LXRgdGB0JjQlCBcIiArXG4gICAgXCLQodC10YDRgtC40YTQuNC60LDRgtCk0LDQudC70KHRh9C40YLQsNGC0YwgXCIgK1xuICAgIFwi0KHQttCf0YDQvtCxIFwiICtcbiAgICBcItCh0LjQvNCy0L7QuyBcIiArXG4gICAgXCLQodC40YHRgtC10LzQsNCU0LjRgNC10LrRgtGD0LzQmtC+0LQgXCIgK1xuICAgIFwi0KHQuNGB0YLQtdC80LDQmNC90YTQvtGA0LzQsNGG0LjRjyBcIiArXG4gICAgXCLQodC40YHRgtC10LzQsNCa0L7QtCBcIiArXG4gICAgXCLQodC+0LTQtdGA0LbQuNGCIFwiICtcbiAgICBcItCh0L7QtdC00LjQvdC10L3QuNC10JfQsNC60YDRi9GC0YwgXCIgK1xuICAgIFwi0KHQvtC10LTQuNC90LXQvdC40LXQntGC0LrRgNGL0YLRjCBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7QsyBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7Qs9CS0YvQsdC+0YDQsNCY0LfQlNCy0YPRhdCh0L/QuNGB0LrQvtCyIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0JLRi9Cx0L7RgNCw0J/QsNC/0LrQuCBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCU0LjQsNC70L7Qs9Ce0YLQutGA0YvRgtC40Y/QpNCw0LnQu9CwIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JTQuNCw0LvQvtCz0KHQvtGF0YDQsNC90LXQvdC40Y/QpNCw0LnQu9CwIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JfQsNC/0YDQvtGBIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JjQvdC00LjQutCw0YLQvtGAIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0JjRgdC60LvRjtGH0LXQvdC40LUgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQmtGN0YjQuNGA0L7QstCw0L3QvdGL0LnQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCc0LDRgdGB0LjQsiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCd0LDQsdC+0YDQlNCw0L3QvdGL0YUgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQntCx0YrQtdC60YIgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQntGC0YfQtdGCIFwiICtcbiAgICBcItCh0L7Qt9C00LDRgtGM0J/QsNC/0LrRgyBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCg0LXQtNCw0LrRgtC+0YAgXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQodC+0LXQtNC40L3QtdC90LjQtSBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0L/QuNGB0L7QutCh0YLRgNC+0LogXCIgK1xuICAgIFwi0KHQvtC30LTQsNGC0YzQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC+0LfQtNCw0YLRjNCh0YbQtdC90LDRgNC40LkgXCIgK1xuICAgIFwi0KHQvtC30LTQodC/0YAgXCIgK1xuICAgIFwi0KHQvtGB0YLQodC/0YAgXCIgK1xuICAgIFwi0KHQvtGF0YAgXCIgK1xuICAgIFwi0KHQvtGF0YDQodC/0YAgXCIgK1xuICAgIFwi0KHQv9C40YHQvtC60KHQuNGB0YLQtdC8IFwiICtcbiAgICBcItCh0L/RgCBcIiArXG4gICAgXCLQodC/0YDQsNCy0L7Rh9C90LjQuiBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCV0YHRgtGMIFwiICtcbiAgICBcItCh0L/RgNCR0LvQvtC60KHQvdGP0YLRjCBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCh0L3Rj9GC0YzQoNCw0YHRiCBcIiArXG4gICAgXCLQodC/0YDQkdC70L7QutCj0YHRgtCw0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCh0L/RgNCY0LfQvNCd0LDQsdCU0LDQvSBcIiArXG4gICAgXCLQodC/0YDQmtC+0LQgXCIgK1xuICAgIFwi0KHQv9GA0J3QvtC80LXRgCBcIiArXG4gICAgXCLQodC/0YDQntCx0L3QvtCy0LjRgtGMIFwiICtcbiAgICBcItCh0L/RgNCe0YLQutGA0YvRgtGMIFwiICtcbiAgICBcItCh0L/RgNCe0YLQvNC10L3QuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0J/QsNGA0LDQvCBcIiArXG4gICAgXCLQodC/0YDQn9C+0LvQtdCX0L3QsNGHIFwiICtcbiAgICBcItCh0L/RgNCf0L7Qu9C10JjQvNGPIFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCyIFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0JLQstC10LTQl9C9IFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0J3QvtCy0YvQtSBcIiArXG4gICAgXCLQodC/0YDQoNC10LrQstCf0YAgXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQn9GA0LXQtNCX0L0gXCIgK1xuICAgIFwi0KHQv9GA0KDQtdC60LLQoNC10LbQuNC8IFwiICtcbiAgICBcItCh0L/RgNCg0LXQutCy0KLQuNC/0KLQtdC60YHRgiBcIiArXG4gICAgXCLQodC/0YDQodC+0LfQtNCw0YLRjCBcIiArXG4gICAgXCLQodC/0YDQodC+0YHRgiBcIiArXG4gICAgXCLQodC/0YDQodC+0YXRgNCw0L3QuNGC0YwgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70JjRgtC+0LMgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGAIFwiICtcbiAgICBcItCh0L/RgNCi0LHQu9Ch0YLRgNCa0L7QuyBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQnNCw0LrRgSBcIiArXG4gICAgXCLQodC/0YDQotCx0LvQodGC0YDQnNC40L0gXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0J/RgNC10LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KHQu9C10LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KHQvtC30LQgXCIgK1xuICAgIFwi0KHQv9GA0KLQsdC70KHRgtGA0KPQtCBcIiArXG4gICAgXCLQodC/0YDQotC10LrQn9GA0LXQtNGB0YIgXCIgK1xuICAgIFwi0KHQv9GA0KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0KHRgNCw0LLQvdC40YLRjNCh0YLRgCBcIiArXG4gICAgXCLQodGC0YDQktC10YDRhdCg0LXQs9C40YHRgtGAIFwiICtcbiAgICBcItCh0YLRgNCd0LjQttC90KDQtdCz0LjRgdGC0YAgXCIgK1xuICAgIFwi0KHRgtGA0KLQsdC70KHQv9GAIFwiICtcbiAgICBcItCh0YPQvNCf0YDQvtC/IFwiICtcbiAgICBcItCh0YbQtdC90LDRgNC40LkgXCIgK1xuICAgIFwi0KHRhtC10L3QsNGA0LjQudCf0LDRgNCw0LwgXCIgK1xuICAgIFwi0KLQtdC60JLQtdGA0YHQuNGPIFwiICtcbiAgICBcItCi0LXQutCe0YDQsyBcIiArXG4gICAgXCLQotC+0YfQvSBcIiArXG4gICAgXCLQotGA0LDQvSBcIiArXG4gICAgXCLQotGA0LDQvdGB0LvQuNGC0LXRgNCw0YbQuNGPIFwiICtcbiAgICBcItCj0LTQsNC70LjRgtGM0KLQsNCx0LvQuNGG0YMgXCIgK1xuICAgIFwi0KPQtNCw0LvQuNGC0YzQpNCw0LnQuyBcIiArXG4gICAgXCLQo9C00KHQv9GAIFwiICtcbiAgICBcItCj0LTQodGC0YDQotCx0LvQodC/0YAgXCIgK1xuICAgIFwi0KPRgdGCIFwiICtcbiAgICBcItCj0YHRgtCw0L3QvtCy0LrQuNCa0L7QvdGB0YLQsNC90YIgXCIgK1xuICAgIFwi0KTQsNC50LvQkNGC0YDQuNCx0YPRgtCh0YfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JDRgtGA0LjQsdGD0YLQo9GB0YLQsNC90L7QstC40YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9CS0YDQtdC80Y8gXCIgK1xuICAgIFwi0KTQsNC50LvQktGA0LXQvNGP0KPRgdGC0LDQvdC+0LLQuNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQktGL0LHRgNCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9CX0LDQvdGP0YIgXCIgK1xuICAgIFwi0KTQsNC50LvQl9Cw0L/QuNGB0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JjRgdC60LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70JrQvtC/0LjRgNC+0LLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQnNC+0LbQvdC+0KfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70J7RgtC60YDRi9GC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cf0LXRgNC10LrQvtC00LjRgNC+0LLQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQn9C10YDQtdC80LXRgdGC0LjRgtGMIFwiICtcbiAgICBcItCk0LDQudC70J/RgNC+0YHQvNC+0YLRgNC10YLRjCBcIiArXG4gICAgXCLQpNCw0LnQu9Cg0LDQt9C80LXRgCBcIiArXG4gICAgXCLQpNCw0LnQu9Ch0L7Qt9C00LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70KHRgdGL0LvQutCw0KHQvtC30LTQsNGC0YwgXCIgK1xuICAgIFwi0KTQsNC50LvQodGD0YnQtdGB0YLQstGD0LXRgiBcIiArXG4gICAgXCLQpNCw0LnQu9Ch0YfQuNGC0LDRgtGMIFwiICtcbiAgICBcItCk0LDQudC70KPQtNCw0LvQuNGC0YwgXCIgK1xuICAgIFwi0KTQvNGCU1FM0JTQsNGCIFwiICtcbiAgICBcItCk0LzRgtCU0LDRgiBcIiArXG4gICAgXCLQpNC80YLQodGC0YAgXCIgK1xuICAgIFwi0KTQvNGC0KfRgdC7IFwiICtcbiAgICBcItCk0L7RgNC80LDRgiBcIiArXG4gICAgXCLQptCc0LDRgdGB0LjQstCt0LvQtdC80LXQvdGCIFwiICtcbiAgICBcItCm0J3QsNCx0L7RgNCU0LDQvdC90YvRhdCg0LXQutCy0LjQt9C40YIgXCIgK1xuICAgIFwi0KbQn9C+0LTRgdGC0YAgXCI7XG5cbiAgLy8g0J/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0LUg0L/QtdGA0LXQvNC10L3QvdGL0LUgPT0+IGJ1aWx0X2luXG4gIHZhciBwcmVkZWZpbmVkX3ZhcmlhYmxlcyA9XG4gICAgXCJBbHRTdGF0ZSBcIiArXG4gICAgXCJBcHBsaWNhdGlvbiBcIiArXG4gICAgXCJDYWxsVHlwZSBcIiArXG4gICAgXCJDb21wb25lbnRUb2tlbnMgXCIgK1xuICAgIFwiQ3JlYXRlZEpvYnMgXCIgK1xuICAgIFwiQ3JlYXRlZE5vdGljZXMgXCIgK1xuICAgIFwiQ29udHJvbFN0YXRlIFwiICtcbiAgICBcIkRpYWxvZ1Jlc3VsdCBcIiArXG4gICAgXCJEaWFsb2dzIFwiICtcbiAgICBcIkVEb2N1bWVudHMgXCIgK1xuICAgIFwiRURvY3VtZW50VmVyc2lvblNvdXJjZSBcIiArXG4gICAgXCJGb2xkZXJzIFwiICtcbiAgICBcIkdsb2JhbElEcyBcIiArXG4gICAgXCJKb2IgXCIgK1xuICAgIFwiSm9icyBcIiArXG4gICAgXCJJbnB1dFZhbHVlIFwiICtcbiAgICBcIkxvb2tVcFJlZmVyZW5jZSBcIiArXG4gICAgXCJMb29rVXBSZXF1aXNpdGVOYW1lcyBcIiArXG4gICAgXCJMb29rVXBTZWFyY2ggXCIgK1xuICAgIFwiT2JqZWN0IFwiICtcbiAgICBcIlBhcmVudENvbXBvbmVudCBcIiArXG4gICAgXCJQcm9jZXNzZXMgXCIgK1xuICAgIFwiUmVmZXJlbmNlcyBcIiArXG4gICAgXCJSZXF1aXNpdGUgXCIgK1xuICAgIFwiUmVwb3J0TmFtZSBcIiArXG4gICAgXCJSZXBvcnRzIFwiICtcbiAgICBcIlJlc3VsdCBcIiArXG4gICAgXCJTY3JpcHRzIFwiICtcbiAgICBcIlNlYXJjaGVzIFwiICtcbiAgICBcIlNlbGVjdGVkQXR0YWNobWVudHMgXCIgK1xuICAgIFwiU2VsZWN0ZWRJdGVtcyBcIiArXG4gICAgXCJTZWxlY3RNb2RlIFwiICtcbiAgICBcIlNlbmRlciBcIiArXG4gICAgXCJTZXJ2ZXJFdmVudHMgXCIgK1xuICAgIFwiU2VydmljZUZhY3RvcnkgXCIgK1xuICAgIFwiU2hpZnRTdGF0ZSBcIiArXG4gICAgXCJTdWJUYXNrIFwiICtcbiAgICBcIlN5c3RlbURpYWxvZ3MgXCIgK1xuICAgIFwiVGFza3MgXCIgK1xuICAgIFwiV2l6YXJkIFwiICtcbiAgICBcIldpemFyZHMgXCIgK1xuICAgIFwiV29yayBcIiArXG4gICAgXCLQktGL0LfQvtCy0KHQv9C+0YHQvtCxIFwiICtcbiAgICBcItCY0LzRj9Ce0YLRh9C10YLQsCBcIiArXG4gICAgXCLQoNC10LrQstCX0L3QsNGHIFwiO1xuXG4gIC8vINCY0L3RgtC10YDRhNC10LnRgdGLID09PiB0eXBlXG4gIHZhciBpbnRlcmZhY2VzID1cbiAgICBcIklBcHBsaWNhdGlvbiBcIiArXG4gICAgXCJJQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklBY2NvdW50UmVwb3NpdG9yeSBcIiArXG4gICAgXCJJQWNjb3VudFNlbGVjdGlvblJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJQWN0aW9uIFwiICtcbiAgICBcIklBY3Rpb25MaXN0IFwiICtcbiAgICBcIklBZG1pbmlzdHJhdGlvbkhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJQW5jaG9ycyBcIiArXG4gICAgXCJJQXBwbGljYXRpb24gXCIgK1xuICAgIFwiSUFyY2hpdmVJbmZvIFwiICtcbiAgICBcIklBdHRhY2htZW50IFwiICtcbiAgICBcIklBdHRhY2htZW50TGlzdCBcIiArXG4gICAgXCJJQ2hlY2tMaXN0Qm94IFwiICtcbiAgICBcIklDaGVja1BvaW50ZWRMaXN0IFwiICtcbiAgICBcIklDb2x1bW4gXCIgK1xuICAgIFwiSUNvbXBvbmVudCBcIiArXG4gICAgXCJJQ29tcG9uZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuIFwiICtcbiAgICBcIklDb21wb25lbnRUb2tlbkZhY3RvcnkgXCIgK1xuICAgIFwiSUNvbXBvbmVudFRva2VuSW5mbyBcIiArXG4gICAgXCJJQ29tcFJlY29yZEluZm8gXCIgK1xuICAgIFwiSUNvbm5lY3Rpb24gXCIgK1xuICAgIFwiSUNvbnRlbnRzIFwiICtcbiAgICBcIklDb250cm9sIFwiICtcbiAgICBcIklDb250cm9sSm9iIFwiICtcbiAgICBcIklDb250cm9sSm9iSW5mbyBcIiArXG4gICAgXCJJQ29udHJvbExpc3QgXCIgK1xuICAgIFwiSUNyeXB0byBcIiArXG4gICAgXCJJQ3J5cHRvMiBcIiArXG4gICAgXCJJQ3VzdG9tSm9iIFwiICtcbiAgICBcIklDdXN0b21Kb2JJbmZvIFwiICtcbiAgICBcIklDdXN0b21MaXN0Qm94IFwiICtcbiAgICBcIklDdXN0b21PYmplY3RXaXphcmRTdGVwIFwiICtcbiAgICBcIklDdXN0b21Xb3JrIFwiICtcbiAgICBcIklDdXN0b21Xb3JrSW5mbyBcIiArXG4gICAgXCJJRGF0YVNldCBcIiArXG4gICAgXCJJRGF0YVNldEFjY2Vzc0luZm8gXCIgK1xuICAgIFwiSURhdGFTaWduZXIgXCIgK1xuICAgIFwiSURhdGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGUgXCIgK1xuICAgIFwiSURhdGVSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRGF0ZVZhbHVlIFwiICtcbiAgICBcIklEZWFBY2Nlc3NSaWdodHMgXCIgK1xuICAgIFwiSURlYU9iamVjdEluZm8gXCIgK1xuICAgIFwiSURldmVsb3BtZW50Q29tcG9uZW50TG9jayBcIiArXG4gICAgXCJJRGlhbG9nIFwiICtcbiAgICBcIklEaWFsb2dGYWN0b3J5IFwiICtcbiAgICBcIklEaWFsb2dQaWNrUmVxdWlzaXRlSXRlbXMgXCIgK1xuICAgIFwiSURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklESUNTRmFjdG9yeSBcIiArXG4gICAgXCJJRG9jUmVxdWlzaXRlIFwiICtcbiAgICBcIklEb2N1bWVudEluZm8gXCIgK1xuICAgIFwiSUR1YWxMaXN0RGlhbG9nIFwiICtcbiAgICBcIklFQ2VydGlmaWNhdGUgXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZUluZm8gXCIgK1xuICAgIFwiSUVDZXJ0aWZpY2F0ZXMgXCIgK1xuICAgIFwiSUVkaXRDb250cm9sIFwiICtcbiAgICBcIklFZGl0b3JGb3JtIFwiICtcbiAgICBcIklFZG1zRXhwbG9yZXIgXCIgK1xuICAgIFwiSUVkbXNPYmplY3QgXCIgK1xuICAgIFwiSUVkbXNPYmplY3REZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJRWRtc09iamVjdEZhY3RvcnkgXCIgK1xuICAgIFwiSUVkbXNPYmplY3RJbmZvIFwiICtcbiAgICBcIklFRG9jdW1lbnQgXCIgK1xuICAgIFwiSUVEb2N1bWVudEFjY2Vzc1JpZ2h0cyBcIiArXG4gICAgXCJJRURvY3VtZW50RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSUVEb2N1bWVudEVkaXRvciBcIiArXG4gICAgXCJJRURvY3VtZW50RmFjdG9yeSBcIiArXG4gICAgXCJJRURvY3VtZW50SW5mbyBcIiArXG4gICAgXCJJRURvY3VtZW50U3RvcmFnZSBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbiBcIiArXG4gICAgXCJJRURvY3VtZW50VmVyc2lvbkxpc3REaWFsb2cgXCIgK1xuICAgIFwiSUVEb2N1bWVudFZlcnNpb25Tb3VyY2UgXCIgK1xuICAgIFwiSUVEb2N1bWVudFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUVEb2NWZXJTaWduYXR1cmUgXCIgK1xuICAgIFwiSUVEb2NWZXJzaW9uU3RhdGUgXCIgK1xuICAgIFwiSUVuYWJsZWRNb2RlIFwiICtcbiAgICBcIklFbmNvZGVQcm92aWRlciBcIiArXG4gICAgXCJJRW5jcnlwdGVyIFwiICtcbiAgICBcIklFdmVudCBcIiArXG4gICAgXCJJRXZlbnRMaXN0IFwiICtcbiAgICBcIklFeGNlcHRpb24gXCIgK1xuICAgIFwiSUV4dGVybmFsRXZlbnRzIFwiICtcbiAgICBcIklFeHRlcm5hbEhhbmRsZXIgXCIgK1xuICAgIFwiSUZhY3RvcnkgXCIgK1xuICAgIFwiSUZpZWxkIFwiICtcbiAgICBcIklGaWxlRGlhbG9nIFwiICtcbiAgICBcIklGb2xkZXIgXCIgK1xuICAgIFwiSUZvbGRlckRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklGb2xkZXJEaWFsb2cgXCIgK1xuICAgIFwiSUZvbGRlckZhY3RvcnkgXCIgK1xuICAgIFwiSUZvbGRlckluZm8gXCIgK1xuICAgIFwiSUZvckVhY2ggXCIgK1xuICAgIFwiSUZvcm0gXCIgK1xuICAgIFwiSUZvcm1UaXRsZSBcIiArXG4gICAgXCJJRm9ybVdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSUdsb2JhbElERmFjdG9yeSBcIiArXG4gICAgXCJJR2xvYmFsSURJbmZvIFwiICtcbiAgICBcIklHcmlkIFwiICtcbiAgICBcIklIYXNoZXIgXCIgK1xuICAgIFwiSUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJSHlwZXJMaW5rQ29udHJvbCBcIiArXG4gICAgXCJJSW1hZ2VCdXR0b24gXCIgK1xuICAgIFwiSUltYWdlQ29udHJvbCBcIiArXG4gICAgXCJJSW5uZXJQYW5lbCBcIiArXG4gICAgXCJJSW5wbGFjZUhpbnQgXCIgK1xuICAgIFwiSUludGVnZXJDcml0ZXJpb24gXCIgK1xuICAgIFwiSUludGVnZXJMaXN0IFwiICtcbiAgICBcIklJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklJbnRlZ2VyVmFsdWUgXCIgK1xuICAgIFwiSUlTQkxFZGl0b3JGb3JtIFwiICtcbiAgICBcIklKb2IgXCIgK1xuICAgIFwiSUpvYkRlc2NyaXB0aW9uIFwiICtcbiAgICBcIklKb2JGYWN0b3J5IFwiICtcbiAgICBcIklKb2JGb3JtIFwiICtcbiAgICBcIklKb2JJbmZvIFwiICtcbiAgICBcIklMYWJlbENvbnRyb2wgXCIgK1xuICAgIFwiSUxhcmdlSW50ZWdlckNyaXRlcmlvbiBcIiArXG4gICAgXCJJTGFyZ2VJbnRlZ2VyUmVxdWlzaXRlIFwiICtcbiAgICBcIklMYXJnZUludGVnZXJWYWx1ZSBcIiArXG4gICAgXCJJTGljZW5zZUluZm8gXCIgK1xuICAgIFwiSUxpZmVDeWNsZVN0YWdlIFwiICtcbiAgICBcIklMaXN0IFwiICtcbiAgICBcIklMaXN0Qm94IFwiICtcbiAgICBcIklMb2NhbElESW5mbyBcIiArXG4gICAgXCJJTG9jYWxpemF0aW9uIFwiICtcbiAgICBcIklMb2NrIFwiICtcbiAgICBcIklNZW1vcnlEYXRhU2V0IFwiICtcbiAgICBcIklNZXNzYWdpbmdGYWN0b3J5IFwiICtcbiAgICBcIklNZXRhZGF0YVJlcG9zaXRvcnkgXCIgK1xuICAgIFwiSU5vdGljZSBcIiArXG4gICAgXCJJTm90aWNlSW5mbyBcIiArXG4gICAgXCJJTnVtZXJpY0NyaXRlcmlvbiBcIiArXG4gICAgXCJJTnVtZXJpY1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJTnVtZXJpY1ZhbHVlIFwiICtcbiAgICBcIklPYmplY3QgXCIgK1xuICAgIFwiSU9iamVjdERlc2NyaXB0aW9uIFwiICtcbiAgICBcIklPYmplY3RJbXBvcnRlciBcIiArXG4gICAgXCJJT2JqZWN0SW5mbyBcIiArXG4gICAgXCJJT2JzZXJ2ZXIgXCIgK1xuICAgIFwiSVBhbmVsR3JvdXAgXCIgK1xuICAgIFwiSVBpY2tDcml0ZXJpb24gXCIgK1xuICAgIFwiSVBpY2tQcm9wZXJ0eSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklQaWNrUmVxdWlzaXRlSXRlbSBcIiArXG4gICAgXCJJUGlja1JlcXVpc2l0ZUl0ZW1zIFwiICtcbiAgICBcIklQaWNrVmFsdWUgXCIgK1xuICAgIFwiSVByaXZpbGVnZSBcIiArXG4gICAgXCJJUHJpdmlsZWdlTGlzdCBcIiArXG4gICAgXCJJUHJvY2VzcyBcIiArXG4gICAgXCJJUHJvY2Vzc0ZhY3RvcnkgXCIgK1xuICAgIFwiSVByb2Nlc3NNZXNzYWdlIFwiICtcbiAgICBcIklQcm9ncmVzcyBcIiArXG4gICAgXCJJUHJvcGVydHkgXCIgK1xuICAgIFwiSVByb3BlcnR5Q2hhbmdlRXZlbnQgXCIgK1xuICAgIFwiSVF1ZXJ5IFwiICtcbiAgICBcIklSZWZlcmVuY2UgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUNyaXRlcmlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlRW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJlZmVyZW5jZUhpc3RvcnlEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJUmVmZXJlbmNlSW5mbyBcIiArXG4gICAgXCJJUmVmZXJlbmNlUmVjb3JkQ2FyZFdpemFyZFN0ZXAgXCIgK1xuICAgIFwiSVJlZmVyZW5jZVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZWZlcmVuY2VzRmFjdG9yeSBcIiArXG4gICAgXCJJUmVmZXJlbmNlVmFsdWUgXCIgK1xuICAgIFwiSVJlZlJlcXVpc2l0ZSBcIiArXG4gICAgXCJJUmVwb3J0IFwiICtcbiAgICBcIklSZXBvcnRGYWN0b3J5IFwiICtcbiAgICBcIklSZXF1aXNpdGUgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZURlc2NyaXB0aW9uIFwiICtcbiAgICBcIklSZXF1aXNpdGVEZXNjcmlwdGlvbkxpc3QgXCIgK1xuICAgIFwiSVJlcXVpc2l0ZUZhY3RvcnkgXCIgK1xuICAgIFwiSVJpY2hFZGl0IFwiICtcbiAgICBcIklSb3V0ZVN0ZXAgXCIgK1xuICAgIFwiSVJ1bGUgXCIgK1xuICAgIFwiSVJ1bGVMaXN0IFwiICtcbiAgICBcIklTY2hlbWVCbG9jayBcIiArXG4gICAgXCJJU2NyaXB0IFwiICtcbiAgICBcIklTY3JpcHRGYWN0b3J5IFwiICtcbiAgICBcIklTZWFyY2hDcml0ZXJpYSBcIiArXG4gICAgXCJJU2VhcmNoQ3JpdGVyaW9uIFwiICtcbiAgICBcIklTZWFyY2hEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU2VhcmNoRmFjdG9yeSBcIiArXG4gICAgXCJJU2VhcmNoRm9sZGVySW5mbyBcIiArXG4gICAgXCJJU2VhcmNoRm9yT2JqZWN0RGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVNlYXJjaFJlc3VsdFJlc3RyaWN0aW9ucyBcIiArXG4gICAgXCJJU2VjdXJlZENvbnRleHQgXCIgK1xuICAgIFwiSVNlbGVjdERpYWxvZyBcIiArXG4gICAgXCJJU2VydmVyRXZlbnQgXCIgK1xuICAgIFwiSVNlcnZlckV2ZW50RmFjdG9yeSBcIiArXG4gICAgXCJJU2VydmljZURpYWxvZyBcIiArXG4gICAgXCJJU2VydmljZUZhY3RvcnkgXCIgK1xuICAgIFwiSVNpZ25hdHVyZSBcIiArXG4gICAgXCJJU2lnblByb3ZpZGVyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIyIFwiICtcbiAgICBcIklTaWduUHJvdmlkZXIzIFwiICtcbiAgICBcIklTaW1wbGVDcml0ZXJpb24gXCIgK1xuICAgIFwiSVN0cmluZ0NyaXRlcmlvbiBcIiArXG4gICAgXCJJU3RyaW5nTGlzdCBcIiArXG4gICAgXCJJU3RyaW5nUmVxdWlzaXRlIFwiICtcbiAgICBcIklTdHJpbmdSZXF1aXNpdGVEZXNjcmlwdGlvbiBcIiArXG4gICAgXCJJU3RyaW5nVmFsdWUgXCIgK1xuICAgIFwiSVN5c3RlbURpYWxvZ3NGYWN0b3J5IFwiICtcbiAgICBcIklTeXN0ZW1JbmZvIFwiICtcbiAgICBcIklUYWJTaGVldCBcIiArXG4gICAgXCJJVGFzayBcIiArXG4gICAgXCJJVGFza0Fib3J0UmVhc29uSW5mbyBcIiArXG4gICAgXCJJVGFza0NhcmRXaXphcmRTdGVwIFwiICtcbiAgICBcIklUYXNrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVRhc2tGYWN0b3J5IFwiICtcbiAgICBcIklUYXNrSW5mbyBcIiArXG4gICAgXCJJVGFza1JvdXRlIFwiICtcbiAgICBcIklUZXh0Q3JpdGVyaW9uIFwiICtcbiAgICBcIklUZXh0UmVxdWlzaXRlIFwiICtcbiAgICBcIklUZXh0VmFsdWUgXCIgK1xuICAgIFwiSVRyZWVMaXN0U2VsZWN0RGlhbG9nIFwiICtcbiAgICBcIklVc2VyIFwiICtcbiAgICBcIklVc2VyTGlzdCBcIiArXG4gICAgXCJJVmFsdWUgXCIgK1xuICAgIFwiSVZpZXcgXCIgK1xuICAgIFwiSVdlYkJyb3dzZXJDb250cm9sIFwiICtcbiAgICBcIklXaXphcmQgXCIgK1xuICAgIFwiSVdpemFyZEFjdGlvbiBcIiArXG4gICAgXCJJV2l6YXJkRmFjdG9yeSBcIiArXG4gICAgXCJJV2l6YXJkRm9ybUVsZW1lbnQgXCIgK1xuICAgIFwiSVdpemFyZFBhcmFtIFwiICtcbiAgICBcIklXaXphcmRQaWNrUGFyYW0gXCIgK1xuICAgIFwiSVdpemFyZFJlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXaXphcmRTdGVwIFwiICtcbiAgICBcIklXb3JrQWNjZXNzUmlnaHRzIFwiICtcbiAgICBcIklXb3JrRGVzY3JpcHRpb24gXCIgK1xuICAgIFwiSVdvcmtmbG93QXNrYWJsZVBhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd0Fza2FibGVQYXJhbXMgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2sgXCIgK1xuICAgIFwiSVdvcmtmbG93QmxvY2tSZXN1bHQgXCIgK1xuICAgIFwiSVdvcmtmbG93RW5hYmxlZE1vZGUgXCIgK1xuICAgIFwiSVdvcmtmbG93UGFyYW0gXCIgK1xuICAgIFwiSVdvcmtmbG93UGlja1BhcmFtIFwiICtcbiAgICBcIklXb3JrZmxvd1JlZmVyZW5jZVBhcmFtIFwiICtcbiAgICBcIklXb3JrU3RhdGUgXCIgK1xuICAgIFwiSVdvcmtUcmVlQ3VzdG9tTm9kZSBcIiArXG4gICAgXCJJV29ya1RyZWVKb2JOb2RlIFwiICtcbiAgICBcIklXb3JrVHJlZVRhc2tOb2RlIFwiICtcbiAgICBcIklYTUxFZGl0b3JGb3JtIFwiICtcbiAgICBcIlNCQ3J5cHRvIFwiO1xuXG4gIC8vIGJ1aWx0X2luIDog0LLRgdGC0YDQvtC10L3QvdGL0LUg0LjQu9C4INCx0LjQsdC70LjQvtGC0LXRh9C90YvQtSDQvtCx0YrQtdC60YLRiyAo0LrQvtC90YHRgtCw0L3RgtGLLCDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8pXG4gIHZhciBCVUlMVElOID0gQ09OU1RBTlRTICsgRU5VTVM7XG5cbiAgLy8gY2xhc3M6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC90LDQsdC+0YDRiyDQt9C90LDRh9C10L3QuNC5LCDRgdC40YHRgtC10LzQvdGL0LUg0L7QsdGK0LXQutGC0YssINGE0LDQsdGA0LjQutC4XG4gIHZhciBDTEFTUyA9IHByZWRlZmluZWRfdmFyaWFibGVzO1xuXG4gIC8vIGxpdGVyYWwgOiDQv9GA0LjQvNC40YLQuNCy0L3Ri9C1INGC0LjQv9GLXG4gIHZhciBMSVRFUkFMID0gXCJudWxsIHRydWUgZmFsc2UgbmlsIFwiO1xuXG4gIC8vIG51bWJlciA6INGH0LjRgdC70LBcbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8gc3RyaW5nIDog0YHRgtGA0L7QutC4XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW3sgYmVnaW46ICdcIicsIGVuZDogJ1wiJyB9LCB7IGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIiB9XSxcbiAgfTtcblxuICAvLyDQotC+0LrQtdC90YtcbiAgdmFyIERPQ1RBR1MgPSB7XG4gICAgY2xhc3NOYW1lOiBcImRvY3RhZ1wiLFxuICAgIGJlZ2luOiBcIlxcXFxiKD86VE9ET3xET05FfEJFR0lOfEVORHxTVFVCfENIR3xGSVhNRXxOT1RFfEJVR3xYWFgpXFxcXGJcIixcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8g0J7QtNC90L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LlcbiAgdmFyIElTQkxfTElORV9DT01NRU5UX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIixcbiAgICBiZWdpbjogXCIvL1wiLFxuICAgIGVuZDogXCIkXCIsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5QSFJBU0FMX1dPUkRTX01PREUsIERPQ1RBR1NdLFxuICB9O1xuXG4gIC8vINCc0L3QvtCz0L7RgdGC0YDQvtGH0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40LlcbiAgdmFyIElTQkxfQkxPQ0tfQ09NTUVOVF9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21tZW50XCIsXG4gICAgYmVnaW46IFwiL1xcXFwqXCIsXG4gICAgZW5kOiBcIlxcXFwqL1wiLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW2hsanMuUEhSQVNBTF9XT1JEU19NT0RFLCBET0NUQUdTXSxcbiAgfTtcblxuICAvLyBjb21tZW50IDog0LrQvtC80LzQtdC90YLQsNGA0LjQuFxuICB2YXIgQ09NTUVOVFMgPSB7XG4gICAgdmFyaWFudHM6IFtJU0JMX0xJTkVfQ09NTUVOVF9NT0RFLCBJU0JMX0JMT0NLX0NPTU1FTlRfTU9ERV0sXG4gIH07XG5cbiAgLy8ga2V5d29yZHMgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgYnVpbHRfaW46IEJVSUxUSU4sXG4gICAgY2xhc3M6IENMQVNTLFxuICAgIGxpdGVyYWw6IExJVEVSQUwsXG4gIH07XG5cbiAgLy8gbWV0aG9kcyA6INC80LXRgtC+0LTRi1xuICB2YXIgTUVUSE9EUyA9IHtcbiAgICBiZWdpbjogXCJcXFxcLlxcXFxzKlwiICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG5cbiAgLy8gdHlwZSA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INGC0LjQv9GLXG4gIHZhciBUWVBFUyA9IHtcbiAgICBjbGFzc05hbWU6IFwidHlwZVwiLFxuICAgIGJlZ2luOiBcIjpbIFxcXFx0XSooXCIgKyBpbnRlcmZhY2VzLnRyaW0oKS5yZXBsYWNlKC9cXHMvZywgXCJ8XCIpICsgXCIpXCIsXG4gICAgZW5kOiBcIlsgXFxcXHRdKj1cIixcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICB9O1xuXG4gIC8vIHZhcmlhYmxlcyA6INC/0LXRgNC10LzQtdC90L3Ri9C1XG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZhcmlhYmxlXCIsXG4gICAgbGV4ZW1lczogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbVFlQRVMsIE1FVEhPRFNdLFxuICB9O1xuXG4gIC8vINCY0LzQtdC90LAg0YTRg9C90LrRhtC40LlcbiAgdmFyIEZVTkNUSU9OX1RJVExFID0gRlVOQ1RJT05fTkFNRV9JREVOVF9SRSArIFwiXFxcXChcIjtcblxuICB2YXIgVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBidWlsdF9pbjogc3lzdGVtX2Z1bmN0aW9ucyxcbiAgICB9LFxuICAgIGJlZ2luOiBGVU5DVElPTl9USVRMRSxcbiAgICBlbmQ6IFwiXFxcXChcIixcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICB9O1xuXG4gIC8vIGZ1bmN0aW9uIDog0YTRg9C90LrRhtC40LhcbiAgdmFyIEZVTkNUSU9OUyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZnVuY3Rpb25cIixcbiAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsXG4gICAgZW5kOiBcIlxcXFwpJFwiLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiW1xcXFxbXFxcXF1cXFxcfFxcXFwkXFxcXD8lLH4jQF1cIixcbiAgICBjb250YWluczogW1RJVExFX01PREUsIE1FVEhPRFMsIFZBUklBQkxFUywgU1RSSU5HUywgTlVNQkVSUywgQ09NTUVOVFNdLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogW1wiaXNibFwiXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IFwiXFxcXCR8XFxcXD98JXwsfDskfH58I3xAfDwvXCIsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OUyxcbiAgICAgIFRZUEVTLFxuICAgICAgTUVUSE9EUyxcbiAgICAgIFZBUklBQkxFUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBOVU1CRVJTLFxuICAgICAgQ09NTUVOVFMsXG4gICAgXSxcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBKQVZBX0lERU5UX1JFID0gJ1tcXHUwMEMwLVxcdTAyQjhhLXpBLVpfJF1bXFx1MDBDMC1cXHUwMkI4YS16QS1aXyQwLTldKic7XG4gIHZhciBHRU5FUklDX0lERU5UX1JFID0gSkFWQV9JREVOVF9SRSArICcoPCcgKyBKQVZBX0lERU5UX1JFICsgJyhcXFxccyosXFxcXHMqJyArIEpBVkFfSURFTlRfUkUgKyAnKSo+KT8nO1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHZhciBzdGF0aWMgbnVsbCBpZiBjb25zdCAnICtcbiAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgJyArXG4gICAgJ2VudW0gZWxzZSBicmVhayB0cmFuc2llbnQgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0ICcgK1xuICAgICdwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByb3RlY3RlZCBwdWJsaWMgcHJpdmF0ZSAnICtcbiAgICAnbW9kdWxlIHJlcXVpcmVzIGV4cG9ydHMgZG8nO1xuXG4gIC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS83L2RvY3MvdGVjaG5vdGVzL2d1aWRlcy9sYW5ndWFnZS91bmRlcnNjb3Jlcy1saXRlcmFscy5odG1sXG4gIHZhciBKQVZBX05VTUJFUl9SRSA9ICdcXFxcYicgK1xuICAgICcoJyArXG4gICAgICAnMFtiQl0oWzAxXStbMDFfXStbMDFdK3xbMDFdKyknICsgLy8gMGIuLi5cbiAgICAgICd8JyArXG4gICAgICAnMFt4WF0oW2EtZkEtRjAtOV0rW2EtZkEtRjAtOV9dK1thLWZBLUYwLTldK3xbYS1mQS1GMC05XSspJyArIC8vIDB4Li4uXG4gICAgICAnfCcgK1xuICAgICAgJygnICtcbiAgICAgICAgJyhbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKShcXFxcLihbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKSk/JyArXG4gICAgICAgICd8JyArXG4gICAgICAgICdcXFxcLihbXFxcXGRdK1tcXFxcZF9dK1tcXFxcZF0rfFtcXFxcZF0rKScgK1xuICAgICAgJyknICtcbiAgICAgICcoW2VFXVstK10/XFxcXGQrKT8nICsgLy8gb2N0YWwsIGRlY2ltYWwsIGZsb2F0XG4gICAgJyknICtcbiAgICAnW2xMZkZdPyc7XG4gIHZhciBKQVZBX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IEpBVkFfTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydqc3AnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLzxcXC98Iy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2UgOiAwLFxuICAgICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBlYXQgdXAgQCdzIGluIGVtYWlscyB0byBwcmV2ZW50IHRoZW0gdG8gYmUgcmVjb2duaXplZCBhcyBkb2N0YWdzXG4gICAgICAgICAgICAgIGJlZ2luOiAvXFx3K0AvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6IC9bezs9XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJyxcbiAgICAgICAgaWxsZWdhbDogL1s6XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyB0aHJvdyByZXR1cm4gZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgR0VORVJJQ19JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIEpBVkFfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEZSQUdNRU5UID0ge1xuICAgIGJlZ2luOiAnPD4nLFxuICAgIGVuZDogJzwvPidcbiAgfTtcbiAgdmFyIFhNTF9UQUcgPSB7XG4gICAgYmVnaW46IC88W0EtWmEtejAtOVxcXFwuXzotXSsvLFxuICAgIGVuZDogL1xcL1tBLVphLXowLTlcXFxcLl86LV0rPnxcXC8+L1xuICB9O1xuICB2YXIgSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaW4gb2YgaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoICcgK1xuICAgICAgJ2luc3RhbmNlb2Ygd2l0aCB0aHJvdyBjYXNlIGRlZmF1bHQgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHR5cGVvZiBkZWxldGUgJyArXG4gICAgICAnbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBzdGF0aWMgJyArXG4gICAgICAvLyBFQ01BU2NyaXB0IDYgbW9kdWxlcyBpbXBvcnRcbiAgICAgICdpbXBvcnQgZnJvbSBhcydcbiAgICAsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eScsXG4gICAgYnVpbHRfaW46XG4gICAgICAnZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgJyArXG4gICAgICAnZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgJyArXG4gICAgICAnRXZhbEVycm9yIEludGVybmFsRXJyb3IgUmFuZ2VFcnJvciBSZWZlcmVuY2VFcnJvciBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yICcgK1xuICAgICAgJ1R5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5ICcgK1xuICAgICAgJ0Zsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5ICcgK1xuICAgICAgJ1VpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgQXJyYXlCdWZmZXIgRGF0YVZpZXcgSlNPTiBJbnRsIGFyZ3VtZW50cyByZXF1aXJlICcgK1xuICAgICAgJ21vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCAnICtcbiAgICAgICdQcm9taXNlJ1xuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcYigwW2JCXVswMV0rKW4/JyB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKW4/JyB9LFxuICAgICAgeyBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICduPycgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW10gIC8vIGRlZmluZWQgbGF0ZXJcbiAgfTtcbiAgdmFyIEhUTUxfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdodG1sYCcsIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJywgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgfVxuICB9O1xuICB2YXIgQ1NTX1RFTVBMQVRFID0ge1xuICAgIGJlZ2luOiAnY3NzYCcsIGVuZDogJycsXG4gICAgc3RhcnRzOiB7XG4gICAgICBlbmQ6ICdgJywgcmV0dXJuRW5kOiBmYWxzZSxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgU1VCU1RcbiAgICAgIF0sXG4gICAgICBzdWJMYW5ndWFnZTogJ2NzcycsXG4gICAgfVxuICB9O1xuICB2YXIgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBIVE1MX1RFTVBMQVRFLFxuICAgIENTU19URU1QTEFURSxcbiAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIGhsanMuUkVHRVhQX01PREVcbiAgXTtcbiAgdmFyIFBBUkFNU19DT05UQUlOUyA9IFNVQlNULmNvbnRhaW5zLmNvbmNhdChbXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREVcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2pzJywgJ2pzeCcsICdtanMnLCAnY2pzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eIyEvLCBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBIVE1MX1RFTVBMQVRFLFxuICAgICAgQ1NTX1RFTVBMQVRFLFxuICAgICAgVEVNUExBVEVfU1RSSU5HLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZSA6IDAsXG4gICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJyxcbiAgICAgICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx7JyxcbiAgICAgICAgICAgICAgICAgIGVuZDogJ1xcXFx9JyxcbiAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgICAgYmVnaW46IElERU5UX1JFICsgJyg/PVxcXFxzKigtKXwkKScsXG4gICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBlYXQgc3BhY2VzIChub3QgbmV3bGluZXMpIHNvIHdlIGNhbiBmaW5kXG4gICAgICAgICAgICAgICAgLy8gdHlwZXMgb3IgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46IC8oPz1bXlxcbl0pXFxzLyxcbiAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IC9beyxcXG5dXFxzKi8sIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnYXR0cicsIGJlZ2luOiBJREVOVF9SRSwgcmVsZXZhbmNlOiAwfV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgSURFTlRfUkUgKyAnKVxcXFxzKj0+JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgYmVnaW46IC9cXHMvLFxuICAgICAgICAgICAgZW5kOiAvXFxzKi8sXG4gICAgICAgICAgICBza2lwOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyAvLyBKU1hcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IEZSQUdNRU5ULmJlZ2luLCBlbmQ6IEZSQUdNRU5ULmVuZCB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiBYTUxfVEFHLmJlZ2luLCBlbmQ6IFhNTF9UQUcuZW5kIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFhNTF9UQUcuYmVnaW4sIGVuZDogWE1MX1RBRy5lbmQsIHNraXA6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IElERU5UX1JFfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvXFxbfCUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9LFxuICAgICAgaGxqcy5NRVRIT0RfR1VBUkQsXG4gICAgICB7IC8vIEVTNiBjbGFzc1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsIGVuZDogL1t7Oz1dLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29uc3RydWN0b3IgZ2V0IHNldCcsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jKD8hISkvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIFBBUkFNID0ge1xuICAgIGJlZ2luOiAvW1xcdy1dKyAqPS8sIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW3tjbGFzc05hbWU6ICdhdHRyJywgYmVnaW46IC9bXFx3LV0rL31dXG4gIH07XG4gIHZhciBQQVJBTVNCTE9DSyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbUEFSQU1dLFxuICAgIHJlbGV2YW5jZSA6IDBcbiAgfTtcbiAgdmFyIE9QRVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC86W1xcd1xcLS5dKy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBQQVRIID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXEIoKFtcXC8uXSlbXFx3XFwtLlxcLz1dKykrLyxcbiAgfTtcbiAgdmFyIENPTU1BTkRfUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC8tLVtcXHdcXC09XFwvXSsvLFxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnd2lsZGZseS1jbGknXSxcbiAgICBsZXhlbWVzOiAnW2EtelxcLV0rJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2FsaWFzIGJhdGNoIGNkIGNsZWFyIGNvbW1hbmQgY29ubmVjdCBjb25uZWN0aW9uLWZhY3RvcnkgY29ubmVjdGlvbi1pbmZvIGRhdGEtc291cmNlIGRlcGxveSAnICtcbiAgICAgICdkZXBsb3ltZW50LWluZm8gZGVwbG95bWVudC1vdmVybGF5IGVjaG8gZWNoby1kbXIgaGVscCBoaXN0b3J5IGlmIGpkYmMtZHJpdmVyLWluZm8gam1zLXF1ZXVlfDIwIGptcy10b3BpY3wyMCBscyAnICtcbiAgICAgICdwYXRjaCBwd2QgcXVpdCByZWFkLWF0dHJpYnV0ZSByZWFkLW9wZXJhdGlvbiByZWxvYWQgcm9sbG91dC1wbGFuIHJ1bi1iYXRjaCBzZXQgc2h1dGRvd24gdHJ5IHVuYWxpYXMgJyArXG4gICAgICAndW5kZXBsb3kgdW5zZXQgdmVyc2lvbiB4YS1kYXRhLXNvdXJjZScsIC8vIG1vZHVsZVxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBDT01NQU5EX1BBUkFNUyxcbiAgICAgIE9QRVJBVElPTixcbiAgICAgIFBBVEgsXG4gICAgICBQQVJBTVNCTE9DS1xuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIExJVEVSQUxTID0ge2xpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnfTtcbiAgdmFyIEFMTE9XRURfQ09NTUVOVFMgPSBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgXVxuICB2YXIgVFlQRVMgPSBbXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgXTtcbiAgdmFyIFZBTFVFX0NPTlRBSU5FUiA9IHtcbiAgICBlbmQ6ICcsJywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFRZUEVTLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMU1xuICB9O1xuICB2YXIgT0JKRUNUID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFZBTFVFX0NPTlRBSU5FUiwge2JlZ2luOiAvOi99KVxuICAgIF0uY29uY2F0KEFMTE9XRURfQ09NTUVOVFMpLFxuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgdmFyIEFSUkFZID0ge1xuICAgIGJlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoVkFMVUVfQ09OVEFJTkVSKV0sIC8vIGluaGVyaXQgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyB0aGF0IG1ha2VzIHNoYXJlZCBtb2RlcyB3aXRoIGVuZHNXaXRoUGFyZW50IGNvbXBpbGUgb25seSB0aGUgZW5kaW5nIG9mIG9uZSBvZiB0aGUgcGFyZW50c1xuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgVFlQRVMucHVzaChPQkpFQ1QsIEFSUkFZKTtcbiAgQUxMT1dFRF9DT01NRU5UUy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICBUWVBFUy5wdXNoKHJ1bGUpXG4gIH0pXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFRZUEVTLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMUyxcbiAgICBpbGxlZ2FsOiAnXFxcXFMnXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBTaW5jZSB0aGVyZSBhcmUgbnVtZXJvdXMgc3BlY2lhbCBuYW1lcyBpbiBKdWxpYSwgaXQgaXMgdG9vIG11Y2ggdHJvdWJsZVxuICAvLyB0byBtYWludGFpbiB0aGVtIGJ5IGhhbmQuIEhlbmNlIHRoZXNlIG5hbWVzIChpLmUuIGtleXdvcmRzLCBsaXRlcmFscyBhbmRcbiAgLy8gYnVpbHQtaW5zKSBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKdWxpYSB2MC42IGl0c2VsZiB0aHJvdWdoXG4gIC8vIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBmb3IgZWFjaC5cblxuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgLy8gIyBrZXl3b3JkIGdlbmVyYXRvciwgbXVsdGktd29yZCBrZXl3b3JkcyBoYW5kbGVkIG1hbnVhbGx5IGJlbG93XG4gICAgLy8gZm9yZWFjaChwcmludGxuLCBbXCJpblwiLCBcImlzYVwiLCBcIndoZXJlXCJdKVxuICAgIC8vIGZvciBrdyBpbiBCYXNlLlJFUExDb21wbGV0aW9ucy5jb21wbGV0ZV9rZXl3b3JkKFwiXCIpXG4gICAgLy8gICAgIGlmICEoY29udGFpbnMoa3csIFwiIFwiKSB8fCBrdyA9PSBcInN0cnVjdFwiKVxuICAgIC8vICAgICAgICAgcHJpbnRsbihrdylcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAga2V5d29yZDpcbiAgICAgICdpbiBpc2Egd2hlcmUgJyArXG4gICAgICAnYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uICcgK1xuICAgICAgJ2dsb2JhbCBpZiBpbXBvcnQgaW1wb3J0YWxsIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoaWxlICcgK1xuICAgICAgLy8gbGVnYWN5LCB0byBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IHJlbGVhc2VcbiAgICAgICd0eXBlIGltbXV0YWJsZSBhYnN0cmFjdCBiaXRzdHlwZSB0eXBlYWxpYXMgJyxcblxuICAgIC8vICMgbGl0ZXJhbCBnZW5lcmF0b3JcbiAgICAvLyBwcmludGxuKFwidHJ1ZVwiKVxuICAgIC8vIHByaW50bG4oXCJmYWxzZVwiKVxuICAgIC8vIGZvciBuYW1lIGluIEJhc2UuUkVQTENvbXBsZXRpb25zLmNvbXBsZXRpb25zKFwiXCIsIDApWzFdXG4gICAgLy8gICAgIHRyeVxuICAgIC8vICAgICAgICAgdiA9IGV2YWwoU3ltYm9sKG5hbWUpKVxuICAgIC8vICAgICAgICAgaWYgISh2IGlzYSBGdW5jdGlvbiB8fCB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXIgfHwgdiBpc2EgTW9kdWxlIHx8IHYgaXNhIENvbG9uKVxuICAgIC8vICAgICAgICAgICAgIHByaW50bG4obmFtZSlcbiAgICAvLyAgICAgICAgIGVuZFxuICAgIC8vICAgICBlbmRcbiAgICAvLyBlbmRcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgJyArXG4gICAgICAnQVJHUyBDX05VTEwgRGV2TnVsbCBFTkRJQU5fQk9NIEVOViBJIEluZiBJbmYxNiBJbmYzMiBJbmY2NCBJbnNlcnRpb25Tb3J0IEpVTElBX0hPTUUgTE9BRF9QQVRIIE1lcmdlU29ydCAnICtcbiAgICAgICdOYU4gTmFOMTYgTmFOMzIgTmFONjQgUFJPR1JBTV9GSUxFIFF1aWNrU29ydCBSb3VuZERvd24gUm91bmRGcm9tWmVybyBSb3VuZE5lYXJlc3QgUm91bmROZWFyZXN0VGllc0F3YXkgJyArXG4gICAgICAnUm91bmROZWFyZXN0VGllc1VwIFJvdW5kVG9aZXJvIFJvdW5kVXAgU1RERVJSIFNURElOIFNURE9VVCBWRVJTSU9OIGNhdGFsYW4gZXwwIGV1fDAgZXVsZXJnYW1tYSBnb2xkZW4gaW0gJyArXG4gICAgICAnbm90aGluZyBwaSDOsyDPgCDPhiAnLFxuXG4gICAgLy8gIyBidWlsdF9pbiBnZW5lcmF0b3I6XG4gICAgLy8gZm9yIG5hbWUgaW4gQmFzZS5SRVBMQ29tcGxldGlvbnMuY29tcGxldGlvbnMoXCJcIiwgMClbMV1cbiAgICAvLyAgICAgdHJ5XG4gICAgLy8gICAgICAgICB2ID0gZXZhbChTeW1ib2wobmFtZSkpXG4gICAgLy8gICAgICAgICBpZiB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXJcbiAgICAvLyAgICAgICAgICAgICBwcmludGxuKG5hbWUpXG4gICAgLy8gICAgICAgICBlbmRcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAgYnVpbHRfaW46XG4gICAgICAnQU5ZIEFic3RyYWN0QXJyYXkgQWJzdHJhY3RDaGFubmVsIEFic3RyYWN0RmxvYXQgQWJzdHJhY3RNYXRyaXggQWJzdHJhY3RSTkcgQWJzdHJhY3RTZXJpYWxpemVyIEFic3RyYWN0U2V0ICcgK1xuICAgICAgJ0Fic3RyYWN0U3BhcnNlQXJyYXkgQWJzdHJhY3RTcGFyc2VNYXRyaXggQWJzdHJhY3RTcGFyc2VWZWN0b3IgQWJzdHJhY3RTdHJpbmcgQWJzdHJhY3RVbml0UmFuZ2UgQWJzdHJhY3RWZWNPck1hdCAnICtcbiAgICAgICdBYnN0cmFjdFZlY3RvciBBbnkgQXJndW1lbnRFcnJvciBBcnJheSBBc3NlcnRpb25FcnJvciBBc3NvY2lhdGl2ZSBCYXNlNjREZWNvZGVQaXBlIEJhc2U2NEVuY29kZVBpcGUgQmlkaWFnb25hbCAnK1xuICAgICAgJ0JpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0VmVjdG9yIEJvb2wgQm91bmRzRXJyb3IgQnVmZmVyU3RyZWFtIENhY2hpbmdQb29sIENhcHR1cmVkRXhjZXB0aW9uICcgK1xuICAgICAgJ0NhcnRlc2lhbkluZGV4IENhcnRlc2lhblJhbmdlIENjaGFyIENkb3VibGUgQ2Zsb2F0IENoYW5uZWwgQ2hhciBDaW50IENpbnRtYXhfdCBDbG9uZyBDbG9uZ2xvbmcgQ2x1c3Rlck1hbmFnZXIgJyArXG4gICAgICAnQ21kIENvZGVJbmZvIENvbG9uIENvbXBsZXggQ29tcGxleDEyOCBDb21wbGV4MzIgQ29tcGxleDY0IENvbXBvc2l0ZUV4Y2VwdGlvbiBDb25kaXRpb24gQ29uakFycmF5IENvbmpNYXRyaXggJyArXG4gICAgICAnQ29ualZlY3RvciBDcHRyZGlmZl90IENzaG9ydCBDc2l6ZV90IENzc2l6ZV90IENzdHJpbmcgQ3VjaGFyIEN1aW50IEN1aW50bWF4X3QgQ3Vsb25nIEN1bG9uZ2xvbmcgQ3VzaG9ydCBDd2NoYXJfdCAnICtcbiAgICAgICdDd3N0cmluZyBEYXRhVHlwZSBEYXRlIERhdGVGb3JtYXQgRGF0ZVRpbWUgRGVuc2VBcnJheSBEZW5zZU1hdHJpeCBEZW5zZVZlY09yTWF0IERlbnNlVmVjdG9yIERpYWdvbmFsIERpY3QgJyArXG4gICAgICAnRGltZW5zaW9uTWlzbWF0Y2ggRGltcyBEaXJlY3RJbmRleFN0cmluZyBEaXNwbGF5IERpdmlkZUVycm9yIERvbWFpbkVycm9yIEVPRkVycm9yIEVhY2hMaW5lIEVudW0gRW51bWVyYXRlICcgK1xuICAgICAgJ0Vycm9yRXhjZXB0aW9uIEV4Y2VwdGlvbiBFeHBvbmVudGlhbEJhY2tPZmYgRXhwciBGYWN0b3JpemF0aW9uIEZpbGVNb25pdG9yIEZsb2F0MTYgRmxvYXQzMiBGbG9hdDY0IEZ1bmN0aW9uICcgK1xuICAgICAgJ0Z1dHVyZSBHbG9iYWxSZWYgR290b05vZGUgSFRNTCBIZXJtaXRpYW4gSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElQQWRkciBJUHY0IElQdjYgSW5kZXhDYXJ0ZXNpYW4gSW5kZXhMaW5lYXIgJyArXG4gICAgICAnSW5kZXhTdHlsZSBJbmV4YWN0RXJyb3IgSW5pdEVycm9yIEludCBJbnQxMjggSW50MTYgSW50MzIgSW50NjQgSW50OCBJbnRTZXQgSW50ZWdlciBJbnRlcnJ1cHRFeGNlcHRpb24gJyArXG4gICAgICAnSW52YWxpZFN0YXRlRXhjZXB0aW9uIElycmF0aW9uYWwgS2V5RXJyb3IgTGFiZWxOb2RlIExpblNwYWNlIExpbmVOdW1iZXJOb2RlIExvYWRFcnJvciBMb3dlclRyaWFuZ3VsYXIgTUlNRSBNYXRyaXggJyArXG4gICAgICAnTWVyc2VubmVUd2lzdGVyIE1ldGhvZCBNZXRob2RFcnJvciBNZXRob2RUYWJsZSBNb2R1bGUgTlR1cGxlIE5ld3Zhck5vZGUgTnVsbEV4Y2VwdGlvbiBOdWxsYWJsZSBOdW1iZXIgT2JqZWN0SWREaWN0ICcgK1xuICAgICAgJ09yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJzZUVycm9yIFBhcnRpYWxRdWlja1NvcnQgUGVybXV0ZWREaW1zQXJyYXkgUGlwZSAnICtcbiAgICAgICdQb2xsaW5nRmlsZVdhdGNoZXIgUHJvY2Vzc0V4aXRlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhbmRvbURldmljZSBSYW5nZSBSYW5nZUluZGV4IFJhdGlvbmFsIFJhd0ZEICcgK1xuICAgICAgJ1JlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJlbW90ZUNoYW5uZWwgUmVtb3RlRXhjZXB0aW9uIFJldlN0cmluZyBSb3VuZGluZ01vZGUgJyArXG4gICAgICAnUm93VmVjdG9yIFNTQVZhbHVlIFNlZ21lbnRhdGlvbkZhdWx0IFNlcmlhbGl6YXRpb25TdGF0ZSBTZXQgU2hhcmVkQXJyYXkgU2hhcmVkTWF0cml4IFNoYXJlZFZlY3RvciBTaWduZWQgJyArXG4gICAgICAnU2ltcGxlVmVjdG9yIFNsb3QgU2xvdE51bWJlciBTcGFyc2VNYXRyaXhDU0MgU3BhcnNlVmVjdG9yIFN0YWNrRnJhbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0YWNrVHJhY2UgU3RlcFJhbmdlICcgK1xuICAgICAgJ1N0ZXBSYW5nZUxlbiBTdHJpZGVkQXJyYXkgU3RyaWRlZE1hdHJpeCBTdHJpZGVkVmVjT3JNYXQgU3RyaWRlZFZlY3RvciBTdHJpbmcgU3ViQXJyYXkgU3ViU3RyaW5nIFN5bVRyaWRpYWdvbmFsICcgK1xuICAgICAgJ1N5bWJvbCBTeW1tZXRyaWMgU3lzdGVtRXJyb3IgVENQU29ja2V0IFRhc2sgVGV4dCBUZXh0RGlzcGxheSBUaW1lciBUcmlkaWFnb25hbCBUdXBsZSBUeXBlIFR5cGVFcnJvciBUeXBlTWFwRW50cnkgJyArXG4gICAgICAnVHlwZU1hcExldmVsIFR5cGVOYW1lIFR5cGVWYXIgVHlwZWRTbG90IFVEUFNvY2tldCBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZSZWZFcnJvciBVbmRlZlZhckVycm9yICcgK1xuICAgICAgJ1VuaWNvZGVFcnJvciBVbmlmb3JtU2NhbGluZyBVbmlvbiBVbmlvbkFsbCBVbml0UmFuZ2UgVW5zaWduZWQgVXBwZXJUcmlhbmd1bGFyIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgJyArXG4gICAgICAnVmVyc2lvbk51bWJlciBWb2lkIFdlYWtLZXlEaWN0IFdlYWtSZWYgV29ya2VyQ29uZmlnIFdvcmtlclBvb2wgJ1xuICB9O1xuXG4gIC8vIHJlZjogaHR0cDovL2p1bGlhLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvbWFudWFsL3ZhcmlhYmxlcy8jYWxsb3dlZC12YXJpYWJsZS1uYW1lc1xuICB2YXIgVkFSSUFCTEVfTkFNRV9SRSA9ICdbQS1aYS16X1xcXFx1MDBBMS1cXFxcdUZGRkZdW0EtWmEtel8wLTlcXFxcdTAwQTEtXFxcXHVGRkZGXSonO1xuXG4gIC8vIHBsYWNlaG9sZGVyIGZvciByZWN1cnNpdmUgc2VsZi1yZWZlcmVuY2VcbiAgdmFyIERFRkFVTFQgPSB7XG4gICAgbGV4ZW1lczogVkFSSUFCTEVfTkFNRV9SRSwga2V5d29yZHM6IEtFWVdPUkRTLCBpbGxlZ2FsOiAvPFxcLy9cbiAgfTtcblxuICAvLyByZWY6IGh0dHA6Ly9qdWxpYS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L21hbnVhbC9pbnRlZ2Vycy1hbmQtZmxvYXRpbmctcG9pbnQtbnVtYmVycy9cbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIC8vIHN1cHBvcnRlZCBudW1lcmljIGxpdGVyYWxzOlxuICAgIC8vICAqIGJpbmFyeSBsaXRlcmFsIChlLmcuIDB4MTApXG4gICAgLy8gICogb2N0YWwgbGl0ZXJhbCAoZS5nLiAwbzc2NTQzMjEwKVxuICAgIC8vICAqIGhleGFkZWNpbWFsIGxpdGVyYWwgKGUuZy4gMHhmZWRjYmE4NzY1NDMyMTApXG4gICAgLy8gICogaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCAoZS5nLiAweDFwMCwgMHgxLjJwMilcbiAgICAvLyAgKiBkZWNpbWFsIGxpdGVyYWwgKGUuZy4gOTg3NjU0MzIxMCwgMTAwXzAwMF8wMDApXG4gICAgLy8gICogZmxvYXRpbmcgcG9pbnRlIGxpdGVyYWwgKGUuZy4gMS4yLCAxLjJmLCAuMiwgMS4sIDEuMmUxMCwgMS4yZS0xMClcbiAgICBiZWdpbjogLyhcXGIweFtcXGRfXSooXFwuW1xcZF9dKik/fDB4XFwuXFxkW1xcZF9dKilwWy0rXT9cXGQrfFxcYjBbYm94XVthLWZBLUYwLTldW2EtZkEtRjAtOV9dKnwoXFxiXFxkW1xcZF9dKihcXC5bXFxkX10qKT98XFwuXFxkW1xcZF9dKikoW2VFZkZdWy0rXT9cXGQrKT8vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDSEFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nKC58XFxcXFt4WHVVXVthLXpBLVowLTldKyknL1xuICB9O1xuXG4gIHZhciBJTlRFUlBPTEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG5cbiAgdmFyIElOVEVSUE9MQVRFRF9WQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJCcgKyBWQVJJQUJMRV9OQU1FX1JFXG4gIH07XG5cbiAgLy8gVE9ETzogbmVhdGx5IGVzY2FwZSBub3JtYWwgY29kZSBpbiBzdHJpbmcgbGl0ZXJhbFxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIElOVEVSUE9MQVRJT04sIElOVEVSUE9MQVRFRF9WQVJJQUJMRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHcqXCJcIlwiLywgZW5kOiAvXCJcIlwiXFx3Ki8sIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46IC9cXHcqXCIvLCBlbmQ6IC9cIlxcdyovIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIENPTU1BTkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgSU5URVJQT0xBVElPTiwgSU5URVJQT0xBVEVEX1ZBUklBQkxFXSxcbiAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICB9O1xuXG4gIHZhciBNQUNST0NBTEwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIFZBUklBQkxFX05BTUVfUkVcbiAgfTtcblxuICB2YXIgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJyM9JywgZW5kOiAnPSMnLCByZWxldmFuY2U6IDEwIH0sXG4gICAgICB7IGJlZ2luOiAnIycsIGVuZDogJyQnIH1cbiAgICBdXG4gIH07XG5cbiAgREVGQVVMVC5jb250YWlucyA9IFtcbiAgICBOVU1CRVIsXG4gICAgQ0hBUixcbiAgICBTVFJJTkcsXG4gICAgQ09NTUFORCxcbiAgICBNQUNST0NBTEwsXG4gICAgQ09NTUVOVCxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46XG4gICAgICAgICdcXFxcYigoKGFic3RyYWN0fHByaW1pdGl2ZSlcXFxccyspdHlwZXwobXV0YWJsZVxcXFxzKyk/c3RydWN0KVxcXFxiJ1xuICAgIH0sXG4gICAge2JlZ2luOiAvPDovfSAgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgXTtcbiAgSU5URVJQT0xBVElPTi5jb250YWlucyA9IERFRkFVTFQuY29udGFpbnM7XG5cbiAgcmV0dXJuIERFRkFVTFQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15qdWxpYT4vLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyBlbmQgdGhlIGhpZ2hsaWdodGluZyBpZiB3ZSBhcmUgb24gYSBuZXcgbGluZSBhbmQgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBhdFxuICAgICAgICAgIC8vIGxlYXN0IHNpeCBzcGFjZXMgaW4gdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIGVuZDogL14oPyFbIF17Nn0pLyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ2p1bGlhJ1xuICAgICAgfSxcbiAgICAgIC8vIGpsZG9jdGVzdCBNYXJrZG93biBibG9ja3MgYXJlIHVzZWQgaW4gdGhlIEp1bGlhIG1hbnVhbCBhbmQgcGFja2FnZSBkb2NzIGluZGljYXRlXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkIHdoZW4gdGhlIGRvY3VtZW50YXRpb24gaXMgYnVpbHQuIFRoZXkgY2FuIGJlXG4gICAgICAvLyBlaXRoZXIgUkVQTC1saWtlIG9yIHNjcmlwdC1saWtlLCBidXQgYXJlIHVzdWFsbHkgUkVQTC1saWtlIGFuZCB0aGVyZWZvcmUgd2UgYXBwbHlcbiAgICAgIC8vIGp1bGlhLXJlcGwgaGlnaGxpZ2h0aW5nIHRvIHRoZW0uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIERvY3VtZW50ZXInc1xuICAgICAgLy8gbWFudWFsOiBodHRwczovL2p1bGlhZG9jcy5naXRodWIuaW8vRG9jdW1lbnRlci5qbC9sYXRlc3QvbWFuL2RvY3Rlc3RzLmh0bWxcbiAgICAgIGFsaWFzZXM6IFsnamxkb2N0ZXN0J11cbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFzIHZhbCB2YXIgdmFyYXJnIGdldCBzZXQgY2xhc3Mgb2JqZWN0IG9wZW4gcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIG5vaW5saW5lICcgK1xuICAgICAgJ2Nyb3NzaW5saW5lIGR5bmFtaWMgZmluYWwgZW51bSBpZiBlbHNlIGRvIHdoaWxlIGZvciB3aGVuIHRocm93IHRyeSBjYXRjaCBmaW5hbGx5ICcgK1xuICAgICAgJ2ltcG9ydCBwYWNrYWdlIGlzIGluIGZ1biBvdmVycmlkZSBjb21wYW5pb24gcmVpZmllZCBpbmxpbmUgbGF0ZWluaXQgaW5pdCAnICtcbiAgICAgICdpbnRlcmZhY2UgYW5ub3RhdGlvbiBkYXRhIHNlYWxlZCBpbnRlcm5hbCBpbmZpeCBvcGVyYXRvciBvdXQgYnkgY29uc3RydWN0b3Igc3VwZXIgJyArXG4gICAgICAndGFpbHJlYyB3aGVyZSBjb25zdCBpbm5lciBzdXNwZW5kIHR5cGVhbGlhcyBleHRlcm5hbCBleHBlY3QgYWN0dWFsICcgK1xuICAgICAgLy8gdG8gYmUgZGVsZXRlZCBzb29uXG4gICAgICAndHJhaXQgdm9sYXRpbGUgdHJhbnNpZW50IG5hdGl2ZSBkZWZhdWx0JyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBudWxsJ1xuICB9O1xuICB2YXIgS0VZV09SRFNfV0lUSF9MQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICBiZWdpbjogL1xcYihicmVha3xjb250aW51ZXxyZXR1cm58dGhpcylcXGIvLFxuICAgIHN0YXJ0czoge1xuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgYmVnaW46IC9AXFx3Ky9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcbiAgdmFyIExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnQCdcbiAgfTtcblxuICAvLyBmb3Igc3RyaW5nIHRlbXBsYXRlc1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAnXFxcXCR7JywgZW5kOiAnfScsIGNvbnRhaW5zOiBbaGxqcy5DX05VTUJFUl9NT0RFXVxuICB9O1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLCBiZWdpbjogJ1xcXFwkJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCIoPz1bXlwiXSknLFxuICAgICAgICBjb250YWluczogW1ZBUklBQkxFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICAvLyBDYW4ndCB1c2UgYnVpbHQtaW4gbW9kZXMgZWFzaWx5LCBhcyB3ZSB3YW50IHRvIHVzZSBTVFJJTkcgaW4gdGhlIG1ldGFcbiAgICAgIC8vIGNvbnRleHQgYXMgJ21ldGEtc3RyaW5nJyBhbmQgdGhlcmUncyBubyBzeW50YXggdG8gcmVtb3ZlIGV4cGxpY2l0bHkgc2V0XG4gICAgICAvLyBjbGFzc05hbWVzIGluIGJ1aWx0LWluIG1vZGVzLlxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEUsIFNVQlNUXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMucHVzaChTVFJJTkcpXG5cbiAgdmFyIEFOTk9UQVRJT05fVVNFX1NJVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQCg/OmZpbGV8cHJvcGVydHl8ZmllbGR8Z2V0fHNldHxyZWNlaXZlcnxwYXJhbXxzZXRwYXJhbXxkZWxlZ2F0ZSlcXFxccyo6KD86XFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICcpPydcbiAgfTtcbiAgdmFyIEFOTk9UQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQCcgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChTVFJJTkcsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIC8vIGh0dHBzOi8va290bGlubGFuZy5vcmcvZG9jcy9yZWZlcmVuY2Uvd2hhdHNuZXcxMS5odG1sI3VuZGVyc2NvcmVzLWluLW51bWVyaWMtbGl0ZXJhbHNcbiAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2MgYWJvdmUsIHRoZSBudW1iZXIgbW9kZSBvZiBrb3RsaW4gaXMgdGhlIHNhbWUgYXMgamF2YSA4LFxuICAvLyBzbyB0aGUgY29kZSBiZWxvdyBpcyBjb3BpZWQgZnJvbSBqYXZhLmpzXG4gIHZhciBLT1RMSU5fTlVNQkVSX1JFID0gJ1xcXFxiJyArXG4gICAgJygnICtcbiAgICAgICcwW2JCXShbMDFdK1swMV9dK1swMV0rfFswMV0rKScgKyAvLyAwYi4uLlxuICAgICAgJ3wnICtcbiAgICAgICcwW3hYXShbYS1mQS1GMC05XStbYS1mQS1GMC05X10rW2EtZkEtRjAtOV0rfFthLWZBLUYwLTldKyknICsgLy8gMHguLi5cbiAgICAgICd8JyArXG4gICAgICAnKCcgK1xuICAgICAgICAnKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspKFxcXFwuKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspKT8nICtcbiAgICAgICAgJ3wnICtcbiAgICAgICAgJ1xcXFwuKFtcXFxcZF0rW1xcXFxkX10rW1xcXFxkXSt8W1xcXFxkXSspJyArXG4gICAgICAnKScgK1xuICAgICAgJyhbZUVdWy0rXT9cXFxcZCspPycgKyAvLyBvY3RhbCwgZGVjaW1hbCwgZmxvYXRcbiAgICAnKScgK1xuICAgICdbbExmRl0/JztcbiAgdmFyIEtPVExJTl9OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBLT1RMSU5fTlVNQkVSX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgS09UTElOX05FU1RFRF9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICcvXFxcXConLCAnXFxcXCovJyxcbiAgICB7IGNvbnRhaW5zOiBbIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUgXSB9XG4gICk7XG4gIHZhciBLT1RMSU5fUEFSRU5fVFlQRSA9IHtcbiAgICB2YXJpYW50czogW1xuXHQgIHsgY2xhc3NOYW1lOiAndHlwZScsXG5cdCAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG5cdCAgfSxcblx0ICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcblx0ICAgIGNvbnRhaW5zOiBbXSAvL2RlZmluZWQgbGF0ZXJcblx0ICB9XG5cdF1cbiAgfTtcbiAgdmFyIEtPVExJTl9QQVJFTl9UWVBFMiA9IEtPVExJTl9QQVJFTl9UWVBFO1xuICBLT1RMSU5fUEFSRU5fVFlQRTIudmFyaWFudHNbMV0uY29udGFpbnMgPSBbIEtPVExJTl9QQVJFTl9UWVBFIF07XG4gIEtPVExJTl9QQVJFTl9UWVBFLnZhcmlhbnRzWzFdLmNvbnRhaW5zID0gWyBLT1RMSU5fUEFSRU5fVFlQRTIgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsna3QnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnMgOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFt7XG4gICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgIEtFWVdPUkRTX1dJVEhfTEFCRUwsXG4gICAgICBMQUJFTCxcbiAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICBBTk5PVEFUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW4nLCBlbmQ6ICdbKF18JCcsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGlsbGVnYWw6IC9mdW5cXHMrKDwuKj4pP1teXFxzXFwoXSsoXFxzK1teXFxzXFwoXSspXFxzKj0vLFxuICAgICAgICByZWxldmFuY2U6IDUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi8sIGtleXdvcmRzOiAncmVpZmllZCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvOi8sIGVuZDogL1s9LFxcL10vLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAgS09UTElOX1BBUkVOX1RZUEUsXG4gICAgICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgICAgICBLT1RMSU5fTkVTVEVEX0NPTU1FTlRcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVCxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTl9VU0VfU0lURSxcbiAgICAgICAgICAgICAgQU5OT1RBVElPTixcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEtPVExJTl9ORVNURURfQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgdHJhaXQnLCBlbmQ6IC9bOlxceyhdfCQvLCAvLyByZW1vdmUgJ3RyYWl0JyB3aGVuIHJlbW92ZWQgZnJvbSBLRVlXT1JEU1xuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ3B1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3Rvcid9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi8sIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogL1ssOl1cXHMqLywgZW5kOiAvWzxcXCgsXXwkLywgZXhjbHVkZUJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICAgICAgQU5OT1RBVElPTlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IFwiXiMhL3Vzci9iaW4vZW52XCIsIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgfSxcbiAgICAgIEtPVExJTl9OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBMQVNTT19JREVOVF9SRSA9ICdbYS16QS1aX11bXFxcXHcuXSonO1xuICB2YXIgTEFTU09fQU5HTEVfUkUgPSAnPFxcXFw/KGxhc3NvKHNjcmlwdCk/fD0pJztcbiAgdmFyIExBU1NPX0NMT1NFX1JFID0gJ1xcXFxdfFxcXFw/Pic7XG4gIHZhciBMQVNTT19LRVlXT1JEUyA9IHtcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2Ugbm9uZSBtaW5pbWFsIGZ1bGwgYWxsIHZvaWQgYW5kIG9yIG5vdCAnICtcbiAgICAgICdidyBuYncgZXcgbmV3IGNuIG5jbiBsdCBsdGUgZ3QgZ3RlIGVxIG5lcSByeCBucnggZnQnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FycmF5IGRhdGUgZGVjaW1hbCBkdXJhdGlvbiBpbnRlZ2VyIG1hcCBwYWlyIHN0cmluZyB0YWcgeG1sIG51bGwgJyArXG4gICAgICAnYm9vbGVhbiBieXRlcyBrZXl3b3JkIGxpc3QgbG9jYWxlIHF1ZXVlIHNldCBzdGFjayBzdGF0aWNhcnJheSAnICtcbiAgICAgICdsb2NhbCB2YXIgdmFyaWFibGUgZ2xvYmFsIGRhdGEgc2VsZiBpbmhlcml0ZWQgY3VycmVudGNhcHR1cmUgZ2l2ZW5ibG9jaycsXG4gICAga2V5d29yZDpcbiAgICAgICdjYWNoZSBkYXRhYmFzZV9uYW1lcyBkYXRhYmFzZV9zY2hlbWFuYW1lcyBkYXRhYmFzZV90YWJsZW5hbWVzICcgK1xuICAgICAgJ2RlZmluZV90YWcgZGVmaW5lX3R5cGUgZW1haWxfYmF0Y2ggZW5jb2RlX3NldCBodG1sX2NvbW1lbnQgaGFuZGxlICcgK1xuICAgICAgJ2hhbmRsZV9lcnJvciBoZWFkZXIgaWYgaW5saW5lIGl0ZXJhdGUgbGpheF90YXJnZXQgbGluayAnICtcbiAgICAgICdsaW5rX2N1cnJlbnRhY3Rpb24gbGlua19jdXJyZW50Z3JvdXAgbGlua19jdXJyZW50cmVjb3JkIGxpbmtfZGV0YWlsICcgK1xuICAgICAgJ2xpbmtfZmlyc3Rncm91cCBsaW5rX2ZpcnN0cmVjb3JkIGxpbmtfbGFzdGdyb3VwIGxpbmtfbGFzdHJlY29yZCAnICtcbiAgICAgICdsaW5rX25leHRncm91cCBsaW5rX25leHRyZWNvcmQgbGlua19wcmV2Z3JvdXAgbGlua19wcmV2cmVjb3JkIGxvZyAnICtcbiAgICAgICdsb29wIG5hbWVzcGFjZV91c2luZyBvdXRwdXRfbm9uZSBwb3J0YWwgcHJpdmF0ZSBwcm90ZWN0IHJlY29yZHMgJyArXG4gICAgICAncmVmZXJlciByZWZlcnJlciByZXBlYXRpbmcgcmVzdWx0c2V0IHJvd3Mgc2VhcmNoX2FyZ3MgJyArXG4gICAgICAnc2VhcmNoX2FyZ3VtZW50cyBzZWxlY3Qgc29ydF9hcmdzIHNvcnRfYXJndW1lbnRzIHRocmVhZF9hdG9taWMgJyArXG4gICAgICAndmFsdWVfbGlzdCB3aGlsZSBhYm9ydCBjYXNlIGVsc2UgZmFpbF9pZiBmYWlsX2lmbm90IGZhaWwgaWZfZW1wdHkgJyArXG4gICAgICAnaWZfZmFsc2UgaWZfbnVsbCBpZl90cnVlIGxvb3BfYWJvcnQgbG9vcF9jb250aW51ZSBsb29wX2NvdW50IHBhcmFtcyAnICtcbiAgICAgICdwYXJhbXNfdXAgcmV0dXJuIHJldHVybl92YWx1ZSBydW5fY2hpbGRyZW4gc29hcF9kZWZpbmV0YWcgJyArXG4gICAgICAnc29hcF9sYXN0cmVxdWVzdCBzb2FwX2xhc3RyZXNwb25zZSB0YWdfbmFtZSBhc2NlbmRpbmcgYXZlcmFnZSBieSAnICtcbiAgICAgICdkZWZpbmUgZGVzY2VuZGluZyBkbyBlcXVhbHMgZnJvemVuIGdyb3VwIGhhbmRsZV9mYWlsdXJlIGltcG9ydCBpbiAnICtcbiAgICAgICdpbnRvIGpvaW4gbGV0IG1hdGNoIG1heCBtaW4gb24gb3JkZXIgcGFyZW50IHByb3RlY3RlZCBwcm92aWRlIHB1YmxpYyAnICtcbiAgICAgICdyZXF1aXJlIHJldHVybmhvbWUgc2tpcCBzcGxpdF90aHJlYWQgc3VtIHRha2UgdGhyZWFkIHRvIHRyYWl0IHR5cGUgJyArXG4gICAgICAnd2hlcmUgd2l0aCB5aWVsZCB5aWVsZGhvbWUnXG4gIH07XG4gIHZhciBIVE1MX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzwhLS0nLFxuICAgICctLT4nLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIExBU1NPX05PUFJPQ0VTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ1xcXFxbbm9wcm9jZXNzXFxcXF0nLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnXFxcXFsvbm9wcm9jZXNzXFxcXF0nLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgfVxuICB9O1xuICB2YXIgTEFTU09fU1RBUlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdcXFxcWy9ub3Byb2Nlc3N8JyArIExBU1NPX0FOR0xFX1JFXG4gIH07XG4gIHZhciBMQVNTT19EQVRBTUVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCcnICsgTEFTU09fSURFTlRfUkUgKyAnXFwnJ1xuICB9O1xuICB2YXIgTEFTU09fQ09ERSA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLCB7YmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnfCgtP2luZmluaXR5fE5hTilcXFxcYid9KSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICAgIH0sXG4gICAgeyAvLyB2YXJpYWJsZXNcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1sjJF0nICsgTEFTU09fSURFTlRfUkVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnIycsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnOjpcXFxccyonLCBlbmQ6IExBU1NPX0lERU5UX1JFLFxuICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJy0oPyFpbmZpbml0eSknICsgTEFTU09fSURFTlRfUkUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJyhcXFxcLlxcXFwuXFxcXC4pJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogLygtPnxcXC4pXFxzKi8sXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW0xBU1NPX0RBVEFNRU1CRVJdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJyxcbiAgICAgIHJldHVybkVuZDogdHJ1ZSwgZW5kOiAnXFxcXCh8PT4nLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBMQVNTT19JREVOVF9SRSArICcoPSg/IT4pKT98Wy0rKi8lXSg/IT4pJ30pXG4gICAgICBdXG4gICAgfVxuICBdO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbHMnLCAnbGFzc29zY3JpcHQnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IExBU1NPX0lERU5UX1JFICsgJ3wmW2xnXXQ7JyxcbiAgICBrZXl3b3JkczogTEFTU09fS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiBMQVNTT19DTE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IHsgLy8gbWFya3VwXG4gICAgICAgICAgZW5kOiAnXFxcXFt8JyArIExBU1NPX0FOR0xFX1JFLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBMQVNTT19OT1BST0NFU1MsXG4gICAgICBMQVNTT19TVEFSVCxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXFtub19zcXVhcmVfYnJhY2tldHMnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICdcXFxcWy9ub19zcXVhcmVfYnJhY2tldHNcXFxcXScsIC8vIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgbGFuZ3VhZ2VcbiAgICAgICAgICBsZXhlbWVzOiBMQVNTT19JREVOVF9SRSArICd8JltsZ110OycsXG4gICAgICAgICAga2V5d29yZHM6IExBU1NPX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogTEFTU09fQ0xPU0VfUkUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXFtub3Byb2Nlc3NcXFxcXXwnICsgTEFTU09fQU5HTEVfUkUsXG4gICAgICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbSFRNTF9DT01NRU5UXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTEFTU09fTk9QUk9DRVNTLFxuICAgICAgICAgICAgTEFTU09fU1RBUlRcbiAgICAgICAgICBdLmNvbmNhdChMQVNTT19DT0RFKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMhJywgZW5kOidsYXNzbzkkJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF0uY29uY2F0KExBU1NPX0NPREUpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXmRuJywgZW5kOiAnOiAnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdGFydHM6IHtlbmQ6ICckJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHcnLCBlbmQ6ICc6ICcsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN0YXJ0czoge2VuZDogJyQnLCByZWxldmFuY2U6IDB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdeLScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICcjKycgKyAnW0EtWmEtel8wLTldKicgKyAnXFxcXCgnLFxuICAgICAgICBlbmQ6JyB7JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICcjKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSAgICAgICAgPSAnW1xcXFx3LV0rJzsgLy8geWVzLCBMZXNzIGlkZW50aWZpZXJzIG1heSBiZWdpbiB3aXRoIGEgZGlnaXRcbiAgdmFyIElOVEVSUF9JREVOVF9SRSA9ICcoJyArIElERU5UX1JFICsgJ3xAeycgKyBJREVOVF9SRSArICd9KSc7XG5cbiAgLyogR2VuZXJpYyBNb2RlcyAqL1xuXG4gIHZhciBSVUxFUyA9IFtdLCBWQUxVRSA9IFtdOyAvLyBmb3J3YXJkIGRlZi4gZm9yIHJlY3Vyc2l2ZSBtb2Rlc1xuXG4gIHZhciBTVFJJTkdfTU9ERSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIHtcbiAgICAvLyBMZXNzIHN0cmluZ3MgYXJlIG5vdCBtdWx0aWxpbmUgKGFsc28gaW5jbHVkZSAnficgZm9yIG1vcmUgY29uc2lzdGVudCBjb2xvcmluZyBvZiBcImVzY2FwZWRcIiBzdHJpbmdzKVxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAnfj8nICsgYyArICcuKj8nICsgY1xuICB9O307XG5cbiAgdmFyIElERU5UX01PREUgPSBmdW5jdGlvbihuYW1lLCBiZWdpbiwgcmVsZXZhbmNlKSB7IHJldHVybiB7XG4gICAgY2xhc3NOYW1lOiBuYW1lLCBiZWdpbjogYmVnaW4sIHJlbGV2YW5jZTogcmVsZXZhbmNlXG4gIH07fTtcblxuICB2YXIgUEFSRU5TX01PREUgPSB7XG4gICAgLy8gdXNlZCBvbmx5IHRvIHByb3Blcmx5IGJhbGFuY2UgbmVzdGVkIHBhcmVucyBpbnNpZGUgbWl4aW4gY2FsbCwgZGVmLiBhcmcgbGlzdFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiBWQUxVRSwgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLy8gZ2VuZXJpYyBMZXNzIGhpZ2hsaWdodGVyICh1c2VkIGFsbW9zdCBldmVyeXdoZXJlIGV4Y2VwdCBzZWxlY3RvcnMpOlxuICBWQUxVRS5wdXNoKFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIFNUUklOR19NT0RFKFwiJ1wiKSxcbiAgICBTVFJJTkdfTU9ERSgnXCInKSxcbiAgICBobGpzLkNTU19OVU1CRVJfTU9ERSwgLy8gZml4bWU6IGl0IGRvZXMgbm90IGluY2x1ZGUgZG90IGZvciBudW1iZXJzIGxpa2UgLjVlbSA6KFxuICAgIHtcbiAgICAgIGJlZ2luOiAnKHVybHxkYXRhLXVyaSlcXFxcKCcsXG4gICAgICBzdGFydHM6IHtjbGFzc05hbWU6ICdzdHJpbmcnLCBlbmQ6ICdbXFxcXClcXFxcbl0nLCBleGNsdWRlRW5kOiB0cnVlfVxuICAgIH0sXG4gICAgSURFTlRfTU9ERSgnbnVtYmVyJywgJyNbMC05QS1GYS1mXStcXFxcYicpLFxuICAgIFBBUkVOU19NT0RFLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0BAPycgKyBJREVOVF9SRSwgMTApLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksXG4gICAgSURFTlRfTU9ERSgnYnVpbHRfaW4nLCAnfj9gW15gXSo/YCcpLCAvLyBpbmxpbmUgamF2YXNjcmlwdCAob3Igd2hhdGV2ZXIgaG9zdCBsYW5ndWFnZSkgKm11bHRpbGluZSogc3RyaW5nXG4gICAgeyAvLyBAbWVkaWEgZmVhdHVyZXMgKGl04oCZcyBoZXJlIHRvIG5vdCBkdXBsaWNhdGUgdGhpbmdzIGluIEFUX1JVTEVfTU9ERSB3aXRoIGV4dHJhIFBBUkVOU19NT0RFIG92ZXJyaWRpbmcpOlxuICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJywgYmVnaW46IElERU5UX1JFICsgJ1xcXFxzKjonLCBlbmQ6ICc6JywgcmV0dXJuQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH1cbiAgKTtcblxuICB2YXIgVkFMVUVfV0lUSF9SVUxFU0VUUyA9IFZBTFVFLmNvbmNhdCh7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsIGNvbnRhaW5zOiBSVUxFU1xuICB9KTtcblxuICB2YXIgTUlYSU5fR1VBUkRfTU9ERSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnd2hlbicsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luS2V5d29yZHM6ICdhbmQgbm90J31dLmNvbmNhdChWQUxVRSkgLy8gdXNpbmcgdGhpcyBmb3JtIHRvIG92ZXJyaWRlIFZBTFVF4oCZcyAnZnVuY3Rpb24nIG1hdGNoXG4gIH07XG5cbiAgLyogUnVsZS1MZXZlbCBNb2RlcyAqL1xuXG4gIHZhciBSVUxFX01PREUgPSB7XG4gICAgYmVnaW46IElOVEVSUF9JREVOVF9SRSArICdcXFxccyo6JywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJ1s7fV0nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGlsbGVnYWw6ICdbPD0kXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBWQUxVRVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBVF9SVUxFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAKGltcG9ydHxtZWRpYXxjaGFyc2V0fGZvbnQtZmFjZXwoLVthLXpdKy0pP2tleWZyYW1lc3xzdXBwb3J0c3xkb2N1bWVudHxuYW1lc3BhY2V8cGFnZXx2aWV3cG9ydHxob3N0KVxcXFxiJyxcbiAgICBzdGFydHM6IHtlbmQ6ICdbO3t9XScsIHJldHVybkVuZDogdHJ1ZSwgY29udGFpbnM6IFZBTFVFLCByZWxldmFuY2U6IDB9XG4gIH07XG5cbiAgLy8gdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIGNhbGxzXG4gIHZhciBWQVJfUlVMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gdXNpbmcgbW9yZSBzdHJpY3QgcGF0dGVybiBmb3IgaGlnaGVyIHJlbGV2YW5jZSB0byBpbmNyZWFzZSBjaGFuY2VzIG9mIExlc3MgZGV0ZWN0aW9uLlxuICAgICAgLy8gdGhpcyBpcyAqdGhlIG9ubHkqIExlc3Mgc3BlY2lmaWMgc3RhdGVtZW50IHVzZWQgaW4gbW9zdCBvZiB0aGUgc291cmNlcywgc28uLi5cbiAgICAgIC8vICh3ZeKAmWxsIHN0aWxsIG9mdGVuIGxvb3NlIHRvIHRoZSBjc3MtcGFyc2VyIHVubGVzcyB0aGVyZSdzICcvLycgY29tbWVudCxcbiAgICAgIC8vIHNpbXBseSBiZWNhdXNlIDEgdmFyaWFibGUganVzdCBjYW4ndCBiZWF0IDk5IHByb3BlcnRpZXMgOilcbiAgICAgIHtiZWdpbjogJ0AnICsgSURFTlRfUkUgKyAnXFxcXHMqOicsIHJlbGV2YW5jZTogMTV9LFxuICAgICAge2JlZ2luOiAnQCcgKyBJREVOVF9SRX1cbiAgICBdLFxuICAgIHN0YXJ0czoge2VuZDogJ1s7fV0nLCByZXR1cm5FbmQ6IHRydWUsIGNvbnRhaW5zOiBWQUxVRV9XSVRIX1JVTEVTRVRTfVxuICB9O1xuXG4gIHZhciBTRUxFQ1RPUl9NT0RFID0ge1xuICAgIC8vIGZpcnN0IHBhcnNlIHVuYW1iaWd1b3VzIHNlbGVjdG9ycyAoaS5lLiB0aG9zZSBub3Qgc3RhcnRpbmcgd2l0aCB0YWcpXG4gICAgLy8gdGhlbiBmYWxsIGludG8gdGhlIHNjYXJ5IGxvb2thaGVhZC1kaXNjcmltaW5hdG9yIHZhcmlhbnQuXG4gICAgLy8gdGhpcyBtb2RlIGFsc28gaGFuZGxlcyBtaXhpbiBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAnW1xcXFwuIzomXFxcXFs+XScsIGVuZDogJ1s7e31dJyAgLy8gbWl4aW4gY2FsbHMgZW5kIHdpdGggJzsnXG4gICAgICB9LCB7XG4gICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICd7J1xuICAgIH1dLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJldHVybkVuZDogICB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPD1cXCckXCJdJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBNSVhJTl9HVUFSRF9NT0RFLFxuICAgICAgSURFTlRfTU9ERSgna2V5d29yZCcsICAnYWxsXFxcXGInKSxcbiAgICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksICAgICAvLyBvdGhlcndpc2UgaXTigJlzIGlkZW50aWZpZWQgYXMgdGFnXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgSU5URVJQX0lERU5UX1JFICsgJyU/JywgMCksIC8vICclJyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIEBrZXlmcmFtZXMgXCJ0YWdzXCJcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWlkJywgJyMnICsgSU5URVJQX0lERU5UX1JFKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWNsYXNzJywgJ1xcXFwuJyArIElOVEVSUF9JREVOVF9SRSwgMCksXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgJyYnLCAwKSxcbiAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJywgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJ30sXG4gICAgICB7Y2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJywgYmVnaW46IC86KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcIicuXSsvfSxcbiAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU30sIC8vIGFyZ3VtZW50IGxpc3Qgb2YgcGFyYW1ldHJpYyBtaXhpbnNcbiAgICAgIHtiZWdpbjogJyFpbXBvcnRhbnQnfSAvLyBlYXQgIWltcG9ydGFudCBhZnRlciBtaXhpbiBjYWxsIG9yIGl0IHdpbGwgYmUgY29sb3JlZCBhcyB0YWdcbiAgICBdXG4gIH07XG5cbiAgUlVMRVMucHVzaChcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBBVF9SVUxFX01PREUsXG4gICAgVkFSX1JVTEVfTU9ERSxcbiAgICBSVUxFX01PREUsXG4gICAgU0VMRUNUT1JfTU9ERVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnWz0+XFwnLzwoJFwiXScsXG4gICAgY29udGFpbnM6IFJVTEVTXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTElTUF9JREVOVF9SRSA9ICdbYS16QS1aX1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcI11bYS16QS1aMC05X1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcIyFdKic7XG4gIHZhciBNRUNfUkUgPSAnXFxcXHxbXl0qP1xcXFx8JztcbiAgdmFyIExJU1BfU0lNUExFX05VTUJFUl9SRSA9ICcoXFxcXC18XFxcXCspP1xcXFxkKyhcXFxcLlxcXFxkK3xcXFxcL1xcXFxkKyk/KChkfGV8ZnxsfHN8RHxFfEZ8THxTKShcXFxcK3xcXFxcLSk/XFxcXGQrKT8nO1xuICB2YXIgU0hFQkFORyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsIGVuZDogJyQnXG4gIH07XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAnXFxcXGIodHsxfXxuaWwpXFxcXGInXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiBMSVNQX1NJTVBMRV9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMH0sXG4gICAgICB7YmVnaW46ICcjKGJ8QilbMC0xXSsoL1swLTFdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKG98TylbMC03XSsoL1swLTddKyk/J30sXG4gICAgICB7YmVnaW46ICcjKHh8WClbMC05YS1mQS1GXSsoL1swLTlhLWZBLUZdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKGN8QylcXFxcKCcgKyBMSVNQX1NJTVBMRV9OVU1CRVJfUkUgKyAnICsnICsgTElTUF9TSU1QTEVfTlVNQkVSX1JFLCBlbmQ6ICdcXFxcKSd9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JywgJyQnLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGJlZ2luOiAnXFxcXConLCBlbmQ6ICdcXFxcKidcbiAgfTtcbiAgdmFyIEtFWVdPUkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1s6Jl0nICsgTElTUF9JREVOVF9SRVxuICB9O1xuICB2YXIgSURFTlQgPSB7XG4gICAgYmVnaW46IExJU1BfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBNRUMgPSB7XG4gICAgYmVnaW46IE1FQ19SRVxuICB9O1xuICB2YXIgUVVPVEVEX0xJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogWydzZWxmJywgTElURVJBTCwgU1RSSU5HLCBOVU1CRVIsIElERU5UXVxuICB9O1xuICB2YXIgUVVPVEVEID0ge1xuICAgIGNvbnRhaW5zOiBbTlVNQkVSLCBTVFJJTkcsIFZBUklBQkxFLCBLRVlXT1JELCBRVU9URURfTElTVCwgSURFTlRdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW1xcJ2BdXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXChxdW90ZSAnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGtleXdvcmRzOiB7bmFtZTogJ3F1b3RlJ31cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnJyArIE1FQ19SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFRF9BVE9NID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXCcnICsgTElTUF9JREVOVF9SRX0sXG4gICAgICB7YmVnaW46ICcjXFwnJyArIExJU1BfSURFTlRfUkUgKyAnKDo6JyArIExJU1BfSURFTlRfUkUgKyAnKSonfVxuICAgIF1cbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKFxcXFxzKicsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgTElTVC5jb250YWlucyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtiZWdpbjogTElTUF9JREVOVF9SRX0sXG4gICAgICAgIHtiZWdpbjogTUVDX1JFfVxuICAgICAgXVxuICAgIH0sXG4gICAgQk9EWVxuICBdO1xuICBCT0RZLmNvbnRhaW5zID0gW1FVT1RFRCwgUVVPVEVEX0FUT00sIExJU1QsIExJVEVSQUwsIE5VTUJFUiwgU1RSSU5HLCBDT01NRU5ULCBWQVJJQUJMRSwgS0VZV09SRCwgTUVDLCBJREVOVF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSLFxuICAgICAgU0hFQkFORyxcbiAgICAgIExJVEVSQUwsXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgUVVPVEVELFxuICAgICAgUVVPVEVEX0FUT00sXG4gICAgICBMSVNULFxuICAgICAgSURFTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxcYihbZ3Rwc11bQS1aXXsxfVthLXpBLVowLTldKikoXFxcXFsuK1xcXFxdKT8oPzpcXFxccyo/KSd9LFxuICAgICAge2JlZ2luOiAnXFxcXCRfW0EtWl0rJ31cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgaGxqcy5DT01NRU5UKCdbXjpdLy8nLCAnJCcpXG4gIF07XG4gIHZhciBUSVRMRTEgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJ1xcXFxiXypyaWdbQS1aXStbQS1aYS16MC05X1xcXFwtXSonfSxcbiAgICAgIHtiZWdpbjogJ1xcXFxiX1thLXowLTlcXFxcLV0rJ31cbiAgICBdXG4gIH0pO1xuICB2YXIgVElUTEUyID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnXFxcXGIoW0EtWmEtejAtOV9cXFxcLV0rKVxcXFxiJ30pO1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnJF9DT09LSUUgJF9GSUxFUyAkX0dFVCAkX0dFVF9CSU5BUlkgJF9HRVRfUkFXICRfUE9TVCAkX1BPU1RfQklOQVJZICRfUE9TVF9SQVcgJF9TRVNTSU9OICRfU0VSVkVSICcgK1xuICAgICAgICAnY29kZXBvaW50IGNvZGVwb2ludHMgc2VnbWVudCBzZWdtZW50cyBjb2RldW5pdCBjb2RldW5pdHMgc2VudGVuY2Ugc2VudGVuY2VzIHRydWVXb3JkIHRydWVXb3JkcyBwYXJhZ3JhcGggJyArXG4gICAgICAgICdhZnRlciBieXRlIGJ5dGVzIGVuZ2xpc2ggdGhlIHVudGlsIGh0dHAgZm9yZXZlciBkZXNjZW5kaW5nIHVzaW5nIGxpbmUgcmVhbDggd2l0aCBzZXZlbnRoICcgK1xuICAgICAgICAnZm9yIHN0ZG91dCBmaW5hbGx5IGVsZW1lbnQgd29yZCB3b3JkcyBmb3VydGggYmVmb3JlIGJsYWNrIG5pbnRoIHNpeHRoIGNoYXJhY3RlcnMgY2hhcnMgc3RkZXJyICcgK1xuICAgICAgICAndUludDEgdUludDFzIHVJbnQyIHVJbnQycyBzdGRpbiBzdHJpbmcgbGluZXMgcmVsYXRpdmUgcmVsIGFueSBmaWZ0aCBpdGVtcyBmcm9tIG1pZGRsZSBtaWQgJyArXG4gICAgICAgICdhdCBlbHNlIG9mIGNhdGNoIHRoZW4gdGhpcmQgaXQgZmlsZSBtaWxsaXNlY29uZHMgc2Vjb25kcyBzZWNvbmQgc2VjcyBzZWMgaW50MSBpbnQxcyBpbnQ0ICcgK1xuICAgICAgICAnaW50NHMgaW50ZXJuZXQgaW50MiBpbnQycyBub3JtYWwgdGV4dCBpdGVtIGxhc3QgbG9uZyBkZXRhaWxlZCBlZmZlY3RpdmUgdUludDQgdUludDRzIHJlcGVhdCAnICtcbiAgICAgICAgJ2VuZCByZXBlYXQgVVJMIGluIHRyeSBpbnRvIHN3aXRjaCB0byB3b3JkcyBodHRwcyB0b2tlbiBiaW5maWxlIGVhY2ggdGVudGggYXMgdGlja3MgdGljayAnICtcbiAgICAgICAgJ3N5c3RlbSByZWFsNCBieSBkYXRlSXRlbXMgd2l0aG91dCBjaGFyIGNoYXJhY3RlciBhc2NlbmRpbmcgZWlnaHRoIHdob2xlIGRhdGVUaW1lIG51bWVyaWMgc2hvcnQgJyArXG4gICAgICAgICdmaXJzdCBmdHAgaW50ZWdlciBhYmJyZXZpYXRlZCBhYmJyIGFiYnJldiBwcml2YXRlIGNhc2Ugd2hpbGUgaWYgJyArXG4gICAgICAgICdkaXYgbW9kIHdyYXAgYW5kIG9yIGJpdEFuZCBiaXROb3QgYml0T3IgYml0WG9yIGFtb25nIG5vdCBpbiBhIGFuIHdpdGhpbiAnICtcbiAgICAgICAgJ2NvbnRhaW5zIGVuZHMgd2l0aCBiZWdpbnMgdGhlIGtleXMgb2Yga2V5cycsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnU0lYIFRFTiBGT1JNRkVFRCBOSU5FIFpFUk8gTk9ORSBTUEFDRSBGT1VSIEZBTFNFIENPTE9OIENSTEYgUEkgQ09NTUEgRU5ET0ZGSUxFIEVPRiBFSUdIVCBGSVZFICcgK1xuICAgICAgICAnUVVPVEUgRU1QVFkgT05FIFRSVUUgUkVUVVJOIENSIExJTkVGRUVEIFJJR0hUIEJBQ0tTTEFTSCBOVUxMIFNFVkVOIFRBQiBUSFJFRSBUV08gJyArXG4gICAgICAgICdzaXggdGVuIGZvcm1mZWVkIG5pbmUgemVybyBub25lIHNwYWNlIGZvdXIgZmFsc2UgY29sb24gY3JsZiBwaSBjb21tYSBlbmRvZmZpbGUgZW9mIGVpZ2h0IGZpdmUgJyArXG4gICAgICAgICdxdW90ZSBlbXB0eSBvbmUgdHJ1ZSByZXR1cm4gY3IgbGluZWZlZWQgcmlnaHQgYmFja3NsYXNoIG51bGwgc2V2ZW4gdGFiIHRocmVlIHR3byAnICtcbiAgICAgICAgJ1JJVkVSU0lPTiBSSVNUQVRFIEZJTEVfUkVBRF9NT0RFIEZJTEVfV1JJVEVfTU9ERSBGSUxFX1dSSVRFX01PREUgRElSX1dSSVRFX01PREUgRklMRV9SRUFEX1VNQVNLICcgK1xuICAgICAgICAnRklMRV9XUklURV9VTUFTSyBESVJfUkVBRF9VTUFTSyBESVJfV1JJVEVfVU1BU0snLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdwdXQgYWJzIGFjb3MgYWxpYXNSZWZlcmVuY2UgYW5udWl0eSBhcnJheURlY29kZSBhcnJheUVuY29kZSBhc2luIGF0YW4gYXRhbjIgYXZlcmFnZSBhdmcgYXZnRGV2IGJhc2U2NERlY29kZSAnICtcbiAgICAgICAgJ2Jhc2U2NEVuY29kZSBiYXNlQ29udmVydCBiaW5hcnlEZWNvZGUgYmluYXJ5RW5jb2RlIGJ5dGVPZmZzZXQgYnl0ZVRvTnVtIGNhY2hlZFVSTCBjYWNoZWRVUkxzIGNoYXJUb051bSAnICtcbiAgICAgICAgJ2NpcGhlck5hbWVzIGNvZGVwb2ludE9mZnNldCBjb2RlcG9pbnRQcm9wZXJ0eSBjb2RlcG9pbnRUb051bSBjb2RldW5pdE9mZnNldCBjb21tYW5kTmFtZXMgY29tcG91bmQgY29tcHJlc3MgJyArXG4gICAgICAgICdjb25zdGFudE5hbWVzIGNvcyBkYXRlIGRhdGVGb3JtYXQgZGVjb21wcmVzcyBkaWZmZXJlbmNlIGRpcmVjdG9yaWVzICcgK1xuICAgICAgICAnZGlza1NwYWNlIEROU1NlcnZlcnMgZXhwIGV4cDEgZXhwMiBleHAxMCBleHRlbnRzIGZpbGVzIGZsdXNoRXZlbnRzIGZvbGRlcnMgZm9ybWF0IGZ1bmN0aW9uTmFtZXMgZ2VvbWV0cmljTWVhbiBnbG9iYWwgJyArXG4gICAgICAgICdnbG9iYWxzIGhhc01lbW9yeSBoYXJtb25pY01lYW4gaG9zdEFkZHJlc3MgaG9zdEFkZHJlc3NUb05hbWUgaG9zdE5hbWUgaG9zdE5hbWVUb0FkZHJlc3MgaXNOdW1iZXIgSVNPVG9NYWMgaXRlbU9mZnNldCAnICtcbiAgICAgICAgJ2tleXMgbGVuIGxlbmd0aCBsaWJVUkxFcnJvckRhdGEgbGliVXJsRm9ybURhdGEgbGliVVJMZnRwQ29tbWFuZCBsaWJVUkxMYXN0SFRUUEhlYWRlcnMgbGliVVJMTGFzdFJISGVhZGVycyAnICtcbiAgICAgICAgJ2xpYlVybE11bHRpcGFydEZvcm1BZGRQYXJ0IGxpYlVybE11bHRpcGFydEZvcm1EYXRhIGxpYlVSTFZlcnNpb24gbGluZU9mZnNldCBsbiBsbjEgbG9jYWxOYW1lcyBsb2cgbG9nMiBsb2cxMCAnICtcbiAgICAgICAgJ2xvbmdGaWxlUGF0aCBsb3dlciBtYWNUb0lTTyBtYXRjaENodW5rIG1hdGNoVGV4dCBtYXRyaXhNdWx0aXBseSBtYXggbWQ1RGlnZXN0IG1lZGlhbiBtZXJnZSBtZXNzYWdlQXV0aGVudGljYXRpb25Db2RlIG1lc3NhZ2VEaWdlc3QgbWlsbGlzZWMgJyArXG4gICAgICAgICdtaWxsaXNlY3MgbWlsbGlzZWNvbmQgbWlsbGlzZWNvbmRzIG1pbiBtb250aE5hbWVzIG5hdGl2ZUNoYXJUb051bSBub3JtYWxpemVUZXh0IG51bSBudW1iZXIgbnVtVG9CeXRlIG51bVRvQ2hhciAnICtcbiAgICAgICAgJ251bVRvQ29kZXBvaW50IG51bVRvTmF0aXZlQ2hhciBvZmZzZXQgb3BlbiBvcGVuZmlsZXMgb3BlblByb2Nlc3NlcyBvcGVuUHJvY2Vzc0lEcyBvcGVuU29ja2V0cyAnICtcbiAgICAgICAgJ3BhcmFncmFwaE9mZnNldCBwYXJhbUNvdW50IHBhcmFtIHBhcmFtcyBwZWVyQWRkcmVzcyBwZW5kaW5nTWVzc2FnZXMgcGxhdGZvcm0gcG9wU3RkRGV2IHBvcHVsYXRpb25TdGFuZGFyZERldmlhdGlvbiAnICtcbiAgICAgICAgJ3BvcHVsYXRpb25WYXJpYW5jZSBwb3BWYXJpYW5jZSBwcm9jZXNzSUQgcmFuZG9tIHJhbmRvbUJ5dGVzIHJlcGxhY2VUZXh0IHJlc3VsdCByZXZDcmVhdGVYTUxUcmVlIHJldkNyZWF0ZVhNTFRyZWVGcm9tRmlsZSAnICtcbiAgICAgICAgJ3JldkN1cnJlbnRSZWNvcmQgcmV2Q3VycmVudFJlY29yZElzRmlyc3QgcmV2Q3VycmVudFJlY29yZElzTGFzdCByZXZEYXRhYmFzZUNvbHVtbkNvdW50IHJldkRhdGFiYXNlQ29sdW1uSXNOdWxsICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VDb2x1bW5MZW5ndGhzIHJldkRhdGFiYXNlQ29sdW1uTmFtZXMgcmV2RGF0YWJhc2VDb2x1bW5OYW1lZCByZXZEYXRhYmFzZUNvbHVtbk51bWJlcmVkICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VDb2x1bW5UeXBlcyByZXZEYXRhYmFzZUNvbm5lY3RSZXN1bHQgcmV2RGF0YWJhc2VDdXJzb3JzIHJldkRhdGFiYXNlSUQgcmV2RGF0YWJhc2VUYWJsZU5hbWVzICcgK1xuICAgICAgICAncmV2RGF0YWJhc2VUeXBlIHJldkRhdGFGcm9tUXVlcnkgcmV2ZGJfY2xvc2VDdXJzb3IgcmV2ZGJfY29sdW1uYnludW1iZXIgcmV2ZGJfY29sdW1uY291bnQgcmV2ZGJfY29sdW1uaXNudWxsICcgK1xuICAgICAgICAncmV2ZGJfY29sdW1ubGVuZ3RocyByZXZkYl9jb2x1bW5uYW1lcyByZXZkYl9jb2x1bW50eXBlcyByZXZkYl9jb21taXQgcmV2ZGJfY29ubmVjdCByZXZkYl9jb25uZWN0aW9ucyAnICtcbiAgICAgICAgJ3JldmRiX2Nvbm5lY3Rpb25lcnIgcmV2ZGJfY3VycmVudHJlY29yZCByZXZkYl9jdXJzb3Jjb25uZWN0aW9uIHJldmRiX2N1cnNvcmVyciByZXZkYl9jdXJzb3JzIHJldmRiX2RidHlwZSAnICtcbiAgICAgICAgJ3JldmRiX2Rpc2Nvbm5lY3QgcmV2ZGJfZXhlY3V0ZSByZXZkYl9pc2VvZiByZXZkYl9pc2JvZiByZXZkYl9tb3ZlZmlyc3QgcmV2ZGJfbW92ZWxhc3QgcmV2ZGJfbW92ZW5leHQgJyArXG4gICAgICAgICdyZXZkYl9tb3ZlcHJldiByZXZkYl9xdWVyeSByZXZkYl9xdWVyeWxpc3QgcmV2ZGJfcmVjb3JkY291bnQgcmV2ZGJfcm9sbGJhY2sgcmV2ZGJfdGFibGVuYW1lcyAnICtcbiAgICAgICAgJ3JldkdldERhdGFiYXNlRHJpdmVyUGF0aCByZXZOdW1iZXJPZlJlY29yZHMgcmV2T3BlbkRhdGFiYXNlIHJldk9wZW5EYXRhYmFzZXMgcmV2UXVlcnlEYXRhYmFzZSAnICtcbiAgICAgICAgJ3JldlF1ZXJ5RGF0YWJhc2VCbG9iIHJldlF1ZXJ5UmVzdWx0IHJldlF1ZXJ5SXNBdFN0YXJ0IHJldlF1ZXJ5SXNBdEVuZCByZXZVbml4RnJvbU1hY1BhdGggcmV2WE1MQXR0cmlidXRlICcgK1xuICAgICAgICAncmV2WE1MQXR0cmlidXRlcyByZXZYTUxBdHRyaWJ1dGVWYWx1ZXMgcmV2WE1MQ2hpbGRDb250ZW50cyByZXZYTUxDaGlsZE5hbWVzIHJldlhNTENyZWF0ZVRyZWVGcm9tRmlsZVdpdGhOYW1lc3BhY2VzICcgK1xuICAgICAgICAncmV2WE1MQ3JlYXRlVHJlZVdpdGhOYW1lc3BhY2VzIHJldlhNTERhdGFGcm9tWFBhdGhRdWVyeSByZXZYTUxFdmFsdWF0ZVhQYXRoIHJldlhNTEZpcnN0Q2hpbGQgcmV2WE1MTWF0Y2hpbmdOb2RlICcgK1xuICAgICAgICAncmV2WE1MTmV4dFNpYmxpbmcgcmV2WE1MTm9kZUNvbnRlbnRzIHJldlhNTE51bWJlck9mQ2hpbGRyZW4gcmV2WE1MUGFyZW50IHJldlhNTFByZXZpb3VzU2libGluZyAnICtcbiAgICAgICAgJ3JldlhNTFJvb3ROb2RlIHJldlhNTFJQQ19DcmVhdGVSZXF1ZXN0IHJldlhNTFJQQ19Eb2N1bWVudHMgcmV2WE1MUlBDX0Vycm9yICcgK1xuICAgICAgICAncmV2WE1MUlBDX0dldEhvc3QgcmV2WE1MUlBDX0dldE1ldGhvZCByZXZYTUxSUENfR2V0UGFyYW0gcmV2WE1MVGV4dCByZXZYTUxSUENfRXhlY3V0ZSAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19HZXRQYXJhbUNvdW50IHJldlhNTFJQQ19HZXRQYXJhbU5vZGUgcmV2WE1MUlBDX0dldFBhcmFtVHlwZSByZXZYTUxSUENfR2V0UGF0aCByZXZYTUxSUENfR2V0UG9ydCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19HZXRQcm90b2NvbCByZXZYTUxSUENfR2V0UmVxdWVzdCByZXZYTUxSUENfR2V0UmVzcG9uc2UgcmV2WE1MUlBDX0dldFNvY2tldCByZXZYTUxUcmVlICcgK1xuICAgICAgICAncmV2WE1MVHJlZXMgcmV2WE1MVmFsaWRhdGVEVEQgcmV2WmlwRGVzY3JpYmVJdGVtIHJldlppcEVudW1lcmF0ZUl0ZW1zIHJldlppcE9wZW5BcmNoaXZlcyByb3VuZCBzYW1wVmFyaWFuY2UgJyArXG4gICAgICAgICdzZWMgc2VjcyBzZWNvbmRzIHNlbnRlbmNlT2Zmc2V0IHNoYTFEaWdlc3Qgc2hlbGwgc2hvcnRGaWxlUGF0aCBzaW4gc3BlY2lhbEZvbGRlclBhdGggc3FydCBzdGFuZGFyZERldmlhdGlvbiBzdGF0Um91bmQgJyArXG4gICAgICAgICdzdGREZXYgc3VtIHN5c0Vycm9yIHN5c3RlbVZlcnNpb24gdGFuIHRlbXBOYW1lIHRleHREZWNvZGUgdGV4dEVuY29kZSB0aWNrIHRpY2tzIHRpbWUgdG8gdG9rZW5PZmZzZXQgdG9Mb3dlciB0b1VwcGVyICcgK1xuICAgICAgICAndHJhbnNwb3NlIHRydWV3b3JkT2Zmc2V0IHRydW5jIHVuaURlY29kZSB1bmlFbmNvZGUgdXBwZXIgVVJMRGVjb2RlIFVSTEVuY29kZSBVUkxTdGF0dXMgdXVpZCB2YWx1ZSB2YXJpYWJsZU5hbWVzICcgK1xuICAgICAgICAndmFyaWFuY2UgdmVyc2lvbiB3YWl0RGVwdGggd2Vla2RheU5hbWVzIHdvcmRPZmZzZXQgeHNsdEFwcGx5U3R5bGVzaGVldCB4c2x0QXBwbHlTdHlsZXNoZWV0RnJvbUZpbGUgeHNsdExvYWRTdHlsZXNoZWV0ICcgK1xuICAgICAgICAneHNsdExvYWRTdHlsZXNoZWV0RnJvbUZpbGUgYWRkIGJyZWFrcG9pbnQgY2FuY2VsIGNsZWFyIGxvY2FsIHZhcmlhYmxlIGZpbGUgd29yZCBsaW5lIGZvbGRlciBkaXJlY3RvcnkgVVJMIGNsb3NlIHNvY2tldCBwcm9jZXNzICcgK1xuICAgICAgICAnY29tYmluZSBjb25zdGFudCBjb252ZXJ0IGNyZWF0ZSBuZXcgYWxpYXMgZm9sZGVyIGRpcmVjdG9yeSBkZWNyeXB0IGRlbGV0ZSB2YXJpYWJsZSB3b3JkIGxpbmUgZm9sZGVyICcgK1xuICAgICAgICAnZGlyZWN0b3J5IFVSTCBkaXNwYXRjaCBkaXZpZGUgZG8gZW5jcnlwdCBmaWx0ZXIgZ2V0IGluY2x1ZGUgaW50ZXJzZWN0IGtpbGwgbGliVVJMRG93bmxvYWRUb0ZpbGUgJyArXG4gICAgICAgICdsaWJVUkxGb2xsb3dIdHRwUmVkaXJlY3RzIGxpYlVSTGZ0cFVwbG9hZCBsaWJVUkxmdHBVcGxvYWRGaWxlIGxpYlVSTHJlc2V0QWxsIGxpYlVybFNldEF1dGhDYWxsYmFjayBsaWJVUkxTZXREcml2ZXIgJyArXG4gICAgICAgICdsaWJVUkxTZXRDdXN0b21IVFRQSGVhZGVycyBsaWJVcmxTZXRFeHBlY3QxMDAgbGliVVJMU2V0RlRQTGlzdENvbW1hbmQgbGliVVJMU2V0RlRQTW9kZSBsaWJVUkxTZXRGVFBTdG9wVGltZSAnICtcbiAgICAgICAgJ2xpYlVSTFNldFN0YXR1c0NhbGxiYWNrIGxvYWQgZXh0ZW5zaW9uIGxvYWRlZEV4dGVuc2lvbnMgbXVsdGlwbHkgc29ja2V0IHByZXBhcmUgcHJvY2VzcyBwb3N0IHNlZWsgcmVsIHJlbGF0aXZlIHJlYWQgZnJvbSBwcm9jZXNzIHJlbmFtZSAnICtcbiAgICAgICAgJ3JlcGxhY2UgcmVxdWlyZSByZXNldEFsbCByZXNvbHZlIHJldkFkZFhNTE5vZGUgcmV2QXBwZW5kWE1MIHJldkNsb3NlQ3Vyc29yIHJldkNsb3NlRGF0YWJhc2UgcmV2Q29tbWl0RGF0YWJhc2UgJyArXG4gICAgICAgICdyZXZDb3B5RmlsZSByZXZDb3B5Rm9sZGVyIHJldkNvcHlYTUxOb2RlIHJldkRlbGV0ZUZvbGRlciByZXZEZWxldGVYTUxOb2RlIHJldkRlbGV0ZUFsbFhNTFRyZWVzICcgK1xuICAgICAgICAncmV2RGVsZXRlWE1MVHJlZSByZXZFeGVjdXRlU1FMIHJldkdvVVJMIHJldkluc2VydFhNTE5vZGUgcmV2TW92ZUZvbGRlciByZXZNb3ZlVG9GaXJzdFJlY29yZCByZXZNb3ZlVG9MYXN0UmVjb3JkICcgK1xuICAgICAgICAncmV2TW92ZVRvTmV4dFJlY29yZCByZXZNb3ZlVG9QcmV2aW91c1JlY29yZCByZXZNb3ZlVG9SZWNvcmQgcmV2TW92ZVhNTE5vZGUgcmV2UHV0SW50b1hNTE5vZGUgcmV2Um9sbEJhY2tEYXRhYmFzZSAnICtcbiAgICAgICAgJ3JldlNldERhdGFiYXNlRHJpdmVyUGF0aCByZXZTZXRYTUxBdHRyaWJ1dGUgcmV2WE1MUlBDX0FkZFBhcmFtIHJldlhNTFJQQ19EZWxldGVBbGxEb2N1bWVudHMgcmV2WE1MQWRkRFREICcgK1xuICAgICAgICAncmV2WE1MUlBDX0ZyZWUgcmV2WE1MUlBDX0ZyZWVBbGwgcmV2WE1MUlBDX0RlbGV0ZURvY3VtZW50IHJldlhNTFJQQ19EZWxldGVQYXJhbSByZXZYTUxSUENfU2V0SG9zdCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19TZXRNZXRob2QgcmV2WE1MUlBDX1NldFBvcnQgcmV2WE1MUlBDX1NldFByb3RvY29sIHJldlhNTFJQQ19TZXRTb2NrZXQgcmV2WmlwQWRkSXRlbVdpdGhEYXRhICcgK1xuICAgICAgICAncmV2WmlwQWRkSXRlbVdpdGhGaWxlIHJldlppcEFkZFVuY29tcHJlc3NlZEl0ZW1XaXRoRGF0YSByZXZaaXBBZGRVbmNvbXByZXNzZWRJdGVtV2l0aEZpbGUgcmV2WmlwQ2FuY2VsICcgK1xuICAgICAgICAncmV2WmlwQ2xvc2VBcmNoaXZlIHJldlppcERlbGV0ZUl0ZW0gcmV2WmlwRXh0cmFjdEl0ZW1Ub0ZpbGUgcmV2WmlwRXh0cmFjdEl0ZW1Ub1ZhcmlhYmxlIHJldlppcFNldFByb2dyZXNzQ2FsbGJhY2sgJyArXG4gICAgICAgICdyZXZaaXBSZW5hbWVJdGVtIHJldlppcFJlcGxhY2VJdGVtV2l0aERhdGEgcmV2WmlwUmVwbGFjZUl0ZW1XaXRoRmlsZSByZXZaaXBPcGVuQXJjaGl2ZSBzZW5kIHNldCBzb3J0IHNwbGl0IHN0YXJ0IHN0b3AgJyArXG4gICAgICAgICdzdWJ0cmFjdCBzeW1tZXRyaWMgdW5pb24gdW5sb2FkIHZlY3RvckRvdFByb2R1Y3Qgd2FpdCB3cml0ZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJlbmRcXFxcc2lmXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgVElUTEUxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYmVuZFxcXFxzKycsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ2VuZCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVElUTEUyLFxuICAgICAgICAgIFRJVExFMVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjb21tYW5kIG9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgVElUTEUyLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBUSVRMRTFcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc8XFxcXD8ocmV2fGxjfGxpdmVjb2RlKScsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnPFxcXFw/JyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcPz4nIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFRJVExFMVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpLFxuICAgIGlsbGVnYWw6ICc7JHxeXFxcXFt8Xj18Jnx7J1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAvLyBKUyBrZXl3b3Jkc1xuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IG5ldyBkbyByZXR1cm4gZWxzZSBicmVhayBjYXRjaCBpbnN0YW5jZW9mIHRocm93IHRyeSB0aGlzICcgK1xuICAgICAgJ3N3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlIGRlYnVnZ2VyIGNhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgd2l0aCAnICtcbiAgICAgIC8vIExpdmVTY3JpcHQga2V5d29yZHNcbiAgICAgICd0aGVuIHVubGVzcyB1bnRpbCBsb29wIG9mIGJ5IHdoZW4gYW5kIG9yIGlzIGlzbnQgbm90IGl0IHRoYXQgb3RoZXJ3aXNlIGZyb20gdG8gdGlsIGZhbGx0aHJvdWdoIHN1cGVyICcgK1xuICAgICAgJ2Nhc2UgZGVmYXVsdCBmdW5jdGlvbiB2YXIgdm9pZCBjb25zdCBsZXQgZW51bSBleHBvcnQgaW1wb3J0IG5hdGl2ZSBsaXN0IG1hcCAnICtcbiAgICAgICdfX2hhc1Byb3AgX19leHRlbmRzIF9fc2xpY2UgX19iaW5kIF9faW5kZXhPZicsXG4gICAgbGl0ZXJhbDpcbiAgICAgIC8vIEpTIGxpdGVyYWxzXG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCAnICtcbiAgICAgIC8vIExpdmVTY3JpcHQgbGl0ZXJhbHNcbiAgICAgICd5ZXMgbm8gb24gb2ZmIGl0IHRoYXQgdm9pZCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnbnBtIHJlcXVpcmUgY29uc29sZSBwcmludCBtb2R1bGUgZ2xvYmFsIHdpbmRvdyBkb2N1bWVudCdcbiAgfTtcbiAgdmFyIEpTX0lERU5UX1JFID0gJ1tBLVphLXokX10oPzpcXC1bMC05QS1aYS16JF9dfFswLTlBLVphLXokX10pKic7XG4gIHZhciBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSlNfSURFTlRfUkV9KTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogLyNcXHsvLCBlbmQ6IC99LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIFNVQlNUX1NJTVBMRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jW0EtWmEteiRfXS8sIGVuZDogLyg/OlxcLVswLTlBLVphLXokX118WzAtOUEtWmEteiRfXSkqLyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIEVYUFJFU1NJT05TID0gW1xuICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbeFhdW2EtZkEtRjAtOV9dKyl8KFxcXFxiXFxcXGQoXFxcXGR8X1xcXFxkKSooXFxcXC4oXFxcXGQoXFxcXGR8X1xcXFxkKSopPyk/KF8qW2VFXShbLStdXFxcXGQoX1xcXFxkfFxcXFxkKSopPyk/W19hLXpdKiknLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgc3RhcnRzOiB7ZW5kOiAnKFxcXFxzKi8pPycsIHJlbGV2YW5jZTogMH0gLy8gYSBudW1iZXIgdHJpZXMgdG8gZWF0IHRoZSBmb2xsb3dpbmcgc2xhc2ggdG8gcHJldmVudCB0cmVhdGluZyBpdCBhcyBhIHJlZ2V4cFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycvLCBlbmQ6IC8nLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCJcIlwiLywgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIFNVQlNUX1NJTVBMRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNULCBTVUJTVF9TSU1QTEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1xcXFwvLCBlbmQ6IC8oXFxzfCQpLyxcbiAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICcvLycsIGVuZDogJy8vW2dpbV0qJyxcbiAgICAgICAgICBjb250YWluczogW1NVQlNULCBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pKFxcXFxcXC98LikqP1xcL1tnaW1dKig/PVxcVykvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBKU19JREVOVF9SRVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdgYCcsIGVuZDogJ2BgJyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnamF2YXNjcmlwdCdcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAvKiBXZSBuZWVkIGFub3RoZXIgY29udGFpbmVkIG5hbWVsZXNzIG1vZGUgdG8gbm90IGhhdmUgZXZlcnkgbmVzdGVkXG4gICAgcGFpciBvZiBwYXJlbnMgdG8gYmUgY2FsbGVkIFwicGFyYW1zXCIgKi9cbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFNZTUJPTFMgPSB7XG4gICAgYmVnaW46ICcoIz0+fD0+fFxcXFx8Pj58LT8tPnxcXFxcIS0+KSdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbHMnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05TLmNvbmNhdChbXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwvXFxcXConLCAnXFxcXCpcXFxcLycpLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIFNZTUJPTFMsIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlxcXFwtPlxcXFwqPycsIGVuZDogJ1xcXFwtPlxcXFwqPydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/IT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstfl17MSwyfT5cXFxcKj8nLCBlbmQ6ICdbLX5dezEsMn0+XFxcXCo/J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQiE/Wy1+XXsxLDJ9PlxcXFwqPycsIGVuZDogJyE/Wy1+XXsxLDJ9PlxcXFwqPydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgICAgICBjb250YWluczogW1RJVExFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgVElUTEVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEpTX0lERU5UX1JFICsgJzonLCBlbmQ6ICc6JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSlcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBpZGVudGlmaWVyID0gJyhbLWEtekEtWiQuX11bXFxcXHdcXFxcLSQuXSopJztcbiAgcmV0dXJuIHtcbiAgICAvL2xleGVtZXM6ICdbLiVdPycgKyBobGpzLklERU5UX1JFLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2JlZ2luIGVuZCB0cnVlIGZhbHNlIGRlY2xhcmUgZGVmaW5lIGdsb2JhbCAnICtcbiAgICAgICdjb25zdGFudCBwcml2YXRlIGxpbmtlcl9wcml2YXRlIGludGVybmFsICcgK1xuICAgICAgJ2F2YWlsYWJsZV9leHRlcm5hbGx5IGxpbmtvbmNlIGxpbmtvbmNlX29kciB3ZWFrICcgK1xuICAgICAgJ3dlYWtfb2RyIGFwcGVuZGluZyBkbGxpbXBvcnQgZGxsZXhwb3J0IGNvbW1vbiAnICtcbiAgICAgICdkZWZhdWx0IGhpZGRlbiBwcm90ZWN0ZWQgZXh0ZXJuX3dlYWsgZXh0ZXJuYWwgJyArXG4gICAgICAndGhyZWFkX2xvY2FsIHplcm9pbml0aWFsaXplciB1bmRlZiBudWxsIHRvIHRhaWwgJyArXG4gICAgICAndGFyZ2V0IHRyaXBsZSBkYXRhbGF5b3V0IHZvbGF0aWxlIG51dyBuc3cgbm5hbiAnICtcbiAgICAgICduaW5mIG5zeiBhcmNwIGZhc3QgZXhhY3QgaW5ib3VuZHMgYWxpZ24gJyArXG4gICAgICAnYWRkcnNwYWNlIHNlY3Rpb24gYWxpYXMgbW9kdWxlIGFzbSBzaWRlZWZmZWN0ICcgK1xuICAgICAgJ2djIGRiZyBsaW5rZXJfcHJpdmF0ZV93ZWFrIGF0dHJpYnV0ZXMgYmxvY2thZGRyZXNzICcgK1xuICAgICAgJ2luaXRpYWxleGVjIGxvY2FsZHluYW1pYyBsb2NhbGV4ZWMgcHJlZml4IHVubmFtZWRfYWRkciAnICtcbiAgICAgICdjY2MgZmFzdGNjIGNvbGRjYyB4ODZfc3RkY2FsbGNjIHg4Nl9mYXN0Y2FsbGNjICcgK1xuICAgICAgJ2FybV9hcGNzY2MgYXJtX2FhcGNzY2MgYXJtX2FhcGNzX3ZmcGNjIHB0eF9kZXZpY2UgJyArXG4gICAgICAncHR4X2tlcm5lbCBpbnRlbF9vY2xfYmljYyBtc3A0MzBfaW50cmNjIHNwaXJfZnVuYyAnICtcbiAgICAgICdzcGlyX2tlcm5lbCB4ODZfNjRfc3lzdmNjIHg4Nl82NF93aW42NGNjIHg4Nl90aGlzY2FsbGNjICcgK1xuICAgICAgJ2NjIGMgc2lnbmV4dCB6ZXJvZXh0IGlucmVnIHNyZXQgbm91bndpbmQgJyArXG4gICAgICAnbm9yZXR1cm4gbm9hbGlhcyBub2NhcHR1cmUgYnl2YWwgbmVzdCByZWFkbm9uZSAnICtcbiAgICAgICdyZWFkb25seSBpbmxpbmVoaW50IG5vaW5saW5lIGFsd2F5c2lubGluZSBvcHRzaXplIHNzcCAnICtcbiAgICAgICdzc3ByZXEgbm9yZWR6b25lIG5vaW1wbGljaXRmbG9hdCBuYWtlZCBidWlsdGluIGNvbGQgJyArXG4gICAgICAnbm9idWlsdGluIG5vZHVwbGljYXRlIG5vbmxhenliaW5kIG9wdG5vbmUgcmV0dXJuc190d2ljZSAnICtcbiAgICAgICdzYW5pdGl6ZV9hZGRyZXNzIHNhbml0aXplX21lbW9yeSBzYW5pdGl6ZV90aHJlYWQgc3Nwc3Ryb25nICcgK1xuICAgICAgJ3V3dGFibGUgcmV0dXJuZWQgdHlwZSBvcGFxdWUgZXEgbmUgc2x0IHNndCAnICtcbiAgICAgICdzbGUgc2dlIHVsdCB1Z3QgdWxlIHVnZSBvZXEgb25lIG9sdCBvZ3QgJyArXG4gICAgICAnb2xlIG9nZSBvcmQgdW5vIHVlcSB1bmUgeCBhY3FfcmVsIGFjcXVpcmUgJyArXG4gICAgICAnYWxpZ25zdGFjayBhdG9taWMgY2F0Y2ggY2xlYW51cCBmaWx0ZXIgaW50ZWxkaWFsZWN0ICcgK1xuICAgICAgJ21heCBtaW4gbW9ub3RvbmljIG5hbmQgcGVyc29uYWxpdHkgcmVsZWFzZSBzZXFfY3N0ICcgK1xuICAgICAgJ3NpbmdsZXRocmVhZCB1bWF4IHVtaW4gdW5vcmRlcmVkIHhjaGcgYWRkIGZhZGQgJyArXG4gICAgICAnc3ViIGZzdWIgbXVsIGZtdWwgdWRpdiBzZGl2IGZkaXYgdXJlbSBzcmVtICcgK1xuICAgICAgJ2ZyZW0gc2hsIGxzaHIgYXNociBhbmQgb3IgeG9yIGljbXAgZmNtcCAnICtcbiAgICAgICdwaGkgY2FsbCB0cnVuYyB6ZXh0IHNleHQgZnB0cnVuYyBmcGV4dCB1aXRvZnAgJyArXG4gICAgICAnc2l0b2ZwIGZwdG91aSBmcHRvc2kgaW50dG9wdHIgcHRydG9pbnQgYml0Y2FzdCAnICtcbiAgICAgICdhZGRyc3BhY2VjYXN0IHNlbGVjdCB2YV9hcmcgcmV0IGJyIHN3aXRjaCBpbnZva2UgJyArXG4gICAgICAndW53aW5kIHVucmVhY2hhYmxlIGluZGlyZWN0YnIgbGFuZGluZ3BhZCByZXN1bWUgJyArXG4gICAgICAnbWFsbG9jIGFsbG9jYSBmcmVlIGxvYWQgc3RvcmUgZ2V0ZWxlbWVudHB0ciAnICtcbiAgICAgICdleHRyYWN0ZWxlbWVudCBpbnNlcnRlbGVtZW50IHNodWZmbGV2ZWN0b3IgZ2V0cmVzdWx0ICcgK1xuICAgICAgJ2V4dHJhY3R2YWx1ZSBpbnNlcnR2YWx1ZSBhdG9taWNybXcgY21weGNoZyBmZW5jZSAnICtcbiAgICAgICdhcmdtZW1vbmx5IGRvdWJsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnaVxcXFxkKydcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JywgJ1xcXFxuJywge3JlbGV2YW5jZTogMH1cbiAgICAgICksXG4gICAgICAvLyBEb3VibGUgcXVvdGUgc3RyaW5nXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIERvdWJsZS1xdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ1wiJywgZW5kOiAnW15cXFxcXFxcXF1cIicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ0AnICsgaWRlbnRpZmllciB9LFxuICAgICAgICAgIHsgYmVnaW46ICdAXFxcXGQrJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICchJyArIGlkZW50aWZpZXIgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnIVxcXFxkKycgKyBpZGVudGlmaWVyIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnJScgKyBpZGVudGlmaWVyIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyVcXFxcZCsnIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyNcXFxcZCsnIH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7IGJlZ2luOiAnMFt4WF1bYS1mQS1GMC05XSsnIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAnLT9cXFxcZCsoPzpbLl1cXFxcZCspPyg/OltlRV1bLStdP1xcXFxkKyg/OlsuXVxcXFxkKyk/KT8nIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgICB2YXIgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46IC9cXFxcW3RuXCJcXFxcXS9cbiAgICB9O1xuXG4gICAgdmFyIExTTF9TVFJJTkdTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlNcbiAgICAgICAgXVxuICAgIH07XG5cbiAgICB2YXIgTFNMX05VTUJFUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFXG4gICAgfTtcblxuICAgIHZhciBMU0xfQ09OU1RBTlRTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86UEl8VFdPX1BJfFBJX0JZX1RXT3xERUdfVE9fUkFEfFJBRF9UT19ERUd8U1FSVDIpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpYUF9FUlJPUl8oPzpFWFBFUklFTkNFU19ESVNBQkxFRHxFWFBFUklFTkNFXyg/OkRJU0FCTEVEfFNVU1BFTkRFRCl8SU5WQUxJRF8oPzpFWFBFUklFTkNFfFBBUkFNRVRFUlMpfEtFWV9OT1RfRk9VTkR8TUFUVVJJVFlfRVhDRUVERUR8Tk9ORXxOT1RfKD86Rk9VTkR8UEVSTUlUVEVEKD86X0xBTkQpPyl8Tk9fRVhQRVJJRU5DRXxRVU9UQV9FWENFRURFRHxSRVRSWV9VUERBVEV8U1RPUkFHRV9FWENFUFRJT058U1RPUkVfRElTQUJMRUR8VEhST1RUTEVEfFVOS05PV05fRVJST1IpfEpTT05fQVBQRU5EfFNUQVRVU18oPzpQSFlTSUNTfFJPVEFURV9bWFlaXXxQSEFOVE9NfFNBTkRCT1h8QkxPQ0tfR1JBQig/Ol9PQkpFQ1QpP3woPzpESUV8UkVUVVJOKV9BVF9FREdFfENBU1RfU0hBRE9XU3xPS3xNQUxGT1JNRURfUEFSQU1TfFRZUEVfTUlTTUFUQ0h8Qk9VTkRTX0VSUk9SfE5PVF8oPzpGT1VORHxTVVBQT1JURUQpfElOVEVSTkFMX0VSUk9SfFdISVRFTElTVF9GQUlMRUQpfEFHRU5UKD86Xyg/OkJZXyg/OkxFR0FDWV98VVNFUilOQU1FfEZMWUlOR3xBVFRBQ0hNRU5UU3xTQ1JJUFRFRHxNT1VTRUxPT0t8U0lUVElOR3xPTl9PQkpFQ1R8QVdBWXxXQUxLSU5HfElOX0FJUnxUWVBJTkd8Q1JPVUNISU5HfEJVU1l8QUxXQVlTX1JVTnxBVVRPUElMT1R8TElTVF8oPzpQQVJDRUwoPzpfT1dORVIpP3xSRUdJT04pKSk/fENBTUVSQV8oPzpQSVRDSHxESVNUQU5DRXxCRUhJTkRORVNTXyg/OkFOR0xFfExBRyl8KD86Rk9DVVN8UE9TSVRJT04pKD86Xyg/OlRIUkVTSE9MRHxMT0NLRUR8TEFHKSk/fEZPQ1VTX09GRlNFVHxBQ1RJVkUpfEFOSU1fT058TE9PUHxSRVZFUlNFfFBJTkdfUE9OR3xTTU9PVEh8Uk9UQVRFfFNDQUxFfEFMTF9TSURFU3xMSU5LXyg/OlJPT1R8U0VUfEFMTF8oPzpPVEhFUlN8Q0hJTERSRU4pfFRISVMpfEFDVElWRXxQQVNTKD86SVZFfF8oPzpBTFdBWVN8SUZfTk9UX0hBTkRMRUR8TkVWRVIpKXxTQ1JJUFRFRHxDT05UUk9MXyg/OkZXRHxCQUNLfCg/OlJPVF8pPyg/OkxFRlR8UklHSFQpfFVQfERPV058KD86TUxfKT9MQlVUVE9OKXxQRVJNSVNTSU9OXyg/OlJFVFVSTl9PQkpFQ1RTfERFQklUfE9WRVJSSURFX0FOSU1BVElPTlN8U0lMRU5UX0VTVEFURV9NQU5BR0VNRU5UfFRBS0VfQ09OVFJPTFN8VFJJR0dFUl9BTklNQVRJT058QVRUQUNIfENIQU5HRV9MSU5LU3woPzpDT05UUk9MfFRSQUNLKV9DQU1FUkF8VEVMRVBPUlQpfElOVkVOVE9SWV8oPzpURVhUVVJFfFNPVU5EfE9CSkVDVHxTQ1JJUFR8TEFORE1BUkt8Q0xPVEhJTkd8Tk9URUNBUkR8Qk9EWVBBUlR8QU5JTUFUSU9OfEdFU1RVUkV8QUxMfE5PTkUpfENIQU5HRURfKD86SU5WRU5UT1JZfENPTE9SfFNIQVBFfFNDQUxFfFRFWFRVUkV8TElOS3xBTExPV0VEX0RST1B8T1dORVJ8UkVHSU9OKD86X1NUQVJUKT98VEVMRVBPUlR8TUVESUEpfE9CSkVDVF8oPzpDTElDS19BQ1RJT058SE9WRVJfSEVJR0hUfExBU1RfT1dORVJfSUR8KD86UEhZU0lDU3xTRVJWRVJ8U1RSRUFNSU5HKV9DT1NUfFVOS05PV05fREVUQUlMfENIQVJBQ1RFUl9USU1FfFBIQU5UT018UEhZU0lDU3xURU1QXyg/OkFUVEFDSEVEfE9OX1JFWil8TkFNRXxERVNDfFBPU3xQUklNXyg/OkNPVU5UfEVRVUlWQUxFTkNFKXxSRVRVUk5fKD86UEFSQ0VMKD86X09XTkVSKT98UkVHSU9OKXxSRVpaRVJfS0VZfFJPTz9UfFZFTE9DSVRZfE9NRUdBfE9XTkVSfEdST1VQKD86X1RBRyk/fENSRUFUT1J8QVRUQUNIRURfKD86UE9JTlR8U0xPVFNfQVZBSUxBQkxFKXxSRU5ERVJfV0VJR0hUfCg/OkJPRFlfU0hBUEV8UEFUSEZJTkRJTkcpX1RZUEV8KD86UlVOTklOR3xUT1RBTClfU0NSSVBUX0NPVU5UfFRPVEFMX0lOVkVOVE9SWV9DT1VOVHxTQ1JJUFRfKD86TUVNT1JZfFRJTUUpKXxUWVBFXyg/OklOVEVHRVJ8RkxPQVR8U1RSSU5HfEtFWXxWRUNUT1J8Uk9UQVRJT058SU5WQUxJRCl8KD86REVCVUd8UFVCTElDKV9DSEFOTkVMfEFUVEFDSF8oPzpBVkFUQVJfQ0VOVEVSfENIRVNUfEhFQUR8QkFDS3xQRUxWSVN8TU9VVEh8Q0hJTnxORUNLfE5PU0V8QkVMTFl8W0xSXSg/OlNIT1VMREVSfEhBTkR8Rk9PVHxFQVJ8RVlFfFtVTF0oPzpBUk18TEVHKXxISVApfCg/OkxFRlR8UklHSFQpX1BFQ3xIVURfKD86Q0VOVEVSX1sxMl18VE9QXyg/OlJJR0hUfENFTlRFUnxMRUZUKXxCT1RUT00oPzpfKD86UklHSFR8TEVGVCkpPyl8W0xSXUhBTkRfUklORzF8VEFJTF8oPzpCQVNFfFRJUCl8W0xSXVdJTkd8RkFDRV8oPzpKQVd8W0xSXUVBUnxbTFJdRVlFfFRPVU5HRSl8R1JPSU58SElORF9bTFJdRk9PVCl8TEFORF8oPzpMRVZFTHxSQUlTRXxMT1dFUnxTTU9PVEh8Tk9JU0V8UkVWRVJUKXxEQVRBXyg/Ok9OTElORXxOQU1FfEJPUk58U0lNXyg/OlBPU3xTVEFUVVN8UkFUSU5HKXxQQVlJTkZPKXxQQVlNRU5UX0lORk9fKD86T05fRklMRXxVU0VEKXxSRU1PVEVfREFUQV8oPzpDSEFOTkVMfFJFUVVFU1R8UkVQTFkpfFBTWVNfKD86UEFSVF8oPzpCRl8oPzpaRVJPfE9ORSg/Ol9NSU5VU18oPzpERVNUX0NPTE9SfFNPVVJDRV8oQUxQSEF8Q09MT1IpKSk/fERFU1RfQ09MT1J8U09VUkNFXyhBTFBIQXxDT0xPUikpfEJMRU5EX0ZVTkNfKERFU1R8U09VUkNFKXxGTEFHU3woPzpTVEFSVHxFTkQpXyg/OkNPTE9SfEFMUEhBfFNDQUxFfEdMT1cpfE1BWF9BR0V8KD86UklCQk9OfFdJTkR8SU5URVJQXyg/OkNPTE9SfFNDQUxFKXxCT1VOQ0V8Rk9MTE9XXyg/OlNSQ3xWRUxPQ0lUWSl8VEFSR0VUXyg/OlBPU3xMSU5FQVIpfEVNSVNTSVZFKV9NQVNLKXxTUkNfKD86TUFYX0FHRXxQQVRURVJOfEFOR0xFXyg/OkJFR0lOfEVORCl8QlVSU1RfKD86UkFURXxQQVJUX0NPVU5UfFJBRElVU3xTUEVFRF8oPzpNSU58TUFYKSl8QUNDRUx8VEVYVFVSRXxUQVJHRVRfS0VZfE9NRUdBfFBBVFRFUk5fKD86RFJPUHxFWFBMT0RFfEFOR0xFKD86X0NPTkUoPzpfRU1QVFkpPyk/KSkpfFZFSElDTEVfKD86UkVGRVJFTkNFX0ZSQU1FfFRZUEVfKD86Tk9ORXxTTEVEfENBUnxCT0FUfEFJUlBMQU5FfEJBTExPT04pfCg/OkxJTkVBUnxBTkdVTEFSKV8oPzpGUklDVElPTl9USU1FU0NBTEV8TU9UT1JfRElSRUNUSU9OKXxMSU5FQVJfTU9UT1JfT0ZGU0VUfEhPVkVSXyg/OkhFSUdIVHxFRkZJQ0lFTkNZfFRJTUVTQ0FMRSl8QlVPWUFOQ1l8KD86TElORUFSfEFOR1VMQVIpXyg/OkRFRkxFQ1RJT05fKD86RUZGSUNJRU5DWXxUSU1FU0NBTEUpfE1PVE9SXyg/OkRFQ0FZXyk/VElNRVNDQUxFKXxWRVJUSUNBTF9BVFRSQUNUSU9OXyg/OkVGRklDSUVOQ1l8VElNRVNDQUxFKXxCQU5LSU5HXyg/OkVGRklDSUVOQ1l8TUlYfFRJTUVTQ0FMRSl8RkxBR18oPzpOT19ERUZMRUNUSU9OX1VQfExJTUlUXyg/OlJPTExfT05MWXxNT1RPUl9VUCl8SE9WRVJfKD86KD86V0FURVJ8VEVSUkFJTnxVUClfT05MWXxHTE9CQUxfSEVJR0hUKXxNT1VTRUxPT0tfKD86U1RFRVJ8QkFOSyl8Q0FNRVJBX0RFQ09VUExFRCkpfFBSSU1fKD86QUxMT1dfVU5TSVR8QUxQSEFfTU9ERSg/Ol8oPzpCTEVORHxFTUlTU0lWRXxNQVNLfE5PTkUpKT98Tk9STUFMfFNQRUNVTEFSfFRZUEUoPzpfKD86Qk9YfENZTElOREVSfFBSSVNNfFNQSEVSRXxUT1JVU3xUVUJFfFJJTkd8U0NVTFBUKSk/fEhPTEVfKD86REVGQVVMVHxDSVJDTEV8U1FVQVJFfFRSSUFOR0xFKXxNQVRFUklBTCg/Ol8oPzpTVE9ORXxNRVRBTHxHTEFTU3xXT09EfEZMRVNIfFBMQVNUSUN8UlVCQkVSKSk/fFNISU5ZXyg/Ok5PTkV8TE9XfE1FRElVTXxISUdIKXxCVU1QXyg/Ok5PTkV8QlJJR0hUfERBUkt8V09PRHxCQVJLfEJSSUNLU3xDSEVDS0VSfENPTkNSRVRFfFRJTEV8U1RPTkV8RElTS1N8R1JBVkVMfEJMT0JTfFNJRElOR3xMQVJHRVRJTEV8U1RVQ0NPfFNVQ1RJT058V0VBVkUpfFRFWEdFTl8oPzpERUZBVUxUfFBMQU5BUil8U0NSSVBURURfU0lUX09OTFl8U0NVTFBUXyg/OlRZUEVfKD86U1BIRVJFfFRPUlVTfFBMQU5FfENZTElOREVSfE1BU0spfEZMQUdfKD86TUlSUk9SfElOVkVSVCkpfFBIWVNJQ1MoPzpfKD86U0hBUEVfKD86Q09OVkVYfE5PTkV8UFJJTXxUWVBFKSkpP3woPzpQT1N8Uk9UKV9MT0NBTHxTTElDRXxURVhUfEZMRVhJQkxFfFBPSU5UX0xJR0hUfFRFTVBfT05fUkVafFBIQU5UT018UE9TSVRJT058U0lUX1RBUkdFVHxTSVpFfFJPVEFUSU9OfFRFWFRVUkV8TkFNRXxPTUVHQXxERVNDfExJTktfVEFSR0VUfENPTE9SfEJVTVBfU0hJTll8RlVMTEJSSUdIVHxURVhHRU58R0xPV3xNRURJQV8oPzpBTFRfSU1BR0VfRU5BQkxFfENPTlRST0xTfCg/OkNVUlJFTlR8SE9NRSlfVVJMfEFVVE9fKD86TE9PUHxQTEFZfFNDQUxFfFpPT00pfEZJUlNUX0NMSUNLX0lOVEVSQUNUfCg/OldJRFRIfEhFSUdIVClfUElYRUxTfFdISVRFTElTVCg/Ol9FTkFCTEUpP3xQRVJNU18oPzpJTlRFUkFDVHxDT05UUk9MKXxQQVJBTV9NQVh8Q09OVFJPTFNfKD86U1RBTkRBUkR8TUlOSSl8UEVSTV8oPzpOT05FfE9XTkVSfEdST1VQfEFOWU9ORSl8TUFYXyg/OlVSTF9MRU5HVEh8V0hJVEVMSVNUXyg/OlNJWkV8Q09VTlQpfCg/OldJRFRIfEhFSUdIVClfUElYRUxTKSkpfE1BU0tfKD86QkFTRXxPV05FUnxHUk9VUHxFVkVSWU9ORXxORVhUKXxQRVJNXyg/OlRSQU5TRkVSfE1PRElGWXxDT1BZfE1PVkV8QUxMKXxQQVJDRUxfKD86TUVESUFfQ09NTUFORF8oPzpTVE9QfFBBVVNFfFBMQVl8TE9PUHxURVhUVVJFfFVSTHxUSU1FfEFHRU5UfFVOTE9BRHxBVVRPX0FMSUdOfFRZUEV8U0laRXxERVNDfExPT1BfU0VUKXxGTEFHXyg/OkFMTE9XXyg/OkZMWXwoPzpHUk9VUF8pP1NDUklQVFN8TEFORE1BUkt8VEVSUkFGT1JNfERBTUFHRXxDUkVBVEVfKD86R1JPVVBfKT9PQkpFQ1RTKXxVU0VfKD86QUNDRVNTXyg/OkdST1VQfExJU1QpfEJBTl9MSVNUfExBTkRfUEFTU19MSVNUKXxMT0NBTF9TT1VORF9PTkxZfFJFU1RSSUNUX1BVU0hPQkpFQ1R8QUxMT1dfKD86R1JPVVB8QUxMKV9PQkpFQ1RfRU5UUlkpfENPVU5UXyg/OlRPVEFMfE9XTkVSfEdST1VQfE9USEVSfFNFTEVDVEVEfFRFTVApfERFVEFJTFNfKD86TkFNRXxERVNDfE9XTkVSfEdST1VQfEFSRUF8SUR8U0VFX0FWQVRBUlMpKXxMSVNUX1NUQVRfKD86TUFYfE1JTnxNRUFOfE1FRElBTnxTVERfREVWfFNVTSg/Ol9TUVVBUkVTKT98TlVNX0NPVU5UfEdFT01FVFJJQ19NRUFOfFJBTkdFKXxQQVlfKD86SElERXxERUZBVUxUKXxSRUdJT05fRkxBR18oPzpBTExPV19EQU1BR0V8RklYRURfU1VOfEJMT0NLX1RFUlJBRk9STXxTQU5EQk9YfERJU0FCTEVfKD86Q09MTElTSU9OU3xQSFlTSUNTKXxCTE9DS19GTFl8QUxMT1dfRElSRUNUX1RFTEVQT1JUfFJFU1RSSUNUX1BVU0hPQkpFQ1QpfEhUVFBfKD86TUVUSE9EfE1JTUVUWVBFfEJPRFlfKD86TUFYTEVOR1RIfFRSVU5DQVRFRCl8Q1VTVE9NX0hFQURFUnxQUkFHTUFfTk9fQ0FDSEV8VkVSQk9TRV9USFJPVFRMRXxWRVJJRllfQ0VSVCl8U0lUXyg/OklOVkFMSURfKD86QUdFTlR8TElOS19PQkpFQ1QpfE5PKD86VF9FWFBFUklFTkNFfF8oPzpBQ0NFU1N8RVhQRVJJRU5DRV9QRVJNSVNTSU9OfFNJVF9UQVJHRVQpKSl8U1RSSU5HXyg/OlRSSU0oPzpfKD86SEVBRHxUQUlMKSk/KXxDTElDS19BQ1RJT05fKD86Tk9ORXxUT1VDSHxTSVR8QlVZfFBBWXxPUEVOKD86X01FRElBKT98UExBWXxaT09NKXxUT1VDSF9JTlZBTElEX0ZBQ0V8UFJPRklMRV8oPzpOT05FfFNDUklQVF9NRU1PUlkpfFJDXyg/OkRBVEFfRkxBR1N8REVURUNUX1BIQU5UT018R0VUXyg/OkxJTktfTlVNfE5PUk1BTHxST09UX0tFWSl8TUFYX0hJVFN8UkVKRUNUXyg/OlRZUEVTfEFHRU5UU3woPzpOT04pP1BIWVNJQ0FMfExBTkQpKXxSQ0VSUl8oPzpDQVNUX1RJTUVfRVhDRUVERUR8U0lNX1BFUkZfTE9XfFVOS05PV04pfEVTVEFURV9BQ0NFU1NfKD86QUxMT1dFRF8oPzpBR0VOVHxHUk9VUClfKD86QUREfFJFTU9WRSl8QkFOTkVEX0FHRU5UXyg/OkFERHxSRU1PVkUpKXxERU5TSVRZfEZSSUNUSU9OfFJFU1RJVFVUSU9OfEdSQVZJVFlfTVVMVElQTElFUnxLRk1fKD86Q09NTUFORHxDTURfKD86UExBWXxTVE9QfFBBVVNFKXxNT0RFfEZPUldBUkR8TE9PUHxQSU5HX1BPTkd8UkVWRVJTRXxEQVRBfFJPVEFUSU9OfFRSQU5TTEFUSU9OKXxFUlJfKD86R0VORVJJQ3xQQVJDRUxfUEVSTUlTU0lPTlN8TUFMRk9STUVEX1BBUkFNU3xSVU5USU1FX1BFUk1JU1NJT05TfFRIUk9UVExFRCl8Q0hBUkFDVEVSXyg/OkNNRF8oPzooPzpTTU9PVEhfKT9TVE9QfEpVTVApfERFU0lSRURfKD86VFVSTl8pP1NQRUVEfFJBRElVU3xTVEFZX1dJVEhJTl9QQVJDRUx8TEVOR1RIfE9SSUVOVEFUSU9OfEFDQ09VTlRfRk9SX1NLSVBQRURfRlJBTUVTfEFWT0lEQU5DRV9NT0RFfFRZUEUoPzpfKD86W0FCQ0RdfE5PTkUpKT98TUFYXyg/OkRFQ0VMfFRVUk5fUkFESVVTfCg/OkFDQ0VMfFNQRUVEKSkpfFBVUlNVSVRfKD86T0ZGU0VUfEZVWlpfRkFDVE9SfEdPQUxfVE9MRVJBTkNFfElOVEVSQ0VQVCl8UkVRVUlSRV9MSU5FX09GX1NJR0hUfEZPUkNFX0RJUkVDVF9QQVRIfFZFUlRJQ0FMfEhPUklaT05UQUx8QVZPSURfKD86Q0hBUkFDVEVSU3xEWU5BTUlDX09CU1RBQ0xFU3xOT05FKXxQVV8oPzpFVkFERV8oPzpISURERU58U1BPVFRFRCl8RkFJTFVSRV8oPzpEWU5BTUlDX1BBVEhGSU5ESU5HX0RJU0FCTEVEfElOVkFMSURfKD86R09BTHxTVEFSVCl8Tk9fKD86TkFWTUVTSHxWQUxJRF9ERVNUSU5BVElPTil8T1RIRVJ8VEFSR0VUX0dPTkV8KD86UEFSQ0VMXyk/VU5SRUFDSEFCTEUpfCg/OkdPQUx8U0xPV0RPV05fRElTVEFOQ0UpX1JFQUNIRUQpfFRSQVZFUlNBTF9UWVBFKD86Xyg/OkZBU1R8Tk9ORXxTTE9XKSk/fENPTlRFTlRfVFlQRV8oPzpBVE9NfEZPUk18SFRNTHxKU09OfExMU0R8UlNTfFRFWFR8WEhUTUx8WE1MKXxHQ05QXyg/OlJBRElVU3xTVEFUSUMpfCg/OlBBVFJPTHxXQU5ERVIpX1BBVVNFX0FUX1dBWVBPSU5UU3xPUFRfKD86QVZBVEFSfENIQVJBQ1RFUnxFWENMVVNJT05fVk9MVU1FfExFR0FDWV9MSU5LU0VUfE1BVEVSSUFMX1ZPTFVNRXxPVEhFUnxTVEFUSUNfT0JTVEFDTEV8V0FMS0FCTEUpfFNJTV9TVEFUX1BDVF9DSEFSU19TVEVQUEVEKVxcXFxiJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86RkFMU0V8VFJVRSlcXFxcYidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OlpFUk9fUk9UQVRJT04pXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpFT0Z8SlNPTl8oPzpBUlJBWXxERUxFVEV8RkFMU0V8SU5WQUxJRHxOVUxMfE5VTUJFUnxPQkpFQ1R8U1RSSU5HfFRSVUUpfE5VTExfS0VZfFRFWFRVUkVfKD86QkxBTkt8REVGQVVMVHxNRURJQXxQTFlXT09EfFRSQU5TUEFSRU5UKXxVUkxfUkVRVUVTVF8oPzpHUkFOVEVEfERFTklFRCkpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpaRVJPX1ZFQ1RPUnxUT1VDSF9JTlZBTElEXyg/OlRFWENPT1JEfFZFQ1RPUikpXFxcXGInXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgdmFyIExTTF9GVU5DVElPTlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYig/OmxsKD86QWdlbnRJbkV4cGVyaWVuY2V8KD86Q3JlYXRlfERhdGFTaXplfERlbGV0ZXxLZXlDb3VudHxLZXlzfFJlYWR8VXBkYXRlKUtleVZhbHVlfEdldEV4cGVyaWVuY2UoPzpEZXRhaWxzfEVycm9yTWVzc2FnZSl8UmV0dXJuT2JqZWN0c0J5KD86SUR8T3duZXIpfEpzb24oPzoyTGlzdHxbR1NdZXRWYWx1ZXxWYWx1ZVR5cGUpfFNpbnxDb3N8VGFufEF0YW4yfFNxcnR8UG93fEFic3xGYWJzfEZyYW5kfEZsb29yfENlaWx8Um91bmR8VmVjKD86TWFnfE5vcm18RGlzdCl8Um90KD86QmV0d2VlbnwyKD86RXVsZXJ8RndkfExlZnR8VXApKXwoPzpFdWxlcnxBeGVzKTJSb3R8V2hpc3BlcnwoPzpSZWdpb258T3duZXIpP1NheXxTaG91dHxMaXN0ZW4oPzpDb250cm9sfFJlbW92ZSk/fFNlbnNvcig/OlJlcGVhdHxSZW1vdmUpP3xEZXRlY3RlZCg/Ok5hbWV8S2V5fE93bmVyfFR5cGV8UG9zfFZlbHxHcmFifFJvdHxHcm91cHxMaW5rTnVtYmVyKXxEaWV8R3JvdW5kfFdpbmR8KD86W0dTXWV0KSg/OkFuaW1hdGlvbk92ZXJyaWRlfE1lbW9yeUxpbWl0fFByaW1NZWRpYVBhcmFtc3xQYXJjZWxNdXNpY1VSTHxPYmplY3QoPzpEZXNjfE5hbWUpfFBoeXNpY3NNYXRlcmlhbHxTdGF0dXN8U2NhbGV8Q29sb3J8QWxwaGF8VGV4dHVyZXxQb3N8Um90fEZvcmNlfFRvcnF1ZSl8UmVzZXRBbmltYXRpb25PdmVycmlkZXwoPzpTY2FsZXxPZmZzZXR8Um90YXRlKVRleHR1cmV8KD86Um90KT9UYXJnZXQoPzpSZW1vdmUpP3woPzpTdG9wKT9Nb3ZlVG9UYXJnZXR8QXBwbHkoPzpSb3RhdGlvbmFsKT9JbXB1bHNlfFNldCg/OktleWZyYW1lZE1vdGlvbnxDb250ZW50VHlwZXxSZWdpb25Qb3N8KD86QW5ndWxhcik/VmVsb2NpdHl8QnVveWFuY3l8SG92ZXJIZWlnaHR8Rm9yY2VBbmRUb3JxdWV8VGltZXJFdmVudHxTY3JpcHRTdGF0ZXxEYW1hZ2V8VGV4dHVyZUFuaW18U291bmQoPzpRdWV1ZWluZ3xSYWRpdXMpfFZlaGljbGUoPzpUeXBlfCg/OkZsb2F0fFZlY3RvcnxSb3RhdGlvbilQYXJhbSl8KD86VG91Y2h8U2l0KT9UZXh0fENhbWVyYSg/OkV5ZXxBdClPZmZzZXR8UHJpbWl0aXZlUGFyYW1zfENsaWNrQWN0aW9ufExpbmsoPzpBbHBoYXxDb2xvcnxQcmltaXRpdmVQYXJhbXMoPzpGYXN0KT98VGV4dHVyZSg/OkFuaW0pP3xDYW1lcmF8TWVkaWEpfFJlbW90ZVNjcmlwdEFjY2Vzc1BpbnxQYXlQcmljZXxMb2NhbFJvdCl8U2NhbGVCeUZhY3RvcnxHZXQoPzooPzpNYXh8TWluKVNjYWxlRmFjdG9yfENsb3Nlc3ROYXZQb2ludHxTdGF0aWNQYXRofFNpbVN0YXRzfEVudnxQcmltaXRpdmVQYXJhbXN8TGluayg/OlByaW1pdGl2ZVBhcmFtc3xOdW1iZXIoPzpPZlNpZGVzKT98S2V5fE5hbWV8TWVkaWEpfEhUVFBIZWFkZXJ8RnJlZVVSTHN8T2JqZWN0KD86RGV0YWlsc3xQZXJtTWFza3xQcmltQ291bnQpfFBhcmNlbCg/Ok1heFByaW1zfERldGFpbHN8UHJpbSg/OkNvdW50fE93bmVycykpfEF0dGFjaGVkKD86TGlzdCk/fCg/OlNQTWF4fEZyZWV8VXNlZClNZW1vcnl8UmVnaW9uKD86TmFtZXxUaW1lRGlsYXRpb258RlBTfENvcm5lcnxBZ2VudENvdW50KXxSb290KD86UG9zaXRpb258Um90YXRpb24pfFVuaXhUaW1lfCg/OlBhcmNlbHxSZWdpb24pRmxhZ3N8KD86V2FsbHxHTVQpY2xvY2t8U2ltdWxhdG9ySG9zdG5hbWV8Qm91bmRpbmdCb3h8R2VvbWV0cmljQ2VudGVyfENyZWF0b3J8TnVtYmVyT2YoPzpQcmltc3xOb3RlY2FyZExpbmVzfFNpZGVzKXxBbmltYXRpb24oPzpMaXN0KT98KD86Q2FtZXJhfExvY2FsKSg/OlBvc3xSb3QpfFZlbHxBY2NlbHxPbWVnYXxUaW1lKD86c3RhbXB8T2ZEYXkpfCg/Ok9iamVjdHxDZW50ZXJPZik/TWFzc3xNYXNzTUtTfEVuZXJneXxPd25lcnwoPzpPd25lcik/S2V5fFN1bkRpcmVjdGlvbnxUZXh0dXJlKD86T2Zmc2V0fFNjYWxlfFJvdCl8SW52ZW50b3J5KD86TnVtYmVyfE5hbWV8S2V5fFR5cGV8Q3JlYXRvcnxQZXJtTWFzayl8UGVybWlzc2lvbnMoPzpLZXkpP3xTdGFydFBhcmFtZXRlcnxMaXN0KD86TGVuZ3RofEVudHJ5VHlwZSl8RGF0ZXxBZ2VudCg/OlNpemV8SW5mb3xMYW5ndWFnZXxMaXN0KXxMYW5kT3duZXJBdHxOb3RlY2FyZExpbmV8U2NyaXB0KD86TmFtZXxTdGF0ZSkpfCg/OkdldHxSZXNldHxHZXRBbmRSZXNldClUaW1lfFBsYXlTb3VuZCg/OlNsYXZlKT98TG9vcFNvdW5kKD86TWFzdGVyfFNsYXZlKT98KD86VHJpZ2dlcnxTdG9wfFByZWxvYWQpU291bmR8KD86KD86R2V0fERlbGV0ZSlTdWJ8SW5zZXJ0KVN0cmluZ3xUbyg/OlVwcGVyfExvd2VyKXxHaXZlKD86SW52ZW50b3J5TGlzdHxNb25leSl8UmV6T2JqZWN0fCg/OlN0b3ApP0xvb2tBdHxTbGVlcHxDb2xsaXNpb25GaWx0ZXJ8KD86VGFrZXxSZWxlYXNlKUNvbnRyb2xzfERldGFjaEZyb21BdmF0YXJ8QXR0YWNoVG9BdmF0YXIoPzpUZW1wKT98SW5zdGFudE1lc3NhZ2V8KD86R2V0TmV4dCk/RW1haWx8U3RvcEhvdmVyfE1pbkV2ZW50RGVsYXl8Um90TG9va0F0fFN0cmluZyg/Okxlbmd0aHxUcmltKXwoPzpTdGFydHxTdG9wKUFuaW1hdGlvbnxUYXJnZXRPbWVnYXxSZXF1ZXN0KD86RXhwZXJpZW5jZSk/UGVybWlzc2lvbnN8KD86Q3JlYXRlfEJyZWFrKUxpbmt8QnJlYWtBbGxMaW5rc3woPzpHaXZlfFJlbW92ZSlJbnZlbnRvcnl8V2F0ZXJ8UGFzc1RvdWNoZXN8UmVxdWVzdCg/OkFnZW50fEludmVudG9yeSlEYXRhfFRlbGVwb3J0QWdlbnQoPzpIb21lfEdsb2JhbENvb3Jkcyk/fE1vZGlmeUxhbmR8Q29sbGlzaW9uU291bmR8UmVzZXRTY3JpcHR8TWVzc2FnZUxpbmtlZHxQdXNoT2JqZWN0fFBhc3NDb2xsaXNpb25zfEF4aXNBbmdsZTJSb3R8Um90Mig/OkF4aXN8QW5nbGUpfEEoPzpjb3N8c2luKXxBbmdsZUJldHdlZW58QWxsb3dJbnZlbnRvcnlEcm9wfFN1YlN0cmluZ0luZGV4fExpc3QyKD86Q1NWfEludGVnZXJ8SnNvbnxGbG9hdHxTdHJpbmd8S2V5fFZlY3RvcnxSb3R8TGlzdCg/OlN0cmlkZWQpPyl8RGVsZXRlU3ViTGlzdHxMaXN0KD86U3RhdGlzdGljc3xTb3J0fFJhbmRvbWl6ZXwoPzpJbnNlcnR8RmluZHxSZXBsYWNlKUxpc3QpfEVkZ2VPZldvcmxkfEFkanVzdFNvdW5kVm9sdW1lfEtleTJOYW1lfFRyaWdnZXJTb3VuZExpbWl0ZWR8RWplY3RGcm9tTGFuZHwoPzpDU1Z8UGFyc2VTdHJpbmcpMkxpc3R8T3Zlck15TGFuZHxTYW1lR3JvdXB8VW5TaXR8R3JvdW5kKD86U2xvcGV8Tm9ybWFsfENvbnRvdXIpfEdyb3VuZFJlcGVsfCg/OlNldHxSZW1vdmUpVmVoaWNsZUZsYWdzfFNpdE9uTGlua3woPzpBdmF0YXJPbik/KD86TGluayk/U2l0VGFyZ2V0fFNjcmlwdCg/OkRhbmdlcnxQcm9maWxlcil8RGlhbG9nfFZvbHVtZURldGVjdHxSZXNldE90aGVyU2NyaXB0fFJlbW90ZUxvYWRTY3JpcHRQaW58KD86T3BlbnxDbG9zZSlSZW1vdGVEYXRhQ2hhbm5lbHxTZW5kUmVtb3RlRGF0YXxSZW1vdGVEYXRhUmVwbHl8KD86SW50ZWdlcnxTdHJpbmcpVG9CYXNlNjR8WG9yQmFzZTY0fExvZyg/OjEwKT98QmFzZTY0VG8oPzpTdHJpbmd8SW50ZWdlcil8UGFyc2VTdHJpbmdLZWVwTnVsbHN8UmV6QXRSb290fFJlcXVlc3RTaW11bGF0b3JEYXRhfEZvcmNlTW91c2Vsb29rfCg/OkxvYWR8UmVsZWFzZXwoPzpFfFVuZSlzY2FwZSlVUkx8UGFyY2VsTWVkaWEoPzpDb21tYW5kTGlzdHxRdWVyeSl8TW9kUG93fE1hcERlc3RpbmF0aW9ufCg/OlJlbW92ZUZyb218QWRkVG98UmVzZXQpTGFuZCg/OlBhc3N8QmFuKUxpc3R8KD86U2V0fENsZWFyKUNhbWVyYVBhcmFtc3xIVFRQKD86UmVxdWVzdHxSZXNwb25zZSl8VGV4dEJveHxEZXRlY3RlZFRvdWNoKD86VVZ8RmFjZXxQb3N8KD86TnxCaW4pb3JtYWx8U1QpfCg/Ok1ENXxTSEExfER1bXBMaXN0MilTdHJpbmd8UmVxdWVzdCg/OlNlY3VyZSk/VVJMfENsZWFyKD86UHJpbXxMaW5rKU1lZGlhfCg/OkxpbmspP1BhcnRpY2xlU3lzdGVtfCg/OkdldHxSZXF1ZXN0KSg/OlVzZXJuYW1lfERpc3BsYXlOYW1lKXxSZWdpb25TYXlUb3xDYXN0UmF5fEdlbmVyYXRlS2V5fFRyYW5zZmVyTGluZGVuRG9sbGFyc3xNYW5hZ2VFc3RhdGVBY2Nlc3N8KD86Q3JlYXRlfERlbGV0ZSlDaGFyYWN0ZXJ8RXhlY0NoYXJhY3RlckNtZHxFdmFkZXxGbGVlRnJvbXxOYXZpZ2F0ZVRvfFBhdHJvbFBvaW50c3xQdXJzdWV8VXBkYXRlQ2hhcmFjdGVyfFdhbmRlcldpdGhpbikpXFxcXGInXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlsbGVnYWw6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIExTTF9TVFJJTkdTLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnJCcpLFxuICAgICAgICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTFNMX05VTUJFUlMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OnN0YXRlfGRlZmF1bHQpXFxcXGInXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpzdGF0ZV8oPzplbnRyeXxleGl0KXx0b3VjaCg/Ol8oPzpzdGFydHxlbmQpKT98KD86bGFuZF8pP2NvbGxpc2lvbig/Ol8oPzpzdGFydHxlbmQpKT98dGltZXJ8bGlzdGVufCg/Om5vXyk/c2Vuc29yfGNvbnRyb2x8KD86bm90Xyk/YXRfKD86cm90Xyk/dGFyZ2V0fG1vbmV5fGVtYWlsfGV4cGVyaWVuY2VfcGVybWlzc2lvbnMoPzpfZGVuaWVkKT98cnVuX3RpbWVfcGVybWlzc2lvbnN8Y2hhbmdlZHxhdHRhY2h8ZGF0YXNlcnZlcnxtb3ZpbmdfKD86c3RhcnR8ZW5kKXxsaW5rX21lc3NhZ2V8KD86b258b2JqZWN0KV9yZXp8cmVtb3RlX2RhdGF8aHR0cF9yZSg/OnNwb25zZXxxdWVzdCl8cGF0aF91cGRhdGV8dHJhbnNhY3Rpb25fcmVzdWx0KVxcXFxiJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIExTTF9GVU5DVElPTlMsXG4gICAgICAgICAgICBMU0xfQ09OU1RBTlRTLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzppbnRlZ2VyfGZsb2F0fHN0cmluZ3xrZXl8dmVjdG9yfHF1YXRlcm5pb258cm90YXRpb258bGlzdClcXFxcYidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgT1BFTklOR19MT05HX0JSQUNLRVQgPSAnXFxcXFs9KlxcXFxbJztcbiAgdmFyIENMT1NJTkdfTE9OR19CUkFDS0VUID0gJ1xcXFxdPSpcXFxcXSc7XG4gIHZhciBMT05HX0JSQUNLRVRTID0ge1xuICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCwgZW5kOiBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICBjb250YWluczogWydzZWxmJ11cbiAgfTtcbiAgdmFyIENPTU1FTlRTID0gW1xuICAgIGhsanMuQ09NTUVOVCgnLS0oPyEnICsgT1BFTklOR19MT05HX0JSQUNLRVQgKyAnKScsICckJyksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJy0tJyArIE9QRU5JTkdfTE9OR19CUkFDS0VULFxuICAgICAgQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zOiBbTE9OR19CUkFDS0VUU10sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApXG4gIF07XG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiBcInRydWUgZmFsc2UgbmlsXCIsXG4gICAgICBrZXl3b3JkOiBcImFuZCBicmVhayBkbyBlbHNlIGVsc2VpZiBlbmQgZm9yIGdvdG8gaWYgaW4gbG9jYWwgbm90IG9yIHJlcGVhdCByZXR1cm4gdGhlbiB1bnRpbCB3aGlsZVwiLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vTWV0YXRhZ3MgYW5kIGdsb2JhbHM6XG4gICAgICAgICdfRyBfRU5WIF9WRVJTSU9OIF9faW5kZXggX19uZXdpbmRleCBfX21vZGUgX19jYWxsIF9fbWV0YXRhYmxlIF9fdG9zdHJpbmcgX19sZW4gJyArXG4gICAgICAgICdfX2djIF9fYWRkIF9fc3ViIF9fbXVsIF9fZGl2IF9fbW9kIF9fcG93IF9fY29uY2F0IF9fdW5tIF9fZXEgX19sdCBfX2xlIGFzc2VydCAnICtcbiAgICAgICAgLy9TdGFuZGFyZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOlxuICAgICAgICAnY29sbGVjdGdhcmJhZ2UgZG9maWxlIGVycm9yIGdldGZlbnYgZ2V0bWV0YXRhYmxlIGlwYWlycyBsb2FkIGxvYWRmaWxlIGxvYWRzdHJpbmcnICtcbiAgICAgICAgJ21vZHVsZSBuZXh0IHBhaXJzIHBjYWxsIHByaW50IHJhd2VxdWFsIHJhd2dldCByYXdzZXQgcmVxdWlyZSBzZWxlY3Qgc2V0ZmVudicgK1xuICAgICAgICAnc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZicgK1xuICAgICAgICAvL0xpYnJhcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcyAob25lIGxpbmUgcGVyIGxpYnJhcnkpOlxuICAgICAgICAnY29yb3V0aW5lIHJlc3VtZSB5aWVsZCBzdGF0dXMgd3JhcCBjcmVhdGUgcnVubmluZyBkZWJ1ZyBnZXR1cHZhbHVlICcgK1xuICAgICAgICAnZGVidWcgc2V0aG9vayBnZXRtZXRhdGFibGUgZ2V0aG9vayBzZXRtZXRhdGFibGUgc2V0bG9jYWwgdHJhY2ViYWNrIHNldGZlbnYgZ2V0aW5mbyBzZXR1cHZhbHVlIGdldGxvY2FsIGdldHJlZ2lzdHJ5IGdldGZlbnYgJyArXG4gICAgICAgICdpbyBsaW5lcyB3cml0ZSBjbG9zZSBmbHVzaCBvcGVuIG91dHB1dCB0eXBlIHJlYWQgc3RkZXJyIHN0ZGluIGlucHV0IHN0ZG91dCBwb3BlbiB0bXBmaWxlICcgK1xuICAgICAgICAnbWF0aCBsb2cgbWF4IGFjb3MgaHVnZSBsZGV4cCBwaSBjb3MgdGFuaCBwb3cgZGVnIHRhbiBjb3NoIHNpbmggcmFuZG9tIHJhbmRvbXNlZWQgZnJleHAgY2VpbCBmbG9vciByYWQgYWJzIHNxcnQgbW9kZiBhc2luIG1pbiBtb2QgZm1vZCBsb2cxMCBhdGFuMiBleHAgc2luIGF0YW4gJyArXG4gICAgICAgICdvcyBleGl0IHNldGxvY2FsZSBkYXRlIGdldGVudiBkaWZmdGltZSByZW1vdmUgdGltZSBjbG9jayB0bXBuYW1lIHJlbmFtZSBleGVjdXRlIHBhY2thZ2UgcHJlbG9hZCBsb2FkbGliIGxvYWRlZCBsb2FkZXJzIGNwYXRoIGNvbmZpZyBwYXRoIHNlZWFsbCAnICtcbiAgICAgICAgJ3N0cmluZyBzdWIgdXBwZXIgbGVuIGdmaW5kIHJlcCBmaW5kIG1hdGNoIGNoYXIgZHVtcCBnbWF0Y2ggcmV2ZXJzZSBieXRlIGZvcm1hdCBnc3ViIGxvd2VyICcgK1xuICAgICAgICAndGFibGUgc2V0biBpbnNlcnQgZ2V0biBmb3JlYWNoaSBtYXhuIGZvcmVhY2ggY29uY2F0IHNvcnQgcmVtb3ZlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IENPTU1FTlRTLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJyhbX2EtekEtWl1cXFxcdypcXFxcLikqKFtfYS16QS1aXVxcXFx3KjopP1tfYS16QS1aXVxcXFx3Kid9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IENPTU1FTlRTXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChDT01NRU5UUylcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogT1BFTklOR19MT05HX0JSQUNLRVQsIGVuZDogQ0xPU0lOR19MT05HX0JSQUNLRVQsXG4gICAgICAgIGNvbnRhaW5zOiBbTE9OR19CUkFDS0VUU10sXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfVxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvKiBWYXJpYWJsZXM6IHNpbXBsZSAoZWcgJCh2YXIpKSBhbmQgc3BlY2lhbCAoZWcgJEApICovXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFwoJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkW0AlPD9cXF5cXCtcXCpdL1xuICAgICAgfSxcbiAgICBdXG4gIH07XG4gIC8qIFF1b3RlZCBzdHJpbmcgd2l0aCB2YXJpYWJsZXMgaW5zaWRlICovXG4gIHZhciBRVU9URV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBWQVJJQUJMRSxcbiAgICBdXG4gIH07XG4gIC8qIEZ1bmN0aW9uOiAkKGZ1bmMgYXJnLC4uLikgKi9cbiAgdmFyIEZVTkMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkXFwoW1xcdy1dK1xccy8sIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc3Vic3QgcGF0c3Vic3Qgc3RyaXAgZmluZHN0cmluZyBmaWx0ZXIgZmlsdGVyLW91dCBzb3J0ICcgK1xuICAgICAgICAnd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgJyArXG4gICAgICAgICdhZGRzdWZmaXggYWRkcHJlZml4IGpvaW4gd2lsZGNhcmQgcmVhbHBhdGggYWJzcGF0aCBlcnJvciB3YXJuaW5nICcgK1xuICAgICAgICAnc2hlbGwgb3JpZ2luIGZsYXZvciBmb3JlYWNoIGlmIG9yIGFuZCBjYWxsIGV2YWwgZmlsZSB2YWx1ZScsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgXVxuICB9O1xuICAvKiBWYXJpYWJsZSBhc3NpZ25tZW50ICovXG4gIHZhciBBU1NJR05NRU5UID0ge1xuICAgIGJlZ2luOiAnXicgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqKD89WzorP10/PSknXG4gIH07XG4gIC8qIE1ldGEgdGFyZ2V0cyAoLlBIT05ZKSAqL1xuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL15cXC5QSE9OWTovLCBlbmQ6IC8kLyxcbiAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnLlBIT05ZJ30sXG4gICAgbGV4ZW1lczogL1tcXC5cXHddKy9cbiAgfTtcbiAgLyogVGFyZ2V0cyAqL1xuICB2YXIgVEFSR0VUID0ge1xuICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgIGJlZ2luOiAvXlteXFxzXSs6LywgZW5kOiAvJC8sXG4gICAgY29udGFpbnM6IFtWQVJJQUJMRSxdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtaycsICdtYWsnXSxcbiAgICBrZXl3b3JkczpcbiAgICAgICdkZWZpbmUgZW5kZWYgdW5kZWZpbmUgaWZkZWYgaWZuZGVmIGlmZXEgaWZuZXEgZWxzZSBlbmRpZiAnICtcbiAgICAgICdpbmNsdWRlIC1pbmNsdWRlIHNpbmNsdWRlIG92ZXJyaWRlIGV4cG9ydCB1bmV4cG9ydCBwcml2YXRlIHZwYXRoJyxcbiAgICBsZXhlbWVzOiAvW1xcdy1dKy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEZVTkMsXG4gICAgICBBU1NJR05NRU5ULFxuICAgICAgTUVUQSxcbiAgICAgIFRBUkdFVCxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbW1hJywgJ3dsJ10sXG4gICAgbGV4ZW1lczogJyhcXFxcJHxcXFxcYiknICsgaGxqcy5JREVOVF9SRSArICdcXFxcYicsXG4gICAgLy9cbiAgICAvLyBUaGUgbGlzdCBvZiBcImtleXdvcmRzXCIgKFN5c3RlbWAgc3ltYm9scykgd2FzIGRldGVybWluZWQgYnkgZXZhbHVhdGluZyB0aGUgZm9sbG93aW5nIFdvbGZyYW0gTGFuZ3VhZ2UgY29kZSBpbiBNYXRoZW1hdGljYSAxMi4wOlxuICAgIC8vXG4gICAgLy8gU3RyaW5nUmlmZmxlW1xuICAgIC8vICAgXCInXCIgPD4gU3RyaW5nUmlmZmxlWyMsIFwiIFwiXSA8PiBcIidcIiAmIC9AXG4gICAgLy8gICAgIFZhbHVlc1tHcm91cEJ5W1xuICAgIC8vICAgICAgIFNlbGVjdFtOYW1lc1tcIlN5c3RlbWAqXCJdLFxuICAgIC8vICAgICAgIFN0cmluZ1N0YXJ0c1FbIywgQ2hhcmFjdGVyUmFuZ2VbXCJBXCIsIFwiWlwiXSB8IFwiJFwiXSAmXSxcbiAgICAvLyAgICAgICBGaXJzdFtDaGFyYWN0ZXJzWyNdXSAmXV0sIFwiICtcXG5cIl1cbiAgICAvL1xuICAgIGtleXdvcmRzOiAnQUFTVHJpYW5nbGUgQWJlbGlhbkdyb3VwIEFib3J0IEFib3J0S2VybmVscyBBYm9ydFByb3RlY3QgQWJvcnRTY2hlZHVsZWRUYXNrIEFib3ZlIEFicyBBYnNBcmcgQWJzQXJnUGxvdCBBYnNvbHV0ZSBBYnNvbHV0ZUNvcnJlbGF0aW9uIEFic29sdXRlQ29ycmVsYXRpb25GdW5jdGlvbiBBYnNvbHV0ZUN1cnJlbnRWYWx1ZSBBYnNvbHV0ZURhc2hpbmcgQWJzb2x1dGVGaWxlTmFtZSBBYnNvbHV0ZU9wdGlvbnMgQWJzb2x1dGVQb2ludFNpemUgQWJzb2x1dGVUaGlja25lc3MgQWJzb2x1dGVUaW1lIEFic29sdXRlVGltaW5nIEFjY2VwdGFuY2VUaHJlc2hvbGQgQWNjb3VudGluZ0Zvcm0gQWNjdW11bGF0ZSBBY2N1cmFjeSBBY2N1cmFjeUdvYWwgQWN0aW9uRGVsYXkgQWN0aW9uTWVudSBBY3Rpb25NZW51Qm94IEFjdGlvbk1lbnVCb3hPcHRpb25zIEFjdGl2YXRlIEFjdGl2ZSBBY3RpdmVDbGFzc2lmaWNhdGlvbiBBY3RpdmVDbGFzc2lmaWNhdGlvbk9iamVjdCBBY3RpdmVJdGVtIEFjdGl2ZVByZWRpY3Rpb24gQWN0aXZlUHJlZGljdGlvbk9iamVjdCBBY3RpdmVTdHlsZSBBY3ljbGljR3JhcGhRIEFkZE9uSGVscFBhdGggQWRkU2lkZXMgQWRkVG8gQWRkVG9TZWFyY2hJbmRleCBBZGRVc2VycyBBZGphY2VuY3lHcmFwaCBBZGphY2VuY3lMaXN0IEFkamFjZW5jeU1hdHJpeCBBZGp1c3RtZW50Qm94IEFkanVzdG1lbnRCb3hPcHRpb25zIEFkanVzdFRpbWVTZXJpZXNGb3JlY2FzdCBBZG1pbmlzdHJhdGl2ZURpdmlzaW9uRGF0YSBBZmZpbmVIYWxmU3BhY2UgQWZmaW5lU3BhY2UgQWZmaW5lU3RhdGVTcGFjZU1vZGVsIEFmZmluZVRyYW5zZm9ybSBBZnRlciBBZ2dyZWdhdGVkRW50aXR5Q2xhc3MgQWdncmVnYXRpb25MYXllciBBaXJjcmFmdERhdGEgQWlycG9ydERhdGEgQWlyUHJlc3N1cmVEYXRhIEFpclRlbXBlcmF0dXJlRGF0YSBBaXJ5QWkgQWlyeUFpUHJpbWUgQWlyeUFpWmVybyBBaXJ5QmkgQWlyeUJpUHJpbWUgQWlyeUJpWmVybyBBbGdlYnJhaWNJbnRlZ2VyUSBBbGdlYnJhaWNOdW1iZXIgQWxnZWJyYWljTnVtYmVyRGVub21pbmF0b3IgQWxnZWJyYWljTnVtYmVyTm9ybSBBbGdlYnJhaWNOdW1iZXJQb2x5bm9taWFsIEFsZ2VicmFpY051bWJlclRyYWNlIEFsZ2VicmFpY1J1bGVzIEFsZ2VicmFpY1J1bGVzRGF0YSBBbGdlYnJhaWNzIEFsZ2VicmFpY1VuaXRRIEFsaWdubWVudCBBbGlnbm1lbnRNYXJrZXIgQWxpZ25tZW50UG9pbnQgQWxsIEFsbG93QWR1bHRDb250ZW50IEFsbG93ZWRDbG91ZEV4dHJhUGFyYW1ldGVycyBBbGxvd2VkQ2xvdWRQYXJhbWV0ZXJFeHRlbnNpb25zIEFsbG93ZWREaW1lbnNpb25zIEFsbG93ZWRGcmVxdWVuY3lSYW5nZSBBbGxvd2VkSGVhZHMgQWxsb3dHcm91cENsb3NlIEFsbG93SW5jb21wbGV0ZSBBbGxvd0lubGluZUNlbGxzIEFsbG93S2VybmVsSW5pdGlhbGl6YXRpb24gQWxsb3dMb29zZUdyYW1tYXIgQWxsb3dSZXZlcnNlR3JvdXBDbG9zZSBBbGxvd1NjcmlwdExldmVsQ2hhbmdlIEFsbFRydWUgQWxwaGFiZXQgQWxwaGFiZXRpY09yZGVyIEFscGhhYmV0aWNTb3J0IEFscGhhQ2hhbm5lbCBBbHRlcm5hdGVJbWFnZSBBbHRlcm5hdGluZ0ZhY3RvcmlhbCBBbHRlcm5hdGluZ0dyb3VwIEFsdGVybmF0aXZlSHlwb3RoZXNpcyBBbHRlcm5hdGl2ZXMgQWx0aXR1ZGVNZXRob2QgQW1iaWVudExpZ2h0IEFtYmlndWl0eUZ1bmN0aW9uIEFtYmlndWl0eUxpc3QgQW5hbHl0aWMgQW5hdG9teURhdGEgQW5hdG9teUZvcm0gQW5hdG9teVBsb3QzRCBBbmF0b215U2tpblN0eWxlIEFuYXRvbXlTdHlsaW5nIEFuY2hvcmVkU2VhcmNoIEFuZCBBbmRlcnNvbkRhcmxpbmdUZXN0IEFuZ2VySiBBbmdsZUJpc2VjdG9yIEFuZ2xlQnJhY2tldCBBbmdsZVBhdGggQW5nbGVQYXRoM0QgQW5nbGVWZWN0b3IgQW5ndWxhckdhdWdlIEFuaW1hdGUgQW5pbWF0aW9uQ3ljbGVPZmZzZXQgQW5pbWF0aW9uQ3ljbGVSZXBldGl0aW9ucyBBbmltYXRpb25EaXJlY3Rpb24gQW5pbWF0aW9uRGlzcGxheVRpbWUgQW5pbWF0aW9uUmF0ZSBBbmltYXRpb25SZXBldGl0aW9ucyBBbmltYXRpb25SdW5uaW5nIEFuaW1hdGlvblJ1blRpbWUgQW5pbWF0aW9uVGltZUluZGV4IEFuaW1hdG9yIEFuaW1hdG9yQm94IEFuaW1hdG9yQm94T3B0aW9ucyBBbmltYXRvckVsZW1lbnRzIEFubm90YXRlIEFubm90YXRpb24gQW5ub3RhdGlvbkRlbGV0ZSBBbm5vdGF0aW9uTmFtZXMgQW5ub3RhdGlvblJ1bGVzIEFubm90YXRpb25WYWx1ZSBBbm51aXR5IEFubnVpdHlEdWUgQW5udWx1cyBBbm9tYWx5RGV0ZWN0aW9uIEFub21hbHlEZXRlY3RvckZ1bmN0aW9uIEFub255bW91cyBBbnRpYWxpYXNpbmcgQW50aWhlcm1pdGlhbk1hdHJpeFEgQW50aXN5bW1ldHJpYyBBbnRpc3ltbWV0cmljTWF0cml4USBBbnRvbnltcyBBbnlPcmRlciBBbnlTdWJzZXQgQW55VHJ1ZSBBcGFydCBBcGFydFNxdWFyZUZyZWUgQVBJRnVuY3Rpb24gQXBwZWFyYW5jZSBBcHBlYXJhbmNlRWxlbWVudHMgQXBwZWFyYW5jZVJ1bGVzIEFwcGVsbEYxIEFwcGVuZCBBcHBlbmRDaGVjayBBcHBlbmRMYXllciBBcHBlbmRUbyBBcHBsaWNhdGlvbklkZW50aWZpY2F0aW9uS2V5IEFwcGx5IEFwcGx5U2lkZXMgQXJjQ29zIEFyY0Nvc2ggQXJjQ290IEFyY0NvdGggQXJjQ3NjIEFyY0NzY2ggQXJjQ3VydmF0dXJlIEFSQ0hQcm9jZXNzIEFyY0xlbmd0aCBBcmNTZWMgQXJjU2VjaCBBcmNTaW4gQXJjU2luRGlzdHJpYnV0aW9uIEFyY1NpbmggQXJjVGFuIEFyY1RhbmggQXJlYSBBcmcgQXJnTWF4IEFyZ01pbiBBcmd1bWVudENvdW50USBBUklNQVByb2Nlc3MgQXJpdGhtZXRpY0dlb21ldHJpY01lYW4gQVJNQVByb2Nlc3MgQXJvdW5kIEFyb3VuZFJlcGxhY2UgQVJQcm9jZXNzIEFycmF5IEFycmF5Q29tcG9uZW50cyBBcnJheURlcHRoIEFycmF5RmlsdGVyIEFycmF5RmxhdHRlbiBBcnJheU1lc2ggQXJyYXlQYWQgQXJyYXlQbG90IEFycmF5USBBcnJheVJlc2FtcGxlIEFycmF5UmVzaGFwZSBBcnJheVJ1bGVzIEFycmF5cyBBcnJvdyBBcnJvdzNEQm94IEFycm93Qm94IEFycm93aGVhZHMgQVNBVHJpYW5nbGUgQXNrIEFza0FwcGVuZCBBc2tDb25maXJtIEFza0Rpc3BsYXkgQXNrZWRRIEFza2VkVmFsdWUgQXNrRnVuY3Rpb24gQXNrU3RhdGUgQXNrVGVtcGxhdGVEaXNwbGF5IEFzcGVjdFJhdGlvIEFzcGVjdFJhdGlvRml4ZWQgQXNzZXJ0IEFzc29jaWF0ZVRvIEFzc29jaWF0aW9uIEFzc29jaWF0aW9uRm9ybWF0IEFzc29jaWF0aW9uTWFwIEFzc29jaWF0aW9uUSBBc3NvY2lhdGlvblRocmVhZCBBc3N1bWVEZXRlcm1pbmlzdGljIEFzc3VtaW5nIEFzc3VtcHRpb25zIEFzdHJvbm9taWNhbERhdGEgQXN5bXB0b3RpY0RTb2x2ZVZhbHVlIEFzeW1wdG90aWNFcXVhbCBBc3ltcHRvdGljRXF1aXZhbGVudCBBc3ltcHRvdGljR3JlYXRlciBBc3ltcHRvdGljR3JlYXRlckVxdWFsIEFzeW1wdG90aWNJbnRlZ3JhdGUgQXN5bXB0b3RpY0xlc3MgQXN5bXB0b3RpY0xlc3NFcXVhbCBBc3ltcHRvdGljT3V0cHV0VHJhY2tlciBBc3ltcHRvdGljUlNvbHZlVmFsdWUgQXN5bXB0b3RpY1NvbHZlIEFzeW1wdG90aWNTdW0gQXN5bmNocm9ub3VzIEFzeW5jaHJvbm91c1Rhc2tPYmplY3QgQXN5bmNocm9ub3VzVGFza3MgQXRvbSBBdG9tQ29vcmRpbmF0ZXMgQXRvbUNvdW50IEF0b21EaWFncmFtQ29vcmRpbmF0ZXMgQXRvbUxpc3QgQXRvbVEgQXR0ZW50aW9uTGF5ZXIgQXR0cmlidXRlcyBBdWRpbyBBdWRpb0FtcGxpZnkgQXVkaW9Bbm5vdGF0ZSBBdWRpb0Fubm90YXRpb25Mb29rdXAgQXVkaW9CbG9ja01hcCBBdWRpb0NhcHR1cmUgQXVkaW9DaGFubmVsQXNzaWdubWVudCBBdWRpb0NoYW5uZWxDb21iaW5lIEF1ZGlvQ2hhbm5lbE1peCBBdWRpb0NoYW5uZWxzIEF1ZGlvQ2hhbm5lbFNlcGFyYXRlIEF1ZGlvRGF0YSBBdWRpb0RlbGF5IEF1ZGlvRGVsZXRlIEF1ZGlvRGV2aWNlIEF1ZGlvRGlzdGFuY2UgQXVkaW9GYWRlIEF1ZGlvRnJlcXVlbmN5U2hpZnQgQXVkaW9HZW5lcmF0b3IgQXVkaW9JZGVudGlmeSBBdWRpb0lucHV0RGV2aWNlIEF1ZGlvSW5zZXJ0IEF1ZGlvSW50ZXJ2YWxzIEF1ZGlvSm9pbiBBdWRpb0xhYmVsIEF1ZGlvTGVuZ3RoIEF1ZGlvTG9jYWxNZWFzdXJlbWVudHMgQXVkaW9Mb29waW5nIEF1ZGlvTG91ZG5lc3MgQXVkaW9NZWFzdXJlbWVudHMgQXVkaW9Ob3JtYWxpemUgQXVkaW9PdXRwdXREZXZpY2UgQXVkaW9PdmVybGF5IEF1ZGlvUGFkIEF1ZGlvUGFuIEF1ZGlvUGFydGl0aW9uIEF1ZGlvUGF1c2UgQXVkaW9QaXRjaFNoaWZ0IEF1ZGlvUGxheSBBdWRpb1Bsb3QgQXVkaW9RIEF1ZGlvUmVjb3JkIEF1ZGlvUmVwbGFjZSBBdWRpb1Jlc2FtcGxlIEF1ZGlvUmV2ZXJiIEF1ZGlvU2FtcGxlUmF0ZSBBdWRpb1NwZWN0cmFsTWFwIEF1ZGlvU3BlY3RyYWxUcmFuc2Zvcm1hdGlvbiBBdWRpb1NwbGl0IEF1ZGlvU3RvcCBBdWRpb1N0cmVhbSBBdWRpb1N0cmVhbXMgQXVkaW9UaW1lU3RyZXRjaCBBdWRpb1RyaW0gQXVkaW9UeXBlIEF1Z21lbnRlZFBvbHloZWRyb24gQXVnbWVudGVkU3ltbWV0cmljUG9seW5vbWlhbCBBdXRoZW50aWNhdGUgQXV0aGVudGljYXRpb24gQXV0aGVudGljYXRpb25EaWFsb2cgQXV0b0FjdGlvbiBBdXRvY29tcGxldGUgQXV0b2NvbXBsZXRpb25GdW5jdGlvbiBBdXRvQ29weSBBdXRvY29ycmVsYXRpb25UZXN0IEF1dG9EZWxldGUgQXV0b0V2YWx1YXRlRXZlbnRzIEF1dG9HZW5lcmF0ZWRQYWNrYWdlIEF1dG9JbmRlbnQgQXV0b0luZGVudFNwYWNpbmdzIEF1dG9JdGFsaWNXb3JkcyBBdXRvbG9hZFBhdGggQXV0b01hdGNoIEF1dG9tYXRpYyBBdXRvbWF0aWNJbWFnZVNpemUgQXV0b011bHRpcGxpY2F0aW9uU3ltYm9sIEF1dG9OdW1iZXJGb3JtYXR0aW5nIEF1dG9PcGVuTm90ZWJvb2tzIEF1dG9PcGVuUGFsZXR0ZXMgQXV0b1F1b3RlQ2hhcmFjdGVycyBBdXRvUmVmcmVzaGVkIEF1dG9SZW1vdmUgQXV0b3J1blNlcXVlbmNpbmcgQXV0b1NjYWxpbmcgQXV0b1Njcm9sbCBBdXRvU3BhY2luZyBBdXRvU3R5bGVPcHRpb25zIEF1dG9TdHlsZVdvcmRzIEF1dG9TdWJtaXR0aW5nIEF4ZXMgQXhlc0VkZ2UgQXhlc0xhYmVsIEF4ZXNPcmlnaW4gQXhlc1N0eWxlIEF4aW9tYXRpY1RoZW9yeSBBeGlzJyArXG4gICAgICAnQmFieU1vbnN0ZXJHcm91cEIgQmFjayBCYWNrZ3JvdW5kIEJhY2tncm91bmRBcHBlYXJhbmNlIEJhY2tncm91bmRUYXNrc1NldHRpbmdzIEJhY2tzbGFzaCBCYWNrc3Vic3RpdHV0aW9uIEJhY2t3YXJkIEJhbGwgQmFuZCBCYW5kcGFzc0ZpbHRlciBCYW5kc3RvcEZpbHRlciBCYXJhYmFzaUFsYmVydEdyYXBoRGlzdHJpYnV0aW9uIEJhckNoYXJ0IEJhckNoYXJ0M0QgQmFyY29kZUltYWdlIEJhcmNvZGVSZWNvZ25pemUgQmFyaW5naGF1c0hlbnplVGVzdCBCYXJMZWdlbmQgQmFybG93UHJvc2NoYW5JbXBvcnRhbmNlIEJhcm5lc0cgQmFyT3JpZ2luIEJhclNwYWNpbmcgQmFydGxldHRIYW5uV2luZG93IEJhcnRsZXR0V2luZG93IEJhc2VEZWNvZGUgQmFzZUVuY29kZSBCYXNlRm9ybSBCYXNlbGluZSBCYXNlbGluZVBvc2l0aW9uIEJhc2VTdHlsZSBCYXNpY1JlY3VycmVudExheWVyIEJhdGNoTm9ybWFsaXphdGlvbkxheWVyIEJhdGNoU2l6ZSBCYXRlc0Rpc3RyaWJ1dGlvbiBCYXR0bGVMZW1hcmllV2F2ZWxldCBCYXllc2lhbk1heGltaXphdGlvbiBCYXllc2lhbk1heGltaXphdGlvbk9iamVjdCBCYXllc2lhbk1pbmltaXphdGlvbiBCYXllc2lhbk1pbmltaXphdGlvbk9iamVjdCBCZWNhdXNlIEJlY2ttYW5uRGlzdHJpYnV0aW9uIEJlZXAgQmVmb3JlIEJlZ2luIEJlZ2luRGlhbG9nUGFja2V0IEJlZ2luRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCBCZWdpblBhY2thZ2UgQmVsbEIgQmVsbFkgQmVsb3cgQmVuZm9yZERpc3RyaWJ1dGlvbiBCZW5pbmlEaXN0cmlidXRpb24gQmVua3RhbmRlckdpYnJhdERpc3RyaWJ1dGlvbiBCZW5rdGFuZGVyV2VpYnVsbERpc3RyaWJ1dGlvbiBCZXJub3VsbGlCIEJlcm5vdWxsaURpc3RyaWJ1dGlvbiBCZXJub3VsbGlHcmFwaERpc3RyaWJ1dGlvbiBCZXJub3VsbGlQcm9jZXNzIEJlcm5zdGVpbkJhc2lzIEJlc3NlbEZpbHRlck1vZGVsIEJlc3NlbEkgQmVzc2VsSiBCZXNzZWxKWmVybyBCZXNzZWxLIEJlc3NlbFkgQmVzc2VsWVplcm8gQmV0YSBCZXRhQmlub21pYWxEaXN0cmlidXRpb24gQmV0YURpc3RyaWJ1dGlvbiBCZXRhTmVnYXRpdmVCaW5vbWlhbERpc3RyaWJ1dGlvbiBCZXRhUHJpbWVEaXN0cmlidXRpb24gQmV0YVJlZ3VsYXJpemVkIEJldHdlZW4gQmV0d2Vlbm5lc3NDZW50cmFsaXR5IEJldmVsZWRQb2x5aGVkcm9uIEJlemllckN1cnZlIEJlemllckN1cnZlM0RCb3ggQmV6aWVyQ3VydmUzREJveE9wdGlvbnMgQmV6aWVyQ3VydmVCb3ggQmV6aWVyQ3VydmVCb3hPcHRpb25zIEJlemllckZ1bmN0aW9uIEJpbGF0ZXJhbEZpbHRlciBCaW5hcml6ZSBCaW5hcnlEZXNlcmlhbGl6ZSBCaW5hcnlEaXN0YW5jZSBCaW5hcnlGb3JtYXQgQmluYXJ5SW1hZ2VRIEJpbmFyeVJlYWQgQmluYXJ5UmVhZExpc3QgQmluYXJ5U2VyaWFsaXplIEJpbmFyeVdyaXRlIEJpbkNvdW50cyBCaW5MaXN0cyBCaW5vbWlhbCBCaW5vbWlhbERpc3RyaWJ1dGlvbiBCaW5vbWlhbFByb2Nlc3MgQmlub3JtYWxEaXN0cmlidXRpb24gQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldCBCaXBhcnRpdGVHcmFwaFEgQmlxdWFkcmF0aWNGaWx0ZXJNb2RlbCBCaXJuYmF1bUltcG9ydGFuY2UgQmlybmJhdW1TYXVuZGVyc0Rpc3RyaWJ1dGlvbiBCaXRBbmQgQml0Q2xlYXIgQml0R2V0IEJpdExlbmd0aCBCaXROb3QgQml0T3IgQml0U2V0IEJpdFNoaWZ0TGVmdCBCaXRTaGlmdFJpZ2h0IEJpdFhvciBCaXdlaWdodExvY2F0aW9uIEJpd2VpZ2h0TWlkdmFyaWFuY2UgQmxhY2sgQmxhY2ttYW5IYXJyaXNXaW5kb3cgQmxhY2ttYW5OdXR0YWxsV2luZG93IEJsYWNrbWFuV2luZG93IEJsYW5rIEJsYW5rRm9ybSBCbGFua051bGxTZXF1ZW5jZSBCbGFua1NlcXVlbmNlIEJsZW5kIEJsb2NrIEJsb2NrY2hhaW5BZGRyZXNzRGF0YSBCbG9ja2NoYWluQmFzZSBCbG9ja2NoYWluQmxvY2tEYXRhIEJsb2NrY2hhaW5Db250cmFjdFZhbHVlIEJsb2NrY2hhaW5EYXRhIEJsb2NrY2hhaW5HZXQgQmxvY2tjaGFpbktleUVuY29kZSBCbG9ja2NoYWluUHV0IEJsb2NrY2hhaW5Ub2tlbkRhdGEgQmxvY2tjaGFpblRyYW5zYWN0aW9uIEJsb2NrY2hhaW5UcmFuc2FjdGlvbkRhdGEgQmxvY2tjaGFpblRyYW5zYWN0aW9uU2lnbiBCbG9ja2NoYWluVHJhbnNhY3Rpb25TdWJtaXQgQmxvY2tNYXAgQmxvY2tSYW5kb20gQmxvbXF2aXN0QmV0YSBCbG9tcXZpc3RCZXRhVGVzdCBCbHVlIEJsdXIgQm9kZVBsb3QgQm9obWFuV2luZG93IEJvbGQgQm9uZCBCb25kQ291bnQgQm9uZExpc3QgQm9uZFEgQm9va21hcmtzIEJvb2xlIEJvb2xlYW5Db25zZWN1dGl2ZUZ1bmN0aW9uIEJvb2xlYW5Db252ZXJ0IEJvb2xlYW5Db3VudGluZ0Z1bmN0aW9uIEJvb2xlYW5GdW5jdGlvbiBCb29sZWFuR3JhcGggQm9vbGVhbk1heHRlcm1zIEJvb2xlYW5NaW5pbWl6ZSBCb29sZWFuTWludGVybXMgQm9vbGVhblEgQm9vbGVhblJlZ2lvbiBCb29sZWFucyBCb29sZWFuU3RyaW5ncyBCb29sZWFuVGFibGUgQm9vbGVhblZhcmlhYmxlcyBCb3JkZXJEaW1lbnNpb25zIEJvcmVsVGFubmVyRGlzdHJpYnV0aW9uIEJvdHRvbSBCb3R0b21IYXRUcmFuc2Zvcm0gQm91bmRhcnlEaXNjcmV0aXplR3JhcGhpY3MgQm91bmRhcnlEaXNjcmV0aXplUmVnaW9uIEJvdW5kYXJ5TWVzaCBCb3VuZGFyeU1lc2hSZWdpb24gQm91bmRhcnlNZXNoUmVnaW9uUSBCb3VuZGFyeVN0eWxlIEJvdW5kZWRSZWdpb25RIEJvdW5kaW5nUmVnaW9uIEJvdW5kcyBCb3ggQm94QmFzZWxpbmVTaGlmdCBCb3hEYXRhIEJveERpbWVuc2lvbnMgQm94ZWQgQm94ZXMgQm94Rm9ybSBCb3hGb3JtRm9ybWF0VHlwZXMgQm94RnJhbWUgQm94SUQgQm94TWFyZ2lucyBCb3hNYXRyaXggQm94T2JqZWN0IEJveFJhdGlvcyBCb3hSb3RhdGlvbiBCb3hSb3RhdGlvblBvaW50IEJveFN0eWxlIEJveFdoaXNrZXJDaGFydCBCcmEgQnJhY2tldGluZ0JhciBCcmFLZXQgQnJheUN1cnRpc0Rpc3RhbmNlIEJyZWFkdGhGaXJzdFNjYW4gQnJlYWsgQnJpZGdlRGF0YSBCcmlnaHRuZXNzRXF1YWxpemUgQnJvYWRjYXN0U3RhdGlvbkRhdGEgQnJvd24gQnJvd25Gb3JzeXRoZVRlc3QgQnJvd25pYW5CcmlkZ2VQcm9jZXNzIEJyb3dzZXJDYXRlZ29yeSBCU3BsaW5lQmFzaXMgQlNwbGluZUN1cnZlIEJTcGxpbmVDdXJ2ZTNEQm94IEJTcGxpbmVDdXJ2ZTNEQm94T3B0aW9ucyBCU3BsaW5lQ3VydmVCb3ggQlNwbGluZUN1cnZlQm94T3B0aW9ucyBCU3BsaW5lRnVuY3Rpb24gQlNwbGluZVN1cmZhY2UgQlNwbGluZVN1cmZhY2UzREJveCBCU3BsaW5lU3VyZmFjZTNEQm94T3B0aW9ucyBCdWJibGVDaGFydCBCdWJibGVDaGFydDNEIEJ1YmJsZVNjYWxlIEJ1YmJsZVNpemVzIEJ1aWxkaW5nRGF0YSBCdWxsZXRHYXVnZSBCdXNpbmVzc0RheVEgQnV0dGVyZmx5R3JhcGggQnV0dGVyd29ydGhGaWx0ZXJNb2RlbCBCdXR0b24gQnV0dG9uQmFyIEJ1dHRvbkJveCBCdXR0b25Cb3hPcHRpb25zIEJ1dHRvbkNlbGwgQnV0dG9uQ29udGVudHMgQnV0dG9uRGF0YSBCdXR0b25FdmFsdWF0b3IgQnV0dG9uRXhwYW5kYWJsZSBCdXR0b25GcmFtZSBCdXR0b25GdW5jdGlvbiBCdXR0b25NYXJnaW5zIEJ1dHRvbk1pbkhlaWdodCBCdXR0b25Ob3RlIEJ1dHRvbk5vdGVib29rIEJ1dHRvblNvdXJjZSBCdXR0b25TdHlsZSBCdXR0b25TdHlsZU1lbnVMaXN0aW5nIEJ5dGUgQnl0ZUFycmF5IEJ5dGVBcnJheUZvcm1hdCBCeXRlQXJyYXlRIEJ5dGVBcnJheVRvU3RyaW5nIEJ5dGVDb3VudCBCeXRlT3JkZXJpbmcnICtcbiAgICAgICdDIENhY2hlZFZhbHVlIENhY2hlR3JhcGhpY3MgQ2FjaGVQZXJzaXN0ZW5jZSBDYWxlbmRhckNvbnZlcnQgQ2FsZW5kYXJEYXRhIENhbGVuZGFyVHlwZSBDYWxsb3V0IENhbGxvdXRNYXJrZXIgQ2FsbG91dFN0eWxlIENhbGxQYWNrZXQgQ2FuYmVycmFEaXN0YW5jZSBDYW5jZWwgQ2FuY2VsQnV0dG9uIENhbmRsZXN0aWNrQ2hhcnQgQ2Fub25pY2FsR3JhcGggQ2Fub25pY2FsaXplUG9seWdvbiBDYW5vbmljYWxpemVQb2x5aGVkcm9uIENhbm9uaWNhbE5hbWUgQ2Fub25pY2FsV2FycGluZ0NvcnJlc3BvbmRlbmNlIENhbm9uaWNhbFdhcnBpbmdEaXN0YW5jZSBDYW50b3JNZXNoIENhbnRvclN0YWlyY2FzZSBDYXAgQ2FwRm9ybSBDYXBpdGFsRGlmZmVyZW50aWFsRCBDYXBpdGFsaXplIENhcHN1bGVTaGFwZSBDYXB0dXJlUnVubmluZyBDYXJkaW5hbEJTcGxpbmVCYXNpcyBDYXJsZW1hbkxpbmVhcml6ZSBDYXJtaWNoYWVsTGFtYmRhIENhc2VPcmRlcmluZyBDYXNlcyBDYXNlU2Vuc2l0aXZlIENhc2hmbG93IENhc29yYXRpYW4gQ2F0YWxhbiBDYXRhbGFuTnVtYmVyIENhdGNoIENhdGVuYXRlIENhdGVuYXRlTGF5ZXIgQ2F1Y2h5RGlzdHJpYnV0aW9uIENhdWNoeVdpbmRvdyBDYXlsZXlHcmFwaCBDREYgQ0RGRGVwbG95IENERkluZm9ybWF0aW9uIENERldhdmVsZXQgQ2VpbGluZyBDZWxlc3RpYWxTeXN0ZW0gQ2VsbCBDZWxsQXV0b092ZXJ3cml0ZSBDZWxsQmFzZWxpbmUgQ2VsbEJvdW5kaW5nQm94IENlbGxCcmFja2V0T3B0aW9ucyBDZWxsQ2hhbmdlVGltZXMgQ2VsbENvbnRlbnRzIENlbGxDb250ZXh0IENlbGxEaW5nYmF0IENlbGxEeW5hbWljRXhwcmVzc2lvbiBDZWxsRWRpdER1cGxpY2F0ZSBDZWxsRWxlbWVudHNCb3VuZGluZ0JveCBDZWxsRWxlbWVudFNwYWNpbmdzIENlbGxFcGlsb2cgQ2VsbEV2YWx1YXRpb25EdXBsaWNhdGUgQ2VsbEV2YWx1YXRpb25GdW5jdGlvbiBDZWxsRXZhbHVhdGlvbkxhbmd1YWdlIENlbGxFdmVudEFjdGlvbnMgQ2VsbEZyYW1lIENlbGxGcmFtZUNvbG9yIENlbGxGcmFtZUxhYmVsTWFyZ2lucyBDZWxsRnJhbWVMYWJlbHMgQ2VsbEZyYW1lTWFyZ2lucyBDZWxsR3JvdXAgQ2VsbEdyb3VwRGF0YSBDZWxsR3JvdXBpbmcgQ2VsbEdyb3VwaW5nUnVsZXMgQ2VsbEhvcml6b250YWxTY3JvbGxpbmcgQ2VsbElEIENlbGxMYWJlbCBDZWxsTGFiZWxBdXRvRGVsZXRlIENlbGxMYWJlbE1hcmdpbnMgQ2VsbExhYmVsUG9zaXRpb25pbmcgQ2VsbExhYmVsU3R5bGUgQ2VsbExhYmVsVGVtcGxhdGUgQ2VsbE1hcmdpbnMgQ2VsbE9iamVjdCBDZWxsT3BlbiBDZWxsUHJpbnQgQ2VsbFByb2xvZyBDZWxscyBDZWxsU2l6ZSBDZWxsU3R5bGUgQ2VsbFRhZ3MgQ2VsbHVsYXJBdXRvbWF0b24gQ2Vuc29yZWREaXN0cmlidXRpb24gQ2Vuc29yaW5nIENlbnRlciBDZW50ZXJBcnJheSBDZW50ZXJEb3QgQ2VudHJhbEZlYXR1cmUgQ2VudHJhbE1vbWVudCBDZW50cmFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIENlcHN0cm9ncmFtIENlcHN0cm9ncmFtQXJyYXkgQ2Vwc3RydW1BcnJheSBDRm9ybSBDaGFtcGVybm93bmVOdW1iZXIgQ2hhbmdlT3B0aW9ucyBDaGFubmVsQmFzZSBDaGFubmVsQnJva2VyQWN0aW9uIENoYW5uZWxEYXRhYmluIENoYW5uZWxIaXN0b3J5TGVuZ3RoIENoYW5uZWxMaXN0ZW4gQ2hhbm5lbExpc3RlbmVyIENoYW5uZWxMaXN0ZW5lcnMgQ2hhbm5lbExpc3RlbmVyV2FpdCBDaGFubmVsT2JqZWN0IENoYW5uZWxQcmVTZW5kRnVuY3Rpb24gQ2hhbm5lbFJlY2VpdmVyRnVuY3Rpb24gQ2hhbm5lbFNlbmQgQ2hhbm5lbFN1YnNjcmliZXJzIENoYW5WZXNlQmluYXJpemUgQ2hhcmFjdGVyIENoYXJhY3RlckNvdW50cyBDaGFyYWN0ZXJFbmNvZGluZyBDaGFyYWN0ZXJFbmNvZGluZ3NQYXRoIENoYXJhY3RlcmlzdGljRnVuY3Rpb24gQ2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsIENoYXJhY3Rlck5hbWUgQ2hhcmFjdGVyUmFuZ2UgQ2hhcmFjdGVycyBDaGFydEJhc2VTdHlsZSBDaGFydEVsZW1lbnREYXRhIENoYXJ0RWxlbWVudERhdGFGdW5jdGlvbiBDaGFydEVsZW1lbnRGdW5jdGlvbiBDaGFydEVsZW1lbnRzIENoYXJ0TGFiZWxzIENoYXJ0TGF5b3V0IENoYXJ0TGVnZW5kcyBDaGFydFN0eWxlIENoZWJ5c2hldjFGaWx0ZXJNb2RlbCBDaGVieXNoZXYyRmlsdGVyTW9kZWwgQ2hlYnlzaGV2RGlzdGFuY2UgQ2hlYnlzaGV2VCBDaGVieXNoZXZVIENoZWNrIENoZWNrQWJvcnQgQ2hlY2tBbGwgQ2hlY2tib3ggQ2hlY2tib3hCYXIgQ2hlY2tib3hCb3ggQ2hlY2tib3hCb3hPcHRpb25zIENoZW1pY2FsRGF0YSBDaGVzc2JvYXJkRGlzdGFuY2UgQ2hpRGlzdHJpYnV0aW9uIENoaW5lc2VSZW1haW5kZXIgQ2hpU3F1YXJlRGlzdHJpYnV0aW9uIENob2ljZUJ1dHRvbnMgQ2hvaWNlRGlhbG9nIENob2xlc2t5RGVjb21wb3NpdGlvbiBDaG9wIENocm9tYXRpY2l0eVBsb3QgQ2hyb21hdGljaXR5UGxvdDNEIENocm9tYXRpY1BvbHlub21pYWwgQ2lyY2xlIENpcmNsZUJveCBDaXJjbGVEb3QgQ2lyY2xlTWludXMgQ2lyY2xlUGx1cyBDaXJjbGVQb2ludHMgQ2lyY2xlVGhyb3VnaCBDaXJjbGVUaW1lcyBDaXJjdWxhbnRHcmFwaCBDaXJjdWxhck9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb24gQ2lyY3VsYXJRdWF0ZXJuaW9uTWF0cml4RGlzdHJpYnV0aW9uIENpcmN1bGFyUmVhbE1hdHJpeERpc3RyaWJ1dGlvbiBDaXJjdWxhclN5bXBsZWN0aWNNYXRyaXhEaXN0cmlidXRpb24gQ2lyY3VsYXJVbml0YXJ5TWF0cml4RGlzdHJpYnV0aW9uIENpcmN1bXNwaGVyZSBDaXR5RGF0YSBDbGFzc2lmaWVyRnVuY3Rpb24gQ2xhc3NpZmllckluZm9ybWF0aW9uIENsYXNzaWZpZXJNZWFzdXJlbWVudHMgQ2xhc3NpZmllck1lYXN1cmVtZW50c09iamVjdCBDbGFzc2lmeSBDbGFzc1ByaW9ycyBDbGVhciBDbGVhckFsbCBDbGVhckF0dHJpYnV0ZXMgQ2xlYXJDb29raWVzIENsZWFyUGVybWlzc2lvbnMgQ2xlYXJTeXN0ZW1DYWNoZSBDbGVic2NoR29yZGFuIENsaWNrUGFuZSBDbGlwIENsaXBib2FyZE5vdGVib29rIENsaXBGaWxsIENsaXBwaW5nU3R5bGUgQ2xpcFBsYW5lcyBDbGlwUGxhbmVzU3R5bGUgQ2xpcFJhbmdlIENsb2NrIENsb2NrR2F1Z2UgQ2xvY2t3aXNlQ29udG91ckludGVncmFsIENsb3NlIENsb3NlZCBDbG9zZUtlcm5lbHMgQ2xvc2VuZXNzQ2VudHJhbGl0eSBDbG9zaW5nIENsb3NpbmdBdXRvU2F2ZSBDbG9zaW5nRXZlbnQgQ2xvdWRBY2NvdW50RGF0YSBDbG91ZEJhc2UgQ2xvdWRDb25uZWN0IENsb3VkRGVwbG95IENsb3VkRGlyZWN0b3J5IENsb3VkRGlzY29ubmVjdCBDbG91ZEV2YWx1YXRlIENsb3VkRXhwb3J0IENsb3VkRXhwcmVzc2lvbiBDbG91ZEV4cHJlc3Npb25zIENsb3VkRnVuY3Rpb24gQ2xvdWRHZXQgQ2xvdWRJbXBvcnQgQ2xvdWRMb2dnaW5nRGF0YSBDbG91ZE9iamVjdCBDbG91ZE9iamVjdEluZm9ybWF0aW9uIENsb3VkT2JqZWN0SW5mb3JtYXRpb25EYXRhIENsb3VkT2JqZWN0TmFtZUZvcm1hdCBDbG91ZE9iamVjdHMgQ2xvdWRPYmplY3RVUkxUeXBlIENsb3VkUHVibGlzaCBDbG91ZFB1dCBDbG91ZFJlbmRlcmluZ01ldGhvZCBDbG91ZFNhdmUgQ2xvdWRTaGFyZSBDbG91ZFN1Ym1pdCBDbG91ZFN5bWJvbCBDbG91ZFVuc2hhcmUgQ2x1c3RlckNsYXNzaWZ5IENsdXN0ZXJEaXNzaW1pbGFyaXR5RnVuY3Rpb24gQ2x1c3RlcmluZ0NvbXBvbmVudHMgQ2x1c3RlcmluZ1RyZWUgQ01ZS0NvbG9yIENvYXJzZSBDb2RlQXNzaXN0T3B0aW9ucyBDb2VmZmljaWVudCBDb2VmZmljaWVudEFycmF5cyBDb2VmZmljaWVudERvbWFpbiBDb2VmZmljaWVudExpc3QgQ29lZmZpY2llbnRSdWxlcyBDb2lmbGV0V2F2ZWxldCBDb2xsZWN0IENvbG9uIENvbG9uRm9ybSBDb2xvckJhbGFuY2UgQ29sb3JDb21iaW5lIENvbG9yQ29udmVydCBDb2xvckNvdmVyYWdlIENvbG9yRGF0YSBDb2xvckRhdGFGdW5jdGlvbiBDb2xvckRldGVjdCBDb2xvckRpc3RhbmNlIENvbG9yRnVuY3Rpb24gQ29sb3JGdW5jdGlvblNjYWxpbmcgQ29sb3JpemUgQ29sb3JOZWdhdGUgQ29sb3JPdXRwdXQgQ29sb3JQcm9maWxlRGF0YSBDb2xvclEgQ29sb3JRdWFudGl6ZSBDb2xvclJlcGxhY2UgQ29sb3JSdWxlcyBDb2xvclNlbGVjdG9yU2V0dGluZ3MgQ29sb3JTZXBhcmF0ZSBDb2xvclNldHRlciBDb2xvclNldHRlckJveCBDb2xvclNldHRlckJveE9wdGlvbnMgQ29sb3JTbGlkZXIgQ29sb3JzTmVhciBDb2xvclNwYWNlIENvbG9yVG9uZU1hcHBpbmcgQ29sdW1uIENvbHVtbkFsaWdubWVudHMgQ29sdW1uQmFja2dyb3VuZHMgQ29sdW1uRm9ybSBDb2x1bW5MaW5lcyBDb2x1bW5zRXF1YWwgQ29sdW1uU3BhY2luZ3MgQ29sdW1uV2lkdGhzIENvbWJpbmVkRW50aXR5Q2xhc3MgQ29tYmluZXJGdW5jdGlvbiBDb21ldERhdGEgQ29tbW9uRGVmYXVsdEZvcm1hdFR5cGVzIENvbW1vbmVzdCBDb21tb25lc3RGaWx0ZXIgQ29tbW9uTmFtZSBDb21tb25Vbml0cyBDb21tdW5pdHlCb3VuZGFyeVN0eWxlIENvbW11bml0eUdyYXBoUGxvdCBDb21tdW5pdHlMYWJlbHMgQ29tbXVuaXR5UmVnaW9uU3R5bGUgQ29tcGFueURhdGEgQ29tcGF0aWJsZVVuaXRRIENvbXBpbGF0aW9uT3B0aW9ucyBDb21waWxhdGlvblRhcmdldCBDb21waWxlIENvbXBpbGVkIENvbXBpbGVkQ29kZUZ1bmN0aW9uIENvbXBpbGVkRnVuY3Rpb24gQ29tcGlsZXJPcHRpb25zIENvbXBsZW1lbnQgQ29tcGxldGVHcmFwaCBDb21wbGV0ZUdyYXBoUSBDb21wbGV0ZUthcnlUcmVlIENvbXBsZXRpb25zTGlzdFBhY2tldCBDb21wbGV4IENvbXBsZXhlcyBDb21wbGV4RXhwYW5kIENvbXBsZXhJbmZpbml0eSBDb21wbGV4aXR5RnVuY3Rpb24gQ29tcGxleExpc3RQbG90IENvbXBsZXhQbG90IENvbXBsZXhQbG90M0QgQ29tcG9uZW50TWVhc3VyZW1lbnRzIENvbXBvbmVudHdpc2VDb250ZXh0TWVudSBDb21wb3NlIENvbXBvc2VMaXN0IENvbXBvc2VTZXJpZXMgQ29tcG9zaXRlUSBDb21wb3NpdGlvbiBDb21wb3VuZEVsZW1lbnQgQ29tcG91bmRFeHByZXNzaW9uIENvbXBvdW5kUG9pc3NvbkRpc3RyaWJ1dGlvbiBDb21wb3VuZFBvaXNzb25Qcm9jZXNzIENvbXBvdW5kUmVuZXdhbFByb2Nlc3MgQ29tcHJlc3MgQ29tcHJlc3NlZERhdGEgQ29tcHV0ZVVuY2VydGFpbnR5IENvbmRpdGlvbiBDb25kaXRpb25hbEV4cHJlc3Npb24gQ29uZGl0aW9uZWQgQ29uZSBDb25lQm94IENvbmZpZGVuY2VMZXZlbCBDb25maWRlbmNlUmFuZ2UgQ29uZmlkZW5jZVRyYW5zZm9ybSBDb25maWd1cmF0aW9uUGF0aCBDb25mb3JtQXVkaW8gQ29uZm9ybUltYWdlcyBDb25ncnVlbnQgQ29uaWNIdWxsUmVnaW9uIENvbmljSHVsbFJlZ2lvbjNEQm94IENvbmljSHVsbFJlZ2lvbkJveCBDb25pY09wdGltaXphdGlvbiBDb25qdWdhdGUgQ29uanVnYXRlVHJhbnNwb3NlIENvbmp1bmN0aW9uIENvbm5lY3QgQ29ubmVjdGVkQ29tcG9uZW50cyBDb25uZWN0ZWRHcmFwaENvbXBvbmVudHMgQ29ubmVjdGVkR3JhcGhRIENvbm5lY3RlZE1lc2hDb21wb25lbnRzIENvbm5lY3RlZE1vbGVjdWxlQ29tcG9uZW50cyBDb25uZWN0ZWRNb2xlY3VsZVEgQ29ubmVjdGlvblNldHRpbmdzIENvbm5lY3RMaWJyYXJ5Q2FsbGJhY2tGdW5jdGlvbiBDb25uZWN0U3lzdGVtTW9kZWxDb21wb25lbnRzIENvbm5lc1dpbmRvdyBDb25vdmVyVGVzdCBDb25zb2xlTWVzc2FnZSBDb25zb2xlTWVzc2FnZVBhY2tldCBDb25zb2xlUHJpbnQgQ29uc3RhbnQgQ29uc3RhbnRBcnJheSBDb25zdGFudEFycmF5TGF5ZXIgQ29uc3RhbnRJbWFnZSBDb25zdGFudFBsdXNMYXllciBDb25zdGFudFJlZ2lvblEgQ29uc3RhbnRzIENvbnN0YW50VGltZXNMYXllciBDb25zdGVsbGF0aW9uRGF0YSBDb25zdHJhaW5lZE1heCBDb25zdHJhaW5lZE1pbiBDb25zdHJ1Y3QgQ29udGFpbmluZyBDb250YWluc0FsbCBDb250YWluc0FueSBDb250YWluc0V4YWN0bHkgQ29udGFpbnNOb25lIENvbnRhaW5zT25seSBDb250ZW50RmllbGRPcHRpb25zIENvbnRlbnRMb2NhdGlvbkZ1bmN0aW9uIENvbnRlbnRPYmplY3QgQ29udGVudFBhZGRpbmcgQ29udGVudHNCb3VuZGluZ0JveCBDb250ZW50U2VsZWN0YWJsZSBDb250ZW50U2l6ZSBDb250ZXh0IENvbnRleHRNZW51IENvbnRleHRzIENvbnRleHRUb0ZpbGVOYW1lIENvbnRpbnVhdGlvbiBDb250aW51ZSBDb250aW51ZWRGcmFjdGlvbiBDb250aW51ZWRGcmFjdGlvbksgQ29udGludW91c0FjdGlvbiBDb250aW51b3VzTWFya292UHJvY2VzcyBDb250aW51b3VzVGFzayBDb250aW51b3VzVGltZU1vZGVsUSBDb250aW51b3VzV2F2ZWxldERhdGEgQ29udGludW91c1dhdmVsZXRUcmFuc2Zvcm0gQ29udG91ckRldGVjdCBDb250b3VyR3JhcGhpY3MgQ29udG91ckludGVncmFsIENvbnRvdXJMYWJlbHMgQ29udG91ckxpbmVzIENvbnRvdXJQbG90IENvbnRvdXJQbG90M0QgQ29udG91cnMgQ29udG91clNoYWRpbmcgQ29udG91clNtb290aGluZyBDb250b3VyU3R5bGUgQ29udHJhaGFybW9uaWNNZWFuIENvbnRyYXN0aXZlTG9zc0xheWVyIENvbnRyb2wgQ29udHJvbEFjdGl2ZSBDb250cm9sQWxpZ25tZW50IENvbnRyb2xHcm91cENvbnRlbnRzQm94IENvbnRyb2xsYWJpbGl0eUdyYW1pYW4gQ29udHJvbGxhYmlsaXR5TWF0cml4IENvbnRyb2xsYWJsZURlY29tcG9zaXRpb24gQ29udHJvbGxhYmxlTW9kZWxRIENvbnRyb2xsZXJEdXJhdGlvbiBDb250cm9sbGVySW5mb3JtYXRpb24gQ29udHJvbGxlckluZm9ybWF0aW9uRGF0YSBDb250cm9sbGVyTGlua2luZyBDb250cm9sbGVyTWFuaXB1bGF0ZSBDb250cm9sbGVyTWV0aG9kIENvbnRyb2xsZXJQYXRoIENvbnRyb2xsZXJTdGF0ZSBDb250cm9sUGxhY2VtZW50IENvbnRyb2xzUmVuZGVyaW5nIENvbnRyb2xUeXBlIENvbnZlcmdlbnRzIENvbnZlcnNpb25PcHRpb25zIENvbnZlcnNpb25SdWxlcyBDb252ZXJ0VG9CaXRtYXBQYWNrZXQgQ29udmVydFRvUG9zdFNjcmlwdCBDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0IENvbnZleEh1bGxNZXNoIENvbnZleFBvbHlnb25RIENvbnZleFBvbHloZWRyb25RIENvbnZvbHV0aW9uTGF5ZXIgQ29udm9sdmUgQ29ud2F5R3JvdXBDbzEgQ29ud2F5R3JvdXBDbzIgQ29ud2F5R3JvdXBDbzMgQ29va2llRnVuY3Rpb24gQ29va2llcyBDb29yZGluYXRlQm91bmRpbmdCb3ggQ29vcmRpbmF0ZUJvdW5kaW5nQm94QXJyYXkgQ29vcmRpbmF0ZUJvdW5kcyBDb29yZGluYXRlQm91bmRzQXJyYXkgQ29vcmRpbmF0ZUNoYXJ0RGF0YSBDb29yZGluYXRlc1Rvb2xPcHRpb25zIENvb3JkaW5hdGVUcmFuc2Zvcm0gQ29vcmRpbmF0ZVRyYW5zZm9ybURhdGEgQ29wcmltZVEgQ29wcm9kdWN0IENvcHVsYURpc3RyaWJ1dGlvbiBDb3B5YWJsZSBDb3B5RGF0YWJpbiBDb3B5RGlyZWN0b3J5IENvcHlGaWxlIENvcHlUYWcgQ29weVRvQ2xpcGJvYXJkIENvcm5lckZpbHRlciBDb3JuZXJOZWlnaGJvcnMgQ29ycmVsYXRpb24gQ29ycmVsYXRpb25EaXN0YW5jZSBDb3JyZWxhdGlvbkZ1bmN0aW9uIENvcnJlbGF0aW9uVGVzdCBDb3MgQ29zaCBDb3NoSW50ZWdyYWwgQ29zaW5lRGlzdGFuY2UgQ29zaW5lV2luZG93IENvc0ludGVncmFsIENvdCBDb3RoIENvdW50IENvdW50RGlzdGluY3QgQ291bnREaXN0aW5jdEJ5IENvdW50ZXJBc3NpZ25tZW50cyBDb3VudGVyQm94IENvdW50ZXJCb3hPcHRpb25zIENvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWwgQ291bnRlckV2YWx1YXRvciBDb3VudGVyRnVuY3Rpb24gQ291bnRlckluY3JlbWVudHMgQ291bnRlclN0eWxlIENvdW50ZXJTdHlsZU1lbnVMaXN0aW5nIENvdW50Um9vdHMgQ291bnRyeURhdGEgQ291bnRzIENvdW50c0J5IENvdmFyaWFuY2UgQ292YXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uIENvdmFyaWFuY2VGdW5jdGlvbiBDb3hpYW5EaXN0cmlidXRpb24gQ294SW5nZXJzb2xsUm9zc1Byb2Nlc3MgQ294TW9kZWwgQ294TW9kZWxGaXQgQ3JhbWVyVm9uTWlzZXNUZXN0IENyZWF0ZUFyY2hpdmUgQ3JlYXRlQ2VsbElEIENyZWF0ZUNoYW5uZWwgQ3JlYXRlQ2xvdWRFeHByZXNzaW9uIENyZWF0ZURhdGFiaW4gQ3JlYXRlRGF0YVN5c3RlbU1vZGVsIENyZWF0ZURpYWxvZyBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRG9jdW1lbnQgQ3JlYXRlRmlsZSBDcmVhdGVJbnRlcm1lZGlhdGVEaXJlY3RvcmllcyBDcmVhdGVNYW5hZ2VkTGlicmFyeUV4cHJlc3Npb24gQ3JlYXRlTm90ZWJvb2sgQ3JlYXRlUGFsZXR0ZSBDcmVhdGVQYWxldHRlUGFja2V0IENyZWF0ZVBlcm1pc3Npb25zR3JvdXAgQ3JlYXRlU2NoZWR1bGVkVGFzayBDcmVhdGVTZWFyY2hJbmRleCBDcmVhdGVTeXN0ZW1Nb2RlbCBDcmVhdGVUZW1wb3JhcnkgQ3JlYXRlVVVJRCBDcmVhdGVXaW5kb3cgQ3JpdGVyaW9uRnVuY3Rpb24gQ3JpdGljYWxpdHlGYWlsdXJlSW1wb3J0YW5jZSBDcml0aWNhbGl0eVN1Y2Nlc3NJbXBvcnRhbmNlIENyaXRpY2FsU2VjdGlvbiBDcm9zcyBDcm9zc0VudHJvcHlMb3NzTGF5ZXIgQ3Jvc3NpbmdDb3VudCBDcm9zc2luZ0RldGVjdCBDcm9zc2luZ1BvbHlnb24gQ3Jvc3NNYXRyaXggQ3NjIENzY2ggQ1RDTG9zc0xheWVyIEN1YmUgQ3ViZVJvb3QgQ3ViaWNzIEN1Ym9pZCBDdWJvaWRCb3ggQ3VtdWxhbnQgQ3VtdWxhbnRHZW5lcmF0aW5nRnVuY3Rpb24gQ3VwIEN1cENhcCBDdXJsIEN1cmx5RG91YmxlUXVvdGUgQ3VybHlRdW90ZSBDdXJyZW5jeUNvbnZlcnQgQ3VycmVudERhdGUgQ3VycmVudEltYWdlIEN1cnJlbnRseVNwZWFraW5nUGFja2V0IEN1cnJlbnROb3RlYm9va0ltYWdlIEN1cnJlbnRTY3JlZW5JbWFnZSBDdXJyZW50VmFsdWUgQ3VycnkgQ3VydmF0dXJlRmxvd0ZpbHRlciBDdXJ2ZUNsb3NlZCBDeWFuIEN5Y2xlR3JhcGggQ3ljbGVJbmRleFBvbHlub21pYWwgQ3ljbGVzIEN5Y2xpY0dyb3VwIEN5Y2xvdG9taWMgQ3lsaW5kZXIgQ3lsaW5kZXJCb3ggQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uJyArXG4gICAgICAnRCBEYWd1bURpc3RyaWJ1dGlvbiBEYW1EYXRhIERhbWVyYXVMZXZlbnNodGVpbkRpc3RhbmNlIERhbXBpbmdGYWN0b3IgRGFya2VyIERhc2hlZCBEYXNoaW5nIERhdGFiYXNlQ29ubmVjdCBEYXRhYmFzZURpc2Nvbm5lY3QgRGF0YWJhc2VSZWZlcmVuY2UgRGF0YWJpbiBEYXRhYmluQWRkIERhdGFiaW5SZW1vdmUgRGF0YWJpbnMgRGF0YWJpblVwbG9hZCBEYXRhQ29tcHJlc3Npb24gRGF0YURpc3RyaWJ1dGlvbiBEYXRhUmFuZ2UgRGF0YVJldmVyc2VkIERhdGFzZXQgRGF0ZSBEYXRlQm91bmRzIERhdGVkIERhdGVEZWxpbWl0ZXJzIERhdGVEaWZmZXJlbmNlIERhdGVkVW5pdCBEYXRlRm9ybWF0IERhdGVGdW5jdGlvbiBEYXRlSGlzdG9ncmFtIERhdGVMaXN0IERhdGVMaXN0TG9nUGxvdCBEYXRlTGlzdFBsb3QgRGF0ZUxpc3RTdGVwUGxvdCBEYXRlT2JqZWN0IERhdGVPYmplY3RRIERhdGVPdmVybGFwc1EgRGF0ZVBhdHRlcm4gRGF0ZVBsdXMgRGF0ZVJhbmdlIERhdGVSZWR1Y3Rpb24gRGF0ZVN0cmluZyBEYXRlVGlja3NGb3JtYXQgRGF0ZVZhbHVlIERhdGVXaXRoaW5RIERhdWJlY2hpZXNXYXZlbGV0IERhdmlzRGlzdHJpYnV0aW9uIERhd3NvbkYgRGF5Q291bnQgRGF5Q291bnRDb252ZW50aW9uIERheUhlbWlzcGhlcmUgRGF5bGlnaHRRIERheU1hdGNoUSBEYXlOYW1lIERheU5pZ2h0VGVybWluYXRvciBEYXlQbHVzIERheVJhbmdlIERheVJvdW5kIERlQnJ1aWpuR3JhcGggRGVCcnVpam5TZXF1ZW5jZSBEZWJ1ZyBEZWJ1Z1RhZyBEZWNhcGl0YWxpemUgRGVjaW1hbCBEZWNpbWFsRm9ybSBEZWNsYXJlS25vd25TeW1ib2xzIERlY2xhcmVQYWNrYWdlIERlY29tcG9zZSBEZWNvbnZvbHV0aW9uTGF5ZXIgRGVjcmVtZW50IERlY3J5cHQgRGVjcnlwdEZpbGUgRGVkZWtpbmRFdGEgRGVlcFNwYWNlUHJvYmVEYXRhIERlZmF1bHQgRGVmYXVsdEF4ZXNTdHlsZSBEZWZhdWx0QmFzZVN0eWxlIERlZmF1bHRCb3hTdHlsZSBEZWZhdWx0QnV0dG9uIERlZmF1bHRDb2xvciBEZWZhdWx0Q29udHJvbFBsYWNlbWVudCBEZWZhdWx0RHVwbGljYXRlQ2VsbFN0eWxlIERlZmF1bHREdXJhdGlvbiBEZWZhdWx0RWxlbWVudCBEZWZhdWx0RmFjZUdyaWRzU3R5bGUgRGVmYXVsdEZpZWxkSGludFN0eWxlIERlZmF1bHRGb250IERlZmF1bHRGb250UHJvcGVydGllcyBEZWZhdWx0Rm9ybWF0VHlwZSBEZWZhdWx0Rm9ybWF0VHlwZUZvclN0eWxlIERlZmF1bHRGcmFtZVN0eWxlIERlZmF1bHRGcmFtZVRpY2tzU3R5bGUgRGVmYXVsdEdyaWRMaW5lc1N0eWxlIERlZmF1bHRJbmxpbmVGb3JtYXRUeXBlIERlZmF1bHRJbnB1dEZvcm1hdFR5cGUgRGVmYXVsdExhYmVsU3R5bGUgRGVmYXVsdE1lbnVTdHlsZSBEZWZhdWx0TmF0dXJhbExhbmd1YWdlIERlZmF1bHROZXdDZWxsU3R5bGUgRGVmYXVsdE5ld0lubGluZUNlbGxTdHlsZSBEZWZhdWx0Tm90ZWJvb2sgRGVmYXVsdE9wdGlvbnMgRGVmYXVsdE91dHB1dEZvcm1hdFR5cGUgRGVmYXVsdFByaW50UHJlY2lzaW9uIERlZmF1bHRTdHlsZSBEZWZhdWx0U3R5bGVEZWZpbml0aW9ucyBEZWZhdWx0VGV4dEZvcm1hdFR5cGUgRGVmYXVsdFRleHRJbmxpbmVGb3JtYXRUeXBlIERlZmF1bHRUaWNrc1N0eWxlIERlZmF1bHRUb29sdGlwU3R5bGUgRGVmYXVsdFZhbHVlIERlZmF1bHRWYWx1ZXMgRGVmZXIgRGVmaW5lRXh0ZXJuYWwgRGVmaW5lSW5wdXRTdHJlYW1NZXRob2QgRGVmaW5lT3V0cHV0U3RyZWFtTWV0aG9kIERlZmluZVJlc291cmNlRnVuY3Rpb24gRGVmaW5pdGlvbiBEZWdyZWUgRGVncmVlQ2VudHJhbGl0eSBEZWdyZWVHcmFwaERpc3RyaWJ1dGlvbiBEZWdyZWVMZXhpY29ncmFwaGljIERlZ3JlZVJldmVyc2VMZXhpY29ncmFwaGljIERFaWdlbnN5c3RlbSBERWlnZW52YWx1ZXMgRGVpbml0aWFsaXphdGlvbiBEZWwgRGVsYXVuYXlNZXNoIERlbGF5ZWQgRGVsZXRhYmxlIERlbGV0ZSBEZWxldGVBbm9tYWxpZXMgRGVsZXRlQm9yZGVyQ29tcG9uZW50cyBEZWxldGVDYXNlcyBEZWxldGVDaGFubmVsIERlbGV0ZUNsb3VkRXhwcmVzc2lvbiBEZWxldGVDb250ZW50cyBEZWxldGVEaXJlY3RvcnkgRGVsZXRlRHVwbGljYXRlcyBEZWxldGVEdXBsaWNhdGVzQnkgRGVsZXRlRmlsZSBEZWxldGVNaXNzaW5nIERlbGV0ZU9iamVjdCBEZWxldGVQZXJtaXNzaW9uc0tleSBEZWxldGVTZWFyY2hJbmRleCBEZWxldGVTbWFsbENvbXBvbmVudHMgRGVsZXRlU3RvcHdvcmRzIERlbGV0ZVdpdGhDb250ZW50cyBEZWxldGlvbldhcm5pbmcgRGVsaW1pdGVkQXJyYXkgRGVsaW1pdGVkU2VxdWVuY2UgRGVsaW1pdGVyIERlbGltaXRlckZsYXNoVGltZSBEZWxpbWl0ZXJNYXRjaGluZyBEZWxpbWl0ZXJzIERlbGl2ZXJ5RnVuY3Rpb24gRGVuZHJvZ3JhbSBEZW5vbWluYXRvciBEZW5zaXR5R3JhcGhpY3MgRGVuc2l0eUhpc3RvZ3JhbSBEZW5zaXR5UGxvdCBEZW5zaXR5UGxvdDNEIERlcGVuZGVudFZhcmlhYmxlcyBEZXBsb3kgRGVwbG95ZWQgRGVwdGggRGVwdGhGaXJzdFNjYW4gRGVyaXZhdGl2ZSBEZXJpdmF0aXZlRmlsdGVyIERlcml2ZWRLZXkgRGVzY3JpcHRvclN0YXRlU3BhY2UgRGVzaWduTWF0cml4IERlc3Ryb3lBZnRlckV2YWx1YXRpb24gRGV0IERldmljZUNsb3NlIERldmljZUNvbmZpZ3VyZSBEZXZpY2VFeGVjdXRlIERldmljZUV4ZWN1dGVBc3luY2hyb25vdXMgRGV2aWNlT2JqZWN0IERldmljZU9wZW4gRGV2aWNlT3BlblEgRGV2aWNlUmVhZCBEZXZpY2VSZWFkQnVmZmVyIERldmljZVJlYWRMYXRlc3QgRGV2aWNlUmVhZExpc3QgRGV2aWNlUmVhZFRpbWVTZXJpZXMgRGV2aWNlcyBEZXZpY2VTdHJlYW1zIERldmljZVdyaXRlIERldmljZVdyaXRlQnVmZmVyIERHYXVzc2lhbldhdmVsZXQgRGlhY3JpdGljYWxQb3NpdGlvbmluZyBEaWFnb25hbCBEaWFnb25hbGl6YWJsZU1hdHJpeFEgRGlhZ29uYWxNYXRyaXggRGlhZ29uYWxNYXRyaXhRIERpYWxvZyBEaWFsb2dJbmRlbnQgRGlhbG9nSW5wdXQgRGlhbG9nTGV2ZWwgRGlhbG9nTm90ZWJvb2sgRGlhbG9nUHJvbG9nIERpYWxvZ1JldHVybiBEaWFsb2dTeW1ib2xzIERpYW1vbmQgRGlhbW9uZE1hdHJpeCBEaWNlRGlzc2ltaWxhcml0eSBEaWN0aW9uYXJ5TG9va3VwIERpY3Rpb25hcnlXb3JkUSBEaWZmZXJlbmNlRGVsdGEgRGlmZmVyZW5jZU9yZGVyIERpZmZlcmVuY2VRdW90aWVudCBEaWZmZXJlbmNlUm9vdCBEaWZmZXJlbmNlUm9vdFJlZHVjZSBEaWZmZXJlbmNlcyBEaWZmZXJlbnRpYWxEIERpZmZlcmVudGlhbFJvb3QgRGlmZmVyZW50aWFsUm9vdFJlZHVjZSBEaWZmZXJlbnRpYXRvckZpbHRlciBEaWdpdGFsU2lnbmF0dXJlIERpZ2l0QmxvY2sgRGlnaXRCbG9ja01pbmltdW0gRGlnaXRDaGFyYWN0ZXIgRGlnaXRDb3VudCBEaWdpdFEgRGloZWRyYWxBbmdsZSBEaWhlZHJhbEdyb3VwIERpbGF0aW9uIERpbWVuc2lvbmFsQ29tYmluYXRpb25zIERpbWVuc2lvbmFsTWVzaENvbXBvbmVudHMgRGltZW5zaW9uUmVkdWNlIERpbWVuc2lvblJlZHVjZXJGdW5jdGlvbiBEaW1lbnNpb25SZWR1Y3Rpb24gRGltZW5zaW9ucyBEaXJhY0NvbWIgRGlyYWNEZWx0YSBEaXJlY3RlZEVkZ2UgRGlyZWN0ZWRFZGdlcyBEaXJlY3RlZEdyYXBoIERpcmVjdGVkR3JhcGhRIERpcmVjdGVkSW5maW5pdHkgRGlyZWN0aW9uIERpcmVjdGl2ZSBEaXJlY3RvcnkgRGlyZWN0b3J5TmFtZSBEaXJlY3RvcnlRIERpcmVjdG9yeVN0YWNrIERpcmljaGxldEJldGEgRGlyaWNobGV0Q2hhcmFjdGVyIERpcmljaGxldENvbmRpdGlvbiBEaXJpY2hsZXRDb252b2x2ZSBEaXJpY2hsZXREaXN0cmlidXRpb24gRGlyaWNobGV0RXRhIERpcmljaGxldEwgRGlyaWNobGV0TGFtYmRhIERpcmljaGxldFRyYW5zZm9ybSBEaXJpY2hsZXRXaW5kb3cgRGlzYWJsZUNvbnNvbGVQcmludFBhY2tldCBEaXNhYmxlRm9ybWF0dGluZyBEaXNjcmV0ZUNoaXJwWlRyYW5zZm9ybSBEaXNjcmV0ZUNvbnZvbHZlIERpc2NyZXRlRGVsdGEgRGlzY3JldGVIYWRhbWFyZFRyYW5zZm9ybSBEaXNjcmV0ZUluZGljYXRvciBEaXNjcmV0ZUxpbWl0IERpc2NyZXRlTFFFc3RpbWF0b3JHYWlucyBEaXNjcmV0ZUxRUmVndWxhdG9yR2FpbnMgRGlzY3JldGVMeWFwdW5vdlNvbHZlIERpc2NyZXRlTWFya292UHJvY2VzcyBEaXNjcmV0ZU1heExpbWl0IERpc2NyZXRlTWluTGltaXQgRGlzY3JldGVQbG90IERpc2NyZXRlUGxvdDNEIERpc2NyZXRlUmF0aW8gRGlzY3JldGVSaWNjYXRpU29sdmUgRGlzY3JldGVTaGlmdCBEaXNjcmV0ZVRpbWVNb2RlbFEgRGlzY3JldGVVbmlmb3JtRGlzdHJpYnV0aW9uIERpc2NyZXRlVmFyaWFibGVzIERpc2NyZXRlV2F2ZWxldERhdGEgRGlzY3JldGVXYXZlbGV0UGFja2V0VHJhbnNmb3JtIERpc2NyZXRlV2F2ZWxldFRyYW5zZm9ybSBEaXNjcmV0aXplR3JhcGhpY3MgRGlzY3JldGl6ZVJlZ2lvbiBEaXNjcmltaW5hbnQgRGlzam9pbnRRIERpc2p1bmN0aW9uIERpc2sgRGlza0JveCBEaXNrTWF0cml4IERpc2tTZWdtZW50IERpc3BhdGNoIERpc3BhdGNoUSBEaXNwZXJzaW9uRXN0aW1hdG9yRnVuY3Rpb24gRGlzcGxheSBEaXNwbGF5QWxsU3RlcHMgRGlzcGxheUVuZFBhY2tldCBEaXNwbGF5Rmx1c2hJbWFnZVBhY2tldCBEaXNwbGF5Rm9ybSBEaXNwbGF5RnVuY3Rpb24gRGlzcGxheVBhY2tldCBEaXNwbGF5UnVsZXMgRGlzcGxheVNldFNpemVQYWNrZXQgRGlzcGxheVN0cmluZyBEaXNwbGF5VGVtcG9yYXJ5IERpc3BsYXlXaXRoIERpc3BsYXlXaXRoUmVmIERpc3BsYXlXaXRoVmFyaWFibGUgRGlzdGFuY2VGdW5jdGlvbiBEaXN0YW5jZU1hdHJpeCBEaXN0YW5jZVRyYW5zZm9ybSBEaXN0cmlidXRlIERpc3RyaWJ1dGVkIERpc3RyaWJ1dGVkQ29udGV4dHMgRGlzdHJpYnV0ZURlZmluaXRpb25zIERpc3RyaWJ1dGlvbkNoYXJ0IERpc3RyaWJ1dGlvbkRvbWFpbiBEaXN0cmlidXRpb25GaXRUZXN0IERpc3RyaWJ1dGlvblBhcmFtZXRlckFzc3VtcHRpb25zIERpc3RyaWJ1dGlvblBhcmFtZXRlclEgRGl0aGVyaW5nIERpdiBEaXZlcmdlbmNlIERpdmlkZSBEaXZpZGVCeSBEaXZpZGVycyBEaXZpZGVTaWRlcyBEaXZpc2libGUgRGl2aXNvcnMgRGl2aXNvclNpZ21hIERpdmlzb3JTdW0gRE1TTGlzdCBETVNTdHJpbmcgRG8gRG9ja2VkQ2VsbHMgRG9jdW1lbnRHZW5lcmF0b3IgRG9jdW1lbnRHZW5lcmF0b3JJbmZvcm1hdGlvbiBEb2N1bWVudEdlbmVyYXRvckluZm9ybWF0aW9uRGF0YSBEb2N1bWVudEdlbmVyYXRvcnMgRG9jdW1lbnROb3RlYm9vayBEb2N1bWVudFdlaWdodGluZ1J1bGVzIERvZGVjYWhlZHJvbiBEb21haW5SZWdpc3RyYXRpb25JbmZvcm1hdGlvbiBEb21pbmFudENvbG9ycyBET1NUZXh0Rm9ybWF0IERvdCBEb3REYXNoZWQgRG90RXF1YWwgRG90TGF5ZXIgRG90UGx1c0xheWVyIERvdHRlZCBEb3VibGVCcmFja2V0aW5nQmFyIERvdWJsZUNvbnRvdXJJbnRlZ3JhbCBEb3VibGVEb3duQXJyb3cgRG91YmxlTGVmdEFycm93IERvdWJsZUxlZnRSaWdodEFycm93IERvdWJsZUxlZnRUZWUgRG91YmxlTG9uZ0xlZnRBcnJvdyBEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3cgRG91YmxlTG9uZ1JpZ2h0QXJyb3cgRG91YmxlUmlnaHRBcnJvdyBEb3VibGVSaWdodFRlZSBEb3VibGVVcEFycm93IERvdWJsZVVwRG93bkFycm93IERvdWJsZVZlcnRpY2FsQmFyIERvdWJseUluZmluaXRlIERvd24gRG93bkFycm93IERvd25BcnJvd0JhciBEb3duQXJyb3dVcEFycm93IERvd25MZWZ0UmlnaHRWZWN0b3IgRG93bkxlZnRUZWVWZWN0b3IgRG93bkxlZnRWZWN0b3IgRG93bkxlZnRWZWN0b3JCYXIgRG93blJpZ2h0VGVlVmVjdG9yIERvd25SaWdodFZlY3RvciBEb3duUmlnaHRWZWN0b3JCYXIgRG93bnNhbXBsZSBEb3duVGVlIERvd25UZWVBcnJvdyBEb3duVmFsdWVzIERyYWdBbmREcm9wIERyYXdFZGdlcyBEcmF3RnJvbnRGYWNlcyBEcmF3SGlnaGxpZ2h0ZWQgRHJvcCBEcm9wb3V0TGF5ZXIgRFNvbHZlIERTb2x2ZVZhbHVlIER0IER1YWxMaW5lYXJQcm9ncmFtbWluZyBEdWFsUG9seWhlZHJvbiBEdWFsU3lzdGVtc01vZGVsIER1bXBHZXQgRHVtcFNhdmUgRHVwbGljYXRlRnJlZVEgRHVyYXRpb24gRHluYW1pYyBEeW5hbWljQm94IER5bmFtaWNCb3hPcHRpb25zIER5bmFtaWNFdmFsdWF0aW9uVGltZW91dCBEeW5hbWljR2VvR3JhcGhpY3MgRHluYW1pY0ltYWdlIER5bmFtaWNMb2NhdGlvbiBEeW5hbWljTW9kdWxlIER5bmFtaWNNb2R1bGVCb3ggRHluYW1pY01vZHVsZUJveE9wdGlvbnMgRHluYW1pY01vZHVsZVBhcmVudCBEeW5hbWljTW9kdWxlVmFsdWVzIER5bmFtaWNOYW1lIER5bmFtaWNOYW1lc3BhY2UgRHluYW1pY1JlZmVyZW5jZSBEeW5hbWljU2V0dGluZyBEeW5hbWljVXBkYXRpbmcgRHluYW1pY1dyYXBwZXIgRHluYW1pY1dyYXBwZXJCb3ggRHluYW1pY1dyYXBwZXJCb3hPcHRpb25zJyArXG4gICAgICAnRSBFYXJ0aEltcGFjdERhdGEgRWFydGhxdWFrZURhdGEgRWNjZW50cmljaXR5Q2VudHJhbGl0eSBFY2hvIEVjaG9GdW5jdGlvbiBFY2xpcHNlVHlwZSBFZGdlQWRkIEVkZ2VCZXR3ZWVubmVzc0NlbnRyYWxpdHkgRWRnZUNhcGFjaXR5IEVkZ2VDYXBGb3JtIEVkZ2VDb2xvciBFZGdlQ29ubmVjdGl2aXR5IEVkZ2VDb250cmFjdCBFZGdlQ29zdCBFZGdlQ291bnQgRWRnZUNvdmVyUSBFZGdlQ3ljbGVNYXRyaXggRWRnZURhc2hpbmcgRWRnZURlbGV0ZSBFZGdlRGV0ZWN0IEVkZ2VGb3JtIEVkZ2VJbmRleCBFZGdlSm9pbkZvcm0gRWRnZUxhYmVsaW5nIEVkZ2VMYWJlbHMgRWRnZUxhYmVsU3R5bGUgRWRnZUxpc3QgRWRnZU9wYWNpdHkgRWRnZVEgRWRnZVJlbmRlcmluZ0Z1bmN0aW9uIEVkZ2VSdWxlcyBFZGdlU2hhcGVGdW5jdGlvbiBFZGdlU3R5bGUgRWRnZVRoaWNrbmVzcyBFZGdlV2VpZ2h0IEVkZ2VXZWlnaHRlZEdyYXBoUSBFZGl0YWJsZSBFZGl0QnV0dG9uU2V0dGluZ3MgRWRpdENlbGxUYWdzU2V0dGluZ3MgRWRpdERpc3RhbmNlIEVmZmVjdGl2ZUludGVyZXN0IEVpZ2Vuc3lzdGVtIEVpZ2VudmFsdWVzIEVpZ2VudmVjdG9yQ2VudHJhbGl0eSBFaWdlbnZlY3RvcnMgRWxlbWVudCBFbGVtZW50RGF0YSBFbGVtZW50d2lzZUxheWVyIEVsaWRlZEZvcm1zIEVsaW1pbmF0ZSBFbGltaW5hdGlvbk9yZGVyIEVsbGlwc29pZCBFbGxpcHRpY0UgRWxsaXB0aWNFeHAgRWxsaXB0aWNFeHBQcmltZSBFbGxpcHRpY0YgRWxsaXB0aWNGaWx0ZXJNb2RlbCBFbGxpcHRpY0sgRWxsaXB0aWNMb2cgRWxsaXB0aWNOb21lUSBFbGxpcHRpY1BpIEVsbGlwdGljUmVkdWNlZEhhbGZQZXJpb2RzIEVsbGlwdGljVGhldGEgRWxsaXB0aWNUaGV0YVByaW1lIEVtYmVkQ29kZSBFbWJlZGRlZEhUTUwgRW1iZWRkZWRTZXJ2aWNlIEVtYmVkZGluZ0xheWVyIEVtYmVkZGluZ09iamVjdCBFbWl0U291bmQgRW1waGFzaXplU3ludGF4RXJyb3JzIEVtcGlyaWNhbERpc3RyaWJ1dGlvbiBFbXB0eSBFbXB0eUdyYXBoUSBFbXB0eVJlZ2lvbiBFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQgRW5hYmxlZCBFbmNvZGUgRW5jcnlwdCBFbmNyeXB0ZWRPYmplY3QgRW5jcnlwdEZpbGUgRW5kIEVuZEFkZCBFbmREaWFsb2dQYWNrZXQgRW5kRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCBFbmRPZkJ1ZmZlciBFbmRPZkZpbGUgRW5kT2ZMaW5lIEVuZE9mU3RyaW5nIEVuZFBhY2thZ2UgRW5naW5lRW52aXJvbm1lbnQgRW5naW5lZXJpbmdGb3JtIEVudGVyIEVudGVyRXhwcmVzc2lvblBhY2tldCBFbnRlclRleHRQYWNrZXQgRW50aXR5IEVudGl0eUNsYXNzIEVudGl0eUNsYXNzTGlzdCBFbnRpdHlDb3BpZXMgRW50aXR5RnVuY3Rpb24gRW50aXR5R3JvdXAgRW50aXR5SW5zdGFuY2UgRW50aXR5TGlzdCBFbnRpdHlQcmVmZXRjaCBFbnRpdHlQcm9wZXJ0aWVzIEVudGl0eVByb3BlcnR5IEVudGl0eVByb3BlcnR5Q2xhc3MgRW50aXR5UmVnaXN0ZXIgRW50aXR5U3RvcmUgRW50aXR5U3RvcmVzIEVudGl0eVR5cGVOYW1lIEVudGl0eVVucmVnaXN0ZXIgRW50aXR5VmFsdWUgRW50cm9weSBFbnRyb3B5RmlsdGVyIEVudmlyb25tZW50IEVwaWxvZyBFcGlsb2dGdW5jdGlvbiBFcXVhbCBFcXVhbENvbHVtbnMgRXF1YWxSb3dzIEVxdWFsVGlsZGUgRXF1YWxUbyBFcXVhdGVkVG8gRXF1aWxpYnJpdW0gRXF1aXJpcHBsZUZpbHRlcktlcm5lbCBFcXVpdmFsZW50IEVyZiBFcmZjIEVyZmkgRXJsYW5nQiBFcmxhbmdDIEVybGFuZ0Rpc3RyaWJ1dGlvbiBFcm9zaW9uIEVycm9yQm94IEVycm9yQm94T3B0aW9ucyBFcnJvck5vcm0gRXJyb3JQYWNrZXQgRXJyb3JzRGlhbG9nU2V0dGluZ3MgRXNjYXBlUmFkaXVzIEVzdGltYXRlZEJhY2tncm91bmQgRXN0aW1hdGVkRGlzdHJpYnV0aW9uIEVzdGltYXRlZFByb2Nlc3MgRXN0aW1hdG9yR2FpbnMgRXN0aW1hdG9yUmVndWxhdG9yIEV1Y2xpZGVhbkRpc3RhbmNlIEV1bGVyQW5nbGVzIEV1bGVyQ2hhcmFjdGVyaXN0aWMgRXVsZXJFIEV1bGVyR2FtbWEgRXVsZXJpYW5HcmFwaFEgRXVsZXJNYXRyaXggRXVsZXJQaGkgRXZhbHVhdGFibGUgRXZhbHVhdGUgRXZhbHVhdGVkIEV2YWx1YXRlUGFja2V0IEV2YWx1YXRlU2NoZWR1bGVkVGFzayBFdmFsdWF0aW9uQm94IEV2YWx1YXRpb25DZWxsIEV2YWx1YXRpb25Db21wbGV0aW9uQWN0aW9uIEV2YWx1YXRpb25EYXRhIEV2YWx1YXRpb25FbGVtZW50cyBFdmFsdWF0aW9uRW52aXJvbm1lbnQgRXZhbHVhdGlvbk1vZGUgRXZhbHVhdGlvbk1vbml0b3IgRXZhbHVhdGlvbk5vdGVib29rIEV2YWx1YXRpb25PYmplY3QgRXZhbHVhdGlvbk9yZGVyIEV2YWx1YXRvciBFdmFsdWF0b3JOYW1lcyBFdmVuUSBFdmVudERhdGEgRXZlbnRFdmFsdWF0b3IgRXZlbnRIYW5kbGVyIEV2ZW50SGFuZGxlclRhZyBFdmVudExhYmVscyBFdmVudFNlcmllcyBFeGFjdEJsYWNrbWFuV2luZG93IEV4YWN0TnVtYmVyUSBFeGFjdFJvb3RJc29sYXRpb24gRXhhbXBsZURhdGEgRXhjZXB0IEV4Y2x1ZGVkRm9ybXMgRXhjbHVkZWRMaW5lcyBFeGNsdWRlZFBoeXNpY2FsUXVhbnRpdGllcyBFeGNsdWRlUG9kcyBFeGNsdXNpb25zIEV4Y2x1c2lvbnNTdHlsZSBFeGlzdHMgRXhpdCBFeGl0RGlhbG9nIEV4b3BsYW5ldERhdGEgRXhwIEV4cGFuZCBFeHBhbmRBbGwgRXhwYW5kRGVub21pbmF0b3IgRXhwYW5kRmlsZU5hbWUgRXhwYW5kTnVtZXJhdG9yIEV4cGVjdGF0aW9uIEV4cGVjdGF0aW9uRSBFeHBlY3RlZFZhbHVlIEV4cEdhbW1hRGlzdHJpYnV0aW9uIEV4cEludGVncmFsRSBFeHBJbnRlZ3JhbEVpIEV4cGlyYXRpb25EYXRlIEV4cG9uZW50IEV4cG9uZW50RnVuY3Rpb24gRXhwb25lbnRpYWxEaXN0cmlidXRpb24gRXhwb25lbnRpYWxGYW1pbHkgRXhwb25lbnRpYWxHZW5lcmF0aW5nRnVuY3Rpb24gRXhwb25lbnRpYWxNb3ZpbmdBdmVyYWdlIEV4cG9uZW50aWFsUG93ZXJEaXN0cmlidXRpb24gRXhwb25lbnRQb3NpdGlvbiBFeHBvbmVudFN0ZXAgRXhwb3J0IEV4cG9ydEF1dG9SZXBsYWNlbWVudHMgRXhwb3J0Qnl0ZUFycmF5IEV4cG9ydEZvcm0gRXhwb3J0UGFja2V0IEV4cG9ydFN0cmluZyBFeHByZXNzaW9uIEV4cHJlc3Npb25DZWxsIEV4cHJlc3Npb25QYWNrZXQgRXhwcmVzc2lvblVVSUQgRXhwVG9UcmlnIEV4dGVuZGVkRW50aXR5Q2xhc3MgRXh0ZW5kZWRHQ0QgRXh0ZW5zaW9uIEV4dGVudEVsZW1lbnRGdW5jdGlvbiBFeHRlbnRNYXJrZXJzIEV4dGVudFNpemUgRXh0ZXJuYWxCdW5kbGUgRXh0ZXJuYWxDYWxsIEV4dGVybmFsRGF0YUNoYXJhY3RlckVuY29kaW5nIEV4dGVybmFsRXZhbHVhdGUgRXh0ZXJuYWxGdW5jdGlvbiBFeHRlcm5hbEZ1bmN0aW9uTmFtZSBFeHRlcm5hbE9iamVjdCBFeHRlcm5hbE9wdGlvbnMgRXh0ZXJuYWxTZXNzaW9uT2JqZWN0IEV4dGVybmFsU2Vzc2lvbnMgRXh0ZXJuYWxUeXBlU2lnbmF0dXJlIEV4dGVybmFsVmFsdWUgRXh0cmFjdCBFeHRyYWN0QXJjaGl2ZSBFeHRyYWN0TGF5ZXIgRXh0cmVtZVZhbHVlRGlzdHJpYnV0aW9uJyArXG4gICAgICAnRmFjZUZvcm0gRmFjZUdyaWRzIEZhY2VHcmlkc1N0eWxlIEZhY2lhbEZlYXR1cmVzIEZhY3RvciBGYWN0b3JDb21wbGV0ZSBGYWN0b3JpYWwgRmFjdG9yaWFsMiBGYWN0b3JpYWxNb21lbnQgRmFjdG9yaWFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIEZhY3RvcmlhbFBvd2VyIEZhY3RvckludGVnZXIgRmFjdG9yTGlzdCBGYWN0b3JTcXVhcmVGcmVlIEZhY3RvclNxdWFyZUZyZWVMaXN0IEZhY3RvclRlcm1zIEZhY3RvclRlcm1zTGlzdCBGYWlsIEZhaWx1cmUgRmFpbHVyZUFjdGlvbiBGYWlsdXJlRGlzdHJpYnV0aW9uIEZhaWx1cmVRIEZhbHNlIEZhcmV5U2VxdWVuY2UgRkFSSU1BUHJvY2VzcyBGZWF0dXJlRGlzdGFuY2UgRmVhdHVyZUV4dHJhY3QgRmVhdHVyZUV4dHJhY3Rpb24gRmVhdHVyZUV4dHJhY3RvciBGZWF0dXJlRXh0cmFjdG9yRnVuY3Rpb24gRmVhdHVyZU5hbWVzIEZlYXR1cmVOZWFyZXN0IEZlYXR1cmVTcGFjZVBsb3QgRmVhdHVyZVNwYWNlUGxvdDNEIEZlYXR1cmVUeXBlcyBGRURpc2FibGVDb25zb2xlUHJpbnRQYWNrZXQgRmVlZGJhY2tMaW5lYXJpemUgRmVlZGJhY2tTZWN0b3IgRmVlZGJhY2tTZWN0b3JTdHlsZSBGZWVkYmFja1R5cGUgRkVFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQgRmV0YWxHcm93dGhEYXRhIEZpYm9uYWNjaSBGaWJvbm9yaWFsIEZpZWxkQ29tcGxldGlvbkZ1bmN0aW9uIEZpZWxkSGludCBGaWVsZEhpbnRTdHlsZSBGaWVsZE1hc2tlZCBGaWVsZFNpemUgRmlsZSBGaWxlQmFzZU5hbWUgRmlsZUJ5dGVDb3VudCBGaWxlQ29udmVydCBGaWxlRGF0ZSBGaWxlRXhpc3RzUSBGaWxlRXh0ZW5zaW9uIEZpbGVGb3JtYXQgRmlsZUhhbmRsZXIgRmlsZUhhc2ggRmlsZUluZm9ybWF0aW9uIEZpbGVOYW1lIEZpbGVOYW1lRGVwdGggRmlsZU5hbWVEaWFsb2dTZXR0aW5ncyBGaWxlTmFtZURyb3AgRmlsZU5hbWVGb3JtcyBGaWxlTmFtZUpvaW4gRmlsZU5hbWVzIEZpbGVOYW1lU2V0dGVyIEZpbGVOYW1lU3BsaXQgRmlsZU5hbWVUYWtlIEZpbGVQcmludCBGaWxlU2l6ZSBGaWxlU3lzdGVtTWFwIEZpbGVTeXN0ZW1TY2FuIEZpbGVUZW1wbGF0ZSBGaWxlVGVtcGxhdGVBcHBseSBGaWxlVHlwZSBGaWxsZWRDdXJ2ZSBGaWxsZWRDdXJ2ZUJveCBGaWxsZWRDdXJ2ZUJveE9wdGlvbnMgRmlsbGluZyBGaWxsaW5nU3R5bGUgRmlsbGluZ1RyYW5zZm9ybSBGaWx0ZXJlZEVudGl0eUNsYXNzIEZpbHRlclJ1bGVzIEZpbmFuY2lhbEJvbmQgRmluYW5jaWFsRGF0YSBGaW5hbmNpYWxEZXJpdmF0aXZlIEZpbmFuY2lhbEluZGljYXRvciBGaW5kIEZpbmRBbm9tYWxpZXMgRmluZEFyZ01heCBGaW5kQXJnTWluIEZpbmRDaGFubmVscyBGaW5kQ2xpcXVlIEZpbmRDbHVzdGVycyBGaW5kQ29va2llcyBGaW5kQ3VydmVQYXRoIEZpbmRDeWNsZSBGaW5kRGV2aWNlcyBGaW5kRGlzdHJpYnV0aW9uIEZpbmREaXN0cmlidXRpb25QYXJhbWV0ZXJzIEZpbmREaXZpc2lvbnMgRmluZEVkZ2VDb3ZlciBGaW5kRWRnZUN1dCBGaW5kRWRnZUluZGVwZW5kZW50UGF0aHMgRmluZEVxdWF0aW9uYWxQcm9vZiBGaW5kRXVsZXJpYW5DeWNsZSBGaW5kRXh0ZXJuYWxFdmFsdWF0b3JzIEZpbmRGYWNlcyBGaW5kRmlsZSBGaW5kRml0IEZpbmRGb3JtdWxhIEZpbmRGdW5kYW1lbnRhbEN5Y2xlcyBGaW5kR2VuZXJhdGluZ0Z1bmN0aW9uIEZpbmRHZW9Mb2NhdGlvbiBGaW5kR2VvbWV0cmljQ29uamVjdHVyZXMgRmluZEdlb21ldHJpY1RyYW5zZm9ybSBGaW5kR3JhcGhDb21tdW5pdGllcyBGaW5kR3JhcGhJc29tb3JwaGlzbSBGaW5kR3JhcGhQYXJ0aXRpb24gRmluZEhhbWlsdG9uaWFuQ3ljbGUgRmluZEhhbWlsdG9uaWFuUGF0aCBGaW5kSGlkZGVuTWFya292U3RhdGVzIEZpbmRJbmRlcGVuZGVudEVkZ2VTZXQgRmluZEluZGVwZW5kZW50VmVydGV4U2V0IEZpbmRJbnN0YW5jZSBGaW5kSW50ZWdlck51bGxWZWN0b3IgRmluZEtDbGFuIEZpbmRLQ2xpcXVlIEZpbmRLQ2x1YiBGaW5kS1BsZXggRmluZExpYnJhcnkgRmluZExpbmVhclJlY3VycmVuY2UgRmluZExpc3QgRmluZE1hdGNoaW5nQ29sb3IgRmluZE1heGltdW0gRmluZE1heGltdW1GbG93IEZpbmRNYXhWYWx1ZSBGaW5kTWVzaERlZmVjdHMgRmluZE1pbmltdW0gRmluZE1pbmltdW1Db3N0RmxvdyBGaW5kTWluaW11bUN1dCBGaW5kTWluVmFsdWUgRmluZE1vbGVjdWxlU3Vic3RydWN0dXJlIEZpbmRQYXRoIEZpbmRQZWFrcyBGaW5kUGVybXV0YXRpb24gRmluZFBvc3RtYW5Ub3VyIEZpbmRQcm9jZXNzUGFyYW1ldGVycyBGaW5kUmVwZWF0IEZpbmRSb290IEZpbmRTZXF1ZW5jZUZ1bmN0aW9uIEZpbmRTZXR0aW5ncyBGaW5kU2hvcnRlc3RQYXRoIEZpbmRTaG9ydGVzdFRvdXIgRmluZFNwYW5uaW5nVHJlZSBGaW5kU3lzdGVtTW9kZWxFcXVpbGlicml1bSBGaW5kVGV4dHVhbEFuc3dlciBGaW5kVGhyZXNob2xkIEZpbmRUcmFuc2llbnRSZXBlYXQgRmluZFZlcnRleENvdmVyIEZpbmRWZXJ0ZXhDdXQgRmluZFZlcnRleEluZGVwZW5kZW50UGF0aHMgRmluZSBGaW5pc2hEeW5hbWljIEZpbml0ZUFiZWxpYW5Hcm91cENvdW50IEZpbml0ZUdyb3VwQ291bnQgRmluaXRlR3JvdXBEYXRhIEZpcnN0IEZpcnN0Q2FzZSBGaXJzdFBhc3NhZ2VUaW1lRGlzdHJpYnV0aW9uIEZpcnN0UG9zaXRpb24gRmlzY2hlckdyb3VwRmkyMiBGaXNjaGVyR3JvdXBGaTIzIEZpc2NoZXJHcm91cEZpMjRQcmltZSBGaXNoZXJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvbiBGaXNoZXJSYXRpb1Rlc3QgRmlzaGVyWkRpc3RyaWJ1dGlvbiBGaXQgRml0QWxsIEZpdFJlZ3VsYXJpemF0aW9uIEZpdHRlZE1vZGVsIEZpeGVkT3JkZXIgRml4ZWRQb2ludCBGaXhlZFBvaW50TGlzdCBGbGFzaFNlbGVjdGlvbiBGbGF0IEZsYXR0ZW4gRmxhdHRlbkF0IEZsYXR0ZW5MYXllciBGbGF0VG9wV2luZG93IEZsaXBWaWV3IEZsb29yIEZsb3dQb2x5bm9taWFsIEZsdXNoUHJpbnRPdXRwdXRQYWNrZXQgRm9sZCBGb2xkTGlzdCBGb2xkUGFpciBGb2xkUGFpckxpc3QgRm9sbG93UmVkaXJlY3RzIEZvbnQgRm9udENvbG9yIEZvbnRGYW1pbHkgRm9udEZvcm0gRm9udE5hbWUgRm9udE9wYWNpdHkgRm9udFBvc3RTY3JpcHROYW1lIEZvbnRQcm9wZXJ0aWVzIEZvbnRSZWVuY29kaW5nIEZvbnRTaXplIEZvbnRTbGFudCBGb250U3Vic3RpdHV0aW9ucyBGb250VHJhY2tpbmcgRm9udFZhcmlhdGlvbnMgRm9udFdlaWdodCBGb3IgRm9yQWxsIEZvcm1hdCBGb3JtYXRSdWxlcyBGb3JtYXRUeXBlIEZvcm1hdFR5cGVBdXRvQ29udmVydCBGb3JtYXRWYWx1ZXMgRm9ybUJveCBGb3JtQm94T3B0aW9ucyBGb3JtQ29udHJvbCBGb3JtRnVuY3Rpb24gRm9ybUxheW91dEZ1bmN0aW9uIEZvcm1PYmplY3QgRm9ybVBhZ2UgRm9ybVRoZW1lIEZvcm11bGFEYXRhIEZvcm11bGFMb29rdXAgRm9ydHJhbkZvcm0gRm9yd2FyZCBGb3J3YXJkQmFja3dhcmQgRm91cmllciBGb3VyaWVyQ29lZmZpY2llbnQgRm91cmllckNvc0NvZWZmaWNpZW50IEZvdXJpZXJDb3NTZXJpZXMgRm91cmllckNvc1RyYW5zZm9ybSBGb3VyaWVyRENUIEZvdXJpZXJEQ1RGaWx0ZXIgRm91cmllckRDVE1hdHJpeCBGb3VyaWVyRFNUIEZvdXJpZXJEU1RNYXRyaXggRm91cmllck1hdHJpeCBGb3VyaWVyUGFyYW1ldGVycyBGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gRm91cmllclNlcmllcyBGb3VyaWVyU2luQ29lZmZpY2llbnQgRm91cmllclNpblNlcmllcyBGb3VyaWVyU2luVHJhbnNmb3JtIEZvdXJpZXJUcmFuc2Zvcm0gRm91cmllclRyaWdTZXJpZXMgRnJhY3Rpb25hbEJyb3duaWFuTW90aW9uUHJvY2VzcyBGcmFjdGlvbmFsR2F1c3NpYW5Ob2lzZVByb2Nlc3MgRnJhY3Rpb25hbFBhcnQgRnJhY3Rpb25Cb3ggRnJhY3Rpb25Cb3hPcHRpb25zIEZyYWN0aW9uTGluZSBGcmFtZSBGcmFtZUJveCBGcmFtZUJveE9wdGlvbnMgRnJhbWVkIEZyYW1lSW5zZXQgRnJhbWVMYWJlbCBGcmFtZWxlc3MgRnJhbWVNYXJnaW5zIEZyYW1lUmF0ZSBGcmFtZVN0eWxlIEZyYW1lVGlja3MgRnJhbWVUaWNrc1N0eWxlIEZSYXRpb0Rpc3RyaWJ1dGlvbiBGcmVjaGV0RGlzdHJpYnV0aW9uIEZyZWVRIEZyZW5ldFNlcnJldFN5c3RlbSBGcmVxdWVuY3lTYW1wbGluZ0ZpbHRlcktlcm5lbCBGcmVzbmVsQyBGcmVzbmVsRiBGcmVzbmVsRyBGcmVzbmVsUyBGcmlkYXkgRnJvYmVuaXVzTnVtYmVyIEZyb2Jlbml1c1NvbHZlIEZyb21BYnNvbHV0ZVRpbWUgRnJvbUNoYXJhY3RlckNvZGUgRnJvbUNvZWZmaWNpZW50UnVsZXMgRnJvbUNvbnRpbnVlZEZyYWN0aW9uIEZyb21EYXRlIEZyb21EaWdpdHMgRnJvbURNUyBGcm9tRW50aXR5IEZyb21KdWxpYW5EYXRlIEZyb21MZXR0ZXJOdW1iZXIgRnJvbVBvbGFyQ29vcmRpbmF0ZXMgRnJvbVJvbWFuTnVtZXJhbCBGcm9tU3BoZXJpY2FsQ29vcmRpbmF0ZXMgRnJvbVVuaXhUaW1lIEZyb250IEZyb250RW5kRHluYW1pY0V4cHJlc3Npb24gRnJvbnRFbmRFdmVudEFjdGlvbnMgRnJvbnRFbmRFeGVjdXRlIEZyb250RW5kT2JqZWN0IEZyb250RW5kUmVzb3VyY2UgRnJvbnRFbmRSZXNvdXJjZVN0cmluZyBGcm9udEVuZFN0YWNrU2l6ZSBGcm9udEVuZFRva2VuIEZyb250RW5kVG9rZW5FeGVjdXRlIEZyb250RW5kVmFsdWVDYWNoZSBGcm9udEVuZFZlcnNpb24gRnJvbnRGYWNlQ29sb3IgRnJvbnRGYWNlT3BhY2l0eSBGdWxsIEZ1bGxBeGVzIEZ1bGxEZWZpbml0aW9uIEZ1bGxGb3JtIEZ1bGxHcmFwaGljcyBGdWxsSW5mb3JtYXRpb25PdXRwdXRSZWd1bGF0b3IgRnVsbE9wdGlvbnMgRnVsbFJlZ2lvbiBGdWxsU2ltcGxpZnkgRnVuY3Rpb24gRnVuY3Rpb25Db21waWxlIEZ1bmN0aW9uQ29tcGlsZUV4cG9ydCBGdW5jdGlvbkNvbXBpbGVFeHBvcnRCeXRlQXJyYXkgRnVuY3Rpb25Db21waWxlRXhwb3J0TGlicmFyeSBGdW5jdGlvbkNvbXBpbGVFeHBvcnRTdHJpbmcgRnVuY3Rpb25Eb21haW4gRnVuY3Rpb25FeHBhbmQgRnVuY3Rpb25JbnRlcnBvbGF0aW9uIEZ1bmN0aW9uUGVyaW9kIEZ1bmN0aW9uUmFuZ2UgRnVuY3Rpb25TcGFjZSBGdXNzZWxsVmVzZWx5SW1wb3J0YW5jZScgK1xuICAgICAgJ0dhYm9yRmlsdGVyIEdhYm9yTWF0cml4IEdhYm9yV2F2ZWxldCBHYWluTWFyZ2lucyBHYWluUGhhc2VNYXJnaW5zIEdhbGF4eURhdGEgR2FsbGVyeVZpZXcgR2FtbWEgR2FtbWFEaXN0cmlidXRpb24gR2FtbWFSZWd1bGFyaXplZCBHYXBQZW5hbHR5IEdBUkNIUHJvY2VzcyBHYXRlZFJlY3VycmVudExheWVyIEdhdGhlciBHYXRoZXJCeSBHYXVnZUZhY2VFbGVtZW50RnVuY3Rpb24gR2F1Z2VGYWNlU3R5bGUgR2F1Z2VGcmFtZUVsZW1lbnRGdW5jdGlvbiBHYXVnZUZyYW1lU2l6ZSBHYXVnZUZyYW1lU3R5bGUgR2F1Z2VMYWJlbHMgR2F1Z2VNYXJrZXJzIEdhdWdlU3R5bGUgR2F1c3NpYW5GaWx0ZXIgR2F1c3NpYW5JbnRlZ2VycyBHYXVzc2lhbk1hdHJpeCBHYXVzc2lhbk9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb24gR2F1c3NpYW5TeW1wbGVjdGljTWF0cml4RGlzdHJpYnV0aW9uIEdhdXNzaWFuVW5pdGFyeU1hdHJpeERpc3RyaWJ1dGlvbiBHYXVzc2lhbldpbmRvdyBHQ0QgR2VnZW5iYXVlckMgR2VuZXJhbCBHZW5lcmFsaXplZExpbmVhck1vZGVsRml0IEdlbmVyYXRlQXN5bW1ldHJpY0tleVBhaXIgR2VuZXJhdGVDb25kaXRpb25zIEdlbmVyYXRlZENlbGwgR2VuZXJhdGVkRG9jdW1lbnRCaW5kaW5nIEdlbmVyYXRlRGVyaXZlZEtleSBHZW5lcmF0ZURpZ2l0YWxTaWduYXR1cmUgR2VuZXJhdGVEb2N1bWVudCBHZW5lcmF0ZWRQYXJhbWV0ZXJzIEdlbmVyYXRlZFF1YW50aXR5TWFnbml0dWRlcyBHZW5lcmF0ZUhUVFBSZXNwb25zZSBHZW5lcmF0ZVNlY3VyZWRBdXRoZW50aWNhdGlvbktleSBHZW5lcmF0ZVN5bW1ldHJpY0tleSBHZW5lcmF0aW5nRnVuY3Rpb24gR2VuZXJhdG9yRGVzY3JpcHRpb24gR2VuZXJhdG9ySGlzdG9yeUxlbmd0aCBHZW5lcmF0b3JPdXRwdXRUeXBlIEdlbmVyaWMgR2VuZXJpY0N5bGluZHJpY2FsRGVjb21wb3NpdGlvbiBHZW5vbWVEYXRhIEdlbm9tZUxvb2t1cCBHZW9BbnRpcG9kZSBHZW9BcmVhIEdlb0FycmF5U2l6ZSBHZW9CYWNrZ3JvdW5kIEdlb0JvdW5kaW5nQm94IEdlb0JvdW5kcyBHZW9Cb3VuZHNSZWdpb24gR2VvQnViYmxlQ2hhcnQgR2VvQ2VudGVyIEdlb0NpcmNsZSBHZW9kZXNpY0Nsb3NpbmcgR2VvZGVzaWNEaWxhdGlvbiBHZW9kZXNpY0Vyb3Npb24gR2VvZGVzaWNPcGVuaW5nIEdlb0Rlc3RpbmF0aW9uIEdlb2Rlc3lEYXRhIEdlb0RpcmVjdGlvbiBHZW9EaXNrIEdlb0Rpc3BsYWNlbWVudCBHZW9EaXN0YW5jZSBHZW9EaXN0YW5jZUxpc3QgR2VvRWxldmF0aW9uRGF0YSBHZW9FbnRpdGllcyBHZW9HcmFwaGljcyBHZW9ncmF2aXR5TW9kZWxEYXRhIEdlb0dyaWREaXJlY3Rpb25EaWZmZXJlbmNlIEdlb0dyaWRMaW5lcyBHZW9HcmlkTGluZXNTdHlsZSBHZW9HcmlkUG9zaXRpb24gR2VvR3JpZFJhbmdlIEdlb0dyaWRSYW5nZVBhZGRpbmcgR2VvR3JpZFVuaXRBcmVhIEdlb0dyaWRVbml0RGlzdGFuY2UgR2VvR3JpZFZlY3RvciBHZW9Hcm91cCBHZW9IZW1pc3BoZXJlIEdlb0hlbWlzcGhlcmVCb3VuZGFyeSBHZW9IaXN0b2dyYW0gR2VvSWRlbnRpZnkgR2VvSW1hZ2UgR2VvTGFiZWxzIEdlb0xlbmd0aCBHZW9MaXN0UGxvdCBHZW9Mb2NhdGlvbiBHZW9sb2dpY2FsUGVyaW9kRGF0YSBHZW9tYWduZXRpY01vZGVsRGF0YSBHZW9NYXJrZXIgR2VvbWV0cmljQXNzZXJ0aW9uIEdlb21ldHJpY0Jyb3duaWFuTW90aW9uUHJvY2VzcyBHZW9tZXRyaWNEaXN0cmlidXRpb24gR2VvbWV0cmljTWVhbiBHZW9tZXRyaWNNZWFuRmlsdGVyIEdlb21ldHJpY1NjZW5lIEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uIEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3ggR2VvbWV0cmljVHJhbnNmb3JtYXRpb24zREJveE9wdGlvbnMgR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3ggR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3hPcHRpb25zIEdlb01vZGVsIEdlb05lYXJlc3QgR2VvUGF0aCBHZW9Qb3NpdGlvbiBHZW9Qb3NpdGlvbkVOVSBHZW9Qb3NpdGlvblhZWiBHZW9Qcm9qZWN0aW9uIEdlb1Byb2plY3Rpb25EYXRhIEdlb1JhbmdlIEdlb1JhbmdlUGFkZGluZyBHZW9SZWdpb25WYWx1ZVBsb3QgR2VvUmVzb2x1dGlvbiBHZW9TY2FsZUJhciBHZW9TZXJ2ZXIgR2VvU21vb3RoSGlzdG9ncmFtIEdlb1N0cmVhbVBsb3QgR2VvU3R5bGluZyBHZW9TdHlsaW5nSW1hZ2VGdW5jdGlvbiBHZW9WYXJpYW50IEdlb1ZlY3RvciBHZW9WZWN0b3JFTlUgR2VvVmVjdG9yUGxvdCBHZW9WZWN0b3JYWVogR2VvVmlzaWJsZVJlZ2lvbiBHZW9WaXNpYmxlUmVnaW9uQm91bmRhcnkgR2VvV2l0aGluUSBHZW9ab29tTGV2ZWwgR2VzdHVyZUhhbmRsZXIgR2VzdHVyZUhhbmRsZXJUYWcgR2V0IEdldEJvdW5kaW5nQm94U2l6ZVBhY2tldCBHZXRDb250ZXh0IEdldEVudmlyb25tZW50IEdldEZpbGVOYW1lIEdldEZyb250RW5kT3B0aW9uc0RhdGFQYWNrZXQgR2V0TGluZWJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2V0TWVudXNQYWNrZXQgR2V0UGFnZUJyZWFrSW5mb3JtYXRpb25QYWNrZXQgR2xhaXNoZXIgR2xvYmFsQ2x1c3RlcmluZ0NvZWZmaWNpZW50IEdsb2JhbFByZWZlcmVuY2VzIEdsb2JhbFNlc3Npb24gR2xvdyBHb2xkZW5BbmdsZSBHb2xkZW5SYXRpbyBHb21wZXJ0ek1ha2VoYW1EaXN0cmlidXRpb24gR29vZG1hbktydXNrYWxHYW1tYSBHb29kbWFuS3J1c2thbEdhbW1hVGVzdCBHb3RvIEdyYWQgR3JhZGllbnQgR3JhZGllbnRGaWx0ZXIgR3JhZGllbnRPcmllbnRhdGlvbkZpbHRlciBHcmFtbWFyQXBwbHkgR3JhbW1hclJ1bGVzIEdyYW1tYXJUb2tlbiBHcmFwaCBHcmFwaDNEIEdyYXBoQXNzb3J0YXRpdml0eSBHcmFwaEF1dG9tb3JwaGlzbUdyb3VwIEdyYXBoQ2VudGVyIEdyYXBoQ29tcGxlbWVudCBHcmFwaERhdGEgR3JhcGhEZW5zaXR5IEdyYXBoRGlhbWV0ZXIgR3JhcGhEaWZmZXJlbmNlIEdyYXBoRGlzam9pbnRVbmlvbiBHcmFwaERpc3RhbmNlIEdyYXBoRGlzdGFuY2VNYXRyaXggR3JhcGhFbGVtZW50RGF0YSBHcmFwaEVtYmVkZGluZyBHcmFwaEhpZ2hsaWdodCBHcmFwaEhpZ2hsaWdodFN0eWxlIEdyYXBoSHViIEdyYXBoaWNzIEdyYXBoaWNzM0QgR3JhcGhpY3MzREJveCBHcmFwaGljczNEQm94T3B0aW9ucyBHcmFwaGljc0FycmF5IEdyYXBoaWNzQmFzZWxpbmUgR3JhcGhpY3NCb3ggR3JhcGhpY3NCb3hPcHRpb25zIEdyYXBoaWNzQ29sb3IgR3JhcGhpY3NDb2x1bW4gR3JhcGhpY3NDb21wbGV4IEdyYXBoaWNzQ29tcGxleDNEQm94IEdyYXBoaWNzQ29tcGxleDNEQm94T3B0aW9ucyBHcmFwaGljc0NvbXBsZXhCb3ggR3JhcGhpY3NDb21wbGV4Qm94T3B0aW9ucyBHcmFwaGljc0NvbnRlbnRzIEdyYXBoaWNzRGF0YSBHcmFwaGljc0dyaWQgR3JhcGhpY3NHcmlkQm94IEdyYXBoaWNzR3JvdXAgR3JhcGhpY3NHcm91cDNEQm94IEdyYXBoaWNzR3JvdXAzREJveE9wdGlvbnMgR3JhcGhpY3NHcm91cEJveCBHcmFwaGljc0dyb3VwQm94T3B0aW9ucyBHcmFwaGljc0dyb3VwaW5nIEdyYXBoaWNzSGlnaGxpZ2h0Q29sb3IgR3JhcGhpY3NSb3cgR3JhcGhpY3NTcGFjaW5nIEdyYXBoaWNzU3R5bGUgR3JhcGhJbnRlcnNlY3Rpb24gR3JhcGhMYXlvdXQgR3JhcGhMaW5rRWZmaWNpZW5jeSBHcmFwaFBlcmlwaGVyeSBHcmFwaFBsb3QgR3JhcGhQbG90M0QgR3JhcGhQb3dlciBHcmFwaFByb3BlcnR5RGlzdHJpYnV0aW9uIEdyYXBoUSBHcmFwaFJhZGl1cyBHcmFwaFJlY2lwcm9jaXR5IEdyYXBoUm9vdCBHcmFwaFN0eWxlIEdyYXBoVW5pb24gR3JheSBHcmF5TGV2ZWwgR3JlYXRlciBHcmVhdGVyRXF1YWwgR3JlYXRlckVxdWFsTGVzcyBHcmVhdGVyRXF1YWxUaGFuIEdyZWF0ZXJGdWxsRXF1YWwgR3JlYXRlckdyZWF0ZXIgR3JlYXRlckxlc3MgR3JlYXRlclNsYW50RXF1YWwgR3JlYXRlclRoYW4gR3JlYXRlclRpbGRlIEdyZWVuIEdyZWVuRnVuY3Rpb24gR3JpZCBHcmlkQmFzZWxpbmUgR3JpZEJveCBHcmlkQm94QWxpZ25tZW50IEdyaWRCb3hCYWNrZ3JvdW5kIEdyaWRCb3hEaXZpZGVycyBHcmlkQm94RnJhbWUgR3JpZEJveEl0ZW1TaXplIEdyaWRCb3hJdGVtU3R5bGUgR3JpZEJveE9wdGlvbnMgR3JpZEJveFNwYWNpbmdzIEdyaWRDcmVhdGlvblNldHRpbmdzIEdyaWREZWZhdWx0RWxlbWVudCBHcmlkRWxlbWVudFN0eWxlT3B0aW9ucyBHcmlkRnJhbWUgR3JpZEZyYW1lTWFyZ2lucyBHcmlkR3JhcGggR3JpZExpbmVzIEdyaWRMaW5lc1N0eWxlIEdyb2VibmVyQmFzaXMgR3JvdXBBY3Rpb25CYXNlIEdyb3VwQnkgR3JvdXBDZW50cmFsaXplciBHcm91cEVsZW1lbnRGcm9tV29yZCBHcm91cEVsZW1lbnRQb3NpdGlvbiBHcm91cEVsZW1lbnRRIEdyb3VwRWxlbWVudHMgR3JvdXBFbGVtZW50VG9Xb3JkIEdyb3VwR2VuZXJhdG9ycyBHcm91cGluZ3MgR3JvdXBNdWx0aXBsaWNhdGlvblRhYmxlIEdyb3VwT3JiaXRzIEdyb3VwT3JkZXIgR3JvdXBQYWdlQnJlYWtXaXRoaW4gR3JvdXBTZXR3aXNlU3RhYmlsaXplciBHcm91cFN0YWJpbGl6ZXIgR3JvdXBTdGFiaWxpemVyQ2hhaW4gR3JvdXBUb2dldGhlckdyb3VwaW5nIEdyb3VwVG9nZXRoZXJOZXN0ZWRHcm91cGluZyBHcm93Q3V0Q29tcG9uZW50cyBHdWRlcm1hbm5pYW4gR3VpZGVkRmlsdGVyIEd1bWJlbERpc3RyaWJ1dGlvbicgK1xuICAgICAgJ0hhYXJXYXZlbGV0IEhhZGFtYXJkTWF0cml4IEhhbGZMaW5lIEhhbGZOb3JtYWxEaXN0cmlidXRpb24gSGFsZlBsYW5lIEhhbGZTcGFjZSBIYW1pbHRvbmlhbkdyYXBoUSBIYW1taW5nRGlzdGFuY2UgSGFtbWluZ1dpbmRvdyBIYW5kbGVyRnVuY3Rpb25zIEhhbmRsZXJGdW5jdGlvbnNLZXlzIEhhbmtlbEgxIEhhbmtlbEgyIEhhbmtlbE1hdHJpeCBIYW5rZWxUcmFuc2Zvcm0gSGFublBvaXNzb25XaW5kb3cgSGFubldpbmRvdyBIYXJhZGFOb3J0b25Hcm91cEhOIEhhcmFyeUdyYXBoIEhhcm1vbmljTWVhbiBIYXJtb25pY01lYW5GaWx0ZXIgSGFybW9uaWNOdW1iZXIgSGFzaCBIYXZlcnNpbmUgSGF6YXJkRnVuY3Rpb24gSGVhZCBIZWFkQ29tcG9zZSBIZWFkZXJMaW5lcyBIZWFkcyBIZWF2aXNpZGVMYW1iZGEgSGVhdmlzaWRlUGkgSGVhdmlzaWRlVGhldGEgSGVsZEdyb3VwSGUgSGVsZFBhcnQgSGVscEJyb3dzZXJMb29rdXAgSGVscEJyb3dzZXJOb3RlYm9vayBIZWxwQnJvd3NlclNldHRpbmdzIEhlcmUgSGVybWl0ZURlY29tcG9zaXRpb24gSGVybWl0ZUggSGVybWl0aWFuTWF0cml4USBIZXNzZW5iZXJnRGVjb21wb3NpdGlvbiBIZXNzaWFuIEhleGFkZWNpbWFsQ2hhcmFjdGVyIEhleGFoZWRyb24gSGV4YWhlZHJvbkJveCBIZXhhaGVkcm9uQm94T3B0aW9ucyBIaWRkZW5NYXJrb3ZQcm9jZXNzIEhpZGRlblN1cmZhY2UgSGlnaGxpZ2h0ZWQgSGlnaGxpZ2h0R3JhcGggSGlnaGxpZ2h0SW1hZ2UgSGlnaGxpZ2h0TWVzaCBIaWdocGFzc0ZpbHRlciBIaWdtYW5TaW1zR3JvdXBIUyBIaWxiZXJ0Q3VydmUgSGlsYmVydEZpbHRlciBIaWxiZXJ0TWF0cml4IEhpc3RvZ3JhbSBIaXN0b2dyYW0zRCBIaXN0b2dyYW1EaXN0cmlidXRpb24gSGlzdG9ncmFtTGlzdCBIaXN0b2dyYW1UcmFuc2Zvcm0gSGlzdG9ncmFtVHJhbnNmb3JtSW50ZXJwb2xhdGlvbiBIaXN0b3JpY2FsUGVyaW9kRGF0YSBIaXRNaXNzVHJhbnNmb3JtIEhJVFNDZW50cmFsaXR5IEhqb3J0aERpc3RyaWJ1dGlvbiBIb2RnZUR1YWwgSG9lZmZkaW5nRCBIb2VmZmRpbmdEVGVzdCBIb2xkIEhvbGRBbGwgSG9sZEFsbENvbXBsZXRlIEhvbGRDb21wbGV0ZSBIb2xkRmlyc3QgSG9sZEZvcm0gSG9sZFBhdHRlcm4gSG9sZFJlc3QgSG9saWRheUNhbGVuZGFyIEhvbWVEaXJlY3RvcnkgSG9tZVBhZ2UgSG9yaXpvbnRhbCBIb3Jpem9udGFsRm9ybSBIb3Jpem9udGFsR2F1Z2UgSG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uIEhvcm5lckZvcm0gSG9zdExvb2t1cCBIb3RlbGxpbmdUU3F1YXJlRGlzdHJpYnV0aW9uIEhveXREaXN0cmlidXRpb24gSFRNTFNhdmUgSFRUUEVycm9yUmVzcG9uc2UgSFRUUFJlZGlyZWN0IEhUVFBSZXF1ZXN0IEhUVFBSZXF1ZXN0RGF0YSBIVFRQUmVzcG9uc2UgSHVlIEh1bWFuR3Jvd3RoRGF0YSBIdW1wRG93bkh1bXAgSHVtcEVxdWFsIEh1cndpdHpMZXJjaFBoaSBIdXJ3aXR6WmV0YSBIeXBlcmJvbGljRGlzdHJpYnV0aW9uIEh5cGVyY3ViZUdyYXBoIEh5cGVyZXhwb25lbnRpYWxEaXN0cmlidXRpb24gSHlwZXJmYWN0b3JpYWwgSHlwZXJnZW9tZXRyaWMwRjEgSHlwZXJnZW9tZXRyaWMwRjFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpYzFGMSBIeXBlcmdlb21ldHJpYzFGMVJlZ3VsYXJpemVkIEh5cGVyZ2VvbWV0cmljMkYxIEh5cGVyZ2VvbWV0cmljMkYxUmVndWxhcml6ZWQgSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gSHlwZXJnZW9tZXRyaWNQRlEgSHlwZXJnZW9tZXRyaWNQRlFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpY1UgSHlwZXJsaW5rIEh5cGVybGlua0NyZWF0aW9uU2V0dGluZ3MgSHlwZXJwbGFuZSBIeXBoZW5hdGlvbiBIeXBoZW5hdGlvbk9wdGlvbnMgSHlwb2V4cG9uZW50aWFsRGlzdHJpYnV0aW9uIEh5cG90aGVzaXNUZXN0RGF0YScgK1xuICAgICAgJ0kgSWNvbkRhdGEgSWNvbml6ZSBJY29uaXplZE9iamVjdCBJY29uUnVsZXMgSWNvc2FoZWRyb24gSWRlbnRpdHkgSWRlbnRpdHlNYXRyaXggSWYgSWdub3JlQ2FzZSBJZ25vcmVEaWFjcml0aWNzIElnbm9yZVB1bmN0dWF0aW9uIElnbm9yZVNwZWxsQ2hlY2sgSWdub3JpbmdJbmFjdGl2ZSBJbSBJbWFnZSBJbWFnZTNEIEltYWdlM0RQcm9qZWN0aW9uIEltYWdlM0RTbGljZXMgSW1hZ2VBY2N1bXVsYXRlIEltYWdlQWRkIEltYWdlQWRqdXN0IEltYWdlQWxpZ24gSW1hZ2VBcHBseSBJbWFnZUFwcGx5SW5kZXhlZCBJbWFnZUFzcGVjdFJhdGlvIEltYWdlQXNzZW1ibGUgSW1hZ2VBdWdtZW50YXRpb25MYXllciBJbWFnZUJvdW5kaW5nQm94ZXMgSW1hZ2VDYWNoZSBJbWFnZUNhY2hlVmFsaWQgSW1hZ2VDYXB0dXJlIEltYWdlQ2FwdHVyZUZ1bmN0aW9uIEltYWdlQ2FzZXMgSW1hZ2VDaGFubmVscyBJbWFnZUNsaXAgSW1hZ2VDb2xsYWdlIEltYWdlQ29sb3JTcGFjZSBJbWFnZUNvbXBvc2UgSW1hZ2VDb250YWluc1EgSW1hZ2VDb250ZW50cyBJbWFnZUNvbnZvbHZlIEltYWdlQ29vY2N1cnJlbmNlIEltYWdlQ29ybmVycyBJbWFnZUNvcnJlbGF0ZSBJbWFnZUNvcnJlc3BvbmRpbmdQb2ludHMgSW1hZ2VDcm9wIEltYWdlRGF0YSBJbWFnZURlY29udm9sdmUgSW1hZ2VEZW1vc2FpYyBJbWFnZURpZmZlcmVuY2UgSW1hZ2VEaW1lbnNpb25zIEltYWdlRGlzcGxhY2VtZW50cyBJbWFnZURpc3RhbmNlIEltYWdlRWZmZWN0IEltYWdlRXhwb3N1cmVDb21iaW5lIEltYWdlRmVhdHVyZVRyYWNrIEltYWdlRmlsZUFwcGx5IEltYWdlRmlsZUZpbHRlciBJbWFnZUZpbGVTY2FuIEltYWdlRmlsdGVyIEltYWdlRm9jdXNDb21iaW5lIEltYWdlRm9yZXN0aW5nQ29tcG9uZW50cyBJbWFnZUZvcm1hdHRpbmdXaWR0aCBJbWFnZUZvcndhcmRUcmFuc2Zvcm1hdGlvbiBJbWFnZUdyYXBoaWNzIEltYWdlSGlzdG9ncmFtIEltYWdlSWRlbnRpZnkgSW1hZ2VJbnN0YW5jZVEgSW1hZ2VLZXlwb2ludHMgSW1hZ2VMZXZlbHMgSW1hZ2VMaW5lcyBJbWFnZU1hcmdpbnMgSW1hZ2VNYXJrZXIgSW1hZ2VNYXJrZXJzIEltYWdlTWVhc3VyZW1lbnRzIEltYWdlTWVzaCBJbWFnZU11bHRpcGx5IEltYWdlT2Zmc2V0IEltYWdlUGFkIEltYWdlUGFkZGluZyBJbWFnZVBhcnRpdGlvbiBJbWFnZVBlcmlvZG9ncmFtIEltYWdlUGVyc3BlY3RpdmVUcmFuc2Zvcm1hdGlvbiBJbWFnZVBvc2l0aW9uIEltYWdlUHJldmlld0Z1bmN0aW9uIEltYWdlUHlyYW1pZCBJbWFnZVB5cmFtaWRBcHBseSBJbWFnZVEgSW1hZ2VSYW5nZUNhY2hlIEltYWdlUmVjb2xvciBJbWFnZVJlZmxlY3QgSW1hZ2VSZWdpb24gSW1hZ2VSZXNpemUgSW1hZ2VSZXNvbHV0aW9uIEltYWdlUmVzdHlsZSBJbWFnZVJvdGF0ZSBJbWFnZVJvdGF0ZWQgSW1hZ2VTYWxpZW5jeUZpbHRlciBJbWFnZVNjYWxlZCBJbWFnZVNjYW4gSW1hZ2VTaXplIEltYWdlU2l6ZUFjdGlvbiBJbWFnZVNpemVDYWNoZSBJbWFnZVNpemVNdWx0aXBsaWVycyBJbWFnZVNpemVSYXcgSW1hZ2VTdWJ0cmFjdCBJbWFnZVRha2UgSW1hZ2VUcmFuc2Zvcm1hdGlvbiBJbWFnZVRyaW0gSW1hZ2VUeXBlIEltYWdlVmFsdWUgSW1hZ2VWYWx1ZVBvc2l0aW9ucyBJbWFnaW5nRGV2aWNlIEltcGxpY2l0UmVnaW9uIEltcGxpZXMgSW1wb3J0IEltcG9ydEF1dG9SZXBsYWNlbWVudHMgSW1wb3J0Qnl0ZUFycmF5IEltcG9ydE9wdGlvbnMgSW1wb3J0U3RyaW5nIEltcHJvdmVtZW50SW1wb3J0YW5jZSBJbiBJbmFjdGl2YXRlIEluYWN0aXZlIEluY2lkZW5jZUdyYXBoIEluY2lkZW5jZUxpc3QgSW5jaWRlbmNlTWF0cml4IEluY2x1ZGVBcm9tYXRpY0JvbmRzIEluY2x1ZGVDb25zdGFudEJhc2lzIEluY2x1ZGVEZWZpbml0aW9ucyBJbmNsdWRlRGlyZWN0b3JpZXMgSW5jbHVkZUZpbGVFeHRlbnNpb24gSW5jbHVkZUdlbmVyYXRvclRhc2tzIEluY2x1ZGVIeWRyb2dlbnMgSW5jbHVkZUluZmxlY3Rpb25zIEluY2x1ZGVNZXRhSW5mb3JtYXRpb24gSW5jbHVkZVBvZHMgSW5jbHVkZVF1YW50aXRpZXMgSW5jbHVkZVJlbGF0ZWRUYWJsZXMgSW5jbHVkZVNpbmd1bGFyVGVybSBJbmNsdWRlV2luZG93VGltZXMgSW5jcmVtZW50IEluZGVmaW5pdGVNYXRyaXhRIEluZGVudCBJbmRlbnRpbmdOZXdsaW5lU3BhY2luZ3MgSW5kZW50TWF4RnJhY3Rpb24gSW5kZXBlbmRlbmNlVGVzdCBJbmRlcGVuZGVudEVkZ2VTZXRRIEluZGVwZW5kZW50UGh5c2ljYWxRdWFudGl0eSBJbmRlcGVuZGVudFVuaXQgSW5kZXBlbmRlbnRVbml0RGltZW5zaW9uIEluZGVwZW5kZW50VmVydGV4U2V0USBJbmRldGVybWluYXRlIEluZGV0ZXJtaW5hdGVUaHJlc2hvbGQgSW5kZXhDcmVhdGlvbk9wdGlvbnMgSW5kZXhlZCBJbmRleEdyYXBoIEluZGV4VGFnIEluZXF1YWxpdHkgSW5leGFjdE51bWJlclEgSW5leGFjdE51bWJlcnMgSW5maW5pdGVMaW5lIEluZmluaXRlUGxhbmUgSW5maW5pdHkgSW5maXggSW5mbGF0aW9uQWRqdXN0IEluZmxhdGlvbk1ldGhvZCBJbmZvcm1hdGlvbiBJbmZvcm1hdGlvbkRhdGEgSW5mb3JtYXRpb25EYXRhR3JpZCBJbmhlcml0ZWQgSW5oZXJpdFNjb3BlIEluaG9tb2dlbmVvdXNQb2lzc29uUHJvY2VzcyBJbml0aWFsRXZhbHVhdGlvbkhpc3RvcnkgSW5pdGlhbGl6YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsIEluaXRpYWxpemF0aW9uQ2VsbEV2YWx1YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsV2FybmluZyBJbml0aWFsaXphdGlvbk9iamVjdHMgSW5pdGlhbGl6YXRpb25WYWx1ZSBJbml0aWFsaXplIEluaXRpYWxTZWVkaW5nIElubGluZUNvdW50ZXJBc3NpZ25tZW50cyBJbmxpbmVDb3VudGVySW5jcmVtZW50cyBJbmxpbmVSdWxlcyBJbm5lciBJbm5lclBvbHlnb24gSW5uZXJQb2x5aGVkcm9uIElucGFpbnQgSW5wdXQgSW5wdXRBbGlhc2VzIElucHV0QXNzdW1wdGlvbnMgSW5wdXRBdXRvUmVwbGFjZW1lbnRzIElucHV0RmllbGQgSW5wdXRGaWVsZEJveCBJbnB1dEZpZWxkQm94T3B0aW9ucyBJbnB1dEZvcm0gSW5wdXRHcm91cGluZyBJbnB1dE5hbWVQYWNrZXQgSW5wdXROb3RlYm9vayBJbnB1dFBhY2tldCBJbnB1dFNldHRpbmdzIElucHV0U3RyZWFtIElucHV0U3RyaW5nIElucHV0U3RyaW5nUGFja2V0IElucHV0VG9Cb3hGb3JtUGFja2V0IEluc2VydCBJbnNlcnRpb25GdW5jdGlvbiBJbnNlcnRpb25Qb2ludE9iamVjdCBJbnNlcnRMaW5lYnJlYWtzIEluc2VydFJlc3VsdHMgSW5zZXQgSW5zZXQzREJveCBJbnNldDNEQm94T3B0aW9ucyBJbnNldEJveCBJbnNldEJveE9wdGlvbnMgSW5zcGhlcmUgSW5zdGFsbCBJbnN0YWxsU2VydmljZSBJbnN0YW5jZU5vcm1hbGl6YXRpb25MYXllciBJblN0cmluZyBJbnRlZ2VyIEludGVnZXJEaWdpdHMgSW50ZWdlckV4cG9uZW50IEludGVnZXJMZW5ndGggSW50ZWdlck5hbWUgSW50ZWdlclBhcnQgSW50ZWdlclBhcnRpdGlvbnMgSW50ZWdlclEgSW50ZWdlclJldmVyc2UgSW50ZWdlcnMgSW50ZWdlclN0cmluZyBJbnRlZ3JhbCBJbnRlZ3JhdGUgSW50ZXJhY3RpdmUgSW50ZXJhY3RpdmVUcmFkaW5nQ2hhcnQgSW50ZXJsYWNlZCBJbnRlcmxlYXZpbmcgSW50ZXJuYWxseUJhbGFuY2VkRGVjb21wb3NpdGlvbiBJbnRlcnBvbGF0aW5nRnVuY3Rpb24gSW50ZXJwb2xhdGluZ1BvbHlub21pYWwgSW50ZXJwb2xhdGlvbiBJbnRlcnBvbGF0aW9uT3JkZXIgSW50ZXJwb2xhdGlvblBvaW50cyBJbnRlcnBvbGF0aW9uUHJlY2lzaW9uIEludGVycHJldGF0aW9uIEludGVycHJldGF0aW9uQm94IEludGVycHJldGF0aW9uQm94T3B0aW9ucyBJbnRlcnByZXRhdGlvbkZ1bmN0aW9uIEludGVycHJldGVyIEludGVycHJldFRlbXBsYXRlIEludGVycXVhcnRpbGVSYW5nZSBJbnRlcnJ1cHQgSW50ZXJydXB0U2V0dGluZ3MgSW50ZXJzZWN0aW5nUSBJbnRlcnNlY3Rpb24gSW50ZXJ2YWwgSW50ZXJ2YWxJbnRlcnNlY3Rpb24gSW50ZXJ2YWxNYXJrZXJzIEludGVydmFsTWFya2Vyc1N0eWxlIEludGVydmFsTWVtYmVyUSBJbnRlcnZhbFNsaWRlciBJbnRlcnZhbFVuaW9uIEludG8gSW52ZXJzZSBJbnZlcnNlQmV0YVJlZ3VsYXJpemVkIEludmVyc2VDREYgSW52ZXJzZUNoaVNxdWFyZURpc3RyaWJ1dGlvbiBJbnZlcnNlQ29udGludW91c1dhdmVsZXRUcmFuc2Zvcm0gSW52ZXJzZURpc3RhbmNlVHJhbnNmb3JtIEludmVyc2VFbGxpcHRpY05vbWVRIEludmVyc2VFcmYgSW52ZXJzZUVyZmMgSW52ZXJzZUZvdXJpZXIgSW52ZXJzZUZvdXJpZXJDb3NUcmFuc2Zvcm0gSW52ZXJzZUZvdXJpZXJTZXF1ZW5jZVRyYW5zZm9ybSBJbnZlcnNlRm91cmllclNpblRyYW5zZm9ybSBJbnZlcnNlRm91cmllclRyYW5zZm9ybSBJbnZlcnNlRnVuY3Rpb24gSW52ZXJzZUZ1bmN0aW9ucyBJbnZlcnNlR2FtbWFEaXN0cmlidXRpb24gSW52ZXJzZUdhbW1hUmVndWxhcml6ZWQgSW52ZXJzZUdhdXNzaWFuRGlzdHJpYnV0aW9uIEludmVyc2VHdWRlcm1hbm5pYW4gSW52ZXJzZUhhbmtlbFRyYW5zZm9ybSBJbnZlcnNlSGF2ZXJzaW5lIEludmVyc2VJbWFnZVB5cmFtaWQgSW52ZXJzZUphY29iaUNEIEludmVyc2VKYWNvYmlDTiBJbnZlcnNlSmFjb2JpQ1MgSW52ZXJzZUphY29iaURDIEludmVyc2VKYWNvYmlETiBJbnZlcnNlSmFjb2JpRFMgSW52ZXJzZUphY29iaU5DIEludmVyc2VKYWNvYmlORCBJbnZlcnNlSmFjb2JpTlMgSW52ZXJzZUphY29iaVNDIEludmVyc2VKYWNvYmlTRCBJbnZlcnNlSmFjb2JpU04gSW52ZXJzZUxhcGxhY2VUcmFuc2Zvcm0gSW52ZXJzZU1lbGxpblRyYW5zZm9ybSBJbnZlcnNlUGVybXV0YXRpb24gSW52ZXJzZVJhZG9uIEludmVyc2VSYWRvblRyYW5zZm9ybSBJbnZlcnNlU2VyaWVzIEludmVyc2VTaG9ydFRpbWVGb3VyaWVyIEludmVyc2VTcGVjdHJvZ3JhbSBJbnZlcnNlU3Vydml2YWxGdW5jdGlvbiBJbnZlcnNlVHJhbnNmb3JtZWRSZWdpb24gSW52ZXJzZVdhdmVsZXRUcmFuc2Zvcm0gSW52ZXJzZVdlaWVyc3RyYXNzUCBJbnZlcnNlV2lzaGFydE1hdHJpeERpc3RyaWJ1dGlvbiBJbnZlcnNlWlRyYW5zZm9ybSBJbnZpc2libGUgSW52aXNpYmxlQXBwbGljYXRpb24gSW52aXNpYmxlVGltZXMgSVBBZGRyZXNzIElycmVkdWNpYmxlUG9seW5vbWlhbFEgSXNsYW5kRGF0YSBJc29sYXRpbmdJbnRlcnZhbCBJc29tb3JwaGljR3JhcGhRIElzb3RvcGVEYXRhIEl0YWxpYyBJdGVtIEl0ZW1Bc3BlY3RSYXRpbyBJdGVtQm94IEl0ZW1Cb3hPcHRpb25zIEl0ZW1TaXplIEl0ZW1TdHlsZSBJdG9Qcm9jZXNzJyArXG4gICAgICAnSmFjY2FyZERpc3NpbWlsYXJpdHkgSmFjb2JpQW1wbGl0dWRlIEphY29iaWFuIEphY29iaUNEIEphY29iaUNOIEphY29iaUNTIEphY29iaURDIEphY29iaUROIEphY29iaURTIEphY29iaU5DIEphY29iaU5EIEphY29iaU5TIEphY29iaVAgSmFjb2JpU0MgSmFjb2JpU0QgSmFjb2JpU04gSmFjb2JpU3ltYm9sIEphY29iaVpldGEgSmFua29Hcm91cEoxIEphbmtvR3JvdXBKMiBKYW5rb0dyb3VwSjMgSmFua29Hcm91cEo0IEphcnF1ZUJlcmFBTE1UZXN0IEpvaG5zb25EaXN0cmlidXRpb24gSm9pbiBKb2luQWNyb3NzIEpvaW5lZCBKb2luZWRDdXJ2ZSBKb2luZWRDdXJ2ZUJveCBKb2luZWRDdXJ2ZUJveE9wdGlvbnMgSm9pbkZvcm0gSm9yZGFuRGVjb21wb3NpdGlvbiBKb3JkYW5Nb2RlbERlY29tcG9zaXRpb24gSnVsaWFuRGF0ZSBKdWxpYVNldEJvZXR0Y2hlciBKdWxpYVNldEl0ZXJhdGlvbkNvdW50IEp1bGlhU2V0UGxvdCBKdWxpYVNldFBvaW50cycgK1xuICAgICAgJ0sgS2FnaUNoYXJ0IEthaXNlckJlc3NlbFdpbmRvdyBLYWlzZXJXaW5kb3cgS2FsbWFuRXN0aW1hdG9yIEthbG1hbkZpbHRlciBLYXJodW5lbkxvZXZlRGVjb21wb3NpdGlvbiBLYXJ5VHJlZSBLYXR6Q2VudHJhbGl0eSBLQ29yZUNvbXBvbmVudHMgS0Rpc3RyaWJ1dGlvbiBLRWRnZUNvbm5lY3RlZENvbXBvbmVudHMgS0VkZ2VDb25uZWN0ZWRHcmFwaFEgS2VsdmluQmVpIEtlbHZpbkJlciBLZWx2aW5LZWkgS2VsdmluS2VyIEtlbmRhbGxUYXUgS2VuZGFsbFRhdVRlc3QgS2VybmVsRXhlY3V0ZSBLZXJuZWxGdW5jdGlvbiBLZXJuZWxNaXh0dXJlRGlzdHJpYnV0aW9uIEtlcm5lbHMgS2V0IEtleSBLZXlDb2xsaXNpb25GdW5jdGlvbiBLZXlDb21wbGVtZW50IEtleURyb3AgS2V5RHJvcEZyb20gS2V5RXhpc3RzUSBLZXlGcmVlUSBLZXlJbnRlcnNlY3Rpb24gS2V5TWFwIEtleU1lbWJlclEgS2V5cG9pbnRTdHJlbmd0aCBLZXlzIEtleVNlbGVjdCBLZXlTb3J0IEtleVNvcnRCeSBLZXlUYWtlIEtleVVuaW9uIEtleVZhbHVlTWFwIEtleVZhbHVlUGF0dGVybiBLaGluY2hpbiBLaWxsUHJvY2VzcyBLaXJjaGhvZmZHcmFwaCBLaXJjaGhvZmZNYXRyaXggS2xlaW5JbnZhcmlhbnRKIEtuYXBzYWNrU29sdmUgS25pZ2h0VG91ckdyYXBoIEtub3REYXRhIEtub3duVW5pdFEgS29jaEN1cnZlIEtvbG1vZ29yb3ZTbWlybm92VGVzdCBLcm9uZWNrZXJEZWx0YSBLcm9uZWNrZXJNb2RlbERlY29tcG9zaXRpb24gS3JvbmVja2VyUHJvZHVjdCBLcm9uZWNrZXJTeW1ib2wgS3VpcGVyVGVzdCBLdW1hcmFzd2FteURpc3RyaWJ1dGlvbiBLdXJ0b3NpcyBLdXdhaGFyYUZpbHRlciBLVmVydGV4Q29ubmVjdGVkQ29tcG9uZW50cyBLVmVydGV4Q29ubmVjdGVkR3JhcGhRJyArXG4gICAgICAnTEFCQ29sb3IgTGFiZWwgTGFiZWxlZCBMYWJlbGVkU2xpZGVyIExhYmVsaW5nRnVuY3Rpb24gTGFiZWxpbmdTaXplIExhYmVsU3R5bGUgTGFiZWxWaXNpYmlsaXR5IExhZ3VlcnJlTCBMYWtlRGF0YSBMYW1iZGFDb21wb25lbnRzIExhbWJlcnRXIExhbWluYURhdGEgTGFuY3pvc1dpbmRvdyBMYW5kYXVEaXN0cmlidXRpb24gTGFuZ3VhZ2UgTGFuZ3VhZ2VDYXRlZ29yeSBMYW5ndWFnZURhdGEgTGFuZ3VhZ2VJZGVudGlmeSBMYW5ndWFnZU9wdGlvbnMgTGFwbGFjZURpc3RyaWJ1dGlvbiBMYXBsYWNlVHJhbnNmb3JtIExhcGxhY2lhbiBMYXBsYWNpYW5GaWx0ZXIgTGFwbGFjaWFuR2F1c3NpYW5GaWx0ZXIgTGFyZ2UgTGFyZ2VyIExhc3QgTGF0aXR1ZGUgTGF0aXR1ZGVMb25naXR1ZGUgTGF0dGljZURhdGEgTGF0dGljZVJlZHVjZSBMYXVuY2ggTGF1bmNoS2VybmVscyBMYXllcmVkR3JhcGhQbG90IExheWVyU2l6ZUZ1bmN0aW9uIExheW91dEluZm9ybWF0aW9uIExDSENvbG9yIExDTSBMZWFkZXJTaXplIExlYWZDb3VudCBMZWFwWWVhclEgTGVhcm5EaXN0cmlidXRpb24gTGVhcm5lZERpc3RyaWJ1dGlvbiBMZWFybmluZ1JhdGUgTGVhcm5pbmdSYXRlTXVsdGlwbGllcnMgTGVhc3RTcXVhcmVzIExlYXN0U3F1YXJlc0ZpbHRlcktlcm5lbCBMZWZ0IExlZnRBcnJvdyBMZWZ0QXJyb3dCYXIgTGVmdEFycm93UmlnaHRBcnJvdyBMZWZ0RG93blRlZVZlY3RvciBMZWZ0RG93blZlY3RvciBMZWZ0RG93blZlY3RvckJhciBMZWZ0UmlnaHRBcnJvdyBMZWZ0UmlnaHRWZWN0b3IgTGVmdFRlZSBMZWZ0VGVlQXJyb3cgTGVmdFRlZVZlY3RvciBMZWZ0VHJpYW5nbGUgTGVmdFRyaWFuZ2xlQmFyIExlZnRUcmlhbmdsZUVxdWFsIExlZnRVcERvd25WZWN0b3IgTGVmdFVwVGVlVmVjdG9yIExlZnRVcFZlY3RvciBMZWZ0VXBWZWN0b3JCYXIgTGVmdFZlY3RvciBMZWZ0VmVjdG9yQmFyIExlZ2VuZEFwcGVhcmFuY2UgTGVnZW5kZWQgTGVnZW5kRnVuY3Rpb24gTGVnZW5kTGFiZWwgTGVnZW5kTGF5b3V0IExlZ2VuZE1hcmdpbnMgTGVnZW5kTWFya2VycyBMZWdlbmRNYXJrZXJTaXplIExlZ2VuZHJlUCBMZWdlbmRyZVEgTGVnZW5kcmVUeXBlIExlbmd0aCBMZW5ndGhXaGlsZSBMZXJjaFBoaSBMZXNzIExlc3NFcXVhbCBMZXNzRXF1YWxHcmVhdGVyIExlc3NFcXVhbFRoYW4gTGVzc0Z1bGxFcXVhbCBMZXNzR3JlYXRlciBMZXNzTGVzcyBMZXNzU2xhbnRFcXVhbCBMZXNzVGhhbiBMZXNzVGlsZGUgTGV0dGVyQ2hhcmFjdGVyIExldHRlckNvdW50cyBMZXR0ZXJOdW1iZXIgTGV0dGVyUSBMZXZlbCBMZXZlbmVUZXN0IExldmlDaXZpdGFUZW5zb3IgTGV2eURpc3RyaWJ1dGlvbiBMZXhpY29ncmFwaGljIExpYnJhcnlEYXRhVHlwZSBMaWJyYXJ5RnVuY3Rpb24gTGlicmFyeUZ1bmN0aW9uRXJyb3IgTGlicmFyeUZ1bmN0aW9uSW5mb3JtYXRpb24gTGlicmFyeUZ1bmN0aW9uTG9hZCBMaWJyYXJ5RnVuY3Rpb25VbmxvYWQgTGlicmFyeUxvYWQgTGlicmFyeVVubG9hZCBMaWNlbnNlSUQgTGlmdGluZ0ZpbHRlckRhdGEgTGlmdGluZ1dhdmVsZXRUcmFuc2Zvcm0gTGlnaHRCbHVlIExpZ2h0QnJvd24gTGlnaHRDeWFuIExpZ2h0ZXIgTGlnaHRHcmF5IExpZ2h0R3JlZW4gTGlnaHRpbmcgTGlnaHRpbmdBbmdsZSBMaWdodE1hZ2VudGEgTGlnaHRPcmFuZ2UgTGlnaHRQaW5rIExpZ2h0UHVycGxlIExpZ2h0UmVkIExpZ2h0U291cmNlcyBMaWdodFllbGxvdyBMaWtlbGlob29kIExpbWl0IExpbWl0c1Bvc2l0aW9uaW5nIExpbWl0c1Bvc2l0aW9uaW5nVG9rZW5zIExpbmRsZXlEaXN0cmlidXRpb24gTGluZSBMaW5lM0RCb3ggTGluZTNEQm94T3B0aW9ucyBMaW5lYXJGaWx0ZXIgTGluZWFyRnJhY3Rpb25hbE9wdGltaXphdGlvbiBMaW5lYXJGcmFjdGlvbmFsVHJhbnNmb3JtIExpbmVhckdyYWRpZW50SW1hZ2UgTGluZWFyaXppbmdUcmFuc2Zvcm1hdGlvbkRhdGEgTGluZWFyTGF5ZXIgTGluZWFyTW9kZWxGaXQgTGluZWFyT2Zmc2V0RnVuY3Rpb24gTGluZWFyT3B0aW1pemF0aW9uIExpbmVhclByb2dyYW1taW5nIExpbmVhclJlY3VycmVuY2UgTGluZWFyU29sdmUgTGluZWFyU29sdmVGdW5jdGlvbiBMaW5lQm94IExpbmVCb3hPcHRpb25zIExpbmVCcmVhayBMaW5lYnJlYWtBZGp1c3RtZW50cyBMaW5lQnJlYWtDaGFydCBMaW5lYnJlYWtTZW1pY29sb25XZWlnaHRpbmcgTGluZUJyZWFrV2l0aGluIExpbmVDb2xvciBMaW5lR3JhcGggTGluZUluZGVudCBMaW5lSW5kZW50TWF4RnJhY3Rpb24gTGluZUludGVncmFsQ29udm9sdXRpb25QbG90IExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uU2NhbGUgTGluZUxlZ2VuZCBMaW5lT3BhY2l0eSBMaW5lU3BhY2luZyBMaW5lV3JhcFBhcnRzIExpbmtBY3RpdmF0ZSBMaW5rQ2xvc2UgTGlua0Nvbm5lY3QgTGlua0Nvbm5lY3RlZFEgTGlua0NyZWF0ZSBMaW5rRXJyb3IgTGlua0ZsdXNoIExpbmtGdW5jdGlvbiBMaW5rSG9zdCBMaW5rSW50ZXJydXB0IExpbmtMYXVuY2ggTGlua01vZGUgTGlua09iamVjdCBMaW5rT3BlbiBMaW5rT3B0aW9ucyBMaW5rUGF0dGVybnMgTGlua1Byb3RvY29sIExpbmtSYW5rQ2VudHJhbGl0eSBMaW5rUmVhZCBMaW5rUmVhZEhlbGQgTGlua1JlYWR5USBMaW5rcyBMaW5rU2VydmljZSBMaW5rV3JpdGUgTGlua1dyaXRlSGVsZCBMaW91dmlsbGVMYW1iZGEgTGlzdCBMaXN0YWJsZSBMaXN0QW5pbWF0ZSBMaXN0Q29udG91clBsb3QgTGlzdENvbnRvdXJQbG90M0QgTGlzdENvbnZvbHZlIExpc3RDb3JyZWxhdGUgTGlzdEN1cnZlUGF0aFBsb3QgTGlzdERlY29udm9sdmUgTGlzdERlbnNpdHlQbG90IExpc3REZW5zaXR5UGxvdDNEIExpc3RlbiBMaXN0Rm9ybWF0IExpc3RGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gTGlzdEludGVycG9sYXRpb24gTGlzdExpbmVJbnRlZ3JhbENvbnZvbHV0aW9uUGxvdCBMaXN0TGluZVBsb3QgTGlzdExvZ0xpbmVhclBsb3QgTGlzdExvZ0xvZ1Bsb3QgTGlzdExvZ1Bsb3QgTGlzdFBpY2tlciBMaXN0UGlja2VyQm94IExpc3RQaWNrZXJCb3hCYWNrZ3JvdW5kIExpc3RQaWNrZXJCb3hPcHRpb25zIExpc3RQbGF5IExpc3RQbG90IExpc3RQbG90M0QgTGlzdFBvaW50UGxvdDNEIExpc3RQb2xhclBsb3QgTGlzdFEgTGlzdFNsaWNlQ29udG91clBsb3QzRCBMaXN0U2xpY2VEZW5zaXR5UGxvdDNEIExpc3RTbGljZVZlY3RvclBsb3QzRCBMaXN0U3RlcFBsb3QgTGlzdFN0cmVhbURlbnNpdHlQbG90IExpc3RTdHJlYW1QbG90IExpc3RTdXJmYWNlUGxvdDNEIExpc3RWZWN0b3JEZW5zaXR5UGxvdCBMaXN0VmVjdG9yUGxvdCBMaXN0VmVjdG9yUGxvdDNEIExpc3RaVHJhbnNmb3JtIExpdGVyYWwgTGl0ZXJhbFNlYXJjaCBMb2NhbEFkYXB0aXZlQmluYXJpemUgTG9jYWxDYWNoZSBMb2NhbENsdXN0ZXJpbmdDb2VmZmljaWVudCBMb2NhbGl6ZURlZmluaXRpb25zIExvY2FsaXplVmFyaWFibGVzIExvY2FsT2JqZWN0IExvY2FsT2JqZWN0cyBMb2NhbFJlc3BvbnNlTm9ybWFsaXphdGlvbkxheWVyIExvY2FsU3VibWl0IExvY2FsU3ltYm9sIExvY2FsVGltZSBMb2NhbFRpbWVab25lIExvY2F0aW9uRXF1aXZhbGVuY2VUZXN0IExvY2F0aW9uVGVzdCBMb2NhdG9yIExvY2F0b3JBdXRvQ3JlYXRlIExvY2F0b3JCb3ggTG9jYXRvckJveE9wdGlvbnMgTG9jYXRvckNlbnRlcmluZyBMb2NhdG9yUGFuZSBMb2NhdG9yUGFuZUJveCBMb2NhdG9yUGFuZUJveE9wdGlvbnMgTG9jYXRvclJlZ2lvbiBMb2NrZWQgTG9nIExvZzEwIExvZzIgTG9nQmFybmVzRyBMb2dHYW1tYSBMb2dHYW1tYURpc3RyaWJ1dGlvbiBMb2dpY2FsRXhwYW5kIExvZ0ludGVncmFsIExvZ2lzdGljRGlzdHJpYnV0aW9uIExvZ2lzdGljU2lnbW9pZCBMb2dpdE1vZGVsRml0IExvZ0xpa2VsaWhvb2QgTG9nTGluZWFyUGxvdCBMb2dMb2dpc3RpY0Rpc3RyaWJ1dGlvbiBMb2dMb2dQbG90IExvZ011bHRpbm9ybWFsRGlzdHJpYnV0aW9uIExvZ05vcm1hbERpc3RyaWJ1dGlvbiBMb2dQbG90IExvZ1JhbmtUZXN0IExvZ1Nlcmllc0Rpc3RyaWJ1dGlvbiBMb25nRXF1YWwgTG9uZ2VzdCBMb25nZXN0Q29tbW9uU2VxdWVuY2UgTG9uZ2VzdENvbW1vblNlcXVlbmNlUG9zaXRpb25zIExvbmdlc3RDb21tb25TdWJzZXF1ZW5jZSBMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2VQb3NpdGlvbnMgTG9uZ2VzdE1hdGNoIExvbmdlc3RPcmRlcmVkU2VxdWVuY2UgTG9uZ0Zvcm0gTG9uZ2l0dWRlIExvbmdMZWZ0QXJyb3cgTG9uZ0xlZnRSaWdodEFycm93IExvbmdSaWdodEFycm93IExvbmdTaG9ydFRlcm1NZW1vcnlMYXllciBMb29rdXAgTG9vcGJhY2sgTG9vcEZyZWVHcmFwaFEgTG9zc0Z1bmN0aW9uIExvd2VyQ2FzZVEgTG93ZXJMZWZ0QXJyb3cgTG93ZXJSaWdodEFycm93IExvd2VyVHJpYW5ndWxhcml6ZSBMb3dlclRyaWFuZ3VsYXJNYXRyaXhRIExvd3Bhc3NGaWx0ZXIgTFFFc3RpbWF0b3JHYWlucyBMUUdSZWd1bGF0b3IgTFFPdXRwdXRSZWd1bGF0b3JHYWlucyBMUVJlZ3VsYXRvckdhaW5zIExVQmFja1N1YnN0aXR1dGlvbiBMdWNhc0wgTHVjY2lvU2FtaUNvbXBvbmVudHMgTFVEZWNvbXBvc2l0aW9uIEx1bmFyRWNsaXBzZSBMVVZDb2xvciBMeWFwdW5vdlNvbHZlIEx5b25zR3JvdXBMeScgK1xuICAgICAgJ01hY2hpbmVJRCBNYWNoaW5lTmFtZSBNYWNoaW5lTnVtYmVyUSBNYWNoaW5lUHJlY2lzaW9uIE1hY2ludG9zaFN5c3RlbVBhZ2VTZXR1cCBNYWdlbnRhIE1hZ25pZmljYXRpb24gTWFnbmlmeSBNYWlsQWRkcmVzc1ZhbGlkYXRpb24gTWFpbEV4ZWN1dGUgTWFpbEZvbGRlciBNYWlsSXRlbSBNYWlsUmVjZWl2ZXJGdW5jdGlvbiBNYWlsUmVzcG9uc2VGdW5jdGlvbiBNYWlsU2VhcmNoIE1haWxTZXJ2ZXJDb25uZWN0IE1haWxTZXJ2ZXJDb25uZWN0aW9uIE1haWxTZXR0aW5ncyBNYWluU29sdmUgTWFpbnRhaW5EeW5hbWljQ2FjaGVzIE1ham9yaXR5IE1ha2VCb3hlcyBNYWtlRXhwcmVzc2lvbiBNYWtlUnVsZXMgTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uSUQgTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uUSBNYW5kZWxicm90U2V0Qm9ldHRjaGVyIE1hbmRlbGJyb3RTZXREaXN0YW5jZSBNYW5kZWxicm90U2V0SXRlcmF0aW9uQ291bnQgTWFuZGVsYnJvdFNldE1lbWJlclEgTWFuZGVsYnJvdFNldFBsb3QgTWFuZ29sZHRMYW1iZGEgTWFuaGF0dGFuRGlzdGFuY2UgTWFuaXB1bGF0ZSBNYW5pcHVsYXRvciBNYW5uZWRTcGFjZU1pc3Npb25EYXRhIE1hbm5XaGl0bmV5VGVzdCBNYW50aXNzYUV4cG9uZW50IE1hbnVhbCBNYXAgTWFwQWxsIE1hcEF0IE1hcEluZGV4ZWQgTUFQcm9jZXNzIE1hcFRocmVhZCBNYXJjaGVua29QYXN0dXJEaXN0cmlidXRpb24gTWFyY3VtUSBNYXJkaWFDb21iaW5lZFRlc3QgTWFyZGlhS3VydG9zaXNUZXN0IE1hcmRpYVNrZXduZXNzVGVzdCBNYXJnaW5hbERpc3RyaWJ1dGlvbiBNYXJrb3ZQcm9jZXNzUHJvcGVydGllcyBNYXNraW5nIE1hdGNoaW5nRGlzc2ltaWxhcml0eSBNYXRjaExvY2FsTmFtZVEgTWF0Y2hMb2NhbE5hbWVzIE1hdGNoUSBNYXRlcmlhbCBNYXRoZW1hdGljYWxGdW5jdGlvbkRhdGEgTWF0aGVtYXRpY2FOb3RhdGlvbiBNYXRoaWV1QyBNYXRoaWV1Q2hhcmFjdGVyaXN0aWNBIE1hdGhpZXVDaGFyYWN0ZXJpc3RpY0IgTWF0aGlldUNoYXJhY3RlcmlzdGljRXhwb25lbnQgTWF0aGlldUNQcmltZSBNYXRoaWV1R3JvdXBNMTEgTWF0aGlldUdyb3VwTTEyIE1hdGhpZXVHcm91cE0yMiBNYXRoaWV1R3JvdXBNMjMgTWF0aGlldUdyb3VwTTI0IE1hdGhpZXVTIE1hdGhpZXVTUHJpbWUgTWF0aE1MRm9ybSBNYXRoTUxUZXh0IE1hdHJpY2VzIE1hdHJpeEV4cCBNYXRyaXhGb3JtIE1hdHJpeEZ1bmN0aW9uIE1hdHJpeExvZyBNYXRyaXhOb3JtYWxEaXN0cmlidXRpb24gTWF0cml4UGxvdCBNYXRyaXhQb3dlciBNYXRyaXhQcm9wZXJ0eURpc3RyaWJ1dGlvbiBNYXRyaXhRIE1hdHJpeFJhbmsgTWF0cml4VERpc3RyaWJ1dGlvbiBNYXggTWF4QmVuZCBNYXhDZWxsTWVhc3VyZSBNYXhDb2xvckRpc3RhbmNlIE1heERldGVjdCBNYXhEdXJhdGlvbiBNYXhFeHRyYUJhbmR3aWR0aHMgTWF4RXh0cmFDb25kaXRpb25zIE1heEZlYXR1cmVEaXNwbGFjZW1lbnQgTWF4RmVhdHVyZXMgTWF4RmlsdGVyIE1heGltYWxCeSBNYXhpbWl6ZSBNYXhJdGVtcyBNYXhJdGVyYXRpb25zIE1heExpbWl0IE1heE1lbW9yeVVzZWQgTWF4TWl4dHVyZUtlcm5lbHMgTWF4T3ZlcmxhcEZyYWN0aW9uIE1heFBsb3RQb2ludHMgTWF4UG9pbnRzIE1heFJlY3Vyc2lvbiBNYXhTdGFibGVEaXN0cmlidXRpb24gTWF4U3RlcEZyYWN0aW9uIE1heFN0ZXBzIE1heFN0ZXBTaXplIE1heFRyYWluaW5nUm91bmRzIE1heFZhbHVlIE1heHdlbGxEaXN0cmlidXRpb24gTWF4V29yZEdhcCBNY0xhdWdobGluR3JvdXBNY0wgTWVhbiBNZWFuQWJzb2x1dGVMb3NzTGF5ZXIgTWVhbkFyb3VuZCBNZWFuQ2x1c3RlcmluZ0NvZWZmaWNpZW50IE1lYW5EZWdyZWVDb25uZWN0aXZpdHkgTWVhbkRldmlhdGlvbiBNZWFuRmlsdGVyIE1lYW5HcmFwaERpc3RhbmNlIE1lYW5OZWlnaGJvckRlZ3JlZSBNZWFuU2hpZnQgTWVhblNoaWZ0RmlsdGVyIE1lYW5TcXVhcmVkTG9zc0xheWVyIE1lZGlhbiBNZWRpYW5EZXZpYXRpb24gTWVkaWFuRmlsdGVyIE1lZGljYWxUZXN0RGF0YSBNZWRpdW0gTWVpamVyRyBNZWlqZXJHUmVkdWNlIE1laXhuZXJEaXN0cmlidXRpb24gTWVsbGluQ29udm9sdmUgTWVsbGluVHJhbnNmb3JtIE1lbWJlclEgTWVtb3J5QXZhaWxhYmxlIE1lbW9yeUNvbnN0cmFpbmVkIE1lbW9yeUNvbnN0cmFpbnQgTWVtb3J5SW5Vc2UgTWVuZ2VyTWVzaCBNZW51IE1lbnVBcHBlYXJhbmNlIE1lbnVDb21tYW5kS2V5IE1lbnVFdmFsdWF0b3IgTWVudUl0ZW0gTWVudUxpc3QgTWVudVBhY2tldCBNZW51U29ydGluZ1ZhbHVlIE1lbnVTdHlsZSBNZW51VmlldyBNZXJnZSBNZXJnZURpZmZlcmVuY2VzIE1lcmdpbmdGdW5jdGlvbiBNZXJzZW5uZVByaW1lRXhwb25lbnQgTWVyc2VubmVQcmltZUV4cG9uZW50USBNZXNoIE1lc2hDZWxsQ2VudHJvaWQgTWVzaENlbGxDb3VudCBNZXNoQ2VsbEhpZ2hsaWdodCBNZXNoQ2VsbEluZGV4IE1lc2hDZWxsTGFiZWwgTWVzaENlbGxNYXJrZXIgTWVzaENlbGxNZWFzdXJlIE1lc2hDZWxsUXVhbGl0eSBNZXNoQ2VsbHMgTWVzaENlbGxTaGFwZUZ1bmN0aW9uIE1lc2hDZWxsU3R5bGUgTWVzaENvb3JkaW5hdGVzIE1lc2hGdW5jdGlvbnMgTWVzaFByaW1pdGl2ZXMgTWVzaFF1YWxpdHlHb2FsIE1lc2hSYW5nZSBNZXNoUmVmaW5lbWVudEZ1bmN0aW9uIE1lc2hSZWdpb24gTWVzaFJlZ2lvblEgTWVzaFNoYWRpbmcgTWVzaFN0eWxlIE1lc3NhZ2UgTWVzc2FnZURpYWxvZyBNZXNzYWdlTGlzdCBNZXNzYWdlTmFtZSBNZXNzYWdlT2JqZWN0IE1lc3NhZ2VPcHRpb25zIE1lc3NhZ2VQYWNrZXQgTWVzc2FnZXMgTWVzc2FnZXNOb3RlYm9vayBNZXRhQ2hhcmFjdGVycyBNZXRhSW5mb3JtYXRpb24gTWV0ZW9yU2hvd2VyRGF0YSBNZXRob2QgTWV0aG9kT3B0aW9ucyBNZXhpY2FuSGF0V2F2ZWxldCBNZXllcldhdmVsZXQgTWlkcG9pbnQgTWluIE1pbkNvbG9yRGlzdGFuY2UgTWluRGV0ZWN0IE1pbmVyYWxEYXRhIE1pbkZpbHRlciBNaW5pbWFsQnkgTWluaW1hbFBvbHlub21pYWwgTWluaW1hbFN0YXRlU3BhY2VNb2RlbCBNaW5pbWl6ZSBNaW5pbXVtVGltZUluY3JlbWVudCBNaW5JbnRlcnZhbFNpemUgTWlua293c2tpUXVlc3Rpb25NYXJrIE1pbkxpbWl0IE1pbk1heCBNaW5vclBsYW5ldERhdGEgTWlub3JzIE1pblJlY3Vyc2lvbiBNaW5TaXplIE1pblN0YWJsZURpc3RyaWJ1dGlvbiBNaW51cyBNaW51c1BsdXMgTWluVmFsdWUgTWlzc2luZyBNaXNzaW5nQmVoYXZpb3IgTWlzc2luZ0RhdGFNZXRob2QgTWlzc2luZ0RhdGFSdWxlcyBNaXNzaW5nUSBNaXNzaW5nU3RyaW5nIE1pc3NpbmdTdHlsZSBNaXNzaW5nVmFsdWVQYXR0ZXJuIE1pdHRhZ0xlZmZsZXJFIE1peGVkRnJhY3Rpb25QYXJ0cyBNaXhlZEdyYXBoUSBNaXhlZE1hZ25pdHVkZSBNaXhlZFJhZGl4IE1peGVkUmFkaXhRdWFudGl0eSBNaXhlZFVuaXQgTWl4dHVyZURpc3RyaWJ1dGlvbiBNb2QgTW9kYWwgTW9kZSBNb2R1bGFyIE1vZHVsYXJJbnZlcnNlIE1vZHVsYXJMYW1iZGEgTW9kdWxlIE1vZHVsdXMgTW9lYml1c011IE1vbGVjdWxlIE1vbGVjdWxlQ29udGFpbnNRIE1vbGVjdWxlRXF1aXZhbGVudFEgTW9sZWN1bGVHcmFwaCBNb2xlY3VsZU1vZGlmeSBNb2xlY3VsZVBhdHRlcm4gTW9sZWN1bGVQbG90IE1vbGVjdWxlUGxvdDNEIE1vbGVjdWxlUHJvcGVydHkgTW9sZWN1bGVRIE1vbGVjdWxlVmFsdWUgTW9tZW50IE1vbWVudGFyeSBNb21lbnRDb252ZXJ0IE1vbWVudEV2YWx1YXRlIE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiBNb21lbnRPZkluZXJ0aWEgTW9uZGF5IE1vbml0b3IgTW9ub21pYWxMaXN0IE1vbm9taWFsT3JkZXIgTW9uc3Rlckdyb3VwTSBNb29uUGhhc2UgTW9vblBvc2l0aW9uIE1vcmxldFdhdmVsZXQgTW9ycGhvbG9naWNhbEJpbmFyaXplIE1vcnBob2xvZ2ljYWxCcmFuY2hQb2ludHMgTW9ycGhvbG9naWNhbENvbXBvbmVudHMgTW9ycGhvbG9naWNhbEV1bGVyTnVtYmVyIE1vcnBob2xvZ2ljYWxHcmFwaCBNb3JwaG9sb2dpY2FsUGVyaW1ldGVyIE1vcnBob2xvZ2ljYWxUcmFuc2Zvcm0gTW9ydGFsaXR5RGF0YSBNb3N0IE1vdW50YWluRGF0YSBNb3VzZUFubm90YXRpb24gTW91c2VBcHBlYXJhbmNlIE1vdXNlQXBwZWFyYW5jZVRhZyBNb3VzZUJ1dHRvbnMgTW91c2VvdmVyIE1vdXNlUG9pbnRlck5vdGUgTW91c2VQb3NpdGlvbiBNb3ZpZURhdGEgTW92aW5nQXZlcmFnZSBNb3ZpbmdNYXAgTW92aW5nTWVkaWFuIE1veWFsRGlzdHJpYnV0aW9uIE11bHRpY29sdW1uIE11bHRpZWRnZVN0eWxlIE11bHRpZ3JhcGhRIE11bHRpbGF1bmNoV2FybmluZyBNdWx0aUxldHRlckl0YWxpY3MgTXVsdGlMZXR0ZXJTdHlsZSBNdWx0aWxpbmVGdW5jdGlvbiBNdWx0aW5vbWlhbCBNdWx0aW5vbWlhbERpc3RyaWJ1dGlvbiBNdWx0aW5vcm1hbERpc3RyaWJ1dGlvbiBNdWx0aXBsaWNhdGl2ZU9yZGVyIE11bHRpcGxpY2l0eSBNdWx0aXBseVNpZGVzIE11bHRpc2VsZWN0aW9uIE11bHRpdmFyaWF0ZUh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIE11bHRpdmFyaWF0ZVBvaXNzb25EaXN0cmlidXRpb24gTXVsdGl2YXJpYXRlVERpc3RyaWJ1dGlvbicgK1xuICAgICAgJ04gTmFrYWdhbWlEaXN0cmlidXRpb24gTmFtZVEgTmFtZXMgTmFtZXNwYWNlQm94IE5hbWVzcGFjZUJveE9wdGlvbnMgTmFuZCBOQXJnTWF4IE5BcmdNaW4gTkJlcm5vdWxsaUIgTkJvZHlTaW11bGF0aW9uIE5Cb2R5U2ltdWxhdGlvbkRhdGEgTkNhY2hlIE5ERWlnZW5zeXN0ZW0gTkRFaWdlbnZhbHVlcyBORFNvbHZlIE5EU29sdmVWYWx1ZSBOZWFyZXN0IE5lYXJlc3RGdW5jdGlvbiBOZWFyZXN0TmVpZ2hib3JHcmFwaCBOZWFyZXN0VG8gTmVidWxhRGF0YSBOZWVkQ3VycmVudEZyb250RW5kUGFja2FnZVBhY2tldCBOZWVkQ3VycmVudEZyb250RW5kU3ltYm9sc1BhY2tldCBOZWVkbGVtYW5XdW5zY2hTaW1pbGFyaXR5IE5lZWRzIE5lZ2F0aXZlIE5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb24gTmVnYXRpdmVEZWZpbml0ZU1hdHJpeFEgTmVnYXRpdmVJbnRlZ2VycyBOZWdhdGl2ZU11bHRpbm9taWFsRGlzdHJpYnV0aW9uIE5lZ2F0aXZlUmF0aW9uYWxzIE5lZ2F0aXZlUmVhbHMgTmVnYXRpdmVTZW1pZGVmaW5pdGVNYXRyaXhRIE5laWdoYm9yaG9vZERhdGEgTmVpZ2hib3Job29kR3JhcGggTmVzdCBOZXN0ZWRHcmVhdGVyR3JlYXRlciBOZXN0ZWRMZXNzTGVzcyBOZXN0ZWRTY3JpcHRSdWxlcyBOZXN0R3JhcGggTmVzdExpc3QgTmVzdFdoaWxlIE5lc3RXaGlsZUxpc3QgTmV0QXBwZW5kIE5ldEJpZGlyZWN0aW9uYWxPcGVyYXRvciBOZXRDaGFpbiBOZXREZWNvZGVyIE5ldERlbGV0ZSBOZXREcm9wIE5ldEVuY29kZXIgTmV0RXZhbHVhdGlvbk1vZGUgTmV0RXh0cmFjdCBOZXRGbGF0dGVuIE5ldEZvbGRPcGVyYXRvciBOZXRHcmFwaCBOZXRJbmZvcm1hdGlvbiBOZXRJbml0aWFsaXplIE5ldEluc2VydCBOZXRJbnNlcnRTaGFyZWRBcnJheXMgTmV0Sm9pbiBOZXRNYXBPcGVyYXRvciBOZXRNYXBUaHJlYWRPcGVyYXRvciBOZXRNZWFzdXJlbWVudHMgTmV0TW9kZWwgTmV0TmVzdE9wZXJhdG9yIE5ldFBhaXJFbWJlZGRpbmdPcGVyYXRvciBOZXRQb3J0IE5ldFBvcnRHcmFkaWVudCBOZXRQcmVwZW5kIE5ldFJlbmFtZSBOZXRSZXBsYWNlIE5ldFJlcGxhY2VQYXJ0IE5ldFNoYXJlZEFycmF5IE5ldFN0YXRlT2JqZWN0IE5ldFRha2UgTmV0VHJhaW4gTmV0VHJhaW5SZXN1bHRzT2JqZWN0IE5ldHdvcmtQYWNrZXRDYXB0dXJlIE5ldHdvcmtQYWNrZXRSZWNvcmRpbmcgTmV0d29ya1BhY2tldFJlY29yZGluZ0R1cmluZyBOZXR3b3JrUGFja2V0VHJhY2UgTmV1bWFublZhbHVlIE5ldmlsbGVUaGV0YUMgTmV2aWxsZVRoZXRhRCBOZXZpbGxlVGhldGFOIE5ldmlsbGVUaGV0YVMgTmV3UHJpbWl0aXZlU3R5bGUgTkV4cGVjdGF0aW9uIE5leHQgTmV4dENlbGwgTmV4dERhdGUgTmV4dFByaW1lIE5leHRTY2hlZHVsZWRUYXNrVGltZSBOSG9sZEFsbCBOSG9sZEZpcnN0IE5Ib2xkUmVzdCBOaWNob2xzR3JpZExpbmVzIE5pY2hvbHNQbG90IE5pZ2h0SGVtaXNwaGVyZSBOSW50ZWdyYXRlIE5NYXhpbWl6ZSBOTWF4VmFsdWUgTk1pbmltaXplIE5NaW5WYWx1ZSBOb21pbmFsVmFyaWFibGVzIE5vbkFzc29jaWF0aXZlIE5vbmNlbnRyYWxCZXRhRGlzdHJpYnV0aW9uIE5vbmNlbnRyYWxDaGlTcXVhcmVEaXN0cmlidXRpb24gTm9uY2VudHJhbEZSYXRpb0Rpc3RyaWJ1dGlvbiBOb25jZW50cmFsU3R1ZGVudFREaXN0cmlidXRpb24gTm9uQ29tbXV0YXRpdmVNdWx0aXBseSBOb25Db25zdGFudHMgTm9uZGltZW5zaW9uYWxpemF0aW9uVHJhbnNmb3JtIE5vbmUgTm9uZVRydWUgTm9ubGluZWFyTW9kZWxGaXQgTm9ubGluZWFyU3RhdGVTcGFjZU1vZGVsIE5vbmxvY2FsTWVhbnNGaWx0ZXIgTm9uTmVnYXRpdmUgTm9uTmVnYXRpdmVJbnRlZ2VycyBOb25OZWdhdGl2ZVJhdGlvbmFscyBOb25OZWdhdGl2ZVJlYWxzIE5vblBvc2l0aXZlIE5vblBvc2l0aXZlSW50ZWdlcnMgTm9uUG9zaXRpdmVSYXRpb25hbHMgTm9uUG9zaXRpdmVSZWFscyBOb3IgTm9ybHVuZEIgTm9ybSBOb3JtYWwgTm9ybWFsRGlzdHJpYnV0aW9uIE5vcm1hbEdyb3VwaW5nIE5vcm1hbGl6YXRpb25MYXllciBOb3JtYWxpemUgTm9ybWFsaXplZCBOb3JtYWxpemVkU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIE5vcm1hbE1hdHJpeFEgTm9ybWFsc0Z1bmN0aW9uIE5vcm1GdW5jdGlvbiBOb3QgTm90Q29uZ3J1ZW50IE5vdEN1cENhcCBOb3REb3VibGVWZXJ0aWNhbEJhciBOb3RlYm9vayBOb3RlYm9va0FwcGx5IE5vdGVib29rQXV0b1NhdmUgTm90ZWJvb2tDbG9zZSBOb3RlYm9va0NvbnZlcnRTZXR0aW5ncyBOb3RlYm9va0NyZWF0ZSBOb3RlYm9va0NyZWF0ZVJldHVybk9iamVjdCBOb3RlYm9va0RlZmF1bHQgTm90ZWJvb2tEZWxldGUgTm90ZWJvb2tEaXJlY3RvcnkgTm90ZWJvb2tEeW5hbWljRXhwcmVzc2lvbiBOb3RlYm9va0V2YWx1YXRlIE5vdGVib29rRXZlbnRBY3Rpb25zIE5vdGVib29rRmlsZU5hbWUgTm90ZWJvb2tGaW5kIE5vdGVib29rRmluZFJldHVybk9iamVjdCBOb3RlYm9va0dldCBOb3RlYm9va0dldExheW91dEluZm9ybWF0aW9uUGFja2V0IE5vdGVib29rR2V0TWlzc3BlbGxpbmdzUGFja2V0IE5vdGVib29rSW1wb3J0IE5vdGVib29rSW5mb3JtYXRpb24gTm90ZWJvb2tJbnRlcmZhY2VPYmplY3QgTm90ZWJvb2tMb2NhdGUgTm90ZWJvb2tPYmplY3QgTm90ZWJvb2tPcGVuIE5vdGVib29rT3BlblJldHVybk9iamVjdCBOb3RlYm9va1BhdGggTm90ZWJvb2tQcmludCBOb3RlYm9va1B1dCBOb3RlYm9va1B1dFJldHVybk9iamVjdCBOb3RlYm9va1JlYWQgTm90ZWJvb2tSZXNldEdlbmVyYXRlZENlbGxzIE5vdGVib29rcyBOb3RlYm9va1NhdmUgTm90ZWJvb2tTYXZlQXMgTm90ZWJvb2tTZWxlY3Rpb24gTm90ZWJvb2tTZXR1cExheW91dEluZm9ybWF0aW9uUGFja2V0IE5vdGVib29rc01lbnUgTm90ZWJvb2tUZW1wbGF0ZSBOb3RlYm9va1dyaXRlIE5vdEVsZW1lbnQgTm90RXF1YWxUaWxkZSBOb3RFeGlzdHMgTm90R3JlYXRlciBOb3RHcmVhdGVyRXF1YWwgTm90R3JlYXRlckZ1bGxFcXVhbCBOb3RHcmVhdGVyR3JlYXRlciBOb3RHcmVhdGVyTGVzcyBOb3RHcmVhdGVyU2xhbnRFcXVhbCBOb3RHcmVhdGVyVGlsZGUgTm90aGluZyBOb3RIdW1wRG93bkh1bXAgTm90SHVtcEVxdWFsIE5vdGlmaWNhdGlvbkZ1bmN0aW9uIE5vdExlZnRUcmlhbmdsZSBOb3RMZWZ0VHJpYW5nbGVCYXIgTm90TGVmdFRyaWFuZ2xlRXF1YWwgTm90TGVzcyBOb3RMZXNzRXF1YWwgTm90TGVzc0Z1bGxFcXVhbCBOb3RMZXNzR3JlYXRlciBOb3RMZXNzTGVzcyBOb3RMZXNzU2xhbnRFcXVhbCBOb3RMZXNzVGlsZGUgTm90TmVzdGVkR3JlYXRlckdyZWF0ZXIgTm90TmVzdGVkTGVzc0xlc3MgTm90UHJlY2VkZXMgTm90UHJlY2VkZXNFcXVhbCBOb3RQcmVjZWRlc1NsYW50RXF1YWwgTm90UHJlY2VkZXNUaWxkZSBOb3RSZXZlcnNlRWxlbWVudCBOb3RSaWdodFRyaWFuZ2xlIE5vdFJpZ2h0VHJpYW5nbGVCYXIgTm90UmlnaHRUcmlhbmdsZUVxdWFsIE5vdFNxdWFyZVN1YnNldCBOb3RTcXVhcmVTdWJzZXRFcXVhbCBOb3RTcXVhcmVTdXBlcnNldCBOb3RTcXVhcmVTdXBlcnNldEVxdWFsIE5vdFN1YnNldCBOb3RTdWJzZXRFcXVhbCBOb3RTdWNjZWVkcyBOb3RTdWNjZWVkc0VxdWFsIE5vdFN1Y2NlZWRzU2xhbnRFcXVhbCBOb3RTdWNjZWVkc1RpbGRlIE5vdFN1cGVyc2V0IE5vdFN1cGVyc2V0RXF1YWwgTm90VGlsZGUgTm90VGlsZGVFcXVhbCBOb3RUaWxkZUZ1bGxFcXVhbCBOb3RUaWxkZVRpbGRlIE5vdFZlcnRpY2FsQmFyIE5vdyBOb1doaXRlc3BhY2UgTlByb2JhYmlsaXR5IE5Qcm9kdWN0IE5Qcm9kdWN0RmFjdG9ycyBOUm9vdHMgTlNvbHZlIE5TdW0gTlN1bVRlcm1zIE51Y2xlYXJFeHBsb3Npb25EYXRhIE51Y2xlYXJSZWFjdG9yRGF0YSBOdWxsIE51bGxSZWNvcmRzIE51bGxTcGFjZSBOdWxsV29yZHMgTnVtYmVyIE51bWJlckNvbXBvc2UgTnVtYmVyRGVjb21wb3NlIE51bWJlckV4cGFuZCBOdW1iZXJGaWVsZENsYXNzTnVtYmVyIE51bWJlckZpZWxkRGlzY3JpbWluYW50IE51bWJlckZpZWxkRnVuZGFtZW50YWxVbml0cyBOdW1iZXJGaWVsZEludGVncmFsQmFzaXMgTnVtYmVyRmllbGROb3JtUmVwcmVzZW50YXRpdmVzIE51bWJlckZpZWxkUmVndWxhdG9yIE51bWJlckZpZWxkUm9vdHNPZlVuaXR5IE51bWJlckZpZWxkU2lnbmF0dXJlIE51bWJlckZvcm0gTnVtYmVyRm9ybWF0IE51bWJlckxpbmVQbG90IE51bWJlck1hcmtzIE51bWJlck11bHRpcGxpZXIgTnVtYmVyUGFkZGluZyBOdW1iZXJQb2ludCBOdW1iZXJRIE51bWJlclNlcGFyYXRvciBOdW1iZXJTaWducyBOdW1iZXJTdHJpbmcgTnVtZXJhdG9yIE51bWVyYXRvckRlbm9taW5hdG9yIE51bWVyaWNhbE9yZGVyIE51bWVyaWNhbFNvcnQgTnVtZXJpY0FycmF5IE51bWVyaWNBcnJheVEgTnVtZXJpY0FycmF5VHlwZSBOdW1lcmljRnVuY3Rpb24gTnVtZXJpY1EgTnV0dGFsbFdpbmRvdyBOVmFsdWVzIE55cXVpc3RHcmlkTGluZXMgTnlxdWlzdFBsb3QnICtcbiAgICAgICdPIE9ic2VydmFiaWxpdHlHcmFtaWFuIE9ic2VydmFiaWxpdHlNYXRyaXggT2JzZXJ2YWJsZURlY29tcG9zaXRpb24gT2JzZXJ2YWJsZU1vZGVsUSBPY2VhbkRhdGEgT2N0YWhlZHJvbiBPZGRRIE9mZiBPZmZzZXQgT0xFRGF0YSBPbiBPTmFuR3JvdXBPTiBPbmNlIE9uZUlkZW50aXR5IE9wYWNpdHkgT3BhY2l0eUZ1bmN0aW9uIE9wYWNpdHlGdW5jdGlvblNjYWxpbmcgT3BlbiBPcGVuQXBwZW5kIE9wZW5lciBPcGVuZXJCb3ggT3BlbmVyQm94T3B0aW9ucyBPcGVuZXJWaWV3IE9wZW5GdW5jdGlvbkluc3BlY3RvclBhY2tldCBPcGVuaW5nIE9wZW5SZWFkIE9wZW5TcGVjaWFsT3B0aW9ucyBPcGVuVGVtcG9yYXJ5IE9wZW5Xcml0ZSBPcGVyYXRlIE9wZXJhdGluZ1N5c3RlbSBPcHRpbXVtRmxvd0RhdGEgT3B0aW9uYWwgT3B0aW9uYWxFbGVtZW50IE9wdGlvbkluc3BlY3RvclNldHRpbmdzIE9wdGlvblEgT3B0aW9ucyBPcHRpb25zUGFja2V0IE9wdGlvbnNQYXR0ZXJuIE9wdGlvblZhbHVlIE9wdGlvblZhbHVlQm94IE9wdGlvblZhbHVlQm94T3B0aW9ucyBPciBPcmFuZ2UgT3JkZXIgT3JkZXJEaXN0cmlidXRpb24gT3JkZXJlZFEgT3JkZXJpbmcgT3JkZXJpbmdCeSBPcmRlcmluZ0xheWVyIE9yZGVybGVzcyBPcmRlcmxlc3NQYXR0ZXJuU2VxdWVuY2UgT3Juc3RlaW5VaGxlbmJlY2tQcm9jZXNzIE9ydGhvZ29uYWxpemUgT3J0aG9nb25hbE1hdHJpeFEgT3V0IE91dGVyIE91dGVyUG9seWdvbiBPdXRlclBvbHloZWRyb24gT3V0cHV0QXV0b092ZXJ3cml0ZSBPdXRwdXRDb250cm9sbGFiaWxpdHlNYXRyaXggT3V0cHV0Q29udHJvbGxhYmxlTW9kZWxRIE91dHB1dEZvcm0gT3V0cHV0Rm9ybURhdGEgT3V0cHV0R3JvdXBpbmcgT3V0cHV0TWF0aEVkaXRFeHByZXNzaW9uIE91dHB1dE5hbWVQYWNrZXQgT3V0cHV0UmVzcG9uc2UgT3V0cHV0U2l6ZUxpbWl0IE91dHB1dFN0cmVhbSBPdmVyIE92ZXJCYXIgT3ZlckRvdCBPdmVyZmxvdyBPdmVySGF0IE92ZXJsYXBzIE92ZXJsYXkgT3ZlcmxheUJveCBPdmVybGF5Qm94T3B0aW9ucyBPdmVyc2NyaXB0IE92ZXJzY3JpcHRCb3ggT3ZlcnNjcmlwdEJveE9wdGlvbnMgT3ZlclRpbGRlIE92ZXJWZWN0b3IgT3ZlcndyaXRlVGFyZ2V0IE93ZW5UIE93blZhbHVlcycgK1xuICAgICAgJ1BhY2thZ2UgUGFja2luZ01ldGhvZCBQYWRkZWRGb3JtIFBhZGRpbmcgUGFkZGluZ0xheWVyIFBhZGRpbmdTaXplIFBhZGVBcHByb3hpbWFudCBQYWRMZWZ0IFBhZFJpZ2h0IFBhZ2VCcmVha0Fib3ZlIFBhZ2VCcmVha0JlbG93IFBhZ2VCcmVha1dpdGhpbiBQYWdlRm9vdGVyTGluZXMgUGFnZUZvb3RlcnMgUGFnZUhlYWRlckxpbmVzIFBhZ2VIZWFkZXJzIFBhZ2VIZWlnaHQgUGFnZVJhbmtDZW50cmFsaXR5IFBhZ2VUaGVtZSBQYWdlV2lkdGggUGFnaW5hdGlvbiBQYWlyZWRCYXJDaGFydCBQYWlyZWRIaXN0b2dyYW0gUGFpcmVkU21vb3RoSGlzdG9ncmFtIFBhaXJlZFRUZXN0IFBhaXJlZFpUZXN0IFBhbGV0dGVOb3RlYm9vayBQYWxldHRlUGF0aCBQYWxpbmRyb21lUSBQYW5lIFBhbmVCb3ggUGFuZUJveE9wdGlvbnMgUGFuZWwgUGFuZWxCb3ggUGFuZWxCb3hPcHRpb25zIFBhbmVsZWQgUGFuZVNlbGVjdG9yIFBhbmVTZWxlY3RvckJveCBQYW5lU2VsZWN0b3JCb3hPcHRpb25zIFBhcGVyV2lkdGggUGFyYWJvbGljQ3lsaW5kZXJEIFBhcmFncmFwaEluZGVudCBQYXJhZ3JhcGhTcGFjaW5nIFBhcmFsbGVsQXJyYXkgUGFyYWxsZWxDb21iaW5lIFBhcmFsbGVsRG8gUGFyYWxsZWxlcGlwZWQgUGFyYWxsZWxFdmFsdWF0ZSBQYXJhbGxlbGl6YXRpb24gUGFyYWxsZWxpemUgUGFyYWxsZWxNYXAgUGFyYWxsZWxOZWVkcyBQYXJhbGxlbG9ncmFtIFBhcmFsbGVsUHJvZHVjdCBQYXJhbGxlbFN1Ym1pdCBQYXJhbGxlbFN1bSBQYXJhbGxlbFRhYmxlIFBhcmFsbGVsVHJ5IFBhcmFtZXRlciBQYXJhbWV0ZXJFc3RpbWF0b3IgUGFyYW1ldGVyTWl4dHVyZURpc3RyaWJ1dGlvbiBQYXJhbWV0ZXJWYXJpYWJsZXMgUGFyYW1ldHJpY0Z1bmN0aW9uIFBhcmFtZXRyaWNORFNvbHZlIFBhcmFtZXRyaWNORFNvbHZlVmFsdWUgUGFyYW1ldHJpY1Bsb3QgUGFyYW1ldHJpY1Bsb3QzRCBQYXJhbWV0cmljUmVnaW9uIFBhcmVudEJveCBQYXJlbnRDZWxsIFBhcmVudENvbm5lY3QgUGFyZW50RGlyZWN0b3J5IFBhcmVudEZvcm0gUGFyZW50aGVzaXplIFBhcmVudExpc3QgUGFyZW50Tm90ZWJvb2sgUGFyZXRvRGlzdHJpYnV0aW9uIFBhcmV0b1BpY2thbmRzRGlzdHJpYnV0aW9uIFBhcmtEYXRhIFBhcnQgUGFydEJlaGF2aW9yIFBhcnRpYWxDb3JyZWxhdGlvbkZ1bmN0aW9uIFBhcnRpYWxEIFBhcnRpY2xlQWNjZWxlcmF0b3JEYXRhIFBhcnRpY2xlRGF0YSBQYXJ0aXRpb24gUGFydGl0aW9uR3JhbnVsYXJpdHkgUGFydGl0aW9uc1AgUGFydGl0aW9uc1EgUGFydExheWVyIFBhcnRPZlNwZWVjaCBQYXJ0UHJvdGVjdGlvbiBQYXJ6ZW5XaW5kb3cgUGFzY2FsRGlzdHJpYnV0aW9uIFBhc3NFdmVudHNEb3duIFBhc3NFdmVudHNVcCBQYXN0ZSBQYXN0ZUF1dG9RdW90ZUNoYXJhY3RlcnMgUGFzdGVCb3hGb3JtSW5saW5lQ2VsbHMgUGFzdGVCdXR0b24gUGF0aCBQYXRoR3JhcGggUGF0aEdyYXBoUSBQYXR0ZXJuIFBhdHRlcm5TZXF1ZW5jZSBQYXR0ZXJuVGVzdCBQYXVsaU1hdHJpeCBQYXVsV2F2ZWxldCBQYXVzZSBQYXVzZWRUaW1lIFBERiBQZWFrRGV0ZWN0IFBlYW5vQ3VydmUgUGVhcnNvbkNoaVNxdWFyZVRlc3QgUGVhcnNvbkNvcnJlbGF0aW9uVGVzdCBQZWFyc29uRGlzdHJpYnV0aW9uIFBlcmNlbnRGb3JtIFBlcmZlY3ROdW1iZXIgUGVyZmVjdE51bWJlclEgUGVyZm9ybWFuY2VHb2FsIFBlcmltZXRlciBQZXJpb2RpY0JvdW5kYXJ5Q29uZGl0aW9uIFBlcmlvZGljSW50ZXJwb2xhdGlvbiBQZXJpb2RvZ3JhbSBQZXJpb2RvZ3JhbUFycmF5IFBlcm1hbmVudCBQZXJtaXNzaW9ucyBQZXJtaXNzaW9uc0dyb3VwIFBlcm1pc3Npb25zR3JvdXBNZW1iZXJRIFBlcm1pc3Npb25zR3JvdXBzIFBlcm1pc3Npb25zS2V5IFBlcm1pc3Npb25zS2V5cyBQZXJtdXRhdGlvbkN5Y2xlcyBQZXJtdXRhdGlvbkN5Y2xlc1EgUGVybXV0YXRpb25Hcm91cCBQZXJtdXRhdGlvbkxlbmd0aCBQZXJtdXRhdGlvbkxpc3QgUGVybXV0YXRpb25MaXN0USBQZXJtdXRhdGlvbk1heCBQZXJtdXRhdGlvbk1pbiBQZXJtdXRhdGlvbk9yZGVyIFBlcm11dGF0aW9uUG93ZXIgUGVybXV0YXRpb25Qcm9kdWN0IFBlcm11dGF0aW9uUmVwbGFjZSBQZXJtdXRhdGlvbnMgUGVybXV0YXRpb25TdXBwb3J0IFBlcm11dGUgUGVyb25hTWFsaWtGaWx0ZXIgUGVycGVuZGljdWxhciBQZXJwZW5kaWN1bGFyQmlzZWN0b3IgUGVyc2lzdGVuY2VMb2NhdGlvbiBQZXJzaXN0ZW5jZVRpbWUgUGVyc2lzdGVudE9iamVjdCBQZXJzaXN0ZW50T2JqZWN0cyBQZXJzaXN0ZW50VmFsdWUgUGVyc29uRGF0YSBQRVJURGlzdHJpYnV0aW9uIFBldGVyc2VuR3JhcGggUGhhc2VNYXJnaW5zIFBoYXNlUmFuZ2UgUGh5c2ljYWxTeXN0ZW1EYXRhIFBpIFBpY2sgUElERGF0YSBQSUREZXJpdmF0aXZlRmlsdGVyIFBJREZlZWRmb3J3YXJkIFBJRFR1bmUgUGllY2V3aXNlIFBpZWNld2lzZUV4cGFuZCBQaWVDaGFydCBQaWVDaGFydDNEIFBpbGxhaVRyYWNlIFBpbGxhaVRyYWNlVGVzdCBQaW5nVGltZSBQaW5rIFBpdGNoUmVjb2duaXplIFBpdm90aW5nIFBpeGVsQ29uc3RyYWluZWQgUGl4ZWxWYWx1ZSBQaXhlbFZhbHVlUG9zaXRpb25zIFBsYWNlZCBQbGFjZWhvbGRlciBQbGFjZWhvbGRlclJlcGxhY2UgUGxhaW4gUGxhbmFyQW5nbGUgUGxhbmFyR3JhcGggUGxhbmFyR3JhcGhRIFBsYW5ja1JhZGlhdGlvbkxhdyBQbGFuZUN1cnZlRGF0YSBQbGFuZXRhcnlNb29uRGF0YSBQbGFuZXREYXRhIFBsYW50RGF0YSBQbGF5IFBsYXlSYW5nZSBQbG90IFBsb3QzRCBQbG90M01hdHJpeCBQbG90RGl2aXNpb24gUGxvdEpvaW5lZCBQbG90TGFiZWwgUGxvdExhYmVscyBQbG90TGF5b3V0IFBsb3RMZWdlbmRzIFBsb3RNYXJrZXJzIFBsb3RQb2ludHMgUGxvdFJhbmdlIFBsb3RSYW5nZUNsaXBwaW5nIFBsb3RSYW5nZUNsaXBQbGFuZXNTdHlsZSBQbG90UmFuZ2VQYWRkaW5nIFBsb3RSZWdpb24gUGxvdFN0eWxlIFBsb3RUaGVtZSBQbHVyYWxpemUgUGx1cyBQbHVzTWludXMgUG9jaGhhbW1lciBQb2RTdGF0ZXMgUG9kV2lkdGggUG9pbnQgUG9pbnQzREJveCBQb2ludDNEQm94T3B0aW9ucyBQb2ludEJveCBQb2ludEJveE9wdGlvbnMgUG9pbnRGaWd1cmVDaGFydCBQb2ludExlZ2VuZCBQb2ludFNpemUgUG9pc3NvbkNvbnN1bERpc3RyaWJ1dGlvbiBQb2lzc29uRGlzdHJpYnV0aW9uIFBvaXNzb25Qcm9jZXNzIFBvaXNzb25XaW5kb3cgUG9sYXJBeGVzIFBvbGFyQXhlc09yaWdpbiBQb2xhckdyaWRMaW5lcyBQb2xhclBsb3QgUG9sYXJUaWNrcyBQb2xlWmVyb01hcmtlcnMgUG9seWFBZXBwbGlEaXN0cmlidXRpb24gUG9seUdhbW1hIFBvbHlnb24gUG9seWdvbjNEQm94IFBvbHlnb24zREJveE9wdGlvbnMgUG9seWdvbmFsTnVtYmVyIFBvbHlnb25BbmdsZSBQb2x5Z29uQm94IFBvbHlnb25Cb3hPcHRpb25zIFBvbHlnb25Db29yZGluYXRlcyBQb2x5Z29uRGVjb21wb3NpdGlvbiBQb2x5Z29uSG9sZVNjYWxlIFBvbHlnb25JbnRlcnNlY3Rpb25zIFBvbHlnb25TY2FsZSBQb2x5aGVkcm9uIFBvbHloZWRyb25BbmdsZSBQb2x5aGVkcm9uQ29vcmRpbmF0ZXMgUG9seWhlZHJvbkRhdGEgUG9seWhlZHJvbkRlY29tcG9zaXRpb24gUG9seWhlZHJvbkdlbnVzIFBvbHlMb2cgUG9seW5vbWlhbEV4dGVuZGVkR0NEIFBvbHlub21pYWxGb3JtIFBvbHlub21pYWxHQ0QgUG9seW5vbWlhbExDTSBQb2x5bm9taWFsTW9kIFBvbHlub21pYWxRIFBvbHlub21pYWxRdW90aWVudCBQb2x5bm9taWFsUXVvdGllbnRSZW1haW5kZXIgUG9seW5vbWlhbFJlZHVjZSBQb2x5bm9taWFsUmVtYWluZGVyIFBvbHlub21pYWxzIFBvb2xpbmdMYXllciBQb3B1cE1lbnUgUG9wdXBNZW51Qm94IFBvcHVwTWVudUJveE9wdGlvbnMgUG9wdXBWaWV3IFBvcHVwV2luZG93IFBvc2l0aW9uIFBvc2l0aW9uSW5kZXggUG9zaXRpdmUgUG9zaXRpdmVEZWZpbml0ZU1hdHJpeFEgUG9zaXRpdmVJbnRlZ2VycyBQb3NpdGl2ZVJhdGlvbmFscyBQb3NpdGl2ZVJlYWxzIFBvc2l0aXZlU2VtaWRlZmluaXRlTWF0cml4USBQb3NzaWJsZVplcm9RIFBvc3RmaXggUG9zdFNjcmlwdCBQb3dlciBQb3dlckRpc3RyaWJ1dGlvbiBQb3dlckV4cGFuZCBQb3dlck1vZCBQb3dlck1vZExpc3QgUG93ZXJSYW5nZSBQb3dlclNwZWN0cmFsRGVuc2l0eSBQb3dlcnNSZXByZXNlbnRhdGlvbnMgUG93ZXJTeW1tZXRyaWNQb2x5bm9taWFsIFByZWNlZGVuY2UgUHJlY2VkZW5jZUZvcm0gUHJlY2VkZXMgUHJlY2VkZXNFcXVhbCBQcmVjZWRlc1NsYW50RXF1YWwgUHJlY2VkZXNUaWxkZSBQcmVjaXNpb24gUHJlY2lzaW9uR29hbCBQcmVEZWNyZW1lbnQgUHJlZGljdCBQcmVkaWN0aW9uUm9vdCBQcmVkaWN0b3JGdW5jdGlvbiBQcmVkaWN0b3JJbmZvcm1hdGlvbiBQcmVkaWN0b3JNZWFzdXJlbWVudHMgUHJlZGljdG9yTWVhc3VyZW1lbnRzT2JqZWN0IFByZWVtcHRQcm90ZWN0IFByZWZlcmVuY2VzUGF0aCBQcmVmaXggUHJlSW5jcmVtZW50IFByZXBlbmQgUHJlcGVuZExheWVyIFByZXBlbmRUbyBQcmVwcm9jZXNzaW5nUnVsZXMgUHJlc2VydmVDb2xvciBQcmVzZXJ2ZUltYWdlT3B0aW9ucyBQcmV2aW91cyBQcmV2aW91c0NlbGwgUHJldmlvdXNEYXRlIFByaWNlR3JhcGhEaXN0cmlidXRpb24gUHJpbWFyeVBsYWNlaG9sZGVyIFByaW1lIFByaW1lTnUgUHJpbWVPbWVnYSBQcmltZVBpIFByaW1lUG93ZXJRIFByaW1lUSBQcmltZXMgUHJpbWVaZXRhUCBQcmltaXRpdmVQb2x5bm9taWFsUSBQcmltaXRpdmVSb290IFByaW1pdGl2ZVJvb3RMaXN0IFByaW5jaXBhbENvbXBvbmVudHMgUHJpbmNpcGFsVmFsdWUgUHJpbnQgUHJpbnRhYmxlQVNDSUlRIFByaW50QWN0aW9uIFByaW50Rm9ybSBQcmludGluZ0NvcGllcyBQcmludGluZ09wdGlvbnMgUHJpbnRpbmdQYWdlUmFuZ2UgUHJpbnRpbmdTdGFydGluZ1BhZ2VOdW1iZXIgUHJpbnRpbmdTdHlsZUVudmlyb25tZW50IFByaW50b3V0M0QgUHJpbnRvdXQzRFByZXZpZXdlciBQcmludFByZWNpc2lvbiBQcmludFRlbXBvcmFyeSBQcmlzbSBQcmlzbUJveCBQcmlzbUJveE9wdGlvbnMgUHJpdmF0ZUNlbGxPcHRpb25zIFByaXZhdGVFdmFsdWF0aW9uT3B0aW9ucyBQcml2YXRlRm9udE9wdGlvbnMgUHJpdmF0ZUZyb250RW5kT3B0aW9ucyBQcml2YXRlS2V5IFByaXZhdGVOb3RlYm9va09wdGlvbnMgUHJpdmF0ZVBhdGhzIFByb2JhYmlsaXR5IFByb2JhYmlsaXR5RGlzdHJpYnV0aW9uIFByb2JhYmlsaXR5UGxvdCBQcm9iYWJpbGl0eVByIFByb2JhYmlsaXR5U2NhbGVQbG90IFByb2JpdE1vZGVsRml0IFByb2Nlc3NDb25uZWN0aW9uIFByb2Nlc3NEaXJlY3RvcnkgUHJvY2Vzc0Vudmlyb25tZW50IFByb2Nlc3NlcyBQcm9jZXNzRXN0aW1hdG9yIFByb2Nlc3NJbmZvcm1hdGlvbiBQcm9jZXNzT2JqZWN0IFByb2Nlc3NQYXJhbWV0ZXJBc3N1bXB0aW9ucyBQcm9jZXNzUGFyYW1ldGVyUSBQcm9jZXNzU3RhdGVEb21haW4gUHJvY2Vzc1N0YXR1cyBQcm9jZXNzVGltZURvbWFpbiBQcm9kdWN0IFByb2R1Y3REaXN0cmlidXRpb24gUHJvZHVjdExvZyBQcm9ncmVzc0luZGljYXRvciBQcm9ncmVzc0luZGljYXRvckJveCBQcm9ncmVzc0luZGljYXRvckJveE9wdGlvbnMgUHJvamVjdGlvbiBQcm9sb2cgUHJvbXB0Rm9ybSBQcm9vZk9iamVjdCBQcm9wZXJ0aWVzIFByb3BlcnR5IFByb3BlcnR5TGlzdCBQcm9wZXJ0eVZhbHVlIFByb3BvcnRpb24gUHJvcG9ydGlvbmFsIFByb3RlY3QgUHJvdGVjdGVkIFByb3RlaW5EYXRhIFBydW5pbmcgUHNldWRvSW52ZXJzZSBQc3ljaHJvbWV0cmljUHJvcGVydHlEYXRhIFB1YmxpY0tleSBQdWJsaXNoZXJJRCBQdWxzYXJEYXRhIFB1bmN0dWF0aW9uQ2hhcmFjdGVyIFB1cnBsZSBQdXQgUHV0QXBwZW5kIFB5cmFtaWQgUHlyYW1pZEJveCBQeXJhbWlkQm94T3B0aW9ucycgK1xuICAgICAgJ1FCaW5vbWlhbCBRRmFjdG9yaWFsIFFHYW1tYSBRSHlwZXJnZW9tZXRyaWNQRlEgUW5EaXNwZXJzaW9uIFFQb2NoaGFtbWVyIFFQb2x5R2FtbWEgUVJEZWNvbXBvc2l0aW9uIFF1YWRyYXRpY0lycmF0aW9uYWxRIFF1YWRyYXRpY09wdGltaXphdGlvbiBRdWFudGlsZSBRdWFudGlsZVBsb3QgUXVhbnRpdHkgUXVhbnRpdHlBcnJheSBRdWFudGl0eURpc3RyaWJ1dGlvbiBRdWFudGl0eUZvcm0gUXVhbnRpdHlNYWduaXR1ZGUgUXVhbnRpdHlRIFF1YW50aXR5VW5pdCBRdWFudGl0eVZhcmlhYmxlIFF1YW50aXR5VmFyaWFibGVDYW5vbmljYWxVbml0IFF1YW50aXR5VmFyaWFibGVEaW1lbnNpb25zIFF1YW50aXR5VmFyaWFibGVJZGVudGlmaWVyIFF1YW50aXR5VmFyaWFibGVQaHlzaWNhbFF1YW50aXR5IFF1YXJ0aWNzIFF1YXJ0aWxlRGV2aWF0aW9uIFF1YXJ0aWxlcyBRdWFydGlsZVNrZXduZXNzIFF1ZXJ5IFF1ZXVlaW5nTmV0d29ya1Byb2Nlc3MgUXVldWVpbmdQcm9jZXNzIFF1ZXVlUHJvcGVydGllcyBRdWlldCBRdWl0IFF1b3RpZW50IFF1b3RpZW50UmVtYWluZGVyJyArXG4gICAgICAnUmFkaWFsR3JhZGllbnRJbWFnZSBSYWRpYWxpdHlDZW50cmFsaXR5IFJhZGljYWxCb3ggUmFkaWNhbEJveE9wdGlvbnMgUmFkaW9CdXR0b24gUmFkaW9CdXR0b25CYXIgUmFkaW9CdXR0b25Cb3ggUmFkaW9CdXR0b25Cb3hPcHRpb25zIFJhZG9uIFJhZG9uVHJhbnNmb3JtIFJhbWFudWphblRhdSBSYW1hbnVqYW5UYXVMIFJhbWFudWphblRhdVRoZXRhIFJhbWFudWphblRhdVogUmFtcCBSYW5kb20gUmFuZG9tQ2hvaWNlIFJhbmRvbUNvbG9yIFJhbmRvbUNvbXBsZXggUmFuZG9tRW50aXR5IFJhbmRvbUZ1bmN0aW9uIFJhbmRvbUdlb1Bvc2l0aW9uIFJhbmRvbUdyYXBoIFJhbmRvbUltYWdlIFJhbmRvbUluc3RhbmNlIFJhbmRvbUludGVnZXIgUmFuZG9tUGVybXV0YXRpb24gUmFuZG9tUG9pbnQgUmFuZG9tUG9seWdvbiBSYW5kb21Qb2x5aGVkcm9uIFJhbmRvbVByaW1lIFJhbmRvbVJlYWwgUmFuZG9tU2FtcGxlIFJhbmRvbVNlZWQgUmFuZG9tU2VlZGluZyBSYW5kb21WYXJpYXRlIFJhbmRvbVdhbGtQcm9jZXNzIFJhbmRvbVdvcmQgUmFuZ2UgUmFuZ2VGaWx0ZXIgUmFuZ2VTcGVjaWZpY2F0aW9uIFJhbmtlZE1heCBSYW5rZWRNaW4gUmFyZXJQcm9iYWJpbGl0eSBSYXN0ZXIgUmFzdGVyM0QgUmFzdGVyM0RCb3ggUmFzdGVyM0RCb3hPcHRpb25zIFJhc3RlckFycmF5IFJhc3RlckJveCBSYXN0ZXJCb3hPcHRpb25zIFJhc3Rlcml6ZSBSYXN0ZXJTaXplIFJhdGlvbmFsIFJhdGlvbmFsRnVuY3Rpb25zIFJhdGlvbmFsaXplIFJhdGlvbmFscyBSYXRpb3MgUmF3QXJyYXkgUmF3Qm94ZXMgUmF3RGF0YSBSYXdNZWRpdW0gUmF5bGVpZ2hEaXN0cmlidXRpb24gUmUgUmVhZCBSZWFkQnl0ZUFycmF5IFJlYWRMaW5lIFJlYWRMaXN0IFJlYWRQcm90ZWN0ZWQgUmVhZFN0cmluZyBSZWFsIFJlYWxBYnMgUmVhbEJsb2NrRGlhZ29uYWxGb3JtIFJlYWxEaWdpdHMgUmVhbEV4cG9uZW50IFJlYWxzIFJlYWxTaWduIFJlYXAgUmVjb2duaXRpb25QcmlvciBSZWNvZ25pdGlvblRocmVzaG9sZCBSZWNvcmQgUmVjb3JkTGlzdHMgUmVjb3JkU2VwYXJhdG9ycyBSZWN0YW5nbGUgUmVjdGFuZ2xlQm94IFJlY3RhbmdsZUJveE9wdGlvbnMgUmVjdGFuZ2xlQ2hhcnQgUmVjdGFuZ2xlQ2hhcnQzRCBSZWN0YW5ndWxhclJlcGVhdGluZ0VsZW1lbnQgUmVjdXJyZW5jZUZpbHRlciBSZWN1cnJlbmNlVGFibGUgUmVjdXJyaW5nRGlnaXRzRm9ybSBSZWQgUmVkdWNlIFJlZkJveCBSZWZlcmVuY2VMaW5lU3R5bGUgUmVmZXJlbmNlTWFya2VycyBSZWZlcmVuY2VNYXJrZXJTdHlsZSBSZWZpbmUgUmVmbGVjdGlvbk1hdHJpeCBSZWZsZWN0aW9uVHJhbnNmb3JtIFJlZnJlc2ggUmVmcmVzaFJhdGUgUmVnaW9uIFJlZ2lvbkJpbmFyaXplIFJlZ2lvbkJvdW5kYXJ5IFJlZ2lvbkJvdW5kcyBSZWdpb25DZW50cm9pZCBSZWdpb25EaWZmZXJlbmNlIFJlZ2lvbkRpbWVuc2lvbiBSZWdpb25EaXNqb2ludCBSZWdpb25EaXN0YW5jZSBSZWdpb25EaXN0YW5jZUZ1bmN0aW9uIFJlZ2lvbkVtYmVkZGluZ0RpbWVuc2lvbiBSZWdpb25FcXVhbCBSZWdpb25GdW5jdGlvbiBSZWdpb25JbWFnZSBSZWdpb25JbnRlcnNlY3Rpb24gUmVnaW9uTWVhc3VyZSBSZWdpb25NZW1iZXIgUmVnaW9uTWVtYmVyRnVuY3Rpb24gUmVnaW9uTW9tZW50IFJlZ2lvbk5lYXJlc3QgUmVnaW9uTmVhcmVzdEZ1bmN0aW9uIFJlZ2lvblBsb3QgUmVnaW9uUGxvdDNEIFJlZ2lvblByb2R1Y3QgUmVnaW9uUSBSZWdpb25SZXNpemUgUmVnaW9uU2l6ZSBSZWdpb25TeW1tZXRyaWNEaWZmZXJlbmNlIFJlZ2lvblVuaW9uIFJlZ2lvbldpdGhpbiBSZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yIFJlZ3VsYXJFeHByZXNzaW9uIFJlZ3VsYXJpemF0aW9uIFJlZ3VsYXJseVNhbXBsZWRRIFJlZ3VsYXJQb2x5Z29uIFJlSW0gUmVJbUxhYmVscyBSZUltUGxvdCBSZUltU3R5bGUgUmVpbnN0YWxsIFJlbGF0aW9uYWxEYXRhYmFzZSBSZWxhdGlvbkdyYXBoIFJlbGVhc2UgUmVsZWFzZUhvbGQgUmVsaWFiaWxpdHlEaXN0cmlidXRpb24gUmVsaWVmSW1hZ2UgUmVsaWVmUGxvdCBSZW1vdGVBdXRob3JpemF0aW9uQ2FjaGluZyBSZW1vdGVDb25uZWN0IFJlbW90ZUNvbm5lY3Rpb25PYmplY3QgUmVtb3RlRmlsZSBSZW1vdGVSdW4gUmVtb3RlUnVuUHJvY2VzcyBSZW1vdmUgUmVtb3ZlQWxwaGFDaGFubmVsIFJlbW92ZUFzeW5jaHJvbm91c1Rhc2sgUmVtb3ZlQXVkaW9TdHJlYW0gUmVtb3ZlQmFja2dyb3VuZCBSZW1vdmVDaGFubmVsTGlzdGVuZXIgUmVtb3ZlQ2hhbm5lbFN1YnNjcmliZXJzIFJlbW92ZWQgUmVtb3ZlRGlhY3JpdGljcyBSZW1vdmVJbnB1dFN0cmVhbU1ldGhvZCBSZW1vdmVPdXRwdXRTdHJlYW1NZXRob2QgUmVtb3ZlUHJvcGVydHkgUmVtb3ZlU2NoZWR1bGVkVGFzayBSZW1vdmVVc2VycyBSZW5hbWVEaXJlY3RvcnkgUmVuYW1lRmlsZSBSZW5kZXJBbGwgUmVuZGVyaW5nT3B0aW9ucyBSZW5ld2FsUHJvY2VzcyBSZW5rb0NoYXJ0IFJlcGFpck1lc2ggUmVwZWF0ZWQgUmVwZWF0ZWROdWxsIFJlcGVhdGVkU3RyaW5nIFJlcGVhdGVkVGltaW5nIFJlcGVhdGluZ0VsZW1lbnQgUmVwbGFjZSBSZXBsYWNlQWxsIFJlcGxhY2VIZWxkUGFydCBSZXBsYWNlSW1hZ2VWYWx1ZSBSZXBsYWNlTGlzdCBSZXBsYWNlUGFydCBSZXBsYWNlUGl4ZWxWYWx1ZSBSZXBsYWNlUmVwZWF0ZWQgUmVwbGljYXRlTGF5ZXIgUmVxdWlyZWRQaHlzaWNhbFF1YW50aXRpZXMgUmVzYW1wbGluZyBSZXNhbXBsaW5nQWxnb3JpdGhtRGF0YSBSZXNhbXBsaW5nTWV0aG9kIFJlc2NhbGUgUmVzY2FsaW5nVHJhbnNmb3JtIFJlc2V0RGlyZWN0b3J5IFJlc2V0TWVudXNQYWNrZXQgUmVzZXRTY2hlZHVsZWRUYXNrIFJlc2hhcGVMYXllciBSZXNpZHVlIFJlc2l6ZUxheWVyIFJlc29sdmUgUmVzb3VyY2VBY3F1aXJlIFJlc291cmNlRGF0YSBSZXNvdXJjZUZ1bmN0aW9uIFJlc291cmNlT2JqZWN0IFJlc291cmNlUmVnaXN0ZXIgUmVzb3VyY2VSZW1vdmUgUmVzb3VyY2VTZWFyY2ggUmVzb3VyY2VTdWJtaXNzaW9uT2JqZWN0IFJlc291cmNlU3VibWl0IFJlc291cmNlU3lzdGVtQmFzZSBSZXNvdXJjZVVwZGF0ZSBSZXNwb25zZUZvcm0gUmVzdCBSZXN0YXJ0SW50ZXJ2YWwgUmVzdHJpY3RlZCBSZXN1bHRhbnQgUmVzdW1lUGFja2V0IFJldHVybiBSZXR1cm5FbnRlcnNJbnB1dCBSZXR1cm5FeHByZXNzaW9uUGFja2V0IFJldHVybklucHV0Rm9ybVBhY2tldCBSZXR1cm5QYWNrZXQgUmV0dXJuUmVjZWlwdEZ1bmN0aW9uIFJldHVyblRleHRQYWNrZXQgUmV2ZXJzZSBSZXZlcnNlQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldCBSZXZlcnNlRWxlbWVudCBSZXZlcnNlRXF1aWxpYnJpdW0gUmV2ZXJzZUdyYXBoIFJldmVyc2VTb3J0IFJldmVyc2VTb3J0QnkgUmV2ZXJzZVVwRXF1aWxpYnJpdW0gUmV2b2x1dGlvbkF4aXMgUmV2b2x1dGlvblBsb3QzRCBSR0JDb2xvciBSaWNjYXRpU29sdmUgUmljZURpc3RyaWJ1dGlvbiBSaWRnZUZpbHRlciBSaWVtYW5uUiBSaWVtYW5uU2llZ2VsVGhldGEgUmllbWFublNpZWdlbFogUmllbWFublhpIFJpZmZsZSBSaWdodCBSaWdodEFycm93IFJpZ2h0QXJyb3dCYXIgUmlnaHRBcnJvd0xlZnRBcnJvdyBSaWdodENvbXBvc2l0aW9uIFJpZ2h0Q29zZXRSZXByZXNlbnRhdGl2ZSBSaWdodERvd25UZWVWZWN0b3IgUmlnaHREb3duVmVjdG9yIFJpZ2h0RG93blZlY3RvckJhciBSaWdodFRlZSBSaWdodFRlZUFycm93IFJpZ2h0VGVlVmVjdG9yIFJpZ2h0VHJpYW5nbGUgUmlnaHRUcmlhbmdsZUJhciBSaWdodFRyaWFuZ2xlRXF1YWwgUmlnaHRVcERvd25WZWN0b3IgUmlnaHRVcFRlZVZlY3RvciBSaWdodFVwVmVjdG9yIFJpZ2h0VXBWZWN0b3JCYXIgUmlnaHRWZWN0b3IgUmlnaHRWZWN0b3JCYXIgUmlza0FjaGlldmVtZW50SW1wb3J0YW5jZSBSaXNrUmVkdWN0aW9uSW1wb3J0YW5jZSBSb2dlcnNUYW5pbW90b0Rpc3NpbWlsYXJpdHkgUm9sbFBpdGNoWWF3QW5nbGVzIFJvbGxQaXRjaFlhd01hdHJpeCBSb21hbk51bWVyYWwgUm9vdCBSb290QXBwcm94aW1hbnQgUm9vdEludGVydmFscyBSb290TG9jdXNQbG90IFJvb3RNZWFuU3F1YXJlIFJvb3RPZlVuaXR5USBSb290UmVkdWNlIFJvb3RzIFJvb3RTdW0gUm90YXRlIFJvdGF0ZUxhYmVsIFJvdGF0ZUxlZnQgUm90YXRlUmlnaHQgUm90YXRpb25BY3Rpb24gUm90YXRpb25Cb3ggUm90YXRpb25Cb3hPcHRpb25zIFJvdGF0aW9uTWF0cml4IFJvdGF0aW9uVHJhbnNmb3JtIFJvdW5kIFJvdW5kSW1wbGllcyBSb3VuZGluZ1JhZGl1cyBSb3cgUm93QWxpZ25tZW50cyBSb3dCYWNrZ3JvdW5kcyBSb3dCb3ggUm93SGVpZ2h0cyBSb3dMaW5lcyBSb3dNaW5IZWlnaHQgUm93UmVkdWNlIFJvd3NFcXVhbCBSb3dTcGFjaW5ncyBSU29sdmUgUlNvbHZlVmFsdWUgUnVkaW5TaGFwaXJvIFJ1ZHZhbGlzR3JvdXBSdSBSdWxlIFJ1bGVDb25kaXRpb24gUnVsZURlbGF5ZWQgUnVsZUZvcm0gUnVsZVBsb3QgUnVsZXJVbml0cyBSdW4gUnVuUHJvY2VzcyBSdW5TY2hlZHVsZWRUYXNrIFJ1blRocm91Z2ggUnVudGltZUF0dHJpYnV0ZXMgUnVudGltZU9wdGlvbnMgUnVzc2VsbFJhb0Rpc3NpbWlsYXJpdHknICtcbiAgICAgICdTYW1lUSBTYW1lVGVzdCBTYW1wbGVkRW50aXR5Q2xhc3MgU2FtcGxlRGVwdGggU2FtcGxlZFNvdW5kRnVuY3Rpb24gU2FtcGxlZFNvdW5kTGlzdCBTYW1wbGVSYXRlIFNhbXBsaW5nUGVyaW9kIFNBUklNQVByb2Nlc3MgU0FSTUFQcm9jZXNzIFNBU1RyaWFuZ2xlIFNhdGVsbGl0ZURhdGEgU2F0aXNmaWFiaWxpdHlDb3VudCBTYXRpc2ZpYWJpbGl0eUluc3RhbmNlcyBTYXRpc2ZpYWJsZVEgU2F0dXJkYXkgU2F2ZSBTYXZlYWJsZSBTYXZlQXV0b0RlbGV0ZSBTYXZlQ29ubmVjdGlvbiBTYXZlRGVmaW5pdGlvbnMgU2F2aXR6a3lHb2xheU1hdHJpeCBTYXd0b290aFdhdmUgU2NhbGUgU2NhbGVkIFNjYWxlRGl2aXNpb25zIFNjYWxlZE1vdXNlUG9zaXRpb24gU2NhbGVPcmlnaW4gU2NhbGVQYWRkaW5nIFNjYWxlUmFuZ2VzIFNjYWxlUmFuZ2VTdHlsZSBTY2FsaW5nRnVuY3Rpb25zIFNjYWxpbmdNYXRyaXggU2NhbGluZ1RyYW5zZm9ybSBTY2FuIFNjaGVkdWxlZFRhc2sgU2NoZWR1bGVkVGFza0FjdGl2ZVEgU2NoZWR1bGVkVGFza0luZm9ybWF0aW9uIFNjaGVkdWxlZFRhc2tJbmZvcm1hdGlvbkRhdGEgU2NoZWR1bGVkVGFza09iamVjdCBTY2hlZHVsZWRUYXNrcyBTY2h1ckRlY29tcG9zaXRpb24gU2NpZW50aWZpY0Zvcm0gU2NpZW50aWZpY05vdGF0aW9uVGhyZXNob2xkIFNjb3JlckdpIFNjb3JlckdpUHJpbWUgU2NvcmVySGkgU2NvcmVySGlQcmltZSBTY3JlZW5SZWN0YW5nbGUgU2NyZWVuU3R5bGVFbnZpcm9ubWVudCBTY3JpcHRCYXNlbGluZVNoaWZ0cyBTY3JpcHRGb3JtIFNjcmlwdExldmVsIFNjcmlwdE1pblNpemUgU2NyaXB0UnVsZXMgU2NyaXB0U2l6ZU11bHRpcGxpZXJzIFNjcm9sbGJhcnMgU2Nyb2xsaW5nT3B0aW9ucyBTY3JvbGxQb3NpdGlvbiBTZWFyY2hBZGp1c3RtZW50IFNlYXJjaEluZGV4T2JqZWN0IFNlYXJjaEluZGljZXMgU2VhcmNoUXVlcnlTdHJpbmcgU2VhcmNoUmVzdWx0T2JqZWN0IFNlYyBTZWNoIFNlY2hEaXN0cmlidXRpb24gU2Vjb25kT3JkZXJDb25lT3B0aW1pemF0aW9uIFNlY3Rpb25Hcm91cGluZyBTZWN0b3JDaGFydCBTZWN0b3JDaGFydDNEIFNlY3Rvck9yaWdpbiBTZWN0b3JTcGFjaW5nIFNlY3VyZWRBdXRoZW50aWNhdGlvbktleSBTZWN1cmVkQXV0aGVudGljYXRpb25LZXlzIFNlZWRSYW5kb20gU2VsZWN0IFNlbGVjdGFibGUgU2VsZWN0Q29tcG9uZW50cyBTZWxlY3RlZENlbGxzIFNlbGVjdGVkTm90ZWJvb2sgU2VsZWN0Rmlyc3QgU2VsZWN0aW9uIFNlbGVjdGlvbkFuaW1hdGUgU2VsZWN0aW9uQ2VsbCBTZWxlY3Rpb25DZWxsQ3JlYXRlQ2VsbCBTZWxlY3Rpb25DZWxsRGVmYXVsdFN0eWxlIFNlbGVjdGlvbkNlbGxQYXJlbnRTdHlsZSBTZWxlY3Rpb25DcmVhdGVDZWxsIFNlbGVjdGlvbkRlYnVnZ2VyVGFnIFNlbGVjdGlvbkR1cGxpY2F0ZUNlbGwgU2VsZWN0aW9uRXZhbHVhdGUgU2VsZWN0aW9uRXZhbHVhdGVDcmVhdGVDZWxsIFNlbGVjdGlvbk1vdmUgU2VsZWN0aW9uUGxhY2Vob2xkZXIgU2VsZWN0aW9uU2V0U3R5bGUgU2VsZWN0V2l0aENvbnRlbnRzIFNlbGZMb29wcyBTZWxmTG9vcFN0eWxlIFNlbWFudGljSW1wb3J0IFNlbWFudGljSW1wb3J0U3RyaW5nIFNlbWFudGljSW50ZXJwcmV0YXRpb24gU2VtaWFsZ2VicmFpY0NvbXBvbmVudEluc3RhbmNlcyBTZW1pZGVmaW5pdGVPcHRpbWl6YXRpb24gU2VuZE1haWwgU2VuZE1lc3NhZ2UgU2VxdWVuY2UgU2VxdWVuY2VBbGlnbm1lbnQgU2VxdWVuY2VBdHRlbnRpb25MYXllciBTZXF1ZW5jZUNhc2VzIFNlcXVlbmNlQ291bnQgU2VxdWVuY2VGb2xkIFNlcXVlbmNlRm9sZExpc3QgU2VxdWVuY2VGb3JtIFNlcXVlbmNlSG9sZCBTZXF1ZW5jZUxhc3RMYXllciBTZXF1ZW5jZU1vc3RMYXllciBTZXF1ZW5jZVBvc2l0aW9uIFNlcXVlbmNlUHJlZGljdCBTZXF1ZW5jZVByZWRpY3RvckZ1bmN0aW9uIFNlcXVlbmNlUmVwbGFjZSBTZXF1ZW5jZVJlc3RMYXllciBTZXF1ZW5jZVJldmVyc2VMYXllciBTZXF1ZW5jZVNwbGl0IFNlcmllcyBTZXJpZXNDb2VmZmljaWVudCBTZXJpZXNEYXRhIFNlcnZpY2VDb25uZWN0IFNlcnZpY2VEaXNjb25uZWN0IFNlcnZpY2VFeGVjdXRlIFNlcnZpY2VPYmplY3QgU2VydmljZVJlcXVlc3QgU2VydmljZVJlc3BvbnNlIFNlcnZpY2VTdWJtaXQgU2Vzc2lvblN1Ym1pdCBTZXNzaW9uVGltZSBTZXQgU2V0QWNjdXJhY3kgU2V0QWxwaGFDaGFubmVsIFNldEF0dHJpYnV0ZXMgU2V0YmFja3MgU2V0Qm94Rm9ybU5hbWVzUGFja2V0IFNldENsb3VkRGlyZWN0b3J5IFNldENvb2tpZXMgU2V0RGVsYXllZCBTZXREaXJlY3RvcnkgU2V0RW52aXJvbm1lbnQgU2V0RXZhbHVhdGlvbk5vdGVib29rIFNldEZpbGVEYXRlIFNldEZpbGVMb2FkaW5nQ29udGV4dCBTZXROb3RlYm9va1N0YXR1c0xpbmUgU2V0T3B0aW9ucyBTZXRPcHRpb25zUGFja2V0IFNldFBlcm1pc3Npb25zIFNldFByZWNpc2lvbiBTZXRQcm9wZXJ0eSBTZXRTZWN1cmVkQXV0aGVudGljYXRpb25LZXkgU2V0U2VsZWN0ZWROb3RlYm9vayBTZXRTaGFyZWRGdW5jdGlvbiBTZXRTaGFyZWRWYXJpYWJsZSBTZXRTcGVlY2hQYXJhbWV0ZXJzUGFja2V0IFNldFN0cmVhbVBvc2l0aW9uIFNldFN5c3RlbU1vZGVsIFNldFN5c3RlbU9wdGlvbnMgU2V0dGVyIFNldHRlckJhciBTZXR0ZXJCb3ggU2V0dGVyQm94T3B0aW9ucyBTZXR0aW5nIFNldFVzZXJzIFNldFZhbHVlIFNoYWRpbmcgU2hhbGxvdyBTaGFubm9uV2F2ZWxldCBTaGFwaXJvV2lsa1Rlc3QgU2hhcmUgU2hhcmluZ0xpc3QgU2hhcnBlbiBTaGVhcmluZ01hdHJpeCBTaGVhcmluZ1RyYW5zZm9ybSBTaGVsbFJlZ2lvbiBTaGVuQ2FzdGFuTWF0cml4IFNoaWZ0ZWRHb21wZXJ0ekRpc3RyaWJ1dGlvbiBTaGlmdFJlZ2lzdGVyU2VxdWVuY2UgU2hvcnQgU2hvcnREb3duQXJyb3cgU2hvcnRlc3QgU2hvcnRlc3RNYXRjaCBTaG9ydGVzdFBhdGhGdW5jdGlvbiBTaG9ydExlZnRBcnJvdyBTaG9ydFJpZ2h0QXJyb3cgU2hvcnRUaW1lRm91cmllciBTaG9ydFRpbWVGb3VyaWVyRGF0YSBTaG9ydFVwQXJyb3cgU2hvdyBTaG93QXV0b0NvbnZlcnQgU2hvd0F1dG9TcGVsbENoZWNrIFNob3dBdXRvU3R5bGVzIFNob3dDZWxsQnJhY2tldCBTaG93Q2VsbExhYmVsIFNob3dDZWxsVGFncyBTaG93Q2xvc2VkQ2VsbEFyZWEgU2hvd0NvZGVBc3Npc3QgU2hvd0NvbnRlbnRzIFNob3dDb250cm9scyBTaG93Q3Vyc29yVHJhY2tlciBTaG93R3JvdXBPcGVuQ2xvc2VJY29uIFNob3dHcm91cE9wZW5lciBTaG93SW52aXNpYmxlQ2hhcmFjdGVycyBTaG93UGFnZUJyZWFrcyBTaG93UHJlZGljdGl2ZUludGVyZmFjZSBTaG93U2VsZWN0aW9uIFNob3dTaG9ydEJveEZvcm0gU2hvd1NwZWNpYWxDaGFyYWN0ZXJzIFNob3dTdHJpbmdDaGFyYWN0ZXJzIFNob3dTeW50YXhTdHlsZXMgU2hyaW5raW5nRGVsYXkgU2hyaW5rV3JhcEJvdW5kaW5nQm94IFNpZGVyZWFsVGltZSBTaWVnZWxUaGV0YSBTaWVnZWxUdWtleVRlc3QgU2llcnBpbnNraUN1cnZlIFNpZXJwaW5za2lNZXNoIFNpZ24gU2lnbmF0dXJlIFNpZ25lZFJhbmtUZXN0IFNpZ25lZFJlZ2lvbkRpc3RhbmNlIFNpZ25pZmljYW5jZUxldmVsIFNpZ25QYWRkaW5nIFNpZ25UZXN0IFNpbWlsYXJpdHlSdWxlcyBTaW1wbGVHcmFwaCBTaW1wbGVHcmFwaFEgU2ltcGxlUG9seWdvblEgU2ltcGxlUG9seWhlZHJvblEgU2ltcGxleCBTaW1wbGlmeSBTaW4gU2luYyBTaW5naE1hZGRhbGFEaXN0cmlidXRpb24gU2luZ2xlRXZhbHVhdGlvbiBTaW5nbGVMZXR0ZXJJdGFsaWNzIFNpbmdsZUxldHRlclN0eWxlIFNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIFNpbmd1bGFyVmFsdWVMaXN0IFNpbmd1bGFyVmFsdWVQbG90IFNpbmd1bGFyVmFsdWVzIFNpbmggU2luaEludGVncmFsIFNpbkludGVncmFsIFNpeEpTeW1ib2wgU2tlbGV0b24gU2tlbGV0b25UcmFuc2Zvcm0gU2tlbGxhbURpc3RyaWJ1dGlvbiBTa2V3bmVzcyBTa2V3Tm9ybWFsRGlzdHJpYnV0aW9uIFNraW5TdHlsZSBTa2lwIFNsaWNlQ29udG91clBsb3QzRCBTbGljZURlbnNpdHlQbG90M0QgU2xpY2VEaXN0cmlidXRpb24gU2xpY2VWZWN0b3JQbG90M0QgU2xpZGVyIFNsaWRlcjJEIFNsaWRlcjJEQm94IFNsaWRlcjJEQm94T3B0aW9ucyBTbGlkZXJCb3ggU2xpZGVyQm94T3B0aW9ucyBTbGlkZVZpZXcgU2xvdCBTbG90U2VxdWVuY2UgU21hbGwgU21hbGxDaXJjbGUgU21hbGxlciBTbWl0aERlY29tcG9zaXRpb24gU21pdGhEZWxheUNvbXBlbnNhdG9yIFNtaXRoV2F0ZXJtYW5TaW1pbGFyaXR5IFNtb290aERlbnNpdHlIaXN0b2dyYW0gU21vb3RoSGlzdG9ncmFtIFNtb290aEhpc3RvZ3JhbTNEIFNtb290aEtlcm5lbERpc3RyaWJ1dGlvbiBTbkRpc3BlcnNpb24gU25pcHBldCBTbnViUG9seWhlZHJvbiBTb2NpYWxNZWRpYURhdGEgU29ja2V0IFNvY2tldENvbm5lY3QgU29ja2V0TGlzdGVuIFNvY2tldExpc3RlbmVyIFNvY2tldE9iamVjdCBTb2NrZXRPcGVuIFNvY2tldFJlYWRNZXNzYWdlIFNvY2tldFJlYWR5USBTb2NrZXRzIFNvY2tldFdhaXRBbGwgU29ja2V0V2FpdE5leHQgU29mdG1heExheWVyIFNva2FsU25lYXRoRGlzc2ltaWxhcml0eSBTb2xhckVjbGlwc2UgU29sYXJTeXN0ZW1GZWF0dXJlRGF0YSBTb2xpZEFuZ2xlIFNvbGlkRGF0YSBTb2xpZFJlZ2lvblEgU29sdmUgU29sdmVBbHdheXMgU29sdmVEZWxheWVkIFNvcnQgU29ydEJ5IFNvcnRlZEJ5IFNvcnRlZEVudGl0eUNsYXNzIFNvdW5kIFNvdW5kQW5kR3JhcGhpY3MgU291bmROb3RlIFNvdW5kVm9sdW1lIFNvdXJjZUxpbmsgU293IFNwYWNlIFNwYWNlQ3VydmVEYXRhIFNwYWNlRm9ybSBTcGFjZXIgU3BhY2luZ3MgU3BhbiBTcGFuQWRqdXN0bWVudHMgU3BhbkNoYXJhY3RlclJvdW5kaW5nIFNwYW5Gcm9tQWJvdmUgU3BhbkZyb21Cb3RoIFNwYW5Gcm9tTGVmdCBTcGFuTGluZVRoaWNrbmVzcyBTcGFuTWF4U2l6ZSBTcGFuTWluU2l6ZSBTcGFubmluZ0NoYXJhY3RlcnMgU3BhblN5bW1ldHJpYyBTcGFyc2VBcnJheSBTcGF0aWFsR3JhcGhEaXN0cmlidXRpb24gU3BhdGlhbE1lZGlhbiBTcGF0aWFsVHJhbnNmb3JtYXRpb25MYXllciBTcGVhayBTcGVha1RleHRQYWNrZXQgU3BlYXJtYW5SYW5rVGVzdCBTcGVhcm1hblJobyBTcGVjaWVzRGF0YSBTcGVjaWZpY2l0eUdvYWwgU3BlY3RyYWxMaW5lRGF0YSBTcGVjdHJvZ3JhbSBTcGVjdHJvZ3JhbUFycmF5IFNwZWN1bGFyaXR5IFNwZWVjaFJlY29nbml6ZSBTcGVlY2hTeW50aGVzaXplIFNwZWxsaW5nQ29ycmVjdGlvbiBTcGVsbGluZ0NvcnJlY3Rpb25MaXN0IFNwZWxsaW5nRGljdGlvbmFyaWVzIFNwZWxsaW5nRGljdGlvbmFyaWVzUGF0aCBTcGVsbGluZ09wdGlvbnMgU3BlbGxpbmdTdWdnZXN0aW9uc1BhY2tldCBTcGhlcmUgU3BoZXJlQm94IFNwaGVyZVBvaW50cyBTcGhlcmljYWxCZXNzZWxKIFNwaGVyaWNhbEJlc3NlbFkgU3BoZXJpY2FsSGFua2VsSDEgU3BoZXJpY2FsSGFua2VsSDIgU3BoZXJpY2FsSGFybW9uaWNZIFNwaGVyaWNhbFBsb3QzRCBTcGhlcmljYWxSZWdpb24gU3BoZXJpY2FsU2hlbGwgU3BoZXJvaWRhbEVpZ2VudmFsdWUgU3BoZXJvaWRhbEpvaW5pbmdGYWN0b3IgU3BoZXJvaWRhbFBTIFNwaGVyb2lkYWxQU1ByaW1lIFNwaGVyb2lkYWxRUyBTcGhlcm9pZGFsUVNQcmltZSBTcGhlcm9pZGFsUmFkaWFsRmFjdG9yIFNwaGVyb2lkYWxTMSBTcGhlcm9pZGFsUzFQcmltZSBTcGhlcm9pZGFsUzIgU3BoZXJvaWRhbFMyUHJpbWUgU3BsaWNlIFNwbGljZWREaXN0cmlidXRpb24gU3BsaW5lQ2xvc2VkIFNwbGluZURlZ3JlZSBTcGxpbmVLbm90cyBTcGxpbmVXZWlnaHRzIFNwbGl0IFNwbGl0QnkgU3Bva2VuU3RyaW5nIFNxcnQgU3FydEJveCBTcXJ0Qm94T3B0aW9ucyBTcXVhcmUgU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIFNxdWFyZUZyZWVRIFNxdWFyZUludGVyc2VjdGlvbiBTcXVhcmVNYXRyaXhRIFNxdWFyZVJlcGVhdGluZ0VsZW1lbnQgU3F1YXJlc1IgU3F1YXJlU3Vic2V0IFNxdWFyZVN1YnNldEVxdWFsIFNxdWFyZVN1cGVyc2V0IFNxdWFyZVN1cGVyc2V0RXF1YWwgU3F1YXJlVW5pb24gU3F1YXJlV2F2ZSBTU1NUcmlhbmdsZSBTdGFiaWxpdHlNYXJnaW5zIFN0YWJpbGl0eU1hcmdpbnNTdHlsZSBTdGFibGVEaXN0cmlidXRpb24gU3RhY2sgU3RhY2tCZWdpbiBTdGFja0NvbXBsZXRlIFN0YWNrZWREYXRlTGlzdFBsb3QgU3RhY2tlZExpc3RQbG90IFN0YWNrSW5oaWJpdCBTdGFkaXVtU2hhcGUgU3RhbmRhcmRBdG1vc3BoZXJlRGF0YSBTdGFuZGFyZERldmlhdGlvbiBTdGFuZGFyZERldmlhdGlvbkZpbHRlciBTdGFuZGFyZEZvcm0gU3RhbmRhcmRpemUgU3RhbmRhcmRpemVkIFN0YW5kYXJkT2NlYW5EYXRhIFN0YW5kYnlEaXN0cmlidXRpb24gU3RhciBTdGFyQ2x1c3RlckRhdGEgU3RhckRhdGEgU3RhckdyYXBoIFN0YXJ0QXN5bmNocm9ub3VzVGFzayBTdGFydEV4dGVybmFsU2Vzc2lvbiBTdGFydGluZ1N0ZXBTaXplIFN0YXJ0T2ZMaW5lIFN0YXJ0T2ZTdHJpbmcgU3RhcnRQcm9jZXNzIFN0YXJ0U2NoZWR1bGVkVGFzayBTdGFydHVwU291bmQgU3RhcnRXZWJTZXNzaW9uIFN0YXRlRGltZW5zaW9ucyBTdGF0ZUZlZWRiYWNrR2FpbnMgU3RhdGVPdXRwdXRFc3RpbWF0b3IgU3RhdGVSZXNwb25zZSBTdGF0ZVNwYWNlTW9kZWwgU3RhdGVTcGFjZVJlYWxpemF0aW9uIFN0YXRlU3BhY2VUcmFuc2Zvcm0gU3RhdGVUcmFuc2Zvcm1hdGlvbkxpbmVhcml6ZSBTdGF0aW9uYXJ5RGlzdHJpYnV0aW9uIFN0YXRpb25hcnlXYXZlbGV0UGFja2V0VHJhbnNmb3JtIFN0YXRpb25hcnlXYXZlbGV0VHJhbnNmb3JtIFN0YXR1c0FyZWEgU3RhdHVzQ2VudHJhbGl0eSBTdGVwTW9uaXRvciBTdGVyZW9jaGVtaXN0cnlFbGVtZW50cyBTdGllbHRqZXNHYW1tYSBTdGlybGluZ1MxIFN0aXJsaW5nUzIgU3RvcEFzeW5jaHJvbm91c1Rhc2sgU3RvcHBpbmdQb3dlckRhdGEgU3RvcFNjaGVkdWxlZFRhc2sgU3RyYXRhVmFyaWFibGVzIFN0cmF0b25vdmljaFByb2Nlc3MgU3RyZWFtQ29sb3JGdW5jdGlvbiBTdHJlYW1Db2xvckZ1bmN0aW9uU2NhbGluZyBTdHJlYW1EZW5zaXR5UGxvdCBTdHJlYW1NYXJrZXJzIFN0cmVhbVBsb3QgU3RyZWFtUG9pbnRzIFN0cmVhbVBvc2l0aW9uIFN0cmVhbXMgU3RyZWFtU2NhbGUgU3RyZWFtU3R5bGUgU3RyaW5nIFN0cmluZ0JyZWFrIFN0cmluZ0J5dGVDb3VudCBTdHJpbmdDYXNlcyBTdHJpbmdDb250YWluc1EgU3RyaW5nQ291bnQgU3RyaW5nRGVsZXRlIFN0cmluZ0Ryb3AgU3RyaW5nRW5kc1EgU3RyaW5nRXhwcmVzc2lvbiBTdHJpbmdFeHRyYWN0IFN0cmluZ0Zvcm0gU3RyaW5nRm9ybWF0IFN0cmluZ0ZyZWVRIFN0cmluZ0luc2VydCBTdHJpbmdKb2luIFN0cmluZ0xlbmd0aCBTdHJpbmdNYXRjaFEgU3RyaW5nUGFkTGVmdCBTdHJpbmdQYWRSaWdodCBTdHJpbmdQYXJ0IFN0cmluZ1BhcnRpdGlvbiBTdHJpbmdQb3NpdGlvbiBTdHJpbmdRIFN0cmluZ1JlcGVhdCBTdHJpbmdSZXBsYWNlIFN0cmluZ1JlcGxhY2VMaXN0IFN0cmluZ1JlcGxhY2VQYXJ0IFN0cmluZ1JldmVyc2UgU3RyaW5nUmlmZmxlIFN0cmluZ1JvdGF0ZUxlZnQgU3RyaW5nUm90YXRlUmlnaHQgU3RyaW5nU2tlbGV0b24gU3RyaW5nU3BsaXQgU3RyaW5nU3RhcnRzUSBTdHJpbmdUYWtlIFN0cmluZ1RlbXBsYXRlIFN0cmluZ1RvQnl0ZUFycmF5IFN0cmluZ1RvU3RyZWFtIFN0cmluZ1RyaW0gU3RyaXBCb3hlcyBTdHJpcE9uSW5wdXQgU3RyaXBXcmFwcGVyQm94ZXMgU3Ryb2tlRm9ybSBTdHJ1Y3R1cmFsSW1wb3J0YW5jZSBTdHJ1Y3R1cmVkQXJyYXkgU3RydWN0dXJlZFNlbGVjdGlvbiBTdHJ1dmVIIFN0cnV2ZUwgU3R1YiBTdHVkZW50VERpc3RyaWJ1dGlvbiBTdHlsZSBTdHlsZUJveCBTdHlsZUJveEF1dG9EZWxldGUgU3R5bGVEYXRhIFN0eWxlRGVmaW5pdGlvbnMgU3R5bGVGb3JtIFN0eWxlSGludHMgU3R5bGVLZXlNYXBwaW5nIFN0eWxlTWVudUxpc3RpbmcgU3R5bGVOYW1lRGlhbG9nU2V0dGluZ3MgU3R5bGVOYW1lcyBTdHlsZVByaW50IFN0eWxlU2hlZXRQYXRoIFN1YmRpdmlkZSBTdWJmYWN0b3JpYWwgU3ViZ3JhcGggU3ViTWludXMgU3ViUGx1cyBTdWJyZXN1bHRhbnRQb2x5bm9taWFsUmVtYWluZGVycyBTdWJyZXN1bHRhbnRQb2x5bm9taWFscyBTdWJyZXN1bHRhbnRzIFN1YnNjcmlwdCBTdWJzY3JpcHRCb3ggU3Vic2NyaXB0Qm94T3B0aW9ucyBTdWJzY3JpcHRlZCBTdWJzZXF1ZW5jZXMgU3Vic2V0IFN1YnNldEVxdWFsIFN1YnNldE1hcCBTdWJzZXRRIFN1YnNldHMgU3ViU3RhciBTdWJzdGl0dXRpb25TeXN0ZW0gU3Vic3VwZXJzY3JpcHQgU3Vic3VwZXJzY3JpcHRCb3ggU3Vic3VwZXJzY3JpcHRCb3hPcHRpb25zIFN1YnRyYWN0IFN1YnRyYWN0RnJvbSBTdWJ0cmFjdFNpZGVzIFN1YlZhbHVlcyBTdWNjZWVkcyBTdWNjZWVkc0VxdWFsIFN1Y2NlZWRzU2xhbnRFcXVhbCBTdWNjZWVkc1RpbGRlIFN1Y2Nlc3MgU3VjaFRoYXQgU3VtIFN1bUNvbnZlcmdlbmNlIFN1bW1hdGlvbkxheWVyIFN1bmRheSBTdW5Qb3NpdGlvbiBTdW5yaXNlIFN1bnNldCBTdXBlckRhZ2dlciBTdXBlck1pbnVzIFN1cGVybm92YURhdGEgU3VwZXJQbHVzIFN1cGVyc2NyaXB0IFN1cGVyc2NyaXB0Qm94IFN1cGVyc2NyaXB0Qm94T3B0aW9ucyBTdXBlcnNldCBTdXBlcnNldEVxdWFsIFN1cGVyU3RhciBTdXJkIFN1cmRGb3JtIFN1cmZhY2VBcmVhIFN1cmZhY2VDb2xvciBTdXJmYWNlRGF0YSBTdXJmYWNlR3JhcGhpY3MgU3Vydml2YWxEaXN0cmlidXRpb24gU3Vydml2YWxGdW5jdGlvbiBTdXJ2aXZhbE1vZGVsIFN1cnZpdmFsTW9kZWxGaXQgU3VzcGVuZFBhY2tldCBTdXp1a2lEaXN0cmlidXRpb24gU3V6dWtpR3JvdXBTdXogU3dhdGNoTGVnZW5kIFN3aXRjaCBTeW1ib2wgU3ltYm9sTmFtZSBTeW1sZXRXYXZlbGV0IFN5bW1ldHJpYyBTeW1tZXRyaWNHcm91cCBTeW1tZXRyaWNLZXkgU3ltbWV0cmljTWF0cml4USBTeW1tZXRyaWNQb2x5bm9taWFsIFN5bW1ldHJpY1JlZHVjdGlvbiBTeW1tZXRyaXplIFN5bW1ldHJpemVkQXJyYXkgU3ltbWV0cml6ZWRBcnJheVJ1bGVzIFN5bW1ldHJpemVkRGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZEluZGVwZW5kZW50Q29tcG9uZW50cyBTeW1tZXRyaXplZFJlcGxhY2VQYXJ0IFN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24gU3luY2hyb25vdXNVcGRhdGluZyBTeW5vbnltcyBTeW50YXggU3ludGF4Rm9ybSBTeW50YXhJbmZvcm1hdGlvbiBTeW50YXhMZW5ndGggU3ludGF4UGFja2V0IFN5bnRheFEgU3ludGhlc2l6ZU1pc3NpbmdWYWx1ZXMgU3lzdGVtRGlhbG9nSW5wdXQgU3lzdGVtRXhjZXB0aW9uIFN5c3RlbUdldCBTeXN0ZW1IZWxwUGF0aCBTeXN0ZW1JbmZvcm1hdGlvbiBTeXN0ZW1JbmZvcm1hdGlvbkRhdGEgU3lzdGVtSW5zdGFsbCBTeXN0ZW1Nb2RlbCBTeXN0ZW1Nb2RlbGVyIFN5c3RlbU1vZGVsRXhhbXBsZXMgU3lzdGVtTW9kZWxMaW5lYXJpemUgU3lzdGVtTW9kZWxQYXJhbWV0cmljU2ltdWxhdGUgU3lzdGVtTW9kZWxQbG90IFN5c3RlbU1vZGVsUHJvZ3Jlc3NSZXBvcnRpbmcgU3lzdGVtTW9kZWxSZWxpYWJpbGl0eSBTeXN0ZW1Nb2RlbHMgU3lzdGVtTW9kZWxTaW11bGF0ZSBTeXN0ZW1Nb2RlbFNpbXVsYXRlU2Vuc2l0aXZpdHkgU3lzdGVtTW9kZWxTaW11bGF0aW9uRGF0YSBTeXN0ZW1PcGVuIFN5c3RlbU9wdGlvbnMgU3lzdGVtUHJvY2Vzc0RhdGEgU3lzdGVtUHJvY2Vzc2VzIFN5c3RlbXNDb25uZWN0aW9uc01vZGVsIFN5c3RlbXNNb2RlbERlbGF5IFN5c3RlbXNNb2RlbERlbGF5QXBwcm94aW1hdGUgU3lzdGVtc01vZGVsRGVsZXRlIFN5c3RlbXNNb2RlbERpbWVuc2lvbnMgU3lzdGVtc01vZGVsRXh0cmFjdCBTeXN0ZW1zTW9kZWxGZWVkYmFja0Nvbm5lY3QgU3lzdGVtc01vZGVsTGFiZWxzIFN5c3RlbXNNb2RlbExpbmVhcml0eSBTeXN0ZW1zTW9kZWxNZXJnZSBTeXN0ZW1zTW9kZWxPcmRlciBTeXN0ZW1zTW9kZWxQYXJhbGxlbENvbm5lY3QgU3lzdGVtc01vZGVsU2VyaWVzQ29ubmVjdCBTeXN0ZW1zTW9kZWxTdGF0ZUZlZWRiYWNrQ29ubmVjdCBTeXN0ZW1zTW9kZWxWZWN0b3JSZWxhdGl2ZU9yZGVycyBTeXN0ZW1TdHViIFN5c3RlbVRlc3QnICtcbiAgICAgICdUYWIgVGFiRmlsbGluZyBUYWJsZSBUYWJsZUFsaWdubWVudHMgVGFibGVEZXB0aCBUYWJsZURpcmVjdGlvbnMgVGFibGVGb3JtIFRhYmxlSGVhZGluZ3MgVGFibGVTcGFjaW5nIFRhYmxlVmlldyBUYWJsZVZpZXdCb3ggVGFibGVWaWV3Qm94QmFja2dyb3VuZCBUYWJsZVZpZXdCb3hPcHRpb25zIFRhYlNwYWNpbmdzIFRhYlZpZXcgVGFiVmlld0JveCBUYWJWaWV3Qm94T3B0aW9ucyBUYWdCb3ggVGFnQm94Tm90ZSBUYWdCb3hPcHRpb25zIFRhZ2dpbmdSdWxlcyBUYWdTZXQgVGFnU2V0RGVsYXllZCBUYWdTdHlsZSBUYWdVbnNldCBUYWtlIFRha2VEcm9wIFRha2VMYXJnZXN0IFRha2VMYXJnZXN0QnkgVGFrZUxpc3QgVGFrZVNtYWxsZXN0IFRha2VTbWFsbGVzdEJ5IFRha2VXaGlsZSBUYWxseSBUYW4gVGFuaCBUYXJnZXREZXZpY2UgVGFyZ2V0RnVuY3Rpb25zIFRhcmdldFN5c3RlbSBUYXJnZXRVbml0cyBUYXNrQWJvcnQgVGFza0V4ZWN1dGUgVGFza09iamVjdCBUYXNrUmVtb3ZlIFRhc2tSZXN1bWUgVGFza3MgVGFza1N1c3BlbmQgVGFza1dhaXQgVGF1dG9sb2d5USBUZWxlZ3JhcGhQcm9jZXNzIFRlbXBsYXRlQXBwbHkgVGVtcGxhdGVBcmdCb3ggVGVtcGxhdGVCb3ggVGVtcGxhdGVCb3hPcHRpb25zIFRlbXBsYXRlRXZhbHVhdGUgVGVtcGxhdGVFeHByZXNzaW9uIFRlbXBsYXRlSWYgVGVtcGxhdGVPYmplY3QgVGVtcGxhdGVTZXF1ZW5jZSBUZW1wbGF0ZVNsb3QgVGVtcGxhdGVTbG90U2VxdWVuY2UgVGVtcGxhdGVVbmV2YWx1YXRlZCBUZW1wbGF0ZVZlcmJhdGltIFRlbXBsYXRlV2l0aCBUZW1wb3JhbERhdGEgVGVtcG9yYWxSZWd1bGFyaXR5IFRlbXBvcmFyeSBUZW1wb3JhcnlWYXJpYWJsZSBUZW5zb3JDb250cmFjdCBUZW5zb3JEaW1lbnNpb25zIFRlbnNvckV4cGFuZCBUZW5zb3JQcm9kdWN0IFRlbnNvclEgVGVuc29yUmFuayBUZW5zb3JSZWR1Y2UgVGVuc29yU3ltbWV0cnkgVGVuc29yVHJhbnNwb3NlIFRlbnNvcldlZGdlIFRlc3RJRCBUZXN0UmVwb3J0IFRlc3RSZXBvcnRPYmplY3QgVGVzdFJlc3VsdE9iamVjdCBUZXRyYWhlZHJvbiBUZXRyYWhlZHJvbkJveCBUZXRyYWhlZHJvbkJveE9wdGlvbnMgVGVYRm9ybSBUZVhTYXZlIFRleHQgVGV4dDNEQm94IFRleHQzREJveE9wdGlvbnMgVGV4dEFsaWdubWVudCBUZXh0QmFuZCBUZXh0Qm91bmRpbmdCb3ggVGV4dEJveCBUZXh0Q2FzZXMgVGV4dENlbGwgVGV4dENsaXBib2FyZFR5cGUgVGV4dENvbnRlbnRzIFRleHREYXRhIFRleHRFbGVtZW50IFRleHRGb3JtIFRleHRHcmlkIFRleHRKdXN0aWZpY2F0aW9uIFRleHRMaW5lIFRleHRQYWNrZXQgVGV4dFBhcmFncmFwaCBUZXh0UG9zaXRpb24gVGV4dFJlY29nbml6ZSBUZXh0U2VhcmNoIFRleHRTZWFyY2hSZXBvcnQgVGV4dFNlbnRlbmNlcyBUZXh0U3RyaW5nIFRleHRTdHJ1Y3R1cmUgVGV4dFN0eWxlIFRleHRUcmFuc2xhdGlvbiBUZXh0dXJlIFRleHR1cmVDb29yZGluYXRlRnVuY3Rpb24gVGV4dHVyZUNvb3JkaW5hdGVTY2FsaW5nIFRleHRXb3JkcyBUaGVyZWZvcmUgVGhlcm1vZHluYW1pY0RhdGEgVGhlcm1vbWV0ZXJHYXVnZSBUaGljayBUaGlja25lc3MgVGhpbiBUaGlubmluZyBUaGlzTGluayBUaG9tcHNvbkdyb3VwVGggVGhyZWFkIFRocmVhZGluZ0xheWVyIFRocmVlSlN5bWJvbCBUaHJlc2hvbGQgVGhyb3VnaCBUaHJvdyBUaHVlTW9yc2UgVGh1bWJuYWlsIFRodXJzZGF5IFRpY2tzIFRpY2tzU3R5bGUgVGlkZURhdGEgVGlsZGUgVGlsZGVFcXVhbCBUaWxkZUZ1bGxFcXVhbCBUaWxkZVRpbGRlIFRpbWVDb25zdHJhaW5lZCBUaW1lQ29uc3RyYWludCBUaW1lRGlyZWN0aW9uIFRpbWVGb3JtYXQgVGltZUdvYWwgVGltZWxpbmVQbG90IFRpbWVPYmplY3QgVGltZU9iamVjdFEgVGltZXMgVGltZXNCeSBUaW1lU2VyaWVzIFRpbWVTZXJpZXNBZ2dyZWdhdGUgVGltZVNlcmllc0ZvcmVjYXN0IFRpbWVTZXJpZXNJbnNlcnQgVGltZVNlcmllc0ludmVydGliaWxpdHkgVGltZVNlcmllc01hcCBUaW1lU2VyaWVzTWFwVGhyZWFkIFRpbWVTZXJpZXNNb2RlbCBUaW1lU2VyaWVzTW9kZWxGaXQgVGltZVNlcmllc1Jlc2FtcGxlIFRpbWVTZXJpZXNSZXNjYWxlIFRpbWVTZXJpZXNTaGlmdCBUaW1lU2VyaWVzVGhyZWFkIFRpbWVTZXJpZXNXaW5kb3cgVGltZVVzZWQgVGltZVZhbHVlIFRpbWVXYXJwaW5nQ29ycmVzcG9uZGVuY2UgVGltZVdhcnBpbmdEaXN0YW5jZSBUaW1lWm9uZSBUaW1lWm9uZUNvbnZlcnQgVGltZVpvbmVPZmZzZXQgVGltaW5nIFRpbnkgVGl0bGVHcm91cGluZyBUaXRzR3JvdXBUIFRvQm94ZXMgVG9DaGFyYWN0ZXJDb2RlIFRvQ29sb3IgVG9Db250aW51b3VzVGltZU1vZGVsIFRvRGF0ZSBUb2RheSBUb0Rpc2NyZXRlVGltZU1vZGVsIFRvRW50aXR5IFRvZXBsaXR6TWF0cml4IFRvRXhwcmVzc2lvbiBUb0ZpbGVOYW1lIFRvZ2V0aGVyIFRvZ2dsZSBUb2dnbGVGYWxzZSBUb2dnbGVyIFRvZ2dsZXJCYXIgVG9nZ2xlckJveCBUb2dnbGVyQm94T3B0aW9ucyBUb0hlbGRFeHByZXNzaW9uIFRvSW52ZXJ0aWJsZVRpbWVTZXJpZXMgVG9rZW5Xb3JkcyBUb2xlcmFuY2UgVG9Mb3dlckNhc2UgVG9tb3Jyb3cgVG9OdW1iZXJGaWVsZCBUb29CaWcgVG9vbHRpcCBUb29sdGlwQm94IFRvb2x0aXBCb3hPcHRpb25zIFRvb2x0aXBEZWxheSBUb29sdGlwU3R5bGUgVG9wIFRvcEhhdFRyYW5zZm9ybSBUb1BvbGFyQ29vcmRpbmF0ZXMgVG9wb2xvZ2ljYWxTb3J0IFRvUmFkaWNhbHMgVG9SdWxlcyBUb1NwaGVyaWNhbENvb3JkaW5hdGVzIFRvU3RyaW5nIFRvdGFsIFRvdGFsSGVpZ2h0IFRvdGFsTGF5ZXIgVG90YWxWYXJpYXRpb25GaWx0ZXIgVG90YWxXaWR0aCBUb3VjaFBvc2l0aW9uIFRvdWNoc2NyZWVuQXV0b1pvb20gVG91Y2hzY3JlZW5Db250cm9sUGxhY2VtZW50IFRvVXBwZXJDYXNlIFRyIFRyYWNlIFRyYWNlQWJvdmUgVHJhY2VBY3Rpb24gVHJhY2VCYWNrd2FyZCBUcmFjZURlcHRoIFRyYWNlRGlhbG9nIFRyYWNlRm9yd2FyZCBUcmFjZUludGVybmFsIFRyYWNlTGV2ZWwgVHJhY2VPZmYgVHJhY2VPbiBUcmFjZU9yaWdpbmFsIFRyYWNlUHJpbnQgVHJhY2VTY2FuIFRyYWNrZWRTeW1ib2xzIFRyYWNraW5nRnVuY3Rpb24gVHJhY3lXaWRvbURpc3RyaWJ1dGlvbiBUcmFkaW5nQ2hhcnQgVHJhZGl0aW9uYWxGb3JtIFRyYWRpdGlvbmFsRnVuY3Rpb25Ob3RhdGlvbiBUcmFkaXRpb25hbE5vdGF0aW9uIFRyYWRpdGlvbmFsT3JkZXIgVHJhaW5pbmdQcm9ncmVzc0NoZWNrcG9pbnRpbmcgVHJhaW5pbmdQcm9ncmVzc0Z1bmN0aW9uIFRyYWluaW5nUHJvZ3Jlc3NNZWFzdXJlbWVudHMgVHJhaW5pbmdQcm9ncmVzc1JlcG9ydGluZyBUcmFpbmluZ1N0b3BwaW5nQ3JpdGVyaW9uIFRyYW5zZmVyRnVuY3Rpb25DYW5jZWwgVHJhbnNmZXJGdW5jdGlvbkV4cGFuZCBUcmFuc2ZlckZ1bmN0aW9uRmFjdG9yIFRyYW5zZmVyRnVuY3Rpb25Nb2RlbCBUcmFuc2ZlckZ1bmN0aW9uUG9sZXMgVHJhbnNmZXJGdW5jdGlvblRyYW5zZm9ybSBUcmFuc2ZlckZ1bmN0aW9uWmVyb3MgVHJhbnNmb3JtYXRpb25DbGFzcyBUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9uIFRyYW5zZm9ybWF0aW9uRnVuY3Rpb25zIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRyYW5zZm9ybWVkRGlzdHJpYnV0aW9uIFRyYW5zZm9ybWVkRmllbGQgVHJhbnNmb3JtZWRQcm9jZXNzIFRyYW5zZm9ybWVkUmVnaW9uIFRyYW5zaXRpb25EaXJlY3Rpb24gVHJhbnNpdGlvbkR1cmF0aW9uIFRyYW5zaXRpb25FZmZlY3QgVHJhbnNpdGl2ZUNsb3N1cmVHcmFwaCBUcmFuc2l0aXZlUmVkdWN0aW9uR3JhcGggVHJhbnNsYXRlIFRyYW5zbGF0aW9uT3B0aW9ucyBUcmFuc2xhdGlvblRyYW5zZm9ybSBUcmFuc2xpdGVyYXRlIFRyYW5zcGFyZW50IFRyYW5zcGFyZW50Q29sb3IgVHJhbnNwb3NlIFRyYW5zcG9zZUxheWVyIFRyYXBTZWxlY3Rpb24gVHJhdmVsRGlyZWN0aW9ucyBUcmF2ZWxEaXJlY3Rpb25zRGF0YSBUcmF2ZWxEaXN0YW5jZSBUcmF2ZWxEaXN0YW5jZUxpc3QgVHJhdmVsTWV0aG9kIFRyYXZlbFRpbWUgVHJlZUZvcm0gVHJlZUdyYXBoIFRyZWVHcmFwaFEgVHJlZVBsb3QgVHJlbmRTdHlsZSBUcmlhbmdsZSBUcmlhbmdsZUNlbnRlciBUcmlhbmdsZUNvbnN0cnVjdCBUcmlhbmdsZU1lYXN1cmVtZW50IFRyaWFuZ2xlV2F2ZSBUcmlhbmd1bGFyRGlzdHJpYnV0aW9uIFRyaWFuZ3VsYXRlTWVzaCBUcmlnIFRyaWdFeHBhbmQgVHJpZ0ZhY3RvciBUcmlnRmFjdG9yTGlzdCBUcmlnZ2VyIFRyaWdSZWR1Y2UgVHJpZ1RvRXhwIFRyaW1tZWRNZWFuIFRyaW1tZWRWYXJpYW5jZSBUcm9waWNhbFN0b3JtRGF0YSBUcnVlIFRydWVRIFRydW5jYXRlZERpc3RyaWJ1dGlvbiBUcnVuY2F0ZWRQb2x5aGVkcm9uIFRzYWxsaXNRRXhwb25lbnRpYWxEaXN0cmlidXRpb24gVHNhbGxpc1FHYXVzc2lhbkRpc3RyaWJ1dGlvbiBUVGVzdCBUdWJlIFR1YmVCZXppZXJDdXJ2ZUJveCBUdWJlQmV6aWVyQ3VydmVCb3hPcHRpb25zIFR1YmVCb3ggVHViZUJveE9wdGlvbnMgVHViZUJTcGxpbmVDdXJ2ZUJveCBUdWJlQlNwbGluZUN1cnZlQm94T3B0aW9ucyBUdWVzZGF5IFR1a2V5TGFtYmRhRGlzdHJpYnV0aW9uIFR1a2V5V2luZG93IFR1bm5lbERhdGEgVHVwbGVzIFR1cmFuR3JhcGggVHVyaW5nTWFjaGluZSBUdXR0ZVBvbHlub21pYWwgVHdvV2F5UnVsZSBUeXBlZCBUeXBlU3BlY2lmaWVyJyArXG4gICAgICAnVW5hdGVRIFVuY29tcHJlc3MgVW5jb25zdHJhaW5lZFBhcmFtZXRlcnMgVW5kZWZpbmVkIFVuZGVyQmFyIFVuZGVyZmxvdyBVbmRlcmxpbmVkIFVuZGVyb3ZlcnNjcmlwdCBVbmRlcm92ZXJzY3JpcHRCb3ggVW5kZXJvdmVyc2NyaXB0Qm94T3B0aW9ucyBVbmRlcnNjcmlwdCBVbmRlcnNjcmlwdEJveCBVbmRlcnNjcmlwdEJveE9wdGlvbnMgVW5kZXJzZWFGZWF0dXJlRGF0YSBVbmRpcmVjdGVkRWRnZSBVbmRpcmVjdGVkR3JhcGggVW5kaXJlY3RlZEdyYXBoUSBVbmRvT3B0aW9ucyBVbmRvVHJhY2tlZFZhcmlhYmxlcyBVbmVxdWFsIFVuZXF1YWxUbyBVbmV2YWx1YXRlZCBVbmlmb3JtRGlzdHJpYnV0aW9uIFVuaWZvcm1HcmFwaERpc3RyaWJ1dGlvbiBVbmlmb3JtUG9seWhlZHJvbiBVbmlmb3JtU3VtRGlzdHJpYnV0aW9uIFVuaW5zdGFsbCBVbmlvbiBVbmlvblBsdXMgVW5pcXVlIFVuaXRhcnlNYXRyaXhRIFVuaXRCb3ggVW5pdENvbnZlcnQgVW5pdERpbWVuc2lvbnMgVW5pdGl6ZSBVbml0Um9vdFRlc3QgVW5pdFNpbXBsaWZ5IFVuaXRTdGVwIFVuaXRTeXN0ZW0gVW5pdFRyaWFuZ2xlIFVuaXRWZWN0b3IgVW5pdFZlY3RvckxheWVyIFVuaXR5RGltZW5zaW9ucyBVbml2ZXJzZU1vZGVsRGF0YSBVbml2ZXJzaXR5RGF0YSBVbml4VGltZSBVbnByb3RlY3QgVW5yZWdpc3RlckV4dGVybmFsRXZhbHVhdG9yIFVuc2FtZVEgVW5zYXZlZFZhcmlhYmxlcyBVbnNldCBVbnNldFNoYXJlZCBVbnRyYWNrZWRWYXJpYWJsZXMgVXAgVXBBcnJvdyBVcEFycm93QmFyIFVwQXJyb3dEb3duQXJyb3cgVXBkYXRlIFVwZGF0ZUR5bmFtaWNPYmplY3RzIFVwZGF0ZUR5bmFtaWNPYmplY3RzU3luY2hyb25vdXMgVXBkYXRlSW50ZXJ2YWwgVXBkYXRlU2VhcmNoSW5kZXggVXBEb3duQXJyb3cgVXBFcXVpbGlicml1bSBVcHBlckNhc2VRIFVwcGVyTGVmdEFycm93IFVwcGVyUmlnaHRBcnJvdyBVcHBlclRyaWFuZ3VsYXJpemUgVXBwZXJUcmlhbmd1bGFyTWF0cml4USBVcHNhbXBsZSBVcFNldCBVcFNldERlbGF5ZWQgVXBUZWUgVXBUZWVBcnJvdyBVcFRvIFVwVmFsdWVzIFVSTCBVUkxCdWlsZCBVUkxEZWNvZGUgVVJMRGlzcGF0Y2hlciBVUkxEb3dubG9hZCBVUkxEb3dubG9hZFN1Ym1pdCBVUkxFbmNvZGUgVVJMRXhlY3V0ZSBVUkxFeHBhbmQgVVJMRmV0Y2ggVVJMRmV0Y2hBc3luY2hyb25vdXMgVVJMUGFyc2UgVVJMUXVlcnlEZWNvZGUgVVJMUXVlcnlFbmNvZGUgVVJMUmVhZCBVUkxSZXNwb25zZVRpbWUgVVJMU2F2ZSBVUkxTYXZlQXN5bmNocm9ub3VzIFVSTFNob3J0ZW4gVVJMU3VibWl0IFVzZUdyYXBoaWNzUmFuZ2UgVXNlckRlZmluZWRXYXZlbGV0IFVzaW5nIFVzaW5nRnJvbnRFbmQgVXRpbGl0eUZ1bmN0aW9uJyArXG4gICAgICAnVjJHZXQgVmFsZW5jZUVycm9ySGFuZGxpbmcgVmFsaWRhdGlvbkxlbmd0aCBWYWxpZGF0aW9uU2V0IFZhbHVlIFZhbHVlQm94IFZhbHVlQm94T3B0aW9ucyBWYWx1ZURpbWVuc2lvbnMgVmFsdWVGb3JtIFZhbHVlUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uIFZhbHVlUSBWYWx1ZXMgVmFsdWVzRGF0YSBWYXJpYWJsZXMgVmFyaWFuY2UgVmFyaWFuY2VFcXVpdmFsZW5jZVRlc3QgVmFyaWFuY2VFc3RpbWF0b3JGdW5jdGlvbiBWYXJpYW5jZUdhbW1hRGlzdHJpYnV0aW9uIFZhcmlhbmNlVGVzdCBWZWN0b3JBbmdsZSBWZWN0b3JBcm91bmQgVmVjdG9yQ29sb3JGdW5jdGlvbiBWZWN0b3JDb2xvckZ1bmN0aW9uU2NhbGluZyBWZWN0b3JEZW5zaXR5UGxvdCBWZWN0b3JHbHlwaERhdGEgVmVjdG9yR3JlYXRlciBWZWN0b3JHcmVhdGVyRXF1YWwgVmVjdG9yTGVzcyBWZWN0b3JMZXNzRXF1YWwgVmVjdG9yTWFya2VycyBWZWN0b3JQbG90IFZlY3RvclBsb3QzRCBWZWN0b3JQb2ludHMgVmVjdG9yUSBWZWN0b3JzIFZlY3RvclNjYWxlIFZlY3RvclN0eWxlIFZlZSBWZXJiYXRpbSBWZXJib3NlIFZlcmJvc2VDb252ZXJ0VG9Qb3N0U2NyaXB0UGFja2V0IFZlcmlmaWNhdGlvblRlc3QgVmVyaWZ5Q29udmVyZ2VuY2UgVmVyaWZ5RGVyaXZlZEtleSBWZXJpZnlEaWdpdGFsU2lnbmF0dXJlIFZlcmlmeUludGVycHJldGF0aW9uIFZlcmlmeVNlY3VyaXR5Q2VydGlmaWNhdGVzIFZlcmlmeVNvbHV0aW9ucyBWZXJpZnlUZXN0QXNzdW1wdGlvbnMgVmVyc2lvbiBWZXJzaW9uTnVtYmVyIFZlcnRleEFkZCBWZXJ0ZXhDYXBhY2l0eSBWZXJ0ZXhDb2xvcnMgVmVydGV4Q29tcG9uZW50IFZlcnRleENvbm5lY3Rpdml0eSBWZXJ0ZXhDb250cmFjdCBWZXJ0ZXhDb29yZGluYXRlUnVsZXMgVmVydGV4Q29vcmRpbmF0ZXMgVmVydGV4Q29ycmVsYXRpb25TaW1pbGFyaXR5IFZlcnRleENvc2luZVNpbWlsYXJpdHkgVmVydGV4Q291bnQgVmVydGV4Q292ZXJRIFZlcnRleERhdGFDb29yZGluYXRlcyBWZXJ0ZXhEZWdyZWUgVmVydGV4RGVsZXRlIFZlcnRleERpY2VTaW1pbGFyaXR5IFZlcnRleEVjY2VudHJpY2l0eSBWZXJ0ZXhJbkNvbXBvbmVudCBWZXJ0ZXhJbkRlZ3JlZSBWZXJ0ZXhJbmRleCBWZXJ0ZXhKYWNjYXJkU2ltaWxhcml0eSBWZXJ0ZXhMYWJlbGluZyBWZXJ0ZXhMYWJlbHMgVmVydGV4TGFiZWxTdHlsZSBWZXJ0ZXhMaXN0IFZlcnRleE5vcm1hbHMgVmVydGV4T3V0Q29tcG9uZW50IFZlcnRleE91dERlZ3JlZSBWZXJ0ZXhRIFZlcnRleFJlbmRlcmluZ0Z1bmN0aW9uIFZlcnRleFJlcGxhY2UgVmVydGV4U2hhcGUgVmVydGV4U2hhcGVGdW5jdGlvbiBWZXJ0ZXhTaXplIFZlcnRleFN0eWxlIFZlcnRleFRleHR1cmVDb29yZGluYXRlcyBWZXJ0ZXhXZWlnaHQgVmVydGV4V2VpZ2h0ZWRHcmFwaFEgVmVydGljYWwgVmVydGljYWxCYXIgVmVydGljYWxGb3JtIFZlcnRpY2FsR2F1Z2UgVmVydGljYWxTZXBhcmF0b3IgVmVydGljYWxTbGlkZXIgVmVydGljYWxUaWxkZSBWaWV3QW5nbGUgVmlld0NlbnRlciBWaWV3TWF0cml4IFZpZXdQb2ludCBWaWV3UG9pbnRTZWxlY3RvclNldHRpbmdzIFZpZXdQb3J0IFZpZXdQcm9qZWN0aW9uIFZpZXdSYW5nZSBWaWV3VmVjdG9yIFZpZXdWZXJ0aWNhbCBWaXJ0dWFsR3JvdXBEYXRhIFZpc2libGUgVmlzaWJsZUNlbGwgVm9pY2VTdHlsZURhdGEgVm9pZ3REaXN0cmlidXRpb24gVm9sY2Fub0RhdGEgVm9sdW1lIFZvbk1pc2VzRGlzdHJpYnV0aW9uIFZvcm9ub2lNZXNoJyArXG4gICAgICAnV2FpdEFsbCBXYWl0QXN5bmNocm9ub3VzVGFzayBXYWl0TmV4dCBXYWl0VW50aWwgV2FrZWJ5RGlzdHJpYnV0aW9uIFdhbGxlbml1c0h5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIFdhcmluZ1l1bGVEaXN0cmlidXRpb24gV2FycGluZ0NvcnJlc3BvbmRlbmNlIFdhcnBpbmdEaXN0YW5jZSBXYXRlcnNoZWRDb21wb25lbnRzIFdhdHNvblVTcXVhcmVUZXN0IFdhdHRzU3Ryb2dhdHpHcmFwaERpc3RyaWJ1dGlvbiBXYXZlbGV0QmVzdEJhc2lzIFdhdmVsZXRGaWx0ZXJDb2VmZmljaWVudHMgV2F2ZWxldEltYWdlUGxvdCBXYXZlbGV0TGlzdFBsb3QgV2F2ZWxldE1hcEluZGV4ZWQgV2F2ZWxldE1hdHJpeFBsb3QgV2F2ZWxldFBoaSBXYXZlbGV0UHNpIFdhdmVsZXRTY2FsZSBXYXZlbGV0U2NhbG9ncmFtIFdhdmVsZXRUaHJlc2hvbGQgV2Vha2x5Q29ubmVjdGVkQ29tcG9uZW50cyBXZWFrbHlDb25uZWN0ZWRHcmFwaENvbXBvbmVudHMgV2Vha2x5Q29ubmVjdGVkR3JhcGhRIFdlYWtTdGF0aW9uYXJpdHkgV2VhdGhlckRhdGEgV2VhdGhlckZvcmVjYXN0RGF0YSBXZWJBdWRpb1NlYXJjaCBXZWJFbGVtZW50T2JqZWN0IFdlYmVyRSBXZWJFeGVjdXRlIFdlYkltYWdlIFdlYkltYWdlU2VhcmNoIFdlYlNlYXJjaCBXZWJTZXNzaW9uT2JqZWN0IFdlYlNlc3Npb25zIFdlYldpbmRvd09iamVjdCBXZWRnZSBXZWRuZXNkYXkgV2VpYnVsbERpc3RyaWJ1dGlvbiBXZWllcnN0cmFzc0UxIFdlaWVyc3RyYXNzRTIgV2VpZXJzdHJhc3NFMyBXZWllcnN0cmFzc0V0YTEgV2VpZXJzdHJhc3NFdGEyIFdlaWVyc3RyYXNzRXRhMyBXZWllcnN0cmFzc0hhbGZQZXJpb2RzIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFcxIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFcyIFdlaWVyc3RyYXNzSGFsZlBlcmlvZFczIFdlaWVyc3RyYXNzSW52YXJpYW50RzIgV2VpZXJzdHJhc3NJbnZhcmlhbnRHMyBXZWllcnN0cmFzc0ludmFyaWFudHMgV2VpZXJzdHJhc3NQIFdlaWVyc3RyYXNzUFByaW1lIFdlaWVyc3RyYXNzU2lnbWEgV2VpZXJzdHJhc3NaZXRhIFdlaWdodGVkQWRqYWNlbmN5R3JhcGggV2VpZ2h0ZWRBZGphY2VuY3lNYXRyaXggV2VpZ2h0ZWREYXRhIFdlaWdodGVkR3JhcGhRIFdlaWdodHMgV2VsY2hXaW5kb3cgV2hlZWxHcmFwaCBXaGVuRXZlbnQgV2hpY2ggV2hpbGUgV2hpdGUgV2hpdGVOb2lzZVByb2Nlc3MgV2hpdGVQb2ludCBXaGl0ZXNwYWNlIFdoaXRlc3BhY2VDaGFyYWN0ZXIgV2hpdHRha2VyTSBXaGl0dGFrZXJXIFdpZW5lckZpbHRlciBXaWVuZXJQcm9jZXNzIFdpZ25lckQgV2lnbmVyU2VtaWNpcmNsZURpc3RyaWJ1dGlvbiBXaWtpcGVkaWFEYXRhIFdpa2lwZWRpYVNlYXJjaCBXaWxrc1cgV2lsa3NXVGVzdCBXaW5kRGlyZWN0aW9uRGF0YSBXaW5kaW5nQ291bnQgV2luZGluZ1BvbHlnb24gV2luZG93Q2xpY2tTZWxlY3QgV2luZG93RWxlbWVudHMgV2luZG93RmxvYXRpbmcgV2luZG93RnJhbWUgV2luZG93RnJhbWVFbGVtZW50cyBXaW5kb3dNYXJnaW5zIFdpbmRvd01vdmFibGUgV2luZG93T3BhY2l0eSBXaW5kb3dQZXJzaXN0ZW50U3R5bGVzIFdpbmRvd1NlbGVjdGVkIFdpbmRvd1NpemUgV2luZG93U3RhdHVzQXJlYSBXaW5kb3dUaXRsZSBXaW5kb3dUb29sYmFycyBXaW5kb3dXaWR0aCBXaW5kU3BlZWREYXRhIFdpbmRWZWN0b3JEYXRhIFdpbnNvcml6ZWRNZWFuIFdpbnNvcml6ZWRWYXJpYW5jZSBXaXNoYXJ0TWF0cml4RGlzdHJpYnV0aW9uIFdpdGggV29sZnJhbUFscGhhIFdvbGZyYW1BbHBoYURhdGUgV29sZnJhbUFscGhhUXVhbnRpdHkgV29sZnJhbUFscGhhUmVzdWx0IFdvbGZyYW1MYW5ndWFnZURhdGEgV29yZCBXb3JkQm91bmRhcnkgV29yZENoYXJhY3RlciBXb3JkQ2xvdWQgV29yZENvdW50IFdvcmRDb3VudHMgV29yZERhdGEgV29yZERlZmluaXRpb24gV29yZEZyZXF1ZW5jeSBXb3JkRnJlcXVlbmN5RGF0YSBXb3JkTGlzdCBXb3JkT3JpZW50YXRpb24gV29yZFNlYXJjaCBXb3JkU2VsZWN0aW9uRnVuY3Rpb24gV29yZFNlcGFyYXRvcnMgV29yZFNwYWNpbmdzIFdvcmRTdGVtIFdvcmRUcmFuc2xhdGlvbiBXb3JraW5nUHJlY2lzaW9uIFdyYXBBcm91bmQgV3JpdGUgV3JpdGVMaW5lIFdyaXRlU3RyaW5nIFdyb25za2lhbicgK1xuICAgICAgJ1hNTEVsZW1lbnQgWE1MT2JqZWN0IFhNTFRlbXBsYXRlIFhub3IgWG9yIFhZWkNvbG9yJyArXG4gICAgICAnWWVsbG93IFllc3RlcmRheSBZdWxlRGlzc2ltaWxhcml0eScgK1xuICAgICAgJ1plcm5pa2VSIFplcm9TeW1tZXRyaWMgWmVyb1Rlc3QgWmVyb1dpZHRoVGltZXMgWmV0YSBaZXRhWmVybyBaSVBDb2RlRGF0YSBaaXBmRGlzdHJpYnV0aW9uIFpvb21DZW50ZXIgWm9vbUZhY3RvciBaVGVzdCBaVHJhbnNmb3JtJyArXG4gICAgICAnJEFib3J0ZWQgJEFjdGl2YXRpb25Hcm91cElEICRBY3RpdmF0aW9uS2V5ICRBY3RpdmF0aW9uVXNlclJlZ2lzdGVyZWQgJEFkZE9uc0RpcmVjdG9yeSAkQWxsb3dFeHRlcm5hbENoYW5uZWxGdW5jdGlvbnMgJEFzc2VydEZ1bmN0aW9uICRBc3N1bXB0aW9ucyAkQXN5bmNocm9ub3VzVGFzayAkQXVkaW9JbnB1dERldmljZXMgJEF1ZGlvT3V0cHV0RGV2aWNlcyAkQmFzZURpcmVjdG9yeSAkQmF0Y2hJbnB1dCAkQmF0Y2hPdXRwdXQgJEJsb2NrY2hhaW5CYXNlICRCb3hGb3JtcyAkQnl0ZU9yZGVyaW5nICRDYWNoZUJhc2VEaXJlY3RvcnkgJENhbmNlbGVkICRDaGFubmVsQmFzZSAkQ2hhcmFjdGVyRW5jb2RpbmcgJENoYXJhY3RlckVuY29kaW5ncyAkQ2xvdWRCYXNlICRDbG91ZENvbm5lY3RlZCAkQ2xvdWRDcmVkaXRzQXZhaWxhYmxlICRDbG91ZEV2YWx1YXRpb24gJENsb3VkRXhwcmVzc2lvbkJhc2UgJENsb3VkT2JqZWN0TmFtZUZvcm1hdCAkQ2xvdWRPYmplY3RVUkxUeXBlICRDbG91ZFJvb3REaXJlY3RvcnkgJENsb3VkU3ltYm9sQmFzZSAkQ2xvdWRVc2VySUQgJENsb3VkVXNlclVVSUQgJENsb3VkVmVyc2lvbiAkQ2xvdWRWZXJzaW9uTnVtYmVyICRDbG91ZFdvbGZyYW1FbmdpbmVWZXJzaW9uTnVtYmVyICRDb21tYW5kTGluZSAkQ29tcGlsYXRpb25UYXJnZXQgJENvbmRpdGlvbkhvbGQgJENvbmZpZ3VyZWRLZXJuZWxzICRDb250ZXh0ICRDb250ZXh0UGF0aCAkQ29udHJvbEFjdGl2ZVNldHRpbmcgJENvb2tpZXMgJENvb2tpZVN0b3JlICRDcmVhdGlvbkRhdGUgJEN1cnJlbnRMaW5rICRDdXJyZW50VGFzayAkQ3VycmVudFdlYlNlc3Npb24gJERhdGVTdHJpbmdGb3JtYXQgJERlZmF1bHRBdWRpb0lucHV0RGV2aWNlICREZWZhdWx0QXVkaW9PdXRwdXREZXZpY2UgJERlZmF1bHRGb250ICREZWZhdWx0RnJvbnRFbmQgJERlZmF1bHRJbWFnaW5nRGV2aWNlICREZWZhdWx0TG9jYWxCYXNlICREZWZhdWx0TWFpbGJveCAkRGVmYXVsdE5ldHdvcmtJbnRlcmZhY2UgJERlZmF1bHRQYXRoICREaXNwbGF5ICREaXNwbGF5RnVuY3Rpb24gJERpc3RyaWJ1dGVkQ29udGV4dHMgJER5bmFtaWNFdmFsdWF0aW9uICRFY2hvICRFbWJlZENvZGVFbnZpcm9ubWVudHMgJEVtYmVkZGFibGVTZXJ2aWNlcyAkRW50aXR5U3RvcmVzICRFcGlsb2cgJEV2YWx1YXRpb25DbG91ZEJhc2UgJEV2YWx1YXRpb25DbG91ZE9iamVjdCAkRXZhbHVhdGlvbkVudmlyb25tZW50ICRFeHBvcnRGb3JtYXRzICRGYWlsZWQgJEZpbmFuY2lhbERhdGFTb3VyY2UgJEZvbnRGYW1pbGllcyAkRm9ybWF0VHlwZSAkRnJvbnRFbmQgJEZyb250RW5kU2Vzc2lvbiAkR2VvRW50aXR5VHlwZXMgJEdlb0xvY2F0aW9uICRHZW9Mb2NhdGlvbkNpdHkgJEdlb0xvY2F0aW9uQ291bnRyeSAkR2VvTG9jYXRpb25QcmVjaXNpb24gJEdlb0xvY2F0aW9uU291cmNlICRIaXN0b3J5TGVuZ3RoICRIb21lRGlyZWN0b3J5ICRIVE1MRXhwb3J0UnVsZXMgJEhUVFBDb29raWVzICRIVFRQUmVxdWVzdCAkSWdub3JlRU9GICRJbWFnZUZvcm1hdHRpbmdXaWR0aCAkSW1hZ2luZ0RldmljZSAkSW1hZ2luZ0RldmljZXMgJEltcG9ydEZvcm1hdHMgJEluY29taW5nTWFpbFNldHRpbmdzICRJbml0aWFsRGlyZWN0b3J5ICRJbml0aWFsaXphdGlvbiAkSW5pdGlhbGl6YXRpb25Db250ZXh0cyAkSW5wdXQgJElucHV0RmlsZU5hbWUgJElucHV0U3RyZWFtTWV0aG9kcyAkSW5zcGVjdG9yICRJbnN0YWxsYXRpb25EYXRlICRJbnN0YWxsYXRpb25EaXJlY3RvcnkgJEludGVyZmFjZUVudmlyb25tZW50ICRJbnRlcnByZXRlclR5cGVzICRJdGVyYXRpb25MaW1pdCAkS2VybmVsQ291bnQgJEtlcm5lbElEICRMYW5ndWFnZSAkTGF1bmNoRGlyZWN0b3J5ICRMaWJyYXJ5UGF0aCAkTGljZW5zZUV4cGlyYXRpb25EYXRlICRMaWNlbnNlSUQgJExpY2Vuc2VQcm9jZXNzZXMgJExpY2Vuc2VTZXJ2ZXIgJExpY2Vuc2VTdWJwcm9jZXNzZXMgJExpY2Vuc2VUeXBlICRMaW5lICRMaW5rZWQgJExpbmtTdXBwb3J0ZWQgJExvYWRlZEZpbGVzICRMb2NhbEJhc2UgJExvY2FsU3ltYm9sQmFzZSAkTWFjaGluZUFkZHJlc3NlcyAkTWFjaGluZURvbWFpbiAkTWFjaGluZURvbWFpbnMgJE1hY2hpbmVFcHNpbG9uICRNYWNoaW5lSUQgJE1hY2hpbmVOYW1lICRNYWNoaW5lUHJlY2lzaW9uICRNYWNoaW5lVHlwZSAkTWF4RXh0cmFQcmVjaXNpb24gJE1heExpY2Vuc2VQcm9jZXNzZXMgJE1heExpY2Vuc2VTdWJwcm9jZXNzZXMgJE1heE1hY2hpbmVOdW1iZXIgJE1heE51bWJlciAkTWF4UGllY2V3aXNlQ2FzZXMgJE1heFByZWNpc2lvbiAkTWF4Um9vdERlZ3JlZSAkTWVzc2FnZUdyb3VwcyAkTWVzc2FnZUxpc3QgJE1lc3NhZ2VQcmVQcmludCAkTWVzc2FnZXMgJE1pbk1hY2hpbmVOdW1iZXIgJE1pbk51bWJlciAkTWlub3JSZWxlYXNlTnVtYmVyICRNaW5QcmVjaXNpb24gJE1vYmlsZVBob25lICRNb2R1bGVOdW1iZXIgJE5ldHdvcmtDb25uZWN0ZWQgJE5ldHdvcmtJbnRlcmZhY2VzICROZXR3b3JrTGljZW5zZSAkTmV3TWVzc2FnZSAkTmV3U3ltYm9sICROb3RlYm9va3MgJE5vVmFsdWUgJE51bWJlck1hcmtzICRPZmYgJE9wZXJhdGluZ1N5c3RlbSAkT3V0cHV0ICRPdXRwdXRGb3JtcyAkT3V0cHV0U2l6ZUxpbWl0ICRPdXRwdXRTdHJlYW1NZXRob2RzICRQYWNrYWdlcyAkUGFyZW50TGluayAkUGFyZW50UHJvY2Vzc0lEICRQYXNzd29yZEZpbGUgJFBhdGNoTGV2ZWxJRCAkUGF0aCAkUGF0aG5hbWVTZXBhcmF0b3IgJFBlcmZvcm1hbmNlR29hbCAkUGVybWlzc2lvbnMgJFBlcm1pc3Npb25zR3JvdXBCYXNlICRQZXJzaXN0ZW5jZUJhc2UgJFBlcnNpc3RlbmNlUGF0aCAkUGlwZVN1cHBvcnRlZCAkUGxvdFRoZW1lICRQb3N0ICRQcmUgJFByZWZlcmVuY2VzRGlyZWN0b3J5ICRQcmVJbml0aWFsaXphdGlvbiAkUHJlUHJpbnQgJFByZVJlYWQgJFByaW50Rm9ybXMgJFByaW50TGl0ZXJhbCAkUHJpbnRvdXQzRFByZXZpZXdlciAkUHJvY2Vzc0lEICRQcm9jZXNzb3JDb3VudCAkUHJvY2Vzc29yVHlwZSAkUHJvZHVjdEluZm9ybWF0aW9uICRQcm9ncmFtTmFtZSAkUHVibGlzaGVySUQgJFJhbmRvbVN0YXRlICRSZWN1cnNpb25MaW1pdCAkUmVnaXN0ZXJlZERldmljZUNsYXNzZXMgJFJlZ2lzdGVyZWRVc2VyTmFtZSAkUmVsZWFzZU51bWJlciAkUmVxdWVzdGVyQWRkcmVzcyAkUmVxdWVzdGVyV29sZnJhbUlEICRSZXF1ZXN0ZXJXb2xmcmFtVVVJRCAkUmVzb3VyY2VTeXN0ZW1CYXNlICRSb290RGlyZWN0b3J5ICRTY2hlZHVsZWRUYXNrICRTY3JpcHRDb21tYW5kTGluZSAkU2NyaXB0SW5wdXRTdHJpbmcgJFNlY3VyZWRBdXRoZW50aWNhdGlvbktleVRva2VucyAkU2VydmljZUNyZWRpdHNBdmFpbGFibGUgJFNlcnZpY2VzICRTZXNzaW9uSUQgJFNldFBhcmVudExpbmsgJFNoYXJlZEZ1bmN0aW9ucyAkU2hhcmVkVmFyaWFibGVzICRTb3VuZERpc3BsYXkgJFNvdW5kRGlzcGxheUZ1bmN0aW9uICRTb3VyY2VMaW5rICRTU0hBdXRoZW50aWNhdGlvbiAkU3VtbWFyeUJveERhdGFTaXplTGltaXQgJFN1cHByZXNzSW5wdXRGb3JtSGVhZHMgJFN5bmNocm9ub3VzRXZhbHVhdGlvbiAkU3ludGF4SGFuZGxlciAkU3lzdGVtICRTeXN0ZW1DaGFyYWN0ZXJFbmNvZGluZyAkU3lzdGVtSUQgJFN5c3RlbU1lbW9yeSAkU3lzdGVtU2hlbGwgJFN5c3RlbVRpbWVab25lICRTeXN0ZW1Xb3JkTGVuZ3RoICRUZW1wbGF0ZVBhdGggJFRlbXBvcmFyeURpcmVjdG9yeSAkVGVtcG9yYXJ5UHJlZml4ICRUZXN0RmlsZU5hbWUgJFRleHRTdHlsZSAkVGltZWRPdXQgJFRpbWVVbml0ICRUaW1lWm9uZSAkVGltZVpvbmVFbnRpdHkgJFRvcERpcmVjdG9yeSAkVHJhY2VPZmYgJFRyYWNlT24gJFRyYWNlUGF0dGVybiAkVHJhY2VQb3N0QWN0aW9uICRUcmFjZVByZUFjdGlvbiAkVW5pdFN5c3RlbSAkVXJnZW50ICRVc2VyQWRkT25zRGlyZWN0b3J5ICRVc2VyQWdlbnRMYW5ndWFnZXMgJFVzZXJBZ2VudE1hY2hpbmUgJFVzZXJBZ2VudE5hbWUgJFVzZXJBZ2VudE9wZXJhdGluZ1N5c3RlbSAkVXNlckFnZW50U3RyaW5nICRVc2VyQWdlbnRWZXJzaW9uICRVc2VyQmFzZURpcmVjdG9yeSAkVXNlckRvY3VtZW50c0RpcmVjdG9yeSAkVXNlcm5hbWUgJFVzZXJOYW1lICRVc2VyVVJMQmFzZSAkVmVyc2lvbiAkVmVyc2lvbk51bWJlciAkVm9pY2VTdHlsZXMgJFdvbGZyYW1JRCAkV29sZnJhbVVVSUQnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwoXFxcXConLCAnXFxcXCpcXFxcKScsIHtjb250YWluczogWydzZWxmJ119KSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLypcbiAgRm9ybWFsIHN5bnRheCBpcyBub3QgcHVibGlzaGVkLCBoZWxwZnVsIGxpbms6XG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rb3JuaWxvdmEtbC9tYXRsYWItSW50ZWxsaUotcGx1Z2luL2Jsb2IvbWFzdGVyL3NyYy9tYWluL2dyYW1tYXIvTWF0bGFiLmJuZlxuKi9cbmZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgVFJBTlNQT1NFX1JFID0gJyhcXCd8XFxcXC5cXCcpKyc7XG4gIHZhciBUUkFOU1BPU0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiBUUkFOU1BPU0VfUkUgfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYnJlYWsgY2FzZSBjYXRjaCBjbGFzc2RlZiBjb250aW51ZSBlbHNlIGVsc2VpZiBlbmQgZW51bWVyYXRlZCBldmVudHMgZm9yIGZ1bmN0aW9uICcgK1xuICAgICAgICAnZ2xvYmFsIGlmIG1ldGhvZHMgb3RoZXJ3aXNlIHBhcmZvciBwZXJzaXN0ZW50IHByb3BlcnRpZXMgcmV0dXJuIHNwbWQgc3dpdGNoIHRyeSB3aGlsZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3NpbiBzaW5kIHNpbmggYXNpbiBhc2luZCBhc2luaCBjb3MgY29zZCBjb3NoIGFjb3MgYWNvc2QgYWNvc2ggdGFuIHRhbmQgdGFuaCBhdGFuICcgK1xuICAgICAgICAnYXRhbmQgYXRhbjIgYXRhbmggc2VjIHNlY2Qgc2VjaCBhc2VjIGFzZWNkIGFzZWNoIGNzYyBjc2NkIGNzY2ggYWNzYyBhY3NjZCBhY3NjaCBjb3QgJyArXG4gICAgICAgICdjb3RkIGNvdGggYWNvdCBhY290ZCBhY290aCBoeXBvdCBleHAgZXhwbTEgbG9nIGxvZzFwIGxvZzEwIGxvZzIgcG93MiByZWFscG93IHJlYWxsb2cgJyArXG4gICAgICAgICdyZWFsc3FydCBzcXJ0IG50aHJvb3QgbmV4dHBvdzIgYWJzIGFuZ2xlIGNvbXBsZXggY29uaiBpbWFnIHJlYWwgdW53cmFwIGlzcmVhbCAnICtcbiAgICAgICAgJ2NwbHhwYWlyIGZpeCBmbG9vciBjZWlsIHJvdW5kIG1vZCByZW0gc2lnbiBhaXJ5IGJlc3NlbGogYmVzc2VseSBiZXNzZWxoIGJlc3NlbGkgJyArXG4gICAgICAgICdiZXNzZWxrIGJldGEgYmV0YWluYyBiZXRhbG4gZWxsaXBqIGVsbGlwa2UgZXJmIGVyZmMgZXJmY3ggZXJmaW52IGV4cGludCBnYW1tYSAnICtcbiAgICAgICAgJ2dhbW1haW5jIGdhbW1hbG4gcHNpIGxlZ2VuZHJlIGNyb3NzIGRvdCBmYWN0b3IgaXNwcmltZSBwcmltZXMgZ2NkIGxjbSByYXQgcmF0cyBwZXJtcyAnICtcbiAgICAgICAgJ25jaG9vc2VrIGZhY3RvcmlhbCBjYXJ0MnNwaCBjYXJ0MnBvbCBwb2wyY2FydCBzcGgyY2FydCBoc3YycmdiIHJnYjJoc3YgemVyb3Mgb25lcyAnICtcbiAgICAgICAgJ2V5ZSByZXBtYXQgcmFuZCByYW5kbiBsaW5zcGFjZSBsb2dzcGFjZSBmcmVxc3BhY2UgbWVzaGdyaWQgYWNjdW1hcnJheSBzaXplIGxlbmd0aCAnICtcbiAgICAgICAgJ25kaW1zIG51bWVsIGRpc3AgaXNlbXB0eSBpc2VxdWFsIGlzZXF1YWx3aXRoZXF1YWxuYW5zIGNhdCByZXNoYXBlIGRpYWcgYmxrZGlhZyB0cmlsICcgK1xuICAgICAgICAndHJpdSBmbGlwbHIgZmxpcHVkIGZsaXBkaW0gcm90OTAgZmluZCBzdWIyaW5kIGluZDJzdWIgYnN4ZnVuIG5kZ3JpZCBwZXJtdXRlIGlwZXJtdXRlICcgK1xuICAgICAgICAnc2hpZnRkaW0gY2lyY3NoaWZ0IHNxdWVlemUgaXNzY2FsYXIgaXN2ZWN0b3IgYW5zIGVwcyByZWFsbWF4IHJlYWxtaW4gcGkgaSBpbmYgbmFuICcgK1xuICAgICAgICAnaXNuYW4gaXNpbmYgaXNmaW5pdGUgaiB3aHkgY29tcGFuIGdhbGxlcnkgaGFkYW1hcmQgaGFua2VsIGhpbGIgaW52aGlsYiBtYWdpYyBwYXNjYWwgJyArXG4gICAgICAgICdyb3NzZXIgdG9lcGxpdHogdmFuZGVyIHdpbGtpbnNvbiBtYXggbWluIG5hbm1heCBuYW5taW4gbWVhbiBuYW5tZWFuIHR5cGUgdGFibGUgJyArXG4gICAgICAgICdyZWFkdGFibGUgd3JpdGV0YWJsZSBzb3J0cm93cyBzb3J0IGZpZ3VyZSBwbG90IHBsb3QzIHNjYXR0ZXIgc2NhdHRlcjMgY2VsbGZ1biAnICtcbiAgICAgICAgJ2xlZ2VuZCBpbnRlcnNlY3QgaXNtZW1iZXIgcHJvY3J1c3RlcyBob2xkIG51bTJjZWxsICdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcoLy98XCJ8I3wvXFxcXCp8XFxcXHMrL1xcXFx3KyknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXSd9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAvdHJ1ZXxmYWxzZS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgc3RhcnRzOiBUUkFOU1BPU0VcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl1bYS16QS1aXzAtOV0qJyArIFRSQU5TUE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7YmVnaW46ICdcXCdcXCcnfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxdfH18XFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAge2JlZ2luOiAnXCJcIid9XG4gICAgICAgIF0sXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXHMqXFxcXCVcXFxce1xcXFxzKiQnLCAnXlxcXFxzKlxcXFwlXFxcXH1cXFxccyokJyksXG4gICAgICBobGpzLkNPTU1FTlQoJ1xcXFwlJywgJyQnKVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9ICdpZiB0aGVuIGVsc2UgZWxzZWlmIGZvciB0aHJ1IGRvIHdoaWxlIHVubGVzcyBzdGVwIGluIGFuZCBvciBub3QnO1xuICB2YXIgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB1bmtub3duIGluZiBtaW5mIGluZCB1bmQgJWUgJWkgJXBpICVwaGkgJWdhbW1hJztcbiAgdmFyIEJVSUxUSU5fRlVOQ1RJT05TID1cbiAgICAgICAgJyBhYmFzZXAgYWJzIGFic2ludCBhYnNvbHV0ZV9yZWFsX3RpbWUgYWNvcyBhY29zaCBhY290IGFjb3RoIGFjc2MgYWNzY2ggYWN0aXZhdGUnXG4gICAgICArICcgYWRkY29sIGFkZF9lZGdlIGFkZF9lZGdlcyBhZGRtYXRyaWNlcyBhZGRyb3cgYWRkX3ZlcnRleCBhZGRfdmVydGljZXMgYWRqYWNlbmN5X21hdHJpeCdcbiAgICAgICsgJyBhZGpvaW4gYWRqb2ludCBhZiBhZ2QgYWlyeSBhaXJ5X2FpIGFpcnlfYmkgYWlyeV9kYWkgYWlyeV9kYmkgYWxnc3lzIGFsZ190eXBlJ1xuICAgICAgKyAnIGFsaWFzIGFsbHJvb3RzIGFscGhhY2hhcnAgYWxwaGFudW1lcmljcCBhbW9ydGl6YXRpb24gJWFuZCBhbm51aXR5X2Z2J1xuICAgICAgKyAnIGFubnVpdHlfcHYgYW50aWQgYW50aWRpZmYgQW50aURpZmZlcmVuY2UgYXBwZW5kIGFwcGVuZGZpbGUgYXBwbHkgYXBwbHkxIGFwcGx5MidcbiAgICAgICsgJyBhcHBseWIxIGFwcm9wb3MgYXJncyBhcml0X2Ftb3J0aXphdGlvbiBhcml0aG1ldGljIGFyaXRoc3VtIGFycmF5IGFycmF5YXBwbHknXG4gICAgICArICcgYXJyYXlpbmZvIGFycmF5bWFrZSBhcnJheXNldGFwcGx5IGFzY2lpIGFzZWMgYXNlY2ggYXNpbiBhc2luaCBhc2tpbnRlZ2VyJ1xuICAgICAgKyAnIGFza3NpZ24gYXNzb2MgYXNzb2NfbGVnZW5kcmVfcCBhc3NvY19sZWdlbmRyZV9xIGFzc3VtZSBhc3N1bWVfZXh0ZXJuYWxfYnl0ZV9vcmRlcidcbiAgICAgICsgJyBhc3ltcGEgYXQgYXRhbiBhdGFuMiBhdGFuaCBhdGVuc2ltcCBhdG9tIGF0dmFsdWUgYXVnY29lZm1hdHJpeCBhdWdtZW50ZWRfbGFncmFuZ2lhbl9tZXRob2QnXG4gICAgICArICcgYXYgYXZlcmFnZV9kZWdyZWUgYmFja3RyYWNlIGJhcnMgYmFyc3Bsb3QgYmFyc3Bsb3RfZGVzY3JpcHRpb24gYmFzZTY0IGJhc2U2NF9kZWNvZGUnXG4gICAgICArICcgYmFzaGluZGljZXMgYmF0Y2ggYmF0Y2hsb2FkIGJjMiBiZHZhYyBiZWxsbiBiZW5lZml0X2Nvc3QgYmVybiBiZXJucG9seSBiZXJuc3RlaW5fYXBwcm94J1xuICAgICAgKyAnIGJlcm5zdGVpbl9leHBhbmQgYmVybnN0ZWluX3BvbHkgYmVzc2VsIGJlc3NlbF9pIGJlc3NlbF9qIGJlc3NlbF9rIGJlc3NlbF9zaW1wbGlmeSdcbiAgICAgICsgJyBiZXNzZWxfeSBiZXRhIGJldGFfaW5jb21wbGV0ZSBiZXRhX2luY29tcGxldGVfZ2VuZXJhbGl6ZWQgYmV0YV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkJ1xuICAgICAgKyAnIGJlem91dCBiZmFsbHJvb3RzIGJmZmFjIGJmX2ZpbmRfcm9vdCBiZl9mbWluX2NvYnlsYSBiZmh6ZXRhIGJmbG9hdCBiZmxvYXRwJ1xuICAgICAgKyAnIGJmcHNpIGJmcHNpMCBiZnpldGEgYmljb25uZWN0ZWRfY29tcG9uZW50cyBiaW1ldHJpYyBiaW5vbWlhbCBiaXBhcnRpdGlvbidcbiAgICAgICsgJyBibG9jayBibG9ja21hdHJpeHAgYm9kZV9nYWluIGJvZGVfcGhhc2UgYm90aGNvZWYgYm94IGJveHBsb3QgYm94cGxvdF9kZXNjcmlwdGlvbidcbiAgICAgICsgJyBicmVhayBidWdfcmVwb3J0IGJ1aWxkX2luZm98MTAgYnVpbGRxIGJ1aWxkX3NhbXBsZSBidXJuIGNhYnMgY2FuZm9ybSBjYW50ZW4nXG4gICAgICArICcgY2FyZGluYWxpdHkgY2FyZyBjYXJ0YW4gY2FydGVzaWFuX3Byb2R1Y3QgY2F0Y2ggY2F1Y2h5X21hdHJpeCBjYmZmYWMgY2RmX2Jlcm5vdWxsaSdcbiAgICAgICsgJyBjZGZfYmV0YSBjZGZfYmlub21pYWwgY2RmX2NhdWNoeSBjZGZfY2hpMiBjZGZfY29udGludW91c191bmlmb3JtIGNkZl9kaXNjcmV0ZV91bmlmb3JtJ1xuICAgICAgKyAnIGNkZl9leHAgY2RmX2YgY2RmX2dhbW1hIGNkZl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBjZGZfZ2VvbWV0cmljIGNkZl9ndW1iZWwnXG4gICAgICArICcgY2RmX2h5cGVyZ2VvbWV0cmljIGNkZl9sYXBsYWNlIGNkZl9sb2dpc3RpYyBjZGZfbG9nbm9ybWFsIGNkZl9uZWdhdGl2ZV9iaW5vbWlhbCdcbiAgICAgICsgJyBjZGZfbm9uY2VudHJhbF9jaGkyIGNkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBjZGZfbm9ybWFsIGNkZl9wYXJldG8gY2RmX3BvaXNzb24nXG4gICAgICArICcgY2RmX3Jhbmtfc3VtIGNkZl9yYXlsZWlnaCBjZGZfc2lnbmVkX3JhbmsgY2RmX3N0dWRlbnRfdCBjZGZfd2VpYnVsbCBjZGlzcGxheSdcbiAgICAgICsgJyBjZWlsaW5nIGNlbnRyYWxfbW9tZW50IGNlcXVhbCBjZXF1YWxpZ25vcmUgY2YgY2ZkaXNyZXAgY2ZleHBhbmQgY2dlb2Rlc2ljJ1xuICAgICAgKyAnIGNncmVhdGVycCBjZ3JlYXRlcnBpZ25vcmUgY2hhbmdlbmFtZSBjaGFuZ2V2YXIgY2hhb3NnYW1lIGNoYXJhdCBjaGFyZnVuIGNoYXJmdW4yJ1xuICAgICAgKyAnIGNoYXJsaXN0IGNoYXJwIGNoYXJwb2x5IGNoZGlyIGNoZWJ5c2hldl90IGNoZWJ5c2hldl91IGNoZWNrZGl2IGNoZWNrX292ZXJsYXBzJ1xuICAgICAgKyAnIGNoaW5lc2UgY2hvbGVza3kgY2hyaXN0b2YgY2hyb21hdGljX2luZGV4IGNocm9tYXRpY19udW1iZXIgY2ludCBjaXJjdWxhbnRfZ3JhcGgnXG4gICAgICArICcgY2xlYXJfZWRnZV93ZWlnaHQgY2xlYXJfcnVsZXMgY2xlYXJfdmVydGV4X2xhYmVsIGNsZWJzY2hfZ29yZGFuIGNsZWJzY2hfZ3JhcGgnXG4gICAgICArICcgY2xlc3NwIGNsZXNzcGlnbm9yZSBjbG9zZSBjbG9zZWZpbGUgY21ldHJpYyBjb2VmZiBjb2VmbWF0cml4IGNvZ3JhZCBjb2wgY29sbGFwc2UnXG4gICAgICArICcgY29sbGVjdHRlcm1zIGNvbHVtbm9wIGNvbHVtbnNwYWNlIGNvbHVtbnN3YXAgY29sdW1udmVjdG9yIGNvbWJpbmF0aW9uIGNvbWJpbmUnXG4gICAgICArICcgY29tcDJwdWkgY29tcGFyZSBjb21wZmlsZSBjb21waWxlIGNvbXBpbGVfZmlsZSBjb21wbGVtZW50X2dyYXBoIGNvbXBsZXRlX2JpcGFydGl0ZV9ncmFwaCdcbiAgICAgICsgJyBjb21wbGV0ZV9ncmFwaCBjb21wbGV4X251bWJlcl9wIGNvbXBvbmVudHMgY29tcG9zZV9mdW5jdGlvbnMgY29uY2FuIGNvbmNhdCdcbiAgICAgICsgJyBjb25qdWdhdGUgY29ubWV0ZGVyaXYgY29ubmVjdGVkX2NvbXBvbmVudHMgY29ubmVjdF92ZXJ0aWNlcyBjb25zIGNvbnN0YW50J1xuICAgICAgKyAnIGNvbnN0YW50cCBjb25zdGl0dWVudCBjb25zdHZhbHVlIGNvbnQycGFydCBjb250ZW50IGNvbnRpbnVvdXNfZnJlcSBjb250b3J0aW9uJ1xuICAgICAgKyAnIGNvbnRvdXJfcGxvdCBjb250cmFjdCBjb250cmFjdF9lZGdlIGNvbnRyYWdyYWQgY29udHJpYl9vZGUgY29udmVydCBjb29yZCdcbiAgICAgICsgJyBjb3B5IGNvcHlfZmlsZSBjb3B5X2dyYXBoIGNvcHlsaXN0IGNvcHltYXRyaXggY29yIGNvcyBjb3NoIGNvdCBjb3RoIGNvdiBjb3YxJ1xuICAgICAgKyAnIGNvdmRpZmYgY292ZWN0IGNvdmVycyBjcmMyNHN1bSBjcmVhdGVfZ3JhcGggY3JlYXRlX2xpc3QgY3NjIGNzY2ggY3NldHVwIGNzcGxpbmUnXG4gICAgICArICcgY3RheWxvciBjdF9jb29yZHN5cyBjdHJhbnNmb3JtIGN0cmFuc3Bvc2UgY3ViZV9ncmFwaCBjdWJvY3RhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIGN1bmxpc3AgY3YgY3ljbGVfZGlncmFwaCBjeWNsZV9ncmFwaCBjeWxpbmRyaWNhbCBkYXlzMzYwIGRibGludCBkZWFjdGl2YXRlJ1xuICAgICAgKyAnIGRlY2xhcmUgZGVjbGFyZV9jb25zdHZhbHVlIGRlY2xhcmVfZGltZW5zaW9ucyBkZWNsYXJlX2Z1bmRhbWVudGFsX2RpbWVuc2lvbnMnXG4gICAgICArICcgZGVjbGFyZV9mdW5kYW1lbnRhbF91bml0cyBkZWNsYXJlX3F0eSBkZWNsYXJlX3RyYW5zbGF0ZWQgZGVjbGFyZV91bml0X2NvbnZlcnNpb24nXG4gICAgICArICcgZGVjbGFyZV91bml0cyBkZWNsYXJlX3dlaWdodHMgZGVjc3ltIGRlZmNvbiBkZWZpbmUgZGVmaW5lX2FsdF9kaXNwbGF5IGRlZmluZV92YXJpYWJsZSdcbiAgICAgICsgJyBkZWZpbnQgZGVmbWF0Y2ggZGVmcnVsZSBkZWZzdHJ1Y3QgZGVmdGF5bG9yIGRlZ3JlZV9zZXF1ZW5jZSBkZWwgZGVsZXRlIGRlbGV0ZW4nXG4gICAgICArICcgZGVsdGEgZGVtbyBkZW1vaXZyZSBkZW5vbSBkZXBlbmRzIGRlcml2ZGVncmVlIGRlcml2bGlzdCBkZXNjcmliZSBkZXNvbHZlJ1xuICAgICAgKyAnIGRldGVybWluYW50IGRmbG9hdCBkZ2F1c3NfYSBkZ2F1c3NfYiBkZ2VldiBkZ2VtbSBkZ2VxcmYgZGdlc3YgZGdlc3ZkIGRpYWcnXG4gICAgICArICcgZGlhZ21hdHJpeCBkaWFnX21hdHJpeCBkaWFnbWF0cml4cCBkaWFtZXRlciBkaWZmIGRpZ2l0Y2hhcnAgZGltYWNzX2V4cG9ydCdcbiAgICAgICsgJyBkaW1hY3NfaW1wb3J0IGRpbWVuc2lvbiBkaW1lbnNpb25sZXNzIGRpbWVuc2lvbnMgZGltZW5zaW9uc19hc19saXN0IGRpcmVjdCdcbiAgICAgICsgJyBkaXJlY3RvcnkgZGlzY3JldGVfZnJlcSBkaXNqb2luIGRpc2pvaW50cCBkaXNvbGF0ZSBkaXNwIGRpc3Bjb24gZGlzcGZvcm0nXG4gICAgICArICcgZGlzcGZ1biBkaXNwSm9yZGFuIGRpc3BsYXkgZGlzcHJ1bGUgZGlzcHRlcm1zIGRpc3RyaWIgZGl2aWRlIGRpdmlzb3JzIGRpdnN1bSdcbiAgICAgICsgJyBka3VtbWVyX20gZGt1bW1lcl91IGRsYW5nZSBkb2RlY2FoZWRyb25fZ3JhcGggZG90cHJvZHVjdCBkb3RzaW1wIGRwYXJ0J1xuICAgICAgKyAnIGRyYXcgZHJhdzJkIGRyYXczZCBkcmF3ZGYgZHJhd19maWxlIGRyYXdfZ3JhcGggZHNjYWxhciBlY2hlbG9uIGVkZ2VfY29sb3JpbmcnXG4gICAgICArICcgZWRnZV9jb25uZWN0aXZpdHkgZWRnZXMgZWlnZW5zX2J5X2phY29iaSBlaWdlbnZhbHVlcyBlaWdlbnZlY3RvcnMgZWlnaHRoJ1xuICAgICAgKyAnIGVpbnN0ZWluIGVpdmFscyBlaXZlY3RzIGVsYXBzZWRfcmVhbF90aW1lIGVsYXBzZWRfcnVuX3RpbWUgZWxlMmNvbXAgZWxlMnBvbHlub21lJ1xuICAgICAgKyAnIGVsZTJwdWkgZWxlbSBlbGVtZW50cCBlbGV2YXRpb25fZ3JpZCBlbGltIGVsaW1fYWxsYnV0IGVsaW1pbmF0ZSBlbGltaW5hdGVfdXNpbmcnXG4gICAgICArICcgZWxsaXBzZSBlbGxpcHRpY19lIGVsbGlwdGljX2VjIGVsbGlwdGljX2V1IGVsbGlwdGljX2YgZWxsaXB0aWNfa2MgZWxsaXB0aWNfcGknXG4gICAgICArICcgZW1hdHJpeCBlbXB0eV9ncmFwaCBlbXB0eXAgZW5kY29ucyBlbnRlcm1hdHJpeCBlbnRlcnRlbnNvciBlbnRpZXIgZXF1YWwgZXF1YWxwJ1xuICAgICAgKyAnIGVxdWl2X2NsYXNzZXMgZXJmIGVyZmMgZXJmX2dlbmVyYWxpemVkIGVyZmkgZXJyY2F0Y2ggZXJyb3IgZXJyb3Jtc2cgZXJyb3JzJ1xuICAgICAgKyAnIGV1bGVyIGV2IGV2YWxfc3RyaW5nIGV2ZW5wIGV2ZXJ5IGV2b2x1dGlvbiBldm9sdXRpb24yZCBldnVuZGlmZiBleGFtcGxlIGV4cCdcbiAgICAgICsgJyBleHBhbmQgZXhwYW5kd3J0IGV4cGFuZHdydF9mYWN0b3JlZCBleHBpbnQgZXhwaW50ZWdyYWxfY2hpIGV4cGludGVncmFsX2NpJ1xuICAgICAgKyAnIGV4cGludGVncmFsX2UgZXhwaW50ZWdyYWxfZTEgZXhwaW50ZWdyYWxfZWkgZXhwaW50ZWdyYWxfZV9zaW1wbGlmeSBleHBpbnRlZ3JhbF9saSdcbiAgICAgICsgJyBleHBpbnRlZ3JhbF9zaGkgZXhwaW50ZWdyYWxfc2kgZXhwbGljaXQgZXhwbG9zZSBleHBvbmVudGlhbGl6ZSBleHByZXNzIGV4cHQnXG4gICAgICArICcgZXhzZWMgZXh0ZGlmZiBleHRyYWN0X2xpbmVhcl9lcXVhdGlvbnMgZXh0cmVtYWxfc3Vic2V0IGV6Z2NkICVmIGY5MCBmYWNzdW0nXG4gICAgICArICcgZmFjdGNvbWIgZmFjdG9yIGZhY3RvcmZhY3N1bSBmYWN0b3JpYWwgZmFjdG9yb3V0IGZhY3RvcnN1bSBmYWN0cyBmYXN0X2NlbnRyYWxfZWxlbWVudHMnXG4gICAgICArICcgZmFzdF9saW5zb2x2ZSBmYXN0dGltZXMgZmVhdHVyZXAgZmVybmZhbGUgZmZ0IGZpYiBmaWJ0b3BoaSBmaWZ0aCBmaWxlbmFtZV9tZXJnZSdcbiAgICAgICsgJyBmaWxlX3NlYXJjaCBmaWxlX3R5cGUgZmlsbGFycmF5IGZpbmRkZSBmaW5kX3Jvb3QgZmluZF9yb290X2FicyBmaW5kX3Jvb3RfZXJyb3InXG4gICAgICArICcgZmluZF9yb290X3JlbCBmaXJzdCBmaXggZmxhdHRlbiBmbGVuZ3RoIGZsb2F0IGZsb2F0bnVtcCBmbG9vciBmbG93ZXJfc25hcmsnXG4gICAgICArICcgZmx1c2ggZmx1c2gxZGVyaXYgZmx1c2hkIGZsdXNobmQgZmx1c2hfb3V0cHV0IGZtaW5fY29ieWxhIGZvcmdldCBmb3J0cmFuJ1xuICAgICAgKyAnIGZvdXJjb3MgZm91cmV4cGFuZCBmb3VyaWVyIGZvdXJpZXJfZWxpbSBmb3VyaW50IGZvdXJpbnRjb3MgZm91cmludHNpbiBmb3Vyc2ltcCdcbiAgICAgICsgJyBmb3Vyc2luIGZvdXJ0aCBmcG9zaXRpb24gZnJhbWVfYnJhY2tldCBmcmVlb2YgZnJlc2hsaW5lIGZyZXNuZWxfYyBmcmVzbmVsX3MnXG4gICAgICArICcgZnJvbV9hZGphY2VuY3lfbWF0cml4IGZydWNodF9ncmFwaCBmdWxsX2xpc3RpZnkgZnVsbG1hcCBmdWxsbWFwbCBmdWxscmF0c2ltcCdcbiAgICAgICsgJyBmdWxscmF0c3Vic3QgZnVsbHNldGlmeSBmdW5jc29sdmUgZnVuZGFtZW50YWxfZGltZW5zaW9ucyBmdW5kYW1lbnRhbF91bml0cydcbiAgICAgICsgJyBmdW5kZWYgZnVubWFrZSBmdW5wIGZ2IGcwIGcxIGdhbW1hIGdhbW1hX2dyZWVrIGdhbW1hX2luY29tcGxldGUgZ2FtbWFfaW5jb21wbGV0ZV9nZW5lcmFsaXplZCdcbiAgICAgICsgJyBnYW1tYV9pbmNvbXBsZXRlX3JlZ3VsYXJpemVkIGdhdXNzIGdhdXNzX2EgZ2F1c3NfYiBnYXVzc3Byb2IgZ2NkIGdjZGV4IGdjZGl2aWRlJ1xuICAgICAgKyAnIGdjZmFjIGdjZmFjdG9yIGdkIGdlbmVyYWxpemVkX2xhbWJlcnRfdyBnZW5mYWN0IGdlbl9sYWd1ZXJyZSBnZW5tYXRyaXggZ2Vuc3ltJ1xuICAgICAgKyAnIGdlb19hbW9ydGl6YXRpb24gZ2VvX2FubnVpdHlfZnYgZ2VvX2FubnVpdHlfcHYgZ2VvbWFwIGdlb21ldHJpYyBnZW9tZXRyaWNfbWVhbidcbiAgICAgICsgJyBnZW9zdW0gZ2V0IGdldGN1cnJlbnRkaXJlY3RvcnkgZ2V0X2VkZ2Vfd2VpZ2h0IGdldGVudiBnZXRfbHVfZmFjdG9ycyBnZXRfb3V0cHV0X3N0cmVhbV9zdHJpbmcnXG4gICAgICArICcgZ2V0X3BpeGVsIGdldF9wbG90X29wdGlvbiBnZXRfdGV4X2Vudmlyb25tZW50IGdldF90ZXhfZW52aXJvbm1lbnRfZGVmYXVsdCdcbiAgICAgICsgJyBnZXRfdmVydGV4X2xhYmVsIGdmYWN0b3IgZ2ZhY3RvcnN1bSBnZ2YgZ2lydGggZ2xvYmFsX3ZhcmlhbmNlcyBnbiBnbnVwbG90X2Nsb3NlJ1xuICAgICAgKyAnIGdudXBsb3RfcmVwbG90IGdudXBsb3RfcmVzZXQgZ251cGxvdF9yZXN0YXJ0IGdudXBsb3Rfc3RhcnQgZ28gR29zcGVyIEdvc3BlclN1bSdcbiAgICAgICsgJyBncjJkIGdyM2QgZ3JhZGVmIGdyYW1zY2htaWR0IGdyYXBoNl9kZWNvZGUgZ3JhcGg2X2VuY29kZSBncmFwaDZfZXhwb3J0IGdyYXBoNl9pbXBvcnQnXG4gICAgICArICcgZ3JhcGhfY2VudGVyIGdyYXBoX2NoYXJwb2x5IGdyYXBoX2VpZ2VudmFsdWVzIGdyYXBoX2Zsb3cgZ3JhcGhfb3JkZXIgZ3JhcGhfcGVyaXBoZXJ5J1xuICAgICAgKyAnIGdyYXBoX3Byb2R1Y3QgZ3JhcGhfc2l6ZSBncmFwaF91bmlvbiBncmVhdF9yaG9tYmljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIGdyZWF0X3Job21iaWN1Ym9jdGFoZWRyb25fZ3JhcGgnXG4gICAgICArICcgZ3JpZF9ncmFwaCBncmluZCBncm9ibmVyX2Jhc2lzIGdyb3R6Y2hfZ3JhcGggaGFtaWx0b25fY3ljbGUgaGFtaWx0b25fcGF0aCdcbiAgICAgICsgJyBoYW5rZWwgaGFua2VsXzEgaGFua2VsXzIgaGFybW9uaWMgaGFybW9uaWNfbWVhbiBoYXYgaGVhd29vZF9ncmFwaCBoZXJtaXRlJ1xuICAgICAgKyAnIGhlc3NpYW4gaGdmcmVkIGhpbGJlcnRtYXAgaGlsYmVydF9tYXRyaXggaGlwb3cgaGlzdG9ncmFtIGhpc3RvZ3JhbV9kZXNjcmlwdGlvbidcbiAgICAgICsgJyBob2RnZSBob3JuZXIgaHlwZXJnZW9tZXRyaWMgaTAgaTEgJWliZXMgaWMxIGljMiBpY19jb252ZXJ0IGljaHIxIGljaHIyIGljb3NhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIGljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIGljdXJ2YXR1cmUgaWRlbnQgaWRlbnRmb3IgaWRlbnRpdHkgaWRpZmYgaWRpbSBpZHVtbXknXG4gICAgICArICcgaWVxbiAlaWYgaWZhY3RvcnMgaWZyYW1lcyBpZnMgaWdjZGV4IGlnZW9kZXNpY19jb29yZHMgaWx0IGltYWdlIGltYWdwYXJ0J1xuICAgICAgKyAnIGltZXRyaWMgaW1wbGljaXQgaW1wbGljaXRfZGVyaXZhdGl2ZSBpbXBsaWNpdF9wbG90IGluZGV4ZWRfdGVuc29yIGluZGljZXMnXG4gICAgICArICcgaW5kdWNlZF9zdWJncmFwaCBpbmZlcmVuY2VwIGluZmVyZW5jZV9yZXN1bHQgaW5maXggaW5mb19kaXNwbGF5IGluaXRfYXRlbnNvcidcbiAgICAgICsgJyBpbml0X2N0ZW5zb3IgaW5fbmVpZ2hib3JzIGlubmVycHJvZHVjdCBpbnBhcnQgaW5wcm9kIGlucnQgaW50ZWdlcnAgaW50ZWdlcl9wYXJ0aXRpb25zJ1xuICAgICAgKyAnIGludGVncmF0ZSBpbnRlcnNlY3QgaW50ZXJzZWN0aW9uIGludGVydmFscCBpbnRvcG9pcyBpbnRvc3VtIGludmFyaWFudDEgaW52YXJpYW50MidcbiAgICAgICsgJyBpbnZlcnNlX2ZmdCBpbnZlcnNlX2phY29iaV9jZCBpbnZlcnNlX2phY29iaV9jbiBpbnZlcnNlX2phY29iaV9jcyBpbnZlcnNlX2phY29iaV9kYydcbiAgICAgICsgJyBpbnZlcnNlX2phY29iaV9kbiBpbnZlcnNlX2phY29iaV9kcyBpbnZlcnNlX2phY29iaV9uYyBpbnZlcnNlX2phY29iaV9uZCBpbnZlcnNlX2phY29iaV9ucydcbiAgICAgICsgJyBpbnZlcnNlX2phY29iaV9zYyBpbnZlcnNlX2phY29iaV9zZCBpbnZlcnNlX2phY29iaV9zbiBpbnZlcnQgaW52ZXJ0X2J5X2Fkam9pbnQnXG4gICAgICArICcgaW52ZXJ0X2J5X2x1IGludl9tb2QgaXJyIGlzIGlzX2JpY29ubmVjdGVkIGlzX2JpcGFydGl0ZSBpc19jb25uZWN0ZWQgaXNfZGlncmFwaCdcbiAgICAgICsgJyBpc19lZGdlX2luX2dyYXBoIGlzX2dyYXBoIGlzX2dyYXBoX29yX2RpZ3JhcGggaXNob3cgaXNfaXNvbW9ycGhpYyBpc29sYXRlJ1xuICAgICAgKyAnIGlzb21vcnBoaXNtIGlzX3BsYW5hciBpc3FydCBpc3JlYWxfcCBpc19zY29ubmVjdGVkIGlzX3RyZWUgaXNfdmVydGV4X2luX2dyYXBoJ1xuICAgICAgKyAnIGl0ZW1zX2luZmVyZW5jZSAlaiBqMCBqMSBqYWNvYmkgamFjb2JpYW4gamFjb2JpX2NkIGphY29iaV9jbiBqYWNvYmlfY3MgamFjb2JpX2RjJ1xuICAgICAgKyAnIGphY29iaV9kbiBqYWNvYmlfZHMgamFjb2JpX25jIGphY29iaV9uZCBqYWNvYmlfbnMgamFjb2JpX3AgamFjb2JpX3NjIGphY29iaV9zZCdcbiAgICAgICsgJyBqYWNvYmlfc24gSkYgam4gam9pbiBqb3JkYW4ganVsaWEganVsaWFfc2V0IGp1bGlhX3NpbiAlayBrZGVscyBrZGVsdGEga2lsbCdcbiAgICAgICsgJyBraWxsY29udGV4dCBrb3N0a2Ega3Jvbl9kZWx0YSBrcm9uZWNrZXJfcHJvZHVjdCBrdW1tZXJfbSBrdW1tZXJfdSBrdXJ0b3NpcydcbiAgICAgICsgJyBrdXJ0b3Npc19iZXJub3VsbGkga3VydG9zaXNfYmV0YSBrdXJ0b3Npc19iaW5vbWlhbCBrdXJ0b3Npc19jaGkyIGt1cnRvc2lzX2NvbnRpbnVvdXNfdW5pZm9ybSdcbiAgICAgICsgJyBrdXJ0b3Npc19kaXNjcmV0ZV91bmlmb3JtIGt1cnRvc2lzX2V4cCBrdXJ0b3Npc19mIGt1cnRvc2lzX2dhbW1hIGt1cnRvc2lzX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIGt1cnRvc2lzX2dlb21ldHJpYyBrdXJ0b3Npc19ndW1iZWwga3VydG9zaXNfaHlwZXJnZW9tZXRyaWMga3VydG9zaXNfbGFwbGFjZSdcbiAgICAgICsgJyBrdXJ0b3Npc19sb2dpc3RpYyBrdXJ0b3Npc19sb2dub3JtYWwga3VydG9zaXNfbmVnYXRpdmVfYmlub21pYWwga3VydG9zaXNfbm9uY2VudHJhbF9jaGkyJ1xuICAgICAgKyAnIGt1cnRvc2lzX25vbmNlbnRyYWxfc3R1ZGVudF90IGt1cnRvc2lzX25vcm1hbCBrdXJ0b3Npc19wYXJldG8ga3VydG9zaXNfcG9pc3NvbidcbiAgICAgICsgJyBrdXJ0b3Npc19yYXlsZWlnaCBrdXJ0b3Npc19zdHVkZW50X3Qga3VydG9zaXNfd2VpYnVsbCBsYWJlbCBsYWJlbHMgbGFncmFuZ2UnXG4gICAgICArICcgbGFndWVycmUgbGFtYmRhIGxhbWJlcnRfdyBsYXBsYWNlIGxhcGxhY2lhbl9tYXRyaXggbGFzdCBsYmZncyBsYzJrZHQgbGNoYXJwJ1xuICAgICAgKyAnIGxjX2wgbGNtIGxjX3UgbGRlZmludCBsZGlzcCBsZGlzcGxheSBsZWdlbmRyZV9wIGxlZ2VuZHJlX3EgbGVpbnN0ZWluIGxlbmd0aCdcbiAgICAgICsgJyBsZXQgbGV0cnVsZXMgbGV0c2ltcCBsZXZpX2Npdml0YSBsZnJlZW9mIGxndHJlaWxsaXMgbGhzIGxpIGxpZWRpZmYgbGltaXQnXG4gICAgICArICcgTGluZHN0ZWR0IGxpbmVhciBsaW5lYXJpbnRlcnBvbCBsaW5lYXJfcHJvZ3JhbSBsaW5lYXJfcmVncmVzc2lvbiBsaW5lX2dyYXBoJ1xuICAgICAgKyAnIGxpbnNvbHZlIGxpc3RhcnJheSBsaXN0X2NvcnJlbGF0aW9ucyBsaXN0aWZ5IGxpc3RfbWF0cml4X2VudHJpZXMgbGlzdF9uY19tb25vbWlhbHMnXG4gICAgICArICcgbGlzdG9mdGVucyBsaXN0b2Z2YXJzIGxpc3RwIGxtYXggbG1pbiBsb2FkIGxvYWRmaWxlIGxvY2FsIGxvY2F0ZV9tYXRyaXhfZW50cnknXG4gICAgICArICcgbG9nIGxvZ2NvbnRyYWN0IGxvZ19nYW1tYSBsb3BvdyBsb3JlbnR6X2dhdWdlIGxvd2VyY2FzZXAgbHBhcnQgbHJhdHN1YnN0J1xuICAgICAgKyAnIGxyZWR1Y2UgbHJpZW1hbm4gbHNxdWFyZXNfZXN0aW1hdGVzIGxzcXVhcmVzX2VzdGltYXRlc19hcHByb3hpbWF0ZSBsc3F1YXJlc19lc3RpbWF0ZXNfZXhhY3QnXG4gICAgICArICcgbHNxdWFyZXNfbXNlIGxzcXVhcmVzX3Jlc2lkdWFsX21zZSBsc3F1YXJlc19yZXNpZHVhbHMgbHN1bSBsdHJlaWxsaXMgbHVfYmFja3N1YidcbiAgICAgICsgJyBsdWNhcyBsdV9mYWN0b3IgJW0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQxIG1ha2VfYXJyYXkgbWFrZWJveCBtYWtlZmFjdCBtYWtlZ2FtbWEnXG4gICAgICArICcgbWFrZV9ncmFwaCBtYWtlX2xldmVsX3BpY3R1cmUgbWFrZWxpc3QgbWFrZU9yZGVycyBtYWtlX3BvbHlfY29udGluZW50IG1ha2VfcG9seV9jb3VudHJ5J1xuICAgICAgKyAnIG1ha2VfcG9seWdvbiBtYWtlX3JhbmRvbV9zdGF0ZSBtYWtlX3JnYl9waWN0dXJlIG1ha2VzZXQgbWFrZV9zdHJpbmdfaW5wdXRfc3RyZWFtJ1xuICAgICAgKyAnIG1ha2Vfc3RyaW5nX291dHB1dF9zdHJlYW0gbWFrZV90cmFuc2Zvcm0gbWFuZGVsYnJvdCBtYW5kZWxicm90X3NldCBtYXAgbWFwYXRvbSdcbiAgICAgICsgJyBtYXBsaXN0IG1hdGNoZGVjbGFyZSBtYXRjaGZpeCBtYXRfY29uZCBtYXRfZnVsbHVuYmxvY2tlciBtYXRfZnVuY3Rpb24gbWF0aG1sX2Rpc3BsYXknXG4gICAgICArICcgbWF0X25vcm0gbWF0cml4IG1hdHJpeG1hcCBtYXRyaXhwIG1hdHJpeF9zaXplIG1hdHRyYWNlIG1hdF90cmFjZSBtYXRfdW5ibG9ja2VyJ1xuICAgICAgKyAnIG1heCBtYXhfY2xpcXVlIG1heF9kZWdyZWUgbWF4X2Zsb3cgbWF4aW1pemVfbHAgbWF4X2luZGVwZW5kZW50X3NldCBtYXhfbWF0Y2hpbmcnXG4gICAgICArICcgbWF5YmUgbWQ1c3VtIG1lYW4gbWVhbl9iZXJub3VsbGkgbWVhbl9iZXRhIG1lYW5fYmlub21pYWwgbWVhbl9jaGkyIG1lYW5fY29udGludW91c191bmlmb3JtJ1xuICAgICAgKyAnIG1lYW5fZGV2aWF0aW9uIG1lYW5fZGlzY3JldGVfdW5pZm9ybSBtZWFuX2V4cCBtZWFuX2YgbWVhbl9nYW1tYSBtZWFuX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIG1lYW5fZ2VvbWV0cmljIG1lYW5fZ3VtYmVsIG1lYW5faHlwZXJnZW9tZXRyaWMgbWVhbl9sYXBsYWNlIG1lYW5fbG9naXN0aWMnXG4gICAgICArICcgbWVhbl9sb2dub3JtYWwgbWVhbl9uZWdhdGl2ZV9iaW5vbWlhbCBtZWFuX25vbmNlbnRyYWxfY2hpMiBtZWFuX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIG1lYW5fbm9ybWFsIG1lYW5fcGFyZXRvIG1lYW5fcG9pc3NvbiBtZWFuX3JheWxlaWdoIG1lYW5fc3R1ZGVudF90IG1lYW5fd2VpYnVsbCdcbiAgICAgICsgJyBtZWRpYW4gbWVkaWFuX2RldmlhdGlvbiBtZW1iZXIgbWVzaCBtZXRyaWNleHBhbmRhbGwgbWdmMV9zaGExIG1pbiBtaW5fZGVncmVlJ1xuICAgICAgKyAnIG1pbl9lZGdlX2N1dCBtaW5mYWN0b3JpYWwgbWluaW1hbFBvbHkgbWluaW1pemVfbHAgbWluaW11bV9zcGFubmluZ190cmVlIG1pbm9yJ1xuICAgICAgKyAnIG1pbnBhY2tfbHNxdWFyZXMgbWlucGFja19zb2x2ZSBtaW5fdmVydGV4X2NvdmVyIG1pbl92ZXJ0ZXhfY3V0IG1rZGlyIG1uZXd0b24nXG4gICAgICArICcgbW9kIG1vZGVfZGVjbGFyZSBtb2RlX2lkZW50aXR5IE1vZGVNYXRyaXggbW9lYml1cyBtb24yc2NodXIgbW9ubyBtb25vbWlhbF9kaW1lbnNpb25zJ1xuICAgICAgKyAnIG11bHRpYmVybnN0ZWluX3BvbHkgbXVsdGlfZGlzcGxheV9mb3JfdGV4aW5mbyBtdWx0aV9lbGVtIG11bHRpbm9taWFsIG11bHRpbm9taWFsX2NvZWZmJ1xuICAgICAgKyAnIG11bHRpX29yYml0IG11bHRpcGxvdF9tb2RlIG11bHRpX3B1aSBtdWx0c3ltIG11bHR0aHJ1IG15Y2llbHNraV9ncmFwaCBuYXJ5J1xuICAgICAgKyAnIG5hdHVyYWxfdW5pdCBuY19kZWdyZWUgbmNleHB0IG5jaGFycG9seSBuZWdhdGl2ZV9waWN0dXJlIG5laWdoYm9ycyBuZXcgbmV3Y29udGV4dCdcbiAgICAgICsgJyBuZXdkZXQgbmV3X2dyYXBoIG5ld2xpbmUgbmV3dG9uIG5ld192YXJpYWJsZSBuZXh0X3ByaW1lIG5pY2VkdW1taWVzIG5pY2VpbmRpY2VzJ1xuICAgICAgKyAnIG5pbnRoIG5vZml4IG5vbmFycmF5IG5vbmNlbnRyYWxfbW9tZW50IG5vbm1ldHJpY2l0eSBub25uZWdpbnRlZ2VycCBub25zY2FsYXJwJ1xuICAgICAgKyAnIG5vbnplcm9hbmRmcmVlb2Ygbm90ZXF1YWwgbm91bmlmeSBucHRldHJhZCBucHYgbnJvb3RzIG50ZXJtcyBudGVybXN0J1xuICAgICAgKyAnIG50aHJvb3QgbnVsbGl0eSBudWxsc3BhY2UgbnVtIG51bWJlcmVkX2JvdW5kYXJpZXMgbnVtYmVycCBudW1iZXJfdG9fb2N0ZXRzJ1xuICAgICAgKyAnIG51bV9kaXN0aW5jdF9wYXJ0aXRpb25zIG51bWVydmFsIG51bWZhY3RvciBudW1fcGFydGl0aW9ucyBudXN1bSBuemV0YSBuemV0YWknXG4gICAgICArICcgbnpldGFyIG9jdGV0c190b19udW1iZXIgb2N0ZXRzX3RvX29pZCBvZGRfZ2lydGggb2RkcCBvZGUyIG9kZV9jaGVjayBvZGVsaW4nXG4gICAgICArICcgb2lkX3RvX29jdGV0cyBvcCBvcGVuYSBvcGVuYV9iaW5hcnkgb3BlbnIgb3BlbnJfYmluYXJ5IG9wZW53IG9wZW53X2JpbmFyeSdcbiAgICAgICsgJyBvcGVyYXRvcnAgb3BzdWJzdCBvcHRpbWl6ZSAlb3Igb3JiaXQgb3JiaXRzIG9yZGVyZ3JlYXQgb3JkZXJncmVhdHAgb3JkZXJsZXNzJ1xuICAgICAgKyAnIG9yZGVybGVzc3Agb3J0aG9nb25hbF9jb21wbGVtZW50IG9ydGhvcG9seV9yZWN1ciBvcnRob3BvbHlfd2VpZ2h0IG91dGVybWFwJ1xuICAgICAgKyAnIG91dF9uZWlnaGJvcnMgb3V0b2Zwb2lzIHBhZGUgcGFyYWJvbGljX2N5bGluZGVyX2QgcGFyYW1ldHJpYyBwYXJhbWV0cmljX3N1cmZhY2UnXG4gICAgICArICcgcGFyZyBwYXJHb3NwZXIgcGFyc2Vfc3RyaW5nIHBhcnNlX3RpbWVkYXRlIHBhcnQgcGFydDJjb250IHBhcnRmcmFjIHBhcnRpdGlvbidcbiAgICAgICsgJyBwYXJ0aXRpb25fc2V0IHBhcnRwb2wgcGF0aF9kaWdyYXBoIHBhdGhfZ3JhcGggcGF0aG5hbWVfZGlyZWN0b3J5IHBhdGhuYW1lX25hbWUnXG4gICAgICArICcgcGF0aG5hbWVfdHlwZSBwZGZfYmVybm91bGxpIHBkZl9iZXRhIHBkZl9iaW5vbWlhbCBwZGZfY2F1Y2h5IHBkZl9jaGkyIHBkZl9jb250aW51b3VzX3VuaWZvcm0nXG4gICAgICArICcgcGRmX2Rpc2NyZXRlX3VuaWZvcm0gcGRmX2V4cCBwZGZfZiBwZGZfZ2FtbWEgcGRmX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlJ1xuICAgICAgKyAnIHBkZl9nZW9tZXRyaWMgcGRmX2d1bWJlbCBwZGZfaHlwZXJnZW9tZXRyaWMgcGRmX2xhcGxhY2UgcGRmX2xvZ2lzdGljIHBkZl9sb2dub3JtYWwnXG4gICAgICArICcgcGRmX25lZ2F0aXZlX2Jpbm9taWFsIHBkZl9ub25jZW50cmFsX2NoaTIgcGRmX25vbmNlbnRyYWxfc3R1ZGVudF90IHBkZl9ub3JtYWwnXG4gICAgICArICcgcGRmX3BhcmV0byBwZGZfcG9pc3NvbiBwZGZfcmFua19zdW0gcGRmX3JheWxlaWdoIHBkZl9zaWduZWRfcmFuayBwZGZfc3R1ZGVudF90J1xuICAgICAgKyAnIHBkZl93ZWlidWxsIHBlYXJzb25fc2tld25lc3MgcGVybWFuZW50IHBlcm11dCBwZXJtdXRhdGlvbiBwZXJtdXRhdGlvbnMgcGV0ZXJzZW5fZ3JhcGgnXG4gICAgICArICcgcGV0cm92IHBpY2thcGFydCBwaWN0dXJlX2VxdWFscCBwaWN0dXJlcCBwaWVjaGFydCBwaWVjaGFydF9kZXNjcmlwdGlvbiBwbGFuYXJfZW1iZWRkaW5nJ1xuICAgICAgKyAnIHBsYXliYWNrIHBsb2cgcGxvdDJkIHBsb3QzZCBwbG90ZGYgcGxvdGVxIHBsc3F1YXJlcyBwb2NoaGFtbWVyIHBvaW50cyBwb2lzZGlmZidcbiAgICAgICsgJyBwb2lzZXhwdCBwb2lzaW50IHBvaXNtYXAgcG9pc3BsdXMgcG9pc3NpbXAgcG9pc3N1YnN0IHBvaXN0aW1lcyBwb2lzdHJpbSBwb2xhcidcbiAgICAgICsgJyBwb2xhcmZvcm0gcG9sYXJ0b3JlY3QgcG9sYXJfdG9feHkgcG9seV9hZGQgcG9seV9idWNoYmVyZ2VyIHBvbHlfYnVjaGJlcmdlcl9jcml0ZXJpb24nXG4gICAgICArICcgcG9seV9jb2xvbl9pZGVhbCBwb2x5X2NvbnRlbnQgcG9seWRlY29tcCBwb2x5X2RlcGVuZHNfcCBwb2x5X2VsaW1pbmF0aW9uX2lkZWFsJ1xuICAgICAgKyAnIHBvbHlfZXhhY3RfZGl2aWRlIHBvbHlfZXhwYW5kIHBvbHlfZXhwdCBwb2x5X2djZCBwb2x5Z29uIHBvbHlfZ3JvYm5lciBwb2x5X2dyb2JuZXJfZXF1YWwnXG4gICAgICArICcgcG9seV9ncm9ibmVyX21lbWJlciBwb2x5X2dyb2JuZXJfc3Vic2V0cCBwb2x5X2lkZWFsX2ludGVyc2VjdGlvbiBwb2x5X2lkZWFsX3BvbHlzYXR1cmF0aW9uJ1xuICAgICAgKyAnIHBvbHlfaWRlYWxfcG9seXNhdHVyYXRpb24xIHBvbHlfaWRlYWxfc2F0dXJhdGlvbiBwb2x5X2lkZWFsX3NhdHVyYXRpb24xIHBvbHlfbGNtJ1xuICAgICAgKyAnIHBvbHlfbWluaW1pemF0aW9uIHBvbHltb2QgcG9seV9tdWx0aXBseSBwb2x5bm9tZTJlbGUgcG9seW5vbWlhbHAgcG9seV9ub3JtYWxfZm9ybSdcbiAgICAgICsgJyBwb2x5X25vcm1hbGl6ZSBwb2x5X25vcm1hbGl6ZV9saXN0IHBvbHlfcG9seXNhdHVyYXRpb25fZXh0ZW5zaW9uIHBvbHlfcHJpbWl0aXZlX3BhcnQnXG4gICAgICArICcgcG9seV9wc2V1ZG9fZGl2aWRlIHBvbHlfcmVkdWNlZF9ncm9ibmVyIHBvbHlfcmVkdWN0aW9uIHBvbHlfc2F0dXJhdGlvbl9leHRlbnNpb24nXG4gICAgICArICcgcG9seV9zX3BvbHlub21pYWwgcG9seV9zdWJ0cmFjdCBwb2x5dG9jb21wYW5pb24gcG9wIHBvc3RmaXggcG90ZW50aWFsIHBvd2VyX21vZCdcbiAgICAgICsgJyBwb3dlcnNlcmllcyBwb3dlcnNldCBwcmVmaXggcHJldl9wcmltZSBwcmltZXAgcHJpbWVzIHByaW5jaXBhbF9jb21wb25lbnRzJ1xuICAgICAgKyAnIHByaW50IHByaW50ZiBwcmludGZpbGUgcHJpbnRfZ3JhcGggcHJpbnRwb2lzIHByaW50cHJvcHMgcHJvZHJhYyBwcm9kdWN0IHByb3BlcnRpZXMnXG4gICAgICArICcgcHJvcHZhcnMgcHNpIHBzdWJzdCBwdHJpYW5ndWxhcml6ZSBwdWkgcHVpMmNvbXAgcHVpMmVsZSBwdWkycG9seW5vbWUgcHVpX2RpcmVjdCdcbiAgICAgICsgJyBwdWlyZWR1YyBwdXNoIHB1dCBwdiBxcHV0IHFyYW5nZSBxdHkgcXVhZF9jb250cm9sIHF1YWRfcWFnIHF1YWRfcWFnaSBxdWFkX3FhZ3AnXG4gICAgICArICcgcXVhZF9xYWdzIHF1YWRfcWF3YyBxdWFkX3Fhd2YgcXVhZF9xYXdvIHF1YWRfcWF3cyBxdWFkcmlsYXRlcmFsIHF1YW50aWxlJ1xuICAgICAgKyAnIHF1YW50aWxlX2Jlcm5vdWxsaSBxdWFudGlsZV9iZXRhIHF1YW50aWxlX2Jpbm9taWFsIHF1YW50aWxlX2NhdWNoeSBxdWFudGlsZV9jaGkyJ1xuICAgICAgKyAnIHF1YW50aWxlX2NvbnRpbnVvdXNfdW5pZm9ybSBxdWFudGlsZV9kaXNjcmV0ZV91bmlmb3JtIHF1YW50aWxlX2V4cCBxdWFudGlsZV9mJ1xuICAgICAgKyAnIHF1YW50aWxlX2dhbW1hIHF1YW50aWxlX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHF1YW50aWxlX2dlb21ldHJpYyBxdWFudGlsZV9ndW1iZWwnXG4gICAgICArICcgcXVhbnRpbGVfaHlwZXJnZW9tZXRyaWMgcXVhbnRpbGVfbGFwbGFjZSBxdWFudGlsZV9sb2dpc3RpYyBxdWFudGlsZV9sb2dub3JtYWwnXG4gICAgICArICcgcXVhbnRpbGVfbmVnYXRpdmVfYmlub21pYWwgcXVhbnRpbGVfbm9uY2VudHJhbF9jaGkyIHF1YW50aWxlX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHF1YW50aWxlX25vcm1hbCBxdWFudGlsZV9wYXJldG8gcXVhbnRpbGVfcG9pc3NvbiBxdWFudGlsZV9yYXlsZWlnaCBxdWFudGlsZV9zdHVkZW50X3QnXG4gICAgICArICcgcXVhbnRpbGVfd2VpYnVsbCBxdWFydGlsZV9za2V3bmVzcyBxdWl0IHF1bml0IHF1b3RpZW50IHJhY2FoX3YgcmFjYWhfdyByYWRjYW4nXG4gICAgICArICcgcmFkaXVzIHJhbmRvbSByYW5kb21fYmVybm91bGxpIHJhbmRvbV9iZXRhIHJhbmRvbV9iaW5vbWlhbCByYW5kb21fYmlwYXJ0aXRlX2dyYXBoJ1xuICAgICAgKyAnIHJhbmRvbV9jYXVjaHkgcmFuZG9tX2NoaTIgcmFuZG9tX2NvbnRpbnVvdXNfdW5pZm9ybSByYW5kb21fZGlncmFwaCByYW5kb21fZGlzY3JldGVfdW5pZm9ybSdcbiAgICAgICsgJyByYW5kb21fZXhwIHJhbmRvbV9mIHJhbmRvbV9nYW1tYSByYW5kb21fZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgcmFuZG9tX2dlb21ldHJpYydcbiAgICAgICsgJyByYW5kb21fZ3JhcGggcmFuZG9tX2dyYXBoMSByYW5kb21fZ3VtYmVsIHJhbmRvbV9oeXBlcmdlb21ldHJpYyByYW5kb21fbGFwbGFjZSdcbiAgICAgICsgJyByYW5kb21fbG9naXN0aWMgcmFuZG9tX2xvZ25vcm1hbCByYW5kb21fbmVnYXRpdmVfYmlub21pYWwgcmFuZG9tX25ldHdvcmsnXG4gICAgICArICcgcmFuZG9tX25vbmNlbnRyYWxfY2hpMiByYW5kb21fbm9uY2VudHJhbF9zdHVkZW50X3QgcmFuZG9tX25vcm1hbCByYW5kb21fcGFyZXRvJ1xuICAgICAgKyAnIHJhbmRvbV9wZXJtdXRhdGlvbiByYW5kb21fcG9pc3NvbiByYW5kb21fcmF5bGVpZ2ggcmFuZG9tX3JlZ3VsYXJfZ3JhcGggcmFuZG9tX3N0dWRlbnRfdCdcbiAgICAgICsgJyByYW5kb21fdG91cm5hbWVudCByYW5kb21fdHJlZSByYW5kb21fd2VpYnVsbCByYW5nZSByYW5rIHJhdCByYXRjb2VmIHJhdGRlbm9tJ1xuICAgICAgKyAnIHJhdGRpZmYgcmF0ZGlzcmVwIHJhdGV4cGFuZCByYXRpbnRlcnBvbCByYXRpb25hbCByYXRpb25hbGl6ZSByYXRudW1lciByYXRudW1wJ1xuICAgICAgKyAnIHJhdHAgcmF0c2ltcCByYXRzdWJzdCByYXR2YXJzIHJhdHdlaWdodCByZWFkIHJlYWRfYXJyYXkgcmVhZF9iaW5hcnlfYXJyYXknXG4gICAgICArICcgcmVhZF9iaW5hcnlfbGlzdCByZWFkX2JpbmFyeV9tYXRyaXggcmVhZGJ5dGUgcmVhZGNoYXIgcmVhZF9oYXNoZWRfYXJyYXkgcmVhZGxpbmUnXG4gICAgICArICcgcmVhZF9saXN0IHJlYWRfbWF0cml4IHJlYWRfbmVzdGVkX2xpc3QgcmVhZG9ubHkgcmVhZF94cG0gcmVhbF9pbWFncGFydF90b19jb25qdWdhdGUnXG4gICAgICArICcgcmVhbHBhcnQgcmVhbHJvb3RzIHJlYXJyYXkgcmVjdGFuZ2xlIHJlY3Rmb3JtIHJlY3Rmb3JtX2xvZ19pZl9jb25zdGFudCByZWN0dG9wb2xhcidcbiAgICAgICsgJyByZWRpZmYgcmVkdWNlX2NvbnN0cyByZWR1Y2Vfb3JkZXIgcmVnaW9uIHJlZ2lvbl9ib3VuZGFyaWVzIHJlZ2lvbl9ib3VuZGFyaWVzX3BsdXMnXG4gICAgICArICcgcmVtIHJlbWFpbmRlciByZW1hcnJheSByZW1ib3ggcmVtY29tcHMgcmVtY29uIHJlbWNvb3JkIHJlbWZ1biByZW1mdW5jdGlvbidcbiAgICAgICsgJyByZW1sZXQgcmVtb3ZlIHJlbW92ZV9jb25zdHZhbHVlIHJlbW92ZV9kaW1lbnNpb25zIHJlbW92ZV9lZGdlIHJlbW92ZV9mdW5kYW1lbnRhbF9kaW1lbnNpb25zJ1xuICAgICAgKyAnIHJlbW92ZV9mdW5kYW1lbnRhbF91bml0cyByZW1vdmVfcGxvdF9vcHRpb24gcmVtb3ZlX3ZlcnRleCByZW1wYXJ0IHJlbXJ1bGUnXG4gICAgICArICcgcmVtc3ltIHJlbXZhbHVlIHJlbmFtZSByZW5hbWVfZmlsZSByZXNldCByZXNldF9kaXNwbGF5cyByZXNpZHVlIHJlc29sdmFudGUnXG4gICAgICArICcgcmVzb2x2YW50ZV9hbHRlcm5lZTEgcmVzb2x2YW50ZV9iaXBhcnRpdGUgcmVzb2x2YW50ZV9kaWVkcmFsZSByZXNvbHZhbnRlX2tsZWluJ1xuICAgICAgKyAnIHJlc29sdmFudGVfa2xlaW4zIHJlc29sdmFudGVfcHJvZHVpdF9zeW0gcmVzb2x2YW50ZV91bml0YWlyZSByZXNvbHZhbnRlX3ZpZXJlcidcbiAgICAgICsgJyByZXN0IHJlc3VsdGFudCByZXR1cm4gcmV2ZWFsIHJldmVyc2UgcmV2ZXJ0IHJldmVydDIgcmdiMmxldmVsIHJocyByaWNjaSByaWVtYW5uJ1xuICAgICAgKyAnIHJpbnZhcmlhbnQgcmlzY2ggcmsgcm1kaXIgcm5jb21iaW5lIHJvbWJlcmcgcm9vbSByb290c2NvbnRyYWN0IHJvdW5kIHJvdydcbiAgICAgICsgJyByb3dvcCByb3dzd2FwIHJyZWR1Y2UgcnVuX3Rlc3RzdWl0ZSAlcyBzYXZlIHNhdmluZyBzY2FsYXJwIHNjYWxlZF9iZXNzZWxfaSdcbiAgICAgICsgJyBzY2FsZWRfYmVzc2VsX2kwIHNjYWxlZF9iZXNzZWxfaTEgc2NhbGVmYWN0b3JzIHNjYW5tYXAgc2NhdHRlcnBsb3Qgc2NhdHRlcnBsb3RfZGVzY3JpcHRpb24nXG4gICAgICArICcgc2NlbmUgc2NodXIyY29tcCBzY29uY2F0IHNjb3B5IHNjc2ltcCBzY3VydmF0dXJlIHNkb3duY2FzZSBzZWMgc2VjaCBzZWNvbmQnXG4gICAgICArICcgc2VxdWFsIHNlcXVhbGlnbm9yZSBzZXRfYWx0X2Rpc3BsYXkgc2V0ZGlmZmVyZW5jZSBzZXRfZHJhd19kZWZhdWx0cyBzZXRfZWRnZV93ZWlnaHQnXG4gICAgICArICcgc2V0ZWxteCBzZXRlcXVhbHAgc2V0aWZ5IHNldHAgc2V0X3BhcnRpdGlvbnMgc2V0X3Bsb3Rfb3B0aW9uIHNldF9wcm9tcHQgc2V0X3JhbmRvbV9zdGF0ZSdcbiAgICAgICsgJyBzZXRfdGV4X2Vudmlyb25tZW50IHNldF90ZXhfZW52aXJvbm1lbnRfZGVmYXVsdCBzZXR1bml0cyBzZXR1cF9hdXRvbG9hZCBzZXRfdXBfZG90X3NpbXBsaWZpY2F0aW9ucydcbiAgICAgICsgJyBzZXRfdmVydGV4X2xhYmVsIHNldmVudGggc2V4cGxvZGUgc2Ygc2hhMXN1bSBzaGEyNTZzdW0gc2hvcnRlc3RfcGF0aCBzaG9ydGVzdF93ZWlnaHRlZF9wYXRoJ1xuICAgICAgKyAnIHNob3cgc2hvd2NvbXBzIHNob3dyYXR2YXJzIHNpZXJwaW5za2lhbGUgc2llcnBpbnNraW1hcCBzaWduIHNpZ251bSBzaW1pbGFyaXR5dHJhbnNmb3JtJ1xuICAgICAgKyAnIHNpbXBfaW5lcXVhbGl0eSBzaW1wbGlmeV9zdW0gc2ltcGxvZGUgc2ltcG1ldGRlcml2IHNpbXRyYW4gc2luIHNpbmggc2luc2VydCdcbiAgICAgICsgJyBzaW52ZXJ0Y2FzZSBzaXh0aCBza2V3bmVzcyBza2V3bmVzc19iZXJub3VsbGkgc2tld25lc3NfYmV0YSBza2V3bmVzc19iaW5vbWlhbCdcbiAgICAgICsgJyBza2V3bmVzc19jaGkyIHNrZXduZXNzX2NvbnRpbnVvdXNfdW5pZm9ybSBza2V3bmVzc19kaXNjcmV0ZV91bmlmb3JtIHNrZXduZXNzX2V4cCdcbiAgICAgICsgJyBza2V3bmVzc19mIHNrZXduZXNzX2dhbW1hIHNrZXduZXNzX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHNrZXduZXNzX2dlb21ldHJpYydcbiAgICAgICsgJyBza2V3bmVzc19ndW1iZWwgc2tld25lc3NfaHlwZXJnZW9tZXRyaWMgc2tld25lc3NfbGFwbGFjZSBza2V3bmVzc19sb2dpc3RpYydcbiAgICAgICsgJyBza2V3bmVzc19sb2dub3JtYWwgc2tld25lc3NfbmVnYXRpdmVfYmlub21pYWwgc2tld25lc3Nfbm9uY2VudHJhbF9jaGkyIHNrZXduZXNzX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHNrZXduZXNzX25vcm1hbCBza2V3bmVzc19wYXJldG8gc2tld25lc3NfcG9pc3NvbiBza2V3bmVzc19yYXlsZWlnaCBza2V3bmVzc19zdHVkZW50X3QnXG4gICAgICArICcgc2tld25lc3Nfd2VpYnVsbCBzbGVuZ3RoIHNtYWtlIHNtYWxsX3Job21iaWNvc2lkb2RlY2FoZWRyb25fZ3JhcGggc21hbGxfcmhvbWJpY3Vib2N0YWhlZHJvbl9ncmFwaCdcbiAgICAgICsgJyBzbWF4IHNtaW4gc21pc21hdGNoIHNub3dtYXAgc251Yl9jdWJlX2dyYXBoIHNudWJfZG9kZWNhaGVkcm9uX2dyYXBoIHNvbHZlJ1xuICAgICAgKyAnIHNvbHZlX3JlYyBzb2x2ZV9yZWNfcmF0IHNvbWUgc29tcmFjIHNvcnQgc3BhcnNlNl9kZWNvZGUgc3BhcnNlNl9lbmNvZGUgc3BhcnNlNl9leHBvcnQnXG4gICAgICArICcgc3BhcnNlNl9pbXBvcnQgc3BlY2ludCBzcGhlcmljYWwgc3BoZXJpY2FsX2Jlc3NlbF9qIHNwaGVyaWNhbF9iZXNzZWxfeSBzcGhlcmljYWxfaGFua2VsMSdcbiAgICAgICsgJyBzcGhlcmljYWxfaGFua2VsMiBzcGhlcmljYWxfaGFybW9uaWMgc3BoZXJpY2FsX3RvX3h5eiBzcGxpY2Ugc3BsaXQgc3Bvc2l0aW9uJ1xuICAgICAgKyAnIHNwcmludCBzcWZyIHNxcnQgc3FydGRlbmVzdCBzcmVtb3ZlIHNyZW1vdmVmaXJzdCBzcmV2ZXJzZSBzc2VhcmNoIHNzb3J0IHNzdGF0dXMnXG4gICAgICArICcgc3N1YnN0IHNzdWJzdGZpcnN0IHN0YWlyY2FzZSBzdGFuZGFyZGl6ZSBzdGFuZGFyZGl6ZV9pbnZlcnNlX3RyaWcgc3RhcnBsb3QnXG4gICAgICArICcgc3RhcnBsb3RfZGVzY3JpcHRpb24gc3RhdHVzIHN0ZCBzdGQxIHN0ZF9iZXJub3VsbGkgc3RkX2JldGEgc3RkX2Jpbm9taWFsJ1xuICAgICAgKyAnIHN0ZF9jaGkyIHN0ZF9jb250aW51b3VzX3VuaWZvcm0gc3RkX2Rpc2NyZXRlX3VuaWZvcm0gc3RkX2V4cCBzdGRfZiBzdGRfZ2FtbWEnXG4gICAgICArICcgc3RkX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHN0ZF9nZW9tZXRyaWMgc3RkX2d1bWJlbCBzdGRfaHlwZXJnZW9tZXRyaWMgc3RkX2xhcGxhY2UnXG4gICAgICArICcgc3RkX2xvZ2lzdGljIHN0ZF9sb2dub3JtYWwgc3RkX25lZ2F0aXZlX2Jpbm9taWFsIHN0ZF9ub25jZW50cmFsX2NoaTIgc3RkX25vbmNlbnRyYWxfc3R1ZGVudF90J1xuICAgICAgKyAnIHN0ZF9ub3JtYWwgc3RkX3BhcmV0byBzdGRfcG9pc3NvbiBzdGRfcmF5bGVpZ2ggc3RkX3N0dWRlbnRfdCBzdGRfd2VpYnVsbCdcbiAgICAgICsgJyBzdGVtcGxvdCBzdGlybGluZyBzdGlybGluZzEgc3RpcmxpbmcyIHN0cmltIHN0cmltbCBzdHJpbXIgc3RyaW5nIHN0cmluZ291dCdcbiAgICAgICsgJyBzdHJpbmdwIHN0cm9uZ19jb21wb25lbnRzIHN0cnV2ZV9oIHN0cnV2ZV9sIHN1YmxpcyBzdWJsaXN0IHN1Ymxpc3RfaW5kaWNlcydcbiAgICAgICsgJyBzdWJtYXRyaXggc3Vic2FtcGxlIHN1YnNldCBzdWJzZXRwIHN1YnN0IHN1YnN0aW5wYXJ0IHN1YnN0X3BhcmFsbGVsIHN1YnN0cGFydCdcbiAgICAgICsgJyBzdWJzdHJpbmcgc3VidmFyIHN1YnZhcnAgc3VtIHN1bWNvbnRyYWN0IHN1bW1hbmRfdG9fcmVjIHN1cGNhc2Ugc3VwY29udGV4dCdcbiAgICAgICsgJyBzeW1ib2xwIHN5bW1kaWZmZXJlbmNlIHN5bW1ldHJpY3Agc3lzdGVtIHRha2VfY2hhbm5lbCB0YWtlX2luZmVyZW5jZSB0YW4nXG4gICAgICArICcgdGFuaCB0YXlsb3IgdGF5bG9yaW5mbyB0YXlsb3JwIHRheWxvcl9zaW1wbGlmaWVyIHRheXRvcmF0IHRjbF9vdXRwdXQgdGNvbnRyYWN0J1xuICAgICAgKyAnIHRlbGxyYXQgdGVsbHNpbXAgdGVsbHNpbXBhZnRlciB0ZW50ZXggdGVudGggdGVzdF9tZWFuIHRlc3RfbWVhbnNfZGlmZmVyZW5jZSdcbiAgICAgICsgJyB0ZXN0X25vcm1hbGl0eSB0ZXN0X3Byb3BvcnRpb24gdGVzdF9wcm9wb3J0aW9uc19kaWZmZXJlbmNlIHRlc3RfcmFua19zdW0nXG4gICAgICArICcgdGVzdF9zaWduIHRlc3Rfc2lnbmVkX3JhbmsgdGVzdF92YXJpYW5jZSB0ZXN0X3ZhcmlhbmNlX3JhdGlvIHRleCB0ZXgxIHRleF9kaXNwbGF5J1xuICAgICAgKyAnIHRleHB1dCAldGggdGhpcmQgdGhyb3cgdGltZSB0aW1lZGF0ZSB0aW1lciB0aW1lcl9pbmZvIHRsZGVmaW50IHRsaW1pdCB0b2RkX2NveGV0ZXInXG4gICAgICArICcgdG9lcGxpdHogdG9rZW5zIHRvX2xpc3AgdG9wb2xvZ2ljYWxfc29ydCB0b19wb2x5IHRvX3BvbHlfc29sdmUgdG90YWxkaXNyZXAnXG4gICAgICArICcgdG90YWxmb3VyaWVyIHRvdGllbnQgdHBhcnRwb2wgdHJhY2UgdHJhY2VtYXRyaXggdHJhY2Vfb3B0aW9ucyB0cmFuc2Zvcm1fc2FtcGxlJ1xuICAgICAgKyAnIHRyYW5zbGF0ZSB0cmFuc2xhdGVfZmlsZSB0cmFuc3Bvc2UgdHJlZWZhbGUgdHJlZV9yZWR1Y2UgdHJlaWxsaXMgdHJlaW5hdCdcbiAgICAgICsgJyB0cmlhbmdsZSB0cmlhbmd1bGFyaXplIHRyaWdleHBhbmQgdHJpZ3JhdCB0cmlncmVkdWNlIHRyaWdzaW1wIHRydW5jIHRydW5jYXRlJ1xuICAgICAgKyAnIHRydW5jYXRlZF9jdWJlX2dyYXBoIHRydW5jYXRlZF9kb2RlY2FoZWRyb25fZ3JhcGggdHJ1bmNhdGVkX2ljb3NhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIHRydW5jYXRlZF90ZXRyYWhlZHJvbl9ncmFwaCB0cl93YXJuaW5nc19nZXQgdHViZSB0dXR0ZV9ncmFwaCB1ZWl2ZWN0cyB1Zm9yZ2V0J1xuICAgICAgKyAnIHVsdHJhc3BoZXJpY2FsIHVuZGVybHlpbmdfZ3JhcGggdW5kaWZmIHVuaW9uIHVuaXF1ZSB1bml0ZWlnZW52ZWN0b3JzIHVuaXRwJ1xuICAgICAgKyAnIHVuaXRzIHVuaXRfc3RlcCB1bml0dmVjdG9yIHVub3JkZXIgdW5zdW0gdW50ZWxscmF0IHVudGltZXInXG4gICAgICArICcgdW50cmFjZSB1cHBlcmNhc2VwIHVyaWNjaSB1cmllbWFubiB1dmVjdCB2YW5kZXJtb25kZV9tYXRyaXggdmFyIHZhcjEgdmFyX2Jlcm5vdWxsaSdcbiAgICAgICsgJyB2YXJfYmV0YSB2YXJfYmlub21pYWwgdmFyX2NoaTIgdmFyX2NvbnRpbnVvdXNfdW5pZm9ybSB2YXJfZGlzY3JldGVfdW5pZm9ybSdcbiAgICAgICsgJyB2YXJfZXhwIHZhcl9mIHZhcl9nYW1tYSB2YXJfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgdmFyX2dlb21ldHJpYyB2YXJfZ3VtYmVsJ1xuICAgICAgKyAnIHZhcl9oeXBlcmdlb21ldHJpYyB2YXJfbGFwbGFjZSB2YXJfbG9naXN0aWMgdmFyX2xvZ25vcm1hbCB2YXJfbmVnYXRpdmVfYmlub21pYWwnXG4gICAgICArICcgdmFyX25vbmNlbnRyYWxfY2hpMiB2YXJfbm9uY2VudHJhbF9zdHVkZW50X3QgdmFyX25vcm1hbCB2YXJfcGFyZXRvIHZhcl9wb2lzc29uJ1xuICAgICAgKyAnIHZhcl9yYXlsZWlnaCB2YXJfc3R1ZGVudF90IHZhcl93ZWlidWxsIHZlY3RvciB2ZWN0b3Jwb3RlbnRpYWwgdmVjdG9yc2ltcCdcbiAgICAgICsgJyB2ZXJiaWZ5IHZlcnMgdmVydGV4X2NvbG9yaW5nIHZlcnRleF9jb25uZWN0aXZpdHkgdmVydGV4X2RlZ3JlZSB2ZXJ0ZXhfZGlzdGFuY2UnXG4gICAgICArICcgdmVydGV4X2VjY2VudHJpY2l0eSB2ZXJ0ZXhfaW5fZGVncmVlIHZlcnRleF9vdXRfZGVncmVlIHZlcnRpY2VzIHZlcnRpY2VzX3RvX2N5Y2xlJ1xuICAgICAgKyAnIHZlcnRpY2VzX3RvX3BhdGggJXcgd2V5bCB3aGVlbF9ncmFwaCB3aWVuZXJfaW5kZXggd2lnbmVyXzNqIHdpZ25lcl82aidcbiAgICAgICsgJyB3aWduZXJfOWogd2l0aF9zdGRvdXQgd3JpdGVfYmluYXJ5X2RhdGEgd3JpdGVieXRlIHdyaXRlX2RhdGEgd3JpdGVmaWxlIHdyb25za2lhbidcbiAgICAgICsgJyB4cmVkdWNlIHh0aHJ1ICV5IFplaWxiZXJnZXIgemVyb2VxdWl2IHplcm9mb3IgemVyb21hdHJpeCB6ZXJvbWF0cml4cCB6ZXRhJ1xuICAgICAgKyAnIHpnZWV2IHpoZWV2IHpsYW5nZSB6bl9hZGRfdGFibGUgem5fY2FybWljaGFlbF9sYW1iZGEgem5fY2hhcmFjdGVyaXN0aWNfZmFjdG9ycydcbiAgICAgICsgJyB6bl9kZXRlcm1pbmFudCB6bl9mYWN0b3JfZ2VuZXJhdG9ycyB6bl9pbnZlcnRfYnlfbHUgem5fbG9nIHpuX211bHRfdGFibGUnXG4gICAgICArICcgYWJzYm94Y2hhciBhY3RpdmVjb250ZXh0cyBhZGFwdF9kZXB0aCBhZGRpdGl2ZSBhZGltIGFmb3JtIGFsZ2VicmFpYydcbiAgICAgICsgJyBhbGdlcHNpbG9uIGFsZ2V4YWN0IGFsaWFzZXMgYWxsYnV0IGFsbF9kb3RzaW1wX2Rlbm9tcyBhbGxvY2F0aW9uIGFsbHN5bSBhbHBoYWJldGljJ1xuICAgICAgKyAnIGFuaW1hdGlvbiBhbnRpc3ltbWV0cmljIGFycmF5cyBhc2tleHAgYXNzdW1lX3BvcyBhc3N1bWVfcG9zX3ByZWQgYXNzdW1lc2NhbGFyJ1xuICAgICAgKyAnIGFzeW1ib2wgYXRvbWdyYWQgYXRyaWcxIGF4ZXMgYXhpc18zZCBheGlzX2JvdHRvbSBheGlzX2xlZnQgYXhpc19yaWdodCBheGlzX3RvcCdcbiAgICAgICsgJyBhemltdXRoIGJhY2tncm91bmQgYmFja2dyb3VuZF9jb2xvciBiYWNrc3Vic3QgYmVybGVmYWN0IGJlcm5zdGVpbl9leHBsaWNpdCdcbiAgICAgICsgJyBiZXNzZWxleHBhbmQgYmV0YV9hcmdzX3N1bV90b19pbnRlZ2VyIGJldGFfZXhwYW5kIGJmdG9yYXQgYmZ0cnVuYyBiaW5kdGVzdCdcbiAgICAgICsgJyBib3JkZXIgYm91bmRhcmllc19hcnJheSBib3ggYm94Y2hhciBicmVha3VwICVjIGNhcHBpbmcgY2F1Y2h5c3VtIGNicmFuZ2UnXG4gICAgICArICcgY2J0aWNzIGNlbnRlciBjZmxlbmd0aCBjZnJhbWVfZmxhZyBjbm9ubWV0X2ZsYWcgY29sb3IgY29sb3JfYmFyIGNvbG9yX2Jhcl90aWNzJ1xuICAgICAgKyAnIGNvbG9yYm94IGNvbHVtbnMgY29tbXV0YXRpdmUgY29tcGxleCBjb25lIGNvbnRleHQgY29udGV4dHMgY29udG91ciBjb250b3VyX2xldmVscydcbiAgICAgICsgJyBjb3NucGlmbGFnIGN0YXlwb3YgY3RheXB0IGN0YXlzd2l0Y2ggY3RheXZhciBjdF9jb29yZHMgY3RvcnNpb25fZmxhZyBjdHJnc2ltcCdcbiAgICAgICsgJyBjdWJlIGN1cnJlbnRfbGV0X3J1bGVfcGFja2FnZSBjeWxpbmRlciBkYXRhX2ZpbGVfbmFtZSBkZWJ1Z21vZGUgZGVjcmVhc2luZydcbiAgICAgICsgJyBkZWZhdWx0X2xldF9ydWxlX3BhY2thZ2UgZGVsYXkgZGVwZW5kZW5jaWVzIGRlcml2YWJicmV2IGRlcml2c3Vic3QgZGV0b3V0J1xuICAgICAgKyAnIGRpYWdtZXRyaWMgZGlmZiBkaW0gZGltZW5zaW9ucyBkaXNwZmxhZyBkaXNwbGF5MmR8MTAgZGlzcGxheV9mb3JtYXRfaW50ZXJuYWwnXG4gICAgICArICcgZGlzdHJpYnV0ZV9vdmVyIGRvYWxsbXhvcHMgZG9tYWluIGRvbXhleHB0IGRvbXhteG9wcyBkb214bmN0aW1lcyBkb250ZmFjdG9yJ1xuICAgICAgKyAnIGRvc2NteG9wcyBkb3NjbXhwbHVzIGRvdDBuc2NzaW1wIGRvdDBzaW1wIGRvdDFzaW1wIGRvdGFzc29jIGRvdGNvbnN0cnVsZXMnXG4gICAgICArICcgZG90ZGlzdHJpYiBkb3RleHB0c2ltcCBkb3RpZGVudCBkb3RzY3J1bGVzIGRyYXdfZ3JhcGhfcHJvZ3JhbSBkcmF3X3JlYWxwYXJ0J1xuICAgICAgKyAnIGVkZ2VfY29sb3IgZWRnZV9jb2xvcmluZyBlZGdlX3BhcnRpdGlvbiBlZGdlX3R5cGUgZWRnZV93aWR0aCAlZWRpc3BmbGFnJ1xuICAgICAgKyAnIGVsZXZhdGlvbiAlZW1vZGUgZW5kcGhpIGVuZHRoZXRhIGVuZ2luZWVyaW5nX2Zvcm1hdF9mbG9hdHMgZW5oYW5jZWQzZCAlZW51bWVyJ1xuICAgICAgKyAnIGVwc2lsb25fbHAgZXJmZmxhZyBlcmZfcmVwcmVzZW50YXRpb24gZXJyb3Jtc2cgZXJyb3Jfc2l6ZSBlcnJvcl9zeW1zIGVycm9yX3R5cGUnXG4gICAgICArICcgJWVfdG9fbnVtbG9nIGV2YWwgZXZlbiBldmVuZnVuIGV2ZmxhZyBldmZ1biBldl9wb2ludCBleHBhbmR3cnRfZGVub20gZXhwaW50ZXhwYW5kJ1xuICAgICAgKyAnIGV4cGludHJlcCBleHBvbiBleHBvcCBleHB0ZGlzcGZsYWcgZXhwdGlzb2xhdGUgZXhwdHN1YnN0IGZhY2V4cGFuZCBmYWNzdW1fY29tYmluZSdcbiAgICAgICsgJyBmYWN0bGltIGZhY3RvcmZsYWcgZmFjdG9yaWFsX2V4cGFuZCBmYWN0b3JzX29ubHkgZmIgZmVhdHVyZSBmZWF0dXJlcydcbiAgICAgICsgJyBmaWxlX25hbWUgZmlsZV9vdXRwdXRfYXBwZW5kIGZpbGVfc2VhcmNoX2RlbW8gZmlsZV9zZWFyY2hfbGlzcCBmaWxlX3NlYXJjaF9tYXhpbWF8MTAnXG4gICAgICArICcgZmlsZV9zZWFyY2hfdGVzdHMgZmlsZV9zZWFyY2hfdXNhZ2UgZmlsZV90eXBlX2xpc3AgZmlsZV90eXBlX21heGltYXwxMCBmaWxsX2NvbG9yJ1xuICAgICAgKyAnIGZpbGxfZGVuc2l0eSBmaWxsZWRfZnVuYyBmaXhlZF92ZXJ0aWNlcyBmbGlwZmxhZyBmbG9hdDJiZiBmb250IGZvbnRfc2l6ZSdcbiAgICAgICsgJyBmb3J0aW5kZW50IGZvcnRzcGFjZXMgZnBwcmVjIGZwcHJpbnRwcmVjIGZ1bmN0aW9ucyBnYW1tYV9leHBhbmQgZ2FtbWFsaW0nXG4gICAgICArICcgZ2RldCBnZW5pbmRleCBnZW5zdW1udW0gR0dGQ0ZNQVggR0dGSU5GSU5JVFkgZ2xvYmFsc29sdmUgZ251cGxvdF9jb21tYW5kJ1xuICAgICAgKyAnIGdudXBsb3RfY3VydmVfc3R5bGVzIGdudXBsb3RfY3VydmVfdGl0bGVzIGdudXBsb3RfZGVmYXVsdF90ZXJtX2NvbW1hbmQgZ251cGxvdF9kdW1iX3Rlcm1fY29tbWFuZCdcbiAgICAgICsgJyBnbnVwbG90X2ZpbGVfYXJncyBnbnVwbG90X2ZpbGVfbmFtZSBnbnVwbG90X291dF9maWxlIGdudXBsb3RfcGRmX3Rlcm1fY29tbWFuZCdcbiAgICAgICsgJyBnbnVwbG90X3BtM2QgZ251cGxvdF9wbmdfdGVybV9jb21tYW5kIGdudXBsb3RfcG9zdGFtYmxlIGdudXBsb3RfcHJlYW1ibGUnXG4gICAgICArICcgZ251cGxvdF9wc190ZXJtX2NvbW1hbmQgZ251cGxvdF9zdmdfdGVybV9jb21tYW5kIGdudXBsb3RfdGVybSBnbnVwbG90X3ZpZXdfYXJncydcbiAgICAgICsgJyBHb3NwZXJfaW5fWmVpbGJlcmdlciBncmFkZWZzIGdyaWQgZ3JpZDJkIGdyaW5kIGhhbGZhbmdsZXMgaGVhZF9hbmdsZSBoZWFkX2JvdGgnXG4gICAgICArICcgaGVhZF9sZW5ndGggaGVhZF90eXBlIGhlaWdodCBoeXBlcmdlb21ldHJpY19yZXByZXNlbnRhdGlvbiAlaWFyZ3MgaWJhc2UnXG4gICAgICArICcgaWNjMSBpY2MyIGljb3VudGVyIGlkdW1teXggaWVxbnByaW50IGlmYiBpZmMxIGlmYzIgaWZnIGlmZ2kgaWZyIGlmcmFtZV9icmFja2V0X2Zvcm0nXG4gICAgICArICcgaWZyaSBpZ2Vvd2VkZ2VfZmxhZyBpa3QxIGlrdDIgaW1hZ2luYXJ5IGluY2hhciBpbmNyZWFzaW5nIGluZmV2YWwnXG4gICAgICArICcgaW5maW5pdHkgaW5mbGFnIGluZm9saXN0cyBpbm0gaW5tYzEgaW5tYzIgaW50YW5hbHlzaXMgaW50ZWdlciBpbnRlZ2VydmFsdWVkJ1xuICAgICAgKyAnIGludGVncmF0ZV91c2Vfcm9vdHNvZiBpbnRlZ3JhdGlvbl9jb25zdGFudCBpbnRlZ3JhdGlvbl9jb25zdGFudF9jb3VudGVyIGludGVycG9sYXRlX2NvbG9yJ1xuICAgICAgKyAnIGludGZhY2xpbSBpcF9ncmlkIGlwX2dyaWRfaW4gaXJyYXRpb25hbCBpc29sYXRlX3dydF90aW1lcyBpdGVyYXRpb25zIGl0cidcbiAgICAgICsgJyBqdWxpYV9wYXJhbWV0ZXIgJWsxICVrMiBrZWVwZmxvYXQga2V5IGtleV9wb3Mga2ludmFyaWFudCBrdCBsYWJlbCBsYWJlbF9hbGlnbm1lbnQnXG4gICAgICArICcgbGFiZWxfb3JpZW50YXRpb24gbGFiZWxzIGxhc3NvY2lhdGl2ZSBsYmZnc19uY29ycmVjdGlvbnMgbGJmZ3NfbmZldmFsX21heCdcbiAgICAgICsgJyBsZWZ0anVzdCBsZWdlbmQgbGV0cmF0IGxldF9ydWxlX3BhY2thZ2VzIGxmZyBsZyBsaG9zcGl0YWxsaW0gbGltc3Vic3QgbGluZWFyJ1xuICAgICAgKyAnIGxpbmVhcl9zb2x2ZXIgbGluZWNoYXIgbGluZWx8MTAgbGluZW51bSBsaW5lX3R5cGUgbGluZXdpZHRoIGxpbmVfd2lkdGggbGluc29sdmVfcGFyYW1zJ1xuICAgICAgKyAnIGxpbnNvbHZld2FybiBsaXNwZGlzcCBsaXN0YXJpdGggbGlzdGNvbnN0dmFycyBsaXN0ZHVtbXl2YXJzIGxteGNoYXIgbG9hZF9wYXRobmFtZSdcbiAgICAgICsgJyBsb2FkcHJpbnQgbG9nYWJzIGxvZ2FyYyBsb2djYiBsb2djb25jb2VmZnAgbG9nZXhwYW5kIGxvZ25lZ2ludCBsb2dzaW1wIGxvZ3gnXG4gICAgICArICcgbG9neF9zZWNvbmRhcnkgbG9neSBsb2d5X3NlY29uZGFyeSBsb2d6IGxyaWVtIG0xcGJyYW5jaCBtYWNyb2V4cGFuc2lvbiBtYWNyb3MnXG4gICAgICArICcgbWFpbnZhciBtYW51YWxfZGVtbyBtYXBlcnJvciBtYXBwcmludCBtYXRyaXhfZWxlbWVudF9hZGQgbWF0cml4X2VsZW1lbnRfbXVsdCdcbiAgICAgICsgJyBtYXRyaXhfZWxlbWVudF90cmFuc3Bvc2UgbWF4YXBwbHlkZXB0aCBtYXhhcHBseWhlaWdodCBtYXhpbWFfdGVtcGRpcnwxMCBtYXhpbWFfdXNlcmRpcnwxMCdcbiAgICAgICsgJyBtYXhuZWdleCBNQVhfT1JEIG1heHBvc2V4IG1heHBzaWZyYWNkZW5vbSBtYXhwc2lmcmFjbnVtIG1heHBzaW5lZ2ludCBtYXhwc2lwb3NpbnQnXG4gICAgICArICcgbWF4dGF5b3JkZXIgbWVzaF9saW5lc19jb2xvciBtZXRob2QgbW9kX2JpZ19wcmltZSBtb2RlX2NoZWNrX2Vycm9ycCdcbiAgICAgICsgJyBtb2RlX2NoZWNrcCBtb2RlX2NoZWNrX3dhcm5wIG1vZF90ZXN0IG1vZF90aHJlc2hvbGQgbW9kdWxhcl9saW5lYXJfc29sdmVyJ1xuICAgICAgKyAnIG1vZHVsdXMgbXVsdGlwbGljYXRpdmUgbXVsdGlwbGljaXRpZXMgbXlvcHRpb25zIG5hcnkgbmVnZGlzdHJpYiBuZWdzdW1kaXNwZmxhZydcbiAgICAgICsgJyBuZXdsaW5lIG5ld3RvbmVwc2lsb24gbmV3dG9ubWF4aXRlciBuZXh0bGF5ZXJmYWN0b3IgbmljZWluZGljZXNwcmVmIG5tIG5tYydcbiAgICAgICsgJyBub2V2YWwgbm9sYWJlbHMgbm9uZWdhdGl2ZV9scCBub25pbnRlZ2VyIG5vbnNjYWxhciBub3VuIG5vdW5kaXNwIG5vdW5zIG5wJ1xuICAgICAgKyAnIG5waSBudGlja3MgbnRyaWcgbnVtZXIgbnVtZXJfcGJyYW5jaCBvYmFzZSBvZGQgb2RkZnVuIG9wYWNpdHkgb3Bwcm9wZXJ0aWVzJ1xuICAgICAgKyAnIG9wc3Vic3Qgb3B0aW1wcmVmaXggb3B0aW9uc2V0IG9yaWVudGF0aW9uIG9yaWdpbiBvcnRob3BvbHlfcmV0dXJuc19pbnRlcnZhbHMnXG4gICAgICArICcgb3V0YXRpdmUgb3V0Y2hhciBwYWNrYWdlZmlsZSBwYWxldHRlIHBhcnRzd2l0Y2ggcGRmX2ZpbGUgcGZlZm9ybWF0IHBoaXJlc29sdXRpb24nXG4gICAgICArICcgJXBpYXJncyBwaWVjZSBwaXZvdF9jb3VudF9zeCBwaXZvdF9tYXhfc3ggcGxvdF9mb3JtYXQgcGxvdF9vcHRpb25zIHBsb3RfcmVhbHBhcnQnXG4gICAgICArICcgcG5nX2ZpbGUgcG9jaGhhbW1lcl9tYXhfaW5kZXggcG9pbnRzIHBvaW50c2l6ZSBwb2ludF9zaXplIHBvaW50c19qb2luZWQgcG9pbnRfdHlwZSdcbiAgICAgICsgJyBwb2lzbGltIHBvaXNzb24gcG9seV9jb2VmZmljaWVudF9yaW5nIHBvbHlfZWxpbWluYXRpb25fb3JkZXIgcG9seWZhY3RvciBwb2x5X2dyb2JuZXJfYWxnb3JpdGhtJ1xuICAgICAgKyAnIHBvbHlfZ3JvYm5lcl9kZWJ1ZyBwb2x5X21vbm9taWFsX29yZGVyIHBvbHlfcHJpbWFyeV9lbGltaW5hdGlvbl9vcmRlciBwb2x5X3JldHVybl90ZXJtX2xpc3QnXG4gICAgICArICcgcG9seV9zZWNvbmRhcnlfZWxpbWluYXRpb25fb3JkZXIgcG9seV90b3BfcmVkdWN0aW9uX29ubHkgcG9zZnVuIHBvc2l0aW9uJ1xuICAgICAgKyAnIHBvd2VyZGlzcCBwcmVkIHByZWRlcnJvciBwcmltZXBfbnVtYmVyX29mX3Rlc3RzIHByb2R1Y3RfdXNlX2dhbW1hIHByb2dyYW0nXG4gICAgICArICcgcHJvZ3JhbW1vZGUgcHJvbW90ZV9mbG9hdF90b19iaWdmbG9hdCBwcm9tcHQgcHJvcG9ydGlvbmFsX2F4ZXMgcHJvcHMgcHNleHBhbmQnXG4gICAgICArICcgcHNfZmlsZSByYWRleHBhbmQgcmFkaXVzIHJhZHN1YnN0ZmxhZyByYXNzb2NpYXRpdmUgcmF0YWxnZGVub20gcmF0Y2hyaXN0b2YnXG4gICAgICArICcgcmF0ZGVub21kaXZpZGUgcmF0ZWluc3RlaW4gcmF0ZXBzaWxvbiByYXRmYWMgcmF0aW9uYWwgcmF0bXggcmF0cHJpbnQgcmF0cmllbWFubidcbiAgICAgICsgJyByYXRzaW1wZXhwb25zIHJhdHZhcnN3aXRjaCByYXR3ZWlnaHRzIHJhdHdleWwgcmF0d3RsdmwgcmVhbCByZWFsb25seSByZWRyYXcnXG4gICAgICArICcgcmVmY2hlY2sgcmVzb2x1dGlvbiByZXN0YXJ0IHJlc3VsdGFudCByaWMgcmllbSBybXhjaGFyICVybnVtX2xpc3Qgcm9tYmVyZ2FicydcbiAgICAgICsgJyByb21iZXJnaXQgcm9tYmVyZ21pbiByb21iZXJndG9sIHJvb3RzY29ubW9kZSByb290c2Vwc2lsb24gcnVuX3ZpZXdlciBzYW1lX3h5J1xuICAgICAgKyAnIHNhbWVfeHl6IHNhdmVkZWYgc2F2ZWZhY3RvcnMgc2NhbGFyIHNjYWxhcm1hdHJpeHAgc2NhbGUgc2NhbGVfbHAgc2V0Y2hlY2snXG4gICAgICArICcgc2V0Y2hlY2ticmVhayBzZXR2YWwgc2hvd19lZGdlX2NvbG9yIHNob3dfZWRnZXMgc2hvd19lZGdlX3R5cGUgc2hvd19lZGdlX3dpZHRoJ1xuICAgICAgKyAnIHNob3dfaWQgc2hvd19sYWJlbCBzaG93dGltZSBzaG93X3ZlcnRleF9jb2xvciBzaG93X3ZlcnRleF9zaXplIHNob3dfdmVydGV4X3R5cGUnXG4gICAgICArICcgc2hvd192ZXJ0aWNlcyBzaG93X3dlaWdodCBzaW1wIHNpbXBsaWZpZWRfb3V0cHV0IHNpbXBsaWZ5X3Byb2R1Y3RzIHNpbXBwcm9kdWN0J1xuICAgICAgKyAnIHNpbXBzdW0gc2lubnBpZmxhZyBzb2x2ZWRlY29tcG9zZXMgc29sdmVleHBsaWNpdCBzb2x2ZWZhY3RvcnMgc29sdmVudWxsd2FybidcbiAgICAgICsgJyBzb2x2ZXJhZGNhbiBzb2x2ZXRyaWd3YXJuIHNwYWNlIHNwYXJzZSBzcGhlcmUgc3ByaW5nX2VtYmVkZGluZ19kZXB0aCBzcXJ0ZGlzcGZsYWcnXG4gICAgICArICcgc3RhcmRpc3Agc3RhcnRwaGkgc3RhcnR0aGV0YSBzdGF0c19udW1lciBzdHJpbmdkaXNwIHN0cnVjdHVyZXMgc3R5bGUgc3VibGlzX2FwcGx5X2xhbWJkYSdcbiAgICAgICsgJyBzdWJudW1zaW1wIHN1bWV4cGFuZCBzdW1zcGxpdGZhY3Qgc3VyZmFjZSBzdXJmYWNlX2hpZGUgc3ZnX2ZpbGUgc3ltbWV0cmljJ1xuICAgICAgKyAnIHRhYiB0YXlsb3JkZXB0aCB0YXlsb3JfbG9nZXhwYW5kIHRheWxvcl9vcmRlcl9jb2VmZmljaWVudHMgdGF5bG9yX3RydW5jYXRlX3BvbHlub21pYWxzJ1xuICAgICAgKyAnIHRlbnNvcmtpbGwgdGVybWluYWwgdGVzdHN1aXRlX2ZpbGVzIHRoZXRhcmVzb2x1dGlvbiB0aW1lcl9kZXZhbHVlIHRpdGxlIHRsaW1zd2l0Y2gnXG4gICAgICArICcgdHIgdHJhY2sgdHJhbnNjb21waWxlIHRyYW5zZm9ybSB0cmFuc2Zvcm1feHkgdHJhbnNsYXRlX2Zhc3RfYXJyYXlzIHRyYW5zcGFyZW50J1xuICAgICAgKyAnIHRyYW5zcnVuIHRyX2FycmF5X2FzX3JlZiB0cl9ib3VuZF9mdW5jdGlvbl9hcHBseXAgdHJfZmlsZV90dHlfbWVzc2FnZXNwIHRyX2Zsb2F0X2Nhbl9icmFuY2hfY29tcGxleCdcbiAgICAgICsgJyB0cl9mdW5jdGlvbl9jYWxsX2RlZmF1bHQgdHJpZ2V4cGFuZHBsdXMgdHJpZ2V4cGFuZHRpbWVzIHRyaWdpbnZlcnNlcyB0cmlnc2lnbidcbiAgICAgICsgJyB0cml2aWFsX3NvbHV0aW9ucyB0cl9udW1lciB0cl9vcHRpbWl6ZV9tYXhfbG9vcCB0cl9zZW1pY29tcGlsZSB0cl9zdGF0ZV92YXJzJ1xuICAgICAgKyAnIHRyX3dhcm5fYmFkX2Z1bmN0aW9uX2NhbGxzIHRyX3dhcm5fZmV4cHIgdHJfd2Fybl9tZXZhbCB0cl93YXJuX21vZGUnXG4gICAgICArICcgdHJfd2Fybl91bmRlY2xhcmVkIHRyX3dhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlIHRzdGVwIHR0eW9mZiB0dWJlX2V4dHJlbWVzJ1xuICAgICAgKyAnIHVmZyB1ZyAldW5pdGV4cGFuZCB1bml0X3ZlY3RvcnMgdXJpYyB1cmllbSB1c2VfZmFzdF9hcnJheXMgdXNlcl9wcmVhbWJsZSdcbiAgICAgICsgJyB1c2Vyc2V0dW5pdHMgdmFsdWVzIHZlY3RfY3Jvc3MgdmVyYm9zZSB2ZXJ0ZXhfY29sb3IgdmVydGV4X2NvbG9yaW5nIHZlcnRleF9wYXJ0aXRpb24nXG4gICAgICArICcgdmVydGV4X3NpemUgdmVydGV4X3R5cGUgdmlldyB3YXJuaW5ncyB3ZXlsIHdpZHRoIHdpbmRvd25hbWUgd2luZG93dGl0bGUgd2lyZWRfc3VyZmFjZSdcbiAgICAgICsgJyB3aXJlZnJhbWUgeGF4aXMgeGF4aXNfY29sb3IgeGF4aXNfc2Vjb25kYXJ5IHhheGlzX3R5cGUgeGF4aXNfd2lkdGggeGxhYmVsJ1xuICAgICAgKyAnIHhsYWJlbF9zZWNvbmRhcnkgeGxlbmd0aCB4cmFuZ2UgeHJhbmdlX3NlY29uZGFyeSB4dGljcyB4dGljc19heGlzIHh0aWNzX3JvdGF0ZSdcbiAgICAgICsgJyB4dGljc19yb3RhdGVfc2Vjb25kYXJ5IHh0aWNzX3NlY29uZGFyeSB4dGljc19zZWNvbmRhcnlfYXhpcyB4dV9ncmlkIHhfdm94ZWwnXG4gICAgICArICcgeHlfZmlsZSB4eXBsYW5lIHh5X3NjYWxlIHlheGlzIHlheGlzX2NvbG9yIHlheGlzX3NlY29uZGFyeSB5YXhpc190eXBlIHlheGlzX3dpZHRoJ1xuICAgICAgKyAnIHlsYWJlbCB5bGFiZWxfc2Vjb25kYXJ5IHlsZW5ndGggeXJhbmdlIHlyYW5nZV9zZWNvbmRhcnkgeXRpY3MgeXRpY3NfYXhpcydcbiAgICAgICsgJyB5dGljc19yb3RhdGUgeXRpY3Nfcm90YXRlX3NlY29uZGFyeSB5dGljc19zZWNvbmRhcnkgeXRpY3Nfc2Vjb25kYXJ5X2F4aXMnXG4gICAgICArICcgeXZfZ3JpZCB5X3ZveGVsIHl4X3JhdGlvIHpheGlzIHpheGlzX2NvbG9yIHpheGlzX3R5cGUgemF4aXNfd2lkdGggemVyb2EgemVyb2InXG4gICAgICArICcgemVyb2Jlcm4gemV0YSVwaSB6bGFiZWwgemxhYmVsX3JvdGF0ZSB6bGVuZ3RoIHptaW4gem5fcHJpbXJvb3RfbGltaXQgem5fcHJpbXJvb3RfcHJldGVzdCc7XG4gIHZhciBTWU1CT0xTID0gJ18gX18gJXwwICUlfDAnO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogJ1tBLVphLXpfJV1bMC05QS1aYS16XyVdKicsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkRTLFxuICAgICAgbGl0ZXJhbDogTElURVJBTFMsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTl9GVU5DVElPTlMsXG4gICAgICBzeW1ib2w6IFNZTUJPTFMsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgYmVnaW46ICcvXFxcXConLFxuICAgICAgICBlbmQ6ICdcXFxcKi8nLFxuICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZmxvYXQgbnVtYmVyIHcvIGV4cG9uZW50XG4gICAgICAgICAgICAvLyBobW0sIEkgd29uZGVyIGlmIHdlIG91Z2h0IHRvIGluY2x1ZGUgb3RoZXIgZXhwb25lbnQgbWFya2Vycz9cbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrfFxcXFxkK1xcXFwufFxcXFwuXFxcXGQrfFxcXFxkK1xcXFwuXFxcXGQrKVtFZV1bLStdP1xcXFxkK1xcXFxiJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJpZ2Zsb2F0IG51bWJlclxuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcZCt8XFxcXGQrXFxcXC58XFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCspW0JiXVstK10/XFxcXGQrXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZmxvYXQgbnVtYmVyIHcvb3V0IGV4cG9uZW50XG4gICAgICAgICAgICAvLyBEb2Vzbid0IHNlZW0gdG8gcmVjb2duaXplIGZsb2F0cyB3aGljaCBzdGFydCB3aXRoICcuJ1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcLlxcXFxkK3xcXFxcZCtcXFxcLlxcXFxkKylcXFxcYicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBpbnRlZ2VyIGluIGJhc2UgdXAgdG8gMzZcbiAgICAgICAgICAgIC8vIERvZXNuJ3Qgc2VlbSB0byByZWNvZ25pemUgaW50ZWdlcnMgd2hpY2ggZW5kIHdpdGggJy4nXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkK3wwWzAtOUEtWmEtel0rKVxcXFwuP1xcXFxiJyxcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC9AL1xuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOlxuICAgICAgJ2ludCBmbG9hdCBzdHJpbmcgdmVjdG9yIG1hdHJpeCBpZiBlbHNlIHN3aXRjaCBjYXNlIGRlZmF1bHQgd2hpbGUgZG8gZm9yIGluIGJyZWFrICcgK1xuICAgICAgJ2NvbnRpbnVlIGdsb2JhbCBwcm9jIHJldHVybiBhYm91dCBhYnMgYWRkQXR0ciBhZGRBdHRyaWJ1dGVFZGl0b3JOb2RlSGVscCBhZGREeW5hbWljICcgK1xuICAgICAgJ2FkZE5ld1NoZWxmVGFiIGFkZFBQIGFkZFBhbmVsQ2F0ZWdvcnkgYWRkUHJlZml4VG9OYW1lIGFkdmFuY2VUb05leHREcml2ZW5LZXkgJyArXG4gICAgICAnYWZmZWN0ZWROZXQgYWZmZWN0cyBhaW1Db25zdHJhaW50IGFpciBhbGlhcyBhbGlhc0F0dHIgYWxpZ24gYWxpZ25DdHggYWxpZ25DdXJ2ZSAnICtcbiAgICAgICdhbGlnblN1cmZhY2UgYWxsVmlld0ZpdCBhbWJpZW50TGlnaHQgYW5nbGUgYW5nbGVCZXR3ZWVuIGFuaW1Db25lIGFuaW1DdXJ2ZUVkaXRvciAnICtcbiAgICAgICdhbmltRGlzcGxheSBhbmltVmlldyBhbm5vdGF0ZSBhcHBlbmRTdHJpbmdBcnJheSBhcHBsaWNhdGlvbk5hbWUgYXBwbHlBdHRyUHJlc2V0ICcgK1xuICAgICAgJ2FwcGx5VGFrZSBhcmNMZW5EaW1Db250ZXh0IGFyY0xlbmd0aERpbWVuc2lvbiBhcmNsZW4gYXJyYXlNYXBwZXIgYXJ0M2RQYWludEN0eCAnICtcbiAgICAgICdhcnRBdHRyQ3R4IGFydEF0dHJQYWludFZlcnRleEN0eCBhcnRBdHRyU2tpblBhaW50Q3R4IGFydEF0dHJUb29sIGFydEJ1aWxkUGFpbnRNZW51ICcgK1xuICAgICAgJ2FydEZsdWlkQXR0ckN0eCBhcnRQdXR0eUN0eCBhcnRTZWxlY3RDdHggYXJ0U2V0UGFpbnRDdHggYXJ0VXNlclBhaW50Q3R4IGFzc2lnbkNvbW1hbmQgJyArXG4gICAgICAnYXNzaWduSW5wdXREZXZpY2UgYXNzaWduVmlld3BvcnRGYWN0b3JpZXMgYXR0YWNoQ3VydmUgYXR0YWNoRGV2aWNlQXR0ciBhdHRhY2hTdXJmYWNlICcgK1xuICAgICAgJ2F0dHJDb2xvclNsaWRlckdycCBhdHRyQ29tcGF0aWJpbGl0eSBhdHRyQ29udHJvbEdycCBhdHRyRW51bU9wdGlvbk1lbnUgJyArXG4gICAgICAnYXR0ckVudW1PcHRpb25NZW51R3JwIGF0dHJGaWVsZEdycCBhdHRyRmllbGRTbGlkZXJHcnAgYXR0ck5hdmlnYXRpb25Db250cm9sR3JwICcgK1xuICAgICAgJ2F0dHJQcmVzZXRFZGl0V2luIGF0dHJpYnV0ZUV4aXN0cyBhdHRyaWJ1dGVJbmZvIGF0dHJpYnV0ZU1lbnUgYXR0cmlidXRlUXVlcnkgJyArXG4gICAgICAnYXV0b0tleWZyYW1lIGF1dG9QbGFjZSBiYWtlQ2xpcCBiYWtlRmx1aWRTaGFkaW5nIGJha2VQYXJ0aWFsSGlzdG9yeSBiYWtlUmVzdWx0cyAnICtcbiAgICAgICdiYWtlU2ltdWxhdGlvbiBiYXNlbmFtZSBiYXNlbmFtZUV4IGJhdGNoUmVuZGVyIGJlc3NlbCBiZXZlbCBiZXZlbFBsdXMgYmluTWVtYmVyc2hpcCAnICtcbiAgICAgICdiaW5kU2tpbiBibGVuZDIgYmxlbmRTaGFwZSBibGVuZFNoYXBlRWRpdG9yIGJsZW5kU2hhcGVQYW5lbCBibGVuZFR3b0F0dHIgYmxpbmREYXRhVHlwZSAnICtcbiAgICAgICdib25lTGF0dGljZSBib3VuZGFyeSBib3hEb2xseUN0eCBib3hab29tQ3R4IGJ1ZmZlckN1cnZlIGJ1aWxkQm9va21hcmtNZW51ICcgK1xuICAgICAgJ2J1aWxkS2V5ZnJhbWVNZW51IGJ1dHRvbiBidXR0b25NYW5pcCBDQkcgY2FjaGVGaWxlIGNhY2hlRmlsZUNvbWJpbmUgY2FjaGVGaWxlTWVyZ2UgJyArXG4gICAgICAnY2FjaGVGaWxlVHJhY2sgY2FtZXJhIGNhbWVyYVZpZXcgY2FuQ3JlYXRlTWFuaXAgY2FudmFzIGNhcGl0YWxpemVTdHJpbmcgY2F0Y2ggJyArXG4gICAgICAnY2F0Y2hRdWlldCBjZWlsIGNoYW5nZVN1YmRpdkNvbXBvbmVudERpc3BsYXlMZXZlbCBjaGFuZ2VTdWJkaXZSZWdpb24gY2hhbm5lbEJveCAnICtcbiAgICAgICdjaGFyYWN0ZXIgY2hhcmFjdGVyTWFwIGNoYXJhY3Rlck91dGxpbmVFZGl0b3IgY2hhcmFjdGVyaXplIGNoZGlyIGNoZWNrQm94IGNoZWNrQm94R3JwICcgK1xuICAgICAgJ2NoZWNrRGVmYXVsdFJlbmRlckdsb2JhbHMgY2hvaWNlIGNpcmNsZSBjaXJjdWxhckZpbGxldCBjbGFtcCBjbGVhciBjbGVhckNhY2hlIGNsaXAgJyArXG4gICAgICAnY2xpcEVkaXRvciBjbGlwRWRpdG9yQ3VycmVudFRpbWVDdHggY2xpcFNjaGVkdWxlIGNsaXBTY2hlZHVsZXJPdXRsaW5lciBjbGlwVHJpbUJlZm9yZSAnICtcbiAgICAgICdjbG9zZUN1cnZlIGNsb3NlU3VyZmFjZSBjbHVzdGVyIGNtZEZpbGVPdXRwdXQgY21kU2Nyb2xsRmllbGRFeGVjdXRlciAnICtcbiAgICAgICdjbWRTY3JvbGxGaWVsZFJlcG9ydGVyIGNtZFNoZWxsIGNvYXJzZW5TdWJkaXZTZWxlY3Rpb25MaXN0IGNvbGxpc2lvbiBjb2xvciAnICtcbiAgICAgICdjb2xvckF0UG9pbnQgY29sb3JFZGl0b3IgY29sb3JJbmRleCBjb2xvckluZGV4U2xpZGVyR3JwIGNvbG9yU2xpZGVyQnV0dG9uR3JwICcgK1xuICAgICAgJ2NvbG9yU2xpZGVyR3JwIGNvbHVtbkxheW91dCBjb21tYW5kRWNobyBjb21tYW5kTGluZSBjb21tYW5kUG9ydCBjb21wYWN0SGFpclN5c3RlbSAnICtcbiAgICAgICdjb21wb25lbnRFZGl0b3IgY29tcG9zaXRpbmdJbnRlcm9wIGNvbXB1dGVQb2x5c2V0Vm9sdW1lIGNvbmRpdGlvbiBjb25lIGNvbmZpcm1EaWFsb2cgJyArXG4gICAgICAnY29ubmVjdEF0dHIgY29ubmVjdENvbnRyb2wgY29ubmVjdER5bmFtaWMgY29ubmVjdEpvaW50IGNvbm5lY3Rpb25JbmZvIGNvbnN0cmFpbiAnICtcbiAgICAgICdjb25zdHJhaW5WYWx1ZSBjb25zdHJ1Y3Rpb25IaXN0b3J5IGNvbnRhaW5lciBjb250YWluc011bHRpYnl0ZSBjb250ZXh0SW5mbyBjb250cm9sICcgK1xuICAgICAgJ2NvbnZlcnRGcm9tT2xkTGF5ZXJzIGNvbnZlcnRJZmZUb1BzZCBjb252ZXJ0TGlnaHRtYXAgY29udmVydFNvbGlkVHggY29udmVydFRlc3NlbGxhdGlvbiAnICtcbiAgICAgICdjb252ZXJ0VW5pdCBjb3B5QXJyYXkgY29weUZsZXhvciBjb3B5S2V5IGNvcHlTa2luV2VpZ2h0cyBjb3MgY3BCdXR0b24gY3BDYWNoZSAnICtcbiAgICAgICdjcENsb3RoU2V0IGNwQ29sbGlzaW9uIGNwQ29uc3RyYWludCBjcENvbnZDbG90aFRvTWVzaCBjcEZvcmNlcyBjcEdldFNvbHZlckF0dHIgY3BQYW5lbCAnICtcbiAgICAgICdjcFByb3BlcnR5IGNwUmlnaWRDb2xsaXNpb25GaWx0ZXIgY3BTZWFtIGNwU2V0RWRpdCBjcFNldFNvbHZlckF0dHIgY3BTb2x2ZXIgJyArXG4gICAgICAnY3BTb2x2ZXJUeXBlcyBjcFRvb2wgY3BVcGRhdGVDbG90aFVWcyBjcmVhdGVEaXNwbGF5TGF5ZXIgY3JlYXRlRHJhd0N0eCBjcmVhdGVFZGl0b3IgJyArXG4gICAgICAnY3JlYXRlTGF5ZXJlZFBzZEZpbGUgY3JlYXRlTW90aW9uRmllbGQgY3JlYXRlTmV3U2hlbGYgY3JlYXRlTm9kZSBjcmVhdGVSZW5kZXJMYXllciAnICtcbiAgICAgICdjcmVhdGVTdWJkaXZSZWdpb24gY3Jvc3MgY3Jvc3NQcm9kdWN0IGN0eEFib3J0IGN0eENvbXBsZXRpb24gY3R4RWRpdE1vZGUgY3R4VHJhdmVyc2UgJyArXG4gICAgICAnY3VycmVudEN0eCBjdXJyZW50VGltZSBjdXJyZW50VGltZUN0eCBjdXJyZW50VW5pdCBjdXJ2ZSBjdXJ2ZUFkZFB0Q3R4ICcgK1xuICAgICAgJ2N1cnZlQ1ZDdHggY3VydmVFUEN0eCBjdXJ2ZUVkaXRvckN0eCBjdXJ2ZUludGVyc2VjdCBjdXJ2ZU1vdmVFUEN0eCBjdXJ2ZU9uU3VyZmFjZSAnICtcbiAgICAgICdjdXJ2ZVNrZXRjaEN0eCBjdXRLZXkgY3ljbGVDaGVjayBjeWxpbmRlciBkYWdQb3NlIGRhdGUgZGVmYXVsdExpZ2h0TGlzdENoZWNrQm94ICcgK1xuICAgICAgJ2RlZmF1bHROYXZpZ2F0aW9uIGRlZmluZURhdGFTZXJ2ZXIgZGVmaW5lVmlydHVhbERldmljZSBkZWZvcm1lciBkZWdfdG9fcmFkIGRlbGV0ZSAnICtcbiAgICAgICdkZWxldGVBdHRyIGRlbGV0ZVNoYWRpbmdHcm91cHNBbmRNYXRlcmlhbHMgZGVsZXRlU2hlbGZUYWIgZGVsZXRlVUkgZGVsZXRlVW51c2VkQnJ1c2hlcyAnICtcbiAgICAgICdkZWxyYW5kc3RyIGRldGFjaEN1cnZlIGRldGFjaERldmljZUF0dHIgZGV0YWNoU3VyZmFjZSBkZXZpY2VFZGl0b3IgZGV2aWNlUGFuZWwgZGdJbmZvICcgK1xuICAgICAgJ2RnZGlydHkgZGdldmFsIGRndGltZXIgZGltV2hlbiBkaXJlY3RLZXlDdHggZGlyZWN0aW9uYWxMaWdodCBkaXJtYXAgZGlybmFtZSBkaXNhYmxlICcgK1xuICAgICAgJ2Rpc2Nvbm5lY3RBdHRyIGRpc2Nvbm5lY3RKb2ludCBkaXNrQ2FjaGUgZGlzcGxhY2VtZW50VG9Qb2x5IGRpc3BsYXlBZmZlY3RlZCAnICtcbiAgICAgICdkaXNwbGF5Q29sb3IgZGlzcGxheUN1bGwgZGlzcGxheUxldmVsT2ZEZXRhaWwgZGlzcGxheVByZWYgZGlzcGxheVJHQkNvbG9yICcgK1xuICAgICAgJ2Rpc3BsYXlTbW9vdGhuZXNzIGRpc3BsYXlTdGF0cyBkaXNwbGF5U3RyaW5nIGRpc3BsYXlTdXJmYWNlIGRpc3RhbmNlRGltQ29udGV4dCAnICtcbiAgICAgICdkaXN0YW5jZURpbWVuc2lvbiBkb0JsdXIgZG9sbHkgZG9sbHlDdHggZG9wZVNoZWV0RWRpdG9yIGRvdCBkb3RQcm9kdWN0ICcgK1xuICAgICAgJ2RvdWJsZVByb2ZpbGVCaXJhaWxTdXJmYWNlIGRyYWcgZHJhZ0F0dHJDb250ZXh0IGRyYWdnZXJDb250ZXh0IGRyb3BvZmZMb2NhdG9yICcgK1xuICAgICAgJ2R1cGxpY2F0ZSBkdXBsaWNhdGVDdXJ2ZSBkdXBsaWNhdGVTdXJmYWNlIGR5bkNhY2hlIGR5bkNvbnRyb2wgZHluRXhwb3J0IGR5bkV4cHJlc3Npb24gJyArXG4gICAgICAnZHluR2xvYmFscyBkeW5QYWludEVkaXRvciBkeW5QYXJ0aWNsZUN0eCBkeW5QcmVmIGR5blJlbEVkUGFuZWwgZHluUmVsRWRpdG9yICcgK1xuICAgICAgJ2R5bmFtaWNMb2FkIGVkaXRBdHRyTGltaXRzIGVkaXREaXNwbGF5TGF5ZXJHbG9iYWxzIGVkaXREaXNwbGF5TGF5ZXJNZW1iZXJzICcgK1xuICAgICAgJ2VkaXRSZW5kZXJMYXllckFkanVzdG1lbnQgZWRpdFJlbmRlckxheWVyR2xvYmFscyBlZGl0UmVuZGVyTGF5ZXJNZW1iZXJzIGVkaXRvciAnICtcbiAgICAgICdlZGl0b3JUZW1wbGF0ZSBlZmZlY3RvciBlbWl0IGVtaXR0ZXIgZW5hYmxlRGV2aWNlIGVuY29kZVN0cmluZyBlbmRTdHJpbmcgZW5kc1dpdGggZW52ICcgK1xuICAgICAgJ2VxdWl2YWxlbnQgZXF1aXZhbGVudFRvbCBlcmYgZXJyb3IgZXZhbCBldmFsRGVmZXJyZWQgZXZhbEVjaG8gZXZlbnQgJyArXG4gICAgICAnZXhhY3RXb3JsZEJvdW5kaW5nQm94IGV4Y2x1c2l2ZUxpZ2h0Q2hlY2tCb3ggZXhlYyBleGVjdXRlRm9yRWFjaE9iamVjdCBleGlzdHMgZXhwICcgK1xuICAgICAgJ2V4cHJlc3Npb24gZXhwcmVzc2lvbkVkaXRvckxpc3RlbiBleHRlbmRDdXJ2ZSBleHRlbmRTdXJmYWNlIGV4dHJ1ZGUgZmNoZWNrIGZjbG9zZSBmZW9mICcgK1xuICAgICAgJ2ZmbHVzaCBmZ2V0bGluZSBmZ2V0d29yZCBmaWxlIGZpbGVCcm93c2VyRGlhbG9nIGZpbGVEaWFsb2cgZmlsZUV4dGVuc2lvbiBmaWxlSW5mbyAnICtcbiAgICAgICdmaWxldGVzdCBmaWxsZXRDdXJ2ZSBmaWx0ZXIgZmlsdGVyQ3VydmUgZmlsdGVyRXhwYW5kIGZpbHRlclN0dWRpb0ltcG9ydCAnICtcbiAgICAgICdmaW5kQWxsSW50ZXJzZWN0aW9ucyBmaW5kQW5pbUN1cnZlcyBmaW5kS2V5ZnJhbWUgZmluZE1lbnVJdGVtIGZpbmRSZWxhdGVkU2tpbkNsdXN0ZXIgJyArXG4gICAgICAnZmluZGVyIGZpcnN0UGFyZW50T2YgZml0QnNwbGluZSBmbGV4b3IgZmxvYXRFcSBmbG9hdEZpZWxkIGZsb2F0RmllbGRHcnAgZmxvYXRTY3JvbGxCYXIgJyArXG4gICAgICAnZmxvYXRTbGlkZXIgZmxvYXRTbGlkZXIyIGZsb2F0U2xpZGVyQnV0dG9uR3JwIGZsb2F0U2xpZGVyR3JwIGZsb29yIGZsb3cgZmx1aWRDYWNoZUluZm8gJyArXG4gICAgICAnZmx1aWRFbWl0dGVyIGZsdWlkVm94ZWxJbmZvIGZsdXNoVW5kbyBmbW9kIGZvbnREaWFsb2cgZm9wZW4gZm9ybUxheW91dCBmb3JtYXQgZnByaW50ICcgK1xuICAgICAgJ2ZyYW1lTGF5b3V0IGZyZWFkIGZyZWVGb3JtRmlsbGV0IGZyZXdpbmQgZnJvbU5hdGl2ZVBhdGggZndyaXRlIGdhbW1hIGdhdXNzICcgK1xuICAgICAgJ2dlb21ldHJ5Q29uc3RyYWludCBnZXRBcHBsaWNhdGlvblZlcnNpb25Bc0Zsb2F0IGdldEF0dHIgZ2V0Q2xhc3NpZmljYXRpb24gJyArXG4gICAgICAnZ2V0RGVmYXVsdEJydXNoIGdldEZpbGVMaXN0IGdldEZsdWlkQXR0ciBnZXRJbnB1dERldmljZVJhbmdlIGdldE1heWFQYW5lbFR5cGVzICcgK1xuICAgICAgJ2dldE1vZGlmaWVycyBnZXRQYW5lbCBnZXRQYXJ0aWNsZUF0dHIgZ2V0UGx1Z2luUmVzb3VyY2UgZ2V0ZW52IGdldHBpZCBnbFJlbmRlciAnICtcbiAgICAgICdnbFJlbmRlckVkaXRvciBnbG9iYWxTdGl0Y2ggZ21hdGNoIGdvYWwgZ290b0JpbmRQb3NlIGdyYWJDb2xvciBncmFkaWVudENvbnRyb2wgJyArXG4gICAgICAnZ3JhZGllbnRDb250cm9sTm9BdHRyIGdyYXBoRG9sbHlDdHggZ3JhcGhTZWxlY3RDb250ZXh0IGdyYXBoVHJhY2tDdHggZ3Jhdml0eSBncmlkICcgK1xuICAgICAgJ2dyaWRMYXlvdXQgZ3JvdXAgZ3JvdXBPYmplY3RzQnlOYW1lIEhmQWRkQXR0cmFjdG9yVG9BUyBIZkFzc2lnbkFTIEhmQnVpbGRFcXVhbE1hcCAnICtcbiAgICAgICdIZkJ1aWxkRnVyRmlsZXMgSGZCdWlsZEZ1ckltYWdlcyBIZkNhbmNlbEFGUiBIZkNvbm5lY3RBU1RvSEYgSGZDcmVhdGVBdHRyYWN0b3IgJyArXG4gICAgICAnSGZEZWxldGVBUyBIZkVkaXRBUyBIZlBlcmZvcm1DcmVhdGVBUyBIZlJlbW92ZUF0dHJhY3RvckZyb21BUyBIZlNlbGVjdEF0dGFjaGVkICcgK1xuICAgICAgJ0hmU2VsZWN0QXR0cmFjdG9ycyBIZlVuQXNzaWduQVMgaGFyZGVuUG9pbnRDdXJ2ZSBoYXJkd2FyZSBoYXJkd2FyZVJlbmRlclBhbmVsICcgK1xuICAgICAgJ2hlYWRzVXBEaXNwbGF5IGhlYWRzVXBNZXNzYWdlIGhlbHAgaGVscExpbmUgaGVybWl0ZSBoaWRlIGhpbGl0ZSBoaXRUZXN0IGhvdEJveCBob3RrZXkgJyArXG4gICAgICAnaG90a2V5Q2hlY2sgaHN2X3RvX3JnYiBodWRCdXR0b24gaHVkU2xpZGVyIGh1ZFNsaWRlckJ1dHRvbiBod1JlZmxlY3Rpb25NYXAgaHdSZW5kZXIgJyArXG4gICAgICAnaHdSZW5kZXJMb2FkIGh5cGVyR3JhcGggaHlwZXJQYW5lbCBoeXBlclNoYWRlIGh5cG90IGljb25UZXh0QnV0dG9uIGljb25UZXh0Q2hlY2tCb3ggJyArXG4gICAgICAnaWNvblRleHRSYWRpb0J1dHRvbiBpY29uVGV4dFJhZGlvQ29sbGVjdGlvbiBpY29uVGV4dFNjcm9sbExpc3QgaWNvblRleHRTdGF0aWNMYWJlbCAnICtcbiAgICAgICdpa0hhbmRsZSBpa0hhbmRsZUN0eCBpa0hhbmRsZURpc3BsYXlTY2FsZSBpa1NvbHZlciBpa1NwbGluZUhhbmRsZUN0eCBpa1N5c3RlbSAnICtcbiAgICAgICdpa1N5c3RlbUluZm8gaWtma0Rpc3BsYXlNZXRob2QgaWxsdXN0cmF0b3JDdXJ2ZXMgaW1hZ2UgaW1mUGx1Z2lucyBpbmhlcml0VHJhbnNmb3JtICcgK1xuICAgICAgJ2luc2VydEpvaW50IGluc2VydEpvaW50Q3R4IGluc2VydEtleUN0eCBpbnNlcnRLbm90Q3VydmUgaW5zZXJ0S25vdFN1cmZhY2UgaW5zdGFuY2UgJyArXG4gICAgICAnaW5zdGFuY2VhYmxlIGluc3RhbmNlciBpbnRGaWVsZCBpbnRGaWVsZEdycCBpbnRTY3JvbGxCYXIgaW50U2xpZGVyIGludFNsaWRlckdycCAnICtcbiAgICAgICdpbnRlclRvVUkgaW50ZXJuYWxWYXIgaW50ZXJzZWN0IGlwckVuZ2luZSBpc0FuaW1DdXJ2ZSBpc0Nvbm5lY3RlZCBpc0RpcnR5IGlzUGFyZW50T2YgJyArXG4gICAgICAnaXNTYW1lT2JqZWN0IGlzVHJ1ZSBpc1ZhbGlkT2JqZWN0TmFtZSBpc1ZhbGlkU3RyaW5nIGlzVmFsaWRVaU5hbWUgaXNvbGF0ZVNlbGVjdCAnICtcbiAgICAgICdpdGVtRmlsdGVyIGl0ZW1GaWx0ZXJBdHRyIGl0ZW1GaWx0ZXJSZW5kZXIgaXRlbUZpbHRlclR5cGUgam9pbnQgam9pbnRDbHVzdGVyIGpvaW50Q3R4ICcgK1xuICAgICAgJ2pvaW50RGlzcGxheVNjYWxlIGpvaW50TGF0dGljZSBrZXlUYW5nZW50IGtleWZyYW1lIGtleWZyYW1lT3V0bGluZXIgJyArXG4gICAgICAna2V5ZnJhbWVSZWdpb25DdXJyZW50VGltZUN0eCBrZXlmcmFtZVJlZ2lvbkRpcmVjdEtleUN0eCBrZXlmcmFtZVJlZ2lvbkRvbGx5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uSW5zZXJ0S2V5Q3R4IGtleWZyYW1lUmVnaW9uTW92ZUtleUN0eCBrZXlmcmFtZVJlZ2lvblNjYWxlS2V5Q3R4ICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uU2VsZWN0S2V5Q3R4IGtleWZyYW1lUmVnaW9uU2V0S2V5Q3R4IGtleWZyYW1lUmVnaW9uVHJhY2tDdHggJyArXG4gICAgICAna2V5ZnJhbWVTdGF0cyBsYXNzb0NvbnRleHQgbGF0dGljZSBsYXR0aWNlRGVmb3JtS2V5Q3R4IGxhdW5jaCBsYXVuY2hJbWFnZUVkaXRvciAnICtcbiAgICAgICdsYXllckJ1dHRvbiBsYXllcmVkU2hhZGVyUG9ydCBsYXllcmVkVGV4dHVyZVBvcnQgbGF5b3V0IGxheW91dERpYWxvZyBsaWdodExpc3QgJyArXG4gICAgICAnbGlnaHRMaXN0RWRpdG9yIGxpZ2h0TGlzdFBhbmVsIGxpZ2h0bGluayBsaW5lSW50ZXJzZWN0aW9uIGxpbmVhclByZWNpc2lvbiBsaW5zdGVwICcgK1xuICAgICAgJ2xpc3RBbmltYXRhYmxlIGxpc3RBdHRyIGxpc3RDYW1lcmFzIGxpc3RDb25uZWN0aW9ucyBsaXN0RGV2aWNlQXR0YWNobWVudHMgbGlzdEhpc3RvcnkgJyArXG4gICAgICAnbGlzdElucHV0RGV2aWNlQXhlcyBsaXN0SW5wdXREZXZpY2VCdXR0b25zIGxpc3RJbnB1dERldmljZXMgbGlzdE1lbnVBbm5vdGF0aW9uICcgK1xuICAgICAgJ2xpc3ROb2RlVHlwZXMgbGlzdFBhbmVsQ2F0ZWdvcmllcyBsaXN0UmVsYXRpdmVzIGxpc3RTZXRzIGxpc3RUcmFuc2Zvcm1zICcgK1xuICAgICAgJ2xpc3RVbnNlbGVjdGVkIGxpc3RlckVkaXRvciBsb2FkRmx1aWQgbG9hZE5ld1NoZWxmIGxvYWRQbHVnaW4gJyArXG4gICAgICAnbG9hZFBsdWdpbkxhbmd1YWdlUmVzb3VyY2VzIGxvYWRQcmVmT2JqZWN0cyBsb2NhbGl6ZWRQYW5lbExhYmVsIGxvY2tOb2RlIGxvZnQgbG9nICcgK1xuICAgICAgJ2xvbmdOYW1lT2YgbG9va1RocnUgbHMgbHNUaHJvdWdoRmlsdGVyIGxzVHlwZSBsc1VJIE1heWF0b21yIG1hZyBtYWtlSWRlbnRpdHkgbWFrZUxpdmUgJyArXG4gICAgICAnbWFrZVBhaW50YWJsZSBtYWtlUm9sbCBtYWtlU2luZ2xlU3VyZmFjZSBtYWtlVHViZU9uIG1ha2Vib3QgbWFuaXBNb3ZlQ29udGV4dCAnICtcbiAgICAgICdtYW5pcE1vdmVMaW1pdHNDdHggbWFuaXBPcHRpb25zIG1hbmlwUm90YXRlQ29udGV4dCBtYW5pcFJvdGF0ZUxpbWl0c0N0eCAnICtcbiAgICAgICdtYW5pcFNjYWxlQ29udGV4dCBtYW5pcFNjYWxlTGltaXRzQ3R4IG1hcmtlciBtYXRjaCBtYXggbWVtb3J5IG1lbnUgbWVudUJhckxheW91dCAnICtcbiAgICAgICdtZW51RWRpdG9yIG1lbnVJdGVtIG1lbnVJdGVtVG9TaGVsZiBtZW51U2V0IG1lbnVTZXRQcmVmIG1lc3NhZ2VMaW5lIG1pbiBtaW5pbWl6ZUFwcCAnICtcbiAgICAgICdtaXJyb3JKb2ludCBtb2RlbEN1cnJlbnRUaW1lQ3R4IG1vZGVsRWRpdG9yIG1vZGVsUGFuZWwgbW91c2UgbW92SW4gbW92T3V0IG1vdmUgJyArXG4gICAgICAnbW92ZUlLdG9GSyBtb3ZlS2V5Q3R4IG1vdmVWZXJ0ZXhBbG9uZ0RpcmVjdGlvbiBtdWx0aVByb2ZpbGVCaXJhaWxTdXJmYWNlIG11dGUgJyArXG4gICAgICAnblBhcnRpY2xlIG5hbWVDb21tYW5kIG5hbWVGaWVsZCBuYW1lc3BhY2UgbmFtZXNwYWNlSW5mbyBuZXdQYW5lbEl0ZW1zIG5ld3RvbiBub2RlQ2FzdCAnICtcbiAgICAgICdub2RlSWNvbkJ1dHRvbiBub2RlT3V0bGluZXIgbm9kZVByZXNldCBub2RlVHlwZSBub2lzZSBub25MaW5lYXIgbm9ybWFsQ29uc3RyYWludCAnICtcbiAgICAgICdub3JtYWxpemUgbnVyYnNCb29sZWFuIG51cmJzQ29weVVWU2V0IG51cmJzQ3ViZSBudXJic0VkaXRVViBudXJic1BsYW5lIG51cmJzU2VsZWN0ICcgK1xuICAgICAgJ251cmJzU3F1YXJlIG51cmJzVG9Qb2x5IG51cmJzVG9Qb2x5Z29uc1ByZWYgbnVyYnNUb1N1YmRpdiBudXJic1RvU3ViZGl2UHJlZiAnICtcbiAgICAgICdudXJic1VWU2V0IG51cmJzVmlld0RpcmVjdGlvblZlY3RvciBvYmpFeGlzdHMgb2JqZWN0Q2VudGVyIG9iamVjdExheWVyIG9iamVjdFR5cGUgJyArXG4gICAgICAnb2JqZWN0VHlwZVVJIG9ic29sZXRlUHJvYyBvY2Vhbk51cmJzUHJldmlld1BsYW5lIG9mZnNldEN1cnZlIG9mZnNldEN1cnZlT25TdXJmYWNlICcgK1xuICAgICAgJ29mZnNldFN1cmZhY2Ugb3BlbkdMRXh0ZW5zaW9uIG9wZW5NYXlhUHJlZiBvcHRpb25NZW51IG9wdGlvbk1lbnVHcnAgb3B0aW9uVmFyIG9yYml0ICcgK1xuICAgICAgJ29yYml0Q3R4IG9yaWVudENvbnN0cmFpbnQgb3V0bGluZXJFZGl0b3Igb3V0bGluZXJQYW5lbCBvdmVycmlkZU1vZGlmaWVyICcgK1xuICAgICAgJ3BhaW50RWZmZWN0c0Rpc3BsYXkgcGFpckJsZW5kIHBhbGV0dGVQb3J0IHBhbmVMYXlvdXQgcGFuZWwgcGFuZWxDb25maWd1cmF0aW9uICcgK1xuICAgICAgJ3BhbmVsSGlzdG9yeSBwYXJhbURpbUNvbnRleHQgcGFyYW1EaW1lbnNpb24gcGFyYW1Mb2NhdG9yIHBhcmVudCBwYXJlbnRDb25zdHJhaW50ICcgK1xuICAgICAgJ3BhcnRpY2xlIHBhcnRpY2xlRXhpc3RzIHBhcnRpY2xlSW5zdGFuY2VyIHBhcnRpY2xlUmVuZGVySW5mbyBwYXJ0aXRpb24gcGFzdGVLZXkgJyArXG4gICAgICAncGF0aEFuaW1hdGlvbiBwYXVzZSBwY2xvc2UgcGVyY2VudCBwZXJmb3JtYW5jZU9wdGlvbnMgcGZ4c3Ryb2tlcyBwaWNrV2FsayBwaWN0dXJlICcgK1xuICAgICAgJ3BpeGVsTW92ZSBwbGFuYXJTcmYgcGxhbmUgcGxheSBwbGF5YmFja09wdGlvbnMgcGxheWJsYXN0IHBsdWdBdHRyIHBsdWdOb2RlIHBsdWdpbkluZm8gJyArXG4gICAgICAncGx1Z2luUmVzb3VyY2VVdGlsIHBvaW50Q29uc3RyYWludCBwb2ludEN1cnZlQ29uc3RyYWludCBwb2ludExpZ2h0IHBvaW50TWF0cml4TXVsdCAnICtcbiAgICAgICdwb2ludE9uQ3VydmUgcG9pbnRPblN1cmZhY2UgcG9pbnRQb3NpdGlvbiBwb2xlVmVjdG9yQ29uc3RyYWludCBwb2x5QXBwZW5kICcgK1xuICAgICAgJ3BvbHlBcHBlbmRGYWNldEN0eCBwb2x5QXBwZW5kVmVydGV4IHBvbHlBdXRvUHJvamVjdGlvbiBwb2x5QXZlcmFnZU5vcm1hbCAnICtcbiAgICAgICdwb2x5QXZlcmFnZVZlcnRleCBwb2x5QmV2ZWwgcG9seUJsZW5kQ29sb3IgcG9seUJsaW5kRGF0YSBwb2x5Qm9vbE9wIHBvbHlCcmlkZ2VFZGdlICcgK1xuICAgICAgJ3BvbHlDYWNoZU1vbml0b3IgcG9seUNoZWNrIHBvbHlDaGlwT2ZmIHBvbHlDbGlwYm9hcmQgcG9seUNsb3NlQm9yZGVyIHBvbHlDb2xsYXBzZUVkZ2UgJyArXG4gICAgICAncG9seUNvbGxhcHNlRmFjZXQgcG9seUNvbG9yQmxpbmREYXRhIHBvbHlDb2xvckRlbCBwb2x5Q29sb3JQZXJWZXJ0ZXggcG9seUNvbG9yU2V0ICcgK1xuICAgICAgJ3BvbHlDb21wYXJlIHBvbHlDb25lIHBvbHlDb3B5VVYgcG9seUNyZWFzZSBwb2x5Q3JlYXNlQ3R4IHBvbHlDcmVhdGVGYWNldCAnICtcbiAgICAgICdwb2x5Q3JlYXRlRmFjZXRDdHggcG9seUN1YmUgcG9seUN1dCBwb2x5Q3V0Q3R4IHBvbHlDeWxpbmRlciBwb2x5Q3lsaW5kcmljYWxQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlEZWxFZGdlIHBvbHlEZWxGYWNldCBwb2x5RGVsVmVydGV4IHBvbHlEdXBsaWNhdGVBbmRDb25uZWN0IHBvbHlEdXBsaWNhdGVFZGdlICcgK1xuICAgICAgJ3BvbHlFZGl0VVYgcG9seUVkaXRVVlNoZWxsIHBvbHlFdmFsdWF0ZSBwb2x5RXh0cnVkZUVkZ2UgcG9seUV4dHJ1ZGVGYWNldCAnICtcbiAgICAgICdwb2x5RXh0cnVkZVZlcnRleCBwb2x5RmxpcEVkZ2UgcG9seUZsaXBVViBwb2x5Rm9yY2VVViBwb2x5R2VvU2FtcGxlciBwb2x5SGVsaXggJyArXG4gICAgICAncG9seUluZm8gcG9seUluc3RhbGxBY3Rpb24gcG9seUxheW91dFVWIHBvbHlMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBwb2x5TWFwQ3V0ICcgK1xuICAgICAgJ3BvbHlNYXBEZWwgcG9seU1hcFNldyBwb2x5TWFwU2V3TW92ZSBwb2x5TWVyZ2VFZGdlIHBvbHlNZXJnZUVkZ2VDdHggcG9seU1lcmdlRmFjZXQgJyArXG4gICAgICAncG9seU1lcmdlRmFjZXRDdHggcG9seU1lcmdlVVYgcG9seU1lcmdlVmVydGV4IHBvbHlNaXJyb3JGYWNlIHBvbHlNb3ZlRWRnZSAnICtcbiAgICAgICdwb2x5TW92ZUZhY2V0IHBvbHlNb3ZlRmFjZXRVViBwb2x5TW92ZVVWIHBvbHlNb3ZlVmVydGV4IHBvbHlOb3JtYWwgcG9seU5vcm1hbFBlclZlcnRleCAnICtcbiAgICAgICdwb2x5Tm9ybWFsaXplVVYgcG9seU9wdFV2cyBwb2x5T3B0aW9ucyBwb2x5T3V0cHV0IHBvbHlQaXBlIHBvbHlQbGFuYXJQcm9qZWN0aW9uICcgK1xuICAgICAgJ3BvbHlQbGFuZSBwb2x5UGxhdG9uaWNTb2xpZCBwb2x5UG9rZSBwb2x5UHJpbWl0aXZlIHBvbHlQcmlzbSBwb2x5UHJvamVjdGlvbiAnICtcbiAgICAgICdwb2x5UHlyYW1pZCBwb2x5UXVhZCBwb2x5UXVlcnlCbGluZERhdGEgcG9seVJlZHVjZSBwb2x5U2VsZWN0IHBvbHlTZWxlY3RDb25zdHJhaW50ICcgK1xuICAgICAgJ3BvbHlTZWxlY3RDb25zdHJhaW50TW9uaXRvciBwb2x5U2VsZWN0Q3R4IHBvbHlTZWxlY3RFZGl0Q3R4IHBvbHlTZXBhcmF0ZSAnICtcbiAgICAgICdwb2x5U2V0VG9GYWNlTm9ybWFsIHBvbHlTZXdFZGdlIHBvbHlTaG9ydGVzdFBhdGhDdHggcG9seVNtb290aCBwb2x5U29mdEVkZ2UgJyArXG4gICAgICAncG9seVNwaGVyZSBwb2x5U3BoZXJpY2FsUHJvamVjdGlvbiBwb2x5U3BsaXQgcG9seVNwbGl0Q3R4IHBvbHlTcGxpdEVkZ2UgcG9seVNwbGl0UmluZyAnICtcbiAgICAgICdwb2x5U3BsaXRWZXJ0ZXggcG9seVN0cmFpZ2h0ZW5VVkJvcmRlciBwb2x5U3ViZGl2aWRlRWRnZSBwb2x5U3ViZGl2aWRlRmFjZXQgJyArXG4gICAgICAncG9seVRvU3ViZGl2IHBvbHlUb3J1cyBwb2x5VHJhbnNmZXIgcG9seVRyaWFuZ3VsYXRlIHBvbHlVVlNldCBwb2x5VW5pdGUgcG9seVdlZGdlRmFjZSAnICtcbiAgICAgICdwb3BlbiBwb3B1cE1lbnUgcG9zZSBwb3cgcHJlbG9hZFJlZkVkIHByaW50IHByb2dyZXNzQmFyIHByb2dyZXNzV2luZG93IHByb2pGaWxlVmlld2VyICcgK1xuICAgICAgJ3Byb2plY3RDdXJ2ZSBwcm9qZWN0VGFuZ2VudCBwcm9qZWN0aW9uQ29udGV4dCBwcm9qZWN0aW9uTWFuaXAgcHJvbXB0RGlhbG9nIHByb3BNb2RDdHggJyArXG4gICAgICAncHJvcE1vdmUgcHNkQ2hhbm5lbE91dGxpbmVyIHBzZEVkaXRUZXh0dXJlRmlsZSBwc2RFeHBvcnQgcHNkVGV4dHVyZUZpbGUgcHV0ZW52IHB3ZCAnICtcbiAgICAgICdweXRob24gcXVlcnlTdWJkaXYgcXVpdCByYWRfdG9fZGVnIHJhZGlhbCByYWRpb0J1dHRvbiByYWRpb0J1dHRvbkdycCByYWRpb0NvbGxlY3Rpb24gJyArXG4gICAgICAncmFkaW9NZW51SXRlbUNvbGxlY3Rpb24gcmFtcENvbG9yUG9ydCByYW5kIHJhbmRvbWl6ZUZvbGxpY2xlcyByYW5kc3RhdGUgcmFuZ2VDb250cm9sICcgK1xuICAgICAgJ3JlYWRUYWtlIHJlYnVpbGRDdXJ2ZSByZWJ1aWxkU3VyZmFjZSByZWNvcmRBdHRyIHJlY29yZERldmljZSByZWRvIHJlZmVyZW5jZSAnICtcbiAgICAgICdyZWZlcmVuY2VFZGl0IHJlZmVyZW5jZVF1ZXJ5IHJlZmluZVN1YmRpdlNlbGVjdGlvbkxpc3QgcmVmcmVzaCByZWZyZXNoQUUgJyArXG4gICAgICAncmVnaXN0ZXJQbHVnaW5SZXNvdXJjZSByZWhhc2ggcmVsb2FkSW1hZ2UgcmVtb3ZlSm9pbnQgcmVtb3ZlTXVsdGlJbnN0YW5jZSAnICtcbiAgICAgICdyZW1vdmVQYW5lbENhdGVnb3J5IHJlbmFtZSByZW5hbWVBdHRyIHJlbmFtZVNlbGVjdGlvbkxpc3QgcmVuYW1lVUkgcmVuZGVyICcgK1xuICAgICAgJ3JlbmRlckdsb2JhbHNOb2RlIHJlbmRlckluZm8gcmVuZGVyTGF5ZXJCdXR0b24gcmVuZGVyTGF5ZXJQYXJlbnQgJyArXG4gICAgICAncmVuZGVyTGF5ZXJQb3N0UHJvY2VzcyByZW5kZXJMYXllclVucGFyZW50IHJlbmRlck1hbmlwIHJlbmRlclBhcnRpdGlvbiAnICtcbiAgICAgICdyZW5kZXJRdWFsaXR5Tm9kZSByZW5kZXJTZXR0aW5ncyByZW5kZXJUaHVtYm5haWxVcGRhdGUgcmVuZGVyV2luZG93RWRpdG9yICcgK1xuICAgICAgJ3JlbmRlcldpbmRvd1NlbGVjdENvbnRleHQgcmVuZGVyZXIgcmVvcmRlciByZW9yZGVyRGVmb3JtZXJzIHJlcXVpcmVzIHJlcm9vdCAnICtcbiAgICAgICdyZXNhbXBsZUZsdWlkIHJlc2V0QUUgcmVzZXRQZnhUb1BvbHlDYW1lcmEgcmVzZXRUb29sIHJlc29sdXRpb25Ob2RlIHJldGFyZ2V0ICcgK1xuICAgICAgJ3JldmVyc2VDdXJ2ZSByZXZlcnNlU3VyZmFjZSByZXZvbHZlIHJnYl90b19oc3YgcmlnaWRCb2R5IHJpZ2lkU29sdmVyIHJvbGwgcm9sbEN0eCAnICtcbiAgICAgICdyb290T2Ygcm90IHJvdGF0ZSByb3RhdGlvbkludGVycG9sYXRpb24gcm91bmRDb25zdGFudFJhZGl1cyByb3dDb2x1bW5MYXlvdXQgcm93TGF5b3V0ICcgK1xuICAgICAgJ3J1blRpbWVDb21tYW5kIHJ1bnVwIHNhbXBsZUltYWdlIHNhdmVBbGxTaGVsdmVzIHNhdmVBdHRyUHJlc2V0IHNhdmVGbHVpZCBzYXZlSW1hZ2UgJyArXG4gICAgICAnc2F2ZUluaXRpYWxTdGF0ZSBzYXZlTWVudSBzYXZlUHJlZk9iamVjdHMgc2F2ZVByZWZzIHNhdmVTaGVsZiBzYXZlVG9vbFNldHRpbmdzIHNjYWxlICcgK1xuICAgICAgJ3NjYWxlQnJ1c2hCcmlnaHRuZXNzIHNjYWxlQ29tcG9uZW50cyBzY2FsZUNvbnN0cmFpbnQgc2NhbGVLZXkgc2NhbGVLZXlDdHggc2NlbmVFZGl0b3IgJyArXG4gICAgICAnc2NlbmVVSVJlcGxhY2VtZW50IHNjbWggc2NyaXB0Q3R4IHNjcmlwdEVkaXRvckluZm8gc2NyaXB0Sm9iIHNjcmlwdE5vZGUgc2NyaXB0VGFibGUgJyArXG4gICAgICAnc2NyaXB0VG9TaGVsZiBzY3JpcHRlZFBhbmVsIHNjcmlwdGVkUGFuZWxUeXBlIHNjcm9sbEZpZWxkIHNjcm9sbExheW91dCBzY3VscHQgJyArXG4gICAgICAnc2VhcmNoUGF0aEFycmF5IHNlZWQgc2VsTG9hZFNldHRpbmdzIHNlbGVjdCBzZWxlY3RDb250ZXh0IHNlbGVjdEN1cnZlQ1Ygc2VsZWN0S2V5ICcgK1xuICAgICAgJ3NlbGVjdEtleUN0eCBzZWxlY3RLZXlmcmFtZVJlZ2lvbkN0eCBzZWxlY3RNb2RlIHNlbGVjdFByZWYgc2VsZWN0UHJpb3JpdHkgc2VsZWN0VHlwZSAnICtcbiAgICAgICdzZWxlY3RlZE5vZGVzIHNlbGVjdGlvbkNvbm5lY3Rpb24gc2VwYXJhdG9yIHNldEF0dHIgc2V0QXR0ckVudW1SZXNvdXJjZSAnICtcbiAgICAgICdzZXRBdHRyTWFwcGluZyBzZXRBdHRyTmljZU5hbWVSZXNvdXJjZSBzZXRDb25zdHJhaW50UmVzdFBvc2l0aW9uICcgK1xuICAgICAgJ3NldERlZmF1bHRTaGFkaW5nR3JvdXAgc2V0RHJpdmVuS2V5ZnJhbWUgc2V0RHluYW1pYyBzZXRFZGl0Q3R4IHNldEVkaXRvciBzZXRGbHVpZEF0dHIgJyArXG4gICAgICAnc2V0Rm9jdXMgc2V0SW5maW5pdHkgc2V0SW5wdXREZXZpY2VNYXBwaW5nIHNldEtleUN0eCBzZXRLZXlQYXRoIHNldEtleWZyYW1lICcgK1xuICAgICAgJ3NldEtleWZyYW1lQmxlbmRzaGFwZVRhcmdldFd0cyBzZXRNZW51TW9kZSBzZXROb2RlTmljZU5hbWVSZXNvdXJjZSBzZXROb2RlVHlwZUZsYWcgJyArXG4gICAgICAnc2V0UGFyZW50IHNldFBhcnRpY2xlQXR0ciBzZXRQZnhUb1BvbHlDYW1lcmEgc2V0UGx1Z2luUmVzb3VyY2Ugc2V0UHJvamVjdCAnICtcbiAgICAgICdzZXRTdGFtcERlbnNpdHkgc2V0U3RhcnR1cE1lc3NhZ2Ugc2V0U3RhdGUgc2V0VG9vbFRvIHNldFVJVGVtcGxhdGUgc2V0WGZvcm1NYW5pcCBzZXRzICcgK1xuICAgICAgJ3NoYWRpbmdDb25uZWN0aW9uIHNoYWRpbmdHZW9tZXRyeVJlbEN0eCBzaGFkaW5nTGlnaHRSZWxDdHggc2hhZGluZ05ldHdvcmtDb21wYXJlICcgK1xuICAgICAgJ3NoYWRpbmdOb2RlIHNoYXBlQ29tcGFyZSBzaGVsZkJ1dHRvbiBzaGVsZkxheW91dCBzaGVsZlRhYkxheW91dCBzaGVsbEZpZWxkICcgK1xuICAgICAgJ3Nob3J0TmFtZU9mIHNob3dIZWxwIHNob3dIaWRkZW4gc2hvd01hbmlwQ3R4IHNob3dTZWxlY3Rpb25JblRpdGxlICcgK1xuICAgICAgJ3Nob3dTaGFkaW5nR3JvdXBBdHRyRWRpdG9yIHNob3dXaW5kb3cgc2lnbiBzaW1wbGlmeSBzaW4gc2luZ2xlUHJvZmlsZUJpcmFpbFN1cmZhY2UgJyArXG4gICAgICAnc2l6ZSBzaXplQnl0ZXMgc2tpbkNsdXN0ZXIgc2tpblBlcmNlbnQgc21vb3RoQ3VydmUgc21vb3RoVGFuZ2VudFN1cmZhY2Ugc21vb3Roc3RlcCAnICtcbiAgICAgICdzbmFwMnRvMiBzbmFwS2V5IHNuYXBNb2RlIHNuYXBUb2dldGhlckN0eCBzbmFwc2hvdCBzb2Z0IHNvZnRNb2Qgc29mdE1vZEN0eCBzb3J0IHNvdW5kICcgK1xuICAgICAgJ3NvdW5kQ29udHJvbCBzb3VyY2Ugc3BhY2VMb2NhdG9yIHNwaGVyZSBzcGhyYW5kIHNwb3RMaWdodCBzcG90TGlnaHRQcmV2aWV3UG9ydCAnICtcbiAgICAgICdzcHJlYWRTaGVldEVkaXRvciBzcHJpbmcgc3FydCBzcXVhcmVTdXJmYWNlIHNydENvbnRleHQgc3RhY2tUcmFjZSBzdGFydFN0cmluZyAnICtcbiAgICAgICdzdGFydHNXaXRoIHN0aXRjaEFuZEV4cGxvZGVTaGVsbCBzdGl0Y2hTdXJmYWNlIHN0aXRjaFN1cmZhY2VQb2ludHMgc3RyY21wICcgK1xuICAgICAgJ3N0cmluZ0FycmF5Q2F0ZW5hdGUgc3RyaW5nQXJyYXlDb250YWlucyBzdHJpbmdBcnJheUNvdW50IHN0cmluZ0FycmF5SW5zZXJ0QXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheUludGVyc2VjdG9yIHN0cmluZ0FycmF5UmVtb3ZlIHN0cmluZ0FycmF5UmVtb3ZlQXRJbmRleCAnICtcbiAgICAgICdzdHJpbmdBcnJheVJlbW92ZUR1cGxpY2F0ZXMgc3RyaW5nQXJyYXlSZW1vdmVFeGFjdCBzdHJpbmdBcnJheVRvU3RyaW5nICcgK1xuICAgICAgJ3N0cmluZ1RvU3RyaW5nQXJyYXkgc3RyaXAgc3RyaXBQcmVmaXhGcm9tTmFtZSBzdHJva2Ugc3ViZEF1dG9Qcm9qZWN0aW9uICcgK1xuICAgICAgJ3N1YmRDbGVhblRvcG9sb2d5IHN1YmRDb2xsYXBzZSBzdWJkRHVwbGljYXRlQW5kQ29ubmVjdCBzdWJkRWRpdFVWICcgK1xuICAgICAgJ3N1YmRMaXN0Q29tcG9uZW50Q29udmVyc2lvbiBzdWJkTWFwQ3V0IHN1YmRNYXBTZXdNb3ZlIHN1YmRNYXRjaFRvcG9sb2d5IHN1YmRNaXJyb3IgJyArXG4gICAgICAnc3ViZFRvQmxpbmQgc3ViZFRvUG9seSBzdWJkVHJhbnNmZXJVVnNUb0NhY2hlIHN1YmRpdiBzdWJkaXZDcmVhc2UgJyArXG4gICAgICAnc3ViZGl2RGlzcGxheVNtb290aG5lc3Mgc3Vic3RpdHV0ZSBzdWJzdGl0dXRlQWxsU3RyaW5nIHN1YnN0aXR1dGVHZW9tZXRyeSBzdWJzdHJpbmcgJyArXG4gICAgICAnc3VyZmFjZSBzdXJmYWNlU2FtcGxlciBzdXJmYWNlU2hhZGVyTGlzdCBzd2F0Y2hEaXNwbGF5UG9ydCBzd2l0Y2hUYWJsZSBzeW1ib2xCdXR0b24gJyArXG4gICAgICAnc3ltYm9sQ2hlY2tCb3ggc3lzRmlsZSBzeXN0ZW0gdGFiTGF5b3V0IHRhbiB0YW5nZW50Q29uc3RyYWludCB0ZXhMYXR0aWNlRGVmb3JtQ29udGV4dCAnICtcbiAgICAgICd0ZXhNYW5pcENvbnRleHQgdGV4TW92ZUNvbnRleHQgdGV4TW92ZVVWU2hlbGxDb250ZXh0IHRleFJvdGF0ZUNvbnRleHQgdGV4U2NhbGVDb250ZXh0ICcgK1xuICAgICAgJ3RleFNlbGVjdENvbnRleHQgdGV4U2VsZWN0U2hvcnRlc3RQYXRoQ3R4IHRleFNtdWRnZVVWQ29udGV4dCB0ZXhXaW5Ub29sQ3R4IHRleHQgJyArXG4gICAgICAndGV4dEN1cnZlcyB0ZXh0RmllbGQgdGV4dEZpZWxkQnV0dG9uR3JwIHRleHRGaWVsZEdycCB0ZXh0TWFuaXAgdGV4dFNjcm9sbExpc3QgJyArXG4gICAgICAndGV4dFRvU2hlbGYgdGV4dHVyZURpc3BsYWNlUGxhbmUgdGV4dHVyZUhhaXJDb2xvciB0ZXh0dXJlUGxhY2VtZW50Q29udGV4dCAnICtcbiAgICAgICd0ZXh0dXJlV2luZG93IHRocmVhZENvdW50IHRocmVlUG9pbnRBcmNDdHggdGltZUNvbnRyb2wgdGltZVBvcnQgdGltZXJYIHRvTmF0aXZlUGF0aCAnICtcbiAgICAgICd0b2dnbGUgdG9nZ2xlQXhpcyB0b2dnbGVXaW5kb3dWaXNpYmlsaXR5IHRva2VuaXplIHRva2VuaXplTGlzdCB0b2xlcmFuY2UgdG9sb3dlciAnICtcbiAgICAgICd0b29sQnV0dG9uIHRvb2xDb2xsZWN0aW9uIHRvb2xEcm9wcGVkIHRvb2xIYXNPcHRpb25zIHRvb2xQcm9wZXJ0eVdpbmRvdyB0b3J1cyB0b3VwcGVyICcgK1xuICAgICAgJ3RyYWNlIHRyYWNrIHRyYWNrQ3R4IHRyYW5zZmVyQXR0cmlidXRlcyB0cmFuc2Zvcm1Db21wYXJlIHRyYW5zZm9ybUxpbWl0cyB0cmFuc2xhdG9yICcgK1xuICAgICAgJ3RyaW0gdHJ1bmMgdHJ1bmNhdGVGbHVpZENhY2hlIHRydW5jYXRlSGFpckNhY2hlIHR1bWJsZSB0dW1ibGVDdHggdHVyYnVsZW5jZSAnICtcbiAgICAgICd0d29Qb2ludEFyY0N0eCB1aVJlcyB1aVRlbXBsYXRlIHVuYXNzaWduSW5wdXREZXZpY2UgdW5kbyB1bmRvSW5mbyB1bmdyb3VwIHVuaWZvcm0gdW5pdCAnICtcbiAgICAgICd1bmxvYWRQbHVnaW4gdW50YW5nbGVVViB1bnRpdGxlZEZpbGVOYW1lIHVudHJpbSB1cEF4aXMgdXBkYXRlQUUgdXNlckN0eCB1dkxpbmsgJyArXG4gICAgICAndXZTbmFwc2hvdCB2YWxpZGF0ZVNoZWxmTmFtZSB2ZWN0b3JpemUgdmlldzJkVG9vbEN0eCB2aWV3Q2FtZXJhIHZpZXdDbGlwUGxhbmUgJyArXG4gICAgICAndmlld0ZpdCB2aWV3SGVhZE9uIHZpZXdMb29rQXQgdmlld01hbmlwIHZpZXdQbGFjZSB2aWV3U2V0IHZpc29yIHZvbHVtZUF4aXMgdm9ydGV4ICcgK1xuICAgICAgJ3dhaXRDdXJzb3Igd2FybmluZyB3ZWJCcm93c2VyIHdlYkJyb3dzZXJQcmVmcyB3aGF0SXMgd2luZG93IHdpbmRvd1ByZWYgd2lyZSAnICtcbiAgICAgICd3aXJlQ29udGV4dCB3b3Jrc3BhY2Ugd3JpbmtsZSB3cmlua2xlQ29udGV4dCB3cml0ZVRha2UgeGJtTGFuZ1BhdGhMaXN0IHhmb3JtJyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAgeyAvLyBlYXRzIHZhcmlhYmxlc1xuICAgICAgICBiZWdpbjogJ1tcXFxcJFxcXFwlXFxcXEBdKFxcXFxeXFxcXHdcXFxcYnwjXFxcXHcrfFteXFxcXHNcXFxcd3tdfHtcXFxcdyt9fFxcXFx3KyknXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ21vZHVsZSB1c2VfbW9kdWxlIGltcG9ydF9tb2R1bGUgaW5jbHVkZV9tb2R1bGUgZW5kX21vZHVsZSBpbml0aWFsaXNlICcgK1xuICAgICAgJ211dGFibGUgaW5pdGlhbGl6ZSBmaW5hbGl6ZSBmaW5hbGlzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gcHJlZCAnICtcbiAgICAgICdtb2RlIGZ1bmMgdHlwZSBpbnN0IHNvbHZlciBhbnlfcHJlZCBhbnlfZnVuYyBpcyBzZW1pZGV0IGRldCBub25kZXQgJyArXG4gICAgICAnbXVsdGkgZXJyb25lb3VzIGZhaWx1cmUgY2Nfbm9uZGV0IGNjX211bHRpIHR5cGVjbGFzcyBpbnN0YW5jZSB3aGVyZSAnICtcbiAgICAgICdwcmFnbWEgcHJvbWlzZSBleHRlcm5hbCB0cmFjZSBhdG9taWMgb3JfZWxzZSByZXF1aXJlX2NvbXBsZXRlX3N3aXRjaCAnICtcbiAgICAgICdyZXF1aXJlX2RldCByZXF1aXJlX3NlbWlkZXQgcmVxdWlyZV9tdWx0aSByZXF1aXJlX25vbmRldCAnICtcbiAgICAgICdyZXF1aXJlX2NjX211bHRpIHJlcXVpcmVfY2Nfbm9uZGV0IHJlcXVpcmVfZXJyb25lb3VzIHJlcXVpcmVfZmFpbHVyZScsXG4gICAgbWV0YTpcbiAgICAgIC8vIHByYWdtYVxuICAgICAgJ2lubGluZSBub19pbmxpbmUgdHlwZV9zcGVjIHNvdXJjZV9maWxlIGZhY3RfdGFibGUgb2Jzb2xldGUgbWVtbyAnICtcbiAgICAgICdsb29wX2NoZWNrIG1pbmltYWxfbW9kZWwgdGVybWluYXRlcyBkb2VzX25vdF90ZXJtaW5hdGUgJyArXG4gICAgICAnY2hlY2tfdGVybWluYXRpb24gcHJvbWlzZV9lcXVpdmFsZW50X2NsYXVzZXMgJyArXG4gICAgICAvLyBwcmVwcm9jZXNzb3JcbiAgICAgICdmb3JlaWduX3Byb2MgZm9yZWlnbl9kZWNsIGZvcmVpZ25fY29kZSBmb3JlaWduX3R5cGUgJyArXG4gICAgICAnZm9yZWlnbl9pbXBvcnRfbW9kdWxlIGZvcmVpZ25fZXhwb3J0X2VudW0gZm9yZWlnbl9leHBvcnQgJyArXG4gICAgICAnZm9yZWlnbl9lbnVtIG1heV9jYWxsX21lcmN1cnkgd2lsbF9ub3RfY2FsbF9tZXJjdXJ5IHRocmVhZF9zYWZlICcgK1xuICAgICAgJ25vdF90aHJlYWRfc2FmZSBtYXliZV90aHJlYWRfc2FmZSBwcm9taXNlX3B1cmUgcHJvbWlzZV9zZW1pcHVyZSAnICtcbiAgICAgICd0YWJsZWRfZm9yX2lvIGxvY2FsIHVudHJhaWxlZCB0cmFpbGVkIGF0dGFjaF90b19pb19zdGF0ZSAnICtcbiAgICAgICdjYW5fcGFzc19hc19tZXJjdXJ5X3R5cGUgc3RhYmxlIHdpbGxfbm90X3Rocm93X2V4Y2VwdGlvbiAnICtcbiAgICAgICdtYXlfbW9kaWZ5X3RyYWlsIHdpbGxfbm90X21vZGlmeV90cmFpbCBtYXlfZHVwbGljYXRlICcgK1xuICAgICAgJ21heV9ub3RfZHVwbGljYXRlIGFmZmVjdHNfbGl2ZW5lc3MgZG9lc19ub3RfYWZmZWN0X2xpdmVuZXNzICcgK1xuICAgICAgJ2RvZXNudF9hZmZlY3RfbGl2ZW5lc3Mgbm9fc2hhcmluZyB1bmtub3duX3NoYXJpbmcgc2hhcmluZycsXG4gICAgYnVpbHRfaW46XG4gICAgICAnc29tZSBhbGwgbm90IGlmIHRoZW4gZWxzZSB0cnVlIGZhaWwgZmFsc2UgdHJ5IGNhdGNoIGNhdGNoX2FueSAnICtcbiAgICAgICdzZW1pZGV0X3RydWUgc2VtaWRldF9mYWxzZSBzZW1pZGV0X2ZhaWwgaW1wdXJlX3RydWUgaW1wdXJlIHNlbWlwdXJlJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCclJywgJyQnKTtcblxuICB2YXIgTlVNQ09ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBcIjAnLlxcXFx8MFtib3hdWzAtOWEtZkEtRl0qXCJcbiAgfTtcblxuICB2YXIgQVRPTSA9IGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtyZWxldmFuY2U6IDB9KTtcbiAgdmFyIFNUUklORyA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7cmVsZXZhbmNlOiAwfSk7XG4gIHZhciBTVFJJTkdfRk1UID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFxcXFxcW2FiZm5ydHZdXFxcXHxcXFxcXFxcXHhbMC05YS1mQS1GXSpcXFxcXFxcXFxcXFx8JVstKyMgKi4wLTldKltkaW94WHVjc2ZlRWdHcF0nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBTVFJJTkcuY29udGFpbnMgPSBTVFJJTkcuY29udGFpbnMuc2xpY2UoKSAvLyB3ZSBuZWVkIG91ciBvd24gY29weSBvZiBjb250YWluc1xuICBTVFJJTkcuY29udGFpbnMucHVzaChTVFJJTkdfRk1UKTtcblxuICB2YXIgSU1QTElDQVRJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICc8PT4nfSxcbiAgICAgIHtiZWdpbjogJzw9JywgcmVsZXZhbmNlOiAwfSxcbiAgICAgIHtiZWdpbjogJz0+JywgcmVsZXZhbmNlOiAwfSxcbiAgICAgIHtiZWdpbjogJy9cXFxcXFxcXCd9LFxuICAgICAge2JlZ2luOiAnXFxcXFxcXFwvJ31cbiAgICBdXG4gIH07XG5cbiAgdmFyIEhFQURfQk9EWV9DT05KVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJzotXFxcXHwtLT4nfSxcbiAgICAgIHtiZWdpbjogJz0nLCByZWxldmFuY2U6IDB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtJywgJ21vbyddLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgSU1QTElDQVRJT04sXG4gICAgICBIRUFEX0JPRFlfQ09OSlVOQ1RJT04sXG4gICAgICBDT01NRU5ULFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIE5VTUNPREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQVRPTSxcbiAgICAgIFNUUklORyxcbiAgICAgIHtiZWdpbjogLzotL30sIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB7YmVnaW46IC9cXC4kL30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIC8vbG9jYWwgbGFiZWxzOiAlP1tGQl0/W0FUXT9cXGR7MSwyfVxcdytcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGFsaWFzZXM6IFsnbWlwcyddLFxuICAgIGxleGVtZXM6ICdcXFxcLj8nICsgaGxqcy5JREVOVF9SRSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbWV0YTpcbiAgICAgICAgLy9HTlUgcHJlcHJvY3NcbiAgICAgICAgJy4yYnl0ZSAuNGJ5dGUgLmFsaWduIC5hc2NpaSAuYXNjaXogLmJhbGlnbiAuYnl0ZSAuY29kZSAuZGF0YSAuZWxzZSAuZW5kIC5lbmRpZiAuZW5kbSAuZW5kciAuZXF1IC5lcnIgLmV4aXRtIC5leHRlcm4gLmdsb2JhbCAuaHdvcmQgLmlmIC5pZmRlZiAuaWZuZGVmIC5pbmNsdWRlIC5pcnAgLmxvbmcgLm1hY3JvIC5yZXB0IC5yZXEgLnNlY3Rpb24gLnNldCAuc2tpcCAuc3BhY2UgLnRleHQgLndvcmQgLmx0b3JnICcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJyQwICQxICQyICQzICQ0ICQ1ICQ2ICQ3ICQ4ICQ5ICQxMCAkMTEgJDEyICQxMyAkMTQgJDE1ICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnJDE2ICQxNyAkMTggJDE5ICQyMCAkMjEgJDIyICQyMyAkMjQgJDI1ICQyNiAkMjcgJDI4ICQyOSAkMzAgJDMxICcgKyAvLyBpbnRlZ2VyIHJlZ2lzdGVyc1xuICAgICAgICAnemVybyBhdCB2MCB2MSBhMCBhMSBhMiBhMyBhNCBhNSBhNiBhNyAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICd0MCB0MSB0MiB0MyB0NCB0NSB0NiB0NyB0OCB0OSBzMCBzMSBzMiBzMyBzNCBzNSBzNiBzNyBzOCAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICdrMCBrMSBncCBzcCBmcCByYSAnICsgLy8gaW50ZWdlciByZWdpc3RlciBhbGlhc2VzXG4gICAgICAgICckZjAgJGYxICRmMiAkZjIgJGY0ICRmNSAkZjYgJGY3ICRmOCAkZjkgJGYxMCAkZjExICRmMTIgJGYxMyAkZjE0ICRmMTUgJyArIC8vIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyc1xuICAgICAgICAnJGYxNiAkZjE3ICRmMTggJGYxOSAkZjIwICRmMjEgJGYyMiAkZjIzICRmMjQgJGYyNSAkZjI2ICRmMjcgJGYyOCAkZjI5ICRmMzAgJGYzMSAnICsgLy8gZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzXG4gICAgICAgICdDb250ZXh0IFJhbmRvbSBFbnRyeUxvMCBFbnRyeUxvMSBDb250ZXh0IFBhZ2VNYXNrIFdpcmVkIEVudHJ5SGkgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdIV1JFbmEgQmFkVkFkZHIgQ291bnQgQ29tcGFyZSBTUiBJbnRDdGwgU1JTQ3RsIFNSU01hcCBDYXVzZSBFUEMgUFJJZCAnICsgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICAgICAgJ0VCYXNlIENvbmZpZyBDb25maWcxIENvbmZpZzIgQ29uZmlnMyBMTEFkZHIgRGVidWcgREVQQyBERVNBVkUgQ2FjaGVFcnIgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdFQ0MgRXJyb3JFUEMgVGFnTG8gRGF0YUxvIFRhZ0hpIERhdGFIaSBXYXRjaExvIFdhdGNoSGkgUGVyZkN0bCBQZXJmQ250ICcgLy8gQ29wcm9jZXNzb3IgMCByZWdpc3RlcnNcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKCcrICAgICAvL21uZW1vbmljc1xuICAgICAgICAgICAgLy8gMzItYml0IGludGVnZXIgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAnYWRkaT91P3xhbmRpP3xiKGFsKT98YmVxbD98YmdleihhbCk/bD98Ymd0emw/fGJsZXpsP3xibHR6KGFsKT9sP3wnICtcbiAgICAgICAgICAgICdibmVsP3xjbFtvel18ZGl2dT98ZXh0fGluc3xqKGFsKT98amFscihcXC5oYik/fGpyKFxcLmhiKT98bGJ1P3xsaHU/fCcgK1xuICAgICAgICAgICAgJ2xsfGx1aXxsd1tscl0/fG1hZGR1P3xtZmhpfG1mbG98bW92bnxtb3Z6fG1vdmV8bXN1YnU/fG10aGl8bXRsb3xtdWx8JyArXG4gICAgICAgICAgICAnbXVsdHU/fG5vcHxub3J8b3JpP3xyb3Rydj98c2J8c2N8c2VbYmhdfHNofHNsbHY/fHNsdGk/dT98c3Jhdj98JyArXG4gICAgICAgICAgICAnc3Jsdj98c3VidT98c3dbbHJdP3x4b3JpP3x3c2JofCcgK1xuICAgICAgICAgICAgLy8gZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAnYWJzXFwuW3NkXXxhZGRcXC5bc2RdfGFsbnYucHN8YmMxW2Z0XWw/fCcgK1xuICAgICAgICAgICAgJ2NcXC4ocz9mfHVufHU/ZXF8W291XWx0fFtvdV1sZXxuZ2xlP3xzZXF8bFtldF18bmdbZXRdKVxcLltzZF18JyArXG4gICAgICAgICAgICAnKGNlaWx8Zmxvb3J8cm91bmR8dHJ1bmMpXFwuW2x3XVxcLltzZF18Y2ZjMXxjdnRcXC5kXFwuW2xzd118JyArXG4gICAgICAgICAgICAnY3Z0XFwubFxcLltkc3ddfGN2dFxcLnBzXFwuc3xjdnRcXC5zXFwuW2Rsd118Y3Z0XFwuc1xcLnBbbHVdfGN2dFxcLndcXC5bZGxzXXwnICtcbiAgICAgICAgICAgICdkaXZcXC5bZHNdfGxkeD9jMXxsdXhjMXxsd3g/YzF8bWFkZFxcLltzZF18bWZjMXxtb3ZbZm50el0/XFwuW2RzXXwnICtcbiAgICAgICAgICAgICdtc3ViXFwuW3NkXXxtdGg/YzF8bXVsXFwuW2RzXXxuZWdcXC5bZHNdfG5tYWRkXFwuW2RzXXxubXN1YlxcLltkc118JyArXG4gICAgICAgICAgICAncFtsdV1bbHVdXFwucHN8cmVjaXBcXC5mbXR8cj9zcXJ0XFwuW2RzXXxzZHg/YzF8c3ViXFwuW2RzXXxzdXhjMXwnICtcbiAgICAgICAgICAgICdzd3g/YzF8JyArXG4gICAgICAgICAgICAvLyBzeXN0ZW0gY29udHJvbCBpbnN0cnVjdGlvbnNcbiAgICAgICAgICAgICdicmVha3xjYWNoZXxkP2VyZXR8W2RlXWl8ZWhifG1mYzB8bXRjMHxwYXVzZXxwcmVmeD98cmRod3J8JyArXG4gICAgICAgICAgICAncmRwZ3ByfHNkYmJwfHNzbm9wfHN5bmNpP3xzeXNjYWxsfHRlcWk/fHRnZWk/dT98dGxiKHB8cnx3W2lyXSl8JyArXG4gICAgICAgICAgICAndGx0aT91P3x0bmVpP3x3YWl0fHdycGdwcicrXG4gICAgICAgICcpJyxcbiAgICAgICAgZW5kOiAnXFxcXHMnXG4gICAgICB9LFxuICAgICAgLy8gbGluZXMgZW5kaW5nIHdpdGggOyBvciAjIGFyZW4ndCByZWFsbHkgY29tbWVudHMsIHByb2JhYmx5IGF1dG8tZGV0ZWN0IGZhaWxcbiAgICAgIGhsanMuQ09NTUVOVCgnWzsjXSg/IVxccyokKScsICckJyksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdbXlxcXFxcXFxcXVxcJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7YmVnaW46ICcweFswLTlhLWZdKyd9LCAvL2hleFxuICAgICAgICAgICAge2JlZ2luOiAnXFxcXGItP1xcXFxkKyd9ICAgICAgICAgICAvL2JhcmUgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ15cXFxccypbYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSs6J30sIC8vR05VIE1JUFMgc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdeXFxcXHMqWzAtOV0rOid9LCAvLyBudW1iZXJlZCBsb2NhbCBsYWJlbHNcbiAgICAgICAgICAgIHtiZWdpbjogJ1swLTldK1tiZl0nIH0gIC8vIG51bWJlciBsb2NhbCBsYWJlbCByZWZlcmVuY2UgKGJhY2t3YXJkcywgZm9yd2FyZHMpXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcLydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnZW52aXJvbiB2b2NhYnVsYXJpZXMgbm90YXRpb25zIGNvbnN0cnVjdG9ycyBkZWZpbml0aW9ucyAnICtcbiAgICAgICdyZWdpc3RyYXRpb25zIHRoZW9yZW1zIHNjaGVtZXMgcmVxdWlyZW1lbnRzIGJlZ2luIGVuZCBkZWZpbml0aW9uICcgK1xuICAgICAgJ3JlZ2lzdHJhdGlvbiBjbHVzdGVyIGV4aXN0ZW5jZSBwcmVkIGZ1bmMgZGVmcHJlZCBkZWZmdW5jIHRoZW9yZW0gJyArXG4gICAgICAncHJvb2YgbGV0IHRha2UgYXNzdW1lIHRoZW4gdGh1cyBoZW5jZSBleCBmb3Igc3QgaG9sZHMgY29uc2lkZXIgJyArXG4gICAgICAncmVjb25zaWRlciBzdWNoIHRoYXQgYW5kIGluIHByb3ZpZGVkIG9mIGFzIGZyb20gYmUgYmVpbmcgYnkgbWVhbnMgJyArXG4gICAgICAnZXF1YWxzIGltcGxpZXMgaWZmIHJlZGVmaW5lIGRlZmluZSBub3cgbm90IG9yIGF0dHIgaXMgbW9kZSAnICtcbiAgICAgICdzdXBwb3NlIHBlciBjYXNlcyBzZXQgdGhlc2lzIGNvbnRyYWRpY3Rpb24gc2NoZW1lIHJlc2VydmUgc3RydWN0ICcgK1xuICAgICAgJ2NvcnJlY3RuZXNzIGNvbXBhdGliaWxpdHkgY29oZXJlbmNlIHN5bW1ldHJ5IGFzc3ltZXRyeSAnICtcbiAgICAgICdyZWZsZXhpdml0eSBpcnJlZmxleGl2aXR5IGNvbm5lY3RlZG5lc3MgdW5pcXVlbmVzcyBjb21tdXRhdGl2aXR5ICcgK1xuICAgICAgJ2lkZW1wb3RlbmNlIGludm9sdXRpdmVuZXNzIHByb2plY3Rpdml0eScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnOjonLCAnJCcpXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFBFUkxfS0VZV09SRFMgPSAnZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjICcgK1xuICAgICdtYSBzeXN3cml0ZSB0ciBzZW5kIHVtYXNrIHN5c29wZW4gc2htd3JpdGUgdmVjIHF4IHV0aW1lIGxvY2FsIG9jdCBzZW1jdGwgbG9jYWx0aW1lICcgK1xuICAgICdyZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXEnICtcbiAgICAnZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50ICcgK1xuICAgICdzaHV0ZG93biBkdW1wIGNob21wIGNvbm5lY3QgZ2V0c29ja25hbWUgZGllIHNvY2tldHBhaXIgY2xvc2UgZmxvY2sgZXhpc3RzIGluZGV4IHNobWdldCcgK1xuICAgICdzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyICcgK1xuICAgICd1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCAnICtcbiAgICAnZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgJyArXG4gICAgJ2VuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgJyArXG4gICAgJ21rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgJyArXG4gICAgJ2dldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyICcgK1xuICAgICd1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgJyArXG4gICAgJ2dldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciAnICtcbiAgICAnbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCAnICtcbiAgICAnc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCAnICtcbiAgICAnY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoICcgK1xuICAgICd0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpcicgK1xuICAgICdpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlICcgK1xuICAgICdhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdbJEBdXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFNcbiAgfTtcbiAgdmFyIE1FVEhPRCA9IHtcbiAgICBiZWdpbjogJy0+eycsIGVuZDogJ30nXG4gICAgLy8gY29udGFpbnMgZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgVkFSID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cXCRcXGQvfSxcbiAgICAgIHtiZWdpbjogL1tcXCQlQF0oXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfHtcXHcrfXxcXHcrKDo6XFx3KikqKS99LFxuICAgICAge2JlZ2luOiAvW1xcJCVAXVteXFxzXFx3e10vLCByZWxldmFuY2U6IDB9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HX0NPTlRBSU5TID0gW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIFZBUl07XG4gIHZhciBQRVJMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ15cXFxcPVxcXFx3JyxcbiAgICAgICdcXFxcPWN1dCcsXG4gICAgICB7XG4gICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgKSxcbiAgICBNRVRIT0QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGNvbnRhaW5zOiBTVFJJTkdfQ09OVEFJTlMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFw8JywgZW5kOiAnXFxcXD4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLCBlbmQ6ICdxJyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICd7XFxcXHcrfScsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXC0/XFxcXHcrXFxcXHMqXFxcXD1cXFxcPicsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHsgLy8gcmVnZXhwIGNvbnRhaW5lclxuICAgICAgYmVnaW46ICcoXFxcXC9cXFxcL3wnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXFxcYilcXFxccyonLFxuICAgICAga2V5d29yZHM6ICdzcGxpdCByZXR1cm4gcHJpbnQgcmV2ZXJzZSBncmVwJyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKHN8dHJ8eSkvKFxcXFxcXFxcLnxbXi9dKSovKFxcXFxcXFxcLnxbXi9dKSovW2Etel0qJyxcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKG18cXIpPy8nLCBlbmQ6ICcvW2Etel0qJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwIC8vIGFsbG93cyBlbXB0eSBcIi8vXCIgd2hpY2ggaXMgYSBjb21tb24gY29tbWVudCBkZWxpbWl0ZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWInLCBlbmQ6ICcoXFxcXHMqXFxcXCguKj9cXFxcKSk/Wzt7XScsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDUsXG4gICAgICBjb250YWluczogW2hsanMuVElUTEVfTU9ERV1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLVxcXFx3XFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogXCJeX19EQVRBX18kXCIsXG4gICAgICBlbmQ6IFwiXl9fRU5EX18kXCIsXG4gICAgICBzdWJMYW5ndWFnZTogJ21vam9saWNpb3VzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIl5AQC4qXCIsXG4gICAgICAgICAgICBlbmQ6IFwiJFwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcbiAgTUVUSE9ELmNvbnRhaW5zID0gUEVSTF9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwbCcsICdwbSddLFxuICAgIGxleGVtZXM6IC9bXFx3XFwuXSsvLFxuICAgIGtleXdvcmRzOiBQRVJMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBQRVJMX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15fXyhFTkR8REFUQSlfXyQnXG4gICAgICB9LFxuICAgIC8vIG1vam9saWNpb3VzIGxpbmVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXlxcXFxzKiV7MSwyfT17MCwyfVwiLCBlbmQ6ICckJyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwZXJsJ1xuICAgICAgfSxcbiAgICAvLyBtb2pvbGljaW91cyBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCI8JXsxLDJ9PXswLDJ9XCIsXG4gICAgICAgIGVuZDogXCI9ezAsMX0lPlwiLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BlcmwnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1skXVthLWZBLUYwLTldKydcbiAgICAgIH0sXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ3B1YmxpYyBwcml2YXRlIHByb3BlcnR5IGNvbnRpbnVlIGV4aXQgZXh0ZXJuIG5ldyB0cnkgY2F0Y2ggJyArXG4gICAgICAgICdlYWNoaW4gbm90IGFic3RyYWN0IGZpbmFsIHNlbGVjdCBjYXNlIGRlZmF1bHQgY29uc3QgbG9jYWwgZ2xvYmFsIGZpZWxkICcgK1xuICAgICAgICAnZW5kIGlmIHRoZW4gZWxzZSBlbHNlaWYgZW5kaWYgd2hpbGUgd2VuZCByZXBlYXQgdW50aWwgZm9yZXZlciBmb3IgJyArXG4gICAgICAgICd0byBzdGVwIG5leHQgcmV0dXJuIG1vZHVsZSBpbmxpbmUgdGhyb3cgaW1wb3J0JyxcblxuICAgICAgYnVpbHRfaW46ICdEZWJ1Z0xvZyBEZWJ1Z1N0b3AgRXJyb3IgUHJpbnQgQUNvcyBBQ29zciBBU2luIEFTaW5yIEFUYW4gQVRhbjIgQVRhbjJyIEFUYW5yIEFicyBBYnMgQ2VpbCAnICtcbiAgICAgICAgJ0NsYW1wIENsYW1wIENvcyBDb3NyIEV4cCBGbG9vciBMb2cgTWF4IE1heCBNaW4gTWluIFBvdyBTZ24gU2duIFNpbiBTaW5yIFNxcnQgVGFuIFRhbnIgU2VlZCBQSSBIQUxGUEkgVFdPUEknLFxuXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxsIGFuZCBvciBzaGwgc2hyIG1vZCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJyNyZW0nLCAnI2VuZCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICBcIidcIixcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIG1ldGhvZCcsIGVuZDogJ1soPTpdfCQnLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKHNlbGZ8c3VwZXIpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxccyojJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmRpZiBlbmQgdGhlbid9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqc3RyaWN0XFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYWxpYXMnLCBlbmQ6ICc9JyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgIC8vIE1vb25zY3JpcHQga2V5d29yZHNcbiAgICAgICdpZiB0aGVuIG5vdCBmb3IgaW4gd2hpbGUgZG8gcmV0dXJuIGVsc2UgZWxzZWlmIGJyZWFrIGNvbnRpbnVlIHN3aXRjaCBhbmQgb3IgJyArXG4gICAgICAndW5sZXNzIHdoZW4gY2xhc3MgZXh0ZW5kcyBzdXBlciBsb2NhbCBpbXBvcnQgZXhwb3J0IGZyb20gdXNpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ19HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgJyArXG4gICAgICAnbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgJyArXG4gICAgICAnc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgJyArXG4gICAgICAnaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSdcbiAgfTtcbiAgdmFyIEpTX0lERU5UX1JFID0gJ1tBLVphLXokX11bMC05QS1aYS16JF9dKic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LywgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge3N0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9fSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgIGJlZ2luOiAnQF9fJyArIGhsanMuSURFTlRfUkVcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBobGpzLklERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyIG9uIHBhciB3aXRoIENvZmZlZVNjcmlwdFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnXFxcXFxcXFwnICsgaGxqcy5JREVOVF9SRSAvLyBpbnN0XFxtZXRob2RcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBKU19JREVOVF9SRX0pO1xuICB2YXIgUEFSQU1TX1JFID0gJyhcXFxcKC4qXFxcXCkpP1xcXFxzKlxcXFxCWy09XT4nO1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKFteXFxcXChdJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgLyogV2UgbmVlZCBhbm90aGVyIGNvbnRhaW5lZCBuYW1lbGVzcyBtb2RlIHRvIG5vdCBoYXZlIGV2ZXJ5IG5lc3RlZFxuICAgIHBhaXIgb2YgcGFyZW5zIHRvIGJlIGNhbGxlZCBcInBhcmFtc1wiICovXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICBjb250YWluczogWydzZWxmJ10uY29uY2F0KEVYUFJFU1NJT05TKVxuICAgIH1dXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21vb24nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05TLmNvbmNhdChbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLCAgLy8gZnVuY3Rpb246IC0+ID0+XG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bXFwoLDo9XVxccyovLCAvLyBhbm9ueW1vdXMgZnVuY3Rpb24gc3RhcnRcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCAgICAvLyB0YWJsZVxuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ2J1aWxkIGNyZWF0ZSBpbmRleCBkZWxldGUgZHJvcCBleHBsYWluIGluZmVyfDEwIGluc2VydCBtZXJnZSBwcmVwYXJlIHNlbGVjdCB1cGRhdGUgdXBzZXJ0fDEwJyxcbiAgICAgICAgZW5kOiAvOy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWxcbiAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2FsbCBhbHRlciBhbmFseXplIGFuZCBhbnkgYXJyYXkgYXMgYXNjIGJlZ2luIGJldHdlZW4gYmluYXJ5IGJvb2xlYW4gYnJlYWsgYnVja2V0IGJ1aWxkIGJ5IGNhbGwgJyArXG4gICAgICAgICAgICAnY2FzZSBjYXN0IGNsdXN0ZXIgY29sbGF0ZSBjb2xsZWN0aW9uIGNvbW1pdCBjb25uZWN0IGNvbnRpbnVlIGNvcnJlbGF0ZSBjb3ZlciBjcmVhdGUgZGF0YWJhc2UgJyArXG4gICAgICAgICAgICAnZGF0YXNldCBkYXRhc3RvcmUgZGVjbGFyZSBkZWNyZW1lbnQgZGVsZXRlIGRlcml2ZWQgZGVzYyBkZXNjcmliZSBkaXN0aW5jdCBkbyBkcm9wIGVhY2ggZWxlbWVudCAnICtcbiAgICAgICAgICAgICdlbHNlIGVuZCBldmVyeSBleGNlcHQgZXhjbHVkZSBleGVjdXRlIGV4aXN0cyBleHBsYWluIGZldGNoIGZpcnN0IGZsYXR0ZW4gZm9yIGZvcmNlIGZyb20gJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gZ3JhbnQgZ3JvdXAgZ3NpIGhhdmluZyBpZiBpZ25vcmUgaWxpa2UgaW4gaW5jbHVkZSBpbmNyZW1lbnQgaW5kZXggaW5mZXIgaW5saW5lIGlubmVyICcgK1xuICAgICAgICAgICAgJ2luc2VydCBpbnRlcnNlY3QgaW50byBpcyBqb2luIGtleSBrZXlzIGtleXNwYWNlIGtub3duIGxhc3QgbGVmdCBsZXQgbGV0dGluZyBsaWtlIGxpbWl0IGxzbSBtYXAgJyArXG4gICAgICAgICAgICAnbWFwcGluZyBtYXRjaGVkIG1hdGVyaWFsaXplZCBtZXJnZSBtaW51cyBuYW1lc3BhY2UgbmVzdCBub3QgbnVtYmVyIG9iamVjdCBvZmZzZXQgb24gJyArXG4gICAgICAgICAgICAnb3B0aW9uIG9yIG9yZGVyIG91dGVyIG92ZXIgcGFyc2UgcGFydGl0aW9uIHBhc3N3b3JkIHBhdGggcG9vbCBwcmVwYXJlIHByaW1hcnkgcHJpdmF0ZSBwcml2aWxlZ2UgJyArXG4gICAgICAgICAgICAncHJvY2VkdXJlIHB1YmxpYyByYXcgcmVhbG0gcmVkdWNlIHJlbmFtZSByZXR1cm4gcmV0dXJuaW5nIHJldm9rZSByaWdodCByb2xlIHJvbGxiYWNrIHNhdGlzZmllcyAnICtcbiAgICAgICAgICAgICdzY2hlbWEgc2VsZWN0IHNlbGYgc2VtaSBzZXQgc2hvdyBzb21lIHN0YXJ0IHN0YXRpc3RpY3Mgc3RyaW5nIHN5c3RlbSB0aGVuIHRvIHRyYW5zYWN0aW9uIHRyaWdnZXIgJyArXG4gICAgICAgICAgICAndHJ1bmNhdGUgdW5kZXIgdW5pb24gdW5pcXVlIHVua25vd24gdW5uZXN0IHVuc2V0IHVwZGF0ZSB1cHNlcnQgdXNlIHVzZXIgdXNpbmcgdmFsaWRhdGUgdmFsdWUgJyArXG4gICAgICAgICAgICAndmFsdWVkIHZhbHVlcyB2aWEgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGggd2l0aGluIHdvcmsgeG9yJyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9saXRlcmFscy5odG1sXG4gICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwgbWlzc2luZ3w1JyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMuaHRtbFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgJ2FycmF5X2FnZyBhcnJheV9hcHBlbmQgYXJyYXlfY29uY2F0IGFycmF5X2NvbnRhaW5zIGFycmF5X2NvdW50IGFycmF5X2Rpc3RpbmN0IGFycmF5X2lmbnVsbCBhcnJheV9sZW5ndGggJyArXG4gICAgICAgICAgICAnYXJyYXlfbWF4IGFycmF5X21pbiBhcnJheV9wb3NpdGlvbiBhcnJheV9wcmVwZW5kIGFycmF5X3B1dCBhcnJheV9yYW5nZSBhcnJheV9yZW1vdmUgYXJyYXlfcmVwZWF0IGFycmF5X3JlcGxhY2UgJyArXG4gICAgICAgICAgICAnYXJyYXlfcmV2ZXJzZSBhcnJheV9zb3J0IGFycmF5X3N1bSBhdmcgY291bnQgbWF4IG1pbiBzdW0gZ3JlYXRlc3QgbGVhc3QgaWZtaXNzaW5nIGlmbWlzc2luZ29ybnVsbCBpZm51bGwgJyArXG4gICAgICAgICAgICAnbWlzc2luZ2lmIG51bGxpZiBpZmluZiBpZm5hbiBpZm5hbm9yaW5mIG5hbmluZiBuZWdpbmZpZiBwb3NpbmZpZiBjbG9ja19taWxsaXMgY2xvY2tfc3RyIGRhdGVfYWRkX21pbGxpcyAnICtcbiAgICAgICAgICAgICdkYXRlX2FkZF9zdHIgZGF0ZV9kaWZmX21pbGxpcyBkYXRlX2RpZmZfc3RyIGRhdGVfcGFydF9taWxsaXMgZGF0ZV9wYXJ0X3N0ciBkYXRlX3RydW5jX21pbGxpcyBkYXRlX3RydW5jX3N0ciAnICtcbiAgICAgICAgICAgICdkdXJhdGlvbl90b19zdHIgbWlsbGlzIHN0cl90b19taWxsaXMgbWlsbGlzX3RvX3N0ciBtaWxsaXNfdG9fdXRjIG1pbGxpc190b196b25lX25hbWUgbm93X21pbGxpcyBub3dfc3RyICcgK1xuICAgICAgICAgICAgJ3N0cl90b19kdXJhdGlvbiBzdHJfdG9fdXRjIHN0cl90b196b25lX25hbWUgZGVjb2RlX2pzb24gZW5jb2RlX2pzb24gZW5jb2RlZF9zaXplIHBvbHlfbGVuZ3RoIGJhc2U2NCBiYXNlNjRfZW5jb2RlICcgK1xuICAgICAgICAgICAgJ2Jhc2U2NF9kZWNvZGUgbWV0YSB1dWlkIGFicyBhY29zIGFzaW4gYXRhbiBhdGFuMiBjZWlsIGNvcyBkZWdyZWVzIGUgZXhwIGxuIGxvZyBmbG9vciBwaSBwb3dlciByYWRpYW5zIHJhbmRvbSAnICtcbiAgICAgICAgICAgICdyb3VuZCBzaWduIHNpbiBzcXJ0IHRhbiB0cnVuYyBvYmplY3RfbGVuZ3RoIG9iamVjdF9uYW1lcyBvYmplY3RfcGFpcnMgb2JqZWN0X2lubmVyX3BhaXJzIG9iamVjdF92YWx1ZXMgJyArXG4gICAgICAgICAgICAnb2JqZWN0X2lubmVyX3ZhbHVlcyBvYmplY3RfYWRkIG9iamVjdF9wdXQgb2JqZWN0X3JlbW92ZSBvYmplY3RfdW53cmFwIHJlZ2V4cF9jb250YWlucyByZWdleHBfbGlrZSByZWdleHBfcG9zaXRpb24gJyArXG4gICAgICAgICAgICAncmVnZXhwX3JlcGxhY2UgY29udGFpbnMgaW5pdGNhcCBsZW5ndGggbG93ZXIgbHRyaW0gcG9zaXRpb24gcmVwZWF0IHJlcGxhY2UgcnRyaW0gc3BsaXQgc3Vic3RyIHRpdGxlIHRyaW0gdXBwZXIgJyArXG4gICAgICAgICAgICAnaXNhcnJheSBpc2F0b20gaXNib29sZWFuIGlzbnVtYmVyIGlzb2JqZWN0IGlzc3RyaW5nIHR5cGUgdG9hcnJheSB0b2F0b20gdG9ib29sZWFuIHRvbnVtYmVyIHRvb2JqZWN0IHRvc3RyaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFxcZCsvfSxcbiAgICAgIHtiZWdpbjogL1xcJFxcey8sIGVuZDogL30vfSxcbiAgICAgIHtiZWdpbjogJ1tcXFxcJFxcXFxAXScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkV9XG4gICAgXVxuICB9O1xuICB2YXIgREVGQVVMVCA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnW2Etei9fXSsnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnb24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgJyArXG4gICAgICAgICdzZWxlY3QgYnJlYWsgbGFzdCBwZXJtYW5lbnQgcmVkaXJlY3Qga3F1ZXVlIHJ0c2lnIGVwb2xsIHBvbGwgL2Rldi9wb2xsJ1xuICAgIH0sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGlsbGVnYWw6ICc9PicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyB0aGlzIHN3YWxsb3dzIGVudGlyZSBVUkxzIHRvIGF2b2lkIGRldGVjdGluZyBudW1iZXJzIHdpdGhpblxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhbYS16XSspOi8nLCBlbmQ6ICdcXFxccycsIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1ZBUl1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogXCJcXFxcc1xcXFxeXCIsIGVuZDogXCJcXFxcc3x7fDtcIiwgcmV0dXJuRW5kOiB0cnVlfSxcbiAgICAgICAgICAvLyByZWdleHAgbG9jYXRpb25zICh+LCB+KilcbiAgICAgICAgICB7YmVnaW46IFwiflxcXFwqP1xcXFxzK1wiLCBlbmQ6IFwiXFxcXHN8e3w7XCIsIHJldHVybkVuZDogdHJ1ZX0sXG4gICAgICAgICAgLy8gKi5leGFtcGxlLmNvbVxuICAgICAgICAgIHtiZWdpbjogXCJcXFxcKihcXFxcLlthLXpcXFxcLV0rKStcIn0sXG4gICAgICAgICAgLy8gc3ViLmV4YW1wbGUuKlxuICAgICAgICAgIHtiZWdpbjogXCIoW2EtelxcXFwtXStcXFxcLikrXFxcXCpcIn1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIElQXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyB1bml0c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrW2tLbU1nR2RzaGR3eV0qXFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ25naW54Y29uZiddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzK3snLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMnLCBlbmQ6ICc7fHsnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAgIHN0YXJ0czogREVGQVVMVFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnW15cXFxcc1xcXFx9XSdcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyduaW0nXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZHIgYW5kIGFzIGFzbSBiaW5kIGJsb2NrIGJyZWFrIGNhc2UgY2FzdCBjb25zdCBjb250aW51ZSBjb252ZXJ0ZXIgJyArXG4gICAgICAgICdkaXNjYXJkIGRpc3RpbmN0IGRpdiBkbyBlbGlmIGVsc2UgZW5kIGVudW0gZXhjZXB0IGV4cG9ydCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGZyb20gZ2VuZXJpYyBpZiBpbXBvcnQgaW4gaW5jbHVkZSBpbnRlcmZhY2UgaXMgaXNub3QgaXRlcmF0b3IgJyArXG4gICAgICAgICdsZXQgbWFjcm8gbWV0aG9kIG1peGluIG1vZCBuaWwgbm90IG5vdGluIG9iamVjdCBvZiBvciBvdXQgcHJvYyBwdHIgJyArXG4gICAgICAgICdyYWlzZSByZWYgcmV0dXJuIHNobCBzaHIgc3RhdGljIHRlbXBsYXRlIHRyeSB0dXBsZSB0eXBlIHVzaW5nIHZhciAnICtcbiAgICAgICAgJ3doZW4gd2hpbGUgd2l0aCB3aXRob3V0IHhvciB5aWVsZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnc2hhcmVkIGd1YXJkZWQgc3RkaW4gc3Rkb3V0IHN0ZGVyciByZXN1bHQgdHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2ludCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQgZmxvYXQgJyArXG4gICAgICAgICdmbG9hdDMyIGZsb2F0NjQgYm9vbCBjaGFyIHN0cmluZyBjc3RyaW5nIHBvaW50ZXIgZXhwciBzdG10IHZvaWQgJyArXG4gICAgICAgICdhdXRvIGFueSByYW5nZSBhcnJheSBvcGVuYXJyYXkgdmFyYXJncyBzZXEgc2V0IGNsb25nIGN1bG9uZyBjY2hhciAnICtcbiAgICAgICAgJ2NzY2hhciBjc2hvcnQgY2ludCBjc2l6ZSBjbG9uZ2xvbmcgY2Zsb2F0IGNkb3VibGUgY2xvbmdkb3VibGUgJyArXG4gICAgICAgICdjdWNoYXIgY3VzaG9ydCBjdWludCBjdWxvbmdsb25nIGNzdHJpbmdhcnJheSBzZW1pc3RhdGljJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFsge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgLy8gQWN0dWFsbHkgcHJhZ21hXG4gICAgICAgIGJlZ2luOiAve1xcLi8sXG4gICAgICAgIGVuZDogL1xcLn0vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvW2EtekEtWl1cXHcqXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvXCJcIi99XVxuICAgICAgfSwge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLyhbYS16QS1aXVxcdyopP1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi9cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46IC9cXGJbQS1aXVxcdytcXGIvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1xcYigwW3hYXVswLTlhLWZBLUZdW18wLTlhLWZBLUZdKikoJz9baUl1VV0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYigwb1swLTddW18wLTddKikoJz9baUl1VWZGXSg4fDE2fDMyfDY0KSk/L30sXG4gICAgICAgICAge2JlZ2luOiAvXFxiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYihcXGRbX1xcZF0qKSgnP1tpSXVVZkZdKDh8MTZ8MzJ8NjQpKT8vfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5JWF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ3JlYyB3aXRoIGxldCBpbiBpbmhlcml0IGFzc2VydCBpZiBlbHNlIHRoZW4nLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBvciBhbmQgbnVsbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnaW1wb3J0IGFib3J0IGJhc2VOYW1lT2YgZGlyT2YgaXNOdWxsIGJ1aWx0aW5zIG1hcCByZW1vdmVBdHRycyB0aHJvdyAnICtcbiAgICAgICd0b1N0cmluZyBkZXJpdmF0aW9uJ1xuICB9O1xuICB2YXIgQU5USVFVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEU1xuICB9O1xuICB2YXIgQVRUUlMgPSB7XG4gICAgYmVnaW46IC9bYS16QS1aMC05LV9dKyhcXHMqPSkvLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxTKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW0FOVElRVU9URV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogXCInJ1wiLCBlbmQ6IFwiJydcIn0sXG4gICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ31cbiAgICBdXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBTVFJJTkcsXG4gICAgQVRUUlNcbiAgXTtcbiAgQU5USVFVT1RFLmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogW1wibml4b3NcIl0sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT05TVEFOVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkKEFETUlOVE9PTFN8QVBQREFUQXxDREJVUk5fQVJFQXxDTURMSU5FfENPTU1PTkZJTEVTMzJ8Q09NTU9ORklMRVM2NHxDT01NT05GSUxFU3xDT09LSUVTfERFU0tUT1B8RE9DVU1FTlRTfEVYRURJUnxFWEVGSUxFfEVYRVBBVEh8RkFWT1JJVEVTfEZPTlRTfEhJU1RPUll8SFdORFBBUkVOVHxJTlNURElSfElOVEVSTkVUX0NBQ0hFfExBTkdVQUdFfExPQ0FMQVBQREFUQXxNVVNJQ3xORVRIT09EfE9VVERJUnxQSUNUVVJFU3xQTFVHSU5TRElSfFBSSU5USE9PRHxQUk9GSUxFfFBST0dSQU1GSUxFUzMyfFBST0dSQU1GSUxFUzY0fFBST0dSQU1GSUxFU3xRVUlDS0xBVU5DSHxSRUNFTlR8UkVTT1VSQ0VTX0xPQ0FMSVpFRHxSRVNPVVJDRVN8U0VORFRPfFNNUFJPR1JBTVN8U01TVEFSVFVQfFNUQVJUTUVOVXxTWVNESVJ8VEVNUHxURU1QTEFURVN8VklERU9TfFdJTkRJUikvXG4gIH07XG5cbiAgdmFyIERFRklORVMgPSB7XG4gICAgLy8gJHtkZWZpbmVzfVxuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCt7W1xcd1xcLjotXSt9L1xuICB9O1xuXG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgLy8gJHZhcmlhYmxlc1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCtcXHcrLyxcbiAgICBpbGxlZ2FsOiAvXFwoXFwpe30vXG4gIH07XG5cbiAgdmFyIExBTkdVQUdFUyA9IHtcbiAgICAvLyAkKGxhbmd1YWdlX3N0cmluZ3MpXG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkK1xcKFtcXHdcXF5cXC46LV0rXFwpL1xuICB9O1xuXG4gIHZhciBQQVJBTUVURVJTID0ge1xuICAgIC8vIGNvbW1hbmQgcGFyYW1ldGVyc1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICcoQVJDSElWRXxGSUxFX0FUVFJJQlVURV9BUkNISVZFfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SEtDUnxIS0NVfEhLRER8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0RZTl9EQVRBfEhLRVlfTE9DQUxfTUFDSElORXxIS0VZX1BFUkZPUk1BTkNFX0RBVEF8SEtFWV9VU0VSU3xIS0xNfEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SURJR05PUkV8SUROT3xJRE9LfElEUkVUUll8SURZRVN8TUJfQUJPUlRSRVRSWUlHTk9SRXxNQl9ERUZCVVRUT04xfE1CX0RFRkJVVFRPTjJ8TUJfREVGQlVUVE9OM3xNQl9ERUZCVVRUT040fE1CX0lDT05FWENMQU1BVElPTnxNQl9JQ09OSU5GT1JNQVRJT058TUJfSUNPTlFVRVNUSU9OfE1CX0lDT05TVE9QfE1CX09LfE1CX09LQ0FOQ0VMfE1CX1JFVFJZQ0FOQ0VMfE1CX1JJR0hUfE1CX1JUTFJFQURJTkd8TUJfU0VURk9SRUdST1VORHxNQl9UT1BNT1NUfE1CX1VTRVJJQ09OfE1CX1lFU05PfE5PUk1BTHxPRkZMSU5FfFJFQURPTkxZfFNIQ1RYfFNIRUxMX0NPTlRFWFR8U1lTVEVNfFRFTVBPUkFSWSknXG4gIH07XG5cbiAgdmFyIENPTVBJTEVSID0ge1xuICAgIC8vICFjb21waWxlcl9mbGFnc1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFwhKGFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVmaW5lfGRlbGZpbGV8ZWNob3xlbHNlfGVuZGlmfGVycm9yfGV4ZWN1dGV8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnxnZXR0bGJ2ZXJzaW9ufGlmfGlmZGVmfGlmbWFjcm9kZWZ8aWZtYWNyb25kZWZ8aWZuZGVmfGluY2x1ZGV8aW5zZXJ0bWFjcm98bWFjcm98bWFjcm9lbmR8bWFrZW5zaXN8cGFja2hkcnxzZWFyY2hwYXJzZXxzZWFyY2hyZXBsYWNlfHN5c3RlbXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpL1xuICB9O1xuXG4gIHZhciBNRVRBQ0hBUlMgPSB7XG4gICAgLy8gJFxcbiwgJFxcciwgJFxcdCwgJCRcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogL1xcJChcXFxcW25ydF18XFwkKS9cbiAgfTtcblxuICB2YXIgUExVR0lOUyA9IHtcbiAgICAvLyBwbHVnOjppbnNcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW46IC9cXHcrXFw6XFw6XFx3Ky9cbiAgfTtcblxuICAgIHZhciBTVFJJTkcgPSB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCdcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgTUVUQUNIQVJTLFxuICAgICAgICBDT05TVEFOVFMsXG4gICAgICAgIERFRklORVMsXG4gICAgICAgIFZBUklBQkxFUyxcbiAgICAgICAgTEFOR1VBR0VTXG4gICAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICdBYm9ydCBBZGRCcmFuZGluZ0ltYWdlIEFkZFNpemUgQWxsb3dSb290RGlySW5zdGFsbCBBbGxvd1NraXBGaWxlcyBBdXRvQ2xvc2VXaW5kb3cgQkdGb250IEJHR3JhZGllbnQgQnJhbmRpbmdUZXh0IEJyaW5nVG9Gcm9udCBDYWxsIENhbGxJbnN0RExMIENhcHRpb24gQ2hhbmdlVUkgQ2hlY2tCaXRtYXAgQ2xlYXJFcnJvcnMgQ29tcGxldGVkVGV4dCBDb21wb25lbnRUZXh0IENvcHlGaWxlcyBDUkNDaGVjayBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRm9udCBDcmVhdGVTaG9ydEN1dCBEZWxldGUgRGVsZXRlSU5JU2VjIERlbGV0ZUlOSVN0ciBEZWxldGVSZWdLZXkgRGVsZXRlUmVnVmFsdWUgRGV0YWlsUHJpbnQgRGV0YWlsc0J1dHRvblRleHQgRGlyVGV4dCBEaXJWYXIgRGlyVmVyaWZ5IEVuYWJsZVdpbmRvdyBFbnVtUmVnS2V5IEVudW1SZWdWYWx1ZSBFeGNoIEV4ZWMgRXhlY1NoZWxsIEV4ZWNTaGVsbFdhaXQgRXhlY1dhaXQgRXhwYW5kRW52U3RyaW5ncyBGaWxlIEZpbGVCdWZTaXplIEZpbGVDbG9zZSBGaWxlRXJyb3JUZXh0IEZpbGVPcGVuIEZpbGVSZWFkIEZpbGVSZWFkQnl0ZSBGaWxlUmVhZFVURjE2TEUgRmlsZVJlYWRXb3JkIEZpbGVTZWVrIEZpbGVXcml0ZSBGaWxlV3JpdGVCeXRlIEZpbGVXcml0ZVVURjE2TEUgRmlsZVdyaXRlV29yZCBGaW5kQ2xvc2UgRmluZEZpcnN0IEZpbmROZXh0IEZpbmRXaW5kb3cgRmx1c2hJTkkgRnVuY3Rpb25FbmQgR2V0Q3VySW5zdFR5cGUgR2V0Q3VycmVudEFkZHJlc3MgR2V0RGxnSXRlbSBHZXRETExWZXJzaW9uIEdldERMTFZlcnNpb25Mb2NhbCBHZXRFcnJvckxldmVsIEdldEZpbGVUaW1lIEdldEZpbGVUaW1lTG9jYWwgR2V0RnVsbFBhdGhOYW1lIEdldEZ1bmN0aW9uQWRkcmVzcyBHZXRJbnN0RGlyRXJyb3IgR2V0TGFiZWxBZGRyZXNzIEdldFRlbXBGaWxlTmFtZSBHb3RvIEhpZGVXaW5kb3cgSWNvbiBJZkFib3J0IElmRXJyb3JzIElmRmlsZUV4aXN0cyBJZlJlYm9vdEZsYWcgSWZTaWxlbnQgSW5pdFBsdWdpbnNEaXIgSW5zdGFsbEJ1dHRvblRleHQgSW5zdGFsbENvbG9ycyBJbnN0YWxsRGlyIEluc3RhbGxEaXJSZWdLZXkgSW5zdFByb2dyZXNzRmxhZ3MgSW5zdFR5cGUgSW5zdFR5cGVHZXRUZXh0IEluc3RUeXBlU2V0VGV4dCBJbnQ2NENtcCBJbnQ2NENtcFUgSW50NjRGbXQgSW50Q21wIEludENtcFUgSW50Rm10IEludE9wIEludFB0ckNtcCBJbnRQdHJDbXBVIEludFB0ck9wIElzV2luZG93IExhbmdTdHJpbmcgTGljZW5zZUJrQ29sb3IgTGljZW5zZURhdGEgTGljZW5zZUZvcmNlU2VsZWN0aW9uIExpY2Vuc2VMYW5nU3RyaW5nIExpY2Vuc2VUZXh0IExvYWRMYW5ndWFnZUZpbGUgTG9ja1dpbmRvdyBMb2dTZXQgTG9nVGV4dCBNYW5pZmVzdERQSUF3YXJlIE1hbmlmZXN0U3VwcG9ydGVkT1MgTWVzc2FnZUJveCBNaXNjQnV0dG9uVGV4dCBOYW1lIE5vcCBPdXRGaWxlIFBhZ2UgUGFnZUNhbGxiYWNrcyBQYWdlRXhFbmQgUG9wIFB1c2ggUXVpdCBSZWFkRW52U3RyIFJlYWRJTklTdHIgUmVhZFJlZ0RXT1JEIFJlYWRSZWdTdHIgUmVib290IFJlZ0RMTCBSZW5hbWUgUmVxdWVzdEV4ZWN1dGlvbkxldmVsIFJlc2VydmVGaWxlIFJldHVybiBSTURpciBTZWFyY2hQYXRoIFNlY3Rpb25FbmQgU2VjdGlvbkdldEZsYWdzIFNlY3Rpb25HZXRJbnN0VHlwZXMgU2VjdGlvbkdldFNpemUgU2VjdGlvbkdldFRleHQgU2VjdGlvbkdyb3VwRW5kIFNlY3Rpb25JbiBTZWN0aW9uU2V0RmxhZ3MgU2VjdGlvblNldEluc3RUeXBlcyBTZWN0aW9uU2V0U2l6ZSBTZWN0aW9uU2V0VGV4dCBTZW5kTWVzc2FnZSBTZXRBdXRvQ2xvc2UgU2V0QnJhbmRpbmdJbWFnZSBTZXRDb21wcmVzcyBTZXRDb21wcmVzc29yIFNldENvbXByZXNzb3JEaWN0U2l6ZSBTZXRDdGxDb2xvcnMgU2V0Q3VySW5zdFR5cGUgU2V0RGF0YWJsb2NrT3B0aW1pemUgU2V0RGF0ZVNhdmUgU2V0RGV0YWlsc1ByaW50IFNldERldGFpbHNWaWV3IFNldEVycm9yTGV2ZWwgU2V0RXJyb3JzIFNldEZpbGVBdHRyaWJ1dGVzIFNldEZvbnQgU2V0T3V0UGF0aCBTZXRPdmVyd3JpdGUgU2V0UmVib290RmxhZyBTZXRSZWdWaWV3IFNldFNoZWxsVmFyQ29udGV4dCBTZXRTaWxlbnQgU2hvd0luc3REZXRhaWxzIFNob3dVbmluc3REZXRhaWxzIFNob3dXaW5kb3cgU2lsZW50SW5zdGFsbCBTaWxlbnRVbkluc3RhbGwgU2xlZXAgU3BhY2VUZXh0cyBTdHJDbXAgU3RyQ21wUyBTdHJDcHkgU3RyTGVuIFN1YkNhcHRpb24gVW5pY29kZSBVbmluc3RhbGxCdXR0b25UZXh0IFVuaW5zdGFsbENhcHRpb24gVW5pbnN0YWxsSWNvbiBVbmluc3RhbGxTdWJDYXB0aW9uIFVuaW5zdGFsbFRleHQgVW5pbnN0UGFnZSBVblJlZ0RMTCBWYXIgVklBZGRWZXJzaW9uS2V5IFZJRmlsZVZlcnNpb24gVklQcm9kdWN0VmVyc2lvbiBXaW5kb3dJY29uIFdyaXRlSU5JU3RyIFdyaXRlUmVnQmluIFdyaXRlUmVnRFdPUkQgV3JpdGVSZWdFeHBhbmRTdHIgV3JpdGVSZWdNdWx0aVN0ciBXcml0ZVJlZ05vbmUgV3JpdGVSZWdTdHIgV3JpdGVVbmluc3RhbGxlciBYUFN0eWxlJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAnYWRtaW4gYWxsIGF1dG8gYm90aCBib3R0b20gYnppcDIgY29sb3JlZCBjb21wb25lbnRzIGN1cnJlbnQgY3VzdG9tIGRpcmVjdG9yeSBmYWxzZSBmb3JjZSBoaWRlIGhpZ2hlc3QgaWZkaWZmIGlmbmV3ZXIgaW5zdGZpbGVzIGxhc3R1c2VkIGxlYXZlIGxlZnQgbGljZW5zZSBsaXN0b25seSBsem1hIG5ldmVyc2hvdyBub25lIG5vcm1hbCBub3RzZXQgb2ZmIG9uIG9wZW4gcHJpbnQgcmlnaHQgc2hvdyBzaWxlbnQgc2lsZW50bG9nIHNtb290aCB0ZXh0b25seSB0b3AgdHJ1ZSB0cnkgdW4uY29tcG9uZW50cyB1bi5jdXN0b20gdW4uZGlyZWN0b3J5IHVuLmluc3RmaWxlcyB1bi5saWNlbnNlIHVuaW5zdENvbmZpcm0gdXNlciBXaW4xMCBXaW43IFdpbjggV2luVmlzdGEgemxpYidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJzsnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnRnVuY3Rpb24gUGFnZUV4IFNlY3Rpb24gU2VjdGlvbkdyb3VwJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01QSUxFUixcbiAgICAgIERFRklORVMsXG4gICAgICBWQVJJQUJMRVMsXG4gICAgICBMQU5HVUFHRVMsXG4gICAgICBQQVJBTUVURVJTLFxuICAgICAgUExVR0lOUyxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQVBJX0NMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogJ1xcXFxiKEFWfENBfENGfENHfENJfENMfENNfENOfENUfE1LfE1QfE1US3xNVEx8TlN8U0NOfFNLfFVJfFdLfFhDKVxcXFx3KycsXG4gIH07XG4gIHZhciBPQkpDX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaW50IGZsb2F0IHdoaWxlIGNoYXIgZXhwb3J0IHNpemVvZiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBmb3IgdW5pb24gJyArXG4gICAgICAndW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzdGF0aWMgYm9vbCBtdXRhYmxlIGlmIGRvIHJldHVybiBnb3RvIHZvaWQgJyArXG4gICAgICAnZW51bSBlbHNlIGJyZWFrIGV4dGVybiBhc20gY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSByZWdpc3RlciBleHBsaWNpdCAnICtcbiAgICAgICdzaWduZWQgdHlwZW5hbWUgdGhpcyBzd2l0Y2ggY29udGludWUgd2NoYXJfdCBpbmxpbmUgcmVhZG9ubHkgYXNzaWduICcgK1xuICAgICAgJ3JlYWR3cml0ZSBzZWxmIEBzeW5jaHJvbml6ZWQgaWQgdHlwZW9mICcgK1xuICAgICAgJ25vbmF0b21pYyBzdXBlciB1bmljaGFyIElCT3V0bGV0IElCQWN0aW9uIHN0cm9uZyB3ZWFrIGNvcHkgJyArXG4gICAgICAnaW4gb3V0IGlub3V0IGJ5Y29weSBieXJlZiBvbmV3YXkgX19zdHJvbmcgX193ZWFrIF9fYmxvY2sgX19hdXRvcmVsZWFzaW5nICcgK1xuICAgICAgJ0Bwcml2YXRlIEBwcm90ZWN0ZWQgQHB1YmxpYyBAdHJ5IEBwcm9wZXJ0eSBAZW5kIEB0aHJvdyBAY2F0Y2ggQGZpbmFsbHkgJyArXG4gICAgICAnQGF1dG9yZWxlYXNlcG9vbCBAc3ludGhlc2l6ZSBAZHluYW1pYyBAc2VsZWN0b3IgQG9wdGlvbmFsIEByZXF1aXJlZCAnICtcbiAgICAgICdAZW5jb2RlIEBwYWNrYWdlIEBpbXBvcnQgQGRlZnMgQGNvbXBhdGliaWxpdHlfYWxpYXMgJyArXG4gICAgICAnX19icmlkZ2UgX19icmlkZ2VfdHJhbnNmZXIgX19icmlkZ2VfcmV0YWluZWQgX19icmlkZ2VfcmV0YWluICcgK1xuICAgICAgJ19fY292YXJpYW50IF9fY29udHJhdmFyaWFudCBfX2tpbmRvZiAnICtcbiAgICAgICdfTm9ubnVsbCBfTnVsbGFibGUgX051bGxfdW5zcGVjaWZpZWQgJyArXG4gICAgICAnX19GVU5DVElPTl9fIF9fUFJFVFRZX0ZVTkNUSU9OX18gX19hdHRyaWJ1dGVfXyAnICtcbiAgICAgICdnZXR0ZXIgc2V0dGVyIHJldGFpbiB1bnNhZmVfdW5yZXRhaW5lZCAnICtcbiAgICAgICdub25udWxsIG51bGxhYmxlIG51bGxfdW5zcGVjaWZpZWQgbnVsbF9yZXNldHRhYmxlIGNsYXNzIGluc3RhbmNldHlwZSAnICtcbiAgICAgICdOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSIE5TX1VOQVZBSUxBQkxFIE5TX1JFUVVJUkVTX1NVUEVSICcgK1xuICAgICAgJ05TX1JFVFVSTlNfSU5ORVJfUE9JTlRFUiBOU19JTkxJTkUgTlNfQVZBSUxBQkxFIE5TX0RFUFJFQ0FURUQgJyArXG4gICAgICAnTlNfRU5VTSBOU19PUFRJT05TIE5TX1NXSUZUX1VOQVZBSUxBQkxFICcgK1xuICAgICAgJ05TX0FTU1VNRV9OT05OVUxMX0JFR0lOIE5TX0FTU1VNRV9OT05OVUxMX0VORCAnICtcbiAgICAgICdOU19SRUZJTkVEX0ZPUl9TV0lGVCBOU19TV0lGVF9OQU1FIE5TX1NXSUZUX05PVEhST1cgJyArXG4gICAgICAnTlNfRFVSSU5HIE5TX0hBTkRMRVIgTlNfRU5ESEFORExFUiBOU19WQUxVRVJFVFVSTiBOU19WT0lEUkVUVVJOJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIHRydWUgRkFMU0UgVFJVRSBuaWwgWUVTIE5PIE5VTEwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0JPT0wgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlJ1xuICB9O1xuICB2YXIgTEVYRU1FUyA9IC9bYS16QS1aQF1bYS16QS1aMC05X10qLztcbiAgdmFyIENMQVNTX0tFWVdPUkRTID0gJ0BpbnRlcmZhY2UgQGNsYXNzIEBwcm90b2NvbCBAaW1wbGVtZW50YXRpb24nO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbW0nLCAnb2JqYycsICdvYmotYyddLFxuICAgIGtleXdvcmRzOiBPQkpDX0tFWVdPUkRTLFxuICAgIGxleGVtZXM6IExFWEVNRVMsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgQVBJX0NMQVNTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdAXCInLCBlbmQ6ICdcIicsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sIGVuZDogLyQvLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICcgK1xuICAgICAgICAgICAgJ3ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC88Lio/Pi8sIGVuZDogLyQvLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICcoJyArIENMQVNTX0tFWVdPUkRTLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYicsIGVuZDogJyh7fCQpJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IENMQVNTX0tFWVdPUkRTLCBsZXhlbWVzOiBMRVhFTUVTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nK2hsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLyogbWlzc2luZyBzdXBwb3J0IGZvciBoZXJlZG9jLWxpa2Ugc3RyaW5nIChPQ2FtbCA0LjAuMispICovXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtbCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYW5kIGFzIGFzc2VydCBhc3IgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBleHRlcm5hbCBmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luaGVyaXQhIGluaGVyaXQgaW5pdGlhbGl6ZXIgbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCF8MTAgbWV0aG9kICcgK1xuICAgICAgICAnbW9kIG1vZHVsZSBtdXRhYmxlIG5ldyBvYmplY3Qgb2Ygb3BlbiEgb3BlbiBvciBwcml2YXRlIHJlYyBzaWcgc3RydWN0ICcgK1xuICAgICAgICAndGhlbiB0byB0cnkgdHlwZSB2YWwhIHZhbCB2aXJ0dWFsIHdoZW4gd2hpbGUgd2l0aCAnICtcbiAgICAgICAgLyogY2FtbHA0ICovXG4gICAgICAgICdwYXJzZXIgdmFsdWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8qIGJ1aWx0LWluIHR5cGVzICovXG4gICAgICAgICdhcnJheSBib29sIGJ5dGVzIGNoYXIgZXhufDUgZmxvYXQgaW50IGludDMyIGludDY0IGxpc3QgbGF6eV90fDUgbmF0aXZlaW50fDUgc3RyaW5nIHVuaXQgJyArXG4gICAgICAgIC8qIChzb21lKSB0eXBlcyBpbiBQZXJ2YXNpdmVzICovXG4gICAgICAgICdpbl9jaGFubmVsIG91dF9jaGFubmVsIHJlZicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGxleGVtZXM6ICdbYS16X11cXFxcdyohPycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsoXFxcXHxcXFxcfCk/XFxcXF18XFxcXChcXFxcKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgICAgICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1stPV0+LyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblx0dmFyIFNQRUNJQUxfVkFSUyA9IHtcblx0XHRjbGFzc05hbWU6ICdrZXl3b3JkJyxcblx0XHRiZWdpbjogJ1xcXFwkKGZbYXNuXXx0fHZwW3J0ZF18Y2hpbGRyZW4pJ1xuXHR9LFxuXHRMSVRFUkFMUyA9IHtcblx0XHRjbGFzc05hbWU6ICdsaXRlcmFsJyxcblx0XHRiZWdpbjogJ2ZhbHNlfHRydWV8UEl8dW5kZWYnXG5cdH0sXG5cdE5VTUJFUlMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbnVtYmVyJyxcblx0XHRiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oZS0/XFxcXGQrKT8nLCAvL2FkZHMgMWU1LCAxZS0xMFxuXHRcdHJlbGV2YW5jZTogMFxuXHR9LFxuXHRTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDogbnVsbH0pLFxuXHRQUkVQUk8gPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbWV0YScsXG5cdFx0a2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2luY2x1ZGUgdXNlJ30sXG5cdFx0YmVnaW46ICdpbmNsdWRlfHVzZSA8Jyxcblx0XHRlbmQ6ICc+J1xuXHR9LFxuXHRQQVJBTVMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAncGFyYW1zJyxcblx0XHRiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuXHRcdGNvbnRhaW5zOiBbJ3NlbGYnLCBOVU1CRVJTLCBTVFJJTkcsIFNQRUNJQUxfVkFSUywgTElURVJBTFNdXG5cdH0sXG5cdE1PRElGSUVSUyA9IHtcblx0XHRiZWdpbjogJ1sqISMlXScsXG5cdFx0cmVsZXZhbmNlOiAwXG5cdH0sXG5cdEZVTkNUSU9OUyA9IHtcblx0XHRjbGFzc05hbWU6ICdmdW5jdGlvbicsXG5cdFx0YmVnaW5LZXl3b3JkczogJ21vZHVsZSBmdW5jdGlvbicsXG5cdFx0ZW5kOiAnXFxcXD18XFxcXHsnLFxuXHRcdGNvbnRhaW5zOiBbUEFSQU1TLCBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGFsaWFzZXM6IFsnc2NhZCddLFxuXHRcdGtleXdvcmRzOiB7XG5cdFx0XHRrZXl3b3JkOiAnZnVuY3Rpb24gbW9kdWxlIGluY2x1ZGUgdXNlIGZvciBpbnRlcnNlY3Rpb25fZm9yIGlmIGVsc2UgXFxcXCUnLFxuXHRcdFx0bGl0ZXJhbDogJ2ZhbHNlIHRydWUgUEkgdW5kZWYnLFxuXHRcdFx0YnVpbHRfaW46ICdjaXJjbGUgc3F1YXJlIHBvbHlnb24gdGV4dCBzcGhlcmUgY3ViZSBjeWxpbmRlciBwb2x5aGVkcm9uIHRyYW5zbGF0ZSByb3RhdGUgc2NhbGUgcmVzaXplIG1pcnJvciBtdWx0bWF0cml4IGNvbG9yIG9mZnNldCBodWxsIG1pbmtvd3NraSB1bmlvbiBkaWZmZXJlbmNlIGludGVyc2VjdGlvbiBhYnMgc2lnbiBzaW4gY29zIHRhbiBhY29zIGFzaW4gYXRhbiBhdGFuMiBmbG9vciByb3VuZCBjZWlsIGxuIGxvZyBwb3cgc3FydCBleHAgcmFuZHMgbWluIG1heCBjb25jYXQgbG9va3VwIHN0ciBjaHIgc2VhcmNoIHZlcnNpb24gdmVyc2lvbl9udW0gbm9ybSBjcm9zcyBwYXJlbnRfbW9kdWxlIGVjaG8gaW1wb3J0IGltcG9ydF9keGYgZHhmX2xpbmVhcl9leHRydWRlIGxpbmVhcl9leHRydWRlIHJvdGF0ZV9leHRydWRlIHN1cmZhY2UgcHJvamVjdGlvbiByZW5kZXIgY2hpbGRyZW4gZHhmX2Nyb3NzIGR4Zl9kaW0gbGV0IGFzc2lnbidcblx0XHR9LFxuXHRcdGNvbnRhaW5zOiBbXG5cdFx0XHRobGpzLkNfTElORV9DT01NRU5UX01PREUsXG5cdFx0XHRobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuXHRcdFx0TlVNQkVSUyxcblx0XHRcdFBSRVBSTyxcblx0XHRcdFNUUklORyxcblx0XHRcdFNQRUNJQUxfVkFSUyxcblx0XHRcdE1PRElGSUVSUyxcblx0XHRcdEZVTkNUSU9OU1xuXHRcdF1cblx0fVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE9YWUdFTkVfS0VZV09SRFMgPSAnYWJzdHJhY3QgYWRkIGFuZCBhcnJheSBhcyBhc2MgYXNwZWN0IGFzc2VtYmx5IGFzeW5jIGJlZ2luIGJyZWFrIGJsb2NrIGJ5IGNhc2UgY2xhc3MgY29uY2F0IGNvbnN0IGNvcHkgY29uc3RydWN0b3IgY29udGludWUgJytcbiAgICAnY3JlYXRlIGRlZmF1bHQgZGVsZWdhdGUgZGVzYyBkaXN0aW5jdCBkaXYgZG8gZG93bnRvIGR5bmFtaWMgZWFjaCBlbHNlIGVtcHR5IGVuZCBlbnN1cmUgZW51bSBlcXVhbHMgZXZlbnQgZXhjZXB0IGV4aXQgZXh0ZW5zaW9uIGV4dGVybmFsIGZhbHNlICcrXG4gICAgJ2ZpbmFsIGZpbmFsaXplIGZpbmFsaXplciBmaW5hbGx5IGZsYWdzIGZvciBmb3J3YXJkIGZyb20gZnVuY3Rpb24gZnV0dXJlIGdsb2JhbCBncm91cCBoYXMgaWYgaW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBpbXBsaWVzIGluIGluZGV4IGluaGVyaXRlZCAnK1xuICAgICdpbmxpbmUgaW50ZXJmYWNlIGludG8gaW52YXJpYW50cyBpcyBpdGVyYXRvciBqb2luIGxvY2tlZCBsb2NraW5nIGxvb3AgbWF0Y2hpbmcgbWV0aG9kIG1vZCBtb2R1bGUgbmFtZXNwYWNlIG5lc3RlZCBuZXcgbmlsIG5vdCBub3RpZnkgbnVsbGFibGUgb2YgJytcbiAgICAnb2xkIG9uIG9wZXJhdG9yIG9yIG9yZGVyIG91dCBvdmVycmlkZSBwYXJhbGxlbCBwYXJhbXMgcGFydGlhbCBwaW5uZWQgcHJpdmF0ZSBwcm9jZWR1cmUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyBxdWVyeWFibGUgcmFpc2UgcmVhZCByZWFkb25seSAnK1xuICAgICdyZWNvcmQgcmVpbnRyb2R1Y2UgcmVtb3ZlIHJlcGVhdCByZXF1aXJlIHJlc3VsdCByZXZlcnNlIHNlYWxlZCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXQgc2hsIHNociBza2lwIHN0YXRpYyBzdGVwIHNvZnQgdGFrZSB0aGVuIHRvIHRydWUgdHJ5IHR1cGxlICcrXG4gICAgJ3R5cGUgdW5pb24gdW5pdCB1bnNhZmUgdW50aWwgdXNlcyB1c2luZyB2YXIgdmlydHVhbCByYWlzZXMgdm9sYXRpbGUgd2hlcmUgd2hpbGUgd2l0aCB3cml0ZSB4b3IgeWllbGQgYXdhaXQgbWFwcGVkIGRlcHJlY2F0ZWQgc3RkY2FsbCBjZGVjbCBwYXNjYWwgJytcbiAgICAncmVnaXN0ZXIgc2FmZWNhbGwgb3ZlcmxvYWQgbGlicmFyeSBwbGF0Zm9ybSByZWZlcmVuY2UgcGFja2VkIHN0cmljdCBwdWJsaXNoZWQgYXV0b3JlbGVhc2Vwb29sIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHVucmV0YWluZWQnO1xuICB2YXIgQ1VSTFlfQ09NTUVOVCA9ICBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBQQVJFTl9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICdcXFxcKFxcXFwqJyxcbiAgICAnXFxcXCpcXFxcKScsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH1cbiAgKTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJyd9XVxuICB9O1xuICB2YXIgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46ICcoI1xcXFxkKykrJ1xuICB9O1xuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZSBtZXRob2QnLCBlbmQ6ICdbOjtdJyxcbiAgICBrZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yfDEwIGRlc3RydWN0b3J8MTAgcHJvY2VkdXJlfDEwIG1ldGhvZHwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAga2V5d29yZHM6IE9YWUdFTkVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklOR11cbiAgICAgIH0sXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5UXG4gICAgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1xcLj9cXHcrLyxcbiAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnKFwifFxcXFwkW0ctWmctel18XFxcXC9cXFxcKnw8L3w9PnwtPiknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5ULCBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnPVxcXFxiY2xhc3NcXFxcYicsIGVuZDogJ2VuZDsnLFxuICAgICAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgICAgIENVUkxZX0NPTU1FTlQsIFBBUkVOX0NPTU1FTlQsIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBGVU5DVElPTlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENVUkxZX1NVQkNPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ11cbiAgICB9XG4gICk7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLCByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXFxcXF5yZW17JyxcbiAgICAgICAgJ30nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgQ1VSTFlfU1VCQ09NTUVOVFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXkAoPzpCQVNFfFVTRXxDTEFTU3xPUFRJT05TKSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnQFtcXFxcd1xcXFwtXStcXFxcW1tcXFxcd147XFxcXC1dKlxcXFxdKD86XFxcXFtbXFxcXHdeO1xcXFwtXSpcXFxcXSk/KD86LiopJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7P1tcXFxcd1xcXFwtXFxcXC5cXFxcOl0rXFxcXH0/J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXF5bXFxcXHdcXFxcLVxcXFwuXFxcXDpdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXF4jWzAtOWEtZkEtRl0rJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBNQUNSTyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi9cbiAgfTtcbiAgdmFyIFRBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogLzwoPyFcXC8pLywgZW5kOiAvPi9cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGYuY29uZiddLFxuICAgIGxleGVtZXM6IC9bYS16MC05Xzw+LV0rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46IC8qIGJsb2NrIG1hdGNoIHBhc3MgYXJlIFwiYWN0aW9uc1wiIGluIHBmLmNvbmYoNSksIHRoZSByZXN0IGFyZVxuICAgICAgICAgICAgICAgICAqIGxleGljYWxseSBzaW1pbGFyIHRvcC1sZXZlbCBjb21tYW5kcy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgJ2Jsb2NrIG1hdGNoIHBhc3MgbG9hZCBhbmNob3J8NSBhbnRpc3Bvb2Z8MTAgc2V0IHRhYmxlJyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpbiBvdXQgbG9nIHF1aWNrIG9uIHJkb21haW4gaW5ldCBpbmV0NiBwcm90byBmcm9tIHBvcnQgb3MgdG8gcm91dGUnICtcbiAgICAgICAgJ2FsbG93LW9wdHMgZGl2ZXJ0LXBhY2tldCBkaXZlcnQtcmVwbHkgZGl2ZXJ0LXRvIGZsYWdzIGdyb3VwIGljbXAtdHlwZScgK1xuICAgICAgICAnaWNtcDYtdHlwZSBsYWJlbCBvbmNlIHByb2JhYmlsaXR5IHJlY2lldmVkLW9uIHJ0YWJsZSBwcmlvIHF1ZXVlJyArXG4gICAgICAgICd0b3MgdGFnIHRhZ2dlZCB1c2VyIGtlZXAgZnJhZ21lbnQgZm9yIG9zIGRyb3AnICtcbiAgICAgICAgJ2FmLXRvfDEwIGJpbmF0LXRvfDEwIG5hdC10b3wxMCByZHItdG98MTAgYml0bWFzayBsZWFzdC1zdGF0cyByYW5kb20gcm91bmQtcm9iaW4nICtcbiAgICAgICAgJ3NvdXJjZS1oYXNoIHN0YXRpYy1wb3J0JyArXG4gICAgICAgICdkdXAtdG8gcmVwbHktdG8gcm91dGUtdG8nICtcbiAgICAgICAgJ3BhcmVudCBiYW5kd2lkdGggZGVmYXVsdCBtaW4gbWF4IHFsaW1pdCcgK1xuICAgICAgICAnYmxvY2stcG9saWN5IGRlYnVnIGZpbmdlcnByaW50cyBob3N0aWQgbGltaXQgbG9naW50ZXJmYWNlIG9wdGltaXphdGlvbicgK1xuICAgICAgICAncmVhc3NlbWJsZSBydWxlc2V0LW9wdGltaXphdGlvbiBiYXNpYyBub25lIHByb2ZpbGUgc2tpcCBzdGF0ZS1kZWZhdWx0cycgK1xuICAgICAgICAnc3RhdGUtcG9saWN5IHRpbWVvdXQnICtcbiAgICAgICAgJ2NvbnN0IGNvdW50ZXJzIHBlcnNpc3QnICtcbiAgICAgICAgJ25vIG1vZHVsYXRlIHN5bnByb3h5IHN0YXRlfDUgZmxvYXRpbmcgaWYtYm91bmQgbm8tc3luYyBwZmxvd3wxMCBzbG9wcHknICtcbiAgICAgICAgJ3NvdXJjZS10cmFjayBnbG9iYWwgcnVsZSBtYXgtc3JjLW5vZGVzIG1heC1zcmMtc3RhdGVzIG1heC1zcmMtY29ubicgK1xuICAgICAgICAnbWF4LXNyYy1jb25uLXJhdGUgb3ZlcmxvYWQgZmx1c2gnICtcbiAgICAgICAgJ3NjcnVifDUgbWF4LW1zcyBtaW4tdHRsIG5vLWRmfDEwIHJhbmRvbS1pZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnYWxsIGFueSBuby1yb3V0ZSBzZWxmIHVycGYtZmFpbGVkIGVncmVzc3w1IHVua25vd24nXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTUFDUk8sXG4gICAgICBUQUJMRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcbiAgdmFyIFVOUVVPVEVEX0lERU5UID0gJ1thLXpBLVpfXVthLXpBLVpfMC05JF0qJztcbiAgdmFyIERPTExBUl9TVFJJTkcgPSAnXFxcXCQoW2EtekEtWl9dP3xbYS16QS1aX11bYS16QS1aXzAtOV0qKVxcXFwkJztcbiAgdmFyIExBQkVMID0gJzw8XFxcXHMqJyArIFVOUVVPVEVEX0lERU5UICsgJ1xcXFxzKj4+JztcblxuICB2YXIgU1FMX0tXID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL3NxbC1jb21tYW5kcy5odG1sXG4gICAgLy8gU1FMIGNvbW1hbmRzIChzdGFydGluZyB3b3JkcylcbiAgICAnQUJPUlQgQUxURVIgQU5BTFlaRSBCRUdJTiBDQUxMIENIRUNLUE9JTlR8MTAgQ0xPU0UgQ0xVU1RFUiBDT01NRU5UIENPTU1JVCBDT1BZIENSRUFURSBERUFMTE9DQVRFIERFQ0xBUkUgJyArXG4gICAgJ0RFTEVURSBESVNDQVJEIERPIERST1AgRU5EIEVYRUNVVEUgRVhQTEFJTiBGRVRDSCBHUkFOVCBJTVBPUlQgSU5TRVJUIExJU1RFTiBMT0FEIExPQ0sgTU9WRSBOT1RJRlkgJyArXG4gICAgJ1BSRVBBUkUgUkVBU1NJR058MTAgUkVGUkVTSCBSRUlOREVYIFJFTEVBU0UgUkVTRVQgUkVWT0tFIFJPTExCQUNLIFNBVkVQT0lOVCBTRUNVUklUWSBTRUxFQ1QgU0VUIFNIT1cgJyArXG4gICAgJ1NUQVJUIFRSVU5DQVRFIFVOTElTVEVOfDEwIFVQREFURSBWQUNVVU18MTAgVkFMVUVTICcgK1xuICAgIC8vIFNRTCBjb21tYW5kcyAob3RoZXJzKVxuICAgICdBR0dSRUdBVEUgQ09MTEFUSU9OIENPTlZFUlNJT058MTAgREFUQUJBU0UgREVGQVVMVCBQUklWSUxFR0VTIERPTUFJTiBUUklHR0VSIEVYVEVOU0lPTiBGT1JFSUdOICcgK1xuICAgICdXUkFQUEVSfDEwIFRBQkxFIEZVTkNUSU9OIEdST1VQIExBTkdVQUdFIExBUkdFIE9CSkVDVCBNQVRFUklBTElaRUQgVklFVyBPUEVSQVRPUiBDTEFTUyAnICtcbiAgICAnRkFNSUxZIFBPTElDWSBQVUJMSUNBVElPTnwxMCBST0xFIFJVTEUgU0NIRU1BIFNFUVVFTkNFIFNFUlZFUiBTVEFUSVNUSUNTIFNVQlNDUklQVElPTiBTWVNURU0gJyArXG4gICAgJ1RBQkxFU1BBQ0UgQ09ORklHVVJBVElPTiBESUNUSU9OQVJZIFBBUlNFUiBURU1QTEFURSBUWVBFIFVTRVIgTUFQUElORyBQUkVQQVJFRCBBQ0NFU1MgJyArXG4gICAgJ01FVEhPRCBDQVNUIEFTIFRSQU5TRk9STSBUUkFOU0FDVElPTiBPV05FRCBUTyBJTlRPIFNFU1NJT04gQVVUSE9SSVpBVElPTiAnICtcbiAgICAnSU5ERVggUFJPQ0VEVVJFIEFTU0VSVElPTiAnICtcbiAgICAvLyBhZGRpdGlvbmFsIHJlc2VydmVkIGtleSB3b3Jkc1xuICAgICdBTEwgQU5BTFlTRSBBTkQgQU5ZIEFSUkFZIEFTQyBBU1lNTUVUUklDfDEwIEJPVEggQ0FTRSBDSEVDSyAnICtcbiAgICAnQ09MTEFURSBDT0xVTU4gQ09OQ1VSUkVOVExZfDEwIENPTlNUUkFJTlQgQ1JPU1MgJyArXG4gICAgJ0RFRkVSUkFCTEUgUkFOR0UgJyArXG4gICAgJ0RFU0MgRElTVElOQ1QgRUxTRSBFWENFUFQgRk9SIEZSRUVaRXwxMCBGUk9NIEZVTEwgSEFWSU5HICcgK1xuICAgICdJTElLRSBJTiBJTklUSUFMTFkgSU5ORVIgSU5URVJTRUNUIElTIElTTlVMTCBKT0lOIExBVEVSQUwgTEVBRElORyBMSUtFIExJTUlUICcgK1xuICAgICdOQVRVUkFMIE5PVCBOT1ROVUxMIE5VTEwgT0ZGU0VUIE9OIE9OTFkgT1IgT1JERVIgT1VURVIgT1ZFUkxBUFMgUExBQ0lORyBQUklNQVJZICcgK1xuICAgICdSRUZFUkVOQ0VTIFJFVFVSTklORyBTSU1JTEFSIFNPTUUgU1lNTUVUUklDIFRBQkxFU0FNUExFIFRIRU4gJyArXG4gICAgJ1RSQUlMSU5HIFVOSU9OIFVOSVFVRSBVU0lORyBWQVJJQURJQ3wxMCBWRVJCT1NFIFdIRU4gV0hFUkUgV0lORE9XIFdJVEggJyArXG4gICAgLy8gc29tZSBvZiBub24tcmVzZXJ2ZWQgKHdoaWNoIGFyZSB1c2VkIGluIGNsYXVzZXMgb3IgYXMgUEwvcGdTUUwga2V5d29yZClcbiAgICAnQlkgUkVUVVJOUyBJTk9VVCBPVVQgU0VUT0Z8MTAgSUYgU1RSSUNUIENVUlJFTlQgQ09OVElOVUUgT1dORVIgTE9DQVRJT04gT1ZFUiBQQVJUSVRJT04gV0lUSElOICcgK1xuICAgICdCRVRXRUVOIEVTQ0FQRSBFWFRFUk5BTCBJTlZPS0VSIERFRklORVIgV09SSyBSRU5BTUUgVkVSU0lPTiBDT05ORUNUSU9OIENPTk5FQ1QgJyArXG4gICAgJ1RBQkxFUyBURU1QIFRFTVBPUkFSWSBGVU5DVElPTlMgU0VRVUVOQ0VTIFRZUEVTIFNDSEVNQVMgT1BUSU9OIENBU0NBREUgUkVTVFJJQ1QgQUREIEFETUlOICcgK1xuICAgICdFWElTVFMgVkFMSUQgVkFMSURBVEUgRU5BQkxFIERJU0FCTEUgUkVQTElDQXwxMCBBTFdBWVMgUEFTU0lORyBDT0xVTU5TIFBBVEggJyArXG4gICAgJ1JFRiBWQUxVRSBPVkVSUklESU5HIElNTVVUQUJMRSBTVEFCTEUgVk9MQVRJTEUgQkVGT1JFIEFGVEVSIEVBQ0ggUk9XIFBST0NFRFVSQUwgJyArXG4gICAgJ1JPVVRJTkUgTk8gSEFORExFUiBWQUxJREFUT1IgT1BUSU9OUyBTVE9SQUdFIE9JRFN8MTAgV0lUSE9VVCBJTkhFUklUIERFUEVORFMgQ0FMTEVEICcgK1xuICAgICdJTlBVVCBMRUFLUFJPT0Z8MTAgQ09TVCBST1dTIE5PV0FJVCBTRUFSQ0ggVU5USUwgRU5DUllQVEVEfDEwIFBBU1NXT1JEIENPTkZMSUNUfDEwICcgK1xuICAgICdJTlNURUFEIElOSEVSSVRTIENIQVJBQ1RFUklTVElDUyBXUklURSBDVVJTT1IgQUxTTyBTVEFURU1FTlQgU0hBUkUgRVhDTFVTSVZFIElOTElORSAnICtcbiAgICAnSVNPTEFUSU9OIFJFUEVBVEFCTEUgUkVBRCBDT01NSVRURUQgU0VSSUFMSVpBQkxFIFVOQ09NTUlUVEVEIExPQ0FMIEdMT0JBTCBTUUwgUFJPQ0VEVVJFUyAnICtcbiAgICAnUkVDVVJTSVZFIFNOQVBTSE9UIFJPTExVUCBDVUJFIFRSVVNURUR8MTAgSU5DTFVERSBGT0xMT1dJTkcgUFJFQ0VESU5HIFVOQk9VTkRFRCBSQU5HRSBHUk9VUFMgJyArXG4gICAgJ1VORU5DUllQVEVEfDEwIFNZU0lEIEZPUk1BVCBERUxJTUlURVIgSEVBREVSIFFVT1RFIEVOQ09ESU5HIEZJTFRFUiBPRkYgJyArXG4gICAgLy8gc29tZSBwYXJhbWV0ZXJzIG9mIFZBQ1VVTS9BTkFMWVpFL0VYUExBSU5cbiAgICAnRk9SQ0VfUVVPVEUgRk9SQ0VfTk9UX05VTEwgRk9SQ0VfTlVMTCBDT1NUUyBCVUZGRVJTIFRJTUlORyBTVU1NQVJZIERJU0FCTEVfUEFHRV9TS0lQUElORyAnICtcbiAgICAvL1xuICAgICdSRVNUQVJUIENZQ0xFIEdFTkVSQVRFRCBJREVOVElUWSBERUZFUlJFRCBJTU1FRElBVEUgTEVWRUwgTE9HR0VEIFVOTE9HR0VEICcgK1xuICAgICdPRiBOT1RISU5HIE5PTkUgRVhDTFVERSBBVFRSSUJVVEUgJyArXG4gICAgLy8gZnJvbSBHUkFOVCAobm90IGtleXdvcmRzIGFjdHVhbGx5KVxuICAgICdVU0FHRSBST1VUSU5FUyAnICtcbiAgICAvLyBhY3R1YWxseSBsaXRlcmFscywgYnV0IGxvb2sgYmV0dGVyIHRoaXMgd2F5IChkdWUgdG8gSVMgVFJVRSwgSVMgRkFMU0UsIElTTlVMTCBldGMpXG4gICAgJ1RSVUUgRkFMU0UgTkFOIElORklOSVRZICc7XG5cbiAgdmFyIFJPTEVfQVRUUlMgPSAvLyBvbmx5IHRob3NlIG5vdCBpbiBrZXl3cm9kcyBhbHJlYWR5XG4gICAgJ1NVUEVSVVNFUiBOT1NVUEVSVVNFUiBDUkVBVEVEQiBOT0NSRUFURURCIENSRUFURVJPTEUgTk9DUkVBVEVST0xFIElOSEVSSVQgTk9JTkhFUklUICcgK1xuICAgICdMT0dJTiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PUkVQTElDQVRJT04gQllQQVNTUkxTIE5PQllQQVNTUkxTICc7XG5cbiAgdmFyIFBMUEdTUUxfS1cgPVxuICAgICdBTElBUyBCRUdJTiBDT05TVEFOVCBERUNMQVJFIEVORCBFWENFUFRJT04gUkVUVVJOIFBFUkZPUk18MTAgUkFJU0UgR0VUIERJQUdOT1NUSUNTICcgK1xuICAgICdTVEFDS0VEfDEwIEZPUkVBQ0ggTE9PUCBFTFNJRiBFWElUIFdISUxFIFJFVkVSU0UgU0xJQ0UgREVCVUcgTE9HIElORk8gTk9USUNFIFdBUk5JTkcgQVNTRVJUICcgK1xuICAgICdPUEVOICc7XG5cbiAgdmFyIFRZUEVTID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9kYXRhdHlwZS5odG1sXG4gICAgJ0JJR0lOVCBJTlQ4IEJJR1NFUklBTCBTRVJJQUw4IEJJVCBWQVJZSU5HIFZBUkJJVCBCT09MRUFOIEJPT0wgQk9YIEJZVEVBIENIQVJBQ1RFUiBDSEFSIFZBUkNIQVIgJyArXG4gICAgJ0NJRFIgQ0lSQ0xFIERBVEUgRE9VQkxFIFBSRUNJU0lPTiBGTE9BVDggRkxPQVQgSU5FVCBJTlRFR0VSIElOVCBJTlQ0IElOVEVSVkFMIEpTT04gSlNPTkIgTElORSBMU0VHfDEwICcgK1xuICAgICdNQUNBRERSIE1BQ0FERFI4IE1PTkVZIE5VTUVSSUMgREVDIERFQ0lNQUwgUEFUSCBQT0lOVCBQT0xZR09OIFJFQUwgRkxPQVQ0IFNNQUxMSU5UIElOVDIgJyArXG4gICAgJ1NNQUxMU0VSSUFMfDEwIFNFUklBTDJ8MTAgU0VSSUFMfDEwIFNFUklBTDR8MTAgVEVYVCBUSU1FIFpPTkUgVElNRVRafDEwIFRJTUVTVEFNUCBUSU1FU1RBTVBUWnwxMCBUU1FVRVJZfDEwIFRTVkVDVE9SfDEwICcgK1xuICAgICdUWElEX1NOQVBTSE9UfDEwIFVVSUQgWE1MIE5BVElPTkFMIE5DSEFSICcgK1xuICAgICdJTlQ0UkFOR0V8MTAgSU5UOFJBTkdFfDEwIE5VTVJBTkdFfDEwIFRTUkFOR0V8MTAgVFNUWlJBTkdFfDEwIERBVEVSQU5HRXwxMCAnICtcbiAgICAvLyBwc2V1ZG90eXBlc1xuICAgICdBTllFTEVNRU5UIEFOWUFSUkFZIEFOWU5PTkFSUkFZIEFOWUVOVU0gQU5ZUkFOR0UgQ1NUUklORyBJTlRFUk5BTCAnICtcbiAgICAnUkVDT1JEIFBHX0RETF9DT01NQU5EIFZPSUQgVU5LTk9XTiBPUEFRVUUgUkVGQ1VSU09SICcgK1xuICAgIC8vIHNwZWMuIHR5cGVcbiAgICAnTkFNRSAnICtcbiAgICAvLyBPSUQtdHlwZXNcbiAgICAnT0lEIFJFR1BST0N8MTAgUkVHUFJPQ0VEVVJFfDEwIFJFR09QRVJ8MTAgUkVHT1BFUkFUT1J8MTAgUkVHQ0xBU1N8MTAgUkVHVFlQRXwxMCBSRUdST0xFfDEwICcgK1xuICAgICdSRUdOQU1FU1BBQ0V8MTAgUkVHQ09ORklHfDEwIFJFR0RJQ1RJT05BUll8MTAgJzsvLyArXG4gICAgLy8gc29tZSB0eXBlcyBmcm9tIHN0YW5kYXJkIGV4dGVuc2lvbnNcbiAgICAnSFNUT1JFfDEwIExPIExUUkVFfDEwICc7XG5cbiAgdmFyIFRZUEVTX1JFID1cbiAgICBUWVBFUy50cmltKClcbiAgICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgICAubWFwKCBmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHZhbC5zcGxpdCgnfCcpWzBdOyB9IClcbiAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgdmFyIFNRTF9CSSA9XG4gICAgJ0NVUlJFTlRfVElNRSBDVVJSRU5UX1RJTUVTVEFNUCBDVVJSRU5UX1VTRVIgQ1VSUkVOVF9DQVRBTE9HfDEwIENVUlJFTlRfREFURSBMT0NBTFRJTUUgTE9DQUxUSU1FU1RBTVAgJyArXG4gICAgJ0NVUlJFTlRfUk9MRXwxMCBDVVJSRU5UX1NDSEVNQXwxMCBTRVNTSU9OX1VTRVIgUFVCTElDICc7XG5cbiAgdmFyIFBMUEdTUUxfQkkgPVxuICAgICdGT1VORCBORVcgT0xEIFRHX05BTUV8MTAgVEdfV0hFTnwxMCBUR19MRVZFTHwxMCBUR19PUHwxMCBUR19SRUxJRHwxMCBUR19SRUxOQU1FfDEwICcgK1xuICAgICdUR19UQUJMRV9OQU1FfDEwIFRHX1RBQkxFX1NDSEVNQXwxMCBUR19OQVJHU3wxMCBUR19BUkdWfDEwIFRHX0VWRU5UfDEwIFRHX1RBR3wxMCAnICtcbiAgICAvLyBnZXQgZGlhZ25vc3RpY3NcbiAgICAnUk9XX0NPVU5UIFJFU1VMVF9PSUR8MTAgUEdfQ09OVEVYVHwxMCBSRVRVUk5FRF9TUUxTVEFURSBDT0xVTU5fTkFNRSBDT05TVFJBSU5UX05BTUUgJyArXG4gICAgJ1BHX0RBVEFUWVBFX05BTUV8MTAgTUVTU0FHRV9URVhUIFRBQkxFX05BTUUgU0NIRU1BX05BTUUgUEdfRVhDRVBUSU9OX0RFVEFJTHwxMCAnICtcbiAgICAnUEdfRVhDRVBUSU9OX0hJTlR8MTAgUEdfRVhDRVBUSU9OX0NPTlRFWFR8MTAgJztcblxuICB2YXIgUExQR1NRTF9FWENFUFRJT05TID1cbiAgICAvLyBleGNlcHRpb25zIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zdGF0aWMvZXJyY29kZXMtYXBwZW5kaXguaHRtbFxuICAgICdTUUxTVEFURSBTUUxFUlJNfDEwICcgK1xuICAgICdTVUNDRVNTRlVMX0NPTVBMRVRJT04gV0FSTklORyBEWU5BTUlDX1JFU1VMVF9TRVRTX1JFVFVSTkVEIElNUExJQ0lUX1pFUk9fQklUX1BBRERJTkcgJyArXG4gICAgJ05VTExfVkFMVUVfRUxJTUlOQVRFRF9JTl9TRVRfRlVOQ1RJT04gUFJJVklMRUdFX05PVF9HUkFOVEVEIFBSSVZJTEVHRV9OT1RfUkVWT0tFRCAnICtcbiAgICAnU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiBERVBSRUNBVEVEX0ZFQVRVUkUgTk9fREFUQSBOT19BRERJVElPTkFMX0RZTkFNSUNfUkVTVUxUX1NFVFNfUkVUVVJORUQgJyArXG4gICAgJ1NRTF9TVEFURU1FTlRfTk9UX1lFVF9DT01QTEVURSBDT05ORUNUSU9OX0VYQ0VQVElPTiBDT05ORUNUSU9OX0RPRVNfTk9UX0VYSVNUIENPTk5FQ1RJT05fRkFJTFVSRSAnICtcbiAgICAnU1FMQ0xJRU5UX1VOQUJMRV9UT19FU1RBQkxJU0hfU1FMQ09OTkVDVElPTiBTUUxTRVJWRVJfUkVKRUNURURfRVNUQUJMSVNITUVOVF9PRl9TUUxDT05ORUNUSU9OICcgK1xuICAgICdUUkFOU0FDVElPTl9SRVNPTFVUSU9OX1VOS05PV04gUFJPVE9DT0xfVklPTEFUSU9OIFRSSUdHRVJFRF9BQ1RJT05fRVhDRVBUSU9OIEZFQVRVUkVfTk9UX1NVUFBPUlRFRCAnICtcbiAgICAnSU5WQUxJRF9UUkFOU0FDVElPTl9JTklUSUFUSU9OIExPQ0FUT1JfRVhDRVBUSU9OIElOVkFMSURfTE9DQVRPUl9TUEVDSUZJQ0FUSU9OIElOVkFMSURfR1JBTlRPUiAnICtcbiAgICAnSU5WQUxJRF9HUkFOVF9PUEVSQVRJT04gSU5WQUxJRF9ST0xFX1NQRUNJRklDQVRJT04gRElBR05PU1RJQ1NfRVhDRVBUSU9OICcgK1xuICAgICdTVEFDS0VEX0RJQUdOT1NUSUNTX0FDQ0VTU0VEX1dJVEhPVVRfQUNUSVZFX0hBTkRMRVIgQ0FTRV9OT1RfRk9VTkQgQ0FSRElOQUxJVFlfVklPTEFUSU9OICcgK1xuICAgICdEQVRBX0VYQ0VQVElPTiBBUlJBWV9TVUJTQ1JJUFRfRVJST1IgQ0hBUkFDVEVSX05PVF9JTl9SRVBFUlRPSVJFIERBVEVUSU1FX0ZJRUxEX09WRVJGTE9XICcgK1xuICAgICdESVZJU0lPTl9CWV9aRVJPIEVSUk9SX0lOX0FTU0lHTk1FTlQgRVNDQVBFX0NIQVJBQ1RFUl9DT05GTElDVCBJTkRJQ0FUT1JfT1ZFUkZMT1cgJyArXG4gICAgJ0lOVEVSVkFMX0ZJRUxEX09WRVJGTE9XIElOVkFMSURfQVJHVU1FTlRfRk9SX0xPR0FSSVRITSBJTlZBTElEX0FSR1VNRU5UX0ZPUl9OVElMRV9GVU5DVElPTiAnICtcbiAgICAnSU5WQUxJRF9BUkdVTUVOVF9GT1JfTlRIX1ZBTFVFX0ZVTkNUSU9OIElOVkFMSURfQVJHVU1FTlRfRk9SX1BPV0VSX0ZVTkNUSU9OICcgK1xuICAgICdJTlZBTElEX0FSR1VNRU5UX0ZPUl9XSURUSF9CVUNLRVRfRlVOQ1RJT04gSU5WQUxJRF9DSEFSQUNURVJfVkFMVUVfRk9SX0NBU1QgJyArXG4gICAgJ0lOVkFMSURfREFURVRJTUVfRk9STUFUIElOVkFMSURfRVNDQVBFX0NIQVJBQ1RFUiBJTlZBTElEX0VTQ0FQRV9PQ1RFVCBJTlZBTElEX0VTQ0FQRV9TRVFVRU5DRSAnICtcbiAgICAnTk9OU1RBTkRBUkRfVVNFX09GX0VTQ0FQRV9DSEFSQUNURVIgSU5WQUxJRF9JTkRJQ0FUT1JfUEFSQU1FVEVSX1ZBTFVFIElOVkFMSURfUEFSQU1FVEVSX1ZBTFVFICcgK1xuICAgICdJTlZBTElEX1JFR1VMQVJfRVhQUkVTU0lPTiBJTlZBTElEX1JPV19DT1VOVF9JTl9MSU1JVF9DTEFVU0UgJyArXG4gICAgJ0lOVkFMSURfUk9XX0NPVU5UX0lOX1JFU1VMVF9PRkZTRVRfQ0xBVVNFIElOVkFMSURfVEFCTEVTQU1QTEVfQVJHVU1FTlQgSU5WQUxJRF9UQUJMRVNBTVBMRV9SRVBFQVQgJyArXG4gICAgJ0lOVkFMSURfVElNRV9aT05FX0RJU1BMQUNFTUVOVF9WQUxVRSBJTlZBTElEX1VTRV9PRl9FU0NBUEVfQ0hBUkFDVEVSIE1PU1RfU1BFQ0lGSUNfVFlQRV9NSVNNQVRDSCAnICtcbiAgICAnTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCBOVUxMX1ZBTFVFX05PX0lORElDQVRPUl9QQVJBTUVURVIgTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UgJyArXG4gICAgJ1NFUVVFTkNFX0dFTkVSQVRPUl9MSU1JVF9FWENFRURFRCBTVFJJTkdfREFUQV9MRU5HVEhfTUlTTUFUQ0ggU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiAnICtcbiAgICAnU1VCU1RSSU5HX0VSUk9SIFRSSU1fRVJST1IgVU5URVJNSU5BVEVEX0NfU1RSSU5HIFpFUk9fTEVOR1RIX0NIQVJBQ1RFUl9TVFJJTkcgJyArXG4gICAgJ0ZMT0FUSU5HX1BPSU5UX0VYQ0VQVElPTiBJTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04gSU5WQUxJRF9CSU5BUllfUkVQUkVTRU5UQVRJT04gJyArXG4gICAgJ0JBRF9DT1BZX0ZJTEVfRk9STUFUIFVOVFJBTlNMQVRBQkxFX0NIQVJBQ1RFUiBOT1RfQU5fWE1MX0RPQ1VNRU5UIElOVkFMSURfWE1MX0RPQ1VNRU5UICcgK1xuICAgICdJTlZBTElEX1hNTF9DT05URU5UIElOVkFMSURfWE1MX0NPTU1FTlQgSU5WQUxJRF9YTUxfUFJPQ0VTU0lOR19JTlNUUlVDVElPTiAnICtcbiAgICAnSU5URUdSSVRZX0NPTlNUUkFJTlRfVklPTEFUSU9OIFJFU1RSSUNUX1ZJT0xBVElPTiBOT1RfTlVMTF9WSU9MQVRJT04gRk9SRUlHTl9LRVlfVklPTEFUSU9OICcgK1xuICAgICdVTklRVUVfVklPTEFUSU9OIENIRUNLX1ZJT0xBVElPTiBFWENMVVNJT05fVklPTEFUSU9OIElOVkFMSURfQ1VSU09SX1NUQVRFICcgK1xuICAgICdJTlZBTElEX1RSQU5TQUNUSU9OX1NUQVRFIEFDVElWRV9TUUxfVFJBTlNBQ1RJT04gQlJBTkNIX1RSQU5TQUNUSU9OX0FMUkVBRFlfQUNUSVZFICcgK1xuICAgICdIRUxEX0NVUlNPUl9SRVFVSVJFU19TQU1FX0lTT0xBVElPTl9MRVZFTCBJTkFQUFJPUFJJQVRFX0FDQ0VTU19NT0RFX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gJyArXG4gICAgJ0lOQVBQUk9QUklBVEVfSVNPTEFUSU9OX0xFVkVMX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gJyArXG4gICAgJ05PX0FDVElWRV9TUUxfVFJBTlNBQ1RJT05fRk9SX0JSQU5DSF9UUkFOU0FDVElPTiBSRUFEX09OTFlfU1FMX1RSQU5TQUNUSU9OICcgK1xuICAgICdTQ0hFTUFfQU5EX0RBVEFfU1RBVEVNRU5UX01JWElOR19OT1RfU1VQUE9SVEVEIE5PX0FDVElWRV9TUUxfVFJBTlNBQ1RJT04gJyArXG4gICAgJ0lOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQgSU5WQUxJRF9TUUxfU1RBVEVNRU5UX05BTUUgJyArXG4gICAgJ1RSSUdHRVJFRF9EQVRBX0NIQU5HRV9WSU9MQVRJT04gSU5WQUxJRF9BVVRIT1JJWkFUSU9OX1NQRUNJRklDQVRJT04gSU5WQUxJRF9QQVNTV09SRCAnICtcbiAgICAnREVQRU5ERU5UX1BSSVZJTEVHRV9ERVNDUklQVE9SU19TVElMTF9FWElTVCBERVBFTkRFTlRfT0JKRUNUU19TVElMTF9FWElTVCAnICtcbiAgICAnSU5WQUxJRF9UUkFOU0FDVElPTl9URVJNSU5BVElPTiBTUUxfUk9VVElORV9FWENFUFRJT04gRlVOQ1RJT05fRVhFQ1VURURfTk9fUkVUVVJOX1NUQVRFTUVOVCAnICtcbiAgICAnTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgUFJPSElCSVRFRF9TUUxfU1RBVEVNRU5UX0FUVEVNUFRFRCAnICtcbiAgICAnUkVBRElOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEIElOVkFMSURfQ1VSU09SX05BTUUgRVhURVJOQUxfUk9VVElORV9FWENFUFRJT04gJyArXG4gICAgJ0NPTlRBSU5JTkdfU1FMX05PVF9QRVJNSVRURUQgTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgJyArXG4gICAgJ1BST0hJQklURURfU1FMX1NUQVRFTUVOVF9BVFRFTVBURUQgUkVBRElOR19TUUxfREFUQV9OT1RfUEVSTUlUVEVEICcgK1xuICAgICdFWFRFUk5BTF9ST1VUSU5FX0lOVk9DQVRJT05fRVhDRVBUSU9OIElOVkFMSURfU1FMU1RBVEVfUkVUVVJORUQgTlVMTF9WQUxVRV9OT1RfQUxMT1dFRCAnICtcbiAgICAnVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCBTUkZfUFJPVE9DT0xfVklPTEFURUQgRVZFTlRfVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCAnICtcbiAgICAnU0FWRVBPSU5UX0VYQ0VQVElPTiBJTlZBTElEX1NBVkVQT0lOVF9TUEVDSUZJQ0FUSU9OIElOVkFMSURfQ0FUQUxPR19OQU1FICcgK1xuICAgICdJTlZBTElEX1NDSEVNQV9OQU1FIFRSQU5TQUNUSU9OX1JPTExCQUNLIFRSQU5TQUNUSU9OX0lOVEVHUklUWV9DT05TVFJBSU5UX1ZJT0xBVElPTiAnICtcbiAgICAnU0VSSUFMSVpBVElPTl9GQUlMVVJFIFNUQVRFTUVOVF9DT01QTEVUSU9OX1VOS05PV04gREVBRExPQ0tfREVURUNURUQgJyArXG4gICAgJ1NZTlRBWF9FUlJPUl9PUl9BQ0NFU1NfUlVMRV9WSU9MQVRJT04gU1lOVEFYX0VSUk9SIElOU1VGRklDSUVOVF9QUklWSUxFR0UgQ0FOTk9UX0NPRVJDRSAnICtcbiAgICAnR1JPVVBJTkdfRVJST1IgV0lORE9XSU5HX0VSUk9SIElOVkFMSURfUkVDVVJTSU9OIElOVkFMSURfRk9SRUlHTl9LRVkgSU5WQUxJRF9OQU1FICcgK1xuICAgICdOQU1FX1RPT19MT05HIFJFU0VSVkVEX05BTUUgREFUQVRZUEVfTUlTTUFUQ0ggSU5ERVRFUk1JTkFURV9EQVRBVFlQRSBDT0xMQVRJT05fTUlTTUFUQ0ggJyArXG4gICAgJ0lOREVURVJNSU5BVEVfQ09MTEFUSU9OIFdST05HX09CSkVDVF9UWVBFIEdFTkVSQVRFRF9BTFdBWVMgVU5ERUZJTkVEX0NPTFVNTiAnICtcbiAgICAnVU5ERUZJTkVEX0ZVTkNUSU9OIFVOREVGSU5FRF9UQUJMRSBVTkRFRklORURfUEFSQU1FVEVSIFVOREVGSU5FRF9PQkpFQ1QgJyArXG4gICAgJ0RVUExJQ0FURV9DT0xVTU4gRFVQTElDQVRFX0NVUlNPUiBEVVBMSUNBVEVfREFUQUJBU0UgRFVQTElDQVRFX0ZVTkNUSU9OICcgK1xuICAgICdEVVBMSUNBVEVfUFJFUEFSRURfU1RBVEVNRU5UIERVUExJQ0FURV9TQ0hFTUEgRFVQTElDQVRFX1RBQkxFIERVUExJQ0FURV9BTElBUyAnICtcbiAgICAnRFVQTElDQVRFX09CSkVDVCBBTUJJR1VPVVNfQ09MVU1OIEFNQklHVU9VU19GVU5DVElPTiBBTUJJR1VPVVNfUEFSQU1FVEVSIEFNQklHVU9VU19BTElBUyAnICtcbiAgICAnSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFIElOVkFMSURfQ09MVU1OX0RFRklOSVRJT04gSU5WQUxJRF9DVVJTT1JfREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9EQVRBQkFTRV9ERUZJTklUSU9OIElOVkFMSURfRlVOQ1RJT05fREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9QUkVQQVJFRF9TVEFURU1FTlRfREVGSU5JVElPTiBJTlZBTElEX1NDSEVNQV9ERUZJTklUSU9OIElOVkFMSURfVEFCTEVfREVGSU5JVElPTiAnICtcbiAgICAnSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiBXSVRIX0NIRUNLX09QVElPTl9WSU9MQVRJT04gSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBESVNLX0ZVTEwgJyArXG4gICAgJ09VVF9PRl9NRU1PUlkgVE9PX01BTllfQ09OTkVDVElPTlMgQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCBQUk9HUkFNX0xJTUlUX0VYQ0VFREVEICcgK1xuICAgICdTVEFURU1FTlRfVE9PX0NPTVBMRVggVE9PX01BTllfQ09MVU1OUyBUT09fTUFOWV9BUkdVTUVOVFMgT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUgJyArXG4gICAgJ09CSkVDVF9JTl9VU0UgQ0FOVF9DSEFOR0VfUlVOVElNRV9QQVJBTSBMT0NLX05PVF9BVkFJTEFCTEUgT1BFUkFUT1JfSU5URVJWRU5USU9OICcgK1xuICAgICdRVUVSWV9DQU5DRUxFRCBBRE1JTl9TSFVURE9XTiBDUkFTSF9TSFVURE9XTiBDQU5OT1RfQ09OTkVDVF9OT1cgREFUQUJBU0VfRFJPUFBFRCAnICtcbiAgICAnU1lTVEVNX0VSUk9SIElPX0VSUk9SIFVOREVGSU5FRF9GSUxFIERVUExJQ0FURV9GSUxFIFNOQVBTSE9UX1RPT19PTEQgQ09ORklHX0ZJTEVfRVJST1IgJyArXG4gICAgJ0xPQ0tfRklMRV9FWElTVFMgRkRXX0VSUk9SIEZEV19DT0xVTU5fTkFNRV9OT1RfRk9VTkQgRkRXX0RZTkFNSUNfUEFSQU1FVEVSX1ZBTFVFX05FRURFRCAnICtcbiAgICAnRkRXX0ZVTkNUSU9OX1NFUVVFTkNFX0VSUk9SIEZEV19JTkNPTlNJU1RFTlRfREVTQ1JJUFRPUl9JTkZPUk1BVElPTiAnICtcbiAgICAnRkRXX0lOVkFMSURfQVRUUklCVVRFX1ZBTFVFIEZEV19JTlZBTElEX0NPTFVNTl9OQU1FIEZEV19JTlZBTElEX0NPTFVNTl9OVU1CRVIgJyArXG4gICAgJ0ZEV19JTlZBTElEX0RBVEFfVFlQRSBGRFdfSU5WQUxJRF9EQVRBX1RZUEVfREVTQ1JJUFRPUlMgJyArXG4gICAgJ0ZEV19JTlZBTElEX0RFU0NSSVBUT1JfRklFTERfSURFTlRJRklFUiBGRFdfSU5WQUxJRF9IQU5ETEUgRkRXX0lOVkFMSURfT1BUSU9OX0lOREVYICcgK1xuICAgICdGRFdfSU5WQUxJRF9PUFRJT05fTkFNRSBGRFdfSU5WQUxJRF9TVFJJTkdfTEVOR1RIX09SX0JVRkZFUl9MRU5HVEggJyArXG4gICAgJ0ZEV19JTlZBTElEX1NUUklOR19GT1JNQVQgRkRXX0lOVkFMSURfVVNFX09GX05VTExfUE9JTlRFUiBGRFdfVE9PX01BTllfSEFORExFUyAnICtcbiAgICAnRkRXX09VVF9PRl9NRU1PUlkgRkRXX05PX1NDSEVNQVMgRkRXX09QVElPTl9OQU1FX05PVF9GT1VORCBGRFdfUkVQTFlfSEFORExFICcgK1xuICAgICdGRFdfU0NIRU1BX05PVF9GT1VORCBGRFdfVEFCTEVfTk9UX0ZPVU5EIEZEV19VTkFCTEVfVE9fQ1JFQVRFX0VYRUNVVElPTiAnICtcbiAgICAnRkRXX1VOQUJMRV9UT19DUkVBVEVfUkVQTFkgRkRXX1VOQUJMRV9UT19FU1RBQkxJU0hfQ09OTkVDVElPTiBQTFBHU1FMX0VSUk9SICcgK1xuICAgICdSQUlTRV9FWENFUFRJT04gTk9fREFUQV9GT1VORCBUT09fTUFOWV9ST1dTIEFTU0VSVF9GQUlMVVJFIElOVEVSTkFMX0VSUk9SIERBVEFfQ09SUlVQVEVEICcgK1xuICAgICdJTkRFWF9DT1JSVVBURUQgJztcblxuICB2YXIgRlVOQ1RJT05TID1cbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYWdncmVnYXRlLmh0bWxcbiAgICAnQVJSQVlfQUdHIEFWRyBCSVRfQU5EIEJJVF9PUiBCT09MX0FORCBCT09MX09SIENPVU5UIEVWRVJZIEpTT05fQUdHIEpTT05CX0FHRyBKU09OX09CSkVDVF9BR0cgJyArXG4gICAgJ0pTT05CX09CSkVDVF9BR0cgTUFYIE1JTiBNT0RFIFNUUklOR19BR0cgU1VNIFhNTEFHRyAnICtcbiAgICAnQ09SUiBDT1ZBUl9QT1AgQ09WQVJfU0FNUCBSRUdSX0FWR1ggUkVHUl9BVkdZIFJFR1JfQ09VTlQgUkVHUl9JTlRFUkNFUFQgUkVHUl9SMiBSRUdSX1NMT1BFICcgK1xuICAgICdSRUdSX1NYWCBSRUdSX1NYWSBSRUdSX1NZWSBTVERERVYgU1REREVWX1BPUCBTVERERVZfU0FNUCBWQVJJQU5DRSBWQVJfUE9QIFZBUl9TQU1QICcgK1xuICAgICdQRVJDRU5USUxFX0NPTlQgUEVSQ0VOVElMRV9ESVNDICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy13aW5kb3cuaHRtbFxuICAgICdST1dfTlVNQkVSIFJBTksgREVOU0VfUkFOSyBQRVJDRU5UX1JBTksgQ1VNRV9ESVNUIE5USUxFIExBRyBMRUFEIEZJUlNUX1ZBTFVFIExBU1RfVkFMVUUgTlRIX1ZBTFVFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1jb21wYXJpc29uLmh0bWxcbiAgICAnTlVNX05PTk5VTExTIE5VTV9OVUxMUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtbWF0aC5odG1sXG4gICAgJ0FCUyBDQlJUIENFSUwgQ0VJTElORyBERUdSRUVTIERJViBFWFAgRkxPT1IgTE4gTE9HIE1PRCBQSSBQT1dFUiBSQURJQU5TIFJPVU5EIFNDQUxFIFNJR04gU1FSVCAnICtcbiAgICAnVFJVTkMgV0lEVEhfQlVDS0VUICcgK1xuICAgICdSQU5ET00gU0VUU0VFRCAnICtcbiAgICAnQUNPUyBBQ09TRCBBU0lOIEFTSU5EIEFUQU4gQVRBTkQgQVRBTjIgQVRBTjJEIENPUyBDT1NEIENPVCBDT1REIFNJTiBTSU5EIFRBTiBUQU5EICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zdHJpbmcuaHRtbFxuICAgICdCSVRfTEVOR1RIIENIQVJfTEVOR1RIIENIQVJBQ1RFUl9MRU5HVEggTE9XRVIgT0NURVRfTEVOR1RIIE9WRVJMQVkgUE9TSVRJT04gU1VCU1RSSU5HIFRSRUFUIFRSSU0gVVBQRVIgJyArXG4gICAgJ0FTQ0lJIEJUUklNIENIUiBDT05DQVQgQ09OQ0FUX1dTIENPTlZFUlQgQ09OVkVSVF9GUk9NIENPTlZFUlRfVE8gREVDT0RFIEVOQ09ERSBJTklUQ0FQJyArXG4gICAgJ0xFRlQgTEVOR1RIIExQQUQgTFRSSU0gTUQ1IFBBUlNFX0lERU5UIFBHX0NMSUVOVF9FTkNPRElORyBRVU9URV9JREVOVHwxMCBRVU9URV9MSVRFUkFMfDEwICcgK1xuICAgICdRVU9URV9OVUxMQUJMRXwxMCBSRUdFWFBfTUFUQ0ggUkVHRVhQX01BVENIRVMgUkVHRVhQX1JFUExBQ0UgUkVHRVhQX1NQTElUX1RPX0FSUkFZICcgK1xuICAgICdSRUdFWFBfU1BMSVRfVE9fVEFCTEUgUkVQRUFUIFJFUExBQ0UgUkVWRVJTRSBSSUdIVCBSUEFEIFJUUklNIFNQTElUX1BBUlQgU1RSUE9TIFNVQlNUUiAnICtcbiAgICAnVE9fQVNDSUkgVE9fSEVYIFRSQU5TTEFURSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtYmluYXJ5c3RyaW5nLmh0bWxcbiAgICAnT0NURVRfTEVOR1RIIEdFVF9CSVQgR0VUX0JZVEUgU0VUX0JJVCBTRVRfQllURSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtZm9ybWF0dGluZy5odG1sXG4gICAgJ1RPX0NIQVIgVE9fREFURSBUT19OVU1CRVIgVE9fVElNRVNUQU1QICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1kYXRldGltZS5odG1sXG4gICAgJ0FHRSBDTE9DS19USU1FU1RBTVB8MTAgREFURV9QQVJUIERBVEVfVFJVTkMgSVNGSU5JVEUgSlVTVElGWV9EQVlTIEpVU1RJRllfSE9VUlMgSlVTVElGWV9JTlRFUlZBTCAnICtcbiAgICAnTUFLRV9EQVRFIE1BS0VfSU5URVJWQUx8MTAgTUFLRV9USU1FIE1BS0VfVElNRVNUQU1QfDEwIE1BS0VfVElNRVNUQU1QVFp8MTAgTk9XIFNUQVRFTUVOVF9USU1FU1RBTVB8MTAgJyArXG4gICAgJ1RJTUVPRkRBWSBUUkFOU0FDVElPTl9USU1FU1RBTVB8MTAgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWVudW0uaHRtbFxuICAgICdFTlVNX0ZJUlNUIEVOVU1fTEFTVCBFTlVNX1JBTkdFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1nZW9tZXRyeS5odG1sXG4gICAgJ0FSRUEgQ0VOVEVSIERJQU1FVEVSIEhFSUdIVCBJU0NMT1NFRCBJU09QRU4gTlBPSU5UUyBQQ0xPU0UgUE9QRU4gUkFESVVTIFdJRFRIICcgK1xuICAgICdCT1ggQk9VTkRfQk9YIENJUkNMRSBMSU5FIExTRUcgUEFUSCBQT0xZR09OICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1uZXQuaHRtbFxuICAgICdBQkJSRVYgQlJPQURDQVNUIEhPU1QgSE9TVE1BU0sgTUFTS0xFTiBORVRNQVNLIE5FVFdPUksgU0VUX01BU0tMRU4gVEVYVCBJTkVUX1NBTUVfRkFNSUxZJyArXG4gICAgJ0lORVRfTUVSR0UgTUFDQUREUjhfU0VUN0JJVCAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtdGV4dHNlYXJjaC5odG1sXG4gICAgJ0FSUkFZX1RPX1RTVkVDVE9SIEdFVF9DVVJSRU5UX1RTX0NPTkZJRyBOVU1OT0RFIFBMQUlOVE9fVFNRVUVSWSBQSFJBU0VUT19UU1FVRVJZIFdFQlNFQVJDSF9UT19UU1FVRVJZICcgK1xuICAgICdRVUVSWVRSRUUgU0VUV0VJR0hUIFNUUklQIFRPX1RTUVVFUlkgVE9fVFNWRUNUT1IgSlNPTl9UT19UU1ZFQ1RPUiBKU09OQl9UT19UU1ZFQ1RPUiBUU19ERUxFVEUgJyArXG4gICAgJ1RTX0ZJTFRFUiBUU19IRUFETElORSBUU19SQU5LIFRTX1JBTktfQ0QgVFNfUkVXUklURSBUU1FVRVJZX1BIUkFTRSBUU1ZFQ1RPUl9UT19BUlJBWSAnICtcbiAgICAnVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVIgVFNWRUNUT1JfVVBEQVRFX1RSSUdHRVJfQ09MVU1OICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy14bWwuaHRtbFxuICAgICdYTUxDT01NRU5UIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEZPUkVTVCBYTUxQSSBYTUxST09UICcgK1xuICAgICdYTUxFWElTVFMgWE1MX0lTX1dFTExfRk9STUVEIFhNTF9JU19XRUxMX0ZPUk1FRF9ET0NVTUVOVCBYTUxfSVNfV0VMTF9GT1JNRURfQ09OVEVOVCAnICtcbiAgICAnWFBBVEggWFBBVEhfRVhJU1RTIFhNTFRBQkxFIFhNTE5BTUVTUEFDRVMgJyArXG4gICAgJ1RBQkxFX1RPX1hNTCBUQUJMRV9UT19YTUxTQ0hFTUEgVEFCTEVfVE9fWE1MX0FORF9YTUxTQ0hFTUEgJyArXG4gICAgJ1FVRVJZX1RPX1hNTCBRVUVSWV9UT19YTUxTQ0hFTUEgUVVFUllfVE9fWE1MX0FORF9YTUxTQ0hFTUEgJyArXG4gICAgJ0NVUlNPUl9UT19YTUwgQ1VSU09SX1RPX1hNTFNDSEVNQSAnICtcbiAgICAnU0NIRU1BX1RPX1hNTCBTQ0hFTUFfVE9fWE1MU0NIRU1BIFNDSEVNQV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnREFUQUJBU0VfVE9fWE1MIERBVEFCQVNFX1RPX1hNTFNDSEVNQSBEQVRBQkFTRV9UT19YTUxfQU5EX1hNTFNDSEVNQSAnICtcbiAgICAnWE1MQVRUUklCVVRFUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtanNvbi5odG1sXG4gICAgJ1RPX0pTT04gVE9fSlNPTkIgQVJSQVlfVE9fSlNPTiBST1dfVE9fSlNPTiBKU09OX0JVSUxEX0FSUkFZIEpTT05CX0JVSUxEX0FSUkFZIEpTT05fQlVJTERfT0JKRUNUICcgK1xuICAgICdKU09OQl9CVUlMRF9PQkpFQ1QgSlNPTl9PQkpFQ1QgSlNPTkJfT0JKRUNUIEpTT05fQVJSQVlfTEVOR1RIIEpTT05CX0FSUkFZX0xFTkdUSCBKU09OX0VBQ0ggJyArXG4gICAgJ0pTT05CX0VBQ0ggSlNPTl9FQUNIX1RFWFQgSlNPTkJfRUFDSF9URVhUIEpTT05fRVhUUkFDVF9QQVRIIEpTT05CX0VYVFJBQ1RfUEFUSCAnICtcbiAgICAnSlNPTl9PQkpFQ1RfS0VZUyBKU09OQl9PQkpFQ1RfS0VZUyBKU09OX1BPUFVMQVRFX1JFQ09SRCBKU09OQl9QT1BVTEFURV9SRUNPUkQgSlNPTl9QT1BVTEFURV9SRUNPUkRTRVQgJyArXG4gICAgJ0pTT05CX1BPUFVMQVRFX1JFQ09SRFNFVCBKU09OX0FSUkFZX0VMRU1FTlRTIEpTT05CX0FSUkFZX0VMRU1FTlRTIEpTT05fQVJSQVlfRUxFTUVOVFNfVEVYVCAnICtcbiAgICAnSlNPTkJfQVJSQVlfRUxFTUVOVFNfVEVYVCBKU09OX1RZUEVPRiBKU09OQl9UWVBFT0YgSlNPTl9UT19SRUNPUkQgSlNPTkJfVE9fUkVDT1JEIEpTT05fVE9fUkVDT1JEU0VUICcgK1xuICAgICdKU09OQl9UT19SRUNPUkRTRVQgSlNPTl9TVFJJUF9OVUxMUyBKU09OQl9TVFJJUF9OVUxMUyBKU09OQl9TRVQgSlNPTkJfSU5TRVJUIEpTT05CX1BSRVRUWSAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtc2VxdWVuY2UuaHRtbFxuICAgICdDVVJSVkFMIExBU1RWQUwgTkVYVFZBTCBTRVRWQUwgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWNvbmRpdGlvbmFsLmh0bWxcbiAgICAnQ09BTEVTQ0UgTlVMTElGIEdSRUFURVNUIExFQVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1hcnJheS5odG1sXG4gICAgJ0FSUkFZX0FQUEVORCBBUlJBWV9DQVQgQVJSQVlfTkRJTVMgQVJSQVlfRElNUyBBUlJBWV9GSUxMIEFSUkFZX0xFTkdUSCBBUlJBWV9MT1dFUiBBUlJBWV9QT1NJVElPTiAnICtcbiAgICAnQVJSQVlfUE9TSVRJT05TIEFSUkFZX1BSRVBFTkQgQVJSQVlfUkVNT1ZFIEFSUkFZX1JFUExBQ0UgQVJSQVlfVE9fU1RSSU5HIEFSUkFZX1VQUEVSIENBUkRJTkFMSVRZICcgK1xuICAgICdTVFJJTkdfVE9fQVJSQVkgVU5ORVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1yYW5nZS5odG1sXG4gICAgJ0lTRU1QVFkgTE9XRVJfSU5DIFVQUEVSX0lOQyBMT1dFUl9JTkYgVVBQRVJfSU5GIFJBTkdFX01FUkdFICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy1zcmYuaHRtbFxuICAgICdHRU5FUkFURV9TRVJJRVMgR0VORVJBVEVfU1VCU0NSSVBUUyAnICtcbiAgICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9mdW5jdGlvbnMtaW5mby5odG1sXG4gICAgJ0NVUlJFTlRfREFUQUJBU0UgQ1VSUkVOVF9RVUVSWSBDVVJSRU5UX1NDSEVNQXwxMCBDVVJSRU5UX1NDSEVNQVN8MTAgSU5FVF9DTElFTlRfQUREUiBJTkVUX0NMSUVOVF9QT1JUICcgK1xuICAgICdJTkVUX1NFUlZFUl9BRERSIElORVRfU0VSVkVSX1BPUlQgUk9XX1NFQ1VSSVRZX0FDVElWRSBGT1JNQVRfVFlQRSAnICtcbiAgICAnVE9fUkVHQ0xBU1MgVE9fUkVHUFJPQyBUT19SRUdQUk9DRURVUkUgVE9fUkVHT1BFUiBUT19SRUdPUEVSQVRPUiBUT19SRUdUWVBFIFRPX1JFR05BTUVTUEFDRSBUT19SRUdST0xFICcgK1xuICAgICdDT0xfREVTQ1JJUFRJT04gT0JKX0RFU0NSSVBUSU9OIFNIT0JKX0RFU0NSSVBUSU9OICcgK1xuICAgICdUWElEX0NVUlJFTlQgVFhJRF9DVVJSRU5UX0lGX0FTU0lHTkVEIFRYSURfQ1VSUkVOVF9TTkFQU0hPVCBUWElEX1NOQVBTSE9UX1hJUCBUWElEX1NOQVBTSE9UX1hNQVggJyArXG4gICAgJ1RYSURfU05BUFNIT1RfWE1JTiBUWElEX1ZJU0lCTEVfSU5fU05BUFNIT1QgVFhJRF9TVEFUVVMgJyArXG4gICAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xMS9zdGF0aWMvZnVuY3Rpb25zLWFkbWluLmh0bWxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HIFNFVF9DT05GSUcgQlJJTl9TVU1NQVJJWkVfTkVXX1ZBTFVFUyBCUklOX1NVTU1BUklaRV9SQU5HRSBCUklOX0RFU1VNTUFSSVpFX1JBTkdFICcgK1xuICAgICdHSU5fQ0xFQU5fUEVORElOR19MSVNUICcgK1xuICAgIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTEvc3RhdGljL2Z1bmN0aW9ucy10cmlnZ2VyLmh0bWxcbiAgICAnU1VQUFJFU1NfUkVEVU5EQU5UX1VQREFURVNfVFJJR0dFUiAnICtcbiAgICAvLyBpaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9kZXZlbC9zdGF0aWMvbG8tZnVuY3MuaHRtbFxuICAgICdMT19GUk9NX0JZVEVBIExPX1BVVCBMT19HRVQgTE9fQ1JFQVQgTE9fQ1JFQVRFIExPX1VOTElOSyBMT19JTVBPUlQgTE9fRVhQT1JUIExPUkVBRCBMT1dSSVRFICcgK1xuICAgIC8vXG4gICAgJ0dST1VQSU5HIENBU1QgJztcblxuICAgIHZhciBGVU5DVElPTlNfUkUgPVxuICAgICAgRlVOQ1RJT05TLnRyaW0oKVxuICAgICAgICAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgICAgICAgIC5tYXAoIGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdmFsLnNwbGl0KCd8JylbMF07IH0gKVxuICAgICAgICAgICAgICAgLmpvaW4oJ3wnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGFsaWFzZXM6IFsncG9zdGdyZXMnLCdwb3N0Z3Jlc3FsJ10sXG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDpcbiAgICAgICAgICAgIFNRTF9LVyArIFBMUEdTUUxfS1cgKyBST0xFX0FUVFJTLFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgU1FMX0JJICsgUExQR1NRTF9CSSArIFBMUEdTUUxfRVhDRVBUSU9OUyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gRm9yYmlkIHNvbWUgY3Vuc3RydWN0cyBmcm9tIG90aGVyIGxhbmd1YWdlcyB0byBpbXByb3ZlIGF1dG9kZXRlY3QuIEluIGZhY3RcbiAgICAgICAgLy8gXCJbYS16XTpcIiBpcyBsZWdhbCAoYXMgcGFydCBvZiBhcnJheSBzbGljZSksIGJ1dCBpbXByb2JhYmFsLlxuICAgICAgICBpbGxlZ2FsOiAvOj09fFxcV1xccypcXChcXCp8KF58XFxzKVxcJFthLXpdfHt7fFthLXpdOlxccyokfFxcLlxcLlxcLnxUTzp8RE86LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIG9mIHNvbWUgd29yZHMsIHdoaWNoIGFyZSByZXNlcnZlZCBvbmx5IGluIHNvbWUgY29udGV4dHNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJURVhUXFxzKlNFQVJDSFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihQUklNQVJZfEZPUkVJR058Rk9SKFxccytOTyk/KVxccytLRVlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJQQVJBTExFTFxccysoVU5TQUZFfFJFU1RSSUNURUR8U0FGRSlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTVE9SQUdFXFxzKyhQTEFJTnxFWFRFUk5BTHxFWFRFTkRFRHxNQUlOKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYk1BVENIXFxzKyhGVUxMfFBBUlRJQUx8U0lNUExFKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYk5VTExTXFxzKyhGSVJTVHxMQVNUKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkVWRU5UXFxzK1RSSUdHRVJcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoTUFQUElOR3xPUilcXHMrUkVQTEFDRVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihGUk9NfFRPKVxccysoUFJPR1JBTXxTVERJTnxTVERPVVQpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFNIQVJFfEVYQ0xVU0lWRSlcXHMrTU9ERVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihMRUZUfFJJR0hUKVxccysoT1VURVJcXHMrKT9KT0lOXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKEZFVENIfE1PVkUpXFxzKyhORVhUfFBSSU9SfEZJUlNUfExBU1R8QUJTT0xVVEV8UkVMQVRJVkV8Rk9SV0FSRHxCQUNLV0FSRClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJQUkVTRVJWRVxccytST1dTXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiRElTQ0FSRFxccytQTEFOU1xcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlJFRkVSRU5DSU5HXFxzKyhPTER8TkVXKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlNLSVBcXHMrTE9DS0VEXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiR1JPVVBJTkdcXHMrU0VUU1xcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihCSU5BUll8SU5TRU5TSVRJVkV8U0NST0xMfE5PXFxzK1NDUk9MTClcXHMrKENVUlNPUnxGT1IpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFdJVEh8V0lUSE9VVClcXHMrSE9MRFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYldJVEhcXHMrKENBU0NBREVEfExPQ0FMKVxccytDSEVDS1xccytPUFRJT05cXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJFWENMVURFXFxzKyhUSUVTfE5PXFxzK09USEVSUylcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJGT1JNQVRcXHMrKFRFWFR8WE1MfEpTT058WUFNTClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRVRcXHMrKChTRVNTSU9OfExPQ0FMKVxccyspP05BTUVTXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiSVNcXHMrKE5PVFxccyspP1VOS05PV05cXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRUNVUklUWVxccytMQUJFTFxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlNUQU5EQUxPTkVcXHMrKFlFU3xOT3xOT1xccytWQUxVRSlcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJXSVRIXFxzKyhOT1xccyspP0RBVEFcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoRk9SRUlHTnxTRVQpXFxzK0RBVEFcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJTRVRcXHMrKENBVEFMT0d8Q09OU1RSQUlOVFMpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKFdJVEh8Rk9SKVxccytPUkRJTkFMSVRZXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiSVNcXHMrKE5PVFxccyspP0RPQ1VNRU5UXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiWE1MXFxzK09QVElPTlxccysoRE9DVU1FTlR8Q09OVEVOVClcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGIoU1RSSVB8UFJFU0VSVkUpXFxzK1dISVRFU1BBQ0VcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJOT1xccysoQUNUSU9OfE1BWFZBTFVFfE1JTlZBTFVFKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYlBBUlRJVElPTlxccytCWVxccysoUkFOR0V8TElTVHxIQVNIKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkFUXFxzK1RJTUVcXHMrWk9ORVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkdSQU5URURcXHMrQllcXGIvIH0sXG4gICAgICAgICAgICAgIHsgYmVnaW46IC9cXGJSRVRVUk5cXHMrKFFVRVJZfE5FWFQpXFxiLyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAvXFxiKEFUVEFDSHxERVRBQ0gpXFxzK1BBUlRJVElPTlxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkZPUkNFXFxzK1JPV1xccytMRVZFTFxccytTRUNVUklUWVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYihJTkNMVURJTkd8RVhDTFVESU5HKVxccysoQ09NTUVOVFN8Q09OU1RSQUlOVFN8REVGQVVMVFN8SURFTlRJVFl8SU5ERVhFU3xTVEFUSVNUSUNTfFNUT1JBR0V8QUxMKVxcYi8gfSxcbiAgICAgICAgICAgICAgeyBiZWdpbjogL1xcYkFTXFxzKyhBU1NJR05NRU5UfElNUExJQ0lUfFBFUk1JU1NJVkV8UkVTVFJJQ1RJVkV8RU5VTXxSQU5HRSlcXGIvIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIGZ1bmN0aW9ucyBuYW1lZCBhcyBrZXl3b3JkcywgZm9sbG93ZWQgYnkgJygnXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGIoRk9STUFUfEZBTUlMWXxWRVJTSU9OKVxccypcXCgvLFxuICAgICAgICAgICAgLy9rZXl3b3JkczogeyBidWlsdF9pbjogJ0ZPUk1BVCBGQU1JTFkgVkVSU0lPTicgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gSU5DTFVERSAoIC4uLiApIGluIGluZGV4X3BhcmFtZXRlcnMgaW4gQ1JFQVRFIFRBQkxFXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJJTkNMVURFXFxzKlxcKC8sXG4gICAgICAgICAgICBrZXl3b3JkczogJ0lOQ0xVREUnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBub3QgaGlnaGxpZ2h0IFJBTkdFIGlmIG5vdCBpbiBmcmFtZV9jbGF1c2UgKG5vdCAxMDAlIGNvcnJlY3QsIGJ1dCBzZWVtcyBzYXRpc2ZhY3RvcnkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJSQU5HRSg/IVxccyooQkVUV0VFTnxVTkJPVU5ERUR8Q1VSUkVOVHxbLTAtOV0rKSkvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBkaXNhYmxlIGhpZ2hsaWdodGluZyBpbiBjb21tYW5kcyBDUkVBVEUgQUdHUkVHQVRFL0NPTExBVElPTi9EQVRBQkFTRS9PUEVSVE9SL1RFWFQgU0VBUkNIIC4uLi9UWVBFXG4gICAgICAgICAgLy8gYW5kIGluIFBML3BnU1FMIFJBSVNFIC4uLiBVU0lOR1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFZFUlNJT058T1dORVJ8VEVNUExBVEV8VEFCTEVTUEFDRXxDT05ORUNUSU9OXFxzK0xJTUlUfFBST0NFRFVSRXxSRVNUUklDVHxKT0lOfFBBUlNFUnxDT1BZfFNUQVJUfEVORHxDT0xMQVRJT058SU5QVVR8QU5BTFlaRXxTVE9SQUdFfExJS0V8REVGQVVMVHxERUxJTUlURVJ8RU5DT0RJTkd8Q09MVU1OfENPTlNUUkFJTlR8VEFCTEV8U0NIRU1BKVxccyo9L1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gUEdfc210aDsgSEFTX3NvbWVfUFJJVklMRUdFXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy9jbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgICAgICBiZWdpbjogL1xcYihQR19cXHcrP3xIQVNfW0EtWl9dK19QUklWSUxFR0UpXFxiLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIGV4dHJhY3RcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYkVYVFJBQ1RcXHMqXFwoLyxcbiAgICAgICAgICAgIGVuZDogL1xcYkZST01cXGIvLFxuICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgICAgLy9idWlsdF9pbjogJ0VYVFJBQ1QnLFxuICAgICAgICAgICAgICB0eXBlOiAgICAgJ0NFTlRVUlkgREFZIERFQ0FERSBET1cgRE9ZIEVQT0NIIEhPVVIgSVNPRE9XIElTT1lFQVIgTUlDUk9TRUNPTkRTICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ01JTExFTk5JVU0gTUlMTElTRUNPTkRTIE1JTlVURSBNT05USCBRVUFSVEVSIFNFQ09ORCBUSU1FWk9ORSBUSU1FWk9ORV9IT1VSICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1RJTUVaT05FX01JTlVURSBXRUVLIFlFQVInXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyB4bWxlbGVtZW50LCB4bWxwaSAtIHNwZWNpYWwgTkFNRVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFhNTEVMRU1FTlR8WE1MUEkpXFxzKlxcKFxccypOQU1FLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIC8vYnVpbHRfaW46ICdYTUxFTEVNRU5UIFhNTFBJJyxcbiAgICAgICAgICAgICAga2V5d29yZDogICdOQU1FJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8geG1scGFyc2UsIHhtbHNlcmlhbGl6ZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiKFhNTFBBUlNFfFhNTFNFUklBTElaRSlcXHMqXFwoXFxzKihET0NVTUVOVHxDT05URU5UKS8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICAvL2J1aWx0X2luOiAnWE1MUEFSU0UgWE1MU0VSSUFMSVpFJyxcbiAgICAgICAgICAgICAga2V5d29yZDogICdET0NVTUVOVCBDT05URU5UJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gU2VxdWVuY2VzLiBXZSBhY3R1YWxseSBza2lwIGV2ZXJ5dGhpbmcgYmV0d2VlbiBDQUNIRXxJTkNSRU1FTlR8TUFYVkFMVUV8TUlOVkFMVUUgYW5kXG4gICAgICAgICAgLy8gbmVhcmVzdCBmb2xsb3dpbmcgbnVtZXJpYyBjb25zdGFudC4gV2l0aG91dCB3aXRoIHRyaWNrIHdlIGZpbmQgYSBsb3Qgb2YgXCJrZXl3b3Jkc1wiXG4gICAgICAgICAgLy8gaW4gJ2F2cmFzbScgYXV0b2RldGVjdGlvbiB0ZXN0Li4uXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ0NBQ0hFIElOQ1JFTUVOVCBNQVhWQUxVRSBNSU5WQUxVRScsXG4gICAgICAgICAgICBlbmQ6IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogJ0JZIENBQ0hFIElOQ1JFTUVOVCBNQVhWQUxVRSBNSU5WQUxVRSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFdJVEh8V0lUSE9VVCBUSU1FIFpPTkUgYXMgcGFydCBvZiBkYXRhdHlwZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC9cXGIoV0lUSHxXSVRIT1VUKVxccytUSU1FXFxzK1pPTkVcXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBJTlRFUlZBTCBvcHRpb25hbCBmaWVsZHNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFxiSU5URVJWQUxcXHMrKFlFQVJ8TU9OVEh8REFZfEhPVVJ8TUlOVVRFfFNFQ09ORCkoXFxzK1RPXFxzKyhNT05USHxIT1VSfE1JTlVURXxTRUNPTkQpKT9cXGIvXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBQc2V1ZG8tdHlwZXMgd2hpY2ggYWxsb3dlZCBvbmx5IGFzIHJldHVybiB0eXBlXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXGJSRVRVUk5TXFxzKyhMQU5HVUFHRV9IQU5ETEVSfFRSSUdHRVJ8RVZFTlRfVFJJR0dFUnxGRFdfSEFORExFUnxJTkRFWF9BTV9IQU5ETEVSfFRTTV9IQU5ETEVSKVxcYi8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBrZXl3b3JkOiAnUkVUVVJOUycsXG4gICAgICAgICAgICAgIHR5cGU6ICdMQU5HVUFHRV9IQU5ETEVSIFRSSUdHRVIgRVZFTlRfVFJJR0dFUiBGRFdfSEFORExFUiBJTkRFWF9BTV9IQU5ETEVSIFRTTV9IQU5ETEVSJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gS25vd24gZnVuY3Rpb25zIC0gb25seSB3aGVuIGZvbGxvd2VkIGJ5ICcoJ1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEZVTkNUSU9OU19SRSArICcpXFxcXHMqXFxcXCgnXG4gICAgICAgICAgICAvL2tleXdvcmRzOiB7IGJ1aWx0X2luOiBGVU5DVElPTlMgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gVHlwZXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwuKCcgKyBUWVBFU19SRSArICcpXFxcXGInIC8vIHByZXZlbnQgaGlnaGxpZ2h0IGFzIHR5cGUsIHNheSwgJ29pZCcgaW4gJ3BnY2xhc3Mub2lkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYignICsgVFlQRVNfUkUgKyAnKVxcXFxzK1BBVEhcXFxcYicsIC8vIGluIFhNTFRBQkxFXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBrZXl3b3JkOiAnUEFUSCcsIC8vIGhvcGVmdWxseSBubyBvbmUgd291bGQgdXNlIFBBVEggdHlwZSBpbiBYTUxUQUJMRS4uLlxuICAgICAgICAgICAgICB0eXBlOiBUWVBFUy5yZXBsYWNlKCdQQVRIICcsJycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRZUEVTX1JFICsgJylcXFxcYidcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIFN0cmluZ3MsIHNlZSBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzExL3N0YXRpYy9zcWwtc3ludGF4LWxleGljYWwuaHRtbCNTUUwtU1lOVEFYLUNPTlNUQU5UU1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJyd9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKGV8RXx1JnxVJilcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcXFxcXFxcXC4nfV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogRE9MTEFSX1NUUklORyxcbiAgICAgICAgICAgIGVuZFNhbWVBc0JlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGFjdHVhbGx5IHdlIHdhbnQgdGhlbSBhbGwgZXhjZXB0IFNRTDsgbGlzdGVkIGFyZSB0aG9zZSB3aXRoIGtub3duIGltcGxlbWVudGF0aW9uc1xuICAgICAgICAgICAgICAgIC8vIGFuZCBYTUwgKyBKU09OIGp1c3QgaW4gY2FzZVxuICAgICAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiBbJ3Bnc3FsJywncGVybCcsJ3B5dGhvbicsJ3RjbCcsJ3InLCdsdWEnLCdqYXZhJywncGhwJywncnVieScsJ2Jhc2gnLCdzY2hlbWUnLCd4bWwnLCdqc29uJ10sXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gaWRlbnRpZmllcnMgaW4gcXVvdGVzXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyBjb21tZW50c1xuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIC8vIFBML3BnU1FMIHN0YWZmXG4gICAgICAgICAgLy8gJVJPV1RZUEUsICVUWVBFLCAkblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge2JlZ2luOiAnJShST1cpP1RZUEUnLCByZWxldmFuY2U6IDEwfSwgLy8gJVRZUEUsICVST1dUWVBFXG4gICAgICAgICAgICAgIHtiZWdpbjogJ1xcXFwkXFxcXGQrJ30sICAgICAgICAgICAgICAgICAgICAvLyAkblxuICAgICAgICAgICAgICB7YmVnaW46ICdeI1xcXFx3JywgZW5kOiAnJCd9ICAgICAgICAgICAgIC8vICNjb21waWxlciBvcHRpb25cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIDw8bGFiZWxlcz4+XG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiBMQUJFTCxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBiZWdpbjogJ1xcXFwkK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qJ1xuICB9O1xuICB2YXIgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogLzxcXD8ocGhwKT98XFw/Pi9cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBQUkVQUk9DRVNTT1JdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlwiJywgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ2JcXCcnLCBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pXG4gICAgXVxuICB9O1xuICB2YXIgTlVNQkVSID0ge3ZhcmlhbnRzOiBbaGxqcy5CSU5BUllfTlVNQkVSX01PREUsIGhsanMuQ19OVU1CRVJfTU9ERV19O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGhwJywgJ3BocDMnLCAncGhwNCcsICdwaHA1JywgJ3BocDYnLCAncGhwNyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6XG4gICAgICAnYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggJyArXG4gICAgICAnYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgJyArXG4gICAgICAncHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yICcgK1xuICAgICAgJ3JldHVybiBwYXJlbnQgY2xvbmUgdXNlIF9fQ0xBU1NfXyBfX0xJTkVfXyBlbHNlIGJyZWFrIHByaW50IGV2YWwgbmV3ICcgK1xuICAgICAgJ2NhdGNoIF9fTUVUSE9EX18gY2FzZSBleGNlcHRpb24gZGVmYXVsdCBkaWUgcmVxdWlyZSBfX0ZVTkNUSU9OX18gJyArXG4gICAgICAnZW5kZGVjbGFyZSBmaW5hbCB0cnkgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgJyArXG4gICAgICAndHJhaXQgZ290byBpbnN0YW5jZW9mIGluc3RlYWRvZiBfX0RJUl9fIF9fTkFNRVNQQUNFX18gJyArXG4gICAgICAneWllbGQgZmluYWxseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJyQnLCB7Y29udGFpbnM6IFtQUkVQUk9DRVNTT1JdfSksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPDw8WydcIl0/XFx3K1snXCJdPyQvLCBlbmQ6IC9eXFx3Kzs/JC8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1xcJFxcdysvfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLCBiZWdpbjogL1xcJHRoaXNcXGIvXG4gICAgICB9LFxuICAgICAgVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIC8vIHN3YWxsb3cgY29tcG9zZWQgaWRlbnRpZmllcnMgdG8gYXZvaWQgcGFyc2luZyB0aGVtIGFzIGtleXdvcmRzXG4gICAgICAgIGJlZ2luOiAvKDo6fC0+KStbYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvWzt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcJHxcXFxcW3wlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICd7JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XFwoXFwkXCJdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLCBlbmQ6ICc7JyxcbiAgICAgICAgaWxsZWdhbDogL1tcXC4nXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAndXNlJywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0+JyAvLyBObyBtYXJrdXAsIGp1c3QgYSByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGlzYWJsZUF1dG9kZXRlY3Q6IHRydWVcbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWN0b3IgYWRkcmVzc29mIGFuZCBhcyBiZSBicmVhayBjbGFzcyBjb21waWxlX2Vycm9yIGNvbXBpbGVfaW50cmluc2ljICcgK1xuICAgICAgJ2NvbnN1bWUgY29udGludWUgZGVsZWdhdGUgZGlnZXN0b2YgZG8gZWxzZSBlbHNlaWYgZW1iZWQgZW5kIGVycm9yICcgK1xuICAgICAgJ2ZvciBmdW4gaWYgaWZkZWYgaW4gaW50ZXJmYWNlIGlzIGlzbnQgbGFtYmRhIGxldCBtYXRjaCBuZXcgbm90IG9iamVjdCAnICtcbiAgICAgICdvciBwcmltaXRpdmUgcmVjb3ZlciByZXBlYXQgcmV0dXJuIHN0cnVjdCB0aGVuIHRyYWl0IHRyeSB0eXBlIHVudGlsICcgK1xuICAgICAgJ3VzZSB2YXIgd2hlcmUgd2hpbGUgd2l0aCB4b3InLFxuICAgIG1ldGE6XG4gICAgICAnaXNvIHZhbCB0YWcgdHJuIGJveCByZWYnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndGhpcyBmYWxzZSB0cnVlJ1xuICB9O1xuXG4gIHZhciBUUklQTEVfUVVPVEVfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuXG4gIHZhciBRVU9URV9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gIH07XG5cbiAgdmFyIFNJTkdMRV9RVU9URV9DSEFSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBUWVBFX05BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYl8/W0EtWl1bXFxcXHddKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBSSU1FRF9OQU1FID0ge1xuICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcJycsIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBOVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnKC0/KShcXFxcYjBbeFhdW2EtZkEtRjAtOV0rfFxcXFxiMFtiQl1bMDFdK3woXFxcXGJcXFxcZCsoX1xcXFxkKyk/KFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBgRlVOQ1RJT05gIGFuZCBgQ0xBU1NgIG1vZGVzIHdlcmUgaW50ZW50aW9uYWxseSByZW1vdmVkIHRvIHNpbXBsaWZ5XG4gICAqIGhpZ2hsaWdodGluZyBhbmQgZml4IGNhc2VzIGxpa2VcbiAgICogYGBgXG4gICAqIGludGVyZmFjZSBJdGVyYXRvcltBOiBBXVxuICAgKiAgIGZ1biBoYXNfbmV4dCgpOiBCb29sXG4gICAqICAgZnVuIG5leHQoKTogQT9cbiAgICogYGBgXG4gICAqIHdoZXJlIGl0IGlzIHZhbGlkIHRvIGhhdmUgYSBmdW5jdGlvbiBoZWFkIHdpdGhvdXQgYSBib2R5XG4gICAqL1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUWVBFX05BTUUsXG4gICAgICBUUklQTEVfUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBRVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFNJTkdMRV9RVU9URV9DSEFSX01PREUsXG4gICAgICBQUklNRURfTkFNRSxcbiAgICAgIE5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKXtcblxuICB2YXIgVFlQRVMgPVxuICAgIFtcInN0cmluZ1wiLCBcImNoYXJcIiwgXCJieXRlXCIsIFwiaW50XCIsIFwibG9uZ1wiLCBcImJvb2xcIiwgIFwiZGVjaW1hbFwiLCAgXCJzaW5nbGVcIixcbiAgICAgXCJkb3VibGVcIiwgXCJEYXRlVGltZVwiLCBcInhtbFwiLCBcImFycmF5XCIsIFwiaGFzaHRhYmxlXCIsIFwidm9pZFwiXTtcblxuICAvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzE0NDI4KHY9dnMuODUpLmFzcHhcbiAgdmFyIFZBTElEX1ZFUkJTID1cbiAgICAnQWRkfENsZWFyfENsb3NlfENvcHl8RW50ZXJ8RXhpdHxGaW5kfEZvcm1hdHxHZXR8SGlkZXxKb2lufExvY2t8JyArXG4gICAgJ01vdmV8TmV3fE9wZW58T3B0aW1pemV8UG9wfFB1c2h8UmVkb3xSZW1vdmV8UmVuYW1lfFJlc2V0fFJlc2l6ZXwnICtcbiAgICAnU2VhcmNofFNlbGVjdHxTZXR8U2hvd3xTa2lwfFNwbGl0fFN0ZXB8U3dpdGNofFVuZG98VW5sb2NrfCcgK1xuICAgICdXYXRjaHxCYWNrdXB8Q2hlY2twb2ludHxDb21wYXJlfENvbXByZXNzfENvbnZlcnR8Q29udmVydEZyb218JyArXG4gICAgJ0NvbnZlcnRUb3xEaXNtb3VudHxFZGl0fEV4cGFuZHxFeHBvcnR8R3JvdXB8SW1wb3J0fEluaXRpYWxpemV8JyArXG4gICAgJ0xpbWl0fE1lcmdlfE5ld3xPdXR8UHVibGlzaHxSZXN0b3JlfFNhdmV8U3luY3xVbnB1Ymxpc2h8VXBkYXRlfCcgK1xuICAgICdBcHByb3ZlfEFzc2VydHxDb21wbGV0ZXxDb25maXJtfERlbnl8RGlzYWJsZXxFbmFibGV8SW5zdGFsbHxJbnZva2V8UmVnaXN0ZXJ8JyArXG4gICAgJ1JlcXVlc3R8UmVzdGFydHxSZXN1bWV8U3RhcnR8U3RvcHxTdWJtaXR8U3VzcGVuZHxVbmluc3RhbGx8JyArXG4gICAgJ1VucmVnaXN0ZXJ8V2FpdHxEZWJ1Z3xNZWFzdXJlfFBpbmd8UmVwYWlyfFJlc29sdmV8VGVzdHxUcmFjZXxDb25uZWN0fCcgK1xuICAgICdEaXNjb25uZWN0fFJlYWR8UmVjZWl2ZXxTZW5kfFdyaXRlfEJsb2NrfEdyYW50fFByb3RlY3R8UmV2b2tlfFVuYmxvY2t8JyArXG4gICAgJ1VucHJvdGVjdHxVc2V8Rm9yRWFjaHxTb3J0fFRlZXxXaGVyZSc7XG5cbiAgdmFyIENPTVBBUklTT05fT1BFUkFUT1JTID1cbiAgICAnLWFuZHwtYXN8LWJhbmR8LWJub3R8LWJvcnwtYnhvcnwtY2FzZXNlbnNpdGl2ZXwtY2NvbnRhaW5zfC1jZXF8LWNnZXwtY2d0fCcgK1xuICAgICctY2xlfC1jbGlrZXwtY2x0fC1jbWF0Y2h8LWNuZXwtY25vdGNvbnRhaW5zfC1jbm90bGlrZXwtY25vdG1hdGNofC1jb250YWluc3wnICtcbiAgICAnLWNyZXBsYWNlfC1jc3BsaXR8LWVxfC1leGFjdHwtZnwtZmlsZXwtZ2V8LWd0fC1pY29udGFpbnN8LWllcXwtaWdlfC1pZ3R8JyArXG4gICAgJy1pbGV8LWlsaWtlfC1pbHR8LWltYXRjaHwtaW58LWluZXwtaW5vdGNvbnRhaW5zfC1pbm90bGlrZXwtaW5vdG1hdGNofCcgK1xuICAgICctaXJlcGxhY2V8LWlzfC1pc25vdHwtaXNwbGl0fC1qb2lufC1sZXwtbGlrZXwtbHR8LW1hdGNofC1uZXwtbm90fCcgK1xuICAgICctbm90Y29udGFpbnN8LW5vdGlufC1ub3RsaWtlfC1ub3RtYXRjaHwtb3J8LXJlZ2V4fC1yZXBsYWNlfC1zaGx8LXNocnwnICtcbiAgICAnLXNwbGl0fC13aWxkY2FyZHwteG9yJztcblxuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ2lmIGVsc2UgZm9yZWFjaCByZXR1cm4gZG8gd2hpbGUgdW50aWwgZWxzZWlmIGJlZ2luIGZvciB0cmFwIGRhdGEgZHluYW1pY3BhcmFtICcgK1xuICAgICdlbmQgYnJlYWsgdGhyb3cgcGFyYW0gY29udGludWUgZmluYWxseSBpbiBzd2l0Y2ggZXhpdCBmaWx0ZXIgdHJ5IHByb2Nlc3MgY2F0Y2ggJyArXG4gICAgJ2hpZGRlbiBzdGF0aWMgcGFyYW1ldGVyJ1xuICAgIC8vIFRPRE86ICd2YWxpZGF0ZVtBLVpdKycgY2FuJ3Qgd29yayBpbiBrZXl3b3Jkc1xuICB9O1xuXG4gIHZhciBUSVRMRV9OQU1FX1JFID0gL1xcd1tcXHdcXGRdKigoLSlbXFx3XFxkXSspKi87XG5cbiAgdmFyIEJBQ0tUSUNLX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ2BbXFxcXHNcXFxcU10nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBWQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvXFwkXFxCLyB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdrZXl3b3JkJywgYmVnaW46IC9cXCR0aGlzLyB9LFxuICAgICAgeyBiZWdpbjogL1xcJFtcXHdcXGRdW1xcd1xcZF86XSovIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46IC9cXCQobnVsbHx0cnVlfGZhbHNlKVxcYi9cbiAgfTtcblxuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICB2YXJpYW50czogW3sgYmVnaW46IC9cIi8sIGVuZDogL1wiLyB9LCB7IGJlZ2luOiAvQFwiLywgZW5kOiAvXlwiQC8gfV0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEJBQ0tUSUNLX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFtBLXpdLywgZW5kOiAvW15BLXpdL1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQVBPU19TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogLycvLCBlbmQ6IC8nLyB9LFxuICAgICAgeyBiZWdpbjogL0AnLywgZW5kOiAvXidALyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQU19IRUxQVEFHUyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZG9jdGFnXCIsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8qIG5vIHBhcmFtYXRlciBoZWxwIHRhZ3MgKi9cbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXC4oc3lub3BzaXN8ZGVzY3JpcHRpb258ZXhhbXBsZXxpbnB1dHN8b3V0cHV0c3xub3Rlc3xsaW5rfGNvbXBvbmVudHxyb2xlfGZ1bmN0aW9uYWxpdHkpL1xuICAgICAgfSxcbiAgICAgIC8qIG9uZSBwYXJhbWV0ZXIgaGVscCB0YWdzICovXG4gICAgICB7IGJlZ2luOiAvXFwuKHBhcmFtZXRlcnxmb3J3YXJkaGVscHRhcmdldG5hbWV8Zm9yd2FyZGhlbHBjYXRlZ29yeXxyZW1vdGVoZWxwcnVuc3BhY2V8ZXh0ZXJuYWxoZWxwKVxccytcXFMrLyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQU19DT01NRU5UID0gaGxqcy5pbmhlcml0KFxuICAgIGhsanMuQ09NTUVOVChudWxsLCBudWxsKSxcbiAgICB7XG4gICAgICB2YXJpYW50czogW1xuICAgICAgICAvKiBzaW5nbGUtbGluZSBjb21tZW50ICovXG4gICAgICAgIHsgYmVnaW46IC8jLywgZW5kOiAvJC8gfSxcbiAgICAgICAgLyogbXVsdGktbGluZSBjb21tZW50ICovXG4gICAgICAgIHsgYmVnaW46IC88Iy8sIGVuZDogLyM+LyB9XG4gICAgICBdLFxuICAgICAgY29udGFpbnM6IFtQU19IRUxQVEFHU11cbiAgICB9XG4gICk7XG5cbiAgdmFyIENNRExFVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnKCcuY29uY2F0KFZBTElEX1ZFUkJTLCAnKSsoLSlbXFxcXHdcXFxcZF0rJykgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgUFNfQ0xBU1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBlbnVtJywgZW5kOiAvXFxzKlt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICB9O1xuXG4gIHZhciBQU19GVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9mdW5jdGlvblxccysvLCBlbmQ6IC9cXHMqXFx7fCQvLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGJlZ2luOiBcImZ1bmN0aW9uXCIsIHJlbGV2YW5jZTogMCwgY2xhc3NOYW1lOiBcImtleXdvcmRcIiB9LFxuICAgICAgeyBjbGFzc05hbWU6IFwidGl0bGVcIixcbiAgICAgICAgYmVnaW46IFRJVExFX05BTUVfUkUsIHJlbGV2YW5jZTowIH0sXG4gICAgICB7IGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgY2xhc3NOYW1lOiBcInBhcmFtc1wiLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVkFSXSB9XG4gICAgICAvLyBDTURMRVRTXG4gICAgXVxuICB9O1xuXG4gIC8vIFVzaW5nIHN0YXRtZW50LCBwbHVzIHR5cGUsIHBsdXMgYXNzZW1ibHkgbmFtZS5cbiAgdmFyIFBTX1VTSU5HID0ge1xuICAgIGJlZ2luOiAvdXNpbmdcXHMvLCBlbmQ6IC8kLyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgQVBPU19TVFJJTkcsXG4gICAgICB7IGNsYXNzTmFtZTogJ2tleXdvcmQnLCBiZWdpbjogLyh1c2luZ3xhc3NlbWJseXxjb21tYW5kfG1vZHVsZXxuYW1lc3BhY2V8dHlwZSkvIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gQ29tcGVyaXNvbiBvcGVyYXRvcnMgJiBmdW5jdGlvbiBuYW1lZCBwYXJhbWV0ZXJzLlxuICB2YXIgUFNfQVJHVU1FTlRTID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICAvLyBQUyBsaXRlcmFscyBhcmUgcHJldHR5IHZlcmJvc2Ugc28gaXQncyBhIGdvb2QgaWRlYSB0byBhY2NlbnQgdGhlbSBhIGJpdC5cbiAgICAgIHsgY2xhc3NOYW1lOiAnb3BlcmF0b3InLCBiZWdpbjogJygnLmNvbmNhdChDT01QQVJJU09OX09QRVJBVE9SUywgJylcXFxcYicpIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2xpdGVyYWwnLCBiZWdpbjogLygtKVtcXHdcXGRdKy8sIHJlbGV2YW5jZTowIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFNUQVRJQ19NRU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJyxcbiAgICBiZWdpbjogLzo6XFx3K1xcYi8sIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsIGJlZ2luOiAvXFx3Ky8sIGVuZHNQYXJlbnQ6IHRydWUgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgSEFTSF9TSUdOUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLFxuICAgIGJlZ2luOiAvXFxAXFxCLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUFNfTkVXX09CSkVDVF9UWVBFID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogL05ldy1PYmplY3RcXHMrXFx3LywgZW5kOiAvJC8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgYmVnaW46IC9OZXctT2JqZWN0XFxzKy8sIHJlbGV2YW5jZTogMCB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46IC8oW1xcd1xcLl0pKy8sIGVuZHNQYXJlbnQ6IHRydWUgfVxuICAgIF1cbiAgfTtcblxuICAvLyBJdCdzIGEgdmVyeSBnZW5lcmFsIHJ1bGUgc28gSSdsbCBuYXJyb3cgaXQgYSBiaXQgd2l0aCBzb21lIHN0cmljdCBib3VuZGFyaWVzXG4gIC8vIHRvIGF2b2lkIGFueSBwb3NzaWJsZSBmYWxzZS1wb3NpdGl2ZSBjb2xsaXNpb25zIVxuICB2YXIgUFNfTUVUSE9EUyA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9cXFsuKlxcXVxccypbXFx3XStbIF0/P1xcKC8sIGVuZDogLyQvLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJywgYmVnaW46ICcoJy5jb25jYXQoXG4gICAgICAgIEtFWVdPUkRTLmtleXdvcmQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMvZywgJ3wnXG4gICAgICAgICksICcpXFxcXGInKSxcbiAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBlbmRzUGFyZW50OiB0cnVlIH0pXG4gICAgXVxuICB9O1xuXG4gIHZhciBHRU5UTEVNQU5TX1NFVCA9IFtcbiAgICAvLyBTVEFUSUNfTUVNQkVSLFxuICAgIFBTX01FVEhPRFMsXG4gICAgUFNfQ09NTUVOVCxcbiAgICBCQUNLVElDS19FU0NBUEUsXG4gICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICBRVU9URV9TVFJJTkcsXG4gICAgQVBPU19TVFJJTkcsXG4gICAgLy8gUFNfTkVXX09CSkVDVF9UWVBFLFxuICAgIENNRExFVFMsXG4gICAgVkFSLFxuICAgIExJVEVSQUwsXG4gICAgSEFTSF9TSUdOU1xuICBdO1xuXG4gIHZhciBQU19UWVBFID0ge1xuICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtdLmNvbmNhdChcbiAgICAgICdzZWxmJyxcbiAgICAgIEdFTlRMRU1BTlNfU0VULFxuICAgICAgeyBiZWdpbjogXCIoXCIgKyBUWVBFUy5qb2luKFwifFwiKSArIFwiKVwiLCBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIiwgcmVsZXZhbmNlOjAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsIGJlZ2luOiAvW1xcLlxcd1xcZF0rLywgcmVsZXZhbmNlOiAwIH1cbiAgICApXG4gIH07XG5cbiAgUFNfTUVUSE9EUy5jb250YWlucy51bnNoaWZ0KFBTX1RZUEUpXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbXCJwc1wiLCBcInBzMVwiXSxcbiAgICBsZXhlbWVzOiAvLT9bQS16XFwuXFwtXSsvLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBHRU5UTEVNQU5TX1NFVC5jb25jYXQoXG4gICAgICBQU19DTEFTUyxcbiAgICAgIFBTX0ZVTkNUSU9OLFxuICAgICAgUFNfVVNJTkcsXG4gICAgICBQU19BUkdVTUVOVFMsXG4gICAgICBQU19UWVBFXG4gICAgKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ0J1ZmZlcmVkUmVhZGVyIFBWZWN0b3IgUEZvbnQgUEltYWdlIFBHcmFwaGljcyBIYXNoTWFwIGJvb2xlYW4gYnl0ZSBjaGFyIGNvbG9yICcgK1xuICAgICAgICAnZG91YmxlIGZsb2F0IGludCBsb25nIFN0cmluZyBBcnJheSBGbG9hdERpY3QgRmxvYXRMaXN0IEludERpY3QgSW50TGlzdCBKU09OQXJyYXkgSlNPTk9iamVjdCAnICtcbiAgICAgICAgJ09iamVjdCBTdHJpbmdEaWN0IFN0cmluZ0xpc3QgVGFibGUgVGFibGVSb3cgWE1MICcgK1xuICAgICAgICAvLyBKYXZhIGtleXdvcmRzXG4gICAgICAgICdmYWxzZSBzeW5jaHJvbml6ZWQgaW50IGFic3RyYWN0IGZsb2F0IHByaXZhdGUgY2hhciBib29sZWFuIHN0YXRpYyBudWxsIGlmIGNvbnN0ICcgK1xuICAgICAgICAnZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkICcgK1xuICAgICAgICAnZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBuZXcgY2F0Y2ggaW5zdGFuY2VvZiBieXRlIHN1cGVyIHZvbGF0aWxlIGNhc2UgYXNzZXJ0IHNob3J0ICcgK1xuICAgICAgICAncGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUnLFxuICAgICAgbGl0ZXJhbDogJ1AyRCBQM0QgSEFMRl9QSSBQSSBRVUFSVEVSX1BJIFRBVSBUV09fUEknLFxuICAgICAgdGl0bGU6ICdzZXR1cCBkcmF3JyxcbiAgICAgIGJ1aWx0X2luOiAnZGlzcGxheUhlaWdodCBkaXNwbGF5V2lkdGggbW91c2VZIG1vdXNlWCBtb3VzZVByZXNzZWQgcG1vdXNlWCBwbW91c2VZIGtleSAnICtcbiAgICAgICAgJ2tleUNvZGUgcGl4ZWxzIGZvY3VzZWQgZnJhbWVDb3VudCBmcmFtZVJhdGUgaGVpZ2h0IHdpZHRoICcgK1xuICAgICAgICAnc2l6ZSBjcmVhdGVHcmFwaGljcyBiZWdpbkRyYXcgY3JlYXRlU2hhcGUgbG9hZFNoYXBlIFBTaGFwZSBhcmMgZWxsaXBzZSBsaW5lIHBvaW50ICcgK1xuICAgICAgICAncXVhZCByZWN0IHRyaWFuZ2xlIGJlemllciBiZXppZXJEZXRhaWwgYmV6aWVyUG9pbnQgYmV6aWVyVGFuZ2VudCBjdXJ2ZSBjdXJ2ZURldGFpbCBjdXJ2ZVBvaW50ICcgK1xuICAgICAgICAnY3VydmVUYW5nZW50IGN1cnZlVGlnaHRuZXNzIHNoYXBlIHNoYXBlTW9kZSBiZWdpbkNvbnRvdXIgYmVnaW5TaGFwZSBiZXppZXJWZXJ0ZXggY3VydmVWZXJ0ZXggJyArXG4gICAgICAgICdlbmRDb250b3VyIGVuZFNoYXBlIHF1YWRyYXRpY1ZlcnRleCB2ZXJ0ZXggZWxsaXBzZU1vZGUgbm9TbW9vdGggcmVjdE1vZGUgc21vb3RoIHN0cm9rZUNhcCAnICtcbiAgICAgICAgJ3N0cm9rZUpvaW4gc3Ryb2tlV2VpZ2h0IG1vdXNlQ2xpY2tlZCBtb3VzZURyYWdnZWQgbW91c2VNb3ZlZCBtb3VzZVByZXNzZWQgbW91c2VSZWxlYXNlZCAnICtcbiAgICAgICAgJ21vdXNlV2hlZWwga2V5UHJlc3NlZCBrZXlQcmVzc2Vka2V5UmVsZWFzZWQga2V5VHlwZWQgcHJpbnQgcHJpbnRsbiBzYXZlIHNhdmVGcmFtZSBkYXkgaG91ciAnICtcbiAgICAgICAgJ21pbGxpcyBtaW51dGUgbW9udGggc2Vjb25kIHllYXIgYmFja2dyb3VuZCBjbGVhciBjb2xvck1vZGUgZmlsbCBub0ZpbGwgbm9TdHJva2Ugc3Ryb2tlIGFscGhhICcgK1xuICAgICAgICAnYmx1ZSBicmlnaHRuZXNzIGNvbG9yIGdyZWVuIGh1ZSBsZXJwQ29sb3IgcmVkIHNhdHVyYXRpb24gbW9kZWxYIG1vZGVsWSBtb2RlbFogc2NyZWVuWCBzY3JlZW5ZICcgK1xuICAgICAgICAnc2NyZWVuWiBhbWJpZW50IGVtaXNzaXZlIHNoaW5pbmVzcyBzcGVjdWxhciBhZGQgY3JlYXRlSW1hZ2UgYmVnaW5DYW1lcmEgY2FtZXJhIGVuZENhbWVyYSBmcnVzdHVtICcgK1xuICAgICAgICAnb3J0aG8gcGVyc3BlY3RpdmUgcHJpbnRDYW1lcmEgcHJpbnRQcm9qZWN0aW9uIGN1cnNvciBmcmFtZVJhdGUgbm9DdXJzb3IgZXhpdCBsb29wIG5vTG9vcCBwb3BTdHlsZSAnICtcbiAgICAgICAgJ3B1c2hTdHlsZSByZWRyYXcgYmluYXJ5IGJvb2xlYW4gYnl0ZSBjaGFyIGZsb2F0IGhleCBpbnQgc3RyIHVuYmluYXJ5IHVuaGV4IGpvaW4gbWF0Y2ggbWF0Y2hBbGwgbmYgJyArXG4gICAgICAgICduZmMgbmZwIG5mcyBzcGxpdCBzcGxpdFRva2VucyB0cmltIGFwcGVuZCBhcnJheUNvcHkgY29uY2F0IGV4cGFuZCByZXZlcnNlIHNob3J0ZW4gc29ydCBzcGxpY2Ugc3Vic2V0ICcgK1xuICAgICAgICAnYm94IHNwaGVyZSBzcGhlcmVEZXRhaWwgY3JlYXRlSW5wdXQgY3JlYXRlUmVhZGVyIGxvYWRCeXRlcyBsb2FkSlNPTkFycmF5IGxvYWRKU09OT2JqZWN0IGxvYWRTdHJpbmdzICcgK1xuICAgICAgICAnbG9hZFRhYmxlIGxvYWRYTUwgb3BlbiBwYXJzZVhNTCBzYXZlVGFibGUgc2VsZWN0Rm9sZGVyIHNlbGVjdElucHV0IGJlZ2luUmF3IGJlZ2luUmVjb3JkIGNyZWF0ZU91dHB1dCAnICtcbiAgICAgICAgJ2NyZWF0ZVdyaXRlciBlbmRSYXcgZW5kUmVjb3JkIFByaW50V3JpdGVyc2F2ZUJ5dGVzIHNhdmVKU09OQXJyYXkgc2F2ZUpTT05PYmplY3Qgc2F2ZVN0cmVhbSBzYXZlU3RyaW5ncyAnICtcbiAgICAgICAgJ3NhdmVYTUwgc2VsZWN0T3V0cHV0IHBvcE1hdHJpeCBwcmludE1hdHJpeCBwdXNoTWF0cml4IHJlc2V0TWF0cml4IHJvdGF0ZSByb3RhdGVYIHJvdGF0ZVkgcm90YXRlWiBzY2FsZSAnICtcbiAgICAgICAgJ3NoZWFyWCBzaGVhclkgdHJhbnNsYXRlIGFtYmllbnRMaWdodCBkaXJlY3Rpb25hbExpZ2h0IGxpZ2h0RmFsbG9mZiBsaWdodHMgbGlnaHRTcGVjdWxhciBub0xpZ2h0cyBub3JtYWwgJyArXG4gICAgICAgICdwb2ludExpZ2h0IHNwb3RMaWdodCBpbWFnZSBpbWFnZU1vZGUgbG9hZEltYWdlIG5vVGludCByZXF1ZXN0SW1hZ2UgdGludCB0ZXh0dXJlIHRleHR1cmVNb2RlIHRleHR1cmVXcmFwICcgK1xuICAgICAgICAnYmxlbmQgY29weSBmaWx0ZXIgZ2V0IGxvYWRQaXhlbHMgc2V0IHVwZGF0ZVBpeGVscyBibGVuZE1vZGUgbG9hZFNoYWRlciBQU2hhZGVycmVzZXRTaGFkZXIgc2hhZGVyIGNyZWF0ZUZvbnQgJyArXG4gICAgICAgICdsb2FkRm9udCB0ZXh0IHRleHRGb250IHRleHRBbGlnbiB0ZXh0TGVhZGluZyB0ZXh0TW9kZSB0ZXh0U2l6ZSB0ZXh0V2lkdGggdGV4dEFzY2VudCB0ZXh0RGVzY2VudCBhYnMgY2VpbCAnICtcbiAgICAgICAgJ2NvbnN0cmFpbiBkaXN0IGV4cCBmbG9vciBsZXJwIGxvZyBtYWcgbWFwIG1heCBtaW4gbm9ybSBwb3cgcm91bmQgc3Egc3FydCBhY29zIGFzaW4gYXRhbiBhdGFuMiBjb3MgZGVncmVlcyAnICtcbiAgICAgICAgJ3JhZGlhbnMgc2luIHRhbiBub2lzZSBub2lzZURldGFpbCBub2lzZVNlZWQgcmFuZG9tIHJhbmRvbUdhdXNzaWFuIHJhbmRvbVNlZWQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl9dW1xcXFxkYS16QS1aX10rXFxcXC5bXFxcXGRhLXpBLVpfXXsxLDN9JywgZW5kOiAnOicsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKG5jYWxsc3x0b3R0aW1lfGN1bXRpbWUpJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnbmNhbGxzIHRvdHRpbWV8MTAgY3VtdGltZXwxMCBmaWxlbmFtZScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnZnVuY3Rpb24gY2FsbHMnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkNfTlVNQkVSX01PREVdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJCcsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgQVRPTSA9IHtcblxuICAgIGJlZ2luOiAvW2Etel1bQS1aYS16MC05X10qLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgVkFSID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvW0EtWl1bYS16QS1aMC05X10qL30sXG4gICAgICB7YmVnaW46IC9fW0EtWmEtejAtOV9dKi99LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBBUkVOVEVEID0ge1xuXG4gICAgYmVnaW46IC9cXCgvLFxuICAgIGVuZDogL1xcKS8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIExJU1QgPSB7XG5cbiAgICBiZWdpbjogL1xcWy8sXG4gICAgZW5kOiAvXFxdL1xuICB9O1xuXG4gIHZhciBMSU5FX0NPTU1FTlQgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICBiZWdpbjogLyUvLCBlbmQ6IC8kLyxcbiAgICBjb250YWluczogW2hsanMuUEhSQVNBTF9XT1JEU19NT0RFXVxuICB9O1xuXG4gIHZhciBCQUNLVElDS19TVFJJTkcgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvYC8sIGVuZDogL2AvLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuXG4gIHZhciBDSEFSX0NPREUgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLCAvLyAwJ2EgZXRjLlxuICAgIGJlZ2luOiAvMFxcJyhcXFxcXFwnfC4pL1xuICB9O1xuXG4gIHZhciBTUEFDRV9DT0RFID0ge1xuXG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogLzBcXCdcXFxccy8gLy8gMCdcXHNcbiAgfTtcblxuICB2YXIgUFJFRF9PUCA9IHsgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBiZWdpbjogLzotL1xuICB9O1xuXG4gIHZhciBpbm5lciA9IFtcblxuICAgIEFUT00sXG4gICAgVkFSLFxuICAgIFBBUkVOVEVELFxuICAgIFBSRURfT1AsXG4gICAgTElTVCxcbiAgICBMSU5FX0NPTU1FTlQsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBCQUNLVElDS19TVFJJTkcsXG4gICAgQ0hBUl9DT0RFLFxuICAgIFNQQUNFX0NPREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gIF07XG5cbiAgUEFSRU5URUQuY29udGFpbnMgPSBpbm5lcjtcbiAgTElTVC5jb250YWlucyA9IGlubmVyO1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IGlubmVyLmNvbmNhdChbXG4gICAgICB7YmVnaW46IC9cXC4kL30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICAvLyB3aGl0ZXNwYWNlczogc3BhY2UsIHRhYiwgZm9ybWZlZWRcbiAgdmFyIFdTMCA9ICdbIFxcXFx0XFxcXGZdKic7XG4gIHZhciBXUzEgPSAnWyBcXFxcdFxcXFxmXSsnO1xuICAvLyBkZWxpbWl0ZXJcbiAgdmFyIERFTElNID0gJygnICsgV1MwKydbOj1dJytXUzArICd8JyArIFdTMSArICcpJztcbiAgdmFyIEtFWV9BTFBIQU5VTSA9ICcoW15cXFxcXFxcXFxcXFxXOj0gXFxcXHRcXFxcZlxcXFxuXXxcXFxcXFxcXC4pKyc7XG4gIHZhciBLRVlfT1RIRVIgPSAnKFteXFxcXFxcXFw6PSBcXFxcdFxcXFxmXFxcXG5dfFxcXFxcXFxcLikrJztcblxuICB2YXIgREVMSU1fQU5EX1ZBTFVFID0ge1xuICAgICAgICAgIC8vIHNraXAgREVMSU1cbiAgICAgICAgICBlbmQ6IERFTElNLFxuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIC8vIHZhbHVlOiBldmVyeXRoaW5nIHVudGlsIGVuZCBvZiBsaW5lIChhZ2FpbiwgdGFraW5nIGludG8gYWNjb3VudCBiYWNrc2xhc2hlcylcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHsgYmVnaW46ICdcXFxcXFxcXFxcXFxuJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCdeXFxcXHMqWyEjXScsICckJyksXG4gICAgICAvLyBrZXk6IGV2ZXJ5dGhpbmcgdW50aWwgd2hpdGVzcGFjZSBvciA9IG9yIDogKHRha2luZyBpbnRvIGFjY291bnQgYmFja3NsYXNoZXMpXG4gICAgICAvLyBjYXNlIG9mIGEgXCJub3JtYWxcIiBrZXlcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEtFWV9BTFBIQU5VTSArIERFTElNLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfQUxQSEFOVU0sXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2Yga2V5IGNvbnRhaW5pbmcgbm9uLWFscGhhbnVtZXJpYyBjaGFycyA9PiByZWxldmFuY2UgPSAwXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBERUxJTSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgIGJlZ2luOiBLRVlfT1RIRVIsXG4gICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IERFTElNX0FORF9WQUxVRVxuICAgICAgfSxcbiAgICAgIC8vIGNhc2Ugb2YgYW4gZW1wdHkga2V5XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGJlZ2luOiBLRVlfT1RIRVIgKyBXUzAgKyAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAncGFja2FnZSBpbXBvcnQgb3B0aW9uIG9wdGlvbmFsIHJlcXVpcmVkIHJlcGVhdGVkIGdyb3VwIG9uZW9mJyxcbiAgICAgIGJ1aWx0X2luOiAnZG91YmxlIGZsb2F0IGludDMyIGludDY0IHVpbnQzMiB1aW50NjQgc2ludDMyIHNpbnQ2NCAnICtcbiAgICAgICAgJ2ZpeGVkMzIgZml4ZWQ2NCBzZml4ZWQzMiBzZml4ZWQ2NCBib29sIHN0cmluZyBieXRlcycsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnbWVzc2FnZSBlbnVtIHNlcnZpY2UnLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAncnBjJyxcbiAgICAgICAgZW5kOiAvOy8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAncnBjIHJldHVybnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL15cXHMqW0EtWl9dKy8sXG4gICAgICAgIGVuZDogL1xccyo9LywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIFBVUFBFVF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgIC8qIGxhbmd1YWdlIGtleXdvcmRzICovXG4gICAgICAnYW5kIGNhc2UgZGVmYXVsdCBlbHNlIGVsc2lmIGZhbHNlIGlmIGluIGltcG9ydCBlbmhlcml0cyBub2RlIG9yIHRydWUgdW5kZWYgdW5sZXNzIG1haW4gc2V0dGluZ3MgJHN0cmluZyAnLFxuICAgIGxpdGVyYWw6XG4gICAgLyogbWV0YXBhcmFtZXRlcnMgKi9cbiAgICAgICdhbGlhcyBhdWRpdCBiZWZvcmUgbG9nbGV2ZWwgbm9vcCByZXF1aXJlIHN1YnNjcmliZSB0YWcgJyArXG4gICAgLyogbm9ybWFsIGF0dHJpYnV0ZXMgKi9cbiAgICAgICdvd25lciBlbnN1cmUgZ3JvdXAgbW9kZSBuYW1lfDAgY2hhbmdlcyBjb250ZXh0IGZvcmNlIGluY2wgbGVucyBsb2FkX3BhdGggb25seWlmIHByb3ZpZGVyIHJldHVybnMgcm9vdCBzaG93X2RpZmYgdHlwZV9jaGVjayAnICtcbiAgICAgICdlbl9hZGRyZXNzIGlwX2FkZHJlc3MgcmVhbG5hbWUgY29tbWFuZCBlbnZpcm9ubWVudCBob3VyIG1vbnV0ZSBtb250aCBtb250aGRheSBzcGVjaWFsIHRhcmdldCB3ZWVrZGF5ICcrXG4gICAgICAnY3JlYXRlcyBjd2Qgb2dvdXRwdXQgcmVmcmVzaCByZWZyZXNob25seSB0cmllcyB0cnlfc2xlZXAgdW1hc2sgYmFja3VwIGNoZWNrc3VtIGNvbnRlbnQgY3RpbWUgZm9yY2UgaWdub3JlICcgK1xuICAgICAgJ2xpbmtzIG10aW1lIHB1cmdlIHJlY3Vyc2UgcmVjdXJzZWxpbWl0IHJlcGxhY2Ugc2VsaW51eF9pZ25vcmVfZGVmYXVsdHMgc2VscmFuZ2Ugc2Vscm9sZSBzZWx0eXBlIHNlbHVzZXIgc291cmNlICcgK1xuICAgICAgJ3NvdWlyY2VfcGVybWlzc2lvbnMgc291cmNlc2VsZWN0IHZhbGlkYXRlX2NtZCB2YWxpZGF0ZV9yZXBsYWNlbWVudCBhbGxvd2R1cGUgYXR0cmlidXRlX21lbWJlcnNoaXAgYXV0aF9tZW1iZXJzaGlwIGZvcmNlbG9jYWwgZ2lkICcrXG4gICAgICAnaWFfbG9hZF9tb2R1bGUgbWVtYmVycyBzeXN0ZW0gaG9zdF9hbGlhc2VzIGlwIGFsbG93ZWRfdHJ1bmtfdmxhbnMgZGVzY3JpcHRpb24gZGV2aWNlX3VybCBkdXBsZXggZW5jYXBzdWxhdGlvbiBldGhlcmNoYW5uZWwgJyArXG4gICAgICAnbmF0aXZlX3ZsYW4gc3BlZWQgcHJpbmNpcGFscyBhbGxvd19yb290IGF1dGhfY2xhc3MgYXV0aF90eXBlIGF1dGhlbnRpY2F0ZV91c2VyIGtfb2ZfbiBtZWNoYW5pc21zIHJ1bGUgc2Vzc2lvbl9vd25lciBzaGFyZWQgb3B0aW9ucyAnICtcbiAgICAgICdkZXZpY2UgZnN0eXBlIGVuYWJsZSBoYXNyZXN0YXJ0IGRpcmVjdG9yeSBwcmVzZW50IGFic2VudCBsaW5rIGF0Ym9vdCBibG9ja2RldmljZSBkZXZpY2UgZHVtcCBwYXNzIHJlbW91bnRzIHBvbGxlcl90YWcgdXNlICcgK1xuICAgICAgJ21lc3NhZ2Ugd2l0aHBhdGggYWRtaW5maWxlIGFsbG93X3ZpcnR1YWwgYWxsb3djZHJvbSBjYXRlZ29yeSBjb25maWdmaWxlcyBmbGF2b3IgaW5zdGFsbF9vcHRpb25zIGluc3RhbmNlIHBhY2thZ2Vfc2V0dGluZ3MgcGxhdGZvcm0gJyArXG4gICAgICAncmVzcG9uc2VmaWxlIHN0YXR1cyB1bmluc3RhbGxfb3B0aW9ucyB2ZW5kb3IgdW5sZXNzX3N5c3RlbV91c2VyIHVubGVzc191aWQgYmluYXJ5IGNvbnRyb2wgZmxhZ3MgaGFzc3RhdHVzIG1hbmlmZXN0IHBhdHRlcm4gcmVzdGFydCBydW5uaW5nICcgK1xuICAgICAgJ3N0YXJ0IHN0b3AgYWxsb3dkdXBlIGF1dGhzIGV4cGlyeSBnaWQgZ3JvdXBzIGhvbWUgaXRlcmF0aW9ucyBrZXlfbWVtYmVyc2hpcCBrZXlzIG1hbmFnZWhvbWUgbWVtYmVyc2hpcCBwYXNzd29yZCBwYXNzd29yZF9tYXhfYWdlICcgK1xuICAgICAgJ3Bhc3N3b3JkX21pbl9hZ2UgcHJvZmlsZV9tZW1iZXJzaGlwIHByb2ZpbGVzIHByb2plY3QgcHVyZ2Vfc3NoX2tleXMgcm9sZV9tZW1iZXJzaGlwIHJvbGVzIHNhbHQgc2hlbGwgdWlkIGJhc2V1cmwgY29zdCBkZXNjciBlbmFibGVkICcgK1xuICAgICAgJ2VuYWJsZWdyb3VwcyBleGNsdWRlIGZhaWxvdmVybWV0aG9kIGdwZ2NoZWNrIGdwZ2tleSBodHRwX2NhY2hpbmcgaW5jbHVkZSBpbmNsdWRlcGtncyBrZWVwYWxpdmUgbWV0YWRhdGFfZXhwaXJlIG1ldGFsaW5rIG1pcnJvcmxpc3QgJyArXG4gICAgICAncHJpb3JpdHkgcHJvdGVjdCBwcm94eSBwcm94eV9wYXNzd29yZCBwcm94eV91c2VybmFtZSByZXBvX2dwZ2NoZWNrIHMzX2VuYWJsZWQgc2tpcF9pZl91bmF2YWlsYWJsZSBzc2xjYWNlcnQgc3NsY2xpZW50Y2VydCBzc2xjbGllbnRrZXkgJyArXG4gICAgICAnc3NsdmVyaWZ5IG1vdW50ZWQnLFxuICAgIGJ1aWx0X2luOlxuICAgIC8qIGNvcmUgZmFjdHMgKi9cbiAgICAgICdhcmNoaXRlY3R1cmUgYXVnZWFzdmVyc2lvbiBibG9ja2RldmljZXMgYm9hcmRtYW51ZmFjdHVyZXIgYm9hcmRwcm9kdWN0bmFtZSBib2FyZHNlcmlhbG51bWJlciBjZmtleSBkaGNwX3NlcnZlcnMgJyArXG4gICAgICAnZG9tYWluIGVjMl8gZWMyX3VzZXJkYXRhIGZhY3RlcnZlcnNpb24gZmlsZXN5c3RlbXMgbGRvbSBmcWRuIGdpZCBoYXJkd2FyZWlzYSBoYXJkd2FyZW1vZGVsIGhvc3RuYW1lIGlkfDAgaW50ZXJmYWNlcyAnK1xuICAgICAgJ2lwYWRkcmVzcyBpcGFkZHJlc3NfIGlwYWRkcmVzczYgaXBhZGRyZXNzNl8gaXBob3N0bnVtYmVyIGlzX3ZpcnR1YWwga2VybmVsIGtlcm5lbG1hanZlcnNpb24ga2VybmVscmVsZWFzZSBrZXJuZWx2ZXJzaW9uICcgK1xuICAgICAgJ2tlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiBsc2JkaXN0Y29kZW5hbWUgbHNiZGlzdGRlc2NyaXB0aW9uIGxzYmRpc3RpZCBsc2JkaXN0cmVsZWFzZSBsc2JtYWpkaXN0cmVsZWFzZSBsc2JtaW5vcmRpc3RyZWxlYXNlICcgK1xuICAgICAgJ2xzYnJlbGVhc2UgbWFjYWRkcmVzcyBtYWNhZGRyZXNzXyBtYWNvc3hfYnVpbGR2ZXJzaW9uIG1hY29zeF9wcm9kdWN0bmFtZSBtYWNvc3hfcHJvZHVjdHZlcnNpb24gbWFjb3N4X3Byb2R1Y3R2ZXJzb25fbWFqb3IgJyArXG4gICAgICAnbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uX21pbm9yIG1hbnVmYWN0dXJlciBtZW1vcnlmcmVlIG1lbW9yeXNpemUgbmV0bWFzayBtZXRtYXNrXyBuZXR3b3JrXyBvcGVyYXRpbmdzeXN0ZW0gb3BlcmF0aW5nc3lzdGVtbWFqcmVsZWFzZSAnK1xuICAgICAgJ29wZXJhdGluZ3N5c3RlbXJlbGVhc2Ugb3NmYW1pbHkgcGFydGl0aW9ucyBwYXRoIHBoeXNpY2FscHJvY2Vzc29yY291bnQgcHJvY2Vzc29yIHByb2Nlc3NvcmNvdW50IHByb2R1Y3RuYW1lIHBzIHB1cHBldHZlcnNpb24gJytcbiAgICAgICdydWJ5c2l0ZWRpciBydWJ5dmVyc2lvbiBzZWxpbnV4IHNlbGludXhfY29uZmlnX21vZGUgc2VsaW51eF9jb25maWdfcG9saWN5IHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfZW5mb3JjZWQgJytcbiAgICAgICdzZWxpbnV4X3BvbGljeXZlcnNpb24gc2VyaWFsbnVtYmVyIHNwXyBzc2hkc2FrZXkgc3NoZWNkc2FrZXkgc3NocnNha2V5IHN3YXBlbmNyeXB0ZWQgc3dhcGZyZWUgc3dhcHNpemUgdGltZXpvbmUgdHlwZSB1bmlxdWVpZCB1cHRpbWUgJytcbiAgICAgICd1cHRpbWVfZGF5cyB1cHRpbWVfaG91cnMgdXB0aW1lX3NlY29uZHMgdXVpZCB2aXJ0dWFsIHZsYW5zIHhlbmRvbWFpbnMgemZzX3ZlcnNpb24gem9uZW5hZSB6b25lcyB6cG9vbF92ZXJzaW9uJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcblxuICB2YXIgSURFTlRfUkUgPSAnKFtBLVphLXpfXXw6OikoXFxcXHd8OjopKic7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBJREVOVF9SRX0pO1xuXG4gIHZhciBWQVJJQUJMRSA9IHtjbGFzc05hbWU6ICd2YXJpYWJsZScsIGJlZ2luOiAnXFxcXCQnICsgSURFTlRfUkV9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEVdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99LFxuICAgICAge2JlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwcCddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsIGVuZDogJ1xcXFx7fDsnLFxuICAgICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICAgIGNvbnRhaW5zOiBbVElUTEUsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJywgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJywgYmVnaW46IGhsanMuSURFTlRfUkUsIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzK1xcXFx7JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHsvLCBlbmQ6IC9cXH0vLFxuICAgICAgICAgICAga2V5d29yZHM6IFBVUFBFVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOidbYS16QS1aX10rXFxcXHMqPT4nLFxuICAgICAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCBlbmQ6ICc9PicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFZBUklBQkxFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSAvLyBCYXNlIGRlYWZ1bHQgY29sb3JzIGluIFBCIElERTogYmFja2dyb3VuZDogI0ZGRkZERjsgZm9yZWdyb3VuZDogIzAwMDAwMDtcblxuZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjMDA4MEZGIChBenVyZSBSYWRpYW5jZSlcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnKH4pP1wiJywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjOTI0QjcyIChDYW5ub24gUGluaylcbiAgICAvLyAgXCIjXCIgKyBhIGxldHRlciBvciB1bmRlcnNjb3JlICsgbGV0dGVycywgZGlnaXRzIG9yIHVuZGVyc2NvcmVzICsgKG9wdGlvbmFsKSBcIiRcIlxuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjW2EtekEtWl9dXFxcXHcqXFxcXCQ/J1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwYicsICdwYmknXSxcbiAgICBrZXl3b3JkczogLy8gUEIgSURFIGNvbG9yOiAjMDA2NjY2IChCbHVlIFN0b25lKSArIEJvbGRcbiAgICAgIC8vIEtleXdvcmRzIGZyb20gYWxsIHZlcnNpb24gb2YgUHVyZUJBU0lDIDUuMDAgdXB3YXJkIC4uLlxuICAgICAgJ0FsaWduIEFuZCBBcnJheSBBcyBCcmVhayBDYWxsRGVidWdnZXIgQ2FzZSBDb21waWxlckNhc2UgQ29tcGlsZXJEZWZhdWx0ICcgK1xuICAgICAgJ0NvbXBpbGVyRWxzZSBDb21waWxlckVsc2VJZiBDb21waWxlckVuZElmIENvbXBpbGVyRW5kU2VsZWN0IENvbXBpbGVyRXJyb3IgJyArXG4gICAgICAnQ29tcGlsZXJJZiBDb21waWxlclNlbGVjdCBDb21waWxlcldhcm5pbmcgQ29udGludWUgRGF0YSBEYXRhU2VjdGlvbiBEZWJ1ZyAnICtcbiAgICAgICdEZWJ1Z0xldmVsIERlY2xhcmUgRGVjbGFyZUMgRGVjbGFyZUNETEwgRGVjbGFyZURMTCBEZWNsYXJlTW9kdWxlIERlZmF1bHQgJyArXG4gICAgICAnRGVmaW5lIERpbSBEaXNhYmxlQVNNIERpc2FibGVEZWJ1Z2dlciBEaXNhYmxlRXhwbGljaXQgRWxzZSBFbHNlSWYgRW5hYmxlQVNNICcgK1xuICAgICAgJ0VuYWJsZURlYnVnZ2VyIEVuYWJsZUV4cGxpY2l0IEVuZCBFbmREYXRhU2VjdGlvbiBFbmREZWNsYXJlTW9kdWxlIEVuZEVudW1lcmF0aW9uICcgK1xuICAgICAgJ0VuZElmIEVuZEltcG9ydCBFbmRJbnRlcmZhY2UgRW5kTWFjcm8gRW5kTW9kdWxlIEVuZFByb2NlZHVyZSBFbmRTZWxlY3QgJyArXG4gICAgICAnRW5kU3RydWN0dXJlIEVuZFN0cnVjdHVyZVVuaW9uIEVuZFdpdGggRW51bWVyYXRpb24gRW51bWVyYXRpb25CaW5hcnkgRXh0ZW5kcyAnICtcbiAgICAgICdGYWtlUmV0dXJuIEZvciBGb3JFYWNoIEZvckV2ZXIgR2xvYmFsIEdvc3ViIEdvdG8gSWYgSW1wb3J0IEltcG9ydEMgJyArXG4gICAgICAnSW5jbHVkZUJpbmFyeSBJbmNsdWRlRmlsZSBJbmNsdWRlUGF0aCBJbnRlcmZhY2UgTGlzdCBNYWNybyBNYWNyb0V4cGFuZGVkQ291bnQgJyArXG4gICAgICAnTWFwIE1vZHVsZSBOZXdMaXN0IE5ld01hcCBOZXh0IE5vdCBPciBQcm9jZWR1cmUgUHJvY2VkdXJlQyAnICtcbiAgICAgICdQcm9jZWR1cmVDRExMIFByb2NlZHVyZURMTCBQcm9jZWR1cmVSZXR1cm4gUHJvdGVjdGVkIFByb3RvdHlwZSBQcm90b3R5cGVDIFJlRGltICcgK1xuICAgICAgJ1JlYWQgUmVwZWF0IFJlc3RvcmUgUmV0dXJuIFJ1bnRpbWUgU2VsZWN0IFNoYXJlZCBTdGF0aWMgU3RlcCBTdHJ1Y3R1cmUgJyArXG4gICAgICAnU3RydWN0dXJlVW5pb24gU3dhcCBUaHJlYWRlZCBUbyBVbmRlZmluZU1hY3JvIFVudGlsIFVudGlsICBVbnVzZU1vZHVsZSAnICtcbiAgICAgICdVc2VNb2R1bGUgV2VuZCBXaGlsZSBXaXRoIFhJbmNsdWRlRmlsZSBYT3InLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBDT01NRU5UUyB8IFBCIElERSBjb2xvcjogIzAwQUFBQSAoUGVyc2lhbiBHcmVlbilcbiAgICAgIGhsanMuQ09NTUVOVCgnOycsICckJywge3JlbGV2YW5jZTogMH0pLFxuXG4gICAgICB7IC8vIFBST0NFRFVSRVMgREVGSU5JVElPTlNcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT9cXFxcYicsXG4gICAgICAgIGVuZDogJ1xcXFwoJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyBQUk9DRURVUkUgS0VZV09SRFMgfCBQQiBJREUgY29sb3I6ICMwMDY2NjYgKEJsdWUgU3RvbmUpICsgQm9sZFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJyhQcm9jZWR1cmV8RGVjbGFyZSkoQ3xDRExMfERMTCk/JyxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gUFJPQ0VEVVJFIFJFVFVSTiBUWVBFIFNFVFRJTkcgfCBQQiBJREUgY29sb3I6ICMwMDAwMDAgKEJsYWNrKVxuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwuXFxcXHcqJ1xuICAgICAgICAgICAgLy8gZW5kOiAnICcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSAvLyBQUk9DRURVUkUgTkFNRSB8IFBCIElERSBjb2xvcjogIzAwNjY2NiAoQmx1ZSBTdG9uZSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklOR1MsXG4gICAgICBDT05TVEFOVFNcbiAgICBdXG4gIH07XG59XG5cbi8qICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hBTkdFTE9HXG4gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLSB2LjEuMiAoMjAxNy0wNS0xMilcbiAgICAgICAgLS0gQlVHLUZJWDogU29tZSBrZXl3b3JkcyB3ZXJlIGFjY2lkZW50YWxseSBqb3luZWQgdG9nZXRoZXIuIE5vdyBmaXhlZC5cbiAgICAtIHYuMS4xICgyMDE3LTA0LTMwKVxuICAgICAgICAtLSBVcGRhdGVkIHRvIFB1cmVCQVNJQyA1LjYwLlxuICAgICAgICAtLSBLZXl3b3JkcyBsaXN0IG5vdyBidWlsdCBieSBleHRyYWN0aW5nIHRoZW0gZnJvbSB0aGUgUHVyZUJBU0lDIFNESydzXG4gICAgICAgICAgIFwiU3ludGF4SGlsaWdodGluZy5kbGxcIiAoZnJvbSBlYWNoIFB1cmVCQVNJQyB2ZXJzaW9uKS4gVG9rZW5zIGZyb20gZWFjaFxuICAgICAgICAgICB2ZXJzaW9uIGFyZSBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIHJlbmFtZWQgb3IgcmVtb3ZlZCB0b2tlbnMgYXJlIGtlcHRcbiAgICAgICAgICAgZm9yIHRoZSBzYWtlIG9mIGNvdmVyaW5nIGFsbCB2ZXJzaW9ucyBvZiB0aGUgbGFuZ3VhZ2UgZnJvbSBQdXJlQkFTSUNcbiAgICAgICAgICAgdjUuMDAgdXB3YXJkLiAoTk9URTogY3VycmVudGx5LCB0aGVyZSBhcmUgbm8gcmVuYW1lZCBvciBkZXByZWNhdGVkXG4gICAgICAgICAgIHRva2VucyBpbiB0aGUga2V5d29yZHMgbGlzdCkuIEZvciBtb3JlIGluZm8sIHNlZTpcbiAgICAgICAgICAgLS0gaHR0cDovL3d3dy5wdXJlYmFzaWMuZnIvZW5nbGlzaC92aWV3dG9waWMucGhwPyZwPTUwNjI2OVxuICAgICAgICAgICAtLSBodHRwczovL2dpdGh1Yi5jb20vdGFqbW9uZS9wdXJlYmFzaWMtYXJjaGl2ZXMvdHJlZS9tYXN0ZXIvc3ludGF4LWhpZ2hsaWdodGluZy9ndWlkZWxpbmVzXG4gICAgLSB2LjEuMCAoQXByaWwgMjAxNilcbiAgICAgICAgLS0gRmlyc3QgcmVsZWFzZVxuICAgICAgICAtLSBLZXl3b3JkcyBsaXN0IHRha2VuIGFuZCBhZGFwdGVkIGZyb20gR3VTaEgncyAoR3VzdGF2byBKdWxpbyBGaW9yZW56YSlcbiAgICAgICAgICAgUHVyZUJhc2ljIGxhbmd1YWdlIGZpbGUgZm9yIEdlU0hpOlxuICAgICAgICAgICAtLSBodHRwczovL2dpdGh1Yi5jb20vZWFzeWJvb2svZ2VzaGkvYmxvYi9tYXN0ZXIvZ2VzaGkvcHVyZWJhc2ljLnBocFxuKi87IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2FuZCBlbGlmIGlzIGdsb2JhbCBhcyBpbiBpZiBmcm9tIHJhaXNlIGZvciBleGNlcHQgZmluYWxseSBwcmludCBpbXBvcnQgcGFzcyByZXR1cm4gJyArXG4gICAgICAnZXhlYyBlbHNlIGJyZWFrIG5vdCB3aXRoIGNsYXNzIGFzc2VydCB5aWVsZCB0cnkgd2hpbGUgY29udGludWUgZGVsIG9yIGRlZiBsYW1iZGEgJyArXG4gICAgICAnYXN5bmMgYXdhaXQgbm9ubG9jYWx8MTAnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ0VsbGlwc2lzIE5vdEltcGxlbWVudGVkJyxcbiAgICBsaXRlcmFsOiAnRmFsc2UgTm9uZSBUcnVlJ1xuICB9O1xuICB2YXIgUFJPTVBUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLCAgYmVnaW46IC9eKD4+PnxcXC5cXC5cXC4pIC9cbiAgfTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcey8sIGVuZDogL1xcfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC8jL1xuICB9O1xuICB2YXIgTElURVJBTF9CUkFDS0VUID0ge1xuICAgIGJlZ2luOiAvXFx7XFx7LyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fGIpP3I/JycnLywgZW5kOiAvJycnLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFBST01QVF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBUXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZiknJycvLCBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBULCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZilcIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgUFJPTVBULCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKScvLCBlbmQ6IC8nLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxyfHVyKVwiLywgZW5kOiAvXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKScvLCBlbmQ6IC8nL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oYnxicilcIi8sIGVuZDogL1wiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZiknLywgZW5kOiAvJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBMSVRFUkFMX0JSQUNLRVQsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZilcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIExJVEVSQUxfQlJBQ0tFVCwgU1VCU1RdXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLCByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogaGxqcy5CSU5BUllfTlVNQkVSX1JFICsgJ1tsTGpKXT8nfSxcbiAgICAgIHtiZWdpbjogJ1xcXFxiKDBvWzAtN10rKVtsTGpKXT8nfSxcbiAgICAgIHtiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdbbExqSl0/J31cbiAgICBdXG4gIH07XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFsnc2VsZicsIFBST01QVCwgTlVNQkVSLCBTVFJJTkcsIGhsanMuSEFTSF9DT01NRU5UX01PREVdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1NUUklORywgTlVNQkVSLCBQUk9NUFRdO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncHknLCAnZ3lwJywgJ2lweXRob24nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyg8XFwvfC0+fFxcPyl8PT4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUk9NUFQsXG4gICAgICBOVU1CRVIsXG4gICAgICAvLyBlYXQgXCJpZlwiIHByaW9yIHRvIHN0cmluZyBzbyB0aGF0IGl0IHdvbid0IGFjY2lkZW50YWxseSBiZVxuICAgICAgLy8gbGFiZWxlZCBhcyBhbiBmLXN0cmluZyBhcyBpbjpcbiAgICAgIHsgYmVnaW5LZXl3b3JkczogXCJpZlwiLCByZWxldmFuY2U6IDAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2NsYXNzTmFtZTogJ2Z1bmN0aW9uJywgYmVnaW5LZXl3b3JkczogJ2RlZid9LFxuICAgICAgICAgIHtjbGFzc05hbWU6ICdjbGFzcycsIGJlZ2luS2V5d29yZHM6ICdjbGFzcyd9XG4gICAgICAgIF0sXG4gICAgICAgIGVuZDogLzovLFxuICAgICAgICBpbGxlZ2FsOiAvWyR7PTtcXG4sXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAvLT4vLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiAnTm9uZSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15bXFx0IF0qQC8sIGVuZDogLyQvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcYihwcmludHxleGVjKVxcKC8gLy8gZG9u4oCZdCBoaWdobGlnaHQga2V5d29yZHMtdHVybmVkLWZ1bmN0aW9ucyBpbiBQeXRob24gM1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBRX0tFWVdPUkRTID0ge1xuICBrZXl3b3JkOlxuICAgICdkbyB3aGlsZSBzZWxlY3QgZGVsZXRlIGJ5IHVwZGF0ZSBmcm9tJyxcbiAgbGl0ZXJhbDpcbiAgICAnMGIgMWInLFxuICBidWlsdF9pbjpcbiAgICAnbmVnIG5vdCBudWxsIHN0cmluZyByZWNpcHJvY2FsIGZsb29yIGNlaWxpbmcgc2lnbnVtIG1vZCB4YmFyIHhsb2cgYW5kIG9yIGVhY2ggc2NhbiBvdmVyIHByaW9yIG1tdSBsc3EgaW52IG1kNSBsdGltZSBndGltZSBjb3VudCBmaXJzdCB2YXIgZGV2IG1lZCBjb3YgY29yIGFsbCBhbnkgcmFuZCBzdW1zIHByZHMgbWlucyBtYXhzIGZpbGxzIGRlbHRhcyByYXRpb3MgYXZncyBkaWZmZXIgcHJldiBuZXh0IHJhbmsgcmV2ZXJzZSBpYXNjIGlkZXNjIGFzYyBkZXNjIG1zdW0gbWNvdW50IG1hdmcgbWRldiB4cmFuayBtbWluIG1tYXggeHByZXYgcm90YXRlIGRpc3RpbmN0IGdyb3VwIHdoZXJlIGZsaXAgdHlwZSBrZXkgdGlsIGdldCB2YWx1ZSBhdHRyIGN1dCBzZXQgdXBzZXJ0IHJhemUgdW5pb24gaW50ZXIgZXhjZXB0IGNyb3NzIHN2IHZzIHN1Ymxpc3QgZW5saXN0IHJlYWQwIHJlYWQxIGhvcGVuIGhjbG9zZSBoZGVsIGhzeW0gaGNvdW50IHBlYWNoIHN5c3RlbSBsdHJpbSBydHJpbSB0cmltIGxvd2VyIHVwcGVyIHNzciB2aWV3IHRhYmxlcyB2aWV3cyBjb2xzIHhjb2xzIGtleXMgeGtleSB4Y29sIHhhc2MgeGRlc2MgZmtleXMgbWV0YSBsaiBhaiBhajAgaWogcGogYXNvZiB1aiB3dyB3aiB3ajEgZmJ5IHhncm91cCB1bmdyb3VwIGVqIHNhdmUgbG9hZCByc2F2ZSBybG9hZCBzaG93IGNzdiBwYXJzZSBldmFsIG1pbiBtYXggYXZnIHdhdmcgd3N1bSBzaW4gY29zIHRhbiBzdW0nLFxuICB0eXBlOlxuICAgICdgZmxvYXQgYGRvdWJsZSBpbnQgYHRpbWVzdGFtcCBgdGltZXNwYW4gYGRhdGV0aW1lIGB0aW1lIGBib29sZWFuIGBzeW1ib2wgYGNoYXIgYGJ5dGUgYHNob3J0IGBsb25nIGByZWFsIGBtb250aCBgZGF0ZSBgbWludXRlIGBzZWNvbmQgYGd1aWQnXG4gIH07XG4gIHJldHVybiB7XG4gIGFsaWFzZXM6WydrJywgJ2tkYiddLFxuICBrZXl3b3JkczogUV9LRVlXT1JEUyxcbiAgbGV4ZW1lczogLyhgPylbQS1aYS16MC05X10rXFxiLyxcbiAgY29udGFpbnM6IFtcbiAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpbiBvZiBvbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggJyArXG4gICAgICAgICdpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlICcgK1xuICAgICAgICAnbGV0IHlpZWxkIGNvbnN0IGV4cG9ydCBzdXBlciBkZWJ1Z2dlciBhcyBhc3luYyBhd2FpdCBpbXBvcnQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5JyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnZXZhbCBpc0Zpbml0ZSBpc05hTiBwYXJzZUZsb2F0IHBhcnNlSW50IGRlY29kZVVSSSBkZWNvZGVVUklDb21wb25lbnQgJyArXG4gICAgICAgICdlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciAnICtcbiAgICAgICAgJ0V2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciAnICtcbiAgICAgICAgJ1R5cGVFcnJvciBVUklFcnJvciBOdW1iZXIgTWF0aCBEYXRlIFN0cmluZyBSZWdFeHAgQXJyYXkgRmxvYXQzMkFycmF5ICcgK1xuICAgICAgICAnRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgJyArXG4gICAgICAgICdVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSAnICtcbiAgICAgICAgJ21vZHVsZSBjb25zb2xlIHdpbmRvdyBkb2N1bWVudCBTeW1ib2wgU2V0IE1hcCBXZWFrU2V0IFdlYWtNYXAgUHJveHkgUmVmbGVjdCAnICtcbiAgICAgICAgJ0JlaGF2aW9yIGJvb2wgY29sb3IgY29vcmRpbmF0ZSBkYXRlIGRvdWJsZSBlbnVtZXJhdGlvbiBmb250IGdlb2NpcmNsZSBnZW9yZWN0YW5nbGUgJyArXG4gICAgICAgICdnZW9zaGFwZSBpbnQgbGlzdCBtYXRyaXg0eDQgcGFyZW50IHBvaW50IHF1YXRlcm5pb24gcmVhbCByZWN0ICcgK1xuICAgICAgICAnc2l6ZSBzdHJpbmcgdXJsIHZhcmlhbnQgdmVjdG9yMmQgdmVjdG9yM2QgdmVjdG9yNGQnICtcbiAgICAgICAgJ1Byb21pc2UnXG4gICAgfTtcblxuICB2YXIgUU1MX0lERU5UX1JFID0gJ1thLXpBLVpfXVthLXpBLVowLTlcXFxcLl9dKic7XG5cbiAgLy8gSXNvbGF0ZSBwcm9wZXJ0eSBzdGF0ZW1lbnRzLiBFbmRzIGF0IGEgOiwgPSwgOywgLCwgYSBjb21tZW50IG9yIGVuZCBvZiBsaW5lLlxuICAvLyBVc2UgcHJvcGVydHkgY2xhc3MuXG4gIHZhciBQUk9QRVJUWSA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46ICdcXFxcYnByb3BlcnR5XFxcXGInLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGVuZDogJyg6fD18O3wsfC8vfC9cXFxcKnwkKScsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIElzb2xhdGUgc2lnbmFsIHN0YXRlbWVudHMuIEVuZHMgYXQgYSApIGEgY29tbWVudCBvciBlbmQgb2YgbGluZS5cbiAgLy8gVXNlIHByb3BlcnR5IGNsYXNzLlxuICB2YXIgU0lHTkFMID0ge1xuICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICBiZWdpbjogJ1xcXFxic2lnbmFsXFxcXGInLFxuICAgICAgc3RhcnRzOiB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGVuZDogJyhcXFxcKHw6fD18O3wsfC8vfC9cXFxcKnwkKScsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIGlkOiBpcyBzcGVjaWFsIGluIFFNTC4gV2hlbiB3ZSBzZWUgaWQ6IHdlIHdhbnQgdG8gbWFyayB0aGUgaWQ6IGFzIGF0dHJpYnV0ZSBhbmRcbiAgLy8gZW1waGFzaXplIHRoZSB0b2tlbiBmb2xsb3dpbmcuXG4gIHZhciBJRF9JRCA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICBiZWdpbjogJ1xcXFxiaWRcXFxccyo6JyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBlbmQ6IFFNTF9JREVOVF9SRSxcbiAgICAgICAgcmV0dXJuRW5kOiBmYWxzZVxuICAgICAgfVxuICB9O1xuXG4gIC8vIEZpbmQgUU1MIG9iamVjdCBhdHRyaWJ1dGUuIEFuIGF0dHJpYnV0ZSBpcyBhIFFNTCBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IDouXG4gIC8vIFVuZm9ydHVuYXRlbHkgaXQncyBoYXJkIHRvIGtub3cgd2hlcmUgaXQgZW5kcywgYXMgaXQgbWF5IGNvbnRhaW4gc2NhbGFycyxcbiAgLy8gb2JqZWN0cywgb2JqZWN0IGRlZmluaXRpb25zLCBvciBqYXZhc2NyaXB0LiBUaGUgdHJ1ZSBlbmQgaXMgZWl0aGVyIHdoZW4gdGhlIHBhcmVudFxuICAvLyBlbmRzIG9yIHRoZSBuZXh0IGF0dHJpYnV0ZSBpcyBkZXRlY3RlZC5cbiAgdmFyIFFNTF9BVFRSSUJVVEUgPSB7XG4gICAgYmVnaW46IFFNTF9JREVOVF9SRSArICdcXFxccyo6JyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogUU1MX0lERU5UX1JFLFxuICAgICAgICBlbmQ6ICdcXFxccyo6JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvLyBGaW5kIFFNTCBvYmplY3QuIEEgUU1MIG9iamVjdCBpcyBhIFFNTCBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IHsgYW5kIGVuZHMgYXQgdGhlIG1hdGNoaW5nIH0uXG4gIC8vIEFsbCB3ZSByZWFsbHkgY2FyZSBhYm91dCBpcyBmaW5kaW5nIElERU5UIGZvbGxvd2VkIGJ5IHsgYW5kIGp1c3QgbWFyayB1cCB0aGUgSURFTlQgYW5kIGlnbm9yZSB0aGUgey5cbiAgdmFyIFFNTF9PQkpFQ1QgPSB7XG4gICAgYmVnaW46IFFNTF9JREVOVF9SRSArICdcXFxccyp7JywgZW5kOiAneycsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IFFNTF9JREVOVF9SRX0pXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydxdCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eXFxzKlsnXCJddXNlIChzdHJpY3R8YXNtKVsnXCJdL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7IC8vIHRlbXBsYXRlIHN0cmluZ1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7JywgZW5kOiAnXFxcXH0nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoMFtiQl1bMDFdKyknIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbb09dWzAtN10rKScgfSxcbiAgICAgICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvLyBcInZhbHVlXCIgY29udGFpbmVyXG4gICAgICAgIGJlZ2luOiAnKCcgKyBobGpzLlJFX1NUQVJURVJTX1JFICsgJ3xcXFxcYihjYXNlfHJldHVybnx0aHJvdylcXFxcYilcXFxccyonLFxuICAgICAgICBrZXl3b3JkczogJ3JldHVybiB0aHJvdyBjYXNlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgICAgIHsgLy8gRTRYIC8gSlNYXG4gICAgICAgICAgICBiZWdpbjogLzwvLCBlbmQ6IC8+XFxzKlspO1xcXV0vLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBTSUdOQUwsXG4gICAgICBQUk9QRVJUWSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogL1xcW3wlL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcLicgKyBobGpzLklERU5UX1JFLCByZWxldmFuY2U6IDAgLy8gaGFjazogcHJldmVudHMgZGV0ZWN0aW9uIG9mIGtleXdvcmRzIGFmdGVyIGRvdHNcbiAgICAgIH0sXG4gICAgICBJRF9JRCxcbiAgICAgIFFNTF9BVFRSSUJVVEUsXG4gICAgICBRTUxfT0JKRUNUXG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvIy9cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICcoW2EtekEtWl18XFxcXC5bYS16QS1aLl0pW2EtekEtWjAtOS5fXSonO1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBJREVOVF9SRSxcbiAgICAgICAgbGV4ZW1lczogSURFTlRfUkUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAga2V5d29yZDpcbiAgICAgICAgICAgICdmdW5jdGlvbiBpZiBpbiBicmVhayBuZXh0IHJlcGVhdCBlbHNlIGZvciByZXR1cm4gc3dpdGNoIHdoaWxlIHRyeSB0cnlDYXRjaCAnICtcbiAgICAgICAgICAgICdzdG9wIHdhcm5pbmcgcmVxdWlyZSBsaWJyYXJ5IGF0dGFjaCBkZXRhY2ggc291cmNlIHNldE1ldGhvZCBzZXRHZW5lcmljICcgK1xuICAgICAgICAgICAgJ3NldEdyb3VwR2VuZXJpYyBzZXRDbGFzcyAuLi4nLFxuICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAnTlVMTCBOQSBUUlVFIEZBTFNFIFQgRiBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwIE5BX2NoYXJhY3Rlcl98MTAgJyArXG4gICAgICAgICAgICAnTkFfY29tcGxleF98MTAnXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gaGV4IHZhbHVlXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGV4cGxpY2l0IGludGVnZXJcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGQrKD86W2VFXVsrXFxcXC1dP1xcXFxkKik/TFxcXFxiXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyIHdpdGggdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcZCtcXFxcLig/IVxcXFxkKSg/OmlcXFxcYik/XCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFxkKyg/OlxcXFwuXFxcXGQqKT8oPzpbZUVdWytcXFxcLV0/XFxcXGQqKT9pP1xcXFxiXCIsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gbnVtYmVyIHdpdGggbGVhZGluZyBkZWNpbWFsXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFwuXFxcXGQrKD86W2VFXVsrXFxcXC1dP1xcXFxkKik/aT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgLy8gZXNjYXBlZCBpZGVudGlmaWVyXG4gICAgICAgIGJlZ2luOiAnYCcsXG4gICAgICAgIGVuZDogJ2AnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ1wiJywgZW5kOiAnXCInfSxcbiAgICAgICAgICB7YmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wifVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgZnVuY3Rpb24gb3JSZVZhbHVlcyhvcHMpe1xuICAgIHJldHVybiBvcHNcbiAgICAubWFwKGZ1bmN0aW9uKG9wKSB7XG4gICAgICByZXR1cm4gb3BcbiAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAubWFwKGZ1bmN0aW9uKGNoYXIpIHtcbiAgICAgICAgICByZXR1cm4gJ1xcXFwnICsgY2hhcjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpO1xuICAgIH0pXG4gICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIHZhciBSRV9JREVOVCA9ICd+P1thLXokX11bMC05YS16QS1aJF9dKic7XG4gIHZhciBSRV9NT0RVTEVfSURFTlQgPSAnYD9bQS1aJF9dWzAtOWEtekEtWiRfXSonO1xuXG4gIHZhciBSRV9QQVJBTV9UWVBFUEFSQU0gPSAnXFwnP1thLXokX11bMC05YS16JF9dKic7XG4gIHZhciBSRV9QQVJBTV9UWVBFID0gJ1xccyo6XFxzKlthLXokX11bMC05YS16JF9dKihcXChcXHMqKCcgKyBSRV9QQVJBTV9UWVBFUEFSQU0gKyAnXFxzKigsJyArIFJFX1BBUkFNX1RZUEVQQVJBTSArICcpKik/XFxzKlxcKSk/JztcbiAgdmFyIFJFX1BBUkFNID0gUkVfSURFTlQgKyAnKCcgKyBSRV9QQVJBTV9UWVBFICsgJyk/KCcgKyBSRV9QQVJBTV9UWVBFICsgJyk/JztcbiAgdmFyIFJFX09QRVJBVE9SID0gXCIoXCIgKyBvclJlVmFsdWVzKFsnfHwnLCAnJiYnLCAnKysnLCAnKionLCAnKy4nLCAnKicsICcvJywgJyouJywgJy8uJywgJy4uLicsICd8PiddKSArIFwifD09fD09PSlcIjtcbiAgdmFyIFJFX09QRVJBVE9SX1NQQUNFRCA9IFwiXFxcXHMrXCIgKyBSRV9PUEVSQVRPUiArIFwiXFxcXHMrXCI7XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYW5kIGFzIGFzciBhc3NlcnQgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuYWwnICtcbiAgICAgICdmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSBpbmhlcml0IGluaXRpYWxpemVyJyArXG4gICAgICAnbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCBtb2QgbW9kdWxlIG11dGFibGUgbmV3IG5vbnJlYycgK1xuICAgICAgJ29iamVjdCBvZiBvcGVuIG9yIHByaXZhdGUgcmVjIHNpZyBzdHJ1Y3QgdGhlbiB0byB0cnkgdHlwZSB2YWwgdmlydHVhbCB3aGVuIHdoaWxlIHdpdGgnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FycmF5IGJvb2wgYnl0ZXMgY2hhciBleG58NSBmbG9hdCBpbnQgaW50MzIgaW50NjQgbGlzdCBsYXp5X3R8NSBuYXRpdmVpbnR8NSByZWYgc3RyaW5nIHVuaXQgJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UnXG4gIH07XG5cbiAgdmFyIFJFX05VTUJFUiA9ICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJztcblxuICB2YXIgTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFJFX05VTUJFUlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcKFxcXFwtJyArIFJFX05VTUJFUiArICdcXFxcKSdcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE9QRVJBVE9SX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnb3BlcmF0b3InLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBiZWdpbjogUkVfT1BFUkFUT1JcbiAgfTtcbiAgdmFyIExJU1RfQ09OVEVOVFNfTU9ERVMgPSBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBiZWdpbjogUkVfSURFTlRcbiAgICB9LFxuICAgIE9QRVJBVE9SX01PREUsXG4gICAgTlVNQkVSX01PREVcbiAgXTtcblxuICB2YXIgTU9EVUxFX0FDQ0VTU19DT05URU5UUyA9IFtcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE9QRVJBVE9SX01PREUsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbW9kdWxlJyxcbiAgICAgIGJlZ2luOiBcIlxcXFxiXCIgKyBSRV9NT0RVTEVfSURFTlQsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgZW5kOiBcIlxcLlwiLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2lkZW50aWZpZXInLFxuICAgICAgICAgIGJlZ2luOiBSRV9NT0RVTEVfSURFTlQsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgdmFyIFBBUkFNU19DT05URU5UUyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdtb2R1bGUnLFxuICAgICAgYmVnaW46IFwiXFxcXGJcIiArIFJFX01PRFVMRV9JREVOVCwgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICBlbmQ6IFwiXFwuXCIsXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnaWRlbnRpZmllcicsXG4gICAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVCxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgXTtcblxuICB2YXIgUEFSQU1TX01PREUgPSB7XG4gICAgYmVnaW46IFJFX0lERU5ULFxuICAgIGVuZDogJygsfFxcXFxufFxcXFwpKScsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBpbmcnLFxuICAgICAgICBiZWdpbjogJzonLFxuICAgICAgICBlbmQ6ICcoLHxcXFxcbiknLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRFTlRTXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9CTE9DS19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHMoXFxcXChcXFxcLj8uKj9cXFxcKXwnICsgUkVfSURFTlQgKyAnKVxcXFxzKj0+JyxcbiAgICAgICAgZW5kOiAnXFxcXHMqPT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46IFJFX0lERU5UXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogUkVfUEFSQU1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHNcXFxcKFxcXFwuP1teO1xcXFx8XSpcXFxcKVxcXFxzKj0+JyxcbiAgICAgICAgZW5kOiAnXFxcXHM9PicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIFBBUkFNU19NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoXFxcXC5cXFxccycgKyBSRV9JREVOVCArICdcXFxcKVxcXFxzKj0+J1xuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgTU9EVUxFX0FDQ0VTU19DT05URU5UUy5wdXNoKEZVTkNUSU9OX0JMT0NLX01PREUpO1xuXG4gIHZhciBDT05TVFJVQ1RPUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICBiZWdpbjogUkVfTU9EVUxFX0lERU5UICsgJ1xcXFwoJyxcbiAgICBlbmQ6ICdcXFxcKScsXG4gICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiJyArIFJFX0lERU5UXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBQQVRURVJOX01BVENIX0JMT0NLX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncGF0dGVybi1tYXRjaCcsXG4gICAgYmVnaW46ICdcXFxcfCcsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGVuZDogJz0+JyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICBPUEVSQVRPUl9NT0RFLFxuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNsYXNzTmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX01PRFVMRV9JREVOVFxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTU9EVUxFX0FDQ0VTU19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ21vZHVsZS1hY2Nlc3MnLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCJcXFxcYihcIiArIFJFX01PRFVMRV9JREVOVCArIFwiXFxcXC4pK1wiICsgUkVfSURFTlRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBcIlxcXFxiKFwiICsgUkVfTU9EVUxFX0lERU5UICsgXCJcXFxcLikrXFxcXChcIixcbiAgICAgICAgZW5kOiBcIlxcXFwpXCIsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIEZVTkNUSU9OX0JMT0NLX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChNT0RVTEVfQUNDRVNTX0NPTlRFTlRTKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXFxcXGIoXCIgKyBSRV9NT0RVTEVfSURFTlQgKyBcIlxcXFwuKSt7XCIsXG4gICAgICAgIGVuZDogXCJ9XCJcbiAgICAgIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBNT0RVTEVfQUNDRVNTX0NPTlRFTlRTXG4gIH07XG5cbiAgUEFSQU1TX0NPTlRFTlRTLnB1c2goTU9EVUxFX0FDQ0VTU19NT0RFKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncmUnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJyg6XFxcXC18Oj18XFxcXCR7fFxcXFwrPSknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7IGlsbGVnYWw6ICdeKFxcXFwjLFxcXFwvXFxcXC8pJyB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2hhcmFjdGVyJyxcbiAgICAgICAgYmVnaW46ICdcXCcoXFxcXFxcXFxbXlxcJ10rfFteXFwnXSlcXCcnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKFxcXFwpJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcW1xcXFx8JyxcbiAgICAgICAgZW5kOiAnXFxcXHxcXFxcXScsXG4gICAgICAgIHJlbGV2YW5jZTogIDAsXG4gICAgICAgIGNvbnRhaW5zOiBMSVNUX0NPTlRFTlRTX01PREVTXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogTElTVF9DT05URU5UU19NT0RFU1xuICAgICAgfSxcbiAgICAgIENPTlNUUlVDVE9SX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ29wZXJhdG9yJyxcbiAgICAgICAgYmVnaW46IFJFX09QRVJBVE9SX1NQQUNFRCxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFwtXFxcXC0+JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBQQVRURVJOX01BVENIX0JMT0NLX01PREUsXG4gICAgICBGVU5DVElPTl9CTE9DS19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtb2R1bGUtZGVmJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGJtb2R1bGVcXFxccytcIiArIFJFX0lERU5UICsgXCJcXFxccytcIiArIFJFX01PRFVMRV9JREVOVCArIFwiXFxcXHMrPVxcXFxzK3tcIixcbiAgICAgICAgZW5kOiBcIn1cIixcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21vZHVsZScsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBiZWdpbjogUkVfTU9EVUxFX0lERU5UXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ3snLFxuICAgICAgICAgICAgZW5kOiAnfScsXG4gICAgICAgICAgICBza2lwOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdLmNvbmNhdChNT0RVTEVfQUNDRVNTX0NPTlRFTlRTKVxuICAgICAgfSxcbiAgICAgIE1PRFVMRV9BQ0NFU1NfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnQXJjaGl2ZVJlY29yZCBBcmVhTGlnaHRTb3VyY2UgQXRtb3NwaGVyZSBBdHRyaWJ1dGUgQXR0cmlidXRlQmVnaW4gQXR0cmlidXRlRW5kIEJhc2lzICcgK1xuICAgICAgJ0JlZ2luIEJsb2JieSBCb3VuZCBDbGlwcGluZyBDbGlwcGluZ1BsYW5lIENvbG9yIENvbG9yU2FtcGxlcyBDb25jYXRUcmFuc2Zvcm0gQ29uZSAnICtcbiAgICAgICdDb29yZGluYXRlU3lzdGVtIENvb3JkU3lzVHJhbnNmb3JtIENyb3BXaW5kb3cgQ3VydmVzIEN5bGluZGVyIERlcHRoT2ZGaWVsZCBEZXRhaWwgJyArXG4gICAgICAnRGV0YWlsUmFuZ2UgRGlzayBEaXNwbGFjZW1lbnQgRGlzcGxheSBFbmQgRXJyb3JIYW5kbGVyIEV4cG9zdXJlIEV4dGVyaW9yIEZvcm1hdCAnICtcbiAgICAgICdGcmFtZUFzcGVjdFJhdGlvIEZyYW1lQmVnaW4gRnJhbWVFbmQgR2VuZXJhbFBvbHlnb24gR2VvbWV0cmljQXBwcm94aW1hdGlvbiBHZW9tZXRyeSAnICtcbiAgICAgICdIaWRlciBIeXBlcmJvbG9pZCBJZGVudGl0eSBJbGx1bWluYXRlIEltYWdlciBJbnRlcmlvciBMaWdodFNvdXJjZSAnICtcbiAgICAgICdNYWtlQ3ViZUZhY2VFbnZpcm9ubWVudCBNYWtlTGF0TG9uZ0Vudmlyb25tZW50IE1ha2VTaGFkb3cgTWFrZVRleHR1cmUgTWF0dGUgJyArXG4gICAgICAnTW90aW9uQmVnaW4gTW90aW9uRW5kIE51UGF0Y2ggT2JqZWN0QmVnaW4gT2JqZWN0RW5kIE9iamVjdEluc3RhbmNlIE9wYWNpdHkgT3B0aW9uICcgK1xuICAgICAgJ09yaWVudGF0aW9uIFBhcmFib2xvaWQgUGF0Y2ggUGF0Y2hNZXNoIFBlcnNwZWN0aXZlIFBpeGVsRmlsdGVyIFBpeGVsU2FtcGxlcyAnICtcbiAgICAgICdQaXhlbFZhcmlhbmNlIFBvaW50cyBQb2ludHNHZW5lcmFsUG9seWdvbnMgUG9pbnRzUG9seWdvbnMgUG9seWdvbiBQcm9jZWR1cmFsIFByb2plY3Rpb24gJyArXG4gICAgICAnUXVhbnRpemUgUmVhZEFyY2hpdmUgUmVsYXRpdmVEZXRhaWwgUmV2ZXJzZU9yaWVudGF0aW9uIFJvdGF0ZSBTY2FsZSBTY3JlZW5XaW5kb3cgJyArXG4gICAgICAnU2hhZGluZ0ludGVycG9sYXRpb24gU2hhZGluZ1JhdGUgU2h1dHRlciBTaWRlcyBTa2V3IFNvbGlkQmVnaW4gU29saWRFbmQgU3BoZXJlICcgK1xuICAgICAgJ1N1YmRpdmlzaW9uTWVzaCBTdXJmYWNlIFRleHR1cmVDb29yZGluYXRlcyBUb3J1cyBUcmFuc2Zvcm0gVHJhbnNmb3JtQmVnaW4gVHJhbnNmb3JtRW5kICcgK1xuICAgICAgJ1RyYW5zZm9ybVBvaW50cyBUcmFuc2xhdGUgVHJpbUN1cnZlIFdvcmxkQmVnaW4gV29ybGRFbmQnLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIElERU5USUZJRVIgPSAnW2EtekEtWi1fXVteXFxcXG57XStcXFxceyc7XG5cbiAgdmFyIFBST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46IC9bYS16QS1aLV9dKy8sIGVuZDogL1xccyo6LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJzsnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICBiZWdpbjogL1xcLlthLXpBLVotX10rL1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgYmVnaW46IC9cXChvcHRpb25hbFxcKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ3JhcGgnLCAnaW5zdGFuY2VzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2ltcG9ydCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIEZhY2V0IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXmZhY2V0ICcgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAga2V5d29yZHM6ICdmYWNldCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnN0YW5jZSBzZWN0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyppbnN0YW5jZSBvZiAnICsgSURFTlRJRklFUixcbiAgICAgICAgZW5kOiAnfScsXG4gICAgICAgIGtleXdvcmRzOiAnbmFtZSBjb3VudCBjaGFubmVscyBpbnN0YW5jZS1kYXRhIGluc3RhbmNlLXN0YXRlIGluc3RhbmNlIG9mJyxcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIFBST1BFUlRZLFxuICAgICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gQ29tcG9uZW50IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXicgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQUk9QRVJUWSxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIENvbW1lbnRzXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IC8vIENvbG9ycyBmcm9tIFJvdXRlck9TIHRlcm1pbmFsOlxuLy8gICBncmVlbiAgICAgICAgLSAjMEU5QTAwXG4vLyAgIHRlYWwgICAgICAgICAtICMwQzlBOUFcbi8vICAgcHVycGxlICAgICAgIC0gIzk5MDY5QVxuLy8gICBsaWdodC1icm93biAgLSAjOUE5OTAwXG5cbmZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgU1RBVEVNRU5UUyA9ICdmb3JlYWNoIGRvIHdoaWxlIGZvciBpZiBmcm9tIHRvIHN0ZXAgZWxzZSBvbi1lcnJvciBhbmQgb3Igbm90IGluJztcblxuICAvLyBHbG9iYWwgY29tbWFuZHM6IEV2ZXJ5IGdsb2JhbCBjb21tYW5kIHNob3VsZCBzdGFydCB3aXRoIFwiOlwiIHRva2VuLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIHZhcmlhYmxlLlxuICB2YXIgR0xPQkFMX0NPTU1BTkRTID0gJ2dsb2JhbCBsb2NhbCBiZWVwIGRlbGF5IHB1dCBsZW4gdHlwZW9mIHBpY2sgbG9nIHRpbWUgc2V0IGZpbmQgZW52aXJvbm1lbnQgdGVybWluYWwgZXJyb3IgZXhlY3V0ZSBwYXJzZSByZXNvbHZlIHRvYXJyYXkgdG9ib29sIHRvaWQgdG9pcCB0b2lwNiB0b251bSB0b3N0ciB0b3RpbWUnO1xuXG4gIC8vIENvbW1vbiBjb21tYW5kczogRm9sbG93aW5nIGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIG1vc3Qgc3ViLW1lbnVzOlxuICB2YXIgQ09NTU9OX0NPTU1BTkRTID0gJ2FkZCByZW1vdmUgZW5hYmxlIGRpc2FibGUgc2V0IGdldCBwcmludCBleHBvcnQgZWRpdCBmaW5kIHJ1biBkZWJ1ZyBlcnJvciBpbmZvIHdhcm5pbmcnO1xuXG4gIHZhciBMSVRFUkFMUyA9ICd0cnVlIGZhbHNlIHllcyBubyBub3RoaW5nIG5pbCBudWxsJztcblxuICB2YXIgT0JKRUNUUyA9ICd0cmFmZmljLWZsb3cgdHJhZmZpYy1nZW5lcmF0b3IgZmlyZXdhbGwgc2NoZWR1bGVyIGFhYSBhY2NvdW50aW5nIGFkZHJlc3MtbGlzdCBhZGRyZXNzIGFsaWduIGFyZWEgYmFuZHdpZHRoLXNlcnZlciBiZmQgYmdwIGJyaWRnZSBjbGllbnQgY2xvY2sgY29tbXVuaXR5IGNvbmZpZyBjb25uZWN0aW9uIGNvbnNvbGUgY3VzdG9tZXIgZGVmYXVsdCBkaGNwLWNsaWVudCBkaGNwLXNlcnZlciBkaXNjb3ZlcnkgZG5zIGUtbWFpbCBldGhlcm5ldCBmaWx0ZXIgZmlyZXdhbGwgZmlybXdhcmUgZ3BzIGdyYXBoaW5nIGdyb3VwIGhhcmR3YXJlIGhlYWx0aCBob3RzcG90IGlkZW50aXR5IGlnbXAtcHJveHkgaW5jb21pbmcgaW5zdGFuY2UgaW50ZXJmYWNlIGlwIGlwc2VjIGlwdjYgaXJxIGwydHAtc2VydmVyIGxjZCBsZHAgbG9nZ2luZyBtYWMtc2VydmVyIG1hYy13aW5ib3ggbWFuZ2xlIG1hbnVhbCBtaXJyb3IgbW1lIG1wbHMgbmF0IG5kIG5laWdoYm9yIG5ldHdvcmsgbm90ZSBudHAgb3NwZiBvc3BmLXYzIG92cG4tc2VydmVyIHBhZ2UgcGVlciBwaW0gcGluZyBwb2xpY3kgcG9vbCBwb3J0IHBwcCBwcHBvZS1jbGllbnQgcHB0cC1zZXJ2ZXIgcHJlZml4IHByb2ZpbGUgcHJvcG9zYWwgcHJveHkgcXVldWUgcmFkaXVzIHJlc291cmNlIHJpcCByaXBuZyByb3V0ZSByb3V0aW5nIHNjcmVlbiBzY3JpcHQgc2VjdXJpdHktcHJvZmlsZXMgc2VydmVyIHNlcnZpY2Ugc2VydmljZS1wb3J0IHNldHRpbmdzIHNoYXJlcyBzbWIgc21zIHNuaWZmZXIgc25tcCBzbm9vcGVyIHNvY2tzIHNzdHAtc2VydmVyIHN5c3RlbSB0b29sIHRyYWNraW5nIHR5cGUgdXBncmFkZSB1cG5wIHVzZXItbWFuYWdlciB1c2VycyB1c2VyIHZsYW4gc2VjcmV0IHZycnAgd2F0Y2hkb2cgd2ViLWFjY2VzcyB3aXJlbGVzcyBwcHRwIHBwcG9lIGxhbiB3YW4gbGF5ZXI3LXByb3RvY29sIGxlYXNlIHNpbXBsZSByYXcnO1xuXG4gIC8vIHByaW50IHBhcmFtZXRlcnNcbiAgLy8gU2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgZm9yIHByaW50IGNvbW1hbmQ6XG4gIC8vIFRvRG86IHZhciBQQVJBTUVURVJTX1BSSU5UID0gJ2FwcGVuZCBhcy12YWx1ZSBicmllZiBkZXRhaWwgY291bnQtb25seSBmaWxlIGZvbGxvdyBmb2xsb3ctb25seSBmcm9tIGludGVydmFsIHRlcnNlIHZhbHVlLWxpc3Qgd2l0aG91dC1wYWdpbmcgd2hlcmUgaW5mbyc7XG4gIC8vIFRvRG86IHZhciBPUEVSQVRPUlMgPSAnJiYgYW5kICEgbm90IHx8IG9yIGluIH4gXiAmIDw8ID4+ICsgLSAqIC8nO1xuICAvLyBUb0RvOiB2YXIgVFlQRVMgPSAnbnVtIG51bWJlciBib29sIGJvb2xlYW4gc3RyIHN0cmluZyBpcCBpcDYtcHJlZml4IGlkIHRpbWUgYXJyYXknO1xuICAvLyBUb0RvOiBUaGUgZm9sbG93aW5nIHRva2VucyBzZXJ2ZSBhcyBkZWxpbWl0ZXJzIGluIHRoZSBncmFtbWFyOiAoKSAgW10gIHt9ICA6ICAgOyAgICQgICAvXG5cbiAgdmFyIFZBUl9QUkVGSVggPSAnZ2xvYmFsIGxvY2FsIHNldCBmb3IgZm9yZWFjaCc7XG5cbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcblxuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBUE9TX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gIH07XG5cbiAgdmFyIElQQUREUiA9ICcoKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7M30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxcXGInO1xuICB2YXIgSVBBRERSX3dCSVRNQVNLID0gIElQQUREUisnLygzWzAtMl18WzEtMl1bMC05XXxcXFxcZCknO1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydyb3V0ZXJvcycsICdtaWtyb3RpayddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogLzo/W1xcdy1dKy8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAga2V5d29yZDogU1RBVEVNRU5UUyArICcgOicgKyBTVEFURU1FTlRTLnNwbGl0KCcgJykuam9pbignIDonKSArICcgOicgKyBHTE9CQUxfQ09NTUFORFMuc3BsaXQoJyAnKS5qb2luKCcgOicpLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgLy8g0L3QtdC00L7Qv9GD0YHRgtC40LzRi9C1INC60L7QvdGB0YLRgNGD0LrRhtC40LhcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAvXkAvLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgICAvLyBkbnNcbiAgICAgICAgICB7IGJlZ2luOiAvXFwvXFwqLywgZW5kOiAvXFwqXFwvLywgfSwgICAgICAgICAgLy8gLS0gY29tbWVudFxuICAgICAgICAgIHsgYmVnaW46IC8lJS8sIGVuZDogLyQvLCB9LCAgICAgICAgICAgICAgIC8vIC0tIGNvbW1lbnRcbiAgICAgICAgICB7IGJlZ2luOiAvXicvLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgICAvLyBNb25rZXkgb25lIGxpbmUgY29tbWVudFxuICAgICAgICAgIHsgYmVnaW46IC9eXFxzKlxcL1tcXHctXSs9LywgZW5kOiAvJC8sIH0sICAgIC8vIGpib3NzLWNsaVxuICAgICAgICAgIHsgYmVnaW46IC9cXC9cXC8vLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgLy8gU3RhbiBjb21tZW50XG4gICAgICAgICAgeyBiZWdpbjogL15cXFtcXDwvLCBlbmQ6IC9cXD5cXF0kLywgfSwgICAgICAgIC8vIEYjIGNsYXNzIGRlY2xhcmF0aW9uP1xuICAgICAgICAgIHsgYmVnaW46IC88XFwvLywgZW5kOiAvPi8sIH0sICAgICAgICAgICAgICAvLyBIVE1MIHRhZ3NcbiAgICAgICAgICB7IGJlZ2luOiAvXmZhY2V0IC8sIGVuZDogL1xcfS8sIH0sICAgICAgICAgLy8gcm9ib2NvbmYgLSDQu9GO0YLRi9C5INC60L7RgdGC0YvQu9GMICkpKVxuICAgICAgICAgIHsgYmVnaW46ICdeMVxcXFwuXFxcXC4oXFxcXGQrKSQnLCBlbmQ6IC8kLywgfSwgIC8vIHRhcFxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvLi8sXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeIycsICckJyksXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUixcbiAgICAgIHsgLy8gYXR0cmlidXRlPXZhbHVlXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dK1xcPShbXlxcc1xce1xcfVxcW1xcXVxcKFxcKV0rKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW149XSsvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLz0vLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6ICB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgUVVPVEVfU1RSSU5HLFxuICAgICAgICAgICAgICBBUE9TX1NUUklORyxcbiAgICAgICAgICAgICAgVkFSLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYignICsgTElURVJBTFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxiJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgLyp7XG4gICAgICAgICAgICAgICAgLy8gSVB2NCBhZGRyZXNzZXMgYW5kIHN1Ym5ldHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7YmVnaW46IElQQUREUl93QklUTUFTSysnKCwnK0lQQUREUl93QklUTUFTSysnKSonfSwgLy8xOTIuMTY4LjAuMC8yNCwxLjIuMy4wLzI0XG4gICAgICAgICAgICAgICAgICB7YmVnaW46IElQQUREUisnLScrSVBBRERSfSwgICAgICAgLy8gMTkyLjE2OC4wLjEtMTkyLjE2OC4wLjNcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSKycoLCcrSVBBRERSKycpKid9LCAvLyAxOTIuMTY4LjAuMSwxOTIuMTY4LjAuMzQsMTkyLjE2OC4yNC4xLDE5Mi4xNjguMC4xXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LCAvLyAqL1xuICAgICAgICAgICAgICAvKntcbiAgICAgICAgICAgICAgICAvLyBNQUMgYWRkcmVzc2VzIGFuZCBESENQIENsaWVudCBJRHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxiKDE6KT8oWzAtOUEtRmEtZl17MSwyfVs6LV0pezV9KFswLTlBLUZhLWZdKXsxLDJ9XFxiLyxcbiAgICAgICAgICAgICAgfSwgLy8qL1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8g0J3QtSDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0YLRjCDQvdC1INC60LvQsNGB0YHQuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQtSDQt9C90LDRh9C10L3QuNGPLiDQndC10L7QsdGF0L7QtNC40LzQviDQtNC70Y8g0LjRgdC60LvRjtGH0LXQvdC40Y8g0L/QvtC00YHQstC10YLQutC4INC30L3QsNGH0LXQvdC40Lkg0LrQsNC6IGJ1aWx0X2luLlxuICAgICAgICAgICAgICAgIC8vIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46IC8oXCJbXlwiXSpcInxbXlxcc1xce1xcfVxcW1xcXV0rKS8sXG4gICAgICAgICAgICAgIH0sIC8vKi9cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9IC8vKi9cbiAgICAgICAgXVxuICAgICAgfSwvLyovXG4gICAgICB7XG4gICAgICAgIC8vIEhFWCB2YWx1ZXNcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IC9cXCpbMC05YS1mQS1GXSsvLFxuICAgICAgfSwgLy8qL1xuXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIENPTU1PTl9DT01NQU5EUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpKFtcXFxcc1xcW1xcKF18XFxdKScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0aW4tbmFtZScsIC8vJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyhcXFxcLlxcXFwuL3wvfFxcXFxzKSgoJyArIE9CSkVDVFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKTs/XFxcXHMpKycscmVsZXZhbmNlOiAxMCx9LFxuICAgICAgICAgIHtiZWdpbjogL1xcLlxcLi8sfSxcbiAgICAgICAgXSxcbiAgICAgIH0sLy8qL1xuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdmbG9hdCBjb2xvciBwb2ludCBub3JtYWwgdmVjdG9yIG1hdHJpeCB3aGlsZSBmb3IgaWYgZG8gcmV0dXJuIGVsc2UgYnJlYWsgZXh0ZXJuIGNvbnRpbnVlJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYWJzIGFjb3MgYW1iaWVudCBhcmVhIGFzaW4gYXRhbiBhdG1vc3BoZXJlIGF0dHJpYnV0ZSBjYWxjdWxhdGVub3JtYWwgY2VpbCBjZWxsbm9pc2UgJyArXG4gICAgICAgICdjbGFtcCBjb21wIGNvbmNhdCBjb3MgZGVncmVlcyBkZXB0aCBEZXJpdiBkaWZmdXNlIGRpc3RhbmNlIER1IER2IGVudmlyb25tZW50IGV4cCAnICtcbiAgICAgICAgJ2ZhY2Vmb3J3YXJkIGZpbHRlcnN0ZXAgZmxvb3IgZm9ybWF0IGZyZXNuZWwgaW5jaWRlbnQgbGVuZ3RoIGxpZ2h0c291cmNlIGxvZyBtYXRjaCAnICtcbiAgICAgICAgJ21heCBtaW4gbW9kIG5vaXNlIG5vcm1hbGl6ZSBudHJhbnNmb3JtIG9wcG9zaXRlIG9wdGlvbiBwaG9uZyBwbm9pc2UgcG93IHByaW50ZiAnICtcbiAgICAgICAgJ3B0bGluZWQgcmFkaWFucyByYW5kb20gcmVmbGVjdCByZWZyYWN0IHJlbmRlcmluZm8gcm91bmQgc2V0Y29tcCBzZXR4Y29tcCBzZXR5Y29tcCAnICtcbiAgICAgICAgJ3NldHpjb21wIHNoYWRvdyBzaWduIHNpbiBzbW9vdGhzdGVwIHNwZWN1bGFyIHNwZWN1bGFyYnJkZiBzcGxpbmUgc3FydCBzdGVwIHRhbiAnICtcbiAgICAgICAgJ3RleHR1cmUgdGV4dHVyZWluZm8gdHJhY2UgdHJhbnNmb3JtIHZ0cmFuc2Zvcm0geGNvbXAgeWNvbXAgemNvbXAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIycsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdXJmYWNlIGRpc3BsYWNlbWVudCBsaWdodCB2b2x1bWUgaW1hZ2VyJywgZW5kOiAnXFxcXCgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaWxsdW1pbmF0ZSBpbGx1bWluYW5jZSBnYXRoZXInLCBlbmQ6ICdcXFxcKCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICAga2V5d29yZDogJ0JJTExfUEVSSU9EIEJJTExfU1RBUlQgQklMTF9TVE9QIFJTX0VGRkVDVElWRV9TVEFSVCBSU19FRkZFQ1RJVkVfU1RPUCBSU19KVVJJU19DT0RFIFJTX09QQ09fQ09ERSAnICtcbiAgICAgICAgICdJTlREQUREQVRUUklCVVRFfDUgSU5UREFERFZNU0d8NSBJTlREQkxPQ0tPUHw1IElOVERCTE9DS09QTkF8NSBJTlREQ0xPU0V8NSBJTlREQ09VTlR8NSAnICtcbiAgICAgICAgICdJTlREQ09VTlRTVEFUVVNDT0RFfDUgSU5URENSRUFURU1BU0t8NSBJTlREQ1JFQVRFREFZTUFTS3w1IElOVERDUkVBVEVGQUNUT1JNQVNLfDUgJyArXG4gICAgICAgICAnSU5URENSRUFURUhBTkRMRXw1IElOVERDUkVBVEVPVkVSUklERURBWU1BU0t8NSBJTlREQ1JFQVRFT1ZFUlJJREVNQVNLfDUgJyArXG4gICAgICAgICAnSU5URENSRUFURVNUQVRVU0NPREVNQVNLfDUgSU5URENSRUFURVRPVVBFUklPRHw1IElOVERERUxFVEV8NSBJTlRERElQVEVTVHw1IElOVERFWFBPUlR8NSAnICtcbiAgICAgICAgICdJTlRER0VURVJST1JDT0RFfDUgSU5UREdFVEVSUk9STUVTU0FHRXw1IElOVERJU0VRVUFMfDUgSU5UREpPSU58NSBJTlRETE9BRHw1IElOVERMT0FEQUNUVUFMQ1VUfDUgJyArXG4gICAgICAgICAnSU5URExPQUREQVRFU3w1IElOVERMT0FESElTVHw1IElOVERMT0FETElTVHw1IElOVERMT0FETElTVERBVEVTfDUgSU5URExPQURMSVNURU5FUkdZfDUgJyArXG4gICAgICAgICAnSU5URExPQURMSVNUSElTVHw1IElOVERMT0FEUkVMQVRFRENIQU5ORUx8NSBJTlRETE9BRFNQfDUgSU5URExPQURTVEFHSU5HfDUgSU5URExPQURVT018NSAnICtcbiAgICAgICAgICdJTlRETE9BRFVPTURBVEVTfDUgSU5URExPQURVT01ISVNUfDUgSU5URExPQURWRVJTSU9OfDUgSU5URE9QRU58NSBJTlREUkVBREZJUlNUfDUgSU5URFJFQURORVhUfDUgJyArXG4gICAgICAgICAnSU5URFJFQ0NPVU5UfDUgSU5URFJFTEVBU0V8NSBJTlREUkVQTEFDRXw1IElOVERST0xMQVZHfDUgSU5URFJPTExQRUFLfDUgSU5URFNDQUxBUk9QfDUgSU5URFNDQUxFfDUgJyArXG4gICAgICAgICAnSU5URFNFVEFUVFJJQlVURXw1IElOVERTRVREU1RQQVJUSUNJUEFOVHw1IElOVERTRVRTVFJJTkd8NSBJTlREU0VUVkFMVUV8NSBJTlREU0VUVkFMVUVTVEFUVVN8NSAnICtcbiAgICAgICAgICdJTlREU0hJRlRTVEFSVFRJTUV8NSBJTlREU01PT1RIfDUgSU5URFNPUlR8NSBJTlREU1BJS0VURVNUfDUgSU5URFNVQlNFVHw1IElOVERUT1V8NSAnICtcbiAgICAgICAgICdJTlREVE9VUkVMRUFTRXw1IElOVERUT1VWQUxVRXw1IElOVERVUERBVEVTVEFUU3w1IElOVERWQUxVRXw1IFNUREVWIElOVERERUxFVEVFWHw1ICcgK1xuICAgICAgICAgJ0lOVERMT0FERVhBQ1RVQUx8NSBJTlRETE9BREVYQ1VUfDUgSU5URExPQURFWERBVEVTfDUgSU5URExPQURFWHw1IElOVERMT0FERVhSRUxBVEVEQ0hBTk5FTHw1ICcgK1xuICAgICAgICAgJ0lOVERTQVZFRVh8NSBNVkxPQUR8NSBNVkxPQURBQ0NUfDUgTVZMT0FEQUNDVERBVEVTfDUgTVZMT0FEQUNDVEhJU1R8NSBNVkxPQUREQVRFU3w1IE1WTE9BREhJU1R8NSAnICtcbiAgICAgICAgICdNVkxPQURMSVNUfDUgTVZMT0FETElTVERBVEVTfDUgTVZMT0FETElTVEhJU1R8NSBJRiBGT1IgTkVYVCBET05FIFNFTEVDVCBFTkQgQ0FMTCBBQk9SVCBDTEVBUiBDSEFOTkVMIEZBQ1RPUiBMSVNUIE5VTUJFUiAnICtcbiAgICAgICAgICdPVkVSUklERSBTRVQgV0VFSyBESVNUUklCVVRJT05OT0RFIEVMU0UgV0hFTiBUSEVOIE9USEVSV0lTRSBJRU5VTSBDU1YgSU5DTFVERSBMRUFWRSBSSURFUiBTQVZFIERFTEVURSAnICtcbiAgICAgICAgICdOT1ZBTFVFIFNFQ1RJT04gV0FSTiBTQVZFX1VQREFURSBERVRFUk1JTkFOVCBMQUJFTCBSRVBPUlQgUkVWRU5VRSBFQUNIICcgK1xuICAgICAgICAgJ0lOIEZST00gVE9UQUwgQ0hBUkdFIEJMT0NLIEFORCBPUiBDU1ZfRklMRSBSQVRFX0NPREUgQVVYSUxJQVJZX0RFTUFORCAnICtcbiAgICAgICAgICdVSURBQ0NPVU5UIFJTIEJJTExfUEVSSU9EX1NFTEVDVCBIT1VSU19QRVJfTU9OVEggSU5URF9FUlJPUl9TVE9QIFNFQVNPTl9TQ0hFRFVMRV9OQU1FICcgK1xuICAgICAgICAgJ0FDQ09VTlRGQUNUT1IgQVJSQVlVUFBFUkJPVU5EIENBTExTVE9SRURQUk9DIEdFVEFET0NPTk5FQ1RJT04gR0VUQ09OTkVDVCBHRVREQVRBU09VUkNFICcgK1xuICAgICAgICAgJ0dFVFFVQUxJRklFUiBHRVRVU0VSSUQgSEFTVkFMVUUgTElTVENPVU5UIExJU1RPUCBMSVNUVVBEQVRFIExJU1RWQUxVRSBQUk9SQVRFRkFDVE9SIFJTUFJPUkFURSAnICtcbiAgICAgICAgICdTRVRCSU5QQVRIIFNFVERCTU9OSVRPUiBXUV9PUEVOIEJJTExJTkdIT1VSUyBEQVRFIERBVEVGUk9NRkxPQVQgREFURVRJTUVGUk9NU1RSSU5HICcgK1xuICAgICAgICAgJ0RBVEVUSU1FVE9TVFJJTkcgREFURVRPRkxPQVQgREFZIERBWURJRkYgREFZTkFNRSBEQkRBVEVUSU1FIEhPVVIgTUlOVVRFIE1PTlRIIE1PTlRIRElGRiAnICtcbiAgICAgICAgICdNT05USEhPVVJTIE1PTlRITkFNRSBST1VORERBVEUgU0FNRVdFRUtEQVlMQVNUWUVBUiBTRUNPTkQgV0VFS0RBWSBXRUVLRElGRiBZRUFSIFlFQVJEQVkgJyArXG4gICAgICAgICAnWUVBUlNUUiBDT01QU1VNIEhJU1RDT1VOVCBISVNUTUFYIEhJU1RNSU4gSElTVE1JTk5aIEhJU1RWQUxVRSBNQVhOUkFOR0UgTUFYUkFOR0UgTUlOUkFOR0UgJyArXG4gICAgICAgICAnQ09NUElLVkEgQ09NUEtWQSBDT01QS1ZBUkZST01LUUtXIENPTVBMRiBJREFUVFIgRkxBRyBMRjJLVyBMRjJLV0ggTUFYS1cgUE9XRVJGQUNUT1IgJyArXG4gICAgICAgICAnUkVBRElORzJVU0FHRSBBVkdTRUFTT04gTUFYU0VBU09OIE1PTlRITFlNRVJHRSBTRUFTT05WQUxVRSBTVU1TRUFTT04gQUNDVFJFQUREQVRFUyAnICtcbiAgICAgICAgICdBQ0NUVEFCTEVMT0FEIENPTkZJR0FERCBDT05GSUdHRVQgQ1JFQVRFT0JKRUNUIENSRUFURVJFUE9SVCBFTUFJTENMSUVOVCBFWFBCTEtNRE1VU0FHRSAnICtcbiAgICAgICAgICdFWFBNRE1VU0FHRSBFWFBPUlRfVVNBR0UgRkFDVE9SSU5FRkZFQ1QgR0VUVVNFUlNQRUNJRklFRFNUT1AgSU5FRkZFQ1QgSVNIT0xJREFZIFJVTlJBVEUgJyArXG4gICAgICAgICAnU0FWRV9QUk9GSUxFIFNFVFJFUE9SVFRJVExFIFVTRVJFWElUIFdBVEZPUlJVTlJBVEUgVE8gVEFCTEUgQUNPUyBBU0lOIEFUQU4gQVRBTjIgQklUQU5EIENFSUwgJyArXG4gICAgICAgICAnQ09TIENPU0VDQU5UIENPU0ggQ09UQU5HRU5UIERJVlFVT1QgRElWUkVNIEVYUCBGQUJTIEZMT09SIEZNT0QgRlJFUE0gRlJFWFBOIExPRyBMT0cxMCBNQVggTUFYTiAnICtcbiAgICAgICAgICdNSU4gTUlOTlogTU9ERiBQT1cgUk9VTkQgUk9VTkQyVkFMVUUgUk9VTkRJTlQgU0VDQU5UIFNJTiBTSU5IIFNRUk9PVCBUQU4gVEFOSCBGTE9BVDJTVFJJTkcgJyArXG4gICAgICAgICAnRkxPQVQyU1RSSU5HTkMgSU5TVFIgTEVGVCBMRU4gTFRSSU0gTUlEIFJJR0hUIFJUUklNIFNUUklORyBTVFJJTkdOQyBUT0xPV0VSIFRPVVBQRVIgVFJJTSAnICtcbiAgICAgICAgICdOVU1EQVlTIFJFQURfREFURSBTVEFHSU5HJyxcbiAgICAgICBidWlsdF9pbjogJ0lERU5USUZJRVIgT1BUSU9OUyBYTUxfRUxFTUVOVCBYTUxfT1AgWE1MX0VMRU1FTlRfT0YgRE9NRE9DQ1JFQVRFIERPTURPQ0xPQURGSUxFIERPTURPQ0xPQURYTUwgJyArXG4gICAgICAgICAnRE9NRE9DU0FWRUZJTEUgRE9NRE9DR0VUUk9PVCBET01ET0NBRERQSSBET01OT0RFR0VUTkFNRSBET01OT0RFR0VUVFlQRSBET01OT0RFR0VUVkFMVUUgRE9NTk9ERUdFVENISUxEQ1QgJyArXG4gICAgICAgICAnRE9NTk9ERUdFVEZJUlNUQ0hJTEQgRE9NTk9ERUdFVFNJQkxJTkcgRE9NTk9ERUNSRUFURUNISUxERUxFTUVOVCBET01OT0RFU0VUQVRUUklCVVRFICcgK1xuICAgICAgICAgJ0RPTU5PREVHRVRDSElMREVMRU1FTlRDVCBET01OT0RFR0VURklSU1RDSElMREVMRU1FTlQgRE9NTk9ERUdFVFNJQkxJTkdFTEVNRU5UIERPTU5PREVHRVRBVFRSSUJVVEVDVCAnICtcbiAgICAgICAgICdET01OT0RFR0VUQVRUUklCVVRFSSBET01OT0RFR0VUQVRUUklCVVRFQllOQU1FIERPTU5PREVHRVRCWU5BTUUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyNcXFxccytbYS16QS1aXFxcXCBcXFxcLl0qJywgcmVsZXZhbmNlOiAwfSwgLy8gbG9va3MgbGlrZSAjLWNvbW1lbnRcbiAgICAgICAgICB7YmVnaW46ICcjW2EtekEtWlxcXFwgXFxcXC5dKyd9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNX1NVRkZJWCA9ICcoW3VpXSg4fDE2fDMyfDY0fDEyOHxzaXplKXxmKDMyfDY0KSlcXD8nO1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdhYnN0cmFjdCBhcyBhc3luYyBhd2FpdCBiZWNvbWUgYm94IGJyZWFrIGNvbnN0IGNvbnRpbnVlIGNyYXRlIGRvIGR5biAnICtcbiAgICAnZWxzZSBlbnVtIGV4dGVybiBmYWxzZSBmaW5hbCBmbiBmb3IgaWYgaW1wbCBpbiBsZXQgbG9vcCBtYWNybyBtYXRjaCBtb2QgJyArXG4gICAgJ21vdmUgbXV0IG92ZXJyaWRlIHByaXYgcHViIHJlZiByZXR1cm4gc2VsZiBTZWxmIHN0YXRpYyBzdHJ1Y3Qgc3VwZXIgJyArXG4gICAgJ3RyYWl0IHRydWUgdHJ5IHR5cGUgdHlwZW9mIHVuc2FmZSB1bnNpemVkIHVzZSB2aXJ0dWFsIHdoZXJlIHdoaWxlIHlpZWxkJztcbiAgdmFyIEJVSUxUSU5TID1cbiAgICAvLyBmdW5jdGlvbnNcbiAgICAnZHJvcCAnICtcbiAgICAvLyB0eXBlc1xuICAgICdpOCBpMTYgaTMyIGk2NCBpMTI4IGlzaXplICcgK1xuICAgICd1OCB1MTYgdTMyIHU2NCB1MTI4IHVzaXplICcgK1xuICAgICdmMzIgZjY0ICcgK1xuICAgICdzdHIgY2hhciBib29sICcgK1xuICAgICdCb3ggT3B0aW9uIFJlc3VsdCBTdHJpbmcgVmVjICcgK1xuICAgIC8vIHRyYWl0c1xuICAgICdDb3B5IFNlbmQgU2l6ZWQgU3luYyBEcm9wIEZuIEZuTXV0IEZuT25jZSBUb093bmVkIENsb25lIERlYnVnICcgK1xuICAgICdQYXJ0aWFsRXEgUGFydGlhbE9yZCBFcSBPcmQgQXNSZWYgQXNNdXQgSW50byBGcm9tIERlZmF1bHQgSXRlcmF0b3IgJyArXG4gICAgJ0V4dGVuZCBJbnRvSXRlcmF0b3IgRG91YmxlRW5kZWRJdGVyYXRvciBFeGFjdFNpemVJdGVyYXRvciAnICtcbiAgICAnU2xpY2VDb25jYXRFeHQgVG9TdHJpbmcgJyArXG4gICAgLy8gbWFjcm9zXG4gICAgJ2Fzc2VydCEgYXNzZXJ0X2VxISBiaXRmbGFncyEgYnl0ZXMhIGNmZyEgY29sISBjb25jYXQhIGNvbmNhdF9pZGVudHMhICcgK1xuICAgICdkZWJ1Z19hc3NlcnQhIGRlYnVnX2Fzc2VydF9lcSEgZW52ISBwYW5pYyEgZmlsZSEgZm9ybWF0ISBmb3JtYXRfYXJncyEgJyArXG4gICAgJ2luY2x1ZGVfYmluISBpbmNsdWRlX3N0ciEgbGluZSEgbG9jYWxfZGF0YV9rZXkhIG1vZHVsZV9wYXRoISAnICtcbiAgICAnb3B0aW9uX2VudiEgcHJpbnQhIHByaW50bG4hIHNlbGVjdCEgc3RyaW5naWZ5ISB0cnkhIHVuaW1wbGVtZW50ZWQhICcgK1xuICAgICd1bnJlYWNoYWJsZSEgdmVjISB3cml0ZSEgd3JpdGVsbiEgbWFjcm9fcnVsZXMhIGFzc2VydF9uZSEgZGVidWdfYXNzZXJ0X25lISc7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydycyddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIFNvbWUgTm9uZSBPayBFcnInLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIEJVSUxUSU5TXG4gICAgfSxcbiAgICBsZXhlbWVzOiBobGpzLklERU5UX1JFICsgJyE/JyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7Y29udGFpbnM6IFsnc2VsZiddfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2JlZ2luOiAvYj9cIi8sIGlsbGVnYWw6IG51bGx9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgeyBiZWdpbjogL3IoIyopXCIoLnxcXG4pKj9cIlxcMSg/ISMpLyB9LFxuICAgICAgICAgICB7IGJlZ2luOiAvYj8nXFxcXD8oeFxcd3syfXx1XFx3ezR9fFVcXHd7OH18LiknLyB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvJ1thLXpBLVpfXVthLXpBLVowLTlfXSovXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYjBiKFswMV9dKyknICsgTlVNX1NVRkZJWCB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYjBvKFswLTdfXSspJyArIE5VTV9TVUZGSVggfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIweChbQS1GYS1mMC05X10rKScgKyBOVU1fU1VGRklYIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKFxcXFxkW1xcXFxkX10qKFxcXFwuWzAtOV9dKyk/KFtlRV1bKy1dP1swLTlfXSspPyknICtcbiAgICAgICAgICAgICAgICAgICBOVU1fU1VGRklYXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuJywgZW5kOiAnKFxcXFwofDwpJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyNcXFxcIT9cXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd0eXBlJywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7ZW5kc1BhcmVudDogdHJ1ZX0pXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3RyYWl0IGVudW0gc3RydWN0IHVuaW9uJywgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7ZW5kc1BhcmVudDogdHJ1ZX0pXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6ICdbXFxcXHdcXFxcZF0nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICc6OicsXG4gICAgICAgIGtleXdvcmRzOiB7YnVpbHRfaW46IEJVSUxUSU5TfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICctPidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gICAgLy8gRGF0YSBzdGVwIGFuZCBQUk9DIFNRTCBzdGF0ZW1lbnRzXG4gICAgdmFyIFNBU19LRVlXT1JEUyA9ICcnK1xuICAgICAgICAnZG8gaWYgdGhlbiBlbHNlIGVuZCB1bnRpbCB3aGlsZSAnK1xuICAgICAgICAnJytcbiAgICAgICAgJ2Fib3J0IGFycmF5IGF0dHJpYiBieSBjYWxsIGNhcmRzIGNhcmRzNCBjYXRuYW1lIGNvbnRpbnVlICcrXG4gICAgICAgICdkYXRhbGluZXMgZGF0YWxpbmVzNCBkZWxldGUgZGVsaW0gZGVsaW1pdGVyIGRpc3BsYXkgZG0gZHJvcCAnK1xuICAgICAgICAnZW5kc2FzIGVycm9yIGZpbGUgZmlsZW5hbWUgZm9vdG5vdGUgZm9ybWF0IGdvdG8gaW4gaW5maWxlICcrXG4gICAgICAgICdpbmZvcm1hdCBpbnB1dCBrZWVwIGxhYmVsIGxlYXZlIGxlbmd0aCBsaWJuYW1lIGxpbmsgbGlzdCAnK1xuICAgICAgICAnbG9zdGNhcmQgbWVyZ2UgbWlzc2luZyBtb2RpZnkgb3B0aW9ucyBvdXRwdXQgb3V0IHBhZ2UgcHV0ICcrXG4gICAgICAgICdyZWRpcmVjdCByZW1vdmUgcmVuYW1lIHJlcGxhY2UgcmV0YWluIHJldHVybiBzZWxlY3Qgc2V0IHNraXAgJytcbiAgICAgICAgJ3N0YXJ0c2FzIHN0b3AgdGl0bGUgdXBkYXRlIHdhaXRzYXMgd2hlcmUgd2luZG93IHggc3lzdGFzayAnK1xuICAgICAgICAnJytcbiAgICAgICAgJ2FkZCBhbmQgYWx0ZXIgYXMgY2FzY2FkZSBjaGVjayBjcmVhdGUgZGVsZXRlIGRlc2NyaWJlICcrXG4gICAgICAgICdkaXN0aW5jdCBkcm9wIGZvcmVpZ24gZnJvbSBncm91cCBoYXZpbmcgaW5kZXggaW5zZXJ0IGludG8gaW4gJytcbiAgICAgICAgJ2tleSBsaWtlIG1lc3NhZ2UgbW9kaWZ5IG1zZ3R5cGUgbm90IG51bGwgb24gb3Igb3JkZXIgcHJpbWFyeSAnK1xuICAgICAgICAncmVmZXJlbmNlcyByZXNldCByZXN0cmljdCBzZWxlY3Qgc2V0IHRhYmxlIHVuaXF1ZSB1cGRhdGUgJytcbiAgICAgICAgJ3ZhbGlkYXRlIHZpZXcgd2hlcmUnO1xuXG4gICAgLy8gQnVpbHQtaW4gU0FTIGZ1bmN0aW9uc1xuICAgIHZhciBTQVNfRlVOID0gJycrXG4gICAgICAgICdhYnN8YWRkcnxhaXJ5fGFyY29zfGFyc2lufGF0YW58YXR0cmN8YXR0cm58YmFuZHwnK1xuICAgICAgICAnYmV0YWludnxibHNoaWZ0fGJub3R8Ym9yfGJyc2hpZnR8YnhvcnxieXRlfGNkZnxjZWlsfCcrXG4gICAgICAgICdjZXhpc3R8Y2ludnxjbG9zZXxjbm9uY3R8Y29sbGF0ZXxjb21wYmx8Y29tcG91bmR8JytcbiAgICAgICAgJ2NvbXByZXNzfGNvc3xjb3NofGNzc3xjdXJvYnN8Y3Z8ZGFjY2RifGRhY2NkYnNsfCcrXG4gICAgICAgICdkYWNjc2x8ZGFjY3N5ZHxkYWNjdGFifGRhaXJ5fGRhdGV8ZGF0ZWp1bHxkYXRlcGFydHwnK1xuICAgICAgICAnZGF0ZXRpbWV8ZGF5fGRjbG9zZXxkZXBkYnxkZXBkYnNsfGRlcGRic2x8ZGVwc2x8JytcbiAgICAgICAgJ2RlcHNsfGRlcHN5ZHxkZXBzeWR8ZGVwdGFifGRlcHRhYnxkZXF1b3RlfGRobXN8ZGlmfCcrXG4gICAgICAgICdkaWdhbW1hfGRpbXxkaW5mb3xkbnVtfGRvcGVufGRvcHRuYW1lfGRvcHRudW18ZHJlYWR8JytcbiAgICAgICAgJ2Ryb3Bub3RlfGRzbmFtZXxlcmZ8ZXJmY3xleGlzdHxleHB8ZmFwcGVuZHxmY2xvc2V8JytcbiAgICAgICAgJ2Zjb2x8ZmRlbGV0ZXxmZXRjaHxmZXRjaG9ic3xmZXhpc3R8ZmdldHxmaWxlZXhpc3R8JytcbiAgICAgICAgJ2ZpbGVuYW1lfGZpbGVyZWZ8ZmluZm98ZmludnxmaXBuYW1lfGZpcG5hbWVsfCcrXG4gICAgICAgICdmaXBzdGF0ZXxmbG9vcnxmbm9uY3R8Zm5vdGV8Zm9wZW58Zm9wdG5hbWV8Zm9wdG51bXwnK1xuICAgICAgICAnZnBvaW50fGZwb3N8ZnB1dHxmcmVhZHxmcmV3aW5kfGZybGVufGZzZXB8ZnV6enwnK1xuICAgICAgICAnZndyaXRlfGdhbWludnxnYW1tYXxnZXRvcHRpb258Z2V0dmFyY3xnZXR2YXJufGhib3VuZHwnK1xuICAgICAgICAnaG1zfGhvc3RoZWxwfGhvdXJ8aWJlc3NlbHxpbmRleHxpbmRleGN8aW5kZXh3fGlucHV0fCcrXG4gICAgICAgICdpbnB1dGN8aW5wdXRufGludHxpbnRja3xpbnRueHxpbnRycnxpcnJ8amJlc3NlbHwnK1xuICAgICAgICAnanVsZGF0ZXxrdXJ0b3Npc3xsYWd8bGJvdW5kfGxlZnR8bGVuZ3RofGxnYW1tYXwnK1xuICAgICAgICAnbGlibmFtZXxsaWJyZWZ8bG9nfGxvZzEwfGxvZzJ8bG9ncGRmfGxvZ3BtZnxsb2dzZGZ8JytcbiAgICAgICAgJ2xvd2Nhc2V8bWF4fG1keXxtZWFufG1pbnxtaW51dGV8bW9kfG1vbnRofG1vcGVufCcrXG4gICAgICAgICdtb3J0fG58bmV0cHZ8bm1pc3N8bm9ybWFsfG5vdGV8bnB2fG9wZW58b3JkaW5hbHwnK1xuICAgICAgICAncGF0aG5hbWV8cGRmfHBlZWt8cGVla2N8cG1mfHBvaW50fHBvaXNzb258cG9rZXwnK1xuICAgICAgICAncHJvYmJldGF8cHJvYmJubWx8cHJvYmNoaXxwcm9iZnxwcm9iZ2FtfHByb2JoeXByfCcrXG4gICAgICAgICdwcm9iaXR8cHJvYm5lZ2J8cHJvYm5vcm18cHJvYnR8cHV0fHB1dGN8cHV0bnxxdHJ8JytcbiAgICAgICAgJ3F1b3RlfHJhbmJpbnxyYW5jYXV8cmFuZXhwfHJhbmdhbXxyYW5nZXxyYW5rfHJhbm5vcnwnK1xuICAgICAgICAncmFucG9pfHJhbnRibHxyYW50cml8cmFudW5pfHJlcGVhdHxyZXNvbHZlfHJldmVyc2V8JytcbiAgICAgICAgJ3Jld2luZHxyaWdodHxyb3VuZHxzYXZpbmd8c2NhbnxzZGZ8c2Vjb25kfHNpZ258JytcbiAgICAgICAgJ3NpbnxzaW5ofHNrZXduZXNzfHNvdW5kZXh8c3BlZGlzfHNxcnR8c3RkfHN0ZGVycnwnK1xuICAgICAgICAnc3RmaXBzfHN0bmFtZXxzdG5hbWVsfHN1YnN0cnxzdW18c3ltZ2V0fHN5c2dldHwnK1xuICAgICAgICAnc3lzbXNnfHN5c3Byb2R8c3lzcmN8c3lzdGVtfHRhbnx0YW5ofHRpbWV8dGltZXBhcnR8JytcbiAgICAgICAgJ3RpbnZ8dG5vbmN0fHRvZGF5fHRyYW5zbGF0ZXx0cmFud3JkfHRyaWdhbW1hfCcrXG4gICAgICAgICd0cmltfHRyaW1ufHRydW5jfHVuaWZvcm18dXBjYXNlfHVzc3x2YXJ8dmFyZm10fCcrXG4gICAgICAgICd2YXJpbmZtdHx2YXJsYWJlbHx2YXJsZW58dmFybmFtZXx2YXJudW18dmFycmF5fCcrXG4gICAgICAgICd2YXJyYXl4fHZhcnR5cGV8dmVyaWZ5fHZmb3JtYXR8dmZvcm1hdGR8dmZvcm1hdGR4fCcrXG4gICAgICAgICd2Zm9ybWF0bnx2Zm9ybWF0bnh8dmZvcm1hdHd8dmZvcm1hdHd4fHZmb3JtYXR4fCcrXG4gICAgICAgICd2aW5hcnJheXx2aW5hcnJheXh8dmluZm9ybWF0fHZpbmZvcm1hdGR8dmluZm9ybWF0ZHh8JytcbiAgICAgICAgJ3ZpbmZvcm1hdG58dmluZm9ybWF0bnh8dmluZm9ybWF0d3x2aW5mb3JtYXR3eHwnK1xuICAgICAgICAndmluZm9ybWF0eHx2bGFiZWx8dmxhYmVseHx2bGVuZ3RofHZsZW5ndGh4fHZuYW1lfCcrXG4gICAgICAgICd2bmFtZXh8dnR5cGV8dnR5cGV4fHdlZWtkYXl8eWVhcnx5eXF8emlwZmlwc3x6aXBuYW1lfCcrXG4gICAgICAgICd6aXBuYW1lbHx6aXBzdGF0ZSc7XG5cbiAgICAvLyBCdWlsdC1pbiBtYWNybyBmdW5jdGlvbnNcbiAgICB2YXIgU0FTX01BQ1JPX0ZVTiA9ICdicXVvdGV8bnJicXVvdGV8Y21wcmVzfHFjbXByZXN8Y29tcHN0b3J8JytcbiAgICAgICAgJ2RhdGF0eXB8ZGlzcGxheXxkb3xlbHNlfGVuZHxldmFsfGdsb2JhbHxnb3RvfCcrXG4gICAgICAgICdpZnxpbmRleHxpbnB1dHxrZXlkZWZ8bGFiZWx8bGVmdHxsZW5ndGh8bGV0fCcrXG4gICAgICAgICdsb2NhbHxsb3djYXNlfG1hY3JvfG1lbmR8bnJicXVvdGV8bnJxdW90ZXwnK1xuICAgICAgICAnbnJzdHJ8cHV0fHFjbXByZXN8cWxlZnR8cWxvd2Nhc2V8cXNjYW58JytcbiAgICAgICAgJ3FzdWJzdHJ8cXN5c2Z1bmN8cXRyaW18cXVvdGV8cXVwY2FzZXxzY2FufHN0cnwnK1xuICAgICAgICAnc3Vic3RyfHN1cGVycXxzeXNjYWxsfHN5c2V2YWxmfHN5c2V4ZWN8c3lzZnVuY3wnK1xuICAgICAgICAnc3lzZ2V0fHN5c2xwdXR8c3lzcHJvZHxzeXNyY3xzeXNycHV0fHRoZW58dG98JytcbiAgICAgICAgJ3RyaW18dW5xdW90ZXx1bnRpbHx1cGNhc2V8dmVyaWZ5fHdoaWxlfHdpbmRvdyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGlhc2VzOiBbJ3NhcycsICdTQVMnXSxcbiAgICAgICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSwgLy8gU0FTIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAgICAgJ251bGwgbWlzc2luZyBfYWxsXyBfYXV0b21hdGljXyBfY2hhcmFjdGVyXyBfaW5maWxlXyAnK1xuICAgICAgICAgICAgICAgICdfbl8gX25hbWVfIF9udWxsXyBfbnVtZXJpY18gX3VzZXJfIF93ZWJvdXRfJyxcbiAgICAgICAgICAgIG1ldGE6XG4gICAgICAgICAgICAgICAgU0FTX0tFWVdPUkRTXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gRGlzdGluY3QgaGlnaGxpZ2h0IGZvciBwcm9jIDxwcm9jPiwgZGF0YSwgcnVuLCBxdWl0XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9eXFxzKihwcm9jIFtcXHdcXGRfXSt8ZGF0YXxydW58cXVpdClbXFxzXFw7XS9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gTWFjcm8gdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwmW2EtekEtWl9cXCZdW2EtekEtWjAtOV9dKlxcLj8vXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgZW1waGFzaXMgZm9yIGRhdGFsaW5lc3xjYXJkc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcGhhc2lzJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogL15cXHMqZGF0YWxpbmVzfGNhcmRzLio7LyxcbiAgICAgICAgICAgICAgICBlbmQ6IC9eXFxzKjtcXHMqJC9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7ICAgLy8gQnVpbHQtaW4gbWFjcm8gdmFyaWFibGVzIHRha2UgcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJyUoJyArIFNBU19NQUNST19GVU4gKyAnKSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gVXNlci1kZWZpbmVkIG1hY3JvIGZ1bmN0aW9ucyBoaWdobGlnaHRlZCBhZnRlclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvJVthLXpBLVpfXVthLXpBLVpfMC05XSovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnW14lXSgnICsgU0FTX0ZVTiArICcpW1xcKF0nXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnXFxcXConLCAnOycpLFxuICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIEFOTk9UQVRJT04gPSB7IGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ0BbQS1aYS16XSsnIH07XG5cbiAgLy8gdXNlZCBpbiBzdHJpbmdzIGZvciBlc2NhcGluZy9pbnRlcnBvbGF0aW9uL3N1YnN0aXR1dGlvblxuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxcJFtBLVphLXowLTlfXSsnfSxcbiAgICAgIHtiZWdpbjogJ1xcXFwkeycsIGVuZDogJ30nfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW2Etel0rXCJcIlwiJywgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgY29udGFpbnM6IFtTVUJTVF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICBdXG5cbiAgfTtcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCdcXFxcd1tcXFxcd1xcXFxkX10qKD8hXFwnKSdcbiAgfTtcblxuICB2YXIgVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bQS1aYS16MC05X10qJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgTkFNRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9bXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdW15cXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XSt8W14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7PV0vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIG9iamVjdCB0cmFpdCB0eXBlJyxcbiAgICBlbmQ6IC9bOj17XFxbXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgd2l0aCcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLyxcbiAgICAgICAgZW5kOiAvXFxdLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVFlQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbVFlQRV1cbiAgICAgIH0sXG4gICAgICBOQU1FXG4gICAgXVxuICB9O1xuXG4gIHZhciBNRVRIT0QgPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgIGVuZDogL1s6PXtcXFsoXFxuO10vLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtOQU1FXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnLFxuICAgICAga2V5d29yZDogJ3R5cGUgeWllbGQgbGF6eSBvdmVycmlkZSBkZWYgd2l0aCB2YWwgdmFyIHNlYWxlZCBhYnN0cmFjdCBwcml2YXRlIHRyYWl0IG9iamVjdCBpZiBmb3JTb21lIGZvciB3aGlsZSB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBleHRlbmRzIGltcG9ydCBmaW5hbCByZXR1cm4gZWxzZSBicmVhayBuZXcgY2F0Y2ggc3VwZXIgY2xhc3MgY2FzZSBwYWNrYWdlIGRlZmF1bHQgdHJ5IHRoaXMgbWF0Y2ggY29udGludWUgdGhyb3dzIGltcGxpY2l0J1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsXG4gICAgICBTWU1CT0wsXG4gICAgICBUWVBFLFxuICAgICAgTUVUSE9ELFxuICAgICAgQ0xBU1MsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBBTk5PVEFUSU9OXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNDSEVNRV9JREVOVF9SRSA9ICdbXlxcXFwoXFxcXClcXFxcW1xcXFxdXFxcXHtcXFxcfVwiLFxcJ2A7I3xcXFxcXFxcXFxcXFxzXSsnO1xuICB2YXIgU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUgPSAnKFxcXFwtfFxcXFwrKT9cXFxcZCsoWy4vXVxcXFxkKyk/JztcbiAgdmFyIFNDSEVNRV9DT01QTEVYX05VTUJFUl9SRSA9IFNDSEVNRV9TSU1QTEVfTlVNQkVSX1JFICsgJ1srXFxcXC1dJyArIFNDSEVNRV9TSU1QTEVfTlVNQkVSX1JFICsgJ2knO1xuICB2YXIgQlVJTFRJTlMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAnY2FzZS1sYW1iZGEgY2FsbC9jYyBjbGFzcyBkZWZpbmUtY2xhc3MgZXhpdC1oYW5kbGVyIGZpZWxkIGltcG9ydCAnICtcbiAgICAgICdpbmhlcml0IGluaXQtZmllbGQgaW50ZXJmYWNlIGxldCotdmFsdWVzIGxldC12YWx1ZXMgbGV0L2VjIG1peGluICcgK1xuICAgICAgJ29wdC1sYW1iZGEgb3ZlcnJpZGUgcHJvdGVjdCBwcm92aWRlIHB1YmxpYyByZW5hbWUgcmVxdWlyZSAnICtcbiAgICAgICdyZXF1aXJlLWZvci1zeW50YXggc3ludGF4IHN5bnRheC1jYXNlIHN5bnRheC1lcnJvciB1bml0L3NpZyB1bmxlc3MgJyArXG4gICAgICAnd2hlbiB3aXRoLXN5bnRheCBhbmQgYmVnaW4gY2FsbC13aXRoLWN1cnJlbnQtY29udGludWF0aW9uICcgK1xuICAgICAgJ2NhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYXNlIGNvbmQgZGVmaW5lICcgK1xuICAgICAgJ2RlZmluZS1zeW50YXggZGVsYXkgZG8gZHluYW1pYy13aW5kIGVsc2UgZm9yLWVhY2ggaWYgbGFtYmRhIGxldCBsZXQqICcgK1xuICAgICAgJ2xldC1zeW50YXggbGV0cmVjIGxldHJlYy1zeW50YXggbWFwIG9yIHN5bnRheC1ydWxlcyBcXCcgKiArICwgLEAgLSAuLi4gLyAnICtcbiAgICAgICc7IDwgPD0gPSA9PiA+ID49IGAgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gJyArXG4gICAgICAnYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSAnICtcbiAgICAgICdjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgJyArXG4gICAgICAnY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gJyArXG4gICAgICAnY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgJyArXG4gICAgICAnY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyAnICtcbiAgICAgICdjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zICcgK1xuICAgICAgJ2N1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gJyArXG4gICAgICAnZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0IGZsb29yICcgK1xuICAgICAgJ2ZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciAnICtcbiAgICAgICdpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nICcgK1xuICAgICAgJ2xpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgJyArXG4gICAgICAnbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gJyArXG4gICAgICAnbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nICcgK1xuICAgICAgJ251bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/ICcgK1xuICAgICAgJ3BhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50ICcgK1xuICAgICAgJ3JhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2UgJyArXG4gICAgICAncm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyAnICtcbiAgICAgICdzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gJyArXG4gICAgICAnc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5ICcgK1xuICAgICAgJ3N0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/ICcgK1xuICAgICAgJ3N0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/ICcgK1xuICAgICAgJ3RhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgJyArXG4gICAgICAndmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgJyArXG4gICAgICAnd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/J1xuICB9O1xuXG4gIHZhciBTSEVCQU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnXiMhJyxcbiAgICBlbmQ6ICckJ1xuICB9O1xuXG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAnKCN0fCNmfCNcXFxcXFxcXCcgKyBTQ0hFTUVfSURFTlRfUkUgKyAnfCNcXFxcXFxcXC4pJ1xuICB9O1xuXG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMCB9LFxuICAgICAgeyBiZWdpbjogU0NIRU1FX0NPTVBMRVhfTlVNQkVSX1JFLCByZWxldmFuY2U6IDAgfSxcbiAgICAgIHsgYmVnaW46ICcjYlswLTFdKygvWzAtMV0rKT8nIH0sXG4gICAgICB7IGJlZ2luOiAnI29bMC03XSsoL1swLTddKyk/JyB9LFxuICAgICAgeyBiZWdpbjogJyN4WzAtOWEtZl0rKC9bMC05YS1mXSspPycgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgU1RSSU5HID0gaGxqcy5RVU9URV9TVFJJTkdfTU9ERTtcblxuICB2YXIgUkVHVUxBUl9FWFBSRVNTSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgYmVnaW46ICcjW3ByXXhcIicsXG4gICAgZW5kOiAnW15cXFxcXFxcXF1cIidcbiAgfTtcblxuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnOycsXG4gICAgICAnJCcsXG4gICAgICB7XG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKCcjXFxcXHwnLCAnXFxcXHwjJylcbiAgXTtcblxuICB2YXIgSURFTlQgPSB7XG4gICAgYmVnaW46IFNDSEVNRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUVVPVEVEX0lERU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCcnICsgU0NIRU1FX0lERU5UX1JFXG4gIH07XG5cbiAgdmFyIEJPRFkgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFFVT1RFRF9MSVNUID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvJy8gfSxcbiAgICAgIHsgYmVnaW46ICdgJyB9XG4gICAgXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogWydzZWxmJywgTElURVJBTCwgU1RSSU5HLCBOVU1CRVIsIElERU5ULCBRVU9URURfSURFTlRdXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBOQU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgIGJlZ2luOiBTQ0hFTUVfSURFTlRfUkUsXG4gICAgbGV4ZW1lczogU0NIRU1FX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBCVUlMVElOU1xuICB9O1xuXG4gIHZhciBMQU1CREEgPSB7XG4gICAgYmVnaW46IC9sYW1iZGEvLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIE5BTUUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtJREVOVF0sXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBMSVNUID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScgfSxcbiAgICAgIHsgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyB9XG4gICAgXSxcbiAgICBjb250YWluczogW0xBTUJEQSwgTkFNRSwgQk9EWV1cbiAgfTtcblxuICBCT0RZLmNvbnRhaW5zID0gW0xJVEVSQUwsIE5VTUJFUiwgU1RSSU5HLCBJREVOVCwgUVVPVEVEX0lERU5ULCBRVU9URURfTElTVCwgTElTVF0uY29uY2F0KENPTU1FTlRfTU9ERVMpO1xuXG4gIHJldHVybiB7XG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtTSEVCQU5HLCBOVU1CRVIsIFNUUklORywgUVVPVEVEX0lERU5ULCBRVU9URURfTElTVCwgTElTVF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gIHZhciBDT01NT05fQ09OVEFJTlMgPSBbXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ1xcJ3xcXFwiJywgZW5kOiAnXFwnfFxcXCInLFxuICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIHtiZWdpbjogJ1xcJ1xcJyd9XVxuICAgIH1cbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc2NpJ10sXG4gICAgbGV4ZW1lczogLyU/XFx3Ky8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhYm9ydCBicmVhayBjYXNlIGNsZWFyIGNhdGNoIGNvbnRpbnVlIGRvIGVsc2VpZiBlbHNlIGVuZGZ1bmN0aW9uIGVuZCBmb3IgZnVuY3Rpb24gJytcbiAgICAgICAgJ2dsb2JhbCBpZiBwYXVzZSByZXR1cm4gcmVzdW1lIHNlbGVjdCB0cnkgdGhlbiB3aGlsZScsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnJWYgJUYgJXQgJVQgJXBpICVlcHMgJWluZiAlbmFuICVlICVpICV6ICVzJyxcbiAgICAgIGJ1aWx0X2luOiAvLyBTY2lsYWIgaGFzIG1vcmUgdGhhbiAyMDAwIGZ1bmN0aW9ucy4gSnVzdCBsaXN0IHRoZSBtb3N0IGNvbW1vbnNcbiAgICAgICAnYWJzIGFuZCBhY29zIGFzaW4gYXRhbiBjZWlsIGNkIGNoZGlyIGNsZWFyZ2xvYmFsIGNvc2ggY29zIGN1bXByb2QgZGVmZiBkaXNwIGVycm9yICcrXG4gICAgICAgJ2V4ZWMgZXhlY3N0ciBleGlzdHMgZXhwIGV5ZSBnZXR0ZXh0IGZsb29yIGZwcmludGYgZnJlYWQgZnNvbHZlIGltYWcgaXNkZWYgaXNlbXB0eSAnK1xuICAgICAgICdpc2luZmlzbmFuIGlzdmVjdG9yIGxhc3RlcnJvciBsZW5ndGggbG9hZCBsaW5zcGFjZSBsaXN0IGxpc3RmaWxlcyBsb2cxMCBsb2cyIGxvZyAnK1xuICAgICAgICdtYXggbWluIG1zcHJpbnRmIG1jbG9zZSBtb3BlbiBvbmVzIG9yIHBhdGhjb252ZXJ0IHBvbHkgcHJpbnRmIHByb2QgcHdkIHJhbmQgcmVhbCAnK1xuICAgICAgICdyb3VuZCBzaW5oIHNpbiBzaXplIGdzb3J0IHNwcmludGYgc3FydCBzdHJjYXQgc3RyY21wcyB0cmluZyBzdW0gc3lzdGVtIHRhbmggdGFuICcrXG4gICAgICAgJ3R5cGUgdHlwZW5hbWUgd2FybmluZyB6ZXJvcyBtYXRyaXgnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnKFwifCN8L1xcXFwqfFxcXFxzKy9cXFxcdyspJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1thLXpBLVpfXVthLXpBLVpfMC05XSooXFwnK1tcXFxcLlxcJ10qfFtcXFxcLlxcJ10rKScsIGVuZDogJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdXFwnKltcXFxcLlxcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogQ09NTU9OX0NPTlRBSU5TXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCcvLycsICckJylcbiAgICBdLmNvbmNhdChDT01NT05fQ09OVEFJTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQVRfSURFTlRJRklFUiA9ICdAW2Etei1dKycgLy8gQGZvbnQtZmFjZVxuICB2YXIgQVRfTU9ESUZJRVJTID0gXCJhbmQgb3Igbm90IG9ubHlcIlxuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWi1dW2EtekEtWjAtOV8tXSonO1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnKFxcXFwkJyArIElERU5UX1JFICsgJylcXFxcYidcbiAgfTtcbiAgdmFyIEhFWENPTE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgfTtcbiAgdmFyIERFRl9JTlRFUk5BTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICBiZWdpbjogJ1tBLVpcXFxcX1xcXFwuXFxcXC1dKycsIGVuZDogJzonLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgaWxsZWdhbDogJ1teXFxcXHNdJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgSEVYQ09MT1IsXG4gICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICchaW1wb3J0YW50J1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogJ1s9L3xcXCddJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnLCBiZWdpbjogJ1xcXFwjW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJywgYmVnaW46ICdcXFxcLltBLVphLXowLTlfLV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJywgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgaWxsZWdhbDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLCAvLyBiZWdpbjogSURFTlRfUkUsIGVuZDogJ1ssfFxcXFxzXSdcbiAgICAgICAgYmVnaW46ICdcXFxcYihhfGFiYnJ8YWNyb255bXxhZGRyZXNzfGFyZWF8YXJ0aWNsZXxhc2lkZXxhdWRpb3xifGJhc2V8YmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2l0ZXxjb2RlfGNvbHxjb2xncm91cHxjb21tYW5kfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaXZ8ZGx8ZHR8ZW18ZW1iZWR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8KGhbMS02XSl8aGVhZHxoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrYmR8a2V5Z2VufGxhYmVsfGxlZ2VuZHxsaXxsaW5rfG1hcHxtYXJrfG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHxvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzYW1wfHNjcmlwdHxzZWN0aW9ufHNlbGVjdHxzbWFsbHxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1cHx0YWJsZXx0Ym9keXx0ZHx0ZXh0YXJlYXx0Zm9vdHx0aHx0aGVhZHx0aW1lfHRpdGxlfHRyfHR0fHVsfHZhcnx2aWRlbylcXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICc6KHZpc2l0ZWR8dmFsaWR8cm9vdHxyaWdodHxyZXF1aXJlZHxyZWFkLXdyaXRlfHJlYWQtb25seXxvdXQtcmFuZ2V8b3B0aW9uYWx8b25seS1vZi10eXBlfG9ubHktY2hpbGR8bnRoLW9mLXR5cGV8bnRoLWxhc3Qtb2YtdHlwZXxudGgtbGFzdC1jaGlsZHxudGgtY2hpbGR8bm90fGxpbmt8bGVmdHxsYXN0LW9mLXR5cGV8bGFzdC1jaGlsZHxsYW5nfGludmFsaWR8aW5kZXRlcm1pbmF0ZXxpbi1yYW5nZXxob3Zlcnxmb2N1c3xmaXJzdC1vZi10eXBlfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWNoaWxkfGZpcnN0fGVuYWJsZWR8ZW1wdHl8ZGlzYWJsZWR8ZGVmYXVsdHxjaGVja2VkfGJlZm9yZXxhZnRlcnxhY3RpdmUpJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJyxcbiAgICAgICAgYmVnaW46ICc6OihhZnRlcnxiZWZvcmV8Y2hvaWNlc3xmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxyZXBlYXQtaW5kZXh8cmVwZWF0LWl0ZW18c2VsZWN0aW9ufHZhbHVlKSdcbiAgICAgIH0sXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYihzcmN8ei1pbmRleHx3b3JkLXdyYXB8d29yZC1zcGFjaW5nfHdvcmQtYnJlYWt8d2lkdGh8d2lkb3dzfHdoaXRlLXNwYWNlfHZpc2liaWxpdHl8dmVydGljYWwtYWxpZ258dW5pY29kZS1iaWRpfHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb258dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtfHRvcHx0ZXh0LXVuZGVybGluZS1wb3NpdGlvbnx0ZXh0LXRyYW5zZm9ybXx0ZXh0LXNoYWRvd3x0ZXh0LXJlbmRlcmluZ3x0ZXh0LW92ZXJmbG93fHRleHQtaW5kZW50fHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tY29sb3J8dGV4dC1kZWNvcmF0aW9ufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWFsaWdufHRhYi1zaXplfHRhYmxlLWxheW91dHxyaWdodHxyZXNpemV8cXVvdGVzfHBvc2l0aW9ufHBvaW50ZXItZXZlbnRzfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwYWdlLWJyZWFrLWluc2lkZXxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWFmdGVyfHBhZGRpbmctdG9wfHBhZGRpbmctcmlnaHR8cGFkZGluZy1sZWZ0fHBhZGRpbmctYm90dG9tfHBhZGRpbmd8b3ZlcmZsb3cteXxvdmVyZmxvdy14fG92ZXJmbG93LXdyYXB8b3ZlcmZsb3d8b3V0bGluZS13aWR0aHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtY29sb3J8b3V0bGluZXxvcnBoYW5zfG9yZGVyfG9wYWNpdHl8b2JqZWN0LXBvc2l0aW9ufG9iamVjdC1maXR8bm9ybWFsfG5vbmV8bmF2LXVwfG5hdi1yaWdodHxuYXYtbGVmdHxuYXYtaW5kZXh8bmF2LWRvd258bWluLXdpZHRofG1pbi1oZWlnaHR8bWF4LXdpZHRofG1heC1oZWlnaHR8bWFza3xtYXJrc3xtYXJnaW4tdG9wfG1hcmdpbi1yaWdodHxtYXJnaW4tbGVmdHxtYXJnaW4tYm90dG9tfG1hcmdpbnxsaXN0LXN0eWxlLXR5cGV8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGV8bGluZS1oZWlnaHR8bGV0dGVyLXNwYWNpbmd8bGVmdHxqdXN0aWZ5LWNvbnRlbnR8aW5pdGlhbHxpbmhlcml0fGltZS1tb2RlfGltYWdlLW9yaWVudGF0aW9ufGltYWdlLXJlc29sdXRpb258aW1hZ2UtcmVuZGVyaW5nfGljb258aHlwaGVuc3xoZWlnaHR8Zm9udC13ZWlnaHR8Zm9udC12YXJpYW50LWxpZ2F0dXJlc3xmb250LXZhcmlhbnR8Zm9udC1zdHlsZXxmb250LXN0cmV0Y2h8Zm9udC1zaXplLWFkanVzdHxmb250LXNpemV8Zm9udC1sYW5ndWFnZS1vdmVycmlkZXxmb250LWtlcm5pbmd8Zm9udC1mZWF0dXJlLXNldHRpbmdzfGZvbnQtZmFtaWx5fGZvbnR8ZmxvYXR8ZmxleC13cmFwfGZsZXgtc2hyaW5rfGZsZXgtZ3Jvd3xmbGV4LWZsb3d8ZmxleC1kaXJlY3Rpb258ZmxleC1iYXNpc3xmbGV4fGZpbHRlcnxlbXB0eS1jZWxsc3xkaXNwbGF5fGRpcmVjdGlvbnxjdXJzb3J8Y291bnRlci1yZXNldHxjb3VudGVyLWluY3JlbWVudHxjb250ZW50fGNvbHVtbi13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZXxjb2x1bW4tZ2FwfGNvbHVtbi1maWxsfGNvbHVtbi1jb3VudHxjb2x1bW5zfGNvbG9yfGNsaXAtcGF0aHxjbGlwfGNsZWFyfGNhcHRpb24tc2lkZXxicmVhay1pbnNpZGV8YnJlYWstYmVmb3JlfGJyZWFrLWFmdGVyfGJveC1zaXppbmd8Ym94LXNoYWRvd3xib3gtZGVjb3JhdGlvbi1icmVha3xib3R0b218Ym9yZGVyLXdpZHRofGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcHxib3JkZXItc3R5bGV8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yYWRpdXN8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnR8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1jb2xsYXBzZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b218Ym9yZGVyfGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYmxlbmQtbW9kZXxiYWNrZ3JvdW5kfGJhY2tmYWNlLXZpc2liaWxpdHl8YXV0b3xhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9ufGFsaWduLXNlbGZ8YWxpZ24taXRlbXN8YWxpZ24tY29udGVudClcXFxcYicsXG4gICAgICAgIGlsbGVnYWw6ICdbXlxcXFxzXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIod2hpdGVzcGFjZXx3YWl0fHctcmVzaXplfHZpc2libGV8dmVydGljYWwtdGV4dHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x1cHBlcmNhc2V8dXBwZXItcm9tYW58dXBwZXItYWxwaGF8dW5kZXJsaW5lfHRyYW5zcGFyZW50fHRvcHx0aGlufHRoaWNrfHRleHR8dGV4dC10b3B8dGV4dC1ib3R0b218dGItcmx8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLWZvb3Rlci1ncm91cHxzdy1yZXNpemV8c3VwZXJ8c3RyaWN0fHN0YXRpY3xzcXVhcmV8c29saWR8c21hbGwtY2Fwc3xzZXBhcmF0ZXxzZS1yZXNpemV8c2Nyb2xsfHMtcmVzaXplfHJ0bHxyb3ctcmVzaXplfHJpZGdlfHJpZ2h0fHJlcGVhdHxyZXBlYXQteXxyZXBlYXQteHxyZWxhdGl2ZXxwcm9ncmVzc3xwb2ludGVyfG92ZXJsaW5lfG91dHNpZGV8b3V0c2V0fG9ibGlxdWV8bm93cmFwfG5vdC1hbGxvd2VkfG5vcm1hbHxub25lfG53LXJlc2l6ZXxuby1yZXBlYXR8bm8tZHJvcHxuZXdzcGFwZXJ8bmUtcmVzaXplfG4tcmVzaXplfG1vdmV8bWlkZGxlfG1lZGl1bXxsdHJ8bHItdGJ8bG93ZXJjYXNlfGxvd2VyLXJvbWFufGxvd2VyLWFscGhhfGxvb3NlfGxpc3QtaXRlbXxsaW5lfGxpbmUtdGhyb3VnaHxsaW5lLWVkZ2V8bGlnaHRlcnxsZWZ0fGtlZXAtYWxsfGp1c3RpZnl8aXRhbGljfGludGVyLXdvcmR8aW50ZXItaWRlb2dyYXBofGluc2lkZXxpbnNldHxpbmxpbmV8aW5saW5lLWJsb2NrfGluaGVyaXR8aW5hY3RpdmV8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtYWxwaGF8aG9yaXpvbnRhbHxoaWRkZW58aGVscHxoYW5kfGdyb292ZXxmaXhlZHxlbGxpcHNpc3xlLXJlc2l6ZXxkb3VibGV8ZG90dGVkfGRpc3RyaWJ1dGV8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLWFsbC1saW5lc3xkaXNjfGRpc2FibGVkfGRlZmF1bHR8ZGVjaW1hbHxkYXNoZWR8Y3Jvc3NoYWlyfGNvbGxhcHNlfGNvbC1yZXNpemV8Y2lyY2xlfGNoYXJ8Y2VudGVyfGNhcGl0YWxpemV8YnJlYWstd29yZHxicmVhay1hbGx8Ym90dG9tfGJvdGh8Ym9sZGVyfGJvbGR8YmxvY2t8YmlkaS1vdmVycmlkZXxiZWxvd3xiYXNlbGluZXxhdXRvfGFsd2F5c3xhbGwtc2Nyb2xsfGFic29sdXRlfHRhYmxlfHRhYmxlLWNlbGwpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJzonLCBlbmQ6ICc7JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBIRVhDT0xPUixcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICchaW1wb3J0YW50J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIG1hdGNoaW5nIHRoZXNlIGhlcmUgYWxsb3dzIHVzIHRvIHRyZWF0IHRoZW0gbW9yZSBsaWtlIHJlZ3VsYXIgQ1NTXG4gICAgICAvLyBydWxlcyBzbyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIHt9IGdldHMgcmVndWxhciBydWxlIGhpZ2hsaWdodGluZyxcbiAgICAgIC8vIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBmb3IgcGFnZSBhbmQgZm9udC1mYWNlXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQChwYWdlfGZvbnQtZmFjZSknLFxuICAgICAgICBsZXhlbWVzOiBBVF9JREVOVElGSUVSLFxuICAgICAgICBrZXl3b3JkczogJ0BwYWdlIEBmb250LWZhY2UnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6ICdbeztdJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBBVF9NT0RJRklFUlMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEFUX0lERU5USUZJRVIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwia2V5d29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBIRVhDT0xPUixcbiAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAvLyB7XG4gICAgICAgICAgLy8gICBiZWdpbjogJ1xcXFxzW0EtWmEtejAtOV8uLV0rJyxcbiAgICAgICAgICAvLyAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIC8vIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjb25zb2xlJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzezAsM31bL1xcXFx3XFxcXGRcXFxcW1xcXFxdKClALV0qWz4lJCNdJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnJCcsIHN1Ykxhbmd1YWdlOiAnYmFzaCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIHNtYWxpX2luc3RyX2xvd19wcmlvID0gWydhZGQnLCAnYW5kJywgJ2NtcCcsICdjbXBnJywgJ2NtcGwnLCAnY29uc3QnLCAnZGl2JywgJ2RvdWJsZScsICdmbG9hdCcsICdnb3RvJywgJ2lmJywgJ2ludCcsICdsb25nJywgJ21vdmUnLCAnbXVsJywgJ25lZycsICduZXcnLCAnbm9wJywgJ25vdCcsICdvcicsICdyZW0nLCAncmV0dXJuJywgJ3NobCcsICdzaHInLCAnc3B1dCcsICdzdWInLCAndGhyb3cnLCAndXNocicsICd4b3InXTtcbiAgdmFyIHNtYWxpX2luc3RyX2hpZ2hfcHJpbyA9IFsnYWdldCcsICdhcHV0JywgJ2FycmF5JywgJ2NoZWNrJywgJ2V4ZWN1dGUnLCAnZmlsbCcsICdmaWxsZWQnLCAnZ290by8xNicsICdnb3RvLzMyJywgJ2lnZXQnLCAnaW5zdGFuY2UnLCAnaW52b2tlJywgJ2lwdXQnLCAnbW9uaXRvcicsICdwYWNrZWQnLCAnc2dldCcsICdzcGFyc2UnXTtcbiAgdmFyIHNtYWxpX2tleXdvcmRzID0gWyd0cmFuc2llbnQnLCAnY29uc3RydWN0b3InLCAnYWJzdHJhY3QnLCAnZmluYWwnLCAnc3ludGhldGljJywgJ3B1YmxpYycsICdwcml2YXRlJywgJ3Byb3RlY3RlZCcsICdzdGF0aWMnLCAnYnJpZGdlJywgJ3N5c3RlbSddO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc21hbGknXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcjJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ1xcXFxzKlxcXFwuZW5kXFxcXHNbYS16QS1aMC05XSonfSxcbiAgICAgICAgICB7YmVnaW46ICdeWyBdKlxcXFwuW2EtekEtWl0qJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxcczpbYS16QS1aXzAtOV0qJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxccygnICsgc21hbGlfa2V5d29yZHMuam9pbignfCcpICsgJyknfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIHZhcmlhbnRzIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHMoJytzbWFsaV9pbnN0cl9sb3dfcHJpby5qb2luKCd8JykrJylcXFxccydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXHMoJytzbWFsaV9pbnN0cl9sb3dfcHJpby5qb2luKCd8JykrJykoKFxcXFwtfC8pW2EtekEtWjAtOV0rKStcXFxccycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzKCcrc21hbGlfaW5zdHJfaGlnaF9wcmlvLmpvaW4oJ3wnKSsnKSgoXFxcXC18LylbYS16QS1aMC05XSspKlxcXFxzJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnTFteXFwoOzpcXG5dKjsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW3ZwXVswLTldKycsXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUl9JREVOVF9SRSA9ICdbYS16XVthLXpBLVowLTlfXSonO1xuICB2YXIgQ0hBUiA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFxcXCQuezF9J1xuICB9O1xuICB2YXIgU1lNQk9MID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc3QnXSxcbiAgICBrZXl3b3JkczogJ3NlbGYgc3VwZXIgbmlsIHRydWUgZmFsc2UgdGhpc0NvbnRleHQnLCAvLyBvbmx5IDZcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCdcIicsICdcIicpLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW0EtWmEtejAtOV9dKicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFZBUl9JREVOVF9SRSArICc6JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgU1lNQk9MLFxuICAgICAgQ0hBUixcbiAgICAgIHtcbiAgICAgICAgLy8gVGhpcyBsb29rcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVlZGVkIHRvIGF2b2lkIGNvbWJpbmF0b3JpYWxcbiAgICAgICAgLy8gZXhwbG9zaW9uIHVuZGVyIFY4LiBJdCBlZmZlY3RpdmVseSBtZWFucyBgfCB2YXIxIHZhcjIgLi4uIHxgIHdpdGhcbiAgICAgICAgLy8gd2hpdGVzcGFjZSBhZGphY2VudCB0byBgfGAgYmVpbmcgb3B0aW9uYWwuXG4gICAgICAgIGJlZ2luOiAnXFxcXHxbIF0qJyArIFZBUl9JREVOVF9SRSArICcoWyBdKycgKyBWQVJfSURFTlRfUkUgKyAnKSpbIF0qXFxcXHwnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvXFx8LyxcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnKFxcXFx8WyBdKik/JyArIFZBUl9JREVOVF9SRX1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwjXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIENIQVIsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIFNZTUJPTFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21sJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIGFjY29yZGluZyB0byBEZWZpbml0aW9uIG9mIFN0YW5kYXJkIE1MIDk3ICAqL1xuICAgICAgICAnYWJzdHlwZSBhbmQgYW5kYWxzbyBhcyBjYXNlIGRhdGF0eXBlIGRvIGVsc2UgZW5kIGVxdHlwZSAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBmbiBmdW4gZnVuY3RvciBoYW5kbGUgaWYgaW4gaW5jbHVkZSBpbmZpeCBpbmZpeHIgJyArXG4gICAgICAgICdsZXQgbG9jYWwgbm9uZml4IG9mIG9wIG9wZW4gb3JlbHNlIHJhaXNlIHJlYyBzaGFyaW5nIHNpZyAnICtcbiAgICAgICAgJ3NpZ25hdHVyZSBzdHJ1Y3Qgc3RydWN0dXJlIHRoZW4gdHlwZSB2YWwgd2l0aCB3aXRodHlwZSB3aGVyZSB3aGlsZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogYnVpbHQtaW4gdHlwZXMgYWNjb3JkaW5nIHRvIGJhc2lzIGxpYnJhcnkgKi9cbiAgICAgICAgJ2FycmF5IGJvb2wgY2hhciBleG4gaW50IGxpc3Qgb3B0aW9uIG9yZGVyIHJlYWwgcmVmIHN0cmluZyBzdWJzdHJpbmcgdmVjdG9yIHVuaXQgd29yZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBOT05FIFNPTUUgTEVTUyBFUVVBTCBHUkVBVEVSIG5pbCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGxleGVtZXM6ICdbYS16X11cXFxcdyohPycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAvXFxbKFxcfFxcfCk/XFxdfFxcKFxcKS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJ1xuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjpcbiAgICAgICAgICAnXFxcXGIoMFt4WF1bYS1mQS1GMC05X10rW0xsbl0/fCcgK1xuICAgICAgICAgICcwW29PXVswLTdfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbYkJdWzAxX10rW0xsbl0/fCcgK1xuICAgICAgICAgICdbMC05XVswLTlfXSooW0xsbl18KFxcXFwuWzAtOV9dKik/KFtlRV1bLStdP1swLTlfXSspPyk/KScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bLT1dPi8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBJbiBTUUYsIGEgdmFyaWFibGUgc3RhcnQgd2l0aCBfXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXGJfK1thLXpBLVpfXVxcdyovXG4gIH07XG5cbiAgLy8gSW4gU1FGLCBhIGZ1bmN0aW9uIHNob3VsZCBmaXQgbXlUYWdfZm5jX215RnVuY3Rpb24gcGF0dGVyblxuICAvLyBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9GdW5jdGlvbnNfTGlicmFyeV8oQXJtYV8zKSNBZGRpbmdfYV9GdW5jdGlvblxuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgIGJlZ2luOiAvW2EtekEtWl1bYS16QS1aMC05XStfZm5jX1xcdyovXG4gIH07XG5cbiAgLy8gSW4gU1FGIHN0cmluZ3MsIHF1b3RlcyBtYXRjaGluZyB0aGUgc3RhcnQgYXJlIGVzY2FwZWQgYnkgYWRkaW5nIGEgY29uc2VjdXRpdmUuXG4gIC8vIEV4YW1wbGUgb2Ygc2luZ2xlIGVzY2FwZWQgcXVvdGVzOiBcIiBcIlwiIFwiIGFuZCAgJyAnJyAnLlxuICB2YXIgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIicsIHJlbGV2YW5jZTogMH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1xcJycsXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXFwnXFwnJywgcmVsZXZhbmNlOiAwfV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgLy8gbGlzdCBvZiBrZXl3b3JkcyBmcm9tOlxuICAvLyBodHRwczovL2NvbW11bml0eS5iaXN0dWRpby5jb20vd2lraS9QcmVQcm9jZXNzb3JfQ29tbWFuZHNcbiAgdmFyIFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogLyNcXHMqW2Etel0rXFxiLywgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgICdtZXRhLWtleXdvcmQnOlxuICAgICAgICAnZGVmaW5lIHVuZGVmIGlmZGVmIGlmbmRlZiBlbHNlIGVuZGlmIGluY2x1ZGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoU1RSSU5HUywge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPFteXFxuPl0qPi8sIGVuZDogLyQvLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3NxZiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdjYXNlIGNhdGNoIGRlZmF1bHQgZG8gZWxzZSBleGl0IGV4aXRXaXRoIGZvciBmb3JFYWNoIGZyb20gaWYgJyArXG4gICAgICAgICdwcml2YXRlIHN3aXRjaCB0aGVuIHRocm93IHRvIHRyeSB3YWl0VW50aWwgd2hpbGUgd2l0aCcsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2FicyBhY2NUaW1lIGFjb3MgYWN0aW9uIGFjdGlvbklEcyBhY3Rpb25LZXlzIGFjdGlvbktleXNJbWFnZXMgYWN0aW9uS2V5c05hbWVzICcgK1xuICAgICAgICAnYWN0aW9uS2V5c05hbWVzQXJyYXkgYWN0aW9uTmFtZSBhY3Rpb25QYXJhbXMgYWN0aXZhdGVBZGRvbnMgYWN0aXZhdGVkQWRkb25zIGFjdGl2YXRlS2V5ICcgK1xuICAgICAgICAnYWRkM0RFTkNvbm5lY3Rpb24gYWRkM0RFTkV2ZW50SGFuZGxlciBhZGQzREVOTGF5ZXIgYWRkQWN0aW9uIGFkZEJhY2twYWNrIGFkZEJhY2twYWNrQ2FyZ28gJyArXG4gICAgICAgICdhZGRCYWNrcGFja0NhcmdvR2xvYmFsIGFkZEJhY2twYWNrR2xvYmFsIGFkZENhbVNoYWtlIGFkZEN1cmF0b3JBZGRvbnMgYWRkQ3VyYXRvckNhbWVyYUFyZWEgJyArXG4gICAgICAgICdhZGRDdXJhdG9yRWRpdGFibGVPYmplY3RzIGFkZEN1cmF0b3JFZGl0aW5nQXJlYSBhZGRDdXJhdG9yUG9pbnRzIGFkZEVkaXRvck9iamVjdCBhZGRFdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdhZGRGb3JjZSBhZGRHb2dnbGVzIGFkZEdyb3VwSWNvbiBhZGRIYW5kZ3VuSXRlbSBhZGRIZWFkZ2VhciBhZGRJdGVtIGFkZEl0ZW1DYXJnbyAnICtcbiAgICAgICAgJ2FkZEl0ZW1DYXJnb0dsb2JhbCBhZGRJdGVtUG9vbCBhZGRJdGVtVG9CYWNrcGFjayBhZGRJdGVtVG9Vbmlmb3JtIGFkZEl0ZW1Ub1Zlc3QgYWRkTGl2ZVN0YXRzICcgK1xuICAgICAgICAnYWRkTWFnYXppbmUgYWRkTWFnYXppbmVBbW1vQ2FyZ28gYWRkTWFnYXppbmVDYXJnbyBhZGRNYWdhemluZUNhcmdvR2xvYmFsIGFkZE1hZ2F6aW5lR2xvYmFsICcgK1xuICAgICAgICAnYWRkTWFnYXppbmVQb29sIGFkZE1hZ2F6aW5lcyBhZGRNYWdhemluZVR1cnJldCBhZGRNZW51IGFkZE1lbnVJdGVtIGFkZE1pc3Npb25FdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdhZGRNUEV2ZW50SGFuZGxlciBhZGRNdXNpY0V2ZW50SGFuZGxlciBhZGRPd25lZE1pbmUgYWRkUGxheWVyU2NvcmVzIGFkZFByaW1hcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAnYWRkUHVibGljVmFyaWFibGVFdmVudEhhbmRsZXIgYWRkUmF0aW5nIGFkZFJlc291cmNlcyBhZGRTY29yZSBhZGRTY29yZVNpZGUgYWRkU2Vjb25kYXJ5V2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ2FkZFN3aXRjaGFibGVVbml0IGFkZFRlYW1NZW1iZXIgYWRkVG9SZW1haW5zQ29sbGVjdG9yIGFkZFRvcnF1ZSBhZGRVbmlmb3JtIGFkZFZlaGljbGUgYWRkVmVzdCAnICtcbiAgICAgICAgJ2FkZFdheXBvaW50IGFkZFdlYXBvbiBhZGRXZWFwb25DYXJnbyBhZGRXZWFwb25DYXJnb0dsb2JhbCBhZGRXZWFwb25HbG9iYWwgYWRkV2VhcG9uSXRlbSAnICtcbiAgICAgICAgJ2FkZFdlYXBvblBvb2wgYWRkV2VhcG9uVHVycmV0IGFkbWluIGFnZW50IGFnZW50cyBBR0xUb0FTTCBhaW1lZEF0VGFyZ2V0IGFpbVBvcyBhaXJEZW5zaXR5UlREICcgK1xuICAgICAgICAnYWlycGxhbmVUaHJvdHRsZSBhaXJwb3J0U2lkZSBBSVNGaW5pc2hIZWFsIGFsaXZlIGFsbDNERU5FbnRpdGllcyBhbGxBaXJwb3J0cyBhbGxDb250cm9scyAnICtcbiAgICAgICAgJ2FsbEN1cmF0b3JzIGFsbEN1dExheWVycyBhbGxEZWFkIGFsbERlYWRNZW4gYWxsRGlzcGxheXMgYWxsR3JvdXBzIGFsbE1hcE1hcmtlcnMgYWxsTWluZXMgJyArXG4gICAgICAgICdhbGxNaXNzaW9uT2JqZWN0cyBhbGxvdzNETW9kZSBhbGxvd0NyZXdJbkltbW9iaWxlIGFsbG93Q3VyYXRvckxvZ2ljSWdub3JlQXJlYXMgYWxsb3dEYW1hZ2UgJyArXG4gICAgICAgICdhbGxvd0RhbW1hZ2UgYWxsb3dGaWxlT3BlcmF0aW9ucyBhbGxvd0ZsZWVpbmcgYWxsb3dHZXRJbiBhbGxvd1NwcmludCBhbGxQbGF5ZXJzIGFsbFNpbXBsZU9iamVjdHMgJyArXG4gICAgICAgICdhbGxTaXRlcyBhbGxUdXJyZXRzIGFsbFVuaXRzIGFsbFVuaXRzVUFWIGFsbFZhcmlhYmxlcyBhbW1vIGFtbW9PblB5bG9uIGFuZCBhbmltYXRlIGFuaW1hdGVCYXkgJyArXG4gICAgICAgICdhbmltYXRlRG9vciBhbmltYXRlUHlsb24gYW5pbWF0ZVNvdXJjZSBhbmltYXRpb25OYW1lcyBhbmltYXRpb25QaGFzZSBhbmltYXRpb25Tb3VyY2VQaGFzZSAnICtcbiAgICAgICAgJ2FuaW1hdGlvblN0YXRlIGFwcGVuZCBhcHBseSBhcm1vcnlQb2ludHMgYXJyYXlJbnRlcnNlY3QgYXNpbiBBU0xUb0FHTCBBU0xUb0FUTCBhc3NlcnQgJyArXG4gICAgICAgICdhc3NpZ25Bc0NhcmdvIGFzc2lnbkFzQ2FyZ29JbmRleCBhc3NpZ25Bc0NvbW1hbmRlciBhc3NpZ25Bc0RyaXZlciBhc3NpZ25Bc0d1bm5lciBhc3NpZ25Bc1R1cnJldCAnICtcbiAgICAgICAgJ2Fzc2lnbkN1cmF0b3IgYXNzaWduZWRDYXJnbyBhc3NpZ25lZENvbW1hbmRlciBhc3NpZ25lZERyaXZlciBhc3NpZ25lZEd1bm5lciBhc3NpZ25lZEl0ZW1zICcgK1xuICAgICAgICAnYXNzaWduZWRUYXJnZXQgYXNzaWduZWRUZWFtIGFzc2lnbmVkVmVoaWNsZSBhc3NpZ25lZFZlaGljbGVSb2xlIGFzc2lnbkl0ZW0gYXNzaWduVGVhbSAnICtcbiAgICAgICAgJ2Fzc2lnblRvQWlycG9ydCBhdGFuIGF0YW4yIGF0ZyBBVExUb0FTTCBhdHRhY2hlZE9iamVjdCBhdHRhY2hlZE9iamVjdHMgYXR0YWNoZWRUbyBhdHRhY2hPYmplY3QgJyArXG4gICAgICAgICdhdHRhY2hUbyBhdHRhY2tFbmFibGVkIGJhY2twYWNrIGJhY2twYWNrQ2FyZ28gYmFja3BhY2tDb250YWluZXIgYmFja3BhY2tJdGVtcyBiYWNrcGFja01hZ2F6aW5lcyAnICtcbiAgICAgICAgJ2JhY2twYWNrU3BhY2VGb3IgYmVoYXZpb3VyIGJlbmNobWFyayBiaW5vY3VsYXIgYm91bmRpbmdCb3ggYm91bmRpbmdCb3hSZWFsIGJvdW5kaW5nQ2VudGVyICcgK1xuICAgICAgICAnYnJlYWtPdXQgYnJlYWtUbyBicmllZmluZ05hbWUgYnVpbGRpbmdFeGl0IGJ1aWxkaW5nUG9zIGJ1dHRvbkFjdGlvbiBidXR0b25TZXRBY3Rpb24gY2FkZXRNb2RlICcgK1xuICAgICAgICAnY2FsbCBjYWxsRXh0ZW5zaW9uIGNhbUNvbW1hbmQgY2FtQ29tbWl0IGNhbUNvbW1pdFByZXBhcmVkIGNhbUNvbW1pdHRlZCBjYW1Db25zdHVjdGlvblNldFBhcmFtcyAnICtcbiAgICAgICAgJ2NhbUNyZWF0ZSBjYW1EZXN0cm95IGNhbWVyYUVmZmVjdCBjYW1lcmFFZmZlY3RFbmFibGVIVUQgY2FtZXJhSW50ZXJlc3QgY2FtZXJhT24gY2FtZXJhVmlldyAnICtcbiAgICAgICAgJ2NhbXBhaWduQ29uZmlnRmlsZSBjYW1QcmVsb2FkIGNhbVByZWxvYWRlZCBjYW1QcmVwYXJlQmFuayBjYW1QcmVwYXJlRGlyIGNhbVByZXBhcmVEaXZlICcgK1xuICAgICAgICAnY2FtUHJlcGFyZUZvY3VzIGNhbVByZXBhcmVGb3YgY2FtUHJlcGFyZUZvdlJhbmdlIGNhbVByZXBhcmVQb3MgY2FtUHJlcGFyZVJlbFBvcyBjYW1QcmVwYXJlVGFyZ2V0ICcgK1xuICAgICAgICAnY2FtU2V0QmFuayBjYW1TZXREaXIgY2FtU2V0RGl2ZSBjYW1TZXRGb2N1cyBjYW1TZXRGb3YgY2FtU2V0Rm92UmFuZ2UgY2FtU2V0UG9zIGNhbVNldFJlbFBvcyAnICtcbiAgICAgICAgJ2NhbVNldFRhcmdldCBjYW1UYXJnZXQgY2FtVXNlTlZHIGNhbkFkZCBjYW5BZGRJdGVtVG9CYWNrcGFjayBjYW5BZGRJdGVtVG9Vbmlmb3JtIGNhbkFkZEl0ZW1Ub1Zlc3QgJyArXG4gICAgICAgICdjYW5jZWxTaW1wbGVUYXNrRGVzdGluYXRpb24gY2FuRmlyZSBjYW5Nb3ZlIGNhblNsaW5nTG9hZCBjYW5TdGFuZCBjYW5TdXNwZW5kICcgK1xuICAgICAgICAnY2FuVHJpZ2dlckR5bmFtaWNTaW11bGF0aW9uIGNhblVubG9hZEluQ29tYmF0IGNhblZlaGljbGVDYXJnbyBjYXB0aXZlIGNhcHRpdmVOdW0gY2JDaGVja2VkICcgK1xuICAgICAgICAnY2JTZXRDaGVja2VkIGNlaWwgY2hhbm5lbEVuYWJsZWQgY2hlYXRzRW5hYmxlZCBjaGVja0FJRmVhdHVyZSBjaGVja1Zpc2liaWxpdHkgY2xhc3NOYW1lICcgK1xuICAgICAgICAnY2xlYXJBbGxJdGVtc0Zyb21CYWNrcGFjayBjbGVhckJhY2twYWNrQ2FyZ28gY2xlYXJCYWNrcGFja0NhcmdvR2xvYmFsIGNsZWFyR3JvdXBJY29ucyAnICtcbiAgICAgICAgJ2NsZWFySXRlbUNhcmdvIGNsZWFySXRlbUNhcmdvR2xvYmFsIGNsZWFySXRlbVBvb2wgY2xlYXJNYWdhemluZUNhcmdvIGNsZWFyTWFnYXppbmVDYXJnb0dsb2JhbCAnICtcbiAgICAgICAgJ2NsZWFyTWFnYXppbmVQb29sIGNsZWFyT3ZlcmxheSBjbGVhclJhZGlvIGNsZWFyV2VhcG9uQ2FyZ28gY2xlYXJXZWFwb25DYXJnb0dsb2JhbCBjbGVhcldlYXBvblBvb2wgJyArXG4gICAgICAgICdjbGllbnRPd25lciBjbG9zZURpYWxvZyBjbG9zZURpc3BsYXkgY2xvc2VPdmVybGF5IGNvbGxhcHNlT2JqZWN0VHJlZSBjb2xsZWN0M0RFTkhpc3RvcnkgJyArXG4gICAgICAgICdjb2xsZWN0aXZlUlREIGNvbWJhdE1vZGUgY29tbWFuZEFydGlsbGVyeUZpcmUgY29tbWFuZENoYXQgY29tbWFuZGVyIGNvbW1hbmRGaXJlIGNvbW1hbmRGb2xsb3cgJyArXG4gICAgICAgICdjb21tYW5kRlNNIGNvbW1hbmRHZXRPdXQgY29tbWFuZGluZ01lbnUgY29tbWFuZE1vdmUgY29tbWFuZFJhZGlvIGNvbW1hbmRTdG9wICcgK1xuICAgICAgICAnY29tbWFuZFN1cHByZXNzaXZlRmlyZSBjb21tYW5kVGFyZ2V0IGNvbW1hbmRXYXRjaCBjb21tZW50IGNvbW1pdE92ZXJsYXkgY29tcGlsZSBjb21waWxlRmluYWwgJyArXG4gICAgICAgICdjb21wbGV0ZWRGU00gY29tcG9zZVRleHQgY29uZmlnQ2xhc3NlcyBjb25maWdGaWxlIGNvbmZpZ0hpZXJhcmNoeSBjb25maWdOYW1lIGNvbmZpZ1Byb3BlcnRpZXMgJyArXG4gICAgICAgICdjb25maWdTb3VyY2VBZGRvbkxpc3QgY29uZmlnU291cmNlTW9kIGNvbmZpZ1NvdXJjZU1vZExpc3QgY29uZmlybVNlbnNvclRhcmdldCAnICtcbiAgICAgICAgJ2Nvbm5lY3RUZXJtaW5hbFRvVUFWIGNvbnRyb2xzR3JvdXBDdHJsIGNvcHlGcm9tQ2xpcGJvYXJkIGNvcHlUb0NsaXBib2FyZCBjb3B5V2F5cG9pbnRzIGNvcyBjb3VudCAnICtcbiAgICAgICAgJ2NvdW50RW5lbXkgY291bnRGcmllbmRseSBjb3VudFNpZGUgY291bnRUeXBlIGNvdW50VW5rbm93biBjcmVhdGUzREVOQ29tcG9zaXRpb24gY3JlYXRlM0RFTkVudGl0eSAnICtcbiAgICAgICAgJ2NyZWF0ZUFnZW50IGNyZWF0ZUNlbnRlciBjcmVhdGVEaWFsb2cgY3JlYXRlRGlhcnlMaW5rIGNyZWF0ZURpYXJ5UmVjb3JkIGNyZWF0ZURpYXJ5U3ViamVjdCAnICtcbiAgICAgICAgJ2NyZWF0ZURpc3BsYXkgY3JlYXRlR2VhckRpYWxvZyBjcmVhdGVHcm91cCBjcmVhdGVHdWFyZGVkUG9pbnQgY3JlYXRlTG9jYXRpb24gY3JlYXRlTWFya2VyICcgK1xuICAgICAgICAnY3JlYXRlTWFya2VyTG9jYWwgY3JlYXRlTWVudSBjcmVhdGVNaW5lIGNyZWF0ZU1pc3Npb25EaXNwbGF5IGNyZWF0ZU1QQ2FtcGFpZ25EaXNwbGF5ICcgK1xuICAgICAgICAnY3JlYXRlU2ltcGxlT2JqZWN0IGNyZWF0ZVNpbXBsZVRhc2sgY3JlYXRlU2l0ZSBjcmVhdGVTb3VuZFNvdXJjZSBjcmVhdGVUYXNrIGNyZWF0ZVRlYW0gJyArXG4gICAgICAgICdjcmVhdGVUcmlnZ2VyIGNyZWF0ZVVuaXQgY3JlYXRlVmVoaWNsZSBjcmVhdGVWZWhpY2xlQ3JldyBjcmVhdGVWZWhpY2xlTG9jYWwgY3JldyBjdEFkZEhlYWRlciAnICtcbiAgICAgICAgJ2N0QWRkUm93IGN0Q2xlYXIgY3RDdXJTZWwgY3REYXRhIGN0RmluZEhlYWRlclJvd3MgY3RGaW5kUm93SGVhZGVyIGN0SGVhZGVyQ29udHJvbHMgY3RIZWFkZXJDb3VudCAnICtcbiAgICAgICAgJ2N0UmVtb3ZlSGVhZGVycyBjdFJlbW92ZVJvd3MgY3RybEFjdGl2YXRlIGN0cmxBZGRFdmVudEhhbmRsZXIgY3RybEFuZ2xlIGN0cmxBdXRvU2Nyb2xsRGVsYXkgJyArXG4gICAgICAgICdjdHJsQXV0b1Njcm9sbFJld2luZCBjdHJsQXV0b1Njcm9sbFNwZWVkIGN0cmxDaGVja2VkIGN0cmxDbGFzc05hbWUgY3RybENvbW1pdCBjdHJsQ29tbWl0dGVkICcgK1xuICAgICAgICAnY3RybENyZWF0ZSBjdHJsRGVsZXRlIGN0cmxFbmFibGUgY3RybEVuYWJsZWQgY3RybEZhZGUgY3RybEhUTUxMb2FkZWQgY3RybElEQyBjdHJsSUREICcgK1xuICAgICAgICAnY3RybE1hcEFuaW1BZGQgY3RybE1hcEFuaW1DbGVhciBjdHJsTWFwQW5pbUNvbW1pdCBjdHJsTWFwQW5pbURvbmUgY3RybE1hcEN1cnNvciBjdHJsTWFwTW91c2VPdmVyICcgK1xuICAgICAgICAnY3RybE1hcFNjYWxlIGN0cmxNYXBTY3JlZW5Ub1dvcmxkIGN0cmxNYXBXb3JsZFRvU2NyZWVuIGN0cmxNb2RlbCBjdHJsTW9kZWxEaXJBbmRVcCBjdHJsTW9kZWxTY2FsZSAnICtcbiAgICAgICAgJ2N0cmxQYXJlbnQgY3RybFBhcmVudENvbnRyb2xzR3JvdXAgY3RybFBvc2l0aW9uIGN0cmxSZW1vdmVBbGxFdmVudEhhbmRsZXJzIGN0cmxSZW1vdmVFdmVudEhhbmRsZXIgJyArXG4gICAgICAgICdjdHJsU2NhbGUgY3RybFNldEFjdGl2ZUNvbG9yIGN0cmxTZXRBbmdsZSBjdHJsU2V0QXV0b1Njcm9sbERlbGF5IGN0cmxTZXRBdXRvU2Nyb2xsUmV3aW5kICcgK1xuICAgICAgICAnY3RybFNldEF1dG9TY3JvbGxTcGVlZCBjdHJsU2V0QmFja2dyb3VuZENvbG9yIGN0cmxTZXRDaGVja2VkIGN0cmxTZXRFdmVudEhhbmRsZXIgY3RybFNldEZhZGUgJyArXG4gICAgICAgICdjdHJsU2V0Rm9jdXMgY3RybFNldEZvbnQgY3RybFNldEZvbnRIMSBjdHJsU2V0Rm9udEgxQiBjdHJsU2V0Rm9udEgyIGN0cmxTZXRGb250SDJCIGN0cmxTZXRGb250SDMgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udEgzQiBjdHJsU2V0Rm9udEg0IGN0cmxTZXRGb250SDRCIGN0cmxTZXRGb250SDUgY3RybFNldEZvbnRINUIgY3RybFNldEZvbnRINiAnICtcbiAgICAgICAgJ2N0cmxTZXRGb250SDZCIGN0cmxTZXRGb250SGVpZ2h0IGN0cmxTZXRGb250SGVpZ2h0SDEgY3RybFNldEZvbnRIZWlnaHRIMiBjdHJsU2V0Rm9udEhlaWdodEgzICcgK1xuICAgICAgICAnY3RybFNldEZvbnRIZWlnaHRINCBjdHJsU2V0Rm9udEhlaWdodEg1IGN0cmxTZXRGb250SGVpZ2h0SDYgY3RybFNldEZvbnRIZWlnaHRTZWNvbmRhcnkgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udFAgY3RybFNldEZvbnRQQiBjdHJsU2V0Rm9udFNlY29uZGFyeSBjdHJsU2V0Rm9yZWdyb3VuZENvbG9yIGN0cmxTZXRNb2RlbCAnICtcbiAgICAgICAgJ2N0cmxTZXRNb2RlbERpckFuZFVwIGN0cmxTZXRNb2RlbFNjYWxlIGN0cmxTZXRQaXhlbFByZWNpc2lvbiBjdHJsU2V0UG9zaXRpb24gY3RybFNldFNjYWxlICcgK1xuICAgICAgICAnY3RybFNldFN0cnVjdHVyZWRUZXh0IGN0cmxTZXRUZXh0IGN0cmxTZXRUZXh0Q29sb3IgY3RybFNldFRvb2x0aXAgY3RybFNldFRvb2x0aXBDb2xvckJveCAnICtcbiAgICAgICAgJ2N0cmxTZXRUb29sdGlwQ29sb3JTaGFkZSBjdHJsU2V0VG9vbHRpcENvbG9yVGV4dCBjdHJsU2hvdyBjdHJsU2hvd24gY3RybFRleHQgY3RybFRleHRIZWlnaHQgJyArXG4gICAgICAgICdjdHJsVGV4dFdpZHRoIGN0cmxUeXBlIGN0cmxWaXNpYmxlIGN0Um93Q29udHJvbHMgY3RSb3dDb3VudCBjdFNldEN1clNlbCBjdFNldERhdGEgJyArXG4gICAgICAgICdjdFNldEhlYWRlclRlbXBsYXRlIGN0U2V0Um93VGVtcGxhdGUgY3RTZXRWYWx1ZSBjdFZhbHVlIGN1cmF0b3JBZGRvbnMgY3VyYXRvckNhbWVyYSAnICtcbiAgICAgICAgJ2N1cmF0b3JDYW1lcmFBcmVhIGN1cmF0b3JDYW1lcmFBcmVhQ2VpbGluZyBjdXJhdG9yQ29lZiBjdXJhdG9yRWRpdGFibGVPYmplY3RzIGN1cmF0b3JFZGl0aW5nQXJlYSAnICtcbiAgICAgICAgJ2N1cmF0b3JFZGl0aW5nQXJlYVR5cGUgY3VyYXRvck1vdXNlT3ZlciBjdXJhdG9yUG9pbnRzIGN1cmF0b3JSZWdpc3RlcmVkT2JqZWN0cyBjdXJhdG9yU2VsZWN0ZWQgJyArXG4gICAgICAgICdjdXJhdG9yV2F5cG9pbnRDb3N0IGN1cnJlbnQzREVOT3BlcmF0aW9uIGN1cnJlbnRDaGFubmVsIGN1cnJlbnRDb21tYW5kIGN1cnJlbnRNYWdhemluZSAnICtcbiAgICAgICAgJ2N1cnJlbnRNYWdhemluZURldGFpbCBjdXJyZW50TWFnYXppbmVEZXRhaWxUdXJyZXQgY3VycmVudE1hZ2F6aW5lVHVycmV0IGN1cnJlbnRNdXp6bGUgJyArXG4gICAgICAgICdjdXJyZW50TmFtZXNwYWNlIGN1cnJlbnRUYXNrIGN1cnJlbnRUYXNrcyBjdXJyZW50VGhyb3dhYmxlIGN1cnJlbnRWaXNpb25Nb2RlIGN1cnJlbnRXYXlwb2ludCAnICtcbiAgICAgICAgJ2N1cnJlbnRXZWFwb24gY3VycmVudFdlYXBvbk1vZGUgY3VycmVudFdlYXBvblR1cnJldCBjdXJyZW50WmVyb2luZyBjdXJzb3JPYmplY3QgY3Vyc29yVGFyZ2V0ICcgK1xuICAgICAgICAnY3VzdG9tQ2hhdCBjdXN0b21SYWRpbyBjdXRGYWRlT3V0IGN1dE9iaiBjdXRSc2MgY3V0VGV4dCBkYW1hZ2UgZGF0ZSBkYXRlVG9OdW1iZXIgZGF5dGltZSAnICtcbiAgICAgICAgJ2RlQWN0aXZhdGVLZXkgZGVicmllZmluZ1RleHQgZGVidWdGU00gZGVidWdMb2cgZGVnIGRlbGV0ZTNERU5FbnRpdGllcyBkZWxldGVBdCBkZWxldGVDZW50ZXIgJyArXG4gICAgICAgICdkZWxldGVDb2xsZWN0aW9uIGRlbGV0ZUVkaXRvck9iamVjdCBkZWxldGVHcm91cCBkZWxldGVHcm91cFdoZW5FbXB0eSBkZWxldGVJZGVudGl0eSAnICtcbiAgICAgICAgJ2RlbGV0ZUxvY2F0aW9uIGRlbGV0ZU1hcmtlciBkZWxldGVNYXJrZXJMb2NhbCBkZWxldGVSYW5nZSBkZWxldGVSZXNvdXJjZXMgZGVsZXRlU2l0ZSBkZWxldGVTdGF0dXMgJyArXG4gICAgICAgICdkZWxldGVUZWFtIGRlbGV0ZVZlaGljbGUgZGVsZXRlVmVoaWNsZUNyZXcgZGVsZXRlV2F5cG9pbnQgZGV0YWNoIGRldGVjdGVkTWluZXMgJyArXG4gICAgICAgICdkaWFnX2FjdGl2ZU1pc3Npb25GU01zIGRpYWdfYWN0aXZlU2NyaXB0cyBkaWFnX2FjdGl2ZVNRRlNjcmlwdHMgZGlhZ19hY3RpdmVTUVNTY3JpcHRzICcgK1xuICAgICAgICAnZGlhZ19jYXB0dXJlRnJhbWUgZGlhZ19jYXB0dXJlRnJhbWVUb0ZpbGUgZGlhZ19jYXB0dXJlU2xvd0ZyYW1lIGRpYWdfY29kZVBlcmZvcm1hbmNlICcgK1xuICAgICAgICAnZGlhZ19kcmF3TW9kZSBkaWFnX2VuYWJsZSBkaWFnX2VuYWJsZWQgZGlhZ19mcHMgZGlhZ19mcHNNaW4gZGlhZ19mcmFtZU5vIGRpYWdfbGlnaHROZXdMb2FkICcgK1xuICAgICAgICAnZGlhZ19saXN0IGRpYWdfbG9nIGRpYWdfbG9nU2xvd0ZyYW1lIGRpYWdfbWVyZ2VDb25maWdGaWxlIGRpYWdfcmVjb3JkVHVycmV0TGltaXRzICcgK1xuICAgICAgICAnZGlhZ19zZXRMaWdodE5ldyBkaWFnX3RpY2tUaW1lIGRpYWdfdG9nZ2xlIGRpYWxvZyBkaWFyeVN1YmplY3RFeGlzdHMgZGlkSklQIGRpZEpJUE93bmVyICcgK1xuICAgICAgICAnZGlmZmljdWx0eSBkaWZmaWN1bHR5RW5hYmxlZCBkaWZmaWN1bHR5RW5hYmxlZFJURCBkaWZmaWN1bHR5T3B0aW9uIGRpcmVjdGlvbiBkaXJlY3RTYXkgZGlzYWJsZUFJICcgK1xuICAgICAgICAnZGlzYWJsZUNvbGxpc2lvbldpdGggZGlzYWJsZUNvbnZlcnNhdGlvbiBkaXNhYmxlRGVicmllZmluZ1N0YXRzIGRpc2FibGVNYXBJbmRpY2F0b3JzICcgK1xuICAgICAgICAnZGlzYWJsZU5WR0VxdWlwbWVudCBkaXNhYmxlUmVtb3RlU2Vuc29ycyBkaXNhYmxlU2VyaWFsaXphdGlvbiBkaXNhYmxlVElFcXVpcG1lbnQgJyArXG4gICAgICAgICdkaXNhYmxlVUFWQ29ubmVjdGFiaWxpdHkgZGlzYWJsZVVzZXJJbnB1dCBkaXNwbGF5QWRkRXZlbnRIYW5kbGVyIGRpc3BsYXlDdHJsIGRpc3BsYXlQYXJlbnQgJyArXG4gICAgICAgICdkaXNwbGF5UmVtb3ZlQWxsRXZlbnRIYW5kbGVycyBkaXNwbGF5UmVtb3ZlRXZlbnRIYW5kbGVyIGRpc3BsYXlTZXRFdmVudEhhbmRsZXIgZGlzc29sdmVUZWFtICcgK1xuICAgICAgICAnZGlzdGFuY2UgZGlzdGFuY2UyRCBkaXN0YW5jZVNxciBkaXN0cmlidXRpb25SZWdpb24gZG8zREVOQWN0aW9uIGRvQXJ0aWxsZXJ5RmlyZSBkb0ZpcmUgZG9Gb2xsb3cgJyArXG4gICAgICAgICdkb0ZTTSBkb0dldE91dCBkb01vdmUgZG9vclBoYXNlIGRvU3RvcCBkb1N1cHByZXNzaXZlRmlyZSBkb1RhcmdldCBkb1dhdGNoIGRyYXdBcnJvdyBkcmF3RWxsaXBzZSAnICtcbiAgICAgICAgJ2RyYXdJY29uIGRyYXdJY29uM0QgZHJhd0xpbmUgZHJhd0xpbmUzRCBkcmF3TGluayBkcmF3TG9jYXRpb24gZHJhd1BvbHlnb24gZHJhd1JlY3RhbmdsZSAnICtcbiAgICAgICAgJ2RyYXdUcmlhbmdsZSBkcml2ZXIgZHJvcCBkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlIGR5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2VDb2VmICcgK1xuICAgICAgICAnZHluYW1pY1NpbXVsYXRpb25FbmFibGVkIGR5bmFtaWNTaW11bGF0aW9uU3lzdGVtRW5hYmxlZCBlY2hvIGVkaXQzREVOTWlzc2lvbkF0dHJpYnV0ZXMgZWRpdE9iamVjdCAnICtcbiAgICAgICAgJ2VkaXRvclNldEV2ZW50SGFuZGxlciBlZmZlY3RpdmVDb21tYW5kZXIgZW1wdHlQb3NpdGlvbnMgZW5hYmxlQUkgZW5hYmxlQUlGZWF0dXJlICcgK1xuICAgICAgICAnZW5hYmxlQWltUHJlY2lzaW9uIGVuYWJsZUF0dGFjayBlbmFibGVBdWRpb0ZlYXR1cmUgZW5hYmxlQXV0b1N0YXJ0VXBSVEQgZW5hYmxlQXV0b1RyaW1SVEQgJyArXG4gICAgICAgICdlbmFibGVDYW1TaGFrZSBlbmFibGVDYXVzdGljcyBlbmFibGVDaGFubmVsIGVuYWJsZUNvbGxpc2lvbldpdGggZW5hYmxlQ29waWxvdCAnICtcbiAgICAgICAgJ2VuYWJsZURlYnJpZWZpbmdTdGF0cyBlbmFibGVEaWFnTGVnZW5kIGVuYWJsZUR5bmFtaWNTaW11bGF0aW9uIGVuYWJsZUR5bmFtaWNTaW11bGF0aW9uU3lzdGVtICcgK1xuICAgICAgICAnZW5hYmxlRW5kRGlhbG9nIGVuYWJsZUVuZ2luZUFydGlsbGVyeSBlbmFibGVFbnZpcm9ubWVudCBlbmFibGVGYXRpZ3VlIGVuYWJsZUd1bkxpZ2h0cyAnICtcbiAgICAgICAgJ2VuYWJsZUluZm9QYW5lbENvbXBvbmVudCBlbmFibGVJUkxhc2VycyBlbmFibGVNaW1pY3MgZW5hYmxlUGVyc29uVHVycmV0IGVuYWJsZVJhZGlvIGVuYWJsZVJlbG9hZCAnICtcbiAgICAgICAgJ2VuYWJsZVJvcGVBdHRhY2ggZW5hYmxlU2F0Tm9ybWFsT25EZXRhaWwgZW5hYmxlU2F2aW5nIGVuYWJsZVNlbnRlbmNlcyBlbmFibGVTaW11bGF0aW9uICcgK1xuICAgICAgICAnZW5hYmxlU2ltdWxhdGlvbkdsb2JhbCBlbmFibGVTdGFtaW5hIGVuYWJsZVRlYW1Td2l0Y2ggZW5hYmxlVHJhZmZpYyBlbmFibGVVQVZDb25uZWN0YWJpbGl0eSAnICtcbiAgICAgICAgJ2VuYWJsZVVBVldheXBvaW50cyBlbmFibGVWZWhpY2xlQ2FyZ28gZW5hYmxlVmVoaWNsZVNlbnNvciBlbmFibGVXZWFwb25EaXNhc3NlbWJseSAnICtcbiAgICAgICAgJ2VuZExvYWRpbmdTY3JlZW4gZW5kTWlzc2lvbiBlbmdpbmVPbiBlbmdpbmVzSXNPblJURCBlbmdpbmVzUnBtUlREIGVuZ2luZXNUb3JxdWVSVEQgZW50aXRpZXMgJyArXG4gICAgICAgICdlbnZpcm9ubWVudEVuYWJsZWQgZXN0aW1hdGVkRW5kU2VydmVyVGltZSBlc3RpbWF0ZWRUaW1lTGVmdCBldmFsT2JqZWN0QXJndW1lbnQgZXZlcnlCYWNrcGFjayAnICtcbiAgICAgICAgJ2V2ZXJ5Q29udGFpbmVyIGV4ZWMgZXhlY0VkaXRvclNjcmlwdCBleGVjRlNNIGV4ZWNWTSBleHAgZXhwZWN0ZWREZXN0aW5hdGlvbiBleHBvcnRKSVBNZXNzYWdlcyAnICtcbiAgICAgICAgJ2V5ZURpcmVjdGlvbiBleWVQb3MgZmFjZSBmYWN0aW9uIGZhZGVNdXNpYyBmYWRlUmFkaW8gZmFkZVNvdW5kIGZhZGVTcGVlY2ggZmFpbE1pc3Npb24gJyArXG4gICAgICAgICdmaWxsV2VhcG9uc0Zyb21Qb29sIGZpbmQgZmluZENvdmVyIGZpbmREaXNwbGF5IGZpbmRFZGl0b3JPYmplY3QgZmluZEVtcHR5UG9zaXRpb24gJyArXG4gICAgICAgICdmaW5kRW1wdHlQb3NpdGlvblJlYWR5IGZpbmRJZiBmaW5kTmVhcmVzdEVuZW15IGZpbmlzaE1pc3Npb25Jbml0IGZpbml0ZSBmaXJlIGZpcmVBdFRhcmdldCAnICtcbiAgICAgICAgJ2ZpcnN0QmFja3BhY2sgZmxhZyBmbGFnQW5pbWF0aW9uUGhhc2UgZmxhZ093bmVyIGZsYWdTaWRlIGZsYWdUZXh0dXJlIGZsZWVpbmcgZmxvb3IgZmx5SW5IZWlnaHQgJyArXG4gICAgICAgICdmbHlJbkhlaWdodEFTTCBmb2cgZm9nRm9yZWNhc3QgZm9nUGFyYW1zIGZvcmNlQWRkVW5pZm9ybSBmb3JjZWRNYXAgZm9yY2VFbmQgZm9yY2VGbGFnVGV4dHVyZSAnICtcbiAgICAgICAgJ2ZvcmNlRm9sbG93Um9hZCBmb3JjZU1hcCBmb3JjZVJlc3Bhd24gZm9yY2VTcGVlZCBmb3JjZVdhbGsgZm9yY2VXZWFwb25GaXJlIGZvcmNlV2VhdGhlckNoYW5nZSAnICtcbiAgICAgICAgJ2ZvckVhY2hNZW1iZXIgZm9yRWFjaE1lbWJlckFnZW50IGZvckVhY2hNZW1iZXJUZWFtIGZvcmdldFRhcmdldCBmb3JtYXQgZm9ybWF0aW9uICcgK1xuICAgICAgICAnZm9ybWF0aW9uRGlyZWN0aW9uIGZvcm1hdGlvbkxlYWRlciBmb3JtYXRpb25NZW1iZXJzIGZvcm1hdGlvblBvc2l0aW9uIGZvcm1hdGlvblRhc2sgZm9ybWF0VGV4dCAnICtcbiAgICAgICAgJ2Zvcm1MZWFkZXIgZnJlZUxvb2sgZnJvbUVkaXRvciBmdWVsIGZ1bGxDcmV3IGdlYXJJRENBbW1vQ291bnQgZ2VhclNsb3RBbW1vQ291bnQgZ2VhclNsb3REYXRhICcgK1xuICAgICAgICAnZ2V0M0RFTkFjdGlvblN0YXRlIGdldDNERU5BdHRyaWJ1dGUgZ2V0M0RFTkNhbWVyYSBnZXQzREVOQ29ubmVjdGlvbnMgZ2V0M0RFTkVudGl0eSAnICtcbiAgICAgICAgJ2dldDNERU5FbnRpdHlJRCBnZXQzREVOR3JpZCBnZXQzREVOSWNvbnNWaXNpYmxlIGdldDNERU5MYXllckVudGl0aWVzIGdldDNERU5MaW5lc1Zpc2libGUgJyArXG4gICAgICAgICdnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZSBnZXQzREVOTW91c2VPdmVyIGdldDNERU5TZWxlY3RlZCBnZXRBaW1pbmdDb2VmIGdldEFsbEVudlNvdW5kQ29udHJvbGxlcnMgJyArXG4gICAgICAgICdnZXRBbGxIaXRQb2ludHNEYW1hZ2UgZ2V0QWxsT3duZWRNaW5lcyBnZXRBbGxTb3VuZENvbnRyb2xsZXJzIGdldEFtbW9DYXJnbyBnZXRBbmltQWltUHJlY2lzaW9uICcgK1xuICAgICAgICAnZ2V0QW5pbVNwZWVkQ29lZiBnZXRBcnJheSBnZXRBcnRpbGxlcnlBbW1vIGdldEFydGlsbGVyeUNvbXB1dGVyU2V0dGluZ3MgZ2V0QXJ0aWxsZXJ5RVRBICcgK1xuICAgICAgICAnZ2V0QXNzaWduZWRDdXJhdG9yTG9naWMgZ2V0QXNzaWduZWRDdXJhdG9yVW5pdCBnZXRCYWNrcGFja0NhcmdvIGdldEJsZWVkaW5nUmVtYWluaW5nICcgK1xuICAgICAgICAnZ2V0QnVybmluZ1ZhbHVlIGdldENhbWVyYVZpZXdEaXJlY3Rpb24gZ2V0Q2FyZ29JbmRleCBnZXRDZW50ZXJPZk1hc3MgZ2V0Q2xpZW50U3RhdGUgJyArXG4gICAgICAgICdnZXRDbGllbnRTdGF0ZU51bWJlciBnZXRDb21wYXRpYmxlUHlsb25NYWdhemluZXMgZ2V0Q29ubmVjdGVkVUFWIGdldENvbnRhaW5lck1heExvYWQgJyArXG4gICAgICAgICdnZXRDdXJzb3JPYmplY3RQYXJhbXMgZ2V0Q3VzdG9tQWltQ29lZiBnZXREYW1tYWdlIGdldERlc2NyaXB0aW9uIGdldERpciBnZXREaXJWaXN1YWwgJyArXG4gICAgICAgICdnZXRETENBc3NldHNVc2FnZSBnZXRETENBc3NldHNVc2FnZUJ5TmFtZSBnZXRETENzIGdldEVkaXRvckNhbWVyYSBnZXRFZGl0b3JNb2RlICcgK1xuICAgICAgICAnZ2V0RWRpdG9yT2JqZWN0U2NvcGUgZ2V0RWxldmF0aW9uT2Zmc2V0IGdldEVudlNvdW5kQ29udHJvbGxlciBnZXRGYXRpZ3VlIGdldEZvcmNlZEZsYWdUZXh0dXJlICcgK1xuICAgICAgICAnZ2V0RnJpZW5kIGdldEZTTVZhcmlhYmxlIGdldEZ1ZWxDYXJnbyBnZXRHcm91cEljb24gZ2V0R3JvdXBJY29uUGFyYW1zIGdldEdyb3VwSWNvbnMgZ2V0SGlkZUZyb20gJyArXG4gICAgICAgICdnZXRIaXQgZ2V0SGl0SW5kZXggZ2V0SGl0UG9pbnREYW1hZ2UgZ2V0SXRlbUNhcmdvIGdldE1hZ2F6aW5lQ2FyZ28gZ2V0TWFya2VyQ29sb3IgZ2V0TWFya2VyUG9zICcgK1xuICAgICAgICAnZ2V0TWFya2VyU2l6ZSBnZXRNYXJrZXJUeXBlIGdldE1hc3MgZ2V0TWlzc2lvbkNvbmZpZyBnZXRNaXNzaW9uQ29uZmlnVmFsdWUgZ2V0TWlzc2lvbkRMQ3MgJyArXG4gICAgICAgICdnZXRNaXNzaW9uTGF5ZXJFbnRpdGllcyBnZXRNb2RlbEluZm8gZ2V0TW91c2VQb3NpdGlvbiBnZXRNdXNpY1BsYXllZFRpbWUgZ2V0TnVtYmVyICcgK1xuICAgICAgICAnZ2V0T2JqZWN0QXJndW1lbnQgZ2V0T2JqZWN0Q2hpbGRyZW4gZ2V0T2JqZWN0RExDIGdldE9iamVjdE1hdGVyaWFscyBnZXRPYmplY3RQcm94eSAnICtcbiAgICAgICAgJ2dldE9iamVjdFRleHR1cmVzIGdldE9iamVjdFR5cGUgZ2V0T2JqZWN0Vmlld0Rpc3RhbmNlIGdldE94eWdlblJlbWFpbmluZyBnZXRQZXJzb25Vc2VkRExDcyAnICtcbiAgICAgICAgJ2dldFBpbG90Q2FtZXJhRGlyZWN0aW9uIGdldFBpbG90Q2FtZXJhUG9zaXRpb24gZ2V0UGlsb3RDYW1lcmFSb3RhdGlvbiBnZXRQaWxvdENhbWVyYVRhcmdldCAnICtcbiAgICAgICAgJ2dldFBsYXRlTnVtYmVyIGdldFBsYXllckNoYW5uZWwgZ2V0UGxheWVyU2NvcmVzIGdldFBsYXllclVJRCBnZXRQb3MgZ2V0UG9zQVNMIGdldFBvc0FTTFZpc3VhbCAnICtcbiAgICAgICAgJ2dldFBvc0FTTFcgZ2V0UG9zQVRMIGdldFBvc0FUTFZpc3VhbCBnZXRQb3NWaXN1YWwgZ2V0UG9zV29ybGQgZ2V0UHlsb25NYWdhemluZXMgZ2V0UmVsRGlyICcgK1xuICAgICAgICAnZ2V0UmVsUG9zIGdldFJlbW90ZVNlbnNvcnNEaXNhYmxlZCBnZXRSZXBhaXJDYXJnbyBnZXRSZXNvbHV0aW9uIGdldFNoYWRvd0Rpc3RhbmNlIGdldFNob3RQYXJlbnRzICcgK1xuICAgICAgICAnZ2V0U2xpbmdMb2FkIGdldFNvdW5kQ29udHJvbGxlciBnZXRTb3VuZENvbnRyb2xsZXJSZXN1bHQgZ2V0U3BlZWQgZ2V0U3RhbWluYSBnZXRTdGF0VmFsdWUgJyArXG4gICAgICAgICdnZXRTdXBwcmVzc2lvbiBnZXRUZXJyYWluR3JpZCBnZXRUZXJyYWluSGVpZ2h0QVNMIGdldFRleHQgZ2V0VG90YWxETENVc2FnZVRpbWUgZ2V0VW5pdExvYWRvdXQgJyArXG4gICAgICAgICdnZXRVbml0VHJhaXQgZ2V0VXNlck1GRFRleHQgZ2V0VXNlck1GRHZhbHVlIGdldFZhcmlhYmxlIGdldFZlaGljbGVDYXJnbyBnZXRXZWFwb25DYXJnbyAnICtcbiAgICAgICAgJ2dldFdlYXBvblN3YXkgZ2V0V2luZ3NPcmllbnRhdGlvblJURCBnZXRXaW5nc1Bvc2l0aW9uUlREIGdldFdQUG9zIGdsYW5jZUF0IGdsb2JhbENoYXQgZ2xvYmFsUmFkaW8gJyArXG4gICAgICAgICdnb2dnbGVzIGdvdG8gZ3JvdXAgZ3JvdXBDaGF0IGdyb3VwRnJvbU5ldElkIGdyb3VwSWNvblNlbGVjdGFibGUgZ3JvdXBJY29uc1Zpc2libGUgZ3JvdXBJZCAnICtcbiAgICAgICAgJ2dyb3VwT3duZXIgZ3JvdXBSYWRpbyBncm91cFNlbGVjdGVkVW5pdHMgZ3JvdXBTZWxlY3RVbml0IGd1bm5lciBndXN0cyBoYWx0IGhhbmRndW5JdGVtcyAnICtcbiAgICAgICAgJ2hhbmRndW5NYWdhemluZSBoYW5kZ3VuV2VhcG9uIGhhbmRzSGl0IGhhc0ludGVyZmFjZSBoYXNQaWxvdENhbWVyYSBoYXNXZWFwb24gaGNBbGxHcm91cHMgJyArXG4gICAgICAgICdoY0dyb3VwUGFyYW1zIGhjTGVhZGVyIGhjUmVtb3ZlQWxsR3JvdXBzIGhjUmVtb3ZlR3JvdXAgaGNTZWxlY3RlZCBoY1NlbGVjdEdyb3VwIGhjU2V0R3JvdXAgJyArXG4gICAgICAgICdoY1Nob3dCYXIgaGNTaG93bkJhciBoZWFkZ2VhciBoaWRlQm9keSBoaWRlT2JqZWN0IGhpZGVPYmplY3RHbG9iYWwgaGlkZVNlbGVjdGlvbiBoaW50IGhpbnRDICcgK1xuICAgICAgICAnaGludENhZGV0IGhpbnRTaWxlbnQgaG1kIGhvc3RNaXNzaW9uIGh0bWxMb2FkIEhVRE1vdmVtZW50TGV2ZWxzIGh1bWlkaXR5IGltYWdlIGltcG9ydEFsbEdyb3VwcyAnICtcbiAgICAgICAgJ2ltcG9ydGFuY2UgaW4gaW5BcmVhIGluQXJlYUFycmF5IGluY2FwYWNpdGF0ZWRTdGF0ZSBpbmZsYW1lIGluZmxhbWVkIGluZm9QYW5lbCAnICtcbiAgICAgICAgJ2luZm9QYW5lbENvbXBvbmVudEVuYWJsZWQgaW5mb1BhbmVsQ29tcG9uZW50cyBpbmZvUGFuZWxzIGluR2FtZVVJU2V0RXZlbnRIYW5kbGVyIGluaGVyaXRzRnJvbSAnICtcbiAgICAgICAgJ2luaXRBbWJpZW50TGlmZSBpblBvbHlnb24gaW5wdXRBY3Rpb24gaW5SYW5nZU9mQXJ0aWxsZXJ5IGluc2VydEVkaXRvck9iamVjdCBpbnRlcnNlY3QgaXMzREVOICcgK1xuICAgICAgICAnaXMzREVOTXVsdGlwbGF5ZXIgaXNBYmxlVG9CcmVhdGhlIGlzQWdlbnQgaXNBcnJheSBpc0F1dG9Ib3Zlck9uIGlzQXV0b25vbW91cyBpc0F1dG90ZXN0ICcgK1xuICAgICAgICAnaXNCbGVlZGluZyBpc0J1cm5pbmcgaXNDbGFzcyBpc0NvbGxpc2lvbkxpZ2h0T24gaXNDb3BpbG90RW5hYmxlZCBpc0RhbWFnZUFsbG93ZWQgaXNEZWRpY2F0ZWQgJyArXG4gICAgICAgICdpc0RMQ0F2YWlsYWJsZSBpc0VuZ2luZU9uIGlzRXF1YWxUbyBpc0VxdWFsVHlwZSBpc0VxdWFsVHlwZUFsbCBpc0VxdWFsVHlwZUFueSBpc0VxdWFsVHlwZUFycmF5ICcgK1xuICAgICAgICAnaXNFcXVhbFR5cGVQYXJhbXMgaXNGaWxlUGF0Y2hpbmdFbmFibGVkIGlzRmxhc2hsaWdodE9uIGlzRmxhdEVtcHR5IGlzRm9yY2VkV2FsayBpc0Zvcm1hdGlvbkxlYWRlciAnICtcbiAgICAgICAgJ2lzR3JvdXBEZWxldGVkV2hlbkVtcHR5IGlzSGlkZGVuIGlzSW5SZW1haW5zQ29sbGVjdG9yIGlzSW5zdHJ1Y3RvckZpZ3VyZUVuYWJsZWQgaXNJUkxhc2VyT24gJyArXG4gICAgICAgICdpc0tleUFjdGl2ZSBpc0tpbmRPZiBpc0xhc2VyT24gaXNMaWdodE9uIGlzTG9jYWxpemVkIGlzTWFudWFsRmlyZSBpc01hcmtlZEZvckNvbGxlY3Rpb24gJyArXG4gICAgICAgICdpc011bHRpcGxheWVyIGlzTXVsdGlwbGF5ZXJTb2xvIGlzTmlsIGlzTnVsbCBpc051bWJlciBpc09iamVjdEhpZGRlbiBpc09iamVjdFJURCBpc09uUm9hZCAnICtcbiAgICAgICAgJ2lzUGlwRW5hYmxlZCBpc1BsYXllciBpc1JlYWxUaW1lIGlzUmVtb3RlRXhlY3V0ZWQgaXNSZW1vdGVFeGVjdXRlZEpJUCBpc1NlcnZlciBpc1Nob3dpbmczREljb25zICcgK1xuICAgICAgICAnaXNTaW1wbGVPYmplY3QgaXNTcHJpbnRBbGxvd2VkIGlzU3RhbWluYUVuYWJsZWQgaXNTdGVhbU1pc3Npb24gaXNTdHJlYW1GcmllbmRseVVJRW5hYmxlZCBpc1RleHQgJyArXG4gICAgICAgICdpc1RvdWNoaW5nR3JvdW5kIGlzVHVybmVkT3V0IGlzVHV0SGludHNFbmFibGVkIGlzVUFWQ29ubmVjdGFibGUgaXNVQVZDb25uZWN0ZWQgaXNVSUNvbnRleHQgJyArXG4gICAgICAgICdpc1VuaWZvcm1BbGxvd2VkIGlzVmVoaWNsZUNhcmdvIGlzVmVoaWNsZVJhZGFyT24gaXNWZWhpY2xlU2Vuc29yRW5hYmxlZCBpc1dhbGtpbmcgJyArXG4gICAgICAgICdpc1dlYXBvbkRlcGxveWVkIGlzV2VhcG9uUmVzdGVkIGl0ZW1DYXJnbyBpdGVtcyBpdGVtc1dpdGhNYWdhemluZXMgam9pbiBqb2luQXMgam9pbkFzU2lsZW50ICcgK1xuICAgICAgICAnam9pblNpbGVudCBqb2luU3RyaW5nIGtiQWRkRGF0YWJhc2Uga2JBZGREYXRhYmFzZVRhcmdldHMga2JBZGRUb3BpYyBrYkhhc1RvcGljIGtiUmVhY3QgJyArXG4gICAgICAgICdrYlJlbW92ZVRvcGljIGtiVGVsbCBrYldhc1NhaWQga2V5SW1hZ2Uga2V5TmFtZSBrbm93c0Fib3V0IGxhbmQgbGFuZEF0IGxhbmRSZXN1bHQgbGFuZ3VhZ2UgJyArXG4gICAgICAgICdsYXNlclRhcmdldCBsYkFkZCBsYkNsZWFyIGxiQ29sb3IgbGJDb2xvclJpZ2h0IGxiQ3VyU2VsIGxiRGF0YSBsYkRlbGV0ZSBsYklzU2VsZWN0ZWQgbGJQaWN0dXJlICcgK1xuICAgICAgICAnbGJQaWN0dXJlUmlnaHQgbGJTZWxlY3Rpb24gbGJTZXRDb2xvciBsYlNldENvbG9yUmlnaHQgbGJTZXRDdXJTZWwgbGJTZXREYXRhIGxiU2V0UGljdHVyZSAnICtcbiAgICAgICAgJ2xiU2V0UGljdHVyZUNvbG9yIGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWQgbGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCBsYlNldFBpY3R1cmVSaWdodCAnICtcbiAgICAgICAgJ2xiU2V0UGljdHVyZVJpZ2h0Q29sb3IgbGJTZXRQaWN0dXJlUmlnaHRDb2xvckRpc2FibGVkIGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JTZWxlY3RlZCAnICtcbiAgICAgICAgJ2xiU2V0U2VsZWN0Q29sb3IgbGJTZXRTZWxlY3RDb2xvclJpZ2h0IGxiU2V0U2VsZWN0ZWQgbGJTZXRUZXh0IGxiU2V0VGV4dFJpZ2h0IGxiU2V0VG9vbHRpcCAnICtcbiAgICAgICAgJ2xiU2V0VmFsdWUgbGJTaXplIGxiU29ydCBsYlNvcnRCeVZhbHVlIGxiVGV4dCBsYlRleHRSaWdodCBsYlZhbHVlIGxlYWRlciBsZWFkZXJib2FyZERlSW5pdCAnICtcbiAgICAgICAgJ2xlYWRlcmJvYXJkR2V0Um93cyBsZWFkZXJib2FyZEluaXQgbGVhZGVyYm9hcmRSZXF1ZXN0Um93c0ZyaWVuZHMgbGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlICcgK1xuICAgICAgICAnbGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlS2VlcEJlc3QgbGVhZGVyYm9hcmRTdGF0ZSBsZWF2ZVZlaGljbGUgbGlicmFyeUNyZWRpdHMgJyArXG4gICAgICAgICdsaWJyYXJ5RGlzY2xhaW1lcnMgbGlmZVN0YXRlIGxpZ2h0QXR0YWNoT2JqZWN0IGxpZ2h0RGV0YWNoT2JqZWN0IGxpZ2h0SXNPbiBsaWdodG5pbmdzIGxpbWl0U3BlZWQgJyArXG4gICAgICAgICdsaW5lYXJDb252ZXJzaW9uIGxpbmVJbnRlcnNlY3RzIGxpbmVJbnRlcnNlY3RzT2JqcyBsaW5lSW50ZXJzZWN0c1N1cmZhY2VzIGxpbmVJbnRlcnNlY3RzV2l0aCAnICtcbiAgICAgICAgJ2xpbmtJdGVtIGxpc3QgbGlzdE9iamVjdHMgbGlzdFJlbW90ZVRhcmdldHMgbGlzdFZlaGljbGVTZW5zb3JzIGxuIGxuYkFkZEFycmF5IGxuYkFkZENvbHVtbiAnICtcbiAgICAgICAgJ2xuYkFkZFJvdyBsbmJDbGVhciBsbmJDb2xvciBsbmJDdXJTZWxSb3cgbG5iRGF0YSBsbmJEZWxldGVDb2x1bW4gbG5iRGVsZXRlUm93ICcgK1xuICAgICAgICAnbG5iR2V0Q29sdW1uc1Bvc2l0aW9uIGxuYlBpY3R1cmUgbG5iU2V0Q29sb3IgbG5iU2V0Q29sdW1uc1BvcyBsbmJTZXRDdXJTZWxSb3cgbG5iU2V0RGF0YSAnICtcbiAgICAgICAgJ2xuYlNldFBpY3R1cmUgbG5iU2V0VGV4dCBsbmJTZXRWYWx1ZSBsbmJTaXplIGxuYlNvcnQgbG5iU29ydEJ5VmFsdWUgbG5iVGV4dCBsbmJWYWx1ZSBsb2FkIGxvYWRBYnMgJyArXG4gICAgICAgICdsb2FkQmFja3BhY2sgbG9hZEZpbGUgbG9hZEdhbWUgbG9hZElkZW50aXR5IGxvYWRNYWdhemluZSBsb2FkT3ZlcmxheSBsb2FkU3RhdHVzIGxvYWRVbmlmb3JtICcgK1xuICAgICAgICAnbG9hZFZlc3QgbG9jYWwgbG9jYWxpemUgbG9jYXRpb25Qb3NpdGlvbiBsb2NrIGxvY2tDYW1lcmFUbyBsb2NrQ2FyZ28gbG9ja0RyaXZlciBsb2NrZWQgJyArXG4gICAgICAgICdsb2NrZWRDYXJnbyBsb2NrZWREcml2ZXIgbG9ja2VkVHVycmV0IGxvY2tJZGVudGl0eSBsb2NrVHVycmV0IGxvY2tXUCBsb2cgbG9nRW50aXRpZXMgbG9nTmV0d29yayAnICtcbiAgICAgICAgJ2xvZ05ldHdvcmtUZXJtaW5hdGUgbG9va0F0IGxvb2tBdFBvcyBtYWdhemluZUNhcmdvIG1hZ2F6aW5lcyBtYWdhemluZXNBbGxUdXJyZXRzIG1hZ2F6aW5lc0FtbW8gJyArXG4gICAgICAgICdtYWdhemluZXNBbW1vQ2FyZ28gbWFnYXppbmVzQW1tb0Z1bGwgbWFnYXppbmVzRGV0YWlsIG1hZ2F6aW5lc0RldGFpbEJhY2twYWNrICcgK1xuICAgICAgICAnbWFnYXppbmVzRGV0YWlsVW5pZm9ybSBtYWdhemluZXNEZXRhaWxWZXN0IG1hZ2F6aW5lc1R1cnJldCBtYWdhemluZVR1cnJldEFtbW8gbWFwQW5pbUFkZCAnICtcbiAgICAgICAgJ21hcEFuaW1DbGVhciBtYXBBbmltQ29tbWl0IG1hcEFuaW1Eb25lIG1hcENlbnRlck9uQ2FtZXJhIG1hcEdyaWRQb3NpdGlvbiBtYXJrQXNGaW5pc2hlZE9uU3RlYW0gJyArXG4gICAgICAgICdtYXJrZXJBbHBoYSBtYXJrZXJCcnVzaCBtYXJrZXJDb2xvciBtYXJrZXJEaXIgbWFya2VyUG9zIG1hcmtlclNoYXBlIG1hcmtlclNpemUgbWFya2VyVGV4dCAnICtcbiAgICAgICAgJ21hcmtlclR5cGUgbWF4IG1lbWJlcnMgbWVudUFjdGlvbiBtZW51QWRkIG1lbnVDaGVja2VkIG1lbnVDbGVhciBtZW51Q29sbGFwc2UgbWVudURhdGEgbWVudURlbGV0ZSAnICtcbiAgICAgICAgJ21lbnVFbmFibGUgbWVudUVuYWJsZWQgbWVudUV4cGFuZCBtZW51SG92ZXIgbWVudVBpY3R1cmUgbWVudVNldEFjdGlvbiBtZW51U2V0Q2hlY2sgbWVudVNldERhdGEgJyArXG4gICAgICAgICdtZW51U2V0UGljdHVyZSBtZW51U2V0VmFsdWUgbWVudVNob3J0Y3V0IG1lbnVTaG9ydGN1dFRleHQgbWVudVNpemUgbWVudVNvcnQgbWVudVRleHQgbWVudVVSTCAnICtcbiAgICAgICAgJ21lbnVWYWx1ZSBtaW4gbWluZUFjdGl2ZSBtaW5lRGV0ZWN0ZWRCeSBtaXNzaW9uQ29uZmlnRmlsZSBtaXNzaW9uRGlmZmljdWx0eSBtaXNzaW9uTmFtZSAnICtcbiAgICAgICAgJ21pc3Npb25OYW1lc3BhY2UgbWlzc2lvblN0YXJ0IG1pc3Npb25WZXJzaW9uIG1vZCBtb2RlbFRvV29ybGQgbW9kZWxUb1dvcmxkVmlzdWFsICcgK1xuICAgICAgICAnbW9kZWxUb1dvcmxkVmlzdWFsV29ybGQgbW9kZWxUb1dvcmxkV29ybGQgbW9kUGFyYW1zIG1vb25JbnRlbnNpdHkgbW9vblBoYXNlIG1vcmFsZSBtb3ZlICcgK1xuICAgICAgICAnbW92ZTNERU5DYW1lcmEgbW92ZUluQW55IG1vdmVJbkNhcmdvIG1vdmVJbkNvbW1hbmRlciBtb3ZlSW5Ecml2ZXIgbW92ZUluR3VubmVyIG1vdmVJblR1cnJldCAnICtcbiAgICAgICAgJ21vdmVPYmplY3RUb0VuZCBtb3ZlT3V0IG1vdmVUaW1lIG1vdmVUbyBtb3ZlVG9Db21wbGV0ZWQgbW92ZVRvRmFpbGVkIG11c2ljVm9sdW1lIG5hbWUgbmFtZVNvdW5kICcgK1xuICAgICAgICAnbmVhckVudGl0aWVzIG5lYXJlc3RCdWlsZGluZyBuZWFyZXN0TG9jYXRpb24gbmVhcmVzdExvY2F0aW9ucyBuZWFyZXN0TG9jYXRpb25XaXRoRHViYmluZyAnICtcbiAgICAgICAgJ25lYXJlc3RPYmplY3QgbmVhcmVzdE9iamVjdHMgbmVhcmVzdFRlcnJhaW5PYmplY3RzIG5lYXJPYmplY3RzIG5lYXJPYmplY3RzUmVhZHkgbmVhclJvYWRzICcgK1xuICAgICAgICAnbmVhclN1cHBsaWVzIG5lYXJUYXJnZXRzIG5lZWRSZWxvYWQgbmV0SWQgbmV0T2JqTnVsbCBuZXdPdmVybGF5IG5leHRNZW51SXRlbUluZGV4ICcgK1xuICAgICAgICAnbmV4dFdlYXRoZXJDaGFuZ2Ugbk1lbnVJdGVtcyBub3QgbnVtYmVyT2ZFbmdpbmVzUlREIG51bWJlclRvRGF0ZSBvYmplY3RDdXJhdG9ycyBvYmplY3RGcm9tTmV0SWQgJyArXG4gICAgICAgICdvYmplY3RQYXJlbnQgb2JqU3RhdHVzIG9uQnJpZWZpbmdHcm91cCBvbkJyaWVmaW5nTm90ZXMgb25CcmllZmluZ1BsYW4gb25CcmllZmluZ1RlYW1Td2l0Y2ggJyArXG4gICAgICAgICdvbkNvbW1hbmRNb2RlQ2hhbmdlZCBvbkRvdWJsZUNsaWNrIG9uRWFjaEZyYW1lIG9uR3JvdXBJY29uQ2xpY2sgb25Hcm91cEljb25PdmVyRW50ZXIgJyArXG4gICAgICAgICdvbkdyb3VwSWNvbk92ZXJMZWF2ZSBvbkhDR3JvdXBTZWxlY3Rpb25DaGFuZ2VkIG9uTWFwU2luZ2xlQ2xpY2sgb25QbGF5ZXJDb25uZWN0ZWQgJyArXG4gICAgICAgICdvblBsYXllckRpc2Nvbm5lY3RlZCBvblByZWxvYWRGaW5pc2hlZCBvblByZWxvYWRTdGFydGVkIG9uU2hvd05ld09iamVjdCBvblRlYW1Td2l0Y2ggJyArXG4gICAgICAgICdvcGVuQ3VyYXRvckludGVyZmFjZSBvcGVuRExDUGFnZSBvcGVuTWFwIG9wZW5TdGVhbUFwcCBvcGVuWW91dHViZVZpZGVvIG9yIG9yZGVyR2V0SW4gb3ZlcmNhc3QgJyArXG4gICAgICAgICdvdmVyY2FzdEZvcmVjYXN0IG93bmVyIHBhcmFtIHBhcmFtcyBwYXJzZU51bWJlciBwYXJzZVNpbXBsZUFycmF5IHBhcnNlVGV4dCBwYXJzaW5nTmFtZXNwYWNlICcgK1xuICAgICAgICAncGFydGljbGVzUXVhbGl0eSBwaWNrV2VhcG9uUG9vbCBwaXRjaCBwaXhlbEdyaWQgcGl4ZWxHcmlkQmFzZSBwaXhlbEdyaWROb1VJU2NhbGUgcGl4ZWxIIHBpeGVsVyAnICtcbiAgICAgICAgJ3BsYXlhYmxlU2xvdHNOdW1iZXIgcGxheWFibGVVbml0cyBwbGF5QWN0aW9uIHBsYXlBY3Rpb25Ob3cgcGxheWVyIHBsYXllclJlc3Bhd25UaW1lIHBsYXllclNpZGUgJyArXG4gICAgICAgICdwbGF5ZXJzTnVtYmVyIHBsYXlHZXN0dXJlIHBsYXlNaXNzaW9uIHBsYXlNb3ZlIHBsYXlNb3ZlTm93IHBsYXlNdXNpYyBwbGF5U2NyaXB0ZWRNaXNzaW9uICcgK1xuICAgICAgICAncGxheVNvdW5kIHBsYXlTb3VuZDNEIHBvc2l0aW9uIHBvc2l0aW9uQ2FtZXJhVG9Xb3JsZCBwb3NTY3JlZW5Ub1dvcmxkIHBvc1dvcmxkVG9TY3JlZW4gJyArXG4gICAgICAgICdwcEVmZmVjdEFkanVzdCBwcEVmZmVjdENvbW1pdCBwcEVmZmVjdENvbW1pdHRlZCBwcEVmZmVjdENyZWF0ZSBwcEVmZmVjdERlc3Ryb3kgcHBFZmZlY3RFbmFibGUgJyArXG4gICAgICAgICdwcEVmZmVjdEVuYWJsZWQgcHBFZmZlY3RGb3JjZUluTlZHIHByZWNpc2lvbiBwcmVsb2FkQ2FtZXJhIHByZWxvYWRPYmplY3QgcHJlbG9hZFNvdW5kICcgK1xuICAgICAgICAncHJlbG9hZFRpdGxlT2JqIHByZWxvYWRUaXRsZVJzYyBwcmVwcm9jZXNzRmlsZSBwcmVwcm9jZXNzRmlsZUxpbmVOdW1iZXJzIHByaW1hcnlXZWFwb24gJyArXG4gICAgICAgICdwcmltYXJ5V2VhcG9uSXRlbXMgcHJpbWFyeVdlYXBvbk1hZ2F6aW5lIHByaW9yaXR5IHByb2Nlc3NEaWFyeUxpbmsgcHJvZHVjdFZlcnNpb24gcHJvZmlsZU5hbWUgJyArXG4gICAgICAgICdwcm9maWxlTmFtZXNwYWNlIHByb2ZpbGVOYW1lU3RlYW0gcHJvZ3Jlc3NMb2FkaW5nU2NyZWVuIHByb2dyZXNzUG9zaXRpb24gcHJvZ3Jlc3NTZXRQb3NpdGlvbiAnICtcbiAgICAgICAgJ3B1YmxpY1ZhcmlhYmxlIHB1YmxpY1ZhcmlhYmxlQ2xpZW50IHB1YmxpY1ZhcmlhYmxlU2VydmVyIHB1c2hCYWNrIHB1c2hCYWNrVW5pcXVlIHB1dFdlYXBvblBvb2wgJyArXG4gICAgICAgICdxdWVyeUl0ZW1zUG9vbCBxdWVyeU1hZ2F6aW5lUG9vbCBxdWVyeVdlYXBvblBvb2wgcmFkIHJhZGlvQ2hhbm5lbEFkZCByYWRpb0NoYW5uZWxDcmVhdGUgJyArXG4gICAgICAgICdyYWRpb0NoYW5uZWxSZW1vdmUgcmFkaW9DaGFubmVsU2V0Q2FsbFNpZ24gcmFkaW9DaGFubmVsU2V0TGFiZWwgcmFkaW9Wb2x1bWUgcmFpbiByYWluYm93IHJhbmRvbSAnICtcbiAgICAgICAgJ3JhbmsgcmFua0lkIHJhdGluZyByZWN0YW5ndWxhciByZWdpc3RlcmVkVGFza3MgcmVnaXN0ZXJUYXNrIHJlbG9hZCByZWxvYWRFbmFibGVkIHJlbW90ZUNvbnRyb2wgJyArXG4gICAgICAgICdyZW1vdGVFeGVjIHJlbW90ZUV4ZWNDYWxsIHJlbW90ZUV4ZWN1dGVkT3duZXIgcmVtb3ZlM0RFTkNvbm5lY3Rpb24gcmVtb3ZlM0RFTkV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZTNERU5MYXllciByZW1vdmVBY3Rpb24gcmVtb3ZlQWxsM0RFTkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsQWN0aW9ucyByZW1vdmVBbGxBc3NpZ25lZEl0ZW1zICcgK1xuICAgICAgICAncmVtb3ZlQWxsQ29udGFpbmVycyByZW1vdmVBbGxDdXJhdG9yQWRkb25zIHJlbW92ZUFsbEN1cmF0b3JDYW1lcmFBcmVhcyAnICtcbiAgICAgICAgJ3JlbW92ZUFsbEN1cmF0b3JFZGl0aW5nQXJlYXMgcmVtb3ZlQWxsRXZlbnRIYW5kbGVycyByZW1vdmVBbGxIYW5kZ3VuSXRlbXMgcmVtb3ZlQWxsSXRlbXMgJyArXG4gICAgICAgICdyZW1vdmVBbGxJdGVtc1dpdGhNYWdhemluZXMgcmVtb3ZlQWxsTWlzc2lvbkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsTVBFdmVudEhhbmRsZXJzICcgK1xuICAgICAgICAncmVtb3ZlQWxsTXVzaWNFdmVudEhhbmRsZXJzIHJlbW92ZUFsbE93bmVkTWluZXMgcmVtb3ZlQWxsUHJpbWFyeVdlYXBvbkl0ZW1zIHJlbW92ZUFsbFdlYXBvbnMgJyArXG4gICAgICAgICdyZW1vdmVCYWNrcGFjayByZW1vdmVCYWNrcGFja0dsb2JhbCByZW1vdmVDdXJhdG9yQWRkb25zIHJlbW92ZUN1cmF0b3JDYW1lcmFBcmVhICcgK1xuICAgICAgICAncmVtb3ZlQ3VyYXRvckVkaXRhYmxlT2JqZWN0cyByZW1vdmVDdXJhdG9yRWRpdGluZ0FyZWEgcmVtb3ZlRHJhd0ljb24gcmVtb3ZlRHJhd0xpbmtzICcgK1xuICAgICAgICAncmVtb3ZlRXZlbnRIYW5kbGVyIHJlbW92ZUZyb21SZW1haW5zQ29sbGVjdG9yIHJlbW92ZUdvZ2dsZXMgcmVtb3ZlR3JvdXBJY29uIHJlbW92ZUhhbmRndW5JdGVtICcgK1xuICAgICAgICAncmVtb3ZlSGVhZGdlYXIgcmVtb3ZlSXRlbSByZW1vdmVJdGVtRnJvbUJhY2twYWNrIHJlbW92ZUl0ZW1Gcm9tVW5pZm9ybSByZW1vdmVJdGVtRnJvbVZlc3QgJyArXG4gICAgICAgICdyZW1vdmVJdGVtcyByZW1vdmVNYWdhemluZSByZW1vdmVNYWdhemluZUdsb2JhbCByZW1vdmVNYWdhemluZXMgcmVtb3ZlTWFnYXppbmVzVHVycmV0ICcgK1xuICAgICAgICAncmVtb3ZlTWFnYXppbmVUdXJyZXQgcmVtb3ZlTWVudUl0ZW0gcmVtb3ZlTWlzc2lvbkV2ZW50SGFuZGxlciByZW1vdmVNUEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZU11c2ljRXZlbnRIYW5kbGVyIHJlbW92ZU93bmVkTWluZSByZW1vdmVQcmltYXJ5V2VhcG9uSXRlbSByZW1vdmVTZWNvbmRhcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAncmVtb3ZlU2ltcGxlVGFzayByZW1vdmVTd2l0Y2hhYmxlVW5pdCByZW1vdmVUZWFtTWVtYmVyIHJlbW92ZVVuaWZvcm0gcmVtb3ZlVmVzdCByZW1vdmVXZWFwb24gJyArXG4gICAgICAgICdyZW1vdmVXZWFwb25BdHRhY2htZW50Q2FyZ28gcmVtb3ZlV2VhcG9uQ2FyZ28gcmVtb3ZlV2VhcG9uR2xvYmFsIHJlbW92ZVdlYXBvblR1cnJldCAnICtcbiAgICAgICAgJ3JlcG9ydFJlbW90ZVRhcmdldCByZXF1aXJlZFZlcnNpb24gcmVzZXRDYW1TaGFrZSByZXNldFN1Ymdyb3VwRGlyZWN0aW9uIHJlc2l6ZSByZXNvdXJjZXMgJyArXG4gICAgICAgICdyZXNwYXduVmVoaWNsZSByZXN0YXJ0RWRpdG9yQ2FtZXJhIHJldmVhbCByZXZlYWxNaW5lIHJldmVyc2UgcmV2ZXJzZWRNb3VzZVkgcm9hZEF0ICcgK1xuICAgICAgICAncm9hZHNDb25uZWN0ZWRUbyByb2xlRGVzY3JpcHRpb24gcm9wZUF0dGFjaGVkT2JqZWN0cyByb3BlQXR0YWNoZWRUbyByb3BlQXR0YWNoRW5hYmxlZCAnICtcbiAgICAgICAgJ3JvcGVBdHRhY2hUbyByb3BlQ3JlYXRlIHJvcGVDdXQgcm9wZURlc3Ryb3kgcm9wZURldGFjaCByb3BlRW5kUG9zaXRpb24gcm9wZUxlbmd0aCByb3BlcyAnICtcbiAgICAgICAgJ3JvcGVVbndpbmQgcm9wZVVud291bmQgcm90b3JzRm9yY2VzUlREIHJvdG9yc1JwbVJURCByb3VuZCBydW5Jbml0U2NyaXB0IHNhZmVab25lSCBzYWZlWm9uZVcgJyArXG4gICAgICAgICdzYWZlWm9uZVdBYnMgc2FmZVpvbmVYIHNhZmVab25lWEFicyBzYWZlWm9uZVkgc2F2ZTNERU5JbnZlbnRvcnkgc2F2ZUdhbWUgc2F2ZUlkZW50aXR5ICcgK1xuICAgICAgICAnc2F2ZUpveXN0aWNrcyBzYXZlT3ZlcmxheSBzYXZlUHJvZmlsZU5hbWVzcGFjZSBzYXZlU3RhdHVzIHNhdmVWYXIgc2F2aW5nRW5hYmxlZCBzYXkgc2F5MkQgc2F5M0QgJyArXG4gICAgICAgICdzY29wZU5hbWUgc2NvcmUgc2NvcmVTaWRlIHNjcmVlbnNob3Qgc2NyZWVuVG9Xb3JsZCBzY3JpcHREb25lIHNjcmlwdE5hbWUgc2N1ZFN0YXRlICcgK1xuICAgICAgICAnc2Vjb25kYXJ5V2VhcG9uIHNlY29uZGFyeVdlYXBvbkl0ZW1zIHNlY29uZGFyeVdlYXBvbk1hZ2F6aW5lIHNlbGVjdCBzZWxlY3RCZXN0UGxhY2VzICcgK1xuICAgICAgICAnc2VsZWN0RGlhcnlTdWJqZWN0IHNlbGVjdGVkRWRpdG9yT2JqZWN0cyBzZWxlY3RFZGl0b3JPYmplY3Qgc2VsZWN0aW9uTmFtZXMgc2VsZWN0aW9uUG9zaXRpb24gJyArXG4gICAgICAgICdzZWxlY3RMZWFkZXIgc2VsZWN0TWF4IHNlbGVjdE1pbiBzZWxlY3ROb1BsYXllciBzZWxlY3RQbGF5ZXIgc2VsZWN0UmFuZG9tIHNlbGVjdFJhbmRvbVdlaWdodGVkICcgK1xuICAgICAgICAnc2VsZWN0V2VhcG9uIHNlbGVjdFdlYXBvblR1cnJldCBzZW5kQVVNZXNzYWdlIHNlbmRTaW1wbGVDb21tYW5kIHNlbmRUYXNrIHNlbmRUYXNrUmVzdWx0ICcgK1xuICAgICAgICAnc2VuZFVEUE1lc3NhZ2Ugc2VydmVyQ29tbWFuZCBzZXJ2ZXJDb21tYW5kQXZhaWxhYmxlIHNlcnZlckNvbW1hbmRFeGVjdXRhYmxlIHNlcnZlck5hbWUgc2VydmVyVGltZSAnICtcbiAgICAgICAgJ3NldCBzZXQzREVOQXR0cmlidXRlIHNldDNERU5BdHRyaWJ1dGVzIHNldDNERU5HcmlkIHNldDNERU5JY29uc1Zpc2libGUgc2V0M0RFTkxheWVyICcgK1xuICAgICAgICAnc2V0M0RFTkxpbmVzVmlzaWJsZSBzZXQzREVOTG9naWNUeXBlIHNldDNERU5NaXNzaW9uQXR0cmlidXRlIHNldDNERU5NaXNzaW9uQXR0cmlidXRlcyAnICtcbiAgICAgICAgJ3NldDNERU5Nb2RlbHNWaXNpYmxlIHNldDNERU5PYmplY3RUeXBlIHNldDNERU5TZWxlY3RlZCBzZXRBY2NUaW1lIHNldEFjdHVhbENvbGxlY3RpdmVSVEQgJyArXG4gICAgICAgICdzZXRBaXJwbGFuZVRocm90dGxlIHNldEFpcnBvcnRTaWRlIHNldEFtbW8gc2V0QW1tb0NhcmdvIHNldEFtbW9PblB5bG9uIHNldEFuaW1TcGVlZENvZWYgJyArXG4gICAgICAgICdzZXRBcGVydHVyZSBzZXRBcGVydHVyZU5ldyBzZXRBcm1vcnlQb2ludHMgc2V0QXR0cmlidXRlcyBzZXRBdXRvbm9tb3VzIHNldEJlaGF2aW91ciAnICtcbiAgICAgICAgJ3NldEJsZWVkaW5nUmVtYWluaW5nIHNldEJyYWtlc1JURCBzZXRDYW1lcmFJbnRlcmVzdCBzZXRDYW1TaGFrZURlZlBhcmFtcyBzZXRDYW1TaGFrZVBhcmFtcyAnICtcbiAgICAgICAgJ3NldENhbVVzZVRJIHNldENhcHRpdmUgc2V0Q2VudGVyT2ZNYXNzIHNldENvbGxpc2lvbkxpZ2h0IHNldENvbWJhdE1vZGUgc2V0Q29tcGFzc09zY2lsbGF0aW9uICcgK1xuICAgICAgICAnc2V0Q29udm95U2VwYXJhdGlvbiBzZXRDdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmcgc2V0Q3VyYXRvckNvZWYgc2V0Q3VyYXRvckVkaXRpbmdBcmVhVHlwZSAnICtcbiAgICAgICAgJ3NldEN1cmF0b3JXYXlwb2ludENvc3Qgc2V0Q3VycmVudENoYW5uZWwgc2V0Q3VycmVudFRhc2sgc2V0Q3VycmVudFdheXBvaW50IHNldEN1c3RvbUFpbUNvZWYgJyArXG4gICAgICAgICdzZXRDdXN0b21XZWlnaHRSVEQgc2V0RGFtYWdlIHNldERhbW1hZ2Ugc2V0RGF0ZSBzZXREZWJyaWVmaW5nVGV4dCBzZXREZWZhdWx0Q2FtZXJhIHNldERlc3RpbmF0aW9uICcgK1xuICAgICAgICAnc2V0RGV0YWlsTWFwQmxlbmRQYXJzIHNldERpciBzZXREaXJlY3Rpb24gc2V0RHJhd0ljb24gc2V0RHJpdmVPblBhdGggc2V0RHJvcEludGVydmFsICcgK1xuICAgICAgICAnc2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZSBzZXREeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlQ29lZiBzZXRFZGl0b3JNb2RlIHNldEVkaXRvck9iamVjdFNjb3BlICcgK1xuICAgICAgICAnc2V0RWZmZWN0Q29uZGl0aW9uIHNldEVuZ2luZVJQTVJURCBzZXRGYWNlIHNldEZhY2VBbmltYXRpb24gc2V0RmF0aWd1ZSBzZXRGZWF0dXJlVHlwZSAnICtcbiAgICAgICAgJ3NldEZsYWdBbmltYXRpb25QaGFzZSBzZXRGbGFnT3duZXIgc2V0RmxhZ1NpZGUgc2V0RmxhZ1RleHR1cmUgc2V0Rm9nIHNldEZvcm1hdGlvbiAnICtcbiAgICAgICAgJ3NldEZvcm1hdGlvblRhc2sgc2V0Rm9ybURpciBzZXRGcmllbmQgc2V0RnJvbUVkaXRvciBzZXRGU01WYXJpYWJsZSBzZXRGdWVsIHNldEZ1ZWxDYXJnbyAnICtcbiAgICAgICAgJ3NldEdyb3VwSWNvbiBzZXRHcm91cEljb25QYXJhbXMgc2V0R3JvdXBJY29uc1NlbGVjdGFibGUgc2V0R3JvdXBJY29uc1Zpc2libGUgc2V0R3JvdXBJZCAnICtcbiAgICAgICAgJ3NldEdyb3VwSWRHbG9iYWwgc2V0R3JvdXBPd25lciBzZXRHdXN0cyBzZXRIaWRlQmVoaW5kIHNldEhpdCBzZXRIaXRJbmRleCBzZXRIaXRQb2ludERhbWFnZSAnICtcbiAgICAgICAgJ3NldEhvcml6b25QYXJhbGxheENvZWYgc2V0SFVETW92ZW1lbnRMZXZlbHMgc2V0SWRlbnRpdHkgc2V0SW1wb3J0YW5jZSBzZXRJbmZvUGFuZWwgc2V0TGVhZGVyICcgK1xuICAgICAgICAnc2V0TGlnaHRBbWJpZW50IHNldExpZ2h0QXR0ZW51YXRpb24gc2V0TGlnaHRCcmlnaHRuZXNzIHNldExpZ2h0Q29sb3Igc2V0TGlnaHREYXlMaWdodCAnICtcbiAgICAgICAgJ3NldExpZ2h0RmxhcmVNYXhEaXN0YW5jZSBzZXRMaWdodEZsYXJlU2l6ZSBzZXRMaWdodEludGVuc2l0eSBzZXRMaWdodG5pbmdzIHNldExpZ2h0VXNlRmxhcmUgJyArXG4gICAgICAgICdzZXRMb2NhbFdpbmRQYXJhbXMgc2V0TWFnYXppbmVUdXJyZXRBbW1vIHNldE1hcmtlckFscGhhIHNldE1hcmtlckFscGhhTG9jYWwgc2V0TWFya2VyQnJ1c2ggJyArXG4gICAgICAgICdzZXRNYXJrZXJCcnVzaExvY2FsIHNldE1hcmtlckNvbG9yIHNldE1hcmtlckNvbG9yTG9jYWwgc2V0TWFya2VyRGlyIHNldE1hcmtlckRpckxvY2FsICcgK1xuICAgICAgICAnc2V0TWFya2VyUG9zIHNldE1hcmtlclBvc0xvY2FsIHNldE1hcmtlclNoYXBlIHNldE1hcmtlclNoYXBlTG9jYWwgc2V0TWFya2VyU2l6ZSAnICtcbiAgICAgICAgJ3NldE1hcmtlclNpemVMb2NhbCBzZXRNYXJrZXJUZXh0IHNldE1hcmtlclRleHRMb2NhbCBzZXRNYXJrZXJUeXBlIHNldE1hcmtlclR5cGVMb2NhbCBzZXRNYXNzICcgK1xuICAgICAgICAnc2V0TWltaWMgc2V0TW91c2VQb3NpdGlvbiBzZXRNdXNpY0VmZmVjdCBzZXRNdXNpY0V2ZW50SGFuZGxlciBzZXROYW1lIHNldE5hbWVTb3VuZCAnICtcbiAgICAgICAgJ3NldE9iamVjdEFyZ3VtZW50cyBzZXRPYmplY3RNYXRlcmlhbCBzZXRPYmplY3RNYXRlcmlhbEdsb2JhbCBzZXRPYmplY3RQcm94eSBzZXRPYmplY3RUZXh0dXJlICcgK1xuICAgICAgICAnc2V0T2JqZWN0VGV4dHVyZUdsb2JhbCBzZXRPYmplY3RWaWV3RGlzdGFuY2Ugc2V0T3ZlcmNhc3Qgc2V0T3duZXIgc2V0T3h5Z2VuUmVtYWluaW5nICcgK1xuICAgICAgICAnc2V0UGFydGljbGVDaXJjbGUgc2V0UGFydGljbGVDbGFzcyBzZXRQYXJ0aWNsZUZpcmUgc2V0UGFydGljbGVQYXJhbXMgc2V0UGFydGljbGVSYW5kb20gJyArXG4gICAgICAgICdzZXRQaWxvdENhbWVyYURpcmVjdGlvbiBzZXRQaWxvdENhbWVyYVJvdGF0aW9uIHNldFBpbG90Q2FtZXJhVGFyZ2V0IHNldFBpbG90TGlnaHQgc2V0UGlQRWZmZWN0ICcgK1xuICAgICAgICAnc2V0UGl0Y2ggc2V0UGxhdGVOdW1iZXIgc2V0UGxheWFibGUgc2V0UGxheWVyUmVzcGF3blRpbWUgc2V0UG9zIHNldFBvc0FTTCBzZXRQb3NBU0wyIHNldFBvc0FTTFcgJyArXG4gICAgICAgICdzZXRQb3NBVEwgc2V0UG9zaXRpb24gc2V0UG9zV29ybGQgc2V0UHlsb25Mb2FkT3V0IHNldFB5bG9uc1ByaW9yaXR5IHNldFJhZGlvTXNnIHNldFJhaW4gJyArXG4gICAgICAgICdzZXRSYWluYm93IHNldFJhbmRvbUxpcCBzZXRSYW5rIHNldFJlY3Rhbmd1bGFyIHNldFJlcGFpckNhcmdvIHNldFJvdG9yQnJha2VSVEQgc2V0U2hhZG93RGlzdGFuY2UgJyArXG4gICAgICAgICdzZXRTaG90UGFyZW50cyBzZXRTaWRlIHNldFNpbXBsZVRhc2tBbHdheXNWaXNpYmxlIHNldFNpbXBsZVRhc2tDdXN0b21EYXRhICcgK1xuICAgICAgICAnc2V0U2ltcGxlVGFza0Rlc2NyaXB0aW9uIHNldFNpbXBsZVRhc2tEZXN0aW5hdGlvbiBzZXRTaW1wbGVUYXNrVGFyZ2V0IHNldFNpbXBsZVRhc2tUeXBlICcgK1xuICAgICAgICAnc2V0U2ltdWxXZWF0aGVyTGF5ZXJzIHNldFNpemUgc2V0U2tpbGwgc2V0U2xpbmdMb2FkIHNldFNvdW5kRWZmZWN0IHNldFNwZWFrZXIgc2V0U3BlZWNoICcgK1xuICAgICAgICAnc2V0U3BlZWRNb2RlIHNldFN0YW1pbmEgc2V0U3RhbWluYVNjaGVtZSBzZXRTdGF0VmFsdWUgc2V0U3VwcHJlc3Npb24gc2V0U3lzdGVtT2ZVbml0cyAnICtcbiAgICAgICAgJ3NldFRhcmdldEFnZSBzZXRUYXNrTWFya2VyT2Zmc2V0IHNldFRhc2tSZXN1bHQgc2V0VGFza1N0YXRlIHNldFRlcnJhaW5HcmlkIHNldFRleHQgJyArXG4gICAgICAgICdzZXRUaW1lTXVsdGlwbGllciBzZXRUaXRsZUVmZmVjdCBzZXRUcmFmZmljRGVuc2l0eSBzZXRUcmFmZmljRGlzdGFuY2Ugc2V0VHJhZmZpY0dhcCAnICtcbiAgICAgICAgJ3NldFRyYWZmaWNTcGVlZCBzZXRUcmlnZ2VyQWN0aXZhdGlvbiBzZXRUcmlnZ2VyQXJlYSBzZXRUcmlnZ2VyU3RhdGVtZW50cyBzZXRUcmlnZ2VyVGV4dCAnICtcbiAgICAgICAgJ3NldFRyaWdnZXJUaW1lb3V0IHNldFRyaWdnZXJUeXBlIHNldFR5cGUgc2V0VW5jb25zY2lvdXMgc2V0VW5pdEFiaWxpdHkgc2V0VW5pdExvYWRvdXQgc2V0VW5pdFBvcyAnICtcbiAgICAgICAgJ3NldFVuaXRQb3NXZWFrIHNldFVuaXRSYW5rIHNldFVuaXRSZWNvaWxDb2VmZmljaWVudCBzZXRVbml0VHJhaXQgc2V0VW5sb2FkSW5Db21iYXQgJyArXG4gICAgICAgICdzZXRVc2VyQWN0aW9uVGV4dCBzZXRVc2VyTUZEVGV4dCBzZXRVc2VyTUZEdmFsdWUgc2V0VmFyaWFibGUgc2V0VmVjdG9yRGlyIHNldFZlY3RvckRpckFuZFVwICcgK1xuICAgICAgICAnc2V0VmVjdG9yVXAgc2V0VmVoaWNsZUFtbW8gc2V0VmVoaWNsZUFtbW9EZWYgc2V0VmVoaWNsZUFybW9yIHNldFZlaGljbGVDYXJnbyBzZXRWZWhpY2xlSWQgJyArXG4gICAgICAgICdzZXRWZWhpY2xlTG9jayBzZXRWZWhpY2xlUG9zaXRpb24gc2V0VmVoaWNsZVJhZGFyIHNldFZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0cyAnICtcbiAgICAgICAgJ3NldFZlaGljbGVSZXBvcnRPd25Qb3NpdGlvbiBzZXRWZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0cyBzZXRWZWhpY2xlVElQYXJzIHNldFZlaGljbGVWYXJOYW1lICcgK1xuICAgICAgICAnc2V0VmVsb2NpdHkgc2V0VmVsb2NpdHlNb2RlbFNwYWNlIHNldFZlbG9jaXR5VHJhbnNmb3JtYXRpb24gc2V0Vmlld0Rpc3RhbmNlICcgK1xuICAgICAgICAnc2V0VmlzaWJsZUlmVHJlZUNvbGxhcHNlZCBzZXRXYW50ZWRSUE1SVEQgc2V0V2F2ZXMgc2V0V2F5cG9pbnRCZWhhdmlvdXIgc2V0V2F5cG9pbnRDb21iYXRNb2RlICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzIHNldFdheXBvaW50RGVzY3JpcHRpb24gc2V0V2F5cG9pbnRGb3JjZUJlaGF2aW91ciBzZXRXYXlwb2ludEZvcm1hdGlvbiAnICtcbiAgICAgICAgJ3NldFdheXBvaW50SG91c2VQb3NpdGlvbiBzZXRXYXlwb2ludExvaXRlclJhZGl1cyBzZXRXYXlwb2ludExvaXRlclR5cGUgc2V0V2F5cG9pbnROYW1lICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRQb3NpdGlvbiBzZXRXYXlwb2ludFNjcmlwdCBzZXRXYXlwb2ludFNwZWVkIHNldFdheXBvaW50U3RhdGVtZW50cyBzZXRXYXlwb2ludFRpbWVvdXQgJyArXG4gICAgICAgICdzZXRXYXlwb2ludFR5cGUgc2V0V2F5cG9pbnRWaXNpYmxlIHNldFdlYXBvblJlbG9hZGluZ1RpbWUgc2V0V2luZCBzZXRXaW5kRGlyIHNldFdpbmRGb3JjZSAnICtcbiAgICAgICAgJ3NldFdpbmRTdHIgc2V0V2luZ0ZvcmNlU2NhbGVSVEQgc2V0V1BQb3Mgc2hvdzNESWNvbnMgc2hvd0NoYXQgc2hvd0NpbmVtYUJvcmRlciBzaG93Q29tbWFuZGluZ01lbnUgJyArXG4gICAgICAgICdzaG93Q29tcGFzcyBzaG93Q3VyYXRvckNvbXBhc3Mgc2hvd0dQUyBzaG93SFVEIHNob3dMZWdlbmQgc2hvd01hcCBzaG93bkFydGlsbGVyeUNvbXB1dGVyICcgK1xuICAgICAgICAnc2hvd25DaGF0IHNob3duQ29tcGFzcyBzaG93bkN1cmF0b3JDb21wYXNzIHNob3dOZXdFZGl0b3JPYmplY3Qgc2hvd25HUFMgc2hvd25IVUQgc2hvd25NYXAgJyArXG4gICAgICAgICdzaG93blBhZCBzaG93blJhZGlvIHNob3duU2NvcmV0YWJsZSBzaG93blVBVkZlZWQgc2hvd25XYXJyYW50IHNob3duV2F0Y2ggc2hvd1BhZCBzaG93UmFkaW8gJyArXG4gICAgICAgICdzaG93U2NvcmV0YWJsZSBzaG93U3VidGl0bGVzIHNob3dVQVZGZWVkIHNob3dXYXJyYW50IHNob3dXYXRjaCBzaG93V2F5cG9pbnQgc2hvd1dheXBvaW50cyBzaWRlICcgK1xuICAgICAgICAnc2lkZUNoYXQgc2lkZUVuZW15IHNpZGVGcmllbmRseSBzaWRlUmFkaW8gc2ltcGxlVGFza3Mgc2ltdWxhdGlvbkVuYWJsZWQgc2ltdWxDbG91ZERlbnNpdHkgJyArXG4gICAgICAgICdzaW11bENsb3VkT2NjbHVzaW9uIHNpbXVsSW5DbG91ZHMgc2ltdWxXZWF0aGVyU3luYyBzaW4gc2l6ZSBzaXplT2Ygc2tpbGwgc2tpbGxGaW5hbCBza2lwVGltZSAnICtcbiAgICAgICAgJ3NsZWVwIHNsaWRlclBvc2l0aW9uIHNsaWRlclJhbmdlIHNsaWRlclNldFBvc2l0aW9uIHNsaWRlclNldFJhbmdlIHNsaWRlclNldFNwZWVkIHNsaWRlclNwZWVkICcgK1xuICAgICAgICAnc2xpbmdMb2FkQXNzaXN0YW50U2hvd24gc29sZGllck1hZ2F6aW5lcyBzb21lQW1tbyBzb3J0IHNvdW5kVm9sdW1lIHNwYXduIHNwZWFrZXIgc3BlZWQgc3BlZWRNb2RlICcgK1xuICAgICAgICAnc3BsaXRTdHJpbmcgc3FydCBzcXVhZFBhcmFtcyBzdGFuY2Ugc3RhcnRMb2FkaW5nU2NyZWVuIHN0ZXAgc3RvcCBzdG9wRW5naW5lUlREIHN0b3BwZWQgc3RyICcgK1xuICAgICAgICAnc3VuT3JNb29uIHN1cHBvcnRJbmZvIHN1cHByZXNzRm9yIHN1cmZhY2VJc1dhdGVyIHN1cmZhY2VOb3JtYWwgc3VyZmFjZVR5cGUgc3dpbUluRGVwdGggJyArXG4gICAgICAgICdzd2l0Y2hhYmxlVW5pdHMgc3dpdGNoQWN0aW9uIHN3aXRjaENhbWVyYSBzd2l0Y2hHZXN0dXJlIHN3aXRjaExpZ2h0IHN3aXRjaE1vdmUgJyArXG4gICAgICAgICdzeW5jaHJvbml6ZWRPYmplY3RzIHN5bmNocm9uaXplZFRyaWdnZXJzIHN5bmNocm9uaXplZFdheXBvaW50cyBzeW5jaHJvbml6ZU9iamVjdHNBZGQgJyArXG4gICAgICAgICdzeW5jaHJvbml6ZU9iamVjdHNSZW1vdmUgc3luY2hyb25pemVUcmlnZ2VyIHN5bmNocm9uaXplV2F5cG9pbnQgc3lzdGVtQ2hhdCBzeXN0ZW1PZlVuaXRzIHRhbiAnICtcbiAgICAgICAgJ3RhcmdldEtub3dsZWRnZSB0YXJnZXRzIHRhcmdldHNBZ2dyZWdhdGUgdGFyZ2V0c1F1ZXJ5IHRhc2tBbHdheXNWaXNpYmxlIHRhc2tDaGlsZHJlbiAnICtcbiAgICAgICAgJ3Rhc2tDb21wbGV0ZWQgdGFza0N1c3RvbURhdGEgdGFza0Rlc2NyaXB0aW9uIHRhc2tEZXN0aW5hdGlvbiB0YXNrSGludCB0YXNrTWFya2VyT2Zmc2V0IHRhc2tQYXJlbnQgJyArXG4gICAgICAgICd0YXNrUmVzdWx0IHRhc2tTdGF0ZSB0YXNrVHlwZSB0ZWFtTWVtYmVyIHRlYW1OYW1lIHRlYW1zIHRlYW1Td2l0Y2ggdGVhbVN3aXRjaEVuYWJsZWQgdGVhbVR5cGUgJyArXG4gICAgICAgICd0ZXJtaW5hdGUgdGVycmFpbkludGVyc2VjdCB0ZXJyYWluSW50ZXJzZWN0QVNMIHRlcnJhaW5JbnRlcnNlY3RBdEFTTCB0ZXh0IHRleHRMb2cgdGV4dExvZ0Zvcm1hdCAnICtcbiAgICAgICAgJ3RnIHRpbWUgdGltZU11bHRpcGxpZXIgdGl0bGVDdXQgdGl0bGVGYWRlT3V0IHRpdGxlT2JqIHRpdGxlUnNjIHRpdGxlVGV4dCB0b0FycmF5IHRvRml4ZWQgdG9Mb3dlciAnICtcbiAgICAgICAgJ3RvU3RyaW5nIHRvVXBwZXIgdHJpZ2dlckFjdGl2YXRlZCB0cmlnZ2VyQWN0aXZhdGlvbiB0cmlnZ2VyQXJlYSB0cmlnZ2VyQXR0YWNoZWRWZWhpY2xlICcgK1xuICAgICAgICAndHJpZ2dlckF0dGFjaE9iamVjdCB0cmlnZ2VyQXR0YWNoVmVoaWNsZSB0cmlnZ2VyRHluYW1pY1NpbXVsYXRpb24gdHJpZ2dlclN0YXRlbWVudHMgdHJpZ2dlclRleHQgJyArXG4gICAgICAgICd0cmlnZ2VyVGltZW91dCB0cmlnZ2VyVGltZW91dEN1cnJlbnQgdHJpZ2dlclR5cGUgdHVycmV0TG9jYWwgdHVycmV0T3duZXIgdHVycmV0VW5pdCB0dkFkZCB0dkNsZWFyICcgK1xuICAgICAgICAndHZDb2xsYXBzZSB0dkNvbGxhcHNlQWxsIHR2Q291bnQgdHZDdXJTZWwgdHZEYXRhIHR2RGVsZXRlIHR2RXhwYW5kIHR2RXhwYW5kQWxsIHR2UGljdHVyZSAnICtcbiAgICAgICAgJ3R2U2V0Q29sb3IgdHZTZXRDdXJTZWwgdHZTZXREYXRhIHR2U2V0UGljdHVyZSB0dlNldFBpY3R1cmVDb2xvciB0dlNldFBpY3R1cmVDb2xvckRpc2FibGVkICcgK1xuICAgICAgICAndHZTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCB0dlNldFBpY3R1cmVSaWdodCB0dlNldFBpY3R1cmVSaWdodENvbG9yIHR2U2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZCAnICtcbiAgICAgICAgJ3R2U2V0UGljdHVyZVJpZ2h0Q29sb3JTZWxlY3RlZCB0dlNldFRleHQgdHZTZXRUb29sdGlwIHR2U2V0VmFsdWUgdHZTb3J0IHR2U29ydEJ5VmFsdWUgdHZUZXh0ICcgK1xuICAgICAgICAndHZUb29sdGlwIHR2VmFsdWUgdHlwZSB0eXBlTmFtZSB0eXBlT2YgVUFWQ29udHJvbCB1aU5hbWVzcGFjZSB1aVNsZWVwIHVuYXNzaWduQ3VyYXRvciAnICtcbiAgICAgICAgJ3VuYXNzaWduSXRlbSB1bmFzc2lnblRlYW0gdW5hc3NpZ25WZWhpY2xlIHVuZGVyd2F0ZXIgdW5pZm9ybSB1bmlmb3JtQ29udGFpbmVyIHVuaWZvcm1JdGVtcyAnICtcbiAgICAgICAgJ3VuaWZvcm1NYWdhemluZXMgdW5pdEFkZG9ucyB1bml0QWltUG9zaXRpb24gdW5pdEFpbVBvc2l0aW9uVmlzdWFsIHVuaXRCYWNrcGFjayB1bml0SXNVQVYgdW5pdFBvcyAnICtcbiAgICAgICAgJ3VuaXRSZWFkeSB1bml0UmVjb2lsQ29lZmZpY2llbnQgdW5pdHMgdW5pdHNCZWxvd0hlaWdodCB1bmxpbmtJdGVtIHVubG9ja0FjaGlldmVtZW50ICcgK1xuICAgICAgICAndW5yZWdpc3RlclRhc2sgdXBkYXRlRHJhd0ljb24gdXBkYXRlTWVudUl0ZW0gdXBkYXRlT2JqZWN0VHJlZSB1c2VBSVN0ZWVyaW5nQ29tcG9uZW50ICcgK1xuICAgICAgICAndXNlQXVkaW9UaW1lRm9yTW92ZXMgdXNlcklucHV0RGlzYWJsZWQgdmVjdG9yQWRkIHZlY3RvckNvcyB2ZWN0b3JDcm9zc1Byb2R1Y3QgdmVjdG9yRGlmZiAnICtcbiAgICAgICAgJ3ZlY3RvckRpciB2ZWN0b3JEaXJWaXN1YWwgdmVjdG9yRGlzdGFuY2UgdmVjdG9yRGlzdGFuY2VTcXIgdmVjdG9yRG90UHJvZHVjdCB2ZWN0b3JGcm9tVG8gJyArXG4gICAgICAgICd2ZWN0b3JNYWduaXR1ZGUgdmVjdG9yTWFnbml0dWRlU3FyIHZlY3Rvck1vZGVsVG9Xb3JsZCB2ZWN0b3JNb2RlbFRvV29ybGRWaXN1YWwgdmVjdG9yTXVsdGlwbHkgJyArXG4gICAgICAgICd2ZWN0b3JOb3JtYWxpemVkIHZlY3RvclVwIHZlY3RvclVwVmlzdWFsIHZlY3RvcldvcmxkVG9Nb2RlbCB2ZWN0b3JXb3JsZFRvTW9kZWxWaXN1YWwgdmVoaWNsZSAnICtcbiAgICAgICAgJ3ZlaGljbGVDYXJnb0VuYWJsZWQgdmVoaWNsZUNoYXQgdmVoaWNsZVJhZGlvIHZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0cyB2ZWhpY2xlUmVwb3J0T3duUG9zaXRpb24gJyArXG4gICAgICAgICd2ZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0cyB2ZWhpY2xlcyB2ZWhpY2xlVmFyTmFtZSB2ZWxvY2l0eSB2ZWxvY2l0eU1vZGVsU3BhY2UgdmVyaWZ5U2lnbmF0dXJlICcgK1xuICAgICAgICAndmVzdCB2ZXN0Q29udGFpbmVyIHZlc3RJdGVtcyB2ZXN0TWFnYXppbmVzIHZpZXdEaXN0YW5jZSB2aXNpYmxlQ29tcGFzcyB2aXNpYmxlR1BTIHZpc2libGVNYXAgJyArXG4gICAgICAgICd2aXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uQVNMIHZpc2libGVTY29yZXRhYmxlIHZpc2libGVXYXRjaCB3YXZlcyB3YXlwb2ludEF0dGFjaGVkT2JqZWN0ICcgK1xuICAgICAgICAnd2F5cG9pbnRBdHRhY2hlZFZlaGljbGUgd2F5cG9pbnRBdHRhY2hPYmplY3Qgd2F5cG9pbnRBdHRhY2hWZWhpY2xlIHdheXBvaW50QmVoYXZpb3VyICcgK1xuICAgICAgICAnd2F5cG9pbnRDb21iYXRNb2RlIHdheXBvaW50Q29tcGxldGlvblJhZGl1cyB3YXlwb2ludERlc2NyaXB0aW9uIHdheXBvaW50Rm9yY2VCZWhhdmlvdXIgJyArXG4gICAgICAgICd3YXlwb2ludEZvcm1hdGlvbiB3YXlwb2ludEhvdXNlUG9zaXRpb24gd2F5cG9pbnRMb2l0ZXJSYWRpdXMgd2F5cG9pbnRMb2l0ZXJUeXBlIHdheXBvaW50TmFtZSAnICtcbiAgICAgICAgJ3dheXBvaW50UG9zaXRpb24gd2F5cG9pbnRzIHdheXBvaW50U2NyaXB0IHdheXBvaW50c0VuYWJsZWRVQVYgd2F5cG9pbnRTaG93IHdheXBvaW50U3BlZWQgJyArXG4gICAgICAgICd3YXlwb2ludFN0YXRlbWVudHMgd2F5cG9pbnRUaW1lb3V0IHdheXBvaW50VGltZW91dEN1cnJlbnQgd2F5cG9pbnRUeXBlIHdheXBvaW50VmlzaWJsZSAnICtcbiAgICAgICAgJ3dlYXBvbkFjY2Vzc29yaWVzIHdlYXBvbkFjY2Vzc29yaWVzQ2FyZ28gd2VhcG9uQ2FyZ28gd2VhcG9uRGlyZWN0aW9uIHdlYXBvbkluZXJ0aWEgd2VhcG9uTG93ZXJlZCAnICtcbiAgICAgICAgJ3dlYXBvbnMgd2VhcG9uc0l0ZW1zIHdlYXBvbnNJdGVtc0NhcmdvIHdlYXBvblN0YXRlIHdlYXBvbnNUdXJyZXQgd2VpZ2h0UlREIFdGU2lkZVRleHQgd2luZCAnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ2JsdWZvciBjaXZpbGlhbiBjb25maWdOdWxsIGNvbnRyb2xOdWxsIGRpc3BsYXlOdWxsIGVhc3QgZW5kbCBmYWxzZSBncnBOdWxsIGluZGVwZW5kZW50IGxpbmVCcmVhayAnICtcbiAgICAgICAgJ2xvY2F0aW9uTnVsbCBuaWwgb2JqTnVsbCBvcGZvciBwaSByZXNpc3RhbmNlIHNjcmlwdE51bGwgc2lkZUFtYmllbnRMaWZlIHNpZGVFbXB0eSBzaWRlTG9naWMgJyArXG4gICAgICAgICdzaWRlVW5rbm93biB0YXNrTnVsbCB0ZWFtTWVtYmVyTnVsbCB0cnVlIHdlc3QnLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBGVU5DVElPTixcbiAgICAgIFNUUklOR1MsXG4gICAgICBQUkVQUk9DRVNTT1JcbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jfF5cXCQgL1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1s8Pnt9Kl0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ2JlZ2luIGVuZCBzdGFydCBjb21taXQgcm9sbGJhY2sgc2F2ZXBvaW50IGxvY2sgYWx0ZXIgY3JlYXRlIGRyb3AgcmVuYW1lIGNhbGwgJyArXG4gICAgICAgICAgJ2RlbGV0ZSBkbyBoYW5kbGVyIGluc2VydCBsb2FkIHJlcGxhY2Ugc2VsZWN0IHRydW5jYXRlIHVwZGF0ZSBzZXQgc2hvdyBwcmFnbWEgZ3JhbnQgJyArXG4gICAgICAgICAgJ21lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlICcgK1xuICAgICAgICAgICd1bmxvY2sgcHVyZ2UgcmVzZXQgY2hhbmdlIHN0b3AgYW5hbHl6ZSBjYWNoZSBmbHVzaCBvcHRpbWl6ZSByZXBhaXIga2lsbCAnICtcbiAgICAgICAgICAnaW5zdGFsbCB1bmluc3RhbGwgY2hlY2tzdW0gcmVzdG9yZSBjaGVjayBiYWNrdXAgcmV2b2tlIGNvbW1lbnQgdmFsdWVzIHdpdGgnLFxuICAgICAgICBlbmQ6IC87LywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGxleGVtZXM6IC9bXFx3XFwuXSsvLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAnYXMgYWJvcnQgYWJzIGFic29sdXRlIGFjYyBhY2NlIGFjY2VwIGFjY2VwdCBhY2Nlc3MgYWNjZXNzZWQgYWNjZXNzaWJsZSBhY2NvdW50IGFjb3MgYWN0aW9uIGFjdGl2YXRlIGFkZCAnICtcbiAgICAgICAgICAgICdhZGR0aW1lIGFkbWluIGFkbWluaXN0ZXIgYWR2YW5jZWQgYWR2aXNlIGFlc19kZWNyeXB0IGFlc19lbmNyeXB0IGFmdGVyIGFnZW50IGFnZ3JlZ2F0ZSBhbGkgYWxpYSBhbGlhcyAnICtcbiAgICAgICAgICAgICdhbGwgYWxsb2NhdGUgYWxsb3cgYWx0ZXIgYWx3YXlzIGFuYWx5emUgYW5jaWxsYXJ5IGFuZCBhbnRpIGFueSBhbnlkYXRhIGFueWRhdGFzZXQgYW55c2NoZW1hIGFueXR5cGUgYXBwbHkgJyArXG4gICAgICAgICAgICAnYXJjaGl2ZSBhcmNoaXZlZCBhcmNoaXZlbG9nIGFyZSBhcyBhc2MgYXNjaWkgYXNpbiBhc3NlbWJseSBhc3NlcnRpb24gYXNzb2NpYXRlIGFzeW5jaHJvbm91cyBhdCBhdGFuICcgK1xuICAgICAgICAgICAgJ2F0bjIgYXR0ciBhdHRyaSBhdHRyaWIgYXR0cmlidSBhdHRyaWJ1dCBhdHRyaWJ1dGUgYXR0cmlidXRlcyBhdWRpdCBhdXRoZW50aWNhdGVkIGF1dGhlbnRpY2F0aW9uIGF1dGhpZCAnICtcbiAgICAgICAgICAgICdhdXRob3JzIGF1dG8gYXV0b2FsbG9jYXRlIGF1dG9kYmxpbmsgYXV0b2V4dGVuZCBhdXRvbWF0aWMgYXZhaWxhYmlsaXR5IGF2ZyBiYWNrdXAgYmFkZmlsZSBiYXNpY2ZpbGUgJyArXG4gICAgICAgICAgICAnYmVmb3JlIGJlZ2luIGJlZ2lubmluZyBiZW5jaG1hcmsgYmV0d2VlbiBiZmlsZSBiZmlsZV9iYXNlIGJpZyBiaWdmaWxlIGJpbiBiaW5hcnlfZG91YmxlIGJpbmFyeV9mbG9hdCAnICtcbiAgICAgICAgICAgICdiaW5sb2cgYml0X2FuZCBiaXRfY291bnQgYml0X2xlbmd0aCBiaXRfb3IgYml0X3hvciBiaXRtYXAgYmxvYl9iYXNlIGJsb2NrIGJsb2Nrc2l6ZSBib2R5IGJvdGggYm91bmQgJyArXG4gICAgICAgICAgICAnYnVja2V0IGJ1ZmZlcl9jYWNoZSBidWZmZXJfcG9vbCBidWlsZCBidWxrIGJ5IGJ5dGUgYnl0ZW9yZGVybWFyayBieXRlcyBjYWNoZSBjYWNoaW5nIGNhbGwgY2FsbGluZyBjYW5jZWwgJyArXG4gICAgICAgICAgICAnY2FwYWNpdHkgY2FzY2FkZSBjYXNjYWRlZCBjYXNlIGNhc3QgY2F0YWxvZyBjYXRlZ29yeSBjZWlsIGNlaWxpbmcgY2hhaW4gY2hhbmdlIGNoYW5nZWQgY2hhcl9iYXNlICcgK1xuICAgICAgICAgICAgJ2NoYXJfbGVuZ3RoIGNoYXJhY3Rlcl9sZW5ndGggY2hhcmFjdGVycyBjaGFyYWN0ZXJzZXQgY2hhcmluZGV4IGNoYXJzZXQgY2hhcnNldGZvcm0gY2hhcnNldGlkIGNoZWNrICcgK1xuICAgICAgICAgICAgJ2NoZWNrc3VtIGNoZWNrc3VtX2FnZyBjaGlsZCBjaG9vc2UgY2hyIGNodW5rIGNsYXNzIGNsZWFudXAgY2xlYXIgY2xpZW50IGNsb2IgY2xvYl9iYXNlIGNsb25lIGNsb3NlICcgK1xuICAgICAgICAgICAgJ2NsdXN0ZXJfaWQgY2x1c3Rlcl9wcm9iYWJpbGl0eSBjbHVzdGVyX3NldCBjbHVzdGVyaW5nIGNvYWxlc2NlIGNvZXJjaWJpbGl0eSBjb2wgY29sbGF0ZSBjb2xsYXRpb24gJyArXG4gICAgICAgICAgICAnY29sbGVjdCBjb2x1IGNvbHVtIGNvbHVtbiBjb2x1bW5fdmFsdWUgY29sdW1ucyBjb2x1bW5zX3VwZGF0ZWQgY29tbWVudCBjb21taXQgY29tcGFjdCBjb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAgICAgJ2NvbXBpbGVkIGNvbXBsZXRlIGNvbXBvc2l0ZV9saW1pdCBjb21wb3VuZCBjb21wcmVzcyBjb21wdXRlIGNvbmNhdCBjb25jYXRfd3MgY29uY3VycmVudCBjb25maXJtIGNvbm4gJyArXG4gICAgICAgICAgICAnY29ubmVjIGNvbm5lY3QgY29ubmVjdF9ieV9pc2N5Y2xlIGNvbm5lY3RfYnlfaXNsZWFmIGNvbm5lY3RfYnlfcm9vdCBjb25uZWN0X3RpbWUgY29ubmVjdGlvbiAnICtcbiAgICAgICAgICAgICdjb25zaWRlciBjb25zaXN0ZW50IGNvbnN0YW50IGNvbnN0cmFpbnQgY29uc3RyYWludHMgY29uc3RydWN0b3IgY29udGFpbmVyIGNvbnRlbnQgY29udGVudHMgY29udGV4dCAnICtcbiAgICAgICAgICAgICdjb250cmlidXRvcnMgY29udHJvbGZpbGUgY29udiBjb252ZXJ0IGNvbnZlcnRfdHogY29yciBjb3JyX2sgY29ycl9zIGNvcnJlc3BvbmRpbmcgY29ycnVwdGlvbiBjb3MgY29zdCAnICtcbiAgICAgICAgICAgICdjb3VudCBjb3VudF9iaWcgY291bnRlZCBjb3Zhcl9wb3AgY292YXJfc2FtcCBjcHVfcGVyX2NhbGwgY3B1X3Blcl9zZXNzaW9uIGNyYzMyIGNyZWF0ZSBjcmVhdGlvbiAnICtcbiAgICAgICAgICAgICdjcml0aWNhbCBjcm9zcyBjdWJlIGN1bWVfZGlzdCBjdXJkYXRlIGN1cnJlbnQgY3VycmVudF9kYXRlIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgJyArXG4gICAgICAgICAgICAnY3Vyc29yIGN1cnRpbWUgY3VzdG9tZGF0dW0gY3ljbGUgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF0YWZpbGUgZGF0YWZpbGVzIGRhdGFsZW5ndGggZGF0ZV9hZGQgJyArXG4gICAgICAgICAgICAnZGF0ZV9jYWNoZSBkYXRlX2Zvcm1hdCBkYXRlX3N1YiBkYXRlYWRkIGRhdGVkaWZmIGRhdGVmcm9tcGFydHMgZGF0ZW5hbWUgZGF0ZXBhcnQgZGF0ZXRpbWUyZnJvbXBhcnRzICcgK1xuICAgICAgICAgICAgJ2RheSBkYXlfdG9fc2Vjb25kIGRheW5hbWUgZGF5b2Ztb250aCBkYXlvZndlZWsgZGF5b2Z5ZWFyIGRheXMgZGJfcm9sZV9jaGFuZ2UgZGJ0aW1lem9uZSBkZGwgZGVhbGxvY2F0ZSAnICtcbiAgICAgICAgICAgICdkZWNsYXJlIGRlY29kZSBkZWNvbXBvc2UgZGVjcmVtZW50IGRlY3J5cHQgZGVkdXBsaWNhdGUgZGVmIGRlZmEgZGVmYXUgZGVmYXVsIGRlZmF1bHQgZGVmYXVsdHMgJyArXG4gICAgICAgICAgICAnZGVmZXJyZWQgZGVmaSBkZWZpbiBkZWZpbmUgZGVncmVlcyBkZWxheWVkIGRlbGVnYXRlIGRlbGV0ZSBkZWxldGVfYWxsIGRlbGltaXRlZCBkZW1hbmQgZGVuc2VfcmFuayAnICtcbiAgICAgICAgICAgICdkZXB0aCBkZXF1ZXVlIGRlc19kZWNyeXB0IGRlc19lbmNyeXB0IGRlc19rZXlfZmlsZSBkZXNjIGRlc2NyIGRlc2NyaSBkZXNjcmliIGRlc2NyaWJlIGRlc2NyaXB0b3IgJyArXG4gICAgICAgICAgICAnZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljcyBkaWZmZXJlbmNlIGRpbWVuc2lvbiBkaXJlY3RfbG9hZCBkaXJlY3RvcnkgZGlzYWJsZSBkaXNhYmxlX2FsbCAnICtcbiAgICAgICAgICAgICdkaXNhbGxvdyBkaXNhc3NvY2lhdGUgZGlzY2FyZGZpbGUgZGlzY29ubmVjdCBkaXNrZ3JvdXAgZGlzdGluY3QgZGlzdGluY3Ryb3cgZGlzdHJpYnV0ZSBkaXN0cmlidXRlZCBkaXYgJyArXG4gICAgICAgICAgICAnZG8gZG9jdW1lbnQgZG9tYWluIGRvdG5ldCBkb3VibGUgZG93bmdyYWRlIGRyb3AgZHVtcGZpbGUgZHVwbGljYXRlIGR1cmF0aW9uIGVhY2ggZWRpdGlvbiBlZGl0aW9uYWJsZSAnICtcbiAgICAgICAgICAgICdlZGl0aW9ucyBlbGVtZW50IGVsbGlwc2lzIGVsc2UgZWxzaWYgZWx0IGVtcHR5IGVuYWJsZSBlbmFibGVfYWxsIGVuY2xvc2VkIGVuY29kZSBlbmNvZGluZyBlbmNyeXB0ICcgK1xuICAgICAgICAgICAgJ2VuZCBlbmQtZXhlYyBlbmRpYW4gZW5mb3JjZWQgZW5naW5lIGVuZ2luZXMgZW5xdWV1ZSBlbnRlcnByaXNlIGVudGl0eWVzY2FwaW5nIGVvbW9udGggZXJyb3IgZXJyb3JzICcgK1xuICAgICAgICAgICAgJ2VzY2FwZWQgZXZhbG5hbWUgZXZhbHVhdGUgZXZlbnQgZXZlbnRkYXRhIGV2ZW50cyBleGNlcHQgZXhjZXB0aW9uIGV4Y2VwdGlvbnMgZXhjaGFuZ2UgZXhjbHVkZSBleGNsdWRpbmcgJyArXG4gICAgICAgICAgICAnZXhlY3UgZXhlY3V0IGV4ZWN1dGUgZXhlbXB0IGV4aXN0cyBleGl0IGV4cCBleHBpcmUgZXhwbGFpbiBleHBsb2RlIGV4cG9ydCBleHBvcnRfc2V0IGV4dGVuZGVkIGV4dGVudCBleHRlcm5hbCAnICtcbiAgICAgICAgICAgICdleHRlcm5hbF8xIGV4dGVybmFsXzIgZXh0ZXJuYWxseSBleHRyYWN0IGZhaWxlZCBmYWlsZWRfbG9naW5fYXR0ZW1wdHMgZmFpbG92ZXIgZmFpbHVyZSBmYXIgZmFzdCAnICtcbiAgICAgICAgICAgICdmZWF0dXJlX3NldCBmZWF0dXJlX3ZhbHVlIGZldGNoIGZpZWxkIGZpZWxkcyBmaWxlIGZpbGVfbmFtZV9jb252ZXJ0IGZpbGVzeXN0ZW1fbGlrZV9sb2dnaW5nIGZpbmFsICcgK1xuICAgICAgICAgICAgJ2ZpbmlzaCBmaXJzdCBmaXJzdF92YWx1ZSBmaXhlZCBmbGFzaF9jYWNoZSBmbGFzaGJhY2sgZmxvb3IgZmx1c2ggZm9sbG93aW5nIGZvbGxvd3MgZm9yIGZvcmFsbCBmb3JjZSBmb3JlaWduICcgK1xuICAgICAgICAgICAgJ2Zvcm0gZm9ybWEgZm9ybWF0IGZvdW5kIGZvdW5kX3Jvd3MgZnJlZWxpc3QgZnJlZWxpc3RzIGZyZWVwb29scyBmcmVzaCBmcm9tIGZyb21fYmFzZTY0IGZyb21fZGF5cyAnICtcbiAgICAgICAgICAgICdmdHAgZnVsbCBmdW5jdGlvbiBnZW5lcmFsIGdlbmVyYXRlZCBnZXQgZ2V0X2Zvcm1hdCBnZXRfbG9jayBnZXRkYXRlIGdldHV0Y2RhdGUgZ2xvYmFsIGdsb2JhbF9uYW1lICcgK1xuICAgICAgICAgICAgJ2dsb2JhbGx5IGdvIGdvdG8gZ3JhbnQgZ3JhbnRzIGdyZWF0ZXN0IGdyb3VwIGdyb3VwX2NvbmNhdCBncm91cF9pZCBncm91cGluZyBncm91cGluZ19pZCBncm91cHMgJyArXG4gICAgICAgICAgICAnZ3RpZF9zdWJ0cmFjdCBndWFyYW50ZWUgZ3VhcmQgaGFuZGxlciBoYXNoIGhhc2hrZXlzIGhhdmluZyBoZWEgaGVhZCBoZWFkaSBoZWFkaW4gaGVhZGluZyBoZWFwIGhlbHAgaGV4ICcgK1xuICAgICAgICAgICAgJ2hpZXJhcmNoeSBoaWdoIGhpZ2hfcHJpb3JpdHkgaG9zdHMgaG91ciBob3VycyBodHRwIGlkIGlkZW50X2N1cnJlbnQgaWRlbnRfaW5jciBpZGVudF9zZWVkIGlkZW50aWZpZWQgJyArXG4gICAgICAgICAgICAnaWRlbnRpdHkgaWRsZV90aW1lIGlmIGlmbnVsbCBpZ25vcmUgaWlmIGlsaWtlIGlsbSBpbW1lZGlhdGUgaW1wb3J0IGluIGluY2x1ZGUgaW5jbHVkaW5nIGluY3JlbWVudCAnICtcbiAgICAgICAgICAgICdpbmRleCBpbmRleGVzIGluZGV4aW5nIGluZGV4dHlwZSBpbmRpY2F0b3IgaW5kaWNlcyBpbmV0Nl9hdG9uIGluZXQ2X250b2EgaW5ldF9hdG9uIGluZXRfbnRvYSBpbmZpbGUgJyArXG4gICAgICAgICAgICAnaW5pdGlhbCBpbml0aWFsaXplZCBpbml0aWFsbHkgaW5pdHJhbnMgaW5tZW1vcnkgaW5uZXIgaW5ub2RiIGlucHV0IGluc2VydCBpbnN0YWxsIGluc3RhbmNlIGluc3RhbnRpYWJsZSAnICtcbiAgICAgICAgICAgICdpbnN0ciBpbnRlcmZhY2UgaW50ZXJsZWF2ZWQgaW50ZXJzZWN0IGludG8gaW52YWxpZGF0ZSBpbnZpc2libGUgaXMgaXNfZnJlZV9sb2NrIGlzX2lwdjQgaXNfaXB2NF9jb21wYXQgJyArXG4gICAgICAgICAgICAnaXNfbm90IGlzX25vdF9udWxsIGlzX3VzZWRfbG9jayBpc2RhdGUgaXNudWxsIGlzb2xhdGlvbiBpdGVyYXRlIGphdmEgam9pbiBqc29uIGpzb25fZXhpc3RzICcgK1xuICAgICAgICAgICAgJ2tlZXAga2VlcF9kdXBsaWNhdGVzIGtleSBrZXlzIGtpbGwgbGFuZ3VhZ2UgbGFyZ2UgbGFzdCBsYXN0X2RheSBsYXN0X2luc2VydF9pZCBsYXN0X3ZhbHVlIGxhdGVyYWwgbGF4IGxjYXNlICcgK1xuICAgICAgICAgICAgJ2xlYWQgbGVhZGluZyBsZWFzdCBsZWF2ZXMgbGVmdCBsZW4gbGVuZ2h0IGxlbmd0aCBsZXNzIGxldmVsIGxldmVscyBsaWJyYXJ5IGxpa2UgbGlrZTIgbGlrZTQgbGlrZWMgbGltaXQgJyArXG4gICAgICAgICAgICAnbGluZXMgbGluayBsaXN0IGxpc3RhZ2cgbGl0dGxlIGxuIGxvYWQgbG9hZF9maWxlIGxvYiBsb2JzIGxvY2FsIGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NhdGUgJyArXG4gICAgICAgICAgICAnbG9jYXRvciBsb2NrIGxvY2tlZCBsb2cgbG9nMTAgbG9nMiBsb2dmaWxlIGxvZ2ZpbGVzIGxvZ2dpbmcgbG9naWNhbCBsb2dpY2FsX3JlYWRzX3Blcl9jYWxsICcgK1xuICAgICAgICAgICAgJ2xvZ29mZiBsb2dvbiBsb2dzIGxvbmcgbG9vcCBsb3cgbG93X3ByaW9yaXR5IGxvd2VyIGxwYWQgbHJ0cmltIGx0cmltIG1haW4gbWFrZV9zZXQgbWFrZWRhdGUgbWFrZXRpbWUgJyArXG4gICAgICAgICAgICAnbWFuYWdlZCBtYW5hZ2VtZW50IG1hbnVhbCBtYXAgbWFwcGluZyBtYXNrIG1hc3RlciBtYXN0ZXJfcG9zX3dhaXQgbWF0Y2ggbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWF4ICcgK1xuICAgICAgICAgICAgJ21heGV4dGVudHMgbWF4aW1pemUgbWF4aW5zdGFuY2VzIG1heGxlbiBtYXhsb2dmaWxlcyBtYXhsb2doaXN0b3J5IG1heGxvZ21lbWJlcnMgbWF4c2l6ZSBtYXh0cmFucyAnICtcbiAgICAgICAgICAgICdtZDUgbWVhc3VyZXMgbWVkaWFuIG1lZGl1bSBtZW1iZXIgbWVtY29tcHJlc3MgbWVtb3J5IG1lcmdlIG1pY3Jvc2Vjb25kIG1pZCBtaWdyYXRpb24gbWluIG1pbmV4dGVudHMgJyArXG4gICAgICAgICAgICAnbWluaW11bSBtaW5pbmcgbWludXMgbWludXRlIG1pbnV0ZXMgbWludmFsdWUgbWlzc2luZyBtb2QgbW9kZSBtb2RlbCBtb2RpZmljYXRpb24gbW9kaWZ5IG1vZHVsZSBtb25pdG9yaW5nIG1vbnRoICcgK1xuICAgICAgICAgICAgJ21vbnRocyBtb3VudCBtb3ZlIG1vdmVtZW50IG11bHRpc2V0IG11dGV4IG5hbWUgbmFtZV9jb25zdCBuYW1lcyBuYW4gbmF0aW9uYWwgbmF0aXZlIG5hdHVyYWwgbmF2IG5jaGFyICcgK1xuICAgICAgICAgICAgJ25jbG9iIG5lc3RlZCBuZXZlciBuZXcgbmV3bGluZSBuZXh0IG5leHR2YWwgbm8gbm9fd3JpdGVfdG9fYmlubG9nIG5vYXJjaGl2ZWxvZyBub2F1ZGl0IG5vYmFkZmlsZSAnICtcbiAgICAgICAgICAgICdub2NoZWNrIG5vY29tcHJlc3Mgbm9jb3B5IG5vY3ljbGUgbm9kZWxheSBub2Rpc2NhcmRmaWxlIG5vZW50aXR5ZXNjYXBpbmcgbm9ndWFyYW50ZWUgbm9rZWVwIG5vbG9nZmlsZSAnICtcbiAgICAgICAgICAgICdub21hcHBpbmcgbm9tYXh2YWx1ZSBub21pbmltaXplIG5vbWludmFsdWUgbm9tb25pdG9yaW5nIG5vbmUgbm9uZWRpdGlvbmFibGUgbm9uc2NoZW1hIG5vb3JkZXIgJyArXG4gICAgICAgICAgICAnbm9wciBub3BybyBub3Byb20gbm9wcm9tcCBub3Byb21wdCBub3JlbHkgbm9yZXNldGxvZ3Mgbm9yZXZlcnNlIG5vcm1hbCBub3Jvd2RlcGVuZGVuY2llcyBub3NjaGVtYWNoZWNrICcgK1xuICAgICAgICAgICAgJ25vc3dpdGNoIG5vdCBub3RoaW5nIG5vdGljZSBub3RudWxsIG5vdHJpbSBub3ZhbGlkYXRlIG5vdyBub3dhaXQgbnRoX3ZhbHVlIG51bGxpZiBudWxscyBudW0gbnVtYiBudW1iZSAnICtcbiAgICAgICAgICAgICdudmFyY2hhciBudmFyY2hhcjIgb2JqZWN0IG9jaWNvbGwgb2NpZGF0ZSBvY2lkYXRldGltZSBvY2lkdXJhdGlvbiBvY2lpbnRlcnZhbCBvY2lsb2Jsb2NhdG9yIG9jaW51bWJlciAnICtcbiAgICAgICAgICAgICdvY2lyZWYgb2NpcmVmY3Vyc29yIG9jaXJvd2lkIG9jaXN0cmluZyBvY2l0eXBlIG9jdCBvY3RldF9sZW5ndGggb2Ygb2ZmIG9mZmxpbmUgb2Zmc2V0IG9pZCBvaWRpbmRleCBvbGQgJyArXG4gICAgICAgICAgICAnb24gb25saW5lIG9ubHkgb3BhcXVlIG9wZW4gb3BlcmF0aW9ucyBvcGVyYXRvciBvcHRpbWFsIG9wdGltaXplIG9wdGlvbiBvcHRpb25hbGx5IG9yIG9yYWNsZSBvcmFjbGVfZGF0ZSAnICtcbiAgICAgICAgICAgICdvcmFkYXRhIG9yZCBvcmRhdWRpbyBvcmRkaWNvbSBvcmRkb2Mgb3JkZXIgb3JkaW1hZ2Ugb3JkaW5hbGl0eSBvcmR2aWRlbyBvcmdhbml6YXRpb24gb3JsYW55IG9ybHZhcnkgJyArXG4gICAgICAgICAgICAnb3V0IG91dGVyIG91dGZpbGUgb3V0bGluZSBvdXRwdXQgb3ZlciBvdmVyZmxvdyBvdmVycmlkaW5nIHBhY2thZ2UgcGFkIHBhcmFsbGVsIHBhcmFsbGVsX2VuYWJsZSAnICtcbiAgICAgICAgICAgICdwYXJhbWV0ZXJzIHBhcmVudCBwYXJzZSBwYXJ0aWFsIHBhcnRpdGlvbiBwYXJ0aXRpb25zIHBhc2NhbCBwYXNzaW5nIHBhc3N3b3JkIHBhc3N3b3JkX2dyYWNlX3RpbWUgJyArXG4gICAgICAgICAgICAncGFzc3dvcmRfbG9ja190aW1lIHBhc3N3b3JkX3JldXNlX21heCBwYXNzd29yZF9yZXVzZV90aW1lIHBhc3N3b3JkX3ZlcmlmeV9mdW5jdGlvbiBwYXRjaCBwYXRoIHBhdGluZGV4ICcgK1xuICAgICAgICAgICAgJ3BjdGluY3JlYXNlIHBjdHRocmVzaG9sZCBwY3R1c2VkIHBjdHZlcnNpb24gcGVyY2VudCBwZXJjZW50X3JhbmsgcGVyY2VudGlsZV9jb250IHBlcmNlbnRpbGVfZGlzYyAnICtcbiAgICAgICAgICAgICdwZXJmb3JtYW5jZSBwZXJpb2QgcGVyaW9kX2FkZCBwZXJpb2RfZGlmZiBwZXJtYW5lbnQgcGh5c2ljYWwgcGkgcGlwZSBwaXBlbGluZWQgcGl2b3QgcGx1Z2dhYmxlIHBsdWdpbiAnICtcbiAgICAgICAgICAgICdwb2xpY3kgcG9zaXRpb24gcG9zdF90cmFuc2FjdGlvbiBwb3cgcG93ZXIgcHJhZ21hIHByZWJ1aWx0IHByZWNlZGVzIHByZWNlZGluZyBwcmVjaXNpb24gcHJlZGljdGlvbiAnICtcbiAgICAgICAgICAgICdwcmVkaWN0aW9uX2Nvc3QgcHJlZGljdGlvbl9kZXRhaWxzIHByZWRpY3Rpb25fcHJvYmFiaWxpdHkgcHJlZGljdGlvbl9zZXQgcHJlcGFyZSBwcmVzZW50IHByZXNlcnZlICcgK1xuICAgICAgICAgICAgJ3ByaW9yIHByaW9yaXR5IHByaXZhdGUgcHJpdmF0ZV9zZ2EgcHJpdmlsZWdlcyBwcm9jZWR1cmFsIHByb2NlZHVyZSBwcm9jZWR1cmVfYW5hbHl6ZSBwcm9jZXNzbGlzdCAnICtcbiAgICAgICAgICAgICdwcm9maWxlcyBwcm9qZWN0IHByb21wdCBwcm90ZWN0aW9uIHB1YmxpYyBwdWJsaXNoaW5nc2VydmVybmFtZSBwdXJnZSBxdWFydGVyIHF1ZXJ5IHF1aWNrIHF1aWVzY2UgcXVvdGEgJyArXG4gICAgICAgICAgICAncXVvdGVuYW1lIHJhZGlhbnMgcmFpc2UgcmFuZCByYW5nZSByYW5rIHJhdyByZWFkIHJlYWRzIHJlYWRzaXplIHJlYnVpbGQgcmVjb3JkIHJlY29yZHMgJyArXG4gICAgICAgICAgICAncmVjb3ZlciByZWNvdmVyeSByZWN1cnNpdmUgcmVjeWNsZSByZWRvIHJlZHVjZWQgcmVmIHJlZmVyZW5jZSByZWZlcmVuY2VkIHJlZmVyZW5jZXMgcmVmZXJlbmNpbmcgcmVmcmVzaCAnICtcbiAgICAgICAgICAgICdyZWdleHBfbGlrZSByZWdpc3RlciByZWdyX2F2Z3ggcmVncl9hdmd5IHJlZ3JfY291bnQgcmVncl9pbnRlcmNlcHQgcmVncl9yMiByZWdyX3Nsb3BlIHJlZ3Jfc3h4IHJlZ3Jfc3h5ICcgK1xuICAgICAgICAgICAgJ3JlamVjdCByZWtleSByZWxhdGlvbmFsIHJlbGF0aXZlIHJlbGF5bG9nIHJlbGVhc2UgcmVsZWFzZV9sb2NrIHJlbGllc19vbiByZWxvY2F0ZSByZWx5IHJlbSByZW1haW5kZXIgcmVuYW1lICcgK1xuICAgICAgICAgICAgJ3JlcGFpciByZXBlYXQgcmVwbGFjZSByZXBsaWNhdGUgcmVwbGljYXRpb24gcmVxdWlyZWQgcmVzZXQgcmVzZXRsb2dzIHJlc2l6ZSByZXNvdXJjZSByZXNwZWN0IHJlc3RvcmUgJyArXG4gICAgICAgICAgICAncmVzdHJpY3RlZCByZXN1bHQgcmVzdWx0X2NhY2hlIHJlc3VtYWJsZSByZXN1bWUgcmV0ZW50aW9uIHJldHVybiByZXR1cm5pbmcgcmV0dXJucyByZXVzZSByZXZlcnNlIHJldm9rZSAnICtcbiAgICAgICAgICAgICdyaWdodCBybGlrZSByb2xlIHJvbGVzIHJvbGxiYWNrIHJvbGxpbmcgcm9sbHVwIHJvdW5kIHJvdyByb3dfY291bnQgcm93ZGVwZW5kZW5jaWVzIHJvd2lkIHJvd251bSByb3dzICcgK1xuICAgICAgICAgICAgJ3J0cmltIHJ1bGVzIHNhZmUgc2FsdCBzYW1wbGUgc2F2ZSBzYXZlcG9pbnQgc2IxIHNiMiBzYjQgc2NhbiBzY2hlbWEgc2NoZW1hY2hlY2sgc2NuIHNjb3BlIHNjcm9sbCAnICtcbiAgICAgICAgICAgICdzZG9fZ2VvcmFzdGVyIHNkb190b3BvX2dlb21ldHJ5IHNlYXJjaCBzZWNfdG9fdGltZSBzZWNvbmQgc2Vjb25kcyBzZWN0aW9uIHNlY3VyZWZpbGUgc2VjdXJpdHkgc2VlZCBzZWdtZW50IHNlbGVjdCAnICtcbiAgICAgICAgICAgICdzZWxmIHNlbWkgc2VxdWVuY2Ugc2VxdWVudGlhbCBzZXJpYWxpemFibGUgc2VydmVyIHNlcnZlcmVycm9yIHNlc3Npb24gc2Vzc2lvbl91c2VyIHNlc3Npb25zX3Blcl91c2VyIHNldCAnICtcbiAgICAgICAgICAgICdzZXRzIHNldHRpbmdzIHNoYSBzaGExIHNoYTIgc2hhcmUgc2hhcmVkIHNoYXJlZF9wb29sIHNob3J0IHNob3cgc2hyaW5rIHNodXRkb3duIHNpX2F2ZXJhZ2Vjb2xvciAnICtcbiAgICAgICAgICAgICdzaV9jb2xvcmhpc3RvZ3JhbSBzaV9mZWF0dXJlbGlzdCBzaV9wb3NpdGlvbmFsY29sb3Igc2lfc3RpbGxpbWFnZSBzaV90ZXh0dXJlIHNpYmxpbmdzIHNpZCBzaWduIHNpbiAnICtcbiAgICAgICAgICAgICdzaXplIHNpemVfdCBzaXplcyBza2lwIHNsYXZlIHNsZWVwIHNtYWxsZGF0ZXRpbWVmcm9tcGFydHMgc21hbGxmaWxlIHNuYXBzaG90IHNvbWUgc29uYW1lIHNvcnQgc291bmRleCAnICtcbiAgICAgICAgICAgICdzb3VyY2Ugc3BhY2Ugc3BhcnNlIHNwZmlsZSBzcGxpdCBzcWwgc3FsX2JpZ19yZXN1bHQgc3FsX2J1ZmZlcl9yZXN1bHQgc3FsX2NhY2hlIHNxbF9jYWxjX2ZvdW5kX3Jvd3MgJyArXG4gICAgICAgICAgICAnc3FsX3NtYWxsX3Jlc3VsdCBzcWxfdmFyaWFudF9wcm9wZXJ0eSBzcWxjb2RlIHNxbGRhdGEgc3FsZXJyb3Igc3FsbmFtZSBzcWxzdGF0ZSBzcXJ0IHNxdWFyZSBzdGFuZGFsb25lICcgK1xuICAgICAgICAgICAgJ3N0YW5kYnkgc3RhcnQgc3RhcnRpbmcgc3RhcnR1cCBzdGF0ZW1lbnQgc3RhdGljIHN0YXRpc3RpY3Mgc3RhdHNfYmlub21pYWxfdGVzdCBzdGF0c19jcm9zc3RhYiAnICtcbiAgICAgICAgICAgICdzdGF0c19rc190ZXN0IHN0YXRzX21vZGUgc3RhdHNfbXdfdGVzdCBzdGF0c19vbmVfd2F5X2Fub3ZhIHN0YXRzX3RfdGVzdF8gc3RhdHNfdF90ZXN0X2luZGVwICcgK1xuICAgICAgICAgICAgJ3N0YXRzX3RfdGVzdF9vbmUgc3RhdHNfdF90ZXN0X3BhaXJlZCBzdGF0c193c3JfdGVzdCBzdGF0dXMgc3RkIHN0ZGRldiBzdGRkZXZfcG9wIHN0ZGRldl9zYW1wIHN0ZGV2ICcgK1xuICAgICAgICAgICAgJ3N0b3Agc3RvcmFnZSBzdG9yZSBzdG9yZWQgc3RyIHN0cl90b19kYXRlIHN0cmFpZ2h0X2pvaW4gc3RyY21wIHN0cmljdCBzdHJpbmcgc3RydWN0IHN0dWZmIHN0eWxlIHN1YmRhdGUgJyArXG4gICAgICAgICAgICAnc3VicGFydGl0aW9uIHN1YnBhcnRpdGlvbnMgc3Vic3RpdHV0YWJsZSBzdWJzdHIgc3Vic3RyaW5nIHN1YnRpbWUgc3VidHJpbmdfaW5kZXggc3VidHlwZSBzdWNjZXNzIHN1bSAnICtcbiAgICAgICAgICAgICdzdXNwZW5kIHN3aXRjaCBzd2l0Y2hvZmZzZXQgc3dpdGNob3ZlciBzeW5jIHN5bmNocm9ub3VzIHN5bm9ueW0gc3lzIHN5c194bWxhZ2cgc3lzYXNtIHN5c2F1eCBzeXNkYXRlICcgK1xuICAgICAgICAgICAgJ3N5c2RhdGV0aW1lb2Zmc2V0IHN5c2RiYSBzeXNvcGVyIHN5c3RlbSBzeXN0ZW1fdXNlciBzeXN1dGNkYXRldGltZSB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YWJsZXNhbXBsZSB0YW4gdGRvICcgK1xuICAgICAgICAgICAgJ3RlbXBsYXRlIHRlbXBvcmFyeSB0ZXJtaW5hdGVkIHRlcnRpYXJ5X3dlaWdodHMgdGVzdCB0aGFuIHRoZW4gdGhyZWFkIHRocm91Z2ggdGllciB0aWVzIHRpbWUgdGltZV9mb3JtYXQgJyArXG4gICAgICAgICAgICAndGltZV96b25lIHRpbWVkaWZmIHRpbWVmcm9tcGFydHMgdGltZW91dCB0aW1lc3RhbXAgdGltZXN0YW1wYWRkIHRpbWVzdGFtcGRpZmYgdGltZXpvbmVfYWJiciAnICtcbiAgICAgICAgICAgICd0aW1lem9uZV9taW51dGUgdGltZXpvbmVfcmVnaW9uIHRvIHRvX2Jhc2U2NCB0b19kYXRlIHRvX2RheXMgdG9fc2Vjb25kcyB0b2RhdGV0aW1lb2Zmc2V0IHRyYWNlIHRyYWNraW5nICcgK1xuICAgICAgICAgICAgJ3RyYW5zYWN0aW9uIHRyYW5zYWN0aW9uYWwgdHJhbnNsYXRlIHRyYW5zbGF0aW9uIHRyZWF0IHRyaWdnZXIgdHJpZ2dlcl9uZXN0bGV2ZWwgdHJpZ2dlcnMgdHJpbSB0cnVuY2F0ZSAnICtcbiAgICAgICAgICAgICd0cnlfY2FzdCB0cnlfY29udmVydCB0cnlfcGFyc2UgdHlwZSB1YjEgdWIyIHViNCB1Y2FzZSB1bmFyY2hpdmVkIHVuYm91bmRlZCB1bmNvbXByZXNzICcgK1xuICAgICAgICAgICAgJ3VuZGVyIHVuZG8gdW5oZXggdW5pY29kZSB1bmlmb3JtIHVuaW5zdGFsbCB1bmlvbiB1bmlxdWUgdW5peF90aW1lc3RhbXAgdW5rbm93biB1bmxpbWl0ZWQgdW5sb2NrIHVubmVzdCB1bnBpdm90ICcgK1xuICAgICAgICAgICAgJ3VucmVjb3ZlcmFibGUgdW5zYWZlIHVuc2lnbmVkIHVudGlsIHVudHJ1c3RlZCB1bnVzYWJsZSB1bnVzZWQgdXBkYXRlIHVwZGF0ZWQgdXBncmFkZSB1cHBlZCB1cHBlciB1cHNlcnQgJyArXG4gICAgICAgICAgICAndXJsIHVyb3dpZCB1c2FibGUgdXNhZ2UgdXNlIHVzZV9zdG9yZWRfb3V0bGluZXMgdXNlciB1c2VyX2RhdGEgdXNlcl9yZXNvdXJjZXMgdXNlcnMgdXNpbmcgdXRjX2RhdGUgJyArXG4gICAgICAgICAgICAndXRjX3RpbWVzdGFtcCB1dWlkIHV1aWRfc2hvcnQgdmFsaWRhdGUgdmFsaWRhdGVfcGFzc3dvcmRfc3RyZW5ndGggdmFsaWRhdGlvbiB2YWxpc3QgdmFsdWUgdmFsdWVzIHZhciAnICtcbiAgICAgICAgICAgICd2YXJfc2FtcCB2YXJjaGFyYyB2YXJpIHZhcmlhIHZhcmlhYiB2YXJpYWJsIHZhcmlhYmxlIHZhcmlhYmxlcyB2YXJpYW5jZSB2YXJwIHZhcnJhdyB2YXJyYXdjIHZhcnJheSAnICtcbiAgICAgICAgICAgICd2ZXJpZnkgdmVyc2lvbiB2ZXJzaW9ucyB2aWV3IHZpcnR1YWwgdmlzaWJsZSB2b2lkIHdhaXQgd2FsbGV0IHdhcm5pbmcgd2FybmluZ3Mgd2VlayB3ZWVrZGF5IHdlZWtvZnllYXIgJyArXG4gICAgICAgICAgICAnd2VsbGZvcm1lZCB3aGVuIHdoZW5lIHdoZW5ldiB3aGVuZXZlIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdoaXRlc3BhY2Ugd2luZG93IHdpdGggd2l0aGluIHdpdGhvdXQgd29yayB3cmFwcGVkICcgK1xuICAgICAgICAgICAgJ3hkYiB4bWwgeG1sYWdnIHhtbGF0dHJpYnV0ZXMgeG1sY2FzdCB4bWxjb2xhdHR2YWwgeG1sZWxlbWVudCB4bWxleGlzdHMgeG1sZm9yZXN0IHhtbGluZGV4IHhtbG5hbWVzcGFjZXMgJyArXG4gICAgICAgICAgICAneG1scGkgeG1scXVlcnkgeG1scm9vdCB4bWxzY2hlbWEgeG1sc2VyaWFsaXplIHhtbHRhYmxlIHhtbHR5cGUgeG9yIHllYXIgeWVhcl90b19tb250aCB5ZWFycyB5ZWFyd2VlaycsXG4gICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5rbm93bicsXG4gICAgICAgICAgYnVpbHRfaW46XG4gICAgICAgICAgICAnYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sIGJvb2xlYW4gY2hhciBjaGFyYWN0ZXIgZGF0ZSBkZWMgZGVjaW1hbCBmbG9hdCBpbnQgaW50OCBpbnRlZ2VyIGludGVydmFsIG51bWJlciAnICtcbiAgICAgICAgICAgICdudW1lcmljIHJlYWwgcmVjb3JkIHNlcmlhbCBzZXJpYWw4IHNtYWxsaW50IHRleHQgdGltZSB0aW1lc3RhbXAgdGlueWludCB2YXJjaGFyIHZhcmNoYXIyIHZhcnlpbmcgdm9pZCdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcXCdcXCcnfV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIENPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIHZhcmlhYmxlIG5hbWVzIGNhbm5vdCBjb25mbGljdCB3aXRoIGJsb2NrIGlkZW50aWZpZXJzXG4gIHZhciBCTE9DS1MgPSBbXG4gICAgJ2Z1bmN0aW9ucycsXG4gICAgJ21vZGVsJyxcbiAgICAnZGF0YScsXG4gICAgJ3BhcmFtZXRlcnMnLFxuICAgICdxdWFudGl0aWVzJyxcbiAgICAndHJhbnNmb3JtZWQnLFxuICAgICdnZW5lcmF0ZWQnXG4gIF07XG4gIHZhciBTVEFURU1FTlRTID0gW1xuICAgICdmb3InLFxuICAgICdpbicsXG4gICAgJ2lmJyxcbiAgICAnZWxzZScsXG4gICAgJ3doaWxlJyxcbiAgICAnYnJlYWsnLFxuICAgICdjb250aW51ZScsXG4gICAgJ3JldHVybidcbiAgXTtcbiAgdmFyIFNQRUNJQUxfRlVOQ1RJT05TID0gW1xuICAgICdwcmludCcsXG4gICAgJ3JlamVjdCcsXG4gICAgJ2luY3JlbWVudF9sb2dfcHJvYnwxMCcsXG4gICAgJ2ludGVncmF0ZV9vZGV8MTAnLFxuICAgICdpbnRlZ3JhdGVfb2RlX3JrNDV8MTAnLFxuICAgICdpbnRlZ3JhdGVfb2RlX2JkZnwxMCcsXG4gICAgJ2FsZ2VicmFfc29sdmVyJ1xuICBdO1xuICB2YXIgVkFSX1RZUEVTID0gW1xuICAgICdpbnQnLFxuICAgICdyZWFsJyxcbiAgICAndmVjdG9yJyxcbiAgICAnb3JkZXJlZCcsXG4gICAgJ3Bvc2l0aXZlX29yZGVyZWQnLFxuICAgICdzaW1wbGV4JyxcbiAgICAndW5pdF92ZWN0b3InLFxuICAgICdyb3dfdmVjdG9yJyxcbiAgICAnbWF0cml4JyxcbiAgICAnY2hvbGVza3lfZmFjdG9yX2NvcnJ8MTAnLFxuICAgICdjaG9sZXNreV9mYWN0b3JfY292fDEwJyxcbiAgICAnY29ycl9tYXRyaXh8MTAnLFxuICAgICdjb3ZfbWF0cml4fDEwJyxcbiAgICAndm9pZCdcbiAgXTtcbiAgdmFyIEZVTkNUSU9OUyA9IFtcbiAgICAnUGhpJywgJ1BoaV9hcHByb3gnLCAnYWJzJywgJ2Fjb3MnLCAnYWNvc2gnLCAnYWxnZWJyYV9zb2x2ZXInLCAnYXBwZW5kX2FycmF5JyxcbiAgICAnYXBwZW5kX2NvbCcsICdhcHBlbmRfcm93JywgJ2FzaW4nLCAnYXNpbmgnLCAnYXRhbicsICdhdGFuMicsICdhdGFuaCcsXG4gICAgJ2Jlcm5vdWxsaV9jZGYnLCAnYmVybm91bGxpX2xjY2RmJywgJ2Jlcm5vdWxsaV9sY2RmJywgJ2Jlcm5vdWxsaV9sb2dpdF9scG1mJyxcbiAgICAnYmVybm91bGxpX2xvZ2l0X3JuZycsICdiZXJub3VsbGlfbHBtZicsICdiZXJub3VsbGlfcm5nJywgJ2Jlc3NlbF9maXJzdF9raW5kJyxcbiAgICAnYmVzc2VsX3NlY29uZF9raW5kJywgJ2JldGFfYmlub21pYWxfY2RmJywgJ2JldGFfYmlub21pYWxfbGNjZGYnLFxuICAgICdiZXRhX2Jpbm9taWFsX2xjZGYnLCAnYmV0YV9iaW5vbWlhbF9scG1mJywgJ2JldGFfYmlub21pYWxfcm5nJywgJ2JldGFfY2RmJyxcbiAgICAnYmV0YV9sY2NkZicsICdiZXRhX2xjZGYnLCAnYmV0YV9scGRmJywgJ2JldGFfcm5nJywgJ2JpbmFyeV9sb2dfbG9zcycsXG4gICAgJ2Jpbm9taWFsX2NkZicsICdiaW5vbWlhbF9jb2VmZmljaWVudF9sb2cnLCAnYmlub21pYWxfbGNjZGYnLCAnYmlub21pYWxfbGNkZicsXG4gICAgJ2Jpbm9taWFsX2xvZ2l0X2xwbWYnLCAnYmlub21pYWxfbHBtZicsICdiaW5vbWlhbF9ybmcnLCAnYmxvY2snLFxuICAgICdjYXRlZ29yaWNhbF9sb2dpdF9scG1mJywgJ2NhdGVnb3JpY2FsX2xvZ2l0X3JuZycsICdjYXRlZ29yaWNhbF9scG1mJyxcbiAgICAnY2F0ZWdvcmljYWxfcm5nJywgJ2NhdWNoeV9jZGYnLCAnY2F1Y2h5X2xjY2RmJywgJ2NhdWNoeV9sY2RmJywgJ2NhdWNoeV9scGRmJyxcbiAgICAnY2F1Y2h5X3JuZycsICdjYnJ0JywgJ2NlaWwnLCAnY2hpX3NxdWFyZV9jZGYnLCAnY2hpX3NxdWFyZV9sY2NkZicsXG4gICAgJ2NoaV9zcXVhcmVfbGNkZicsICdjaGlfc3F1YXJlX2xwZGYnLCAnY2hpX3NxdWFyZV9ybmcnLCAnY2hvbGVza3lfZGVjb21wb3NlJyxcbiAgICAnY2hvb3NlJywgJ2NvbCcsICdjb2xzJywgJ2NvbHVtbnNfZG90X3Byb2R1Y3QnLCAnY29sdW1uc19kb3Rfc2VsZicsICdjb3MnLFxuICAgICdjb3NoJywgJ2Nvdl9leHBfcXVhZCcsICdjcm9zc3Byb2QnLCAnY3NyX2V4dHJhY3RfdScsICdjc3JfZXh0cmFjdF92JyxcbiAgICAnY3NyX2V4dHJhY3RfdycsICdjc3JfbWF0cml4X3RpbWVzX3ZlY3RvcicsICdjc3JfdG9fZGVuc2VfbWF0cml4JyxcbiAgICAnY3VtdWxhdGl2ZV9zdW0nLCAnZGV0ZXJtaW5hbnQnLCAnZGlhZ19tYXRyaXgnLCAnZGlhZ19wb3N0X211bHRpcGx5JyxcbiAgICAnZGlhZ19wcmVfbXVsdGlwbHknLCAnZGlhZ29uYWwnLCAnZGlnYW1tYScsICdkaW1zJywgJ2RpcmljaGxldF9scGRmJyxcbiAgICAnZGlyaWNobGV0X3JuZycsICdkaXN0YW5jZScsICdkb3RfcHJvZHVjdCcsICdkb3Rfc2VsZicsXG4gICAgJ2RvdWJsZV9leHBvbmVudGlhbF9jZGYnLCAnZG91YmxlX2V4cG9uZW50aWFsX2xjY2RmJywgJ2RvdWJsZV9leHBvbmVudGlhbF9sY2RmJyxcbiAgICAnZG91YmxlX2V4cG9uZW50aWFsX2xwZGYnLCAnZG91YmxlX2V4cG9uZW50aWFsX3JuZycsICdlJywgJ2VpZ2VudmFsdWVzX3N5bScsXG4gICAgJ2VpZ2VudmVjdG9yc19zeW0nLCAnZXJmJywgJ2VyZmMnLCAnZXhwJywgJ2V4cDInLCAnZXhwX21vZF9ub3JtYWxfY2RmJyxcbiAgICAnZXhwX21vZF9ub3JtYWxfbGNjZGYnLCAnZXhwX21vZF9ub3JtYWxfbGNkZicsICdleHBfbW9kX25vcm1hbF9scGRmJyxcbiAgICAnZXhwX21vZF9ub3JtYWxfcm5nJywgJ2V4cG0xJywgJ2V4cG9uZW50aWFsX2NkZicsICdleHBvbmVudGlhbF9sY2NkZicsXG4gICAgJ2V4cG9uZW50aWFsX2xjZGYnLCAnZXhwb25lbnRpYWxfbHBkZicsICdleHBvbmVudGlhbF9ybmcnLCAnZmFicycsXG4gICAgJ2ZhbGxpbmdfZmFjdG9yaWFsJywgJ2ZkaW0nLCAnZmxvb3InLCAnZm1hJywgJ2ZtYXgnLCAnZm1pbicsICdmbW9kJyxcbiAgICAnZnJlY2hldF9jZGYnLCAnZnJlY2hldF9sY2NkZicsICdmcmVjaGV0X2xjZGYnLCAnZnJlY2hldF9scGRmJywgJ2ZyZWNoZXRfcm5nJyxcbiAgICAnZ2FtbWFfY2RmJywgJ2dhbW1hX2xjY2RmJywgJ2dhbW1hX2xjZGYnLCAnZ2FtbWFfbHBkZicsICdnYW1tYV9wJywgJ2dhbW1hX3EnLFxuICAgICdnYW1tYV9ybmcnLCAnZ2F1c3NpYW5fZGxtX29ic19scGRmJywgJ2dldF9scCcsICdndW1iZWxfY2RmJywgJ2d1bWJlbF9sY2NkZicsXG4gICAgJ2d1bWJlbF9sY2RmJywgJ2d1bWJlbF9scGRmJywgJ2d1bWJlbF9ybmcnLCAnaGVhZCcsICdoeXBlcmdlb21ldHJpY19scG1mJyxcbiAgICAnaHlwZXJnZW9tZXRyaWNfcm5nJywgJ2h5cG90JywgJ2luY19iZXRhJywgJ2ludF9zdGVwJywgJ2ludGVncmF0ZV9vZGUnLFxuICAgICdpbnRlZ3JhdGVfb2RlX2JkZicsICdpbnRlZ3JhdGVfb2RlX3JrNDUnLCAnaW52JywgJ2ludl9QaGknLFxuICAgICdpbnZfY2hpX3NxdWFyZV9jZGYnLCAnaW52X2NoaV9zcXVhcmVfbGNjZGYnLCAnaW52X2NoaV9zcXVhcmVfbGNkZicsXG4gICAgJ2ludl9jaGlfc3F1YXJlX2xwZGYnLCAnaW52X2NoaV9zcXVhcmVfcm5nJywgJ2ludl9jbG9nbG9nJywgJ2ludl9nYW1tYV9jZGYnLFxuICAgICdpbnZfZ2FtbWFfbGNjZGYnLCAnaW52X2dhbW1hX2xjZGYnLCAnaW52X2dhbW1hX2xwZGYnLCAnaW52X2dhbW1hX3JuZycsXG4gICAgJ2ludl9sb2dpdCcsICdpbnZfc3FydCcsICdpbnZfc3F1YXJlJywgJ2ludl93aXNoYXJ0X2xwZGYnLCAnaW52X3dpc2hhcnRfcm5nJyxcbiAgICAnaW52ZXJzZScsICdpbnZlcnNlX3NwZCcsICdpc19pbmYnLCAnaXNfbmFuJywgJ2xiZXRhJywgJ2xjaG9vc2UnLCAnbGdhbW1hJyxcbiAgICAnbGtqX2NvcnJfY2hvbGVza3lfbHBkZicsICdsa2pfY29ycl9jaG9sZXNreV9ybmcnLCAnbGtqX2NvcnJfbHBkZicsXG4gICAgJ2xral9jb3JyX3JuZycsICdsbWdhbW1hJywgJ2xtdWx0aXBseScsICdsb2cnLCAnbG9nMTAnLCAnbG9nMW0nLCAnbG9nMW1fZXhwJyxcbiAgICAnbG9nMW1faW52X2xvZ2l0JywgJ2xvZzFwJywgJ2xvZzFwX2V4cCcsICdsb2cyJywgJ2xvZ19kZXRlcm1pbmFudCcsXG4gICAgJ2xvZ19kaWZmX2V4cCcsICdsb2dfZmFsbGluZ19mYWN0b3JpYWwnLCAnbG9nX2ludl9sb2dpdCcsICdsb2dfbWl4JyxcbiAgICAnbG9nX3Jpc2luZ19mYWN0b3JpYWwnLCAnbG9nX3NvZnRtYXgnLCAnbG9nX3N1bV9leHAnLCAnbG9naXN0aWNfY2RmJyxcbiAgICAnbG9naXN0aWNfbGNjZGYnLCAnbG9naXN0aWNfbGNkZicsICdsb2dpc3RpY19scGRmJywgJ2xvZ2lzdGljX3JuZycsICdsb2dpdCcsXG4gICAgJ2xvZ25vcm1hbF9jZGYnLCAnbG9nbm9ybWFsX2xjY2RmJywgJ2xvZ25vcm1hbF9sY2RmJywgJ2xvZ25vcm1hbF9scGRmJyxcbiAgICAnbG9nbm9ybWFsX3JuZycsICdtYWNoaW5lX3ByZWNpc2lvbicsICdtYXRyaXhfZXhwJywgJ21heCcsICdtZGl2aWRlX2xlZnRfc3BkJyxcbiAgICAnbWRpdmlkZV9sZWZ0X3RyaV9sb3cnLCAnbWRpdmlkZV9yaWdodF9zcGQnLCAnbWRpdmlkZV9yaWdodF90cmlfbG93JywgJ21lYW4nLFxuICAgICdtaW4nLCAnbW9kaWZpZWRfYmVzc2VsX2ZpcnN0X2tpbmQnLCAnbW9kaWZpZWRfYmVzc2VsX3NlY29uZF9raW5kJyxcbiAgICAnbXVsdGlfZ3BfY2hvbGVza3lfbHBkZicsICdtdWx0aV9ncF9scGRmJywgJ211bHRpX25vcm1hbF9jaG9sZXNreV9scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX2Nob2xlc2t5X3JuZycsICdtdWx0aV9ub3JtYWxfbHBkZicsICdtdWx0aV9ub3JtYWxfcHJlY19scGRmJyxcbiAgICAnbXVsdGlfbm9ybWFsX3JuZycsICdtdWx0aV9zdHVkZW50X3RfbHBkZicsICdtdWx0aV9zdHVkZW50X3Rfcm5nJyxcbiAgICAnbXVsdGlub21pYWxfbHBtZicsICdtdWx0aW5vbWlhbF9ybmcnLCAnbXVsdGlwbHlfbG9nJyxcbiAgICAnbXVsdGlwbHlfbG93ZXJfdHJpX3NlbGZfdHJhbnNwb3NlJywgJ25lZ19iaW5vbWlhbF8yX2NkZicsXG4gICAgJ25lZ19iaW5vbWlhbF8yX2xjY2RmJywgJ25lZ19iaW5vbWlhbF8yX2xjZGYnLCAnbmVnX2Jpbm9taWFsXzJfbG9nX2xwbWYnLFxuICAgICduZWdfYmlub21pYWxfMl9sb2dfcm5nJywgJ25lZ19iaW5vbWlhbF8yX2xwbWYnLCAnbmVnX2Jpbm9taWFsXzJfcm5nJyxcbiAgICAnbmVnX2Jpbm9taWFsX2NkZicsICduZWdfYmlub21pYWxfbGNjZGYnLCAnbmVnX2Jpbm9taWFsX2xjZGYnLFxuICAgICduZWdfYmlub21pYWxfbHBtZicsICduZWdfYmlub21pYWxfcm5nJywgJ25lZ2F0aXZlX2luZmluaXR5JywgJ25vcm1hbF9jZGYnLFxuICAgICdub3JtYWxfbGNjZGYnLCAnbm9ybWFsX2xjZGYnLCAnbm9ybWFsX2xwZGYnLCAnbm9ybWFsX3JuZycsICdub3RfYV9udW1iZXInLFxuICAgICdudW1fZWxlbWVudHMnLCAnb3JkZXJlZF9sb2dpc3RpY19scG1mJywgJ29yZGVyZWRfbG9naXN0aWNfcm5nJywgJ293ZW5zX3QnLFxuICAgICdwYXJldG9fY2RmJywgJ3BhcmV0b19sY2NkZicsICdwYXJldG9fbGNkZicsICdwYXJldG9fbHBkZicsICdwYXJldG9fcm5nJyxcbiAgICAncGFyZXRvX3R5cGVfMl9jZGYnLCAncGFyZXRvX3R5cGVfMl9sY2NkZicsICdwYXJldG9fdHlwZV8yX2xjZGYnLFxuICAgICdwYXJldG9fdHlwZV8yX2xwZGYnLCAncGFyZXRvX3R5cGVfMl9ybmcnLCAncGknLCAncG9pc3Nvbl9jZGYnLCAncG9pc3Nvbl9sY2NkZicsXG4gICAgJ3BvaXNzb25fbGNkZicsICdwb2lzc29uX2xvZ19scG1mJywgJ3BvaXNzb25fbG9nX3JuZycsICdwb2lzc29uX2xwbWYnLFxuICAgICdwb2lzc29uX3JuZycsICdwb3NpdGl2ZV9pbmZpbml0eScsICdwb3cnLCAncHJpbnQnLCAncHJvZCcsICdxcl9RJywgJ3FyX1InLFxuICAgICdxdWFkX2Zvcm0nLCAncXVhZF9mb3JtX2RpYWcnLCAncXVhZF9mb3JtX3N5bScsICdyYW5rJywgJ3JheWxlaWdoX2NkZicsXG4gICAgJ3JheWxlaWdoX2xjY2RmJywgJ3JheWxlaWdoX2xjZGYnLCAncmF5bGVpZ2hfbHBkZicsICdyYXlsZWlnaF9ybmcnLCAncmVqZWN0JyxcbiAgICAncmVwX2FycmF5JywgJ3JlcF9tYXRyaXgnLCAncmVwX3Jvd192ZWN0b3InLCAncmVwX3ZlY3RvcicsICdyaXNpbmdfZmFjdG9yaWFsJyxcbiAgICAncm91bmQnLCAncm93JywgJ3Jvd3MnLCAncm93c19kb3RfcHJvZHVjdCcsICdyb3dzX2RvdF9zZWxmJyxcbiAgICAnc2NhbGVkX2ludl9jaGlfc3F1YXJlX2NkZicsICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNjZGYnLFxuICAgICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbGNkZicsICdzY2FsZWRfaW52X2NoaV9zcXVhcmVfbHBkZicsXG4gICAgJ3NjYWxlZF9pbnZfY2hpX3NxdWFyZV9ybmcnLCAnc2QnLCAnc2VnbWVudCcsICdzaW4nLCAnc2luZ3VsYXJfdmFsdWVzJywgJ3NpbmgnLFxuICAgICdzaXplJywgJ3NrZXdfbm9ybWFsX2NkZicsICdza2V3X25vcm1hbF9sY2NkZicsICdza2V3X25vcm1hbF9sY2RmJyxcbiAgICAnc2tld19ub3JtYWxfbHBkZicsICdza2V3X25vcm1hbF9ybmcnLCAnc29mdG1heCcsICdzb3J0X2FzYycsICdzb3J0X2Rlc2MnLFxuICAgICdzb3J0X2luZGljZXNfYXNjJywgJ3NvcnRfaW5kaWNlc19kZXNjJywgJ3NxcnQnLCAnc3FydDInLCAnc3F1YXJlJyxcbiAgICAnc3F1YXJlZF9kaXN0YW5jZScsICdzdGVwJywgJ3N0dWRlbnRfdF9jZGYnLCAnc3R1ZGVudF90X2xjY2RmJyxcbiAgICAnc3R1ZGVudF90X2xjZGYnLCAnc3R1ZGVudF90X2xwZGYnLCAnc3R1ZGVudF90X3JuZycsICdzdWJfY29sJywgJ3N1Yl9yb3cnLFxuICAgICdzdW0nLCAndGFpbCcsICd0YW4nLCAndGFuaCcsICd0YXJnZXQnLCAndGNyb3NzcHJvZCcsICd0Z2FtbWEnLCAndG9fYXJyYXlfMWQnLFxuICAgICd0b19hcnJheV8yZCcsICd0b19tYXRyaXgnLCAndG9fcm93X3ZlY3RvcicsICd0b192ZWN0b3InLCAndHJhY2UnLFxuICAgICd0cmFjZV9nZW5fcXVhZF9mb3JtJywgJ3RyYWNlX3F1YWRfZm9ybScsICd0cmlnYW1tYScsICd0cnVuYycsICd1bmlmb3JtX2NkZicsXG4gICAgJ3VuaWZvcm1fbGNjZGYnLCAndW5pZm9ybV9sY2RmJywgJ3VuaWZvcm1fbHBkZicsICd1bmlmb3JtX3JuZycsICd2YXJpYW5jZScsXG4gICAgJ3Zvbl9taXNlc19scGRmJywgJ3Zvbl9taXNlc19ybmcnLCAnd2VpYnVsbF9jZGYnLCAnd2VpYnVsbF9sY2NkZicsXG4gICAgJ3dlaWJ1bGxfbGNkZicsICd3ZWlidWxsX2xwZGYnLCAnd2VpYnVsbF9ybmcnLCAnd2llbmVyX2xwZGYnLCAnd2lzaGFydF9scGRmJyxcbiAgICAnd2lzaGFydF9ybmcnXG4gIF07XG4gIHZhciBESVNUUklCVVRJT05TID0gW1xuICAgICdiZXJub3VsbGknLCAnYmVybm91bGxpX2xvZ2l0JywgJ2JldGEnLCAnYmV0YV9iaW5vbWlhbCcsICdiaW5vbWlhbCcsXG4gICAgJ2Jpbm9taWFsX2xvZ2l0JywgJ2NhdGVnb3JpY2FsJywgJ2NhdGVnb3JpY2FsX2xvZ2l0JywgJ2NhdWNoeScsICdjaGlfc3F1YXJlJyxcbiAgICAnZGlyaWNobGV0JywgJ2RvdWJsZV9leHBvbmVudGlhbCcsICdleHBfbW9kX25vcm1hbCcsICdleHBvbmVudGlhbCcsICdmcmVjaGV0JyxcbiAgICAnZ2FtbWEnLCAnZ2F1c3NpYW5fZGxtX29icycsICdndW1iZWwnLCAnaHlwZXJnZW9tZXRyaWMnLCAnaW52X2NoaV9zcXVhcmUnLFxuICAgICdpbnZfZ2FtbWEnLCAnaW52X3dpc2hhcnQnLCAnbGtqX2NvcnInLCAnbGtqX2NvcnJfY2hvbGVza3knLCAnbG9naXN0aWMnLFxuICAgICdsb2dub3JtYWwnLCAnbXVsdGlfZ3AnLCAnbXVsdGlfZ3BfY2hvbGVza3knLCAnbXVsdGlfbm9ybWFsJyxcbiAgICAnbXVsdGlfbm9ybWFsX2Nob2xlc2t5JywgJ211bHRpX25vcm1hbF9wcmVjJywgJ211bHRpX3N0dWRlbnRfdCcsICdtdWx0aW5vbWlhbCcsXG4gICAgJ25lZ19iaW5vbWlhbCcsICduZWdfYmlub21pYWxfMicsICduZWdfYmlub21pYWxfMl9sb2cnLCAnbm9ybWFsJyxcbiAgICAnb3JkZXJlZF9sb2dpc3RpYycsICdwYXJldG8nLCAncGFyZXRvX3R5cGVfMicsICdwb2lzc29uJywgJ3BvaXNzb25fbG9nJyxcbiAgICAncmF5bGVpZ2gnLCAnc2NhbGVkX2ludl9jaGlfc3F1YXJlJywgJ3NrZXdfbm9ybWFsJywgJ3N0dWRlbnRfdCcsICd1bmlmb3JtJyxcbiAgICAndm9uX21pc2VzJywgJ3dlaWJ1bGwnLCAnd2llbmVyJywgJ3dpc2hhcnQnXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3N0YW5mdW5jcyddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAndGl0bGUnOiBCTE9DS1Muam9pbignICcpLFxuICAgICAgJ2tleXdvcmQnOiBTVEFURU1FTlRTLmNvbmNhdChWQVJfVFlQRVMpLmNvbmNhdChTUEVDSUFMX0ZVTkNUSU9OUykuam9pbignICcpLFxuICAgICAgJ2J1aWx0X2luJzogRlVOQ1RJT05TLmpvaW4oJyAnKVxuICAgIH0sXG4gICAgbGV4ZW1lczogaGxqcy5JREVOVF9SRSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvIy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgJ21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgL1xcL1xcKi8sXG4gICAgICAgIC9cXCpcXC8vLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIC8vIGhpZ2hsaWdodCBkb2Mgc3RyaW5ncyBtZW50aW9uZWQgaW4gU3RhbiByZWZlcmVuY2VcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICBiZWdpbjogL0AocmV0dXJufHBhcmFtKS9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIC8vIGhhY2s6IGluIHJhbmdlIGNvbnN0cmFpbnRzLCBsb3dlciBtdXN0IGZvbGxvdyBcIjxcIlxuICAgICAgICBiZWdpbjogLzxcXHMqbG93ZXJcXHMqPS8sXG4gICAgICAgIGtleXdvcmRzOiAnbG93ZXInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBoYWNrOiBpbiByYW5nZSBjb25zdHJhaW50cywgdXBwZXIgbXVzdCBmb2xsb3cgZWl0aGVyICwgb3IgPFxuICAgICAgICAvLyA8bG93ZXIgPSAuLi4sIHVwcGVyID0gLi4uPiBvciA8dXBwZXIgPSAuLi4+XG4gICAgICAgIGJlZ2luOiAvWzwsXSp1cHBlclxccyo9LyxcbiAgICAgICAga2V5d29yZHM6ICd1cHBlcidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogL1xcYnRhcmdldFxccypcXCs9LyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICd+XFxcXHMqKCcgKyBobGpzLklERU5UX1JFICsgJylcXFxccypcXFxcKCcsXG4gICAgICAgIGtleXdvcmRzOiBESVNUUklCVVRJT05TLmpvaW4oJyAnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcYlxcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8vXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcLlxcZCsoPzpbZUVdWystXT9cXGQrKT9cXGIvXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IC8qXG4gIFRoaXMgaXMgYSBmb3JrIGFuZCBtb2RpZmljYXRpb24gb2YgRHJldyBNY0RvbmFsZCdzIGZpbGUgKGh0dHBzOi8vZ2l0aHViLmNvbS9kcmV3bWNkb25hbGQvc3RhdGEtaGlnaGxpZ2h0aW5nKS4gSSBoYXZlIGFsc28gaW5jbHVkZWQgYSBsaXN0IG9mIGJ1aWx0aW4gY29tbWFuZHMgZnJvbSBodHRwczovL2J1Z3Mua2RlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjQ2LlxuKi9cblxuZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZG8nLCAnYWRvJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2lmIGVsc2UgaW4gZm9yZWFjaCBmb3IgZm9ydiBmb3J2YSBmb3J2YWwgZm9ydmFsdSBmb3J2YWx1ZSBmb3J2YWx1ZXMgYnkgYnlzIGJ5c29ydCB4aSBxdWlldGx5IHF1aSBjYXB0dXJlIGFib3V0IGFjIGFjXzcgYWNwcnBsb3QgYWNwcnBsb3RfNyBhZGp1c3QgYWRvIGFkb3BhdGggYWRvdXBkYXRlIGFscGhhIGFtZWFucyBhbiBhbm8gYW5vdiBhbm92YSBhbm92YV9lc3RhdCBhbm92YV90ZXJtcyBhbm92YWRlZiBhb3JkZXIgYXAgYXBwIGFwcGUgYXBwZW4gYXBwZW5kIGFyY2ggYXJjaF9kciBhcmNoX2VzdGF0IGFyY2hfcCBhcmNobG0gYXJlZyBhcmVnX3AgYXJncyBhcmltYSBhcmltYV9kciBhcmltYV9lc3RhdCBhcmltYV9wIGFzIGFzbXByb2JpdCBhc21wcm9iaXRfZXN0YXQgYXNtcHJvYml0X2xmIGFzbXByb2JpdF9tZnhfX2RsZyBhc21wcm9iaXRfcCBhc3MgYXNzZSBhc3NlciBhc3NlcnQgYXZwbG90IGF2cGxvdF83IGF2cGxvdHMgYXZwbG90c183IGJjc2tldzAgYmdvZGZyZXkgYmlhcyBiaW5yZWcgYmlwMF9sZiBiaXBsb3QgYmlwcF9sZiBiaXByX2xmIGJpcHJfcCBiaXByb2JpdCBiaXRlc3QgYml0ZXN0aSBiaXRvd3QgYmxvZ2l0IGJtZW1zaXplIGJvb3QgYm9vdHNhbXAgYm9vdHN0cmFwIGJvb3RzdHJhcF84IGJveGNvX2wgYm94Y29fcCBib3hjb3ggYm94Y294XzYgYm94Y294X3AgYnByb2JpdCBiciBicmVhayBicmllciBicm8gYnJvdyBicm93cyBicm93c2UgYnJyIGJycnN0YXQgYnMgYnNfNyBic2FtcGxfdyBic2FtcGxlIGJzYW1wbGVfNyBic3FyZWcgYnN0YXQgYnN0YXRfNyBic3RhdF84IGJzdHJhcCBic3RyYXBfNyBidWJibGUgYnViYmxlcGxvdCBjYSBjYV9lc3RhdCBjYV9wIGNhYmlwbG90IGNhbWF0IGNhbm9uIGNhbm9uXzggY2Fub25fOF9wIGNhbm9uX2VzdGF0IGNhbm9uX3AgY2FwIGNhcHJvamVjdGlvbiBjYXB0IGNhcHR1IGNhcHR1ciBjYXB0dXJlIGNhdCBjYyBjY2hhcnQgY2NoYXJ0XzcgY2NpIGNkIGNlbnNvYnNfdGFibGUgY2VudGlsZSBjZiBjaGFyIGNoZGlyIGNoZWNrZGxnZmlsZXMgY2hlY2tlc3RpbWF0aW9uc2FtcGxlIGNoZWNraGxwZmlsZXMgY2hlY2tzdW0gY2hlbHAgY2kgY2lpIGNsIGNsYXNzIGNsYXNzdXRpbCBjbGVhciBjbGkgY2xpcyBjbGlzdCBjbG8gY2xvZyBjbG9nX2xmIGNsb2dfcCBjbG9naSBjbG9naV9zdyBjbG9naXQgY2xvZ2l0X2xmIGNsb2dpdF9wIGNsb2dpdHAgY2xvZ2xfc3cgY2xvZ2xvZyBjbG9uZXZhciBjbHNsaXN0YXJyYXkgY2x1c3RlciBjbHVzdGVyX21lYXN1cmVzIGNsdXN0ZXJfc3RvcCBjbHVzdGVyX3RyZWUgY2x1c3Rlcl90cmVlXzggY2x1c3Rlcm1hdCBjbWRsb2cgY25yIGNucmUgY25yZWcgY25yZWdfcCBjbnJlZ19zdyBjbnNyZWcgY29kZWJvb2sgY29sbGFwczQgY29sbGFwc2UgY29sb3JtdWx0X25iIGNvbG9ybXVsdF9udyBjb21wYXJlIGNvbXByZXNzIGNvbmYgY29uZmkgY29uZmlyIGNvbmZpcm0gY29ucmVuIGNvbnMgY29uc3QgY29uc3RyIGNvbnN0cmEgY29uc3RyYWkgY29uc3RyYWluIGNvbnN0cmFpbnQgY29udGludWUgY29udHJhY3QgY29weSBjb3B5cmlnaHQgY29weXNvdXJjZSBjb3IgY29yYyBjb3JyIGNvcnIyZGF0YSBjb3JyX2FudGkgY29ycl9rbW8gY29ycl9zbWMgY29ycmUgY29ycmVsIGNvcnJlbGEgY29ycmVsYXQgY29ycmVsYXRlIGNvcnJncmFtIGNvdSBjb3VuIGNvdW50IGNveCBjb3hfcCBjb3hfc3cgY294YmFzZSBjb3hoYXogY294dmFyIGNwcnBsb3QgY3BycGxvdF83IGNyYyBjcmV0IGNyZXR1IGNyZXR1ciBjcmV0dXJuIGNyb3NzIGNzIGNzY3JpcHQgY3NjcmlwdF9sb2cgY3NpIGN0IGN0X2lzIGN0c2V0IGN0c3RfNSBjdHN0X3N0IGN0dG9zdCBjdW1zcCBjdW1zcF83IGN1bXVsIGN1c3VtIGN1c3VtXzcgY3V0aWwgZHwwIGRhdGFzaWcgZGF0YXNpZ24gZGF0YXNpZ25hIGRhdGFzaWduYXQgZGF0YXNpZ25hdHUgZGF0YXNpZ25hdHVyIGRhdGFzaWduYXR1cmUgZGF0ZXRvZiBkYiBkYmV0YSBkZSBkZWMgZGVjbyBkZWNvZCBkZWNvZGUgZGVmZiBkZXMgZGVzYyBkZXNjciBkZXNjcmkgZGVzY3JpYiBkZXNjcmliZSBkZXN0cmluZyBkZmJldGEgZGZnbHMgZGZ1bGxlciBkaSBkaV9nIGRpciBkaXJzdGF0cyBkaXMgZGlzY2FyZCBkaXNwIGRpc3BfcmVzIGRpc3BfcyBkaXNwbCBkaXNwbGEgZGlzcGxheSBkaXN0aW5jdCBkbyBkb2UgZG9lZCBkb2VkaSBkb2VkaXQgZG90cGxvdCBkb3RwbG90XzcgZHByb2JpdCBkcmF3bm9ybSBkcm9wIGRzIGRzX3V0aWwgZHN0ZGl6ZSBkdXBsaWNhdGVzIGR1cmJpbmEgZHdzdGF0IGR5ZHggZXwwIGVkIGVkaSBlZGl0IGVnZW4gZWl2cmVnIGVtZGVmIGVuIGVuYyBlbmNvIGVuY29kIGVuY29kZSBlcSBlcmFzZSBlcmVnIGVyZWdfbGYgZXJlZ19wIGVyZWdfc3cgZXJlZ2hldCBlcmVnaGV0X2dsZiBlcmVnaGV0X2dsZl9zaCBlcmVnaGV0X2dwIGVyZWdoZXRfaWxmIGVyZWdoZXRfaWxmX3NoIGVyZWdoZXRfaXAgZXJldCBlcmV0dSBlcmV0dXIgZXJldHVybiBlcnIgZXJybyBlcnJvciBlc2l6ZSBlc3QgZXN0X2NmZXhpc3QgZXN0X2NmbmFtZSBlc3RfY2xpY2thYmxlIGVzdF9leHBhbmQgZXN0X2hvbGQgZXN0X3RhYmxlIGVzdF91bmhvbGQgZXN0X3VuaG9sZG9rIGVzdGF0IGVzdGF0X2RlZmF1bHQgZXN0YXRfc3VtbSBlc3RhdF92Y2Vfb25seSBlc3RpIGVzdGltYXRlcyBldG9kb3cgZXRvZiBldG9tZHkgZXggZXhpIGV4aXQgZXhwYW5kIGV4cGFuZGNsIGZhYyBmYWN0IGZhY3RvIGZhY3RvciBmYWN0b3JfZXN0YXQgZmFjdG9yX3AgZmFjdG9yX3BjYV9yb3RhdGVkIGZhY3Rvcl9yb3RhdGUgZmFjdG9ybWF0IGZjYXN0IGZjYXN0X2NvbXB1dGUgZmNhc3RfZ3JhcGggZmRhZGVzIGZkYWRlc2MgZmRhZGVzY3IgZmRhZGVzY3JpIGZkYWRlc2NyaWIgZmRhZGVzY3JpYmUgZmRhc2F2IGZkYXNhdmUgZmRhdXNlIGZoX3N0IGZpbGUgb3BlbiBmaWxlIHJlYWQgZmlsZSBjbG9zZSBmaWxlIGZpbGVmaWx0ZXIgZmlsbGluIGZpbmRfaGxwX2ZpbGUgZmluZGZpbGUgZmluZGl0IGZpbmRpdF83IGZpdCBmbCBmbGkgZmxpcyBmbGlzdCBmb3I1XzAgZm9yZXN0IGZvcmVzdHBsb3QgZm9ybSBmb3JtYSBmb3JtYXQgZnByZWRpY3QgZnJhY18xNTQgZnJhY19hZGogZnJhY19jaGsgZnJhY19jb3ggZnJhY19kZHAgZnJhY19kaXMgZnJhY19kdiBmcmFjX2luIGZyYWNfbXVuIGZyYWNfcHAgZnJhY19wcSBmcmFjX3B2IGZyYWNfd2d0IGZyYWNfeG8gZnJhY2dlbiBmcmFjcGxvdCBmcmFjcGxvdF83IGZyYWNwb2x5IGZyYWNwcmVkIGZyb25fZXggZnJvbl9obiBmcm9uX3AgZnJvbl90biBmcm9uX3RuMiBmcm9udGllciBmdG9kYXRlIGZ0b2UgZnRvbWR5IGZ0b3dkYXRlIGZ1bm5lbCBmdW5uZWxwbG90IGd8MCBnYW1oZXRfZ2xmIGdhbWhldF9ncCBnYW1oZXRfaWxmIGdhbWhldF9pcCBnYW1tYSBnYW1tYV9kMiBnYW1tYV9wIGdhbW1hX3N3IGdhbW1haGV0IGdkaV9oZXhhZ29uIGdkaV9zcG9rZXMgZ2UgZ2VuIGdlbmUgZ2VuZXIgZ2VuZXJhIGdlbmVyYXQgZ2VuZXJhdGUgZ2VucmFuayBnZW5zdGQgZ2Vudm1lYW4gZ2V0dG9rZW4gZ2wgZ2xhZGRlciBnbGFkZGVyXzcgZ2xpbV9sMDEgZ2xpbV9sMDIgZ2xpbV9sMDMgZ2xpbV9sMDQgZ2xpbV9sMDUgZ2xpbV9sMDYgZ2xpbV9sMDcgZ2xpbV9sMDggZ2xpbV9sMDkgZ2xpbV9sMTAgZ2xpbV9sMTEgZ2xpbV9sMTIgZ2xpbV9sZiBnbGltX211IGdsaW1fbncxIGdsaW1fbncyIGdsaW1fbnczIGdsaW1fcCBnbGltX3YxIGdsaW1fdjIgZ2xpbV92MyBnbGltX3Y0IGdsaW1fdjUgZ2xpbV92NiBnbGltX3Y3IGdsbSBnbG1fNiBnbG1fcCBnbG1fc3cgZ2xtcHJlZCBnbG8gZ2xvYiBnbG9iYSBnbG9iYWwgZ2xvZ2l0IGdsb2dpdF84IGdsb2dpdF9wIGdtZWFucyBnbmJyZV9sZiBnbmJyZWcgZ25icmVnXzUgZ25icmVnX3AgZ29tcF9sZiBnb21wZV9zdyBnb21wZXJfcCBnb21wZXJ0eiBnb21wZXJ0emhldCBnb21waGV0X2dsZiBnb21waGV0X2dsZl9zaCBnb21waGV0X2dwIGdvbXBoZXRfaWxmIGdvbXBoZXRfaWxmX3NoIGdvbXBoZXRfaXAgZ3BoZG90IGdwaHBlbiBncGhwcmludCBncHJlZnMgZ3Byb2JpX3AgZ3Byb2JpdCBncHJvYml0XzggZ3IgZ3I3IGdyX2NvcHkgZ3JfY3VycmVudCBncl9kYiBncl9kZXNjcmliZSBncl9kaXIgZ3JfZHJhdyBncl9kcmF3X3JlcGxheSBncl9kcm9wIGdyX2VkaXQgZ3JfZWRpdHZpZXdvcHRzIGdyX2V4YW1wbGUgZ3JfZXhhbXBsZTIgZ3JfZXhwb3J0IGdyX3ByaW50IGdyX3FzY2hlbWUgZ3JfcXVlcnkgZ3JfcmVhZCBncl9yZW5hbWUgZ3JfcmVwbGF5IGdyX3NhdmUgZ3Jfc2V0IGdyX3NldHNjaGVtZSBncl90YWJsZSBncl91bmRvIGdyX3VzZSBncmFwaCBncmFwaDcgZ3JlYmFyIGdyZWlnZW4gZ3JlaWdlbl83IGdyZWlnZW5fOCBncm1lYW5ieSBncm1lYW5ieV83IGdzX2ZpbGVpbmZvIGdzX2ZpbGV0eXBlIGdzX2dyYXBoaW5mbyBnc19zdGF0IGdzb3J0IGd3b29kIGh8MCBoYWRpbXZvIGhhcmVnIGhhdXNtYW4gaGF2ZXIgaGUgaGVja19kMiBoZWNrbWFfcCBoZWNrbWFuIGhlY2twX2xmIGhlY2twcl9wIGhlY2twcm9iIGhlbCBoZWxwIGhlcmVnIGhldHByX2xmIGhldHByX3AgaGV0cHJvYiBoZXR0ZXN0IGhleGR1bXAgaGlsaXRlIGhpc3QgaGlzdF83IGhpc3RvZ3JhbSBobG9naXQgaGx1IGhtZWFucyBob3RlbCBob3RlbGxpbmcgaHByb2JpdCBocmVnIGhzZWFyY2ggaWNkOSBpY2Q5X2ZmIGljZDlwIGlpcyBpbXB1dGUgaW10ZXN0IGluYmFzZSBpbmNsdWRlIGluZiBpbmZpIGluZmlsIGluZmlsZSBpbmZpeCBpbnAgaW5wdSBpbnB1dCBpbnMgaW5zaGVldCBpbnNwIGluc3BlIGluc3BlYyBpbnNwZWN0IGludGVnIGludGVuIGludHJlZyBpbnRyZWdfNyBpbnRyZWdfcCBpbnRyZzJfbGwgaW50cmdfbGwgaW50cmdfbGwyIGlwb2xhdGUgaXFyZWcgaXIgaXJmIGlyZl9jcmVhdGUgaXJmbSBpcmkgaXNfc3Z5IGlzX3N2eXN1bSBpc2lkIGlzdGRpemUgaXZwcm9iXzFfbGYgaXZwcm9iX2xmIGl2cHJvYml0IGl2cHJvYml0X3AgaXZyZWcgaXZyZWdfZm9vdG5vdGUgaXZ0b2JfMV9sZiBpdnRvYl9sZiBpdnRvYml0IGl2dG9iaXRfcCBqYWNra25pZmUgamFja25pZmUgamtuaWZlIGprbmlmZV82IGprbmlmZV84IGprc3RhdCBqb2luYnkga2FsYXJtYTEga2FwIGthcF8zIGthcG1laWVyIGthcHBhIGthcHdndCBrZGVuc2l0eSBrZGVuc2l0eV83IGtlZXAga3NtIGtzbWlybm92IGt0YXUga3dhbGxpcyBsfDAgbGEgbGFiIGxhYmJlIGxhYmJlcGxvdCBsYWJlIGxhYmVsIGxhYmVsYm9vayBsYWRkZXIgbGV2ZWxzIGxldmVsc29mIGxldmVyYWdlIGxmaXQgbGZpdF9wIGxpIGxpbmNvbSBsaW5lIGxpbmt0ZXN0IGxpcyBsaXN0IGxsb2doZXRfZ2xmIGxsb2doZXRfZ2xmX3NoIGxsb2doZXRfZ3AgbGxvZ2hldF9pbGYgbGxvZ2hldF9pbGZfc2ggbGxvZ2hldF9pcCBsbG9naV9zdyBsbG9naXNfcCBsbG9naXN0IGxsb2dpc3RpYyBsbG9naXN0aWNoZXQgbG5vcm1fbGYgbG5vcm1fc3cgbG5vcm1hX3AgbG5vcm1hbCBsbm9ybWFsaGV0IGxub3JtaGV0X2dsZiBsbm9ybWhldF9nbGZfc2ggbG5vcm1oZXRfZ3AgbG5vcm1oZXRfaWxmIGxub3JtaGV0X2lsZl9zaCBsbm9ybWhldF9pcCBsbnNrZXcwIGxvYWRpbmdwbG90IGxvYyBsb2NhIGxvY2FsIGxvZyBsb2dpIGxvZ2lzX2xmIGxvZ2lzdGljIGxvZ2lzdGljX3AgbG9naXQgbG9naXRfZXN0YXQgbG9naXRfcCBsb2dsb2dzIGxvZ3JhbmsgbG9uZXdheSBsb29rZm9yIGxvb2t1cCBsb3dlc3MgbG93ZXNzXzcgbHByZWRpY3QgbHJlY29tcCBscm9jIGxyb2NfNyBscnRlc3QgbHMgbHNlbnMgbHNlbnNfNyBsc2Vuc194IGxzdGF0IGx0YWJsZSBsdGFibGVfNyBsdHJpYW5nIGx2IGx2cjJwbG90IGx2cjJwbG90XzcgbXwwIG1hIG1hYyBtYWNyIG1hY3JvIG1ha2VjbnMgbWFuIG1hbm92YSBtYW5vdmFfZXN0YXQgbWFub3ZhX3AgbWFub3ZhdGVzdCBtYW50ZWwgbWFyayBtYXJraW4gbWFya291dCBtYXJrc2FtcGxlIG1hdCBtYXRfY2FwcCBtYXRfb3JkZXIgbWF0X3B1dF9yciBtYXRfcmFwcCBtYXRhIG1hdGFfY2xlYXIgbWF0YV9kZXNjcmliZSBtYXRhX2Ryb3AgbWF0YV9tYXRkZXNjcmliZSBtYXRhX21hdHNhdmUgbWF0YV9tYXR1c2UgbWF0YV9tZW1vcnkgbWF0YV9tbGliIG1hdGFfbW9zYXZlIG1hdGFfcmVuYW1lIG1hdGFfd2hpY2ggbWF0YWxhYmVsIG1hdGNwcm9jIG1hdGxpc3QgbWF0bmFtZSBtYXRyIG1hdHJpIG1hdHJpeCBtYXRyaXhfaW5wdXRfX2RsZyBtYXRzdHJpayBtY2MgbWNjaSBtZDBfIG1kMV8gbWQxZGVidWdfIG1kMl8gbWQyZGVidWdfIG1kcyBtZHNfZXN0YXQgbWRzX3AgbWRzY29uZmlnIG1kc2xvbmcgbWRzbWF0IG1kc3NoZXBhcmQgbWR5dG9lIG1keXRvZiBtZV9kZXJkIG1lYW4gbWVhbnMgbWVkaWFuIG1lbW9yeSBtZW1zaXplIG1lbmwgbWVxcGFyc2UgbWVyIG1lcmcgbWVyZ2UgbWV0YSBtZnAgbWZ4IG1oZWxwIG1ob2RkcyBtaW5ib3VuZCBtaXhlZF9sbCBtaXhlZF9sbF9yZXBhcm0gbWthc3NlcnQgbWtkaXIgbWttYXQgbWtzcGxpbmUgbWwgbWxfNSBtbF9hZGpzIG1sX2JoaGhzIG1sX2NfZCBtbF9jaGVjayBtbF9jbGVhciBtbF9jbnQgbWxfZGVidWcgbWxfZGVmZCBtbF9lMCBtbF9lMF9iZmdzIG1sX2UwX2N5Y2xlIG1sX2UwX2RmcCBtbF9lMGkgbWxfZTEgbWxfZTFfYmZncyBtbF9lMV9iaGhoIG1sX2UxX2N5Y2xlIG1sX2UxX2RmcCBtbF9lMiBtbF9lMl9jeWNsZSBtbF9lYmZnMCBtbF9lYmZyMCBtbF9lYmZyMSBtbF9lYmgwcSBtbF9lYmhoMCBtbF9lYmhyMCBtbF9lYnIwaSBtbF9lY3IwaSBtbF9lZGZwMCBtbF9lZGZyMCBtbF9lZGZyMSBtbF9lZHIwaSBtbF9lZHMgbWxfZWVyMGkgbWxfZWdyMGkgbWxfZWxmIG1sX2VsZl9iZmdzIG1sX2VsZl9iaGhoIG1sX2VsZl9jeWNsZSBtbF9lbGZfZGZwIG1sX2VsZmkgbWxfZWxmcyBtbF9lbnIwaSBtbF9lbnJyMCBtbF9lcmR1MCBtbF9lcmR1MF9iZmdzIG1sX2VyZHUwX2JoaGggbWxfZXJkdTBfYmhoaHEgbWxfZXJkdTBfY3ljbGUgbWxfZXJkdTBfZGZwIG1sX2VyZHUwX25yYmZncyBtbF9leGRlIG1sX2Zvb3Rub3RlIG1sX2dlcW5yIG1sX2dyYWQwIG1sX2dyYXBoIG1sX2hiaGhoIG1sX2hkMCBtbF9ob2xkIG1sX2luaXQgbWxfaW52IG1sX2xvZyBtbF9tYXggbWxfbWxvdXQgbWxfbWxvdXRfOCBtbF9tb2RlbCBtbF9uYjAgbWxfb3B0IG1sX3AgbWxfcGxvdCBtbF9xdWVyeSBtbF9yZGdyZCBtbF9yZXBvciBtbF9zX2UgbWxfc2NvcmUgbWxfc2VhcmMgbWxfdGVjaG5pcXVlIG1sX3VuaG9sZCBtbGV2YWwgbWxmXyBtbG1hdGJ5c3VtIG1sbWF0c3VtIG1sb2cgbWxvZ2kgbWxvZ2l0IG1sb2dpdF9mb290bm90ZSBtbG9naXRfcCBtbG9wdHMgbWxzdW0gbWx2ZWNzdW0gbW5sMF8gbW9yIG1vcmUgbW92IG1vdmUgbXByb2JpdCBtcHJvYml0X2xmIG1wcm9iaXRfcCBtcmR1MF8gbXJkdTFfIG12ZGVjb2RlIG12ZW5jb2RlIG12cmVnIG12cmVnX2VzdGF0IG58MCBuYnJlZyBuYnJlZ19hbCBuYnJlZ19sZiBuYnJlZ19wIG5icmVnX3N3IG5lc3RyZWcgbmV0IG5ld2V5IG5ld2V5XzcgbmV3ZXlfcCBuZXdzIG5sIG5sXzcgbmxfOSBubF85X3AgbmxfcCBubF9wXzcgbmxjb20gbmxjb21fcCBubGV4cDIgbmxleHAyXzcgbmxleHAyYSBubGV4cDJhXzcgbmxleHAzIG5sZXhwM183IG5sZ29tMyBubGdvbTNfNyBubGdvbTQgbmxnb200Xzcgbmxpbml0IG5sbG9nMyBubGxvZzNfNyBubGxvZzQgbmxsb2c0XzcgbmxvZ19yZCBubG9naXQgbmxvZ2l0X3AgbmxvZ2l0Z2VuIG5sb2dpdHRyZWUgbmxwcmVkIG5vIG5vYnJlYWsgbm9pIG5vaXMgbm9pc2kgbm9pc2lsIG5vaXNpbHkgbm90ZSBub3RlcyBub3Rlc19kbGcgbnB0cmVuZCBudW1sYWJlbCBudW1saXN0IG9kYmMgb2xkX3ZlciBvbG8gb2xvZyBvbG9naSBvbG9naV9zdyBvbG9naXQgb2xvZ2l0X3Agb2xvZ2l0cCBvbiBvbmUgb25ldyBvbmV3YSBvbmV3YXkgb3BfY29sbm0gb3BfY29tcCBvcF9kaWZmIG9wX2ludiBvcF9zdHIgb3ByIG9wcm8gb3Byb2Igb3Byb2Jfc3cgb3Byb2JpIG9wcm9iaV9wIG9wcm9iaXQgb3Byb2JpdHAgb3B0c19leGNsdXNpdmUgb3JkZXIgb3J0aG9nIG9ydGhwb2x5IG91IG91dCBvdXRmIG91dGZpIG91dGZpbCBvdXRmaWxlIG91dHMgb3V0c2ggb3V0c2hlIG91dHNoZWUgb3V0c2hlZXQgb3Z0ZXN0IHBhYyBwYWNfNyBwYWxldHRlIHBhcnNlIHBhcnNlX2Rpc3NpbSBwYXVzZSBwY2EgcGNhXzggcGNhX2Rpc3BsYXkgcGNhX2VzdGF0IHBjYV9wIHBjYV9yb3RhdGUgcGNhbWF0IHBjaGFydCBwY2hhcnRfNyBwY2hpIHBjaGlfNyBwY29yciBwY3RpbGUgcGVudGl1bSBwZXJncmFtIHBlcmdyYW1fNyBwZXJtdXRlIHBlcm11dGVfOCBwZXJzb25hbCBwZXRvX3N0IHBrY29sbGFwc2UgcGtjcm9zcyBwa2VxdWl2IHBrZXhhbWluZSBwa2V4YW1pbmVfNyBwa3NoYXBlIHBrc3VtbSBwa3N1bW1fNyBwbCBwbG8gcGxvdCBwbHVnaW4gcG5vcm0gcG5vcm1fNyBwb2lzZ29mIHBvaXNzX2xmIHBvaXNzX3N3IHBvaXNzb19wIHBvaXNzb24gcG9pc3Nvbl9lc3RhdCBwb3N0IHBvc3RjbG9zZSBwb3N0ZmlsZSBwb3N0dXRpbCBwcGVycm9uIHByIHByYWlzIHByYWlzX2UgcHJhaXNfZTIgcHJhaXNfcCBwcmVkaWN0IHByZWRpY3RubCBwcmVzZXJ2ZSBwcmludCBwcm8gcHJvYiBwcm9iaSBwcm9iaXQgcHJvYml0X2VzdGF0IHByb2JpdF9wIHByb2NfdGltZSBwcm9jb3ZlcmxheSBwcm9jcnVzdGVzIHByb2NydXN0ZXNfZXN0YXQgcHJvY3J1c3Rlc19wIHByb2ZpbGVyIHByb2cgcHJvZ3IgcHJvZ3JhIHByb2dyYW0gcHJvcCBwcm9wb3J0aW9uIHBydGVzdCBwcnRlc3RpIHB3Y29yciBwd2QgcVxcXFxzIHFieSBxYnlzIHFjaGkgcWNoaV83IHFsYWRkZXIgcWxhZGRlcl83IHFub3JtIHFub3JtXzcgcXFwbG90IHFxcGxvdF83IHFyZWcgcXJlZ19jIHFyZWdfcCBxcmVnX3N3IHF1IHF1YWRjaGsgcXVhbnRpbGUgcXVhbnRpbGVfNyBxdWUgcXVlciBxdWVyeSByYW5nZSByYW5rc3VtIHJhdGlvIHJjaGFydCByY2hhcnRfNyByY29mIHJlY2FzdCByZWNsaW5rIHJlY29kZSByZWcgcmVnMyByZWczX3AgcmVnZHcgcmVnciByZWdyZSByZWdyZV9wMiByZWdyZXMgcmVncmVzX3AgcmVncmVzcyByZWdyZXNzX2VzdGF0IHJlZ3Jpdl9wIHJlbWFwIHJlbiByZW5hIHJlbmFtIHJlbmFtZSByZW5wZml4IHJlcGVhdCByZXBsYWNlIHJlcG9ydCByZXNoYXBlIHJlc3RvcmUgcmV0IHJldHUgcmV0dXIgcmV0dXJuIHJtIHJtZGlyIHJvYnZhciByb2Njb21wIHJvY2NvbXBfNyByb2Njb21wXzggcm9jZl9sZiByb2NmaXQgcm9jZml0Xzggcm9jZ29sZCByb2NwbG90IHJvY3Bsb3RfNyByb2N0YWIgcm9jdGFiXzcgcm9sbGluZyByb2xvZ2l0IHJvbG9naXRfcCByb3Qgcm90YSByb3RhdCByb3RhdGUgcm90YXRlbWF0IHJyZWcgcnJlZ19wIHJ1IHJ1biBydW50ZXN0IHJ2ZnBsb3QgcnZmcGxvdF83IHJ2cHBsb3QgcnZwcGxvdF83IHNhIHNhZmVzdW0gc2FtcGxlIHNhbXBzaSBzYXYgc2F2ZSBzYXZlZHJlc3VsdHMgc2F2ZW9sZCBzYyBzY2Egc2NhbCBzY2FsYSBzY2FsYXIgc2NhdHRlciBzY21fbWluZSBzY28gc2NvYl9sZiBzY29iX3Agc2NvYmlfc3cgc2NvYml0IHNjb3Igc2NvcmUgc2NvcmVwbG90IHNjb3JlcGxvdF9oZWxwIHNjcmVlIHNjcmVlcGxvdCBzY3JlZXBsb3RfaGVscCBzZHRlc3Qgc2R0ZXN0aSBzZSBzZWFyY2ggc2VwYXJhdGUgc2VwZXJhdGUgc2VycmJhciBzZXJyYmFyXzcgc2Vyc2V0IHNldCBzZXRfZGVmYXVsdHMgc2ZyYW5jaWEgc2ggc2hlIHNoZWwgc2hlbGwgc2hld2hhcnQgc2hld2hhcnRfNyBzaWduZXN0aW1hdGlvbnNhbXBsZSBzaWducmFuayBzaWdudGVzdCBzaW11bCBzaW11bF83IHNpbXVsYXRlIHNpbXVsYXRlXzggc2t0ZXN0IHNsZWVwIHNsb2dpdCBzbG9naXRfZDIgc2xvZ2l0X3Agc21vb3RoIHNuYXBzcGFuIHNvIHNvciBzb3J0IHNwZWFybWFuIHNwaWtlcGxvdCBzcGlrZXBsb3RfNyBzcGlrZXBsdCBzcGxpbmVfeCBzcGxpdCBzcXJlZyBzcXJlZ19wIHNyZXQgc3JldHUgc3JldHVyIHNyZXR1cm4gc3NjIHN0IHN0X2N0IHN0X2hjIHN0X2hjZCBzdF9oY2Rfc2ggc3RfaXMgc3RfaXNzeXMgc3Rfbm90ZSBzdF9wcm9tbyBzdF9zZXQgc3Rfc2hvdyBzdF9zbXBsIHN0X3N1YmlkIHN0YWNrIHN0YXRzYnkgc3RhdHNieV84IHN0YmFzZSBzdGNpIHN0Y2lfNyBzdGNveCBzdGNveF9lc3RhdCBzdGNveF9mciBzdGNveF9mcl9sbCBzdGNveF9wIHN0Y294X3N3IHN0Y294a20gc3Rjb3hrbV83IHN0Y3N0YXQgc3RjdXJ2IHN0Y3VydmUgc3RjdXJ2ZV83IHN0ZGVzIHN0ZW0gc3RlcHdpc2Ugc3RlcmVnIHN0ZmlsbCBzdGdlbiBzdGlyIHN0am9pbiBzdG1jIHN0bWggc3RwaHBsb3Qgc3RwaHBsb3RfNyBzdHBodGVzdCBzdHBodGVzdF83IHN0cHRpbWUgc3RyYXRlIHN0cmF0ZV83IHN0cmVnIHN0cmVnX3N3IHN0cmVzZXQgc3RzIHN0c183IHN0c2V0IHN0c3BsaXQgc3RzdW0gc3R0b2NjIHN0dG9jdCBzdHZhcnkgc3R3ZWliIHN1IHN1ZXN0IHN1ZXN0Xzggc3VtIHN1bW0gc3VtbWEgc3VtbWFyIHN1bW1hcmkgc3VtbWFyaXogc3VtbWFyaXplIHN1bmZsb3dlciBzdXJlZyBzdXJ2Y3VydiBzdXJ2c3VtIHN2YXIgc3Zhcl9wIHN2bWF0IHN2eSBzdnlfZGlzcCBzdnlfZHJlZyBzdnlfZXN0IHN2eV9lc3RfNyBzdnlfZXN0YXQgc3Z5X2dldCBzdnlfZ25icmVnX3Agc3Z5X2hlYWQgc3Z5X2hlYWRlciBzdnlfaGVja21hbl9wIHN2eV9oZWNrcHJvYl9wIHN2eV9pbnRyZWdfcCBzdnlfaXZyZWdfcCBzdnlfbG9naXN0aWNfcCBzdnlfbG9naXRfcCBzdnlfbWxvZ2l0X3Agc3Z5X25icmVnX3Agc3Z5X29sb2dpdF9wIHN2eV9vcHJvYml0X3Agc3Z5X3BvaXNzb25fcCBzdnlfcHJvYml0X3Agc3Z5X3JlZ3Jlc3NfcCBzdnlfc3ViIHN2eV9zdWJfNyBzdnlfeCBzdnlfeF83IHN2eV94X3Agc3Z5ZGVzIHN2eWRlc184IHN2eWdlbiBzdnlnbmJyZWcgc3Z5aGVja21hbiBzdnloZWNrcHJvYiBzdnlpbnRyZWcgc3Z5aW50cmVnXzcgc3Z5aW50cmcgc3Z5aXZyZWcgc3Z5bGMgc3Z5bG9nX3Agc3Z5bG9naXQgc3Z5bWFya291dCBzdnltYXJrb3V0Xzggc3Z5bWVhbiBzdnltbG9nIHN2eW1sb2dpdCBzdnluYnJlZyBzdnlvbG9nIHN2eW9sb2dpdCBzdnlvcHJvYiBzdnlvcHJvYml0IHN2eW9wdHMgc3Z5cG9pcyBzdnlwb2lzXzcgc3Z5cG9pc3NvbiBzdnlwcm9iaXQgc3Z5cHJvYnQgc3Z5cHJvcCBzdnlwcm9wXzcgc3Z5cmF0aW8gc3Z5cmVnIHN2eXJlZ19wIHN2eXJlZ3Jlc3Mgc3Z5c2V0IHN2eXNldF83IHN2eXNldF84IHN2eXRhYiBzdnl0YWJfNyBzdnl0ZXN0IHN2eXRvdGFsIHN3IHN3Xzggc3djbnJlZyBzd2NveCBzd2VyZWcgc3dpbGsgc3dsb2dpcyBzd2xvZ2l0IHN3b2xvZ2l0IHN3b3ByYnQgc3dwb2lzIHN3cHJvYml0IHN3cXJlZyBzd3RvYml0IHN3d2VpYiBzeW1tZXRyeSBzeW1taSBzeW1wbG90IHN5bXBsb3RfNyBzeW50YXggc3lzZGVzY3JpYmUgc3lzZGlyIHN5c3VzZSBzenJvZXRlciB0YSB0YWIgdGFiMSB0YWIyIHRhYl9vciB0YWJkIHRhYmRpIHRhYmRpcyB0YWJkaXNwIHRhYmkgdGFibGUgdGFib2RkcyB0YWJvZGRzXzcgdGFic3RhdCB0YWJ1IHRhYnVsIHRhYnVsYSB0YWJ1bGF0IHRhYnVsYXRlIHRlIHRlbXBmaWxlIHRlbXBuYW1lIHRlbXB2YXIgdGVzIHRlc3QgdGVzdG5sIHRlc3RwYXJtIHRlc3RzdGQgdGV0cmFjaG9yaWMgdGltZV9pdCB0aW1lciB0aXMgdG9iIHRvYmkgdG9iaXQgdG9iaXRfcCB0b2JpdF9zdyB0b2tlbiB0b2tlbmkgdG9rZW5peiB0b2tlbml6ZSB0b3N0cmluZyB0b3RhbCB0cmFuc2xhdGUgdHJhbnNsYXRvciB0cmFuc21hcCB0cmVhdF9sbCB0cmVhdHJfcCB0cmVhdHJlZyB0cmltIHRyaW1maWxsIHRybmJfY29ucyB0cm5iX21lYW4gdHJwb2lzc19kMiB0cnVuY19sbCB0cnVuY3JfcCB0cnVuY3JlZyB0c2FwcGVuZCB0c2V0IHRzZmlsbCB0c2xpbmUgdHNsaW5lX2V4IHRzcmVwb3J0IHRzcmV2YXIgdHNybGluZSB0c3NldCB0c3Ntb290aCB0c3VuYWIgdHRlc3QgdHRlc3RpIHR1dF9jaGsgdHV0X3dhaXQgdHV0b3JpYWwgdHcgdHdhcmVfc3QgdHdvIHR3b3dheSB0d293YXlfX2ZwZml0X3NlcnNldCB0d293YXlfX2Z1bmN0aW9uX2dlbiB0d293YXlfX2hpc3RvZ3JhbV9nZW4gdHdvd2F5X19pcG9pbnRfc2Vyc2V0IHR3b3dheV9faXBvaW50c19zZXJzZXQgdHdvd2F5X19rZGVuc2l0eV9nZW4gdHdvd2F5X19sZml0X3NlcnNldCB0d293YXlfX25vcm1nZW5fZ2VuIHR3b3dheV9fcGNpX3NlcnNldCB0d293YXlfX3FmaXRfc2Vyc2V0IHR3b3dheV9fc2NhdHRlcmlfc2Vyc2V0IHR3b3dheV9fc3VuZmxvd2VyX2dlbiB0d293YXlfa3NtX3NlcnNldCB0eSB0eXAgdHlwZSB0eXBlb2YgdXwwIHVuYWIgdW5hYmJyZXYgdW5hYmNtZCB1cGRhdGUgdXMgdXNlIHVzZWxhYmVsIHZhciB2YXJfbWtjb21wYW5pb24gdmFyX3AgdmFyYmFzaWMgdmFyZmNhc3QgdmFyZ3JhbmdlciB2YXJpcmYgdmFyaXJmX2FkZCB2YXJpcmZfY2dyYXBoIHZhcmlyZl9jcmVhdGUgdmFyaXJmX2N0YWJsZSB2YXJpcmZfZGVzY3JpYmUgdmFyaXJmX2RpciB2YXJpcmZfZHJvcCB2YXJpcmZfZXJhc2UgdmFyaXJmX2dyYXBoIHZhcmlyZl9vZ3JhcGggdmFyaXJmX3JlbmFtZSB2YXJpcmZfc2V0IHZhcmlyZl90YWJsZSB2YXJsaXN0IHZhcmxtYXIgdmFybm9ybSB2YXJzb2MgdmFyc3RhYmxlIHZhcnN0YWJsZV93IHZhcnN0YWJsZV93MiB2YXJ3bGUgdmNlIHZlYyB2ZWNfZmV2ZCB2ZWNfbWtwaGkgdmVjX3AgdmVjX3BfdyB2ZWNpcmZfY3JlYXRlIHZlY2xtYXIgdmVjbG1hcl93IHZlY25vcm0gdmVjbm9ybV93IHZlY3JhbmsgdmVjc3RhYmxlIHZlcmluc3QgdmVycyB2ZXJzaSB2ZXJzaW8gdmVyc2lvbiB2aWV3IHZpZXdzb3VyY2UgdmlmIHZ3bHMgd2RhdGV0b2Ygd2ViZGVzY3JpYmUgd2Vic2VlayB3ZWJ1c2Ugd2VpYjFfbGYgd2VpYjJfbGYgd2VpYl9sZiB3ZWliX2xmMCB3ZWliaGV0X2dsZiB3ZWliaGV0X2dsZl9zaCB3ZWliaGV0X2dsZmEgd2VpYmhldF9nbGZhX3NoIHdlaWJoZXRfZ3Agd2VpYmhldF9pbGYgd2VpYmhldF9pbGZfc2ggd2VpYmhldF9pbGZhIHdlaWJoZXRfaWxmYV9zaCB3ZWliaGV0X2lwIHdlaWJ1X3N3IHdlaWJ1bF9wIHdlaWJ1bGwgd2VpYnVsbF9jIHdlaWJ1bGxfcyB3ZWlidWxsaGV0IHdoIHdoZWxwIHdoaSB3aGljaCB3aGlsIHdoaWxlIHdpbGNfc3Qgd2lsY294b24gd2luIHdpbmQgd2luZG8gd2luZG93IHdpbmV4ZWMgd250ZXN0YiB3bnRlc3RiXzcgd250ZXN0cSB4Y2hhcnQgeGNoYXJ0XzcgeGNvcnIgeGNvcnJfNyB4aSB4aV82IHhtbHNhdiB4bWxzYXZlIHhtbHVzZSB4cG9zZSB4c2ggeHNoZSB4c2hlbCB4c2hlbGwgeHRfaWlzIHh0X3RpcyB4dGFiX3AgeHRhYm9uZCB4dGJpbl9wIHh0Y2xvZyB4dGNsb2dsb2cgeHRjbG9nbG9nXzggeHRjbG9nbG9nX2QyIHh0Y2xvZ2xvZ19wYV9wIHh0Y2xvZ2xvZ19yZV9wIHh0Y250X3AgeHRjb3JyIHh0ZGF0YSB4dGRlcyB4dGZyb250X3AgeHRmcm9udGllciB4dGdlZSB4dGdlZV9lbGluayB4dGdlZV9lc3RhdCB4dGdlZV9tYWtlaXZhciB4dGdlZV9wIHh0Z2VlX3BsaW5rIHh0Z2xzIHh0Z2xzX3AgeHRoYXVzIHh0aGF1c21hbiB4dGh0X3AgeHRodGF5bG9yIHh0aWxlIHh0aW50X3AgeHRpbnRyZWcgeHRpbnRyZWdfOCB4dGludHJlZ19kMiB4dGludHJlZ19wIHh0aXZwXzEgeHRpdnBfMiB4dGl2cmVnIHh0bGluZSB4dGxpbmVfZXggeHRsb2dpdCB4dGxvZ2l0XzggeHRsb2dpdF9kMiB4dGxvZ2l0X2ZlX3AgeHRsb2dpdF9wYV9wIHh0bG9naXRfcmVfcCB4dG1peGVkIHh0bWl4ZWRfZXN0YXQgeHRtaXhlZF9wIHh0bmJfZmUgeHRuYl9sZiB4dG5icmVnIHh0bmJyZWdfcGFfcCB4dG5icmVnX3JlZmVfcCB4dHBjc2UgeHRwY3NlX3AgeHRwb2lzIHh0cG9pc3NvbiB4dHBvaXNzb25fZDIgeHRwb2lzc29uX3BhX3AgeHRwb2lzc29uX3JlZmVfcCB4dHByZWQgeHRwcm9iaXQgeHRwcm9iaXRfOCB4dHByb2JpdF9kMiB4dHByb2JpdF9yZV9wIHh0cHNfZmUgeHRwc19sZiB4dHBzX3JlbiB4dHBzX3Jlbl84IHh0cmFyX3AgeHRyYyB4dHJjX3AgeHRyY2hoIHh0cmVmZV9wIHh0cmVnIHh0cmVnX2JlIHh0cmVnX2ZlIHh0cmVnX21sIHh0cmVnX3BhX3AgeHRyZWdfcmUgeHRyZWdhciB4dHJlcmVfcCB4dHNldCB4dHNmX2xsIHh0c2ZfbGx0aSB4dHN1bSB4dHRhYiB4dHRlc3QwIHh0dG9iaXQgeHR0b2JpdF84IHh0dG9iaXRfcCB4dHRyYW5zIHl4IHl4dmlld19fYmFybGlrZV9kcmF3IHl4dmlld19hcmVhX2RyYXcgeXh2aWV3X2Jhcl9kcmF3IHl4dmlld19kb3RfZHJhdyB5eHZpZXdfZHJvcGxpbmVfZHJhdyB5eHZpZXdfZnVuY3Rpb25fZHJhdyB5eHZpZXdfaWFycm93X2RyYXcgeXh2aWV3X2lsYWJlbHNfZHJhdyB5eHZpZXdfbm9ybWFsX2RyYXcgeXh2aWV3X3BjYXJyb3dfZHJhdyB5eHZpZXdfcGNiYXJyb3dfZHJhdyB5eHZpZXdfcGNjYXBzeW1fZHJhdyB5eHZpZXdfcGNzY2F0dGVyX2RyYXcgeXh2aWV3X3Bjc3Bpa2VfZHJhdyB5eHZpZXdfcmFyZWFfZHJhdyB5eHZpZXdfcmJhcl9kcmF3IHl4dmlld19yYmFybV9kcmF3IHl4dmlld19yY2FwX2RyYXcgeXh2aWV3X3JjYXBzeW1fZHJhdyB5eHZpZXdfcmNvbm5lY3RlZF9kcmF3IHl4dmlld19ybGluZV9kcmF3IHl4dmlld19yc2NhdHRlcl9kcmF3IHl4dmlld19yc3Bpa2VfZHJhdyB5eHZpZXdfc3Bpa2VfZHJhdyB5eHZpZXdfc3VuZmxvd2VyX2RyYXcgemFwX3MgemluYiB6aW5iX2xsZiB6aW5iX3BsZiB6aXAgemlwX2xsZiB6aXBfcCB6aXBfcGxmIHp0X2N0XzUgenRfaGNfNSB6dF9oY2RfNSB6dF9pc181IHp0X2lzc181IHp0X3Nob181IHp0X3NtcF81IHp0YmFzZV81IHp0Y294XzUgenRkZXNfNSB6dGVyZWdfNSB6dGZpbGxfNSB6dGdlbl81IHp0aXJfNSB6dGpvaW5fNSB6dG5iIHp0bmJfcCB6dHAgenRwX3AgenRzXzUgenRzZXRfNSB6dHNwbGlfNSB6dHN1bV81IHp0dG9jdF81IHp0dmFyeV81IHp0d2VpYl81JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9gW2EtekEtWjAtOV9dKycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFx7P1thLXpBLVowLTlfXStcXH0/L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdgXCJbXlxcclxcbl0qP1wiXFwnJ30sXG4gICAgICAgICAge2JlZ2luOiAnXCJbXlxcclxcblwiXSpcIid9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoYWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGF0YW5ofGNlaWx8Y2xvZ2xvZ3xjb21ifGNvc3xkaWdhbW1hfGV4cHxmbG9vcnxpbnZjbG9nbG9nfGludmxvZ2l0fGxufGxuZmFjdHxsbmZhY3RvcmlhbHxsbmdhbW1hfGxvZ3xsb2cxMHxtYXh8bWlufG1vZHxyZWxkaWZ8cm91bmR8c2lnbnxzaW58c3FydHxzdW18dGFufHRhbmh8dHJpZ2FtbWF8dHJ1bmN8YmV0YWRlbnxCaW5vbWlhbHxiaW5vcm18Ymlub3JtYWx8Y2hpMnxjaGkydGFpbHxkZ2FtbWFwZGF8ZGdhbW1hcGRhZGF8ZGdhbW1hcGRhZHh8ZGdhbW1hcGR4fGRnYW1tYXBkeGR4fEZ8RmRlbnxGdGFpbHxnYW1tYWRlbnxnYW1tYXB8aWJldGF8aW52Ymlub21pYWx8aW52Y2hpMnxpbnZjaGkydGFpbHxpbnZGfGludkZ0YWlsfGludmdhbW1hcHxpbnZpYmV0YXxpbnZuY2hpMnxpbnZuRnRhaWx8aW52bmliZXRhfGludm5vcm18aW52bm9ybWFsfGludnR0YWlsfG5iZXRhZGVufG5jaGkyfG5GZGVufG5GdGFpbHxuaWJldGF8bm9ybXxub3JtYWx8bm9ybWFsZGVufG5vcm1kfG5wbmNoaTJ8dGRlbnx0dGFpbHx1bmlmb3JtfGFiYnJldnxjaGFyfGluZGV4fGluZGV4bm90fGxlbmd0aHxsb3dlcnxsdHJpbXxtYXRjaHxwbHVyYWx8cHJvcGVyfHJlYWx8cmVnZXhtfHJlZ2V4cnxyZWdleHN8cmV2ZXJzZXxydHJpbXxzdHJpbmd8c3RybGVufHN0cmxvd2VyfHN0cmx0cmltfHN0cm1hdGNofHN0cm9mcmVhbHxzdHJwb3N8c3RycHJvcGVyfHN0cnJldmVyc2V8c3RycnRyaW18c3RydHJpbXxzdHJ1cHBlcnxzdWJpbnN0cnxzdWJpbndvcmR8c3Vic3RyfHRyaW18dXBwZXJ8d29yZHx3b3JkY291bnR8X2NhbGxlcnxhdXRvY29kZXxieXRlb3JkZXJ8Y2hvcHxjbGlwfGNvbmR8ZXxlcHNkb3VibGV8ZXBzZmxvYXR8Z3JvdXB8aW5saXN0fGlucmFuZ2V8aXJlY29kZXxtYXRyaXh8bWF4Ynl0ZXxtYXhkb3VibGV8bWF4ZmxvYXR8bWF4aW50fG1heGxvbmd8bWl8bWluYnl0ZXxtaW5kb3VibGV8bWluZmxvYXR8bWluaW50fG1pbmxvbmd8bWlzc2luZ3xyfHJlY29kZXxyZXBsYXl8cmV0dXJufHN8c2NhbGFyfGR8ZGF0ZXxkYXl8ZG93fGRveXxoYWxmeWVhcnxtZHl8bW9udGh8cXVhcnRlcnx3ZWVrfHllYXJ8ZHxkYWlseXxkb2ZkfGRvZmh8ZG9mbXxkb2ZxfGRvZnd8ZG9meXxofGhhbGZ5ZWFybHl8aG9mZHxtfG1vZmR8bW9udGhseXxxfHFvZmR8cXVhcnRlcmx5fHRpbnx0d2l0aGlufHd8d2Vla2x5fHdvZmR8eXx5ZWFybHl8eWh8eW18eW9mZHx5cXx5d3xjaG9sZXNreXxjb2xudW1ifGNvbHNvZnxjb3JyfGRldHxkaWFnfGRpYWcwY250fGVsfGdldHxoYWRhbWFyZHxJfGludnxpbnZzeW18aXNzeW18aXNzeW1tZXRyaWN8SnxtYXRtaXNzaW5nfG1hdHVuaWZvcm18bXJlbGRpZnxudWxsbWF0fHJvd251bWJ8cm93c29mfHN3ZWVwfHN5bWludnx0cmFjZXx2ZWN8dmVjZGlhZykoPz1cXFxcKCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBobGpzLkNPTU1FTlQoJ15bIFxcdF0qXFxcXCouKiQnLCBmYWxzZSksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNURVAyMV9JREVOVF9SRSA9ICdbQS1aX11bQS1aMC05Xy5dKic7XG4gIHZhciBTVEVQMjFfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ0hFQURFUiBFTkRTRUMgREFUQSdcbiAgfTtcbiAgdmFyIFNURVAyMV9TVEFSVCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0lTTy0xMDMwMy0yMTsnLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgdmFyIFNURVAyMV9DTE9TRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ0VORC1JU08tMTAzMDMtMjE7JyxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3AyMScsICdzdGVwJywgJ3N0cCddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIFNURVAgMjEgaXMgY2FzZSBpbnNlbnNpdGl2ZSBpbiB0aGVvcnksIGluIHByYWN0aWNlIGFsbCBub24tY29tbWVudHMgYXJlIGNhcGl0YWxpemVkLlxuICAgIGxleGVtZXM6IFNURVAyMV9JREVOVF9SRSxcbiAgICBrZXl3b3JkczogU1RFUDIxX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBTVEVQMjFfU1RBUlQsXG4gICAgICBTVEVQMjFfQ0xPU0UsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXCpcXFxcKiEnLCAnXFxcXCovJyksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIlxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICdcXFxcZCsnLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogJ1xcXFwkJyArIGhsanMuSURFTlRfUkVcbiAgfTtcblxuICB2YXIgSEVYX0NPTE9SID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICcjKFthLWZBLUYwLTldezZ9fFthLWZBLUYwLTldezN9KSdcbiAgfTtcblxuICB2YXIgQVRfS0VZV09SRFMgPSBbXG4gICAgJ2NoYXJzZXQnLFxuICAgICdjc3MnLFxuICAgICdkZWJ1ZycsXG4gICAgJ2V4dGVuZCcsXG4gICAgJ2ZvbnQtZmFjZScsXG4gICAgJ2ZvcicsXG4gICAgJ2ltcG9ydCcsXG4gICAgJ2luY2x1ZGUnLFxuICAgICdtZWRpYScsXG4gICAgJ21peGluJyxcbiAgICAncGFnZScsXG4gICAgJ3dhcm4nLFxuICAgICd3aGlsZSdcbiAgXTtcblxuICB2YXIgUFNFVURPX1NFTEVDVE9SUyA9IFtcbiAgICAnYWZ0ZXInLFxuICAgICdiZWZvcmUnLFxuICAgICdmaXJzdC1sZXR0ZXInLFxuICAgICdmaXJzdC1saW5lJyxcbiAgICAnYWN0aXZlJyxcbiAgICAnZmlyc3QtY2hpbGQnLFxuICAgICdmb2N1cycsXG4gICAgJ2hvdmVyJyxcbiAgICAnbGFuZycsXG4gICAgJ2xpbmsnLFxuICAgICd2aXNpdGVkJ1xuICBdO1xuXG4gIHZhciBUQUdTID0gW1xuICAgICdhJyxcbiAgICAnYWJicicsXG4gICAgJ2FkZHJlc3MnLFxuICAgICdhcnRpY2xlJyxcbiAgICAnYXNpZGUnLFxuICAgICdhdWRpbycsXG4gICAgJ2InLFxuICAgICdibG9ja3F1b3RlJyxcbiAgICAnYm9keScsXG4gICAgJ2J1dHRvbicsXG4gICAgJ2NhbnZhcycsXG4gICAgJ2NhcHRpb24nLFxuICAgICdjaXRlJyxcbiAgICAnY29kZScsXG4gICAgJ2RkJyxcbiAgICAnZGVsJyxcbiAgICAnZGV0YWlscycsXG4gICAgJ2RmbicsXG4gICAgJ2RpdicsXG4gICAgJ2RsJyxcbiAgICAnZHQnLFxuICAgICdlbScsXG4gICAgJ2ZpZWxkc2V0JyxcbiAgICAnZmlnY2FwdGlvbicsXG4gICAgJ2ZpZ3VyZScsXG4gICAgJ2Zvb3RlcicsXG4gICAgJ2Zvcm0nLFxuICAgICdoMScsXG4gICAgJ2gyJyxcbiAgICAnaDMnLFxuICAgICdoNCcsXG4gICAgJ2g1JyxcbiAgICAnaDYnLFxuICAgICdoZWFkZXInLFxuICAgICdoZ3JvdXAnLFxuICAgICdodG1sJyxcbiAgICAnaScsXG4gICAgJ2lmcmFtZScsXG4gICAgJ2ltZycsXG4gICAgJ2lucHV0JyxcbiAgICAnaW5zJyxcbiAgICAna2JkJyxcbiAgICAnbGFiZWwnLFxuICAgICdsZWdlbmQnLFxuICAgICdsaScsXG4gICAgJ21hcmsnLFxuICAgICdtZW51JyxcbiAgICAnbmF2JyxcbiAgICAnb2JqZWN0JyxcbiAgICAnb2wnLFxuICAgICdwJyxcbiAgICAncScsXG4gICAgJ3F1b3RlJyxcbiAgICAnc2FtcCcsXG4gICAgJ3NlY3Rpb24nLFxuICAgICdzcGFuJyxcbiAgICAnc3Ryb25nJyxcbiAgICAnc3VtbWFyeScsXG4gICAgJ3N1cCcsXG4gICAgJ3RhYmxlJyxcbiAgICAndGJvZHknLFxuICAgICd0ZCcsXG4gICAgJ3RleHRhcmVhJyxcbiAgICAndGZvb3QnLFxuICAgICd0aCcsXG4gICAgJ3RoZWFkJyxcbiAgICAndGltZScsXG4gICAgJ3RyJyxcbiAgICAndWwnLFxuICAgICd2YXInLFxuICAgICd2aWRlbydcbiAgXTtcblxuICB2YXIgTE9PS0FIRUFEX1RBR19FTkQgPSAnKD89W1xcXFwuXFxcXHNcXFxcblxcXFxbXFxcXDosXSknO1xuXG4gIHZhciBBVFRSSUJVVEVTID0gW1xuICAgICdhbGlnbi1jb250ZW50JyxcbiAgICAnYWxpZ24taXRlbXMnLFxuICAgICdhbGlnbi1zZWxmJyxcbiAgICAnYW5pbWF0aW9uJyxcbiAgICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAgICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgICAnYW5pbWF0aW9uLW5hbWUnLFxuICAgICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAgICdhdXRvJyxcbiAgICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICAgJ2JhY2tncm91bmQnLFxuICAgICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAgICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgICAnYmFja2dyb3VuZC1zaXplJyxcbiAgICAnYm9yZGVyJyxcbiAgICAnYm9yZGVyLWJvdHRvbScsXG4gICAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAgICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICAgJ2JvcmRlci1jb2xvcicsXG4gICAgJ2JvcmRlci1pbWFnZScsXG4gICAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAgICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICAgJ2JvcmRlci1sZWZ0JyxcbiAgICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAgICdib3JkZXItbGVmdC1zdHlsZScsXG4gICAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgICAnYm9yZGVyLXJhZGl1cycsXG4gICAgJ2JvcmRlci1yaWdodCcsXG4gICAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgICAnYm9yZGVyLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcCcsXG4gICAgJ2JvcmRlci10b3AtY29sb3InLFxuICAgICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItdG9wLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICAgJ2JvcmRlci13aWR0aCcsXG4gICAgJ2JvdHRvbScsXG4gICAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgICAnYm94LXNoYWRvdycsXG4gICAgJ2JveC1zaXppbmcnLFxuICAgICdicmVhay1hZnRlcicsXG4gICAgJ2JyZWFrLWJlZm9yZScsXG4gICAgJ2JyZWFrLWluc2lkZScsXG4gICAgJ2NhcHRpb24tc2lkZScsXG4gICAgJ2NsZWFyJyxcbiAgICAnY2xpcCcsXG4gICAgJ2NsaXAtcGF0aCcsXG4gICAgJ2NvbG9yJyxcbiAgICAnY29sdW1uLWNvdW50JyxcbiAgICAnY29sdW1uLWZpbGwnLFxuICAgICdjb2x1bW4tZ2FwJyxcbiAgICAnY29sdW1uLXJ1bGUnLFxuICAgICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAgICdjb2x1bW4tc3BhbicsXG4gICAgJ2NvbHVtbi13aWR0aCcsXG4gICAgJ2NvbHVtbnMnLFxuICAgICdjb250ZW50JyxcbiAgICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAgICdjb3VudGVyLXJlc2V0JyxcbiAgICAnY3Vyc29yJyxcbiAgICAnZGlyZWN0aW9uJyxcbiAgICAnZGlzcGxheScsXG4gICAgJ2VtcHR5LWNlbGxzJyxcbiAgICAnZmlsdGVyJyxcbiAgICAnZmxleCcsXG4gICAgJ2ZsZXgtYmFzaXMnLFxuICAgICdmbGV4LWRpcmVjdGlvbicsXG4gICAgJ2ZsZXgtZmxvdycsXG4gICAgJ2ZsZXgtZ3JvdycsXG4gICAgJ2ZsZXgtc2hyaW5rJyxcbiAgICAnZmxleC13cmFwJyxcbiAgICAnZmxvYXQnLFxuICAgICdmb250JyxcbiAgICAnZm9udC1mYW1pbHknLFxuICAgICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAgICdmb250LWtlcm5pbmcnLFxuICAgICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgICAnZm9udC1zaXplJyxcbiAgICAnZm9udC1zaXplLWFkanVzdCcsXG4gICAgJ2ZvbnQtc3RyZXRjaCcsXG4gICAgJ2ZvbnQtc3R5bGUnLFxuICAgICdmb250LXZhcmlhbnQnLFxuICAgICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgICAnZm9udC13ZWlnaHQnLFxuICAgICdoZWlnaHQnLFxuICAgICdoeXBoZW5zJyxcbiAgICAnaWNvbicsXG4gICAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICAgJ2ltZS1tb2RlJyxcbiAgICAnaW5oZXJpdCcsXG4gICAgJ2luaXRpYWwnLFxuICAgICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAgICdsZWZ0JyxcbiAgICAnbGV0dGVyLXNwYWNpbmcnLFxuICAgICdsaW5lLWhlaWdodCcsXG4gICAgJ2xpc3Qtc3R5bGUnLFxuICAgICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICAgJ21hcmdpbicsXG4gICAgJ21hcmdpbi1ib3R0b20nLFxuICAgICdtYXJnaW4tbGVmdCcsXG4gICAgJ21hcmdpbi1yaWdodCcsXG4gICAgJ21hcmdpbi10b3AnLFxuICAgICdtYXJrcycsXG4gICAgJ21hc2snLFxuICAgICdtYXgtaGVpZ2h0JyxcbiAgICAnbWF4LXdpZHRoJyxcbiAgICAnbWluLWhlaWdodCcsXG4gICAgJ21pbi13aWR0aCcsXG4gICAgJ25hdi1kb3duJyxcbiAgICAnbmF2LWluZGV4JyxcbiAgICAnbmF2LWxlZnQnLFxuICAgICduYXYtcmlnaHQnLFxuICAgICduYXYtdXAnLFxuICAgICdub25lJyxcbiAgICAnbm9ybWFsJyxcbiAgICAnb2JqZWN0LWZpdCcsXG4gICAgJ29iamVjdC1wb3NpdGlvbicsXG4gICAgJ29wYWNpdHknLFxuICAgICdvcmRlcicsXG4gICAgJ29ycGhhbnMnLFxuICAgICdvdXRsaW5lJyxcbiAgICAnb3V0bGluZS1jb2xvcicsXG4gICAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgICAnb3V0bGluZS1zdHlsZScsXG4gICAgJ291dGxpbmUtd2lkdGgnLFxuICAgICdvdmVyZmxvdycsXG4gICAgJ292ZXJmbG93LXdyYXAnLFxuICAgICdvdmVyZmxvdy14JyxcbiAgICAnb3ZlcmZsb3cteScsXG4gICAgJ3BhZGRpbmcnLFxuICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgJ3BhZGRpbmctcmlnaHQnLFxuICAgICdwYWRkaW5nLXRvcCcsXG4gICAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAgICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgICAncGVyc3BlY3RpdmUnLFxuICAgICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAgICdwb2ludGVyLWV2ZW50cycsXG4gICAgJ3Bvc2l0aW9uJyxcbiAgICAncXVvdGVzJyxcbiAgICAncmVzaXplJyxcbiAgICAncmlnaHQnLFxuICAgICd0YWItc2l6ZScsXG4gICAgJ3RhYmxlLWxheW91dCcsXG4gICAgJ3RleHQtYWxpZ24nLFxuICAgICd0ZXh0LWFsaWduLWxhc3QnLFxuICAgICd0ZXh0LWRlY29yYXRpb24nLFxuICAgICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAgICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICAgJ3RleHQtaW5kZW50JyxcbiAgICAndGV4dC1vdmVyZmxvdycsXG4gICAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgICAndGV4dC1zaGFkb3cnLFxuICAgICd0ZXh0LXRyYW5zZm9ybScsXG4gICAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgICAndG9wJyxcbiAgICAndHJhbnNmb3JtJyxcbiAgICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAgICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICAgJ3VuaWNvZGUtYmlkaScsXG4gICAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgICAndmlzaWJpbGl0eScsXG4gICAgJ3doaXRlLXNwYWNlJyxcbiAgICAnd2lkb3dzJyxcbiAgICAnd2lkdGgnLFxuICAgICd3b3JkLWJyZWFrJyxcbiAgICAnd29yZC1zcGFjaW5nJyxcbiAgICAnd29yZC13cmFwJyxcbiAgICAnei1pbmRleCdcbiAgXTtcblxuICAvLyBpbGxlZ2Fsc1xuICB2YXIgSUxMRUdBTCA9IFtcbiAgICAnXFxcXD8nLFxuICAgICcoXFxcXGJSZXR1cm5cXFxcYiknLCAvLyBtb25rZXlcbiAgICAnKFxcXFxiRW5kXFxcXGIpJywgLy8gbW9ua2V5XG4gICAgJyhcXFxcYmVuZFxcXFxiKScsIC8vIHZic2NyaXB0XG4gICAgJyhcXFxcYmRlZlxcXFxiKScsIC8vIGdyYWRsZVxuICAgICc7JywgLy8gYSB3aG9sZSBsb3Qgb2YgbGFuZ3VhZ2VzXG4gICAgJyNcXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFwqXFxcXHMnLCAvLyBtYXJrZG93blxuICAgICc9PT1cXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFx8JyxcbiAgICAnJScsIC8vIHByb2xvZ1xuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzdHlsJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6ICdpZiBlbHNlIGZvciBpbicsXG4gICAgaWxsZWdhbDogJygnICsgSUxMRUdBTC5qb2luKCd8JykgKyAnKScsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gc3RyaW5nc1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAgLy8gY29tbWVudHNcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG5cbiAgICAgIC8vIGhleCBjb2xvcnNcbiAgICAgIEhFWF9DT0xPUixcblxuICAgICAgLy8gY2xhc3MgdGFnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC5bYS16QS1aXVthLXpBLVowLTlfLV0qJyArIExPT0tBSEVBRF9UQUdfRU5ELFxuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcydcbiAgICAgIH0sXG5cbiAgICAgIC8vIGlkIHRhZ1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwjW2EtekEtWl1bYS16QS1aMC05Xy1dKicgKyBMT09LQUhFQURfVEFHX0VORCxcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItaWQnXG4gICAgICB9LFxuXG4gICAgICAvLyB0YWdzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIFRBR1Muam9pbignfCcpICsgJyknICsgTE9PS0FIRUFEX1RBR19FTkQsXG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZydcbiAgICAgIH0sXG5cbiAgICAgIC8vIHBzdWVkbyBzZWxlY3RvcnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcmPzo/OlxcXFxiKCcgKyBQU0VVRE9fU0VMRUNUT1JTLmpvaW4oJ3wnKSArICcpJyArIExPT0tBSEVBRF9UQUdfRU5EXG4gICAgICB9LFxuXG4gICAgICAvLyBAIGtleXdvcmRzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxAKCcgKyBBVF9LRVlXT1JEUy5qb2luKCd8JykgKyAnKVxcXFxiJ1xuICAgICAgfSxcblxuICAgICAgLy8gdmFyaWFibGVzXG4gICAgICBWQVJJQUJMRSxcblxuICAgICAgLy8gZGltZW5zaW9uXG4gICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcblxuICAgICAgLy8gbnVtYmVyXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuXG4gICAgICAvLyBmdW5jdGlvbnNcbiAgICAgIC8vICAtIG9ubHkgZnJvbSBiZWdpbm5pbmcgb2YgbGluZSArIHdoaXRlc3BhY2VcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ15bYS16QS1aXVthLXpBLVowLTlfXFwtXSpcXFxcKC4qXFxcXCknLFxuICAgICAgICBpbGxlZ2FsOiAnW1xcXFxuXScsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICd0aXRsZScsIGJlZ2luOiAnXFxcXGJbYS16QS1aXVthLXpBLVowLTlfXFwtXSonfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICAgICAgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIEhFWF9DT0xPUixcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIGF0dHJpYnV0ZXNcbiAgICAgIC8vICAtIG9ubHkgZnJvbSBiZWdpbm5pbmcgb2YgbGluZSArIHdoaXRlc3BhY2VcbiAgICAgIC8vICAtIG11c3QgaGF2ZSB3aGl0ZXNwYWNlIGFmdGVyIGl0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJyArIEFUVFJJQlVURVMucmV2ZXJzZSgpLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyB2YWx1ZSBjb250YWluZXJcbiAgICAgICAgICBlbmQ6IC87fCQvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBIRVhfQ09MT1IsXG4gICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgXSxcbiAgICAgICAgICBpbGxlZ2FsOiAvXFwuLyxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBERVRBSUxTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXFxcW1xcbihtdWx0aXBhcnQpPycsIGVuZDogJ1xcXFxdXFxuJ1xuICB9O1xuICB2YXIgVElNRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFxcXGR7NH0tXFxcXGR7Mn0tXFxcXGR7Mn0oXFxcXHMrKVxcXFxkezJ9OlxcXFxkezJ9OlxcXFxkezJ9XFwuXFxcXGQrWidcbiAgfTtcbiAgdmFyIFBST0dSRVNTVkFMVUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJyhcXFxcK3wtKVxcXFxkKydcbiAgfTtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdeKHRlc3R8dGVzdGluZ3xzdWNjZXNzfHN1Y2Nlc3NmdWx8ZmFpbHVyZXxlcnJvcnxza2lwfHhmYWlsfHV4c3VjY2VzcykoOj8pXFxcXHMrKHRlc3QpPycgfSxcbiAgICAgIHsgYmVnaW46ICdecHJvZ3Jlc3MoOj8pKFxcXFxzKyk/KHBvcHxwdXNoKT8nIH0sXG4gICAgICB7IGJlZ2luOiAnXnRhZ3M6JyB9LFxuICAgICAgeyBiZWdpbjogJ150aW1lOicgfVxuICAgIF0sXG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgREVUQUlMUyxcbiAgICAgIFRJTUUsXG4gICAgICBQUk9HUkVTU1ZBTFVFLFxuICAgICAgS0VZV09SRFNcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1dJRlRfS0VZV09SRFMgPSB7XG4gICAgICBrZXl3b3JkOiAnI2F2YWlsYWJsZSAjY29sb3JMaXRlcmFsICNjb2x1bW4gI2Vsc2UgI2Vsc2VpZiAjZW5kaWYgI2ZpbGUgJyArXG4gICAgICAgICcjZmlsZUxpdGVyYWwgI2Z1bmN0aW9uICNpZiAjaW1hZ2VMaXRlcmFsICNsaW5lICNzZWxlY3RvciAjc291cmNlTG9jYXRpb24gJyArXG4gICAgICAgICdfIF9fQ09MVU1OX18gX19GSUxFX18gX19GVU5DVElPTl9fIF9fTElORV9fIEFueSBhcyBhcyEgYXM/IGFzc29jaWF0ZWR0eXBlICcgK1xuICAgICAgICAnYXNzb2NpYXRpdml0eSBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGNvbnZlbmllbmNlIGRlZmF1bHQgZGVmZXIgZGVpbml0IGRpZFNldCBkbyAnICtcbiAgICAgICAgJ2R5bmFtaWMgZHluYW1pY1R5cGUgZWxzZSBlbnVtIGV4dGVuc2lvbiBmYWxsdGhyb3VnaCBmYWxzZSBmaWxlcHJpdmF0ZSBmaW5hbCBmb3IgZnVuYyAnICtcbiAgICAgICAgJ2dldCBndWFyZCBpZiBpbXBvcnQgaW4gaW5kaXJlY3QgaW5maXggaW5pdCBpbm91dCBpbnRlcm5hbCBpcyBsYXp5IGxlZnQgbGV0ICcgK1xuICAgICAgICAnbXV0YXRpbmcgbmlsIG5vbmUgbm9ubXV0YXRpbmcgb3BlbiBvcGVyYXRvciBvcHRpb25hbCBvdmVycmlkZSBwb3N0Zml4IHByZWNlZGVuY2UgJyArXG4gICAgICAgICdwcmVmaXggcHJpdmF0ZSBwcm90b2NvbCBQcm90b2NvbCBwdWJsaWMgcmVwZWF0IHJlcXVpcmVkIHJldGhyb3dzIHJldHVybiAnICtcbiAgICAgICAgJ3JpZ2h0IHNlbGYgU2VsZiBzZXQgc3RhdGljIHN0cnVjdCBzdWJzY3JpcHQgc3VwZXIgc3dpdGNoIHRocm93IHRocm93cyB0cnVlICcgK1xuICAgICAgICAndHJ5IHRyeSEgdHJ5PyBUeXBlIHR5cGVhbGlhcyB1bm93bmVkIHZhciB3ZWFrIHdoZXJlIHdoaWxlIHdpbGxTZXQnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbmlsJyxcbiAgICAgIGJ1aWx0X2luOiAnYWJzIGFkdmFuY2UgYWxpZ25vZiBhbGlnbm9mVmFsdWUgYW55R2VuZXJhdG9yIGFzc2VydCBhc3NlcnRpb25GYWlsdXJlICcgK1xuICAgICAgICAnYnJpZGdlRnJvbU9iamVjdGl2ZUMgYnJpZGdlRnJvbU9iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGJyaWRnZVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2JyaWRnZVRvT2JqZWN0aXZlQ1VuY29uZGl0aW9uYWwgYyBjb250YWlucyBjb3VudCBjb3VudEVsZW1lbnRzIGNvdW50TGVhZGluZ1plcm9zICcgK1xuICAgICAgICAnZGVidWdQcmludCBkZWJ1Z1ByaW50bG4gZGlzdGFuY2UgZHJvcEZpcnN0IGRyb3BMYXN0IGR1bXAgZW5jb2RlQml0c0FzV29yZHMgJyArXG4gICAgICAgICdlbnVtZXJhdGUgZXF1YWwgZmF0YWxFcnJvciBmaWx0ZXIgZmluZCBnZXRCcmlkZ2VkT2JqZWN0aXZlQ1R5cGUgZ2V0VmFMaXN0ICcgK1xuICAgICAgICAnaW5kaWNlcyBpbnNlcnRpb25Tb3J0IGlzQnJpZGdlZFRvT2JqZWN0aXZlQyBpc0JyaWRnZWRWZXJiYXRpbVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2lzVW5pcXVlbHlSZWZlcmVuY2VkIGlzVW5pcXVlbHlSZWZlcmVuY2VkTm9uT2JqQyBqb2luIGxhenkgbGV4aWNvZ3JhcGhpY2FsQ29tcGFyZSAnICtcbiAgICAgICAgJ21hcCBtYXggbWF4RWxlbWVudCBtaW4gbWluRWxlbWVudCBudW1lcmljQ2FzdCBvdmVybGFwcyBwYXJ0aXRpb24gcG9zaXggJyArXG4gICAgICAgICdwcmVjb25kaXRpb24gcHJlY29uZGl0aW9uRmFpbHVyZSBwcmludCBwcmludGxuIHF1aWNrU29ydCByZWFkTGluZSByZWR1Y2UgcmVmbGVjdCAnICtcbiAgICAgICAgJ3JlaW50ZXJwcmV0Q2FzdCByZXZlcnNlIHJvdW5kVXBUb0FsaWdubWVudCBzaXplb2Ygc2l6ZW9mVmFsdWUgc29ydCBzcGxpdCAnICtcbiAgICAgICAgJ3N0YXJ0c1dpdGggc3RyaWRlIHN0cmlkZW9mIHN0cmlkZW9mVmFsdWUgc3dhcCB0b1N0cmluZyB0cmFuc2NvZGUgJyArXG4gICAgICAgICd1bmRlcmVzdGltYXRlQ291bnQgdW5zYWZlQWRkcmVzc09mIHVuc2FmZUJpdENhc3QgdW5zYWZlRG93bmNhc3QgdW5zYWZlVW53cmFwICcgK1xuICAgICAgICAndW5zYWZlUmVmbGVjdCB3aXRoRXh0ZW5kZWRMaWZldGltZSB3aXRoT2JqZWN0QXRQbHVzWmVybyB3aXRoVW5zYWZlUG9pbnRlciAnICtcbiAgICAgICAgJ3dpdGhVbnNhZmVQb2ludGVyVG9PYmplY3Qgd2l0aFVuc2FmZU11dGFibGVQb2ludGVyIHdpdGhVbnNhZmVNdXRhYmxlUG9pbnRlcnMgJyArXG4gICAgICAgICd3aXRoVW5zYWZlUG9pbnRlciB3aXRoVW5zYWZlUG9pbnRlcnMgd2l0aFZhTGlzdCB6aXAnXG4gICAgfTtcblxuICB2YXIgVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXHUwMEMwLVxcdTAyQjhcXCddKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIC8vIHNsaWdodGx5IG1vcmUgc3BlY2lhbCB0byBzd2lmdFxuICB2YXIgT1BUSU9OQUxfVVNJTkdfVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXHUwMEMwLVxcdTAyQjhcXCddKlshP10nXG4gIH1cbiAgdmFyIEJMT0NLX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJy9cXFxcKicsXG4gICAgJ1xcXFwqLycsXG4gICAge1xuICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgfVxuICApO1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFxcXFxcKC8sIGVuZDogJ1xcXFwpJyxcbiAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtdIC8vIGFzc2lnbmVkIGxhdGVyXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVJTID0ge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGIoW1xcXFxkX10rKFxcXFwuW1xcXFxkZUVfXSspP3wweFthLWZBLUYwLTlfXSsoXFxcXC5bYS1mQS1GMC05cF9dKyk/fDBiWzAxX10rfDBvWzAtN19dKylcXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgU1VCU1QuY29udGFpbnMgPSBbTlVNQkVSU107XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIEJMT0NLX0NPTU1FTlQsXG4gICAgICBPUFRJT05BTF9VU0lOR19UWVBFLFxuICAgICAgVFlQRSxcbiAgICAgIE5VTUJFUlMsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLCBlbmQ6ICd7JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi9cbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLzwvLCBlbmQ6IC8+L1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLywgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBTV0lGVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgTlVNQkVSUyxcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICB7YmVnaW46ICc6J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpbGxlZ2FsOiAvW1wiJ10vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvXFxbfCUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdHJ1Y3QgcHJvdG9jb2wgY2xhc3MgZXh0ZW5zaW9uIGVudW0nLFxuICAgICAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgICAgIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9bQS1aYS16JF9dW1xcdTAwQzAtXFx1MDJCODAtOUEtWmEteiRfXSovfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIC8vIEBhdHRyaWJ1dGVzXG4gICAgICAgIGJlZ2luOiAnKEBkaXNjYXJkYWJsZVJlc3VsdHxAd2Fybl91bnVzZWRfcmVzdWx0fEBleHBvcnRlZHxAbGF6eXxAbm9lc2NhcGV8JyArXG4gICAgICAgICAgICAgICAgICAnQE5TQ29weWluZ3xATlNNYW5hZ2VkfEBvYmpjfEBvYmpjTWVtYmVyc3xAY29udmVudGlvbnxAcmVxdWlyZWR8JyArXG4gICAgICAgICAgICAgICAgICAnQG5vcmV0dXJufEBJQkFjdGlvbnxASUJEZXNpZ25hYmxlfEBJQkluc3BlY3RhYmxlfEBJQk91dGxldHwnICtcbiAgICAgICAgICAgICAgICAgICdAaW5maXh8QHByZWZpeHxAcG9zdGZpeHxAYXV0b2Nsb3N1cmV8QHRlc3RhYmxlfEBhdmFpbGFibGV8JyArXG4gICAgICAgICAgICAgICAgICAnQG5vbm9iamN8QE5TQXBwbGljYXRpb25NYWlufEBVSUFwcGxpY2F0aW9uTWFpbnxAZHluYW1pY01lbWJlckxvb2t1cHwnICtcbiAgICAgICAgICAgICAgICAgICdAcHJvcGVydHlXcmFwcGVyKSdcblxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsIGVuZDogLyQvLFxuICAgICAgICBjb250YWluczogW2hsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSwgQkxPQ0tfQ09NTUVOVF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gIHZhciBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAvXFwkbm9vcFxcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICBjb250YWluczogW3tcbiAgICAgIGJlZ2luOiAvXFwoLyxcbiAgICAgIGVuZDogL1xcKS8sXG4gICAgICBjb250YWluczogWydzZWxmJywge1xuICAgICAgICBiZWdpbjogL1xcXFwuL1xuICAgICAgfV1cbiAgICB9XSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFwkKD8hbm9vcClbYS16QS1aXVtfYS16QS1aMC05XSovLFxuICAgIGVuZDogL1xcKC8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC8lW19hLXpBLVowLTk6XSovLFxuICAgIGVuZDogJyUnXG4gIH07XG5cbiAgdmFyIEVTQ0FQRV9TRVFVRU5DRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAvXFxcXC4vXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVCxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBFU0NBUEVfU0VRVUVOQ0VcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTElURVJBTFMgPSAndHJ1ZSBmYWxzZSB5ZXMgbm8gbnVsbCc7XG5cbiAgLy8gRGVmaW5lIGtleXMgYXMgc3RhcnRpbmcgd2l0aCBhIHdvcmQgY2hhcmFjdGVyXG4gIC8vIC4uLmNvbnRhaW5pbmcgd29yZCBjaGFycywgc3BhY2VzLCBjb2xvbnMsIGZvcndhcmQtc2xhc2hlcywgaHlwaGVucyBhbmQgcGVyaW9kc1xuICAvLyAuLi5hbmQgZW5kaW5nIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhIHNwYWNlLCB0YWIgb3IgbmV3bGluZS5cbiAgLy8gVGhlIFlBTUwgc3BlYyBhbGxvd3MgZm9yIG11Y2ggbW9yZSB0aGFuIHRoaXMsIGJ1dCB0aGlzIGNvdmVycyBtb3N0IHVzZS1jYXNlcy5cbiAgdmFyIEtFWSA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFx3W1xcXFx3IDpcXFxcLy4tXSo6KD89WyBcXHRdfCQpJyB9LFxuICAgICAgeyBiZWdpbjogJ1wiXFxcXHdbXFxcXHcgOlxcXFwvLi1dKlwiOig/PVsgXFx0XXwkKScgfSwgLy9kb3VibGUgcXVvdGVkIGtleXNcbiAgICAgIHsgYmVnaW46ICdcXCdcXFxcd1tcXFxcdyA6XFxcXC8uLV0qXFwnOig/PVsgXFx0XXwkKScgfSAvL3NpbmdsZSBxdW90ZWQga2V5c1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEVNUExBVEVfVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xce1xceycsIGVuZDogJ1xcfVxcfScgfSwgLy8gamluamEgdGVtcGxhdGVzIEFuc2libGVcbiAgICAgIHsgYmVnaW46ICclXFx7JywgZW5kOiAnXFx9JyB9IC8vIFJ1YnkgaTE4blxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgIHtiZWdpbjogL1xcUysvfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFRFTVBMQVRFX1ZBUklBQkxFU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyd5bWwnLCAnWUFNTCcsICd5YW1sJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEtFWSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXi0tLVxccyokJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHsgLy8gbXVsdGkgbGluZSBzdHJpbmdcbiAgICAgICAgLy8gQmxvY2tzIHN0YXJ0IHdpdGggYSB8IG9yID4gZm9sbG93ZWQgYnkgYSBuZXdsaW5lXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluZGVudGF0aW9uIG9mIHN1YnNlcXVlbnQgbGluZXMgbXVzdCBiZSB0aGUgc2FtZSB0b1xuICAgICAgICAvLyBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGJsb2NrXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnW1xcXFx8Pl0oWzAtOV0/WystXSk/WyBdKlxcXFxuKCAqKVtcXFxcUyBdK1xcXFxuKFxcXFwyW1xcXFxTIF0rXFxcXG4/KSonLFxuICAgICAgfSxcbiAgICAgIHsgLy8gUnVieS9SYWlscyBlcmJcbiAgICAgICAgYmVnaW46ICc8JVslPS1dPycsIGVuZDogJ1slLV0/JT4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gbG9jYWwgdGFnc1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICchJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgIH0sXG4gICAgICB7IC8vIGRhdGEgdHlwZVxuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICchIScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICB9LFxuICAgICAgeyAvLyBmcmFnbWVudCBpZCAmcmVmXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyYnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnLFxuICAgICAgfSxcbiAgICAgIHsgLy8gZnJhZ21lbnQgcmVmZXJlbmNlICpyZWZcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXConICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnXG4gICAgICB9LFxuICAgICAgeyAvLyBhcnJheSBsaXN0aW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgfCQgaGFjayB3aGVuIHdlIGhhdmUgcHJvcGVyIGxvb2stYWhlYWQgc3VwcG9ydFxuICAgICAgYmVnaW46ICdcXFxcLSg/PVsgXXwkKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLFxuICAgICAgICBrZXl3b3Jkczoge2xpdGVyYWw6IExJVEVSQUxTfVxuICAgICAgfSxcbiAgICAgIC8vIG51bWJlcnMgYXJlIGFueSB2YWxpZCBDLXN0eWxlIG51bWJlciB0aGF0XG4gICAgICAvLyBzaXQgaXNvbGF0ZWQgZnJvbSBvdGhlciB3b3Jkc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdcXFxcYidcbiAgICAgIH0sXG4gICAgICBTVFJJTkdcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAvLyB2ZXJzaW9uIG9mIGZvcm1hdCBhbmQgdG90YWwgYW1vdW50IG9mIHRlc3RjYXNlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXlRBUCB2ZXJzaW9uIChcXFxcZCspJCcgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXjFcXFxcLlxcXFwuKFxcXFxkKykkJyB9XG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLy8gWUFNTCBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyhcXHMrKT8tLS0kJywgZW5kOiAnXFxcXC5cXFxcLlxcXFwuJCcsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiAneWFtbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcblx0ICAvLyB0ZXN0Y2FzZSBudW1iZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcgKFxcXFxkKykgJ1xuICAgICAgfSxcblx0ICAvLyB0ZXN0Y2FzZSBzdGF0dXMgYW5kIGRlc2NyaXB0aW9uXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ15vaycgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXm5vdCBvaycgfVxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndGsnXSxcbiAgICBrZXl3b3JkczogJ2FmdGVyIGFwcGVuZCBhcHBseSBhcnJheSBhdXRvX2V4ZWNvayBhdXRvX2ltcG9ydCBhdXRvX2xvYWQgYXV0b19ta2luZGV4ICcgK1xuICAgICAgJ2F1dG9fbWtpbmRleF9vbGQgYXV0b19xdWFsaWZ5IGF1dG9fcmVzZXQgYmdlcnJvciBiaW5hcnkgYnJlYWsgY2F0Y2ggY2QgY2hhbiBjbG9jayAnICtcbiAgICAgICdjbG9zZSBjb25jYXQgY29udGludWUgZGRlIGRpY3QgZW5jb2RpbmcgZW9mIGVycm9yIGV2YWwgZXhlYyBleGl0IGV4cHIgZmJsb2NrZWQgJyArXG4gICAgICAnZmNvbmZpZ3VyZSBmY29weSBmaWxlIGZpbGVldmVudCBmaWxlbmFtZSBmbHVzaCBmb3IgZm9yZWFjaCBmb3JtYXQgZ2V0cyBnbG9iIGdsb2JhbCAnICtcbiAgICAgICdoaXN0b3J5IGh0dHAgaWYgaW5jciBpbmZvIGludGVycCBqb2luIGxhcHBlbmR8MTAgbGFzc2lnbnwxMCBsaW5kZXh8MTAgbGluc2VydHwxMCBsaXN0ICcgK1xuICAgICAgJ2xsZW5ndGh8MTAgbG9hZCBscmFuZ2V8MTAgbHJlcGVhdHwxMCBscmVwbGFjZXwxMCBscmV2ZXJzZXwxMCBsc2VhcmNofDEwIGxzZXR8MTAgbHNvcnR8MTAgJytcbiAgICAgICdtYXRoZnVuYyBtYXRob3AgbWVtb3J5IG1zZ2NhdCBuYW1lc3BhY2Ugb3BlbiBwYWNrYWdlIHBhcnJheSBwaWQgcGtnOjpjcmVhdGUgcGtnX21rSW5kZXggJytcbiAgICAgICdwbGF0Zm9ybSBwbGF0Zm9ybTo6c2hlbGwgcHJvYyBwdXRzIHB3ZCByZWFkIHJlZmNoYW4gcmVnZXhwIHJlZ2lzdHJ5IHJlZ3N1YnwxMCByZW5hbWUgJytcbiAgICAgICdyZXR1cm4gc2FmZSBzY2FuIHNlZWsgc2V0IHNvY2tldCBzb3VyY2Ugc3BsaXQgc3RyaW5nIHN1YnN0IHN3aXRjaCB0Y2xfZW5kT2ZXb3JkICcrXG4gICAgICAndGNsX2ZpbmRMaWJyYXJ5IHRjbF9zdGFydE9mTmV4dFdvcmQgdGNsX3N0YXJ0T2ZQcmV2aW91c1dvcmQgdGNsX3dvcmRCcmVha0FmdGVyICcrXG4gICAgICAndGNsX3dvcmRCcmVha0JlZm9yZSB0Y2x0ZXN0IHRjbHZhcnMgdGVsbCB0aW1lIHRtIHRyYWNlIHVua25vd24gdW5sb2FkIHVuc2V0IHVwZGF0ZSAnK1xuICAgICAgJ3VwbGV2ZWwgdXB2YXIgdmFyaWFibGUgdndhaXQgd2hpbGUnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJztbIFxcXFx0XSojJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlsgXFxcXHRdKiMnLCAnJCcpLFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAncHJvYycsXG4gICAgICAgIGVuZDogJ1tcXFxce10nLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnWyBcXFxcdFxcXFxuXFxcXHJdKyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSonLFxuICAgICAgICAgICAgZW5kOiAnWyBcXFxcdFxcXFxuXFxcXHJdJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkKFxcXFx7KT8oOjopP1thLXpBLVpfXSgoOjopP1thLXpBLVowLTlfXSkqXFxcXCgoW2EtekEtWjAtOV9dKSpcXFxcKScsXG4gICAgICAgICAgICBlbmQ6ICdbXmEtekEtWjAtOV9cXFxcfVxcXFwkXSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCQoXFxcXHspPyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSonLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFwpKT9bXmEtekEtWjAtOV9cXFxcfVxcXFwkXSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW2hsanMuQklOQVJZX05VTUJFUl9NT0RFLCBobGpzLkNfTlVNQkVSX01PREVdXG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ09NTUFORCA9IHtcbiAgICBjbGFzc05hbWU6ICd0YWcnLFxuICAgIGJlZ2luOiAvXFxcXC8sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1thLXpBLVpcXHUwNDMwLVxcdTA0NGZcXHUwNDEwLVxcdTA0MmZdK1sqXT8vfSxcbiAgICAgICAgICB7YmVnaW46IC9bXmEtekEtWlxcdTA0MzAtXFx1MDQ0ZlxcdTA0MTAtXFx1MDQyZjAtOV0vfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gYmVjYXVzZSBpdCBsb29rcyBsaWtlIGF0dHJpYnV0ZXMgaW4gSFRNTCB0YWdzXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFxbLywgZW5kOiAvXFxdL30sXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFx7LywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHMqPVxccyovLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICBiZWdpbjogLy0/XFxkKlxcLj9cXGQrKHB0fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1BTkQsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Zvcm11bGEnLFxuICAgICAgICBjb250YWluczogW0NPTU1BTkRdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAvXFwkXFwkLywgZW5kOiAvXFwkXFwkL30sXG4gICAgICAgICAge2JlZ2luOiAvXFwkLywgZW5kOiAvXFwkL31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJyUnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVF9JTl9UWVBFUyA9ICdib29sIGJ5dGUgaTE2IGkzMiBpNjQgZG91YmxlIHN0cmluZyBiaW5hcnknO1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnbmFtZXNwYWNlIGNvbnN0IHR5cGVkZWYgc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24gdm9pZCBvbmV3YXkgc2V0IGxpc3QgbWFwIHJlcXVpcmVkIG9wdGlvbmFsJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVF9JTl9UWVBFUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24nLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihzZXR8bGlzdHxtYXApXFxcXHMqPCcsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3JkczogQlVJTFRfSU5fVFlQRVMsXG4gICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBUUElEID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdbMS05XVswLTldKicsIC8qIG5vIGxlYWRpbmcgemVyb3MgKi9cbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFRQTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJzpbXlxcXFxdXSsnXG4gIH07XG4gIHZhciBUUERBVEEgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFSfFB8UEFZTE9BRHxQUnxSfFNSfFJTUnxMQkx8VlJ8VUFMTXxNRVNTQUdFfFVUT09MfFVGUkFNRXxUSU1FUnwnICtcbiAgICAnVElNRVJfT1ZFUkZMT1d8Sk9JTlRfTUFYX1NQRUVEfFJFU1VNRV9QUk9HfERJQUdfUkVDKVxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBUUElELFxuICAgICAgVFBMQUJFTFxuICAgIF1cbiAgfTtcbiAgdmFyIFRQSU8gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFJfEFPfERJfERPfEZ8Ukl8Uk98VUl8VU98R0l8R098U0l8U08pXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgICdzZWxmJyxcbiAgICAgIFRQSUQsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLCAvKiBmb3IgcG9zIHNlY3Rpb24gYXQgYm90dG9tICovXG4gICAgICBUUExBQkVMXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdBQk9SVCBBQ0MgQURKVVNUIEFORCBBUF9MRCBCUkVBSyBDQUxMIENOVCBDT0wgQ09ORElUSU9OIENPTkZJRyBEQSBEQiAnICtcbiAgICAgICAgJ0RJViBERVRFQ1QgRUxTRSBFTkQgRU5ERk9SIEVSUl9OVU0gRVJST1JfUFJPRyBGSU5FIEZPUiBHUCBHVUFSRCBJTkMgJyArXG4gICAgICAgICdJRiBKTVAgTElORUFSX01BWF9TUEVFRCBMT0NLIE1PRCBNT05JVE9SIE9GRlNFVCBPZmZzZXQgT1IgT1ZFUlJJREUgJyArXG4gICAgICAgICdQQVVTRSBQUkVHIFBUSCBSVF9MRCBSVU4gU0VMRUNUIFNLSVAgU2tpcCBUQSBUQiBUTyBUT09MX09GRlNFVCAnICtcbiAgICAgICAgJ1Rvb2xfT2Zmc2V0IFVGIFVUIFVGUkFNRV9OVU0gVVRPT0xfTlVNIFVOTE9DSyBXQUlUIFggWSBaIFcgUCBSIFNUUkxFTiAnICtcbiAgICAgICAgJ1NVQlNUUiBGSU5EU1RSIFZPRkZTRVQgUFJPRyBBVFRSIE1OIFBPUycsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnT04gT0ZGIG1heF9zcGVlZCBMUE9TIEpQT1MgRU5BQkxFIERJU0FCTEUgU1RBUlQgU1RPUCBSRVNFVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBUUERBVEEsXG4gICAgICBUUElPLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcvKFBST0d8QVRUUnxNTnxQT1N8RU5EKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogdGhpcyBpcyBmb3IgY2FzZXMgbGlrZSAsQ0FMTCAqL1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICcoQ0FMTHxSVU58UE9JTlRfTE9HSUN8TEJMKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogdGhpcyBpcyBmb3IgY2FzZXMgbGlrZSBDTlQxMDAgd2hlcmUgdGhlIGRlZmF1bHQgbGV4ZW1lcyBkbyBub3RcbiAgICAgICAgICogc2VwYXJhdGUgdGhlIGtleXdvcmQgYW5kIHRoZSBudW1iZXIgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoQUNDfENOVHxTa2lwfE9mZnNldHxQU1BEfFJUX0xEfEFQX0xEfFRvb2xfT2Zmc2V0KSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRvIGNhdGNoIG51bWJlcnMgdGhhdCBkbyBub3QgaGF2ZSBhIHdvcmQgYm91bmRhcnkgb24gdGhlIGxlZnQgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcZCsoc2VjfG1zZWN8bW0vc2VjfGNtL21pbnxpbmNoL21pbnxkZWcvc2VjfG1tfGlufGNtKT9cXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnWzskXScpLFxuICAgICAgaGxqcy5DT01NRU5UKCchJywgJ1s7JF0nKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnLS1lZzonLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXCRbQS1aYS16MC05X10rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG5cbiAgdmFyIEZVTkNUSU9OX05BTUVTID0gJ2F0dHJpYnV0ZSBibG9jayBjb25zdGFudCBjeWNsZSBkYXRlIGR1bXAgaW5jbHVkZSAnICtcbiAgICAgICAgICAgICAgICAgICdtYXggbWluIHBhcmVudCByYW5kb20gcmFuZ2Ugc291cmNlIHRlbXBsYXRlX2Zyb21fc3RyaW5nJztcblxuICB2YXIgRlVOQ1RJT05TID0ge1xuICAgIGJlZ2luS2V5d29yZHM6IEZVTkNUSU9OX05BTUVTLFxuICAgIGtleXdvcmRzOiB7bmFtZTogRlVOQ1RJT05fTkFNRVN9LFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgUEFSQU1TXG4gICAgXVxuICB9O1xuXG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16X10rOj8vLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FicyBiYXRjaCBjYXBpdGFsaXplIGNvbHVtbiBjb252ZXJ0X2VuY29kaW5nIGRhdGUgZGF0ZV9tb2RpZnkgZGVmYXVsdCAnICtcbiAgICAgICdlc2NhcGUgZmlsdGVyIGZpcnN0IGZvcm1hdCBpbmt5X3RvX2h0bWwgaW5saW5lX2NzcyBqb2luIGpzb25fZW5jb2RlIGtleXMgbGFzdCAnICtcbiAgICAgICdsZW5ndGggbG93ZXIgbWFwIG1hcmtkb3duIG1lcmdlIG5sMmJyIG51bWJlcl9mb3JtYXQgcmF3IHJlZHVjZSByZXBsYWNlICcgK1xuICAgICAgJ3JldmVyc2Ugcm91bmQgc2xpY2Ugc29ydCBzcGFjZWxlc3Mgc3BsaXQgc3RyaXB0YWdzIHRpdGxlIHRyaW0gdXBwZXIgdXJsX2VuY29kZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEZVTkNUSU9OU1xuICAgIF1cbiAgfTtcblxuICB2YXIgVEFHUyA9ICdhcHBseSBhdXRvZXNjYXBlIGJsb2NrIGRlcHJlY2F0ZWQgZG8gZW1iZWQgZXh0ZW5kcyBmaWx0ZXIgZmx1c2ggZm9yIGZyb20gJyArXG4gICAgJ2lmIGltcG9ydCBpbmNsdWRlIG1hY3JvIHNhbmRib3ggc2V0IHVzZSB2ZXJiYXRpbSB3aXRoJztcblxuICBUQUdTID0gVEFHUyArICcgJyArIFRBR1Muc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICdlbmQnICsgdH0pLmpvaW4oJyAnKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3JhZnRjbXMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3JkczogVEFHUyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtGSUxURVIsIEZVTkNUSU9OU10sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xcey8sIGVuZDogL319LyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIEZJTFRFUiwgRlVOQ1RJT05TXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdpbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggJyArXG4gICAgICAnaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSAnICtcbiAgICAgICdsZXQgeWllbGQgY29uc3QgY2xhc3MgcHVibGljIHByaXZhdGUgcHJvdGVjdGVkIGdldCBzZXQgc3VwZXIgJyArXG4gICAgICAnc3RhdGljIGltcGxlbWVudHMgZW51bSBleHBvcnQgaW1wb3J0IGRlY2xhcmUgdHlwZSBuYW1lc3BhY2UgYWJzdHJhY3QgJyArXG4gICAgICAnYXMgZnJvbSBleHRlbmRzIGFzeW5jIGF3YWl0JyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5JyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdldmFsIGlzRmluaXRlIGlzTmFOIHBhcnNlRmxvYXQgcGFyc2VJbnQgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCAnICtcbiAgICAgICdlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciAnICtcbiAgICAgICdFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgJyArXG4gICAgICAnVHlwZUVycm9yIFVSSUVycm9yIE51bWJlciBNYXRoIERhdGUgU3RyaW5nIFJlZ0V4cCBBcnJheSBGbG9hdDMyQXJyYXkgJyArXG4gICAgICAnRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgJyArXG4gICAgICAnVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgJyArXG4gICAgICAnbW9kdWxlIGNvbnNvbGUgd2luZG93IGRvY3VtZW50IGFueSBudW1iZXIgYm9vbGVhbiBzdHJpbmcgdm9pZCBQcm9taXNlJ1xuICB9O1xuXG4gIHZhciBERUNPUkFUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIEpTX0lERU5UX1JFLFxuICB9O1xuXG4gIHZhciBBUkdTID1cbiAge1xuICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIERFQ09SQVRPUixcbiAgICAgIEFSR1NcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspbj8nIH0sXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMFtvT11bMC03XSspbj8nIH0sXG4gICAgICB7IGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFICsgJ24/JyB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXSAgLy8gZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgSFRNTF9URU1QTEFURSA9IHtcbiAgICBiZWdpbjogJ2h0bWxgJywgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLCByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICB9XG4gIH07XG4gIHZhciBDU1NfVEVNUExBVEUgPSB7XG4gICAgYmVnaW46ICdjc3NgJywgZW5kOiAnJyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJ2AnLCByZXR1cm5FbmQ6IGZhbHNlLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICBTVUJTVFxuICAgICAgXSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnY3NzJyxcbiAgICB9XG4gIH07XG4gIHZhciBURU1QTEFURV9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgU1VCU1RcbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIEhUTUxfVEVNUExBVEUsXG4gICAgQ1NTX1RFTVBMQVRFLFxuICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICBOVU1CRVIsXG4gICAgaGxqcy5SRUdFWFBfTU9ERVxuICBdO1xuXG5cblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndHMnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSBzdHJpY3RbJ1wiXS9cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgSFRNTF9URU1QTEFURSxcbiAgICAgIENTU19URU1QTEFURSxcbiAgICAgIFRFTVBMQVRFX1NUUklORyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVIsXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgaGxqcy5JREVOVF9SRSArICcpXFxcXHMqPT4nLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogL1tcXHs7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwgeyBiZWdpbjogSlNfSURFTlRfUkUgfSksXG4gICAgICAgICAgUEFSQU1TXG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC8lLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwIC8vICgpID0+IHt9IGlzIG1vcmUgdHlwaWNhbCBpbiBUeXBlU2NyaXB0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29uc3RydWN0b3InLCBlbmQ6IC9bXFx7O10vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICBQQVJBTVNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgLy8gcHJldmVudCByZWZlcmVuY2VzIGxpa2UgbW9kdWxlLmlkIGZyb20gYmVpbmcgaGlnbGlnaHRlZCBhcyBtb2R1bGUgZGVmaW5pdGlvbnNcbiAgICAgICAgYmVnaW46IC9tb2R1bGVcXC4vLFxuICAgICAgICBrZXl3b3JkczogeyBidWlsdF9pbjogJ21vZHVsZScgfSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbW9kdWxlJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ludGVyZmFjZScsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAnaW50ZXJmYWNlIGV4dGVuZHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcJFsoLl0vIC8vIHJlbGV2YW5jZSBib29zdGVyIGZvciBhIHBhdHRlcm4gY29tbW9uIHRvIEpTIGxpYnM6IGAkKHNvbWV0aGluZylgIGFuZCBgJC5zb21ldGhpbmdgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwuJyArIGhsanMuSURFTlRfUkUsIHJlbGV2YW5jZTogMCAvLyBoYWNrOiBwcmV2ZW50cyBkZXRlY3Rpb24gb2Yga2V5d29yZHMgYWZ0ZXIgZG90c1xuICAgICAgfSxcbiAgICAgIERFQ09SQVRPUixcbiAgICAgIEFSR1NcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBWYWx1ZSB0eXBlc1xuICAgICAgICAnY2hhciB1Y2hhciB1bmljaGFyIGludCB1aW50IGxvbmcgdWxvbmcgc2hvcnQgdXNob3J0IGludDggaW50MTYgaW50MzIgaW50NjQgdWludDggJyArXG4gICAgICAgICd1aW50MTYgdWludDMyIHVpbnQ2NCBmbG9hdCBkb3VibGUgYm9vbCBzdHJ1Y3QgZW51bSBzdHJpbmcgdm9pZCAnICtcbiAgICAgICAgLy8gUmVmZXJlbmNlIHR5cGVzXG4gICAgICAgICd3ZWFrIHVub3duZWQgb3duZWQgJyArXG4gICAgICAgIC8vIE1vZGlmaWVyc1xuICAgICAgICAnYXN5bmMgc2lnbmFsIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2Ugb3ZlcnJpZGUgdmlydHVhbCBkZWxlZ2F0ZSAnICtcbiAgICAgICAgLy8gQ29udHJvbCBTdHJ1Y3R1cmVzXG4gICAgICAgICdpZiB3aGlsZSBkbyBmb3IgZm9yZWFjaCBlbHNlIHN3aXRjaCBjYXNlIGJyZWFrIGRlZmF1bHQgcmV0dXJuIHRyeSBjYXRjaCAnICtcbiAgICAgICAgLy8gVmlzaWJpbGl0eVxuICAgICAgICAncHVibGljIHByaXZhdGUgcHJvdGVjdGVkIGludGVybmFsICcgK1xuICAgICAgICAvLyBPdGhlclxuICAgICAgICAndXNpbmcgbmV3IHRoaXMgZ2V0IHNldCBjb25zdCBzdGRvdXQgc3RkaW4gc3RkZXJyIHZhcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ0RCdXMgR0xpYiBDQ29kZSBHZWUgT2JqZWN0IEd0ayBQb3NpeCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnZmFsc2UgdHJ1ZSBudWxsJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlIG5hbWVzcGFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnW14sOlxcXFxuXFxcXHNcXFxcLl0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ14jJywgZW5kOiAnJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd2YiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhZGRoYW5kbGVyIGFkZHJlc3NvZiBhbGlhcyBhbmQgYW5kYWxzbyBhZ2dyZWdhdGUgYW5zaSBhcyBhc3luYyBhc3NlbWJseSBhdXRvIGF3YWl0IGJpbmFyeSBieSBieXJlZiBieXZhbCAnICsgLyogYS1iICovXG4gICAgICAgICdjYWxsIGNhc2UgY2F0Y2ggY2xhc3MgY29tcGFyZSBjb25zdCBjb250aW51ZSBjdXN0b20gZGVjbGFyZSBkZWZhdWx0IGRlbGVnYXRlIGRpbSBkaXN0aW5jdCBkbyAnICsgLyogYy1kICovXG4gICAgICAgICdlYWNoIGVxdWFscyBlbHNlIGVsc2VpZiBlbmQgZW51bSBlcmFzZSBlcnJvciBldmVudCBleGl0IGV4cGxpY2l0IGZpbmFsbHkgZm9yIGZyaWVuZCBmcm9tIGZ1bmN0aW9uICcgKyAvKiBlLWYgKi9cbiAgICAgICAgJ2dldCBnbG9iYWwgZ290byBncm91cCBoYW5kbGVzIGlmIGltcGxlbWVudHMgaW1wb3J0cyBpbiBpbmhlcml0cyBpbnRlcmZhY2UgaW50byBpcyBpc2ZhbHNlIGlzbm90IGlzdHJ1ZSBpdGVyYXRvciAnICsgLyogZy1pICovXG4gICAgICAgICdqb2luIGtleSBsZXQgbGliIGxpa2UgbG9vcCBtZSBtaWQgbW9kIG1vZHVsZSBtdXN0aW5oZXJpdCBtdXN0b3ZlcnJpZGUgbXliYXNlIG15Y2xhc3MgJyArIC8qIGotbSAqL1xuICAgICAgICAnbmFtZW9mIG5hbWVzcGFjZSBuYXJyb3dpbmcgbmV3IG5leHQgbm90IG5vdGluaGVyaXRhYmxlIG5vdG92ZXJyaWRhYmxlICcgKyAvKiBuICovXG4gICAgICAgICdvZiBvZmYgb24gb3BlcmF0b3Igb3B0aW9uIG9wdGlvbmFsIG9yIG9yZGVyIG9yZWxzZSBvdmVybG9hZHMgb3ZlcnJpZGFibGUgb3ZlcnJpZGVzICcgKyAvKiBvICovXG4gICAgICAgICdwYXJhbWFycmF5IHBhcnRpYWwgcHJlc2VydmUgcHJpdmF0ZSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVibGljICcgKyAvKiBwICovXG4gICAgICAgICdyYWlzZWV2ZW50IHJlYWRvbmx5IHJlZGltIHJlbSByZW1vdmVoYW5kbGVyIHJlc3VtZSByZXR1cm4gJyArIC8qIHIgKi9cbiAgICAgICAgJ3NlbGVjdCBzZXQgc2hhZG93cyBzaGFyZWQgc2tpcCBzdGF0aWMgc3RlcCBzdG9wIHN0cnVjdHVyZSBzdHJpY3Qgc3ViIHN5bmNsb2NrICcgKyAvKiBzICovXG4gICAgICAgICd0YWtlIHRleHQgdGhlbiB0aHJvdyB0byB0cnkgdW5pY29kZSB1bnRpbCB1c2luZyB3aGVuIHdoZXJlIHdoaWxlIHdpZGVuaW5nIHdpdGggd2l0aGV2ZW50cyB3cml0ZW9ubHkgeG9yIHlpZWxkJywgLyogdC15ICovXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2Jvb2xlYW4gYnl0ZSBjYm9vbCBjYnl0ZSBjY2hhciBjZGF0ZSBjZGVjIGNkYmwgY2hhciBjaW50IGNsbmcgY29iaiBjc2J5dGUgY3Nob3J0IGNzbmcgY3N0ciBjdHlwZSAnICsgIC8qIGItYyAqL1xuICAgICAgICAnZGF0ZSBkZWNpbWFsIGRpcmVjdGNhc3QgZG91YmxlIGdldHR5cGUgZ2V0eG1sbmFtZXNwYWNlIGlpZiBpbnRlZ2VyIGxvbmcgb2JqZWN0ICcgKyAvKiBkLW8gKi9cbiAgICAgICAgJ3NieXRlIHNob3J0IHNpbmdsZSBzdHJpbmcgdHJ5Y2FzdCB0eXBlb2YgdWludGVnZXIgdWxvbmcgdXNob3J0JywgLyogcy11ICovXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBub3RoaW5nJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogJy8vfHt8fXxlbmRpZnxnb3N1Ynx2YXJpYW50fHdlbmR8XlxcXFwkICcsIC8qIHJlc2VydmVkIGRlcHJlY2F0ZWQga2V5d29yZHMgKi9cbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjb250YWluczogW3tiZWdpbjogJ1wiXCInfV19KSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcJycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnfDwhLS18LS0+JyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlBIUkFTQUxfV09SRFNfTU9ERV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnPC8/JywgZW5kOiAnPicsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5QSFJBU0FMX1dPUkRTX01PREVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmQgcmVnaW9uIGV4dGVybmFsc291cmNlJ31cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndmJzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2NhbGwgY2xhc3MgY29uc3QgZGltIGRvIGxvb3AgZXJhc2UgZXhlY3V0ZSBleGVjdXRlZ2xvYmFsIGV4aXQgZm9yIGVhY2ggbmV4dCBmdW5jdGlvbiAnICtcbiAgICAgICAgJ2lmIHRoZW4gZWxzZSBvbiBlcnJvciBvcHRpb24gZXhwbGljaXQgbmV3IHByaXZhdGUgcHJvcGVydHkgbGV0IGdldCBwdWJsaWMgcmFuZG9taXplICcgK1xuICAgICAgICAncmVkaW0gcmVtIHNlbGVjdCBjYXNlIHNldCBzdG9wIHN1YiB3aGlsZSB3ZW5kIHdpdGggZW5kIHRvIGVsc2VpZiBpcyBvciB4b3IgYW5kIG5vdCAnICtcbiAgICAgICAgJ2NsYXNzX2luaXRpYWxpemUgY2xhc3NfdGVybWluYXRlIGRlZmF1bHQgcHJlc2VydmUgaW4gbWUgYnl2YWwgYnlyZWYgc3RlcCByZXN1bWUgZ290bycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2xjYXNlIG1vbnRoIHZhcnR5cGUgaW5zdHJyZXYgdWJvdW5kIHNldGxvY2FsZSBnZXRvYmplY3QgcmdiIGdldHJlZiBzdHJpbmcgJyArXG4gICAgICAgICd3ZWVrZGF5bmFtZSBybmQgZGF0ZWFkZCBtb250aG5hbWUgbm93IGRheSBtaW51dGUgaXNhcnJheSBjYm9vbCByb3VuZCBmb3JtYXRjdXJyZW5jeSAnICtcbiAgICAgICAgJ2NvbnZlcnNpb25zIGNzbmcgdGltZXZhbHVlIHNlY29uZCB5ZWFyIHNwYWNlIGFicyBjbG5nIHRpbWVzZXJpYWwgZml4cyBsZW4gYXNjICcgK1xuICAgICAgICAnaXNlbXB0eSBtYXRocyBkYXRlc2VyaWFsIGF0biB0aW1lciBpc29iamVjdCBmaWx0ZXIgd2Vla2RheSBkYXRldmFsdWUgY2N1ciBpc2RhdGUgJyArXG4gICAgICAgICdpbnN0ciBkYXRlZGlmZiBmb3JtYXRkYXRldGltZSByZXBsYWNlIGlzbnVsbCByaWdodCBzZ24gYXJyYXkgc251bWVyaWMgbG9nIGNkYmwgaGV4ICcgK1xuICAgICAgICAnY2hyIGxib3VuZCBtc2dib3ggdWNhc2UgZ2V0bG9jYWxlIGNvcyBjZGF0ZSBjYnl0ZSBydHJpbSBqb2luIGhvdXIgb2N0IHR5cGVuYW1lIHRyaW0gJyArXG4gICAgICAgICdzdHJjb21wIGludCBjcmVhdGVvYmplY3QgbG9hZHBpY3R1cmUgdGFuIGZvcm1hdG51bWJlciBtaWQgc2NyaXB0ZW5naW5lYnVpbGR2ZXJzaW9uICcgK1xuICAgICAgICAnc2NyaXB0ZW5naW5lIHNwbGl0IHNjcmlwdGVuZ2luZW1pbm9ydmVyc2lvbiBjaW50IHNpbiBkYXRlcGFydCBsdHJpbSBzcXIgJyArXG4gICAgICAgICdzY3JpcHRlbmdpbmVtYWpvcnZlcnNpb24gdGltZSBkZXJpdmVkIGV2YWwgZGF0ZSBmb3JtYXRwZXJjZW50IGV4cCBpbnB1dGJveCBsZWZ0IGFzY3cgJyArXG4gICAgICAgICdjaHJ3IHJlZ2V4cCBzZXJ2ZXIgcmVzcG9uc2UgcmVxdWVzdCBjc3RyIGVycicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBudWxsIG5vdGhpbmcgZW1wdHknXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnLy8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XX0pLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAvJy8sXG4gICAgICAgIC8kLyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc8JScsIGVuZDogJyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICd2YnNjcmlwdCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1ZfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhY2NlcHRfb24gYWxpYXMgYWx3YXlzIGFsd2F5c19jb21iIGFsd2F5c19mZiBhbHdheXNfbGF0Y2ggYW5kIGFzc2VydCBhc3NpZ24gJyArXG4gICAgICAnYXNzdW1lIGF1dG9tYXRpYyBiZWZvcmUgYmVnaW4gYmluZCBiaW5zIGJpbnNvZiBiaXQgYnJlYWsgYnVmfDAgYnVmaWYwIGJ1ZmlmMSAnICtcbiAgICAgICdieXRlIGNhc2UgY2FzZXggY2FzZXogY2VsbCBjaGFuZGxlIGNoZWNrZXIgY2xhc3MgY2xvY2tpbmcgY21vcyBjb25maWcgY29uc3QgJyArXG4gICAgICAnY29uc3RyYWludCBjb250ZXh0IGNvbnRpbnVlIGNvdmVyIGNvdmVyZ3JvdXAgY292ZXJwb2ludCBjcm9zcyBkZWFzc2lnbiBkZWZhdWx0ICcgK1xuICAgICAgJ2RlZnBhcmFtIGRlc2lnbiBkaXNhYmxlIGRpc3QgZG8gZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNoZWNrZXIgZW5kY2xhc3MgJyArXG4gICAgICAnZW5kY2xvY2tpbmcgZW5kY29uZmlnIGVuZGZ1bmN0aW9uIGVuZGdlbmVyYXRlIGVuZGdyb3VwIGVuZGludGVyZmFjZSBlbmRtb2R1bGUgJyArXG4gICAgICAnZW5kcGFja2FnZSBlbmRwcmltaXRpdmUgZW5kcHJvZ3JhbSBlbmRwcm9wZXJ0eSBlbmRzcGVjaWZ5IGVuZHNlcXVlbmNlIGVuZHRhYmxlICcgK1xuICAgICAgJ2VuZHRhc2sgZW51bSBldmVudCBldmVudHVhbGx5IGV4cGVjdCBleHBvcnQgZXh0ZW5kcyBleHRlcm4gZmluYWwgZmlyc3RfbWF0Y2ggZm9yICcgK1xuICAgICAgJ2ZvcmNlIGZvcmVhY2ggZm9yZXZlciBmb3JrIGZvcmtqb2luIGZ1bmN0aW9uIGdlbmVyYXRlfDUgZ2VudmFyIGdsb2JhbCBoaWdoejAgaGlnaHoxICcgK1xuICAgICAgJ2lmIGlmZiBpZm5vbmUgaWdub3JlX2JpbnMgaWxsZWdhbF9iaW5zIGltcGxlbWVudHMgaW1wbGllcyBpbXBvcnQgaW5jZGlyIGluY2x1ZGUgJyArXG4gICAgICAnaW5pdGlhbCBpbm91dCBpbnB1dCBpbnNpZGUgaW5zdGFuY2UgaW50IGludGVnZXIgaW50ZXJjb25uZWN0IGludGVyZmFjZSBpbnRlcnNlY3QgJyArXG4gICAgICAnam9pbiBqb2luX2FueSBqb2luX25vbmUgbGFyZ2UgbGV0IGxpYmxpc3QgbGlicmFyeSBsb2NhbCBsb2NhbHBhcmFtIGxvZ2ljIGxvbmdpbnQgJyArXG4gICAgICAnbWFjcm9tb2R1bGUgbWF0Y2hlcyBtZWRpdW0gbW9kcG9ydCBtb2R1bGUgbmFuZCBuZWdlZGdlIG5ldHR5cGUgbmV3IG5leHR0aW1lIG5tb3MgJyArXG4gICAgICAnbm9yIG5vc2hvd2NhbmNlbGxlZCBub3Qgbm90aWYwIG5vdGlmMSBvciBvdXRwdXQgcGFja2FnZSBwYWNrZWQgcGFyYW1ldGVyIHBtb3MgJyArXG4gICAgICAncG9zZWRnZSBwcmltaXRpdmUgcHJpb3JpdHkgcHJvZ3JhbSBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVsbDAgcHVsbDEgcHVsbGRvd24gcHVsbHVwICcgK1xuICAgICAgJ3B1bHNlc3R5bGVfb25kZXRlY3QgcHVsc2VzdHlsZV9vbmV2ZW50IHB1cmUgcmFuZCByYW5kYyByYW5kY2FzZSByYW5kc2VxdWVuY2UgcmNtb3MgJyArXG4gICAgICAncmVhbCByZWFsdGltZSByZWYgcmVnIHJlamVjdF9vbiByZWxlYXNlIHJlcGVhdCByZXN0cmljdCByZXR1cm4gcm5tb3MgcnBtb3MgcnRyYW4gJyArXG4gICAgICAncnRyYW5pZjAgcnRyYW5pZjEgc19hbHdheXMgc19ldmVudHVhbGx5IHNfbmV4dHRpbWUgc191bnRpbCBzX3VudGlsX3dpdGggc2NhbGFyZWQgJyArXG4gICAgICAnc2VxdWVuY2Ugc2hvcnRpbnQgc2hvcnRyZWFsIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNvZnQgc29sdmUgc3BlY2lmeSBzcGVjcGFyYW0gJyArXG4gICAgICAnc3RhdGljIHN0cmluZyBzdHJvbmcgc3Ryb25nMCBzdHJvbmcxIHN0cnVjdCBzdXBlciBzdXBwbHkwIHN1cHBseTEgc3luY19hY2NlcHRfb24gJyArXG4gICAgICAnc3luY19yZWplY3Rfb24gdGFibGUgdGFnZ2VkIHRhc2sgdGhpcyB0aHJvdWdob3V0IHRpbWUgdGltZXByZWNpc2lvbiB0aW1ldW5pdCB0cmFuICcgK1xuICAgICAgJ3RyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciB0cmlyZWcgdHlwZSB0eXBlZGVmIHVuaW9uIHVuaXF1ZSB1bmlxdWUwICcgK1xuICAgICAgJ3Vuc2lnbmVkIHVudGlsIHVudGlsX3dpdGggdW50eXBlZCB1c2UgdXdpcmUgdmFyIHZlY3RvcmVkIHZpcnR1YWwgdm9pZCB3YWl0IHdhaXRfb3JkZXIgJyArXG4gICAgICAnd2FuZCB3ZWFrIHdlYWswIHdlYWsxIHdoaWxlIHdpbGRjYXJkIHdpcmUgd2l0aCB3aXRoaW4gd29yIHhub3IgeG9yJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ251bGwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJyRmaW5pc2ggJHN0b3AgJGV4aXQgJGZhdGFsICRlcnJvciAkd2FybmluZyAkaW5mbyAkcmVhbHRpbWUgJHRpbWUgJHByaW50dGltZXNjYWxlICcgK1xuICAgICAgJyRiaXRzdG9yZWFsICRiaXRzdG9zaG9ydHJlYWwgJGl0b3IgJHNpZ25lZCAkY2FzdCAkYml0cyAkc3RpbWUgJHRpbWVmb3JtYXQgJyArXG4gICAgICAnJHJlYWx0b2JpdHMgJHNob3J0cmVhbHRvYml0cyAkcnRvaSAkdW5zaWduZWQgJGFzc2VydG9uICRhc3NlcnRraWxsICRhc3NlcnRwYXNzb24gJyArXG4gICAgICAnJGFzc2VydGZhaWxvbiAkYXNzZXJ0bm9udmFjdW91c29uICRhc3NlcnRvZmYgJGFzc2VydGNvbnRyb2wgJGFzc2VydHBhc3NvZmYgJyArXG4gICAgICAnJGFzc2VydGZhaWxvZmYgJGFzc2VydHZhY3VvdXNvZmYgJGlzdW5ib3VuZGVkICRzYW1wbGVkICRmZWxsICRjaGFuZ2VkICRwYXN0X2djbGsgJyArXG4gICAgICAnJGZlbGxfZ2NsayAkY2hhbmdlZF9nY2xrICRyaXNpbmdfZ2NsayAkc3RlYWR5X2djbGsgJGNvdmVyYWdlX2NvbnRyb2wgJyArXG4gICAgICAnJGNvdmVyYWdlX2dldCAkY292ZXJhZ2Vfc2F2ZSAkc2V0X2NvdmVyYWdlX2RiX25hbWUgJHJvc2UgJHN0YWJsZSAkcGFzdCAnICtcbiAgICAgICckcm9zZV9nY2xrICRzdGFibGVfZ2NsayAkZnV0dXJlX2djbGsgJGZhbGxpbmdfZ2NsayAkY2hhbmdpbmdfZ2NsayAkZGlzcGxheSAnICtcbiAgICAgICckY292ZXJhZ2VfZ2V0X21heCAkY292ZXJhZ2VfbWVyZ2UgJGdldF9jb3ZlcmFnZSAkbG9hZF9jb3ZlcmFnZV9kYiAkdHlwZW5hbWUgJyArXG4gICAgICAnJHVucGFja2VkX2RpbWVuc2lvbnMgJGxlZnQgJGxvdyAkaW5jcmVtZW50ICRjbG9nMiAkbG4gJGxvZzEwICRleHAgJHNxcnQgJHBvdyAnICtcbiAgICAgICckZmxvb3IgJGNlaWwgJHNpbiAkY29zICR0YW4gJGNvdW50Yml0cyAkb25laG90ICRpc3Vua25vd24gJGZhdGFsICR3YXJuaW5nICcgK1xuICAgICAgJyRkaW1lbnNpb25zICRyaWdodCAkaGlnaCAkc2l6ZSAkYXNpbiAkYWNvcyAkYXRhbiAkYXRhbjIgJGh5cG90ICRzaW5oICRjb3NoICcgK1xuICAgICAgJyR0YW5oICRhc2luaCAkYWNvc2ggJGF0YW5oICRjb3VudG9uZXMgJG9uZWhvdDAgJGVycm9yICRpbmZvICRyYW5kb20gJyArXG4gICAgICAnJGRpc3RfY2hpX3NxdWFyZSAkZGlzdF9lcmxhbmcgJGRpc3RfZXhwb25lbnRpYWwgJGRpc3Rfbm9ybWFsICRkaXN0X3BvaXNzb24gJyArXG4gICAgICAnJGRpc3RfdCAkZGlzdF91bmlmb3JtICRxX2luaXRpYWxpemUgJHFfcmVtb3ZlICRxX2V4YW0gJGFzeW5jJGFuZCRhcnJheSAnICtcbiAgICAgICckYXN5bmMkbmFuZCRhcnJheSAkYXN5bmMkb3IkYXJyYXkgJGFzeW5jJG5vciRhcnJheSAkc3luYyRhbmQkYXJyYXkgJyArXG4gICAgICAnJHN5bmMkbmFuZCRhcnJheSAkc3luYyRvciRhcnJheSAkc3luYyRub3IkYXJyYXkgJHFfYWRkICRxX2Z1bGwgJHBzcHJpbnRmICcgK1xuICAgICAgJyRhc3luYyRhbmQkcGxhbmUgJGFzeW5jJG5hbmQkcGxhbmUgJGFzeW5jJG9yJHBsYW5lICRhc3luYyRub3IkcGxhbmUgJyArXG4gICAgICAnJHN5bmMkYW5kJHBsYW5lICRzeW5jJG5hbmQkcGxhbmUgJHN5bmMkb3IkcGxhbmUgJHN5bmMkbm9yJHBsYW5lICRzeXN0ZW0gJyArXG4gICAgICAnJGRpc3BsYXkgJGRpc3BsYXliICRkaXNwbGF5aCAkZGlzcGxheW8gJHN0cm9iZSAkc3Ryb2JlYiAkc3Ryb2JlaCAkc3Ryb2JlbyAnICtcbiAgICAgICckd3JpdGUgJHJlYWRtZW1iICRyZWFkbWVtaCAkd3JpdGVtZW1oICR2YWx1ZSRwbHVzYXJncyAnICtcbiAgICAgICckZHVtcHZhcnMgJGR1bXBvbiAkZHVtcGxpbWl0ICRkdW1wcG9ydHMgJGR1bXBwb3J0c29uICRkdW1wcG9ydHNsaW1pdCAnICtcbiAgICAgICckd3JpdGViICR3cml0ZWggJHdyaXRlbyAkbW9uaXRvciAkbW9uaXRvcmIgJG1vbml0b3JoICRtb25pdG9ybyAkd3JpdGVtZW1iICcgK1xuICAgICAgJyRkdW1wZmlsZSAkZHVtcG9mZiAkZHVtcGFsbCAkZHVtcGZsdXNoICRkdW1wcG9ydHNvZmYgJGR1bXBwb3J0c2FsbCAnICtcbiAgICAgICckZHVtcHBvcnRzZmx1c2ggJGZjbG9zZSAkZmRpc3BsYXkgJGZkaXNwbGF5YiAkZmRpc3BsYXloICRmZGlzcGxheW8gJyArXG4gICAgICAnJGZzdHJvYmUgJGZzdHJvYmViICRmc3Ryb2JlaCAkZnN0cm9iZW8gJHN3cml0ZSAkc3dyaXRlYiAkc3dyaXRlaCAnICtcbiAgICAgICckc3dyaXRlbyAkZnNjYW5mICRmcmVhZCAkZnNlZWsgJGZmbHVzaCAkZmVvZiAkZm9wZW4gJGZ3cml0ZSAkZndyaXRlYiAnICtcbiAgICAgICckZndyaXRlaCAkZndyaXRlbyAkZm1vbml0b3IgJGZtb25pdG9yYiAkZm1vbml0b3JoICRmbW9uaXRvcm8gJHNmb3JtYXQgJyArXG4gICAgICAnJHNmb3JtYXRmICRmZ2V0YyAkdW5nZXRjICRmZ2V0cyAkc3NjYW5mICRyZXdpbmQgJGZ0ZWxsICRmZXJyb3InXG4gICAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3YnLCAnc3YnLCAnc3ZoJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IFNWX0tFWVdPUkRTLCBsZXhlbWVzOiAvW1xcd1xcJF0rLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdcXFxcYigoXFxcXGQrXFwnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspJ30sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXEIoKFxcJyhifGh8b3xkfEJ8SHxPfEQpKVswLTl4elhaYS1mQS1GX10rKSd9LFxuICAgICAgICAgIHtiZWdpbjogJ1xcXFxiKFswLTlfXSkrJywgcmVsZXZhbmNlOiAwfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLyogcGFyYW1ldGVycyB0byBpbnN0YW5jZXMgKi9cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJyNcXFxcKCg/IXBhcmFtZXRlcikuK1xcXFwpJ30sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXC5cXFxcdysnLCByZWxldmFuY2U6IDB9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdkZWZpbmUgX19GSUxFX18gJyArXG4gICAgICAgICAgJ19fTElORV9fIGJlZ2luX2tleXdvcmRzIGNlbGxkZWZpbmUgZGVmYXVsdF9uZXR0eXBlIGRlZmluZSAnICtcbiAgICAgICAgICAnZWxzZSBlbHNpZiBlbmRfa2V5d29yZHMgZW5kY2VsbGRlZmluZSBlbmRpZiBpZmRlZiBpZm5kZWYgJyArXG4gICAgICAgICAgJ2luY2x1ZGUgbGluZSBub3VuY29ubmVjdGVkX2RyaXZlIHByYWdtYSByZXNldGFsbCB0aW1lc2NhbGUgJyArXG4gICAgICAgICAgJ3VuY29ubmVjdGVkX2RyaXZlIHVuZGVmIHVuZGVmaW5lYWxsJ30sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTsgLy8gcmV0dXJuXG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gZm9yIFZIREwgbnVtZXJpYyBsaXRlcmFscy5cblxuICAvLyBEZWNpbWFsIGxpdGVyYWw6XG4gIHZhciBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gIHZhciBFWFBPTkVOVF9SRSA9ICdbZUVdWy0rXT8nICsgSU5URUdFUl9SRTtcbiAgdmFyIERFQ0lNQUxfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnKFxcXFwuJyArIElOVEVHRVJfUkUgKyAnKT8nICsgJygnICsgRVhQT05FTlRfUkUgKyAnKT8nO1xuICAvLyBCYXNlZCBsaXRlcmFsOlxuICB2YXIgQkFTRURfSU5URUdFUl9SRSA9ICdcXFxcdysnO1xuICB2YXIgQkFTRURfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnIycgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyhcXFxcLicgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyk/JyArICcjJyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICB2YXIgTlVNQkVSX1JFID0gJ1xcXFxiKCcgKyBCQVNFRF9MSVRFUkFMX1JFICsgJ3wnICsgREVDSU1BTF9MSVRFUkFMX1JFICsgJyknO1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FicyBhY2Nlc3MgYWZ0ZXIgYWxpYXMgYWxsIGFuZCBhcmNoaXRlY3R1cmUgYXJyYXkgYXNzZXJ0IGFzc3VtZSBhc3N1bWVfZ3VhcmFudGVlIGF0dHJpYnV0ZSAnICtcbiAgICAgICAgJ2JlZ2luIGJsb2NrIGJvZHkgYnVmZmVyIGJ1cyBjYXNlIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIGNvbnN0YW50IGNvbnRleHQgY292ZXIgZGlzY29ubmVjdCAnICtcbiAgICAgICAgJ2Rvd250byBkZWZhdWx0IGVsc2UgZWxzaWYgZW5kIGVudGl0eSBleGl0IGZhaXJuZXNzIGZpbGUgZm9yIGZvcmNlIGZ1bmN0aW9uIGdlbmVyYXRlICcgK1xuICAgICAgICAnZ2VuZXJpYyBncm91cCBndWFyZGVkIGlmIGltcHVyZSBpbiBpbmVydGlhbCBpbm91dCBpcyBsYWJlbCBsaWJyYXJ5IGxpbmthZ2UgbGl0ZXJhbCAnICtcbiAgICAgICAgJ2xvb3AgbWFwIG1vZCBuYW5kIG5ldyBuZXh0IG5vciBub3QgbnVsbCBvZiBvbiBvcGVuIG9yIG90aGVycyBvdXQgcGFja2FnZSBwYXJhbWV0ZXIgcG9ydCAnICtcbiAgICAgICAgJ3Bvc3Rwb25lZCBwcm9jZWR1cmUgcHJvY2VzcyBwcm9wZXJ0eSBwcm90ZWN0ZWQgcHVyZSByYW5nZSByZWNvcmQgcmVnaXN0ZXIgcmVqZWN0ICcgK1xuICAgICAgICAncmVsZWFzZSByZW0gcmVwb3J0IHJlc3RyaWN0IHJlc3RyaWN0X2d1YXJhbnRlZSByZXR1cm4gcm9sIHJvciBzZWxlY3Qgc2VxdWVuY2UgJyArXG4gICAgICAgICdzZXZlcml0eSBzaGFyZWQgc2lnbmFsIHNsYSBzbGwgc3JhIHNybCBzdHJvbmcgc3VidHlwZSB0aGVuIHRvIHRyYW5zcG9ydCB0eXBlICcgK1xuICAgICAgICAndW5hZmZlY3RlZCB1bml0cyB1bnRpbCB1c2UgdmFyaWFibGUgdmlldyB2bW9kZSB2cHJvcCB2dW5pdCB3YWl0IHdoZW4gd2hpbGUgd2l0aCB4bm9yIHhvcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2Jvb2xlYW4gYml0IGNoYXJhY3RlciAnICtcbiAgICAgICAgJ2ludGVnZXIgdGltZSBkZWxheV9sZW5ndGggbmF0dXJhbCBwb3NpdGl2ZSAnICtcbiAgICAgICAgJ3N0cmluZyBiaXRfdmVjdG9yIGZpbGVfb3Blbl9raW5kIGZpbGVfb3Blbl9zdGF0dXMgJyArXG4gICAgICAgICdzdGRfbG9naWMgc3RkX2xvZ2ljX3ZlY3RvciB1bnNpZ25lZCBzaWduZWQgYm9vbGVhbl92ZWN0b3IgaW50ZWdlcl92ZWN0b3IgJyArXG4gICAgICAgICdzdGRfdWxvZ2ljIHN0ZF91bG9naWNfdmVjdG9yIHVucmVzb2x2ZWRfdW5zaWduZWQgdV91bnNpZ25lZCB1bnJlc29sdmVkX3NpZ25lZCB1X3NpZ25lZCAnICtcbiAgICAgICAgJ3JlYWxfdmVjdG9yIHRpbWVfdmVjdG9yJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdmYWxzZSB0cnVlIG5vdGUgd2FybmluZyBlcnJvciBmYWlsdXJlICcgKyAgLy8gc2V2ZXJpdHlfbGV2ZWxcbiAgICAgICAgJ2xpbmUgdGV4dCBzaWRlIHdpZHRoJyAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0aW9cbiAgICB9LFxuICAgIGlsbGVnYWw6ICd7JyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwgICAgICAvLyBWSERMLTIwMDggYmxvY2sgY29tbWVudGluZy5cbiAgICAgIGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IE5VTUJFUl9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJyhVfFh8MHwxfFp8V3xMfEh8LSlcXCcnLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXFwnW0EtWmEtel0oXz9bQS1aYS16MC05XSkqJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBsZXhlbWVzOiAvWyEjQFxcd10rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgLy8gZXhwcmVzcyB2ZXJzaW9uIGV4Y2VwdDogISAmICogPCA9ID4gISEgIyBAIEBAXG4gICAgICAgICdOfDAgUHwwIFh8MCBhfDAgYWIgYWJjIGFibyBhbCBhbSBhbnwwIGFyIGFyZ2EgYXJnZCBhcmdlIGFyZ2RvIGFyZ2cgYXJnbCBhcmd1IGFzIGF1IGF1ZyBhdW4gYnwwIGJOIGJhIGJhZCBiZCBiZSBiZWwgYmYgYmwgYm0gYm4gYm8gYnAgYnIgYnJlYSBicmVha2EgYnJlYWtkIGJyZWFrbCBicm8gYnVmZG8gYnVmZmVycyBidW4gYncgY3wwIGNOIGNOZiBjYSBjYWJjIGNhZGRiIGNhZCBjYWRkZiBjYWwgY2F0IGNiIGNjIGNjbCBjZCBjZSBjZXggY2YgY2ZpciBjZ2V0YiBjZ2V0ZSBjZyBjaGFuZ2VzIGNoZCBjaGUgY2hlY2t0IGNsIGNsYSBjbG8gY20gY21hcGMgY21lIGNuIGNuZXcgY25mIGNubyBjbm9yZWEgY25vcmVtZSBjbyBjb2wgY29sbyBjb20gY29tYyBjb21wIGNvbiBjb25mIGNvcGUgJytcbiAgICAgICAgJ2NwIGNwZiBjcSBjciBjcyBjc3QgY3UgY3VuYSBjdW5tZSBjdyBkZWxtIGRlYiBkZWJ1Z2cgZGVsYyBkZWxmIGRpZiBkaWZmZyBkaWZmbyBkaWZmcCBkaWZmcHUgZGlmZnMgZGlmZnRoaXMgZGlnIGRpIGRsIGRlbGwgZGogZGxpIGRvIGRvYXV0b2EgZHAgZHIgZHMgZHNwIGV8MCBlYSBlYyBlY2hvZSBlY2hvaCBlY2hvbSBlY2hvbiBlbCBlbHNlaSBlbSBlbiBlbmRmbyBlbmRmIGVuZHQgZW5kdyBlbmUgZXggZXhlIGV4aSBleHUgZnwwIGZpbGVzIGZpbGV0IGZpbiBmaW5hIGZpbmkgZmlyIGZpeCBmbyBmb2xkYyBmb2xkZCBmb2xkZG9jIGZvbGRvIGZvciBmdSBnbyBnciBncmVwYSBndSBndiBoYSBoZWxwZiBoZWxwZyBoZWxwdCBoaSBoaWQgaGlzIGlhIGlhYmMgaWYgaWogaWwgaW0gaW1hcGMgJytcbiAgICAgICAgJ2ltZSBpbm8gaW5vcmVhIGlub3JlbWUgaW50IGlzIGlzcCBpdSBpdW5hIGl1bm1lIGp8MCBqdSBrfDAga2VlcGEga2VlIGtlZXBqIGxOIGxOZiBsfDAgbGFkIGxhZGRiIGxhZGRmIGxhIGxhbiBsYXQgbGIgbGMgbGNoIGxjbCBsY3MgbGUgbGVmdGEgbGV0IGxleCBsZiBsZmlyIGxnZXRiIGxnZXRlIGxnIGxnciBsZ3JlcGEgbGggbGwgbGxhIGxsaSBsbWFrIGxtIGxtYXBjIGxuZSBsbmV3IGxuZiBsbiBsb2FkayBsbyBsb2MgbG9ja3YgbG9sIGxvcGUgbHAgbHBmIGxyIGxzIGx0IGx1IGx1YSBsdWFkIGx1YWYgbHYgbHZpbWdyZXBhIGx3IG18MCBtYSBtYWsgbWFwIG1hcGMgbWFya3MgbWF0IG1lIG1lbnV0IG1lcyBtayBta3MgbWtzcCBta3YgbWt2aWUgbW9kIG16IG16ZiBuYmMgbmIgbmJzIG5ldyBubSBubWFwYyBubWUgbm4gbm5vcmVtZSBub2Egbm8gbm9oIG5vcmVhIG5vcmVtZSBub3JtIG51IG51biBudW5tZSBvbCBvfDAgb20gb21hcGMgb21lIG9uIG9ubyBvbm9yZW1lIG9wdCBvdSBvdW5tZSBvdyBwfDAgJytcbiAgICAgICAgJ3Byb2ZkIHByb2YgcHJvIHByb21wdHIgcGMgcGVkIHBlIHBlcmxkIHBvIHBvcHUgcHAgcHJlIHByZXYgcHMgcHQgcHROIHB0ZiBwdGogcHRsIHB0biBwdHAgcHRyIHB0cyBwdSBwdyBweTMgcHl0aG9uMyBweTNkIHB5M2YgcHkgcHlkIHB5ZiBxdWl0YSBxYSByZWMgcmVkIHJlZGkgcmVkciByZWRyYXdzIHJlZyByZXMgcmV0IHJldHUgcmV3IHJpIHJpZ2h0YiBydWIgcnVieWQgcnVieWYgcnVuZCBydSBydiBzTiBzYW4gc2Egc2FsIHNhdiBzYiBzYk4gc2JhIHNiZiBzYmwgc2JtIHNibiBzYnAgc2JyIHNjcmlwIHNjcmlwdGUgc2NzIHNlIHNldGYgc2V0ZyBzZXRsIHNmIHNmaXIgc2ggc2ltIHNpZyBzaWwgc2wgc2xhIHNtIHNtYXAgc21hcGMgc21lIHNuIHNuaSBzbm8gc25vciBzbm9yZW1lIHNvciAnK1xuICAgICAgICAnc28gc3BlbGxkIHNwZSBzcGVsbGkgc3BlbGxyIHNwZWxsdSBzcGVsbHcgc3Agc3ByIHNyZSBzdCBzdGEgc3RhcnRnIHN0YXJ0ciBzdGFyIHN0b3BpIHN0aiBzdHMgc3VuIHN1bm0gc3VubWUgc3VzIHN2IHN3IHN5IHN5bnRpIHN5bmMgdE4gdGFiTiB0YWJjIHRhYmRvIHRhYmUgdGFiZiB0YWJmaXIgdGFibCB0YWJtIHRhYm5ldyAnK1xuICAgICAgICAndGFibiB0YWJvIHRhYnAgdGFiciB0YWJzIHRhYiB0YSB0YWdzIHRjIHRjbGQgdGNsZiB0ZSB0ZiB0aCB0aiB0bCB0bSB0biB0byB0cCB0ciB0cnkgdHMgdHUgdXwwIHVuZG9qIHVuZG9sIHVuYSB1bmggdW5sIHVubG8gdW5tIHVubWUgdW5zIHVwIHZlIHZlcmIgdmVydCB2aW0gdmltZ3JlcGEgdmkgdml1IHZpZSB2bSB2bWFwYyB2bWUgdm5lIHZuIHZub3JlbWUgdnMgdnUgdnVubWUgd2luZG8gd3wwIHdOIHdhIHdoIHdpIHdpbmMgd2lucCB3biB3cCB3cSB3cWEgd3Mgd3Ugd3YgeHwwIHhhIHhtYXBjIHhtIHhtZSB4biB4bm9yZW1lIHh1IHh1bm1lIHl8MCB6fDAgfiAnK1xuICAgICAgICAvLyBmdWxsIHZlcnNpb25cbiAgICAgICAgJ05leHQgUHJpbnQgYXBwZW5kIGFiYnJldmlhdGUgYWJjbGVhciBhYm92ZWxlZnQgYWxsIGFtZW51IGFub3JlbWVudSBhcmdzIGFyZ2FkZCBhcmdkZWxldGUgYXJnZWRpdCBhcmdnbG9iYWwgYXJnbG9jYWwgYXJndW1lbnQgYXNjaWkgYXV0b2NtZCBhdWdyb3VwIGF1bm1lbnUgYnVmZmVyIGJOZXh0IGJhbGwgYmFkZCBiZGVsZXRlIGJlaGF2ZSBiZWxvd3JpZ2h0IGJmaXJzdCBibGFzdCBibW9kaWZpZWQgYm5leHQgYm90cmlnaHQgYnByZXZpb3VzIGJyZXdpbmQgYnJlYWsgYnJlYWthZGQgYnJlYWtkZWwgYnJlYWtsaXN0IGJyb3dzZSBidW5sb2FkICcrXG4gICAgICAgICdid2lwZW91dCBjaGFuZ2UgY05leHQgY05maWxlIGNhYmJyZXYgY2FiY2xlYXIgY2FkZGJ1ZmZlciBjYWRkZXhwciBjYWRkZmlsZSBjYWxsIGNhdGNoIGNidWZmZXIgY2Nsb3NlIGNlbnRlciBjZXhwciBjZmlsZSBjZmlyc3QgY2dldGJ1ZmZlciBjZ2V0ZXhwciBjZ2V0ZmlsZSBjaGRpciBjaGVja3BhdGggY2hlY2t0aW1lIGNsaXN0IGNsYXN0IGNsb3NlIGNtYXAgY21hcGNsZWFyIGNtZW51IGNuZXh0IGNuZXdlciBjbmZpbGUgY25vcmVtYXAgY25vcmVhYmJyZXYgY25vcmVtZW51IGNvcHkgY29sZGVyIGNvbG9yc2NoZW1lIGNvbW1hbmQgY29tY2xlYXIgY29tcGlsZXIgY29udGludWUgY29uZmlybSBjb3BlbiBjcHJldmlvdXMgY3BmaWxlIGNxdWl0IGNyZXdpbmQgY3Njb3BlIGNzdGFnIGN1bm1hcCAnK1xuICAgICAgICAnY3VuYWJicmV2IGN1bm1lbnUgY3dpbmRvdyBkZWxldGUgZGVsbWFya3MgZGVidWcgZGVidWdncmVlZHkgZGVsY29tbWFuZCBkZWxmdW5jdGlvbiBkaWZmdXBkYXRlIGRpZmZnZXQgZGlmZm9mZiBkaWZmcGF0Y2ggZGlmZnB1dCBkaWZmc3BsaXQgZGlncmFwaHMgZGlzcGxheSBkZWxldGVsIGRqdW1wIGRsaXN0IGRvYXV0b2NtZCBkb2F1dG9hbGwgZGVsZXRlcCBkcm9wIGRzZWFyY2ggZHNwbGl0IGVkaXQgZWFybGllciBlY2hvIGVjaG9lcnIgZWNob2hsIGVjaG9tc2cgZWxzZSBlbHNlaWYgZW1lbnUgZW5kaWYgZW5kZm9yICcrXG4gICAgICAgICdlbmRmdW5jdGlvbiBlbmR0cnkgZW5kd2hpbGUgZW5ldyBleGVjdXRlIGV4aXQgZXh1c2FnZSBmaWxlIGZpbGV0eXBlIGZpbmQgZmluYWxseSBmaW5pc2ggZmlyc3QgZml4ZGVsIGZvbGQgZm9sZGNsb3NlIGZvbGRkb29wZW4gZm9sZGRvY2xvc2VkIGZvbGRvcGVuIGZ1bmN0aW9uIGdsb2JhbCBnb3RvIGdyZXAgZ3JlcGFkZCBndWkgZ3ZpbSBoYXJkY29weSBoZWxwIGhlbHBmaW5kIGhlbHBncmVwIGhlbHB0YWdzIGhpZ2hsaWdodCBoaWRlIGhpc3RvcnkgaW5zZXJ0IGlhYmJyZXYgaWFiY2xlYXIgaWp1bXAgaWxpc3QgaW1hcCAnK1xuICAgICAgICAnaW1hcGNsZWFyIGltZW51IGlub3JlbWFwIGlub3JlYWJicmV2IGlub3JlbWVudSBpbnRybyBpc2VhcmNoIGlzcGxpdCBpdW5tYXAgaXVuYWJicmV2IGl1bm1lbnUgam9pbiBqdW1wcyBrZWVwYWx0IGtlZXBtYXJrcyBrZWVwanVtcHMgbE5leHQgbE5maWxlIGxpc3QgbGFkZGV4cHIgbGFkZGJ1ZmZlciBsYWRkZmlsZSBsYXN0IGxhbmd1YWdlIGxhdGVyIGxidWZmZXIgbGNkIGxjaGRpciBsY2xvc2UgbGNzY29wZSBsZWZ0IGxlZnRhYm92ZSBsZXhwciBsZmlsZSBsZmlyc3QgbGdldGJ1ZmZlciBsZ2V0ZXhwciBsZ2V0ZmlsZSBsZ3JlcCBsZ3JlcGFkZCBsaGVscGdyZXAgbGxhc3QgbGxpc3QgbG1ha2UgbG1hcCBsbWFwY2xlYXIgbG5leHQgbG5ld2VyIGxuZmlsZSBsbm9yZW1hcCBsb2Fka2V5bWFwIGxvYWR2aWV3ICcrXG4gICAgICAgICdsb2NrbWFya3MgbG9ja3ZhciBsb2xkZXIgbG9wZW4gbHByZXZpb3VzIGxwZmlsZSBscmV3aW5kIGx0YWcgbHVubWFwIGx1YWRvIGx1YWZpbGUgbHZpbWdyZXAgbHZpbWdyZXBhZGQgbHdpbmRvdyBtb3ZlIG1hcmsgbWFrZSBtYXBjbGVhciBtYXRjaCBtZW51IG1lbnV0cmFuc2xhdGUgbWVzc2FnZXMgbWtleHJjIG1rc2Vzc2lvbiBta3NwZWxsIG1rdmltcmMgbWt2aWV3IG1vZGUgbXpzY2hlbWUgbXpmaWxlIG5iY2xvc2UgbmJrZXkgbmJzYXJ0IG5leHQgbm1hcCBubWFwY2xlYXIgbm1lbnUgbm5vcmVtYXAgJytcbiAgICAgICAgJ25ub3JlbWVudSBub2F1dG9jbWQgbm9yZW1hcCBub2hsc2VhcmNoIG5vcmVhYmJyZXYgbm9yZW1lbnUgbm9ybWFsIG51bWJlciBudW5tYXAgbnVubWVudSBvbGRmaWxlcyBvcGVuIG9tYXAgb21hcGNsZWFyIG9tZW51IG9ubHkgb25vcmVtYXAgb25vcmVtZW51IG9wdGlvbnMgb3VubWFwIG91bm1lbnUgb3duc3ludGF4IHByaW50IHByb2ZkZWwgcHJvZmlsZSBwcm9tcHRmaW5kIHByb21wdHJlcGwgcGNsb3NlIHBlZGl0IHBlcmwgcGVybGRvIHBvcCBwb3B1cCBwcG9wIHByZXNlcnZlIHByZXZpb3VzIHBzZWFyY2ggcHRhZyBwdE5leHQgJytcbiAgICAgICAgJ3B0Zmlyc3QgcHRqdW1wIHB0bGFzdCBwdG5leHQgcHRwcmV2aW91cyBwdHJld2luZCBwdHNlbGVjdCBwdXQgcHdkIHB5M2RvIHB5M2ZpbGUgcHl0aG9uIHB5ZG8gcHlmaWxlIHF1aXQgcXVpdGFsbCBxYWxsIHJlYWQgcmVjb3ZlciByZWRvIHJlZGlyIHJlZHJhdyByZWRyYXdzdGF0dXMgcmVnaXN0ZXJzIHJlc2l6ZSByZXRhYiByZXR1cm4gcmV3aW5kIHJpZ2h0IHJpZ2h0YmVsb3cgcnVieSBydWJ5ZG8gcnVieWZpbGUgcnVuZG8gcnVudGltZSBydmltaW5mbyBzdWJzdGl0dXRlIHNOZXh0IHNhbmRib3ggc2FyZ3VtZW50IHNhbGwgc2F2ZWFzIHNidWZmZXIgc2JOZXh0IHNiYWxsIHNiZmlyc3Qgc2JsYXN0IHNibW9kaWZpZWQgc2JuZXh0IHNicHJldmlvdXMgc2JyZXdpbmQgc2NyaXB0bmFtZXMgc2NyaXB0ZW5jb2RpbmcgJytcbiAgICAgICAgJ3Njc2NvcGUgc2V0IHNldGZpbGV0eXBlIHNldGdsb2JhbCBzZXRsb2NhbCBzZmluZCBzZmlyc3Qgc2hlbGwgc2ltYWx0IHNpZ24gc2lsZW50IHNsZWVwIHNsYXN0IHNtYWdpYyBzbWFwY2xlYXIgc21lbnUgc25leHQgc25pZmYgc25vbWFnaWMgc25vcmVtYXAgc25vcmVtZW51IHNvcnQgc291cmNlIHNwZWxsZHVtcCBzcGVsbGdvb2Qgc3BlbGxpbmZvIHNwZWxscmVwYWxsIHNwZWxsdW5kbyBzcGVsbHdyb25nIHNwbGl0IHNwcmV2aW91cyBzcmV3aW5kIHN0b3Agc3RhZyBzdGFydGdyZXBsYWNlIHN0YXJ0cmVwbGFjZSAnK1xuICAgICAgICAnc3RhcnRpbnNlcnQgc3RvcGluc2VydCBzdGp1bXAgc3RzZWxlY3Qgc3VuaGlkZSBzdW5tYXAgc3VubWVudSBzdXNwZW5kIHN2aWV3IHN3YXBuYW1lIHN5bnRheCBzeW50aW1lIHN5bmNiaW5kIHROZXh0IHRhYk5leHQgdGFiY2xvc2UgdGFiZWRpdCB0YWJmaW5kIHRhYmZpcnN0IHRhYmxhc3QgdGFibW92ZSB0YWJuZXh0IHRhYm9ubHkgdGFicHJldmlvdXMgdGFicmV3aW5kIHRhZyB0Y2wgdGNsZG8gdGNsZmlsZSB0ZWFyb2ZmIHRmaXJzdCB0aHJvdyB0anVtcCB0bGFzdCB0bWVudSB0bmV4dCB0b3BsZWZ0IHRwcmV2aW91cyAnKyd0cmV3aW5kIHRzZWxlY3QgdHVubWVudSB1bmRvIHVuZG9qb2luIHVuZG9saXN0IHVuYWJicmV2aWF0ZSB1bmhpZGUgdW5sZXQgdW5sb2NrdmFyIHVubWFwIHVubWVudSB1bnNpbGVudCB1cGRhdGUgdmdsb2JhbCB2ZXJzaW9uIHZlcmJvc2UgdmVydGljYWwgdmltZ3JlcCB2aW1ncmVwYWRkIHZpc3VhbCB2aXVzYWdlIHZpZXcgdm1hcCB2bWFwY2xlYXIgdm1lbnUgdm5ldyAnK1xuICAgICAgICAndm5vcmVtYXAgdm5vcmVtZW51IHZzcGxpdCB2dW5tYXAgdnVubWVudSB3cml0ZSB3TmV4dCB3YWxsIHdoaWxlIHdpbnNpemUgd2luY21kIHdpbnBvcyB3bmV4dCB3cHJldmlvdXMgd3FhbGwgd3N2ZXJiIHd1bmRvIHd2aW1pbmZvIHhpdCB4YWxsIHhtYXBjbGVhciB4bWFwIHhtZW51IHhub3JlbWFwIHhub3JlbWVudSB4dW5tYXAgeHVubWVudSB5YW5rJyxcbiAgICAgIGJ1aWx0X2luOiAvL2J1aWx0IGluIGZ1bmNcbiAgICAgICAgJ3N5bklEdHJhbnMgYXRhbjIgcmFuZ2UgbWF0Y2hhcmcgZGlkX2ZpbGV0eXBlIGFzaW4gZmVlZGtleXMgeG9yIGFyZ3YgJyArXG4gICAgICAgICdjb21wbGV0ZV9jaGVjayBhZGQgZ2V0d2lucG9zeCBnZXRxZmxpc3QgZ2V0d2lucG9zeSBzY3JlZW5jb2wgJyArXG4gICAgICAgICdjbGVhcm1hdGNoZXMgZW1wdHkgZXh0ZW5kIGdldGNtZHBvcyBtemV2YWwgZ2FyYmFnZWNvbGxlY3Qgc2V0cmVnICcgK1xuICAgICAgICAnY2VpbCBzcXJ0IGRpZmZfaGxJRCBpbnB1dHNlY3JldCBnZXQgZ2V0ZnBlcm0gZ2V0cGlkIGZpbGV3cml0YWJsZSAnICtcbiAgICAgICAgJ3NoaWZ0d2lkdGggbWF4IHNpbmggaXNkaXJlY3Rvcnkgc3luSUQgc3lzdGVtIGlucHV0cmVzdG9yZSB3aW5saW5lICcgK1xuICAgICAgICAnYXRhbiB2aXN1YWxtb2RlIGlucHV0bGlzdCB0YWJwYWdld2lubnIgcm91bmQgZ2V0cmVndHlwZSBtYXBjaGVjayAnICtcbiAgICAgICAgJ2hhc21hcHRvIGhpc3RkZWwgYXJnaWR4IGZpbmRmaWxlIHNoYTI1NiBleGlzdHMgdG91cHBlciBnZXRjbWRsaW5lICcgK1xuICAgICAgICAndGFnbGlzdCBzdHJpbmcgZ2V0bWF0Y2hlcyBidWZuciBzdHJmdGltZSB3aW53aWR0aCBidWZleGlzdHMgJyArXG4gICAgICAgICdzdHJ0cmFucyB0YWJwYWdlYnVmbGlzdCBzZXRjbWRwb3MgcmVtb3RlX3JlYWQgcHJpbnRmIHNldGxvY2xpc3QgJyArXG4gICAgICAgICdnZXRwb3MgZ2V0bGluZSBidWZ3aW5uciBmbG9hdDJuciBsZW4gZ2V0Y21kdHlwZSBkaWZmX2ZpbGxlciBsdWFldmFsICcgK1xuICAgICAgICAncmVzb2x2ZSBsaWJjYWxsbnIgZm9sZGNsb3NlZGVuZCByZXZlcnNlIGZpbHRlciBoYXNfa2V5IGJ1Zm5hbWUgJyArXG4gICAgICAgICdzdHIyZmxvYXQgc3RybGVuIHNldGxpbmUgZ2V0Y2hhcm1vZCBzZXRidWZ2YXIgaW5kZXggc2VhcmNocG9zICcgK1xuICAgICAgICAnc2hlbGxlc2NhcGUgdW5kb2ZpbGUgZm9sZGNsb3NlZCBzZXRxZmxpc3QgYnVmbGlzdGVkIHN0cmNoYXJzIHN0cjJuciAnICtcbiAgICAgICAgJ3ZpcnRjb2wgZmxvb3IgcmVtb3ZlIHVuZG90cmVlIHJlbW90ZV9leHByIHdpbmhlaWdodCBnZXR0YWJ3aW52YXIgJyArXG4gICAgICAgICdyZWx0aW1lIGN1cnNvciB0YWJwYWdlbnIgZmluZGRpciBsb2NhbHRpbWUgYWNvcyBnZXRsb2NsaXN0IHNlYXJjaCAnICtcbiAgICAgICAgJ3RhbmggbWF0Y2hlbmQgcmVuYW1lIGdldHRhYnZhciBzdHJkaXNwbGF5d2lkdGggdHlwZSBhYnMgcHkzZXZhbCAnICtcbiAgICAgICAgJ3NldHdpbnZhciB0b2xvd2VyIHdpbGRtZW51bW9kZSBsb2cxMCBzcGVsbHN1Z2dlc3QgYnVmbG9hZGVkICcgK1xuICAgICAgICAnc3luY29uY2VhbGVkIG5leHRub25ibGFuayBzZXJ2ZXIyY2xpZW50IGNvbXBsZXRlIHNldHRhYndpbnZhciAnICtcbiAgICAgICAgJ2V4ZWN1dGFibGUgaW5wdXQgd2luY29sIHNldG1hdGNoZXMgZ2V0ZnR5cGUgaGxJRCBpbnB1dHNhdmUgJyArXG4gICAgICAgICdzZWFyY2hwYWlyIG9yIHNjcmVlbnJvdyBsaW5lIHNldHRhYnZhciBoaXN0YWRkIGRlZXBjb3B5IHN0cnBhcnQgJyArXG4gICAgICAgICdyZW1vdGVfcGVlayBhbmQgZXZhbCBnZXRmdGltZSBzdWJtYXRjaCBzY3JlZW5jaGFyIHdpbnNhdmV2aWV3ICcgK1xuICAgICAgICAnbWF0Y2hhZGQgbWtkaXIgc2NyZWVuYXR0ciBnZXRmb250bmFtZSBsaWJjYWxsIHJlbHRpbWVzdHIgZ2V0ZnNpemUgJyArXG4gICAgICAgICd3aW5uciBpbnZlcnQgcG93IGdldGJ1ZmxpbmUgYnl0ZTJsaW5lIHNvdW5kZm9sZCByZXBlYXQgZm5hbWVlc2NhcGUgJyArXG4gICAgICAgICd0YWdmaWxlcyBzaW4gc3Ryd2lkdGggc3BlbGxiYWR3b3JkIHRydW5jIG1hcGFyZyBsb2cgbGlzcGluZGVudCAnICtcbiAgICAgICAgJ2hvc3RuYW1lIHNldHBvcyBnbG9icGF0aCByZW1vdGVfZm9yZWdyb3VuZCBnZXRjaGFyIHN5bklEYXR0ciAnICtcbiAgICAgICAgJ2ZuYW1lbW9kaWZ5IGNzY29wZV9jb25uZWN0aW9uIHN0cmlkeCB3aW5idWZuciBpbmRlbnQgbWluICcgK1xuICAgICAgICAnY29tcGxldGVfYWRkIG5yMmNoYXIgc2VhcmNocGFpcnBvcyBpbnB1dGRpYWxvZyB2YWx1ZXMgbWF0Y2hsaXN0ICcgK1xuICAgICAgICAnaXRlbXMgaGxleGlzdHMgc3RycmlkeCBicm93c2VkaXIgZXhwYW5kIGZtb2QgcGF0aHNob3J0ZW4gbGluZTJieXRlICcgK1xuICAgICAgICAnYXJnYyBjb3VudCBnZXR3aW52YXIgZ2xvYiBmb2xkdGV4dHJlc3VsdCBnZXRyZWcgZm9yZWdyb3VuZCBjb3NoICcgK1xuICAgICAgICAnbWF0Y2hkZWxldGUgaGFzIGNoYXIybnIgc2ltcGxpZnkgaGlzdGdldCBzZWFyY2hkZWNsIGljb252ICcgK1xuICAgICAgICAnd2lucmVzdGNtZCBwdW12aXNpYmxlIHdyaXRlZmlsZSBmb2xkbGV2ZWwgaGFzbG9jYWxkaXIga2V5cyBjb3MgJyArXG4gICAgICAgICdtYXRjaHN0ciBmb2xkdGV4dCBoaXN0bnIgdGFuIHRlbXBuYW1lIGdldGN3ZCBieXRlaWR4IGdldGJ1ZnZhciAnICtcbiAgICAgICAgJ2lzbG9ja2VkIGVzY2FwZSBldmVudGhhbmRsZXIgcmVtb3RlX3NlbmQgc2VydmVybGlzdCB3aW5yZXN0dmlldyAnICtcbiAgICAgICAgJ3N5bnN0YWNrIHB5ZXZhbCBwcmV2bm9uYmxhbmsgcmVhZGZpbGUgY2luZGVudCBmaWxlcmVhZGFibGUgY2hhbmdlbnIgJyArXG4gICAgICAgICdleHAnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvOy8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcblxuICAgICAgLypcbiAgICAgIEEgZG91YmxlIHF1b3RlIGNhbiBzdGFydCBlaXRoZXIgYSBzdHJpbmcgb3IgYSBsaW5lIGNvbW1lbnQuIFN0cmluZ3MgYXJlXG4gICAgICBlbmRlZCBiZWZvcmUgdGhlIGVuZCBvZiBhIGxpbmUgYnkgYW5vdGhlciBkb3VibGUgcXVvdGUgYW5kIGNhbiBjb250YWluXG4gICAgICBlc2NhcGVkIGRvdWJsZS1xdW90ZXMgYW5kIHBvc3QtZXNjYXBlZCBsaW5lIGJyZWFrcy5cblxuICAgICAgQWxzbywgYW55IGRvdWJsZSBxdW90ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpcyBhIGNvbW1lbnQgYnV0IHdlXG4gICAgICBkb24ndCBoYW5kbGUgdGhhdCBwcm9wZXJseSBhdCB0aGUgbW9tZW50OiBhbnkgZG91YmxlIHF1b3RlIGluc2lkZSB3aWxsXG4gICAgICB0dXJuIHRoZW0gaW50byBhIHN0cmluZy4gSGFuZGxpbmcgaXQgcHJvcGVybHkgd2lsbCByZXF1aXJlIGEgc21hcnRlclxuICAgICAgcGFyc2VyLlxuICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IC9cIihcXFxcXCJ8XFxuXFxcXHxbXlwiXFxuXSkqXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdcIicsICckJyksXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1tid3RnbHNhdl06W1xcd1xcZF9dKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGZ1bmN0aW9uIScsIGVuZDogJyQnLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLzxbXFx3LV0rPi9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogJ1suJV0/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdsb2NrIHJlcCByZXBlIHJlcHogcmVwbmUgcmVwbnogeGFxdWlyZSB4cmVsZWFzZSBibmQgbm9ibmQgJyArXG4gICAgICAgICdhYWEgYWFkIGFhbSBhYXMgYWRjIGFkZCBhbmQgYXJwbCBiYjBfcmVzZXQgYmIxX3Jlc2V0IGJvdW5kIGJzZiBic3IgYnN3YXAgYnQgYnRjIGJ0ciBidHMgY2FsbCBjYncgY2RxIGNkcWUgY2xjIGNsZCBjbGkgY2x0cyBjbWMgY21wIGNtcHNiIGNtcHNkIGNtcHNxIGNtcHN3IGNtcHhjaGcgY21weGNoZzQ4NiBjbXB4Y2hnOGIgY21weGNoZzE2YiBjcHVpZCBjcHVfcmVhZCBjcHVfd3JpdGUgY3FvIGN3ZCBjd2RlIGRhYSBkYXMgZGVjIGRpdiBkbWludCBlbW1zIGVudGVyIGVxdSBmMnhtMSBmYWJzIGZhZGQgZmFkZHAgZmJsZCBmYnN0cCBmY2hzIGZjbGV4IGZjbW92YiBmY21vdmJlIGZjbW92ZSBmY21vdm5iIGZjbW92bmJlIGZjbW92bmUgZmNtb3ZudSBmY21vdnUgZmNvbSBmY29taSBmY29taXAgZmNvbXAgZmNvbXBwIGZjb3MgZmRlY3N0cCBmZGlzaSBmZGl2IGZkaXZwIGZkaXZyIGZkaXZycCBmZW1tcyBmZW5pIGZmcmVlIGZmcmVlcCBmaWFkZCBmaWNvbSBmaWNvbXAgZmlkaXYgZmlkaXZyIGZpbGQgZmltdWwgZmluY3N0cCBmaW5pdCBmaXN0IGZpc3RwIGZpc3R0cCBmaXN1YiBmaXN1YnIgZmxkIGZsZDEgZmxkY3cgZmxkZW52IGZsZGwyZSBmbGRsMnQgZmxkbGcyIGZsZGxuMiBmbGRwaSBmbGR6IGZtdWwgZm11bHAgZm5jbGV4IGZuZGlzaSBmbmVuaSBmbmluaXQgZm5vcCBmbnNhdmUgZm5zdGN3IGZuc3RlbnYgZm5zdHN3IGZwYXRhbiBmcHJlbSBmcHJlbTEgZnB0YW4gZnJuZGludCBmcnN0b3IgZnNhdmUgZnNjYWxlIGZzZXRwbSBmc2luIGZzaW5jb3MgZnNxcnQgZnN0IGZzdGN3IGZzdGVudiBmc3RwIGZzdHN3IGZzdWIgZnN1YnAgZnN1YnIgZnN1YnJwIGZ0c3QgZnVjb20gZnVjb21pIGZ1Y29taXAgZnVjb21wIGZ1Y29tcHAgZnhhbSBmeGNoIGZ4dHJhY3QgZnlsMnggZnlsMnhwMSBobHQgaWJ0cyBpY2VicCBpZGl2IGltdWwgaW4gaW5jIGluY2JpbiBpbnNiIGluc2QgaW5zdyBpbnQgaW50MDEgaW50MSBpbnQwMyBpbnQzIGludG8gaW52ZCBpbnZwY2lkIGludmxwZyBpbnZscGdhIGlyZXQgaXJldGQgaXJldHEgaXJldHcgamN4eiBqZWN4eiBqcmN4eiBqbXAgam1wZSBsYWhmIGxhciBsZHMgbGVhIGxlYXZlIGxlcyBsZmVuY2UgbGZzIGxnZHQgbGdzIGxpZHQgbGxkdCBsbXN3IGxvYWRhbGwgbG9hZGFsbDI4NiBsb2RzYiBsb2RzZCBsb2RzcSBsb2RzdyBsb29wIGxvb3BlIGxvb3BuZSBsb29wbnogbG9vcHogbHNsIGxzcyBsdHIgbWZlbmNlIG1vbml0b3IgbW92IG1vdmQgbW92cSBtb3ZzYiBtb3ZzZCBtb3ZzcSBtb3ZzdyBtb3ZzeCBtb3ZzeGQgbW92enggbXVsIG13YWl0IG5lZyBub3Agbm90IG9yIG91dCBvdXRzYiBvdXRzZCBvdXRzdyBwYWNrc3NkdyBwYWNrc3N3YiBwYWNrdXN3YiBwYWRkYiBwYWRkZCBwYWRkc2IgcGFkZHNpdyBwYWRkc3cgcGFkZHVzYiBwYWRkdXN3IHBhZGR3IHBhbmQgcGFuZG4gcGF1c2UgcGF2ZWIgcGF2Z3VzYiBwY21wZXFiIHBjbXBlcWQgcGNtcGVxdyBwY21wZ3RiIHBjbXBndGQgcGNtcGd0dyBwZGlzdGliIHBmMmlkIHBmYWNjIHBmYWRkIHBmY21wZXEgcGZjbXBnZSBwZmNtcGd0IHBmbWF4IHBmbWluIHBmbXVsIHBmcmNwIHBmcmNwaXQxIHBmcmNwaXQyIHBmcnNxaXQxIHBmcnNxcnQgcGZzdWIgcGZzdWJyIHBpMmZkIHBtYWNocml3IHBtYWRkd2QgcG1hZ3cgcG11bGhyaXcgcG11bGhyd2EgcG11bGhyd2MgcG11bGh3IHBtdWxsdyBwbXZnZXpiIHBtdmx6YiBwbXZuemIgcG12emIgcG9wIHBvcGEgcG9wYWQgcG9wYXcgcG9wZiBwb3BmZCBwb3BmcSBwb3BmdyBwb3IgcHJlZmV0Y2ggcHJlZmV0Y2h3IHBzbGxkIHBzbGxxIHBzbGx3IHBzcmFkIHBzcmF3IHBzcmxkIHBzcmxxIHBzcmx3IHBzdWJiIHBzdWJkIHBzdWJzYiBwc3Vic2l3IHBzdWJzdyBwc3VidXNiIHBzdWJ1c3cgcHN1YncgcHVucGNraGJ3IHB1bnBja2hkcSBwdW5wY2tod2QgcHVucGNrbGJ3IHB1bnBja2xkcSBwdW5wY2tsd2QgcHVzaCBwdXNoYSBwdXNoYWQgcHVzaGF3IHB1c2hmIHB1c2hmZCBwdXNoZnEgcHVzaGZ3IHB4b3IgcmNsIHJjciByZHNociByZG1zciByZHBtYyByZHRzYyByZHRzY3AgcmV0IHJldGYgcmV0biByb2wgcm9yIHJkbSByc2RjIHJzbGR0IHJzbSByc3RzIHNhaGYgc2FsIHNhbGMgc2FyIHNiYiBzY2FzYiBzY2FzZCBzY2FzcSBzY2FzdyBzZmVuY2Ugc2dkdCBzaGwgc2hsZCBzaHIgc2hyZCBzaWR0IHNsZHQgc2tpbml0IHNtaSBzbWludCBzbWludG9sZCBzbXN3IHN0YyBzdGQgc3RpIHN0b3NiIHN0b3NkIHN0b3NxIHN0b3N3IHN0ciBzdWIgc3ZkYyBzdmxkdCBzdnRzIHN3YXBncyBzeXNjYWxsIHN5c2VudGVyIHN5c2V4aXQgc3lzcmV0IHRlc3QgdWQwIHVkMSB1ZDJiIHVkMiB1ZDJhIHVtb3YgdmVyciB2ZXJ3IGZ3YWl0IHdiaW52ZCB3cnNociB3cm1zciB4YWRkIHhidHMgeGNoZyB4bGF0YiB4bGF0IHhvciBjbW92ZSBjbW92eiBjbW92bmUgY21vdm56IGNtb3ZhIGNtb3ZuYmUgY21vdmFlIGNtb3ZuYiBjbW92YiBjbW92bmFlIGNtb3ZiZSBjbW92bmEgY21vdmcgY21vdm5sZSBjbW92Z2UgY21vdm5sIGNtb3ZsIGNtb3ZuZ2UgY21vdmxlIGNtb3ZuZyBjbW92YyBjbW92bmMgY21vdm8gY21vdm5vIGNtb3ZzIGNtb3ZucyBjbW92cCBjbW92cGUgY21vdm5wIGNtb3ZwbyBqZSBqeiBqbmUgam56IGphIGpuYmUgamFlIGpuYiBqYiBqbmFlIGpiZSBqbmEgamcgam5sZSBqZ2Ugam5sIGpsIGpuZ2UgamxlIGpuZyBqYyBqbmMgam8gam5vIGpzIGpucyBqcG8gam5wIGpwZSBqcCBzZXRlIHNldHogc2V0bmUgc2V0bnogc2V0YSBzZXRuYmUgc2V0YWUgc2V0bmIgc2V0bmMgc2V0YiBzZXRuYWUgc2V0Y3NldCBzZXRiZSBzZXRuYSBzZXRnIHNldG5sZSBzZXRnZSBzZXRubCBzZXRsIHNldG5nZSBzZXRsZSBzZXRuZyBzZXRzIHNldG5zIHNldG8gc2V0bm8gc2V0cGUgc2V0cCBzZXRwbyBzZXRucCBhZGRwcyBhZGRzcyBhbmRucHMgYW5kcHMgY21wZXFwcyBjbXBlcXNzIGNtcGxlcHMgY21wbGVzcyBjbXBsdHBzIGNtcGx0c3MgY21wbmVxcHMgY21wbmVxc3MgY21wbmxlcHMgY21wbmxlc3MgY21wbmx0cHMgY21wbmx0c3MgY21wb3JkcHMgY21wb3Jkc3MgY21wdW5vcmRwcyBjbXB1bm9yZHNzIGNtcHBzIGNtcHNzIGNvbWlzcyBjdnRwaTJwcyBjdnRwczJwaSBjdnRzaTJzcyBjdnRzczJzaSBjdnR0cHMycGkgY3Z0dHNzMnNpIGRpdnBzIGRpdnNzIGxkbXhjc3IgbWF4cHMgbWF4c3MgbWlucHMgbWluc3MgbW92YXBzIG1vdmhwcyBtb3ZsaHBzIG1vdmxwcyBtb3ZobHBzIG1vdm1za3BzIG1vdm50cHMgbW92c3MgbW92dXBzIG11bHBzIG11bHNzIG9ycHMgcmNwcHMgcmNwc3MgcnNxcnRwcyByc3FydHNzIHNodWZwcyBzcXJ0cHMgc3FydHNzIHN0bXhjc3Igc3VicHMgc3Vic3MgdWNvbWlzcyB1bnBja2hwcyB1bnBja2xwcyB4b3JwcyBmeHJzdG9yIGZ4cnN0b3I2NCBmeHNhdmUgZnhzYXZlNjQgeGdldGJ2IHhzZXRidiB4c2F2ZSB4c2F2ZTY0IHhzYXZlb3B0IHhzYXZlb3B0NjQgeHJzdG9yIHhyc3RvcjY0IHByZWZldGNobnRhIHByZWZldGNodDAgcHJlZmV0Y2h0MSBwcmVmZXRjaHQyIG1hc2ttb3ZxIG1vdm50cSBwYXZnYiBwYXZndyBwZXh0cncgcGluc3J3IHBtYXhzdyBwbWF4dWIgcG1pbnN3IHBtaW51YiBwbW92bXNrYiBwbXVsaHV3IHBzYWRidyBwc2h1ZncgcGYyaXcgcGZuYWNjIHBmcG5hY2MgcGkyZncgcHN3YXBkIG1hc2ttb3ZkcXUgY2xmbHVzaCBtb3ZudGRxIG1vdm50aSBtb3ZudHBkIG1vdmRxYSBtb3ZkcXUgbW92ZHEycSBtb3ZxMmRxIHBhZGRxIHBtdWx1ZHEgcHNodWZkIHBzaHVmaHcgcHNodWZsdyBwc2xsZHEgcHNybGRxIHBzdWJxIHB1bnBja2hxZHEgcHVucGNrbHFkcSBhZGRwZCBhZGRzZCBhbmRucGQgYW5kcGQgY21wZXFwZCBjbXBlcXNkIGNtcGxlcGQgY21wbGVzZCBjbXBsdHBkIGNtcGx0c2QgY21wbmVxcGQgY21wbmVxc2QgY21wbmxlcGQgY21wbmxlc2QgY21wbmx0cGQgY21wbmx0c2QgY21wb3JkcGQgY21wb3Jkc2QgY21wdW5vcmRwZCBjbXB1bm9yZHNkIGNtcHBkIGNvbWlzZCBjdnRkcTJwZCBjdnRkcTJwcyBjdnRwZDJkcSBjdnRwZDJwaSBjdnRwZDJwcyBjdnRwaTJwZCBjdnRwczJkcSBjdnRwczJwZCBjdnRzZDJzaSBjdnRzZDJzcyBjdnRzaTJzZCBjdnRzczJzZCBjdnR0cGQycGkgY3Z0dHBkMmRxIGN2dHRwczJkcSBjdnR0c2Qyc2kgZGl2cGQgZGl2c2QgbWF4cGQgbWF4c2QgbWlucGQgbWluc2QgbW92YXBkIG1vdmhwZCBtb3ZscGQgbW92bXNrcGQgbW92dXBkIG11bHBkIG11bHNkIG9ycGQgc2h1ZnBkIHNxcnRwZCBzcXJ0c2Qgc3VicGQgc3Vic2QgdWNvbWlzZCB1bnBja2hwZCB1bnBja2xwZCB4b3JwZCBhZGRzdWJwZCBhZGRzdWJwcyBoYWRkcGQgaGFkZHBzIGhzdWJwZCBoc3VicHMgbGRkcXUgbW92ZGR1cCBtb3ZzaGR1cCBtb3ZzbGR1cCBjbGdpIHN0Z2kgdm1jYWxsIHZtY2xlYXIgdm1mdW5jIHZtbGF1bmNoIHZtbG9hZCB2bW1jYWxsIHZtcHRybGQgdm1wdHJzdCB2bXJlYWQgdm1yZXN1bWUgdm1ydW4gdm1zYXZlIHZtd3JpdGUgdm14b2ZmIHZteG9uIGludmVwdCBpbnZ2cGlkIHBhYnNiIHBhYnN3IHBhYnNkIHBhbGlnbnIgcGhhZGR3IHBoYWRkZCBwaGFkZHN3IHBoc3VidyBwaHN1YmQgcGhzdWJzdyBwbWFkZHVic3cgcG11bGhyc3cgcHNodWZiIHBzaWduYiBwc2lnbncgcHNpZ25kIGV4dHJxIGluc2VydHEgbW92bnRzZCBtb3ZudHNzIGx6Y250IGJsZW5kcGQgYmxlbmRwcyBibGVuZHZwZCBibGVuZHZwcyBkcHBkIGRwcHMgZXh0cmFjdHBzIGluc2VydHBzIG1vdm50ZHFhIG1wc2FkYncgcGFja3VzZHcgcGJsZW5kdmIgcGJsZW5kdyBwY21wZXFxIHBleHRyYiBwZXh0cmQgcGV4dHJxIHBobWlucG9zdXcgcGluc3JiIHBpbnNyZCBwaW5zcnEgcG1heHNiIHBtYXhzZCBwbWF4dWQgcG1heHV3IHBtaW5zYiBwbWluc2QgcG1pbnVkIHBtaW51dyBwbW92c3hidyBwbW92c3hiZCBwbW92c3hicSBwbW92c3h3ZCBwbW92c3h3cSBwbW92c3hkcSBwbW92enhidyBwbW92enhiZCBwbW92enhicSBwbW92enh3ZCBwbW92enh3cSBwbW92enhkcSBwbXVsZHEgcG11bGxkIHB0ZXN0IHJvdW5kcGQgcm91bmRwcyByb3VuZHNkIHJvdW5kc3MgY3JjMzIgcGNtcGVzdHJpIHBjbXBlc3RybSBwY21waXN0cmkgcGNtcGlzdHJtIHBjbXBndHEgcG9wY250IGdldHNlYyBwZnJjcHYgcGZyc3FydHYgbW92YmUgYWVzZW5jIGFlc2VuY2xhc3QgYWVzZGVjIGFlc2RlY2xhc3QgYWVzaW1jIGFlc2tleWdlbmFzc2lzdCB2YWVzZW5jIHZhZXNlbmNsYXN0IHZhZXNkZWMgdmFlc2RlY2xhc3QgdmFlc2ltYyB2YWVza2V5Z2VuYXNzaXN0IHZhZGRwZCB2YWRkcHMgdmFkZHNkIHZhZGRzcyB2YWRkc3VicGQgdmFkZHN1YnBzIHZhbmRwZCB2YW5kcHMgdmFuZG5wZCB2YW5kbnBzIHZibGVuZHBkIHZibGVuZHBzIHZibGVuZHZwZCB2YmxlbmR2cHMgdmJyb2FkY2FzdHNzIHZicm9hZGNhc3RzZCB2YnJvYWRjYXN0ZjEyOCB2Y21wZXFfb3NwZCB2Y21wZXFwZCB2Y21wbHRfb3NwZCB2Y21wbHRwZCB2Y21wbGVfb3NwZCB2Y21wbGVwZCB2Y21wdW5vcmRfcXBkIHZjbXB1bm9yZHBkIHZjbXBuZXFfdXFwZCB2Y21wbmVxcGQgdmNtcG5sdF91c3BkIHZjbXBubHRwZCB2Y21wbmxlX3VzcGQgdmNtcG5sZXBkIHZjbXBvcmRfcXBkIHZjbXBvcmRwZCB2Y21wZXFfdXFwZCB2Y21wbmdlX3VzcGQgdmNtcG5nZXBkIHZjbXBuZ3RfdXNwZCB2Y21wbmd0cGQgdmNtcGZhbHNlX29xcGQgdmNtcGZhbHNlcGQgdmNtcG5lcV9vcXBkIHZjbXBnZV9vc3BkIHZjbXBnZXBkIHZjbXBndF9vc3BkIHZjbXBndHBkIHZjbXB0cnVlX3VxcGQgdmNtcHRydWVwZCB2Y21wbHRfb3FwZCB2Y21wbGVfb3FwZCB2Y21wdW5vcmRfc3BkIHZjbXBuZXFfdXNwZCB2Y21wbmx0X3VxcGQgdmNtcG5sZV91cXBkIHZjbXBvcmRfc3BkIHZjbXBlcV91c3BkIHZjbXBuZ2VfdXFwZCB2Y21wbmd0X3VxcGQgdmNtcGZhbHNlX29zcGQgdmNtcG5lcV9vc3BkIHZjbXBnZV9vcXBkIHZjbXBndF9vcXBkIHZjbXB0cnVlX3VzcGQgdmNtcHBkIHZjbXBlcV9vc3BzIHZjbXBlcXBzIHZjbXBsdF9vc3BzIHZjbXBsdHBzIHZjbXBsZV9vc3BzIHZjbXBsZXBzIHZjbXB1bm9yZF9xcHMgdmNtcHVub3JkcHMgdmNtcG5lcV91cXBzIHZjbXBuZXFwcyB2Y21wbmx0X3VzcHMgdmNtcG5sdHBzIHZjbXBubGVfdXNwcyB2Y21wbmxlcHMgdmNtcG9yZF9xcHMgdmNtcG9yZHBzIHZjbXBlcV91cXBzIHZjbXBuZ2VfdXNwcyB2Y21wbmdlcHMgdmNtcG5ndF91c3BzIHZjbXBuZ3RwcyB2Y21wZmFsc2Vfb3FwcyB2Y21wZmFsc2VwcyB2Y21wbmVxX29xcHMgdmNtcGdlX29zcHMgdmNtcGdlcHMgdmNtcGd0X29zcHMgdmNtcGd0cHMgdmNtcHRydWVfdXFwcyB2Y21wdHJ1ZXBzIHZjbXBsdF9vcXBzIHZjbXBsZV9vcXBzIHZjbXB1bm9yZF9zcHMgdmNtcG5lcV91c3BzIHZjbXBubHRfdXFwcyB2Y21wbmxlX3VxcHMgdmNtcG9yZF9zcHMgdmNtcGVxX3VzcHMgdmNtcG5nZV91cXBzIHZjbXBuZ3RfdXFwcyB2Y21wZmFsc2Vfb3NwcyB2Y21wbmVxX29zcHMgdmNtcGdlX29xcHMgdmNtcGd0X29xcHMgdmNtcHRydWVfdXNwcyB2Y21wcHMgdmNtcGVxX29zc2QgdmNtcGVxc2QgdmNtcGx0X29zc2QgdmNtcGx0c2QgdmNtcGxlX29zc2QgdmNtcGxlc2QgdmNtcHVub3JkX3FzZCB2Y21wdW5vcmRzZCB2Y21wbmVxX3Vxc2QgdmNtcG5lcXNkIHZjbXBubHRfdXNzZCB2Y21wbmx0c2QgdmNtcG5sZV91c3NkIHZjbXBubGVzZCB2Y21wb3JkX3FzZCB2Y21wb3Jkc2QgdmNtcGVxX3Vxc2QgdmNtcG5nZV91c3NkIHZjbXBuZ2VzZCB2Y21wbmd0X3Vzc2QgdmNtcG5ndHNkIHZjbXBmYWxzZV9vcXNkIHZjbXBmYWxzZXNkIHZjbXBuZXFfb3FzZCB2Y21wZ2Vfb3NzZCB2Y21wZ2VzZCB2Y21wZ3Rfb3NzZCB2Y21wZ3RzZCB2Y21wdHJ1ZV91cXNkIHZjbXB0cnVlc2QgdmNtcGx0X29xc2QgdmNtcGxlX29xc2QgdmNtcHVub3JkX3NzZCB2Y21wbmVxX3Vzc2QgdmNtcG5sdF91cXNkIHZjbXBubGVfdXFzZCB2Y21wb3JkX3NzZCB2Y21wZXFfdXNzZCB2Y21wbmdlX3Vxc2QgdmNtcG5ndF91cXNkIHZjbXBmYWxzZV9vc3NkIHZjbXBuZXFfb3NzZCB2Y21wZ2Vfb3FzZCB2Y21wZ3Rfb3FzZCB2Y21wdHJ1ZV91c3NkIHZjbXBzZCB2Y21wZXFfb3NzcyB2Y21wZXFzcyB2Y21wbHRfb3NzcyB2Y21wbHRzcyB2Y21wbGVfb3NzcyB2Y21wbGVzcyB2Y21wdW5vcmRfcXNzIHZjbXB1bm9yZHNzIHZjbXBuZXFfdXFzcyB2Y21wbmVxc3MgdmNtcG5sdF91c3NzIHZjbXBubHRzcyB2Y21wbmxlX3Vzc3MgdmNtcG5sZXNzIHZjbXBvcmRfcXNzIHZjbXBvcmRzcyB2Y21wZXFfdXFzcyB2Y21wbmdlX3Vzc3MgdmNtcG5nZXNzIHZjbXBuZ3RfdXNzcyB2Y21wbmd0c3MgdmNtcGZhbHNlX29xc3MgdmNtcGZhbHNlc3MgdmNtcG5lcV9vcXNzIHZjbXBnZV9vc3NzIHZjbXBnZXNzIHZjbXBndF9vc3NzIHZjbXBndHNzIHZjbXB0cnVlX3Vxc3MgdmNtcHRydWVzcyB2Y21wbHRfb3FzcyB2Y21wbGVfb3FzcyB2Y21wdW5vcmRfc3NzIHZjbXBuZXFfdXNzcyB2Y21wbmx0X3Vxc3MgdmNtcG5sZV91cXNzIHZjbXBvcmRfc3NzIHZjbXBlcV91c3NzIHZjbXBuZ2VfdXFzcyB2Y21wbmd0X3Vxc3MgdmNtcGZhbHNlX29zc3MgdmNtcG5lcV9vc3NzIHZjbXBnZV9vcXNzIHZjbXBndF9vcXNzIHZjbXB0cnVlX3Vzc3MgdmNtcHNzIHZjb21pc2QgdmNvbWlzcyB2Y3Z0ZHEycGQgdmN2dGRxMnBzIHZjdnRwZDJkcSB2Y3Z0cGQycHMgdmN2dHBzMmRxIHZjdnRwczJwZCB2Y3Z0c2Qyc2kgdmN2dHNkMnNzIHZjdnRzaTJzZCB2Y3Z0c2kyc3MgdmN2dHNzMnNkIHZjdnRzczJzaSB2Y3Z0dHBkMmRxIHZjdnR0cHMyZHEgdmN2dHRzZDJzaSB2Y3Z0dHNzMnNpIHZkaXZwZCB2ZGl2cHMgdmRpdnNkIHZkaXZzcyB2ZHBwZCB2ZHBwcyB2ZXh0cmFjdGYxMjggdmV4dHJhY3RwcyB2aGFkZHBkIHZoYWRkcHMgdmhzdWJwZCB2aHN1YnBzIHZpbnNlcnRmMTI4IHZpbnNlcnRwcyB2bGRkcXUgdmxkcXF1IHZsZG14Y3NyIHZtYXNrbW92ZHF1IHZtYXNrbW92cHMgdm1hc2ttb3ZwZCB2bWF4cGQgdm1heHBzIHZtYXhzZCB2bWF4c3Mgdm1pbnBkIHZtaW5wcyB2bWluc2Qgdm1pbnNzIHZtb3ZhcGQgdm1vdmFwcyB2bW92ZCB2bW92cSB2bW92ZGR1cCB2bW92ZHFhIHZtb3ZxcWEgdm1vdmRxdSB2bW92cXF1IHZtb3ZobHBzIHZtb3ZocGQgdm1vdmhwcyB2bW92bGhwcyB2bW92bHBkIHZtb3ZscHMgdm1vdm1za3BkIHZtb3Ztc2twcyB2bW92bnRkcSB2bW92bnRxcSB2bW92bnRkcWEgdm1vdm50cGQgdm1vdm50cHMgdm1vdnNkIHZtb3ZzaGR1cCB2bW92c2xkdXAgdm1vdnNzIHZtb3Z1cGQgdm1vdnVwcyB2bXBzYWRidyB2bXVscGQgdm11bHBzIHZtdWxzZCB2bXVsc3Mgdm9ycGQgdm9ycHMgdnBhYnNiIHZwYWJzdyB2cGFic2QgdnBhY2tzc3diIHZwYWNrc3NkdyB2cGFja3Vzd2IgdnBhY2t1c2R3IHZwYWRkYiB2cGFkZHcgdnBhZGRkIHZwYWRkcSB2cGFkZHNiIHZwYWRkc3cgdnBhZGR1c2IgdnBhZGR1c3cgdnBhbGlnbnIgdnBhbmQgdnBhbmRuIHZwYXZnYiB2cGF2Z3cgdnBibGVuZHZiIHZwYmxlbmR3IHZwY21wZXN0cmkgdnBjbXBlc3RybSB2cGNtcGlzdHJpIHZwY21waXN0cm0gdnBjbXBlcWIgdnBjbXBlcXcgdnBjbXBlcWQgdnBjbXBlcXEgdnBjbXBndGIgdnBjbXBndHcgdnBjbXBndGQgdnBjbXBndHEgdnBlcm1pbHBkIHZwZXJtaWxwcyB2cGVybTJmMTI4IHZwZXh0cmIgdnBleHRydyB2cGV4dHJkIHZwZXh0cnEgdnBoYWRkdyB2cGhhZGRkIHZwaGFkZHN3IHZwaG1pbnBvc3V3IHZwaHN1YncgdnBoc3ViZCB2cGhzdWJzdyB2cGluc3JiIHZwaW5zcncgdnBpbnNyZCB2cGluc3JxIHZwbWFkZHdkIHZwbWFkZHVic3cgdnBtYXhzYiB2cG1heHN3IHZwbWF4c2QgdnBtYXh1YiB2cG1heHV3IHZwbWF4dWQgdnBtaW5zYiB2cG1pbnN3IHZwbWluc2QgdnBtaW51YiB2cG1pbnV3IHZwbWludWQgdnBtb3Ztc2tiIHZwbW92c3hidyB2cG1vdnN4YmQgdnBtb3ZzeGJxIHZwbW92c3h3ZCB2cG1vdnN4d3EgdnBtb3ZzeGRxIHZwbW92enhidyB2cG1vdnp4YmQgdnBtb3Z6eGJxIHZwbW92enh3ZCB2cG1vdnp4d3EgdnBtb3Z6eGRxIHZwbXVsaHV3IHZwbXVsaHJzdyB2cG11bGh3IHZwbXVsbHcgdnBtdWxsZCB2cG11bHVkcSB2cG11bGRxIHZwb3IgdnBzYWRidyB2cHNodWZiIHZwc2h1ZmQgdnBzaHVmaHcgdnBzaHVmbHcgdnBzaWduYiB2cHNpZ253IHZwc2lnbmQgdnBzbGxkcSB2cHNybGRxIHZwc2xsdyB2cHNsbGQgdnBzbGxxIHZwc3JhdyB2cHNyYWQgdnBzcmx3IHZwc3JsZCB2cHNybHEgdnB0ZXN0IHZwc3ViYiB2cHN1YncgdnBzdWJkIHZwc3VicSB2cHN1YnNiIHZwc3Vic3cgdnBzdWJ1c2IgdnBzdWJ1c3cgdnB1bnBja2hidyB2cHVucGNraHdkIHZwdW5wY2toZHEgdnB1bnBja2hxZHEgdnB1bnBja2xidyB2cHVucGNrbHdkIHZwdW5wY2tsZHEgdnB1bnBja2xxZHEgdnB4b3IgdnJjcHBzIHZyY3BzcyB2cnNxcnRwcyB2cnNxcnRzcyB2cm91bmRwZCB2cm91bmRwcyB2cm91bmRzZCB2cm91bmRzcyB2c2h1ZnBkIHZzaHVmcHMgdnNxcnRwZCB2c3FydHBzIHZzcXJ0c2QgdnNxcnRzcyB2c3RteGNzciB2c3VicGQgdnN1YnBzIHZzdWJzZCB2c3Vic3MgdnRlc3RwcyB2dGVzdHBkIHZ1Y29taXNkIHZ1Y29taXNzIHZ1bnBja2hwZCB2dW5wY2tocHMgdnVucGNrbHBkIHZ1bnBja2xwcyB2eG9ycGQgdnhvcnBzIHZ6ZXJvYWxsIHZ6ZXJvdXBwZXIgcGNsbXVsbHFscWRxIHBjbG11bGhxbHFkcSBwY2xtdWxscWhxZHEgcGNsbXVsaHFocWRxIHBjbG11bHFkcSB2cGNsbXVsbHFscWRxIHZwY2xtdWxocWxxZHEgdnBjbG11bGxxaHFkcSB2cGNsbXVsaHFocWRxIHZwY2xtdWxxZHEgdmZtYWRkMTMycHMgdmZtYWRkMTMycGQgdmZtYWRkMzEycHMgdmZtYWRkMzEycGQgdmZtYWRkMjEzcHMgdmZtYWRkMjEzcGQgdmZtYWRkMTIzcHMgdmZtYWRkMTIzcGQgdmZtYWRkMjMxcHMgdmZtYWRkMjMxcGQgdmZtYWRkMzIxcHMgdmZtYWRkMzIxcGQgdmZtYWRkc3ViMTMycHMgdmZtYWRkc3ViMTMycGQgdmZtYWRkc3ViMzEycHMgdmZtYWRkc3ViMzEycGQgdmZtYWRkc3ViMjEzcHMgdmZtYWRkc3ViMjEzcGQgdmZtYWRkc3ViMTIzcHMgdmZtYWRkc3ViMTIzcGQgdmZtYWRkc3ViMjMxcHMgdmZtYWRkc3ViMjMxcGQgdmZtYWRkc3ViMzIxcHMgdmZtYWRkc3ViMzIxcGQgdmZtc3ViMTMycHMgdmZtc3ViMTMycGQgdmZtc3ViMzEycHMgdmZtc3ViMzEycGQgdmZtc3ViMjEzcHMgdmZtc3ViMjEzcGQgdmZtc3ViMTIzcHMgdmZtc3ViMTIzcGQgdmZtc3ViMjMxcHMgdmZtc3ViMjMxcGQgdmZtc3ViMzIxcHMgdmZtc3ViMzIxcGQgdmZtc3ViYWRkMTMycHMgdmZtc3ViYWRkMTMycGQgdmZtc3ViYWRkMzEycHMgdmZtc3ViYWRkMzEycGQgdmZtc3ViYWRkMjEzcHMgdmZtc3ViYWRkMjEzcGQgdmZtc3ViYWRkMTIzcHMgdmZtc3ViYWRkMTIzcGQgdmZtc3ViYWRkMjMxcHMgdmZtc3ViYWRkMjMxcGQgdmZtc3ViYWRkMzIxcHMgdmZtc3ViYWRkMzIxcGQgdmZubWFkZDEzMnBzIHZmbm1hZGQxMzJwZCB2Zm5tYWRkMzEycHMgdmZubWFkZDMxMnBkIHZmbm1hZGQyMTNwcyB2Zm5tYWRkMjEzcGQgdmZubWFkZDEyM3BzIHZmbm1hZGQxMjNwZCB2Zm5tYWRkMjMxcHMgdmZubWFkZDIzMXBkIHZmbm1hZGQzMjFwcyB2Zm5tYWRkMzIxcGQgdmZubXN1YjEzMnBzIHZmbm1zdWIxMzJwZCB2Zm5tc3ViMzEycHMgdmZubXN1YjMxMnBkIHZmbm1zdWIyMTNwcyB2Zm5tc3ViMjEzcGQgdmZubXN1YjEyM3BzIHZmbm1zdWIxMjNwZCB2Zm5tc3ViMjMxcHMgdmZubXN1YjIzMXBkIHZmbm1zdWIzMjFwcyB2Zm5tc3ViMzIxcGQgdmZtYWRkMTMyc3MgdmZtYWRkMTMyc2QgdmZtYWRkMzEyc3MgdmZtYWRkMzEyc2QgdmZtYWRkMjEzc3MgdmZtYWRkMjEzc2QgdmZtYWRkMTIzc3MgdmZtYWRkMTIzc2QgdmZtYWRkMjMxc3MgdmZtYWRkMjMxc2QgdmZtYWRkMzIxc3MgdmZtYWRkMzIxc2QgdmZtc3ViMTMyc3MgdmZtc3ViMTMyc2QgdmZtc3ViMzEyc3MgdmZtc3ViMzEyc2QgdmZtc3ViMjEzc3MgdmZtc3ViMjEzc2QgdmZtc3ViMTIzc3MgdmZtc3ViMTIzc2QgdmZtc3ViMjMxc3MgdmZtc3ViMjMxc2QgdmZtc3ViMzIxc3MgdmZtc3ViMzIxc2QgdmZubWFkZDEzMnNzIHZmbm1hZGQxMzJzZCB2Zm5tYWRkMzEyc3MgdmZubWFkZDMxMnNkIHZmbm1hZGQyMTNzcyB2Zm5tYWRkMjEzc2QgdmZubWFkZDEyM3NzIHZmbm1hZGQxMjNzZCB2Zm5tYWRkMjMxc3MgdmZubWFkZDIzMXNkIHZmbm1hZGQzMjFzcyB2Zm5tYWRkMzIxc2QgdmZubXN1YjEzMnNzIHZmbm1zdWIxMzJzZCB2Zm5tc3ViMzEyc3MgdmZubXN1YjMxMnNkIHZmbm1zdWIyMTNzcyB2Zm5tc3ViMjEzc2QgdmZubXN1YjEyM3NzIHZmbm1zdWIxMjNzZCB2Zm5tc3ViMjMxc3MgdmZubXN1YjIzMXNkIHZmbm1zdWIzMjFzcyB2Zm5tc3ViMzIxc2QgcmRmc2Jhc2UgcmRnc2Jhc2UgcmRyYW5kIHdyZnNiYXNlIHdyZ3NiYXNlIHZjdnRwaDJwcyB2Y3Z0cHMycGggYWRjeCBhZG94IHJkc2VlZCBjbGFjIHN0YWMgeHN0b3JlIHhjcnlwdGVjYiB4Y3J5cHRjYmMgeGNyeXB0Y3RyIHhjcnlwdGNmYiB4Y3J5cHRvZmIgbW9udG11bCB4c2hhMSB4c2hhMjU2IGxsd3BjYiBzbHdwY2IgbHdwdmFsIGx3cGlucyB2Zm1hZGRwZCB2Zm1hZGRwcyB2Zm1hZGRzZCB2Zm1hZGRzcyB2Zm1hZGRzdWJwZCB2Zm1hZGRzdWJwcyB2Zm1zdWJhZGRwZCB2Zm1zdWJhZGRwcyB2Zm1zdWJwZCB2Zm1zdWJwcyB2Zm1zdWJzZCB2Zm1zdWJzcyB2Zm5tYWRkcGQgdmZubWFkZHBzIHZmbm1hZGRzZCB2Zm5tYWRkc3MgdmZubXN1YnBkIHZmbm1zdWJwcyB2Zm5tc3Vic2QgdmZubXN1YnNzIHZmcmN6cGQgdmZyY3pwcyB2ZnJjenNkIHZmcmN6c3MgdnBjbW92IHZwY29tYiB2cGNvbWQgdnBjb21xIHZwY29tdWIgdnBjb211ZCB2cGNvbXVxIHZwY29tdXcgdnBjb213IHZwaGFkZGJkIHZwaGFkZGJxIHZwaGFkZGJ3IHZwaGFkZGRxIHZwaGFkZHViZCB2cGhhZGR1YnEgdnBoYWRkdWJ3IHZwaGFkZHVkcSB2cGhhZGR1d2QgdnBoYWRkdXdxIHZwaGFkZHdkIHZwaGFkZHdxIHZwaHN1YmJ3IHZwaHN1YmRxIHZwaHN1YndkIHZwbWFjc2RkIHZwbWFjc2RxaCB2cG1hY3NkcWwgdnBtYWNzc2RkIHZwbWFjc3NkcWggdnBtYWNzc2RxbCB2cG1hY3Nzd2QgdnBtYWNzc3d3IHZwbWFjc3dkIHZwbWFjc3d3IHZwbWFkY3Nzd2QgdnBtYWRjc3dkIHZwcGVybSB2cHJvdGIgdnByb3RkIHZwcm90cSB2cHJvdHcgdnBzaGFiIHZwc2hhZCB2cHNoYXEgdnBzaGF3IHZwc2hsYiB2cHNobGQgdnBzaGxxIHZwc2hsdyB2YnJvYWRjYXN0aTEyOCB2cGJsZW5kZCB2cGJyb2FkY2FzdGIgdnBicm9hZGNhc3R3IHZwYnJvYWRjYXN0ZCB2cGJyb2FkY2FzdHEgdnBlcm1kIHZwZXJtcGQgdnBlcm1wcyB2cGVybXEgdnBlcm0yaTEyOCB2ZXh0cmFjdGkxMjggdmluc2VydGkxMjggdnBtYXNrbW92ZCB2cG1hc2ttb3ZxIHZwc2xsdmQgdnBzbGx2cSB2cHNyYXZkIHZwc3JsdmQgdnBzcmx2cSB2Z2F0aGVyZHBkIHZnYXRoZXJxcGQgdmdhdGhlcmRwcyB2Z2F0aGVycXBzIHZwZ2F0aGVyZGQgdnBnYXRoZXJxZCB2cGdhdGhlcmRxIHZwZ2F0aGVycXEgeGFib3J0IHhiZWdpbiB4ZW5kIHh0ZXN0IGFuZG4gYmV4dHIgYmxjaSBibGNpYyBibHNpIGJsc2ljIGJsY2ZpbGwgYmxzZmlsbCBibGNtc2sgYmxzbXNrIGJsc3IgYmxjcyBiemhpIG11bHggcGRlcCBwZXh0IHJvcnggc2FyeCBzaGx4IHNocnggdHpjbnQgdHptc2sgdDFtc2tjIHZhbGlnbmQgdmFsaWducSB2YmxlbmRtcGQgdmJsZW5kbXBzIHZicm9hZGNhc3RmMzJ4NCB2YnJvYWRjYXN0ZjY0eDQgdmJyb2FkY2FzdGkzMng0IHZicm9hZGNhc3RpNjR4NCB2Y29tcHJlc3NwZCB2Y29tcHJlc3NwcyB2Y3Z0cGQydWRxIHZjdnRwczJ1ZHEgdmN2dHNkMnVzaSB2Y3Z0c3MydXNpIHZjdnR0cGQydWRxIHZjdnR0cHMydWRxIHZjdnR0c2QydXNpIHZjdnR0c3MydXNpIHZjdnR1ZHEycGQgdmN2dHVkcTJwcyB2Y3Z0dXNpMnNkIHZjdnR1c2kyc3MgdmV4cGFuZHBkIHZleHBhbmRwcyB2ZXh0cmFjdGYzMng0IHZleHRyYWN0ZjY0eDQgdmV4dHJhY3RpMzJ4NCB2ZXh0cmFjdGk2NHg0IHZmaXh1cGltbXBkIHZmaXh1cGltbXBzIHZmaXh1cGltbXNkIHZmaXh1cGltbXNzIHZnZXRleHBwZCB2Z2V0ZXhwcHMgdmdldGV4cHNkIHZnZXRleHBzcyB2Z2V0bWFudHBkIHZnZXRtYW50cHMgdmdldG1hbnRzZCB2Z2V0bWFudHNzIHZpbnNlcnRmMzJ4NCB2aW5zZXJ0ZjY0eDQgdmluc2VydGkzMng0IHZpbnNlcnRpNjR4NCB2bW92ZHFhMzIgdm1vdmRxYTY0IHZtb3ZkcXUzMiB2bW92ZHF1NjQgdnBhYnNxIHZwYW5kZCB2cGFuZG5kIHZwYW5kbnEgdnBhbmRxIHZwYmxlbmRtZCB2cGJsZW5kbXEgdnBjbXBsdGQgdnBjbXBsZWQgdnBjbXBuZXFkIHZwY21wbmx0ZCB2cGNtcG5sZWQgdnBjbXBkIHZwY21wbHRxIHZwY21wbGVxIHZwY21wbmVxcSB2cGNtcG5sdHEgdnBjbXBubGVxIHZwY21wcSB2cGNtcGVxdWQgdnBjbXBsdHVkIHZwY21wbGV1ZCB2cGNtcG5lcXVkIHZwY21wbmx0dWQgdnBjbXBubGV1ZCB2cGNtcHVkIHZwY21wZXF1cSB2cGNtcGx0dXEgdnBjbXBsZXVxIHZwY21wbmVxdXEgdnBjbXBubHR1cSB2cGNtcG5sZXVxIHZwY21wdXEgdnBjb21wcmVzc2QgdnBjb21wcmVzc3EgdnBlcm1pMmQgdnBlcm1pMnBkIHZwZXJtaTJwcyB2cGVybWkycSB2cGVybXQyZCB2cGVybXQycGQgdnBlcm10MnBzIHZwZXJtdDJxIHZwZXhwYW5kZCB2cGV4cGFuZHEgdnBtYXhzcSB2cG1heHVxIHZwbWluc3EgdnBtaW51cSB2cG1vdmRiIHZwbW92ZHcgdnBtb3ZxYiB2cG1vdnFkIHZwbW92cXcgdnBtb3ZzZGIgdnBtb3ZzZHcgdnBtb3ZzcWIgdnBtb3ZzcWQgdnBtb3ZzcXcgdnBtb3Z1c2RiIHZwbW92dXNkdyB2cG1vdnVzcWIgdnBtb3Z1c3FkIHZwbW92dXNxdyB2cG9yZCB2cG9ycSB2cHJvbGQgdnByb2xxIHZwcm9sdmQgdnByb2x2cSB2cHJvcmQgdnByb3JxIHZwcm9ydmQgdnByb3J2cSB2cHNjYXR0ZXJkZCB2cHNjYXR0ZXJkcSB2cHNjYXR0ZXJxZCB2cHNjYXR0ZXJxcSB2cHNyYXEgdnBzcmF2cSB2cHRlcm5sb2dkIHZwdGVybmxvZ3EgdnB0ZXN0bWQgdnB0ZXN0bXEgdnB0ZXN0bm1kIHZwdGVzdG5tcSB2cHhvcmQgdnB4b3JxIHZyY3AxNHBkIHZyY3AxNHBzIHZyY3AxNHNkIHZyY3AxNHNzIHZybmRzY2FsZXBkIHZybmRzY2FsZXBzIHZybmRzY2FsZXNkIHZybmRzY2FsZXNzIHZyc3FydDE0cGQgdnJzcXJ0MTRwcyB2cnNxcnQxNHNkIHZyc3FydDE0c3MgdnNjYWxlZnBkIHZzY2FsZWZwcyB2c2NhbGVmc2QgdnNjYWxlZnNzIHZzY2F0dGVyZHBkIHZzY2F0dGVyZHBzIHZzY2F0dGVycXBkIHZzY2F0dGVycXBzIHZzaHVmZjMyeDQgdnNodWZmNjR4MiB2c2h1ZmkzMng0IHZzaHVmaTY0eDIga2FuZG53IGthbmR3IGttb3Z3IGtub3R3IGtvcnRlc3R3IGtvcncga3NoaWZ0bHcga3NoaWZ0cncga3VucGNrYncga3hub3J3IGt4b3J3IHZwYnJvYWRjYXN0bWIycSB2cGJyb2FkY2FzdG13MmQgdnBjb25mbGljdGQgdnBjb25mbGljdHEgdnBsemNudGQgdnBsemNudHEgdmV4cDJwZCB2ZXhwMnBzIHZyY3AyOHBkIHZyY3AyOHBzIHZyY3AyOHNkIHZyY3AyOHNzIHZyc3FydDI4cGQgdnJzcXJ0MjhwcyB2cnNxcnQyOHNkIHZyc3FydDI4c3MgdmdhdGhlcnBmMGRwZCB2Z2F0aGVycGYwZHBzIHZnYXRoZXJwZjBxcGQgdmdhdGhlcnBmMHFwcyB2Z2F0aGVycGYxZHBkIHZnYXRoZXJwZjFkcHMgdmdhdGhlcnBmMXFwZCB2Z2F0aGVycGYxcXBzIHZzY2F0dGVycGYwZHBkIHZzY2F0dGVycGYwZHBzIHZzY2F0dGVycGYwcXBkIHZzY2F0dGVycGYwcXBzIHZzY2F0dGVycGYxZHBkIHZzY2F0dGVycGYxZHBzIHZzY2F0dGVycGYxcXBkIHZzY2F0dGVycGYxcXBzIHByZWZldGNod3QxIGJuZG1rIGJuZGNsIGJuZGN1IGJuZGNuIGJuZG1vdiBibmRsZHggYm5kc3R4IHNoYTFybmRzNCBzaGExbmV4dGUgc2hhMW1zZzEgc2hhMW1zZzIgc2hhMjU2cm5kczIgc2hhMjU2bXNnMSBzaGEyNTZtc2cyIGhpbnRfbm9wMCBoaW50X25vcDEgaGludF9ub3AyIGhpbnRfbm9wMyBoaW50X25vcDQgaGludF9ub3A1IGhpbnRfbm9wNiBoaW50X25vcDcgaGludF9ub3A4IGhpbnRfbm9wOSBoaW50X25vcDEwIGhpbnRfbm9wMTEgaGludF9ub3AxMiBoaW50X25vcDEzIGhpbnRfbm9wMTQgaGludF9ub3AxNSBoaW50X25vcDE2IGhpbnRfbm9wMTcgaGludF9ub3AxOCBoaW50X25vcDE5IGhpbnRfbm9wMjAgaGludF9ub3AyMSBoaW50X25vcDIyIGhpbnRfbm9wMjMgaGludF9ub3AyNCBoaW50X25vcDI1IGhpbnRfbm9wMjYgaGludF9ub3AyNyBoaW50X25vcDI4IGhpbnRfbm9wMjkgaGludF9ub3AzMCBoaW50X25vcDMxIGhpbnRfbm9wMzIgaGludF9ub3AzMyBoaW50X25vcDM0IGhpbnRfbm9wMzUgaGludF9ub3AzNiBoaW50X25vcDM3IGhpbnRfbm9wMzggaGludF9ub3AzOSBoaW50X25vcDQwIGhpbnRfbm9wNDEgaGludF9ub3A0MiBoaW50X25vcDQzIGhpbnRfbm9wNDQgaGludF9ub3A0NSBoaW50X25vcDQ2IGhpbnRfbm9wNDcgaGludF9ub3A0OCBoaW50X25vcDQ5IGhpbnRfbm9wNTAgaGludF9ub3A1MSBoaW50X25vcDUyIGhpbnRfbm9wNTMgaGludF9ub3A1NCBoaW50X25vcDU1IGhpbnRfbm9wNTYgaGludF9ub3A1NyBoaW50X25vcDU4IGhpbnRfbm9wNTkgaGludF9ub3A2MCBoaW50X25vcDYxIGhpbnRfbm9wNjIgaGludF9ub3A2MycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gcG9pbnRlclxuICAgICAgICAnaXAgZWlwIHJpcCAnICtcbiAgICAgICAgLy8gOC1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdhbCBhaCBibCBiaCBjbCBjaCBkbCBkaCBzaWwgZGlsIGJwbCBzcGwgcjhiIHI5YiByMTBiIHIxMWIgcjEyYiByMTNiIHIxNGIgcjE1YiAnICtcbiAgICAgICAgLy8gMTYtYml0IHJlZ2lzdGVyc1xuICAgICAgICAnYXggYnggY3ggZHggc2kgZGkgYnAgc3Agcjh3IHI5dyByMTB3IHIxMXcgcjEydyByMTN3IHIxNHcgcjE1dyAnICtcbiAgICAgICAgLy8gMzItYml0IHJlZ2lzdGVyc1xuICAgICAgICAnZWF4IGVieCBlY3ggZWR4IGVzaSBlZGkgZWJwIGVzcCBlaXAgcjhkIHI5ZCByMTBkIHIxMWQgcjEyZCByMTNkIHIxNGQgcjE1ZCAnICtcbiAgICAgICAgLy8gNjQtYml0IHJlZ2lzdGVyc1xuICAgICAgICAncmF4IHJieCByY3ggcmR4IHJzaSByZGkgcmJwIHJzcCByOCByOSByMTAgcjExIHIxMiByMTMgcjE0IHIxNSAnICtcbiAgICAgICAgLy8gU2VnbWVudCByZWdpc3RlcnNcbiAgICAgICAgJ2NzIGRzIGVzIGZzIGdzIHNzICcgK1xuICAgICAgICAvLyBGbG9hdGluZyBwb2ludCBzdGFjayByZWdpc3RlcnNcbiAgICAgICAgJ3N0IHN0MCBzdDEgc3QyIHN0MyBzdDQgc3Q1IHN0NiBzdDcgJyArXG4gICAgICAgIC8vIE1NWCBSZWdpc3RlcnNcbiAgICAgICAgJ21tMCBtbTEgbW0yIG1tMyBtbTQgbW01IG1tNiBtbTcgJyArXG4gICAgICAgIC8vIFNTRSByZWdpc3RlcnNcbiAgICAgICAgJ3htbTAgIHhtbTEgIHhtbTIgIHhtbTMgIHhtbTQgIHhtbTUgIHhtbTYgIHhtbTcgIHhtbTggIHhtbTkgeG1tMTAgIHhtbTExIHhtbTEyIHhtbTEzIHhtbTE0IHhtbTE1ICcgK1xuICAgICAgICAneG1tMTYgeG1tMTcgeG1tMTggeG1tMTkgeG1tMjAgeG1tMjEgeG1tMjIgeG1tMjMgeG1tMjQgeG1tMjUgeG1tMjYgeG1tMjcgeG1tMjggeG1tMjkgeG1tMzAgeG1tMzEgJyArXG4gICAgICAgIC8vIEFWWCByZWdpc3RlcnNcbiAgICAgICAgJ3ltbTAgIHltbTEgIHltbTIgIHltbTMgIHltbTQgIHltbTUgIHltbTYgIHltbTcgIHltbTggIHltbTkgeW1tMTAgIHltbTExIHltbTEyIHltbTEzIHltbTE0IHltbTE1ICcgK1xuICAgICAgICAneW1tMTYgeW1tMTcgeW1tMTggeW1tMTkgeW1tMjAgeW1tMjEgeW1tMjIgeW1tMjMgeW1tMjQgeW1tMjUgeW1tMjYgeW1tMjcgeW1tMjggeW1tMjkgeW1tMzAgeW1tMzEgJyArXG4gICAgICAgIC8vIEFWWC01MTJGIHJlZ2lzdGVyc1xuICAgICAgICAnem1tMCAgem1tMSAgem1tMiAgem1tMyAgem1tNCAgem1tNSAgem1tNiAgem1tNyAgem1tOCAgem1tOSB6bW0xMCAgem1tMTEgem1tMTIgem1tMTMgem1tMTQgem1tMTUgJyArXG4gICAgICAgICd6bW0xNiB6bW0xNyB6bW0xOCB6bW0xOSB6bW0yMCB6bW0yMSB6bW0yMiB6bW0yMyB6bW0yNCB6bW0yNSB6bW0yNiB6bW0yNyB6bW0yOCB6bW0yOSB6bW0zMCB6bW0zMSAnICtcbiAgICAgICAgLy8gQVZYLTUxMkYgbWFzayByZWdpc3RlcnNcbiAgICAgICAgJ2swIGsxIGsyIGszIGs0IGs1IGs2IGs3ICcgK1xuICAgICAgICAvLyBCb3VuZCAoTVBYKSByZWdpc3RlclxuICAgICAgICAnYm5kMCBibmQxIGJuZDIgYm5kMyAnICtcbiAgICAgICAgLy8gU3BlY2lhbCByZWdpc3RlclxuICAgICAgICAnY3IwIGNyMSBjcjIgY3IzIGNyNCBjcjggZHIwIGRyMSBkcjIgZHIzIGRyOCB0cjMgdHI0IHRyNSB0cjYgdHI3ICcgK1xuICAgICAgICAvLyBOQVNNIGFsdHJlZyBwYWNrYWdlXG4gICAgICAgICdyMCByMSByMiByMyByNCByNSByNiByNyByMGIgcjFiIHIyYiByM2IgcjRiIHI1YiByNmIgcjdiICcgK1xuICAgICAgICAncjB3IHIxdyByMncgcjN3IHI0dyByNXcgcjZ3IHI3dyByMGQgcjFkIHIyZCByM2QgcjRkIHI1ZCByNmQgcjdkICcgK1xuICAgICAgICAncjBoIHIxaCByMmggcjNoICcgK1xuICAgICAgICAncjBsIHIxbCByMmwgcjNsIHI0bCByNWwgcjZsIHI3bCByOGwgcjlsIHIxMGwgcjExbCByMTJsIHIxM2wgcjE0bCByMTVsICcgK1xuXG4gICAgICAgICdkYiBkdyBkZCBkcSBkdCBkZHEgZG8gZHkgZHogJyArXG4gICAgICAgICdyZXNiIHJlc3cgcmVzZCByZXNxIHJlc3QgcmVzZHEgcmVzbyByZXN5IHJlc3ogJyArXG4gICAgICAgICdpbmNiaW4gZXF1IHRpbWVzICcgK1xuICAgICAgICAnYnl0ZSB3b3JkIGR3b3JkIHF3b3JkIG5vc3BsaXQgcmVsIGFicyBzZWcgd3J0IHN0cmljdCBuZWFyIGZhciBhMzIgcHRyJyxcblxuICAgICAgbWV0YTpcbiAgICAgICAgJyVkZWZpbmUgJXhkZWZpbmUgJSsgJXVuZGVmICVkZWZzdHIgJWRlZnRvayAlYXNzaWduICVzdHJjYXQgJXN0cmxlbiAlc3Vic3RyICVyb3RhdGUgJWVsaWYgJWVsc2UgJWVuZGlmICcgK1xuICAgICAgICAnJWlmICVpZm1hY3JvICVpZmN0eCAlaWZpZG4gJWlmaWRuaSAlaWZpZCAlaWZudW0gJWlmc3RyICVpZnRva2VuICVpZmVtcHR5ICVpZmVudiAlZXJyb3IgJXdhcm5pbmcgJWZhdGFsICVyZXAgJyArXG4gICAgICAgICclZW5kcmVwICVpbmNsdWRlICVwdXNoICVwb3AgJXJlcGwgJXBhdGhzZWFyY2ggJWRlcGVuZCAldXNlICVhcmcgJXN0YWNrc2l6ZSAlbG9jYWwgJWxpbmUgJWNvbW1lbnQgJWVuZGNvbW1lbnQgJyArXG4gICAgICAgICcubm9saXN0ICcgK1xuICAgICAgICAnX19GSUxFX18gX19MSU5FX18gX19TRUNUX18gIF9fQklUU19fIF9fT1VUUFVUX0ZPUk1BVF9fIF9fREFURV9fIF9fVElNRV9fIF9fREFURV9OVU1fXyBfX1RJTUVfTlVNX18gJyArXG4gICAgICAgICdfX1VUQ19EQVRFX18gX19VVENfVElNRV9fIF9fVVRDX0RBVEVfTlVNX18gX19VVENfVElNRV9OVU1fXyAgX19QQVNTX18gc3RydWMgZW5kc3RydWMgaXN0cnVjIGF0IGllbmQgJyArXG4gICAgICAgICdhbGlnbiBhbGlnbmIgc2VjdGFsaWduIGRheiBub2RheiB1cCBkb3duIHplcm8gZGVmYXVsdCBvcHRpb24gYXNzdW1lIHB1YmxpYyAnICtcblxuICAgICAgICAnYml0cyB1c2UxNiB1c2UzMiB1c2U2NCBkZWZhdWx0IHNlY3Rpb24gc2VnbWVudCBhYnNvbHV0ZSBleHRlcm4gZ2xvYmFsIGNvbW1vbiBjcHUgZmxvYXQgJyArXG4gICAgICAgICdfX3V0ZjE2X18gX191dGYxNmxlX18gX191dGYxNmJlX18gX191dGYzMl9fIF9fdXRmMzJsZV9fIF9fdXRmMzJiZV9fICcgK1xuICAgICAgICAnX19mbG9hdDhfXyBfX2Zsb2F0MTZfXyBfX2Zsb2F0MzJfXyBfX2Zsb2F0NjRfXyBfX2Zsb2F0ODBtX18gX19mbG9hdDgwZV9fIF9fZmxvYXQxMjhsX18gX19mbG9hdDEyOGhfXyAnICtcbiAgICAgICAgJ19fSW5maW5pdHlfXyBfX1FOYU5fXyBfX1NOYU5fXyBJbmYgTmFOIFFOYU4gU05hTiBmbG9hdDggZmxvYXQxNiBmbG9hdDMyIGZsb2F0NjQgZmxvYXQ4MG0gZmxvYXQ4MGUgJyArXG4gICAgICAgICdmbG9hdDEyOGwgZmxvYXQxMjhoIF9fRkxPQVRfREFaX18gX19GTE9BVF9ST1VORF9fIF9fRkxPQVRfXydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gRmxvYXQgbnVtYmVyIGFuZCB4ODcgQkNEXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OihbMC05XVswLTlfXSopP1xcXFwuWzAtOV9dKig/OltlRV1bKy1dP1swLTlfXSspP3wnICtcbiAgICAgICAgICAgICAgICAgICAnKDBbWHhdKT9bMC05XVswLTlfXSpcXFxcLj9bMC05X10qKD86W3BQXSg/OlsrLV0/WzAtOV9dKyk/KT8pXFxcXGInLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIC8vIEhleCBudW1iZXIgaW4gJFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcJFswLTldWzAtOUEtRmEtZl0qJywgcmVsZXZhbmNlOiAwIH0sXG5cbiAgICAgICAgICAvLyBOdW1iZXIgaW4gSCxELFQsUSxPLEIsWSBzdWZmaXhcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoPzpbMC05QS1GYS1mXVswLTlBLUZhLWZfXSpbSGhdfFswLTldWzAtOV9dKltEZFR0XT98WzAtN11bMC03X10qW1FxT29dfFswLTFdWzAtMV9dKltCYll5XSlcXFxcYicgfSxcblxuICAgICAgICAgIC8vIE51bWJlciBpbiBYLEQsVCxRLE8sQixZIHByZWZpeFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYig/OjBbWHhdWzAtOUEtRmEtZl9dK3wwW0RkVHRdWzAtOV9dK3wwW1FxT29dWzAtN19dK3wwW0JiWXldWzAtMV9dKylcXFxcYid9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBEb3VibGUgcXVvdGUgc3RyaW5nXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIFNpbmdsZS1xdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ1xcJycsIGVuZDogJ1teXFxcXFxcXFxdXFwnJyB9LFxuICAgICAgICAgIC8vIEJhY2txdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ2AnLCBlbmQ6ICdbXlxcXFxcXFxcXWAnIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIEdsb2JhbCBsYWJlbCBhbmQgbG9jYWwgbGFiZWxcbiAgICAgICAgICB7IGJlZ2luOiAnXlxcXFxzKltBLVphLXouXz9dW0EtWmEtejAtOV8kI0B+Lj9dKig6fFxcXFxzK2xhYmVsKScgfSxcbiAgICAgICAgICAvLyBNYWNyby1sb2NhbCBsYWJlbFxuICAgICAgICAgIHsgYmVnaW46ICdeXFxcXHMqJSVbQS1aYS16MC05XyQjQH4uP10qOicgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyVbMC05XSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBNYWNybyBwYXJhbWV0ZXJcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJyUhXFxTKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypcXC5bXFx3Xy1dKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQlVJTFRJTl9NT0RVTEVTID1cbiAgICAnT2JqZWN0TG9hZGVyIEFuaW1hdGUgTW92aWVDcmVkaXRzIFNsaWRlcyBGaWx0ZXJzIFNoYWRpbmcgTWF0ZXJpYWxzIExlbnNGbGFyZSBNYXBwaW5nIFZMQ0F1ZGlvVmlkZW8gJyArXG4gICAgJ1N0ZXJlb0RlY29kZXIgUG9pbnRDbG91ZCBOZXR3b3JrQWNjZXNzIFJlbW90ZUNvbnRyb2wgUmVnRXhwIENocm9tYUtleSBTbm93ZmFsbCBOb2RlSlMgU3BlZWNoIENoYXJ0cyc7XG5cbiAgdmFyIFhMX0tFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnaWYgdGhlbiBlbHNlIGRvIHdoaWxlIHVudGlsIGZvciBsb29wIGltcG9ydCB3aXRoIGlzIGFzIHdoZXJlIHdoZW4gYnkgZGF0YSBjb25zdGFudCAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgdGV4dCBuYW1lIGJvb2xlYW4gc3ltYm9sIGluZml4IHByZWZpeCBwb3N0Zml4IGJsb2NrIHRyZWUnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2luIG1vZCByZW0gYW5kIG9yIHhvciBub3QgYWJzIHNpZ24gZmxvb3IgY2VpbCBzcXJ0IHNpbiBjb3MgdGFuIGFzaW4gJyArXG4gICAgICAnYWNvcyBhdGFuIGV4cCBleHBtMSBsb2cgbG9nMiBsb2cxMCBsb2cxcCBwaSBhdCB0ZXh0X2xlbmd0aCB0ZXh0X3JhbmdlICcgK1xuICAgICAgJ3RleHRfZmluZCB0ZXh0X3JlcGxhY2UgY29udGFpbnMgcGFnZSBzbGlkZSBiYXNpY19zbGlkZSB0aXRsZV9zbGlkZSAnICtcbiAgICAgICd0aXRsZSBzdWJ0aXRsZSBmYWRlX2luIGZhZGVfb3V0IGZhZGVfYXQgY2xlYXJfY29sb3IgY29sb3IgbGluZV9jb2xvciAnICtcbiAgICAgICdsaW5lX3dpZHRoIHRleHR1cmVfd3JhcCB0ZXh0dXJlX3RyYW5zZm9ybSB0ZXh0dXJlIHNjYWxlXz94IHNjYWxlXz95ICcgK1xuICAgICAgJ3NjYWxlXz96PyB0cmFuc2xhdGVfP3ggdHJhbnNsYXRlXz95IHRyYW5zbGF0ZV8/ej8gcm90YXRlXz94IHJvdGF0ZV8/eSAnICtcbiAgICAgICdyb3RhdGVfP3o/IHJlY3RhbmdsZSBjaXJjbGUgZWxsaXBzZSBzcGhlcmUgcGF0aCBsaW5lX3RvIG1vdmVfdG8gJyArXG4gICAgICAncXVhZF90byBjdXJ2ZV90byB0aGVtZSBiYWNrZ3JvdW5kIGNvbnRlbnRzIGxvY2FsbHkgdGltZSBtb3VzZV8/eCAnICtcbiAgICAgICdtb3VzZV8/eSBtb3VzZV9idXR0b25zICcgK1xuICAgICAgQlVJTFRJTl9NT0RVTEVTXG4gIH07XG5cbiAgdmFyIERPVUJMRV9RVU9URV9URVhUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJywgaWxsZWdhbDogJ1xcXFxuJ1xuICB9O1xuICB2YXIgU0lOR0xFX1FVT1RFX1RFWFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgdmFyIExPTkdfVEVYVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnPDwnLCBlbmQ6ICc+PidcbiAgfTtcbiAgdmFyIEJBU0VEX05VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnWzAtOV0rI1swLTlBLVpfXSsoXFxcXC5bMC05LUEtWl9dKyk/Iz8oW0VlXVsrLV0/WzAtOV0rKT8nXG4gIH07XG4gIHZhciBJTVBPUlQgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCcsIGVuZDogJyQnLFxuICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogW0RPVUJMRV9RVU9URV9URVhUXVxuICB9O1xuICB2YXIgRlVOQ1RJT05fREVGSU5JVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC9bYS16XVteXFxuXSotPi8sIHJldHVybkJlZ2luOiB0cnVlLCBlbmQ6IC8tPi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtzdGFydHM6IHtcbiAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEU1xuICAgICAgfX0pXG4gICAgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndGFvJ10sXG4gICAgbGV4ZW1lczogL1thLXpBLVpdW2EtekEtWjAtOV8/XSovLFxuICAgIGtleXdvcmRzOiBYTF9LRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIERPVUJMRV9RVU9URV9URVhULFxuICAgIFNJTkdMRV9RVU9URV9URVhULFxuICAgIExPTkdfVEVYVCxcbiAgICBGVU5DVElPTl9ERUZJTklUSU9OLFxuICAgIElNUE9SVCxcbiAgICBCQVNFRF9OVU1CRVIsXG4gICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveHF1ZXJ5LyNpZC10ZXJtaW5hbC1kZWxpbWl0YXRpb25cbiAgdmFyIEtFWVdPUkRTID0gJ21vZHVsZSBzY2hlbWEgbmFtZXNwYWNlIGJvdW5kYXJ5LXNwYWNlIHByZXNlcnZlIG5vLXByZXNlcnZlIHN0cmlwIGRlZmF1bHQgY29sbGF0aW9uIGJhc2UtdXJpIG9yZGVyaW5nIGNvbnRleHQgZGVjaW1hbC1mb3JtYXQgZGVjaW1hbC1zZXBhcmF0b3IgY29weS1uYW1lc3BhY2VzIGVtcHR5LXNlcXVlbmNlIGV4Y2VwdCBleHBvbmVudC1zZXBhcmF0b3IgZXh0ZXJuYWwgZ3JvdXBpbmctc2VwYXJhdG9yIGluaGVyaXQgbm8taW5oZXJpdCBsYXggbWludXMtc2lnbiBwZXItbWlsbGUgcGVyY2VudCBzY2hlbWEtYXR0cmlidXRlIHNjaGVtYS1lbGVtZW50IHN0cmljdCB1bm9yZGVyZWQgemVyby1kaWdpdCAnICtcbiAgJ2RlY2xhcmUgaW1wb3J0IG9wdGlvbiBmdW5jdGlvbiB2YWxpZGF0ZSB2YXJpYWJsZSAnICtcbiAgJ2ZvciBhdCBpbiBsZXQgd2hlcmUgb3JkZXIgZ3JvdXAgYnkgcmV0dXJuIGlmIHRoZW4gZWxzZSAnICtcbiAgJ3R1bWJsaW5nIHNsaWRpbmcgd2luZG93IHN0YXJ0IHdoZW4gb25seSBlbmQgcHJldmlvdXMgbmV4dCBzdGFibGUgJyArXG4gICdhc2NlbmRpbmcgZGVzY2VuZGluZyBhbGxvd2luZyBlbXB0eSBncmVhdGVzdCBsZWFzdCBzb21lIGV2ZXJ5IHNhdGlzZmllcyBzd2l0Y2ggY2FzZSB0eXBlc3dpdGNoIHRyeSBjYXRjaCAnICtcbiAgJ2FuZCBvciB0byB1bmlvbiBpbnRlcnNlY3QgaW5zdGFuY2Ugb2YgdHJlYXQgYXMgY2FzdGFibGUgY2FzdCBtYXAgYXJyYXkgJyArXG4gICdkZWxldGUgaW5zZXJ0IGludG8gcmVwbGFjZSB2YWx1ZSByZW5hbWUgY29weSBtb2RpZnkgdXBkYXRlJztcblxuICAvLyBOb2RlIFR5cGVzIChzb3J0ZWQgYnkgaW5oZXJpdGFuY2UpXG4gIC8vIGF0b21pYyB0eXBlcyAoc29ydGVkIGJ5IGluaGVyaXRhbmNlKVxuICB2YXIgVFlQRSA9ICdpdGVtIGRvY3VtZW50LW5vZGUgbm9kZSBhdHRyaWJ1dGUgZG9jdW1lbnQgZWxlbWVudCBjb21tZW50IG5hbWVzcGFjZSBuYW1lc3BhY2Utbm9kZSBwcm9jZXNzaW5nLWluc3RydWN0aW9uIHRleHQgY29uc3RydWN0aW9uICcgK1xuICAneHM6YW55QXRvbWljVHlwZSB4czp1bnR5cGVkQXRvbWljIHhzOmR1cmF0aW9uIHhzOnRpbWUgeHM6ZGVjaW1hbCB4czpmbG9hdCB4czpkb3VibGUgeHM6Z1llYXJNb250aCB4czpnWWVhciB4czpnTW9udGhEYXkgeHM6Z01vbnRoIHhzOmdEYXkgeHM6Ym9vbGVhbiB4czpiYXNlNjRCaW5hcnkgeHM6aGV4QmluYXJ5IHhzOmFueVVSSSB4czpRTmFtZSB4czpOT1RBVElPTiB4czpkYXRlVGltZSB4czpkYXRlVGltZVN0YW1wIHhzOmRhdGUgeHM6c3RyaW5nIHhzOm5vcm1hbGl6ZWRTdHJpbmcgeHM6dG9rZW4geHM6bGFuZ3VhZ2UgeHM6Tk1UT0tFTiB4czpOYW1lIHhzOk5DTmFtZSB4czpJRCB4czpJRFJFRiB4czpFTlRJVFkgeHM6aW50ZWdlciB4czpub25Qb3NpdGl2ZUludGVnZXIgeHM6bmVnYXRpdmVJbnRlZ2VyIHhzOmxvbmcgeHM6aW50IHhzOnNob3J0IHhzOmJ5dGUgeHM6bm9uTmVnYXRpdmVJbnRlZ2VyIHhzOnVuaXNpZ25lZExvbmcgeHM6dW5zaWduZWRJbnQgeHM6dW5zaWduZWRTaG9ydCB4czp1bnNpZ25lZEJ5dGUgeHM6cG9zaXRpdmVJbnRlZ2VyIHhzOnllYXJNb250aER1cmF0aW9uIHhzOmRheVRpbWVEdXJhdGlvbic7XG5cbiAgdmFyIExJVEVSQUwgPSAnZXEgbmUgbHQgbGUgZ3QgZ2UgaXMgJyArXG4gICAgJ3NlbGY6OiBjaGlsZDo6IGRlc2NlbmRhbnQ6OiBkZXNjZW5kYW50LW9yLXNlbGY6OiBhdHRyaWJ1dGU6OiBmb2xsb3dpbmc6OiBmb2xsb3dpbmctc2libGluZzo6IHBhcmVudDo6IGFuY2VzdG9yOjogYW5jZXN0b3Itb3Itc2VsZjo6IHByZWNlZGluZzo6IHByZWNlZGluZy1zaWJsaW5nOjogJyArXG4gICAgJ05hTic7XG5cbiAgLy8gZnVuY3Rpb25zIChUT0RPOiBmaW5kIHJlZ2V4IGZvciBvcDogd2l0aG91dCBicmVha2luZyBidWlsZClcbiAgdmFyIEJVSUxUX0lOID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAvXFxiYXJyYXlcXDovLFxuICAgICAgZW5kOiAvKD86YXBwZW5kfGZpbHRlcnxmbGF0dGVufGZvbGRcXC0oPzpsZWZ0fHJpZ2h0KXxmb3ItZWFjaCg/OlxcLXBhaXIpP3xnZXR8aGVhZHxpbnNlcnRcXC1iZWZvcmV8am9pbnxwdXR8cmVtb3ZlfHJldmVyc2V8c2l6ZXxzb3J0fHN1YmFycmF5fHRhaWwpXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxibWFwXFw6LyxcbiAgICAgIGVuZDogLyg/OmNvbnRhaW5zfGVudHJ5fGZpbmR8Zm9yXFwtZWFjaHxnZXR8a2V5c3xtZXJnZXxwdXR8cmVtb3ZlfHNpemUpXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxibWF0aFxcOi8sXG4gICAgICBlbmQ6IC8oPzphKD86Y29zfHNpbnx0YW5bMl0/KXxjb3N8ZXhwKD86MTApP3xsb2coPzoxMCk/fHBpfHBvd3xzaW58c3FydHx0YW4pXFxiL1xuICAgIH0sIHtcbiAgICAgIGJlZ2luOiAvXFxib3BcXDovLFxuICAgICAgZW5kOiAvXFwoLyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYmZuXFw6LyxcbiAgICAgIGVuZDogL1xcKC8sXG4gICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgfSxcbi8vIGRvIG5vdCBoaWdobGlnaHQgaW5idWlsdCBzdHJpbmdzIGFzIHZhcmlhYmxlIG9yIHhtbCBlbGVtZW50IG5hbWVzXG4gICAge1xuICAgICAgYmVnaW46IC9bXjxcXC9cXCRcXDonXCItXVxcYig/OmFic3xhY2N1bXVsYXRvclxcLSg/OmFmdGVyfGJlZm9yZSl8YWRqdXN0XFwtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lKVxcLXRvXFwtdGltZXpvbmV8YW5hbHl6ZVxcLXN0cmluZ3xhcHBseXxhdmFpbGFibGVcXC0oPzplbnZpcm9ubWVudFxcLXZhcmlhYmxlc3xzeXN0ZW1cXC1wcm9wZXJ0aWVzKXxhdmd8YmFzZVxcLXVyaXxib29sZWFufGNlaWxpbmd8Y29kZXBvaW50cz9cXC0oPzplcXVhbHx0b1xcLXN0cmluZyl8Y29sbGF0aW9uXFwta2V5fGNvbGxlY3Rpb258Y29tcGFyZXxjb25jYXR8Y29udGFpbnMoPzpcXC10b2tlbik/fGNvcHlcXC1vZnxjb3VudHxjdXJyZW50KD86XFwtKT8oPzpkYXRlKD86VGltZSk/fHRpbWV8Z3JvdXAoPzppbmdcXC1rZXkpP3xvdXRwdXRcXC11cml8bWVyZ2VcXC0oPzpncm91cHxrZXkpKT9kYXRhfGRhdGVUaW1lfGRheXM/XFwtZnJvbVxcLSg/OmRhdGUoPzpUaW1lKT98ZHVyYXRpb24pfGRlZXBcXC1lcXVhbHxkZWZhdWx0XFwtKD86Y29sbGF0aW9ufGxhbmd1YWdlKXxkaXN0aW5jdFxcLXZhbHVlc3xkb2N1bWVudCg/OlxcLXVyaSk/fGRvYyg/OlxcLWF2YWlsYWJsZSk/fGVsZW1lbnRcXC0oPzphdmFpbGFibGV8d2l0aFxcLWlkKXxlbXB0eXxlbmNvZGVcXC1mb3JcXC11cml8ZW5kc1xcLXdpdGh8ZW52aXJvbm1lbnRcXC12YXJpYWJsZXxlcnJvcnxlc2NhcGVcXC1odG1sXFwtdXJpfGV4YWN0bHlcXC1vbmV8ZXhpc3RzfGZhbHNlfGZpbHRlcnxmbG9vcnxmb2xkXFwtKD86bGVmdHxyaWdodCl8Zm9yXFwtZWFjaCg/OlxcLXBhaXIpP3xmb3JtYXRcXC0oPzpkYXRlKD86VGltZSk/fHRpbWV8aW50ZWdlcnxudW1iZXIpfGZ1bmN0aW9uXFwtKD86YXJpdHl8YXZhaWxhYmxlfGxvb2t1cHxuYW1lKXxnZW5lcmF0ZVxcLWlkfGhhc1xcLWNoaWxkcmVufGhlYWR8aG91cnNcXC1mcm9tXFwtKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8aWQoPzpyZWYpP3xpbXBsaWNpdFxcLXRpbWV6b25lfGluXFwtc2NvcGVcXC1wcmVmaXhlc3xpbmRleFxcLW9mfGlubmVybW9zdHxpbnNlcnRcXC1iZWZvcmV8aXJpXFwtdG9cXC11cml8anNvblxcLSg/OmRvY3x0b1xcLXhtbCl8a2V5fGxhbmd8bGFzdHxsb2FkXFwteHF1ZXJ5XFwtbW9kdWxlfGxvY2FsXFwtbmFtZSg/OlxcLWZyb21cXC1RTmFtZSk/fCg/Omxvd2VyfHVwcGVyKVxcLWNhc2V8bWF0Y2hlc3xtYXh8bWludXRlc1xcLWZyb21cXC0oPzpkYXRlVGltZXxkdXJhdGlvbnx0aW1lKXxtaW58bW9udGhzP1xcLWZyb21cXC0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXxuYW1lKD86c3BhY2VcXC11cmlcXC0/KD86Zm9yXFwtcHJlZml4fGZyb21cXC1RTmFtZSk/KT98bmlsbGVkfG5vZGVcXC1uYW1lfG5vcm1hbGl6ZVxcLSg/OnNwYWNlfHVuaWNvZGUpfG5vdHxudW1iZXJ8b25lXFwtb3JcXC1tb3JlfG91dGVybW9zdHxwYXJzZVxcLSg/OmlldGZcXC1kYXRlfGpzb24pfHBhdGh8cG9zaXRpb258KD86cHJlZml4XFwtZnJvbVxcLSk/UU5hbWV8cmFuZG9tXFwtbnVtYmVyXFwtZ2VuZXJhdG9yfHJlZ2V4XFwtZ3JvdXB8cmVtb3ZlfHJlcGxhY2V8cmVzb2x2ZVxcLSg/OlFOYW1lfHVyaSl8cmV2ZXJzZXxyb290fHJvdW5kKD86XFwtaGFsZlxcLXRvXFwtZXZlbik/fHNlY29uZHNcXC1mcm9tXFwtKD86ZGF0ZVRpbWV8ZHVyYXRpb258dGltZSl8c25hcHNob3R8c29ydHxzdGFydHNcXC13aXRofHN0YXRpY1xcLWJhc2VcXC11cml8c3RyZWFtXFwtYXZhaWxhYmxlfHN0cmluZ1xcLT8oPzpqb2lufGxlbmd0aHx0b1xcLWNvZGVwb2ludHMpP3xzdWJzZXF1ZW5jZXxzdWJzdHJpbmdcXC0/KD86YWZ0ZXJ8YmVmb3JlKT98c3VtfHN5c3RlbVxcLXByb3BlcnR5fHRhaWx8dGltZXpvbmVcXC1mcm9tXFwtKD86ZGF0ZSg/OlRpbWUpP3x0aW1lKXx0b2tlbml6ZXx0cmFjZXx0cmFucyg/OmZvcm18bGF0ZSl8dHJ1ZXx0eXBlXFwtYXZhaWxhYmxlfHVub3JkZXJlZHx1bnBhcnNlZFxcLSg/OmVudGl0eXx0ZXh0KT9cXC0/KD86cHVibGljXFwtaWR8dXJpfGF2YWlsYWJsZXxsaW5lcyk/fHVyaVxcLWNvbGxlY3Rpb258eG1sXFwtdG9cXC1qc29ufHllYXJzP1xcLWZyb21cXC0oPzpkYXRlKD86VGltZSk/fGR1cmF0aW9uKXx6ZXJvXFwtb3JcXC1vbmUpXFxiLyxcbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYmxvY2FsXFw6LyxcbiAgICAgIGVuZDogL1xcKC8sXG4gICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgfSwge1xuICAgICAgYmVnaW46IC9cXGJ6aXBcXDovLFxuICAgICAgZW5kOiAvKD86emlwXFwtZmlsZXwoPzp4bWx8aHRtbHx0ZXh0fGJpbmFyeSlcXC1lbnRyeXwgKD86dXBkYXRlXFwtKT9lbnRyaWVzKVxcYi9cbiAgICB9LCB7XG4gICAgICBiZWdpbjogL1xcYig/OnV0aWx8ZGJ8ZnVuY3R4fGFwcHx4ZG1wfHhtbGRiKVxcOi8sXG4gICAgICBlbmQ6IC9cXCgvLFxuICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgIH1cbiAgXVxuICB9O1xuXG4gIHZhciBUSVRMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IC9cXGJ4cXVlcnkgdmVyc2lvbiBcIlsxM11cXC5bMDFdXCJcXHM/KD86ZW5jb2RpbmcgXCIuK1wiKT8vLFxuICAgIGVuZDogLzsvXG4gIH07XG5cbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9bXFwkXVtcXHctOl0rL1xuICB9O1xuXG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFt7XG4gICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgIGJlZ2luOiAvXCJcIi8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICBlbmQ6IC8nLyxcbiAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgYmVnaW46IC8nJy8sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1dXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAvJVtcXHctOl0rL1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXCg6JyxcbiAgICBlbmQ6ICc6XFxcXCknLFxuICAgIHJlbGV2YW5jZTogMTAsXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46ICdAXFxcXHcrJ1xuICAgIH1dXG4gIH07XG5cbiAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94cXVlcnkvI2lkLWNvbXB1dGVkQ29uc3RydWN0b3JzXG4gIC8vIG1vY2hhOiBjb21wdXRlZF9pbmJ1aWx0XG4gIC8vIHNlZSBodHRwczovL3d3dy5yZWdleHBhbC5jb20vP2ZhbT05OTc0OVxuICB2YXIgQ09NUFVURUQgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2VsZW1lbnQgYXR0cmlidXRlIGNvbW1lbnQgZG9jdW1lbnQgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbicsXG4gICAgZW5kOiAneycsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIC8vIG1vY2hhOiBkaXJlY3RfbWV0aG9kXG4gICAgdmFyIERJUkVDVCA9IHtcbiAgICAgIGJlZ2luOiAvPChbXFx3XFwuXzpcXC1dKykoKFxccyouKik9KCd8XCIpLiooJ3xcIikpPz4vLFxuICAgICAgZW5kOiAvKFxcL1tcXHdcXC5fOlxcLV0rPikvLFxuICAgICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgIGJlZ2luOiAneycsXG4gICAgICAgIGVuZDogJ30nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3hxdWVyeSdcbiAgICAgIH0sICdzZWxmJ11cbiAgICB9O1xuXG5cbiAgdmFyIENPTlRBSU5TID0gW1xuICAgIFZBUixcbiAgICBCVUlMVF9JTixcbiAgICBTVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIENPTU1FTlQsXG4gICAgQU5OT1RBVElPTixcbiAgICBUSVRMRSxcbiAgICBDT01QVVRFRCxcbiAgICBESVJFQ1RcbiAgXTtcblxuXG5cbiAgICB2YXIgTUVUSE9EID0ge1xuICAgICAgYmVnaW46ICd7JyxcbiAgICAgIGVuZDogJ30nLFxuICAgICAgY29udGFpbnM6IENPTlRBSU5TXG4gICAgfTtcblxuXG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3hwYXRoJywgJ3hxJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAgbGV4ZW1lczogL1thLXpBLVpcXCRdW2EtekEtWjAtOV86XFwtXSovLFxuICAgIGlsbGVnYWw6IC8ocHJvYyl8KGFic3RyYWN0KXwoZXh0ZW5kcyl8KHVudGlsKXwoIykvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdiXCInLCBlbmQ6ICdcIidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlxcJycsIGVuZDogJ1xcJydcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSlcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7dmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXX07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd6ZXAnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoICcgK1xuICAgICAgJ2FycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgbGV0IHdoaWxlIGlzc2V0IHB1YmxpYyAnICtcbiAgICAgICdwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgJyArXG4gICAgICAncmV0dXJuIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgJyArXG4gICAgICAnY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyAnICtcbiAgICAgICdlbmRkZWNsYXJlIGZpbmFsIHRyeSBzd2l0Y2ggY29udGludWUgZW5kZm9yIGVuZGlmIGRlY2xhcmUgdW5zZXQgdHJ1ZSBmYWxzZSAnICtcbiAgICAgICd0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyAnICtcbiAgICAgICd5aWVsZCBmaW5hbGx5IGludCB1aW50IGxvbmcgdWxvbmcgY2hhciB1Y2hhciBkb3VibGUgZmxvYXQgYm9vbCBib29sZWFuIHN0cmluZycgK1xuICAgICAgJ2xpa2VseSB1bmxpa2VseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnPDw8W1xcJ1wiXT9cXFxcdytbXFwnXCJdPyQnLCBlbmQ6ICdeXFxcXHcrOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gc3dhbGxvdyBjb21wb3NlZCBpZGVudGlmaWVycyB0byBhdm9pZCBwYXJzaW5nIHRoZW0gYXMga2V5d29yZHNcbiAgICAgICAgYmVnaW46IC8oOjp8LT4pK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9bO3tdLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFwkfFxcXFxbfCUnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOlxcKFxcJFwiXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJywgZW5kOiAnOycsXG4gICAgICAgIGlsbGVnYWw6IC9bXFwuJ10vLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3VzZScsIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59OyIsImltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3V0aWwvaHR0cCc7XHJcblxyXG5jb25zdCBCQVNFX0FQSV9VUkwgPSAnaHR0cDovLzEyNy4wLjAuMTozMDAxL2FwaS9xaW5pdSc7XHJcbmNvbnN0IGFwaVVybCA9IHtcclxuICBnZXRUb2tlbjogQkFTRV9BUElfVVJMICsgJy9nZXRfdG9rZW4nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDkuIPniZsgU0RLIOaWueW8j+S4iuS8oFxyXG4gKiAo5YmN56uv55u05o6l5LiK5Lyg5Yiw5LiD54mb5LqR5pyN5Yqh5Zmo5pa55byPKVxyXG4gKi9cclxuY2xhc3MgUWluaXVVcGxhb2Qge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy5pbml0RGF0YShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGluaXREYXRhKG9wdGlvbnMpIHtcclxuICAgIHRoaXMucWluaXVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XHJcbiAgICAgIHRva2VuOiAnJyxcclxuICAgICAgYmFzZVVybDogJycsXHJcbiAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgIHVzZUNkbkRvbWFpbjogdHJ1ZSxcclxuICAgICAgICBkaXNhYmxlU3RhdGlzdGljc1JlcG9ydDogZmFsc2UsXHJcbiAgICAgICAgcmV0cnlDb3VudDogNixcclxuICAgICAgICByZWdpb246IHFpbml1LnJlZ2lvbi56MVxyXG4gICAgICB9LFxyXG4gICAgICBwdXRFeHRyYToge1xyXG4gICAgICAgIGZuYW1lOiBcIlwiLFxyXG4gICAgICAgIHBhcmFtczoge30sXHJcbiAgICAgICAgbWltZVR5cGU6IG51bGxcclxuICAgICAgfVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgICBcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5mZXRjaEdldFRva2VuKClcclxuICAgICAgLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBjb25zdCByZXNEYXRhID0gcmVzO1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBkYXRhIH0gPSByZXNEYXRhO1xyXG4gICAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICAgIHNlbGYucWluaXVPcHRpb25zLnRva2VuID0gZGF0YS50b2tlbjtcclxuICAgICAgICAgIHNlbGYucWluaXVPcHRpb25zLmJhc2VVcmwgPSBkYXRhLmRvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICBmZXRjaEdldFRva2VuKCkge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5xaW5pdU9wdGlvbnMudG9rZW5BcGlVcmwgfHwgYXBpVXJsLmdldFRva2VuO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgcmVxdWVzdC5hamF4KHtcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHtcclxuICAgICAgICAgIHJlc29sdmUocmVzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5a2Y5YKo5Yy65Z+f55qE5Zyw5Z2AXHJcbiAgICogXHJcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5xaW5pdS5jb20va29kby9tYW51YWwvMTY3MS9yZWdpb24tZW5kcG9pbnRcclxuICAgKi9cclxuICBnZXRSZWdpb25VcmwobWFyaykge1xyXG4gICAgY29uc3QgY2xpZW50TWFwID0ge1xyXG4gICAgICAvKiog5Y2O5LicICovXHJcbiAgICAgICd6MCc6ICcvL3VwbG9hZC5xaW5pdXAuY29tJyxcclxuICAgICAgLyoqIOWNjuWMlyAqL1xyXG4gICAgICAnejEnOiAnLy91cGxvYWQtejEucWluaXVwLmNvbScsXHJcbiAgICAgIC8qKiDljY7ljZcgKi9cclxuICAgICAgJ3oyJzogJy8vdXBsb2FkLXoyLnFpbml1cC5jb20nLFxyXG4gICAgICAvKiog5YyX576OICovXHJcbiAgICAgICduYTAnOiAnLy91cGxvYWQtbmEwLnFpbml1cC5jb20nLFxyXG4gICAgICAvKiog5Lic5Y2X5LqaICovXHJcbiAgICAgICdhczAnOiAnLy91cGxvYWQtYXMwLnFpbml1cC5jb20nXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xpZW50TWFwW21hcmtdIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHNlZSBkb2M6IGh0dHBzOi8vZGV2ZWxvcGVyLnFpbml1LmNvbS9rb2RvL3Nkay8xMjgzL2phdmFzY3JpcHRcclxuICAgKi9cclxuICB1cGxvYWRXaXRoU0RLKGZpbGUsIGtleSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnFpbml1T3B0aW9ucy50b2tlbjtcclxuICAgIGNvbnN0IHB1dEV4dHJhID0gdGhpcy5xaW5pdU9wdGlvbnMucHV0RXh0cmE7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnFpbml1T3B0aW9ucy5jb25maWc7XHJcblxyXG4gICAgcHV0RXh0cmEucGFyYW1zW1wieDpuYW1lXCJdID0ga2V5O1xyXG4gICAgLy8gcHV0RXh0cmEucGFyYW1zW1wieDpuYW1lXCJdID0ga2V5LnNwbGl0KFwiLlwiKVswXTtcclxuXHJcbiAgICAvLyDorr7nva5uZXh0LGVycm9yLGNvbXBsZXRl5a+55bqU55qE5pON5L2c77yM5YiG5Yir5aSE55CG55u45bqU55qE6L+b5bqm5L+h5oGv77yM6ZSZ6K+v5L+h5oGv77yM5Lul5Y+K5a6M5oiQ5ZCO55qE5pON5L2cXHJcbiAgICB2YXIgZXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24ocmVzKSB7XHJcbiAgICAgIGlmIChyZXMua2V5ICYmIHJlcy5rZXkubWF0Y2goL1xcLihqcGd8anBlZ3xwbmd8Z2lmKSQvKSkge1xyXG4gICAgICAgIGNvbnNvZWwubG9nKCc9PT09PSBjb21wbGV0ZSA9PT09PSByZXM6ICAlbycsIHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIG5leHQgPSBmdW5jdGlvbihyZXNwb25zZSkge31cclxuXHJcbiAgICB2YXIgc3ViT2JqZWN0ID0geyBcclxuICAgICAgbmV4dDogbmV4dCxcclxuICAgICAgZXJyb3I6IGVycm9yLFxyXG4gICAgICBjb21wbGV0ZTogY29tcGxldGVcclxuICAgIH07XHJcbiAgICBsZXQgc3Vic2NyaXB0aW9uO1xyXG4gICAgbGV0IG9ic2VydmFibGU7XHJcbiAgICAvLyDosIPnlKhzZGvkuIrkvKDmjqXlj6Pojrflvpfnm7jlupTnmoRvYnNlcnZhYmxl77yM5o6n5Yi25LiK5Lyg5ZKM5pqC5YGcXHJcbiAgICBvYnNlcnZhYmxlID0gcWluaXUudXBsb2FkKGZpbGUsIGtleSwgdG9rZW4sIHB1dEV4dHJhLCBjb25maWcpO1xyXG5cclxuICAgIC8vIOS4iuS8oFxyXG4gICAgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoc3ViT2JqZWN0KTtcclxuICAgIC8vIOaaguWBnOS4iuS8oFxyXG4gICAgLy8gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBiYXNlNjTmoLzlvI/nmoTlm77niYfkuIrkvKAuXHJcbiAgICogXHJcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5xaW5pdS5jb20va29kby9rYi8xMzI2L2hvdy10by11cGxvYWQtcGhvdG9zLXRvLXNldmVuLW5pdXl1bi1iYXNlNjQtY29kZVxyXG4gICAqL1xyXG4gIHB1dGI2NChiYXNlNjQpIHtcclxuICAgIGNvbnN0IHBpYyA9IHRoaXMuYmFzZTY0ZW5jb2RlKGJhc2U2NCk7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucWluaXVPcHRpb25zLnRva2VuO1xyXG4gICAgY29uc3QgZmlsZVNpemUgPSB0aGlzLmdldEJhc2U2NFNpemUoYmFzZTY0KTtcclxuICAgIGNvbnN0IHJlZ2lvblVybCA9IHRoaXMuZ2V0UmVnaW9uVXJsKHRoaXMucWluaXVPcHRpb25zLnJlZ2lvbik7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtyZWdpb25Vcmx9L3B1dGI2NC8ke2ZpbGVTaXplfWA7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICByZXF1ZXN0LmFqYXgoe1xyXG4gICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgIHR5cGU6ICdQT1NUJyxcclxuICAgICAgICBkYXRhOiBwaWMsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxyXG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgVXBUb2tlbiAke3Rva2VufWBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2RvbWFpbicsIHNlbGYucWluaXVPcHRpb25zKTtcclxuICAgICAgICAgIHJlc29sdmUoeyBkb21haW46IHNlbGYucWluaXVPcHRpb25zLmJhc2VVcmwsIGhhc2g6IHJlcy5oYXNoIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIOiOt+WPliBiYXNlNjQg5Zu+54mH55qE5aSn5bCPLlxyXG4gICAqIFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoZW55ZWp1bmp1bi9hcnRpY2xlL2RldGFpbHMvNTQ5MjQzNTVcclxuICAgKi9cclxuICBnZXRCYXNlNjRTaXplKGJhc2U2NHVybCkge1xyXG4gICAgLy/ojrflj5ZiYXNlNjTlm77niYflpKflsI/vvIzov5Tlm55NQuaVsOWtl1xyXG4gICAgdmFyIHN0ciA9IGJhc2U2NHVybC5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgdmFyIGVxdWFsSW5kZXggPSBzdHIuaW5kZXhPZignPScpO1xyXG4gICAgaWYoc3RyLmluZGV4T2YoJz0nKT4wKSB7XHJcbiAgICAgICAgc3RyPXN0ci5zdWJzdHJpbmcoMCwgZXF1YWxJbmRleCk7XHJcbiAgICB9XHJcbiAgICAvLyDljp/mnaXnmoTlrZfnrKbmtYHlpKflsI/vvIzljZXkvY3kuLrlrZfoioJcclxuICAgIHZhciBzdHJMZW5ndGg9c3RyLmxlbmd0aDtcclxuICAgIC8vIOiuoeeul+WQjuW+l+WIsOeahOaWh+S7tua1geWkp+Wwj++8jOWNleS9jeS4uuWtl+iKglxyXG4gICAgdmFyIGZpbGVMZW5ndGg9cGFyc2VJbnQoc3RyTGVuZ3RoLShzdHJMZW5ndGgvOCkqMik7XHJcblxyXG4gICAgcmV0dXJuIGZpbGVMZW5ndGg7XHJcblxyXG4gICAgLy8g55Sx5a2X6IqC6L2s5o2i5Li6TUJcclxuICAgIC8vIHZhciBzaXplID0gXCJcIjtcclxuICAgIC8vIHNpemUgPSAoZmlsZUxlbmd0aC8oMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpO1xyXG4gICAgLy8gdmFyIHNpemVTdHIgPSBzaXplICsgXCJcIjsgICAgICAgICAgICAgICAgICAgICAgICAvL+i9rOaIkOWtl+espuS4slxyXG4gICAgLy8gdmFyIGluZGV4ID0gc2l6ZVN0ci5pbmRleE9mKFwiLlwiKTsgICAgICAgICAgICAgICAgICAgIC8v6I635Y+W5bCP5pWw54K55aSE55qE57Si5byVXHJcbiAgICAvLyB2YXIgZG91ID0gc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAxICwyKSAgICAgICAgICAgIC8v6I635Y+W5bCP5pWw54K55ZCO5Lik5L2N55qE5YC8XHJcbiAgICAvLyBpZihkb3UgPT0gXCIwMFwiKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v5Yik5pat5ZCO5Lik5L2N5piv5ZCm5Li6MDDvvIzlpoLmnpzmmK/liJnliKDpmaQwMCAgICAgICAgICAgICAgICBcclxuICAgIC8vICAgICByZXR1cm4gc2l6ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpICsgc2l6ZVN0ci5zdWJzdHIoaW5kZXggKyAzLCAyKVxyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHBhcnNlSW50KHNpemUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVVJM5a6J5YWo55qEQmFzZTY057yW56CBXHJcbiAgICovXHJcbiAgYmFzZTY0ZW5jb2RlKGJhc2U2NHVybCkge1xyXG4gICAgY29uc3Qgc3RyMSA9IGJhc2U2NHVybC5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpXHJcbiAgICByZXR1cm4gc3RyMTtcclxuXHJcbiAgICAvLyBjb25zdCBzdHIxID0gYmFzZTY0dXJsLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJylcclxuICAgIC8vIGNvbnN0IHN0cjIgPSBzdHIxLnJlcGxhY2UoL1xcKy9nLCAnLScpXHJcbiAgICAvLyByZXR1cm4gc3RyMi5yZXBsYWNlKC9cXC8vZywgJ18nKTtcclxuXHJcbiAgICAvLyAq5oqK5aS06YOo55qEZGF0YTppbWFnZS9wbmc7YmFzZTY0LOWOu+aOieOAgu+8iOazqOaEj++8mmJhc2U2NOWQjumdoueahOmAl+WPt+S5n+WOu+aOie+8iSovXHJcbiAgICAvLyByZXR1cm4gYmFzZTY0dXJsLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBRaW5pdVVwbGFvZDsiLCJjb25zdCBodHRwID0ge1xyXG4gIC8qKlxyXG4gICAqIGpz5bCB6KOFYWpheOivt+axglxyXG4gICAqID4+5L2/55SobmV3IFhNTEh0dHBSZXF1ZXN0IOWIm+W7uuivt+axguWvueixoSzmiYDku6XkuI3ogIPomZHkvY7nq69JRea1j+iniOWZqChJRTblj4rku6XkuIvkuI3mlK/mjIFYTUxIdHRwUmVxdWVzdClcclxuICAgKiA+PuS9v+eUqGVzNuivreazlSzlpoLmnpzpnIDopoHlnKjmraPlvI/njq/looPkvb/nlKgs5YiZ5Y+v5Lul55SoYmFiZWzovazmjaLkuLplczXor63ms5UgaHR0cHM6Ly9iYWJlbGpzLmNuL2RvY3Mvc2V0dXAvI2luc3RhbGxhdGlvblxyXG4gICAqICBAcGFyYW0gc2V0dGluZ3Mg6K+35rGC5Y+C5pWw5qih5Lu/alF1ZXJ5IGFqYXhcclxuICAgKiAg6LCD55So6K+l5pa55rOVLGRhdGHlj4LmlbDpnIDopoHlkozor7fmsYLlpLRDb250ZW50LVR5cGXlr7nlupRcclxuICAgKiAgQ29udGVudC1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDmj4/ov7BcclxuICAgKiAgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkICAgJ25hbWU95ZOI5ZOIJmFnZT0xMifmiJZ7bmFtZTon5ZOI5ZOIJyxhZ2U6MTJ9ICDmn6Xor6LlrZfnrKbkuLIs55SoJuWIhuWJslxyXG4gICAqICBhcHBsaWNhdGlvbi9qc29uICAgICAgICAgICAgICAgICAgICAgbmFtZT3lk4jlk4gmYWdlPTEyJyAgICAgICAgICAgICAgICAgICAgICAgIGpzb27lrZfnrKbkuLJcclxuICAgKiAgbXVsdGlwYXJ0L2Zvcm0tZGF0YSAgICAgICAgICAgICAgICAgIG5ldyBGb3JtRGF0YSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9ybURhdGHlr7nosaEs5b2T5Li6Rm9ybURhdGHnsbvlnoss5LiN6KaB5omL5Yqo6K6+572uQ29udGVudC1UeXBlXHJcbiAgICogIOazqOaEjzror7fmsYLlj4LmlbDlpoLmnpzljIXlkKvml6XmnJ/nsbvlnosu5piv5ZCm6IO96K+35rGC5oiQ5Yqf6ZyA6KaB5ZCO5Y+w5o6l5Y+j6YWN5ZCIXHJcbiAgICogXHJcbiAgICogQHNlZSDku6PnoIHmnIDliJ3mnaXmupA6IGh0dHBzOi8vd3d3LmppYW5zaHUuY29tL3AvOTE4YzYzMDQ1YmMzL1xyXG4gICAqL1xyXG4gIGFqYXg6IChzZXR0aW5ncyA9IHt9KSA9PiB7XHJcbiAgICAvLyDliJ3lp4vljJbor7fmsYLlj4LmlbBcclxuICAgIGxldCBfcyA9IE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICB1cmw6ICcnLCAvLyBzdHJpbmdcclxuICAgICAgdHlwZTogJ0dFVCcsIC8vIHN0cmluZyAnR0VUJyAnUE9TVCcgJ0RFTEVURSdcclxuICAgICAgZGF0YVR5cGU6ICdqc29uJywgLy8gc3RyaW5nIOacn+acm+eahOi/lOWbnuaVsOaNruexu+WeizonanNvbicgJ3RleHQnICdkb2N1bWVudCcgLi4uXHJcbiAgICAgIGFzeW5jOiB0cnVlLCAvLyAgYm9vbGVhbiB0cnVlOuW8guatpeivt+axgiBmYWxzZTrlkIzmraXor7fmsYIgcmVxdWlyZWRcclxuICAgICAgZGF0YTogbnVsbCwgLy8gYW55IOivt+axguWPguaVsCxkYXRh6ZyA6KaB5ZKM6K+35rGC5aS0Q29udGVudC1UeXBl5a+55bqUXHJcbiAgICAgIGhlYWRlcnM6IHt9LCAvLyBvYmplY3Qg6K+35rGC5aS0XHJcbiAgICAgIHRpbWVvdXQ6IDEwMDAsIC8vIHN0cmluZyDotoXml7bml7bpl7Q6MOihqOekuuS4jeiuvue9rui2heaXtlxyXG4gICAgICBiZWZvcmVTZW5kOiAoeGhyKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIHN1Y2Nlc3M6IChyZXN1bHQsIHN0YXR1cywgeGhyKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoeGhyLCBzdGF0dXMsIGVycm9yKSA9PiB7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoeGhyLCBzdGF0dXMpID0+IHtcclxuICAgICAgfVxyXG4gICAgfSwgc2V0dGluZ3MpO1xyXG5cclxuICAgIC8vIOWPguaVsOmqjOivgVxyXG4gICAgaWYgKCFfcy51cmwgfHwgIV9zLnR5cGUgfHwgIV9zLmRhdGFUeXBlIHx8ICFfcy5hc3luYykge1xyXG4gICAgICBhbGVydCgn5Y+C5pWw5pyJ6K+vJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDliJvlu7pYTUxIdHRwUmVxdWVzdOivt+axguWvueixoVxyXG4gICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgLy8g6K+35rGC5byA5aeL5Zue6LCD5Ye95pWwXHJcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgZSA9PiB7XHJcbiAgICAgIF9zLmJlZm9yZVNlbmQoeGhyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOivt+axguaIkOWKn+Wbnuiwg+WHveaVsFxyXG4gICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBlID0+IHtcclxuICAgICAgY29uc3Qgc3RhdHVzID0geGhyLnN0YXR1cztcclxuICAgICAgaWYgKChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkgfHwgc3RhdHVzID09PSAzMDQpIHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG4gICAgICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSAndGV4dCcpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHhoci5yZXNwb25zZVRleHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSAnZG9jdW1lbnQnKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSB4aHIucmVzcG9uc2VYTUw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHhoci5yZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g5rOo5oSPOueKtuaAgeeggTIwMOihqOekuuivt+axguWPkemAgS/mjqXlj5fmiJDlip8s5LiN6KGo56S65Lia5Yqh5aSE55CG5oiQ5YqfXHJcbiAgICAgICAgX3Muc3VjY2VzcyhyZXN1bHQsIHN0YXR1cywgeGhyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBfcy5lcnJvcih4aHIsIHN0YXR1cywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8g6K+35rGC57uT5p2fXHJcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGUgPT4ge1xyXG4gICAgICBfcy5jb21wbGV0ZSh4aHIsIHhoci5zdGF0dXMpO1xyXG4gICAgfSk7XHJcbiAgICAvLyDor7fmsYLlh7rplJlcclxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGUgPT4ge1xyXG4gICAgICBfcy5lcnJvcih4aHIsIHhoci5zdGF0dXMsIGUpO1xyXG4gICAgfSk7XHJcbiAgICAvLyDor7fmsYLotoXml7ZcclxuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCd0aW1lb3V0JywgZSA9PiB7XHJcbiAgICAgIF9zLmVycm9yKHhociwgNDA4LCBlKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHVzZVVybFBhcmFtID0gZmFsc2U7XHJcbiAgICBsZXQgc1R5cGUgPSBfcy50eXBlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAvLyDlpoLmnpzmmK9cIueugOWNlVwi6K+35rGCLOWImeaKimRhdGHlj4LmlbDnu4Too4XlnKh1cmzkuIpcclxuICAgIGlmIChzVHlwZSA9PT0gJ0dFVCcgfHwgc1R5cGUgPT09ICdERUxFVEUnKSB7XHJcbiAgICAgIHVzZVVybFBhcmFtID0gdHJ1ZTtcclxuICAgICAgX3MudXJsICs9IGh0dHAuZ2V0VXJsUGFyYW0oX3MudXJsLCBfcy5kYXRhKTtcclxuICAgIH1cclxuICAgIC8vIOWIneWni+WMluivt+axglxyXG4gICAgeGhyLm9wZW4oX3MudHlwZSwgX3MudXJsLCBfcy5hc3luYyk7XHJcbiAgICAvLyDorr7nva7mnJ/mnJvnmoTov5Tlm57mlbDmja7nsbvlnotcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSBfcy5kYXRhVHlwZTtcclxuICAgIC8vIOiuvue9ruivt+axguWktFxyXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoX3MuaGVhZGVycykpIHtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBfcy5oZWFkZXJzW2tleV0pO1xyXG4gICAgfVxyXG4gICAgLy8g6K6+572u6LaF5pe25pe26Ze0XHJcbiAgICBpZiAoX3MuYXN5bmMgJiYgX3MudGltZW91dCkge1xyXG4gICAgICB4aHIudGltZW91dCA9IF9zLnRpbWVvdXQ7XHJcbiAgICB9XHJcbiAgICAvLyDlj5HpgIHor7fmsYIu5aaC5p6c5piv566A5Y2V6K+35rGCLOivt+axguWPguaVsOW6lOS4um51bGwu5ZCm5YiZLOivt+axguWPguaVsOexu+Wei+mcgOimgeWSjOivt+axguWktENvbnRlbnQtVHlwZeWvueW6lFxyXG4gICAgeGhyLnNlbmQodXNlVXJsUGFyYW0gPyBudWxsIDogaHR0cC5nZXRRdWVyeURhdGEoX3MuZGF0YSkpO1xyXG4gIH0sXHJcblxyXG4gIC8qKiDmiorlj4LmlbBkYXRh6L2s5Li6dXJs5p+l6K+i5Y+C5pWwICovXHJcbiAgZ2V0VXJsUGFyYW06ICh1cmwsIGRhdGEpID0+IHtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgcGFyYW1zU3RyID0gZGF0YSBpbnN0YW5jZW9mIE9iamVjdCA/IGh0dHAuZ2V0UXVlcnlTdHJpbmcoZGF0YSkgOiBkYXRhO1xyXG4gICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpICE9PSAtMSkgPyBwYXJhbXNTdHIgOiAnPycgKyBwYXJhbXNTdHI7XHJcbiAgfSxcclxuXHJcbiAgLyoqIOiOt+WPlmFqYXjor7fmsYLlj4LmlbAgICovXHJcbiAgZ2V0UXVlcnlEYXRhOiAoZGF0YSkgPT4ge1xyXG4gICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcclxuICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHR0cC5nZXRRdWVyeVN0cmluZyhkYXRhKTtcclxuICB9LFxyXG5cclxuICAvKiog5oqK5a+56LGh6L2s5Li65p+l6K+i5a2X56ym5LiyICAqL1xyXG4gIGdldFF1ZXJ5U3RyaW5nOiAoZGF0YSkgPT4ge1xyXG4gICAgbGV0IHBhcmFtc0FyciA9IFtdO1xyXG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGxldCB2YWwgPSBkYXRhW2tleV07XHJcbiAgICAgICAgLy8gdG9kbyDlj4LmlbBEYXRl57G75Z6L6ZyA6KaB5qC55o2u5ZCO5Y+wYXBp6YWM5oOF5aSE55CGXHJcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIC8vIHZhbCA9IGRhdGVGb3JtYXQodmFsLCAneXl5eS1NTS1kZCBoaDptbTpzcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJhbXNBcnIucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zQXJyLmpvaW4oJyYnKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGh0dHA7IiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5leHBvcnQgZGVmYXVsdCBTeW1ib2w7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNPYmplY3RMaWtlO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1N5bWJvbDtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3RcbiAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gTkFOO1xuICB9XG4gIHJldHVybiArdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb051bWJlcjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXk7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRvU3RyaW5nO1xuIiwiaW1wb3J0IGJhc2VUb051bWJlciBmcm9tICcuL19iYXNlVG9OdW1iZXIuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSB1c2VkIGZvciBgdW5kZWZpbmVkYCBhcmd1bWVudHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVNYXRoT3BlcmF0aW9uKG9wZXJhdG9yLCBkZWZhdWx0VmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgb3RoZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgICBpZiAob3RoZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gYmFzZVRvU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgb3RoZXIgPSBiYXNlVG9TdHJpbmcob3RoZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBiYXNlVG9OdW1iZXIodmFsdWUpO1xuICAgICAgICBvdGhlciA9IGJhc2VUb051bWJlcihvdGhlcik7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVNYXRoT3BlcmF0aW9uO1xuIiwiaW1wb3J0IGNyZWF0ZU1hdGhPcGVyYXRpb24gZnJvbSAnLi9fY3JlYXRlTWF0aE9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogQWRkcyB0d28gbnVtYmVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IGF1Z2VuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGFkZGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhbiBhZGRpdGlvbi5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRvdGFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmFkZCg2LCA0KTtcbiAqIC8vID0+IDEwXG4gKi9cbnZhciBhZGQgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGF1Z2VuZCwgYWRkZW5kKSB7XG4gIHJldHVybiBhdWdlbmQgKyBhZGRlbmQ7XG59LCAwKTtcblxuZXhwb3J0IGRlZmF1bHQgYWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzT2JqZWN0O1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW0gPSAvXlxccyt8XFxzKyQvZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvTnVtYmVyO1xuIiwiaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9GaW5pdGU7XG4iLCJpbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvSW50ZWdlcjtcbiIsImltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5iZWZvcmVgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gKiBgZnVuY2Agb25jZSBpdCdzIGNhbGxlZCBgbmAgb3IgbW9yZSB0aW1lcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYmVmb3JlIGBmdW5jYCBpcyBpbnZva2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgc2F2ZXMgPSBbJ3Byb2ZpbGUnLCAnc2V0dGluZ3MnXTtcbiAqXG4gKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAqICAgY29uc29sZS5sb2coJ2RvbmUgc2F2aW5nIScpO1xuICogfSk7XG4gKlxuICogXy5mb3JFYWNoKHNhdmVzLCBmdW5jdGlvbih0eXBlKSB7XG4gKiAgIGFzeW5jU2F2ZSh7ICd0eXBlJzogdHlwZSwgJ2NvbXBsZXRlJzogZG9uZSB9KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnZG9uZSBzYXZpbmchJyBhZnRlciB0aGUgdHdvIGFzeW5jIHNhdmVzIGhhdmUgY29tcGxldGVkLlxuICovXG5mdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIG4gPSB0b0ludGVnZXIobik7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoLS1uIDwgMSkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFmdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaWRlbnRpdHk7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGdW5jdGlvbjtcbiIsImltcG9ydCBjb3JlSnNEYXRhIGZyb20gJy4vX2NvcmVKc0RhdGEuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hc2tlZDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5leHBvcnQgZGVmYXVsdCBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NvdXJjZTtcbiIsImltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNNYXNrZWQgZnJvbSAnLi9faXNNYXNrZWQuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IHRvU291cmNlIGZyb20gJy4vX3RvU291cmNlLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZhbHVlO1xuIiwiaW1wb3J0IGJhc2VJc05hdGl2ZSBmcm9tICcuL19iYXNlSXNOYXRpdmUuanMnO1xuaW1wb3J0IGdldFZhbHVlIGZyb20gJy4vX2dldFZhbHVlLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TmF0aXZlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbmV4cG9ydCBkZWZhdWx0IFdlYWtNYXA7XG4iLCJpbXBvcnQgV2Vha01hcCBmcm9tICcuL19XZWFrTWFwLmpzJztcblxuLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgbWV0YU1hcCA9IFdlYWtNYXAgJiYgbmV3IFdlYWtNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGFNYXA7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgbWV0YU1hcCBmcm9tICcuL19tZXRhTWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gIHJldHVybiBmdW5jO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldERhdGE7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDcmVhdGU7XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ3RvcjtcbiIsImltcG9ydCBjcmVhdGVDdG9yIGZyb20gJy4vX2NyZWF0ZUN0b3IuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZykge1xuICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQmluZDtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXBwbHk7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VBcmdzO1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgY29tcG9zZUFyZ3NgIGV4Y2VwdCB0aGF0IHRoZSBhcmd1bWVudHMgY29tcG9zaXRpb25cbiAqIGlzIHRhaWxvcmVkIGZvciBgXy5wYXJ0aWFsUmlnaHRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzSW5kZXggPSAtMSxcbiAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgIHJpZ2h0SW5kZXggPSAtMSxcbiAgICAgIHJpZ2h0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkocmFuZ2VMZW5ndGggKyByaWdodExlbmd0aCksXG4gICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7XG5cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICByZXN1bHRbYXJnc0luZGV4XSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICB3aGlsZSAoKytyaWdodEluZGV4IDwgcmlnaHRMZW5ndGgpIHtcbiAgICByZXN1bHRbb2Zmc2V0ICsgcmlnaHRJbmRleF0gPSBwYXJ0aWFsc1tyaWdodEluZGV4XTtcbiAgfVxuICB3aGlsZSAoKytob2xkZXJzSW5kZXggPCBob2xkZXJzTGVuZ3RoKSB7XG4gICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCIvKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBgcGxhY2Vob2xkZXJgIG9jY3VycmVuY2VzIGluIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICovXG5mdW5jdGlvbiBjb3VudEhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvdW50SG9sZGVycztcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUxvZGFzaDtcbiIsImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGJhc2VMb2Rhc2ggZnJvbSAnLi9fYmFzZUxvZGFzaC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxuZXhwb3J0IGRlZmF1bHQgTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5leHBvcnQgZGVmYXVsdCBub29wO1xuIiwiaW1wb3J0IG1ldGFNYXAgZnJvbSAnLi9fbWV0YU1hcC5qcyc7XG5pbXBvcnQgbm9vcCBmcm9tICcuL25vb3AuanMnO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERhdGE7XG4iLCIvKiogVXNlZCB0byBsb29rdXAgdW5taW5pZmllZCBmdW5jdGlvbiBuYW1lcy4gKi9cbnZhciByZWFsTmFtZXMgPSB7fTtcblxuZXhwb3J0IGRlZmF1bHQgcmVhbE5hbWVzO1xuIiwiaW1wb3J0IHJlYWxOYW1lcyBmcm9tICcuL19yZWFsTmFtZXMuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0RnVuY05hbWU7XG4iLCJpbXBvcnQgYmFzZUNyZWF0ZSBmcm9tICcuL19iYXNlQ3JlYXRlLmpzJztcbmltcG9ydCBiYXNlTG9kYXNoIGZyb20gJy4vX2Jhc2VMb2Rhc2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5leHBvcnQgZGVmYXVsdCBMb2Rhc2hXcmFwcGVyO1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlBcnJheTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgTG9kYXNoV3JhcHBlciBmcm9tICcuL19Mb2Rhc2hXcmFwcGVyLmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQ2xvbmU7XG4iLCJpbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgYmFzZUxvZGFzaCBmcm9tICcuL19iYXNlTG9kYXNoLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcbmltcG9ydCB3cmFwcGVyQ2xvbmUgZnJvbSAnLi9fd3JhcHBlckNsb25lLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxuZXhwb3J0IGRlZmF1bHQgbG9kYXNoO1xuIiwiaW1wb3J0IExhenlXcmFwcGVyIGZyb20gJy4vX0xhenlXcmFwcGVyLmpzJztcbmltcG9ydCBnZXREYXRhIGZyb20gJy4vX2dldERhdGEuanMnO1xuaW1wb3J0IGdldEZ1bmNOYW1lIGZyb20gJy4vX2dldEZ1bmNOYW1lLmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7XG4gIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgb3RoZXIgPSBsb2Rhc2hbZnVuY05hbWVdO1xuXG4gIGlmICh0eXBlb2Ygb3RoZXIgIT0gJ2Z1bmN0aW9uJyB8fCAhKGZ1bmNOYW1lIGluIExhenlXcmFwcGVyLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGZ1bmMgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGRhdGEgPSBnZXREYXRhKG90aGVyKTtcbiAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0xhemlhYmxlO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaG9ydE91dDtcbiIsImltcG9ydCBiYXNlU2V0RGF0YSBmcm9tICcuL19iYXNlU2V0RGF0YS5qcyc7XG5pbXBvcnQgc2hvcnRPdXQgZnJvbSAnLi9fc2hvcnRPdXQuanMnO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0RGF0YTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRXcmFwRGV0YWlscztcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcENvbW1lbnQgPSAvXFx7KD86XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAuK1xcXSBcXCpcXC8pP1xcbj8vO1xuXG4vKipcbiAqIEluc2VydHMgd3JhcHBlciBgZGV0YWlsc2AgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIGBzb3VyY2VgIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBtb2RpZnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gaW5zZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICovXG5mdW5jdGlvbiBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIGRldGFpbHMpIHtcbiAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG4gIGRldGFpbHNbbGFzdEluZGV4XSA9IChsZW5ndGggPiAxID8gJyYgJyA6ICcnKSArIGRldGFpbHNbbGFzdEluZGV4XTtcbiAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gIHJldHVybiBzb3VyY2UucmVwbGFjZShyZVdyYXBDb21tZW50LCAne1xcbi8qIFt3cmFwcGVkIHdpdGggJyArIGRldGFpbHMgKyAnXSAqL1xcbicpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbnNlcnRXcmFwRGV0YWlscztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29uc3RhbnQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLmNvbnN0YW50KHsgJ2EnOiAxIH0pKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcbiAqIC8vID0+IFt7ICdhJzogMSB9LCB7ICdhJzogMSB9XVxuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb25zdGFudDtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VTZXRUb1N0cmluZyBmcm9tICcuL19iYXNlU2V0VG9TdHJpbmcuanMnO1xuaW1wb3J0IHNob3J0T3V0IGZyb20gJy4vX3Nob3J0T3V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0VG9TdHJpbmc7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUVhY2g7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaWN0SW5kZXhPZjtcbiIsImltcG9ydCBiYXNlRmluZEluZGV4IGZyb20gJy4vX2Jhc2VGaW5kSW5kZXguanMnO1xuaW1wb3J0IGJhc2VJc05hTiBmcm9tICcuL19iYXNlSXNOYU4uanMnO1xuaW1wb3J0IHN0cmljdEluZGV4T2YgZnJvbSAnLi9fc3RyaWN0SW5kZXhPZi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlJbmNsdWRlcztcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqIFVzZWQgdG8gYXNzb2NpYXRlIHdyYXAgbWV0aG9kcyB3aXRoIHRoZWlyIGJpdCBmbGFncy4gKi9cbnZhciB3cmFwRmxhZ3MgPSBbXG4gIFsnYXJ5JywgV1JBUF9BUllfRkxBR10sXG4gIFsnYmluZCcsIFdSQVBfQklORF9GTEFHXSxcbiAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgWydjdXJyeScsIFdSQVBfQ1VSUllfRkxBR10sXG4gIFsnY3VycnlSaWdodCcsIFdSQVBfQ1VSUllfUklHSFRfRkxBR10sXG4gIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgWydwYXJ0aWFsJywgV1JBUF9QQVJUSUFMX0ZMQUddLFxuICBbJ3BhcnRpYWxSaWdodCcsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHXSxcbiAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbl07XG5cbi8qKlxuICogVXBkYXRlcyB3cmFwcGVyIGBkZXRhaWxzYCBiYXNlZCBvbiBgYml0bWFza2AgZmxhZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlV3JhcERldGFpbHMoZGV0YWlscywgYml0bWFzaykge1xuICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgdmFyIHZhbHVlID0gJ18uJyArIHBhaXJbMF07XG4gICAgaWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUpKSB7XG4gICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBkYXRlV3JhcERldGFpbHM7XG4iLCJpbXBvcnQgZ2V0V3JhcERldGFpbHMgZnJvbSAnLi9fZ2V0V3JhcERldGFpbHMuanMnO1xuaW1wb3J0IGluc2VydFdyYXBEZXRhaWxzIGZyb20gJy4vX2luc2VydFdyYXBEZXRhaWxzLmpzJztcbmltcG9ydCBzZXRUb1N0cmluZyBmcm9tICcuL19zZXRUb1N0cmluZy5qcyc7XG5pbXBvcnQgdXBkYXRlV3JhcERldGFpbHMgZnJvbSAnLi9fdXBkYXRlV3JhcERldGFpbHMuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGB3cmFwcGVyYCB0byBtaW1pYyB0aGUgc291cmNlIG9mIGByZWZlcmVuY2VgXG4gKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5jZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gKi9cbmZ1bmN0aW9uIHNldFdyYXBUb1N0cmluZyh3cmFwcGVyLCByZWZlcmVuY2UsIGJpdG1hc2spIHtcbiAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gIHJldHVybiBzZXRUb1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRhaWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFdyYXBUb1N0cmluZztcbiIsImltcG9ydCBpc0xhemlhYmxlIGZyb20gJy4vX2lzTGF6aWFibGUuanMnO1xuaW1wb3J0IHNldERhdGEgZnJvbSAnLi9fc2V0RGF0YS5qcyc7XG5pbXBvcnQgc2V0V3JhcFRvU3RyaW5nIGZyb20gJy4vX3NldFdyYXBUb1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGNvbnRpbnVlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIGBmdW5jYCB3cmFwcGVyLlxuICogQHBhcmFtIHsqfSBwbGFjZWhvbGRlciBUaGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLFxuICAgICAgbmV3SG9sZGVycyA9IGlzQ3VycnkgPyBob2xkZXJzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld1BhcnRpYWxzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogcGFydGlhbHM7XG5cbiAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICBiaXRtYXNrICY9IH4oaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHIDogV1JBUF9QQVJUSUFMX0ZMQUcpO1xuXG4gIGlmICghKGJpdG1hc2sgJiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgfVxuICB2YXIgbmV3RGF0YSA9IFtcbiAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICBuZXdIb2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eVxuICBdO1xuXG4gIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICBpZiAoaXNMYXppYWJsZShmdW5jKSkge1xuICAgIHNldERhdGEocmVzdWx0LCBuZXdEYXRhKTtcbiAgfVxuICByZXN1bHQucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhyZXN1bHQsIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSZWN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBhcmd1bWVudCBwbGFjZWhvbGRlciB2YWx1ZSBmb3IgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRIb2xkZXIoZnVuYykge1xuICB2YXIgb2JqZWN0ID0gZnVuYztcbiAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0SG9sZGVyO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0luZGV4O1xuIiwiaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZW9yZGVyO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVwbGFjZUhvbGRlcnM7XG4iLCJpbXBvcnQgY29tcG9zZUFyZ3MgZnJvbSAnLi9fY29tcG9zZUFyZ3MuanMnO1xuaW1wb3J0IGNvbXBvc2VBcmdzUmlnaHQgZnJvbSAnLi9fY29tcG9zZUFyZ3NSaWdodC5qcyc7XG5pbXBvcnQgY291bnRIb2xkZXJzIGZyb20gJy4vX2NvdW50SG9sZGVycy5qcyc7XG5pbXBvcnQgY3JlYXRlQ3RvciBmcm9tICcuL19jcmVhdGVDdG9yLmpzJztcbmltcG9ydCBjcmVhdGVSZWN1cnJ5IGZyb20gJy4vX2NyZWF0ZVJlY3VycnkuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlb3JkZXIgZnJvbSAnLi9fcmVvcmRlci5qcyc7XG5pbXBvcnQgcmVwbGFjZUhvbGRlcnMgZnJvbSAnLi9fcmVwbGFjZUhvbGRlcnMuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVIeWJyaWQ7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGNyZWF0ZUN0b3IgZnJvbSAnLi9fY3JlYXRlQ3Rvci5qcyc7XG5pbXBvcnQgY3JlYXRlSHlicmlkIGZyb20gJy4vX2NyZWF0ZUh5YnJpZC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVjdXJyeSBmcm9tICcuL19jcmVhdGVSZWN1cnJ5LmpzJztcbmltcG9ydCBnZXRIb2xkZXIgZnJvbSAnLi9fZ2V0SG9sZGVyLmpzJztcbmltcG9ydCByZXBsYWNlSG9sZGVycyBmcm9tICcuL19yZXBsYWNlSG9sZGVycy5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gZW5hYmxlIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgdmFyIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgIH1cbiAgICB2YXIgaG9sZGVycyA9IChsZW5ndGggPCAzICYmIGFyZ3NbMF0gIT09IHBsYWNlaG9sZGVyICYmIGFyZ3NbbGVuZ3RoIC0gMV0gIT09IHBsYWNlaG9sZGVyKVxuICAgICAgPyBbXVxuICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICBsZW5ndGggLT0gaG9sZGVycy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB1bmRlZmluZWQsXG4gICAgICAgIGFyZ3MsIGhvbGRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSAtIGxlbmd0aCk7XG4gICAgfVxuICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgcmV0dXJuIGFwcGx5KGZuLCB0aGlzLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ3Vycnk7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGNyZWF0ZUN0b3IgZnJvbSAnLi9fY3JlYXRlQ3Rvci5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQYXJ0aWFsO1xuIiwiaW1wb3J0IGNvbXBvc2VBcmdzIGZyb20gJy4vX2NvbXBvc2VBcmdzLmpzJztcbmltcG9ydCBjb21wb3NlQXJnc1JpZ2h0IGZyb20gJy4vX2NvbXBvc2VBcmdzUmlnaHQuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICpcbiAqIE1lcmdpbmcgbWV0YWRhdGEgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdyYXBwZXJzIHVzZWQgdG8gaW52b2tlIGEgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMgbGlrZSBgXy5hcnlgIGFuZFxuICogYF8ucmVhcmdgIG1vZGlmeSBmdW5jdGlvbiBhcmd1bWVudHMsIG1ha2luZyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmVcbiAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVyZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWBcbiAqIGFuZCBvciBgXy5yZWFyZ2AgYXBwbGllZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGVzdGluYXRpb24gbWV0YWRhdGEuXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGF0YWAuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLFxuICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSxcbiAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpO1xuXG4gIHZhciBpc0NvbWJvID1cbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9SRUFSR19GTEFHKSAmJiAoZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSkgfHxcbiAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRykpO1xuXG4gIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICBpZiAoIShpc0NvbW1vbiB8fCBpc0NvbWJvKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYHRoaXNBcmdgIGlmIGF2YWlsYWJsZS5cbiAgaWYgKHNyY0JpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRykge1xuICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgLy8gU2V0IHdoZW4gY3VycnlpbmcgYSBib3VuZCBmdW5jdGlvbi5cbiAgICBuZXdCaXRtYXNrIHw9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyA/IDAgOiBXUkFQX0NVUlJZX0JPVU5EX0ZMQUc7XG4gIH1cbiAgLy8gQ29tcG9zZSBwYXJ0aWFsIGFyZ3VtZW50cy5cbiAgdmFyIHZhbHVlID0gc291cmNlWzNdO1xuICBpZiAodmFsdWUpIHtcbiAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdO1xuICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IHZhbHVlO1xuICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgcmlnaHQgYXJndW1lbnRzLlxuICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgcGFydGlhbHMgPSBkYXRhWzVdO1xuICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogc291cmNlWzZdO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICB2YWx1ZSA9IHNvdXJjZVs3XTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgZGF0YVs3XSA9IHZhbHVlO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGFyeWAgaWYgaXQncyBzbWFsbGVyLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gIGlmIChkYXRhWzldID09IG51bGwpIHtcbiAgICBkYXRhWzldID0gc291cmNlWzldO1xuICB9XG4gIC8vIFVzZSBzb3VyY2UgYGZ1bmNgIGFuZCBtZXJnZSBiaXRtYXNrcy5cbiAgZGF0YVswXSA9IHNvdXJjZVswXTtcbiAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlRGF0YTtcbiIsImltcG9ydCBiYXNlU2V0RGF0YSBmcm9tICcuL19iYXNlU2V0RGF0YS5qcyc7XG5pbXBvcnQgY3JlYXRlQmluZCBmcm9tICcuL19jcmVhdGVCaW5kLmpzJztcbmltcG9ydCBjcmVhdGVDdXJyeSBmcm9tICcuL19jcmVhdGVDdXJyeS5qcyc7XG5pbXBvcnQgY3JlYXRlSHlicmlkIGZyb20gJy4vX2NyZWF0ZUh5YnJpZC5qcyc7XG5pbXBvcnQgY3JlYXRlUGFydGlhbCBmcm9tICcuL19jcmVhdGVQYXJ0aWFsLmpzJztcbmltcG9ydCBnZXREYXRhIGZyb20gJy4vX2dldERhdGEuanMnO1xuaW1wb3J0IG1lcmdlRGF0YSBmcm9tICcuL19tZXJnZURhdGEuanMnO1xuaW1wb3J0IHNldERhdGEgZnJvbSAnLi9fc2V0RGF0YS5qcyc7XG5pbXBvcnQgc2V0V3JhcFRvU3RyaW5nIGZyb20gJy4vX3NldFdyYXBUb1N0cmluZy5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogICAgMSAtIGBfLmJpbmRgXG4gKiAgICAyIC0gYF8uYmluZEtleWBcbiAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICogICAgOCAtIGBfLmN1cnJ5YFxuICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gKiAgMTI4IC0gYF8ucmVhcmdgXG4gKiAgMjU2IC0gYF8uYXJ5YFxuICogIDUxMiAtIGBfLmZsaXBgXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gIH1cbiAgZnVuYyA9IG5ld0RhdGFbMF07XG4gIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gIH1cbiAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIH1cbiAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVXcmFwO1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQVJZX0ZMQUcgPSAxMjg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdXAgdG8gYG5gIGFyZ3VtZW50cyxcbiAqIGlnbm9yaW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgY2FwLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTtcbiAqIC8vID0+IFs2LCA4LCAxMF1cbiAqL1xuZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7XG4gIG4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IG47XG4gIG4gPSAoZnVuYyAmJiBuID09IG51bGwpID8gZnVuYy5sZW5ndGggOiBuO1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0FSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnk7XG4iLCJpbXBvcnQgZGVmaW5lUHJvcGVydHkgZnJvbSAnLi9fZGVmaW5lUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXNzaWduVmFsdWU7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXE7XG4iLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGVxKG9ialZhbHVlLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnblZhbHVlO1xuIiwiaW1wb3J0IGFzc2lnblZhbHVlIGZyb20gJy4vX2Fzc2lnblZhbHVlLmpzJztcbmltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlPYmplY3Q7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyUmVzdDtcbiIsImltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVJlc3Q7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTGVuZ3RoO1xuIiwiaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlMaWtlO1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQXNzaWduZXI7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVRpbWVzO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzQXJndW1lbnRzO1xuIiwiaW1wb3J0IGJhc2VJc0FyZ3VtZW50cyBmcm9tICcuL19iYXNlSXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc0FyZ3VtZW50cztcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuYXJ5O1xuIiwiaW1wb3J0IGJhc2VJc1R5cGVkQXJyYXkgZnJvbSAnLi9fYmFzZUlzVHlwZWRBcnJheS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxuZXhwb3J0IGRlZmF1bHQgaXNUeXBlZEFycmF5O1xuIiwiaW1wb3J0IGJhc2VUaW1lcyBmcm9tICcuL19iYXNlVGltZXMuanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0J1ZmZlciBmcm9tICcuL2lzQnVmZmVyLmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlMaWtlS2V5cztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJnO1xuIiwiaW1wb3J0IG92ZXJBcmcgZnJvbSAnLi9fb3ZlckFyZy5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlS2V5cztcbiIsImltcG9ydCBpc1Byb3RvdHlwZSBmcm9tICcuL19pc1Byb3RvdHlwZS5qcyc7XG5pbXBvcnQgbmF0aXZlS2V5cyBmcm9tICcuL19uYXRpdmVLZXlzLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5cztcbiIsImltcG9ydCBhcnJheUxpa2VLZXlzIGZyb20gJy4vX2FycmF5TGlrZUtleXMuanMnO1xuaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXM7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQXNzaWducyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xudmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgIH1cbiAgfVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBuYXRpdmVLZXlzSW47XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNQcm90b3R5cGUgZnJvbSAnLi9faXNQcm90b3R5cGUuanMnO1xuaW1wb3J0IG5hdGl2ZUtleXNJbiBmcm9tICcuL19uYXRpdmVLZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlS2V5c0luO1xuIiwiaW1wb3J0IGFycmF5TGlrZUtleXMgZnJvbSAnLi9fYXJyYXlMaWtlS2V5cy5qcyc7XG5pbXBvcnQgYmFzZUtleXNJbiBmcm9tICcuL19iYXNlS2V5c0luLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCwgdHJ1ZSkgOiBiYXNlS2V5c0luKG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGtleXNJbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIG93biBhbmRcbiAqIGluaGVyaXRlZCBzb3VyY2UgcHJvcGVydGllcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZXh0ZW5kXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBmdW5jdGlvbiBCYXIoKSB7XG4gKiAgIHRoaXMuYyA9IDM7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5iID0gMjtcbiAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gKlxuICogXy5hc3NpZ25Jbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMywgJ2QnOiA0IH1cbiAqL1xudmFyIGFzc2lnbkluID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2lnbkluO1xuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgY3JlYXRlQXNzaWduZXIgZnJvbSAnLi9fY3JlYXRlQXNzaWduZXIuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25JbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmBcbiAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGV4dGVuZFdpdGhcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uYXNzaWduV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTtcbiAqXG4gKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG52YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25JbldpdGg7XG4iLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmFzc2lnbkluV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlO1xuICogfVxuICpcbiAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduV2l0aCwgY3VzdG9taXplcik7XG4gKlxuICogZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMgfSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqL1xudmFyIGFzc2lnbldpdGggPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpIHtcbiAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25XaXRoO1xuIiwiaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxuZXhwb3J0IGRlZmF1bHQgbmF0aXZlQ3JlYXRlO1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzaERlbGV0ZTtcbiIsImltcG9ydCBuYXRpdmVDcmVhdGUgZnJvbSAnLi9fbmF0aXZlQ3JlYXRlLmpzJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoR2V0O1xuIiwiaW1wb3J0IG5hdGl2ZUNyZWF0ZSBmcm9tICcuL19uYXRpdmVDcmVhdGUuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc2hIYXM7XG4iLCJpbXBvcnQgbmF0aXZlQ3JlYXRlIGZyb20gJy4vX25hdGl2ZUNyZWF0ZS5qcyc7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNoU2V0O1xuIiwiaW1wb3J0IGhhc2hDbGVhciBmcm9tICcuL19oYXNoQ2xlYXIuanMnO1xuaW1wb3J0IGhhc2hEZWxldGUgZnJvbSAnLi9faGFzaERlbGV0ZS5qcyc7XG5pbXBvcnQgaGFzaEdldCBmcm9tICcuL19oYXNoR2V0LmpzJztcbmltcG9ydCBoYXNoSGFzIGZyb20gJy4vX2hhc2hIYXMuanMnO1xuaW1wb3J0IGhhc2hTZXQgZnJvbSAnLi9faGFzaFNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsaXN0Q2FjaGVDbGVhcjtcbiIsImltcG9ydCBlcSBmcm9tICcuL2VxLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzb2NJbmRleE9mO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZURlbGV0ZTtcbiIsImltcG9ydCBhc3NvY0luZGV4T2YgZnJvbSAnLi9fYXNzb2NJbmRleE9mLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlR2V0O1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGlzdENhY2hlSGFzO1xuIiwiaW1wb3J0IGFzc29jSW5kZXhPZiBmcm9tICcuL19hc3NvY0luZGV4T2YuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxpc3RDYWNoZVNldDtcbiIsImltcG9ydCBsaXN0Q2FjaGVDbGVhciBmcm9tICcuL19saXN0Q2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbGlzdENhY2hlRGVsZXRlIGZyb20gJy4vX2xpc3RDYWNoZURlbGV0ZS5qcyc7XG5pbXBvcnQgbGlzdENhY2hlR2V0IGZyb20gJy4vX2xpc3RDYWNoZUdldC5qcyc7XG5pbXBvcnQgbGlzdENhY2hlSGFzIGZyb20gJy4vX2xpc3RDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbGlzdENhY2hlU2V0IGZyb20gJy4vX2xpc3RDYWNoZVNldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTGlzdENhY2hlO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5leHBvcnQgZGVmYXVsdCBNYXA7XG4iLCJpbXBvcnQgSGFzaCBmcm9tICcuL19IYXNoLmpzJztcbmltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0tleWFibGU7XG4iLCJpbXBvcnQgaXNLZXlhYmxlIGZyb20gJy4vX2lzS2V5YWJsZS5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0TWFwRGF0YTtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwQ2FjaGVEZWxldGU7XG4iLCJpbXBvcnQgZ2V0TWFwRGF0YSBmcm9tICcuL19nZXRNYXBEYXRhLmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUdldDtcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBDYWNoZUhhcztcbiIsImltcG9ydCBnZXRNYXBEYXRhIGZyb20gJy4vX2dldE1hcERhdGEuanMnO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcENhY2hlU2V0O1xuIiwiaW1wb3J0IG1hcENhY2hlQ2xlYXIgZnJvbSAnLi9fbWFwQ2FjaGVDbGVhci5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVEZWxldGUgZnJvbSAnLi9fbWFwQ2FjaGVEZWxldGUuanMnO1xuaW1wb3J0IG1hcENhY2hlR2V0IGZyb20gJy4vX21hcENhY2hlR2V0LmpzJztcbmltcG9ydCBtYXBDYWNoZUhhcyBmcm9tICcuL19tYXBDYWNoZUhhcy5qcyc7XG5pbXBvcnQgbWFwQ2FjaGVTZXQgZnJvbSAnLi9fbWFwQ2FjaGVTZXQuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuZXhwb3J0IGRlZmF1bHQgTWFwQ2FjaGU7XG4iLCJpbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVDYXBwZWQ7XG4iLCJpbXBvcnQgbWVtb2l6ZUNhcHBlZCBmcm9tICcuL19tZW1vaXplQ2FwcGVkLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb1BhdGg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9TdHJpbmc7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzS2V5IGZyb20gJy4vX2lzS2V5LmpzJztcbmltcG9ydCBzdHJpbmdUb1BhdGggZnJvbSAnLi9fc3RyaW5nVG9QYXRoLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFBhdGg7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0tleTtcbiIsImltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlR2V0O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0O1xuIiwiaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBdChvYmplY3QsIHBhdGhzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgIHNraXAgPSBvYmplY3QgPT0gbnVsbDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBza2lwID8gdW5kZWZpbmVkIDogZ2V0KG9iamVjdCwgcGF0aHNbaW5kZXhdKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQXQ7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5UHVzaDtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwcmVhZGFibGVTeW1ib2wgPSBTeW1ib2wgPyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmxhdHRlbmFibGUgYGFyZ3VtZW50c2Agb2JqZWN0IG9yIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZsYXR0ZW5hYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzRmxhdHRlbmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSB8fFxuICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZsYXR0ZW5hYmxlO1xuIiwiaW1wb3J0IGFycmF5UHVzaCBmcm9tICcuL19hcnJheVB1c2guanMnO1xuaW1wb3J0IGlzRmxhdHRlbmFibGUgZnJvbSAnLi9faXNGbGF0dGVuYWJsZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRmxhdHRlbjtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuO1xuIiwiaW1wb3J0IGZsYXR0ZW4gZnJvbSAnLi9mbGF0dGVuLmpzJztcbmltcG9ydCBvdmVyUmVzdCBmcm9tICcuL19vdmVyUmVzdC5qcyc7XG5pbXBvcnQgc2V0VG9TdHJpbmcgZnJvbSAnLi9fc2V0VG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRSZXN0O1xuIiwiaW1wb3J0IGJhc2VBdCBmcm9tICcuL19iYXNlQXQuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGBwYXRoc2Agb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gKlxuICogXy5hdChvYmplY3QsIFsnYVswXS5iLmMnLCAnYVsxXSddKTtcbiAqIC8vID0+IFszLCA0XVxuICovXG52YXIgYXQgPSBmbGF0UmVzdChiYXNlQXQpO1xuXG5leHBvcnQgZGVmYXVsdCBhdDtcbiIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgZ2V0UHJvdG90eXBlIGZyb20gJy4vX2dldFByb3RvdHlwZS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuOC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiB9XG4gKlxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIEN0b3IgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCAnY29uc3RydWN0b3InKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1BsYWluT2JqZWN0O1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcbmltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJy4vaXNQbGFpbk9iamVjdC5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBkb21FeGNUYWcgPSAnW29iamVjdCBET01FeGNlcHRpb25dJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCxcbiAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBlcnJvciBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Vycm9yKG5ldyBFcnJvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Vycm9yKEVycm9yKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgKHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZS5uYW1lID09ICdzdHJpbmcnICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXJyb3I7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gaW52b2tlIGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqIG9iamVjdC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGF0dGVtcHQuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9yIGVycm9yIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogLy8gQXZvaWQgdGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy5cbiAqIHZhciBlbGVtZW50cyA9IF8uYXR0ZW1wdChmdW5jdGlvbihzZWxlY3Rvcikge1xuICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gKiB9LCAnPl8+Jyk7XG4gKlxuICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAqICAgZWxlbWVudHMgPSBbXTtcbiAqIH1cbiAqL1xudmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBhdHRlbXB0O1xuIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHNcbiAqIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGlsZSBpdCdzIGNhbGxlZCBsZXNzIHRoYW4gYG5gIHRpbWVzLiBTdWJzZXF1ZW50XG4gKiBjYWxscyB0byB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AgaW52b2NhdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggYGZ1bmNgIGlzIG5vIGxvbmdlciBpbnZva2VkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5iZWZvcmUoNSwgYWRkQ29udGFjdFRvTGlzdCkpO1xuICogLy8gPT4gQWxsb3dzIGFkZGluZyB1cCB0byA0IGNvbnRhY3RzIHRvIHRoZSBsaXN0LlxuICovXG5mdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBuID0gdG9JbnRlZ2VyKG4pO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKC0tbiA+IDApIHtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKG4gPD0gMSkge1xuICAgICAgZnVuYyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmVmb3JlO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBjcmVhdGVXcmFwIGZyb20gJy4vX2NyZWF0ZVdyYXAuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgXG4gKiBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8uYmluZC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIG5hdGl2ZSBgRnVuY3Rpb24jYmluZGAsIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiXG4gKiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5kIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAqXG4gKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7XG4gKiBib3VuZCgnIScpO1xuICogLy8gPT4gJ2hpIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kKGdyZWV0LCBvYmplY3QsIF8sICchJyk7XG4gKiBib3VuZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqL1xudmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykge1xuICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKGJpbmQpKTtcbiAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICB9XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kLnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmQ7XG4iLCJpbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2JpbmQuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogQmluZHMgbWV0aG9kcyBvZiBhbiBvYmplY3QgdG8gdGhlIG9iamVjdCBpdHNlbGYsIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZ1xuICogbWV0aG9kLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBib3VuZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBiaW5kIGFuZCBhc3NpZ24gdGhlIGJvdW5kIG1ldGhvZHMgdG8uXG4gKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBtZXRob2ROYW1lcyBUaGUgb2JqZWN0IG1ldGhvZCBuYW1lcyB0byBiaW5kLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHZpZXcgPSB7XG4gKiAgICdsYWJlbCc6ICdkb2NzJyxcbiAqICAgJ2NsaWNrJzogZnVuY3Rpb24oKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ2NsaWNrZWQgJyArIHRoaXMubGFiZWwpO1xuICogICB9XG4gKiB9O1xuICpcbiAqIF8uYmluZEFsbCh2aWV3LCBbJ2NsaWNrJ10pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHZpZXcuY2xpY2spO1xuICogLy8gPT4gTG9ncyAnY2xpY2tlZCBkb2NzJyB3aGVuIGNsaWNrZWQuXG4gKi9cbnZhciBiaW5kQWxsID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykge1xuICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGtleSA9IHRvS2V5KGtleSk7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBiaW5kKG9iamVjdFtrZXldLCBvYmplY3QpKTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgYmluZEFsbDtcbiIsImltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcbmltcG9ydCBnZXRIb2xkZXIgZnJvbSAnLi9fZ2V0SG9sZGVyLmpzJztcbmltcG9ydCByZXBsYWNlSG9sZGVycyBmcm9tICcuL19yZXBsYWNlSG9sZGVycy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0aCBgcGFydGlhbHNgXG4gKiBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkgYWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZVxuICogbWV0aG9kcyB0aGF0IG1heSBiZSByZWRlZmluZWQgb3IgZG9uJ3QgeWV0IGV4aXN0LiBTZWVcbiAqIFtQZXRlciBNaWNoYXV4J3MgYXJ0aWNsZV0oaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvbGF6eS1mdW5jdGlvbi1kZWZpbml0aW9uLXBhdHRlcm4pXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFRoZSBgXy5iaW5kS2V5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kLlxuICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHtcbiAqICAgJ3VzZXInOiAnZnJlZCcsXG4gKiAgICdncmVldCc6IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICogICB9XG4gKiB9O1xuICpcbiAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsICdoaScpO1xuICogYm91bmQoJyEnKTtcbiAqIC8vID0+ICdoaSBmcmVkISdcbiAqXG4gKiBvYmplY3QuZ3JlZXQgPSBmdW5jdGlvbihncmVldGluZywgcHVuY3R1YXRpb24pIHtcbiAqICAgcmV0dXJuIGdyZWV0aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAqIH07XG4gKlxuICogYm91bmQoJyEnKTtcbiAqIC8vID0+ICdoaXlhIGZyZWQhJ1xuICpcbiAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGJvdW5kID0gXy5iaW5kS2V5KG9iamVjdCwgJ2dyZWV0JywgXywgJyEnKTtcbiAqIGJvdW5kKCdoaScpO1xuICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gKi9cbnZhciBiaW5kS2V5ID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7XG4gIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmIChwYXJ0aWFscy5sZW5ndGgpIHtcbiAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZEtleSkpO1xuICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVdyYXAoa2V5LCBiaXRtYXNrLCBvYmplY3QsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5iaW5kS2V5LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGJpbmRLZXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTbGljZTtcbiIsImltcG9ydCBiYXNlU2xpY2UgZnJvbSAnLi9fYmFzZVNsaWNlLmpzJztcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdFNsaWNlO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1VuaWNvZGU7XG4iLCIvKipcbiAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pY29kZVRvQXJyYXk7XG4iLCJpbXBvcnQgYXNjaWlUb0FycmF5IGZyb20gJy4vX2FzY2lpVG9BcnJheS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCB1bmljb2RlVG9BcnJheSBmcm9tICcuL191bmljb2RlVG9BcnJheS5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHJpbmdUb0FycmF5O1xuIiwiaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgc3RyaW5nVG9BcnJheSBmcm9tICcuL19zdHJpbmdUb0FycmF5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDYXNlRmlyc3Q7XG4iLCJpbXBvcnQgY3JlYXRlQ2FzZUZpcnN0IGZyb20gJy4vX2NyZWF0ZUNhc2VGaXJzdC5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5leHBvcnQgZGVmYXVsdCB1cHBlckZpcnN0O1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuaW1wb3J0IHVwcGVyRmlyc3QgZnJvbSAnLi91cHBlckZpcnN0LmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UgYW5kIHRoZSByZW1haW5pbmdcbiAqIHRvIGxvd2VyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNhcGl0YWxpemVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jYXBpdGFsaXplKCdGUkVEJyk7XG4gKiAvLyA9PiAnRnJlZCdcbiAqL1xuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHVwcGVyRmlyc3QodG9TdHJpbmcoc3RyaW5nKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FwaXRhbGl6ZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlSZWR1Y2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQcm9wZXJ0eU9mO1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICdcXHhkZic6ICdzcycsXG4gIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICovXG52YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVidXJyTGV0dGVyO1xuIiwiaW1wb3J0IGRlYnVyckxldHRlciBmcm9tICcuL19kZWJ1cnJMZXR0ZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbnZhciByZUxhdGluID0gL1tcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx4ZmZcXHUwMTAwLVxcdTAxN2ZdL2c7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2U7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJvbHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrc19mb3JfU3ltYm9scykuXG4gKi9cbnZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4vKipcbiAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICogW0xhdGluLTEgU3VwcGxlbWVudF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW4tMV9TdXBwbGVtZW50XyhVbmljb2RlX2Jsb2NrKSNDaGFyYWN0ZXJfdGFibGUpXG4gKiBhbmQgW0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4dGVuZGVkLUEpXG4gKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGRlYnVyci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWJ1cnIoJ2TDqWrDoCB2dScpO1xuICogLy8gPT4gJ2RlamEgdnUnXG4gKi9cbmZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIHN0cmluZyAmJiBzdHJpbmcucmVwbGFjZShyZUxhdGluLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGVidXJyO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG52YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbi8qKlxuICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAqL1xuZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzY2lpV29yZHM7XG4iLCIvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG52YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBhIHdvcmQgY29tcG9zZWQgb2YgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFzVW5pY29kZVdvcmQ7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNEaW5nYmF0UmFuZ2UgPSAnXFxcXHUyNzAwLVxcXFx1MjdiZicsXG4gICAgcnNMb3dlclJhbmdlID0gJ2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZicsXG4gICAgcnNNYXRoT3BSYW5nZSA9ICdcXFxceGFjXFxcXHhiMVxcXFx4ZDdcXFxceGY3JyxcbiAgICByc05vbkNoYXJSYW5nZSA9ICdcXFxceDAwLVxcXFx4MmZcXFxceDNhLVxcXFx4NDBcXFxceDViLVxcXFx4NjBcXFxceDdiLVxcXFx4YmYnLFxuICAgIHJzUHVuY3R1YXRpb25SYW5nZSA9ICdcXFxcdTIwMDAtXFxcXHUyMDZmJyxcbiAgICByc1NwYWNlUmFuZ2UgPSAnIFxcXFx0XFxcXHgwYlxcXFxmXFxcXHhhMFxcXFx1ZmVmZlxcXFxuXFxcXHJcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdTE2ODBcXFxcdTE4MGVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMGFcXFxcdTIwMmZcXFxcdTIwNWZcXFxcdTMwMDAnLFxuICAgIHJzVXBwZXJSYW5nZSA9ICdBLVpcXFxceGMwLVxcXFx4ZDZcXFxceGQ4LVxcXFx4ZGUnLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJyxcbiAgICByc0JyZWFrUmFuZ2UgPSByc01hdGhPcFJhbmdlICsgcnNOb25DaGFyUmFuZ2UgKyByc1B1bmN0dWF0aW9uUmFuZ2UgKyByc1NwYWNlUmFuZ2U7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIixcbiAgICByc0JyZWFrID0gJ1snICsgcnNCcmVha1JhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNEaWdpdHMgPSAnXFxcXGQrJyxcbiAgICByc0RpbmdiYXQgPSAnWycgKyByc0RpbmdiYXRSYW5nZSArICddJyxcbiAgICByc0xvd2VyID0gJ1snICsgcnNMb3dlclJhbmdlICsgJ10nLFxuICAgIHJzTWlzYyA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgcnNCcmVha1JhbmdlICsgcnNEaWdpdHMgKyByc0RpbmdiYXRSYW5nZSArIHJzTG93ZXJSYW5nZSArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNVcHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbnZhciByc01pc2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICByc01pc2NVcHBlciA9ICcoPzonICsgcnNVcHBlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICByc09wdENvbnRyTG93ZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpkfGxsfG18cmV8c3x0fHZlKSk/JyxcbiAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18UkV8U3xUfFZFKSk/JyxcbiAgICByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgIHJzT3JkTG93ZXIgPSAnXFxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxcXGR0aCkoPz1cXFxcYnxbQS1aX10pJyxcbiAgICByc09yZFVwcGVyID0gJ1xcXFxkKig/OjFTVHwyTkR8M1JEfCg/IVsxMjNdKVxcXFxkVEgpKD89XFxcXGJ8W2Etel9dKScsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzRW1vamkgPSAnKD86JyArIFtyc0RpbmdiYXQsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzU2VxO1xuXG4vKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xudmFyIHJlVW5pY29kZVdvcmQgPSBSZWdFeHAoW1xuICByc1VwcGVyICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICByc01pc2NVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc01pc2NMb3dlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzVXBwZXIgKyAnPycgKyByc01pc2NMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlcixcbiAgcnNVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlcixcbiAgcnNPcmRVcHBlcixcbiAgcnNPcmRMb3dlcixcbiAgcnNEaWdpdHMsXG4gIHJzRW1vamlcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKipcbiAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICovXG5mdW5jdGlvbiB1bmljb2RlV29yZHMoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlV29yZCkgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVXb3JkcztcbiIsImltcG9ydCBhc2NpaVdvcmRzIGZyb20gJy4vX2FzY2lpV29yZHMuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGVXb3JkIGZyb20gJy4vX2hhc1VuaWNvZGVXb3JkLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcbmltcG9ydCB1bmljb2RlV29yZHMgZnJvbSAnLi9fdW5pY29kZVdvcmRzLmpzJztcblxuLyoqXG4gKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAqL1xuZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gIGlmIChwYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybikgfHwgW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdvcmRzO1xuIiwiaW1wb3J0IGFycmF5UmVkdWNlIGZyb20gJy4vX2FycmF5UmVkdWNlLmpzJztcbmltcG9ydCBkZWJ1cnIgZnJvbSAnLi9kZWJ1cnIuanMnO1xuaW1wb3J0IHdvcmRzIGZyb20gJy4vd29yZHMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCI7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xudmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVDb21wb3VuZGVyO1xuIiwiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi9jYXBpdGFsaXplLmpzJztcbmltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYW1lbCBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uY2FtZWxDYXNlKCdGb28gQmFyJyk7XG4gKiAvLyA9PiAnZm9vQmFyJ1xuICpcbiAqIF8uY2FtZWxDYXNlKCctLWZvby1iYXItLScpO1xuICogLy8gPT4gJ2Zvb0JhcidcbiAqXG4gKiBfLmNhbWVsQ2FzZSgnX19GT09fQkFSX18nKTtcbiAqIC8vID0+ICdmb29CYXInXG4gKi9cbnZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBjYW1lbENhc2U7XG4iLCJpbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC40LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNhc3RBcnJheSgxKTtcbiAqIC8vID0+IFsxXVxuICpcbiAqIF8uY2FzdEFycmF5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gW3sgJ2EnOiAxIH1dXG4gKlxuICogXy5jYXN0QXJyYXkoJ2FiYycpO1xuICogLy8gPT4gWydhYmMnXVxuICpcbiAqIF8uY2FzdEFycmF5KG51bGwpO1xuICogLy8gPT4gW251bGxdXG4gKlxuICogXy5jYXN0QXJyYXkodW5kZWZpbmVkKTtcbiAqIC8vID0+IFt1bmRlZmluZWRdXG4gKlxuICogXy5jYXN0QXJyYXkoKTtcbiAqIC8vID0+IFtdXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICogY29uc29sZS5sb2coXy5jYXN0QXJyYXkoYXJyYXkpID09PSBhcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNhc3RBcnJheSgpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYXN0QXJyYXk7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNGaW5pdGUgPSByb290LmlzRmluaXRlLFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLnJvdW5kYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8gdXNlIHdoZW4gcm91bmRpbmcuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUm91bmQobWV0aG9kTmFtZSkge1xuICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gIHJldHVybiBmdW5jdGlvbihudW1iZXIsIHByZWNpc2lvbikge1xuICAgIG51bWJlciA9IHRvTnVtYmVyKG51bWJlcik7XG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgIGlmIChwcmVjaXNpb24gJiYgbmF0aXZlSXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgLy8gU2hpZnQgd2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMuXG4gICAgICAvLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICB2YXIgcGFpciA9ICh0b1N0cmluZyhudW1iZXIpICsgJ2UnKS5zcGxpdCgnZScpLFxuICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsgJ2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7XG5cbiAgICAgIHBhaXIgPSAodG9TdHJpbmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpO1xuICAgICAgcmV0dXJuICsocGFpclswXSArICdlJyArICgrcGFpclsxXSAtIHByZWNpc2lvbikpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVSb3VuZDtcbiIsImltcG9ydCBjcmVhdGVSb3VuZCBmcm9tICcuL19jcmVhdGVSb3VuZC5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCB1cCB0byBgcHJlY2lzaW9uYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMTAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZCB1cC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdXAgdG8uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jZWlsKDQuMDA2KTtcbiAqIC8vID0+IDVcbiAqXG4gKiBfLmNlaWwoNi4wMDQsIDIpO1xuICogLy8gPT4gNi4wMVxuICpcbiAqIF8uY2VpbCg2MDQwLCAtMik7XG4gKiAvLyA9PiA2MTAwXG4gKi9cbnZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTtcblxuZXhwb3J0IGRlZmF1bHQgY2VpbDtcbiIsImltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2RcbiAqIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLiBUaGUgcmVzdWx0IG9mIHN1Y2ggc2VxdWVuY2VzIG11c3QgYmUgdW53cmFwcGVkXG4gKiB3aXRoIGBfI3ZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gKiBdO1xuICpcbiAqIHZhciB5b3VuZ2VzdCA9IF9cbiAqICAgLmNoYWluKHVzZXJzKVxuICogICAuc29ydEJ5KCdhZ2UnKVxuICogICAubWFwKGZ1bmN0aW9uKG8pIHtcbiAqICAgICByZXR1cm4gby51c2VyICsgJyBpcyAnICsgby5hZ2U7XG4gKiAgIH0pXG4gKiAgIC5oZWFkKClcbiAqICAgLnZhbHVlKCk7XG4gKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICovXG5mdW5jdGlvbiBjaGFpbih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgcmVzdWx0Ll9fY2hhaW5fXyA9IHRydWU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNoYWluO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNwbGl0IGludG8gZ3JvdXBzIHRoZSBsZW5ndGggb2YgYHNpemVgLlxuICogSWYgYGFycmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSByZW1haW5pbmdcbiAqIGVsZW1lbnRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9MV0gVGhlIGxlbmd0aCBvZiBlYWNoIGNodW5rXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAqIC8vID0+IFtbJ2EnLCAnYiddLCBbJ2MnLCAnZCddXVxuICpcbiAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICogLy8gPT4gW1snYScsICdiJywgJ2MnXSwgWydkJ11dXG4gKi9cbmZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICBpZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIHNpemUsIGd1YXJkKSA6IHNpemUgPT09IHVuZGVmaW5lZCkpIHtcbiAgICBzaXplID0gMTtcbiAgfSBlbHNlIHtcbiAgICBzaXplID0gbmF0aXZlTWF4KHRvSW50ZWdlcihzaXplKSwgMCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCB8fCBzaXplIDwgMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlQ2VpbChsZW5ndGggLyBzaXplKSk7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W3Jlc0luZGV4KytdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjaHVuaztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICovXG5mdW5jdGlvbiBiYXNlQ2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHtcbiAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7XG4gICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG51bWJlciA9IG51bWJlciA8PSB1cHBlciA/IG51bWJlciA6IHVwcGVyO1xuICAgIH1cbiAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyID49IGxvd2VyID8gbnVtYmVyIDogbG93ZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDbGFtcDtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDbGFtcHMgYG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNsYW1wKC0xMCwgLTUsIDUpO1xuICogLy8gPT4gLTVcbiAqXG4gKiBfLmNsYW1wKDEwLCAtNSwgNSk7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdXBwZXIgPSBsb3dlcjtcbiAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAodXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHVwcGVyID0gdG9OdW1iZXIodXBwZXIpO1xuICAgIHVwcGVyID0gdXBwZXIgPT09IHVwcGVyID8gdXBwZXIgOiAwO1xuICB9XG4gIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbG93ZXIgPSB0b051bWJlcihsb3dlcik7XG4gICAgbG93ZXIgPSBsb3dlciA9PT0gbG93ZXIgPyBsb3dlciA6IDA7XG4gIH1cbiAgcmV0dXJuIGJhc2VDbGFtcCh0b051bWJlcihudW1iZXIpLCBsb3dlciwgdXBwZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFtcDtcbiIsImltcG9ydCBMaXN0Q2FjaGUgZnJvbSAnLi9fTGlzdENhY2hlLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tIYXM7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgTWFwIGZyb20gJy4vX01hcC5qcyc7XG5pbXBvcnQgTWFwQ2FjaGUgZnJvbSAnLi9fTWFwQ2FjaGUuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RhY2tTZXQ7XG4iLCJpbXBvcnQgTGlzdENhY2hlIGZyb20gJy4vX0xpc3RDYWNoZS5qcyc7XG5pbXBvcnQgc3RhY2tDbGVhciBmcm9tICcuL19zdGFja0NsZWFyLmpzJztcbmltcG9ydCBzdGFja0RlbGV0ZSBmcm9tICcuL19zdGFja0RlbGV0ZS5qcyc7XG5pbXBvcnQgc3RhY2tHZXQgZnJvbSAnLi9fc3RhY2tHZXQuanMnO1xuaW1wb3J0IHN0YWNrSGFzIGZyb20gJy4vX3N0YWNrSGFzLmpzJztcbmltcG9ydCBzdGFja1NldCBmcm9tICcuL19zdGFja1NldC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuZXhwb3J0IGRlZmF1bHQgU3RhY2s7XG4iLCJpbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAqIG9yIGBjdXN0b21pemVyYCBmdW5jdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUFzc2lnbkluO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0dWJBcnJheTtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgc3R1YkFycmF5IGZyb20gJy4vc3R1YkFycmF5LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTeW1ib2xzO1xuIiwiaW1wb3J0IGNvcHlPYmplY3QgZnJvbSAnLi9fY29weU9iamVjdC5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9scyBmcm9tICcuL19nZXRTeW1ib2xzLmpzJztcblxuLyoqXG4gKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlTeW1ib2xzKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9scyhzb3VyY2UpLCBvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb3B5U3ltYm9scztcbiIsImltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHNJbiA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKG9iamVjdCkge1xuICAgIGFycmF5UHVzaChyZXN1bHQsIGdldFN5bWJvbHMob2JqZWN0KSk7XG4gICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGdldFN5bWJvbHNJbjtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGdldFN5bWJvbHNJbiBmcm9tICcuL19nZXRTeW1ib2xzSW4uanMnO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvcHlTeW1ib2xzSW47XG4iLCJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRBbGxLZXlzO1xuIiwiaW1wb3J0IGJhc2VHZXRBbGxLZXlzIGZyb20gJy4vX2Jhc2VHZXRBbGxLZXlzLmpzJztcbmltcG9ydCBnZXRTeW1ib2xzIGZyb20gJy4vX2dldFN5bWJvbHMuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5cztcbiIsImltcG9ydCBiYXNlR2V0QWxsS2V5cyBmcm9tICcuL19iYXNlR2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0U3ltYm9sc0luIGZyb20gJy4vX2dldFN5bWJvbHNJbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsS2V5c0luO1xuIiwiaW1wb3J0IGdldE5hdGl2ZSBmcm9tICcuL19nZXROYXRpdmUuanMnO1xuaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxuZXhwb3J0IGRlZmF1bHQgRGF0YVZpZXc7XG4iLCJpbXBvcnQgZ2V0TmF0aXZlIGZyb20gJy4vX2dldE5hdGl2ZS5qcyc7XG5pbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTtcbiIsImltcG9ydCBnZXROYXRpdmUgZnJvbSAnLi9fZ2V0TmF0aXZlLmpzJztcbmltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxuZXhwb3J0IGRlZmF1bHQgU2V0O1xuIiwiaW1wb3J0IERhdGFWaWV3IGZyb20gJy4vX0RhdGFWaWV3LmpzJztcbmltcG9ydCBNYXAgZnJvbSAnLi9fTWFwLmpzJztcbmltcG9ydCBQcm9taXNlIGZyb20gJy4vX1Byb21pc2UuanMnO1xuaW1wb3J0IFNldCBmcm9tICcuL19TZXQuanMnO1xuaW1wb3J0IFdlYWtNYXAgZnJvbSAnLi9fV2Vha01hcC5qcyc7XG5pbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCB0b1NvdXJjZSBmcm9tICcuL190b1NvdXJjZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRDbG9uZUFycmF5O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IFVpbnQ4QXJyYXk7XG4iLCJpbXBvcnQgVWludDhBcnJheSBmcm9tICcuL19VaW50OEFycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xuICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICBuZXcgVWludDhBcnJheShyZXN1bHQpLnNldChuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcikpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZUFycmF5QnVmZmVyO1xuIiwiaW1wb3J0IGNsb25lQXJyYXlCdWZmZXIgZnJvbSAnLi9fY2xvbmVBcnJheUJ1ZmZlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBkYXRhIHZpZXcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGF0YVZpZXcoZGF0YVZpZXcsIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcihkYXRhVmlldy5idWZmZXIpIDogZGF0YVZpZXcuYnVmZmVyO1xuICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVJlZ0V4cDtcbiIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBgc3ltYm9sYCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7XG4gIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVN5bWJvbDtcbiIsImltcG9ydCBjbG9uZUFycmF5QnVmZmVyIGZyb20gJy4vX2Nsb25lQXJyYXlCdWZmZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZVR5cGVkQXJyYXk7XG4iLCJpbXBvcnQgY2xvbmVBcnJheUJ1ZmZlciBmcm9tICcuL19jbG9uZUFycmF5QnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZURhdGFWaWV3IGZyb20gJy4vX2Nsb25lRGF0YVZpZXcuanMnO1xuaW1wb3J0IGNsb25lUmVnRXhwIGZyb20gJy4vX2Nsb25lUmVnRXhwLmpzJztcbmltcG9ydCBjbG9uZVN5bWJvbCBmcm9tICcuL19jbG9uZVN5bWJvbC5qcyc7XG5pbXBvcnQgY2xvbmVUeXBlZEFycmF5IGZyb20gJy4vX2Nsb25lVHlwZWRBcnJheS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZSBiYXNlZCBvbiBpdHMgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBNYXBgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIGBTZXRgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTtcblxuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzpcbiAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6XG4gICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVCeVRhZztcbiIsImltcG9ydCBiYXNlQ3JlYXRlIGZyb20gJy4vX2Jhc2VDcmVhdGUuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q2xvbmVPYmplY3Q7XG4iLCJpbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hcDtcbiIsImltcG9ydCBiYXNlSXNNYXAgZnJvbSAnLi9fYmFzZUlzTWFwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFwO1xuIiwiaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gc2V0VGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNTZXQ7XG4iLCJpbXBvcnQgYmFzZUlzU2V0IGZyb20gJy4vX2Jhc2VJc1NldC5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1NldChuZXcgU2V0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2V0KG5ldyBXZWFrU2V0KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1NldCA9IG5vZGVJc1NldCA/IGJhc2VVbmFyeShub2RlSXNTZXQpIDogYmFzZUlzU2V0O1xuXG5leHBvcnQgZGVmYXVsdCBpc1NldDtcbiIsImltcG9ydCBTdGFjayBmcm9tICcuL19TdGFjay5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VBc3NpZ24gZnJvbSAnLi9fYmFzZUFzc2lnbi5qcyc7XG5pbXBvcnQgYmFzZUFzc2lnbkluIGZyb20gJy4vX2Jhc2VBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgY2xvbmVCdWZmZXIgZnJvbSAnLi9fY2xvbmVCdWZmZXIuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGNvcHlTeW1ib2xzIGZyb20gJy4vX2NvcHlTeW1ib2xzLmpzJztcbmltcG9ydCBjb3B5U3ltYm9sc0luIGZyb20gJy4vX2NvcHlTeW1ib2xzSW4uanMnO1xuaW1wb3J0IGdldEFsbEtleXMgZnJvbSAnLi9fZ2V0QWxsS2V5cy5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaW5pdENsb25lQXJyYXkgZnJvbSAnLi9faW5pdENsb25lQXJyYXkuanMnO1xuaW1wb3J0IGluaXRDbG9uZUJ5VGFnIGZyb20gJy4vX2luaXRDbG9uZUJ5VGFnLmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNNYXAgZnJvbSAnLi9pc01hcC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUNsb25lO1xuIiwiaW1wb3J0IGJhc2VDbG9uZSBmcm9tICcuL19iYXNlQ2xvbmUuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNoYWxsb3cgY2xvbmUgb2YgYHZhbHVlYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGVcbiAqIFtzdHJ1Y3R1cmVkIGNsb25lIGFsZ29yaXRobV0oaHR0cHM6Ly9tZG4uaW8vU3RydWN0dXJlZF9jbG9uZV9hbGdvcml0aG0pXG4gKiBhbmQgc3VwcG9ydHMgY2xvbmluZyBhcnJheXMsIGFycmF5IGJ1ZmZlcnMsIGJvb2xlYW5zLCBkYXRlIG9iamVjdHMsIG1hcHMsXG4gKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWRcbiAqIGFycmF5cy4gVGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYGFyZ3VtZW50c2Agb2JqZWN0cyBhcmUgY2xvbmVkXG4gKiBhcyBwbGFpbiBvYmplY3RzLiBBbiBlbXB0eSBvYmplY3QgaXMgcmV0dXJuZWQgZm9yIHVuY2xvbmVhYmxlIHZhbHVlcyBzdWNoXG4gKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtNYXBzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiBAc2VlIF8uY2xvbmVEZWVwXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBzaGFsbG93ID0gXy5jbG9uZShvYmplY3RzKTtcbiAqIGNvbnNvbGUubG9nKHNoYWxsb3dbMF0gPT09IG9iamVjdHNbMF0pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBjbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZTtcbiIsImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dO1xuICpcbiAqIHZhciBkZWVwID0gXy5jbG9uZURlZXAob2JqZWN0cyk7XG4gKiBjb25zb2xlLmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkge1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXA7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5nLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGRlZXAgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lV2l0aFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKHRydWUpO1xuICogICB9XG4gKiB9XG4gKlxuICogdmFyIGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICpcbiAqIGNvbnNvbGUubG9nKGVsID09PSBkb2N1bWVudC5ib2R5KTtcbiAqIC8vID0+IGZhbHNlXG4gKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gKiAvLyA9PiAnQk9EWSdcbiAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAqIC8vID0+IDIwXG4gKi9cbmZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcsIGN1c3RvbWl6ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZURlZXBXaXRoO1xuIiwiaW1wb3J0IGJhc2VDbG9uZSBmcm9tICcuL19iYXNlQ2xvbmUuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgY2xvbmVkIHZhbHVlLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCxcbiAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoXG4gKiB1cCB0byBmb3VyIGFyZ3VtZW50czsgKHZhbHVlIFssIGluZGV4fGtleSwgb2JqZWN0LCBzdGFja10pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICogQHNlZSBfLmNsb25lRGVlcFdpdGhcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcih2YWx1ZSkge1xuICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZShmYWxzZSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgZWwgPSBfLmNsb25lV2l0aChkb2N1bWVudC5ib2R5LCBjdXN0b21pemVyKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gKiAvLyA9PiBmYWxzZVxuICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICogLy8gPT4gJ0JPRFknXG4gKiBjb25zb2xlLmxvZyhlbC5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gKiAvLyA9PiAwXG4gKi9cbmZ1bmN0aW9uIGNsb25lV2l0aCh2YWx1ZSwgY3VzdG9taXplcikge1xuICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsb25lV2l0aDtcbiIsImltcG9ydCBMb2Rhc2hXcmFwcGVyIGZyb20gJy4vX0xvZGFzaFdyYXBwZXIuanMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gKlxuICogQG5hbWUgY29tbWl0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogd3JhcHBlZC5sYXN0KCk7XG4gKiAvLyA9PiAzXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlckNvbW1pdDtcbiIsIi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB3aXRoIGFsbCBmYWxzZXkgdmFsdWVzIHJlbW92ZWQuIFRoZSB2YWx1ZXMgYGZhbHNlYCwgYG51bGxgLFxuICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNvbXBhY3QoWzAsIDEsIGZhbHNlLCAyLCAnJywgM10pO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGNvbXBhY3QoYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhY3Q7XG4iLCJpbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGFycmF5IGNvbmNhdGVuYXRpbmcgYGFycmF5YCB3aXRoIGFueSBhZGRpdGlvbmFsIGFycmF5c1xuICogYW5kL29yIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS5cbiAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGNvbmNhdGVuYXRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzFdO1xuICogdmFyIG90aGVyID0gXy5jb25jYXQoYXJyYXksIDIsIFszXSwgW1s0XV0pO1xuICpcbiAqIGNvbnNvbGUubG9nKG90aGVyKTtcbiAqIC8vID0+IFsxLCAyLCAzLCBbNF1dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzFdXG4gKi9cbmZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoIC0gMSksXG4gICAgICBhcnJheSA9IGFyZ3VtZW50c1swXSxcbiAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgYXJnc1tpbmRleCAtIDFdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJhc2VGbGF0dGVuKGFyZ3MsIDEpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uY2F0O1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRDYWNoZUhhcztcbiIsImltcG9ydCBNYXBDYWNoZSBmcm9tICcuL19NYXBDYWNoZS5qcyc7XG5pbXBvcnQgc2V0Q2FjaGVBZGQgZnJvbSAnLi9fc2V0Q2FjaGVBZGQuanMnO1xuaW1wb3J0IHNldENhY2hlSGFzIGZyb20gJy4vX3NldENhY2hlSGFzLmpzJztcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5leHBvcnQgZGVmYXVsdCBTZXRDYWNoZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U29tZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYWNoZUhhcztcbiIsImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBlcXVhbEFycmF5cztcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRUb0FycmF5O1xuIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IFVpbnQ4QXJyYXkgZnJvbSAnLi9fVWludDhBcnJheS5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5pbXBvcnQgZXF1YWxBcnJheXMgZnJvbSAnLi9fZXF1YWxBcnJheXMuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxCeVRhZztcbiIsImltcG9ydCBnZXRBbGxLZXlzIGZyb20gJy4vX2dldEFsbEtleXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcbiAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZXF1YWxPYmplY3RzO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBlcXVhbEFycmF5cyBmcm9tICcuL19lcXVhbEFycmF5cy5qcyc7XG5pbXBvcnQgZXF1YWxCeVRhZyBmcm9tICcuL19lcXVhbEJ5VGFnLmpzJztcbmltcG9ydCBlcXVhbE9iamVjdHMgZnJvbSAnLi9fZXF1YWxPYmplY3RzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc0VxdWFsRGVlcDtcbiIsImltcG9ydCBiYXNlSXNFcXVhbERlZXAgZnJvbSAnLi9fYmFzZUlzRXF1YWxEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUlzRXF1YWw7XG4iLCJpbXBvcnQgU3RhY2sgZnJvbSAnLi9fU3RhY2suanMnO1xuaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc01hdGNoO1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsImltcG9ydCBpc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9faXNTdHJpY3RDb21wYXJhYmxlLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRNYXRjaERhdGE7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwiaW1wb3J0IGJhc2VJc01hdGNoIGZyb20gJy4vX2Jhc2VJc01hdGNoLmpzJztcbmltcG9ydCBnZXRNYXRjaERhdGEgZnJvbSAnLi9fZ2V0TWF0Y2hEYXRhLmpzJztcbmltcG9ydCBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSBmcm9tICcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWF0Y2hlcztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSGFzSW47XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzQXJndW1lbnRzIGZyb20gJy4vaXNBcmd1bWVudHMuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuaW1wb3J0IGlzTGVuZ3RoIGZyb20gJy4vaXNMZW5ndGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhc1BhdGg7XG4iLCJpbXBvcnQgYmFzZUhhc0luIGZyb20gJy4vX2Jhc2VIYXNJbi5qcyc7XG5pbXBvcnQgaGFzUGF0aCBmcm9tICcuL19oYXNQYXRoLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXNJbjtcbiIsImltcG9ydCBiYXNlSXNFcXVhbCBmcm9tICcuL19iYXNlSXNFcXVhbC5qcyc7XG5pbXBvcnQgZ2V0IGZyb20gJy4vZ2V0LmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcbmltcG9ydCBpc0tleSBmcm9tICcuL19pc0tleS5qcyc7XG5pbXBvcnQgaXNTdHJpY3RDb21wYXJhYmxlIGZyb20gJy4vX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyc7XG5pbXBvcnQgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgZnJvbSAnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVByb3BlcnR5O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUHJvcGVydHlEZWVwO1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuaW1wb3J0IGJhc2VQcm9wZXJ0eURlZXAgZnJvbSAnLi9fYmFzZVByb3BlcnR5RGVlcC5qcyc7XG5pbXBvcnQgaXNLZXkgZnJvbSAnLi9faXNLZXkuanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwcm9wZXJ0eTtcbiIsImltcG9ydCBiYXNlTWF0Y2hlcyBmcm9tICcuL19iYXNlTWF0Y2hlcy5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgcHJvcGVydHkgZnJvbSAnLi9wcm9wZXJ0eS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJdGVyYXRlZTtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpdGVyYXRlcyBvdmVyIGBwYWlyc2AgYW5kIGludm9rZXMgdGhlIGNvcnJlc3BvbmRpbmdcbiAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8gcmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvblxuICogcGFpcnMgYXJlIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICogZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIFRoZSBwcmVkaWNhdGUtZnVuY3Rpb24gcGFpcnMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5jb25kKFtcbiAqICAgW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgICAgICAgICAgIF8uY29uc3RhbnQoJ21hdGNoZXMgQScpXSxcbiAqICAgW18uY29uZm9ybXMoeyAnYic6IF8uaXNOdW1iZXIgfSksIF8uY29uc3RhbnQoJ21hdGNoZXMgQicpXSxcbiAqICAgW18uc3R1YlRydWUsICAgICAgICAgICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldXG4gKiBdKTtcbiAqXG4gKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAnbWF0Y2hlcyBBJ1xuICpcbiAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTtcbiAqIC8vID0+ICdtYXRjaGVzIEInXG4gKlxuICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9KTtcbiAqIC8vID0+ICdubyBtYXRjaCdcbiAqL1xuZnVuY3Rpb24gY29uZChwYWlycykge1xuICB2YXIgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICB0b0l0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlO1xuXG4gIHBhaXJzID0gIWxlbmd0aCA/IFtdIDogYXJyYXlNYXAocGFpcnMsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICBpZiAodHlwZW9mIHBhaXJbMV0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgIH1cbiAgICByZXR1cm4gW3RvSXRlcmF0ZWUocGFpclswXSksIHBhaXJbMV1dO1xuICB9KTtcblxuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgIHZhciBpbmRleCA9IC0xO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgIGlmIChhcHBseShwYWlyWzBdLCB0aGlzLCBhcmdzKSkge1xuICAgICAgICByZXR1cm4gYXBwbHkocGFpclsxXSwgdGhpcywgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uZDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNUb2Agd2hpY2ggYWNjZXB0cyBgcHJvcHNgIHRvIGNoZWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKSB7XG4gIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbbGVuZ3RoXSxcbiAgICAgICAgcHJlZGljYXRlID0gc291cmNlW2tleV0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VDb25mb3Jtc1RvO1xuIiwiaW1wb3J0IGJhc2VDb25mb3Jtc1RvIGZyb20gJy4vX2Jhc2VDb25mb3Jtc1RvLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlQ29uZm9ybXMoc291cmNlKSB7XG4gIHZhciBwcm9wcyA9IGtleXMoc291cmNlKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlQ29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSwgcHJvcHMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlQ29uZm9ybXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZUNvbmZvcm1zIGZyb20gJy4vX2Jhc2VDb25mb3Jtcy5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoXG4gKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYSBnaXZlbiBvYmplY3QsIHJldHVybmluZyBgdHJ1ZWAgaWZcbiAqIGFsbCBwcmVkaWNhdGVzIHJldHVybiB0cnV0aHksIGVsc2UgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc1RvYCB3aXRoXG4gKiBgc291cmNlYCBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogMiwgJ2InOiAxIH0sXG4gKiAgIHsgJ2EnOiAxLCAnYic6IDIgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcihvYmplY3RzLCBfLmNvbmZvcm1zKHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KSk7XG4gKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XVxuICovXG5mdW5jdGlvbiBjb25mb3Jtcyhzb3VyY2UpIHtcbiAgcmV0dXJuIGJhc2VDb25mb3JtcyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY29uZm9ybXM7XG4iLCJpbXBvcnQgYmFzZUNvbmZvcm1zVG8gZnJvbSAnLi9fYmFzZUNvbmZvcm1zVG8uanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYG9iamVjdGAgY29uZm9ybXMgdG8gYHNvdXJjZWAgYnkgaW52b2tpbmcgdGhlIHByZWRpY2F0ZVxuICogcHJvcGVydGllcyBvZiBgc291cmNlYCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc2Agd2hlbiBgc291cmNlYCBpc1xuICogcGFydGlhbGx5IGFwcGxpZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjE0LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqXG4gKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAyOyB9IH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gc291cmNlID09IG51bGwgfHwgYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIGtleXMoc291cmNlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZvcm1zVG87XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5QWdncmVnYXRvcihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5QWdncmVnYXRvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRm9yO1xuIiwiaW1wb3J0IGNyZWF0ZUJhc2VGb3IgZnJvbSAnLi9fY3JlYXRlQmFzZUZvci5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvcjtcbiIsImltcG9ydCBiYXNlRm9yIGZyb20gJy4vX2Jhc2VGb3IuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBiYXNlRm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yKG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVCYXNlRWFjaDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuaW1wb3J0IGNyZWF0ZUJhc2VFYWNoIGZyb20gJy4vX2NyZWF0ZUJhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqL1xudmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFYWNoO1xuIiwiaW1wb3J0IGJhc2VFYWNoIGZyb20gJy4vX2Jhc2VFYWNoLmpzJztcblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCBvbiBgYWNjdW11bGF0b3JgIHdpdGgga2V5cyB0cmFuc2Zvcm1lZFxuICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHNldHRlcihhY2N1bXVsYXRvciwgdmFsdWUsIGl0ZXJhdGVlKHZhbHVlKSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGFycmF5QWdncmVnYXRvciBmcm9tICcuL19hcnJheUFnZ3JlZ2F0b3IuanMnO1xuaW1wb3J0IGJhc2VBZ2dyZWdhdG9yIGZyb20gJy4vX2Jhc2VBZ2dyZWdhdG9yLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uZ3JvdXBCeWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGFjY3VtdWxhdG9yIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFsaXplcikge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUFnZ3JlZ2F0b3IgOiBiYXNlQWdncmVnYXRvcixcbiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/IGluaXRpYWxpemVyKCkgOiB7fTtcblxuICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYWNjdW11bGF0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBZ2dyZWdhdG9yO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGNyZWF0ZUFnZ3JlZ2F0b3IgZnJvbSAnLi9fY3JlYXRlQWdncmVnYXRvci5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb2ZcbiAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJuZWQgYnkgYGl0ZXJhdGVlYC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC41LjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICogLy8gPT4geyAnMyc6IDIsICc1JzogMSB9XG4gKi9cbnZhciBjb3VudEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgKytyZXN1bHRba2V5XTtcbiAgfSBlbHNlIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIDEpO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgY291bnRCeTtcbiIsImltcG9ydCBiYXNlQXNzaWduIGZyb20gJy4vX2Jhc2VBc3NpZ24uanMnO1xuaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSBgcHJvdG90eXBlYCBvYmplY3QuIElmIGFcbiAqIGBwcm9wZXJ0aWVzYCBvYmplY3QgaXMgZ2l2ZW4sIGl0cyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllc1xuICogYXJlIGFzc2lnbmVkIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBUaGUgcHJvcGVydGllcyB0byBhc3NpZ24gdG8gdGhlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICogICB0aGlzLnggPSAwO1xuICogICB0aGlzLnkgPSAwO1xuICogfVxuICpcbiAqIGZ1bmN0aW9uIENpcmNsZSgpIHtcbiAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAqIH1cbiAqXG4gKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZVxuICogfSk7XG4gKlxuICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7XG4gKiBjaXJjbGUgaW5zdGFuY2VvZiBDaXJjbGU7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogY2lyY2xlIGluc3RhbmNlb2YgU2hhcGU7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgcmV0dXJuIHByb3BlcnRpZXMgPT0gbnVsbCA/IHJlc3VsdCA6IGJhc2VBc3NpZ24ocmVzdWx0LCBwcm9wZXJ0aWVzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlO1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQ1VSUllfRkxBRyA9IDg7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICogYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhdCBsZWFzdCBgYXJpdHlgIG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZVxuICogYmVlbiBwcm92aWRlZCwgb3IgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVtYWluaW5nIGBmdW5jYFxuICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gKiBpcyBub3Qgc3VmZmljaWVudC5cbiAqXG4gKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gKiBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gKiAgIHJldHVybiBbYSwgYiwgY107XG4gKiB9O1xuICpcbiAqIHZhciBjdXJyaWVkID0gXy5jdXJyeShhYmMpO1xuICpcbiAqIGN1cnJpZWQoMSkoMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIpKDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyLCAzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiBjdXJyaWVkKDEpKF8sIDMpKDIpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGN1cnJ5KGZ1bmMsIGFyaXR5LCBndWFyZCkge1xuICBhcml0eSA9IGd1YXJkID8gdW5kZWZpbmVkIDogYXJpdHk7XG4gIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnkucGxhY2Vob2xkZXI7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbmN1cnJ5LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGN1cnJ5O1xuIiwiaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY3VycnlgIGV4Y2VwdCB0aGF0IGFyZ3VtZW50cyBhcmUgYXBwbGllZCB0byBgZnVuY2BcbiAqIGluIHRoZSBtYW5uZXIgb2YgYF8ucGFydGlhbFJpZ2h0YCBpbnN0ZWFkIG9mIGBfLnBhcnRpYWxgLlxuICpcbiAqIFRoZSBgXy5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfTtcbiAqXG4gKiB2YXIgY3VycmllZCA9IF8uY3VycnlSaWdodChhYmMpO1xuICpcbiAqIGN1cnJpZWQoMykoMikoMSk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDIsIDMpKDEpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyLCAzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiBjdXJyaWVkKDMpKDEsIF8pKDIpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9SSUdIVF9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeVJpZ2h0LnBsYWNlaG9sZGVyO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IGN1cnJ5UmlnaHQ7XG4iLCJpbXBvcnQgcm9vdCBmcm9tICcuL19yb290LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbm93O1xuIiwiaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IG5vdyBmcm9tICcuL25vdy5qcyc7XG5pbXBvcnQgdG9OdW1iZXIgZnJvbSAnLi90b051bWJlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICB0aW1lV2FpdGluZyA9IHdhaXQgLSB0aW1lU2luY2VMYXN0Q2FsbDtcblxuICAgIHJldHVybiBtYXhpbmdcbiAgICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9rZSlcbiAgICAgIDogdGltZVdhaXRpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRJbnZva2UodGltZSkge1xuICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUgLSBsYXN0Q2FsbFRpbWUsXG4gICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAvLyBFaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCwgYWN0aXZpdHkgaGFzIHN0b3BwZWQgYW5kIHdlJ3JlIGF0IHRoZVxuICAgIC8vIHRyYWlsaW5nIGVkZ2UsIHRoZSBzeXN0ZW0gdGltZSBoYXMgZ29uZSBiYWNrd2FyZHMgYW5kIHdlJ3JlIHRyZWF0aW5nXG4gICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgIHJldHVybiAobGFzdENhbGxUaW1lID09PSB1bmRlZmluZWQgfHwgKHRpbWVTaW5jZUxhc3RDYWxsID49IHdhaXQpIHx8XG4gICAgICAodGltZVNpbmNlTGFzdENhbGwgPCAwKSB8fCAobWF4aW5nICYmIHRpbWVTaW5jZUxhc3RJbnZva2UgPj0gbWF4V2FpdCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkge1xuICAgIHZhciB0aW1lID0gbm93KCk7XG4gICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTtcbiAgICB9XG4gICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgdGltZXJJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIE9ubHkgaW52b2tlIGlmIHdlIGhhdmUgYGxhc3RBcmdzYCB3aGljaCBtZWFucyBgZnVuY2AgaGFzIGJlZW5cbiAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICBpZiAodHJhaWxpbmcgJiYgbGFzdEFyZ3MpIHtcbiAgICAgIHJldHVybiBpbnZva2VGdW5jKHRpbWUpO1xuICAgIH1cbiAgICBsYXN0QXJncyA9IGxhc3RUaGlzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICBsYXN0SW52b2tlVGltZSA9IDA7XG4gICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICBpc0ludm9raW5nID0gc2hvdWxkSW52b2tlKHRpbWUpO1xuXG4gICAgbGFzdEFyZ3MgPSBhcmd1bWVudHM7XG4gICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7XG5cbiAgICBpZiAoaXNJbnZva2luZykge1xuICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbGVhZGluZ0VkZ2UobGFzdENhbGxUaW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgLy8gSGFuZGxlIGludm9jYXRpb25zIGluIGEgdGlnaHQgbG9vcC5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICByZXR1cm4gaW52b2tlRnVuYyhsYXN0Q2FsbFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGltZXJJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWJvdW5jZTtcbiIsIi8qKlxuICogQ2hlY2tzIGB2YWx1ZWAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZCBpblxuICogaXRzIHBsYWNlLiBUaGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaWYgYHZhbHVlYCBpcyBgTmFOYCwgYG51bGxgLFxuICogb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjE0LjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRUbygxLCAxMCk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5kZWZhdWx0VG8odW5kZWZpbmVkLCAxMCk7XG4gKiAvLyA9PiAxMFxuICovXG5mdW5jdGlvbiBkZWZhdWx0VG8odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4gKHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0VG87XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2VcbiAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICogcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRkaXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmRlZmF1bHRzRGVlcFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbnZhciBkZWZhdWx0cyA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoO1xuICB2YXIgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgbGVuZ3RoID0gMTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3VyY2UpO1xuICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgdmFyIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsrcHJvcHNJbmRleCA8IHByb3BzTGVuZ3RoKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NpZ25NZXJnZVZhbHVlO1xuIiwiaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNBcnJheUxpa2VPYmplY3Q7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FmZUdldDtcbiIsImltcG9ydCBjb3B5T2JqZWN0IGZyb20gJy4vX2NvcHlPYmplY3QuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xuICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVgIHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICpcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICovXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHZhbHVlLCBrZXlzSW4odmFsdWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9QbGFpbk9iamVjdDtcbiIsImltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGNsb25lQnVmZmVyIGZyb20gJy4vX2Nsb25lQnVmZmVyLmpzJztcbmltcG9ydCBjbG9uZVR5cGVkQXJyYXkgZnJvbSAnLi9fY2xvbmVUeXBlZEFycmF5LmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBpbml0Q2xvbmVPYmplY3QgZnJvbSAnLi9faW5pdENsb25lT2JqZWN0LmpzJztcbmltcG9ydCBpc0FyZ3VtZW50cyBmcm9tICcuL2lzQXJndW1lbnRzLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5pbXBvcnQgdG9QbGFpbk9iamVjdCBmcm9tICcuL3RvUGxhaW5PYmplY3QuanMnO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWVyZ2VEZWVwO1xuIiwiaW1wb3J0IFN0YWNrIGZyb20gJy4vX1N0YWNrLmpzJztcbmltcG9ydCBhc3NpZ25NZXJnZVZhbHVlIGZyb20gJy4vX2Fzc2lnbk1lcmdlVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgYmFzZU1lcmdlRGVlcCBmcm9tICcuL19iYXNlTWVyZ2VEZWVwLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuaW1wb3J0IHNhZmVHZXQgZnJvbSAnLi9fc2FmZUdldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgaWYgKGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfSwga2V5c0luKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU1lcmdlO1xuIiwiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8uZGVmYXVsdHNEZWVwYCB0byBjdXN0b21pemUgaXRzIGBfLm1lcmdlYCB1c2UgdG8gbWVyZ2Ugc291cmNlXG4gKiBvYmplY3RzIGludG8gZGVzdGluYXRpb24gb2JqZWN0cyB0aGF0IGFyZSBwYXNzZWQgdGhydS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSBzb3VyY2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIG1lcmdlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgcGFyZW50IG9iamVjdCBvZiBgc3JjVmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBjdXN0b21EZWZhdWx0c01lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spIHtcbiAgaWYgKGlzT2JqZWN0KG9ialZhbHVlKSAmJiBpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG9ialZhbHVlKTtcbiAgICBiYXNlTWVyZ2Uob2JqVmFsdWUsIHNyY1ZhbHVlLCB1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UsIHN0YWNrKTtcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBvYmpWYWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tRGVmYXVsdHNNZXJnZTtcbiIsImltcG9ydCBiYXNlTWVyZ2UgZnJvbSAnLi9fYmFzZU1lcmdlLmpzJztcbmltcG9ydCBjcmVhdGVBc3NpZ25lciBmcm9tICcuL19jcmVhdGVBc3NpZ25lci5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgbWVyZ2VkIHZhbHVlcyBvZiB0aGUgZGVzdGluYXRpb24gYW5kIHNvdXJjZVxuICogcHJvcGVydGllcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIG1lcmdpbmcgaXMgaGFuZGxlZCBieSB0aGVcbiAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOlxuICogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICogICBpZiAoXy5pc0FycmF5KG9ialZhbHVlKSkge1xuICogICAgIHJldHVybiBvYmpWYWx1ZS5jb25jYXQoc3JjVmFsdWUpO1xuICogICB9XG4gKiB9XG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbMV0sICdiJzogWzJdIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogWzNdLCAnYic6IFs0XSB9O1xuICpcbiAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICogLy8gPT4geyAnYSc6IFsxLCAzXSwgJ2InOiBbMiwgNF0gfVxuICovXG52YXIgbWVyZ2VXaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlV2l0aDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzTWVyZ2UgZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNNZXJnZS5qcyc7XG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJy4vbWVyZ2VXaXRoLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRlZmF1bHRzYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBhc3NpZ25zXG4gKiBkZWZhdWx0IHByb3BlcnRpZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjEwLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBzZWUgXy5kZWZhdWx0c1xuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlZmF1bHRzRGVlcCh7ICdhJzogeyAnYic6IDIgfSB9LCB7ICdhJzogeyAnYic6IDEsICdjJzogMyB9IH0pO1xuICogLy8gPT4geyAnYSc6IHsgJ2InOiAyLCAnYyc6IDMgfSB9XG4gKi9cbnZhciBkZWZhdWx0c0RlZXAgPSBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gIGFyZ3MucHVzaCh1bmRlZmluZWQsIGN1c3RvbURlZmF1bHRzTWVyZ2UpO1xuICByZXR1cm4gYXBwbHkobWVyZ2VXaXRoLCB1bmRlZmluZWQsIGFyZ3MpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzRGVlcDtcbiIsIi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAqIHRvIHByb3ZpZGUgdG8gYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIgaWQgb3IgdGltZW91dCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7IH0sIHdhaXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRGVsYXk7XG4iLCJpbXBvcnQgYmFzZURlbGF5IGZyb20gJy4vX2Jhc2VEZWxheS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIERlZmVycyBpbnZva2luZyB0aGUgYGZ1bmNgIHVudGlsIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzIGNsZWFyZWQuIEFueVxuICogYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lciBpZC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kZWZlcihmdW5jdGlvbih0ZXh0KSB7XG4gKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICogfSwgJ2RlZmVycmVkJyk7XG4gKiAvLyA9PiBMb2dzICdkZWZlcnJlZCcgYWZ0ZXIgb25lIG1pbGxpc2Vjb25kLlxuICovXG52YXIgZGVmZXIgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBhcmdzKSB7XG4gIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmZXI7XG4iLCJpbXBvcnQgYmFzZURlbGF5IGZyb20gJy4vX2Jhc2VEZWxheS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKipcbiAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlbGF5LlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVsYXkoZnVuY3Rpb24odGV4dCkge1xuICogICBjb25zb2xlLmxvZyh0ZXh0KTtcbiAqIH0sIDEwMDAsICdsYXRlcicpO1xuICogLy8gPT4gTG9ncyAnbGF0ZXInIGFmdGVyIG9uZSBzZWNvbmQuXG4gKi9cbnZhciBkZWxheSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCB0b051bWJlcih3YWl0KSB8fCAwLCBhcmdzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBkZWxheTtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXNXaXRoKGFycmF5LCB2YWx1ZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IodmFsdWUsIGFycmF5W2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXNXaXRoIGZyb20gJy4vX2FycmF5SW5jbHVkZXNXaXRoLmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgY2FjaGVIYXMgZnJvbSAnLi9fY2FjaGVIYXMuanMnO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kaWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBleGNsdWRpbmcgbXVsdGlwbGUgYXJyYXlzIG9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICBpc0NvbW1vbiA9IHRydWUsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBbXSxcbiAgICAgIHZhbHVlc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChpdGVyYXRlZSkge1xuICAgIHZhbHVlcyA9IGFycmF5TWFwKHZhbHVlcywgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gIH1cbiAgZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIHZhbHVlcyA9IG5ldyBTZXRDYWNoZSh2YWx1ZXMpO1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICB3aGlsZSAodmFsdWVzSW5kZXgtLSkge1xuICAgICAgICBpZiAodmFsdWVzW3ZhbHVlc0luZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXModmFsdWVzLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZURpZmZlcmVuY2U7XG4iLCJpbXBvcnQgYmFzZURpZmZlcmVuY2UgZnJvbSAnLi9fYmFzZURpZmZlcmVuY2UuanMnO1xuaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBgYXJyYXlgIHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKiBAc2VlIF8ud2l0aG91dCwgXy54b3JcbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsxXVxuICovXG52YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdChbMSwgMiwgM10pO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0O1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaFxuICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgYW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxCeWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kaWZmZXJlbmNlQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMS4yXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCBbeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAqL1xudmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGl0ZXJhdGVlID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUJ5O1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlT2JqZWN0IGZyb20gJy4vaXNBcnJheUxpa2VPYmplY3QuanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZVdpdGg7XG4iLCJpbXBvcnQgY3JlYXRlTWF0aE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVNYXRoT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBEaXZpZGUgdHdvIG51bWJlcnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjcuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpZGVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZGl2aXNvciBUaGUgc2Vjb25kIG51bWJlciBpbiBhIGRpdmlzaW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVvdGllbnQuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGl2aWRlKDYsIDQpO1xuICogLy8gPT4gMS41XG4gKi9cbnZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gIHJldHVybiBkaXZpZGVuZCAvIGRpdmlzb3I7XG59LCAxKTtcblxuZXhwb3J0IGRlZmF1bHQgZGl2aWRlO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9wLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbMiwgM11cbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFszXVxuICpcbiAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gW11cbiAqXG4gKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICovXG5mdW5jdGlvbiBkcm9wKGFycmF5LCBuLCBndWFyZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3A7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRyb3BSaWdodChbMSwgMiwgM10pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFsxXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIG4gPSBsZW5ndGggLSBuO1xuICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZHJvcFJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gKiB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUsIGlzRHJvcCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpICYmXG4gICAgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge31cblxuICByZXR1cm4gaXNEcm9wXG4gICAgPyBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyAwIDogaW5kZXgpLCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogbGVuZ3RoKSlcbiAgICA6IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5kZXgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVdoaWxlO1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VXaGlsZSBmcm9tICcuL19iYXNlV2hpbGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIGRyb3BSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlV2hpbGUoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCB0cnVlLCB0cnVlKVxuICAgIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRyb3BSaWdodFdoaWxlO1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VXaGlsZSBmcm9tICcuL19iYXNlV2hpbGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy5cbiAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kcm9wV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZHJvcFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVdoaWxlKGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgdHJ1ZSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkcm9wV2hpbGU7XG4iLCJpbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNhc3RGdW5jdGlvbjtcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggZWxlbWVudC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZvaWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gXG4gKiBvciBgXy5mb3JPd25gIGZvciBvYmplY3QgaXRlcmF0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBlYWNoXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC5cbiAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAqXG4gKiBfLmZvckVhY2goeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RWFjaCA6IGJhc2VFYWNoO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hSaWdodGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlFYWNoUmlnaHQ7XG4iLCJpbXBvcnQgY3JlYXRlQmFzZUZvciBmcm9tICcuL19jcmVhdGVCYXNlRm9yLmpzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VGb3JgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllc1xuICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvclJpZ2h0ID0gY3JlYXRlQmFzZUZvcih0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZvclJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VGb3JSaWdodCBmcm9tICcuL19iYXNlRm9yUmlnaHQuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvclJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRm9yT3duUmlnaHQ7XG4iLCJpbXBvcnQgYmFzZUZvck93blJpZ2h0IGZyb20gJy4vX2Jhc2VGb3JPd25SaWdodC5qcyc7XG5pbXBvcnQgY3JlYXRlQmFzZUVhY2ggZnJvbSAnLi9fY3JlYXRlQmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hSaWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaFJpZ2h0ID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LCB0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgYmFzZUVhY2hSaWdodDtcbiIsImltcG9ydCBhcnJheUVhY2hSaWdodCBmcm9tICcuL19hcnJheUVhY2hSaWdodC5qcyc7XG5pbXBvcnQgYmFzZUVhY2hSaWdodCBmcm9tICcuL19iYXNlRWFjaFJpZ2h0LmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JFYWNoYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBhbGlhcyBlYWNoUmlnaHRcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICogQHNlZSBfLmZvckVhY2hcbiAqIEBleGFtcGxlXG4gKlxuICogXy5mb3JFYWNoUmlnaHQoWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICogICBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gKiB9KTtcbiAqIC8vID0+IExvZ3MgYDJgIHRoZW4gYDFgLlxuICovXG5mdW5jdGlvbiBmb3JFYWNoUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoUmlnaHQgOiBiYXNlRWFjaFJpZ2h0O1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yRWFjaFJpZ2h0O1xuIiwiaW1wb3J0IGJhc2VDbGFtcCBmcm9tICcuL19iYXNlQ2xhbXAuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb249c3RyaW5nLmxlbmd0aF0gVGhlIHBvc2l0aW9uIHRvIHNlYXJjaCB1cCB0by5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVuZHNXaXRoKCdhYmMnLCAnYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZW5kc1dpdGgoJ2FiYycsICdiJywgMik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcblxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkXG4gICAgPyBsZW5ndGhcbiAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBsZW5ndGgpO1xuXG4gIHZhciBlbmQgPSBwb3NpdGlvbjtcbiAgcG9zaXRpb24gLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgcmV0dXJuIHBvc2l0aW9uID49IDAgJiYgc3RyaW5nLnNsaWNlKHBvc2l0aW9uLCBlbmQpID09IHRhcmdldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZW5kc1dpdGg7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNgIGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXlcbiAqIG9mIGtleS12YWx1ZSBwYWlycyBmb3IgYG9iamVjdGAgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZXMgb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIFtrZXksIG9iamVjdFtrZXldXTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VUb1BhaXJzO1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBpdHMgdmFsdWUtdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldFRvUGFpcnM7XG4iLCJpbXBvcnQgYmFzZVRvUGFpcnMgZnJvbSAnLi9fYmFzZVRvUGFpcnMuanMnO1xuaW1wb3J0IGdldFRhZyBmcm9tICcuL19nZXRUYWcuanMnO1xuaW1wb3J0IG1hcFRvQXJyYXkgZnJvbSAnLi9fbWFwVG9BcnJheS5qcyc7XG5pbXBvcnQgc2V0VG9QYWlycyBmcm9tICcuL19zZXRUb1BhaXJzLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciB0YWcgPSBnZXRUYWcob2JqZWN0KTtcbiAgICBpZiAodGFnID09IG1hcFRhZykge1xuICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBzZXRUYWcpIHtcbiAgICAgIHJldHVybiBzZXRUb1BhaXJzKG9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlVG9QYWlycyhvYmplY3QsIGtleXNGdW5jKG9iamVjdCkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUb1BhaXJzO1xuIiwiaW1wb3J0IGNyZWF0ZVRvUGFpcnMgZnJvbSAnLi9fY3JlYXRlVG9QYWlycy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YFxuICogd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwIG9yIHNldCwgaXRzXG4gKiBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAYWxpYXMgZW50cmllc1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udG9QYWlycyhuZXcgRm9vKTtcbiAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl1dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbnZhciB0b1BhaXJzID0gY3JlYXRlVG9QYWlycyhrZXlzKTtcblxuZXhwb3J0IGRlZmF1bHQgdG9QYWlycztcbiIsImltcG9ydCBjcmVhdGVUb1BhaXJzIGZyb20gJy4vX2NyZWF0ZVRvUGFpcnMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlyc1xuICogZm9yIGBvYmplY3RgIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcFxuICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGFsaWFzIGVudHJpZXNJblxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udG9QYWlyc0luKG5ldyBGb28pO1xuICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbnZhciB0b1BhaXJzSW4gPSBjcmVhdGVUb1BhaXJzKGtleXNJbik7XG5cbmV4cG9ydCBkZWZhdWx0IHRvUGFpcnNJbjtcbiIsImltcG9ydCBiYXNlUHJvcGVydHlPZiBmcm9tICcuL19iYXNlUHJvcGVydHlPZi5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hcCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuICovXG52YXIgaHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmIzM5Oydcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy5lc2NhcGVgIHRvIGNvbnZlcnQgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAqL1xudmFyIGVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbEVzY2FwZXMpO1xuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVIdG1sQ2hhcjtcbiIsImltcG9ydCBlc2NhcGVIdG1sQ2hhciBmcm9tICcuL19lc2NhcGVIdG1sQ2hhci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIEhUTUwgZW50aXRpZXMgYW5kIEhUTUwgY2hhcmFjdGVycy4gKi9cbnZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PlwiJ10vZyxcbiAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gKiBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuXG4gKlxuICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gKiBjaGFyYWN0ZXJzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gKiBcIj5cIiBhbmQgXCIvXCIgZG9uJ3QgbmVlZCBlc2NhcGluZyBpbiBIVE1MIGFuZCBoYXZlIG5vIHNwZWNpYWwgbWVhbmluZ1xuICogdW5sZXNzIHRoZXkncmUgcGFydCBvZiBhIHRhZyBvciB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuIFNlZVxuICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICogKHVuZGVyIFwic2VtaS1yZWxhdGVkIGZ1biBmYWN0XCIpIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICogW3F1b3RlIGF0dHJpYnV0ZSB2YWx1ZXNdKGh0dHA6Ly93b25rby5jb20vcG9zdC9odG1sLWVzY2FwaW5nKSB0byByZWR1Y2VcbiAqIFhTUyB2ZWN0b3JzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAqIC8vID0+ICdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSlcbiAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGVzY2FwZTtcbiIsImltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcbiAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbi8qKlxuICogRXNjYXBlcyB0aGUgYFJlZ0V4cGAgc3BlY2lhbCBjaGFyYWN0ZXJzIFwiXlwiLCBcIiRcIiwgXCJcXFwiLCBcIi5cIiwgXCIqXCIsIFwiK1wiLFxuICogXCI/XCIsIFwiKFwiLCBcIilcIiwgXCJbXCIsIFwiXVwiLCBcIntcIiwgXCJ9XCIsIGFuZCBcInxcIiBpbiBgc3RyaW5nYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gKiAvLyA9PiAnXFxbbG9kYXNoXFxdXFwoaHR0cHM6Ly9sb2Rhc2hcXC5jb20vXFwpJ1xuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhci50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVSZWdFeHA7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoIXByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5RXZlcnk7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgXG4gKi9cbmZ1bmN0aW9uIGJhc2VFdmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdCA9ICEhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VFdmVyeTtcbiIsImltcG9ydCBhcnJheUV2ZXJ5IGZyb20gJy4vX2FycmF5RXZlcnkuanMnO1xuaW1wb3J0IGJhc2VFdmVyeSBmcm9tICcuL19iYXNlRXZlcnkuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFsbCoqIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYC5cbiAqIEl0ZXJhdGlvbiBpcyBzdG9wcGVkIG9uY2UgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXNcbiAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAgZm9yXG4gKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZVxuICogW2V2ZXJ5dGhpbmcgaXMgdHJ1ZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmFjdW91c190cnV0aCkgb2ZcbiAqIGVsZW1lbnRzIG9mIGVtcHR5IGNvbGxlY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ldmVyeSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5ldmVyeSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gZXZlcnkoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBldmVyeTtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlciBzdWl0YWJsZSBmb3IgdXNlIGFzIHRoZSBsZW5ndGggb2YgYW5cbiAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTGVuZ3RoKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IDQyOTQ5NjcyOTVcbiAqXG4gKiBfLnRvTGVuZ3RoKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9MZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYmFzZUNsYW1wKHRvSW50ZWdlcih2YWx1ZSksIDAsIE1BWF9BUlJBWV9MRU5HVEgpIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9MZW5ndGg7XG4iLCJpbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b0xlbmd0aCBmcm9tICcuL3RvTGVuZ3RoLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICB9XG4gIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBlbmQgPSBzdGFydCA+IGVuZCA/IDAgOiB0b0xlbmd0aChlbmQpO1xuICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbGw7XG4iLCJpbXBvcnQgYmFzZUZpbGwgZnJvbSAnLi9fYmFzZUZpbGwuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBGaWxscyBlbGVtZW50cyBvZiBgYXJyYXlgIHdpdGggYHZhbHVlYCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3RcbiAqIGluY2x1ZGluZywgYGVuZGAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXy5maWxsKGFycmF5LCAnYScpO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gKlxuICogXy5maWxsKEFycmF5KDMpLCAyKTtcbiAqIC8vID0+IFsyLCAyLCAyXVxuICpcbiAqIF8uZmlsbChbNCwgNiwgOCwgMTBdLCAnKicsIDEsIDMpO1xuICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAqL1xuZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc3RhcnQgJiYgdHlwZW9mIHN0YXJ0ICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQpKSB7XG4gICAgc3RhcnQgPSAwO1xuICAgIGVuZCA9IGxlbmd0aDtcbiAgfVxuICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmlsbDtcbiIsImltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmlsdGVyYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbHRlcjtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaWx0ZXI7XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5maW5kYCBvciBgXy5maW5kTGFzdGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZpbmRJbmRleEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGNvbGxlY3Rpb24gaW5kZXguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGaW5kKGZpbmRJbmRleEZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pO1xuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpO1xuICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICBwcmVkaWNhdGUgPSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpOyB9O1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICByZXR1cm4gaW5kZXggPiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbmQ7XG4iLCJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyID09ICdiYXJuZXknOyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRJbmRleCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gMFxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaW5kSW5kZXg7XG4iLCJpbXBvcnQgY3JlYXRlRmluZCBmcm9tICcuL19jcmVhdGVGaW5kLmpzJztcbmltcG9ydCBmaW5kSW5kZXggZnJvbSAnLi9maW5kSW5kZXguanMnO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmQ7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5maW5kS2V5YCBhbmQgYF8uZmluZExhc3RLZXlgLFxuICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICogdXNpbmcgYGVhY2hGdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZm91bmQgZWxlbWVudCBvciBpdHMga2V5LCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gIHZhciByZXN1bHQ7XG4gIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICByZXN1bHQgPSBrZXk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUZpbmRLZXk7XG4iLCJpbXBvcnQgYmFzZUZpbmRLZXkgZnJvbSAnLi9fYmFzZUZpbmRLZXkuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBrZXkgb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAqICBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiB9O1xuICpcbiAqIF8uZmluZEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRLZXkodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gJ3BlYmJsZXMnXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kS2V5KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAnZnJlZCdcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gJ2Jhcm5leSdcbiAqL1xuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93bik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRLZXk7XG4iLCJpbXBvcnQgYmFzZUZpbmRJbmRleCBmcm9tICcuL19iYXNlRmluZEluZGV4LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHNcbiAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PWFycmF5Lmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICogLy8gPT4gMlxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiAyXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IDBcbiAqL1xuZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgIGluZGV4ID0gZnJvbUluZGV4IDwgMFxuICAgICAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApXG4gICAgICA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBpbmRleCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZpbmRMYXN0SW5kZXg7XG4iLCJpbXBvcnQgY3JlYXRlRmluZCBmcm9tICcuL19jcmVhdGVGaW5kLmpzJztcbmltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlvbi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDE7XG4gKiB9KTtcbiAqIC8vID0+IDNcbiAqL1xudmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdEluZGV4KTtcblxuZXhwb3J0IGRlZmF1bHQgZmluZExhc3Q7XG4iLCJpbXBvcnQgYmFzZUZpbmRLZXkgZnJvbSAnLi9fYmFzZUZpbmRLZXkuanMnO1xuaW1wb3J0IGJhc2VGb3JPd25SaWdodCBmcm9tICcuL19iYXNlRm9yT3duUmlnaHQuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQgZWxlbWVudCxcbiAqICBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiB9O1xuICpcbiAqIF8uZmluZExhc3RLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gcmV0dXJucyAncGViYmxlcycgYXNzdW1pbmcgYF8uZmluZEtleWAgcmV0dXJucyAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmRMYXN0S2V5KHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+ICdmcmVkJ1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gJ3BlYmJsZXMnXG4gKi9cbmZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBiYXNlRmluZEtleShvYmplY3QsIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duUmlnaHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmaW5kTGFzdEtleTtcbiIsIi8qKlxuICogR2V0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyBmaXJzdFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDFcbiAqXG4gKiBfLmhlYWQoW10pO1xuICogLy8gPT4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGhlYWQoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGhlYWQ7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hcGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlTWFwO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTWFwIGZyb20gJy4vX2Jhc2VNYXAuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydVxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogTWFueSBsb2Rhc2ggbWV0aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlXG4gKiBgXy5ldmVyeWAsIGBfLmZpbHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC5cbiAqXG4gKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAqIGBhcnlgLCBgY2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVyeWAsXG4gKiBgZmlsbGAsIGBpbnZlcnRgLCBgcGFyc2VJbnRgLCBgcmFuZG9tYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVwZWF0YCxcbiAqIGBzYW1wbGVTaXplYCwgYHNsaWNlYCwgYHNvbWVgLCBgc29ydEJ5YCwgYHNwbGl0YCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gKiAgIHJldHVybiBuICogbjtcbiAqIH1cbiAqXG4gKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XVxuICpcbiAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTtcbiAqIC8vID0+IFsxNiwgNjRdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJyB9XG4gKiBdO1xuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXAodXNlcnMsICd1c2VyJyk7XG4gKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAqL1xuZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5TWFwIDogYmFzZU1hcDtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hcDtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbWFwLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmxhdHRlbmVkIGFycmF5IG9mIHZhbHVlcyBieSBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmBcbiAqIHRocnUgYGl0ZXJhdGVlYCBhbmQgZmxhdHRlbmluZyB0aGUgbWFwcGVkIHJlc3VsdHMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gZHVwbGljYXRlKG4pIHtcbiAqICAgcmV0dXJuIFtuLCBuXTtcbiAqIH1cbiAqXG4gKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gKi9cbmZ1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIDEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0TWFwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhlXG4gKiBtYXBwZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNy4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICogfVxuICpcbiAqIF8uZmxhdE1hcERlZXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gKi9cbmZ1bmN0aW9uIGZsYXRNYXBEZWVwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBJTkZJTklUWSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXRNYXBEZWVwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAqIG1hcHBlZCByZXN1bHRzIHVwIHRvIGBkZXB0aGAgdGltZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjcuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGR1cGxpY2F0ZShuKSB7XG4gKiAgIHJldHVybiBbW1tuLCBuXV1dO1xuICogfVxuICpcbiAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTtcbiAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAqL1xuZnVuY3Rpb24gZmxhdE1hcERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkge1xuICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSksIGRlcHRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxhdE1hcERlcHRoO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVucyBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbkRlZXAoWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0LCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgSU5GSU5JVFkpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZsYXR0ZW5EZWVwO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYGFycmF5YCB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIFsyLCBbMywgWzRdXSwgNV1dO1xuICpcbiAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAxKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqXG4gKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMik7XG4gKiAvLyA9PiBbMSwgMiwgMywgWzRdLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuRGVwdGgoYXJyYXksIGRlcHRoKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gIHJldHVybiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmbGF0dGVuRGVwdGg7XG4iLCJpbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVudHMgcmV2ZXJzZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbGlwcGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgZmxpcHBlZCA9IF8uZmxpcChmdW5jdGlvbigpIHtcbiAqICAgcmV0dXJuIF8udG9BcnJheShhcmd1bWVudHMpO1xuICogfSk7XG4gKlxuICogZmxpcHBlZCgnYScsICdiJywgJ2MnLCAnZCcpO1xuICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ11cbiAqL1xuZnVuY3Rpb24gZmxpcChmdW5jKSB7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFHKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZmxpcDtcbiIsImltcG9ydCBjcmVhdGVSb3VuZCBmcm9tICcuL19jcmVhdGVSb3VuZC5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRlZCBkb3duIHRvIGBwcmVjaXNpb25gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4xMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIGRvd24uXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIGRvd24gdG8uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIGRvd24gbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsb29yKDQuMDA2KTtcbiAqIC8vID0+IDRcbiAqXG4gKiBfLmZsb29yKDAuMDQ2LCAyKTtcbiAqIC8vID0+IDAuMDRcbiAqXG4gKiBfLmZsb29yKDQwNjAsIC0yKTtcbiAqIC8vID0+IDQwMDBcbiAqL1xudmFyIGZsb29yID0gY3JlYXRlUm91bmQoJ2Zsb29yJyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZsb29yO1xuIiwiaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgZmxhdFJlc3QgZnJvbSAnLi9fZmxhdFJlc3QuanMnO1xuaW1wb3J0IGdldERhdGEgZnJvbSAnLi9fZ2V0RGF0YS5qcyc7XG5pbXBvcnQgZ2V0RnVuY05hbWUgZnJvbSAnLi9fZ2V0RnVuY05hbWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0xhemlhYmxlIGZyb20gJy4vX2lzTGF6aWFibGUuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTY7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBfLmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgdmFyIGxlbmd0aCA9IGZ1bmNzLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBsZW5ndGgsXG4gICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICBpZiAoZnJvbVJpZ2h0KSB7XG4gICAgICBmdW5jcy5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIgZnVuYyA9IGZ1bmNzW2luZGV4XTtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0gbmV3IExvZGFzaFdyYXBwZXIoW10sIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpbmRleCA9IHdyYXBwZXIgPyBpbmRleCA6IGxlbmd0aDtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksXG4gICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgIGRhdGFbMV0gPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykgJiZcbiAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0aCAmJiBkYXRhWzldID09IDFcbiAgICAgICAgICApIHtcbiAgICAgICAgd3JhcHBlciA9IHdyYXBwZXJbZ2V0RnVuY05hbWUoZGF0YVswXSldLmFwcGx5KHdyYXBwZXIsIGRhdGFbM10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgPyB3cmFwcGVyW2Z1bmNOYW1lXSgpXG4gICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgIHZhbHVlID0gYXJnc1swXTtcblxuICAgICAgaWYgKHdyYXBwZXIgJiYgYXJncy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdCA9IGZ1bmNzW2luZGV4XS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVGbG93O1xuIiwiaW1wb3J0IGNyZWF0ZUZsb3cgZnJvbSAnLi9fY3JlYXRlRmxvdy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICogQHNlZSBfLmZsb3dSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIGFkZFNxdWFyZSA9IF8uZmxvdyhbXy5hZGQsIHNxdWFyZV0pO1xuICogYWRkU3F1YXJlKDEsIDIpO1xuICogLy8gPT4gOVxuICovXG52YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTtcblxuZXhwb3J0IGRlZmF1bHQgZmxvdztcbiIsImltcG9ydCBjcmVhdGVGbG93IGZyb20gJy4vX2NyZWF0ZUZsb3cuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxvd2AgZXhjZXB0IHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXRcbiAqIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDMuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICogQHNlZSBfLmZsb3dcbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChbc3F1YXJlLCBfLmFkZF0pO1xuICogYWRkU3F1YXJlKDEsIDIpO1xuICogLy8gPT4gOVxuICovXG52YXIgZmxvd1JpZ2h0ID0gY3JlYXRlRmxvdyh0cnVlKTtcblxuZXhwb3J0IGRlZmF1bHQgZmxvd1JpZ2h0O1xuIiwiaW1wb3J0IGJhc2VGb3IgZnJvbSAnLi9fYmFzZUZvci5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW5cbiAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXRcbiAqIGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5SaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3Iob2JqZWN0LCBjYXN0RnVuY3Rpb24oaXRlcmF0ZWUpLCBrZXlzSW4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JJbjtcbiIsImltcG9ydCBiYXNlRm9yUmlnaHQgZnJvbSAnLi9fYmFzZUZvclJpZ2h0LmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcbmltcG9ydCBrZXlzSW4gZnJvbSAnLi9rZXlzSW4uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9ySW5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5mb3JJblJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYycsICdiJywgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9ySW5gIGxvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnLlxuICovXG5mdW5jdGlvbiBmb3JJblJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgPyBvYmplY3RcbiAgICA6IGJhc2VGb3JSaWdodChvYmplY3QsIGNhc3RGdW5jdGlvbihpdGVyYXRlZSksIGtleXNJbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvckluUmlnaHQ7XG4iLCJpbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBjYXN0RnVuY3Rpb24gZnJvbSAnLi9fY2FzdEZ1bmN0aW9uLmpzJztcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdCBhbmRcbiAqIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvblxuICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQHNlZSBfLmZvck93blJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgY29uc29sZS5sb2coa2V5KTtcbiAqIH0pO1xuICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gKi9cbmZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93bihvYmplY3QsIGNhc3RGdW5jdGlvbihpdGVyYXRlZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JPd247XG4iLCJpbXBvcnQgYmFzZUZvck93blJpZ2h0IGZyb20gJy4vX2Jhc2VGb3JPd25SaWdodC5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JPd25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICogYG9iamVjdGAgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAc2VlIF8uZm9yT3duXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8uZm9yT3duUmlnaHQobmV3IEZvbywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICogICBjb25zb2xlLmxvZyhrZXkpO1xuICogfSk7XG4gKiAvLyA9PiBMb2dzICdiJyB0aGVuICdhJyBhc3N1bWluZyBgXy5mb3JPd25gIGxvZ3MgJ2EnIHRoZW4gJ2InLlxuICovXG5mdW5jdGlvbiBmb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93blJpZ2h0KG9iamVjdCwgY2FzdEZ1bmN0aW9uKGl0ZXJhdGVlKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvck93blJpZ2h0O1xuIiwiLyoqXG4gKiBUaGUgaW52ZXJzZSBvZiBgXy50b1BhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWRcbiAqIGZyb20ga2V5LXZhbHVlIGBwYWlyc2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUga2V5LXZhbHVlIHBhaXJzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gKi9cbmZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICByZXN1bHRbcGFpclswXV0gPSBwYWlyWzFdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZyb21QYWlycztcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICogYG9iamVjdGAgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZmlsdGVyZWQgZnJvbSBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmplY3Rba2V5XSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRnVuY3Rpb25zO1xuIiwiaW1wb3J0IGJhc2VGdW5jdGlvbnMgZnJvbSAnLi9fYmFzZUZ1bmN0aW9ucy5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gKiBAc2VlIF8uZnVuY3Rpb25zSW5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7XG4gKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7XG4gKlxuICogXy5mdW5jdGlvbnMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb25zO1xuIiwiaW1wb3J0IGJhc2VGdW5jdGlvbnMgZnJvbSAnLi9fYmFzZUZ1bmN0aW9ucy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBpbmhlcml0ZWRcbiAqIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZXMuXG4gKiBAc2VlIF8uZnVuY3Rpb25zXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICogICB0aGlzLmIgPSBfLmNvbnN0YW50KCdiJyk7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gXy5jb25zdGFudCgnYycpO1xuICpcbiAqIF8uZnVuY3Rpb25zSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqL1xuZnVuY3Rpb24gZnVuY3Rpb25zSW4ob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1bmN0aW9ucyhvYmplY3QsIGtleXNJbihvYmplY3QpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb25zSW47XG4iLCJpbXBvcnQgYmFzZUFzc2lnblZhbHVlIGZyb20gJy4vX2Jhc2VBc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY3JlYXRlQWdncmVnYXRvciBmcm9tICcuL19jcmVhdGVBZ2dyZWdhdG9yLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgb3JkZXIgb2YgZ3JvdXBlZCB2YWx1ZXNcbiAqIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gYGNvbGxlY3Rpb25gLiBUaGUgY29ycmVzcG9uZGluZ1xuICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gKiBrZXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiB7ICc0JzogWzQuMl0sICc2JzogWzYuMSwgNi4zXSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmdyb3VwQnkoWydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTtcbiAqIC8vID0+IHsgJzMnOiBbJ29uZScsICd0d28nXSwgJzUnOiBbJ3RocmVlJ10gfVxuICovXG52YXIgZ3JvdXBCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgW3ZhbHVlXSk7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBncm91cEJ5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5ndGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUd0KHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPiBvdGhlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUd0O1xuIiwiaW1wb3J0IHRvTnVtYmVyIGZyb20gJy4vdG9OdW1iZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcmVsYXRpb25hbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlbGF0aW9uYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKG9wZXJhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gICAgICBvdGhlciA9IHRvTnVtYmVyKG90aGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdG9yKHZhbHVlLCBvdGhlcik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb247XG4iLCJpbXBvcnQgYmFzZUd0IGZyb20gJy4vX2Jhc2VHdC5qcyc7XG5pbXBvcnQgY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuOS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAc2VlIF8ubHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5ndCgzLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmd0KDMsIDMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmd0KDEsIDMpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO1xuXG5leHBvcnQgZGVmYXVsdCBndDtcbiIsImltcG9ydCBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy45LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0b1xuICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAqIEBzZWUgXy5sdGVcbiAqIEBleGFtcGxlXG4gKlxuICogXy5ndGUoMywgMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5ndGUoMywgMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5ndGUoMSwgMyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgZ3RlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID49IG90aGVyO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGd0ZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUhhcztcbiIsImltcG9ydCBiYXNlSGFzIGZyb20gJy4vX2Jhc2VIYXMuanMnO1xuaW1wb3J0IGhhc1BhdGggZnJvbSAnLi9faGFzUGF0aC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICogdmFyIG90aGVyID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzKG90aGVyLCAnYScpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBoYXM7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXgsXG4gICAgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5SYW5nZWAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gbnVtYmVyID49IG5hdGl2ZU1pbihzdGFydCwgZW5kKSAmJiBudW1iZXIgPCBuYXRpdmVNYXgoc3RhcnQsIGVuZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJblJhbmdlO1xuIiwiaW1wb3J0IGJhc2VJblJhbmdlIGZyb20gJy4vX2Jhc2VJblJhbmdlLmpzJztcbmltcG9ydCB0b0Zpbml0ZSBmcm9tICcuL3RvRmluaXRlLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYG5gIGlzIGJldHdlZW4gYHN0YXJ0YCBhbmQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gSWZcbiAqIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAqIElmIGBzdGFydGAgaXMgZ3JlYXRlciB0aGFuIGBlbmRgIHRoZSBwYXJhbXMgYXJlIHN3YXBwZWQgdG8gc3VwcG9ydFxuICogbmVnYXRpdmUgcmFuZ2VzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4zLjBcbiAqIEBjYXRlZ29yeSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG51bWJlcmAgaXMgaW4gdGhlIHJhbmdlLCBlbHNlIGBmYWxzZWAuXG4gKiBAc2VlIF8ucmFuZ2UsIF8ucmFuZ2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluUmFuZ2UoMywgMiwgNCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pblJhbmdlKDQsIDgpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5SYW5nZSg0LCAyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pblJhbmdlKDIsIDIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmluUmFuZ2UoMS4yLCAyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmluUmFuZ2UoNS4yLCA0KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pblJhbmdlKC0zLCAtMiwgLTYpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gIH1cbiAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgcmV0dXJuIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluUmFuZ2U7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzU3RyaW5nO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VWYWx1ZXM7XG4iLCJpbXBvcnQgYmFzZVZhbHVlcyBmcm9tICcuL19iYXNlVmFsdWVzLmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy52YWx1ZXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLnZhbHVlcygnaGknKTtcbiAqIC8vID0+IFsnaCcsICdpJ11cbiAqL1xuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB2YWx1ZXM7XG4iLCJpbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzU3RyaW5nIGZyb20gJy4vaXNTdHJpbmcuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gKiBjaGVja2VkIGZvciBhIHN1YnN0cmluZyBvZiBgdmFsdWVgLCBvdGhlcndpc2VcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICogdGhlIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxLCAyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pbmNsdWRlcyh7ICdhJzogMSwgJ2InOiAyIH0sIDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaW5jbHVkZXMoJ2FiY2QnLCAnYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCwgZ3VhcmQpIHtcbiAgY29sbGVjdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gY29sbGVjdGlvbiA6IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgZnJvbUluZGV4ID0gKGZyb21JbmRleCAmJiAhZ3VhcmQpID8gdG9JbnRlZ2VyKGZyb21JbmRleCkgOiAwO1xuXG4gIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICBmcm9tSW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbilcbiAgICA/IChmcm9tSW5kZXggPD0gbGVuZ3RoICYmIGNvbGxlY3Rpb24uaW5kZXhPZih2YWx1ZSwgZnJvbUluZGV4KSA+IC0xKVxuICAgIDogKCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmNsdWRlcztcbiIsImltcG9ydCBiYXNlSW5kZXhPZiBmcm9tICcuL19iYXNlSW5kZXhPZi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIEdldHMgYWxsIGJ1dCB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5pdGlhbChbMSwgMiwgM10pO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAwLCAtMSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdGlhbDtcbiIsImltcG9ydCBTZXRDYWNoZSBmcm9tICcuL19TZXRDYWNoZS5qcyc7XG5pbXBvcnQgYXJyYXlJbmNsdWRlcyBmcm9tICcuL19hcnJheUluY2x1ZGVzLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzV2l0aCBmcm9tICcuL19hcnJheUluY2x1ZGVzV2l0aC5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNhY2hlSGFzIGZyb20gJy4vX2NhY2hlSGFzLmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAqIGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBzaGFyZWQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluY2x1ZGVzID0gY29tcGFyYXRvciA/IGFycmF5SW5jbHVkZXNXaXRoIDogYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5c1swXS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsXG4gICAgICBjYWNoZXMgPSBBcnJheShvdGhMZW5ndGgpLFxuICAgICAgbWF4TGVuZ3RoID0gSW5maW5pdHksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAob3RoSW5kZXgtLSkge1xuICAgIHZhciBhcnJheSA9IGFycmF5c1tvdGhJbmRleF07XG4gICAgaWYgKG90aEluZGV4ICYmIGl0ZXJhdGVlKSB7XG4gICAgICBhcnJheSA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICB9XG4gICAgbWF4TGVuZ3RoID0gbmF0aXZlTWluKGFycmF5Lmxlbmd0aCwgbWF4TGVuZ3RoKTtcbiAgICBjYWNoZXNbb3RoSW5kZXhdID0gIWNvbXBhcmF0b3IgJiYgKGl0ZXJhdGVlIHx8IChsZW5ndGggPj0gMTIwICYmIGFycmF5Lmxlbmd0aCA+PSAxMjApKVxuICAgICAgPyBuZXcgU2V0Q2FjaGUob3RoSW5kZXggJiYgYXJyYXkpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuICBhcnJheSA9IGFycmF5c1swXTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHNlZW4gPSBjYWNoZXNbMF07XG5cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoICYmIHJlc3VsdC5sZW5ndGggPCBtYXhMZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09IDApID8gdmFsdWUgOiAwO1xuICAgIGlmICghKHNlZW5cbiAgICAgICAgICA/IGNhY2hlSGFzKHNlZW4sIGNvbXB1dGVkKVxuICAgICAgICAgIDogaW5jbHVkZXMocmVzdWx0LCBjb21wdXRlZCwgY29tcGFyYXRvcilcbiAgICAgICAgKSkge1xuICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGg7XG4gICAgICB3aGlsZSAoLS1vdGhJbmRleCkge1xuICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdO1xuICAgICAgICBpZiAoIShjYWNoZVxuICAgICAgICAgICAgICA/IGNhY2hlSGFzKGNhY2hlLCBjb21wdXRlZClcbiAgICAgICAgICAgICAgOiBpbmNsdWRlcyhhcnJheXNbb3RoSW5kZXhdLCBjb21wdXRlZCwgY29tcGFyYXRvcikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlZW4pIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUludGVyc2VjdGlvbjtcbiIsImltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyB0aGUgY2FzdCBhcnJheS1saWtlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FzdEFycmF5TGlrZU9iamVjdDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUludGVyc2VjdGlvbiBmcm9tICcuL19iYXNlSW50ZXJzZWN0aW9uLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY2FzdEFycmF5TGlrZU9iamVjdCBmcm9tICcuL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsyXVxuICovXG52YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVyc2VjdGlvbjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUludGVyc2VjdGlvbiBmcm9tICcuL19iYXNlSW50ZXJzZWN0aW9uLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgY2FzdEFycmF5TGlrZU9iamVjdCBmcm9tICcuL19jYXN0QXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICogd2hpY2ggaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gKiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pbnRlcnNlY3Rpb25CeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAqIC8vID0+IFsyLjFdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmludGVyc2VjdGlvbkJ5KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpO1xuICogLy8gPT4gW3sgJ3gnOiAxIH1dXG4gKi9cbnZhciBpbnRlcnNlY3Rpb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksXG4gICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gIGlmIChpdGVyYXRlZSA9PT0gbGFzdChtYXBwZWQpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgbWFwcGVkLnBvcCgpO1xuICB9XG4gIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJzZWN0aW9uQnk7XG4iLCJpbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IGJhc2VJbnRlcnNlY3Rpb24gZnJvbSAnLi9fYmFzZUludGVyc2VjdGlvbi5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNhc3RBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9fY2FzdEFycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjb21wYXJhdG9yYFxuICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXNcbiAqIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvciBpc1xuICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICpcbiAqIF8uaW50ZXJzZWN0aW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9XVxuICovXG52YXIgaW50ZXJzZWN0aW9uV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKSxcbiAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICBpZiAoY29tcGFyYXRvcikge1xuICAgIG1hcHBlZC5wb3AoKTtcbiAgfVxuICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgaW50ZXJzZWN0aW9uV2l0aDtcbiIsImltcG9ydCBiYXNlRm9yT3duIGZyb20gJy4vX2Jhc2VGb3JPd24uanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmludmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzXG4gKiBgb2JqZWN0YCB3aXRoIHZhbHVlcyB0cmFuc2Zvcm1lZCBieSBgaXRlcmF0ZWVgIGFuZCBzZXQgYnkgYHNldHRlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGludmVydGVkIG9iamVjdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICovXG5mdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRlZSh2YWx1ZSksIGtleSwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZUludmVydGVyO1xuIiwiaW1wb3J0IGJhc2VJbnZlcnRlciBmcm9tICcuL19iYXNlSW52ZXJ0ZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmludmVydEJ5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgcmV0dXJuIGJhc2VJbnZlcnRlcihvYmplY3QsIHNldHRlciwgdG9JdGVyYXRlZShpdGVyYXRlZSksIHt9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSW52ZXJ0ZXI7XG4iLCJpbXBvcnQgY29uc3RhbnQgZnJvbSAnLi9jb25zdGFudC5qcyc7XG5pbXBvcnQgY3JlYXRlSW52ZXJ0ZXIgZnJvbSAnLi9fY3JlYXRlSW52ZXJ0ZXIuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgaW52ZXJ0ZWQga2V5cyBhbmQgdmFsdWVzIG9mIGBvYmplY3RgLlxuICogSWYgYG9iamVjdGAgY29udGFpbnMgZHVwbGljYXRlIHZhbHVlcywgc3Vic2VxdWVudCB2YWx1ZXMgb3ZlcndyaXRlXG4gKiBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTtcbiAqXG4gKiBfLmludmVydChvYmplY3QpO1xuICogLy8gPT4geyAnMSc6ICdjJywgJzInOiAnYicgfVxuICovXG52YXIgaW52ZXJ0ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICByZXN1bHRbdmFsdWVdID0ga2V5O1xufSwgY29uc3RhbnQoaWRlbnRpdHkpKTtcblxuZXhwb3J0IGRlZmF1bHQgaW52ZXJ0O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGNyZWF0ZUludmVydGVyIGZyb20gJy4vX2NyZWF0ZUludmVydGVyLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnZlcnRgIGV4Y2VwdCB0aGF0IHRoZSBpbnZlcnRlZCBvYmplY3QgaXMgZ2VuZXJhdGVkXG4gKiBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlXG4gKiBjb3JyZXNwb25kaW5nIGludmVydGVkIHZhbHVlIG9mIGVhY2ggaW52ZXJ0ZWQga2V5IGlzIGFuIGFycmF5IG9mIGtleXNcbiAqIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBpbnZlcnRlZCB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZlcnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gKlxuICogXy5pbnZlcnRCeShvYmplY3QpO1xuICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICpcbiAqIF8uaW52ZXJ0Qnkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSkge1xuICogICByZXR1cm4gJ2dyb3VwJyArIHZhbHVlO1xuICogfSk7XG4gKiAvLyA9PiB7ICdncm91cDEnOiBbJ2EnLCAnYyddLCAnZ3JvdXAyJzogWydiJ10gfVxuICovXG52YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdmFsdWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0W3ZhbHVlXSA9IFtrZXldO1xuICB9XG59LCBiYXNlSXRlcmF0ZWUpO1xuXG5leHBvcnQgZGVmYXVsdCBpbnZlcnRCeTtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcmVudDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcbmltcG9ydCBwYXJlbnQgZnJvbSAnLi9fcGFyZW50LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAqIG1ldGhvZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqL1xuZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgcmV0dXJuIGZ1bmMgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFwcGx5KGZ1bmMsIG9iamVjdCwgYXJncyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbnZva2U7XG4iLCJpbXBvcnQgYmFzZUludm9rZSBmcm9tICcuL19iYXNlSW52b2tlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5cbi8qKlxuICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGludm9rZWQgbWV0aG9kLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IFsxLCAyLCAzLCA0XSB9IH1dIH07XG4gKlxuICogXy5pbnZva2Uob2JqZWN0LCAnYVswXS5iLmMuc2xpY2UnLCAxLCAzKTtcbiAqIC8vID0+IFsyLCAzXVxuICovXG52YXIgaW52b2tlID0gYmFzZVJlc3QoYmFzZUludm9rZSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludm9rZTtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuXG4vKipcbiAqIEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nXG4gKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAqIGFyZSBwcm92aWRlZCB0byBlYWNoIGludm9rZWQgbWV0aG9kLiBJZiBgcGF0aGAgaXMgYSBmdW5jdGlvbiwgaXQncyBpbnZva2VkXG4gKiBmb3IsIGFuZCBgdGhpc2AgYm91bmQgdG8sIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gKiAgdGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGVhY2ggbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gKiAvLyA9PiBbWzEsIDUsIDddLCBbMSwgMiwgM11dXG4gKlxuICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICogLy8gPT4gW1snMScsICcyJywgJzMnXSwgWyc0JywgJzUnLCAnNiddXVxuICovXG52YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGlzRnVuYyA9IHR5cGVvZiBwYXRoID09ICdmdW5jdGlvbicsXG4gICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gaXNGdW5jID8gYXBwbHkocGF0aCwgdmFsdWUsIGFyZ3MpIDogYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGludm9rZU1hcDtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFycmF5QnVmZmVyVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNBcnJheUJ1ZmZlcjtcbiIsImltcG9ydCBiYXNlSXNBcnJheUJ1ZmZlciBmcm9tICcuL19iYXNlSXNBcnJheUJ1ZmZlci5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcjtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheUJ1ZmZlcmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5QnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0gbm9kZUlzQXJyYXlCdWZmZXIgPyBiYXNlVW5hcnkobm9kZUlzQXJyYXlCdWZmZXIpIDogYmFzZUlzQXJyYXlCdWZmZXI7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQXJyYXlCdWZmZXI7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYm9vbGVhbiBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGJvb2xUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0Jvb2xlYW47XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0RhdGVgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRGF0ZSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlSXNEYXRlO1xuIiwiaW1wb3J0IGJhc2VJc0RhdGUgZnJvbSAnLi9fYmFzZUlzRGF0ZS5qcyc7XG5pbXBvcnQgYmFzZVVuYXJ5IGZyb20gJy4vX2Jhc2VVbmFyeS5qcyc7XG5pbXBvcnQgbm9kZVV0aWwgZnJvbSAnLi9fbm9kZVV0aWwuanMnO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBEYXRlYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRGF0ZShuZXcgRGF0ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShub2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBET00gZWxlbWVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVtZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbGVtZW50KGRvY3VtZW50LmJvZHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbGVtZW50KCc8Ym9keT4nKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiB2YWx1ZS5ub2RlVHlwZSA9PT0gMSAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRWxlbWVudDtcbiIsImltcG9ydCBiYXNlS2V5cyBmcm9tICcuL19iYXNlS2V5cy5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXlMaWtlIGZyb20gJy4vaXNBcnJheUxpa2UuanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzUHJvdG90eXBlIGZyb20gJy4vX2lzUHJvdG90eXBlLmpzJztcbmltcG9ydCBpc1R5cGVkQXJyYXkgZnJvbSAnLi9pc1R5cGVkQXJyYXkuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0VtcHR5O1xuIiwiaW1wb3J0IGJhc2VJc0VxdWFsIGZyb20gJy4vX2Jhc2VJc0VxdWFsLmpzJztcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRXF1YWw7XG4iLCJpbXBvcnQgYmFzZUlzRXF1YWwgZnJvbSAnLi9fYmFzZUlzRXF1YWwuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29uc1xuICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUpIHtcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHRydWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTtcbiAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xuICpcbiAqIF8uaXNFcXVhbFdpdGgoYXJyYXksIG90aGVyLCBjdXN0b21pemVyKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbFdpdGgodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0VxdWFsV2l0aDtcbiIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNGaW5pdGUgPSByb290LmlzRmluaXRlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc0Zpbml0ZWBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmaW5pdGUgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGaW5pdGUoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0Zpbml0ZSgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmluaXRlO1xuIiwiaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0ludGVnZXIoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNJbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0ludGVnZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09IHRvSW50ZWdlcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzSW50ZWdlcjtcbiIsImltcG9ydCBiYXNlSXNNYXRjaCBmcm9tICcuL19iYXNlSXNNYXRjaC5qcyc7XG5pbXBvcnQgZ2V0TWF0Y2hEYXRhIGZyb20gJy4vX2dldE1hdGNoRGF0YS5qcyc7XG5cbi8qKlxuICogUGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0b1xuICogZGV0ZXJtaW5lIGlmIGBvYmplY3RgIGNvbnRhaW5zIGVxdWl2YWxlbnQgcHJvcGVydHkgdmFsdWVzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICpcbiAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gKiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZSBgXy5pc0VxdWFsYFxuICogZm9yIGEgbGlzdCBvZiBzdXBwb3J0ZWQgdmFsdWUgY29tcGFyaXNvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKlxuICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgc291cmNlKSB7XG4gIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc01hdGNoO1xuIiwiaW1wb3J0IGJhc2VJc01hdGNoIGZyb20gJy4vX2Jhc2VJc01hdGNoLmpzJztcbmltcG9ydCBnZXRNYXRjaERhdGEgZnJvbSAnLi9fZ2V0TWF0Y2hEYXRhLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzTWF0Y2hgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAqIGFyZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkIHdpdGggZml2ZVxuICogYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBpbmRleHxrZXksIG9iamVjdCwgc291cmNlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7XG4gKiB9XG4gKlxuICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcoc3JjVmFsdWUpKSB7XG4gKiAgICAgcmV0dXJuIHRydWU7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnZ3JlZXRpbmcnOiAnaGVsbG8nIH07XG4gKiB2YXIgc291cmNlID0geyAnZ3JlZXRpbmcnOiAnaGknIH07XG4gKlxuICogXy5pc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWF0Y2hXaXRoO1xuIiwiaW1wb3J0IGJhc2VHZXRUYWcgZnJvbSAnLi9fYmFzZUdldFRhZy5qcyc7XG5pbXBvcnQgaXNPYmplY3RMaWtlIGZyb20gJy4vaXNPYmplY3RMaWtlLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqICoqTm90ZToqKiBUbyBleGNsdWRlIGBJbmZpbml0eWAsIGAtSW5maW5pdHlgLCBhbmQgYE5hTmAsIHdoaWNoIGFyZVxuICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBudW1iZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc051bWJlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoSW5maW5pdHkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdW1iZXIoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bWJlcjtcbiIsImltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgTmFOYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgTnVtYmVyLmlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzTmFOKSBhbmQgaXMgbm90IHRoZSBzYW1lIGFzXG4gKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRuLmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3JcbiAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTmFOKE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTihuZXcgTnVtYmVyKE5hTikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGlzTmFOKHVuZGVmaW5lZCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hTih1bmRlZmluZWQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOYU4odmFsdWUpIHtcbiAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi5cbiAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gIC8vIEFjdGl2ZVggb2JqZWN0cyBpbiBJRS5cbiAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmFOO1xuIiwiaW1wb3J0IGNvcmVKc0RhdGEgZnJvbSAnLi9fY29yZUpzRGF0YS5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IHN0dWJGYWxzZSBmcm9tICcuL3N0dWJGYWxzZS5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxlIG9mIGJlaW5nIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2thYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbnZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHViRmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGlzTWFza2FibGU7XG4iLCJpbXBvcnQgYmFzZUlzTmF0aXZlIGZyb20gJy4vX2Jhc2VJc05hdGl2ZS5qcyc7XG5pbXBvcnQgaXNNYXNrYWJsZSBmcm9tICcuL19pc01hc2thYmxlLmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIENPUkVfRVJST1JfVEVYVCA9ICdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJpc3RpbmUgbmF0aXZlIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2VcbiAqIG9mIHRoZSBjb3JlLWpzIHBhY2thZ2UgYmVjYXVzZSBjb3JlLWpzIGNpcmN1bXZlbnRzIHRoaXMga2luZCBvZiBkZXRlY3Rpb24uXG4gKiBEZXNwaXRlIG11bHRpcGxlIHJlcXVlc3RzLCB0aGUgY29yZS1qcyBtYWludGFpbmVyIGhhcyBtYWRlIGl0IGNsZWFyOiBhbnlcbiAqIGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJlc3VsdCwgd2UncmUgbGVmdFxuICogd2l0aCBsaXR0bGUgY2hvaWNlIGJ1dCB0byB0aHJvdyBhbiBlcnJvci4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIGFmZmVjdHNcbiAqIHBhY2thZ2VzLCBsaWtlIFtiYWJlbC1wb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmFiZWwtcG9seWZpbGwpLFxuICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05hdGl2ZShBcnJheS5wcm90b3R5cGUucHVzaCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05hdGl2ZShfKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmIChpc01hc2thYmxlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihDT1JFX0VSUk9SX1RFWFQpO1xuICB9XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc05hdGl2ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05pbChudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmlsKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05pbChOYU4pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmlsO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNOdWxsKG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCJpbXBvcnQgYmFzZUdldFRhZyBmcm9tICcuL19iYXNlR2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNSZWdFeHBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcmVnZXhwLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1JlZ0V4cCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSByZWdleHBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJc1JlZ0V4cDtcbiIsImltcG9ydCBiYXNlSXNSZWdFeHAgZnJvbSAnLi9fYmFzZUlzUmVnRXhwLmpzJztcbmltcG9ydCBiYXNlVW5hcnkgZnJvbSAnLi9fYmFzZVVuYXJ5LmpzJztcbmltcG9ydCBub2RlVXRpbCBmcm9tICcuL19ub2RlVXRpbC5qcyc7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbmV4cG9ydCBkZWZhdWx0IGlzUmVnRXhwO1xuIiwiaW1wb3J0IGlzSW50ZWdlciBmcm9tICcuL2lzSW50ZWdlci5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLiBBbiBpbnRlZ2VyIGlzIHNhZmUgaWYgaXQncyBhbiBJRUVFLTc1NFxuICogZG91YmxlIHByZWNpc2lvbiBudW1iZXIgd2hpY2ggaXNuJ3QgdGhlIHJlc3VsdCBvZiBhIHJvdW5kZWQgdW5zYWZlIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gKiBbYE51bWJlci5pc1NhZmVJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzU2FmZUludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcigzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNTYWZlSW50ZWdlcignMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAtTUFYX1NBRkVfSU5URUdFUiAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1NhZmVJbnRlZ2VyO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1VuZGVmaW5lZChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc1VuZGVmaW5lZDtcbiIsImltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFdlYWtNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHdlYWtNYXBUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV2Vha01hcDtcbiIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciB3ZWFrU2V0VGFnID0gJ1tvYmplY3QgV2Vha1NldF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgd2VhayBzZXQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1dlYWtTZXQobmV3IFdlYWtTZXQpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNXZWFrU2V0KG5ldyBTZXQpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNXZWFrU2V0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHdlYWtTZXRUYWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzV2Vha1NldDtcbiIsImltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICogZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUsIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybnMgdGhlXG4gKiBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBnaXZlbiBlbGVtZW50LiBJZiBgZnVuY2AgaXMgYW4gYXJyYXkgb3Igb2JqZWN0LCB0aGVcbiAqIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudFxuICogc291cmNlIHByb3BlcnRpZXMsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gW2Z1bmM9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2FsbGJhY2suXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9KSk7XG4gKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH1dXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2VyJywgJ2ZyZWQnXSkpO1xuICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXAodXNlcnMsIF8uaXRlcmF0ZWUoJ3VzZXInKSk7XG4gKiAvLyA9PiBbJ2Jhcm5leScsICdmcmVkJ11cbiAqXG4gKiAvLyBDcmVhdGUgY3VzdG9tIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKiBfLml0ZXJhdGVlID0gXy53cmFwKF8uaXRlcmF0ZWUsIGZ1bmN0aW9uKGl0ZXJhdGVlLCBmdW5jKSB7XG4gKiAgIHJldHVybiAhXy5pc1JlZ0V4cChmdW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gKiAgICAgcmV0dXJuIGZ1bmMudGVzdChzdHJpbmcpO1xuICogICB9O1xuICogfSk7XG4gKlxuICogXy5maWx0ZXIoWydhYmMnLCAnZGVmJ10sIC9lZi8pO1xuICogLy8gPT4gWydkZWYnXVxuICovXG5mdW5jdGlvbiBpdGVyYXRlZShmdW5jKSB7XG4gIHJldHVybiBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xvbmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGl0ZXJhdGVlO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVKb2luID0gYXJyYXlQcm90by5qb2luO1xuXG4vKipcbiAqIENvbnZlcnRzIGFsbCBlbGVtZW50cyBpbiBgYXJyYXlgIGludG8gYSBzdHJpbmcgc2VwYXJhdGVkIGJ5IGBzZXBhcmF0b3JgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGpvaW5lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uam9pbihbJ2EnLCAnYicsICdjJ10sICd+Jyk7XG4gKiAvLyA9PiAnYX5ifmMnXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYXJyYXksIHNlcGFyYXRvcikge1xuICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/ICcnIDogbmF0aXZlSm9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBqb2luO1xuIiwiaW1wb3J0IGNyZWF0ZUNvbXBvdW5kZXIgZnJvbSAnLi9fY3JlYXRlQ29tcG91bmRlci5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAqIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUga2ViYWIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmtlYmFiQ2FzZSgnRm9vIEJhcicpO1xuICogLy8gPT4gJ2Zvby1iYXInXG4gKlxuICogXy5rZWJhYkNhc2UoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ2Zvby1iYXInXG4gKlxuICogXy5rZWJhYkNhc2UoJ19fRk9PX0JBUl9fJyk7XG4gKiAvLyA9PiAnZm9vLWJhcidcbiAqL1xudmFyIGtlYmFiQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJy0nIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGtlYmFiQ2FzZTtcbiIsImltcG9ydCBiYXNlQXNzaWduVmFsdWUgZnJvbSAnLi9fYmFzZUFzc2lnblZhbHVlLmpzJztcbmltcG9ydCBjcmVhdGVBZ2dyZWdhdG9yIGZyb20gJy4vX2NyZWF0ZUFnZ3JlZ2F0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZVxuICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFtcbiAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gKiAgIHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH1cbiAqIF07XG4gKlxuICogXy5rZXlCeShhcnJheSwgZnVuY3Rpb24obykge1xuICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvLmNvZGUpO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhJzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdkJzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gKlxuICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICogLy8gPT4geyAnbGVmdCc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAncmlnaHQnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH1cbiAqL1xudmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCB2YWx1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQga2V5Qnk7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5sYXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ICsgMTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmljdExhc3RJbmRleE9mO1xuIiwiaW1wb3J0IGJhc2VGaW5kSW5kZXggZnJvbSAnLi9fYmFzZUZpbmRJbmRleC5qcyc7XG5pbXBvcnQgYmFzZUlzTmFOIGZyb20gJy4vX2Jhc2VJc05hTi5qcyc7XG5pbXBvcnQgc3RyaWN0TGFzdEluZGV4T2YgZnJvbSAnLi9fc3RyaWN0TGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAqIGBhcnJheWAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDNcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmxhc3RJbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwgMik7XG4gKiAvLyA9PiAxXG4gKi9cbmZ1bmN0aW9uIGxhc3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbmRleCA9IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICAgIGluZGV4ID0gaW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKSA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgaW5kZXgsIHRydWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXN0SW5kZXhPZjtcbiIsImltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIGxvd2VyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7XG4gKiAvLyA9PiAnZm9vIGJhcidcbiAqXG4gKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7XG4gKiAvLyA9PiAnZm9vIGJhcidcbiAqXG4gKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18nKTtcbiAqIC8vID0+ICdmb28gYmFyJ1xuICovXG52YXIgbG93ZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbG93ZXJDYXNlO1xuIiwiaW1wb3J0IGNyZWF0ZUNhc2VGaXJzdCBmcm9tICcuL19jcmVhdGVDYXNlRmlyc3QuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gbG93ZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5sb3dlckZpcnN0KCdGcmVkJyk7XG4gKiAvLyA9PiAnZnJlZCdcbiAqXG4gKiBfLmxvd2VyRmlyc3QoJ0ZSRUQnKTtcbiAqIC8vID0+ICdmUkVEJ1xuICovXG52YXIgbG93ZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9Mb3dlckNhc2UnKTtcblxuZXhwb3J0IGRlZmF1bHQgbG93ZXJGaXJzdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubHRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VMdDtcbiIsImltcG9ydCBiYXNlTHQgZnJvbSAnLi9fYmFzZUx0LmpzJztcbmltcG9ydCBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy45LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBzZWUgXy5ndFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmx0KDEsIDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8ubHQoMywgMyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8ubHQoMywgMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7XG5cbmV4cG9ydCBkZWZhdWx0IGx0O1xuIiwiaW1wb3J0IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24gZnJvbSAnLi9fY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjkuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICogQHNlZSBfLmd0ZVxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmx0ZSgxLCAzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmx0ZSgzLCAzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmx0ZSgzLCAxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBsdGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPD0gb3RoZXI7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbHRlO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLm1hcFZhbHVlc2A7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gKiBzYW1lIHZhbHVlcyBhcyBgb2JqZWN0YCBhbmQga2V5cyBnZW5lcmF0ZWQgYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlXG4gKiBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy44LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LlxuICogQHNlZSBfLm1hcFZhbHVlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1hcEtleXMoeyAnYSc6IDEsICdiJzogMiB9LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gKiAgIHJldHVybiBrZXkgKyB2YWx1ZTtcbiAqIH0pO1xuICogLy8gPT4geyAnYTEnOiAxLCAnYjInOiAyIH1cbiAqL1xuZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaXRlcmF0ZWUgPSBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDMpO1xuXG4gIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpLCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBLZXlzO1xuIiwiaW1wb3J0IGJhc2VBc3NpZ25WYWx1ZSBmcm9tICcuL19iYXNlQXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VGb3JPd24gZnJvbSAnLi9fYmFzZUZvck93bi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXG4gKiBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gKiBAc2VlIF8ubWFwS2V5c1xuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSB7XG4gKiAgICdmcmVkJzogICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICogfTtcbiAqXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXBWYWx1ZXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXMgZnJvbSAnLi9fYmFzZU1hdGNoZXMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGEgZ2l2ZW5cbiAqIG9iamVjdCBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudFxuICogcHJvcGVydHkgdmFsdWVzLCBlbHNlIGBmYWxzZWAuXG4gKlxuICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uaXNNYXRjaGAgd2l0aCBgc291cmNlYFxuICogcGFydGlhbGx5IGFwcGxpZWQuXG4gKlxuICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAqIHZhbHVlcyBhZ2FpbnN0IGFueSBhcnJheSBvciBvYmplY3QgdmFsdWUsIHJlc3BlY3RpdmVseS4gU2VlIGBfLmlzRXF1YWxgXG4gKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW1xuICogICB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfSxcbiAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAqIF07XG4gKlxuICogXy5maWx0ZXIob2JqZWN0cywgXy5tYXRjaGVzKHsgJ2EnOiA0LCAnYyc6IDYgfSkpO1xuICogLy8gPT4gW3sgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICovXG5mdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICByZXR1cm4gYmFzZU1hdGNoZXMoYmFzZUNsb25lKHNvdXJjZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1hdGNoZXM7XG4iLCJpbXBvcnQgYmFzZUNsb25lIGZyb20gJy4vX2Jhc2VDbG9uZS5qcyc7XG5pbXBvcnQgYmFzZU1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi9cbnZhciBDTE9ORV9ERUVQX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAqIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdCB0byBgc3JjVmFsdWVgLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZVxuICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqXG4gKiAqKk5vdGU6KiogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3RcbiAqIGBzcmNWYWx1ZWAgdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWVcbiAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4yLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gKiAgIHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gKiBdO1xuICpcbiAqIF8uZmluZChvYmplY3RzLCBfLm1hdGNoZXNQcm9wZXJ0eSgnYScsIDQpKTtcbiAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICByZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05FX0RFRVBfRkxBRykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXRjaGVzUHJvcGVydHk7XG4iLCJpbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLm1heGAgYW5kIGBfLm1pbmAgd2hpY2ggYWNjZXB0cyBhXG4gKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGN1cnJlbnQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICBpZiAoY3VycmVudCAhPSBudWxsICYmIChjb21wdXRlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgOiBjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKVxuICAgICAgICApKSB7XG4gICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlRXh0cmVtdW07XG4iLCJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUd0IGZyb20gJy4vX2Jhc2VHdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1heChbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gOFxuICpcbiAqIF8ubWF4KFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtYXgoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlR3QpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1heDtcbiIsImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlR3QgZnJvbSAnLi9fYmFzZUd0LmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1heGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAqXG4gKiBfLm1heEJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gKiAvLyA9PiB7ICduJzogMiB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1heEJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiB7ICduJzogMiB9XG4gKi9cbmZ1bmN0aW9uIG1heEJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUd0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtYXhCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc3VtYCBhbmQgYF8uc3VtQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICovXG5mdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgcmVzdWx0LFxuICAgICAgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBjdXJyZW50ID0gaXRlcmF0ZWUoYXJyYXlbaW5kZXhdKTtcbiAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3VycmVudCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTdW07XG4iLCJpbXBvcnQgYmFzZVN1bSBmcm9tICcuL19iYXNlU3VtLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVhbmAgYW5kIGBfLm1lYW5CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICovXG5mdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gKGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVlKSAvIGxlbmd0aCkgOiBOQU47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VNZWFuO1xuIiwiaW1wb3J0IGJhc2VNZWFuIGZyb20gJy4vX2Jhc2VNZWFuLmpzJztcbmltcG9ydCBpZGVudGl0eSBmcm9tICcuL2lkZW50aXR5LmpzJztcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbWVhbiBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1lYW4oWzQsIDIsIDgsIDZdKTtcbiAqIC8vID0+IDVcbiAqL1xuZnVuY3Rpb24gbWVhbihhcnJheSkge1xuICByZXR1cm4gYmFzZU1lYW4oYXJyYXksIGlkZW50aXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVhbjtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTWVhbiBmcm9tICcuL19iYXNlTWVhbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZWFuYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBhdmVyYWdlZC5cbiAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC43LjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYgfV07XG4gKlxuICogXy5tZWFuQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IDVcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWVhbkJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiA1XG4gKi9cbmZ1bmN0aW9uIG1lYW5CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVhbkJ5O1xuIiwiaW1wb3J0IGJhc2VNZXJnZSBmcm9tICcuL19iYXNlTWVyZ2UuanMnO1xuaW1wb3J0IGNyZWF0ZUFzc2lnbmVyIGZyb20gJy4vX2NyZWF0ZUFzc2lnbmVyLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1lcmdlO1xuIiwiaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDEpIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLm1ldGhvZCgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoWydhJywgJ2InXSkpO1xuICogLy8gPT4gWzIsIDFdXG4gKi9cbnZhciBtZXRob2QgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICB9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGhvZDtcbiIsImltcG9ydCBiYXNlSW52b2tlIGZyb20gJy4vX2Jhc2VJbnZva2UuanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWV0aG9kYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAqIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAqXG4gKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICogLy8gPT4gWzIsIDBdXG4gKlxuICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICogLy8gPT4gWzIsIDBdXG4gKi9cbnZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBiYXNlSW52b2tlKG9iamVjdCwgcGF0aCwgYXJncyk7XG4gIH07XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWV0aG9kT2Y7XG4iLCJpbXBvcnQgYmFzZUV4dHJlbXVtIGZyb20gJy4vX2Jhc2VFeHRyZW11bS5qcyc7XG5pbXBvcnQgYmFzZUx0IGZyb20gJy4vX2Jhc2VMdC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gKiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLm1pbihbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMlxuICpcbiAqIF8ubWluKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBtaW4oYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNlTHQpXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1pbjtcbiIsImltcG9ydCBiYXNlRXh0cmVtdW0gZnJvbSAnLi9fYmFzZUV4dHJlbXVtLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlTHQgZnJvbSAnLi9fYmFzZUx0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB0aGUgdmFsdWUgaXMgcmFua2VkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogMSB9LCB7ICduJzogMiB9XTtcbiAqXG4gKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1pbkJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiB7ICduJzogMSB9XG4gKi9cbmZ1bmN0aW9uIG1pbkJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgYmFzZUx0KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtaW5CeTtcbiIsImltcG9ydCBhcnJheUVhY2ggZnJvbSAnLi9fYXJyYXlFYWNoLmpzJztcbmltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBiYXNlRnVuY3Rpb25zIGZyb20gJy4vX2Jhc2VGdW5jdGlvbnMuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5cbi8qKlxuICogQWRkcyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2YgYSBzb3VyY2VcbiAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAqIGFyZSBhZGRlZCB0byBpdHMgcHJvdG90eXBlIGFzIHdlbGwuXG4gKlxuICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gKiBhdm9pZCBjb25mbGljdHMgY2F1c2VkIGJ5IG1vZGlmeWluZyB0aGUgb3JpZ2luYWwuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBbb2JqZWN0PWxvZGFzaF0gVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNoYWluPXRydWVdIFNwZWNpZnkgd2hldGhlciBtaXhpbnMgYXJlIGNoYWluYWJsZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIHZvd2VscyhzdHJpbmcpIHtcbiAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICogICAgIHJldHVybiAvW2FlaW91XS9pLnRlc3Qodik7XG4gKiAgIH0pO1xuICogfVxuICpcbiAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0pO1xuICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAqIC8vID0+IFsnZSddXG4gKlxuICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gKiAvLyA9PiBbJ2UnXVxuICpcbiAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gKiBfKCdmcmVkJykudm93ZWxzKCk7XG4gKiAvLyA9PiBbJ2UnXVxuICovXG5mdW5jdGlvbiBtaXhpbihvYmplY3QsIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksXG4gICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgIGlzRnVuYyA9IGlzRnVuY3Rpb24ob2JqZWN0KTtcblxuICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICBvYmplY3RbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgIGlmIChpc0Z1bmMpIHtcbiAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX187XG4gICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgIGFjdGlvbnMgPSByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7XG5cbiAgICAgICAgICBhY3Rpb25zLnB1c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9KTtcbiAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWl4aW47XG4iLCJpbXBvcnQgY3JlYXRlTWF0aE9wZXJhdGlvbiBmcm9tICcuL19jcmVhdGVNYXRoT3BlcmF0aW9uLmpzJztcblxuLyoqXG4gKiBNdWx0aXBseSB0d28gbnVtYmVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNy4wXG4gKiBAY2F0ZWdvcnkgTWF0aFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpZXIgVGhlIGZpcnN0IG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpY2FuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcHJvZHVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tdWx0aXBseSg2LCA0KTtcbiAqIC8vID0+IDI0XG4gKi9cbnZhciBtdWx0aXBseSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGllciwgbXVsdGlwbGljYW5kKSB7XG4gIHJldHVybiBtdWx0aXBsaWVyICogbXVsdGlwbGljYW5kO1xufSwgMSk7XG5cbmV4cG9ydCBkZWZhdWx0IG11bHRpcGx5O1xuIiwiLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBgZnVuY2AuIFRoZVxuICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gKiBjcmVhdGVkIGZ1bmN0aW9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBwcmVkaWNhdGUgdG8gbmVnYXRlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbmVnYXRlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gaXNFdmVuKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9XG4gKlxuICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAqIC8vID0+IFsxLCAzLCA1XVxuICovXG5mdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gIGlmICh0eXBlb2YgcHJlZGljYXRlICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5lZ2F0ZTtcbiIsIi8qKlxuICogQ29udmVydHMgYGl0ZXJhdG9yYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yVG9BcnJheShpdGVyYXRvcikge1xuICB2YXIgZGF0YSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICByZXN1bHQucHVzaChkYXRhLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpdGVyYXRvclRvQXJyYXk7XG4iLCJpbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgZ2V0VGFnIGZyb20gJy4vX2dldFRhZy5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2UgZnJvbSAnLi9pc0FycmF5TGlrZS5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXRlcmF0b3JUb0FycmF5IGZyb20gJy4vX2l0ZXJhdG9yVG9BcnJheS5qcyc7XG5pbXBvcnQgbWFwVG9BcnJheSBmcm9tICcuL19tYXBUb0FycmF5LmpzJztcbmltcG9ydCBzZXRUb0FycmF5IGZyb20gJy4vX3NldFRvQXJyYXkuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy50b0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICpcbiAqIF8udG9BcnJheSgxKTtcbiAqIC8vID0+IFtdXG4gKlxuICogXy50b0FycmF5KG51bGwpO1xuICogLy8gPT4gW11cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICB9XG4gIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgcmV0dXJuIGZ1bmModmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0FycmF5O1xuIiwiaW1wb3J0IHRvQXJyYXkgZnJvbSAnLi90b0FycmF5LmpzJztcblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAqXG4gKiBAbmFtZSBuZXh0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAqXG4gKiB3cmFwcGVkLm5leHQoKTtcbiAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gKlxuICogd3JhcHBlZC5uZXh0KCk7XG4gKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICpcbiAqIHdyYXBwZWQubmV4dCgpO1xuICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9fdmFsdWVzX18gPSB0b0FycmF5KHRoaXMudmFsdWUoKSk7XG4gIH1cbiAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgdmFsdWUgPSBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO1xuXG4gIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlck5leHQ7XG4iLCJpbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBudGggZWxlbWVudCBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlTnRoKGFycmF5LCBuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG4gKz0gbiA8IDAgPyBsZW5ndGggOiAwO1xuICByZXR1cm4gaXNJbmRleChuLCBsZW5ndGgpID8gYXJyYXlbbl0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VOdGg7XG4iLCJpbXBvcnQgYmFzZU50aCBmcm9tICcuL19iYXNlTnRoLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIGVsZW1lbnQgYXQgaW5kZXggYG5gIG9mIGBhcnJheWAuIElmIGBuYCBpcyBuZWdhdGl2ZSwgdGhlIG50aFxuICogZWxlbWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjExLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107XG4gKlxuICogXy5udGgoYXJyYXksIDEpO1xuICogLy8gPT4gJ2InXG4gKlxuICogXy5udGgoYXJyYXksIC0yKTtcbiAqIC8vID0+ICdjJztcbiAqL1xuZnVuY3Rpb24gbnRoKGFycmF5LCBuKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VOdGgoYXJyYXksIHRvSW50ZWdlcihuKSkgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG50aDtcbiIsImltcG9ydCBiYXNlTnRoIGZyb20gJy4vX2Jhc2VOdGguanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIGFyZ3VtZW50IGF0IGluZGV4IGBuYC4gSWYgYG5gIGlzIG5lZ2F0aXZlLFxuICogdGhlIG50aCBhcmd1bWVudCBmcm9tIHRoZSBlbmQgaXMgcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0wXSBUaGUgaW5kZXggb2YgdGhlIGFyZ3VtZW50IHRvIHJldHVybi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAqIGZ1bmMoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAqIC8vID0+ICdiJ1xuICpcbiAqIHZhciBmdW5jID0gXy5udGhBcmcoLTIpO1xuICogZnVuYygnYScsICdiJywgJ2MnLCAnZCcpO1xuICogLy8gPT4gJ2MnXG4gKi9cbmZ1bmN0aW9uIG50aEFyZyhuKSB7XG4gIG4gPSB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgcmV0dXJuIGJhc2VOdGgoYXJncywgbik7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBudGhBcmc7XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGxhc3QgZnJvbSAnLi9sYXN0LmpzJztcbmltcG9ydCBwYXJlbnQgZnJvbSAnLi9fcGFyZW50LmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHByb3BlcnR5IHBhdGggdG8gdW5zZXQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuc2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCB8fCBkZWxldGUgb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuc2V0O1xuIiwiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVwYCB1c2UgdG8gb25seSBjbG9uZSBwbGFpblxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBvciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuXG4gKi9cbmZ1bmN0aW9uIGN1c3RvbU9taXRDbG9uZSh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3VzdG9tT21pdENsb25lO1xuIiwiaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlQ2xvbmUgZnJvbSAnLi9fYmFzZUNsb25lLmpzJztcbmltcG9ydCBiYXNlVW5zZXQgZnJvbSAnLi9fYmFzZVVuc2V0LmpzJztcbmltcG9ydCBjYXN0UGF0aCBmcm9tICcuL19jYXN0UGF0aC5qcyc7XG5pbXBvcnQgY29weU9iamVjdCBmcm9tICcuL19jb3B5T2JqZWN0LmpzJztcbmltcG9ydCBjdXN0b21PbWl0Q2xvbmUgZnJvbSAnLi9fY3VzdG9tT21pdENsb25lLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5pbXBvcnQgZ2V0QWxsS2V5c0luIGZyb20gJy4vX2dldEFsbEtleXNJbi5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgb21pdDtcbiIsImltcG9ydCBhc3NpZ25WYWx1ZSBmcm9tICcuL19hc3NpZ25WYWx1ZS5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzSW5kZXggZnJvbSAnLi9faXNJbmRleC5qcyc7XG5pbXBvcnQgaXNPYmplY3QgZnJvbSAnLi9pc09iamVjdC5qcyc7XG5pbXBvcnQgdG9LZXkgZnJvbSAnLi9fdG9LZXkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNldGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSwgY3VzdG9taXplcikge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxLFxuICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKSxcbiAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChpbmRleCAhPSBsYXN0SW5kZXgpIHtcbiAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldO1xuICAgICAgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwga2V5LCBuZXN0ZWQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSlcbiAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgOiAoaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fSk7XG4gICAgICB9XG4gICAgfVxuICAgIGFzc2lnblZhbHVlKG5lc3RlZCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgbmVzdGVkID0gbmVzdGVkW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNldDtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5pbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mICBgXy5waWNrQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQaWNrQnkob2JqZWN0LCBwYXRocywgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0ge307XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG5cbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBwYXRoKSkge1xuICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2tCeTtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVBpY2tCeSBmcm9tICcuL19iYXNlUGlja0J5LmpzJztcbmltcG9ydCBnZXRBbGxLZXlzSW4gZnJvbSAnLi9fZ2V0QWxsS2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBgcHJlZGljYXRlYCByZXR1cm5zXG4gKiB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5waWNrQnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG5mdW5jdGlvbiBwaWNrQnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHZhciBwcm9wcyA9IGFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3QpLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgcmV0dXJuIFtwcm9wXTtcbiAgfSk7XG4gIHByZWRpY2F0ZSA9IGJhc2VJdGVyYXRlZShwcmVkaWNhdGUpO1xuICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHByb3BzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgIHJldHVybiBwcmVkaWNhdGUodmFsdWUsIHBhdGhbMF0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcGlja0J5O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgcGlja0J5IGZyb20gJy4vcGlja0J5LmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja0J5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2ZcbiAqIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGBvYmplY3RgIHRoYXRcbiAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3b1xuICogYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07XG4gKlxuICogXy5vbWl0Qnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAqIC8vID0+IHsgJ2InOiAnMicgfVxuICovXG5mdW5jdGlvbiBvbWl0Qnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHBpY2tCeShvYmplY3QsIG5lZ2F0ZShiYXNlSXRlcmF0ZWUocHJlZGljYXRlKSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvbWl0Qnk7XG4iLCJpbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpcyByZXN0cmljdGVkIHRvIGludm9raW5nIGBmdW5jYCBvbmNlLiBSZXBlYXQgY2FsbHNcbiAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gKiBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBpbml0aWFsaXplID0gXy5vbmNlKGNyZWF0ZUFwcGxpY2F0aW9uKTtcbiAqIGluaXRpYWxpemUoKTtcbiAqIGluaXRpYWxpemUoKTtcbiAqIC8vID0+IGBjcmVhdGVBcHBsaWNhdGlvbmAgaXMgaW52b2tlZCBvbmNlXG4gKi9cbmZ1bmN0aW9uIG9uY2UoZnVuYykge1xuICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvbmNlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNyaXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nXG4gKiB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgYXJyYXkuc29ydChjb21wYXJlcik7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGFycmF5W2xlbmd0aF0gPSBhcnJheVtsZW5ndGhdLnZhbHVlO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvcnRCeTtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqXG4gKiBDb21wYXJlcyB2YWx1ZXMgdG8gc29ydCB0aGVtIGluIGFzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYHZhbHVlYC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgaWYgKHZhbHVlICE9PSBvdGhlcikge1xuICAgIHZhciB2YWxJc0RlZmluZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgdmFsSXNSZWZsZXhpdmUgPSB2YWx1ZSA9PT0gdmFsdWUsXG4gICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpO1xuXG4gICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgIG90aElzTnVsbCA9IG90aGVyID09PSBudWxsLFxuICAgICAgICBvdGhJc1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlcixcbiAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICBpZiAoKCFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sICYmICF2YWxJc1N5bWJvbCAmJiB2YWx1ZSA+IG90aGVyKSB8fFxuICAgICAgICAodmFsSXNTeW1ib2wgJiYgb3RoSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlICYmICFvdGhJc051bGwgJiYgIW90aElzU3ltYm9sKSB8fFxuICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgKCF2YWxJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUpIHx8XG4gICAgICAgICF2YWxJc1JlZmxleGl2ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmICgoIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wgJiYgIW90aElzU3ltYm9sICYmIHZhbHVlIDwgb3RoZXIpIHx8XG4gICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgIChvdGhJc051bGwgJiYgdmFsSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAoIW90aElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wYXJlQXNjZW5kaW5nO1xuIiwiaW1wb3J0IGNvbXBhcmVBc2NlbmRpbmcgZnJvbSAnLi9fY29tcGFyZUFzY2VuZGluZy5qcyc7XG5cbi8qKlxuICogVXNlZCBieSBgXy5vcmRlckJ5YCB0byBjb21wYXJlIG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYSB2YWx1ZSB0byBhbm90aGVyXG4gKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAqXG4gKiBJZiBgb3JkZXJzYCBpcyB1bnNwZWNpZmllZCwgYWxsIHZhbHVlcyBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLFxuICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICogb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVyIGluZGljYXRvciBmb3IgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBvYmpDcml0ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSxcbiAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICBsZW5ndGggPSBvYmpDcml0ZXJpYS5sZW5ndGgsXG4gICAgICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICByZXR1cm4gcmVzdWx0ICogKG9yZGVyID09ICdkZXNjJyA/IC0xIDogMSk7XG4gICAgfVxuICB9XG4gIC8vIEZpeGVzIGFuIGBBcnJheSNzb3J0YCBidWcgaW4gdGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBhcHBsaWNhdGlvbnNcbiAgLy8gdGhhdCBjYXVzZXMgaXQsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdG8gcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZSBmb3JcbiAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gIC8vXG4gIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gIC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05MCBmb3IgbW9yZSBkZXRhaWxzLlxuICByZXR1cm4gb2JqZWN0LmluZGV4IC0gb3RoZXIuaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBhcmVNdWx0aXBsZTtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZU1hcCBmcm9tICcuL19iYXNlTWFwLmpzJztcbmltcG9ydCBiYXNlU29ydEJ5IGZyb20gJy4vX2Jhc2VTb3J0QnkuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvbXBhcmVNdWx0aXBsZSBmcm9tICcuL19jb21wYXJlTXVsdGlwbGUuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm9yZGVyQnlgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcmRlcnMgVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycykge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLmxlbmd0aCA/IGl0ZXJhdGVlcyA6IFtpZGVudGl0eV0sIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgcmVzdWx0ID0gYmFzZU1hcChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5jdGlvbihvYmplY3QsIG90aGVyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZU9yZGVyQnk7XG4iLCJpbXBvcnQgYmFzZU9yZGVyQnkgZnJvbSAnLi9fYmFzZU9yZGVyQnkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRCeWAgZXhjZXB0IHRoYXQgaXQgYWxsb3dzIHNwZWNpZnlpbmcgdGhlIHNvcnRcbiAqIG9yZGVycyBvZiB0aGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzXG4gKiBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBzcGVjaWZ5IGFuIG9yZGVyIG9mIFwiZGVzY1wiIGZvclxuICogZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtBcnJheVtdfEZ1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSxcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfSxcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICogXTtcbiAqXG4gKiAvLyBTb3J0IGJ5IGB1c2VyYCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKiBfLm9yZGVyQnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSwgWydhc2MnLCAnZGVzYyddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM2XSwgWydiYXJuZXknLCAzNF0sIFsnZnJlZCcsIDQ4XSwgWydmcmVkJywgNDBdXVxuICovXG5mdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICghaXNBcnJheShpdGVyYXRlZXMpKSB7XG4gICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdO1xuICB9XG4gIG9yZGVycyA9IGd1YXJkID8gdW5kZWZpbmVkIDogb3JkZXJzO1xuICBpZiAoIWlzQXJyYXkob3JkZXJzKSkge1xuICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBvcmRlckJ5O1xuIiwiaW1wb3J0IGFwcGx5IGZyb20gJy4vX2FwcGx5LmpzJztcbmltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgb3ZlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGl0ZXJhdGVlcykge1xuICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGJhc2VJdGVyYXRlZSkpO1xuICAgIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7XG4gICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlT3ZlcjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgY3JlYXRlT3ZlciBmcm9tICcuL19jcmVhdGVPdmVyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBpdGVyYXRlZXNgIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlc1xuICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gaW52b2tlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5vdmVyKFtNYXRoLm1heCwgTWF0aC5taW5dKTtcbiAqXG4gKiBmdW5jKDEsIDIsIDMsIDQpO1xuICogLy8gPT4gWzQsIDFdXG4gKi9cbnZhciBvdmVyID0gY3JlYXRlT3ZlcihhcnJheU1hcCk7XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXI7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuXG4vKipcbiAqIEEgYGJhc2VSZXN0YCBhbGlhcyB3aGljaCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBgaWRlbnRpdHlgIGJ5IG1vZHVsZVxuICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0Z1bmN0aW9ufVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG52YXIgY2FzdFJlc3QgPSBiYXNlUmVzdDtcblxuZXhwb3J0IGRlZmF1bHQgY2FzdFJlc3Q7XG4iLCJpbXBvcnQgYXBwbHkgZnJvbSAnLi9fYXBwbHkuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNhc3RSZXN0IGZyb20gJy4vX2Nhc3RSZXN0LmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudHMgdHJhbnNmb3JtZWQuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDQuMC4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1zPVtfLmlkZW50aXR5XV1cbiAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBkb3VibGVkKG4pIHtcbiAqICAgcmV0dXJuIG4gKiAyO1xuICogfVxuICpcbiAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gKiAgIHJldHVybiBuICogbjtcbiAqIH1cbiAqXG4gKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICogICByZXR1cm4gW3gsIHldO1xuICogfSwgW3NxdWFyZSwgZG91YmxlZF0pO1xuICpcbiAqIGZ1bmMoOSwgMyk7XG4gKiAvLyA9PiBbODEsIDZdXG4gKlxuICogZnVuYygxMCwgNSk7XG4gKiAvLyA9PiBbMTAwLCAxMF1cbiAqL1xudmFyIG92ZXJBcmdzID0gY2FzdFJlc3QoZnVuY3Rpb24oZnVuYywgdHJhbnNmb3Jtcykge1xuICB0cmFuc2Zvcm1zID0gKHRyYW5zZm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSlcbiAgICA/IGFycmF5TWFwKHRyYW5zZm9ybXNbMF0sIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKVxuICAgIDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShiYXNlSXRlcmF0ZWUpKTtcblxuICB2YXIgZnVuY3NMZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcbiAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGFyZ3MubGVuZ3RoLCBmdW5jc0xlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJnc1tpbmRleF0gPSB0cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsIGFyZ3NbaW5kZXhdKTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIGFyZ3MpO1xuICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBvdmVyQXJncztcbiIsImltcG9ydCBhcnJheUV2ZXJ5IGZyb20gJy4vX2FycmF5RXZlcnkuanMnO1xuaW1wb3J0IGNyZWF0ZU92ZXIgZnJvbSAnLi9fY3JlYXRlT3Zlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBmdW5jID0gXy5vdmVyRXZlcnkoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gKlxuICogZnVuYygnMScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGZ1bmMobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIGZ1bmMoTmFOKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBvdmVyRXZlcnkgPSBjcmVhdGVPdmVyKGFycmF5RXZlcnkpO1xuXG5leHBvcnQgZGVmYXVsdCBvdmVyRXZlcnk7XG4iLCJpbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgY3JlYXRlT3ZlciBmcm9tICcuL19jcmVhdGVPdmVyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVyblxuICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gKiAgVGhlIHByZWRpY2F0ZXMgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGZ1bmMgPSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICpcbiAqIGZ1bmMoJzEnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBmdW5jKG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIGZ1bmMoTmFOKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBvdmVyU29tZSA9IGNyZWF0ZU92ZXIoYXJyYXlTb21lKTtcblxuZXhwb3J0IGRlZmF1bHQgb3ZlclNvbWU7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXBlYXRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHJlcGVhdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLCBuKSB7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKCFzdHJpbmcgfHwgbiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIExldmVyYWdlIHRoZSBleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZyBhbGdvcml0aG0gZm9yIGEgZmFzdGVyIHJlcGVhdC5cbiAgLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nIGZvciBtb3JlIGRldGFpbHMuXG4gIGRvIHtcbiAgICBpZiAobiAlIDIpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gICAgfVxuICAgIG4gPSBuYXRpdmVGbG9vcihuIC8gMik7XG4gICAgaWYgKG4pIHtcbiAgICAgIHN0cmluZyArPSBzdHJpbmc7XG4gICAgfVxuICB9IHdoaWxlIChuKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVwZWF0O1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eSBmcm9tICcuL19iYXNlUHJvcGVydHkuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYW4gQVNDSUkgYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gKi9cbnZhciBhc2NpaVNpemUgPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpO1xuXG5leHBvcnQgZGVmYXVsdCBhc2NpaVNpemU7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICsrcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaWNvZGVTaXplO1xuIiwiaW1wb3J0IGFzY2lpU2l6ZSBmcm9tICcuL19hc2NpaVNpemUuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgdW5pY29kZVNpemUgZnJvbSAnLi9fdW5pY29kZVNpemUuanMnO1xuXG4vKipcbiAqIEdldHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlU2l6ZShzdHJpbmcpXG4gICAgOiBhc2NpaVNpemUoc3RyaW5nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5nU2l6ZTtcbiIsImltcG9ydCBiYXNlUmVwZWF0IGZyb20gJy4vX2Jhc2VSZXBlYXQuanMnO1xuaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgc3RyaW5nU2l6ZSBmcm9tICcuL19zdHJpbmdTaXplLmpzJztcbmltcG9ydCBzdHJpbmdUb0FycmF5IGZyb20gJy4vX3N0cmluZ1RvQXJyYXkuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbDtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwYWRkaW5nIGZvciBgc3RyaW5nYCBiYXNlZCBvbiBgbGVuZ3RoYC4gVGhlIGBjaGFyc2Agc3RyaW5nXG4gKiBpcyB0cnVuY2F0ZWQgaWYgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4Y2VlZHMgYGxlbmd0aGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICBjaGFycyA9IGNoYXJzID09PSB1bmRlZmluZWQgPyAnICcgOiBiYXNlVG9TdHJpbmcoY2hhcnMpO1xuXG4gIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBjaGFyc0xlbmd0aCA/IGJhc2VSZXBlYXQoY2hhcnMsIGxlbmd0aCkgOiBjaGFycztcbiAgfVxuICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICByZXR1cm4gaGFzVW5pY29kZShjaGFycylcbiAgICA/IGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHJlc3VsdCksIDAsIGxlbmd0aCkuam9pbignJylcbiAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVQYWRkaW5nO1xuIiwiaW1wb3J0IGNyZWF0ZVBhZGRpbmcgZnJvbSAnLi9fY3JlYXRlUGFkZGluZy5qcyc7XG5pbXBvcnQgc3RyaW5nU2l6ZSBmcm9tICcuL19zdHJpbmdTaXplLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3I7XG5cbi8qKlxuICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gKiBQYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGNhbid0IGJlIGV2ZW5seSBkaXZpZGVkIGJ5IGBsZW5ndGhgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHBhZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucGFkKCdhYmMnLCA4KTtcbiAqIC8vID0+ICcgIGFiYyAgICdcbiAqXG4gKiBfLnBhZCgnYWJjJywgOCwgJ18tJyk7XG4gKiAvLyA9PiAnXy1hYmNfLV8nXG4gKlxuICogXy5wYWQoJ2FiYycsIDMpO1xuICogLy8gPT4gJ2FiYydcbiAqL1xuZnVuY3Rpb24gcGFkKHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgaWYgKCFsZW5ndGggfHwgc3RyTGVuZ3RoID49IGxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjtcbiAgcmV0dXJuIChcbiAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUZsb29yKG1pZCksIGNoYXJzKSArXG4gICAgc3RyaW5nICtcbiAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUNlaWwobWlkKSwgY2hhcnMpXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZDtcbiIsImltcG9ydCBjcmVhdGVQYWRkaW5nIGZyb20gJy4vX2NyZWF0ZVBhZGRpbmcuanMnO1xuaW1wb3J0IHN0cmluZ1NpemUgZnJvbSAnLi9fc3RyaW5nU2l6ZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBQYWRzIGBzdHJpbmdgIG9uIHRoZSByaWdodCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5wYWRFbmQoJ2FiYycsIDYpO1xuICogLy8gPT4gJ2FiYyAgICdcbiAqXG4gKiBfLnBhZEVuZCgnYWJjJywgNiwgJ18tJyk7XG4gKiAvLyA9PiAnYWJjXy1fJ1xuICpcbiAqIF8ucGFkRW5kKCdhYmMnLCAzKTtcbiAqIC8vID0+ICdhYmMnXG4gKi9cbmZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aClcbiAgICA/IChzdHJpbmcgKyBjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBwYWRFbmQ7XG4iLCJpbXBvcnQgY3JlYXRlUGFkZGluZyBmcm9tICcuL19jcmVhdGVQYWRkaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBzaWRlIGlmIGl0J3Mgc2hvcnRlciB0aGFuIGBsZW5ndGhgLiBQYWRkaW5nXG4gKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5wYWRTdGFydCgnYWJjJywgNik7XG4gKiAvLyA9PiAnICAgYWJjJ1xuICpcbiAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpO1xuICogLy8gPT4gJ18tX2FiYydcbiAqXG4gKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTtcbiAqIC8vID0+ICdhYmMnXG4gKi9cbmZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3RoLCBjaGFycykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJpbmcpIDogMDtcbiAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgID8gKGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykgKyBzdHJpbmcpXG4gICAgOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhZFN0YXJ0O1xuIiwiaW1wb3J0IHJvb3QgZnJvbSAnLi9fcm9vdC5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlUGFyc2VJbnQgPSByb290LnBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRpeC4gSWYgYHJhZGl4YCBpc1xuICogYHVuZGVmaW5lZGAgb3IgYDBgLCBhIGByYWRpeGAgb2YgYDEwYCBpcyB1c2VkIHVubGVzcyBgdmFsdWVgIGlzIGFcbiAqIGhleGFkZWNpbWFsLCBpbiB3aGljaCBjYXNlIGEgYHJhZGl4YCBvZiBgMTZgIGlzIHVzZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGFsaWducyB3aXRoIHRoZVxuICogW0VTNSBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMS4yLjIpIG9mIGBwYXJzZUludGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjEuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gKiAvLyA9PiA4XG4gKlxuICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICogLy8gPT4gWzYsIDgsIDEwXVxuICovXG5mdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICBpZiAoZ3VhcmQgfHwgcmFkaXggPT0gbnVsbCkge1xuICAgIHJhZGl4ID0gMDtcbiAgfSBlbHNlIGlmIChyYWRpeCkge1xuICAgIHJhZGl4ID0gK3JhZGl4O1xuICB9XG4gIHJldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKSwgcmFkaXggfHwgMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlSW50O1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBjcmVhdGVXcmFwIGZyb20gJy4vX2NyZWF0ZVdyYXAuanMnO1xuaW1wb3J0IGdldEhvbGRlciBmcm9tICcuL19nZXRIb2xkZXIuanMnO1xuaW1wb3J0IHJlcGxhY2VIb2xkZXJzIGZyb20gJy4vX3JlcGxhY2VIb2xkZXJzLmpzJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNyZWF0ZVdyYXAgZnJvbSAnLi9fY3JlYXRlV3JhcC5qcyc7XG5pbXBvcnQgZ2V0SG9sZGVyIGZyb20gJy4vX2dldEhvbGRlci5qcyc7XG5pbXBvcnQgcmVwbGFjZUhvbGRlcnMgZnJvbSAnLi9fcmVwbGFjZUhvbGRlcnMuanMnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucGFydGlhbGAgZXhjZXB0IHRoYXQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gKiBhcmUgYXBwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnaGVsbG8nLCBfKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICovXG52YXIgcGFydGlhbFJpZ2h0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWxSaWdodCkpO1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG59KTtcblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyID0ge307XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnRpYWxSaWdodDtcbiIsImltcG9ydCBjcmVhdGVBZ2dyZWdhdG9yIGZyb20gJy4vX2NyZWF0ZUFnZ3JlZ2F0b3IuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgc3BsaXQgaW50byB0d28gZ3JvdXBzLCB0aGUgZmlyc3Qgb2Ygd2hpY2hcbiAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGljaFxuICogY29udGFpbnMgZWxlbWVudHMgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkgZm9yLiBUaGUgcHJlZGljYXRlIGlzXG4gKiBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSwgICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8ucGFydGl0aW9uKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFjdGl2ZTsgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5wYXJ0aXRpb24odXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAncGViYmxlcyddLCBbJ2ZyZWQnXV1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucGFydGl0aW9uKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydmcmVkJ10sIFsnYmFybmV5JywgJ3BlYmJsZXMnXV1cbiAqL1xudmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG59LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTtcblxuZXhwb3J0IGRlZmF1bHQgcGFydGl0aW9uO1xuIiwiaW1wb3J0IGJhc2VQaWNrQnkgZnJvbSAnLi9fYmFzZVBpY2tCeS5qcyc7XG5pbXBvcnQgaGFzSW4gZnJvbSAnLi9oYXNJbi5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgIHJldHVybiBoYXNJbihvYmplY3QsIHBhdGgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVBpY2s7XG4iLCJpbXBvcnQgYmFzZVBpY2sgZnJvbSAnLi9fYmFzZVBpY2suanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrO1xuIiwiaW1wb3J0IGJhc2VMb2Rhc2ggZnJvbSAnLi9fYmFzZUxvZGFzaC5qcyc7XG5pbXBvcnQgd3JhcHBlckNsb25lIGZyb20gJy4vX3dyYXBwZXJDbG9uZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICpcbiAqIEBuYW1lIHBsYW50XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSkubWFwKHNxdWFyZSk7XG4gKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gKlxuICogb3RoZXIudmFsdWUoKTtcbiAqIC8vID0+IFs5LCAxNl1cbiAqXG4gKiB3cmFwcGVkLnZhbHVlKCk7XG4gKiAvLyA9PiBbMSwgNF1cbiAqL1xuZnVuY3Rpb24gd3JhcHBlclBsYW50KHZhbHVlKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBwYXJlbnQgPSB0aGlzO1xuXG4gIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBiYXNlTG9kYXNoKSB7XG4gICAgdmFyIGNsb25lID0gd3JhcHBlckNsb25lKHBhcmVudCk7XG4gICAgY2xvbmUuX19pbmRleF9fID0gMDtcbiAgICBjbG9uZS5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGNsb25lO1xuICAgIH1cbiAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTtcbiAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187XG4gIH1cbiAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcHBlclBsYW50O1xuIiwiaW1wb3J0IGJhc2VHZXQgZnJvbSAnLi9fYmFzZUdldC5qcyc7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnByb3BlcnR5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJuc1xuICogdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFswLCAxLCAyXSxcbiAqICAgICBvYmplY3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTtcbiAqXG4gKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7XG4gKiAvLyA9PiBbMiwgMF1cbiAqXG4gKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAnXV0sIF8ucHJvcGVydHlPZihvYmplY3QpKTtcbiAqIC8vID0+IFsyLCAwXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24ocGF0aCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHJvcGVydHlPZjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlSW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyYXRvciBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2ZXaXRoKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoY29tcGFyYXRvcihhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VJbmRleE9mV2l0aDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuaW1wb3J0IGJhc2VJbmRleE9mV2l0aCBmcm9tICcuL19iYXNlSW5kZXhPZldpdGguanMnO1xuaW1wb3J0IGJhc2VVbmFyeSBmcm9tICcuL19iYXNlVW5hcnkuanMnO1xuaW1wb3J0IGNvcHlBcnJheSBmcm9tICcuL19jb3B5QXJyYXkuanMnO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEFsbEJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gKiBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleE9mID0gY29tcGFyYXRvciA/IGJhc2VJbmRleE9mV2l0aCA6IGJhc2VJbmRleE9mLFxuICAgICAgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBzZWVuID0gYXJyYXk7XG5cbiAgaWYgKGFycmF5ID09PSB2YWx1ZXMpIHtcbiAgICB2YWx1ZXMgPSBjb3B5QXJyYXkodmFsdWVzKTtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICBzZWVuID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IDAsXG4gICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgd2hpbGUgKChmcm9tSW5kZXggPSBpbmRleE9mKHNlZW4sIGNvbXB1dGVkLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpKSA+IC0xKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gYXJyYXkpIHtcbiAgICAgICAgc3BsaWNlLmNhbGwoc2VlbiwgZnJvbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VQdWxsQWxsO1xuIiwiaW1wb3J0IGJhc2VQdWxsQWxsIGZyb20gJy4vX2Jhc2VQdWxsQWxsLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJlbW92ZS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAqXG4gKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWydiJywgJ2InXVxuICovXG5mdW5jdGlvbiBwdWxsQWxsKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzKVxuICAgIDogYXJyYXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHB1bGxBbGw7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHB1bGxBbGwgZnJvbSAnLi9wdWxsQWxsLmpzJztcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBnaXZlbiB2YWx1ZXMgZnJvbSBgYXJyYXlgIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAqIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHByZWRpY2F0ZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAqXG4gKiBfLnB1bGwoYXJyYXksICdhJywgJ2MnKTtcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsnYicsICdiJ11cbiAqL1xudmFyIHB1bGwgPSBiYXNlUmVzdChwdWxsQWxsKTtcblxuZXhwb3J0IGRlZmF1bHQgcHVsbDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUHVsbEFsbCBmcm9tICcuL19iYXNlUHVsbEFsbC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIGFuZCBgdmFsdWVzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uXG4gKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmRpZmZlcmVuY2VCeWAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH0sIHsgJ3gnOiAzIH0sIHsgJ3gnOiAxIH1dO1xuICpcbiAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0sICd4Jyk7XG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gcHVsbEFsbEJ5KGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICA6IGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBwdWxsQWxsQnk7XG4iLCJpbXBvcnQgYmFzZVB1bGxBbGwgZnJvbSAnLi9fYmFzZVB1bGxBbGwuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgY29tcGFyYXRvciBpc1xuICogaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlV2l0aGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMywgJ3knOiA0IH0sIHsgJ3gnOiA1LCAneSc6IDYgfV07XG4gKlxuICogXy5wdWxsQWxsV2l0aChhcnJheSwgW3sgJ3gnOiAzLCAneSc6IDQgfV0sIF8uaXNFcXVhbCk7XG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogNSwgJ3knOiA2IH1dXG4gKi9cbmZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LCB2YWx1ZXMsIGNvbXBhcmF0b3IpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgOiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgcHVsbEFsbFdpdGg7XG4iLCJpbXBvcnQgYmFzZVVuc2V0IGZyb20gJy4vX2Jhc2VVbnNldC5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBpbmRleGVzIG9yIGNhcHR1cmluZyB0aGUgcmVtb3ZlZCBlbGVtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgaWYgKGxlbmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7XG4gICAgICB2YXIgcHJldmlvdXMgPSBpbmRleDtcbiAgICAgIGlmIChpc0luZGV4KGluZGV4KSkge1xuICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZVVuc2V0KGFycmF5LCBpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVB1bGxBdDtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgYmFzZUF0IGZyb20gJy4vX2Jhc2VBdC5qcyc7XG5pbXBvcnQgYmFzZVB1bGxBdCBmcm9tICcuL19iYXNlUHVsbEF0LmpzJztcbmltcG9ydCBjb21wYXJlQXNjZW5kaW5nIGZyb20gJy4vX2NvbXBhcmVBc2NlbmRpbmcuanMnO1xuaW1wb3J0IGZsYXRSZXN0IGZyb20gJy4vX2ZsYXRSZXN0LmpzJztcbmltcG9ydCBpc0luZGV4IGZyb20gJy4vX2lzSW5kZXguanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3BvbmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuXG4gKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICogdmFyIHB1bGxlZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsnYScsICdjJ11cbiAqXG4gKiBjb25zb2xlLmxvZyhwdWxsZWQpO1xuICogLy8gPT4gWydiJywgJ2QnXVxuICovXG52YXIgcHVsbEF0ID0gZmxhdFJlc3QoZnVuY3Rpb24oYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcblxuICBiYXNlUHVsbEF0KGFycmF5LCBhcnJheU1hcChpbmRleGVzLCBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBpc0luZGV4KGluZGV4LCBsZW5ndGgpID8gK2luZGV4IDogaW5kZXg7XG4gIH0pLnNvcnQoY29tcGFyZUFzY2VuZGluZykpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgcHVsbEF0O1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICBuYXRpdmVSYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5kb21gIHdpdGhvdXQgc3VwcG9ydCBmb3IgcmV0dXJuaW5nXG4gKiBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbG93ZXIgVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IHVwcGVyIFRoZSB1cHBlciBib3VuZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5kb20obG93ZXIsIHVwcGVyKSB7XG4gIHJldHVybiBsb3dlciArIG5hdGl2ZUZsb29yKG5hdGl2ZVJhbmRvbSgpICogKHVwcGVyIC0gbG93ZXIgKyAxKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VSYW5kb207XG4iLCJpbXBvcnQgYmFzZVJhbmRvbSBmcm9tICcuL19iYXNlUmFuZG9tLmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5pbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW4sXG4gICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb207XG5cbi8qKlxuICogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAqIElmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGEgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyXG4gKiBpcyByZXR1cm5lZC4gSWYgYGZsb2F0aW5nYCBpcyBgdHJ1ZWAsIG9yIGVpdGhlciBgbG93ZXJgIG9yIGB1cHBlcmAgYXJlXG4gKiBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC43LjBcbiAqIEBjYXRlZ29yeSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXI9MF0gVGhlIGxvd2VyIGJvdW5kLlxuICogQHBhcmFtIHtudW1iZXJ9IFt1cHBlcj0xXSBUaGUgdXBwZXIgYm91bmQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmbG9hdGluZ10gU3BlY2lmeSByZXR1cm5pbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJhbmRvbSgwLCA1KTtcbiAqIC8vID0+IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gKlxuICogXy5yYW5kb20oNSk7XG4gKiAvLyA9PiBhbHNvIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1XG4gKlxuICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDAgYW5kIDVcbiAqXG4gKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDEuMiBhbmQgNS4yXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSB7XG4gIGlmIChmbG9hdGluZyAmJiB0eXBlb2YgZmxvYXRpbmcgIT0gJ2Jvb2xlYW4nICYmIGlzSXRlcmF0ZWVDYWxsKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpKSB7XG4gICAgdXBwZXIgPSBmbG9hdGluZyA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoZmxvYXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgdXBwZXIgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBmbG9hdGluZyA9IHVwcGVyO1xuICAgICAgdXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBsb3dlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgIGZsb2F0aW5nID0gbG93ZXI7XG4gICAgICBsb3dlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgaWYgKGxvd2VyID09PSB1bmRlZmluZWQgJiYgdXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvd2VyID0gMDtcbiAgICB1cHBlciA9IDE7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG93ZXIgPSB0b0Zpbml0ZShsb3dlcik7XG4gICAgaWYgKHVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICBsb3dlciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwcGVyID0gdG9GaW5pdGUodXBwZXIpO1xuICAgIH1cbiAgfVxuICBpZiAobG93ZXIgPiB1cHBlcikge1xuICAgIHZhciB0ZW1wID0gbG93ZXI7XG4gICAgbG93ZXIgPSB1cHBlcjtcbiAgICB1cHBlciA9IHRlbXA7XG4gIH1cbiAgaWYgKGZsb2F0aW5nIHx8IGxvd2VyICUgMSB8fCB1cHBlciAlIDEpIHtcbiAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgIHJldHVybiBuYXRpdmVNaW4obG93ZXIgKyAocmFuZCAqICh1cHBlciAtIGxvd2VyICsgZnJlZVBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSksIHVwcGVyKTtcbiAgfVxuICByZXR1cm4gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByYW5kb207XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmFuZ2U7XG4iLCJpbXBvcnQgYmFzZVJhbmdlIGZyb20gJy4vX2Jhc2VSYW5nZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvRmluaXRlIGZyb20gJy4vdG9GaW5pdGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJhbmdlO1xuIiwiaW1wb3J0IGNyZWF0ZVJhbmdlIGZyb20gJy4vX2NyZWF0ZVJhbmdlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG51bWJlcnMgKHBvc2l0aXZlIGFuZC9vciBuZWdhdGl2ZSkgcHJvZ3Jlc3NpbmcgZnJvbVxuICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmVcbiAqIGBzdGFydGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYW4gYGVuZGAgb3IgYHN0ZXBgLiBJZiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLFxuICogaXQncyBzZXQgdG8gYHN0YXJ0YCB3aXRoIGBzdGFydGAgdGhlbiBzZXQgdG8gYDBgLlxuICpcbiAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucmFuZ2UoNCk7XG4gKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAqXG4gKiBfLnJhbmdlKC00KTtcbiAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICpcbiAqIF8ucmFuZ2UoMSwgNSk7XG4gKiAvLyA9PiBbMSwgMiwgMywgNF1cbiAqXG4gKiBfLnJhbmdlKDAsIDIwLCA1KTtcbiAqIC8vID0+IFswLCA1LCAxMCwgMTVdXG4gKlxuICogXy5yYW5nZSgwLCAtNCwgLTEpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA0LCAwKTtcbiAqIC8vID0+IFsxLCAxLCAxXVxuICpcbiAqIF8ucmFuZ2UoMCk7XG4gKiAvLyA9PiBbXVxuICovXG52YXIgcmFuZ2UgPSBjcmVhdGVSYW5nZSgpO1xuXG5leHBvcnQgZGVmYXVsdCByYW5nZTtcbiIsImltcG9ydCBjcmVhdGVSYW5nZSBmcm9tICcuL19jcmVhdGVSYW5nZS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yYW5nZWAgZXhjZXB0IHRoYXQgaXQgcG9wdWxhdGVzIHZhbHVlcyBpblxuICogZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucmFuZ2VSaWdodCg0KTtcbiAqIC8vID0+IFszLCAyLCAxLCAwXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgtNCk7XG4gKiAvLyA9PiBbLTMsIC0yLCAtMSwgMF1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMSwgNSk7XG4gKiAvLyA9PiBbNCwgMywgMiwgMV1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMCwgMjAsIDUpO1xuICogLy8gPT4gWzE1LCAxMCwgNSwgMF1cbiAqXG4gKiBfLnJhbmdlUmlnaHQoMCwgLTQsIC0xKTtcbiAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgxLCA0LCAwKTtcbiAqIC8vID0+IFsxLCAxLCAxXVxuICpcbiAqIF8ucmFuZ2VSaWdodCgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZVJpZ2h0ID0gY3JlYXRlUmFuZ2UodHJ1ZSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbmdlUmlnaHQ7XG4iLCJpbXBvcnQgY3JlYXRlV3JhcCBmcm9tICcuL19jcmVhdGVXcmFwLmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAqIHRvIHRoZSBzcGVjaWZpZWQgYGluZGV4ZXNgIHdoZXJlIHRoZSBhcmd1bWVudCB2YWx1ZSBhdCB0aGUgZmlyc3QgaW5kZXggaXNcbiAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXNcbiAqIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlYXJyYW5nZSBhcmd1bWVudHMgZm9yLlxuICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJndW1lbnQgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfSwgWzIsIDAsIDFdKTtcbiAqXG4gKiByZWFyZ2VkKCdiJywgJ2MnLCAnYScpXG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqL1xudmFyIHJlYXJnID0gZmxhdFJlc3QoZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1JFQVJHX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGluZGV4ZXMpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHJlYXJnO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAsIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gKiAgYGNvbGxlY3Rpb25gIGFzIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGVhY2hGdW5jKSB7XG4gIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGFjY3VtdWxhdG9yID0gaW5pdEFjY3VtXG4gICAgICA/IChpbml0QWNjdW0gPSBmYWxzZSwgdmFsdWUpXG4gICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICB9KTtcbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlUmVkdWNlO1xuIiwiaW1wb3J0IGFycmF5UmVkdWNlIGZyb20gJy4vX2FycmF5UmVkdWNlLmpzJztcbmltcG9ydCBiYXNlRWFjaCBmcm9tICcuL19iYXNlRWFjaC5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlZHVjZSBmcm9tICcuL19iYXNlUmVkdWNlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5cbi8qKlxuICogUmVkdWNlcyBgY29sbGVjdGlvbmAgdG8gYSB2YWx1ZSB3aGljaCBpcyB0aGUgYWNjdW11bGF0ZWQgcmVzdWx0IG9mIHJ1bm5pbmdcbiAqIGVhY2ggZWxlbWVudCBpbiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAqIGlzIG5vdCBnaXZlbiwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIGlzIHVzZWQgYXMgdGhlIGluaXRpYWxcbiAqIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIGZvdXIgYXJndW1lbnRzOlxuICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAqXG4gKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAqIGFuZCBgc29ydEJ5YFxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBzZWUgXy5yZWR1Y2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlZHVjZShbMSwgMl0sIGZ1bmN0aW9uKHN1bSwgbikge1xuICogICByZXR1cm4gc3VtICsgbjtcbiAqIH0sIDApO1xuICogLy8gPT4gM1xuICpcbiAqIF8ucmVkdWNlKHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAqICAgcmV0dXJuIHJlc3VsdDtcbiAqIH0sIHt9KTtcbiAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24gcmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZSA6IGJhc2VSZWR1Y2UsXG4gICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZHVjZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzXG4gKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UmVkdWNlUmlnaHQoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5Wy0tbGVuZ3RoXTtcbiAgfVxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtsZW5ndGhdLCBsZW5ndGgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gYWNjdW11bGF0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5UmVkdWNlUmlnaHQ7XG4iLCJpbXBvcnQgYXJyYXlSZWR1Y2VSaWdodCBmcm9tICcuL19hcnJheVJlZHVjZVJpZ2h0LmpzJztcbmltcG9ydCBiYXNlRWFjaFJpZ2h0IGZyb20gJy4vX2Jhc2VFYWNoUmlnaHQuanMnO1xuaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VSZWR1Y2UgZnJvbSAnLi9fYmFzZVJlZHVjZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucmVkdWNlYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBzZWUgXy5yZWR1Y2VcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gW1swLCAxXSwgWzIsIDNdLCBbNCwgNV1dO1xuICpcbiAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAqICAgcmV0dXJuIGZsYXR0ZW5lZC5jb25jYXQob3RoZXIpO1xuICogfSwgW10pO1xuICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gKi9cbmZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJpZ2h0IDogYmFzZVJlZHVjZSxcbiAgICAgIGluaXRBY2N1bSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzO1xuXG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgNCksIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGJhc2VFYWNoUmlnaHQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZWR1Y2VSaWdodDtcbiIsImltcG9ydCBhcnJheUZpbHRlciBmcm9tICcuL19hcnJheUZpbHRlci5qcyc7XG5pbXBvcnQgYmFzZUZpbHRlciBmcm9tICcuL19iYXNlRmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gKiB0aGF0IGBwcmVkaWNhdGVgIGRvZXMgKipub3QqKiByZXR1cm4gdHJ1dGh5IGZvci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8uZmlsdGVyXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ucmVqZWN0KHVzZXJzLCB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICovXG5mdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlamVjdDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUHVsbEF0IGZyb20gJy4vX2Jhc2VQdWxsQXQuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLmZpbHRlcmAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnB1bGxgXG4gKiB0byBwdWxsIGVsZW1lbnRzIGZyb20gYW4gYXJyYXkgYnkgdmFsdWUuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICogdmFyIGV2ZW5zID0gXy5yZW1vdmUoYXJyYXksIGZ1bmN0aW9uKG4pIHtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gKiAvLyA9PiBbMSwgM11cbiAqXG4gKiBjb25zb2xlLmxvZyhldmVucyk7XG4gKiAvLyA9PiBbMiwgNF1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluZGV4ZXMgPSBbXSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9XG4gIH1cbiAgYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbW92ZTtcbiIsImltcG9ydCBiYXNlUmVwZWF0IGZyb20gJy4vX2Jhc2VSZXBlYXQuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIFJlcGVhdHMgdGhlIGdpdmVuIHN0cmluZyBgbmAgdGltZXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlcGVhdCgnKicsIDMpO1xuICogLy8gPT4gJyoqKidcbiAqXG4gKiBfLnJlcGVhdCgnYWJjJywgMik7XG4gKiAvLyA9PiAnYWJjYWJjJ1xuICpcbiAqIF8ucmVwZWF0KCdhYmMnLCAwKTtcbiAqIC8vID0+ICcnXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7XG4gIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVmaW5lZCkpIHtcbiAgICBuID0gMTtcbiAgfSBlbHNlIHtcbiAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICB9XG4gIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0cmluZyksIG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXBlYXQ7XG4iLCJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKlxuICogUmVwbGFjZXMgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGBzdHJpbmdgIHdpdGggYHJlcGxhY2VtZW50YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAqIFtgU3RyaW5nI3JlcGxhY2VgXShodHRwczovL21kbi5pby9TdHJpbmcvcmVwbGFjZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gcmVwbGFjZW1lbnQgVGhlIG1hdGNoIHJlcGxhY2VtZW50LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJlcGxhY2UoJ0hpIEZyZWQnLCAnRnJlZCcsICdCYXJuZXknKTtcbiAqIC8vID0+ICdIaSBCYXJuZXknXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2UoKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoYXJnc1swXSk7XG5cbiAgcmV0dXJuIGFyZ3MubGVuZ3RoIDwgMyA/IHN0cmluZyA6IHN0cmluZy5yZXBsYWNlKGFyZ3NbMV0sIGFyZ3NbMl0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXBsYWNlO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB0b0ludGVnZXIgZnJvbSAnLi90b0ludGVnZXIuanMnO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICogY3JlYXRlZCBmdW5jdGlvbiBhbmQgYXJndW1lbnRzIGZyb20gYHN0YXJ0YCBhbmQgYmV5b25kIHByb3ZpZGVkIGFzXG4gKiBhbiBhcnJheS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gKiBbcmVzdCBwYXJhbWV0ZXJdKGh0dHBzOi8vbWRuLmlvL3Jlc3RfcGFyYW1ldGVycykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzYXkgPSBfLnJlc3QoZnVuY3Rpb24od2hhdCwgbmFtZXMpIHtcbiAqICAgcmV0dXJuIHdoYXQgKyAnICcgKyBfLmluaXRpYWwobmFtZXMpLmpvaW4oJywgJykgK1xuICogICAgIChfLnNpemUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7XG4gKiB9KTtcbiAqXG4gKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkLCBiYXJuZXksICYgcGViYmxlcydcbiAqL1xuZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBzdGFydCA9IHN0YXJ0ID09PSB1bmRlZmluZWQgPyBzdGFydCA6IHRvSW50ZWdlcihzdGFydCk7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jLCBzdGFydCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlc3Q7XG4iLCJpbXBvcnQgY2FzdFBhdGggZnJvbSAnLi9fY2FzdFBhdGguanMnO1xuaW1wb3J0IGlzRnVuY3Rpb24gZnJvbSAnLi9pc0Z1bmN0aW9uLmpzJztcbmltcG9ydCB0b0tleSBmcm9tICcuL190b0tleS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRoZSByZXNvbHZlZCB2YWx1ZSBpcyBhXG4gKiBmdW5jdGlvbiBpdCdzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgaXRzIHBhcmVudCBvYmplY3QgYW5kXG4gKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNvbHZlLlxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MxJzogMywgJ2MyJzogXy5jb25zdGFudCg0KSB9IH1dIH07XG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gKiAvLyA9PiA0XG4gKlxuICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgJ2RlZmF1bHQnKTtcbiAqIC8vID0+ICdkZWZhdWx0J1xuICpcbiAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsIF8uY29uc3RhbnQoJ2RlZmF1bHQnKSk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gcmVzdWx0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgLy8gRW5zdXJlIHRoZSBsb29wIGlzIGVudGVyZWQgd2hlbiBwYXRoIGlzIGVtcHR5LlxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IDE7XG4gICAgb2JqZWN0ID0gdW5kZWZpbmVkO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBsZW5ndGg7XG4gICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgb2JqZWN0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXN1bHQ7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZVJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG5cbi8qKlxuICogUmV2ZXJzZXMgYGFycmF5YCBzbyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZSBzZWNvbmRcbiAqIGVsZW1lbnQgYmVjb21lcyB0aGUgc2Vjb25kIHRvIGxhc3QsIGFuZCBzbyBvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgIGFuZCBpcyBiYXNlZCBvblxuICogW2BBcnJheSNyZXZlcnNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvcmV2ZXJzZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAqXG4gKiBfLnJldmVyc2UoYXJyYXkpO1xuICogLy8gPT4gWzMsIDIsIDFdXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzMsIDIsIDFdXG4gKi9cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5ID09IG51bGwgPyBhcnJheSA6IG5hdGl2ZVJldmVyc2UuY2FsbChhcnJheSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJldmVyc2U7XG4iLCJpbXBvcnQgY3JlYXRlUm91bmQgZnJvbSAnLi9fY3JlYXRlUm91bmQuanMnO1xuXG4vKipcbiAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjEwLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ucm91bmQoNC4wMDYpO1xuICogLy8gPT4gNFxuICpcbiAqIF8ucm91bmQoNC4wMDYsIDIpO1xuICogLy8gPT4gNC4wMVxuICpcbiAqIF8ucm91bmQoNDA2MCwgLTIpO1xuICogLy8gPT4gNDEwMFxuICovXG52YXIgcm91bmQgPSBjcmVhdGVSb3VuZCgncm91bmQnKTtcblxuZXhwb3J0IGRlZmF1bHQgcm91bmQ7XG4iLCJpbXBvcnQgYmFzZVJhbmRvbSBmcm9tICcuL19iYXNlUmFuZG9tLmpzJztcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2FtcGxlYCBmb3IgYXJyYXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2FtcGxlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBhcnJheVNhbXBsZShhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U2FtcGxlO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlIGZyb20gJy4vX2FycmF5U2FtcGxlLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNhbXBsZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBhcnJheVNhbXBsZSh2YWx1ZXMoY29sbGVjdGlvbikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2FtcGxlO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlIGZyb20gJy4vX2FycmF5U2FtcGxlLmpzJztcbmltcG9ydCBiYXNlU2FtcGxlIGZyb20gJy4vX2Jhc2VTYW1wbGUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqXG4gKiBHZXRzIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAqIC8vID0+IDJcbiAqL1xuZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTYW1wbGUgOiBiYXNlU2FtcGxlO1xuICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2FtcGxlO1xuIiwiaW1wb3J0IGJhc2VSYW5kb20gZnJvbSAnLi9fYmFzZVJhbmRvbS5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIHdoaWNoIG11dGF0ZXMgYW5kIHNldHMgdGhlIHNpemUgb2YgYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNodWZmbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJyYXlgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogc2l6ZTtcbiAgd2hpbGUgKCsraW5kZXggPCBzaXplKSB7XG4gICAgdmFyIHJhbmQgPSBiYXNlUmFuZG9tKGluZGV4LCBsYXN0SW5kZXgpLFxuICAgICAgICB2YWx1ZSA9IGFycmF5W3JhbmRdO1xuXG4gICAgYXJyYXlbcmFuZF0gPSBhcnJheVtpbmRleF07XG4gICAgYXJyYXlbaW5kZXhdID0gdmFsdWU7XG4gIH1cbiAgYXJyYXkubGVuZ3RoID0gc2l6ZTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaHVmZmxlU2VsZjtcbiIsImltcG9ydCBiYXNlQ2xhbXAgZnJvbSAnLi9fYmFzZUNsYW1wLmpzJztcbmltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZVNpemVgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBhcnJheVNhbXBsZVNpemUoYXJyYXksIG4pIHtcbiAgcmV0dXJuIHNodWZmbGVTZWxmKGNvcHlBcnJheShhcnJheSksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJyYXlTYW1wbGVTaXplO1xuIiwiaW1wb3J0IGJhc2VDbGFtcCBmcm9tICcuL19iYXNlQ2xhbXAuanMnO1xuaW1wb3J0IHNodWZmbGVTZWxmIGZyb20gJy4vX3NodWZmbGVTZWxmLmpzJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnLi92YWx1ZXMuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNhbXBsZVNpemVgIHdpdGhvdXQgcGFyYW0gZ3VhcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7XG4gIHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgcmV0dXJuIHNodWZmbGVTZWxmKGFycmF5LCBiYXNlQ2xhbXAobiwgMCwgYXJyYXkubGVuZ3RoKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTYW1wbGVTaXplO1xuIiwiaW1wb3J0IGFycmF5U2FtcGxlU2l6ZSBmcm9tICcuL19hcnJheVNhbXBsZVNpemUuanMnO1xuaW1wb3J0IGJhc2VTYW1wbGVTaXplIGZyb20gJy4vX2Jhc2VTYW1wbGVTaXplLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogR2V0cyBgbmAgcmFuZG9tIGVsZW1lbnRzIGF0IHVuaXF1ZSBrZXlzIGZyb20gYGNvbGxlY3Rpb25gIHVwIHRvIHRoZVxuICogc2l6ZSBvZiBgY29sbGVjdGlvbmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zYW1wbGVTaXplKFsxLCAyLCAzXSwgMik7XG4gKiAvLyA9PiBbMywgMV1cbiAqXG4gKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCA0KTtcbiAqIC8vID0+IFsyLCAzLCAxXVxuICovXG5mdW5jdGlvbiBzYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSB7XG4gIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgbiA9IDE7XG4gIH0gZWxzZSB7XG4gICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgfVxuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNhbXBsZVNpemUgOiBiYXNlU2FtcGxlU2l6ZTtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNhbXBsZVNpemU7XG4iLCJpbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIGEgcG9ydGlvbiBvZiBgcGF0aGAgZG9lc24ndCBleGlzdCxcbiAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0c1xuICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAqIGBwYXRoYCBjcmVhdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTtcbiAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gKiAvLyA9PiA0XG4gKlxuICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gKiBjb25zb2xlLmxvZyhvYmplY3QueFswXS55LnopO1xuICogLy8gPT4gNVxuICovXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzZXQ7XG4iLCJpbXBvcnQgYmFzZVNldCBmcm9tICcuL19iYXNlU2V0LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNldGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2ggaXNcbiAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKG5zVmFsdWUsIGtleSwgbnNPYmplY3QpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHt9O1xuICpcbiAqIF8uc2V0V2l0aChvYmplY3QsICdbMF1bMV0nLCAnYScsIE9iamVjdCk7XG4gKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAqL1xuZnVuY3Rpb24gc2V0V2l0aChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0V2l0aDtcbiIsImltcG9ydCBjb3B5QXJyYXkgZnJvbSAnLi9fY29weUFycmF5LmpzJztcbmltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNodWZmbGVgIGZvciBhcnJheXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5U2h1ZmZsZShhcnJheSkge1xuICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFycmF5U2h1ZmZsZTtcbiIsImltcG9ydCBzaHVmZmxlU2VsZiBmcm9tICcuL19zaHVmZmxlU2VsZi5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zaHVmZmxlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlU2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gIHJldHVybiBzaHVmZmxlU2VsZih2YWx1ZXMoY29sbGVjdGlvbikpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU2h1ZmZsZTtcbiIsImltcG9ydCBhcnJheVNodWZmbGUgZnJvbSAnLi9fYXJyYXlTaHVmZmxlLmpzJztcbmltcG9ydCBiYXNlU2h1ZmZsZSBmcm9tICcuL19iYXNlU2h1ZmZsZS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlXG4gKiBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNodWZmbGUoWzEsIDIsIDMsIDRdKTtcbiAqIC8vID0+IFs0LCAxLCAzLCAyXVxuICovXG5mdW5jdGlvbiBzaHVmZmxlKGNvbGxlY3Rpb24pIHtcbiAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzaHVmZmxlO1xuIiwiaW1wb3J0IGJhc2VLZXlzIGZyb20gJy4vX2Jhc2VLZXlzLmpzJztcbmltcG9ydCBnZXRUYWcgZnJvbSAnLi9fZ2V0VGFnLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc1N0cmluZyBmcm9tICcuL2lzU3RyaW5nLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2l6ZSBvZiBgY29sbGVjdGlvbmAgYnkgcmV0dXJuaW5nIGl0cyBsZW5ndGggZm9yIGFycmF5LWxpa2VcbiAqIHZhbHVlcyBvciB0aGUgbnVtYmVyIG9mIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIGZvciBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zaXplKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gKiAvLyA9PiAyXG4gKlxuICogXy5zaXplKCdwZWJibGVzJyk7XG4gKiAvLyA9PiA3XG4gKi9cbmZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pID8gc3RyaW5nU2l6ZShjb2xsZWN0aW9uKSA6IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcoY29sbGVjdGlvbik7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICB9XG4gIHJldHVybiBiYXNlS2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNpemU7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZlxuICogW2BBcnJheSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJyYXlzIGFyZVxuICogcmV0dXJuZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7XG4gICAgc3RhcnQgPSAwO1xuICAgIGVuZCA9IGxlbmd0aDtcbiAgfVxuICBlbHNlIHtcbiAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpO1xuICB9XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzbGljZTtcbiIsImltcG9ydCBjcmVhdGVDb21wb3VuZGVyIGZyb20gJy4vX2NyZWF0ZUNvbXBvdW5kZXIuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gKiBbc25ha2UgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU25ha2VfY2FzZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTtcbiAqIC8vID0+ICdmb29fYmFyJ1xuICpcbiAqIF8uc25ha2VDYXNlKCdmb29CYXInKTtcbiAqIC8vID0+ICdmb29fYmFyJ1xuICpcbiAqIF8uc25ha2VDYXNlKCctLUZPTy1CQVItLScpO1xuICogLy8gPT4gJ2Zvb19iYXInXG4gKi9cbnZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzbmFrZUNhc2U7XG4iLCJpbXBvcnQgYmFzZUVhY2ggZnJvbSAnLi9fYmFzZUVhY2guanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvbWVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdDtcblxuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICByZXR1cm4gIXJlc3VsdDtcbiAgfSk7XG4gIHJldHVybiAhIXJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvbWU7XG4iLCJpbXBvcnQgYXJyYXlTb21lIGZyb20gJy4vX2FycmF5U29tZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVNvbWUgZnJvbSAnLi9fYmFzZVNvbWUuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc0l0ZXJhdGVlQ2FsbCBmcm9tICcuL19pc0l0ZXJhdGVlQ2FsbC5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciAqKmFueSoqIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gLlxuICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeS4gVGhlIHByZWRpY2F0ZSBpc1xuICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb21lKFtudWxsLCAwLCAneWVzJywgZmFsc2VdLCBCb29sZWFuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5zb21lKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnNvbWUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U29tZSA6IGJhc2VTb21lO1xuICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzb21lO1xuIiwiaW1wb3J0IGJhc2VGbGF0dGVuIGZyb20gJy4vX2Jhc2VGbGF0dGVuLmpzJztcbmltcG9ydCBiYXNlT3JkZXJCeSBmcm9tICcuL19iYXNlT3JkZXJCeS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGlzSXRlcmF0ZWVDYWxsIGZyb20gJy4vX2lzSXRlcmF0ZWVDYWxsLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGVsZW1lbnRzLCBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5IHRoZSByZXN1bHRzIG9mXG4gKiBydW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBUaGlzIG1ldGhvZFxuICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gKiBlcXVhbCBlbGVtZW50cy4gVGhlIGl0ZXJhdGVlcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNvcnRlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LFxuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9XG4gKiBdO1xuICpcbiAqIF8uc29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAqXG4gKiBfLnNvcnRCeSh1c2VycywgWyd1c2VyJywgJ2FnZSddKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDQwXSwgWydmcmVkJywgNDhdXVxuICovXG52YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7XG4gIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPiAxICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdKSkge1xuICAgIGl0ZXJhdGVlcyA9IFtdO1xuICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICBpdGVyYXRlZXMgPSBbaXRlcmF0ZWVzWzBdXTtcbiAgfVxuICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRCeTtcbiIsImltcG9ydCBpc1N5bWJvbCBmcm9tICcuL2lzU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NSxcbiAgICBNQVhfQVJSQVlfSU5ERVggPSBNQVhfQVJSQVlfTEVOR1RIIC0gMTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUZsb29yID0gTWF0aC5mbG9vcixcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgXG4gKiB3aGljaCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGVcbiAqIHRoZWlyIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkge1xuICB2YWx1ZSA9IGl0ZXJhdGVlKHZhbHVlKTtcblxuICB2YXIgbG93ID0gMCxcbiAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLFxuICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICB2YWxJc1N5bWJvbCA9IGlzU3ltYm9sKHZhbHVlKSxcbiAgICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIHZhciBtaWQgPSBuYXRpdmVGbG9vcigobG93ICsgaGlnaCkgLyAyKSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZShhcnJheVttaWRdKSxcbiAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgb3RoSXNOdWxsID0gY29tcHV0ZWQgPT09IG51bGwsXG4gICAgICAgIG90aElzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkLFxuICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgIGlmICh2YWxJc05hTikge1xuICAgICAgdmFyIHNldExvdyA9IHJldEhpZ2hlc3QgfHwgb3RoSXNSZWZsZXhpdmU7XG4gICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgb3RoSXNEZWZpbmVkKTtcbiAgICB9IGVsc2UgaWYgKHZhbElzTnVsbCkge1xuICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgIH0gZWxzZSBpZiAodmFsSXNTeW1ib2wpIHtcbiAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIG90aElzRGVmaW5lZCAmJiAhb3RoSXNOdWxsICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc1N5bWJvbCk7XG4gICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgIHNldExvdyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHNldExvdykge1xuICAgICAgbG93ID0gbWlkICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlnaCA9IG1pZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlU29ydGVkSW5kZXhCeTtcbiIsImltcG9ydCBiYXNlU29ydGVkSW5kZXhCeSBmcm9tICcuL19iYXNlU29ydGVkSW5kZXhCeS5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTUsXG4gICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2hcbiAqIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaCBvZiBgYXJyYXlgIHRvIGRldGVybWluZSB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICogc2hvdWxkIGJlIGluc2VydGVkIGludG8gYGFycmF5YCBpbiBvcmRlciB0byBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkge1xuICB2YXIgbG93ID0gMCxcbiAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gbG93IDogYXJyYXkubGVuZ3RoO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsXG4gICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdO1xuXG4gICAgICBpZiAoY29tcHV0ZWQgIT09IG51bGwgJiYgIWlzU3ltYm9sKGNvbXB1dGVkKSAmJlxuICAgICAgICAgIChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkpIHtcbiAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoaWdoO1xuICB9XG4gIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVNvcnRlZEluZGV4O1xuIiwiaW1wb3J0IGJhc2VTb3J0ZWRJbmRleCBmcm9tICcuL19iYXNlU29ydGVkSW5kZXguanMnO1xuXG4vKipcbiAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRldGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gKiAgaW50byBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZEluZGV4KFszMCwgNTBdLCA0MCk7XG4gKiAvLyA9PiAxXG4gKi9cbmZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZEluZGV4O1xuIiwiaW1wb3J0IGJhc2VJdGVyYXRlZSBmcm9tICcuL19iYXNlSXRlcmF0ZWUuanMnO1xuaW1wb3J0IGJhc2VTb3J0ZWRJbmRleEJ5IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleEJ5LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXJcbiAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gKiAgaW50byBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAqXG4gKiBfLnNvcnRlZEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICogLy8gPT4gMFxuICovXG5mdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZEluZGV4Qnk7XG4iLCJpbXBvcnQgYmFzZVNvcnRlZEluZGV4IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAqIC8vID0+IDFcbiAqL1xuZnVuY3Rpb24gc29ydGVkSW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAobGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkSW5kZXhPZjtcbiIsImltcG9ydCBiYXNlU29ydGVkSW5kZXggZnJvbSAnLi9fYmFzZVNvcnRlZEluZGV4LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSBoaWdoZXN0XG4gKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAqIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICogIGludG8gYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRMYXN0SW5kZXgoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAqIC8vID0+IDRcbiAqL1xuZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4KGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZExhc3RJbmRleDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlU29ydGVkSW5kZXhCeSBmcm9tICcuL19iYXNlU29ydGVkSW5kZXhCeS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0ZWRMYXN0SW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAqICBpbnRvIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dO1xuICpcbiAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2JqZWN0cywgeyAneCc6IDQgfSwgJ3gnKTtcbiAqIC8vID0+IDFcbiAqL1xuZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkge1xuICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCB0cnVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkTGFzdEluZGV4Qnk7XG4iLCJpbXBvcnQgYmFzZVNvcnRlZEluZGV4IGZyb20gJy4vX2Jhc2VTb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5sYXN0SW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnlcbiAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRMYXN0SW5kZXhPZihbNCwgNSwgNSwgNSwgNl0sIDUpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAobGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSkgLSAxO1xuICAgIGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNvcnRlZExhc3RJbmRleE9mO1xuIiwiaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVuaXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlU29ydGVkVW5pcShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICB2YXIgc2VlbiA9IGNvbXB1dGVkO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VTb3J0ZWRVbmlxO1xuIiwiaW1wb3J0IGJhc2VTb3J0ZWRVbmlxIGZyb20gJy4vX2Jhc2VTb3J0ZWRVbmlxLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICogZm9yIHNvcnRlZCBhcnJheXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnNvcnRlZFVuaXEoWzEsIDEsIDJdKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXkpXG4gICAgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkVW5pcTtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlU29ydGVkVW5pcSBmcm9tICcuL19iYXNlU29ydGVkVW5pcS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxQnlgIGV4Y2VwdCB0aGF0IGl0J3MgZGVzaWduZWQgYW5kIG9wdGltaXplZFxuICogZm9yIHNvcnRlZCBhcnJheXMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zb3J0ZWRVbmlxQnkoWzEuMSwgMS4yLCAyLjMsIDIuNF0sIE1hdGguZmxvb3IpO1xuICogLy8gPT4gWzEuMSwgMi4zXVxuICovXG5mdW5jdGlvbiBzb3J0ZWRVbmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc29ydGVkVW5pcUJ5O1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGhhc1VuaWNvZGUgZnJvbSAnLi9faGFzVW5pY29kZS5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGlzUmVnRXhwIGZyb20gJy4vaXNSZWdFeHAuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogU3BsaXRzIGBzdHJpbmdgIGJ5IGBzZXBhcmF0b3JgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICogW2BTdHJpbmcjc3BsaXRgXShodHRwczovL21kbi5pby9TdHJpbmcvc3BsaXQpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHNwbGl0LlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciBwYXR0ZXJuIHRvIHNwbGl0IGJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gVGhlIGxlbmd0aCB0byB0cnVuY2F0ZSByZXN1bHRzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzdHJpbmcgc2VnbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3BsaXQoJ2EtYi1jJywgJy0nLCAyKTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqL1xuZnVuY3Rpb24gc3BsaXQoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSB7XG4gIGlmIChsaW1pdCAmJiB0eXBlb2YgbGltaXQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KSkge1xuICAgIHNlcGFyYXRvciA9IGxpbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIGxpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9BUlJBWV9MRU5HVEggOiBsaW1pdCA+Pj4gMDtcbiAgaWYgKCFsaW1pdCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBpZiAoc3RyaW5nICYmIChcbiAgICAgICAgdHlwZW9mIHNlcGFyYXRvciA9PSAnc3RyaW5nJyB8fFxuICAgICAgICAoc2VwYXJhdG9yICE9IG51bGwgJiYgIWlzUmVnRXhwKHNlcGFyYXRvcikpXG4gICAgICApKSB7XG4gICAgc2VwYXJhdG9yID0gYmFzZVRvU3RyaW5nKHNlcGFyYXRvcik7XG4gICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwgMCwgbGltaXQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nLnNwbGl0KHNlcGFyYXRvciwgbGltaXQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGxpdDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAqIGNyZWF0ZSBmdW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZVxuICogW2BGdW5jdGlvbiNhcHBseWBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkpLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGVcbiAqIFtzcHJlYWQgb3BlcmF0b3JdKGh0dHBzOi8vbWRuLmlvL3NwcmVhZF9vcGVyYXRvcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjIuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBzcHJlYWQgYXJndW1lbnRzIG92ZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBzYXkgPSBfLnNwcmVhZChmdW5jdGlvbih3aG8sIHdoYXQpIHtcbiAqICAgcmV0dXJuIHdobyArICcgc2F5cyAnICsgd2hhdDtcbiAqIH0pO1xuICpcbiAqIHNheShbJ2ZyZWQnLCAnaGVsbG8nXSk7XG4gKiAvLyA9PiAnZnJlZCBzYXlzIGhlbGxvJ1xuICpcbiAqIHZhciBudW1iZXJzID0gUHJvbWlzZS5hbGwoW1xuICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICogICBQcm9taXNlLnJlc29sdmUoMzYpXG4gKiBdKTtcbiAqXG4gKiBudW1iZXJzLnRoZW4oXy5zcHJlYWQoZnVuY3Rpb24oeCwgeSkge1xuICogICByZXR1cm4geCArIHk7XG4gKiB9KSk7XG4gKiAvLyA9PiBhIFByb21pc2Ugb2YgNzZcbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGZ1bmMsIHN0YXJ0KSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHN0YXJ0ID0gc3RhcnQgPT0gbnVsbCA/IDAgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKHN0YXJ0KSwgMCk7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgdmFyIGFycmF5ID0gYXJnc1tzdGFydF0sXG4gICAgICAgIG90aGVyQXJncyA9IGNhc3RTbGljZShhcmdzLCAwLCBzdGFydCk7XG5cbiAgICBpZiAoYXJyYXkpIHtcbiAgICAgIGFycmF5UHVzaChvdGhlckFyZ3MsIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcHJlYWQ7XG4iLCJpbXBvcnQgY3JlYXRlQ29tcG91bmRlciBmcm9tICcuL19jcmVhdGVDb21wb3VuZGVyLmpzJztcbmltcG9ydCB1cHBlckZpcnN0IGZyb20gJy4vdXBwZXJGaXJzdC5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG9cbiAqIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdGFydCBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3RhcnRDYXNlKCctLWZvby1iYXItLScpO1xuICogLy8gPT4gJ0ZvbyBCYXInXG4gKlxuICogXy5zdGFydENhc2UoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ0ZvbyBCYXInXG4gKlxuICogXy5zdGFydENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqL1xudmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgdXBwZXJGaXJzdCh3b3JkKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFydENhc2U7XG4iLCJpbXBvcnQgYmFzZUNsYW1wIGZyb20gJy4vX2Jhc2VDbGFtcC5qcyc7XG5pbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggdGhlIGdpdmVuIHRhcmdldCBzdHJpbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCBgdGFyZ2V0YCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcG9zaXRpb24gPSBwb3NpdGlvbiA9PSBudWxsXG4gICAgPyAwXG4gICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgc3RyaW5nLmxlbmd0aCk7XG5cbiAgdGFyZ2V0ID0gYmFzZVRvU3RyaW5nKHRhcmdldCk7XG4gIHJldHVybiBzdHJpbmcuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgdGFyZ2V0Lmxlbmd0aCkgPT0gdGFyZ2V0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdGFydHNXaXRoO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gXy50aW1lcygyLCBfLnN0dWJPYmplY3QpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3t9LCB7fV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJPYmplY3QoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1Yk9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViU3RyaW5nKTtcbiAqIC8vID0+IFsnJywgJyddXG4gKi9cbmZ1bmN0aW9uIHN0dWJTdHJpbmcoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R1YlN0cmluZztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViVHJ1ZSk7XG4gKiAvLyA9PiBbdHJ1ZSwgdHJ1ZV1cbiAqL1xuZnVuY3Rpb24gc3R1YlRydWUoKSB7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHViVHJ1ZTtcbiIsImltcG9ydCBjcmVhdGVNYXRoT3BlcmF0aW9uIGZyb20gJy4vX2NyZWF0ZU1hdGhPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIFN1YnRyYWN0IHR3byBudW1iZXJzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gc3VidHJhaGVuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIHN1YnRyYWN0aW9uLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZGlmZmVyZW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5zdWJ0cmFjdCg2LCA0KTtcbiAqIC8vID0+IDJcbiAqL1xudmFyIHN1YnRyYWN0ID0gY3JlYXRlTWF0aE9wZXJhdGlvbihmdW5jdGlvbihtaW51ZW5kLCBzdWJ0cmFoZW5kKSB7XG4gIHJldHVybiBtaW51ZW5kIC0gc3VidHJhaGVuZDtcbn0sIDApO1xuXG5leHBvcnQgZGVmYXVsdCBzdWJ0cmFjdDtcbiIsImltcG9ydCBiYXNlU3VtIGZyb20gJy4vX2Jhc2VTdW0uanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjYXRlZ29yeSBNYXRoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnN1bShbNCwgMiwgOCwgNl0pO1xuICogLy8gPT4gMjBcbiAqL1xuZnVuY3Rpb24gc3VtKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVN1bShhcnJheSwgaWRlbnRpdHkpXG4gICAgOiAwO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdW07XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVN1bSBmcm9tICcuL19iYXNlU3VtLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnN1bWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgdG8gYmUgc3VtbWVkLlxuICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE1hdGhcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ24nOiA0IH0sIHsgJ24nOiAyIH0sIHsgJ24nOiA4IH0sIHsgJ24nOiA2IH1dO1xuICpcbiAqIF8uc3VtQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAqIC8vID0+IDIwXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnN1bUJ5KG9iamVjdHMsICduJyk7XG4gKiAvLyA9PiAyMFxuICovXG5mdW5jdGlvbiBzdW1CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlU3VtKGFycmF5LCBiYXNlSXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgIDogMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3VtQnk7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5cbi8qKlxuICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGFpbChbMSwgMiwgM10pO1xuICogLy8gPT4gWzIsIDNdXG4gKi9cbmZ1bmN0aW9uIHRhaWwoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAxLCBsZW5ndGgpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRhaWw7XG4iLCJpbXBvcnQgYmFzZVNsaWNlIGZyb20gJy4vX2Jhc2VTbGljZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50YWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbMV1cbiAqXG4gKiBfLnRha2UoWzEsIDIsIDNdLCAyKTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udGFrZShbMSwgMiwgM10sIDUpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogXy50YWtlKFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0YWtlKGFycmF5LCBuLCBndWFyZCkge1xuICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlO1xuIiwiaW1wb3J0IGJhc2VTbGljZSBmcm9tICcuL19iYXNlU2xpY2UuanMnO1xuaW1wb3J0IHRvSW50ZWdlciBmcm9tICcuL3RvSW50ZWdlci5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gdGFrZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBbM11cbiAqXG4gKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDIpO1xuICogLy8gPT4gWzIsIDNdXG4gKlxuICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgMCk7XG4gKiAvLyA9PiBbXVxuICovXG5mdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgbiA9IGxlbmd0aCAtIG47XG4gIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRha2VSaWdodDtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlV2hpbGUgZnJvbSAnLi9fYmFzZVdoaWxlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC4gRWxlbWVudHMgYXJlXG4gKiB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRha2VSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgPyBiYXNlV2hpbGUoYXJyYXksIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlUmlnaHRXaGlsZTtcbiIsImltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlV2hpbGUgZnJvbSAnLi9fYmFzZVdoaWxlLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGJlZ2lubmluZy4gRWxlbWVudHNcbiAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAqIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnRha2VXaGlsZSh1c2VycywgeyAndXNlcic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy50YWtlV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgID8gYmFzZVdoaWxlKGFycmF5LCBiYXNlSXRlcmF0ZWUocHJlZGljYXRlLCAzKSlcbiAgICA6IFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YWtlV2hpbGU7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIGludm9rZXMgYGludGVyY2VwdG9yYCBhbmQgcmV0dXJucyBgdmFsdWVgLiBUaGUgaW50ZXJjZXB0b3JcbiAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvXG4gKiBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UgaW4gb3JkZXIgdG8gbW9kaWZ5IGludGVybWVkaWF0ZSByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfKFsxLCAyLCAzXSlcbiAqICAudGFwKGZ1bmN0aW9uKGFycmF5KSB7XG4gKiAgICAvLyBNdXRhdGUgaW5wdXQgYXJyYXkuXG4gKiAgICBhcnJheS5wb3AoKTtcbiAqICB9KVxuICogIC5yZXZlcnNlKClcbiAqICAudmFsdWUoKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG5mdW5jdGlvbiB0YXAodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0YXA7XG4iLCJpbXBvcnQgZXEgZnJvbSAnLi9lcS5qcyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCBieSBgXy5kZWZhdWx0c2AgdG8gY3VzdG9taXplIGl0cyBgXy5hc3NpZ25JbmAgdXNlIHRvIGFzc2lnbiBwcm9wZXJ0aWVzXG4gKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICogdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IG9ialZhbHVlIFRoZSBkZXN0aW5hdGlvbiB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNBc3NpZ25JbihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICByZXR1cm4gc3JjVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9ialZhbHVlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluO1xuIiwiLyoqIFVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgJ1xcXFwnOiAnXFxcXCcsXG4gIFwiJ1wiOiBcIidcIixcbiAgJ1xcbic6ICduJyxcbiAgJ1xccic6ICdyJyxcbiAgJ1xcdTIwMjgnOiAndTIwMjgnLFxuICAnXFx1MjAyOSc6ICd1MjAyOSdcbn07XG5cbi8qKlxuICogVXNlZCBieSBgXy50ZW1wbGF0ZWAgdG8gZXNjYXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocikge1xuICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBlc2NhcGVTdHJpbmdDaGFyO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUludGVycG9sYXRlID0gLzwlPShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlSW50ZXJwb2xhdGU7XG4iLCJpbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCByZUVzY2FwZSBmcm9tICcuL19yZUVzY2FwZS5qcyc7XG5pbXBvcnQgcmVFdmFsdWF0ZSBmcm9tICcuL19yZUV2YWx1YXRlLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluXG4gKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAqIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge09iamVjdH1cbiAqL1xudmFyIHRlbXBsYXRlU2V0dGluZ3MgPSB7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXNjYXBlJzogcmVFc2NhcGUsXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtSZWdFeHB9XG4gICAqL1xuICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC5cbiAgICpcbiAgICogQG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5nc1xuICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgKi9cbiAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSxcblxuICAvKipcbiAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICAndmFyaWFibGUnOiAnJyxcblxuICAvKipcbiAgICogVXNlZCB0byBpbXBvcnQgdmFyaWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICAnaW1wb3J0cyc6IHtcblxuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MuaW1wb3J0c1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICAnXyc6IHsgJ2VzY2FwZSc6IGVzY2FwZSB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRlbXBsYXRlU2V0dGluZ3M7XG4iLCIvKiogVXNlZCB0byBtYXRjaCB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiAqL1xudmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2c7XG5cbmV4cG9ydCBkZWZhdWx0IHJlRXNjYXBlO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbnZhciByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZztcblxuZXhwb3J0IGRlZmF1bHQgcmVFdmFsdWF0ZTtcbiIsImltcG9ydCBhc3NpZ25JbldpdGggZnJvbSAnLi9hc3NpZ25JbldpdGguanMnO1xuaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiYXNlVmFsdWVzIGZyb20gJy4vX2Jhc2VWYWx1ZXMuanMnO1xuaW1wb3J0IGN1c3RvbURlZmF1bHRzQXNzaWduSW4gZnJvbSAnLi9fY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbi5qcyc7XG5pbXBvcnQgZXNjYXBlU3RyaW5nQ2hhciBmcm9tICcuL19lc2NhcGVTdHJpbmdDaGFyLmpzJztcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4vaXNFcnJvci5qcyc7XG5pbXBvcnQgaXNJdGVyYXRlZUNhbGwgZnJvbSAnLi9faXNJdGVyYXRlZUNhbGwuanMnO1xuaW1wb3J0IGtleXMgZnJvbSAnLi9rZXlzLmpzJztcbmltcG9ydCByZUludGVycG9sYXRlIGZyb20gJy4vX3JlSW50ZXJwb2xhdGUuanMnO1xuaW1wb3J0IHRlbXBsYXRlU2V0dGluZ3MgZnJvbSAnLi90ZW1wbGF0ZVNldHRpbmdzLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNvdXJjZS4gKi9cbnZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICByZUVtcHR5U3RyaW5nTWlkZGxlID0gL1xcYihfX3AgXFwrPSkgJycgXFwrL2csXG4gICAgcmVFbXB0eVN0cmluZ1RyYWlsaW5nID0gLyhfX2VcXCguKj9cXCl8XFxiX190XFwpKSBcXCtcXG4nJzsvZztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoXG4gKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhpY2FsLWNvbXBvbmVudHMpLlxuICovXG52YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4vKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG52YXIgcmVOb01hdGNoID0gLygkXikvO1xuXG4vKiogVXNlZCB0byBtYXRjaCB1bmVzY2FwZWQgY2hhcmFjdGVycyBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMuICovXG52YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICogaW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlcnMsIEhUTUwtZXNjYXBlIGludGVycG9sYXRlZCBkYXRhIHByb3BlcnRpZXMgaW5cbiAqIFwiZXNjYXBlXCIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy4gRGF0YVxuICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAqIG9iamVjdCBpcyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZhbHVlcy5cbiAqXG4gKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1zb3VyY2V1cmwpXG4gKiBmb3IgZWFzaWVyIGRlYnVnZ2luZy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZVxuICogW2xvZGFzaCdzIGN1c3RvbSBidWlsZHMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9sb2Rhc2guY29tL2N1c3RvbS1idWlsZHMpLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZVxuICogW0Nocm9tZSdzIGV4dGVuc2lvbnMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9leHRlbnNpb25zL3NhbmRib3hpbmdFdmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNjYXBlXVxuICogIFRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAqICBUaGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXVxuICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gKiBAcGFyYW0ge1JlZ0V4cH0gW29wdGlvbnMuaW50ZXJwb2xhdGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlXVxuICogIFRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0ndGVtcGxhdGVTb3VyY2VzW25dJ11cbiAqICBUaGUgc291cmNlVVJMIG9mIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnKTtcbiAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnZnJlZCcgfSk7XG4gKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gKlxuICogLy8gVXNlIHRoZSBIVE1MIFwiZXNjYXBlXCIgZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJzxzY3JpcHQ+JyB9KTtcbiAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0Jmd0OzwvYj4nXG4gKlxuICogLy8gVXNlIHRoZSBcImV2YWx1YXRlXCIgZGVsaW1pdGVyIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIF8uZm9yRWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+Jyk7XG4gKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICpcbiAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzwlIHByaW50KFwiaGVsbG8gXCIgKyB1c2VyKTsgJT4hJyk7XG4gKiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAqXG4gKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVsaW1pdGVyIGFzIGFuIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gJHsgdXNlciB9IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdwZWJibGVzJyB9KTtcbiAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAqXG4gKiAvLyBVc2UgYmFja3NsYXNoZXMgdG8gdHJlYXQgZGVsaW1pdGVycyBhcyBwbGFpbiB0ZXh0LlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICogY29tcGlsZWQoeyAndmFsdWUnOiAnaWdub3JlZCcgfSk7XG4gKiAvLyA9PiAnPCUtIHZhbHVlICU+J1xuICpcbiAqIC8vIFVzZSB0aGUgYGltcG9ydHNgIG9wdGlvbiB0byBpbXBvcnQgYGpRdWVyeWAgYXMgYGpxYC5cbiAqIHZhciB0ZXh0ID0gJzwlIGpxLmVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsgJT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPic7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICogY29tcGlsZWQoeyAndXNlcnMnOiBbJ2ZyZWQnLCAnYmFybmV5J10gfSk7XG4gKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAqXG4gKiAvLyBVc2UgdGhlIGBzb3VyY2VVUkxgIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tIHNvdXJjZVVSTCBmb3IgdGhlIHRlbXBsYXRlLlxuICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJywgeyAnc291cmNlVVJMJzogJy9iYXNpYy9ncmVldGluZy5qc3QnIH0pO1xuICogY29tcGlsZWQoZGF0YSk7XG4gKiAvLyA9PiBGaW5kIHRoZSBzb3VyY2Ugb2YgXCJncmVldGluZy5qc3RcIiB1bmRlciB0aGUgU291cmNlcyB0YWIgb3IgUmVzb3VyY2VzIHBhbmVsIG9mIHRoZSB3ZWIgaW5zcGVjdG9yLlxuICpcbiAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoaSA8JT0gZGF0YS51c2VyICU+IScsIHsgJ3ZhcmlhYmxlJzogJ2RhdGEnIH0pO1xuICogY29tcGlsZWQuc291cmNlO1xuICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICogLy8gICB2YXIgX190LCBfX3AgPSAnJztcbiAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciApKSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnO1xuICogLy8gICByZXR1cm4gX19wO1xuICogLy8gfVxuICpcbiAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAqIF8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZSA9IC97eyhbXFxzXFxTXSs/KX19L2c7XG4gKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyB7eyB1c2VyIH19IScpO1xuICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gKiAvLyA9PiAnaGVsbG8gbXVzdGFjaGUhJ1xuICpcbiAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMuXG4gKiBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnanN0LmpzJyksICdcXFxuICogICB2YXIgSlNUID0ge1xcXG4gKiAgICAgXCJtYWluXCI6ICcgKyBfLnRlbXBsYXRlKG1haW5UZXh0KS5zb3VyY2UgKyAnXFxcbiAqICAgfTtcXFxuICogJyk7XG4gKi9cbmZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpIHtcbiAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGluZy8pXG4gIC8vIGFuZCBMYXVyYSBEb2t0b3JvdmEncyBkb1QuanMgKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGFkby9kb1QpLlxuICB2YXIgc2V0dGluZ3MgPSB0ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHMuXy50ZW1wbGF0ZVNldHRpbmdzIHx8IHRlbXBsYXRlU2V0dGluZ3M7XG5cbiAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBvcHRpb25zID0gYXNzaWduSW5XaXRoKHt9LCBvcHRpb25zLCBzZXR0aW5ncywgY3VzdG9tRGVmYXVsdHNBc3NpZ25Jbik7XG5cbiAgdmFyIGltcG9ydHMgPSBhc3NpZ25JbldpdGgoe30sIG9wdGlvbnMuaW1wb3J0cywgc2V0dGluZ3MuaW1wb3J0cywgY3VzdG9tRGVmYXVsdHNBc3NpZ25JbiksXG4gICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICBpbXBvcnRzVmFsdWVzID0gYmFzZVZhbHVlcyhpbXBvcnRzLCBpbXBvcnRzS2V5cyk7XG5cbiAgdmFyIGlzRXNjYXBpbmcsXG4gICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBpbnRlcnBvbGF0ZSA9IG9wdGlvbnMuaW50ZXJwb2xhdGUgfHwgcmVOb01hdGNoLFxuICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNoIGRlbGltaXRlci5cbiAgdmFyIHJlRGVsaW1pdGVycyA9IFJlZ0V4cChcbiAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIGludGVycG9sYXRlLnNvdXJjZSArICd8JyArXG4gICAgKGludGVycG9sYXRlID09PSByZUludGVycG9sYXRlID8gcmVFc1RlbXBsYXRlIDogcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAsICdnJyk7XG5cbiAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gIC8vIHdpdGggbG9va3VwIChpbiBjYXNlIG9mIGUuZy4gcHJvdG90eXBlIHBvbGx1dGlvbiksIGFuZCBzdHJpcCBuZXdsaW5lcyBpZiBhbnkuXG4gIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFuZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi5cbiAgdmFyIHNvdXJjZVVSTCA9IGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3NvdXJjZVVSTCcpXG4gICAgPyAoJy8vIyBzb3VyY2VVUkw9JyArXG4gICAgICAgKG9wdGlvbnMuc291cmNlVVJMICsgJycpLnJlcGxhY2UoL1tcXHJcXG5dL2csICcgJykgK1xuICAgICAgICdcXG4nKVxuICAgIDogJyc7XG5cbiAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7XG4gICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7XG5cbiAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICBzb3VyY2UgKz0gc3RyaW5nLnNsaWNlKGluZGV4LCBvZmZzZXQpLnJlcGxhY2UocmVVbmVzY2FwZWRTdHJpbmcsIGVzY2FwZVN0cmluZ0NoYXIpO1xuXG4gICAgLy8gUmVwbGFjZSBkZWxpbWl0ZXJzIHdpdGggc25pcHBldHMuXG4gICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICBpc0VzY2FwaW5nID0gdHJ1ZTtcbiAgICAgIHNvdXJjZSArPSBcIicgK1xcbl9fZShcIiArIGVzY2FwZVZhbHVlICsgXCIpICtcXG4nXCI7XG4gICAgfVxuICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICBpc0V2YWx1YXRpbmcgPSB0cnVlO1xuICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgIH1cbiAgICBpZiAoaW50ZXJwb2xhdGVWYWx1ZSkge1xuICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgfVxuICAgIGluZGV4ID0gb2Zmc2V0ICsgbWF0Y2gubGVuZ3RoO1xuXG4gICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH0pO1xuXG4gIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgLy8gSWYgYHZhcmlhYmxlYCBpcyBub3Qgc3BlY2lmaWVkIHdyYXAgYSB3aXRoLXN0YXRlbWVudCBhcm91bmQgdGhlIGdlbmVyYXRlZFxuICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gIC8vIExpa2Ugd2l0aCBzb3VyY2VVUkwsIHdlIHRha2UgY2FyZSB0byBub3QgY2hlY2sgdGhlIG9wdGlvbidzIHByb3RvdHlwZSxcbiAgLy8gYXMgdGhpcyBjb25maWd1cmF0aW9uIGlzIGEgY29kZSBpbmplY3Rpb24gdmVjdG9yLlxuICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gIGlmICghdmFyaWFibGUpIHtcbiAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XFxuJyArIHNvdXJjZSArICdcXG59XFxuJztcbiAgfVxuICAvLyBDbGVhbnVwIGNvZGUgYnkgc3RyaXBwaW5nIGVtcHR5IHN0cmluZ3MuXG4gIHNvdXJjZSA9IChpc0V2YWx1YXRpbmcgPyBzb3VyY2UucmVwbGFjZShyZUVtcHR5U3RyaW5nTGVhZGluZywgJycpIDogc291cmNlKVxuICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgLnJlcGxhY2UocmVFbXB0eVN0cmluZ1RyYWlsaW5nLCAnJDE7Jyk7XG5cbiAgLy8gRnJhbWUgY29kZSBhcyB0aGUgZnVuY3Rpb24gYm9keS5cbiAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICh2YXJpYWJsZVxuICAgICAgPyAnJ1xuICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICkgK1xuICAgIFwidmFyIF9fdCwgX19wID0gJydcIiArXG4gICAgKGlzRXNjYXBpbmdcbiAgICAgICA/ICcsIF9fZSA9IF8uZXNjYXBlJ1xuICAgICAgIDogJydcbiAgICApICtcbiAgICAoaXNFdmFsdWF0aW5nXG4gICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xcbicgK1xuICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICA6ICc7XFxuJ1xuICAgICkgK1xuICAgIHNvdXJjZSArXG4gICAgJ3JldHVybiBfX3BcXG59JztcblxuICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgIC5hcHBseSh1bmRlZmluZWQsIGltcG9ydHNWYWx1ZXMpO1xuICB9KTtcblxuICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgLy8gdGhlIGBzb3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRlbXBsYXRlcy5cbiAgcmVzdWx0LnNvdXJjZSA9IHNvdXJjZTtcbiAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgIHRocm93IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCB0ZW1wbGF0ZTtcbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICcuL2RlYm91bmNlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRoYXQgb25seSBpbnZva2VzIGBmdW5jYCBhdCBtb3N0IG9uY2UgcGVyXG4gKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICogbWV0aG9kIHRvIGNhbmNlbCBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0b1xuICogaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1bmNgXG4gKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gKiB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQgd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlXG4gKiB0aHJvdHRsZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIHRocm90dGxlZCBmdW5jdGlvbiByZXR1cm4gdGhlXG4gKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gKlxuICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBvcHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpc1xuICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAqXG4gKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAqXG4gKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8udGhyb3R0bGVgIGFuZCBgXy5kZWJvdW5jZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB0aHJvdHRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB0aHJvdHRsZSBpbnZvY2F0aW9ucyB0by5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPXRydWVdXG4gKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgbGVhZGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB0aHJvdHRsZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIEF2b2lkIGV4Y2Vzc2l2ZWx5IHVwZGF0aW5nIHRoZSBwb3NpdGlvbiB3aGlsZSBzY3JvbGxpbmcuXG4gKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gKlxuICogLy8gSW52b2tlIGByZW5ld1Rva2VuYCB3aGVuIHRoZSBjbGljayBldmVudCBpcyBmaXJlZCwgYnV0IG5vdCBtb3JlIHRoYW4gb25jZSBldmVyeSA1IG1pbnV0ZXMuXG4gKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdGhyb3R0bGVkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgdGhyb3R0bGVkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlYWRpbmcgPSB0cnVlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIGxlYWRpbmcgPSAnbGVhZGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5sZWFkaW5nIDogbGVhZGluZztcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG4gIHJldHVybiBkZWJvdW5jZShmdW5jLCB3YWl0LCB7XG4gICAgJ2xlYWRpbmcnOiBsZWFkaW5nLFxuICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAndHJhaWxpbmcnOiB0cmFpbGluZ1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udGFwYCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwicGFzcyB0aHJ1XCIgdmFsdWVzIHJlcGxhY2luZyBpbnRlcm1lZGlhdGVcbiAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFNlcVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGludGVyY2VwdG9yYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXygnICBhYmMgICcpXG4gKiAgLmNoYWluKClcbiAqICAudHJpbSgpXG4gKiAgLnRocnUoZnVuY3Rpb24odmFsdWUpIHtcbiAqICAgIHJldHVybiBbdmFsdWVdO1xuICogIH0pXG4gKiAgLnZhbHVlKCk7XG4gKiAvLyA9PiBbJ2FiYyddXG4gKi9cbmZ1bmN0aW9uIHRocnUodmFsdWUsIGludGVyY2VwdG9yKSB7XG4gIHJldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocnU7XG4iLCJpbXBvcnQgYmFzZVRpbWVzIGZyb20gJy4vX2Jhc2VUaW1lcy5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBJbnZva2VzIHRoZSBpdGVyYXRlZSBgbmAgdGltZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZlxuICogZWFjaCBpbnZvY2F0aW9uLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKGluZGV4KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDMsIFN0cmluZyk7XG4gKiAvLyA9PiBbJzAnLCAnMScsICcyJ11cbiAqXG4gKiAgXy50aW1lcyg0LCBfLmNvbnN0YW50KDApKTtcbiAqIC8vID0+IFswLCAwLCAwLCAwXVxuICovXG5mdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkge1xuICBuID0gdG9JbnRlZ2VyKG4pO1xuICBpZiAobiA8IDEgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGluZGV4ID0gTUFYX0FSUkFZX0xFTkdUSCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKTtcblxuICBpdGVyYXRlZSA9IGNhc3RGdW5jdGlvbihpdGVyYXRlZSk7XG4gIG4gLT0gTUFYX0FSUkFZX0xFTkdUSDtcblxuICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxlbmd0aCwgaXRlcmF0ZWUpO1xuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGltZXM7XG4iLCIvKipcbiAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gKlxuICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gKlxuICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJUb0l0ZXJhdG9yO1xuIiwiaW1wb3J0IExhenlXcmFwcGVyIGZyb20gJy4vX0xhenlXcmFwcGVyLmpzJztcbmltcG9ydCBhcnJheVB1c2ggZnJvbSAnLi9fYXJyYXlQdXNoLmpzJztcbmltcG9ydCBhcnJheVJlZHVjZSBmcm9tICcuL19hcnJheVJlZHVjZS5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHdyYXBwZXJWYWx1ZWAgd2hpY2ggcmV0dXJucyB0aGUgcmVzdWx0IG9mXG4gKiBwZXJmb3JtaW5nIGEgc2VxdWVuY2Ugb2YgYWN0aW9ucyBvbiB0aGUgdW53cmFwcGVkIGB2YWx1ZWAsIHdoZXJlIGVhY2hcbiAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBhY3Rpb25zIEFjdGlvbnMgdG8gcGVyZm9ybSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VXcmFwcGVyVmFsdWUodmFsdWUsIGFjdGlvbnMpIHtcbiAgdmFyIHJlc3VsdCA9IHZhbHVlO1xuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXN1bHQgPSByZXN1bHQudmFsdWUoKTtcbiAgfVxuICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICByZXR1cm4gYWN0aW9uLmZ1bmMuYXBwbHkoYWN0aW9uLnRoaXNBcmcsIGFycmF5UHVzaChbcmVzdWx0XSwgYWN0aW9uLmFyZ3MpKTtcbiAgfSwgcmVzdWx0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVdyYXBwZXJWYWx1ZTtcbiIsImltcG9ydCBiYXNlV3JhcHBlclZhbHVlIGZyb20gJy4vX2Jhc2VXcmFwcGVyVmFsdWUuanMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSB0byByZXNvbHZlIHRoZSB1bndyYXBwZWQgdmFsdWUuXG4gKlxuICogQG5hbWUgdmFsdWVcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2ZcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB1bndyYXBwZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8oWzEsIDIsIDNdKS52YWx1ZSgpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHtcbiAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdyYXBwZXJWYWx1ZTtcbiIsImltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgYSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2VcbiAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbG93ZXIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTG93ZXIoJy0tRm9vLUJhci0tJyk7XG4gKiAvLyA9PiAnLS1mb28tYmFyLS0nXG4gKlxuICogXy50b0xvd2VyKCdmb29CYXInKTtcbiAqIC8vID0+ICdmb29iYXInXG4gKlxuICogXy50b0xvd2VyKCdfX0ZPT19CQVJfXycpO1xuICogLy8gPT4gJ19fZm9vX2Jhcl9fJ1xuICovXG5mdW5jdGlvbiB0b0xvd2VyKHZhbHVlKSB7XG4gIHJldHVybiB0b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Mb3dlcjtcbiIsImltcG9ydCBhcnJheU1hcCBmcm9tICcuL19hcnJheU1hcC5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzU3ltYm9sIGZyb20gJy4vaXNTeW1ib2wuanMnO1xuaW1wb3J0IHN0cmluZ1RvUGF0aCBmcm9tICcuL19zdHJpbmdUb1BhdGguanMnO1xuaW1wb3J0IHRvS2V5IGZyb20gJy4vX3RvS2V5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xuICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gKlxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxuICovXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCB0b0tleSk7XG4gIH1cbiAgcmV0dXJuIGlzU3ltYm9sKHZhbHVlKSA/IFt2YWx1ZV0gOiBjb3B5QXJyYXkoc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1BhdGg7XG4iLCJpbXBvcnQgYmFzZUNsYW1wIGZyb20gJy4vX2Jhc2VDbGFtcC5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNhZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZFxuICogcmVwcmVzZW50ZWQgY29ycmVjdGx5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TYWZlSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9TYWZlSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvU2FmZUludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MVxuICpcbiAqIF8udG9TYWZlSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvU2FmZUludGVnZXIodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpXG4gICAgOiAodmFsdWUgPT09IDAgPyB2YWx1ZSA6IDApO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1NhZmVJbnRlZ2VyO1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICogW1N0cmluZyN0b1VwcGVyQ2FzZV0oaHR0cHM6Ly9tZG4uaW8vdG9VcHBlckNhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9VcHBlcignLS1mb28tYmFyLS0nKTtcbiAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAqXG4gKiBfLnRvVXBwZXIoJ2Zvb0JhcicpO1xuICogLy8gPT4gJ0ZPT0JBUidcbiAqXG4gKiBfLnRvVXBwZXIoJ19fZm9vX2Jhcl9fJyk7XG4gKiAvLyA9PiAnX19GT09fQkFSX18nXG4gKi9cbmZ1bmN0aW9uIHRvVXBwZXIodmFsdWUpIHtcbiAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b1VwcGVyO1xuIiwiaW1wb3J0IGFycmF5RWFjaCBmcm9tICcuL19hcnJheUVhY2guanMnO1xuaW1wb3J0IGJhc2VDcmVhdGUgZnJvbSAnLi9fYmFzZUNyZWF0ZS5qcyc7XG5pbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBnZXRQcm90b3R5cGUgZnJvbSAnLi9fZ2V0UHJvdG90eXBlLmpzJztcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheS5qcyc7XG5pbXBvcnQgaXNCdWZmZXIgZnJvbSAnLi9pc0J1ZmZlci5qcyc7XG5pbXBvcnQgaXNGdW5jdGlvbiBmcm9tICcuL2lzRnVuY3Rpb24uanMnO1xuaW1wb3J0IGlzT2JqZWN0IGZyb20gJy4vaXNPYmplY3QuanMnO1xuaW1wb3J0IGlzVHlwZWRBcnJheSBmcm9tICcuL2lzVHlwZWRBcnJheS5qcyc7XG5cbi8qKlxuICogQW4gYWx0ZXJuYXRpdmUgdG8gYF8ucmVkdWNlYDsgdGhpcyBtZXRob2QgdHJhbnNmb3JtcyBgb2JqZWN0YCB0byBhIG5ld1xuICogYGFjY3VtdWxhdG9yYCBvYmplY3Qgd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGVhY2ggb2YgaXRzIG93blxuICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gKiBwb3RlbnRpYWxseSBtdXRhdGluZyB0aGUgYGFjY3VtdWxhdG9yYCBvYmplY3QuIElmIGBhY2N1bXVsYXRvcmAgaXMgbm90XG4gKiBwcm92aWRlZCwgYSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgYFtbUHJvdG90eXBlXV1gIHdpbGwgYmUgdXNlZC4gVGhlXG4gKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmFuc2Zvcm0oWzIsIDMsIDRdLCBmdW5jdGlvbihyZXN1bHQsIG4pIHtcbiAqICAgcmVzdWx0LnB1c2gobiAqPSBuKTtcbiAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gKiB9LCBbXSk7XG4gKiAvLyA9PiBbNCwgOV1cbiAqXG4gKiBfLnRyYW5zZm9ybSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gKiAgIChyZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7XG4gKiB9LCB7fSk7XG4gKiAvLyA9PiB7ICcxJzogWydhJywgJ2MnXSwgJzInOiBbJ2InXSB9XG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBpc0Fyckxpa2UgPSBpc0FyciB8fCBpc0J1ZmZlcihvYmplY3QpIHx8IGlzVHlwZWRBcnJheShvYmplY3QpO1xuXG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCA0KTtcbiAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICB2YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7XG4gICAgaWYgKGlzQXJyTGlrZSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICB9XG4gIH1cbiAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTtcbiAgfSk7XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNmb3JtO1xuIiwiaW1wb3J0IGJhc2VJbmRleE9mIGZyb20gJy4vX2Jhc2VJbmRleE9mLmpzJztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHN0cmluZyBzeW1ib2xcbiAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3RyaW5nIHN5bWJvbHMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAqL1xuZnVuY3Rpb24gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gIHZhciBpbmRleCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIGJhc2VJbmRleE9mKGNoclN5bWJvbHMsIHN0clN5bWJvbHNbaW5kZXhdLCAwKSA+IC0xKSB7fVxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNoYXJzRW5kSW5kZXg7XG4iLCJpbXBvcnQgYmFzZUluZGV4T2YgZnJvbSAnLi9fYmFzZUluZGV4T2YuanMnO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1TdGFydGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgc3RyaW5nIHN5bWJvbFxuICogdGhhdCBpcyBub3QgZm91bmQgaW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtBcnJheX0gY2hyU3ltYm9scyBUaGUgY2hhcmFjdGVyIHN5bWJvbHMgdG8gZmluZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAqL1xuZnVuY3Rpb24gY2hhcnNTdGFydEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiBiYXNlSW5kZXhPZihjaHJTeW1ib2xzLCBzdHJTeW1ib2xzW2luZGV4XSwgMCkgPiAtMSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjaGFyc1N0YXJ0SW5kZXg7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgY2FzdFNsaWNlIGZyb20gJy4vX2Nhc3RTbGljZS5qcyc7XG5pbXBvcnQgY2hhcnNFbmRJbmRleCBmcm9tICcuL19jaGFyc0VuZEluZGV4LmpzJztcbmltcG9ydCBjaGFyc1N0YXJ0SW5kZXggZnJvbSAnLi9fY2hhcnNTdGFydEluZGV4LmpzJztcbmltcG9ydCBzdHJpbmdUb0FycmF5IGZyb20gJy4vX3N0cmluZ1RvQXJyYXkuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJpbSgnICBhYmMgICcpO1xuICogLy8gPT4gJ2FiYydcbiAqXG4gKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICogLy8gPT4gJ2FiYydcbiAqXG4gKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICogLy8gPT4gWydmb28nLCAnYmFyJ11cbiAqL1xuZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW0sICcnKTtcbiAgfVxuICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgY2hyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoY2hhcnMpLFxuICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scyksXG4gICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpICsgMTtcblxuICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0LCBlbmQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGNoYXJzRW5kSW5kZXggZnJvbSAnLi9fY2hhcnNFbmRJbmRleC5qcyc7XG5pbXBvcnQgc3RyaW5nVG9BcnJheSBmcm9tICcuL19zdHJpbmdUb0FycmF5LmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1FbmQgPSAvXFxzKyQvO1xuXG4vKipcbiAqIFJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJpbUVuZCgnICBhYmMgICcpO1xuICogLy8gPT4gJyAgYWJjJ1xuICpcbiAqIF8udHJpbUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gKiAvLyA9PiAnLV8tYWJjJ1xuICovXG5mdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbUVuZCwgJycpO1xuICB9XG4gIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICBlbmQgPSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7XG5cbiAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltRW5kO1xuIiwiaW1wb3J0IGJhc2VUb1N0cmluZyBmcm9tICcuL19iYXNlVG9TdHJpbmcuanMnO1xuaW1wb3J0IGNhc3RTbGljZSBmcm9tICcuL19jYXN0U2xpY2UuanMnO1xuaW1wb3J0IGNoYXJzU3RhcnRJbmRleCBmcm9tICcuL19jaGFyc1N0YXJ0SW5kZXguanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKipcbiAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJhY3RlcnMgdG8gdHJpbS5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50cmltU3RhcnQoJyAgYWJjICAnKTtcbiAqIC8vID0+ICdhYmMgICdcbiAqXG4gKiBfLnRyaW1TdGFydCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gKiAvLyA9PiAnYWJjLV8tJ1xuICovXG5mdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKTtcbiAgfVxuICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpO1xuXG4gIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgc3RhcnQpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmltU3RhcnQ7XG4iLCJpbXBvcnQgYmFzZVRvU3RyaW5nIGZyb20gJy4vX2Jhc2VUb1N0cmluZy5qcyc7XG5pbXBvcnQgY2FzdFNsaWNlIGZyb20gJy4vX2Nhc3RTbGljZS5qcyc7XG5pbXBvcnQgaGFzVW5pY29kZSBmcm9tICcuL19oYXNVbmljb2RlLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc1JlZ0V4cCBmcm9tICcuL2lzUmVnRXhwLmpzJztcbmltcG9ydCBzdHJpbmdTaXplIGZyb20gJy4vX3N0cmluZ1NpemUuanMnO1xuaW1wb3J0IHN0cmluZ1RvQXJyYXkgZnJvbSAnLi9fc3RyaW5nVG9BcnJheS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b1N0cmluZyBmcm9tICcuL3RvU3RyaW5nLmpzJztcblxuLyoqIFVzZWQgYXMgZGVmYXVsdCBvcHRpb25zIGZvciBgXy50cnVuY2F0ZWAuICovXG52YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCxcbiAgICBERUZBVUxUX1RSVU5DX09NSVNTSU9OID0gJy4uLic7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlRmxhZ3MgPSAvXFx3KiQvO1xuXG4vKipcbiAqIFRydW5jYXRlcyBgc3RyaW5nYCBpZiBpdCdzIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gKiBUaGUgbGFzdCBjaGFyYWN0ZXJzIG9mIHRoZSB0cnVuY2F0ZWQgc3RyaW5nIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBvbWlzc2lvblxuICogc3RyaW5nIHdoaWNoIGRlZmF1bHRzIHRvIFwiLi4uXCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJ1bmNhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0cmluZyBsZW5ndGguXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbb3B0aW9ucy5zZXBhcmF0b3JdIFRoZSBzZXBhcmF0b3IgcGF0dGVybiB0byB0cnVuY2F0ZSB0by5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRydW5jYXRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gKlxuICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAqICAgJ2xlbmd0aCc6IDI0LFxuICogICAnc2VwYXJhdG9yJzogJyAnXG4gKiB9KTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gKiAgICdsZW5ndGgnOiAyNCxcbiAqICAgJ3NlcGFyYXRvcic6IC8sPyArL1xuICogfSk7XG4gKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gKiB9KTtcbiAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcgWy4uLl0nXG4gKi9cbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgb3B0aW9ucykge1xuICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsXG4gICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgdmFyIHNlcGFyYXRvciA9ICdzZXBhcmF0b3InIGluIG9wdGlvbnMgPyBvcHRpb25zLnNlcGFyYXRvciA6IHNlcGFyYXRvcjtcbiAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gdG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKSA6IGxlbmd0aDtcbiAgICBvbWlzc2lvbiA9ICdvbWlzc2lvbicgaW4gb3B0aW9ucyA/IGJhc2VUb1N0cmluZyhvcHRpb25zLm9taXNzaW9uKSA6IG9taXNzaW9uO1xuICB9XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmIChoYXNVbmljb2RlKHN0cmluZykpIHtcbiAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgICBzdHJMZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDtcbiAgfVxuICBpZiAobGVuZ3RoID49IHN0ckxlbmd0aCkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgdmFyIGVuZCA9IGxlbmd0aCAtIHN0cmluZ1NpemUob21pc3Npb24pO1xuICBpZiAoZW5kIDwgMSkge1xuICAgIHJldHVybiBvbWlzc2lvbjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gc3RyU3ltYm9sc1xuICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDAsIGVuZCkuam9pbignJylcbiAgICA6IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuXG4gIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgfVxuICBpZiAoc3RyU3ltYm9scykge1xuICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7XG4gIH1cbiAgaWYgKGlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICBpZiAoc3RyaW5nLnNsaWNlKGVuZCkuc2VhcmNoKHNlcGFyYXRvcikpIHtcbiAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICBzdWJzdHJpbmcgPSByZXN1bHQ7XG5cbiAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkge1xuICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgdG9TdHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpICsgJ2cnKTtcbiAgICAgIH1cbiAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXggPSAwO1xuICAgICAgd2hpbGUgKChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpKSB7XG4gICAgICAgIHZhciBuZXdFbmQgPSBtYXRjaC5pbmRleDtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBuZXdFbmQgPT09IHVuZGVmaW5lZCA/IGVuZCA6IG5ld0VuZCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKGJhc2VUb1N0cmluZyhzZXBhcmF0b3IpLCBlbmQpICE9IGVuZCkge1xuICAgIHZhciBpbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRydW5jYXRlO1xuIiwiaW1wb3J0IGFyeSBmcm9tICcuL2FyeS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB1cCB0byBvbmUgYXJndW1lbnQsIGlnbm9yaW5nIGFueVxuICogYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy51bmFyeShwYXJzZUludCkpO1xuICogLy8gPT4gWzYsIDgsIDEwXVxuICovXG5mdW5jdGlvbiB1bmFyeShmdW5jKSB7XG4gIHJldHVybiBhcnkoZnVuYywgMSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuYXJ5O1xuIiwiaW1wb3J0IGJhc2VQcm9wZXJ0eU9mIGZyb20gJy4vX2Jhc2VQcm9wZXJ0eU9mLmpzJztcblxuLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi9cbnZhciBodG1sVW5lc2NhcGVzID0ge1xuICAnJmFtcDsnOiAnJicsXG4gICcmbHQ7JzogJzwnLFxuICAnJmd0Oyc6ICc+JyxcbiAgJyZxdW90Oyc6ICdcIicsXG4gICcmIzM5Oyc6IFwiJ1wiXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBjaGFyYWN0ZXIuXG4gKi9cbnZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFzZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7XG5cbmV4cG9ydCBkZWZhdWx0IHVuZXNjYXBlSHRtbENoYXI7XG4iLCJpbXBvcnQgdG9TdHJpbmcgZnJvbSAnLi90b1N0cmluZy5qcyc7XG5pbXBvcnQgdW5lc2NhcGVIdG1sQ2hhciBmcm9tICcuL191bmVzY2FwZUh0bWxDaGFyLmpzJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlRXNjYXBlZEh0bWwgPSAvJig/OmFtcHxsdHxndHxxdW90fCMzOSk7L2csXG4gICAgcmVIYXNFc2NhcGVkSHRtbCA9IFJlZ0V4cChyZUVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbi8qKlxuICogVGhlIGludmVyc2Ugb2YgYF8uZXNjYXBlYDsgdGhpcyBtZXRob2QgY29udmVydHMgdGhlIEhUTUwgZW50aXRpZXNcbiAqIGAmYW1wO2AsIGAmbHQ7YCwgYCZndDtgLCBgJnF1b3Q7YCwgYW5kIGAmIzM5O2AgaW4gYHN0cmluZ2AgdG9cbiAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAqXG4gKiAqKk5vdGU6KiogTm8gb3RoZXIgSFRNTCBlbnRpdGllcyBhcmUgdW5lc2NhcGVkLiBUbyB1bmVzY2FwZSBhZGRpdGlvbmFsXG4gKiBIVE1MIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNi4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycpO1xuICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICovXG5mdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNFc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpXG4gICAgPyBzdHJpbmcucmVwbGFjZShyZUVzY2FwZWRIdG1sLCB1bmVzY2FwZUh0bWxDaGFyKVxuICAgIDogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bmVzY2FwZTtcbiIsImltcG9ydCBTZXQgZnJvbSAnLi9fU2V0LmpzJztcbmltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlU2V0O1xuIiwiaW1wb3J0IFNldENhY2hlIGZyb20gJy4vX1NldENhY2hlLmpzJztcbmltcG9ydCBhcnJheUluY2x1ZGVzIGZyb20gJy4vX2FycmF5SW5jbHVkZXMuanMnO1xuaW1wb3J0IGFycmF5SW5jbHVkZXNXaXRoIGZyb20gJy4vX2FycmF5SW5jbHVkZXNXaXRoLmpzJztcbmltcG9ydCBjYWNoZUhhcyBmcm9tICcuL19jYWNoZUhhcy5qcyc7XG5pbXBvcnQgY3JlYXRlU2V0IGZyb20gJy4vX2NyZWF0ZVNldC5qcyc7XG5pbXBvcnQgc2V0VG9BcnJheSBmcm9tICcuL19zZXRUb0FycmF5LmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICBzZWVuID0gcmVzdWx0O1xuXG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICB9XG4gIGVsc2UgaWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7XG4gICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgaWYgKHNldCkge1xuICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTtcbiAgICB9XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gIH1cbiAgb3V0ZXI6XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICBpZiAoaXNDb21tb24gJiYgY29tcHV0ZWQgPT09IGNvbXB1dGVkKSB7XG4gICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7XG4gICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFpbmNsdWRlcyhzZWVuLCBjb21wdXRlZCwgY29tcGFyYXRvcikpIHtcbiAgICAgIGlmIChzZWVuICE9PSByZXN1bHQpIHtcbiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVuaXE7XG4iLCJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAqIC8vID0+IFsyLCAxXVxuICovXG52YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbjtcbiIsImltcG9ydCBiYXNlRmxhdHRlbiBmcm9tICcuL19iYXNlRmxhdHRlbi5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gKiB3aGljaCB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbSB0aGUgZmlyc3RcbiAqIGFycmF5IGluIHdoaWNoIHRoZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTtcbiAqIC8vID0+IFsyLjEsIDEuMl1cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8udW5pb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAqIC8vID0+IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9XVxuICovXG52YXIgdW5pb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gIGlmIChpc0FycmF5TGlrZU9iamVjdChpdGVyYXRlZSkpIHtcbiAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHVuaW9uQnk7XG4iLCJpbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCBiYXNlVW5pcSBmcm9tICcuL19iYXNlVW5pcS5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFJlc3VsdCB2YWx1ZXMgYXJlIGNob3NlbiBmcm9tXG4gKiB0aGUgZmlyc3QgYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICpcbiAqIF8udW5pb25XaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICovXG52YXIgdW5pb25XaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB1bmlvbldpdGg7XG4iLCJpbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkdXBsaWNhdGUtZnJlZSB2ZXJzaW9uIG9mIGFuIGFycmF5LCB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucywgaW4gd2hpY2ggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIGVsZW1lbnRcbiAqIGlzIGtlcHQuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXJcbiAqIGluIHRoZSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcShbMiwgMSwgMl0pO1xuICogLy8gPT4gWzIsIDFdXG4gKi9cbmZ1bmN0aW9uIHVuaXEoYXJyYXkpIHtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXkpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXE7XG4iLCJpbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVVuaXEgZnJvbSAnLi9fYmFzZVVuaXEuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoXG4gKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICogb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OlxuICogKHZhbHVlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udW5pcUJ5KFsyLjEsIDEuMiwgMi4zXSwgTWF0aC5mbG9vcik7XG4gKiAvLyA9PiBbMi4xLCAxLjJdXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLnVuaXFCeShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAqL1xuZnVuY3Rpb24gdW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkge1xuICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5pcUJ5O1xuIiwiaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAqIGRldGVybWluZWQgYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LlRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gKlxuICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XVxuICovXG5mdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5LCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpIDogW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXFXaXRoO1xuIiwiaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG4vKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzLiAqL1xudmFyIGlkQ291bnRlciA9IDA7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuaXF1ZSBJRC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51bmlxdWVJZCgnY29udGFjdF8nKTtcbiAqIC8vID0+ICdjb250YWN0XzEwNCdcbiAqXG4gKiBfLnVuaXF1ZUlkKCk7XG4gKiAvLyA9PiAnMTA1J1xuICovXG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgdmFyIGlkID0gKytpZENvdW50ZXI7XG4gIHJldHVybiB0b1N0cmluZyhwcmVmaXgpICsgaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuaXF1ZUlkO1xuIiwiaW1wb3J0IGJhc2VVbnNldCBmcm9tICcuL19iYXNlVW5zZXQuanMnO1xuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHByb3BlcnR5IGF0IGBwYXRoYCBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07XG4gKiBfLnVuc2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gKlxuICogXy51bnNldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTtcbiAqL1xuZnVuY3Rpb24gdW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHRydWUgOiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdW5zZXQ7XG4iLCJpbXBvcnQgYXJyYXlGaWx0ZXIgZnJvbSAnLi9fYXJyYXlGaWx0ZXIuanMnO1xuaW1wb3J0IGFycmF5TWFwIGZyb20gJy4vX2FycmF5TWFwLmpzJztcbmltcG9ydCBiYXNlUHJvcGVydHkgZnJvbSAnLi9fYmFzZVByb3BlcnR5LmpzJztcbmltcG9ydCBiYXNlVGltZXMgZnJvbSAnLi9fYmFzZVRpbWVzLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFuIGFycmF5IG9mIGdyb3VwZWRcbiAqIGVsZW1lbnRzIGFuZCBjcmVhdGVzIGFuIGFycmF5IHJlZ3JvdXBpbmcgdGhlIGVsZW1lbnRzIHRvIHRoZWlyIHByZS16aXBcbiAqIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjIuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgemlwcGVkID0gXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICpcbiAqIF8udW56aXAoemlwcGVkKTtcbiAqIC8vID0+IFtbJ2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV1dXG4gKi9cbmZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIGxlbmd0aCA9IDA7XG4gIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSkge1xuICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGdyb3VwLmxlbmd0aCwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBiYXNlVGltZXMobGVuZ3RoLCBmdW5jdGlvbihpbmRleCkge1xuICAgIHJldHVybiBhcnJheU1hcChhcnJheSwgYmFzZVByb3BlcnR5KGluZGV4KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1bnppcDtcbiIsImltcG9ydCBhcHBseSBmcm9tICcuL19hcHBseS5qcyc7XG5pbXBvcnQgYXJyYXlNYXAgZnJvbSAnLi9fYXJyYXlNYXAuanMnO1xuaW1wb3J0IHVuemlwIGZyb20gJy4vdW56aXAuanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gKiBob3cgcmVncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy44LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICogIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZWdyb3VwZWQgZWxlbWVudHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB6aXBwZWQgPSBfLnppcChbMSwgMl0sIFsxMCwgMjBdLCBbMTAwLCAyMDBdKTtcbiAqIC8vID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV1cbiAqXG4gKiBfLnVuemlwV2l0aCh6aXBwZWQsIF8uYWRkKTtcbiAqIC8vID0+IFszLCAzMCwgMzAwXVxuICovXG5mdW5jdGlvbiB1bnppcFdpdGgoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTtcbiAgaWYgKGl0ZXJhdGVlID09IG51bGwpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiBhcnJheU1hcChyZXN1bHQsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgcmV0dXJuIGFwcGx5KGl0ZXJhdGVlLCB1bmRlZmluZWQsIGdyb3VwKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVuemlwV2l0aDtcbiIsImltcG9ydCBiYXNlR2V0IGZyb20gJy4vX2Jhc2VHZXQuanMnO1xuaW1wb3J0IGJhc2VTZXQgZnJvbSAnLi9fYmFzZVNldC5qcyc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udXBkYXRlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgcGF0aCBjcmVhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7XG4gIHJldHVybiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBjdXN0b21pemVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYmFzZVVwZGF0ZTtcbiIsImltcG9ydCBiYXNlVXBkYXRlIGZyb20gJy4vX2Jhc2VVcGRhdGUuanMnO1xuaW1wb3J0IGNhc3RGdW5jdGlvbiBmcm9tICcuL19jYXN0RnVuY3Rpb24uanMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc2V0YCBleGNlcHQgdGhhdCBhY2NlcHRzIGB1cGRhdGVyYCB0byBwcm9kdWNlIHRoZVxuICogdmFsdWUgdG8gc2V0LiBVc2UgYF8udXBkYXRlV2l0aGAgdG8gY3VzdG9taXplIGBwYXRoYCBjcmVhdGlvbi4gVGhlIGB1cGRhdGVyYFxuICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8udXBkYXRlKG9iamVjdCwgJ2FbMF0uYi5jJywgZnVuY3Rpb24obikgeyByZXR1cm4gbiAqIG47IH0pO1xuICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAqIC8vID0+IDlcbiAqXG4gKiBfLnVwZGF0ZShvYmplY3QsICd4WzBdLnkueicsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPyBuICsgMSA6IDA7IH0pO1xuICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAqIC8vID0+IDBcbiAqL1xuZnVuY3Rpb24gdXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlcikge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXBkYXRlO1xuIiwiaW1wb3J0IGJhc2VVcGRhdGUgZnJvbSAnLi9fYmFzZVVwZGF0ZS5qcyc7XG5pbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gKiBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG9iamVjdHMgb2YgYHBhdGhgLiAgSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGBcbiAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuNi4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHVwZGF0ZXIgVGhlIGZ1bmN0aW9uIHRvIHByb2R1Y2UgdGhlIHVwZGF0ZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge307XG4gKlxuICogXy51cGRhdGVXaXRoKG9iamVjdCwgJ1swXVsxXScsIF8uY29uc3RhbnQoJ2EnKSwgT2JqZWN0KTtcbiAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfVxuICovXG5mdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlciksIGN1c3RvbWl6ZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB1cGRhdGVXaXRoO1xuIiwiaW1wb3J0IGNyZWF0ZUNvbXBvdW5kZXIgZnJvbSAnLi9fY3JlYXRlQ29tcG91bmRlci5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gdXBwZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnLS1mb28tYmFyJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnZm9vQmFyJyk7XG4gKiAvLyA9PiAnRk9PIEJBUidcbiAqXG4gKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTtcbiAqIC8vID0+ICdGT08gQkFSJ1xuICovXG52YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvVXBwZXJDYXNlKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXBwZXJDYXNlO1xuIiwiaW1wb3J0IGJhc2VWYWx1ZXMgZnJvbSAnLi9fYmFzZVZhbHVlcy5qcyc7XG5pbXBvcnQga2V5c0luIGZyb20gJy4va2V5c0luLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eVxuICogdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlc0luKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDIsIDNdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKi9cbmZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbHVlc0luO1xuIiwiaW1wb3J0IGJhc2VEaWZmZXJlbmNlIGZyb20gJy4vX2Jhc2VEaWZmZXJlbmNlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgaXNBcnJheUxpa2VPYmplY3QgZnJvbSAnLi9pc0FycmF5TGlrZU9iamVjdC5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBleGNsdWRpbmcgYWxsIGdpdmVuIHZhbHVlcyB1c2luZ1xuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAqXG4gKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLip9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvclxuICogQGV4YW1wbGVcbiAqXG4gKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTtcbiAqIC8vID0+IFszXVxuICovXG52YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIHZhbHVlcylcbiAgICA6IFtdO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhvdXQ7XG4iLCJpbXBvcnQgY2FzdEZ1bmN0aW9uIGZyb20gJy4vX2Nhc3RGdW5jdGlvbi5qcyc7XG5pbXBvcnQgcGFydGlhbCBmcm9tICcuL3BhcnRpYWwuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdFxuICogYXJndW1lbnQuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZnVuY3Rpb24gYXJlIGFwcGVuZGVkXG4gKiB0byB0aG9zZSBwcm92aWRlZCB0byB0aGUgYHdyYXBwZXJgLiBUaGUgd3JhcHBlciBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYFxuICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbd3JhcHBlcj1pZGVudGl0eV0gVGhlIHdyYXBwZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHAgPSBfLndyYXAoXy5lc2NhcGUsIGZ1bmN0aW9uKGZ1bmMsIHRleHQpIHtcbiAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JztcbiAqIH0pO1xuICpcbiAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiAnPHA+ZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzPC9wPidcbiAqL1xuZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikge1xuICByZXR1cm4gcGFydGlhbChjYXN0RnVuY3Rpb24od3JhcHBlciksIHZhbHVlKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd3JhcDtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgTG9kYXNoV3JhcHBlciBmcm9tICcuL19Mb2Rhc2hXcmFwcGVyLmpzJztcbmltcG9ydCBiYXNlQXQgZnJvbSAnLi9fYmFzZUF0LmpzJztcbmltcG9ydCBmbGF0UmVzdCBmcm9tICcuL19mbGF0UmVzdC5qcyc7XG5pbXBvcnQgaXNJbmRleCBmcm9tICcuL19pc0luZGV4LmpzJztcbmltcG9ydCB0aHJ1IGZyb20gJy4vdGhydS5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5hdGAuXG4gKlxuICogQG5hbWUgYXRcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfSwgNF0gfTtcbiAqXG4gKiBfKG9iamVjdCkuYXQoWydhWzBdLmIuYycsICdhWzFdJ10pLnZhbHVlKCk7XG4gKiAvLyA9PiBbMywgNF1cbiAqL1xudmFyIHdyYXBwZXJBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKSB7XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGgsXG4gICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCxcbiAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgIGludGVyY2VwdG9yID0gZnVuY3Rpb24ob2JqZWN0KSB7IHJldHVybiBiYXNlQXQob2JqZWN0LCBwYXRocyk7IH07XG5cbiAgaWYgKGxlbmd0aCA+IDEgfHwgdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGggfHxcbiAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7XG4gICAgcmV0dXJuIHRoaXMudGhydShpbnRlcmNlcHRvcik7XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7XG4gIHZhbHVlLl9fYWN0aW9uc19fLnB1c2goe1xuICAgICdmdW5jJzogdGhydSxcbiAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sXG4gICAgJ3RoaXNBcmcnOiB1bmRlZmluZWRcbiAgfSk7XG4gIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBpZiAobGVuZ3RoICYmICFhcnJheS5sZW5ndGgpIHtcbiAgICAgIGFycmF5LnB1c2godW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9KTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQXQ7XG4iLCJpbXBvcnQgY2hhaW4gZnJvbSAnLi9jaGFpbi5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2Ugd2l0aCBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuXG4gKlxuICogQG5hbWUgY2hhaW5cbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH1cbiAqIF07XG4gKlxuICogLy8gQSBzZXF1ZW5jZSB3aXRob3V0IGV4cGxpY2l0IGNoYWluaW5nLlxuICogXyh1c2VycykuaGVhZCgpO1xuICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfVxuICpcbiAqIC8vIEEgc2VxdWVuY2Ugd2l0aCBleHBsaWNpdCBjaGFpbmluZy5cbiAqIF8odXNlcnMpXG4gKiAgIC5jaGFpbigpXG4gKiAgIC5oZWFkKClcbiAqICAgLnBpY2soJ3VzZXInKVxuICogICAudmFsdWUoKTtcbiAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JyB9XG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDaGFpbigpIHtcbiAgcmV0dXJuIGNoYWluKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyQ2hhaW47XG4iLCJpbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgcmV2ZXJzZSBmcm9tICcuL3JldmVyc2UuanMnO1xuaW1wb3J0IHRocnUgZnJvbSAnLi90aHJ1LmpzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICpcbiAqIEBuYW1lIHJldmVyc2VcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXyhhcnJheSkucmV2ZXJzZSgpLnZhbHVlKClcbiAqIC8vID0+IFszLCAyLCAxXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFszLCAyLCAxXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICB2YXIgd3JhcHBlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICB9XG4gICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgfVxuICByZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpO1xufVxuXG5leHBvcnQgZGVmYXVsdCB3cmFwcGVyUmV2ZXJzZTtcbiIsImltcG9ydCBiYXNlRGlmZmVyZW5jZSBmcm9tICcuL19iYXNlRGlmZmVyZW5jZS5qcyc7XG5pbXBvcnQgYmFzZUZsYXR0ZW4gZnJvbSAnLi9fYmFzZUZsYXR0ZW4uanMnO1xuaW1wb3J0IGJhc2VVbmlxIGZyb20gJy4vX2Jhc2VVbmlxLmpzJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ueG9yYCwgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlWG9yKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gIGlmIChsZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VVbmlxKGFycmF5c1swXSkgOiBbXTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgYXJyYXkgPSBhcnJheXNbaW5kZXhdLFxuICAgICAgICBvdGhJbmRleCA9IC0xO1xuXG4gICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChvdGhJbmRleCAhPSBpbmRleCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYmFzZURpZmZlcmVuY2UocmVzdWx0W2luZGV4XSB8fCBhcnJheSwgYXJyYXlzW290aEluZGV4XSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBiYXNlWG9yO1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBpcyB0aGVcbiAqIFtzeW1tZXRyaWMgZGlmZmVyZW5jZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltbWV0cmljX2RpZmZlcmVuY2UpXG4gKiBvZiB0aGUgZ2l2ZW4gYXJyYXlzLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlclxuICogdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ud2l0aG91dFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnhvcihbMiwgMV0sIFsyLCAzXSk7XG4gKiAvLyA9PiBbMSwgM11cbiAqL1xudmFyIHhvciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgeG9yO1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlSXRlcmF0ZWUgZnJvbSAnLi9fYmFzZUl0ZXJhdGVlLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieVxuICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZFxuICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAqIGFyZ3VtZW50OiAodmFsdWUpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICogLy8gPT4gWzEuMiwgMy40XVxuICpcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy54b3JCeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAqIC8vID0+IFt7ICd4JzogMiB9XVxuICovXG52YXIgeG9yQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMikpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHhvckJ5O1xuIiwiaW1wb3J0IGFycmF5RmlsdGVyIGZyb20gJy4vX2FycmF5RmlsdGVyLmpzJztcbmltcG9ydCBiYXNlUmVzdCBmcm9tICcuL19iYXNlUmVzdC5qcyc7XG5pbXBvcnQgYmFzZVhvciBmcm9tICcuL19iYXNlWG9yLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBsYXN0IGZyb20gJy4vbGFzdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoIGlzXG4gKiBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBjb21wYXJhdG9yIGlzIGludm9rZWRcbiAqIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAxLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAqXG4gKiBfLnhvcldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICovXG52YXIgeG9yV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgY29tcGFyYXRvciA9IGxhc3QoYXJyYXlzKTtcbiAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlzQXJyYXlMaWtlT2JqZWN0KSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB4b3JXaXRoO1xuIiwiaW1wb3J0IGJhc2VSZXN0IGZyb20gJy4vX2Jhc2VSZXN0LmpzJztcbmltcG9ydCB1bnppcCBmcm9tICcuL3VuemlwLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAqIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIHRoZSBzZWNvbmQgb2Ygd2hpY2ggY29udGFpbnMgdGhlXG4gKiBzZWNvbmQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIGFycmF5cywgYW5kIHNvIG9uLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAqIC8vID0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXVxuICovXG52YXIgemlwID0gYmFzZVJlc3QodW56aXApO1xuXG5leHBvcnQgZGVmYXVsdCB6aXA7XG4iLCIvKipcbiAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25GdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVppcE9iamVjdChwcm9wcywgdmFsdWVzLCBhc3NpZ25GdW5jKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLFxuICAgICAgdmFsc0xlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICByZXN1bHQgPSB7fTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VaaXBPYmplY3Q7XG4iLCJpbXBvcnQgYXNzaWduVmFsdWUgZnJvbSAnLi9fYXNzaWduVmFsdWUuanMnO1xuaW1wb3J0IGJhc2VaaXBPYmplY3QgZnJvbSAnLi9fYmFzZVppcE9iamVjdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAqIG9uZSBvZiBwcm9wZXJ0eSBpZGVudGlmaWVycyBhbmQgb25lIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC40LjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG5mdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICByZXR1cm4gYmFzZVppcE9iamVjdChwcm9wcyB8fCBbXSwgdmFsdWVzIHx8IFtdLCBhc3NpZ25WYWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHppcE9iamVjdDtcbiIsImltcG9ydCBiYXNlU2V0IGZyb20gJy4vX2Jhc2VTZXQuanMnO1xuaW1wb3J0IGJhc2VaaXBPYmplY3QgZnJvbSAnLi9fYmFzZVppcE9iamVjdC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBPYmplY3RgIGV4Y2VwdCB0aGF0IGl0IHN1cHBvcnRzIHByb3BlcnR5IHBhdGhzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzPVtdXSBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMuXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTtcbiAqIC8vID0+IHsgJ2EnOiB7ICdiJzogW3sgJ2MnOiAxIH0sIHsgJ2QnOiAyIH1dIH0gfVxuICovXG5mdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHtcbiAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYmFzZVNldCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHppcE9iamVjdERlZXA7XG4iLCJpbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IHVuemlwV2l0aCBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5XG4gKiBob3cgZ3JvdXBlZCB2YWx1ZXMgc2hvdWxkIGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZVxuICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuOC4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZVxuICogIGdyb3VwZWQgdmFsdWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy56aXBXaXRoKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0sIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIGEgKyBiICsgYztcbiAqIH0pO1xuICogLy8gPT4gWzExMSwgMjIyXVxuICovXG52YXIgemlwV2l0aCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgIGl0ZXJhdGVlID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcblxuICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3AoKSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHppcFdpdGg7XG4iLCJpbXBvcnQgY2h1bmsgZnJvbSAnLi9jaHVuay5qcyc7XG5pbXBvcnQgY29tcGFjdCBmcm9tICcuL2NvbXBhY3QuanMnO1xuaW1wb3J0IGNvbmNhdCBmcm9tICcuL2NvbmNhdC5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZSBmcm9tICcuL2RpZmZlcmVuY2UuanMnO1xuaW1wb3J0IGRpZmZlcmVuY2VCeSBmcm9tICcuL2RpZmZlcmVuY2VCeS5qcyc7XG5pbXBvcnQgZGlmZmVyZW5jZVdpdGggZnJvbSAnLi9kaWZmZXJlbmNlV2l0aC5qcyc7XG5pbXBvcnQgZHJvcCBmcm9tICcuL2Ryb3AuanMnO1xuaW1wb3J0IGRyb3BSaWdodCBmcm9tICcuL2Ryb3BSaWdodC5qcyc7XG5pbXBvcnQgZHJvcFJpZ2h0V2hpbGUgZnJvbSAnLi9kcm9wUmlnaHRXaGlsZS5qcyc7XG5pbXBvcnQgZHJvcFdoaWxlIGZyb20gJy4vZHJvcFdoaWxlLmpzJztcbmltcG9ydCBmaWxsIGZyb20gJy4vZmlsbC5qcyc7XG5pbXBvcnQgZmluZEluZGV4IGZyb20gJy4vZmluZEluZGV4LmpzJztcbmltcG9ydCBmaW5kTGFzdEluZGV4IGZyb20gJy4vZmluZExhc3RJbmRleC5qcyc7XG5pbXBvcnQgZmlyc3QgZnJvbSAnLi9maXJzdC5qcyc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICcuL2ZsYXR0ZW4uanMnO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJy4vZmxhdHRlbkRlZXAuanMnO1xuaW1wb3J0IGZsYXR0ZW5EZXB0aCBmcm9tICcuL2ZsYXR0ZW5EZXB0aC5qcyc7XG5pbXBvcnQgZnJvbVBhaXJzIGZyb20gJy4vZnJvbVBhaXJzLmpzJztcbmltcG9ydCBoZWFkIGZyb20gJy4vaGVhZC5qcyc7XG5pbXBvcnQgaW5kZXhPZiBmcm9tICcuL2luZGV4T2YuanMnO1xuaW1wb3J0IGluaXRpYWwgZnJvbSAnLi9pbml0aWFsLmpzJztcbmltcG9ydCBpbnRlcnNlY3Rpb24gZnJvbSAnLi9pbnRlcnNlY3Rpb24uanMnO1xuaW1wb3J0IGludGVyc2VjdGlvbkJ5IGZyb20gJy4vaW50ZXJzZWN0aW9uQnkuanMnO1xuaW1wb3J0IGludGVyc2VjdGlvbldpdGggZnJvbSAnLi9pbnRlcnNlY3Rpb25XaXRoLmpzJztcbmltcG9ydCBqb2luIGZyb20gJy4vam9pbi5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuaW1wb3J0IGxhc3RJbmRleE9mIGZyb20gJy4vbGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IG50aCBmcm9tICcuL250aC5qcyc7XG5pbXBvcnQgcHVsbCBmcm9tICcuL3B1bGwuanMnO1xuaW1wb3J0IHB1bGxBbGwgZnJvbSAnLi9wdWxsQWxsLmpzJztcbmltcG9ydCBwdWxsQWxsQnkgZnJvbSAnLi9wdWxsQWxsQnkuanMnO1xuaW1wb3J0IHB1bGxBbGxXaXRoIGZyb20gJy4vcHVsbEFsbFdpdGguanMnO1xuaW1wb3J0IHB1bGxBdCBmcm9tICcuL3B1bGxBdC5qcyc7XG5pbXBvcnQgcmVtb3ZlIGZyb20gJy4vcmVtb3ZlLmpzJztcbmltcG9ydCByZXZlcnNlIGZyb20gJy4vcmV2ZXJzZS5qcyc7XG5pbXBvcnQgc2xpY2UgZnJvbSAnLi9zbGljZS5qcyc7XG5pbXBvcnQgc29ydGVkSW5kZXggZnJvbSAnLi9zb3J0ZWRJbmRleC5qcyc7XG5pbXBvcnQgc29ydGVkSW5kZXhCeSBmcm9tICcuL3NvcnRlZEluZGV4QnkuanMnO1xuaW1wb3J0IHNvcnRlZEluZGV4T2YgZnJvbSAnLi9zb3J0ZWRJbmRleE9mLmpzJztcbmltcG9ydCBzb3J0ZWRMYXN0SW5kZXggZnJvbSAnLi9zb3J0ZWRMYXN0SW5kZXguanMnO1xuaW1wb3J0IHNvcnRlZExhc3RJbmRleEJ5IGZyb20gJy4vc29ydGVkTGFzdEluZGV4QnkuanMnO1xuaW1wb3J0IHNvcnRlZExhc3RJbmRleE9mIGZyb20gJy4vc29ydGVkTGFzdEluZGV4T2YuanMnO1xuaW1wb3J0IHNvcnRlZFVuaXEgZnJvbSAnLi9zb3J0ZWRVbmlxLmpzJztcbmltcG9ydCBzb3J0ZWRVbmlxQnkgZnJvbSAnLi9zb3J0ZWRVbmlxQnkuanMnO1xuaW1wb3J0IHRhaWwgZnJvbSAnLi90YWlsLmpzJztcbmltcG9ydCB0YWtlIGZyb20gJy4vdGFrZS5qcyc7XG5pbXBvcnQgdGFrZVJpZ2h0IGZyb20gJy4vdGFrZVJpZ2h0LmpzJztcbmltcG9ydCB0YWtlUmlnaHRXaGlsZSBmcm9tICcuL3Rha2VSaWdodFdoaWxlLmpzJztcbmltcG9ydCB0YWtlV2hpbGUgZnJvbSAnLi90YWtlV2hpbGUuanMnO1xuaW1wb3J0IHVuaW9uIGZyb20gJy4vdW5pb24uanMnO1xuaW1wb3J0IHVuaW9uQnkgZnJvbSAnLi91bmlvbkJ5LmpzJztcbmltcG9ydCB1bmlvbldpdGggZnJvbSAnLi91bmlvbldpdGguanMnO1xuaW1wb3J0IHVuaXEgZnJvbSAnLi91bmlxLmpzJztcbmltcG9ydCB1bmlxQnkgZnJvbSAnLi91bmlxQnkuanMnO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJy4vdW5pcVdpdGguanMnO1xuaW1wb3J0IHVuemlwIGZyb20gJy4vdW56aXAuanMnO1xuaW1wb3J0IHVuemlwV2l0aCBmcm9tICcuL3VuemlwV2l0aC5qcyc7XG5pbXBvcnQgd2l0aG91dCBmcm9tICcuL3dpdGhvdXQuanMnO1xuaW1wb3J0IHhvciBmcm9tICcuL3hvci5qcyc7XG5pbXBvcnQgeG9yQnkgZnJvbSAnLi94b3JCeS5qcyc7XG5pbXBvcnQgeG9yV2l0aCBmcm9tICcuL3hvcldpdGguanMnO1xuaW1wb3J0IHppcCBmcm9tICcuL3ppcC5qcyc7XG5pbXBvcnQgemlwT2JqZWN0IGZyb20gJy4vemlwT2JqZWN0LmpzJztcbmltcG9ydCB6aXBPYmplY3REZWVwIGZyb20gJy4vemlwT2JqZWN0RGVlcC5qcyc7XG5pbXBvcnQgemlwV2l0aCBmcm9tICcuL3ppcFdpdGguanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNodW5rLCBjb21wYWN0LCBjb25jYXQsIGRpZmZlcmVuY2UsIGRpZmZlcmVuY2VCeSxcbiAgZGlmZmVyZW5jZVdpdGgsIGRyb3AsIGRyb3BSaWdodCwgZHJvcFJpZ2h0V2hpbGUsIGRyb3BXaGlsZSxcbiAgZmlsbCwgZmluZEluZGV4LCBmaW5kTGFzdEluZGV4LCBmaXJzdCwgZmxhdHRlbixcbiAgZmxhdHRlbkRlZXAsIGZsYXR0ZW5EZXB0aCwgZnJvbVBhaXJzLCBoZWFkLCBpbmRleE9mLFxuICBpbml0aWFsLCBpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbkJ5LCBpbnRlcnNlY3Rpb25XaXRoLCBqb2luLFxuICBsYXN0LCBsYXN0SW5kZXhPZiwgbnRoLCBwdWxsLCBwdWxsQWxsLFxuICBwdWxsQWxsQnksIHB1bGxBbGxXaXRoLCBwdWxsQXQsIHJlbW92ZSwgcmV2ZXJzZSxcbiAgc2xpY2UsIHNvcnRlZEluZGV4LCBzb3J0ZWRJbmRleEJ5LCBzb3J0ZWRJbmRleE9mLCBzb3J0ZWRMYXN0SW5kZXgsXG4gIHNvcnRlZExhc3RJbmRleEJ5LCBzb3J0ZWRMYXN0SW5kZXhPZiwgc29ydGVkVW5pcSwgc29ydGVkVW5pcUJ5LCB0YWlsLFxuICB0YWtlLCB0YWtlUmlnaHQsIHRha2VSaWdodFdoaWxlLCB0YWtlV2hpbGUsIHVuaW9uLFxuICB1bmlvbkJ5LCB1bmlvbldpdGgsIHVuaXEsIHVuaXFCeSwgdW5pcVdpdGgsXG4gIHVuemlwLCB1bnppcFdpdGgsIHdpdGhvdXQsIHhvciwgeG9yQnksXG4gIHhvcldpdGgsIHppcCwgemlwT2JqZWN0LCB6aXBPYmplY3REZWVwLCB6aXBXaXRoXG59O1xuIiwiaW1wb3J0IGNvdW50QnkgZnJvbSAnLi9jb3VudEJ5LmpzJztcbmltcG9ydCBlYWNoIGZyb20gJy4vZWFjaC5qcyc7XG5pbXBvcnQgZWFjaFJpZ2h0IGZyb20gJy4vZWFjaFJpZ2h0LmpzJztcbmltcG9ydCBldmVyeSBmcm9tICcuL2V2ZXJ5LmpzJztcbmltcG9ydCBmaWx0ZXIgZnJvbSAnLi9maWx0ZXIuanMnO1xuaW1wb3J0IGZpbmQgZnJvbSAnLi9maW5kLmpzJztcbmltcG9ydCBmaW5kTGFzdCBmcm9tICcuL2ZpbmRMYXN0LmpzJztcbmltcG9ydCBmbGF0TWFwIGZyb20gJy4vZmxhdE1hcC5qcyc7XG5pbXBvcnQgZmxhdE1hcERlZXAgZnJvbSAnLi9mbGF0TWFwRGVlcC5qcyc7XG5pbXBvcnQgZmxhdE1hcERlcHRoIGZyb20gJy4vZmxhdE1hcERlcHRoLmpzJztcbmltcG9ydCBmb3JFYWNoIGZyb20gJy4vZm9yRWFjaC5qcyc7XG5pbXBvcnQgZm9yRWFjaFJpZ2h0IGZyb20gJy4vZm9yRWFjaFJpZ2h0LmpzJztcbmltcG9ydCBncm91cEJ5IGZyb20gJy4vZ3JvdXBCeS5qcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnLi9pbmNsdWRlcy5qcyc7XG5pbXBvcnQgaW52b2tlTWFwIGZyb20gJy4vaW52b2tlTWFwLmpzJztcbmltcG9ydCBrZXlCeSBmcm9tICcuL2tleUJ5LmpzJztcbmltcG9ydCBtYXAgZnJvbSAnLi9tYXAuanMnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnLi9vcmRlckJ5LmpzJztcbmltcG9ydCBwYXJ0aXRpb24gZnJvbSAnLi9wYXJ0aXRpb24uanMnO1xuaW1wb3J0IHJlZHVjZSBmcm9tICcuL3JlZHVjZS5qcyc7XG5pbXBvcnQgcmVkdWNlUmlnaHQgZnJvbSAnLi9yZWR1Y2VSaWdodC5qcyc7XG5pbXBvcnQgcmVqZWN0IGZyb20gJy4vcmVqZWN0LmpzJztcbmltcG9ydCBzYW1wbGUgZnJvbSAnLi9zYW1wbGUuanMnO1xuaW1wb3J0IHNhbXBsZVNpemUgZnJvbSAnLi9zYW1wbGVTaXplLmpzJztcbmltcG9ydCBzaHVmZmxlIGZyb20gJy4vc2h1ZmZsZS5qcyc7XG5pbXBvcnQgc2l6ZSBmcm9tICcuL3NpemUuanMnO1xuaW1wb3J0IHNvbWUgZnJvbSAnLi9zb21lLmpzJztcbmltcG9ydCBzb3J0QnkgZnJvbSAnLi9zb3J0QnkuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvdW50QnksIGVhY2gsIGVhY2hSaWdodCwgZXZlcnksIGZpbHRlcixcbiAgZmluZCwgZmluZExhc3QsIGZsYXRNYXAsIGZsYXRNYXBEZWVwLCBmbGF0TWFwRGVwdGgsXG4gIGZvckVhY2gsIGZvckVhY2hSaWdodCwgZ3JvdXBCeSwgaW5jbHVkZXMsIGludm9rZU1hcCxcbiAga2V5QnksIG1hcCwgb3JkZXJCeSwgcGFydGl0aW9uLCByZWR1Y2UsXG4gIHJlZHVjZVJpZ2h0LCByZWplY3QsIHNhbXBsZSwgc2FtcGxlU2l6ZSwgc2h1ZmZsZSxcbiAgc2l6ZSwgc29tZSwgc29ydEJ5XG59O1xuIiwiaW1wb3J0IG5vdyBmcm9tICcuL25vdy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbm93XG59O1xuIiwiaW1wb3J0IGFmdGVyIGZyb20gJy4vYWZ0ZXIuanMnO1xuaW1wb3J0IGFyeSBmcm9tICcuL2FyeS5qcyc7XG5pbXBvcnQgYmVmb3JlIGZyb20gJy4vYmVmb3JlLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vYmluZC5qcyc7XG5pbXBvcnQgYmluZEtleSBmcm9tICcuL2JpbmRLZXkuanMnO1xuaW1wb3J0IGN1cnJ5IGZyb20gJy4vY3VycnkuanMnO1xuaW1wb3J0IGN1cnJ5UmlnaHQgZnJvbSAnLi9jdXJyeVJpZ2h0LmpzJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICcuL2RlYm91bmNlLmpzJztcbmltcG9ydCBkZWZlciBmcm9tICcuL2RlZmVyLmpzJztcbmltcG9ydCBkZWxheSBmcm9tICcuL2RlbGF5LmpzJztcbmltcG9ydCBmbGlwIGZyb20gJy4vZmxpcC5qcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICcuL21lbW9pemUuanMnO1xuaW1wb3J0IG5lZ2F0ZSBmcm9tICcuL25lZ2F0ZS5qcyc7XG5pbXBvcnQgb25jZSBmcm9tICcuL29uY2UuanMnO1xuaW1wb3J0IG92ZXJBcmdzIGZyb20gJy4vb3ZlckFyZ3MuanMnO1xuaW1wb3J0IHBhcnRpYWwgZnJvbSAnLi9wYXJ0aWFsLmpzJztcbmltcG9ydCBwYXJ0aWFsUmlnaHQgZnJvbSAnLi9wYXJ0aWFsUmlnaHQuanMnO1xuaW1wb3J0IHJlYXJnIGZyb20gJy4vcmVhcmcuanMnO1xuaW1wb3J0IHJlc3QgZnJvbSAnLi9yZXN0LmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9zcHJlYWQuanMnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4vdGhyb3R0bGUuanMnO1xuaW1wb3J0IHVuYXJ5IGZyb20gJy4vdW5hcnkuanMnO1xuaW1wb3J0IHdyYXAgZnJvbSAnLi93cmFwLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhZnRlciwgYXJ5LCBiZWZvcmUsIGJpbmQsIGJpbmRLZXksXG4gIGN1cnJ5LCBjdXJyeVJpZ2h0LCBkZWJvdW5jZSwgZGVmZXIsIGRlbGF5LFxuICBmbGlwLCBtZW1vaXplLCBuZWdhdGUsIG9uY2UsIG92ZXJBcmdzLFxuICBwYXJ0aWFsLCBwYXJ0aWFsUmlnaHQsIHJlYXJnLCByZXN0LCBzcHJlYWQsXG4gIHRocm90dGxlLCB1bmFyeSwgd3JhcFxufTtcbiIsImltcG9ydCBjYXN0QXJyYXkgZnJvbSAnLi9jYXN0QXJyYXkuanMnO1xuaW1wb3J0IGNsb25lIGZyb20gJy4vY2xvbmUuanMnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICcuL2Nsb25lRGVlcC5qcyc7XG5pbXBvcnQgY2xvbmVEZWVwV2l0aCBmcm9tICcuL2Nsb25lRGVlcFdpdGguanMnO1xuaW1wb3J0IGNsb25lV2l0aCBmcm9tICcuL2Nsb25lV2l0aC5qcyc7XG5pbXBvcnQgY29uZm9ybXNUbyBmcm9tICcuL2NvbmZvcm1zVG8uanMnO1xuaW1wb3J0IGVxIGZyb20gJy4vZXEuanMnO1xuaW1wb3J0IGd0IGZyb20gJy4vZ3QuanMnO1xuaW1wb3J0IGd0ZSBmcm9tICcuL2d0ZS5qcyc7XG5pbXBvcnQgaXNBcmd1bWVudHMgZnJvbSAnLi9pc0FyZ3VtZW50cy5qcyc7XG5pbXBvcnQgaXNBcnJheSBmcm9tICcuL2lzQXJyYXkuanMnO1xuaW1wb3J0IGlzQXJyYXlCdWZmZXIgZnJvbSAnLi9pc0FycmF5QnVmZmVyLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZSBmcm9tICcuL2lzQXJyYXlMaWtlLmpzJztcbmltcG9ydCBpc0FycmF5TGlrZU9iamVjdCBmcm9tICcuL2lzQXJyYXlMaWtlT2JqZWN0LmpzJztcbmltcG9ydCBpc0Jvb2xlYW4gZnJvbSAnLi9pc0Jvb2xlYW4uanMnO1xuaW1wb3J0IGlzQnVmZmVyIGZyb20gJy4vaXNCdWZmZXIuanMnO1xuaW1wb3J0IGlzRGF0ZSBmcm9tICcuL2lzRGF0ZS5qcyc7XG5pbXBvcnQgaXNFbGVtZW50IGZyb20gJy4vaXNFbGVtZW50LmpzJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJy4vaXNFbXB0eS5qcyc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICcuL2lzRXF1YWwuanMnO1xuaW1wb3J0IGlzRXF1YWxXaXRoIGZyb20gJy4vaXNFcXVhbFdpdGguanMnO1xuaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi9pc0Vycm9yLmpzJztcbmltcG9ydCBpc0Zpbml0ZSBmcm9tICcuL2lzRmluaXRlLmpzJztcbmltcG9ydCBpc0Z1bmN0aW9uIGZyb20gJy4vaXNGdW5jdGlvbi5qcyc7XG5pbXBvcnQgaXNJbnRlZ2VyIGZyb20gJy4vaXNJbnRlZ2VyLmpzJztcbmltcG9ydCBpc0xlbmd0aCBmcm9tICcuL2lzTGVuZ3RoLmpzJztcbmltcG9ydCBpc01hcCBmcm9tICcuL2lzTWFwLmpzJztcbmltcG9ydCBpc01hdGNoIGZyb20gJy4vaXNNYXRjaC5qcyc7XG5pbXBvcnQgaXNNYXRjaFdpdGggZnJvbSAnLi9pc01hdGNoV2l0aC5qcyc7XG5pbXBvcnQgaXNOYU4gZnJvbSAnLi9pc05hTi5qcyc7XG5pbXBvcnQgaXNOYXRpdmUgZnJvbSAnLi9pc05hdGl2ZS5qcyc7XG5pbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbC5qcyc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsLmpzJztcbmltcG9ydCBpc051bWJlciBmcm9tICcuL2lzTnVtYmVyLmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBpc09iamVjdExpa2UgZnJvbSAnLi9pc09iamVjdExpa2UuanMnO1xuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnLi9pc1BsYWluT2JqZWN0LmpzJztcbmltcG9ydCBpc1JlZ0V4cCBmcm9tICcuL2lzUmVnRXhwLmpzJztcbmltcG9ydCBpc1NhZmVJbnRlZ2VyIGZyb20gJy4vaXNTYWZlSW50ZWdlci5qcyc7XG5pbXBvcnQgaXNTZXQgZnJvbSAnLi9pc1NldC5qcyc7XG5pbXBvcnQgaXNTdHJpbmcgZnJvbSAnLi9pc1N0cmluZy5qcyc7XG5pbXBvcnQgaXNTeW1ib2wgZnJvbSAnLi9pc1N5bWJvbC5qcyc7XG5pbXBvcnQgaXNUeXBlZEFycmF5IGZyb20gJy4vaXNUeXBlZEFycmF5LmpzJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkLmpzJztcbmltcG9ydCBpc1dlYWtNYXAgZnJvbSAnLi9pc1dlYWtNYXAuanMnO1xuaW1wb3J0IGlzV2Vha1NldCBmcm9tICcuL2lzV2Vha1NldC5qcyc7XG5pbXBvcnQgbHQgZnJvbSAnLi9sdC5qcyc7XG5pbXBvcnQgbHRlIGZyb20gJy4vbHRlLmpzJztcbmltcG9ydCB0b0FycmF5IGZyb20gJy4vdG9BcnJheS5qcyc7XG5pbXBvcnQgdG9GaW5pdGUgZnJvbSAnLi90b0Zpbml0ZS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCB0b0xlbmd0aCBmcm9tICcuL3RvTGVuZ3RoLmpzJztcbmltcG9ydCB0b051bWJlciBmcm9tICcuL3RvTnVtYmVyLmpzJztcbmltcG9ydCB0b1BsYWluT2JqZWN0IGZyb20gJy4vdG9QbGFpbk9iamVjdC5qcyc7XG5pbXBvcnQgdG9TYWZlSW50ZWdlciBmcm9tICcuL3RvU2FmZUludGVnZXIuanMnO1xuaW1wb3J0IHRvU3RyaW5nIGZyb20gJy4vdG9TdHJpbmcuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNhc3RBcnJheSwgY2xvbmUsIGNsb25lRGVlcCwgY2xvbmVEZWVwV2l0aCwgY2xvbmVXaXRoLFxuICBjb25mb3Jtc1RvLCBlcSwgZ3QsIGd0ZSwgaXNBcmd1bWVudHMsXG4gIGlzQXJyYXksIGlzQXJyYXlCdWZmZXIsIGlzQXJyYXlMaWtlLCBpc0FycmF5TGlrZU9iamVjdCwgaXNCb29sZWFuLFxuICBpc0J1ZmZlciwgaXNEYXRlLCBpc0VsZW1lbnQsIGlzRW1wdHksIGlzRXF1YWwsXG4gIGlzRXF1YWxXaXRoLCBpc0Vycm9yLCBpc0Zpbml0ZSwgaXNGdW5jdGlvbiwgaXNJbnRlZ2VyLFxuICBpc0xlbmd0aCwgaXNNYXAsIGlzTWF0Y2gsIGlzTWF0Y2hXaXRoLCBpc05hTixcbiAgaXNOYXRpdmUsIGlzTmlsLCBpc051bGwsIGlzTnVtYmVyLCBpc09iamVjdCxcbiAgaXNPYmplY3RMaWtlLCBpc1BsYWluT2JqZWN0LCBpc1JlZ0V4cCwgaXNTYWZlSW50ZWdlciwgaXNTZXQsXG4gIGlzU3RyaW5nLCBpc1N5bWJvbCwgaXNUeXBlZEFycmF5LCBpc1VuZGVmaW5lZCwgaXNXZWFrTWFwLFxuICBpc1dlYWtTZXQsIGx0LCBsdGUsIHRvQXJyYXksIHRvRmluaXRlLFxuICB0b0ludGVnZXIsIHRvTGVuZ3RoLCB0b051bWJlciwgdG9QbGFpbk9iamVjdCwgdG9TYWZlSW50ZWdlcixcbiAgdG9TdHJpbmdcbn07XG4iLCJpbXBvcnQgYWRkIGZyb20gJy4vYWRkLmpzJztcbmltcG9ydCBjZWlsIGZyb20gJy4vY2VpbC5qcyc7XG5pbXBvcnQgZGl2aWRlIGZyb20gJy4vZGl2aWRlLmpzJztcbmltcG9ydCBmbG9vciBmcm9tICcuL2Zsb29yLmpzJztcbmltcG9ydCBtYXggZnJvbSAnLi9tYXguanMnO1xuaW1wb3J0IG1heEJ5IGZyb20gJy4vbWF4QnkuanMnO1xuaW1wb3J0IG1lYW4gZnJvbSAnLi9tZWFuLmpzJztcbmltcG9ydCBtZWFuQnkgZnJvbSAnLi9tZWFuQnkuanMnO1xuaW1wb3J0IG1pbiBmcm9tICcuL21pbi5qcyc7XG5pbXBvcnQgbWluQnkgZnJvbSAnLi9taW5CeS5qcyc7XG5pbXBvcnQgbXVsdGlwbHkgZnJvbSAnLi9tdWx0aXBseS5qcyc7XG5pbXBvcnQgcm91bmQgZnJvbSAnLi9yb3VuZC5qcyc7XG5pbXBvcnQgc3VidHJhY3QgZnJvbSAnLi9zdWJ0cmFjdC5qcyc7XG5pbXBvcnQgc3VtIGZyb20gJy4vc3VtLmpzJztcbmltcG9ydCBzdW1CeSBmcm9tICcuL3N1bUJ5LmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhZGQsIGNlaWwsIGRpdmlkZSwgZmxvb3IsIG1heCxcbiAgbWF4QnksIG1lYW4sIG1lYW5CeSwgbWluLCBtaW5CeSxcbiAgbXVsdGlwbHksIHJvdW5kLCBzdWJ0cmFjdCwgc3VtLCBzdW1CeVxufTtcbiIsImltcG9ydCBjbGFtcCBmcm9tICcuL2NsYW1wLmpzJztcbmltcG9ydCBpblJhbmdlIGZyb20gJy4vaW5SYW5nZS5qcyc7XG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjbGFtcCwgaW5SYW5nZSwgcmFuZG9tXG59O1xuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICcuL2Fzc2lnbi5qcyc7XG5pbXBvcnQgYXNzaWduSW4gZnJvbSAnLi9hc3NpZ25Jbi5qcyc7XG5pbXBvcnQgYXNzaWduSW5XaXRoIGZyb20gJy4vYXNzaWduSW5XaXRoLmpzJztcbmltcG9ydCBhc3NpZ25XaXRoIGZyb20gJy4vYXNzaWduV2l0aC5qcyc7XG5pbXBvcnQgYXQgZnJvbSAnLi9hdC5qcyc7XG5pbXBvcnQgY3JlYXRlIGZyb20gJy4vY3JlYXRlLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzLmpzJztcbmltcG9ydCBkZWZhdWx0c0RlZXAgZnJvbSAnLi9kZWZhdWx0c0RlZXAuanMnO1xuaW1wb3J0IGVudHJpZXMgZnJvbSAnLi9lbnRyaWVzLmpzJztcbmltcG9ydCBlbnRyaWVzSW4gZnJvbSAnLi9lbnRyaWVzSW4uanMnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuL2V4dGVuZC5qcyc7XG5pbXBvcnQgZXh0ZW5kV2l0aCBmcm9tICcuL2V4dGVuZFdpdGguanMnO1xuaW1wb3J0IGZpbmRLZXkgZnJvbSAnLi9maW5kS2V5LmpzJztcbmltcG9ydCBmaW5kTGFzdEtleSBmcm9tICcuL2ZpbmRMYXN0S2V5LmpzJztcbmltcG9ydCBmb3JJbiBmcm9tICcuL2ZvckluLmpzJztcbmltcG9ydCBmb3JJblJpZ2h0IGZyb20gJy4vZm9ySW5SaWdodC5qcyc7XG5pbXBvcnQgZm9yT3duIGZyb20gJy4vZm9yT3duLmpzJztcbmltcG9ydCBmb3JPd25SaWdodCBmcm9tICcuL2Zvck93blJpZ2h0LmpzJztcbmltcG9ydCBmdW5jdGlvbnMgZnJvbSAnLi9mdW5jdGlvbnMuanMnO1xuaW1wb3J0IGZ1bmN0aW9uc0luIGZyb20gJy4vZnVuY3Rpb25zSW4uanMnO1xuaW1wb3J0IGdldCBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgaGFzIGZyb20gJy4vaGFzLmpzJztcbmltcG9ydCBoYXNJbiBmcm9tICcuL2hhc0luLmpzJztcbmltcG9ydCBpbnZlcnQgZnJvbSAnLi9pbnZlcnQuanMnO1xuaW1wb3J0IGludmVydEJ5IGZyb20gJy4vaW52ZXJ0QnkuanMnO1xuaW1wb3J0IGludm9rZSBmcm9tICcuL2ludm9rZS5qcyc7XG5pbXBvcnQga2V5cyBmcm9tICcuL2tleXMuanMnO1xuaW1wb3J0IGtleXNJbiBmcm9tICcuL2tleXNJbi5qcyc7XG5pbXBvcnQgbWFwS2V5cyBmcm9tICcuL21hcEtleXMuanMnO1xuaW1wb3J0IG1hcFZhbHVlcyBmcm9tICcuL21hcFZhbHVlcy5qcyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZS5qcyc7XG5pbXBvcnQgbWVyZ2VXaXRoIGZyb20gJy4vbWVyZ2VXaXRoLmpzJztcbmltcG9ydCBvbWl0IGZyb20gJy4vb21pdC5qcyc7XG5pbXBvcnQgb21pdEJ5IGZyb20gJy4vb21pdEJ5LmpzJztcbmltcG9ydCBwaWNrIGZyb20gJy4vcGljay5qcyc7XG5pbXBvcnQgcGlja0J5IGZyb20gJy4vcGlja0J5LmpzJztcbmltcG9ydCByZXN1bHQgZnJvbSAnLi9yZXN1bHQuanMnO1xuaW1wb3J0IHNldCBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgc2V0V2l0aCBmcm9tICcuL3NldFdpdGguanMnO1xuaW1wb3J0IHRvUGFpcnMgZnJvbSAnLi90b1BhaXJzLmpzJztcbmltcG9ydCB0b1BhaXJzSW4gZnJvbSAnLi90b1BhaXJzSW4uanMnO1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybS5qcyc7XG5pbXBvcnQgdW5zZXQgZnJvbSAnLi91bnNldC5qcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJy4vdXBkYXRlLmpzJztcbmltcG9ydCB1cGRhdGVXaXRoIGZyb20gJy4vdXBkYXRlV2l0aC5qcyc7XG5pbXBvcnQgdmFsdWVzIGZyb20gJy4vdmFsdWVzLmpzJztcbmltcG9ydCB2YWx1ZXNJbiBmcm9tICcuL3ZhbHVlc0luLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NpZ24sIGFzc2lnbkluLCBhc3NpZ25JbldpdGgsIGFzc2lnbldpdGgsIGF0LFxuICBjcmVhdGUsIGRlZmF1bHRzLCBkZWZhdWx0c0RlZXAsIGVudHJpZXMsIGVudHJpZXNJbixcbiAgZXh0ZW5kLCBleHRlbmRXaXRoLCBmaW5kS2V5LCBmaW5kTGFzdEtleSwgZm9ySW4sXG4gIGZvckluUmlnaHQsIGZvck93biwgZm9yT3duUmlnaHQsIGZ1bmN0aW9ucywgZnVuY3Rpb25zSW4sXG4gIGdldCwgaGFzLCBoYXNJbiwgaW52ZXJ0LCBpbnZlcnRCeSxcbiAgaW52b2tlLCBrZXlzLCBrZXlzSW4sIG1hcEtleXMsIG1hcFZhbHVlcyxcbiAgbWVyZ2UsIG1lcmdlV2l0aCwgb21pdCwgb21pdEJ5LCBwaWNrLFxuICBwaWNrQnksIHJlc3VsdCwgc2V0LCBzZXRXaXRoLCB0b1BhaXJzLFxuICB0b1BhaXJzSW4sIHRyYW5zZm9ybSwgdW5zZXQsIHVwZGF0ZSwgdXBkYXRlV2l0aCxcbiAgdmFsdWVzLCB2YWx1ZXNJblxufTtcbiIsImltcG9ydCBhdCBmcm9tICcuL3dyYXBwZXJBdC5qcyc7XG5pbXBvcnQgY2hhaW4gZnJvbSAnLi9jaGFpbi5qcyc7XG5pbXBvcnQgY29tbWl0IGZyb20gJy4vY29tbWl0LmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcbmltcG9ydCBuZXh0IGZyb20gJy4vbmV4dC5qcyc7XG5pbXBvcnQgcGxhbnQgZnJvbSAnLi9wbGFudC5qcyc7XG5pbXBvcnQgcmV2ZXJzZSBmcm9tICcuL3dyYXBwZXJSZXZlcnNlLmpzJztcbmltcG9ydCB0YXAgZnJvbSAnLi90YXAuanMnO1xuaW1wb3J0IHRocnUgZnJvbSAnLi90aHJ1LmpzJztcbmltcG9ydCB0b0l0ZXJhdG9yIGZyb20gJy4vdG9JdGVyYXRvci5qcyc7XG5pbXBvcnQgdG9KU09OIGZyb20gJy4vdG9KU09OLmpzJztcbmltcG9ydCB2YWx1ZSBmcm9tICcuL3dyYXBwZXJWYWx1ZS5qcyc7XG5pbXBvcnQgdmFsdWVPZiBmcm9tICcuL3ZhbHVlT2YuanMnO1xuaW1wb3J0IHdyYXBwZXJDaGFpbiBmcm9tICcuL3dyYXBwZXJDaGFpbi5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXQsIGNoYWluLCBjb21taXQsIGxvZGFzaCwgbmV4dCxcbiAgcGxhbnQsIHJldmVyc2UsIHRhcCwgdGhydSwgdG9JdGVyYXRvcixcbiAgdG9KU09OLCB2YWx1ZSwgdmFsdWVPZiwgd3JhcHBlckNoYWluXG59O1xuIiwiaW1wb3J0IGNhbWVsQ2FzZSBmcm9tICcuL2NhbWVsQ2FzZS5qcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuL2NhcGl0YWxpemUuanMnO1xuaW1wb3J0IGRlYnVyciBmcm9tICcuL2RlYnVyci5qcyc7XG5pbXBvcnQgZW5kc1dpdGggZnJvbSAnLi9lbmRzV2l0aC5qcyc7XG5pbXBvcnQgZXNjYXBlIGZyb20gJy4vZXNjYXBlLmpzJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnLi9lc2NhcGVSZWdFeHAuanMnO1xuaW1wb3J0IGtlYmFiQ2FzZSBmcm9tICcuL2tlYmFiQ2FzZS5qcyc7XG5pbXBvcnQgbG93ZXJDYXNlIGZyb20gJy4vbG93ZXJDYXNlLmpzJztcbmltcG9ydCBsb3dlckZpcnN0IGZyb20gJy4vbG93ZXJGaXJzdC5qcyc7XG5pbXBvcnQgcGFkIGZyb20gJy4vcGFkLmpzJztcbmltcG9ydCBwYWRFbmQgZnJvbSAnLi9wYWRFbmQuanMnO1xuaW1wb3J0IHBhZFN0YXJ0IGZyb20gJy4vcGFkU3RhcnQuanMnO1xuaW1wb3J0IHBhcnNlSW50IGZyb20gJy4vcGFyc2VJbnQuanMnO1xuaW1wb3J0IHJlcGVhdCBmcm9tICcuL3JlcGVhdC5qcyc7XG5pbXBvcnQgcmVwbGFjZSBmcm9tICcuL3JlcGxhY2UuanMnO1xuaW1wb3J0IHNuYWtlQ2FzZSBmcm9tICcuL3NuYWtlQ2FzZS5qcyc7XG5pbXBvcnQgc3BsaXQgZnJvbSAnLi9zcGxpdC5qcyc7XG5pbXBvcnQgc3RhcnRDYXNlIGZyb20gJy4vc3RhcnRDYXNlLmpzJztcbmltcG9ydCBzdGFydHNXaXRoIGZyb20gJy4vc3RhcnRzV2l0aC5qcyc7XG5pbXBvcnQgdGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZS5qcyc7XG5pbXBvcnQgdGVtcGxhdGVTZXR0aW5ncyBmcm9tICcuL3RlbXBsYXRlU2V0dGluZ3MuanMnO1xuaW1wb3J0IHRvTG93ZXIgZnJvbSAnLi90b0xvd2VyLmpzJztcbmltcG9ydCB0b1VwcGVyIGZyb20gJy4vdG9VcHBlci5qcyc7XG5pbXBvcnQgdHJpbSBmcm9tICcuL3RyaW0uanMnO1xuaW1wb3J0IHRyaW1FbmQgZnJvbSAnLi90cmltRW5kLmpzJztcbmltcG9ydCB0cmltU3RhcnQgZnJvbSAnLi90cmltU3RhcnQuanMnO1xuaW1wb3J0IHRydW5jYXRlIGZyb20gJy4vdHJ1bmNhdGUuanMnO1xuaW1wb3J0IHVuZXNjYXBlIGZyb20gJy4vdW5lc2NhcGUuanMnO1xuaW1wb3J0IHVwcGVyQ2FzZSBmcm9tICcuL3VwcGVyQ2FzZS5qcyc7XG5pbXBvcnQgdXBwZXJGaXJzdCBmcm9tICcuL3VwcGVyRmlyc3QuanMnO1xuaW1wb3J0IHdvcmRzIGZyb20gJy4vd29yZHMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNhbWVsQ2FzZSwgY2FwaXRhbGl6ZSwgZGVidXJyLCBlbmRzV2l0aCwgZXNjYXBlLFxuICBlc2NhcGVSZWdFeHAsIGtlYmFiQ2FzZSwgbG93ZXJDYXNlLCBsb3dlckZpcnN0LCBwYWQsXG4gIHBhZEVuZCwgcGFkU3RhcnQsIHBhcnNlSW50LCByZXBlYXQsIHJlcGxhY2UsXG4gIHNuYWtlQ2FzZSwgc3BsaXQsIHN0YXJ0Q2FzZSwgc3RhcnRzV2l0aCwgdGVtcGxhdGUsXG4gIHRlbXBsYXRlU2V0dGluZ3MsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW0sIHRyaW1FbmQsXG4gIHRyaW1TdGFydCwgdHJ1bmNhdGUsIHVuZXNjYXBlLCB1cHBlckNhc2UsIHVwcGVyRmlyc3QsXG4gIHdvcmRzXG59O1xuIiwiaW1wb3J0IGF0dGVtcHQgZnJvbSAnLi9hdHRlbXB0LmpzJztcbmltcG9ydCBiaW5kQWxsIGZyb20gJy4vYmluZEFsbC5qcyc7XG5pbXBvcnQgY29uZCBmcm9tICcuL2NvbmQuanMnO1xuaW1wb3J0IGNvbmZvcm1zIGZyb20gJy4vY29uZm9ybXMuanMnO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gJy4vY29uc3RhbnQuanMnO1xuaW1wb3J0IGRlZmF1bHRUbyBmcm9tICcuL2RlZmF1bHRUby5qcyc7XG5pbXBvcnQgZmxvdyBmcm9tICcuL2Zsb3cuanMnO1xuaW1wb3J0IGZsb3dSaWdodCBmcm9tICcuL2Zsb3dSaWdodC5qcyc7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSAnLi9pZGVudGl0eS5qcyc7XG5pbXBvcnQgaXRlcmF0ZWUgZnJvbSAnLi9pdGVyYXRlZS5qcyc7XG5pbXBvcnQgbWF0Y2hlcyBmcm9tICcuL21hdGNoZXMuanMnO1xuaW1wb3J0IG1hdGNoZXNQcm9wZXJ0eSBmcm9tICcuL21hdGNoZXNQcm9wZXJ0eS5qcyc7XG5pbXBvcnQgbWV0aG9kIGZyb20gJy4vbWV0aG9kLmpzJztcbmltcG9ydCBtZXRob2RPZiBmcm9tICcuL21ldGhvZE9mLmpzJztcbmltcG9ydCBtaXhpbiBmcm9tICcuL21peGluLmpzJztcbmltcG9ydCBub29wIGZyb20gJy4vbm9vcC5qcyc7XG5pbXBvcnQgbnRoQXJnIGZyb20gJy4vbnRoQXJnLmpzJztcbmltcG9ydCBvdmVyIGZyb20gJy4vb3Zlci5qcyc7XG5pbXBvcnQgb3ZlckV2ZXJ5IGZyb20gJy4vb3ZlckV2ZXJ5LmpzJztcbmltcG9ydCBvdmVyU29tZSBmcm9tICcuL292ZXJTb21lLmpzJztcbmltcG9ydCBwcm9wZXJ0eSBmcm9tICcuL3Byb3BlcnR5LmpzJztcbmltcG9ydCBwcm9wZXJ0eU9mIGZyb20gJy4vcHJvcGVydHlPZi5qcyc7XG5pbXBvcnQgcmFuZ2UgZnJvbSAnLi9yYW5nZS5qcyc7XG5pbXBvcnQgcmFuZ2VSaWdodCBmcm9tICcuL3JhbmdlUmlnaHQuanMnO1xuaW1wb3J0IHN0dWJBcnJheSBmcm9tICcuL3N0dWJBcnJheS5qcyc7XG5pbXBvcnQgc3R1YkZhbHNlIGZyb20gJy4vc3R1YkZhbHNlLmpzJztcbmltcG9ydCBzdHViT2JqZWN0IGZyb20gJy4vc3R1Yk9iamVjdC5qcyc7XG5pbXBvcnQgc3R1YlN0cmluZyBmcm9tICcuL3N0dWJTdHJpbmcuanMnO1xuaW1wb3J0IHN0dWJUcnVlIGZyb20gJy4vc3R1YlRydWUuanMnO1xuaW1wb3J0IHRpbWVzIGZyb20gJy4vdGltZXMuanMnO1xuaW1wb3J0IHRvUGF0aCBmcm9tICcuL3RvUGF0aC5qcyc7XG5pbXBvcnQgdW5pcXVlSWQgZnJvbSAnLi91bmlxdWVJZC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXR0ZW1wdCwgYmluZEFsbCwgY29uZCwgY29uZm9ybXMsIGNvbnN0YW50LFxuICBkZWZhdWx0VG8sIGZsb3csIGZsb3dSaWdodCwgaWRlbnRpdHksIGl0ZXJhdGVlLFxuICBtYXRjaGVzLCBtYXRjaGVzUHJvcGVydHksIG1ldGhvZCwgbWV0aG9kT2YsIG1peGluLFxuICBub29wLCBudGhBcmcsIG92ZXIsIG92ZXJFdmVyeSwgb3ZlclNvbWUsXG4gIHByb3BlcnR5LCBwcm9wZXJ0eU9mLCByYW5nZSwgcmFuZ2VSaWdodCwgc3R1YkFycmF5LFxuICBzdHViRmFsc2UsIHN0dWJPYmplY3QsIHN0dWJTdHJpbmcsIHN0dWJUcnVlLCB0aW1lcyxcbiAgdG9QYXRoLCB1bmlxdWVJZFxufTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5pbXBvcnQgY29weUFycmF5IGZyb20gJy4vX2NvcHlBcnJheS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBsYXp5IHdyYXBwZXIgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbG9uZVxuICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGxhenlDbG9uZSgpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzLl9fd3JhcHBlZF9fKTtcbiAgcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuICByZXN1bHQuX19kaXJfXyA9IHRoaXMuX19kaXJfXztcbiAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRoaXMuX19maWx0ZXJlZF9fO1xuICByZXN1bHQuX19pdGVyYXRlZXNfXyA9IGNvcHlBcnJheSh0aGlzLl9faXRlcmF0ZWVzX18pO1xuICByZXN1bHQuX190YWtlQ291bnRfXyA9IHRoaXMuX190YWtlQ291bnRfXztcbiAgcmVzdWx0Ll9fdmlld3NfXyA9IGNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlDbG9uZTtcbiIsImltcG9ydCBMYXp5V3JhcHBlciBmcm9tICcuL19MYXp5V3JhcHBlci5qcyc7XG5cbi8qKlxuICogUmV2ZXJzZXMgdGhlIGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgcmV2ZXJzZVxuICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgcmV2ZXJzZWQgYExhenlXcmFwcGVyYCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGxhenlSZXZlcnNlKCkge1xuICBpZiAodGhpcy5fX2ZpbHRlcmVkX18pIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpO1xuICAgIHJlc3VsdC5fX2Rpcl9fID0gLTE7XG4gICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHJlc3VsdC5fX2Rpcl9fICo9IC0xO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlSZXZlcnNlO1xuIiwiLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIEdldHMgdGhlIHZpZXcsIGFwcGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSB7QXJyYXl9IHRyYW5zZm9ybXMgVGhlIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0aGUgdmlldy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgXG4gKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICovXG5mdW5jdGlvbiBnZXRWaWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB0cmFuc2Zvcm1zLmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICBjYXNlICdkcm9wUmlnaHQnOiBlbmQgLT0gc2l6ZTsgYnJlYWs7XG4gICAgICBjYXNlICd0YWtlJzogICAgICBlbmQgPSBuYXRpdmVNaW4oZW5kLCBzdGFydCArIHNpemUpOyBicmVhaztcbiAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldFZpZXc7XG4iLCJpbXBvcnQgYmFzZVdyYXBwZXJWYWx1ZSBmcm9tICcuL19iYXNlV3JhcHBlclZhbHVlLmpzJztcbmltcG9ydCBnZXRWaWV3IGZyb20gJy4vX2dldFZpZXcuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcblxuLyoqIFVzZWQgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgbGF6eSBpdGVyYXRlZXMuICovXG52YXIgTEFaWV9GSUxURVJfRkxBRyA9IDEsXG4gICAgTEFaWV9NQVBfRkxBRyA9IDI7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgdW53cmFwcGVkIHZhbHVlIGZyb20gaXRzIGxhenkgd3JhcHBlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgdmFsdWVcbiAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlclxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGF6eVZhbHVlKCkge1xuICB2YXIgYXJyYXkgPSB0aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksXG4gICAgICBkaXIgPSB0aGlzLl9fZGlyX18sXG4gICAgICBpc0FyciA9IGlzQXJyYXkoYXJyYXkpLFxuICAgICAgaXNSaWdodCA9IGRpciA8IDAsXG4gICAgICBhcnJMZW5ndGggPSBpc0FyciA/IGFycmF5Lmxlbmd0aCA6IDAsXG4gICAgICB2aWV3ID0gZ2V0VmlldygwLCBhcnJMZW5ndGgsIHRoaXMuX192aWV3c19fKSxcbiAgICAgIHN0YXJ0ID0gdmlldy5zdGFydCxcbiAgICAgIGVuZCA9IHZpZXcuZW5kLFxuICAgICAgbGVuZ3RoID0gZW5kIC0gc3RhcnQsXG4gICAgICBpbmRleCA9IGlzUmlnaHQgPyBlbmQgOiAoc3RhcnQgLSAxKSxcbiAgICAgIGl0ZXJhdGVlcyA9IHRoaXMuX19pdGVyYXRlZXNfXyxcbiAgICAgIGl0ZXJMZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgdGFrZUNvdW50ID0gbmF0aXZlTWluKGxlbmd0aCwgdGhpcy5fX3Rha2VDb3VudF9fKTtcblxuICBpZiAoIWlzQXJyIHx8ICghaXNSaWdodCAmJiBhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7XG4gICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICBvdXRlcjpcbiAgd2hpbGUgKGxlbmd0aC0tICYmIHJlc0luZGV4IDwgdGFrZUNvdW50KSB7XG4gICAgaW5kZXggKz0gZGlyO1xuXG4gICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICB2YWx1ZSA9IGFycmF5W2luZGV4XTtcblxuICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHtcbiAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgaXRlcmF0ZWUgPSBkYXRhLml0ZXJhdGVlLFxuICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsXG4gICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgIGlmICh0eXBlID09IExBWllfTUFQX0ZMQUcpIHtcbiAgICAgICAgdmFsdWUgPSBjb21wdXRlZDtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgIGlmICh0eXBlID09IExBWllfRklMVEVSX0ZMQUcpIHtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXp5VmFsdWU7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBMb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJlc1wiIC1vIC4vYFxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5pbXBvcnQgYXJyYXkgZnJvbSAnLi9hcnJheS5qcyc7XG5pbXBvcnQgY29sbGVjdGlvbiBmcm9tICcuL2NvbGxlY3Rpb24uanMnO1xuaW1wb3J0IGRhdGUgZnJvbSAnLi9kYXRlLmpzJztcbmltcG9ydCBmdW5jIGZyb20gJy4vZnVuY3Rpb24uanMnO1xuaW1wb3J0IGxhbmcgZnJvbSAnLi9sYW5nLmpzJztcbmltcG9ydCBtYXRoIGZyb20gJy4vbWF0aC5qcyc7XG5pbXBvcnQgbnVtYmVyIGZyb20gJy4vbnVtYmVyLmpzJztcbmltcG9ydCBvYmplY3QgZnJvbSAnLi9vYmplY3QuanMnO1xuaW1wb3J0IHNlcSBmcm9tICcuL3NlcS5qcyc7XG5pbXBvcnQgc3RyaW5nIGZyb20gJy4vc3RyaW5nLmpzJztcbmltcG9ydCB1dGlsIGZyb20gJy4vdXRpbC5qcyc7XG5pbXBvcnQgTGF6eVdyYXBwZXIgZnJvbSAnLi9fTGF6eVdyYXBwZXIuanMnO1xuaW1wb3J0IExvZGFzaFdyYXBwZXIgZnJvbSAnLi9fTG9kYXNoV3JhcHBlci5qcyc7XG5pbXBvcnQgU3ltYm9sIGZyb20gJy4vX1N5bWJvbC5qcyc7XG5pbXBvcnQgYXJyYXlFYWNoIGZyb20gJy4vX2FycmF5RWFjaC5qcyc7XG5pbXBvcnQgYXJyYXlQdXNoIGZyb20gJy4vX2FycmF5UHVzaC5qcyc7XG5pbXBvcnQgYmFzZUZvck93biBmcm9tICcuL19iYXNlRm9yT3duLmpzJztcbmltcG9ydCBiYXNlRnVuY3Rpb25zIGZyb20gJy4vX2Jhc2VGdW5jdGlvbnMuanMnO1xuaW1wb3J0IGJhc2VJbnZva2UgZnJvbSAnLi9fYmFzZUludm9rZS5qcyc7XG5pbXBvcnQgYmFzZUl0ZXJhdGVlIGZyb20gJy4vX2Jhc2VJdGVyYXRlZS5qcyc7XG5pbXBvcnQgYmFzZVJlc3QgZnJvbSAnLi9fYmFzZVJlc3QuanMnO1xuaW1wb3J0IGNyZWF0ZUh5YnJpZCBmcm9tICcuL19jcmVhdGVIeWJyaWQuanMnO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gJy4vaWRlbnRpdHkuanMnO1xuaW1wb3J0IGlzQXJyYXkgZnJvbSAnLi9pc0FycmF5LmpzJztcbmltcG9ydCBpc09iamVjdCBmcm9tICcuL2lzT2JqZWN0LmpzJztcbmltcG9ydCBrZXlzIGZyb20gJy4va2V5cy5qcyc7XG5pbXBvcnQgbGFzdCBmcm9tICcuL2xhc3QuanMnO1xuaW1wb3J0IGxhenlDbG9uZSBmcm9tICcuL19sYXp5Q2xvbmUuanMnO1xuaW1wb3J0IGxhenlSZXZlcnNlIGZyb20gJy4vX2xhenlSZXZlcnNlLmpzJztcbmltcG9ydCBsYXp5VmFsdWUgZnJvbSAnLi9fbGF6eVZhbHVlLmpzJztcbmltcG9ydCBfbWl4aW4gZnJvbSAnLi9taXhpbi5qcyc7XG5pbXBvcnQgbmVnYXRlIGZyb20gJy4vbmVnYXRlLmpzJztcbmltcG9ydCByZWFsTmFtZXMgZnJvbSAnLi9fcmVhbE5hbWVzLmpzJztcbmltcG9ydCB0aHJ1IGZyb20gJy4vdGhydS5qcyc7XG5pbXBvcnQgdG9JbnRlZ2VyIGZyb20gJy4vdG9JbnRlZ2VyLmpzJztcbmltcG9ydCBsb2Rhc2ggZnJvbSAnLi93cmFwcGVyTG9kYXNoLmpzJztcblxuLyoqIFVzZWQgYXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyLiAqL1xudmFyIFZFUlNJT04gPSAnNC4xNy4xNSc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9LRVlfRkxBRyA9IDI7XG5cbi8qKiBVc2VkIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxhenkgaXRlcmF0ZWVzLiAqL1xudmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLFxuICAgIExBWllfV0hJTEVfRkxBRyA9IDM7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLy8gd3JhcCBgXy5taXhpbmAgc28gaXQgd29ya3Mgd2hlbiBwcm92aWRlZCBvbmx5IG9uZSBhcmd1bWVudFxudmFyIG1peGluID0gKGZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgdmFyIGlzT2JqID0gaXNPYmplY3Qoc291cmNlKSxcbiAgICAgICAgICBwcm9wcyA9IGlzT2JqICYmIGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IHByb3BzICYmIHByb3BzLmxlbmd0aCAmJiBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpO1xuXG4gICAgICBpZiAoIShtZXRob2ROYW1lcyA/IG1ldGhvZE5hbWVzLmxlbmd0aCA6IGlzT2JqKSkge1xuICAgICAgICBvcHRpb25zID0gc291cmNlO1xuICAgICAgICBzb3VyY2UgPSBvYmplY3Q7XG4gICAgICAgIG9iamVjdCA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jKG9iamVjdCwgc291cmNlLCBvcHRpb25zKTtcbiAgfTtcbn0oX21peGluKSk7XG5cbi8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHdyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy5cbmxvZGFzaC5hZnRlciA9IGZ1bmMuYWZ0ZXI7XG5sb2Rhc2guYXJ5ID0gZnVuYy5hcnk7XG5sb2Rhc2guYXNzaWduID0gb2JqZWN0LmFzc2lnbjtcbmxvZGFzaC5hc3NpZ25JbiA9IG9iamVjdC5hc3NpZ25JbjtcbmxvZGFzaC5hc3NpZ25JbldpdGggPSBvYmplY3QuYXNzaWduSW5XaXRoO1xubG9kYXNoLmFzc2lnbldpdGggPSBvYmplY3QuYXNzaWduV2l0aDtcbmxvZGFzaC5hdCA9IG9iamVjdC5hdDtcbmxvZGFzaC5iZWZvcmUgPSBmdW5jLmJlZm9yZTtcbmxvZGFzaC5iaW5kID0gZnVuYy5iaW5kO1xubG9kYXNoLmJpbmRBbGwgPSB1dGlsLmJpbmRBbGw7XG5sb2Rhc2guYmluZEtleSA9IGZ1bmMuYmluZEtleTtcbmxvZGFzaC5jYXN0QXJyYXkgPSBsYW5nLmNhc3RBcnJheTtcbmxvZGFzaC5jaGFpbiA9IHNlcS5jaGFpbjtcbmxvZGFzaC5jaHVuayA9IGFycmF5LmNodW5rO1xubG9kYXNoLmNvbXBhY3QgPSBhcnJheS5jb21wYWN0O1xubG9kYXNoLmNvbmNhdCA9IGFycmF5LmNvbmNhdDtcbmxvZGFzaC5jb25kID0gdXRpbC5jb25kO1xubG9kYXNoLmNvbmZvcm1zID0gdXRpbC5jb25mb3JtcztcbmxvZGFzaC5jb25zdGFudCA9IHV0aWwuY29uc3RhbnQ7XG5sb2Rhc2guY291bnRCeSA9IGNvbGxlY3Rpb24uY291bnRCeTtcbmxvZGFzaC5jcmVhdGUgPSBvYmplY3QuY3JlYXRlO1xubG9kYXNoLmN1cnJ5ID0gZnVuYy5jdXJyeTtcbmxvZGFzaC5jdXJyeVJpZ2h0ID0gZnVuYy5jdXJyeVJpZ2h0O1xubG9kYXNoLmRlYm91bmNlID0gZnVuYy5kZWJvdW5jZTtcbmxvZGFzaC5kZWZhdWx0cyA9IG9iamVjdC5kZWZhdWx0cztcbmxvZGFzaC5kZWZhdWx0c0RlZXAgPSBvYmplY3QuZGVmYXVsdHNEZWVwO1xubG9kYXNoLmRlZmVyID0gZnVuYy5kZWZlcjtcbmxvZGFzaC5kZWxheSA9IGZ1bmMuZGVsYXk7XG5sb2Rhc2guZGlmZmVyZW5jZSA9IGFycmF5LmRpZmZlcmVuY2U7XG5sb2Rhc2guZGlmZmVyZW5jZUJ5ID0gYXJyYXkuZGlmZmVyZW5jZUJ5O1xubG9kYXNoLmRpZmZlcmVuY2VXaXRoID0gYXJyYXkuZGlmZmVyZW5jZVdpdGg7XG5sb2Rhc2guZHJvcCA9IGFycmF5LmRyb3A7XG5sb2Rhc2guZHJvcFJpZ2h0ID0gYXJyYXkuZHJvcFJpZ2h0O1xubG9kYXNoLmRyb3BSaWdodFdoaWxlID0gYXJyYXkuZHJvcFJpZ2h0V2hpbGU7XG5sb2Rhc2guZHJvcFdoaWxlID0gYXJyYXkuZHJvcFdoaWxlO1xubG9kYXNoLmZpbGwgPSBhcnJheS5maWxsO1xubG9kYXNoLmZpbHRlciA9IGNvbGxlY3Rpb24uZmlsdGVyO1xubG9kYXNoLmZsYXRNYXAgPSBjb2xsZWN0aW9uLmZsYXRNYXA7XG5sb2Rhc2guZmxhdE1hcERlZXAgPSBjb2xsZWN0aW9uLmZsYXRNYXBEZWVwO1xubG9kYXNoLmZsYXRNYXBEZXB0aCA9IGNvbGxlY3Rpb24uZmxhdE1hcERlcHRoO1xubG9kYXNoLmZsYXR0ZW4gPSBhcnJheS5mbGF0dGVuO1xubG9kYXNoLmZsYXR0ZW5EZWVwID0gYXJyYXkuZmxhdHRlbkRlZXA7XG5sb2Rhc2guZmxhdHRlbkRlcHRoID0gYXJyYXkuZmxhdHRlbkRlcHRoO1xubG9kYXNoLmZsaXAgPSBmdW5jLmZsaXA7XG5sb2Rhc2guZmxvdyA9IHV0aWwuZmxvdztcbmxvZGFzaC5mbG93UmlnaHQgPSB1dGlsLmZsb3dSaWdodDtcbmxvZGFzaC5mcm9tUGFpcnMgPSBhcnJheS5mcm9tUGFpcnM7XG5sb2Rhc2guZnVuY3Rpb25zID0gb2JqZWN0LmZ1bmN0aW9ucztcbmxvZGFzaC5mdW5jdGlvbnNJbiA9IG9iamVjdC5mdW5jdGlvbnNJbjtcbmxvZGFzaC5ncm91cEJ5ID0gY29sbGVjdGlvbi5ncm91cEJ5O1xubG9kYXNoLmluaXRpYWwgPSBhcnJheS5pbml0aWFsO1xubG9kYXNoLmludGVyc2VjdGlvbiA9IGFycmF5LmludGVyc2VjdGlvbjtcbmxvZGFzaC5pbnRlcnNlY3Rpb25CeSA9IGFycmF5LmludGVyc2VjdGlvbkJ5O1xubG9kYXNoLmludGVyc2VjdGlvbldpdGggPSBhcnJheS5pbnRlcnNlY3Rpb25XaXRoO1xubG9kYXNoLmludmVydCA9IG9iamVjdC5pbnZlcnQ7XG5sb2Rhc2guaW52ZXJ0QnkgPSBvYmplY3QuaW52ZXJ0Qnk7XG5sb2Rhc2guaW52b2tlTWFwID0gY29sbGVjdGlvbi5pbnZva2VNYXA7XG5sb2Rhc2guaXRlcmF0ZWUgPSB1dGlsLml0ZXJhdGVlO1xubG9kYXNoLmtleUJ5ID0gY29sbGVjdGlvbi5rZXlCeTtcbmxvZGFzaC5rZXlzID0ga2V5cztcbmxvZGFzaC5rZXlzSW4gPSBvYmplY3Qua2V5c0luO1xubG9kYXNoLm1hcCA9IGNvbGxlY3Rpb24ubWFwO1xubG9kYXNoLm1hcEtleXMgPSBvYmplY3QubWFwS2V5cztcbmxvZGFzaC5tYXBWYWx1ZXMgPSBvYmplY3QubWFwVmFsdWVzO1xubG9kYXNoLm1hdGNoZXMgPSB1dGlsLm1hdGNoZXM7XG5sb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gdXRpbC5tYXRjaGVzUHJvcGVydHk7XG5sb2Rhc2gubWVtb2l6ZSA9IGZ1bmMubWVtb2l6ZTtcbmxvZGFzaC5tZXJnZSA9IG9iamVjdC5tZXJnZTtcbmxvZGFzaC5tZXJnZVdpdGggPSBvYmplY3QubWVyZ2VXaXRoO1xubG9kYXNoLm1ldGhvZCA9IHV0aWwubWV0aG9kO1xubG9kYXNoLm1ldGhvZE9mID0gdXRpbC5tZXRob2RPZjtcbmxvZGFzaC5taXhpbiA9IG1peGluO1xubG9kYXNoLm5lZ2F0ZSA9IG5lZ2F0ZTtcbmxvZGFzaC5udGhBcmcgPSB1dGlsLm50aEFyZztcbmxvZGFzaC5vbWl0ID0gb2JqZWN0Lm9taXQ7XG5sb2Rhc2gub21pdEJ5ID0gb2JqZWN0Lm9taXRCeTtcbmxvZGFzaC5vbmNlID0gZnVuYy5vbmNlO1xubG9kYXNoLm9yZGVyQnkgPSBjb2xsZWN0aW9uLm9yZGVyQnk7XG5sb2Rhc2gub3ZlciA9IHV0aWwub3ZlcjtcbmxvZGFzaC5vdmVyQXJncyA9IGZ1bmMub3ZlckFyZ3M7XG5sb2Rhc2gub3ZlckV2ZXJ5ID0gdXRpbC5vdmVyRXZlcnk7XG5sb2Rhc2gub3ZlclNvbWUgPSB1dGlsLm92ZXJTb21lO1xubG9kYXNoLnBhcnRpYWwgPSBmdW5jLnBhcnRpYWw7XG5sb2Rhc2gucGFydGlhbFJpZ2h0ID0gZnVuYy5wYXJ0aWFsUmlnaHQ7XG5sb2Rhc2gucGFydGl0aW9uID0gY29sbGVjdGlvbi5wYXJ0aXRpb247XG5sb2Rhc2gucGljayA9IG9iamVjdC5waWNrO1xubG9kYXNoLnBpY2tCeSA9IG9iamVjdC5waWNrQnk7XG5sb2Rhc2gucHJvcGVydHkgPSB1dGlsLnByb3BlcnR5O1xubG9kYXNoLnByb3BlcnR5T2YgPSB1dGlsLnByb3BlcnR5T2Y7XG5sb2Rhc2gucHVsbCA9IGFycmF5LnB1bGw7XG5sb2Rhc2gucHVsbEFsbCA9IGFycmF5LnB1bGxBbGw7XG5sb2Rhc2gucHVsbEFsbEJ5ID0gYXJyYXkucHVsbEFsbEJ5O1xubG9kYXNoLnB1bGxBbGxXaXRoID0gYXJyYXkucHVsbEFsbFdpdGg7XG5sb2Rhc2gucHVsbEF0ID0gYXJyYXkucHVsbEF0O1xubG9kYXNoLnJhbmdlID0gdXRpbC5yYW5nZTtcbmxvZGFzaC5yYW5nZVJpZ2h0ID0gdXRpbC5yYW5nZVJpZ2h0O1xubG9kYXNoLnJlYXJnID0gZnVuYy5yZWFyZztcbmxvZGFzaC5yZWplY3QgPSBjb2xsZWN0aW9uLnJlamVjdDtcbmxvZGFzaC5yZW1vdmUgPSBhcnJheS5yZW1vdmU7XG5sb2Rhc2gucmVzdCA9IGZ1bmMucmVzdDtcbmxvZGFzaC5yZXZlcnNlID0gYXJyYXkucmV2ZXJzZTtcbmxvZGFzaC5zYW1wbGVTaXplID0gY29sbGVjdGlvbi5zYW1wbGVTaXplO1xubG9kYXNoLnNldCA9IG9iamVjdC5zZXQ7XG5sb2Rhc2guc2V0V2l0aCA9IG9iamVjdC5zZXRXaXRoO1xubG9kYXNoLnNodWZmbGUgPSBjb2xsZWN0aW9uLnNodWZmbGU7XG5sb2Rhc2guc2xpY2UgPSBhcnJheS5zbGljZTtcbmxvZGFzaC5zb3J0QnkgPSBjb2xsZWN0aW9uLnNvcnRCeTtcbmxvZGFzaC5zb3J0ZWRVbmlxID0gYXJyYXkuc29ydGVkVW5pcTtcbmxvZGFzaC5zb3J0ZWRVbmlxQnkgPSBhcnJheS5zb3J0ZWRVbmlxQnk7XG5sb2Rhc2guc3BsaXQgPSBzdHJpbmcuc3BsaXQ7XG5sb2Rhc2guc3ByZWFkID0gZnVuYy5zcHJlYWQ7XG5sb2Rhc2gudGFpbCA9IGFycmF5LnRhaWw7XG5sb2Rhc2gudGFrZSA9IGFycmF5LnRha2U7XG5sb2Rhc2gudGFrZVJpZ2h0ID0gYXJyYXkudGFrZVJpZ2h0O1xubG9kYXNoLnRha2VSaWdodFdoaWxlID0gYXJyYXkudGFrZVJpZ2h0V2hpbGU7XG5sb2Rhc2gudGFrZVdoaWxlID0gYXJyYXkudGFrZVdoaWxlO1xubG9kYXNoLnRhcCA9IHNlcS50YXA7XG5sb2Rhc2gudGhyb3R0bGUgPSBmdW5jLnRocm90dGxlO1xubG9kYXNoLnRocnUgPSB0aHJ1O1xubG9kYXNoLnRvQXJyYXkgPSBsYW5nLnRvQXJyYXk7XG5sb2Rhc2gudG9QYWlycyA9IG9iamVjdC50b1BhaXJzO1xubG9kYXNoLnRvUGFpcnNJbiA9IG9iamVjdC50b1BhaXJzSW47XG5sb2Rhc2gudG9QYXRoID0gdXRpbC50b1BhdGg7XG5sb2Rhc2gudG9QbGFpbk9iamVjdCA9IGxhbmcudG9QbGFpbk9iamVjdDtcbmxvZGFzaC50cmFuc2Zvcm0gPSBvYmplY3QudHJhbnNmb3JtO1xubG9kYXNoLnVuYXJ5ID0gZnVuYy51bmFyeTtcbmxvZGFzaC51bmlvbiA9IGFycmF5LnVuaW9uO1xubG9kYXNoLnVuaW9uQnkgPSBhcnJheS51bmlvbkJ5O1xubG9kYXNoLnVuaW9uV2l0aCA9IGFycmF5LnVuaW9uV2l0aDtcbmxvZGFzaC51bmlxID0gYXJyYXkudW5pcTtcbmxvZGFzaC51bmlxQnkgPSBhcnJheS51bmlxQnk7XG5sb2Rhc2gudW5pcVdpdGggPSBhcnJheS51bmlxV2l0aDtcbmxvZGFzaC51bnNldCA9IG9iamVjdC51bnNldDtcbmxvZGFzaC51bnppcCA9IGFycmF5LnVuemlwO1xubG9kYXNoLnVuemlwV2l0aCA9IGFycmF5LnVuemlwV2l0aDtcbmxvZGFzaC51cGRhdGUgPSBvYmplY3QudXBkYXRlO1xubG9kYXNoLnVwZGF0ZVdpdGggPSBvYmplY3QudXBkYXRlV2l0aDtcbmxvZGFzaC52YWx1ZXMgPSBvYmplY3QudmFsdWVzO1xubG9kYXNoLnZhbHVlc0luID0gb2JqZWN0LnZhbHVlc0luO1xubG9kYXNoLndpdGhvdXQgPSBhcnJheS53aXRob3V0O1xubG9kYXNoLndvcmRzID0gc3RyaW5nLndvcmRzO1xubG9kYXNoLndyYXAgPSBmdW5jLndyYXA7XG5sb2Rhc2gueG9yID0gYXJyYXkueG9yO1xubG9kYXNoLnhvckJ5ID0gYXJyYXkueG9yQnk7XG5sb2Rhc2gueG9yV2l0aCA9IGFycmF5LnhvcldpdGg7XG5sb2Rhc2guemlwID0gYXJyYXkuemlwO1xubG9kYXNoLnppcE9iamVjdCA9IGFycmF5LnppcE9iamVjdDtcbmxvZGFzaC56aXBPYmplY3REZWVwID0gYXJyYXkuemlwT2JqZWN0RGVlcDtcbmxvZGFzaC56aXBXaXRoID0gYXJyYXkuemlwV2l0aDtcblxuLy8gQWRkIGFsaWFzZXMuXG5sb2Rhc2guZW50cmllcyA9IG9iamVjdC50b1BhaXJzO1xubG9kYXNoLmVudHJpZXNJbiA9IG9iamVjdC50b1BhaXJzSW47XG5sb2Rhc2guZXh0ZW5kID0gb2JqZWN0LmFzc2lnbkluO1xubG9kYXNoLmV4dGVuZFdpdGggPSBvYmplY3QuYXNzaWduSW5XaXRoO1xuXG4vLyBBZGQgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG5taXhpbihsb2Rhc2gsIGxvZGFzaCk7XG5cbi8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2VxdWVuY2VzLlxubG9kYXNoLmFkZCA9IG1hdGguYWRkO1xubG9kYXNoLmF0dGVtcHQgPSB1dGlsLmF0dGVtcHQ7XG5sb2Rhc2guY2FtZWxDYXNlID0gc3RyaW5nLmNhbWVsQ2FzZTtcbmxvZGFzaC5jYXBpdGFsaXplID0gc3RyaW5nLmNhcGl0YWxpemU7XG5sb2Rhc2guY2VpbCA9IG1hdGguY2VpbDtcbmxvZGFzaC5jbGFtcCA9IG51bWJlci5jbGFtcDtcbmxvZGFzaC5jbG9uZSA9IGxhbmcuY2xvbmU7XG5sb2Rhc2guY2xvbmVEZWVwID0gbGFuZy5jbG9uZURlZXA7XG5sb2Rhc2guY2xvbmVEZWVwV2l0aCA9IGxhbmcuY2xvbmVEZWVwV2l0aDtcbmxvZGFzaC5jbG9uZVdpdGggPSBsYW5nLmNsb25lV2l0aDtcbmxvZGFzaC5jb25mb3Jtc1RvID0gbGFuZy5jb25mb3Jtc1RvO1xubG9kYXNoLmRlYnVyciA9IHN0cmluZy5kZWJ1cnI7XG5sb2Rhc2guZGVmYXVsdFRvID0gdXRpbC5kZWZhdWx0VG87XG5sb2Rhc2guZGl2aWRlID0gbWF0aC5kaXZpZGU7XG5sb2Rhc2guZW5kc1dpdGggPSBzdHJpbmcuZW5kc1dpdGg7XG5sb2Rhc2guZXEgPSBsYW5nLmVxO1xubG9kYXNoLmVzY2FwZSA9IHN0cmluZy5lc2NhcGU7XG5sb2Rhc2guZXNjYXBlUmVnRXhwID0gc3RyaW5nLmVzY2FwZVJlZ0V4cDtcbmxvZGFzaC5ldmVyeSA9IGNvbGxlY3Rpb24uZXZlcnk7XG5sb2Rhc2guZmluZCA9IGNvbGxlY3Rpb24uZmluZDtcbmxvZGFzaC5maW5kSW5kZXggPSBhcnJheS5maW5kSW5kZXg7XG5sb2Rhc2guZmluZEtleSA9IG9iamVjdC5maW5kS2V5O1xubG9kYXNoLmZpbmRMYXN0ID0gY29sbGVjdGlvbi5maW5kTGFzdDtcbmxvZGFzaC5maW5kTGFzdEluZGV4ID0gYXJyYXkuZmluZExhc3RJbmRleDtcbmxvZGFzaC5maW5kTGFzdEtleSA9IG9iamVjdC5maW5kTGFzdEtleTtcbmxvZGFzaC5mbG9vciA9IG1hdGguZmxvb3I7XG5sb2Rhc2guZm9yRWFjaCA9IGNvbGxlY3Rpb24uZm9yRWFjaDtcbmxvZGFzaC5mb3JFYWNoUmlnaHQgPSBjb2xsZWN0aW9uLmZvckVhY2hSaWdodDtcbmxvZGFzaC5mb3JJbiA9IG9iamVjdC5mb3JJbjtcbmxvZGFzaC5mb3JJblJpZ2h0ID0gb2JqZWN0LmZvckluUmlnaHQ7XG5sb2Rhc2guZm9yT3duID0gb2JqZWN0LmZvck93bjtcbmxvZGFzaC5mb3JPd25SaWdodCA9IG9iamVjdC5mb3JPd25SaWdodDtcbmxvZGFzaC5nZXQgPSBvYmplY3QuZ2V0O1xubG9kYXNoLmd0ID0gbGFuZy5ndDtcbmxvZGFzaC5ndGUgPSBsYW5nLmd0ZTtcbmxvZGFzaC5oYXMgPSBvYmplY3QuaGFzO1xubG9kYXNoLmhhc0luID0gb2JqZWN0Lmhhc0luO1xubG9kYXNoLmhlYWQgPSBhcnJheS5oZWFkO1xubG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7XG5sb2Rhc2guaW5jbHVkZXMgPSBjb2xsZWN0aW9uLmluY2x1ZGVzO1xubG9kYXNoLmluZGV4T2YgPSBhcnJheS5pbmRleE9mO1xubG9kYXNoLmluUmFuZ2UgPSBudW1iZXIuaW5SYW5nZTtcbmxvZGFzaC5pbnZva2UgPSBvYmplY3QuaW52b2tlO1xubG9kYXNoLmlzQXJndW1lbnRzID0gbGFuZy5pc0FyZ3VtZW50cztcbmxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTtcbmxvZGFzaC5pc0FycmF5QnVmZmVyID0gbGFuZy5pc0FycmF5QnVmZmVyO1xubG9kYXNoLmlzQXJyYXlMaWtlID0gbGFuZy5pc0FycmF5TGlrZTtcbmxvZGFzaC5pc0FycmF5TGlrZU9iamVjdCA9IGxhbmcuaXNBcnJheUxpa2VPYmplY3Q7XG5sb2Rhc2guaXNCb29sZWFuID0gbGFuZy5pc0Jvb2xlYW47XG5sb2Rhc2guaXNCdWZmZXIgPSBsYW5nLmlzQnVmZmVyO1xubG9kYXNoLmlzRGF0ZSA9IGxhbmcuaXNEYXRlO1xubG9kYXNoLmlzRWxlbWVudCA9IGxhbmcuaXNFbGVtZW50O1xubG9kYXNoLmlzRW1wdHkgPSBsYW5nLmlzRW1wdHk7XG5sb2Rhc2guaXNFcXVhbCA9IGxhbmcuaXNFcXVhbDtcbmxvZGFzaC5pc0VxdWFsV2l0aCA9IGxhbmcuaXNFcXVhbFdpdGg7XG5sb2Rhc2guaXNFcnJvciA9IGxhbmcuaXNFcnJvcjtcbmxvZGFzaC5pc0Zpbml0ZSA9IGxhbmcuaXNGaW5pdGU7XG5sb2Rhc2guaXNGdW5jdGlvbiA9IGxhbmcuaXNGdW5jdGlvbjtcbmxvZGFzaC5pc0ludGVnZXIgPSBsYW5nLmlzSW50ZWdlcjtcbmxvZGFzaC5pc0xlbmd0aCA9IGxhbmcuaXNMZW5ndGg7XG5sb2Rhc2guaXNNYXAgPSBsYW5nLmlzTWFwO1xubG9kYXNoLmlzTWF0Y2ggPSBsYW5nLmlzTWF0Y2g7XG5sb2Rhc2guaXNNYXRjaFdpdGggPSBsYW5nLmlzTWF0Y2hXaXRoO1xubG9kYXNoLmlzTmFOID0gbGFuZy5pc05hTjtcbmxvZGFzaC5pc05hdGl2ZSA9IGxhbmcuaXNOYXRpdmU7XG5sb2Rhc2guaXNOaWwgPSBsYW5nLmlzTmlsO1xubG9kYXNoLmlzTnVsbCA9IGxhbmcuaXNOdWxsO1xubG9kYXNoLmlzTnVtYmVyID0gbGFuZy5pc051bWJlcjtcbmxvZGFzaC5pc09iamVjdCA9IGlzT2JqZWN0O1xubG9kYXNoLmlzT2JqZWN0TGlrZSA9IGxhbmcuaXNPYmplY3RMaWtlO1xubG9kYXNoLmlzUGxhaW5PYmplY3QgPSBsYW5nLmlzUGxhaW5PYmplY3Q7XG5sb2Rhc2guaXNSZWdFeHAgPSBsYW5nLmlzUmVnRXhwO1xubG9kYXNoLmlzU2FmZUludGVnZXIgPSBsYW5nLmlzU2FmZUludGVnZXI7XG5sb2Rhc2guaXNTZXQgPSBsYW5nLmlzU2V0O1xubG9kYXNoLmlzU3RyaW5nID0gbGFuZy5pc1N0cmluZztcbmxvZGFzaC5pc1N5bWJvbCA9IGxhbmcuaXNTeW1ib2w7XG5sb2Rhc2guaXNUeXBlZEFycmF5ID0gbGFuZy5pc1R5cGVkQXJyYXk7XG5sb2Rhc2guaXNVbmRlZmluZWQgPSBsYW5nLmlzVW5kZWZpbmVkO1xubG9kYXNoLmlzV2Vha01hcCA9IGxhbmcuaXNXZWFrTWFwO1xubG9kYXNoLmlzV2Vha1NldCA9IGxhbmcuaXNXZWFrU2V0O1xubG9kYXNoLmpvaW4gPSBhcnJheS5qb2luO1xubG9kYXNoLmtlYmFiQ2FzZSA9IHN0cmluZy5rZWJhYkNhc2U7XG5sb2Rhc2gubGFzdCA9IGxhc3Q7XG5sb2Rhc2gubGFzdEluZGV4T2YgPSBhcnJheS5sYXN0SW5kZXhPZjtcbmxvZGFzaC5sb3dlckNhc2UgPSBzdHJpbmcubG93ZXJDYXNlO1xubG9kYXNoLmxvd2VyRmlyc3QgPSBzdHJpbmcubG93ZXJGaXJzdDtcbmxvZGFzaC5sdCA9IGxhbmcubHQ7XG5sb2Rhc2gubHRlID0gbGFuZy5sdGU7XG5sb2Rhc2gubWF4ID0gbWF0aC5tYXg7XG5sb2Rhc2gubWF4QnkgPSBtYXRoLm1heEJ5O1xubG9kYXNoLm1lYW4gPSBtYXRoLm1lYW47XG5sb2Rhc2gubWVhbkJ5ID0gbWF0aC5tZWFuQnk7XG5sb2Rhc2gubWluID0gbWF0aC5taW47XG5sb2Rhc2gubWluQnkgPSBtYXRoLm1pbkJ5O1xubG9kYXNoLnN0dWJBcnJheSA9IHV0aWwuc3R1YkFycmF5O1xubG9kYXNoLnN0dWJGYWxzZSA9IHV0aWwuc3R1YkZhbHNlO1xubG9kYXNoLnN0dWJPYmplY3QgPSB1dGlsLnN0dWJPYmplY3Q7XG5sb2Rhc2guc3R1YlN0cmluZyA9IHV0aWwuc3R1YlN0cmluZztcbmxvZGFzaC5zdHViVHJ1ZSA9IHV0aWwuc3R1YlRydWU7XG5sb2Rhc2gubXVsdGlwbHkgPSBtYXRoLm11bHRpcGx5O1xubG9kYXNoLm50aCA9IGFycmF5Lm50aDtcbmxvZGFzaC5ub29wID0gdXRpbC5ub29wO1xubG9kYXNoLm5vdyA9IGRhdGUubm93O1xubG9kYXNoLnBhZCA9IHN0cmluZy5wYWQ7XG5sb2Rhc2gucGFkRW5kID0gc3RyaW5nLnBhZEVuZDtcbmxvZGFzaC5wYWRTdGFydCA9IHN0cmluZy5wYWRTdGFydDtcbmxvZGFzaC5wYXJzZUludCA9IHN0cmluZy5wYXJzZUludDtcbmxvZGFzaC5yYW5kb20gPSBudW1iZXIucmFuZG9tO1xubG9kYXNoLnJlZHVjZSA9IGNvbGxlY3Rpb24ucmVkdWNlO1xubG9kYXNoLnJlZHVjZVJpZ2h0ID0gY29sbGVjdGlvbi5yZWR1Y2VSaWdodDtcbmxvZGFzaC5yZXBlYXQgPSBzdHJpbmcucmVwZWF0O1xubG9kYXNoLnJlcGxhY2UgPSBzdHJpbmcucmVwbGFjZTtcbmxvZGFzaC5yZXN1bHQgPSBvYmplY3QucmVzdWx0O1xubG9kYXNoLnJvdW5kID0gbWF0aC5yb3VuZDtcbmxvZGFzaC5zYW1wbGUgPSBjb2xsZWN0aW9uLnNhbXBsZTtcbmxvZGFzaC5zaXplID0gY29sbGVjdGlvbi5zaXplO1xubG9kYXNoLnNuYWtlQ2FzZSA9IHN0cmluZy5zbmFrZUNhc2U7XG5sb2Rhc2guc29tZSA9IGNvbGxlY3Rpb24uc29tZTtcbmxvZGFzaC5zb3J0ZWRJbmRleCA9IGFycmF5LnNvcnRlZEluZGV4O1xubG9kYXNoLnNvcnRlZEluZGV4QnkgPSBhcnJheS5zb3J0ZWRJbmRleEJ5O1xubG9kYXNoLnNvcnRlZEluZGV4T2YgPSBhcnJheS5zb3J0ZWRJbmRleE9mO1xubG9kYXNoLnNvcnRlZExhc3RJbmRleCA9IGFycmF5LnNvcnRlZExhc3RJbmRleDtcbmxvZGFzaC5zb3J0ZWRMYXN0SW5kZXhCeSA9IGFycmF5LnNvcnRlZExhc3RJbmRleEJ5O1xubG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gYXJyYXkuc29ydGVkTGFzdEluZGV4T2Y7XG5sb2Rhc2guc3RhcnRDYXNlID0gc3RyaW5nLnN0YXJ0Q2FzZTtcbmxvZGFzaC5zdGFydHNXaXRoID0gc3RyaW5nLnN0YXJ0c1dpdGg7XG5sb2Rhc2guc3VidHJhY3QgPSBtYXRoLnN1YnRyYWN0O1xubG9kYXNoLnN1bSA9IG1hdGguc3VtO1xubG9kYXNoLnN1bUJ5ID0gbWF0aC5zdW1CeTtcbmxvZGFzaC50ZW1wbGF0ZSA9IHN0cmluZy50ZW1wbGF0ZTtcbmxvZGFzaC50aW1lcyA9IHV0aWwudGltZXM7XG5sb2Rhc2gudG9GaW5pdGUgPSBsYW5nLnRvRmluaXRlO1xubG9kYXNoLnRvSW50ZWdlciA9IHRvSW50ZWdlcjtcbmxvZGFzaC50b0xlbmd0aCA9IGxhbmcudG9MZW5ndGg7XG5sb2Rhc2gudG9Mb3dlciA9IHN0cmluZy50b0xvd2VyO1xubG9kYXNoLnRvTnVtYmVyID0gbGFuZy50b051bWJlcjtcbmxvZGFzaC50b1NhZmVJbnRlZ2VyID0gbGFuZy50b1NhZmVJbnRlZ2VyO1xubG9kYXNoLnRvU3RyaW5nID0gbGFuZy50b1N0cmluZztcbmxvZGFzaC50b1VwcGVyID0gc3RyaW5nLnRvVXBwZXI7XG5sb2Rhc2gudHJpbSA9IHN0cmluZy50cmltO1xubG9kYXNoLnRyaW1FbmQgPSBzdHJpbmcudHJpbUVuZDtcbmxvZGFzaC50cmltU3RhcnQgPSBzdHJpbmcudHJpbVN0YXJ0O1xubG9kYXNoLnRydW5jYXRlID0gc3RyaW5nLnRydW5jYXRlO1xubG9kYXNoLnVuZXNjYXBlID0gc3RyaW5nLnVuZXNjYXBlO1xubG9kYXNoLnVuaXF1ZUlkID0gdXRpbC51bmlxdWVJZDtcbmxvZGFzaC51cHBlckNhc2UgPSBzdHJpbmcudXBwZXJDYXNlO1xubG9kYXNoLnVwcGVyRmlyc3QgPSBzdHJpbmcudXBwZXJGaXJzdDtcblxuLy8gQWRkIGFsaWFzZXMuXG5sb2Rhc2guZWFjaCA9IGNvbGxlY3Rpb24uZm9yRWFjaDtcbmxvZGFzaC5lYWNoUmlnaHQgPSBjb2xsZWN0aW9uLmZvckVhY2hSaWdodDtcbmxvZGFzaC5maXJzdCA9IGFycmF5LmhlYWQ7XG5cbm1peGluKGxvZGFzaCwgKGZ1bmN0aW9uKCkge1xuICB2YXIgc291cmNlID0ge307XG4gIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsIG1ldGhvZE5hbWUpKSB7XG4gICAgICBzb3VyY2VbbWV0aG9kTmFtZV0gPSBmdW5jO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzb3VyY2U7XG59KCkpLCB7ICdjaGFpbic6IGZhbHNlIH0pO1xuXG4vKipcbiAqIFRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xubG9kYXNoLlZFUlNJT04gPSBWRVJTSU9OO1xuKGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzID0gc3RyaW5nLnRlbXBsYXRlU2V0dGluZ3MpLmltcG9ydHMuXyA9IGxvZGFzaDtcblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuYXJyYXlFYWNoKFsnYmluZCcsICdiaW5kS2V5JywgJ2N1cnJ5JywgJ2N1cnJ5UmlnaHQnLCAncGFydGlhbCcsICdwYXJ0aWFsUmlnaHQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG59KTtcblxuLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRha2VgIHZhcmlhbnRzLlxuYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKG4pIHtcbiAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5hdGl2ZU1heCh0b0ludGVnZXIobiksIDApO1xuXG4gICAgdmFyIHJlc3VsdCA9ICh0aGlzLl9fZmlsdGVyZWRfXyAmJiAhaW5kZXgpXG4gICAgICA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKVxuICAgICAgOiB0aGlzLmNsb25lKCk7XG5cbiAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXykge1xuICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSBuYXRpdmVNaW4obiwgcmVzdWx0Ll9fdGFrZUNvdW50X18pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQuX192aWV3c19fLnB1c2goe1xuICAgICAgICAnc2l6ZSc6IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKSxcbiAgICAgICAgJ3R5cGUnOiBtZXRob2ROYW1lICsgKHJlc3VsdC5fX2Rpcl9fIDwgMCA/ICdSaWdodCcgOiAnJylcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lICsgJ1JpZ2h0J10gPSBmdW5jdGlvbihuKSB7XG4gICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTtcbiAgfTtcbn0pO1xuXG4vLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRoYXQgYWNjZXB0IGFuIGBpdGVyYXRlZWAgdmFsdWUuXG5hcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgdHlwZSA9IGluZGV4ICsgMSxcbiAgICAgIGlzRmlsdGVyID0gdHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHIHx8IHR5cGUgPT0gTEFaWV9XSElMRV9GTEFHO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXN1bHQuX19pdGVyYXRlZXNfXy5wdXNoKHtcbiAgICAgICdpdGVyYXRlZSc6IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyksXG4gICAgICAndHlwZSc6IHR5cGVcbiAgICB9KTtcbiAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSk7XG5cbi8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmhlYWRgIGFuZCBgXy5sYXN0YC5cbmFycmF5RWFjaChbJ2hlYWQnLCAnbGFzdCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5kZXggPyAnUmlnaHQnIDogJycpO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzW3Rha2VOYW1lXSgxKS52YWx1ZSgpWzBdO1xuICB9O1xufSk7XG5cbi8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy50YWlsYC5cbmFycmF5RWFjaChbJ2luaXRpYWwnLCAndGFpbCddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICB2YXIgZHJvcE5hbWUgPSAnZHJvcCcgKyAoaW5kZXggPyAnJyA6ICdSaWdodCcpO1xuXG4gIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5hbWVdKDEpO1xuICB9O1xufSk7XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICByZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbn07XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5pbnZva2VNYXAgPSBiYXNlUmVzdChmdW5jdGlvbihwYXRoLCBhcmdzKSB7XG4gIGlmICh0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgfVxuICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gYmFzZUludm9rZSh2YWx1ZSwgcGF0aCwgYXJncyk7XG4gIH0pO1xufSk7XG5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgcmV0dXJuIHRoaXMuZmlsdGVyKG5lZ2F0ZShiYXNlSXRlcmF0ZWUocHJlZGljYXRlKSkpO1xufTtcblxuTGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXM7XG4gIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICByZXR1cm4gbmV3IExhenlXcmFwcGVyKHJlc3VsdCk7XG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC50YWtlUmlnaHQoLXN0YXJ0KTtcbiAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgfVxuICBpZiAoZW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0b0ludGVnZXIoZW5kKTtcbiAgICByZXN1bHQgPSBlbmQgPCAwID8gcmVzdWx0LmRyb3BSaWdodCgtZW5kKSA6IHJlc3VsdC50YWtlKGVuZCAtIHN0YXJ0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCk7XG59O1xuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50YWtlKE1BWF9BUlJBWV9MRU5HVEgpO1xufTtcblxuLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG5iYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICB2YXIgY2hlY2tJdGVyYXRlZSA9IC9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLFxuICAgICAgaXNUYWtlciA9IC9eKD86aGVhZHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksXG4gICAgICBsb2Rhc2hGdW5jID0gbG9kYXNoW2lzVGFrZXIgPyAoJ3Rha2UnICsgKG1ldGhvZE5hbWUgPT0gJ2xhc3QnID8gJ1JpZ2h0JyA6ICcnKSkgOiBtZXRob2ROYW1lXSxcbiAgICAgIHJldFVud3JhcHBlZCA9IGlzVGFrZXIgfHwgL15maW5kLy50ZXN0KG1ldGhvZE5hbWUpO1xuXG4gIGlmICghbG9kYXNoRnVuYykge1xuICAgIHJldHVybjtcbiAgfVxuICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgYXJncyA9IGlzVGFrZXIgPyBbMV0gOiBhcmd1bWVudHMsXG4gICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsXG4gICAgICAgIGl0ZXJhdGVlID0gYXJnc1swXSxcbiAgICAgICAgdXNlTGF6eSA9IGlzTGF6eSB8fCBpc0FycmF5KHZhbHVlKTtcblxuICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICByZXR1cm4gKGlzVGFrZXIgJiYgY2hhaW5BbGwpID8gcmVzdWx0WzBdIDogcmVzdWx0O1xuICAgIH07XG5cbiAgICBpZiAodXNlTGF6eSAmJiBjaGVja0l0ZXJhdGVlICYmIHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIGl0ZXJhdGVlLmxlbmd0aCAhPSAxKSB7XG4gICAgICAvLyBBdm9pZCBsYXp5IHVzZSBpZiB0aGUgaXRlcmF0ZWUgaGFzIGEgXCJsZW5ndGhcIiB2YWx1ZSBvdGhlciB0aGFuIGAxYC5cbiAgICAgIGlzTGF6eSA9IHVzZUxhenkgPSBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX18sXG4gICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxcbiAgICAgICAgaXNVbndyYXBwZWQgPSByZXRVbndyYXBwZWQgJiYgIWNoYWluQWxsLFxuICAgICAgICBvbmx5TGF6eSA9IGlzTGF6eSAmJiAhaXNIeWJyaWQ7XG5cbiAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7XG4gICAgICB2YWx1ZSA9IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICB9XG4gICAgaWYgKGlzVW53cmFwcGVkICYmIG9ubHlMYXp5KSB7XG4gICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgcmVzdWx0ID0gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgICByZXR1cm4gaXNVbndyYXBwZWQgPyAoaXNUYWtlciA/IHJlc3VsdC52YWx1ZSgpWzBdIDogcmVzdWx0LnZhbHVlKCkpIDogcmVzdWx0O1xuICB9O1xufSk7XG5cbi8vIEFkZCBgQXJyYXlgIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuYXJyYXlFYWNoKFsncG9wJywgJ3B1c2gnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gIHZhciBmdW5jID0gYXJyYXlQcm90b1ttZXRob2ROYW1lXSxcbiAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgcmV0VW53cmFwcGVkID0gL14oPzpwb3B8c2hpZnQpJC8udGVzdChtZXRob2ROYW1lKTtcblxuICBsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJldFVud3JhcHBlZCAmJiAhdGhpcy5fX2NoYWluX18pIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgfSk7XG4gIH07XG59KTtcblxuLy8gTWFwIG1pbmlmaWVkIG1ldGhvZCBuYW1lcyB0byB0aGVpciByZWFsIG5hbWVzLlxuYmFzZUZvck93bihMYXp5V3JhcHBlci5wcm90b3R5cGUsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgdmFyIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbbWV0aG9kTmFtZV07XG4gIGlmIChsb2Rhc2hGdW5jKSB7XG4gICAgdmFyIGtleSA9IGxvZGFzaEZ1bmMubmFtZSArICcnO1xuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIGtleSkpIHtcbiAgICAgIHJlYWxOYW1lc1trZXldID0gW107XG4gICAgfVxuICAgIHJlYWxOYW1lc1trZXldLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgfVxufSk7XG5cbnJlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLCBXUkFQX0JJTkRfS0VZX0ZMQUcpLm5hbWVdID0gW3tcbiAgJ25hbWUnOiAnd3JhcHBlcicsXG4gICdmdW5jJzogdW5kZWZpbmVkXG59XTtcblxuLy8gQWRkIG1ldGhvZHMgdG8gYExhenlXcmFwcGVyYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUudmFsdWUgPSBsYXp5VmFsdWU7XG5cbi8vIEFkZCBjaGFpbiBzZXF1ZW5jZSBtZXRob2RzIHRvIHRoZSBgbG9kYXNoYCB3cmFwcGVyLlxubG9kYXNoLnByb3RvdHlwZS5hdCA9IHNlcS5hdDtcbmxvZGFzaC5wcm90b3R5cGUuY2hhaW4gPSBzZXEud3JhcHBlckNoYWluO1xubG9kYXNoLnByb3RvdHlwZS5jb21taXQgPSBzZXEuY29tbWl0O1xubG9kYXNoLnByb3RvdHlwZS5uZXh0ID0gc2VxLm5leHQ7XG5sb2Rhc2gucHJvdG90eXBlLnBsYW50ID0gc2VxLnBsYW50O1xubG9kYXNoLnByb3RvdHlwZS5yZXZlcnNlID0gc2VxLnJldmVyc2U7XG5sb2Rhc2gucHJvdG90eXBlLnRvSlNPTiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWVPZiA9IGxvZGFzaC5wcm90b3R5cGUudmFsdWUgPSBzZXEudmFsdWU7XG5cbi8vIEFkZCBsYXp5IGFsaWFzZXMuXG5sb2Rhc2gucHJvdG90eXBlLmZpcnN0ID0gbG9kYXNoLnByb3RvdHlwZS5oZWFkO1xuXG5pZiAoc3ltSXRlcmF0b3IpIHtcbiAgbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl0gPSBzZXEudG9JdGVyYXRvcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbG9kYXNoO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/coolMdEditor.css b/dist/coolMdEditor.css deleted file mode 100644 index a3d04ba..0000000 --- a/dist/coolMdEditor.css +++ /dev/null @@ -1 +0,0 @@ -:root{--blue:#007bff;--breakpoint-lg:992px;--breakpoint-md:768px;--breakpoint-sm:576px;--breakpoint-xl:1200px;--breakpoint-xs:0;--cyan:#17a2b8;--danger:#dc3545;--dark:#343a40;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--gray:#6c757d;--gray-dark:#343a40;--green:#28a745;--indigo:#6610f2;--info:#17a2b8;--light:#f8f9fa;--orange:#fd7e14;--pink:#e83e8c;--primary:#007bff;--purple:#6f42c1;--red:#dc3545;--secondary:#6c757d;--success:#28a745;--teal:#20c997;--warning:#ffc107;--white:#fff;--yellow:#ffc107}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{-ms-overflow-style:scrollbar;-ms-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;font-family:sans-serif;line-height:1.15}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{background-color:#fff;color:#212529;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-weight:400;line-height:1.5;margin:0;text-align:left}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6,p{margin-top:0}abbr[data-original-title],abbr[title]{-webkit-text-decoration:underline dotted;border-bottom:0;cursor:help;text-decoration:underline;text-decoration:underline dotted}address{font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-left:0}blockquote{margin:0}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{-webkit-text-decoration-skip:objects;background-color:transparent;color:#007bff;text-decoration:none}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{-ms-overflow-style:scrollbar;margin-top:0;overflow:auto}figure{margin:0}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{caption-side:bottom;color:#6c757d;text-align:left}th{text-align:inherit}label{display:inline-block}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{color:inherit;display:block;line-height:inherit;max-width:100%;padding:0;white-space:normal;width:100%}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:none;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}output{display:inline-block}summary{cursor:pointer;display:list-item}template{display:none}[hidden]{display:none!important}.clearfix:after{clear:both;content:"";display:block}.one-line-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a,a:active,a:hover,a:link,a:visited{text-decoration:none}@media (-webkit-max-device-pixel-ratio:1){.CodeMirror-vscrollbar::-webkit-scrollbar,.cool-md-editor-wrap .editor-md::-webkit-scrollbar,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar{height:6px;width:6px}.CodeMirror-vscrollbar::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap .editor-preview::-webkit-scrollbar-thumb{background-clip:padding-box;min-height:28px}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-light .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-light .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-light .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-track-piece,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-track-piece,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-track-piece{background-color:#fff}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb{background-color:#c2c2c2}.cool-md-editor-wrap.editor-theme-dark .editor-md::-webkit-scrollbar-thumb:hover,.cool-md-editor-wrap.editor-theme-dark .editor-preview::-webkit-scrollbar-thumb:hover,.editor-theme-dark .CodeMirror-vscrollbar::-webkit-scrollbar-thumb:hover{background-color:#a0a0a0}}.cool-md-editor-wrap .editor-tools{display:-webkit-box;display:-ms-flexbox;display:flex;height:50px;left:0;padding:0 10px;position:absolute;top:0;width:100%}.cool-md-editor-wrap .editor-tools .editor-tools-handle,.cool-md-editor-wrap .editor-tools .editor-tools-main{-ms-flex-align:center;-ms-flex-wrap:wrap;-webkit-box-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;flex-wrap:wrap;height:100%}.cool-md-editor-wrap .editor-tools .editor-tools-handle>*,.cool-md-editor-wrap .editor-tools .editor-tools-main>*{-webkit-box-sizing:border-box;border:1px solid transparent;border-radius:3px;box-sizing:border-box;height:30px;line-height:30px;margin-left:3px;text-align:center;width:30px}.cool-md-editor-wrap .editor-tools .editor-tools-handle>:hover,.cool-md-editor-wrap .editor-tools .editor-tools-main>:hover{cursor:pointer}.cool-md-editor-wrap .editor-tools .editor-tools-main{-ms-flex:70%;-webkit-box-flex:70%;flex:70%}.cool-md-editor-wrap .editor-tools .editor-tools-main .editor-tools-division{border:none;cursor:auto;height:30px;line-height:25px;margin:0;text-align:center;width:13px}.cool-md-editor-wrap .editor-tools .editor-tools-handle{-ms-flex:30%;-ms-flex-pack:end;-webkit-box-flex:30%;-webkit-box-pack:end;flex:30%;justify-content:flex-end}.editor-theme-light .editor-tools{background-color:#d2d2d2}.editor-theme-light .editor-tools .editor-tools-handle>*,.editor-theme-light .editor-tools .editor-tools-main>*{color:#202020}.editor-theme-light .editor-tools .editor-tools-handle>.active,.editor-theme-light .editor-tools .editor-tools-main>.active{border-color:#202020}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo]{color:#ececec}.editor-theme-light .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-light .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#202020}.editor-theme-light .editor-tools .editor-tools-main .editor-tools-division{color:#868686}.editor-theme-dark .editor-tools{background-color:#333}.editor-theme-dark .editor-tools .editor-tools-handle>*,.editor-theme-dark .editor-tools .editor-tools-main>*{color:#e6e6e6}.editor-theme-dark .editor-tools .editor-tools-handle>.active,.editor-theme-dark .editor-tools .editor-tools-main>.active{border-color:#e6e6e6}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo],.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo]{color:#4d4d4d}.editor-theme-dark .editor-tools .editor-tools-main span[data-name=redo].canActive,.editor-theme-dark .editor-tools .editor-tools-main span[data-name=undo].canActive{color:#e6e6e6}.editor-theme-dark .editor-tools .editor-tools-main .editor-tools-division{color:grey}.editor-theme-dark .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark div.CodeMirror-selected{background:#303030}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-line::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.editor-theme-dark .cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.editor-theme-dark .cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.editor-theme-dark .cm-s-base16-dark .CodeMirror-guttermarker-subtle,.editor-theme-dark .cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.editor-theme-dark .cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.editor-theme-dark .cm-s-base16-dark span.cm-comment{color:#8f5536}.editor-theme-dark .cm-s-base16-dark span.cm-atom,.editor-theme-dark .cm-s-base16-dark span.cm-number{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-attribute,.editor-theme-dark .cm-s-base16-dark span.cm-property{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-keyword{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-string{color:#f4bf75}.editor-theme-dark .cm-s-base16-dark span.cm-variable{color:#90a959}.editor-theme-dark .cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.editor-theme-dark .cm-s-base16-dark span.cm-def{color:#d28445}.editor-theme-dark .cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.editor-theme-dark .cm-s-base16-dark span.cm-tag{color:#ac4142}.editor-theme-dark .cm-s-base16-dark span.cm-link{color:#aa759f}.editor-theme-dark .cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.editor-theme-dark .cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.editor-theme-dark .cm-s-base16-dark .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline}.editor-theme-light .cm-s-base16-light.CodeMirror{background:#f5f5f5;color:#202020}.editor-theme-light .cm-s-base16-light div.CodeMirror-selected{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-line::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span::-moz-selection,.editor-theme-light .cm-s-base16-light .CodeMirror-line>span>span::-moz-selection{background:#e0e0e0}.editor-theme-light .cm-s-base16-light .CodeMirror-gutters{background:#f5f5f5;border-right:0}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker{color:#ac4142}.editor-theme-light .cm-s-base16-light .CodeMirror-guttermarker-subtle,.editor-theme-light .cm-s-base16-light .CodeMirror-linenumber{color:#b0b0b0}.editor-theme-light .cm-s-base16-light .CodeMirror-cursor{border-left:1px solid #505050}.editor-theme-light .cm-s-base16-light span.cm-comment{color:#8f5536}.editor-theme-light .cm-s-base16-light span.cm-atom,.editor-theme-light .cm-s-base16-light span.cm-number{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-attribute,.editor-theme-light .cm-s-base16-light span.cm-property{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-keyword{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-string{color:#f4bf75}.editor-theme-light .cm-s-base16-light span.cm-variable{color:#90a959}.editor-theme-light .cm-s-base16-light span.cm-variable-2{color:#6a9fb5}.editor-theme-light .cm-s-base16-light span.cm-def{color:#d28445}.editor-theme-light .cm-s-base16-light span.cm-bracket{color:#202020}.editor-theme-light .cm-s-base16-light span.cm-tag{color:#ac4142}.editor-theme-light .cm-s-base16-light span.cm-link{color:#aa759f}.editor-theme-light .cm-s-base16-light span.cm-error{background:#ac4142;color:#505050}.editor-theme-light .cm-s-base16-light .CodeMirror-activeline-background{background:#dddcdc}.editor-theme-light .cm-s-base16-light .CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline}.cool-md-editor-wrap .editor-md{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cool-md-editor-wrap .editor-md .CodeMirror,.cool-md-editor-wrap .editor-md form{height:100%}.cool-md-editor-wrap .editor-md.hide{display:none}.editor-theme-dark .editor-md,.editor-theme-light .editor-md{background-color:#d2d2d2}.cool-md-editor-wrap .editor-preview{height:100%;overflow:hidden;overflow-y:scroll;padding-left:5px}.cool-md-editor-wrap .editor-preview.hide{display:none}.cool-md-editor-wrap .editor-preview .markdown-body{border:none;min-height:100%}.cool-md-editor-wrap .editor-preview .markdown-body h1>code,.cool-md-editor-wrap .editor-preview .markdown-body h2>code,.cool-md-editor-wrap .editor-preview .markdown-body h3>code,.cool-md-editor-wrap .editor-preview .markdown-body h4>code,.cool-md-editor-wrap .editor-preview .markdown-body h5>code,.cool-md-editor-wrap .editor-preview .markdown-body h6>code,.cool-md-editor-wrap .editor-preview .markdown-body li>code,.cool-md-editor-wrap .editor-preview .markdown-body p>code,.cool-md-editor-wrap .editor-preview .markdown-body ul>code{background-color:#f9f2f4;color:#d02572}.cool-md-editor-wrap .editor-preview .markdown-body a{border-bottom:1px solid #d1e9ff;color:#0269c8}.cool-md-editor-wrap .editor-preview .markdown-body pre{background-color:#eee;border:1px solid #dce6f0;border-radius:.3rem}.cool-md-editor-wrap .editor-preview .markdown-body img{-webkit-box-shadow:none;box-shadow:none;max-width:100%}.editor-theme-dark .editor-preview,.editor-theme-light .editor-preview .preview-bd{background-color:#fff}.cool-md-editor-wrap .editor-status{-ms-flex-align:center;-webkit-box-align:center;align-items:center;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;height:30px;left:0;line-height:30px;padding:0 10px;position:absolute;width:100%}.cool-md-editor-wrap .editor-status .editor-status-positon{-ms-flex-pack:justify;-ms-flex-wrap:nowrap;-webkit-box-pack:justify;display:-webkit-box;display:-ms-flexbox;display:flex;flex-wrap:nowrap;justify-content:space-between;padding-right:10px;width:80%}.cool-md-editor-wrap .editor-status .editor-status-positon .icon-theme{-webkit-box-sizing:border-box;border-left:1px solid transparent;border-right:1px solid transparent;box-sizing:border-box;cursor:pointer;text-align:center;width:45px}.cool-md-editor-wrap .editor-status .editor-status-length{width:20%}.editor-theme-light .editor-status{background-color:#d2d2d2}.editor-theme-light .editor-status .editor-status-positon .icon-theme{border-left-color:#c7bebe;border-right-color:#c7bebe}.editor-theme-dark .editor-status{background-color:#333;color:#fff}.editor-theme-dark .editor-status .editor-status-positon .icon-theme{border-left-color:#fff;border-right-color:#fff}.cool-md-editor-wrap{border-left:1px solid transparent;border-radius:3px;border-right:1px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:16px;height:100%;padding-bottom:30px;padding-top:50px;position:relative;width:100%}.cool-md-editor-wrap .editor-md,.cool-md-editor-wrap .editor-preview{-ms-flex:1;-webkit-box-flex:1;flex:1;height:100%}.cool-md-editor-wrap.fullscreen{height:100%;left:0;margin:0;position:fixed;top:0;width:100%;z-index:9999}.cool-md-editor-wrap.only-markdown .editor-code,.cool-md-editor-wrap.show-all .editor-code,.cool-md-editor-wrap.show-all .editor-preview{display:block}.cool-md-editor-wrap.only-markdown .editor-preview,.cool-md-editor-wrap.only-preview .editor-code,.cool-md-editor-wrap.only-preview .editor-preview{display:none}.cool-md-editor-wrap.editor-theme-light{border-left-color:#d2d2d2;border-right-color:#d2d2d2}.cool-md-editor-wrap.editor-theme-dark{border-left-color:#333;border-right-color:#333}.margin-tb-zero,.markdown-body ol ol,.markdown-body ol ul,.markdown-body ol ul ol,.markdown-body ol ul ul,.markdown-body ul ol,.markdown-body ul ul,.markdown-body ul ul ol,.markdown-body ul ul ul{margin-bottom:0;margin-top:0}.markdown-body{background:#fff;border:1px solid #ddd;border-radius:0 0 3px 3px;color:#333;font-family:Helvetica Neue,Helvetica,Segoe UI,Arial,freesans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:16px;line-height:1.6;padding:45px;word-wrap:break-word}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body *{-webkit-box-sizing:border-box;box-sizing:border-box}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:700;line-height:1.4;margin-bottom:16px;margin-top:1em}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:16px;margin-top:0}.markdown-body h1{font-size:2.25em;line-height:1.2;margin:.67em 0}.markdown-body h1,.markdown-body h2{border-bottom:1px solid #eee;padding-bottom:.3em}.markdown-body h2{font-size:1.75em;line-height:1.225}.markdown-body h3{font-size:1.5em;line-height:1.43}.markdown-body h4{font-size:1.25em}.markdown-body h5{font-size:1em}.markdown-body h6{color:#777;font-size:1em}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol ol,.markdown-body ul ol{list-style-type:lower-roman}.markdown-body ol ul,.markdown-body ul ul{list-style-type:circle}.markdown-body ol ul ul,.markdown-body ul ul ul{list-style-type:square}.markdown-body ol{list-style-type:decimal}.markdown-body ul{list-style-type:disc}.markdown-body blockquote{border-left:4px solid #ddd;color:#777;margin-left:0;margin-right:0;padding:0 15px}.markdown-body table{border-collapse:collapse;border-spacing:0;display:block;overflow:auto;width:100%;word-break:normal;word-break:keep-all}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body table td,.markdown-body table th{border:1px solid #ddd;padding:6px 13px}.markdown-body pre{background-color:#f7f7f7;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px;word-wrap:normal}.markdown-body pre code{background-color:transparent;border:0;border-radius:3px;display:inline;font-size:100%;line-height:inherit;margin:0;max-width:none;overflow:initial;padding:0;white-space:pre;word-wrap:normal}.markdown-body pre code:after,.markdown-body pre code:before{content:normal}.markdown-body code{background-color:rgba(0,0,0,.04);border-radius:3px;font-family:Consolas,Liberation Mono,Menlo,Courier,monospace;font-size:85%;margin:0;padding:.2em 0}.markdown-body code:after,.markdown-body code:before{content:"\A0";letter-spacing:-.2em}.markdown-body a{background:transparent;color:#4078c0;text-decoration:none}.markdown-body img{-webkit-box-shadow:0 0 10px #555;border-radius:4px;box-shadow:0 0 10px #555;max-height:100%;max-width:100%}.markdown-body strong{font-weight:700}.markdown-body em{font-style:italic}.markdown-body del{text-decoration:line-through}.task-list-item{list-style-type:none}.task-list-item input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;margin:0 .35em .25em -1.6em;vertical-align:middle}.task-list-item input[disabled]{cursor:default}.task-list-item input[type=checkbox],.task-list-item input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}.markdown-body{padding:10px}[class*=" icon-"],[class^=icon-]{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;font-family:iconfont!important;font-size:100%;font-style:normal}.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{background-color:#7e7;border:0;width:auto}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:-20px;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-30px;margin-right:-30px;outline:none;overflow:scroll!important;padding-bottom:30px;position:relative}.CodeMirror-sizer{border-right:30px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-30px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-webkit-font-variant-ligatures:contextual;-webkit-tap-highlight-color:transparent;background:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;word-wrap:normal;z-index:2}.CodeMirror-wrap pre{white-space:pre-wrap;word-break:normal;word-wrap:break-word}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-foldmarker{color:#00f;cursor:pointer;font-family:arial;line-height:.3;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}.hljs{background:#23241f;display:block;overflow-x:auto;padding:.5em}.hljs,.hljs-subst,.hljs-tag{color:#f8f8f2}.hljs-emphasis,.hljs-strong{color:#a8a8a2}.hljs-bullet,.hljs-link,.hljs-literal,.hljs-number,.hljs-quote,.hljs-regexp{color:#ae81ff}.hljs-code,.hljs-section,.hljs-selector-class,.hljs-title{color:#a6e22e}.hljs-strong{font-weight:700}.hljs-emphasis{font-style:italic}.hljs-attr,.hljs-keyword,.hljs-name,.hljs-selector-tag{color:#f92672}.hljs-attribute,.hljs-symbol{color:#66d9ef}.hljs-class .hljs-title,.hljs-params{color:#f8f8f2}.hljs-addition,.hljs-built_in,.hljs-builtin-name,.hljs-selector-attr,.hljs-selector-id,.hljs-selector-pseudo,.hljs-string,.hljs-template-variable,.hljs-type,.hljs-variable{color:#e6db74}.hljs-comment,.hljs-deletion,.hljs-meta{color:#75715e} \ No newline at end of file diff --git a/dist/coolMdEditor.js b/dist/coolMdEditor.js deleted file mode 100644 index 4c22c0e..0000000 --- a/dist/coolMdEditor.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.CoolMDEditor=t():e.CoolMDEditor=t()}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=9)}([function(e,t,n){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),a=/Edge\/(\d+)/.exec(e),o=r||i||a,s=o&&(r?document.documentMode||6:+(a||i)[1]),l=!a&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),d=!a&&/Chrome\//.test(e),u=/Opera\//.test(e),p=/Apple Computer/.test(navigator.vendor),m=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),g=/PhantomJS/.test(e),f=!a&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),h=/Android/.test(e),b=f||h||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),v=f||/Mac/.test(t),_=/\bCrOS\b/.test(e),y=/win/i.test(t),E=u&&e.match(/Version\/(\d*\.\d*)/);E&&(E=Number(E[1])),E&&E>=15&&(u=!1,l=!0);var x=v&&(c||u&&(null==E||E<12.11)),S=n||o&&s>=9;function C(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var w,T=function(e,t){var n=e.className,r=C(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function N(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function M(e,t){return N(e).appendChild(t)}function D(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var a=0;a=t)return o+(t-a);o+=s-a,o+=n-o%n,a=s+1}}f?R=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:o&&(R=function(e){try{e.select()}catch(e){}});var G=function(){this.id=null};function U(e,t){for(var n=0;n=t)return r+Math.min(o,t-i);if(i+=a-r,r=a+1,(i+=n-i%n)>=t)return r}}var j=[""];function K(e){for(;j.length<=e;)j.push(Z(j)+" ");return j[e]}function Z(e){return e[e.length-1]}function Q(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function ne(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var re=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&re.test(e)}function ae(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,a=r<0?Math.ceil(i):Math.floor(i);if(a==t)return e(a)?t:n;e(a)?n=a:t=a+r}}function se(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],a=i.chunkSize();if(t=e.first&&tn?fe(n,se(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?fe(e.line,t):n<0?fe(e.line,0):e}(t,se(e,t.line).text.length)}function Se(e,t){for(var n=[],r=0;r=t:a.to>t);(r||(r=[])).push(new Te(o,a.from,l?null:a.to))}}return r}(n,i,o),l=function(e,t,n){var r;if(e)for(var i=0;i=t:a.to>t);if(s||a.from==t&&"bookmark"==o.type&&(!n||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=t:a.from0&&s)for(var y=0;yt)&&(!n||Re(n,a.marker)<0)&&(n=a.marker)}return n}function Ue(e,t,n,r,i){var a=se(e,t),o=we&&a.markedSpans;if(o)for(var s=0;s=0&&u<=0||d<=0&&u>=0)&&(d<=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?he(c.to,n)>=0:he(c.to,n)>0)||d>=0&&(l.marker.inclusiveRight&&i.inclusiveLeft?he(c.from,r)<=0:he(c.from,r)<0)))return!0}}}function qe(e){for(var t;t=Fe(e);)e=t.find(-1,!0).line;return e}function ze(e,t){var n=se(e,t),r=qe(n);return n==r?t:ue(r)}function He(e,t){if(t>e.lastLine())return t;var n,r=se(e,t);if(!$e(e,r))return t;for(;n=Be(r);)r=n.find(1,!0).line;return ue(r)+1}function $e(e,t){var n=we&&t.markedSpans;if(n)for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)})}var Ze=null;function Qe(e,t,n){var r;Ze=null;for(var i=0;it)return i;a.to==t&&(a.from!=a.to&&"before"==n?r=i:Ze=i),a.from==t&&(a.from!=a.to&&"before"!=n?r=i:Ze=i)}return null!=r?r:Ze}var Xe=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function n(n){return n<=247?e.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?t.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L"}var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,i=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(e,t,n){this.level=e,this.from=t,this.to=n}return function(e,t){var c="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!r.test(e))return!1;for(var d=e.length,u=[],p=0;p-1&&(r[t]=i.slice(0,a).concat(i.slice(a+1)))}}}function rt(e,t){var n=tt(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function st(e){e.prototype.on=function(e,t){et(this,e,t)},e.prototype.off=function(e,t){nt(this,e,t)}}function lt(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ct(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function dt(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ut(e){lt(e),ct(e)}function pt(e){return e.target||e.srcElement}function mt(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),v&&e.ctrlKey&&1==t&&(t=3),t}var gt,ft,ht=function(){if(o&&s<9)return!1;var e=D("div");return"draggable"in e||"dragDrop"in e}();function bt(e){if(null==gt){var t=D("span","​");M(e,D("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(gt=t.offsetWidth<=1&&t.offsetHeight>2&&!(o&&s<8))}var n=gt?D("span","​"):D("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function vt(e){if(null!=ft)return ft;var t=M(e,document.createTextNode("AخA")),n=w(t,0,1).getBoundingClientRect(),r=w(t,1,2).getBoundingClientRect();return N(e),!(!n||n.left==n.right)&&(ft=r.right-n.right<3)}var _t=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var a=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),o=a.indexOf("\r");-1!=o?(n.push(a.slice(0,o)),t+=o+1):(n.push(a),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},yt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Et=function(){var e=D("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),xt=null,St={},Ct={};function wt(e){if("string"==typeof e&&Ct.hasOwnProperty(e))e=Ct[e];else if(e&&"string"==typeof e.name&&Ct.hasOwnProperty(e.name)){var t=Ct[e.name];"string"==typeof t&&(t={name:t}),(e=Y(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return wt("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return wt("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Tt(e,t){t=wt(t);var n=St[t.name];if(!n)return Tt(e,"text/plain");var r=n(e,t);if(Nt.hasOwnProperty(t.name)){var i=Nt[t.name];for(var a in i)i.hasOwnProperty(a)&&(r.hasOwnProperty(a)&&(r["_"+a]=r[a]),r[a]=i[a])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var o in t.modeProps)r[o]=t.modeProps[o];return r}var Nt={};function Mt(e,t){var n=Nt.hasOwnProperty(e)?Nt[e]:Nt[e]={};F(t,n)}function Dt(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function Ot(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function kt(e,t,n){return!e.startState||e.startState(t,n)}var At=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};At.prototype.eol=function(){return this.pos>=this.string.length},At.prototype.sol=function(){return this.pos==this.lineStart},At.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},At.prototype.next=function(){if(this.post},At.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},At.prototype.skipToEnd=function(){this.pos=this.string.length},At.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},At.prototype.backUp=function(e){this.pos-=e},At.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e},a=this.string.substr(this.pos,e.length);if(i(a)==i(e))return!1!==t&&(this.pos+=e.length),!0},At.prototype.current=function(){return this.string.slice(this.start,this.pos)},At.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},At.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},At.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Lt=function(e,t){this.state=e,this.lookAhead=t},It=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function Rt(e,t,n,r){var i=[e.state.modeGen],a={};$t(e,t.text,e.doc.mode,n,function(e,t){return i.push(e,t)},a,r);for(var o=n.state,s=function(r){n.baseTokens=i;var s=e.state.overlays[r],l=1,c=0;n.state=!0,$t(e,t.text,s.mode,n,function(e,t){for(var n=l;ce&&i.splice(l,1,e,i[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(s.opaque)i.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;ne.options.maxHighlightLength&&Dt(e.doc.mode,r.state),a=Rt(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=a.styles,a.classes?t.styleClasses=a.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Ft(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new It(r,!0,t);var a=function(e,t,n){for(var r,i,a=e.doc,o=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>o;--s){if(s<=a.first)return a.first;var l=se(a,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof Lt?c.lookAhead:0)<=a.modeFrontier))return s;var d=B(l.text,null,e.options.tabSize);(null==i||r>d)&&(i=s-1,r=d)}return i}(e,t,n),o=a>r.first&&se(r,a-1).stateAfter,s=o?It.fromSaved(r,o,a):new It(r,kt(r.mode),a);return r.iter(a,t,function(n){Bt(e,n.text,s);var r=s.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&rt.start)return a}throw new Error("Mode "+e.name+" failed to advance stream.")}It.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},It.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},It.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},It.fromSaved=function(e,t,n){return t instanceof Lt?new It(e,Dt(e.mode,t.state),n,t.lookAhead):new It(e,Dt(e.mode,t),n)},It.prototype.save=function(e){var t=!1!==e?Dt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Lt(t,this.maxLookAhead):t};var qt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function zt(e,t,n,r){var i,a=e.doc,o=a.mode;t=xe(a,t);var s,l=se(a,t.line),c=Ft(e,t.line,n),d=new At(l.text,e.options.tabSize,c);for(r&&(s=[]);(r||d.pose.options.maxHighlightLength?(s=!1,o&&Bt(e,t,r,u.pos),u.pos=t.length,l=null):l=Ht(Ut(n,u,r.state,p),a),p){var m=p[0].name;m&&(l="m-"+(l?m+" "+l:m))}if(!s||d!=l){for(;c1&&!/ /.test(e))return e;for(var n=t,r="",i=0;ic&&u.from<=c);p++);if(u.to>=d)return e(n,r,i,a,o,s,l);e(n,r.slice(0,u.to-c),i,a,null,s,l),a=null,r=r.slice(u.to-c),c=u.to}}}function en(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function tn(e,t,n){var r=e.markedSpans,i=e.text,a=0;if(r)for(var o,s,l,c,d,u,p,m=i.length,g=0,f=1,h="",b=0;;){if(b==g){l=c=d=u=s="",p=null,b=1/0;for(var v=[],_=void 0,y=0;yg||x.collapsed&&E.to==g&&E.from==g)?(null!=E.to&&E.to!=g&&b>E.to&&(b=E.to,c=""),x.className&&(l+=" "+x.className),x.css&&(s=(s?s+";":"")+x.css),x.startStyle&&E.from==g&&(d+=" "+x.startStyle),x.endStyle&&E.to==b&&(_||(_=[])).push(x.endStyle,E.to),x.title&&!u&&(u=x.title),x.collapsed&&(!p||Re(p.marker,x)<0)&&(p=E)):E.from>g&&b>E.from&&(b=E.from)}if(_)for(var S=0;S<_.length;S+=2)_[S+1]==b&&(c+=" "+_[S]);if(!p||p.from==g)for(var C=0;C=m)break;for(var w=Math.min(m,b);;){if(h){var T=g+h.length;if(!p){var N=T>w?h.slice(0,w-g):h;t.addToken(t,N,o?o+l:l,d,g+N.length==b?c:"",u,s)}if(T>=w){h=h.slice(w-g),g=w;break}g=T,d=""}h=i.slice(a,a=n[f++]),o=Zt(n[f++],t.cm.options)}}else for(var M=1;Mn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Dn(e,t,n,r){return An(e,kn(e,t),n,r)}function On(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&a.push((l.bottom+c.top)/2-n.top)}}a.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(a=function(e,t,n,r){var i,a=Rn(t.map,n,r),l=a.node,c=a.start,d=a.end,u=a.collapse;if(3==l.nodeType){for(var p=0;p<4;p++){for(;c&&ie(t.line.text.charAt(a.coverStart+c));)--c;for(;a.coverStart+d1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,i))}else{var m;c>0&&(u=r="right"),i=e.options.lineWrapping&&(m=l.getClientRects()).length>1?m["right"==r?m.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!i||!i.left&&!i.right)){var g=l.parentNode.getClientRects()[0];i=g?{left:g.left,right:g.left+tr(e.display),top:g.top,bottom:g.bottom}:In}for(var f=i.top-t.rect.top,h=i.bottom-t.rect.top,b=(f+h)/2,v=t.view.measure.heights,_=0;_t)&&(i=(a=l-s)-1,t>=l&&(o="right")),null!=i){if(r=e[c+2],s==l&&n==(r.insertLeft?"left":"right")&&(o=n),"left"==n&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],o="left";if("right"==n&&i==l-s)for(;c=0&&(n=e[i]).left==n.right;i--);return n}function Fn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(l=r.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function d(e,t,n){var r=s[t],i=1==r.level;return o(n?e-1:e,i!=n)}var u=Qe(s,l,c),p=Ze,m=d(l,u,"before"==c);return null!=p&&(m.other=d(l,p,"before"!=c)),m}function jn(e,t){var n=0;t=xe(e.doc,t),e.options.lineWrapping||(n=tr(e.display)*t.ch);var r=se(e.doc,t.line),i=Ve(r)+xn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Kn(e,t,n,r,i){var a=fe(e,t,n);return a.xRel=i,r&&(a.outside=!0),a}function Zn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Kn(r.first,0,null,!0,-1);var i=pe(r,n),a=r.first+r.size-1;if(i>a)return Kn(r.first+r.size-1,se(r,a).text.length,null,!0,1);t<0&&(t=0);for(var o=se(r,i);;){var s=Jn(e,o,i,t,n),l=Ge(o,s.ch+(s.xRel>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==i)return c;o=se(r,i=c.line)}}function Qn(e,t,n,r){r-=zn(t);var i=t.text.length,a=oe(function(t){return An(e,n,t-1).bottom<=r},i,0);return i=oe(function(t){return An(e,n,t).top>r},a,i),{begin:a,end:i}}function Xn(e,t,n,r){n||(n=kn(e,t));var i=Hn(e,t,An(e,n,r),"line").top;return Qn(e,t,n,i)}function Yn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function Jn(e,t,n,r,i){i-=Ve(t);var a=kn(e,t),o=zn(t),s=0,l=t.text.length,c=!0,d=Ye(t,e.doc.direction);if(d){var u=(e.options.lineWrapping?function(e,t,n,r,i,a,o){var s=Qn(e,t,r,o),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var d=null,u=null,p=0;p=c||m.to<=l)){var g=1!=m.level,f=An(e,r,g?Math.min(c,m.to)-1:Math.max(l,m.from)).right,h=fh)&&(d=m,u=h)}}return d||(d=i[i.length-1]),d.fromc&&(d={from:d.from,to:c,level:d.level}),d}:function(e,t,n,r,i,a,o){var s=oe(function(s){var l=i[s],c=1!=l.level;return Yn(Vn(e,fe(n,c?l.to:l.from,c?"before":"after"),"line",t,r),a,o,!0)},0,i.length-1),l=i[s];if(s>0){var c=1!=l.level,d=Vn(e,fe(n,c?l.from:l.to,c?"after":"before"),"line",t,r);Yn(d,a,o,!0)&&d.top>o&&(l=i[s-1])}return l})(e,t,n,a,d,r,i);c=1!=u.level,s=c?u.from:u.to-1,l=c?u.to:u.from-1}var p,m,g=null,f=null,h=oe(function(t){var n=An(e,a,t);return n.top+=o,n.bottom+=o,!!Yn(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(g=t,f=n),!0)},s,l),b=!1;if(f){var v=r-f.left=y.bottom}return h=ae(t.text,h,1),Kn(n,h,m,b,r-p)}function er(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ln){Ln=D("pre");for(var t=0;t<49;++t)Ln.appendChild(document.createTextNode("x")),Ln.appendChild(D("br"));Ln.appendChild(document.createTextNode("x"))}M(e.measure,Ln);var n=Ln.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),N(e.measure),n||1}function tr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=D("span","xxxxxxxxxx"),n=D("pre",[t]);M(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function nr(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,a=t.gutters.firstChild,o=0;a;a=a.nextSibling,++o)n[e.options.gutters[o]]=a.offsetLeft+a.clientLeft+i,r[e.options.gutters[o]]=a.clientWidth;return{fixedPos:rr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function rr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ir(e){var t=er(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/tr(e.display)-3);return function(i){if($e(e.doc,i))return 0;var a=0;if(i.widgets)for(var o=0;o=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r=e.display.viewTo||s.to().linet||t==n&&o.to==t)&&(r(Math.max(o.from,t),Math.min(o.to,n),1==o.level?"rtl":"ltr",a),i=!0)}i||r(t,n,"ltr")}(f,n||0,null==r?p:r,function(e,t,i,u){var h="ltr"==i,b=m(e,h?"left":"right"),v=m(t-1,h?"right":"left"),_=null==n&&0==e,y=null==r&&t==p,E=0==u,x=!f||u==f.length-1;if(v.top-b.top<=3){var S=(c?_:y)&&E,C=(c?y:_)&&x,w=S?s:(h?b:v).left,T=C?l:(h?v:b).right;d(w,b.top,T-w,b.bottom)}else{var N,M,D,O;h?(N=c&&_&&E?s:b.left,M=c?l:g(e,i,"before"),D=c?s:g(t,i,"after"),O=c&&y&&x?l:v.right):(N=c?g(e,i,"before"):s,M=!c&&_&&E?l:b.right,D=!c&&y&&x?s:v.left,O=c?g(t,i,"after"):l),d(N,b.top,M-N,b.bottom),b.bottom0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function gr(e){e.state.focused||(e.display.input.focus(),hr(e))}function fr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,br(e))},100)}function hr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(rt(e,"focus",e,t),e.state.focused=!0,L(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),mr(e))}function br(e,t){e.state.delayingBlurEvent||(e.state.focused&&(rt(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function vr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r.005||d<-.005)&&(de(i.line,a),_r(i.line),i.rest))for(var u=0;u=o&&(a=pe(t,Ve(se(t,l))-e.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function Er(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=rr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,a=r+"px",o=0;oa&&(t.bottom=t.top+a);var s=e.doc.height+Sn(n),l=t.tops-r;if(t.topi+a){var d=Math.min(t.top,(c?s:t.bottom)-a);d!=i&&(o.scrollTop=d)}var u=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,p=Tn(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),m=t.right-t.left>p;return m&&(t.right=t.left+p),t.left<10?o.scrollLeft=0:t.leftp+u-3&&(o.scrollLeft=t.right+(m?0:10)-p),o}function Cr(e,t){null!=t&&(Nr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function wr(e){Nr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Tr(e,t,n){null==t&&null==n||Nr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Nr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=jn(e,t.from),r=jn(e,t.to);Mr(e,n,r,t.margin)}}function Mr(e,t,n,r){var i=Sr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Tr(e,i.scrollLeft,i.scrollTop)}function Dr(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||si(e,{top:t}),Or(e,t,!0),n&&si(e),ni(e,100))}function Or(e,t,n){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function kr(e,t,n,r){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,Er(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Ar(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Sn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+wn(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Lr=function(e,t,n){this.cm=n;var r=this.vert=D("div",[D("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=D("div",[D("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),et(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),et(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Lr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var a=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},Lr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Lr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Lr.prototype.zeroWidthHack=function(){var e=v&&!m?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new G,this.disableVert=new G},Lr.prototype.enableZeroWidthBar=function(e,t,n){e.style.pointerEvents="auto",t.set(1e3,function r(){var i=e.getBoundingClientRect(),a="vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1);a!=e?e.style.pointerEvents="none":t.set(1e3,r)})},Lr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Ir=function(){};function Rr(e,t){t||(t=Ar(e));var n=e.display.barWidth,r=e.display.barHeight;Pr(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&vr(e),Pr(e,Ar(e)),n=e.display.barWidth,r=e.display.barHeight}function Pr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Ir.prototype.update=function(){return{bottom:0,right:0}},Ir.prototype.setScrollLeft=function(){},Ir.prototype.setScrollTop=function(){},Ir.prototype.clear=function(){};var Fr={native:Lr,null:Ir};function Br(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Fr[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),et(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,n){"horizontal"==n?kr(e,t):Dr(e,t)},e),e.display.scrollbars.addClass&&L(e.display.wrapper,e.display.scrollbars.addClass)}var Gr=0;function Ur(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Gr},function(e){an?an.ops.push(e):e.ownsGroup=an={ops:[e],delayedCallbacks:[]}}(e.curOp)}function qr(e){var t=e.curOp;!function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ii(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Hr(e){e.updatedDisplay=e.mustUpdate&&ai(e.cm,e.update)}function $r(e){var t=e.cm,n=t.display;e.updatedDisplay&&vr(t),e.barMeasure=Ar(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Dn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+wn(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Tn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Wr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft1&&(o=!0)),null!=c.scrollLeft&&(kr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-u)>1&&(o=!0)),!o)break}return i}(t,xe(r,e.scrollToPos.from),xe(r,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!it(e,"scrollCursorIntoView")){var n=e.display,r=n.sizer.getBoundingClientRect(),i=null;if(t.top+r.top<0?i=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!g){var a=D("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-xn(e.display))+"px;\n height: "+(t.bottom-t.top+wn(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(i),e.display.lineSpace.removeChild(a)}}}(t,i)}var a=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(a)for(var s=0;st)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)we&&ze(e.doc,t)i.viewFrom?Jr(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)Jr(e);else if(t<=i.viewFrom){var a=ei(e,n,n+r,1);a?(i.view=i.view.slice(a.index),i.viewFrom=a.lineN,i.viewTo+=r):Jr(e)}else if(n>=i.viewTo){var o=ei(e,t,t,-1);o?(i.view=i.view.slice(0,o.index),i.viewTo=o.lineN):Jr(e)}else{var s=ei(e,t,t,-1),l=ei(e,n,n+r,1);s&&l?(i.view=i.view.slice(0,s.index).concat(rn(e,s.lineN,l.lineN)).concat(i.view.slice(l.index)),i.viewTo+=r):Jr(e)}var c=i.externalMeasured;c&&(n=i.lineN&&t=r.viewTo)){var a=r.view[sr(e,t)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==U(o,n)&&o.push(n)}}}function Jr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function ei(e,t,n,r){var i,a=sr(e,t),o=e.display.view;if(!we||n==e.doc.first+e.doc.size)return{index:a,lineN:n};for(var s=e.display.viewFrom,l=0;l0){if(a==o.length-1)return null;i=s+o[a].size-t,a++}else i=s-t;t+=i,n+=i}for(;ze(e.doc,n)!=n;){if(a==(r<0?0:o.length-1))return null;n+=r*o[a-(r<0?1:0)].size,a+=r}return{index:a,lineN:n}}function ti(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo)){var n=+new Date+e.options.workTime,r=Ft(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),function(a){if(r.line>=e.display.viewFrom){var o=a.styles,s=a.text.length>e.options.maxHighlightLength?Dt(t.mode,r.state):null,l=Rt(e,a,r,!0);s&&(r.state=s),a.styles=l.styles;var c=a.styleClasses,d=l.classes;d?a.styleClasses=d:c&&(a.styleClasses=null);for(var u=!o||o.length!=a.styles.length||c!=d&&(!c||!d||c.bgClass!=d.bgClass||c.textClass!=d.textClass),p=0;!u&&pn)return ni(e,e.options.workDelay),!0}),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&jr(e,function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==ti(e))return!1;xr(e)&&(Jr(e),t.dims=nr(e));var i=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),o=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFromo&&n.viewTo-o<20&&(o=Math.min(i,n.viewTo)),we&&(a=ze(e.doc,a),o=He(e.doc,o));var s=a!=n.viewFrom||o!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=rn(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=rn(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,sr(e,n)))),r.viewTo=n}(e,a,o),n.viewOffset=Ve(se(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=ti(e);if(!s&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var d=function(e){if(e.hasFocus())return null;var t=A();if(!t||!k(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&k(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,i=e.options.lineNumbers,a=r.lineDiv,o=a.firstChild;function s(t){var n=t.nextSibling;return l&&v&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,d=r.viewFrom,u=0;u-1&&(m=!1),cn(e,p,d,n)),m&&(N(p.lineNumber),p.lineNumber.appendChild(document.createTextNode(ge(e.options,d)))),o=p.node.nextSibling}else{var g=hn(e,p,d,n);a.insertBefore(g,o)}d+=p.size}for(;o;)o=s(o)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=A()&&(e.activeElt.focus(),e.anchorNode&&k(document.body,e.anchorNode)&&k(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(d),N(n.cursorDiv),N(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ni(e,400)),n.updateLineNumbers=null,!0}function oi(e,t){for(var n=t.viewport,r=!0;(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Tn(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Sn(e.display)-Nn(e),n.top)}),t.visible=yr(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ai(e,t);r=!1){vr(e);var i=Ar(e);lr(e),Rr(e,i),ci(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function si(e,t){var n=new ii(e,t);if(ai(e,n)){vr(e),oi(e,n);var r=Ar(e);lr(e),Rr(e,r),ci(e,r),n.finish()}}function li(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function ci(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+wn(e)+"px"}function di(e){var t=e.display.gutters,n=e.options.gutters;N(t);for(var r=0;r-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}ii.prototype.signal=function(e,t){ot(e,t)&&this.events.push(arguments)},ii.prototype.finish=function(){for(var e=0;es.clientWidth,d=s.scrollHeight>s.clientHeight;if(i&&c||a&&d){if(a&&v&&l)e:for(var p=t.target,m=o.view;p!=s;p=p.parentNode)for(var g=0;g=0&&he(e,r.to())<=0)return n}return-1};var vi=function(e,t){this.anchor=e,this.head=t};function _i(e,t){var n=e[t];e.sort(function(e,t){return he(e.from(),t.from())}),t=U(e,n);for(var r=1;r=0){var o=ye(a.from(),i.from()),s=_e(a.to(),i.to()),l=a.empty()?i.from()==i.head:a.from()==a.head;r<=t&&--t,e.splice(--r,2,new vi(l?s:o,l?o:s))}}return new bi(e,t)}function yi(e,t){return new bi([new vi(e,t||e)],0)}function Ei(e){return e.text?fe(e.from.line+e.text.length-1,Z(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function xi(e,t){if(he(e,t.from)<0)return e;if(he(e,t.to)<=0)return Ei(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Ei(t).ch-t.to.ch),fe(n,r)}function Si(e,t){for(var n=[],r=0;r1&&e.remove(s.line+1,g-1),e.insert(s.line+1,b)}sn(e,"change",e,t)}function Di(e,t,n){!function e(r,i,a){if(r.linked)for(var o=0;os-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(a=function(e,t){return t?(Ii(e.done),Z(e.done)):e.done.length&&!Z(e.done).ranges?Z(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Z(e.done)):void 0}(i,i.lastOp==r)))o=Z(a.changes),0==he(t.from,t.to)&&0==he(t.from,o.to)?o.to=Ei(t):a.changes.push(Li(e,t));else{var l=Z(i.done);for(l&&l.ranges||Fi(e.sel,i.done),a={changes:[Li(e,t)],generation:i.generation},i.done.push(a);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,o||rt(e,"historyAdded")}function Pi(e,t,n,r){var i=e.history,a=r&&r.origin;n==i.lastSelOp||a&&i.lastSelOrigin==a&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==a||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,a,Z(i.done),t))?i.done[i.done.length-1]=t:Fi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=a,i.lastSelOp=n,r&&!1!==r.clearRedo&&Ii(i.undone)}function Fi(e,t){var n=Z(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Bi(e,t,n,r){var i=t["spans_"+e.id],a=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[a]=n.markedSpans),++a})}function Gi(e){if(!e)return null;for(var t,n=0;n-1&&(Z(s)[u]=c[u],delete c[u])}}}return r}function zi(e,t,n,r){if(r){var i=e.anchor;if(n){var a=he(t,i)<0;a!=he(n,i)<0?(i=t,t=n):a!=he(t,n)<0&&(t=n)}return new vi(i,t)}return new vi(n||t,t)}function Hi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Ki(e,new bi([zi(e.sel.primary(),t,n,i)],0),r)}function $i(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),a=0;a=t.ch:s.to>t.ch))){if(i&&(rt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(n){var c=l.find(r<0?1:-1),d=void 0;if((r<0?l.inclusiveRight:l.inclusiveLeft)&&(c=ta(e,c,-r,c&&c.line==t.line?a:null)),c&&c.line==t.line&&(d=he(c,n))&&(r<0?d<0:d>0))return Ji(e,c,t,r,i)}var u=l.find(r<0?-1:1);return(r<0?l.inclusiveLeft:l.inclusiveRight)&&(u=ta(e,u,r,u.line==t.line?a:null)),u?Ji(e,u,t,r,i):null}}return t}function ea(e,t,n,r,i){var a=r||1,o=Ji(e,t,n,a,i)||!i&&Ji(e,t,n,a,!0)||Ji(e,t,n,-a,i)||!i&&Ji(e,t,n,-a,!0);return o||(e.cantEdit=!0,fe(e.first,0))}function ta(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?xe(e,fe(t.line-1)):null:n>0&&t.ch==(r||se(e,t.line)).text.length?t.line0)){var d=[l,1],u=he(c.from,s.from),p=he(c.to,s.to);(u<0||!o.inclusiveLeft&&!u)&&d.push({from:c.from,to:s.from}),(p>0||!o.inclusiveRight&&!p)&&d.push({from:s.to,to:c.to}),i.splice.apply(i,d),l+=d.length-3}}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)aa(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else aa(e,t)}}function aa(e,t){if(1!=t.text.length||""!=t.text[0]||0!=he(t.from,t.to)){var n=Si(e,t);Ri(e,t,n,e.cm?e.cm.curOp.id:NaN),la(e,t,n,De(e,t));var r=[];Di(e,function(e,n){n||-1!=U(r,e.history)||(pa(e.history,t),r.push(e.history)),la(e,t,null,De(e,t))})}}function oa(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var i,a=e.history,o=e.sel,s="undo"==t?a.done:a.undone,l="undo"==t?a.undone:a.done,c=0;c=0;--m){var g=p(m);if(g)return g.v}}}}function sa(e,t){if(0!=t&&(e.first+=t,e.sel=new bi(Q(e.sel.ranges,function(e){return new vi(fe(e.anchor.line+t,e.anchor.ch),fe(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Xr(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linea&&(t={from:t.from,to:fe(a,se(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=le(e,t.from,t.to),n||(n=Si(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,a=t.from,o=t.to,s=!1,l=a.line;e.options.lineWrapping||(l=ue(qe(se(r,a.line))),r.iter(l,o.line+1,function(e){if(e==i.maxLine)return s=!0,!0})),r.sel.contains(t.from,t.to)>-1&&at(e),Mi(r,t,n,ir(e)),e.options.lineWrapping||(r.iter(l,a.line+t.text.length,function(e){var t=je(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=se(e,r).stateAfter;if(i&&(!(i instanceof Lt)||r+i.lookAhead1||!(this.children[0]instanceof ga))){var s=[];this.collapse(s),this.children=[new ga(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var o=i.lines.length%25+25,s=o;s10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=O("span",[a.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(Ue(e,t.line,t,n,a)||t.line!=n.line&&Ue(e,n.line,t,n,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");we=!0}a.addToHistory&&Ri(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,function(e){c&&a.collapsed&&!c.options.lineWrapping&&qe(e)==c.display.maxLine&&(s=!0),a.collapsed&&l!=t.line&&de(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Te(a,l==t.line?t.ch:null,l==n.line?n.ch:null)),++l}),a.collapsed&&e.iter(t.line,n.line+1,function(t){$e(e,t)&&de(t,0)}),a.clearOnEnter&&et(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Ce=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++va,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Xr(c,t.line,n.line+1);else if(a.className||a.title||a.startStyle||a.endStyle||a.css)for(var d=t.line;d<=n.line;d++)Yr(c,d,"text");a.atomic&&Xi(c.doc),sn(c,"markerAdded",c,a)}return a}_a.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Ur(e),ot(this,"clear")){var n=this.find();n&&sn(this,"clear",n.from,n.to)}for(var r=null,i=null,a=0;ae.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=d,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&Xr(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Xi(e.doc)),e&&sn(e,"markerCleared",e,this,r,i),t&&qr(e),this.parent&&this.parent.clear()}},_a.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;l--)ia(this,r[l]);s?ji(this,s):this.cm&&wr(this.cm)}),undo:Qr(function(){oa(this,"undo")}),redo:Qr(function(){oa(this,"redo")}),undoSelection:Qr(function(){oa(this,"undo",!0)}),redoSelection:Qr(function(){oa(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=xe(this,e),t=xe(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&i!=e.line||null!=l.from&&i==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++i}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=a,++n}),xe(this,fe(n,t))},indexFromPos:function(e){var t=(e=xe(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var d=e.dataTransfer.getData("Text");if(d){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),Zi(t.doc,yi(n,n)),u)for(var p=0;p=0;t--)ca(e.doc,"",r[t].from,r[t].to,"+delete");wr(e)})}function Va(e,t,n){var r=ae(e.text,t+n,n);return r<0||r>e.text.length?null:r}function ja(e,t,n){var r=Va(e,t.ch,n);return null==r?null:new fe(t.line,r,n<0?"after":"before")}function Ka(e,t,n,r,i){if(e){var a=Ye(n,t.doc.direction);if(a){var o,s=i<0?Z(a):a[0],l=i<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var d=kn(t,n);o=i<0?n.text.length-1:0;var u=An(t,d,o).top;o=oe(function(e){return An(t,d,e).top==u},i<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Va(n,o,1))}else o=i<0?s.to:s.from;return new fe(r,o,c)}}return new fe(r,i<0?n.text.length:0,i<0?"before":"after")}Fa.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Fa.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Fa.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Fa.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Fa.default=v?Fa.macDefault:Fa.pcDefault;var Za={selectAll:na,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),H)},killLine:function(e){return Wa(e,function(t){if(t.empty()){var n=se(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new fe(i.line,i.ch+1),e.replaceRange(a.charAt(i.ch-1)+a.charAt(i.ch-2),fe(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var o=se(e.doc,i.line-1).text;o&&(i=new fe(i.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+o.charAt(o.length-1),fe(i.line-1,o.length-1),i,"+transpose"))}n.push(new vi(i,i))}e.setSelections(n)})},newlineAndIndent:function(e){return jr(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(he((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(he(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,a=!1,c=Kr(e,function(t){l&&(i.scroller.draggable=!1),e.state.draggingText=!1,nt(i.wrapper.ownerDocument,"mouseup",c),nt(i.wrapper.ownerDocument,"mousemove",d),nt(i.scroller,"dragstart",u),nt(i.scroller,"drop",c),a||(lt(t),r.addNew||Hi(e.doc,n,null,null,r.extend),l||o&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),d=function(e){a=a||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},u=function(){return a=!0};l&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),et(i.wrapper.ownerDocument,"mouseup",c),et(i.wrapper.ownerDocument,"mousemove",d),et(i.scroller,"dragstart",u),et(i.scroller,"drop",c),fr(e),setTimeout(function(){return i.input.focus()},20)}(e,r,t,a):function(e,t,n,r){var i=e.display,a=e.doc;lt(t);var o,s,l=a.sel,c=l.ranges;if(r.addNew&&!r.extend?(s=a.sel.contains(n),o=s>-1?c[s]:new vi(n,n)):(o=a.sel.primary(),s=a.sel.primIndex),"rectangle"==r.unit)r.addNew||(o=new vi(n,n)),n=or(e,t,!0,!0),s=-1;else{var d=po(e,n,r.unit);o=r.extend?zi(o,d.anchor,d.head,r.extend):d}r.addNew?-1==s?(s=c.length,Ki(a,_i(c.concat([o]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==r.unit&&!r.extend?(Ki(a,_i(c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),l=a.sel):Wi(a,s,o,$):(s=0,Ki(a,new bi([o],0),$),l=a.sel);var u=n;function p(t){if(0!=he(u,t))if(u=t,"rectangle"==r.unit){for(var i=[],c=e.options.tabSize,d=B(se(a,n.line).text,n.ch,c),p=B(se(a,t.line).text,t.ch,c),m=Math.min(d,p),g=Math.max(d,p),f=Math.min(n.line,t.line),h=Math.min(e.lastLine(),Math.max(n.line,t.line));f<=h;f++){var b=se(a,f).text,v=V(b,m,c);m==g?i.push(new vi(fe(f,v),fe(f,v))):b.length>v&&i.push(new vi(fe(f,v),fe(f,V(b,g,c))))}i.length||i.push(new vi(n,n)),Ki(a,_i(l.ranges.slice(0,s).concat(i),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var _,y=o,E=po(e,t,r.unit),x=y.anchor;he(E.anchor,x)>0?(_=E.head,x=ye(y.from(),E.anchor)):(_=E.anchor,x=_e(y.to(),E.head));var S=l.ranges.slice(0);S[s]=function(e,t){var n=t.anchor,r=t.head,i=se(e.doc,n.line);if(0==he(n,r)&&n.sticky==r.sticky)return t;var a=Ye(i);if(!a)return t;var o=Qe(a,n.ch,n.sticky),s=a[o];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=o+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return t;if(r.line!=n.line)l=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var d=Qe(a,r.ch,r.sticky),u=d-o||(r.ch-n.ch)*(1==s.level?-1:1);l=d==c-1||d==c?u<0:u>0}var p=a[c+(l?-1:0)],m=l==(1==p.level),g=m?p.from:p.to,f=m?"after":"before";return n.ch==g&&n.sticky==f?t:new vi(new fe(n.line,g,f),r)}(e,new vi(xe(a,x),_)),Ki(a,_i(S,s),$)}}var m=i.wrapper.getBoundingClientRect(),g=0;function f(t){e.state.selectingText=!1,g=1/0,lt(t),i.input.focus(),nt(i.wrapper.ownerDocument,"mousemove",h),nt(i.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var h=Kr(e,function(t){0!==t.buttons&&mt(t)?function t(n){var o=++g,s=or(e,n,!0,"rectangle"==r.unit);if(s)if(0!=he(s,u)){e.curOp.focus=A(),p(s);var l=yr(i,a);(s.line>=l.to||s.linem.bottom?20:0;c&&setTimeout(Kr(e,function(){g==o&&(i.scroller.scrollTop+=c,t(n))}),50)}}(t):f(t)}),b=Kr(e,f);e.state.selectingText=b,et(i.wrapper.ownerDocument,"mousemove",h),et(i.wrapper.ownerDocument,"mouseup",b)}(e,r,t,a)}(t,r,a,e):pt(e)==n.scroller&<(e):2==i?(r&&Hi(t.doc,r),setTimeout(function(){return n.input.focus()},20)):3==i&&(S?fo(t,e):fr(t)))}}function po(e,t,n){if("char"==n)return new vi(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new vi(fe(t.line,0),xe(e.doc,fe(t.line+1,0)));var r=n(e,t);return new vi(r.from,r.to)}function mo(e,t,n,r){var i,a;if(t.touches)i=t.touches[0].clientX,a=t.touches[0].clientY;else try{i=t.clientX,a=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&<(t);var o=e.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!ot(e,n))return dt(t);a-=s.top-o.viewOffset;for(var l=0;l=i){var d=pe(e.doc,a),u=e.options.gutters[l];return rt(e,n,e,d,u,t),dt(t)}}}function go(e,t){return mo(e,t,"gutterClick",!0)}function fo(e,t){En(e.display,t)||function(e,t){return!!ot(e,"gutterContextMenu")&&mo(e,t,"gutterContextMenu",!1)}(e,t)||it(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function ho(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Gn(e)}co.prototype.compare=function(e,t,n){return this.time+400>e&&0==he(t,this.pos)&&n==this.button};var bo={toString:function(){return"CodeMirror.Init"}},vo={},_o={};function yo(e){di(e),Xr(e),Er(e)}function Eo(e,t,n){var r=n&&n!=bo;if(!t!=!r){var i=e.display.dragFunctions,a=t?et:nt;a(e.display.scroller,"dragstart",i.start),a(e.display.scroller,"dragenter",i.enter),a(e.display.scroller,"dragover",i.over),a(e.display.scroller,"dragleave",i.leave),a(e.display.scroller,"drop",i.drop)}}function xo(e){e.options.lineWrapping?(L(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),Ke(e)),ar(e),Xr(e),Gn(e),setTimeout(function(){return Rr(e)},100)}function So(e,t){var r=this;if(!(this instanceof So))return new So(e,t);this.options=t=t?F(t):{},F(vo,t,!1),ui(t);var i=t.value;"string"==typeof i?i=new wa(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var a=new So.inputStyles[t.inputStyle](this),c=this.display=new function(e,t,r){var i=this;this.input=r,i.scrollbarFiller=D("div",null,"CodeMirror-scrollbar-filler"),i.scrollbarFiller.setAttribute("cm-not-content","true"),i.gutterFiller=D("div",null,"CodeMirror-gutter-filler"),i.gutterFiller.setAttribute("cm-not-content","true"),i.lineDiv=O("div",null,"CodeMirror-code"),i.selectionDiv=D("div",null,null,"position: relative; z-index: 1"),i.cursorDiv=D("div",null,"CodeMirror-cursors"),i.measure=D("div",null,"CodeMirror-measure"),i.lineMeasure=D("div",null,"CodeMirror-measure"),i.lineSpace=O("div",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,"position: relative; outline: none");var a=O("div",[i.lineSpace],"CodeMirror-lines");i.mover=D("div",[a],null,"position: relative"),i.sizer=D("div",[i.mover],"CodeMirror-sizer"),i.sizerWidth=null,i.heightForcer=D("div",null,null,"position: absolute; height: "+q+"px; width: 1px;"),i.gutters=D("div",null,"CodeMirror-gutters"),i.lineGutter=null,i.scroller=D("div",[i.sizer,i.heightForcer,i.gutters],"CodeMirror-scroll"),i.scroller.setAttribute("tabIndex","-1"),i.wrapper=D("div",[i.scrollbarFiller,i.gutterFiller,i.scroller],"CodeMirror"),o&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),l||n&&b||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,r.init(i)}(e,i,a);for(var d in c.wrapper.CodeMirror=this,di(this),ho(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Br(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new G,keySeq:null,specialChars:null},t.autofocus&&!b&&c.input.focus(),o&&s<11&&setTimeout(function(){return r.display.input.reset(!0)},20),function(e){var t=e.display;et(t.scroller,"mousedown",Kr(e,uo)),et(t.scroller,"dblclick",o&&s<11?Kr(e,function(t){if(!it(e,t)){var n=or(e,t);if(n&&!go(e,t)&&!En(e.display,t)){lt(t);var r=e.findWordAt(n);Hi(e.doc,r.anchor,r.head)}}}):function(t){return it(e,t)||lt(t)}),S||et(t.scroller,"contextmenu",function(t){return fo(e,t)});var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout(function(){return t.activeTouch=null},1e3),(r=t.activeTouch).end=+new Date)}function a(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}et(t.scroller,"touchstart",function(i){if(!it(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!go(e,i)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-r.end<=300?r:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),et(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),et(t.scroller,"touchend",function(n){var r=t.activeTouch;if(r&&!En(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var o,s=e.coordsChar(t.activeTouch,"page");o=!r.prev||a(r,r.prev)?new vi(s,s):!r.prev.prev||a(r,r.prev.prev)?e.findWordAt(s):new vi(fe(s.line,0),xe(e.doc,fe(s.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),lt(n)}i()}),et(t.scroller,"touchcancel",i),et(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Dr(e,t.scroller.scrollTop),kr(e,t.scroller.scrollLeft,!0),rt(e,"scroll",e))}),et(t.scroller,"mousewheel",function(t){return hi(e,t)}),et(t.scroller,"DOMMouseScroll",function(t){return hi(e,t)}),et(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){it(e,t)||ut(t)},over:function(t){it(e,t)||(function(e,t){var n=or(e,t);if(n){var r=document.createDocumentFragment();dr(e,n,r),e.display.dragCursor||(e.display.dragCursor=D("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),M(e.display.dragCursor,r)}}(e,t),ut(t))},start:function(t){return function(e,t){if(o&&(!e.state.draggingText||+new Date-Ta<100))ut(t);else if(!it(e,t)&&!En(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!p)){var n=D("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",u&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),u&&n.parentNode.removeChild(n)}}(e,t)},drop:Kr(e,Na),leave:function(t){it(e,t)||Ma(e)}};var l=t.input.getField();et(l,"keyup",function(t){return ao.call(e,t)}),et(l,"keydown",Kr(e,io)),et(l,"keypress",Kr(e,oo)),et(l,"focus",function(t){return hr(e,t)}),et(l,"blur",function(t){return br(e,t)})}(this),ka(),Ur(this),this.curOp.forceUpdate=!0,Oi(this,i),t.autofocus&&!b||this.hasFocus()?setTimeout(P(hr,this),20):br(this),_o)_o.hasOwnProperty(d)&&_o[d](r,t[d],bo);xr(this),t.finishInit&&t.finishInit(this);for(var m=0;m150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>a.first?B(se(a,t-1).text,null,o):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var u="",p=0;if(e.options.indentWithTabs)for(var m=Math.floor(c/o);m;--m)p+=o,u+="\t";if(p1)if(To&&To.text.join("\n")==t){if(r.ranges.length%To.text.length==0){c=[];for(var d=0;d=0;u--){var p=r.ranges[u],m=p.from(),g=p.to();p.empty()&&(n&&n>0?m=fe(m.line,m.ch-n):e.state.overwrite&&!s?g=fe(g.line,Math.min(se(a,g.line).text.length,g.ch+Z(l).length)):To&&To.lineWise&&To.text.join("\n")==t&&(m=g=fe(m.line,0))),o=e.curOp.updateInput;var f={from:m,to:g,text:c?c[u%c.length]:l,origin:i||(s?"paste":e.state.cutIncoming?"cut":"+input")};ia(e.doc,f),sn(e,"inputRead",e,f)}t&&!s&&Oo(e,t),wr(e),e.curOp.updateInput=o,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Do(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||jr(t,function(){return Mo(t,n,0,null,"paste")}),!0}function Oo(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var a=e.getModeAt(i.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=wo(e,i.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(se(e.doc,i.head.line).text.slice(0,i.head.ch))&&(o=wo(e,i.head.line,"smart"));o&&sn(e,"electricInput",e,i.head.line)}}}function ko(e){for(var t=[],n=[],r=0;r=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var a=Qe(i,n.ch,n.sticky),o=i[a];if("ltr"==e.doc.direction&&o.level%2==0&&(r>0?o.to>n.ch:o.from=o.from&&p>=d.begin)){var m=u?"before":"after";return new fe(n.line,p,m)}}var g=function(e,t,r){for(var a=function(e,t){return t?new fe(n.line,l(e,1),"before"):new fe(n.line,e,"after")};e>=0&&e0==(1!=o.level),c=s?r.begin:l(r.end,-1);if(o.from<=c&&c0?d.end:l(d.begin,-1);return null==h||r>0&&h==t.text.length||!(f=g(r>0?0:i.length-1,r,c(h)))?null:f}(e.cm,s,t,n):ja(s,t,n))){if(r||!function(){var r=t.line+n;return!(r=e.first+e.size)&&(t=new fe(r,t.ch,t.sticky),s=se(e,r))}())return!1;t=Ka(i,e.cm,s,t.line,n)}else t=a;return!0}if("char"==r)l();else if("column"==r)l(!0);else if("word"==r||"group"==r)for(var c=null,d="group"==r,u=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||l(!p);p=!1){var m=s.text.charAt(t.ch)||"\n",g=te(m,u)?"w":d&&"\n"==m?"n":!d||/\s/.test(m)?null:"p";if(!d||p||g||(g="s"),c&&c!=g){n<0&&(n=1,l(),t.sticky="after");break}if(g&&(c=g),n>0&&!l(!p))break}var f=ea(e,t,a,o,!0);return be(a,f)&&(f.hitSide=!0),f}function Ro(e,t,n,r){var i,a,o=e.doc,s=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(l-.5*er(e.display),3);i=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;(a=Zn(e,s,i)).outside;){if(n<0?i<=0:i>=o.height){a.hitSide=!0;break}i+=5*n}return a}var Po=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new G,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Fo(e,t){var n=On(e,t.line);if(!n||n.hidden)return null;var r=se(e.doc,t.line),i=Mn(n,r,t.line),a=Ye(r,e.doc.direction),o="left";if(a){var s=Qe(a,t.ch);o=s%2?"right":"left"}var l=Rn(i.map,t.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function Bo(e,t){return t&&(e.bad=!0),e}function Go(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Bo(e.clipPos(fe(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||a.line=t.display.viewFrom&&Fo(t,i)||{node:l[0].measure.map[2],offset:0},d=a.liner.firstLine()&&(o=fe(o.line-1,se(r.doc,o.line-1).length)),s.ch==se(r.doc,s.line).text.length&&s.linei.viewTo-1)return!1;o.line==i.viewFrom||0==(e=sr(r,o.line))?(t=ue(i.view[0].line),n=i.view[0].node):(t=ue(i.view[e].line),n=i.view[e-1].node.nextSibling);var l,c,d=sr(r,s.line);if(d==i.view.length-1?(l=i.viewTo-1,c=i.lineDiv.lastChild):(l=ue(i.view[d+1].line)-1,c=i.view[d+1].node.previousSibling),!n)return!1;for(var u=r.doc.splitLines(function(e,t,n,r,i){var a="",o=!1,s=e.doc.lineSeparator(),l=!1;function c(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(e){e&&(c(),a+=e)}function u(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var a,p=t.getAttribute("cm-marker");if(p){var m=e.findMarks(fe(r,0),fe(i+1,0),function(e){return function(t){return t.id==e}}(+p));return void(m.length&&(a=m[0].find(0))&&d(le(e.doc,a.from,a.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var g=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;g&&c();for(var f=0;f1&&p.length>1;)if(Z(u)==Z(p))u.pop(),p.pop(),l--;else{if(u[0]!=p[0])break;u.shift(),p.shift(),t++}for(var m=0,g=0,f=u[0],h=p[0],b=Math.min(f.length,h.length);mo.ch&&v.charCodeAt(v.length-g-1)==_.charCodeAt(_.length-g-1);)m--,g++;u[u.length-1]=v.slice(0,v.length-g).replace(/^\u200b+/,""),u[0]=u[0].slice(m).replace(/\u200b+$/,"");var E=fe(t,m),x=fe(l,p.length?Z(p).length-g:0);return u.length>1||u[0]||he(E,x)?(ca(r.doc,u,E,x,"+input"),!0):void 0},Po.prototype.ensurePolled=function(){this.forceCompositionEnd()},Po.prototype.reset=function(){this.forceCompositionEnd()},Po.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Po.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Po.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||jr(this.cm,function(){return Xr(e.cm)})},Po.prototype.setUneditable=function(e){e.contentEditable="false"},Po.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Kr(this.cm,Mo)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Po.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Po.prototype.onContextMenu=function(){},Po.prototype.resetPosition=function(){},Po.prototype.needsContentAttribute=!0;var qo=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new G,this.hasSelection=!1,this.composing=null};qo.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;function a(e){if(!it(r,e)){if(r.somethingSelected())No({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=ko(r);No({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,H):(n.prevInput="",i.value=t.text.join("\n"),R(i))}"cut"==e.type&&(r.state.cutIncoming=!0)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),f&&(i.style.width="0px"),et(i,"input",function(){o&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()}),et(i,"paste",function(e){it(r,e)||Do(e,r)||(r.state.pasteIncoming=!0,n.fastPoll())}),et(i,"cut",a),et(i,"copy",a),et(e.scroller,"paste",function(t){En(e,t)||it(r,t)||(r.state.pasteIncoming=!0,n.focus())}),et(e.lineSpace,"selectstart",function(t){En(e,t)||lt(t)}),et(i,"compositionstart",function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}}),et(i,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},qo.prototype.createField=function(e){this.wrapper=Lo(),this.textarea=this.wrapper.firstChild},qo.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=cr(e);if(e.options.moveInputWithCursor){var i=Vn(e,n.sel.primary().head,"div"),a=t.wrapper.getBoundingClientRect(),o=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+o.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+o.left-a.left))}return r},qo.prototype.showSelection=function(e){var t=this.cm,n=t.display;M(n.cursorDiv,e.cursors),M(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},qo.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&R(this.textarea),o&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null))}},qo.prototype.getField=function(){return this.textarea},qo.prototype.supportsTouch=function(){return!1},qo.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!b||A()!=this.textarea))try{this.textarea.focus()}catch(e){}},qo.prototype.blur=function(){this.textarea.blur()},qo.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},qo.prototype.receivedFocus=function(){this.slowPoll()},qo.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},qo.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function n(){var r=t.poll();r||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))})},qo.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||yt(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===i||v&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=i.charCodeAt(0);if(8203!=a||r||(r="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(r.length,i.length);l1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},qo.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},qo.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},qo.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea,a=or(n,e),c=r.scroller.scrollTop;if(a&&!u){var d=n.options.resetSelectionOnContextMenu;d&&-1==n.doc.sel.contains(a)&&Kr(n,Ki)(n.doc,yi(a),H);var p=i.style.cssText,m=t.wrapper.style.cssText;t.wrapper.style.cssText="position: absolute";var g,f=t.wrapper.getBoundingClientRect();if(i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-f.top-5)+"px; left: "+(e.clientX-f.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(g=window.scrollY),r.input.focus(),l&&window.scrollTo(null,g),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=!0,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),o&&s>=9&&b(),S){ut(e);var h=function(){nt(window,"mouseup",h),setTimeout(v,20)};et(window,"mouseup",h)}else setTimeout(v,50)}function b(){if(null!=i.selectionStart){var e=n.somethingSelected(),a="​"+(e?i.value:"");i.value="⇚",i.value=a,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=a.length,r.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending=!1,t.wrapper.style.cssText=m,i.style.cssText=p,o&&s<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=i.selectionStart){(!o||o&&s<9)&&b();var e=0,a=function(){r.selForContextMenu==n.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Kr(n,na)(n):e++<10?r.detectingSelectAll=setTimeout(a,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(a,200)}}},qo.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},qo.prototype.setUneditable=function(){},qo.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,i,a){e.defaults[n]=r,i&&(t[n]=a?function(e,t,n){n!=bo&&i(e,t,n)}:i)}e.defineOption=n,e.Init=bo,n("value","",function(e,t){return e.setValue(t)},!0),n("mode",null,function(e,t){e.doc.modeOption=t,wi(e)},!0),n("indentUnit",2,wi,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,function(e){Ti(e),Gn(e),Xr(e)},!0),n("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var a=e.text.indexOf(t,i);if(-1==a)break;i=a+t.length,n.push(fe(r,a))}r++});for(var i=n.length-1;i>=0;i--)ca(e.doc,t,n[i],fe(n[i].line,n[i].ch+t.length))}}),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=bo&&e.refresh()}),n("specialCharPlaceholder",Xt,function(e){return e.refresh()},!0),n("electricChars",!0),n("inputStyle",b?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),n("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),n("rtlMoveVisually",!y),n("wholeLineUpdateBefore",!0),n("theme","default",function(e){ho(e),yo(e)},!0),n("keyMap","default",function(e,t,n){var r=$a(t),i=n!=bo&&$a(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)}),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,xo,!0),n("gutters",[],function(e){ui(e.options),yo(e)},!0),n("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?rr(e.display)+"px":"0",e.refresh()},!0),n("coverGutterNextToScrollbar",!1,function(e){return Rr(e)},!0),n("scrollbarStyle","native",function(e){Br(e),Rr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),n("lineNumbers",!1,function(e){ui(e.options),yo(e)},!0),n("firstLineNumber",1,yo,!0),n("lineNumberFormatter",function(e){return e},yo,!0),n("showCursorWhenSelecting",!1,lr,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("readOnly",!1,function(e,t){"nocursor"==t&&(br(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),n("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),n("dragDrop",!0,Eo),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,lr,!0),n("singleCursorHeightPerLine",!0,lr,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Ti,!0),n("addModeClass",!1,Ti,!0),n("pollInterval",100),n("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),n("historyEventDelay",1250),n("viewportMargin",10,function(e){return e.refresh()},!0),n("maxHighlightLength",1e4,Ti,!0),n("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),n("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),n("autofocus",null),n("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),n("phrases",null)}(So),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&Kr(this,t[e])(this,n,i),rt(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"]($a(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(wo(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&wr(this));else{var a=i.from(),o=i.to(),s=Math.max(n,a.line);n=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Wi(this.doc,r,new vi(a,c[r].to()),H)}}}),getTokenAt:function(e,t){return zt(this,e,t)},getLineTokens:function(e,t){return zt(this,fe(e),t,!0)},getTokenTypeAt:function(e){e=xe(this.doc,e);var t,n=Pt(this,se(this.doc,e.line)),r=0,i=(n.length-1)/2,a=e.ch;if(0==a)t=n[2];else for(;;){var o=r+i>>1;if((o?n[2*o-1]:0)>=a)i=o;else{if(!(n[2*o+1]a&&(e=a,i=!0),r=se(this.doc,e)}else r=e;return Hn(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-Ve(r):0)},defaultTextHeight:function(){return er(this.display)},defaultCharWidth:function(){return tr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var a=this.display,o=(e=Vn(this,xe(this.doc,e))).bottom,s=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==r)o=e.top;else if("above"==r||"near"==r){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?o=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(o=e.bottom),s+t.offsetWidth>c&&(s=c-t.offsetWidth)}t.style.top=o+"px",t.style.left=t.style.right="","right"==i?(s=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?s=0:"middle"==i&&(s=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+"px"),n&&function(e,t){var n=Sr(e,t);null!=n.scrollTop&&Dr(e,n.scrollTop),null!=n.scrollLeft&&kr(e,n.scrollLeft)}(this,{left:s,top:o,right:s+t.offsetWidth,bottom:o+t.offsetHeight})},triggerOnKeyDown:Zr(io),triggerOnKeyPress:Zr(oo),triggerOnKeyUp:ao,triggerOnMouseDown:Zr(uo),execCommand:function(e){if(Za.hasOwnProperty(e))return Za[e].call(null,this)},triggerElectric:Zr(function(e){Oo(this,e)}),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var a=xe(this.doc,e),o=0;o0&&s(n.charAt(r-1));)--r;for(;i.5)&&ar(this),rt(this,"refresh",this)}),swapDoc:Zr(function(e){var t=this.doc;return t.cm=null,Oi(this,e),Gn(this),this.display.input.reset(),Tr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sn(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},st(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,a){e.registerHelper(t,r,a),n[t]._global.push({pred:i,val:a})}}(So);var zo="iter insert remove copy getEditor constructor".split(" ");for(var Ho in wa.prototype)wa.prototype.hasOwnProperty(Ho)&&U(zo,Ho)<0&&(So.prototype[Ho]=function(e){return function(){return e.apply(this.doc,arguments)}}(wa.prototype[Ho]));return st(wa),So.inputStyles={textarea:qo,contenteditable:Po},So.defineMode=function(e){So.defaults.mode||"null"==e||(So.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),St[e]=t}.apply(this,arguments)},So.defineMIME=function(e,t){Ct[e]=t},So.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),So.defineMIME("text/plain","null"),So.defineExtension=function(e,t){So.prototype[e]=t},So.defineDocExtension=function(e,t){wa.prototype[e]=t},So.fromTextArea=function(e,t){if((t=t?F(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=A();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=s.getValue()}var i;if(e.form&&(et(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var a=e.form;i=a.submit;try{var o=a.submit=function(){r(),a.submit=i,a.submit(),a.submit=o}}catch(e){}}t.finishInit=function(t){t.save=r,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,r(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(nt(e.form,"submit",r),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=So(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=nt,e.on=et,e.wheelEventPixels=fi,e.Doc=wa,e.splitLines=_t,e.countColumn=B,e.findColumn=V,e.isWordChar=ee,e.Pass=z,e.signal=rt,e.Line=Wt,e.changeEnd=Ei,e.scrollbarModel=Fr,e.Pos=fe,e.cmpPos=he,e.modes=St,e.mimeModes=Ct,e.resolveMode=wt,e.getMode=Tt,e.modeExtensions=Nt,e.extendMode=Mt,e.copyState=Dt,e.startState=kt,e.innerMode=Ot,e.commands=Za,e.keyMap=Fa,e.keyName=Ha,e.isModifierKey=qa,e.lookupKey=Ua,e.normalizeKeyMap=Ga,e.StringStream=At,e.SharedTextMarker=Ea,e.TextMarker=_a,e.LineWidget=ha,e.e_preventDefault=lt,e.e_stopPropagation=ct,e.e_stop=ut,e.addClass=L,e.contains=k,e.rmClass=T,e.keyNames=La}(So),So.version="5.40.0",So}()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=o(n(2)),i=o(n(3)),a=o(n(12));function o(e){return e&&e.__esModule?e:{default:e}}var s=r.default.isMac,l=r.default.toggleClass,c=r.default.addClass,d=r.default.removeClass,u=(i.default.baseUrl,i.default.gitGubUrl),p=a.default.getState,m=null,g=function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=(n._options.$tools.blockStyles[i],p(r)),o=r.getCursor("start"),s=r.getCursor("end"),l={quote:/^(\s*)\>\s+/,"unordered-list":/^(\s*)(\*|\-|\+)\s+/,"ordered-list":/^(\s*)\d+\.\s+/},c={quote:"> ","unordered-list":"* ","ordered-list":"1. "},d=o.line;d<=s.line;d++){var u=r.getLine(d);u=a[i]?u.replace(l[i],"$1"):c[i]+u,r.replaceRange(u,{line:d,ch:0},{line:d,ch:99999999999999})}r.focus()};function f(e,t,n,r){var i,a=n[0],o=n[1],s=e.getCursor("start"),l=e.getCursor("end");o=o.replace("#url#",r),t?(a=(i=e.getLine(s.line)).slice(0,s.ch),o=i.slice(s.ch),e.replaceRange(a+o,{line:s.line,ch:0})):(i=e.getSelection(),e.replaceSelection(a+i+o),s.ch+=a.length,s!==l&&(l.ch+=a.length)),e.setSelection(s,l),e.focus()}var h={bold:{name:"bold",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"bold",a=n._options.$tools.blockStyles[i],o=p(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-bold",title:"Bold",default:!0,index:0,isEditTools:!0},italic:{name:"italic",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"italic",a=n._options.$tools.blockStyles[i],o=p(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i&&(s=s.split("~~").join("")),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,u),r.focus()},className:"icon-italic",title:"Italic",default:!0,index:1,isEditTools:!0},heading:{name:"heading",action:function(e){for(var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"Heading",a=(n._options.$tools.blockStyles[i],p(r),r.getCursor("start")),o=r.getCursor("end"),s=a.line;s<=o.line;s++){var l=r.getLine(s),c=l.search(/[^#]/);l="# "+l.substr(c+1),r.replaceRange(l,{line:s,ch:0},{line:s,ch:99999999999999})}r.focus()},className:"icon-heading",title:"Heading",default:!0,index:2,isEditTools:!0},quote:{name:"quote",action:g,className:"icon-quotation-marks",title:"Quote",default:!0,index:3,isEditTools:!0},code:{name:"code",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"code",a=n._options.$tools.blockStyles[i],o=p(r),s=void 0,l=a,c=a,d=r.getCursor("start"),u=r.getCursor("end");o[i]||(s=r.getSelection(),"bold"==i?s=(s=s.split("**").join("")).split("__").join(""):"italic"==i?s=(s=s.split("*").join("")).split("_").join(""):"strikethrough"==i?s=s.split("~~").join(""):"code"==i&&(s="\n\n"),r.replaceSelection(l+s+c),d.ch+=l.length,u.ch=d.ch+s.length),r.setSelection(d,d),r.focus()},className:"icon-code",title:"Code",default:!0,index:4,isEditTools:!0},"unordered-list":{name:"unordered-list",className:"icon-Listofissues",action:function(e){g(e)},title:"Generic List",default:!0,index:5,isEditTools:!0},"ordered-list":{name:"ordered-list",className:"icon-list",action:function(e){g(e)},title:"Number List",default:!0,index:6,isEditTools:!0},link:{name:"link",className:"icon-link",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=n._options.$tools.insertTexts[i];f(r,p(r).link,a,"")},title:"Insert Link",default:!0,index:7,isEditTools:!0},image:{name:"image",className:"icon-img",action:function(e){var t=(e=e||windowl.event).currentTarget,n=t.$editor,r=n.$codemirror,i=t.getAttribute("data-name")||"quote",a=n._options.$tools.insertTexts[i];f(r,p(r).image,a,"")},title:"Insert Image",default:!0,index:8,isEditTools:!0},undo:{name:"undo",className:"icon-goLeft",action:function(e){var t=(e=e||window.event).currentTarget.$editor;m||(m=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("回退",r),n.undoSelection()}},title:"Undo",default:!0,index:9,isEditTools:!0},redo:{name:"redo",className:"icon-goRight",action:function(e){var t=(e=e||window.event).currentTarget.$editor;m||(m=t);var n=t.$codemirror;if(n){var r=n.getHistory();console.log("取消撤销",r),n.redoSelection()}},title:"Redo",default:!0,index:10,isEditTools:!0},about:{name:"about",className:"icon-question",action:function(){window.open(u)},title:"About Editor",default:!0,index:0,isEditTools:!1},edit:{name:"edit",className:"icon-pen",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(m||(m=n),!m.$status.isOnlyEdit){m.$status.isOnlyEdit=!0,m.$status.isOnlyPreview=!m.$status.isOnlyEdit,m.$status.isShowAll=!m.$status.isOnlyEdit,l(t,"active");var r=m._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&c(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-eye"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Edit",default:!0,index:1,isEditTools:!1},compare:{name:"compare",className:"icon-columns",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(m||(m=n),!m.$status.isShowAll){m.$status.isShowAll=!0,m.$status.isOnlyPreview=!m.$status.isShowAll,m.$status.isOnlyEdit=!m.$status.isShowAll,l(t,"active");var r=m._options.el,i=r.querySelector(".editor-preview"),a=r.querySelector(".editor-md");a&&d(a,"hide"),i&&d(i,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-eye");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Compare",default:!0,index:2,isEditTools:!1},preview:{name:"preview",className:"icon-eye",action:function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;if(m||(m=n),!m.$status.isOnlyPreview){m.$status.isOnlyPreview=!0,m.$status.isOnlyEdit=!m.$status.isOnlyPreview,m.$status.isShowAll=!m.$status.isOnlyPreview,l(t,"active");var r=m._options.el,i=r.querySelector(".editor-md"),a=r.querySelector(".editor-preview");i&&c(i,"hide"),a&&d(a,"hide");var o=r.querySelector(".editor-tools").querySelector(".icon-pen"),s=r.querySelector(".editor-tools").querySelector(".icon-columns");o&&d(o,"active"),s&&d(s,"active")}},title:"Toggle Preview",default:!0,index:3,isEditTools:!1},fullscreen:{name:"fullscreen",className:"icon-full-screen",action:function(e){!function(e){var t=(e=e||window.event).currentTarget,n=t.$editor;l(t,"active"),m||(m=n)}(e);var t=m._options.el;l(t,"fullscreen")},title:"Toggle Fullscreen",default:!0,index:4,isEditTools:!1}};t.default={toolbarBuiltInButtons:h,insertTexts:{link:["[","](#url#)"],image:["![](","#url#)"],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},promptTexts:{link:"URL for the link:",image:"URL of the image:"},blockStyles:{bold:"**",code:"```",italic:"*"},shortcuts:{bold:"Cmd-B",italic:"Cmd-I",link:"Cmd-K",heading:"Cmd-H",quote:"Cmd-'",toggleHeadingBigger:"Shift-Cmd-H",cleanBlock:"Cmd-E",image:"Cmd-Alt-I",back:"Cmd-Z",front:"Cmd-Y",toggleBlockquote:"Cmd-'","ordered-list":"Cmd-Alt-L","unordered-list":"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},fixShortcut:function(e){return e=s?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i={_mergeProperties:function(e,t){for(var n in t)if(t.hasOwnProperty(n))if(souce[n]instanceof Array){var i=e[n]instanceof Array?e[n]:[];e[n]=t[n].concat(i)}else null!=t[n]&&"object"===r(t[n])&&t[n].constructor===Object?e[n]=this._mergeProperties(e[n]||{},souce[n]):e[n]=t[n];return e},extend:function(e){for(var t=0;t0){var i=void 0;n.forEach(function(n){i=e[n],t.push(i)})}return t}},isFunction:function(e){var t=!1;return"function"==typeof e&&(t=!0),t}};t.default=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={baseUrl:"https://www.github.com",iconLink:"//at.alicdn.com/t/font_823030_gxvkgahpx49.css",gitGubUrl:"https://github.com/Jesonhu/cool-md-editor",editor:{className:{themeDark:"editor-theme-dark",themeLight:"editor-theme-light",fullscreen:"editor-status_fullscreen",compare:"editor-status_show-all",edit:"editor-status_only-edit",preview:"editor-status_only-preview"},theme:{dark:{className:"editor-theme-dark",mode:"base16-dark"},light:{className:"editor-theme-light",mode:"base16-light"}},language:function(e){return e&&e.__esModule?e:{default:e}}(n(11)).default}};t.default=r},function(e,t,n){!function(e){"use strict";e.defineMode("markdown",function(t,n){var r=e.getMode(t,"text/html"),i="null"==r.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var a={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var o in a)a.hasOwnProperty(o)&&n.tokenTypeOverrides[o]&&(a[o]=n.tokenTypeOverrides[o]);var s=/^([*\-_])(?:\s*\1){2,}\s*$/,l=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,c=/^\[(x| )\](?=\s)/i,d=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,u=/^ *(?:\={1,}|-{1,})\s*$/,p=/^[^#!\[\]*_\\<>` "'(~:]+/,m=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,g=/^\s*\[[^\]]+?\]:.*$/,f=/[!\"#$%&\'()*+,\-\.\/:;<=>?@\[\\\]^_`{|}~—]/;function h(e,t,n){return t.f=t.inline=n,n(e,t)}function b(e,t,n){return t.f=t.block=n,n(e,t)}function v(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==y){var n=i;if(!n){var a=e.innerMode(r,t.htmlState);n="xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText}n&&(t.f=C,t.block=_,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function _(r,i){var o=r.column()===i.indentation,p=function(e){return!e||!/\S/.test(e.string)}(i.prevLine.stream),f=i.indentedCode,b=i.prevLine.hr,v=!1!==i.list,_=(i.listStack[i.listStack.length-1]||0)+3;i.indentedCode=!1;var y=i.indentation;if(null===i.indentationDiff&&(i.indentationDiff=i.indentation,v)){for(i.em=!1,i.strong=!1,i.code=!1,i.strikethrough=!1,i.list=null;y=4&&(f||i.prevLine.fencedCodeEnd||i.prevLine.header||p))return r.skipToEnd(),i.indentedCode=!0,a.code;if(r.eatSpace())return null;if(o&&i.indentation<=_&&(w=r.match(d))&&w[1].length<=6)return i.quote=0,i.header=w[1].length,i.thisLine.header=!0,n.highlightFormatting&&(i.formatting="header"),i.f=i.inline,x(i);if(i.indentation<=_&&r.eat(">"))return i.quote=o?1:i.quote+1,n.highlightFormatting&&(i.formatting="quote"),r.eatSpace(),x(i);if(!C&&!i.setext&&o&&i.indentation<=_&&(w=r.match(l))){var T=w[1]?"ol":"ul";return i.indentation=y+r.current().length,i.list=!0,i.quote=0,i.listStack.push(i.indentation),n.taskLists&&r.match(c,!1)&&(i.taskList=!0),i.f=i.inline,n.highlightFormatting&&(i.formatting=["list","list-"+T]),x(i)}return o&&i.indentation<=_&&(w=r.match(m,!0))?(i.quote=0,i.fencedEndRE=new RegExp(w[1]+"+ *$"),i.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var r=e.findModeByName(n);r&&(n=r.mime||r.mimes[0])}var i=e.getMode(t,n);return"null"==i.name?null:i}(w[2]),i.localMode&&(i.localState=e.startState(i.localMode)),i.f=i.block=E,n.highlightFormatting&&(i.formatting="code-block"),i.code=-1,x(i)):i.setext||!(S&&v||i.quote||!1!==i.list||i.code||C||g.test(r.string))&&(w=r.lookAhead(1))&&(w=w.match(u))?(i.setext?(i.header=i.setext,i.setext=0,r.skipToEnd(),n.highlightFormatting&&(i.formatting="header")):(i.header="="==w[0].charAt(0)?1:2,i.setext=i.header),i.thisLine.header=!0,i.f=i.inline,x(i)):C?(r.skipToEnd(),i.hr=!0,i.thisLine.hr=!0,a.hr):"["===r.peek()?h(r,i,M):h(r,i,i.inline)}function y(t,n){var a=r.token(t,n.htmlState);if(!i){var o=e.innerMode(r,n.htmlState);("xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=C,n.block=_,n.htmlState=null)}return a}function E(e,t){var r,i=t.listStack[t.listStack.length-1]||0,o=t.indentation=e.quote?t.push(a.formatting+"-"+e.formatting[r]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(a.linkHref,"url"):(e.strong&&t.push(a.strong),e.em&&t.push(a.em),e.strikethrough&&t.push(a.strikethrough),e.emoji&&t.push(a.emoji),e.linkText&&t.push(a.linkText),e.code&&t.push(a.code),e.image&&t.push(a.image),e.imageAltText&&t.push(a.imageAltText,"link"),e.imageMarker&&t.push(a.imageMarker)),e.header&&t.push(a.header,a.header+"-"+e.header),e.quote&&(t.push(a.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(a.quote+"-"+e.quote):t.push(a.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var i=(e.listStack.length-1)%3;i?1===i?t.push(a.list2):t.push(a.list3):t.push(a.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function S(e,t){if(e.match(p,!0))return x(t)}function C(t,i){var o=i.text(t,i);if(void 0!==o)return o;if(i.list)return i.list=null,x(i);if(i.taskList){var s=" "===t.match(c,!0)[1];return s?i.taskOpen=!0:i.taskClosed=!0,n.highlightFormatting&&(i.formatting="task"),i.taskList=!1,x(i)}if(i.taskOpen=!1,i.taskClosed=!1,i.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(i.formatting="header"),x(i);var l=t.next();if(i.linkTitle){i.linkTitle=!1;var d=l;"("===l&&(d=")");var u="^\\s*(?:[^"+(d=(d+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+d;if(t.match(new RegExp(u),!0))return a.linkHref}if("`"===l){var p=i.formatting;n.highlightFormatting&&(i.formatting="code"),t.eatWhile("`");var m=t.current().length;if(0!=i.code||i.quote&&1!=m){if(m==i.code){var g=x(i);return i.code=0,g}return i.formatting=p,x(i)}return i.code=m,x(i)}if(i.code)return x(i);if("\\"===l&&(t.next(),n.highlightFormatting)){var h=x(i),v=a.formatting+"-escape";return h?h+" "+v:v}if("!"===l&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return i.imageMarker=!0,i.image=!0,n.highlightFormatting&&(i.formatting="image"),x(i);if("["===l&&i.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return i.imageMarker=!1,i.imageAltText=!0,n.highlightFormatting&&(i.formatting="image"),x(i);if("]"===l&&i.imageAltText){n.highlightFormatting&&(i.formatting="image");var h=x(i);return i.imageAltText=!1,i.image=!1,i.inline=i.f=T,h}if("["===l&&!i.image)return i.linkText&&t.match(/^.*?\]/)?x(i):(i.linkText=!0,n.highlightFormatting&&(i.formatting="link"),x(i));if("]"===l&&i.linkText){n.highlightFormatting&&(i.formatting="link");var h=x(i);return i.linkText=!1,i.inline=i.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?T:C,h}if("<"===l&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){i.f=i.inline=w,n.highlightFormatting&&(i.formatting="link");var h=x(i);return h?h+=" ":h="",h+a.linkInline}if("<"===l&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){i.f=i.inline=w,n.highlightFormatting&&(i.formatting="link");var h=x(i);return h?h+=" ":h="",h+a.linkEmail}if(n.xml&&"<"===l&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var _=t.string.indexOf(">",t.pos);if(-1!=_){var E=t.string.substring(t.start,_);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(E)&&(i.md_inside=!0)}return t.backUp(1),i.htmlState=e.startState(r),b(t,i,y)}if(n.xml&&"<"===l&&t.match(/^\/\w*?>/))return i.md_inside=!1,"tag";if("*"===l||"_"===l){for(var S=1,N=1==t.pos?" ":t.string.charAt(t.pos-2);S<3&&t.eat(l);)S++;var M=t.peek()||" ",D=!/\s/.test(M)&&(!f.test(M)||/\s/.test(N)||f.test(N)),O=!/\s/.test(N)&&(!f.test(N)||/\s/.test(M)||f.test(M)),k=null,A=null;if(S%2&&(i.em||!D||"*"!==l&&O&&!f.test(N)?i.em!=l||!O||"*"!==l&&D&&!f.test(M)||(k=!1):k=!0),S>1&&(i.strong||!D||"*"!==l&&O&&!f.test(N)?i.strong!=l||!O||"*"!==l&&D&&!f.test(M)||(A=!1):A=!0),null!=A||null!=k){n.highlightFormatting&&(i.formatting=null==k?"strong":null==A?"em":"strong em"),!0===k&&(i.em=l),!0===A&&(i.strong=l);var g=x(i);return!1===k&&(i.em=!1),!1===A&&(i.strong=!1),g}}else if(" "===l&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return x(i);t.backUp(1)}if(n.strikethrough)if("~"===l&&t.eatWhile(l)){if(i.strikethrough){n.highlightFormatting&&(i.formatting="strikethrough");var g=x(i);return i.strikethrough=!1,g}if(t.match(/^[^\s]/,!1))return i.strikethrough=!0,n.highlightFormatting&&(i.formatting="strikethrough"),x(i)}else if(" "===l&&t.match(/^~~/,!0)){if(" "===t.peek())return x(i);t.backUp(2)}if(n.emoji&&":"===l&&t.match(/^[a-z_\d+-]+:/)){i.emoji=!0,n.highlightFormatting&&(i.formatting="emoji");var L=x(i);return i.emoji=!1,L}return" "===l&&(t.match(/^ +$/,!1)?i.trailingSpace++:i.trailingSpace&&(i.trailingSpaceNewLine=!0)),x(i)}function w(e,t){var r=e.next();if(">"===r){t.f=t.inline=C,n.highlightFormatting&&(t.formatting="link");var i=x(t);return i?i+=" ":i="",i+a.linkInline}return e.match(/^[^>]+/,!0),a.linkInline}function T(e,t){if(e.eatSpace())return null;var r=e.next();return"("===r||"["===r?(t.f=t.inline=function(e){return function(t,r){var i=t.next();if(i===e){r.f=r.inline=C,n.highlightFormatting&&(r.formatting="link-string");var a=x(r);return r.linkHref=!1,a}return t.match(N[e]),r.linkHref=!0,x(r)}}("("===r?")":"]"),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,x(t)):"error"}var N={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function M(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=D,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,x(t)):h(e,t,C)}function D(e,t){if(e.match(/^\]:/,!0)){t.f=t.inline=O,n.highlightFormatting&&(t.formatting="link");var r=x(t);return t.linkText=!1,r}return e.match(/^([^\]\\]|\\.)+/,!0),a.linkText}function O(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),t.f=t.inline=C,a.linkHref+" url")}var k={startState:function(){return{f:_,prevLine:{stream:null},thisLine:{stream:null},block:_,htmlState:null,indentation:0,inline:C,text:S,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(r,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return v(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=y)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==y?{state:e.htmlState,mode:r}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:k}},indent:function(t,n,i){return t.block==y&&r.indent?r.indent(t.htmlState,n,i):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,i):e.Pass},blankLine:v,getType:x,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return k},"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")}(n(0),n(15),n(16))},function(e,t,n){!function(e){"use strict";e.overlayMode=function(t,n,r){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(r){return{base:e.copyState(t,r.base),overlay:e.copyState(n,r.overlay),basePos:r.basePos,baseCur:null,overlayPos:r.overlayPos,overlayCur:null}},token:function(e,i){return(e!=i.streamSeen||Math.min(i.basePos,i.overlayPos)=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function l(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(s(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t+1}}function d(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){i.lastIndex=t,e.ch=t;var n=i.exec(e.text);if(n&&n.index==t)return n}else e.ch=t}}function u(e){for(;;){i.lastIndex=e.ch;var t=i.exec(e.text);if(!t){if(s(e))continue;return}if(o(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function p(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(l(e))continue;return}if(o(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t}}function m(e,n){for(var r=[];;){var i,a=u(e),o=e.line,s=e.ch-(a?a[0].length:0);if(!a||!(i=c(e)))return;if("selfClose"!=i)if(a[1]){for(var l=r.length-1;l>=0;--l)if(r[l]==a[2]){r.length=l;break}if(l<0&&(!n||n==a[2]))return{tag:a[2],from:t(o,s),to:t(e.line,e.ch)}}else r.push(a[2])}}function g(e,n){for(var r=[];;){var i=p(e);if(!i)return;if("selfClose"!=i){var a=e.line,o=e.ch,s=d(e);if(!s)return;if(s[1])r.push(s[2]);else{for(var l=r.length-1;l>=0;--l)if(r[l]==s[2]){r.length=l;break}if(l<0&&(!n||n==s[2]))return{tag:s[2],from:t(e.line,e.ch),to:t(a,o)}}}else d(e)}}e.registerHelper("fold","xml",function(e,r){for(var i=new a(e,r.line,0);;){var o=u(i);if(!o||i.line!=r.line)return;var s=c(i);if(!s)return;if(!o[1]&&"selfClose"!=s){var l=t(i.line,i.ch),d=m(i,o[2]);return d&&n(d.from,l)>0?{from:l,to:d.from}:null}}}),e.findMatchingTag=function(e,r,i){var o=new a(e,r.line,r.ch,i);if(-1!=o.text.indexOf(">")||-1!=o.text.indexOf("<")){var s=c(o),l=s&&t(o.line,o.ch),u=s&&d(o);if(s&&u&&!(n(o,r)>0)){var p={from:t(o.line,o.ch),to:l,tag:u[2]};return"selfClose"==s?{open:p,close:null,at:"open"}:u[1]?{open:g(o,u[2]),close:p,at:"close"}:(o=new a(e,l.line,l.ch,i),{open:p,close:m(o,u[2]),at:"open"})}}},e.findEnclosingTag=function(e,t,n,r){for(var i=new a(e,t.line,t.ch,n);;){var o=g(i,r);if(!o)break;var s=new a(e,t.line,t.ch,n),l=m(s,o.tag);if(l)return{open:o,close:l}}},e.scanForClosingTag=function(e,t,n,r){var i=new a(e,t.line,t.ch,r?{from:0,to:r}:null);return m(i,n)}}(n(0))},function(e,t,n){!function(e){"use strict";function t(t,n,i,a){if(i&&i.call){var o=i;i=null}else var o=r(t,i,"rangeFinder");"number"==typeof n&&(n=e.Pos(n,0));var s=r(t,i,"minFoldSize");function l(e){var r=o(t,n);if(!r||r.to.line-r.from.linet.firstLine();)n=e.Pos(n.line-1,0),c=l(!1);if(c&&!c.cleared&&"unfold"!==a){var d=function(e,t){var n=r(e,t,"widget");if("string"==typeof n){var i=document.createTextNode(n);(n=document.createElement("span")).appendChild(i),n.className="CodeMirror-foldmarker"}else n&&(n=n.cloneNode(!0));return n}(t,i);e.on(d,"mousedown",function(t){u.clear(),e.e_preventDefault(t)});var u=t.markText(c.from,c.to,{replacedWith:d,clearOnEnter:r(t,i,"clearOnEnter"),__isFold:!0});u.on("clear",function(n,r){e.signal(t,"unfold",t,n,r)}),e.signal(t,"fold",t,c.from,c.to)}}e.newFoldFunction=function(e,n){return function(r,i){t(r,i,{rangeFinder:e,widget:n})}},e.defineExtension("foldCode",function(e,n,r){t(this,e,n,r)}),e.defineExtension("isFolded",function(e){for(var t=this.findMarksAt(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t.editor=this,this.init(t)}return a(e,[{key:"init",value:function(e){var t=this;this.initData(e).then(function(){t.initView(e)})}},{key:"initData",value:function(e){var t=this;return new Promise(function(n,r){t.initOption(e),t.initEditorStatus(),n()})}},{key:"initView",value:function(e){var t=this;this.createIconLink(),this.createElement(e).then(function(){t.initEvent(),t.initCodeMirrorData(),t.initMarkdownData(),t.initDefaultContent()})}},{key:"initEvent",value:function(){this.initStatusEvent(),this.initToolsEvent()}},{key:"initOption",value:function(e){this._options=e,this._options.$tools=l.default,this._options.lang=s.default.editor.language}},{key:"createIconLink",value:function(){if(!this.isCreatedIconLink()){var e=document.createElement("link");e.setAttribute("data-editor",!0),e.rel="stylesheet",e.href=s.default.iconLink,document.getElementsByTagName("head")[0].appendChild(e)}}},{key:"isCreatedIconLink",value:function(){return!!document.querySelector("link[data-editor]")}},{key:"createElement",value:function(e){return new Promise(function(t,n){o.default.init(e).then(function(){t()})})}},{key:"initToolsEvent",value:function(){var e=this,t=this._options.$tools,n=this._options.el,r=t.toolbarBuiltInButtons,i=c.default.obj2Arr(r);i.length>0&&i.forEach(function(t){var r="."+t.className,i=t.action,a=c.default.isFunction(i);if(""!==r&&a){var o=n.querySelector(".editor-tools").querySelector(r);o&&(o.$editor=e,o.addEventListener("click",i,!1))}})}},{key:"createCodeMirrorElement",value:function(e,t){return d.default.fromTextArea(e,t)}},{key:"initCodeMirrorData",value:function(){this._options;var e=this._options.el.querySelector("#area");this.$codemirror=this.createCodeMirrorElement(e,{mode:{name:"gfm",tokenTypeOverrides:{emoji:"emoji"}},lineNumbers:!0,matchBrackets:!0,indentUnit:4,lineWrapping:!0,styleActiveLine:!0,theme:"base16-dark",autoCloseBrackets:!0,autoCloseTags:!0,foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"]}),this.$codemirror.$editor=this,this.initCodeMirrorEvent()}},{key:"initCodeMirrorEvent",value:function(){this.add_CM_change_eventHandle(),this.add_CM_cursorActivity_eventHandle(),this.addScrollSync()}},{key:"add_CM_change_eventHandle",value:function(){this.$codemirror.on("changes",this.onCodeMirrorChange)}},{key:"onCodeMirrorChange",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"add_CM_cursorActivity_eventHandle",value:function(){this.$codemirror.on("cursorActivity",this.onCodeMirrorCursorActivity)}},{key:"onCodeMirrorCursorActivity",value:function(e){e.$editor.commonCodeMirrorEventHandle(e)}},{key:"commonCodeMirrorEventHandle",value:function(e){var t=e.getValue(),n=e.$editor;n.setHtmlValue(t),n.updateStatusBar(n)}},{key:"initMarkdownData",value:function(e){if(u.default){var t={gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!1,smartLists:!0,smartypants:!1,highlight:function(e){return p.default.highlightAuto(e).value}};this.$marked=u.default,this.$marked.setOptions(t)}}},{key:"initMarkdownEvent",value:function(){}},{key:"initDefaultContent",value:function(){var e=this._options.defaultCon;if(e){var t=this.$codemirror;t.setValue(e),this.commonCodeMirrorEventHandle(t)}}},{key:"getMDValue",value:function(){return this.$codemirror.getValue()}},{key:"setHtmlValue",value:function(e){var t=this.$marked(e);this._options.el.querySelector(".editor-preview").querySelector(".preview-bd").innerHTML=t}},{key:"addScrollSync",value:function(){var e=this.$codemirror,t=this._options.el.querySelector(".editor-preview"),n=!1,r=!1;e.on("scroll",function(e){if(n)n=!1;else{r=!0;var i=e.getScrollInfo().height-e.getScrollInfo().clientHeight,a=parseFloat(e.getScrollInfo().top)/i,o=(t.scrollHeight-t.clientHeight)*a;t.scrollTop=o}}),t.addEventListener("scroll",function(){if(r)r=!1;else{n=!0;var i=t.scrollHeight-t.clientHeight,a=parseFloat(t.scrollTop)/i,o=(e.getScrollInfo().height-e.getScrollInfo().clientHeight)*a;e.scrollTo(0,o)}})}},{key:"updateStatusBar",value:function(){var e=this.$codemirror.getValue().length;this.renderEditorContentPosition(),this.renderEditContentLength(e)}},{key:"renderEditContentLength",value:function(e){var t=this._options.el.querySelector(".editor-status").querySelector(".editor-status-length"),n=this._options.lang.statusBar.length;t.innerHTML=n+" "+e}},{key:"renderEditorContentPosition",value:function(){var e=this.$codemirror,t=e.lineCount(),n=e.getCursor(),r=n.ch+1,i=n.line+1,a=this._options.lang.statusBar,o=a.line,s=a.columns;this._options.el.querySelector(".editor-status").querySelector(".editor-status-positon").querySelector("span").innerHTML=o+" "+i+","+s+" "+r+" 一 "+t+" "+o}},{key:"initEditorStatus",value:function(e){this.$status={},this.$status.isThemeLight=!0,this.$status.isFullscreen=!1}},{key:"initStatusEvent",value:function(){this.initEventToggleTheme()}},{key:"initEventToggleTheme",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".icon-theme",n=this,r=this._options.el.querySelector(".editor-status").querySelector(t),i=this._options.el,a=c.default.addClass,o=c.default.removeClass;if(r){r.addEventListener("click",function(){n.$status.isThemeLight?(a(i,"editor-theme-dark"),o(i,"editor-theme-light")):(a(i,"editor-theme-light"),o(i,"editor-theme-dark")),n.$status.isThemeLight=!n.$status.isThemeLight})}}},{key:"initEventToggleFullscreen",value:function(e){}},{key:"render",value:function(e){e||(e=this.textAreaElement||this.element.getElementsByTagName("textarea")[0]);var t=this.options,n=this,r={};for(var i in t.shortcuts)null!==t.shortcuts[i]&&null!==bindings[i]&&function(e){r[fixShortcut(t.shortcuts[e])]=function(){bindings[e](n)}}(i);r.Enter="newlineAndIndentContinueMarkdownList",r.Tab="tabAndIndentMarkdownList",r.Esc=function(e){e.getOptions("fullScreen")&&toggleFullScreen(n)},document.addEventListener("keydown",function(e){27==(e=e||window.event).keyCode&&n.codemirror.getOptions("fullScreen")&&toggleFullScreen(n)},!1)}},{key:"options",set:function(e){},get:function(){return this._options}}]),e}();"object"===i(n(8))&&n(8)?void 0===(r=function(){return g}.call(t,n,t,e))||(e.exports=r):void 0!==e&&e.exports?e.exports=g:window.CoolMDEditor=g},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(e){return e&&e.__esModule?e:{default:e}}(n(1));var a=i.default.shortcuts,o=i.default.fixShortcut,s={init:function(e){var t=this;return this.initData(e),new Promise(function(n,r){t.renderTools(e).then(function(){t.renderCode(e)}).then(function(){t.renderPriview(e)}).then(function(){t.renderStatus(e)}).then(function(){n()}).catch(function(e){return e})})},initData:function(e){this.lang=e.lang},renderTools:function(e){var t=e.el,n=e.$tools.toolbarBuiltInButtons,r=this.createToolsMain(n),i=this.createToolsHandle(n);return new Promise(function(e,n){t.innerHTML+='\n
    '+r+i+"
    \n ",e()})},createToolsMain:function(e){var t=this,n=this.getToolsEdit(e),r='
    ';if(n.length>0){var i=n.length;n.forEach(function(e,n){n>0&&(n+1)%3==0&&n!==i-1?r=r+t.createToolsItem(e)+'|':r+=t.createToolsItem(e)})}return r+="
    "},getToolsEdit:function(e){if("object"===(void 0===e?"undefined":r(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var i in n)n[i].isEditTools&&(t[i]=n[i]);return this.sortToolsIcon(t,"index")}},createToolsHandle:function(e){var t='
    ',n=this;return this.getToolsHandle(e).forEach(function(e,r){t+=n.createToolsItem(e)}),t+="
    "},getToolsHandle:function(e){if("object"===(void 0===e?"undefined":r(e))){var t={},n=JSON.parse(JSON.stringify(e));for(var i in n)n[i].isEditTools||(t[i]=n[i]);return this.sortToolsIcon(t,"index")}},sortToolsIcon:function(e,t){if("object"===(void 0===e?"undefined":r(e))){var n=[];for(var i in e)n.push(e[i]);return n.sort(function(e,t){return e.index-t.index})}},createToolsItem:function(e){var t=a[e.name],n=void 0;return n=t?o(t):"",''},renderCode:function(e){var t=e.el;return new Promise(function(e,n){t.innerHTML+='\n
    \n
    \n \n
    \n
    \n ',e()})},renderPriview:function(e){var t=e.el;return new Promise(function(e,n){t.innerHTML+='\n
    \n
    \n
    \n
    \n ',e()})},renderStatus:function(e){var t=e.el,n=this.createStatusPosition(e),r=this.createStatusLens();return new Promise(function(e,i){t.innerHTML+='\n
    '+n+r+"
    ",e()})},createStatusPosition:function(e){var t=this.createStatusToggleTheme(),n=this.lang.statusBar,r=n.line;return'
    '+r+" ,"+n.columns+" 一 "+r+""+t+"
    "},createStatusToggleTheme:function(){return''},createStatusLens:function(){return'
    '+this.lang.statusBar.length+"
    "}};t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={statusBar:{line:"line",columns:"columns",length:"length"}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={getState:function(e,t){t=t||e.getCursor("start");var n=e.getTokenAt(t);if(!n.type)return{};for(var r,i,a=n.type.split(" "),o={},s=0;s")):null:e.match("--")?n(m("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(function e(t){return function(n,r){for(var i;null!=(i=n.next());){if("<"==i)return r.tokenize=e(t+1),r.tokenize(n,r);if(">"==i){if(1==t){r.tokenize=u;break}return r.tokenize=e(t-1),r.tokenize(n,r)}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=m("meta","?>"),"meta"):(a=e.eat("/")?"closeTag":"openTag",t.tokenize=p,"tag bracket"):"&"==r?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function p(e,t){var n=e.next();if(">"==n||"/"==n&&e.eat(">"))return t.tokenize=u,a=">"==n?"endTag":"selfcloseTag","tag bracket";if("="==n)return a="equals",null;if("<"==n){t.tokenize=u,t.state=h,t.tagName=t.tagStart=null;var r=t.tokenize(e,t);return r?r+" tag error":"tag error"}return/[\'\"]/.test(n)?(t.tokenize=function(e){var t=function(t,n){for(;!t.eol();)if(t.next()==e){n.tokenize=p;break}return"string"};return t.isInAttribute=!0,t}(n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function m(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=u;break}n.next()}return e}}function g(e){e.context&&(e.context=e.context.prev)}function f(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!l.contextGrabbers.hasOwnProperty(n)||!l.contextGrabbers[n].hasOwnProperty(t))return;g(e)}}function h(e,t,n){return"openTag"==e?(n.tagStart=t.column(),b):"closeTag"==e?v:h}function b(e,t,n){return"word"==e?(n.tagName=t.current(),o="tag",E):l.allowMissingTagName&&"endTag"==e?(o="tag bracket",E(e,0,n)):(o="error",b)}function v(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&l.implicitlyClosed.hasOwnProperty(n.context.tagName)&&g(n),n.context&&n.context.tagName==r||!1===l.matchClosing?(o="tag",_):(o="tag error",y)}return l.allowMissingTagName&&"endTag"==e?(o="tag bracket",_(e,0,n)):(o="error",y)}function _(e,t,n){return"endTag"!=e?(o="error",_):(g(n),h)}function y(e,t,n){return o="error",_(e,0,n)}function E(e,t,n){if("word"==e)return o="attribute",x;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||l.autoSelfClosers.hasOwnProperty(r)?f(n,r):(f(n,r),n.context=new function(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(l.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}(n,r,i==n.indented)),h}return o="error",E}function x(e,t,n){return"equals"==e?S:(l.allowMissing||(o="error"),E(e,0,n))}function S(e,t,n){return"string"==e?C:"word"==e&&l.allowUnquoted?(o="string",E):(o="error",E(e,0,n))}function C(e,t,n){return"string"==e?C:E(e,0,n)}return u.isInText=!0,{startState:function(e){var t={tokenize:u,state:h,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var n=t.tokenize(e,t);return(n||a)&&"comment"!=n&&(o=null,t.state=t.state(a||n,e,t),o&&(n="error"==o?n+" error":o)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+s;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=p&&t.tokenize!=u)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==l.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+s*(l.multilineTagIndentFactor||1);if(l.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:l.htmlMode?"html":"xml",helperType:l.htmlMode?"html":"xml",skipAttribute:function(e){e.state==S&&(e.state=E)}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(0))},function(e,t,n){!function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded Javascript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history).md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"null",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m","mm"],alias:["objective-c","objc"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki ",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]}];for(var t=0;t-1&&t.substring(i+1,t.length);if(a)return e.findModeByExtension(a)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",function(n,r){var i=0,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var a=e.pos;e.eatWhile("`");var o=1+e.pos-a;return n.code?o===i&&(n.code=!1):(i=o,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==r.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},o={taskLists:!0,strikethrough:!0,emoji:!0};for(var s in r)o[s]=r[s];return o.name="markdown",e.overlayMode(e.getMode(n,o),a)},"markdown"),e.defineMIME("text/x-gfm","gfm")}(n(0),n(4),n(5))},function(e,t,n){!function(e){"use strict";e.defineMode("javascript",function(t,n){var r,i,a=t.indentUnit,o=n.statementIndent,s=n.jsonld,l=n.json||s,c=n.typescript,d=n.wordCharacters||/[\w$\xa1-\uffff]/,u=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),n=e("keyword b"),r=e("keyword c"),i=e("keyword d"),a=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:n,do:n,try:n,finally:n,return:i,break:i,continue:i,new:e("new"),delete:r,void:r,throw:r,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:a,typeof:a,instanceof:a,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:r,export:e("export"),import:e("import"),extends:r,await:r}}(),p=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function g(e,t,n){return r=e,i=n,t}function f(e,t){var n=e.next();if('"'==n||"'"==n)return t.tokenize=function(e){return function(t,n){var r,i=!1;if(s&&"@"==t.peek()&&t.match(m))return n.tokenize=f,g("jsonld-keyword","meta");for(;null!=(r=t.next())&&(r!=e||i);)i=!i&&"\\"==r;return i||(n.tokenize=f),g("string","string")}}(n),t.tokenize(e,t);if("."==n&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return g("number","number");if("."==n&&e.match(".."))return g("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return g(n);if("="==n&&e.eat(">"))return g("=>","operator");if("0"==n&&e.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return g("number","number");if(/\d/.test(n))return e.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),g("number","number");if("/"==n)return e.eat("*")?(t.tokenize=h,h(e,t)):e.eat("/")?(e.skipToEnd(),g("comment","comment")):Ve(e,t,1)?(function(e){for(var t,n=!1,r=!1;null!=(t=e.next());){if(!n){if("/"==t&&!r)return;"["==t?r=!0:r&&"]"==t&&(r=!1)}n=!n&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),g("regexp","string-2")):(e.eat("="),g("operator","operator",e.current()));if("`"==n)return t.tokenize=b,b(e,t);if("#"==n)return e.skipToEnd(),g("error","error");if(p.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),g("operator","operator",e.current());if(d.test(n)){e.eatWhile(d);var r=e.current();if("."!=t.lastType){if(u.propertyIsEnumerable(r)){var i=u[r];return g(i.type,i.style,r)}if("async"==r&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return g("async","keyword",r)}return g("variable","variable",r)}}function h(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=f;break}r="*"==n}return g("comment","comment")}function b(e,t){for(var n,r=!1;null!=(n=e.next());){if(!r&&("`"==n||"$"==n&&e.eat("{"))){t.tokenize=f;break}r=!r&&"\\"==n}return g("quasi","string-2",e.current())}var v="([{}])";function _(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(!(n<0)){if(c){var r=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n));r&&(n=r.index)}for(var i=0,a=!1,o=n-1;o>=0;--o){var s=e.string.charAt(o),l=v.indexOf(s);if(l>=0&&l<3){if(!i){++o;break}if(0==--i){"("==s&&(a=!0);break}}else if(l>=3&&l<6)++i;else if(d.test(s))a=!0;else{if(/["'\/]/.test(s))return;if(a&&!i){++o;break}}}a&&!i&&(t.fatArrowAt=o)}}var y={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function E(e,t,n,r,i,a){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=a,null!=r&&(this.align=r)}function x(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var r=e.context;r;r=r.prev)for(var n=r.vars;n;n=n.next)if(n.name==t)return!0}var S={state:null,column:null,marked:null,cc:null};function C(){for(var e=arguments.length-1;e>=0;e--)S.cc.push(arguments[e])}function w(){return C.apply(null,arguments),!0}function T(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function N(e){var t=S.state;if(S.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,n){if(n){if(n.block){var r=e(t,n.prev);return r?r==n.prev?n:new D(r,n.vars,!0):null}return T(t,n.vars)?n:new D(n.prev,new O(t,n.vars),!1)}return null}(e,t.context);if(null!=r)return void(t.context=r)}else if(!T(e,t.localVars))return void(t.localVars=new O(e,t.localVars));n.globalVars&&!T(e,t.globalVars)&&(t.globalVars=new O(e,t.globalVars))}function M(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function D(e,t,n){this.prev=e,this.vars=t,this.block=n}function O(e,t){this.name=e,this.next=t}var k=new O("this",new O("arguments",null));function A(){S.state.context=new D(S.state.context,S.state.localVars,!1),S.state.localVars=k}function L(){S.state.context=new D(S.state.context,S.state.localVars,!0),S.state.localVars=null}function I(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function R(e,t){var n=function(){var n=S.state,r=n.indented;if("stat"==n.lexical.type)r=n.lexical.indented;else for(var i=n.lexical;i&&")"==i.type&&i.align;i=i.prev)r=i.indented;n.lexical=new E(r,S.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function P(){var e=S.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function F(e){return function t(n){return n==e?w():";"==e||"}"==n||")"==n||"]"==n?C():w(t)}}function B(e,t){return"var"==e?w(R("vardef",t),ve,F(";"),P):"keyword a"==e?w(R("form"),z,B,P):"keyword b"==e?w(R("form"),B,P):"keyword d"==e?S.stream.match(/^\s*$/,!1)?w():w(R("stat"),$,F(";"),P):"debugger"==e?w(F(";")):"{"==e?w(R("}"),L,oe,P,I):";"==e?w():"if"==e?("else"==S.state.lexical.info&&S.state.cc[S.state.cc.length-1]==P&&S.state.cc.pop()(),w(R("form"),z,B,P,Se)):"function"==e?w(De):"for"==e?w(R("form"),Ce,B,P):"class"==e||c&&"interface"==t?(S.marked="keyword",w(R("form"),Ae,P)):"variable"==e?c&&"declare"==t?(S.marked="keyword",w(B)):c&&("module"==t||"enum"==t||"type"==t)&&S.stream.match(/^\s*\w/,!1)?(S.marked="keyword","enum"==t?w($e):"type"==t?w(de,F("operator"),de,F(";")):w(R("form"),_e,F("{"),R("}"),oe,P,P)):c&&"namespace"==t?(S.marked="keyword",w(R("form"),U,oe,P)):c&&"abstract"==t?(S.marked="keyword",w(B)):w(R("stat"),J):"switch"==e?w(R("form"),z,F("{"),R("}","switch"),L,oe,P,P,I):"case"==e?w(U,F(":")):"default"==e?w(F(":")):"catch"==e?w(R("form"),A,G,B,P,I):"export"==e?w(R("stat"),Pe,P):"import"==e?w(R("stat"),Be,P):"async"==e?w(B):"@"==t?w(U,B):C(R("stat"),U,F(";"),P)}function G(e){if("("==e)return w(Oe,F(")"))}function U(e,t){return H(e,t,!1)}function q(e,t){return H(e,t,!0)}function z(e){return"("!=e?C():w(R(")"),U,F(")"),P)}function H(e,t,n){if(S.state.fatArrowAt==S.stream.start){var r=n?Q:Z;if("("==e)return w(A,R(")"),ie(Oe,")"),P,F("=>"),r,I);if("variable"==e)return C(A,_e,F("=>"),r,I)}var i=n?V:W;return y.hasOwnProperty(e)?w(i):"function"==e?w(De,i):"class"==e||c&&"interface"==t?(S.marked="keyword",w(R("form"),ke,P)):"keyword c"==e||"async"==e?w(n?q:U):"("==e?w(R(")"),$,F(")"),P,i):"operator"==e||"spread"==e?w(n?q:U):"["==e?w(R("]"),He,P,i):"{"==e?ae(te,"}",null,i):"quasi"==e?C(j,i):"new"==e?w(function(e){return function(t){return"."==t?w(e?Y:X):"variable"==t&&c?w(fe,e?V:W):C(e?q:U)}}(n)):"import"==e?w(U):w()}function $(e){return e.match(/[;\}\)\],]/)?C():C(U)}function W(e,t){return","==e?w(U):V(e,t,!1)}function V(e,t,n){var r=0==n?W:V,i=0==n?U:q;return"=>"==e?w(A,n?Q:Z,I):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?w(r):c&&"<"==t&&S.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?w(R(">"),ie(de,">"),P,r):"?"==t?w(U,F(":"),i):w(i):"quasi"==e?C(j,r):";"!=e?"("==e?ae(q,")","call",r):"."==e?w(ee,r):"["==e?w(R("]"),$,F("]"),P,r):c&&"as"==t?(S.marked="keyword",w(de,r)):"regexp"==e?(S.state.lastType=S.marked="operator",S.stream.backUp(S.stream.pos-S.stream.start-1),w(i)):void 0:void 0}function j(e,t){return"quasi"!=e?C():"${"!=t.slice(t.length-2)?w(j):w(U,K)}function K(e){if("}"==e)return S.marked="string-2",S.state.tokenize=b,w(j)}function Z(e){return _(S.stream,S.state),C("{"==e?B:U)}function Q(e){return _(S.stream,S.state),C("{"==e?B:q)}function X(e,t){if("target"==t)return S.marked="keyword",w(W)}function Y(e,t){if("target"==t)return S.marked="keyword",w(V)}function J(e){return":"==e?w(P,B):C(W,F(";"),P)}function ee(e){if("variable"==e)return S.marked="property",w()}function te(e,t){if("async"==e)return S.marked="property",w(te);if("variable"==e||"keyword"==S.style){return S.marked="property","get"==t||"set"==t?w(ne):(c&&S.state.fatArrowAt==S.stream.start&&(n=S.stream.match(/^\s*:\s*/,!1))&&(S.state.fatArrowAt=S.stream.pos+n[0].length),w(re));var n}else{if("number"==e||"string"==e)return S.marked=s?"property":S.style+" property",w(re);if("jsonld-keyword"==e)return w(re);if(c&&M(t))return S.marked="keyword",w(te);if("["==e)return w(U,se,F("]"),re);if("spread"==e)return w(q,re);if("*"==t)return S.marked="keyword",w(te);if(":"==e)return C(re)}}function ne(e){return"variable"!=e?C(re):(S.marked="property",w(De))}function re(e){return":"==e?w(q):"("==e?C(De):void 0}function ie(e,t,n){function r(i,a){if(n?n.indexOf(i)>-1:","==i){var o=S.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),w(function(n,r){return n==t||r==t?C():C(e)},r)}return i==t||a==t?w():w(F(t))}return function(n,i){return n==t||i==t?w():C(e,r)}}function ae(e,t,n){for(var r=3;r"),de):void 0}function ue(e){if("=>"==e)return w(de)}function pe(e,t){return"variable"==e||"keyword"==S.style?(S.marked="property",w(pe)):"?"==t?w(pe):":"==e?w(de):"["==e?w(U,se,F("]"),pe):void 0}function me(e,t){return"variable"==e&&S.stream.match(/^\s*[?:]/,!1)||"?"==t?w(me):":"==e?w(de):C(de)}function ge(e,t){return"<"==t?w(R(">"),ie(de,">"),P,ge):"|"==t||"."==e||"&"==t?w(de):"["==e?w(F("]"),ge):"extends"==t||"implements"==t?(S.marked="keyword",w(de)):void 0}function fe(e,t){if("<"==t)return w(R(">"),ie(de,">"),P,ge)}function he(){return C(de,be)}function be(e,t){if("="==t)return w(de)}function ve(e,t){return"enum"==t?(S.marked="keyword",w($e)):C(_e,se,Ee,xe)}function _e(e,t){return c&&M(t)?(S.marked="keyword",w(_e)):"variable"==e?(N(t),w()):"spread"==e?w(_e):"["==e?ae(_e,"]"):"{"==e?ae(ye,"}"):void 0}function ye(e,t){return"variable"!=e||S.stream.match(/^\s*:/,!1)?("variable"==e&&(S.marked="property"),"spread"==e?w(_e):"}"==e?C():w(F(":"),_e,Ee)):(N(t),w(Ee))}function Ee(e,t){if("="==t)return w(q)}function xe(e){if(","==e)return w(ve)}function Se(e,t){if("keyword b"==e&&"else"==t)return w(R("form","else"),B,P)}function Ce(e,t){return"await"==t?w(Ce):"("==e?w(R(")"),we,F(")"),P):void 0}function we(e){return"var"==e?w(ve,F(";"),Ne):";"==e?w(Ne):"variable"==e?w(Te):C(U,F(";"),Ne)}function Te(e,t){return"in"==t||"of"==t?(S.marked="keyword",w(U)):w(W,Ne)}function Ne(e,t){return";"==e?w(Me):"in"==t||"of"==t?(S.marked="keyword",w(U)):C(U,F(";"),Me)}function Me(e){")"!=e&&w(U)}function De(e,t){return"*"==t?(S.marked="keyword",w(De)):"variable"==e?(N(t),w(De)):"("==e?w(A,R(")"),ie(Oe,")"),P,le,B,I):c&&"<"==t?w(R(">"),ie(he,">"),P,De):void 0}function Oe(e,t){return"@"==t&&w(U,Oe),"spread"==e?w(Oe):c&&M(t)?(S.marked="keyword",w(Oe)):C(_e,se,Ee)}function ke(e,t){return"variable"==e?Ae(e,t):Le(e,t)}function Ae(e,t){if("variable"==e)return N(t),w(Le)}function Le(e,t){return"<"==t?w(R(">"),ie(he,">"),P,Le):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(S.marked="keyword"),w(c?de:U,Le)):"{"==e?w(R("}"),Ie,P):void 0}function Ie(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&M(t))&&S.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(S.marked="keyword",w(Ie)):"variable"==e||"keyword"==S.style?(S.marked="property",w(c?Re:De,Ie)):"["==e?w(U,se,F("]"),c?Re:De,Ie):"*"==t?(S.marked="keyword",w(Ie)):";"==e?w(Ie):"}"==e?w():"@"==t?w(U,Ie):void 0}function Re(e,t){return"?"==t?w(Re):":"==e?w(de,Ee):"="==t?w(q):C(De)}function Pe(e,t){return"*"==t?(S.marked="keyword",w(ze,F(";"))):"default"==t?(S.marked="keyword",w(U,F(";"))):"{"==e?w(ie(Fe,"}"),ze,F(";")):C(B)}function Fe(e,t){return"as"==t?(S.marked="keyword",w(F("variable"))):"variable"==e?C(q,Fe):void 0}function Be(e){return"string"==e?w():"("==e?C(U):C(Ge,Ue,ze)}function Ge(e,t){return"{"==e?ae(Ge,"}"):("variable"==e&&N(t),"*"==t&&(S.marked="keyword"),w(qe))}function Ue(e){if(","==e)return w(Ge,Ue)}function qe(e,t){if("as"==t)return S.marked="keyword",w(Ge)}function ze(e,t){if("from"==t)return S.marked="keyword",w(U)}function He(e){return"]"==e?w():C(ie(q,"]"))}function $e(){return C(R("form"),_e,F("{"),R("}"),ie(We,"}"),P,P)}function We(){return C(_e,Ee)}function Ve(e,t,n){return t.tokenize==f&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(n||0)))}return I.lex=!0,P.lex=!0,{startState:function(e){var t={tokenize:f,lastType:"sof",cc:[],lexical:new E((e||0)-a,0,"block",!1),localVars:n.localVars,context:n.localVars&&new D(null,null,!1),indented:e||0};return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),_(e,t)),t.tokenize!=h&&e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==r?n:(t.lastType="operator"!=r||"++"!=i&&"--"!=i?r:"incdec",function(e,t,n,r,i){var a=e.cc;for(S.state=e,S.stream=i,S.marked=null,S.cc=a,S.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;){var o=a.length?a.pop():l?U:B;if(o(n,r)){for(;a.length&&a[a.length-1].lex;)a.pop()();return S.marked?S.marked:"variable"==n&&x(e,r)?"variable-2":t}}}(t,n,r,i,e))},indent:function(t,r){if(t.tokenize==h)return e.Pass;if(t.tokenize!=f)return 0;var i,s=r&&r.charAt(0),l=t.lexical;if(!/^\s*else\b/.test(r))for(var c=t.cc.length-1;c>=0;--c){var d=t.cc[c];if(d==P)l=l.prev;else if(d!=Se)break}for(;("stat"==l.type||"form"==l.type)&&("}"==s||(i=t.cc[t.cc.length-1])&&(i==W||i==V)&&!/^[,\.=+\-*:?[\(]/.test(r));)l=l.prev;o&&")"==l.type&&"stat"==l.prev.type&&(l=l.prev);var u=l.type,m=s==u;return"vardef"==u?l.indented+("operator"==t.lastType||","==t.lastType?l.info.length+1:0):"form"==u&&"{"==s?l.indented:"form"==u?l.indented+a:"stat"==u?l.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||p.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?o||a:0):"switch"!=l.info||m||0==n.doubleIndentSwitch?l.align?l.column+(m?0:1):l.indented+(m?0:a):l.indented+(/^(?:case|default)\b/.test(r)?a:2*a)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:s,jsonMode:l,expressionAllowed:Ve,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=U&&t!=q||e.cc.pop()}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(0))},function(e,t,n){!function(e){e.defineOption("autoCloseTags",!1,function(o,s,l){if(l!=e.Init&&l&&o.removeKeyMap("autoCloseTags"),s){var c={name:"autoCloseTags"};("object"!=typeof s||s.whenClosing)&&(c["'/'"]=function(t){return function(t){return t.getOption("disableInput")?e.Pass:r(t,!0)}(t)}),("object"!=typeof s||s.whenOpening)&&(c["'>'"]=function(r){return function(r){if(r.getOption("disableInput"))return e.Pass;for(var o=r.listSelections(),s=[],l=r.getOption("autoCloseTags"),c=0;cd.ch&&(b=b.slice(0,b.length-u.end+d.ch));var v=b.toLowerCase();if(!b||"string"==u.type&&(u.end!=d.ch||!/[\"\']/.test(u.string.charAt(u.string.length-1))||1==u.string.length)||"tag"==u.type&&"closeTag"==m.type||u.string.indexOf("/")==u.string.length-1||f&&i(f,v)>-1||a(r,b,d,m,!0))return e.Pass;var _=h&&i(h,v)>-1;s[c]={indent:_,text:">"+(_?"\n\n":"")+"",newPos:_?e.Pos(d.line+1,0):e.Pos(d.line,d.ch+1)}}for(var y="object"==typeof l&&l.dontIndentOnAutoClose,c=o.length-1;c>=0;c--){var E=s[c];r.replaceRange(E.text,o[c].head,o[c].anchor,"+insert");var x=r.listSelections().slice(0);x[c]={head:E.newPos,anchor:E.newPos},r.setSelections(x),!y&&E.indent&&(r.indentLine(E.newPos.line,null,!0),r.indentLine(E.newPos.line+1,null,!0))}}(r)}),o.addKeyMap(c)}});var t=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],n=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];function r(t,n){for(var r=t.listSelections(),i=[],o=n?"/":""!=t.getLine(u.line).charAt(p.end)&&(d+=">"),i[c]=d}if(t.replaceSelections(i),r=t.listSelections(),!l)for(var c=0;c[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,r=/[*+-]\s/;function i(e,n){var r=n.line,i=0,a=0,o=t.exec(e.getLine(r)),s=o[1];do{var l=r+(i+=1),c=e.getLine(l),d=t.exec(c);if(d){var u=d[1],p=parseInt(o[3],10)+i-a,m=parseInt(d[3],10),g=m;if(s!==u||isNaN(m)){if(s.length>u.length)return;if(s.lengthm&&(g=p+1),e.replaceRange(c.replace(t,u+g+d[4]+d[5]),{line:l,ch:0},{line:l,ch:c.length})}}while(d)}e.commands.newlineAndIndentContinueMarkdownList=function(a){if(a.getOption("disableInput"))return e.Pass;for(var o=a.listSelections(),s=[],l=0;l\s*$/.test(m)||a.replaceRange("",{line:c.line,ch:0},{line:c.line,ch:c.ch+1}),s[l]="\n";else{var h=g[1],b=g[5],v=!(r.test(g[2])||g[2].indexOf(">")>=0),_=v?parseInt(g[3],10)+1+g[4]:g[2].replace("x"," ");s[l]="\n"+h+_+b,v&&i(a,c)}}a.replaceSelections(s)}}(n(0))},function(e,t,n){!function(e){var t={pairs:"()[]{}''\"\"",triples:"",explode:"[]{}"},n=e.Pos;function r(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,function(t,n,o){o&&o!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(a(r(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))});var i={Backspace:function(t){var i=s(t);if(!i||t.getOption("disableInput"))return e.Pass;for(var a=r(i,"pairs"),o=t.listSelections(),l=0;l=0;l--){var u=o[l].head;t.replaceRange("",n(u.line,u.ch-1),n(u.line,u.ch+1),"+delete")}},Enter:function(t){var n=s(t),i=n&&r(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var a=t.listSelections(),o=0;o1&&p.indexOf(i)>=0&&t.getRange(n(_.line,_.ch-2),_)==i+i){if(_.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(_.line,_.ch-2))))return e.Pass;b="addFour"}else if(m){var E=0==_.ch?" ":t.getRange(n(_.line,_.ch-1),_);if(e.isWordChar(y)||E==i||e.isWordChar(E))return e.Pass;b="both"}else{if(!f)return e.Pass;b="both"}else b=m&&d(t,_)?"both":p.indexOf(i)>=0&&t.getRange(_,n(_.line,_.ch+3))==i+i+i?"skipThree":"skip";if(u){if(u!=b)return e.Pass}else u=b}var x=c%2?o.charAt(c-1):i,S=c%2?i:o.charAt(c+1);t.operation(function(){if("skip"==u)t.execCommand("goCharRight");else if("skipThree"==u)for(var e=0;e<3;e++)t.execCommand("goCharRight");else if("surround"==u){for(var n=t.getSelections(),e=0;e0;return{anchor:new n(t.anchor.line,t.anchor.ch+(r?-1:1)),head:new n(t.head.line,t.head.ch+(r?1:-1))}}function c(e,t){var r=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==r.length?r:null}function d(e,t){var r=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}a(t.pairs+"`")}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t){function n(e){clearTimeout(r.doRedraw),r.doRedraw=setTimeout(function(){r.redraw()},e)}this.cm=e,this.options=t,this.buttonHeight=t.scrollButtonHeight||e.getOption("scrollButtonHeight"),this.annotations=[],this.doRedraw=this.doUpdate=null,this.div=e.getWrapperElement().appendChild(document.createElement("div")),this.div.style.cssText="position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none",this.computeScale();var r=this;e.on("refresh",this.resizeHandler=function(){clearTimeout(r.doUpdate),r.doUpdate=setTimeout(function(){r.computeScale()&&n(20)},100)}),e.on("markerAdded",this.resizeHandler),e.on("markerCleared",this.resizeHandler),!1!==t.listenForChanges&&e.on("change",this.changeHandler=function(){n(250)})}e.defineExtension("annotateScrollbar",function(e){return"string"==typeof e&&(e={className:e}),new t(this,e)}),e.defineOption("scrollButtonHeight",0),t.prototype.computeScale=function(){var e=this.cm,t=(e.getWrapperElement().clientHeight-e.display.barHeight-2*this.buttonHeight)/e.getScrollerElement().scrollHeight;if(t!=this.hScale)return this.hScale=t,!0},t.prototype.update=function(e){this.annotations=e,this.redraw()},t.prototype.redraw=function(e){!1!==e&&this.computeScale();var t=this.cm,n=this.hScale,r=document.createDocumentFragment(),i=this.annotations,a=t.getOption("lineWrapping"),o=a&&1.5*t.defaultTextHeight(),s=null,l=null;function c(e,n){if(s!=e.line&&(s=e.line,l=t.getLineHandle(s)),l.widgets&&l.widgets.length||a&&l.height>o)return t.charCoords(e,"local")[n?"top":"bottom"];var r=t.heightAtLine(l,"local");return r+(n?0:l.height)}var d=t.lastLine();if(t.display.barWidth)for(var u,p=0;pd)){for(var g=u||c(m.from,!0)*n,f=c(m.to,!1)*n;pd)&&!((u=c(i[p+1].from,!0)*n)>f+.9);)m=i[++p],f=c(m.to,!1)*n;if(f!=g){var h=Math.max(f-g,3),b=r.appendChild(document.createElement("div"));b.style.cssText="position: absolute; right: 0px; width: "+Math.max(t.display.barWidth-1,2)+"px; top: "+(g+this.buttonHeight)+"px; height: "+h+"px",b.className=this.options.className,m.id&&b.setAttribute("annotation-id",m.id)}}}this.div.textContent="",this.div.appendChild(r)},t.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("change",this.changeHandler),this.div.parentNode.removeChild(this.div)}}(n(0))},function(e,t,n){!function(e){"use strict";var t="CodeMirror-activeline",n="CodeMirror-activeline-background",r="CodeMirror-activeline-gutter";function i(e){for(var i=0;i1)return l(e);var t=e.getCursor("start"),n=e.getCursor("end"),i=e.state.markedSelection;if(!i.length)return o(e,t,n);var c=i[0].find(),d=i[i.length-1].find();if(!c||!d||n.line-t.line<=r||a(t,d.to)>=0||a(n,c.from)<=0)return l(e);for(;a(t,c.from)>0;)i.shift().clear(),c=i[0].find();for(a(t,c.from)<0&&(c.to.line-t.line0&&(n.line-d.from.line=n.line,m=p?n:i(u,0),g=e.markText(d,m,{className:l});if(null==o?s.push(g):s.splice(o++,0,g),p)break;c=u}}function s(e){for(var t=e.state.markedSelection,n=0;n=l&&(a=r(o.indicatorOpen))}e.setGutterMarker(i,o.gutter,a),++s})}function a(e){var t=e.getViewport(),n=e.state.foldGutter;n&&(e.operation(function(){i(e,t.from,t.to)}),n.from=t.from,n.to=t.to)}function o(e,r,i){var a=e.state.foldGutter;if(a){var o=a.options;if(i==o.gutter){var s=n(e,r);s?s.clear():e.foldCode(t(r,0),o.rangeFinder)}}}function s(e){var t=e.state.foldGutter;if(t){var n=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout(function(){a(e)},n.foldOnChangeTimeSpan||600)}}function l(e){var t=e.state.foldGutter;if(t){var n=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout(function(){var n=e.getViewport();t.from==t.to||n.from-t.to>20||t.from-n.to>20?a(e):e.operation(function(){n.fromt.to&&(i(e,t.to,n.to),t.to=n.to)})},n.updateViewportTimeSpan||400)}}function c(e,t){var n=e.state.foldGutter;if(n){var r=t.line;r>=n.from&&ri))break;a=o}}return a?{from:e.Pos(r.line,n.getLine(r.line).length),to:e.Pos(a,n.getLine(a).length)}:void 0}})}(n(0))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","brace",function(t,n){var r,i=n.line,a=t.getLine(i);function o(o){for(var s=n.ch,l=0;;){var c=s<=0?-1:a.lastIndexOf(o,s-1);if(-1!=c){if(1==l&&ct.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));if(/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"keyword"!=r.type||"import"!=r.string)return null;for(var i=n,a=Math.min(t.lastLine(),n+10);i<=a;++i){var o=t.getLine(i),s=o.indexOf(";");if(-1!=s)return{startCh:r.end,end:e.Pos(i,s)}}}var i,a=n.line,o=r(a);if(!o||r(a-1)||(i=r(a-2))&&i.end.line==a-1)return null;for(var s=o.end;;){var l=r(s.line+1);if(null==l)break;s=l.end}return{from:t.clipPos(e.Pos(a,o.startCh+1)),to:s}}),e.registerHelper("fold","include",function(t,n){function r(n){if(nt.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));return/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"meta"==r.type&&"#include"==r.string.slice(0,8)?r.start+8:void 0}var i=n.line,a=r(i);if(null==a||null!=r(i-1))return null;for(var o=i;;){var s=r(o+1);if(null==s)break;++o}return{from:e.Pos(i,a+1),to:t.clipPos(e.Pos(o))}})}(n(0))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","markdown",function(t,n){var r=100;function i(n){var r=t.getTokenTypeAt(e.Pos(n,0));return r&&/\bheader\b/.test(r)}function a(e,t,n){var a=t&&t.match(/^#+/);return a&&i(e)?a[0].length:(a=n&&n.match(/^[=\-]+\s*$/))&&i(e+1)?"="==n[0]?1:2:r}var o=t.getLine(n.line),s=t.getLine(n.line+1),l=a(n.line,o,s);if(l!==r){for(var c=t.lastLine(),d=n.line,u=t.getLine(d+2);d ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:f,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function r(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||_.defaults,this.rules=n.normal,this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.tables?this.rules=n.tables:this.rules=n.gfm)}n._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,n._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,n.def=u(n.def).replace("label",n._label).replace("title",n._title).getRegex(),n.bullet=/(?:[*+-]|\d+\.)/,n.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,n.item=u(n.item,"gm").replace(/bull/g,n.bullet).getRegex(),n.list=u(n.list).replace(/bull/g,n.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+n.def.source+")").getRegex(),n._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",n._comment=//,n.html=u(n.html,"i").replace("comment",n._comment).replace("tag",n._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),n.paragraph=u(n.paragraph).replace("hr",n.hr).replace("heading",n.heading).replace("lheading",n.lheading).replace("tag",n._tag).getRegex(),n.blockquote=u(n.blockquote).replace("paragraph",n.paragraph).getRegex(),n.normal=h({},n),n.gfm=h({},n.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),n.gfm.paragraph=u(n.paragraph).replace("(?!","(?!"+n.gfm.fences.source.replace("\\1","\\2")+"|"+n.list.source.replace("\\1","\\3")+"|").getRegex(),n.tables=h({},n.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),n.pedantic=h({},n.normal,{html:u("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",n._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),r.rules=n,r.lex=function(e,t){return new r(t).lex(e)},r.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},r.prototype.token=function(e,t){var r,i,a,o,s,l,c,d,u,p,m,g,f,h,_,y;for(e=e.replace(/^ +$/gm,"");e;)if((a=this.rules.newline.exec(e))&&(e=e.substring(a[0].length),a[0].length>1&&this.tokens.push({type:"space"})),a=this.rules.code.exec(e))e=e.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?a:v(a,"\n")});else if(a=this.rules.fences.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=this.rules.heading.exec(e))e=e.substring(a[0].length),this.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(t&&(a=this.rules.nptable.exec(e))&&(l={type:"table",header:b(a[1].replace(/^ *| *\| *$/g,"")),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3]?a[3].replace(/\n$/,"").split("\n"):[]}).header.length===l.align.length){for(e=e.substring(a[0].length),m=0;m ?/gm,""),this.token(a,t),this.tokens.push({type:"blockquote_end"});else if(a=this.rules.list.exec(e)){for(e=e.substring(a[0].length),c={type:"list_start",ordered:h=(o=a[2]).length>1,start:h?+o:"",loose:!1},this.tokens.push(c),d=[],r=!1,f=(a=a[0].match(this.rules.item)).length,m=0;m1&&s.length>1||(e=a.slice(m+1).join("\n")+e,m=f-1)),i=r||/\n\n(?!\s*$)/.test(l),m!==f-1&&(r="\n"===l.charAt(l.length-1),i||(i=r)),i&&(c.loose=!0),y=void 0,(_=/^\[[ xX]\] /.test(l))&&(y=" "!==l[1],l=l.replace(/^\[[ xX]\] +/,"")),u={type:"list_item_start",task:_,checked:y,loose:i},d.push(u),this.tokens.push(u),this.token(l,!1),this.tokens.push({type:"list_item_end"});if(c.loose)for(f=d.length,m=0;m?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:f,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:f,text:/^[\s\S]+?(?=[\\/g,">").replace(/"/g,""").replace(/'/g,"'")}function d(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function u(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=(n=n.source||n).replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function p(e,t){return m[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?m[" "+e]=e+"/":m[" "+e]=v(e,"/",!0)),e=m[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}i._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,i._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,i._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,i.autolink=u(i.autolink).replace("scheme",i._scheme).replace("email",i._email).getRegex(),i._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,i.tag=u(i.tag).replace("comment",n._comment).replace("attribute",i._attribute).getRegex(),i._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,i._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,i._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,i.link=u(i.link).replace("label",i._label).replace("href",i._href).replace("title",i._title).getRegex(),i.reflink=u(i.reflink).replace("label",i._label).getRegex(),i.normal=h({},i),i.pedantic=h({},i.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:u(/^!?\[(label)\]\((.*?)\)/).replace("label",i._label).getRegex(),reflink:u(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",i._label).getRegex()}),i.gfm=h({},i.normal,{escape:u(i.escape).replace("])","~|])").getRegex(),url:u(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email",i._email).getRegex(),_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:u(i.text).replace("]|","~]|").replace("|","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()}),i.breaks=h({},i.gfm,{br:u(i.br).replace("{2,}","*").getRegex(),text:u(i.gfm.text).replace("{2,}","*").getRegex()}),a.rules=i,a.output=function(e,t,n){return new a(t,n).output(e)},a.prototype.output=function(e){for(var t,n,r,i,o,s,l="";e;)if(o=this.rules.escape.exec(e))e=e.substring(o[0].length),l+=o[1];else if(o=this.rules.autolink.exec(e))e=e.substring(o[0].length),r="@"===o[2]?"mailto:"+(n=c(this.mangle(o[1]))):n=c(o[1]),l+=this.renderer.link(r,null,n);else if(this.inLink||!(o=this.rules.url.exec(e))){if(o=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(o[0])&&(this.inLink=!1),e=e.substring(o[0].length),l+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):c(o[0]):o[0];else if(o=this.rules.link.exec(e))e=e.substring(o[0].length),this.inLink=!0,r=o[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],i=t[3]):i="":i=o[3]?o[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),l+=this.outputLink(o,{href:a.escapes(r),title:a.escapes(i)}),this.inLink=!1;else if((o=this.rules.reflink.exec(e))||(o=this.rules.nolink.exec(e))){if(e=e.substring(o[0].length),t=(o[2]||o[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){l+=o[0].charAt(0),e=o[0].substring(1)+e;continue}this.inLink=!0,l+=this.outputLink(o,t),this.inLink=!1}else if(o=this.rules.strong.exec(e))e=e.substring(o[0].length),l+=this.renderer.strong(this.output(o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.em.exec(e))e=e.substring(o[0].length),l+=this.renderer.em(this.output(o[6]||o[5]||o[4]||o[3]||o[2]||o[1]));else if(o=this.rules.code.exec(e))e=e.substring(o[0].length),l+=this.renderer.codespan(c(o[2].trim(),!0));else if(o=this.rules.br.exec(e))e=e.substring(o[0].length),l+=this.renderer.br();else if(o=this.rules.del.exec(e))e=e.substring(o[0].length),l+=this.renderer.del(this.output(o[1]));else if(o=this.rules.text.exec(e))e=e.substring(o[0].length),l+=this.renderer.text(c(this.smartypants(o[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{do{s=o[0],o[0]=this.rules._backpedal.exec(o[0])[0]}while(s!==o[0]);e=e.substring(o[0].length),"@"===o[2]?r="mailto:"+(n=c(o[0])):(n=c(o[0]),r="www."===o[1]?"http://"+n:n),l+=this.renderer.link(r,null,n)}return l},a.escapes=function(e){return e?e.replace(a.rules._escapes,"$1"):e},a.prototype.outputLink=function(e,t){var n=t.href,r=t.title?c(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,c(e[1]))},a.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},a.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,i=0;i.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},o.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'
    '+(n?e:c(e,!0))+"
    \n":"
    "+(n?e:c(e,!0))+"
    "},o.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},o.prototype.html=function(e){return e},o.prototype.heading=function(e,t,n){return this.options.headerIds?"'+e+"\n":""+e+"\n"},o.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},o.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},o.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},o.prototype.checkbox=function(e){return" "},o.prototype.paragraph=function(e){return"

    "+e+"

    \n"},o.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},o.prototype.tablerow=function(e){return"\n"+e+"\n"},o.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},o.prototype.strong=function(e){return""+e+""},o.prototype.em=function(e){return""+e+""},o.prototype.codespan=function(e){return""+e+""},o.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},o.prototype.del=function(e){return""+e+""},o.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(d(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return n}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return n}this.options.baseUrl&&!g.test(e)&&(e=p(this.options.baseUrl,e));try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return n}var i='
    "},o.prototype.image=function(e,t,n){this.options.baseUrl&&!g.test(e)&&(e=p(this.options.baseUrl,e));var r=''+n+'":">"},o.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},l.parse=function(e,t){return new l(t).parse(e)},l.prototype.parse=function(e){this.inline=new a(e.links,this.options),this.inlineText=new a(e.links,h({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},l.prototype.next=function(){return this.token=this.tokens.pop()},l.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},l.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},l.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,d(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,i="",a="";for(n="",e=0;e=0&&"\\"===n[i];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.lengthAn error occurred:

    "+c(e.message+"",!0)+"
    ";throw e}}f.exec=f,_.options=_.setOptions=function(e){return h(_.defaults,e),_},_.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new o,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},_.defaults=_.getDefaults(),_.Parser=l,_.parser=l.parse,_.Renderer=o,_.TextRenderer=s,_.Lexer=r,_.lexer=r.lex,_.InlineLexer=a,_.inlineLexer=a.output,_.parse=_,e.exports=_}(this||"undefined"!=typeof window&&window)}).call(this,n(35))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(37);r.registerLanguage("1c",n(38)),r.registerLanguage("abnf",n(39)),r.registerLanguage("accesslog",n(40)),r.registerLanguage("actionscript",n(41)),r.registerLanguage("ada",n(42)),r.registerLanguage("apache",n(43)),r.registerLanguage("applescript",n(44)),r.registerLanguage("cpp",n(45)),r.registerLanguage("arduino",n(46)),r.registerLanguage("armasm",n(47)),r.registerLanguage("xml",n(48)),r.registerLanguage("asciidoc",n(49)),r.registerLanguage("aspectj",n(50)),r.registerLanguage("autohotkey",n(51)),r.registerLanguage("autoit",n(52)),r.registerLanguage("avrasm",n(53)),r.registerLanguage("awk",n(54)),r.registerLanguage("axapta",n(55)),r.registerLanguage("bash",n(56)),r.registerLanguage("basic",n(57)),r.registerLanguage("bnf",n(58)),r.registerLanguage("brainfuck",n(59)),r.registerLanguage("cal",n(60)),r.registerLanguage("capnproto",n(61)),r.registerLanguage("ceylon",n(62)),r.registerLanguage("clean",n(63)),r.registerLanguage("clojure",n(64)),r.registerLanguage("clojure-repl",n(65)),r.registerLanguage("cmake",n(66)),r.registerLanguage("coffeescript",n(67)),r.registerLanguage("coq",n(68)),r.registerLanguage("cos",n(69)),r.registerLanguage("crmsh",n(70)),r.registerLanguage("crystal",n(71)),r.registerLanguage("cs",n(72)),r.registerLanguage("csp",n(73)),r.registerLanguage("css",n(74)),r.registerLanguage("d",n(75)),r.registerLanguage("markdown",n(76)),r.registerLanguage("dart",n(77)),r.registerLanguage("delphi",n(78)),r.registerLanguage("diff",n(79)),r.registerLanguage("django",n(80)),r.registerLanguage("dns",n(81)),r.registerLanguage("dockerfile",n(82)),r.registerLanguage("dos",n(83)),r.registerLanguage("dsconfig",n(84)),r.registerLanguage("dts",n(85)),r.registerLanguage("dust",n(86)),r.registerLanguage("ebnf",n(87)),r.registerLanguage("elixir",n(88)),r.registerLanguage("elm",n(89)),r.registerLanguage("ruby",n(90)),r.registerLanguage("erb",n(91)),r.registerLanguage("erlang-repl",n(92)),r.registerLanguage("erlang",n(93)),r.registerLanguage("excel",n(94)),r.registerLanguage("fix",n(95)),r.registerLanguage("flix",n(96)),r.registerLanguage("fortran",n(97)),r.registerLanguage("fsharp",n(98)),r.registerLanguage("gams",n(99)),r.registerLanguage("gauss",n(100)),r.registerLanguage("gcode",n(101)),r.registerLanguage("gherkin",n(102)),r.registerLanguage("glsl",n(103)),r.registerLanguage("go",n(104)),r.registerLanguage("golo",n(105)),r.registerLanguage("gradle",n(106)),r.registerLanguage("groovy",n(107)),r.registerLanguage("haml",n(108)),r.registerLanguage("handlebars",n(109)),r.registerLanguage("haskell",n(110)),r.registerLanguage("haxe",n(111)),r.registerLanguage("hsp",n(112)),r.registerLanguage("htmlbars",n(113)),r.registerLanguage("http",n(114)),r.registerLanguage("hy",n(115)),r.registerLanguage("inform7",n(116)),r.registerLanguage("ini",n(117)),r.registerLanguage("irpf90",n(118)),r.registerLanguage("java",n(119)),r.registerLanguage("javascript",n(120)),r.registerLanguage("jboss-cli",n(121)),r.registerLanguage("json",n(122)),r.registerLanguage("julia",n(123)),r.registerLanguage("julia-repl",n(124)),r.registerLanguage("kotlin",n(125)),r.registerLanguage("lasso",n(126)),r.registerLanguage("ldif",n(127)),r.registerLanguage("leaf",n(128)),r.registerLanguage("less",n(129)),r.registerLanguage("lisp",n(130)),r.registerLanguage("livecodeserver",n(131)),r.registerLanguage("livescript",n(132)),r.registerLanguage("llvm",n(133)),r.registerLanguage("lsl",n(134)),r.registerLanguage("lua",n(135)),r.registerLanguage("makefile",n(136)),r.registerLanguage("mathematica",n(137)),r.registerLanguage("matlab",n(138)),r.registerLanguage("maxima",n(139)),r.registerLanguage("mel",n(140)),r.registerLanguage("mercury",n(141)),r.registerLanguage("mipsasm",n(142)),r.registerLanguage("mizar",n(143)),r.registerLanguage("perl",n(144)),r.registerLanguage("mojolicious",n(145)),r.registerLanguage("monkey",n(146)),r.registerLanguage("moonscript",n(147)),r.registerLanguage("n1ql",n(148)),r.registerLanguage("nginx",n(149)),r.registerLanguage("nimrod",n(150)),r.registerLanguage("nix",n(151)),r.registerLanguage("nsis",n(152)),r.registerLanguage("objectivec",n(153)),r.registerLanguage("ocaml",n(154)),r.registerLanguage("openscad",n(155)),r.registerLanguage("oxygene",n(156)),r.registerLanguage("parser3",n(157)),r.registerLanguage("pf",n(158)),r.registerLanguage("php",n(159)),r.registerLanguage("pony",n(160)),r.registerLanguage("powershell",n(161)),r.registerLanguage("processing",n(162)),r.registerLanguage("profile",n(163)),r.registerLanguage("prolog",n(164)),r.registerLanguage("protobuf",n(165)),r.registerLanguage("puppet",n(166)),r.registerLanguage("purebasic",n(167)),r.registerLanguage("python",n(168)),r.registerLanguage("q",n(169)),r.registerLanguage("qml",n(170)),r.registerLanguage("r",n(171)),r.registerLanguage("rib",n(172)),r.registerLanguage("roboconf",n(173)),r.registerLanguage("routeros",n(174)),r.registerLanguage("rsl",n(175)),r.registerLanguage("ruleslanguage",n(176)),r.registerLanguage("rust",n(177)),r.registerLanguage("scala",n(178)),r.registerLanguage("scheme",n(179)),r.registerLanguage("scilab",n(180)),r.registerLanguage("scss",n(181)),r.registerLanguage("shell",n(182)),r.registerLanguage("smali",n(183)),r.registerLanguage("smalltalk",n(184)),r.registerLanguage("sml",n(185)),r.registerLanguage("sqf",n(186)),r.registerLanguage("sql",n(187)),r.registerLanguage("stan",n(188)),r.registerLanguage("stata",n(189)),r.registerLanguage("step21",n(190)),r.registerLanguage("stylus",n(191)),r.registerLanguage("subunit",n(192)),r.registerLanguage("swift",n(193)),r.registerLanguage("taggerscript",n(194)),r.registerLanguage("yaml",n(195)),r.registerLanguage("tap",n(196)),r.registerLanguage("tcl",n(197)),r.registerLanguage("tex",n(198)),r.registerLanguage("thrift",n(199)),r.registerLanguage("tp",n(200)),r.registerLanguage("twig",n(201)),r.registerLanguage("typescript",n(202)),r.registerLanguage("vala",n(203)),r.registerLanguage("vbnet",n(204)),r.registerLanguage("vbscript",n(205)),r.registerLanguage("vbscript-html",n(206)),r.registerLanguage("verilog",n(207)),r.registerLanguage("vhdl",n(208)),r.registerLanguage("vim",n(209)),r.registerLanguage("x86asm",n(210)),r.registerLanguage("xl",n(211)),r.registerLanguage("xquery",n(212)),r.registerLanguage("zephir",n(213)),e.exports=r},function(e,t,n){!function(e){"object"==typeof window&&window||"object"==typeof self&&self;(function(e){var t=[],n=Object.keys,r={},i={},a=/^(no-?highlight|plain|text)$/i,o=/\blang(?:uage)?-([\w-]+)\b/i,s=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,l="",c={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function d(e){return e.replace(/&/g,"&").replace(//g,">")}function u(e){return e.nodeName.toLowerCase()}function p(e,t){var n=e&&e.exec(t);return n&&0===n.index}function m(e){return a.test(e)}function g(e){var t,n={},r=Array.prototype.slice.call(arguments,1);for(t in e)n[t]=e[t];return r.forEach(function(e){for(t in e)n[t]=e[t]}),n}function f(e){var t=[];return function e(n,r){for(var i=n.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(t.push({event:"start",offset:r,node:i}),r=e(i,r),u(i).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:i}));return r}(e,0),t}function h(e){function t(e){return e&&e.source||e}function r(n,r){return new RegExp(t(n),"m"+(e.case_insensitive?"i":"")+(r?"g":""))}!function i(a,o){if(a.compiled)return;a.compiled=!0;a.keywords=a.keywords||a.beginKeywords;if(a.keywords){var s={},l=function(t,n){e.case_insensitive&&(n=n.toLowerCase()),n.split(" ").forEach(function(e){var n=e.split("|");s[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof a.keywords?l("keyword",a.keywords):n(a.keywords).forEach(function(e){l(e,a.keywords[e])}),a.keywords=s}a.lexemesRe=r(a.lexemes||/\w+/,!0);o&&(a.beginKeywords&&(a.begin="\\b("+a.beginKeywords.split(" ").join("|")+")\\b"),a.begin||(a.begin=/\B|\b/),a.beginRe=r(a.begin),a.end||a.endsWithParent||(a.end=/\B|\b/),a.end&&(a.endRe=r(a.end)),a.terminator_end=t(a.end)||"",a.endsWithParent&&o.terminator_end&&(a.terminator_end+=(a.end?"|":"")+o.terminator_end));a.illegal&&(a.illegalRe=r(a.illegal));null==a.relevance&&(a.relevance=1);a.contains||(a.contains=[]);a.contains=Array.prototype.concat.apply([],a.contains.map(function(e){return function(e){e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map(function(t){return g(e,{variants:null},t)}));return e.cached_variants||e.endsWithParent&&[g(e)]||[e]}("self"===e?a:e)}));a.contains.forEach(function(e){i(e,a)});a.starts&&i(a.starts,o);var c=a.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([a.terminator_end,a.illegal]).map(t).filter(Boolean);a.terminators=c.length?r(c.join("|"),!0):{exec:function(){return null}}}(e)}function b(e,t,n,i){function a(e,t){var n=g.case_insensitive?t[0].toLowerCase():t[0];return e.keywords.hasOwnProperty(n)&&e.keywords[n]}function o(e,t,n,r){var i=r?"":c.classPrefix,a='')+t+o}function s(){E+=null!=_.subLanguage?function(){var e="string"==typeof _.subLanguage;if(e&&!r[_.subLanguage])return d(S);var t=e?b(_.subLanguage,S,!0,y[_.subLanguage]):v(S,_.subLanguage.length?_.subLanguage:void 0);_.relevance>0&&(C+=t.relevance);e&&(y[_.subLanguage]=t.top);return o(t.language,t.value,!1,!0)}():function(){var e,t,n,r;if(!_.keywords)return d(S);r="",t=0,_.lexemesRe.lastIndex=0,n=_.lexemesRe.exec(S);for(;n;)r+=d(S.substring(t,n.index)),(e=a(_,n))?(C+=e[1],r+=o(e[0],d(n[0]))):r+=d(n[0]),t=_.lexemesRe.lastIndex,n=_.lexemesRe.exec(S);return r+d(S.substr(t))}(),S=""}function u(e){E+=e.className?o(e.className,"",!0):"",_=Object.create(e,{parent:{value:_}})}function m(e,t){if(S+=e,null==t)return s(),0;var r=function(e,t){var n,r;for(n=0,r=t.contains.length;n")+'"');return S+=t,t.length||1}var g=x(e);if(!g)throw new Error('Unknown language: "'+e+'"');h(g);var f,_=i||g,y={},E="";for(f=_;f!==g;f=f.parent)f.className&&(E=o(f.className,"",!0)+E);var S="",C=0;try{for(var w,T,N=0;_.terminators.lastIndex=N,w=_.terminators.exec(t);)T=m(t.substring(N,w.index),w[0]),N=w.index+T;for(m(t.substr(N)),f=_;f.parent;f=f.parent)f.className&&(E+=l);return{relevance:C,value:E,language:e,top:_}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{relevance:0,value:d(t)};throw e}}function v(e,t){t=t||c.languages||n(r);var i={relevance:0,value:d(e)},a=i;return t.filter(x).forEach(function(t){var n=b(t,e,!1);n.language=t,n.relevance>a.relevance&&(a=n),n.relevance>i.relevance&&(a=i,i=n)}),a.language&&(i.second_best=a),i}function _(e){return c.tabReplace||c.useBR?e.replace(s,function(e,t){return c.useBR&&"\n"===e?"
    ":c.tabReplace?t.replace(/\t/g,c.tabReplace):""}):e}function y(e){var n,r,a,s,l,p=function(e){var t,n,r,i,a=e.className+" ";if(a+=e.parentNode?e.parentNode.className:"",n=o.exec(a))return x(n[1])?n[1]:"no-highlight";for(a=a.split(/\s+/),t=0,r=a.length;t/g,"\n"):n=e,l=n.textContent,a=p?b(p,l,!0):v(l),(r=f(n)).length&&((s=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=a.value,a.value=function(e,n,r){var i=0,a="",o=[];function s(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function c(e){a+=""}function p(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){var m=s();if(a+=d(r.substring(i,m[0].offset)),i=m[0].offset,m===e){o.reverse().forEach(c);do{p(m.splice(0,1)[0]),m=s()}while(m===e&&m.length&&m[0].offset===i);o.reverse().forEach(l)}else"start"===m[0].event?o.push(m[0].node):o.pop(),p(m.splice(0,1)[0])}return a+d(r.substr(i))}(r,f(s),l)),a.value=_(a.value),e.innerHTML=a.value,e.className=function(e,t,n){var r=t?i[t]:n,a=[e.trim()];e.match(/\bhljs\b/)||a.push("hljs");-1===e.indexOf(r)&&a.push(r);return a.join(" ").trim()}(e.className,p,a.language),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance}))}function E(){if(!E.called){E.called=!0;var e=document.querySelectorAll("pre code");t.forEach.call(e,y)}}function x(e){return e=(e||"").toLowerCase(),r[e]||r[i[e]]}e.highlight=b,e.highlightAuto=v,e.fixMarkup=_,e.highlightBlock=y,e.configure=function(e){c=g(c,e)},e.initHighlighting=E,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",E,!1),addEventListener("load",E,!1)},e.registerLanguage=function(t,n){var a=r[t]=n(e);a.aliases&&a.aliases.forEach(function(e){i[e]=t})},e.listLanguages=function(){return n(r)},e.getLanguage=x,e.inherit=g,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(t,n,r){var i=e.inherit({className:"comment",begin:t,end:n,contains:[]},r||{});return i.contains.push(e.PHRASAL_WORDS_MODE),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),i},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0}})(t)}()},function(e,t){e.exports=function(e){var t="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",n="далее возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",r="null истина ложь неопределено",i=e.inherit(e.NUMBER_MODE),a={className:"string",begin:'"|\\|',end:'"|$',contains:[{begin:'""'}]},o={begin:"'",end:"'",excludeBegin:!0,excludeEnd:!0,contains:[{className:"number",begin:"\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}"}]},s=e.inherit(e.C_LINE_COMMENT_MODE);return{case_insensitive:!0,lexemes:t,keywords:{keyword:n,built_in:"разделительстраниц разделительстрок символтабуляции ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",class:"webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц отображениевремениэлементовпланировщика типфайлаформатированногодокумента обходрезультатазапроса типзаписизапроса видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов доступкфайлу режимдиалогавыборафайла режимоткрытияфайла типизмеренияпостроителязапроса видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты",type:"comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура фиксированноесоответствие фиксированныймассив ",literal:r},contains:[{className:"meta",lexemes:t,begin:"#|&",end:"$",keywords:{"meta-keyword":n+"загрузитьизфайла вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент "},contains:[s]},{className:"function",lexemes:t,variants:[{begin:"процедура|функция",end:"\\)",keywords:"процедура функция"},{begin:"конецпроцедуры|конецфункции",keywords:"конецпроцедуры конецфункции"}],contains:[{begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"params",lexemes:t,begin:t,end:",",excludeEnd:!0,endsWithParent:!0,keywords:{keyword:"знач",literal:r},contains:[i,a,o]},s]},e.inherit(e.TITLE_MODE,{begin:t})]},s,{className:"symbol",begin:"~",end:";|:",excludeEnd:!0},i,a,o]}}},function(e,t){e.exports=function(e){var t="^[a-zA-Z][a-zA-Z0-9-]*",n="[!@#$^&',?+~`|:]",r=e.COMMENT(";","$"),i={begin:t+"\\s*=",returnBegin:!0,end:/=/,relevance:0,contains:[{className:"attribute",begin:t}]};return{illegal:n,keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"].join(" "),contains:[i,r,{className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},{className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},{className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},{className:"symbol",begin:/%[si]/},e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{contains:[{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+\\b",relevance:0},{className:"string",begin:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',end:'"',keywords:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",illegal:"\\n",relevance:10},{className:"string",begin:/\[/,end:/\]/,illegal:"\\n"},{className:"string",begin:'"',end:'"',illegal:"\\n"}]}}},function(e,t){e.exports=function(e){var t={className:"rest_arg",begin:"[.]{3}",end:"[a-zA-Z_$][a-zA-Z0-9_$]*",relevance:10};return{aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"class",beginKeywords:"package",end:"{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.TITLE_MODE]},{className:"meta",beginKeywords:"import include",end:";",keywords:{"meta-keyword":"import include"}},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t]},{begin:":\\s*([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)"}]},e.METHOD_GUARD],illegal:/#/}}},function(e,t){e.exports=function(e){var t="[A-Za-z](_?[A-Za-z0-9.])*",n=e.COMMENT("--","$"),r={begin:"\\s+:\\s+",end:"\\s*(:=|;|\\)|=>|$)",illegal:"[]{}%#'\"",contains:[{beginKeywords:"loop for declare others",endsParent:!0},{className:"keyword",beginKeywords:"not null constant access function procedure in out aliased exception"},{className:"type",begin:t,endsParent:!0,relevance:0}]};return{case_insensitive:!0,keywords:{keyword:"abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor",literal:"True False"},contains:[n,{className:"string",begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{className:"string",begin:/'.'/},{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"symbol",begin:"'"+t},{className:"title",begin:"(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?",end:"(is|$)",keywords:"package body",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},{begin:"(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+",end:"(\\bis|\\bwith|\\brenames|\\)\\s*;)",keywords:"overriding function procedure with is renames return",returnBegin:!0,contains:[n,{className:"title",begin:"(\\bwith\\s+)?\\b(function|procedure)\\s+",end:"(\\(|\\s+|$)",excludeBegin:!0,excludeEnd:!0,illegal:"[]{}%#'\""},r,{className:"type",begin:"\\breturn\\s+",end:"(\\s+|;|$)",keywords:"return",excludeBegin:!0,excludeEnd:!0,endsParent:!0,illegal:"[]{}%#'\""}]},{className:"type",begin:"\\b(sub)?type\\s+",end:"\\s+",keywords:"type",excludeBegin:!0,illegal:"[]{}%#'\""},r]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[\\$%]\\d+"};return{aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:""},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",t]},t,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},function(e,t){e.exports=function(e){var t=e.inherit(e.QUOTE_STRING_MODE,{illegal:""}),n={className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_NUMBER_MODE,t]},r=e.COMMENT("--","$"),i=[r,e.COMMENT("\\(\\*","\\*\\)",{contains:["self",r]}),e.HASH_COMMENT_MODE];return{aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[t,e.C_NUMBER_MODE,{className:"built_in",begin:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{className:"literal",begin:"\\b(text item delimiters|current application|missing value)\\b"},{className:"keyword",begin:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{beginKeywords:"on",illegal:"[${=;\\n]",contains:[e.UNDERSCORE_TITLE_MODE,n]}].concat(i),illegal:"//|->|=>|\\[\\["}}},function(e,t){e.exports=function(e){var t={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},n={className:"string",variants:[{begin:'(u8?|U)?L?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'(u8?|U)?R"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{begin:"'\\\\?.",end:"'",illegal:"."}]},r={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},i={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(n,{className:"meta-string"}),{className:"meta-string",begin:/<[^\n>]*>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},a=e.IDENT_RE+"\\s*\\(",o={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},s=[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,n];return{aliases:["c","cc","h","c++","h++","hpp"],keywords:o,illegal:"",keywords:o,contains:["self",t]},{begin:e.IDENT_RE+"::",keywords:o},{variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:o,contains:s.concat([{begin:/\(/,end:/\)/,keywords:o,contains:s.concat(["self"]),relevance:0}]),relevance:0},{className:"function",begin:"("+e.IDENT_RE+"[\\*&\\s]+)+"+a,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:o,illegal:/[^\w\s\*&]/,contains:[{begin:a,returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,r,t]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i]},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:i,strings:n,keywords:o}}}},function(e,t){e.exports=function(e){var t=e.getLanguage("cpp").exports;return{keywords:{keyword:"boolean byte word string String array "+t.keywords.keyword,built_in:"setup loop while catch for if do goto try switch case else default break continue return KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put",literal:"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW"},contains:[t.preprocessor,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["arm"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",end:"\\s"},e.COMMENT("[;@]","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"[=#]\\w+"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={endsWithParent:!0,illegal:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0}]},{className:"tag",begin:"|$)",end:">",keywords:{name:"style"},contains:[t],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"|$)",end:">",keywords:{name:"script"},contains:[t],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars","xml"]}},{className:"meta",variants:[{begin:/<\?xml/,end:/\?>/,relevance:10},{begin:/<\?\w+/,end:/\?>/}]},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},t]}]}}},function(e,t){e.exports=function(e){return{aliases:["adoc"],contains:[e.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),e.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"section",relevance:10,variants:[{begin:"^(={1,5}) .+?( \\1)?$"},{begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$"}]},{className:"meta",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"meta",begin:"^\\[.+?\\]$",relevance:0},{className:"quote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"symbol",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"string",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}},function(e,t){e.exports=function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance";return{keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},e.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:t+" get set args call",excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:t,illegal:/["\[\]]/,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",keywords:t+" get set args call",relevance:0},e.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:t,excludeEnd:!0,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:t,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t={begin:"`[\\s\\S]"};return{case_insensitive:!0,aliases:["ahk"],keywords:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"A|0 true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},contains:[{className:"built_in",begin:"A_[a-zA-Z0-9]+"},t,e.inherit(e.QUOTE_STRING_MODE,{contains:[t]}),e.COMMENT(";","$",{relevance:0}),e.C_BLOCK_COMMENT_MODE,{className:"number",begin:e.NUMBER_RE,relevance:0},{className:"subst",begin:"%(?=[a-zA-Z0-9#_$@])",end:"%",illegal:"[^a-zA-Z0-9#_$@]"},{className:"built_in",begin:"^\\s*\\w+\\s*,"},{className:"meta",begin:"^\\s*#w+",end:"$",relevance:0},{className:"symbol",contains:[t],variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{begin:",\\s*,"}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#cs","#ce"),e.COMMENT("#comments-start","#comments-end")]},n={begin:"\\$[A-z0-9_]+"},r={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:"ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",built_in:"Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait",literal:"True False And Null Not Or"},contains:[t,n,r,i,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",keywords:{"meta-keyword":"include"},end:"$",contains:[r,{className:"meta-string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},r,t]},{className:"symbol",begin:"@[A-z0-9_]+"},{className:"function",beginKeywords:"Func",end:"$",illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[n,r,i]}]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"\\.?"+e.IDENT_RE,keywords:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",meta:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),e.C_NUMBER_MODE,e.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"symbol",begin:"^[A-Za-z0-9_.$]+:"},{className:"meta",begin:"#",end:"$"},{className:"subst",begin:"@[0-9]+"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BEGIN END if else while do for in break continue delete next nextfile function func exit|10"},contains:[{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},e.REGEXP_MODE,e.HASH_COMMENT_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{keywords:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,n,{className:"string",begin:/'/,end:/'/},t]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,illegal:"^.",lexemes:"[a-zA-Z][a-zA-Z0-9_$%!#]*",keywords:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF|0 THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("REM","$",{relevance:10}),e.COMMENT("'","$",{relevance:0}),{className:"symbol",begin:"^[0-9]+ ",relevance:10},{className:"number",begin:"\\b([0-9]+[0-9edED.]*[#!]?)",relevance:0},{className:"number",begin:"(&[hH][0-9a-fA-F]{1,4})"},{className:"number",begin:"(&[oO][0-7]{1,6})"}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin://},{begin:/::=/,starts:{end:/$/,contains:[{begin://},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}]}}},function(e,t){e.exports=function(e){var t={className:"literal",begin:"[\\+\\-]",relevance:0};return{aliases:["bf"],contains:[e.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/\+\+|\-\-/,returnBegin:!0,contains:[t]},t]}}},function(e,t){e.exports=function(e){var t="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},i={className:"string",begin:/(#\d+)+/},a={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[r,i]}].concat(n)},o={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[e.TITLE_MODE,a]};return{case_insensitive:!0,keywords:{keyword:t,literal:"false true"},illegal:/\/\*/,contains:[r,i,{className:"number",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},{className:"string",begin:'"',end:'"'},e.NUMBER_MODE,o,a]}}},function(e,t){e.exports=function(e){return{aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.HASH_COMMENT_MODE,{className:"meta",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"symbol",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}},function(e,t){e.exports=function(e){var t="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",n={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:t,relevance:10},r=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[n]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return n.contains=r,{keywords:{keyword:t+" shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",meta:"doc by license see throws tagged"},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"meta",begin:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(r)}}},function(e,t){e.exports=function(e){return{aliases:["clean","icl","dcl"],keywords:{keyword:"if let in with where case of class instance otherwise implementation definition system module from import qualified as special code inline foreign export ccall stdcall generic derive infix infixl infixr",literal:"True False"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{begin:"->|<-[|:]?|::|#!?|>>=|\\{\\||\\|\\}|:==|=:|\\.\\.|<>|`"}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b(true|false|nil)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},p={endsWithParent:!0,relevance:0},m={keywords:{"builtin-name":"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},lexemes:t,className:"name",begin:t,starts:p},g=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),m,p],p.contains=g,s.contains=g,c.contains=[s],{aliases:["clj"],illegal:/\S/,contains:[u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^([\w.-]+|\s*#_)=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}},function(e,t){e.exports=function(e){return{aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or equal less greater strless strgreater strequal matches"},contains:[{className:"variable",begin:"\\${",end:"}"},e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[r,e.HASH_COMMENT_MODE]},{begin:"//[gim]*",relevance:0},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{begin:"@"+n},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("###","###"),e.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"_ as at cofix else end exists exists2 fix for forall fun if IF in let match mod Prop return Set then Type using where with Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture Conjectures Constant constr Constraint Constructors Context Corollary CreateHintDb Cut Declare Defined Definition Delimit Dependencies DependentDerive Drop eauto End Equality Eval Example Existential Existentials Existing Export exporting Extern Extract Extraction Fact Field Fields File Fixpoint Focus for From Function Functional Generalizable Global Goal Grab Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident Identity If Immediate Implicit Import Include Inductive Infix Info Initial Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation Obligations Opaque Open Optimize Options Parameter Parameters Parametric Path Paths pattern Polymorphic Preterm Print Printing Program Projections Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused Unfold Universe Universes Unset Unshelve using Variable Variables Variant Verbose Visibility where with",built_in:"abstract absurd admit after apply as assert assumption at auto autorewrite autounfold before bottom btauto by case case_eq cbn cbv change classical_left classical_right clear clearbody cofix compare compute congruence constr_eq constructor contradict contradiction cut cutrewrite cycle decide decompose dependent destruct destruction dintuition discriminate discrR do double dtauto eapply eassumption eauto ecase econstructor edestruct ediscriminate eelim eexact eexists einduction einjection eleft elim elimtype enough equality erewrite eright esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail field field_simplify field_simplify_eq first firstorder fix fold fourier functional generalize generalizing gfail give_up has_evar hnf idtac in induction injection instantiate intro intro_pattern intros intuition inversion inversion_clear is_evar is_var lapply lazy left lia lra move native_compute nia nsatz omega once pattern pose progress proof psatz quote record red refine reflexivity remember rename repeat replace revert revgoals rewrite rewrite_strat right ring ring_simplify rtauto set setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve specialize split split_Rabs split_Rmult stepl stepr subst sum swap symmetry tactic tauto time timeout top transitivity trivial try tryif unfold unify until using vm_compute with"},contains:[e.QUOTE_STRING_MODE,e.COMMENT("\\(\\*","\\*\\)"),e.C_NUMBER_MODE,{className:"type",excludeBegin:!0,begin:"\\|\\s*",end:"\\w+"},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["cos","cls"],keywords:"property parameter class classmethod clientmethod extends as break catch close continue do d|0 else elseif for goto halt hang h|0 if job j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 tcommit throw trollback try tstart use view while write w|0 xecute x|0 zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit zsync ascii",contains:[{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)",relevance:0},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"comment",begin:/;/,end:"$",relevance:0},{className:"built_in",begin:/(?:\$\$?|\.\.)\^?[a-zA-Z]+/},{className:"built_in",begin:/\$\$\$[a-zA-Z]+/},{className:"built_in",begin:/%[a-z]+(?:\.[a-z]+)*/},{className:"symbol",begin:/\^%?[a-zA-Z][\w]*/},{className:"keyword",begin:/##class|##super|#define|#dim/},{begin:/&sql\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"sql"},{begin:/&(js|jscript|javascript)/,excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"},{begin:/&html<\s*\s*>/,subLanguage:"xml"}]}}},function(e,t){e.exports=function(e){var t="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml";return{aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:"params meta operations op rule attributes utilization read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\ number string",literal:"Master Started Slave Stopped start promote demote stop monitor true false"},contains:[e.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:"primitive rsc_template",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+t.split(" ").join("|")+")\\s+",keywords:t,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:"property rsc_defaults op_defaults",starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},e.QUOTE_STRING_MODE,{className:"meta",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"literal",begin:"[-]?(infinity|inf)",relevance:0},{className:"attr",begin:/([A-Za-z\$_\#][\w_-]+)=/,relevance:0},{className:"tag",begin:"",relevance:0}]}}},function(e,t){e.exports=function(e){var t="(_[uif](8|16|32|64))?",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?",r={keyword:"abstract alias as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},i={className:"subst",begin:"#{",end:"}",keywords:r},a={className:"template-variable",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:r};function o(e,t){var n=[{begin:e,end:t}];return n[0].contains=n,n}var s={className:"string",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%w?\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%w?\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%w?{",end:"}",contains:o("{","}")},{begin:"%w?<",end:">",contains:o("<",">")},{begin:"%w?/",end:"/"},{begin:"%w?%",end:"%"},{begin:"%w?-",end:"-"},{begin:"%w?\\|",end:"\\|"},{begin:/<<-\w+$/,end:/^\s*\w+$/}],relevance:0},l=[a,s,{className:"string",variants:[{begin:"%q\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%q\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%q{",end:"}",contains:o("{","}")},{begin:"%q<",end:">",contains:o("<",">")},{begin:"%q/",end:"/"},{begin:"%q%",end:"%"},{begin:"%q-",end:"-"},{begin:"%q\\|",end:"\\|"},{begin:/<<-'\w+'$/,end:/^\s*\w+$/}],relevance:0},{begin:"(!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~)\\s*",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"//[a-z]*",relevance:0},{begin:"/",end:"/[a-z]*"},{begin:"%r\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%r{",end:"}",contains:o("{","}")},{begin:"%r<",end:">",contains:o("<",">")},{begin:"%r/",end:"/"},{begin:"%r%",end:"%"},{begin:"%r-",end:"-"},{begin:"%r\\|",end:"\\|"}]}],relevance:0},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,i],variants:[{begin:"%r\\(",end:"\\)",contains:o("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:o("\\[","\\]")},{begin:"%r{",end:"}",contains:o("{","}")},{begin:"%r<",end:">",contains:o("<",">")},{begin:"%r/",end:"/"},{begin:"%r%",end:"%"},{begin:"%r-",end:"-"},{begin:"%r\\|",end:"\\|"}],relevance:0},{className:"meta",begin:"@\\[",end:"\\]",contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"})]},e.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<"}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[e.HASH_COMMENT_MODE,e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})],relevance:5},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[s,{begin:n}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]*[01])"+t},{begin:"\\b0o([0-7_]*[0-7])"+t},{begin:"\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])"+t},{begin:"\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)"+t}],relevance:0}];return i.contains=l,a.contains=l.slice(1),{aliases:["cr"],lexemes:"[a-zA-Z_]\\w*[!?=]?",keywords:r,contains:l}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},n={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},r=e.inherit(n,{illegal:/\n/}),i={className:"subst",begin:"{",end:"}",keywords:t},a=e.inherit(i,{illegal:/\n/}),o={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,a]},s={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},i]},l=e.inherit(s,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},a]});i.contains=[s,o,n,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE],a.contains=[l,o,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var c={variants:[s,o,n,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},d=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?";return{aliases:["csharp"],keywords:t,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},c,e.C_NUMBER_MODE,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+d+"\\s+)+"+e.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,relevance:0,contains:[c,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!1,lexemes:"[a-zA-Z][a-zA-Z0-9_-]*",keywords:{keyword:"base-uri child-src connect-src default-src font-src form-action frame-ancestors frame-src img-src media-src object-src plugin-types report-uri sandbox script-src style-src"},contains:[{className:"string",begin:"'",end:"'"},{className:"attribute",begin:"^Content",end:":",excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={begin:/[A-Z\_\.\-]+\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(font-face|page)",lexemes:"[a-z-]+",keywords:"font-face page"},{begin:"@",end:"[{;]",illegal:/:/,contains:[{className:"keyword",begin:/\w+/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,t]}]}}},function(e,t){e.exports=function(e){var t="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",r={className:"number",begin:"\\b"+t+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},i={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+t+"(i|[fF]i|Li))",relevance:0},a={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},o={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},o,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},i,r,a,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}},function(e,t){e.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"quote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"^```w*s*$",end:"^```s*$"},{begin:"`.+?`"},{begin:"^( {4}|\t)",end:"$",relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}},function(e,t){e.exports=function(e){var t={className:"subst",begin:"\\$\\{",end:"}",keywords:"true false null this is new super"},n={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[e.BACKSLASH_ESCAPE,t]},{begin:'"""',end:'"""',contains:[e.BACKSLASH_ESCAPE,t]},{begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]},{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]}]};t.contains=[e.C_NUMBER_MODE,n];return{keywords:{keyword:"assert async await break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch sync this throw true try var void while with yield abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"},contains:[n,e.COMMENT("/\\*\\*","\\*/",{subLanguage:"markdown"}),e.COMMENT("///","$",{subLanguage:"markdown"}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"},{begin:"=>"}]}}},function(e,t){e.exports=function(e){var t="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure absolute reintroduce operator as is abstract alias assembler bitpacked break continue cppdecl cvar enumerator experimental platform deprecated unimplemented dynamic export far16 forward generic helper implements interrupt iochecks local name nodefault noreturn nostackframe oldfpccall otherwise saveregisters softfloat specialize strict unaligned varargs ",n=[e.C_LINE_COMMENT_MODE,e.COMMENT(/\{/,/\}/,{relevance:0}),e.COMMENT(/\(\*/,/\*\)/,{relevance:10})],r={className:"meta",variants:[{begin:/\{\$/,end:/\}/},{begin:/\(\*\$/,end:/\*\)/}]},i={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},a={className:"string",begin:/(#\d+)+/},o={begin:e.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]},s={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[e.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:t,contains:[i,a,r].concat(n)},r].concat(n)};return{aliases:["dpr","dfm","pas","pascal","freepascal","lazarus","lpr","lfm"],case_insensitive:!0,keywords:t,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[i,a,e.NUMBER_MODE,o,s,r].concat(n)}}},function(e,t){e.exports=function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}},function(e,t){e.exports=function(e){var t={begin:/\|[A-Za-z]+:?/,keywords:{name:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone"},contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE]};return{aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:{name:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim"},starts:{endsWithParent:!0,keywords:"in by as",contains:[t],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:[t]}]}}},function(e,t){e.exports=function(e){return{aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:/^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b"},e.inherit(e.NUMBER_MODE,{begin:/\b\d+[dhwm]?/})]}}},function(e,t){e.exports=function(e){return{aliases:["docker"],case_insensitive:!0,keywords:"from maintainer expose env arg user onbuild stopsignal",contains:[e.HASH_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{beginKeywords:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{end:/[^\\]\n/,subLanguage:"bash"}}],illegal:"",illegal:"\\n"}]},t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},i={className:"variable",begin:"\\&[a-z\\d_]*\\b"},a={className:"meta-keyword",begin:"/[a-z][a-z\\d-]*/"},o={className:"symbol",begin:"^\\s*[a-zA-Z_][a-zA-Z\\d_]*:"},s={className:"params",begin:"<",end:">",contains:[n,i]},l={className:"class",begin:/[a-zA-Z_][a-zA-Z\d_@]*\s{/,end:/[{;=]/,returnBegin:!0,excludeEnd:!0};return{keywords:"",contains:[{className:"class",begin:"/\\s*{",end:"};",relevance:10,contains:[i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t]},i,a,o,l,s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,t,r,{begin:e.IDENT_RE+"::",keywords:""}]}}},function(e,t){e.exports=function(e){return{aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"template-tag",begin:/\{[#\/]/,end:/\}/,illegal:/;/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{/,end:/\}/,illegal:/;/,keywords:"if eq ne lt lte gt gte select default math sep"}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT(/\(\*/,/\*\)/);return{illegal:/\S/,contains:[t,{className:"attribute",begin:/^[ ]*[a-zA-Z][a-zA-Z-]*([\s-]+[a-zA-Z][a-zA-Z]*)*/},{begin:/=/,end:/;/,contains:[t,{className:"meta",begin:/\?.*\?/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",n="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",r={className:"subst",begin:"#\\{",end:"}",lexemes:t,keywords:n},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},a={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:t,endsParent:!0})]},o=e.inherit(a,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),s=[i,e.HASH_COMMENT_MODE,o,a,{className:"symbol",begin:":(?!\\s)",contains:[i,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:t+":",relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return r.contains=s,{lexemes:t,keywords:n,contains:s}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},r={begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},t]};return{keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",contains:[{beginKeywords:"port effect module",end:"exposing",keywords:"port effect module where command subscription exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"import",end:"$",keywords:"import as exposing",contains:[r,t],illegal:"\\W\\.|;"},{begin:"type",end:"$",keywords:"type alias",contains:[n,r,{begin:"{",end:"}",contains:r.contains},t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"port",end:"$",keywords:"port",contains:[t]},e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,n,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}],illegal:/;/}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},a=[e.COMMENT("#","$",{contains:[r]}),e.COMMENT("^\\=begin","^\\=end",{contains:[r],relevance:10}),e.COMMENT("^__END__","\\n$")],o={className:"subst",begin:"#\\{",end:"}",keywords:n},s={className:"string",contains:[e.BACKSLASH_ESCAPE,o],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<(-?)\w+$/,end:/^\s*\w+$/}]},l={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:n},c=[s,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(a)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:t}),l].concat(a)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[s,{begin:t}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:n},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,o],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(a),relevance:0}].concat(a);o.contains=c,l.contains=c;var d=[{begin:/^\s*=>/,starts:{end:"$",contains:c}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:c}}];return{aliases:["rb","gemspec","podspec","thor","irb"],keywords:n,illegal:/\/\*/,contains:a.concat(d).concat(c)}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[e.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){return{keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}},function(e,t){e.exports=function(e){var t="[a-z'][a-zA-Z0-9_']*",n="("+t+":"+t+"|"+t+")",r={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.COMMENT("%","$"),a={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+t+"/\\d+"},s={begin:n+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:n,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:"{",end:"}",relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},d={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},u={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},p={beginKeywords:"fun receive if try case",end:"end",keywords:r};p.contains=[i,o,e.inherit(e.APOS_STRING_MODE,{className:""}),p,s,e.QUOTE_STRING_MODE,a,l,c,d,u];var m=[i,o,p,s,e.QUOTE_STRING_MODE,a,l,c,d,u];s.contains[1].contains=m,l.contains=m,u.contains[1].contains=m;var g={className:"params",begin:"\\(",end:"\\)",contains:m};return{aliases:["erl"],keywords:r,illegal:"(",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[g,e.inherit(e.TITLE_MODE,{begin:t})],starts:{end:";|\\.",keywords:r,contains:m}},i,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[g]},a,e.QUOTE_STRING_MODE,u,c,d,l,{begin:/\.$/}]}}},function(e,t){e.exports=function(e){return{aliases:["xlsx","xls"],case_insensitive:!0,lexemes:/[a-zA-Z][\w\.]*/,keywords:{built_in:"ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF|0 IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST"},contains:[{begin:/^=/,end:/[^=]/,returnEnd:!0,illegal:/=/,relevance:10},{className:"symbol",begin:/\b[A-Z]{1,2}\d+\b/,end:/[^\d]/,excludeEnd:!0,relevance:0},{className:"symbol",begin:/[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,relevance:0},e.BACKSLASH_ESCAPE,e.QUOTE_STRING_MODE,{className:"number",begin:e.NUMBER_RE+"(%)?",relevance:0},e.COMMENT(/\bN\(/,/\)/,{excludeBegin:!0,excludeEnd:!0,illegal:/\n/})]}}},function(e,t){e.exports=function(e){return{contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attr"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}},function(e,t){e.exports=function(e){var t={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[{className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/}]};return{keywords:{literal:"true false",keyword:"case class def else enum if impl import in lat rel index let match namespace switch type yield with"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},{className:"string",variants:[{begin:'"',end:'"'}]},t,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["f90","f95"],keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:"<",end:">",contains:[e.inherit(e.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},e.COMMENT("\\(\\*","\\*\\)"),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE,t]},{className:"meta",begin:"\\[<",end:">\\]",relevance:10},{className:"symbol",begin:"\\B('[A-Za-z])\\b",contains:[e.BACKSLASH_ESCAPE]},e.C_LINE_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"abort acronym acronyms alias all and assign binary card diag display else eq file files for free ge gt if integer le loop lt maximizing minimizing model models ne negative no not option options or ord positive prod put putpage puttl repeat sameas semicont semiint smax smin solve sos1 sos2 sum system table then until using while xor yes",literal:"eps inf na","built-in":"abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power randBinomial randLinear randTriangle round rPower sigmoid sign signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion handleCollect handleDelete handleStatus handleSubmit heapFree heapLimit heapSize jobHandle jobKill jobStatus jobTerminate licenseLevel licenseStatus maxExecError sleep timeClose timeComp timeElapsed timeExec timeStart"},n={className:"symbol",variants:[{begin:/\=[lgenxc]=/},{begin:/\$/}]},r={className:"comment",variants:[{begin:"'",end:"'"},{begin:'"',end:'"'}],illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},i={begin:"/",end:"/",keywords:t,contains:[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},a={begin:/[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,excludeBegin:!0,end:"$",endsWithParent:!0,contains:[r,i,{className:"comment",begin:/([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,relevance:0}]};return{aliases:["gms"],case_insensitive:!0,keywords:t,contains:[e.COMMENT(/^\$ontext/,/^\$offtext/),{className:"meta",begin:"^\\$[a-z0-9]+",end:"$",returnBegin:!0,contains:[{className:"meta-keyword",begin:"^\\$[a-z0-9]+"}]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{beginKeywords:"set sets parameter parameters variable variables scalar scalars equation equations",end:";",contains:[e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,a]},{beginKeywords:"table",end:";",returnBegin:!0,contains:[{beginKeywords:"table",end:"$",contains:[a]},e.COMMENT("^\\*","$"),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_NUMBER_MODE]},{className:"function",begin:/^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,returnBegin:!0,contains:[{className:"title",begin:/^[a-z0-9_]+/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0},n]},e.C_NUMBER_MODE,n]}}},function(e,t){e.exports=function(e){var t={keyword:"and bool break call callexe checkinterrupt clear clearg closeall cls comlog compile continue create debug declare delete disable dlibrary dllcall do dos ed edit else elseif enable end endfor endif endp endo errorlog errorlogat expr external fn for format goto gosub graph if keyword let lib library line load loadarray loadexe loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow matrix msym ndpclex new not open or output outwidth plot plotsym pop prcsn print printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen scroll setarray show sparse stop string struct system trace trap threadfor threadendfor threadbegin threadjoin threadstat threadend until use while winprint",built_in:"abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 indicesf indicesfn indnv indsav integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname threadBegin threadEnd threadEndFor threadFor threadJoin threadStat time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics cdfEmpirical dot h5create h5open h5read h5readAttribute h5write h5writeAttribute ldl plotAddErrorBar plotAddSurface plotCDFEmpirical plotSetColormap plotSetContourLabels plotSetLegendFont plotSetTextInterpreter plotSetXTicCount plotSetYTicCount plotSetZLevels powerm strjoin strtrim sylvester",literal:"DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES DB_TRANSACTIONS DB_UNICODE DB_VIEWS"},n={className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline"},contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",keywords:{"meta-keyword":"include"},contains:[{className:"meta-string",begin:'"',end:'"',illegal:"\\n"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},r=e.UNDERSCORE_IDENT_RE+"\\s*\\(?",i=[{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}];return{aliases:["gss"],case_insensitive:!0,keywords:t,illegal:"(\\{[%#]|[%#]\\})",contains:[e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("@","@"),n,{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE]},{className:"function",beginKeywords:"proc keyword",end:";",excludeEnd:!0,keywords:t,contains:[{begin:r,returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE],relevance:0},e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n].concat(i)},{className:"function",beginKeywords:"fn",end:";",excludeEnd:!0,keywords:t,contains:[{begin:r+e.IDENT_RE+"\\)?\\s*\\=\\s*",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE],relevance:0},e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE].concat(i)},{className:"function",begin:"\\bexternal (proc|keyword|fn)\\s+",end:";",excludeEnd:!0,keywords:t,contains:[{begin:r,returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE],relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"function",begin:"\\bexternal (matrix|string|array|sparse matrix|struct "+e.IDENT_RE+")\\s+",end:";",excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}}},function(e,t){e.exports=function(e){var t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\(/,/\)/),e.inherit(e.C_NUMBER_MODE,{begin:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+e.C_NUMBER_RE}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"name",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"name",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"attr",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"attr",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",end:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{className:"symbol",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{aliases:["nc"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR",contains:[{className:"meta",begin:"\\%"},{className:"meta",begin:"([O])([0-9]+)"}].concat(t)}}},function(e,t){e.exports=function(e){return{aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"symbol",begin:"\\*",relevance:0},{className:"meta",begin:"@[^@\\s]+"},{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},e.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},e.QUOTE_STRING_MODE]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"break continue discard do else for if return while switch case default attribute binding buffer ccw centroid centroid varying coherent column_major const cw depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip triangles triangles_adjacency uniform varying vertices volatile writeonly",type:"atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBufferiimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void",built_in:"gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow",literal:"true false"},illegal:'"',contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$"}]}}},function(e,t){e.exports=function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:t,illegal:"",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:":\\w+"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attr",begin:"\\w+",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{begin:"^\\s*[=~]\\s*"},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}},function(e,t){e.exports=function(e){var t={"builtin-name":"each in with if else unless bindattr action collection debugger log outlet template unbound view yield"};return{aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.-]+/,keywords:t,starts:{endsWithParent:!0,relevance:0,contains:[e.QUOTE_STRING_MODE]}}]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,keywords:t}]}}},function(e,t){e.exports=function(e){var t={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},n={className:"meta",begin:"{-#",end:"#-}"},r={className:"meta",begin:"^#",end:"$"},i={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},a={begin:"\\(",end:"\\)",illegal:'"',contains:[n,r,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),t]};return{aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[a,t],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[a,t],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[i,a,t]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[n,i,a,{begin:"{",end:"}",contains:a.contains},t]},{beginKeywords:"default",end:"$",contains:[i,a,t]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,t]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[i,e.QUOTE_STRING_MODE,t]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},n,r,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,i,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),t,{begin:"->|<-"}]}}},function(e,t){e.exports=function(e){return{aliases:["hx"],keywords:{keyword:"break case cast catch continue default do dynamic else enum extern for function here if import in inline never new override package private get set public return static super switch this throw trace try typedef untyped using var while Int Float String Bool Dynamic Void Array ",built_in:"trace this",literal:"true false null _"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"},{className:"subst",begin:"\\$",end:"\\W}"}]},e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"@:",end:"$"},{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end error"}},{className:"type",begin:":[ \t]*",end:"[^A-Za-z0-9_ \t\\->]",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:":[ \t]*",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"new *",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"class",beginKeywords:"enum",end:"\\{",contains:[e.TITLE_MODE]},{className:"class",beginKeywords:"abstract",end:"[\\{$]",contains:[{className:"type",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"from +",end:"\\W",excludeBegin:!0,excludeEnd:!0},{className:"type",begin:"to +",end:"\\W",excludeBegin:!0,excludeEnd:!0},e.TITLE_MODE],keywords:{keyword:"abstract from to"}},{className:"class",begin:"\\b(class|interface) +",end:"[\\{$]",excludeEnd:!0,keywords:"class interface",contains:[{className:"keyword",begin:"\\b(extends|implements) +",keywords:"extends implements",contains:[{className:"type",begin:e.IDENT_RE,relevance:0}]},e.TITLE_MODE]},{className:"function",beginKeywords:"function",end:"\\(",excludeEnd:!0,illegal:"\\S",contains:[e.TITLE_MODE]}],illegal:/<\//}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:/[\w\._]+/,keywords:"goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"string",begin:'{"',end:'"}',contains:[e.BACKSLASH_ESCAPE]},e.COMMENT(";","$",{relevance:0}),{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib"},contains:[e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),e.NUMBER_MODE,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"symbol",begin:"^\\*(\\w+|@)"},e.NUMBER_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view",n=(e.QUOTE_STRING_MODE,{endsWithParent:!0,relevance:0,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE,{illegal:/\}\}/,begin:/[a-zA-Z0-9_]+=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[a-zA-Z0-9_]+/}]},e.NUMBER_MODE]});return{case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT("{{!(--)?","(--)?}}"),{className:"template-tag",begin:/\{\{[#\/]/,end:/\}\}/,contains:[{className:"name",begin:/[a-zA-Z\.\-]+/,keywords:{"builtin-name":t},starts:n}]},{className:"template-variable",begin:/\{\{[a-zA-Z][a-zA-Z\-]+/,end:/\}\}/,keywords:{keyword:"as",built_in:t},contains:[e.QUOTE_STRING_MODE]}]}}},function(e,t){e.exports=function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],illegal:"\\S",contains:[{begin:"^"+t,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+t+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:t},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-!.?+*=<>&#'][a-zA-Z_\\-!.?+*=<>&#'0-9/;:]*",n={begin:t,relevance:0},r={className:"number",begin:"[-+]?\\d+(\\.\\d+)?",relevance:0},i=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),a=e.COMMENT(";","$",{relevance:0}),o={className:"literal",begin:/\b([Tt]rue|[Ff]alse|nil|None)\b/},s={begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c=e.COMMENT("\\^\\{","\\}"),d={className:"symbol",begin:"[:]{1,2}"+t},u={begin:"\\(",end:"\\)"},p={endsWithParent:!0,relevance:0},m={keywords:{"builtin-name":"!= % %= & &= * ** **= *= *map + += , --build-class-- --import-- -= . / // //= /= < << <<= <= = > >= >> >>= @ @= ^ ^= abs accumulate all and any ap-compose ap-dotimes ap-each ap-each-while ap-filter ap-first ap-if ap-last ap-map ap-map-when ap-pipe ap-reduce ap-reject apply as-> ascii assert assoc bin break butlast callable calling-module-name car case cdr chain chr coll? combinations compile compress cond cons cons? continue count curry cut cycle dec def default-method defclass defmacro defmacro-alias defmacro/g! defmain defmethod defmulti defn defn-alias defnc defnr defreader defseq del delattr delete-route dict-comp dir disassemble dispatch-reader-macro distinct divmod do doto drop drop-last drop-while empty? end-sequence eval eval-and-compile eval-when-compile even? every? except exec filter first flatten float? fn fnc fnr for for* format fraction genexpr gensym get getattr global globals group-by hasattr hash hex id identity if if* if-not if-python2 import in inc input instance? integer integer-char? integer? interleave interpose is is-coll is-cons is-empty is-even is-every is-float is-instance is-integer is-integer-char is-iterable is-iterator is-keyword is-neg is-none is-not is-numeric is-odd is-pos is-string is-symbol is-zero isinstance islice issubclass iter iterable? iterate iterator? keyword keyword? lambda last len let lif lif-not list* list-comp locals loop macro-error macroexpand macroexpand-1 macroexpand-all map max merge-with method-decorator min multi-decorator multicombinations name neg? next none? nonlocal not not-in not? nth numeric? oct odd? open or ord partition permutations pos? post-route postwalk pow prewalk print product profile/calls profile/cpu put-route quasiquote quote raise range read read-str recursive-replace reduce remove repeat repeatedly repr require rest round route route-with-methods rwm second seq set-comp setattr setv some sorted string string? sum switch symbol? take take-nth take-while tee try unless unquote unquote-splicing vars walk when while with with* with-decorator with-gensyms xi xor yield yield-from zero? zip zip-longest | |= ~"},lexemes:t,className:"name",begin:t,starts:p},g=[u,i,l,c,a,d,s,r,o,n];return u.contains=[e.COMMENT("comment",""),m,p],p.contains=g,s.contains=g,{aliases:["hylang"],illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},u,i,l,c,a,d,s,r,o]}}},function(e,t){e.exports=function(e){return{aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:"\\[",end:"\\]"}]},{className:"section",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\(This",end:"\\)"}]},{className:"comment",begin:"\\[",end:"\\]",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT(";","$"),e.HASH_COMMENT_MODE,{className:"section",begin:/^\s*\[+/,end:/\]+/},{begin:/^[a-z0-9\[\]_-]+\s*=\s*/,end:"$",returnBegin:!0,contains:[{className:"attr",begin:/[a-z0-9\[\]_-]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[{className:"literal",begin:/\bon|off|true|false|yes|no\b/},{className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},t,{className:"number",begin:/([\+\-]+)?[\d]+_[\d_]+/},e.NUMBER_MODE]}]}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"},illegal:/\/\*/,contains:[e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},e.COMMENT("!","$",{relevance:0}),e.COMMENT("begin_doc","end_doc",{relevance:10}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}},function(e,t){e.exports=function(e){var t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",n={className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},n,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},r={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:n,contains:[]},a={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,r,e.REGEXP_MODE];var o=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx"],keywords:n,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[{,]\s*/,relevance:0,contains:[{begin:t+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:t,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+t+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,contains:o}]}]},{begin://,subLanguage:"xml",contains:[{begin:/<\w+\s*\/>/,skip:!0},{begin:/<\w+/,end:/(\/\w+|\w+\/)>/,skip:!0,contains:[{begin:/<\w+\s*\/>/,skip:!0},"self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:t}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:o}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}},function(e,t){e.exports=function(e){var t={className:"params",begin:/\(/,end:/\)/,contains:[{begin:/[\w-]+ *=/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/[\w-]+/}]}],relevance:0};return{aliases:["wildfly-cli"],lexemes:"[a-z-]+",keywords:{keyword:"alias batch cd clear command connect connection-factory connection-info data-source deploy deployment-info deployment-overlay echo echo-dmr help history if jdbc-driver-info jms-queue|20 jms-topic|20 ls patch pwd quit read-attribute read-operation reload rollout-plan run-batch set shutdown try unalias undeploy unset version xa-data-source",literal:"true false"},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"params",begin:/--[\w\-=\/]+/},{className:"function",begin:/:[\w\-.]+/,relevance:0},{className:"string",begin:/\B(([\/.])[\w\-.\/=]+)+/},t]}}},function(e,t){e.exports=function(e){var t={literal:"true false null"},n=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],r={end:",",endsWithParent:!0,excludeEnd:!0,contains:n,keywords:t},i={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(r,{begin:/:/})],illegal:"\\S"},a={begin:"\\[",end:"\\]",contains:[e.inherit(r)],illegal:"\\S"};return n.splice(n.length,0,i,a),{contains:n,keywords:t,illegal:"\\S"}}},function(e,t){e.exports=function(e){var t={keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},n="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",r={lexemes:n,keywords:t,illegal:/<\//},i={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},a={className:"variable",begin:"\\$"+n},o={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},s={className:"string",contains:[e.BACKSLASH_ESCAPE,i,a],begin:"`",end:"`"},l={className:"meta",begin:"@"+n};return r.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},o,s,l,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],i.contains=r.contains,r}},function(e,t){e.exports=function(e){return{contains:[{className:"meta",begin:/^julia>/,relevance:10,starts:{end:/^(?![ ]{6})/,subLanguage:"julia"},aliases:["jldoctest"]}]}}},function(e,t){e.exports=function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit initinterface annotation data sealed internal infix operator out by constructor super trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},n={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},r={className:"subst",begin:"\\${",end:"}",contains:[e.APOS_STRING_MODE,e.C_NUMBER_MODE]},i={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},a={className:"string",variants:[{begin:'"""',end:'"""',contains:[i,r]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,i,r]}]},o={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},s={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(a,{className:"meta-string"})]}]};return{keywords:t,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},n,o,s,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:t,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],relevance:0},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o,s,a,e.C_NUMBER_MODE]},e.C_BLOCK_COMMENT_MODE]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},o,s]},a,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="\\]|\\?>",n={literal:"true false none minimal full all void and or not bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else fail_if fail_ifnot fail if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},r=e.COMMENT("\x3c!--","--\x3e",{relevance:0}),i={className:"meta",begin:"\\[noprocess\\]",starts:{end:"\\[/noprocess\\]",returnEnd:!0,contains:[r]}},a={className:"meta",begin:"\\[/noprocess|<\\?(lasso(script)?|=)"},o={className:"symbol",begin:"'[a-zA-Z_][\\w.]*'"},s=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.C_NUMBER_MODE,{begin:e.C_NUMBER_RE+"|(-?infinity|NaN)\\b"}),e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{variants:[{begin:"[#$][a-zA-Z_][\\w.]*"},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"type",begin:"::\\s*",end:"[a-zA-Z_][\\w.]*",illegal:"\\W"},{className:"params",variants:[{begin:"-(?!infinity)[a-zA-Z_][\\w.]*",relevance:0},{begin:"(\\.\\.\\.)"}]},{begin:/(->|\.)\s*/,relevance:0,contains:[o]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z_][\\w.]*(=(?!>))?|[-+*/%](?!>)"})]}];return{aliases:["ls","lassoscript"],case_insensitive:!0,lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[|<\\?(lasso(script)?|=)",returnEnd:!0,relevance:0,contains:[r]}},i,a,{className:"meta",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",lexemes:"[a-zA-Z_][\\w.]*|&[lg]t;",keywords:n,contains:[{className:"meta",begin:t,relevance:0,starts:{end:"\\[noprocess\\]|<\\?(lasso(script)?|=)",returnEnd:!0,contains:[r]}},i,a].concat(s)}},{className:"meta",begin:"\\[",relevance:0},{className:"meta",begin:"^#!",end:"lasso9$",relevance:10}].concat(s)}}},function(e,t){e.exports=function(e){return{contains:[{className:"attribute",begin:"^dn",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0},relevance:10},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,starts:{end:"$",relevance:0}},{className:"literal",begin:"^-",end:"$"},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{contains:[{className:"function",begin:"#+[A-Za-z_0-9]*\\(",end:" {",returnBegin:!0,excludeEnd:!0,contains:[{className:"keyword",begin:"#+"},{className:"title",begin:"[A-Za-z_][A-Za-z_0-9]*"},{className:"params",begin:"\\(",end:"\\)",endsParent:!0,contains:[{className:"string",begin:'"',end:'"'},{className:"variable",begin:"[A-Za-z_][A-Za-z_0-9]*"}]}]}]}}},function(e,t){e.exports=function(e){var t="([\\w-]+|@{[\\w-]+})",n=[],r=[],i=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},a=function(e,t,n){return{className:e,begin:t,relevance:n}},o={begin:"\\(",end:"\\)",contains:r,relevance:0};r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i("'"),i('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},a("number","#[0-9A-Fa-f]+\\b"),o,a("variable","@@?[\\w-]+",10),a("variable","@{[\\w-]+}"),a("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var s=r.concat({begin:"{",end:"}",contains:n}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(r)},c={begin:t+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:t,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:r}}]},d={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:r,relevance:0}},u={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:s}},p={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:t,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,a("keyword","all\\b"),a("variable","@{[\\w-]+}"),a("selector-tag",t+"%?",0),a("selector-id","#"+t),a("selector-class","\\."+t,0),a("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:s},{begin:"!important"}]};return n.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,d,u,c,p),{case_insensitive:!0,illegal:"[=>'/<($\"]",contains:n}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",n="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",r={className:"literal",begin:"\\b(t{1}|nil)\\b"},i={className:"number",variants:[{begin:n,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+n+" +"+n,end:"\\)"}]},a=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),o=e.COMMENT(";","$",{relevance:0}),s={begin:"\\*",end:"\\*"},l={className:"symbol",begin:"[:&]"+t},c={begin:t,relevance:0},d={begin:"\\|[^]*?\\|"},u={contains:[i,a,s,l,{begin:"\\(",end:"\\)",contains:["self",r,a,i,c]},c],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{name:"quote"}},{begin:"'\\|[^]*?\\|"}]},p={variants:[{begin:"'"+t},{begin:"#'"+t+"(::"+t+")*"}]},m={begin:"\\(\\s*",end:"\\)"},g={endsWithParent:!0,relevance:0};return m.contains=[{className:"name",variants:[{begin:t},{begin:"\\|[^]*?\\|"}]},g],g.contains=[u,p,m,r,i,a,o,s,l,d,c],{illegal:/\S/,contains:[i,{className:"meta",begin:"^#!",end:"$"},r,a,o,u,p,m,c]}}},function(e,t){e.exports=function(e){var t={begin:"\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+",relevance:0},n=[e.C_BLOCK_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("--","$"),e.COMMENT("[^:]//","$")],r=e.inherit(e.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),i=e.inherit(e.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",literal:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract union unload wait write"},contains:[t,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[i,r],relevance:0},{beginKeywords:"command on",end:"$",contains:[t,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r]},{className:"meta",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE,r].concat(n),illegal:";$|^\\[|^=|&|{"}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},n="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",r=e.inherit(e.TITLE_MODE,{begin:n}),i={className:"subst",begin:/#\{/,end:/}/,keywords:t},a={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:t},o=[e.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i,a]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"regexp",variants:[{begin:"//",end:"//[gim]*",contains:[i,e.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{begin:"@"+n},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];i.contains=o;var s={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{aliases:["ls"],keywords:t,illegal:/\/\*/,contains:o.concat([e.COMMENT("\\/\\*","\\*\\/"),e.HASH_COMMENT_MODE,{className:"function",contains:[r,s],returnBegin:!0,variants:[{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",end:"\\->\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+n+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[r]},r]},{begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){var t="([-a-zA-Z$._][\\w\\-$.]*)";return{keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[{className:"keyword",begin:"i\\d+"},e.COMMENT(";","\\n",{relevance:0}),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:'"',end:'[^\\\\]"'}],relevance:0},{className:"title",variants:[{begin:"@"+t},{begin:"@\\d+"},{begin:"!"+t},{begin:"!\\d+"+t}]},{className:"symbol",variants:[{begin:"%"+t},{begin:"%\\d+"},{begin:"#\\d+"}]},{className:"number",variants:[{begin:"0[xX][a-fA-F0-9]+"},{begin:"-?\\d+(?:[.]\\d+)?(?:[eE][-+]?\\d+(?:[.]\\d+)?)?"}],relevance:0}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:'"',end:'"',contains:[{className:"subst",begin:/\\[tn"\\]/}]},n={className:"number",begin:e.C_NUMBER_RE};return{illegal:":",contains:[t,{className:"comment",variants:[e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/")]},n,{className:"section",variants:[{begin:"\\b(?:state|default)\\b"},{begin:"\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b"}]},{className:"built_in",begin:"\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b"},{className:"literal",variants:[{begin:"\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b"},{begin:"\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b"},{begin:"\\b(?:FALSE|TRUE)\\b"},{begin:"\\b(?:ZERO_ROTATION)\\b"},{begin:"\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b"},{begin:"\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b"}]},{className:"type",begin:"\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b"}]}}},function(e,t){e.exports=function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},n=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:n.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:n}].concat(n)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},{className:"built_in",variants:[{begin:":-\\|--\x3e"},{begin:"=",relevance:0}]},t,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},e.NUMBER_MODE,n,r,{begin:/:-/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,aliases:["mips"],lexemes:"\\.?"+e.IDENT_RE,keywords:{meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ",built_in:"$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 k0 k1 gp sp fp ra $f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt "},contains:[{className:"keyword",begin:"\\b(addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(.hb)?|jr(.hb)?|lbu?|lhu?|ll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|srlv?|subu?|sw[lr]?|xori?|wsbh|abs.[sd]|add.[sd]|alnv.ps|bc1[ft]l?|c.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et]).[sd]|(ceil|floor|round|trunc).[lw].[sd]|cfc1|cvt.d.[lsw]|cvt.l.[dsw]|cvt.ps.s|cvt.s.[dlw]|cvt.s.p[lu]|cvt.w.[dls]|div.[ds]|ldx?c1|luxc1|lwx?c1|madd.[sd]|mfc1|mov[fntz]?.[ds]|msub.[sd]|mth?c1|mul.[ds]|neg.[ds]|nmadd.[ds]|nmsub.[ds]|p[lu][lu].ps|recip.fmt|r?sqrt.[ds]|sdx?c1|sub.[ds]|suxc1|swx?c1|break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|tlti?u?|tnei?|wait|wrpgpr)",end:"\\s"},e.COMMENT("[;#]","$"),e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"0x[0-9a-f]+"},{begin:"\\b-?\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^\\s*[0-9]+:"},{begin:"[0-9]+[bf]"}],relevance:0}],illegal:"/"}}},function(e,t){e.exports=function(e){return{keywords:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",contains:[e.COMMENT("::","$")]}}},function(e,t){e.exports=function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",n={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:t},r={begin:"->{",end:"}"},i={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},a=[e.BACKSLASH_ESCAPE,n,i],o=[i,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),r,{className:"string",contains:a,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return n.contains=o,r.contains=o,{aliases:["pl","pm"],lexemes:/[\w\.]+/,keywords:t,contains:o}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{className:"meta",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t={className:"number",relevance:0,variants:[{begin:"[$][a-fA-F0-9]+"},e.NUMBER_MODE]};return{case_insensitive:!0,keywords:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw import",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},illegal:/\/\*/,contains:[e.COMMENT("#rem","#end"),e.COMMENT("'","$",{relevance:0}),{className:"function",beginKeywords:"function method",end:"[(=:]|$",illegal:/\n/,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"$",contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{className:"built_in",begin:"\\b(self|super)\\b"},{className:"meta",begin:"\\s*#",end:"$",keywords:{"meta-keyword":"if else elseif endif end then"}},{className:"meta",begin:"^\\s*strict\\b"},{beginKeywords:"alias",end:"=",contains:[e.UNDERSCORE_TITLE_MODE]},e.QUOTE_STRING_MODE,t]}}},function(e,t){e.exports=function(e){var t={keyword:"if then not for in while do return else elseif break continue switch and or unless when class extends super local import export from using",literal:"true false nil",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={className:"subst",begin:/#\{/,end:/}/,keywords:t},i=[e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r]}]},{className:"built_in",begin:"@__"+e.IDENT_RE},{begin:"@"+e.IDENT_RE},{begin:e.IDENT_RE+"\\\\"+e.IDENT_RE}];r.contains=i;var a=e.inherit(e.TITLE_MODE,{begin:n}),o={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(i)}]};return{aliases:["moon"],keywords:t,illegal:/\/\*/,contains:i.concat([e.COMMENT("--","$"),{className:"function",begin:"^\\s*"+n+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[a,o]},{begin:/[\(,:=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[o]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[a]},a]},{className:"name",begin:n+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{beginKeywords:"build create index delete drop explain infer|10 insert merge prepare select update upsert|10",end:/;/,endsWithParent:!0,keywords:{keyword:"all alter analyze and any array as asc begin between binary boolean break bucket build by call case cast cluster collate collection commit connect continue correlate cover create database dataset datastore declare decrement delete derived desc describe distinct do drop each element else end every except exclude execute exists explain fetch first flatten for force from function grant group gsi having if ignore ilike in include increment index infer inline inner insert intersect into is join key keys keyspace known last left let letting like limit lsm map mapping matched materialized merge minus namespace nest not number object offset on option or order outer over parse partition password path pool prepare primary private privilege procedure public raw realm reduce rename return returning revoke right role rollback satisfies schema select self semi set show some start statistics string system then to transaction trigger truncate under union unique unknown unnest unset update upsert use user using validate value valued values via view when where while with within work xor",literal:"true false null missing|5",built_in:"array_agg array_append array_concat array_contains array_count array_distinct array_ifnull array_length array_max array_min array_position array_prepend array_put array_range array_remove array_repeat array_replace array_reverse array_sort array_sum avg count max min sum greatest least ifmissing ifmissingornull ifnull missingif nullif ifinf ifnan ifnanorinf naninf neginfif posinfif clock_millis clock_str date_add_millis date_add_str date_diff_millis date_diff_str date_part_millis date_part_str date_trunc_millis date_trunc_str duration_to_str millis str_to_millis millis_to_str millis_to_utc millis_to_zone_name now_millis now_str str_to_duration str_to_utc str_to_zone_name decode_json encode_json encoded_size poly_length base64 base64_encode base64_decode meta uuid abs acos asin atan atan2 ceil cos degrees e exp ln log floor pi power radians random round sign sin sqrt tan trunc object_length object_names object_pairs object_inner_pairs object_values object_inner_values object_add object_put object_remove object_unwrap regexp_contains regexp_like regexp_position regexp_replace contains initcap length lower ltrim position repeat replace rtrim split substr title trim upper isarray isatom isboolean isnumber isobject isstring type toarray toatom toboolean tonumber toobject tostring"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE],relevance:0},{className:"symbol",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE],relevance:2},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},n={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[t]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},t]};return{aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:n}],relevance:0}],illegal:"[^\\s\\}]"}}},function(e,t){e.exports=function(e){return{aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={keyword:"rec with let in inherit assert if else then",literal:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},n={className:"subst",begin:/\$\{/,end:/}/,keywords:t},r={className:"string",contains:[n],variants:[{begin:"''",end:"''"},{begin:'"',end:'"'}]},i=[e.NUMBER_MODE,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,r,{begin:/[a-zA-Z0-9-_]+(\s*=)/,returnBegin:!0,relevance:0,contains:[{className:"attr",begin:/\S+/}]}];return n.contains=i,{aliases:["nixos"],keywords:t,contains:i}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:/\$+{[\w\.:-]+}/},n={className:"variable",begin:/\$+\w+/,illegal:/\(\){}/},r={className:"variable",begin:/\$+\([\w\^\.:-]+\)/},i={className:"string",variants:[{begin:'"',end:'"'},{begin:"'",end:"'"},{begin:"`",end:"`"}],illegal:/\n/,contains:[{className:"subst",begin:/\$(\\[nrt]|\$)/},{className:"variable",begin:/\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)/},t,n,r]};return{case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle",literal:"admin all auto both bottom bzip2 colored components current custom directory false force hide highest ifdiff ifnewer instfiles lastused leave left license listonly lzma nevershow none normal notset off on open print right show silent silentlog smooth textonly top true try un.components un.custom un.directory un.instfiles un.license uninstConfirm user Win10 Win7 Win8 WinVista zlib"},contains:[e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup",end:"$"},i,{className:"keyword",begin:/\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)/},t,n,r,{className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},{className:"class",begin:/\w+\:\:\w+/},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:{keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},lexemes:t,illegal:""}]}]},{className:"class",begin:"("+n.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:n,lexemes:t,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*",relevance:0},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},n={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"function",beginKeywords:"module function",end:"\\=|\\{",contains:[{className:"params",begin:"\\(",end:"\\)",contains:["self",n,r,t,{className:"literal",begin:"false|true|PI|undef"}]},e.UNDERSCORE_TITLE_MODE]};return{aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"meta",keywords:{"meta-keyword":"include use"},begin:"include|use <",end:">"},r,t,{begin:"[*!#%]",relevance:0},i]}}},function(e,t){e.exports=function(e){var t="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",n=e.COMMENT("{","}",{relevance:0}),r=e.COMMENT("\\(\\*","\\*\\)",{relevance:10}),i={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},a={className:"string",begin:"(#\\d+)+"},o={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:t,contains:[i,a]},n,r]};return{case_insensitive:!0,lexemes:/\.?\w+/,keywords:t,illegal:'("|\\$[G-Zg-z]|\\/\\*||->)',contains:[n,r,e.C_LINE_COMMENT_MODE,i,a,e.NUMBER_MODE,o,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:t,contains:[i,a,n,r,e.C_LINE_COMMENT_MODE,o]}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("{","}",{contains:["self"]});return{subLanguage:"xml",relevance:0,contains:[e.COMMENT("^#","$"),e.COMMENT("\\^rem{","}",{relevance:10,contains:[t]}),{className:"meta",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{className:"keyword",begin:"\\^[\\w\\-\\.\\:]+"},{className:"number",begin:"\\^#[0-9a-fA-F]+"},e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["pf.conf"],lexemes:/[a-z0-9_<>-]+/,keywords:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[e.HASH_COMMENT_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE,{className:"variable",begin:/\$[\w\d#@][\w\d_]*/},{className:"variable",begin:/<(?!\/)/,end:/>/}]}}},function(e,t){e.exports=function(e){var t={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},n={className:"meta",begin:/<\?(php)?|\?>/},r={className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},i={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["php3","php4","php5","php6"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[n]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},n,{className:"keyword",begin:/\$this\b/},t,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",t,e.C_BLOCK_COMMENT_MODE,r,i]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},r,i]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE],relevance:0},r={className:"type",begin:"\\b_?[A-Z][\\w]*",relevance:0},i={begin:e.IDENT_RE+"'",relevance:0};return{keywords:{keyword:"actor addressof and as be break class compile_error compile_intrinsicconsume continue delegate digestof do else elseif embed end errorfor fun if ifdef in interface is isnt lambda let match new not objector primitive recover repeat return struct then trait try type until use var where while with xor",meta:"iso val tag trn box ref",literal:"this false true"},contains:[{className:"class",beginKeywords:"class actor",end:"$",contains:[e.TITLE_MODE,e.C_LINE_COMMENT_MODE]},{className:"function",beginKeywords:"new fun",end:"=>",contains:[e.TITLE_MODE,{begin:/\(/,end:/\)/,contains:[r,i,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},{begin:/:/,endsWithParent:!0,contains:[r]},e.C_LINE_COMMENT_MODE]},r,{className:"string",begin:'"""',end:'"""',relevance:10},t,n,i,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){var t={begin:"`[\\s\\S]",relevance:0},n={className:"variable",variants:[{begin:/\$[\w\d][\w\d_:]*/}]},r={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[t,n,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},i=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]});return{aliases:["ps"],lexemes:/-?[A-z\.\-]+/,case_insensitive:!0,keywords:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",built_in:"Add-Computer Add-Content Add-History Add-JobTrigger Add-Member Add-PSSnapin Add-Type Checkpoint-Computer Clear-Content Clear-EventLog Clear-History Clear-Host Clear-Item Clear-ItemProperty Clear-Variable Compare-Object Complete-Transaction Connect-PSSession Connect-WSMan Convert-Path ConvertFrom-Csv ConvertFrom-Json ConvertFrom-SecureString ConvertFrom-StringData ConvertTo-Csv ConvertTo-Html ConvertTo-Json ConvertTo-SecureString ConvertTo-Xml Copy-Item Copy-ItemProperty Debug-Process Disable-ComputerRestore Disable-JobTrigger Disable-PSBreakpoint Disable-PSRemoting Disable-PSSessionConfiguration Disable-WSManCredSSP Disconnect-PSSession Disconnect-WSMan Disable-ScheduledJob Enable-ComputerRestore Enable-JobTrigger Enable-PSBreakpoint Enable-PSRemoting Enable-PSSessionConfiguration Enable-ScheduledJob Enable-WSManCredSSP Enter-PSSession Exit-PSSession Export-Alias Export-Clixml Export-Console Export-Counter Export-Csv Export-FormatData Export-ModuleMember Export-PSSession ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-ComputerRestorePoint Get-Content Get-ControlPanelItem Get-Counter Get-Credential Get-Culture Get-Date Get-Event Get-EventLog Get-EventSubscriber Get-ExecutionPolicy Get-FormatData Get-Host Get-HotFix Get-Help Get-History Get-IseSnippet Get-Item Get-ItemProperty Get-Job Get-JobTrigger Get-Location Get-Member Get-Module Get-PfxCertificate Get-Process Get-PSBreakpoint Get-PSCallStack Get-PSDrive Get-PSProvider Get-PSSession Get-PSSessionConfiguration Get-PSSnapin Get-Random Get-ScheduledJob Get-ScheduledJobOption Get-Service Get-TraceSource Get-Transaction Get-TypeData Get-UICulture Get-Unique Get-Variable Get-Verb Get-WinEvent Get-WmiObject Get-WSManCredSSP Get-WSManInstance Group-Object Import-Alias Import-Clixml Import-Counter Import-Csv Import-IseSnippet Import-LocalizedData Import-PSSession Import-Module Invoke-AsWorkflow Invoke-Command Invoke-Expression Invoke-History Invoke-Item Invoke-RestMethod Invoke-WebRequest Invoke-WmiMethod Invoke-WSManAction Join-Path Limit-EventLog Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Event New-EventLog New-IseSnippet New-Item New-ItemProperty New-JobTrigger New-Object New-Module New-ModuleManifest New-PSDrive New-PSSession New-PSSessionConfigurationFile New-PSSessionOption New-PSTransportOption New-PSWorkflowExecutionOption New-PSWorkflowSession New-ScheduledJobOption New-Service New-TimeSpan New-Variable New-WebServiceProxy New-WinEvent New-WSManInstance New-WSManSessionOption Out-Default Out-File Out-GridView Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Receive-Job Register-EngineEvent Register-ObjectEvent Register-PSSessionConfiguration Register-ScheduledJob Register-WmiEvent Remove-Computer Remove-Event Remove-EventLog Remove-Item Remove-ItemProperty Remove-Job Remove-JobTrigger Remove-Module Remove-PSBreakpoint Remove-PSDrive Remove-PSSession Remove-PSSnapin Remove-TypeData Remove-Variable Remove-WmiObject Remove-WSManInstance Rename-Computer Rename-Item Rename-ItemProperty Reset-ComputerMachinePassword Resolve-Path Restart-Computer Restart-Service Restore-Computer Resume-Job Resume-Service Save-Help Select-Object Select-String Select-Xml Send-MailMessage Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-JobTrigger Set-Location Set-PSBreakpoint Set-PSDebug Set-PSSessionConfiguration Set-ScheduledJob Set-ScheduledJobOption Set-Service Set-StrictMode Set-TraceSource Set-Variable Set-WmiInstance Set-WSManInstance Set-WSManQuickConfig Show-Command Show-ControlPanelItem Show-EventLog Sort-Object Split-Path Start-Job Start-Process Start-Service Start-Sleep Start-Transaction Start-Transcript Stop-Computer Stop-Job Stop-Process Stop-Service Stop-Transcript Suspend-Job Suspend-Service Tee-Object Test-ComputerSecureChannel Test-Connection Test-ModuleManifest Test-Path Test-PSSessionConfigurationFile Trace-Command Unblock-File Undo-Transaction Unregister-Event Unregister-PSSessionConfiguration Unregister-ScheduledJob Update-FormatData Update-Help Update-List Update-TypeData Use-Transaction Wait-Event Wait-Job Wait-Process Where-Object Write-Debug Write-Error Write-EventLog Write-Host Write-Output Write-Progress Write-Verbose Write-Warning Add-MDTPersistentDrive Disable-MDTMonitorService Enable-MDTMonitorService Get-MDTDeploymentShareStatistics Get-MDTMonitorData Get-MDTOperatingSystemCatalog Get-MDTPersistentDrive Import-MDTApplication Import-MDTDriver Import-MDTOperatingSystem Import-MDTPackage Import-MDTTaskSequence New-MDTDatabase Remove-MDTMonitorData Remove-MDTPersistentDrive Restore-MDTPersistentDrive Set-MDTMonitorData Test-MDTDeploymentShare Test-MDTMonitorData Update-MDTDatabaseSchema Update-MDTDeploymentShare Update-MDTLinkedDS Update-MDTMedia Update-MDTMedia Add-VamtProductKey Export-VamtData Find-VamtManagedMachine Get-VamtConfirmationId Get-VamtProduct Get-VamtProductKey Import-VamtData Initialize-VamtData Install-VamtConfirmationId Install-VamtProductActivation Install-VamtProductKey Update-VamtProduct",nomarkup:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},contains:[t,e.NUMBER_MODE,r,{className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},{className:"literal",begin:/\$(null|true|false)\b/},n,i]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",literal:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",title:"setup draw",built_in:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{contains:[e.C_NUMBER_MODE,{begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{begin:"function calls",end:"$",contains:[e.C_NUMBER_MODE],relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\(",end:"\\)$",excludeBegin:!0,excludeEnd:!0,relevance:0}]}}},function(e,t){e.exports=function(e){var t={begin:/\(/,end:/\)/,relevance:0},n={begin:/\[/,end:/\]/},r={className:"comment",begin:/%/,end:/$/,contains:[e.PHRASAL_WORDS_MODE]},i={className:"string",begin:/`/,end:/`/,contains:[e.BACKSLASH_ESCAPE]},a=[{begin:/[a-z][A-Za-z0-9_]*/,relevance:0},{className:"symbol",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},t,{begin:/:-/},n,r,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,{className:"string",begin:/0\'(\\\'|.)/},{className:"string",begin:/0\'\\s/},e.C_NUMBER_MODE];return t.contains=a,n.contains=a,{contains:a.concat([{begin:/\.$/}])}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"package import option optional required repeated group",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/;/,excludeEnd:!0,keywords:"rpc returns"},{begin:/^\s*[A-Z_]+/,end:/\s*=/,excludeEnd:!0}]}}},function(e,t){e.exports=function(e){var t=e.COMMENT("#","$"),n=e.inherit(e.TITLE_MODE,{begin:"([A-Za-z_]|::)(\\w|::)*"}),r={className:"variable",begin:"\\$([A-Za-z_]|::)(\\w|::)*"},i={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[t,r,i,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[n,t]},{beginKeywords:"define",end:/\{/,contains:[{className:"section",begin:e.IDENT_RE,endsParent:!0}]},{begin:e.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"keyword",begin:e.IDENT_RE},{begin:/\{/,end:/\}/,keywords:{keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},relevance:0,contains:[i,t,{begin:"[a-zA-Z_]+\\s*=>",returnBegin:!0,end:"=>",contains:[{className:"attr",begin:e.IDENT_RE}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},r]}],relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["pb","pbi"],keywords:"And As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerEndIf CompilerEndSelect CompilerError CompilerIf CompilerSelect Continue Data DataSection EndDataSection Debug DebugLevel Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM EnableDebugger EnableExplicit End EndEnumeration EndIf EndImport EndInterface EndMacro EndProcedure EndSelect EndStructure EndStructureUnion EndWith Enumeration Extends FakeReturn For Next ForEach ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface Macro NewList Not Or ProcedureReturn Protected Prototype PrototypeC Read ReDim Repeat Until Restore Return Select Shared Static Step Structure StructureUnion Swap To Wend While With XIncludeFile XOr Procedure ProcedureC ProcedureCDLL ProcedureDLL Declare DeclareC DeclareCDLL DeclareDLL",contains:[e.COMMENT(";","$",{relevance:0}),{className:"function",begin:"\\b(Procedure|Declare)(C|CDLL|DLL)?\\b",end:"\\(",excludeEnd:!0,returnBegin:!0,contains:[{className:"keyword",begin:"(Procedure|Declare)(C|CDLL|DLL)?",excludeEnd:!0},{className:"type",begin:"\\.\\w*"},e.UNDERSCORE_TITLE_MODE]},{className:"string",begin:'(~)?"',end:'"',illegal:"\\n"},{className:"symbol",begin:"#[a-zA-Z_]\\w*\\$?"}]}}},function(e,t){e.exports=function(e){var t={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},n={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,end:/\}/,keywords:t,illegal:/#/},i={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[n],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[n],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[n,r]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[n,r]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[r]},{begin:/(fr|rf|f)"/,end:/"/,contains:[r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},a={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},o={className:"params",begin:/\(/,end:/\)/,contains:["self",n,a,i]};return r.contains=[i,a,n],{aliases:["py","gyp"],keywords:t,illegal:/(<\/|->|\?)|=>/,contains:[n,a,i,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,o,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}},function(e,t){e.exports=function(e){return{aliases:["k","kdb"],keywords:{keyword:"do while select delete by update from",literal:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",type:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"},lexemes:/(`?)[A-Za-z0-9_]+\b/,contains:[e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][a-zA-Z0-9\\._]*",n={className:"attribute",begin:"\\bid\\s*:",starts:{className:"string",end:t,returnEnd:!1}},r={begin:t+"\\s*:",returnBegin:!0,contains:[{className:"attribute",begin:t,end:"\\s*:",excludeEnd:!0,relevance:0}],relevance:0},i={begin:t+"\\s*{",end:"{",returnBegin:!0,relevance:0,contains:[e.inherit(e.TITLE_MODE,{begin:t})]};return{aliases:["qt"],case_insensitive:!1,keywords:{keyword:"in of on if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await import",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Behavior bool color coordinate date double enumeration font geocircle georectangle geoshape int list matrix4x4 parent point quaternion real rect size string url variant vector2d vector3d vector4dPromise"},contains:[{className:"meta",begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{begin:/\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"keyword",begin:"\\bsignal\\b",starts:{className:"string",end:"(\\(|:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"keyword",begin:"\\bproperty\\b",starts:{className:"string",end:"(:|=|;|,|//|/\\*|$)",returnEnd:!0}},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:"\\."+e.IDENT_RE,relevance:0},n,r,i],illegal:/#/}}},function(e,t){e.exports=function(e){var t="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{contains:[e.HASH_COMMENT_MODE,{begin:t,lexemes:t,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}},function(e,t){e.exports=function(e){return{keywords:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",illegal:"\]$/},{begin:/<\//,end:/>/},{begin:/^facet /,end:/\}/},{begin:"^1\\.\\.(\\d+)$",end:/$/}],illegal:/./},e.COMMENT("^#","$"),i,a,r,{begin:/[\w-]+\=([^\s\{\}\[\]\(\)]+)/,relevance:0,returnBegin:!0,contains:[{className:"attribute",begin:/[^=]+/},{begin:/=/,endsWithParent:!0,relevance:0,contains:[i,a,r,{className:"literal",begin:"\\b("+n.split(" ").join("|")+")\\b"},{begin:/("[^"]*"|[^\s\{\}\[\]]+)/}]}]},{className:"number",begin:/\*[0-9a-fA-F]+/},{begin:"\\b("+"add remove enable disable set get print export edit find run debug error info warning".split(" ").join("|")+")([\\s[(]|])",returnBegin:!0,contains:[{className:"builtin-name",begin:/\w+/}]},{className:"built_in",variants:[{begin:"(\\.\\./|/|\\s)(("+"traffic-flow traffic-generator firewall scheduler aaa accounting address-list address align area bandwidth-server bfd bgp bridge client clock community config connection console customer default dhcp-client dhcp-server discovery dns e-mail ethernet filter firewall firmware gps graphing group hardware health hotspot identity igmp-proxy incoming instance interface ip ipsec ipv6 irq l2tp-server lcd ldp logging mac-server mac-winbox mangle manual mirror mme mpls nat nd neighbor network note ntp ospf ospf-v3 ovpn-server page peer pim ping policy pool port ppp pppoe-client pptp-server prefix profile proposal proxy queue radius resource rip ripng route routing screen script security-profiles server service service-port settings shares smb sms sniffer snmp snooper socks sstp-server system tool tracking type upgrade upnp user-manager users user vlan secret vrrp watchdog web-access wireless pptp pppoe lan wan layer7-protocol lease simple raw".split(" ").join("|")+");?\\s)+",relevance:10},{begin:/\.\./}]}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:""}]}}},function(e,t){e.exports=function(e){var t={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},n={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[t],relevance:10}]},r={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},i={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},a={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[r]},i]},o={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[i]};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},r,o,a,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",n={className:"literal",begin:"(#t|#f|#\\\\"+t+"|#\\\\.)"},r={className:"number",variants:[{begin:"(\\-|\\+)?\\d+([./]\\d+)?",relevance:0},{begin:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},i=e.QUOTE_STRING_MODE,a=[e.COMMENT(";","$",{relevance:0}),e.COMMENT("#\\|","\\|#")],o={begin:t,relevance:0},s={className:"symbol",begin:"'"+t},l={endsWithParent:!0,relevance:0},c={variants:[{begin:/'/},{begin:"`"}],contains:[{begin:"\\(",end:"\\)",contains:["self",n,i,r,o,s]}]},d={className:"name",begin:t,lexemes:t,keywords:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},u={variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{begin:/lambda/,endsWithParent:!0,returnBegin:!0,contains:[d,{begin:/\(/,end:/\)/,endsParent:!0,contains:[o]}]},d,l]};return l.contains=[n,r,i,o,s,c,u].concat(a),{illegal:/\S/,contains:[{className:"meta",begin:"^#!",end:"$"},r,i,s,c,u].concat(a)}}},function(e,t){e.exports=function(e){var t=[e.C_NUMBER_MODE,{className:"string",begin:"'|\"",end:"'|\"",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]}];return{aliases:["sci"],lexemes:/%?\w+/,keywords:{keyword:"abort break case clear catch continue do elseif else endfunction end for function global if pause return resume select try then while",literal:"%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan type typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{begin:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",end:"",relevance:0},{begin:"\\[",end:"\\]'*[\\.']*",relevance:0,contains:t},e.COMMENT("//","$")].concat(t)}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},n={className:"number",begin:"#[0-9A-Fa-f]+"};e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE;return{case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,n,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@",end:"[{;]",keywords:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",contains:[t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n,e.CSS_NUMBER_MODE,{begin:"\\s[A-Za-z0-9_.-]+",relevance:0}]}]}}},function(e,t){e.exports=function(e){return{aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}},function(e,t){e.exports=function(e){var t=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"];return{aliases:["smali"],contains:[{className:"string",begin:'"',end:'"',relevance:0},e.COMMENT("#","$",{relevance:0}),{className:"keyword",variants:[{begin:"\\s*\\.end\\s[a-zA-Z0-9]*"},{begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{begin:"\\s("+["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"].join("|")+")"}]},{className:"built_in",variants:[{begin:"\\s("+t.join("|")+")\\s"},{begin:"\\s("+t.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{begin:"\\s("+["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"].join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",relevance:10}]},{className:"class",begin:"L[^(;:\n]*;",relevance:0},{begin:"[vp][0-9]+"}]}}},function(e,t){e.exports=function(e){var t={className:"string",begin:"\\$.{1}"},n={className:"symbol",begin:"#"+e.UNDERSCORE_IDENT_RE};return{aliases:["st"],keywords:"self super nil true false thisContext",contains:[e.COMMENT('"','"'),e.APOS_STRING_MODE,{className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{begin:"[a-z][a-zA-Z0-9_]*:",relevance:0},e.C_NUMBER_MODE,n,t,{begin:"\\|[ ]*[a-z][a-zA-Z0-9_]*([ ]+[a-z][a-zA-Z0-9_]*)*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?[a-z][a-zA-Z0-9_]*"}]},{begin:"\\#\\(",end:"\\)",contains:[e.APOS_STRING_MODE,t,e.C_NUMBER_MODE,n]}]}}},function(e,t){e.exports=function(e){return{aliases:["ml"],keywords:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:/\[(\|\|)?\]|\(\)/,relevance:0},e.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"type",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},e.inherit(e.APOS_STRING_MODE,{className:"string",relevance:0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}},function(e,t){e.exports=function(e){var t=e.getLanguage("cpp").exports;return{aliases:["sqf"],case_insensitive:!0,keywords:{keyword:"case catch default do else exit exitWith for forEach from if switch then throw to try waitUntil while with",built_in:"abs accTime acos action actionIDs actionKeys actionKeysImages actionKeysNames actionKeysNamesArray actionName actionParams activateAddons activatedAddons activateKey add3DENConnection add3DENEventHandler add3DENLayer addAction addBackpack addBackpackCargo addBackpackCargoGlobal addBackpackGlobal addCamShake addCuratorAddons addCuratorCameraArea addCuratorEditableObjects addCuratorEditingArea addCuratorPoints addEditorObject addEventHandler addGoggles addGroupIcon addHandgunItem addHeadgear addItem addItemCargo addItemCargoGlobal addItemPool addItemToBackpack addItemToUniform addItemToVest addLiveStats addMagazine addMagazineAmmoCargo addMagazineCargo addMagazineCargoGlobal addMagazineGlobal addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem addMissionEventHandler addMPEventHandler addMusicEventHandler addOwnedMine addPlayerScores addPrimaryWeaponItem addPublicVariableEventHandler addRating addResources addScore addScoreSide addSecondaryWeaponItem addSwitchableUnit addTeamMember addToRemainsCollector addUniform addVehicle addVest addWaypoint addWeapon addWeaponCargo addWeaponCargoGlobal addWeaponGlobal addWeaponItem addWeaponPool addWeaponTurret agent agents AGLToASL aimedAtTarget aimPos airDensityRTD airportSide AISFinishHeal alive all3DENEntities allControls allCurators allCutLayers allDead allDeadMen allDisplays allGroups allMapMarkers allMines allMissionObjects allow3DMode allowCrewInImmobile allowCuratorLogicIgnoreAreas allowDamage allowDammage allowFileOperations allowFleeing allowGetIn allowSprint allPlayers allSites allTurrets allUnits allUnitsUAV allVariables ammo and animate animateDoor animateSource animationNames animationPhase animationSourcePhase animationState append apply armoryPoints arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner assignAsTurret assignCurator assignedCargo assignedCommander assignedDriver assignedGunner assignedItems assignedTarget assignedTeam assignedVehicle assignedVehicleRole assignItem assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject attachedObjects attachedTo attachObject attachTo attackEnabled backpack backpackCargo backpackContainer backpackItems backpackMagazines backpackSpaceFor behaviour benchmark binocular blufor boundingBox boundingBoxReal boundingCenter breakOut breakTo briefingName buildingExit buildingPos buttonAction buttonSetAction cadetMode call callExtension camCommand camCommit camCommitPrepared camCommitted camConstuctionSetParams camCreate camDestroy cameraEffect cameraEffectEnableHUD cameraInterest cameraOn cameraView campaignConfigFile camPreload camPreloaded camPrepareBank camPrepareDir camPrepareDive camPrepareFocus camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos camPrepareTarget camSetBank camSetDir camSetDive camSetFocus camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget camTarget camUseNVG canAdd canAddItemToBackpack canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination canFire canMove canSlingLoad canStand canSuspend canUnloadInCombat canVehicleCargo captive captiveNum cbChecked cbSetChecked ceil channelEnabled cheatsEnabled checkAIFeature checkVisibility civilian className clearAllItemsFromBackpack clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons clearItemCargo clearItemCargoGlobal clearItemPool clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal clearWeaponPool clientOwner closeDialog closeDisplay closeOverlay collapseObjectTree collect3DENHistory combatMode commandArtilleryFire commandChat commander commandFire commandFollow commandFSM commandGetOut commandingMenu commandMove commandRadio commandStop commandSuppressiveFire commandTarget commandWatch comment commitOverlay compile compileFinal completedFSM composeText configClasses configFile configHierarchy configName configNull configProperties configSourceAddonList configSourceMod configSourceModList connectTerminalToUAV controlNull controlsGroupCtrl copyFromClipboard copyToClipboard copyWaypoints cos count countEnemy countFriendly countSide countType countUnknown create3DENComposition create3DENEntity createAgent createCenter createDialog createDiaryLink createDiaryRecord createDiarySubject createDisplay createGearDialog createGroup createGuardedPoint createLocation createMarker createMarkerLocal createMenu createMine createMissionDisplay createMPCampaignDisplay createSimpleObject createSimpleTask createSite createSoundSource createTask createTeam createTrigger createUnit createVehicle createVehicleCrew createVehicleLocal crew ctrlActivate ctrlAddEventHandler ctrlAngle ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlParentControlsGroup ctrlPosition ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ctrlSetActiveColor ctrlSetAngle ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ctrlSetFontHeightH6 ctrlSetFontHeightSecondary ctrlSetFontP ctrlSetFontPB ctrlSetFontSecondary ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ctrlSetModelScale ctrlSetPosition ctrlSetScale ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ctrlSetTooltipColorBox ctrlSetTooltipColorShade ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ctrlType ctrlVisible curatorAddons curatorCamera curatorCameraArea curatorCameraAreaCeiling curatorCoef curatorEditableObjects curatorEditingArea curatorEditingAreaType curatorMouseOver curatorPoints curatorRegisteredObjects curatorSelected curatorWaypointCost current3DENOperation currentChannel currentCommand currentMagazine currentMagazineDetail currentMagazineDetailTurret currentMagazineTurret currentMuzzle currentNamespace currentTask currentTasks currentThrowable currentVisionMode currentWaypoint currentWeapon currentWeaponMode currentWeaponTurret currentZeroing cursorObject cursorTarget customChat customRadio cutFadeOut cutObj cutRsc cutText damage date dateToNumber daytime deActivateKey debriefingText debugFSM debugLog deg delete3DENEntities deleteAt deleteCenter deleteCollection deleteEditorObject deleteGroup deleteIdentity deleteLocation deleteMarker deleteMarkerLocal deleteRange deleteResources deleteSite deleteStatus deleteTeam deleteVehicle deleteVehicleCrew deleteWaypoint detach detectedMines diag_activeMissionFSMs diag_activeScripts diag_activeSQFScripts diag_activeSQSScripts diag_captureFrame diag_captureSlowFrame diag_codePerformance diag_drawMode diag_enable diag_enabled diag_fps diag_fpsMin diag_frameNo diag_list diag_log diag_logSlowFrame diag_mergeConfigFile diag_recordTurretLimits diag_tickTime diag_toggle dialog diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled difficultyEnabledRTD difficultyOption direction directSay disableAI disableCollisionWith disableConversation disableDebriefingStats disableNVGEquipment disableRemoteSensors disableSerialization disableTIEquipment disableUAVConnectability disableUserInput displayAddEventHandler displayCtrl displayNull displayParent displayRemoveAllEventHandlers displayRemoveEventHandler displaySetEventHandler dissolveTeam distance distance2D distanceSqr distributionRegion do3DENAction doArtilleryFire doFire doFollow doFSM doGetOut doMove doorPhase doStop doSuppressiveFire doTarget doWatch drawArrow drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink drawLocation drawPolygon drawRectangle driver drop east echo edit3DENMissionAttributes editObject editorSetEventHandler effectiveCommander emptyPositions enableAI enableAIFeature enableAimPrecision enableAttack enableAudioFeature enableCamShake enableCaustics enableChannel enableCollisionWith enableCopilot enableDebriefingStats enableDiagLegend enableEndDialog enableEngineArtillery enableEnvironment enableFatigue enableGunLights enableIRLasers enableMimics enablePersonTurret enableRadio enableReload enableRopeAttach enableSatNormalOnDetail enableSaving enableSentences enableSimulation enableSimulationGlobal enableStamina enableTeamSwitch enableUAVConnectability enableUAVWaypoints enableVehicleCargo endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD enginesTorqueRTD entities estimatedEndServerTime estimatedTimeLeft evalObjectArgument everyBackpack everyContainer exec execEditorScript execFSM execVM exp expectedDestination exportJIPMessages eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound fadeSpeech failMission fillWeaponsFromPool find findCover findDisplay findEditorObject findEmptyPosition findEmptyPositionReady findNearestEnemy finishMissionInit finite fire fireAtTarget firstBackpack flag flagOwner flagSide flagTexture fleeing floor flyInHeight flyInHeightASL fog fogForecast fogParams forceAddUniform forcedMap forceEnd forceMap forceRespawn forceSpeed forceWalk forceWeaponFire forceWeatherChange forEachMember forEachMemberAgent forEachMemberTeam format formation formationDirection formationLeader formationMembers formationPosition formationTask formatText formLeader freeLook fromEditor fuel fullCrew gearIDCAmmoCount gearSlotAmmoCount gearSlotData get3DENActionState get3DENAttribute get3DENCamera get3DENConnections get3DENEntity get3DENEntityID get3DENGrid get3DENIconsVisible get3DENLayerEntities get3DENLinesVisible get3DENMissionAttribute get3DENMouseOver get3DENSelected getAimingCoef getAllHitPointsDamage getAllOwnedMines getAmmoCargo getAnimAimPrecision getAnimSpeedCoef getArray getArtilleryAmmo getArtilleryComputerSettings getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit getBackpackCargo getBleedingRemaining getBurningValue getCameraViewDirection getCargoIndex getCenterOfMass getClientState getClientStateNumber getConnectedUAV getCustomAimingCoef getDammage getDescription getDir getDirVisual getDLCs getEditorCamera getEditorMode getEditorObjectScope getElevationOffset getFatigue getFriend getFSMVariable getFuelCargo getGroupIcon getGroupIconParams getGroupIcons getHideFrom getHit getHitIndex getHitPointDamage getItemCargo getMagazineCargo getMarkerColor getMarkerPos getMarkerSize getMarkerType getMass getMissionConfig getMissionConfigValue getMissionDLCs getMissionLayerEntities getModelInfo getMousePosition getNumber getObjectArgument getObjectChildren getObjectDLC getObjectMaterials getObjectProxy getObjectTextures getObjectType getObjectViewDistance getOxygenRemaining getPersonUsedDLCs getPilotCameraDirection getPilotCameraPosition getPilotCameraRotation getPilotCameraTarget getPlayerChannel getPlayerScores getPlayerUID getPos getPosASL getPosASLVisual getPosASLW getPosATL getPosATLVisual getPosVisual getPosWorld getRelDir getRelPos getRemoteSensorsDisabled getRepairCargo getResolution getShadowDistance getShotParents getSlingLoad getSpeed getStamina getStatValue getSuppression getTerrainHeightASL getText getUnitLoadout getUnitTrait getVariable getVehicleCargo getWeaponCargo getWeaponSway getWPPos glanceAt globalChat globalRadio goggles goto group groupChat groupFromNetId groupIconSelectable groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits groupSelectUnit grpNull gunner gusts halt handgunItems handgunMagazine handgunWeapon handsHit hasInterface hasPilotCamera hasWeapon hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear hideBody hideObject hideObjectGlobal hideSelection hint hintC hintCadet hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity image importAllGroups importance in inArea inAreaArray incapacitatedState independent inflame inflamed inGameUISetEventHandler inheritsFrom initAmbientLife inPolygon inputAction inRangeOfArtillery insertEditorObject intersect is3DEN is3DENMultiplayer isAbleToBreathe isAgent isArray isAutoHoverOn isAutonomous isAutotest isBleeding isBurning isClass isCollisionLightOn isCopilotEnabled isDedicated isDLCAvailable isEngineOn isEqualTo isEqualType isEqualTypeAll isEqualTypeAny isEqualTypeArray isEqualTypeParams isFilePatchingEnabled isFlashlightOn isFlatEmpty isForcedWalk isFormationLeader isHidden isInRemainsCollector isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf isLightOn isLocalized isManualFire isMarkedForCollection isMultiplayer isMultiplayerSolo isNil isNull isNumber isObjectHidden isObjectRTD isOnRoad isPipEnabled isPlayer isRealTime isRemoteExecuted isRemoteExecutedJIP isServer isShowing3DIcons isSprintAllowed isStaminaEnabled isSteamMission isStreamFriendlyUIEnabled isText isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable isUAVConnected isUniformAllowed isVehicleCargo isWalking isWeaponDeployed isWeaponRested itemCargo items itemsWithMagazines join joinAs joinAsSilent joinSilent joinString kbAddDatabase kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic kbTell kbWasSaid keyImage keyName knowsAbout land landAt landResult language laserTarget lbAdd lbClear lbColor lbCurSel lbData lbDelete lbIsSelected lbPicture lbSelection lbSetColor lbSetCurSel lbSetData lbSetPicture lbSetPictureColor lbSetPictureColorDisabled lbSetPictureColorSelected lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetTooltip lbSetValue lbSize lbSort lbSortByValue lbText lbValue leader leaderboardDeInit leaderboardGetRows leaderboardInit leaveVehicle libraryCredits libraryDisclaimers lifeState lightAttachObject lightDetachObject lightIsOn lightnings limitSpeed linearConversion lineBreak lineIntersects lineIntersectsObjs lineIntersectsSurfaces lineIntersectsWith linkItem list listObjects ln lnbAddArray lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData lnbSetPicture lnbSetText lnbSetValue lnbSize lnbText lnbValue load loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine loadOverlay loadStatus loadUniform loadVest local localize locationNull locationPosition lock lockCameraTo lockCargo lockDriver locked lockedCargo lockedDriver lockedTurret lockIdentity lockTurret lockWP log logEntities logNetwork logNetworkTerminate lookAt lookAtPos magazineCargo magazines magazinesAllTurrets magazinesAmmo magazinesAmmoCargo magazinesAmmoFull magazinesDetail magazinesDetailBackpack magazinesDetailUniform magazinesDetailVest magazinesTurret magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit mapAnimDone mapCenterOnCamera mapGridPosition markAsFinishedOnSteam markerAlpha markerBrush markerColor markerDir markerPos markerShape markerSize markerText markerType max members menuAction menuAdd menuChecked menuClear menuCollapse menuData menuDelete menuEnable menuEnabled menuExpand menuHover menuPicture menuSetAction menuSetCheck menuSetData menuSetPicture menuSetValue menuShortcut menuShortcutText menuSize menuSort menuText menuURL menuValue min mineActive mineDetectedBy missionConfigFile missionDifficulty missionName missionNamespace missionStart missionVersion mod modelToWorld modelToWorldVisual modParams moonIntensity moonPhase morale move move3DENCamera moveInAny moveInCargo moveInCommander moveInDriver moveInGunner moveInTurret moveObjectToEnd moveOut moveTime moveTo moveToCompleted moveToFailed musicVolume name nameSound nearEntities nearestBuilding nearestLocation nearestLocations nearestLocationWithDubbing nearestObject nearestObjects nearestTerrainObjects nearObjects nearObjectsReady nearRoads nearSupplies nearTargets needReload netId netObjNull newOverlay nextMenuItemIndex nextWeatherChange nMenuItems not numberToDate objectCurators objectFromNetId objectParent objNull objStatus onBriefingGroup onBriefingNotes onBriefingPlan onBriefingTeamSwitch onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick onGroupIconOverEnter onGroupIconOverLeave onHCGroupSelectionChanged onMapSingleClick onPlayerConnected onPlayerDisconnected onPreloadFinished onPreloadStarted onShowNewObject onTeamSwitch openCuratorInterface openDLCPage openMap openYoutubeVideo opfor or orderGetIn overcast overcastForecast owner param params parseNumber parseText parsingNamespace particlesQuality pi pickWeaponPool pitch pixelGrid pixelGridBase pixelGridNoUIScale pixelH pixelW playableSlotsNumber playableUnits playAction playActionNow player playerRespawnTime playerSide playersNumber playGesture playMission playMove playMoveNow playMusic playScriptedMission playSound playSound3D position positionCameraToWorld posScreenToWorld posWorldToScreen ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ppEffectDestroy ppEffectEnable ppEffectEnabled ppEffectForceInNVG precision preloadCamera preloadObject preloadSound preloadTitleObj preloadTitleRsc preprocessFile preprocessFileLineNumbers primaryWeapon primaryWeaponItems primaryWeaponMagazine priority private processDiaryLink productVersion profileName profileNamespace profileNameSteam progressLoadingScreen progressPosition progressSetPosition publicVariable publicVariableClient publicVariableServer pushBack pushBackUnique putWeaponPool queryItemsPool queryMagazinePool queryWeaponPool rad radioChannelAdd radioChannelCreate radioChannelRemove radioChannelSetCallSign radioChannelSetLabel radioVolume rain rainbow random rank rankId rating rectangular registeredTasks registerTask reload reloadEnabled remoteControl remoteExec remoteExecCall remove3DENConnection remove3DENEventHandler remove3DENLayer removeAction removeAll3DENEventHandlers removeAllActions removeAllAssignedItems removeAllContainers removeAllCuratorAddons removeAllCuratorCameraAreas removeAllCuratorEditingAreas removeAllEventHandlers removeAllHandgunItems removeAllItems removeAllItemsWithMagazines removeAllMissionEventHandlers removeAllMPEventHandlers removeAllMusicEventHandlers removeAllOwnedMines removeAllPrimaryWeaponItems removeAllWeapons removeBackpack removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea removeCuratorEditableObjects removeCuratorEditingArea removeDrawIcon removeDrawLinks removeEventHandler removeFromRemainsCollector removeGoggles removeGroupIcon removeHandgunItem removeHeadgear removeItem removeItemFromBackpack removeItemFromUniform removeItemFromVest removeItems removeMagazine removeMagazineGlobal removeMagazines removeMagazinesTurret removeMagazineTurret removeMenuItem removeMissionEventHandler removeMPEventHandler removeMusicEventHandler removeOwnedMine removePrimaryWeaponItem removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit removeTeamMember removeUniform removeVest removeWeapon removeWeaponGlobal removeWeaponTurret requiredVersion resetCamShake resetSubgroupDirection resistance resize resources respawnVehicle restartEditorCamera reveal revealMine reverse reversedMouseY roadAt roadsConnectedTo roleDescription ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ropeCreate ropeCut ropeDestroy ropeDetach ropeEndPosition ropeLength ropes ropeUnwind ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY save3DENInventory saveGame saveIdentity saveJoysticks saveOverlay saveProfileNamespace saveStatus saveVar savingEnabled say say2D say3D scopeName score scoreSide screenshot screenToWorld scriptDone scriptName scriptNull scudState secondaryWeapon secondaryWeaponItems secondaryWeaponMagazine select selectBestPlaces selectDiarySubject selectedEditorObjects selectEditorObject selectionNames selectionPosition selectLeader selectMax selectMin selectNoPlayer selectPlayer selectRandom selectWeapon selectWeaponTurret sendAUMessage sendSimpleCommand sendTask sendTaskResult sendUDPMessage serverCommand serverCommandAvailable serverCommandExecutable serverName serverTime set set3DENAttribute set3DENAttributes set3DENGrid set3DENIconsVisible set3DENLayer set3DENLinesVisible set3DENMissionAttributes set3DENModelsVisible set3DENObjectType set3DENSelected setAccTime setAirportSide setAmmo setAmmoCargo setAnimSpeedCoef setAperture setApertureNew setArmoryPoints setAttributes setAutonomous setBehaviour setBleedingRemaining setCameraInterest setCamShakeDefParams setCamShakeParams setCamUseTi setCaptive setCenterOfMass setCollisionLight setCombatMode setCompassOscillation setCuratorCameraAreaCeiling setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost setCurrentChannel setCurrentTask setCurrentWaypoint setCustomAimCoef setDamage setDammage setDate setDebriefingText setDefaultCamera setDestination setDetailMapBlendPars setDir setDirection setDrawIcon setDropInterval setEditorMode setEditorObjectScope setEffectCondition setFace setFaceAnimation setFatigue setFlagOwner setFlagSide setFlagTexture setFog setFormation setFormationTask setFormDir setFriend setFromEditor setFSMVariable setFuel setFuelCargo setGroupIcon setGroupIconParams setGroupIconsSelectable setGroupIconsVisible setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind setHit setHitIndex setHitPointDamage setHorizonParallaxCoef setHUDMovementLevels setIdentity setImportance setLeader setLightAmbient setLightAttenuation setLightBrightness setLightColor setLightDayLight setLightFlareMaxDistance setLightFlareSize setLightIntensity setLightnings setLightUseFlare setLocalWindParams setMagazineTurretAmmo setMarkerAlpha setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition setMusicEffect setMusicEventHandler setName setNameSound setObjectArguments setObjectMaterial setObjectMaterialGlobal setObjectProxy setObjectTexture setObjectTextureGlobal setObjectViewDistance setOvercast setOwner setOxygenRemaining setParticleCircle setParticleClass setParticleFire setParticleParams setParticleRandom setPilotCameraDirection setPilotCameraRotation setPilotCameraTarget setPilotLight setPiPEffect setPitch setPlayable setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW setPosATL setPosition setPosWorld setRadioMsg setRain setRainbow setRandomLip setRank setRectangular setRepairCargo setShadowDistance setShotParents setSide setSimpleTaskAlwaysVisible setSimpleTaskCustomData setSimpleTaskDescription setSimpleTaskDestination setSimpleTaskTarget setSimpleTaskType setSimulWeatherLayers setSize setSkill setSlingLoad setSoundEffect setSpeaker setSpeech setSpeedMode setStamina setStaminaScheme setStatValue setSuppression setSystemOfUnits setTargetAge setTaskResult setTaskState setTerrainGrid setText setTimeMultiplier setTitleEffect setTriggerActivation setTriggerArea setTriggerStatements setTriggerText setTriggerTimeout setTriggerType setType setUnconscious setUnitAbility setUnitLoadout setUnitPos setUnitPosWeak setUnitRank setUnitRecoilCoefficient setUnitTrait setUnloadInCombat setUserActionText setVariable setVectorDir setVectorDirAndUp setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor setVehicleCargo setVehicleId setVehicleLock setVehiclePosition setVehicleTiPars setVehicleVarName setVelocity setVelocityTransformation setViewDistance setVisibleIfTreeCollapsed setWaves setWaypointBehaviour setWaypointCombatMode setWaypointCompletionRadius setWaypointDescription setWaypointForceBehaviour setWaypointFormation setWaypointHousePosition setWaypointLoiterRadius setWaypointLoiterType setWaypointName setWaypointPosition setWaypointScript setWaypointSpeed setWaypointStatements setWaypointTimeout setWaypointType setWaypointVisible setWeaponReloadingTime setWind setWindDir setWindForce setWindStr setWPPos show3DIcons showChat showCinemaBorder showCommandingMenu showCompass showCuratorCompass showGPS showHUD showLegend showMap shownArtilleryComputer shownChat shownCompass shownCuratorCompass showNewEditorObject shownGPS shownHUD shownMap shownPad shownRadio shownScoretable shownUAVFeed shownWarrant shownWatch showPad showRadio showScoretable showSubtitles showUAVFeed showWarrant showWatch showWaypoint showWaypoints side sideAmbientLife sideChat sideEmpty sideEnemy sideFriendly sideLogic sideRadio sideUnknown simpleTasks simulationEnabled simulCloudDensity simulCloudOcclusion simulInClouds simulWeatherSync sin size sizeOf skill skillFinal skipTime sleep sliderPosition sliderRange sliderSetPosition sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown soldierMagazines someAmmo sort soundVolume spawn speaker speed speedMode splitString sqrt squadParams stance startLoadingScreen step stop stopEngineRTD stopped str sunOrMoon supportInfo suppressFor surfaceIsWater surfaceNormal surfaceType swimInDepth switchableUnits switchAction switchCamera switchGesture switchLight switchMove synchronizedObjects synchronizedTriggers synchronizedWaypoints synchronizeObjectsAdd synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint systemChat systemOfUnits tan targetKnowledge targetsAggregate targetsQuery taskAlwaysVisible taskChildren taskCompleted taskCustomData taskDescription taskDestination taskHint taskMarkerOffset taskNull taskParent taskResult taskState taskType teamMember teamMemberNull teamName teams teamSwitch teamSwitchEnabled teamType terminate terrainIntersect terrainIntersectASL text textLog textLogFormat tg time timeMultiplier titleCut titleFadeOut titleObj titleRsc titleText toArray toFixed toLower toString toUpper triggerActivated triggerActivation triggerArea triggerAttachedVehicle triggerAttachObject triggerAttachVehicle triggerStatements triggerText triggerTimeout triggerTimeoutCurrent triggerType turretLocal turretOwner turretUnit tvAdd tvClear tvCollapse tvCount tvCurSel tvData tvDelete tvExpand tvPicture tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetPictureColorDisabled tvSetPictureColorSelected tvSetPictureRight tvSetPictureRightColor tvSetPictureRightColorDisabled tvSetPictureRightColorSelected tvSetText tvSetTooltip tvSetValue tvSort tvSortByValue tvText tvTooltip tvValue type typeName typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem unassignTeam unassignVehicle underwater uniform uniformContainer uniformItems uniformMagazines unitAddons unitAimPosition unitAimPositionVisual unitBackpack unitIsUAV unitPos unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem unlockAchievement unregisterTask updateDrawIcon updateMenuItem updateObjectTree useAISteeringComponent useAudioTimeForMoves vectorAdd vectorCos vectorCrossProduct vectorDiff vectorDir vectorDirVisual vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo vectorMagnitude vectorMagnitudeSqr vectorMultiply vectorNormalized vectorUp vectorUpVisual vehicle vehicleCargoEnabled vehicleChat vehicleRadio vehicles vehicleVarName velocity velocityModelSpace verifySignature vest vestContainer vestItems vestMagazines viewDistance visibleCompass visibleGPS visibleMap visiblePosition visiblePositionASL visibleScoretable visibleWatch waves waypointAttachedObject waypointAttachedVehicle waypointAttachObject waypointAttachVehicle waypointBehaviour waypointCombatMode waypointCompletionRadius waypointDescription waypointForceBehaviour waypointFormation waypointHousePosition waypointLoiterRadius waypointLoiterType waypointName waypointPosition waypoints waypointScript waypointsEnabledUAV waypointShow waypointSpeed waypointStatements waypointTimeout waypointTimeoutCurrent waypointType waypointVisible weaponAccessories weaponAccessoriesCargo weaponCargo weaponDirection weaponInertia weaponLowered weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret weightRTD west WFSideText wind",literal:"true false nil"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.NUMBER_MODE,{className:"variable",begin:/\b_+[a-zA-Z_]\w*/},{className:"title",begin:/[a-zA-Z][a-zA-Z0-9]+_fnc_\w*/},{className:"string",variants:[{begin:'"',end:'"',contains:[{begin:'""',relevance:0}]},{begin:"'",end:"'",contains:[{begin:"''",relevance:0}]}]},t.preprocessor],illegal:/#/}}},function(e,t){e.exports=function(e){var t=e.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*#]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",end:/;/,endsWithParent:!0,lexemes:/[\w\.]+/,keywords:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE,{begin:'""'}]},{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t]},e.C_BLOCK_COMMENT_MODE,t]}}},function(e,t){e.exports=function(e){return{contains:[e.HASH_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE,lexemes:e.UNDERSCORE_IDENT_RE,keywords:{name:"for in while repeat until if then else",symbol:"bernoulli bernoulli_logit binomial binomial_logit beta_binomial hypergeometric categorical categorical_logit ordered_logistic neg_binomial neg_binomial_2 neg_binomial_2_log poisson poisson_log multinomial normal exp_mod_normal skew_normal student_t cauchy double_exponential logistic gumbel lognormal chi_square inv_chi_square scaled_inv_chi_square exponential inv_gamma weibull frechet rayleigh wiener pareto pareto_type_2 von_mises uniform multi_normal multi_normal_prec multi_normal_cholesky multi_gp multi_gp_cholesky multi_student_t gaussian_dlm_obs dirichlet lkj_corr lkj_corr_cholesky wishart inv_wishart","selector-tag":"int real vector simplex unit_vector ordered positive_ordered row_vector matrix cholesky_factor_corr cholesky_factor_cov corr_matrix cov_matrix",title:"functions model data parameters quantities transformed generated",literal:"true false"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0}]}}},function(e,t){e.exports=function(e){return{aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"symbol",begin:/`[a-zA-Z0-9_]+'/},{className:"variable",begin:/\$\{?[a-zA-Z0-9_]+\}?/},{className:"string",variants:[{begin:'`"[^\r\n]*?"\''},{begin:'"[^\r\n"]*"'}]},{className:"built_in",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)"}]},e.COMMENT("^[ \t]*\\*.*$",!1),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}}},function(e,t){e.exports=function(e){return{aliases:["p21","step","stp"],case_insensitive:!0,lexemes:"[A-Z_][A-Z0-9_.]*",keywords:{keyword:"HEADER ENDSEC DATA"},contains:[{className:"meta",begin:"ISO-10303-21;",relevance:10},{className:"meta",begin:"END-ISO-10303-21;",relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT("/\\*\\*!","\\*/"),e.C_NUMBER_MODE,e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"symbol",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}]}}},function(e,t){e.exports=function(e){var t={className:"variable",begin:"\\$"+e.IDENT_RE},n={className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},r="[\\.\\s\\n\\[\\:,]";return{aliases:["styl"],case_insensitive:!1,keywords:"if else for in",illegal:"("+["\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)","(\\bdef\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"].join("|")+")",contains:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*"+r,returnBegin:!0,contains:[{className:"selector-class",begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*"}]},{begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*"+r,returnBegin:!0,contains:[{className:"selector-id",begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*"}]},{begin:"\\b("+["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"].join("|")+")"+r,returnBegin:!0,contains:[{className:"selector-tag",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"}]},{begin:"&?:?:\\b("+["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"].join("|")+")"+r},{begin:"@("+["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"].join("|")+")\\b"},t,e.CSS_NUMBER_MODE,e.NUMBER_MODE,{className:"function",begin:"^[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[n,t,e.APOS_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse().join("|")+")\\b",starts:{end:/;|$/,contains:[n,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE,e.NUMBER_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/\./,relevance:0}}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[{className:"string",begin:"\\[\n(multipart)?",end:"\\]\n"},{className:"string",begin:"\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z"},{className:"string",begin:"(\\+|-)\\d+"},{className:"keyword",relevance:10,variants:[{begin:"^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?"},{begin:"^progress(:?)(\\s+)?(pop|push)?"},{begin:"^tags:"},{begin:"^time:"}]}]}}},function(e,t){e.exports=function(e){var t={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),r={className:"subst",begin:/\\\(/,end:"\\)",keywords:t,contains:[]},i={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0},a=e.inherit(e.QUOTE_STRING_MODE,{contains:[r,e.BACKSLASH_ESCAPE]});return r.contains=[i],{keywords:t,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},i,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:t,contains:["self",i,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:t,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}},function(e,t){e.exports=function(e){return{contains:[{className:"comment",begin:/\$noop\(/,end:/\)/,contains:[{begin:/\(/,end:/\)/,contains:["self",{begin:/\\./}]}],relevance:10},{className:"keyword",begin:/\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,end:/\(/,excludeEnd:!0},{className:"variable",begin:/%[_a-zA-Z0-9:]*/,end:"%"},{className:"symbol",begin:/\\./}]}}},function(e,t){e.exports=function(e){var t="[a-zA-Z_][\\w\\-]*",n={className:"attr",variants:[{begin:"^[ \\-]*"+t+":"},{begin:'^[ \\-]*"'+t+'":'},{begin:"^[ \\-]*'"+t+"':"}]},r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]};return{case_insensitive:!0,aliases:["yml","YAML","yaml"],contains:[n,{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>] *$",returnEnd:!0,contains:r.contains,end:n.variants[0].begin},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!!"+e.UNDERSCORE_IDENT_RE},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"^ *-",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:"true false yes no null",keywords:{literal:"true false yes no null"}},e.C_NUMBER_MODE,r]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"meta",variants:[{begin:"^TAP version (\\d+)$"},{begin:"^1\\.\\.(\\d+)$"}]},{begin:"(s+)?---$",end:"\\.\\.\\.$",subLanguage:"yaml",relevance:0},{className:"number",begin:" (\\d+) "},{className:"symbol",variants:[{begin:"^ok"},{begin:"^not ok"}]}]}}},function(e,t){e.exports=function(e){return{aliases:["tk"],keywords:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",contains:[e.COMMENT(";[ \\t]*#","$"),e.COMMENT("^[ \\t]*#","$"),{beginKeywords:"proc",end:"[\\{]",excludeEnd:!0,contains:[{className:"title",begin:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"[ \\t\\n\\r]",endsWithParent:!0,excludeEnd:!0}]},{excludeEnd:!0,variants:[{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",end:"[^a-zA-Z0-9_\\}\\$]"},{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},{className:"number",variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]}]}}},function(e,t){e.exports=function(e){var t={className:"tag",begin:/\\/,relevance:0,contains:[{className:"name",variants:[{begin:/[a-zA-Zа-яА-я]+[*]?/},{begin:/[^a-zA-Zа-яА-я0-9]/}],starts:{endsWithParent:!0,relevance:0,contains:[{className:"string",variants:[{begin:/\[/,end:/\]/},{begin:/\{/,end:/\}/}]},{begin:/\s*=\s*/,endsWithParent:!0,relevance:0,contains:[{className:"number",begin:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{contains:[t,{className:"formula",contains:[t],relevance:0,variants:[{begin:/\$\$/,end:/\$\$/},{begin:/\$/,end:/\$/}]},e.COMMENT("%","$",{relevance:0})]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:"bool byte i16 i32 i64 double string binary",literal:"true false"},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:"bool byte i16 i32 i64 double string binary",contains:["self"]}]}}},function(e,t){e.exports=function(e){var t={className:"number",begin:"[1-9][0-9]*",relevance:0},n={className:"symbol",begin:":[^\\]]+"};return{keywords:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET PROG ATTR MN POS",literal:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},contains:[{className:"built_in",begin:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER| TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",end:"\\]",contains:["self",t,n]},{className:"built_in",begin:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",end:"\\]",contains:["self",t,e.QUOTE_STRING_MODE,n]},{className:"keyword",begin:"/(PROG|ATTR|MN|POS|END)\\b"},{className:"keyword",begin:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{className:"keyword",begin:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{className:"number",begin:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",relevance:0},e.COMMENT("//","[;$]"),e.COMMENT("!","[;$]"),e.COMMENT("--eg:","$"),e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"'"},e.C_NUMBER_MODE,{className:"variable",begin:"\\$[A-Za-z0-9_]+"}]}}},function(e,t){e.exports=function(e){var t="attribute block constant cycle date dump include max min parent random range source template_from_string",n={beginKeywords:t,keywords:{name:t},relevance:0,contains:[{className:"params",begin:"\\(",end:"\\)"}]},r={begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",contains:[n]},i="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return i=i+" "+i.split(" ").map(function(e){return"end"+e}).join(" "),{aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[e.COMMENT(/\{#/,/#}/),{className:"template-tag",begin:/\{%/,end:/%}/,contains:[{className:"name",begin:/\w+/,keywords:i,starts:{endsWithParent:!0,contains:[r,n],relevance:0}}]},{className:"template-variable",begin:/\{\{/,end:/}}/,contains:["self",r,n]}]}}},function(e,t){e.exports=function(e){var t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"};return{aliases:["ts"],keywords:t,contains:[{className:"meta",begin:/^\s*['"]use strict['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+e.IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.IDENT_RE},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]}]}]}],relevance:0},{className:"function",begin:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/["'\(]/}],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0,contains:["self",{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/["'\(]/}]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0},{className:"meta",begin:"@[A-Za-z]+"}]}}},function(e,t){e.exports=function(e){return{keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object Gtk Posix",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface namespace",end:"{",excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[e.UNDERSCORE_TITLE_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:"meta",begin:"^#",end:"$",relevance:2}]}}},function(e,t){e.exports=function(e){return{aliases:["vb"],case_insensitive:!0,keywords:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},illegal:"//|{|}|endif|gosub|variant|wend",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT("'","$",{returnBegin:!0,contains:[{className:"doctag",begin:"'''|\x3c!--|--\x3e",contains:[e.PHRASAL_WORDS_MODE]},{className:"doctag",begin:"",contains:[e.PHRASAL_WORDS_MODE]}]}),e.C_NUMBER_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elseif end region externalsource"}}]}}},function(e,t){e.exports=function(e){return{aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},illegal:"//",contains:[e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),e.COMMENT(/'/,/$/,{relevance:0}),e.C_NUMBER_MODE]}}},function(e,t){e.exports=function(e){return{subLanguage:"xml",contains:[{begin:"<%",end:"%>",subLanguage:"vbscript"}]}}},function(e,t){e.exports=function(e){return{aliases:["v","sv","svh"],case_insensitive:!1,keywords:{keyword:"accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor",literal:"null",built_in:"$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale $bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat $realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson $assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff $assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk $fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control $coverage_get $coverage_save $set_coverage_db_name $rose $stable $past $rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display $coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename $unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow $floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning $dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh $tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random $dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson $dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array $async$nand$array $async$or$array $async$nor$array $sync$and$array $sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf $async$and$plane $async$nand$plane $async$or$plane $async$nor$plane $sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system $display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo $write $readmemb $readmemh $writememh $value$plusargs $dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit $writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb $dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall $dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo $fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh $swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb $fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat $sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror"},lexemes:/[\w\$]+/,contains:[e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"number",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"\\b((\\d+'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\B(('(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)"},{begin:"\\b([0-9_])+",relevance:0}]},{className:"variable",variants:[{begin:"#\\((?!parameter).+\\)"},{begin:"\\.\\w+",relevance:0}]},{className:"meta",begin:"`",end:"$",keywords:{"meta-keyword":"define __FILE__ __LINE__ begin_keywords celldefine default_nettype define else elsif end_keywords endcelldefine endif ifdef ifndef include line nounconnected_drive pragma resetall timescale unconnected_drive undef undefineall"},relevance:0}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert assume assume_guarantee attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor",built_in:"boolean bit character integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_logic std_logic_vector unsigned signed boolean_vector integer_vector std_ulogic std_ulogic_vector unresolved_unsigned u_unsigned unresolved_signed u_signedreal_vector time_vector",literal:"false true note warning error failure line text side width"},illegal:"{",contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT("--","$"),e.QUOTE_STRING_MODE,{className:"number",begin:"\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)",relevance:0},{className:"string",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[e.BACKSLASH_ESCAPE]},{className:"symbol",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[e.BACKSLASH_ESCAPE]}]}}},function(e,t){e.exports=function(e){return{lexemes:/[!#@\w]+/,keywords:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp"},illegal:/;/,contains:[e.NUMBER_MODE,e.APOS_STRING_MODE,{className:"string",begin:/"(\\"|\n\\|[^"\n])*"/},e.COMMENT('"',"$"),{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[e.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"symbol",begin:/<[\w-]+>/}]}}},function(e,t){e.exports=function(e){return{case_insensitive:!0,lexemes:"[.%]?"+e.IDENT_RE,keywords:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[e.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}},function(e,t){e.exports=function(e){var t={keyword:"if then else do while until for loop import with is as where when by data constant integer real text name boolean symbol infix prefix postfix block tree",literal:"true false nil",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts"},n={className:"string",begin:'"',end:'"',illegal:"\\n"},r={beginKeywords:"import",end:"$",keywords:t,contains:[n]},i={className:"function",begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,keywords:t}})]};return{aliases:["tao"],lexemes:/[a-zA-Z][a-zA-Z0-9_?]*/,keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,{className:"string",begin:"'",end:"'",illegal:"\\n"},{className:"string",begin:"<<",end:">>"},i,r,{className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?"},e.NUMBER_MODE]}}},function(e,t){e.exports=function(e){var t={begin:"{",end:"}"},n=[{begin:/\$[a-zA-Z0-9\-]+/},{className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doctag",begin:"@\\w+"}]},{className:"meta",begin:"%\\w+"},t];return t.contains=n,{aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:"for let if while then else return where group by xquery encoding versionmodule namespace boundary-space preserve strip default collation base-uri orderingcopy-namespaces order declare import schema namespace function option in allowing emptyat tumbling window sliding window start when only end when previous next stable ascendingdescending empty greatest least some every satisfies switch case typeswitch try catch andor to union intersect instance of treat as castable cast map array delete insert intoreplace value rename copy modify update",literal:"false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute"},contains:n}}},function(e,t){e.exports=function(e){var t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{aliases:["zep"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",contains:[e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE}),{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[e.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",e.C_BLOCK_COMMENT_MODE,t,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},t,n]}}},function(e,t,n){}])}); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db29sTURFZGl0b3Ivd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0Nvb2xNREVkaXRvci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9zcmMvZWRpdG9yL3Rvb2xiYXJIYW5kbGUuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vc3JjL3V0aWwvVXRpbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9zcmMvZWRpdG9yL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL21vZGUvb3ZlcmxheS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9mb2xkL3htbC1mb2xkLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGNvZGUuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9zcmMvZWRpdG9yL2NyZWF0ZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vc3JjL2VkaXRvci9sYW5nL2VuLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL3NyYy9lZGl0b3IvY29kZW1pcnJvci5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL3htbC94bWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbW9kZS9tZXRhLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL21vZGUvZ2ZtL2dmbS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9lZGl0L2Nsb3NldGFnLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL2VkaXQvY29udGludWVsaXN0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2VicmFja2V0cy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9zY3JvbGwvYW5ub3RhdGVzY3JvbGxiYXIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRndXR0ZXIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZm9sZC9pbmRlbnQtZm9sZC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci9hZGRvbi9mb2xkL2JyYWNlLWZvbGQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9tYXJrZWQvbGliL21hcmtlZC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2luZGV4LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2hpZ2hsaWdodC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvMWMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FibmYuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FjY2Vzc2xvZy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hZGEuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FwYWNoZS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXBwbGVzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NwcC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJkdWluby5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXJtYXNtLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94bWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2FzY2lpZG9jLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hc3BlY3RqLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaG90a2V5LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9hdXRvaXQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2F2cmFzbS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvYXdrLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9heGFwdGEuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2guanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Jhc2ljLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ibmYuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2JyYWluZnVjay5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2FsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jYXBucHJvdG8uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NleWxvbi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY2xlYW4uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2Nsb2p1cmUtcmVwbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY21ha2UuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NvZmZlZXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY29xLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jb3MuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2NybXNoLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcnlzdGFsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jcy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvY3NwLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9jc3MuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2QuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hcmtkb3duLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kYXJ0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kZWxwaGkuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RpZmYuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RqYW5nby5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZG5zLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb2NrZXJmaWxlLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kb3MuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2RzY29uZmlnLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9kdHMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2R1c3QuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VibmYuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VsaXhpci5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZWxtLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWJ5LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2VybGFuZy1yZXBsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9lcmxhbmcuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2V4Y2VsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9maXguanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZsaXguanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZvcnRyYW4uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2ZzaGFycC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2Ftcy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ2F1c3MuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2djb2RlLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9naGVya2luLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nbHNsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9nby5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ29sby5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvZ3JhZGxlLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ncm9vdnkuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhbmRsZWJhcnMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hhc2tlbGwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hheGUuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2hzcC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvaHRtbGJhcnMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h0dHAuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2h5LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmZvcm03LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9pbmkuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2lycGY5MC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamF2YXNjcmlwdC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvamJvc3MtY2xpLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qc29uLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9qdWxpYS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvanVsaWEtcmVwbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMva290bGluLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9sYXNzby5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGRpZi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGVhZi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGVzcy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGlzcC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbGl2ZWNvZGVzZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xpdmVzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xsdm0uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL2xzbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbHVhLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tYWtlZmlsZS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF0aGVtYXRpY2EuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21hdGxhYi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbWF4aW1hLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tZWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21lcmN1cnkuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21pcHNhc20uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL21pemFyLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wZXJsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tb2pvbGljaW91cy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbW9ua2V5LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9tb29uc2NyaXB0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uMXFsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uZ2lueC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvbmltcm9kLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9uaXguanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL25zaXMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29iamVjdGl2ZWMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL29jYW1sLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9vcGVuc2NhZC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvb3h5Z2VuZS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGFyc2VyMy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcGYuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3BocC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcG9ueS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcG93ZXJzaGVsbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvY2Vzc2luZy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvZmlsZS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHJvbG9nLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wcm90b2J1Zi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcHVwcGV0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9wdXJlYmFzaWMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3B5dGhvbi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcW1sLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yaWIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3JvYm9jb25mLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9yb3V0ZXJvcy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvcnNsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydWxlc2xhbmd1YWdlLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9ydXN0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2FsYS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc2NoZW1lLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zY2lsYWIuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3Njc3MuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NoZWxsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWFsaS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc21hbGx0YWxrLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zbWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3NxZi5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3FsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGFuLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdGF0YS5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvc3RlcDIxLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy9zdHlsdXMuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N1YnVuaXQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3N3aWZ0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90YWdnZXJzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3lhbWwuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RhcC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdGNsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy90ZXguanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3RocmlmdC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdHAuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R3aWcuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3R5cGVzY3JpcHQuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3ZhbGEuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3ZibmV0LmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy92YnNjcmlwdC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmJzY3JpcHQtaHRtbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmVyaWxvZy5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmhkbC5qcyIsIndlYnBhY2s6Ly9Db29sTURFZGl0b3IvLi9ub2RlX21vZHVsZXMvaGlnaGxpZ2h0LmpzL2xpYi9sYW5ndWFnZXMvdmltLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94ODZhc20uanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3hsLmpzIiwid2VicGFjazovL0Nvb2xNREVkaXRvci8uL25vZGVfbW9kdWxlcy9oaWdobGlnaHQuanMvbGliL2xhbmd1YWdlcy94cXVlcnkuanMiLCJ3ZWJwYWNrOi8vQ29vbE1ERWRpdG9yLy4vbm9kZV9tb2R1bGVzL2hpZ2hsaWdodC5qcy9saWIvbGFuZ3VhZ2VzL3plcGhpci5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJ3aW5kb3ciLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJnZWNrbyIsInRlc3QiLCJpZV91cHRvMTAiLCJpZV8xMXVwIiwiZXhlYyIsImVkZ2UiLCJpZSIsImllX3ZlcnNpb24iLCJkb2N1bWVudCIsImRvY3VtZW50TW9kZSIsIndlYmtpdCIsInF0d2Via2l0IiwiY2hyb21lIiwicHJlc3RvIiwic2FmYXJpIiwidmVuZG9yIiwibWFjX2dlTW91bnRhaW5MaW9uIiwicGhhbnRvbSIsImlvcyIsImFuZHJvaWQiLCJtb2JpbGUiLCJtYWMiLCJjaHJvbWVPUyIsIndpbmRvd3MiLCJwcmVzdG9fdmVyc2lvbiIsIm1hdGNoIiwiTnVtYmVyIiwiZmxpcEN0cmxDbWQiLCJjYXB0dXJlUmlnaHRDbGljayIsImNsYXNzVGVzdCIsImNscyIsIlJlZ0V4cCIsInJhbmdlIiwicm1DbGFzcyIsIm5vZGUiLCJjdXJyZW50IiwiY2xhc3NOYW1lIiwiYWZ0ZXIiLCJzbGljZSIsImluZGV4IiwibGVuZ3RoIiwicmVtb3ZlQ2hpbGRyZW4iLCJlIiwiY291bnQiLCJjaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGQiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGRyZW5BbmRBZGQiLCJwYXJlbnQiLCJhcHBlbmRDaGlsZCIsImVsdCIsInRhZyIsImNvbnRlbnQiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJlbHRQIiwic2V0QXR0cmlidXRlIiwiY29udGFpbnMiLCJjaGlsZCIsIm5vZGVUeXBlIiwicGFyZW50Tm9kZSIsImhvc3QiLCJhY3RpdmVFbHQiLCJhY3RpdmVFbGVtZW50IiwiYm9keSIsInNoYWRvd1Jvb3QiLCJhZGRDbGFzcyIsImpvaW5DbGFzc2VzIiwiYSIsImIiLCJhcyIsInNwbGl0IiwiY3JlYXRlUmFuZ2UiLCJzdGFydCIsImVuZCIsImVuZE5vZGUiLCJzZXRFbmQiLCJzZXRTdGFydCIsImNyZWF0ZVRleHRSYW5nZSIsIm1vdmVUb0VsZW1lbnRUZXh0IiwiY29sbGFwc2UiLCJtb3ZlRW5kIiwibW92ZVN0YXJ0Iiwic2VsZWN0SW5wdXQiLCJzZWxlY3QiLCJmIiwiYXJncyIsIkFycmF5IiwiYXJndW1lbnRzIiwiYXBwbHkiLCJjb3B5T2JqIiwib2JqIiwidGFyZ2V0Iiwib3ZlcndyaXRlIiwicHJvcCIsImNvdW50Q29sdW1uIiwic3RyaW5nIiwidGFiU2l6ZSIsInN0YXJ0SW5kZXgiLCJzdGFydFZhbHVlIiwic2VhcmNoIiwibmV4dFRhYiIsImluZGV4T2YiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsIl9lIiwiRGVsYXllZCIsInRoaXMiLCJpZCIsImFycmF5Iiwic2V0IiwibXMiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic2Nyb2xsZXJHYXAiLCJQYXNzIiwidG9TdHJpbmciLCJzZWxfZG9udFNjcm9sbCIsInNjcm9sbCIsInNlbF9tb3VzZSIsIm9yaWdpbiIsInNlbF9tb3ZlIiwiZmluZENvbHVtbiIsImdvYWwiLCJwb3MiLCJjb2wiLCJza2lwcGVkIiwiTWF0aCIsIm1pbiIsInNwYWNlU3RycyIsInNwYWNlU3RyIiwicHVzaCIsImxzdCIsImFyciIsIm1hcCIsIm91dCIsIm5vdGhpbmciLCJjcmVhdGVPYmoiLCJiYXNlIiwicHJvcHMiLCJpbnN0Iiwibm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIiLCJpc1dvcmRDaGFyQmFzaWMiLCJjaCIsInRvVXBwZXJDYXNlIiwidG9Mb3dlckNhc2UiLCJpc1dvcmRDaGFyIiwiaGVscGVyIiwic291cmNlIiwiaXNFbXB0eSIsImV4dGVuZGluZ0NoYXJzIiwiaXNFeHRlbmRpbmdDaGFyIiwiY2hhckNvZGVBdCIsInNraXBFeHRlbmRpbmdDaGFycyIsInN0ciIsImRpciIsImNoYXJBdCIsImZpbmRGaXJzdCIsInByZWQiLCJmcm9tIiwidG8iLCJtaWRGIiwibWlkIiwiY2VpbCIsImZsb29yIiwiZ2V0TGluZSIsImRvYyIsImZpcnN0Iiwic2l6ZSIsIkVycm9yIiwiY2h1bmsiLCJsaW5lcyIsImNoaWxkcmVuIiwic3oiLCJjaHVua1NpemUiLCJnZXRCZXR3ZWVuIiwibGluZSIsIml0ZXIiLCJ0ZXh0IiwiZ2V0TGluZXMiLCJ1cGRhdGVMaW5lSGVpZ2h0IiwiaGVpZ2h0IiwiZGlmZiIsImxpbmVObyIsImN1ciIsIm5vIiwibGluZUF0SGVpZ2h0IiwiaCIsIm91dGVyIiwiaSQxIiwibGgiLCJpc0xpbmUiLCJsaW5lTnVtYmVyRm9yIiwib3B0aW9ucyIsIlN0cmluZyIsImxpbmVOdW1iZXJGb3JtYXR0ZXIiLCJmaXJzdExpbmVOdW1iZXIiLCJQb3MiLCJzdGlja3kiLCJjbXAiLCJlcXVhbEN1cnNvclBvcyIsImNvcHlQb3MiLCJ4IiwibWF4UG9zIiwibWluUG9zIiwiY2xpcExpbmUiLCJtYXgiLCJjbGlwUG9zIiwibGFzdCIsImxpbmVsZW4iLCJjbGlwVG9MZW4iLCJjbGlwUG9zQXJyYXkiLCJzYXdSZWFkT25seVNwYW5zIiwic2F3Q29sbGFwc2VkU3BhbnMiLCJNYXJrZWRTcGFuIiwibWFya2VyIiwiZ2V0TWFya2VkU3BhbkZvciIsInNwYW5zIiwic3BhbiIsInJlbW92ZU1hcmtlZFNwYW4iLCJzdHJldGNoU3BhbnNPdmVyQ2hhbmdlIiwiY2hhbmdlIiwiZnVsbCIsIm9sZEZpcnN0IiwibWFya2VkU3BhbnMiLCJvbGRMYXN0Iiwic3RhcnRDaCIsImVuZENoIiwiaXNJbnNlcnQiLCJvbGQiLCJudyIsInN0YXJ0c0JlZm9yZSIsImluY2x1c2l2ZUxlZnQiLCJ0eXBlIiwiaW5zZXJ0TGVmdCIsImVuZHNBZnRlciIsImluY2x1c2l2ZVJpZ2h0IiwibWFya2VkU3BhbnNCZWZvcmUiLCJtYXJrZWRTcGFuc0FmdGVyIiwic2FtZUxpbmUiLCJvZmZzZXQiLCJmb3VuZCIsInNwYW4kMSIsImZvdW5kJDEiLCJjbGVhckVtcHR5U3BhbnMiLCJuZXdNYXJrZXJzIiwiZ2FwTWFya2VycyIsImdhcCIsImkkMiIsImkkMyIsImNsZWFyV2hlbkVtcHR5Iiwic3BsaWNlIiwiZGV0YWNoTWFya2VkU3BhbnMiLCJkZXRhY2hMaW5lIiwiYXR0YWNoTWFya2VkU3BhbnMiLCJhdHRhY2hMaW5lIiwiZXh0cmFMZWZ0IiwiZXh0cmFSaWdodCIsImNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzIiwibGVuRGlmZiIsImFQb3MiLCJmaW5kIiwiYlBvcyIsImZyb21DbXAiLCJ0b0NtcCIsImNvbGxhcHNlZFNwYW5BdFNpZGUiLCJzcHMiLCJzcCIsImNvbGxhcHNlZCIsImNvbGxhcHNlZFNwYW5BdFN0YXJ0IiwiY29sbGFwc2VkU3BhbkF0RW5kIiwiY29sbGFwc2VkU3BhbkFyb3VuZCIsImNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UiLCJsaW5lTm8kJDEiLCJ2aXN1YWxMaW5lIiwibWVyZ2VkIiwidmlzdWFsTGluZU5vIiwibGluZU4iLCJ2aXMiLCJ2aXN1YWxMaW5lRW5kTm8iLCJsYXN0TGluZSIsImxpbmVJc0hpZGRlbiIsIndpZGdldE5vZGUiLCJsaW5lSXNIaWRkZW5Jbm5lciIsImhlaWdodEF0TGluZSIsImxpbmVPYmoiLCJsaW5lTGVuZ3RoIiwibGVuIiwiZmluZE1heExpbmUiLCJjbSIsImRpc3BsYXkiLCJtYXhMaW5lIiwibWF4TGluZUxlbmd0aCIsIm1heExpbmVDaGFuZ2VkIiwiYmlkaU90aGVyIiwiZ2V0QmlkaVBhcnRBdCIsIm9yZGVyIiwiYmlkaU9yZGVyaW5nIiwibG93VHlwZXMiLCJhcmFiaWNUeXBlcyIsImNoYXJUeXBlIiwiY29kZSIsImJpZGlSRSIsImlzTmV1dHJhbCIsImlzU3Ryb25nIiwiY291bnRzQXNMZWZ0IiwiY291bnRzQXNOdW0iLCJCaWRpU3BhbiIsImxldmVsIiwiZGlyZWN0aW9uIiwib3V0ZXJUeXBlIiwidHlwZXMiLCJwcmV2IiwidHlwZSQxIiwicHJldiQxIiwidHlwZSQyIiwiaSQ0IiwidHlwZSQzIiwicmVwbGFjZSIsImoiLCJpJDUiLCJjdXIkMSIsInR5cGUkNCIsImkkNiIsImVuZCQxIiwiYmVmb3JlIiwicmVwbGFjZSQxIiwiaiQxIiwiaSQ3IiwiYXQiLCJqJDIiLCJuc3RhcnQiLCJ1bnNoaWZ0IiwicmV2ZXJzZSIsImdldE9yZGVyIiwibm9IYW5kbGVycyIsIm9uIiwiZW1pdHRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsIm1hcCQkMSIsIl9oYW5kbGVycyIsImNvbmNhdCIsImdldEhhbmRsZXJzIiwib2ZmIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50Iiwic2lnbmFsIiwiaGFuZGxlcnMiLCJzaWduYWxET01FdmVudCIsIm92ZXJyaWRlIiwicHJldmVudERlZmF1bHQiLCJkZWZhdWx0UHJldmVudGVkIiwiZV9kZWZhdWx0UHJldmVudGVkIiwiY29kZW1pcnJvcklnbm9yZSIsInNpZ25hbEN1cnNvckFjdGl2aXR5IiwiY3Vyc29yQWN0aXZpdHkiLCJjdXJPcCIsImN1cnNvckFjdGl2aXR5SGFuZGxlcnMiLCJoYXNIYW5kbGVyIiwiZXZlbnRNaXhpbiIsImN0b3IiLCJlX3ByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJlX3N0b3BQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImVfc3RvcCIsImVfdGFyZ2V0Iiwic3JjRWxlbWVudCIsImVfYnV0dG9uIiwid2hpY2giLCJidXR0b24iLCJjdHJsS2V5IiwiendzcFN1cHBvcnRlZCIsImJhZEJpZGlSZWN0cyIsImRyYWdBbmREcm9wIiwiZGl2IiwiemVyb1dpZHRoRWxlbWVudCIsIm1lYXN1cmUiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRXaWR0aCIsImhhc0JhZEJpZGlSZWN0cyIsInR4dCIsInIwIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicjEiLCJsZWZ0IiwicmlnaHQiLCJzcGxpdExpbmVzQXV0byIsInJlc3VsdCIsIm5sIiwicnQiLCJoYXNTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJ0ZSIsInJhbmdlJCQxIiwib3duZXJEb2N1bWVudCIsInNlbGVjdGlvbiIsInBhcmVudEVsZW1lbnQiLCJjb21wYXJlRW5kUG9pbnRzIiwiaGFzQ29weUV2ZW50Iiwib25jb3B5IiwiYmFkWm9vbWVkUmVjdHMiLCJtb2RlcyIsIm1pbWVNb2RlcyIsInJlc29sdmVNb2RlIiwic3BlYyIsImdldE1vZGUiLCJtZmFjdG9yeSIsIm1vZGVPYmoiLCJtb2RlRXh0ZW5zaW9ucyIsImV4dHMiLCJoZWxwZXJUeXBlIiwibW9kZVByb3BzIiwicHJvcCQxIiwiZXh0ZW5kTW9kZSIsInByb3BlcnRpZXMiLCJjb3B5U3RhdGUiLCJzdGF0ZSIsIm5zdGF0ZSIsInZhbCIsImlubmVyTW9kZSIsImluZm8iLCJzdGFydFN0YXRlIiwiYTEiLCJhMiIsIlN0cmluZ1N0cmVhbSIsImxpbmVPcmFjbGUiLCJsYXN0Q29sdW1uUG9zIiwibGFzdENvbHVtblZhbHVlIiwibGluZVN0YXJ0IiwiZW9sIiwic29sIiwicGVlayIsInVuZGVmaW5lZCIsIm5leHQiLCJlYXQiLCJlYXRXaGlsZSIsImVhdFNwYWNlIiwic2tpcFRvRW5kIiwic2tpcFRvIiwiYmFja1VwIiwiY29sdW1uIiwiaW5kZW50YXRpb24iLCJwYXR0ZXJuIiwiY29uc3VtZSIsImNhc2VJbnNlbnNpdGl2ZSIsImNhc2VkIiwic3Vic3RyIiwiaGlkZUZpcnN0Q2hhcnMiLCJpbm5lciIsImxvb2tBaGVhZCIsIm9yYWNsZSIsImJhc2VUb2tlbiIsIlNhdmVkQ29udGV4dCIsIkNvbnRleHQiLCJtYXhMb29rQWhlYWQiLCJiYXNlVG9rZW5zIiwiYmFzZVRva2VuUG9zIiwiaGlnaGxpZ2h0TGluZSIsImNvbnRleHQiLCJmb3JjZVRvRW5kIiwic3QiLCJtb2RlR2VuIiwibGluZUNsYXNzZXMiLCJydW5Nb2RlIiwibG9vcCIsIm92ZXJsYXkiLCJvdmVybGF5cyIsImlfZW5kIiwib3BhcXVlIiwic3R5bGVzIiwiY2xhc3NlcyIsImJnQ2xhc3MiLCJ0ZXh0Q2xhc3MiLCJnZXRMaW5lU3R5bGVzIiwidXBkYXRlRnJvbnRpZXIiLCJnZXRDb250ZXh0QmVmb3JlIiwicmVzZXRTdGF0ZSIsIm1heEhpZ2hsaWdodExlbmd0aCIsInN0YXRlQWZ0ZXIiLCJzYXZlIiwic3R5bGVDbGFzc2VzIiwiaGlnaGxpZ2h0RnJvbnRpZXIiLCJtb2RlRnJvbnRpZXIiLCJwcmVjaXNlIiwibWluaW5kZW50IiwibWlubGluZSIsImxpbSIsImluZGVudGVkIiwiZmluZFN0YXJ0TGluZSIsInNhdmVkIiwiZnJvbVNhdmVkIiwicHJvY2Vzc0xpbmUiLCJ2aWV3RnJvbSIsInZpZXdUbyIsIm5leHRMaW5lIiwic3RhcnRBdCIsInN0cmVhbSIsImNhbGxCbGFua0xpbmUiLCJyZWFkVG9rZW4iLCJibGFua0xpbmUiLCJ0b2tlbiIsImNvcHkiLCJUb2tlbiIsInRha2VUb2tlbiIsImFzQXJyYXkiLCJ0b2tlbnMiLCJleHRyYWN0TGluZUNsYXNzZXMiLCJvdXRwdXQiLCJsaW5lQ2xhc3MiLCJmbGF0dGVuU3BhbnMiLCJjdXJTdGFydCIsImN1clN0eWxlIiwiYWRkTW9kZUNsYXNzIiwibU5hbWUiLCJMaW5lIiwiZXN0aW1hdGVIZWlnaHQiLCJjbGVhblVwTGluZSIsInN0eWxlVG9DbGFzc0NhY2hlIiwic3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSIsImludGVycHJldFRva2VuU3R5bGUiLCJjYWNoZSIsImJ1aWxkTGluZUNvbnRlbnQiLCJsaW5lVmlldyIsImJ1aWxkZXIiLCJwcmUiLCJ0cmFpbGluZ1NwYWNlIiwic3BsaXRTcGFjZXMiLCJnZXRPcHRpb24iLCJyZXN0IiwiYWRkVG9rZW4iLCJidWlsZFRva2VuIiwiYnVpbGRUb2tlbkJhZEJpZGkiLCJhbGxvd0Zyb250aWVyVXBkYXRlIiwiZXh0ZXJuYWxNZWFzdXJlZCIsImluc2VydExpbmVDb250ZW50IiwibWFwcyIsImNhY2hlcyIsImxhc3RDaGlsZCIsInF1ZXJ5U2VsZWN0b3IiLCJkZWZhdWx0U3BlY2lhbENoYXJQbGFjZWhvbGRlciIsInRpdGxlIiwic3RhcnRTdHlsZSIsImVuZFN0eWxlIiwiY3NzIiwiZGlzcGxheVRleHQiLCJ0cmFpbGluZ0JlZm9yZSIsInNwYWNlQmVmb3JlIiwic3BlY2lhbCIsInNwZWNpYWxDaGFycyIsIm11c3RXcmFwIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImxhc3RJbmRleCIsInR4dCQxIiwidGFiV2lkdGgiLCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyIiwiZnVsbFN0eWxlIiwicGFydCIsImJ1aWxkQ29sbGFwc2VkU3BhbiIsImlnbm9yZVdpZGdldCIsIndpZGdldCIsImlucHV0IiwibmVlZHNDb250ZW50QXR0cmlidXRlIiwic2V0VW5lZGl0YWJsZSIsImFsbFRleHQiLCJzcGFuU3R5bGUiLCJzcGFuRW5kU3R5bGUiLCJzcGFuU3RhcnRTdHlsZSIsIm5leHRDaGFuZ2UiLCJJbmZpbml0eSIsImZvdW5kQm9va21hcmtzIiwiZW5kU3R5bGVzIiwidXB0byIsInRva2VuVGV4dCIsIkxpbmVWaWV3IiwidmlzdWFsTGluZUNvbnRpbnVlZCIsImhpZGRlbiIsImJ1aWxkVmlld0FycmF5IiwibmV4dFBvcyIsInZpZXciLCJvcGVyYXRpb25Hcm91cCIsIm9ycGhhbkRlbGF5ZWRDYWxsYmFja3MiLCJzaWduYWxMYXRlciIsImxpc3QiLCJkZWxheWVkQ2FsbGJhY2tzIiwiZmlyZU9ycGhhbkRlbGF5ZWQiLCJkZWxheWVkIiwidXBkYXRlTGluZUZvckNoYW5nZXMiLCJkaW1zIiwiY2hhbmdlcyIsInVwZGF0ZUxpbmVUZXh0IiwidXBkYXRlTGluZUd1dHRlciIsInVwZGF0ZUxpbmVDbGFzc2VzIiwidXBkYXRlTGluZVdpZGdldHMiLCJlbnN1cmVMaW5lV3JhcHBlZCIsInJlcGxhY2VDaGlsZCIsInpJbmRleCIsImdldExpbmVDb250ZW50IiwiZXh0IiwiYnVpbHQiLCJiYWNrZ3JvdW5kIiwid3JhcCIsImluc2VydEJlZm9yZSIsInVwZGF0ZUxpbmVCYWNrZ3JvdW5kIiwid3JhcENsYXNzIiwiZ3V0dGVyIiwiZ3V0dGVyQmFja2dyb3VuZCIsImd1dHRlckNsYXNzIiwiZml4ZWRHdXR0ZXIiLCJmaXhlZFBvcyIsImd1dHRlclRvdGFsV2lkdGgiLCJtYXJrZXJzIiwiZ3V0dGVyTWFya2VycyIsImxpbmVOdW1iZXJzIiwid3JhcCQxIiwiZ3V0dGVyV3JhcCIsImxpbmVOdW1iZXIiLCJndXR0ZXJMZWZ0IiwiayIsImd1dHRlcnMiLCJndXR0ZXJXaWR0aCIsImFsaWduYWJsZSIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0TGluZVdpZGdldHMiLCJidWlsZExpbmVFbGVtZW50IiwiaW5zZXJ0TGluZVdpZGdldHNGb3IiLCJhbGxvd0Fib3ZlIiwid2lkZ2V0cyIsIndzIiwiaGFuZGxlTW91c2VFdmVudHMiLCJwb3NpdGlvbkxpbmVXaWRnZXQiLCJhYm92ZSIsIm5vSFNjcm9sbCIsIndpZHRoIiwid3JhcHBlcldpZHRoIiwiY292ZXJHdXR0ZXIiLCJwYWRkaW5nTGVmdCIsInBvc2l0aW9uIiwibWFyZ2luTGVmdCIsIndpZGdldEhlaWdodCIsInBhcmVudFN0eWxlIiwid3JhcHBlciIsImNsaWVudFdpZHRoIiwiZXZlbnRJbldpZGdldCIsImdldEF0dHJpYnV0ZSIsInNpemVyIiwibW92ZXIiLCJwYWRkaW5nVG9wIiwibGluZVNwYWNlIiwib2Zmc2V0VG9wIiwicGFkZGluZ1ZlcnQiLCJwYWRkaW5nSCIsImNhY2hlZFBhZGRpbmdIIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImN1cnJlbnRTdHlsZSIsImRhdGEiLCJwYXJzZUludCIsInBhZGRpbmdSaWdodCIsImlzTmFOIiwic2Nyb2xsR2FwIiwibmF0aXZlQmFyV2lkdGgiLCJkaXNwbGF5V2lkdGgiLCJzY3JvbGxlciIsImJhcldpZHRoIiwiZGlzcGxheUhlaWdodCIsImNsaWVudEhlaWdodCIsImJhckhlaWdodCIsIm1hcEZyb21MaW5lVmlldyIsIm1lYXN1cmVDaGFyIiwiYmlhcyIsIm1lYXN1cmVDaGFyUHJlcGFyZWQiLCJwcmVwYXJlTWVhc3VyZUZvckxpbmUiLCJmaW5kVmlld0ZvckxpbmUiLCJmaW5kVmlld0luZGV4IiwiZ2V0RGltZW5zaW9ucyIsImZvcmNlVXBkYXRlIiwibGluZU1lYXN1cmUiLCJ1cGRhdGVFeHRlcm5hbE1lYXN1cmVtZW50IiwicmVjdCIsImhhc0hlaWdodHMiLCJwcmVwYXJlZCIsInZhckhlaWdodCIsIndyYXBwaW5nIiwibGluZVdyYXBwaW5nIiwiY3VyV2lkdGgiLCJoZWlnaHRzIiwicmVjdHMiLCJnZXRDbGllbnRSZWN0cyIsImFicyIsImJvdHRvbSIsInRvcCIsImVuc3VyZUxpbmVIZWlnaHRzIiwicGxhY2UiLCJub2RlQW5kT2Zmc2V0SW5MaW5lTWFwIiwiY292ZXJTdGFydCIsImNvdmVyRW5kIiwiZ2V0VXNlZnVsUmVjdCIsInNjcmVlbiIsImxvZ2ljYWxYRFBJIiwiZGV2aWNlWERQSSIsIm5vcm1hbCIsImZyb21SYW5nZSIsImhhc0JhZFpvb21lZFJlY3RzIiwic2NhbGVYIiwic2NhbGVZIiwibG9naWNhbFlEUEkiLCJkZXZpY2VZRFBJIiwibWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyIsInJTcGFuIiwiY2hhcldpZHRoIiwibnVsbFJlY3QiLCJydG9wIiwicmJvdCIsImJvdCIsImJvZ3VzIiwic2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSIsInJib3R0b20iLCJtZWFzdXJlQ2hhcklubmVyIiwibWVhc3VyZVRleHQiLCJtU3RhcnQiLCJtRW5kIiwiY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvciIsImNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUiLCJleHRlcm5hbE1lYXN1cmUiLCJjbGVhckNhY2hlcyIsImNhY2hlZENoYXJXaWR0aCIsImNhY2hlZFRleHRIZWlnaHQiLCJsaW5lTnVtQ2hhcnMiLCJwYWdlU2Nyb2xsWCIsInBhZ2VYT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsInBhZ2VTY3JvbGxZIiwibWFyZ2luVG9wIiwicGFnZVlPZmZzZXQiLCJzY3JvbGxUb3AiLCJ3aWRnZXRUb3BIZWlnaHQiLCJpbnRvQ29vcmRTeXN0ZW0iLCJpbmNsdWRlV2lkZ2V0cyIsInlPZmYiLCJ2aWV3T2Zmc2V0IiwibE9mZiIsInhPZmYiLCJmcm9tQ29vcmRTeXN0ZW0iLCJjb29yZHMiLCJsb2NhbEJveCIsImxpbmVTcGFjZUJveCIsImNoYXJDb29yZHMiLCJjdXJzb3JDb29yZHMiLCJwcmVwYXJlZE1lYXN1cmUiLCJnZXRCaWRpIiwicGFydFBvcyIsImludmVydCIsIm90aGVyIiwiZXN0aW1hdGVDb29yZHMiLCJQb3NXaXRoSW5mbyIsIm91dHNpZGUiLCJ4UmVsIiwiY29vcmRzQ2hhciIsInkiLCJjb29yZHNDaGFySW5uZXIiLCJyYW5nZUVuZCIsIndyYXBwZWRMaW5lRXh0ZW50IiwiYmVnaW4iLCJ3cmFwcGVkTGluZUV4dGVudENoYXIiLCJ0YXJnZXRUb3AiLCJib3hJc0FmdGVyIiwiYm94Iiwid2lkZ2V0SGVpZ2h0JCQxIiwibHRyIiwiX2xpbmVObyIsInJlZiIsImNsb3Nlc3REaXN0IiwiZW5kWCIsImRpc3QiLCJiYXNlWCIsImNoQXJvdW5kIiwiYm94QXJvdW5kIiwiYXRMZWZ0IiwiYXRTdGFydCIsInRleHRIZWlnaHQiLCJhbmNob3IiLCJjbGllbnRMZWZ0Iiwib2Zmc2V0TGVmdCIsImNvbXBlbnNhdGVGb3JIU2Nyb2xsIiwidGgiLCJwZXJMaW5lIiwid2lkZ2V0c0hlaWdodCIsImVzdGltYXRlTGluZUhlaWdodHMiLCJlc3QiLCJlc3RIZWlnaHQiLCJwb3NGcm9tTW91c2UiLCJsaWJlcmFsIiwiZm9yUmVjdCIsInNwYWNlIiwiY2xpZW50WCIsImNsaWVudFkiLCJjb2xEaWZmIiwicm91bmQiLCJ1cGRhdGVTZWxlY3Rpb24iLCJzaG93U2VsZWN0aW9uIiwicHJlcGFyZVNlbGVjdGlvbiIsInByaW1hcnkiLCJjdXJGcmFnbWVudCIsImN1cnNvcnMiLCJzZWxGcmFnbWVudCIsInNlbCIsInJhbmdlcyIsInByaW1JbmRleCIsImVtcHR5Iiwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmciLCJkcmF3U2VsZWN0aW9uQ3Vyc29yIiwiaGVhZCIsImRyYXdTZWxlY3Rpb25SYW5nZSIsImN1cnNvciIsImN1cnNvckhlaWdodCIsIm90aGVyQ3Vyc29yIiwiY21wQ29vcmRzIiwiZnJhZ21lbnQiLCJwYWRkaW5nIiwibGVmdFNpZGUiLCJyaWdodFNpZGUiLCJzaXplcldpZHRoIiwiZG9jTFRSIiwiYWRkIiwiZHJhd0ZvckxpbmUiLCJmcm9tQXJnIiwidG9BcmciLCJsaW5lTGVuIiwid3JhcFgiLCJzaWRlIiwiZXh0ZW50IiwiaXRlcmF0ZUJpZGlTZWN0aW9ucyIsImZyb21Qb3MiLCJ0b1BvcyIsIm9wZW5TdGFydCIsIm9wZW5FbmQiLCJvcGVuTGVmdCIsIm9wZW5SaWdodCIsInRvcExlZnQiLCJ0b3BSaWdodCIsImJvdExlZnQiLCJib3RSaWdodCIsInNGcm9tIiwic1RvIiwiZnJvbUxpbmUiLCJ0b0xpbmUiLCJzaW5nbGVWTGluZSIsImxlZnRFbmQiLCJyaWdodFN0YXJ0IiwicmVzdGFydEJsaW5rIiwiZm9jdXNlZCIsImNsZWFySW50ZXJ2YWwiLCJibGlua2VyIiwiY3Vyc29yRGl2IiwidmlzaWJpbGl0eSIsImN1cnNvckJsaW5rUmF0ZSIsInNldEludGVydmFsIiwiZW5zdXJlRm9jdXMiLCJmb2N1cyIsIm9uRm9jdXMiLCJkZWxheUJsdXJFdmVudCIsImRlbGF5aW5nQmx1ckV2ZW50Iiwib25CbHVyIiwicmVhZE9ubHkiLCJzZWxGb3JDb250ZXh0TWVudSIsInJlc2V0IiwicmVjZWl2ZWRGb2N1cyIsInNoaWZ0IiwidXBkYXRlSGVpZ2h0c0luVmlld3BvcnQiLCJwcmV2Qm90dG9tIiwibGluZURpdiIsInVwZGF0ZVdpZGdldEhlaWdodCIsInciLCJ2aXNpYmxlTGluZXMiLCJ2aWV3cG9ydCIsImVuc3VyZSIsImVuc3VyZUZyb20iLCJlbnN1cmVUbyIsImFsaWduSG9yaXpvbnRhbGx5IiwiYWxpZ25XaWRnZXRzIiwiY29tcCIsImd1dHRlclciLCJhbGlnbiIsIm1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoIiwiaW5uZXJXIiwibGluZUd1dHRlciIsImxpbmVOdW1Jbm5lcldpZHRoIiwibGluZU51bVdpZHRoIiwidXBkYXRlR3V0dGVyU3BhY2UiLCJjYWxjdWxhdGVTY3JvbGxQb3MiLCJzbmFwTWFyZ2luIiwic2NyZWVudG9wIiwiZG9jQm90dG9tIiwiYXRUb3AiLCJhdEJvdHRvbSIsIm5ld1RvcCIsInNjcmVlbmxlZnQiLCJzY3JlZW53IiwidG9vV2lkZSIsImFkZFRvU2Nyb2xsVG9wIiwicmVzb2x2ZVNjcm9sbFRvUG9zIiwiZW5zdXJlQ3Vyc29yVmlzaWJsZSIsImdldEN1cnNvciIsInNjcm9sbFRvUG9zIiwibWFyZ2luIiwiY3Vyc29yU2Nyb2xsTWFyZ2luIiwic2Nyb2xsVG9Db29yZHMiLCJzY3JvbGxUb0Nvb3Jkc1JhbmdlIiwic1BvcyIsInVwZGF0ZVNjcm9sbFRvcCIsInVwZGF0ZURpc3BsYXlTaW1wbGUiLCJzZXRTY3JvbGxUb3AiLCJzdGFydFdvcmtlciIsImZvcmNlU2Nyb2xsIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsYmFycyIsInNldFNjcm9sbExlZnQiLCJpc1Njcm9sbGVyIiwic2Nyb2xsV2lkdGgiLCJtZWFzdXJlRm9yU2Nyb2xsYmFycyIsImRvY0giLCJ2aWV3SGVpZ2h0Iiwidmlld1dpZHRoIiwiYmFyTGVmdCIsImRvY0hlaWdodCIsIk5hdGl2ZVNjcm9sbGJhcnMiLCJ2ZXJ0IiwiaG9yaXoiLCJ0YWJJbmRleCIsImNoZWNrZWRaZXJvV2lkdGgiLCJtaW5IZWlnaHQiLCJtaW5XaWR0aCIsInVwZGF0ZSIsIm5lZWRzSCIsIm5lZWRzViIsInNXaWR0aCIsInRvdGFsSGVpZ2h0IiwidG90YWxXaWR0aCIsInplcm9XaWR0aEhhY2siLCJkaXNhYmxlSG9yaXoiLCJlbmFibGVaZXJvV2lkdGhCYXIiLCJkaXNhYmxlVmVydCIsInBvaW50ZXJFdmVudHMiLCJiYXIiLCJkZWxheSIsIm1heWJlRGlzYWJsZSIsImVsdCQkMSIsImVsZW1lbnRGcm9tUG9pbnQiLCJjbGVhciIsIk51bGxTY3JvbGxiYXJzIiwidXBkYXRlU2Nyb2xsYmFycyIsInN0YXJ0V2lkdGgiLCJzdGFydEhlaWdodCIsInVwZGF0ZVNjcm9sbGJhcnNJbm5lciIsInNpemVzIiwicGFkZGluZ0JvdHRvbSIsImhlaWdodEZvcmNlciIsImJvcmRlckJvdHRvbSIsInNjcm9sbGJhckZpbGxlciIsImNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyIiwiZ3V0dGVyRmlsbGVyIiwic2Nyb2xsYmFyTW9kZWwiLCJuYXRpdmUiLCJudWxsIiwiaW5pdFNjcm9sbGJhcnMiLCJzY3JvbGxiYXJTdHlsZSIsImF4aXMiLCJuZXh0T3BJZCIsInN0YXJ0T3BlcmF0aW9uIiwidmlld0NoYW5nZWQiLCJ1cGRhdGVJbnB1dCIsInR5cGluZyIsImNoYW5nZU9ianMiLCJjdXJzb3JBY3Rpdml0eUNhbGxlZCIsInNlbGVjdGlvbkNoYW5nZWQiLCJ1cGRhdGVNYXhMaW5lIiwib3AiLCJvcHMiLCJvd25zR3JvdXAiLCJwdXNoT3BlcmF0aW9uIiwiZW5kT3BlcmF0aW9uIiwiZW5kQ2IiLCJncm91cCIsImNhbGxiYWNrcyIsImZpcmVDYWxsYmFja3NGb3JPcHMiLCJmaW5pc2hPcGVyYXRpb24iLCJlbmRPcGVyYXRpb25fUjEiLCJlbmRPcGVyYXRpb25fVzEiLCJlbmRPcGVyYXRpb25fUjIiLCJlbmRPcGVyYXRpb25fVzIiLCJlbmRPcGVyYXRpb25fZmluaXNoIiwiZW5kT3BlcmF0aW9ucyIsInNjcm9sbGJhcnNDbGlwcGVkIiwibWFyZ2luQm90dG9tIiwiYm9yZGVyUmlnaHRXaWR0aCIsIm1heWJlQ2xpcFNjcm9sbGJhcnMiLCJtdXN0VXBkYXRlIiwiRGlzcGxheVVwZGF0ZSIsInVwZGF0ZWREaXNwbGF5IiwidXBkYXRlRGlzcGxheUlmTmVlZGVkIiwiYmFyTWVhc3VyZSIsImFkanVzdFdpZHRoVG8iLCJtYXhTY3JvbGxMZWZ0IiwicHJlcGFyZWRTZWxlY3Rpb24iLCJ0YWtlRm9jdXMiLCJzZXREb2N1bWVudEhlaWdodCIsInBvc3RVcGRhdGVEaXNwbGF5Iiwid2hlZWxTdGFydFgiLCJ3aGVlbFN0YXJ0WSIsImxpbWl0IiwiY2hhbmdlZCIsImVuZENvb3JkcyIsInNjcm9sbFBvcyIsInN0YXJ0VG9wIiwic3RhcnRMZWZ0Iiwic2Nyb2xsUG9zSW50b1ZpZXciLCJkb1Njcm9sbCIsImlubmVySGVpZ2h0Iiwic2Nyb2xsTm9kZSIsInNjcm9sbEludG9WaWV3IiwibWF5YmVTY3JvbGxXaW5kb3ciLCJtYXliZUhpZGRlbk1hcmtlcnMiLCJ1bmhpZGRlbiIsIm1heWJlVW5oaWRkZW5NYXJrZXJzIiwiZmluaXNoIiwicnVuSW5PcCIsIm9wZXJhdGlvbiIsIm1ldGhvZE9wIiwiZG9jTWV0aG9kT3AiLCJyZWdDaGFuZ2UiLCJsZW5kaWZmIiwidXBkYXRlTGluZU51bWJlcnMiLCJyZXNldFZpZXciLCJjdXQiLCJ2aWV3Q3V0dGluZ1BvaW50IiwiY3V0JDEiLCJjdXRUb3AiLCJjdXRCb3QiLCJyZWdMaW5lQ2hhbmdlIiwib2xkTiIsIm5ld04iLCJjb3VudERpcnR5VmlldyIsImRpcnR5IiwidGltZSIsImhpZ2hsaWdodCIsImhpZ2hsaWdodFdvcmtlciIsIkRhdGUiLCJ3b3JrVGltZSIsImNoYW5nZWRMaW5lcyIsIm9sZFN0eWxlcyIsImhpZ2hsaWdodGVkIiwib2xkQ2xzIiwibmV3Q2xzIiwiaXNjaGFuZ2UiLCJ3b3JrRGVsYXkiLCJmb3JjZSIsInZpc2libGUiLCJlZGl0b3JJc0hpZGRlbiIsIndyYXBwZXJIZWlnaHQiLCJvbGREaXNwbGF5V2lkdGgiLCJldmVudHMiLCJyZW5kZXJlZFZpZXciLCJ2aWV3cG9ydE1hcmdpbiIsImRpZmZlcmVudCIsImxhc3RXcmFwSGVpZ2h0IiwibGFzdFdyYXBXaWR0aCIsImFkanVzdFZpZXciLCJ0b1VwZGF0ZSIsInNlbFNuYXBzaG90IiwiaGFzRm9jdXMiLCJhY3RpdmUiLCJhbmNob3JOb2RlIiwiZXh0ZW5kIiwiYW5jaG9yT2Zmc2V0IiwiZm9jdXNOb2RlIiwiZm9jdXNPZmZzZXQiLCJzZWxlY3Rpb25TbmFwc2hvdCIsInVwZGF0ZU51bWJlcnNGcm9tIiwiY29udGFpbmVyIiwicm0iLCJjdXJyZW50V2hlZWxUYXJnZXQiLCJ1cGRhdGVOdW1iZXIiLCJwYXRjaERpc3BsYXkiLCJzbmFwc2hvdCIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwicmVzdG9yZVNlbGVjdGlvbiIsInNlbGVjdGlvbkRpdiIsInJlcG9ydGVkVmlld0Zyb20iLCJyZXBvcnRlZFZpZXdUbyIsInVwZGF0ZUd1dHRlcnMiLCJzcGVjcyIsImdFbHQiLCJzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMiLCJ3aGVlbFNhbXBsZXMiLCJ3aGVlbFBpeGVsc1BlclVuaXQiLCJ3aGVlbEV2ZW50RGVsdGEiLCJkeCIsIndoZWVsRGVsdGFYIiwiZHkiLCJ3aGVlbERlbHRhWSIsImRldGFpbCIsIkhPUklaT05UQUxfQVhJUyIsIlZFUlRJQ0FMX0FYSVMiLCJ3aGVlbERlbHRhIiwid2hlZWxFdmVudFBpeGVscyIsImRlbHRhIiwib25TY3JvbGxXaGVlbCIsImNhblNjcm9sbFgiLCJjYW5TY3JvbGxZIiwicGl4ZWxzIiwid2hlZWxEWCIsIndoZWVsRFkiLCJtb3ZlZFgiLCJtb3ZlZFkiLCJzYW1wbGUiLCJTZWxlY3Rpb24iLCJlcXVhbHMiLCJoZXJlIiwidGhlcmUiLCJkZWVwQ29weSIsIlJhbmdlIiwic29tZXRoaW5nU2VsZWN0ZWQiLCJub3JtYWxpemVTZWxlY3Rpb24iLCJwcmltIiwic29ydCIsImludiIsInNpbXBsZVNlbGVjdGlvbiIsImNoYW5nZUVuZCIsImFkanVzdEZvckNoYW5nZSIsImNvbXB1dGVTZWxBZnRlckNoYW5nZSIsIm9mZnNldFBvcyIsImxvYWRNb2RlIiwibW9kZU9wdGlvbiIsInJlc2V0TW9kZVN0YXRlIiwiaXNXaG9sZUxpbmVVcGRhdGUiLCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmUiLCJ1cGRhdGVEb2MiLCJlc3RpbWF0ZUhlaWdodCQkMSIsInNwYW5zRm9yIiwidXBkYXRlTGluZSIsImxpbmVzRm9yIiwiZmlyc3RMaW5lIiwibGFzdFRleHQiLCJsYXN0U3BhbnMiLCJubGluZXMiLCJpbnNlcnQiLCJyZW1vdmUiLCJhZGRlZCIsImFkZGVkJDEiLCJhZGRlZCQyIiwibGlua2VkRG9jcyIsInNoYXJlZEhpc3RPbmx5IiwicHJvcGFnYXRlIiwic2tpcCIsInNoYXJlZEhpc3QiLCJsaW5rZWQiLCJyZWwiLCJzaGFyZWQiLCJhdHRhY2hEb2MiLCJzZXREaXJlY3Rpb25DbGFzcyIsIkhpc3RvcnkiLCJzdGFydEdlbiIsImRvbmUiLCJ1bmRvbmUiLCJ1bmRvRGVwdGgiLCJsYXN0TW9kVGltZSIsImxhc3RTZWxUaW1lIiwibGFzdE9wIiwibGFzdFNlbE9wIiwibGFzdE9yaWdpbiIsImxhc3RTZWxPcmlnaW4iLCJnZW5lcmF0aW9uIiwibWF4R2VuZXJhdGlvbiIsImhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlIiwiaGlzdENoYW5nZSIsImF0dGFjaExvY2FsU3BhbnMiLCJjbGVhclNlbGVjdGlvbkV2ZW50cyIsInBvcCIsImFkZENoYW5nZVRvSGlzdG9yeSIsInNlbEFmdGVyIiwib3BJZCIsImhpc3QiLCJoaXN0b3J5IiwiaGlzdG9yeUV2ZW50RGVsYXkiLCJsYXN0Q2hhbmdlRXZlbnQiLCJwdXNoU2VsZWN0aW9uVG9IaXN0b3J5IiwiYWRkU2VsZWN0aW9uVG9IaXN0b3J5Iiwic2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZCIsImNsZWFyUmVkbyIsImRlc3QiLCJleGlzdGluZyIsInJlbW92ZUNsZWFyZWRTcGFucyIsImV4cGxpY2l0bHlDbGVhcmVkIiwibWVyZ2VPbGRTcGFucyIsImdldE9sZFNwYW5zIiwic3RyZXRjaGVkIiwib2xkQ3VyIiwic3RyZXRjaEN1ciIsImNvcHlIaXN0b3J5QXJyYXkiLCJuZXdHcm91cCIsImluc3RhbnRpYXRlU2VsIiwiZXZlbnQiLCJuZXdDaGFuZ2VzIiwiZXh0ZW5kUmFuZ2UiLCJwb3NCZWZvcmUiLCJleHRlbmRTZWxlY3Rpb24iLCJzZXRTZWxlY3Rpb24iLCJleHRlbmRTZWxlY3Rpb25zIiwiaGVhZHMiLCJuZXdTZWwiLCJyZXBsYWNlT25lU2VsZWN0aW9uIiwic2V0U2ltcGxlU2VsZWN0aW9uIiwic2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkiLCJzZXRTZWxlY3Rpb25Ob1VuZG8iLCJOYU4iLCJmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UiLCJzZXRTZWxlY3Rpb25Jbm5lciIsInNraXBBdG9taWNJblNlbGVjdGlvbiIsInJlQ2hlY2tTZWxlY3Rpb24iLCJtYXlDbGVhciIsIm5ld0FuY2hvciIsInNraXBBdG9taWMiLCJuZXdIZWFkIiwic2tpcEF0b21pY0lubmVyIiwib2xkUG9zIiwiYXRvbWljIiwibmVhciIsIm1vdmVQb3MiLCJmYXIiLCJjYW50RWRpdCIsInNlbGVjdEFsbCIsImZpbHRlckNoYW5nZSIsImNhbmNlbGVkIiwiY2FuY2VsIiwibWFrZUNoYW5nZSIsImlnbm9yZVJlYWRPbmx5Iiwic3VwcHJlc3NFZGl0cyIsIm1hcmsiLCJwYXJ0cyIsIm1rIiwibmV3UGFydHMiLCJkZnJvbSIsImR0byIsInJlbW92ZVJlYWRPbmx5UmFuZ2VzIiwibWFrZUNoYW5nZUlubmVyIiwibWFrZUNoYW5nZVNpbmdsZURvYyIsInJlYmFzZWQiLCJyZWJhc2VIaXN0IiwibWFrZUNoYW5nZUZyb21IaXN0b3J5IiwiYWxsb3dTZWxlY3Rpb25Pbmx5Iiwic3VwcHJlc3MiLCJhbnRpQ2hhbmdlcyIsImZpbHRlciIsInJldHVybmVkIiwidiIsInNoaWZ0RG9jIiwiZGlzdGFuY2UiLCJyZW1vdmVkIiwicmVjb21wdXRlTWF4TGVuZ3RoIiwiY2hlY2tXaWR0aFN0YXJ0IiwicmV0cmVhdEZyb250aWVyIiwiY2hhbmdlc0hhbmRsZXIiLCJjaGFuZ2VIYW5kbGVyIiwibWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yIiwicmVwbGFjZVJhbmdlIiwiYXNzaWduIiwic3BsaXRMaW5lcyIsInJlYmFzZUhpc3RTZWxTaW5nbGUiLCJyZWJhc2VIaXN0QXJyYXkiLCJzdWIiLCJvayIsImNvcGllZCIsImNoYW5nZUxpbmUiLCJoYW5kbGUiLCJjaGFuZ2VUeXBlIiwiTGVhZkNodW5rIiwiQnJhbmNoQ2h1bmsiLCJyZW1vdmVJbm5lciIsImluc2VydElubmVyIiwiaXRlck4iLCJvbGRIZWlnaHQiLCJyZW1haW5pbmciLCJsZWFmIiwibWF5YmVTcGlsbCIsIm1lIiwic3BpbGxlZCIsInNpYmxpbmciLCJteUluZGV4IiwidXNlZCIsIkxpbmVXaWRnZXQiLCJvcHQiLCJhZGp1c3RTY3JvbGxXaGVuQWJvdmVWaXNpYmxlIiwidGhpcyQxIiwib2xkSCIsIm5leHRNYXJrZXJJZCIsIlRleHRNYXJrZXIiLCJtYXJrVGV4dCIsImNsb25lTm9kZSIsImlzUGFyZW50IiwiU2hhcmVkVGV4dE1hcmtlciIsIm1hcmtUZXh0U2hhcmVkIiwicmVwbGFjZWRXaXRoIiwiYWRkVG9IaXN0b3J5IiwiY3VyTGluZSIsImFkZE1hcmtlZFNwYW4iLCJjbGVhck9uRW50ZXIiLCJjbGVhckhpc3RvcnkiLCJ3aXRoT3AiLCJ2aXN1YWwiLCJkSGVpZ2h0IiwiZmluZFNoYXJlZE1hcmtlcnMiLCJmaW5kTWFya3MiLCJkZXRhY2hTaGFyZWRNYXJrZXJzIiwic3ViTWFya2VyIiwibmV4dERvY0lkIiwiRG9jIiwibGluZVNlcCIsImNsZWFuR2VuZXJhdGlvbiIsImNvbnN0cnVjdG9yIiwiZ2V0VmFsdWUiLCJqb2luIiwibGluZVNlcGFyYXRvciIsInNldFZhbHVlIiwiZ2V0UmFuZ2UiLCJnZXRMaW5lSGFuZGxlIiwiZ2V0TGluZU51bWJlciIsImdldExpbmVIYW5kbGVWaXN1YWxTdGFydCIsImxpbmVDb3VudCIsImxpc3RTZWxlY3Rpb25zIiwic2V0Q3Vyc29yIiwiZXh0ZW5kU2VsZWN0aW9uc0J5Iiwic2V0U2VsZWN0aW9ucyIsImFkZFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbnMiLCJyZXBsYWNlU2VsZWN0aW9uIiwiZHVwIiwicmVwbGFjZVNlbGVjdGlvbnMiLCJoaW50Iiwib2xkUHJldiIsIm5ld1ByZXYiLCJjb21wdXRlUmVwbGFjZWRTZWwiLCJ1bmRvIiwicmVkbyIsInVuZG9TZWxlY3Rpb24iLCJyZWRvU2VsZWN0aW9uIiwic2V0RXh0ZW5kaW5nIiwiZ2V0RXh0ZW5kaW5nIiwiaGlzdG9yeVNpemUiLCJtYXJrQ2xlYW4iLCJjaGFuZ2VHZW5lcmF0aW9uIiwiZm9yY2VTcGxpdCIsImlzQ2xlYW4iLCJnZW4iLCJnZXRIaXN0b3J5Iiwic2V0SGlzdG9yeSIsImhpc3REYXRhIiwic2V0R3V0dGVyTWFya2VyIiwiZ3V0dGVySUQiLCJjbGVhckd1dHRlciIsImxpbmVJbmZvIiwiYWRkTGluZUNsYXNzIiwid2hlcmUiLCJyZW1vdmVMaW5lQ2xhc3MiLCJhZGRMaW5lV2lkZ2V0IiwiaW5zZXJ0QXQiLCJhYm92ZVZpc2libGUiLCJyZW1vdmVMaW5lV2lkZ2V0Iiwic2V0Qm9va21hcmsiLCJyZWFsT3B0cyIsImZpbmRNYXJrc0F0IiwiZ2V0QWxsTWFya3MiLCJwb3NGcm9tSW5kZXgiLCJzZXBTaXplIiwiaW5kZXhGcm9tUG9zIiwiY29weUhpc3RvcnkiLCJsaW5rZWREb2MiLCJtRnJvbSIsIm1UbyIsInN1Yk1hcmsiLCJjb3B5U2hhcmVkTWFya2VycyIsInVubGlua0RvYyIsIkNvZGVNaXJyb3IkMSIsImxpbmsiLCJzcGxpdElkcyIsIml0ZXJMaW5rZWREb2NzIiwiZ2V0RWRpdG9yIiwic2V0RGlyZWN0aW9uIiwiZGlyZWN0aW9uQ2hhbmdlZCIsImVhY2hMaW5lIiwibGFzdERyb3AiLCJvbkRyb3AiLCJjbGVhckRyYWdDdXJzb3IiLCJmaWxlcyIsImRhdGFUcmFuc2ZlciIsImlzUmVhZE9ubHkiLCJGaWxlUmVhZGVyIiwiRmlsZSIsInJlYWQiLCJsb2FkRmlsZSIsImZpbGUiLCJhbGxvd0Ryb3BGaWxlVHlwZXMiLCJyZWFkZXIiLCJvbmxvYWQiLCJyZWFkQXNUZXh0IiwiZHJhZ2dpbmdUZXh0IiwidGV4dCQxIiwiZ2V0RGF0YSIsInNlbGVjdGVkIiwiZHJhZ0N1cnNvciIsImZvckVhY2hDb2RlTWlycm9yIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImJ5Q2xhc3MiLCJDb2RlTWlycm9yIiwiZ2xvYmFsc1JlZ2lzdGVyZWQiLCJlbnN1cmVHbG9iYWxIYW5kbGVycyIsInJlc2l6ZVRpbWVyIiwib25SZXNpemUiLCJyZWdpc3Rlckdsb2JhbEhhbmRsZXJzIiwic2V0U2l6ZSIsImtleU5hbWVzIiwiMyIsIjgiLCI5IiwiMTMiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjciLCIzMiIsIjMzIiwiMzQiLCIzNSIsIjM2IiwiMzciLCIzOCIsIjM5IiwiNDAiLCI0NCIsIjQ1IiwiNDYiLCI1OSIsIjYxIiwiOTEiLCI5MiIsIjkzIiwiMTA2IiwiMTA3IiwiMTA5IiwiMTEwIiwiMTExIiwiMTI3IiwiMTQ1IiwiMTczIiwiMTg2IiwiMTg3IiwiMTg4IiwiMTg5IiwiMTkwIiwiMTkxIiwiMTkyIiwiMjE5IiwiMjIwIiwiMjIxIiwiMjIyIiwiNjMyMzIiLCI2MzIzMyIsIjYzMjM0IiwiNjMyMzUiLCI2MzI3MiIsIjYzMjczIiwiNjMyNzUiLCI2MzI3NiIsIjYzMjc3IiwiNjMzMDIiLCJmcm9tQ2hhckNvZGUiLCJrZXlNYXAiLCJub3JtYWxpemVLZXlOYW1lIiwiYWx0IiwiY3RybCIsImNtZCIsIm1vZCIsIm5vcm1hbGl6ZUtleU1hcCIsImtleW1hcCIsImtleW5hbWUiLCJrZXlzIiwibG9va3VwS2V5IiwiZ2V0S2V5TWFwIiwiZmFsbHRocm91Z2giLCJpc01vZGlmaWVyS2V5Iiwia2V5Q29kZSIsImFkZE1vZGlmaWVyTmFtZXMiLCJub1NoaWZ0IiwiYWx0S2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Iiwia2V5TmFtZSIsImFsdEdyYXBoS2V5IiwiZGVsZXRlTmVhclNlbGVjdGlvbiIsImNvbXB1dGUiLCJraWxsIiwidG9LaWxsIiwicmVwbGFjZWQiLCJtb3ZlQ2hhckxvZ2ljYWxseSIsIm1vdmVMb2dpY2FsbHkiLCJlbmRPZkxpbmUiLCJ2aXN1YWxseSIsIm1vdmVJblN0b3JhZ2VPcmRlciIsInByZXAiLCJiYXNpYyIsIkxlZnQiLCJSaWdodCIsIlVwIiwiRG93biIsIkVuZCIsIkhvbWUiLCJQYWdlVXAiLCJQYWdlRG93biIsIkRlbGV0ZSIsIkJhY2tzcGFjZSIsIlNoaWZ0LUJhY2tzcGFjZSIsIlRhYiIsIlNoaWZ0LVRhYiIsIkVudGVyIiwiSW5zZXJ0IiwiRXNjIiwicGNEZWZhdWx0IiwiQ3RybC1BIiwiQ3RybC1EIiwiQ3RybC1aIiwiU2hpZnQtQ3RybC1aIiwiQ3RybC1ZIiwiQ3RybC1Ib21lIiwiQ3RybC1FbmQiLCJDdHJsLVVwIiwiQ3RybC1Eb3duIiwiQ3RybC1MZWZ0IiwiQ3RybC1SaWdodCIsIkFsdC1MZWZ0IiwiQWx0LVJpZ2h0IiwiQ3RybC1CYWNrc3BhY2UiLCJDdHJsLURlbGV0ZSIsIkN0cmwtUyIsIkN0cmwtRiIsIkN0cmwtRyIsIlNoaWZ0LUN0cmwtRyIsIlNoaWZ0LUN0cmwtRiIsIlNoaWZ0LUN0cmwtUiIsIkN0cmwtWyIsIkN0cmwtXSIsIkN0cmwtVSIsIlNoaWZ0LUN0cmwtVSIsIkFsdC1VIiwiZW1hY3N5IiwiQ3RybC1CIiwiQ3RybC1QIiwiQ3RybC1OIiwiQWx0LUYiLCJBbHQtQiIsIkN0cmwtRSIsIkN0cmwtViIsIlNoaWZ0LUN0cmwtViIsIkN0cmwtSCIsIkFsdC1EIiwiQWx0LUJhY2tzcGFjZSIsIkN0cmwtSyIsIkN0cmwtVCIsIkN0cmwtTyIsIm1hY0RlZmF1bHQiLCJDbWQtQSIsIkNtZC1EIiwiQ21kLVoiLCJTaGlmdC1DbWQtWiIsIkNtZC1ZIiwiQ21kLUhvbWUiLCJDbWQtVXAiLCJDbWQtRW5kIiwiQ21kLURvd24iLCJDbWQtTGVmdCIsIkNtZC1SaWdodCIsIkN0cmwtQWx0LUJhY2tzcGFjZSIsIkFsdC1EZWxldGUiLCJDbWQtUyIsIkNtZC1GIiwiQ21kLUciLCJTaGlmdC1DbWQtRyIsIkNtZC1BbHQtRiIsIlNoaWZ0LUNtZC1BbHQtRiIsIkNtZC1bIiwiQ21kLV0iLCJDbWQtQmFja3NwYWNlIiwiQ21kLURlbGV0ZSIsIkNtZC1VIiwiU2hpZnQtQ21kLVUiLCJjb21tYW5kcyIsInNpbmdsZVNlbGVjdGlvbiIsImtpbGxMaW5lIiwiZGVsZXRlTGluZSIsImRlbExpbmVMZWZ0IiwiZGVsV3JhcHBlZExpbmVMZWZ0IiwibGVmdFBvcyIsImRlbFdyYXBwZWRMaW5lUmlnaHQiLCJyaWdodFBvcyIsImdvRG9jU3RhcnQiLCJnb0RvY0VuZCIsImdvTGluZVN0YXJ0IiwiZ29MaW5lU3RhcnRTbWFydCIsImxpbmVTdGFydFNtYXJ0IiwiZ29MaW5lRW5kIiwidmlzdWFsTGluZUVuZCIsImxpbmVFbmQiLCJnb0xpbmVSaWdodCIsImdvTGluZUxlZnQiLCJnb0xpbmVMZWZ0U21hcnQiLCJnb0xpbmVVcCIsIm1vdmVWIiwiZ29MaW5lRG93biIsImdvUGFnZVVwIiwiZ29QYWdlRG93biIsImdvQ2hhckxlZnQiLCJtb3ZlSCIsImdvQ2hhclJpZ2h0IiwiZ29Db2x1bW5MZWZ0IiwiZ29Db2x1bW5SaWdodCIsImdvV29yZExlZnQiLCJnb0dyb3VwUmlnaHQiLCJnb0dyb3VwTGVmdCIsImdvV29yZFJpZ2h0IiwiZGVsQ2hhckJlZm9yZSIsImRlbGV0ZUgiLCJkZWxDaGFyQWZ0ZXIiLCJkZWxXb3JkQmVmb3JlIiwiZGVsV29yZEFmdGVyIiwiZGVsR3JvdXBCZWZvcmUiLCJkZWxHcm91cEFmdGVyIiwiaW5kZW50QXV0byIsImluZGVudFNlbGVjdGlvbiIsImluZGVudE1vcmUiLCJpbmRlbnRMZXNzIiwiaW5zZXJ0VGFiIiwiaW5zZXJ0U29mdFRhYiIsInNwYWNlcyIsImRlZmF1bHRUYWIiLCJleGVjQ29tbWFuZCIsInRyYW5zcG9zZUNoYXJzIiwibmV3bGluZUFuZEluZGVudCIsInNlbHMiLCJpbmRlbnRMaW5lIiwib3BlbkxpbmUiLCJ0b2dnbGVPdmVyd3JpdGUiLCJmaXJzdE5vbldTIiwiaW5XUyIsImRvSGFuZGxlQmluZGluZyIsImJvdW5kIiwiZHJvcFNoaWZ0IiwiZW5zdXJlUG9sbGVkIiwicHJldlNoaWZ0Iiwic3RvcFNlcSIsImRpc3BhdGNoS2V5Iiwic2VxIiwia2V5U2VxIiwiZGlzcGF0Y2hLZXlJbm5lciIsImtleU1hcHMiLCJleHRyYUtleXMiLCJsb29rdXBLZXlGb3JFZGl0b3IiLCJoYW5kbGVLZXlCaW5kaW5nIiwibW90aW9uIiwibGFzdFN0b3BwZWRLZXkiLCJvbktleURvd24iLCJoYW5kbGVkIiwidXAiLCJzaG93Q3Jvc3NIYWlyIiwib25LZXlVcCIsIm9uS2V5UHJlc3MiLCJjaGFyQ29kZSIsImhhbmRsZUNoYXJCaW5kaW5nIiwibGFzdENsaWNrIiwibGFzdERvdWJsZUNsaWNrIiwiUGFzdENsaWNrIiwib25Nb3VzZURvd24iLCJhY3RpdmVUb3VjaCIsInN1cHBvcnRzVG91Y2giLCJkcmFnZ2FibGUiLCJjbGlja0luR3V0dGVyIiwicmVwZWF0Iiwibm93IiwiY29tcGFyZSIsImNsaWNrUmVwZWF0Iiwic2VsZWN0aW5nVGV4dCIsImhhbmRsZU1hcHBlZEJ1dHRvbiIsImNvbnRhaW5lZCIsImJlaGF2aW9yIiwib3B0aW9uIiwidW5pdCIsImFkZE5ldyIsIm1vdmVPbkRyYWciLCJjb25maWd1cmVNb3VzZSIsImRyYWdEcm9wIiwibW92ZWQiLCJkcmFnRW5kIiwibW91c2VNb3ZlIiwiZHJhZ1N0YXJ0IiwiZTIiLCJsZWZ0QnV0dG9uU3RhcnREcmFnIiwib3VyUmFuZ2UiLCJvdXJJbmRleCIsInN0YXJ0U2VsIiwicmFuZ2VGb3JVbml0IiwibGFzdFBvcyIsImV4dGVuZFRvIiwic3RhcnRDb2wiLCJwb3NDb2wiLCJvbGRSYW5nZSIsInJhbmdlcyQxIiwiYW5jaG9yTGluZSIsImJvdW5kYXJ5IiwiaGVhZEluZGV4IiwidXNlUGFydCIsImJpZGlTaW1wbGlmeSIsImVkaXRvclNpemUiLCJjb3VudGVyIiwibW92ZSIsImJ1dHRvbnMiLCJjdXJDb3VudCIsImxlZnRCdXR0b25TZWxlY3QiLCJsZWZ0QnV0dG9uRG93biIsIm9uQ29udGV4dE1lbnUiLCJmaW5kV29yZEF0IiwiZ3V0dGVyRXZlbnQiLCJwcmV2ZW50IiwibVgiLCJtWSIsInRvdWNoZXMiLCJsaW5lQm94IiwiZyIsImNvbnRleHRNZW51SW5HdXR0ZXIiLCJ0aGVtZUNoYW5nZWQiLCJ0aGVtZSIsIkluaXQiLCJkZWZhdWx0cyIsIm9wdGlvbkhhbmRsZXJzIiwiZ3V0dGVyc0NoYW5nZWQiLCJkcmFnRHJvcENoYW5nZWQiLCJ3YXNPbiIsImZ1bmNzIiwiZHJhZ0Z1bmN0aW9ucyIsInRvZ2dsZSIsImVudGVyIiwib3ZlciIsImxlYXZlIiwiZHJvcCIsIndyYXBwaW5nQ2hhbmdlZCIsImlucHV0U3R5bGVzIiwiaW5wdXRTdHlsZSIsImluaXQiLCJwYXN0ZUluY29taW5nIiwiY3V0SW5jb21pbmciLCJhdXRvZm9jdXMiLCJ3b3JkIiwidG91Y2hGaW5pc2hlZCIsInByZXZUb3VjaCIsImZpbmlzaFRvdWNoIiwiZmFyQXdheSIsInRvdWNoIiwicmFkaXVzWCIsInJhZGl1c1kiLCJpc01vdXNlTGlrZVRvdWNoRXZlbnQiLCJwYWdlWCIsInBhZ2VZIiwiZnJhZyIsIm9uRHJhZ092ZXIiLCJzZXREYXRhIiwiZWZmZWN0QWxsb3dlZCIsInNldERyYWdJbWFnZSIsImltZyIsInNyYyIsIl90b3AiLCJvbkRyYWdTdGFydCIsImlucCIsImdldEZpZWxkIiwicmVnaXN0ZXJFdmVudEhhbmRsZXJzIiwiZmluaXNoSW5pdCIsImluaXRIb29rcyIsInRleHRSZW5kZXJpbmciLCJob3ciLCJhZ2dyZXNzaXZlIiwiaW5kZW50IiwiY3VyU3BhY2UiLCJjdXJTcGFjZVN0cmluZyIsImluZGVudFVuaXQiLCJpbmRlbnRTdHJpbmciLCJpbmRlbnRXaXRoVGFicyIsInBvcyQxIiwiZGVmaW5lSW5pdEhvb2siLCJsYXN0Q29waWVkIiwic2V0TGFzdENvcGllZCIsIm5ld0xhc3RDb3BpZWQiLCJhcHBseVRleHRJbnB1dCIsImluc2VydGVkIiwiZGVsZXRlZCIsInBhc3RlIiwidGV4dExpbmVzIiwibXVsdGlQYXN0ZSIsInBhc3RlTGluZXNQZXJTZWxlY3Rpb24iLCJsaW5lV2lzZSIsImNoYW5nZUV2ZW50IiwidHJpZ2dlckVsZWN0cmljIiwiaGFuZGxlUGFzdGUiLCJwYXN0ZWQiLCJjbGlwYm9hcmREYXRhIiwiZGlzYWJsZUlucHV0IiwiZWxlY3RyaWNDaGFycyIsInNtYXJ0SW5kZW50IiwiZ2V0TW9kZUF0IiwiZWxlY3RyaWNJbnB1dCIsImNvcHlhYmxlUmFuZ2VzIiwibGluZVJhbmdlIiwiZGlzYWJsZUJyb3dzZXJNYWdpYyIsImZpZWxkIiwic3BlbGxjaGVjayIsImhpZGRlblRleHRhcmVhIiwiYm9yZGVyIiwiZmluZFBvc0giLCJvcmlnRGlyIiwibW92ZU9uY2UiLCJib3VuZFRvTGluZSIsImJpZGkiLCJtdiIsImdldFdyYXBwZWRMaW5lRXh0ZW50Iiwic2VhcmNoSW5WaXN1YWxMaW5lIiwiZ2V0UmVzIiwicmVzIiwibmV4dENoIiwibW92ZVZpc3VhbGx5IiwiZmluZE5leHRMaW5lIiwic2F3VHlwZSIsImdldEhlbHBlciIsImhpdFNpZGUiLCJmaW5kUG9zViIsInBhZ2VTaXplIiwibW92ZUFtb3VudCIsIkNvbnRlbnRFZGl0YWJsZUlucHV0IiwibGFzdEFuY2hvck5vZGUiLCJsYXN0QW5jaG9yT2Zmc2V0IiwibGFzdEZvY3VzTm9kZSIsImxhc3RGb2N1c09mZnNldCIsInBvbGxpbmciLCJjb21wb3NpbmciLCJncmFjZVBlcmlvZCIsInJlYWRET01UaW1lb3V0IiwicG9zVG9ET00iLCJiYWRQb3MiLCJiYWQiLCJkb21Ub1BvcyIsImxpbmVOb2RlIiwibG9jYXRlTm9kZUluTGluZVZpZXciLCJ0ZXh0Tm9kZSIsInRvcE5vZGUiLCJub2RlVmFsdWUiLCJjdXJOb2RlIiwidGV4dENvbnRlbnQiLCJwcmV2aW91c1NpYmxpbmciLCJkaXN0JDEiLCJvbkNvcHlDdXQiLCJsaW5lV2lzZUNvcHlDdXQiLCJjbGVhckRhdGEiLCJrbHVkZ2UiLCJoYWRGb2N1cyIsInNob3dQcmltYXJ5U2VsZWN0aW9uIiwidXBkYXRlRnJvbURPTSIsInJlYWRGcm9tRE9NU29vbiIsImZvcmNlQ29tcG9zaXRpb25FbmQiLCJzaG93TXVsdGlwbGVTZWxlY3Rpb25zIiwiY3VyQW5jaG9yIiwiY3VyRm9jdXMiLCJybmciLCJyYW5nZUNvdW50IiwiZ2V0UmFuZ2VBdCIsInN0YXJ0R3JhY2VQZXJpb2QiLCJyZW1lbWJlclNlbGVjdGlvbiIsInNlbGVjdGlvbkluRWRpdG9yIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJibHVyIiwicG9sbFNlbGVjdGlvbiIsInBvbGxJbnRlcnZhbCIsInBvbGwiLCJzY2FuIiwiaXNJbkd1dHRlciIsInRyaWdnZXJPbktleURvd24iLCJwb2xsQ29udGVudCIsImZyb21JbmRleCIsImZyb21Ob2RlIiwidG9Ob2RlIiwidG9JbmRleCIsIm5ld1RleHQiLCJjbG9zaW5nIiwiZXh0cmFMaW5lYnJlYWsiLCJjbG9zZSIsImFkZFRleHQiLCJ3YWxrIiwiY21UZXh0IiwibWFya2VySUQiLCJyZWNvZ25pemVNYXJrZXIiLCJpc0Jsb2NrIiwibm9kZU5hbWUiLCJkb21UZXh0QmV0d2VlbiIsIm9sZFRleHQiLCJjdXRGcm9udCIsImN1dEVuZCIsIm9sZFRvcCIsIm1heEN1dEZyb250IiwibmV3Qm90Iiwib2xkQm90IiwibWF4Q3V0RW5kIiwiY2hGcm9tIiwiY2hUbyIsImNvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5Q2hhbmdlZCIsInJlc2V0UG9zaXRpb24iLCJUZXh0YXJlYUlucHV0IiwicHJldklucHV0IiwicG9sbGluZ0Zhc3QiLCJjcmVhdGVGaWVsZCIsInRleHRhcmVhIiwicHJlcGFyZUNvcHlDdXQiLCJmYXN0UG9sbCIsIl9kaXNwbGF5IiwibW92ZUlucHV0V2l0aEN1cnNvciIsImhlYWRQb3MiLCJ3cmFwT2ZmIiwibGluZU9mZiIsInRlVG9wIiwidGVMZWZ0IiwiZHJhd24iLCJjb250ZXh0TWVudVBlbmRpbmciLCJzbG93UG9sbCIsIm1pc3NlZCIsInNhbWUiLCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUiLCJvbGRDU1MiLCJvbGRXcmFwcGVyQ1NTIiwib2xkU2Nyb2xsWSIsIndyYXBwZXJCb3giLCJzY3JvbGxZIiwic2Nyb2xsVG8iLCJkZXRlY3RpbmdTZWxlY3RBbGwiLCJwcmVwYXJlU2VsZWN0QWxsSGFjayIsIm1vdXNldXAiLCJyZWhpZGUiLCJleHR2YWwiLCJkaXNhYmxlZCIsImRlZmx0Iiwibm90T25Jbml0IiwiZGVmaW5lT3B0aW9uIiwibmV3QnJlYWtzIiwicmVmcmVzaCIsImdldElucHV0RmllbGQiLCJkZXRhY2giLCJhdHRhY2giLCJpbnRlZ2VyIiwiZGVmaW5lT3B0aW9ucyIsImhlbHBlcnMiLCJzZXRPcHRpb24iLCJnZXREb2MiLCJhZGRLZXlNYXAiLCJyZW1vdmVLZXlNYXAiLCJhZGRPdmVybGF5Iiwic2NvcmUiLCJwcmlvcml0eSIsImluc2VydFNvcnRlZCIsIm1vZGVTcGVjIiwicmVtb3ZlT3ZlcmxheSIsIm5ld1JhbmdlcyIsImdldFRva2VuQXQiLCJnZXRMaW5lVG9rZW5zIiwiZ2V0VG9rZW5UeXBlQXQiLCJnZXRIZWxwZXJzIiwiaGVscCIsIl9nbG9iYWwiLCJnZXRTdGF0ZUFmdGVyIiwiZGVmYXVsdFRleHRIZWlnaHQiLCJkZWZhdWx0Q2hhcldpZHRoIiwiZ2V0Vmlld3BvcnQiLCJhZGRXaWRnZXQiLCJ2c3BhY2UiLCJoc3BhY2UiLCJ0cmlnZ2VyT25LZXlQcmVzcyIsInRyaWdnZXJPbktleVVwIiwidHJpZ2dlck9uTW91c2VEb3duIiwiYW1vdW50IiwicnRsTW92ZVZpc3VhbGx5IiwiZ29hbENvbHVtbiIsImdvYWxzIiwic3RhcnRDaGFyIiwiY2hlY2siLCJnZXRTY3JvbGxJbmZvIiwic2Nyb2xsVG9SYW5nZSIsImludGVycHJldCIsInN3YXBEb2MiLCJwaHJhc2UiLCJwaHJhc2VUZXh0IiwicGhyYXNlcyIsImdldFdyYXBwZXJFbGVtZW50IiwiZ2V0U2Nyb2xsZXJFbGVtZW50IiwiZ2V0R3V0dGVyRWxlbWVudCIsInJlZ2lzdGVySGVscGVyIiwicmVnaXN0ZXJHbG9iYWxIZWxwZXIiLCJwcmVkaWNhdGUiLCJhZGRFZGl0b3JNZXRob2RzIiwiZG9udERlbGVnYXRlIiwibWV0aG9kIiwiY29udGVudGVkaXRhYmxlIiwiZGVmaW5lTW9kZSIsImRlcGVuZGVuY2llcyIsImRlZmluZU1JTUUiLCJtaW1lIiwiZGVmaW5lRXh0ZW5zaW9uIiwiZnVuYyIsImRlZmluZURvY0V4dGVuc2lvbiIsImZyb21UZXh0QXJlYSIsInRhYmluZGV4IiwicGxhY2Vob2xkZXIiLCJyZWFsU3VibWl0IiwiZm9ybSIsImxlYXZlU3VibWl0TWV0aG9kQWxvbmUiLCJzdWJtaXQiLCJ3cmFwcGVkU3VibWl0IiwiZ2V0VGV4dEFyZWEiLCJ0b1RleHRBcmVhIiwiY21wUG9zIiwiYWRkTGVnYWN5UHJvcHMiLCJ2ZXJzaW9uIiwiaXNNYWMiLCJVVElMIiwidG9nZ2xlQ2xhc3MiLCJyZW1vdmVDbGFzcyIsImdpdEd1YlVybCIsIkNPTkZJRyIsImJhc2VVcmwiLCJnZXRTdGF0ZSIsIkNNIiwiRURJVE9SIiwidG9nZ2xlQmxvY2txdW90ZSIsInNlbGYiLCJ3aW5kb3dsIiwiY3VycmVudFRhcmdldCIsImVkaXRvciIsIiRlZGl0b3IiLCIkY29kZW1pcnJvciIsInN0YXQiLCJfb3B0aW9ucyIsIiR0b29scyIsImJsb2NrU3R5bGVzIiwic3RhcnRQb2ludCIsImVuZFBvaW50IiwicmVwbCIsInF1b3RlIiwidW5vcmRlcmVkLWxpc3QiLCJvcmRlcmVkLWxpc3QiLCJfcmVwbGFjZVNlbGVjdGlvbiIsInN0YXJ0RW5kIiwidXJsIiwidG9vbGJhckJ1aWx0SW5CdXR0b25zIiwiYm9sZCIsImFjdGlvbiIsInN0YXJ0Q2hhcnMiLCJlbmRDaGFycyIsImRlZmF1bHQiLCJpc0VkaXRUb29scyIsIml0YWxpYyIsImhlYWRpbmciLCJjdXJySGVhZGluZ0xldmVsIiwiaW5zZXJ0VGV4dHMiLCJpbWFnZSIsImNvbnNvbGUiLCJsb2ciLCJhYm91dCIsIm9wZW4iLCJlZGl0IiwiJHN0YXR1cyIsImVkaXRvckVsIiwiZWwiLCJwcmV2aWV3RWwiLCJtZEVsIiwidG9vbFByZXZpZXdFbCIsInRvb2xTaG93QWxsRWwiLCJ0b29sRWRpdEVsIiwicHJldmlldyIsImZ1bGxzY3JlZW4iLCJjb21tb0ZuSGFubGRlIiwidGFibGUiLCJob3Jpem9udGFsUnVsZSIsInByb21wdFRleHRzIiwic2hvcnRjdXRzIiwidG9nZ2xlSGVhZGluZ0JpZ2dlciIsImNsZWFuQmxvY2siLCJiYWNrIiwiZnJvbnQiLCJ0b2dnbGVDb2RlQmxvY2siLCJ0b2dnbGVQcmV2aWV3IiwidG9nZ2xlU2lkZUJ5U2lkZSIsInRvZ2dsZUZ1bGxTY3JlZW4iLCJmaXhTaG9ydGN1dCIsIlV0aWwiLCJfbWVyZ2VQcm9wZXJ0aWVzIiwic291Y2UiLCJfdHlwZW9mIiwiY2xhc3NMaXN0Iiwib2JqMkFyciIsImlzQXJyYXkiLCJrZXlBcnIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIml0ZW0iLCJpc0Z1bmN0aW9uIiwiZm4iLCJjb25maWciLCJpY29uTGluayIsInRoZW1lRGFyayIsInRoZW1lTGlnaHQiLCJkYXJrIiwibGlnaHQiLCJsYW5ndWFnZSIsImxhbmciLCJjbUNmZyIsIm1vZGVDZmciLCJodG1sTW9kZSIsImh0bWxNb2RlTWlzc2luZyIsImhpZ2hsaWdodEZvcm1hdHRpbmciLCJtYXhCbG9ja3F1b3RlRGVwdGgiLCJ0YXNrTGlzdHMiLCJzdHJpa2V0aHJvdWdoIiwiZW1vamkiLCJmZW5jZWRDb2RlQmxvY2tIaWdobGlnaHRpbmciLCJ4bWwiLCJ0b2tlblR5cGVPdmVycmlkZXMiLCJ0b2tlblR5cGVzIiwiaGVhZGVyIiwibGlzdDEiLCJsaXN0MiIsImxpc3QzIiwiaHIiLCJpbWFnZUFsdFRleHQiLCJpbWFnZU1hcmtlciIsImZvcm1hdHRpbmciLCJsaW5rSW5saW5lIiwibGlua0VtYWlsIiwibGlua1RleHQiLCJsaW5rSHJlZiIsImVtIiwic3Ryb25nIiwidG9rZW5UeXBlIiwiaHJSRSIsImxpc3RSRSIsInRhc2tMaXN0UkUiLCJhdHhIZWFkZXJSRSIsImFsbG93QXR4SGVhZGVyV2l0aG91dFNwYWNlIiwic2V0ZXh0SGVhZGVyUkUiLCJ0ZXh0UkUiLCJmZW5jZWRDb2RlUkUiLCJsaW5rRGVmUkUiLCJwdW5jdHVhdGlvbiIsInN3aXRjaElubGluZSIsImlubGluZSIsInN3aXRjaEJsb2NrIiwiYmxvY2siLCJsaW5rVGl0bGUiLCJpbmRlbnRlZENvZGUiLCJodG1sQmxvY2siLCJleGl0IiwiaHRtbFN0YXRlIiwidGFnU3RhcnQiLCJ0b2tlbml6ZSIsImlzSW5UZXh0IiwiaW5saW5lTm9ybWFsIiwiYmxvY2tOb3JtYWwiLCJ0cmFpbGluZ1NwYWNlTmV3TGluZSIsInByZXZMaW5lIiwidGhpc0xpbmUiLCJmaXJzdFRva2VuT25MaW5lIiwicHJldkxpbmVMaW5lSXNFbXB0eSIsImxpbmVJc0VtcHR5IiwicHJldkxpbmVJc0luZGVudGVkQ29kZSIsInByZXZMaW5lSXNIciIsInByZXZMaW5lSXNMaXN0IiwibWF4Tm9uQ29kZUluZGVudGF0aW9uIiwibGlzdFN0YWNrIiwibGluZUluZGVudGF0aW9uIiwiaW5kZW50YXRpb25EaWZmIiwiYWxsb3dzSW5saW5lQ29udGludWF0aW9uIiwiZmVuY2VkQ29kZUVuZCIsImlzSHIiLCJnZXRUeXBlIiwic2V0ZXh0IiwibGlzdFR5cGUiLCJ0YXNrTGlzdCIsImZlbmNlZEVuZFJFIiwibG9jYWxNb2RlIiwiZmluZE1vZGVCeU5hbWUiLCJtaW1lcyIsImxvY2FsU3RhdGUiLCJsb2NhbCIsImZvb3Rub3RlTGluayIsIm1kX2luc2lkZSIsInJldHVyblR5cGUiLCJjdXJyTGlzdEluZCIsImhhc0V4aXRlZExpc3QiLCJtYXhGZW5jZWRFbmRJbmQiLCJ0YXNrT3BlbiIsInRhc2tDbG9zZWQiLCJsaXN0TW9kIiwiaGFuZGxlVGV4dCIsIm1hdGNoQ2giLCJyZWdleCIsInByZXZpb3VzRm9ybWF0dGluZyIsImZvcm1hdHRpbmdFc2NhcGUiLCJhdHRzIiwic3Vic3RyaW5nIiwibGVmdEZsYW5raW5nIiwicmlnaHRGbGFua2luZyIsInNldEVtIiwic2V0U3Ryb25nIiwicmV0VHlwZSIsImVuZENoYXIiLCJyZXR1cm5TdGF0ZSIsImxpbmtSRSIsImdldExpbmtIcmVmSW5zaWRlIiwiKSIsIl0iLCJmb290bm90ZUxpbmtJbnNpZGUiLCJmb290bm90ZVVybCIsInRleHRBZnRlciIsImJsb2NrQ29tbWVudFN0YXJ0IiwiYmxvY2tDb21tZW50RW5kIiwiY2xvc2VCcmFja2V0cyIsImZvbGQiLCJvdmVybGF5TW9kZSIsImNvbWJpbmUiLCJiYXNlUG9zIiwiYmFzZUN1ciIsIm92ZXJsYXlQb3MiLCJvdmVybGF5Q3VyIiwic3RyZWFtU2VlbiIsImNvbWJpbmVUb2tlbnMiLCJvdmVybGF5VG9rZW4iLCJuYW1lU3RhcnRDaGFyIiwieG1sVGFnU3RhcnQiLCJJdGVyIiwidGFnQXQiLCJ0b1RhZ0VuZCIsImd0IiwibGFzdFNsYXNoIiwibGFzdEluZGV4T2YiLCJzZWxmQ2xvc2UiLCJ0b1RhZ1N0YXJ0IiwibHQiLCJ0b05leHRUYWciLCJ0b1ByZXZUYWciLCJmaW5kTWF0Y2hpbmdDbG9zZSIsInN0YWNrIiwic3RhcnRMaW5lIiwiZmluZE1hdGNoaW5nT3BlbiIsImVuZExpbmUiLCJvcGVuVGFnIiwic3RhcnRQb3MiLCJlbmRQb3MiLCJmaW5kTWF0Y2hpbmdUYWciLCJmaW5kRW5jbG9zaW5nVGFnIiwiZm9yd2FyZCIsInNjYW5Gb3JDbG9zaW5nVGFnIiwiZG9Gb2xkIiwiZmluZGVyIiwibWluU2l6ZSIsImFsbG93Rm9sZGVkIiwibWFya3MiLCJfX2lzRm9sZCIsImNsZWFyZWQiLCJteVdpZGdldCIsIm1ha2VXaWRnZXQiLCJteVJhbmdlIiwibmV3Rm9sZEZ1bmN0aW9uIiwicmFuZ2VGaW5kZXIiLCJ0b2dnbGVGb2xkIiwiZm9sZENvZGUiLCJ1bmZvbGQiLCJmb2xkQWxsIiwidW5mb2xkQWxsIiwiZGVmYXVsdE9wdGlvbnMiLCJhdXRvIiwibWluRm9sZFNpemUiLCJzY2FuVXAiLCJlZGl0b3JPcHRpb25zIiwiZm9sZE9wdGlvbnMiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsIkNvb2xNREVkaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl90aGlzIiwiaW5pdERhdGEiLCJ0aGVuIiwiaW5pdFZpZXciLCJfdGhpczIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImluaXRPcHRpb24iLCJpbml0RWRpdG9yU3RhdHVzIiwiY3JlYXRlSWNvbkxpbmsiLCJpbml0RXZlbnQiLCJpbml0Q29kZU1pcnJvckRhdGEiLCJpbml0TWFya2Rvd25EYXRhIiwiaW5pdERlZmF1bHRDb250ZW50IiwiaW5pdFN0YXR1c0V2ZW50IiwiaW5pdFRvb2xzRXZlbnQiLCJpc0NyZWF0ZWRJY29uTGluayIsIm9saW5rIiwiaHJlZiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9tUmVuZGVyIiwidG9vbHNPYmoiLCJ0b29sc0FyciIsImNhbGxCYWNrIiwidG9vbEVsIiwiQ29kZW1pcnJvciIsInRleHRBcmVhRWxlbWVudCIsImNyZWF0ZUNvZGVNaXJyb3JFbGVtZW50IiwibWF0Y2hCcmFja2V0cyIsInN0eWxlQWN0aXZlTGluZSIsImF1dG9DbG9zZUJyYWNrZXRzIiwiYXV0b0Nsb3NlVGFncyIsImZvbGRHdXR0ZXIiLCJpbml0Q29kZU1pcnJvckV2ZW50IiwiYWRkX0NNX2NoYW5nZV9ldmVudEhhbmRsZSIsImFkZF9DTV9jdXJzb3JBY3Rpdml0eV9ldmVudEhhbmRsZSIsImFkZFNjcm9sbFN5bmMiLCJvbkNvZGVNaXJyb3JDaGFuZ2UiLCJjb21tb25Db2RlTWlycm9yRXZlbnRIYW5kbGUiLCJvbkNvZGVNaXJyb3JDdXJzb3JBY3Rpdml0eSIsInNldEh0bWxWYWx1ZSIsInVwZGF0ZVN0YXR1c0JhciIsIm1hcmtlZCIsIm1hcmtlZE9wdGlvbnMiLCJnZm0iLCJ0YWJsZXMiLCJicmVha3MiLCJwZWRhbnRpYyIsInNhbml0aXplIiwic21hcnRMaXN0cyIsInNtYXJ0eXBhbnRzIiwiaGxqcyIsImhpZ2hsaWdodEF1dG8iLCIkbWFya2VkIiwic2V0T3B0aW9ucyIsImRlZmF1bHRDb24iLCJtZFZhbHVlIiwiaHRtbFN0ciIsImlubmVySFRNTCIsImNTY3JvbGwiLCJwU2Nyb2xsIiwicmF0aW8iLCJwYXJzZUZsb2F0IiwiY29uTGVuIiwicmVuZGVyRWRpdG9yQ29udGVudFBvc2l0aW9uIiwicmVuZGVyRWRpdENvbnRlbnRMZW5ndGgiLCJsZW5FbGVtZW50Iiwic3RhdHVzQmFyIiwiY21DdXJzb3IiLCJjdXJyQ29sIiwiY3VyckxpbmUiLCJfbGFuZ3VhZ2Ukc3RhdHVzQmFyIiwiY29sdW1ucyIsImluaXRFdmVudFRvZ2dsZVRoZW1lIiwib1RoZW1lRWwiLCJlbGVtZW50IiwiYmluZGluZ3MiLCJnZXRPcHRpb25zIiwiY29kZW1pcnJvciIsIl9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fIiwiVE9PTFMiLCJyZW5kZXJUb29scyIsInJlbmRlckNvZGUiLCJyZW5kZXJQcml2aWV3IiwicmVuZGVyU3RhdHVzIiwiY2F0Y2giLCJlcnJvciIsInRvb2xzTWFpbkh0bWxTdHIiLCJjcmVhdGVUb29sc01haW4iLCJ0b29sc0hhbmRsZUh0bWxTdHIiLCJjcmVhdGVUb29sc0hhbmRsZSIsImljb25zIiwidG9vbHNFZGl0IiwiZ2V0VG9vbHNFZGl0IiwidG9vbHNFZGl0TGVuIiwiY3JlYXRlVG9vbHNJdGVtIiwiaWNvbnNPcHRpb24iLCJyZXN1bHRPYmoiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJzb3J0VG9vbHNJY29uIiwiZ2V0VG9vbHNIYW5kbGUiLCJhdHRyIiwib2JqMSIsIm9iajIiLCJjdXJyU2hvcnRjdXRzSXRlbSIsImN1cnJQbGF0U2hvcnRjdXRzSXRlbSIsInBvc2l0b25IdG1sU3RyIiwiY3JlYXRlU3RhdHVzUG9zaXRpb24iLCJsZW5ndGhIdG1sU3RyIiwiY3JlYXRlU3RhdHVzTGVucyIsInRvZ2dsZVRoZW1lSHRtbFN0ciIsImNyZWF0ZVN0YXR1c1RvZ2dsZVRoZW1lIiwicmV0IiwiaHRtbENvbmZpZyIsImF1dG9TZWxmQ2xvc2VycyIsImFyZWEiLCJiciIsImNvbW1hbmQiLCJlbWJlZCIsImZyYW1lIiwia2V5Z2VuIiwibWV0YSIsInBhcmFtIiwidHJhY2siLCJ3YnIiLCJtZW51aXRlbSIsImltcGxpY2l0bHlDbG9zZWQiLCJkZCIsImxpIiwib3B0Z3JvdXAiLCJycCIsInRib2R5IiwidGQiLCJ0Zm9vdCIsInRyIiwiY29udGV4dEdyYWJiZXJzIiwiZHQiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYmxvY2txdW90ZSIsImRsIiwiZmllbGRzZXQiLCJmb290ZXIiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZ3JvdXAiLCJtZW51IiwibmF2Iiwib2wiLCJzZWN0aW9uIiwidWwiLCJ0aGVhZCIsImRvTm90SW5kZW50IiwiYWxsb3dVbnF1b3RlZCIsImFsbG93TWlzc2luZyIsImNhc2VGb2xkIiwieG1sQ29uZmlnIiwiYWxsb3dNaXNzaW5nVGFnTmFtZSIsImVkaXRvckNvbmYiLCJjb25maWdfIiwic2V0U3R5bGUiLCJpblRleHQiLCJjaGFpbiIsInBhcnNlciIsImluQmxvY2siLCJkb2N0eXBlIiwiZGVwdGgiLCJpblRhZyIsImJhc2VTdGF0ZSIsInRhZ05hbWUiLCJjbG9zdXJlIiwiaXNJbkF0dHJpYnV0ZSIsImluQXR0cmlidXRlIiwic3RyaW5nU3RhcnRDb2wiLCJ0ZXJtaW5hdG9yIiwicG9wQ29udGV4dCIsIm1heWJlUG9wQ29udGV4dCIsIm5leHRUYWdOYW1lIiwicGFyZW50VGFnTmFtZSIsInRhZ05hbWVTdGF0ZSIsImNsb3NlVGFnTmFtZVN0YXRlIiwiYXR0clN0YXRlIiwibWF0Y2hDbG9zaW5nIiwiY2xvc2VTdGF0ZSIsImNsb3NlU3RhdGVFcnIiLCJfc3RyZWFtIiwiYXR0ckVxU3RhdGUiLCJzdGFydE9mTGluZSIsIm5vSW5kZW50IiwiYXR0clZhbHVlU3RhdGUiLCJhdHRyQ29udGludWVkU3RhdGUiLCJiYXNlSW5kZW50IiwiZnVsbExpbmUiLCJtdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnIiwibXVsdGlsaW5lVGFnSW5kZW50RmFjdG9yIiwiYWxpZ25DREFUQSIsInRhZ0FmdGVyIiwiZ3JhYmJlcnMiLCJjb25maWd1cmF0aW9uIiwic2tpcEF0dHJpYnV0ZSIsIm1vZGVJbmZvIiwiYWxpYXMiLCJmaW5kTW9kZUJ5TUlNRSIsImZpbmRNb2RlQnlFeHRlbnNpb24iLCJmaW5kTW9kZUJ5RmlsZU5hbWUiLCJmaWxlbmFtZSIsImRvdCIsInVybFJFIiwibW9kZUNvbmZpZyIsImNvZGVEZXB0aCIsImdmbU92ZXJsYXkiLCJjb2RlQmxvY2siLCJhdGVTcGFjZSIsImRpZmZlcmVuY2UiLCJnaXRIdWJTcGljZSIsIm1hcmtkb3duQ29uZmlnIiwicGFyc2VyQ29uZmlnIiwic3RhdGVtZW50SW5kZW50IiwianNvbmxkTW9kZSIsImpzb25sZCIsImpzb25Nb2RlIiwianNvbiIsImlzVFMiLCJ0eXBlc2NyaXB0Iiwid29yZFJFIiwid29yZENoYXJhY3RlcnMiLCJrZXl3b3JkcyIsImt3IiwiQSIsIkIiLCJDIiwiRCIsIm9wZXJhdG9yIiwiYXRvbSIsImlmIiwid2hpbGUiLCJ3aXRoIiwiZWxzZSIsImRvIiwidHJ5IiwiZmluYWxseSIsInJldHVybiIsImJyZWFrIiwiY29udGludWUiLCJuZXciLCJkZWxldGUiLCJ2b2lkIiwidGhyb3ciLCJkZWJ1Z2dlciIsInZhciIsImNvbnN0IiwibGV0IiwiZnVuY3Rpb24iLCJmb3IiLCJzd2l0Y2giLCJjYXNlIiwiaW4iLCJ0eXBlb2YiLCJpbnN0YW5jZW9mIiwidHJ1ZSIsImZhbHNlIiwiY2xhc3MiLCJzdXBlciIsInlpZWxkIiwiZXhwb3J0IiwiaW1wb3J0IiwiZXh0ZW5kcyIsImF3YWl0IiwiaXNPcGVyYXRvckNoYXIiLCJpc0pzb25sZEtleXdvcmQiLCJ0cCIsImNvbnQiLCJ0b2tlbkJhc2UiLCJlc2NhcGVkIiwidG9rZW5TdHJpbmciLCJ0b2tlbkNvbW1lbnQiLCJleHByZXNzaW9uQWxsb3dlZCIsImluU2V0IiwicmVhZFJlZ2V4cCIsInRva2VuUXVhc2kiLCJsZXhpY2FsIiwibGFzdFR5cGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm1heWJlRW5kIiwiYnJhY2tldHMiLCJmaW5kRmF0QXJyb3ciLCJmYXRBcnJvd0F0IiwiYXJyb3ciLCJzYXdTb21ldGhpbmciLCJicmFja2V0IiwiYXRvbWljVHlwZXMiLCJudW1iZXIiLCJ2YXJpYWJsZSIsInJlZ2V4cCIsImpzb25sZC1rZXl3b3JkIiwiSlNMZXhpY2FsIiwiaW5TY29wZSIsInZhcm5hbWUiLCJsb2NhbFZhcnMiLCJjeCIsInZhcnMiLCJjYyIsInBhc3MiLCJpbkxpc3QiLCJyZWdpc3RlciIsIm5ld0NvbnRleHQiLCJyZWdpc3RlclZhclNjb3BlZCIsIlZhciIsImdsb2JhbFZhcnMiLCJpc01vZGlmaWVyIiwiZGVmYXVsdFZhcnMiLCJwdXNoY29udGV4dCIsInB1c2hibG9ja2NvbnRleHQiLCJwb3Bjb250ZXh0IiwicHVzaGxleCIsImxleCIsInBvcGxleCIsImV4cGVjdCIsIndhbnRlZCIsImV4cCIsInN0YXRlbWVudCIsInZhcmRlZiIsInBhcmVuRXhwciIsIm1heWJlZXhwcmVzc2lvbiIsIm1heWJlZWxzZSIsImZ1bmN0aW9uZGVmIiwiZm9yc3BlYyIsImVudW1kZWYiLCJ0eXBlZXhwciIsImV4cHJlc3Npb24iLCJtYXliZWxhYmVsIiwibWF5YmVDYXRjaEJpbmRpbmciLCJhZnRlckV4cG9ydCIsImFmdGVySW1wb3J0IiwiZnVuYXJnIiwiZXhwcmVzc2lvbklubmVyIiwiZXhwcmVzc2lvbk5vQ29tbWEiLCJub0NvbW1hIiwiYXJyb3dCb2R5Tm9Db21tYSIsImFycm93Qm9keSIsImNvbW1hc2VwIiwibWF5YmVvcCIsIm1heWJlb3BlcmF0b3JOb0NvbW1hIiwibWF5YmVvcGVyYXRvckNvbW1hIiwiY2xhc3NFeHByZXNzaW9uIiwiYXJyYXlMaXRlcmFsIiwiY29udENvbW1hc2VwIiwib2JqcHJvcCIsInF1YXNpIiwidGFyZ2V0Tm9Db21tYSIsIm1heWJlVHlwZUFyZ3MiLCJtYXliZVRhcmdldCIsImV4cHIiLCJjb250aW51ZVF1YXNpIiwiXyIsImdldHRlclNldHRlciIsImFmdGVycHJvcCIsIm1heWJldHlwZSIsIndoYXQiLCJzZXAiLCJwcm9jZWVkIiwibWF5YmVyZXR0eXBlIiwiaXNLVyIsImFmdGVyVHlwZSIsInR5cGVwcm9wIiwidHlwZWFyZyIsIm1heWJlUmV0dXJuVHlwZSIsInR5cGVwYXJhbSIsIm1heWJlVHlwZURlZmF1bHQiLCJtYXliZUFzc2lnbiIsInZhcmRlZkNvbnQiLCJwcm9wcGF0dGVybiIsIl90eXBlIiwiZm9yc3BlYzEiLCJmb3JzcGVjMiIsImZvcm1heWJlaW5vZiIsImZvcnNwZWMzIiwiY2xhc3NOYW1lQWZ0ZXIiLCJjbGFzc0JvZHkiLCJjbGFzc2ZpZWxkIiwibWF5YmVGcm9tIiwiZXhwb3J0RmllbGQiLCJpbXBvcnRTcGVjIiwibWF5YmVNb3JlSW1wb3J0cyIsIm1heWJlQXMiLCJlbnVtbWVtYmVyIiwiYmFzZWNvbHVtbiIsImNvbWJpbmF0b3IiLCJwYXJzZUpTIiwiZmlyc3RDaGFyIiwiaXNDb250aW51ZWRTdGF0ZW1lbnQiLCJkb3VibGVJbmRlbnRTd2l0Y2giLCJibG9ja0NvbW1lbnRDb250aW51ZSIsImxpbmVDb21tZW50Iiwic2tpcEV4cHJlc3Npb24iLCJ3aGVuQ2xvc2luZyIsImF1dG9DbG9zZUN1cnJlbnQiLCJhdXRvQ2xvc2VTbGFzaCIsIndoZW5PcGVuaW5nIiwicmVwbGFjZW1lbnRzIiwidG9rIiwiaHRtbCIsImRvbnRDbG9zZVRhZ3MiLCJodG1sRG9udENsb3NlIiwiaW5kZW50VGFncyIsImh0bWxJbmRlbnQiLCJsb3dlclRhZ05hbWUiLCJjbG9zaW5nVGFnRXhpc3RzIiwibmV3UG9zIiwiZG9udEluZGVudE9uQXV0b0Nsb3NlIiwiYXV0b0Nsb3NlR1QiLCJ0eXBpbmdTbGFzaCIsImRvbnRJbmRlbnRPblNsYXNoIiwicmVwbGFjZW1lbnQiLCJjb2xsZWN0aW9uIiwibmV3VGFnIiwibmV4dENsb3NlIiwib25DeCIsImNsb3NlVGFnIiwiZW1wdHlMaXN0UkUiLCJ1bm9yZGVyZWRMaXN0UkUiLCJpbmNyZW1lbnRSZW1haW5pbmdNYXJrZG93bkxpc3ROdW1iZXJzIiwic2tpcENvdW50Iiwic3RhcnRJdGVtIiwic3RhcnRJbmRlbnQiLCJuZXh0TGluZU51bWJlciIsIm5leHRJdGVtIiwibmV4dEluZGVudCIsIm5ld051bWJlciIsIm5leHROdW1iZXIiLCJpdGVtTnVtYmVyIiwibmV3bGluZUFuZEluZGVudENvbnRpbnVlTWFya2Rvd25MaXN0IiwiZW9sU3RhdGUiLCJpblF1b3RlIiwiY3Vyc29yQmVmb3JlQnVsbGV0IiwibnVtYmVyZWQiLCJidWxsZXQiLCJwYWlycyIsInRyaXBsZXMiLCJleHBsb2RlIiwiY29uZiIsImVuc3VyZUJvdW5kIiwiZ2V0Q29uZmlnIiwiYXJvdW5kIiwiY2hhcnNBcm91bmQiLCJsaW5lc2VwIiwiY2hhcnMiLCJoYW5kbGVyIiwiaWRlbnRpY2FsIiwib3BlbmluZyIsImN1clR5cGUiLCJzdHJpbmdTdGFydHNBZnRlciIsImNvbnRyYWN0U2VsZWN0aW9uIiwiaGFuZGxlQ2hhciIsImludmVydGVkIiwiQW5ub3RhdGlvbiIsInNjaGVkdWxlUmVkcmF3IiwiZG9SZWRyYXciLCJyZWRyYXciLCJidXR0b25IZWlnaHQiLCJzY3JvbGxCdXR0b25IZWlnaHQiLCJhbm5vdGF0aW9ucyIsImRvVXBkYXRlIiwiY29tcHV0ZVNjYWxlIiwicmVzaXplSGFuZGxlciIsImxpc3RlbkZvckNoYW5nZXMiLCJoU2NhbGUiLCJhbm5zIiwic2luZ2xlTGluZUgiLCJjdXJMaW5lT2JqIiwiZ2V0WSIsInRvcFkiLCJuZXh0VG9wIiwiYW5uIiwiV1JBUF9DTEFTUyIsIkJBQ0tfQ0xBU1MiLCJHVVRUX0NMQVNTIiwiY2xlYXJBY3RpdmVMaW5lcyIsImFjdGl2ZUxpbmVzIiwidXBkYXRlQWN0aXZlTGluZXMiLCJub25FbXB0eSIsInNhbWVBcnJheSIsInNlbGVjdGlvbkNoYW5nZSIsIm9uQ3Vyc29yQWN0aXZpdHkiLCJtYXJrZWRTZWxlY3Rpb24iLCJjb3ZlclJhbmdlIiwiQ0hVTktfU0laRSIsIm9uQ2hhbmdlIiwibWFya2VkU2VsZWN0aW9uU3R5bGUiLCJhZGRBdCIsImF0RW5kIiwib25HdXR0ZXJDbGljayIsIm9uVmlld3BvcnRDaGFuZ2UiLCJvbkZvbGQiLCJvcHRzIiwiaW5kaWNhdG9yT3BlbiIsImluZGljYXRvckZvbGRlZCIsInBhcnNlT3B0aW9ucyIsInVwZGF0ZUluVmlld3BvcnQiLCJpc0ZvbGRlZCIsInVwZGF0ZUZvbGRJbmZvIiwiZm9sZE9wdGlvbiIsInZwIiwiZm9sZGVkIiwiY2hhbmdlVXBkYXRlIiwiZm9sZE9uQ2hhbmdlVGltZVNwYW4iLCJ1cGRhdGVWaWV3cG9ydFRpbWVTcGFuIiwic3RhcnRUb2tlbiIsImVuZFRva2VuIiwibGluZVRleHQiLCJuZXh0T3BlbiIsImxpbmVJbmRlbnQiLCJzcGFjZVRvIiwibXlJbmRlbnQiLCJsYXN0TGluZUluRm9sZCIsImZpbmRPcGVuaW5nIiwib3BlbkNoIiwiaGFzSW1wb3J0Iiwic2VtaSIsImhhcyIsImhhc0luY2x1ZGUiLCJtYXhEZXB0aCIsImlzSGVhZGVyIiwidG9rZW50eXBlIiwiaGVhZGVyTGV2ZWwiLCJsYXN0TGluZU5vIiwibmV4dE5leHRMaW5lIiwiZ2xvYmFsIiwibmV3bGluZSIsImZlbmNlcyIsIm5vb3AiLCJucHRhYmxlIiwiZGVmIiwibGhlYWRpbmciLCJwYXJhZ3JhcGgiLCJMZXhlciIsImxpbmtzIiwicnVsZXMiLCJfbGFiZWwiLCJfdGl0bGUiLCJnZXRSZWdleCIsIl90YWciLCJfY29tbWVudCIsIm1lcmdlIiwibG9vc2UiLCJjYXAiLCJidWxsIiwibGlzdFN0YXJ0IiwibGlzdEl0ZW1zIiwiaXNvcmRlcmVkIiwiaXN0YXNrIiwiaXNjaGVja2VkIiwicnRyaW0iLCJzcGxpdENlbGxzIiwiY2VsbHMiLCJvcmRlcmVkIiwidGFzayIsImNoZWNrZWQiLCJzYW5pdGl6ZXIiLCJlc2NhcGUiLCJhdXRvbGluayIsInJlZmxpbmsiLCJub2xpbmsiLCJkZWwiLCJJbmxpbmVMZXhlciIsInJlbmRlcmVyIiwiUmVuZGVyZXIiLCJUZXh0UmVuZGVyZXIiLCJQYXJzZXIiLCJlbmNvZGUiLCJ1bmVzY2FwZSIsInJlc29sdmVVcmwiLCJiYXNlVXJscyIsIl9lc2NhcGVzIiwiX3NjaGVtZSIsIl9lbWFpbCIsIl9hdHRyaWJ1dGUiLCJfaHJlZiIsIl9iYWNrcGVkYWwiLCJwcmV2Q2FwWmVybyIsIm1hbmdsZSIsImluTGluayIsInRyaW0iLCJvdXRwdXRMaW5rIiwiZXNjYXBlcyIsImNvZGVzcGFuIiwicmFuZG9tIiwibGFuZ1ByZWZpeCIsInJhdyIsImhlYWRlcklkcyIsImhlYWRlclByZWZpeCIsInhodG1sIiwibGlzdGl0ZW0iLCJjaGVja2JveCIsInRhYmxlcm93IiwidGFibGVjZWxsIiwiZmxhZ3MiLCJwcm90IiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwib3JpZ2luSW5kZXBlbmRlbnRVcmwiLCJlbmNvZGVVUkkiLCJpbmxpbmVUZXh0IiwicGFyc2VUZXh0Iiwicm93IiwiY2VsbCIsInRhYmxlUm93IiwiY3VyciIsInN1ZmZMZW4iLCJjdXJyQ2hhciIsImNhbGxiYWNrIiwicGVuZGluZyIsImVyciIsIm1lc3NhZ2UiLCJzaWxlbnQiLCJnZXREZWZhdWx0cyIsImxleGVyIiwiaW5saW5lTGV4ZXIiLCJGdW5jdGlvbiIsImV2YWwiLCJyZWdpc3Rlckxhbmd1YWdlIiwiQXJyYXlQcm90byIsIm9iamVjdEtleXMiLCJsYW5ndWFnZXMiLCJhbGlhc2VzIiwibm9IaWdobGlnaHRSZSIsImxhbmd1YWdlUHJlZml4UmUiLCJmaXhNYXJrdXBSZSIsInNwYW5FbmRUYWciLCJjbGFzc1ByZWZpeCIsInRhYlJlcGxhY2UiLCJ1c2VCUiIsInRlc3RSZSIsInJlIiwibGV4ZW1lIiwiaXNOb3RIaWdobGlnaHRlZCIsImluaGVyaXQiLCJvYmplY3RzIiwibm9kZVN0cmVhbSIsIl9ub2RlU3RyZWFtIiwiY29tcGlsZUxhbmd1YWdlIiwicmVTdHIiLCJsYW5nUmUiLCJjYXNlX2luc2Vuc2l0aXZlIiwiY29tcGlsZU1vZGUiLCJjb21waWxlZCIsImJlZ2luS2V5d29yZHMiLCJjb21waWxlZF9rZXl3b3JkcyIsImZsYXR0ZW4iLCJwYWlyIiwibGV4ZW1lc1JlIiwibGV4ZW1lcyIsImJlZ2luUmUiLCJlbmRzV2l0aFBhcmVudCIsImVuZFJlIiwidGVybWluYXRvcl9lbmQiLCJpbGxlZ2FsIiwiaWxsZWdhbFJlIiwicmVsZXZhbmNlIiwidmFyaWFudHMiLCJjYWNoZWRfdmFyaWFudHMiLCJ2YXJpYW50IiwiZXhwYW5kX21vZGUiLCJzdGFydHMiLCJ0ZXJtaW5hdG9ycyIsIkJvb2xlYW4iLCJpZ25vcmVfaWxsZWdhbHMiLCJjb250aW51YXRpb24iLCJrZXl3b3JkTWF0Y2giLCJtYXRjaF9zdHIiLCJidWlsZFNwYW4iLCJjbGFzc25hbWUiLCJpbnNpZGVTcGFuIiwibGVhdmVPcGVuIiwibm9QcmVmaXgiLCJvcGVuU3BhbiIsImNsb3NlU3BhbiIsInByb2Nlc3NCdWZmZXIiLCJzdWJMYW5ndWFnZSIsImV4cGxpY2l0IiwibW9kZV9idWZmZXIiLCJjb250aW51YXRpb25zIiwicHJvY2Vzc1N1Ykxhbmd1YWdlIiwia2V5d29yZF9tYXRjaCIsImxhc3RfaW5kZXgiLCJwcm9jZXNzS2V5d29yZHMiLCJzdGFydE5ld01vZGUiLCJwcm9jZXNzTGV4ZW1lIiwiYnVmZmVyIiwibmV3X21vZGUiLCJzdWJNb2RlIiwiZXhjbHVkZUJlZ2luIiwicmV0dXJuQmVnaW4iLCJlbmRfbW9kZSIsImVuZE9mTW9kZSIsImVuZHNQYXJlbnQiLCJyZXR1cm5FbmQiLCJleGNsdWRlRW5kIiwiaXNJbGxlZ2FsIiwiZ2V0TGFuZ3VhZ2UiLCJsYW5ndWFnZVN1YnNldCIsInNlY29uZF9iZXN0IiwiZml4TWFya3VwIiwicDEiLCJoaWdobGlnaHRCbG9jayIsIm9yaWdpbmFsU3RyZWFtIiwicmVzdWx0Tm9kZSIsIl9jbGFzcyIsImJsb2NrTGFuZ3VhZ2UiLCJjcmVhdGVFbGVtZW50TlMiLCJvcmlnaW5hbCIsInByb2Nlc3NlZCIsIm5vZGVTdGFjayIsInNlbGVjdFN0cmVhbSIsImF0dHJpYnV0ZXMiLCJyZW5kZXIiLCJtZXJnZVN0cmVhbXMiLCJwcmV2Q2xhc3NOYW1lIiwiY3VycmVudExhbmciLCJyZXN1bHRMYW5nIiwiYnVpbGRDbGFzc05hbWUiLCJpbml0SGlnaGxpZ2h0aW5nIiwiY2FsbGVkIiwiYmxvY2tzIiwicXVlcnlTZWxlY3RvckFsbCIsImNvbmZpZ3VyZSIsInVzZXJfb3B0aW9ucyIsImluaXRIaWdobGlnaHRpbmdPbkxvYWQiLCJsaXN0TGFuZ3VhZ2VzIiwiSURFTlRfUkUiLCJVTkRFUlNDT1JFX0lERU5UX1JFIiwiTlVNQkVSX1JFIiwiQ19OVU1CRVJfUkUiLCJCSU5BUllfTlVNQkVSX1JFIiwiUkVfU1RBUlRFUlNfUkUiLCJCQUNLU0xBU0hfRVNDQVBFIiwiQVBPU19TVFJJTkdfTU9ERSIsIlFVT1RFX1NUUklOR19NT0RFIiwiUEhSQVNBTF9XT1JEU19NT0RFIiwiQ09NTUVOVCIsImluaGVyaXRzIiwiQ19MSU5FX0NPTU1FTlRfTU9ERSIsIkNfQkxPQ0tfQ09NTUVOVF9NT0RFIiwiSEFTSF9DT01NRU5UX01PREUiLCJOVU1CRVJfTU9ERSIsIkNfTlVNQkVSX01PREUiLCJCSU5BUllfTlVNQkVSX01PREUiLCJDU1NfTlVNQkVSX01PREUiLCJSRUdFWFBfTU9ERSIsIlRJVExFX01PREUiLCJVTkRFUlNDT1JFX1RJVExFX01PREUiLCJNRVRIT0RfR1VBUkQiLCJLRVlXT1JEIiwidjdfa2V5d29yZHMiLCJMSVRFUkFMIiwiTlVNQkVSUyIsIlNUUklOR1MiLCJEQVRFIiwiQ09NTUVOVFMiLCJrZXl3b3JkIiwiYnVpbHRfaW4iLCJ2N19zeXN0ZW1fY29uc3RhbnRzIiwidjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzIiwidjhfc2hhcmVkX29iamVjdCIsImxpdGVyYWwiLCJtZXRhLWtleXdvcmQiLCJ2N19tZXRhX2tleXdvcmRzIiwicmVnZXhlcyIsImNvbW1lbnRNb2RlIiwicnVsZURlY2xhcmF0aW9uTW9kZSIsIkFTM19SRVNUX0FSR19NT0RFIiwiSURfUkVHRVgiLCJWQVJfREVDTFMiLCJOVU1CRVIiLCJub21hcmt1cCIsIlNUUklORyIsIlBBUkFNUyIsIkNPTU1FTlRfTU9ERV8xIiwiQ1BQX1BSSU1JVElWRV9UWVBFUyIsIlBSRVBST0NFU1NPUiIsIkZVTkNUSU9OX1RJVExFIiwiQ1BQX0tFWVdPUkRTIiwiRVhQUkVTU0lPTl9DT05UQUlOUyIsInByZXByb2Nlc3NvciIsInN0cmluZ3MiLCJDUFAiLCJUQUdfSU5URVJOQUxTIiwiS0VZV09SRFMiLCJCQUNLVElDS19FU0NBUEUiLCJWQVJJQUJMRSIsIlZBUiIsIlFVT1RFX1NUUklORyIsIkNPTU1FTlRfTU9ERVMiLCJDSEFSX1NUUklORyIsIlBST0NFRFVSRSIsIk9CSkVDVCIsIlNVQlNUIiwiRVhQUkVTU0lPTlMiLCJTWU1CT0xfUkUiLCJTWU1CT0wiLCJDT0xMRUNUSU9OIiwiSElOVCIsIkhJTlRfQ09MIiwiS0VZIiwiTElTVCIsIkJPRFkiLCJOQU1FIiwiYnVpbHRpbi1uYW1lIiwiREVGQVVMVF9DT05UQUlOUyIsIkpTX0lERU5UX1JFIiwiVElUTEUiLCJDT01NQU5EUyIsIk5VTV9TVUZGSVgiLCJDUllTVEFMX01FVEhPRF9SRSIsIkNSWVNUQUxfS0VZV09SRFMiLCJFWFBBTlNJT04iLCJyZWN1cnNpdmVQYXJlbiIsIkNSWVNUQUxfREVGQVVMVF9DT05UQUlOUyIsIlZFUkJBVElNX1NUUklORyIsIlZFUkJBVElNX1NUUklOR19OT19MRiIsIlNVQlNUX05PX0xGIiwiSU5URVJQT0xBVEVEX1NUUklORyIsIklOVEVSUE9MQVRFRF9WRVJCQVRJTV9TVFJJTkciLCJJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGIiwiVFlQRV9JREVOVF9SRSIsIlJVTEUiLCJpbnRlZ2VyX3JlIiwiZXNjYXBlX3NlcXVlbmNlX3JlIiwiRF9JTlRFR0VSX01PREUiLCJEX0ZMT0FUX01PREUiLCJEX0NIQVJBQ1RFUl9NT0RFIiwiRF9TVFJJTkdfTU9ERSIsIkRfTkVTVElOR19DT01NRU5UX01PREUiLCJESVJFQ1RJVkUiLCJDTEFTUyIsIkZVTkNUSU9OIiwiRklMVEVSIiwiRFRTX1JFRkVSRU5DRSIsIkRUU19LRVlXT1JEIiwiRFRTX0xBQkVMIiwiRFRTX0NFTExfUFJPUEVSVFkiLCJEVFNfTk9ERSIsIkVMSVhJUl9JREVOVF9SRSIsIkVMSVhJUl9LRVlXT1JEUyIsIkVMSVhJUl9ERUZBVUxUX0NPTlRBSU5TIiwiQ09OU1RSVUNUT1IiLCJSVUJZX01FVEhPRF9SRSIsIlJVQllfS0VZV09SRFMiLCJZQVJET0NUQUciLCJJUkJfT0JKRUNUIiwiUlVCWV9ERUZBVUxUX0NPTlRBSU5TIiwiSVJCX0RFRkFVTFQiLCJCQVNJQ19BVE9NX1JFIiwiRlVOQ1RJT05fTkFNRV9SRSIsIkVSTEFOR19SRVNFUlZFRCIsIk5BTUVEX0ZVTiIsIkZVTkNUSU9OX0NBTEwiLCJUVVBMRSIsIlZBUjEiLCJWQVIyIiwiUkVDT1JEX0FDQ0VTUyIsIkJMT0NLX1NUQVRFTUVOVFMiLCJCQVNJQ19NT0RFUyIsIk1FVEhPRCIsIlRZUEVQQVJBTSIsImJ1aWx0LWluIiwiU1lNQk9MUyIsIlFTVFIiLCJBU1NJR05NRU5UIiwiREVTQ1RFWFQiLCJQQVJTRV9QQVJBTVMiLCJHQ09ERV9DT0RFIiwiR09fS0VZV09SRFMiLCJCVUlMVF9JTlMiLCJQUkFHTUEiLCJUQUdfSU5OQVJEUyIsIlZFUlNJT04iLCJKQVZBX05VTUJFUl9NT0RFIiwiVEVNUExBVEVfU1RSSU5HIiwiUEFSQU1TX0NPTlRBSU5TIiwiUEFSQU1TQkxPQ0siLCJMSVRFUkFMUyIsIlRZUEVTIiwiVkFMVUVfQ09OVEFJTkVSIiwiQVJSQVkiLCJWQVJJQUJMRV9OQU1FX1JFIiwiREVGQVVMVCIsIklOVEVSUE9MQVRJT04iLCJJTlRFUlBPTEFURURfVkFSSUFCTEUiLCJDT01NQU5EIiwiTUFDUk9DQUxMIiwiTEFCRUwiLCJBTk5PVEFUSU9OX1VTRV9TSVRFIiwiQU5OT1RBVElPTiIsIkxBU1NPX0NMT1NFX1JFIiwiTEFTU09fS0VZV09SRFMiLCJIVE1MX0NPTU1FTlQiLCJMQVNTT19OT1BST0NFU1MiLCJMQVNTT19TVEFSVCIsIkxBU1NPX0RBVEFNRU1CRVIiLCJMQVNTT19DT0RFIiwiTEFTU09fSURFTlRfUkUiLCJJTlRFUlBfSURFTlRfUkUiLCJSVUxFUyIsIlZBTFVFIiwiU1RSSU5HX01PREUiLCJJREVOVF9NT0RFIiwiUEFSRU5TX01PREUiLCJWQUxVRV9XSVRIX1JVTEVTRVRTIiwiTUlYSU5fR1VBUkRfTU9ERSIsIlJVTEVfTU9ERSIsIkFUX1JVTEVfTU9ERSIsIlZBUl9SVUxFX01PREUiLCJTRUxFQ1RPUl9NT0RFIiwiTElTUF9JREVOVF9SRSIsIkxJU1BfU0lNUExFX05VTUJFUl9SRSIsIklERU5UIiwiTUVDIiwiUVVPVEVEIiwiUVVPVEVEX0FUT00iLCJUSVRMRTEiLCJUSVRMRTIiLCJTVUJTVF9TSU1QTEUiLCJpZGVudGlmaWVyIiwiTFNMX1NUUklOR1MiLCJMU0xfTlVNQkVSUyIsIkxPTkdfQlJBQ0tFVFMiLCJGVU5DIiwiVkFSX0FTU0lHIiwiVEFSR0VUIiwiQ09NTU9OX0NPTlRBSU5TIiwiVFJBTlNQT1NFIiwic3ltYm9sIiwiQVRPTSIsIlBFUkxfS0VZV09SRFMiLCJTVFJJTkdfQ09OVEFJTlMiLCJQRVJMX0RFRkFVTFRfQ09OVEFJTlMiLCJOSVhfS0VZV09SRFMiLCJBTlRJUVVPVEUiLCJERUZJTkVTIiwiVkFSSUFCTEVTIiwiTEFOR1VBR0VTIiwiTEVYRU1FUyIsIkNMQVNTX0tFWVdPUkRTIiwiU1BFQ0lBTF9WQVJTIiwiRlVOQ1RJT05TIiwiT1hZR0VORV9LRVlXT1JEUyIsIkNVUkxZX0NPTU1FTlQiLCJQQVJFTl9DT01NRU5UIiwiQ1VSTFlfU1VCQ09NTUVOVCIsIlNJTkdMRV9RVU9URV9DSEFSX01PREUiLCJUWVBFX05BTUUiLCJQUklNRURfTkFNRSIsIlBTX0NPTU1FTlQiLCJQQVJFTlRFRCIsIkxJTkVfQ09NTUVOVCIsIkJBQ0tUSUNLX1NUUklORyIsIlBST01QVCIsIlFNTF9JREVOVF9SRSIsIklEX0lEIiwiUU1MX0FUVFJJQlVURSIsIlFNTF9PQkpFQ1QiLCJJREVOVElGSUVSIiwiUFJPUEVSVFkiLCJTVEFURU1FTlRTIiwiQVBPU19TVFJJTkciLCJCVUlMVElOUyIsIlRZUEUiLCJTQ0hFTUVfSURFTlRfUkUiLCJTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSIsIlFVT1RFRF9JREVOVCIsIlFVT1RFRF9MSVNUIiwiSEVYQ09MT1IiLCJzbWFsaV9pbnN0cl9sb3dfcHJpbyIsIkNIQVIiLCJWQVJfSURFTlRfUkUiLCJDT01NRU5UX01PREUiLCJzZWxlY3Rvci10YWciLCJIRVhfQ09MT1IiLCJUQUdfRU5EIiwiU1dJRlRfS0VZV09SRFMiLCJCTE9DS19DT01NRU5UIiwia2V5UHJlZml4IiwiVFBJRCIsIlRQTEFCRUwiLCJGVU5DVElPTl9OQU1FUyIsIlRBR1MiLCJYTF9LRVlXT1JEUyIsIkRPVUJMRV9RVU9URV9URVhUIiwiSU1QT1JUIiwiRlVOQ1RJT05fREVGSU5JVElPTiIsIkNPTlRBSU5TIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUFBQSxFQUFBQyxHQUNBLGlCQUFBQyxTQUFBLGlCQUFBQyxPQUNBQSxPQUFBRCxRQUFBRCxJQUNBLG1CQUFBRyxlQUFBQyxJQUNBRCxVQUFBSCxHQUNBLGlCQUFBQyxRQUNBQSxRQUFBLGFBQUFELElBRUFELEVBQUEsYUFBQUMsSUFSQSxDQVNDSyxPQUFBLFdBQ0QsbUJDVEEsSUFBQUMsS0FHQSxTQUFBQyxFQUFBQyxHQUdBLEdBQUFGLEVBQUFFLEdBQ0EsT0FBQUYsRUFBQUUsR0FBQVAsUUFHQSxJQUFBQyxFQUFBSSxFQUFBRSxJQUNBQyxFQUFBRCxFQUNBRSxHQUFBLEVBQ0FULFlBVUEsT0FOQVUsRUFBQUgsR0FBQUksS0FBQVYsRUFBQUQsUUFBQUMsSUFBQUQsUUFBQU0sR0FHQUwsRUFBQVEsR0FBQSxFQUdBUixFQUFBRCxRQTBEQSxPQXJEQU0sRUFBQU0sRUFBQUYsRUFHQUosRUFBQU8sRUFBQVIsRUFHQUMsRUFBQVEsRUFBQSxTQUFBZCxFQUFBZSxFQUFBQyxHQUNBVixFQUFBVyxFQUFBakIsRUFBQWUsSUFDQUcsT0FBQUMsZUFBQW5CLEVBQUFlLEdBQTBDSyxZQUFBLEVBQUFDLElBQUFMLEtBSzFDVixFQUFBZ0IsRUFBQSxTQUFBdEIsR0FDQSxvQkFBQXVCLGVBQUFDLGFBQ0FOLE9BQUFDLGVBQUFuQixFQUFBdUIsT0FBQUMsYUFBd0RDLE1BQUEsV0FFeERQLE9BQUFDLGVBQUFuQixFQUFBLGNBQWlEeUIsT0FBQSxLQVFqRG5CLEVBQUFvQixFQUFBLFNBQUFELEVBQUFFLEdBRUEsR0FEQSxFQUFBQSxJQUFBRixFQUFBbkIsRUFBQW1CLElBQ0EsRUFBQUUsRUFBQSxPQUFBRixFQUNBLEtBQUFFLEdBQUEsaUJBQUFGLFFBQUFHLFdBQUEsT0FBQUgsRUFDQSxJQUFBSSxFQUFBWCxPQUFBWSxPQUFBLE1BR0EsR0FGQXhCLEVBQUFnQixFQUFBTyxHQUNBWCxPQUFBQyxlQUFBVSxFQUFBLFdBQXlDVCxZQUFBLEVBQUFLLFVBQ3pDLEVBQUFFLEdBQUEsaUJBQUFGLEVBQUEsUUFBQU0sS0FBQU4sRUFBQW5CLEVBQUFRLEVBQUFlLEVBQUFFLEVBQUEsU0FBQUEsR0FBZ0gsT0FBQU4sRUFBQU0sSUFBcUJDLEtBQUEsS0FBQUQsSUFDckksT0FBQUYsR0FJQXZCLEVBQUEyQixFQUFBLFNBQUFoQyxHQUNBLElBQUFlLEVBQUFmLEtBQUEyQixXQUNBLFdBQTJCLE9BQUEzQixFQUFBLFNBQzNCLFdBQWlDLE9BQUFBLEdBRWpDLE9BREFLLEVBQUFRLEVBQUFFLEVBQUEsSUFBQUEsR0FDQUEsR0FJQVYsRUFBQVcsRUFBQSxTQUFBaUIsRUFBQUMsR0FBc0QsT0FBQWpCLE9BQUFrQixVQUFBQyxlQUFBMUIsS0FBQXVCLEVBQUFDLElBR3REN0IsRUFBQWdDLEVBQUEsR0FJQWhDLElBQUFpQyxFQUFBLHFCQ3hFNkR0QyxFQUFBRCxRQUc1RCxXQUFxQixhQUl0QixJQUFBd0MsRUFBQUMsVUFBQUQsVUFDQUUsRUFBQUQsVUFBQUMsU0FFQUMsRUFBQSxhQUFBQyxLQUFBSixHQUNBSyxFQUFBLFVBQUFELEtBQUFKLEdBQ0FNLEVBQUEsd0NBQXVDQyxLQUFBUCxHQUN2Q1EsRUFBQSxjQUFBRCxLQUFBUCxHQUNBUyxFQUFBSixHQUFBQyxHQUFBRSxFQUNBRSxFQUFBRCxJQUFBSixFQUFBTSxTQUFBQyxjQUFBLElBQUFKLEdBQUFGLEdBQUEsSUFDQU8sR0FBQUwsR0FBQSxXQUFBSixLQUFBSixHQUNBYyxFQUFBRCxHQUFBLGVBQUFULEtBQUFKLEdBQ0FlLEdBQUFQLEdBQUEsV0FBQUosS0FBQUosR0FDQWdCLEVBQUEsVUFBQVosS0FBQUosR0FDQWlCLEVBQUEsaUJBQUFiLEtBQUFILFVBQUFpQixRQUNBQyxFQUFBLCtCQUFBZixLQUFBSixHQUNBb0IsRUFBQSxZQUFBaEIsS0FBQUosR0FFQXFCLEdBQUFiLEdBQUEsY0FBQUosS0FBQUosSUFBQSxjQUFBSSxLQUFBSixHQUNBc0IsRUFBQSxVQUFBbEIsS0FBQUosR0FFQXVCLEVBQUFGLEdBQUFDLEdBQUEsbURBQUFsQixLQUFBSixHQUNBd0IsRUFBQUgsR0FBQSxNQUFBakIsS0FBQUYsR0FDQXVCLEVBQUEsV0FBQXJCLEtBQUFKLEdBQ0EwQixFQUFBLE9BQUF0QixLQUFBRixHQUVBeUIsRUFBQVgsR0FBQWhCLEVBQUE0QixNQUFBLHVCQUNBRCxJQUFxQkEsRUFBQUUsT0FBQUYsRUFBQSxLQUNyQkEsTUFBQSxLQUE2Q1gsR0FBQSxFQUFnQkgsR0FBQSxHQUU3RCxJQUFBaUIsRUFBQU4sSUFBQVYsR0FBQUUsSUFBQSxNQUFBVyxLQUFBLFFBQ0FJLEVBQUE1QixHQUFBTSxHQUFBQyxHQUFBLEVBRUEsU0FBQXNCLEVBQUFDLEdBQXlCLFdBQUFDLE9BQUEsVUFBQUQsRUFBQSxpQkFFekIsSUFrQ0FFLEVBbENBQyxFQUFBLFNBQUFDLEVBQUFKLEdBQ0EsSUFBQUssRUFBQUQsRUFBQUUsVUFDQVgsRUFBQUksRUFBQUMsR0FBQTFCLEtBQUErQixHQUNBLEdBQUFWLEVBQUEsQ0FDQSxJQUFBWSxFQUFBRixFQUFBRyxNQUFBYixFQUFBYyxNQUFBZCxFQUFBLEdBQUFlLFFBQ0FOLEVBQUFFLFVBQUFELEVBQUFHLE1BQUEsRUFBQWIsRUFBQWMsUUFBQUYsRUFBQVosRUFBQSxHQUFBWSxFQUFBLE1BSUEsU0FBQUksRUFBQUMsR0FDQSxRQUFBQyxFQUFBRCxFQUFBRSxXQUFBSixPQUF1Q0csRUFBQSxJQUFXQSxFQUM3Q0QsRUFBQUcsWUFBQUgsRUFBQUksWUFDTCxPQUFBSixFQUdBLFNBQUFLLEVBQUFDLEVBQUFOLEdBQ0EsT0FBQUQsRUFBQU8sR0FBQUMsWUFBQVAsR0FHQSxTQUFBUSxFQUFBQyxFQUFBQyxFQUFBaEIsRUFBQWlCLEdBQ0EsSUFBQVgsRUFBQWxDLFNBQUE4QyxjQUFBSCxHQUdBLEdBRkFmLElBQWtCTSxFQUFBTixhQUNsQmlCLElBQWNYLEVBQUFXLE1BQUFFLFFBQUFGLEdBQ2QsaUJBQUFELEVBQW1DVixFQUFBTyxZQUFBekMsU0FBQWdELGVBQUFKLFNBQ25DLEdBQUFBLEVBQXFCLFFBQUF2RixFQUFBLEVBQWdCQSxFQUFBdUYsRUFBQVosU0FBb0IzRSxFQUFPNkUsRUFBQU8sWUFBQUcsRUFBQXZGLElBQ2hFLE9BQUE2RSxFQUdBLFNBQUFlLEVBQUFOLEVBQUFDLEVBQUFoQixFQUFBaUIsR0FDQSxJQUFBWCxFQUFBUSxFQUFBQyxFQUFBQyxFQUFBaEIsRUFBQWlCLEdBRUEsT0FEQVgsRUFBQWdCLGFBQUEsdUJBQ0FoQixFQW9CQSxTQUFBaUIsRUFBQVgsRUFBQVksR0FHQSxHQUZBLEdBQUFBLEVBQUFDLFdBQ0tELElBQUFFLFlBQ0xkLEVBQUFXLFNBQ0ssT0FBQVgsRUFBQVcsU0FBQUMsR0FDTCxHQUVBLEdBREEsSUFBQUEsRUFBQUMsV0FBK0JELElBQUFHLE1BQy9CSCxHQUFBWixFQUEwQixlQUN2QlksSUFBQUUsWUFHSCxTQUFBRSxJQUlBLElBQUFDLEVBQ0EsSUFDQUEsRUFBQXpELFNBQUF5RCxjQUNHLE1BQUF2QixHQUNIdUIsRUFBQXpELFNBQUEwRCxNQUFBLEtBRUEsS0FBQUQsS0FBQUUsWUFBQUYsRUFBQUUsV0FBQUYsZUFDS0EsSUFBQUUsV0FBQUYsY0FDTCxPQUFBQSxFQUdBLFNBQUFHLEVBQUFsQyxFQUFBSixHQUNBLElBQUFLLEVBQUFELEVBQUFFLFVBQ0FQLEVBQUFDLEdBQUE3QixLQUFBa0MsS0FBc0NELEVBQUFFLFlBQUFELEVBQUEsUUFBQUwsR0FFdEMsU0FBQXVDLEVBQUFDLEVBQUFDLEdBRUEsSUFEQSxJQUFBQyxFQUFBRixFQUFBRyxNQUFBLEtBQ0E1RyxFQUFBLEVBQWlCQSxFQUFBMkcsRUFBQWhDLE9BQWUzRSxJQUMzQjJHLEVBQUEzRyxLQUFBZ0UsRUFBQTJDLEVBQUEzRyxJQUFBb0MsS0FBQXNFLEtBQTBDQSxHQUFBLElBQUFDLEVBQUEzRyxJQUMvQyxPQUFBMEcsRUFsRDJCdkMsRUFBM0J4QixTQUFBa0UsWUFBMkIsU0FBQXhDLEVBQUF5QyxFQUFBQyxFQUFBQyxHQUMzQixJQUFBbEcsRUFBQTZCLFNBQUFrRSxjQUdBLE9BRkEvRixFQUFBbUcsT0FBQUQsR0FBQTNDLEVBQUEwQyxHQUNBakcsRUFBQW9HLFNBQUE3QyxFQUFBeUMsR0FDQWhHLEdBRU0sU0FBQXVELEVBQUF5QyxFQUFBQyxHQUNOLElBQUFqRyxFQUFBNkIsU0FBQTBELEtBQUFjLGtCQUNBLElBQU9yRyxFQUFBc0csa0JBQUEvQyxFQUFBNEIsWUFDUCxNQUFBcEIsR0FBWSxPQUFBL0QsRUFJWixPQUhBQSxFQUFBdUcsVUFBQSxHQUNBdkcsRUFBQXdHLFFBQUEsWUFBQVAsR0FDQWpHLEVBQUF5RyxVQUFBLFlBQUFULEdBQ0FoRyxHQXdDQSxJQUFBMEcsRUFBQSxTQUFBbkQsR0FBa0NBLEVBQUFvRCxVQU1sQyxTQUFBakcsRUFBQWtHLEdBQ0EsSUFBQUMsRUFBQUMsTUFBQWhHLFVBQUE2QyxNQUFBdEUsS0FBQTBILFVBQUEsR0FDQSxrQkFBb0IsT0FBQUgsRUFBQUksTUFBQSxLQUFBSCxJQUdwQixTQUFBSSxFQUFBQyxFQUFBQyxFQUFBQyxHQUVBLFFBQUFDLEtBREFGLElBQWdCQSxNQUNoQkQsR0FDS0EsRUFBQW5HLGVBQUFzRyxLQUFBLElBQUFELEdBQUFELEVBQUFwRyxlQUFBc0csS0FDRUYsRUFBQUUsR0FBQUgsRUFBQUcsSUFDUCxPQUFBRixFQUtBLFNBQUFHLEVBQUFDLEVBQUF0QixFQUFBdUIsRUFBQUMsRUFBQUMsR0FDQSxNQUFBekIsSUFFQSxJQURBQSxFQUFBc0IsRUFBQUksT0FBQSxrQkFDb0IxQixFQUFBc0IsRUFBQTFELFFBRXBCLFFBQUEzRSxFQUFBdUksR0FBQSxFQUFBOUcsRUFBQStHLEdBQUEsSUFBcUQsQ0FDckQsSUFBQUUsRUFBQUwsRUFBQU0sUUFBQSxLQUFBM0ksR0FDQSxHQUFBMEksRUFBQSxHQUFBQSxHQUFBM0IsRUFDTyxPQUFBdEYsR0FBQXNGLEVBQUEvRyxHQUNQeUIsR0FBQWlILEVBQUExSSxFQUNBeUIsR0FBQTZHLEVBQUE3RyxFQUFBNkcsRUFDQXRJLEVBQUEwSSxFQUFBLEdBL0JBckYsRUFDR21FLEVBQUEsU0FBQW5ELEdBQStCQSxFQUFBdUUsZUFBQSxFQUF5QnZFLEVBQUF3RSxhQUFBeEUsRUFBQXBELE1BQUEwRCxRQUMzRGxDLElBQ0crRSxFQUFBLFNBQUFuRCxHQUErQixJQUFNQSxFQUFBb0QsU0FBaUIsTUFBQXFCLE9BZ0N6RCxJQUFBQyxFQUFBLFdBQTBCQyxLQUFBQyxHQUFBLE1BTTFCLFNBQUFOLEVBQUFPLEVBQUE3RCxHQUNBLFFBQUFyRixFQUFBLEVBQWlCQSxFQUFBa0osRUFBQXZFLFNBQWtCM0UsRUFDOUIsR0FBQWtKLEVBQUFsSixJQUFBcUYsRUFBdUIsT0FBQXJGLEVBQzVCLFNBUkErSSxFQUFBbkgsVUFBQXVILElBQUEsU0FBQUMsRUFBQTFCLEdBQ0EyQixhQUFBTCxLQUFBQyxJQUNBRCxLQUFBQyxHQUFBSyxXQUFBNUIsRUFBQTBCLElBVUEsSUFBQUcsRUFBQSxHQUlBQyxHQUFZQyxTQUFBLFdBQXFCLDBCQUdqQ0MsR0FBc0JDLFFBQUEsR0FDdEJDLEdBQWlCQyxPQUFBLFVBQ2pCQyxHQUFnQkQsT0FBQSxTQUloQixTQUFBRSxFQUFBMUIsRUFBQTJCLEVBQUExQixHQUNBLFFBQUEyQixFQUFBLEVBQUFDLEVBQUEsSUFBNkIsQ0FDN0IsSUFBQXhCLEVBQUFMLEVBQUFNLFFBQUEsS0FBQXNCLElBQ0EsR0FBQXZCLElBQXdCQSxFQUFBTCxFQUFBMUQsUUFDeEIsSUFBQXdGLEVBQUF6QixFQUFBdUIsRUFDQSxHQUFBdkIsR0FBQUwsRUFBQTFELFFBQUF1RixFQUFBQyxHQUFBSCxFQUNPLE9BQUFDLEVBQUFHLEtBQUFDLElBQUFGLEVBQUFILEVBQUFFLEdBSVAsR0FIQUEsR0FBQXhCLEVBQUF1QixFQUVBQSxFQUFBdkIsRUFBQSxHQURBd0IsR0FBQTVCLEVBQUE0QixFQUFBNUIsSUFFQTBCLEVBQXNCLE9BQUFDLEdBSXRCLElBQUFLLEdBQUEsSUFDQSxTQUFBQyxFQUFBOUksR0FDQSxLQUFBNkksRUFBQTNGLFFBQUFsRCxHQUNLNkksRUFBQUUsS0FBQUMsRUFBQUgsR0FBQSxLQUNMLE9BQUFBLEVBQUE3SSxHQUdBLFNBQUFnSixFQUFBQyxHQUFtQixPQUFBQSxJQUFBL0YsT0FBQSxHQUVuQixTQUFBZ0csRUFBQXpCLEVBQUF4QixHQUVBLElBREEsSUFBQWtELEtBQ0E1SyxFQUFBLEVBQWlCQSxFQUFBa0osRUFBQXZFLE9BQWtCM0UsSUFBTzRLLEVBQUE1SyxHQUFBMEgsRUFBQXdCLEVBQUFsSixNQUMxQyxPQUFBNEssRUFTQSxTQUFBQyxLQUVBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQ0EsSUFBQUMsRUFRQSxPQVBBdkssT0FBQVksT0FDQTJKLEVBQUF2SyxPQUFBWSxPQUFBeUosSUFFQUYsRUFBQWpKLFVBQUFtSixFQUNBRSxFQUFBLElBQUFKLEdBRUFHLEdBQWNqRCxFQUFBaUQsRUFBQUMsR0FDZEEsRUFHQSxJQUFBQyxFQUFBLDRHQUNBLFNBQUFDLEdBQUFDLEdBQ0EsV0FBQWhKLEtBQUFnSixNQUFBLE1BQ0FBLEVBQUFDLGVBQUFELEVBQUFFLGVBQUFKLEVBQUE5SSxLQUFBZ0osSUFFQSxTQUFBRyxHQUFBSCxFQUFBSSxHQUNBLE9BQUFBLEtBQ0FBLEVBQUFDLE9BQUE5QyxRQUFBLFdBQUF3QyxHQUFBQyxLQUNBSSxFQUFBcEosS0FBQWdKLEdBRmdCRCxHQUFBQyxHQUtoQixTQUFBTSxHQUFBMUQsR0FDQSxRQUFBdkcsS0FBQXVHLEVBQXNCLEdBQUFBLEVBQUFuRyxlQUFBSixJQUFBdUcsRUFBQXZHLEdBQXVDLFNBQzdELFNBUUEsSUFBQWtLLEdBQUEsNjREQUNBLFNBQUFDLEdBQUFSLEdBQThCLE9BQUFBLEVBQUFTLFdBQUEsU0FBQUYsR0FBQXZKLEtBQUFnSixHQUc5QixTQUFBVSxHQUFBQyxFQUFBOUIsRUFBQStCLEdBQ0EsTUFBQUEsRUFBQSxFQUFBL0IsRUFBQSxFQUFBQSxFQUFBOEIsRUFBQXBILFNBQUFpSCxHQUFBRyxFQUFBRSxPQUFBaEMsS0FBc0ZBLEdBQUErQixFQUN0RixPQUFBL0IsRUFNQSxTQUFBaUMsR0FBQUMsRUFBQUMsRUFBQUMsR0FJQSxJQURBLElBQUFMLEVBQUFJLEVBQUFDLEdBQUEsTUFDUyxDQUNULEdBQUFELEdBQUFDLEVBQXFCLE9BQUFELEVBQ3JCLElBQUFFLEdBQUFGLEVBQUFDLEdBQUEsRUFBQUUsRUFBQVAsRUFBQSxFQUFBNUIsS0FBQW9DLEtBQUFGLEdBQUFsQyxLQUFBcUMsTUFBQUgsR0FDQSxHQUFBQyxHQUFBSCxFQUFzQixPQUFBRCxFQUFBSSxHQUFBSCxFQUFBQyxFQUN0QkYsRUFBQUksR0FBb0JGLEVBQUFFLEVBQ1ZILEVBQUFHLEVBQUFQLEdBNEdWLFNBQUFVLEdBQUFDLEVBQUFsTCxHQUVBLElBREFBLEdBQUFrTCxFQUFBQyxPQUNBLEdBQUFuTCxHQUFBa0wsRUFBQUUsS0FBK0IsVUFBQUMsTUFBQSxxQkFBQXJMLEVBQUFrTCxFQUFBQyxPQUFBLHFCQUUvQixJQURBLElBQUFHLEVBQUFKLEdBQ0FJLEVBQUFDLE9BQ0EsUUFBQWhOLEVBQUEsS0FBb0JBLEVBQUEsQ0FDcEIsSUFBQStGLEVBQUFnSCxFQUFBRSxTQUFBak4sR0FBQWtOLEVBQUFuSCxFQUFBb0gsWUFDQSxHQUFBMUwsRUFBQXlMLEVBQUEsQ0FBbUJILEVBQUFoSCxFQUFlLE1BQ2xDdEUsR0FBQXlMLEVBR0EsT0FBQUgsRUFBQUMsTUFBQXZMLEdBS0EsU0FBQTJMLEdBQUFULEVBQUE3RixFQUFBQyxHQUNBLElBQUE2RCxLQUFBbkosRUFBQXFGLEVBQUF1RyxLQVFBLE9BUEFWLEVBQUFXLEtBQUF4RyxFQUFBdUcsS0FBQXRHLEVBQUFzRyxLQUFBLFdBQUFBLEdBQ0EsSUFBQUUsRUFBQUYsRUFBQUUsS0FDQTlMLEdBQUFzRixFQUFBc0csT0FBd0JFLElBQUE5SSxNQUFBLEVBQUFzQyxFQUFBcUUsS0FDeEIzSixHQUFBcUYsRUFBQXVHLE9BQTBCRSxJQUFBOUksTUFBQXFDLEVBQUFzRSxLQUMxQlIsRUFBQUosS0FBQStDLEtBQ0E5TCxJQUVBbUosRUFHQSxTQUFBNEMsR0FBQWIsRUFBQVAsRUFBQUMsR0FDQSxJQUFBekIsS0FFQSxPQURBK0IsRUFBQVcsS0FBQWxCLEVBQUFDLEVBQUEsU0FBQWdCLEdBQXNDekMsRUFBQUosS0FBQTZDLEVBQUFFLFFBQ3RDM0MsRUFLQSxTQUFBNkMsR0FBQUosRUFBQUssR0FDQSxJQUFBQyxFQUFBRCxFQUFBTCxFQUFBSyxPQUNBLEdBQUFDLEVBQWEsUUFBQWxNLEVBQUE0TCxFQUFtQjVMLEVBQUdBLElBQUEwRCxPQUFnQjFELEVBQUFpTSxRQUFBQyxFQUtuRCxTQUFBQyxHQUFBUCxHQUNBLFNBQUFBLEVBQUFsSSxPQUE0QixZQUU1QixJQURBLElBQUEwSSxFQUFBUixFQUFBbEksT0FBQTJJLEVBQUFuRixFQUFBa0YsRUFBQWIsTUFBQUssR0FDQU4sRUFBQWMsRUFBQTFJLE9BQThCNEgsRUFBT2MsRUFBQWQsTUFBQTVILE9BQ3JDLFFBQUFuRixFQUFBLEVBQ0ErTSxFQUFBRSxTQUFBak4sSUFBQTZOLElBRG9CN04sRUFFcEI4TixHQUFBZixFQUFBRSxTQUFBak4sR0FBQW1OLFlBR0EsT0FBQVcsRUFBQUQsRUFBQWpCLE1BS0EsU0FBQW1CLEdBQUFoQixFQUFBaUIsR0FDQSxJQUFBdk0sRUFBQXNMLEVBQUFILE1BQ0FxQixFQUFBLEdBQ0EsUUFBQUMsRUFBQSxFQUFxQkEsRUFBQW5CLEVBQUFFLFNBQUF0SSxTQUE2QnVKLEVBQUEsQ0FDbEQsSUFBQW5JLEVBQUFnSCxFQUFBRSxTQUFBaUIsR0FBQTlDLEVBQUFyRixFQUFBMkgsT0FDQSxHQUFBTSxFQUFBNUMsRUFBQSxDQUFtQjJCLEVBQUFoSCxFQUFlLFNBQUFrSSxFQUNsQ0QsR0FBQTVDLEVBQ0EzSixHQUFBc0UsRUFBQW9ILFlBRUEsT0FBQTFMLFNBQ0dzTCxFQUFBQyxPQUVILElBREEsSUFBQWhOLEVBQUEsRUFDUUEsRUFBQStNLEVBQUFDLE1BQUFySSxTQUF3QjNFLEVBQUEsQ0FDaEMsSUFBQXFOLEVBQUFOLEVBQUFDLE1BQUFoTixHQUFBbU8sRUFBQWQsRUFBQUssT0FDQSxHQUFBTSxFQUFBRyxFQUFpQixNQUNqQkgsR0FBQUcsRUFFQSxPQUFBMU0sRUFBQXpCLEVBR0EsU0FBQW9PLEdBQUF6QixFQUFBMU0sR0FBeUIsT0FBQUEsR0FBQTBNLEVBQUFDLE9BQUEzTSxFQUFBME0sRUFBQUMsTUFBQUQsRUFBQUUsS0FFekIsU0FBQXdCLEdBQUFDLEVBQUF0TyxHQUNBLE9BQUF1TyxPQUFBRCxFQUFBRSxvQkFBQXhPLEVBQUFzTyxFQUFBRyxrQkFJQSxTQUFBQyxHQUFBckIsRUFBQWpDLEVBQUF1RCxHQUdBLFFBRkEsSUFBQUEsTUFBQSxRQUVBM0YsZ0JBQUEwRixJQUErQixXQUFBQSxHQUFBckIsRUFBQWpDLEVBQUF1RCxHQUMvQjNGLEtBQUFxRSxPQUNBckUsS0FBQW9DLEtBQ0FwQyxLQUFBMkYsU0FLQSxTQUFBQyxHQUFBbkksRUFBQUMsR0FBb0IsT0FBQUQsRUFBQTRHLEtBQUEzRyxFQUFBMkcsTUFBQTVHLEVBQUEyRSxHQUFBMUUsRUFBQTBFLEdBRXBCLFNBQUF5RCxHQUFBcEksRUFBQUMsR0FBK0IsT0FBQUQsRUFBQWtJLFFBQUFqSSxFQUFBaUksUUFBQSxHQUFBQyxHQUFBbkksRUFBQUMsR0FFL0IsU0FBQW9JLEdBQUFDLEdBQXFCLE9BQUFMLEdBQUFLLEVBQUExQixLQUFBMEIsRUFBQTNELElBQ3JCLFNBQUE0RCxHQUFBdkksRUFBQUMsR0FBdUIsT0FBQWtJLEdBQUFuSSxFQUFBQyxHQUFBLEVBQUFBLEVBQUFELEVBQ3ZCLFNBQUF3SSxHQUFBeEksRUFBQUMsR0FBdUIsT0FBQWtJLEdBQUFuSSxFQUFBQyxHQUFBLEVBQUFELEVBQUFDLEVBSXZCLFNBQUF3SSxHQUFBdkMsRUFBQWxMLEdBQTJCLE9BQUEySSxLQUFBK0UsSUFBQXhDLEVBQUFDLE1BQUF4QyxLQUFBQyxJQUFBNUksRUFBQWtMLEVBQUFDLE1BQUFELEVBQUFFLEtBQUEsSUFDM0IsU0FBQXVDLEdBQUF6QyxFQUFBMUMsR0FDQSxHQUFBQSxFQUFBb0QsS0FBQVYsRUFBQUMsTUFBNkIsT0FBQThCLEdBQUEvQixFQUFBQyxNQUFBLEdBQzdCLElBQUF5QyxFQUFBMUMsRUFBQUMsTUFBQUQsRUFBQUUsS0FBQSxFQUNBLE9BQUE1QyxFQUFBb0QsS0FBQWdDLEVBQXdCWCxHQUFBVyxFQUFBM0MsR0FBQUMsRUFBQTBDLEdBQUE5QixLQUFBNUksUUFHeEIsU0FBQXNGLEVBQUFxRixHQUNBLElBQUFsRSxFQUFBbkIsRUFBQW1CLEdBQ0EsYUFBQUEsS0FBQWtFLEVBQW1DWixHQUFBekUsRUFBQW9ELEtBQUFpQyxHQUNuQ2xFLEVBQUEsRUFBb0JzRCxHQUFBekUsRUFBQW9ELEtBQUEsR0FDWnBELEVBTlJzRixDQUFBdEYsRUFBQXlDLEdBQUFDLEVBQUExQyxFQUFBb0QsTUFBQUUsS0FBQTVJLFFBUUEsU0FBQTZLLEdBQUE3QyxFQUFBekQsR0FFQSxJQURBLElBQUEwQixLQUNBNUssRUFBQSxFQUFpQkEsRUFBQWtKLEVBQUF2RSxPQUFrQjNFLElBQU80SyxFQUFBNUssR0FBQW9QLEdBQUF6QyxFQUFBekQsRUFBQWxKLElBQzFDLE9BQUE0SyxFQUlBLElBQUE2RSxJQUFBLEVBQ0FDLElBQUEsRUFZQSxTQUFBQyxHQUFBQyxFQUFBeEQsRUFBQUMsR0FDQXJELEtBQUE0RyxTQUNBNUcsS0FBQW9ELE9BQW1CcEQsS0FBQXFELEtBSW5CLFNBQUF3RCxHQUFBQyxFQUFBRixHQUNBLEdBQUFFLEVBQWMsUUFBQTlQLEVBQUEsRUFBZ0JBLEVBQUE4UCxFQUFBbkwsU0FBa0IzRSxFQUFBLENBQ2hELElBQUErUCxFQUFBRCxFQUFBOVAsR0FDQSxHQUFBK1AsRUFBQUgsVUFBZ0MsT0FBQUcsR0FLaEMsU0FBQUMsR0FBQUYsRUFBQUMsR0FFQSxJQURBLElBQUFqUCxFQUNBZCxFQUFBLEVBQWlCQSxFQUFBOFAsRUFBQW5MLFNBQWtCM0UsRUFDOUI4UCxFQUFBOVAsSUFBQStQLElBQXdCalAsV0FBQTBKLEtBQUFzRixFQUFBOVAsSUFDN0IsT0FBQWMsRUEwQ0EsU0FBQW1QLEdBQUF0RCxFQUFBdUQsR0FDQSxHQUFBQSxFQUFBQyxLQUFvQixZQUNwQixJQUFBQyxFQUFBaEMsR0FBQXpCLEVBQUF1RCxFQUFBOUQsS0FBQWlCLE9BQUFYLEdBQUFDLEVBQUF1RCxFQUFBOUQsS0FBQWlCLE1BQUFnRCxZQUNBQyxFQUFBbEMsR0FBQXpCLEVBQUF1RCxFQUFBN0QsR0FBQWdCLE9BQUFYLEdBQUFDLEVBQUF1RCxFQUFBN0QsR0FBQWdCLE1BQUFnRCxZQUNBLElBQUFELElBQUFFLEVBQThCLFlBRTlCLElBQUFDLEVBQUFMLEVBQUE5RCxLQUFBaEIsR0FBQW9GLEVBQUFOLEVBQUE3RCxHQUFBakIsR0FBQXFGLEVBQUEsR0FBQTdCLEdBQUFzQixFQUFBOUQsS0FBQThELEVBQUE3RCxJQUVBTyxFQXRDQSxTQUFBOEQsRUFBQUgsRUFBQUUsR0FDQSxJQUFBRSxFQUNBLEdBQUFELEVBQVksUUFBQTFRLEVBQUEsRUFBZ0JBLEVBQUEwUSxFQUFBL0wsU0FBZ0IzRSxFQUFBLENBQzVDLElBQUErUCxFQUFBVyxFQUFBMVEsR0FBQTRQLEVBQUFHLEVBQUFILE9BQ0FnQixFQUFBLE1BQUFiLEVBQUEzRCxPQUFBd0QsRUFBQWlCLGNBQUFkLEVBQUEzRCxNQUFBbUUsRUFBQVIsRUFBQTNELEtBQUFtRSxHQUNBLEdBQUFLLEdBQUFiLEVBQUEzRCxNQUFBbUUsR0FBQSxZQUFBWCxFQUFBa0IsUUFBQUwsSUFBQVYsRUFBQUgsT0FBQW1CLFlBQUEsQ0FDQSxJQUFBQyxFQUFBLE1BQUFqQixFQUFBMUQsS0FBQXVELEVBQUFxQixlQUFBbEIsRUFBQTFELElBQUFrRSxFQUFBUixFQUFBMUQsR0FBQWtFLElBQTBHSSxXQUFBbkcsS0FBQSxJQUFBbUYsR0FBQUMsRUFBQUcsRUFBQTNELEtBQUE0RSxFQUFBLEtBQUFqQixFQUFBMUQsTUFHMUcsT0FBQXNFLEVBNkJBTyxDQUFBZCxFQUFBRyxFQUFBRSxHQUNBcEIsRUE1QkEsU0FBQXFCLEVBQUFGLEVBQUFDLEdBQ0EsSUFBQUUsRUFDQSxHQUFBRCxFQUFZLFFBQUExUSxFQUFBLEVBQWdCQSxFQUFBMFEsRUFBQS9MLFNBQWdCM0UsRUFBQSxDQUM1QyxJQUFBK1AsRUFBQVcsRUFBQTFRLEdBQUE0UCxFQUFBRyxFQUFBSCxPQUNBb0IsRUFBQSxNQUFBakIsRUFBQTFELEtBQUF1RCxFQUFBcUIsZUFBQWxCLEVBQUExRCxJQUFBbUUsRUFBQVQsRUFBQTFELEdBQUFtRSxHQUNBLEdBQUFRLEdBQUFqQixFQUFBM0QsTUFBQW9FLEdBQUEsWUFBQVosRUFBQWtCLFFBQUFMLEdBQUFWLEVBQUFILE9BQUFtQixZQUFBLENBQ0EsSUFBQUgsRUFBQSxNQUFBYixFQUFBM0QsT0FBQXdELEVBQUFpQixjQUFBZCxFQUFBM0QsTUFBQW9FLEVBQUFULEVBQUEzRCxLQUFBb0UsSUFBOEdHLFdBQUFuRyxLQUFBLElBQUFtRixHQUFBQyxFQUFBZ0IsRUFBQSxLQUFBYixFQUFBM0QsS0FBQW9FLEVBQzlHLE1BQUFULEVBQUExRCxHQUFBLEtBQUEwRCxFQUFBMUQsR0FBQW1FLEtBR0EsT0FBQUcsRUFrQkFRLENBQUFiLEVBQUFFLEVBQUFDLEdBR0FXLEVBQUEsR0FBQWxCLEVBQUEzQyxLQUFBNUksT0FBQTBNLEVBQUE1RyxFQUFBeUYsRUFBQTNDLE1BQUE1SSxRQUFBeU0sRUFBQWIsRUFBQSxHQUNBLEdBQUEzRCxFQUVBLFFBQUE1TSxFQUFBLEVBQW1CQSxFQUFBNE0sRUFBQWpJLFNBQWtCM0UsRUFBQSxDQUNyQyxJQUFBK1AsRUFBQW5ELEVBQUE1TSxHQUNBLFNBQUErUCxFQUFBMUQsR0FBQSxDQUNBLElBQUFpRixFQUFBekIsR0FBQVIsRUFBQVUsRUFBQUgsUUFDQTBCLEVBQ0FGLElBQTRCckIsRUFBQTFELEdBQUEsTUFBQWlGLEVBQUFqRixHQUFBLEtBQUFpRixFQUFBakYsR0FBQWdGLEdBRFB0QixFQUFBMUQsR0FBQWtFLEdBS3JCLEdBQUFsQixFQUVBLFFBQUFuQixFQUFBLEVBQXFCQSxFQUFBbUIsRUFBQTFLLFNBQW1CdUosRUFBQSxDQUN4QyxJQUFBcUQsRUFBQWxDLEVBQUFuQixHQUVBLEdBREEsTUFBQXFELEVBQUFsRixLQUE4QmtGLEVBQUFsRixJQUFBZ0YsR0FDOUIsTUFBQUUsRUFBQW5GLEtBQUEsQ0FDQSxJQUFBb0YsRUFBQTNCLEdBQUFqRCxFQUFBMkUsRUFBQTNCLFFBQ0E0QixJQUNBRCxFQUFBbkYsS0FBQWlGLEVBQ0FELElBQXlCeEUsV0FBQXBDLEtBQUErRyxTQUd6QkEsRUFBQW5GLE1BQUFpRixFQUNBRCxJQUF1QnhFLFdBQUFwQyxLQUFBK0csR0FLdkIzRSxJQUFjQSxFQUFBNkUsR0FBQTdFLElBQ2R5QyxNQUFBekMsSUFBOEJ5QyxFQUFBb0MsR0FBQXBDLElBRTlCLElBQUFxQyxHQUFBOUUsR0FDQSxJQUFBd0UsRUFBQSxDQUVBLElBQUFPLEVBQUFDLEVBQUExQixFQUFBM0MsS0FBQTVJLE9BQUEsRUFDQSxHQUFBaU4sRUFBQSxHQUFBaEYsRUFDTyxRQUFBaUYsRUFBQSxFQUFrQkEsRUFBQWpGLEVBQUFqSSxTQUFvQmtOLEVBQ3BDLE1BQUFqRixFQUFBaUYsR0FBQXhGLEtBQ0VzRixXQUFBbkgsS0FBQSxJQUFBbUYsR0FBQS9DLEVBQUFpRixHQUFBakMsT0FBQSxZQUNYLFFBQUFrQyxFQUFBLEVBQXFCQSxFQUFBRixJQUFXRSxFQUN6QkosRUFBQWxILEtBQUFtSCxHQUNQRCxFQUFBbEgsS0FBQTZFLEdBRUEsT0FBQXFDLEVBS0EsU0FBQUQsR0FBQTNCLEdBQ0EsUUFBQTlQLEVBQUEsRUFBaUJBLEVBQUE4UCxFQUFBbkwsU0FBa0IzRSxFQUFBLENBQ25DLElBQUErUCxFQUFBRCxFQUFBOVAsR0FDQSxNQUFBK1AsRUFBQTNELE1BQUEyRCxFQUFBM0QsTUFBQTJELEVBQUExRCxLQUFBLElBQUEwRCxFQUFBSCxPQUFBbUMsZ0JBQ09qQyxFQUFBa0MsT0FBQWhTLElBQUEsR0FFUCxPQUFBOFAsRUFBQW5MLE9BQ0FtTCxFQURzQixLQWtDdEIsU0FBQW1DLEdBQUE1RSxHQUNBLElBQUF5QyxFQUFBekMsRUFBQWdELFlBQ0EsR0FBQVAsRUFBQSxDQUNBLFFBQUE5UCxFQUFBLEVBQWlCQSxFQUFBOFAsRUFBQW5MLFNBQWtCM0UsRUFDOUI4UCxFQUFBOVAsR0FBQTRQLE9BQUFzQyxXQUFBN0UsR0FDTEEsRUFBQWdELFlBQUEsTUFFQSxTQUFBOEIsR0FBQTlFLEVBQUF5QyxHQUNBLEdBQUFBLEVBQUEsQ0FDQSxRQUFBOVAsRUFBQSxFQUFpQkEsRUFBQThQLEVBQUFuTCxTQUFrQjNFLEVBQzlCOFAsRUFBQTlQLEdBQUE0UCxPQUFBd0MsV0FBQS9FLEdBQ0xBLEVBQUFnRCxZQUFBUCxHQUtBLFNBQUF1QyxHQUFBekMsR0FBNEIsT0FBQUEsRUFBQWlCLGVBQUEsSUFDNUIsU0FBQXlCLEdBQUExQyxHQUE2QixPQUFBQSxFQUFBcUIsZUFBQSxJQUs3QixTQUFBc0IsR0FBQTlMLEVBQUFDLEdBQ0EsSUFBQThMLEVBQUEvTCxFQUFBdUcsTUFBQXJJLE9BQUErQixFQUFBc0csTUFBQXJJLE9BQ0EsTUFBQTZOLEVBQXFCLE9BQUFBLEVBQ3JCLElBQUFDLEVBQUFoTSxFQUFBaU0sT0FBQUMsRUFBQWpNLEVBQUFnTSxPQUNBRSxFQUFBaEUsR0FBQTZELEVBQUFyRyxLQUFBdUcsRUFBQXZHLE9BQUFpRyxHQUFBNUwsR0FBQTRMLEdBQUEzTCxHQUNBLEdBQUFrTSxFQUFnQixPQUFBQSxFQUNoQixJQUFBQyxFQUFBakUsR0FBQTZELEVBQUFwRyxHQUFBc0csRUFBQXRHLEtBQUFpRyxHQUFBN0wsR0FBQTZMLEdBQUE1TCxHQUNBLE9BQUFtTSxHQUNBbk0sRUFBQXVDLEdBQUF4QyxFQUFBd0MsR0FLQSxTQUFBNkosR0FBQXpGLEVBQUF2RyxHQUNBLElBQUF3SyxFQUFBeUIsRUFBQXJELElBQUFyQyxFQUFBZ0QsWUFDQSxHQUFBMEMsRUFBWSxRQUFBQyxPQUFBLEVBQUFoVCxFQUFBLEVBQStCQSxFQUFBK1MsRUFBQXBPLFNBQWdCM0UsR0FDM0RnVCxFQUFBRCxFQUFBL1MsSUFDQTRQLE9BQUFxRCxXQUFBLE9BQUFuTSxFQUFBa00sRUFBQTVHLEtBQUE0RyxFQUFBM0csT0FDQWlGLEdBQUFpQixHQUFBakIsRUFBQTBCLEVBQUFwRCxRQUFBLEtBQ08wQixFQUFBMEIsRUFBQXBELFFBRVAsT0FBQTBCLEVBRUEsU0FBQTRCLEdBQUE3RixHQUFxQyxPQUFBeUYsR0FBQXpGLEdBQUEsR0FDckMsU0FBQThGLEdBQUE5RixHQUFtQyxPQUFBeUYsR0FBQXpGLEdBQUEsR0FFbkMsU0FBQStGLEdBQUEvRixFQUFBakMsR0FDQSxJQUFBa0csRUFBQXlCLEVBQUFyRCxJQUFBckMsRUFBQWdELFlBQ0EsR0FBQTBDLEVBQVksUUFBQS9TLEVBQUEsRUFBZ0JBLEVBQUErUyxFQUFBcE8sU0FBZ0IzRSxFQUFBLENBQzVDLElBQUFnVCxFQUFBRCxFQUFBL1MsR0FDQWdULEVBQUFwRCxPQUFBcUQsWUFBQSxNQUFBRCxFQUFBNUcsTUFBQTRHLEVBQUE1RyxLQUFBaEIsS0FBQSxNQUFBNEgsRUFBQTNHLElBQUEyRyxFQUFBM0csR0FBQWpCLE1BQ0FrRyxHQUFBaUIsR0FBQWpCLEVBQUEwQixFQUFBcEQsUUFBQSxLQUFvRTBCLEVBQUEwQixFQUFBcEQsUUFFcEUsT0FBQTBCLEVBTUEsU0FBQStCLEdBQUExRyxFQUFBMkcsRUFBQWxILEVBQUFDLEVBQUF1RCxHQUNBLElBQUF2QyxFQUFBWCxHQUFBQyxFQUFBMkcsR0FDQVAsRUFBQXJELElBQUFyQyxFQUFBZ0QsWUFDQSxHQUFBMEMsRUFBWSxRQUFBL1MsRUFBQSxFQUFnQkEsRUFBQStTLEVBQUFwTyxTQUFnQjNFLEVBQUEsQ0FDNUMsSUFBQWdULEVBQUFELEVBQUEvUyxHQUNBLEdBQUFnVCxFQUFBcEQsT0FBQXFELFVBQUEsQ0FDQSxJQUFBM0IsRUFBQTBCLEVBQUFwRCxPQUFBOEMsS0FBQSxHQUNBRSxFQUFBaEUsR0FBQTBDLEVBQUFsRixTQUFBaUcsR0FBQVcsRUFBQXBELFFBQUF5QyxHQUFBekMsR0FDQWlELEVBQUFqRSxHQUFBMEMsRUFBQWpGLE9BQUFpRyxHQUFBVSxFQUFBcEQsUUFBQTBDLEdBQUExQyxHQUNBLEtBQUFnRCxHQUFBLEdBQUFDLEdBQUEsR0FBQUQsR0FBQSxHQUFBQyxHQUFBLEtBQ0FELEdBQUEsSUFBQUksRUFBQXBELE9BQUFxQixnQkFBQXJCLEVBQUFpQixjQUFBakMsR0FBQTBDLEVBQUFqRixHQUFBRCxJQUFBLEVBQUF3QyxHQUFBMEMsRUFBQWpGLEdBQUFELEdBQUEsSUFDQXdHLEdBQUEsSUFBQUksRUFBQXBELE9BQUFxQixnQkFBQXJCLEVBQUFpQixjQUFBakMsR0FBQTBDLEVBQUFsRixLQUFBQyxJQUFBLEVBQUF1QyxHQUFBMEMsRUFBQWxGLEtBQUFDLEdBQUEsSUFDTyxXQVFQLFNBQUFrSCxHQUFBbEcsR0FFQSxJQURBLElBQUFtRyxFQUNBQSxFQUFBTixHQUFBN0YsSUFDS0EsRUFBQW1HLEVBQUFkLE1BQUEsTUFBQXJGLEtBQ0wsT0FBQUEsRUF1QkEsU0FBQW9HLEdBQUE5RyxFQUFBK0csR0FDQSxJQUFBckcsRUFBQVgsR0FBQUMsRUFBQStHLEdBQUFDLEVBQUFKLEdBQUFsRyxHQUNBLE9BQUFBLEdBQUFzRyxFQUFvQkQsRUFDcEI5RixHQUFBK0YsR0FLQSxTQUFBQyxHQUFBakgsRUFBQStHLEdBQ0EsR0FBQUEsRUFBQS9HLEVBQUFrSCxXQUErQixPQUFBSCxFQUMvQixJQUFBRixFQUFBbkcsRUFBQVgsR0FBQUMsRUFBQStHLEdBQ0EsSUFBQUksR0FBQW5ILEVBQUFVLEdBQWlDLE9BQUFxRyxFQUNqQyxLQUFBRixFQUFBTCxHQUFBOUYsSUFDS0EsRUFBQW1HLEVBQUFkLEtBQUEsTUFBQXJGLEtBQ0wsT0FBQU8sR0FBQVAsR0FBQSxFQU1BLFNBQUF5RyxHQUFBbkgsRUFBQVUsR0FDQSxJQUFBMEYsRUFBQXJELElBQUFyQyxFQUFBZ0QsWUFDQSxHQUFBMEMsRUFBWSxRQUFBQyxPQUFBLEVBQUFoVCxFQUFBLEVBQStCQSxFQUFBK1MsRUFBQXBPLFNBQWdCM0UsRUFFM0QsSUFEQWdULEVBQUFELEVBQUEvUyxJQUNBNFAsT0FBQXFELFVBQUEsQ0FDQSxTQUFBRCxFQUFBNUcsS0FBMEIsU0FDMUIsSUFBQTRHLEVBQUFwRCxPQUFBbUUsWUFDQSxHQUFBZixFQUFBNUcsTUFBQTRHLEVBQUFwRCxPQUFBaUIsZUFBQW1ELEdBQUFySCxFQUFBVSxFQUFBMkYsR0FDTyxVQUdQLFNBQUFnQixHQUFBckgsRUFBQVUsRUFBQTBDLEdBQ0EsU0FBQUEsRUFBQTFELEdBQUEsQ0FDQSxJQUFBdEYsRUFBQWdKLEVBQUFILE9BQUE4QyxLQUFBLE1BQ0EsT0FBQXNCLEdBQUFySCxFQUFBNUYsRUFBQXNHLEtBQUF3QyxHQUFBOUksRUFBQXNHLEtBQUFnRCxZQUFBTixFQUFBSCxTQUVBLEdBQUFHLEVBQUFILE9BQUFxQixnQkFBQWxCLEVBQUExRCxJQUFBZ0IsRUFBQUUsS0FBQTVJLE9BQ0ssU0FDTCxRQUFBcU8sT0FBQSxFQUFBaFQsRUFBQSxFQUFnQ0EsRUFBQXFOLEVBQUFnRCxZQUFBMUwsU0FBNkIzRSxFQUU3RCxJQURBZ1QsRUFBQTNGLEVBQUFnRCxZQUFBclEsSUFDQTRQLE9BQUFxRCxZQUFBRCxFQUFBcEQsT0FBQW1FLFlBQUFmLEVBQUE1RyxNQUFBMkQsRUFBQTFELEtBQ0EsTUFBQTJHLEVBQUEzRyxJQUFBMkcsRUFBQTNHLElBQUEwRCxFQUFBM0QsUUFDQTRHLEVBQUFwRCxPQUFBaUIsZUFBQWQsRUFBQUgsT0FBQXFCLGlCQUNBK0MsR0FBQXJILEVBQUFVLEVBQUEyRixHQUEyQyxTQUszQyxTQUFBaUIsR0FBQUMsR0FJQSxJQURBLElBQUFsRyxFQUFBLEVBQUFqQixHQUZBbUgsRUFBQVgsR0FBQVcsSUFFQS9PLE9BQ0FuRixFQUFBLEVBQWlCQSxFQUFBK00sRUFBQUMsTUFBQXJJLFNBQXdCM0UsRUFBQSxDQUN6QyxJQUFBcU4sRUFBQU4sRUFBQUMsTUFBQWhOLEdBQ0EsR0FBQXFOLEdBQUE2RyxFQUEwQixNQUNoQmxHLEdBQUFYLEVBQUFLLE9BRVYsUUFBQTVMLEVBQUFpTCxFQUFBNUgsT0FBNEJyRCxFQUFHQSxHQUFBaUwsRUFBQWpMLEdBQUFxRCxPQUMvQixRQUFBK0ksRUFBQSxFQUFxQkEsRUFBQXBNLEVBQUFtTCxTQUFBdEksU0FBeUJ1SixFQUFBLENBQzlDLElBQUFMLEVBQUEvTCxFQUFBbUwsU0FBQWlCLEdBQ0EsR0FBQUwsR0FBQWQsRUFBeUIsTUFDYmlCLEdBQUFILEVBQUFILE9BR1osT0FBQU0sRUFNQSxTQUFBbUcsR0FBQTlHLEdBQ0EsTUFBQUEsRUFBQUssT0FBeUIsU0FFekIsSUFEQSxJQUFBOEYsRUFBQVksRUFBQS9HLEVBQUFFLEtBQUE1SSxPQUFBa0osRUFBQVIsRUFDQW1HLEVBQUFOLEdBQUFyRixJQUFBLENBQ0EsSUFBQXlELEVBQUFrQyxFQUFBZCxLQUFBLE1BQ0E3RSxFQUFBeUQsRUFBQWxGLEtBQUFpQixLQUNBK0csR0FBQTlDLEVBQUFsRixLQUFBaEIsR0FBQWtHLEVBQUFqRixHQUFBakIsR0FHQSxJQURBeUMsRUFBQVIsRUFDQW1HLEVBQUFMLEdBQUF0RixJQUFBLENBQ0EsSUFBQTJELEVBQUFnQyxFQUFBZCxLQUFBLE1BQ0EwQixHQUFBdkcsRUFBQU4sS0FBQTVJLE9BQUE2TSxFQUFBcEYsS0FBQWhCLEdBQ0F5QyxFQUFBMkQsRUFBQW5GLEdBQUFnQixLQUNBK0csR0FBQXZHLEVBQUFOLEtBQUE1SSxPQUFBNk0sRUFBQW5GLEdBQUFqQixHQUVBLE9BQUFnSixFQUlBLFNBQUFDLEdBQUFDLEdBQ0EsSUFBQWhVLEVBQUFnVSxFQUFBQyxRQUFBNUgsRUFBQTJILEVBQUEzSCxJQUNBck0sRUFBQWtVLFFBQUE5SCxHQUFBQyxJQUFBQyxPQUNBdE0sRUFBQW1VLGNBQUFOLEdBQUE3VCxFQUFBa1UsU0FDQWxVLEVBQUFvVSxnQkFBQSxFQUNBL0gsRUFBQVcsS0FBQSxTQUFBRCxHQUNBLElBQUErRyxFQUFBRCxHQUFBOUcsR0FDQStHLEVBQUE5VCxFQUFBbVUsZ0JBQ0FuVSxFQUFBbVUsY0FBQUwsRUFDQTlULEVBQUFrVSxRQUFBbkgsS0FvQkEsSUFBQXNILEdBQUEsS0FDQSxTQUFBQyxHQUFBQyxFQUFBekosRUFBQXVELEdBQ0EsSUFBQTJDLEVBQ0FxRCxHQUFBLEtBQ0EsUUFBQTNVLEVBQUEsRUFBaUJBLEVBQUE2VSxFQUFBbFEsU0FBa0IzRSxFQUFBLENBQ25DLElBQUE2TixFQUFBZ0gsRUFBQTdVLEdBQ0EsR0FBQTZOLEVBQUF6QixLQUFBaEIsR0FBQXlDLEVBQUF4QixHQUFBakIsRUFBdUMsT0FBQXBMLEVBQ3ZDNk4sRUFBQXhCLElBQUFqQixJQUNBeUMsRUFBQXpCLE1BQUF5QixFQUFBeEIsSUFBQSxVQUFBc0MsRUFBcUQyQyxFQUFBdFIsRUFDekMyVSxHQUFBM1UsR0FFWjZOLEVBQUF6QixNQUFBaEIsSUFDQXlDLEVBQUF6QixNQUFBeUIsRUFBQXhCLElBQUEsVUFBQXNDLEVBQXFEMkMsRUFBQXRSLEVBQ3pDMlUsR0FBQTNVLEdBR1osYUFBQXNSLElBQUFxRCxHQTBCQSxJQUFBRyxHQUFBLFdBRUEsSUFBQUMsRUFBQSwyUEFFQUMsRUFBQSw2UEFDQSxTQUFBQyxFQUFBQyxHQUNBLE9BQUFBLEdBQUEsSUFBdUJILEVBQUE5SSxPQUFBaUosR0FDdkIsTUFBQUEsTUFBQSxLQUE4QyxJQUM5QyxNQUFBQSxNQUFBLEtBQThDRixFQUFBL0ksT0FBQWlKLEVBQUEsTUFDOUMsTUFBQUEsTUFBQSxLQUE4QyxJQUM5QyxNQUFBQSxNQUFBLEtBQWdELElBQ2hELE1BQUFBLEVBQThCLElBQ3BCLElBR1YsSUFBQUMsRUFBQSw0Q0FDQUMsRUFBQSxTQUFBQyxFQUFBLFFBQUFDLEVBQUEsU0FBQUMsRUFBQSxPQUVBLFNBQUFDLEVBQUFDLEVBQUFySixFQUFBQyxHQUNBckQsS0FBQXlNLFFBQ0F6TSxLQUFBb0QsT0FBcUJwRCxLQUFBcUQsS0FHckIsZ0JBQUFOLEVBQUEySixHQUNBLElBQUFDLEVBQUEsT0FBQUQsRUFBQSxRQUVBLE1BQUEzSixFQUFBcEgsUUFBQSxPQUFBK1EsSUFBQVAsRUFBQS9TLEtBQUEySixHQUFxRSxTQUVyRSxJQURBLElBQUFxSSxFQUFBckksRUFBQXBILE9BQUFpUixLQUNBNVYsRUFBQSxFQUFtQkEsRUFBQW9VLElBQVNwVSxFQUNyQjRWLEVBQUFwTCxLQUFBeUssRUFBQWxKLEVBQUFGLFdBQUE3TCxLQU1QLFFBQUFrTyxFQUFBLEVBQUEySCxFQUFBRixFQUF1Q3pILEVBQUFrRyxJQUFXbEcsRUFBQSxDQUNsRCxJQUFBNEMsRUFBQThFLEVBQUExSCxHQUNBLEtBQUE0QyxFQUF3QjhFLEVBQUExSCxHQUFBMkgsRUFDWkEsRUFBQS9FLEVBUVosUUFBQWUsRUFBQSxFQUFBaEUsRUFBQThILEVBQXNDOUQsRUFBQXVDLElBQVd2QyxFQUFBLENBQ2pELElBQUFpRSxFQUFBRixFQUFBL0QsR0FDQSxLQUFBaUUsR0FBQSxLQUFBakksRUFBd0MrSCxFQUFBL0QsR0FBQSxJQUN4Q3dELEVBQUFqVCxLQUFBMFQsS0FBdUNqSSxFQUFBaUksRUFBYyxLQUFBQSxJQUFxQkYsRUFBQS9ELEdBQUEsTUFNMUUsUUFBQUMsRUFBQSxFQUFBaUUsRUFBQUgsRUFBQSxHQUF3QzlELEVBQUFzQyxFQUFBLElBQWV0QyxFQUFBLENBQ3ZELElBQUFrRSxFQUFBSixFQUFBOUQsR0FDQSxLQUFBa0UsR0FBQSxLQUFBRCxHQUFBLEtBQUFILEVBQUE5RCxFQUFBLEdBQWtFOEQsRUFBQTlELEdBQUEsSUFDbEUsS0FBQWtFLEdBQUFELEdBQUFILEVBQUE5RCxFQUFBLElBQ0EsS0FBQWlFLEdBQUEsS0FBQUEsSUFBa0RILEVBQUE5RCxHQUFBaUUsR0FDbERBLEVBQUFDLEVBT0EsUUFBQUMsRUFBQSxFQUFxQkEsRUFBQTdCLElBQVc2QixFQUFBLENBQ2hDLElBQUFDLEVBQUFOLEVBQUFLLEdBQ0EsUUFBQUMsRUFBMEJOLEVBQUFLLEdBQUEsU0FDMUIsUUFBQUMsRUFBQSxDQUNBLElBQUFuUCxPQUFBLEVBQ0EsSUFBQUEsRUFBQWtQLEVBQUEsRUFBMkJsUCxFQUFBcU4sR0FBQSxLQUFBd0IsRUFBQTdPLEtBQWdDQSxHQUUzRCxJQURBLElBQUFvUCxFQUFBRixHQUFBLEtBQUFMLEVBQUFLLEVBQUEsSUFBQWxQLEVBQUFxTixHQUFBLEtBQUF3QixFQUFBN08sR0FBQSxRQUNBcVAsRUFBQUgsRUFBeUJHLEVBQUFyUCxJQUFTcVAsRUFBT1IsRUFBQVEsR0FBQUQsRUFDekNGLEVBQUFsUCxFQUFBLEdBT0EsUUFBQXNQLEVBQUEsRUFBQUMsRUFBQVgsRUFBd0NVLEVBQUFqQyxJQUFXaUMsRUFBQSxDQUNuRCxJQUFBRSxFQUFBWCxFQUFBUyxHQUNBLEtBQUFDLEdBQUEsS0FBQUMsRUFBMENYLEVBQUFTLEdBQUEsSUFDMUNoQixFQUFBalQsS0FBQW1VLEtBQXVDRCxFQUFBQyxHQVN2QyxRQUFBQyxFQUFBLEVBQXFCQSxFQUFBcEMsSUFBV29DLEVBQ2hDLEdBQUFwQixFQUFBaFQsS0FBQXdULEVBQUFZLElBQUEsQ0FDQSxJQUFBQyxPQUFBLEVBQ0EsSUFBQUEsRUFBQUQsRUFBQSxFQUE2QkMsRUFBQXJDLEdBQUFnQixFQUFBaFQsS0FBQXdULEVBQUFhLE1BQTZDQSxHQUkxRSxJQUhBLElBQUFDLEVBQUEsTUFBQUYsRUFBQVosRUFBQVksRUFBQSxHQUFBYixHQUNBblIsRUFBQSxNQUFBaVMsRUFBQXJDLEVBQUF3QixFQUFBYSxHQUFBZCxHQUNBZ0IsRUFBQUQsR0FBQWxTLEVBQUFrUyxFQUFBLFFBQUFmLEVBQ0FpQixFQUFBSixFQUEyQkksRUFBQUgsSUFBYUcsRUFBU2hCLEVBQUFnQixHQUFBRCxFQUNqREgsRUFBQUMsRUFBQSxFQVVBLElBREEsSUFBQXJXLEVBQUF5VSxLQUNBZ0MsRUFBQSxFQUFxQkEsRUFBQXpDLEdBQ3JCLEdBQUFrQixFQUFBbFQsS0FBQXdULEVBQUFpQixJQUFBLENBQ0EsSUFBQS9QLEVBQUErUCxFQUNBLE1BQUFBLEVBQW1CQSxFQUFBekMsR0FBQWtCLEVBQUFsVCxLQUFBd1QsRUFBQWlCLE1BQTRDQSxHQUMvRGhDLEVBQUFySyxLQUFBLElBQUFnTCxFQUFBLEVBQUExTyxFQUFBK1AsUUFDTyxDQUNQLElBQUE1TSxFQUFBNE0sRUFBQUMsRUFBQWpDLEVBQUFsUSxPQUNBLE1BQUFrUyxFQUFtQkEsRUFBQXpDLEdBQUEsS0FBQXdCLEVBQUFpQixLQUFnQ0EsR0FDbkQsUUFBQUUsRUFBQTlNLEVBQTJCOE0sRUFBQUYsR0FDM0IsR0FBQXRCLEVBQUFuVCxLQUFBd1QsRUFBQW1CLElBQUEsQ0FDQTlNLEVBQUE4TSxHQUE0QmxDLEVBQUE3QyxPQUFBOEUsRUFBQSxNQUFBdEIsRUFBQSxFQUFBdkwsRUFBQThNLElBQzVCLElBQUFDLEVBQUFELEVBQ0EsTUFBQUEsRUFBdUJBLEVBQUFGLEdBQUF0QixFQUFBblQsS0FBQXdULEVBQUFtQixNQUEyQ0EsR0FDbEVsQyxFQUFBN0MsT0FBQThFLEVBQUEsTUFBQXRCLEVBQUEsRUFBQXdCLEVBQUFELElBQ0E5TSxFQUFBOE0sUUFDa0JBLEVBRWxCOU0sRUFBQTRNLEdBQXdCaEMsRUFBQTdDLE9BQUE4RSxFQUFBLE1BQUF0QixFQUFBLEVBQUF2TCxFQUFBNE0sSUFjeEIsTUFYQSxPQUFBbkIsSUFDQSxHQUFBYixFQUFBLEdBQUFZLFFBQUFyVixFQUFBMkwsRUFBQW5JLE1BQUEsV0FDQWlSLEVBQUEsR0FBQXpJLEtBQUFoTSxFQUFBLEdBQUF1RSxPQUNBa1EsRUFBQW9DLFFBQUEsSUFBQXpCLEVBQUEsSUFBQXBWLEVBQUEsR0FBQXVFLFVBRUEsR0FBQThGLEVBQUFvSyxHQUFBWSxRQUFBclYsRUFBQTJMLEVBQUFuSSxNQUFBLFdBQ0E2RyxFQUFBb0ssR0FBQXhJLElBQUFqTSxFQUFBLEdBQUF1RSxPQUNBa1EsRUFBQXJLLEtBQUEsSUFBQWdMLEVBQUEsRUFBQXBCLEVBQUFoVSxFQUFBLEdBQUF1RSxPQUFBeVAsTUFJQSxPQUFBc0IsRUFBQWIsRUFBQXFDLFVBQUFyQyxHQS9JQSxHQXNKQSxTQUFBc0MsR0FBQTlKLEVBQUFxSSxHQUNBLElBQUFiLEVBQUF4SCxFQUFBd0gsTUFFQSxPQURBLE1BQUFBLElBQXNCQSxFQUFBeEgsRUFBQXdILE1BQUFDLEdBQUF6SCxFQUFBRSxLQUFBbUksSUFDdEJiLEVBUUEsSUFBQXVDLE1BRUFDLEdBQUEsU0FBQUMsRUFBQXhHLEVBQUFwSixHQUNBLEdBQUE0UCxFQUFBQyxpQkFDQUQsRUFBQUMsaUJBQUF6RyxFQUFBcEosR0FBQSxRQUNHLEdBQUE0UCxFQUFBRSxZQUNIRixFQUFBRSxZQUFBLEtBQUExRyxFQUFBcEosT0FDRyxDQUNILElBQUErUCxFQUFBSCxFQUFBSSxZQUFBSixFQUFBSSxjQUNBRCxFQUFBM0csSUFBQTJHLEVBQUEzRyxJQUFBc0csSUFBQU8sT0FBQWpRLEtBSUEsU0FBQWtRLEdBQUFOLEVBQUF4RyxHQUNBLE9BQUF3RyxFQUFBSSxXQUFBSixFQUFBSSxVQUFBNUcsSUFBQXNHLEdBR0EsU0FBQVMsR0FBQVAsRUFBQXhHLEVBQUFwSixHQUNBLEdBQUE0UCxFQUFBUSxvQkFDQVIsRUFBQVEsb0JBQUFoSCxFQUFBcEosR0FBQSxRQUNHLEdBQUE0UCxFQUFBUyxZQUNIVCxFQUFBUyxZQUFBLEtBQUFqSCxFQUFBcEosT0FDRyxDQUNILElBQUErUCxFQUFBSCxFQUFBSSxVQUFBaE4sRUFBQStNLEtBQUEzRyxHQUNBLEdBQUFwRyxFQUFBLENBQ0EsSUFBQWhHLEVBQUFpRSxFQUFBK0IsRUFBQWhELEdBQ0FoRCxHQUFBLElBQ1MrUyxFQUFBM0csR0FBQXBHLEVBQUFqRyxNQUFBLEVBQUFDLEdBQUFpVCxPQUFBak4sRUFBQWpHLE1BQUFDLEVBQUEsT0FLVCxTQUFBc1QsR0FBQVYsRUFBQXhHLEdBQ0EsSUFBQW1ILEVBQUFMLEdBQUFOLEVBQUF4RyxHQUNBLEdBQUFtSCxFQUFBdFQsT0FFQSxJQURBLElBQUFnRCxFQUFBQyxNQUFBaEcsVUFBQTZDLE1BQUF0RSxLQUFBMEgsVUFBQSxHQUNBN0gsRUFBQSxFQUFpQkEsRUFBQWlZLEVBQUF0VCxTQUFxQjNFLEVBQU9pWSxFQUFBalksR0FBQThILE1BQUEsS0FBQUgsR0FNN0MsU0FBQXVRLEdBQUE1RCxFQUFBelAsRUFBQXNULEdBSUEsTUFIQSxpQkFBQXRULElBQ0tBLEdBQU1pTSxLQUFBak0sRUFBQXVULGVBQUEsV0FBcUNwUCxLQUFBcVAsa0JBQUEsS0FDaERMLEdBQUExRCxFQUFBNkQsR0FBQXRULEVBQUFpTSxLQUFBd0QsRUFBQXpQLEdBQ0F5VCxHQUFBelQsTUFBQTBULGlCQUdBLFNBQUFDLEdBQUFsRSxHQUNBLElBQUE1SixFQUFBNEosRUFBQW9ELFdBQUFwRCxFQUFBb0QsVUFBQWUsZUFDQSxHQUFBL04sRUFFQSxJQURBLElBQUF2QixFQUFBbUwsRUFBQW9FLE1BQUFDLHlCQUFBckUsRUFBQW9FLE1BQUFDLDJCQUNBM1ksRUFBQSxFQUFpQkEsRUFBQTBLLEVBQUEvRixTQUFnQjNFLEdBQU8sR0FBQTJJLEVBQUFRLEVBQUF1QixFQUFBMUssS0FDbkNtSixFQUFBcUIsS0FBQUUsRUFBQTFLLElBR0wsU0FBQTRZLEdBQUF0QixFQUFBeEcsR0FDQSxPQUFBOEcsR0FBQU4sRUFBQXhHLEdBQUFuTSxPQUFBLEVBS0EsU0FBQWtVLEdBQUFDLEdBQ0FBLEVBQUFsWCxVQUFBeVYsR0FBQSxTQUFBdkcsRUFBQXBKLEdBQXlDMlAsR0FBQXJPLEtBQUE4SCxFQUFBcEosSUFDekNvUixFQUFBbFgsVUFBQWlXLElBQUEsU0FBQS9HLEVBQUFwSixHQUEwQ21RLEdBQUE3TyxLQUFBOEgsRUFBQXBKLElBTTFDLFNBQUFxUixHQUFBbFUsR0FDQUEsRUFBQXVULGVBQXlCdlQsRUFBQXVULGlCQUNqQnZULEVBQUFtVSxhQUFBLEVBRVIsU0FBQUMsR0FBQXBVLEdBQ0FBLEVBQUFxVSxnQkFBMEJyVSxFQUFBcVUsa0JBQ2xCclUsRUFBQXNVLGNBQUEsRUFFUixTQUFBYixHQUFBelQsR0FDQSxhQUFBQSxFQUFBd1QsaUJBQUF4VCxFQUFBd1QsaUJBQUEsR0FBQXhULEVBQUFtVSxZQUVBLFNBQUFJLEdBQUF2VSxHQUFvQmtVLEdBQUFsVSxHQUFvQm9VLEdBQUFwVSxHQUV4QyxTQUFBd1UsR0FBQXhVLEdBQXNCLE9BQUFBLEVBQUFvRCxRQUFBcEQsRUFBQXlVLFdBQ3RCLFNBQUFDLEdBQUExVSxHQUNBLElBQUE2QixFQUFBN0IsRUFBQTJVLE1BT0EsT0FOQSxNQUFBOVMsSUFDQSxFQUFBN0IsRUFBQTRVLE9BQXVCL1MsRUFBQSxFQUN2QixFQUFBN0IsRUFBQTRVLE9BQTRCL1MsRUFBQSxFQUM1QixFQUFBN0IsRUFBQTRVLFNBQTRCL1MsRUFBQSxJQUU1QmxELEdBQUFxQixFQUFBNlUsU0FBQSxHQUFBaFQsSUFBbUNBLEVBQUEsR0FDbkNBLEVBSUEsSUFRQWlULEdBZUFDLEdBdkJBQyxHQUFBLFdBR0EsR0FBQXBYLEdBQUFDLEVBQUEsRUFBNkIsU0FDN0IsSUFBQW9YLEVBQUF6VSxFQUFBLE9BQ0Esb0JBQUF5VSxHQUFBLGFBQUFBLEVBTEEsR0FTQSxTQUFBQyxHQUFBQyxHQUNBLFNBQUFMLEdBQUEsQ0FDQSxJQUFBdlgsRUFBQWlELEVBQUEsWUFDQUgsRUFBQThVLEVBQUEzVSxFQUFBLFFBQUFqRCxFQUFBTyxTQUFBZ0QsZUFBQSxRQUNBLEdBQUFxVSxFQUFBL1UsV0FBQWdWLGVBQ09OLEdBQUF2WCxFQUFBOFgsYUFBQSxHQUFBOVgsRUFBQTZYLGFBQUEsS0FBQXhYLEdBQUFDLEVBQUEsSUFFUCxJQUFBMkIsRUFBQXNWLEdBQUF0VSxFQUFBLFlBQ0FBLEVBQUEseUVBRUEsT0FEQWhCLEVBQUF3QixhQUFBLGNBQ0F4QixFQUtBLFNBQUE4VixHQUFBSCxHQUNBLFNBQUFKLEdBQTZCLE9BQUFBLEdBQzdCLElBQUFRLEVBQUFsVixFQUFBOFUsRUFBQXJYLFNBQUFnRCxlQUFBLFFBQ0EwVSxFQUFBbFcsRUFBQWlXLEVBQUEsS0FBQUUsd0JBQ0FDLEVBQUFwVyxFQUFBaVcsRUFBQSxLQUFBRSx3QkFFQSxPQURBMVYsRUFBQW9WLE1BQ0FLLEtBQUFHLE1BQUFILEVBQUFJLFNBQ0FiLEdBQUFXLEVBQUFFLE1BQUFKLEVBQUFJLE1BQUEsR0FLQSxJQUFBQyxHQUFBLFdBQUE5VCxNQUFBLE1BQUFqQyxPQUFBLFNBQUEwRCxHQUVBLElBREEsSUFBQTRCLEVBQUEsRUFBQTBRLEtBQUExYSxFQUFBb0ksRUFBQTFELE9BQ0FzRixHQUFBaEssR0FBQSxDQUNBLElBQUEyYSxFQUFBdlMsRUFBQU0sUUFBQSxLQUFBc0IsSUFDQSxHQUFBMlEsSUFBbUJBLEVBQUF2UyxFQUFBMUQsUUFDbkIsSUFBQTBJLEVBQUFoRixFQUFBNUQsTUFBQXdGLEVBQUEsTUFBQTVCLEVBQUE0RCxPQUFBMk8sRUFBQSxHQUFBQSxFQUFBLEVBQUFBLEdBQ0FDLEVBQUF4TixFQUFBMUUsUUFBQSxPQUNBLEdBQUFrUyxHQUNBRixFQUFBblEsS0FBQTZDLEVBQUE1SSxNQUFBLEVBQUFvVyxJQUNBNVEsR0FBQTRRLEVBQUEsSUFFQUYsRUFBQW5RLEtBQUE2QyxHQUNBcEQsRUFBQTJRLEVBQUEsR0FHQSxPQUFBRCxHQUNDLFNBQUF0UyxHQUFzQixPQUFBQSxFQUFBekIsTUFBQSxhQUV2QmtVLEdBQUFsYixPQUFBbWIsYUFBQSxTQUFBQyxHQUNBLElBQU8sT0FBQUEsRUFBQXBTLGdCQUFBb1MsRUFBQW5TLGFBQ1AsTUFBQWhFLEdBQVksV0FDWCxTQUFBbVcsR0FDRCxJQUFBQyxFQUNBLElBQU9BLEVBQUFELEVBQUFFLGNBQUFDLFVBQUF0VSxjQUNQLE1BQUFoQyxJQUNBLFNBQUFvVyxLQUFBRyxpQkFBQUosSUFDQSxHQUFBQyxFQUFBSSxpQkFBQSxhQUFBSixJQUdBSyxHQUFBLFdBQ0EsSUFBQXpXLEVBQUFRLEVBQUEsT0FDQSxpQkFBQVIsSUFDQUEsRUFBQWdCLGFBQUEsb0JBQ0EsbUJBQUFoQixFQUFBMFcsUUFKQSxHQU9BQyxHQUFBLEtBVUFDLE1BQ0FDLE1BaUJBLFNBQUFDLEdBQUFDLEdBQ0Esb0JBQUFBLEdBQUFGLEdBQUE3WixlQUFBK1osR0FDQUEsRUFBQUYsR0FBQUUsUUFDRyxHQUFBQSxHQUFBLGlCQUFBQSxFQUFBcmIsTUFBQW1iLEdBQUE3WixlQUFBK1osRUFBQXJiLE1BQUEsQ0FDSCxJQUFBK1EsRUFBQW9LLEdBQUFFLEVBQUFyYixNQUNBLGlCQUFBK1EsSUFBbUNBLEdBQVUvUSxLQUFBK1EsS0FDN0NzSyxFQUFBOVEsRUFBQXdHLEVBQUFzSyxJQUNBcmIsS0FBQStRLEVBQUEvUSxTQUNHLHFCQUFBcWIsR0FBQSwwQkFBQXhaLEtBQUF3WixHQUNILE9BQUFELEdBQUEsbUJBQ0csb0JBQUFDLEdBQUEsMkJBQUF4WixLQUFBd1osR0FDSCxPQUFBRCxHQUFBLG9CQUVBLHVCQUFBQyxHQUF5Q3JiLEtBQUFxYixHQUNqQ0EsSUFBaUJyYixLQUFBLFFBS3pCLFNBQUFzYixHQUFBdk4sRUFBQXNOLEdBQ0FBLEVBQUFELEdBQUFDLEdBQ0EsSUFBQUUsRUFBQUwsR0FBQUcsRUFBQXJiLE1BQ0EsSUFBQXViLEVBQWtCLE9BQUFELEdBQUF2TixFQUFBLGNBQ2xCLElBQUF5TixFQUFBRCxFQUFBeE4sRUFBQXNOLEdBQ0EsR0FBQUksR0FBQW5hLGVBQUErWixFQUFBcmIsTUFBQSxDQUNBLElBQUEwYixFQUFBRCxHQUFBSixFQUFBcmIsTUFDQSxRQUFBNEgsS0FBQThULEVBQ0FBLEVBQUFwYSxlQUFBc0csS0FDQTRULEVBQUFsYSxlQUFBc0csS0FBeUM0VCxFQUFBLElBQUE1VCxHQUFBNFQsRUFBQTVULElBQ3pDNFQsRUFBQTVULEdBQUE4VCxFQUFBOVQsSUFLQSxHQUZBNFQsRUFBQXhiLEtBQUFxYixFQUFBcmIsS0FDQXFiLEVBQUFNLGFBQXdCSCxFQUFBRyxXQUFBTixFQUFBTSxZQUN4Qk4sRUFBQU8sVUFBdUIsUUFBQUMsS0FBQVIsRUFBQU8sVUFDbEJKLEVBQUFLLEdBQUFSLEVBQUFPLFVBQUFDLEdBRUwsT0FBQUwsRUFLQSxJQUFBQyxNQUNBLFNBQUFLLEdBQUFsYixFQUFBbWIsR0FDQSxJQUFBTCxFQUFBRCxHQUFBbmEsZUFBQVYsR0FBQTZhLEdBQUE3YSxHQUFBNmEsR0FBQTdhLE1BQ0E0RyxFQUFBdVUsRUFBQUwsR0FHQSxTQUFBTSxHQUFBcGIsRUFBQXFiLEdBQ0EsUUFBQUEsRUFBdUIsT0FBQUEsRUFDdkIsR0FBQXJiLEVBQUFvYixVQUF1QixPQUFBcGIsRUFBQW9iLFVBQUFDLEdBQ3ZCLElBQUFDLEtBQ0EsUUFBQWhiLEtBQUErYSxFQUFBLENBQ0EsSUFBQUUsRUFBQUYsRUFBQS9hLEdBQ0FpYixhQUFBOVUsUUFBK0I4VSxJQUFBL0UsWUFDL0I4RSxFQUFBaGIsR0FBQWliLEVBRUEsT0FBQUQsRUFLQSxTQUFBRSxHQUFBeGIsRUFBQXFiLEdBRUEsSUFEQSxJQUFBSSxFQUNBemIsRUFBQXdiLFlBQ0FDLEVBQUF6YixFQUFBd2IsVUFBQUgsS0FDQUksRUFBQXpiLFNBQ0FxYixFQUFBSSxFQUFBSixNQUNBcmIsRUFBQXliLEVBQUF6YixLQUVBLE9BQUF5YixJQUFrQnpiLE9BQUFxYixTQUdsQixTQUFBSyxHQUFBMWIsRUFBQTJiLEVBQUFDLEdBQ0EsT0FBQTViLEVBQUEwYixZQUFBMWIsRUFBQTBiLFdBQUFDLEVBQUFDLEdBUUEsSUFBQUMsR0FBQSxTQUFBM1UsRUFBQUMsRUFBQTJVLEdBQ0FqVSxLQUFBaUIsSUFBQWpCLEtBQUFsQyxNQUFBLEVBQ0FrQyxLQUFBWCxTQUNBVyxLQUFBVixXQUFBLEVBQ0FVLEtBQUFrVSxjQUFBbFUsS0FBQW1VLGdCQUFBLEVBQ0FuVSxLQUFBb1UsVUFBQSxFQUNBcFUsS0FBQWlVLGNBR0FELEdBQUFwYixVQUFBeWIsSUFBQSxXQUEwQyxPQUFBclUsS0FBQWlCLEtBQUFqQixLQUFBWCxPQUFBMUQsUUFDMUNxWSxHQUFBcGIsVUFBQTBiLElBQUEsV0FBMEMsT0FBQXRVLEtBQUFpQixLQUFBakIsS0FBQW9VLFdBQzFDSixHQUFBcGIsVUFBQTJiLEtBQUEsV0FBMkMsT0FBQXZVLEtBQUFYLE9BQUE0RCxPQUFBakQsS0FBQWlCLFdBQUF1VCxHQUMzQ1IsR0FBQXBiLFVBQUE2YixLQUFBLFdBQ0EsR0FBQXpVLEtBQUFpQixJQUFBakIsS0FBQVgsT0FBQTFELE9BQ0ssT0FBQXFFLEtBQUFYLE9BQUE0RCxPQUFBakQsS0FBQWlCLFFBRUwrUyxHQUFBcGIsVUFBQThiLElBQUEsU0FBQTlaLEdBQ0EsSUFBQXdILEVBQUFwQyxLQUFBWCxPQUFBNEQsT0FBQWpELEtBQUFpQixLQUlBLEdBRkEsaUJBQUFyRyxFQUFpQ3dILEdBQUF4SCxFQUN6QndILElBQUF4SCxFQUFBeEIsS0FBQXdCLEVBQUF4QixLQUFBZ0osR0FBQXhILEVBQUF3SCxJQUNjLFFBQVhwQyxLQUFBaUIsSUFBV21CLEdBRXRCNFIsR0FBQXBiLFVBQUErYixTQUFBLFNBQUEvWixHQUVBLElBREEsSUFBQWtELEVBQUFrQyxLQUFBaUIsSUFDQWpCLEtBQUEwVSxJQUFBOVosS0FDQSxPQUFBb0YsS0FBQWlCLElBQUFuRCxHQUVBa1csR0FBQXBiLFVBQUFnYyxTQUFBLFdBSUEsSUFIQSxJQUVBOVcsRUFBQWtDLEtBQUFpQixJQUNBLGFBQUE3SCxLQUFBNEcsS0FBQVgsT0FBQTRELE9BQUFqRCxLQUFBaUIsU0FIQWpCLEtBRzJEaUIsSUFDM0QsT0FBQWpCLEtBQUFpQixJQUFBbkQsR0FFQWtXLEdBQUFwYixVQUFBaWMsVUFBQSxXQUFnRDdVLEtBQUFpQixJQUFBakIsS0FBQVgsT0FBQTFELFFBQ2hEcVksR0FBQXBiLFVBQUFrYyxPQUFBLFNBQUExUyxHQUNBLElBQUFrRyxFQUFBdEksS0FBQVgsT0FBQU0sUUFBQXlDLEVBQUFwQyxLQUFBaUIsS0FDQSxHQUFBcUgsR0FBQSxFQUFvQyxPQUFqQnRJLEtBQUFpQixJQUFBcUgsR0FBaUIsR0FFcEMwTCxHQUFBcGIsVUFBQW1jLE9BQUEsU0FBQXRjLEdBQThDdUgsS0FBQWlCLEtBQUF4SSxHQUM5Q3ViLEdBQUFwYixVQUFBb2MsT0FBQSxXQUtBLE9BSkFoVixLQUFBa1UsY0FBQWxVLEtBQUFsQyxRQUNBa0MsS0FBQW1VLGdCQUFBL1UsRUFBQVksS0FBQVgsT0FBQVcsS0FBQWxDLE1BQUFrQyxLQUFBVixRQUFBVSxLQUFBa1UsY0FBQWxVLEtBQUFtVSxpQkFDQW5VLEtBQUFrVSxjQUFBbFUsS0FBQWxDLE9BRUFrQyxLQUFBbVUsaUJBQUFuVSxLQUFBb1UsVUFBQWhWLEVBQUFZLEtBQUFYLE9BQUFXLEtBQUFvVSxVQUFBcFUsS0FBQVYsU0FBQSxJQUVBMFUsR0FBQXBiLFVBQUFxYyxZQUFBLFdBQ0EsT0FBQTdWLEVBQUFZLEtBQUFYLE9BQUEsS0FBQVcsS0FBQVYsVUFDQVUsS0FBQW9VLFVBQUFoVixFQUFBWSxLQUFBWCxPQUFBVyxLQUFBb1UsVUFBQXBVLEtBQUFWLFNBQUEsSUFFQTBVLEdBQUFwYixVQUFBZ0MsTUFBQSxTQUFBc2EsRUFBQUMsRUFBQUMsR0FDQSxvQkFBQUYsRUFPRyxDQUNILElBQUF0YSxFQUFBb0YsS0FBQVgsT0FBQTVELE1BQUF1RSxLQUFBaUIsS0FBQXJHLE1BQUFzYSxHQUNBLE9BQUF0YSxLQUFBYyxNQUFBLEVBQW1DLE1BQ25DZCxJQUFBLElBQUF1YSxJQUFxQ25WLEtBQUFpQixLQUFBckcsRUFBQSxHQUFBZSxRQUNyQ2YsR0FWQSxJQUFBeWEsRUFBQSxTQUFBdFMsR0FBZ0MsT0FBQXFTLEVBQUFyUyxFQUFBVCxjQUFBUyxHQUNoQ3VTLEVBQUF0VixLQUFBWCxPQUFBaVcsT0FBQXRWLEtBQUFpQixJQUFBaVUsRUFBQXZaLFFBQ0EsR0FBQTBaLEVBQUFDLElBQUFELEVBQUFILEdBRUEsT0FEQSxJQUFBQyxJQUE4Qm5WLEtBQUFpQixLQUFBaVUsRUFBQXZaLFNBQzlCLEdBU0FxWSxHQUFBcGIsVUFBQTBDLFFBQUEsV0FBNkMsT0FBQTBFLEtBQUFYLE9BQUE1RCxNQUFBdUUsS0FBQWxDLE1BQUFrQyxLQUFBaUIsTUFDN0MrUyxHQUFBcGIsVUFBQTJjLGVBQUEsU0FBQTljLEVBQUErYyxHQUNBeFYsS0FBQW9VLFdBQUEzYixFQUNBLElBQU8sT0FBQStjLElBQ1AsUUFBV3hWLEtBQUFvVSxXQUFBM2IsSUFFWHViLEdBQUFwYixVQUFBNmMsVUFBQSxTQUFBaGQsR0FDQSxJQUFBaWQsRUFBQTFWLEtBQUFpVSxXQUNBLE9BQUF5QixLQUFBRCxVQUFBaGQsSUFFQXViLEdBQUFwYixVQUFBK2MsVUFBQSxXQUNBLElBQUFELEVBQUExVixLQUFBaVUsV0FDQSxPQUFBeUIsS0FBQUMsVUFBQTNWLEtBQUFpQixNQUdBLElBQUEyVSxHQUFBLFNBQUFwQyxFQUFBaUMsR0FDQXpWLEtBQUF3VCxRQUNBeFQsS0FBQXlWLGFBR0FJLEdBQUEsU0FBQWxTLEVBQUE2UCxFQUFBblAsRUFBQW9SLEdBQ0F6VixLQUFBd1QsUUFDQXhULEtBQUEyRCxNQUNBM0QsS0FBQXFFLE9BQ0FyRSxLQUFBOFYsYUFBQUwsR0FBQSxFQUNBelYsS0FBQStWLFdBQUEsS0FDQS9WLEtBQUFnVyxhQUFBLEdBMENBLFNBQUFDLEdBQUEzSyxFQUFBakgsRUFBQTZSLEVBQUFDLEdBR0EsSUFBQUMsR0FBQTlLLEVBQUFrSSxNQUFBNkMsU0FBQUMsS0FFQUMsR0FBQWpMLEVBQUFqSCxFQUFBRSxLQUFBK0csRUFBQTNILElBQUF4TCxLQUFBK2QsRUFBQSxTQUFBblksRUFBQXZCLEdBQXNFLE9BQUE0WixFQUFBNVUsS0FBQXpELEVBQUF2QixJQUN0RThaLEVBQUFILEdBa0NBLElBakNBLElBQUEzQyxFQUFBMEMsRUFBQTFDLE1BR0FnRCxFQUFBLFNBQUEvZSxHQUNBeWUsRUFBQUgsV0FBQUssRUFDQSxJQUFBSyxFQUFBbkwsRUFBQWtJLE1BQUFrRCxTQUFBamYsR0FBQVQsRUFBQSxFQUFBOFcsRUFBQSxFQUNBb0ksRUFBQTFDLE9BQUEsRUFDQStDLEdBQUFqTCxFQUFBakgsRUFBQUUsS0FBQWtTLEVBQUF0ZSxLQUFBK2QsRUFBQSxTQUFBblksRUFBQXZCLEdBR0EsSUFGQSxJQUFBc0IsRUFBQTlHLEVBRUE4VyxFQUFBL1AsR0FBQSxDQUNBLElBQUE0WSxFQUFBUCxFQUFBcGYsR0FDQTJmLEVBQUE1WSxHQUNXcVksRUFBQXBOLE9BQUFoUyxFQUFBLEVBQUErRyxFQUFBcVksRUFBQXBmLEVBQUEsR0FBQTJmLEdBQ1gzZixHQUFBLEVBQ0E4VyxFQUFBMU0sS0FBQUMsSUFBQXRELEVBQUE0WSxHQUVBLEdBQUFuYSxFQUNBLEdBQUFpYSxFQUFBRyxPQUNBUixFQUFBcE4sT0FBQWxMLEVBQUE5RyxFQUFBOEcsRUFBQUMsRUFBQSxXQUFBdkIsR0FDQXhGLEVBQUE4RyxFQUFBLE9BRUEsS0FBY0EsRUFBQTlHLEVBQVc4RyxHQUFBLEdBQ3pCLElBQUErRyxFQUFBdVIsRUFBQXRZLEVBQUEsR0FDQXNZLEVBQUF0WSxFQUFBLElBQUErRyxJQUFBLG1CQUFBckksSUFHSzhaLEdBQ0xKLEVBQUExQyxRQUNBMEMsRUFBQUgsV0FBQSxLQUNBRyxFQUFBRixhQUFBLEdBR0F2ZSxFQUFBLEVBQWlCQSxFQUFBNlQsRUFBQWtJLE1BQUFrRCxTQUFBL2EsU0FBOEJsRSxFQUFBK2UsRUFBQS9lLEdBRS9DLE9BQVVvZixPQUFBVCxFQUFBVSxRQUFBUixFQUFBUyxTQUFBVCxFQUFBVSxVQUFBVixFQUFBLE1BR1YsU0FBQVcsR0FBQTNMLEVBQUFqSCxFQUFBNlMsR0FDQSxJQUFBN1MsRUFBQXdTLFFBQUF4UyxFQUFBd1MsT0FBQSxJQUFBdkwsRUFBQWtJLE1BQUE2QyxRQUFBLENBQ0EsSUFBQUgsRUFBQWlCLEdBQUE3TCxFQUFBMUcsR0FBQVAsSUFDQStTLEVBQUEvUyxFQUFBRSxLQUFBNUksT0FBQTJQLEVBQUFoRyxRQUFBK1Isb0JBQUE5RCxHQUFBakksRUFBQTNILElBQUF4TCxLQUFBK2QsRUFBQTFDLE9BQ0E3QixFQUFBc0UsR0FBQTNLLEVBQUFqSCxFQUFBNlIsR0FDQWtCLElBQXFCbEIsRUFBQTFDLE1BQUE0RCxHQUNyQi9TLEVBQUFpVCxXQUFBcEIsRUFBQXFCLE1BQUFILEdBQ0EvUyxFQUFBd1MsT0FBQWxGLEVBQUFrRixPQUNBbEYsRUFBQW1GLFFBQXlCelMsRUFBQW1ULGFBQUE3RixFQUFBbUYsUUFDekJ6UyxFQUFBbVQsZUFBaUNuVCxFQUFBbVQsYUFBQSxNQUNqQ04sSUFBQTVMLEVBQUEzSCxJQUFBOFQsb0JBQ09uTSxFQUFBM0gsSUFBQStULGFBQUF0VyxLQUFBK0UsSUFBQW1GLEVBQUEzSCxJQUFBK1QsZUFBQXBNLEVBQUEzSCxJQUFBOFQsb0JBRVAsT0FBQXBULEVBQUF3UyxPQUdBLFNBQUFNLEdBQUE3TCxFQUFBN1MsRUFBQWtmLEdBQ0EsSUFBQWhVLEVBQUEySCxFQUFBM0gsSUFBQTRILEVBQUFELEVBQUFDLFFBQ0EsSUFBQTVILEVBQUF4TCxLQUFBMGIsV0FBNkIsV0FBQWdDLEdBQUFsUyxHQUFBLEVBQUFsTCxHQUM3QixJQUFBcUYsRUE2SEEsU0FBQXdOLEVBQUE3UyxFQUFBa2YsR0FHQSxJQUZBLElBQUFDLEVBQUFDLEVBQUFsVSxFQUFBMkgsRUFBQTNILElBQ0FtVSxFQUFBSCxHQUFBLEVBQUFsZixHQUFBNlMsRUFBQTNILElBQUF4TCxLQUFBd2IsVUFBQSxTQUNBbFUsRUFBQWhILEVBQXNCZ0gsRUFBQXFZLElBQWNyWSxFQUFBLENBQ3BDLEdBQUFBLEdBQUFrRSxFQUFBQyxNQUE4QixPQUFBRCxFQUFBQyxNQUM5QixJQUFBUyxFQUFBWCxHQUFBQyxFQUFBbEUsRUFBQSxHQUFBakUsRUFBQTZJLEVBQUFpVCxXQUNBLEdBQUE5YixLQUFBbWMsR0FBQWxZLEdBQUFqRSxhQUFBb2EsR0FBQXBhLEVBQUFpYSxVQUFBLElBQUE5UixFQUFBK1QsY0FDTyxPQUFBalksRUFDUCxJQUFBc1ksRUFBQTNZLEVBQUFpRixFQUFBRSxLQUFBLEtBQUErRyxFQUFBaEcsUUFBQWhHLFVBQ0EsTUFBQXVZLEdBQUFELEVBQUFHLEtBQ0FGLEVBQUFwWSxFQUFBLEVBQ0FtWSxFQUFBRyxHQUdBLE9BQUFGLEVBM0lBRyxDQUFBMU0sRUFBQTdTLEVBQUFrZixHQUNBTSxFQUFBbmEsRUFBQTZGLEVBQUFDLE9BQUFGLEdBQUFDLEVBQUE3RixFQUFBLEdBQUF3WixXQUNBcEIsRUFBQStCLEVBQUFwQyxHQUFBcUMsVUFBQXZVLEVBQUFzVSxFQUFBbmEsR0FBQSxJQUFBK1gsR0FBQWxTLEVBQUFrUSxHQUFBbFEsRUFBQXhMLE1BQUEyRixHQVNBLE9BUEE2RixFQUFBVyxLQUFBeEcsRUFBQXJGLEVBQUEsU0FBQTRMLEdBQ0E4VCxHQUFBN00sRUFBQWpILEVBQUFFLEtBQUEyUixHQUNBLElBQUFqVixFQUFBaVYsRUFBQTdSLEtBQ0FBLEVBQUFpVCxXQUFBclcsR0FBQXhJLEVBQUEsR0FBQXdJLEVBQUEsTUFBQUEsR0FBQXNLLEVBQUE2TSxVQUFBblgsRUFBQXNLLEVBQUE4TSxPQUFBbkMsRUFBQXFCLE9BQUEsS0FDQXJCLEVBQUFvQyxhQUVBWCxJQUFnQmhVLEVBQUErVCxhQUFBeEIsRUFBQTdSLE1BQ2hCNlIsRUFNQSxTQUFBaUMsR0FBQTdNLEVBQUEvRyxFQUFBMlIsRUFBQXFDLEdBQ0EsSUFBQXBnQixFQUFBbVQsRUFBQTNILElBQUF4TCxLQUNBcWdCLEVBQUEsSUFBQXhFLEdBQUF6UCxFQUFBK0csRUFBQWhHLFFBQUFoRyxRQUFBNFcsR0FHQSxJQUZBc0MsRUFBQTFhLE1BQUEwYSxFQUFBdlgsSUFBQXNYLEdBQUEsRUFDQSxJQUFBaFUsR0FBbUJrVSxHQUFBdGdCLEVBQUErZCxFQUFBMUMsUUFDbkJnRixFQUFBbkUsT0FDQXFFLEdBQUF2Z0IsRUFBQXFnQixFQUFBdEMsRUFBQTFDLE9BQ0FnRixFQUFBMWEsTUFBQTBhLEVBQUF2WCxJQUlBLFNBQUF3WCxHQUFBdGdCLEVBQUFxYixHQUNBLEdBQUFyYixFQUFBd2dCLFVBQXVCLE9BQUF4Z0IsRUFBQXdnQixVQUFBbkYsR0FDdkIsR0FBQXJiLEVBQUF3YixVQUFBLENBQ0EsSUFBQTZCLEVBQUE3QixHQUFBeGIsRUFBQXFiLEdBQ0EsT0FBQWdDLEVBQUFyZCxLQUFBd2dCLFVBQTZCbkQsRUFBQXJkLEtBQUF3Z0IsVUFBQW5ELEVBQUFoQyxZQUE3QixHQUdBLFNBQUFrRixHQUFBdmdCLEVBQUFxZ0IsRUFBQWhGLEVBQUFnQyxHQUNBLFFBQUF4ZSxFQUFBLEVBQWlCQSxFQUFBLEdBQVFBLElBQUEsQ0FDekJ3ZSxJQUFnQkEsRUFBQSxHQUFBN0IsR0FBQXhiLEVBQUFxYixHQUFBcmIsTUFDaEIsSUFBQXFFLEVBQUFyRSxFQUFBeWdCLE1BQUFKLEVBQUFoRixHQUNBLEdBQUFnRixFQUFBdlgsSUFBQXVYLEVBQUExYSxNQUFvQyxPQUFBdEIsRUFFcEMsVUFBQXNILE1BQUEsUUFBQTNMLEVBQUFaLEtBQUEsOEJBaEpBc2UsR0FBQWpkLFVBQUE2YyxVQUFBLFNBQUFoZCxHQUNBLElBQUE0TCxFQUFBckUsS0FBQTJELElBQUFELFFBQUExRCxLQUFBcUUsS0FBQTVMLEdBRUEsT0FEQSxNQUFBNEwsR0FBQTVMLEVBQUF1SCxLQUFBOFYsZUFBOEM5VixLQUFBOFYsYUFBQXJkLEdBQzlDNEwsR0FHQXdSLEdBQUFqZCxVQUFBK2MsVUFBQSxTQUFBbGQsR0FHQSxJQUFBdUgsS0FBQStWLFdBQXlCLFlBQ3pCLEtBQUEvVixLQUFBK1YsV0FBQS9WLEtBQUFnVyxlQUFBdmQsR0FIQXVILEtBSUtnVyxjQUFBLEVBQ0wsSUFBQWxPLEVBQUE5SCxLQUFBK1YsV0FBQS9WLEtBQUFnVyxhQUFBLEdBQ0EsT0FBVWxPLFVBQUFxRixRQUFBLHNCQUNWdEosS0FBQTdELEtBQUErVixXQUFBL1YsS0FBQWdXLGNBQUF2ZCxJQUdBb2QsR0FBQWpkLFVBQUEwZixTQUFBLFdBQ0F0WSxLQUFBcUUsT0FDQXJFLEtBQUE4VixhQUFBLEdBQThCOVYsS0FBQThWLGdCQUc5QkQsR0FBQXFDLFVBQUEsU0FBQXZVLEVBQUFzVSxFQUFBNVQsR0FDQSxPQUFBNFQsYUFBQXJDLEdBQ0ssSUFBQUMsR0FBQWxTLEVBQUE0UCxHQUFBNVAsRUFBQXhMLEtBQUE4ZixFQUFBekUsT0FBQW5QLEVBQUE0VCxFQUFBeEMsV0FFQSxJQUFBSSxHQUFBbFMsRUFBQTRQLEdBQUE1UCxFQUFBeEwsS0FBQThmLEdBQUE1VCxJQUdMd1IsR0FBQWpkLFVBQUEyZSxLQUFBLFNBQUFzQixHQUNBLElBQUFyRixHQUFBLElBQUFxRixFQUFBdEYsR0FBQXZULEtBQUEyRCxJQUFBeEwsS0FBQTZILEtBQUF3VCxPQUFBeFQsS0FBQXdULE1BQ0EsT0FBQXhULEtBQUE4VixhQUFBLE1BQUFGLEdBQUFwQyxFQUFBeFQsS0FBQThWLGNBQUF0QyxHQW9IQSxJQUFBc0YsR0FBQSxTQUFBTixFQUFBMVEsRUFBQTBMLEdBQ0F4VCxLQUFBbEMsTUFBQTBhLEVBQUExYSxNQUE0QmtDLEtBQUFqQyxJQUFBeWEsRUFBQXZYLElBQzVCakIsS0FBQVgsT0FBQW1aLEVBQUFsZCxVQUNBMEUsS0FBQThILFFBQUEsS0FDQTlILEtBQUF3VCxTQUlBLFNBQUF1RixHQUFBek4sRUFBQXJLLEVBQUEwVyxFQUFBcUIsR0FDQSxJQUFBeGMsRUFBQW1ILEVBQUEySCxFQUFBM0gsSUFBQXhMLEVBQUF3TCxFQUFBeEwsS0FDQThJLEVBQUFtRixHQUFBekMsRUFBQTFDLEdBQ0EsSUFDQWdZLEVBREE1VSxFQUFBWCxHQUFBQyxFQUFBMUMsRUFBQW9ELE1BQUE2UixFQUFBaUIsR0FBQTdMLEVBQUFySyxFQUFBb0QsS0FBQXNULEdBQ0FhLEVBQUEsSUFBQXhFLEdBQUEzUCxFQUFBRSxLQUFBK0csRUFBQWhHLFFBQUFoRyxRQUFBNFcsR0FFQSxJQURBOEMsSUFBZ0JDLE9BQ2hCRCxHQUFBUixFQUFBdlgsTUFBQW1CLE1BQUFvVyxFQUFBbkUsT0FDQW1FLEVBQUExYSxNQUFBMGEsRUFBQXZYLElBQ0F6RSxFQUFBa2MsR0FBQXZnQixFQUFBcWdCLEVBQUF0QyxFQUFBMUMsT0FDQXdGLEdBQWtCQyxFQUFBelgsS0FBQSxJQUFBc1gsR0FBQU4sRUFBQWhjLEVBQUErVyxHQUFBNVAsRUFBQXhMLEtBQUErZCxFQUFBMUMsU0FFbEIsT0FBQXdGLEVBQUFDLEVBQUEsSUFBQUgsR0FBQU4sRUFBQWhjLEVBQUEwWixFQUFBMUMsT0FHQSxTQUFBMEYsR0FBQXBSLEVBQUFxUixHQUNBLEdBQUFyUixFQUFhLE9BQVEsQ0FDckIsSUFBQXNSLEVBQUF0UixFQUFBbE4sTUFBQSxxQ0FDQSxJQUFBd2UsRUFBcUIsTUFDckJ0UixJQUFBck0sTUFBQSxFQUFBMmQsRUFBQTFkLE9BQUFvTSxFQUFBck0sTUFBQTJkLEVBQUExZCxNQUFBMGQsRUFBQSxHQUFBemQsUUFDQSxJQUFBd0QsRUFBQWlhLEVBQUEseUJBQ0EsTUFBQUQsRUFBQWhhLEdBQ09nYSxFQUFBaGEsR0FBQWlhLEVBQUEsR0FDUCxJQUFBbGUsT0FBQSxVQUFBa2UsRUFBQSxjQUFBaGdCLEtBQUErZixFQUFBaGEsTUFDT2dhLEVBQUFoYSxJQUFBLElBQUFpYSxFQUFBLElBRVAsT0FBQXRSLEVBSUEsU0FBQXlPLEdBQUFqTCxFQUFBL0csRUFBQXBNLEVBQUErZCxFQUFBeFgsRUFBQTRYLEVBQUFILEdBQ0EsSUFBQWtELEVBQUFsaEIsRUFBQWtoQixhQUNBLE1BQUFBLElBQTZCQSxFQUFBL04sRUFBQWhHLFFBQUErVCxjQUM3QixJQUNBN2MsRUFEQThjLEVBQUEsRUFBQUMsRUFBQSxLQUNBZixFQUFBLElBQUF4RSxHQUFBelAsRUFBQStHLEVBQUFoRyxRQUFBaEcsUUFBQTRXLEdBQ0FWLEVBQUFsSyxFQUFBaEcsUUFBQWtVLGVBQUEsTUFFQSxJQURBLElBQUFqVixHQUFtQjJVLEdBQUFULEdBQUF0Z0IsRUFBQStkLEVBQUExQyxPQUFBOEMsSUFDbkJrQyxFQUFBbkUsT0FBQSxDQVNBLEdBUkFtRSxFQUFBdlgsSUFBQXFLLEVBQUFoRyxRQUFBK1Isb0JBQ0FnQyxHQUFBLEVBQ0FsRCxHQUF1QmdDLEdBQUE3TSxFQUFBL0csRUFBQTJSLEVBQUFzQyxFQUFBdlgsS0FDdkJ1WCxFQUFBdlgsSUFBQXNELEVBQUE1SSxPQUNBYSxFQUFBLE1BRUFBLEVBQUEwYyxHQUFBUixHQUFBdmdCLEVBQUFxZ0IsRUFBQXRDLEVBQUExQyxNQUFBZ0MsR0FBQWMsR0FFQWQsRUFBQSxDQUNBLElBQUFpRSxFQUFBakUsRUFBQSxHQUFBamUsS0FDQWtpQixJQUFrQmpkLEVBQUEsTUFBQUEsRUFBQWlkLEVBQUEsSUFBQWpkLEVBQUFpZCxJQUVsQixJQUFBSixHQUFBRSxHQUFBL2MsRUFBQSxDQUNBLEtBQUE4YyxFQUFBZCxFQUFBMWEsT0FDQXdiLEVBQUFsWSxLQUFBQyxJQUFBbVgsRUFBQTFhLE1BQUF3YixFQUFBLEtBQ0E1YSxFQUFBNGEsRUFBQUMsR0FFQUEsRUFBQS9jLEVBRUFnYyxFQUFBMWEsTUFBQTBhLEVBQUF2WCxJQUVBLEtBQUFxWSxFQUFBZCxFQUFBdlgsS0FBQSxDQUlBLElBQUFBLEVBQUFHLEtBQUFDLElBQUFtWCxFQUFBdlgsSUFBQXFZLEVBQUEsS0FDQTVhLEVBQUF1QyxFQUFBc1ksR0FDQUQsRUFBQXJZLEdBK0NBLElBQUF5WSxHQUFBLFNBQUFuVixFQUFBOEMsRUFBQXNTLEdBQ0EzWixLQUFBdUUsT0FDQTRFLEdBQUFuSixLQUFBcUgsR0FDQXJILEtBQUEwRSxPQUFBaVYsSUFBQTNaLE1BQUEsR0FxQkEsU0FBQTRaLEdBQUF2VixHQUNBQSxFQUFBbEksT0FBQSxLQUNBOE0sR0FBQTVFLEdBcEJBcVYsR0FBQTlnQixVQUFBZ00sT0FBQSxXQUFxQyxPQUFBQSxHQUFBNUUsT0FDckM2UCxHQUFBNkosSUF5QkEsSUFBQUcsTUFDQUMsTUFDQSxTQUFBQyxHQUFBdmQsRUFBQThJLEdBQ0EsSUFBQTlJLEdBQUEsUUFBQXBELEtBQUFvRCxHQUFzQyxZQUN0QyxJQUFBd2QsRUFBQTFVLEVBQUFrVSxhQUFBTSxHQUFBRCxHQUNBLE9BQUFHLEVBQUF4ZCxLQUNBd2QsRUFBQXhkLEtBQUEyUSxRQUFBLGlCQVFBLFNBQUE4TSxHQUFBM08sRUFBQTRPLEdBSUEsSUFBQTNkLEVBQUFLLEVBQUEsaUJBQUEvQyxFQUFBLDRCQUNBc2dCLEdBQWlCQyxJQUFBeGQsRUFBQSxPQUFBTCxHQUFBLG1CQUFBQSxVQUNqQjJFLElBQUEsRUFBQUQsSUFBQSxFQUFBcUssS0FDQStPLGVBQUEsRUFDQUMsYUFBQTdnQixHQUFBSSxJQUFBeVIsRUFBQWlQLFVBQUEsaUJBQ0FMLEVBQUFsSixXQUdBLFFBQUFoYSxFQUFBLEVBQWlCQSxJQUFBa2pCLEVBQUFNLEtBQUFOLEVBQUFNLEtBQUE3ZSxPQUFBLEdBQWlEM0UsSUFBQSxDQUNsRSxJQUFBcU4sRUFBQXJOLEVBQUFrakIsRUFBQU0sS0FBQXhqQixFQUFBLEdBQUFrakIsRUFBQTdWLEtBQUF3SCxPQUFBLEVBQ0FzTyxFQUFBbFosSUFBQSxFQUNBa1osRUFBQU0sU0FBQUMsR0FHQXZKLEdBQUE3RixFQUFBQyxRQUFBeUYsV0FBQW5GLEVBQUFzQyxHQUFBOUosRUFBQWlILEVBQUEzSCxJQUFBK0ksY0FDT3lOLEVBQUFNLFNBQUFFLEdBQUFSLEVBQUFNLFNBQUE1TyxJQUNQc08sRUFBQXhZLE9BQ0EsSUFBQWlaLEVBQUFWLEdBQUE1TyxFQUFBQyxRQUFBc1Asa0JBQUFqVyxHQUFBUCxHQUNBeVcsR0FBQXpXLEVBQUE4VixFQUFBbEQsR0FBQTNMLEVBQUFqSCxFQUFBdVcsSUFDQXZXLEVBQUFtVCxlQUNBblQsRUFBQW1ULGFBQUFULFVBQ1NvRCxFQUFBcEQsUUFBQXZaLEVBQUE2RyxFQUFBbVQsYUFBQVQsUUFBQW9ELEVBQUFwRCxTQUFBLEtBQ1QxUyxFQUFBbVQsYUFBQVIsWUFDU21ELEVBQUFuRCxVQUFBeFosRUFBQTZHLEVBQUFtVCxhQUFBUixVQUFBbUQsRUFBQW5ELFdBQUEsTUFJVCxHQUFBbUQsRUFBQXhZLElBQUFoRyxRQUNPd2UsRUFBQXhZLElBQUFILEtBQUEsSUFBQTJZLEVBQUE1ZCxRQUFBSCxZQUFBMlUsR0FBQXpGLEVBQUFDLFFBQUF5RixXQUdQLEdBQUFoYSxHQUNBa2pCLEVBQUFsSixRQUFBclAsSUFBQXdZLEVBQUF4WSxJQUNBdVksRUFBQWxKLFFBQUFnSixZQUVBRSxFQUFBbEosUUFBQStKLE9BQUFiLEVBQUFsSixRQUFBK0osVUFBQXZaLEtBQUEyWSxFQUFBeFksTUFDT3VZLEVBQUFsSixRQUFBZ0ssU0FBQWQsRUFBQWxKLFFBQUFnSyxZQUFBeFosVUFLUCxHQUFBM0gsRUFBQSxDQUNBLElBQUF3TSxFQUFBOFQsRUFBQTVkLFFBQUEwZSxXQUNBLGFBQUE3aEIsS0FBQWlOLEVBQUE5SyxZQUFBOEssRUFBQTZVLGVBQUE3VSxFQUFBNlUsY0FBQSxjQUNPZixFQUFBNWQsUUFBQWhCLFVBQUEsb0JBT1AsT0FKQXlULEdBQUExRCxFQUFBLGFBQUFBLEVBQUE0TyxFQUFBN1YsS0FBQThWLEVBQUFDLEtBQ0FELEVBQUFDLElBQUE3ZSxZQUNLNGUsRUFBQW5ELFVBQUF4WixFQUFBMmMsRUFBQUMsSUFBQTdlLFVBQUE0ZSxFQUFBbkQsV0FBQSxLQUVMbUQsRUFHQSxTQUFBZ0IsR0FBQS9ZLEdBQ0EsSUFBQXdXLEVBQUF2YyxFQUFBLDZCQUdBLE9BRkF1YyxFQUFBd0MsTUFBQSxNQUFBaFosRUFBQVMsV0FBQSxHQUFBcEMsU0FBQSxJQUNBbVksRUFBQS9iLGFBQUEsYUFBQStiLEVBQUF3QyxPQUNBeEMsRUFLQSxTQUFBOEIsR0FBQVAsRUFBQTVWLEVBQUEvSCxFQUFBNmUsRUFBQUMsRUFBQUYsRUFBQUcsR0FDQSxHQUFBaFgsRUFBQSxDQUNBLElBRUFoSSxFQUZBaWYsRUFBQXJCLEVBQUFHLFlBNERBLFNBQUEvVixFQUFBa1gsR0FDQSxHQUFBbFgsRUFBQTVJLE9BQUEsU0FBQXZDLEtBQUFtTCxHQUE0QyxPQUFBQSxFQUU1QyxJQURBLElBQUFtWCxFQUFBRCxFQUFBOUosRUFBQSxHQUNBM2EsRUFBQSxFQUFpQkEsRUFBQXVOLEVBQUE1SSxPQUFpQjNFLElBQUEsQ0FDbEMsSUFBQW9MLEVBQUFtQyxFQUFBdEIsT0FBQWpNLEdBQ0EsS0FBQW9MLElBQUFzWixHQUFBMWtCLEdBQUF1TixFQUFBNUksT0FBQSxPQUFBNEksRUFBQTFCLFdBQUE3TCxFQUFBLEtBQ09vTCxFQUFBLEtBQ1B1UCxHQUFBdlAsRUFDQXNaLEVBQUEsS0FBQXRaLEVBRUEsT0FBQXVQLEVBdEVBMkksQ0FBQS9WLEVBQUE0VixFQUFBRSxlQUFBOVYsRUFDQW9YLEVBQUF4QixFQUFBN08sR0FBQWtJLE1BQUFvSSxhQUFBQyxHQUFBLEVBRUEsR0FBQUYsRUFBQXZpQixLQUFBbUwsR0FNRyxDQUNIaEksRUFBQTVDLFNBQUFtaUIseUJBRUEsSUFEQSxJQUFBN2EsRUFBQSxJQUNBLENBQ0EwYSxFQUFBSSxVQUFBOWEsRUFDQSxJQUFBN0osRUFBQXVrQixFQUFBcGlCLEtBQUFnTCxHQUNBcEQsRUFBQS9KLElBQUFzRSxNQUFBdUYsRUFBQXNELEVBQUE1SSxPQUFBc0YsRUFDQSxHQUFBRSxFQUFBLENBQ0EsSUFBQWlRLEVBQUF6WCxTQUFBZ0QsZUFBQTZlLEVBQUEvZixNQUFBd0YsSUFBQUUsSUFDQTFILEdBQUFDLEVBQUEsRUFBbUM2QyxFQUFBSCxZQUFBQyxFQUFBLFFBQUErVSxLQUNyQjdVLEVBQUFILFlBQUFnVixHQUNkK0ksRUFBQXhZLElBQUFILEtBQUEyWSxFQUFBbFosSUFBQWtaLEVBQUFsWixJQUFBRSxFQUFBaVEsR0FDQStJLEVBQUFqWixLQUFBQyxFQUNBZ1osRUFBQWxaLEtBQUFFLEVBRUEsSUFBQS9KLEVBQWUsTUFDZjZKLEdBQUFFLEVBQUEsRUFDQSxJQUFBNmEsT0FBQSxFQUNBLFNBQUE1a0IsRUFBQSxJQUNBLElBQUFrSSxFQUFBNmEsRUFBQTdPLEdBQUFoRyxRQUFBaEcsUUFBQTJjLEVBQUEzYyxFQUFBNmEsRUFBQWpaLElBQUE1QixHQUNBMGMsRUFBQXpmLEVBQUFILFlBQUFDLEVBQUEsT0FBQWtGLEVBQUEwYSxHQUFBLFlBQ0FwZixhQUFBLHVCQUNBbWYsRUFBQW5mLGFBQUEsZ0JBQ0FzZCxFQUFBalosS0FBQSthLE1BQ08sTUFBQTdrQixFQUFBLFVBQUFBLEVBQUEsS0FDUDRrQixFQUFBemYsRUFBQUgsWUFBQUMsRUFBQSxhQUFBakYsRUFBQSwrQkFDQXlGLGFBQUEsVUFBQXpGLEVBQUEsSUFDQStpQixFQUFBalosS0FBQSxLQUVBOGEsRUFBQTdCLEVBQUE3TyxHQUFBaEcsUUFBQTRXLHVCQUFBOWtCLEVBQUEsS0FDQXlGLGFBQUEsVUFBQXpGLEVBQUEsSUFDQXFDLEdBQUFDLEVBQUEsRUFBbUM2QyxFQUFBSCxZQUFBQyxFQUFBLFFBQUEyZixLQUNyQnpmLEVBQUFILFlBQUE0ZixHQUNkN0IsRUFBQWpaLEtBQUEsR0FFQWlaLEVBQUF4WSxJQUFBSCxLQUFBMlksRUFBQWxaLElBQUFrWixFQUFBbFosSUFBQSxFQUFBK2EsR0FDQTdCLEVBQUFsWixZQXpDQWtaLEVBQUFqWixLQUFBcUQsRUFBQTVJLE9BQ0FZLEVBQUE1QyxTQUFBZ0QsZUFBQTZlLEdBQ0FyQixFQUFBeFksSUFBQUgsS0FBQTJZLEVBQUFsWixJQUFBa1osRUFBQWxaLElBQUFzRCxFQUFBNUksT0FBQVksR0FDQTlDLEdBQUFDLEVBQUEsSUFBK0JtaUIsR0FBQSxHQUMvQjFCLEVBQUFsWixLQUFBc0QsRUFBQTVJLE9BeUNBLEdBREF3ZSxFQUFBRSxjQUFBLElBQUFtQixFQUFBM1ksV0FBQTBCLEVBQUE1SSxPQUFBLEdBQ0FhLEdBQUE2ZSxHQUFBQyxHQUFBTyxHQUFBTixFQUFBLENBQ0EsSUFBQVksRUFBQTNmLEdBQUEsR0FDQTZlLElBQXFCYyxHQUFBZCxHQUNyQkMsSUFBbUJhLEdBQUFiLEdBQ25CLElBQUExQyxFQUFBdmMsRUFBQSxRQUFBRSxHQUFBNGYsRUFBQVosR0FFQSxPQURBSCxJQUFnQnhDLEVBQUF3QyxTQUNoQmpCLEVBQUE1ZCxRQUFBSCxZQUFBd2MsR0FFQXVCLEVBQUE1ZCxRQUFBSCxZQUFBRyxJQWtCQSxTQUFBb2UsR0FBQW5GLEVBQUEzSixHQUNBLGdCQUFBc08sRUFBQTVWLEVBQUEvSCxFQUFBNmUsRUFBQUMsRUFBQUYsRUFBQUcsR0FDQS9lLE1BQUEscUNBRUEsSUFEQSxJQUFBc0IsRUFBQXFjLEVBQUFsWixJQUFBbEQsRUFBQUQsRUFBQXlHLEVBQUE1SSxTQUNXLENBR1gsSUFEQSxJQUFBeWdCLE9BQUEsRUFDQXBsQixFQUFBLEVBQXFCQSxFQUFBNlUsRUFBQWxRLFdBQ3JCeWdCLEVBQUF2USxFQUFBN1UsSUFDQXFNLEdBQUF2RixHQUFBc2UsRUFBQWhaLE1BQUF0RixHQUZ1QzlHLEtBSXZDLEdBQUFvbEIsRUFBQS9ZLElBQUF0RixFQUEyQixPQUFBeVgsRUFBQTJFLEVBQUE1VixFQUFBL0gsRUFBQTZlLEVBQUFDLEVBQUFGLEVBQUFHLEdBQzNCL0YsRUFBQTJFLEVBQUE1VixFQUFBOUksTUFBQSxFQUFBMmdCLEVBQUEvWSxHQUFBdkYsR0FBQXRCLEVBQUE2ZSxFQUFBLEtBQUFELEVBQUFHLEdBQ0FGLEVBQUEsS0FDQTlXLElBQUE5SSxNQUFBMmdCLEVBQUEvWSxHQUFBdkYsR0FDQUEsRUFBQXNlLEVBQUEvWSxLQUtBLFNBQUFnWixHQUFBbEMsRUFBQXRXLEVBQUErQyxFQUFBMFYsR0FDQSxJQUFBQyxHQUFBRCxHQUFBMVYsRUFBQW1FLFdBQ0F3UixHQUFlcEMsRUFBQXhZLElBQUFILEtBQUEyWSxFQUFBbFosSUFBQWtaLEVBQUFsWixJQUFBNEMsRUFBQTBZLElBQ2ZELEdBQUFuQyxFQUFBN08sR0FBQUMsUUFBQWlSLE1BQUFDLHdCQUNBRixJQUNPQSxFQUFBcEMsRUFBQTVkLFFBQUFILFlBQUF6QyxTQUFBOEMsY0FBQSxVQUNQOGYsRUFBQTFmLGFBQUEsWUFBQStKLEVBQUEzRyxLQUVBc2MsSUFDQXBDLEVBQUE3TyxHQUFBQyxRQUFBaVIsTUFBQUUsY0FBQUgsR0FDQXBDLEVBQUE1ZCxRQUFBSCxZQUFBbWdCLElBRUFwQyxFQUFBbFosS0FBQTRDLEVBQ0FzVyxFQUFBRSxlQUFBLEVBS0EsU0FBQVMsR0FBQXpXLEVBQUE4VixFQUFBdEQsR0FDQSxJQUFBL1AsRUFBQXpDLEVBQUFnRCxZQUFBc1YsRUFBQXRZLEVBQUFFLEtBQUF1SixFQUFBLEVBQ0EsR0FBQWhILEVBUUEsSUFGQSxJQUFBdEssRUFBQStlLEVBQ0FxQixFQUFBQyxFQUFBQyxFQUFBMUIsRUFBQW5SLEVBREFtQixFQUFBdVIsRUFBQWhoQixPQUFBc0YsRUFBQSxFQUFBakssRUFBQSxFQUFBdU4sRUFBQSxHQUNBd1ksRUFBQSxJQUNTLENBQ1QsR0FBQUEsR0FBQTliLEVBQUEsQ0FDQTJiLEVBQUFDLEVBQUFDLEVBQUExQixFQUFBRyxFQUFBLEdBQ0F0UixFQUFBLEtBQXVCOFMsRUFBQUMsSUFFdkIsSUFEQSxJQUFBQyxLQUFBQyxPQUFBLEVBQ0E5UCxFQUFBLEVBQXFCQSxFQUFBdEcsRUFBQW5MLFNBQWtCeVIsRUFBQSxDQUN2QyxJQUFBcEQsRUFBQWxELEVBQUFzRyxHQUFBaFcsRUFBQTRTLEVBQUFwRCxPQUNBLFlBQUF4UCxFQUFBMFEsTUFBQWtDLEVBQUE1RyxNQUFBbkMsR0FBQTdKLEVBQUEyVCxXQUNBa1MsRUFBQXpiLEtBQUFwSyxHQUNTNFMsRUFBQTVHLE1BQUFuQyxJQUFBLE1BQUErSSxFQUFBM0csSUFBQTJHLEVBQUEzRyxHQUFBcEMsR0FBQTdKLEVBQUE2UyxXQUFBRCxFQUFBM0csSUFBQXBDLEdBQUErSSxFQUFBNUcsTUFBQW5DLElBQ1QsTUFBQStJLEVBQUEzRyxJQUFBMkcsRUFBQTNHLElBQUFwQyxHQUFBOGIsRUFBQS9TLEVBQUEzRyxLQUNBMFosRUFBQS9TLEVBQUEzRyxHQUNBd1osRUFBQSxJQUVBemxCLEVBQUFtRSxZQUE0QnFoQixHQUFBLElBQUF4bEIsRUFBQW1FLFdBQzVCbkUsRUFBQW1rQixNQUFzQkEsT0FBQSxJQUFzQixJQUFBbmtCLEVBQUFta0IsS0FDNUNua0IsRUFBQWlrQixZQUFBclIsRUFBQTVHLE1BQUFuQyxJQUErQzZiLEdBQUEsSUFBQTFsQixFQUFBaWtCLFlBQy9DamtCLEVBQUFra0IsVUFBQXRSLEVBQUEzRyxJQUFBMFosSUFBa0RHLFdBQUExYixLQUFBcEssRUFBQWtrQixTQUFBdFIsRUFBQTNHLElBQ2xEak0sRUFBQWdrQixZQUFrQ0EsRUFBQWhrQixFQUFBZ2tCLE9BQ2xDaGtCLEVBQUE2UyxnQkFBQVYsR0FBQVUsRUFBQXJELE9BQUF4UCxHQUFBLEtBQ2E2UyxFQUFBRCxJQUNKQSxFQUFBNUcsS0FBQW5DLEdBQUE4YixFQUFBL1MsRUFBQTVHLE9BQ1QyWixFQUFBL1MsRUFBQTVHLE1BR0EsR0FBQThaLEVBQXNCLFFBQUF0UCxFQUFBLEVBQWtCQSxFQUFBc1AsRUFBQXZoQixPQUF3QmlTLEdBQUEsRUFDdkRzUCxFQUFBdFAsRUFBQSxJQUFBbVAsSUFBd0NGLEdBQUEsSUFBQUssRUFBQXRQLElBRWpELElBQUEzRCxLQUFBN0csTUFBQW5DLEVBQWdELFFBQUE4TSxFQUFBLEVBQWtCQSxFQUFBa1AsRUFBQXRoQixTQUE2Qm9TLEVBQ3RGc08sR0FBQWxDLEVBQUEsRUFBQThDLEVBQUFsUCxJQUNULEdBQUE5RCxNQUFBN0csTUFBQSxJQUFBbkMsRUFBQSxDQUdBLEdBRkFvYixHQUFBbEMsR0FBQSxNQUFBbFEsRUFBQTVHLEdBQUErSCxFQUFBLEVBQUFuQixFQUFBNUcsSUFBQXBDLEVBQ0FnSixFQUFBckQsT0FBQSxNQUFBcUQsRUFBQTdHLE1BQ0EsTUFBQTZHLEVBQUE1RyxHQUFtQyxPQUNuQzRHLEVBQUE1RyxJQUFBcEMsSUFBa0NnSixHQUFBLElBR2xDLEdBQUFoSixHQUFBbUssRUFBcUIsTUFHckIsSUFEQSxJQUFBK1IsRUFBQS9iLEtBQUFDLElBQUErSixFQUFBMlIsS0FDQSxDQUNBLEdBQUF4WSxFQUFBLENBQ0EsSUFBQXhHLEVBQUFrRCxFQUFBc0QsRUFBQTVJLE9BQ0EsSUFBQXNPLEVBQUEsQ0FDQSxJQUFBbVQsRUFBQXJmLEVBQUFvZixFQUFBNVksRUFBQTlJLE1BQUEsRUFBQTBoQixFQUFBbGMsR0FBQXNELEVBQ0E0VixFQUFBTSxTQUFBTixFQUFBaUQsRUFBQTVnQixJQUFBb2dCLElBQ0FFLEVBQUE3YixFQUFBbWMsRUFBQXpoQixRQUFBb2hCLEVBQUFGLEVBQUEsR0FBQXpCLEVBQUFHLEdBRUEsR0FBQXhkLEdBQUFvZixFQUFBLENBQTBCNVksSUFBQTlJLE1BQUEwaEIsRUFBQWxjLEdBQThCQSxFQUFBa2MsRUFBWSxNQUNwRWxjLEVBQUFsRCxFQUNBK2UsRUFBQSxHQUVBdlksRUFBQW9ZLEVBQUFsaEIsTUFBQXFTLElBQUErSSxFQUFBN2YsTUFDQXdGLEVBQUF1ZCxHQUFBbEQsRUFBQTdmLEtBQUFtakIsRUFBQTdPLEdBQUFoRyxlQTVEQSxRQUFBSixFQUFBLEVBQXFCQSxFQUFBMlIsRUFBQWxiLE9BQXFCdUosR0FBQSxFQUNuQ2lWLEVBQUFNLFNBQUFOLEVBQUF3QyxFQUFBbGhCLE1BQUFxUyxJQUFBK0ksRUFBQTNSLElBQUE2VSxHQUFBbEQsRUFBQTNSLEVBQUEsR0FBQWlWLEVBQUE3TyxHQUFBaEcsVUFvRVAsU0FBQStYLEdBQUExWixFQUFBVSxFQUFBcUcsR0FFQTFLLEtBQUFxRSxPQUVBckUsS0FBQXdhLEtBN3ZDQSxTQUFBblcsR0FFQSxJQURBLElBQUFtRyxFQUFBeEcsRUFDQXdHLEVBQUFMLEdBQUE5RixJQUNBQSxFQUFBbUcsRUFBQWQsS0FBQSxNQUFBckYsTUFDS0wsV0FBQXhDLEtBQUE2QyxHQUVMLE9BQUFMLEVBdXZDQXNaLENBQUFqWixHQUVBckUsS0FBQTZELEtBQUE3RCxLQUFBd2EsS0FBQTVWLEdBQUFuRCxFQUFBekIsS0FBQXdhLE9BQUE5UCxFQUFBLElBQ0ExSyxLQUFBM0UsS0FBQTJFLEtBQUF1RSxLQUFBLEtBQ0F2RSxLQUFBdWQsT0FBQXpTLEdBQUFuSCxFQUFBVSxHQUlBLFNBQUFtWixHQUFBbFMsRUFBQWxJLEVBQUFDLEdBRUEsSUFEQSxJQUFBb2EsRUFBQXZkLEtBQ0FlLEVBQUFtQyxFQUFzQm5DLEVBQUFvQyxFQUFVcEMsRUFBQXdjLEVBQUEsQ0FDaEMsSUFBQUMsRUFBQSxJQUFBTCxHQUFBL1IsRUFBQTNILElBQUFELEdBQUE0SCxFQUFBM0gsSUFBQTFDLE1BQ0F3YyxFQUFBeGMsRUFBQXljLEVBQUE3WixLQUNBM0QsRUFBQXNCLEtBQUFrYyxHQUVBLE9BQUF4ZCxFQUdBLElBQUF5ZCxHQUFBLEtBd0NBQyxHQUFBLEtBU0EsU0FBQUMsR0FBQXZQLEVBQUF4RyxHQUNBLElBQUFwRyxFQUFBa04sR0FBQU4sRUFBQXhHLEdBQ0EsR0FBQXBHLEVBQUEvRixPQUFBLENBQ0EsSUFBQW1pQixFQUFBbmYsRUFBQUMsTUFBQWhHLFVBQUE2QyxNQUFBdEUsS0FBQTBILFVBQUEsR0FDQThlLEdBQ0FHLEVBQUFILEdBQUFJLGlCQUNHSCxHQUNIRSxFQUFBRixJQUVBRSxFQUFBRixNQUNBdGQsV0FBQTBkLEdBQUEsSUFNQSxJQUpBLElBQUF4SCxFQUFBLFNBQUF4ZixHQUNBOG1CLEVBQUF0YyxLQUFBLFdBQTJCLE9BQUFFLEVBQUExSyxHQUFBOEgsTUFBQSxLQUFBSCxNQUczQjNILEVBQUEsRUFBaUJBLEVBQUEwSyxFQUFBL0YsU0FBZ0IzRSxFQUNqQ3dmLEVBQUF4ZixJQUdBLFNBQUFnbkIsS0FDQSxJQUFBQyxFQUFBTCxHQUNBQSxHQUFBLEtBQ0EsUUFBQTVtQixFQUFBLEVBQWlCQSxFQUFBaW5CLEVBQUF0aUIsU0FBb0IzRSxFQUFPaW5CLEVBQUFqbkIsS0FNNUMsU0FBQWtuQixHQUFBNVMsRUFBQTRPLEVBQUF4UCxFQUFBeVQsR0FDQSxRQUFBL1EsRUFBQSxFQUFpQkEsRUFBQThNLEVBQUFrRSxRQUFBemlCLE9BQTZCeVIsSUFBQSxDQUM5QyxJQUFBdEYsRUFBQW9TLEVBQUFrRSxRQUFBaFIsR0FDQSxRQUFBdEYsRUFBeUJ1VyxHQUFBL1MsRUFBQTRPLEdBQ3pCLFVBQUFwUyxFQUFnQ3dXLEdBQUFoVCxFQUFBNE8sRUFBQXhQLEVBQUF5VCxHQUNoQyxTQUFBclcsRUFBK0J5VyxHQUFBalQsRUFBQTRPLEdBQy9CLFVBQUFwUyxHQUFnQzBXLEdBQUFsVCxFQUFBNE8sRUFBQWlFLEdBRWhDakUsRUFBQWtFLFFBQUEsS0FLQSxTQUFBSyxHQUFBdkUsR0FRQSxPQVBBQSxFQUFBN2UsTUFBQTZlLEVBQUEzVixPQUNBMlYsRUFBQTdlLEtBQUFnQixFQUFBLHNDQUNBNmQsRUFBQTNWLEtBQUF0SCxZQUNPaWQsRUFBQTNWLEtBQUF0SCxXQUFBeWhCLGFBQUF4RSxFQUFBN2UsS0FBQTZlLEVBQUEzVixNQUNQMlYsRUFBQTdlLEtBQUFlLFlBQUE4ZCxFQUFBM1YsTUFDQTlLLEdBQUFDLEVBQUEsSUFBK0J3Z0IsRUFBQTdlLEtBQUFtQixNQUFBbWlCLE9BQUEsSUFFL0J6RSxFQUFBN2UsS0FrQkEsU0FBQXVqQixHQUFBdFQsRUFBQTRPLEdBQ0EsSUFBQTJFLEVBQUF2VCxFQUFBQyxRQUFBc1AsaUJBQ0EsT0FBQWdFLEtBQUF4YSxNQUFBNlYsRUFBQTdWLE1BQ0FpSCxFQUFBQyxRQUFBc1AsaUJBQUEsS0FDQVgsRUFBQWxKLFFBQUE2TixFQUFBN04sUUFDQTZOLEVBQUFDLE9BRUE3RSxHQUFBM08sRUFBQTRPLEdBTUEsU0FBQW1FLEdBQUEvUyxFQUFBNE8sR0FDQSxJQUFBamYsRUFBQWlmLEVBQUEzVixLQUFBaEosVUFDQXVqQixFQUFBRixHQUFBdFQsRUFBQTRPLEdBQ0FBLEVBQUEzVixNQUFBMlYsRUFBQTdlLE9BQXVDNmUsRUFBQTdlLEtBQUF5akIsRUFBQTFFLEtBQ3ZDRixFQUFBM1YsS0FBQXRILFdBQUF5aEIsYUFBQUksRUFBQTFFLElBQUFGLEVBQUEzVixNQUNBMlYsRUFBQTNWLEtBQUF1YSxFQUFBMUUsSUFDQTBFLEVBQUEvSCxTQUFBbUQsRUFBQW5ELFNBQUErSCxFQUFBOUgsV0FBQWtELEVBQUFsRCxXQUNBa0QsRUFBQW5ELFFBQUErSCxFQUFBL0gsUUFDQW1ELEVBQUFsRCxVQUFBOEgsRUFBQTlILFVBQ0F1SCxHQUFBalQsRUFBQTRPLElBQ0dqZixJQUNIaWYsRUFBQTNWLEtBQUFoSixVQUFBTixHQUlBLFNBQUFzakIsR0FBQWpULEVBQUE0TyxJQTNDQSxTQUFBNU8sRUFBQTRPLEdBQ0EsSUFBQWpmLEVBQUFpZixFQUFBbkQsUUFBQW1ELEVBQUFuRCxRQUFBLEtBQUFtRCxFQUFBN1YsS0FBQTBTLFNBQUEsSUFBQW1ELEVBQUE3VixLQUFBMFMsUUFFQSxHQURBOWIsSUFBWUEsR0FBQSw4QkFDWmlmLEVBQUE2RSxXQUNBOWpCLEVBQWNpZixFQUFBNkUsV0FBQXhqQixVQUFBTixHQUNKaWYsRUFBQTZFLFdBQUE5aEIsV0FBQWpCLFlBQUFrZSxFQUFBNkUsWUFBaUU3RSxFQUFBNkUsV0FBQSxXQUN4RSxHQUFBOWpCLEVBQUEsQ0FDSCxJQUFBK2pCLEVBQUFQLEdBQUF2RSxHQUNBQSxFQUFBNkUsV0FBQUMsRUFBQUMsYUFBQTVpQixFQUFBLFdBQUFwQixHQUFBK2pCLEVBQUEvaUIsWUFDQXFQLEVBQUFDLFFBQUFpUixNQUFBRSxjQUFBeEMsRUFBQTZFLGFBbUNBRyxDQUFBNVQsRUFBQTRPLEdBQ0FBLEVBQUE3VixLQUFBOGEsVUFDS1YsR0FBQXZFLEdBQUEzZSxVQUFBMmUsRUFBQTdWLEtBQUE4YSxVQUNMakYsRUFBQTdlLE1BQUE2ZSxFQUFBM1YsT0FDSzJWLEVBQUE3ZSxLQUFBRSxVQUFBLElBQ0wsSUFBQXliLEVBQUFrRCxFQUFBbEQsVUFBQWtELEVBQUFsRCxVQUFBLEtBQUFrRCxFQUFBN1YsS0FBQTJTLFdBQUEsSUFBQWtELEVBQUE3VixLQUFBMlMsVUFDQWtELEVBQUEzVixLQUFBaEosVUFBQXliLEdBQUEsR0FHQSxTQUFBc0gsR0FBQWhULEVBQUE0TyxFQUFBeFAsRUFBQXlULEdBU0EsR0FSQWpFLEVBQUFrRixTQUNBbEYsRUFBQTdlLEtBQUFXLFlBQUFrZSxFQUFBa0YsUUFDQWxGLEVBQUFrRixPQUFBLE1BRUFsRixFQUFBbUYsbUJBQ0FuRixFQUFBN2UsS0FBQVcsWUFBQWtlLEVBQUFtRixrQkFDQW5GLEVBQUFtRixpQkFBQSxNQUVBbkYsRUFBQTdWLEtBQUFpYixZQUFBLENBQ0EsSUFBQU4sRUFBQVAsR0FBQXZFLEdBQ0FBLEVBQUFtRixpQkFBQWhqQixFQUFBLDJDQUFBNmQsRUFBQTdWLEtBQUFpYixZQUNBLFVBQUFoVSxFQUFBaEcsUUFBQWlhLFlBQUFwQixFQUFBcUIsVUFBQXJCLEVBQUFzQixrQkFBQSxjQUF3SHRCLEVBQUEsdUJBQ3hIN1MsRUFBQUMsUUFBQWlSLE1BQUFFLGNBQUF4QyxFQUFBbUYsa0JBQ0FMLEVBQUFDLGFBQUEvRSxFQUFBbUYsaUJBQUFuRixFQUFBM1YsTUFFQSxJQUFBbWIsRUFBQXhGLEVBQUE3VixLQUFBc2IsY0FDQSxHQUFBclUsRUFBQWhHLFFBQUFzYSxhQUFBRixFQUFBLENBQ0EsSUFBQUcsRUFBQXBCLEdBQUF2RSxHQUNBNEYsRUFBQTVGLEVBQUFrRixPQUFBL2lCLEVBQUEsaURBQUFpUCxFQUFBaEcsUUFBQWlhLFlBQUFwQixFQUFBcUIsVUFBQXJCLEVBQUFzQixrQkFBQSxNQVVBLEdBVEFuVSxFQUFBQyxRQUFBaVIsTUFBQUUsY0FBQW9ELEdBQ0FELEVBQUFaLGFBQUFhLEVBQUE1RixFQUFBM1YsTUFDQTJWLEVBQUE3VixLQUFBaWIsY0FDT1EsRUFBQXZrQixXQUFBLElBQUEyZSxFQUFBN1YsS0FBQWliLGNBQ1BoVSxFQUFBaEcsUUFBQXNhLGFBQUFGLEtBQUEsNEJBQ094RixFQUFBNkYsV0FBQUQsRUFBQTFqQixZQUNQQyxFQUFBLE1BQUFnSixHQUFBaUcsRUFBQWhHLFFBQUFvRixHQUNBLDhDQUNBLFNBQUF5VCxFQUFBNkIsV0FBQSx3Q0FBMEUxVSxFQUFBQyxRQUFBLDBCQUMxRW1VLEVBQWtCLFFBQUFPLEVBQUEsRUFBZ0JBLEVBQUEzVSxFQUFBaEcsUUFBQTRhLFFBQUF2a0IsU0FBK0Jza0IsRUFBQSxDQUNqRSxJQUFBaGdCLEVBQUFxTCxFQUFBaEcsUUFBQTRhLFFBQUFELEdBQUEzWCxFQUFBb1gsRUFBQTdtQixlQUFBb0gsSUFBQXlmLEVBQUF6ZixHQUNBcUksR0FDU3dYLEVBQUExakIsWUFBQUMsRUFBQSxPQUFBaU0sR0FBQSx3QkFDVCxTQUFBNlYsRUFBQTZCLFdBQUEvZixHQUFBLGNBQTJFa2UsRUFBQWdDLFlBQUFsZ0IsR0FBQSxTQUszRSxTQUFBdWUsR0FBQWxULEVBQUE0TyxFQUFBaUUsR0FDQWpFLEVBQUFrRyxZQUEyQmxHLEVBQUFrRyxVQUFBLE1BQzNCLFFBQUEva0IsRUFBQTZlLEVBQUE3ZSxLQUFBWSxXQUFBd1ksT0FBQSxFQUE0RHBaLEVBQU1BLEVBQUFvWixFQUNsRUEsRUFBQXBaLEVBQUFnbEIsWUFDQSx5QkFBQWhsQixFQUFBRSxXQUNPMmUsRUFBQTdlLEtBQUFXLFlBQUFYLEdBRVBpbEIsR0FBQWhWLEVBQUE0TyxFQUFBaUUsR0FJQSxTQUFBb0MsR0FBQWpWLEVBQUE0TyxFQUFBeFAsRUFBQXlULEdBQ0EsSUFBQVcsRUFBQUYsR0FBQXRULEVBQUE0TyxHQVFBLE9BUEFBLEVBQUEzVixLQUFBMlYsRUFBQTdlLEtBQUF5akIsRUFBQTFFLElBQ0EwRSxFQUFBL0gsVUFBc0JtRCxFQUFBbkQsUUFBQStILEVBQUEvSCxTQUN0QitILEVBQUE5SCxZQUF3QmtELEVBQUFsRCxVQUFBOEgsRUFBQTlILFdBRXhCdUgsR0FBQWpULEVBQUE0TyxHQUNBb0UsR0FBQWhULEVBQUE0TyxFQUFBeFAsRUFBQXlULEdBQ0FtQyxHQUFBaFYsRUFBQTRPLEVBQUFpRSxHQUNBakUsRUFBQTdlLEtBS0EsU0FBQWlsQixHQUFBaFYsRUFBQTRPLEVBQUFpRSxHQUVBLEdBREFxQyxHQUFBbFYsRUFBQTRPLEVBQUE3VixLQUFBNlYsRUFBQWlFLEdBQUEsR0FDQWpFLEVBQUFNLEtBQXNCLFFBQUF4akIsRUFBQSxFQUFnQkEsRUFBQWtqQixFQUFBTSxLQUFBN2UsT0FBMEIzRSxJQUMzRHdwQixHQUFBbFYsRUFBQTRPLEVBQUFNLEtBQUF4akIsR0FBQWtqQixFQUFBaUUsR0FBQSxHQUdMLFNBQUFxQyxHQUFBbFYsRUFBQWpILEVBQUE2VixFQUFBaUUsRUFBQXNDLEdBQ0EsR0FBQXBjLEVBQUFxYyxRQUVBLElBREEsSUFBQTFCLEVBQUFQLEdBQUF2RSxHQUNBbGpCLEVBQUEsRUFBQTJwQixFQUFBdGMsRUFBQXFjLFFBQW9DMXBCLEVBQUEycEIsRUFBQWhsQixTQUFlM0UsRUFBQSxDQUNuRCxJQUFBdWxCLEVBQUFvRSxFQUFBM3BCLEdBQUFxRSxFQUFBZ0IsRUFBQSxPQUFBa2dCLEVBQUFsaEIsTUFBQSx5QkFDQWtoQixFQUFBcUUsbUJBQW9DdmxCLEVBQUF3QixhQUFBLDJCQUNwQ2drQixHQUFBdEUsRUFBQWxoQixFQUFBNmUsRUFBQWlFLEdBQ0E3UyxFQUFBQyxRQUFBaVIsTUFBQUUsY0FBQXJoQixHQUNBb2xCLEdBQUFsRSxFQUFBdUUsTUFDTzlCLEVBQUFDLGFBQUE1akIsRUFBQTZlLEVBQUFrRixRQUFBbEYsRUFBQTNWLE1BRUF5YSxFQUFBNWlCLFlBQUFmLEdBQ1B3aUIsR0FBQXRCLEVBQUEsV0FJQSxTQUFBc0UsR0FBQXRFLEVBQUFsaEIsRUFBQTZlLEVBQUFpRSxHQUNBLEdBQUE1QixFQUFBd0UsVUFBQSxFQUNBN0csRUFBQWtHLFlBQUFsRyxFQUFBa0csZUFBQTVlLEtBQUFuRyxHQUNBLElBQUEybEIsRUFBQTdDLEVBQUE4QyxhQUNBNWxCLEVBQUFtQixNQUFBZ1YsS0FBQTJNLEVBQUFxQixTQUFBLEtBQ0FqRCxFQUFBMkUsY0FDQUYsR0FBQTdDLEVBQUFzQixpQkFDQXBrQixFQUFBbUIsTUFBQTJrQixZQUFBaEQsRUFBQXNCLGlCQUFBLE1BRUFwa0IsRUFBQW1CLE1BQUF3a0IsUUFBQSxLQUVBekUsRUFBQTJFLGNBQ0E3bEIsRUFBQW1CLE1BQUFtaUIsT0FBQSxFQUNBdGpCLEVBQUFtQixNQUFBNGtCLFNBQUEsV0FDQTdFLEVBQUF3RSxZQUE0QjFsQixFQUFBbUIsTUFBQTZrQixZQUFBbEQsRUFBQXNCLGlCQUFBLE9BSTVCLFNBQUE2QixHQUFBL0UsR0FDQSxTQUFBQSxFQUFBN1gsT0FBOEIsT0FBQTZYLEVBQUE3WCxPQUM5QixJQUFBNEcsRUFBQWlSLEVBQUE1WSxJQUFBMkgsR0FDQSxJQUFBQSxFQUFZLFNBQ1osSUFBQXhPLEVBQUFuRCxTQUFBMEQsS0FBQWtmLEVBQUFsaEIsTUFBQSxDQUNBLElBQUFrbUIsRUFBQSxzQkFDQWhGLEVBQUEyRSxjQUNPSyxHQUFBLGlCQUFBalcsRUFBQUMsUUFBQTJVLFFBQUFoUCxZQUFBLE9BQ1BxTCxFQUFBd0UsWUFDT1EsR0FBQSxVQUFBalcsRUFBQUMsUUFBQWlXLFFBQUFDLFlBQUEsT0FDUHZsQixFQUFBb1AsRUFBQUMsUUFBQXlGLFFBQUEzVSxFQUFBLE9BQUFrZ0IsRUFBQWxoQixNQUFBLEtBQUFrbUIsSUFFQSxPQUFBaEYsRUFBQTdYLE9BQUE2WCxFQUFBbGhCLEtBQUE0QixXQUFBZ1UsYUFJQSxTQUFBeVEsR0FBQW5XLEVBQUExUCxHQUNBLFFBQUFwRCxFQUFBNFgsR0FBQXhVLEdBQTJCcEQsR0FBQThTLEVBQUFpVyxRQUFzQi9vQixJQUFBd0UsV0FDakQsSUFBQXhFLEdBQUEsR0FBQUEsRUFBQXVFLFVBQUEsUUFBQXZFLEVBQUFrcEIsYUFBQSxxQkFDQWxwQixFQUFBd0UsWUFBQXNPLEVBQUFxVyxPQUFBbnBCLEdBQUE4UyxFQUFBc1csTUFDTyxTQU1QLFNBQUFDLEdBQUF2VyxHQUE4QixPQUFBQSxFQUFBd1csVUFBQUMsVUFDOUIsU0FBQUMsR0FBQTFXLEdBQStCLE9BQUFBLEVBQUFzVyxNQUFBNVEsYUFBQTFGLEVBQUF3VyxVQUFBOVEsYUFDL0IsU0FBQWlSLEdBQUEzVyxHQUNBLEdBQUFBLEVBQUE0VyxlQUErQixPQUFBNVcsRUFBQTRXLGVBQy9CLElBQUF0bUIsRUFBQUssRUFBQXFQLEVBQUF5RixRQUFBM1UsRUFBQSxZQUNBRyxFQUFBNUYsT0FBQXdyQixpQkFBQXhyQixPQUFBd3JCLGlCQUFBdm1CLEtBQUF3bUIsYUFDQUMsR0FBYzlRLEtBQUErUSxTQUFBL2xCLEVBQUEya0IsYUFBQTFQLE1BQUE4USxTQUFBL2xCLEVBQUFnbUIsZUFFZCxPQURBQyxNQUFBSCxFQUFBOVEsT0FBQWlSLE1BQUFILEVBQUE3USxTQUFnRGxHLEVBQUE0VyxlQUFBRyxHQUNoREEsRUFHQSxTQUFBSSxHQUFBcFgsR0FBd0IsT0FBQS9LLEVBQUErSyxFQUFBQyxRQUFBb1gsZUFDeEIsU0FBQUMsR0FBQXRYLEdBQ0EsT0FBQUEsRUFBQUMsUUFBQXNYLFNBQUFwQixZQUFBaUIsR0FBQXBYLEtBQUFDLFFBQUF1WCxTQUVBLFNBQUFDLEdBQUF6WCxHQUNBLE9BQUFBLEVBQUFDLFFBQUFzWCxTQUFBRyxhQUFBTixHQUFBcFgsS0FBQUMsUUFBQTBYLFVBNEJBLFNBQUFDLEdBQUFoSixFQUFBN1YsRUFBQXFHLEdBQ0EsR0FBQXdQLEVBQUE3VixRQUNLLE9BQVMxQyxJQUFBdVksRUFBQWxKLFFBQUFyUCxJQUFBcVksTUFBQUUsRUFBQWxKLFFBQUFnSixPQUNkLFFBQUFoakIsRUFBQSxFQUFpQkEsRUFBQWtqQixFQUFBTSxLQUFBN2UsT0FBMEIzRSxJQUN0QyxHQUFBa2pCLEVBQUFNLEtBQUF4akIsSUFBQXFOLEVBQ0UsT0FBUzFDLElBQUF1WSxFQUFBbEosUUFBQStKLEtBQUEvakIsR0FBQWdqQixNQUFBRSxFQUFBbEosUUFBQWdLLE9BQUFoa0IsSUFDaEIsUUFBQWtPLEVBQUEsRUFBbUJBLEVBQUFnVixFQUFBTSxLQUFBN2UsT0FBNEJ1SixJQUMxQyxHQUFBTixHQUFBc1YsRUFBQU0sS0FBQXRWLElBQUF3RixFQUNFLE9BQVMvSSxJQUFBdVksRUFBQWxKLFFBQUErSixLQUFBN1YsR0FBQThVLE1BQUFFLEVBQUFsSixRQUFBZ0ssT0FBQTlWLEdBQUF3SSxRQUFBLEdBa0JoQixTQUFBeVYsR0FBQTdYLEVBQUFqSCxFQUFBakMsRUFBQWdoQixHQUNBLE9BQUFDLEdBQUEvWCxFQUFBZ1ksR0FBQWhZLEVBQUFqSCxHQUFBakMsRUFBQWdoQixHQUlBLFNBQUFHLEdBQUFqWSxFQUFBWixHQUNBLEdBQUFBLEdBQUFZLEVBQUFDLFFBQUE2TSxVQUFBMU4sRUFBQVksRUFBQUMsUUFBQThNLE9BQ0ssT0FBQS9NLEVBQUFDLFFBQUFtUyxLQUFBOEYsR0FBQWxZLEVBQUFaLElBQ0wsSUFBQW1VLEVBQUF2VCxFQUFBQyxRQUFBc1AsaUJBQ0EsT0FBQWdFLEdBQUFuVSxHQUFBbVUsRUFBQW5VLFNBQUFtVSxFQUFBblUsTUFBQW1VLEVBQUFoYixLQUNLZ2IsT0FETCxFQVNBLFNBQUF5RSxHQUFBaFksRUFBQWpILEdBQ0EsSUFBQXFHLEVBQUE5RixHQUFBUCxHQUNBcVosRUFBQTZGLEdBQUFqWSxFQUFBWixHQUNBZ1QsTUFBQW5aLEtBQ0FtWixFQUFBLEtBQ0dBLEtBQUFVLFVBQ0hGLEdBQUE1UyxFQUFBb1MsRUFBQWhULEVBQUErWSxHQUFBblksSUFDQUEsRUFBQW9FLE1BQUFnVSxhQUFBLEdBRUFoRyxJQUNLQSxFQXpDTCxTQUFBcFMsRUFBQWpILEdBRUEsSUFBQXFHLEVBQUE5RixHQURBUCxFQUFBa0csR0FBQWxHLElBRUFxWixFQUFBcFMsRUFBQUMsUUFBQXNQLGlCQUFBLElBQUF3QyxHQUFBL1IsRUFBQTNILElBQUFVLEVBQUFxRyxHQUNBZ1QsRUFBQWhULFFBQ0EsSUFBQW9VLEVBQUFwQixFQUFBb0IsTUFBQTdFLEdBQUEzTyxFQUFBb1MsR0FHQSxPQUZBQSxFQUFBblosS0FBQXVhLEVBQUExRSxJQUNBbGUsRUFBQW9QLEVBQUFDLFFBQUFvWSxZQUFBN0UsRUFBQTFFLEtBQ0FzRCxFQWlDS2tHLENBQUF0WSxFQUFBakgsSUFFTCxJQUFBdVAsRUFBQXNQLEdBQUF4RixFQUFBclosRUFBQXFHLEdBQ0EsT0FDQXJHLE9BQUFxWixPQUFBbUcsS0FBQSxLQUNBbGlCLElBQUFpUyxFQUFBalMsSUFBQXFZLE1BQUFwRyxFQUFBb0csTUFBQXRNLE9BQUFrRyxFQUFBbEcsT0FDQW9XLFlBQUEsR0FNQSxTQUFBVCxHQUFBL1gsRUFBQXlZLEVBQUEzaEIsRUFBQWdoQixFQUFBWSxHQUNBRCxFQUFBclcsU0FBd0J0TCxHQUFBLEdBQ3hCLElBQUFrRyxFQUFBL1AsRUFBQTZKLEdBQUFnaEIsR0FBQSxJQWFBLE9BWkFXLEVBQUEvSixNQUFBbmhCLGVBQUFOLEdBQ0ErUCxFQUFBeWIsRUFBQS9KLE1BQUF6aEIsSUFFQXdyQixFQUFBRixPQUNPRSxFQUFBRixLQUFBRSxFQUFBckcsS0FBQW5aLEtBQUErTSx5QkFDUHlTLEVBQUFELGFBL0ZBLFNBQUF4WSxFQUFBNE8sRUFBQTJKLEdBQ0EsSUFBQUksRUFBQTNZLEVBQUFoRyxRQUFBNGUsYUFDQUMsRUFBQUYsR0FBQXJCLEdBQUF0WCxHQUNBLElBQUE0TyxFQUFBbEosUUFBQW9ULFNBQUFILEdBQUEvSixFQUFBbEosUUFBQWdRLE9BQUFtRCxFQUFBLENBQ0EsSUFBQUMsRUFBQWxLLEVBQUFsSixRQUFBb1QsV0FDQSxHQUFBSCxFQUFBLENBQ0EvSixFQUFBbEosUUFBQWdRLE1BQUFtRCxFQUVBLElBREEsSUFBQUUsRUFBQW5LLEVBQUEzVixLQUFBdEksV0FBQXFvQixpQkFDQXR0QixFQUFBLEVBQXFCQSxFQUFBcXRCLEVBQUExb0IsT0FBQSxFQUFzQjNFLElBQUEsQ0FDM0MsSUFBQTZOLEVBQUF3ZixFQUFBcnRCLEdBQUF5ZCxFQUFBNFAsRUFBQXJ0QixFQUFBLEdBQ0FvSyxLQUFBbWpCLElBQUExZixFQUFBMmYsT0FBQS9QLEVBQUErUCxRQUFBLEdBQ1dKLEVBQUE1aUIsTUFBQXFELEVBQUEyZixPQUFBL1AsRUFBQWdRLEtBQUEsRUFBQVosRUFBQVksTUFHWEwsRUFBQTVpQixLQUFBcWlCLEVBQUFXLE9BQUFYLEVBQUFZLE1Ba0ZBQyxDQUFBcFosRUFBQXlZLEVBQUFyRyxLQUFBcUcsRUFBQUYsTUFDQUUsRUFBQUQsWUFBQSxJQUVBeGIsRUEwREEsU0FBQWdELEVBQUF5WSxFQUFBM2hCLEVBQUFnaEIsR0FDQSxJQUdBUyxFQUhBYyxFQUFBQyxHQUFBYixFQUFBcGlCLElBQUFTLEVBQUFnaEIsR0FDQS9uQixFQUFBc3BCLEVBQUF0cEIsS0FBQXlDLEVBQUE2bUIsRUFBQTdtQixNQUFBQyxFQUFBNG1CLEVBQUE1bUIsSUFBQU0sRUFBQXNtQixFQUFBdG1CLFNBR0EsTUFBQWhELEVBQUEyQixTQUFBLENBQ0EsUUFBQWtJLEVBQUEsRUFBcUJBLEVBQUEsRUFBU0EsSUFBQSxDQUM5QixLQUFBcEgsR0FBQThFLEdBQUFtaEIsRUFBQTFmLEtBQUFFLEtBQUF0QixPQUFBMGhCLEVBQUFFLFdBQUEvbUIsT0FBNkZBLEVBQzdGLEtBQUE2bUIsRUFBQUUsV0FBQTltQixFQUFBNG1CLEVBQUFHLFVBQUFsaUIsR0FBQW1oQixFQUFBMWYsS0FBQUUsS0FBQXRCLE9BQUEwaEIsRUFBQUUsV0FBQTltQixPQUE2SEEsRUFLN0gsSUFIUzhsQixFQURUcHFCLEdBQUFDLEVBQUEsTUFBQW9FLEdBQUFDLEdBQUE0bUIsRUFBQUcsU0FBQUgsRUFBQUUsV0FDU3hwQixFQUFBNEIsV0FBQXFVLHdCQUVBeVQsR0FBQTVwQixFQUFBRSxFQUFBeUMsRUFBQUMsR0FBQXVtQixpQkFBQWxCLElBQ1Q1UixNQUFBcVMsRUFBQXBTLE9BQUEsR0FBQTNULEVBQWtELE1BQ2xEQyxFQUFBRCxFQUNBQSxHQUFBLEVBQ0FPLEVBQUEsUUFFQTVFLEdBQUFDLEVBQUEsS0FBZ0NtcUIsRUFtQ2hDLFNBQUE3UyxFQUFBNlMsR0FDQSxJQUFBanRCLE9BQUFvdUIsUUFBQSxNQUFBQSxPQUFBQyxhQUNBRCxPQUFBQyxhQUFBRCxPQUFBRSxhQWh5Q0EsU0FBQWxVLEdBQ0EsU0FBQXdCLEdBQStCLE9BQUFBLEdBQy9CLElBQUFuWCxFQUFBYSxFQUFBOFUsRUFBQTNVLEVBQUEsYUFDQThvQixFQUFBOXBCLEVBQUFpVyx3QkFDQThULEVBQUFqcUIsRUFBQUUsRUFBQSxLQUFBaVcsd0JBQ0EsT0FBQWtCLEdBQUFwUixLQUFBbWpCLElBQUFZLEVBQUEzVCxLQUFBNFQsRUFBQTVULE1BQUEsRUEyeENBNlQsQ0FBQXJVLEdBQ0ssT0FBQTZTLEVBQ0wsSUFBQXlCLEVBQUFOLE9BQUFDLFlBQUFELE9BQUFFLFdBQ0FLLEVBQUFQLE9BQUFRLFlBQUFSLE9BQUFTLFdBQ0EsT0FBVWpVLEtBQUFxUyxFQUFBclMsS0FBQThULEVBQUE3VCxNQUFBb1MsRUFBQXBTLE1BQUE2VCxFQUNWYixJQUFBWixFQUFBWSxJQUFBYyxFQUFBZixPQUFBWCxFQUFBVyxPQUFBZSxHQTFDZ0NHLENBQUFwYSxFQUFBQyxRQUFBeUYsUUFBQTZTLFFBQzdCLENBRUgsSUFBQVEsRUFEQXZtQixFQUFBLElBQW9CTyxFQUFBK2tCLEVBQUEsU0FHYlMsRUFEUHZZLEVBQUFoRyxRQUFBNGUsZUFBQUcsRUFBQWhwQixFQUFBaXBCLGtCQUFBM29CLE9BQUEsRUFDTzBvQixFQUFBLFNBQUFqQixFQUFBaUIsRUFBQTFvQixPQUFBLEtBRUFOLEVBQUFpVyx3QkFFUCxHQUFBN1gsR0FBQUMsRUFBQSxJQUFBb0UsS0FBQStsQixNQUFBclMsT0FBQXFTLEVBQUFwUyxPQUFBLENBQ0EsSUFBQWtVLEVBQUF0cUIsRUFBQTRCLFdBQUFxbkIsaUJBQUEsR0FFT1QsRUFEUDhCLEdBQ2dCblUsS0FBQW1VLEVBQUFuVSxLQUFBQyxNQUFBa1UsRUFBQW5VLEtBQUFvVSxHQUFBdGEsRUFBQUMsU0FBQWtaLElBQUFrQixFQUFBbEIsSUFBQUQsT0FBQW1CLEVBQUFuQixRQUVUcUIsR0FPUCxJQUpBLElBQUFDLEVBQUFqQyxFQUFBWSxJQUFBVixFQUFBRixLQUFBWSxJQUFBc0IsRUFBQWxDLEVBQUFXLE9BQUFULEVBQUFGLEtBQUFZLElBQ0FsaEIsR0FBQXVpQixFQUFBQyxHQUFBLEVBQ0EzQixFQUFBTCxFQUFBckcsS0FBQTFNLFFBQUFvVCxRQUNBcHRCLEVBQUEsRUFDUUEsRUFBQW90QixFQUFBem9CLE9BQUEsS0FDSDRILEVBQUE2Z0IsRUFBQXB0QixJQUQyQkEsS0FFaEMsSUFBQXl0QixFQUFBenRCLEVBQUFvdEIsRUFBQXB0QixFQUFBLEtBQUFndkIsRUFBQTVCLEVBQUFwdEIsR0FDQTJhLEdBQWdCSCxNQUFBLFNBQUFuVCxFQUFBd2xCLEVBQUFwUyxNQUFBb1MsRUFBQXJTLE1BQUF1UyxFQUFBRixLQUFBclMsS0FDaEJDLE9BQUEsUUFBQXBULEVBQUF3bEIsRUFBQXJTLEtBQUFxUyxFQUFBcFMsT0FBQXNTLEVBQUFGLEtBQUFyUyxLQUNBaVQsTUFBQUQsT0FBQXdCLEdBSUEsT0FIQW5DLEVBQUFyUyxNQUFBcVMsRUFBQXBTLFFBQWtDRSxFQUFBc1UsT0FBQSxHQUNsQzNhLEVBQUFoRyxRQUFBNGdCLDRCQUE4Q3ZVLEVBQUFtVSxPQUFvQm5VLEVBQUF3VSxRQUFBSixHQUVsRXBVLEVBMUdBeVUsQ0FBQTlhLEVBQUF5WSxFQUFBM2hCLEVBQUFnaEIsSUFDQTZDLFFBQXVCbEMsRUFBQS9KLE1BQUF6aEIsR0FBQStQLEtBRWJrSixLQUFBbEosRUFBQWtKLEtBQUFDLE1BQUFuSixFQUFBbUosTUFDVmdULElBQUFULEVBQUExYixFQUFBd2QsS0FBQXhkLEVBQUFtYyxJQUNBRCxPQUFBUixFQUFBMWIsRUFBQTZkLFFBQUE3ZCxFQUFBa2MsUUFHQSxJQXNiQTZCLEdBdGJBUixJQUFnQnJVLEtBQUEsRUFBQUMsTUFBQSxFQUFBZ1QsSUFBQSxFQUFBRCxPQUFBLEdBRWhCLFNBQUFJLEdBQUFuVyxFQUFBck0sRUFBQWdoQixHQUlBLElBSEEsSUFBQS9uQixFQUFBeUMsRUFBQUMsRUFBQU0sRUFBQWlvQixFQUFBQyxFQUdBdnZCLEVBQUEsRUFBaUJBLEVBQUF5WCxFQUFBOVMsT0FBbUIzRSxHQUFBLEVBY3BDLEdBYkFzdkIsRUFBQTdYLEVBQUF6WCxHQUNBdXZCLEVBQUE5WCxFQUFBelgsRUFBQSxHQUNBb0wsRUFBQWtrQixHQUNBeG9CLEVBQUEsRUFBZ0JDLEVBQUEsRUFDaEJNLEVBQUEsUUFDSytELEVBQUFta0IsRUFFTHhvQixFQUFBLEdBREFELEVBQUFzRSxFQUFBa2tCLElBRUt0dkIsR0FBQXlYLEVBQUE5UyxPQUFBLEdBQUF5RyxHQUFBbWtCLEdBQUE5WCxFQUFBelgsRUFBQSxHQUFBb0wsS0FFTHRFLEdBREFDLEVBQUF3b0IsRUFBQUQsR0FDQSxFQUNBbGtCLEdBQUFta0IsSUFBdUJsb0IsRUFBQSxVQUV2QixNQUFBUCxFQUFBLENBSUEsR0FIQXpDLEVBQUFvVCxFQUFBelgsRUFBQSxHQUNBc3ZCLEdBQUFDLEdBQUFuRCxJQUFBL25CLEVBQUEwTSxXQUFBLGtCQUNTMUosRUFBQStrQixHQUNULFFBQUFBLEdBQUEsR0FBQXRsQixFQUNTLEtBQUE5RyxHQUFBeVgsRUFBQXpYLEVBQUEsSUFBQXlYLEVBQUF6WCxFQUFBLElBQUF5WCxFQUFBelgsRUFBQSxHQUFBK1EsWUFDVDFNLEVBQUFvVCxFQUFBLEdBQUF6WCxHQUFBLElBQ0FxSCxFQUFBLE9BRUEsWUFBQStrQixHQUFBdGxCLEdBQUF5b0IsRUFBQUQsRUFDUyxLQUFBdHZCLEVBQUF5WCxFQUFBOVMsT0FBQSxHQUFBOFMsRUFBQXpYLEVBQUEsSUFBQXlYLEVBQUF6WCxFQUFBLEtBQUF5WCxFQUFBelgsRUFBQSxHQUFBK1EsWUFDVDFNLEVBQUFvVCxHQUFBelgsR0FBQSxNQUNBcUgsRUFBQSxRQUVBLE1BR0EsT0FBVWhELE9BQUF5QyxRQUFBQyxNQUFBTSxXQUFBd21CLFdBQUF5QixFQUFBeEIsU0FBQXlCLEdBR1YsU0FBQXhCLEdBQUFWLEVBQUFqQixHQUNBLElBQUFTLEVBQUFnQyxHQUNBLFdBQUF6QyxFQUF1QixRQUFBcHNCLEVBQUEsRUFBZ0JBLEVBQUFxdEIsRUFBQTFvQixTQUN2Q2tvQixFQUFBUSxFQUFBcnRCLElBQUF3YSxNQUFBcVMsRUFBQXBTLE1BRHlEemEsVUFFN0MsUUFBQWtPLEVBQUFtZixFQUFBMW9CLE9BQUEsRUFBaUN1SixHQUFBLElBQzdDMmUsRUFBQVEsRUFBQW5mLElBQUFzTSxNQUFBcVMsRUFBQXBTLE1BRHVEdk0sS0FHdkQsT0FBQTJlLEVBa0VBLFNBQUEyQyxHQUFBdE0sR0FDQSxHQUFBQSxFQUFBbEosVUFDQWtKLEVBQUFsSixRQUFBZ0osU0FDQUUsRUFBQWxKLFFBQUFvVCxRQUFBLEtBQ0FsSyxFQUFBTSxNQUF3QixRQUFBeGpCLEVBQUEsRUFBZ0JBLEVBQUFrakIsRUFBQU0sS0FBQTdlLE9BQTBCM0UsSUFDM0RrakIsRUFBQWxKLFFBQUFnSyxPQUFBaGtCLE1BSVAsU0FBQXl2QixHQUFBbmIsR0FDQUEsRUFBQUMsUUFBQW1iLGdCQUFBLEtBQ0E5cUIsRUFBQTBQLEVBQUFDLFFBQUFvWSxhQUNBLFFBQUEzc0IsRUFBQSxFQUFpQkEsRUFBQXNVLEVBQUFDLFFBQUFtUyxLQUFBL2hCLE9BQTRCM0UsSUFDeEN3dkIsR0FBQWxiLEVBQUFDLFFBQUFtUyxLQUFBMW1CLElBR0wsU0FBQTJ2QixHQUFBcmIsR0FDQW1iLEdBQUFuYixHQUNBQSxFQUFBQyxRQUFBcWIsZ0JBQUF0YixFQUFBQyxRQUFBc2IsaUJBQUF2YixFQUFBQyxRQUFBNFcsZUFBQSxLQUNBN1csRUFBQWhHLFFBQUE0ZSxlQUFpQzVZLEVBQUFDLFFBQUFHLGdCQUFBLEdBQ2pDSixFQUFBQyxRQUFBdWIsYUFBQSxLQUdBLFNBQUFDLEtBSUEsT0FBQWh0QixHQUFBTyxJQUEwQlgsU0FBQTBELEtBQUFpVSx3QkFBQUUsS0FBQStRLFNBQUFILGlCQUFBem9CLFNBQUEwRCxNQUFBZ2tCLGFBQzFCenFCLE9BQUFvd0IsY0FBQXJ0QixTQUFBc3RCLGlCQUFBdHRCLFNBQUEwRCxNQUFBNnBCLFdBRUEsU0FBQUMsS0FDQSxPQUFBcHRCLEdBQUFPLElBQTBCWCxTQUFBMEQsS0FBQWlVLHdCQUFBbVQsSUFBQWxDLFNBQUFILGlCQUFBem9CLFNBQUEwRCxNQUFBK3BCLFlBQzFCeHdCLE9BQUF5d0IsY0FBQTF0QixTQUFBc3RCLGlCQUFBdHRCLFNBQUEwRCxNQUFBaXFCLFVBR0EsU0FBQUMsR0FBQXJjLEdBQ0EsSUFBQXhHLEVBQUEsRUFDQSxHQUFBd0csRUFBQXdWLFFBQXdCLFFBQUExcEIsRUFBQSxFQUFnQkEsRUFBQWtVLEVBQUF3VixRQUFBL2tCLFNBQTRCM0UsRUFBT2tVLEVBQUF3VixRQUFBMXBCLEdBQUE4cEIsUUFDdEVwYyxHQUFBNGMsR0FBQXBXLEVBQUF3VixRQUFBMXBCLEtBQ0wsT0FBQTBOLEVBT0EsU0FBQThpQixHQUFBbGMsRUFBQUosRUFBQTJZLEVBQUEzTixFQUFBdVIsR0FDQSxJQUFBQSxFQUFBLENBQ0EsSUFBQS9pQixFQUFBNmlCLEdBQUFyYyxHQUNBMlksRUFBQVksS0FBQS9mLEVBQXVCbWYsRUFBQVcsUUFBQTlmLEVBRXZCLFdBQUF3UixFQUEwQixPQUFBMk4sRUFDMUIzTixJQUFpQkEsRUFBQSxTQUNqQixJQUFBd1IsRUFBQXpjLEdBQUFDLEdBR0EsR0FGQSxTQUFBZ0wsRUFBMkJ3UixHQUFBNUYsR0FBQXhXLEVBQUFDLFNBQ25CbWMsR0FBQXBjLEVBQUFDLFFBQUFvYyxXQUNSLFFBQUF6UixHQUFBLFVBQUFBLEVBQUEsQ0FDQSxJQUFBMFIsRUFBQXRjLEVBQUFDLFFBQUF3VyxVQUFBelEsd0JBQ0FvVyxHQUFBRSxFQUFBbkQsS0FBQSxVQUFBdk8sRUFBQSxFQUFBaVIsTUFDQSxJQUFBVSxFQUFBRCxFQUFBcFcsTUFBQSxVQUFBMEUsRUFBQSxFQUFBNlEsTUFDQWxELEVBQUFyUyxNQUFBcVcsRUFBc0JoRSxFQUFBcFMsT0FBQW9XLEVBR3RCLE9BREFoRSxFQUFBWSxLQUFBaUQsRUFBbUI3RCxFQUFBVyxRQUFBa0QsRUFDbkI3RCxFQUtBLFNBQUFpRSxHQUFBeGMsRUFBQXljLEVBQUE3UixHQUNBLFVBQUFBLEVBQXlCLE9BQUE2UixFQUN6QixJQUFBdlcsRUFBQXVXLEVBQUF2VyxLQUFBaVQsRUFBQXNELEVBQUF0RCxJQUVBLFdBQUF2TyxFQUNBMUUsR0FBQXVWLEtBQ0F0QyxHQUFBMEMsVUFDRyxZQUFBalIsTUFBQSxDQUNILElBQUE4UixFQUFBMWMsRUFBQUMsUUFBQXFXLE1BQUF0USx3QkFDQUUsR0FBQXdXLEVBQUF4VyxLQUNBaVQsR0FBQXVELEVBQUF2RCxJQUdBLElBQUF3RCxFQUFBM2MsRUFBQUMsUUFBQXdXLFVBQUF6USx3QkFDQSxPQUFVRSxPQUFBeVcsRUFBQXpXLEtBQUFpVCxNQUFBd0QsRUFBQXhELEtBR1YsU0FBQXlELEdBQUE1YyxFQUFBckssRUFBQWlWLEVBQUFoTCxFQUFBa1ksR0FFQSxPQURBbFksSUFBaUJBLEVBQUF4SCxHQUFBNEgsRUFBQTNILElBQUExQyxFQUFBb0QsT0FDakJtakIsR0FBQWxjLEVBQUFKLEVBQUFpWSxHQUFBN1gsRUFBQUosRUFBQWpLLEVBQUFtQixHQUFBZ2hCLEdBQUFsTixHQW1CQSxTQUFBaVMsR0FBQTdjLEVBQUFySyxFQUFBaVYsRUFBQWhMLEVBQUFrZCxFQUFBcEUsR0FHQSxTQUFBbnNCLEVBQUF1SyxFQUFBcVAsR0FDQSxJQUFBcmEsRUFBQWlzQixHQUFBL1gsRUFBQThjLEVBQUFobUIsRUFBQXFQLEVBQUEsZUFBQXVTLEdBRUEsT0FEQXZTLEVBQWdCcmEsRUFBQW9hLEtBQUFwYSxFQUFBcWEsTUFBMkJyYSxFQUFBcWEsTUFBQXJhLEVBQUFvYSxLQUMzQ2dXLEdBQUFsYyxFQUFBSixFQUFBOVQsRUFBQThlLEdBTEFoTCxLQUFBeEgsR0FBQTRILEVBQUEzSCxJQUFBMUMsRUFBQW9ELE1BQ0ErakIsSUFBeUJBLEVBQUE5RSxHQUFBaFksRUFBQUosSUFNekIsSUFBQVcsRUFBQXNDLEdBQUFqRCxFQUFBSSxFQUFBM0gsSUFBQStJLFdBQUF0SyxFQUFBbkIsRUFBQW1CLEdBQUF1RCxFQUFBMUUsRUFBQTBFLE9BUUEsR0FQQXZELEdBQUE4SSxFQUFBM0csS0FBQTVJLFFBQ0F5RyxFQUFBOEksRUFBQTNHLEtBQUE1SSxPQUNBZ0ssRUFBQSxVQUNHdkQsR0FBQSxJQUNIQSxFQUFBLEVBQ0F1RCxFQUFBLFVBRUFrRyxFQUFlLE9BQUFoVSxFQUFBLFVBQUE4TixFQUFBdkQsRUFBQSxFQUFBQSxFQUFBLFVBQUF1RCxHQUVmLFNBQUEwaUIsRUFBQWptQixFQUFBa21CLEVBQUFDLEdBQ0EsSUFBQW5NLEVBQUF2USxFQUFBeWMsR0FBQTdXLEVBQUEsR0FBQTJLLEVBQUEzUCxNQUNBLE9BQUE1VSxFQUFBMHdCLEVBQUFubUIsRUFBQSxFQUFBQSxFQUFBcVAsR0FBQThXLEdBRUEsSUFBQUQsRUFBQTFjLEdBQUFDLEVBQUF6SixFQUFBdUQsR0FDQTZpQixFQUFBN2MsR0FDQStILEVBQUEyVSxFQUFBam1CLEVBQUFrbUIsRUFBQSxVQUFBM2lCLEdBRUEsT0FEQSxNQUFBNmlCLElBQXNCOVUsRUFBQThVLE1BQUFILEVBQUFqbUIsRUFBQW9tQixFQUFBLFVBQUE3aUIsSUFDdEIrTixFQUtBLFNBQUErVSxHQUFBbmQsRUFBQXJLLEdBQ0EsSUFBQXVRLEVBQUEsRUFDQXZRLEVBQUFtRixHQUFBa0YsRUFBQTNILElBQUExQyxHQUNBcUssRUFBQWhHLFFBQUE0ZSxlQUFpQzFTLEVBQUFvVSxHQUFBdGEsRUFBQUMsU0FBQXRLLEVBQUFtQixJQUNqQyxJQUFBOEksRUFBQXhILEdBQUE0SCxFQUFBM0gsSUFBQTFDLEVBQUFvRCxNQUNBb2dCLEVBQUF4WixHQUFBQyxHQUFBNFcsR0FBQXhXLEVBQUFDLFNBQ0EsT0FBVWlHLE9BQUFDLE1BQUFELEVBQUFpVCxNQUFBRCxPQUFBQyxFQUFBdlosRUFBQXhHLFFBU1YsU0FBQWdrQixHQUFBcmtCLEVBQUFqQyxFQUFBdUQsRUFBQWdqQixFQUFBQyxHQUNBLElBQUEzbkIsRUFBQXlFLEdBQUFyQixFQUFBakMsRUFBQXVELEdBR0EsT0FGQTFFLEVBQUEybkIsT0FDQUQsSUFBZ0IxbkIsRUFBQTBuQixTQUFBLEdBQ2hCMW5CLEVBS0EsU0FBQTRuQixHQUFBdmQsRUFBQXZGLEVBQUEraUIsR0FDQSxJQUFBbmxCLEVBQUEySCxFQUFBM0gsSUFFQSxJQURBbWxCLEdBQUF4ZCxFQUFBQyxRQUFBb2MsWUFDQSxFQUFjLE9BQUFlLEdBQUEva0IsRUFBQUMsTUFBQSxjQUNkLElBQUE4RyxFQUFBM0YsR0FBQXBCLEVBQUFtbEIsR0FBQXppQixFQUFBMUMsRUFBQUMsTUFBQUQsRUFBQUUsS0FBQSxFQUNBLEdBQUE2RyxFQUFBckUsRUFDSyxPQUFBcWlCLEdBQUEva0IsRUFBQUMsTUFBQUQsRUFBQUUsS0FBQSxFQUFBSCxHQUFBQyxFQUFBMEMsR0FBQTlCLEtBQUE1SSxPQUFBLFdBQ0xvSyxFQUFBLElBQWNBLEVBQUEsR0FHZCxJQURBLElBQUFtRixFQUFBeEgsR0FBQUMsRUFBQStHLEtBQ1MsQ0FDVCxJQUFBcEMsRUFBQXlnQixHQUFBemQsRUFBQUosRUFBQVIsRUFBQTNFLEVBQUEraUIsR0FDQTdlLEVBQUFHLEdBQUFjLEVBQUE1QyxFQUFBbEcsSUFBQWtHLEVBQUFzZ0IsS0FBQSxRQUNBLElBQUEzZSxFQUFxQixPQUFBM0IsRUFDckIsSUFBQTBnQixFQUFBL2UsRUFBQVAsS0FBQSxHQUNBLEdBQUFzZixFQUFBM2tCLE1BQUFxRyxFQUFpQyxPQUFBc2UsRUFDakM5ZCxFQUFBeEgsR0FBQUMsRUFBQStHLEVBQUFzZSxFQUFBM2tCLE9BSUEsU0FBQTRrQixHQUFBM2QsRUFBQUosRUFBQWtkLEVBQUFVLEdBQ0FBLEdBQUF2QixHQUFBcmMsR0FDQSxJQUFBbk4sRUFBQW1OLEVBQUEzRyxLQUFBNUksT0FDQXV0QixFQUFBaG1CLEdBQUEsU0FBQWQsR0FBdUMsT0FBQWloQixHQUFBL1gsRUFBQThjLEVBQUFobUIsRUFBQSxHQUFBb2lCLFFBQUFzRSxHQUF1RS9xQixFQUFBLEdBRTlHLE9BREFBLEVBQUFtRixHQUFBLFNBQUFkLEdBQWlDLE9BQUFpaEIsR0FBQS9YLEVBQUE4YyxFQUFBaG1CLEdBQUFxaUIsSUFBQXFFLEdBQStESSxFQUFBbnJCLElBQ3RGbXJCLFFBQUFuckIsT0FHVixTQUFBb3JCLEdBQUE3ZCxFQUFBSixFQUFBa2QsRUFBQW5wQixHQUNBbXBCLElBQXlCQSxFQUFBOUUsR0FBQWhZLEVBQUFKLElBQ3pCLElBQUFrZSxFQUFBNUIsR0FBQWxjLEVBQUFKLEVBQUFtWSxHQUFBL1gsRUFBQThjLEVBQUFucEIsR0FBQSxRQUFBd2xCLElBQ0EsT0FBQXdFLEdBQUEzZCxFQUFBSixFQUFBa2QsRUFBQWdCLEdBS0EsU0FBQUMsR0FBQUMsRUFBQXZqQixFQUFBK2lCLEVBQUF0WCxHQUNBLFFBQUE4WCxFQUFBOUUsUUFBQXNFLEtBQUFRLEVBQUE3RSxJQUFBcUUsSUFBQXRYLEVBQUE4WCxFQUFBOVgsS0FBQThYLEVBQUE3WCxPQUFBMUwsR0FHQSxTQUFBZ2pCLEdBQUF6ZCxFQUFBSixFQUFBWixFQUFBdkUsRUFBQStpQixHQUVBQSxHQUFBN2QsR0FBQUMsR0FDQSxJQUFBa2QsRUFBQTlFLEdBQUFoWSxFQUFBSixHQUdBcWUsRUFBQWhDLEdBQUFyYyxHQUNBZ2UsRUFBQSxFQUFBbnJCLEVBQUFtTixFQUFBM0csS0FBQTVJLE9BQUE2dEIsR0FBQSxFQUVBM2QsRUFBQXNDLEdBQUFqRCxFQUFBSSxFQUFBM0gsSUFBQStJLFdBR0EsR0FBQWIsRUFBQSxDQUNBLElBQUF1USxHQUFBOVEsRUFBQWhHLFFBQUE0ZSxhQThFQSxTQUFBNVksRUFBQUosRUFBQXVlLEVBQUFyQixFQUFBdmMsRUFBQTlGLEVBQUEraUIsR0FRQSxJQUFBWSxFQUFBVCxHQUFBM2QsRUFBQUosRUFBQWtkLEVBQUFVLEdBQ0FJLEVBQUFRLEVBQUFSLE1BQ0FuckIsRUFBQTJyQixFQUFBM3JCLElBQ0EsS0FBQTNFLEtBQUE4UixFQUFBM0csS0FBQXRCLE9BQUFsRixFQUFBLEtBQWdEQSxJQUVoRCxJQURBLElBQUFxZSxFQUFBLEtBQUF1TixFQUFBLEtBQ0EzeUIsRUFBQSxFQUFpQkEsRUFBQTZVLEVBQUFsUSxPQUFrQjNFLElBQUEsQ0FDbkMsSUFBQThCLEVBQUErUyxFQUFBN1UsR0FDQSxLQUFBOEIsRUFBQXNLLE1BQUFyRixHQUFBakYsRUFBQXVLLElBQUE2bEIsR0FBQSxDQUNBLElBQUFNLEVBQUEsR0FBQTF3QixFQUFBMlQsTUFDQW1kLEVBQUF2RyxHQUFBL1gsRUFBQThjLEVBQUFvQixFQUFBcG9CLEtBQUFDLElBQUF0RCxFQUFBakYsRUFBQXVLLElBQUEsRUFBQWpDLEtBQUErRSxJQUFBK2lCLEVBQUFwd0IsRUFBQXNLLE9BQUFxTyxNQUdBb1ksRUFBQUQsRUFBQTdqQixJQUFBNmpCLEVBQUEsSUFBQUEsRUFBQTdqQixJQUNBcVcsR0FBQXVOLEVBQUFFLEtBQ0F6TixFQUFBdGpCLEVBQ0E2d0IsRUFBQUUsSUFPQSxPQUpBek4sSUFBY0EsRUFBQXZRLElBQUFsUSxPQUFBLElBRWR5Z0IsRUFBQWhaLEtBQUE4bEIsSUFBMEI5TSxHQUFTaFosS0FBQThsQixFQUFBN2xCLEdBQUErWSxFQUFBL1ksR0FBQW9KLE1BQUEyUCxFQUFBM1AsUUFDbkMyUCxFQUFBL1ksR0FBQXRGLElBQXNCcWUsR0FBU2haLEtBQUFnWixFQUFBaFosS0FBQUMsR0FBQXRGLEVBQUEwTyxNQUFBMlAsRUFBQTNQLFFBQy9CMlAsR0F0REEsU0FBQTlRLEVBQUFKLEVBQUFaLEVBQUE4ZCxFQUFBdmMsRUFBQTlGLEVBQUEraUIsR0FLQSxJQUFBcHRCLEVBQUF3SCxHQUFBLFNBQUFsTSxHQUNBLElBQUFvbEIsRUFBQXZRLEVBQUE3VSxHQUFBd3lCLEVBQUEsR0FBQXBOLEVBQUEzUCxNQUNBLE9BQUE0YyxHQUFBbEIsR0FBQTdjLEVBQUE1RixHQUFBNEUsRUFBQWtmLEVBQUFwTixFQUFBL1ksR0FBQStZLEVBQUFoWixLQUFBb21CLEVBQUEsa0JBQ0EsT0FBQXRlLEVBQUFrZCxHQUFBcmlCLEVBQUEraUIsR0FBQSxJQUNHLEVBQUFqZCxFQUFBbFEsT0FBQSxHQUNIeWdCLEVBQUF2USxFQUFBblEsR0FJQSxHQUFBQSxFQUFBLEdBQ0EsSUFBQTh0QixFQUFBLEdBQUFwTixFQUFBM1AsTUFDQTNPLEVBQUFxcUIsR0FBQTdjLEVBQUE1RixHQUFBNEUsRUFBQWtmLEVBQUFwTixFQUFBaFosS0FBQWdaLEVBQUEvWSxHQUFBbW1CLEVBQUEsa0JBQ0EsT0FBQXRlLEVBQUFrZCxHQUNBaUIsR0FBQXZyQixFQUFBaUksRUFBQStpQixHQUFBLElBQUFockIsRUFBQTJtQixJQUFBcUUsSUFDTzFNLEVBQUF2USxFQUFBblEsRUFBQSxJQUVQLE9BQUEwZ0IsSUExRUE5USxFQUFBSixFQUFBWixFQUFBOGQsRUFBQXZjLEVBQUE5RixFQUFBK2lCLEdBQ0FVLEVBQUEsR0FBQXBOLEVBQUEzUCxNQUtBeWMsRUFBQU0sRUFBQXBOLEVBQUFoWixLQUFBZ1osRUFBQS9ZLEdBQUEsRUFDQXRGLEVBQUF5ckIsRUFBQXBOLEVBQUEvWSxHQUFBK1ksRUFBQWhaLEtBQUEsRUFNQSxJQVlBMG1CLEVBQUFua0IsRUFaQW9rQixFQUFBLEtBQUFDLEVBQUEsS0FDQTVuQixFQUFBYyxHQUFBLFNBQUFkLEdBQ0EsSUFBQWtuQixFQUFBakcsR0FBQS9YLEVBQUE4YyxFQUFBaG1CLEdBRUEsT0FEQWtuQixFQUFBN0UsS0FBQThFLEVBQStCRCxFQUFBOUUsUUFBQStFLElBQy9CRixHQUFBQyxFQUFBdmpCLEVBQUEraUIsR0FBQSxLQUNBUSxFQUFBN0UsS0FBQXFFLEdBQUFRLEVBQUE5WCxNQUFBekwsSUFDQWdrQixFQUFBM25CLEVBQ0E0bkIsRUFBQVYsSUFFQSxJQUNHSixFQUFBbnJCLEdBRUg0cUIsR0FBQSxFQUVBLEdBQUFxQixFQUFBLENBRUEsSUFBQUMsRUFBQWxrQixFQUFBaWtCLEVBQUF4WSxLQUFBd1ksRUFBQXZZLE1BQUExTCxFQUFBbWtCLEVBQUFELEdBQUFULEVBQ0FwbkIsRUFBQTJuQixHQUFBRyxFQUFBLEtBQ0F2a0IsRUFBQXVrQixFQUFBLGlCQUNBSixFQUFBRyxFQUFBRCxFQUFBeFksS0FBQXdZLEVBQUF2WSxVQUNHLENBRUgrWCxHQUFBcG5CLEdBQUFyRSxHQUFBcUUsR0FBQThtQixHQUE2QzltQixJQUk3Q3VELEVBQUEsR0FBQXZELEVBQUEsUUFBQUEsR0FBQThJLEVBQUEzRyxLQUFBNUksT0FBQSxTQUNBMG5CLEdBQUEvWCxFQUFBOGMsRUFBQWhtQixHQUFBb25CLEVBQUEsTUFBQWhGLE9BQUErRSxHQUFBVCxHQUFBVSxFQUNBLGlCQUdBLElBQUF6QixFQUFBSSxHQUFBN2MsRUFBQTVGLEdBQUE0RSxFQUFBbEksRUFBQXVELEdBQUEsT0FBQXVGLEVBQUFrZCxHQUNBMEIsRUFBQS9CLEVBQUF2VyxLQUNBbVgsRUFBQUcsRUFBQWYsRUFBQXRELEtBQUFxRSxHQUFBZixFQUFBdkQsT0FJQSxPQURBcGlCLEVBQUFVLEdBQUFvSSxFQUFBM0csS0FBQW5DLEVBQUEsR0FDQXNtQixHQUFBcGUsRUFBQWxJLEVBQUF1RCxFQUFBZ2pCLEVBQUE1aUIsRUFBQStqQixHQThEQSxTQUFBSyxHQUFBNWUsR0FDQSxTQUFBQSxFQUFBc2IsaUJBQXlDLE9BQUF0YixFQUFBc2IsaUJBQ3pDLFNBQUFSLEdBQUEsQ0FDQUEsR0FBQWhxQixFQUFBLE9BR0EsUUFBQXJGLEVBQUEsRUFBbUJBLEVBQUEsS0FBUUEsRUFDM0JxdkIsR0FBQWpxQixZQUFBekMsU0FBQWdELGVBQUEsTUFDQTBwQixHQUFBanFCLFlBQUFDLEVBQUEsT0FFQWdxQixHQUFBanFCLFlBQUF6QyxTQUFBZ0QsZUFBQSxNQUVBVCxFQUFBcVAsRUFBQXlGLFFBQUFxVixJQUNBLElBQUEzaEIsRUFBQTJoQixHQUFBcFYsYUFBQSxHQUdBLE9BRkF2TSxFQUFBLElBQW1CNkcsRUFBQXNiLGlCQUFBbmlCLEdBQ25COUksRUFBQTJQLEVBQUF5RixTQUNBdE0sR0FBQSxFQUlBLFNBQUFraEIsR0FBQXJhLEdBQ0EsU0FBQUEsRUFBQXFiLGdCQUF3QyxPQUFBcmIsRUFBQXFiLGdCQUN4QyxJQUFBd0QsRUFBQS90QixFQUFBLHFCQUNBK2QsRUFBQS9kLEVBQUEsT0FBQSt0QixJQUNBbHVCLEVBQUFxUCxFQUFBeUYsUUFBQW9KLEdBQ0EsSUFBQXlKLEVBQUF1RyxFQUFBOVksd0JBQUEwUCxHQUFBNkMsRUFBQXBTLE1BQUFvUyxFQUFBclMsTUFBQSxHQUVBLE9BREF3UCxFQUFBLElBQWtCelYsRUFBQXFiLGdCQUFBNUYsR0FDbEJBLEdBQUEsR0FLQSxTQUFBeUMsR0FBQW5ZLEdBR0EsSUFGQSxJQUFBaFUsRUFBQWdVLEVBQUFDLFFBQUFpRyxLQUErQndQLEtBQy9CaEIsRUFBQTFvQixFQUFBNG9CLFFBQUFtSyxXQUNBNXhCLEVBQUFuQixFQUFBNG9CLFFBQUFqa0IsV0FBQWpGLEVBQUEsRUFBMkN5QixFQUFHQSxJQUFBNG5CLGNBQUFycEIsRUFDOUN3YSxFQUFBbEcsRUFBQWhHLFFBQUE0YSxRQUFBbHBCLElBQUF5QixFQUFBNnhCLFdBQUE3eEIsRUFBQTR4QixXQUFBckssRUFDQWdCLEVBQUExVixFQUFBaEcsUUFBQTRhLFFBQUFscEIsSUFBQXlCLEVBQUFncEIsWUFFQSxPQUFVakMsU0FBQStLLEdBQUFqekIsR0FDVm1vQixpQkFBQW5vQixFQUFBNG9CLFFBQUFoUCxZQUNBOE8sV0FBQXhPLEVBQ0EyTyxZQUFBYSxFQUNBQyxhQUFBM3BCLEVBQUFrcUIsUUFBQUMsYUFNQSxTQUFBOEksR0FBQWhmLEdBQ0EsT0FBQUEsRUFBQXNYLFNBQUF2Uix3QkFBQUUsS0FBQWpHLEVBQUFxVyxNQUFBdFEsd0JBQUFFLEtBTUEsU0FBQW1JLEdBQUFyTyxHQUNBLElBQUFrZixFQUFBTCxHQUFBN2UsRUFBQUMsU0FBQTBZLEVBQUEzWSxFQUFBaEcsUUFBQTRlLGFBQ0F1RyxFQUFBeEcsR0FBQTdpQixLQUFBK0UsSUFBQSxFQUFBbUYsRUFBQUMsUUFBQXNYLFNBQUFwQixZQUFBbUUsR0FBQXRhLEVBQUFDLFNBQUEsR0FDQSxnQkFBQWxILEdBQ0EsR0FBQXlHLEdBQUFRLEVBQUEzSCxJQUFBVSxHQUFxQyxTQUVyQyxJQUFBcW1CLEVBQUEsRUFDQSxHQUFBcm1CLEVBQUFxYyxRQUF1QixRQUFBMXBCLEVBQUEsRUFBZ0JBLEVBQUFxTixFQUFBcWMsUUFBQS9rQixPQUF5QjNFLElBQ2hFcU4sRUFBQXFjLFFBQUExcEIsR0FBQTBOLFNBQW1DZ21CLEdBQUFybUIsRUFBQXFjLFFBQUExcEIsR0FBQTBOLFFBR25DLE9BQUF1ZixFQUNPeUcsR0FBQXRwQixLQUFBb0MsS0FBQWEsRUFBQUUsS0FBQTVJLE9BQUE4dUIsSUFBQSxHQUFBRCxFQUVBRSxFQUFBRixHQUlQLFNBQUFHLEdBQUFyZixHQUNBLElBQUEzSCxFQUFBMkgsRUFBQTNILElBQUFpbkIsRUFBQWpSLEdBQUFyTyxHQUNBM0gsRUFBQVcsS0FBQSxTQUFBRCxHQUNBLElBQUF3bUIsRUFBQUQsRUFBQXZtQixHQUNBd21CLEdBQUF4bUIsRUFBQUssUUFBbUNELEdBQUFKLEVBQUF3bUIsS0FTbkMsU0FBQUMsR0FBQXhmLEVBQUF6UCxFQUFBa3ZCLEVBQUFDLEdBQ0EsSUFBQXpmLEVBQUFELEVBQUFDLFFBQ0EsSUFBQXdmLEdBQUEsUUFBQTFhLEdBQUF4VSxHQUFBOGxCLGFBQUEsa0JBQXlFLFlBRXpFLElBQUE1YixFQUFBK2lCLEVBQUFtQyxFQUFBMWYsRUFBQXdXLFVBQUF6USx3QkFFQSxJQUFPdkwsRUFBQWxLLEVBQUFxdkIsUUFBQUQsRUFBQXpaLEtBQTRCc1gsRUFBQWp0QixFQUFBc3ZCLFFBQUFGLEVBQUF4RyxJQUNuQyxNQUFBNW9CLEdBQWEsWUFDYixJQUFBd0ksRUFBQTBqQixFQUFBYyxHQUFBdmQsRUFBQXZGLEVBQUEraUIsR0FDQSxHQUFBa0MsR0FBQSxHQUFBakQsRUFBQWEsT0FBQXZrQixFQUFBWCxHQUFBNEgsRUFBQTNILElBQUFva0IsRUFBQTFqQixNQUFBRSxNQUFBNUksUUFBQW9zQixFQUFBM2xCLEdBQUEsQ0FDQSxJQUFBZ3BCLEVBQUFoc0IsRUFBQWlGLElBQUExSSxPQUFBMlAsRUFBQWhHLFFBQUFoRyxTQUFBK0UsRUFBQTFJLE9BQ0Fvc0IsRUFBQXJpQixHQUFBcWlCLEVBQUExakIsS0FBQWpELEtBQUErRSxJQUFBLEVBQUEvRSxLQUFBaXFCLE9BQUF0bEIsRUFBQW1jLEdBQUE1VyxFQUFBQyxTQUFBaUcsTUFBQW9VLEdBQUF0YSxFQUFBQyxVQUFBNmYsSUFFQSxPQUFBckQsRUFLQSxTQUFBdkUsR0FBQWxZLEVBQUE3UyxHQUNBLEdBQUFBLEdBQUE2UyxFQUFBQyxRQUFBOE0sT0FBK0IsWUFFL0IsSUFEQTVmLEdBQUE2UyxFQUFBQyxRQUFBNk0sVUFDQSxFQUFjLFlBRWQsSUFEQSxJQUFBc0YsRUFBQXBTLEVBQUFDLFFBQUFtUyxLQUNBMW1CLEVBQUEsRUFBaUJBLEVBQUEwbUIsRUFBQS9oQixPQUFpQjNFLElBRWxDLElBREF5QixHQUFBaWxCLEVBQUExbUIsR0FBQTZNLE1BQ0EsRUFBZ0IsT0FBQTdNLEVBSWhCLFNBQUFzMEIsR0FBQWhnQixHQUNBQSxFQUFBQyxRQUFBaVIsTUFBQStPLGNBQUFqZ0IsRUFBQUMsUUFBQWlSLE1BQUFnUCxvQkFHQSxTQUFBQSxHQUFBbGdCLEVBQUFtZ0IsUUFDQSxJQUFBQSxPQUFBLEdBTUEsSUFKQSxJQUFBOW5CLEVBQUEySCxFQUFBM0gsSUFBQWdPLEtBQ0ErWixFQUFBL1osRUFBQWdhLFFBQUFoeUIsU0FBQW1pQix5QkFDQThQLEVBQUFqYSxFQUFBUSxVQUFBeFksU0FBQW1pQix5QkFFQTlrQixFQUFBLEVBQWlCQSxFQUFBMk0sRUFBQWtvQixJQUFBQyxPQUFBbndCLE9BQTJCM0UsSUFDNUMsR0FBQXkwQixHQUFBejBCLEdBQUEyTSxFQUFBa29CLElBQUFFLFVBQUEsQ0FDQSxJQUFBOVosRUFBQXRPLEVBQUFrb0IsSUFBQUMsT0FBQTkwQixHQUNBLEtBQUFpYixFQUFBN08sT0FBQWlCLE1BQUFpSCxFQUFBQyxRQUFBOE0sUUFBQXBHLEVBQUE1TyxLQUFBZ0IsS0FBQWlILEVBQUFDLFFBQUE2TSxVQUFBLENBQ0EsSUFBQW5PLEVBQUFnSSxFQUFBK1osU0FDQS9oQixHQUFBcUIsRUFBQWhHLFFBQUEybUIsMEJBQ09DLEdBQUE1Z0IsRUFBQTJHLEVBQUFrYSxLQUFBVCxHQUNQemhCLEdBQ09taUIsR0FBQTlnQixFQUFBMkcsRUFBQTJaLElBRVAsT0FBQWphLEVBSUEsU0FBQXVhLEdBQUE1Z0IsRUFBQTZnQixFQUFBaFQsR0FDQSxJQUFBbFksRUFBQWtuQixHQUFBN2MsRUFBQTZnQixFQUFBLGlCQUFBN2dCLEVBQUFoRyxRQUFBNGdCLDJCQUVBbUcsRUFBQWxULEVBQUEvYyxZQUFBQyxFQUFBLGdDQUtBLEdBSkFnd0IsRUFBQTd2QixNQUFBZ1YsS0FBQXZRLEVBQUF1USxLQUFBLEtBQ0E2YSxFQUFBN3ZCLE1BQUFpb0IsSUFBQXhqQixFQUFBd2pCLElBQUEsS0FDQTRILEVBQUE3dkIsTUFBQWtJLE9BQUF0RCxLQUFBK0UsSUFBQSxFQUFBbEYsRUFBQXVqQixPQUFBdmpCLEVBQUF3akIsS0FBQW5aLEVBQUFoRyxRQUFBZ25CLGFBQUEsS0FFQXJyQixFQUFBdW5CLE1BQUEsQ0FFQSxJQUFBK0QsRUFBQXBULEVBQUEvYyxZQUFBQyxFQUFBLDJEQUNBa3dCLEVBQUEvdkIsTUFBQStPLFFBQUEsR0FDQWdoQixFQUFBL3ZCLE1BQUFnVixLQUFBdlEsRUFBQXVuQixNQUFBaFgsS0FBQSxLQUNBK2EsRUFBQS92QixNQUFBaW9CLElBQUF4akIsRUFBQXVuQixNQUFBL0QsSUFBQSxLQUNBOEgsRUFBQS92QixNQUFBa0ksT0FBQSxLQUFBekQsRUFBQXVuQixNQUFBaEUsT0FBQXZqQixFQUFBdW5CLE1BQUEvRCxLQUFBLE1BSUEsU0FBQStILEdBQUEvdUIsRUFBQUMsR0FBMEIsT0FBQUQsRUFBQWduQixJQUFBL21CLEVBQUErbUIsS0FBQWhuQixFQUFBK1QsS0FBQTlULEVBQUE4VCxLQUcxQixTQUFBNGEsR0FBQTlnQixFQUFBMkcsRUFBQWtILEdBQ0EsSUFBQTVOLEVBQUFELEVBQUFDLFFBQUE1SCxFQUFBMkgsRUFBQTNILElBQ0E4b0IsRUFBQTl5QixTQUFBbWlCLHlCQUNBNFEsRUFBQXhLLEdBQUE1VyxFQUFBQyxTQUFBb2hCLEVBQUFELEVBQUFsYixLQUNBb2IsRUFBQXhyQixLQUFBK0UsSUFBQW9GLEVBQUFzaEIsV0FBQWpLLEdBQUF0WCxHQUFBQyxFQUFBcVcsTUFBQTBJLFlBQUFvQyxFQUFBamIsTUFDQXFiLEVBQUEsT0FBQW5wQixFQUFBK0ksVUFFQSxTQUFBcWdCLEVBQUF2YixFQUFBaVQsRUFBQXpELEVBQUF3RCxHQUNBQyxFQUFBLElBQWtCQSxFQUFBLEdBQ2xCQSxFQUFBcmpCLEtBQUFpcUIsTUFBQTVHLEdBQ0FELEVBQUFwakIsS0FBQWlxQixNQUFBN0csR0FDQWlJLEVBQUFyd0IsWUFBQUMsRUFBQSw4REFBc0ZtVixFQUFBLDBDQUFzQmlULEVBQUEsZUFBa0QsTUFBQXpELEVBQUE0TCxFQUFBcGIsRUFBQXdQLEdBQUEsOENBQTZEd0QsRUFBQUMsR0FBQSxPQUczTixTQUFBdUksRUFBQTNvQixFQUFBNG9CLEVBQUFDLEdBQ0EsSUFFQXB2QixFQUFBQyxFQUZBbU4sRUFBQXhILEdBQUFDLEVBQUFVLEdBQ0E4b0IsRUFBQWppQixFQUFBM0csS0FBQTVJLE9BRUEsU0FBQW9zQixFQUFBM2xCLEVBQUFnaEIsR0FDQSxPQUFBOEUsR0FBQTVjLEVBQUE1RixHQUFBckIsRUFBQWpDLEdBQUEsTUFBQThJLEVBQUFrWSxHQUdBLFNBQUFnSyxFQUFBbnNCLEVBQUErQixFQUFBcXFCLEdBQ0EsSUFBQUMsRUFBQW5FLEdBQUE3ZCxFQUFBSixFQUFBLEtBQUFqSyxHQUNBOUIsRUFBQSxPQUFBNkQsSUFBQSxTQUFBcXFCLEdBQUEsZUFDQWpyQixFQUFBLFNBQUFpckIsRUFBQUMsRUFBQXBFLE1BQUFvRSxFQUFBdnZCLEtBQUEsS0FBQTNFLEtBQUE4UixFQUFBM0csS0FBQXRCLE9BQUFxcUIsRUFBQXZ2QixJQUFBLFNBQ0EsT0FBQWdxQixFQUFBM2xCLEVBQUFqRCxNQUdBLElBQUEwTSxFQUFBc0MsR0FBQWpELEVBQUF2SCxFQUFBK0ksV0FxQ0EsT0FydEVBLFNBQUFiLEVBQUF6SSxFQUFBQyxFQUFBM0UsR0FDQSxJQUFBbU4sRUFBZSxPQUFBbk4sRUFBQTBFLEVBQUFDLEVBQUEsU0FFZixJQURBLElBQUFpRixHQUFBLEVBQ0F0UixFQUFBLEVBQWlCQSxFQUFBNlUsRUFBQWxRLFNBQWtCM0UsRUFBQSxDQUNuQyxJQUFBb2xCLEVBQUF2USxFQUFBN1UsSUFDQW9sQixFQUFBaFosS0FBQUMsR0FBQStZLEVBQUEvWSxHQUFBRCxNQUFBQyxHQUFBK1ksRUFBQS9ZLElBQUFELEtBQ0ExRSxFQUFBMEMsS0FBQStFLElBQUFpVyxFQUFBaFosUUFBQWhDLEtBQUFDLElBQUErYSxFQUFBL1ksTUFBQSxHQUFBK1ksRUFBQTNQLE1BQUEsWUFBQXpWLEdBQ0FzUixHQUFBLEdBR0FBLEdBQWU1SixFQUFBMEUsRUFBQUMsRUFBQSxPQXVxRWZrcUIsQ0FBQTFoQixFQUFBb2hCLEdBQUEsUUFBQUMsRUFBQUMsRUFBQUQsRUFBQSxTQUFBOXBCLEVBQUFDLEVBQUFMLEVBQUFoTSxHQUNBLElBQUF3eUIsRUFBQSxPQUFBeG1CLEVBQ0F3cUIsRUFBQXpGLEVBQUEza0IsRUFBQW9tQixFQUFBLGdCQUNBaUUsRUFBQTFGLEVBQUExa0IsRUFBQSxFQUFBbW1CLEVBQUEsZ0JBRUFrRSxFQUFBLE1BQUFULEdBQUEsR0FBQTdwQixFQUFBdXFCLEVBQUEsTUFBQVQsR0FBQTdwQixHQUFBOHBCLEVBQ0F2cEIsRUFBQSxHQUFBNU0sRUFBQXFQLEdBQUF3RixHQUFBN1UsR0FBQTZVLEVBQUFsUSxPQUFBLEVBQ0EsR0FBQTh4QixFQUFBaEosSUFBQStJLEVBQUEvSSxLQUFBLEdBQ0EsSUFBQW1KLEdBQUFkLEVBQUFZLEVBQUFDLElBQUEvcEIsRUFDQWlxQixHQUFBZixFQUFBYSxFQUFBRCxJQUFBcm5CLEVBQ0FtTCxFQUFBb2MsRUFBQWpCLEdBQUFuRCxFQUFBZ0UsRUFBQUMsR0FBQWpjLEtBQ0FDLEVBQUFvYyxFQUFBakIsR0FBQXBELEVBQUFpRSxFQUFBRCxHQUFBL2IsTUFDQXNiLEVBQUF2YixFQUFBZ2MsRUFBQS9JLElBQUFoVCxFQUFBRCxFQUFBZ2MsRUFBQWhKLFlBQ08sQ0FDUCxJQUFBc0osRUFBQUMsRUFBQUMsRUFBQUMsRUFDQXpFLEdBQ0FzRSxFQUFBaEIsR0FBQVksR0FBQTlwQixFQUFBK29CLEVBQUFhLEVBQUFoYyxLQUNBdWMsRUFBQWpCLEVBQUFGLEVBQUFRLEVBQUFocUIsRUFBQUosRUFBQSxVQUNBZ3JCLEVBQUFsQixFQUFBSCxFQUFBUyxFQUFBL3BCLEVBQUFMLEVBQUEsU0FDQWlyQixFQUFBbkIsR0FBQWEsR0FBQXRuQixFQUFBdW1CLEVBQUFhLEVBQUFoYyxRQUVBcWMsRUFBQWhCLEVBQUFNLEVBQUFocUIsRUFBQUosRUFBQSxVQUFBMnBCLEVBQ0FvQixHQUFBakIsR0FBQVksR0FBQTlwQixFQUFBZ3BCLEVBQUFZLEVBQUEvYixNQUNBdWMsR0FBQWxCLEdBQUFhLEdBQUF0bkIsRUFBQXNtQixFQUFBYyxFQUFBamMsS0FDQXljLEVBQUFuQixFQUFBTSxFQUFBL3BCLEVBQUFMLEVBQUEsU0FBQTRwQixHQUVBRyxFQUFBZSxFQUFBTixFQUFBL0ksSUFBQXNKLEVBQUFELEVBQUFOLEVBQUFoSixRQUNBZ0osRUFBQWhKLE9BQUFpSixFQUFBaEosS0FBeUNzSSxFQUFBSixFQUFBYSxFQUFBaEosT0FBQSxLQUFBaUosRUFBQWhKLEtBQ3pDc0ksRUFBQWlCLEVBQUFQLEVBQUFoSixJQUFBd0osRUFBQUQsRUFBQVAsRUFBQWpKLFVBR0ExbUIsR0FBQTB1QixHQUFBZ0IsRUFBQTF2QixHQUFBLEtBQW9EQSxFQUFBMHZCLEdBQ3BEaEIsR0FBQWlCLEVBQUEzdkIsR0FBQSxJQUF3Q0EsRUFBQTJ2QixLQUN4QzF2QixHQUFBeXVCLEdBQUFnQixFQUFBenZCLEdBQUEsS0FBZ0RBLEVBQUF5dkIsR0FDaERoQixHQUFBaUIsRUFBQTF2QixHQUFBLElBQXNDQSxFQUFBMHZCLE1BRTFCM3ZCLFFBQUFDLE9BR1osSUFBQW13QixFQUFBamMsRUFBQTdPLE9BQUErcUIsRUFBQWxjLEVBQUE1TyxLQUNBLEdBQUE2cUIsRUFBQTdwQixNQUFBOHBCLEVBQUE5cEIsS0FDQTJvQixFQUFBa0IsRUFBQTdwQixLQUFBNnBCLEVBQUE5ckIsR0FBQStyQixFQUFBL3JCLFFBQ0csQ0FDSCxJQUFBZ3NCLEVBQUExcUIsR0FBQUMsRUFBQXVxQixFQUFBN3BCLE1BQUFncUIsRUFBQTNxQixHQUFBQyxFQUFBd3FCLEVBQUE5cEIsTUFDQWlxQixFQUFBL2pCLEdBQUE2akIsSUFBQTdqQixHQUFBOGpCLEdBQ0FFLEVBQUF2QixFQUFBa0IsRUFBQTdwQixLQUFBNnBCLEVBQUE5ckIsR0FBQWtzQixFQUFBRixFQUFBN3BCLEtBQUE1SSxPQUFBLFFBQUFvQyxJQUNBeXdCLEVBQUF4QixFQUFBbUIsRUFBQTlwQixLQUFBaXFCLEVBQUEsT0FBQUgsRUFBQS9yQixJQUFBdEUsTUFDQXd3QixJQUNBQyxFQUFBOUosSUFBQStKLEVBQUEvSixJQUFBLEdBQ0FzSSxFQUFBd0IsRUFBQTljLE1BQUE4YyxFQUFBOUosSUFBQSxLQUFBOEosRUFBQS9KLFFBQ0F1SSxFQUFBSixFQUFBNkIsRUFBQS9KLElBQUErSixFQUFBaGQsS0FBQWdkLEVBQUFoSyxTQUVBdUksRUFBQXdCLEVBQUE5YyxNQUFBOGMsRUFBQTlKLElBQUErSixFQUFBaGQsS0FBQStjLEVBQUE5YyxNQUFBOGMsRUFBQS9KLFNBR0ErSixFQUFBL0osT0FBQWdLLEVBQUEvSixLQUNPc0ksRUFBQUosRUFBQTRCLEVBQUEvSixPQUFBLEtBQUFnSyxFQUFBL0osS0FHUHRMLEVBQUEvYyxZQUFBcXdCLEdBSUEsU0FBQWdDLEdBQUFuakIsR0FDQSxHQUFBQSxFQUFBa0ksTUFBQWtiLFFBQUEsQ0FDQSxJQUFBbmpCLEVBQUFELEVBQUFDLFFBQ0FvakIsY0FBQXBqQixFQUFBcWpCLFNBQ0EsSUFBQXZnQixHQUFBLEVBQ0E5QyxFQUFBc2pCLFVBQUFyeUIsTUFBQXN5QixXQUFBLEdBQ0F4akIsRUFBQWhHLFFBQUF5cEIsZ0JBQUEsRUFDS3hqQixFQUFBcWpCLFFBQUFJLFlBQUEsV0FBNEMsT0FBQXpqQixFQUFBc2pCLFVBQUFyeUIsTUFBQXN5QixZQUFBemdCLE1BQUEsYUFDakQvQyxFQUFBaEcsUUFBQXlwQixpQkFDQXpqQixFQUFBaEcsUUFBQXlwQixnQkFBQSxJQUNLeGpCLEVBQUFzakIsVUFBQXJ5QixNQUFBc3lCLFdBQUEsV0FHTCxTQUFBRyxHQUFBM2pCLEdBQ0FBLEVBQUFrSSxNQUFBa2IsVUFBMEJwakIsRUFBQUMsUUFBQWlSLE1BQUEwUyxRQUEwQkMsR0FBQTdqQixJQUdwRCxTQUFBOGpCLEdBQUE5akIsR0FDQUEsRUFBQWtJLE1BQUE2YixtQkFBQSxFQUNBL3VCLFdBQUEsV0FBMEJnTCxFQUFBa0ksTUFBQTZiLG9CQUMxQi9qQixFQUFBa0ksTUFBQTZiLG1CQUFBLEVBQ0FDLEdBQUFoa0IsS0FDSyxLQUdMLFNBQUE2akIsR0FBQTdqQixFQUFBelAsR0FDQXlQLEVBQUFrSSxNQUFBNmIsb0JBQW1DL2pCLEVBQUFrSSxNQUFBNmIsbUJBQUEsR0FFbkMsWUFBQS9qQixFQUFBaEcsUUFBQWlxQixXQUNBamtCLEVBQUFrSSxNQUFBa2IsVUFDQTFmLEdBQUExRCxFQUFBLFFBQUFBLEVBQUF6UCxHQUNBeVAsRUFBQWtJLE1BQUFrYixTQUFBLEVBQ0FueEIsRUFBQStOLEVBQUFDLFFBQUFpVyxRQUFBLHNCQUlBbFcsRUFBQW9FLE9BQUFwRSxFQUFBQyxRQUFBaWtCLG1CQUFBbGtCLEVBQUEzSCxJQUFBa29CLE1BQ0F2Z0IsRUFBQUMsUUFBQWlSLE1BQUFpVCxRQUNBNTFCLEdBQW1CeUcsV0FBQSxXQUF5QixPQUFBZ0wsRUFBQUMsUUFBQWlSLE1BQUFpVCxPQUFBLElBQXVDLEtBRW5GbmtCLEVBQUFDLFFBQUFpUixNQUFBa1QsaUJBRUFqQixHQUFBbmpCLElBRUEsU0FBQWdrQixHQUFBaGtCLEVBQUF6UCxHQUNBeVAsRUFBQWtJLE1BQUE2YixvQkFFQS9qQixFQUFBa0ksTUFBQWtiLFVBQ0ExZixHQUFBMUQsRUFBQSxPQUFBQSxFQUFBelAsR0FDQXlQLEVBQUFrSSxNQUFBa2IsU0FBQSxFQUNBdHpCLEVBQUFrUSxFQUFBQyxRQUFBaVcsUUFBQSx1QkFFQW1OLGNBQUFyakIsRUFBQUMsUUFBQXFqQixTQUNBdHVCLFdBQUEsV0FBMEJnTCxFQUFBa0ksTUFBQWtiLFVBQXlCcGpCLEVBQUFDLFFBQUFva0IsT0FBQSxJQUE4QixNQUtqRixTQUFBQyxHQUFBdGtCLEdBR0EsSUFGQSxJQUFBQyxFQUFBRCxFQUFBQyxRQUNBc2tCLEVBQUF0a0IsRUFBQXVrQixRQUFBOU4sVUFDQWhyQixFQUFBLEVBQWlCQSxFQUFBdVUsRUFBQW1TLEtBQUEvaEIsT0FBeUIzRSxJQUFBLENBQzFDLElBQUE2TixFQUFBMEcsRUFBQW1TLEtBQUExbUIsR0FBQTBOLE9BQUEsRUFDQSxJQUFBRyxFQUFBMFksT0FBQSxDQUNBLEdBQUE5akIsR0FBQUMsRUFBQSxHQUNBLElBQUFzc0IsRUFBQW5oQixFQUFBeEosS0FBQTJtQixVQUFBbmQsRUFBQXhKLEtBQUE0VixhQUNBdk0sRUFBQXNoQixFQUFBNkosRUFDQUEsRUFBQTdKLE1BQ0ssQ0FDTCxJQUFBc0QsRUFBQXprQixFQUFBeEosS0FBQWlXLHdCQUNBNU0sRUFBQTRrQixFQUFBOUUsT0FBQThFLEVBQUE3RSxJQUVBLElBQUE5ZixFQUFBRSxFQUFBUixLQUFBSyxTQUVBLEdBREFBLEVBQUEsSUFBcUJBLEVBQUF5bEIsR0FBQTVlLEtBQ3JCNUcsRUFBQSxNQUFBQSxHQUFBLFFBQ0FGLEdBQUFJLEVBQUFSLEtBQUFLLEdBQ0FxckIsR0FBQWxyQixFQUFBUixNQUNBUSxFQUFBMlYsTUFBcUIsUUFBQXBOLEVBQUEsRUFBZ0JBLEVBQUF2SSxFQUFBMlYsS0FBQTdlLE9BQXFCeVIsSUFDakQyaUIsR0FBQWxyQixFQUFBMlYsS0FBQXBOLE1BT1QsU0FBQTJpQixHQUFBMXJCLEdBQ0EsR0FBQUEsRUFBQXFjLFFBQXFCLFFBQUExcEIsRUFBQSxFQUFnQkEsRUFBQXFOLEVBQUFxYyxRQUFBL2tCLFNBQXlCM0UsRUFBQSxDQUM5RCxJQUFBZzVCLEVBQUEzckIsRUFBQXFjLFFBQUExcEIsR0FBQW1GLEVBQUE2ekIsRUFBQTMwQixLQUFBNEIsV0FDQWQsSUFBaUI2ekIsRUFBQXRyQixPQUFBdkksRUFBQThVLGVBT2pCLFNBQUFnZixHQUFBMWtCLEVBQUE1SCxFQUFBdXNCLEdBQ0EsSUFBQXpMLEVBQUF5TCxHQUFBLE1BQUFBLEVBQUF6TCxJQUFBcmpCLEtBQUErRSxJQUFBLEVBQUErcEIsRUFBQXpMLEtBQUFsWixFQUFBc1gsU0FBQXlFLFVBQ0E3QyxFQUFBcmpCLEtBQUFxQyxNQUFBZ2hCLEVBQUEzQyxHQUFBdlcsSUFDQSxJQUFBaVosRUFBQTBMLEdBQUEsTUFBQUEsRUFBQTFMLE9BQUEwTCxFQUFBMUwsT0FBQUMsRUFBQWxaLEVBQUFpVyxRQUFBd0IsYUFFQTVmLEVBQUEyQixHQUFBcEIsRUFBQThnQixHQUFBcGhCLEVBQUEwQixHQUFBcEIsRUFBQTZnQixHQUdBLEdBQUEwTCxLQUFBQyxPQUFBLENBQ0EsSUFBQUMsRUFBQUYsRUFBQUMsT0FBQS9zQixLQUFBaUIsS0FBQWdzQixFQUFBSCxFQUFBQyxPQUFBOXNCLEdBQUFnQixLQUNBK3JCLEVBQUFodEIsR0FDQUEsRUFBQWd0QixFQUNBL3NCLEVBQUEwQixHQUFBcEIsRUFBQXNILEdBQUF2SCxHQUFBQyxFQUFBeXNCLElBQUE3a0IsRUFBQWlXLFFBQUF3QixlQUNLNWhCLEtBQUFDLElBQUFndkIsRUFBQTFzQixFQUFBa0gsYUFBQXhILElBQ0xELEVBQUEyQixHQUFBcEIsRUFBQXNILEdBQUF2SCxHQUFBQyxFQUFBMHNCLElBQUE5a0IsRUFBQWlXLFFBQUF3QixjQUNBM2YsRUFBQWd0QixHQUdBLE9BQVVqdEIsT0FBQUMsR0FBQWpDLEtBQUErRSxJQUFBOUMsRUFBQUQsRUFBQSxJQUtWLFNBQUFrdEIsR0FBQWhsQixHQUNBLElBQUFDLEVBQUFELEVBQUFDLFFBQUFtUyxFQUFBblMsRUFBQW1TLEtBQ0EsR0FBQW5TLEVBQUFnbEIsY0FBQWhsQixFQUFBMlUsUUFBQWprQixZQUFBcVAsRUFBQWhHLFFBQUFpYSxZQUFBLENBR0EsSUFGQSxJQUFBaVIsRUFBQWpHLEdBQUFoZixLQUFBc1gsU0FBQXFFLFdBQUE1YixFQUFBM0gsSUFBQXVqQixXQUNBdUosRUFBQWxsQixFQUFBMlUsUUFBQWhQLFlBQUFNLEVBQUFnZixFQUFBLEtBQ0F4NUIsRUFBQSxFQUFpQkEsRUFBQTBtQixFQUFBL2hCLE9BQWlCM0UsSUFBTyxJQUFBMG1CLEVBQUExbUIsR0FBQXVtQixPQUFBLENBQ3pDalMsRUFBQWhHLFFBQUFpYSxjQUNBN0IsRUFBQTFtQixHQUFBb29CLFNBQ1MxQixFQUFBMW1CLEdBQUFvb0IsT0FBQTVpQixNQUFBZ1YsUUFDVGtNLEVBQUExbUIsR0FBQXFvQixtQkFDUzNCLEVBQUExbUIsR0FBQXFvQixpQkFBQTdpQixNQUFBZ1YsU0FFVCxJQUFBa2YsRUFBQWhULEVBQUExbUIsR0FBQW9wQixVQUNBLEdBQUFzUSxFQUFnQixRQUFBdGpCLEVBQUEsRUFBZ0JBLEVBQUFzakIsRUFBQS8wQixPQUFrQnlSLElBQzNDc2pCLEVBQUF0akIsR0FBQTVRLE1BQUFnVixPQUVQbEcsRUFBQWhHLFFBQUFpYSxjQUNLaFUsRUFBQTJVLFFBQUExakIsTUFBQWdWLEtBQUFnZixFQUFBQyxFQUFBLE9BTUwsU0FBQUUsR0FBQXJsQixHQUNBLElBQUFBLEVBQUFoRyxRQUFBc2EsWUFBZ0MsU0FDaEMsSUFBQWpjLEVBQUEySCxFQUFBM0gsSUFBQTBDLEVBQUFoQixHQUFBaUcsRUFBQWhHLFFBQUEzQixFQUFBQyxNQUFBRCxFQUFBRSxLQUFBLEdBQUEwSCxFQUFBRCxFQUFBQyxRQUNBLEdBQUFsRixFQUFBMUssUUFBQTRQLEVBQUF1YixhQUFBLENBQ0EsSUFBQTF0QixFQUFBbVMsRUFBQXlGLFFBQUE1VSxZQUFBQyxFQUFBLE9BQUFBLEVBQUEsTUFBQWdLLElBQ0EsZ0RBQ0F1cUIsRUFBQXgzQixFQUFBNkMsV0FBQWlWLFlBQUF3YixFQUFBdHpCLEVBQUE4WCxZQUFBMGYsRUFPQSxPQU5BcmxCLEVBQUFzbEIsV0FBQXIwQixNQUFBd2tCLE1BQUEsR0FDQXpWLEVBQUF1bEIsa0JBQUExdkIsS0FBQStFLElBQUF5cUIsRUFBQXJsQixFQUFBc2xCLFdBQUEzZixZQUFBd2IsR0FBQSxFQUNBbmhCLEVBQUF3bEIsYUFBQXhsQixFQUFBdWxCLGtCQUFBcEUsRUFDQW5oQixFQUFBdWIsYUFBQXZiLEVBQUF1bEIsa0JBQUF6cUIsRUFBQTFLLFFBQUEsRUFDQTRQLEVBQUFzbEIsV0FBQXIwQixNQUFBd2tCLE1BQUF6VixFQUFBd2xCLGFBQUEsS0FDQUMsR0FBQTFsQixJQUNBLEVBRUEsU0FvRUEsU0FBQTJsQixHQUFBM2xCLEVBQUF1WSxHQUNBLElBQUF0WSxFQUFBRCxFQUFBQyxRQUFBMmxCLEVBQUEvRyxHQUFBN2UsRUFBQUMsU0FDQXNZLEVBQUFZLElBQUEsSUFBcUJaLEVBQUFZLElBQUEsR0FDckIsSUFBQTBNLEVBQUE3bEIsRUFBQW9FLE9BQUEsTUFBQXBFLEVBQUFvRSxNQUFBNFgsVUFBQWhjLEVBQUFvRSxNQUFBNFgsVUFBQS9iLEVBQUFzWCxTQUFBeUUsVUFDQXRDLEVBQUFqQyxHQUFBelgsR0FBQXFHLEtBQ0FrUyxFQUFBVyxPQUFBWCxFQUFBWSxJQUFBTyxJQUF3Q25CLEVBQUFXLE9BQUFYLEVBQUFZLElBQUFPLEdBQ3hDLElBQUFvTSxFQUFBOWxCLEVBQUEzSCxJQUFBZSxPQUFBdWQsR0FBQTFXLEdBQ0E4bEIsRUFBQXhOLEVBQUFZLElBQUF5TSxFQUFBSSxFQUFBek4sRUFBQVcsT0FBQTRNLEVBQUFGLEVBQ0EsR0FBQXJOLEVBQUFZLElBQUEwTSxFQUNBeGYsRUFBQTJWLFVBQUErSixFQUFBLEVBQUF4TixFQUFBWSxTQUNHLEdBQUFaLEVBQUFXLE9BQUEyTSxFQUFBbk0sRUFBQSxDQUNILElBQUF1TSxFQUFBbndCLEtBQUFDLElBQUF3aUIsRUFBQVksS0FBQTZNLEVBQUFGLEVBQUF2TixFQUFBVyxRQUFBUSxHQUNBdU0sR0FBQUosSUFBOEJ4ZixFQUFBMlYsVUFBQWlLLEdBRzlCLElBQUFDLEVBQUFsbUIsRUFBQW9FLE9BQUEsTUFBQXBFLEVBQUFvRSxNQUFBd1gsV0FBQTViLEVBQUFvRSxNQUFBd1gsV0FBQTNiLEVBQUFzWCxTQUFBcUUsV0FDQXVLLEVBQUE3TyxHQUFBdFgsTUFBQWhHLFFBQUFpYSxZQUFBaFUsRUFBQTJVLFFBQUFoUCxZQUFBLEdBQ0F3Z0IsRUFBQTdOLEVBQUFwUyxNQUFBb1MsRUFBQXJTLEtBQUFpZ0IsRUFRQSxPQVBBQyxJQUFnQjdOLEVBQUFwUyxNQUFBb1MsRUFBQXJTLEtBQUFpZ0IsR0FDaEI1TixFQUFBclMsS0FBQSxHQUNLRyxFQUFBdVYsV0FBQSxFQUNMckQsRUFBQXJTLEtBQUFnZ0IsRUFDSzdmLEVBQUF1VixXQUFBOWxCLEtBQUErRSxJQUFBLEVBQUEwZCxFQUFBclMsTUFBQWtnQixFQUFBLE9BQ0w3TixFQUFBcFMsTUFBQWdnQixFQUFBRCxFQUFBLElBQ0s3ZixFQUFBdVYsV0FBQXJELEVBQUFwUyxPQUFBaWdCLEVBQUEsTUFBQUQsR0FDTDlmLEVBS0EsU0FBQWdnQixHQUFBcm1CLEVBQUFtWixHQUNBLE1BQUFBLElBQ0FtTixHQUFBdG1CLEdBQ0FBLEVBQUFvRSxNQUFBNFgsV0FBQSxNQUFBaGMsRUFBQW9FLE1BQUE0WCxVQUFBaGMsRUFBQTNILElBQUEyakIsVUFBQWhjLEVBQUFvRSxNQUFBNFgsV0FBQTdDLEdBS0EsU0FBQW9OLEdBQUF2bUIsR0FDQXNtQixHQUFBdG1CLEdBQ0EsSUFBQXpHLEVBQUF5RyxFQUFBd21CLFlBQ0F4bUIsRUFBQW9FLE1BQUFxaUIsYUFBMEIzdUIsS0FBQXlCLEVBQUF4QixHQUFBd0IsRUFBQW10QixPQUFBMW1CLEVBQUFoRyxRQUFBMnNCLG9CQUcxQixTQUFBQyxHQUFBNW1CLEVBQUF2RixFQUFBK2lCLEdBQ0EsTUFBQS9pQixHQUFBLE1BQUEraUIsR0FBK0I4SSxHQUFBdG1CLEdBQy9CLE1BQUF2RixJQUFrQnVGLEVBQUFvRSxNQUFBd1gsV0FBQW5oQixHQUNsQixNQUFBK2lCLElBQWtCeGQsRUFBQW9FLE1BQUE0WCxVQUFBd0IsR0FZbEIsU0FBQThJLEdBQUF0bUIsR0FDQSxJQUFBMkcsRUFBQTNHLEVBQUFvRSxNQUFBcWlCLFlBQ0EsR0FBQTlmLEVBQUEsQ0FDQTNHLEVBQUFvRSxNQUFBcWlCLFlBQUEsS0FDQSxJQUFBM3VCLEVBQUFxbEIsR0FBQW5kLEVBQUEyRyxFQUFBN08sTUFBQUMsRUFBQW9sQixHQUFBbmQsRUFBQTJHLEVBQUE1TyxJQUNBOHVCLEdBQUE3bUIsRUFBQWxJLEVBQUFDLEVBQUE0TyxFQUFBK2YsU0FJQSxTQUFBRyxHQUFBN21CLEVBQUFsSSxFQUFBQyxFQUFBMnVCLEdBQ0EsSUFBQUksRUFBQW5CLEdBQUEzbEIsR0FDQWtHLEtBQUFwUSxLQUFBQyxJQUFBK0IsRUFBQW9PLEtBQUFuTyxFQUFBbU8sTUFDQWlULElBQUFyakIsS0FBQUMsSUFBQStCLEVBQUFxaEIsSUFBQXBoQixFQUFBb2hCLEtBQUF1TixFQUNBdmdCLE1BQUFyUSxLQUFBK0UsSUFBQS9DLEVBQUFxTyxNQUFBcE8sRUFBQW9PLE9BQ0ErUyxPQUFBcGpCLEtBQUErRSxJQUFBL0MsRUFBQW9oQixPQUFBbmhCLEVBQUFtaEIsUUFBQXdOLElBRUFFLEdBQUE1bUIsRUFBQThtQixFQUFBbEwsV0FBQWtMLEVBQUE5SyxXQUtBLFNBQUErSyxHQUFBL21CLEVBQUFvSSxHQUNBdFMsS0FBQW1qQixJQUFBalosRUFBQTNILElBQUEyakIsVUFBQTVULEdBQUEsSUFDQXZhLEdBQWVtNUIsR0FBQWhuQixHQUEwQm1aLElBQUEvUSxJQUN6QzZlLEdBQUFqbkIsRUFBQW9JLEdBQUEsR0FDQXZhLEdBQWNtNUIsR0FBQWhuQixHQUNka25CLEdBQUFsbkIsRUFBQSxNQUdBLFNBQUFpbkIsR0FBQWpuQixFQUFBb0ksRUFBQStlLEdBQ0EvZSxFQUFBdFMsS0FBQUMsSUFBQWlLLEVBQUFDLFFBQUFzWCxTQUFBNlAsYUFBQXBuQixFQUFBQyxRQUFBc1gsU0FBQUcsYUFBQXRQLElBQ0FwSSxFQUFBQyxRQUFBc1gsU0FBQXlFLFdBQUE1VCxHQUFBK2UsS0FDQW5uQixFQUFBM0gsSUFBQTJqQixVQUFBNVQsRUFDQXBJLEVBQUFDLFFBQUFvbkIsV0FBQUosYUFBQTdlLEdBQ0FwSSxFQUFBQyxRQUFBc1gsU0FBQXlFLFdBQUE1VCxJQUE2Q3BJLEVBQUFDLFFBQUFzWCxTQUFBeUUsVUFBQTVULElBSzdDLFNBQUFrZixHQUFBdG5CLEVBQUFvSSxFQUFBbWYsRUFBQUosR0FDQS9lLEVBQUF0UyxLQUFBQyxJQUFBcVMsRUFBQXBJLEVBQUFDLFFBQUFzWCxTQUFBaVEsWUFBQXhuQixFQUFBQyxRQUFBc1gsU0FBQXBCLGNBQ0FvUixFQUFBbmYsR0FBQXBJLEVBQUEzSCxJQUFBdWpCLFdBQUE5bEIsS0FBQW1qQixJQUFBalosRUFBQTNILElBQUF1akIsV0FBQXhULEdBQUEsS0FBQStlLElBQ0FubkIsRUFBQTNILElBQUF1akIsV0FBQXhULEVBQ0E0YyxHQUFBaGxCLEdBQ0FBLEVBQUFDLFFBQUFzWCxTQUFBcUUsWUFBQXhULElBQThDcEksRUFBQUMsUUFBQXNYLFNBQUFxRSxXQUFBeFQsR0FDOUNwSSxFQUFBQyxRQUFBb25CLFdBQUFDLGNBQUFsZixJQU9BLFNBQUFxZixHQUFBem5CLEdBQ0EsSUFBQWhVLEVBQUFnVSxFQUFBQyxRQUFBa2xCLEVBQUFuNUIsRUFBQTRvQixRQUFBaFAsWUFDQThoQixFQUFBNXhCLEtBQUFpcUIsTUFBQS9mLEVBQUEzSCxJQUFBZSxPQUFBdWQsR0FBQTNXLEVBQUFDLFVBQ0EsT0FDQXlYLGFBQUExckIsRUFBQXVyQixTQUFBRyxhQUNBaVEsV0FBQTM3QixFQUFBa3FCLFFBQUF3QixhQUNBOFAsWUFBQXg3QixFQUFBdXJCLFNBQUFpUSxZQUFBclIsWUFBQW5xQixFQUFBdXJCLFNBQUFwQixZQUNBeVIsVUFBQTU3QixFQUFBa3FCLFFBQUFDLFlBQ0EwUixRQUFBN25CLEVBQUFoRyxRQUFBaWEsWUFBQWtSLEVBQUEsRUFDQTJDLFVBQUFKLEVBQ0FOLGFBQUFNLEVBQUF0USxHQUFBcFgsR0FBQWhVLEVBQUEyckIsVUFDQU4sZUFBQXJyQixFQUFBcXJCLGVBQ0F4QyxZQUFBc1EsR0FJQSxJQUFBNEMsR0FBQSxTQUFBMU8sRUFBQWhrQixFQUFBMkssR0FDQXRMLEtBQUFzTCxLQUNBLElBQUFnb0IsRUFBQXR6QixLQUFBc3pCLEtBQUFqM0IsRUFBQSxPQUFBQSxFQUFBLDREQUNBazNCLEVBQUF2ekIsS0FBQXV6QixNQUFBbDNCLEVBQUEsT0FBQUEsRUFBQSxrREFBNEUseUJBQzVFaTNCLEVBQUFFLFNBQUFELEVBQUFDLFVBQUEsRUFDQTdPLEVBQUEyTyxHQUFjM08sRUFBQTRPLEdBRWRsbEIsR0FBQWlsQixFQUFBLG9CQUNBQSxFQUFBdFEsY0FBNEJyaUIsRUFBQTJ5QixFQUFBaE0sVUFBQSxjQUU1QmpaLEdBQUFrbEIsRUFBQSxvQkFDQUEsRUFBQTlSLGFBQTRCOWdCLEVBQUE0eUIsRUFBQXJNLFdBQUEsZ0JBRzVCbG5CLEtBQUF5ekIsa0JBQUEsRUFFQWg2QixHQUFBQyxFQUFBLElBQTZCc0csS0FBQXV6QixNQUFBLzJCLE1BQUFrM0IsVUFBQTF6QixLQUFBc3pCLEtBQUE5MkIsTUFBQW0zQixTQUFBLFNBRzdCTixHQUFBejZCLFVBQUFnN0IsT0FBQSxTQUFBNWlCLEdBQ0EsSUFBQTZpQixFQUFBN2lCLEVBQUE4aEIsWUFBQTloQixFQUFBeVEsWUFBQSxFQUNBcVMsRUFBQTlpQixFQUFBMGhCLGFBQUExaEIsRUFBQWdTLGFBQUEsRUFDQStRLEVBQUEvaUIsRUFBQTJSLGVBRUEsR0FBQW1SLEVBQUEsQ0FDQTl6QixLQUFBc3pCLEtBQUE5MkIsTUFBQStPLFFBQUEsUUFDQXZMLEtBQUFzekIsS0FBQTkyQixNQUFBZ29CLE9BQUFxUCxFQUFBRSxFQUFBLFNBQ0EsSUFBQUMsRUFBQWhqQixFQUFBaWlCLFlBQUFZLEVBQUFFLEVBQUEsR0FFQS96QixLQUFBc3pCLEtBQUFyM0IsV0FBQU8sTUFBQWtJLE9BQ0F0RCxLQUFBK0UsSUFBQSxFQUFBNkssRUFBQTBoQixhQUFBMWhCLEVBQUFnUyxhQUFBZ1IsR0FBQSxVQUVBaDBCLEtBQUFzekIsS0FBQTkyQixNQUFBK08sUUFBQSxHQUNBdkwsS0FBQXN6QixLQUFBcjNCLFdBQUFPLE1BQUFrSSxPQUFBLElBR0EsR0FBQW12QixFQUFBLENBQ0E3ekIsS0FBQXV6QixNQUFBLzJCLE1BQUErTyxRQUFBLFFBQ0F2TCxLQUFBdXpCLE1BQUEvMkIsTUFBQWlWLE1BQUFxaUIsRUFBQUMsRUFBQSxTQUNBL3pCLEtBQUF1ekIsTUFBQS8yQixNQUFBZ1YsS0FBQVIsRUFBQW1pQixRQUFBLEtBQ0EsSUFBQWMsRUFBQWpqQixFQUFBa2lCLFVBQUFsaUIsRUFBQW1pQixTQUFBVyxFQUFBQyxFQUFBLEdBQ0EvekIsS0FBQXV6QixNQUFBdDNCLFdBQUFPLE1BQUF3a0IsTUFDQTVmLEtBQUErRSxJQUFBLEVBQUE2SyxFQUFBOGhCLFlBQUE5aEIsRUFBQXlRLFlBQUF3UyxHQUFBLFVBRUFqMEIsS0FBQXV6QixNQUFBLzJCLE1BQUErTyxRQUFBLEdBQ0F2TCxLQUFBdXpCLE1BQUF0M0IsV0FBQU8sTUFBQXdrQixNQUFBLElBUUEsT0FMQWhoQixLQUFBeXpCLGtCQUFBemlCLEVBQUFnUyxhQUFBLElBQ0EsR0FBQStRLEdBQXNCL3pCLEtBQUFrMEIsZ0JBQ3RCbDBCLEtBQUF5ekIsa0JBQUEsSUFHVWhpQixNQUFBcWlCLEVBQUFDLEVBQUEsRUFBQXZQLE9BQUFxUCxFQUFBRSxFQUFBLElBR1ZWLEdBQUF6NkIsVUFBQWc2QixjQUFBLFNBQUEzeEIsR0FDQWpCLEtBQUF1ekIsTUFBQXJNLFlBQUFqbUIsSUFBcUNqQixLQUFBdXpCLE1BQUFyTSxXQUFBam1CLEdBQ3JDakIsS0FBQW0wQixjQUEwQm4wQixLQUFBbzBCLG1CQUFBcDBCLEtBQUF1ekIsTUFBQXZ6QixLQUFBbTBCLGFBQUEsVUFHMUJkLEdBQUF6NkIsVUFBQTI1QixhQUFBLFNBQUF0eEIsR0FDQWpCLEtBQUFzekIsS0FBQWhNLFdBQUFybUIsSUFBbUNqQixLQUFBc3pCLEtBQUFoTSxVQUFBcm1CLEdBQ25DakIsS0FBQXEwQixhQUF5QnIwQixLQUFBbzBCLG1CQUFBcDBCLEtBQUFzekIsS0FBQXR6QixLQUFBcTBCLFlBQUEsU0FHekJoQixHQUFBejZCLFVBQUFzN0IsY0FBQSxXQUNBLElBQUFsRSxFQUFBeDFCLElBQUFMLEVBQUEsY0FDQTZGLEtBQUF1ekIsTUFBQS8yQixNQUFBa0ksT0FBQTFFLEtBQUFzekIsS0FBQTkyQixNQUFBd2tCLE1BQUFnUCxFQUNBaHdCLEtBQUF1ekIsTUFBQS8yQixNQUFBODNCLGNBQUF0MEIsS0FBQXN6QixLQUFBOTJCLE1BQUE4M0IsY0FBQSxPQUNBdDBCLEtBQUFtMEIsYUFBQSxJQUFBcDBCLEVBQ0FDLEtBQUFxMEIsWUFBQSxJQUFBdDBCLEdBR0FzekIsR0FBQXo2QixVQUFBdzdCLG1CQUFBLFNBQUFHLEVBQUFDLEVBQUExc0IsR0FDQXlzQixFQUFBLzNCLE1BQUE4M0IsY0FBQSxPQWNBRSxFQUFBcjBCLElBQUEsSUFiQSxTQUFBczBCLElBT0EsSUFBQW5MLEVBQUFpTCxFQUFBampCLHdCQUNBb2pCLEVBQUEsUUFBQTVzQixFQUFBbk8sU0FBQWc3QixpQkFBQXJMLEVBQUE3WCxNQUFBLEdBQUE2WCxFQUFBN0UsSUFBQTZFLEVBQUE5RSxRQUFBLEdBQ0E3cUIsU0FBQWc3QixrQkFBQXJMLEVBQUE3WCxNQUFBNlgsRUFBQTlYLE1BQUEsRUFBQThYLEVBQUE5RSxPQUFBLEdBQ0FrUSxHQUFBSCxFQUF3QkEsRUFBQS8zQixNQUFBODNCLGNBQUEsT0FDZEUsRUFBQXIwQixJQUFBLElBQUFzMEIsTUFLVnBCLEdBQUF6NkIsVUFBQWc4QixNQUFBLFdBQ0EsSUFBQXo0QixFQUFBNkQsS0FBQXV6QixNQUFBdDJCLFdBQ0FkLEVBQUFILFlBQUFnRSxLQUFBdXpCLE9BQ0FwM0IsRUFBQUgsWUFBQWdFLEtBQUFzekIsT0FHQSxJQUFBdUIsR0FBQSxhQU9BLFNBQUFDLEdBQUF4cEIsRUFBQTBGLEdBQ0FBLElBQWlCQSxFQUFBK2hCLEdBQUF6bkIsSUFDakIsSUFBQXlwQixFQUFBenBCLEVBQUFDLFFBQUF1WCxTQUFBa1MsRUFBQTFwQixFQUFBQyxRQUFBMFgsVUFDQWdTLEdBQUEzcEIsRUFBQTBGLEdBQ0EsUUFBQWhhLEVBQUEsRUFBaUJBLEVBQUEsR0FBQSs5QixHQUFBenBCLEVBQUFDLFFBQUF1WCxVQUFBa1MsR0FBQTFwQixFQUFBQyxRQUFBMFgsVUFBbUZqc0IsSUFDcEcrOUIsR0FBQXpwQixFQUFBQyxRQUFBdVgsVUFBQXhYLEVBQUFoRyxRQUFBNGUsY0FDTzBMLEdBQUF0a0IsR0FDUDJwQixHQUFBM3BCLEVBQUF5bkIsR0FBQXpuQixJQUNBeXBCLEVBQUF6cEIsRUFBQUMsUUFBQXVYLFNBQXFDa1MsRUFBQTFwQixFQUFBQyxRQUFBMFgsVUFNckMsU0FBQWdTLEdBQUEzcEIsRUFBQTBGLEdBQ0EsSUFBQTFaLEVBQUFnVSxFQUFBQyxRQUNBMnBCLEVBQUE1OUIsRUFBQXE3QixXQUFBaUIsT0FBQTVpQixHQUVBMVosRUFBQXNxQixNQUFBcGxCLE1BQUFnbUIsY0FBQWxyQixFQUFBd3JCLFNBQUFvUyxFQUFBempCLE9BQUEsS0FDQW5hLEVBQUFzcUIsTUFBQXBsQixNQUFBMjRCLGVBQUE3OUIsRUFBQTJyQixVQUFBaVMsRUFBQTFRLFFBQUEsS0FDQWx0QixFQUFBODlCLGFBQUE1NEIsTUFBQTY0QixhQUFBSCxFQUFBMVEsT0FBQSx1QkFFQTBRLEVBQUF6akIsT0FBQXlqQixFQUFBMVEsUUFDQWx0QixFQUFBZytCLGdCQUFBOTRCLE1BQUErTyxRQUFBLFFBQ0FqVSxFQUFBZytCLGdCQUFBOTRCLE1BQUFrSSxPQUFBd3dCLEVBQUExUSxPQUFBLEtBQ0FsdEIsRUFBQWcrQixnQkFBQTk0QixNQUFBd2tCLE1BQUFrVSxFQUFBempCLE1BQUEsTUFDVW5hLEVBQUFnK0IsZ0JBQUE5NEIsTUFBQStPLFFBQUEsR0FDVjJwQixFQUFBMVEsUUFBQWxaLEVBQUFoRyxRQUFBaXdCLDRCQUFBanFCLEVBQUFoRyxRQUFBaWEsYUFDQWpvQixFQUFBaytCLGFBQUFoNUIsTUFBQStPLFFBQUEsUUFDQWpVLEVBQUFrK0IsYUFBQWg1QixNQUFBa0ksT0FBQXd3QixFQUFBMVEsT0FBQSxLQUNBbHRCLEVBQUFrK0IsYUFBQWg1QixNQUFBd2tCLE1BQUFoUSxFQUFBbVAsWUFBQSxNQUNVN29CLEVBQUFrK0IsYUFBQWg1QixNQUFBK08sUUFBQSxHQXBDVnNwQixHQUFBajhCLFVBQUFnN0IsT0FBQSxXQUErQyxPQUFTcFAsT0FBQSxFQUFBL1MsTUFBQSxJQUN4RG9qQixHQUFBajhCLFVBQUFnNkIsY0FBQSxhQUNBaUMsR0FBQWo4QixVQUFBMjVCLGFBQUEsYUFDQXNDLEdBQUFqOEIsVUFBQWc4QixNQUFBLGFBb0NBLElBQUFhLElBQXNCQyxPQUFBckMsR0FBQXNDLEtBQUFkLElBRXRCLFNBQUFlLEdBQUF0cUIsR0FDQUEsRUFBQUMsUUFBQW9uQixhQUNBcm5CLEVBQUFDLFFBQUFvbkIsV0FBQWlDLFFBQ0F0cEIsRUFBQUMsUUFBQW9uQixXQUFBcDFCLFVBQ09uQyxFQUFBa1EsRUFBQUMsUUFBQWlXLFFBQUFsVyxFQUFBQyxRQUFBb25CLFdBQUFwMUIsV0FHUCtOLEVBQUFDLFFBQUFvbkIsV0FBQSxJQUFBOEMsR0FBQW5xQixFQUFBaEcsUUFBQXV3QixnQkFBQSxTQUFBeDZCLEdBQ0FpUSxFQUFBQyxRQUFBaVcsUUFBQXZDLGFBQUE1akIsRUFBQWlRLEVBQUFDLFFBQUErcEIsaUJBRUFqbkIsR0FBQWhULEVBQUEsdUJBQ0FpUSxFQUFBa0ksTUFBQWtiLFNBQTZCcHVCLFdBQUEsV0FBeUIsT0FBQWdMLEVBQUFDLFFBQUFpUixNQUFBMFMsU0FBbUMsS0FFekY3ekIsRUFBQXdCLGFBQUEsMEJBQ0csU0FBQW9FLEVBQUE2MEIsR0FDSCxjQUFBQSxFQUErQmxELEdBQUF0bkIsRUFBQXJLLEdBQ3JCb3hCLEdBQUEvbUIsRUFBQXJLLElBQ1BxSyxHQUNIQSxFQUFBQyxRQUFBb25CLFdBQUFwMUIsVUFDS0EsRUFBQStOLEVBQUFDLFFBQUFpVyxRQUFBbFcsRUFBQUMsUUFBQW9uQixXQUFBcDFCLFVBU0wsSUFBQXc0QixHQUFBLEVBRUEsU0FBQUMsR0FBQTFxQixHQUNBQSxFQUFBb0UsT0FDQXBFLEtBQ0EycUIsYUFBQSxFQUNBakIsWUFBQTFwQixFQUFBM0gsSUFBQWUsT0FDQWdmLGFBQUEsRUFDQXdTLFlBQUEsS0FDQUMsUUFBQSxFQUNBQyxXQUFBLEtBQ0F6bUIsdUJBQUEsS0FDQTBtQixxQkFBQSxFQUNBQyxrQkFBQSxFQUNBQyxlQUFBLEVBQ0FyUCxXQUFBLEtBQUFJLFVBQUEsS0FDQXlLLFlBQUEsS0FDQTdDLE9BQUEsRUFDQWp2QixLQUFBODFCLElBN21EQSxTQUFBUyxHQUNBN1ksR0FDQUEsR0FBQThZLElBQUFqMUIsS0FBQWcxQixHQUVBQSxFQUFBRSxVQUFBL1ksSUFDQThZLEtBQUFELEdBQ0F6WSxxQkF5bURBNFksQ0FBQXJyQixFQUFBb0UsT0FJQSxTQUFBa25CLEdBQUF0ckIsR0FDQSxJQUFBa3JCLEVBQUFsckIsRUFBQW9FLE9BemxEQSxTQUFBOG1CLEVBQUFLLEdBQ0EsSUFBQUMsRUFBQU4sRUFBQUUsVUFDQSxHQUFBSSxFQUVBLEtBcEJBLFNBQUFBLEdBR0EsSUFBQUMsRUFBQUQsRUFBQS9ZLGlCQUFBL21CLEVBQUEsRUFDQSxHQUNBLEtBQVVBLEVBQUErL0IsRUFBQXA3QixPQUFzQjNFLElBQ3pCKy9CLEVBQUEvL0IsR0FBQUcsS0FBQSxNQUNQLFFBQUFpVyxFQUFBLEVBQW1CQSxFQUFBMHBCLEVBQUFMLElBQUE5NkIsT0FBc0J5UixJQUFBLENBQ3pDLElBQUFvcEIsRUFBQU0sRUFBQUwsSUFBQXJwQixHQUNBLEdBQUFvcEIsRUFBQTdtQix1QkFDUyxLQUFBNm1CLEVBQUFILHFCQUFBRyxFQUFBN21CLHVCQUFBaFUsUUFDRTY2QixFQUFBN21CLHVCQUFBNm1CLEVBQUFILHdCQUFBbC9CLEtBQUEsS0FBQXEvQixFQUFBbHJCLFdBRVJ0VSxFQUFBKy9CLEVBQUFwN0IsUUFPSXE3QixDQUFBRixHQUNQLFFBQ0FuWixHQUFBLEtBQ0FrWixFQUFBQyxJQW1sREFHLENBQUFULEVBQUEsU0FBQU0sR0FDQSxRQUFBOS9CLEVBQUEsRUFBbUJBLEVBQUE4L0IsRUFBQUwsSUFBQTk2QixPQUFzQjNFLElBQ2xDOC9CLEVBQUFMLElBQUF6L0IsR0FBQXNVLEdBQUFvRSxNQUFBLE1BT1AsU0FBQW9uQixHQUVBLElBREEsSUFBQUwsRUFBQUssRUFBQUwsSUFDQXovQixFQUFBLEVBQWlCQSxFQUFBeS9CLEVBQUE5NkIsT0FBZ0IzRSxJQUM1QmtnQyxHQUFBVCxFQUFBei9CLElBQ0wsUUFBQWtPLEVBQUEsRUFBbUJBLEVBQUF1eEIsRUFBQTk2QixPQUFrQnVKLElBQ2hDaXlCLEdBQUFWLEVBQUF2eEIsSUFDTCxRQUFBMkQsRUFBQSxFQUFtQkEsRUFBQTR0QixFQUFBOTZCLE9BQWtCa04sSUFDaEN1dUIsR0FBQVgsRUFBQTV0QixJQUNMLFFBQUFDLEVBQUEsRUFBbUJBLEVBQUEydEIsRUFBQTk2QixPQUFrQm1OLElBQ2hDdXVCLEdBQUFaLEVBQUEzdEIsSUFDTCxRQUFBbUUsRUFBQSxFQUFtQkEsRUFBQXdwQixFQUFBOTZCLE9BQWtCc1IsSUFDaENxcUIsR0FBQWIsRUFBQXhwQixJQWpCTHNxQixDQUFBVCxLQW9CQSxTQUFBSSxHQUFBVixHQUNBLElBQUFsckIsRUFBQWtyQixFQUFBbHJCLEdBQUFDLEVBQUFELEVBQUFDLFNBeVdBLFNBQUFELEdBQ0EsSUFBQUMsRUFBQUQsRUFBQUMsU0FDQUEsRUFBQWlzQixtQkFBQWpzQixFQUFBc1gsU0FBQTNSLGNBQ0EzRixFQUFBb1gsZUFBQXBYLEVBQUFzWCxTQUFBM1IsWUFBQTNGLEVBQUFzWCxTQUFBcEIsWUFDQWxXLEVBQUE2cEIsYUFBQTU0QixNQUFBa0ksT0FBQWdlLEdBQUFwWCxHQUFBLEtBQ0FDLEVBQUFxVyxNQUFBcGxCLE1BQUFpN0IsY0FBQWxzQixFQUFBb1gsZUFBQSxLQUNBcFgsRUFBQXFXLE1BQUFwbEIsTUFBQWs3QixpQkFBQWhWLEdBQUFwWCxHQUFBLEtBQ0FDLEVBQUFpc0IsbUJBQUEsR0EvV0FHLENBQUFyc0IsR0FDQWtyQixFQUFBRCxlQUF5QmxyQixHQUFBQyxHQUV6QmtyQixFQUFBb0IsV0FBQXBCLEVBQUFQLGFBQUFPLEVBQUE5UyxhQUFBLE1BQUE4UyxFQUFBbFAsV0FDQWtQLEVBQUF6RSxjQUFBeUUsRUFBQXpFLFlBQUEzdUIsS0FBQWlCLEtBQUFrSCxFQUFBNk0sVUFDQW9lLEVBQUF6RSxZQUFBMXVCLEdBQUFnQixNQUFBa0gsRUFBQThNLFNBQ0E5TSxFQUFBRyxnQkFBQUosRUFBQWhHLFFBQUE0ZSxhQUNBc1MsRUFBQTVDLE9BQUE0QyxFQUFBb0IsWUFDQSxJQUFBQyxHQUFBdnNCLEVBQUFrckIsRUFBQW9CLGFBQTRDblQsSUFBQStSLEVBQUFsUCxVQUFBNkksT0FBQXFHLEVBQUF6RSxhQUEwQ3lFLEVBQUE5UyxhQUd0RixTQUFBeVQsR0FBQVgsR0FDQUEsRUFBQXNCLGVBQUF0QixFQUFBb0IsWUFBQUcsR0FBQXZCLEVBQUFsckIsR0FBQWtyQixFQUFBNUMsUUFHQSxTQUFBd0QsR0FBQVosR0FDQSxJQUFBbHJCLEVBQUFrckIsRUFBQWxyQixHQUFBQyxFQUFBRCxFQUFBQyxRQUNBaXJCLEVBQUFzQixnQkFBMEJsSSxHQUFBdGtCLEdBRTFCa3JCLEVBQUF3QixXQUFBakYsR0FBQXpuQixHQUtBQyxFQUFBRyxpQkFBQUosRUFBQWhHLFFBQUE0ZSxlQUNBc1MsRUFBQXlCLGNBQUE5VSxHQUFBN1gsRUFBQUMsRUFBQUMsUUFBQUQsRUFBQUMsUUFBQWpILEtBQUE1SSxRQUFBNlYsS0FBQSxFQUNBbEcsRUFBQUMsUUFBQXNoQixXQUFBMkosRUFBQXlCLGNBQ0F6QixFQUFBd0IsV0FBQWxGLFlBQ0ExeEIsS0FBQStFLElBQUFvRixFQUFBc1gsU0FBQXBCLFlBQUFsVyxFQUFBcVcsTUFBQTBJLFdBQUFrTSxFQUFBeUIsY0FBQXZWLEdBQUFwWCxLQUFBQyxRQUFBdVgsVUFDQTBULEVBQUEwQixjQUFBOTJCLEtBQUErRSxJQUFBLEVBQUFvRixFQUFBcVcsTUFBQTBJLFdBQUFrTSxFQUFBeUIsY0FBQXJWLEdBQUF0WCxNQUdBa3JCLEVBQUFzQixnQkFBQXRCLEVBQUFGLG9CQUNLRSxFQUFBMkIsa0JBQUE1c0IsRUFBQWlSLE1BQUFnUCxvQkFHTCxTQUFBNkwsR0FBQWIsR0FDQSxJQUFBbHJCLEVBQUFrckIsRUFBQWxyQixHQUVBLE1BQUFrckIsRUFBQXlCLGdCQUNBM3NCLEVBQUFDLFFBQUFxVyxNQUFBcGxCLE1BQUFtM0IsU0FBQTZDLEVBQUF5QixjQUFBLEtBQ0F6QixFQUFBMEIsY0FBQTVzQixFQUFBM0gsSUFBQXVqQixZQUNPMEwsR0FBQXRuQixFQUFBbEssS0FBQUMsSUFBQWlLLEVBQUFDLFFBQUFzWCxTQUFBcUUsV0FBQXNQLEVBQUEwQixnQkFBQSxHQUNQNXNCLEVBQUFDLFFBQUFHLGdCQUFBLEdBR0EsSUFBQTBzQixFQUFBNUIsRUFBQXRILE9BQUFzSCxFQUFBdEgsT0FBQS94QixJQUNBcTVCLEVBQUEyQixtQkFDSzdzQixFQUFBQyxRQUFBaVIsTUFBQStPLGNBQUFpTCxFQUFBMkIsa0JBQUFDLElBQ0w1QixFQUFBc0IsZ0JBQUF0QixFQUFBeEIsYUFBQTFwQixFQUFBM0gsSUFBQWUsU0FDS293QixHQUFBeHBCLEVBQUFrckIsRUFBQXdCLFlBQ0x4QixFQUFBc0IsZ0JBQ0tPLEdBQUEvc0IsRUFBQWtyQixFQUFBd0IsWUFFTHhCLEVBQUFGLGtCQUE0QjdILEdBQUFuakIsR0FFNUJBLEVBQUFrSSxNQUFBa2IsU0FBQThILEVBQUFOLGFBQ0s1cUIsRUFBQUMsUUFBQWlSLE1BQUFpVCxNQUFBK0csRUFBQUwsUUFDTGlDLEdBQWtCbkosR0FBQXVILEVBQUFsckIsSUFHbEIsU0FBQWdzQixHQUFBZCxHQUNBLElBQUFsckIsRUFBQWtyQixFQUFBbHJCLEdBQUFDLEVBQUFELEVBQUFDLFFBQUE1SCxFQUFBMkgsRUFBQTNILElBYUEsR0FYQTZ5QixFQUFBc0IsZ0JBQTBCUSxHQUFBaHRCLEVBQUFrckIsRUFBQTVDLFFBRzFCLE1BQUFyb0IsRUFBQWd0QixhQUFBLE1BQUEvQixFQUFBbFAsV0FBQSxNQUFBa1AsRUFBQXRQLGFBQUFzUCxFQUFBekUsY0FDS3htQixFQUFBZ3RCLFlBQUFodEIsRUFBQWl0QixZQUFBLE1BR0wsTUFBQWhDLEVBQUFsUCxXQUE2QmlMLEdBQUFqbkIsRUFBQWtyQixFQUFBbFAsVUFBQWtQLEVBQUEvRCxhQUU3QixNQUFBK0QsRUFBQXRQLFlBQThCMEwsR0FBQXRuQixFQUFBa3JCLEVBQUF0UCxZQUFBLE1BRTlCc1AsRUFBQXpFLFlBQUEsQ0FDQSxJQUFBbE8sRUFuZEEsU0FBQXZZLEVBQUFySyxFQUFBbEQsRUFBQWkwQixHQUVBLElBQUFuTyxFQURBLE1BQUFtTyxJQUF1QkEsRUFBQSxHQUV2QjFtQixFQUFBaEcsUUFBQTRlLGNBQUFqakIsR0FBQWxELElBSUFrRCxJQUFBbUIsR0FBQXNELEdBQUF6RSxFQUFBb0QsS0FBQSxVQUFBcEQsRUFBQTBFLE9BQUExRSxFQUFBbUIsR0FBQSxFQUFBbkIsRUFBQW1CLEdBQUEsU0FBQW5CLEVBQ0FsRCxFQUFBLFVBQUFrRCxFQUFBMEUsT0FBQUQsR0FBQXpFLEVBQUFvRCxLQUFBcEQsRUFBQW1CLEdBQUEsWUFBQW5CLEdBRUEsUUFBQXczQixFQUFBLEVBQXFCQSxFQUFBLEVBQVdBLElBQUEsQ0FDaEMsSUFBQUMsR0FBQSxFQUNBM1EsRUFBQUksR0FBQTdjLEVBQUFySyxHQUNBMDNCLEVBQUE1NkIsTUFBQWtELEVBQUFrbkIsR0FBQTdjLEVBQUF2TixHQUFBZ3FCLEVBQ0FsRSxHQUFZclMsS0FBQXBRLEtBQUFDLElBQUEwbUIsRUFBQXZXLEtBQUFtbkIsRUFBQW5uQixNQUNaaVQsSUFBQXJqQixLQUFBQyxJQUFBMG1CLEVBQUF0RCxJQUFBa1UsRUFBQWxVLEtBQUF1TixFQUNBdmdCLE1BQUFyUSxLQUFBK0UsSUFBQTRoQixFQUFBdlcsS0FBQW1uQixFQUFBbm5CLE1BQ0FnVCxPQUFBcGpCLEtBQUErRSxJQUFBNGhCLEVBQUF2RCxPQUFBbVUsRUFBQW5VLFFBQUF3TixHQUNBLElBQUE0RyxFQUFBM0gsR0FBQTNsQixFQUFBdVksR0FDQWdWLEVBQUF2dEIsRUFBQTNILElBQUEyakIsVUFBQXdSLEVBQUF4dEIsRUFBQTNILElBQUF1akIsV0FTQSxHQVJBLE1BQUEwUixFQUFBdFIsWUFDQStLLEdBQUEvbUIsRUFBQXN0QixFQUFBdFIsV0FDQWxtQixLQUFBbWpCLElBQUFqWixFQUFBM0gsSUFBQTJqQixVQUFBdVIsR0FBQSxJQUFzREgsR0FBQSxJQUV0RCxNQUFBRSxFQUFBMVIsYUFDQTBMLEdBQUF0bkIsRUFBQXN0QixFQUFBMVIsWUFDQTlsQixLQUFBbWpCLElBQUFqWixFQUFBM0gsSUFBQXVqQixXQUFBNFIsR0FBQSxJQUF3REosR0FBQSxLQUV4REEsRUFBbUIsTUFFbkIsT0FBQTdVLEVBcWJBa1YsQ0FBQXp0QixFQUFBbEYsR0FBQXpDLEVBQUE2eUIsRUFBQXpFLFlBQUEzdUIsTUFDQWdELEdBQUF6QyxFQUFBNnlCLEVBQUF6RSxZQUFBMXVCLElBQUFtekIsRUFBQXpFLFlBQUFDLFNBcmVBLFNBQUExbUIsRUFBQXVZLEdBQ0EsSUFBQTNVLEdBQUE1RCxFQUFBLHlCQUVBLElBQUFDLEVBQUFELEVBQUFDLFFBQUErZCxFQUFBL2QsRUFBQXFXLE1BQUF0USx3QkFBQTBuQixFQUFBLEtBR0EsR0FGQW5WLEVBQUFZLElBQUE2RSxFQUFBN0UsSUFBQSxFQUErQnVVLEdBQUEsRUFDL0JuVixFQUFBVyxPQUFBOEUsRUFBQTdFLEtBQUE3dEIsT0FBQXFpQyxhQUFBdC9CLFNBQUFzdEIsZ0JBQUFqRSxnQkFBbUdnVyxHQUFBLEdBQ25HLE1BQUFBLElBQUE1K0IsRUFBQSxDQUNBLElBQUE4K0IsRUFBQTc4QixFQUFBLHNFQUFxRXduQixFQUFBWSxJQUFBbFosRUFBQW9jLFdBQUE3RixHQUFBeFcsRUFBQUMsVUFBQSwwQ0FBbUdzWSxFQUFBVyxPQUFBWCxFQUFBWSxJQUFBL0IsR0FBQXBYLEdBQUFDLEVBQUEwWCxXQUFBLHVDQUEwR1ksRUFBQSxtQkFBdUR6aUIsS0FBQStFLElBQUEsRUFBQTBkLEVBQUFwUyxNQUFBb1MsRUFBQXJTLE1BQUEsT0FDelVsRyxFQUFBQyxRQUFBd1csVUFBQTNsQixZQUFBODhCLEdBQ0FBLEVBQUFDLGVBQUFILEdBQ0ExdEIsRUFBQUMsUUFBQXdXLFVBQUEvbEIsWUFBQWs5QixLQTRkQUUsQ0FBQTl0QixFQUFBdVksR0FLQSxJQUFBdEcsRUFBQWlaLEVBQUE2QyxtQkFBQUMsRUFBQTlDLEVBQUErQyxxQkFDQSxHQUFBaGMsRUFBZSxRQUFBdm1CLEVBQUEsRUFBZ0JBLEVBQUF1bUIsRUFBQTVoQixTQUFtQjNFLEVBQzdDdW1CLEVBQUF2bUIsR0FBQWdOLE1BQUFySSxRQUErQnFULEdBQUF1TyxFQUFBdm1CLEdBQUEsUUFDcEMsR0FBQXNpQyxFQUFpQixRQUFBcDBCLEVBQUEsRUFBa0JBLEVBQUFvMEIsRUFBQTM5QixTQUF1QnVKLEVBQ3JEbzBCLEVBQUFwMEIsR0FBQWxCLE1BQUFySSxRQUFrQ3FULEdBQUFzcUIsRUFBQXAwQixHQUFBLFVBRXZDcUcsRUFBQWlXLFFBQUF2USxlQUNLdE4sRUFBQTJqQixVQUFBaGMsRUFBQUMsUUFBQXNYLFNBQUF5RSxXQUdMa1AsRUFBQUosWUFDS3BuQixHQUFBMUQsRUFBQSxVQUFBQSxFQUFBa3JCLEVBQUFKLFlBQ0xJLEVBQUE1QyxRQUNLNEMsRUFBQTVDLE9BQUE0RixTQUlMLFNBQUFDLEdBQUFudUIsRUFBQTVNLEdBQ0EsR0FBQTRNLEVBQUFvRSxNQUFpQixPQUFBaFIsSUFDakJzM0IsR0FBQTFxQixHQUNBLElBQU8sT0FBQTVNLElBQ1AsUUFBV2s0QixHQUFBdHJCLElBR1gsU0FBQW91QixHQUFBcHVCLEVBQUE1TSxHQUNBLGtCQUNBLEdBQUE0TSxFQUFBb0UsTUFBbUIsT0FBQWhSLEVBQUFJLE1BQUF3TSxFQUFBek0sV0FDbkJtM0IsR0FBQTFxQixHQUNBLElBQVMsT0FBQTVNLEVBQUFJLE1BQUF3TSxFQUFBek0sV0FDVCxRQUFhKzNCLEdBQUF0ckIsS0FLYixTQUFBcXVCLEdBQUFqN0IsR0FDQSxrQkFDQSxHQUFBc0IsS0FBQTBQLE1BQXFCLE9BQUFoUixFQUFBSSxNQUFBa0IsS0FBQW5CLFdBQ3JCbTNCLEdBQUFoMkIsTUFDQSxJQUFTLE9BQUF0QixFQUFBSSxNQUFBa0IsS0FBQW5CLFdBQ1QsUUFBYSszQixHQUFBNTJCLFFBR2IsU0FBQTQ1QixHQUFBbDdCLEdBQ0Esa0JBQ0EsSUFBQTRNLEVBQUF0TCxLQUFBc0wsR0FDQSxJQUFBQSxLQUFBb0UsTUFBMEIsT0FBQWhSLEVBQUFJLE1BQUFrQixLQUFBbkIsV0FDMUJtM0IsR0FBQTFxQixHQUNBLElBQVMsT0FBQTVNLEVBQUFJLE1BQUFrQixLQUFBbkIsV0FDVCxRQUFhKzNCLEdBQUF0ckIsS0FVYixTQUFBdXVCLEdBQUF2dUIsRUFBQWxJLEVBQUFDLEVBQUF5MkIsR0FDQSxNQUFBMTJCLElBQXFCQSxFQUFBa0ksRUFBQTNILElBQUFDLE9BQ3JCLE1BQUFQLElBQW1CQSxFQUFBaUksRUFBQTNILElBQUFDLE1BQUEwSCxFQUFBM0gsSUFBQUUsTUFDbkJpMkIsSUFBaUJBLEVBQUEsR0FFakIsSUFBQXZ1QixFQUFBRCxFQUFBQyxRQU9BLEdBTkF1dUIsR0FBQXoyQixFQUFBa0ksRUFBQThNLFNBQ0EsTUFBQTlNLEVBQUF3dUIsbUJBQUF4dUIsRUFBQXd1QixrQkFBQTMyQixLQUNLbUksRUFBQXd1QixrQkFBQTMyQixHQUVMa0ksRUFBQW9FLE1BQUF1bUIsYUFBQSxFQUVBN3lCLEdBQUFtSSxFQUFBOE0sT0FDQTNSLElBQUErRCxHQUFBYSxFQUFBM0gsSUFBQVAsR0FBQW1JLEVBQUE4TSxRQUNPMmhCLEdBQUExdUIsUUFDSixHQUFBakksR0FBQWtJLEVBQUE2TSxTQUNIMVIsSUFBQWtFLEdBQUFVLEVBQUEzSCxJQUFBTixFQUFBeTJCLEdBQUF2dUIsRUFBQTZNLFNBQ0E0aEIsR0FBQTF1QixJQUVBQyxFQUFBNk0sVUFBQTBoQixFQUNBdnVCLEVBQUE4TSxRQUFBeWhCLFFBRUcsR0FBQTEyQixHQUFBbUksRUFBQTZNLFVBQUEvVSxHQUFBa0ksRUFBQThNLE9BQ0gyaEIsR0FBQTF1QixRQUNHLEdBQUFsSSxHQUFBbUksRUFBQTZNLFNBQUEsQ0FDSCxJQUFBNmhCLEVBQUFDLEdBQUE1dUIsRUFBQWpJLElBQUF5MkIsRUFBQSxHQUNBRyxHQUNBMXVCLEVBQUFtUyxLQUFBblMsRUFBQW1TLEtBQUFqaUIsTUFBQXcrQixFQUFBditCLE9BQ0E2UCxFQUFBNk0sU0FBQTZoQixFQUFBdnZCLE1BQ0FhLEVBQUE4TSxRQUFBeWhCLEdBRUFFLEdBQUExdUIsUUFFRyxHQUFBakksR0FBQWtJLEVBQUE4TSxPQUFBLENBQ0gsSUFBQThoQixFQUFBRCxHQUFBNXVCLEVBQUFsSSxLQUFBLEdBQ0ErMkIsR0FDQTV1QixFQUFBbVMsS0FBQW5TLEVBQUFtUyxLQUFBamlCLE1BQUEsRUFBQTArQixFQUFBeitCLE9BQ0E2UCxFQUFBOE0sT0FBQThoQixFQUFBenZCLE9BRUFzdkIsR0FBQTF1QixPQUVHLENBQ0gsSUFBQTh1QixFQUFBRixHQUFBNXVCLEVBQUFsSSxLQUFBLEdBQ0FpM0IsRUFBQUgsR0FBQTV1QixFQUFBakksSUFBQXkyQixFQUFBLEdBQ0FNLEdBQUFDLEdBQ0E5dUIsRUFBQW1TLEtBQUFuUyxFQUFBbVMsS0FBQWppQixNQUFBLEVBQUEyK0IsRUFBQTErQixPQUNBaVQsT0FBQTZPLEdBQUFsUyxFQUFBOHVCLEVBQUExdkIsTUFBQTJ2QixFQUFBM3ZCLFFBQ0FpRSxPQUFBcEQsRUFBQW1TLEtBQUFqaUIsTUFBQTQrQixFQUFBMytCLFFBQ0E2UCxFQUFBOE0sUUFBQXloQixHQUVBRSxHQUFBMXVCLEdBSUEsSUFBQXVULEVBQUF0VCxFQUFBc1AsaUJBQ0FnRSxJQUNBeGIsRUFBQXdiLEVBQUFuVSxNQUNPbVUsRUFBQW5VLE9BQUFvdkIsRUFDUDEyQixFQUFBeWIsRUFBQW5VLE1BQUFtVSxFQUFBaGIsT0FDTzBILEVBQUFzUCxpQkFBQSxPQU1QLFNBQUF5ZixHQUFBaHZCLEVBQUFqSCxFQUFBeUQsR0FDQXdELEVBQUFvRSxNQUFBdW1CLGFBQUEsRUFDQSxJQUFBMXFCLEVBQUFELEVBQUFDLFFBQUFzVCxFQUFBdlQsRUFBQUMsUUFBQXNQLGlCQUlBLEdBSEFnRSxHQUFBeGEsR0FBQXdhLEVBQUFuVSxPQUFBckcsRUFBQXdhLEVBQUFuVSxNQUFBbVUsRUFBQWhiLE9BQ0swSCxFQUFBc1AsaUJBQUEsUUFFTHhXLEVBQUFrSCxFQUFBNk0sVUFBQS9ULEdBQUFrSCxFQUFBOE0sUUFBQSxDQUNBLElBQUE2QixFQUFBM08sRUFBQW1TLEtBQUE4RixHQUFBbFksRUFBQWpILElBQ0EsU0FBQTZWLEVBQUE3ZSxLQUFBLENBQ0EsSUFBQXFHLEVBQUF3WSxFQUFBa0UsVUFBQWxFLEVBQUFrRSxhQUNBLEdBQUF6ZSxFQUFBK0IsRUFBQW9HLElBQWlDcEcsRUFBQUYsS0FBQXNHLEtBSWpDLFNBQUFreUIsR0FBQTF1QixHQUNBQSxFQUFBQyxRQUFBNk0sU0FBQTlNLEVBQUFDLFFBQUE4TSxPQUFBL00sRUFBQTNILElBQUFDLE1BQ0EwSCxFQUFBQyxRQUFBbVMsUUFDQXBTLEVBQUFDLFFBQUFvYyxXQUFBLEVBR0EsU0FBQXVTLEdBQUE1dUIsRUFBQWl2QixFQUFBQyxFQUFBeDNCLEdBQ0EsSUFBQTJCLEVBQUFqSixFQUFBOG5CLEdBQUFsWSxFQUFBaXZCLEdBQUE3YyxFQUFBcFMsRUFBQUMsUUFBQW1TLEtBQ0EsSUFBQWhYLElBQUE4ekIsR0FBQWx2QixFQUFBM0gsSUFBQUMsTUFBQTBILEVBQUEzSCxJQUFBRSxLQUNLLE9BQVNuSSxRQUFBZ1AsTUFBQTh2QixHQUVkLElBREEsSUFBQS9oQyxFQUFBNlMsRUFBQUMsUUFBQTZNLFNBQ0FwaEIsRUFBQSxFQUFpQkEsRUFBQTBFLEVBQVcxRSxJQUN2QnlCLEdBQUFpbEIsRUFBQTFtQixHQUFBNk0sS0FDTCxHQUFBcEwsR0FBQThoQyxFQUFBLENBQ0EsR0FBQXYzQixFQUFBLEdBQ0EsR0FBQXRILEdBQUFnaUIsRUFBQS9oQixPQUFBLEVBQXFDLFlBQ3JDZ0osRUFBQWxNLEVBQUFpbEIsRUFBQWhpQixHQUFBbUksS0FBQTAyQixFQUNBNytCLFNBRUFpSixFQUFBbE0sRUFBQThoQyxFQUVBQSxHQUFBNTFCLEVBQWlCNjFCLEdBQUE3MUIsRUFFakIsS0FBQThGLEdBQUFhLEVBQUEzSCxJQUFBNjJCLE9BQUEsQ0FDQSxHQUFBOStCLElBQUFzSCxFQUFBLElBQUEwYSxFQUFBL2hCLE9BQUEsR0FBbUQsWUFDbkQ2K0IsR0FBQXgzQixFQUFBMGEsRUFBQWhpQixHQUFBc0gsRUFBQSxRQUFBYSxLQUNBbkksR0FBQXNILEVBRUEsT0FBVXRILFFBQUFnUCxNQUFBOHZCLEdBMEJWLFNBQUFDLEdBQUFudkIsR0FFQSxJQURBLElBQUFvUyxFQUFBcFMsRUFBQUMsUUFBQW1TLEtBQUFnZCxFQUFBLEVBQ0ExakMsRUFBQSxFQUFpQkEsRUFBQTBtQixFQUFBL2hCLE9BQWlCM0UsSUFBQSxDQUNsQyxJQUFBa2pCLEVBQUF3RCxFQUFBMW1CLEdBQ0FrakIsRUFBQXFELFFBQUFyRCxFQUFBN2UsT0FBQTZlLEVBQUFrRSxXQUFtRXNjLEVBRW5FLE9BQUFBLEVBS0EsU0FBQWxJLEdBQUFsbkIsRUFBQXF2QixHQUNBcnZCLEVBQUEzSCxJQUFBOFQsa0JBQUFuTSxFQUFBQyxRQUFBOE0sUUFDSy9NLEVBQUFrSSxNQUFBb25CLFVBQUF6NkIsSUFBQXc2QixFQUFBbmlDLEVBQUFxaUMsR0FBQXZ2QixJQUdMLFNBQUF1dkIsR0FBQXZ2QixHQUNBLElBQUEzSCxFQUFBMkgsRUFBQTNILElBQ0EsS0FBQUEsRUFBQThULG1CQUFBbk0sRUFBQUMsUUFBQThNLFFBQUEsQ0FDQSxJQUFBdGEsR0FBQSxJQUFBKzhCLEtBQUF4dkIsRUFBQWhHLFFBQUF5MUIsU0FDQTdrQixFQUFBaUIsR0FBQTdMLEVBQUEzSCxFQUFBOFQsbUJBQ0F1akIsS0FFQXIzQixFQUFBVyxLQUFBNFIsRUFBQTdSLEtBQUFqRCxLQUFBQyxJQUFBc0MsRUFBQUMsTUFBQUQsRUFBQUUsS0FBQXlILEVBQUFDLFFBQUE4TSxPQUFBLGNBQUFoVSxHQUNBLEdBQUE2UixFQUFBN1IsTUFBQWlILEVBQUFDLFFBQUE2TSxTQUFBLENBQ0EsSUFBQTZpQixFQUFBNTJCLEVBQUF3UyxPQUNBTyxFQUFBL1MsRUFBQUUsS0FBQTVJLE9BQUEyUCxFQUFBaEcsUUFBQStSLG1CQUFBOUQsR0FBQTVQLEVBQUF4TCxLQUFBK2QsRUFBQTFDLE9BQUEsS0FDQTBuQixFQUFBamxCLEdBQUEzSyxFQUFBakgsRUFBQTZSLEdBQUEsR0FDQWtCLElBQXVCbEIsRUFBQTFDLE1BQUE0RCxHQUN2Qi9TLEVBQUF3UyxPQUFBcWtCLEVBQUFya0IsT0FDQSxJQUFBc2tCLEVBQUE5MkIsRUFBQW1ULGFBQUE0akIsRUFBQUYsRUFBQXBrQixRQUNBc2tCLEVBQW1CLzJCLEVBQUFtVCxhQUFBNGpCLEVBQ25CRCxJQUF3QjkyQixFQUFBbVQsYUFBQSxNQUd4QixJQUZBLElBQUE2akIsR0FBQUosS0FBQXQvQixRQUFBMEksRUFBQXdTLE9BQUFsYixRQUNBdy9CLEdBQUFDLEtBQUFELElBQUFDLEdBQUFELEVBQUFwa0IsU0FBQXFrQixFQUFBcmtCLFNBQUFva0IsRUFBQW5rQixXQUFBb2tCLEVBQUFwa0IsV0FDQWhnQixFQUFBLEdBQXFCcWtDLEdBQUFya0MsRUFBQWlrQyxFQUFBdC9CLFNBQW1DM0UsRUFBT3FrQyxFQUFBSixFQUFBamtDLElBQUFxTixFQUFBd1MsT0FBQTdmLEdBQy9EcWtDLEdBQXFCTCxFQUFBeDVCLEtBQUEwVSxFQUFBN1IsTUFDckJBLEVBQUFpVCxXQUFBcEIsRUFBQXFCLE9BQ0FyQixFQUFBb0MsZ0JBRUFqVSxFQUFBRSxLQUFBNUksUUFBQTJQLEVBQUFoRyxRQUFBK1Isb0JBQ1NjLEdBQUE3TSxFQUFBakgsRUFBQUUsS0FBQTJSLEdBQ1Q3UixFQUFBaVQsV0FBQXBCLEVBQUE3UixLQUFBLEtBQUE2UixFQUFBcUIsT0FBQSxLQUNBckIsRUFBQW9DLFdBRUEsUUFBQXdpQixLQUFBLzhCLEVBRUEsT0FEQXkwQixHQUFBbG5CLElBQUFoRyxRQUFBZzJCLFlBQ0EsSUFHQTMzQixFQUFBOFQsa0JBQUF2QixFQUFBN1IsS0FDQVYsRUFBQStULGFBQUF0VyxLQUFBK0UsSUFBQXhDLEVBQUErVCxhQUFBeEIsRUFBQTdSLE1BQ0EyMkIsRUFBQXIvQixRQUE0Qjg5QixHQUFBbnVCLEVBQUEsV0FDNUIsUUFBQXRVLEVBQUEsRUFBbUJBLEVBQUFna0MsRUFBQXIvQixPQUF5QjNFLElBQ3JDc2pDLEdBQUFodkIsRUFBQTB2QixFQUFBaGtDLEdBQUEsV0FNUCxJQUFBNmdDLEdBQUEsU0FBQXZzQixFQUFBNGtCLEVBQUFxTCxHQUNBLElBQUFod0IsRUFBQUQsRUFBQUMsUUFFQXZMLEtBQUFrd0IsV0FFQWx3QixLQUFBdzdCLFFBQUF2TCxHQUFBMWtCLEVBQUFELEVBQUEzSCxJQUFBdXNCLEdBQ0Fsd0IsS0FBQXk3QixnQkFBQWx3QixFQUFBaVcsUUFBQXRRLFlBQ0FsUixLQUFBMDdCLGNBQUFud0IsRUFBQWlXLFFBQUF3QixhQUNBaGpCLEtBQUFpaEIsYUFBQTFWLEVBQUFpVyxRQUFBQyxZQUNBemhCLEtBQUEyN0IsZ0JBQUEvWSxHQUFBdFgsR0FDQXRMLEtBQUF1N0IsUUFDQXY3QixLQUFBbWUsS0FBQXNGLEdBQUFuWSxHQUNBdEwsS0FBQTQ3QixXQTBEQSxTQUFBN0QsR0FBQXpzQixFQUFBc29CLEdBQ0EsSUFBQXJvQixFQUFBRCxFQUFBQyxRQUFBNUgsRUFBQTJILEVBQUEzSCxJQUVBLEdBQUFpd0IsRUFBQTZILGVBRUEsT0FEQXpCLEdBQUExdUIsSUFDQSxFQUlBLElBQUFzb0IsRUFBQTJILE9BQ0EzSCxFQUFBNEgsUUFBQXA0QixNQUFBbUksRUFBQTZNLFVBQUF3YixFQUFBNEgsUUFBQW40QixJQUFBa0ksRUFBQThNLFNBQ0EsTUFBQTlNLEVBQUF3dUIsbUJBQUF4dUIsRUFBQXd1QixtQkFBQXh1QixFQUFBOE0sU0FDQTlNLEVBQUFzd0IsY0FBQXR3QixFQUFBbVMsTUFBQSxHQUFBK2MsR0FBQW52QixHQUNLLFNBRUxxbEIsR0FBQXJsQixLQUNBMHVCLEdBQUExdUIsR0FDQXNvQixFQUFBelYsS0FBQXNGLEdBQUFuWSxJQUlBLElBQUF2TixFQUFBNEYsRUFBQUMsTUFBQUQsRUFBQUUsS0FDQVQsRUFBQWhDLEtBQUErRSxJQUFBeXRCLEVBQUE0SCxRQUFBcDRCLEtBQUFrSSxFQUFBaEcsUUFBQXcyQixlQUFBbjRCLEVBQUFDLE9BQ0FQLEVBQUFqQyxLQUFBQyxJQUFBdEQsRUFBQTYxQixFQUFBNEgsUUFBQW40QixHQUFBaUksRUFBQWhHLFFBQUF3MkIsZ0JBQ0F2d0IsRUFBQTZNLFNBQUFoVixLQUFBbUksRUFBQTZNLFNBQUEsS0FBZ0VoVixFQUFBaEMsS0FBQStFLElBQUF4QyxFQUFBQyxNQUFBMkgsRUFBQTZNLFdBQ2hFN00sRUFBQThNLE9BQUFoVixHQUFBa0ksRUFBQThNLE9BQUFoVixFQUFBLEtBQXdEQSxFQUFBakMsS0FBQUMsSUFBQXRELEVBQUF3TixFQUFBOE0sU0FDeEQzUixLQUNBdEQsRUFBQXFILEdBQUFhLEVBQUEzSCxJQUFBUCxHQUNBQyxFQUFBdUgsR0FBQVUsRUFBQTNILElBQUFOLElBR0EsSUFBQTA0QixFQUFBMzRCLEdBQUFtSSxFQUFBNk0sVUFBQS9VLEdBQUFrSSxFQUFBOE0sUUFDQTlNLEVBQUF5d0IsZ0JBQUFwSSxFQUFBOEgsZUFBQW53QixFQUFBMHdCLGVBQUFySSxFQUFBM1MsY0F2TEEsU0FBQTNWLEVBQUFsSSxFQUFBQyxHQUNBLElBQUFrSSxFQUFBRCxFQUFBQyxRQUNBLEdBREFBLEVBQUFtUyxLQUNBL2hCLFFBQUF5SCxHQUFBbUksRUFBQThNLFFBQUFoVixHQUFBa0ksRUFBQTZNLFVBQ0E3TSxFQUFBbVMsS0FBQUYsR0FBQWxTLEVBQUFsSSxFQUFBQyxHQUNBa0ksRUFBQTZNLFNBQUFoVixJQUVBbUksRUFBQTZNLFNBQUFoVixFQUNPbUksRUFBQW1TLEtBQUFGLEdBQUFsUyxFQUFBbEksRUFBQW1JLEVBQUE2TSxVQUFBekosT0FBQXBELEVBQUFtUyxNQUNQblMsRUFBQTZNLFNBQUFoVixJQUNPbUksRUFBQW1TLEtBQUFuUyxFQUFBbVMsS0FBQWppQixNQUFBK25CLEdBQUFsWSxFQUFBbEksS0FDUG1JLEVBQUE2TSxTQUFBaFYsRUFDQW1JLEVBQUE4TSxPQUFBaFYsRUFDT2tJLEVBQUFtUyxLQUFBblMsRUFBQW1TLEtBQUEvTyxPQUFBNk8sR0FBQWxTLEVBQUFDLEVBQUE4TSxPQUFBaFYsSUFDUGtJLEVBQUE4TSxPQUFBaFYsSUFDT2tJLEVBQUFtUyxLQUFBblMsRUFBQW1TLEtBQUFqaUIsTUFBQSxFQUFBK25CLEdBQUFsWSxFQUFBakksTUFFUGtJLEVBQUE4TSxPQUFBaFYsRUF3S0E2NEIsQ0FBQTV3QixFQUFBbEksRUFBQUMsR0FFQWtJLEVBQUFvYyxXQUFBMWMsR0FBQXZILEdBQUE0SCxFQUFBM0gsSUFBQTRILEVBQUE2TSxXQUVBOU0sRUFBQUMsUUFBQXNXLE1BQUFybEIsTUFBQWlvQixJQUFBbFosRUFBQW9jLFdBQUEsS0FFQSxJQUFBd1UsRUFBQTFCLEdBQUFudkIsR0FDQSxJQUFBeXdCLEdBQUEsR0FBQUksSUFBQXZJLEVBQUEySCxPQUFBaHdCLEVBQUFzd0IsY0FBQXR3QixFQUFBbVMsT0FDQSxNQUFBblMsRUFBQXd1QixtQkFBQXh1QixFQUFBd3VCLG1CQUFBeHVCLEVBQUE4TSxRQUNLLFNBSUwsSUFBQStqQixFQS9FQSxTQUFBOXdCLEdBQ0EsR0FBQUEsRUFBQSt3QixXQUFzQixZQUN0QixJQUFBQyxFQUFBbi9CLElBQ0EsSUFBQW0vQixJQUFBeC9CLEVBQUF3TyxFQUFBQyxRQUFBdWtCLFFBQUF3TSxHQUF5RCxZQUN6RCxJQUFBM3FCLEdBQWdCeFUsVUFBQW0vQixHQUNoQixHQUFBMWxDLE9BQUFtYixhQUFBLENBQ0EsSUFBQThaLEVBQUFqMUIsT0FBQW1iLGVBQ0E4WixFQUFBMFEsWUFBQTFRLEVBQUEyUSxRQUFBMS9CLEVBQUF3TyxFQUFBQyxRQUFBdWtCLFFBQUFqRSxFQUFBMFEsY0FDQTVxQixFQUFBNHFCLFdBQUExUSxFQUFBMFEsV0FDQTVxQixFQUFBOHFCLGFBQUE1USxFQUFBNFEsYUFDQTlxQixFQUFBK3FCLFVBQUE3USxFQUFBNlEsVUFDQS9xQixFQUFBZ3JCLFlBQUE5USxFQUFBOFEsYUFHQSxPQUFBaHJCLEVBaUVBaXJCLENBQUF0eEIsR0F1QkEsT0F0QkE2d0IsRUFBQSxJQUFxQjV3QixFQUFBdWtCLFFBQUF0ekIsTUFBQStPLFFBQUEsUUF3RXJCLFNBQUFELEVBQUF1eEIsRUFBQTFlLEdBQ0EsSUFBQTVTLEVBQUFELEVBQUFDLFFBQUFxVSxFQUFBdFUsRUFBQWhHLFFBQUFzYSxZQUNBa2QsRUFBQXZ4QixFQUFBdWtCLFFBQUFqckIsRUFBQWk0QixFQUFBN2dDLFdBRUEsU0FBQThnQyxFQUFBMWhDLEdBQ0EsSUFBQW9aLEVBQUFwWixFQUFBZ2xCLFlBTUEsT0FKQXhtQixHQUFBVyxHQUFBOFEsRUFBQUMsUUFBQXl4QixvQkFBQTNoQyxFQUNPQSxFQUFBbUIsTUFBQStPLFFBQUEsT0FFQWxRLEVBQUE0QixXQUFBakIsWUFBQVgsR0FDUG9aLEVBTUEsSUFIQSxJQUFBaUosRUFBQW5TLEVBQUFtUyxLQUFBaFQsRUFBQWEsRUFBQTZNLFNBR0FwaEIsRUFBQSxFQUFpQkEsRUFBQTBtQixFQUFBL2hCLE9BQWlCM0UsSUFBQSxDQUNsQyxJQUFBa2pCLEVBQUF3RCxFQUFBMW1CLEdBQ0EsR0FBQWtqQixFQUFBcUQsYUFDSyxHQUFBckQsRUFBQTdlLE1BQUE2ZSxFQUFBN2UsS0FBQTRCLFlBQUE2L0IsRUFHQSxDQUNMLEtBQUFqNEIsR0FBQXFWLEVBQUE3ZSxNQUFvQ3dKLEVBQUFrNEIsRUFBQWw0QixHQUNwQyxJQUFBbzRCLEVBQUFyZCxHQUFBLE1BQUFpZCxHQUNBQSxHQUFBbnlCLEdBQUF3UCxFQUFBNkYsV0FDQTdGLEVBQUFrRSxVQUNBemUsRUFBQXVhLEVBQUFrRSxRQUFBLGVBQXVENmUsR0FBQSxHQUN2RC9lLEdBQUE1UyxFQUFBNE8sRUFBQXhQLEVBQUF5VCxJQUVBOGUsSUFDQXJoQyxFQUFBc2UsRUFBQTZGLFlBQ0E3RixFQUFBNkYsV0FBQTNqQixZQUFBekMsU0FBQWdELGVBQUEwSSxHQUFBaUcsRUFBQWhHLFFBQUFvRixNQUVBN0YsRUFBQXFWLEVBQUE3ZSxLQUFBZ2xCLGdCQWZLLENBQ0wsSUFBQWhsQixFQUFBa2xCLEdBQUFqVixFQUFBNE8sRUFBQXhQLEVBQUF5VCxHQUNBMmUsRUFBQTdkLGFBQUE1akIsRUFBQXdKLEdBZUE2RixHQUFBd1AsRUFBQXJXLEtBRUEsS0FBQWdCLEdBQWVBLEVBQUFrNEIsRUFBQWw0QixHQTlHZnE0QixDQUFBNXhCLEVBQUFDLEVBQUF3dUIsa0JBQUFuRyxFQUFBelYsTUFDQWdlLEVBQUEsSUFBcUI1d0IsRUFBQXVrQixRQUFBdHpCLE1BQUErTyxRQUFBLElBQ3JCQSxFQUFBc3dCLGFBQUF0d0IsRUFBQW1TLEtBbEVBLFNBQUF5ZixHQUNBLEdBQUFBLEtBQUFoZ0MsV0FBQWdnQyxFQUFBaGdDLGlCQUNBZ2dDLEVBQUFoZ0MsVUFBQSt4QixRQUNBaU8sRUFBQVosWUFBQXovQixFQUFBbkQsU0FBQTBELEtBQUE4L0IsRUFBQVosYUFBQXovQixFQUFBbkQsU0FBQTBELEtBQUE4L0IsRUFBQVQsWUFBQSxDQUNBLElBQUE3USxFQUFBajFCLE9BQUFtYixlQUFBRSxFQUFBdFksU0FBQWtFLGNBQ0FvVSxFQUFBaFUsT0FBQWsvQixFQUFBWixXQUFBWSxFQUFBVixjQUNBeHFCLEVBQUE1VCxVQUFBLEdBQ0F3dEIsRUFBQXVSLGtCQUNBdlIsRUFBQXdSLFNBQUFwckIsR0FDQTRaLEVBQUEyUSxPQUFBVyxFQUFBVCxVQUFBUyxFQUFBUixjQTREQVcsQ0FBQWxCLEdBSUF4Z0MsRUFBQTJQLEVBQUFzakIsV0FDQWp6QixFQUFBMlAsRUFBQWd5QixjQUNBaHlCLEVBQUEyVSxRQUFBMWpCLE1BQUFrSSxPQUFBNkcsRUFBQXFXLE1BQUFwbEIsTUFBQWszQixVQUFBLEVBRUFxSSxJQUNBeHdCLEVBQUF5d0IsZUFBQXBJLEVBQUE4SCxjQUNBbndCLEVBQUEwd0IsY0FBQXJJLEVBQUEzUyxhQUNBdVIsR0FBQWxuQixFQUFBLE1BR0FDLEVBQUF3dUIsa0JBQUEsTUFFQSxFQUdBLFNBQUF6QixHQUFBaHRCLEVBQUFzb0IsR0FHQSxJQUZBLElBQUExRCxFQUFBMEQsRUFBQTFELFNBRUF0c0IsR0FBQSxHQUNBQSxHQUFBMEgsRUFBQWhHLFFBQUE0ZSxjQUFBMFAsRUFBQStILGlCQUFBL1ksR0FBQXRYLEtBRUE0a0IsR0FBQSxNQUFBQSxFQUFBekwsTUFDU3lMLEdBQWF6TCxJQUFBcmpCLEtBQUFDLElBQUFpSyxFQUFBM0gsSUFBQWUsT0FBQXVkLEdBQUEzVyxFQUFBQyxTQUFBd1gsR0FBQXpYLEdBQUE0a0IsRUFBQXpMLE9BR3RCbVAsRUFBQTRILFFBQUF2TCxHQUFBM2tCLEVBQUFDLFFBQUFELEVBQUEzSCxJQUFBdXNCLEtBQ0EwRCxFQUFBNEgsUUFBQXA0QixNQUFBa0ksRUFBQUMsUUFBQTZNLFVBQUF3YixFQUFBNEgsUUFBQW40QixJQUFBaUksRUFBQUMsUUFBQThNLFdBR0EwZixHQUFBenNCLEVBQUFzb0IsR0FYeUJod0IsR0FBQSxHQVl6QmdzQixHQUFBdGtCLEdBQ0EsSUFBQTBzQixFQUFBakYsR0FBQXpuQixHQUNBZ2dCLEdBQUFoZ0IsR0FDQXdwQixHQUFBeHBCLEVBQUEwc0IsR0FDQUssR0FBQS9zQixFQUFBMHNCLEdBQ0FwRSxFQUFBMkgsT0FBQSxFQUdBM0gsRUFBQTVrQixPQUFBMUQsRUFBQSxTQUFBQSxHQUNBQSxFQUFBQyxRQUFBNk0sVUFBQTlNLEVBQUFDLFFBQUFpeUIsa0JBQUFseUIsRUFBQUMsUUFBQThNLFFBQUEvTSxFQUFBQyxRQUFBa3lCLGlCQUNBN0osRUFBQTVrQixPQUFBMUQsRUFBQSxpQkFBQUEsSUFBQUMsUUFBQTZNLFNBQUE5TSxFQUFBQyxRQUFBOE0sUUFDQS9NLEVBQUFDLFFBQUFpeUIsaUJBQUFseUIsRUFBQUMsUUFBQTZNLFNBQXNEOU0sRUFBQUMsUUFBQWt5QixlQUFBbnlCLEVBQUFDLFFBQUE4TSxRQUl0RCxTQUFBaWEsR0FBQWhuQixFQUFBNGtCLEdBQ0EsSUFBQTBELEVBQUEsSUFBQWlFLEdBQUF2c0IsRUFBQTRrQixHQUNBLEdBQUE2SCxHQUFBenNCLEVBQUFzb0IsR0FBQSxDQUNBaEUsR0FBQXRrQixHQUNBZ3RCLEdBQUFodEIsRUFBQXNvQixHQUNBLElBQUFvRSxFQUFBakYsR0FBQXpuQixHQUNBZ2dCLEdBQUFoZ0IsR0FDQXdwQixHQUFBeHBCLEVBQUEwc0IsR0FDQUssR0FBQS9zQixFQUFBMHNCLEdBQ0FwRSxFQUFBNEYsVUFrREEsU0FBQXhJLEdBQUExbEIsR0FDQSxJQUFBMFYsRUFBQTFWLEVBQUFDLFFBQUEyVSxRQUFBaFAsWUFDQTVGLEVBQUFDLFFBQUFxVyxNQUFBcGxCLE1BQUE2a0IsV0FBQUwsRUFBQSxLQUdBLFNBQUFxWCxHQUFBL3NCLEVBQUEwRixHQUNBMUYsRUFBQUMsUUFBQXFXLE1BQUFwbEIsTUFBQWszQixVQUFBMWlCLEVBQUFvaUIsVUFBQSxLQUNBOW5CLEVBQUFDLFFBQUE2cEIsYUFBQTU0QixNQUFBaW9CLElBQUF6VCxFQUFBb2lCLFVBQUEsS0FDQTluQixFQUFBQyxRQUFBMlUsUUFBQTFqQixNQUFBa0ksT0FBQXNNLEVBQUFvaUIsVUFBQTluQixFQUFBQyxRQUFBMFgsVUFBQVAsR0FBQXBYLEdBQUEsS0FLQSxTQUFBb3lCLEdBQUFweUIsR0FDQSxJQUFBNFUsRUFBQTVVLEVBQUFDLFFBQUEyVSxRQUFBeWQsRUFBQXJ5QixFQUFBaEcsUUFBQTRhLFFBQ0F0a0IsRUFBQXNrQixHQUVBLElBREEsSUFBQWxwQixFQUFBLEVBQ1FBLEVBQUEybUMsRUFBQWhpQyxTQUFrQjNFLEVBQUEsQ0FDMUIsSUFBQXNvQixFQUFBcWUsRUFBQTNtQyxHQUNBNG1DLEVBQUExZCxFQUFBOWpCLFlBQUFDLEVBQUEsZ0NBQUFpakIsSUFDQSwwQkFBQUEsSUFDQWhVLEVBQUFDLFFBQUFzbEIsV0FBQStNLEVBQ0FBLEVBQUFwaEMsTUFBQXdrQixPQUFBMVYsRUFBQUMsUUFBQXdsQixjQUFBLFNBR0E3USxFQUFBMWpCLE1BQUErTyxRQUFBdlUsRUFBQSxVQUNBZzZCLEdBQUExbEIsR0FLQSxTQUFBdXlCLEdBQUF2NEIsR0FDQSxJQUFBZ0QsRUFBQTNJLEVBQUEyRixFQUFBNGEsUUFBQSwyQkFDQSxHQUFBNVgsR0FBQWhELEVBQUFzYSxZQUNBdGEsRUFBQTRhLFFBQUE1YSxFQUFBNGEsUUFBQXZSLFFBQUEsMkJBQ0dyRyxHQUFBLElBQUFoRCxFQUFBc2EsY0FDSHRhLEVBQUE0YSxRQUFBNWEsRUFBQTRhLFFBQUF6a0IsTUFBQSxHQUNBNkosRUFBQTRhLFFBQUFsWCxPQUFBVixFQUFBLElBN1BBdXZCLEdBQUFqL0IsVUFBQW9XLE9BQUEsU0FBQVYsRUFBQXhHLEdBQ0E4SCxHQUFBdEIsRUFBQXhHLElBQ0s5SCxLQUFBNDdCLE9BQUFwNkIsS0FBQTNDLFlBRUxnNUIsR0FBQWovQixVQUFBNGdDLE9BQUEsV0FHQSxJQUZBLElBRUF4aUMsRUFBQSxFQUFpQkEsRUFBQWdKLEtBQUE0N0IsT0FBQWpnQyxPQUF3QjNFLElBQ3BDZ1ksR0FBQWxRLE1BQUEsS0FITGtCLEtBR0s0N0IsT0FBQTVrQyxLQW9RTCxJQUFBOG1DLEdBQUEsRUFDQUMsR0FBQSxLQVVBLFNBQUFDLEdBQUFuaUMsR0FDQSxJQUFBb2lDLEVBQUFwaUMsRUFBQXFpQyxZQUFBQyxFQUFBdGlDLEVBQUF1aUMsWUFJQSxPQUhBLE1BQUFILEdBQUFwaUMsRUFBQXdpQyxRQUFBeGlDLEVBQUFpNkIsTUFBQWo2QixFQUFBeWlDLGtCQUE4REwsRUFBQXBpQyxFQUFBd2lDLFFBQzlELE1BQUFGLEdBQUF0aUMsRUFBQXdpQyxRQUFBeGlDLEVBQUFpNkIsTUFBQWo2QixFQUFBMGlDLGNBQTRESixFQUFBdGlDLEVBQUF3aUMsT0FDNUQsTUFBQUYsSUFBd0JBLEVBQUF0aUMsRUFBQTJpQyxhQUNkejRCLEVBQUFrNEIsRUFBQW5WLEVBQUFxVixHQUVWLFNBQUFNLEdBQUE1aUMsR0FDQSxJQUFBNmlDLEVBQUFWLEdBQUFuaUMsR0FHQSxPQUZBNmlDLEVBQUEzNEIsR0FBQWc0QixHQUNBVyxFQUFBNVYsR0FBQWlWLEdBQ0FXLEVBR0EsU0FBQUMsR0FBQXJ6QixFQUFBelAsR0FDQSxJQUFBNmlDLEVBQUFWLEdBQUFuaUMsR0FBQW9pQyxFQUFBUyxFQUFBMzRCLEVBQUFvNEIsRUFBQU8sRUFBQTVWLEVBRUF2ZCxFQUFBRCxFQUFBQyxRQUFBNUssRUFBQTRLLEVBQUFzWCxTQUVBK2IsRUFBQWorQixFQUFBbXlCLFlBQUFueUIsRUFBQThnQixZQUNBb2QsRUFBQWwrQixFQUFBK3hCLGFBQUEveEIsRUFBQXFpQixhQUNBLEdBQUFpYixHQUFBVyxHQUFBVCxHQUFBVSxFQUFBLENBTUEsR0FBQVYsR0FBQTNqQyxHQUFBWCxFQUNBb0wsRUFBQSxRQUFBSixFQUFBaEosRUFBQW9ELE9BQUF5ZSxFQUFBblMsRUFBQW1TLEtBQXdEN1ksR0FBQWxFLEVBQWVrRSxJQUFBNUgsV0FDdkUsUUFBQWpHLEVBQUEsRUFBcUJBLEVBQUEwbUIsRUFBQS9oQixPQUFpQjNFLElBQ3RDLEdBQUEwbUIsRUFBQTFtQixHQUFBcUUsTUFBQXdKLEVBQUEsQ0FDQXlHLEVBQUFDLFFBQUF5eEIsbUJBQUFuNEIsRUFDQSxNQUFBSSxFQVlBLEdBQUFnNUIsSUFBQTlrQyxJQUFBYSxHQUFBLE1BQUErakMsR0FXQSxPQVZBSSxHQUFBVSxHQUNPeE0sR0FBQS9tQixFQUFBbEssS0FBQStFLElBQUEsRUFBQXhGLEVBQUEybUIsVUFBQTZXLEVBQUFKLEtBQ1BuTCxHQUFBdG5CLEVBQUFsSyxLQUFBK0UsSUFBQSxFQUFBeEYsRUFBQXVtQixXQUFBK1csRUFBQUYsT0FLQUksTUFBQVUsSUFDTzl1QixHQUFBbFUsUUFDUDBQLEVBQUFndEIsWUFBQSxNQU1BLEdBQUE0RixHQUFBLE1BQUFKLEdBQUEsQ0FDQSxJQUFBZSxFQUFBWCxFQUFBSixHQUNBdFosRUFBQW5aLEVBQUEzSCxJQUFBMmpCLFVBQUF0QixFQUFBdkIsRUFBQWxaLEVBQUFpVyxRQUFBd0IsYUFDQThiLEVBQUEsRUFBcUJyYSxFQUFBcmpCLEtBQUErRSxJQUFBLEVBQUFzZSxFQUFBcWEsRUFBQSxJQUNYOVksRUFBQTVrQixLQUFBQyxJQUFBaUssRUFBQTNILElBQUFlLE9BQUFzaEIsRUFBQThZLEVBQUEsSUFDVnhNLEdBQUFobkIsR0FBNkJtWixNQUFBRCxPQUFBd0IsSUFHN0I4WCxHQUFBLEtBQ0EsTUFBQXZ5QixFQUFBZ3RCLGFBQ0FodEIsRUFBQWd0QixZQUFBNTNCLEVBQUF1bUIsV0FBOEMzYixFQUFBaXRCLFlBQUE3M0IsRUFBQTJtQixVQUM5Qy9iLEVBQUF3ekIsUUFBQWQsRUFBMkIxeUIsRUFBQXl6QixRQUFBYixFQUMzQjc5QixXQUFBLFdBQ0EsU0FBQWlMLEVBQUFndEIsWUFBQSxDQUNBLElBQUEwRyxFQUFBdCtCLEVBQUF1bUIsV0FBQTNiLEVBQUFndEIsWUFDQTJHLEVBQUF2K0IsRUFBQTJtQixVQUFBL2IsRUFBQWl0QixZQUNBMkcsRUFBQUQsR0FBQTN6QixFQUFBeXpCLFNBQUFFLEVBQUEzekIsRUFBQXl6QixTQUNBQyxHQUFBMXpCLEVBQUF3ekIsU0FBQUUsRUFBQTF6QixFQUFBd3pCLFFBQ0F4ekIsRUFBQWd0QixZQUFBaHRCLEVBQUFpdEIsWUFBQSxLQUNBMkcsSUFDQXBCLE9BQUFELEdBQUFxQixJQUFBckIsR0FBQSxLQUNBQSxNQUNPLE9BRVB2eUIsRUFBQXd6QixTQUFBZCxFQUE0QjF5QixFQUFBeXpCLFNBQUFiLEtBekY1QjFrQyxFQUFTc2tDLElBQUEsSUFDVDVrQyxFQUFpQjRrQyxHQUFBLEdBQ2pCaGtDLEVBQWtCZ2tDLElBQUEsR0FDbEI5akMsSUFBa0I4akMsSUFBQSxLQWdHbEIsSUFBQXFCLEdBQUEsU0FBQXRULEVBQUFDLEdBQ0EvckIsS0FBQThyQixTQUNBOXJCLEtBQUErckIsYUFHQXFULEdBQUF4bUMsVUFBQTZ5QixRQUFBLFdBQTJDLE9BQUF6ckIsS0FBQThyQixPQUFBOXJCLEtBQUErckIsWUFFM0NxVCxHQUFBeG1DLFVBQUF5bUMsT0FBQSxTQUFBN1csR0FHQSxHQUFBQSxHQUFBeG9CLEtBQXNCLFNBQ3RCLEdBQUF3b0IsRUFBQXVELFdBQUEvckIsS0FBQStyQixXQUFBdkQsRUFBQXNELE9BQUFud0IsUUFBQXFFLEtBQUE4ckIsT0FBQW53QixPQUF1RixTQUN2RixRQUFBM0UsRUFBQSxFQUFpQkEsRUFBQWdKLEtBQUE4ckIsT0FBQW53QixPQUF3QjNFLElBQUEsQ0FDekMsSUFBQXNvQyxFQUxBdC9CLEtBS0E4ckIsT0FBQTkwQixHQUFBdW9DLEVBQUEvVyxFQUFBc0QsT0FBQTkwQixHQUNBLElBQUE2TyxHQUFBeTVCLEVBQUFsVixPQUFBbVYsRUFBQW5WLFVBQUF2a0IsR0FBQXk1QixFQUFBblQsS0FBQW9ULEVBQUFwVCxNQUErRixTQUUvRixVQUdBaVQsR0FBQXhtQyxVQUFBNG1DLFNBQUEsV0FJQSxJQUhBLElBRUE1OUIsS0FDQTVLLEVBQUEsRUFBaUJBLEVBQUFnSixLQUFBOHJCLE9BQUFud0IsT0FBd0IzRSxJQUNwQzRLLEVBQUE1SyxHQUFBLElBQUF5b0MsR0FBQTM1QixHQUpMOUYsS0FJSzhyQixPQUFBOTBCLEdBQUFvekIsUUFBQXRrQixHQUpMOUYsS0FJSzhyQixPQUFBOTBCLEdBQUFtMUIsT0FDTCxXQUFBaVQsR0FBQXg5QixFQUFBNUIsS0FBQStyQixZQUdBcVQsR0FBQXhtQyxVQUFBOG1DLGtCQUFBLFdBR0EsSUFGQSxJQUVBMW9DLEVBQUEsRUFBaUJBLEVBQUFnSixLQUFBOHJCLE9BQUFud0IsT0FBd0IzRSxJQUNwQyxJQUhMZ0osS0FHSzhyQixPQUFBOTBCLEdBQUFnMUIsUUFBaUMsU0FDdEMsVUFHQW9ULEdBQUF4bUMsVUFBQWtFLFNBQUEsU0FBQW1FLEVBQUFsRCxHQUdBQSxJQUFhQSxFQUFBa0QsR0FDYixRQUFBakssRUFBQSxFQUFpQkEsRUFBQWdKLEtBQUE4ckIsT0FBQW53QixPQUF3QjNFLElBQUEsQ0FDekMsSUFBQW1FLEVBSkE2RSxLQUlBOHJCLE9BQUE5MEIsR0FDQSxHQUFBNE8sR0FBQTdILEVBQUE1QyxFQUFBaUksU0FBQSxHQUFBd0MsR0FBQTNFLEVBQUE5RixFQUFBa0ksT0FBQSxFQUNPLE9BQUFyTSxFQUVQLFVBR0EsSUFBQXlvQyxHQUFBLFNBQUFyVixFQUFBK0IsR0FDQW5zQixLQUFBb3FCLFNBQXVCcHFCLEtBQUFtc0IsUUFVdkIsU0FBQXdULEdBQUE3VCxFQUFBQyxHQUNBLElBQUE2VCxFQUFBOVQsRUFBQUMsR0FDQUQsRUFBQStULEtBQUEsU0FBQXBpQyxFQUFBQyxHQUErQixPQUFBa0ksR0FBQW5JLEVBQUEyRixPQUFBMUYsRUFBQTBGLFVBQy9CMm9CLEVBQUFwc0IsRUFBQW1zQixFQUFBOFQsR0FDQSxRQUFBNW9DLEVBQUEsRUFBaUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDcEMsSUFBQTZOLEVBQUFpbkIsRUFBQTkwQixHQUFBNlYsRUFBQWlmLEVBQUE5MEIsRUFBQSxHQUNBLEdBQUE0TyxHQUFBaUgsRUFBQXhKLEtBQUF3QixFQUFBekIsU0FBQSxHQUNBLElBQUFBLEVBQUE2QyxHQUFBNEcsRUFBQXpKLE9BQUF5QixFQUFBekIsUUFBQUMsRUFBQTJDLEdBQUE2RyxFQUFBeEosS0FBQXdCLEVBQUF4QixNQUNBeThCLEVBQUFqekIsRUFBQW1mLFFBQUFubkIsRUFBQXpCLFFBQUF5QixFQUFBc25CLEtBQUF0ZixFQUFBekosUUFBQXlKLEVBQUFzZixLQUNBbjFCLEdBQUErMEIsS0FBMkJBLEVBQzNCRCxFQUFBOWlCLFNBQUFoUyxFQUFBLE1BQUF5b0MsR0FBQUssRUFBQXo4QixFQUFBRCxFQUFBMDhCLEVBQUExOEIsRUFBQUMsS0FHQSxXQUFBKzdCLEdBQUF0VCxFQUFBQyxHQUdBLFNBQUFnVSxHQUFBM1YsRUFBQStCLEdBQ0EsV0FBQWlULElBQUEsSUFBQUssR0FBQXJWLEVBQUErQixHQUFBL0IsSUFBQSxHQUtBLFNBQUE0VixHQUFBOTRCLEdBQ0EsT0FBQUEsRUFBQTNDLEtBQ0FtQixHQUFBd0IsRUFBQTlELEtBQUFpQixLQUFBNkMsRUFBQTNDLEtBQUE1SSxPQUFBLEVBQ0E4RixFQUFBeUYsRUFBQTNDLE1BQUE1SSxRQUFBLEdBQUF1TCxFQUFBM0MsS0FBQTVJLE9BQUF1TCxFQUFBOUQsS0FBQWhCLEdBQUEsSUFGcUI4RSxFQUFBN0QsR0FPckIsU0FBQTQ4QixHQUFBaC9CLEVBQUFpRyxHQUNBLEdBQUF0QixHQUFBM0UsRUFBQWlHLEVBQUE5RCxNQUFBLEVBQWtDLE9BQUFuQyxFQUNsQyxHQUFBMkUsR0FBQTNFLEVBQUFpRyxFQUFBN0QsS0FBQSxFQUFpQyxPQUFBMjhCLEdBQUE5NEIsR0FFakMsSUFBQTdDLEVBQUFwRCxFQUFBb0QsS0FBQTZDLEVBQUEzQyxLQUFBNUksUUFBQXVMLEVBQUE3RCxHQUFBZ0IsS0FBQTZDLEVBQUE5RCxLQUFBaUIsTUFBQSxFQUFBakMsRUFBQW5CLEVBQUFtQixHQUVBLE9BREFuQixFQUFBb0QsTUFBQTZDLEVBQUE3RCxHQUFBZ0IsT0FBbUNqQyxHQUFBNDlCLEdBQUE5NEIsR0FBQTlFLEdBQUE4RSxFQUFBN0QsR0FBQWpCLElBQ25Dc0QsR0FBQXJCLEVBQUFqQyxHQUdBLFNBQUE4OUIsR0FBQXY4QixFQUFBdUQsR0FFQSxJQURBLElBQUF0RixLQUNBNUssRUFBQSxFQUFpQkEsRUFBQTJNLEVBQUFrb0IsSUFBQUMsT0FBQW53QixPQUEyQjNFLElBQUEsQ0FDNUMsSUFBQW1FLEVBQUF3SSxFQUFBa29CLElBQUFDLE9BQUE5MEIsR0FDQTRLLEVBQUFKLEtBQUEsSUFBQWkrQixHQUFBUSxHQUFBOWtDLEVBQUFpdkIsT0FBQWxqQixHQUNBKzRCLEdBQUE5a0MsRUFBQWd4QixLQUFBamxCLEtBRUEsT0FBQXk0QixHQUFBLzlCLEVBQUErQixFQUFBa29CLElBQUFFLFdBR0EsU0FBQW9VLEdBQUFsL0IsRUFBQXlHLEVBQUFDLEdBQ0EsT0FBQTFHLEVBQUFvRCxNQUFBcUQsRUFBQXJELEtBQ0txQixHQUFBaUMsRUFBQXRELEtBQUFwRCxFQUFBbUIsR0FBQXNGLEVBQUF0RixHQUFBdUYsRUFBQXZGLElBRUFzRCxHQUFBaUMsRUFBQXRELE1BQUFwRCxFQUFBb0QsS0FBQXFELEVBQUFyRCxNQUFBcEQsRUFBQW1CLElBMEJMLFNBQUFnK0IsR0FBQTkwQixHQUNBQSxFQUFBM0gsSUFBQXhMLEtBQUEwYSxHQUFBdkgsRUFBQWhHLFFBQUFnRyxFQUFBM0gsSUFBQTA4QixZQUNBQyxHQUFBaDFCLEdBR0EsU0FBQWcxQixHQUFBaDFCLEdBQ0FBLEVBQUEzSCxJQUFBVyxLQUFBLFNBQUFELEdBQ0FBLEVBQUFpVCxhQUEwQmpULEVBQUFpVCxXQUFBLE1BQzFCalQsRUFBQXdTLFNBQXNCeFMsRUFBQXdTLE9BQUEsUUFFdEJ2TCxFQUFBM0gsSUFBQStULGFBQUFwTSxFQUFBM0gsSUFBQThULGtCQUFBbk0sRUFBQTNILElBQUFDLE1BQ0E0dUIsR0FBQWxuQixFQUFBLEtBQ0FBLEVBQUFrSSxNQUFBNkMsVUFDQS9LLEVBQUFvRSxPQUFpQm1xQixHQUFBdnVCLEdBUWpCLFNBQUFpMUIsR0FBQTU4QixFQUFBdUQsR0FDQSxVQUFBQSxFQUFBOUQsS0FBQWhCLElBQUEsR0FBQThFLEVBQUE3RCxHQUFBakIsSUFBQSxJQUFBWCxFQUFBeUYsRUFBQTNDLFNBQ0FaLEVBQUEySCxJQUFBM0gsRUFBQTJILEdBQUFoRyxRQUFBazdCLHVCQUlBLFNBQUFDLEdBQUE5OEIsRUFBQXVELEVBQUFHLEVBQUFxNUIsR0FDQSxTQUFBQyxFQUFBbG9DLEdBQXdCLE9BQUE0TyxJQUFBNU8sR0FBQSxLQUN4QixTQUFBbTdCLEVBQUF2dkIsRUFBQUUsRUFBQXVDLElBL3pGQSxTQUFBekMsRUFBQUUsRUFBQThDLEVBQUFzUyxHQUNBdFYsRUFBQUUsT0FDQUYsRUFBQWlULGFBQXdCalQsRUFBQWlULFdBQUEsTUFDeEJqVCxFQUFBd1MsU0FBb0J4UyxFQUFBd1MsT0FBQSxNQUNwQixNQUFBeFMsRUFBQXdILFFBQTJCeEgsRUFBQXdILE1BQUEsTUFDM0I1QyxHQUFBNUUsR0FDQThFLEdBQUE5RSxFQUFBZ0QsR0FDQSxJQUFBd2pCLEVBQUFsUixJQUFBdFYsR0FBQSxFQUNBd21CLEdBQUF4bUIsRUFBQUssUUFBaUNELEdBQUFKLEVBQUF3bUIsR0F3ekZqQytWLENBQUF2OEIsRUFBQUUsRUFBQXVDLEVBQUE0NUIsR0FDQTdpQixHQUFBeFosRUFBQSxTQUFBQSxFQUFBNkMsR0FFQSxTQUFBMjVCLEVBQUEvaUMsRUFBQUMsR0FFQSxJQURBLElBQUE0VCxLQUNBM2EsRUFBQThHLEVBQXVCOUcsRUFBQStHLElBQVMvRyxFQUN6QjJhLEVBQUFuUSxLQUFBLElBQUFrWSxHQUFBblYsRUFBQXZOLEdBQUEycEMsRUFBQTNwQyxHQUFBMHBDLElBQ1AsT0FBQS91QixFQUdBLElBQUF2TyxFQUFBOEQsRUFBQTlELEtBQUFDLEVBQUE2RCxFQUFBN0QsR0FBQWtCLEVBQUEyQyxFQUFBM0MsS0FDQXU4QixFQUFBcDlCLEdBQUFDLEVBQUFQLEVBQUFpQixNQUFBd0csRUFBQW5ILEdBQUFDLEVBQUFOLEVBQUFnQixNQUNBMDhCLEVBQUF0L0IsRUFBQThDLEdBQUF5OEIsRUFBQUwsRUFBQXA4QixFQUFBNUksT0FBQSxHQUFBc2xDLEVBQUE1OUIsRUFBQWdCLEtBQUFqQixFQUFBaUIsS0FHQSxHQUFBNkMsRUFBQUMsS0FDQXhELEVBQUF1OUIsT0FBQSxFQUFBTCxFQUFBLEVBQUF0OEIsRUFBQTVJLFNBQ0FnSSxFQUFBdzlCLE9BQUE1OEIsRUFBQTVJLE9BQUFnSSxFQUFBRSxLQUFBVSxFQUFBNUksYUFDRyxHQUFBNGtDLEdBQUE1OEIsRUFBQXVELEdBQUEsQ0FHSCxJQUFBazZCLEVBQUFQLEVBQUEsRUFBQXQ4QixFQUFBNUksT0FBQSxHQUNBaTRCLEVBQUEvb0IsSUFBQXRHLEtBQUF5OEIsR0FDQUMsR0FBaUJ0OUIsRUFBQXc5QixPQUFBLzlCLEVBQUFpQixLQUFBNDhCLEdBQ2pCRyxFQUFBemxDLFFBQXVCZ0ksRUFBQXU5QixPQUFBOTlCLEVBQUFpQixLQUFBKzhCLFFBQ3BCLEdBQUFOLEdBQUFqMkIsRUFDSCxNQUFBdEcsRUFBQTVJLE9BQ0FpNEIsRUFBQWtOLElBQUF2OEIsS0FBQTlJLE1BQUEsRUFBQTJILEVBQUFoQixJQUFBMitCLEVBQUFELEVBQUF2OEIsS0FBQTlJLE1BQUE0SCxFQUFBakIsSUFBQTQrQixPQUNLLENBQ0wsSUFBQUssRUFBQVIsRUFBQSxFQUFBdDhCLEVBQUE1SSxPQUFBLEdBQ0EwbEMsRUFBQTcvQixLQUFBLElBQUFrWSxHQUFBcW5CLEVBQUFELEVBQUF2OEIsS0FBQTlJLE1BQUE0SCxFQUFBakIsSUFBQTQrQixFQUFBTixJQUNBOU0sRUFBQWtOLElBQUF2OEIsS0FBQTlJLE1BQUEsRUFBQTJILEVBQUFoQixJQUFBbUMsRUFBQSxHQUFBbzhCLEVBQUEsSUFDQWg5QixFQUFBdTlCLE9BQUE5OUIsRUFBQWlCLEtBQUEsRUFBQWc5QixRQUVHLE1BQUE5OEIsRUFBQTVJLE9BQ0hpNEIsRUFBQWtOLElBQUF2OEIsS0FBQTlJLE1BQUEsRUFBQTJILEVBQUFoQixJQUFBbUMsRUFBQSxHQUFBc0csRUFBQXRHLEtBQUE5SSxNQUFBNEgsRUFBQWpCLElBQUF1K0IsRUFBQSxJQUNBaDlCLEVBQUF3OUIsT0FBQS85QixFQUFBaUIsS0FBQSxFQUFBNDhCLE9BQ0csQ0FDSHJOLEVBQUFrTixJQUFBdjhCLEtBQUE5SSxNQUFBLEVBQUEySCxFQUFBaEIsSUFBQW1DLEVBQUEsR0FBQW84QixFQUFBLElBQ0EvTSxFQUFBL29CLEVBQUFrMkIsRUFBQWwyQixFQUFBdEcsS0FBQTlJLE1BQUE0SCxFQUFBakIsSUFBQTQrQixHQUNBLElBQUFNLEVBQUFULEVBQUEsRUFBQXQ4QixFQUFBNUksT0FBQSxHQUNBc2xDLEVBQUEsR0FBcUJ0OUIsRUFBQXc5QixPQUFBLzlCLEVBQUFpQixLQUFBLEVBQUE0OEIsRUFBQSxHQUNyQnQ5QixFQUFBdTlCLE9BQUE5OUIsRUFBQWlCLEtBQUEsRUFBQWk5QixHQUdBempCLEdBQUFsYSxFQUFBLFNBQUFBLEVBQUF1RCxHQUlBLFNBQUFxNkIsR0FBQTU5QixFQUFBakYsRUFBQThpQyxJQUNBLFNBQUFDLEVBQUE5OUIsRUFBQSs5QixFQUFBQyxHQUNBLEdBQUFoK0IsRUFBQWkrQixPQUFxQixRQUFBNXFDLEVBQUEsRUFBZ0JBLEVBQUEyTSxFQUFBaStCLE9BQUFqbUMsU0FBdUIzRSxFQUFBLENBQzVELElBQUE2cUMsRUFBQWwrQixFQUFBaStCLE9BQUE1cUMsR0FDQSxHQUFBNnFDLEVBQUFsK0IsS0FBQSs5QixFQUFBLENBQ0EsSUFBQUksRUFBQUgsR0FBQUUsRUFBQUYsV0FDQUgsSUFBQU0sSUFDQXBqQyxFQUFBbWpDLEVBQUFsK0IsSUFBQW0rQixHQUNBTCxFQUFBSSxFQUFBbCtCLE1BQUFtK0IsTUFHQUwsQ0FBQTk5QixFQUFBLFNBSUEsU0FBQW8rQixHQUFBejJCLEVBQUEzSCxHQUNBLEdBQUFBLEVBQUEySCxHQUFlLFVBQUF4SCxNQUFBLG9DQUNmd0gsRUFBQTNILE1BQ0FBLEVBQUEySCxLQUNBcWYsR0FBQXJmLEdBQ0E4MEIsR0FBQTkwQixHQUNBMDJCLEdBQUExMkIsR0FDQUEsRUFBQWhHLFFBQUE0ZSxjQUFpQzdZLEdBQUFDLEdBQ2pDQSxFQUFBaEcsUUFBQW5OLEtBQUF3TCxFQUFBMDhCLFdBQ0F4RyxHQUFBdnVCLEdBR0EsU0FBQTAyQixHQUFBMTJCLElBQ0EsT0FBQUEsRUFBQTNILElBQUErSSxVQUFBblAsRUFBQW5DLEdBQUFrUSxFQUFBQyxRQUFBdWtCLFFBQUEsa0JBVUEsU0FBQW1TLEdBQUFDLEdBSUFsaUMsS0FBQW1pQyxRQUFpQm5pQyxLQUFBb2lDLFVBQ2pCcGlDLEtBQUFxaUMsVUFBQXJsQixJQUdBaGQsS0FBQXNpQyxZQUFBdGlDLEtBQUF1aUMsWUFBQSxFQUNBdmlDLEtBQUF3aUMsT0FBQXhpQyxLQUFBeWlDLFVBQUEsS0FDQXppQyxLQUFBMGlDLFdBQUExaUMsS0FBQTJpQyxjQUFBLEtBRUEzaUMsS0FBQTRpQyxXQUFBNWlDLEtBQUE2aUMsY0FBQVgsR0FBQSxFQUtBLFNBQUFZLEdBQUFuL0IsRUFBQXVELEdBQ0EsSUFBQTY3QixHQUFvQjMvQixLQUFBMEMsR0FBQW9CLEVBQUE5RCxNQUFBQyxHQUFBMjhCLEdBQUE5NEIsR0FBQTNDLEtBQUFILEdBQUFULEVBQUF1RCxFQUFBOUQsS0FBQThELEVBQUE3RCxLQUdwQixPQUZBMi9CLEdBQUFyL0IsRUFBQW8vQixFQUFBNzdCLEVBQUE5RCxLQUFBaUIsS0FBQTZDLEVBQUE3RCxHQUFBZ0IsS0FBQSxHQUNBazlCLEdBQUE1OUIsRUFBQSxTQUFBQSxHQUFrQyxPQUFBcS9CLEdBQUFyL0IsRUFBQW8vQixFQUFBNzdCLEVBQUE5RCxLQUFBaUIsS0FBQTZDLEVBQUE3RCxHQUFBZ0IsS0FBQSxLQUFrRixHQUNwSDArQixFQUtBLFNBQUFFLEdBQUEvaUMsR0FDQSxLQUFBQSxFQUFBdkUsUUFBQSxDQUNBLElBQUEwSyxFQUFBNUUsRUFBQXZCLEdBQ0EsSUFBQW1HLEVBQUF5bEIsT0FDVSxNQURZNXJCLEVBQUFnakMsT0FzQnRCLFNBQUFDLEdBQUF4L0IsRUFBQXVELEVBQUFrOEIsRUFBQUMsR0FDQSxJQUFBQyxFQUFBMy9CLEVBQUE0L0IsUUFDQUQsRUFBQWxCLE9BQUF6bUMsT0FBQSxFQUNBLElBQUFrSixFQUNBd0IsRUFEQXMwQixHQUFBLElBQUFHLEtBR0EsSUFBQXdJLEVBQUFkLFFBQUFhLEdBQ0FDLEVBQUFaLFlBQUF4N0IsRUFBQXJHLFFBQUFxRyxFQUFBckcsU0FDQSxLQUFBcUcsRUFBQXJHLE9BQUFvQyxPQUFBLElBQUFxZ0MsRUFBQWhCLFlBQUEzSCxHQUFBaDNCLEVBQUEySCxHQUFBM0gsRUFBQTJILEdBQUFoRyxRQUFBaytCLGtCQUFBLE1BQ0EsS0FBQXQ4QixFQUFBckcsT0FBQW9DLE9BQUEsT0FDQTRCLEVBekJBLFNBQUF5K0IsRUFBQS9ILEdBQ0EsT0FBQUEsR0FDQTBILEdBQUFLLEVBQUFuQixNQUNBMWdDLEVBQUE2aEMsRUFBQW5CLE9BQ0dtQixFQUFBbkIsS0FBQXhtQyxTQUFBOEYsRUFBQTZoQyxFQUFBbkIsTUFBQXJXLE9BQ0hycUIsRUFBQTZoQyxFQUFBbkIsTUFDR21CLEVBQUFuQixLQUFBeG1DLE9BQUEsSUFBQTJuQyxFQUFBbkIsS0FBQW1CLEVBQUFuQixLQUFBeG1DLE9BQUEsR0FBQW13QixRQUNId1gsRUFBQW5CLEtBQUFlLE1BQ0F6aEMsRUFBQTZoQyxFQUFBbkIsWUFGRyxFQW1CSHNCLENBQUFILElBQUFkLFFBQUFhLElBRUFoOUIsRUFBQTVFLEVBQUFvRCxFQUFBdVosU0FDQSxHQUFBeFksR0FBQXNCLEVBQUE5RCxLQUFBOEQsRUFBQTdELEtBQUEsR0FBQXVDLEdBQUFzQixFQUFBOUQsS0FBQWlELEVBQUFoRCxJQUdBZ0QsRUFBQWhELEdBQUEyOEIsR0FBQTk0QixHQUdBckMsRUFBQXVaLFFBQUE1YyxLQUFBc2hDLEdBQUFuL0IsRUFBQXVELFFBRUcsQ0FFSCxJQUFBd0csRUFBQWpNLEVBQUE2aEMsRUFBQW5CLE1BTUEsSUFMQXowQixLQUFBb2UsUUFDTzRYLEdBQUEvL0IsRUFBQWtvQixJQUFBeVgsRUFBQW5CLE1BQ1B0OUIsR0FBV3VaLFNBQUEwa0IsR0FBQW4vQixFQUFBdUQsSUFDWDA3QixXQUFBVSxFQUFBVixZQUNBVSxFQUFBbkIsS0FBQTNnQyxLQUFBcUQsR0FDQXkrQixFQUFBbkIsS0FBQXhtQyxPQUFBMm5DLEVBQUFqQixXQUNBaUIsRUFBQW5CLEtBQUF4UyxRQUNBMlQsRUFBQW5CLEtBQUEsR0FBQXJXLFFBQWlDd1gsRUFBQW5CLEtBQUF4UyxRQUdqQzJULEVBQUFuQixLQUFBM2dDLEtBQUE0aEMsR0FDQUUsRUFBQVYsYUFBQVUsRUFBQVQsY0FDQVMsRUFBQWhCLFlBQUFnQixFQUFBZixZQUFBNUgsRUFDQTJJLEVBQUFkLE9BQUFjLEVBQUFiLFVBQUFZLEVBQ0FDLEVBQUFaLFdBQUFZLEVBQUFYLGNBQUF6N0IsRUFBQXJHLE9BRUF3RixHQUFjMkksR0FBQXJMLEVBQUEsZ0JBZ0JkLFNBQUFnZ0MsR0FBQWhnQyxFQUFBa29CLEVBQUF3WCxFQUFBLzlCLEdBQ0EsSUFBQWcrQixFQUFBMy9CLEVBQUE0L0IsUUFBQTFpQyxFQUFBeUUsS0FBQXpFLE9BTUF3aUMsR0FBQUMsRUFBQWIsV0FDQTVoQyxHQUFBeWlDLEVBQUFYLGVBQUE5aEMsSUFDQXlpQyxFQUFBaEIsYUFBQWdCLEVBQUFmLGFBQUFlLEVBQUFaLFlBQUE3aEMsR0F0QkEsU0FBQThDLEVBQUE5QyxFQUFBZ00sRUFBQWdmLEdBQ0EsSUFBQXpwQixFQUFBdkIsRUFBQW9DLE9BQUEsR0FDQSxXQUFBYixHQUNBLEtBQUFBLEdBQ0F5SyxFQUFBaWYsT0FBQW53QixRQUFBa3dCLEVBQUFDLE9BQUFud0IsUUFDQWtSLEVBQUE2eUIscUJBQUE3VCxFQUFBNlQscUJBQ0EsSUFBQTVFLEtBQUFuM0IsRUFBQTQvQixRQUFBaEIsY0FBQTUrQixFQUFBMkgsR0FBQTNILEVBQUEySCxHQUFBaEcsUUFBQWsrQixrQkFBQSxLQWlCQUksQ0FBQWpnQyxFQUFBOUMsRUFBQVksRUFBQTZoQyxFQUFBbkIsTUFBQXRXLElBQ0t5WCxFQUFBbkIsS0FBQW1CLEVBQUFuQixLQUFBeG1DLE9BQUEsR0FBQWt3QixFQUVBNlgsR0FBQTdYLEVBQUF5WCxFQUFBbkIsTUFFTG1CLEVBQUFmLGFBQUEsSUFBQXpILEtBQ0F3SSxFQUFBWCxjQUFBOWhDLEVBQ0F5aUMsRUFBQWIsVUFBQVksRUFDQS85QixJQUFBLElBQUFBLEVBQUF1K0IsV0FDS1osR0FBQUssRUFBQWxCLFFBR0wsU0FBQXNCLEdBQUE3WCxFQUFBaVksR0FDQSxJQUFBcmYsRUFBQWhqQixFQUFBcWlDLEdBQ0FyZixLQUFBcUgsUUFBQXJILEVBQUE0YSxPQUFBeFQsSUFDS2lZLEVBQUF0aUMsS0FBQXFxQixHQUlMLFNBQUFtWCxHQUFBci9CLEVBQUF1RCxFQUFBOUQsRUFBQUMsR0FDQSxJQUFBMGdDLEVBQUE3OEIsRUFBQSxTQUFBdkQsRUFBQTFELElBQUF4SCxFQUFBLEVBQ0FrTCxFQUFBVyxLQUFBbEQsS0FBQStFLElBQUF4QyxFQUFBQyxNQUFBUixHQUFBaEMsS0FBQUMsSUFBQXNDLEVBQUFDLE1BQUFELEVBQUFFLEtBQUFSLEdBQUEsU0FBQWdCLEdBQ0FBLEVBQUFnRCxlQUNPMDhCLE1BQUE3OEIsRUFBQSxTQUFBdkQsRUFBQTFELFNBQXdEeEgsR0FBQTRMLEVBQUFnRCxlQUMvRDVPLElBTUEsU0FBQXVyQyxHQUFBbDlCLEdBQ0EsSUFBQUEsRUFBZSxZQUVmLElBREEsSUFBQWxGLEVBQ0E1SyxFQUFBLEVBQWlCQSxFQUFBOFAsRUFBQW5MLFNBQWtCM0UsRUFDbkM4UCxFQUFBOVAsR0FBQTRQLE9BQUFxOUIsa0JBQTRDcmlDLElBQVlBLEVBQUFrRixFQUFBckwsTUFBQSxFQUFBekUsSUFDeEQ0SyxHQUFtQkEsRUFBQUosS0FBQXNGLEVBQUE5UCxJQUVuQixPQUFBNEssSUFBQWpHLE9BQUFpRyxFQUFBLEtBQUFrRixFQWlCQSxTQUFBbzlCLEdBQUF2Z0MsRUFBQXVELEdBQ0EsSUFBQVEsRUFkQSxTQUFBL0QsRUFBQXVELEdBQ0EsSUFBQW9CLEVBQUFwQixFQUFBLFNBQUF2RCxFQUFBMUQsSUFDQSxJQUFBcUksRUFBZSxZQUVmLElBREEsSUFBQVgsS0FDQTNRLEVBQUEsRUFBaUJBLEVBQUFrUSxFQUFBM0MsS0FBQTVJLFNBQXdCM0UsRUFDcEMyUSxFQUFBbkcsS0FBQXdpQyxHQUFBMTdCLEVBQUF0UixLQUNMLE9BQUEyUSxFQVFBdzhCLENBQUF4Z0MsRUFBQXVELEdBQ0FrOUIsRUFBQW45QixHQUFBdEQsRUFBQXVELEdBQ0EsSUFBQVEsRUFBYSxPQUFBMDhCLEVBQ2IsSUFBQUEsRUFBbUIsT0FBQTE4QixFQUVuQixRQUFBMVEsRUFBQSxFQUFpQkEsRUFBQTBRLEVBQUEvTCxTQUFnQjNFLEVBQUEsQ0FDakMsSUFBQXF0QyxFQUFBMzhCLEVBQUExUSxHQUFBc3RDLEVBQUFGLEVBQUFwdEMsR0FDQSxHQUFBcXRDLEdBQUFDLEVBQ0F4OUIsRUFBQSxRQUFBc0csRUFBQSxFQUE0QkEsRUFBQWszQixFQUFBM29DLFNBQXVCeVIsRUFBQSxDQUVuRCxJQURBLElBQUFyRyxFQUFBdTlCLEVBQUFsM0IsR0FDQTZTLEVBQUEsRUFBdUJBLEVBQUFva0IsRUFBQTFvQyxTQUFtQnNrQixFQUMvQixHQUFBb2tCLEVBQUFwa0IsR0FBQXJaLFFBQUFHLEVBQUFILE9BQXVDLFNBQUFFLEVBQ2xEdTlCLEVBQUE3aUMsS0FBQXVGLFFBRUt1OUIsSUFDTDU4QixFQUFBMVEsR0FBQXN0QyxHQUdBLE9BQUE1OEIsRUFLQSxTQUFBNjhCLEdBQUEzSSxFQUFBNEksRUFBQUMsR0FFQSxJQURBLElBQUE1ckIsS0FDQTdoQixFQUFBLEVBQWlCQSxFQUFBNGtDLEVBQUFqZ0MsU0FBbUIzRSxFQUFBLENBQ3BDLElBQUEwdEMsRUFBQTlJLEVBQUE1a0MsR0FDQSxHQUFBMHRDLEVBQUE1WSxPQUNBalQsRUFBQXJYLEtBQUFpakMsRUFBQXJGLEdBQUF4bUMsVUFBQTRtQyxTQUFBcm9DLEtBQUF1dEMsVUFEQSxDQUlBLElBQUF0bUIsRUFBQXNtQixFQUFBdG1CLFFBQUF1bUIsS0FDQTlyQixFQUFBclgsTUFBZTRjLFFBQUF1bUIsSUFDZixRQUFBdjNCLEVBQUEsRUFBbUJBLEVBQUFnUixFQUFBemlCLFNBQW9CeVIsRUFBQSxDQUN2QyxJQUFBbEcsRUFBQWtYLEVBQUFoUixHQUFBaFcsT0FBQSxFQUVBLEdBREF1dEMsRUFBQW5qQyxNQUF1QjRCLEtBQUE4RCxFQUFBOUQsS0FBQUMsR0FBQTZELEVBQUE3RCxHQUFBa0IsS0FBQTJDLEVBQUEzQyxPQUN2QmlnQyxFQUFxQixRQUFBcmxDLEtBQUErSCxHQUEyQjlQLEVBQUErSCxFQUFBdkUsTUFBQSxtQkFDaEQrRSxFQUFBNmtDLEVBQUEzcEMsT0FBQXpELEVBQUEsVUFDQXFLLEVBQUFrakMsR0FBQXhsQyxHQUFBK0gsRUFBQS9ILFVBQ0ErSCxFQUFBL0gsTUFLQSxPQUFBMFosRUFXQSxTQUFBK3JCLEdBQUF6cEMsRUFBQWd4QixFQUFBM0QsRUFBQWdVLEdBQ0EsR0FBQUEsRUFBQSxDQUNBLElBQUFwUyxFQUFBanZCLEVBQUFpdkIsT0FDQSxHQUFBNUIsRUFBQSxDQUNBLElBQUFxYyxFQUFBai9CLEdBQUF1bUIsRUFBQS9CLEdBQUEsRUFDQXlhLEdBQUFqL0IsR0FBQTRpQixFQUFBNEIsR0FBQSxHQUNBQSxFQUFBK0IsRUFDQUEsRUFBQTNELEdBQ09xYyxHQUFBai9CLEdBQUF1bUIsRUFBQTNELEdBQUEsSUFDUDJELEVBQUEzRCxHQUdBLFdBQUFpWCxHQUFBclYsRUFBQStCLEdBRUEsV0FBQXNULEdBQUFqWCxHQUFBMkQsS0FLQSxTQUFBMlksR0FBQW5oQyxFQUFBd29CLEVBQUEzRCxFQUFBbGpCLEVBQUFrM0IsR0FDQSxNQUFBQSxJQUF1QkEsRUFBQTc0QixFQUFBMkgsS0FBQTNILEVBQUEySCxHQUFBQyxRQUFBb2tCLE9BQUFoc0IsRUFBQTY0QixTQUN2QnVJLEdBQUFwaEMsRUFBQSxJQUFBeTdCLElBQUF3RixHQUFBamhDLEVBQUFrb0IsSUFBQUosVUFBQVUsRUFBQTNELEVBQUFnVSxJQUFBLEdBQUFsM0IsR0FLQSxTQUFBMC9CLEdBQUFyaEMsRUFBQXNoQyxFQUFBMy9CLEdBR0EsSUFGQSxJQUFBMUQsS0FDQTQ2QixFQUFBNzRCLEVBQUEySCxLQUFBM0gsRUFBQTJILEdBQUFDLFFBQUFva0IsT0FBQWhzQixFQUFBNjRCLFFBQ0F4bEMsRUFBQSxFQUFpQkEsRUFBQTJNLEVBQUFrb0IsSUFBQUMsT0FBQW53QixPQUEyQjNFLElBQ3ZDNEssRUFBQTVLLEdBQUE0dEMsR0FBQWpoQyxFQUFBa29CLElBQUFDLE9BQUE5MEIsR0FBQWl1QyxFQUFBanVDLEdBQUEsS0FBQXdsQyxHQUNMLElBQUEwSSxFQUFBdkYsR0FBQS85QixFQUFBK0IsRUFBQWtvQixJQUFBRSxXQUNBZ1osR0FBQXBoQyxFQUFBdWhDLEVBQUE1L0IsR0FJQSxTQUFBNi9CLEdBQUF4aEMsRUFBQTNNLEVBQUFtRSxFQUFBbUssR0FDQSxJQUFBd21CLEVBQUFub0IsRUFBQWtvQixJQUFBQyxPQUFBcndCLE1BQUEsR0FDQXF3QixFQUFBOTBCLEdBQUFtRSxFQUNBNHBDLEdBQUFwaEMsRUFBQWc4QixHQUFBN1QsRUFBQW5vQixFQUFBa29CLElBQUFFLFdBQUF6bUIsR0FJQSxTQUFBOC9CLEdBQUF6aEMsRUFBQXltQixFQUFBK0IsRUFBQTdtQixHQUNBeS9CLEdBQUFwaEMsRUFBQW84QixHQUFBM1YsRUFBQStCLEdBQUE3bUIsR0F3QkEsU0FBQSsvQixHQUFBMWhDLEVBQUFrb0IsRUFBQXZtQixHQUNBLElBQUE2OEIsRUFBQXgrQixFQUFBNC9CLFFBQUFwQixLQUFBOTdCLEVBQUE1RSxFQUFBMGdDLEdBQ0E5N0IsS0FBQXlsQixRQUNBcVcsSUFBQXhtQyxPQUFBLEdBQUFrd0IsRUFDQXlaLEdBQUEzaEMsRUFBQWtvQixFQUFBdm1CLElBRUF5L0IsR0FBQXBoQyxFQUFBa29CLEVBQUF2bUIsR0FLQSxTQUFBeS9CLEdBQUFwaEMsRUFBQWtvQixFQUFBdm1CLEdBQ0FnZ0MsR0FBQTNoQyxFQUFBa29CLEVBQUF2bUIsR0FDQXErQixHQUFBaGdDLElBQUFrb0IsSUFBQWxvQixFQUFBMkgsR0FBQTNILEVBQUEySCxHQUFBb0UsTUFBQXpQLEdBQUFzbEMsSUFBQWpnQyxHQUdBLFNBQUFnZ0MsR0FBQTNoQyxFQUFBa29CLEVBQUF2bUIsSUFDQXNLLEdBQUFqTSxFQUFBLDBCQUFBQSxFQUFBMkgsSUFBQXNFLEdBQUFqTSxFQUFBMkgsR0FBQSw0QkFDS3VnQixFQXJDTCxTQUFBbG9CLEVBQUFrb0IsRUFBQXZtQixHQUNBLElBQUF0RyxHQUNBOHNCLE9BQUFELEVBQUFDLE9BQ0E4SCxPQUFBLFNBQUE5SCxHQUdBOXJCLEtBQUE4ckIsVUFDQSxRQUFBOTBCLEVBQUEsRUFBcUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBSHhDZ0osS0FJUzhyQixPQUFBOTBCLEdBQUEsSUFBQXlvQyxHQUFBcjVCLEdBQUF6QyxFQUFBbW9CLEVBQUE5MEIsR0FBQW96QixRQUNUaGtCLEdBQUF6QyxFQUFBbW9CLEVBQUE5MEIsR0FBQW0xQixRQUVBdHJCLE9BQUF5RSxLQUFBekUsUUFJQSxPQUZBbU8sR0FBQXJMLEVBQUEsd0JBQUFBLEVBQUEzRSxHQUNBMkUsRUFBQTJILElBQWUwRCxHQUFBckwsRUFBQTJILEdBQUEsd0JBQUEzSCxFQUFBMkgsR0FBQXRNLEdBQ2ZBLEVBQUE4c0IsUUFBQUQsRUFBQUMsT0FBaUM2VCxHQUFBM2dDLEVBQUE4c0IsT0FBQTlzQixFQUFBOHNCLE9BQUFud0IsT0FBQSxHQUN6Qmt3QixFQXFCSDJaLENBQUE3aEMsRUFBQWtvQixFQUFBdm1CLElBRUwsSUFBQThkLEVBQUE5ZCxLQUFBOGQsT0FDQXhkLEdBQUFpbUIsRUFBQUosVUFBQVUsS0FBQXhvQixFQUFBa29CLElBQUFKLFVBQUFVLE1BQUEsUUFDQXNaLEdBQUE5aEMsRUFBQStoQyxHQUFBL2hDLEVBQUFrb0IsRUFBQXpJLEdBQUEsSUFFQTlkLElBQUEsSUFBQUEsRUFBQTNFLFNBQUFnRCxFQUFBMkgsSUFDS3VtQixHQUFBbHVCLEVBQUEySCxJQUdMLFNBQUFtNkIsR0FBQTloQyxFQUFBa29CLEdBQ0FBLEVBQUF3VCxPQUFBMTdCLEVBQUFrb0IsT0FFQWxvQixFQUFBa29CLE1BRUFsb0IsRUFBQTJILEtBQ0EzSCxFQUFBMkgsR0FBQW9FLE1BQUF3bUIsWUFBQXZ5QixFQUFBMkgsR0FBQW9FLE1BQUE0bUIsa0JBQUEsRUFDQTltQixHQUFBN0wsRUFBQTJILEtBRUF1UyxHQUFBbGEsRUFBQSxpQkFBQUEsSUFLQSxTQUFBZ2lDLEdBQUFoaUMsR0FDQThoQyxHQUFBOWhDLEVBQUEraEMsR0FBQS9oQyxJQUFBa29CLElBQUEsVUFLQSxTQUFBNlosR0FBQS9oQyxFQUFBa29CLEVBQUF6SSxFQUFBd2lCLEdBRUEsSUFEQSxJQUFBaGtDLEVBQ0E1SyxFQUFBLEVBQWlCQSxFQUFBNjBCLEVBQUFDLE9BQUFud0IsT0FBdUIzRSxJQUFBLENBQ3hDLElBQUFtRSxFQUFBMHdCLEVBQUFDLE9BQUE5MEIsR0FDQTBRLEVBQUFta0IsRUFBQUMsT0FBQW53QixRQUFBZ0ksRUFBQWtvQixJQUFBQyxPQUFBbndCLFFBQUFnSSxFQUFBa29CLElBQUFDLE9BQUE5MEIsR0FDQTZ1QyxFQUFBQyxHQUFBbmlDLEVBQUF4SSxFQUFBaXZCLE9BQUExaUIsS0FBQTBpQixPQUFBaEgsRUFBQXdpQixHQUNBRyxFQUFBRCxHQUFBbmlDLEVBQUF4SSxFQUFBZ3hCLEtBQUF6a0IsS0FBQXlrQixLQUFBL0ksRUFBQXdpQixJQUNBaGtDLEdBQUFpa0MsR0FBQTFxQyxFQUFBaXZCLFFBQUEyYixHQUFBNXFDLEVBQUFneEIsUUFDQXZxQixJQUFpQkEsRUFBQWlxQixFQUFBQyxPQUFBcndCLE1BQUEsRUFBQXpFLElBQ2pCNEssRUFBQTVLLEdBQUEsSUFBQXlvQyxHQUFBb0csRUFBQUUsSUFHQSxPQUFBbmtDLEVBQUErOUIsR0FBQS85QixFQUFBaXFCLEVBQUFFLFdBQUFGLEVBR0EsU0FBQW1hLEdBQUFyaUMsRUFBQTFDLEVBQUFnbEMsRUFBQWpqQyxFQUFBNGlDLEdBQ0EsSUFBQXZoQyxFQUFBWCxHQUFBQyxFQUFBMUMsRUFBQW9ELE1BQ0EsR0FBQUEsRUFBQWdELFlBQXlCLFFBQUFyUSxFQUFBLEVBQWdCQSxFQUFBcU4sRUFBQWdELFlBQUExTCxTQUE2QjNFLEVBQUEsQ0FDdEUsSUFBQWdULEVBQUEzRixFQUFBZ0QsWUFBQXJRLEdBQUFJLEVBQUE0UyxFQUFBcEQsT0FDQSxVQUFBb0QsRUFBQTVHLE9BQUFoTSxFQUFBeVEsY0FBQW1DLEVBQUE1RyxNQUFBbkMsRUFBQW1CLEdBQUE0SCxFQUFBNUcsS0FBQW5DLEVBQUFtQixPQUNBLE1BQUE0SCxFQUFBM0csS0FBQWpNLEVBQUE2USxlQUFBK0IsRUFBQTNHLElBQUFwQyxFQUFBbUIsR0FBQTRILEVBQUEzRyxHQUFBcEMsRUFBQW1CLEtBQUEsQ0FDQSxHQUFBd2pDLElBQ0E1MkIsR0FBQTVYLEVBQUEscUJBQ0FBLEVBQUE2c0MsbUJBQUEsQ0FDQSxHQUFBNS9CLEVBQUFnRCxZQUNBLEdBQWdCclEsRUFBSSxTQURjLE1BSWxDLElBQUFJLEVBQUE4dUMsT0FBc0IsU0FFdEIsR0FBQUQsRUFBQSxDQUNBLElBQUFFLEVBQUEvdUMsRUFBQXNTLEtBQUExRyxFQUFBLFFBQUEyQixPQUFBLEVBR0EsSUFGQTNCLEVBQUEsRUFBQTVMLEVBQUE2USxlQUFBN1EsRUFBQXlRLGlCQUNXcytCLEVBQUFDLEdBQUF6aUMsRUFBQXdpQyxHQUFBbmpDLEVBQUFtakMsS0FBQTloQyxNQUFBcEQsRUFBQW9ELE9BQUEsT0FDWDhoQyxLQUFBOWhDLE1BQUFwRCxFQUFBb0QsT0FBQU0sRUFBQWlCLEdBQUF1Z0MsRUFBQUYsTUFBQWpqQyxFQUFBLEVBQUEyQixFQUFBLEVBQUFBLEVBQUEsR0FDVyxPQUFBcWhDLEdBQUFyaUMsRUFBQXdpQyxFQUFBbGxDLEVBQUErQixFQUFBNGlDLEdBR1gsSUFBQVMsRUFBQWp2QyxFQUFBc1MsS0FBQTFHLEVBQUEsUUFHQSxPQUZBQSxFQUFBLEVBQUE1TCxFQUFBeVEsY0FBQXpRLEVBQUE2USxrQkFDU28rQixFQUFBRCxHQUFBemlDLEVBQUEwaUMsRUFBQXJqQyxFQUFBcWpDLEVBQUFoaUMsTUFBQXBELEVBQUFvRCxPQUFBLE9BQ1RnaUMsRUFBQUwsR0FBQXJpQyxFQUFBMGlDLEVBQUFwbEMsRUFBQStCLEVBQUE0aUMsR0FBQSxNQUdBLE9BQUEza0MsRUFJQSxTQUFBNmtDLEdBQUFuaUMsRUFBQTFDLEVBQUFnbEMsRUFBQTdpQixFQUFBd2lCLEdBQ0EsSUFBQTVpQyxFQUFBb2dCLEdBQUEsRUFDQTlhLEVBQUEwOUIsR0FBQXJpQyxFQUFBMUMsRUFBQWdsQyxFQUFBampDLEVBQUE0aUMsS0FDQUEsR0FBQUksR0FBQXJpQyxFQUFBMUMsRUFBQWdsQyxFQUFBampDLEdBQUEsSUFDQWdqQyxHQUFBcmlDLEVBQUExQyxFQUFBZ2xDLEdBQUFqakMsRUFBQTRpQyxLQUNBQSxHQUFBSSxHQUFBcmlDLEVBQUExQyxFQUFBZ2xDLEdBQUFqakMsR0FBQSxHQUNBLE9BQUFzRixJQUNBM0UsRUFBQTJpQyxVQUFBLEVBQ0E1Z0MsR0FBQS9CLEVBQUFDLE1BQUEsSUFLQSxTQUFBd2lDLEdBQUF6aUMsRUFBQTFDLEVBQUErQixFQUFBcUIsR0FDQSxPQUFBckIsRUFBQSxNQUFBL0IsRUFBQW1CLEdBQ0FuQixFQUFBb0QsS0FBQVYsRUFBQUMsTUFBK0J3QyxHQUFBekMsRUFBQStCLEdBQUF6RSxFQUFBb0QsS0FBQSxJQUNyQixLQUNQckIsRUFBQSxHQUFBL0IsRUFBQW1CLEtBQUFpQyxHQUFBWCxHQUFBQyxFQUFBMUMsRUFBQW9ELE9BQUFFLEtBQUE1SSxPQUNIc0YsRUFBQW9ELEtBQUFWLEVBQUFDLE1BQUFELEVBQUFFLEtBQUEsRUFBOEM2QixHQUFBekUsRUFBQW9ELEtBQUEsS0FDcEMsS0FFVixJQUFBcUIsR0FBQXpFLEVBQUFvRCxLQUFBcEQsRUFBQW1CLEdBQUFZLEdBSUEsU0FBQXVqQyxHQUFBajdCLEdBQ0FBLEVBQUF5NUIsYUFBQXIvQixHQUFBNEYsRUFBQXcxQixZQUFBLEdBQUFwN0IsR0FBQTRGLEVBQUFULFlBQUFuSyxHQU1BLFNBQUE4bEMsR0FBQTdpQyxFQUFBdUQsRUFBQTBzQixHQUNBLElBQUE1MEIsR0FDQXluQyxVQUFBLEVBQ0FyakMsS0FBQThELEVBQUE5RCxLQUNBQyxHQUFBNkQsRUFBQTdELEdBQ0FrQixLQUFBMkMsRUFBQTNDLEtBQ0ExRCxPQUFBcUcsRUFBQXJHLE9BQ0E2bEMsT0FBQSxXQUF5QixPQUFBMW5DLEVBQUF5bkMsVUFBQSxJQVd6QixPQVRBN1MsSUFBZTUwQixFQUFBNDBCLE9BQUEsU0FBQXh3QixFQUFBQyxFQUFBa0IsRUFBQTFELEdBQ2Z1QyxJQUFlcEUsRUFBQW9FLEtBQUFnRCxHQUFBekMsRUFBQVAsSUFDZkMsSUFBYXJFLEVBQUFxRSxHQUFBK0MsR0FBQXpDLEVBQUFOLElBQ2JrQixJQUFldkYsRUFBQXVGLGFBQ2ZpUSxJQUFBM1QsSUFBK0I3QixFQUFBNkIsWUFFL0JtTyxHQUFBckwsRUFBQSxlQUFBQSxFQUFBM0UsR0FDQTJFLEVBQUEySCxJQUFlMEQsR0FBQXJMLEVBQUEySCxHQUFBLGVBQUEzSCxFQUFBMkgsR0FBQXRNLEdBRWZBLEVBQUF5bkMsU0FBcUIsTUFDWHJqQyxLQUFBcEUsRUFBQW9FLEtBQUFDLEdBQUFyRSxFQUFBcUUsR0FBQWtCLEtBQUF2RixFQUFBdUYsS0FBQTFELE9BQUE3QixFQUFBNkIsUUFLVixTQUFBOGxDLEdBQUFoakMsRUFBQXVELEVBQUEwL0IsR0FDQSxHQUFBampDLEVBQUEySCxHQUFBLENBQ0EsSUFBQTNILEVBQUEySCxHQUFBb0UsTUFBd0IsT0FBQWdxQixHQUFBLzFCLEVBQUEySCxHQUFBcTdCLEdBQUFqTixDQUFBLzFCLEVBQUF1RCxFQUFBMC9CLEdBQ3hCLEdBQUFqakMsRUFBQTJILEdBQUFrSSxNQUFBcXpCLGNBQXFDLE9BR3JDLEtBQUFqM0IsR0FBQWpNLEVBQUEsaUJBQUFBLEVBQUEySCxJQUFBc0UsR0FBQWpNLEVBQUEySCxHQUFBLG1CQUNBcEUsRUFBQXMvQixHQUFBN2lDLEVBQUF1RCxHQUFBLElBREEsQ0FPQSxJQUFBdEosRUFBQTZJLEtBQUFtZ0MsR0ExN0lBLFNBQUFqakMsRUFBQVAsRUFBQUMsR0FDQSxJQUFBcWMsRUFBQSxLQVFBLEdBUEEvYixFQUFBVyxLQUFBbEIsRUFBQWlCLEtBQUFoQixFQUFBZ0IsS0FBQSxXQUFBQSxHQUNBLEdBQUFBLEVBQUFnRCxZQUEyQixRQUFBclEsRUFBQSxFQUFnQkEsRUFBQXFOLEVBQUFnRCxZQUFBMUwsU0FBNkIzRSxFQUFBLENBQ3hFLElBQUE4dkMsRUFBQXppQyxFQUFBZ0QsWUFBQXJRLEdBQUE0UCxRQUNBa2dDLEVBQUF2WCxVQUFBN1AsSUFBQSxHQUFBL2YsRUFBQStmLEVBQUFvbkIsS0FDU3BuQixXQUFBbGUsS0FBQXNsQyxPQUdUcG5CLEVBQWlCLFlBRWpCLElBREEsSUFBQXFuQixJQUFnQjNqQyxPQUFBQyxPQUNoQnJNLEVBQUEsRUFBaUJBLEVBQUEwb0IsRUFBQS9qQixTQUFvQjNFLEVBRXJDLElBREEsSUFBQWd3QyxFQUFBdG5CLEVBQUExb0IsR0FBQUksRUFBQTR2QyxFQUFBdDlCLEtBQUEsR0FDQTBELEVBQUEsRUFBbUJBLEVBQUEyNUIsRUFBQXByQyxTQUFrQnlSLEVBQUEsQ0FDckMsSUFBQXRVLEVBQUFpdUMsRUFBQTM1QixHQUNBLEtBQUF4SCxHQUFBOU0sRUFBQXVLLEdBQUFqTSxFQUFBZ00sTUFBQSxHQUFBd0MsR0FBQTlNLEVBQUFzSyxLQUFBaE0sRUFBQWlNLElBQUEsSUFDQSxJQUFBNGpDLEdBQUE3NUIsRUFBQSxHQUFBODVCLEVBQUF0aEMsR0FBQTlNLEVBQUFzSyxLQUFBaE0sRUFBQWdNLE1BQUErakMsRUFBQXZoQyxHQUFBOU0sRUFBQXVLLEdBQUFqTSxFQUFBaU0sS0FDQTZqQyxFQUFBLElBQUFGLEVBQUFuL0IsZ0JBQUFxL0IsSUFDU0QsRUFBQXpsQyxNQUFnQjRCLEtBQUF0SyxFQUFBc0ssS0FBQUMsR0FBQWpNLEVBQUFnTSxRQUN6QitqQyxFQUFBLElBQUFILEVBQUEvK0IsaUJBQUFrL0IsSUFDU0YsRUFBQXpsQyxNQUFnQjRCLEtBQUFoTSxFQUFBaU0sTUFBQXZLLEVBQUF1SyxLQUN6QjBqQyxFQUFBLzlCLE9BQUFsSyxNQUFBaW9DLEVBQUFFLEdBQ0E3NUIsR0FBQTY1QixFQUFBdHJDLE9BQUEsR0FHQSxPQUFBb3JDLEVBaTZJQUssQ0FBQXpqQyxFQUFBdUQsRUFBQTlELEtBQUE4RCxFQUFBN0QsSUFDQSxHQUFBekYsRUFDQSxRQUFBNUcsRUFBQTRHLEVBQUFqQyxPQUFBLEVBQWtDM0UsR0FBQSxJQUFRQSxFQUNuQ3F3QyxHQUFBMWpDLEdBQXVCUCxLQUFBeEYsRUFBQTVHLEdBQUFvTSxLQUFBQyxHQUFBekYsRUFBQTVHLEdBQUFxTSxHQUFBa0IsS0FBQXZOLEdBQUEsSUFBQWtRLEVBQUEzQyxLQUFBMUQsT0FBQXFHLEVBQUFyRyxjQUU5QndtQyxHQUFBMWpDLEVBQUF1RCxJQUlBLFNBQUFtZ0MsR0FBQTFqQyxFQUFBdUQsR0FDQSxNQUFBQSxFQUFBM0MsS0FBQTVJLFFBQUEsSUFBQXVMLEVBQUEzQyxLQUFBLE9BQUFxQixHQUFBc0IsRUFBQTlELEtBQUE4RCxFQUFBN0QsSUFBQSxDQUNBLElBQUErL0IsRUFBQWxELEdBQUF2OEIsRUFBQXVELEdBQ0FpOEIsR0FBQXgvQixFQUFBdUQsRUFBQWs4QixFQUFBei9CLEVBQUEySCxHQUFBM0gsRUFBQTJILEdBQUFvRSxNQUFBelAsR0FBQXNsQyxLQUVBK0IsR0FBQTNqQyxFQUFBdUQsRUFBQWs4QixFQUFBbjhCLEdBQUF0RCxFQUFBdUQsSUFDQSxJQUFBcWdDLEtBRUFoRyxHQUFBNTlCLEVBQUEsU0FBQUEsRUFBQWcrQixHQUNBQSxJQUFBLEdBQUFoaUMsRUFBQTRuQyxFQUFBNWpDLEVBQUE0L0IsV0FDQWlFLEdBQUE3akMsRUFBQTQvQixRQUFBcjhCLEdBQ0FxZ0MsRUFBQS9sQyxLQUFBbUMsRUFBQTQvQixVQUVBK0QsR0FBQTNqQyxFQUFBdUQsRUFBQSxLQUFBRCxHQUFBdEQsRUFBQXVELE9BS0EsU0FBQXVnQyxHQUFBOWpDLEVBQUFtRSxFQUFBNC9CLEdBQ0EsSUFBQUMsRUFBQWhrQyxFQUFBMkgsSUFBQTNILEVBQUEySCxHQUFBa0ksTUFBQXF6QixjQUNBLElBQUFjLEdBQUFELEVBQUEsQ0FRQSxJQU5BLElBQUFoRCxFQUFBcEIsRUFBQTMvQixFQUFBNC9CLFFBQUFILEVBQUF6L0IsRUFBQWtvQixJQUNBcHBCLEVBQUEsUUFBQXFGLEVBQUF3N0IsRUFBQW5CLEtBQUFtQixFQUFBbEIsT0FBQTBCLEVBQUEsUUFBQWg4QixFQUFBdzdCLEVBQUFsQixPQUFBa0IsRUFBQW5CLEtBSUFuckMsRUFBQSxFQUNRQSxFQUFBeUwsRUFBQTlHLFNBQ1Irb0MsRUFBQWppQyxFQUFBekwsR0FDQTB3QyxHQUFBaEQsRUFBQTVZLFFBQUE0WSxFQUFBckYsT0FBQTE3QixFQUFBa29CLEtBQUE2WSxFQUFBNVksUUFGMkI5MEIsS0FLM0IsR0FBQUEsR0FBQXlMLEVBQUE5RyxPQUFBLENBR0EsSUFGQTJuQyxFQUFBWixXQUFBWSxFQUFBWCxjQUFBLE9BRVMsQ0FFVCxLQURBK0IsRUFBQWppQyxFQUFBeWdDLE9BQ0FwWCxPQU9LLElBQUE2YixFQUVMLFlBREFsbEMsRUFBQWpCLEtBQUFrakMsR0FFWSxNQVJaLEdBREFoQixHQUFBZ0IsRUFBQVosR0FDQTRELElBQUFoRCxFQUFBckYsT0FBQTE3QixFQUFBa29CLEtBRUEsWUFEQWtaLEdBQUFwaEMsRUFBQStnQyxHQUFrQ2IsV0FBQSxJQUdsQ1QsRUFBQXNCLEVBU0EsSUFBQWtELEtBQ0FsRSxHQUFBTixFQUFBVSxHQUNBQSxFQUFBdGlDLE1BQWE0YyxRQUFBd3BCLEVBQUFoRixXQUFBVSxFQUFBVixhQUNiVSxFQUFBVixXQUFBOEIsRUFBQTlCLGNBQUFVLEVBQUFULGNBNkJBLElBM0JBLElBQUFnRixFQUFBajRCLEdBQUFqTSxFQUFBLGlCQUFBQSxFQUFBMkgsSUFBQXNFLEdBQUFqTSxFQUFBMkgsR0FBQSxnQkFFQWtMLEVBQUEsU0FBQXhmLEdBQ0EsSUFBQWtRLEVBQUF3OUIsRUFBQXRtQixRQUFBcG5CLEdBRUEsR0FEQWtRLEVBQUFyRyxPQUFBaUgsRUFDQSsvQixJQUFBckIsR0FBQTdpQyxFQUFBdUQsR0FBQSxHQUVBLE9BREF6RSxFQUFBOUcsT0FBQSxLQUlBaXNDLEVBQUFwbUMsS0FBQXNoQyxHQUFBbi9CLEVBQUF1RCxJQUVBLElBQUExTCxFQUFBeEUsRUFBQWtwQyxHQUFBdjhCLEVBQUF1RCxHQUFBekYsRUFBQWdCLEdBQ0E2a0MsR0FBQTNqQyxFQUFBdUQsRUFBQTFMLEVBQUEwb0MsR0FBQXZnQyxFQUFBdUQsS0FDQWxRLEdBQUEyTSxFQUFBMkgsSUFBdUIzSCxFQUFBMkgsR0FBQTZ0QixnQkFBd0IvMUIsS0FBQThELEVBQUE5RCxLQUFBQyxHQUFBMjhCLEdBQUE5NEIsS0FDL0MsSUFBQXFnQyxLQUdBaEcsR0FBQTU5QixFQUFBLFNBQUFBLEVBQUFnK0IsR0FDQUEsSUFBQSxHQUFBaGlDLEVBQUE0bkMsRUFBQTVqQyxFQUFBNC9CLFdBQ0FpRSxHQUFBN2pDLEVBQUE0L0IsUUFBQXI4QixHQUNBcWdDLEVBQUEvbEMsS0FBQW1DLEVBQUE0L0IsVUFFQStELEdBQUEzakMsRUFBQXVELEVBQUEsS0FBQWc5QixHQUFBdmdDLEVBQUF1RCxPQUlBaEMsRUFBQXcvQixFQUFBdG1CLFFBQUF6aUIsT0FBQSxFQUEwQ3VKLEdBQUEsSUFBVUEsRUFBQSxDQUNwRCxJQUFBNGlDLEVBQUF0eEIsRUFBQXRSLEdBRUEsR0FBQTRpQyxFQUFBLE9BQUFBLEVBQUFDLEtBTUEsU0FBQUMsR0FBQXJrQyxFQUFBc2tDLEdBQ0EsTUFBQUEsSUFDQXRrQyxFQUFBQyxPQUFBcWtDLEVBQ0F0a0MsRUFBQWtvQixJQUFBLElBQUF1VCxHQUFBejlCLEVBQUFnQyxFQUFBa29CLElBQUFDLE9BQUEsU0FBQTN3QixHQUFnRSxXQUFBc2tDLEdBQ2hFLzVCLEdBQUF2SyxFQUFBaXZCLE9BQUEvbEIsS0FBQTRqQyxFQUFBOXNDLEVBQUFpdkIsT0FBQWhvQixJQUNBc0QsR0FBQXZLLEVBQUFneEIsS0FBQTluQixLQUFBNGpDLEVBQUE5c0MsRUFBQWd4QixLQUFBL3BCLE9BQ011QixFQUFBa29CLElBQUFFLFdBQ05wb0IsRUFBQTJILElBQUEsQ0FDQXV1QixHQUFBbDJCLEVBQUEySCxHQUFBM0gsRUFBQUMsTUFBQUQsRUFBQUMsTUFBQXFrQyxLQUNBLFFBQUEzd0MsRUFBQXFNLEVBQUEySCxHQUFBQyxRQUFBdFUsRUFBQUssRUFBQThnQixTQUFnRG5oQixFQUFBSyxFQUFBK2dCLE9BQWNwaEIsSUFDdkRxakMsR0FBQTMyQixFQUFBMkgsR0FBQXJVLEVBQUEsV0FNUCxTQUFBcXdDLEdBQUEzakMsRUFBQXVELEVBQUFrOEIsRUFBQXQ4QixHQUNBLEdBQUFuRCxFQUFBMkgsS0FBQTNILEVBQUEySCxHQUFBb0UsTUFDSyxPQUFBZ3FCLEdBQUEvMUIsRUFBQTJILEdBQUFnOEIsR0FBQTVOLENBQUEvMUIsRUFBQXVELEVBQUFrOEIsRUFBQXQ4QixHQUVMLEdBQUFJLEVBQUE3RCxHQUFBZ0IsS0FBQVYsRUFBQUMsTUFDQW9rQyxHQUFBcmtDLEVBQUF1RCxFQUFBM0MsS0FBQTVJLE9BQUEsR0FBQXVMLEVBQUE3RCxHQUFBZ0IsS0FBQTZDLEVBQUE5RCxLQUFBaUIsWUFHQSxLQUFBNkMsRUFBQTlELEtBQUFpQixLQUFBVixFQUFBa0gsWUFBQSxDQUdBLEdBQUEzRCxFQUFBOUQsS0FBQWlCLEtBQUFWLEVBQUFDLE1BQUEsQ0FDQSxJQUFBK3JCLEVBQUF6b0IsRUFBQTNDLEtBQUE1SSxPQUFBLEdBQUFnSSxFQUFBQyxNQUFBc0QsRUFBQTlELEtBQUFpQixNQUNBMmpDLEdBQUFya0MsRUFBQWdzQixHQUNBem9CLEdBQWM5RCxLQUFBc0MsR0FBQS9CLEVBQUFDLE1BQUEsR0FBQVAsR0FBQXFDLEdBQUF3QixFQUFBN0QsR0FBQWdCLEtBQUFzckIsRUFBQXpvQixFQUFBN0QsR0FBQWpCLElBQ2RtQyxNQUFBOUMsRUFBQXlGLEVBQUEzQyxPQUFBMUQsT0FBQXFHLEVBQUFyRyxRQUVBLElBQUF3RixFQUFBMUMsRUFBQWtILFdBQ0EzRCxFQUFBN0QsR0FBQWdCLEtBQUFnQyxJQUNBYSxHQUFjOUQsS0FBQThELEVBQUE5RCxLQUFBQyxHQUFBcUMsR0FBQVcsRUFBQTNDLEdBQUFDLEVBQUEwQyxHQUFBOUIsS0FBQTVJLFFBQ2Q0SSxNQUFBMkMsRUFBQTNDLEtBQUEsSUFBQTFELE9BQUFxRyxFQUFBckcsU0FHQXFHLEVBQUFnaEMsUUFBQTlqQyxHQUFBVCxFQUFBdUQsRUFBQTlELEtBQUE4RCxFQUFBN0QsSUFFQSsvQixJQUFrQkEsRUFBQWxELEdBQUF2OEIsRUFBQXVELElBQ2xCdkQsRUFBQTJILEdBT0EsU0FBQUEsRUFBQXBFLEVBQUFKLEdBQ0EsSUFBQW5ELEVBQUEySCxFQUFBM0gsSUFBQTRILEVBQUFELEVBQUFDLFFBQUFuSSxFQUFBOEQsRUFBQTlELEtBQUFDLEVBQUE2RCxFQUFBN0QsR0FFQThrQyxHQUFBLEVBQUFDLEVBQUFobEMsRUFBQWlCLEtBQ0FpSCxFQUFBaEcsUUFBQTRlLGVBQ0Fra0IsRUFBQXhqQyxHQUFBMkYsR0FBQTdHLEdBQUFDLEVBQUFQLEVBQUFpQixRQUNBVixFQUFBVyxLQUFBOGpDLEVBQUEva0MsRUFBQWdCLEtBQUEsV0FBQUEsR0FDQSxHQUFBQSxHQUFBa0gsRUFBQUMsUUFFQSxPQURBMjhCLEdBQUEsR0FDQSxLQUtBeGtDLEVBQUFrb0IsSUFBQS91QixTQUFBb0ssRUFBQTlELEtBQUE4RCxFQUFBN0QsS0FBQSxHQUNLbU0sR0FBQWxFLEdBRUxtMUIsR0FBQTk4QixFQUFBdUQsRUFBQUosRUFBQTZTLEdBQUFyTyxJQUVBQSxFQUFBaEcsUUFBQTRlLGVBQ0F2Z0IsRUFBQVcsS0FBQThqQyxFQUFBaGxDLEVBQUFpQixLQUFBNkMsRUFBQTNDLEtBQUE1SSxPQUFBLFNBQUEwSSxHQUNBLElBQUErRyxFQUFBRCxHQUFBOUcsR0FDQStHLEVBQUFHLEVBQUFFLGdCQUNBRixFQUFBQyxRQUFBbkgsRUFDQWtILEVBQUFFLGNBQUFMLEVBQ0FHLEVBQUFHLGdCQUFBLEVBQ0F5OEIsR0FBQSxLQUdBQSxJQUE2Qjc4QixFQUFBb0UsTUFBQTZtQixlQUFBLElBempIN0IsU0FBQTV5QixFQUFBbEwsR0FFQSxHQURBa0wsRUFBQStULGFBQUF0VyxLQUFBQyxJQUFBc0MsRUFBQStULGFBQUFqZixLQUNBa0wsRUFBQThULGtCQUFBaGYsRUFBQSxLQUVBLElBREEsSUFBQXFGLEVBQUE2RixFQUFBQyxNQUNBUyxFQUFBNUwsRUFBQSxFQUF3QjRMLEVBQUF2RyxFQUFjdUcsSUFBQSxDQUN0QyxJQUFBNFQsRUFBQXZVLEdBQUFDLEVBQUFVLEdBQUFpVCxXQUlBLEdBQUFXLG1CQUFBckMsS0FBQXZSLEVBQUE0VCxFQUFBeEMsVUFBQWhkLEdBQUEsQ0FDQXFGLEVBQUF1RyxFQUFBLEVBQ0EsT0FHQVYsRUFBQThULGtCQUFBclcsS0FBQUMsSUFBQXNDLEVBQUE4VCxrQkFBQTNaLElBOGlIQXVxQyxDQUFBMWtDLEVBQUFQLEVBQUFpQixNQUNBbXVCLEdBQUFsbkIsRUFBQSxLQUVBLElBQUF3dUIsRUFBQTV5QixFQUFBM0MsS0FBQTVJLFFBQUEwSCxFQUFBZ0IsS0FBQWpCLEVBQUFpQixNQUFBLEVBRUE2QyxFQUFBQyxLQUNLMHlCLEdBQUF2dUIsR0FDTGxJLEVBQUFpQixNQUFBaEIsRUFBQWdCLE1BQUEsR0FBQTZDLEVBQUEzQyxLQUFBNUksUUFBQTRrQyxHQUFBajFCLEVBQUEzSCxJQUFBdUQsR0FHSzJ5QixHQUFBdnVCLEVBQUFsSSxFQUFBaUIsS0FBQWhCLEVBQUFnQixLQUFBLEVBQUF5MUIsR0FGQVEsR0FBQWh2QixFQUFBbEksRUFBQWlCLEtBQUEsUUFJTCxJQUFBaWtDLEVBQUExNEIsR0FBQXRFLEVBQUEsV0FBQWk5QixFQUFBMzRCLEdBQUF0RSxFQUFBLFVBQ0EsR0FBQWk5QixHQUFBRCxFQUFBLENBQ0EsSUFBQXRwQyxHQUNBb0UsT0FBQUMsS0FDQWtCLEtBQUEyQyxFQUFBM0MsS0FDQTJqQyxRQUFBaGhDLEVBQUFnaEMsUUFDQXJuQyxPQUFBcUcsRUFBQXJHLFFBRUEwbkMsR0FBd0IxcUIsR0FBQXZTLEVBQUEsU0FBQUEsRUFBQXRNLEdBQ3hCc3BDLElBQXlCaDlCLEVBQUFvRSxNQUFBMG1CLGFBQUE5cUIsRUFBQW9FLE1BQUEwbUIsZ0JBQUE1MEIsS0FBQXhDLEdBRXpCc00sRUFBQUMsUUFBQWlrQixrQkFBQSxLQTlEZWdaLENBQUE3a0MsRUFBQTJILEdBQUFwRSxFQUFBSixHQUNQMjVCLEdBQUE5OEIsRUFBQXVELEVBQUFKLEdBQ1J3K0IsR0FBQTNoQyxFQUFBeS9CLEVBQUExaUMsSUErREEsU0FBQStuQyxHQUFBOWtDLEVBQUF1SSxFQUFBOUksRUFBQUMsRUFBQXhDLEdBRTBCLElBQUE2bkMsRUFEMUJybEMsSUFBWUEsRUFBQUQsR0FDWndDLEdBQUF2QyxFQUFBRCxHQUFBLElBQ0FBLEdBQUFzbEMsR0FBQXJsQyxFQUFBRCxJQUFBLEdBQUFDLEVBQUFxbEMsRUFBQSxJQUNBLGlCQUFBeDhCLElBQWdDQSxFQUFBdkksRUFBQWdsQyxXQUFBejhCLElBQ2hDeTZCLEdBQUFoakMsR0FBbUJQLE9BQUFDLEtBQUFrQixLQUFBMkgsRUFBQXJMLFdBS25CLFNBQUErbkMsR0FBQTNuQyxFQUFBbUMsRUFBQUMsRUFBQXNCLEdBQ0F0QixFQUFBcEMsRUFBQW9ELEtBQ0FwRCxFQUFBb0QsTUFBQU0sRUFDR3ZCLEVBQUFuQyxFQUFBb0QsT0FDSHBELEVBQUFvRCxLQUFBakIsRUFDQW5DLEVBQUFtQixHQUFBLEdBV0EsU0FBQXltQyxHQUFBM29DLEVBQUFrRCxFQUFBQyxFQUFBc0IsR0FDQSxRQUFBM04sRUFBQSxFQUFpQkEsRUFBQWtKLEVBQUF2RSxTQUFrQjNFLEVBQUEsQ0FDbkMsSUFBQTh4QyxFQUFBNW9DLEVBQUFsSixHQUFBK3hDLEdBQUEsRUFDQSxHQUFBRCxFQUFBaGQsT0FBQSxDQUNBZ2QsRUFBQUUsVUFBd0JGLEVBQUE1b0MsRUFBQWxKLEdBQUE4eEMsRUFBQXRKLFlBQWlDd0osUUFBQSxHQUN6RCxRQUFBNTdCLEVBQUEsRUFBcUJBLEVBQUEwN0IsRUFBQWhkLE9BQUFud0IsT0FBdUJ5UixJQUM1Q3c3QixHQUFBRSxFQUFBaGQsT0FBQTFlLEdBQUFnZCxPQUFBaG5CLEVBQUFDLEVBQUFzQixHQUNBaWtDLEdBQUFFLEVBQUFoZCxPQUFBMWUsR0FBQStlLEtBQUEvb0IsRUFBQUMsRUFBQXNCLE9BSkEsQ0FRQSxRQUFBaUosRUFBQSxFQUFxQkEsRUFBQWs3QixFQUFBMXFCLFFBQUF6aUIsU0FBMEJpUyxFQUFBLENBQy9DLElBQUEvSSxFQUFBaWtDLEVBQUExcUIsUUFBQXhRLEdBQ0EsR0FBQXZLLEVBQUF3QixFQUFBekIsS0FBQWlCLEtBQ0FRLEVBQUF6QixLQUFBc0MsR0FBQWIsRUFBQXpCLEtBQUFpQixLQUFBTSxFQUFBRSxFQUFBekIsS0FBQWhCLElBQ0F5QyxFQUFBeEIsR0FBQXFDLEdBQUFiLEVBQUF4QixHQUFBZ0IsS0FBQU0sRUFBQUUsRUFBQXhCLEdBQUFqQixTQUNPLEdBQUFnQixHQUFBeUIsRUFBQXhCLEdBQUFnQixLQUFBLENBQ1Awa0MsR0FBQSxFQUNBLE9BR0FBLElBQ0E3b0MsRUFBQThJLE9BQUEsRUFBQWhTLEVBQUEsR0FDQUEsRUFBQSxLQUtBLFNBQUF3d0MsR0FBQWxFLEVBQUFwOEIsR0FDQSxJQUFBOUQsRUFBQThELEVBQUE5RCxLQUFBaUIsS0FBQWhCLEVBQUE2RCxFQUFBN0QsR0FBQWdCLEtBQUFNLEVBQUF1QyxFQUFBM0MsS0FBQTVJLFFBQUEwSCxFQUFBRCxHQUFBLEVBQ0F5bEMsR0FBQXZGLEVBQUFuQixLQUFBLytCLEVBQUFDLEVBQUFzQixHQUNBa2tDLEdBQUF2RixFQUFBbEIsT0FBQWgvQixFQUFBQyxFQUFBc0IsR0FNQSxTQUFBc2tDLEdBQUF0bEMsRUFBQXVsQyxFQUFBQyxFQUFBM1MsR0FDQSxJQUFBMXhCLEVBQUFva0MsRUFBQTdrQyxFQUFBNmtDLEVBR0EsTUFGQSxpQkFBQUEsRUFBa0M3a0MsRUFBQVgsR0FBQUMsRUFBQXVDLEdBQUF2QyxFQUFBdWxDLElBQzFCcGtDLEVBQUFGLEdBQUFza0MsR0FDUixNQUFBcGtDLEVBQW1CLE1BQ25CMHhCLEVBQUFueUIsRUFBQVMsSUFBQW5CLEVBQUEySCxJQUErQmd2QixHQUFBMzJCLEVBQUEySCxHQUFBeEcsRUFBQXFrQyxHQUMvQjlrQyxHQWdCQSxTQUFBK2tDLEdBQUFwbEMsR0FHQWhFLEtBQUFnRSxRQUNBaEUsS0FBQTdELE9BQUEsS0FFQSxJQURBLElBQUF1SSxFQUFBLEVBQ0ExTixFQUFBLEVBQWlCQSxFQUFBZ04sRUFBQXJJLFNBQWtCM0UsRUFDbkNnTixFQUFBaE4sR0FBQW1GLE9BTkE2RCxLQU9BMEUsR0FBQVYsRUFBQWhOLEdBQUEwTixPQUVBMUUsS0FBQTBFLFNBMkNBLFNBQUEya0MsR0FBQXBsQyxHQUdBakUsS0FBQWlFLFdBRUEsSUFEQSxJQUFBSixFQUFBLEVBQUFhLEVBQUEsRUFDQTFOLEVBQUEsRUFBaUJBLEVBQUFpTixFQUFBdEksU0FBcUIzRSxFQUFBLENBQ3RDLElBQUFvTCxFQUFBNkIsRUFBQWpOLEdBQ0E2TSxHQUFBekIsRUFBQStCLFlBQTJCTyxHQUFBdEMsRUFBQXNDLE9BQzNCdEMsRUFBQWpHLE9BUEE2RCxLQVNBQSxLQUFBNkQsT0FDQTdELEtBQUEwRSxTQUNBMUUsS0FBQTdELE9BQUEsS0EvL0JBc2pDLEdBQUE3bUMsVUFBQXdLLEtBQUEsV0FBb0MsT0FBQTZDLEdBQUFqRyxLQUFBb3FCLE9BQUFwcUIsS0FBQW1zQixPQUNwQ3NULEdBQUE3bUMsVUFBQXlLLEdBQUEsV0FBa0MsT0FBQTJDLEdBQUFoRyxLQUFBb3FCLE9BQUFwcUIsS0FBQW1zQixPQUNsQ3NULEdBQUE3bUMsVUFBQW96QixNQUFBLFdBQXFDLE9BQUFoc0IsS0FBQW1zQixLQUFBOW5CLE1BQUFyRSxLQUFBb3FCLE9BQUEvbEIsTUFBQXJFLEtBQUFtc0IsS0FBQS9wQixJQUFBcEMsS0FBQW9xQixPQUFBaG9CLElBeThCckNnbkMsR0FBQXh3QyxXQUNBdUwsVUFBQSxXQUF5QixPQUFBbkUsS0FBQWdFLE1BQUFySSxRQUd6QjJ0QyxZQUFBLFNBQUF4N0IsRUFBQXJWLEdBR0EsSUFGQSxJQUVBekIsRUFBQThXLEVBQUFqUyxFQUFBaVMsRUFBQXJWLEVBQWdDekIsRUFBQTZFLElBQU83RSxFQUFBLENBQ3ZDLElBQUFxTixFQUhBckUsS0FHQWdFLE1BQUFoTixHQUhBZ0osS0FJQTBFLFFBQUFMLEVBQUFLLE9BQ0FrVixHQUFBdlYsR0FDQXdaLEdBQUF4WixFQUFBLFVBRUFyRSxLQUFBZ0UsTUFBQWdGLE9BQUE4RSxFQUFBclYsSUFJQTRGLFNBQUEsU0FBQTJGLEdBQ0FBLEVBQUF4QyxLQUFBMUMsTUFBQWtGLEVBQUFoRSxLQUFBZ0UsUUFLQXVsQyxZQUFBLFNBQUF6N0IsRUFBQTlKLEVBQUFVLEdBR0ExRSxLQUFBMEUsVUFDQTFFLEtBQUFnRSxNQUFBaEUsS0FBQWdFLE1BQUF2SSxNQUFBLEVBQUFxUyxHQUFBYSxPQUFBM0ssR0FBQTJLLE9BQUEzTyxLQUFBZ0UsTUFBQXZJLE1BQUFxUyxJQUNBLFFBQUE5VyxFQUFBLEVBQW1CQSxFQUFBZ04sRUFBQXJJLFNBQWtCM0UsRUFBT2dOLEVBQUFoTixHQUFBbUYsT0FKNUM2RCxNQVFBd3BDLE1BQUEsU0FBQTE3QixFQUFBclYsRUFBQSs5QixHQUdBLElBRkEsSUFFQTM2QixFQUFBaVMsRUFBQXJWLEVBQXdCcVYsRUFBQWpTLElBQVFpUyxFQUN6QixHQUFBMG9CLEVBSFB4MkIsS0FHT2dFLE1BQUE4SixJQUE0QixXQW1CbkN1N0IsR0FBQXp3QyxXQUNBdUwsVUFBQSxXQUF5QixPQUFBbkUsS0FBQTZELE1BRXpCeWxDLFlBQUEsU0FBQXg3QixFQUFBclYsR0FHQXVILEtBQUE2RCxNQUFBcEwsRUFDQSxRQUFBekIsRUFBQSxFQUFtQkEsRUFBQWdKLEtBQUFpRSxTQUFBdEksU0FBMEIzRSxFQUFBLENBQzdDLElBQUErRixFQUpBaUQsS0FJQWlFLFNBQUFqTixHQUFBa04sRUFBQW5ILEVBQUFvSCxZQUNBLEdBQUEySixFQUFBNUosRUFBQSxDQUNBLElBQUE2NEIsRUFBQTM3QixLQUFBQyxJQUFBNUksRUFBQXlMLEVBQUE0SixHQUFBMjdCLEVBQUExc0MsRUFBQTJILE9BSUEsR0FIQTNILEVBQUF1c0MsWUFBQXg3QixFQUFBaXZCLEdBUEEvOEIsS0FRQTBFLFFBQUEra0MsRUFBQTFzQyxFQUFBMkgsT0FDQVIsR0FBQTY0QixJQVRBLzhCLEtBU3VCaUUsU0FBQStFLE9BQUFoUyxJQUFBLEdBQWdDK0YsRUFBQVosT0FBQSxNQUN2RCxJQUFBMUQsR0FBQXNrQyxHQUE2QixNQUM3Qmp2QixFQUFBLE9BQ2NBLEdBQUE1SixFQUlkLEdBQUFsRSxLQUFBNkQsS0FBQXBMLEVBQUEsS0FDQXVILEtBQUFpRSxTQUFBdEksT0FBQSxLQUFBcUUsS0FBQWlFLFNBQUEsYUFBQW1sQyxLQUFBLENBQ0EsSUFBQXBsQyxLQUNBaEUsS0FBQTNCLFNBQUEyRixHQUNBaEUsS0FBQWlFLFVBQUEsSUFBQW1sQyxHQUFBcGxDLElBQ0FoRSxLQUFBaUUsU0FBQSxHQUFBOUgsT0FBQTZELE9BSUEzQixTQUFBLFNBQUEyRixHQUdBLElBRkEsSUFFQWhOLEVBQUEsRUFBbUJBLEVBQUFnSixLQUFBaUUsU0FBQXRJLFNBQTBCM0UsRUFGN0NnSixLQUVvRGlFLFNBQUFqTixHQUFBcUgsU0FBQTJGLElBR3BEdWxDLFlBQUEsU0FBQXo3QixFQUFBOUosRUFBQVUsR0FHQTFFLEtBQUE2RCxNQUFBRyxFQUFBckksT0FDQXFFLEtBQUEwRSxVQUNBLFFBQUExTixFQUFBLEVBQW1CQSxFQUFBZ0osS0FBQWlFLFNBQUF0SSxTQUEwQjNFLEVBQUEsQ0FDN0MsSUFBQStGLEVBTEFpRCxLQUtBaUUsU0FBQWpOLEdBQUFrTixFQUFBbkgsRUFBQW9ILFlBQ0EsR0FBQTJKLEdBQUE1SixFQUFBLENBRUEsR0FEQW5ILEVBQUF3c0MsWUFBQXo3QixFQUFBOUosRUFBQVUsR0FDQTNILEVBQUFpSCxPQUFBakgsRUFBQWlILE1BQUFySSxPQUFBLElBSUEsSUFEQSxJQUFBK3RDLEVBQUEzc0MsRUFBQWlILE1BQUFySSxPQUFBLE1BQ0FzRixFQUFBeW9DLEVBQW1Dem9DLEVBQUFsRSxFQUFBaUgsTUFBQXJJLFFBQTBCLENBQzdELElBQUFndUMsRUFBQSxJQUFBUCxHQUFBcnNDLEVBQUFpSCxNQUFBdkksTUFBQXdGLEtBQUEsS0FDQWxFLEVBQUEySCxRQUFBaWxDLEVBQUFqbEMsT0FkQTFFLEtBZUFpRSxTQUFBK0UsU0FBQWhTLEVBQUEsRUFBQTJ5QyxHQUNBQSxFQUFBeHRDLE9BaEJBNkQsS0FrQkFqRCxFQUFBaUgsTUFBQWpILEVBQUFpSCxNQUFBdkksTUFBQSxFQUFBaXVDLEdBbEJBMXBDLEtBbUJBNHBDLGFBRUEsTUFFQTk3QixHQUFBNUosSUFLQTBsQyxXQUFBLFdBQ0EsS0FBQTVwQyxLQUFBaUUsU0FBQXRJLFFBQUEsS0FDQSxJQUFBa3VDLEVBQUE3cEMsS0FDQSxHQUNBLElBQUE4cEMsRUFBQUQsRUFBQTVsQyxTQUFBK0UsT0FBQTZnQyxFQUFBNWxDLFNBQUF0SSxPQUFBLEtBQ0FvdUMsRUFBQSxJQUFBVixHQUFBUyxHQUNBLEdBQUFELEVBQUExdEMsT0FLTSxDQUNOMHRDLEVBQUFobUMsTUFBQWttQyxFQUFBbG1DLEtBQ0FnbUMsRUFBQW5sQyxRQUFBcWxDLEVBQUFybEMsT0FDQSxJQUFBc2xDLEVBQUFycUMsRUFBQWtxQyxFQUFBMXRDLE9BQUE4SCxTQUFBNGxDLEdBQ0FBLEVBQUExdEMsT0FBQThILFNBQUErRSxPQUFBZ2hDLEVBQUEsSUFBQUQsT0FUQSxDQUNBLElBQUFseEIsRUFBQSxJQUFBd3dCLEdBQUFRLEVBQUE1bEMsVUFDQTRVLEVBQUExYyxPQUFBMHRDLEVBQ0FBLEVBQUE1bEMsVUFBQTRVLEVBQUFreEIsR0FDQUYsRUFBQWh4QixFQU9Ba3hCLEVBQUE1dEMsT0FBQTB0QyxFQUFBMXRDLGFBQ0swdEMsRUFBQTVsQyxTQUFBdEksT0FBQSxJQUNMa3VDLEVBQUExdEMsT0FBQXl0QyxlQUdBSixNQUFBLFNBQUExN0IsRUFBQXJWLEVBQUErOUIsR0FHQSxJQUZBLElBRUF4L0IsRUFBQSxFQUFtQkEsRUFBQWdKLEtBQUFpRSxTQUFBdEksU0FBMEIzRSxFQUFBLENBQzdDLElBQUErRixFQUhBaUQsS0FHQWlFLFNBQUFqTixHQUFBa04sRUFBQW5ILEVBQUFvSCxZQUNBLEdBQUEySixFQUFBNUosRUFBQSxDQUNBLElBQUErbEMsRUFBQTdvQyxLQUFBQyxJQUFBNUksRUFBQXlMLEVBQUE0SixHQUNBLEdBQUEvUSxFQUFBeXNDLE1BQUExN0IsRUFBQW04QixFQUFBelQsR0FBd0MsU0FDeEMsT0FBQS85QixHQUFBd3hDLEdBQStCLE1BQy9CbjhCLEVBQUEsT0FDY0EsR0FBQTVKLEtBT2QsSUFBQWdtQyxHQUFBLFNBQUF2bUMsRUFBQXRJLEVBQUFpSyxHQUdBLEdBQUFBLEVBQWdCLFFBQUE2a0MsS0FBQTdrQyxFQUEyQkEsRUFBQXpNLGVBQUFzeEMsS0FGM0NucUMsS0FHS21xQyxHQUFBN2tDLEVBQUE2a0MsSUFDTG5xQyxLQUFBMkQsTUFDQTNELEtBQUEzRSxRQXVDQSxTQUFBK3VDLEdBQUE5K0IsRUFBQWpILEVBQUFNLEdBQ0FzRyxHQUFBNUcsSUFBQWlILEVBQUFvRSxPQUFBcEUsRUFBQW9FLE1BQUE0WCxXQUFBaGMsRUFBQTNILElBQUEyakIsWUFDS3FLLEdBQUFybUIsRUFBQTNHLEdBdENMdWxDLEdBQUF0eEMsVUFBQWc4QixNQUFBLFdBQ0EsSUFFQXRwQixFQUFBdEwsS0FBQTJELElBQUEySCxHQUFBcVYsRUFBQTNnQixLQUFBcUUsS0FBQXFjLFFBQUFyYyxFQUFBckUsS0FBQXFFLEtBQUFTLEVBQUFGLEdBQUFQLEdBQ0EsU0FBQVMsR0FBQTZiLEVBQUEsQ0FDQSxRQUFBM3BCLEVBQUEsRUFBaUJBLEVBQUEycEIsRUFBQWhsQixTQUFlM0UsRUFBTzJwQixFQUFBM3BCLElBSnZDZ0osTUFJOEQyZ0IsRUFBQTNYLE9BQUFoUyxJQUFBLEdBQzlEMnBCLEVBQUFobEIsU0FBbUIwSSxFQUFBcWMsUUFBQSxNQUNuQixJQUFBaGMsRUFBQTRjLEdBQUF0aEIsTUFDQXlFLEdBQUFKLEVBQUFqRCxLQUFBK0UsSUFBQSxFQUFBOUIsRUFBQUssV0FDQTRHLElBQ0FtdUIsR0FBQW51QixFQUFBLFdBQ0E4K0IsR0FBQTkrQixFQUFBakgsR0FBQUssR0FDQTQxQixHQUFBaHZCLEVBQUF4RyxFQUFBLFlBRUErWSxHQUFBdlMsRUFBQSxvQkFBQUEsRUFBQXRMLEtBQUE4RSxNQUlBb2xDLEdBQUF0eEMsVUFBQTgvQixRQUFBLFdBQ0EsSUFBQTJSLEVBQUFycUMsS0FFQXNxQyxFQUFBdHFDLEtBQUEwRSxPQUFBNEcsRUFBQXRMLEtBQUEyRCxJQUFBMkgsR0FBQWpILEVBQUFyRSxLQUFBcUUsS0FDQXJFLEtBQUEwRSxPQUFBLEtBQ0EsSUFBQUMsRUFBQTJjLEdBQUF0aEIsTUFBQXNxQyxFQUNBM2xDLElBQ0FtRyxHQUFBOUssS0FBQTJELElBQUFVLElBQXNDSSxHQUFBSixJQUFBSyxPQUFBQyxHQUN0QzJHLEdBQ0FtdUIsR0FBQW51QixFQUFBLFdBQ0FBLEVBQUFvRSxNQUFBZ1UsYUFBQSxFQUNBMG1CLEdBQUE5K0IsRUFBQWpILEVBQUFNLEdBQ0FrWixHQUFBdlMsRUFBQSxvQkFBQUEsRUFBQSsrQixFQUFBemxDLEdBQUFQLFFBSUF3TCxHQUFBcTZCLElBMkNBLElBQUFLLEdBQUEsRUFFQUMsR0FBQSxTQUFBN21DLEVBQUFtRSxHQUNBOUgsS0FBQWdFLFNBQ0FoRSxLQUFBOEgsT0FDQTlILEtBQUEyRCxNQUNBM0QsS0FBQUMsS0FBQXNxQyxJQXFIQSxTQUFBRSxHQUFBOW1DLEVBQUFQLEVBQUFDLEVBQUFpQyxFQUFBd0MsR0FJQSxHQUFBeEMsS0FBQXc4QixPQUFrQyxPQThGbEMsU0FBQW4rQixFQUFBUCxFQUFBQyxFQUFBaUMsRUFBQXdDLElBQ0F4QyxFQUFBdkcsRUFBQXVHLElBQ0F3OEIsUUFBQSxFQUNBLElBQUFwaUIsR0FBQStxQixHQUFBOW1DLEVBQUFQLEVBQUFDLEVBQUFpQyxFQUFBd0MsSUFBQTJqQixFQUFBL0wsRUFBQSxHQUNBbkQsRUFBQWpYLEVBQUF5RixXQVFBLE9BUEF3MkIsR0FBQTU5QixFQUFBLFNBQUFBLEdBQ0E0WSxJQUFpQmpYLEVBQUF5RixXQUFBd1IsRUFBQW11QixXQUFBLElBQ2pCaHJCLEVBQUFsZSxLQUFBaXBDLEdBQUE5bUMsRUFBQXlDLEdBQUF6QyxFQUFBUCxHQUFBZ0QsR0FBQXpDLEVBQUFOLEdBQUFpQyxFQUFBd0MsSUFDQSxRQUFBOVEsRUFBQSxFQUFtQkEsRUFBQTJNLEVBQUFpK0IsT0FBQWptQyxTQUF1QjNFLEVBQ25DLEdBQUEyTSxFQUFBaStCLE9BQUE1cUMsR0FBQTJ6QyxTQUE4QixPQUNyQ2xmLEVBQUFocUIsRUFBQWllLEtBRUEsSUFBQWtyQixHQUFBbHJCLEVBQUErTCxHQTFHa0NvZixDQUFBbG5DLEVBQUFQLEVBQUFDLEVBQUFpQyxFQUFBd0MsR0FFbEMsR0FBQW5FLEVBQUEySCxLQUFBM0gsRUFBQTJILEdBQUFvRSxNQUFnQyxPQUFBZ3FCLEdBQUEvMUIsRUFBQTJILEdBQUFtL0IsR0FBQS9RLENBQUEvMUIsRUFBQVAsRUFBQUMsRUFBQWlDLEVBQUF3QyxHQUVoQyxJQUFBbEIsRUFBQSxJQUFBNGpDLEdBQUE3bUMsRUFBQW1FLEdBQUFuRCxFQUFBaUIsR0FBQXhDLEVBQUFDLEdBR0EsR0FGQWlDLEdBQWdCdkcsRUFBQXVHLEVBQUFzQixHQUFBLEdBRWhCakMsRUFBQSxNQUFBQSxJQUFBLElBQUFpQyxFQUFBbUMsZUFDSyxPQUFBbkMsRUFRTCxHQVBBQSxFQUFBa2tDLGVBRUFsa0MsRUFBQXFELFdBQUEsRUFDQXJELEVBQUFtRSxXQUFBbk8sRUFBQSxRQUFBZ0ssRUFBQWtrQyxjQUFBLHFCQUNBeGxDLEVBQUFzYixtQkFBcUNoYSxFQUFBbUUsV0FBQWxPLGFBQUEsMkJBQ3JDeUksRUFBQXlDLGFBQTZCbkIsRUFBQW1FLFdBQUFoRCxZQUFBLElBRTdCbkIsRUFBQXFELFVBQUEsQ0FDQSxHQUFBSSxHQUFBMUcsRUFBQVAsRUFBQWlCLEtBQUFqQixFQUFBQyxFQUFBdUQsSUFDQXhELEVBQUFpQixNQUFBaEIsRUFBQWdCLE1BQUFnRyxHQUFBMUcsRUFBQU4sRUFBQWdCLEtBQUFqQixFQUFBQyxFQUFBdUQsR0FDTyxVQUFBOUMsTUFBQSxvRUE5dktQNEMsSUFBQSxFQWt3S0FFLEVBQUFta0MsY0FDSzVILEdBQUF4L0IsR0FBMEJQLE9BQUFDLEtBQUF4QyxPQUFBLFlBQXVDOEMsRUFBQWtvQixJQUFBMFosS0FFdEUsSUFBQWhQLEVBQUF5VSxFQUFBNW5DLEVBQUFpQixLQUFBaUgsRUFBQTNILEVBQUEySCxHQTBCQSxHQXpCQTNILEVBQUFXLEtBQUEwbUMsRUFBQTNuQyxFQUFBZ0IsS0FBQSxXQUFBQSxHQUNBaUgsR0FBQTFFLEVBQUFxRCxZQUFBcUIsRUFBQWhHLFFBQUE0ZSxjQUFBM1osR0FBQWxHLElBQUFpSCxFQUFBQyxRQUFBQyxVQUNPK3FCLEdBQUEsR0FDUDN2QixFQUFBcUQsV0FBQStnQyxHQUFBNW5DLEVBQUFpQixNQUFtREksR0FBQUosRUFBQSxHQS91S25ELFNBQUFBLEVBQUEwQyxHQUNBMUMsRUFBQWdELFlBQUFoRCxFQUFBZ0QsWUFBQWhELEVBQUFnRCxZQUFBc0gsUUFBQTVILFFBQ0FBLEVBQUFILE9BQUF3QyxXQUFBL0UsR0E4dUtBNG1DLENBQUE1bUMsRUFBQSxJQUFBc0MsR0FBQUMsRUFDQW9rQyxHQUFBNW5DLEVBQUFpQixLQUFBakIsRUFBQWhCLEdBQUEsS0FDQTRvQyxHQUFBM25DLEVBQUFnQixLQUFBaEIsRUFBQWpCLEdBQUEsU0FDQTRvQyxJQUdBcGtDLEVBQUFxRCxXQUF5QnRHLEVBQUFXLEtBQUFsQixFQUFBaUIsS0FBQWhCLEVBQUFnQixLQUFBLFdBQUFBLEdBQ3pCeUcsR0FBQW5ILEVBQUFVLElBQWtDSSxHQUFBSixFQUFBLEtBR2xDdUMsRUFBQXNrQyxjQUE0Qjc4QixHQUFBekgsRUFBQSwrQkFBOEMsT0FBQUEsRUFBQWd1QixVQUUxRWh1QixFQUFBMm9CLFdBMXhLQTlvQixJQUFBLEdBNHhLQTlDLEVBQUE0L0IsUUFBQXBCLEtBQUF4bUMsUUFBQWdJLEVBQUE0L0IsUUFBQW5CLE9BQUF6bUMsU0FDT2dJLEVBQUF3bkMsZ0JBRVB2a0MsRUFBQXFELFlBQ0FyRCxFQUFBM0csS0FBQXNxQyxHQUNBM2pDLEVBQUFzL0IsUUFBQSxHQUVBNTZCLEVBQUEsQ0FHQSxHQURBaXJCLElBQXdCanJCLEVBQUFvRSxNQUFBNm1CLGVBQUEsR0FDeEIzdkIsRUFBQXFELFVBQ080dkIsR0FBQXZ1QixFQUFBbEksRUFBQWlCLEtBQUFoQixFQUFBZ0IsS0FBQSxRQUNQLEdBQUF1QyxFQUFBckwsV0FBQXFMLEVBQUF3VSxPQUFBeFUsRUFBQXlVLFlBQUF6VSxFQUFBMFUsVUFBQTFVLEVBQUEyVSxJQUNPLFFBQUF2a0IsRUFBQW9NLEVBQUFpQixLQUF3QnJOLEdBQUFxTSxFQUFBZ0IsS0FBY3JOLElBQU9zakMsR0FBQWh2QixFQUFBdFUsRUFBQSxRQUNwRDRQLEVBQUFzL0IsUUFBd0JQLEdBQUFyNkIsRUFBQTNILEtBQ3hCa2EsR0FBQXZTLEVBQUEsY0FBQUEsRUFBQTFFLEdBRUEsT0FBQUEsRUFuTEE0akMsR0FBQTV4QyxVQUFBZzhCLE1BQUEsV0FHQSxJQUFBNTBCLEtBQUFpa0Msa0JBQUEsQ0FDQSxJQUFBMzRCLEVBQUF0TCxLQUFBMkQsSUFBQTJILEdBQUE4L0IsRUFBQTkvQixNQUFBb0UsTUFFQSxHQURBMDdCLEdBQWVwVixHQUFBMXFCLEdBQ2ZzRSxHQUFBNVAsS0FBQSxVQUNBLElBQUFzSSxFQUFBdEksS0FBQTBKLE9BQ0FwQixHQUFnQnVWLEdBQUE3ZCxLQUFBLFFBQUFzSSxFQUFBbEYsS0FBQWtGLEVBQUFqRixJQUdoQixJQURBLElBQUFoQyxFQUFBLEtBQUE4RSxFQUFBLEtBQ0FuUCxFQUFBLEVBQWlCQSxFQUFBZ0osS0FBQWdFLE1BQUFySSxTQUF1QjNFLEVBQUEsQ0FDeEMsSUFBQXFOLEVBWEFyRSxLQVdBZ0UsTUFBQWhOLEdBQ0ErUCxFQUFBRixHQUFBeEMsRUFBQWdELFlBWkFySCxNQWFBc0wsSUFiQXRMLEtBYUFpSyxVQUFrQ3F3QixHQUFBaHZCLEVBQUExRyxHQUFBUCxHQUFBLFFBQ2xDaUgsSUFDQSxNQUFBdkUsRUFBQTFELEtBQTRCOEMsRUFBQXZCLEdBQUFQLElBQzVCLE1BQUEwQyxFQUFBM0QsT0FBOEIvQixFQUFBdUQsR0FBQVAsS0FFOUJBLEVBQUFnRCxZQUFBTCxHQUFBM0MsRUFBQWdELFlBQUFOLEdBQ0EsTUFBQUEsRUFBQTNELE1BbkJBcEQsS0FtQkFpSyxZQUFBYSxHQW5CQTlLLEtBbUJBMkQsSUFBQVUsSUFBQWlILEdBQ083RyxHQUFBSixFQUFBOGxCLEdBQUE3ZSxFQUFBQyxVQUVQLEdBQUFELEdBQUF0TCxLQUFBaUssWUFBQXFCLEVBQUFoRyxRQUFBNGUsYUFBeUQsUUFBQWhmLEVBQUEsRUFBa0JBLEVBQUFsRixLQUFBZ0UsTUFBQXJJLFNBQXlCdUosRUFBQSxDQUNwRyxJQUFBbW1DLEVBQUE5Z0MsR0F2QkF2SyxLQXVCQWdFLE1BQUFrQixJQUFBa0csRUFBQUQsR0FBQWtnQyxHQUNBamdDLEVBQUFFLEVBQUFDLFFBQUFFLGdCQUNBSCxFQUFBQyxRQUFBQyxRQUFBNi9CLEVBQ0EvL0IsRUFBQUMsUUFBQUUsY0FBQUwsRUFDQUUsRUFBQUMsUUFBQUcsZ0JBQUEsR0FJQSxNQUFBckssR0FBQWlLLEdBQUF0TCxLQUFBaUssV0FBNEM0dkIsR0FBQXZ1QixFQUFBakssRUFBQThFLEVBQUEsR0FDNUNuRyxLQUFBZ0UsTUFBQXJJLE9BQUEsRUFDQXFFLEtBQUFpa0MsbUJBQUEsRUFDQWprQyxLQUFBa21DLFFBQUFsbUMsS0FBQTJELElBQUEyaUMsV0FDQXRtQyxLQUFBMkQsSUFBQTJpQyxVQUFBLEVBQ0FoN0IsR0FBYXE2QixHQUFBcjZCLEVBQUEzSCxNQUViMkgsR0FBV3VTLEdBQUF2UyxFQUFBLGdCQUFBQSxFQUFBdEwsS0FBQXFCLEVBQUE4RSxHQUNYaWxDLEdBQWV4VSxHQUFBdHJCLEdBQ2Z0TCxLQUFBN0QsUUFBb0I2RCxLQUFBN0QsT0FBQXk0QixVQVFwQjRWLEdBQUE1eEMsVUFBQThRLEtBQUEsU0FBQTJqQixFQUFBbmlCLEdBQ0EsSUFHQTlILEVBQUFDLEVBREEsTUFBQWdxQixHQUFBLFlBQUFydEIsS0FBQThILE9BQWdEdWxCLEVBQUEsR0FFaEQsUUFBQXIyQixFQUFBLEVBQWlCQSxFQUFBZ0osS0FBQWdFLE1BQUFySSxTQUF1QjNFLEVBQUEsQ0FDeEMsSUFBQXFOLEVBTEFyRSxLQUtBZ0UsTUFBQWhOLEdBQ0ErUCxFQUFBRixHQUFBeEMsRUFBQWdELFlBTkFySCxNQU9BLFNBQUErRyxFQUFBM0QsT0FDQUEsRUFBQXNDLEdBQUF3RixFQUFBN0csRUFBQU8sR0FBQVAsR0FBQTBDLEVBQUEzRCxPQUNBLEdBQUFpcUIsR0FBdUIsT0FBQWpxQixFQUV2QixTQUFBMkQsRUFBQTFELEtBQ0FBLEVBQUFxQyxHQUFBd0YsRUFBQTdHLEVBQUFPLEdBQUFQLEdBQUEwQyxFQUFBMUQsSUFDQSxHQUFBZ3FCLEdBQXNCLE9BQUFocUIsRUFHdEIsT0FBQUQsSUFBa0JBLE9BQUFDLE9BS2xCbW5DLEdBQUE1eEMsVUFBQTgvQixRQUFBLFdBQ0EsSUFBQTJSLEVBQUFycUMsS0FFQWlCLEVBQUFqQixLQUFBMEosTUFBQSxNQUFBNlMsRUFBQXZjLEtBQUFzTCxFQUFBdEwsS0FBQTJELElBQUEySCxHQUNBckssR0FBQXFLLEdBQ0FtdUIsR0FBQW51QixFQUFBLFdBQ0EsSUFBQWpILEVBQUFwRCxFQUFBb0QsS0FBQXFHLEVBQUE5RixHQUFBM0QsRUFBQW9ELE1BQ0FxWixFQUFBNkYsR0FBQWpZLEVBQUFaLEdBTUEsR0FMQWdULElBQ0E4SSxHQUFBOUksR0FDQXBTLEVBQUFvRSxNQUFBNG1CLGlCQUFBaHJCLEVBQUFvRSxNQUFBZ1UsYUFBQSxHQUVBcFksRUFBQW9FLE1BQUE2bUIsZUFBQSxHQUNBenJCLEdBQUF5UixFQUFBNVksSUFBQVUsSUFBQSxNQUFBa1ksRUFBQTdYLE9BQUEsQ0FDQSxJQUFBK2tDLEVBQUFsdEIsRUFBQTdYLE9BQ0E2WCxFQUFBN1gsT0FBQSxLQUNBLElBQUE0bUMsRUFBQWhxQixHQUFBL0UsR0FBQWt0QixFQUNBNkIsR0FDUzdtQyxHQUFBSixJQUFBSyxPQUFBNG1DLEdBRVR6dEIsR0FBQXZTLEVBQUEsZ0JBQUFBLEVBQUErK0IsTUFJQUcsR0FBQTV4QyxVQUFBd1EsV0FBQSxTQUFBL0UsR0FDQSxJQUFBckUsS0FBQWdFLE1BQUFySSxRQUFBcUUsS0FBQTJELElBQUEySCxHQUFBLENBQ0EsSUFBQWtyQixFQUFBeDJCLEtBQUEyRCxJQUFBMkgsR0FBQW9FLE1BQ0E4bUIsRUFBQTZDLHFCQUFBLEdBQUExNUIsRUFBQTYyQixFQUFBNkMsbUJBQUFyNUIsUUFDT3cyQixFQUFBK0MsdUJBQUEvQyxFQUFBK0MsMEJBQUEvM0IsS0FBQXhCLE1BRVBBLEtBQUFnRSxNQUFBeEMsS0FBQTZDLElBR0FtbUMsR0FBQTV4QyxVQUFBc1EsV0FBQSxTQUFBN0UsR0FFQSxHQURBckUsS0FBQWdFLE1BQUFnRixPQUFBckosRUFBQUssS0FBQWdFLE1BQUFLLEdBQUEsSUFDQXJFLEtBQUFnRSxNQUFBckksUUFBQXFFLEtBQUEyRCxJQUFBMkgsR0FBQSxDQUNBLElBQUFrckIsRUFBQXgyQixLQUFBMkQsSUFBQTJILEdBQUFvRSxPQUErQjhtQixFQUFBNkMscUJBQUE3QyxFQUFBNkMsd0JBQUE3M0IsS0FBQXhCLFFBRy9CNlAsR0FBQTI2QixJQTZFQSxJQUFBSSxHQUFBLFNBQUFsckIsRUFBQStMLEdBR0F6ckIsS0FBQTBmLFVBQ0ExZixLQUFBeXJCLFVBQ0EsUUFBQXowQixFQUFBLEVBQWlCQSxFQUFBMG9CLEVBQUEvakIsU0FBb0IzRSxFQUNoQzBvQixFQUFBMW9CLEdBQUFtRixPQUxMNkQsTUFzQ0EsU0FBQXVyQyxHQUFBNW5DLEdBQ0EsT0FBQUEsRUFBQTZuQyxVQUFBOWxDLEdBQUEvQixFQUFBQyxNQUFBLEdBQUFELEVBQUF5QyxRQUFBVixHQUFBL0IsRUFBQWtILGFBQUEsU0FBQXpULEdBQTBGLE9BQUFBLEVBQUErRSxTQWUxRixTQUFBc3ZDLEdBQUEvckIsR0FhQSxJQVpBLElBQUFsSixFQUFBLFNBQUF4ZixHQUNBLElBQUE0UCxFQUFBOFksRUFBQTFvQixHQUFBNHFDLEdBQUFoN0IsRUFBQTZrQixRQUFBOW5CLEtBQ0E0OUIsR0FBQTM2QixFQUFBNmtCLFFBQUE5bkIsSUFBQSxTQUFBck0sR0FBaUQsT0FBQXNxQyxFQUFBcGdDLEtBQUFsSyxLQUNqRCxRQUFBOFYsRUFBQSxFQUFtQkEsRUFBQXhHLEVBQUE4WSxRQUFBL2pCLE9BQTJCeVIsSUFBQSxDQUM5QyxJQUFBcytCLEVBQUE5a0MsRUFBQThZLFFBQUF0UyxJQUNBLEdBQUF6TixFQUFBaWlDLEVBQUE4SixFQUFBL25DLE9BQ0ErbkMsRUFBQXZ2QyxPQUFBLEtBQ0F5SyxFQUFBOFksUUFBQTFXLE9BQUFvRSxJQUFBLE1BS0FwVyxFQUFBLEVBQWlCQSxFQUFBMG9CLEVBQUEvakIsT0FBb0IzRSxJQUFBd2YsRUFBQXhmLEdBM0RyQzR6QyxHQUFBaHlDLFVBQUFnOEIsTUFBQSxXQUdBLElBQUE1MEIsS0FBQWlrQyxrQkFBQSxDQUNBamtDLEtBQUFpa0MsbUJBQUEsRUFDQSxRQUFBanRDLEVBQUEsRUFBaUJBLEVBQUFnSixLQUFBMGYsUUFBQS9qQixTQUF5QjNFLEVBSjFDZ0osS0FLSzBmLFFBQUExb0IsR0FBQTQ5QixRQUNML1csR0FBQTdkLEtBQUEsV0FHQTRxQyxHQUFBaHlDLFVBQUE4USxLQUFBLFNBQUEyakIsRUFBQW5pQixHQUNBLE9BQUFsTCxLQUFBeXJCLFFBQUEvaEIsS0FBQTJqQixFQUFBbmlCLElBRUEyRSxHQUFBKzZCLElBaURBLElBQUFlLEdBQUEsRUFDQUMsR0FBQSxTQUFBcm5DLEVBQUFwTSxFQUFBMm9DLEVBQUErSyxFQUFBbi9CLEdBQ0EsS0FBQTFNLGdCQUFBNHJDLElBQStCLFdBQUFBLEdBQUFybkMsRUFBQXBNLEVBQUEyb0MsRUFBQStLLEVBQUFuL0IsR0FDL0IsTUFBQW8wQixJQUEwQkEsRUFBQSxHQUUxQnVJLEdBQUFseUMsS0FBQTZJLE1BQUEsSUFBQW9wQyxJQUFBLElBQUExdkIsR0FBQSxhQUNBMVosS0FBQTRELE1BQUFrOUIsRUFDQTlnQyxLQUFBc25CLFVBQUF0bkIsS0FBQWtuQixXQUFBLEVBQ0FsbkIsS0FBQXNtQyxVQUFBLEVBQ0F0bUMsS0FBQThyQyxnQkFBQSxFQUNBOXJDLEtBQUEwWCxhQUFBMVgsS0FBQXlYLGtCQUFBcXBCLEVBQ0EsSUFBQWhqQyxFQUFBNEgsR0FBQW83QixFQUFBLEdBQ0E5Z0MsS0FBQTZyQixJQUFBa1UsR0FBQWppQyxHQUNBa0MsS0FBQXVqQyxRQUFBLElBQUF0QixHQUFBLE1BQ0FqaUMsS0FBQUMsS0FBQTByQyxHQUNBM3JDLEtBQUFxZ0MsV0FBQWxvQyxFQUNBNkgsS0FBQTZyQyxVQUNBN3JDLEtBQUEwTSxVQUFBLE9BQUFBLEVBQUEsWUFDQTFNLEtBQUF3OEIsUUFBQSxFQUVBLGlCQUFBajRCLElBQWdDQSxFQUFBdkUsS0FBQTJvQyxXQUFBcGtDLElBQ2hDazhCLEdBQUF6Z0MsTUFBbUJvRCxLQUFBdEYsRUFBQXVGLEdBQUF2RixFQUFBeUcsU0FDbkJ3Z0MsR0FBQS9rQyxLQUFBKy9CLEdBQUFqaUMsR0FBQTRDLElBR0FrckMsR0FBQWh6QyxVQUFBa0osRUFBQXVuQyxHQUFBendDLFdBQ0FtekMsWUFBQUgsR0FLQXRuQyxLQUFBLFNBQUFsQixFQUFBQyxFQUFBbXpCLEdBQ0FBLEVBQWF4MkIsS0FBQXdwQyxNQUFBcG1DLEVBQUFwRCxLQUFBNEQsTUFBQVAsRUFBQUQsRUFBQW96QixHQUNIeDJCLEtBQUF3cEMsTUFBQXhwQyxLQUFBNEQsTUFBQTVELEtBQUE0RCxNQUFBNUQsS0FBQTZELEtBQUFULElBSVY4OUIsT0FBQSxTQUFBcHpCLEVBQUE5SixHQUVBLElBREEsSUFBQVUsRUFBQSxFQUNBMU4sRUFBQSxFQUFtQkEsRUFBQWdOLEVBQUFySSxTQUFrQjNFLEVBQU8wTixHQUFBVixFQUFBaE4sR0FBQTBOLE9BQzVDMUUsS0FBQXVwQyxZQUFBejdCLEVBQUE5TixLQUFBNEQsTUFBQUksRUFBQVUsSUFFQXk4QixPQUFBLFNBQUFyekIsRUFBQXJWLEdBQTJCdUgsS0FBQXNwQyxZQUFBeDdCLEVBQUE5TixLQUFBNEQsTUFBQW5MLElBSzNCdXpDLFNBQUEsU0FBQUgsR0FDQSxJQUFBN25DLEVBQUFRLEdBQUF4RSxVQUFBNEQsTUFBQTVELEtBQUE0RCxNQUFBNUQsS0FBQTZELE1BQ0EsV0FBQWdvQyxFQUE0QjduQyxFQUM1QkEsRUFBQWlvQyxLQUFBSixHQUFBN3JDLEtBQUFrc0Msa0JBRUFDLFNBQUF2UyxHQUFBLFNBQUExdEIsR0FDQSxJQUFBdVksRUFBQS9lLEdBQUExRixLQUFBNEQsTUFBQSxHQUFBeUMsRUFBQXJHLEtBQUE0RCxNQUFBNUQsS0FBQTZELEtBQUEsRUFDQThpQyxHQUFBM21DLE1BQXNCb0QsS0FBQXFoQixFQUFBcGhCLEdBQUFxQyxHQUFBVyxFQUFBM0MsR0FBQTFELEtBQUFxRyxHQUFBOUIsS0FBQTVJLFFBQ3RCNEksS0FBQXZFLEtBQUEyb0MsV0FBQXo4QixHQUFBckwsT0FBQSxXQUFBc0csTUFBQSxJQUFrRixHQUNsRm5ILEtBQUFzTCxJQUFrQjRtQixHQUFBbHlCLEtBQUFzTCxHQUFBLEtBQ2xCeTVCLEdBQUEva0MsS0FBQSsvQixHQUFBdGIsR0FBQS9qQixLQUVBK25DLGFBQUEsU0FBQXY4QixFQUFBOUksRUFBQUMsRUFBQXhDLEdBQ0F1QyxFQUFBZ0QsR0FBQXBHLEtBQUFvRCxHQUNBQyxJQUFBK0MsR0FBQXBHLEtBQUFxRCxHQUFBRCxFQUNBcWxDLEdBQUF6b0MsS0FBQWtNLEVBQUE5SSxFQUFBQyxFQUFBeEMsSUFFQXVyQyxTQUFBLFNBQUFocEMsRUFBQUMsRUFBQXdvQyxHQUNBLElBQUE3bkMsRUFBQUksR0FBQXBFLEtBQUFvRyxHQUFBcEcsS0FBQW9ELEdBQUFnRCxHQUFBcEcsS0FBQXFELElBQ0EsV0FBQXdvQyxFQUE0QjduQyxFQUM1QkEsRUFBQWlvQyxLQUFBSixHQUFBN3JDLEtBQUFrc0Msa0JBR0F4b0MsUUFBQSxTQUFBVyxHQUEyQixJQUFBcE4sRUFBQStJLEtBQUFxc0MsY0FBQWhvQyxHQUFpQyxPQUFBcE4sS0FBQXNOLE1BRTVEOG5DLGNBQUEsU0FBQWhvQyxHQUFpQyxHQUFBZSxHQUFBcEYsS0FBQXFFLEdBQXlCLE9BQUFYLEdBQUExRCxLQUFBcUUsSUFDMURpb0MsY0FBQSxTQUFBam9DLEdBQWlDLE9BQUFPLEdBQUFQLElBRWpDa29DLHlCQUFBLFNBQUFsb0MsR0FFQSxNQURBLGlCQUFBQSxJQUFrQ0EsRUFBQVgsR0FBQTFELEtBQUFxRSxJQUNsQ2tHLEdBQUFsRyxJQUdBbW9DLFVBQUEsV0FBeUIsT0FBQXhzQyxLQUFBNkQsTUFDekJpOUIsVUFBQSxXQUF5QixPQUFBOWdDLEtBQUE0RCxPQUN6QmlILFNBQUEsV0FBd0IsT0FBQTdLLEtBQUE0RCxNQUFBNUQsS0FBQTZELEtBQUEsR0FFeEJ1QyxRQUFBLFNBQUFuRixHQUEwQixPQUFBbUYsR0FBQXBHLEtBQUFpQixJQUUxQjZ3QixVQUFBLFNBQUFoMEIsR0FDQSxJQUFBbVUsRUFBQWpTLEtBQUE2ckIsSUFBQUosVUFLQSxPQUpBLE1BQUEzdEIsR0FBQSxRQUFBQSxFQUEyQ21VLEVBQUFrYSxLQUMzQyxVQUFBcnVCLEVBQWlDbVUsRUFBQW1ZLE9BQ2pDLE9BQUF0c0IsR0FBQSxNQUFBQSxJQUFBLElBQUFBLEVBQWtFbVUsRUFBQTVPLEtBQ3hENE8sRUFBQTdPLFFBR1ZxcEMsZUFBQSxXQUE4QixPQUFBenNDLEtBQUE2ckIsSUFBQUMsUUFDOUI0VCxrQkFBQSxXQUFpQyxPQUFBMS9CLEtBQUE2ckIsSUFBQTZULHFCQUVqQ2dOLFVBQUE5UyxHQUFBLFNBQUF2MUIsRUFBQWpDLEVBQUFrRCxHQUNBOC9CLEdBQUFwbEMsS0FBQW9HLEdBQUFwRyxLQUFBLGlCQUFBcUUsRUFBQXFCLEdBQUFyQixFQUFBakMsR0FBQSxHQUFBaUMsR0FBQSxLQUFBaUIsS0FFQXkvQixhQUFBbkwsR0FBQSxTQUFBeFAsRUFBQStCLEVBQUE3bUIsR0FDQTgvQixHQUFBcGxDLEtBQUFvRyxHQUFBcEcsS0FBQW9xQixHQUFBaGtCLEdBQUFwRyxLQUFBbXNCLEdBQUEvQixHQUFBOWtCLEtBRUF3L0IsZ0JBQUFsTCxHQUFBLFNBQUF6TixFQUFBM0QsRUFBQWxqQixHQUNBdy9CLEdBQUE5a0MsS0FBQW9HLEdBQUFwRyxLQUFBbXNCLEdBQUEzRCxHQUFBcGlCLEdBQUFwRyxLQUFBd29CLEdBQUFsakIsS0FFQTAvQixpQkFBQXBMLEdBQUEsU0FBQXFMLEVBQUEzL0IsR0FDQTAvQixHQUFBaGxDLEtBQUF3RyxHQUFBeEcsS0FBQWlsQyxHQUFBMy9CLEtBRUFxbkMsbUJBQUEvUyxHQUFBLFNBQUFsN0IsRUFBQTRHLEdBQ0EsSUFBQTIvQixFQUFBdGpDLEVBQUEzQixLQUFBNnJCLElBQUFDLE9BQUFwdEIsR0FDQXNtQyxHQUFBaGxDLEtBQUF3RyxHQUFBeEcsS0FBQWlsQyxHQUFBMy9CLEtBRUFzbkMsY0FBQWhULEdBQUEsU0FBQTlOLEVBQUFMLEVBQUFubUIsR0FHQSxHQUFBd21CLEVBQUFud0IsT0FBQSxDQUVBLElBREEsSUFBQWlHLEtBQ0E1SyxFQUFBLEVBQW1CQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxJQUMvQjRLLEVBQUE1SyxHQUFBLElBQUF5b0MsR0FBQXI1QixHQUxQcEcsS0FLTzhyQixFQUFBOTBCLEdBQUFvekIsUUFDUGhrQixHQU5BcEcsS0FNQThyQixFQUFBOTBCLEdBQUFtMUIsT0FDQSxNQUFBVixJQUEwQkEsRUFBQXJxQixLQUFBQyxJQUFBeXFCLEVBQUFud0IsT0FBQSxFQUFBcUUsS0FBQTZyQixJQUFBRSxZQUMxQmdaLEdBQUEva0MsS0FBQTIvQixHQUFBLzlCLEVBQUE2cEIsR0FBQW5tQixNQUVBdW5DLGFBQUFqVCxHQUFBLFNBQUF4UCxFQUFBK0IsRUFBQTdtQixHQUNBLElBQUF3bUIsRUFBQTlyQixLQUFBNnJCLElBQUFDLE9BQUFyd0IsTUFBQSxHQUNBcXdCLEVBQUF0cUIsS0FBQSxJQUFBaStCLEdBQUFyNUIsR0FBQXBHLEtBQUFvcUIsR0FBQWhrQixHQUFBcEcsS0FBQW1zQixHQUFBL0IsS0FDQTJhLEdBQUEva0MsS0FBQTIvQixHQUFBN1QsSUFBQW53QixPQUFBLEdBQUEySixLQUdBeU0sYUFBQSxTQUFBODVCLEdBSUEsSUFIQSxJQUVBN25DLEVBQUE4bkIsRUFBQTlyQixLQUFBNnJCLElBQUFDLE9BQ0E5MEIsRUFBQSxFQUFtQkEsRUFBQTgwQixFQUFBbndCLE9BQW1CM0UsSUFBQSxDQUN0QyxJQUFBNjBCLEVBQUF6bkIsR0FKQXBFLEtBSUE4ckIsRUFBQTkwQixHQUFBb00sT0FBQTBvQixFQUFBOTBCLEdBQUFxTSxNQUNBVyxNQUFBMkssT0FBQWtkLEtBRUEsV0FBQWdnQixFQUE0QjduQyxFQUNsQkEsRUFBQWlvQyxLQUFBSixHQUFBN3JDLEtBQUFrc0Msa0JBRVZZLGNBQUEsU0FBQWpCLEdBSUEsSUFIQSxJQUVBOUUsS0FBQWpiLEVBQUE5ckIsS0FBQTZyQixJQUFBQyxPQUNBOTBCLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQTYwQixFQUFBem5CLEdBSkFwRSxLQUlBOHJCLEVBQUE5MEIsR0FBQW9NLE9BQUEwb0IsRUFBQTkwQixHQUFBcU0sT0FDQSxJQUFBd29DLElBQThCaGdCLElBQUFvZ0IsS0FBQUosR0FMOUI3ckMsS0FLOEJrc0Msa0JBQzlCbkYsRUFBQS92QyxHQUFBNjBCLEVBRUEsT0FBQWtiLEdBRUFnRyxpQkFBQSxTQUFBN2dDLEVBQUE3TixFQUFBd0MsR0FFQSxJQURBLElBQUFtc0MsS0FDQWgyQyxFQUFBLEVBQW1CQSxFQUFBZ0osS0FBQTZyQixJQUFBQyxPQUFBbndCLE9BQTRCM0UsSUFDeENnMkMsRUFBQWgyQyxHQUFBa1YsRUFDUGxNLEtBQUFpdEMsa0JBQUFELEVBQUEzdUMsRUFBQXdDLEdBQUEsV0FFQW9zQyxrQkFBQXJULEdBQUEsU0FBQTF0QixFQUFBN04sRUFBQXdDLEdBSUEsSUFIQSxJQUVBdWQsS0FBQXlOLEVBQUE3ckIsS0FBQTZyQixJQUNBNzBCLEVBQUEsRUFBbUJBLEVBQUE2MEIsRUFBQUMsT0FBQW53QixPQUF1QjNFLElBQUEsQ0FDMUMsSUFBQWliLEVBQUE0WixFQUFBQyxPQUFBOTBCLEdBQ0FvbkIsRUFBQXBuQixJQUFvQm9NLEtBQUE2TyxFQUFBN08sT0FBQUMsR0FBQTRPLEVBQUE1TyxLQUFBa0IsS0FMcEJ2RSxLQUtvQjJvQyxXQUFBejhCLEVBQUFsVixJQUFBNkosVUFHcEIsSUFEQSxJQUFBcWtDLEVBQUE3bUMsR0FBQSxPQUFBQSxHQWhqREEsU0FBQXNGLEVBQUF5YSxFQUFBOHVCLEdBR0EsSUFGQSxJQUFBdHJDLEtBQ0F1ckMsRUFBQXpuQyxHQUFBL0IsRUFBQUMsTUFBQSxHQUFBd3BDLEVBQUFELEVBQ0FuMkMsRUFBQSxFQUFpQkEsRUFBQW9uQixFQUFBemlCLE9BQW9CM0UsSUFBQSxDQUNyQyxJQUFBa1EsRUFBQWtYLEVBQUFwbkIsR0FDQW9NLEVBQUErOEIsR0FBQWo1QixFQUFBOUQsS0FBQStwQyxFQUFBQyxHQUNBL3BDLEVBQUE4OEIsR0FBQUgsR0FBQTk0QixHQUFBaW1DLEVBQUFDLEdBR0EsR0FGQUQsRUFBQWptQyxFQUFBN0QsR0FDQStwQyxFQUFBL3BDLEVBQ0EsVUFBQTZwQyxFQUFBLENBQ0EsSUFBQS94QyxFQUFBd0ksRUFBQWtvQixJQUFBQyxPQUFBOTBCLEdBQUE4b0MsRUFBQWw2QixHQUFBekssRUFBQWd4QixLQUFBaHhCLEVBQUFpdkIsUUFBQSxFQUNBeG9CLEVBQUE1SyxHQUFBLElBQUF5b0MsR0FBQUssRUFBQXo4QixFQUFBRCxFQUFBMDhCLEVBQUExOEIsRUFBQUMsUUFFQXpCLEVBQUE1SyxHQUFBLElBQUF5b0MsR0FBQXI4QixLQUdBLFdBQUFnOEIsR0FBQXg5QixFQUFBK0IsRUFBQWtvQixJQUFBRSxXQWdpREFzaEIsQ0FBQXJ0QyxLQUFBb2UsRUFBQS9mLEdBQ0E2RyxFQUFBa1osRUFBQXppQixPQUFBLEVBQXNDdUosR0FBQSxFQUFVQSxJQUN6Q3loQyxHQVRQM21DLEtBU09vZSxFQUFBbFosSUFDUGdnQyxFQUFpQkcsR0FBQXJsQyxLQUFBa2xDLEdBQ2pCbGxDLEtBQUFzTCxJQUF1QnVtQixHQUFBN3hCLEtBQUFzTCxNQUV2QmdpQyxLQUFBMVQsR0FBQSxXQUFnQzZOLEdBQUF6bkMsS0FBQSxVQUNoQ3V0QyxLQUFBM1QsR0FBQSxXQUFnQzZOLEdBQUF6bkMsS0FBQSxVQUNoQ3d0QyxjQUFBNVQsR0FBQSxXQUF5QzZOLEdBQUF6bkMsS0FBQSxhQUN6Q3l0QyxjQUFBN1QsR0FBQSxXQUF5QzZOLEdBQUF6bkMsS0FBQSxhQUV6QzB0QyxhQUFBLFNBQUFoNkIsR0FBK0IxVCxLQUFBdzhCLE9BQUE5b0IsR0FDL0JpNkIsYUFBQSxXQUE0QixPQUFBM3RDLEtBQUF3OEIsUUFFNUJvUixZQUFBLFdBRUEsSUFEQSxJQUFBdEssRUFBQXRqQyxLQUFBdWpDLFFBQUFwQixFQUFBLEVBQUFDLEVBQUEsRUFDQXByQyxFQUFBLEVBQW1CQSxFQUFBc3NDLEVBQUFuQixLQUFBeG1DLE9BQXNCM0UsSUFBT3NzQyxFQUFBbkIsS0FBQW5yQyxHQUFBODBCLFVBQTRCcVcsRUFDNUUsUUFBQWo5QixFQUFBLEVBQXFCQSxFQUFBbytCLEVBQUFsQixPQUFBem1DLE9BQTBCdUosSUFBU28rQixFQUFBbEIsT0FBQWw5QixHQUFBNG1CLFVBQWdDc1csRUFDeEYsT0FBWWtMLEtBQUFuTCxFQUFBb0wsS0FBQW5MLElBRVorSSxhQUFBLFdBQTRCbnJDLEtBQUF1akMsUUFBQSxJQUFBdEIsR0FBQWppQyxLQUFBdWpDLFFBQUFWLGdCQUU1QmdMLFVBQUEsV0FDQTd0QyxLQUFBOHJDLGdCQUFBOXJDLEtBQUE4dEMsa0JBQUEsSUFFQUEsaUJBQUEsU0FBQUMsR0FHQSxPQUZBQSxJQUNPL3RDLEtBQUF1akMsUUFBQWYsT0FBQXhpQyxLQUFBdWpDLFFBQUFkLFVBQUF6aUMsS0FBQXVqQyxRQUFBYixXQUFBLE1BQ1AxaUMsS0FBQXVqQyxRQUFBWCxZQUVBb0wsUUFBQSxTQUFBQyxHQUNBLE9BQUFqdUMsS0FBQXVqQyxRQUFBWCxhQUFBcUwsR0FBQWp1QyxLQUFBOHJDLGtCQUdBb0MsV0FBQSxXQUNBLE9BQVkvTCxLQUFBb0MsR0FBQXZrQyxLQUFBdWpDLFFBQUFwQixNQUNaQyxPQUFBbUMsR0FBQXZrQyxLQUFBdWpDLFFBQUFuQixVQUVBK0wsV0FBQSxTQUFBQyxHQUNBLElBQUE5SyxFQUFBdGpDLEtBQUF1akMsUUFBQSxJQUFBdEIsR0FBQWppQyxLQUFBdWpDLFFBQUFWLGVBQ0FTLEVBQUFuQixLQUFBb0MsR0FBQTZKLEVBQUFqTSxLQUFBMW1DLE1BQUEsWUFDQTZuQyxFQUFBbEIsT0FBQW1DLEdBQUE2SixFQUFBaE0sT0FBQTNtQyxNQUFBLGFBR0E0eUMsZ0JBQUF6VSxHQUFBLFNBQUF2MUIsRUFBQWlxQyxFQUFBcjJDLEdBQ0EsT0FBQWd4QyxHQUFBanBDLEtBQUFxRSxFQUFBLGtCQUFBQSxHQUNBLElBQUFxYixFQUFBcmIsRUFBQXNiLGdCQUFBdGIsRUFBQXNiLGtCQUdBLE9BRkFELEVBQUE0dUIsR0FBQXIyQyxHQUNBQSxHQUFBeUssR0FBQWdkLEtBQXVDcmIsRUFBQXNiLGNBQUEsT0FDdkMsTUFJQTR1QixZQUFBM1UsR0FBQSxTQUFBMFUsR0FDQSxJQUFBakUsRUFBQXJxQyxLQUVBQSxLQUFBc0UsS0FBQSxTQUFBRCxHQUNBQSxFQUFBc2IsZUFBQXRiLEVBQUFzYixjQUFBMnVCLElBQ0FyRixHQUFBb0IsRUFBQWhtQyxFQUFBLG9CQUdBLE9BRkFBLEVBQUFzYixjQUFBMnVCLEdBQUEsS0FDQTVyQyxHQUFBMkIsRUFBQXNiLGlCQUE0Q3RiLEVBQUFzYixjQUFBLE9BQzVDLFFBTUE2dUIsU0FBQSxTQUFBbnFDLEdBQ0EsSUFBQTVMLEVBQ0Esb0JBQUE0TCxFQUFBLENBQ0EsSUFBQWUsR0FBQXBGLEtBQUFxRSxHQUFnQyxZQUdoQyxHQUZBNUwsRUFBQTRMLElBQ0FBLEVBQUFYLEdBQUExRCxLQUFBcUUsSUFDa0IsaUJBR2xCLFVBREE1TCxFQUFBbU0sR0FBQVAsSUFDc0IsWUFFdEIsT0FBWUEsS0FBQTVMLEVBQUF5d0MsT0FBQTdrQyxFQUFBRSxLQUFBRixFQUFBRSxLQUFBb2IsY0FBQXRiLEVBQUFzYixjQUNaM0ksVUFBQTNTLEVBQUEyUyxVQUFBRCxRQUFBMVMsRUFBQTBTLFFBQUFvSSxVQUFBOWEsRUFBQThhLFVBQ0F1QixRQUFBcmMsRUFBQXFjLFVBR0ErdEIsYUFBQTdVLEdBQUEsU0FBQXNQLEVBQUF3RixFQUFBenpDLEdBQ0EsT0FBQWd1QyxHQUFBanBDLEtBQUFrcEMsRUFBQSxVQUFBd0YsRUFBQSwwQkFBQXJxQyxHQUNBLElBQUFsRixFQUFBLFFBQUF1dkMsRUFBQSxZQUNBLGNBQUFBLEVBQUEsVUFDQSxVQUFBQSxFQUFBLDBCQUNBLEdBQUFycUMsRUFBQWxGLEdBQ0EsSUFBQW5FLEVBQUFDLEdBQUE3QixLQUFBaUwsRUFBQWxGLElBQWlELFNBQ3JDa0YsRUFBQWxGLElBQUEsSUFBQWxFLE9BRllvSixFQUFBbEYsR0FBQWxFLEVBR3hCLGFBR0EwekMsZ0JBQUEvVSxHQUFBLFNBQUFzUCxFQUFBd0YsRUFBQXp6QyxHQUNBLE9BQUFndUMsR0FBQWpwQyxLQUFBa3BDLEVBQUEsVUFBQXdGLEVBQUEsMEJBQUFycUMsR0FDQSxJQUFBbEYsRUFBQSxRQUFBdXZDLEVBQUEsWUFDQSxjQUFBQSxFQUFBLFVBQ0EsVUFBQUEsRUFBQSwwQkFDQTdwQyxFQUFBUixFQUFBbEYsR0FDQSxJQUFBMEYsRUFBaUIsU0FDakIsU0FBQTVKLEVBQTZCb0osRUFBQWxGLEdBQUEsU0FDN0IsQ0FDQSxJQUFBbUosRUFBQXpELEVBQUFqSyxNQUFBSSxFQUFBQyxJQUNBLElBQUFxTixFQUFxQixTQUNyQixJQUFBdkssRUFBQXVLLEVBQUE1TSxNQUFBNE0sRUFBQSxHQUFBM00sT0FDQTBJLEVBQUFsRixHQUFBMEYsRUFBQXBKLE1BQUEsRUFBQTZNLEVBQUE1TSxRQUFBNE0sRUFBQTVNLE9BQUFxQyxHQUFBOEcsRUFBQWxKLE9BQUEsUUFBQWtKLEVBQUFwSixNQUFBc0MsSUFBQSxLQUVBLGFBSUE2d0MsY0FBQWhWLEdBQUEsU0FBQXNQLEVBQUE3dEMsRUFBQWlLLEdBQ0EsT0F2a0JBLFNBQUEzQixFQUFBdWxDLEVBQUE3dEMsRUFBQWlLLEdBQ0EsSUFBQWlYLEVBQUEsSUFBQTJ0QixHQUFBdm1DLEVBQUF0SSxFQUFBaUssR0FDQWdHLEVBQUEzSCxFQUFBMkgsR0FnQkEsT0FmQUEsR0FBQWlSLEVBQUF3RSxZQUErQnpWLEVBQUFDLFFBQUFnbEIsY0FBQSxHQUMvQjBZLEdBQUF0bEMsRUFBQXVsQyxFQUFBLGtCQUFBN2tDLEdBQ0EsSUFBQXFjLEVBQUFyYyxFQUFBcWMsVUFBQXJjLEVBQUFxYyxZQUlBLEdBSEEsTUFBQW5FLEVBQUFzeUIsU0FBa0NudUIsRUFBQWxmLEtBQUErYSxHQUN4Qm1FLEVBQUExWCxPQUFBNUgsS0FBQUMsSUFBQXFmLEVBQUEva0IsT0FBQSxFQUFBeUYsS0FBQStFLElBQUEsRUFBQW9XLEVBQUFzeUIsV0FBQSxFQUFBdHlCLEdBQ1ZBLEVBQUFsWSxPQUNBaUgsSUFBQVIsR0FBQW5ILEVBQUFVLEdBQUEsQ0FDQSxJQUFBeXFDLEVBQUE3akMsR0FBQTVHLEdBQUFWLEVBQUEyakIsVUFDQTdpQixHQUFBSixJQUFBSyxPQUFBNGMsR0FBQS9FLElBQ0F1eUIsR0FBeUJuZCxHQUFBcm1CLEVBQUFpUixFQUFBN1gsUUFDekI0RyxFQUFBb0UsTUFBQWdVLGFBQUEsRUFFQSxXQUVBcFksR0FBV3VTLEdBQUF2UyxFQUFBLGtCQUFBQSxFQUFBaVIsRUFBQSxpQkFBQTJzQixJQUFBdGtDLEdBQUFza0MsSUFDWDNzQixFQXFqQkFxeUIsQ0FBQTV1QyxLQUFBa3BDLEVBQUE3dEMsRUFBQWlLLEtBRUF5cEMsaUJBQUEsU0FBQXh5QixHQUFzQ0EsRUFBQXFZLFNBRXRDNlYsU0FBQSxTQUFBcm5DLEVBQUFDLEVBQUFpQyxHQUNBLE9BQUFtbEMsR0FBQXpxQyxLQUFBb0csR0FBQXBHLEtBQUFvRCxHQUFBZ0QsR0FBQXBHLEtBQUFxRCxHQUFBaUMsT0FBQXdDLE1BQUEsVUFFQWtuQyxZQUFBLFNBQUEvdEMsRUFBQXFFLEdBQ0EsSUFBQTJwQyxHQUFvQm5FLGFBQUF4bEMsSUFBQSxNQUFBQSxFQUFBdEksU0FBQXNJLEVBQUFpWCxPQUFBalgsR0FDcEJ5QyxXQUFBekMsS0FBQXlDLFdBQ0FnQixnQkFBQSxFQUFBKzRCLE9BQUF4OEIsS0FBQXc4QixPQUNBbGhCLGtCQUFBdGIsS0FBQXNiLG1CQUVBLE9BQUE2cEIsR0FBQXpxQyxLQURBaUIsRUFBQW1GLEdBQUFwRyxLQUFBaUIsR0FDQUEsRUFBQWd1QyxFQUFBLGFBRUFDLFlBQUEsU0FBQWp1QyxHQUVBLElBQUF5ZSxLQUFBNVksRUFBQXBELEdBQUExRCxNQURBaUIsRUFBQW1GLEdBQUFwRyxLQUFBaUIsSUFDQW9ELE1BQUFnRCxZQUNBLEdBQUFQLEVBQWdCLFFBQUE5UCxFQUFBLEVBQWdCQSxFQUFBOFAsRUFBQW5MLFNBQWtCM0UsRUFBQSxDQUNsRCxJQUFBK1AsRUFBQUQsRUFBQTlQLElBQ0EsTUFBQStQLEVBQUEzRCxNQUFBMkQsRUFBQTNELE1BQUFuQyxFQUFBbUIsTUFDQSxNQUFBMkUsRUFBQTFELElBQUEwRCxFQUFBMUQsSUFBQXBDLEVBQUFtQixLQUNTc2QsRUFBQWxlLEtBQUF1RixFQUFBSCxPQUFBekssUUFBQTRLLEVBQUFILFFBRVQsT0FBQThZLEdBRUE4ckIsVUFBQSxTQUFBcG9DLEVBQUFDLEVBQUF3a0MsR0FDQXprQyxFQUFBZ0QsR0FBQXBHLEtBQUFvRCxHQUErQkMsRUFBQStDLEdBQUFwRyxLQUFBcUQsR0FDL0IsSUFBQWlGLEtBQUFnQyxFQUFBbEgsRUFBQWlCLEtBYUEsT0FaQXJFLEtBQUFzRSxLQUFBbEIsRUFBQWlCLEtBQUFoQixFQUFBZ0IsS0FBQSxXQUFBQSxHQUNBLElBQUF5QyxFQUFBekMsRUFBQWdELFlBQ0EsR0FBQVAsRUFBa0IsUUFBQTlQLEVBQUEsRUFBZ0JBLEVBQUE4UCxFQUFBbkwsT0FBa0IzRSxJQUFBLENBQ3BELElBQUErUCxFQUFBRCxFQUFBOVAsR0FDQSxNQUFBK1AsRUFBQTFELElBQUFpSCxHQUFBbEgsRUFBQWlCLE1BQUFqQixFQUFBaEIsSUFBQTJFLEVBQUExRCxJQUNBLE1BQUEwRCxFQUFBM0QsTUFBQWtILEdBQUFsSCxFQUFBaUIsTUFDQSxNQUFBMEMsRUFBQTNELE1BQUFrSCxHQUFBakgsRUFBQWdCLE1BQUEwQyxFQUFBM0QsTUFBQUMsRUFBQWpCLElBQ0F5bEMsTUFBQTlnQyxFQUFBSCxTQUNXMEIsRUFBQTlHLEtBQUF1RixFQUFBSCxPQUFBekssUUFBQTRLLEVBQUFILFVBRVgwRCxJQUVBaEMsR0FFQTZtQyxZQUFBLFdBQ0EsSUFBQXp2QixLQU1BLE9BTEExZixLQUFBc0UsS0FBQSxTQUFBRCxHQUNBLElBQUEwRixFQUFBMUYsRUFBQWdELFlBQ0EsR0FBQTBDLEVBQWdCLFFBQUEvUyxFQUFBLEVBQWdCQSxFQUFBK1MsRUFBQXBPLFNBQWdCM0UsRUFDdkMsTUFBQStTLEVBQUEvUyxHQUFBb00sTUFBMkJzYyxFQUFBbGUsS0FBQXVJLEVBQUEvUyxHQUFBNFAsVUFFcEM4WSxHQUdBMHZCLGFBQUEsU0FBQXZnQyxHQUNBLElBQUF6TSxFQUFBa0ksRUFBQXRLLEtBQUE0RCxNQUFBeXJDLEVBQUFydkMsS0FBQWtzQyxnQkFBQXZ3QyxPQU9BLE9BTkFxRSxLQUFBc0UsS0FBQSxTQUFBRCxHQUNBLElBQUFILEVBQUFHLEVBQUFFLEtBQUE1SSxPQUFBMHpDLEVBQ0EsR0FBQW5yQyxFQUFBMkssRUFBK0IsT0FBVnpNLEVBQUF5TSxHQUFVLEVBQy9CQSxHQUFBM0ssSUFDQW9HLElBRUFsRSxHQUFBcEcsS0FBQTBGLEdBQUE0RSxFQUFBbEksS0FFQWt0QyxhQUFBLFNBQUF2bkIsR0FFQSxJQUFBcnNCLEdBREFxc0IsRUFBQTNoQixHQUFBcEcsS0FBQStuQixJQUNBM2xCLEdBQ0EsR0FBQTJsQixFQUFBMWpCLEtBQUFyRSxLQUFBNEQsT0FBQW1rQixFQUFBM2xCLEdBQUEsRUFBb0QsU0FDcEQsSUFBQWl0QyxFQUFBcnZDLEtBQUFrc0MsZ0JBQUF2d0MsT0FJQSxPQUhBcUUsS0FBQXNFLEtBQUF0RSxLQUFBNEQsTUFBQW1rQixFQUFBMWpCLEtBQUEsU0FBQUEsR0FDQTNJLEdBQUEySSxFQUFBRSxLQUFBNUksT0FBQTB6QyxJQUVBM3pDLEdBR0FtZCxLQUFBLFNBQUEwMkIsR0FDQSxJQUFBNXJDLEVBQUEsSUFBQWlvQyxHQUFBcG5DLEdBQUF4RSxVQUFBNEQsTUFBQTVELEtBQUE0RCxNQUFBNUQsS0FBQTZELE1BQ0E3RCxLQUFBcWdDLFdBQUFyZ0MsS0FBQTRELE1BQUE1RCxLQUFBNnJDLFFBQUE3ckMsS0FBQTBNLFdBUUEsT0FQQS9JLEVBQUEyakIsVUFBQXRuQixLQUFBc25CLFVBQW1DM2pCLEVBQUF1akIsV0FBQWxuQixLQUFBa25CLFdBQ25DdmpCLEVBQUFrb0IsSUFBQTdyQixLQUFBNnJCLElBQ0Fsb0IsRUFBQTY0QixRQUFBLEVBQ0ErUyxJQUNBNXJDLEVBQUE0L0IsUUFBQWxCLFVBQUFyaUMsS0FBQXVqQyxRQUFBbEIsVUFDQTErQixFQUFBd3FDLFdBQUFudUMsS0FBQWt1QyxlQUVBdnFDLEdBR0E2ckMsVUFBQSxTQUFBbHFDLEdBQ0FBLElBQW1CQSxNQUNuQixJQUFBbEMsRUFBQXBELEtBQUE0RCxNQUFBUCxFQUFBckQsS0FBQTRELE1BQUE1RCxLQUFBNkQsS0FDQSxNQUFBeUIsRUFBQWxDLE1BQUFrQyxFQUFBbEMsU0FBc0RBLEVBQUFrQyxFQUFBbEMsTUFDdEQsTUFBQWtDLEVBQUFqQyxJQUFBaUMsRUFBQWpDLE9BQWdEQSxFQUFBaUMsRUFBQWpDLElBQ2hELElBQUF3VixFQUFBLElBQUEreUIsR0FBQXBuQyxHQUFBeEUsS0FBQW9ELEVBQUFDLEdBQUFpQyxFQUFBbk4sTUFBQTZILEtBQUFxZ0MsV0FBQWo5QixFQUFBcEQsS0FBQTZyQyxRQUFBN3JDLEtBQUEwTSxXQUtBLE9BSkFwSCxFQUFBcThCLGFBQTZCOW9CLEVBQUEwcUIsUUFBQXZqQyxLQUFBdWpDLFVBQ3RCdmpDLEtBQUE0aEMsU0FBQTVoQyxLQUFBNGhDLFlBQUFwZ0MsTUFBMENtQyxJQUFBa1YsRUFBQThvQixXQUFBcjhCLEVBQUFxOEIsYUFDakQ5b0IsRUFBQStvQixTQUFvQmorQixJQUFBM0QsS0FBQTJxQyxVQUFBLEVBQUFoSixXQUFBcjhCLEVBQUFxOEIsYUFsWnBCLFNBQUFoK0IsRUFBQStiLEdBQ0EsUUFBQTFvQixFQUFBLEVBQWlCQSxFQUFBMG9CLEVBQUEvakIsT0FBb0IzRSxJQUFBLENBQ3JDLElBQUE0UCxFQUFBOFksRUFBQTFvQixHQUFBaUssRUFBQTJGLEVBQUE4QyxPQUNBK2xDLEVBQUE5ckMsRUFBQXlDLFFBQUFuRixFQUFBbUMsTUFBQXNzQyxFQUFBL3JDLEVBQUF5QyxRQUFBbkYsRUFBQW9DLElBQ0EsR0FBQXVDLEdBQUE2cEMsRUFBQUMsR0FBQSxDQUNBLElBQUFDLEVBQUFsRixHQUFBOW1DLEVBQUE4ckMsRUFBQUMsRUFBQTlvQyxFQUFBNmtCLFFBQUE3a0IsRUFBQTZrQixRQUFBM2pCLE1BQ0FsQixFQUFBOFksUUFBQWxlLEtBQUFtdUMsR0FDQUEsRUFBQXh6QyxPQUFBeUssSUE0WUFncEMsQ0FBQS8yQixFQUFBMHlCLEdBQUF2ckMsT0FDQTZZLEdBRUFnM0IsVUFBQSxTQUFBcm5CLEdBSUEsR0FEQUEsYUFBQXNuQixLQUF3Q3RuQixJQUFBN2tCLEtBQ3hDM0QsS0FBQTRoQyxPQUFzQixRQUFBNXFDLEVBQUEsRUFBZ0JBLEVBQUFnSixLQUFBNGhDLE9BQUFqbUMsU0FBd0IzRSxFQUFBLENBQzlELElBQUErNEMsRUFKQS92QyxLQUlBNGhDLE9BQUE1cUMsR0FDQSxHQUFBKzRDLEVBQUFwc0MsS0FBQTZrQixFQUFBLENBTEF4b0IsS0FNQTRoQyxPQUFBNTRCLE9BQUFoUyxFQUFBLEdBQ0F3eEIsRUFBQXFuQixVQVBBN3ZDLE1BUUF5ckMsR0FBQUYsR0FSQXZyQyxPQVNBLE9BR0EsR0FBQXdvQixFQUFBK2EsU0FBQXZqQyxLQUFBdWpDLFFBQUEsQ0FDQSxJQUFBeU0sR0FBQXhuQixFQUFBdm9CLElBQ0FzaEMsR0FBQS9ZLEVBQUEsU0FBQTdrQixHQUF3QyxPQUFBcXNDLEVBQUF4dUMsS0FBQW1DLEVBQUExRCxNQUFnQyxHQUN4RXVvQixFQUFBK2EsUUFBQSxJQUFBdEIsR0FBQSxNQUNBelosRUFBQSthLFFBQUFwQixLQUFBb0MsR0FBQXZrQyxLQUFBdWpDLFFBQUFwQixLQUFBNk4sR0FDQXhuQixFQUFBK2EsUUFBQW5CLE9BQUFtQyxHQUFBdmtDLEtBQUF1akMsUUFBQW5CLE9BQUE0TixLQUdBQyxlQUFBLFNBQUF2eEMsR0FBK0I2aUMsR0FBQXZoQyxLQUFBdEIsSUFFL0JtVSxRQUFBLFdBQXVCLE9BQUE3UyxLQUFBN0gsTUFDdkIrM0MsVUFBQSxXQUF5QixPQUFBbHdDLEtBQUFzTCxJQUV6QnE5QixXQUFBLFNBQUE1bEMsR0FDQSxPQUFBL0MsS0FBQTZyQyxRQUF1QjlvQyxFQUFBbkYsTUFBQW9DLEtBQUE2ckMsU0FDdkJuNkIsR0FBQTNPLElBRUFtcEMsY0FBQSxXQUE2QixPQUFBbHNDLEtBQUE2ckMsU0FBQSxNQUU3QnNFLGFBQUF2VyxHQUFBLFNBQUE1MkIsR0FDQSxPQUFBQSxJQUF1QkEsRUFBQSxPQUN2QkEsR0FBQWhELEtBQUEwTSxZQUNBMU0sS0FBQTBNLFVBQUExSixFQUNBaEQsS0FBQXNFLEtBQUEsU0FBQUQsR0FBK0IsT0FBQUEsRUFBQXdILE1BQUEsT0FDL0I3TCxLQUFBc0wsSUF0cURBLFNBQUFBLEdBQ0FtdUIsR0FBQW51QixFQUFBLFdBQ0EwMkIsR0FBQTEyQixHQUNBdXVCLEdBQUF2dUIsS0FtcURrQjhrQyxDQUFBcHdDLEtBQUFzTCxTQUtsQnNnQyxHQUFBaHpDLFVBQUF5M0MsU0FBQXpFLEdBQUFoekMsVUFBQTBMLEtBSUEsSUFBQWdzQyxHQUFBLEVBRUEsU0FBQUMsR0FBQTEwQyxHQUNBLElBQUF5UCxFQUFBdEwsS0FFQSxHQURBd3dDLEdBQUFsbEMsSUFDQTRELEdBQUE1RCxFQUFBelAsS0FBQTZsQixHQUFBcFcsRUFBQUMsUUFBQTFQLEdBQUEsQ0FFQWtVLEdBQUFsVSxHQUNBcEMsSUFBVzYyQyxJQUFBLElBQUF4VixNQUNYLElBQUE3NUIsRUFBQTZwQixHQUFBeGYsRUFBQXpQLEdBQUEsR0FBQTQwQyxFQUFBNTBDLEVBQUE2MEMsYUFBQUQsTUFDQSxHQUFBeHZDLElBQUFxSyxFQUFBcWxDLGFBR0EsR0FBQUYsS0FBQTkwQyxRQUFBL0UsT0FBQWc2QyxZQUFBaDZDLE9BQUFpNkMsS0F1QkEsSUF0QkEsSUFBQXA0QyxFQUFBZzRDLEVBQUE5MEMsT0FBQTRJLEVBQUEzRixNQUFBbkcsR0FBQXE0QyxFQUFBLEVBQ0FDLEVBQUEsU0FBQUMsRUFBQWg2QyxHQUNBLElBQUFzVSxFQUFBaEcsUUFBQTJyQyxxQkFDQSxHQUFBdHhDLEVBQUEyTCxFQUFBaEcsUUFBQTJyQyxtQkFBQUQsRUFBQWxwQyxNQURBLENBSUEsSUFBQW9wQyxFQUFBLElBQUFOLFdBQ0FNLEVBQUFDLE9BQUF6WCxHQUFBcHVCLEVBQUEsV0FDQSxJQUFBL08sRUFBQTIwQyxFQUFBdi9CLE9BR0EsR0FGQSwwQkFBb0N2WSxLQUFBbUQsS0FBa0JBLEVBQUEsSUFDdERnSSxFQUFBdk4sR0FBQXVGLElBQ0F1MEMsR0FBQXI0QyxFQUFBLENBRUEsSUFBQXlPLEdBQXdCOUQsS0FEeEJuQyxFQUFBbUYsR0FBQWtGLEVBQUEzSCxJQUFBMUMsR0FDd0JvQyxHQUFBcEMsRUFDeEJzRCxLQUFBK0csRUFBQTNILElBQUFnbEMsV0FBQXBrQyxFQUFBMG5DLEtBQUEzZ0MsRUFBQTNILElBQUF1b0Msa0JBQ0FyckMsT0FBQSxTQUNBOGxDLEdBQUFyN0IsRUFBQTNILElBQUF1RCxHQUNBbStCLEdBQUEvNUIsRUFBQTNILElBQUFvOEIsR0FBQTkrQixFQUFBKytCLEdBQUE5NEIsUUFHQWdxQyxFQUFBRSxXQUFBSixLQUVBaDZDLEVBQUEsRUFBbUJBLEVBQUF5QixJQUFPekIsRUFBTys1QyxFQUFBTixFQUFBejVDLFVBQzlCLENBRUgsR0FBQXNVLEVBQUFrSSxNQUFBNjlCLGNBQUEvbEMsRUFBQTNILElBQUFrb0IsSUFBQS91QixTQUFBbUUsSUFBQSxFQUlBLE9BSEFxSyxFQUFBa0ksTUFBQTY5QixhQUFBeDFDLFFBRUF5RSxXQUFBLFdBQThCLE9BQUFnTCxFQUFBQyxRQUFBaVIsTUFBQTBTLFNBQW1DLElBR2pFLElBQ0EsSUFBQW9pQixFQUFBejFDLEVBQUE2MEMsYUFBQWEsUUFBQSxRQUNBLEdBQUFELEVBQUEsQ0FDQSxJQUFBRSxFQUlBLEdBSEFsbUMsRUFBQWtJLE1BQUE2OUIsZUFBQS9sQyxFQUFBa0ksTUFBQTY5QixhQUFBeDRCLE9BQ1cyNEIsRUFBQWxtQyxFQUFBbWhDLGtCQUNYbkgsR0FBQWg2QixFQUFBM0gsSUFBQW84QixHQUFBOStCLE1BQ0F1d0MsRUFBdUIsUUFBQXRzQyxFQUFBLEVBQWtCQSxFQUFBc3NDLEVBQUE3MUMsU0FBdUJ1SixFQUNyRHVqQyxHQUFBbjlCLEVBQUEzSCxJQUFBLEdBQUE2dEMsRUFBQXRzQyxHQUFBa2xCLE9BQUFvbkIsRUFBQXRzQyxHQUFBaW5CLEtBQUEsUUFDWDdnQixFQUFBeWhDLGlCQUFBdUUsRUFBQSxrQkFDQWhtQyxFQUFBQyxRQUFBaVIsTUFBQTBTLFNBR0EsTUFBQXJ6QixPQXVDQSxTQUFBMjBDLEdBQUFsbEMsR0FDQUEsRUFBQUMsUUFBQWttQyxhQUNBbm1DLEVBQUFDLFFBQUF3VyxVQUFBL2xCLFlBQUFzUCxFQUFBQyxRQUFBa21DLFlBQ0FubUMsRUFBQUMsUUFBQWttQyxXQUFBLE1BUUEsU0FBQUMsR0FBQWh6QyxHQUNBLEdBQUEvRSxTQUFBZzRDLHVCQUVBLElBREEsSUFBQUMsRUFBQWo0QyxTQUFBZzRDLHVCQUFBLGNBQ0EzNkMsRUFBQSxFQUFpQkEsRUFBQTQ2QyxFQUFBajJDLE9BQW9CM0UsSUFBQSxDQUNyQyxJQUFBc1UsRUFBQXNtQyxFQUFBNTZDLEdBQUE2NkMsV0FDQXZtQyxHQUFhNU0sRUFBQTRNLElBSWIsSUFBQXdtQyxJQUFBLEVBQ0EsU0FBQUMsS0FDQUQsS0FJQSxXQUVBLElBQUFFLEVBQ0EzakMsR0FBQXpYLE9BQUEsb0JBQ0EsTUFBQW83QyxJQUE4QkEsRUFBQTF4QyxXQUFBLFdBQzlCMHhDLEVBQUEsS0FDQU4sR0FBQU8sS0FDSyxRQUdMNWpDLEdBQUF6WCxPQUFBLGtCQUFrQyxPQUFBODZDLEdBQUFwaUIsTUFibEM0aUIsR0FDQUosSUFBQSxHQWVBLFNBQUFHLEdBQUEzbUMsR0FDQSxJQUFBaFUsRUFBQWdVLEVBQUFDLFFBRUFqVSxFQUFBc3ZCLGdCQUFBdHZCLEVBQUF1dkIsaUJBQUF2dkIsRUFBQTZxQixlQUFBLEtBQ0E3cUIsRUFBQWtnQyxtQkFBQSxFQUNBbHNCLEVBQUE2bUMsVUFlQSxJQVpBLElBQUFDLElBQ0FDLEVBQUEsUUFBQUMsRUFBQSxZQUFBQyxFQUFBLE1BQUFDLEdBQUEsUUFBQUMsR0FBQSxRQUFBQyxHQUFBLE9BQUFDLEdBQUEsTUFDQUMsR0FBQSxRQUFBQyxHQUFBLFdBQUFDLEdBQUEsTUFBQUMsR0FBQSxRQUFBQyxHQUFBLFNBQUFDLEdBQUEsV0FBQUMsR0FBQSxNQUNBQyxHQUFBLE9BQUFDLEdBQUEsT0FBQUMsR0FBQSxLQUFBQyxHQUFBLFFBQUFDLEdBQUEsT0FBQUMsR0FBQSxZQUFBQyxHQUFBLFNBQ0FDLEdBQUEsU0FBQUMsR0FBQSxJQUFzQkMsR0FBQSxJQUFBQyxHQUFBLE1BQUFDLEdBQUEsTUFBQUMsR0FBQSxNQUN0QkMsSUFBQSxJQUFBQyxJQUFBLElBQUFDLElBQUEsSUFBQUMsSUFBQSxJQUFBQyxJQUFBLElBQUFDLElBQUEsU0FBQUMsSUFBQSxhQUNBQyxJQUFBLElBQUFDLElBQUEsSUFBbUJDLElBQUEsSUFBQUMsSUFBQSxJQUFBQyxJQUFBLElBQUFDLElBQUEsSUFBQUMsSUFBQSxJQUFBQyxJQUFBLElBQUFDLElBQUEsSUFBQUMsSUFBQSxLQUNuQkMsSUFBQSxJQUFBQyxJQUFBLElBQUFDLE1BQUEsS0FBQUMsTUFBQSxPQUFBQyxNQUFBLE9BQUFDLE1BQUEsUUFBQUMsTUFBQSxTQUNBQyxNQUFBLE9BQUFDLE1BQUEsTUFBQUMsTUFBQSxTQUFBQyxNQUFBLFdBQUFDLE1BQUEsVUFJQTUrQyxHQUFBLEVBQWVBLEdBQUEsR0FBUUEsS0FBT283QyxHQUFBcDdDLEdBQUEsSUFBQW83QyxHQUFBcDdDLEdBQUEsSUFBQXVPLE9BQUF2TyxJQUU5QixRQUFBa08sR0FBQSxHQUFrQkEsSUFBQSxHQUFXQSxLQUFTa3RDLEdBQUFsdEMsSUFBQUssT0FBQXN3QyxhQUFBM3dDLElBRXRDLFFBQUEyRCxHQUFBLEVBQWlCQSxJQUFBLEdBQVdBLEtBQVN1cEMsR0FBQXZwQyxHQUFBLEtBQUF1cEMsR0FBQXZwQyxHQUFBLFdBQUFBLEdBRXJDLElBQUFpdEMsTUE2Q0EsU0FBQUMsR0FBQXgrQyxHQUNBLElBRUF5K0MsRUFBQUMsRUFBQXRtQixFQUFBdW1CLEVBRkFuUCxFQUFBeHZDLEVBQUFxRyxNQUFBLFVBQ0FyRyxFQUFBd3ZDLElBQUFwckMsT0FBQSxHQUVBLFFBQUEzRSxFQUFBLEVBQWlCQSxFQUFBK3ZDLEVBQUFwckMsT0FBQSxFQUFzQjNFLElBQUEsQ0FDdkMsSUFBQW0vQyxFQUFBcFAsRUFBQS92QyxHQUNBLHFCQUFBb0MsS0FBQSs4QyxHQUFzQ0QsR0FBQSxPQUN0QyxlQUFBOThDLEtBQUErOEMsR0FBcUNILEdBQUEsT0FDckMseUJBQUE1OEMsS0FBQSs4QyxHQUErQ0YsR0FBQSxNQUMvQyxtQkFBQTc4QyxLQUFBKzhDLEdBQ1UsVUFBQXJ5QyxNQUFBLCtCQUFBcXlDLEdBRDZCeG1CLEdBQUEsR0FPdkMsT0FKQXFtQixJQUFZeitDLEVBQUEsT0FBQUEsR0FDWjArQyxJQUFhMStDLEVBQUEsUUFBQUEsR0FDYjIrQyxJQUFZMytDLEVBQUEsT0FBQUEsR0FDWm80QixJQUFjcDRCLEVBQUEsU0FBQUEsR0FDZEEsRUFRQSxTQUFBNitDLEdBQUFDLEdBQ0EsSUFBQXg5QixLQUNBLFFBQUF5OUIsS0FBQUQsRUFBK0IsR0FBQUEsRUFBQXg5QyxlQUFBeTlDLEdBQUEsQ0FDL0IsSUFBQXIrQyxFQUFBbytDLEVBQUFDLEdBQ0Esc0NBQUFsOUMsS0FBQWs5QyxHQUEyRCxTQUMzRCxVQUFBcitDLEVBQUEsUUFBeUJvK0MsRUFBQUMsR0FBd0IsU0FHakQsSUFEQSxJQUFBQyxFQUFBNTBDLEVBQUEyMEMsRUFBQTE0QyxNQUFBLEtBQUFtNEMsSUFDQS8rQyxFQUFBLEVBQW1CQSxFQUFBdS9DLEVBQUE1NkMsT0FBaUIzRSxJQUFBLENBQ3BDLElBQUEwYyxPQUFBLEVBQUFuYyxPQUFBLEVBQ0FQLEdBQUF1L0MsRUFBQTU2QyxPQUFBLEdBQ0FwRSxFQUFBZy9DLEVBQUF0SyxLQUFBLEtBQ0F2NEIsRUFBQXpiLElBRUFWLEVBQUFnL0MsRUFBQTk2QyxNQUFBLEVBQUF6RSxFQUFBLEdBQUFpMUMsS0FBQSxLQUNBdjRCLEVBQUEsT0FFQSxJQUFBN0csRUFBQWdNLEVBQUF0aEIsR0FDQSxHQUFBc1YsR0FDQSxHQUFBQSxHQUFBNkcsRUFBNkIsVUFBQTVQLE1BQUEsNkJBQUF2TSxRQURYc2hCLEVBQUF0aEIsR0FBQW1jLFNBR2xCMmlDLEVBQUFDLEdBRUEsUUFBQW4zQyxLQUFBMFosRUFBMEJ3OUIsRUFBQWwzQyxHQUFBMFosRUFBQTFaLEdBQzFCLE9BQUFrM0MsRUFHQSxTQUFBRyxHQUFBaitDLEVBQUFrVyxFQUFBeTZCLEVBQUFoekIsR0FFQSxJQUFBNU4sR0FEQW1HLEVBQUFnb0MsR0FBQWhvQyxJQUNBdFgsS0FBQXNYLEVBQUF0WCxLQUFBb0IsRUFBQTJkLEdBQUF6SCxFQUFBbFcsR0FDQSxRQUFBK1AsRUFBd0IsZ0JBQ3hCLFdBQUFBLEVBQXdCLGNBQ3hCLFNBQUFBLEdBQUE0Z0MsRUFBQTVnQyxHQUF1QyxnQkFFdkMsR0FBQW1HLEVBQUFpb0MsWUFBQSxDQUNBLHFCQUFBaC9DLE9BQUFrQixVQUFBNkgsU0FBQXRKLEtBQUFzWCxFQUFBaW9DLGFBQ08sT0FBQUYsR0FBQWorQyxFQUFBa1csRUFBQWlvQyxZQUFBeE4sRUFBQWh6QixHQUNQLFFBQUFsZixFQUFBLEVBQW1CQSxFQUFBeVgsRUFBQWlvQyxZQUFBLzZDLE9BQStCM0UsSUFBQSxDQUNsRCxJQUFBMmEsRUFBQTZrQyxHQUFBaitDLEVBQUFrVyxFQUFBaW9DLFlBQUExL0MsR0FBQWt5QyxFQUFBaHpCLEdBQ0EsR0FBQXZFLEVBQW1CLE9BQUFBLElBT25CLFNBQUFnbEMsR0FBQTErQyxHQUNBLElBQUFWLEVBQUEsaUJBQUFVLElBQUFtNkMsR0FBQW42QyxFQUFBMitDLFNBQ0EsY0FBQXIvQyxHQUFBLE9BQUFBLEdBQUEsU0FBQUEsR0FBQSxPQUFBQSxFQUdBLFNBQUFzL0MsR0FBQXQvQyxFQUFBbXRDLEVBQUFvUyxHQUNBLElBQUEvMEMsRUFBQXhLLEVBS0EsT0FKQW10QyxFQUFBcVMsUUFBQSxPQUFBaDFDLElBQXNDeEssRUFBQSxPQUFBQSxJQUN0Q3VELEVBQUE0cEMsRUFBQXNTLFFBQUF0UyxFQUFBaDBCLFVBQUEsUUFBQTNPLElBQXdFeEssRUFBQSxRQUFBQSxJQUN4RXVELEVBQUE0cEMsRUFBQWgwQixRQUFBZzBCLEVBQUFzUyxVQUFBLE9BQUFqMUMsSUFBdUV4SyxFQUFBLE9BQUFBLElBQ3ZFdS9DLEdBQUFwUyxFQUFBdVMsVUFBQSxTQUFBbDFDLElBQXNEeEssRUFBQSxTQUFBQSxHQUN0REEsRUFJQSxTQUFBMi9DLEdBQUF4UyxFQUFBb1MsR0FDQSxHQUFBOThDLEdBQUEsSUFBQTBxQyxFQUFBa1MsU0FBQWxTLEVBQUEsS0FBdUQsU0FDdkQsSUFBQW50QyxFQUFBNjZDLEdBQUExTixFQUFBa1MsU0FDQSxhQUFBci9DLElBQUFtdEMsRUFBQXlTLGNBR0EsR0FBQXpTLEVBQUFrUyxTQUFBbFMsRUFBQXg0QixPQUF5QzNVLEVBQUFtdEMsRUFBQXg0QixNQUN6QzJxQyxHQUFBdC9DLEVBQUFtdEMsRUFBQW9TLElBR0EsU0FBQUwsR0FBQS9pQyxHQUNBLHVCQUFBQSxFQUFBb2lDLEdBQUFwaUMsS0FLQSxTQUFBMGpDLEdBQUE5ckMsRUFBQStyQyxHQUlBLElBSEEsSUFBQXZyQixFQUFBeGdCLEVBQUEzSCxJQUFBa29CLElBQUFDLE9BQUF3ckIsS0FHQXRnRCxFQUFBLEVBQWlCQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxJQUFBLENBRXBDLElBREEsSUFBQXVnRCxFQUFBRixFQUFBdnJCLEVBQUE5MEIsSUFDQXNnRCxFQUFBMzdDLFFBQUFpSyxHQUFBMnhDLEVBQUFuMEMsS0FBQTNCLEVBQUE2MUMsR0FBQWowQyxLQUFBLElBQ0EsSUFBQW0wQyxFQUFBRixFQUFBcFUsTUFDQSxHQUFBdDlCLEdBQUE0eEMsRUFBQXAwQyxLQUFBbTBDLEVBQUFuMEMsTUFBQSxHQUNBbTBDLEVBQUFuMEMsS0FBQW8wQyxFQUFBcDBDLEtBQ0EsT0FHQWswQyxFQUFBOTFDLEtBQUErMUMsR0FHQTlkLEdBQUFudUIsRUFBQSxXQUNBLFFBQUF0VSxFQUFBc2dELEVBQUEzN0MsT0FBQSxFQUFpQzNFLEdBQUEsRUFBUUEsSUFDbEN5eEMsR0FBQW45QixFQUFBM0gsSUFBQSxHQUFBMnpDLEVBQUF0Z0QsR0FBQW9NLEtBQUFrMEMsRUFBQXRnRCxHQUFBcU0sR0FBQSxXQUNQd3VCLEdBQUF2bUIsS0FJQSxTQUFBbXNDLEdBQUFwekMsRUFBQWpDLEVBQUFZLEdBQ0EsSUFBQS9ELEVBQUE2RCxHQUFBdUIsRUFBQUUsS0FBQW5DLEVBQUFZLEtBQ0EsT0FBQS9ELEVBQUEsR0FBQUEsRUFBQW9GLEVBQUFFLEtBQUE1SSxPQUFBLEtBQUFzRCxFQUdBLFNBQUF5NEMsR0FBQXJ6QyxFQUFBdkcsRUFBQWtGLEdBQ0EsSUFBQVosRUFBQXExQyxHQUFBcHpDLEVBQUF2RyxFQUFBc0UsR0FBQVksR0FDQSxhQUFBWixFQUFBLFNBQUFzRCxHQUFBNUgsRUFBQXVHLEtBQUFqQyxFQUFBWSxFQUFBLG9CQUdBLFNBQUEyMEMsR0FBQUMsRUFBQXRzQyxFQUFBSixFQUFBdEcsRUFBQTVCLEdBQ0EsR0FBQTQwQyxFQUFBLENBQ0EsSUFBQS9yQyxFQUFBc0MsR0FBQWpELEVBQUFJLEVBQUEzSCxJQUFBK0ksV0FDQSxHQUFBYixFQUFBLENBQ0EsSUFHQXpKLEVBSEFnYSxFQUFBcFosRUFBQSxFQUFBdkIsRUFBQW9LLEtBQUEsR0FDQWdzQyxFQUFBNzBDLEVBQUEsT0FBQW9aLEVBQUEzUCxPQUNBOUcsRUFBQWt5QyxFQUFBLGlCQVFBLEdBQUF6N0IsRUFBQTNQLE1BQUEsVUFBQW5CLEVBQUEzSCxJQUFBK0ksVUFBQSxDQUNBLElBQUFvckMsRUFBQXgwQixHQUFBaFksRUFBQUosR0FDQTlJLEVBQUFZLEVBQUEsRUFBQWtJLEVBQUEzRyxLQUFBNUksT0FBQSxJQUNBLElBQUF5dEIsRUFBQS9GLEdBQUEvWCxFQUFBd3NDLEVBQUExMUMsR0FBQXFpQixJQUNBcmlCLEVBQUFjLEdBQUEsU0FBQWQsR0FBc0MsT0FBQWloQixHQUFBL1gsRUFBQXdzQyxFQUFBMTFDLEdBQUFxaUIsS0FBQTJFLEdBQTZEcG1CLEVBQUEsT0FBQW9aLEVBQUEzUCxPQUFBMlAsRUFBQWhaLEtBQUFnWixFQUFBL1ksR0FBQSxFQUFBakIsR0FDbkcsVUFBQXVELElBQWlDdkQsRUFBQXExQyxHQUFBdnNDLEVBQUE5SSxFQUFBLFNBQ25CQSxFQUFBWSxFQUFBLEVBQUFvWixFQUFBL1ksR0FBQStZLEVBQUFoWixLQUNkLFdBQUFzQyxHQUFBZCxFQUFBeEMsRUFBQXVELElBR0EsV0FBQUQsR0FBQWQsRUFBQTVCLEVBQUEsRUFBQWtJLEVBQUEzRyxLQUFBNUksT0FBQSxFQUFBcUgsRUFBQSxvQkF6TUE4eUMsR0FBQWlDLE9BQ0FDLEtBQUEsYUFBQUMsTUFBQSxjQUFBQyxHQUFBLFdBQUFDLEtBQUEsYUFDQUMsSUFBQSxZQUFBQyxLQUFBLG1CQUFBQyxPQUFBLFdBQUFDLFNBQUEsYUFDQUMsT0FBQSxlQUFBQyxVQUFBLGdCQUFBQyxrQkFBQSxnQkFDQUMsSUFBQSxhQUFBQyxZQUFBLGFBQ0FDLE1BQUEsbUJBQUFDLE9BQUEsa0JBQ0FDLElBQUEsbUJBS0FqRCxHQUFBa0QsV0FDQUMsU0FBQSxZQUFBQyxTQUFBLGFBQUFDLFNBQUEsT0FBQUMsZUFBQSxPQUFBQyxTQUFBLE9BQ0FDLFlBQUEsYUFBQUMsV0FBQSxXQUFBQyxVQUFBLFdBQUFDLFlBQUEsYUFDQUMsWUFBQSxjQUFBQyxhQUFBLGVBQUFDLFdBQUEsY0FBQUMsWUFBQSxZQUNBQyxpQkFBQSxpQkFBQUMsY0FBQSxnQkFBQUMsU0FBQSxPQUFBQyxTQUFBLE9BQ0FDLFNBQUEsV0FBQUMsZUFBQSxXQUFBQyxlQUFBLFVBQUFDLGVBQUEsYUFDQUMsU0FBQSxhQUFBQyxTQUFBLGFBQ0FDLFNBQUEsZ0JBQUFDLGVBQUEsZ0JBQUFDLFFBQUEsZ0JBQ0FoRSxZQUFBLFNBR0FaLEdBQUE2RSxRQUNBVixTQUFBLGNBQUFXLFNBQUEsYUFBQUMsU0FBQSxXQUFBQyxTQUFBLGFBQ0FDLFFBQUEsY0FBQUMsUUFBQSxhQUFBL0IsU0FBQSxjQUFBZ0MsU0FBQSxZQUNBQyxTQUFBLGFBQUFDLGVBQUEsV0FBQWpDLFNBQUEsZUFBQWtDLFNBQUEsZ0JBQ0FDLFFBQUEsZUFBQUMsZ0JBQUEsZ0JBQUFDLFNBQUEsV0FBQUMsU0FBQSxpQkFDQUMsU0FBQSxZQUVBM0YsR0FBQTRGLFlBQ0FDLFFBQUEsWUFBQUMsUUFBQSxhQUFBQyxRQUFBLE9BQUFDLGNBQUEsT0FBQUMsUUFBQSxPQUNBQyxXQUFBLGFBQUFDLFNBQUEsYUFBQUMsVUFBQSxXQUFBQyxXQUFBLFdBQUF2QyxXQUFBLGNBQ0FDLFlBQUEsZUFBQXVDLFdBQUEsYUFBQUMsWUFBQSxjQUFBZixnQkFBQSxpQkFDQWdCLHFCQUFBLGdCQUFBQyxhQUFBLGdCQUFBQyxRQUFBLE9BQUFDLFFBQUEsT0FDQUMsUUFBQSxXQUFBQyxjQUFBLFdBQUFDLFlBQUEsVUFBQUMsa0JBQUEsYUFDQUMsUUFBQSxhQUFBQyxRQUFBLGFBQUFDLGdCQUFBLHFCQUFBQyxhQUFBLHNCQUNBQyxRQUFBLGdCQUFBQyxjQUFBLGdCQUFBM0QsVUFBQSxhQUFBQyxZQUFBLFdBQ0EvQyxhQUFBLG1CQUVBWixHQUFBLFFBQUF0N0MsRUFBQXM3QyxHQUFBNEYsV0FBQTVGLEdBQUFrRCxVQTRPQSxJQUFBb0UsSUFDQTdXLGFBQ0E4VyxnQkFBQSxTQUFBL3hDLEdBQWtDLE9BQUFBLEVBQUF5NUIsYUFBQXo1QixFQUFBd21CLFVBQUEsVUFBQXhtQixFQUFBd21CLFVBQUEsUUFBQXB4QixJQUNsQzQ4QyxTQUFBLFNBQUFoeUMsR0FBMkIsT0FBQThyQyxHQUFBOXJDLEVBQUEsU0FBQW5RLEdBQzNCLEdBQUFBLEVBQUE2d0IsUUFBQSxDQUNBLElBQUE1Z0IsRUFBQTFILEdBQUE0SCxFQUFBM0gsSUFBQXhJLEVBQUFneEIsS0FBQTluQixNQUFBRSxLQUFBNUksT0FDQSxPQUFBUixFQUFBZ3hCLEtBQUEvcEIsSUFBQWdKLEdBQUFqUSxFQUFBZ3hCLEtBQUE5bkIsS0FBQWlILEVBQUFULFlBQ2tCekgsS0FBQWpJLEVBQUFneEIsS0FBQTlvQixHQUFBcUMsR0FBQXZLLEVBQUFneEIsS0FBQTluQixLQUFBLE9BRUFqQixLQUFBakksRUFBQWd4QixLQUFBOW9CLEdBQUFxQyxHQUFBdkssRUFBQWd4QixLQUFBOW5CLEtBQUErRyxJQUVsQixPQUFjaEksS0FBQWpJLEVBQUFpSSxPQUFBQyxHQUFBbEksRUFBQWtJLFNBR2RrNkMsV0FBQSxTQUFBanlDLEdBQTZCLE9BQUE4ckMsR0FBQTlyQyxFQUFBLFNBQUFuUSxHQUFrRCxPQUMvRWlJLEtBQUFzQyxHQUFBdkssRUFBQWlJLE9BQUFpQixLQUFBLEdBQ0FoQixHQUFBK0MsR0FBQWtGLEVBQUEzSCxJQUFBK0IsR0FBQXZLLEVBQUFrSSxLQUFBZ0IsS0FBQSxVQUVBbTVDLFlBQUEsU0FBQWx5QyxHQUE4QixPQUFBOHJDLEdBQUE5ckMsRUFBQSxTQUFBblEsR0FBa0QsT0FDaEZpSSxLQUFBc0MsR0FBQXZLLEVBQUFpSSxPQUFBaUIsS0FBQSxHQUFBaEIsR0FBQWxJLEVBQUFpSSxXQUVBcTZDLG1CQUFBLFNBQUFueUMsR0FBcUMsT0FBQThyQyxHQUFBOXJDLEVBQUEsU0FBQW5RLEdBQ3JDLElBQUFzcEIsRUFBQW5aLEVBQUE0YyxXQUFBL3NCLEVBQUFneEIsS0FBQSxPQUFBMUgsSUFBQSxFQUNBaTVCLEVBQUFweUMsRUFBQXVkLFlBQWlDclgsS0FBQSxFQUFBaVQsT0FBa0IsT0FDbkQsT0FBWXJoQixLQUFBczZDLEVBQUFyNkMsR0FBQWxJLEVBQUFpSSxXQUVadTZDLG9CQUFBLFNBQUFyeUMsR0FBc0MsT0FBQThyQyxHQUFBOXJDLEVBQUEsU0FBQW5RLEdBQ3RDLElBQUFzcEIsRUFBQW5aLEVBQUE0YyxXQUFBL3NCLEVBQUFneEIsS0FBQSxPQUFBMUgsSUFBQSxFQUNBbTVCLEVBQUF0eUMsRUFBQXVkLFlBQWtDclgsS0FBQWxHLEVBQUFDLFFBQUF1a0IsUUFBQTVlLFlBQUEsSUFBQXVULE9BQXFELE9BQ3ZGLE9BQVlyaEIsS0FBQWpJLEVBQUFpSSxPQUFBQyxHQUFBdTZDLE1BRVp0USxLQUFBLFNBQUFoaUMsR0FBdUIsT0FBQUEsRUFBQWdpQyxRQUN2QkMsS0FBQSxTQUFBamlDLEdBQXVCLE9BQUFBLEVBQUFpaUMsUUFDdkJDLGNBQUEsU0FBQWxpQyxHQUFnQyxPQUFBQSxFQUFBa2lDLGlCQUNoQ0MsY0FBQSxTQUFBbmlDLEdBQWdDLE9BQUFBLEVBQUFtaUMsaUJBQ2hDb1EsV0FBQSxTQUFBdnlDLEdBQTZCLE9BQUFBLEVBQUF3NUIsZ0JBQUFwL0IsR0FBQTRGLEVBQUF3MUIsWUFBQSxLQUM3QmdkLFNBQUEsU0FBQXh5QyxHQUEyQixPQUFBQSxFQUFBdzVCLGdCQUFBcC9CLEdBQUE0RixFQUFBVCxjQUMzQmt6QyxZQUFBLFNBQUF6eUMsR0FBOEIsT0FBQUEsRUFBQXFoQyxtQkFBQSxTQUFBeHhDLEdBQWdELE9BQUFpWixHQUFBOUksRUFBQW5RLEVBQUFneEIsS0FBQTluQixRQUN6RXhELE9BQUEsUUFBQXVpQixLQUFBLEtBRUw0NkIsaUJBQUEsU0FBQTF5QyxHQUFtQyxPQUFBQSxFQUFBcWhDLG1CQUFBLFNBQUF4eEMsR0FBZ0QsT0FBQThpRCxHQUFBM3lDLEVBQUFuUSxFQUFBZ3hCLFFBQzlFdHJCLE9BQUEsUUFBQXVpQixLQUFBLEtBRUw4NkIsVUFBQSxTQUFBNXlDLEdBQTRCLE9BQUFBLEVBQUFxaEMsbUJBQUEsU0FBQXh4QyxHQUFnRCxPQXdHNUUsU0FBQW1RLEVBQUFaLEdBQ0EsSUFBQXJHLEVBQUFYLEdBQUE0SCxFQUFBM0gsSUFBQStHLEdBQ0EyZ0MsRUE3bU1BLFNBQUFobkMsR0FFQSxJQURBLElBQUFtRyxFQUNBQSxFQUFBTCxHQUFBOUYsSUFDS0EsRUFBQW1HLEVBQUFkLEtBQUEsTUFBQXJGLEtBQ0wsT0FBQUEsRUF5bU1BODVDLENBQUE5NUMsR0FFQSxPQURBZ25DLEdBQUFobkMsSUFBdUJxRyxFQUFBOUYsR0FBQXltQyxJQUN2QnNNLElBQUEsRUFBQXJzQyxFQUFBakgsRUFBQXFHLEdBQUEsR0E1RzRFMHpDLENBQUE5eUMsRUFBQW5RLEVBQUFneEIsS0FBQTluQixRQUN2RXhELE9BQUEsUUFBQXVpQixNQUFBLEtBRUxpN0IsWUFBQSxTQUFBL3lDLEdBQThCLE9BQUFBLEVBQUFxaEMsbUJBQUEsU0FBQXh4QyxHQUM5QixJQUFBc3BCLEVBQUFuWixFQUFBNmMsYUFBQWh0QixFQUFBZ3hCLEtBQUEsT0FBQTFILElBQUEsRUFDQSxPQUFBblosRUFBQXVkLFlBQTBCclgsS0FBQWxHLEVBQUFDLFFBQUF1a0IsUUFBQTVlLFlBQUEsSUFBQXVULE9BQXFELFFBQzVFM2pCLElBQ0h3OUMsV0FBQSxTQUFBaHpDLEdBQTZCLE9BQUFBLEVBQUFxaEMsbUJBQUEsU0FBQXh4QyxHQUM3QixJQUFBc3BCLEVBQUFuWixFQUFBNmMsYUFBQWh0QixFQUFBZ3hCLEtBQUEsT0FBQTFILElBQUEsRUFDQSxPQUFBblosRUFBQXVkLFlBQTBCclgsS0FBQSxFQUFBaVQsT0FBa0IsUUFDekMzakIsSUFDSHk5QyxnQkFBQSxTQUFBanpDLEdBQWtDLE9BQUFBLEVBQUFxaEMsbUJBQUEsU0FBQXh4QyxHQUNsQyxJQUFBc3BCLEVBQUFuWixFQUFBNmMsYUFBQWh0QixFQUFBZ3hCLEtBQUEsT0FBQTFILElBQUEsRUFDQXhqQixFQUFBcUssRUFBQXVkLFlBQTZCclgsS0FBQSxFQUFBaVQsT0FBa0IsT0FDL0MsT0FBQXhqQixFQUFBbUIsR0FBQWtKLEVBQUE1SCxRQUFBekMsRUFBQW9ELE1BQUE1RSxPQUFBLE1BQXFEdytDLEdBQUEzeUMsRUFBQW5RLEVBQUFneEIsTUFDckRsckIsR0FDR0gsSUFDSDA5QyxTQUFBLFNBQUFsekMsR0FBMkIsT0FBQUEsRUFBQW16QyxPQUFBLFdBQzNCQyxXQUFBLFNBQUFwekMsR0FBNkIsT0FBQUEsRUFBQW16QyxNQUFBLFdBQzdCRSxTQUFBLFNBQUFyekMsR0FBMkIsT0FBQUEsRUFBQW16QyxPQUFBLFdBQzNCRyxXQUFBLFNBQUF0ekMsR0FBNkIsT0FBQUEsRUFBQW16QyxNQUFBLFdBQzdCSSxXQUFBLFNBQUF2ekMsR0FBNkIsT0FBQUEsRUFBQXd6QyxPQUFBLFdBQzdCQyxZQUFBLFNBQUF6ekMsR0FBOEIsT0FBQUEsRUFBQXd6QyxNQUFBLFdBQzlCRSxhQUFBLFNBQUExekMsR0FBK0IsT0FBQUEsRUFBQXd6QyxPQUFBLGFBQy9CRyxjQUFBLFNBQUEzekMsR0FBZ0MsT0FBQUEsRUFBQXd6QyxNQUFBLGFBQ2hDSSxXQUFBLFNBQUE1ekMsR0FBNkIsT0FBQUEsRUFBQXd6QyxPQUFBLFdBQzdCSyxhQUFBLFNBQUE3ekMsR0FBK0IsT0FBQUEsRUFBQXd6QyxNQUFBLFlBQy9CTSxZQUFBLFNBQUE5ekMsR0FBOEIsT0FBQUEsRUFBQXd6QyxPQUFBLFlBQzlCTyxZQUFBLFNBQUEvekMsR0FBOEIsT0FBQUEsRUFBQXd6QyxNQUFBLFdBQzlCUSxjQUFBLFNBQUFoMEMsR0FBZ0MsT0FBQUEsRUFBQWkwQyxTQUFBLFdBQ2hDQyxhQUFBLFNBQUFsMEMsR0FBK0IsT0FBQUEsRUFBQWkwQyxRQUFBLFdBQy9CRSxjQUFBLFNBQUFuMEMsR0FBZ0MsT0FBQUEsRUFBQWkwQyxTQUFBLFdBQ2hDRyxhQUFBLFNBQUFwMEMsR0FBK0IsT0FBQUEsRUFBQWkwQyxRQUFBLFdBQy9CSSxlQUFBLFNBQUFyMEMsR0FBaUMsT0FBQUEsRUFBQWkwQyxTQUFBLFlBQ2pDSyxjQUFBLFNBQUF0MEMsR0FBZ0MsT0FBQUEsRUFBQWkwQyxRQUFBLFlBQ2hDTSxXQUFBLFNBQUF2MEMsR0FBNkIsT0FBQUEsRUFBQXcwQyxnQkFBQSxVQUM3QkMsV0FBQSxTQUFBejBDLEdBQTZCLE9BQUFBLEVBQUF3MEMsZ0JBQUEsUUFDN0JFLFdBQUEsU0FBQTEwQyxHQUE2QixPQUFBQSxFQUFBdzBDLGdCQUFBLGFBQzdCRyxVQUFBLFNBQUEzMEMsR0FBNEIsT0FBQUEsRUFBQXloQyxpQkFBQSxPQUM1Qm1ULGNBQUEsU0FBQTUwQyxHQUVBLElBREEsSUFBQTYwQyxLQUFBcjBCLEVBQUF4Z0IsRUFBQW1oQyxpQkFBQW50QyxFQUFBZ00sRUFBQWhHLFFBQUFoRyxRQUNBdEksRUFBQSxFQUFtQkEsRUFBQTgwQixFQUFBbndCLE9BQW1CM0UsSUFBQSxDQUN0QyxJQUFBaUssRUFBQTZxQixFQUFBOTBCLEdBQUFvTSxPQUNBbEMsRUFBQTlCLEVBQUFrTSxFQUFBNUgsUUFBQXpDLEVBQUFvRCxNQUFBcEQsRUFBQW1CLEdBQUE5QyxHQUNBNmdELEVBQUEzK0MsS0FBQUQsRUFBQWpDLEVBQUE0QixFQUFBNUIsSUFFQWdNLEVBQUEyaEMsa0JBQUFrVCxJQUVBQyxXQUFBLFNBQUE5MEMsR0FDQUEsRUFBQW8wQixvQkFBaUNwMEIsRUFBQXcwQyxnQkFBQSxPQUN2QngwQyxFQUFBKzBDLFlBQUEsY0FTVkMsZUFBQSxTQUFBaDFDLEdBQWlDLE9BQUFtdUIsR0FBQW51QixFQUFBLFdBRWpDLElBREEsSUFBQXdnQixFQUFBeGdCLEVBQUFtaEMsaUJBQUF2SCxLQUNBbHVDLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQ3RDLEdBQUE4MEIsRUFBQTkwQixHQUFBZzFCLFFBQUEsQ0FDQSxJQUFBbm5CLEVBQUFpbkIsRUFBQTkwQixHQUFBbTFCLEtBQUE5bkIsRUFBQVgsR0FBQTRILEVBQUEzSCxJQUFBa0IsRUFBQVIsTUFBQUUsS0FDQSxHQUFBRixFQUVBLEdBREFRLEVBQUF6QyxJQUFBaUMsRUFBQTFJLFNBQW9Da0osRUFBQSxJQUFBYSxHQUFBYixFQUFBUixLQUFBUSxFQUFBekMsR0FBQSxJQUNwQ3lDLEVBQUF6QyxHQUFBLEVBQ0F5QyxFQUFBLElBQUFhLEdBQUFiLEVBQUFSLEtBQUFRLEVBQUF6QyxHQUFBLEdBQ0FrSixFQUFBbTlCLGFBQUFwa0MsRUFBQXBCLE9BQUE0QixFQUFBekMsR0FBQSxHQUFBaUMsRUFBQXBCLE9BQUE0QixFQUFBekMsR0FBQSxHQUNBc0QsR0FBQWIsRUFBQVIsS0FBQVEsRUFBQXpDLEdBQUEsR0FBQXlDLEVBQUEsbUJBQ1MsR0FBQUEsRUFBQVIsS0FBQWlILEVBQUEzSCxJQUFBQyxNQUFBLENBQ1QsSUFBQWlKLEVBQUFuSixHQUFBNEgsRUFBQTNILElBQUFrQixFQUFBUixLQUFBLEdBQUFFLEtBQ0FzSSxJQUNBaEksRUFBQSxJQUFBYSxHQUFBYixFQUFBUixLQUFBLEdBQ0FpSCxFQUFBbTlCLGFBQUFwa0MsRUFBQXBCLE9BQUEsR0FBQXFJLEVBQUEzSCxJQUFBdW9DLGdCQUNBci9CLEVBQUE1SixPQUFBNEosRUFBQWxSLE9BQUEsR0FDQStKLEdBQUFiLEVBQUFSLEtBQUEsRUFBQXdJLEVBQUFsUixPQUFBLEdBQUFrSixFQUFBLGVBSUFxZ0MsRUFBQTFqQyxLQUFBLElBQUFpK0IsR0FBQTU2QixNQUVBeUcsRUFBQXNoQyxjQUFBMUgsTUFFQXFiLGlCQUFBLFNBQUFqMUMsR0FBbUMsT0FBQW11QixHQUFBbnVCLEVBQUEsV0FFbkMsSUFEQSxJQUFBazFDLEVBQUFsMUMsRUFBQW1oQyxpQkFDQXoxQyxFQUFBd3BELEVBQUE3a0QsT0FBQSxFQUFpQzNFLEdBQUEsRUFBUUEsSUFDbENzVSxFQUFBbTlCLGFBQUFuOUIsRUFBQTNILElBQUF1b0MsZ0JBQUFzVSxFQUFBeHBELEdBQUFvekIsT0FBQW8yQixFQUFBeHBELEdBQUFtMUIsS0FBQSxVQUNQcTBCLEVBQUFsMUMsRUFBQW1oQyxpQkFDQSxRQUFBdm5DLEVBQUEsRUFBcUJBLEVBQUFzN0MsRUFBQTdrRCxPQUFtQnVKLElBQ2pDb0csRUFBQW0xQyxXQUFBRCxFQUFBdDdDLEdBQUE5QixPQUFBaUIsS0FBQSxTQUNQd3RCLEdBQUF2bUIsTUFFQW8xQyxTQUFBLFNBQUFwMUMsR0FBMkIsT0FBQUEsRUFBQXloQyxpQkFBQSxlQUMzQjRULGdCQUFBLFNBQUFyMUMsR0FBa0MsT0FBQUEsRUFBQXExQyxvQkFJbEMsU0FBQXZzQyxHQUFBOUksRUFBQVosR0FDQSxJQUFBckcsRUFBQVgsR0FBQTRILEVBQUEzSCxJQUFBK0csR0FDQTJnQyxFQUFBOWdDLEdBQUFsRyxHQUVBLE9BREFnbkMsR0FBQWhuQyxJQUF1QnFHLEVBQUE5RixHQUFBeW1DLElBQ3ZCc00sSUFBQSxFQUFBcnNDLEVBQUErL0IsRUFBQTNnQyxFQUFBLEdBUUEsU0FBQXV6QyxHQUFBM3lDLEVBQUFySyxHQUNBLElBQUFuRCxFQUFBc1csR0FBQTlJLEVBQUFySyxFQUFBb0QsTUFDQUEsRUFBQVgsR0FBQTRILEVBQUEzSCxJQUFBN0YsRUFBQXVHLE1BQ0F3SCxFQUFBc0MsR0FBQTlKLEVBQUFpSCxFQUFBM0gsSUFBQStJLFdBQ0EsSUFBQWIsR0FBQSxHQUFBQSxFQUFBLEdBQUFZLE1BQUEsQ0FDQSxJQUFBbTBDLEVBQUF4L0MsS0FBQStFLElBQUEsRUFBQTlCLEVBQUFFLEtBQUE5RSxPQUFBLE9BQ0FvaEQsRUFBQTUvQyxFQUFBb0QsTUFBQXZHLEVBQUF1RyxNQUFBcEQsRUFBQW1CLElBQUF3K0MsR0FBQTMvQyxFQUFBbUIsR0FDQSxPQUFBc0QsR0FBQTVILEVBQUF1RyxLQUFBdzhDLEVBQUEsRUFBQUQsRUFBQTlpRCxFQUFBNkgsUUFFQSxPQUFBN0gsRUFJQSxTQUFBZ2pELEdBQUF4MUMsRUFBQXkxQyxFQUFBQyxHQUNBLG9CQUFBRCxLQUNBQSxFQUFBM0QsR0FBQTJELElBQ2lCLFNBSWpCejFDLEVBQUFDLFFBQUFpUixNQUFBeWtDLGVBQ0EsSUFBQUMsRUFBQTUxQyxFQUFBQyxRQUFBb2tCLE1BQUF3UyxHQUFBLEVBQ0EsSUFDQTcyQixFQUFBcWxDLGVBQTBCcmxDLEVBQUFrSSxNQUFBcXpCLGVBQUEsR0FDMUJtYSxJQUFvQjExQyxFQUFBQyxRQUFBb2tCLE9BQUEsR0FDcEJ3UyxFQUFBNGUsRUFBQXoxQyxJQUFBOUssRUFDRyxRQUNIOEssRUFBQUMsUUFBQW9rQixNQUFBdXhCLEVBQ0E1MUMsRUFBQWtJLE1BQUFxekIsZUFBQSxFQUVBLE9BQUExRSxFQWVBLElBQUFnZixHQUFBLElBQUFwaEQsRUFFQSxTQUFBcWhELEdBQUE5MUMsRUFBQS9ULEVBQUFzRSxFQUFBcXRDLEdBQ0EsSUFBQW1ZLEVBQUEvMUMsRUFBQWtJLE1BQUE4dEMsT0FDQSxHQUFBRCxFQUFBLENBQ0EsR0FBQTFLLEdBQUFwL0MsR0FBOEIsZ0JBVTlCLEdBVEEsTUFBQTZCLEtBQUE3QixHQUNPK1QsRUFBQWtJLE1BQUE4dEMsT0FBQSxLQUVBSCxHQUFBaGhELElBQUEsY0FDUG1MLEVBQUFrSSxNQUFBOHRDLFFBQUFELElBQ0EvMUMsRUFBQWtJLE1BQUE4dEMsT0FBQSxLQUNBaDJDLEVBQUFDLFFBQUFpUixNQUFBaVQsV0FHQTh4QixHQUFBajJDLEVBQUErMUMsRUFBQSxJQUFBOXBELEVBQUFzRSxFQUFBcXRDLEdBQTRELFNBRTVELE9BQUFxWSxHQUFBajJDLEVBQUEvVCxFQUFBc0UsRUFBQXF0QyxHQUdBLFNBQUFxWSxHQUFBajJDLEVBQUEvVCxFQUFBc0UsRUFBQXF0QyxHQUNBLElBQUF2M0IsRUFqQ0EsU0FBQXJHLEVBQUEvVCxFQUFBMnhDLEdBQ0EsUUFBQWx5QyxFQUFBLEVBQWlCQSxFQUFBc1UsRUFBQWtJLE1BQUFndUMsUUFBQTdsRCxPQUE2QjNFLElBQUEsQ0FDOUMsSUFBQTJhLEVBQUE2a0MsR0FBQWovQyxFQUFBK1QsRUFBQWtJLE1BQUFndUMsUUFBQXhxRCxHQUFBa3lDLEVBQUE1OUIsR0FDQSxHQUFBcUcsRUFBaUIsT0FBQUEsRUFFakIsT0FBQXJHLEVBQUFoRyxRQUFBbThDLFdBQUFqTCxHQUFBai9DLEVBQUErVCxFQUFBaEcsUUFBQW04QyxVQUFBdlksRUFBQTU5QixJQUNBa3JDLEdBQUFqL0MsRUFBQStULEVBQUFoRyxRQUFBd3dDLE9BQUE1TSxFQUFBNTlCLEdBMkJBbzJDLENBQUFwMkMsRUFBQS9ULEVBQUEyeEMsR0FZQSxNQVZBLFNBQUF2M0IsSUFDS3JHLEVBQUFrSSxNQUFBOHRDLE9BQUEvcEQsR0FDTCxXQUFBb2EsR0FDS2tNLEdBQUF2UyxFQUFBLGFBQUFBLEVBQUEvVCxFQUFBc0UsR0FFTCxXQUFBOFYsR0FBQSxTQUFBQSxJQUNBNUIsR0FBQWxVLEdBQ0E0eUIsR0FBQW5qQixNQUdBcUcsRUFJQSxTQUFBZ3dDLEdBQUFyMkMsRUFBQXpQLEdBQ0EsSUFBQXRFLEVBQUEyL0MsR0FBQXI3QyxHQUFBLEdBQ0EsUUFBQXRFLElBRUFzRSxFQUFBbzdDLFdBQUEzckMsRUFBQWtJLE1BQUE4dEMsT0FJQUYsR0FBQTkxQyxFQUFBLFNBQUEvVCxFQUFBc0UsRUFBQSxTQUFBNkIsR0FBNkQsT0FBQW9qRCxHQUFBeDFDLEVBQUE1TixHQUFBLE1BQzdEMGpELEdBQUE5MUMsRUFBQS9ULEVBQUFzRSxFQUFBLFNBQUE2QixHQUNBLG9CQUFBQSxFQUFBLFdBQUF0RSxLQUFBc0UsS0FBQWtrRCxPQUNnQixPQUFBZCxHQUFBeDFDLEVBQUE1TixLQUdoQjBqRCxHQUFBOTFDLEVBQUEvVCxFQUFBc0UsRUFBQSxTQUFBNkIsR0FBa0QsT0FBQW9qRCxHQUFBeDFDLEVBQUE1TixNQVNsRCxJQUFBbWtELEdBQUEsS0FDQSxTQUFBQyxHQUFBam1ELEdBQ0EsSUFBQXlQLEVBQUF0TCxLQUVBLEdBREFzTCxFQUFBb0UsTUFBQXdmLE1BQUEveEIsS0FDQStSLEdBQUE1RCxFQUFBelAsR0FBQSxDQUVBcEMsR0FBQUMsRUFBQSxRQUFBbUMsRUFBQSs2QyxVQUFpRC82QyxFQUFBbVUsYUFBQSxHQUNqRCxJQUFBOUQsRUFBQXJRLEVBQUErNkMsUUFDQXRyQyxFQUFBQyxRQUFBb2tCLE1BQUEsSUFBQXpqQixHQUFBclEsRUFBQW83QyxTQUNBLElBQUE4SyxFQUFBSixHQUFBcjJDLEVBQUF6UCxHQUNBN0IsSUFDQTZuRCxHQUFBRSxFQUFBNzFDLEVBQUEsTUFFQTYxQyxHQUFBLElBQUE3MUMsSUFBQW9HLEtBQUE5WCxFQUFBcUIsRUFBQW03QyxRQUFBbjdDLEVBQUE2VSxVQUNPcEYsRUFBQXloQyxpQkFBQSxnQkFJUCxJQUFBN2dDLEdBQUEsMkJBQUE5UyxLQUFBa1MsRUFBQUMsUUFBQXVrQixRQUFBdjBCLFlBSUEsU0FBQStQLEdBQ0EsSUFBQXdrQixFQUFBeGtCLEVBQUFDLFFBQUF1a0IsUUFHQSxTQUFBa3lCLEVBQUFubUQsR0FDQSxJQUFBQSxFQUFBKzZDLFNBQUEvNkMsRUFBQWs3QyxTQUNBMzdDLEVBQUEwMEIsRUFBQSx3QkFDQWpoQixHQUFBbFYsU0FBQSxRQUFBcW9ELEdBQ0FuekMsR0FBQWxWLFNBQUEsWUFBQXFvRCxJQU5BemtELEVBQUF1eUIsRUFBQSx3QkFTQXpoQixHQUFBMVUsU0FBQSxRQUFBcW9ELEdBQ0EzekMsR0FBQTFVLFNBQUEsWUFBQXFvRCxHQWZLQyxDQUFBMzJDLElBa0JMLFNBQUE0MkMsR0FBQXJtRCxHQUNBLElBQUFBLEVBQUErNkMsVUFBd0I1MkMsS0FBQTJELElBQUFrb0IsSUFBQThELE9BQUEsR0FDeEJ6Z0IsR0FBQWxQLEtBQUFuRSxHQUdBLFNBQUFzbUQsR0FBQXRtRCxHQUNBLElBQUF5UCxFQUFBdEwsS0FDQSxLQUFBMGhCLEdBQUFwVyxFQUFBQyxRQUFBMVAsSUFBQXFULEdBQUE1RCxFQUFBelAsTUFBQTZVLFVBQUE3VSxFQUFBazdDLFFBQUF2OEMsR0FBQXFCLEVBQUFtN0MsU0FBQSxDQUNBLElBQUFKLEVBQUEvNkMsRUFBQSs2QyxRQUFBd0wsRUFBQXZtRCxFQUFBdW1ELFNBQ0EsR0FBQXBvRCxHQUFBNDhDLEdBQUFpTCxHQUF1RixPQUEzQ0EsR0FBQSxVQUFzQjl4QyxHQUFBbFUsR0FDbEUsSUFBQTdCLEdBQUE2QixFQUFBMlUsU0FBQTNVLEVBQUEyVSxNQUFBLE1BQUFteEMsR0FBQXIyQyxFQUFBelAsR0FBQSxDQUNBLElBQUF1RyxFQUFBbUQsT0FBQXN3QyxhQUFBLE1BQUF1TSxFQUFBeEwsRUFBQXdMLEdBRUEsTUFBQWhnRCxJQXREQSxTQUFBa0osRUFBQXpQLEVBQUF1RyxHQUNBLE9BQUFnL0MsR0FBQTkxQyxFQUFBLElBQUFsSixFQUFBLElBQUF2RyxFQUFBLFNBQUE2QixHQUEwRCxPQUFBb2pELEdBQUF4MUMsRUFBQTVOLEdBQUEsS0FzRDFEMmtELENBQUEvMkMsRUFBQXpQLEVBQUF1RyxJQUNBa0osRUFBQUMsUUFBQWlSLE1BQUEybEMsV0FBQXRtRCxNQUdBLElBYUF5bUQsR0FDQUMsR0FaQUMsR0FBQSxTQUFBN25CLEVBQUExNUIsRUFBQXdQLEdBQ0F6USxLQUFBMjZCLE9BQ0EzNkIsS0FBQWlCLE1BQ0FqQixLQUFBeVEsVUErQkEsU0FBQWd5QyxHQUFBNW1ELEdBQ0EsSUFBQXlQLEVBQUF0TCxLQUFBdUwsRUFBQUQsRUFBQUMsUUFDQSxLQUFBMkQsR0FBQTVELEVBQUF6UCxJQUFBMFAsRUFBQW0zQyxhQUFBbjNDLEVBQUFpUixNQUFBbW1DLGlCQUlBLEdBSEFwM0MsRUFBQWlSLE1BQUF5a0MsZUFDQTExQyxFQUFBb2tCLE1BQUE5ekIsRUFBQW83QyxTQUVBdjFCLEdBQUFuVyxFQUFBMVAsR0FDQWhDLElBR0EwUixFQUFBc1gsU0FBQSsvQixXQUFBLEVBQ0F0aUQsV0FBQSxXQUE4QixPQUFBaUwsRUFBQXNYLFNBQUErL0IsV0FBQSxHQUE0QyxXQUkxRSxJQUFBQyxHQUFBdjNDLEVBQUF6UCxHQUFBLENBQ0EsSUFBQW9GLEVBQUE2cEIsR0FBQXhmLEVBQUF6UCxHQUFBNFUsRUFBQUYsR0FBQTFVLEdBQUFpbkQsRUFBQTdoRCxFQXJDQSxTQUFBQSxFQUFBd1AsR0FDQSxJQUFBc3lDLEdBQUEsSUFBQWpvQixLQUNBLE9BQUF5bkIsT0FBQVMsUUFBQUQsRUFBQTloRCxFQUFBd1AsSUFDQTZ4QyxHQUFBQyxHQUFBLEtBQ0EsVUFDR0QsT0FBQVUsUUFBQUQsRUFBQTloRCxFQUFBd1AsSUFDSDh4QyxHQUFBLElBQUFDLEdBQUFPLEVBQUE5aEQsRUFBQXdQLEdBQ0E2eEMsR0FBQSxLQUNBLFdBRUFBLEdBQUEsSUFBQUUsR0FBQU8sRUFBQTloRCxFQUFBd1AsR0FDQTh4QyxHQUFBLEtBQ0EsVUF5QkFVLENBQUFoaUQsRUFBQXdQLEdBQUEsU0FDQTdaLE9BQUFzNEIsUUFHQSxHQUFBemUsR0FBQW5GLEVBQUFrSSxNQUFBMHZDLGVBQ0s1M0MsRUFBQWtJLE1BQUEwdkMsY0FBQXJuRCxHQUVMb0YsR0FjQSxTQUFBcUssRUFBQW1GLEVBQUF4UCxFQUFBNmhELEVBQUFwZSxHQUNBLElBQUFudEMsRUFBQSxRQUtBLE1BSkEsVUFBQXVyRCxFQUEyQnZyRCxFQUFBLFNBQUFBLEVBQzNCLFVBQUF1ckQsSUFBZ0N2ckQsRUFBQSxTQUFBQSxHQUdoQzZwRCxHQUFBOTFDLEVBQUF1ckMsR0FGQXQvQyxHQUFBLEdBQUFrWixFQUFBLFVBQUFBLEVBQUEsa0JBQUFsWixFQUVBbXRDLEtBQUEsU0FBQXFjLEdBRUEsR0FEQSxpQkFBQUEsSUFBbUNBLEVBQUEzRCxHQUFBMkQsS0FDbkNBLEVBQWlCLFNBQ2pCLElBQUE1ZSxHQUFBLEVBQ0EsSUFDQTcyQixFQUFBcWxDLGVBQTRCcmxDLEVBQUFrSSxNQUFBcXpCLGVBQUEsR0FDNUIxRSxFQUFBNGUsRUFBQXoxQyxFQUFBckssSUFBQVQsRUFDSyxRQUNMOEssRUFBQWtJLE1BQUFxekIsZUFBQSxFQUVBLE9BQUExRSxJQTlCQWdoQixDQUFBNzNDLEVBQUFtRixFQUFBeFAsRUFBQTZoRCxFQUFBam5ELEtBRUEsR0FBQTRVLEVBQ0F4UCxFQTRDQSxTQUFBcUssRUFBQXJLLEVBQUE2aEQsRUFBQXBlLEdBQ0FqckMsRUFBVzZHLFdBQUE5SCxFQUFBeTJCLEdBQUEzakIsR0FBQSxHQUNIQSxFQUFBb0UsTUFBQXdmLE1BQUEveEIsSUFFUixJQUVBaW1ELEVBRkFDLEVBakJBLFNBQUEvM0MsRUFBQXczQyxFQUFBcGUsR0FDQSxJQUFBNGUsRUFBQWg0QyxFQUFBaVAsVUFBQSxrQkFDQXRpQixFQUFBcXJELElBQUFoNEMsRUFBQXczQyxFQUFBcGUsTUFDQSxTQUFBenNDLEVBQUFzckQsS0FBQSxDQUNBLElBQUExL0IsRUFBQXBwQixFQUFBaXFDLEVBQUF1UyxVQUFBdlMsRUFBQXNTLFFBQUF0UyxFQUFBcVMsT0FDQTkrQyxFQUFBc3JELEtBQUExL0IsRUFBQSxzQkFBQWkvQixFQUFBLGlCQUFBQSxFQUFBLGNBS0EsT0FIQSxNQUFBN3FELEVBQUF1a0MsUUFBQWx4QixFQUFBM0gsSUFBQTY0QixVQUE4Q3ZrQyxFQUFBdWtDLE9BQUFseEIsRUFBQTNILElBQUE2NEIsUUFBQWtJLEVBQUF1UyxVQUM5QyxNQUFBaC9DLEVBQUF1ckQsU0FBNkJ2ckQsRUFBQXVyRCxPQUFBaHBELEVBQUFrcUMsRUFBQXNTLFFBQUF0UyxFQUFBaDBCLFNBQzdCLE1BQUF6WSxFQUFBd3JELGFBQWlDeHJELEVBQUF3ckQsYUFBQWpwRCxFQUFBa3FDLEVBQUFxUyxPQUFBclMsRUFBQWgwQixVQUNqQ3pZLEVBT0F5ckQsQ0FBQXA0QyxFQUFBdzNDLEVBQUFwZSxHQUVBN1ksRUFBQXZnQixFQUFBM0gsSUFBQWtvQixJQUNBdmdCLEVBQUFoRyxRQUFBcStDLFVBQUE5eUMsS0FBQXZGLEVBQUFxbEMsY0FDQSxVQUFBbVMsSUFBQU0sRUFBQXYzQixFQUFBL3VCLFNBQUFtRSxLQUFBLElBQ0EyRSxJQUFBdzlDLEVBQUF2M0IsRUFBQUMsT0FBQXMzQixJQUFBaGdELE9BQUFuQyxHQUFBLEdBQUFBLEVBQUEybkIsS0FBQSxLQUNBaGpCLEdBQUF3OUMsRUFBQS8vQyxLQUFBcEMsR0FBQSxHQUFBQSxFQUFBMm5CLEtBQUEsR0FRQSxTQUFBdGQsRUFBQW81QixFQUFBempDLEVBQUFvaUQsR0FDQSxJQUFBOTNDLEVBQUFELEVBQUFDLFFBQUFxNEMsR0FBQSxFQUNBQyxFQUFBbnFCLEdBQUFwdUIsRUFBQSxTQUFBelAsR0FDQWhDLElBQWlCMFIsRUFBQXNYLFNBQUErL0IsV0FBQSxHQUNqQnQzQyxFQUFBa0ksTUFBQTY5QixjQUFBLEVBQ0F4aUMsR0FBQXRELEVBQUFpVyxRQUFBdFAsY0FBQSxVQUFBMnhDLEdBQ0FoMUMsR0FBQXRELEVBQUFpVyxRQUFBdFAsY0FBQSxZQUFBNHhDLEdBQ0FqMUMsR0FBQXRELEVBQUFzWCxTQUFBLFlBQUFraEMsR0FDQWwxQyxHQUFBdEQsRUFBQXNYLFNBQUEsT0FBQWdoQyxHQUNBRCxJQUNBN3pDLEdBQUFsVSxHQUNBd25ELEVBQUFHLFFBQ1MxZSxHQUFBeDVCLEVBQUEzSCxJQUFBMUMsRUFBQSxVQUFBb2lELEVBQUE3bUIsUUFFVDNpQyxHQUFBSixHQUFBLEdBQUFDLEVBQ1M0RyxXQUFBLFdBQXlCaUwsRUFBQWlXLFFBQUF0UCxjQUFBN1UsS0FBQTZ4QixRQUEyQzNqQixFQUFBaVIsTUFBQTBTLFNBQXdCLElBRTVGM2pCLEVBQUFpUixNQUFBMFMsV0FHVDQwQixFQUFBLFNBQUFFLEdBQ0FKLEtBQUF4aUQsS0FBQW1qQixJQUFBbWdCLEVBQUF4WixRQUFBODRCLEVBQUE5NEIsU0FBQTlwQixLQUFBbWpCLElBQUFtZ0IsRUFBQXZaLFFBQUE2NEIsRUFBQTc0QixVQUFBLElBRUE0NEIsRUFBQSxXQUErQixPQUFBSCxHQUFBLEdBRS9CL3BELElBQWUwUixFQUFBc1gsU0FBQSsvQixXQUFBLEdBQ2Z0M0MsRUFBQWtJLE1BQUE2OUIsYUFBQXdTLEVBQ0FBLEVBQUFockMsTUFBQXdxQyxFQUFBSSxXQUVBbDRDLEVBQUFzWCxTQUFBOGdDLFVBQWtDcDRDLEVBQUFzWCxTQUFBOGdDLFdBQ2xDdDFDLEdBQUE5QyxFQUFBaVcsUUFBQXRQLGNBQUEsVUFBQTJ4QyxHQUNBeDFDLEdBQUE5QyxFQUFBaVcsUUFBQXRQLGNBQUEsWUFBQTR4QyxHQUNBejFDLEdBQUE5QyxFQUFBc1gsU0FBQSxZQUFBa2hDLEdBQ0ExMUMsR0FBQTlDLEVBQUFzWCxTQUFBLE9BQUFnaEMsR0FFQXowQixHQUFBOWpCLEdBQ0FoTCxXQUFBLFdBQTBCLE9BQUFpTCxFQUFBaVIsTUFBQTBTLFNBQWdDLElBM0NyRCswQixDQUFBMzRDLEVBQUFvNUIsRUFBQXpqQyxFQUFBb2lELEdBdURMLFNBQUEvM0MsRUFBQW81QixFQUFBNW1DLEVBQUF1bEQsR0FDQSxJQUFBOTNDLEVBQUFELEVBQUFDLFFBQUE1SCxFQUFBMkgsRUFBQTNILElBQ0FvTSxHQUFBMjBCLEdBRUEsSUFBQXdmLEVBQUFDLEVBQUFDLEVBQUF6Z0QsRUFBQWtvQixJQUFBQyxFQUFBczRCLEVBQUF0NEIsT0FZQSxHQVhBdTNCLEVBQUFHLFNBQUFILEVBQUE3bUIsUUFDQTJuQixFQUFBeGdELEVBQUFrb0IsSUFBQS91QixTQUFBZ0IsR0FFT29tRCxFQURQQyxHQUFBLEVBQ09yNEIsRUFBQXE0QixHQUVBLElBQUExa0IsR0FBQTNoQyxPQUVQb21ELEVBQUF2Z0QsRUFBQWtvQixJQUFBSixVQUNBMDRCLEVBQUF4Z0QsRUFBQWtvQixJQUFBRSxXQUdBLGFBQUFzM0IsRUFBQUUsS0FDQUYsRUFBQUcsU0FBMkJVLEVBQUEsSUFBQXprQixHQUFBM2hDLE1BQzNCQSxFQUFBZ3RCLEdBQUF4ZixFQUFBbzVCLEdBQUEsTUFDQXlmLEdBQUEsTUFDRyxDQUNILElBQUFseUMsRUFBQW95QyxHQUFBLzRDLEVBQUF4TixFQUFBdWxELEVBQUFFLE1BRU9XLEVBRFBiLEVBQUE3bUIsT0FDT29JLEdBQUFzZixFQUFBanlDLEVBQUFtWSxPQUFBblksRUFBQWthLEtBQUFrM0IsRUFBQTdtQixRQUVBdnFCLEVBR1BveEMsRUFBQUcsUUFJRyxHQUFBVyxHQUNIQSxFQUFBcjRCLEVBQUFud0IsT0FDQW9wQyxHQUFBcGhDLEVBQUFnOEIsR0FBQTdULEVBQUFuZCxRQUFBdTFDLElBQUFDLElBQ2tCeGpELFFBQUEsRUFBQUUsT0FBQSxZQUNmaXJCLEVBQUFud0IsT0FBQSxHQUFBbXdCLEVBQUFxNEIsR0FBQW40QixTQUFBLFFBQUFxM0IsRUFBQUUsT0FBQUYsRUFBQTdtQixRQUNIdUksR0FBQXBoQyxFQUFBZzhCLEdBQUE3VCxFQUFBcndCLE1BQUEsRUFBQTBvRCxHQUFBeDFDLE9BQUFtZCxFQUFBcndCLE1BQUEwb0QsRUFBQSxRQUNrQnhqRCxRQUFBLEVBQUFFLE9BQUEsV0FDbEJ1akQsRUFBQXpnRCxFQUFBa29CLEtBRUFzWixHQUFBeGhDLEVBQUF3Z0QsRUFBQUQsRUFBQXRqRCxJQVpBdWpELEVBQUEsRUFDQXBmLEdBQUFwaEMsRUFBQSxJQUFBeTdCLElBQUE4a0IsR0FBQSxHQUFBdGpELEdBQ0F3akQsRUFBQXpnRCxFQUFBa29CLEtBYUEsSUFBQXk0QixFQUFBeG1ELEVBQ0EsU0FBQXltRCxFQUFBdGpELEdBQ0EsTUFBQTJFLEdBQUEwK0MsRUFBQXJqRCxHQUdBLEdBRkFxakQsRUFBQXJqRCxFQUVBLGFBQUFvaUQsRUFBQUUsS0FBQSxDQUtBLElBSkEsSUFBQXozQixLQUFBeHNCLEVBQUFnTSxFQUFBaEcsUUFBQWhHLFFBQ0FrbEQsRUFBQXBsRCxFQUFBc0UsR0FBQUMsRUFBQTdGLEVBQUF1RyxNQUFBRSxLQUFBekcsRUFBQXNFLEdBQUE5QyxHQUNBbWxELEVBQUFybEQsRUFBQXNFLEdBQUFDLEVBQUExQyxFQUFBb0QsTUFBQUUsS0FBQXRELEVBQUFtQixHQUFBOUMsR0FDQWtTLEVBQUFwUSxLQUFBQyxJQUFBbWpELEVBQUFDLEdBQUFoekMsRUFBQXJRLEtBQUErRSxJQUFBcStDLEVBQUFDLEdBQ0FwZ0QsRUFBQWpELEtBQUFDLElBQUF2RCxFQUFBdUcsS0FBQXBELEVBQUFvRCxNQUFBdEcsRUFBQXFELEtBQUFDLElBQUFpSyxFQUFBVCxXQUFBekosS0FBQStFLElBQUFySSxFQUFBdUcsS0FBQXBELEVBQUFvRCxPQUNBQSxHQUFBdEcsRUFBdUJzRyxJQUFBLENBQ3ZCLElBQUFFLEVBQUFiLEdBQUFDLEVBQUFVLEdBQUFFLEtBQUFtNUMsRUFBQTM4QyxFQUFBd0QsRUFBQWlOLEVBQUFsUyxHQUNBa1MsR0FBQUMsRUFDV3FhLEVBQUF0cUIsS0FBQSxJQUFBaStCLEdBQUEvNUIsR0FBQXJCLEVBQUFxNUMsR0FBQWg0QyxHQUFBckIsRUFBQXE1QyxLQUNYbjVDLEVBQUE1SSxPQUFBK2hELEdBQ1c1eEIsRUFBQXRxQixLQUFBLElBQUFpK0IsR0FBQS81QixHQUFBckIsRUFBQXE1QyxHQUFBaDRDLEdBQUFyQixFQUFBdEQsRUFBQXdELEVBQUFrTixFQUFBblMsTUFFWHdzQixFQUFBbndCLFFBQTJCbXdCLEVBQUF0cUIsS0FBQSxJQUFBaStCLEdBQUEzaEMsTUFDM0JpbkMsR0FBQXBoQyxFQUFBZzhCLEdBQUF5a0IsRUFBQXQ0QixPQUFBcndCLE1BQUEsRUFBQTBvRCxHQUFBeDFDLE9BQUFtZCxHQUFBcTRCLElBQ29CdGpELE9BQUEsU0FBQUYsUUFBQSxJQUNwQjJLLEVBQUE2dEIsZUFBQWw0QixPQUNLLENBQ0wsSUFFQWtyQixFQUZBdTRCLEVBQUFSLEVBQ0FqeUMsRUFBQW95QyxHQUFBLzRDLEVBQUFySyxFQUFBb2lELEVBQUFFLE1BQ0FuNUIsRUFBQXM2QixFQUFBdDZCLE9BQ0F4a0IsR0FBQXFNLEVBQUFtWSxVQUFBLEdBQ0ErQixFQUFBbGEsRUFBQWthLEtBQ0EvQixFQUFBbmtCLEdBQUF5K0MsRUFBQXRoRCxPQUFBNk8sRUFBQW1ZLFVBRUErQixFQUFBbGEsRUFBQW1ZLE9BQ0FBLEVBQUFwa0IsR0FBQTArQyxFQUFBcmhELEtBQUE0TyxFQUFBa2EsT0FFQSxJQUFBdzRCLEVBQUFQLEVBQUF0NEIsT0FBQXJ3QixNQUFBLEdBQ0FrcEQsRUFBQVIsR0FzREEsU0FBQTc0QyxFQUFBMkcsR0FDQSxJQUFBbVksRUFBQW5ZLEVBQUFtWSxPQUNBK0IsRUFBQWxhLEVBQUFrYSxLQUNBeTRCLEVBQUFsaEQsR0FBQTRILEVBQUEzSCxJQUFBeW1CLEVBQUEvbEIsTUFDQSxNQUFBdUIsR0FBQXdrQixFQUFBK0IsSUFBQS9CLEVBQUF6a0IsUUFBQXdtQixFQUFBeG1CLE9BQStELE9BQUFzTSxFQUMvRCxJQUFBcEcsRUFBQXNDLEdBQUF5MkMsR0FDQSxJQUFBLzRDLEVBQWUsT0FBQW9HLEVBQ2YsSUFBQXZXLEVBQUFrUSxHQUFBQyxFQUFBdWUsRUFBQWhvQixHQUFBZ29CLEVBQUF6a0IsUUFBQXlXLEVBQUF2USxFQUFBblEsR0FDQSxHQUFBMGdCLEVBQUFoWixNQUFBZ25CLEVBQUFob0IsSUFBQWdhLEVBQUEvWSxJQUFBK21CLEVBQUFob0IsR0FBdUQsT0FBQTZQLEVBQ3ZELElBS0EwYSxFQUxBazRCLEVBQUFucEQsR0FBQTBnQixFQUFBaFosTUFBQWduQixFQUFBaG9CLEtBQUEsR0FBQWdhLEVBQUEzUCxPQUFBLEtBQ0EsTUFBQW80QyxNQUFBaDVDLEVBQUFsUSxPQUFrRCxPQUFBc1csRUFLbEQsR0FBQWthLEVBQUE5bkIsTUFBQStsQixFQUFBL2xCLEtBQ0Fzb0IsR0FBQVIsRUFBQTluQixLQUFBK2xCLEVBQUEvbEIsT0FBQSxPQUFBaUgsRUFBQTNILElBQUErSSxVQUFBLFlBQ0csQ0FDSCxJQUFBbzRDLEVBQUFsNUMsR0FBQUMsRUFBQXNnQixFQUFBL3BCLEdBQUErcEIsRUFBQXhtQixRQUNBM0MsRUFBQThoRCxFQUFBcHBELElBQUF5d0IsRUFBQS9wQixHQUFBZ29CLEVBQUFob0IsS0FBQSxHQUFBZ2EsRUFBQTNQLE9BQUEsS0FFT2tnQixFQURQbTRCLEdBQUFELEVBQUEsR0FBQUMsR0FBQUQsRUFDTzdoRCxFQUFBLEVBRUFBLEVBQUEsRUFHUCxJQUFBK2hELEVBQUFsNUMsRUFBQWc1QyxHQUFBbDRCLEdBQUEsTUFDQXZwQixFQUFBdXBCLElBQUEsR0FBQW80QixFQUFBdDRDLE9BQ0FySyxFQUFBZ0IsRUFBQTJoRCxFQUFBM2hELEtBQUEyaEQsRUFBQTFoRCxHQUFBc0MsRUFBQXZDLEVBQUEsaUJBQ0EsT0FBQWduQixFQUFBaG9CLE9BQUFnb0IsRUFBQXprQixVQUFBc00sRUFBQSxJQUFBd3RCLEdBQUEsSUFBQS81QixHQUFBMGtCLEVBQUEvbEIsS0FBQWpDLEVBQUF1RCxHQUFBd21CLEdBbkZBNjRCLENBQUExNUMsRUFBQSxJQUFBbTBCLEdBQUFyNUIsR0FBQXpDLEVBQUF5bUIsR0FBQStCLElBQ0E0WSxHQUFBcGhDLEVBQUFnOEIsR0FBQWdsQixFQUFBUixHQUFBdmpELElBSUEsSUFBQXFrRCxFQUFBMTVDLEVBQUFpVyxRQUFBbFEsd0JBS0E0ekMsRUFBQSxFQXNCQSxTQUFBL2lCLEVBQUF0bUMsR0FDQXlQLEVBQUFrSSxNQUFBMHZDLGVBQUEsRUFDQWdDLEVBQUFsb0MsSUFDQWpOLEdBQUFsVSxHQUNBMFAsRUFBQWlSLE1BQUEwUyxRQUNBcmdCLEdBQUF0RCxFQUFBaVcsUUFBQXRQLGNBQUEsWUFBQWl6QyxHQUNBdDJDLEdBQUF0RCxFQUFBaVcsUUFBQXRQLGNBQUEsVUFBQTh2QyxHQUNBcitDLEVBQUE0L0IsUUFBQVosY0FBQSxLQUdBLElBQUF3aUIsRUFBQXpyQixHQUFBcHVCLEVBQUEsU0FBQXpQLEdBQ0EsSUFBQUEsRUFBQXVwRCxTQUFBNzBDLEdBQUExVSxHQS9CQSxTQUFBMmdDLEVBQUEzZ0MsR0FDQSxJQUFBd3BELElBQUFILEVBQ0FyZ0QsRUFBQWltQixHQUFBeGYsRUFBQXpQLEdBQUEsZUFBQXduRCxFQUFBRSxNQUNBLEdBQUExK0MsRUFDQSxNQUFBZSxHQUFBZixFQUFBeS9DLEdBQUEsQ0FDQWg1QyxFQUFBb0UsTUFBQXdmLE1BQUEveEIsSUFDQW9uRCxFQUFBMS9DLEdBQ0EsSUFBQTIyQixFQUFBdkwsR0FBQTFrQixFQUFBNUgsSUFDQWtCLEVBQUFSLE1BQUFtM0IsRUFBQW40QixJQUFBd0IsRUFBQVIsS0FBQW0zQixFQUFBcDRCLE9BQ1M5QyxXQUFBbzVCLEdBQUFwdUIsRUFBQSxXQUF1QzQ1QyxHQUFBRyxHQUEwQjdvQixFQUFBM2dDLEtBQWMsU0FDbkYsQ0FDTCxJQUFBOHNCLEVBQUE5c0IsRUFBQXN2QixRQUFBODVCLEVBQUF4Z0MsS0FBQSxHQUFBNW9CLEVBQUFzdkIsUUFBQTg1QixFQUFBemdDLE9BQUEsS0FDQW1FLEdBQW9Ccm9CLFdBQUFvNUIsR0FBQXB1QixFQUFBLFdBQ3BCNDVDLEdBQUFHLElBQ0E5NUMsRUFBQXNYLFNBQUF5RSxXQUFBcUIsRUFDQTZULEVBQUEzZ0MsTUFDTyxLQWdCRzJnQyxDQUFBM2dDLEdBRGdDc21DLEVBQUF0bUMsS0FHMUNtbUQsRUFBQXRvQixHQUFBcHVCLEVBQUE2MkIsR0FDQTcyQixFQUFBa0ksTUFBQTB2QyxjQUFBbEIsRUFDQTN6QyxHQUFBOUMsRUFBQWlXLFFBQUF0UCxjQUFBLFlBQUFpekMsR0FDQTkyQyxHQUFBOUMsRUFBQWlXLFFBQUF0UCxjQUFBLFVBQUE4dkMsR0FwTEtzRCxDQUFBaDZDLEVBQUFvNUIsRUFBQXpqQyxFQUFBb2lELEdBekRTa0MsQ0FBQWo2QyxFQUFBckssRUFBQTZoRCxFQUFBam5ELEdBQ2R3VSxHQUFBeFUsSUFBQTBQLEVBQUFzWCxVQUErQzlTLEdBQUFsVSxHQUM1QyxHQUFBNFUsR0FDSHhQLEdBQWM2akMsR0FBQXg1QixFQUFBM0gsSUFBQTFDLEdBQ2RYLFdBQUEsV0FBNEIsT0FBQWlMLEVBQUFpUixNQUFBMFMsU0FBZ0MsS0FDekQsR0FBQXplLElBQ0gxVixFQUE0QnlxRCxHQUFBbDZDLEVBQUF6UCxHQUNsQnV6QixHQUFBOWpCLE1BOEZWLFNBQUErNEMsR0FBQS80QyxFQUFBckssRUFBQXNpRCxHQUNBLFdBQUFBLEVBQXVCLFdBQUE5akIsR0FBQXgrQixLQUN2QixXQUFBc2lELEVBQXVCLE9BQUFqNEMsRUFBQW02QyxXQUFBeGtELEdBQ3ZCLFdBQUFzaUQsRUFBdUIsV0FBQTlqQixHQUFBLzVCLEdBQUF6RSxFQUFBb0QsS0FBQSxHQUFBK0IsR0FBQWtGLEVBQUEzSCxJQUFBK0IsR0FBQXpFLEVBQUFvRCxLQUFBLE9BQ3ZCLElBQUFzTixFQUFBNHhDLEVBQUFqNEMsRUFBQXJLLEdBQ0EsV0FBQXcrQixHQUFBOXRCLEVBQUF2TyxLQUFBdU8sRUFBQXRPLElBMktBLFNBQUFxaUQsR0FBQXA2QyxFQUFBelAsRUFBQWlNLEVBQUE2OUMsR0FDQSxJQUFBQyxFQUFBQyxFQUNBLEdBQUFocUQsRUFBQWlxRCxRQUNBRixFQUFBL3BELEVBQUFpcUQsUUFBQSxHQUFBNTZCLFFBQ0EyNkIsRUFBQWhxRCxFQUFBaXFELFFBQUEsR0FBQTM2QixhQUVBLElBQVN5NkIsRUFBQS9wRCxFQUFBcXZCLFFBQWdCMjZCLEVBQUFocUQsRUFBQXN2QixRQUN6QixNQUFBdHZCLEdBQWMsU0FFZCxHQUFBK3BELEdBQUF4a0QsS0FBQXFDLE1BQUE2SCxFQUFBQyxRQUFBMlUsUUFBQTVPLHdCQUFBRyxPQUEyRSxTQUMzRWswQyxHQUFnQjUxQyxHQUFBbFUsR0FFaEIsSUFBQTBQLEVBQUFELEVBQUFDLFFBQ0F3NkMsRUFBQXg2QyxFQUFBdWtCLFFBQUF4ZSx3QkFFQSxHQUFBdTBDLEVBQUFFLEVBQUF2aEMsU0FBQTVVLEdBQUF0RSxFQUFBeEQsR0FBcUQsT0FBQXdILEdBQUF6VCxHQUNyRGdxRCxHQUFBRSxFQUFBdGhDLElBQUFsWixFQUFBb2MsV0FFQSxRQUFBM3dCLEVBQUEsRUFBaUJBLEVBQUFzVSxFQUFBaEcsUUFBQTRhLFFBQUF2a0IsU0FBK0IzRSxFQUFBLENBQ2hELElBQUFndkQsRUFBQXo2QyxFQUFBMlUsUUFBQW5rQixXQUFBL0UsR0FDQSxHQUFBZ3ZELEtBQUExMEMsd0JBQUFHLE9BQUFtMEMsRUFBQSxDQUNBLElBQUF2aEQsRUFBQVUsR0FBQXVHLEVBQUEzSCxJQUFBa2lELEdBQ0F6bUMsRUFBQTlULEVBQUFoRyxRQUFBNGEsUUFBQWxwQixHQUVBLE9BREFnWSxHQUFBMUQsRUFBQXhELEVBQUF3RCxFQUFBakgsRUFBQSthLEVBQUF2akIsR0FDQXlULEdBQUF6VCxLQUtBLFNBQUFnbkQsR0FBQXYzQyxFQUFBelAsR0FDQSxPQUFBNnBELEdBQUFwNkMsRUFBQXpQLEVBQUEsa0JBUUEsU0FBQTJwRCxHQUFBbDZDLEVBQUF6UCxHQUNBNmxCLEdBQUFwVyxFQUFBQyxRQUFBMVAsSUFLQSxTQUFBeVAsRUFBQXpQLEdBQ0EsUUFBQStULEdBQUF0RSxFQUFBLHNCQUNBbzZDLEdBQUFwNkMsRUFBQXpQLEVBQUEsd0JBUEFvcUQsQ0FBQTM2QyxFQUFBelAsSUFDQXFULEdBQUE1RCxFQUFBelAsRUFBQSxnQkFDQXlQLEVBQUFDLFFBQUFpUixNQUFBZ3BDLGNBQUEzcEQsR0FRQSxTQUFBcXFELEdBQUE1NkMsR0FDQUEsRUFBQUMsUUFBQWlXLFFBQUFqbUIsVUFBQStQLEVBQUFDLFFBQUFpVyxRQUFBam1CLFVBQUE0UixRQUFBLG1CQUNBN0IsRUFBQWhHLFFBQUE2Z0QsTUFBQWg1QyxRQUFBLHVCQUNBd1osR0FBQXJiLEdBL1hBazNDLEdBQUE1cEQsVUFBQW9xRCxRQUFBLFNBQUFyb0IsRUFBQTE1QixFQUFBd1AsR0FDQSxPQUFBelEsS0FBQTI2QixLQVRBLElBU0FBLEdBQ0EsR0FBQS8wQixHQUFBM0UsRUFBQWpCLEtBQUFpQixNQUFBd1AsR0FBQXpRLEtBQUF5USxRQWdZQSxJQUFBMjFDLElBQVkzbEQsU0FBQSxXQUFxQiwwQkFFakM0bEQsTUFDQUMsTUF5SUEsU0FBQUMsR0FBQWo3QyxHQUNBb3lCLEdBQUFweUIsR0FDQXV1QixHQUFBdnVCLEdBQ0FnbEIsR0FBQWhsQixHQUdBLFNBQUFrN0MsR0FBQWw3QyxFQUFBclQsRUFBQXlQLEdBQ0EsSUFBQSsrQyxFQUFBLytDLE1BQUEwK0MsR0FDQSxJQUFBbnVELElBQUF3dUQsRUFBQSxDQUNBLElBQUFDLEVBQUFwN0MsRUFBQUMsUUFBQW83QyxjQUNBQyxFQUFBM3VELEVBQUFvVyxHQUFBUSxHQUNBKzNDLEVBQUF0N0MsRUFBQUMsUUFBQXNYLFNBQUEsWUFBQTZqQyxFQUFBNW9ELE9BQ0E4b0QsRUFBQXQ3QyxFQUFBQyxRQUFBc1gsU0FBQSxZQUFBNmpDLEVBQUFHLE9BQ0FELEVBQUF0N0MsRUFBQUMsUUFBQXNYLFNBQUEsV0FBQTZqQyxFQUFBSSxNQUNBRixFQUFBdDdDLEVBQUFDLFFBQUFzWCxTQUFBLFlBQUE2akMsRUFBQUssT0FDQUgsRUFBQXQ3QyxFQUFBQyxRQUFBc1gsU0FBQSxPQUFBNmpDLEVBQUFNLE9BSUEsU0FBQUMsR0FBQTM3QyxHQUNBQSxFQUFBaEcsUUFBQTRlLGNBQ0EzbUIsRUFBQStOLEVBQUFDLFFBQUFpVyxRQUFBLG1CQUNBbFcsRUFBQUMsUUFBQXFXLE1BQUFwbEIsTUFBQW0zQixTQUFBLEdBQ0Fyb0IsRUFBQUMsUUFBQXNoQixXQUFBLE9BRUF6eEIsRUFBQWtRLEVBQUFDLFFBQUFpVyxRQUFBLG1CQUNBblcsR0FBQUMsSUFFQXFmLEdBQUFyZixHQUNBdXVCLEdBQUF2dUIsR0FDQXFiLEdBQUFyYixHQUNBaEwsV0FBQSxXQUEwQixPQUFBdzBCLEdBQUF4cEIsSUFBK0IsS0FNekQsU0FBQXdrQyxHQUFBbnJCLEVBQUFyZixHQUNBLElBQUEra0MsRUFBQXJxQyxLQUVBLEtBQUFBLGdCQUFBOHZDLElBQXdDLFdBQUFBLEdBQUFuckIsRUFBQXJmLEdBRXhDdEYsS0FBQXNGLFlBQUF2RyxFQUFBdUcsTUFFQXZHLEVBQUFzbkQsR0FBQS9nRCxHQUFBLEdBQ0F1NEIsR0FBQXY0QixHQUVBLElBQUEzQixFQUFBMkIsRUFBQXJOLE1BQ0EsaUJBQUEwTCxFQUErQkEsRUFBQSxJQUFBaW9DLEdBQUFqb0MsRUFBQTJCLEVBQUFuTixLQUFBLEtBQUFtTixFQUFBNG1DLGNBQUE1bUMsRUFBQW9ILFdBQy9CcEgsRUFBQW5OLE9BQTBCd0wsRUFBQTA4QixXQUFBLzZCLEVBQUFuTixNQUMxQjZILEtBQUEyRCxNQUVBLElBQUE2WSxFQUFBLElBQUFzekIsR0FBQW9YLFlBQUE1aEQsRUFBQTZoRCxZQUFBbm5ELE1BQ0F1TCxFQUFBdkwsS0FBQXVMLFFBQUEsSUFwME9BLFNBQUFvWixFQUFBaGhCLEVBQUE2WSxHQUNBLElBQUFsbEIsRUFBQTBJLEtBQ0FBLEtBQUF3YyxRQUdBbGxCLEVBQUFnK0IsZ0JBQUFqNUIsRUFBQSwwQ0FDQS9FLEVBQUFnK0IsZ0JBQUF6NEIsYUFBQSx5QkFHQXZGLEVBQUFrK0IsYUFBQW41QixFQUFBLHVDQUNBL0UsRUFBQWsrQixhQUFBMzRCLGFBQUEseUJBRUF2RixFQUFBdzRCLFFBQUFsekIsRUFBQSw4QkFFQXRGLEVBQUFpbUMsYUFBQWxoQyxFQUFBLGtEQUNBL0UsRUFBQXUzQixVQUFBeHlCLEVBQUEsaUNBRUEvRSxFQUFBMFosUUFBQTNVLEVBQUEsaUNBRUEvRSxFQUFBcXNCLFlBQUF0bkIsRUFBQSxpQ0FFQS9FLEVBQUF5cUIsVUFBQW5sQixFQUFBLE9BQUF0RixFQUFBMFosUUFBQTFaLEVBQUFxc0IsWUFBQXJzQixFQUFBaW1DLGFBQUFqbUMsRUFBQXUzQixVQUFBdjNCLEVBQUF3NEIsU0FDQSwwQ0FDQSxJQUFBOXJCLEVBQUFwSCxFQUFBLE9BQUF0RixFQUFBeXFCLFdBQUEsb0JBRUF6cUIsRUFBQXVxQixNQUFBeGxCLEVBQUEsT0FBQTJILEdBQUEsMkJBRUExTSxFQUFBc3FCLE1BQUF2bEIsRUFBQSxPQUFBL0UsRUFBQXVxQixPQUFBLG9CQUNBdnFCLEVBQUF1MUIsV0FBQSxLQUlBdjFCLEVBQUE4OUIsYUFBQS80QixFQUFBLCtDQUE4RGtFLEVBQUEsbUJBRTlEakosRUFBQTRvQixRQUFBN2pCLEVBQUEsaUNBQ0EvRSxFQUFBdTVCLFdBQUEsS0FFQXY1QixFQUFBdXJCLFNBQUF4bUIsRUFBQSxPQUFBL0UsRUFBQXNxQixNQUFBdHFCLEVBQUE4OUIsYUFBQTk5QixFQUFBNG9CLFNBQUEscUJBQ0E1b0IsRUFBQXVyQixTQUFBaG1CLGFBQUEsaUJBRUF2RixFQUFBa3FCLFFBQUFubEIsRUFBQSxPQUFBL0UsRUFBQWcrQixnQkFBQWgrQixFQUFBaytCLGFBQUFsK0IsRUFBQXVyQixVQUFBLGNBR0FwcEIsR0FBQUMsRUFBQSxJQUE2QnBDLEVBQUE0b0IsUUFBQTFqQixNQUFBbWlCLFFBQUEsRUFBNkJybkIsRUFBQXVyQixTQUFBcm1CLE1BQUFnbUIsYUFBQSxHQUMxRDNvQixHQUFBVixHQUFBb0IsSUFBc0NqRCxFQUFBdXJCLFNBQUErL0IsV0FBQSxHQUV0Q2orQixJQUNBQSxFQUFBdm9CLFlBQTRCdW9CLEVBQUF2b0IsWUFBQTlFLEVBQUFrcUIsU0FDbEJtRCxFQUFBcnRCLEVBQUFrcUIsVUFJVmxxQixFQUFBOGdCLFNBQUE5Z0IsRUFBQStnQixPQUFBMVUsRUFBQUMsTUFDQXRNLEVBQUFrbUMsaUJBQUFsbUMsRUFBQW1tQyxlQUFBOTVCLEVBQUFDLE1BRUF0TSxFQUFBb21CLFFBQ0FwbUIsRUFBQXVrQyxhQUFBLEtBR0F2a0MsRUFBQXVqQixpQkFBQSxLQUVBdmpCLEVBQUFxd0IsV0FBQSxFQUNBcndCLEVBQUEwa0MsZUFBQTFrQyxFQUFBMmtDLGNBQUEsRUFDQTNrQyxFQUFBeWlDLGtCQUFBLEtBRUF6aUMsRUFBQXFyQixlQUFBcnJCLEVBQUEyckIsVUFBQTNyQixFQUFBd3JCLFNBQUEsRUFDQXhyQixFQUFBa2dDLG1CQUFBLEVBSUFsZ0MsRUFBQXk1QixhQUFBejVCLEVBQUF3NUIsa0JBQUF4NUIsRUFBQXd2QixhQUFBLEtBSUF4dkIsRUFBQWk1QixjQUFBLEVBRUFqNUIsRUFBQXN2QixnQkFBQXR2QixFQUFBdXZCLGlCQUFBdnZCLEVBQUE2cUIsZUFBQSxLQUlBN3FCLEVBQUFrVSxRQUFBLEtBQ0FsVSxFQUFBbVUsY0FBQSxFQUNBblUsRUFBQW9VLGdCQUFBLEVBR0FwVSxFQUFBeW5DLFFBQUF6bkMsRUFBQTBuQyxRQUFBMW5DLEVBQUFpaEMsWUFBQWpoQyxFQUFBa2hDLFlBQUEsS0FHQWxoQyxFQUFBcTRCLE9BQUEsRUFJQXI0QixFQUFBazRCLGtCQUFBLEtBRUFsNEIsRUFBQW9yRCxZQUFBLEtBRUFsbUMsRUFBQTRxQyxLQUFBOXZELEdBb3VPQSxDQUFBcXRCLEVBQUFoaEIsRUFBQTZZLEdBMENBLFFBQUEydEIsS0F6Q0E1K0IsRUFBQWlXLFFBQUFxd0IsV0FBQTd4QyxLQUNBMDlCLEdBQUExOUIsTUFDQWttRCxHQUFBbG1ELE1BQ0FzRixFQUFBNGUsZUFDS2xrQixLQUFBdUwsUUFBQWlXLFFBQUFqbUIsV0FBQSxvQkFDTHE2QixHQUFBNTFCLE1BRUFBLEtBQUF3VCxPQUNBZ3VDLFdBQ0E5cUMsWUFDQUwsUUFBQSxFQUNBblgsV0FBQSxFQUNBbXdCLG1CQUFBLEVBQ0FYLFNBQUEsRUFDQW1ZLGVBQUEsRUFDQXdnQixlQUFBLEVBQUFDLGFBQUEsRUFDQXBFLGVBQUEsRUFDQTdSLGNBQUEsRUFDQXpXLFVBQUEsSUFBQTc2QixFQUNBdWhELE9BQUEsS0FDQTFsQyxhQUFBLE1BR0F0VyxFQUFBaWlELFlBQUFodEQsR0FBcUNnUixFQUFBaVIsTUFBQTBTLFFBSXJDejFCLEdBQUFDLEVBQUEsSUFBOEI0RyxXQUFBLFdBQXlCLE9BQUErcEMsRUFBQTkrQixRQUFBaVIsTUFBQWlULE9BQUEsSUFBMkMsSUFpQ2xHLFNBQUFua0IsR0FDQSxJQUFBaFUsRUFBQWdVLEVBQUFDLFFBQ0E4QyxHQUFBL1csRUFBQXVyQixTQUFBLFlBQUE2VyxHQUFBcHVCLEVBQUFtM0MsS0FHS3AwQyxHQUFBL1csRUFBQXVyQixTQUFBLFdBRExwcEIsR0FBQUMsRUFBQSxHQUNLZ2dDLEdBQUFwdUIsRUFBQSxTQUFBelAsR0FDTCxJQUFBcVQsR0FBQTVELEVBQUF6UCxHQUFBLENBQ0EsSUFBQW9GLEVBQUE2cEIsR0FBQXhmLEVBQUF6UCxHQUNBLEdBQUFvRixJQUFBNGhELEdBQUF2M0MsRUFBQXpQLEtBQUE2bEIsR0FBQXBXLEVBQUFDLFFBQUExUCxHQUFBLENBQ0FrVSxHQUFBbFUsR0FDQSxJQUFBMnJELEVBQUFsOEMsRUFBQW02QyxXQUFBeGtELEdBQ0E2akMsR0FBQXg1QixFQUFBM0gsSUFBQTZqRCxFQUFBcDlCLE9BQUFvOUIsRUFBQXI3QixVQUdLLFNBQUF0d0IsR0FBMEMsT0FBQXFULEdBQUE1RCxFQUFBelAsSUFBQWtVLEdBQUFsVSxLQUkvQ2QsR0FBMkJzVCxHQUFBL1csRUFBQXVyQixTQUFBLHVCQUFBaG5CLEdBQTZDLE9BQUEycEQsR0FBQWw2QyxFQUFBelAsS0FHeEUsSUFBQTRyRCxFQUFBQyxHQUFrQzNwRCxJQUFBLEdBQ2xDLFNBQUE0cEQsSUFDQXJ3RCxFQUFBb3JELGNBQ0ErRSxFQUFBbm5ELFdBQUEsV0FBOEMsT0FBQWhKLEVBQUFvckQsWUFBQSxNQUErQixNQUM3RWdGLEVBQUFwd0QsRUFBQW9yRCxhQUNBM2tELEtBQUEsSUFBQSs4QixNQVFBLFNBQUE4c0IsRUFBQUMsRUFBQXIvQixHQUNBLFNBQUFBLEVBQUFoWCxLQUE2QixTQUM3QixJQUFBeXNCLEVBQUF6VixFQUFBaFgsS0FBQXEyQyxFQUFBcjJDLEtBQUEyc0IsRUFBQTNWLEVBQUEvRCxJQUFBb2pDLEVBQUFwakMsSUFDQSxPQUFBd1osSUFBQUUsSUFBQSxJQUVBOXZCLEdBQUEvVyxFQUFBdXJCLFNBQUEsc0JBQUFobkIsR0FDQSxJQUFBcVQsR0FBQTVELEVBQUF6UCxLQVhBLFNBQUFBLEdBQ0EsTUFBQUEsRUFBQWlxRCxRQUFBbnFELE9BQWdDLFNBQ2hDLElBQUFrc0QsRUFBQWhzRCxFQUFBaXFELFFBQUEsR0FDQSxPQUFBK0IsRUFBQUMsU0FBQSxHQUFBRCxFQUFBRSxTQUFBLEVBUUFDLENBQUFuc0QsS0FBQWduRCxHQUFBdjNDLEVBQUF6UCxHQUFBLENBQ0F2RSxFQUFBa2xCLE1BQUF5a0MsZUFDQTVnRCxhQUFBb25ELEdBQ0EsSUFBQTFFLEdBQUEsSUFBQWpvQixLQUNBeGpDLEVBQUFvckQsYUFBdUI1a0QsTUFBQWlsRCxFQUFBYSxPQUFBLEVBQ3ZCLzJDLEtBQUFrMkMsRUFBQTJFLEVBQUEzcEQsS0FBQSxJQUFBMnBELEVBQUEsTUFDQSxHQUFBN3JELEVBQUFpcUQsUUFBQW5xRCxTQUNBckUsRUFBQW9yRCxZQUFBbHhDLEtBQUEzVixFQUFBaXFELFFBQUEsR0FBQW1DLE1BQ0Ezd0QsRUFBQW9yRCxZQUFBaitCLElBQUE1b0IsRUFBQWlxRCxRQUFBLEdBQUFvQyxVQUlBNzVDLEdBQUEvVyxFQUFBdXJCLFNBQUEsdUJBQ0F2ckIsRUFBQW9yRCxjQUF3QnByRCxFQUFBb3JELFlBQUFrQixPQUFBLEtBRXhCdjFDLEdBQUEvVyxFQUFBdXJCLFNBQUEsb0JBQUFobkIsR0FDQSxJQUFBZ3NELEVBQUF2d0QsRUFBQW9yRCxZQUNBLEdBQUFtRixJQUFBbm1DLEdBQUFwcUIsRUFBQXVFLElBQUEsTUFBQWdzRCxFQUFBcjJDLE9BQ0FxMkMsRUFBQWpFLE9BQUEsSUFBQTlvQixLQUFBK3NCLEVBQUEvcEQsTUFBQSxLQUNBLElBQUEzQyxFQUFBOEYsRUFBQXFLLEVBQUF1ZCxXQUFBdnhCLEVBQUFvckQsWUFBQSxRQUVTdm5ELEdBRFQwc0QsRUFBQWg3QyxNQUFBKzZDLEVBQUFDLElBQUFoN0MsTUFDUyxJQUFBNHlCLEdBQUF4K0IsTUFDVDRtRCxFQUFBaDdDLFdBQUErNkMsRUFBQUMsSUFBQWg3QyxXQUNTdkIsRUFBQW02QyxXQUFBeGtELEdBRUEsSUFBQXcrQixHQUFBLzVCLEdBQUF6RSxFQUFBb0QsS0FBQSxHQUFBK0IsR0FBQWtGLEVBQUEzSCxJQUFBK0IsR0FBQXpFLEVBQUFvRCxLQUFBLE9BQ1RpSCxFQUFBeTVCLGFBQUE1cEMsRUFBQWl2QixPQUFBanZCLEVBQUFneEIsTUFDQTdnQixFQUFBNGpCLFFBQ0FuZixHQUFBbFUsR0FFQThyRCxNQUVBdDVDLEdBQUEvVyxFQUFBdXJCLFNBQUEsY0FBQThrQyxHQUlBdDVDLEdBQUEvVyxFQUFBdXJCLFNBQUEsb0JBQ0F2ckIsRUFBQXVyQixTQUFBRyxlQUNBcVAsR0FBQS9tQixFQUFBaFUsRUFBQXVyQixTQUFBeUUsV0FDQXNMLEdBQUF0bkIsRUFBQWhVLEVBQUF1ckIsU0FBQXFFLFlBQUEsR0FDQWxZLEdBQUExRCxFQUFBLFNBQUFBLE1BS0ErQyxHQUFBL1csRUFBQXVyQixTQUFBLHNCQUFBaG5CLEdBQTZDLE9BQUE4aUMsR0FBQXJ6QixFQUFBelAsS0FDN0N3UyxHQUFBL1csRUFBQXVyQixTQUFBLDBCQUFBaG5CLEdBQWlELE9BQUE4aUMsR0FBQXJ6QixFQUFBelAsS0FHakR3UyxHQUFBL1csRUFBQWtxQixRQUFBLG9CQUF1QyxPQUFBbHFCLEVBQUFrcUIsUUFBQThGLFVBQUFod0IsRUFBQWtxQixRQUFBMEYsV0FBQSxJQUV2QzV2QixFQUFBcXZELGVBQ0FFLE1BQUEsU0FBQWhyRCxHQUF5QnFULEdBQUE1RCxFQUFBelAsSUFBNkJ1VSxHQUFBdlUsSUFDdERpckQsS0FBQSxTQUFBanJELEdBQXdCcVQsR0FBQTVELEVBQUF6UCxLQWg0Q3hCLFNBQUF5UCxFQUFBelAsR0FDQSxJQUFBb0YsRUFBQTZwQixHQUFBeGYsRUFBQXpQLEdBQ0EsR0FBQW9GLEVBQUEsQ0FDQSxJQUFBa25ELEVBQUF4dUQsU0FBQW1pQix5QkFDQW9RLEdBQUE1Z0IsRUFBQXJLLEVBQUFrbkQsR0FDQTc4QyxFQUFBQyxRQUFBa21DLGFBQ0FubUMsRUFBQUMsUUFBQWttQyxXQUFBcDFDLEVBQUEsd0RBQ0FpUCxFQUFBQyxRQUFBd1csVUFBQTlDLGFBQUEzVCxFQUFBQyxRQUFBa21DLFdBQUFubUMsRUFBQUMsUUFBQXNqQixZQUVBM3lCLEVBQUFvUCxFQUFBQyxRQUFBa21DLFdBQUEwVyxJQXUzQ3FEQyxDQUFBOThDLEVBQUF6UCxHQUFtQnVVLEdBQUF2VSxLQUN4RWlDLE1BQUEsU0FBQWpDLEdBQXlCLE9BeDVDekIsU0FBQXlQLEVBQUF6UCxHQUNBLEdBQUFwQyxLQUFBNlIsRUFBQWtJLE1BQUE2OUIsZUFBQSxJQUFBdlcsS0FBQXdWLEdBQUEsS0FBcUVsZ0MsR0FBQXZVLFFBQ3JFLElBQUFxVCxHQUFBNUQsRUFBQXpQLEtBQUE2bEIsR0FBQXBXLEVBQUFDLFFBQUExUCxLQUVBQSxFQUFBNjBDLGFBQUEyWCxRQUFBLE9BQUEvOEMsRUFBQXlHLGdCQUNBbFcsRUFBQTYwQyxhQUFBNFgsY0FBQSxXQUlBenNELEVBQUE2MEMsYUFBQTZYLGVBQUF0dUQsR0FBQSxDQUNBLElBQUF1dUQsRUFBQW5zRCxFQUFBLHFEQUNBbXNELEVBQUFDLElBQUEsNkVBQ0F6dUQsSUFDQXd1RCxFQUFBeG5DLE1BQUF3bkMsRUFBQTlqRCxPQUFBLEVBQ0E0RyxFQUFBQyxRQUFBaVcsUUFBQXBsQixZQUFBb3NELEdBRUFBLEVBQUFFLEtBQUFGLEVBQUF4bUMsV0FFQW5tQixFQUFBNjBDLGFBQUE2WCxhQUFBQyxFQUFBLEtBQ0F4dUQsR0FBaUJ3dUQsRUFBQXZyRCxXQUFBakIsWUFBQXdzRCxJQXE0Q1FHLENBQUFyOUMsRUFBQXpQLElBQ3pCbXJELEtBQUF0dEIsR0FBQXB1QixFQUFBaWxDLElBQ0F3VyxNQUFBLFNBQUFsckQsR0FBeUJxVCxHQUFBNUQsRUFBQXpQLElBQTZCMjBDLEdBQUFsbEMsS0FHdEQsSUFBQXM5QyxFQUFBdHhELEVBQUFrbEIsTUFBQXFzQyxXQUNBeDZDLEdBQUF1NkMsRUFBQSxpQkFBQS9zRCxHQUFpQyxPQUFBcW1ELEdBQUEvcUQsS0FBQW1VLEVBQUF6UCxLQUNqQ3dTLEdBQUF1NkMsRUFBQSxVQUFBbHZCLEdBQUFwdUIsRUFBQXcyQyxLQUNBenpDLEdBQUF1NkMsRUFBQSxXQUFBbHZCLEdBQUFwdUIsRUFBQTYyQyxLQUNBOXpDLEdBQUF1NkMsRUFBQSxpQkFBQS9zRCxHQUFpQyxPQUFBc3pCLEdBQUE3akIsRUFBQXpQLEtBQ2pDd1MsR0FBQXU2QyxFQUFBLGdCQUFBL3NELEdBQWdDLE9BQUF5ekIsR0FBQWhrQixFQUFBelAsS0F2SWhDaXRELENBQUE5b0QsTUFDQSt4QyxLQUVBL2IsR0FBQWgyQixNQUNBQSxLQUFBMFAsTUFBQWdVLGFBQUEsRUFDQXFlLEdBQUEvaEMsS0FBQTJELEdBRUEyQixFQUFBaWlELFlBQUFodEQsR0FBQXlGLEtBQUFxOEIsV0FDSy83QixXQUFBOUgsRUFBQTIyQixHQUFBbnZCLE1BQUEsSUFFQXN2QixHQUFBdHZCLE1BRUxzbUQsR0FBbUNBLEdBQUF6dEQsZUFBQXN4QyxJQUM5Qm1jLEdBQUFuYyxHQUFBRSxFQUFBL2tDLEVBQUE2a0MsR0FBQWljLElBQ0x6MUIsR0FBQTN3QixNQUNBc0YsRUFBQXlqRCxZQUEyQnpqRCxFQUFBeWpELFdBQUEvb0QsTUFDM0IsUUFBQWhKLEVBQUEsRUFBaUJBLEVBQUFneUQsR0FBQXJ0RCxTQUFzQjNFLEVBQU9neUQsR0FBQWh5RCxHQUFBcXpDLEdBQzlDelQsR0FBQTUyQixNQUdBbkcsR0FBQXlMLEVBQUE0ZSxjQUNBLHNCQUFBOUIsaUJBQUE3VyxFQUFBdWtCLFNBQUFtNUIsZ0JBQ0sxOUMsRUFBQXVrQixRQUFBdHpCLE1BQUF5c0QsY0FBQSxRQUlMblosR0FBQXVXLFlBRUF2VyxHQUFBd1csa0JBOEdBLElBQUEwQyxNQVFBLFNBQUF2SSxHQUFBbjFDLEVBQUE3UyxFQUFBeXdELEVBQUFDLEdBQ0EsSUFBQTMxQyxFQUFBN1AsRUFBQTJILEVBQUEzSCxJQUNBLE1BQUF1bEQsSUFBb0JBLEVBQUEsT0FDcEIsU0FBQUEsSUFHQXZsRCxFQUFBeEwsS0FBQWl4RCxPQUNVNTFDLEVBQUEyRCxHQUFBN0wsRUFBQTdTLEdBQUErYSxNQURpQjAxQyxFQUFBLFFBSTNCLElBQUE1cEQsRUFBQWdNLEVBQUFoRyxRQUFBaEcsUUFDQStFLEVBQUFYLEdBQUFDLEVBQUFsTCxHQUFBNHdELEVBQUFqcUQsRUFBQWlGLEVBQUFFLEtBQUEsS0FBQWpGLEdBQ0ErRSxFQUFBaVQsYUFBd0JqVCxFQUFBaVQsV0FBQSxNQUN4QixJQUFBckMsRUFBQXEwQyxFQUFBamxELEVBQUFFLEtBQUEzSixNQUFBLFdBQ0EsR0FBQXV1RCxHQUFBLEtBQUEvdkQsS0FBQWlMLEVBQUFFLE9BR0csWUFBQTJrRCxLQUNIajBDLEVBQUF0UixFQUFBeEwsS0FBQWl4RCxPQUFBNTFDLEVBQUFuUCxFQUFBRSxLQUFBOUksTUFBQTZ0RCxFQUFBM3RELFFBQUEwSSxFQUFBRSxRQUNBL0QsR0FBQXlVLEVBQUEsTUFDQSxJQUFBazBDLEVBQXdCLE9BQ3hCRCxFQUFBLGFBTkFqMEMsRUFBQSxFQUNBaTBDLEVBQUEsTUFRQSxRQUFBQSxFQUN3QmowQyxFQUF4QnhjLEVBQUFrTCxFQUFBQyxNQUF3QnhFLEVBQUFzRSxHQUFBQyxFQUFBbEwsRUFBQSxHQUFBOEwsS0FBQSxLQUFBakYsR0FDZCxFQUNQLE9BQUE0cEQsRUFDSGowQyxFQUFBbzBDLEVBQUEvOUMsRUFBQWhHLFFBQUFpa0QsV0FDRyxZQUFBTCxFQUNIajBDLEVBQUFvMEMsRUFBQS85QyxFQUFBaEcsUUFBQWlrRCxXQUNHLGlCQUFBTCxJQUNIajBDLEVBQUFvMEMsRUFBQUgsR0FFQWowQyxFQUFBN1QsS0FBQStFLElBQUEsRUFBQThPLEdBRUEsSUFBQXUwQyxFQUFBLEdBQUF2b0QsRUFBQSxFQUNBLEdBQUFxSyxFQUFBaEcsUUFBQW1rRCxlQUNLLFFBQUF6eUQsRUFBQW9LLEtBQUFxQyxNQUFBd1IsRUFBQTNWLEdBQWdEdEksSUFBR0EsRUFBT2lLLEdBQUEzQixFQUFla3FELEdBQUEsS0FHOUUsR0FGQXZvRCxFQUFBZ1UsSUFBMEJ1MEMsR0FBQWpvRCxFQUFBMFQsRUFBQWhVLElBRTFCdW9ELEdBQUFGLEVBR0EsT0FGQTdnQixHQUFBOWtDLEVBQUE2bEQsRUFBQTlqRCxHQUFBak4sRUFBQSxHQUFBaU4sR0FBQWpOLEVBQUE2d0QsRUFBQTN0RCxRQUFBLFVBQ0EwSSxFQUFBaVQsV0FBQSxNQUNBLEVBSUEsUUFBQXBTLEVBQUEsRUFBcUJBLEVBQUF2QixFQUFBa29CLElBQUFDLE9BQUFud0IsT0FBNkJ1SixJQUFBLENBQ2xELElBQUEvSixFQUFBd0ksRUFBQWtvQixJQUFBQyxPQUFBNW1CLEdBQ0EsR0FBQS9KLEVBQUFneEIsS0FBQTluQixNQUFBNUwsR0FBQTBDLEVBQUFneEIsS0FBQS9wQixHQUFBa25ELEVBQUEzdEQsT0FBQSxDQUNBLElBQUErdEQsRUFBQWhrRCxHQUFBak4sRUFBQTZ3RCxFQUFBM3RELFFBQ0F3cEMsR0FBQXhoQyxFQUFBdUIsRUFBQSxJQUFBdTZCLEdBQUFpcUIsTUFDQSxRQTVEQTVaLEdBQUE2WixlQUFBLFNBQUFqckQsR0FBNEMsT0FBQXNxRCxHQUFBeG5ELEtBQUE5QyxJQXFFNUMsSUFBQWtyRCxHQUFBLEtBRUEsU0FBQUMsR0FBQUMsR0FDQUYsR0FBQUUsRUFHQSxTQUFBQyxHQUFBeitDLEVBQUEwK0MsRUFBQUMsRUFBQXArQixFQUFBaHJCLEdBQ0EsSUFBQThDLEVBQUEySCxFQUFBM0gsSUFDQTJILEVBQUFDLFFBQUFva0IsT0FBQSxFQUNBOUQsSUFBYUEsRUFBQWxvQixFQUFBa29CLEtBRWIsSUFlQXFLLEVBZkFnMEIsRUFBQTUrQyxFQUFBa0ksTUFBQTZ6QyxlQUFBLFNBQUF4bUQsRUFDQXNwRCxFQUFBejRDLEdBQUFzNEMsR0FBQUksRUFBQSxLQUVBLEdBQUFGLEdBQUFyK0IsRUFBQUMsT0FBQW53QixPQUFBLEVBQ0EsR0FBQWl1RCxPQUFBcmxELEtBQUEwbkMsS0FBQSxPQUFBK2QsR0FDQSxHQUFBbitCLEVBQUFDLE9BQUFud0IsT0FBQWl1RCxHQUFBcmxELEtBQUE1SSxRQUFBLEdBQ0F5dUQsS0FDQSxRQUFBcHpELEVBQUEsRUFBdUJBLEVBQUE0eUQsR0FBQXJsRCxLQUFBNUksT0FBNEIzRSxJQUN4Q296RCxFQUFBNW9ELEtBQUFtQyxFQUFBZ2xDLFdBQUFpaEIsR0FBQXJsRCxLQUFBdk4sV0FFTm16RCxFQUFBeHVELFFBQUFrd0IsRUFBQUMsT0FBQW53QixRQUFBMlAsRUFBQWhHLFFBQUEra0QseUJBQ0xELEVBQUF6b0QsRUFBQXdvRCxFQUFBLFNBQUFsekQsR0FBZ0QsT0FBQUEsTUFNaEQsUUFBQWlPLEVBQUEybUIsRUFBQUMsT0FBQW53QixPQUFBLEVBQXVDdUosR0FBQSxFQUFVQSxJQUFBLENBQ2pELElBQUErTSxFQUFBNFosRUFBQUMsT0FBQTVtQixHQUNBOUIsRUFBQTZPLEVBQUE3TyxPQUFBQyxFQUFBNE8sRUFBQTVPLEtBQ0E0TyxFQUFBK1osVUFDQWkrQixLQUFBLEVBQ1M3bUQsRUFBQXNDLEdBQUF0QyxFQUFBaUIsS0FBQWpCLEVBQUFoQixHQUFBNm5ELEdBQ1QzK0MsRUFBQWtJLE1BQUF0VSxZQUFBZ3JELEVBQ1M3bUQsRUFBQXFDLEdBQUFyQyxFQUFBZ0IsS0FBQWpELEtBQUFDLElBQUFxQyxHQUFBQyxFQUFBTixFQUFBZ0IsTUFBQUUsS0FBQTVJLE9BQUEwSCxFQUFBakIsR0FBQVgsRUFBQTBvRCxHQUFBeHVELFNBQ1RpdUQsT0FBQVUsVUFBQVYsR0FBQXJsRCxLQUFBMG5DLEtBQUEsT0FBQStkLElBQ1M1bUQsRUFBQUMsRUFBQXFDLEdBQUF0QyxFQUFBaUIsS0FBQSxLQUVUNnhCLEVBQUE1cUIsRUFBQW9FLE1BQUF3bUIsWUFDQSxJQUFBcTBCLEdBQXVCbm5ELE9BQUFDLEtBQUFrQixLQUFBNmxELElBQUFsbEQsRUFBQWtsRCxFQUFBenVELFFBQUF3dUQsRUFDdkJ0cEQsV0FBQXFwRCxFQUFBLFFBQUE1K0MsRUFBQWtJLE1BQUE4ekMsWUFBQSxpQkFDQTNnQixHQUFBcjdCLEVBQUEzSCxJQUFBNG1ELEdBQ0Exc0MsR0FBQXZTLEVBQUEsWUFBQUEsRUFBQWkvQyxHQUVBUCxJQUFBRSxHQUNLTSxHQUFBbC9DLEVBQUEwK0MsR0FFTG40QixHQUFBdm1CLEdBQ0FBLEVBQUFvRSxNQUFBd21CLGNBQ0E1cUIsRUFBQW9FLE1BQUF5bUIsUUFBQSxFQUNBN3FCLEVBQUFrSSxNQUFBNnpDLGNBQUEvN0MsRUFBQWtJLE1BQUE4ekMsYUFBQSxFQUdBLFNBQUFtRCxHQUFBNXVELEVBQUF5UCxHQUNBLElBQUFvL0MsRUFBQTd1RCxFQUFBOHVELGVBQUE5dUQsRUFBQTh1RCxjQUFBcFosUUFBQSxRQUNBLEdBQUFtWixFQUlBLE9BSEE3dUQsRUFBQXVULGlCQUNBOUQsRUFBQXFsQyxjQUFBcmxDLEVBQUFoRyxRQUFBc2xELGNBQ09ueEIsR0FBQW51QixFQUFBLFdBQTBCLE9BQUF5K0MsR0FBQXorQyxFQUFBby9DLEVBQUEsbUJBQ2pDLEVBSUEsU0FBQUYsR0FBQWwvQyxFQUFBMCtDLEdBRUEsR0FBQTErQyxFQUFBaEcsUUFBQXVsRCxlQUFBdi9DLEVBQUFoRyxRQUFBd2xELFlBR0EsSUFGQSxJQUFBai9CLEVBQUF2Z0IsRUFBQTNILElBQUFrb0IsSUFFQTcwQixFQUFBNjBCLEVBQUFDLE9BQUFud0IsT0FBQSxFQUFxQzNFLEdBQUEsRUFBUUEsSUFBQSxDQUM3QyxJQUFBaWIsRUFBQTRaLEVBQUFDLE9BQUE5MEIsR0FDQSxLQUFBaWIsRUFBQWthLEtBQUEvcEIsR0FBQSxLQUFBcEwsR0FBQTYwQixFQUFBQyxPQUFBOTBCLEVBQUEsR0FBQW0xQixLQUFBOW5CLE1BQUE0TixFQUFBa2EsS0FBQTluQixNQUFBLENBQ0EsSUFBQWxNLEVBQUFtVCxFQUFBeS9DLFVBQUE5NEMsRUFBQWthLE1BQ0FwVSxHQUFBLEVBQ0EsR0FBQTVmLEVBQUEweUQsZUFDQSxRQUFBejlDLEVBQUEsRUFBcUJBLEVBQUFqVixFQUFBMHlELGNBQUFsdkQsT0FBK0J5UixJQUMzQyxHQUFBNDhDLEVBQUFycUQsUUFBQXhILEVBQUEweUQsY0FBQTVuRCxPQUFBbUssS0FBQSxHQUNUMkssRUFBQTBvQyxHQUFBbjFDLEVBQUEyRyxFQUFBa2EsS0FBQTluQixLQUFBLFNBQ0EsWUFFS2xNLEVBQUE2eUQsZUFDTDd5RCxFQUFBNnlELGNBQUE1eEQsS0FBQXNLLEdBQUE0SCxFQUFBM0gsSUFBQXNPLEVBQUFrYSxLQUFBOW5CLE1BQUFFLEtBQUE5SSxNQUFBLEVBQUF3VyxFQUFBa2EsS0FBQS9wQixPQUNTMlYsRUFBQTBvQyxHQUFBbjFDLEVBQUEyRyxFQUFBa2EsS0FBQTluQixLQUFBLFVBRVQwVCxHQUFtQjhGLEdBQUF2UyxFQUFBLGdCQUFBQSxFQUFBMkcsRUFBQWthLEtBQUE5bkIsUUFJbkIsU0FBQTRtRCxHQUFBMy9DLEdBRUEsSUFEQSxJQUFBL0csS0FBQXVuQixLQUNBOTBCLEVBQUEsRUFBaUJBLEVBQUFzVSxFQUFBM0gsSUFBQWtvQixJQUFBQyxPQUFBbndCLE9BQThCM0UsSUFBQSxDQUMvQyxJQUFBcU4sRUFBQWlILEVBQUEzSCxJQUFBa29CLElBQUFDLE9BQUE5MEIsR0FBQW0xQixLQUFBOW5CLEtBQ0E2bUQsR0FBcUI5Z0MsT0FBQTFrQixHQUFBckIsRUFBQSxHQUFBOG5CLEtBQUF6bUIsR0FBQXJCLEVBQUEsTUFDckJ5bkIsRUFBQXRxQixLQUFBMHBELEdBQ0EzbUQsRUFBQS9DLEtBQUE4SixFQUFBOGdDLFNBQUE4ZSxFQUFBOWdDLE9BQUE4Z0MsRUFBQS8rQixPQUVBLE9BQVU1bkIsT0FBQXVuQixVQUdWLFNBQUFxL0IsR0FBQUMsRUFBQUMsR0FDQUQsRUFBQXZ1RCxhQUFBLHFCQUNBdXVELEVBQUF2dUQsYUFBQSx3QkFDQXV1RCxFQUFBdnVELGFBQUEsZUFBQXd1RCxHQUdBLFNBQUFDLEtBQ0EsSUFBQXQ1QyxFQUFBM1YsRUFBQSw2R0FDQXlVLEVBQUF6VSxFQUFBLE9BQUEyVixHQUFBLHVFQVVBLE9BTEFuWSxFQUFlbVksRUFBQXhWLE1BQUF3a0IsTUFBQSxTQUNQaFAsRUFBQW5WLGFBQUEsY0FFUnhDLElBQVkyWCxFQUFBeFYsTUFBQSt1RCxPQUFBLG1CQUNaSixHQUFBbjVDLEdBQ0FsQixFQTJjQSxTQUFBMDZDLEdBQUE3bkQsRUFBQTFDLEVBQUErQixFQUFBdWdELEVBQUEzTCxHQUNBLElBQUEzUixFQUFBaGxDLEVBQ0F3cUQsRUFBQXpvRCxFQUNBa0ksRUFBQXhILEdBQUFDLEVBQUExQyxFQUFBb0QsTUFPQSxTQUFBcW5ELEVBQUFDLEdBQ0EsSUFBQWwzQyxFQU1BLFVBSkFBLEVBREFtakMsRUFyd0RBLFNBQUF0c0MsRUFBQWpILEVBQUF2RyxFQUFBa0YsR0FDQSxJQUFBNG9ELEVBQUF6OUMsR0FBQTlKLEVBQUFpSCxFQUFBM0gsSUFBQStJLFdBQ0EsSUFBQWsvQyxFQUFjLE9BQUFsVSxHQUFBcnpDLEVBQUF2RyxFQUFBa0YsR0FDZGxGLEVBQUFzRSxJQUFBaUMsRUFBQUUsS0FBQTVJLFFBQ0FtQyxFQUFBc0UsR0FBQWlDLEVBQUFFLEtBQUE1SSxPQUNBbUMsRUFBQTZILE9BQUEsVUFDRzdILEVBQUFzRSxJQUFBLElBQ0h0RSxFQUFBc0UsR0FBQSxFQUNBdEUsRUFBQTZILE9BQUEsU0FFQSxJQUFBMmlCLEVBQUExYyxHQUFBZ2dELEVBQUE5dEQsRUFBQXNFLEdBQUF0RSxFQUFBNkgsUUFBQXlXLEVBQUF3dkMsRUFBQXRqQyxHQUNBLFVBQUFoZCxFQUFBM0gsSUFBQStJLFdBQUEwUCxFQUFBM1AsTUFBQSxPQUFBekosRUFBQSxFQUFBb1osRUFBQS9ZLEdBQUF2RixFQUFBc0UsR0FBQWdhLEVBQUFoWixLQUFBdEYsRUFBQXNFLElBR0EsT0FBQXMxQyxHQUFBcnpDLEVBQUF2RyxFQUFBa0YsR0FHQSxJQUNBODBDLEVBREErVCxFQUFBLFNBQUE1cUQsRUFBQStCLEdBQWdDLE9BQUF5MEMsR0FBQXB6QyxFQUFBcEQsYUFBQXlFLEdBQUF6RSxFQUFBbUIsR0FBQW5CLEVBQUErQixJQUVoQzhvRCxFQUFBLFNBQUExcEQsR0FDQSxPQUFBa0osRUFBQWhHLFFBQUE0ZSxjQUNBNHpCLEtBQUF4MEIsR0FBQWhZLEVBQUFqSCxHQUNBOGtCLEdBQUE3ZCxFQUFBakgsRUFBQXl6QyxFQUFBMTFDLEtBRjRDOG1CLE1BQUEsRUFBQW5yQixJQUFBc0csRUFBQUUsS0FBQTVJLFNBSTVDc3RCLEVBQUE2aUMsRUFBQSxVQUFBaHVELEVBQUE2SCxPQUFBa21ELEVBQUEvdEQsR0FBQSxHQUFBQSxFQUFBc0UsSUFFQSxVQUFBa0osRUFBQTNILElBQUErSSxXQUFBLEdBQUEwUCxFQUFBM1AsTUFBQSxDQUNBLElBQUFvckMsRUFBQSxHQUFBejdCLEVBQUEzUCxPQUFBekosRUFBQSxFQUNBWixFQUFBeXBELEVBQUEvdEQsRUFBQSs1QyxFQUFBLE1BQ0EsU0FBQXoxQyxJQUFBeTFDLEVBQUF6MUMsR0FBQWdhLEVBQUEvWSxJQUFBakIsR0FBQTZtQixFQUFBbHJCLElBQUFxRSxHQUFBZ2EsRUFBQWhaLE1BQUFoQixHQUFBNm1CLEVBQUFDLE9BQUEsQ0FFQSxJQUFBdmpCLEVBQUFreUMsRUFBQSxpQkFDQSxXQUFBbnlDLEdBQUE1SCxFQUFBdUcsS0FBQWpDLEVBQUF1RCxJQU9BLElBQUFvbUQsRUFBQSxTQUFBempDLEVBQUF0bEIsRUFBQWltQixHQUtBLElBSkEsSUFBQStpQyxFQUFBLFNBQUE1cEQsRUFBQXkxQyxHQUFvRCxPQUFBQSxFQUNwRCxJQUFBbnlDLEdBQUE1SCxFQUFBdUcsS0FBQXduRCxFQUFBenBELEVBQUEsYUFDQSxJQUFBc0QsR0FBQTVILEVBQUF1RyxLQUFBakMsRUFBQSxVQUVVa21CLEdBQUEsR0FBQUEsRUFBQXNqQyxFQUFBandELE9BQXVDMnNCLEdBQUF0bEIsRUFBQSxDQUNqRCxJQUFBb1osRUFBQXd2QyxFQUFBdGpDLEdBQ0F1dkIsRUFBQTcwQyxFQUFBLE9BQUFvWixFQUFBM1AsT0FDQXJLLEVBQUF5MUMsRUFBQTV1QixFQUFBQyxNQUFBMmlDLEVBQUE1aUMsRUFBQWxyQixLQUFBLEdBQ0EsR0FBQXFlLEVBQUFoWixNQUFBaEIsS0FBQWdhLEVBQUEvWSxHQUE0QyxPQUFBMm9ELEVBQUE1cEQsRUFBQXkxQyxHQUU1QyxHQURBejFDLEVBQUF5MUMsRUFBQXo3QixFQUFBaFosS0FBQXlvRCxFQUFBenZDLEVBQUEvWSxJQUFBLEdBQ0E0bEIsRUFBQUMsT0FBQTltQixLQUFBNm1CLEVBQUFsckIsSUFBd0UsT0FBQWl1RCxFQUFBNXBELEVBQUF5MUMsS0FLeEVvVSxFQUFBRixFQUFBempDLEVBQUF0bEIsSUFBQWltQixHQUNBLEdBQUFnakMsRUFBWSxPQUFBQSxFQUdaLElBQUFDLEVBQUFscEQsRUFBQSxFQUFBaW1CLEVBQUFsckIsSUFBQTh0RCxFQUFBNWlDLEVBQUFDLE9BQUEsR0FDQSxhQUFBZ2pDLEdBQUFscEQsRUFBQSxHQUFBa3BELEdBQUE3bkQsRUFBQUUsS0FBQTVJLFVBQ0Fzd0QsRUFBQUYsRUFBQS9vRCxFQUFBLElBQUE0b0QsRUFBQWp3RCxPQUFBLEVBQUFxSCxFQUFBOG9ELEVBQUFJLEtBS0EsS0FKY0QsRUF3c0RkRSxDQUFBeG9ELEVBQUEySCxHQUFBSixFQUFBakssRUFBQStCLEdBRUEwMEMsR0FBQXhzQyxFQUFBakssRUFBQStCLElBRUEsQ0FDQSxHQUFBMm9ELElBZEEsV0FDQSxJQUFBMTBELEVBQUFnSyxFQUFBb0QsS0FBQXJCLEVBQ0EsUUFBQS9MLEVBQUEwTSxFQUFBQyxPQUFBM00sR0FBQTBNLEVBQUFDLE1BQUFELEVBQUFFLFFBQ0E1QyxFQUFBLElBQUF5RSxHQUFBek8sRUFBQWdLLEVBQUFtQixHQUFBbkIsRUFBQTBFLFFBQ0F1RixFQUFBeEgsR0FBQUMsRUFBQTFNLElBVUFtMUQsR0FHUyxTQUZBbnJELEVBQUEwMkMsR0FBQUMsRUFBQWowQyxFQUFBMkgsR0FBQUosRUFBQWpLLEVBQUFvRCxLQUFBckIsUUFJVC9CLEVBQUF3VCxFQUVBLFNBR0EsV0FBQTh1QyxFQUNBbUksU0FDRyxhQUFBbkksRUFDSG1JLEdBQUEsUUFDRyxXQUFBbkksR0FBQSxTQUFBQSxFQUdILElBRkEsSUFBQThJLEVBQUEsS0FBQXYxQixFQUFBLFNBQUF5c0IsRUFDQS9nRCxFQUFBbUIsRUFBQTJILElBQUEzSCxFQUFBMkgsR0FBQWdoRCxVQUFBcnJELEVBQUEsYUFDQTJDLEdBQUEsSUFDQVosRUFBQSxJQUFBMG9ELEdBQUE5bkQsR0FEMkJBLEdBQUEsR0FFM0IsSUFBQWlCLEVBQUFxRyxFQUFBM0csS0FBQXRCLE9BQUFoQyxFQUFBbUIsS0FBQSxLQUNBMEYsRUFBQXZGLEdBQUFzQyxFQUFBckMsR0FBQSxJQUNBczBCLEdBQUEsTUFBQWp5QixFQUFBLEtBQ0FpeUIsR0FBQSxLQUFBMTlCLEtBQUF5TCxHQUFBLEtBQ0EsSUFFQSxJQURBaXlCLEdBQUFsekIsR0FBQWtFLElBQXFDQSxFQUFBLEtBQ3JDdWtELE1BQUF2a0QsRUFBQSxDQUNBOUUsRUFBQSxJQUFzQkEsRUFBQSxFQUFRMG9ELElBQVl6cUQsRUFBQTBFLE9BQUEsU0FDMUMsTUFJQSxHQURBbUMsSUFBaUJ1a0QsRUFBQXZrRCxHQUNqQjlFLEVBQUEsSUFBQTBvRCxHQUFBOW5ELEdBQXlDLE1BR3pDLElBQUErTixFQUFBbTBCLEdBQUFuaUMsRUFBQTFDLEVBQUFnbEMsRUFBQXdsQixHQUFBLEdBRUEsT0FEQTVsRCxHQUFBb2dDLEVBQUF0MEIsS0FBdUNBLEVBQUE0NkMsU0FBQSxHQUN2QzU2QyxFQU1BLFNBQUE2NkMsR0FBQWxoRCxFQUFBckssRUFBQStCLEVBQUF1Z0QsR0FDQSxJQUFBejZCLEVBU0E3cEIsRUFUQTBFLEVBQUEySCxFQUFBM0gsSUFBQW9DLEVBQUE5RSxFQUFBdVEsS0FDQSxXQUFBK3hDLEVBQUEsQ0FDQSxJQUFBa0osRUFBQXJyRCxLQUFBQyxJQUFBaUssRUFBQUMsUUFBQWlXLFFBQUF3QixhQUFBcHNCLE9BQUFxaUMsYUFBQXQvQixTQUFBc3RCLGdCQUFBakUsY0FDQTBwQyxFQUFBdHJELEtBQUErRSxJQUFBc21ELEVBQUEsR0FBQXRpQyxHQUFBN2UsRUFBQUMsU0FBQSxHQUNBdWQsR0FBQTlsQixFQUFBLEVBQUEvQixFQUFBdWpCLE9BQUF2akIsRUFBQXdqQixLQUFBemhCLEVBQUEwcEQsTUFFRyxRQUFBbkosSUFDSHo2QixFQUFBOWxCLEVBQUEsRUFBQS9CLEVBQUF1akIsT0FBQSxFQUFBdmpCLEVBQUF3akIsSUFBQSxHQUdBLE1BQ0F4bEIsRUFBQTRwQixHQUFBdmQsRUFBQXZGLEVBQUEraUIsSUFDQUgsU0FGUyxDQUdULEdBQUEzbEIsRUFBQSxFQUFBOGxCLEdBQUEsRUFBQUEsR0FBQW5sQixFQUFBZSxPQUFBLENBQTZDekYsRUFBQXN0RCxTQUFBLEVBQXVCLE1BQ3BFempDLEdBQUEsRUFBQTlsQixFQUVBLE9BQUEvRCxFQUtBLElBQUEwdEQsR0FBQSxTQUFBcmhELEdBQ0F0TCxLQUFBc0wsS0FDQXRMLEtBQUE0c0QsZUFBQTVzRCxLQUFBNnNELGlCQUFBN3NELEtBQUE4c0QsY0FBQTlzRCxLQUFBK3NELGdCQUFBLEtBQ0Evc0QsS0FBQWd0RCxRQUFBLElBQUFqdEQsRUFDQUMsS0FBQWl0RCxVQUFBLEtBQ0FqdEQsS0FBQWt0RCxhQUFBLEVBQ0FsdEQsS0FBQW10RCxlQUFBLE1BdVdBLFNBQUFDLEdBQUE5aEQsRUFBQXJLLEdBQ0EsSUFBQXljLEVBQUE2RixHQUFBalksRUFBQXJLLEVBQUFvRCxNQUNBLElBQUFxWixLQUFBSCxPQUE2QixZQUM3QixJQUFBbFosRUFBQVgsR0FBQTRILEVBQUEzSCxJQUFBMUMsRUFBQW9ELE1BQ0F1UCxFQUFBc1AsR0FBQXhGLEVBQUFyWixFQUFBcEQsRUFBQW9ELE1BRUF3SCxFQUFBc0MsR0FBQTlKLEVBQUFpSCxFQUFBM0gsSUFBQStJLFdBQUEyZ0IsRUFBQSxPQUNBLEdBQUF4aEIsRUFBQSxDQUNBLElBQUF5YyxFQUFBMWMsR0FBQUMsRUFBQTVLLEVBQUFtQixJQUNBaXJCLEVBQUEvRSxFQUFBLGlCQUVBLElBQUEzVyxFQUFBaVQsR0FBQWhSLEVBQUFqUyxJQUFBVixFQUFBbUIsR0FBQWlyQixHQUVBLE9BREExYixFQUFBdEosT0FBQSxTQUFBc0osRUFBQXRULFNBQUFzVCxFQUFBNVQsSUFBQTRULEVBQUE3VCxNQUNBNlQsRUFTQSxTQUFBMDdDLEdBQUFwc0QsRUFBQXFzRCxHQUF3RCxPQUE3QkEsSUFBV3JzRCxFQUFBcXNELEtBQUEsR0FBa0Jyc0QsRUF1RHhELFNBQUFzc0QsR0FBQWppRCxFQUFBalEsRUFBQWdOLEdBQ0EsSUFBQW1sRCxFQUNBLEdBQUFueUQsR0FBQWlRLEVBQUFDLFFBQUF1a0IsUUFBQSxDQUVBLEtBREEwOUIsRUFBQWxpRCxFQUFBQyxRQUFBdWtCLFFBQUEvekIsV0FBQXNNLElBQ29CLE9BQUFnbEQsR0FBQS9oRCxFQUFBbEYsUUFBQVYsR0FBQTRGLEVBQUFDLFFBQUE4TSxPQUFBLFFBQ3BCaGQsRUFBQSxLQUFnQmdOLEVBQUEsT0FFaEIsSUFBQW1sRCxFQUFBbnlELEdBQTBCbXlELElBQUF2d0QsV0FBQSxDQUMxQixJQUFBdXdELE1BQUFsaUQsRUFBQUMsUUFBQXVrQixRQUF3RCxZQUN4RCxHQUFBMDlCLEVBQUF2d0QsWUFBQXV3RCxFQUFBdndELFlBQUFxTyxFQUFBQyxRQUFBdWtCLFFBQTZFLE1BRzdFLFFBQUE5NEIsRUFBQSxFQUFpQkEsRUFBQXNVLEVBQUFDLFFBQUFtUyxLQUFBL2hCLE9BQTRCM0UsSUFBQSxDQUM3QyxJQUFBa2pCLEVBQUE1TyxFQUFBQyxRQUFBbVMsS0FBQTFtQixHQUNBLEdBQUFrakIsRUFBQTdlLE1BQUFteUQsRUFDTyxPQUFBQyxHQUFBdnpDLEVBQUE3ZSxFQUFBZ04sSUFJUCxTQUFBb2xELEdBQUF2ekMsRUFBQTdlLEVBQUFnTixHQUNBLElBQUFtWixFQUFBdEgsRUFBQTNWLEtBQUF0SSxXQUFBcXhELEdBQUEsRUFDQSxJQUFBanlELElBQUF5QixFQUFBMGtCLEVBQUFubUIsR0FBMEMsT0FBQWd5RCxHQUFBM25ELEdBQUFkLEdBQUFzVixFQUFBN1YsTUFBQSxPQUMxQyxHQUFBaEosR0FBQW1tQixJQUNBOHJDLEdBQUEsRUFDQWp5RCxFQUFBbW1CLEVBQUF6bEIsV0FBQXNNLEdBQ0FBLEVBQUEsR0FDQWhOLEdBQUEsQ0FDQSxJQUFBZ0osRUFBQTZWLEVBQUFNLEtBQUEvWSxFQUFBeVksRUFBQU0sTUFBQU4sRUFBQTdWLEtBQ0EsT0FBQWdwRCxHQUFBM25ELEdBQUFkLEdBQUFQLEtBQUFFLEtBQUE1SSxRQUFBMnhELEdBSUEsSUFBQUksRUFBQSxHQUFBcnlELEVBQUEyQixTQUFBM0IsRUFBQSxLQUFBc3lELEVBQUF0eUQsRUFLQSxJQUpBcXlELEdBQUEsR0FBQXJ5RCxFQUFBVSxXQUFBSixRQUFBLEdBQUFOLEVBQUFZLFdBQUFlLFdBQ0Ewd0QsRUFBQXJ5RCxFQUFBWSxXQUNBb00sSUFBaUJBLEVBQUFxbEQsRUFBQUUsVUFBQWp5RCxTQUVqQmd5RCxFQUFBMXdELFlBQUF1a0IsR0FBeUNtc0MsSUFBQTF3RCxXQUN6QyxJQUFBK1QsRUFBQWtKLEVBQUFsSixRQUFBK0osRUFBQS9KLEVBQUErSixLQUVBLFNBQUFyUixFQUFBZ2tELEVBQUFDLEVBQUF0bEQsR0FDQSxRQUFBclIsR0FBQSxFQUFvQkEsR0FBQStqQixJQUFBcGYsT0FBQSxHQUE4QjNFLElBRWxELElBREEsSUFBQXlYLEVBQUF6WCxFQUFBLEVBQUFnYSxFQUFBclAsSUFBQW9aLEVBQUEvakIsR0FDQW9XLEVBQUEsRUFBcUJBLEVBQUFxQixFQUFBOVMsT0FBbUJ5UixHQUFBLEdBQ3hDLElBQUF5Z0QsRUFBQXAvQyxFQUFBckIsRUFBQSxHQUNBLEdBQUF5Z0QsR0FBQUgsR0FBQUcsR0FBQUYsRUFBQSxDQUNBLElBQUF0cEQsRUFBQU8sR0FBQTVOLEVBQUEsRUFBQWtqQixFQUFBN1YsS0FBQTZWLEVBQUFNLEtBQUF4akIsSUFDQW9MLEVBQUFxTSxFQUFBckIsR0FBQS9FLEVBRUEsT0FEQUEsRUFBQSxHQUFBd2xELEdBQUFILEtBQWtEdHJELEVBQUFxTSxFQUFBckIsR0FBQS9FLEVBQUEsT0FDbEQzQyxHQUFBckIsRUFBQWpDLEtBS0EsSUFBQWtHLEVBQUFvQixFQUFBZ2tELEVBQUFDLEVBQUF0bEQsR0FDQSxHQUFBQyxFQUFjLE9BQUEra0QsR0FBQS9rRCxFQUFBZ2xELEdBR2QsUUFBQTl4RCxFQUFBbXlELEVBQUF0dEMsWUFBQXdKLEVBQUE2akMsSUFBQUUsVUFBQWp5RCxPQUFBME0sRUFBQSxFQUFpRzdNLEVBQU9BLElBQUE2a0IsWUFBQSxDQUV4RyxHQURBL1gsRUFBQW9CLEVBQUFsTyxJQUFBUyxXQUFBLEdBRU8sT0FBQW94RCxHQUFBM25ELEdBQUE0QyxFQUFBakUsS0FBQWlFLEVBQUFsRyxHQUFBeW5CLEdBQUF5akMsR0FFQXpqQyxHQUFBcnVCLEVBQUFzeUQsWUFBQW55RCxPQUVQLFFBQUErUixFQUFBaWdELEVBQUFJLGdCQUFBQyxFQUFBM2xELEVBQTZEcUYsRUFBUUEsSUFBQXFnRCxnQkFBQSxDQUVyRSxHQURBemxELEVBQUFvQixFQUFBZ0UsSUFBQXpSLFlBQUEsR0FFTyxPQUFBb3hELEdBQUEzbkQsR0FBQTRDLEVBQUFqRSxLQUFBaUUsRUFBQWxHLEdBQUE0ckQsR0FBQVYsR0FFQVUsR0FBQXRnRCxFQUFBb2dELFlBQUFueUQsUUF2ZlBneEQsR0FBQS96RCxVQUFBd3VELEtBQUEsU0FBQTc3QyxHQUNBLElBQUE4K0IsRUFBQXJxQyxLQUVBd2MsRUFBQXhjLEtBQUFzTCxFQUFBa1IsRUFBQWxSLEdBQ0F3RixFQUFBMEwsRUFBQTFMLElBQUF2RixFQUFBdWtCLFFBNEJBLFNBQUFtK0IsRUFBQXB5RCxHQUNBLElBQUFxVCxHQUFBNUQsRUFBQXpQLEdBQUEsQ0FDQSxHQUFBeVAsRUFBQW8wQixvQkFDQW1xQixJQUFxQlMsVUFBQSxFQUFBL2xELEtBQUErRyxFQUFBd2hDLGtCQUNyQixPQUFBanhDLEVBQUFpTSxNQUE0QndELEVBQUF5aEMsaUJBQUEsbUJBQ3ZCLEtBQUF6aEMsRUFBQWhHLFFBQUE0b0QsZ0JBQ0wsT0FFQSxJQUFBcGlDLEVBQUFtL0IsR0FBQTMvQyxHQUNBdStDLElBQXFCUyxVQUFBLEVBQUEvbEQsS0FBQXVuQixFQUFBdm5CLE9BQ3JCLE9BQUExSSxFQUFBaU0sTUFDQXdELEVBQUFvdUIsVUFBQSxXQUNBcHVCLEVBQUFzaEMsY0FBQTlnQixTQUFBLEVBQUFwckIsR0FDQTRLLEVBQUF5aEMsaUJBQUEsaUJBSUEsR0FBQWx4QyxFQUFBOHVELGNBQUEsQ0FDQTl1RCxFQUFBOHVELGNBQUF3RCxZQUNBLElBQUE1eEQsRUFBQXF0RCxHQUFBcmxELEtBQUEwbkMsS0FBQSxNQUdBLEdBREFwd0MsRUFBQTh1RCxjQUFBdEMsUUFBQSxPQUFBOXJELEdBQ0FWLEVBQUE4dUQsY0FBQXBaLFFBQUEsU0FBQWgxQyxFQUVBLFlBREFWLEVBQUF1VCxpQkFLQSxJQUFBZy9DLEVBQUE5QyxLQUFBdDVDLEVBQUFvOEMsRUFBQW55RCxXQUNBcVAsRUFBQUMsUUFBQXdXLFVBQUE5QyxhQUFBbXZDLEVBQUE5aUQsRUFBQUMsUUFBQXdXLFVBQUE5bEIsWUFDQStWLEVBQUEvWixNQUFBMnhELEdBQUFybEQsS0FBQTBuQyxLQUFBLE1BQ0EsSUFBQW9pQixFQUFBMTBELFNBQUF5RCxjQUNBb0IsRUFBQXdULEdBQ0ExUixXQUFBLFdBQ0FnTCxFQUFBQyxRQUFBd1csVUFBQS9sQixZQUFBb3lELEdBQ0FDLEVBQUFuL0IsUUFDQW0vQixHQUFBdjlDLEdBQTRCMEwsRUFBQTh4Qyx3QkFDdkIsS0FoRUxuRCxHQUFBcjZDLEVBQUF4RixFQUFBaEcsUUFBQStsRCxZQUVBaDlDLEdBQUF5QyxFQUFBLGlCQUFBalYsR0FDQXFULEdBQUE1RCxFQUFBelAsSUFBQTR1RCxHQUFBNXVELEVBQUF5UCxJQUVBNVIsR0FBQSxJQUEyQjRHLFdBQUFvNUIsR0FBQXB1QixFQUFBLFdBQXVDLE9BQUErK0IsRUFBQWtrQixrQkFBaUMsTUFHbkdsZ0QsR0FBQXlDLEVBQUEsNEJBQUFqVixHQUNBd3VDLEVBQUE0aUIsV0FBd0IzcUMsS0FBQXptQixFQUFBeW1CLEtBQUE2ZixNQUFBLEtBRXhCOXpCLEdBQUF5QyxFQUFBLDZCQUFBalYsR0FDQXd1QyxFQUFBNGlCLFlBQTRCNWlCLEVBQUE0aUIsV0FBcUIzcUMsS0FBQXptQixFQUFBeW1CLEtBQUE2ZixNQUFBLE1BRWpEOXpCLEdBQUF5QyxFQUFBLDBCQUFBalYsR0FDQXd1QyxFQUFBNGlCLFlBQ0FweEQsRUFBQXltQixNQUFBK25CLEVBQUE0aUIsVUFBQTNxQyxNQUE0QytuQixFQUFBbWtCLGtCQUM1Q25rQixFQUFBNGlCLFVBQUE5cUIsTUFBQSxLQUlBOXpCLEdBQUF5QyxFQUFBLHdCQUFxQyxPQUFBMEwsRUFBQWl5Qyx3QkFFckNwZ0QsR0FBQXlDLEVBQUEsbUJBQ0F1NUIsRUFBQTRpQixXQUE0QjVpQixFQUFBbWtCLG9CQTBDNUJuZ0QsR0FBQXlDLEVBQUEsT0FBQW05QyxHQUNBNS9DLEdBQUF5QyxFQUFBLE1BQUFtOUMsSUFHQXRCLEdBQUEvekQsVUFBQTR5QixpQkFBQSxXQUNBLElBQUE3WixFQUFBNlosR0FBQXhyQixLQUFBc0wsSUFBQSxHQUVBLE9BREFxRyxFQUFBdWQsTUFBQWx2QixLQUFBc0wsR0FBQWtJLE1BQUFrYixRQUNBL2MsR0FHQWc3QyxHQUFBL3pELFVBQUEyeUIsY0FBQSxTQUFBM1gsRUFBQXdrQixHQUNBeGtCLEdBQUE1VCxLQUFBc0wsR0FBQUMsUUFBQW1TLEtBQUEvaEIsVUFDQWlZLEVBQUFzYixPQUFBa0osSUFBZ0NwNEIsS0FBQXN1RCx1QkFDaEN0dUQsS0FBQTB1RCx1QkFBQTk2QyxLQUdBKzRDLEdBQUEvekQsVUFBQW1aLGFBQUEsV0FDQSxPQUFBL1IsS0FBQXNMLEdBQUFDLFFBQUFpVyxRQUFBdFAsY0FBQUgsZ0JBR0E0NkMsR0FBQS96RCxVQUFBMDFELHFCQUFBLFdBQ0EsSUFBQXppQyxFQUFBN3JCLEtBQUErUixlQUFBekcsRUFBQXRMLEtBQUFzTCxHQUFBczBCLEVBQUF0MEIsRUFBQTNILElBQUFrb0IsSUFBQUosVUFDQXJvQixFQUFBdzhCLEVBQUF4OEIsT0FBQUMsRUFBQXU4QixFQUFBdjhCLEtBRUEsR0FBQWlJLEVBQUFDLFFBQUE4TSxRQUFBL00sRUFBQUMsUUFBQTZNLFVBQUFoVixFQUFBaUIsTUFBQWlILEVBQUFDLFFBQUE4TSxRQUFBaFYsRUFBQWdCLEtBQUFpSCxFQUFBQyxRQUFBNk0sU0FDQXlULEVBQUF1UixzQkFEQSxDQUtBLElBQUF1eEIsRUFBQXBCLEdBQUFqaUQsRUFBQXVnQixFQUFBMFEsV0FBQTFRLEVBQUE0USxjQUNBbXlCLEVBQUFyQixHQUFBamlELEVBQUF1Z0IsRUFBQTZRLFVBQUE3USxFQUFBOFEsYUFDQSxJQUFBZ3lCLEtBQUFyQixNQUFBc0IsS0FBQXRCLEtBQ0EsR0FBQTFuRCxHQUFBSyxHQUFBMG9ELEVBQUFDLEdBQUF4ckQsSUFDQSxHQUFBd0MsR0FBQUksR0FBQTJvRCxFQUFBQyxHQUFBdnJELEdBRkEsQ0FLQSxJQUFBcWEsRUFBQXBTLEVBQUFDLFFBQUFtUyxLQUNBNWYsRUFBQXNGLEVBQUFpQixNQUFBaUgsRUFBQUMsUUFBQTZNLFVBQUFnMUMsR0FBQTloRCxFQUFBbEksS0FDTy9ILEtBQUFxaUIsRUFBQSxHQUFBMU0sUUFBQXJQLElBQUEsR0FBQTBHLE9BQUEsR0FDUHRLLEVBQUFzRixFQUFBZ0IsS0FBQWlILEVBQUFDLFFBQUE4TSxRQUFBKzBDLEdBQUE5aEQsRUFBQWpJLEdBQ0EsSUFBQXRGLEVBQUEsQ0FDQSxJQUFBaVQsRUFBQTBNLElBQUEvaEIsT0FBQSxHQUFBcVYsUUFDQXZDLEVBQUF1QyxFQUFBK0osS0FBQS9KLEVBQUErSixLQUFBL0osRUFBQStKLEtBQUFwZixPQUFBLEdBQUFxVixFQUFBclAsSUFDQTVELEdBQVcxQyxLQUFBb1QsSUFBQTlTLE9BQUEsR0FBQTBNLE9BQUFvRyxJQUFBOVMsT0FBQSxHQUFBOFMsSUFBQTlTLE9BQUEsSUFHWCxHQUFBbUMsR0FBQUMsRUFBQSxDQUtBLElBQUE4d0QsRUFBQW5uRCxFQUFBbWtCLEVBQUFpakMsWUFBQWpqQyxFQUFBa2pDLFdBQUEsR0FDQSxJQUFPRixFQUFBMXpELEVBQUEyQyxFQUFBekMsS0FBQXlDLEVBQUF1SyxPQUFBdEssRUFBQXNLLE9BQUF0SyxFQUFBMUMsTUFDUCxNQUFBUSxJQUNBZ3pELEtBQ0ExMUQsR0FBQW1TLEVBQUFrSSxNQUFBa2IsU0FDQTdDLEVBQUF4dEIsU0FBQVAsRUFBQXpDLEtBQUF5QyxFQUFBdUssUUFDQXdtRCxFQUFBNWtELFlBQ0E0aEIsRUFBQXVSLGtCQUNBdlIsRUFBQXdSLFNBQUF3eEIsTUFHQWhqQyxFQUFBdVIsa0JBQ0F2UixFQUFBd1IsU0FBQXd4QixJQUVBbm5ELEdBQUEsTUFBQW1rQixFQUFBMFEsV0FBd0MxUSxFQUFBd1IsU0FBQTMxQixHQUN4Q3ZPLEdBQXFCNkcsS0FBQWd2RCxvQkFFckJodkQsS0FBQWl2RCx5QkFyQkFwakMsRUFBQXVSLHFCQXdCQXV2QixHQUFBL3pELFVBQUFvMkQsaUJBQUEsV0FDQSxJQUFBM2tCLEVBQUFycUMsS0FFQUssYUFBQUwsS0FBQWt0RCxhQUNBbHRELEtBQUFrdEQsWUFBQTVzRCxXQUFBLFdBQ0ErcEMsRUFBQTZpQixhQUFBLEVBQ0E3aUIsRUFBQS9ULG9CQUNPK1QsRUFBQS8rQixHQUFBb3VCLFVBQUEsV0FBa0MsT0FBQTJRLEVBQUEvK0IsR0FBQW9FLE1BQUE0bUIsa0JBQUEsS0FDdEMsS0FHSHEyQixHQUFBL3pELFVBQUE4MUQsdUJBQUEsU0FBQTk2QyxHQUNBMVgsRUFBQThELEtBQUFzTCxHQUFBQyxRQUFBc2pCLFVBQUFqYixFQUFBK1gsU0FDQXp2QixFQUFBOEQsS0FBQXNMLEdBQUFDLFFBQUFneUIsYUFBQTNwQixFQUFBekIsWUFHQXc2QyxHQUFBL3pELFVBQUFxMkQsa0JBQUEsV0FDQSxJQUFBcGpDLEVBQUE3ckIsS0FBQStSLGVBQ0EvUixLQUFBNHNELGVBQUEvZ0MsRUFBQTBRLFdBQXVDdjhCLEtBQUE2c0QsaUJBQUFoaEMsRUFBQTRRLGFBQ3ZDejhCLEtBQUE4c0QsY0FBQWpoQyxFQUFBNlEsVUFBcUMxOEIsS0FBQStzRCxnQkFBQWxoQyxFQUFBOFEsYUFHckNnd0IsR0FBQS96RCxVQUFBczJELGtCQUFBLFdBQ0EsSUFBQXJqQyxFQUFBN3JCLEtBQUErUixlQUNBLElBQUE4WixFQUFBaWpDLFdBQXdCLFNBQ3hCLElBQUF6ekQsRUFBQXd3QixFQUFBa2pDLFdBQUEsR0FBQUksd0JBQ0EsT0FBQXJ5RCxFQUFBa0QsS0FBQThRLElBQUF6VixJQUdBc3hELEdBQUEvekQsVUFBQXMyQixNQUFBLFdBQ0EsWUFBQWx2QixLQUFBc0wsR0FBQWhHLFFBQUFpcUIsV0FDQXZ2QixLQUFBa3ZELHFCQUNPbHZELEtBQUF1ckIsY0FBQXZyQixLQUFBd3JCLG9CQUFBLEdBQ1B4ckIsS0FBQThRLElBQUFvZSxVQUdBeTlCLEdBQUEvekQsVUFBQXcyRCxLQUFBLFdBQW1EcHZELEtBQUE4USxJQUFBcytDLFFBQ25EekMsR0FBQS96RCxVQUFBaXdELFNBQUEsV0FBdUQsT0FBQTdvRCxLQUFBOFEsS0FFdkQ2N0MsR0FBQS96RCxVQUFBK3BELGNBQUEsV0FBNEQsVUFFNURnSyxHQUFBL3pELFVBQUE4MkIsY0FBQSxXQUNBLElBQUFsVCxFQUFBeGMsS0FDQUEsS0FBQWt2RCxvQkFDS2x2RCxLQUFBcXZELGdCQUVBNTFCLEdBQUF6NUIsS0FBQXNMLEdBQUEsV0FBK0IsT0FBQWtSLEVBQUFsUixHQUFBb0UsTUFBQTRtQixrQkFBQSxJQVFwQ3QyQixLQUFBZ3RELFFBQUE3c0QsSUFBQUgsS0FBQXNMLEdBQUFoRyxRQUFBZ3FELGFBTkEsU0FBQUMsSUFDQS95QyxFQUFBbFIsR0FBQWtJLE1BQUFrYixVQUNBbFMsRUFBQTZ5QyxnQkFDQTd5QyxFQUFBd3dDLFFBQUE3c0QsSUFBQXFjLEVBQUFsUixHQUFBaEcsUUFBQWdxRCxhQUFBQyxPQU1BNUMsR0FBQS96RCxVQUFBMDlCLGlCQUFBLFdBQ0EsSUFBQXpLLEVBQUE3ckIsS0FBQStSLGVBQ0EsT0FBQThaLEVBQUEwUSxZQUFBdjhCLEtBQUE0c0QsZ0JBQUEvZ0MsRUFBQTRRLGNBQUF6OEIsS0FBQTZzRCxrQkFDQWhoQyxFQUFBNlEsV0FBQTE4QixLQUFBOHNELGVBQUFqaEMsRUFBQThRLGFBQUEzOEIsS0FBQStzRCxpQkFHQUosR0FBQS96RCxVQUFBeTJELGNBQUEsV0FDQSxTQUFBcnZELEtBQUFtdEQsaUJBQUFudEQsS0FBQWt0RCxhQUFBbHRELEtBQUFzMkIsbUJBQUEsQ0FDQSxJQUFBekssRUFBQTdyQixLQUFBK1IsZUFBQXpHLEVBQUF0TCxLQUFBc0wsR0FPQSxHQUFBaFIsR0FBQVAsR0FBQWlHLEtBQUFzTCxHQUFBaEcsUUFBQTRhLFFBQUF2a0IsUUE4SkEsU0FBQU4sR0FDQSxRQUFBbTBELEVBQUFuMEQsRUFBdUJtMEQsRUFBTUEsSUFBQXZ5RCxXQUN4QiwrQkFBQTdELEtBQUFvMkQsRUFBQWowRCxXQUF3RCxTQUM3RCxTQWpLQWswRCxDQUFBNWpDLEVBQUEwUSxZQUlBLE9BSEF2OEIsS0FBQXNMLEdBQUFva0Qsa0JBQThCNW5ELEtBQUEsVUFBQTh1QyxRQUFBLEVBQUF4bkMsZUFBQWhPLEtBQUFtakIsTUFDOUJ2a0IsS0FBQW92RCxZQUNBcHZELEtBQUFrdkIsUUFHQSxJQUFBbHZCLEtBQUFpdEQsVUFBQSxDQUNBanRELEtBQUFpdkQsb0JBQ0EsSUFBQTdrQyxFQUFBbWpDLEdBQUFqaUQsRUFBQXVnQixFQUFBMFEsV0FBQTFRLEVBQUE0USxjQUNBdFEsRUFBQW9oQyxHQUFBamlELEVBQUF1Z0IsRUFBQTZRLFVBQUE3USxFQUFBOFEsYUFDQXZTLEdBQUErQixHQUF1QnNOLEdBQUFudUIsRUFBQSxXQUN2Qnk1QixHQUFBejVCLEVBQUEzSCxJQUFBbzhCLEdBQUEzVixFQUFBK0IsR0FBQXpyQixJQUNBMHBCLEVBQUFrakMsS0FBQW5oQyxFQUFBbWhDLE9BQWlDaGlELEVBQUFvRSxNQUFBNG1CLGtCQUFBLFFBSWpDcTJCLEdBQUEvekQsVUFBQSsyRCxZQUFBLFdBQ0EsTUFBQTN2RCxLQUFBbXRELGlCQUNBOXNELGFBQUFMLEtBQUFtdEQsZ0JBQ0FudEQsS0FBQW10RCxlQUFBLE1BR0EsSUFRQXlDLEVBQUF4aEMsRUFBQXloQyxFQVJBdmtELEVBQUF0TCxLQUFBc0wsR0FBQUMsRUFBQUQsRUFBQUMsUUFBQXNnQixFQUFBdmdCLEVBQUEzSCxJQUFBa29CLElBQUFKLFVBQ0Fyb0IsRUFBQXlvQixFQUFBem9CLE9BQUFDLEVBQUF3b0IsRUFBQXhvQixLQUtBLEdBSkEsR0FBQUQsRUFBQWhCLElBQUFnQixFQUFBaUIsS0FBQWlILEVBQUF3MUIsY0FDSzE5QixFQUFBc0MsR0FBQXRDLEVBQUFpQixLQUFBLEVBQUFYLEdBQUE0SCxFQUFBM0gsSUFBQVAsRUFBQWlCLEtBQUEsR0FBQTFJLFNBQ0wwSCxFQUFBakIsSUFBQXNCLEdBQUE0SCxFQUFBM0gsSUFBQU4sRUFBQWdCLE1BQUFFLEtBQUE1SSxRQUFBMEgsRUFBQWdCLEtBQUFpSCxFQUFBVCxhQUNLeEgsRUFBQXFDLEdBQUFyQyxFQUFBZ0IsS0FBQSxNQUNMakIsRUFBQWlCLEtBQUFrSCxFQUFBNk0sVUFBQS9VLEVBQUFnQixLQUFBa0gsRUFBQThNLE9BQUEsRUFBcUUsU0FHckVqVixFQUFBaUIsTUFBQWtILEVBQUE2TSxVQUFBLElBQUF3M0MsRUFBQXBzQyxHQUFBbFksRUFBQWxJLEVBQUFpQixRQUNBK3BCLEVBQUF4cEIsR0FBQTJHLEVBQUFtUyxLQUFBLEdBQUFyWixNQUNBd3JELEVBQUF0a0QsRUFBQW1TLEtBQUEsR0FBQXJpQixPQUVBK3lCLEVBQUF4cEIsR0FBQTJHLEVBQUFtUyxLQUFBa3lDLEdBQUF2ckQsTUFDQXdyRCxFQUFBdGtELEVBQUFtUyxLQUFBa3lDLEVBQUEsR0FBQXYwRCxLQUFBZ2xCLGFBRUEsSUFDQWdPLEVBQUF5aEMsRUFEQUMsRUFBQXZzQyxHQUFBbFksRUFBQWpJLEVBQUFnQixNQVVBLEdBUkEwckQsR0FBQXhrRCxFQUFBbVMsS0FBQS9oQixPQUFBLEdBQ0EweUIsRUFBQTlpQixFQUFBOE0sT0FBQSxFQUNBeTNDLEVBQUF2a0QsRUFBQXVrQixRQUFBN1UsWUFFQW9ULEVBQUF6cEIsR0FBQTJHLEVBQUFtUyxLQUFBcXlDLEVBQUEsR0FBQTFyRCxNQUFBLEVBQ0F5ckQsRUFBQXZrRCxFQUFBbVMsS0FBQXF5QyxFQUFBLEdBQUExMEQsS0FBQTB5RCxrQkFHQThCLEVBQWtCLFNBR2xCLElBRkEsSUFBQUcsRUFBQTFrRCxFQUFBM0gsSUFBQWdsQyxXQXFIQSxTQUFBcjlCLEVBQUFsSSxFQUFBQyxFQUFBK3FCLEVBQUFDLEdBQ0EsSUFBQTlwQixFQUFBLEdBQUEwckQsR0FBQSxFQUFBcGtCLEVBQUF2Z0MsRUFBQTNILElBQUF1b0MsZ0JBQUFna0IsR0FBQSxFQUVBLFNBQUFDLElBQ0FGLElBQ0ExckQsR0FBQXNuQyxFQUNBcWtCLElBQTJCM3JELEdBQUFzbkMsR0FDM0Jva0IsRUFBQUMsR0FBQSxHQUdBLFNBQUFFLEVBQUFydEQsR0FDQUEsSUFDQW90RCxJQUNBNXJELEdBQUF4QixHQUdBLFNBQUFzdEQsRUFBQWgxRCxHQUNBLE1BQUFBLEVBQUEyQixTQUFBLENBQ0EsSUFBQXN6RCxFQUFBajFELEVBQUFzbUIsYUFBQSxXQUNBLEdBQUEydUMsRUFFQSxZQURBRixFQUFBRSxHQUdBLElBQUFyK0MsRUFBQXMrQyxFQUFBbDFELEVBQUFzbUIsYUFBQSxhQUNBLEdBQUE0dUMsRUFBQSxDQUNBLElBQUFqb0QsRUFBQWdELEVBQUFrZ0MsVUFBQTlsQyxHQUFBMG9CLEVBQUEsR0FBQTFvQixHQUFBMm9CLEVBQUEsS0F2QkEsU0FBQXB1QixHQUFnQyxnQkFBQTJHLEdBQTJCLE9BQUFBLEVBQUEzRyxPQXVCM0R1d0QsRUFBQUQsSUFHQSxZQUZBam9ELEVBQUEzTSxTQUFBc1csRUFBQTNKLEVBQUEsR0FBQW9CLEtBQUEsS0FDVzBtRCxFQUFBaHNELEdBQUFrSCxFQUFBM0gsSUFBQXNPLEVBQUE3TyxLQUFBNk8sRUFBQTVPLElBQUE0b0MsS0FBQUosS0FHWCxZQUFBeHdDLEVBQUFzbUIsYUFBQSxtQkFBNEQsT0FDNUQsSUFBQTh1QyxFQUFBLDZCQUFBcjNELEtBQUFpQyxFQUFBcTFELFVBQ0EsWUFBQXQzRCxLQUFBaUMsRUFBQXExRCxXQUFBLEdBQUFyMUQsRUFBQXl5RCxZQUFBbnlELE9BQXlFLE9BRXpFODBELEdBQW9CTixJQUNwQixRQUFBbjVELEVBQUEsRUFBcUJBLEVBQUFxRSxFQUFBVSxXQUFBSixPQUE0QjNFLElBQ3hDcTVELEVBQUFoMUQsRUFBQVUsV0FBQS9FLElBRVQsYUFBQW9DLEtBQUFpQyxFQUFBcTFELFlBQTZDUixHQUFBLEdBQzdDTyxJQUFvQlIsR0FBQSxRQUNmLEdBQUE1MEQsRUFBQTJCLFVBQ0xvekQsRUFBQS8wRCxFQUFBdXlELFVBQUF6Z0QsUUFBQSxjQUFBQSxRQUFBLGdCQUdBLEtBQ0FrakQsRUFBQWp0RCxHQUNBQSxHQUFBQyxHQUNBRCxJQUFBaWQsWUFDQTZ2QyxHQUFBLEVBRUEsT0FBQTNyRCxFQXZLQW9zRCxDQUFBcmxELEVBQUF1a0QsRUFBQUMsRUFBQTFoQyxFQUFBQyxJQUNBdWlDLEVBQUF4c0QsR0FBQWtILEVBQUEzSCxJQUFBK0IsR0FBQTBvQixFQUFBLEdBQUExb0IsR0FBQTJvQixFQUFBM3FCLEdBQUE0SCxFQUFBM0gsSUFBQTBxQixHQUFBOXBCLEtBQUE1SSxTQUNBcTBELEVBQUFyMEQsT0FBQSxHQUFBaTFELEVBQUFqMUQsT0FBQSxHQUNBLEdBQUE4RixFQUFBdXVELElBQUF2dUQsRUFBQW12RCxHQUF1Q1osRUFBQTlzQixNQUFlMHRCLEVBQUExdEIsTUFBZTdVLFFBQ3JFLElBQUEyaEMsRUFBQSxJQUFBWSxFQUFBLEdBQ1UsTUFEOEJaLEVBQUFyZ0MsUUFBaUJpaEMsRUFBQWpoQyxRQUFpQnZCLElBTTFFLElBRkEsSUFBQXlpQyxFQUFBLEVBQUFDLEVBQUEsRUFDQXYvQixFQUFBeStCLEVBQUEsR0FBQWUsRUFBQUgsRUFBQSxHQUFBSSxFQUFBNXZELEtBQUFDLElBQUFrd0IsRUFBQTUxQixPQUFBbzFELEVBQUFwMUQsUUFDQWsxRCxFQUFBRyxHQUFBei9CLEVBQUExdUIsV0FBQWd1RCxJQUFBRSxFQUFBbHVELFdBQUFndUQsTUFDS0EsRUFJTCxJQUhBLElBQUFJLEVBQUF4dkQsRUFBQXV1RCxHQUFBa0IsRUFBQXp2RCxFQUFBbXZELEdBQ0FPLEVBQUEvdkQsS0FBQUMsSUFBQTR2RCxFQUFBdDFELFFBQUEsR0FBQXEwRCxFQUFBcjBELE9BQUFrMUQsRUFBQSxHQUNBSyxFQUFBdjFELFFBQUEsR0FBQWkxRCxFQUFBajFELE9BQUFrMUQsRUFBQSxJQUNBQyxFQUFBSyxHQUNBRixFQUFBcHVELFdBQUFvdUQsRUFBQXQxRCxPQUFBbTFELEVBQUEsSUFBQUksRUFBQXJ1RCxXQUFBcXVELEVBQUF2MUQsT0FBQW0xRCxFQUFBLE1BQ0tBLEVBRUwsTUFBQWQsRUFBQXIwRCxRQUFBLEdBQUFpMUQsRUFBQWoxRCxRQUFBeXlCLEdBQUFockIsRUFBQWlCLEtBQ0EsS0FBQXdzRCxLQUFBenRELEVBQUFoQixJQUNBNnVELEVBQUFwdUQsV0FBQW91RCxFQUFBdDFELE9BQUFtMUQsRUFBQSxJQUFBSSxFQUFBcnVELFdBQUFxdUQsRUFBQXYxRCxPQUFBbTFELEVBQUEsSUFDQUQsSUFDQUMsSUFJQWQsSUFBQXIwRCxPQUFBLEdBQUFzMUQsRUFBQXgxRCxNQUFBLEVBQUF3MUQsRUFBQXQxRCxPQUFBbTFELEdBQUEzakQsUUFBQSxlQUNBNmlELEVBQUEsR0FBQUEsRUFBQSxHQUFBdjBELE1BQUFvMUQsR0FBQTFqRCxRQUFBLGVBRUEsSUFBQWlrRCxFQUFBMXJELEdBQUEwb0IsRUFBQXlpQyxHQUNBUSxFQUFBM3JELEdBQUEyb0IsRUFBQXVpQyxFQUFBajFELE9BQUE4RixFQUFBbXZELEdBQUFqMUQsT0FBQW0xRCxFQUFBLEdBQ0EsT0FBQWQsRUFBQXIwRCxPQUFBLEdBQUFxMEQsRUFBQSxJQUFBcHFELEdBQUF3ckQsRUFBQUMsSUFDQTVvQixHQUFBbjlCLEVBQUEzSCxJQUFBcXNELEVBQUFvQixFQUFBQyxFQUFBLFdBQ0EsUUFGQSxHQU1BMUUsR0FBQS96RCxVQUFBcW9ELGFBQUEsV0FDQWpoRCxLQUFBeXVELHVCQUVBOUIsR0FBQS96RCxVQUFBNjJCLE1BQUEsV0FDQXp2QixLQUFBeXVELHVCQUVBOUIsR0FBQS96RCxVQUFBNjFELG9CQUFBLFdBQ0F6dUQsS0FBQWl0RCxZQUNBNXNELGFBQUFMLEtBQUFtdEQsZ0JBQ0FudEQsS0FBQWl0RCxVQUFBLEtBQ0FqdEQsS0FBQXV1RCxnQkFDQXZ1RCxLQUFBOFEsSUFBQXMrQyxPQUNBcHZELEtBQUE4USxJQUFBb2UsVUFFQXk5QixHQUFBL3pELFVBQUE0MUQsZ0JBQUEsV0FDQSxJQUFBbmtCLEVBQUFycUMsS0FFQSxNQUFBQSxLQUFBbXRELGlCQUNBbnRELEtBQUFtdEQsZUFBQTdzRCxXQUFBLFdBRUEsR0FEQStwQyxFQUFBOGlCLGVBQUEsS0FDQTlpQixFQUFBNGlCLFVBQUEsQ0FDQSxJQUFBNWlCLEVBQUE0aUIsVUFBQTlxQixLQUNZLE9BRHNCa0ksRUFBQTRpQixVQUFBLEtBR2xDNWlCLEVBQUFra0IsaUJBQ0csTUFHSDVCLEdBQUEvekQsVUFBQTIxRCxjQUFBLFdBQ0EsSUFBQWxrQixFQUFBcnFDLE1BRUFBLEtBQUFzTCxHQUFBcWxDLGNBQUEzd0MsS0FBQTJ2RCxlQUNLbDJCLEdBQUF6NUIsS0FBQXNMLEdBQUEsV0FBK0IsT0FBQXV1QixHQUFBd1EsRUFBQS8rQixPQUdwQ3FoRCxHQUFBL3pELFVBQUE4akIsY0FBQSxTQUFBcmhCLEdBQ0FBLEVBQUFpMkQsZ0JBQUEsU0FHQTNFLEdBQUEvekQsVUFBQXVwRCxXQUFBLFNBQUF0bUQsR0FDQSxHQUFBQSxFQUFBdW1ELFVBQUFwaUQsS0FBQWl0RCxZQUNBcHhELEVBQUF1VCxpQkFDQXBQLEtBQUFzTCxHQUFBcWxDLGNBQ0tqWCxHQUFBMTVCLEtBQUFzTCxHQUFBeStDLEdBQUFyd0IsQ0FBQTE1QixLQUFBc0wsR0FBQS9GLE9BQUFzd0MsYUFBQSxNQUFBaDZDLEVBQUF1bUQsU0FBQXZtRCxFQUFBKzZDLFFBQUEvNkMsRUFBQXVtRCxVQUFBLEtBR0x1SyxHQUFBL3pELFVBQUEyNEQsZ0JBQUEsU0FBQTc5QyxHQUNBMVQsS0FBQThRLElBQUF3Z0QsZ0JBQUEvckQsT0FBQSxZQUFBbU8sSUFHQWk1QyxHQUFBL3pELFVBQUE0c0QsY0FBQSxhQUNBbUgsR0FBQS96RCxVQUFBNDRELGNBQUEsYUFFQTdFLEdBQUEvekQsVUFBQTZqQix1QkFBQSxFQTJKQSxJQUFBZzFDLEdBQUEsU0FBQW5tRCxHQUNBdEwsS0FBQXNMLEtBRUF0TCxLQUFBMHhELFVBQUEsR0FLQTF4RCxLQUFBMnhELGFBQUEsRUFFQTN4RCxLQUFBZ3RELFFBQUEsSUFBQWp0RCxFQUVBQyxLQUFBOFIsY0FBQSxFQUNBOVIsS0FBQWl0RCxVQUFBLE1BR0F3RSxHQUFBNzRELFVBQUF3dUQsS0FBQSxTQUFBNzdDLEdBQ0EsSUFBQTgrQixFQUFBcnFDLEtBRUF3YyxFQUFBeGMsS0FBQXNMLEVBQUF0TCxLQUFBc0wsR0FDQXRMLEtBQUE0eEQsWUFBQXJtRCxHQUNBLElBQUF5RyxFQUFBaFMsS0FBQTZ4RCxTQW1CQSxTQUFBQyxFQUFBajJELEdBQ0EsSUFBQXFULEdBQUE1RCxFQUFBelAsR0FBQSxDQUNBLEdBQUF5UCxFQUFBbzBCLG9CQUNBbXFCLElBQXFCUyxVQUFBLEVBQUEvbEQsS0FBQStHLEVBQUF3aEMsc0JBQ2hCLEtBQUF4aEMsRUFBQWhHLFFBQUE0b0QsZ0JBQ0wsT0FFQSxJQUFBcGlDLEVBQUFtL0IsR0FBQTMvQyxHQUNBdStDLElBQXFCUyxVQUFBLEVBQUEvbEQsS0FBQXVuQixFQUFBdm5CLE9BQ3JCLE9BQUExSSxFQUFBaU0sS0FDQXdELEVBQUFzaEMsY0FBQTlnQixTQUFBLEtBQUFwckIsSUFFQThiLEVBQUFrMUMsVUFBQSxHQUNBMS9DLEVBQUEvWixNQUFBNnpCLEVBQUF2bkIsS0FBQTBuQyxLQUFBLE1BQ0F6dEMsRUFBQXdULElBR0EsT0FBQW5XLEVBQUFpTSxPQUEwQndELEVBQUFrSSxNQUFBOHpDLGFBQUEsSUFsQzFCLzdDLEVBQUFpVyxRQUFBdkMsYUFBQWpmLEtBQUF3aEIsUUFBQWpXLEVBQUFpVyxRQUFBdmxCLFlBR0E1QixJQUFZMlgsRUFBQXhWLE1BQUF3a0IsTUFBQSxPQUVaM1MsR0FBQTJELEVBQUEsbUJBQ0F2WSxHQUFBQyxHQUFBLEdBQUEyd0MsRUFBQXY0QixlQUF1RHU0QixFQUFBdjRCLGFBQUEsTUFDdkQwSyxFQUFBK3lDLFNBR0FsaEQsR0FBQTJELEVBQUEsaUJBQUFuVyxHQUNBcVQsR0FBQTVELEVBQUF6UCxJQUFBNHVELEdBQUE1dUQsRUFBQXlQLEtBRUFBLEVBQUFrSSxNQUFBNnpDLGVBQUEsRUFDQTdxQyxFQUFBdTFDLGNBc0JBMWpELEdBQUEyRCxFQUFBLE1BQUE4L0MsR0FDQXpqRCxHQUFBMkQsRUFBQSxPQUFBOC9DLEdBRUF6akQsR0FBQTlDLEVBQUFzWCxTQUFBLGlCQUFBaG5CLEdBQ0E2bEIsR0FBQW5XLEVBQUExUCxJQUFBcVQsR0FBQTVELEVBQUF6UCxLQUNBeVAsRUFBQWtJLE1BQUE2ekMsZUFBQSxFQUNBN3FDLEVBQUEwUyxXQUlBN2dCLEdBQUE5QyxFQUFBd1csVUFBQSx1QkFBQWxtQixHQUNBNmxCLEdBQUFuVyxFQUFBMVAsSUFBcUNrVSxHQUFBbFUsS0FHckN3UyxHQUFBMkQsRUFBQSw4QkFDQSxJQUFBbFUsRUFBQXdOLEVBQUF3bUIsVUFBQSxRQUNBdFYsRUFBQXl3QyxXQUEwQnp3QyxFQUFBeXdDLFVBQUE5eEQsTUFBQXk1QixRQUMxQnBZLEVBQUF5d0MsV0FDQW52RCxRQUNBM0MsTUFBQW1RLEVBQUFtL0IsU0FBQTNzQyxFQUFBd04sRUFBQXdtQixVQUFBLE9BQXFEdjJCLFVBQUEsNEJBR3JEOFMsR0FBQTJELEVBQUEsNEJBQ0F3SyxFQUFBeXdDLFlBQ0F6d0MsRUFBQSt5QyxPQUNBL3lDLEVBQUF5d0MsVUFBQTl4RCxNQUFBeTVCLFFBQ0FwWSxFQUFBeXdDLFVBQUEsU0FLQXdFLEdBQUE3NEQsVUFBQWc1RCxZQUFBLFNBQUFJLEdBRUFoeUQsS0FBQXdoQixRQUFBOHBDLEtBR0F0ckQsS0FBQTZ4RCxTQUFBN3hELEtBQUF3aEIsUUFBQXZsQixZQUdBdzFELEdBQUE3NEQsVUFBQTR5QixpQkFBQSxXQUVBLElBQUFsZ0IsRUFBQXRMLEtBQUFzTCxHQUFBQyxFQUFBRCxFQUFBQyxRQUFBNUgsRUFBQTJILEVBQUEzSCxJQUNBZ08sRUFBQTZaLEdBQUFsZ0IsR0FHQSxHQUFBQSxFQUFBaEcsUUFBQTJzRCxvQkFBQSxDQUNBLElBQUFDLEVBQUEvcEMsR0FBQTdjLEVBQUEzSCxFQUFBa29CLElBQUFKLFVBQUFVLEtBQUEsT0FDQWdtQyxFQUFBNW1ELEVBQUFpVyxRQUFBbFEsd0JBQUE4Z0QsRUFBQTdtRCxFQUFBdWtCLFFBQUF4ZSx3QkFDQUssRUFBQTBnRCxNQUFBanhELEtBQUErRSxJQUFBLEVBQUEvRSxLQUFBQyxJQUFBa0ssRUFBQWlXLFFBQUF3QixhQUFBLEdBQ0FrdkMsRUFBQXp0QyxJQUFBMnRDLEVBQUEzdEMsSUFBQTB0QyxFQUFBMXRDLE1BQ0E5UyxFQUFBMmdELE9BQUFseEQsS0FBQStFLElBQUEsRUFBQS9FLEtBQUFDLElBQUFrSyxFQUFBaVcsUUFBQUMsWUFBQSxHQUNBeXdDLEVBQUExZ0QsS0FBQTRnRCxFQUFBNWdELEtBQUEyZ0QsRUFBQTNnRCxPQUdBLE9BQUFHLEdBR0E4L0MsR0FBQTc0RCxVQUFBMnlCLGNBQUEsU0FBQWduQyxHQUNBLElBQUFqbkQsRUFBQXRMLEtBQUFzTCxHQUFBQyxFQUFBRCxFQUFBQyxRQUNBclAsRUFBQXFQLEVBQUFzakIsVUFBQTBqQyxFQUFBNW1DLFNBQ0F6dkIsRUFBQXFQLEVBQUFneUIsYUFBQWcxQixFQUFBcGdELFdBQ0EsTUFBQW9nRCxFQUFBRixRQUNBcnlELEtBQUF3aEIsUUFBQWhsQixNQUFBaW9CLElBQUE4dEMsRUFBQUYsTUFBQSxLQUNBcnlELEtBQUF3aEIsUUFBQWhsQixNQUFBZ1YsS0FBQStnRCxFQUFBRCxPQUFBLE9BTUFiLEdBQUE3NEQsVUFBQTYyQixNQUFBLFNBQUEwRyxHQUNBLElBQUFuMkIsS0FBQXd5RCxxQkFBQXh5RCxLQUFBaXRELFVBQUEsQ0FDQSxJQUFBM2hELEVBQUF0TCxLQUFBc0wsR0FDQSxHQUFBQSxFQUFBbzBCLG9CQUFBLENBQ0ExL0IsS0FBQTB4RCxVQUFBLEdBQ0EsSUFBQW4xRCxFQUFBK08sRUFBQXlHLGVBQ0EvUixLQUFBNnhELFNBQUE1NUQsTUFBQXNFLEVBQ0ErTyxFQUFBa0ksTUFBQWtiLFNBQTJCbHdCLEVBQUF3QixLQUFBNnhELFVBQzNCcDRELEdBQUFDLEdBQUEsSUFBZ0NzRyxLQUFBOFIsYUFBQXZWLFFBQzdCNDVCLElBQ0huMkIsS0FBQTB4RCxVQUFBMXhELEtBQUE2eEQsU0FBQTU1RCxNQUFBLEdBQ0F3QixHQUFBQyxHQUFBLElBQWdDc0csS0FBQThSLGFBQUEsU0FJaEMyL0MsR0FBQTc0RCxVQUFBaXdELFNBQUEsV0FBZ0QsT0FBQTdvRCxLQUFBNnhELFVBRWhESixHQUFBNzRELFVBQUErcEQsY0FBQSxXQUFxRCxVQUVyRDhPLEdBQUE3NEQsVUFBQXMyQixNQUFBLFdBQ0EsZUFBQWx2QixLQUFBc0wsR0FBQWhHLFFBQUFpcUIsWUFBQWgxQixHQUFBNEMsS0FBQTZDLEtBQUE2eEQsVUFDQSxJQUFTN3hELEtBQUE2eEQsU0FBQTNpQyxRQUNULE1BQUFyekIsTUFJQTQxRCxHQUFBNzRELFVBQUF3MkQsS0FBQSxXQUE0Q3B2RCxLQUFBNnhELFNBQUF6QyxRQUU1Q3FDLEdBQUE3NEQsVUFBQTQ0RCxjQUFBLFdBQ0F4eEQsS0FBQXdoQixRQUFBaGxCLE1BQUFpb0IsSUFBQXprQixLQUFBd2hCLFFBQUFobEIsTUFBQWdWLEtBQUEsR0FHQWlnRCxHQUFBNzRELFVBQUE4MkIsY0FBQSxXQUFxRDF2QixLQUFBeXlELFlBSXJEaEIsR0FBQTc0RCxVQUFBNjVELFNBQUEsV0FDQSxJQUFBcG9CLEVBQUFycUMsS0FFQUEsS0FBQTJ4RCxhQUNBM3hELEtBQUFndEQsUUFBQTdzRCxJQUFBSCxLQUFBc0wsR0FBQWhHLFFBQUFncUQsYUFBQSxXQUNBamxCLEVBQUFrbEIsT0FDQWxsQixFQUFBLytCLEdBQUFrSSxNQUFBa2IsU0FBa0MyYixFQUFBb29CLGNBT2xDaEIsR0FBQTc0RCxVQUFBbTVELFNBQUEsV0FDQSxJQUFBVyxHQUFBLEVBQUFsMkMsRUFBQXhjLEtBQ0F3YyxFQUFBbTFDLGFBQUEsRUFNQW4xQyxFQUFBd3dDLFFBQUE3c0QsSUFBQSxHQUxBLFNBQUFySCxJQUNBLElBQUE0L0IsRUFBQWxjLEVBQUEreUMsT0FDQTcyQixHQUFBZzZCLEdBQ1VsMkMsRUFBQW0xQyxhQUFBLEVBQTBCbjFDLEVBQUFpMkMsYUFETkMsR0FBQSxFQUFjbDJDLEVBQUF3d0MsUUFBQTdzRCxJQUFBLEdBQUFySCxPQVk1QzI0RCxHQUFBNzRELFVBQUEyMkQsS0FBQSxXQUNBLElBQUFsbEIsRUFBQXJxQyxLQUVBc0wsRUFBQXRMLEtBQUFzTCxHQUFBa1IsRUFBQXhjLEtBQUE2eEQsU0FBQUgsRUFBQTF4RCxLQUFBMHhELFVBS0EsR0FBQTF4RCxLQUFBd3lELHFCQUFBbG5ELEVBQUFrSSxNQUFBa2IsU0FDQTVjLEdBQUEwSyxLQUFBazFDLElBQUExeEQsS0FBQWl0RCxXQUNBM2hELEVBQUFxbEMsY0FBQXJsQyxFQUFBaEcsUUFBQXNsRCxjQUFBdC9DLEVBQUFrSSxNQUFBOHRDLE9BQ0ssU0FFTCxJQUFBLzhDLEVBQUFpWSxFQUFBdmtCLE1BRUEsR0FBQXNNLEdBQUFtdEQsSUFBQXBtRCxFQUFBbzBCLG9CQUFxRCxTQUlyRCxHQUFBam1DLEdBQUFDLEdBQUEsR0FBQXNHLEtBQUE4UixlQUFBdk4sR0FDQS9KLEdBQUEsa0JBQUFwQixLQUFBbUwsR0FFQSxPQURBK0csRUFBQUMsUUFBQWlSLE1BQUFpVCxTQUNBLEVBR0EsR0FBQW5rQixFQUFBM0gsSUFBQWtvQixLQUFBdmdCLEVBQUFDLFFBQUFpa0Isa0JBQUEsQ0FDQSxJQUFBNXJCLEVBQUFXLEVBQUExQixXQUFBLEdBRUEsR0FEQSxNQUFBZSxHQUFBOHRELElBQXdDQSxFQUFBLEtBQ3hDLE1BQUE5dEQsRUFBd0MsT0FBZDVELEtBQUF5dkIsUUFBY3p2QixLQUFBc0wsR0FBQSswQyxZQUFBLFFBSXhDLElBREEsSUFBQXNTLEVBQUEsRUFBQTE3RCxFQUFBbUssS0FBQUMsSUFBQXF3RCxFQUFBLzFELE9BQUE0SSxFQUFBNUksUUFDQWczRCxFQUFBMTdELEdBQUF5NkQsRUFBQTd1RCxXQUFBOHZELElBQUFwdUQsRUFBQTFCLFdBQUE4dkQsTUFBMkVBLEVBZ0IzRSxPQWRBbDVCLEdBQUFudUIsRUFBQSxXQUNBeStDLEdBQUF6K0MsRUFBQS9HLEVBQUE5SSxNQUFBazNELEdBQUFqQixFQUFBLzFELE9BQUFnM0QsRUFDQSxLQUFBdG9CLEVBQUE0aUIsVUFBQSxpQkFHQTFvRCxFQUFBNUksT0FBQSxLQUFBNEksRUFBQTVFLFFBQUEsU0FBd0Q2YyxFQUFBdmtCLE1BQUFveUMsRUFBQXFuQixVQUFBLEdBQzlDcm5CLEVBQUFxbkIsVUFBQW50RCxFQUVWOGxDLEVBQUE0aUIsWUFDQTVpQixFQUFBNGlCLFVBQUE5eEQsTUFBQXk1QixRQUNBeVYsRUFBQTRpQixVQUFBOXhELE1BQUFtUSxFQUFBbS9CLFNBQUFKLEVBQUE0aUIsVUFBQW52RCxNQUFBd04sRUFBQXdtQixVQUFBLE9BQzBDdjJCLFVBQUEsNkJBRzFDLEdBR0FrMkQsR0FBQTc0RCxVQUFBcW9ELGFBQUEsV0FDQWpoRCxLQUFBMnhELGFBQUEzeEQsS0FBQXV2RCxTQUF3Q3Z2RCxLQUFBMnhELGFBQUEsSUFHeENGLEdBQUE3NEQsVUFBQXVwRCxXQUFBLFdBQ0Exb0QsR0FBQUMsR0FBQSxJQUE4QnNHLEtBQUE4UixhQUFBLE1BQzlCOVIsS0FBQSt4RCxZQUdBTixHQUFBNzRELFVBQUE0c0QsY0FBQSxTQUFBM3BELEdBQ0EsSUFBQTJnQixFQUFBeGMsS0FBQXNMLEVBQUFrUixFQUFBbFIsR0FBQUMsRUFBQUQsRUFBQUMsUUFBQXlHLEVBQUF3SyxFQUFBcTFDLFNBQ0E1d0QsRUFBQTZwQixHQUFBeGYsRUFBQXpQLEdBQUErOEIsRUFBQXJ0QixFQUFBc1gsU0FBQXlFLFVBQ0EsR0FBQXJtQixJQUFBakgsRUFBQSxDQUlBLElBQUF5MUIsRUFBQW5rQixFQUFBaEcsUUFBQXN0RCw0QkFDQW5qQyxJQUFBLEdBQUFua0IsRUFBQTNILElBQUFrb0IsSUFBQS91QixTQUFBbUUsSUFDS3k0QixHQUFBcHVCLEVBQUF5NUIsR0FBQXJMLENBQUFwdUIsRUFBQTNILElBQUFvOEIsR0FBQTkrQixHQUFBUCxHQUVMLElBQUFteUQsRUFBQTdnRCxFQUFBeFYsTUFBQUUsUUFBQW8yRCxFQUFBdDJDLEVBQUFnRixRQUFBaGxCLE1BQUFFLFFBQ0E4ZixFQUFBZ0YsUUFBQWhsQixNQUFBRSxRQUFBLHFCQUNBLElBRUFxMkQsRUFGQUMsRUFBQXgyQyxFQUFBZ0YsUUFBQWxRLHdCQXNEQSxHQXJEQVUsRUFBQXhWLE1BQUFFLFFBQUEsK0RBQW9FYixFQUFBc3ZCLFFBQUE2bkMsRUFBQXZ1QyxJQUFBLGlCQUF3RDVvQixFQUFBcXZCLFFBQUE4bkMsRUFBQXhoRCxLQUFBLDZDQUF5RS9YLEVBQUEsOEpBRXJNSSxJQUFlazVELEVBQUFuOEQsT0FBQXE4RCxTQUNmMW5ELEVBQUFpUixNQUFBMFMsUUFDQXIxQixHQUFlakQsT0FBQXM4RCxTQUFBLEtBQUFILEdBQ2Z4bkQsRUFBQWlSLE1BQUFpVCxRQUVBbmtCLEVBQUFvMEIsc0JBQWdDMXRCLEVBQUEvWixNQUFBdWtCLEVBQUFrMUMsVUFBQSxLQUNoQ2wxQyxFQUFBZzJDLG9CQUFBLEVBQ0FqbkQsRUFBQWlrQixrQkFBQWxrQixFQUFBM0gsSUFBQWtvQixJQUNBeHJCLGFBQUFrTCxFQUFBNG5ELG9CQTBDQTE1RCxHQUFBQyxHQUFBLEdBQThCMDVELElBQzlCcjRELEVBQUEsQ0FDQXFWLEdBQUF2VSxHQUNBLElBQUF3M0QsRUFBQSxXQUNBeGtELEdBQUFqWSxPQUFBLFVBQUF5OEQsR0FDQS95RCxXQUFBZ3pELEVBQUEsS0FFQWpsRCxHQUFBelgsT0FBQSxVQUFBeThELFFBRUEveUQsV0FBQWd6RCxFQUFBLElBOUNBLFNBQUFGLElBQ0EsU0FBQXBoRCxFQUFBcFMsZUFBQSxDQUNBLElBQUE0eEMsRUFBQWxtQyxFQUFBbzBCLG9CQUNBNnpCLEVBQUEsS0FBQS9oQixFQUFBeC9CLEVBQUEvWixNQUFBLElBQ0ErWixFQUFBL1osTUFBQSxJQUNBK1osRUFBQS9aLE1BQUFzN0QsRUFDQS8yQyxFQUFBazFDLFVBQUFsZ0IsRUFBQSxPQUNBeC9CLEVBQUFwUyxlQUFBLEVBQTRCb1MsRUFBQW5TLGFBQUEwekQsRUFBQTUzRCxPQUc1QjRQLEVBQUFpa0Isa0JBQUFsa0IsRUFBQTNILElBQUFrb0IsS0FHQSxTQUFBeW5DLElBT0EsR0FOQTkyQyxFQUFBZzJDLG9CQUFBLEVBQ0FoMkMsRUFBQWdGLFFBQUFobEIsTUFBQUUsUUFBQW8yRCxFQUNBOWdELEVBQUF4VixNQUFBRSxRQUFBbTJELEVBQ0FwNUQsR0FBQUMsRUFBQSxHQUErQjZSLEVBQUFvbkIsV0FBQUosYUFBQWhuQixFQUFBc1gsU0FBQXlFLFVBQUFzUixHQUcvQixNQUFBNW1CLEVBQUFwUyxlQUFBLEdBQ0FuRyxNQUFBQyxFQUFBLElBQTBDMDVELElBQzFDLElBQUFwOEQsRUFBQSxFQUFBdTRELEVBQUEsV0FDQWhrRCxFQUFBaWtCLG1CQUFBbGtCLEVBQUEzSCxJQUFBa29CLEtBQUEsR0FBQTdaLEVBQUFwUyxnQkFDQW9TLEVBQUFuUyxhQUFBLFFBQUEyYyxFQUFBazFDLFVBQ0FoNEIsR0FBQXB1QixFQUFBaTdCLEdBQUE3TSxDQUFBcHVCLEdBQ1N0VSxJQUFBLEdBQ1R1VSxFQUFBNG5ELG1CQUFBN3lELFdBQUFpdkQsRUFBQSxNQUVBaGtELEVBQUFpa0Isa0JBQUEsS0FDQWprQixFQUFBaVIsTUFBQWlULFVBR0Fsa0IsRUFBQTRuRCxtQkFBQTd5RCxXQUFBaXZELEVBQUEsUUFpQkFrQyxHQUFBNzRELFVBQUEyNEQsZ0JBQUEsU0FBQTc5QyxHQUNBQSxHQUFhMVQsS0FBQXl2QixRQUNienZCLEtBQUE2eEQsU0FBQTJCLFNBQUEsWUFBQTkvQyxHQUdBKzlDLEdBQUE3NEQsVUFBQThqQixjQUFBLGFBRUErMEMsR0FBQTc0RCxVQUFBNmpCLHVCQUFBLEVBdDVEQSxTQUFBbzFCLEdBQ0EsSUFBQXlVLEVBQUF6VSxFQUFBeVUsZUFFQSxTQUFBaEQsRUFBQS9yRCxFQUFBazhELEVBQUF2cUIsRUFBQXdxQixHQUNBN2hCLEVBQUF3VSxTQUFBOXVELEdBQUFrOEQsRUFDQXZxQixJQUFpQm9kLEVBQUEvdUQsR0FDakJtOEQsRUFBQSxTQUFBcG9ELEVBQUFvSSxFQUFBaE0sR0FBMkNBLEdBQUEwK0MsSUFBa0JsZCxFQUFBNTlCLEVBQUFvSSxFQUFBaE0sSUFBeUJ3aEMsR0FHdEYySSxFQUFBOGhCLGFBQUFyUSxFQUdBelIsRUFBQXVVLFFBSUE5QyxFQUFBLG9CQUFBaDRDLEVBQUFvSSxHQUEwQyxPQUFBcEksRUFBQTZnQyxTQUFBejRCLEtBQTJCLEdBQ3JFNHZDLEVBQUEscUJBQUFoNEMsRUFBQW9JLEdBQ0FwSSxFQUFBM0gsSUFBQTA4QixXQUFBM3NCLEVBQ0Ewc0IsR0FBQTkwQixLQUNHLEdBRUhnNEMsRUFBQSxlQUFBbGpCLElBQUEsR0FDQWtqQixFQUFBLHFCQUNBQSxFQUFBLGtCQUNBQSxFQUFBLHFCQUFBaDRDLEdBQ0FnMUIsR0FBQWgxQixHQUNBcWIsR0FBQXJiLEdBQ0F1dUIsR0FBQXZ1QixLQUNHLEdBRUhnNEMsRUFBQSw4QkFBQWg0QyxFQUFBb0ksR0FFQSxHQURBcEksRUFBQTNILElBQUFrb0MsUUFBQW40QixFQUNBQSxFQUFBLENBQ0EsSUFBQWtnRCxLQUFBaHZELEVBQUEwRyxFQUFBM0gsSUFBQUMsTUFDQTBILEVBQUEzSCxJQUFBVyxLQUFBLFNBQUFELEdBQ0EsUUFBQXBELEVBQUEsSUFBd0IsQ0FDeEIsSUFBQXFILEVBQUFqRSxFQUFBRSxLQUFBNUUsUUFBQStULEVBQUF6UyxHQUNBLE9BQUFxSCxFQUEwQixNQUMxQnJILEVBQUFxSCxFQUFBb0wsRUFBQS9YLE9BQ0FpNEQsRUFBQXB5RCxLQUFBa0UsR0FBQWQsRUFBQTBELElBRUExRCxNQUVBLFFBQUE1TixFQUFBNDhELEVBQUFqNEQsT0FBQSxFQUFzQzNFLEdBQUEsRUFBUUEsSUFDdkN5eEMsR0FBQW45QixFQUFBM0gsSUFBQStQLEVBQUFrZ0QsRUFBQTU4RCxHQUFBME8sR0FBQWt1RCxFQUFBNThELEdBQUFxTixLQUFBdXZELEVBQUE1OEQsR0FBQW9MLEdBQUFzUixFQUFBL1gsWUFFUDJuRCxFQUFBLG1HQUFBaDRDLEVBQUFvSSxFQUFBaE0sR0FDQTRELEVBQUFrSSxNQUFBb0ksYUFBQSxJQUFBMWdCLE9BQUF3WSxFQUFBalIsUUFBQWlSLEVBQUF0YSxLQUFBLHFCQUNBc08sR0FBQTArQyxJQUFzQjk2QyxFQUFBdW9ELFlBRXRCdlEsRUFBQSx5QkFBQW5vQyxHQUFBLFNBQUE3UCxHQUFpRixPQUFBQSxFQUFBdW9ELFlBQXVCLEdBQ3hHdlEsRUFBQSxvQkFDQUEsRUFBQSxhQUFBL29ELEVBQUEsd0NBQ0EsVUFBQXVKLE1BQUEsNkRBQ0csR0FDSHcvQyxFQUFBLHlCQUFBaDRDLEVBQUFvSSxHQUFrRCxPQUFBcEksRUFBQXdvRCxnQkFBQXpJLFdBQUEzM0MsSUFBOEMsR0FDaEc0dkMsRUFBQSxtQkFBQTVvRCxHQUNBNG9ELEVBQUEsNEJBRUFBLEVBQUEsMkJBQUFoNEMsR0FDQTQ2QyxHQUFBNTZDLEdBQ0FpN0MsR0FBQWo3QyxLQUNHLEdBQ0hnNEMsRUFBQSw0QkFBQWg0QyxFQUFBb0ksRUFBQWhNLEdBQ0EsSUFBQStNLEVBQUFnaUMsR0FBQS9pQyxHQUNBN0csRUFBQW5GLEdBQUEwK0MsSUFBQTNQLEdBQUEvdUMsR0FDQW1GLEtBQUFrbkQsUUFBOEJsbkQsRUFBQWtuRCxPQUFBem9ELEVBQUFtSixHQUM5QkEsRUFBQXUvQyxRQUFzQnYvQyxFQUFBdS9DLE9BQUExb0QsRUFBQXVCLEdBQUEsUUFFdEJ5MkMsRUFBQSxrQkFDQUEsRUFBQSx1QkFFQUEsRUFBQSxrQkFBQTJELElBQUEsR0FDQTNELEVBQUEsc0JBQUFoNEMsR0FDQXV5QixHQUFBdnlCLEVBQUFoRyxTQUNBaWhELEdBQUFqN0MsS0FDRyxHQUNIZzRDLEVBQUEsMEJBQUFoNEMsRUFBQW9JLEdBQ0FwSSxFQUFBQyxRQUFBMlUsUUFBQTFqQixNQUFBZ1YsS0FBQWtDLEVBQUE2VyxHQUFBamYsRUFBQUMsU0FBQSxTQUNBRCxFQUFBdW9ELFlBQ0csR0FDSHZRLEVBQUEseUNBQUFoNEMsR0FBNkQsT0FBQXdwQixHQUFBeHBCLEtBQStCLEdBQzVGZzRDLEVBQUEsbUNBQUFoNEMsR0FDQXNxQixHQUFBdHFCLEdBQ0F3cEIsR0FBQXhwQixHQUNBQSxFQUFBQyxRQUFBb25CLFdBQUFKLGFBQUFqbkIsRUFBQTNILElBQUEyakIsV0FDQWhjLEVBQUFDLFFBQUFvbkIsV0FBQUMsY0FBQXRuQixFQUFBM0gsSUFBQXVqQixjQUNHLEdBQ0hvOEIsRUFBQSwwQkFBQWg0QyxHQUNBdXlCLEdBQUF2eUIsRUFBQWhHLFNBQ0FpaEQsR0FBQWo3QyxLQUNHLEdBQ0hnNEMsRUFBQSxvQkFBQWlELElBQUEsR0FDQWpELEVBQUEsK0JBQUEyUSxHQUFvRCxPQUFBQSxHQUFrQjFOLElBQUEsR0FDdEVqRCxFQUFBLDZCQUFBaDRCLElBQUEsR0FFQWc0QixFQUFBLGtDQUNBQSxFQUFBLHNCQUNBQSxFQUFBLDZCQUVBQSxFQUFBLHVCQUFBaDRDLEVBQUFvSSxHQUNBLFlBQUFBLElBQ0E0YixHQUFBaGtCLEdBQ0FBLEVBQUFDLFFBQUFpUixNQUFBNHlDLFFBRUE5akQsRUFBQUMsUUFBQWlSLE1BQUErMEMsZ0JBQUE3OUMsS0FFQTR2QyxFQUFBLDJCQUFBaDRDLEVBQUFvSSxHQUFvREEsR0FBV3BJLEVBQUFDLFFBQUFpUixNQUFBaVQsVUFBNkIsR0FDNUY2ekIsRUFBQSxjQUFBa0QsSUFDQWxELEVBQUEsMkJBRUFBLEVBQUEsdUJBQ0FBLEVBQUEsd0JBQ0FBLEVBQUEsaUJBQUFoNEIsSUFBQSxHQUNBZzRCLEVBQUEsK0JBQUFoNEIsSUFBQSxHQUNBZzRCLEVBQUEsZ0JBQ0FBLEVBQUEsaUJBQ0FBLEVBQUEsa0JBQUFoakIsSUFBQSxHQUNBZ2pCLEVBQUEsa0JBQUFoakIsSUFBQSxHQUNBZ2pCLEVBQUEsb0JBQ0FBLEVBQUEseUJBQUFoNEMsRUFBQW9JLEdBQStDLE9BQUFwSSxFQUFBM0gsSUFBQTQvQixRQUFBbEIsVUFBQTN1QixJQUMvQzR2QyxFQUFBLDBCQUNBQSxFQUFBLDZCQUFBaDRDLEdBQThDLE9BQUFBLEVBQUF1b0QsWUFBdUIsR0FDckV2USxFQUFBLHlCQUFBaGpCLElBQUEsR0FDQWdqQixFQUFBLGtDQUFBaDRDLEVBQUFvSSxHQUNBQSxHQUFlcEksRUFBQUMsUUFBQWlSLE1BQUFnMUMsa0JBR2ZsTyxFQUFBLHlCQUFBaDRDLEVBQUFvSSxHQUErQyxPQUFBcEksRUFBQUMsUUFBQWlSLE1BQUFxc0MsV0FBQXIxQixTQUFBOWYsR0FBQSxLQUMvQzR2QyxFQUFBLGtCQUNBQSxFQUFBLDJCQUFBaDRDLEVBQUFvSSxHQUFpRCxPQUFBcEksRUFBQTNILElBQUF3c0MsYUFBQXo4QixLQUFtQyxHQUNwRjR2QyxFQUFBLGdCQTIzREE0USxDQUFBcGtCLElBcjlDQSxTQUFBK0IsR0FDQSxJQUFBeVUsRUFBQXpVLEVBQUF5VSxlQUVBNk4sRUFBQXRpQixFQUFBc2lCLFdBRUF0aUIsRUFBQWo1QyxXQUNBbXpDLFlBQUE4RixFQUNBM2lCLE1BQUEsV0FBc0J0NEIsT0FBQXM0QixRQUFlbHZCLEtBQUF1TCxRQUFBaVIsTUFBQTBTLFNBRXJDa2xDLFVBQUEsU0FBQTlRLEVBQUFyckQsR0FDQSxJQUFBcU4sRUFBQXRGLEtBQUFzRixRQUFBb0MsRUFBQXBDLEVBQUFnK0MsR0FDQWgrQyxFQUFBZytDLElBQUFyckQsR0FBQSxRQUFBcXJELElBQ0FoK0MsRUFBQWcrQyxHQUFBcnJELEVBQ0FxdUQsRUFBQXp0RCxlQUFBeXFELElBQ1M1cEIsR0FBQTE1QixLQUFBc21ELEVBQUFoRCxHQUFBNXBCLENBQUExNUIsS0FBQS9ILEVBQUF5UCxHQUNUc0gsR0FBQWhQLEtBQUEsZUFBQUEsS0FBQXNqRCxLQUdBL29DLFVBQUEsU0FBQStvQyxHQUFpQyxPQUFBdGpELEtBQUFzRixRQUFBZytDLElBQ2pDK1EsT0FBQSxXQUF3QixPQUFBcjBELEtBQUEyRCxLQUV4QjJ3RCxVQUFBLFNBQUE3bEQsRUFBQStWLEdBQ0F4a0IsS0FBQXdULE1BQUFndUMsUUFBQWg5QixFQUFBLGtCQUFBaXlCLEdBQUFob0MsS0FFQThsRCxhQUFBLFNBQUE5bEQsR0FFQSxJQURBLElBQUFzTSxFQUFBL2EsS0FBQXdULE1BQUFndUMsUUFDQXhxRCxFQUFBLEVBQXFCQSxFQUFBK2pCLEVBQUFwZixTQUFpQjNFLEVBQzdCLEdBQUErakIsRUFBQS9qQixJQUFBeVgsR0FBQXNNLEVBQUEvakIsR0FBQU8sTUFBQWtYLEVBRVQsT0FEQXNNLEVBQUEvUixPQUFBaFMsRUFBQSxJQUNBLEdBSUF3OUQsV0FBQTc2QixHQUFBLFNBQUEvbUIsRUFBQXROLEdBQ0EsSUFBQW5OLEVBQUF5YSxFQUFBZ0csTUFBQWhHLEVBQUFpL0IsRUFBQWgvQixRQUFBN1MsS0FBQXNGLFFBQUFzTixHQUNBLEdBQUF6YSxFQUFBMGIsV0FBNEIsVUFBQS9QLE1BQUEsa0NBM3hQNUIsU0FBQTVELEVBQUFqSSxFQUFBdzhELEdBRUEsSUFEQSxJQUFBeHpELEVBQUEsRUFBQXl6RCxFQUFBRCxFQUFBeDhELEdBQ0FnSixFQUFBZixFQUFBdkUsUUFBQTg0RCxFQUFBdjBELEVBQUFlLEtBQUF5ekQsR0FBK0R6ekQsSUFDL0RmLEVBQUE4SSxPQUFBL0gsRUFBQSxFQUFBaEosR0F5eFBBMDhELENBQUEzMEQsS0FBQXdULE1BQUFrRCxVQUNvQnZlLE9BQUF5OEQsU0FBQWhpRCxFQUFBZ0UsT0FBQXRSLEtBQUFzUixPQUNwQjg5QyxTQUFBcHZELEtBQUFvdkQsVUFBQSxHQUNBLFNBQUFqK0MsR0FBdUMsT0FBQUEsRUFBQWkrQyxXQUN2QzEwRCxLQUFBd1QsTUFBQTZDLFVBQ0F3akIsR0FBQTc1QixRQUVBNjBELGNBQUFsN0IsR0FBQSxTQUFBL21CLEdBSUEsSUFIQSxJQUVBOEQsRUFBQTFXLEtBQUF3VCxNQUFBa0QsU0FDQTFmLEVBQUEsRUFBcUJBLEVBQUEwZixFQUFBL2EsU0FBcUIzRSxFQUFBLENBQzFDLElBQUE2TixFQUFBNlIsRUFBQTFmLEdBQUE0OUQsU0FDQSxHQUFBL3ZELEdBQUErTixHQUFBLGlCQUFBQSxHQUFBL04sRUFBQXROLE1BQUFxYixFQUlBLE9BSEE4RCxFQUFBMU4sT0FBQWhTLEVBQUEsR0FOQWdKLEtBT0F3VCxNQUFBNkMsZUFDQXdqQixHQVJBNzVCLFNBY0F5Z0QsV0FBQTltQixHQUFBLFNBQUFsaEMsRUFBQXVLLEVBQUFtbUQsR0FDQSxpQkFBQW5tRCxHQUFBLGlCQUFBQSxJQUMwQkEsRUFBMUIsTUFBQUEsRUFBMEJoRCxLQUFBc0YsUUFBQXdsRCxZQUFBLGVBQ1o5bkQsRUFBQSxrQkFFZG9DLEdBQUFwRixLQUFBMkQsSUFBQWxMLElBQWdDZ29ELEdBQUF6Z0QsS0FBQXZILEVBQUF1SyxFQUFBbW1ELEtBRWhDckosZ0JBQUFubUIsR0FBQSxTQUFBdXZCLEdBSUEsSUFIQSxJQUVBcDlCLEVBQUE5ckIsS0FBQTJELElBQUFrb0IsSUFBQUMsT0FBQS90QixHQUFBLEVBQ0EvRyxFQUFBLEVBQXFCQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxJQUFBLENBQ3hDLElBQUFpYixFQUFBNlosRUFBQTkwQixHQUNBLEdBQUFpYixFQUFBK1osUUFTUy9aLEVBQUFrYSxLQUFBOW5CLEtBQUF0RyxJQUNUMGlELEdBZkF6Z0QsS0FlQWlTLEVBQUFrYSxLQUFBOW5CLEtBQUE2a0QsR0FBQSxHQUNBbnJELEVBQUFrVSxFQUFBa2EsS0FBQTluQixLQUNBck4sR0FqQkFnSixLQWlCQTJELElBQUFrb0IsSUFBQUUsV0FBOEM4RixHQWpCOUM3eEIsV0FLQSxDQUNBLElBQUFvRCxFQUFBNk8sRUFBQTdPLE9BQUFDLEVBQUE0TyxFQUFBNU8sS0FDQXZGLEVBQUFzRCxLQUFBK0UsSUFBQXBJLEVBQUFxRixFQUFBaUIsTUFDQXRHLEVBQUFxRCxLQUFBQyxJQVJBckIsS0FRQTZLLFdBQUF4SCxFQUFBZ0IsTUFBQWhCLEVBQUFqQixHQUFBLFFBQ0EsUUFBQWdMLEVBQUF0UCxFQUE2QnNQLEVBQUFyUCxJQUFTcVAsRUFDekJxekMsR0FWYnpnRCxLQVVhb04sRUFBQTg3QyxHQUNiLElBQUE0TCxFQVhBOTBELEtBV0EyRCxJQUFBa29CLElBQUFDLE9BQ0EsR0FBQTFvQixFQUFBaEIsSUFBQTBwQixFQUFBbndCLFFBQUFtNUQsRUFBQW41RCxRQUFBbTVELEVBQUE5OUQsR0FBQW9NLE9BQUFoQixHQUFBLEdBQ2EraUMsR0FiYm5sQyxLQWFhMkQsSUFBQTNNLEVBQUEsSUFBQXlvQyxHQUFBcjhCLEVBQUEweEQsRUFBQTk5RCxHQUFBcU0sTUFBQTNDLE9BV2JxMEQsV0FBQSxTQUFBOXpELEVBQUEwVyxHQUNBLE9BQUFvQixHQUFBL1ksS0FBQWlCLEVBQUEwVyxJQUdBcTlDLGNBQUEsU0FBQTN3RCxFQUFBc1QsR0FDQSxPQUFBb0IsR0FBQS9ZLEtBQUEwRixHQUFBckIsR0FBQXNULEdBQUEsSUFHQXM5QyxlQUFBLFNBQUFoMEQsR0FDQUEsRUFBQW1GLEdBQUFwRyxLQUFBMkQsSUFBQTFDLEdBQ0EsSUFFQTZHLEVBRkErTyxFQUFBSSxHQUFBalgsS0FBQTBELEdBQUExRCxLQUFBMkQsSUFBQTFDLEVBQUFvRCxPQUNBcUosRUFBQSxFQUFBbFMsR0FBQXFiLEVBQUFsYixPQUFBLEtBQUF5RyxFQUFBbkIsRUFBQW1CLEdBRUEsTUFBQUEsRUFBb0IwRixFQUFBK08sRUFBQSxRQUNSLE9BQVEsQ0FDcEIsSUFBQXRULEVBQUFtSyxFQUFBbFMsR0FBQSxFQUNBLElBQUErSCxFQUFBc1QsRUFBQSxFQUFBdFQsRUFBQSxPQUFBbkIsRUFBb0Q1RyxFQUFBK0gsTUFDcEQsTUFBQXNULEVBQUEsRUFBQXRULEVBQUEsR0FBQW5CLEdBQ0EsQ0FBYzBGLEVBQUErTyxFQUFBLEVBQUF0VCxFQUFBLEdBQTRCLE1BREVtSyxFQUFBbkssRUFBQSxHQUc1QyxJQUFBMDJCLEVBQUFueUIsSUFBQW5JLFFBQUEsZUFDQSxPQUFBczZCLEVBQUEsRUFBQW55QixFQUFBLEdBQUFteUIsRUFBQSxLQUFBbnlCLEVBQUFyTSxNQUFBLEVBQUF3K0IsRUFBQSxJQUdBOHdCLFVBQUEsU0FBQTlwRCxHQUNBLElBQUE5SSxFQUFBNkgsS0FBQTJELElBQUF4TCxLQUNBLE9BQUFBLEVBQUF3YixVQUNBaytCLEVBQUFsK0IsVUFBQXhiLEVBQUE2SCxLQUFBKzBELFdBQUE5ekQsR0FBQXVTLE9BQUFyYixLQUQ0QkEsR0FJNUJtMEQsVUFBQSxTQUFBcnJELEVBQUE2RyxHQUNBLE9BQUE5SCxLQUFBazFELFdBQUFqMEQsRUFBQTZHLEdBQUEsSUFHQW90RCxXQUFBLFNBQUFqMEQsRUFBQTZHLEdBQ0EsSUFFQVEsS0FDQSxJQUFBNnJELEVBQUF0N0QsZUFBQWlQLEdBQTBDLE9BQUFRLEVBQzFDLElBQUE2c0QsRUFBQWhCLEVBQUFyc0QsR0FBQTNQLEVBQUE2SCxLQUFBK3FELFVBQUE5cEQsR0FDQSxvQkFBQTlJLEVBQUEyUCxHQUNBcXRELEVBQUFoOUQsRUFBQTJQLEtBQStCUSxFQUFBOUcsS0FBQTJ6RCxFQUFBaDlELEVBQUEyUCxVQUN4QixHQUFBM1AsRUFBQTJQLEdBQ1AsUUFBQTlRLEVBQUEsRUFBdUJBLEVBQUFtQixFQUFBMlAsR0FBQW5NLE9BQXVCM0UsSUFBQSxDQUM5QyxJQUFBMGMsRUFBQXloRCxFQUFBaDlELEVBQUEyUCxHQUFBOVEsSUFDQTBjLEdBQW9CcEwsRUFBQTlHLEtBQUFrUyxRQUVidmIsRUFBQSthLFlBQUFpaUQsRUFBQWg5RCxFQUFBK2EsWUFDUDVLLEVBQUE5RyxLQUFBMnpELEVBQUFoOUQsRUFBQSthLGFBQ09paUQsRUFBQWg5RCxFQUFBWixPQUNQK1EsRUFBQTlHLEtBQUEyekQsRUFBQWg5RCxFQUFBWixPQUVBLFFBQUEyTixFQUFBLEVBQXVCQSxFQUFBaXdELEVBQUFDLFFBQUF6NUQsT0FBMkJ1SixJQUFBLENBQ2xELElBQUFMLEVBQUFzd0QsRUFBQUMsUUFBQWx3RCxHQUNBTCxFQUFBMUIsS0FBQWhMLEVBbkJBNkgsUUFtQkEsR0FBQUwsRUFBQTJJLEVBQUF6RCxFQUFBNk8sTUFDV3BMLEVBQUE5RyxLQUFBcUQsRUFBQTZPLEtBRVgsT0FBQXBMLEdBR0Erc0QsY0FBQSxTQUFBaHhELEVBQUFzVCxHQUNBLElBQUFoVSxFQUFBM0QsS0FBQTJELElBRUEsT0FBQXdULEdBQUFuWCxNQURBcUUsRUFBQTZCLEdBQUF2QyxFQUFBLE1BQUFVLEVBQUFWLEVBQUFDLE1BQUFELEVBQUFFLEtBQUEsRUFBQVEsSUFDQSxFQUFBc1QsR0FBQW5FLE9BR0EyVSxhQUFBLFNBQUFycUIsRUFBQTNGLEdBQ0EsSUFBQThaLEVBQUFqUyxLQUFBMkQsSUFBQWtvQixJQUFBSixVQUlBLE9BQUF0RCxHQUFBbm9CLEtBSEEsTUFBQWxDLEVBQTBCbVUsRUFBQWthLEtBQzFCLGlCQUFBcnVCLEVBQTBDc0ksR0FBQXBHLEtBQUEyRCxJQUFBN0YsR0FDOUJBLEVBQUFtVSxFQUFBN08sT0FBQTZPLEVBQUE1TyxLQUNabEwsR0FBQSxTQUdBK3ZCLFdBQUEsU0FBQWpuQixFQUFBOUksR0FDQSxPQUFBK3ZCLEdBQUFsb0IsS0FBQW9HLEdBQUFwRyxLQUFBMkQsSUFBQTFDLEdBQUE5SSxHQUFBLFNBR0Ewd0IsV0FBQSxTQUFBZCxFQUFBNXZCLEdBRUEsT0FBQTB3QixHQUFBN29CLE1BREErbkIsRUFBQUQsR0FBQTluQixLQUFBK25CLEVBQUE1dkIsR0FBQSxTQUNBcVosS0FBQXVXLEVBQUF0RCxNQUdBMWYsYUFBQSxTQUFBTCxFQUFBdk0sR0FFQSxPQURBdU0sRUFBQW9qQixHQUFBOW5CLE1BQXNDeWtCLElBQUEvZixFQUFBOE0sS0FBQSxHQUFxQnJaLEdBQUEsUUFBQXNzQixJQUMzRDFmLEdBQUEvRSxLQUFBMkQsSUFBQWUsRUFBQTFFLEtBQUF1TCxRQUFBb2MsYUFFQTFjLGFBQUEsU0FBQTVHLEVBQUFsTSxFQUFBc3ZCLEdBQ0EsSUFBQXZjLEVBQUFuTixHQUFBLEVBQ0Esb0JBQUFzRyxFQUFBLENBQ0EsSUFBQWdDLEVBQUFyRyxLQUFBMkQsSUFBQUMsTUFBQTVELEtBQUEyRCxJQUFBRSxLQUFBLEVBQ0FRLEVBQUFyRSxLQUFBMkQsSUFBQUMsTUFBb0NTLEVBQUFyRSxLQUFBMkQsSUFBQUMsTUFDcENTLEVBQUFnQyxJQUErQmhDLEVBQUFnQyxFQUFhdEksR0FBQSxHQUM1Q21OLEVBQUF4SCxHQUFBMUQsS0FBQTJELElBQUFVLFFBRUE2RyxFQUFBN0csRUFFQSxPQUFBbWpCLEdBQUF4bkIsS0FBQWtMLEdBQTZDdVosSUFBQSxFQUFBalQsS0FBQSxHQUFnQnJaLEdBQUEsT0FBQXN2QixHQUFBMXBCLEdBQUEwbUIsS0FDN0QxbUIsRUFBQWlDLEtBQUEyRCxJQUFBZSxPQUFBdUcsR0FBQUMsR0FBQSxJQUdBb3FELGtCQUFBLFdBQW1DLE9BQUFuckMsR0FBQW5xQixLQUFBdUwsVUFDbkNncUQsaUJBQUEsV0FBa0MsT0FBQTN2QyxHQUFBNWxCLEtBQUF1TCxVQUVsQ2lxRCxZQUFBLFdBQTZCLE9BQVNweUQsS0FBQXBELEtBQUF1TCxRQUFBNk0sU0FBQS9VLEdBQUFyRCxLQUFBdUwsUUFBQThNLFNBRXRDbzlDLFVBQUEsU0FBQXgwRCxFQUFBNUYsRUFBQXNGLEVBQUEyeUIsRUFBQUMsR0FDQSxJQUFBaG9CLEVBQUF2TCxLQUFBdUwsUUFFQWtaLEdBREF4akIsRUFBQWtuQixHQUFBbm9CLEtBQUFvRyxHQUFBcEcsS0FBQTJELElBQUExQyxLQUNBdWpCLE9BQUFoVCxFQUFBdlEsRUFBQXVRLEtBS0EsR0FKQW5XLEVBQUFtQixNQUFBNGtCLFNBQUEsV0FDQS9sQixFQUFBd0IsYUFBQSwyQkFDQW1ELEtBQUF1TCxRQUFBaVIsTUFBQUUsY0FBQXJoQixHQUNBa1EsRUFBQXFXLE1BQUF4bEIsWUFBQWYsR0FDQSxRQUFBaTRCLEVBQ0E3TyxFQUFBeGpCLEVBQUF3akIsU0FDTyxZQUFBNk8sR0FBQSxRQUFBQSxFQUFBLENBQ1AsSUFBQW9pQyxFQUFBdDBELEtBQUErRSxJQUFBb0YsRUFBQWlXLFFBQUF3QixhQUFBaGpCLEtBQUEyRCxJQUFBZSxRQUNBaXhELEVBQUF2MEQsS0FBQStFLElBQUFvRixFQUFBcVcsTUFBQUgsWUFBQWxXLEVBQUF3VyxVQUFBTixjQUVBLFNBQUE2UixHQUFBcnlCLEVBQUF1akIsT0FBQW5wQixFQUFBNFYsYUFBQXlrRCxJQUFBejBELEVBQUF3akIsSUFBQXBwQixFQUFBNFYsYUFDV3dULEVBQUF4akIsRUFBQXdqQixJQUFBcHBCLEVBQUE0VixhQUNYaFEsRUFBQXVqQixPQUFBbnBCLEVBQUE0VixjQUFBeWtELElBQ1dqeEMsRUFBQXhqQixFQUFBdWpCLFFBQ1hoVCxFQUFBblcsRUFBQTZWLFlBQUF5a0QsSUFDV25rRCxFQUFBbWtELEVBQUF0NkQsRUFBQTZWLGFBRVg3VixFQUFBbUIsTUFBQWlvQixNQUFBLEtBQ0FwcEIsRUFBQW1CLE1BQUFnVixLQUFBblcsRUFBQW1CLE1BQUFpVixNQUFBLEdBQ0EsU0FBQThoQixHQUNBL2hCLEVBQUFqRyxFQUFBcVcsTUFBQUgsWUFBQXBtQixFQUFBNlYsWUFDQTdWLEVBQUFtQixNQUFBaVYsTUFBQSxRQUVBLFFBQUE4aEIsRUFBOEIvaEIsRUFBQSxFQUM5QixVQUFBK2hCLElBQXFDL2hCLEdBQUFqRyxFQUFBcVcsTUFBQUgsWUFBQXBtQixFQUFBNlYsYUFBQSxHQUNyQzdWLEVBQUFtQixNQUFBZ1YsT0FBQSxNQUVBN1EsR0ExMkpBLFNBQUEySyxFQUFBdVksR0FDQSxJQUFBK1UsRUFBQTNILEdBQUEzbEIsRUFBQXVZLEdBQ0EsTUFBQStVLEVBQUF0UixXQUFvQytLLEdBQUEvbUIsRUFBQXN0QixFQUFBdFIsV0FDcEMsTUFBQXNSLEVBQUExUixZQUFxQzBMLEdBQUF0bkIsRUFBQXN0QixFQUFBMVIsWUF3Mko1QmlTLENBQUFuNUIsTUFBdUJ3UixPQUFBaVQsTUFBQWhULE1BQUFELEVBQUFuVyxFQUFBNlYsWUFBQXNULE9BQUFDLEVBQUFwcEIsRUFBQTRWLGdCQUdoQ3krQyxpQkFBQS8xQixHQUFBbW9CLElBQ0E4VCxrQkFBQWo4QixHQUFBd29CLElBQ0EwVCxlQUFBM1QsR0FDQTRULG1CQUFBbjhCLEdBQUE4b0IsSUFFQXBDLFlBQUEsU0FBQW5LLEdBQ0EsR0FBQWtILEdBQUF2a0QsZUFBQXE5QyxHQUNTLE9BQUFrSCxHQUFBbEgsR0FBQS8rQyxLQUFBLEtBQUE2SSxPQUdUd3FELGdCQUFBN3dCLEdBQUEsU0FBQXAxQixHQUE4Q2ltRCxHQUFBeHFELEtBQUF1RSxLQUU5Q2luRCxTQUFBLFNBQUFwb0QsRUFBQTJ5RCxFQUFBeFMsRUFBQTNMLEdBQ0EsSUFFQTUwQyxFQUFBLEVBQ0EreUQsRUFBQSxJQUF1Qi95RCxHQUFBLEVBQVUreUQsTUFFakMsSUFEQSxJQUFBbHhELEVBQUF1QixHQUFBcEcsS0FBQTJELElBQUFQLEdBQ0FwTSxFQUFBLEVBQXFCQSxFQUFBKytELEtBQ3JCbHhELEVBQUEybUQsR0FOQXhyRCxLQU1BMkQsSUFBQWtCLEVBQUE3QixFQUFBdWdELEVBQUEzTCxJQUNBMlUsVUFGaUN2MUQsR0FJakMsT0FBQTZOLEdBR0FpNkMsTUFBQW5sQixHQUFBLFNBQUEzMkIsRUFBQXVnRCxHQUNBLElBQUFsWixFQUFBcnFDLEtBRUFBLEtBQUEyc0MsbUJBQUEsU0FBQTE2QixHQUNBLE9BQUFvNEIsRUFBQTkrQixRQUFBb2tCLE9BQUEwYSxFQUFBMW1DLElBQUE2NEIsUUFBQXZxQixFQUFBK1osUUFDV3cvQixHQUFBbmhCLEVBQUExbUMsSUFBQXNPLEVBQUFrYSxLQUFBbnBCLEVBQUF1Z0QsRUFBQWxaLEVBQUEva0MsUUFBQTB3RCxpQkFFQWh6RCxFQUFBLEVBQUFpUCxFQUFBN08sT0FBQTZPLEVBQUE1TyxNQUNKdkMsS0FHUHkrQyxRQUFBNWxCLEdBQUEsU0FBQTMyQixFQUFBdWdELEdBQ0EsSUFBQTEzQixFQUFBN3JCLEtBQUEyRCxJQUFBa29CLElBQUFsb0IsRUFBQTNELEtBQUEyRCxJQUNBa29CLEVBQUE2VCxvQkFDUy83QixFQUFBb3BDLGlCQUFBLG1CQUVBcUssR0FBQXAzQyxLQUFBLFNBQUFpUyxHQUNULElBQUF1VyxFQUFBZ2pDLEdBQUE3bkQsRUFBQXNPLEVBQUFrYSxLQUFBbnBCLEVBQUF1Z0QsR0FBQSxHQUNBLE9BQUF2Z0QsRUFBQSxHQUE0QkksS0FBQW9sQixFQUFBbmxCLEdBQUE0TyxFQUFBa2EsT0FBbUMvb0IsS0FBQTZPLEVBQUFrYSxLQUFBOW9CLEdBQUFtbEIsT0FJL0Rna0MsU0FBQSxTQUFBcHBELEVBQUEyeUQsRUFBQXhTLEVBQUEwUyxHQUNBLElBRUFqekQsRUFBQSxFQUFBK0MsRUFBQWt3RCxFQUNBRixFQUFBLElBQXVCL3lELEdBQUEsRUFBVSt5RCxNQUVqQyxJQURBLElBQUFseEQsRUFBQXVCLEdBQUFwRyxLQUFBMkQsSUFBQVAsR0FDQXBNLEVBQUEsRUFBcUJBLEVBQUErK0QsSUFBWS8rRCxFQUFBLENBQ2pDLElBQUErd0IsRUFBQUksR0FOQW5vQixLQU1BNkUsRUFBQSxPQUlBLEdBSEEsTUFBQWtCLEVBQXdCQSxFQUFBZ2lCLEVBQUF2VyxLQUNWdVcsRUFBQXZXLEtBQUF6TCxHQUNkbEIsRUFBQTJuRCxHQVRBeHNELEtBU0ErbkIsRUFBQS9rQixFQUFBdWdELElBQ0FnSixRQUEwQixNQUUxQixPQUFBMW5ELEdBR0E0NUMsTUFBQTlrQixHQUFBLFNBQUEzMkIsRUFBQXVnRCxHQUNBLElBQUFsWixFQUFBcnFDLEtBRUEyRCxFQUFBM0QsS0FBQTJELElBQUF1eUQsS0FDQTczRCxHQUFBMkIsS0FBQXVMLFFBQUFva0IsUUFBQWhzQixFQUFBNjRCLFFBQUE3NEIsRUFBQWtvQixJQUFBNlQsb0JBWUEsR0FYQS83QixFQUFBZ3BDLG1CQUFBLFNBQUExNkIsR0FDQSxHQUFBNVQsRUFDVyxPQUFBMkUsRUFBQSxFQUFBaVAsRUFBQTdPLE9BQUE2TyxFQUFBNU8sS0FDWCxJQUFBNnVELEVBQUEvcEMsR0FBQWtpQixFQUFBcDRCLEVBQUFrYSxLQUFBLE9BQ0EsTUFBQWxhLEVBQUFna0QsYUFBMEMvRCxFQUFBMWdELEtBQUFTLEVBQUFna0QsWUFDMUNDLEVBQUExMEQsS0FBQTB3RCxFQUFBMWdELE1BQ0EsSUFBQXZRLEVBQUF1ckQsR0FBQW5pQixFQUFBNm5CLEVBQUFsdkQsRUFBQXVnRCxHQUdBLE1BRkEsUUFBQUEsR0FBQXR4QyxHQUFBdE8sRUFBQWtvQixJQUFBSixXQUNXa0csR0FBQTBZLEVBQUFuaUIsR0FBQW1pQixFQUFBcHBDLEVBQUEsT0FBQXdqQixJQUFBeXRDLEVBQUF6dEMsS0FDWHhqQixHQUNPSCxHQUNQbzFELEVBQUF2NkQsT0FBeUIsUUFBQTNFLEVBQUEsRUFBZ0JBLEVBQUEyTSxFQUFBa29CLElBQUFDLE9BQUFud0IsT0FBMkIzRSxJQUMzRDJNLEVBQUFrb0IsSUFBQUMsT0FBQTkwQixHQUFBaS9ELFdBQUFDLEVBQUFsL0QsS0FJVHl1RCxXQUFBLFNBQUF4a0QsR0FDQSxJQUFBMEMsRUFBQTNELEtBQUEyRCxJQUFBVSxFQUFBWCxHQUFBQyxFQUFBMUMsRUFBQW9ELE1BQUFFLEtBQ0F6RyxFQUFBbUQsRUFBQW1CLEdBQUFyRSxFQUFBa0QsRUFBQW1CLEdBQ0EsR0FBQWlDLEVBQUEsQ0FDQSxJQUFBN0IsRUFBQXhDLEtBQUFzc0QsVUFBQXJyRCxFQUFBLGFBQ0EsVUFBQUEsRUFBQTBFLFFBQUE1SCxHQUFBc0csRUFBQTFJLFNBQUFtQyxJQUF3RkMsSUFBbEJELEVBTXRFLElBTEEsSUFBQXE0RCxFQUFBOXhELEVBQUFwQixPQUFBbkYsR0FDQXM0RCxFQUFBN3pELEdBQUE0ekQsRUFBQTN6RCxHQUNBLFNBQUFKLEdBQTJCLE9BQUFHLEdBQUFILEVBQUFJLElBQzNCLEtBQUFwSixLQUFBKzhELEdBQUEsU0FBQS96RCxHQUFrRCxXQUFBaEosS0FBQWdKLElBQ2xELFNBQUFBLEdBQTJCLFlBQUFoSixLQUFBZ0osS0FBQUcsR0FBQUgsSUFDM0J0RSxFQUFBLEdBQUFzNEQsRUFBQS94RCxFQUFBcEIsT0FBQW5GLEVBQUEsT0FBNERBLEVBQzVELEtBQUFDLEVBQUFzRyxFQUFBMUksUUFBQXk2RCxFQUFBL3hELEVBQUFwQixPQUFBbEYsT0FBOERBLEVBRTlELFdBQUEwaEMsR0FBQS81QixHQUFBekUsRUFBQW9ELEtBQUF2RyxHQUFBNEgsR0FBQXpFLEVBQUFvRCxLQUFBdEcsS0FHQTRpRCxnQkFBQSxTQUFBMW9ELEdBQ0EsTUFBQUEsTUFBQStILEtBQUF3VCxNQUFBdFUsYUFDQWMsS0FBQXdULE1BQUF0VSxXQUFBYyxLQUFBd1QsTUFBQXRVLFdBQ1MzQixFQUFBeUMsS0FBQXVMLFFBQUFzakIsVUFBQSx3QkFFQXp6QixFQUFBNEUsS0FBQXVMLFFBQUFzakIsVUFBQSx3QkFFVDdmLEdBQUFoUCxLQUFBLGtCQUFBQSxVQUFBd1QsTUFBQXRVLGFBRUFtOUIsU0FBQSxXQUEwQixPQUFBcjhCLEtBQUF1TCxRQUFBaVIsTUFBQXFzQyxZQUFBMXJELEtBQzFCd3pDLFdBQUEsV0FBNEIsU0FBQTN3QyxLQUFBc0YsUUFBQWlxQixXQUFBdnZCLEtBQUEyRCxJQUFBMmlDLFdBRTVCNHNCLFNBQUF2NUIsR0FBQSxTQUFBNXpCLEVBQUEraUIsR0FBd0NvSixHQUFBbHlCLEtBQUErRixFQUFBK2lCLEtBQ3hDdXRDLGNBQUEsV0FDQSxJQUFBeHpDLEVBQUE3aUIsS0FBQXVMLFFBQUFzWCxTQUNBLE9BQWNyUixLQUFBcVIsRUFBQXFFLFdBQUF6QyxJQUFBNUIsRUFBQXlFLFVBQ2Q1aUIsT0FBQW1lLEVBQUE2UCxhQUFBaFEsR0FBQTFpQixXQUFBdUwsUUFBQTBYLFVBQ0FqQyxNQUFBNkIsRUFBQWlRLFlBQUFwUSxHQUFBMWlCLFdBQUF1TCxRQUFBdVgsU0FDQUUsYUFBQUQsR0FBQS9pQixNQUFBeWhCLFlBQUFtQixHQUFBNWlCLFFBR0FtNUIsZUFBQVEsR0FBQSxTQUFBMW5CLEVBQUErZixHQUNBLE1BQUEvZixHQUNBQSxHQUFvQjdPLEtBQUFwRCxLQUFBMkQsSUFBQWtvQixJQUFBSixVQUFBVSxLQUFBOW9CLEdBQUEsTUFDcEIsTUFBQTJ1QixJQUE2QkEsRUFBQWh5QixLQUFBc0YsUUFBQTJzQixxQkFDdEIsaUJBQUFoZ0IsRUFDUEEsR0FBb0I3TyxLQUFBc0MsR0FBQXVNLEVBQUEsR0FBQTVPLEdBQUEsTUFDYixNQUFBNE8sRUFBQTdPLE9BQ1A2TyxHQUFvQjdPLEtBQUE2TyxFQUFBNU8sR0FBQSxPQUVwQjRPLEVBQUE1TyxLQUF5QjRPLEVBQUE1TyxHQUFBNE8sRUFBQTdPLE1BQ3pCNk8sRUFBQStmLFVBQUEsRUFFQSxNQUFBL2YsRUFBQTdPLEtBQUFpQixLQXg3SkEsU0FBQWlILEVBQUEyRyxHQUNBMmYsR0FBQXRtQixHQUNBQSxFQUFBb0UsTUFBQXFpQixZQUFBOWYsRUF1N0pBcWtELENBQUF0MkQsS0FBQWlTLEdBRUFrZ0IsR0FBQW55QixLQUFBaVMsRUFBQTdPLEtBQUE2TyxFQUFBNU8sR0FBQTRPLEVBQUErZixVQUlBbWdCLFFBQUF4WSxHQUFBLFNBQUEzWSxFQUFBdGMsR0FDQSxJQUFBMmxDLEVBQUFycUMsS0FFQXUyRCxFQUFBLFNBQUE3aUQsR0FBc0MsdUJBQUFBLEdBQUEsUUFBQXRhLEtBQUFtTSxPQUFBbU8sTUFBQSxLQUFBQSxHQUN0QyxNQUFBc04sSUFBMEJoaEIsS0FBQXVMLFFBQUFpVyxRQUFBaGxCLE1BQUF3a0IsTUFBQXUxQyxFQUFBdjFDLElBQzFCLE1BQUF0YyxJQUEyQjFFLEtBQUF1TCxRQUFBaVcsUUFBQWhsQixNQUFBa0ksT0FBQTZ4RCxFQUFBN3hELElBQzNCMUUsS0FBQXNGLFFBQUE0ZSxjQUFzQ3VDLEdBQUF6bUIsTUFDdEMsSUFBQXNLLEVBQUF0SyxLQUFBdUwsUUFBQTZNLFNBQ0FwWSxLQUFBMkQsSUFBQVcsS0FBQWdHLEVBQUF0SyxLQUFBdUwsUUFBQThNLE9BQUEsU0FBQWhVLEdBQ0EsR0FBQUEsRUFBQXFjLFFBQTJCLFFBQUExcEIsRUFBQSxFQUFnQkEsRUFBQXFOLEVBQUFxYyxRQUFBL2tCLE9BQXlCM0UsSUFDekQsR0FBQXFOLEVBQUFxYyxRQUFBMXBCLEdBQUErcEIsVUFBQSxDQUFpQ3VaLEdBQUErUCxFQUFBLy9CLEVBQUEsVUFBNEMsUUFDeEZBLElBRUF0SyxLQUFBMFAsTUFBQWdVLGFBQUEsRUFDQTFVLEdBQUFoUCxLQUFBLFVBQUFBLFFBR0EwNUIsVUFBQSxTQUFBaDdCLEdBQTJCLE9BQUErNkIsR0FBQXo1QixLQUFBdEIsSUFDM0JzM0IsZUFBQSxXQUErQixPQUFBQSxHQUFBaDJCLE9BQy9CNDJCLGFBQUEsV0FBNkIsT0FBQUEsR0FBQTUyQixPQUU3QjZ6RCxRQUFBbDZCLEdBQUEsV0FDQSxJQUFBOFAsRUFBQXpwQyxLQUFBdUwsUUFBQXNiLGlCQUNBZ1QsR0FBQTc1QixNQUNBQSxLQUFBMFAsTUFBQWdVLGFBQUEsRUFDQWlELEdBQUEzbUIsTUFDQWt5QixHQUFBbHlCLFVBQUEyRCxJQUFBdWpCLFdBQUFsbkIsS0FBQTJELElBQUEyakIsV0FDQTBKLEdBQUFoeEIsT0FDQSxNQUFBeXBDLEdBQUFyb0MsS0FBQW1qQixJQUFBa2xCLEVBQUF0ZixHQUFBbnFCLEtBQUF1TCxVQUFBLEtBQ1NvZixHQUFBM3FCLE1BQ1RnUCxHQUFBaFAsS0FBQSxVQUFBQSxRQUdBdzJELFFBQUE3OEIsR0FBQSxTQUFBaDJCLEdBQ0EsSUFBQStELEVBQUExSCxLQUFBMkQsSUFRQSxPQVBBK0QsRUFBQTRELEdBQUEsS0FDQXkyQixHQUFBL2hDLEtBQUEyRCxHQUNBZ2pCLEdBQUEzbUIsTUFDQUEsS0FBQXVMLFFBQUFpUixNQUFBaVQsUUFDQXlDLEdBQUFseUIsS0FBQTJELEVBQUF1akIsV0FBQXZqQixFQUFBMmpCLFdBQ0F0bkIsS0FBQTBQLE1BQUEraUIsYUFBQSxFQUNBNVUsR0FBQTdkLEtBQUEsVUFBQUEsS0FBQTBILEdBQ0FBLElBR0ErdUQsT0FBQSxTQUFBQyxHQUNBLElBQUFDLEVBQUEzMkQsS0FBQXNGLFFBQUFxeEQsUUFDQSxPQUFBQSxHQUFBai9ELE9BQUFrQixVQUFBQyxlQUFBMUIsS0FBQXcvRCxFQUFBRCxHQUFBQyxFQUFBRCxNQUdBNUMsY0FBQSxXQUE4QixPQUFBOXpELEtBQUF1TCxRQUFBaVIsTUFBQXFzQyxZQUM5QitOLGtCQUFBLFdBQWtDLE9BQUE1MkQsS0FBQXVMLFFBQUFpVyxTQUNsQ3ExQyxtQkFBQSxXQUFtQyxPQUFBNzJELEtBQUF1TCxRQUFBc1gsVUFDbkNpMEMsaUJBQUEsV0FBaUMsT0FBQTkyRCxLQUFBdUwsUUFBQTJVLFVBRWpDclEsR0FBQWdpQyxHQUVBQSxFQUFBa2xCLGVBQUEsU0FBQWp2RCxFQUFBdlEsRUFBQVUsR0FDQWs4RCxFQUFBdDdELGVBQUFpUCxLQUF3Q3FzRCxFQUFBcnNELEdBQUErcEMsRUFBQS9wQyxJQUFxQ3N0RCxhQUM3RWpCLEVBQUFyc0QsR0FBQXZRLEdBQUFVLEdBRUE0NUMsRUFBQW1sQixxQkFBQSxTQUFBbHZELEVBQUF2USxFQUFBMC9ELEVBQUFoL0QsR0FDQTQ1QyxFQUFBa2xCLGVBQUFqdkQsRUFBQXZRLEVBQUFVLEdBQ0FrOEQsRUFBQXJzRCxHQUFBc3RELFFBQUE1ekQsTUFBZ0MyQixLQUFBOHpELEVBQUF2akQsSUFBQXpiLEtBb2lDaENpL0QsQ0FBQXBuQixJQUdBLElBQUFxbkIsR0FBQSxnREFBQXY1RCxNQUFBLEtBQ0EsUUFBQXVCLE1BQUF5c0MsR0FBQWh6QyxVQUFpQ2d6QyxHQUFBaHpDLFVBQUFDLGVBQUFzRyxLQUFBUSxFQUFBdzNELEdBQUFoNEQsSUFBQSxJQUM5QjJ3QyxHQUFBbDNDLFVBQUF1RyxJQUFBLFNBQUFpNEQsR0FDSCxrQkFBdUIsT0FBQUEsRUFBQXQ0RCxNQUFBa0IsS0FBQTJELElBQUE5RSxZQURwQixDQUVBK3NDLEdBQUFoekMsVUFBQXVHLE1BdUNILE9BckNBMFEsR0FBQSs3QixJQUlBa0UsR0FBQW9YLGFBQTRCMkssU0FBQUosR0FBQTRGLGdCQUFBMUssSUFPNUI3YyxHQUFBd25CLFdBQUEsU0FBQS8vRCxHQUNBdTRDLEdBQUF1VyxTQUFBbHVELE1BQUEsUUFBQVosSUFBc0R1NEMsR0FBQXVXLFNBQUFsdUQsS0FBQVosR0F4cVF0RCxTQUFBQSxFQUFBWSxHQUNBMEcsVUFBQWxELE9BQUEsSUFDS3hELEVBQUFvL0QsYUFBQTM0RCxNQUFBaEcsVUFBQTZDLE1BQUF0RSxLQUFBMEgsVUFBQSxJQUNMNFQsR0FBQWxiLEdBQUFZLEdBc3FRQTJHLE1BQUFrQixLQUFBbkIsWUFHQWl4QyxHQUFBMG5CLFdBdHFRQSxTQUFBQyxFQUFBN2tELEdBQ0FGLEdBQUEra0QsR0FBQTdrRCxHQXdxUUFrOUIsR0FBQXduQixXQUFBLGtCQUE2QyxPQUFVMStDLE1BQUEsU0FBQUosR0FBMEIsT0FBQUEsRUFBQTNELGdCQUNqRmk3QixHQUFBMG5CLFdBQUEscUJBSUExbkIsR0FBQTRuQixnQkFBQSxTQUFBbmdFLEVBQUFvZ0UsR0FDQTduQixHQUFBbDNDLFVBQUFyQixHQUFBb2dFLEdBRUE3bkIsR0FBQThuQixtQkFBQSxTQUFBcmdFLEVBQUFvZ0UsR0FDQS9yQixHQUFBaHpDLFVBQUFyQixHQUFBb2dFLEdBR0E3bkIsR0FBQStuQixhQWpKQSxTQUFBaEcsRUFBQXZzRCxHQVNBLElBUkFBLElBQUF2RyxFQUFBdUcsT0FDQXJOLE1BQUE0NUQsRUFBQTU1RCxPQUNBcU4sRUFBQXd5RCxVQUFBakcsRUFBQXIrQixXQUNLbHVCLEVBQUF3eUQsU0FBQWpHLEVBQUFyK0IsV0FDTGx1QixFQUFBeXlELGFBQUFsRyxFQUFBa0csY0FDS3p5RCxFQUFBeXlELFlBQUFsRyxFQUFBa0csYUFHTCxNQUFBenlELEVBQUFpaUQsVUFBQSxDQUNBLElBQUFsckIsRUFBQWwvQixJQUNBbUksRUFBQWlpRCxVQUFBbHJCLEdBQUF3MUIsR0FDQSxNQUFBQSxFQUFBbHdDLGFBQUEsY0FBQTBhLEdBQUExaUMsU0FBQTBELEtBR0EsU0FBQWthLElBQW1CczZDLEVBQUE1NUQsTUFBQXFULEVBQUEwZ0MsV0FFbkIsSUFBQWdzQixFQUNBLEdBQUFuRyxFQUFBb0csT0FDQTVwRCxHQUFBd2pELEVBQUFvRyxLQUFBLFNBQUExZ0QsSUFFQWpTLEVBQUE0eUQsd0JBQUEsQ0FDQSxJQUFBRCxFQUFBcEcsRUFBQW9HLEtBQ0FELEVBQUFDLEVBQUFFLE9BQ0EsSUFDQSxJQUFBQyxFQUFBSCxFQUFBRSxPQUFBLFdBQ0E1Z0QsSUFDQTBnRCxFQUFBRSxPQUFBSCxFQUNBQyxFQUFBRSxTQUNBRixFQUFBRSxPQUFBQyxHQUVPLE1BQUF2OEQsS0FJUHlKLEVBQUF5akQsV0FBQSxTQUFBejlDLEdBQ0FBLEVBQUFpTSxPQUNBak0sRUFBQStzRCxZQUFBLFdBQWtDLE9BQUF4RyxHQUNsQ3ZtRCxFQUFBZ3RELFdBQUEsV0FDQWh0RCxFQUFBZ3RELFdBQUE3MUMsTUFDQWxMLElBQ0FzNkMsRUFBQTUwRCxXQUFBakIsWUFBQXNQLEVBQUFzckQscUJBQ0EvRSxFQUFBcjFELE1BQUErTyxRQUFBLEdBQ0FzbUQsRUFBQW9HLE9BQ0FwcEQsR0FBQWdqRCxFQUFBb0csS0FBQSxTQUFBMWdELEdBQ0EsbUJBQUFzNkMsRUFBQW9HLEtBQUFFLFNBQ1d0RyxFQUFBb0csS0FBQUUsT0FBQUgsTUFLWG5HLEVBQUFyMUQsTUFBQStPLFFBQUEsT0FDQSxJQUFBRCxFQUFBd2tDLEdBQUEsU0FBQXowQyxHQUF5QyxPQUFBdzJELEVBQUE1MEQsV0FBQWdpQixhQUFBNWpCLEVBQUF3MkQsRUFBQXh4QyxjQUN6Qy9hLEdBQ0EsT0FBQWdHLEdBR0EsU0FBQXVtQyxHQUNBQSxFQUFBaGpDLE9BQ0FnakMsRUFBQXhqQyxNQUNBd2pDLEVBQUFwVCxvQkFDQW9ULEVBQUFqRyxPQUNBaUcsRUFBQWxKLFdBQUFqM0IsR0FDQW1nQyxFQUFBenlDLGNBQ0F5eUMsRUFBQTl3QyxhQUNBOHdDLEVBQUF0dkMsV0FBQUosR0FDQTB2QyxFQUFBcnhDLE9BQ0FxeEMsRUFBQTdpQyxVQUNBNmlDLEVBQUFuNEIsUUFDQW00QixFQUFBN1IsYUFDQTZSLEVBQUFwYyxrQkFDQW9jLEVBQUFuc0MsT0FDQW1zQyxFQUFBMG1CLE9BQUEzeUQsR0FDQWlzQyxFQUFBcC9CLFNBQ0FvL0IsRUFBQW4vQixhQUNBbS9CLEVBQUFsL0IsZUFDQWsvQixFQUFBaC9CLFdBQ0FnL0IsRUFBQTcrQixrQkFDQTYrQixFQUFBeCtCLGNBQ0F3K0IsRUFBQXQrQixhQUNBcytCLEVBQUFoK0IsY0FDQWcrQixFQUFBbCtCLGFBQ0FrK0IsRUFBQXVMLFlBQ0F2TCxFQUFBaUUsVUFDQWpFLEVBQUFxRixXQUNBckYsRUFBQThFLGlCQUNBOUUsRUFBQTJFLGFBQ0EzRSxFQUFBdUUsbUJBQ0F2RSxFQUFBNzlCLGdCQUNBNjlCLEVBQUFqSCxvQkFDQWlILEVBQUFySCxjQUNBcUgsRUFBQTNILGNBQ0EySCxFQUFBOWhDLG9CQUNBOGhDLEVBQUE1aEMscUJBQ0E0aEMsRUFBQXpoQyxVQUNBeWhDLEVBQUF0MEMsV0FDQXMwQyxFQUFBLzBDLFdBQ0ErMEMsRUFBQXoyQyxVQUNBeTJDLEVBQUFPLFlBaURBb21CLENBQUExb0IsSUFFQUEsR0FBQTJvQixRQUFBLFNBRUEzb0IsR0F6OVM2RHY1QyxrRkNWN0QsUUFBQU8sRUFBQSxRQUNBQSxFQUFBLFFBQ0FBLEVBQUEsNERBRVE0aEUsRUFBOENDLFVBQTlDRCxNQUFPRSxFQUF1Q0QsVUFBdkNDLFlBQWFyN0QsRUFBMEJvN0QsVUFBMUJwN0QsU0FBVXM3RCxFQUFnQkYsVUFBaEJFLFlBQ3JCQyxHQUFjQyxVQUF2QkMsUUFBdUJELFVBQWRELFdBQ1RHLEVBQWFDLFVBQWJELFNBR0pFLEVBQVMsS0EyTFBDLEVBQW1CLFNBQUN2OUQsR0EwQnhCLElBeEJBLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLeTlELFFBQVE1MEIsT0FDRjYwQixjQUNUQyxFQUFTSCxFQUFLSSxRQUNkbnVELEVBQUtrdUQsRUFBT0UsWUFHWjV4RCxFQUFPdXhELEVBQUsxM0MsYUFBYSxjQUFnQixRQUd6Q2c0QyxHQURjSCxFQUFPSSxTQUFTQyxPQUFPQyxZQUFZaHlELEdBQzFDbXhELEVBQVMzdEQsSUFHbEJ5dUQsRUFBYXp1RCxFQUFHd21CLFVBQVUsU0FDMUJrb0MsRUFBVzF1RCxFQUFHd21CLFVBQVUsT0FDdEJtb0MsR0FDTkMsTUFBUyxjQUNUQyxpQkFBa0Isc0JBQ2xCQyxlQUFnQixrQkFFWHo0RCxHQUNMdTRELE1BQVMsS0FDVEMsaUJBQWtCLEtBQ2xCQyxlQUFnQixPQUdQcGpFLEVBQUkraUUsRUFBVzExRCxLQUFNck4sR0FBS2dqRSxFQUFTMzFELEtBQU1yTixJQUFLLENBQ3JELElBQUl1TixFQUFPK0csRUFBRzVILFFBQVExTSxHQUVwQnVOLEVBRENvMUQsRUFBSzd4RCxHQUNDdkQsRUFBSzRJLFFBQVE4c0QsRUFBS255RCxHQUFPLE1BRXpCbkcsRUFBSW1HLEdBQVF2RCxFQUdyQitHLEVBQUdtOUIsYUFBYWxrQyxHQUNkRixLQUFNck4sRUFDTm9MLEdBQUksSUFFSmlDLEtBQU1yTixFQUNOb0wsR0FBSSxpQkFHUmtKLEVBQUc0akIsU0EwSEwsU0FBU21yQyxFQUFrQi91RCxFQUFJZ3hCLEVBQVFnK0IsRUFBVUMsR0FDaEQsSUFBSWgyRCxFQUNBekcsRUFBUXc4RCxFQUFTLEdBQ2pCdjhELEVBQU11OEQsRUFBUyxHQUNmUCxFQUFhenVELEVBQUd3bUIsVUFBVSxTQUMxQmtvQyxFQUFXMXVELEVBQUd3bUIsVUFBVSxPQUkzQi96QixFQUFNQSxFQUFJb1AsUUFBUSxRQUFTb3RELEdBQ3pCaitCLEdBRUZ4K0IsR0FEQXlHLEVBQU8rRyxFQUFHNUgsUUFBUXEyRCxFQUFXMTFELE9BQ2hCNUksTUFBTSxFQUFHcytELEVBQVczM0QsSUFDakNyRSxFQUFNd0csRUFBSzlJLE1BQU1zK0QsRUFBVzMzRCxJQUM1QmtKLEVBQUdtOUIsYUFBYTNxQyxFQUFRQyxHQUN2QnNHLEtBQU0wMUQsRUFBVzExRCxLQUNqQmpDLEdBQUksTUFHTG1DLEVBQU8rRyxFQUFHeUcsZUFDUnpHLEVBQUd5aEMsaUJBQWlCanZDLEVBQVF5RyxFQUFPeEcsR0FFckNnOEQsRUFBVzMzRCxJQUFNdEUsRUFBTW5DLE9BQ3BCbytELElBQWVDLElBQ2pCQSxFQUFTNTNELElBQU10RSxFQUFNbkMsU0FHdkIyUCxFQUFHeTVCLGFBQWFnMUIsRUFBWUMsR0FDM0IxdUQsRUFBRzRqQixRQW9MTCxJQUFNc3JDLEdBQ0pDLE1BQ0VsakUsS0FBTSxPQUNObWpFLE9BemlCZSxTQUFDNytELEdBRWxCLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLeTlELFFBQVE1MEIsT0FDRjYwQixjQUNUQyxFQUFTSCxFQUFLSSxRQUNkbnVELEVBQUtrdUQsRUFBT0UsWUFHWjV4RCxFQUFPdXhELEVBQUsxM0MsYUFBYSxjQUFnQixPQUV6Q200QyxFQUFjTixFQUFPSSxTQUFTQyxPQUFPQyxZQUFZaHlELEdBRWpENnhELEVBQU9WLEVBQVMzdEQsR0FFbEIvRyxTQUNBbzJELEVBQWFiLEVBQ2JjLEVBQVdkLEVBRVhDLEVBQWF6dUQsRUFBR3dtQixVQUFVLFNBQzFCa29DLEVBQVcxdUQsRUFBR3dtQixVQUFVLE9BR3hCNm5DLEVBQUs3eEQsS0F3QlB2RCxFQUFPK0csRUFBR3lHLGVBRUMsUUFBUmpLLEVBRUp2RCxHQURBQSxFQUFPQSxFQUFLM0csTUFBTSxNQUFNcXVDLEtBQUssS0FDakJydUMsTUFBTSxNQUFNcXVDLEtBQUssSUFDWixVQUFSbmtDLEVBRVR2RCxHQURBQSxFQUFPQSxFQUFLM0csTUFBTSxLQUFLcXVDLEtBQUssS0FDaEJydUMsTUFBTSxLQUFLcXVDLEtBQUssSUFDWCxpQkFBUm5rQyxJQUNUdkQsRUFBT0EsRUFBSzNHLE1BQU0sTUFBTXF1QyxLQUFLLEtBRTVCM2dDLEVBQUd5aEMsaUJBQWlCNHRCLEVBQWFwMkQsRUFBT3EyRCxHQUV4Q2IsRUFBVzMzRCxJQUFNdTRELEVBQVdoL0QsT0FDNUJxK0QsRUFBUzUzRCxHQUFLMjNELEVBQVczM0QsR0FBS21DLEVBQUs1SSxRQUdyQzJQLEVBQUd5NUIsYUFBYWcxQixFQUFZQyxHQUM1QjF1RCxFQUFHNGpCLFNBMmVEM3pCLFVBQVcsWUFDWDZmLE1BQU8sT0FDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZkMsUUFDRXhqRSxLQUFNLFNBQ05takUsT0E1ZWlCLFNBQUM3K0QsR0FFcEIsSUFBTXc5RCxHQUROeDlELEVBQUlBLEdBQUt5OUQsUUFBUTUwQixPQUNGNjBCLGNBQ1RDLEVBQVNILEVBQUtJLFFBQ2RudUQsRUFBS2t1RCxFQUFPRSxZQUdaNXhELEVBQU91eEQsRUFBSzEzQyxhQUFhLGNBQWdCLFNBRXpDbTRDLEVBQWNOLEVBQU9JLFNBQVNDLE9BQU9DLFlBQVloeUQsR0FDakQ2eEQsRUFBT1YsRUFBUzN0RCxHQUVsQi9HLFNBQ0FvMkQsRUFBYWIsRUFDYmMsRUFBV2QsRUFFWEMsRUFBYXp1RCxFQUFHd21CLFVBQVUsU0FDMUJrb0MsRUFBVzF1RCxFQUFHd21CLFVBQVUsT0FHeEI2bkMsRUFBSzd4RCxLQUdQdkQsRUFBTytHLEVBQUd5RyxlQUVDLFFBQVJqSyxFQUVKdkQsR0FEQUEsRUFBT0EsRUFBSzNHLE1BQU0sTUFBTXF1QyxLQUFLLEtBQ2pCcnVDLE1BQU0sTUFBTXF1QyxLQUFLLElBQ1osVUFBUm5rQyxFQUVUdkQsR0FEQUEsRUFBT0EsRUFBSzNHLE1BQU0sS0FBS3F1QyxLQUFLLEtBQ2hCcnVDLE1BQU0sS0FBS3F1QyxLQUFLLElBQ1gsaUJBQVJua0MsSUFDVHZELEVBQU9BLEVBQUszRyxNQUFNLE1BQU1xdUMsS0FBSyxLQUU1QjNnQyxFQUFHeWhDLGlCQUFpQjR0QixFQUFhcDJELEVBQU9xMkQsR0FFeENiLEVBQVczM0QsSUFBTXU0RCxFQUFXaC9ELE9BQzVCcStELEVBQVM1M0QsR0FBSzIzRCxFQUFXMzNELEdBQUttQyxFQUFLNUksUUFHckMyUCxFQUFHeTVCLGFBQWFnMUIsRUFBWUMsR0FDNUIxdUQsRUFBRzRqQixTQW9jRDN6QixVQUFXLGNBQ1g2ZixNQUFPLFNBQ1B5L0MsU0FBUyxFQUNUbi9ELE1BQU8sRUFDUG8vRCxhQUFhLEdBRWZFLFNBQ0V6akUsS0FBTSxVQUNObWpFLE9BcGNrQixTQUFDNytELEdBa0JyQixJQWhCQSxJQUFNdzlELEdBRE54OUQsRUFBSUEsR0FBS3k5RCxRQUFRNTBCLE9BQ0Y2MEIsY0FDVEMsRUFBU0gsRUFBS0ksUUFDZG51RCxFQUFLa3VELEVBQU9FLFlBR1o1eEQsRUFBT3V4RCxFQUFLMTNDLGFBQWEsY0FBZ0IsVUFRM0NvNEMsR0FOZ0JQLEVBQU9JLFNBQVNDLE9BQU9DLFlBQVloeUQsR0FDMUNteEQsRUFBUzN0RCxHQUtMQSxFQUFHd21CLFVBQVUsVUFDMUJrb0MsRUFBVzF1RCxFQUFHd21CLFVBQVUsT0FFbkI5NkIsRUFBSStpRSxFQUFXMTFELEtBQU1yTixHQUFLZ2pFLEVBQVMzMUQsS0FBTXJOLElBQUssQ0FFckQsSUFBSXVOLEVBQU8rRyxFQUFHNUgsUUFBUTFNLEdBQ2hCaWtFLEVBQW1CMTJELEVBQUs5RSxPQUFPLFFBRXJDOEUsRUFBTyxLQUFPQSxFQUFLK1EsT0FBTzJsRCxFQUFtQixHQUU3QzN2RCxFQUFHbTlCLGFBQWFsa0MsR0FDZEYsS0FBTXJOLEVBQ05vTCxHQUFJLElBRUppQyxLQUFNck4sRUFDTm9MLEdBQUksaUJBSVJrSixFQUFHNGpCLFNBbWFEM3pCLFVBQVcsZUFDWDZmLE1BQU8sVUFDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZlosT0FDRTNpRSxLQUFNLFFBQ05takUsT0FBUXRCLEVBQ1I3OUQsVUFBVyx1QkFDWDZmLE1BQU8sUUFDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZjV1RCxNQUNFM1UsS0FBTSxPQUNObWpFLE9BeldvQixTQUFDNytELEdBRXZCLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLeTlELFFBQVE1MEIsT0FDRjYwQixjQUNUQyxFQUFTSCxFQUFLSSxRQUNkbnVELEVBQUtrdUQsRUFBT0UsWUFHWjV4RCxFQUFPdXhELEVBQUsxM0MsYUFBYSxjQUFnQixPQUV6Q200QyxFQUFjTixFQUFPSSxTQUFTQyxPQUFPQyxZQUFZaHlELEdBQ2pENnhELEVBQU9WLEVBQVMzdEQsR0FFbEIvRyxTQUNBbzJELEVBQWFiLEVBQ2JjLEVBQVdkLEVBRVhDLEVBQWF6dUQsRUFBR3dtQixVQUFVLFNBQzFCa29DLEVBQVcxdUQsRUFBR3dtQixVQUFVLE9BR3hCNm5DLEVBQUs3eEQsS0FHUHZELEVBQU8rRyxFQUFHeUcsZUFFQyxRQUFSakssRUFFSnZELEdBREFBLEVBQU9BLEVBQUszRyxNQUFNLE1BQU1xdUMsS0FBSyxLQUNqQnJ1QyxNQUFNLE1BQU1xdUMsS0FBSyxJQUNaLFVBQVJua0MsRUFFVHZELEdBREFBLEVBQU9BLEVBQUszRyxNQUFNLEtBQUtxdUMsS0FBSyxLQUNoQnJ1QyxNQUFNLEtBQUtxdUMsS0FBSyxJQUNYLGlCQUFSbmtDLEVBQ1R2RCxFQUFPQSxFQUFLM0csTUFBTSxNQUFNcXVDLEtBQUssSUFDVCxRQUFSbmtDLElBQ1R2RCxFQUFPLFFBRVQrRyxFQUFHeWhDLGlCQUFpQjR0QixFQUFhcDJELEVBQU9xMkQsR0FFeENiLEVBQVczM0QsSUFBTXU0RCxFQUFXaC9ELE9BQzVCcStELEVBQVM1M0QsR0FBSzIzRCxFQUFXMzNELEdBQUttQyxFQUFLNUksUUFJckMyUCxFQUFHeTVCLGFBQWFnMUIsRUFBWUEsR0FDNUJ6dUQsRUFBRzRqQixTQThURDN6QixVQUFXLFlBQ1g2ZixNQUFPLE9BQ1B5L0MsU0FBUyxFQUNUbi9ELE1BQU8sRUFDUG8vRCxhQUFhLEdBRWZYLGtCQUNFNWlFLEtBQU0saUJBQ05nRSxVQUFXLG9CQUNYbS9ELE9BaFV3QixTQUFDNytELEdBQzNCdTlELEVBQWlCdjlELElBZ1VmdWYsTUFBTyxlQUNQeS9DLFNBQVMsRUFDVG4vRCxNQUFPLEVBQ1BvL0QsYUFBYSxHQUVmVixnQkFDRTdpRSxLQUFNLGVBQ05nRSxVQUFXLFlBQ1htL0QsT0FqVXNCLFNBQUM3K0QsR0FDekJ1OUQsRUFBaUJ2OUQsSUFpVWZ1ZixNQUFPLGNBQ1B5L0MsU0FBUyxFQUNUbi9ELE1BQU8sRUFDUG8vRCxhQUFhLEdBRWYvcUIsTUFDRXg0QyxLQUFNLE9BQ05nRSxVQUFXLFlBQ1htL0QsT0ExU2EsU0FBQzcrRCxHQUVoQixJQUFNdzlELEdBRE54OUQsRUFBSUEsR0FBS3k5RCxRQUFRNTBCLE9BQ0Y2MEIsY0FDVEMsRUFBU0gsRUFBS0ksUUFDZG51RCxFQUFLa3VELEVBQU9FLFlBR1o1eEQsRUFBT3V4RCxFQUFLMTNDLGFBQWEsY0FBZ0IsUUFHekN1NUMsRUFBYzFCLEVBQU9JLFNBQVNDLE9BQU9xQixZQUFZcHpELEdBT3ZEdXlELEVBQWtCL3VELEVBTEwydEQsRUFBUzN0RCxHQUtLeWtDLEtBQU1tckIsRUFKdkIsS0E4UlI5L0MsTUFBTyxjQUNQeS9DLFNBQVMsRUFDVG4vRCxNQUFPLEVBQ1BvL0QsYUFBYSxHQUVmSyxPQUNFNWpFLEtBQU0sUUFDTmdFLFVBQVcsV0FDWG0vRCxPQTNVYyxTQUFDNytELEdBRWpCLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLeTlELFFBQVE1MEIsT0FDRjYwQixjQUNUQyxFQUFTSCxFQUFLSSxRQUNkbnVELEVBQUtrdUQsRUFBT0UsWUFHWjV4RCxFQUFPdXhELEVBQUsxM0MsYUFBYSxjQUFnQixRQUd6Q3U1QyxFQUFjMUIsRUFBT0ksU0FBU0MsT0FBT3FCLFlBQVlwekQsR0FPdkR1eUQsRUFBa0IvdUQsRUFMTDJ0RCxFQUFTM3RELEdBS0s2dkQsTUFBT0QsRUFKeEIsS0ErVFI5L0MsTUFBTyxlQUNQeS9DLFNBQVMsRUFDVG4vRCxNQUFPLEVBQ1BvL0QsYUFBYSxHQUVmeHRCLE1BQ0UvMUMsS0FBTSxPQUNOZ0UsVUFBVyxjQUNYbS9ELE9BbFFXLFNBQUM3K0QsR0FFZCxJQUNNMjlELEdBRk4zOUQsRUFBSUEsR0FBS2pGLE9BQU84dEMsT0FDRDYwQixjQUNLRSxRQUVmTixJQUFRQSxFQUFTSyxHQUV0QixJQUFNbHVELEVBQUtrdUQsRUFBT0UsWUFDbEIsR0FBSXB1RCxFQUFJLENBQ04sSUFBTWk0QixFQUFVajRCLEVBQUc0aUMsYUFDbkJrdEIsUUFBUUMsSUFBSSxLQUFNOTNCLEdBQ2xCajRCLEVBQUdraUMsa0JBd1BIcHlCLE1BQU8sT0FDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZnZ0QixNQUNFaDJDLEtBQU0sT0FDTmdFLFVBQVcsZUFDWG0vRCxPQXhQVyxTQUFDNytELEdBRWQsSUFDTTI5RCxHQUZOMzlELEVBQUlBLEdBQUtqRixPQUFPOHRDLE9BQ0Q2MEIsY0FDS0UsUUFFZk4sSUFBUUEsRUFBU0ssR0FFdEIsSUFBTWx1RCxFQUFLa3VELEVBQU9FLFlBQ2xCLEdBQUlwdUQsRUFBSSxDQUNOLElBQU1pNEIsRUFBVWo0QixFQUFHNGlDLGFBQ25Ca3RCLFFBQVFDLElBQUksT0FBUTkzQixHQUNwQmo0QixFQUFHbWlDLGtCQThPSHJ5QixNQUFPLE9BQ1B5L0MsU0FBUyxFQUNUbi9ELE1BQU8sR0FDUG8vRCxhQUFhLEdBRWZRLE9BQ0UvakUsS0FBTSxRQUNOZ0UsVUFBVyxnQkFDWG0vRCxPQTlIZ0IsV0FDbEI5akUsT0FBTzJrRSxLQUFLekMsSUE4SFYxOUMsTUFBTyxlQUNQeS9DLFNBQVMsRUFDVG4vRCxNQUFPLEVBQ1BvL0QsYUFBYSxHQUVmVSxNQUNFamtFLEtBQU0sT0FDTmdFLFVBQVcsV0FDWG0vRCxPQXhQYSxTQUFDNytELEdBRWhCLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLakYsT0FBTzh0QyxPQUNENjBCLGNBQ1RDLEVBQVNILEVBQUtJLFFBTXBCLEdBSktOLElBQVFBLEVBQVNLLElBQ0hMLEVBQU9zQyxRQUFQLFdBR25CLENBRUF0QyxFQUFPc0MsUUFBUCxZQUErQixFQUMvQnRDLEVBQU9zQyxRQUFQLGVBQW1DdEMsRUFBT3NDLFFBQVAsV0FDbkN0QyxFQUFPc0MsUUFBUCxXQUErQnRDLEVBQU9zQyxRQUFQLFdBRS9CN0MsRUFBWVMsRUFBTSxVQUdsQixJQUFNcUMsRUFBV3ZDLEVBQU9TLFNBQVMrQixHQUMzQkMsRUFBWUYsRUFBU3hnRCxjQUFjLG1CQUNuQzJnRCxFQUFPSCxFQUFTeGdELGNBQWMsY0FDaEMyZ0QsR0FBTWhELEVBQVlnRCxFQUFNLFFBQ3hCRCxHQUFXcitELEVBQVNxK0QsRUFBVyxRQUduQyxJQUFNRSxFQUFnQkosRUFBU3hnRCxjQUFjLGlCQUFpQkEsY0FBYyxhQUN0RTZnRCxFQUFnQkwsRUFBU3hnRCxjQUFjLGlCQUFpQkEsY0FBYyxpQkFDeEU0Z0QsR0FBZWpELEVBQVlpRCxFQUFlLFVBQzFDQyxHQUFlbEQsRUFBWWtELEVBQWUsWUE2TjVDM2dELE1BQU8sY0FDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZjlYLFNBQ0V6ckQsS0FBTSxVQUNOZ0UsVUFBVyxlQUNYbS9ELE9BL05nQixTQUFDNytELEdBRW5CLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLakYsT0FBTzh0QyxPQUNENjBCLGNBQ1RDLEVBQVNILEVBQUtJLFFBTXBCLEdBSktOLElBQVFBLEVBQVNLLElBQ0pMLEVBQU9zQyxRQUFQLFVBR2xCLENBRUF0QyxFQUFPc0MsUUFBUCxXQUE4QixFQUM5QnRDLEVBQU9zQyxRQUFQLGVBQW1DdEMsRUFBT3NDLFFBQVAsVUFDbkN0QyxFQUFPc0MsUUFBUCxZQUFnQ3RDLEVBQU9zQyxRQUFQLFVBRWhDN0MsRUFBWVMsRUFBTSxVQUdsQixJQUFNcUMsRUFBV3ZDLEVBQU9TLFNBQVMrQixHQUMzQkMsRUFBWUYsRUFBU3hnRCxjQUFjLG1CQUNuQzJnRCxFQUFPSCxFQUFTeGdELGNBQWMsY0FDaEMyZ0QsR0FBTWhELEVBQVlnRCxFQUFNLFFBQ3hCRCxHQUFXL0MsRUFBWStDLEVBQVcsUUFHdEMsSUFBTUksRUFBYU4sRUFBU3hnRCxjQUFjLGlCQUFpQkEsY0FBYyxhQUNuRTRnRCxFQUFnQkosRUFBU3hnRCxjQUFjLGlCQUFpQkEsY0FBYyxhQUN4RThnRCxHQUFZbkQsRUFBWW1ELEVBQVksVUFDcENGLEdBQWVqRCxFQUFZaUQsRUFBZSxZQW9NNUMxZ0QsTUFBTyxpQkFDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZm1CLFNBQ0Uxa0UsS0FBTSxVQUNOZ0UsVUFBVyxXQUNYbS9ELE9BdE1nQixTQUFDNytELEdBRW5CLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLakYsT0FBTzh0QyxPQUNENjBCLGNBQ1RDLEVBQVNILEVBQUtJLFFBTXBCLEdBSktOLElBQVFBLEVBQVNLLElBQ0FMLEVBQU9zQyxRQUFQLGNBR3RCLENBRUF0QyxFQUFPc0MsUUFBUCxlQUFrQyxFQUNsQ3RDLEVBQU9zQyxRQUFQLFlBQWdDdEMsRUFBT3NDLFFBQVAsY0FDaEN0QyxFQUFPc0MsUUFBUCxXQUErQnRDLEVBQU9zQyxRQUFQLGNBRS9CN0MsRUFBWVMsRUFBTSxVQUdsQixJQUFNcUMsRUFBV3ZDLEVBQU9TLFNBQVMrQixHQUMzQkUsRUFBT0gsRUFBU3hnRCxjQUFjLGNBQzlCMGdELEVBQVlGLEVBQVN4Z0QsY0FBYyxtQkFDckMyZ0QsR0FBTXQrRCxFQUFTcytELEVBQU0sUUFDckJELEdBQVcvQyxFQUFZK0MsRUFBVyxRQUd0QyxJQUFNSSxFQUFhTixFQUFTeGdELGNBQWMsaUJBQWlCQSxjQUFjLGFBQ25FNmdELEVBQWdCTCxFQUFTeGdELGNBQWMsaUJBQWlCQSxjQUFjLGlCQUN4RThnRCxHQUFZbkQsRUFBWW1ELEVBQVksVUFDcENELEdBQWVsRCxFQUFZa0QsRUFBZSxZQTJLNUMzZ0QsTUFBTyxpQkFDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsR0FFZm9CLFlBQ0Uza0UsS0FBTSxhQUNOZ0UsVUFBVyxtQkFDWG0vRCxPQTdLbUIsU0FBQzcrRCxJQXFCeEIsU0FBd0JBLEdBRXRCLElBQU13OUQsR0FETng5RCxFQUFJQSxHQUFLakYsT0FBTzh0QyxPQUNENjBCLGNBQ1RDLEVBQVNILEVBQUtJLFFBRXBCYixFQUFZUyxFQUFNLFVBRWJGLElBQVFBLEVBQVNLLEdBM0J0QjJDLENBQWN0Z0UsR0FFZCxJQUFNNi9ELEVBQVd2QyxFQUFPUyxTQUFTK0IsR0FFakMvQyxFQUFZOEMsRUFBVSxlQXlLcEJ0Z0QsTUFBTyxvQkFDUHkvQyxTQUFTLEVBQ1RuL0QsTUFBTyxFQUNQby9ELGFBQWEsZUErRGZOLHdCQUVBVSxhQTFEQW5yQixNQUFPLElBQUssWUFDYm9yQixPQUFRLE9BQVEsVUFDaEJpQixPQUFRLEdBQUksc0hBQ1pDLGdCQUFpQixHQUFJLGtCQXlEcEJDLGFBcEREdnNCLEtBQU0sb0JBQ05vckIsTUFBTyxxQkFxRE5yQixhQWhEQVcsS0FBUSxLQUNUdnVELEtBQVEsTUFDUjZ1RCxPQUFVLEtBaURUd0IsV0E1Q0E5QixLQUFRLFFBQ1RNLE9BQVUsUUFDVmhyQixLQUFRLFFBQ1BpckIsUUFBVyxRQUNYZCxNQUFTLFFBQ1ZzQyxvQkFBdUIsY0FDdkJDLFdBQWMsUUFDYnRCLE1BQVMsWUFDVHVCLEtBQVEsUUFDUkMsTUFBUyxRQUNWdkQsaUJBQW9CLFFBQ3BCZ0IsZUFBZ0IsWUFDaEJELGlCQUFrQixRQUNsQnlDLGdCQUFtQixZQUNuQkMsY0FBaUIsUUFDakJDLGlCQUFvQixLQUNwQkMsaUJBQW9CLE9BK0JuQkMsWUF2QmtCLFNBQUN6bEUsR0FNbkIsT0FKRUEsRUFERW1oRSxFQUNLbmhFLEVBQUs0VixRQUFRLE9BQVEsT0FFckI1VixFQUFLNFYsUUFBUSxNQUFPLHlTQy92QnpCOHZELEdBS0pDLGlCQUxXLFNBS01qK0QsRUFBUXdELEdBQ3ZCLElBQUssSUFBSTlKLEtBQVk4SixFQUNuQixHQUFJQSxFQUFPNUosZUFBZUYsR0FDeEIsR0FBSXdrRSxNQUFNeGtFLGFBQXFCaUcsTUFBTyxDQUNwQyxJQUFNM0csRUFBUWdILEVBQU90RyxhQUFxQmlHLE1BQVFLLEVBQU90RyxNQUN6RHNHLEVBQU90RyxHQUFZOEosRUFBTzlKLEdBQVVnVyxPQUFPMVcsUUFFdkIsTUFBcEJ3SyxFQUFPOUosSUFDcUIsV0FBNUJ5a0UsRUFBTzM2RCxFQUFPOUosS0FDZDhKLEVBQU85SixHQUFVb3pDLGNBQWdCcjBDLE9BRWpDdUgsRUFBT3RHLEdBQVlxSCxLQUFLazlELGlCQUFpQmorRCxFQUFPdEcsT0FBaUJ3a0UsTUFBTXhrRSxJQUV2RXNHLEVBQU90RyxHQUFZOEosRUFBTzlKLEdBS2hDLE9BQU9zRyxHQVNUdTlCLE9BaENXLFNBZ0NKdjlCLEdBQ0wsSUFBSyxJQUFJakksRUFBSSxFQUFHQSxFQUFJNkgsVUFBVWxELE9BQVEzRSxJQUNwQ2lJLEVBQVNlLEtBQUtrOUQsaUJBQWlCaitELEVBQVFKLFVBQVU3SCxJQUduRCxPQUFPaUksR0FHVHk1RCxNQUFPLE1BQU10L0QsS0FBS0gsVUFBVUMsVUFLNUIwL0QsWUE3Q1csU0E2Q0MrQyxFQUFJcGdFLEdBQ0ksaUJBQWQsSUFBT29nRSxFQUFQLFlBQUF5QixFQUFPekIsTUFDS0EsRUFBRzBCLFVBQVV2Z0UsU0FBU3ZCLEdBRXBDb2dFLEVBQUcwQixVQUFVbDhCLE9BQU81bEMsR0FFcEJvZ0UsRUFBRzBCLFVBQVV0d0MsSUFBSXh4QixLQU9yQmdDLFNBMURXLFNBMERGbytELEVBQUlwZ0UsR0FDTyxpQkFBZCxJQUFPb2dFLEVBQVAsWUFBQXlCLEVBQU96QixNQUNLQSxFQUFHMEIsVUFBVXZnRSxTQUFTdkIsSUFFcENvZ0UsRUFBRzBCLFVBQVV0d0MsSUFBSXh4QixLQU1yQnM5RCxZQXBFVyxTQW9FQzhDLEVBQUlwZ0UsR0FDSSxpQkFBZCxJQUFPb2dFLEVBQVAsWUFBQXlCLEVBQU96QixNQUNLQSxFQUFHMEIsVUFBVXZnRSxTQUFTdkIsSUFFcENvZ0UsRUFBRzBCLFVBQVVsOEIsT0FBTzVsQyxLQVN4QitoRSxRQWpGVyxTQWlGSHQrRCxHQUNOLEdBQW1CLGlCQUFmLElBQU9BLEVBQVAsWUFBQW8rRCxFQUFPcCtELE1BQ1BKLE1BQU0yK0QsUUFBUXYrRCxHQUFsQixDQUVBLElBQU0wQyxLQUNBODdELEVBQVM5bEUsT0FBTytsRSxvQkFBb0J6K0QsR0FDMUMsR0FBSXcrRCxFQUFPN2hFLE9BQVMsRUFBRyxDQUNyQixJQUFJMUQsU0FDSnVsRSxFQUFPRSxRQUFRLFNBQUFDLEdBQ2IxbEUsRUFBUStHLEVBQUkyK0QsR0FDWmo4RCxFQUFJRixLQUFLdkosS0FHYixPQUFPeUosSUFNVGs4RCxXQXBHVyxTQW9HQUMsR0FDVCxJQUFJbHNELEdBQVMsRUFJYixNQUhrQixtQkFBUGtzRCxJQUNUbHNELEdBQVMsR0FFSkEsY0FJSXNyRCxpRkMzR2YsSUFBTWEsR0FDSjlFLFFBQVMseUJBRVQrRSxTQUFVLGdEQUNWakYsVUFBVyw0Q0FDWFUsUUFFRWorRCxXQUVFeWlFLFVBQVcsb0JBRVhDLFdBQVkscUJBRVovQixXQUFZLDJCQUVabFosUUFBUyx5QkFFVHdZLEtBQU0sMEJBRU5TLFFBQVMsOEJBRVg5VixPQUNFK1gsTUFDRTNpRSxVQUFXLG9CQUNYcEQsS0FBTSxlQUVSZ21FLE9BQ0U1aUUsVUFBVyxxQkFDWHBELEtBQU0saUJBR1ZpbUUsMkRBakNKdG5FLEVBQUEsS0FpQ2N1bkUsb0JBSUNQLG9CQzNCZCxTQUFBanNCLEdBQ0QsYUFFQUEsRUFBQXlsQixXQUFBLG9CQUFBZ0gsRUFBQUMsR0FFQSxJQUFBQyxFQUFBM3NCLEVBQUFoL0IsUUFBQXlyRCxFQUFBLGFBQ0FHLEVBQUEsUUFBQUQsRUFBQWpuRSxVQWFBaWQsSUFBQStwRCxFQUFBRyxzQkFDQUgsRUFBQUcscUJBQUEsUUFJQWxxRCxJQUFBK3BELEVBQUFJLHFCQUNBSixFQUFBSSxtQkFBQSxRQUdBbnFELElBQUErcEQsRUFBQUssWUFBQUwsRUFBQUssV0FBQSxRQUdBcHFELElBQUErcEQsRUFBQU0sZ0JBQ0FOLEVBQUFNLGVBQUEsUUFFQXJxRCxJQUFBK3BELEVBQUFPLFFBQ0FQLEVBQUFPLE9BQUEsUUFFQXRxRCxJQUFBK3BELEVBQUFRLDhCQUNBUixFQUFBUSw2QkFBQSxRQUVBdnFELElBQUErcEQsRUFBQVMsTUFDQVQsRUFBQVMsS0FBQSxRQUdBeHFELElBQUErcEQsRUFBQVUscUJBQ0FWLEVBQUFVLHVCQUVBLElBQUFDLEdBQ0FDLE9BQUEsU0FDQWp6RCxLQUFBLFVBQ0FndUQsTUFBQSxRQUNBa0YsTUFBQSxhQUNBQyxNQUFBLGFBQ0FDLE1BQUEsVUFDQUMsR0FBQSxLQUNBcEUsTUFBQSxRQUNBcUUsYUFBQSxpQkFDQUMsWUFBQSxlQUNBQyxXQUFBLGFBQ0FDLFdBQUEsT0FDQUMsVUFBQSxPQUNBQyxTQUFBLE9BQ0FDLFNBQUEsU0FDQUMsR0FBQSxLQUNBQyxPQUFBLFNBQ0FuQixjQUFBLGdCQUNBQyxNQUFBLFdBR0EsUUFBQW1CLEtBQUFmLEVBQ0FBLEVBQUFybUUsZUFBQW9uRSxJQUFBMUIsRUFBQVUsbUJBQUFnQixLQUNBZixFQUFBZSxHQUFBMUIsRUFBQVUsbUJBQUFnQixJQUlBLElBQUFDLEVBQUEsNkJBQ0FDLEVBQUEsK0JBQ0FDLEVBQUEsb0JBQ0FDLEVBQUE5QixFQUFBK0IsMkJBQUEsdUJBQ0FDLEVBQUEsMEJBQ0FDLEVBQUEsMkJBQ0FDLEVBQUEsdUNBQ0FDLEVBQUEsc0JBQ0FDLEVBQUEsOENBR0EsU0FBQUMsRUFBQXBvRCxFQUFBaEYsRUFBQTlVLEdBRUEsT0FEQThVLEVBQUE5VSxFQUFBOFUsRUFBQXF0RCxPQUFBbmlFLEVBQ0FBLEVBQUE4WixFQUFBaEYsR0FHQSxTQUFBc3RELEVBQUF0b0QsRUFBQWhGLEVBQUE5VSxHQUVBLE9BREE4VSxFQUFBOVUsRUFBQThVLEVBQUF1dEQsTUFBQXJpRSxFQUNBQSxFQUFBOFosRUFBQWhGLEdBU0EsU0FBQW1GLEVBQUFuRixHQWVBLEdBYkFBLEVBQUF3dEQsV0FBQSxFQUNBeHRELEVBQUFzc0QsVUFBQSxFQUNBdHNELEVBQUFxc0QsVUFBQSxFQUVBcnNELEVBQUF1c0QsSUFBQSxFQUVBdnNELEVBQUF3c0QsUUFBQSxFQUVBeHNELEVBQUFxckQsZUFBQSxFQUVBcnJELEVBQUEwbUQsTUFBQSxFQUVBMW1ELEVBQUF5dEQsY0FBQSxFQUNBenRELEVBQUE5VSxHQUFBd2lFLEVBQUEsQ0FDQSxJQUFBQyxFQUFBMUMsRUFDQSxJQUFBMEMsRUFBQSxDQUNBLElBQUEzckQsRUFBQXE4QixFQUFBbCtCLFVBQUE2cUQsRUFBQWhyRCxFQUFBNHRELFdBQ0FELEVBQUEsT0FBQTNyRCxFQUFBcmQsS0FBQVosTUFBQSxPQUFBaWUsRUFBQWhDLE1BQUE2dEQsV0FDQTdyRCxFQUFBaEMsTUFBQTBDLFNBQUFWLEVBQUFoQyxNQUFBOHRELFNBQUFDLFNBRUFKLElBQ0EzdEQsRUFBQTlVLEVBQUE4aUUsRUFDQWh1RCxFQUFBdXRELE1BQUFVLEVBQ0FqdUQsRUFBQTR0RCxVQUFBLE1BU0EsT0FMQTV0RCxFQUFBNkcsY0FBQSxFQUNBN0csRUFBQWt1RCxzQkFBQSxFQUVBbHVELEVBQUFtdUQsU0FBQW51RCxFQUFBb3VELFNBQ0FwdUQsRUFBQW91RCxVQUFzQnBwRCxPQUFBLE1BQ3RCLEtBR0EsU0FBQWlwRCxFQUFBanBELEVBQUFoRixHQUNBLElBQUFxdUQsRUFBQXJwRCxFQUFBeEQsV0FBQXhCLEVBQUF5QixZQUNBNnNELEVBN0NBLFNBQUF6OUQsR0FDQSxPQUFBQSxJQUFBLEtBQUFqTCxLQUFBaUwsRUFBQWhGLFFBNENBMGlFLENBQUF2dUQsRUFBQW11RCxTQUFBbnBELFFBQ0F3cEQsRUFBQXh1RCxFQUFBeXRELGFBQ0FnQixFQUFBenVELEVBQUFtdUQsU0FBQXBDLEdBQ0EyQyxHQUFBLElBQUExdUQsRUFBQXNLLEtBQ0Fxa0QsR0FBQTN1RCxFQUFBNHVELFVBQUE1dUQsRUFBQTR1RCxVQUFBem1FLE9BQUEsU0FFQTZYLEVBQUF5dEQsY0FBQSxFQUVBLElBQUFvQixFQUFBN3VELEVBQUF5QixZQUVBLFVBQUF6QixFQUFBOHVELGtCQUNBOXVELEVBQUE4dUQsZ0JBQUE5dUQsRUFBQXlCLFlBQ0FpdEQsR0FBQSxDQVdBLElBVEExdUQsRUFBQXVzRCxJQUFBLEVBQ0F2c0QsRUFBQXdzRCxRQUFBLEVBQ0F4c0QsRUFBQXRILE1BQUEsRUFDQXNILEVBQUFxckQsZUFBQSxFQUVBcnJELEVBQUFzSyxLQUFBLEtBSUF1a0QsRUFBQTd1RCxFQUFBNHVELFVBQUE1dUQsRUFBQTR1RCxVQUFBem1FLE9BQUEsSUFDQTZYLEVBQUE0dUQsVUFBQWwvQixNQUNBMXZCLEVBQUE0dUQsVUFBQXptRSxPQUNBNlgsRUFBQXlCLFlBQUF6QixFQUFBNHVELFVBQUE1dUQsRUFBQTR1RCxVQUFBem1FLE9BQUEsR0FHQTZYLEVBQUFzSyxNQUFBLEdBR0EsSUFBQXRLLEVBQUFzSyxPQUNBdEssRUFBQTh1RCxnQkFBQUQsRUFBQTd1RCxFQUFBNHVELFVBQUE1dUQsRUFBQTR1RCxVQUFBem1FLE9BQUEsSUFNQSxJQUFBNG1FLElBQ0FULEdBQUFHLEdBQUF6dUQsRUFBQW11RCxTQUFBeEMsUUFDQStDLEdBQUFGLEdBQ0F4dUQsRUFBQW11RCxTQUFBYSxlQUdBQyxJQUFBLElBQUFqdkQsRUFBQXNLLE1BQUFta0QsR0FBQUgsSUFDQXR1RCxFQUFBeUIsYUFBQWt0RCxHQUFBM3BELEVBQUE1ZCxNQUFBc2xFLEdBRUF0bEUsRUFBQSxLQUNBLEdBQUE0WSxFQUFBOHVELGlCQUFBLElBQUFOLEdBQUF4dUQsRUFBQW11RCxTQUFBYSxlQUNBaHZELEVBQUFtdUQsU0FBQXhDLFFBQUEyQyxHQUdBLE9BRkF0cEQsRUFBQTNELFlBQ0FyQixFQUFBeXRELGNBQUEsRUFDQS9CLEVBQUFoekQsS0FDSyxHQUFBc00sRUFBQTVELFdBQ0wsWUFDSyxHQUFBaXRELEdBQUFydUQsRUFBQXlCLGFBQUFrdEQsSUFBQXZuRSxFQUFBNGQsRUFBQTVkLE1BQUF5bEUsS0FBQXpsRSxFQUFBLEdBQUFlLFFBQUEsRUFNTCxPQUxBNlgsRUFBQTBtRCxNQUFBLEVBQ0ExbUQsRUFBQTJyRCxPQUFBdmtFLEVBQUEsR0FBQWUsT0FDQTZYLEVBQUFvdUQsU0FBQXpDLFFBQUEsRUFDQVosRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLFVBQ0Fsc0QsRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BQ0E2QixFQUFBbHZELEdBQ0ssR0FBQUEsRUFBQXlCLGFBQUFrdEQsR0FBQTNwRCxFQUFBOUQsSUFBQSxLQUlMLE9BSEFsQixFQUFBMG1ELE1BQUEySCxFQUFBLEVBQUFydUQsRUFBQTBtRCxNQUFBLEVBQ0FxRSxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsU0FDQWxuRCxFQUFBNUQsV0FDQTh0RCxFQUFBbHZELEdBQ0ssSUFBQWl2RCxJQUFBanZELEVBQUFtdkQsUUFBQWQsR0FBQXJ1RCxFQUFBeUIsYUFBQWt0RCxJQUFBdm5FLEVBQUE0ZCxFQUFBNWQsTUFBQXVsRSxJQUFBLENBQ0wsSUFBQXlDLEVBQUFob0UsRUFBQSxhQWNBLE9BWkE0WSxFQUFBeUIsWUFBQW90RCxFQUFBN3BELEVBQUFsZCxVQUFBSyxPQUNBNlgsRUFBQXNLLE1BQUEsRUFDQXRLLEVBQUEwbUQsTUFBQSxFQUdBMW1ELEVBQUE0dUQsVUFBQTVnRSxLQUFBZ1MsRUFBQXlCLGFBRUFzcEQsRUFBQUssV0FBQXBtRCxFQUFBNWQsTUFBQXdsRSxHQUFBLEtBQ0E1c0QsRUFBQXF2RCxVQUFBLEdBRUFydkQsRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BQ0F0QyxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFlBQUEsZUFBQWtELElBQ0FGLEVBQUFsdkQsR0FDSyxPQUFBcXVELEdBQUFydUQsRUFBQXlCLGFBQUFrdEQsSUFBQXZuRSxFQUFBNGQsRUFBQTVkLE1BQUE2bEUsR0FBQSxLQUNManRELEVBQUEwbUQsTUFBQSxFQUNBMW1ELEVBQUFzdkQsWUFBQSxJQUFBNW5FLE9BQUFOLEVBQUEsV0FFQTRZLEVBQUF1dkQsVUFBQXhFLEVBQUFRLDZCQTdOQSxTQUFBeG5FLEdBQ0EsR0FBQXM2QyxFQUFBbXhCLGVBQUEsQ0FDQSxJQUFBMTZELEVBQUF1cEMsRUFBQW14QixlQUFBenJFLEdBQ0ErUSxJQUFBL1EsRUFBQStRLEVBQUFtdkQsTUFBQW52RCxFQUFBMjZELE1BQUEsSUFFQSxJQUFBOXFFLEVBQUEwNUMsRUFBQWgvQixRQUFBeXJELEVBQUEvbUUsR0FDQSxjQUFBWSxFQUFBWixLQUFBLEtBQUFZLEVBdU5BMGEsQ0FBQWpZLEVBQUEsSUFDQTRZLEVBQUF1dkQsWUFBQXZ2RCxFQUFBMHZELFdBQUFyeEIsRUFBQWgrQixXQUFBTCxFQUFBdXZELFlBQ0F2dkQsRUFBQTlVLEVBQUE4VSxFQUFBdXRELE1BQUFvQyxFQUNBNUUsRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLGNBQ0Fsc0QsRUFBQXRILE1BQUEsRUFDQXcyRCxFQUFBbHZELElBS0FBLEVBQUFtdkQsVUFFQUosR0FBQUwsR0FBQTF1RCxFQUFBMG1ELFFBQUEsSUFBQTFtRCxFQUFBc0ssTUFDQXRLLEVBQUF0SCxNQUFBdTJELEdBQUEvQixFQUFBdG5FLEtBQUFvZixFQUFBblosV0FDQXpFLEVBQUE0ZCxFQUFBL0MsVUFBQSxNQUFBN2EsVUFBQTJsRSxLQUdBL3NELEVBQUFtdkQsUUFJQW52RCxFQUFBMnJELE9BQUEzckQsRUFBQW12RCxPQUVBbnZELEVBQUFtdkQsT0FBQSxFQUNBbnFELEVBQUEzRCxZQUNBMHBELEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxZQVBBbHNELEVBQUEyckQsT0FBQSxLQUFBdmtFLEVBQUEsR0FBQXFJLE9BQUEsT0FDQXVRLEVBQUFtdkQsT0FBQW52RCxFQUFBMnJELFFBUUEzckQsRUFBQW91RCxTQUFBekMsUUFBQSxFQUNBM3JELEVBQUE5VSxFQUFBOFUsRUFBQXF0RCxPQUNBNkIsRUFBQWx2RCxJQUNLaXZELEdBQ0xqcUQsRUFBQTNELFlBQ0FyQixFQUFBK3JELElBQUEsRUFDQS9yRCxFQUFBb3VELFNBQUFyQyxJQUFBLEVBQ0FMLEVBQUFLLElBQ0ssTUFBQS9tRCxFQUFBakUsT0FDTHFzRCxFQUFBcG9ELEVBQUFoRixFQUFBNHZELEdBR0F4QyxFQUFBcG9ELEVBQUFoRixJQUFBcXRELFFBR0EsU0FBQUssRUFBQTFvRCxFQUFBaEYsR0FDQSxJQUFBaFgsRUFBQWdpRSxFQUFBNWxELE1BQUFKLEVBQUFoRixFQUFBNHRELFdBQ0EsSUFBQTNDLEVBQUEsQ0FDQSxJQUFBanBELEVBQUFxOEIsRUFBQWwrQixVQUFBNnFELEVBQUFockQsRUFBQTR0RCxZQUNBLE9BQUE1ckQsRUFBQXJkLEtBQUFaLE1BQUEsT0FBQWllLEVBQUFoQyxNQUFBNnRELFdBQ0E3ckQsRUFBQWhDLE1BQUEwQyxTQUFBVixFQUFBaEMsTUFBQTh0RCxTQUFBQyxVQUNBL3RELEVBQUE2dkQsV0FBQTdxRCxFQUFBbGQsVUFBQXFFLFFBQUEsV0FDQTZULEVBQUE5VSxFQUFBOGlFLEVBQ0FodUQsRUFBQXV0RCxNQUFBVSxFQUNBanVELEVBQUE0dEQsVUFBQSxNQUdBLE9BQUE1a0UsRUFHQSxTQUFBMm1FLEVBQUEzcUQsRUFBQWhGLEdBQ0EsSUFLQTh2RCxFQUxBQyxFQUFBL3ZELEVBQUE0dUQsVUFBQTV1RCxFQUFBNHVELFVBQUF6bUUsT0FBQSxNQUNBNm5FLEVBQUFod0QsRUFBQXlCLFlBQUFzdUQsRUFDQUUsRUFBQUYsRUFBQSxFQUNBLE9BQUEvdkQsRUFBQXN2RCxhQUFBdHZELEVBQUF5QixhQUFBd3VELElBQUFELEdBQUFockQsRUFBQTVkLE1BQUE0WSxFQUFBc3ZELGVBQ0F2RSxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsY0FFQThELElBQUFGLEVBQUFaLEVBQUFsdkQsSUFDQUEsRUFBQXV2RCxVQUFBdnZELEVBQUEwdkQsV0FBQSxLQUNBMXZELEVBQUF1dEQsTUFBQVUsRUFDQWp1RCxFQUFBOVUsRUFBQThpRSxFQUNBaHVELEVBQUFzdkQsWUFBQSxLQUNBdHZELEVBQUF0SCxLQUFBLEVBQ0FzSCxFQUFBb3VELFNBQUFZLGVBQUEsRUFDQWdCLEVBQUExQyxFQUFBdG9ELEVBQUFoRixJQUFBdXRELE9BQ0F1QyxHQUNLOXZELEVBQUF1dkQsVUFDTHZ2RCxFQUFBdXZELFVBQUFucUQsTUFBQUosRUFBQWhGLEVBQUEwdkQsYUFFQTFxRCxFQUFBM0QsWUFDQXFxRCxFQUFBaHpELE1BS0EsU0FBQXcyRCxFQUFBbHZELEdBQ0EsSUFBQXFELEtBRUEsR0FBQXJELEVBQUFrc0QsV0FBQSxDQUNBN29ELEVBQUFyVixLQUFBMDlELEVBQUFRLFlBRUEsaUJBQUFsc0QsRUFBQWtzRCxhQUFBbHNELEVBQUFrc0QsWUFBQWxzRCxFQUFBa3NELGFBRUEsUUFBQTFvRSxFQUFBLEVBQXFCQSxFQUFBd2MsRUFBQWtzRCxXQUFBL2pFLE9BQTZCM0UsSUFDbEQ2ZixFQUFBclYsS0FBQTA5RCxFQUFBUSxXQUFBLElBQUFsc0QsRUFBQWtzRCxXQUFBMW9FLElBRUEsV0FBQXdjLEVBQUFrc0QsV0FBQTFvRSxJQUNBNmYsRUFBQXJWLEtBQUEwOUQsRUFBQVEsV0FBQSxJQUFBbHNELEVBQUFrc0QsV0FBQTFvRSxHQUFBLElBQUF3YyxFQUFBMnJELFFBS0EsVUFBQTNyRCxFQUFBa3NELFdBQUExb0UsTUFDQXVuRSxFQUFBSSxvQkFBQUosRUFBQUksb0JBQUFuckQsRUFBQTBtRCxNQUNBcmpELEVBQUFyVixLQUFBMDlELEVBQUFRLFdBQUEsSUFBQWxzRCxFQUFBa3NELFdBQUExb0UsR0FBQSxJQUFBd2MsRUFBQTBtRCxPQUVBcmpELEVBQUFyVixLQUFBLFVBTUEsR0FBQWdTLEVBQUFrd0QsU0FFQSxPQURBN3NELEVBQUFyVixLQUFBLFFBQ0FxVixFQUFBbGIsT0FBQWtiLEVBQUFvMUIsS0FBQSxVQUVBLEdBQUF6NEIsRUFBQW13RCxXQUVBLE9BREE5c0QsRUFBQXJWLEtBQUEsWUFDQXFWLEVBQUFsYixPQUFBa2IsRUFBQW8xQixLQUFBLFVBOEJBLEdBM0JBejRCLEVBQUFzc0QsU0FDQWpwRCxFQUFBclYsS0FBQTA5RCxFQUFBWSxTQUFBLFFBRUF0c0QsRUFBQXdzRCxRQUF5Qm5wRCxFQUFBclYsS0FBQTA5RCxFQUFBYyxRQUN6QnhzRCxFQUFBdXNELElBQXFCbHBELEVBQUFyVixLQUFBMDlELEVBQUFhLElBQ3JCdnNELEVBQUFxckQsZUFBZ0Nob0QsRUFBQXJWLEtBQUEwOUQsRUFBQUwsZUFDaENyckQsRUFBQXNyRCxPQUF3QmpvRCxFQUFBclYsS0FBQTA5RCxFQUFBSixPQUN4QnRyRCxFQUFBcXNELFVBQTJCaHBELEVBQUFyVixLQUFBMDlELEVBQUFXLFVBQzNCcnNELEVBQUF0SCxNQUF1QjJLLEVBQUFyVixLQUFBMDlELEVBQUFoekQsTUFDdkJzSCxFQUFBMm5ELE9BQXdCdGtELEVBQUFyVixLQUFBMDlELEVBQUEvRCxPQUN4QjNuRCxFQUFBZ3NELGNBQStCM29ELEVBQUFyVixLQUFBMDlELEVBQUFNLGFBQUEsUUFDL0Joc0QsRUFBQWlzRCxhQUE4QjVvRCxFQUFBclYsS0FBQTA5RCxFQUFBTyxjQUc5QmpzRCxFQUFBMnJELFFBQXVCdG9ELEVBQUFyVixLQUFBMDlELEVBQUFDLE9BQUFELEVBQUFDLE9BQUEsSUFBQTNyRCxFQUFBMnJELFFBRXZCM3JELEVBQUEwbUQsUUFDQXJqRCxFQUFBclYsS0FBQTA5RCxFQUFBaEYsUUFHQXFFLEVBQUFJLG9CQUFBSixFQUFBSSxvQkFBQW5yRCxFQUFBMG1ELE1BQ0FyakQsRUFBQXJWLEtBQUEwOUQsRUFBQWhGLE1BQUEsSUFBQTFtRCxFQUFBMG1ELE9BRUFyakQsRUFBQXJWLEtBQUEwOUQsRUFBQWhGLE1BQUEsSUFBQXFFLEVBQUFJLHNCQUlBLElBQUFuckQsRUFBQXNLLEtBQUEsQ0FDQSxJQUFBOGxELEdBQUFwd0QsRUFBQTR1RCxVQUFBem1FLE9BQUEsS0FDQWlvRSxFQUVPLElBQUFBLEVBQ1Avc0QsRUFBQXJWLEtBQUEwOUQsRUFBQUcsT0FFQXhvRCxFQUFBclYsS0FBQTA5RCxFQUFBSSxPQUpBem9ELEVBQUFyVixLQUFBMDlELEVBQUFFLE9BY0EsT0FOQTVyRCxFQUFBa3VELHFCQUNBN3FELEVBQUFyVixLQUFBLDJCQUNLZ1MsRUFBQTZHLGVBQ0x4RCxFQUFBclYsS0FBQSxtQkFBQWdTLEVBQUE2RyxjQUFBLFlBR0F4RCxFQUFBbGIsT0FBQWtiLEVBQUFvMUIsS0FBQSxVQUdBLFNBQUE0M0IsRUFBQXJyRCxFQUFBaEYsR0FDQSxHQUFBZ0YsRUFBQTVkLE1BQUE0bEUsR0FBQSxHQUNBLE9BQUFrQyxFQUFBbHZELEdBS0EsU0FBQWd1RCxFQUFBaHBELEVBQUFoRixHQUNBLElBQUFoWCxFQUFBZ1gsRUFBQWpQLEtBQUFpVSxFQUFBaEYsR0FDQSxZQUFBaFgsRUFDQSxPQUFBQSxFQUVBLEdBQUFnWCxFQUFBc0ssS0FFQSxPQURBdEssRUFBQXNLLEtBQUEsS0FDQTRrRCxFQUFBbHZELEdBR0EsR0FBQUEsRUFBQXF2RCxTQUFBLENBQ0EsSUFBQWEsRUFBQSxNQUFBbHJELEVBQUE1ZCxNQUFBd2xFLEdBQUEsTUFLQSxPQUpBc0QsRUFBQWx3RCxFQUFBa3dELFVBQUEsRUFDQWx3RCxFQUFBbXdELFlBQUEsRUFDQXBGLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxRQUNBbHNELEVBQUFxdkQsVUFBQSxFQUNBSCxFQUFBbHZELEdBTUEsR0FIQUEsRUFBQWt3RCxVQUFBLEVBQ0Fsd0QsRUFBQW13RCxZQUFBLEVBRUFud0QsRUFBQTJyRCxRQUFBM21ELEVBQUE1ZCxNQUFBLFdBRUEsT0FEQTJqRSxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsVUFDQWdELEVBQUFsdkQsR0FHQSxJQUFBcFIsRUFBQW9XLEVBQUEvRCxPQUdBLEdBQUFqQixFQUFBd3RELFVBQUEsQ0FDQXh0RCxFQUFBd3RELFdBQUEsRUFDQSxJQUFBOEMsRUFBQTFoRSxFQUNBLE1BQUFBLElBQ0EwaEUsRUFBQSxLQUdBLElBQUFDLEVBQUEsY0FEQUQsS0FBQSxJQUFBMzJELFFBQUEseUJBQXVELFNBQ3ZELHlCQUFBMjJELEVBQ0EsR0FBQXRyRCxFQUFBNWQsTUFBQSxJQUFBTSxPQUFBNm9FLElBQUEsR0FDQSxPQUFBN0UsRUFBQVksU0FLQSxTQUFBMTlELEVBQUEsQ0FDQSxJQUFBNGhFLEVBQUF4d0QsRUFBQWtzRCxXQUNBbkIsRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLFFBQ0FsbkQsRUFBQTdELFNBQUEsS0FDQSxJQUFBN1ksRUFBQTBjLEVBQUFsZCxVQUFBSyxPQUNBLE1BQUE2WCxFQUFBdEgsTUFBQXNILEVBQUEwbUQsT0FBQSxHQUFBcCtELEVBR08sSUFBQUEsR0FBQTBYLEVBQUF0SCxLQUFBLENBQ1AsSUFBQWhVLEVBQUF3cUUsRUFBQWx2RCxHQUVBLE9BREFBLEVBQUF0SCxLQUFBLEVBQ0FoVSxFQUdBLE9BREFzYixFQUFBa3NELFdBQUFzRSxFQUNBdEIsRUFBQWx2RCxHQVBBLE9BREFBLEVBQUF0SCxLQUFBcFEsRUFDQTRtRSxFQUFBbHZELEdBU0ssR0FBQUEsRUFBQXRILEtBQ0wsT0FBQXcyRCxFQUFBbHZELEdBR0EsVUFBQXBSLElBQ0FvVyxFQUFBL0QsT0FDQThwRCxFQUFBRyxxQkFBQSxDQUNBLElBQUE1MkQsRUFBQTQ2RCxFQUFBbHZELEdBQ0F5d0QsRUFBQS9FLEVBQUFRLFdBQUEsVUFDQSxPQUFBNTNELElBQUEsSUFBQW04RCxJQUlBLFNBQUE3aEUsR0FBQW9XLEVBQUE1ZCxNQUFBLDRCQUlBLE9BSEE0WSxFQUFBaXNELGFBQUEsRUFDQWpzRCxFQUFBMm5ELE9BQUEsRUFDQW9ELEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxTQUNBZ0QsRUFBQWx2RCxHQUdBLFNBQUFwUixHQUFBb1IsRUFBQWlzRCxhQUFBam5ELEVBQUE1ZCxNQUFBLGtDQUlBLE9BSEE0WSxFQUFBaXNELGFBQUEsRUFDQWpzRCxFQUFBZ3NELGNBQUEsRUFDQWpCLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxTQUNBZ0QsRUFBQWx2RCxHQUdBLFNBQUFwUixHQUFBb1IsRUFBQWdzRCxhQUFBLENBQ0FqQixFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsU0FDQSxJQUFBNTNELEVBQUE0NkQsRUFBQWx2RCxHQUlBLE9BSEFBLEVBQUFnc0QsY0FBQSxFQUNBaHNELEVBQUEybkQsT0FBQSxFQUNBM25ELEVBQUFxdEQsT0FBQXJ0RCxFQUFBOVUsRUFBQW9oRSxFQUNBaDRELEVBR0EsU0FBQTFGLElBQUFvUixFQUFBMm5ELE1BQ0EsT0FBQTNuRCxFQUFBcXNELFVBQUFybkQsRUFBQTVkLE1BQUEsVUFBQThuRSxFQUFBbHZELElBQ0FBLEVBQUFxc0QsVUFBQSxFQUNBdEIsRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLFFBQ0FnRCxFQUFBbHZELElBR0EsU0FBQXBSLEdBQUFvUixFQUFBcXNELFNBQUEsQ0FDQXRCLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxRQUNBLElBQUE1M0QsRUFBQTQ2RCxFQUFBbHZELEdBR0EsT0FGQUEsRUFBQXFzRCxVQUFBLEVBQ0Fyc0QsRUFBQXF0RCxPQUFBcnRELEVBQUE5VSxFQUFBOFosRUFBQTVkLE1BQUEsd0JBQUFrbEUsRUFBQTBCLEVBQ0ExNUQsRUFHQSxTQUFBMUYsR0FBQW9XLEVBQUE1ZCxNQUFBLDRDQUNBNFksRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BQUFsQixFQUNBcEIsRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLFFBQ0EsSUFBQTUzRCxFQUFBNDZELEVBQUFsdkQsR0FNQSxPQUxBMUwsRUFDQUEsR0FBQSxJQUVBQSxFQUFBLEdBRUFBLEVBQUFvM0QsRUFBQVMsV0FHQSxTQUFBdjlELEdBQUFvVyxFQUFBNWQsTUFBQSxrQ0FDQTRZLEVBQUE5VSxFQUFBOFUsRUFBQXF0RCxPQUFBbEIsRUFDQXBCLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxRQUNBLElBQUE1M0QsRUFBQTQ2RCxFQUFBbHZELEdBTUEsT0FMQTFMLEVBQ0FBLEdBQUEsSUFFQUEsRUFBQSxHQUVBQSxFQUFBbzNELEVBQUFVLFVBR0EsR0FBQXJCLEVBQUFTLEtBQUEsTUFBQTU4RCxHQUFBb1csRUFBQTVkLE1BQUEsMkZBQ0EsSUFBQW1ELEVBQUF5YSxFQUFBblosT0FBQU0sUUFBQSxJQUFBNlksRUFBQXZYLEtBQ0EsT0FBQWxELEVBQUEsQ0FDQSxJQUFBbW1FLEVBQUExckQsRUFBQW5aLE9BQUE4a0UsVUFBQTNyRCxFQUFBMWEsTUFBQUMsR0FDQSx1Q0FBaUQzRSxLQUFBOHFFLEtBQUExd0QsRUFBQTZ2RCxXQUFBLEdBSWpELE9BRkE3cUQsRUFBQXpELE9BQUEsR0FDQXZCLEVBQUE0dEQsVUFBQXZ2QixFQUFBaCtCLFdBQUEycUQsR0FDQXNDLEVBQUF0b0QsRUFBQWhGLEVBQUEwdEQsR0FHQSxHQUFBM0MsRUFBQVMsS0FBQSxNQUFBNThELEdBQUFvVyxFQUFBNWQsTUFBQSxZQUVBLE9BREE0WSxFQUFBNnZELFdBQUEsRUFDQSxNQUNLLFNBQUFqaEUsR0FBQSxNQUFBQSxFQUFBLENBRUwsSUFEQSxJQUFBZ0osRUFBQSxFQUFBc0MsRUFBQSxHQUFBOEssRUFBQXZYLElBQUEsSUFBQXVYLEVBQUFuWixPQUFBNEQsT0FBQXVWLEVBQUF2WCxJQUFBLEdBQ0FtSyxFQUFBLEdBQUFvTixFQUFBOUQsSUFBQXRTLElBQUFnSixJQUNBLElBQUE1UCxFQUFBZ2QsRUFBQWpFLFFBQUEsSUFFQTZ2RCxHQUFBLEtBQUFockUsS0FBQW9DLE1BQUFtbEUsRUFBQXZuRSxLQUFBb0MsSUFBQSxLQUFBcEMsS0FBQXNVLElBQUFpekQsRUFBQXZuRSxLQUFBc1UsSUFDQTIyRCxHQUFBLEtBQUFqckUsS0FBQXNVLE1BQUFpekQsRUFBQXZuRSxLQUFBc1UsSUFBQSxLQUFBdFUsS0FBQW9DLElBQUFtbEUsRUFBQXZuRSxLQUFBb0MsSUFDQThvRSxFQUFBLEtBQUFDLEVBQUEsS0FhQSxHQVpBbjVELEVBQUEsSUFDQW9JLEVBQUF1c0QsS0FBQXFFLEdBQUEsTUFBQWhpRSxHQUFBaWlFLElBQUExRCxFQUFBdm5FLEtBQUFzVSxHQUVBOEYsRUFBQXVzRCxJQUFBMzlELElBQUFpaUUsR0FBQSxNQUFBamlFLEdBQUFnaUUsSUFBQXpELEVBQUF2bkUsS0FBQW9DLEtBQ0E4b0UsR0FBQSxHQUZBQSxHQUFBLEdBSUFsNUQsRUFBQSxJQUNBb0ksRUFBQXdzRCxTQUFBb0UsR0FBQSxNQUFBaGlFLEdBQUFpaUUsSUFBQTFELEVBQUF2bkUsS0FBQXNVLEdBRUE4RixFQUFBd3NELFFBQUE1OUQsSUFBQWlpRSxHQUFBLE1BQUFqaUUsR0FBQWdpRSxJQUFBekQsRUFBQXZuRSxLQUFBb0MsS0FDQStvRSxHQUFBLEdBRkFBLEdBQUEsR0FJQSxNQUFBQSxHQUFBLE1BQUFELEVBQUEsQ0FDQS9GLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxNQUFBNEUsRUFBQSxlQUFBQyxFQUFBLG1CQUNBLElBQUFELElBQUE5d0QsRUFBQXVzRCxHQUFBMzlELElBQ0EsSUFBQW1pRSxJQUFBL3dELEVBQUF3c0QsT0FBQTU5RCxHQUNBLElBQUFsSyxFQUFBd3FFLEVBQUFsdkQsR0FHQSxPQUZBLElBQUE4d0QsSUFBQTl3RCxFQUFBdXNELElBQUEsSUFDQSxJQUFBd0UsSUFBQS93RCxFQUFBd3NELFFBQUEsR0FDQTluRSxRQUVLLFNBQUFrSyxJQUNMb1csRUFBQTlELElBQUEsTUFBQThELEVBQUE5RCxJQUFBLE9BQ0EsU0FBQThELEVBQUFqRSxPQUNBLE9BQUFtdUQsRUFBQWx2RCxHQUVBZ0YsRUFBQXpELE9BQUEsR0FLQSxHQUFBd3BELEVBQUFNLGNBQ0EsU0FBQXo4RCxHQUFBb1csRUFBQTdELFNBQUF2UyxHQUFBLENBQ0EsR0FBQW9SLEVBQUFxckQsY0FBQSxDQUNBTixFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsaUJBQ0EsSUFBQXhuRSxFQUFBd3FFLEVBQUFsdkQsR0FFQSxPQURBQSxFQUFBcXJELGVBQUEsRUFDQTNtRSxFQUNTLEdBQUFzZ0IsRUFBQTVkLE1BQUEsYUFHVCxPQUZBNFksRUFBQXFyRCxlQUFBLEVBQ0FOLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxpQkFDQWdELEVBQUFsdkQsUUFFTyxTQUFBcFIsR0FDUG9XLEVBQUE1ZCxNQUFBLFdBQ0EsU0FBQTRkLEVBQUFqRSxPQUNBLE9BQUFtdUQsRUFBQWx2RCxHQUVBZ0YsRUFBQXpELE9BQUEsR0FNQSxHQUFBd3BELEVBQUFPLE9BQUEsTUFBQTE4RCxHQUFBb1csRUFBQTVkLE1BQUEsa0JBQ0E0WSxFQUFBc3JELE9BQUEsRUFDQVAsRUFBQUcsc0JBQUFsckQsRUFBQWtzRCxXQUFBLFNBQ0EsSUFBQThFLEVBQUE5QixFQUFBbHZELEdBRUEsT0FEQUEsRUFBQXNyRCxPQUFBLEVBQ0EwRixFQVdBLE1BUkEsTUFBQXBpRSxJQUNBb1csRUFBQTVkLE1BQUEsV0FDQTRZLEVBQUE2RyxnQkFDTzdHLEVBQUE2RyxnQkFDUDdHLEVBQUFrdUQsc0JBQUEsSUFJQWdCLEVBQUFsdkQsR0FHQSxTQUFBbXNELEVBQUFubkQsRUFBQWhGLEdBQ0EsSUFBQXBSLEVBQUFvVyxFQUFBL0QsT0FFQSxTQUFBclMsRUFBQSxDQUNBb1IsRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BQUFXLEVBQ0FqRCxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsUUFDQSxJQUFBNTNELEVBQUE0NkQsRUFBQWx2RCxHQU1BLE9BTEExTCxFQUNBQSxHQUFBLElBRUFBLEVBQUEsR0FFQUEsRUFBQW8zRCxFQUFBUyxXQUtBLE9BRkFubkQsRUFBQTVkLE1BQUEsYUFFQXNrRSxFQUFBUyxXQUdBLFNBQUFHLEVBQUF0bkQsRUFBQWhGLEdBRUEsR0FBQWdGLEVBQUE1RCxXQUNBLFlBRUEsSUFBQXhTLEVBQUFvVyxFQUFBL0QsT0FDQSxZQUFBclMsR0FBQSxNQUFBQSxHQUNBb1IsRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BYUEsU0FBQTRELEdBQ0EsZ0JBQUFqc0QsRUFBQWhGLEdBQ0EsSUFBQXBSLEVBQUFvVyxFQUFBL0QsT0FFQSxHQUFBclMsSUFBQXFpRSxFQUFBLENBQ0FqeEQsRUFBQTlVLEVBQUE4VSxFQUFBcXRELE9BQUFXLEVBQ0FqRCxFQUFBRyxzQkFBQWxyRCxFQUFBa3NELFdBQUEsZUFDQSxJQUFBZ0YsRUFBQWhDLEVBQUFsdkQsR0FFQSxPQURBQSxFQUFBc3NELFVBQUEsRUFDQTRFLEVBS0EsT0FGQWxzRCxFQUFBNWQsTUFBQStwRSxFQUFBRixJQUNBanhELEVBQUFzc0QsVUFBQSxFQUNBNEMsRUFBQWx2RCxJQTNCQW94RCxDQUFBLE1BQUF4aUUsRUFBQSxTQUNBbThELEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxlQUNBbHNELEVBQUFzc0QsVUFBQSxFQUNBNEMsRUFBQWx2RCxJQUVBLFFBR0EsSUFBQW14RCxHQUNBRSxJQUFBLG9EQUNBQyxJQUFBLHFEQXFCQSxTQUFBMUIsRUFBQTVxRCxFQUFBaEYsR0FDQSxPQUFBZ0YsRUFBQTVkLE1BQUEsMEJBQ0E0WSxFQUFBOVUsRUFBQXFtRSxFQUNBdnNELEVBQUEvRCxPQUNBOHBELEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxRQUNBbHNELEVBQUFxc0QsVUFBQSxFQUNBNkMsRUFBQWx2RCxJQUVBb3RELEVBQUFwb0QsRUFBQWhGLEVBQUFndUQsR0FHQSxTQUFBdUQsRUFBQXZzRCxFQUFBaEYsR0FDQSxHQUFBZ0YsRUFBQTVkLE1BQUEsWUFDQTRZLEVBQUE5VSxFQUFBOFUsRUFBQXF0RCxPQUFBbUUsRUFDQXpHLEVBQUFHLHNCQUFBbHJELEVBQUFrc0QsV0FBQSxRQUNBLElBQUE0RCxFQUFBWixFQUFBbHZELEdBRUEsT0FEQUEsRUFBQXFzRCxVQUFBLEVBQ0F5RCxFQUtBLE9BRkE5cUQsRUFBQTVkLE1BQUEsc0JBRUFza0UsRUFBQVcsU0FHQSxTQUFBbUYsRUFBQXhzRCxFQUFBaEYsR0FFQSxPQUFBZ0YsRUFBQTVELFdBQ0EsTUFHQTRELEVBQUE1ZCxNQUFBLG1CQUVBNFosSUFBQWdFLEVBQUFqRSxPQUNBZixFQUFBd3RELFdBQUEsRUFFQXhvRCxFQUFBNWQsTUFBQSwwRkFFQTRZLEVBQUE5VSxFQUFBOFUsRUFBQXF0RCxPQUFBVyxFQUNBdEMsRUFBQVksU0FBQSxRQUdBLElBQUEzbkUsR0FDQTBiLFdBQUEsV0FDQSxPQUNBblYsRUFBQStpRSxFQUVBRSxVQUFtQm5wRCxPQUFBLE1BQ25Cb3BELFVBQW1CcHBELE9BQUEsTUFFbkJ1b0QsTUFBQVUsRUFDQUwsVUFBQSxLQUNBbnNELFlBQUEsRUFFQTRyRCxPQUFBVyxFQUNBajlELEtBQUFzL0QsRUFFQW5FLFlBQUEsRUFDQUcsVUFBQSxFQUNBQyxVQUFBLEVBQ0FrQixXQUFBLEVBQ0E5MEQsS0FBQSxFQUNBNnpELElBQUEsRUFDQUMsUUFBQSxFQUNBYixPQUFBLEVBQ0F3RCxPQUFBLEVBQ0FwRCxJQUFBLEVBQ0FzRCxVQUFBLEVBQ0Eva0QsTUFBQSxFQUNBc2tELGFBQ0FsSSxNQUFBLEVBQ0E3L0MsY0FBQSxFQUNBcW5ELHNCQUFBLEVBQ0E3QyxlQUFBLEVBQ0FDLE9BQUEsRUFDQWdFLFlBQUEsT0FJQXZ2RCxVQUFBLFNBQUF4YSxHQUNBLE9BQ0EyRixFQUFBM0YsRUFBQTJGLEVBRUFpakUsU0FBQTVvRSxFQUFBNG9FLFNBQ0FDLFNBQUE3b0UsRUFBQTZvRSxTQUVBYixNQUFBaG9FLEVBQUFnb0UsTUFDQUssVUFBQXJvRSxFQUFBcW9FLFdBQUF2dkIsRUFBQXQrQixVQUFBaXJELEVBQUF6bEUsRUFBQXFvRSxXQUNBbnNELFlBQUFsYyxFQUFBa2MsWUFFQTh0RCxVQUFBaHFFLEVBQUFncUUsVUFDQUcsV0FBQW5xRSxFQUFBZ3FFLFVBQUFseEIsRUFBQXQrQixVQUFBeGEsRUFBQWdxRSxVQUFBaHFFLEVBQUFtcUUsWUFBQSxLQUVBckMsT0FBQTluRSxFQUFBOG5FLE9BQ0F0OEQsS0FBQXhMLEVBQUF3TCxLQUNBbTdELFlBQUEsRUFDQUcsU0FBQTltRSxFQUFBOG1FLFNBQ0FtQixVQUFBam9FLEVBQUFpb0UsVUFDQWxCLFNBQUEvbUUsRUFBQSttRSxTQUNBNXpELEtBQUFuVCxFQUFBbVQsS0FDQTZ6RCxHQUFBaG5FLEVBQUFnbkUsR0FDQUMsT0FBQWpuRSxFQUFBaW5FLE9BQ0FuQixjQUFBOWxFLEVBQUE4bEUsY0FDQUMsTUFBQS9sRSxFQUFBK2xFLE1BQ0FLLE9BQUFwbUUsRUFBQW9tRSxPQUNBd0QsT0FBQTVwRSxFQUFBNHBFLE9BQ0FwRCxHQUFBeG1FLEVBQUF3bUUsR0FDQXNELFNBQUE5cEUsRUFBQThwRSxTQUNBL2tELEtBQUEva0IsRUFBQStrQixLQUNBc2tELFVBQUFycEUsRUFBQXFwRSxVQUFBM21FLE1BQUEsR0FDQXkrRCxNQUFBbmhFLEVBQUFtaEUsTUFDQStHLGFBQUFsb0UsRUFBQWtvRSxhQUNBNW1ELGNBQUF0aEIsRUFBQXNoQixjQUNBcW5ELHFCQUFBM29FLEVBQUEyb0UscUJBQ0EyQixVQUFBdHFFLEVBQUFzcUUsVUFDQVAsWUFBQS9wRSxFQUFBK3BFLGNBSUFscUQsTUFBQSxTQUFBSixFQUFBaEYsR0FLQSxHQUZBQSxFQUFBa3NELFlBQUEsRUFFQWxuRCxHQUFBaEYsRUFBQW91RCxTQUFBcHBELE9BQUEsQ0FJQSxHQUhBaEYsRUFBQTJyRCxPQUFBLEVBQ0EzckQsRUFBQStyRCxJQUFBLEVBRUEvbUQsRUFBQTVkLE1BQUEsWUFFQSxPQURBK2QsRUFBQW5GLEdBQ0EsS0FhQSxHQVZBQSxFQUFBbXVELFNBQUFudUQsRUFBQW91RCxTQUNBcHVELEVBQUFvdUQsVUFBMEJwcEQsVUFHMUJoRixFQUFBcXZELFVBQUEsRUFHQXJ2RCxFQUFBNkcsY0FBQSxFQUNBN0csRUFBQWt1RCxzQkFBQSxHQUVBbHVELEVBQUEwdkQsYUFDQTF2RCxFQUFBOVUsRUFBQThVLEVBQUF1dEQsTUFDQXZ0RCxFQUFBOVUsR0FBQXdpRSxHQUFBLENBQ0EsSUFBQWpzRCxFQUFBdUQsRUFBQTVkLE1BQUEsY0FBQXVTLFFBQUEsTUEvdUJBLFFBK3VCQXhSLE9BR0EsR0FGQTZYLEVBQUF5QixjQUNBekIsRUFBQTh1RCxnQkFBQSxLQUNBcnRELEVBQUEsZUFJQSxPQUFBekIsRUFBQTlVLEVBQUE4WixFQUFBaEYsSUFHQUcsVUFBQSxTQUFBSCxHQUNBLE9BQUFBLEVBQUF1dEQsT0FBQUcsR0FBNEMxdEQsUUFBQTR0RCxVQUFBanBFLEtBQUFxbUUsR0FDNUNockQsRUFBQTB2RCxZQUFvQzF2RCxRQUFBMHZELFdBQUEvcUUsS0FBQXFiLEVBQUF1dkQsWUFDdEJ2dkQsUUFBQXJiLFNBR2RpeEQsT0FBQSxTQUFBNTFDLEVBQUF5eEQsRUFBQTVnRSxHQUNBLE9BQUFtUCxFQUFBdXRELE9BQUFHLEdBQUExQyxFQUFBcFYsT0FBQW9WLEVBQUFwVixPQUFBNTFDLEVBQUE0dEQsVUFBQTZELEVBQUE1Z0UsR0FDQW1QLEVBQUEwdkQsWUFBQTF2RCxFQUFBdXZELFVBQUEzWixPQUFBNTFDLEVBQUF1dkQsVUFBQTNaLE9BQUE1MUMsRUFBQTB2RCxXQUFBK0IsRUFBQTVnRSxHQUNBd3RDLEVBQUFyeEMsTUFHQW1ZLFlBRUErcEQsVUFFQXdDLGtCQUFBLFVBQ0FDLGdCQUFBLFNBQ0FDLGNBQUEsaUJBQ0FDLEtBQUEsWUFFQSxPQUFBbHRFLEdBQ0MsT0FFRDA1QyxFQUFBMmxCLFdBQUEsNEJBRUEzbEIsRUFBQTJsQixXQUFBLDhCQTUyQkFyaEIsQ0FBUXIvQyxFQUFRLEdBQXlCQSxFQUFRLElBQWVBLEVBQVEsdUJDY3ZFLFNBQUErNkMsR0FDRCxhQUVBQSxFQUFBeXpCLFlBQUEsU0FBQXZqRSxFQUFBMFUsRUFBQTh1RCxHQUNBLE9BQ0ExeEQsV0FBQSxXQUNBLE9BQ0E5UixLQUFBOHZDLEVBQUFoK0IsV0FBQTlSLEdBQ0EwVSxRQUFBbzdCLEVBQUFoK0IsV0FBQTRDLEdBQ0ErdUQsUUFBQSxFQUFBQyxRQUFBLEtBQ0FDLFdBQUEsRUFBQUMsV0FBQSxLQUNBQyxXQUFBLE9BR0FyeUQsVUFBQSxTQUFBQyxHQUNBLE9BQ0F6UixLQUFBOHZDLEVBQUF0K0IsVUFBQXhSLEVBQUF5UixFQUFBelIsTUFDQTBVLFFBQUFvN0IsRUFBQXQrQixVQUFBa0QsRUFBQWpELEVBQUFpRCxTQUNBK3VELFFBQUFoeUQsRUFBQWd5RCxRQUFBQyxRQUFBLEtBQ0FDLFdBQUFseUQsRUFBQWt5RCxXQUFBQyxXQUFBLE9BSUEvc0QsTUFBQSxTQUFBSixFQUFBaEYsR0FvQkEsT0FuQkFnRixHQUFBaEYsRUFBQW95RCxZQUNBeGtFLEtBQUFDLElBQUFtUyxFQUFBZ3lELFFBQUFoeUQsRUFBQWt5RCxZQUFBbHRELEVBQUExYSxTQUNBMFYsRUFBQW95RCxXQUFBcHRELEVBQ0FoRixFQUFBZ3lELFFBQUFoeUQsRUFBQWt5RCxXQUFBbHRELEVBQUExYSxPQUdBMGEsRUFBQTFhLE9BQUEwVixFQUFBZ3lELFVBQ0FoeUQsRUFBQWl5RCxRQUFBMWpFLEVBQUE2VyxNQUFBSixFQUFBaEYsRUFBQXpSLE1BQ0F5UixFQUFBZ3lELFFBQUFodEQsRUFBQXZYLEtBRUF1WCxFQUFBMWEsT0FBQTBWLEVBQUFreUQsYUFDQWx0RCxFQUFBdlgsSUFBQXVYLEVBQUExYSxNQUNBMFYsRUFBQW15RCxXQUFBbHZELEVBQUFtQyxNQUFBSixFQUFBaEYsRUFBQWlELFNBQ0FqRCxFQUFBa3lELFdBQUFsdEQsRUFBQXZYLEtBRUF1WCxFQUFBdlgsSUFBQUcsS0FBQUMsSUFBQW1TLEVBQUFneUQsUUFBQWh5RCxFQUFBa3lELFlBSUEsTUFBQWx5RCxFQUFBbXlELFdBQUFueUQsRUFBQWl5RCxRQUNBLE1BQUFqeUQsRUFBQWl5RCxTQUNBanlELEVBQUFpRCxRQUFBb3ZELGVBQ0FOLEdBQUEsTUFBQS94RCxFQUFBaUQsUUFBQW92RCxjQUNBcnlELEVBQUFpeUQsUUFBQSxJQUFBanlELEVBQUFteUQsV0FDQW55RCxFQUFBbXlELFlBR0F2YyxPQUFBcm5ELEVBQUFxbkQsUUFBQSxTQUFBNTFDLEVBQUF5eEQsR0FDQSxPQUFBbGpFLEVBQUFxbkQsT0FBQTUxQyxFQUFBelIsS0FBQWtqRSxJQUVBcGEsY0FBQTlvRCxFQUFBOG9ELGNBRUFsM0MsVUFBQSxTQUFBSCxHQUFnQyxPQUFTQSxRQUFBelIsS0FBQTVKLEtBQUE0SixJQUV6QzRXLFVBQUEsU0FBQW5GLEdBQ0EsSUFBQW1DLEVBQUFtd0QsRUFJQSxPQUhBL2pFLEVBQUE0VyxZQUFBaEQsRUFBQTVULEVBQUE0VyxVQUFBbkYsRUFBQXpSLE9BQ0EwVSxFQUFBa0MsWUFBQW10RCxFQUFBcnZELEVBQUFrQyxVQUFBbkYsRUFBQWlELFVBRUEsTUFBQXF2RCxFQUNBbndELEVBQ0E0dkQsR0FBQSxNQUFBNXZELElBQUEsSUFBQW13RCxPQXRFQTN2QixDQUFRci9DLEVBQVEsc0JDSmYsU0FBQSs2QyxHQUNELGFBRUEsSUFBQW5zQyxFQUFBbXNDLEVBQUFuc0MsSUFDQSxTQUFBRSxFQUFBbkksRUFBQUMsR0FBc0IsT0FBQUQsRUFBQTRHLEtBQUEzRyxFQUFBMkcsTUFBQTVHLEVBQUEyRSxHQUFBMUUsRUFBQTBFLEdBRXRCLElBQUEyakUsRUFBQSwrS0FFQUMsRUFBQSxJQUFBOXFFLE9BQUEsVUFBQTZxRSxFQUFBLEtBREFBLEVBQUEsaURBQ0EsS0FFQSxTQUFBRSxFQUFBMzZELEVBQUFqSCxFQUFBakMsRUFBQWpILEdBQ0E2RSxLQUFBcUUsT0FBcUJyRSxLQUFBb0MsS0FDckJwQyxLQUFBc0wsS0FBaUJ0TCxLQUFBdUUsS0FBQStHLEVBQUE1SCxRQUFBVyxHQUNqQnJFLEtBQUFxQixJQUFBbEcsRUFBQWlHLEtBQUErRSxJQUFBaEwsRUFBQWlJLEtBQUFrSSxFQUFBdzFCLGFBQUF4MUIsRUFBQXcxQixZQUNBOWdDLEtBQUFtRyxJQUFBaEwsRUFBQWlHLEtBQUFDLElBQUFsRyxFQUFBa0ksR0FBQSxFQUFBaUksRUFBQVQsWUFBQVMsRUFBQVQsV0FHQSxTQUFBcTdELEVBQUE1aEUsRUFBQWxDLEdBQ0EsSUFBQTBGLEVBQUF4RCxFQUFBZ0gsR0FBQTJwRCxlQUFBdnZELEVBQUFwQixFQUFBRCxLQUFBakMsSUFDQSxPQUFBMEYsR0FBQSxVQUFBMU8sS0FBQTBPLEdBR0EsU0FBQXdRLEVBQUFoVSxHQUNBLEtBQUFBLEVBQUFELE1BQUFDLEVBQUE2QixLQUdBLE9BRkE3QixFQUFBbEMsR0FBQSxFQUNBa0MsRUFBQUMsS0FBQUQsRUFBQWdILEdBQUE1SCxVQUFBWSxFQUFBRCxPQUNBLEVBRUEsU0FBQXM5RCxFQUFBcjlELEdBQ0EsS0FBQUEsRUFBQUQsTUFBQUMsRUFBQWpELEtBR0EsT0FGQWlELEVBQUFDLEtBQUFELEVBQUFnSCxHQUFBNUgsVUFBQVksRUFBQUQsTUFDQUMsRUFBQWxDLEdBQUFrQyxFQUFBQyxLQUFBNUksUUFDQSxFQUdBLFNBQUF3cUUsRUFBQTdoRSxHQUNBLE9BQVcsQ0FDWCxJQUFBOGhFLEVBQUE5aEUsRUFBQUMsS0FBQTVFLFFBQUEsSUFBQTJFLEVBQUFsQyxJQUNBLE9BQUFna0UsRUFBQSxDQUFxQixHQUFBOXRELEVBQUFoVSxHQUFBLFNBQThCLE9BQ25ELEdBQUE0aEUsRUFBQTVoRSxFQUFBOGhFLEVBQUEsSUFDQSxJQUFBQyxFQUFBL2hFLEVBQUFDLEtBQUEraEUsWUFBQSxJQUFBRixHQUNBRyxFQUFBRixHQUFBLFNBQUFqdEUsS0FBQWtMLEVBQUFDLEtBQUE5SSxNQUFBNHFFLEVBQUEsRUFBQUQsSUFFQSxPQURBOWhFLEVBQUFsQyxHQUFBZ2tFLEVBQUEsRUFDQUcsRUFBQSxzQkFKaUNqaUUsRUFBQWxDLEdBQUFna0UsRUFBQSxHQU9qQyxTQUFBSSxFQUFBbGlFLEdBQ0EsT0FBVyxDQUNYLElBQUFtaUUsRUFBQW5pRSxFQUFBbEMsR0FBQWtDLEVBQUFDLEtBQUEraEUsWUFBQSxJQUFBaGlFLEVBQUFsQyxHQUFBLE1BQ0EsT0FBQXFrRSxFQUFBLENBQXFCLEdBQUE5RSxFQUFBcjlELEdBQUEsU0FBOEIsT0FDbkQsR0FBQTRoRSxFQUFBNWhFLEVBQUFtaUUsRUFBQSxJQUNBVCxFQUFBanFELFVBQUEwcUQsRUFDQW5pRSxFQUFBbEMsR0FBQXFrRSxFQUNBLElBQUE3ckUsRUFBQW9yRSxFQUFBenNFLEtBQUErSyxFQUFBQyxNQUNBLEdBQUEzSixLQUFBYyxPQUFBK3FFLEVBQUEsT0FBQTdyRSxPQUppQzBKLEVBQUFsQyxHQUFBcWtFLEdBUWpDLFNBQUFDLEVBQUFwaUUsR0FDQSxPQUFXLENBQ1gwaEUsRUFBQWpxRCxVQUFBelgsRUFBQWxDLEdBQ0EsSUFBQWtHLEVBQUEwOUQsRUFBQXpzRSxLQUFBK0ssRUFBQUMsTUFDQSxJQUFBK0QsRUFBQSxDQUFtQixHQUFBZ1EsRUFBQWhVLEdBQUEsU0FBOEIsT0FDakQsR0FBQTRoRSxFQUFBNWhFLEVBQUFnRSxFQUFBNU0sTUFBQSxHQUVBLE9BREE0SSxFQUFBbEMsR0FBQWtHLEVBQUE1TSxNQUFBNE0sRUFBQSxHQUFBM00sT0FDQTJNLEVBRjBDaEUsRUFBQWxDLEdBQUFrRyxFQUFBNU0sTUFBQSxHQUsxQyxTQUFBaXJFLEVBQUFyaUUsR0FDQSxPQUFXLENBQ1gsSUFBQThoRSxFQUFBOWhFLEVBQUFsQyxHQUFBa0MsRUFBQUMsS0FBQStoRSxZQUFBLElBQUFoaUUsRUFBQWxDLEdBQUEsTUFDQSxPQUFBZ2tFLEVBQUEsQ0FBcUIsR0FBQXpFLEVBQUFyOUQsR0FBQSxTQUE4QixPQUNuRCxHQUFBNGhFLEVBQUE1aEUsRUFBQThoRSxFQUFBLElBQ0EsSUFBQUMsRUFBQS9oRSxFQUFBQyxLQUFBK2hFLFlBQUEsSUFBQUYsR0FDQUcsRUFBQUYsR0FBQSxTQUFBanRFLEtBQUFrTCxFQUFBQyxLQUFBOUksTUFBQTRxRSxFQUFBLEVBQUFELElBRUEsT0FEQTloRSxFQUFBbEMsR0FBQWdrRSxFQUFBLEVBQ0FHLEVBQUEsc0JBSmlDamlFLEVBQUFsQyxHQUFBZ2tFLEdBUWpDLFNBQUFRLEVBQUF0aUUsRUFBQWhJLEdBRUEsSUFEQSxJQUFBdXFFLE9BQ1csQ0FDWCxJQUFBOW9FLEVBQUEwVyxFQUFBaXlELEVBQUFwaUUsR0FBQXdpRSxFQUFBeGlFLEVBQUFELEtBQUFrRCxFQUFBakQsRUFBQWxDLElBQUFxUyxJQUFBLEdBQUE5WSxPQUFBLEdBQ0EsSUFBQThZLEtBQUExVyxFQUFBb29FLEVBQUE3aEUsSUFBQSxPQUNBLGdCQUFBdkcsRUFDQSxHQUFBMFcsRUFBQSxJQUNBLFFBQUF6ZCxFQUFBNnZFLEVBQUFsckUsT0FBQSxFQUFzQzNFLEdBQUEsSUFBUUEsRUFBQSxHQUFBNnZFLEVBQUE3dkUsSUFBQXlkLEVBQUEsSUFDOUNveUQsRUFBQWxyRSxPQUFBM0UsRUFDQSxNQUVBLEdBQUFBLEVBQUEsS0FBQXNGLE1BQUFtWSxFQUFBLFdBQ0FuWSxJQUFBbVksRUFBQSxHQUNBclIsS0FBQXNDLEVBQUFvaEUsRUFBQXYvRCxHQUNBbEUsR0FBQXFDLEVBQUFwQixFQUFBRCxLQUFBQyxFQUFBbEMsVUFHQXlrRSxFQUFBcmxFLEtBQUFpVCxFQUFBLEtBSUEsU0FBQXN5RCxFQUFBemlFLEVBQUFoSSxHQUVBLElBREEsSUFBQXVxRSxPQUNXLENBQ1gsSUFBQWg2RCxFQUFBODVELEVBQUFyaUUsR0FDQSxJQUFBdUksRUFBQSxPQUNBLGdCQUFBQSxFQUFBLENBQ0EsSUFBQW02RCxFQUFBMWlFLEVBQUFELEtBQUFtRCxFQUFBbEQsRUFBQWxDLEdBQ0F0RSxFQUFBMG9FLEVBQUFsaUUsR0FDQSxJQUFBeEcsRUFBQSxPQUNBLEdBQUFBLEVBQUEsR0FDQStvRSxFQUFBcmxFLEtBQUExRCxFQUFBLFFBQ08sQ0FDUCxRQUFBOUcsRUFBQTZ2RSxFQUFBbHJFLE9BQUEsRUFBc0MzRSxHQUFBLElBQVFBLEVBQUEsR0FBQTZ2RSxFQUFBN3ZFLElBQUE4RyxFQUFBLElBQzlDK29FLEVBQUFsckUsT0FBQTNFLEVBQ0EsTUFFQSxHQUFBQSxFQUFBLEtBQUFzRixNQUFBd0IsRUFBQSxXQUNBeEIsSUFBQXdCLEVBQUEsR0FDQXNGLEtBQUFzQyxFQUFBcEIsRUFBQUQsS0FBQUMsRUFBQWxDLElBQ0FpQixHQUFBcUMsRUFBQXNoRSxFQUFBeC9ELFVBZGdDZy9ELEVBQUFsaUUsSUFvQmhDdXRDLEVBQUFrbEIsZUFBQSxzQkFBQXpyRCxFQUFBeE4sR0FFQSxJQURBLElBQUF3RyxFQUFBLElBQUEyaEUsRUFBQTM2RCxFQUFBeE4sRUFBQXVHLEtBQUEsS0FDVyxDQUNYLElBQUE0aUUsRUFBQVAsRUFBQXBpRSxHQUNBLElBQUEyaUUsR0FBQTNpRSxFQUFBRCxNQUFBdkcsRUFBQXVHLEtBQUEsT0FDQSxJQUFBdEcsRUFBQW9vRSxFQUFBN2hFLEdBQ0EsSUFBQXZHLEVBQUEsT0FDQSxJQUFBa3BFLEVBQUEsaUJBQUFscEUsRUFBQSxDQUNBLElBQUFtcEUsRUFBQXhoRSxFQUFBcEIsRUFBQUQsS0FBQUMsRUFBQWxDLElBQ0Era0UsRUFBQVAsRUFBQXRpRSxFQUFBMmlFLEVBQUEsSUFDQSxPQUFBRSxHQUFBdmhFLEVBQUF1aEUsRUFBQS9qRSxLQUFBOGpFLEdBQUEsR0FBMkQ5akUsS0FBQThqRSxFQUFBN2pFLEdBQUE4akUsRUFBQS9qRSxNQUFnQyxTQUkzRnl1QyxFQUFBdTFCLGdCQUFBLFNBQUE5N0QsRUFBQXJLLEVBQUE5RixHQUNBLElBQUFtSixFQUFBLElBQUEyaEUsRUFBQTM2RCxFQUFBckssRUFBQW9ELEtBQUFwRCxFQUFBbUIsR0FBQWpILEdBQ0EsT0FBQW1KLEVBQUFDLEtBQUE1RSxRQUFBLFVBQUEyRSxFQUFBQyxLQUFBNUUsUUFBQSxNQUNBLElBQUE1QixFQUFBb29FLEVBQUE3aEUsR0FBQWpCLEVBQUF0RixHQUFBMkgsRUFBQXBCLEVBQUFELEtBQUFDLEVBQUFsQyxJQUNBdEUsRUFBQUMsR0FBQXlvRSxFQUFBbGlFLEdBQ0EsR0FBQXZHLEdBQUFELEtBQUE4SCxFQUFBdEIsRUFBQXJELEdBQUEsSUFDQSxJQUFBcStCLEdBQWdCbDhCLEtBQUFzQyxFQUFBcEIsRUFBQUQsS0FBQUMsRUFBQWxDLElBQUFpQixLQUFBL0csSUFBQXdCLEVBQUEsSUFDaEIsbUJBQUFDLEdBQW9DdzlELEtBQUFqOEIsRUFBQTZ3QixNQUFBLEtBQUFyaUQsR0FBQSxRQUVwQ2hRLEVBQUEsSUFDY3k5RCxLQUFBd0wsRUFBQXppRSxFQUFBeEcsRUFBQSxJQUFBcXlELE1BQUE3d0IsRUFBQXh4QixHQUFBLFVBRWR4SixFQUFBLElBQUEyaEUsRUFBQTM2RCxFQUFBakksRUFBQWdCLEtBQUFoQixFQUFBakIsR0FBQWpILElBQ2NvZ0UsS0FBQWo4QixFQUFBNndCLE1BQUF5VyxFQUFBdGlFLEVBQUF4RyxFQUFBLElBQUFnUSxHQUFBLFlBSWQrakMsRUFBQXcxQixpQkFBQSxTQUFBLzdELEVBQUFySyxFQUFBOUYsRUFBQW1CLEdBRUEsSUFEQSxJQUFBZ0ksRUFBQSxJQUFBMmhFLEVBQUEzNkQsRUFBQXJLLEVBQUFvRCxLQUFBcEQsRUFBQW1CLEdBQUFqSCxLQUNXLENBQ1gsSUFBQW9nRSxFQUFBd0wsRUFBQXppRSxFQUFBaEksR0FDQSxJQUFBaS9ELEVBQUEsTUFDQSxJQUFBK0wsRUFBQSxJQUFBckIsRUFBQTM2RCxFQUFBckssRUFBQW9ELEtBQUFwRCxFQUFBbUIsR0FBQWpILEdBQ0FnMUQsRUFBQXlXLEVBQUFVLEVBQUEvTCxFQUFBai9ELEtBQ0EsR0FBQTZ6RCxFQUFBLE9BQXlCb0wsT0FBQXBMLFdBS3pCdGUsRUFBQTAxQixrQkFBQSxTQUFBajhELEVBQUFySyxFQUFBMUosRUFBQXdHLEdBQ0EsSUFBQXVHLEVBQUEsSUFBQTJoRSxFQUFBMzZELEVBQUFySyxFQUFBb0QsS0FBQXBELEVBQUFtQixHQUFBckUsR0FBcURxRixLQUFBLEVBQUFDLEdBQUF0RixHQUFpQixNQUN0RSxPQUFBNm9FLEVBQUF0aUUsRUFBQS9NLElBaExBNCtDLENBQVFyL0MsRUFBUSxzQkNLZixTQUFBKzZDLEdBQ0QsYUFFQSxTQUFBMjFCLEVBQUFsOEQsRUFBQXJLLEVBQUFxRSxFQUFBaTJCLEdBQ0EsR0FBQWoyQixLQUFBbk8sS0FBQSxDQUNBLElBQUFzd0UsRUFBQW5pRSxFQUNBQSxFQUFBLFVBRUEsSUFBQW1pRSxFQUFBbHRELEVBQUFqUCxFQUFBaEcsRUFBQSxlQUVBLGlCQUFBckUsTUFBQTR3QyxFQUFBbnNDLElBQUF6RSxFQUFBLElBQ0EsSUFBQXltRSxFQUFBbnRELEVBQUFqUCxFQUFBaEcsRUFBQSxlQUVBLFNBQUE4bUMsRUFBQXU3QixHQUNBLElBQUF4c0UsRUFBQXNzRSxFQUFBbjhELEVBQUFySyxHQUNBLElBQUE5RixLQUFBa0ksR0FBQWdCLEtBQUFsSixFQUFBaUksS0FBQWlCLEtBQUFxakUsRUFBQSxZQUVBLElBREEsSUFBQUUsRUFBQXQ4RCxFQUFBNGpDLFlBQUEvekMsRUFBQWlJLE1BQ0FwTSxFQUFBLEVBQXFCQSxFQUFBNHdFLEVBQUFqc0UsU0FBa0IzRSxFQUN2QyxHQUFBNHdFLEVBQUE1d0UsR0FBQTZ3RSxVQUFBLFNBQUF0c0MsRUFBQSxDQUNBLElBQUFvc0MsRUFBQSxZQUNBeHNFLEVBQUEyc0UsU0FBQSxFQUNBRixFQUFBNXdFLEdBQUE0OUIsUUFHQSxPQUFBejVCLEVBR0EsSUFBQUEsRUFBQWl4QyxHQUFBLEdBQ0EsR0FBQTd4QixFQUFBalAsRUFBQWhHLEVBQUEsZ0JBQUFuSyxHQUFBOEYsRUFBQW9ELEtBQUFpSCxFQUFBdzFCLGFBQ0E3L0IsRUFBQTR3QyxFQUFBbnNDLElBQUF6RSxFQUFBb0QsS0FBQSxLQUNBbEosRUFBQWl4QyxHQUFBLEdBRUEsR0FBQWp4QyxNQUFBMnNFLFNBQUEsV0FBQXZzQyxFQUFBLENBRUEsSUFBQXdzQyxFQWdCQSxTQUFBejhELEVBQUFoRyxHQUNBLElBQUFpWCxFQUFBaEMsRUFBQWpQLEVBQUFoRyxFQUFBLFVBQ0Esb0JBQUFpWCxFQUFBLENBQ0EsSUFBQWhZLEVBQUE1SyxTQUFBZ0QsZUFBQTRmLElBQ0FBLEVBQUE1aUIsU0FBQThDLGNBQUEsU0FDQUwsWUFBQW1JLEdBQ0FnWSxFQUFBaGhCLFVBQUEsNkJBQ0tnaEIsSUFDTEEsSUFBQW11QixXQUFBLElBRUEsT0FBQW51QixFQTFCQXlyRCxDQUFBMThELEVBQUFoRyxHQUNBdXNDLEVBQUF4akMsR0FBQTA1RCxFQUFBLHFCQUFBbHNFLEdBQ0Fvc0UsRUFBQXJ6QyxRQUNBaWQsRUFBQTloQyxpQkFBQWxVLEtBRUEsSUFBQW9zRSxFQUFBMzhELEVBQUFtL0IsU0FBQXR2QyxFQUFBaUksS0FBQWpJLEVBQUFrSSxJQUNBeW5DLGFBQUFpOUIsRUFDQTc4QixhQUFBM3dCLEVBQUFqUCxFQUFBaEcsRUFBQSxnQkFDQXVpRSxVQUFBLElBRUFJLEVBQUE1NUQsR0FBQSxpQkFBQWpMLEVBQUFDLEdBQ0F3dUMsRUFBQTdpQyxPQUFBMUQsRUFBQSxTQUFBQSxFQUFBbEksRUFBQUMsS0FFQXd1QyxFQUFBN2lDLE9BQUExRCxFQUFBLE9BQUFBLEVBQUFuUSxFQUFBaUksS0FBQWpJLEVBQUFrSSxLQWlCQXd1QyxFQUFBcTJCLGdCQUFBLFNBQUFDLEVBQUE1ckQsR0FDQSxnQkFBQWpSLEVBQUFySyxHQUE4QnVtRSxFQUFBbDhELEVBQUFySyxHQUFrQmtuRSxjQUFBNXJELGFBSWhEczFCLEVBQUE2bEIsZ0JBQUEsb0JBQUF6MkQsRUFBQXFFLEVBQUFpMkIsR0FDQWlzQyxFQUFBeG5FLEtBQUFpQixFQUFBcUUsRUFBQWkyQixLQUdBc1csRUFBQTZsQixnQkFBQSxvQkFBQXoyRCxHQUVBLElBREEsSUFBQTJtRSxFQUFBNW5FLEtBQUFrdkMsWUFBQWp1QyxHQUNBakssRUFBQSxFQUFtQkEsRUFBQTR3RSxFQUFBanNFLFNBQWtCM0UsRUFDckMsR0FBQTR3RSxFQUFBNXdFLEdBQUE2d0UsU0FBQSxXQUdBaDJCLEVBQUF1TCxTQUFBZ3JCLFdBQUEsU0FBQTk4RCxHQUNBQSxFQUFBKzhELFNBQUEvOEQsRUFBQXdtQixjQUVBK2YsRUFBQXVMLFNBQUFpb0IsS0FBQSxTQUFBLzVELEdBQ0FBLEVBQUErOEQsU0FBQS84RCxFQUFBd21CLFlBQUEsY0FFQStmLEVBQUF1TCxTQUFBa3JCLE9BQUEsU0FBQWg5RCxHQUNBQSxFQUFBKzhELFNBQUEvOEQsRUFBQXdtQixZQUFBLGdCQUVBK2YsRUFBQXVMLFNBQUFtckIsUUFBQSxTQUFBajlELEdBQ0FBLEVBQUFvdUIsVUFBQSxXQUNBLFFBQUExaUMsRUFBQXNVLEVBQUF3MUIsWUFBQWpsQyxFQUFBeVAsRUFBQVQsV0FBcUQ3VCxHQUFBNkUsRUFBUTdFLElBQzdEc1UsRUFBQSs4RCxTQUFBeDJCLEVBQUFuc0MsSUFBQTFPLEVBQUEsbUJBR0E2NkMsRUFBQXVMLFNBQUFvckIsVUFBQSxTQUFBbDlELEdBQ0FBLEVBQUFvdUIsVUFBQSxXQUNBLFFBQUExaUMsRUFBQXNVLEVBQUF3MUIsWUFBQWpsQyxFQUFBeVAsRUFBQVQsV0FBcUQ3VCxHQUFBNkUsRUFBUTdFLElBQzdEc1UsRUFBQSs4RCxTQUFBeDJCLEVBQUFuc0MsSUFBQTFPLEVBQUEscUJBSUE2NkMsRUFBQWtsQixlQUFBLDRCQUNBLElBQUFyUSxFQUFBOW5ELE1BQUFoRyxVQUFBNkMsTUFBQXRFLEtBQUEwSCxVQUFBLEdBQ0EsZ0JBQUF5TSxFQUFBeE4sR0FDQSxRQUFBOUcsRUFBQSxFQUFxQkEsRUFBQTB2RCxFQUFBL3FELFNBQWtCM0UsRUFBQSxDQUN2QyxJQUFBc1IsRUFBQW8rQyxFQUFBMXZELEdBQUFzVSxFQUFBeE4sR0FDQSxHQUFBd0ssRUFBQSxPQUFBQSxNQUtBdXBDLEVBQUFrbEIsZUFBQSx1QkFBQXpyRCxFQUFBeE4sR0FFQSxJQURBLElBQUFxMkQsRUFBQTdvRCxFQUFBNHBELFdBQUFwM0QsRUFBQSxRQUNBOUcsRUFBQSxFQUFtQkEsRUFBQW05RCxFQUFBeDRELE9BQW9CM0UsSUFBQSxDQUN2QyxJQUFBNk4sRUFBQXN2RCxFQUFBbjlELEdBQUFzVSxFQUFBeE4sR0FDQSxHQUFBK0csRUFBQSxPQUFBQSxLQUlBLElBQUE0akUsR0FDQU4sWUFBQXQyQixFQUFBd3pCLEtBQUFxRCxLQUNBbnNELE9BQUEsSUFDQW9zRCxZQUFBLEVBQ0FDLFFBQUEsRUFDQTE5QixjQUFBLEdBS0EsU0FBQTN3QixFQUFBalAsRUFBQWhHLEVBQUEvTixHQUNBLEdBQUErTixRQUFBa1AsSUFBQWxQLEVBQUEvTixHQUNBLE9BQUErTixFQUFBL04sR0FDQSxJQUFBc3hFLEVBQUF2OUQsRUFBQWhHLFFBQUF3akUsWUFDQSxPQUFBRCxRQUFBcjBELElBQUFxMEQsRUFBQXR4RSxHQUNBc3hFLEVBQUF0eEUsR0FDQWt4RSxFQUFBbHhFLEdBUkFzNkMsRUFBQThoQixhQUFBLG9CQVdBOWhCLEVBQUE2bEIsZ0JBQUEsc0JBQUFweUQsRUFBQS9OLEdBQ0EsT0FBQWdqQixFQUFBdmEsS0FBQXNGLEVBQUEvTixLQWhKQTQrQyxDQUFRci9DLEVBQVEsb0JDTGhCLFNBQUFpeUUsR0FDQXR5RSxFQUFBRCxRQUFBdXlFLDJmQ0FBanlFLEVBQUEsU0FDQUEsRUFBQSxJQUdBQSxFQUFBLElBRUEsUUFBQUEsRUFBQSxRQUdBQSxFQUFBLFFBR0FBLEVBQUEsSUFDQUEsRUFBQSxHQUNBQSxFQUFBLElBQ0FBLEVBQUEsSUFFQUEsRUFBQSxHQUNBQSxFQUFBLElBQ0FBLEVBQUEsSUFDQUEsRUFBQSxJQUNBQSxFQUFBLElBQ0FBLEVBQUEsSUFDQUEsRUFBQSxJQUNBQSxFQUFBLEdBQ0FBLEVBQUEsR0FDQUEsRUFBQSxJQUNBQSxFQUFBLElBQ0FBLEVBQUEsSUFDQUEsRUFBQSxJQUNBQSxFQUFBLElBR0FBLEVBQUEsSUFFQUEsRUFBQSxJQUlBLFFBQUFBLEVBQUEsU0FJQUEsRUFBQSx3REFDQUEsRUFBQSxLQUtBLElBaUNNa3lFLGFBQ0osU0FBQUEsSUFBMEIsSUFBZDFqRSxFQUFjekcsVUFBQWxELE9BQUEsUUFBQTZZLElBQUEzVixVQUFBLEdBQUFBLFVBQUEsbUdBQUFvcUUsQ0FBQWpwRSxLQUFBZ3BFLEdBRXhCMWpFLEVBQVFrMEQsT0FBU3g1RCxLQUVqQkEsS0FBS29uRCxLQUFLOWhELDBDQVNQQSxHQUFTLElBQUE0akUsRUFBQWxwRSxLQUNaQSxLQUFLbXBFLFNBQVM3akUsR0FDWDhqRSxLQUFLLFdBQ0pGLEVBQUtHLFNBQVMvakUsc0NBd0ZYQSxHQUFTLElBQUFna0UsRUFBQXRwRSxLQUNoQixPQUFPLElBQUl1cEUsUUFBUSxTQUFDQyxFQUFTQyxHQUMzQkgsRUFBS0ksV0FBV3BrRSxHQUNoQmdrRSxFQUFLSyxtQkFDTEgsdUNBTUtsa0UsR0FDUCxJQUFNK3pELEVBQU9yNUQsS0FDYkEsS0FBSzRwRSxpQkFDTDVwRSxLQUFLdkQsY0FBYzZJLEdBQ2hCOGpFLEtBQUssV0FDSi9QLEVBQUt3USxZQUNMeFEsRUFBS3lRLHFCQUNMelEsRUFBSzBRLG1CQUNMMVEsRUFBSzJRLDJEQVFUaHFFLEtBQUtpcUUsa0JBQ0xqcUUsS0FBS2txRSxvREFFSTVrRSxHQUNUdEYsS0FBSzQ1RCxTQUFXdDBELEVBQ2hCdEYsS0FBSzQ1RCxTQUFTQyxPQUFTQSxVQUN2Qjc1RCxLQUFLNDVELFNBQVN5RSxLQUFNdEYsVUFBT1MsT0FBTzRFLGtEQVFsQyxJQUQwQnArRCxLQUFLbXFFLG9CQUMvQixDQUdBLElBQU1DLEVBQVF6d0UsU0FBUzhDLGNBQWMsUUFDckMydEUsRUFBTXZ0RSxhQUFhLGVBQWUsR0FDbEN1dEUsRUFBTXZvQyxJQUFNLGFBQ1p1b0MsRUFBTUMsS0FBT3RSLFVBQU9nRixTQUNwQnBrRSxTQUFTMndFLHFCQUFxQixRQUFRLEdBQUdsdUUsWUFBWWd1RSxnREFRckQsUUFGY3p3RSxTQUFTdWhCLGNBQWMsMkRBT3pCNVYsR0FDWixPQUFPLElBQUlpa0UsUUFBUSxTQUFDQyxFQUFTQyxHQUMzQmMsVUFBVW5qQixLQUFLOWhELEdBQVM4akUsS0FBSyxXQUMzQkksaURBV0osSUFBTW5RLEVBQU9yNUQsS0FDUHdxRSxFQUFXeHFFLEtBQUs0NUQsU0FBU0MsT0FDekI2QixFQUFXMTdELEtBQUs0NUQsU0FBUytCLEdBQ3ZCbkIsRUFBMEJnUSxFQUExQmhRLHNCQUNGaVEsRUFBVzlSLFVBQUsyRSxRQUFROUMsR0FFMUJpUSxFQUFTOXVFLE9BQVMsR0FDcEI4dUUsRUFBUy9NLFFBQVEsU0FBQUMsR0FDZixJQUFNcGlFLEVBQVksSUFBTW9pRSxFQUFBLFVBQ2xCK00sRUFBVy9NLEVBQUEsT0FDWEMsRUFBYWpGLFVBQUtpRixXQUFXOE0sR0FFbkMsR0FBa0IsS0FBZG52RSxHQUFvQnFpRSxFQUFZLENBQ2xDLElBQU0rTSxFQUFTalAsRUFBU3hnRCxjQUFjLGlCQUFpQkEsY0FBYzNmLEdBQ2pFb3ZFLElBQ0ZBLEVBQU9sUixRQUFVSixFQUVqQnNSLEVBQU9wOEQsaUJBQWlCLFFBQVNtOEQsR0FBVSx1REFZN0IvTyxFQUFJbUMsR0FDMUIsT0FBTzhNLFVBQVcvUyxhQUFhOEQsRUFBSW1DLGdEQUduQjk5RCxLQUFLNDVELFNBQXJCLElBR0lpUixFQUFrQjdxRSxLQUFLNDVELFNBQVMrQixHQUFHemdELGNBQWMsU0ErRHJEbGIsS0FBSzA1RCxZQUFjMTVELEtBQUs4cUUsd0JBQXdCRCxHQWhEOUMxeUUsTUFDRVosS0FBTSxNQUNOMG5FLG9CQUNFSCxNQUFPLFVBSVhsL0MsYUFBYSxFQUVibXJELGVBQWUsRUFFZnhoQixXQUFZLEVBRVpybEMsY0FBYyxFQUVkOG1ELGlCQUFpQixFQUVqQjdrQixNQUFPLGNBRVA4a0IsbUJBQW1CLEVBRW5CQyxlQUFlLEVBRWZDLFlBQVksRUFDWmpyRCxTQUFVLHlCQUEwQiwyQkEyQnRDbGdCLEtBQUswNUQsWUFBWUQsUUFBVXo1RCxLQUUzQkEsS0FBS29yRSxvRUFHTHByRSxLQUFLcXJFLDRCQUNMcnJFLEtBQUtzckUsb0NBQ0x0ckUsS0FBS3VyRSxvRUFNTHZyRSxLQUFLMDVELFlBQVlyckQsR0FBRyxVQUFXck8sS0FBS3dyRSwrREFFbkJsZ0UsR0FFRkEsRUFBR211RCxRQUNYZ1MsNEJBQTRCbmdFLCtEQU1uQ3RMLEtBQUswNUQsWUFBWXJyRCxHQUFHLGlCQUFrQnJPLEtBQUswckUsK0VBRWxCcGdFLEdBRVZBLEVBQUdtdUQsUUFDWGdTLDRCQUE0Qm5nRSx1REFPVEEsR0FDMUIsSUFBTS9PLEVBQVUrTyxFQUFHMGdDLFdBQ2J3dEIsRUFBU2x1RCxFQUFHbXVELFFBQ2xCRCxFQUFPbVMsYUFBYXB2RSxHQUNwQmk5RCxFQUFPb1MsZ0JBQWdCcFMsNENBS1JqMUQsR0FDZixHQUFJc25FLFVBQVEsQ0FDVixJQUFNQyxHQUNKQyxLQUFLLEVBQ0xDLFFBQVEsRUFDUkMsUUFBUSxFQUNSQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2J6eEMsVUFBVyxTQUFTMXVCLEdBQ2xCLE9BQU9vZ0UsVUFBS0MsY0FBY3JnRSxHQUFNalUsUUFHcEMrSCxLQUFLd3NFLFFBQVVYLFVBRWY3ckUsS0FBS3dzRSxRQUFRQyxXQUFXWCw4RkFTMUIsSUFBTVksRUFBYTFzRSxLQUFLNDVELFNBQVM4UyxXQUNqQyxHQUFJQSxFQUFZLENBQ2QsSUFBTXBoRSxFQUFLdEwsS0FBSzA1RCxZQUNoQnB1RCxFQUFHNmdDLFNBQVN1Z0MsR0FDWjFzRSxLQUFLeXJFLDRCQUE0Qm5nRSx5Q0FRbkMsT0FEV3RMLEtBQUswNUQsWUFDTjF0QixnREFLQzJnQyxHQUNYLElBQU1DLEVBQVU1c0UsS0FBS3dzRSxRQUFRRyxHQUNUM3NFLEtBQUs0NUQsU0FBUytCLEdBQUd6Z0QsY0FBYyxtQkFBbUJBLGNBQWMsZUFDeEUyeEQsVUFBWUQsMENBV3hCLElBQU10aEUsRUFBS3RMLEtBQUswNUQsWUFDVnVDLEVBQVVqOEQsS0FBSzQ1RCxTQUFTK0IsR0FBR3pnRCxjQUFjLG1CQUUzQzR4RCxHQUFVLEVBQ1ZDLEdBQVUsRUFFZHpoRSxFQUFHK0MsR0FBRyxTQUFVLFNBQVMwNUIsR0FDdkIsR0FBRytrQyxFQUNEQSxHQUFVLE1BRFosQ0FJQUMsR0FBVSxFQUNWLElBQUlyb0UsRUFBU3FqQyxFQUFFc3VCLGdCQUFnQjN4RCxPQUFTcWpDLEVBQUVzdUIsZ0JBQWdCcnpDLGFBQ3REZ3FELEVBQVFDLFdBQVdsbEMsRUFBRXN1QixnQkFBZ0I1eEMsS0FBTy9mLEVBQzVDeWdELEdBQVE4VyxFQUFRdnBDLGFBQWV1cEMsRUFBUWo1QyxjQUFnQmdxRCxFQUMzRC9RLEVBQVEzMEMsVUFBWTY5QixLQUl0QjhXLEVBQVExdEQsaUJBQWlCLFNBQVUsV0FDakMsR0FBR3crRCxFQUNEQSxHQUFVLE1BRFosQ0FJQUQsR0FBVSxFQUNWLElBQUlwb0UsRUFBU3UzRCxFQUFRdnBDLGFBQWV1cEMsRUFBUWo1QyxhQUN4Q2dxRCxFQUFRQyxXQUFXaFIsRUFBUTMwQyxXQUFhNWlCLEVBQ3hDeWdELEdBQVE3NUMsRUFBRytxRCxnQkFBZ0IzeEQsT0FBUzRHLEVBQUcrcUQsZ0JBQWdCcnpDLGNBQWdCZ3FELEVBQzNFMWhFLEVBQUc0bkQsU0FBUyxFQUFHL04sZ0RBTWpCLElBRU0rbkIsRUFGS2x0RSxLQUFLMDVELFlBRUUxdEIsV0FBV3J3QyxPQUM3QnFFLEtBQUttdEUsOEJBQ0xudEUsS0FBS290RSx3QkFBd0JGLG1EQU9QOWhFLEdBQ3RCLElBQ01paUUsRUFEV3J0RSxLQUFLNDVELFNBQVMrQixHQUNIemdELGNBQWMsa0JBQWtCQSxjQUFjLHlCQUVsRXZmLEVBRFNxRSxLQUFLNDVELFNBQVN5RSxLQUNIaVAsVUFBcEIzeEUsT0FFUjB4RSxFQUFXUixVQUFlbHhFLEVBQTFCLElBQW9DeVAsd0RBTXBDLElBQU1FLEVBQUt0TCxLQUFLMDVELFlBR1ZsdEIsRUFBWWxoQyxFQUFHa2hDLFlBQ2YrZ0MsRUFBV2ppRSxFQUFHd21CLFlBQ2QwN0MsRUFBVUQsRUFBU25yRSxHQUFLLEVBQ3hCcXJFLEVBQVdGLEVBQVNscEUsS0FBTyxFQVBMcXBFLEVBUVgxdEUsS0FBSzQ1RCxTQUFTeUUsS0FDSWlQLFVBQTNCanBFLEVBVG9CcXBFLEVBU3BCcnBFLEtBQU1zcEUsRUFUY0QsRUFTZEMsUUFFRzN0RSxLQUFLNDVELFNBQVMrQixHQUNGemdELGNBQWMsa0JBQWtCQSxjQUFjLDBCQUEwQkEsY0FBYyxRQUN2RzJ4RCxVQUFleG9FLEVBQTNCLElBQW1Db3BFLEVBQW5DLElBQStDRSxFQUEvQyxJQUEwREgsRUFBMUQsTUFBdUVoaEMsRUFBdkUsSUFBb0Zub0MsMkNBS3JFaUIsR0FFZnRGLEtBQUt5N0QsV0FDTHo3RCxLQUFLeTdELFFBQUwsY0FBK0IsRUFDL0J6N0QsS0FBS3k3RCxRQUFMLGNBQStCLDRDQVMvQno3RCxLQUFLNHRFLG9FQUtjdG9FLEdBQW9DLElBQTNCL0osRUFBMkJzRCxVQUFBbEQsT0FBQSxRQUFBNlksSUFBQTNWLFVBQUEsR0FBQUEsVUFBQSxHQUFmLGNBQ2xDdzZELEVBQU9yNUQsS0FDUDZ0RSxFQUFXN3RFLEtBQUs0NUQsU0FBUytCLEdBQUd6Z0QsY0FBYyxrQkFBa0JBLGNBQWMzZixHQUMxRW9nRSxFQUFLMzdELEtBQUs0NUQsU0FBUytCLEdBQ2pCcCtELEVBQTBCbzdELFVBQTFCcDdELFNBQVVzN0QsRUFBZ0JGLFVBQWhCRSxZQUVsQixHQUFJZ1YsRUFBVSxDQUVaQSxFQUFTdC9ELGlCQUFpQixRQUFTLFdBQ2xCOHFELEVBQUtvQyxRQUFMLGNBR2JsK0QsRUFBU28rRCxFQUFJLHFCQUNiOUMsRUFBWThDLEVBQUksd0JBRWhCcCtELEVBQVNvK0QsRUFBSSxzQkFDYjlDLEVBQVk4QyxFQUFJLHNCQUVsQnRDLEVBQUtvQyxRQUFMLGNBQWdDcEMsRUFBS29DLFFBQUwsa0VBSVpuMkQsbUNBUW5CcTJELEdBQ0FBLElBQ0hBLEVBQUszN0QsS0FBSzZxRSxpQkFBbUI3cUUsS0FBSzh0RSxRQUFReEQscUJBQXFCLFlBQVksSUFHN0UsSUFBTWhsRSxFQUFVdEYsS0FBS3NGLFFBQ2ZrMEQsRUFBU3g1RCxLQUNUd2hELEtBRU4sSUFBSyxJQUFJanBELEtBQU8rTSxFQUFRaTNELFVBQ1MsT0FBM0JqM0QsRUFBUWkzRCxVQUFVaGtFLElBQW1DLE9BQWxCdzFFLFNBQVN4MUUsSUFDOUMsU0FBVUEsR0FDUmlwRCxFQUFRd2IsWUFBWTEzRCxFQUFRaTNELFVBQVVoa0UsS0FBUyxXQUM3Q3cxRSxTQUFTeDFFLEdBQUtpaEUsSUFGbEIsQ0FJR2poRSxHQUtQaXBELEVBQUEsTUFBbUIsdUNBQ25CQSxFQUFBLElBQWlCLDJCQUNqQkEsRUFBQSxJQUFpQixTQUFDbDJDLEdBQ1pBLEVBQUcwaUUsV0FBVyxlQUFlalIsaUJBQWlCdkQsSUFHcEQ3L0QsU0FBUzRVLGlCQUFpQixVQUFXLFNBQUMxUyxHQUduQixLQUZqQkEsRUFBSUEsR0FBS2pGLE9BQU84dEMsT0FFVmtTLFNBQ0E0aUIsRUFBT3lVLFdBQVdELFdBQVcsZUFBZWpSLGlCQUFpQnZELEtBRWxFLGlDQW5nQk9sVyxvQkFJVixPQUFPdGpELEtBQUs0NUQsa0JBdWdCMEMsV0FBdEJ3RCxFQUFPdG1FLEVBQUEsS0FBMkJBLEVBQUEsUUFFcEUwZCxLQUFBMDVELEVBQUEsV0FDRSxPQUFPbEYsR0FEVDd4RSxLQUFBWCxFQUFBTSxFQUFBTixFQUFBQyxRQUFBRCxRQUFBMDNFLFFBRzJCLElBQVh6M0UsR0FBMEJBLEVBQU9ELFFBQ2pEQyxFQUFPRCxRQUFVd3lFLEVBRWpCcHlFLE9BQU9veUUsYUFBZUEscVZDM25CeEJseUUsRUFBQSxRQUNReWxFLEVBQTJCNFIsVUFBM0I1UixVQUFXUyxFQUFnQm1SLFVBQWhCblIsWUFFYnVOLEdBQ0puakIsS0FEZ0IsU0FDWDloRCxHQUFTLElBQUE0akUsRUFBQWxwRSxLQUVaLE9BREFBLEtBQUttcEUsU0FBUzdqRSxHQUNQLElBQUlpa0UsUUFBUSxTQUFDQyxFQUFTQyxHQUMzQlAsRUFBS2tGLFlBQVk5b0UsR0FDaEI4akUsS0FBSyxXQUNKRixFQUFLbUYsV0FBVy9vRSxLQUVqQjhqRSxLQUFLLFdBQ0pGLEVBQUtvRixjQUFjaHBFLEtBRXBCOGpFLEtBQUssV0FDSkYsRUFBS3FGLGFBQWFqcEUsS0FFbkI4akUsS0FBSyxXQUNKSSxNQUVEZ0YsTUFBTSxTQUFBQyxHQUFBLE9BQVNBLE9BU3BCdEYsU0ExQmdCLFNBMEJQN2pFLEdBQ1B0RixLQUFLcStELEtBQU8vNEQsRUFBUSs0RCxNQUd0QitQLFlBOUJnQixTQThCSjlvRSxHQUNWLElBQU1xMkQsRUFBS3IyRCxFQUFRcTJELEdBQ1huQixFQUEwQmwxRCxFQUFRdTBELE9BQWxDVyxzQkFDRmtVLEVBQW1CMXVFLEtBQUsydUUsZ0JBQWdCblUsR0FDeENvVSxFQUFxQjV1RSxLQUFLNnVFLGtCQUFrQnJVLEdBQ2xELE9BQU8sSUFBSStPLFFBQVEsU0FBQ0MsRUFBU0MsR0FDM0I5TixFQUFHa1IsV0FBSCx1Q0FDOEI2QixFQUFtQkUsRUFEakQsaUJBR0FwRixPQU1KbUYsZ0JBN0NnQixTQTZDQUcsR0FDZCxJQUFNelYsRUFBT3I1RCxLQUNQK3VFLEVBQVkvdUUsS0FBS2d2RSxhQUFhRixHQUNoQ2xDLEVBQVUsa0NBR2QsR0FBSW1DLEVBQVVwekUsT0FBUyxFQUFHLENBRXhCLElBRU1zekUsRUFBZUYsRUFBVXB6RSxPQUMvQm96RSxFQUFVclIsUUFBUSxTQUFDQyxFQUFNamlFLEdBQ2JBLEVBQVEsSUFBT0EsRUFBUSxHQUFLLEdBQU0sR0FFdENBLElBQVd1ekUsRUFBZSxFQUM1QnJDLEVBQVVBLEVBQVV2VCxFQUFLNlYsZ0JBQWdCdlIsR0FBUSwrQ0FLbkRpUCxHQUFXdlQsRUFBSzZWLGdCQUFnQnZSLEtBUXRDLE9BRkFpUCxHQUFXLFVBU2JvQyxhQWhGZ0IsU0FnRkhHLEdBQ1gsR0FBMkIsaUJBQXZCLElBQU9BLEVBQVAsWUFBQS9SLEVBQU8rUixJQUFYLENBRUEsSUFBTUMsS0FDRnhWLEVBQVd5VixLQUFLQyxNQUFNRCxLQUFLRSxVQUFVSixJQUN6QyxJQUFLLElBQUk1MkUsS0FBT3FoRSxFQUNWQSxFQUFTcmhFLEdBQVQsY0FDRjYyRSxFQUFVNzJFLEdBQU9xaEUsRUFBU3JoRSxJQUs5QixPQUZ5QnlILEtBQUt3dkUsY0FBY0osRUFBVyxXQU96RFAsa0JBakdnQixTQWlHRUMsR0FDaEIsSUFDSWxDLEVBQVUsb0NBQ1J2VCxFQUFPcjVELEtBU2IsT0FYZUEsS0FBS3l2RSxlQUFlWCxHQUs1QnBSLFFBQVEsU0FBQ0MsRUFBTWppRSxHQUNwQmt4RSxHQUFXdlQsRUFBSzZWLGdCQUFnQnZSLEtBR2xDaVAsR0FBVyxVQVNiNkMsZUFwSGdCLFNBb0hETixHQUNiLEdBQTJCLGlCQUF2QixJQUFPQSxFQUFQLFlBQUEvUixFQUFPK1IsSUFBWCxDQUVBLElBQU1DLEtBQ0Z4VixFQUFXeVYsS0FBS0MsTUFBTUQsS0FBS0UsVUFBVUosSUFDekMsSUFBSyxJQUFJNTJFLEtBQU9xaEUsRUFDUkEsRUFBU3JoRSxHQUFULGNBQ0o2MkUsRUFBVTcyRSxHQUFPcWhFLEVBQVNyaEUsSUFLOUIsT0FGeUJ5SCxLQUFLd3ZFLGNBQWNKLEVBQVcsV0FVekRJLGNBeElnQixTQXdJRnh3RSxFQUFLMHdFLEdBQ2pCLEdBQW1CLGlCQUFmLElBQU8xd0UsRUFBUCxZQUFBbytELEVBQU9wK0QsSUFBWCxDQUVBLElBQUkwQyxLQUVKLElBQUssSUFBSW5KLEtBQU95RyxFQUNkMEMsRUFBSUYsS0FBS3hDLEVBQUl6RyxJQU9mLE9BSlVtSixFQUFJbStCLEtBQUssU0FBQzh2QyxFQUFNQyxHQUN4QixPQUFPRCxFQUFBLE1BQWdCQyxFQUFBLFVBSzNCVixnQkF2SmdCLFNBdUpBcFIsR0FDZCxJQUFNK1IsRUFBb0J0VCxFQUFVdUIsRUFBT3ZtRSxNQUN2Q3U0RSxTQVFKLE9BTEVBLEVBRENELEVBQ3VCN1MsRUFBWTZTLEdBRVosR0FHMUIsZ0JBQXVCL1IsRUFBT3ZpRSxVQUE5QixZQUFtRHVpRSxFQUFPMWlELE1BQTFELEtBQW9FMDBELEVBQXBFLGlCQUEwR2hTLEVBQU92bUUsS0FBakgsYUFLRjgyRSxXQXRLZ0IsU0FzS0wvb0UsR0FDVCxJQUFNcTJELEVBQUtyMkQsRUFBUXEyRCxHQUNuQixPQUFPLElBQUk0TixRQUFRLFNBQUNDLEVBQVNDLEdBQzNCOU4sRUFBR2tSLFdBQUgsc0lBT0FyRCxPQU9KOEUsY0F2TGdCLFNBdUxGaHBFLEdBQ1osSUFBTXEyRCxFQUFLcjJELEVBQVFxMkQsR0FDbkIsT0FBTyxJQUFJNE4sUUFBUSxTQUFDQyxFQUFTQyxHQUMzQjlOLEVBQUdrUixXQUFILDZIQU1BckQsT0FNSitFLGFBdE1nQixTQXNNSGpwRSxHQUNYLElBQU1xMkQsRUFBS3IyRCxFQUFRcTJELEdBRWJvVSxFQUFpQi92RSxLQUFLZ3dFLHFCQUFxQjFxRSxHQUMzQzJxRSxFQUFnQmp3RSxLQUFLa3dFLG1CQUMzQixPQUFPLElBQUkzRyxRQUFRLFNBQUNDLEVBQVNDLEdBQzNCOU4sRUFBR2tSLFdBQUgsc0NBQzZCa0QsRUFBaUJFLEVBRDlDLFNBRUF6RyxPQUdKd0cscUJBak5nQixTQWlOSzFxRSxHQUNuQixJQUFNNnFFLEVBQXFCbndFLEtBQUtvd0UsMEJBREoxQyxFQUVYMXRFLEtBQUtxK0QsS0FDY2lQLFVBQTVCanBFLEVBSG9CcXBFLEVBR3BCcnBFLEtBR1IsTUFGSXVvRSw0Q0FBc0R2b0UsRUFBdEQsS0FKd0JxcEUsRUFHYkMsUUFDWCxRQUE4RXRwRSxFQUE5RSxVQUE0RjhyRSxFQUE1RixVQUlOQyx3QkF6TmdCLFdBNE5kLE1BRmMsb0NBSWhCRixpQkE5TmdCLFdBbU9kLE1BRkl0RCxxQ0FGYTVzRSxLQUFLcStELEtBQ01pUCxVQUFwQjN4RSxPQUNKLHFCQU9PNHVFLDRGQ2xPYitDLFdBQ0VqcEUsS0FBTSxPQUNOc3BFLFFBQVMsVUFDVGh5RSxPQUFRLHFHQ0xWczlELFNBUGEsU0FPSjN0RCxFQUFJckssR0FDWEEsRUFBTUEsR0FBT3FLLEVBQUd3bUIsVUFBVSxTQUMxQixJQUFJNm5DLEVBQU9ydUQsRUFBR3lwRCxXQUFXOXpELEdBQ3pCLElBQUswNEQsRUFBSzd4RCxLQUFNLFNBTWhCLElBSkEsSUFHRXdhLEVBQU0vZCxFQUhKcUksRUFBUStzRCxFQUFLN3hELEtBQUtsSyxNQUFNLEtBRXhCeXlFLEtBRUtyNUUsRUFBSSxFQUFHQSxFQUFJNFYsRUFBTWpSLE9BQVEzRSxJQUVuQixZQURic3JCLEVBQU8xVixFQUFNNVYsSUFFWHE1RSxFQUFJNVYsTUFBTyxFQUNPLGVBQVRuNEMsR0FDVC9kLEVBQU8rRyxFQUFHNUgsUUFBUXpDLEVBQUlvRCxNQUNsQixjQUFjakwsS0FBS21MLEdBQ3JCOHJFLEVBQUksaUJBQWtCLEVBRXRCQSxFQUFJLG1CQUFvQixHQUVSLFNBQVQvdEQsRUFDVCt0RCxFQUFJblcsT0FBUSxFQUNNLE9BQVQ1M0MsRUFDVCt0RCxFQUFJdFYsUUFBUyxFQUNLLFVBQVR6NEMsRUFDVCt0RCxFQUFJblcsT0FBUSxFQUNNLGtCQUFUNTNDLEVBQ1QrdEQsRUFBSXhSLGVBQWdCLEVBQ0YsWUFBVHY4QyxFQUNUK3RELEVBQUlua0UsTUFBTyxFQUNPLFNBQVRvVyxFQUNUK3RELEVBQUl0Z0MsTUFBTyxFQUNPLFFBQVR6dEIsRUFDVCt0RCxFQUFJbFYsT0FBUSxFQUNINzRDLEVBQUsxbkIsTUFBTSx3QkFDcEJ5MUUsRUFBSS90RCxFQUFLblYsUUFBUSxTQUFVLGFBQWMsR0FHN0MsT0FBT2tqRSx5Q0NuQ1YsU0FBQXgrQixHQUNELGFBRUEsSUFBQXkrQixHQUNBQyxpQkFBb0JDLE1BQUEsRUFBQXp1RSxNQUFBLEVBQUEwdUUsSUFBQSxFQUFBdnZFLEtBQUEsRUFBQXd2RSxTQUFBLEVBQ3BCQyxPQUFBLEVBQUFDLE9BQUEsRUFBQXJSLElBQUEsRUFBQS9XLEtBQUEsRUFBQWhzQyxPQUFBLEVBQ0FxMEQsUUFBQSxFQUFBOWdDLE1BQUEsRUFBQStnQyxNQUFBLEVBQUFDLE9BQUEsRUFBQXR1RSxRQUFBLEVBQ0F1dUUsT0FBQSxFQUFBQyxLQUFBLEVBQUFDLFVBQUEsR0FDQUMsa0JBQXFCQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsVUFBQSxFQUFBaHVCLFFBQUEsRUFBQXhxRCxHQUFBLEVBQ3JCeTRFLElBQUEsRUFBQTEvRCxJQUFBLEVBQUEyL0QsT0FBQSxFQUFBQyxJQUFBLEVBQUFDLE9BQUEsRUFDQWxuRCxJQUFBLEVBQUFtbkQsSUFBQSxHQUNBQyxpQkFDQVIsSUFBV0EsSUFBQSxFQUFBUyxJQUFBLEdBQ1hBLElBQVdULElBQUEsRUFBQVMsSUFBQSxHQUNYUixJQUFXQSxJQUFBLEdBQ1gvdEIsUUFBZUEsUUFBQSxFQUFBZ3VCLFVBQUEsR0FDZkEsVUFBaUJBLFVBQUEsR0FDakJ4NEUsR0FBVWc1RSxTQUFBLEVBQUFDLFNBQUEsRUFBQUMsT0FBQSxFQUFBQyxZQUFBLEVBQUFqdkUsS0FBQSxFQUNWOE4sS0FBQSxFQUFBb2hFLElBQUEsRUFBQUMsVUFBQSxFQUFBQyxRQUFBLEVBQUFuYSxNQUFBLEVBQ0FvYSxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUNBdlQsUUFBQSxFQUFBd1QsUUFBQSxFQUFBcFQsSUFBQSxFQUFBcVQsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLElBQUEsRUFDQWg2RSxHQUFBLEVBQUFzaEIsS0FBQSxFQUFBMjRELFNBQUEsRUFBQTNXLE9BQUEsRUFBQTRXLElBQUEsR0FDQXpCLElBQVdBLElBQUEsRUFBQTEvRCxJQUFBLEdBQ1hBLElBQVcwL0QsSUFBQSxFQUFBMS9ELElBQUEsR0FDWDIvRCxPQUFjQSxPQUFBLEVBQUFFLE9BQUEsR0FDZEQsSUFBV0EsSUFBQSxFQUFBam5ELElBQUEsR0FDWGtuRCxPQUFjRixPQUFBLEdBQ2RobkQsSUFBV2luRCxJQUFBLEVBQUFqbkQsSUFBQSxHQUNYeW9ELE9BQWN6QixPQUFBLEVBQUFFLE9BQUEsR0FDZEMsSUFBV0EsSUFBQSxJQUVYdUIsYUFBZ0I5NEQsS0FBQSxHQUNoQis0RCxlQUFBLEVBQ0FDLGNBQUEsRUFDQUMsVUFBQSxHQUdBQyxHQUNBL0MsbUJBQ0FZLG9CQUNBUyxtQkFDQXNCLGVBQ0FDLGVBQUEsRUFDQUMsY0FBQSxFQUNBRyxxQkFBQSxFQUNBRixVQUFBLEdBR0F4aEMsRUFBQXlsQixXQUFBLGVBQUFrYyxFQUFBQyxHQUNBLElBT0EzckUsRUFBQTRyRSxFQVBBbnFCLEVBQUFpcUIsRUFBQWpxQixXQUNBdVUsS0FDQXpYLEVBQUFvdEIsRUFBQWpWLFNBQUE4UixFQUFBZ0QsRUFDQSxRQUFBbjBFLEtBQUFrbkQsRUFBQXlYLEVBQUEzK0QsR0FBQWtuRCxFQUFBbG5ELEdBQ0EsUUFBQUEsS0FBQXMwRSxFQUFBM1YsRUFBQTMrRCxHQUFBczBFLEVBQUF0MEUsR0FLQSxTQUFBdzBFLEVBQUFuN0QsRUFBQWhGLEdBQ0EsU0FBQW9nRSxFQUFBQyxHQUVBLE9BREFyZ0UsRUFBQTh0RCxTQUFBdVMsRUFDQUEsRUFBQXI3RCxFQUFBaEYsR0FHQSxJQUFBcFIsRUFBQW9XLEVBQUEvRCxPQUNBLFdBQUFyUyxFQUNBb1csRUFBQTlELElBQUEsS0FDQThELEVBQUE5RCxJQUFBLEtBQ0E4RCxFQUFBNWQsTUFBQSxVQUFBZzVFLEVBQUFFLEVBQUEsZUFDQSxLQUNTdDdELEVBQUE1ZCxNQUFBLE1BQ1RnNUUsRUFBQUUsRUFBQSxxQkFDU3Q3RCxFQUFBNWQsTUFBQSxrQkFDVDRkLEVBQUE3RCxTQUFBLGFBQ0FpL0QsRUFvRkEsU0FBQUcsRUFBQUMsR0FDQSxnQkFBQXg3RCxFQUFBaEYsR0FFQSxJQURBLElBQUFwUixFQUNBLE9BQUFBLEVBQUFvVyxFQUFBL0QsU0FBQSxDQUNBLFFBQUFyUyxFQUVBLE9BREFvUixFQUFBOHRELFNBQUF5UyxFQUFBQyxFQUFBLEdBQ0F4Z0UsRUFBQTh0RCxTQUFBOW9ELEVBQUFoRixHQUNTLFFBQUFwUixFQUFBLENBQ1QsTUFBQTR4RSxFQUFBLENBQ0F4Z0UsRUFBQTh0RCxTQUFBcVMsRUFDQSxNQUdBLE9BREFuZ0UsRUFBQTh0RCxTQUFBeVMsRUFBQUMsRUFBQSxHQUNBeGdFLEVBQUE4dEQsU0FBQTlvRCxFQUFBaEYsSUFJQSxjQXJHQXVnRSxDQUFBLEtBRUEsS0FFT3Y3RCxFQUFBOUQsSUFBQSxNQUNQOEQsRUFBQTdELFNBQUEsYUFDQW5CLEVBQUE4dEQsU0FBQXdTLEVBQUEsYUFDQSxTQUVBaHNFLEVBQUEwUSxFQUFBOUQsSUFBQSwwQkFDQWxCLEVBQUE4dEQsU0FBQTJTLEVBQ0EsZUFFSyxLQUFBN3hFLEdBRUxvVyxFQUFBOUQsSUFBQSxLQUNBOEQsRUFBQTlELElBQUEsS0FDQThELEVBQUE3RCxTQUFBLGVBQUE2RCxFQUFBOUQsSUFBQSxLQUVBOEQsRUFBQTdELFNBQUEsU0FBQTZELEVBQUE5RCxJQUFBLEtBR0E4RCxFQUFBN0QsU0FBQSxjQUFBNkQsRUFBQTlELElBQUEsTUFFQSxnQkFFQThELEVBQUE3RCxTQUFBLFNBQ0EsTUFLQSxTQUFBcy9ELEVBQUF6N0QsRUFBQWhGLEdBQ0EsSUFBQXBSLEVBQUFvVyxFQUFBL0QsT0FDQSxRQUFBclMsR0FBQSxLQUFBQSxHQUFBb1csRUFBQTlELElBQUEsS0FHQSxPQUZBbEIsRUFBQTh0RCxTQUFBcVMsRUFDQTdyRSxFQUFBLEtBQUExRixFQUFBLHdCQUNBLGNBQ0ssUUFBQUEsRUFFTCxPQURBMEYsRUFBQSxTQUNBLEtBQ0ssUUFBQTFGLEVBQUEsQ0FDTG9SLEVBQUE4dEQsU0FBQXFTLEVBQ0FuZ0UsUUFBQTBnRSxFQUNBMWdFLEVBQUEyZ0UsUUFBQTNnRSxFQUFBNnRELFNBQUEsS0FDQSxJQUFBNXNELEVBQUFqQixFQUFBOHRELFNBQUE5b0QsRUFBQWhGLEdBQ0EsT0FBQWlCLElBQUEseUJBQ0ssZUFBQXJiLEtBQUFnSixJQUNMb1IsRUFBQTh0RCxTQVNBLFNBQUFwSCxHQUNBLElBQUFrYSxFQUFBLFNBQUE1N0QsRUFBQWhGLEdBQ0EsTUFBQWdGLEVBQUFuRSxPQUNBLEdBQUFtRSxFQUFBL0QsUUFBQXlsRCxFQUFBLENBQ0ExbUQsRUFBQTh0RCxTQUFBMlMsRUFDQSxNQUdBLGdCQUdBLE9BREFHLEVBQUFDLGVBQUEsRUFDQUQsRUFwQkFFLENBQUFseUUsR0FDQW9SLEVBQUErZ0UsZUFBQS83RCxFQUFBeEQsU0FDQXhCLEVBQUE4dEQsU0FBQTlvRCxFQUFBaEYsS0FFQWdGLEVBQUE1ZCxNQUFBLDRDQUNBLFFBa0JBLFNBQUFrNUUsRUFBQXQzRSxFQUFBZzRFLEdBQ0EsZ0JBQUFoOEQsRUFBQWhGLEdBQ0EsTUFBQWdGLEVBQUFuRSxPQUFBLENBQ0EsR0FBQW1FLEVBQUE1ZCxNQUFBNDVFLEdBQUEsQ0FDQWhoRSxFQUFBOHRELFNBQUFxUyxFQUNBLE1BRUFuN0QsRUFBQS9ELE9BRUEsT0FBQWpZLEdBaUNBLFNBQUFpNEUsRUFBQWpoRSxHQUNBQSxFQUFBMEMsVUFBQTFDLEVBQUEwQyxRQUFBMUMsRUFBQTBDLFFBQUFySixNQUVBLFNBQUE2bkUsRUFBQWxoRSxFQUFBbWhFLEdBRUEsSUFEQSxJQUFBQyxJQUNBLENBQ0EsSUFBQXBoRSxFQUFBMEMsUUFDQSxPQUdBLEdBREEwK0QsRUFBQXBoRSxFQUFBMEMsUUFBQWkrRCxTQUNBclcsRUFBQThULGdCQUFBLzRFLGVBQUErN0UsS0FDQTlXLEVBQUE4VCxnQkFBQWdELEdBQUEvN0UsZUFBQTg3RSxHQUNBLE9BRUFGLEVBQUFqaEUsSUFJQSxTQUFBMGdFLEVBQUFwc0UsRUFBQTBRLEVBQUFoRixHQUNBLGlCQUFBMUwsR0FDQTBMLEVBQUE2dEQsU0FBQTdvRCxFQUFBeEQsU0FDQTYvRCxHQUNLLFlBQUEvc0UsRUFDTGd0RSxFQUVBWixFQUdBLFNBQUFXLEVBQUEvc0UsRUFBQTBRLEVBQUFoRixHQUNBLGNBQUExTCxHQUNBMEwsRUFBQTJnRSxRQUFBMzdELEVBQUFsZCxVQUNBbzRFLEVBQUEsTUFDQXFCLEdBQ0tqWCxFQUFBeVYscUJBQUEsVUFBQXpyRSxHQUNMNHJFLEVBQUEsY0FDQXFCLEVBQUFqdEUsRUFBQTBRLEVBQUFoRixLQUVBa2dFLEVBQUEsUUFDQW1CLEdBR0EsU0FBQUMsRUFBQWh0RSxFQUFBMFEsRUFBQWhGLEdBQ0EsV0FBQTFMLEVBQUEsQ0FDQSxJQUFBcXNFLEVBQUEzN0QsRUFBQWxkLFVBSUEsT0FIQWtZLEVBQUEwQyxTQUFBMUMsRUFBQTBDLFFBQUFpK0QsWUFDQXJXLEVBQUFxVCxpQkFBQXQ0RSxlQUFBMmEsRUFBQTBDLFFBQUFpK0QsVUFDQU0sRUFBQWpoRSxHQUNBQSxFQUFBMEMsU0FBQTFDLEVBQUEwQyxRQUFBaStELGFBQUEsSUFBQXJXLEVBQUFrWCxjQUNBdEIsRUFBQSxNQUNBdUIsSUFFQXZCLEVBQUEsWUFDQXdCLEdBRUssT0FBQXBYLEVBQUF5VixxQkFBQSxVQUFBenJFLEdBQ0w0ckUsRUFBQSxjQUNBdUIsRUFBQW50RSxFQUFBMFEsRUFBQWhGLEtBRUFrZ0UsRUFBQSxRQUNBd0IsR0FJQSxTQUFBRCxFQUFBbnRFLEVBQUFxdEUsRUFBQTNoRSxHQUNBLGdCQUFBMUwsR0FDQTRyRSxFQUFBLFFBQ0F1QixJQUVBUixFQUFBamhFLEdBQ0EwZ0UsR0FFQSxTQUFBZ0IsRUFBQXB0RSxFQUFBMFEsRUFBQWhGLEdBRUEsT0FEQWtnRSxFQUFBLFFBQ0F1QixFQUFBbnRFLEVBQUEwUSxFQUFBaEYsR0FHQSxTQUFBdWhFLEVBQUFqdEUsRUFBQXF0RSxFQUFBM2hFLEdBQ0EsV0FBQTFMLEVBRUEsT0FEQTRyRSxFQUFBLFlBQ0EwQixFQUNLLGFBQUF0dEUsR0FBQSxnQkFBQUEsRUFBQSxDQUNMLElBQUFxc0UsRUFBQTNnRSxFQUFBMmdFLFFBQUE5UyxFQUFBN3RELEVBQUE2dEQsU0FTQSxPQVJBN3RELEVBQUEyZ0UsUUFBQTNnRSxFQUFBNnRELFNBQUEsS0FDQSxnQkFBQXY1RCxHQUNBZzJELEVBQUF5UyxnQkFBQTEzRSxlQUFBczdFLEdBQ0FPLEVBQUFsaEUsRUFBQTJnRSxJQUVBTyxFQUFBbGhFLEVBQUEyZ0UsR0FDQTNnRSxFQUFBMEMsUUFBQSxJQWhHQSxTQUFBMUMsRUFBQTJnRSxFQUFBa0IsR0FDQXIxRSxLQUFBNk0sS0FBQTJHLEVBQUEwQyxRQUNBbFcsS0FBQW0wRSxVQUNBbjBFLEtBQUFvcEQsT0FBQTUxQyxFQUFBdUUsU0FDQS9YLEtBQUFxMUUsZUFDQXZYLEVBQUFvVixZQUFBcjZFLGVBQUFzN0UsSUFBQTNnRSxFQUFBMEMsU0FBQTFDLEVBQUEwQyxRQUFBby9ELFlBQ0F0MUUsS0FBQXMxRSxVQUFBLEdBMEZBLENBQUE5aEUsRUFBQTJnRSxFQUFBOVMsR0FBQTd0RCxFQUFBdUUsV0FFQW04RCxFQUdBLE9BREFSLEVBQUEsUUFDQXFCLEVBRUEsU0FBQUssRUFBQXR0RSxFQUFBMFEsRUFBQWhGLEdBQ0EsZ0JBQUExTCxFQUFBeXRFLEdBQ0F6WCxFQUFBc1YsZUFBQU0sRUFBQSxTQUNBcUIsRUFBQWp0RSxFQUFBMFEsRUFBQWhGLElBRUEsU0FBQStoRSxFQUFBenRFLEVBQUEwUSxFQUFBaEYsR0FDQSxnQkFBQTFMLEVBQUEwdEUsRUFDQSxRQUFBMXRFLEdBQUFnMkQsRUFBQXFWLGVBQWlETyxFQUFBLFNBQW9CcUIsSUFDckVyQixFQUFBLFFBQ0FxQixFQUFBanRFLEVBQUEwUSxFQUFBaEYsSUFFQSxTQUFBZ2lFLEVBQUExdEUsRUFBQTBRLEVBQUFoRixHQUNBLGdCQUFBMUwsRUFBQTB0RSxFQUNBVCxFQUFBanRFLEVBQUEwUSxFQUFBaEYsR0FHQSxPQWxNQW1nRSxFQUFBcFMsVUFBQSxHQW1NQTF0RCxXQUFBLFNBQUE0aEUsR0FDQSxJQUFBamlFLEdBQW1COHRELFNBQUFxUyxFQUNuQm5nRSxNQUFBMGdFLEVBQ0FuOEQsU0FBQTA5RCxHQUFBLEVBQ0F0QixRQUFBLEtBQUE5UyxTQUFBLEtBQ0FuckQsUUFBQSxNQUVBLE9BREEsTUFBQXUvRCxJQUFBamlFLEVBQUFpaUUsY0FDQWppRSxHQUdBb0YsTUFBQSxTQUFBSixFQUFBaEYsR0FJQSxJQUhBQSxFQUFBMmdFLFNBQUEzN0QsRUFBQWxFLFFBQ0FkLEVBQUF1RSxTQUFBUyxFQUFBdkQsZUFFQXVELEVBQUE1RCxXQUFBLFlBQ0E5TSxFQUFBLEtBQ0EsSUFBQXRMLEVBQUFnWCxFQUFBOHRELFNBQUE5b0QsRUFBQWhGLEdBT0EsT0FOQWhYLEdBQUFzTCxJQUFBLFdBQUF0TCxJQUNBazNFLEVBQUEsS0FDQWxnRSxnQkFBQTFMLEdBQUF0TCxFQUFBZ2MsRUFBQWhGLEdBQ0FrZ0UsSUFDQWwzRSxFQUFBLFNBQUFrM0UsRUFBQWwzRSxFQUFBLFNBQUFrM0UsSUFFQWwzRSxHQUdBNHNELE9BQUEsU0FBQTUxQyxFQUFBeXhELEVBQUF5USxHQUNBLElBQUF4L0QsRUFBQTFDLEVBQUEwQyxRQUVBLEdBQUExQyxFQUFBOHRELFNBQUErUyxjQUNBLE9BQUE3Z0UsRUFBQTZ0RCxVQUFBN3RELEVBQUF1RSxTQUNBdkUsRUFBQStnRSxlQUFBLEVBRUEvZ0UsRUFBQXVFLFNBQUF3eEMsRUFFQSxHQUFBcnpDLEtBQUFvL0QsU0FBQSxPQUFBempDLEVBQUFyeEMsS0FDQSxHQUFBZ1QsRUFBQTh0RCxVQUFBMlMsR0FBQXpnRSxFQUFBOHRELFVBQUFxUyxFQUNBLE9BQUErQixJQUFBOTZFLE1BQUEsYUFBQWUsT0FBQSxFQUVBLEdBQUE2WCxFQUFBMmdFLFFBQ0EsV0FBQXJXLEVBQUE2WCwwQkFDQW5pRSxFQUFBNnRELFNBQUE3dEQsRUFBQTJnRSxRQUFBeDRFLE9BQUEsRUFFQTZYLEVBQUE2dEQsU0FBQTlYLEdBQUF1VSxFQUFBOFgsMEJBQUEsR0FFQSxHQUFBOVgsRUFBQStYLFlBQUEsY0FBQXo4RSxLQUFBNnJFLEdBQUEsU0FDQSxJQUFBNlEsRUFBQTdRLEdBQUEsc0JBQUExckUsS0FBQTByRSxHQUNBLEdBQUE2USxLQUFBLEdBQ0EsS0FBQTUvRCxHQUFBLENBQ0EsR0FBQUEsRUFBQWkrRCxTQUFBMkIsRUFBQSxJQUNBNS9ELElBQUFySixLQUNBLE1BQ1csSUFBQWl4RCxFQUFBcVQsaUJBQUF0NEUsZUFBQXFkLEVBQUFpK0QsU0FHWCxNQUZBaitELElBQUFySixVQUtPLEdBQUFpcEUsRUFDUCxLQUFBNS9ELEdBQUEsQ0FDQSxJQUFBNi9ELEVBQUFqWSxFQUFBOFQsZ0JBQUExN0QsRUFBQWkrRCxTQUNBLElBQUE0QixNQUFBbDlFLGVBQUFpOUUsRUFBQSxJQUdBLE1BRkE1L0QsSUFBQXJKLEtBS0EsS0FBQXFKLEtBQUFySixPQUFBcUosRUFBQW0vRCxhQUNBbi9ELElBQUFySixLQUNBLE9BQUFxSixJQUFBa3pDLE9BQUFHLEVBQ0EvMUMsRUFBQWlpRSxZQUFBLEdBR0F6cUIsY0FBQSxnQkFDQWthLGtCQUFBLFVBQ0FDLGdCQUFBLFNBRUE2USxjQUFBbFksRUFBQVUsU0FBQSxhQUNBdHJELFdBQUE0cUQsRUFBQVUsU0FBQSxhQUVBeVgsY0FBQSxTQUFBemlFLEdBQ0FBLFNBQUEraEUsSUFDQS9oRSxRQUFBdWhFLE9BS0FsakMsRUFBQTJsQixXQUFBLGtCQUNBM2xCLEVBQUEybEIsV0FBQSx5QkFDQTNsQixFQUFBbi9CLFVBQUE3WixlQUFBLGNBQ0FnNUMsRUFBQTJsQixXQUFBLGFBQXNDamdFLEtBQUEsTUFBQWluRSxVQUFBLElBMVl0Q3JvQixDQUFRci9DLEVBQVEsc0JDS2YsU0FBQSs2QyxHQUNELGFBRUFBLEVBQUFxa0MsV0FDSzMrRSxLQUFBLE1BQUFrZ0UsS0FBQSxXQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLGtCQUNBdG5CLEtBQUEsTUFBQTByRSxPQUFBLGtHQUFBOXFFLEtBQUEsYUFBQTBtQixLQUFBLHFCQUNBdG5CLEtBQUEsUUFBQWtnRSxLQUFBLGtCQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLGdCQUNBdG5CLEtBQUEsV0FBQWtnRSxLQUFBLGtCQUFBdC9ELEtBQUEsV0FBQTY0QyxLQUFBLHdCQUNBejVDLEtBQUEsWUFBQWtnRSxLQUFBLG1CQUFBdC9ELEtBQUEsWUFBQTBtQixLQUFBLFlBQ0F0bkIsS0FBQSxJQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxpQkFDQXRuQixLQUFBLE1BQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSwrQ0FBQXMzRCxPQUFBLFNBQ0E1K0UsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxlQUNBdG5CLEtBQUEsS0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLE1BQUFzM0QsT0FBQSxZQUNBNStFLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsVUFBQTBtQixLQUFBLHVCQUNBdG5CLEtBQUEsZ0JBQUFrZ0UsS0FBQSx1QkFBQXQvRCxLQUFBLFVBQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsNEJBQUFrZ0UsS0FBQSxhQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxvQkFBQW15QixLQUFBLHFCQUNBejVDLEtBQUEsZUFBQTByRSxPQUFBLDBFQUFBOXFFLEtBQUEsZUFBQTBtQixLQUFBLFVBQUFzM0QsT0FBQSw0QkFDQTUrRSxLQUFBLGNBQUFrZ0UsS0FBQSxxQkFBQXQvRCxLQUFBLGFBQUEwbUIsS0FBQSxrQkFBQXMzRCxPQUFBLFVBQ0E1K0UsS0FBQSxTQUFBa2dFLEtBQUEsNkJBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsa0JBQ0F0bkIsS0FBQSxTQUFBa2dFLEtBQUEsZ0JBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEscUJBQ0F0bkIsS0FBQSxVQUFBa2dFLEtBQUEsaUJBQUF0L0QsS0FBQSxVQUFBMG1CLEtBQUEsUUFDQXRuQixLQUFBLE1BQUFrZ0UsS0FBQSxXQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxNQUFBa2dFLEtBQUEsbUJBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLElBQUFrZ0UsS0FBQSxXQUFBdC9ELEtBQUEsSUFBQTBtQixLQUFBLE9BQ0F0bkIsS0FBQSxPQUFBMHJFLE9BQUEsa0NBQUE5cUUsS0FBQSxPQUFBMG1CLEtBQUEsVUFDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLGtCQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsV0FDQVosS0FBQSxhQUFBa2dFLEtBQUEsb0JBQUF0L0QsS0FBQSxhQUFBNjRDLEtBQUEsaUJBQ0F6NUMsS0FBQSxNQUFBa2dFLEtBQUEsc0JBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFFBQUFrZ0UsS0FBQSxlQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLHdCQUNBdG5CLEtBQUEsT0FBQWtnRSxLQUFBLGNBQUF0L0QsS0FBQSxTQUNBWixLQUFBLE1BQUFrZ0UsS0FBQSxhQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxNQUFBa2dFLEtBQUEsa0JBQUF0L0QsS0FBQSxVQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxPQUNBdG5CLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLHNCQUFBa2dFLEtBQUEsb0JBQUF0L0QsS0FBQSxlQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLGdCQUFBa2dFLEtBQUEsb0JBQUF0L0QsS0FBQSxlQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsUUFBQWtnRSxLQUFBLGVBQUF0L0QsS0FBQSxRQUNBWixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxZQUNBdG5CLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxRQUNBWixLQUFBLFFBQUFrZ0UsS0FBQSxlQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLHVCQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsVUFBQTBtQixLQUFBLHlCQUNBdG5CLEtBQUEsS0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLE1BQUFzM0QsT0FBQSxZQUNBNStFLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsT0FDQXRuQixLQUFBLFVBQUFrZ0UsS0FBQSxpQkFBQXQvRCxLQUFBLFVBQUEwbUIsS0FBQSxhQUNBdG5CLEtBQUEsMkJBQUFrZ0UsS0FBQSxhQUFBdC9ELEtBQUEsTUFBQTY0QyxLQUFBLHdDQUNBejVDLEtBQUEsS0FBQWtnRSxLQUFBLFlBQUF0L0QsS0FBQSxLQUFBMG1CLEtBQUEsUUFDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxtQkFBQW15QixLQUFBLGtCQUNBejVDLEtBQUEsT0FBQWtnRSxLQUFBLGNBQUF0L0QsS0FBQSxPQUFBMG1CLEtBQUEsVUFDQXRuQixLQUFBLFVBQUFrZ0UsS0FBQSxpQkFBQXQvRCxLQUFBLFVBQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEscUJBQUFrZ0UsS0FBQSwwQkFBQXQvRCxLQUFBLG1CQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLFFBQ0F0bkIsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLE9BQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLHFCQUFBdC9ELEtBQUEsZUFBQTBtQixLQUFBLFFBQUFzM0QsT0FBQSxnQkFDQTUrRSxLQUFBLE9BQUFrZ0UsS0FBQSxZQUFBdC9ELEtBQUEsWUFBQTBtQixLQUFBLGlDQUFBczNELE9BQUEsV0FDQTUrRSxLQUFBLE9BQUFrZ0UsS0FBQSxlQUFBdC9ELEtBQUEsU0FDQVosS0FBQSxNQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsY0FBQXMzRCxPQUFBLFVBQ0E1K0UsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsb0JBQUFrZ0UsS0FBQSxvQkFBQXQvRCxLQUFBLGVBQUEwbUIsS0FBQSxPQUFBczNELE9BQUEsU0FDQTUrRSxLQUFBLGFBQUEwckUsT0FBQSxrSEFDTDlxRSxLQUFBLGFBQUEwbUIsS0FBQSxNQUFBczNELE9BQUEsNEJBQ0s1K0UsS0FBQSxPQUFBMHJFLE9BQUEseUNBQUE5cUUsS0FBQSxhQUFBMG1CLEtBQUEsY0FBQXMzRCxPQUFBLFdBQ0E1K0UsS0FBQSxVQUFBa2dFLEtBQUEsc0JBQUF0L0QsS0FBQSxhQUFBMG1CLEtBQUEsVUFBQXMzRCxPQUFBLFlBQ0E1K0UsS0FBQSxNQUFBa2dFLEtBQUEsV0FBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLE9BQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEseUJBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLFFBQ0F0bkIsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsYUFBQWtnRSxLQUFBLG9CQUFBdC9ELEtBQUEsYUFBQTBtQixLQUFBLE1BQUFzM0QsT0FBQSxRQUNBNStFLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFdBQUFrZ0UsS0FBQSxrQkFBQXQvRCxLQUFBLFdBQUEwbUIsS0FBQSx5QkFDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxZQUFBdC9ELEtBQUEsU0FDQVosS0FBQSxjQUFBa2dFLEtBQUEsaUJBQUF0L0QsS0FBQSxRQUNBWixLQUFBLGNBQUFrZ0UsS0FBQSxxQkFBQXQvRCxLQUFBLGNBQUEwbUIsS0FBQSxZQUNBdG5CLEtBQUEsV0FBQWtnRSxLQUFBLGtCQUFBdC9ELEtBQUEsV0FBQTBtQixLQUFBLFFBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGVBQUF0L0QsS0FBQSxRQUNBWixLQUFBLE9BQUFrZ0UsS0FBQSxtQkFBQXQvRCxLQUFBLE9BQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsUUFBQWtnRSxLQUFBLGVBQUF0L0QsS0FBQSxRQUNBWixLQUFBLFFBQUFrZ0UsS0FBQSxvQkFBQXQvRCxLQUFBLFFBQUE2NEMsS0FBQSxvQkFDQXo1QyxLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLGVBQ0F0bkIsS0FBQSxXQUFBMHJFLE9BQUEsZ0VBQ0w5cUUsS0FBQSxXQUFBMG1CLEtBQUEsYUFDS3RuQixLQUFBLGNBQUFrZ0UsS0FBQSxvQkFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxVQUFBczNELE9BQUEsd0JBQ0E1K0UsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSwwQkFDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxPQUNBdG5CLEtBQUEsS0FBQWtnRSxLQUFBLFlBQUF0L0QsS0FBQSxLQUFBMG1CLEtBQUEsUUFDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxhQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLE9BQUF0L0QsS0FBQSxRQUFBMG1CLEtBQUEsWUFDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLGFBQ0F0bkIsS0FBQSxNQUFBMHJFLE9BQUEsdUVBQUE5cUUsS0FBQSxNQUFBMG1CLEtBQUEsNkNBQ0F0bkIsS0FBQSxNQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsYUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxPQUFBMG1CLEtBQUEsMENBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsYUFBQWtnRSxLQUFBLDJCQUFBdC9ELEtBQUEsYUFBQTBtQixLQUFBLHVCQUNBdG5CLEtBQUEsbUJBQUFrZ0UsS0FBQSxvQkFBQXQvRCxLQUFBLGFBQUEwbUIsS0FBQSx5QkFBQXMzRCxPQUFBLHNCQUNBNStFLEtBQUEsV0FBQWtnRSxLQUFBLGtCQUFBdC9ELEtBQUEsV0FBQTBtQixLQUFBLFdBQ0F0bkIsS0FBQSxTQUFBa2dFLEtBQUEsZ0JBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsMEJBQUFteUIsS0FBQSxtQkFDQXo1QyxLQUFBLFNBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEsSUFBQWtnRSxLQUFBLFdBQUF0L0QsS0FBQSxJQUFBMG1CLEtBQUEsT0FDQXRuQixLQUFBLElBQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsSUFBQTBtQixLQUFBLFNBQUFzM0QsT0FBQSxhQUNBNStFLEtBQUEsbUJBQUFrZ0UsS0FBQSxhQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLE9BQUFzM0QsT0FBQSxTQUNBNStFLEtBQUEsY0FBQWtnRSxLQUFBLHFCQUFBdC9ELEtBQUEsUUFDQVosS0FBQSxXQUFBa2dFLEtBQUEsa0JBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsVUFDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLE1BQUFzM0QsT0FBQSx1Q0FDQTUrRSxLQUFBLE9BQUFrZ0UsS0FBQSxpQkFBQXQvRCxLQUFBLE9BQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLFVBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxXQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLGNBQ0F0bkIsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsUUFBQTByRSxPQUFBLGdDQUFBOXFFLEtBQUEsUUFBQTBtQixLQUFBLG1CQUFBczNELE9BQUEsbUJBQUFubEMsS0FBQSxlQUNBejVDLEtBQUEsUUFBQWtnRSxLQUFBLG9CQUFBdC9ELEtBQUEsUUFBQTBtQixLQUFBLGlCQUNBdG5CLEtBQUEsT0FBQTByRSxPQUFBLG9DQUFBOXFFLEtBQUEsT0FBQTBtQixLQUFBLFVBQ0F0bkIsS0FBQSxZQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFlBQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLFNBQ0FaLEtBQUEsTUFBQWtnRSxLQUFBLGFBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsaUNBQ0F0bkIsS0FBQSxNQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxPQUFBczNELE9BQUEsc0JBQ0E1K0UsS0FBQSxTQUFBa2dFLEtBQUEsMkJBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsZUFBQXMzRCxPQUFBLFlBQ0E1K0UsS0FBQSxjQUFBa2dFLEtBQUEscUJBQUF0L0QsS0FBQSxjQUFBZytFLE9BQUEscUJBQ0E1K0UsS0FBQSxNQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsU0FBQWtnRSxLQUFBLGdCQUFBdC9ELEtBQUEsUUFDQVosS0FBQSxXQUFBa2dFLEtBQUEsa0JBQUF0L0QsS0FBQSxRQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLFVBQ0F0bkIsS0FBQSxRQUFBa2dFLEtBQUEsZUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSxXQUNBdG5CLEtBQUEsT0FBQWtnRSxLQUFBLGNBQUF0L0QsS0FBQSxTQUNBWixLQUFBLFFBQUFrZ0UsS0FBQSxlQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLG9CQUFBczNELE9BQUEsU0FDQTUrRSxLQUFBLGdCQUFBa2dFLEtBQUEsdUJBQUF0L0QsS0FBQSxVQUFBMG1CLEtBQUEsa0JBQ0F0bkIsS0FBQSxNQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsVUFBQTBtQixLQUFBLGFBQ0F0bkIsS0FBQSxjQUFBa2dFLEtBQUEsb0JBQUF0L0QsS0FBQSxlQUNBWixLQUFBLFlBQUFrZ0UsS0FBQSxZQUFBdC9ELEtBQUEsU0FDQVosS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLE9BQUEwbUIsS0FBQSxVQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsWUFDQVosS0FBQSxRQUFBa2dFLEtBQUEsYUFBQXQvRCxLQUFBLFFBQUEwbUIsS0FBQSx1Q0FDQXRuQixLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsT0FBQTBtQixLQUFBLDJCQUNBdG5CLEtBQUEsV0FBQWtnRSxLQUFBLGtCQUFBdC9ELEtBQUEsV0FBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxTQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsYUFBQWtnRSxLQUFBLHlCQUFBdC9ELEtBQUEsYUFBQTBtQixLQUFBLE1BQUFzM0QsT0FBQSxRQUNBNStFLEtBQUEsaUJBQUFrZ0UsS0FBQSxzQkFBQXQvRCxLQUFBLE1BQUEwbUIsS0FBQSxPQUFBczNELE9BQUEsU0FDQTUrRSxLQUFBLE9BQUFrZ0UsS0FBQSxjQUFBdC9ELEtBQUEsU0FDQVosS0FBQSxVQUFBa2dFLEtBQUEsZ0JBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsWUFDQXRuQixLQUFBLFNBQUFrZ0UsS0FBQSxZQUFBdC9ELEtBQUEsS0FBQTBtQixLQUFBLFFBQ0F0bkIsS0FBQSxXQUFBa2dFLEtBQUEsZ0JBQUF0L0QsS0FBQSxXQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLFdBQUFrZ0UsS0FBQSxnQkFBQXQvRCxLQUFBLFdBQUEwbUIsS0FBQSxTQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsVUFBQTBtQixLQUFBLE9BQ0F0bkIsS0FBQSxPQUFBa2dFLEtBQUEsY0FBQXQvRCxLQUFBLE9BQUEwbUIsS0FBQSxnQkFDQXRuQixLQUFBLG1CQUFBMHJFLE9BQUEsNkJBQUE5cUUsS0FBQSxNQUFBMG1CLEtBQUEsU0FDQXRuQixLQUFBLE1BQUEwckUsT0FBQSw4QkFBQTlxRSxLQUFBLE1BQUEwbUIsS0FBQSx5QkFBQXMzRCxPQUFBLHNCQUNBNStFLEtBQUEsU0FBQWtnRSxLQUFBLHFCQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLGlCQUNBdG5CLEtBQUEsUUFBQWtnRSxLQUFBLGVBQUF0L0QsS0FBQSxRQUFBMG1CLEtBQUEsUUFDQXRuQixLQUFBLE9BQUEwckUsT0FBQSwyQkFBQTlxRSxLQUFBLE9BQUEwbUIsS0FBQSxjQUFBczNELE9BQUEsU0FDQTUrRSxLQUFBLE1BQUFrZ0UsS0FBQSxhQUFBdC9ELEtBQUEsTUFBQTBtQixLQUFBLFNBQ0F0bkIsS0FBQSxTQUFBa2dFLEtBQUEsZ0JBQUF0L0QsS0FBQSxTQUFBMG1CLEtBQUEsMEJBQ0F0bkIsS0FBQSxLQUFBa2dFLEtBQUEsWUFBQXQvRCxLQUFBLFNBQUEwbUIsS0FBQSxRQUNBdG5CLEtBQUEsVUFBQWtnRSxLQUFBLGlCQUFBdC9ELEtBQUEsU0FBQTBtQixLQUFBLGFBR0wsUUFBQTduQixFQUFBLEVBQWlCQSxFQUFBNjZDLEVBQUFxa0MsU0FBQXY2RSxPQUFnQzNFLElBQUEsQ0FDakQsSUFBQTRjLEVBQUFpK0IsRUFBQXFrQyxTQUFBbC9FLEdBQ0E0YyxFQUFBcXZELFFBQUFydkQsRUFBQTZqRCxLQUFBN2pELEVBQUFxdkQsTUFBQSxJQUdBcHhCLEVBQUF1a0MsZUFBQSxTQUFBM2UsR0FDQUEsSUFBQW4xRCxjQUNBLFFBQUF0TCxFQUFBLEVBQW1CQSxFQUFBNjZDLEVBQUFxa0MsU0FBQXY2RSxPQUFnQzNFLElBQUEsQ0FDbkQsSUFBQTRjLEVBQUFpK0IsRUFBQXFrQyxTQUFBbC9FLEdBQ0EsR0FBQTRjLEVBQUE2akQsUUFBQSxPQUFBN2pELEVBQ0EsR0FBQUEsRUFBQXF2RCxNQUFBLFFBQUE3MUQsRUFBQSxFQUFxQ0EsRUFBQXdHLEVBQUFxdkQsTUFBQXRuRSxPQUF1QnlSLElBQzVELEdBQUF3RyxFQUFBcXZELE1BQUE3MUQsSUFBQXFxRCxFQUFBLE9BQUE3akQsRUFFQSxlQUFBeGEsS0FBQXErRCxHQUFBNWxCLEVBQUF1a0MsZUFBQSxtQkFDQSxVQUFBaDlFLEtBQUFxK0QsR0FBQTVsQixFQUFBdWtDLGVBQUEsNEJBR0F2a0MsRUFBQXdrQyxvQkFBQSxTQUFBeDNELEdBQ0EsUUFBQTduQixFQUFBLEVBQW1CQSxFQUFBNjZDLEVBQUFxa0MsU0FBQXY2RSxPQUFnQzNFLElBQUEsQ0FDbkQsSUFBQTRjLEVBQUFpK0IsRUFBQXFrQyxTQUFBbC9FLEdBQ0EsR0FBQTRjLEVBQUFpTCxJQUFBLFFBQUF6UixFQUFBLEVBQW1DQSxFQUFBd0csRUFBQWlMLElBQUFsakIsT0FBcUJ5UixJQUN4RCxHQUFBd0csRUFBQWlMLElBQUF6UixJQUFBeVIsRUFBQSxPQUFBakwsSUFJQWkrQixFQUFBeWtDLG1CQUFBLFNBQUFDLEdBQ0EsUUFBQXYvRSxFQUFBLEVBQW1CQSxFQUFBNjZDLEVBQUFxa0MsU0FBQXY2RSxPQUFnQzNFLElBQUEsQ0FDbkQsSUFBQTRjLEVBQUFpK0IsRUFBQXFrQyxTQUFBbC9FLEdBQ0EsR0FBQTRjLEVBQUFvOUIsTUFBQXA5QixFQUFBbzlCLEtBQUE1M0MsS0FBQW05RSxHQUFBLE9BQUEzaUUsRUFFQSxJQUFBNGlFLEVBQUFELEVBQUFqUSxZQUFBLEtBQ0F6bkQsRUFBQTIzRCxHQUFBLEdBQUFELEVBQUFwUyxVQUFBcVMsRUFBQSxFQUFBRCxFQUFBNTZFLFFBQ0EsR0FBQWtqQixFQUFBLE9BQUFnekIsRUFBQXdrQyxvQkFBQXgzRCxJQUdBZ3pCLEVBQUFteEIsZUFBQSxTQUFBenJFLEdBQ0FBLElBQUErSyxjQUNBLFFBQUF0TCxFQUFBLEVBQW1CQSxFQUFBNjZDLEVBQUFxa0MsU0FBQXY2RSxPQUFnQzNFLElBQUEsQ0FDbkQsSUFBQTRjLEVBQUFpK0IsRUFBQXFrQyxTQUFBbC9FLEdBQ0EsR0FBQTRjLEVBQUFyYyxLQUFBK0ssZUFBQS9LLEVBQUEsT0FBQXFjLEVBQ0EsR0FBQUEsRUFBQXVpRSxNQUFBLFFBQUEvb0UsRUFBQSxFQUFxQ0EsRUFBQXdHLEVBQUF1aUUsTUFBQXg2RSxPQUF1QnlSLElBQzVELEdBQUF3RyxFQUFBdWlFLE1BQUEvb0UsR0FBQTlLLGVBQUEvSyxFQUFBLE9BQUFxYyxJQWhOQXVpQyxDQUFRci9DLEVBQVEsc0JDS2YsU0FBQSs2QyxHQUNELGFBRUEsSUFBQTRrQyxFQUFBLGduQ0FFQTVrQyxFQUFBeWxCLFdBQUEsZUFBQXdHLEVBQUE0WSxHQUNBLElBQUFDLEVBQUEsRUFLQUMsR0FDQS9pRSxXQUFBLFdBQ0EsT0FDQTNILE1BQUEsRUFDQTJxRSxXQUFBLEVBQ0FDLFVBQUEsSUFHQXZqRSxVQUFBLFNBQUF4YSxHQUNBLE9BQ0FtVCxLQUFBblQsRUFBQW1ULEtBQ0EycUUsVUFBQTk5RSxFQUFBODlFLFVBQ0FDLFNBQUEvOUUsRUFBQSs5RSxXQUdBbCtELE1BQUEsU0FBQUosRUFBQWhGLEdBSUEsR0FIQUEsRUFBQXF5RCxjQUFBLEtBR0FyeUQsRUFBQXFqRSxVQUNBLE9BQUFyK0QsRUFBQTVkLE1BQUEsVUFDQTRZLEVBQUFxakUsV0FBQSxFQUNBLE9BRUFyK0QsRUFBQTNELFlBQ0EsTUFLQSxHQUhBMkQsRUFBQWxFLFFBQ0FkLEVBQUF0SCxNQUFBLEdBRUFzTSxFQUFBbEUsT0FBQWtFLEVBQUE1ZCxNQUFBLFNBR0EsT0FGQTRkLEVBQUEzRCxZQUNBckIsRUFBQXFqRSxXQUFBLEVBQ0EsS0FHQSxTQUFBcitELEVBQUFqRSxPQUFBLENBQ0FpRSxFQUFBL0QsT0FDQSxJQUFBL0csRUFBQThLLEVBQUF2WCxJQUNBdVgsRUFBQTdELFNBQUEsS0FDQSxJQUFBb2lFLEVBQUEsRUFBQXYrRCxFQUFBdlgsSUFBQXlNLEVBU0EsT0FSQThGLEVBQUF0SCxLQUlBNnFFLElBQUFKLElBQ0FuakUsRUFBQXRILE1BQUEsSUFKQXlxRSxFQUFBSSxFQUNBdmpFLEVBQUF0SCxNQUFBLEdBTUEsS0FDTyxHQUFBc0gsRUFBQXRILEtBRVAsT0FEQXNNLEVBQUEvRCxPQUNBLEtBR0EsR0FBQStELEVBQUE1RCxXQUVBLE9BREFwQixFQUFBc2pFLFVBQUEsRUFDQSxLQUVBLElBQUF0K0QsRUFBQWxFLE9BQUFkLEVBQUFzakUsWUFDQXRqRSxFQUFBc2pFLFVBQUEsR0FDQSxJQUFBSixFQUFBTSxhQUFBLENBQ0EsR0FBQXgrRCxFQUFBNWQsTUFBQSxnRkFLQSxPQURBNFksRUFBQXF5RCxlQUFBLEVBQ0EsT0FDVyxHQUFBcnRELEVBQUE1ZCxNQUFBLHdEQUtYLE9BREE0WSxFQUFBcXlELGVBQUEsRUFDQSxPQUlBLE9BQUFydEQsRUFBQTVkLE1BQUE2N0UsSUFDQSxNQUFBaitELEVBQUFuWixPQUFBNUQsTUFBQStjLEVBQUExYSxNQUFBLEVBQUEwYSxFQUFBMWEsU0FDQSxHQUFBMGEsRUFBQTFhLE9BQUEsS0FBQTFFLEtBQUFvZixFQUFBblosT0FBQTRELE9BQUF1VixFQUFBMWEsTUFBQSxNQUtBMFYsRUFBQXF5RCxlQUFBLEVBQ0EsU0FFQXJ0RCxFQUFBL0QsT0FDQSxPQUVBa0UsVUE5RkEsU0FBQW5GLEdBRUEsT0FEQUEsRUFBQXRILE1BQUEsRUFDQSxPQStGQStxRSxHQUNBclksV0FBQSxFQUNBQyxlQUFBLEVBQ0FDLE9BQUEsR0FFQSxRQUFBNFEsS0FBQWdILEVBQ0FPLEVBQUF2SCxHQUFBZ0gsRUFBQWhILEdBR0EsT0FEQXVILEVBQUExL0UsS0FBQSxXQUNBczZDLEVBQUF5ekIsWUFBQXp6QixFQUFBaC9CLFFBQUFpckQsRUFBQW1aLEdBQUFMLElBRUMsWUFFRC9rQyxFQUFBMmxCLFdBQUEsb0JBMUhBcmhCLENBQVFyL0MsRUFBUSxHQUF5QkEsRUFBUSxHQUF5QkEsRUFBUSxzQkNLakYsU0FBQSs2QyxHQUNELGFBRUFBLEVBQUF5bEIsV0FBQSxzQkFBQXdHLEVBQUFvWixHQUNBLElBNkNBcHZFLEVBQUF2TCxFQTdDQWd0RCxFQUFBdVUsRUFBQXZVLFdBQ0E0dEIsRUFBQUQsRUFBQUMsZ0JBQ0FDLEVBQUFGLEVBQUFHLE9BQ0FDLEVBQUFKLEVBQUFLLE1BQUFILEVBQ0FJLEVBQUFOLEVBQUFPLFdBQ0FDLEVBQUFSLEVBQUFTLGdCQUFBLG1CQUlBQyxFQUFBLFdBQ0EsU0FBQUMsRUFBQS92RSxHQUF1QixPQUFRQSxPQUFBdEwsTUFBQSxXQUMvQixJQUFBczdFLEVBQUFELEVBQUEsYUFBQUUsRUFBQUYsRUFBQSxhQUFBRyxFQUFBSCxFQUFBLGFBQUFJLEVBQUFKLEVBQUEsYUFDQUssRUFBQUwsRUFBQSxZQUFBTSxHQUEyQ3J3RSxLQUFBLE9BQUF0TCxNQUFBLFFBRTNDLE9BQ0E0N0UsR0FBQVAsRUFBQSxNQUFBUSxNQUFBUCxFQUFBUSxLQUFBUixFQUFBUyxLQUFBUixFQUFBUyxHQUFBVCxFQUFBVSxJQUFBVixFQUFBVyxRQUFBWCxFQUNBWSxPQUFBVixFQUFBVyxNQUFBWCxFQUFBWSxTQUFBWixFQUFBYSxJQUFBakIsRUFBQSxPQUFBa0IsT0FBQWYsRUFBQWdCLEtBQUFoQixFQUFBaUIsTUFBQWpCLEVBQ0FrQixTQUFBckIsRUFBQSxZQUFBc0IsSUFBQXRCLEVBQUEsT0FBQXVCLE1BQUF2QixFQUFBLE9BQUF3QixJQUFBeEIsRUFBQSxPQUNBeUIsU0FBQXpCLEVBQUEsWUFBQXJKLE1BQUFxSixFQUFBLFNBQ0EwQixJQUFBMUIsRUFBQSxPQUFBMkIsT0FBQTNCLEVBQUEsVUFBQTRCLEtBQUE1QixFQUFBLFFBQUFoZCxRQUFBZ2QsRUFBQSxXQUNBNkIsR0FBQXhCLEVBQUF5QixPQUFBekIsRUFBQTBCLFdBQUExQixFQUNBMkIsS0FBQTFCLEVBQUEyQixNQUFBM0IsRUFBQXhpRCxLQUFBd2lELEVBQUEzakUsVUFBQTJqRSxFQUFBNXlDLElBQUE0eUMsRUFBQW43RCxTQUFBbTdELEVBQ0FuNEUsS0FBQTYzRSxFQUFBLFFBQUFrQyxNQUFBbEMsRUFBQSxTQUFBbUMsTUFBQW5DLEVBQUEsUUFDQW9DLE1BQUFqQyxFQUFBa0MsT0FBQXJDLEVBQUEsVUFBQXNDLE9BQUF0QyxFQUFBLFVBQUF1QyxRQUFBcEMsRUFDQXFDLE1BQUFyQyxHQWZBLEdBbUJBc0MsRUFBQSxvQkFDQUMsRUFBQSx3RkFpQkEsU0FBQWxLLEVBQUFtSyxFQUFBaCtFLEVBQUFpK0UsR0FFQSxPQURBM3lFLEVBQUEweUUsRUFBY2orRSxFQUFBaytFLEVBQ2RqK0UsRUFFQSxTQUFBaytFLEVBQUFsaUUsRUFBQWhGLEdBQ0EsSUFBQXBSLEVBQUFvVyxFQUFBL0QsT0FDQSxRQUFBclMsR0FBQSxLQUFBQSxFQUVBLE9BREFvUixFQUFBOHRELFNBNkRBLFNBQUFwSCxHQUNBLGdCQUFBMWhELEVBQUFoRixHQUNBLElBQUFpQixFQUFBa21FLEdBQUEsRUFDQSxHQUFBdkQsR0FBQSxLQUFBNStELEVBQUFqRSxRQUFBaUUsRUFBQTVkLE1BQUEyL0UsR0FFQSxPQURBL21FLEVBQUE4dEQsU0FBQW9aLEVBQ0FySyxFQUFBLHlCQUVBLFlBQUE1N0QsRUFBQStELEVBQUEvRCxVQUNBQSxHQUFBeWxELEdBQUF5Z0IsSUFDQUEsTUFBQSxNQUFBbG1FLEVBR0EsT0FEQWttRSxJQUFBbm5FLEVBQUE4dEQsU0FBQW9aLEdBQ0FySyxFQUFBLG9CQXpFQXVLLENBQUF4NEUsR0FDQW9SLEVBQUE4dEQsU0FBQTlvRCxFQUFBaEYsR0FDSyxRQUFBcFIsR0FBQW9XLEVBQUE1ZCxNQUFBLDBCQUNMLE9BQUF5MUUsRUFBQSxtQkFDSyxRQUFBanVFLEdBQUFvVyxFQUFBNWQsTUFBQSxNQUNMLE9BQUF5MUUsRUFBQSxpQkFDSyx3QkFBd0JqM0UsS0FBQWdKLEdBQzdCLE9BQUFpdUUsRUFBQWp1RSxHQUNLLFFBQUFBLEdBQUFvVyxFQUFBOUQsSUFBQSxLQUNMLE9BQUEyN0QsRUFBQSxpQkFDSyxRQUFBanVFLEdBQUFvVyxFQUFBNWQsTUFBQSxvQ0FDTCxPQUFBeTFFLEVBQUEsbUJBQ0ssUUFBQWozRSxLQUFBZ0osR0FFTCxPQURBb1csRUFBQTVkLE1BQUEsMkNBQ0F5MUUsRUFBQSxtQkFDSyxRQUFBanVFLEVBQ0wsT0FBQW9XLEVBQUE5RCxJQUFBLE1BQ0FsQixFQUFBOHRELFNBQUF1WixFQUNBQSxFQUFBcmlFLEVBQUFoRixJQUNPZ0YsRUFBQTlELElBQUEsTUFDUDhELEVBQUEzRCxZQUNBdzdELEVBQUEsc0JBQ095SyxHQUFBdGlFLEVBQUFoRixFQUFBLElBNUNQLFNBQUFnRixHQUVBLElBREEsSUFBQS9ELEVBQUFrbUUsR0FBQSxFQUFBSSxHQUFBLEVBQ0EsT0FBQXRtRSxFQUFBK0QsRUFBQS9ELFNBQUEsQ0FDQSxJQUFBa21FLEVBQUEsQ0FDQSxRQUFBbG1FLElBQUFzbUUsRUFBQSxPQUNBLEtBQUF0bUUsRUFBQXNtRSxHQUFBLEVBQ0FBLEdBQUEsS0FBQXRtRSxJQUFBc21FLEdBQUEsR0FFQUosTUFBQSxNQUFBbG1FLEdBcUNBdW1FLENBQUF4aUUsR0FDQUEsRUFBQTVkLE1BQUEscUNBQ0F5MUUsRUFBQSx1QkFFQTczRCxFQUFBOUQsSUFBQSxLQUNBMjdELEVBQUEsc0JBQUE3M0QsRUFBQWxkLFlBRUssUUFBQThHLEVBRUwsT0FEQW9SLEVBQUE4dEQsU0FBQTJaLEVBQ0FBLEVBQUF6aUUsRUFBQWhGLEdBQ0ssUUFBQXBSLEVBRUwsT0FEQW9XLEVBQUEzRCxZQUNBdzdELEVBQUEsaUJBQ0ssR0FBQWlLLEVBQUFsaEYsS0FBQWdKLEdBU0wsTUFSQSxLQUFBQSxHQUFBb1IsRUFBQTBuRSxTQUFBLEtBQUExbkUsRUFBQTBuRSxRQUFBcHpFLE9BQ0EwUSxFQUFBOUQsSUFBQSxLQUNBLEtBQUF0UyxHQUFBLEtBQUFBLEdBQUFvVyxFQUFBOUQsSUFBQSxLQUNTLFdBQUF0YixLQUFBZ0osS0FDVG9XLEVBQUE5RCxJQUFBdFMsR0FDQSxLQUFBQSxHQUFBb1csRUFBQTlELElBQUF0UyxLQUdBaXVFLEVBQUEsc0JBQUE3M0QsRUFBQWxkLFdBQ0ssR0FBQW84RSxFQUFBdCtFLEtBQUFnSixHQUFBLENBQ0xvVyxFQUFBN0QsU0FBQStpRSxHQUNBLElBQUFsd0IsRUFBQWh2QyxFQUFBbGQsVUFDQSxRQUFBa1ksRUFBQTJuRSxTQUFBLENBQ0EsR0FBQXZELEVBQUF3RCxxQkFBQTV6QixHQUFBLENBQ0EsSUFBQXF3QixFQUFBRCxFQUFBcHdCLEdBQ0EsT0FBQTZvQixFQUFBd0gsRUFBQS92RSxLQUFBK3ZFLEVBQUFyN0UsTUFBQWdyRCxHQUVBLFlBQUFBLEdBQUFodkMsRUFBQTVkLE1BQUEsaUNBQ0EsT0FBQXkxRSxFQUFBLGtCQUFBN29CLEdBRUEsT0FBQTZvQixFQUFBLHNCQUFBN29CLElBb0JBLFNBQUFxekIsRUFBQXJpRSxFQUFBaEYsR0FFQSxJQURBLElBQUFwUixFQUFBaTVFLEdBQUEsRUFDQWo1RSxFQUFBb1csRUFBQS9ELFFBQUEsQ0FDQSxRQUFBclMsR0FBQWk1RSxFQUFBLENBQ0E3bkUsRUFBQTh0RCxTQUFBb1osRUFDQSxNQUVBVyxFQUFBLEtBQUFqNUUsRUFFQSxPQUFBaXVFLEVBQUEscUJBR0EsU0FBQTRLLEVBQUF6aUUsRUFBQWhGLEdBRUEsSUFEQSxJQUFBaUIsRUFBQWttRSxHQUFBLEVBQ0EsT0FBQWxtRSxFQUFBK0QsRUFBQS9ELFNBQUEsQ0FDQSxJQUFBa21FLElBQUEsS0FBQWxtRSxHQUFBLEtBQUFBLEdBQUErRCxFQUFBOUQsSUFBQSxNQUFrRSxDQUNsRWxCLEVBQUE4dEQsU0FBQW9aLEVBQ0EsTUFFQUMsTUFBQSxNQUFBbG1FLEVBRUEsT0FBQTQ3RCxFQUFBLG1CQUFBNzNELEVBQUFsZCxXQUdBLElBQUFnZ0YsRUFBQSxTQVFBLFNBQUFDLEVBQUEvaUUsRUFBQWhGLEdBQ0FBLEVBQUFnb0UsYUFBQWhvRSxFQUFBZ29FLFdBQUEsTUFDQSxJQUFBQyxFQUFBampFLEVBQUFuWixPQUFBTSxRQUFBLEtBQUE2WSxFQUFBMWEsT0FDQSxLQUFBMjlFLEVBQUEsSUFFQSxHQUFBakUsRUFBQSxDQUNBLElBQUFwZ0YsRUFBQSw2Q0FBb0RtQyxLQUFBaWYsRUFBQW5aLE9BQUE1RCxNQUFBK2MsRUFBQTFhLE1BQUEyOUUsSUFDcERya0YsSUFBQXFrRixFQUFBcmtGLEVBQUFzRSxPQUlBLElBREEsSUFBQXM0RSxFQUFBLEVBQUEwSCxHQUFBLEVBQ0F6NkUsRUFBQXc2RSxFQUFBLEVBQTZCeDZFLEdBQUEsSUFBVUEsRUFBQSxDQUN2QyxJQUFBbUIsRUFBQW9XLEVBQUFuWixPQUFBNEQsT0FBQWhDLEdBQ0EwNkUsRUFBQUwsRUFBQTM3RSxRQUFBeUMsR0FDQSxHQUFBdTVFLEdBQUEsR0FBQUEsRUFBQSxHQUNBLElBQUEzSCxFQUFBLEdBQXFCL3lFLEVBQU8sTUFDNUIsUUFBQSt5RSxFQUFBLENBQTJCLEtBQUE1eEUsSUFBQXM1RSxHQUFBLEdBQW9DLFlBQ3hELEdBQUFDLEdBQUEsR0FBQUEsRUFBQSxJQUNQM0gsT0FDTyxHQUFBMEQsRUFBQXQrRSxLQUFBZ0osR0FDUHM1RSxHQUFBLE1BQ08sYUFBQXRpRixLQUFBZ0osR0FDUCxPQUNPLEdBQUFzNUUsSUFBQTFILEVBQUEsR0FDUC95RSxFQUNBLFFBR0F5NkUsSUFBQTFILElBQUF4Z0UsRUFBQWdvRSxXQUFBdjZFLElBS0EsSUFBQTI2RSxHQUFxQnpELE1BQUEsRUFBQTBELFFBQUEsRUFBQUMsVUFBQSxFQUFBejhFLFFBQUEsRUFBQTA4RSxRQUFBLEVBQUEvN0UsTUFBQSxFQUFBZzhFLGtCQUFBLEdBRXJCLFNBQUFDLEVBQUFsa0UsRUFBQS9DLEVBQUFsTixFQUFBNG9CLEVBQUE3akIsRUFBQStHLEdBQ0E1VCxLQUFBK1gsV0FDQS9YLEtBQUFnVixTQUNBaFYsS0FBQThILE9BQ0E5SCxLQUFBNk0sT0FDQTdNLEtBQUE0VCxPQUNBLE1BQUE4YyxJQUFBMXdCLEtBQUEwd0IsU0FHQSxTQUFBd3JELEVBQUExb0UsRUFBQTJvRSxHQUNBLFFBQUFwMEMsRUFBQXYwQixFQUFBNG9FLFVBQWlDcjBDLEVBQUdBLElBQUF0ekIsS0FDcEMsR0FBQXN6QixFQUFBeHdDLE1BQUE0a0YsRUFBQSxTQUNBLFFBQUFFLEVBQUE3b0UsRUFBQTBDLFFBQWdDbW1FLEVBQUlBLElBQUF4dkUsS0FDcEMsUUFBQWs3QixFQUFBczBDLEVBQUFDLEtBQTJCdjBDLEVBQUdBLElBQUF0ekIsS0FDOUIsR0FBQXN6QixFQUFBeHdDLE1BQUE0a0YsRUFBQSxTQTJCQSxJQUFBRSxHQUFZN29FLE1BQUEsS0FBQXdCLE9BQUEsS0FBQTYyRCxPQUFBLEtBQUEwUSxHQUFBLE1BQ1osU0FBQUMsSUFDQSxRQUFBeGxGLEVBQUE2SCxVQUFBbEQsT0FBQSxFQUFzQzNFLEdBQUEsRUFBUUEsSUFBQXFsRixFQUFBRSxHQUFBLzZFLEtBQUEzQyxVQUFBN0gsSUFFOUMsU0FBQXlqRixJQUVBLE9BREErQixFQUFBMTlFLE1BQUEsS0FBQUQsWUFDQSxFQUVBLFNBQUE0OUUsRUFBQWxsRixFQUFBdW1CLEdBQ0EsUUFBQWlxQixFQUFBanFCLEVBQXNCaXFCLEVBQUdBLElBQUF0ekIsS0FBQSxHQUFBc3pCLEVBQUF4d0MsUUFBQSxTQUN6QixTQUVBLFNBQUFtbEYsRUFBQVAsR0FDQSxJQUFBM29FLEVBQUE2b0UsRUFBQTdvRSxNQUVBLEdBREE2b0UsRUFBQXhRLE9BQUEsTUFDQXI0RCxFQUFBMEMsUUFDQSxVQUFBMUMsRUFBQTBuRSxRQUFBdG5FLE1BQUFKLEVBQUEwQyxTQUFBMUMsRUFBQTBDLFFBQUE2cUQsTUFBQSxDQUVBLElBQUE0YixFQWNBLFNBQUFDLEVBQUFULEVBQUFqbUUsR0FDQSxHQUFBQSxFQUVLLElBQUFBLEVBQUE2cUQsTUFBQSxDQUNMLElBQUF2ckQsRUFBQW9uRSxFQUFBVCxFQUFBam1FLEVBQUFySixNQUNBLE9BQUEySSxFQUNBQSxHQUFBVSxFQUFBckosS0FBQXFKLEVBQ0EsSUFBQUwsRUFBQUwsRUFBQVUsRUFBQW9tRSxNQUFBLEdBRkEsS0FHSyxPQUFBRyxFQUFBTixFQUFBam1FLEVBQUFvbUUsTUFDTHBtRSxFQUVBLElBQUFMLEVBQUFLLEVBQUFySixLQUFBLElBQUFnd0UsRUFBQVYsRUFBQWptRSxFQUFBb21FLE9BQUEsR0FUQSxZQWhCQU0sQ0FBQVQsRUFBQTNvRSxFQUFBMEMsU0FDQSxTQUFBeW1FLEVBRUEsWUFEQW5wRSxFQUFBMEMsUUFBQXltRSxRQUdPLElBQUFGLEVBQUFOLEVBQUEzb0UsRUFBQTRvRSxXQUVQLFlBREE1b0UsRUFBQTRvRSxVQUFBLElBQUFTLEVBQUFWLEVBQUEzb0UsRUFBQTRvRSxZQUtBbEYsRUFBQTRGLGFBQUFMLEVBQUFOLEVBQUEzb0UsRUFBQXNwRSxjQUNBdHBFLEVBQUFzcEUsV0FBQSxJQUFBRCxFQUFBVixFQUFBM29FLEVBQUFzcEUsYUFpQkEsU0FBQUMsRUFBQXhsRixHQUNBLGdCQUFBQSxHQUFBLFdBQUFBLEdBQUEsYUFBQUEsR0FBQSxZQUFBQSxHQUFBLFlBQUFBLEVBS0EsU0FBQXNlLEVBQUFoSixFQUFBeXZFLEVBQUF2YixHQUF1Qy9nRSxLQUFBNk0sT0FBa0I3TSxLQUFBczhFLE9BQWtCdDhFLEtBQUErZ0UsUUFDM0UsU0FBQThiLEVBQUF0bEYsRUFBQWtkLEdBQTRCelUsS0FBQXpJLE9BQWtCeUksS0FBQXlVLE9BRTlDLElBQUF1b0UsRUFBQSxJQUFBSCxFQUFBLFdBQUFBLEVBQUEsbUJBQ0EsU0FBQUksSUFDQVosRUFBQTdvRSxNQUFBMEMsUUFBQSxJQUFBTCxFQUFBd21FLEVBQUE3b0UsTUFBQTBDLFFBQUFtbUUsRUFBQTdvRSxNQUFBNG9FLFdBQUEsR0FDQUMsRUFBQTdvRSxNQUFBNG9FLFVBQUFZLEVBRUEsU0FBQUUsSUFDQWIsRUFBQTdvRSxNQUFBMEMsUUFBQSxJQUFBTCxFQUFBd21FLEVBQUE3b0UsTUFBQTBDLFFBQUFtbUUsRUFBQTdvRSxNQUFBNG9FLFdBQUEsR0FDQUMsRUFBQTdvRSxNQUFBNG9FLFVBQUEsS0FFQSxTQUFBZSxJQUNBZCxFQUFBN29FLE1BQUE0b0UsVUFBQUMsRUFBQTdvRSxNQUFBMEMsUUFBQW9tRSxLQUNBRCxFQUFBN29FLE1BQUEwQyxRQUFBbW1FLEVBQUE3b0UsTUFBQTBDLFFBQUFySixLQUdBLFNBQUF1d0UsRUFBQXQxRSxFQUFBOEwsR0FDQSxJQUFBakMsRUFBQSxXQUNBLElBQUE2QixFQUFBNm9FLEVBQUE3b0UsTUFBQTQxQyxFQUFBNTFDLEVBQUF1RSxTQUNBLFdBQUF2RSxFQUFBMG5FLFFBQUFwekUsS0FBQXNoRCxFQUFBNTFDLEVBQUEwbkUsUUFBQW5qRSxjQUNBLFFBQUE5UyxFQUFBdU8sRUFBQTBuRSxRQUEwQ2oyRSxHQUFBLEtBQUFBLEVBQUE2QyxNQUFBN0MsRUFBQXlyQixNQUEyQ3pyQixJQUFBNEgsS0FDckZ1OEMsRUFBQW5rRCxFQUFBOFMsU0FDQXZFLEVBQUEwbkUsUUFBQSxJQUFBZSxFQUFBN3lCLEVBQUFpekIsRUFBQTdqRSxPQUFBeEQsU0FBQWxOLEVBQUEsS0FBQTBMLEVBQUEwbkUsUUFBQXRuRSxJQUdBLE9BREFqQyxFQUFBMHJFLEtBQUEsRUFDQTFyRSxFQUVBLFNBQUEyckUsSUFDQSxJQUFBOXBFLEVBQUE2b0UsRUFBQTdvRSxNQUNBQSxFQUFBMG5FLFFBQUFydUUsT0FDQSxLQUFBMkcsRUFBQTBuRSxRQUFBcHpFLE9BQ0EwTCxFQUFBdUUsU0FBQXZFLEVBQUEwbkUsUUFBQW5qRSxVQUNBdkUsRUFBQTBuRSxRQUFBMW5FLEVBQUEwbkUsUUFBQXJ1RSxNQUtBLFNBQUEwd0UsRUFBQUMsR0FNQSxPQUxBLFNBQUFDLEVBQUEzMUUsR0FDQSxPQUFBQSxHQUFBMDFFLEVBQUEvQyxJQUNBLEtBQUErQyxHQUEyQixLQUFBMTFFLEdBQWUsS0FBQUEsR0FBQSxLQUFBQSxFQUFBMDBFLElBQzFDL0IsRUFBQWdELElBS0EsU0FBQUMsRUFBQTUxRSxFQUFBN1AsR0FDQSxhQUFBNlAsRUFBQTJ5RSxFQUFBMkMsRUFBQSxTQUFBbmxGLEdBQUEwbEYsR0FBQUosRUFBQSxLQUE4RUQsR0FDOUUsYUFBQXgxRSxFQUFBMnlFLEVBQUEyQyxFQUFBLFFBQUFRLEVBQUFGLEVBQUFKLEdBQ0EsYUFBQXgxRSxFQUFBMnlFLEVBQUEyQyxFQUFBLFFBQUFNLEVBQUFKLEdBQ0EsYUFBQXgxRSxFQUFBdTBFLEVBQUE3akUsT0FBQTVkLE1BQUEsWUFBQTYvRSxNQUFBMkMsRUFBQSxRQUFBUyxFQUFBTixFQUFBLEtBQStIRCxHQUMvSCxZQUFBeDFFLEVBQUEyeUUsRUFBQThDLEVBQUEsTUFDQSxLQUFBejFFLEVBQWtCMnlFLEVBQUEyQyxFQUFBLEtBQXlCRixFQUFBbmMsR0FBQXVjLEVBQUFILEdBQzNDLEtBQUFyMUUsRUFBa0IyeUUsSUFDbEIsTUFBQTN5RSxHQUNBLFFBQUF1MEUsRUFBQTdvRSxNQUFBMG5FLFFBQUF0bkUsTUFBQXlvRSxFQUFBN29FLE1BQUErb0UsR0FBQUYsRUFBQTdvRSxNQUFBK29FLEdBQUE1Z0YsT0FBQSxJQUFBMmhGLEdBQ0FqQixFQUFBN29FLE1BQUErb0UsR0FBQXI1QyxLQUFBbTVDLEdBQ0E1QixFQUFBMkMsRUFBQSxRQUFBUSxFQUFBRixFQUFBSixFQUFBUSxLQUVBLFlBQUFoMkUsRUFBQTJ5RSxFQUFBc0QsSUFDQSxPQUFBajJFLEVBQUEyeUUsRUFBQTJDLEVBQUEsUUFBQVksR0FBQU4sRUFBQUosR0FDQSxTQUFBeDFFLEdBQUEwdkUsR0FBQSxhQUFBdi9FLEdBQTREb2tGLEVBQUF4USxPQUFBLFVBQXVCNE8sRUFBQTJDLEVBQUEsUUFBQTdoRixHQUFBK2hGLElBQ25GLFlBQUF4MUUsRUFDQTB2RSxHQUFBLFdBQUF2L0UsR0FDQW9rRixFQUFBeFEsT0FBQSxVQUNBNE8sRUFBQWlELElBQ09sRyxJQUFBLFVBQUF2L0UsR0FBQSxRQUFBQSxHQUFBLFFBQUFBLElBQUFva0YsRUFBQTdqRSxPQUFBNWQsTUFBQSxjQUNQeWhGLEVBQUF4USxPQUFBLFVBQ0EsUUFBQTV6RSxFQUFBd2lGLEVBQUF3RCxJQUNBLFFBQUFobUYsRUFBQXdpRixFQUFBeUQsR0FBQVgsRUFBQSxZQUFBVyxHQUFBWCxFQUFBLE1BQ0E5QyxFQUFBMkMsRUFBQSxRQUFBbG9FLEdBQUFxb0UsRUFBQSxLQUE0REgsRUFBQSxLQUFjcmMsR0FBQXVjLE1BQ25FOUYsR0FBQSxhQUFBdi9FLEdBQ1Bva0YsRUFBQXhRLE9BQUEsVUFDQTRPLEVBQUEyQyxFQUFBLFFBQUFlLEVBQUFwZCxHQUFBdWMsSUFDTzlGLEdBQUEsWUFBQXYvRSxHQUNQb2tGLEVBQUF4USxPQUFBLFVBQ0E0TyxFQUFBaUQsSUFFQWpELEVBQUEyQyxFQUFBLFFBQUFnQixHQUdBLFVBQUF0MkUsRUFBQTJ5RSxFQUFBMkMsRUFBQSxRQUFBUSxFQUFBTCxFQUFBLEtBQTJFSCxFQUFBLElBQWMsVUFBQUYsRUFDekZuYyxHQUFBdWMsSUFBQUgsR0FDQSxRQUFBcjFFLEVBQUEyeUUsRUFBQTBELEVBQUFaLEVBQUEsTUFDQSxXQUFBejFFLEVBQUEyeUUsRUFBQThDLEVBQUEsTUFDQSxTQUFBejFFLEVBQUEyeUUsRUFBQTJDLEVBQUEsUUFBQUgsRUFBQW9CLEVBQUFYLEVBQUFKLEVBQUFILEdBQ0EsVUFBQXIxRSxFQUFBMnlFLEVBQUEyQyxFQUFBLFFBQUFrQixHQUFBaEIsR0FDQSxVQUFBeDFFLEVBQUEyeUUsRUFBQTJDLEVBQUEsUUFBQW1CLEdBQUFqQixHQUNBLFNBQUF4MUUsRUFBQTJ5RSxFQUFBaUQsR0FDQSxLQUFBemxGLEVBQUF3aUYsRUFBQTBELEVBQUFULEdBQ0FsQixFQUFBWSxFQUFBLFFBQUFlLEVBQUFaLEVBQUEsS0FBc0RELEdBRXRELFNBQUFlLEVBQUF2MkUsR0FDQSxRQUFBQSxFQUFBLE9BQUEyeUUsRUFBQStELEdBQUFqQixFQUFBLE1BRUEsU0FBQVksRUFBQXIyRSxFQUFBN1AsR0FDQSxPQUFBd21GLEVBQUEzMkUsRUFBQTdQLEdBQUEsR0FFQSxTQUFBeW1GLEVBQUE1MkUsRUFBQTdQLEdBQ0EsT0FBQXdtRixFQUFBMzJFLEVBQUE3UCxHQUFBLEdBRUEsU0FBQTJsRixFQUFBOTFFLEdBQ0EsV0FBQUEsRUFBQTAwRSxJQUNBL0IsRUFBQTJDLEVBQUEsS0FBQWUsRUFBQVosRUFBQSxLQUFBRCxHQUVBLFNBQUFtQixFQUFBMzJFLEVBQUE3UCxFQUFBMG1GLEdBQ0EsR0FBQXRDLEVBQUE3b0UsTUFBQWdvRSxZQUFBYSxFQUFBN2pFLE9BQUExYSxNQUFBLENBQ0EsSUFBQVQsRUFBQXNoRixFQUFBQyxFQUFBQyxFQUNBLFFBQUEvMkUsRUFBQSxPQUFBMnlFLEVBQUF3QyxFQUFBRyxFQUFBLEtBQUEwQixHQUFBTixHQUFBLEtBQUFsQixFQUFBQyxFQUFBLE1BQUFsZ0YsRUFBQTgvRSxHQUNBLGVBQUFyMUUsRUFBQSxPQUFBMDBFLEVBQUFTLEVBQUEvbkUsR0FBQXFvRSxFQUFBLE1BQUFsZ0YsRUFBQTgvRSxHQUdBLElBQUE0QixFQUFBSixFQUFBSyxFQUFBQyxFQUNBLE9BQUFyRCxFQUFBL2lGLGVBQUFpUCxHQUFBMnlFLEVBQUFzRSxHQUNBLFlBQUFqM0UsRUFBQTJ5RSxFQUFBc0QsR0FBQWdCLEdBQ0EsU0FBQWozRSxHQUFBMHZFLEdBQUEsYUFBQXYvRSxHQUE0RG9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUEyQyxFQUFBLFFBQUE4QixHQUFBNUIsSUFDbkYsYUFBQXgxRSxHQUFBLFNBQUFBLEVBQUEyeUUsRUFBQWtFLEVBQUFELEVBQUFQLEdBQ0EsS0FBQXIyRSxFQUFBMnlFLEVBQUEyQyxFQUFBLEtBQUFTLEVBQUFOLEVBQUEsS0FBQUQsRUFBQXlCLEdBQ0EsWUFBQWozRSxHQUFBLFVBQUFBLEVBQUEyeUUsRUFBQWtFLEVBQUFELEVBQUFQLEdBQ0EsS0FBQXIyRSxFQUFBMnlFLEVBQUEyQyxFQUFBLEtBQUErQixHQUFBN0IsRUFBQXlCLEdBQ0EsS0FBQWozRSxFQUFrQnMzRSxHQUFBQyxHQUFBLElBQWtDLEtBQUFOLEdBQ3BELFNBQUFqM0UsRUFBQTAwRSxFQUFBOEMsRUFBQVAsR0FDQSxPQUFBajNFLEVBQUEyeUUsRUF3REEsU0FBQWtFLEdBQ0EsZ0JBQUE3MkUsR0FDQSxXQUFBQSxFQUFBMnlFLEVBQUFrRSxFQUFBWSxFQUFBdGdGLEdBQ0EsWUFBQTZJLEdBQUEwdkUsRUFBQWlELEVBQUErRSxHQUFBYixFQUFBSyxFQUFBQyxHQUNBekMsRUFBQW1DLEVBQUFELEVBQUFQLElBNURBc0IsQ0FBQWQsSUFDQSxVQUFBNzJFLEVBQUEyeUUsRUFBQTBELEdBQ0ExRCxJQUVBLFNBQUFvRCxFQUFBLzFFLEdBQ0EsT0FBQUEsRUFBQWxOLE1BQUEsY0FBd0I0aEYsSUFDeEJBLEVBQUEyQixHQUdBLFNBQUFjLEVBQUFuM0UsRUFBQTdQLEdBQ0EsV0FBQTZQLEVBQUEyeUUsRUFBQTBELEdBQ0FhLEVBQUFsM0UsRUFBQTdQLEdBQUEsR0FFQSxTQUFBK21GLEVBQUFsM0UsRUFBQTdQLEVBQUEwbUYsR0FDQSxJQUFBOTBDLEVBQUEsR0FBQTgwQyxFQUFBTSxFQUFBRCxFQUNBVSxFQUFBLEdBQUFmLEVBQUFSLEVBQUFPLEVBQ0EsWUFBQTUyRSxFQUFBMnlFLEVBQUF3QyxFQUFBMEIsRUFBQUMsRUFBQUMsRUFBQTFCLEdBQ0EsWUFBQXIxRSxFQUNBLFVBQUExTyxLQUFBbkIsSUFBQXUvRSxHQUFBLEtBQUF2L0UsRUFBQXdpRixFQUFBNXdDLEdBQ0EydEMsR0FBQSxLQUFBdi9FLEdBQUFva0YsRUFBQTdqRSxPQUFBNWQsTUFBQSwyQkFDQTYvRSxFQUFBMkMsRUFBQSxLQUFBMEIsR0FBQVosR0FBQSxLQUFBWixFQUFBenpDLEdBQ0EsS0FBQTV4QyxFQUFBd2lGLEVBQUEwRCxFQUFBWixFQUFBLEtBQUFtQyxHQUNBakYsRUFBQWlGLEdBRUEsU0FBQTUzRSxFQUEwQjAwRSxFQUFBOEMsRUFBQXoxQyxHQUMxQixLQUFBL2hDLEVBQ0EsS0FBQUEsRUFBQXMzRSxHQUFBVixFQUFBLFdBQUE3MEMsR0FDQSxLQUFBL2hDLEVBQUEyeUUsRUFBQTloRixHQUFBa3hDLEdBQ0EsS0FBQS9oQyxFQUFBMnlFLEVBQUEyQyxFQUFBLEtBQUFTLEVBQUFOLEVBQUEsS0FBQUQsRUFBQXp6QyxHQUNBMnRDLEdBQUEsTUFBQXYvRSxHQUFnQ29rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUF5RCxHQUFBcjBDLElBQ3ZELFVBQUEvaEMsR0FDQXUwRSxFQUFBN29FLE1BQUEybkUsU0FBQWtCLEVBQUF4USxPQUFBLFdBQ0F3USxFQUFBN2pFLE9BQUF6RCxPQUFBc25FLEVBQUE3akUsT0FBQXZYLElBQUFvN0UsRUFBQTdqRSxPQUFBMWEsTUFBQSxHQUNBMjhFLEVBQUFpRixTQUhBLE9BTEEsRUFXQSxTQUFBSixFQUFBeDNFLEVBQUE3UCxHQUNBLGVBQUE2UCxFQUFBMDBFLElBQ0EsTUFBQXZrRixFQUFBd0QsTUFBQXhELEVBQUEwRCxPQUFBLEdBQTRDOCtFLEVBQUE2RSxHQUM1QzdFLEVBQUEwRCxFQUFBd0IsR0FFQSxTQUFBQSxFQUFBNzNFLEdBQ0EsUUFBQUEsRUFHQSxPQUZBdTBFLEVBQUF4USxPQUFBLFdBQ0F3USxFQUFBN29FLE1BQUE4dEQsU0FBQTJaLEVBQ0FSLEVBQUE2RSxHQUdBLFNBQUFULEVBQUEvMkUsR0FFQSxPQURBeXpFLEVBQUFjLEVBQUE3akUsT0FBQTZqRSxFQUFBN29FLE9BQ0FncEUsRUFBQSxLQUFBMTBFLEVBQTBCNDFFLEVBQUFTLEdBRTFCLFNBQUFTLEVBQUE5MkUsR0FFQSxPQURBeXpFLEVBQUFjLEVBQUE3akUsT0FBQTZqRSxFQUFBN29FLE9BQ0FncEUsRUFBQSxLQUFBMTBFLEVBQTBCNDFFLEVBQUFnQixHQVMxQixTQUFBei9FLEVBQUEyZ0YsRUFBQTNuRixHQUNBLGFBQUFBLEVBQW1ELE9BQXZCb2tGLEVBQUF4USxPQUFBLFVBQXVCNE8sRUFBQXdFLEdBRW5ELFNBQUFNLEVBQUFLLEVBQUEzbkYsR0FDQSxhQUFBQSxFQUFtRCxPQUF2Qm9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUF1RSxHQUVuRCxTQUFBWixFQUFBdDJFLEdBQ0EsV0FBQUEsRUFBQTJ5RSxFQUFBNkMsRUFBQUksR0FDQWxCLEVBQUF5QyxFQUFBMUIsRUFBQSxLQUE2Q0QsR0FFN0MsU0FBQTNrRixHQUFBbVAsR0FDQSxlQUFBQSxFQUFvRCxPQUF2QnUwRSxFQUFBeFEsT0FBQSxXQUF1QjRPLElBRXBELFNBQUE0RSxHQUFBdjNFLEVBQUE3UCxHQUNBLFlBQUE2UCxFQUVBLE9BREF1MEUsRUFBQXhRLE9BQUEsV0FDQTRPLEVBQUE0RSxJQUNLLGVBQUF2M0UsR0FBQSxXQUFBdTBFLEVBQUE3L0UsTUFBQSxDQUVMLE9BREE2L0UsRUFBQXhRLE9BQUEsV0FDQSxPQUFBNXpFLEdBQUEsT0FBQUEsRUFBQXdpRixFQUFBb0YsS0FFQXJJLEdBQUE2RSxFQUFBN29FLE1BQUFnb0UsWUFBQWEsRUFBQTdqRSxPQUFBMWEsUUFBQTFHLEVBQUFpbEYsRUFBQTdqRSxPQUFBNWQsTUFBQSxrQkFDQXloRixFQUFBN29FLE1BQUFnb0UsV0FBQWEsRUFBQTdqRSxPQUFBdlgsSUFBQTdKLEVBQUEsR0FBQXVFLFFBQ0E4K0UsRUFBQXFGLEtBSEEsSUFBQTFvRixNQUlLLGNBQUEwUSxHQUFBLFVBQUFBLEVBRUwsT0FEQXUwRSxFQUFBeFEsT0FBQXVMLEVBQUEsV0FBQWlGLEVBQUE3L0UsTUFBQSxZQUNBaStFLEVBQUFxRixJQUNLLHFCQUFBaDRFLEVBQ0wsT0FBQTJ5RSxFQUFBcUYsSUFDSyxHQUFBdEksR0FBQXVGLEVBQUE5a0YsR0FFTCxPQURBb2tGLEVBQUF4USxPQUFBLFVBQ0E0TyxFQUFBNEUsSUFDSyxRQUFBdjNFLEVBQ0wsT0FBQTJ5RSxFQUFBMEQsRUFBQTRCLEdBQUF4QyxFQUFBLEtBQUF1QyxJQUNLLGFBQUFoNEUsRUFDTCxPQUFBMnlFLEVBQUFpRSxFQUFBb0IsSUFDSyxRQUFBN25GLEVBRUwsT0FEQW9rRixFQUFBeFEsT0FBQSxVQUNBNE8sRUFBQTRFLElBQ0ssUUFBQXYzRSxFQUNMLE9BQUEwMEUsRUFBQXNELEtBR0EsU0FBQUQsR0FBQS8zRSxHQUNBLGtCQUFBQSxFQUFBMDBFLEVBQUFzRCxLQUNBekQsRUFBQXhRLE9BQUEsV0FDQTRPLEVBQUFzRCxLQUVBLFNBQUErQixHQUFBaDRFLEdBQ0EsV0FBQUEsRUFBQTJ5RSxFQUFBaUUsR0FDQSxLQUFBNTJFLEVBQUEwMEUsRUFBQXVCLFNBQUEsRUFFQSxTQUFBZSxHQUFBa0IsRUFBQWppRixFQUFBa2lGLEdBQ0EsU0FBQUMsRUFBQXA0RSxFQUFBN1AsR0FDQSxHQUFBZ29GLElBQUF0Z0YsUUFBQW1JLElBQUEsT0FBQUEsRUFBQSxDQUNBLElBQUF1MUUsRUFBQWhCLEVBQUE3b0UsTUFBQTBuRSxRQUVBLE1BREEsUUFBQW1DLEVBQUF6cEUsT0FBQXlwRSxFQUFBcDhFLEtBQUFvOEUsRUFBQXA4RSxLQUFBLE1BQ0F3NUUsRUFBQSxTQUFBM3lFLEVBQUE3UCxHQUNBLE9BQUE2UCxHQUFBL0osR0FBQTlGLEdBQUE4RixFQUFBeStFLElBQ0FBLEVBQUF3RCxJQUNTRSxHQUVULE9BQUFwNEUsR0FBQS9KLEdBQUE5RixHQUFBOEYsRUFBQTA4RSxJQUNBQSxFQUFBOEMsRUFBQXgvRSxJQUVBLGdCQUFBK0osRUFBQTdQLEdBQ0EsT0FBQTZQLEdBQUEvSixHQUFBOUYsR0FBQThGLEVBQUEwOEUsSUFDQStCLEVBQUF3RCxFQUFBRSxJQUdBLFNBQUFkLEdBQUFZLEVBQUFqaUYsRUFBQTZWLEdBQ0EsUUFBQTVjLEVBQUEsRUFBbUJBLEVBQUE2SCxVQUFBbEQsT0FBc0IzRSxJQUN6Q3FsRixFQUFBRSxHQUFBLzZFLEtBQUEzQyxVQUFBN0gsSUFDQSxPQUFBeWpGLEVBQUEyQyxFQUFBci9FLEVBQUE2VixHQUFBa3JFLEdBQUFrQixFQUFBamlGLEdBQUF1L0UsR0FFQSxTQUFBdmMsR0FBQWo1RCxHQUNBLFdBQUFBLEVBQWtCMnlFLElBQ2xCK0IsRUFBQWtCLEVBQUEzYyxJQUVBLFNBQUFnZixHQUFBajRFLEVBQUE3UCxHQUNBLEdBQUF1L0UsRUFBQSxDQUNBLFFBQUExdkUsRUFBQSxPQUFBMnlFLEVBQUF5RCxJQUNBLFFBQUFqbUYsRUFBQSxPQUFBd2lGLEVBQUFzRixLQUdBLFNBQUFJLEdBQUFyNEUsR0FDQSxHQUFBMHZFLEdBQUEsS0FBQTF2RSxFQUNBLE9BQUF1MEUsRUFBQTdqRSxPQUFBNWQsTUFBQSxxQkFBQTYvRSxFQUFBMEQsRUFBQWlDLEdBQUFsQyxJQUNBekQsRUFBQXlELElBR0EsU0FBQWtDLEdBQUFSLEVBQUEzbkYsR0FDQSxTQUFBQSxFQUVBLE9BREFva0YsRUFBQXhRLE9BQUEsVUFDQTRPLElBR0EsU0FBQXlELEdBQUFwMkUsRUFBQTdQLEdBQ0EsZUFBQUEsR0FBQSxVQUFBQSxHQUNBb2tGLEVBQUF4USxPQUFBLFVBQ0E0TyxFQUFBLFNBQUF4aUYsRUFBQWltRixHQUFBUSxJQUVBLFlBQUE1MkUsR0FBQSxRQUFBN1AsR0FDQW9rRixFQUFBeFEsT0FBQSxPQUNBNE8sRUFBQTRGLEtBRUEsVUFBQXY0RSxHQUFBLFVBQUFBLEdBQUEsUUFBQUEsRUFBQTJ5RSxFQUFBNEYsSUFDQSxLQUFBdjRFLEVBQUEyeUUsRUFBQTJDLEVBQUEsS0FBQTBCLEdBQUFaLEdBQUEsU0FBQVosRUFBQStDLElBQ0EsS0FBQXY0RSxFQUFrQjJ5RSxFQUFBMkMsRUFBQSxLQUF5QjBCLEdBQUF3QixHQUFBLElBQXlCLE1BQU1oRCxFQUFBK0MsSUFDMUUsS0FBQXY0RSxFQUFBMnlFLEVBQUFxRSxHQUFBeUIsR0FBQSxLQUFBQyxJQUNBLEtBQUExNEUsRUFBQTJ5RSxFQUFBcUUsR0FBQVosR0FBQSxLQUFBQSxTQUFBLEVBRUEsU0FBQXNDLEdBQUExNEUsR0FDQSxTQUFBQSxFQUFBLE9BQUEyeUUsRUFBQXlELElBRUEsU0FBQW9DLEdBQUF4NEUsRUFBQTdQLEdBQ0Esa0JBQUE2UCxHQUFBLFdBQUF1MEUsRUFBQTcvRSxPQUNBNi9FLEVBQUF4USxPQUFBLFdBQ0E0TyxFQUFBNkYsS0FDSyxLQUFBcm9GLEVBQ0x3aUYsRUFBQTZGLElBQ0ssS0FBQXg0RSxFQUNMMnlFLEVBQUF5RCxJQUNLLEtBQUFwMkUsRUFDTDJ5RSxFQUFBMEQsRUFBQTRCLEdBQUF4QyxFQUFBLEtBQUErQyxTQURLLEVBSUwsU0FBQUMsR0FBQXo0RSxFQUFBN1AsR0FDQSxrQkFBQTZQLEdBQUF1MEUsRUFBQTdqRSxPQUFBNWQsTUFBQSxxQkFBQTNDLEVBQUF3aUYsRUFBQThGLElBQ0EsS0FBQXo0RSxFQUFBMnlFLEVBQUF5RCxJQUNBMUIsRUFBQTBCLElBRUEsU0FBQW1DLEdBQUF2NEUsRUFBQTdQLEdBQ0EsV0FBQUEsRUFBQXdpRixFQUFBMkMsRUFBQSxLQUFBMEIsR0FBQVosR0FBQSxLQUFBWixFQUFBK0MsSUFDQSxLQUFBcG9GLEdBQUEsS0FBQTZQLEdBQUEsS0FBQTdQLEVBQUF3aUYsRUFBQXlELElBQ0EsS0FBQXAyRSxFQUFBMnlFLEVBQUE4QyxFQUFBLEtBQUE4QyxJQUNBLFdBQUFwb0YsR0FBQSxjQUFBQSxHQUFzRG9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUF5RCxVQUE3RSxFQUVBLFNBQUFzQixHQUFBSSxFQUFBM25GLEdBQ0EsUUFBQUEsRUFBQSxPQUFBd2lGLEVBQUEyQyxFQUFBLEtBQUEwQixHQUFBWixHQUFBLEtBQUFaLEVBQUErQyxJQUVBLFNBQUFJLEtBQ0EsT0FBQWpFLEVBQUEwQixHQUFBd0MsSUFFQSxTQUFBQSxHQUFBZCxFQUFBM25GLEdBQ0EsUUFBQUEsRUFBQSxPQUFBd2lGLEVBQUF5RCxJQUVBLFNBQUFQLEdBQUFpQyxFQUFBM25GLEdBQ0EsY0FBQUEsR0FBMEJva0YsRUFBQXhRLE9BQUEsVUFBc0I0TyxFQUFBd0QsS0FDaER6QixFQUFBdG5FLEdBQUE2cUUsR0FBQVksR0FBQUMsSUFFQSxTQUFBMXJFLEdBQUFwTixFQUFBN1AsR0FDQSxPQUFBdS9FLEdBQUF1RixFQUFBOWtGLElBQW9Db2tGLEVBQUF4USxPQUFBLFVBQXVCNE8sRUFBQXZsRSxLQUMzRCxZQUFBcE4sR0FBNkI0MEUsRUFBQXprRixHQUFpQndpRixLQUM5QyxVQUFBM3lFLEVBQUEyeUUsRUFBQXZsRSxJQUNBLEtBQUFwTixFQUFBczNFLEdBQUFscUUsR0FBQSxLQUNBLEtBQUFwTixFQUFrQnMzRSxHQUFBeUIsR0FBQSxVQUFsQixFQUVBLFNBQUFBLEdBQUEvNEUsRUFBQTdQLEdBQ0Esa0JBQUE2UCxHQUFBdTBFLEVBQUE3akUsT0FBQTVkLE1BQUEsYUFJQSxZQUFBa04sSUFBQXUwRSxFQUFBeFEsT0FBQSxZQUNBLFVBQUEvakUsRUFBQTJ5RSxFQUFBdmxFLElBQ0EsS0FBQXBOLEVBQWtCMDBFLElBQ2xCL0IsRUFBQThDLEVBQUEsS0FBQXJvRSxHQUFBeXJFLE1BTkFqRSxFQUFBemtGLEdBQ0F3aUYsRUFBQWtHLEtBT0EsU0FBQUEsR0FBQUcsRUFBQTdvRixHQUNBLFFBQUFBLEVBQUEsT0FBQXdpRixFQUFBaUUsR0FFQSxTQUFBa0MsR0FBQTk0RSxHQUNBLFFBQUFBLEVBQUEsT0FBQTJ5RSxFQUFBa0QsSUFFQSxTQUFBRyxHQUFBaDJFLEVBQUE3UCxHQUNBLGdCQUFBNlAsR0FBQSxRQUFBN1AsRUFBQSxPQUFBd2lGLEVBQUEyQyxFQUFBLGVBQUFNLEVBQUFKLEdBRUEsU0FBQVUsR0FBQWwyRSxFQUFBN1AsR0FDQSxlQUFBQSxFQUFBd2lGLEVBQUF1RCxJQUNBLEtBQUFsMkUsRUFBQTJ5RSxFQUFBMkMsRUFBQSxLQUFBMkQsR0FBQXhELEVBQUEsS0FBQUQsUUFBQSxFQUVBLFNBQUF5RCxHQUFBajVFLEdBQ0EsYUFBQUEsRUFBQTJ5RSxFQUFBa0QsR0FBQUosRUFBQSxLQUFvRHlELElBQ3BELEtBQUFsNUUsRUFBa0IyeUUsRUFBQXVHLElBQ2xCLFlBQUFsNUUsRUFBQTJ5RSxFQUFBd0csSUFDQXpFLEVBQUEyQixFQUFBWixFQUFBLEtBQXFDeUQsSUFFckMsU0FBQUMsR0FBQUgsRUFBQTdvRixHQUNBLFlBQUFBLEdBQUEsTUFBQUEsR0FBeUNva0YsRUFBQXhRLE9BQUEsVUFBdUI0TyxFQUFBMEQsSUFDaEUxRCxFQUFBd0UsRUFBQStCLElBRUEsU0FBQUEsR0FBQWw1RSxFQUFBN1AsR0FDQSxXQUFBNlAsRUFBa0IyeUUsRUFBQXlHLElBQ2xCLE1BQUFqcEYsR0FBQSxNQUFBQSxHQUF5Q29rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUEwRCxJQUNoRTNCLEVBQUEyQixFQUFBWixFQUFBLEtBQXFDMkQsSUFFckMsU0FBQUEsR0FBQXA1RSxHQUNBLEtBQUFBLEdBQUEyeUUsRUFBQTBELEdBRUEsU0FBQUosR0FBQWoyRSxFQUFBN1AsR0FDQSxXQUFBQSxHQUF1Qm9rRixFQUFBeFEsT0FBQSxVQUFzQjRPLEVBQUFzRCxLQUM3QyxZQUFBajJFLEdBQTZCNDBFLEVBQUF6a0YsR0FBZ0J3aUYsRUFBQXNELEtBQzdDLEtBQUFqMkUsRUFBQTJ5RSxFQUFBd0MsRUFBQUcsRUFBQSxLQUFBMEIsR0FBQU4sR0FBQSxLQUFBbEIsRUFBQTZDLEdBQUF6QyxFQUFBUCxHQUNBM0YsR0FBQSxLQUFBdi9FLEVBQUF3aUYsRUFBQTJDLEVBQUEsS0FBQTBCLEdBQUEyQixHQUFBLEtBQUFuRCxFQUFBUyxTQUFBLEVBRUEsU0FBQVMsR0FBQTEyRSxFQUFBN1AsR0FFQSxNQURBLEtBQUFBLEdBQUF3aUYsRUFBQTBELEVBQUFLLElBQ0EsVUFBQTEyRSxFQUFBMnlFLEVBQUErRCxJQUNBaEgsR0FBQXVGLEVBQUE5a0YsSUFBb0Nva0YsRUFBQXhRLE9BQUEsVUFBdUI0TyxFQUFBK0QsS0FDM0RoQyxFQUFBdG5FLEdBQUE2cUUsR0FBQVksSUFFQSxTQUFBekIsR0FBQXAzRSxFQUFBN1AsR0FFQSxrQkFBQTZQLEVBQUF2TSxHQUFBdU0sRUFBQTdQLEdBQ0FrcEYsR0FBQXI1RSxFQUFBN1AsR0FFQSxTQUFBc0QsR0FBQXVNLEVBQUE3UCxHQUNBLGVBQUE2UCxFQUE2QyxPQUFoQjQwRSxFQUFBemtGLEdBQWdCd2lGLEVBQUEwRyxJQUU3QyxTQUFBQSxHQUFBcjVFLEVBQUE3UCxHQUNBLFdBQUFBLEVBQUF3aUYsRUFBQTJDLEVBQUEsS0FBQTBCLEdBQUEyQixHQUFBLEtBQUFuRCxFQUFBNkQsSUFDQSxXQUFBbHBGLEdBQUEsY0FBQUEsR0FBQXUvRSxHQUFBLEtBQUExdkUsR0FDQSxjQUFBN1AsSUFBQW9rRixFQUFBeFEsT0FBQSxXQUNBNE8sRUFBQWpELEVBQUEwRyxHQUFBQyxFQUFBZ0QsS0FFQSxLQUFBcjVFLEVBQWtCMnlFLEVBQUEyQyxFQUFBLEtBQXlCZ0UsR0FBQTlELFFBQTNDLEVBRUEsU0FBQThELEdBQUF0NUUsRUFBQTdQLEdBQ0EsZUFBQTZQLEdBQ0EsWUFBQUEsSUFDQSxVQUFBN1AsR0FBQSxPQUFBQSxHQUFBLE9BQUFBLEdBQUF1L0UsR0FBQXVGLEVBQUE5a0YsS0FDQW9rRixFQUFBN2pFLE9BQUE1ZCxNQUFBLDRCQUNBeWhGLEVBQUF4USxPQUFBLFVBQ0E0TyxFQUFBMkcsS0FFQSxZQUFBdDVFLEdBQUEsV0FBQXUwRSxFQUFBNy9FLE9BQ0E2L0UsRUFBQXhRLE9BQUEsV0FDQTRPLEVBQUFqRCxFQUFBNkosR0FBQXRELEdBQUFxRCxLQUVBLEtBQUF0NUUsRUFDQTJ5RSxFQUFBMEQsRUFBQTRCLEdBQUF4QyxFQUFBLEtBQUEvRixFQUFBNkosR0FBQXRELEdBQUFxRCxJQUNBLEtBQUFucEYsR0FDQW9rRixFQUFBeFEsT0FBQSxVQUNBNE8sRUFBQTJHLEtBRUEsS0FBQXQ1RSxFQUFrQjJ5RSxFQUFBMkcsSUFDbEIsS0FBQXQ1RSxFQUFrQjJ5RSxJQUNsQixLQUFBeGlGLEVBQUF3aUYsRUFBQTBELEVBQUFpRCxTQUFBLEVBRUEsU0FBQUMsR0FBQXY1RSxFQUFBN1AsR0FDQSxXQUFBQSxFQUFBd2lGLEVBQUE0RyxJQUNBLEtBQUF2NUUsRUFBQTJ5RSxFQUFBeUQsR0FBQXlDLElBQ0EsS0FBQTFvRixFQUFBd2lGLEVBQUFpRSxHQUNBbEMsRUFBQXVCLElBRUEsU0FBQU8sR0FBQXgyRSxFQUFBN1AsR0FDQSxXQUFBQSxHQUF1Qm9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUE2RyxHQUFBL0QsRUFBQSxPQUM5QyxXQUFBdGxGLEdBQTZCb2tGLEVBQUF4USxPQUFBLFVBQXVCNE8sRUFBQTBELEVBQUFaLEVBQUEsT0FDcEQsS0FBQXoxRSxFQUFrQjJ5RSxFQUFBcUUsR0FBQXlDLEdBQUEsS0FBdUNELEdBQUEvRCxFQUFBLE1BQ3pEZixFQUFBa0IsR0FFQSxTQUFBNkQsR0FBQXo1RSxFQUFBN1AsR0FDQSxZQUFBQSxHQUF3Qm9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUE4QyxFQUFBLGNBQy9DLFlBQUF6MUUsRUFBQTAwRSxFQUFBa0MsRUFBQTZDLFNBQUEsRUFFQSxTQUFBaEQsR0FBQXoyRSxHQUNBLGdCQUFBQSxFQUFBMnlFLElBQ0EsS0FBQTN5RSxFQUFBMDBFLEVBQUEyQixHQUNBM0IsRUFBQWdGLEdBQUFDLEdBQUFILElBRUEsU0FBQUUsR0FBQTE1RSxFQUFBN1AsR0FDQSxXQUFBNlAsRUFBa0JzM0UsR0FBQW9DLEdBQUEsTUFDbEIsWUFBQTE1RSxHQUFBNDBFLEVBQUF6a0YsR0FDQSxLQUFBQSxJQUFBb2tGLEVBQUF4USxPQUFBLFdBQ0E0TyxFQUFBaUgsS0FFQSxTQUFBRCxHQUFBMzVFLEdBQ0EsUUFBQUEsRUFBQSxPQUFBMnlFLEVBQUErRyxHQUFBQyxJQUVBLFNBQUFDLEdBQUFaLEVBQUE3b0YsR0FDQSxTQUFBQSxFQUErQyxPQUF2Qm9rRixFQUFBeFEsT0FBQSxVQUF1QjRPLEVBQUErRyxJQUUvQyxTQUFBRixHQUFBUixFQUFBN29GLEdBQ0EsV0FBQUEsRUFBaUQsT0FBdkJva0YsRUFBQXhRLE9BQUEsVUFBdUI0TyxFQUFBMEQsR0FFakQsU0FBQWdCLEdBQUFyM0UsR0FDQSxXQUFBQSxFQUFBMnlFLElBQ0ErQixFQUFBc0MsR0FBQUosRUFBQSxNQUVBLFNBQUFULEtBQ0EsT0FBQXpCLEVBQUFZLEVBQUEsUUFBQWxvRSxHQUFBcW9FLEVBQUEsS0FBbURILEVBQUEsS0FBYzBCLEdBQUE2QyxHQUFBLEtBQTJCckUsS0FFNUYsU0FBQXFFLEtBQ0EsT0FBQW5GLEVBQUF0bkUsR0FBQXlyRSxJQVNBLFNBQUE3RixHQUFBdGlFLEVBQUFoRixFQUFBdUIsR0FDQSxPQUFBdkIsRUFBQTh0RCxVQUFBb1osR0FDQSxpRkFBOEV0aEYsS0FBQW9hLEVBQUEybkUsV0FDOUUsU0FBQTNuRSxFQUFBMm5FLFVBQUEsU0FBdUMvaEYsS0FBQW9mLEVBQUFuWixPQUFBNUQsTUFBQSxFQUFBK2MsRUFBQXZYLEtBQUE4VCxHQUFBLEtBS3ZDLE9BaGVBb29FLEVBQUFFLEtBQUEsRUFvQkFDLEVBQUFELEtBQUEsR0E2Y0F4cEUsV0FBQSxTQUFBK3RFLEdBQ0EsSUFBQXB1RSxHQUNBOHRELFNBQUFvWixFQUNBUyxTQUFBLE1BQ0FvQixNQUNBckIsUUFBQSxJQUFBZSxHQUFBMkYsR0FBQSxHQUFBcjRCLEVBQUEsY0FDQTZ5QixVQUFBbEYsRUFBQWtGLFVBQ0FsbUUsUUFBQWdoRSxFQUFBa0YsV0FBQSxJQUFBdm1FLEVBQUEsY0FDQWtDLFNBQUE2cEUsR0FBQSxHQUlBLE9BRkExSyxFQUFBNEYsWUFBQSxpQkFBQTVGLEVBQUE0RixhQUNBdHBFLEVBQUFzcEUsV0FBQTVGLEVBQUE0RixZQUNBdHBFLEdBR0FvRixNQUFBLFNBQUFKLEVBQUFoRixHQU9BLEdBTkFnRixFQUFBbEUsUUFDQWQsRUFBQTBuRSxRQUFBcmlGLGVBQUEsV0FDQTJhLEVBQUEwbkUsUUFBQXhxRCxPQUFBLEdBQ0FsZCxFQUFBdUUsU0FBQVMsRUFBQXZELGNBQ0FzbUUsRUFBQS9pRSxFQUFBaEYsSUFFQUEsRUFBQTh0RCxVQUFBdVosR0FBQXJpRSxFQUFBNUQsV0FBQSxZQUNBLElBQUFwWSxFQUFBZ1gsRUFBQTh0RCxTQUFBOW9ELEVBQUFoRixHQUNBLGlCQUFBMUwsRUFBQXRMLEdBQ0FnWCxFQUFBMm5FLFNBQUEsWUFBQXJ6RSxHQUFBLE1BQUF2TCxHQUFBLE1BQUFBLEVBQUF1TCxFQUFBLFNBdGxCQSxTQUFBMEwsRUFBQWhYLEVBQUFzTCxFQUFBdkwsRUFBQWljLEdBQ0EsSUFBQStqRSxFQUFBL29FLEVBQUErb0UsR0FRQSxJQUxBRixFQUFBN29FLFFBQXFCNm9FLEVBQUE3akUsU0FBb0I2akUsRUFBQXhRLE9BQUEsS0FBQXdRLEVBQUFFLEtBQThCRixFQUFBNy9FLFFBRXZFZ1gsRUFBQTBuRSxRQUFBcmlGLGVBQUEsV0FDQTJhLEVBQUEwbkUsUUFBQXhxRCxPQUFBLEtBRUEsQ0FDQSxJQUFBbXhELEVBQUF0RixFQUFBNWdGLE9BQUE0Z0YsRUFBQXI1QyxNQUFBbzBDLEVBQUE2RyxFQUFBVCxFQUNBLEdBQUFtRSxFQUFBLzVFLEVBQUF2TCxHQUFBLENBQ0EsS0FBQWdnRixFQUFBNWdGLFFBQUE0Z0YsSUFBQTVnRixPQUFBLEdBQUEwaEYsS0FDQWQsRUFBQXI1QyxLQUFBcTVDLEdBQ0EsT0FBQUYsRUFBQXhRLE9BQUF3USxFQUFBeFEsT0FDQSxZQUFBL2pFLEdBQUFvMEUsRUFBQTFvRSxFQUFBalgsR0FBQSxhQUNBQyxJQXVrQkFzbEYsQ0FBQXR1RSxFQUFBaFgsRUFBQXNMLEVBQUF2TCxFQUFBaWMsS0FHQTR3QyxPQUFBLFNBQUE1MUMsRUFBQXl4RCxHQUNBLEdBQUF6eEQsRUFBQTh0RCxVQUFBdVosRUFBQSxPQUFBaHBDLEVBQUFyeEMsS0FDQSxHQUFBZ1QsRUFBQTh0RCxVQUFBb1osRUFBQSxTQUNBLElBQUFqMkQsRUFBQXM5RCxFQUFBOWMsS0FBQWhpRSxPQUFBLEdBQUFpNEUsRUFBQTFuRSxFQUFBMG5FLFFBRUEsaUJBQUE5aEYsS0FBQTZyRSxHQUFBLFFBQUFqdUUsRUFBQXdjLEVBQUErb0UsR0FBQTVnRixPQUFBLEVBQTBFM0UsR0FBQSxJQUFRQSxFQUFBLENBQ2xGLElBQUFLLEVBQUFtYyxFQUFBK29FLEdBQUF2bEYsR0FDQSxHQUFBSyxHQUFBaW1GLEVBQUFwQyxJQUFBcnVFLFVBQ0EsR0FBQXhWLEdBQUF5bUYsR0FBQSxNQUVBLGNBQUE1QyxFQUFBcHpFLE1BQUEsUUFBQW96RSxFQUFBcHpFLFFBQ0EsS0FBQWk2RSxJQUE2QnQ5RCxFQUFBalIsRUFBQStvRSxHQUFBL29FLEVBQUErb0UsR0FBQTVnRixPQUFBLE1BQzdCOG9CLEdBQUF3NkQsR0FBQXg2RCxHQUFBdTZELEtBQ0EsbUJBQUE1bEYsS0FBQTZyRSxLQUNBaVcsSUFBQXJ1RSxLQUNBc3FFLEdBQUEsS0FBQStELEVBQUFwekUsTUFBQSxRQUFBb3pFLEVBQUFydUUsS0FBQS9FLE9BQ0FvekUsSUFBQXJ1RSxNQUNBLElBQUEvRSxFQUFBb3pFLEVBQUFwekUsS0FBQW1vRCxFQUFBOHhCLEdBQUFqNkUsRUFFQSxnQkFBQUEsRUFBQW96RSxFQUFBbmpFLFVBQUEsWUFBQXZFLEVBQUEybkUsVUFBQSxLQUFBM25FLEVBQUEybkUsU0FBQUQsRUFBQXRuRSxLQUFBalksT0FBQSxLQUNBLFFBQUFtTSxHQUFBLEtBQUFpNkUsRUFBZ0Q3RyxFQUFBbmpFLFNBQ2hELFFBQUFqUSxFQUFBb3pFLEVBQUFuakUsU0FBQXd4QyxFQUNBLFFBQUF6aEQsRUFDQW96RSxFQUFBbmpFLFVBbkVBLFNBQUF2RSxFQUFBeXhELEdBQ0Esa0JBQUF6eEQsRUFBQTJuRSxVQUFBLEtBQUEzbkUsRUFBQTJuRSxVQUNBYixFQUFBbGhGLEtBQUE2ckUsRUFBQWhpRSxPQUFBLEtBQ0EsT0FBQTdKLEtBQUE2ckUsRUFBQWhpRSxPQUFBLElBZ0VBKytFLENBQUF4dUUsRUFBQXl4RCxHQUFBa1MsR0FBQTV0QixFQUFBLEdBQ0EsVUFBQTJ4QixFQUFBdG5FLE1BQUFxOEMsR0FBQSxHQUFBaW5CLEVBQUErSyxtQkFFQS9HLEVBQUF4cUQsTUFBQXdxRCxFQUFBbG1FLFFBQUFpN0MsRUFBQSxLQUNBaXJCLEVBQUFuakUsVUFBQWs0QyxFQUFBLEVBQUExRyxHQUZBMnhCLEVBQUFuakUsVUFBQSxzQkFBQTNlLEtBQUE2ckUsR0FBQTFiLEVBQUEsRUFBQUEsSUFLQXlCLGNBQUEsb0NBQ0FrYSxrQkFBQW9TLEVBQUEsVUFDQW5TLGdCQUFBbVMsRUFBQSxVQUNBNEsscUJBQUE1SyxFQUFBLFdBQ0E2SyxZQUFBN0ssRUFBQSxVQUNBalMsS0FBQSxRQUNBRCxjQUFBLGlCQUVBbHlELFdBQUFva0UsRUFBQSxvQkFDQUYsYUFDQUUsV0FFQXdELHFCQUVBc0gsZUFBQSxTQUFBNXVFLEdBQ0EsSUFBQWlSLEVBQUFqUixFQUFBK29FLEdBQUEvb0UsRUFBQStvRSxHQUFBNWdGLE9BQUEsR0FDQThvQixHQUFBMDVELEdBQUExNUQsR0FBQWk2RCxHQUFBbHJFLEVBQUErb0UsR0FBQXI1QyxVQUtBMk8sRUFBQWtsQixlQUFBLGtDQUVBbGxCLEVBQUEybEIsV0FBQSxnQ0FDQTNsQixFQUFBMmxCLFdBQUEsZ0NBQ0EzbEIsRUFBQTJsQixXQUFBLHVDQUNBM2xCLEVBQUEybEIsV0FBQSx5Q0FDQTNsQixFQUFBMmxCLFdBQUEsdUNBQ0EzbEIsRUFBQTJsQixXQUFBLG9CQUEyQ2pnRSxLQUFBLGFBQUFnZ0YsTUFBQSxJQUMzQzFsQyxFQUFBMmxCLFdBQUEsc0JBQTZDamdFLEtBQUEsYUFBQWdnRixNQUFBLElBQzdDMWxDLEVBQUEybEIsV0FBQSx1QkFBOENqZ0UsS0FBQSxhQUFBOC9FLFFBQUEsSUFDOUN4bEMsRUFBQTJsQixXQUFBLG1CQUEwQ2pnRSxLQUFBLGFBQUFrZ0YsWUFBQSxJQUMxQzVsQyxFQUFBMmxCLFdBQUEsMEJBQWlEamdFLEtBQUEsYUFBQWtnRixZQUFBLElBeDNCakR0aEMsQ0FBUXIvQyxFQUFRLHNCQzZCZixTQUFBKzZDLEdBQ0RBLEVBQUE4aEIsYUFBQSw0QkFBQXJvRCxFQUFBb0ksRUFBQWhNLEdBR0EsR0FGQUEsR0FBQW1xQyxFQUFBdVUsTUFBQTErQyxHQUNBNEQsRUFBQWlwRCxhQUFBLGlCQUNBN2dELEVBQUEsQ0FDQSxJQUFBL1IsR0FBZXBLLEtBQUEsa0JBQ2YsaUJBQUFtYyxLQUFBMnVFLGVBQ0ExZ0YsRUFBQSxnQkFBQTJKLEdBQWlDLE9BbUdqQyxTQUFBQSxHQUNBLE9BQUFBLEVBQUFpUCxVQUFBLGdCQUFBczNCLEVBQUFyeEMsS0FDQThoRixFQUFBaDNFLEdBQUEsR0FyR2lDaTNFLENBQUFqM0UsTUFDakMsaUJBQUFvSSxLQUFBOHVFLGVBQ0E3Z0YsRUFBQSxnQkFBQTJKLEdBQWlDLE9BU2pDLFNBQUFBLEdBQ0EsR0FBQUEsRUFBQWlQLFVBQUEsdUJBQUFzM0IsRUFBQXJ4QyxLQUdBLElBRkEsSUFBQXNyQixFQUFBeGdCLEVBQUFtaEMsaUJBQUFnMkMsS0FDQXQ0QyxFQUFBNytCLEVBQUFpUCxVQUFBLGlCQUNBdmpCLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQTgwQixFQUFBOTBCLEdBQUFnMUIsUUFBQSxPQUFBNmxCLEVBQUFyeEMsS0FDQSxJQUFBUyxFQUFBNnFCLEVBQUE5MEIsR0FBQW0xQixLQUFBdTJELEVBQUFwM0UsRUFBQXlwRCxXQUFBOXpELEdBQ0F1VSxFQUFBcThCLEVBQUFsK0IsVUFBQXJJLEVBQUF1SCxVQUFBNnZFLEVBQUFsdkUsU0FBQWdDLEVBQUFoQyxNQUNBLFVBQUFnQyxFQUFBcmQsS0FBQVosT0FBQWljLEVBQUEyZ0UsUUFBQSxPQUFBdGlDLEVBQUFyeEMsS0FFQSxJQUFBbWlGLEVBQUEsUUFBQW50RSxFQUFBcmQsS0FBQTY5RSxjQUNBNE0sRUFBQSxpQkFBQXo0QyxLQUFBeTRDLGVBQUFELEdBQUFFLEVBQ0FDLEVBQUEsaUJBQUEzNEMsS0FBQTI0QyxZQUFBSCxHQUFBSSxFQUVBNU8sRUFBQTNnRSxFQUFBMmdFLFFBQ0F1TyxFQUFBM2tGLElBQUFrRCxFQUFBbUIsS0FBQSt4RSxJQUFBMTRFLE1BQUEsRUFBQTA0RSxFQUFBeDRFLE9BQUErbUYsRUFBQTNrRixJQUFBa0QsRUFBQW1CLEtBQ0EsSUFBQTRnRixFQUFBN08sRUFBQTd4RSxjQUVBLElBQUE2eEUsR0FDQSxVQUFBdU8sRUFBQTU2RSxPQUFBNDZFLEVBQUEza0YsS0FBQWtELEVBQUFtQixLQUFBLFNBQUFoSixLQUFBc3BGLEVBQUFyakYsT0FBQTRELE9BQUF5L0UsRUFBQXJqRixPQUFBMUQsT0FBQSxRQUFBK21GLEVBQUFyakYsT0FBQTFELFNBQ0EsT0FBQSttRixFQUFBNTZFLE1BQUEsWUFBQTBMLEVBQUExTCxNQUNBNDZFLEVBQUFyakYsT0FBQU0sUUFBQSxNQUFBK2lGLEVBQUFyakYsT0FBQTFELE9BQUEsR0FDQWluRixHQUFBampGLEVBQUFpakYsRUFBQUksSUFBQSxHQUNBQyxFQUFBMzNFLEVBQUE2b0UsRUFBQWx6RSxFQUFBdVMsR0FBQSxHQUNBLE9BQUFxK0IsRUFBQXJ4QyxLQUVBLElBQUE0b0QsRUFBQTA1QixHQUFBbmpGLEVBQUFtakYsRUFBQUUsSUFBQSxFQUNBUCxFQUFBenJGLElBQXlCb3lELFNBQ3pCN2tELEtBQUEsS0FBQTZrRCxFQUFBLGdCQUFBK3FCLEVBQUEsSUFDQStPLE9BQUE5NUIsRUFBQXZYLEVBQUFuc0MsSUFBQXpFLEVBQUFvRCxLQUFBLEtBQUF3dEMsRUFBQW5zQyxJQUFBekUsRUFBQW9ELEtBQUFwRCxFQUFBbUIsR0FBQSxJQUlBLElBREEsSUFBQStnRixFQUFBLGlCQUFBaDVDLEtBQUFnNUMsc0JBQ0Fuc0YsRUFBQTgwQixFQUFBbndCLE9BQUEsRUFBbUMzRSxHQUFBLEVBQVFBLElBQUEsQ0FDM0MsSUFBQTRjLEVBQUE2dUUsRUFBQXpyRixHQUNBc1UsRUFBQW05QixhQUFBNzBCLEVBQUFyUCxLQUFBdW5CLEVBQUE5MEIsR0FBQW0xQixLQUFBTCxFQUFBOTBCLEdBQUFvekIsT0FBQSxXQUNBLElBQUF5QixFQUFBdmdCLEVBQUFtaEMsaUJBQUFoeEMsTUFBQSxHQUNBb3dCLEVBQUE3MEIsSUFBZ0JtMUIsS0FBQXZZLEVBQUFzdkUsT0FBQTk0RCxPQUFBeFcsRUFBQXN2RSxRQUNoQjUzRSxFQUFBc2hDLGNBQUEvZ0IsSUFDQXMzRCxHQUFBdnZFLEVBQUF3MUMsU0FDQTk5QyxFQUFBbTFDLFdBQUE3c0MsRUFBQXN2RSxPQUFBNytFLEtBQUEsU0FDQWlILEVBQUFtMUMsV0FBQTdzQyxFQUFBc3ZFLE9BQUE3K0UsS0FBQSxhQWxEaUMrK0UsQ0FBQTkzRSxLQUNqQ0EsRUFBQWdwRCxVQUFBM3lELE1BR0EsSUFBQWtoRixHQUFBLDZGQUNBLHdCQUNBRSxHQUFBLGtHQUNBLDJGQWdEQSxTQUFBVCxFQUFBaDNFLEVBQUErM0UsR0FLQSxJQUpBLElBQUF2M0QsRUFBQXhnQixFQUFBbWhDLGlCQUFBZzJDLEtBQ0F0MkQsRUFBQWszRCxFQUFBLFNBQ0FsNUMsRUFBQTcrQixFQUFBaVAsVUFBQSxpQkFDQTRvRSxFQUFBLGlCQUFBaDVDLEtBQUFtNUMsa0JBQ0F0c0YsRUFBQSxFQUFtQkEsRUFBQTgwQixFQUFBbndCLE9BQW1CM0UsSUFBQSxDQUN0QyxJQUFBODBCLEVBQUE5MEIsR0FBQWcxQixRQUFBLE9BQUE2bEIsRUFBQXJ4QyxLQUNBLElBU0EraUYsRUFUQXRpRixFQUFBNnFCLEVBQUE5MEIsR0FBQW0xQixLQUFBdTJELEVBQUFwM0UsRUFBQXlwRCxXQUFBOXpELEdBQ0F1VSxFQUFBcThCLEVBQUFsK0IsVUFBQXJJLEVBQUF1SCxVQUFBNnZFLEVBQUFsdkUsU0FBQWdDLEVBQUFoQyxNQUNBLEdBQUE2dkUsSUFBQSxVQUFBWCxFQUFBNTZFLE1BQUEsS0FBQTQ2RSxFQUFBcmpGLE9BQUE0RCxPQUFBLElBQ0F5L0UsRUFBQTVrRixPQUFBbUQsRUFBQW1CLEdBQUEsR0FDQSxPQUFBeXZDLEVBQUFyeEMsS0FNQSxVQUFBZ1YsRUFBQXJkLEtBQUFaLEtBQ0EsZ0JBQUErVCxFQUFBdUgsVUFBQXRiLE1BQUEsY0FBQWllLEVBQUFyZCxLQUFBWixLQUNBZ3NGLEVBQUFwM0QsRUFBQSxhQUNBLGlCQUFBN2dCLEVBQUF1SCxVQUFBdGIsTUFBQSxPQUFBaWUsRUFBQXJkLEtBQUFaLEtBR0EsT0FBQXM2QyxFQUFBcnhDLEtBRkEraUYsRUFBQXAzRCxFQUFBLFlBR08sQ0FDUCxJQUFBM1ksRUFBQTBDLFVBQUExQyxFQUFBMEMsUUFBQWkrRCxTQUNBOE8sRUFBQTMzRSxFQUFBa0ksRUFBQTBDLFFBQUFpK0QsUUFBQWx6RSxFQUFBdVMsR0FDQSxPQUFBcStCLEVBQUFyeEMsS0FDQStpRixFQUFBcDNELEVBQUEzWSxFQUFBMEMsUUFBQWkrRCxRQUVBLEtBQUE3b0UsRUFBQTVILFFBQUF6QyxFQUFBb0QsTUFBQXBCLE9BQUF5L0UsRUFBQTNrRixPQUFBd2xGLEdBQUEsS0FDQWQsRUFBQXpyRixHQUFBdXNGLEVBSUEsR0FGQWo0RSxFQUFBMmhDLGtCQUFBdzFDLEdBQ0EzMkQsRUFBQXhnQixFQUFBbWhDLGtCQUNBMDJDLEVBQ0EsUUFBQW5zRixFQUFBLEVBQXVCQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxLQUMxQ0EsR0FBQTgwQixFQUFBbndCLE9BQUEsR0FBQW13QixFQUFBOTBCLEdBQUFtMUIsS0FBQTluQixLQUFBeW5CLEVBQUE5MEIsRUFBQSxHQUFBbTFCLEtBQUE5bkIsT0FDQWlILEVBQUFtMUMsV0FBQTMwQixFQUFBOTBCLEdBQUFtMUIsS0FBQTluQixNQVdBLFNBQUExRSxFQUFBNmpGLEVBQUFubkYsR0FDQSxHQUFBbW5GLEVBQUE3akYsUUFBQSxPQUFBNmpGLEVBQUE3akYsUUFBQXRELEdBQ0EsUUFBQXJGLEVBQUEsRUFBQTZFLEVBQUEybkYsRUFBQTduRixPQUEwQzNFLEVBQUE2RSxJQUFPN0UsRUFDakQsR0FBQXdzRixFQUFBeHNGLElBQUFxRixFQUFBLE9BQUFyRixFQUNBLFNBS0EsU0FBQWlzRixFQUFBMzNFLEVBQUE2b0UsRUFBQWx6RSxFQUFBdVMsRUFBQWl3RSxHQUNBLElBQUE1eEMsRUFBQTAxQixrQkFBQSxTQUNBLElBQUF4cEUsRUFBQXFELEtBQUFDLElBQUFpSyxFQUFBVCxXQUFBLEVBQUE1SixFQUFBb0QsS0FBQSxLQUNBcS9FLEVBQUE3eEMsRUFBQTAxQixrQkFBQWo4RCxFQUFBckssRUFBQSxLQUFBbEQsR0FDQSxJQUFBMmxGLEtBQUFwbkYsS0FBQTYzRSxFQUFBLFNBS0EsSUFKQSxJQUFBa0ksRUFBQTdvRSxFQUFBMEMsUUFJQXl0RSxFQUFBRixFQUFBLElBQW1DcEgsS0FBQWxJLFdBQTZCa0ksSUFBQXh2RSxPQUFBODJFLEVBQ2hFMWlGLEVBQUF5aUYsRUFBQXJnRixHQUNBLFFBQUFyTSxFQUFBLEVBQW1CQSxFQUFBMnNGLEVBQVUzc0YsSUFBQSxDQUM3QixJQUFBeWQsRUFBQW85QixFQUFBMDFCLGtCQUFBajhELEVBQUFySyxFQUFBLEtBQUFsRCxHQUNBLElBQUEwVyxLQUFBblksS0FBQTYzRSxFQUFBLFNBQ0FsekUsRUFBQXdULEVBQUFwUixHQUVBLFNBM0JBd3VDLEVBQUF1TCxTQUFBd21DLFNBQUEsU0FBQXQ0RSxHQUErQyxPQUFBZzNFLEVBQUFoM0UsSUFwSC9DNnFDLENBQVFyL0MsRUFBUSxHQUF5QkEsRUFBUSxzQkNuQmhELFNBQUErNkMsR0FDRCxhQUVBLElBQUFzdUIsRUFBQSwyREFDQTBqQixFQUFBLHNEQUNBQyxFQUFBLFVBdUNBLFNBQUFDLEVBQUF6NEUsRUFBQXJLLEdBQ0EsSUFBQTZsRSxFQUFBN2xFLEVBQUFvRCxLQUFBb1IsRUFBQSxFQUFBdXVFLEVBQUEsRUFDQUMsRUFBQTlqQixFQUFBNW1FLEtBQUErUixFQUFBNUgsUUFBQW9qRSxJQUFBb2QsRUFBQUQsRUFBQSxHQUVBLEdBRUEsSUFBQUUsRUFBQXJkLEdBREFyeEQsR0FBQSxHQUVBNkMsRUFBQWhOLEVBQUE1SCxRQUFBeWdGLEdBQUFDLEVBQUFqa0IsRUFBQTVtRSxLQUFBK2UsR0FFQSxHQUFBOHJFLEVBQUEsQ0FDQSxJQUFBQyxFQUFBRCxFQUFBLEdBQ0FFLEVBQUEvaEUsU0FBQTBoRSxFQUFBLE9BQUF4dUUsRUFBQXV1RSxFQUNBTyxFQUFBaGlFLFNBQUE2aEUsRUFBQSxPQUFBSSxFQUFBRCxFQUVBLEdBQUFMLElBQUFHLEdBQUE1aEUsTUFBQThoRSxHQVVTLENBQ1QsR0FBQUwsRUFBQXZvRixPQUFBMG9GLEVBQUExb0YsT0FBQSxPQUdBLEdBQUF1b0YsRUFBQXZvRixPQUFBMG9GLEVBQUExb0YsUUFBQSxJQUFBOFosRUFBQSxPQUNBdXVFLEdBQUEsT0FkQU0sSUFBQUMsSUFBQUMsRUFBQUQsRUFBQSxHQUNBRCxFQUFBQyxJQUFBQyxFQUFBRixFQUFBLEdBQ0FoNUUsRUFBQW05QixhQUNBbndCLEVBQUFuTCxRQUFBZ3pELEVBQUFra0IsRUFBQUcsRUFBQUosRUFBQSxHQUFBQSxFQUFBLEtBRUEvL0UsS0FBQTgvRSxFQUFBL2hGLEdBQUEsSUFFQWlDLEtBQUE4L0UsRUFBQS9oRixHQUFBa1csRUFBQTNjLGdCQVVLeW9GLEdBckVMdnlDLEVBQUF1TCxTQUFBcW5DLHFDQUFBLFNBQUFuNUUsR0FDQSxHQUFBQSxFQUFBaVAsVUFBQSx1QkFBQXMzQixFQUFBcnhDLEtBRUEsSUFEQSxJQUFBc3JCLEVBQUF4Z0IsRUFBQW1oQyxpQkFBQWcyQyxLQUNBenJGLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQWlLLEVBQUE2cUIsRUFBQTkwQixHQUFBbTFCLEtBQ0F1NEQsRUFBQXA1RSxFQUFBK3BELGNBQUFwMEQsRUFBQW9ELE1BQ0FvNEUsR0FBQSxJQUFBaUksRUFBQTVtRSxLQUNBNm1FLEVBQUEsSUFBQUQsRUFBQXhxQixNQUVBNzFELEVBQUFpSCxFQUFBNUgsUUFBQXpDLEVBQUFvRCxNQUFBekosRUFBQXVsRSxFQUFBNW1FLEtBQUE4SyxHQUNBdWdGLEVBQUEsUUFBQXhyRixLQUFBaUwsRUFBQTVJLE1BQUEsRUFBQXdGLEVBQUFtQixLQUNBLElBQUEwcEIsRUFBQTkwQixHQUFBZzFCLFVBQUF5d0QsSUFBQWtJLElBQUEvcEYsR0FBQWdxRixFQUVBLFlBREF0NUUsRUFBQSswQyxZQUFBLG9CQUdBLEdBQUF3akMsRUFBQXpxRixLQUFBaUwsR0FDQSxRQUFBakwsS0FBQWlMLElBQUFpSCxFQUFBbTlCLGFBQUEsSUFDQXBrQyxLQUFBcEQsRUFBQW9ELEtBQUFqQyxHQUFBLElBRUFpQyxLQUFBcEQsRUFBQW9ELEtBQUFqQyxHQUFBbkIsRUFBQW1CLEdBQUEsSUFFQXFnRixFQUFBenJGLEdBQUEsU0FDTyxDQUNQLElBQUFveUQsRUFBQXh1RCxFQUFBLEdBQUFZLEVBQUFaLEVBQUEsR0FDQWlxRixJQUFBZixFQUFBMXFGLEtBQUF3QixFQUFBLEtBQUFBLEVBQUEsR0FBQStFLFFBQUEsU0FDQW1sRixFQUFBRCxFQUFBdGlFLFNBQUEzbkIsRUFBQSxTQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQXVTLFFBQUEsU0FDQXMxRSxFQUFBenJGLEdBQUEsS0FBQW95RCxFQUFBMDdCLEVBQUF0cEYsRUFFQXFwRixHQUFBZCxFQUFBejRFLEVBQUFySyxJQUlBcUssRUFBQTJoQyxrQkFBQXcxQyxJQTVDQXRzQyxDQUFRci9DLEVBQVEsc0JDS2YsU0FBQSs2QyxHQUNELElBQUF3VSxHQUNBMCtCLE1BQUEsZUFDQUMsUUFBQSxHQUNBQyxRQUFBLFFBR0F2L0UsRUFBQW1zQyxFQUFBbnNDLElBY0EsU0FBQTZVLEVBQUEycUUsRUFBQTN0RixHQUNBLGVBQUFBLEdBQUEsaUJBQUEydEYsSUFDQSxpQkFBQUEsR0FBQSxNQUFBQSxFQUFBM3RGLEdBQUEydEYsRUFBQTN0RixHQUNBOHVELEVBQUE5dUQsR0FmQXM2QyxFQUFBOGhCLGFBQUEsZ0NBQUFyb0QsRUFBQW9JLEVBQUFoTSxHQUNBQSxNQUFBbXFDLEVBQUF1VSxPQUNBOTZDLEVBQUFpcEQsYUFBQXplLEdBQ0F4cUMsRUFBQWtJLE1BQUE0eEQsY0FBQSxNQUVBMXhELElBQ0F5eEUsRUFBQTVxRSxFQUFBN0csRUFBQSxVQUNBcEksRUFBQWtJLE1BQUE0eEQsY0FBQTF4RCxFQUNBcEksRUFBQWdwRCxVQUFBeGUsTUFVQSxJQUFBQSxHQUFnQjJDLFVBb0JoQixTQUFBbnRDLEdBQ0EsSUFBQTQ1RSxFQUFBRSxFQUFBOTVFLEdBQ0EsSUFBQTQ1RSxHQUFBNTVFLEVBQUFpUCxVQUFBLHVCQUFBczNCLEVBQUFyeEMsS0FJQSxJQUZBLElBQUF1a0YsRUFBQXhxRSxFQUFBMnFFLEVBQUEsU0FDQXA1RCxFQUFBeGdCLEVBQUFtaEMsaUJBQ0F6MUMsRUFBQSxFQUFtQkEsRUFBQTgwQixFQUFBbndCLE9BQW1CM0UsSUFBQSxDQUN0QyxJQUFBODBCLEVBQUE5MEIsR0FBQWcxQixRQUFBLE9BQUE2bEIsRUFBQXJ4QyxLQUNBLElBQUE2a0YsRUFBQUMsRUFBQWg2RSxFQUFBd2dCLEVBQUE5MEIsR0FBQW0xQixNQUNBLElBQUFrNUQsR0FBQU4sRUFBQXBsRixRQUFBMGxGLEdBQUEsWUFBQXh6QyxFQUFBcnhDLEtBRUEsUUFBQXhKLEVBQUE4MEIsRUFBQW53QixPQUFBLEVBQW1DM0UsR0FBQSxFQUFRQSxJQUFBLENBQzNDLElBQUE2TixFQUFBaW5CLEVBQUE5MEIsR0FBQW0xQixLQUNBN2dCLEVBQUFtOUIsYUFBQSxHQUFBL2lDLEVBQUFiLEVBQUFSLEtBQUFRLEVBQUF6QyxHQUFBLEdBQUFzRCxFQUFBYixFQUFBUixLQUFBUSxFQUFBekMsR0FBQSxnQkFqQ2dCeTJDLE1BcUNoQixTQUFBdnRDLEdBQ0EsSUFBQTQ1RSxFQUFBRSxFQUFBOTVFLEdBQ0EyNUUsRUFBQUMsR0FBQTNxRSxFQUFBMnFFLEVBQUEsV0FDQSxJQUFBRCxHQUFBMzVFLEVBQUFpUCxVQUFBLHVCQUFBczNCLEVBQUFyeEMsS0FHQSxJQURBLElBQUFzckIsRUFBQXhnQixFQUFBbWhDLGlCQUNBejFDLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQTgwQixFQUFBOTBCLEdBQUFnMUIsUUFBQSxPQUFBNmxCLEVBQUFyeEMsS0FDQSxJQUFBNmtGLEVBQUFDLEVBQUFoNkUsRUFBQXdnQixFQUFBOTBCLEdBQUFtMUIsTUFDQSxJQUFBazVELEdBQUFKLEVBQUF0bEYsUUFBQTBsRixHQUFBLFlBQUF4ekMsRUFBQXJ4QyxLQUVBOEssRUFBQW91QixVQUFBLFdBQ0EsSUFBQTZyRCxFQUFBajZFLEVBQUE0Z0MsaUJBQUEsS0FDQTVnQyxFQUFBeWhDLGlCQUFBdzRDLElBQUEsTUFDQWo2RSxFQUFBKzBDLFlBQUEsY0FDQXYwQixFQUFBeGdCLEVBQUFtaEMsaUJBQ0EsUUFBQXoxQyxFQUFBLEVBQXFCQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxJQUFBLENBQ3hDLElBQUFxTixFQUFBeW5CLEVBQUE5MEIsR0FBQW0xQixLQUFBOW5CLEtBQ0FpSCxFQUFBbTFDLFdBQUFwOEMsRUFBQSxTQUNBaUgsRUFBQW0xQyxXQUFBcDhDLEVBQUEsZ0JBdkRBLFNBQUE4Z0YsRUFBQUssR0FDQSxRQUFBeHVGLEVBQUEsRUFBbUJBLEVBQUF3dUYsRUFBQTdwRixPQUFrQjNFLElBQUEsQ0FDckMsSUFBQW9MLEVBQUFvakYsRUFBQXZpRixPQUFBak0sR0FBQXVCLEVBQUEsSUFBQTZKLEVBQUEsSUFDQTB6QyxFQUFBdjlDLEtBQUF1OUMsRUFBQXY5QyxHQUFBa3RGLEVBQUFyakYsS0FLQSxTQUFBcWpGLEVBQUFyakYsR0FDQSxnQkFBQWtKLEdBQXlCLE9BeUR6QixTQUFBQSxFQUFBbEosR0FDQSxJQUFBOGlGLEVBQUFFLEVBQUE5NUUsR0FDQSxJQUFBNDVFLEdBQUE1NUUsRUFBQWlQLFVBQUEsdUJBQUFzM0IsRUFBQXJ4QyxLQUVBLElBQUF1a0YsRUFBQXhxRSxFQUFBMnFFLEVBQUEsU0FDQWprRixFQUFBOGpGLEVBQUFwbEYsUUFBQXlDLEdBQ0EsT0FBQW5CLEVBQUEsT0FBQTR3QyxFQUFBcnhDLEtBUUEsSUFQQSxJQU1Bc0gsRUFOQWs5RSxFQUFBenFFLEVBQUEycUUsRUFBQSxXQUVBUSxFQUFBWCxFQUFBOWhGLE9BQUFoQyxFQUFBLElBQUFtQixFQUNBMHBCLEVBQUF4Z0IsRUFBQW1oQyxpQkFDQWs1QyxFQUFBMWtGLEVBQUEsS0FHQWpLLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQTR1RixFQUFBenFGLEVBQUEyd0IsRUFBQTkwQixHQUFBNk4sRUFBQTFKLEVBQUFneEIsS0FDQTFYLEVBQUFuSixFQUFBOGdDLFNBQUF2bkMsRUFBQWEsRUFBQWIsRUFBQVIsS0FBQVEsRUFBQXpDLEdBQUEsSUFDQSxHQUFBdWpGLElBQUF4cUYsRUFBQTZ3QixRQUNBNDVELEVBQUEsZ0JBQ08sSUFBQUYsR0FBQUMsR0FBQWx4RSxHQUFBclMsRUFPQSxHQUFBc2pGLEdBQUE3Z0YsRUFBQXpDLEdBQUEsR0FBQTRpRixFQUFBcmxGLFFBQUF5QyxJQUFBLEdBQ1BrSixFQUFBOGdDLFNBQUExbUMsRUFBQWIsRUFBQVIsS0FBQVEsRUFBQXpDLEdBQUEsR0FBQXlDLElBQUF6QyxJQUFBLENBQ0EsR0FBQXlDLEVBQUF6QyxHQUFBLGNBQUFoSixLQUFBa1MsRUFBQTJwRCxlQUFBdnZELEVBQUFiLEVBQUFSLEtBQUFRLEVBQUF6QyxHQUFBLFlBQUF5dkMsRUFBQXJ4QyxLQUNBb2xGLEVBQUEsZUFDTyxHQUFBRixFQUFBLENBQ1AsSUFBQTc0RSxFQUFBLEdBQUFoSSxFQUFBekMsR0FBQSxJQUFBa0osRUFBQThnQyxTQUFBMW1DLEVBQUFiLEVBQUFSLEtBQUFRLEVBQUF6QyxHQUFBLEdBQUF5QyxHQUNBLEdBQUFndEMsRUFBQXR2QyxXQUFBa1MsSUFBQTVILEdBQUF6SyxHQUFBeXZDLEVBQUF0dkMsV0FBQXNLLEdBQ0EsT0FBQWdsQyxFQUFBcnhDLEtBREFvbEYsRUFBQSxXQUVPLEtBQUFELEVBR1AsT0FBQTl6QyxFQUFBcnhDLEtBRkFvbEYsRUFBQSxZQWRBQSxFQURBRixHQUFBRyxFQUFBdjZFLEVBQUF6RyxHQUNBLE9BQ0FtZ0YsRUFBQXJsRixRQUFBeUMsSUFBQSxHQUFBa0osRUFBQThnQyxTQUFBdm5DLEVBQUFhLEVBQUFiLEVBQUFSLEtBQUFRLEVBQUF6QyxHQUFBLEtBQUFBLE1BQ0EsWUFFQSxPQWNBLEdBQUEwRixHQUNBLEdBQUFBLEdBQUE4OUUsRUFBQSxPQUFBL3pDLEVBQUFyeEMsVUFEQXNILEVBQUE4OUUsRUFJQSxJQUFBcDBFLEVBQUF2USxFQUFBLEVBQUE4akYsRUFBQTloRixPQUFBaEMsRUFBQSxHQUFBbUIsRUFDQXFQLEVBQUF4USxFQUFBLEVBQUFtQixFQUFBMmlGLEVBQUE5aEYsT0FBQWhDLEVBQUEsR0FDQXFLLEVBQUFvdUIsVUFBQSxXQUNBLFdBQUE1eEIsRUFDQXdELEVBQUErMEMsWUFBQSxvQkFDTyxnQkFBQXY0QyxFQUNQLFFBQUE5USxFQUFBLEVBQXVCQSxFQUFBLEVBQU9BLElBQzlCc1UsRUFBQSswQyxZQUFBLG9CQUNPLGVBQUF2NEMsRUFBQSxDQUVQLElBREEsSUFBQTA0QyxFQUFBbDFDLEVBQUF3aEMsZ0JBQ0E5MUMsRUFBQSxFQUF1QkEsRUFBQXdwRCxFQUFBN2tELE9BQWlCM0UsSUFDeEN3cEQsRUFBQXhwRCxHQUFBd2EsRUFBQWd2QyxFQUFBeHBELEdBQUF5YSxFQUNBbkcsRUFBQTJoQyxrQkFBQXVULEVBQUEsVUFDQUEsRUFBQWwxQyxFQUFBbWhDLGlCQUFBaHhDLFFBQ0EsUUFBQXpFLEVBQUEsRUFBdUJBLEVBQUF3cEQsRUFBQTdrRCxPQUFpQjNFLElBQ3hDd3BELEVBQUF4cEQsR0FBQTh1RixFQUFBdGxDLEVBQUF4cEQsSUFDQXNVLEVBQUFzaEMsY0FBQTRULE9BQ08sUUFBQTE0QyxHQUNQd0QsRUFBQXloQyxpQkFBQXY3QixFQUFBQyxFQUFBLE1BQ0FuRyxFQUFBay9DLGdCQUFBaDVDLEVBQUFDLEdBQ0FuRyxFQUFBKzBDLFlBQUEsZUFDTyxXQUFBdjRDLElBQ1B3RCxFQUFBeWhDLGlCQUFBdjdCLFFBQUEsVUFDQWxHLEVBQUErMEMsWUFBQSxrQkEzSHlCMGxDLENBQUF6NkUsRUFBQWxKLElBR3pCLFNBQUFnakYsRUFBQTk1RSxHQUNBLElBQUFtb0QsRUFBQW5vRCxFQUFBa0ksTUFBQTR4RCxjQUNBLElBQUEzUixLQUFBdGtELFNBQUEsT0FBQXNrRCxFQUNBLElBQUF0N0QsRUFBQW1ULEVBQUF5L0MsVUFBQXovQyxFQUFBd21CLGFBQ0EsT0FBQTM1QixFQUFBaXRFLGVBQUEzUixFQTRDQSxTQUFBcXlCLEVBQUFqNkQsR0FDQSxJQUFBbTZELEVBQUFuMEMsRUFBQTBtQixPQUFBMXNDLEVBQUF6QixPQUFBeUIsRUFBQU0sTUFBQSxFQUNBLE9BQVkvQixPQUFBLElBQUExa0IsRUFBQW1tQixFQUFBekIsT0FBQS9sQixLQUFBd25CLEVBQUF6QixPQUFBaG9CLElBQUE0akYsR0FBQSxNQUNaNzVELEtBQUEsSUFBQXptQixFQUFBbW1CLEVBQUFNLEtBQUE5bkIsS0FBQXduQixFQUFBTSxLQUFBL3BCLElBQUE0akYsRUFBQSxRQTBFQSxTQUFBVixFQUFBaDZFLEVBQUFySyxHQUNBLElBQUE4QixFQUFBdUksRUFBQThnQyxTQUFBMW1DLEVBQUF6RSxFQUFBb0QsS0FBQXBELEVBQUFtQixHQUFBLEdBQ0FzRCxFQUFBekUsRUFBQW9ELEtBQUFwRCxFQUFBbUIsR0FBQSxJQUNBLFVBQUFXLEVBQUFwSCxPQUFBb0gsRUFBQSxLQUdBLFNBQUE4aUYsRUFBQXY2RSxFQUFBckssR0FDQSxJQUFBMlgsRUFBQXROLEVBQUF5cEQsV0FBQXJ2RCxFQUFBekUsRUFBQW9ELEtBQUFwRCxFQUFBbUIsR0FBQSxJQUNBLGlCQUFBaEosS0FBQXdmLEVBQUE5USxPQUFBOFEsRUFBQTlhLE9BQUFtRCxFQUFBbUIsS0FDQSxHQUFBbkIsRUFBQW1CLEtBQUEsV0FBQWhKLEtBQUFrUyxFQUFBMnBELGVBQUFoMEQsS0E1SUFra0YsRUFBQTkrQixFQUFBMCtCLE1BQUEsS0F2Q0E1dUMsQ0FBUXIvQyxFQUFRLHNCQ0tmLFNBQUErNkMsR0FDRCxhQVNBLFNBQUFvMEMsRUFBQTM2RSxFQUFBaEcsR0FVQSxTQUFBNGdGLEVBQUExeEQsR0FDQW4wQixhQUFBZzVELEVBQUE4c0IsVUFDQTlzQixFQUFBOHNCLFNBQUE3bEYsV0FBQSxXQUE2Qys0RCxFQUFBK3NCLFVBQWlCNXhELEdBWDlEeDBCLEtBQUFzTCxLQUNBdEwsS0FBQXNGLFVBQ0F0RixLQUFBcW1GLGFBQUEvZ0YsRUFBQWdoRixvQkFBQWg3RSxFQUFBaVAsVUFBQSxzQkFDQXZhLEtBQUF1bUYsZUFDQXZtRixLQUFBbW1GLFNBQUFubUYsS0FBQXdtRixTQUFBLEtBQ0F4bUYsS0FBQThRLElBQUF4RixFQUFBc3JELG9CQUFBeDZELFlBQUF6QyxTQUFBOEMsY0FBQSxRQUNBdUQsS0FBQThRLElBQUF0VSxNQUFBRSxRQUFBLHlFQUNBc0QsS0FBQXltRixlQU9BLElBQUFwdEIsRUFBQXI1RCxLQUNBc0wsRUFBQStDLEdBQUEsVUFBQXJPLEtBQUEwbUYsY0FBQSxXQUNBcm1GLGFBQUFnNUQsRUFBQW10QixVQUNBbnRCLEVBQUFtdEIsU0FBQWxtRixXQUFBLFdBQ0ErNEQsRUFBQW90QixnQkFBQVAsRUFBQSxLQUNPLE9BRVA1NkUsRUFBQStDLEdBQUEsY0FBQXJPLEtBQUEwbUYsZUFDQXA3RSxFQUFBK0MsR0FBQSxnQkFBQXJPLEtBQUEwbUYsZ0JBQ0EsSUFBQXBoRixFQUFBcWhGLGtCQUNBcjdFLEVBQUErQyxHQUFBLFNBQUFyTyxLQUFBdW9DLGNBQUEsV0FDQTI5QyxFQUFBLE9BakNBcjBDLEVBQUE2bEIsZ0JBQUEsNkJBQUFweUQsR0FFQSxNQURBLGlCQUFBQSxPQUErQy9KLFVBQUErSixJQUMvQyxJQUFBMmdGLEVBQUFqbUYsS0FBQXNGLEtBR0F1c0MsRUFBQThoQixhQUFBLHdCQWdDQXN5QixFQUFBcnRGLFVBQUE2dEYsYUFBQSxXQUNBLElBQUFuN0UsRUFBQXRMLEtBQUFzTCxHQUNBczdFLEdBQUF0N0UsRUFBQXNyRCxvQkFBQTV6QyxhQUFBMVgsRUFBQUMsUUFBQTBYLFVBQUEsRUFBQWpqQixLQUFBcW1GLGNBQ0EvNkUsRUFBQXVyRCxxQkFBQW5rQyxhQUNBLEdBQUFrMEQsR0FBQTVtRixLQUFBNG1GLE9BRUEsT0FEQTVtRixLQUFBNG1GLFVBQ0EsR0FJQVgsRUFBQXJ0RixVQUFBZzdCLE9BQUEsU0FBQTJ5RCxHQUNBdm1GLEtBQUF1bUYsY0FDQXZtRixLQUFBb21GLFVBR0FILEVBQUFydEYsVUFBQXd0RixPQUFBLFNBQUEvdUMsSUFDQSxJQUFBQSxHQUFBcjNDLEtBQUF5bUYsZUFDQSxJQUFBbjdFLEVBQUF0TCxLQUFBc0wsR0FBQXM3RSxFQUFBNW1GLEtBQUE0bUYsT0FFQXorQixFQUFBeHVELFNBQUFtaUIseUJBQUErcUUsRUFBQTdtRixLQUFBdW1GLFlBRUF0aUUsRUFBQTNZLEVBQUFpUCxVQUFBLGdCQUNBdXNFLEVBQUE3aUUsR0FBQSxJQUFBM1ksRUFBQWdxRCxvQkFDQXRxQixFQUFBLEtBQUErN0MsRUFBQSxLQUNBLFNBQUFDLEVBQUEvbEYsRUFBQXdqQixHQUtBLEdBSkF1bUIsR0FBQS9wQyxFQUFBb0QsT0FDQTJtQyxFQUFBL3BDLEVBQUFvRCxLQUNBMGlGLEVBQUF6N0UsRUFBQStnQyxjQUFBckIsSUFFQSs3QyxFQUFBcm1FLFNBQUFxbUUsRUFBQXJtRSxRQUFBL2tCLFFBQ0Fzb0IsR0FBQThpRSxFQUFBcmlGLE9BQUFvaUYsRUFDQSxPQUFBeDdFLEVBQUE0YyxXQUFBam5CLEVBQUEsU0FBQXdqQixFQUFBLGdCQUNBLElBQUF3aUUsRUFBQTM3RSxFQUFBTCxhQUFBODdFLEVBQUEsU0FDQSxPQUFBRSxHQUFBeGlFLEVBQUEsRUFBQXNpRSxFQUFBcmlGLFFBR0EsSUFBQW1HLEVBQUFTLEVBQUFULFdBQ0EsR0FBQVMsRUFBQUMsUUFBQXVYLFNBQUEsUUFBQW9rRSxFQUFBbHdGLEVBQUEsRUFBcURBLEVBQUE2dkYsRUFBQWxyRixPQUFpQjNFLElBQUEsQ0FDdEUsSUFBQW13RixFQUFBTixFQUFBN3ZGLEdBQ0EsS0FBQW13RixFQUFBOWpGLEdBQUFnQixLQUFBd0csR0FBQSxDQUdBLElBRkEsSUFBQTRaLEVBQUF5aUUsR0FBQUYsRUFBQUcsRUFBQS9qRixNQUFBLEdBQUF3akYsRUFDQXBpRSxFQUFBd2lFLEVBQUFHLEVBQUE5akYsSUFBQSxHQUFBdWpGLEVBQ0E1dkYsRUFBQTZ2RixFQUFBbHJGLE9BQUEsS0FDQWtyRixFQUFBN3ZGLEVBQUEsR0FBQXFNLEdBQUFnQixLQUFBd0csT0FDQXE4RSxFQUFBRixFQUFBSCxFQUFBN3ZGLEVBQUEsR0FBQW9NLE1BQUEsR0FBQXdqRixHQUNBcGlFLEVBQUEsS0FDQTJpRSxFQUFBTixJQUFBN3ZGLEdBQ0F3dEIsRUFBQXdpRSxFQUFBRyxFQUFBOWpGLElBQUEsR0FBQXVqRixFQUVBLEdBQUFwaUUsR0FBQUMsRUFBQSxDQUNBLElBQUEvZixFQUFBdEQsS0FBQStFLElBQUFxZSxFQUFBQyxFQUFBLEdBRUFwb0IsRUFBQThyRCxFQUFBL3JELFlBQUF6QyxTQUFBOEMsY0FBQSxRQUNBSixFQUFBRyxNQUFBRSxRQUFBLDBDQUEwRDBFLEtBQUErRSxJQUFBbUYsRUFBQUMsUUFBQXVYLFNBQUEsa0JBQzFEMkIsRUFBQXprQixLQUFBcW1GLGNBQUEsZUFBMEMzaEYsRUFBQSxLQUMxQ3JJLEVBQUFkLFVBQUF5RSxLQUFBc0YsUUFBQS9KLFVBQ0E0ckYsRUFBQWxuRixJQUNBNUQsRUFBQVEsYUFBQSxnQkFBQXNxRixFQUFBbG5GLE1BR0FELEtBQUE4USxJQUFBZzlDLFlBQUEsR0FDQTl0RCxLQUFBOFEsSUFBQTFVLFlBQUErckQsSUFHQTg5QixFQUFBcnRGLFVBQUFnOEIsTUFBQSxXQUNBNTBCLEtBQUFzTCxHQUFBdUQsSUFBQSxVQUFBN08sS0FBQTBtRixlQUNBMW1GLEtBQUFzTCxHQUFBdUQsSUFBQSxjQUFBN08sS0FBQTBtRixlQUNBMW1GLEtBQUFzTCxHQUFBdUQsSUFBQSxnQkFBQTdPLEtBQUEwbUYsZUFDQTFtRixLQUFBdW9DLGVBQUF2b0MsS0FBQXNMLEdBQUF1RCxJQUFBLFNBQUE3TyxLQUFBdW9DLGVBQ0F2b0MsS0FBQThRLElBQUE3VCxXQUFBakIsWUFBQWdFLEtBQUE4USxNQWxIQXFsQyxDQUFRci9DLEVBQVEsc0JDS2YsU0FBQSs2QyxHQUNELGFBQ0EsSUFBQXUxQyxFQUFBLHdCQUNBQyxFQUFBLG1DQUNBQyxFQUFBLCtCQWlCQSxTQUFBQyxFQUFBajhFLEdBQ0EsUUFBQXRVLEVBQUEsRUFBbUJBLEVBQUFzVSxFQUFBa0ksTUFBQWcwRSxZQUFBN3JGLE9BQWlDM0UsSUFDcERzVSxFQUFBcWpDLGdCQUFBcmpDLEVBQUFrSSxNQUFBZzBFLFlBQUF4d0YsR0FBQSxPQUFBb3dGLEdBQ0E5N0UsRUFBQXFqQyxnQkFBQXJqQyxFQUFBa0ksTUFBQWcwRSxZQUFBeHdGLEdBQUEsYUFBQXF3RixHQUNBLzdFLEVBQUFxakMsZ0JBQUFyakMsRUFBQWtJLE1BQUFnMEUsWUFBQXh3RixHQUFBLFNBQUFzd0YsR0FXQSxTQUFBRyxFQUFBbjhFLEVBQUF3Z0IsR0FFQSxJQURBLElBQUF3USxLQUNBdGxDLEVBQUEsRUFBbUJBLEVBQUE4MEIsRUFBQW53QixPQUFtQjNFLElBQUEsQ0FDdEMsSUFBQW1FLEVBQUEyd0IsRUFBQTkwQixHQUNBc3NELEVBQUFoNEMsRUFBQWlQLFVBQUEsbUJBQ0Esb0JBQUErb0MsS0FBQW9rQyxTQUFBdnNGLEVBQUFpdkIsT0FBQS9sQixNQUFBbEosRUFBQWd4QixLQUFBOW5CLEtBQUFsSixFQUFBNndCLFFBQUEsQ0FFQSxJQUFBM25CLEVBQUFpSCxFQUFBaWhDLHlCQUFBcHhDLEVBQUFneEIsS0FBQTluQixNQUNBaTRCLElBQUEzZ0MsT0FBQSxJQUFBMEksR0FBQWk0QixFQUFBOTZCLEtBQUE2QyxLQWZBLFNBQUE1RyxFQUFBQyxHQUNBLEdBQUFELEVBQUE5QixRQUFBK0IsRUFBQS9CLE9BQUEsU0FDQSxRQUFBM0UsRUFBQSxFQUFtQkEsRUFBQXlHLEVBQUE5QixPQUFjM0UsSUFDakMsR0FBQXlHLEVBQUF6RyxJQUFBMEcsRUFBQTFHLEdBQUEsU0FDQSxVQWFBMndGLENBQUFyOEUsRUFBQWtJLE1BQUFnMEUsWUFBQWxyRCxJQUNBaHhCLEVBQUFvdUIsVUFBQSxXQUNBNnRELEVBQUFqOEUsR0FDQSxRQUFBdFUsRUFBQSxFQUFxQkEsRUFBQXNsQyxFQUFBM2dDLE9BQW1CM0UsSUFDeENzVSxFQUFBbWpDLGFBQUFuUyxFQUFBdGxDLEdBQUEsT0FBQW93RixHQUNBOTdFLEVBQUFtakMsYUFBQW5TLEVBQUF0bEMsR0FBQSxhQUFBcXdGLEdBQ0EvN0UsRUFBQW1qQyxhQUFBblMsRUFBQXRsQyxHQUFBLFNBQUFzd0YsR0FFQWg4RSxFQUFBa0ksTUFBQWcwRSxZQUFBbHJELElBSUEsU0FBQXNyRCxFQUFBdDhFLEVBQUF1Z0IsR0FDQTQ3RCxFQUFBbjhFLEVBQUF1Z0IsRUFBQUMsUUFyREErbEIsRUFBQThoQixhQUFBLDhCQUFBcm9ELEVBQUFvSSxFQUFBaE0sR0FDQSxJQUFBbUYsRUFBQW5GLEdBQUFtcUMsRUFBQXVVLE1BQUExK0MsRUFDQWdNLEdBQUE3RyxJQUNBQSxJQUNBdkIsRUFBQXVELElBQUEsd0JBQUErNEUsR0FDQUwsRUFBQWo4RSxVQUNBQSxFQUFBa0ksTUFBQWcwRSxhQUVBOXpFLElBQ0FwSSxFQUFBa0ksTUFBQWcwRSxlQUNBQyxFQUFBbjhFLElBQUFtaEMsa0JBQ0FuaEMsRUFBQStDLEdBQUEsd0JBQUF1NUUsT0F0QkF6eEMsQ0FBUXIvQyxFQUFRLHNCQ1dmLFNBQUErNkMsR0FDRCxhQWtCQSxTQUFBZzJDLEVBQUF2OEUsR0FDQUEsRUFBQWtJLE1BQUFzMEUsaUJBQ0F4OEUsRUFBQW91QixVQUFBLFlBeUNBLFNBQUFwdUIsR0FDQSxJQUFBQSxFQUFBbzBCLG9CQUFBLE9BQUE5SyxFQUFBdHBCLEdBQ0EsR0FBQUEsRUFBQW1oQyxpQkFBQTl3QyxPQUFBLFNBQUE4ekIsRUFBQW5rQixHQUVBLElBQUFsSSxFQUFBa0ksRUFBQXdtQixVQUFBLFNBQUF6dUIsRUFBQWlJLEVBQUF3bUIsVUFBQSxPQUVBNXhCLEVBQUFvTCxFQUFBa0ksTUFBQXMwRSxnQkFDQSxJQUFBNW5GLEVBQUF2RSxPQUFBLE9BQUFvc0YsRUFBQXo4RSxFQUFBbEksRUFBQUMsR0FFQSxJQUFBd2hCLEVBQUEza0IsRUFBQSxHQUFBd0osT0FBQW9iLEVBQUE1a0IsSUFBQXZFLE9BQUEsR0FBQStOLE9BQ0EsSUFBQW1iLElBQUFDLEdBQUF6aEIsRUFBQWdCLEtBQUFqQixFQUFBaUIsTUFBQTJqRixHQUNBcGlGLEVBQUF4QyxFQUFBMGhCLEVBQUF6aEIsS0FBQSxHQUFBdUMsRUFBQXZDLEVBQUF3aEIsRUFBQXpoQixPQUFBLEVBQ0EsT0FBQXFzQixFQUFBbmtCLEdBRUEsS0FBQTFGLEVBQUF4QyxFQUFBeWhCLEVBQUF6aEIsTUFBQSxHQUNBbEQsRUFBQXl2QixRQUFBaUYsUUFDQS9QLEVBQUEza0IsRUFBQSxHQUFBd0osT0FXQSxJQVRBOUQsRUFBQXhDLEVBQUF5aEIsRUFBQXpoQixNQUFBLElBQ0F5aEIsRUFBQXhoQixHQUFBZ0IsS0FBQWpCLEVBQUFpQixLQUFBMmpGLEdBQ0E5bkYsRUFBQXl2QixRQUFBaUYsUUFDQW16RCxFQUFBejhFLEVBQUFsSSxFQUFBeWhCLEVBQUF4aEIsR0FBQSxJQUVBMGtGLEVBQUF6OEUsRUFBQWxJLEVBQUF5aEIsRUFBQXpoQixLQUFBLElBSUF3QyxFQUFBdkMsRUFBQXloQixFQUFBemhCLElBQUEsR0FDQW5ELEVBQUFnakMsTUFBQXRPLFFBQ0E5UCxFQUFBNWtCLElBQUF2RSxPQUFBLEdBQUErTixPQUVBOUQsRUFBQXZDLEVBQUF5aEIsRUFBQXpoQixJQUFBLElBQ0FBLEVBQUFnQixLQUFBeWdCLEVBQUExaEIsS0FBQWlCLEtBQUEyakYsR0FDQTluRixFQUFBZ2pDLE1BQUF0TyxRQUNBbXpELEVBQUF6OEUsRUFBQXdaLEVBQUExaEIsS0FBQUMsSUFFQTBrRixFQUFBejhFLEVBQUF3WixFQUFBemhCLE9BN0UrQnV3QixDQUFBdG9CLEtBRy9CLFNBQUEyOEUsRUFBQTM4RSxHQUNBQSxFQUFBa0ksTUFBQXMwRSxpQkFBQXg4RSxFQUFBa0ksTUFBQXMwRSxnQkFBQW5zRixRQUNBMlAsRUFBQW91QixVQUFBLFdBQStCOUUsRUFBQXRwQixLQXZCL0J1bUMsRUFBQThoQixhQUFBLGdDQUFBcm9ELEVBQUFvSSxFQUFBaE0sR0FDQSxJQUFBbUYsRUFBQW5GLE1BQUFtcUMsRUFBQXVVLEtBQ0ExeUMsSUFBQTdHLEdBQ0F2QixFQUFBa0ksTUFBQXMwRSxtQkFDQXg4RSxFQUFBa0ksTUFBQTAwRSxxQkFBQSxpQkFBQXgwRSxJQUFBLDBCQUNBK2IsRUFBQW5rQixHQUNBQSxFQUFBK0MsR0FBQSxpQkFBQXc1RSxHQUNBdjhFLEVBQUErQyxHQUFBLFNBQUE0NUUsS0FDS3YwRSxHQUFBN0csSUFDTHZCLEVBQUF1RCxJQUFBLGlCQUFBZzVFLEdBQ0F2OEUsRUFBQXVELElBQUEsU0FBQW81RSxHQUNBcnpELEVBQUF0cEIsR0FDQUEsRUFBQWtJLE1BQUFzMEUsZ0JBQUF4OEUsRUFBQWtJLE1BQUEwMEUscUJBQUEsUUFjQSxJQUFBRixFQUFBLEVBQ0F0aUYsRUFBQW1zQyxFQUFBbnNDLElBQ0FFLEVBQUFpc0MsRUFBQTBtQixPQUVBLFNBQUF3dkIsRUFBQXo4RSxFQUFBbEksRUFBQUMsRUFBQThrRixHQUNBLE1BQUF2aUYsRUFBQXhDLEVBQUFDLEdBR0EsSUFGQSxJQUFBbkQsRUFBQW9MLEVBQUFrSSxNQUFBczBFLGdCQUNBN3NGLEVBQUFxUSxFQUFBa0ksTUFBQTAwRSxxQkFDQTdqRixFQUFBakIsRUFBQWlCLE9BQStCLENBQy9CLElBQUF2RyxFQUFBdUcsR0FBQWpCLEVBQUFpQixLQUFBakIsRUFBQXNDLEVBQUFyQixFQUFBLEdBQ0EyaUUsRUFBQTNpRSxFQUFBMmpGLEVBQUFJLEVBQUFwaEIsR0FBQTNqRSxFQUFBZ0IsS0FDQXRHLEVBQUFxcUYsRUFBQS9rRixFQUFBcUMsRUFBQXNoRSxFQUFBLEdBQ0FsZ0MsRUFBQXg3QixFQUFBbS9CLFNBQUEzc0MsRUFBQUMsR0FBMEN4QyxVQUFBTixJQUcxQyxHQUZBLE1BQUFrdEYsRUFBQWpvRixFQUFBc0IsS0FBQXNsQyxHQUNBNW1DLEVBQUE4SSxPQUFBbS9FLElBQUEsRUFBQXJoRCxHQUNBc2hELEVBQUEsTUFDQS9qRixFQUFBMmlFLEdBSUEsU0FBQXB5QyxFQUFBdHBCLEdBRUEsSUFEQSxJQUFBcEwsRUFBQW9MLEVBQUFrSSxNQUFBczBFLGdCQUNBOXdGLEVBQUEsRUFBbUJBLEVBQUFrSixFQUFBdkUsU0FBa0IzRSxFQUFBa0osRUFBQWxKLEdBQUE0OUIsUUFDckMxMEIsRUFBQXZFLE9BQUEsRUFHQSxTQUFBOHpCLEVBQUFua0IsR0FDQXNwQixFQUFBdHBCLEdBRUEsSUFEQSxJQUFBd2dCLEVBQUF4Z0IsRUFBQW1oQyxpQkFDQXoxQyxFQUFBLEVBQW1CQSxFQUFBODBCLEVBQUFud0IsT0FBbUIzRSxJQUN0Qyt3RixFQUFBejhFLEVBQUF3Z0IsRUFBQTkwQixHQUFBb00sT0FBQTBvQixFQUFBOTBCLEdBQUFxTSxPQWhFQTh5QyxDQUFRci9DLEVBQVEsc0JDRGYsU0FBQSs2QyxHQUNELGFBRUFBLEVBQUE4aEIsYUFBQSx5QkFBQXJvRCxFQUFBb0ksRUFBQWhNLEdBQ0FBLE1BQUFtcUMsRUFBQXVVLE9BQ0E5NkMsRUFBQWlqQyxZQUFBampDLEVBQUFrSSxNQUFBMjNELFdBQUE3bEUsUUFBQThaLFFBQ0E5VCxFQUFBa0ksTUFBQTIzRCxXQUFBLEtBQ0E3L0QsRUFBQXVELElBQUEsY0FBQXc1RSxHQUNBLzhFLEVBQUF1RCxJQUFBLFNBQUFvNUUsR0FDQTM4RSxFQUFBdUQsSUFBQSxpQkFBQXk1RSxHQUNBaDlFLEVBQUF1RCxJQUFBLE9BQUEwNUUsR0FDQWo5RSxFQUFBdUQsSUFBQSxTQUFBMDVFLEdBQ0FqOUUsRUFBQXVELElBQUEsVUFBQW81RSxJQUVBdjBFLElBQ0FwSSxFQUFBa0ksTUFBQTIzRCxXQUFBLElBYUEsU0FBQTdsRSxHQUNBdEYsS0FBQXNGLFVBQ0F0RixLQUFBb0QsS0FBQXBELEtBQUFxRCxHQUFBLEVBZkEsQ0FrQkEsU0FBQW1sRixHQUtBLE9BSkEsSUFBQUEsVUFDQSxNQUFBQSxFQUFBcHBFLFNBQUFvcEUsRUFBQXBwRSxPQUFBLHlCQUNBLE1BQUFvcEUsRUFBQUMsZ0JBQUFELEVBQUFDLGNBQUEsOEJBQ0EsTUFBQUQsRUFBQUUsa0JBQUFGLEVBQUFFLGdCQUFBLGdDQUNBRixFQXZCQUcsQ0FBQWoxRSxJQUNBazFFLEVBQUF0OUUsR0FDQUEsRUFBQStDLEdBQUEsY0FBQWc2RSxHQUNBLzhFLEVBQUErQyxHQUFBLFNBQUE0NUUsR0FDQTM4RSxFQUFBK0MsR0FBQSxpQkFBQWk2RSxHQUNBaDlFLEVBQUErQyxHQUFBLE9BQUFrNkUsR0FDQWo5RSxFQUFBK0MsR0FBQSxTQUFBazZFLEdBQ0FqOUUsRUFBQStDLEdBQUEsVUFBQTQ1RSxNQUlBLElBQUF2aUYsRUFBQW1zQyxFQUFBbnNDLElBZUEsU0FBQW1qRixFQUFBdjlFLEVBQUFqSCxHQUVBLElBREEsSUFBQXVqRSxFQUFBdDhELEVBQUFrZ0MsVUFBQTlsQyxFQUFBckIsRUFBQSxHQUFBcUIsRUFBQXJCLEVBQUEsTUFDQXJOLEVBQUEsRUFBbUJBLEVBQUE0d0UsRUFBQWpzRSxTQUFrQjNFLEVBQ3JDLEdBQUE0d0UsRUFBQTV3RSxHQUFBNndFLFVBQUFELEVBQUE1d0UsR0FBQTBTLE9BQUF0RyxLQUFBaUIsUUFBQSxPQUFBdWpFLEVBQUE1d0UsR0FHQSxTQUFBNFAsRUFBQWdNLEdBQ0Esb0JBQUFBLEVBQUEsQ0FDQSxJQUFBdlcsRUFBQTFDLFNBQUE4QyxjQUFBLE9BRUEsT0FEQUosRUFBQWQsVUFBQXFYLEVBQUEsa0NBQ0F2VyxFQUVBLE9BQUF1VyxFQUFBODNCLFdBQUEsR0FJQSxTQUFBbytDLEVBQUF4OUUsRUFBQWxJLEVBQUFDLEdBQ0EsSUFBQW1sRixFQUFBbDlFLEVBQUFrSSxNQUFBMjNELFdBQUE3bEUsUUFBQVQsRUFBQXpCLEVBQ0Fza0UsRUFBQXA4RCxFQUFBeTlFLFdBQUFQLEVBQUEsZUFDQTd3QixFQUFBcnNELEVBQUF5OUUsV0FBQVAsRUFBQSxlQUNBbDlFLEVBQUEra0MsU0FBQWp0QyxFQUFBQyxFQUFBLFNBQUFnQixHQUNBLElBQUF5aUMsRUFBQSxLQUNBLEdBQUEraEQsRUFBQXY5RSxFQUFBekcsR0FDQWlpQyxFQUFBbGdDLEVBQUE0aEYsRUFBQUUscUJBQ08sQ0FDUCxJQUFBem5GLEVBQUF5RSxFQUFBYixFQUFBLEdBQ0ExSixFQUFBdzhELEtBQUFyc0QsRUFBQXJLLEdBQ0E5RixLQUFBa0ksR0FBQWdCLEtBQUFsSixFQUFBaUksS0FBQWlCLE1BQUFxakUsSUFDQTVnQyxFQUFBbGdDLEVBQUE0aEYsRUFBQUMsZ0JBRUFuOUUsRUFBQStpQyxnQkFBQWhxQyxFQUFBbWtGLEVBQUFwcEUsT0FBQTBuQixLQUNBamlDLElBSUEsU0FBQStqRixFQUFBdDlFLEdBQ0EsSUFBQTA5RSxFQUFBMTlFLEVBQUFrcUQsY0FBQWhpRCxFQUFBbEksRUFBQWtJLE1BQUEyM0QsV0FDQTMzRCxJQUNBbEksRUFBQW91QixVQUFBLFdBQ0FvdkQsRUFBQXg5RSxFQUFBMDlFLEVBQUE1bEYsS0FBQTRsRixFQUFBM2xGLE1BRUFtUSxFQUFBcFEsS0FBQTRsRixFQUFBNWxGLEtBQXlCb1EsRUFBQW5RLEdBQUEybEYsRUFBQTNsRixJQUd6QixTQUFBZ2xGLEVBQUEvOEUsRUFBQWpILEVBQUErYSxHQUNBLElBQUE1TCxFQUFBbEksRUFBQWtJLE1BQUEyM0QsV0FDQSxHQUFBMzNELEVBQUEsQ0FDQSxJQUFBZzFFLEVBQUFoMUUsRUFBQWxPLFFBQ0EsR0FBQThaLEdBQUFvcEUsRUFBQXBwRSxPQUFBLENBQ0EsSUFBQTZwRSxFQUFBSixFQUFBdjlFLEVBQUFqSCxHQUNBNGtGLElBQUFyMEQsUUFDQXRwQixFQUFBKzhELFNBQUEzaUUsRUFBQXJCLEVBQUEsR0FBQW1rRixFQUFBcmdCLGVBR0EsU0FBQThmLEVBQUEzOEUsR0FDQSxJQUFBa0ksRUFBQWxJLEVBQUFrSSxNQUFBMjNELFdBQ0EsR0FBQTMzRCxFQUFBLENBQ0EsSUFBQWcxRSxFQUFBaDFFLEVBQUFsTyxRQUNBa08sRUFBQXBRLEtBQUFvUSxFQUFBblEsR0FBQSxFQUNBaEQsYUFBQW1ULEVBQUEwMUUsY0FDQTExRSxFQUFBMDFFLGFBQUE1b0YsV0FBQSxXQUFnRHNvRixFQUFBdDlFLElBQXdCazlFLEVBQUFXLHNCQUFBLE1BR3hFLFNBQUFiLEVBQUFoOUUsR0FDQSxJQUFBa0ksRUFBQWxJLEVBQUFrSSxNQUFBMjNELFdBQ0EsR0FBQTMzRCxFQUFBLENBQ0EsSUFBQWcxRSxFQUFBaDFFLEVBQUFsTyxRQUNBakYsYUFBQW1ULEVBQUEwMUUsY0FDQTExRSxFQUFBMDFFLGFBQUE1b0YsV0FBQSxXQUNBLElBQUEwb0YsRUFBQTE5RSxFQUFBa3FELGNBQ0FoaUQsRUFBQXBRLE1BQUFvUSxFQUFBblEsSUFBQTJsRixFQUFBNWxGLEtBQUFvUSxFQUFBblEsR0FBQSxJQUFBbVEsRUFBQXBRLEtBQUE0bEYsRUFBQTNsRixHQUFBLEdBQ0F1bEYsRUFBQXQ5RSxHQUVBQSxFQUFBb3VCLFVBQUEsV0FDQXN2RCxFQUFBNWxGLEtBQUFvUSxFQUFBcFEsT0FDQTBsRixFQUFBeDlFLEVBQUEwOUUsRUFBQTVsRixLQUFBb1EsRUFBQXBRLE1BQ0FvUSxFQUFBcFEsS0FBQTRsRixFQUFBNWxGLE1BRUE0bEYsRUFBQTNsRixHQUFBbVEsRUFBQW5RLEtBQ0F5bEYsRUFBQXg5RSxFQUFBa0ksRUFBQW5RLEdBQUEybEYsRUFBQTNsRixJQUNBbVEsRUFBQW5RLEdBQUEybEYsRUFBQTNsRixPQUlLbWxGLEVBQUFZLHdCQUFBLE1BR0wsU0FBQWIsRUFBQWo5RSxFQUFBbEksR0FDQSxJQUFBb1EsRUFBQWxJLEVBQUFrSSxNQUFBMjNELFdBQ0EsR0FBQTMzRCxFQUFBLENBQ0EsSUFBQW5QLEVBQUFqQixFQUFBaUIsS0FDQUEsR0FBQW1QLEVBQUFwUSxNQUFBaUIsRUFBQW1QLEVBQUFuUSxJQUNBeWxGLEVBQUF4OUUsRUFBQWpILElBQUEsS0ExSUE4eEMsQ0FBUXIvQyxFQUFRLEdBQXlCQSxFQUFRLHNCQ0toRCxTQUFBKzZDLEdBQ0QsYUFFQUEsRUFBQW1sQixxQkFBQSwwQkFBQTcrRCxHQUNBLE9BQUFBLEVBQUErc0UsbUJBQUEvc0UsRUFBQWd0RSxpQkFDQyxTQUFBNzVELEVBQUF4TixHQUNELElBQUEzRixFQUFBbVQsRUFBQXkvQyxVQUFBanRELEdBQUF1ckYsRUFBQWx4RixFQUFBK3NFLGtCQUFBb2tCLEVBQUFueEYsRUFBQWd0RSxnQkFDQSxHQUFBa2tCLEdBQUFDLEVBQUEsQ0FJQSxJQUhBLElBRUEvaEYsRUFGQWxELEVBQUF2RyxFQUFBdUcsS0FBQWtsRixFQUFBaitFLEVBQUE1SCxRQUFBVyxHQUdBeUosRUFBQWhRLEVBQUFzRSxHQUFBbzZFLEVBQUEsSUFBb0MsQ0FDcEMsSUFBQWwwRSxFQUFBd0YsR0FBQSxLQUFBeTdFLEVBQUFqakIsWUFBQStpQixFQUFBdjdFLEVBQUEsR0FDQSxPQUFBeEYsRUFBQSxDQU1BLE1BQUFrMEUsR0FBQWwwRSxFQUFBeEssRUFBQXNFLEdBQUEsT0FDQSxhQUFBaEosS0FBQWtTLEVBQUEycEQsZUFBQXBqQixFQUFBbnNDLElBQUFyQixFQUFBaUUsRUFBQSxPQUNBLEdBQUFBLEdBQUFpaEYsRUFBQTl0RixNQUFBNk0sRUFBQWdoRixFQUFBM3RGLE9BQUEyTSxJQUFBZ2hGLElBQ0EsVUFBQWx3RixLQUFBa1MsRUFBQTJwRCxlQUFBcGpCLEVBQUFuc0MsSUFBQXJCLEVBQUFpRSxNQUFBLENBQ0FmLEVBQUFlLEVBQUErZ0YsRUFBQTF0RixPQUNBLE1BRUFtUyxFQUFBeEYsRUFBQSxNQWJBLENBQ0EsTUFBQWswRSxFQUFBLE9BQ0FBLEVBQUEsRUFDQTF1RSxFQUFBeTdFLEVBQUE1dEYsUUFhQSxJQUFBb0MsRUFBQXlKLEVBQUF3c0UsRUFBQSxFQUFBbnBFLEVBQUFTLEVBQUFULFdBQ0E1RixFQUFBLFFBQUFqTyxFQUFBcU4sRUFBMkJyTixHQUFBNlQsSUFBZTdULEVBRTFDLElBREEsSUFBQXVOLEVBQUErRyxFQUFBNUgsUUFBQTFNLEdBQUFpSyxFQUFBakssR0FBQXFOLEVBQUFrRCxFQUFBLElBQ1csQ0FDWCxJQUFBaWlGLEVBQUFqbEYsRUFBQTVFLFFBQUEwcEYsRUFBQXBvRixHQUFBeWlGLEVBQUFuL0UsRUFBQTVFLFFBQUEycEYsRUFBQXJvRixHQUlBLEdBSEF1b0YsRUFBQSxJQUFBQSxFQUFBamxGLEVBQUE1SSxRQUNBK25GLEVBQUEsSUFBQUEsRUFBQW4vRSxFQUFBNUksU0FDQXNGLEVBQUFHLEtBQUFDLElBQUFtb0YsRUFBQTlGLEtBQ0FuL0UsRUFBQTVJLE9BQUEsTUFDQSxHQUFBc0YsR0FBQXVvRixJQUFBeFYsT0FDQSxNQUFBQSxFQUFBLENBQTBCajJFLEVBQUEvRyxFQUFTd1EsRUFBQXZHLEVBQWEsTUFBQWdFLElBQ2hEaEUsRUFHQSxTQUFBbEQsSUFBQXNHLEdBQUF0RyxHQUFBeUosR0FBQUQsR0FDQSxPQUFVbkUsS0FBQXl1QyxFQUFBbnNDLElBQUFyQixFQUFBa0QsR0FDVmxFLEdBQUF3dUMsRUFBQW5zQyxJQUFBM0gsRUFBQXlKLE9BbERBMnVDLENBQVFyL0MsRUFBUSxzQkNLZixTQUFBKzZDLEdBQ0QsYUFFQSxTQUFBNDNDLEVBQUFuK0UsRUFBQTFHLEdBQ0EsSUFBQUwsRUFBQStHLEVBQUE1SCxRQUFBa0IsR0FDQThrRixFQUFBbmxGLEVBQUE5RSxPQUFBLE1BQ0EsVUFBQWlxRixHQUFBLGNBQUF0d0YsS0FBQWtTLEVBQUEycEQsZUFBQXBqQixFQUFBbnNDLElBQUFkLEVBQUE4a0YsRUFBQSxNQUNBLEVBQ0E3M0MsRUFBQXp5QyxZQUFBbUYsRUFBQSxLQUFBK0csRUFBQWlQLFVBQUEsWUFHQXMzQixFQUFBa2xCLGVBQUEseUJBQUF6ckQsRUFBQXhOLEdBQ0EsSUFBQTZyRixFQUFBRixFQUFBbitFLEVBQUF4TixFQUFBdUcsTUFDQSxLQUFBc2xGLEVBQUEsSUFLQSxJQUpBLElBQUFDLEVBQUEsS0FJQTV5RixFQUFBOEcsRUFBQXVHLEtBQUEsRUFBQXRHLEVBQUF1TixFQUFBVCxXQUFtRDdULEdBQUErRyxJQUFVL0csRUFBQSxDQUM3RCxJQUFBb3lELEVBQUFxZ0MsRUFBQW4rRSxFQUFBdFUsR0FDQSxPQUFBb3lELE9BQ0ssTUFBQUEsRUFBQXVnQyxHQU9MLE1BTEFDLEVBQUE1eUYsR0FRQSxPQUFBNHlGLEdBQ0F4bUYsS0FBQXl1QyxFQUFBbnNDLElBQUE1SCxFQUFBdUcsS0FBQWlILEVBQUE1SCxRQUFBNUYsRUFBQXVHLE1BQUExSSxRQUNBMEgsR0FBQXd1QyxFQUFBbnNDLElBQUFra0YsRUFBQXQrRSxFQUFBNUgsUUFBQWttRixHQUFBanVGLGNBRkEsS0FwQ0F3NkMsQ0FBUXIvQyxFQUFRLHNCQ0tmLFNBQUErNkMsR0FDRCxhQUVBQSxFQUFBa2xCLGVBQUEsd0JBQUF6ckQsRUFBQXhOLEdBQ0EsSUFDQW1pRSxFQURBNTdELEVBQUF2RyxFQUFBdUcsS0FBQWtsRixFQUFBaitFLEVBQUE1SCxRQUFBVyxHQUdBLFNBQUF3bEYsRUFBQUMsR0FDQSxRQUFBaDhFLEVBQUFoUSxFQUFBc0UsR0FBQW82RSxFQUFBLElBQXNDLENBQ3RDLElBQUFsMEUsRUFBQXdGLEdBQUEsS0FBQXk3RSxFQUFBampCLFlBQUF3akIsRUFBQWg4RSxFQUFBLEdBQ0EsT0FBQXhGLEVBQUEsQ0FNQSxNQUFBazBFLEdBQUFsMEUsRUFBQXhLLEVBQUFzRSxHQUFBLE1BRUEsR0FEQTY5RCxFQUFBMzBELEVBQUEycEQsZUFBQXBqQixFQUFBbnNDLElBQUFyQixFQUFBaUUsRUFBQSxLQUNBLG9CQUFBbFAsS0FBQTZtRSxHQUFBLE9BQUEzM0QsRUFBQSxFQUNBd0YsRUFBQXhGLEVBQUEsTUFUQSxDQUNBLE1BQUFrMEUsRUFBQSxNQUNBQSxFQUFBLEVBQ0ExdUUsRUFBQXk3RSxFQUFBNXRGLFNBVUEsSUFBQTB0RixFQUFBLElBQXFCQyxFQUFBLElBQWdCL2hGLEVBQUFzaUYsRUFBQSxLQU1yQyxHQUxBLE1BQUF0aUYsSUFDQThoRixFQUFBLElBQUFDLEVBQUEsSUFDQS9oRixFQUFBc2lGLEVBQUEsTUFHQSxNQUFBdGlGLEVBQUEsQ0FDQSxJQUFBeEosRUFBQXlKLEVBQUExTCxFQUFBLEVBQUErTyxFQUFBUyxFQUFBVCxXQUNBNUYsRUFBQSxRQUFBak8sRUFBQXFOLEVBQTJCck4sR0FBQTZULElBQWU3VCxFQUUxQyxJQURBLElBQUF1TixFQUFBK0csRUFBQTVILFFBQUExTSxHQUFBaUssRUFBQWpLLEdBQUFxTixFQUFBa0QsRUFBQSxJQUNXLENBQ1gsSUFBQWlpRixFQUFBamxGLEVBQUE1RSxRQUFBMHBGLEVBQUFwb0YsR0FBQXlpRixFQUFBbi9FLEVBQUE1RSxRQUFBMnBGLEVBQUFyb0YsR0FJQSxHQUhBdW9GLEVBQUEsSUFBQUEsRUFBQWpsRixFQUFBNUksUUFDQStuRixFQUFBLElBQUFBLEVBQUFuL0UsRUFBQTVJLFNBQ0FzRixFQUFBRyxLQUFBQyxJQUFBbW9GLEVBQUE5RixLQUNBbi9FLEVBQUE1SSxPQUFBLE1BQ0EsR0FBQTJQLEVBQUEycEQsZUFBQXBqQixFQUFBbnNDLElBQUExTyxFQUFBaUssRUFBQSxLQUFBZy9ELEVBQ0EsR0FBQWgvRCxHQUFBdW9GLElBQUExdEYsT0FDQSxNQUFBQSxFQUFBLENBQTRCaUMsRUFBQS9HLEVBQVN3USxFQUFBdkcsRUFBYSxNQUFBZ0UsSUFFbERoRSxFQUdBLFNBQUFsRCxJQUFBc0csR0FBQXRHLEdBQUF5SixHQUFBRCxHQUNBLE9BQVVuRSxLQUFBeXVDLEVBQUFuc0MsSUFBQXJCLEVBQUFrRCxHQUNWbEUsR0FBQXd1QyxFQUFBbnNDLElBQUEzSCxFQUFBeUosT0FHQXFxQyxFQUFBa2xCLGVBQUEseUJBQUF6ckQsRUFBQXhOLEdBQ0EsU0FBQWlzRixFQUFBMWxGLEdBQ0EsR0FBQUEsRUFBQWlILEVBQUF3MUIsYUFBQXo4QixFQUFBaUgsRUFBQVQsV0FBQSxZQUNBLElBQUEvTSxFQUFBd04sRUFBQXlwRCxXQUFBbGpCLEVBQUFuc0MsSUFBQXJCLEVBQUEsSUFFQSxHQURBLEtBQUFqTCxLQUFBMEUsRUFBQXVCLFVBQUF2QixFQUFBd04sRUFBQXlwRCxXQUFBbGpCLEVBQUFuc0MsSUFBQXJCLEVBQUF2RyxFQUFBQyxJQUFBLEtBQ0EsV0FBQUQsRUFBQWdLLE1BQUEsVUFBQWhLLEVBQUF1QixPQUFBLFlBRUEsUUFBQXJJLEVBQUFxTixFQUFBeEksRUFBQXVGLEtBQUFDLElBQUFpSyxFQUFBVCxXQUFBeEcsRUFBQSxJQUE4RHJOLEdBQUE2RSxJQUFRN0UsRUFBQSxDQUN0RSxJQUFBdU4sRUFBQStHLEVBQUE1SCxRQUFBMU0sR0FBQWd6RixFQUFBemxGLEVBQUE1RSxRQUFBLEtBQ0EsT0FBQXFxRixFQUFBLE9BQThCemlGLFFBQUF6SixFQUFBQyxRQUFBOHpDLEVBQUFuc0MsSUFBQTFPLEVBQUFnekYsS0FJOUIsSUFBQW45RSxFQUFBaTZELEVBQUFocEUsRUFBQXVHLEtBQUE0bEYsRUFBQUYsRUFBQWpqQixHQUNBLElBQUFtakIsR0FBQUYsRUFBQWpqQixFQUFBLEtBQUFqNkQsRUFBQWs5RSxFQUFBampCLEVBQUEsS0FBQWo2RCxFQUFBOU8sSUFBQXNHLE1BQUF5aUUsRUFBQSxFQUNBLFlBQ0EsUUFBQS9vRSxFQUFBa3NGLEVBQUFsc0YsTUFBMEIsQ0FDMUIsSUFBQTBXLEVBQUFzMUUsRUFBQWhzRixFQUFBc0csS0FBQSxHQUNBLFNBQUFvUSxFQUFBLE1BQ0ExVyxFQUFBMFcsRUFBQTFXLElBRUEsT0FBVXFGLEtBQUFrSSxFQUFBbEYsUUFBQXlyQyxFQUFBbnNDLElBQUFvaEUsRUFBQW1qQixFQUFBMWlGLFFBQUEsSUFBQWxFLEdBQUF0RixLQUdWOHpDLEVBQUFrbEIsZUFBQSwwQkFBQXpyRCxFQUFBeE4sR0FDQSxTQUFBb3NGLEVBQUE3bEYsR0FDQSxHQUFBQSxFQUFBaUgsRUFBQXcxQixhQUFBejhCLEVBQUFpSCxFQUFBVCxXQUFBLFlBQ0EsSUFBQS9NLEVBQUF3TixFQUFBeXBELFdBQUFsakIsRUFBQW5zQyxJQUFBckIsRUFBQSxJQUVBLE1BREEsS0FBQWpMLEtBQUEwRSxFQUFBdUIsVUFBQXZCLEVBQUF3TixFQUFBeXBELFdBQUFsakIsRUFBQW5zQyxJQUFBckIsRUFBQXZHLEVBQUFDLElBQUEsS0FDQSxRQUFBRCxFQUFBZ0ssTUFBQSxZQUFBaEssRUFBQXVCLE9BQUE1RCxNQUFBLEtBQUFxQyxRQUFBLFNBR0EsSUFBQWdwRSxFQUFBaHBFLEVBQUF1RyxLQUFBNGxGLEVBQUFDLEVBQUFwakIsR0FDQSxTQUFBbWpCLEdBQUEsTUFBQUMsRUFBQXBqQixFQUFBLGVBQ0EsUUFBQS9vRSxFQUFBK29FLElBQTRCLENBQzVCLElBQUFyeUQsRUFBQXkxRSxFQUFBbnNGLEVBQUEsR0FDQSxTQUFBMFcsRUFBQSxRQUNBMVcsRUFFQSxPQUFVcUYsS0FBQXl1QyxFQUFBbnNDLElBQUFvaEUsRUFBQW1qQixFQUFBLEdBQ1Y1bUYsR0FBQWlJLEVBQUFsRixRQUFBeXJDLEVBQUFuc0MsSUFBQTNILE9BaEdBbzRDLENBQVFyL0MsRUFBUSxzQkNLZixTQUFBKzZDLEdBQ0QsYUFFQUEsRUFBQWtsQixlQUFBLDJCQUFBenJELEVBQUF4TixHQUNBLElBQUFxc0YsRUFBQSxJQUVBLFNBQUFDLEVBQUF4bEYsR0FDQSxJQUFBeWxGLEVBQUEvK0UsRUFBQTJwRCxlQUFBcGpCLEVBQUFuc0MsSUFBQWQsRUFBQSxJQUNBLE9BQUF5bEYsR0FBQSxhQUFBanhGLEtBQUFpeEYsR0FHQSxTQUFBQyxFQUFBMWxGLEVBQUFQLEVBQUFpVSxHQUNBLElBQUExZCxFQUFBeUosS0FBQXpKLE1BQUEsT0FDQSxPQUFBQSxHQUFBd3ZGLEVBQUF4bEYsR0FBQWhLLEVBQUEsR0FBQWUsUUFDQWYsRUFBQTBkLEtBQUExZCxNQUFBLGlCQUNBd3ZGLEVBQUF4bEYsRUFBQSxRQUFBMFQsRUFBQSxPQUNBNnhFLEVBR0EsSUFBQXJwRCxFQUFBeDFCLEVBQUE1SCxRQUFBNUYsRUFBQXVHLE1BQUFpVSxFQUFBaE4sRUFBQTVILFFBQUE1RixFQUFBdUcsS0FBQSxHQUNBb0ksRUFBQTY5RSxFQUFBeHNGLEVBQUF1RyxLQUFBeThCLEVBQUF4b0IsR0FDQSxHQUFBN0wsSUFBQTA5RSxFQUFBLENBSUEsSUFGQSxJQUFBSSxFQUFBai9FLEVBQUFULFdBQ0E5TSxFQUFBRCxFQUFBdUcsS0FBQW1tRixFQUFBbC9FLEVBQUE1SCxRQUFBM0YsRUFBQSxHQUNBQSxFQUFBd3NGLEtBQ0FELEVBQUF2c0YsRUFBQSxFQUFBdWEsRUFBQWt5RSxJQUFBLzlFLE1BQ0ExTyxFQUNBdWEsRUFBQWt5RSxFQUNBQSxFQUFBbC9FLEVBQUE1SCxRQUFBM0YsRUFBQSxHQUdBLE9BQ0FxRixLQUFBeXVDLEVBQUFuc0MsSUFBQTVILEVBQUF1RyxLQUFBeThCLEVBQUFubEMsUUFDQTBILEdBQUF3dUMsRUFBQW5zQyxJQUFBM0gsRUFBQXVOLEVBQUE1SCxRQUFBM0YsR0FBQXBDLFlBdkNBdzZDLENBQVFyL0MsRUFBUSw0RENMaEIsU0FBQTJ6RixJQU1DLFNBQUFuMEYsR0FDRCxhQU1BLElBQUF5cUUsR0FDQTJwQixRQUFBLE9BQ0F4K0UsS0FBQSxvQkFDQXkrRSxPQUFBQyxFQUNBcnJCLEdBQUEseURBQ0F2RSxRQUFBLDZDQUNBNnZCLFFBQUFELEVBQ0EzWSxXQUFBLDBDQUNBbjBELEtBQUEsZ0VBQ0E2a0UsS0FBQSxrWUFVQW1JLElBQUEsbUZBQ0ExdUIsTUFBQXd1QixFQUNBRyxTQUFBLG9DQUNBQyxVQUFBLDRHQUNBem1GLEtBQUEsV0FtR0EsU0FBQTBtRixFQUFBM2xGLEdBQ0F0RixLQUFBaVosVUFDQWpaLEtBQUFpWixPQUFBaXlFLE1BQUF4ekYsT0FBQVksT0FBQSxNQUNBMEgsS0FBQXNGLFdBQUF1bUUsRUFBQXhsQixTQUNBcm1ELEtBQUFtckYsTUFBQXBxQixFQUFBNTdDLE9BRUFubEIsS0FBQXNGLFFBQUE0bUUsU0FDQWxzRSxLQUFBbXJGLE1BQUFwcUIsRUFBQW1MLFNBQ0dsc0UsS0FBQXNGLFFBQUF5bUUsTUFDSC9yRSxLQUFBc0YsUUFBQTBtRSxPQUNBaHNFLEtBQUFtckYsTUFBQXBxQixFQUFBaUwsT0FFQWhzRSxLQUFBbXJGLE1BQUFwcUIsRUFBQWdMLEtBNUdBaEwsRUFBQXFxQixPQUFBLGlDQUNBcnFCLEVBQUFzcUIsT0FBQSwrREFDQXRxQixFQUFBK3BCLElBQUF0dkIsRUFBQXVGLEVBQUErcEIsS0FDQTM5RSxRQUFBLFFBQUE0ekQsRUFBQXFxQixRQUNBaitFLFFBQUEsUUFBQTR6RCxFQUFBc3FCLFFBQ0FDLFdBRUF2cUIsRUFBQStqQixPQUFBLGtCQUNBL2pCLEVBQUFwRCxLQUFBLDZDQUNBb0QsRUFBQXBELEtBQUFuQyxFQUFBdUYsRUFBQXBELEtBQUEsTUFDQXh3RCxRQUFBLFFBQUE0ekQsRUFBQStqQixRQUNBd0csV0FFQXZxQixFQUFBampELEtBQUEwOUMsRUFBQXVGLEVBQUFqakQsTUFDQTNRLFFBQUEsUUFBQTR6RCxFQUFBK2pCLFFBQ0EzM0UsUUFBQSx3RUFDQUEsUUFBQSxnQkFBQTR6RCxFQUFBK3BCLElBQUFyb0YsT0FBQSxLQUNBNm9GLFdBRUF2cUIsRUFBQXdxQixLQUFBLGdXQU1BeHFCLEVBQUF5cUIsU0FBQSx5QkFDQXpxQixFQUFBNGhCLEtBQUFubkIsRUFBQXVGLEVBQUE0aEIsS0FBQSxLQUNBeDFFLFFBQUEsVUFBQTR6RCxFQUFBeXFCLFVBQ0FyK0UsUUFBQSxNQUFBNHpELEVBQUF3cUIsTUFDQXArRSxRQUFBLHdGQUNBbStFLFdBRUF2cUIsRUFBQWlxQixVQUFBeHZCLEVBQUF1RixFQUFBaXFCLFdBQ0E3OUUsUUFBQSxLQUFBNHpELEVBQUF4QixJQUNBcHlELFFBQUEsVUFBQTR6RCxFQUFBL0YsU0FDQTd0RCxRQUFBLFdBQUE0ekQsRUFBQWdxQixVQUNBNTlFLFFBQUEsTUFBQTR6RCxFQUFBd3FCLE1BQ0FELFdBRUF2cUIsRUFBQWtSLFdBQUF6VyxFQUFBdUYsRUFBQWtSLFlBQ0E5a0UsUUFBQSxZQUFBNHpELEVBQUFpcUIsV0FDQU0sV0FNQXZxQixFQUFBNTdDLE9BQUFzbUUsS0FBdUIxcUIsR0FNdkJBLEVBQUFnTCxJQUFBMGYsS0FBb0IxcUIsRUFBQTU3QyxRQUNwQndsRSxPQUFBLCtEQUNBSyxVQUFBLElBQ0Fod0IsUUFBQSwwQ0FHQStGLEVBQUFnTCxJQUFBaWYsVUFBQXh2QixFQUFBdUYsRUFBQWlxQixXQUNBNzlFLFFBQUEsWUFDQTR6RCxFQUFBZ0wsSUFBQTRlLE9BQUFsb0YsT0FBQTBLLFFBQUEsaUJBQ0E0ekQsRUFBQWpqRCxLQUFBcmIsT0FBQTBLLFFBQUEsa0JBQ0FtK0UsV0FNQXZxQixFQUFBaUwsT0FBQXlmLEtBQXVCMXFCLEVBQUFnTCxLQUN2QjhlLFFBQUEsZ0ZBQ0F6dUIsTUFBQSwwRUFPQTJFLEVBQUFtTCxTQUFBdWYsS0FBeUIxcUIsRUFBQTU3QyxRQUN6Qnc5RCxLQUFBbm5CLEVBQ0EsOElBR0FydUQsUUFBQSxVQUFBNHpELEVBQUF5cUIsVUFDQXIrRSxRQUFBLDRLQUlBbStFLFdBQ0FSLElBQUEsc0VBNEJBRyxFQUFBRSxNQUFBcHFCLEVBTUFrcUIsRUFBQTVOLElBQUEsU0FBQTUwQixFQUFBbmpELEdBRUEsT0FEQSxJQUFBMmxGLEVBQUEzbEYsR0FDQSszRSxJQUFBNTBCLElBT0F3aUMsRUFBQXJ5RixVQUFBeWtGLElBQUEsU0FBQTUwQixHQU9BLE9BTkFBLElBQ0F0N0MsUUFBQSxpQkFDQUEsUUFBQSxjQUNBQSxRQUFBLGVBQ0FBLFFBQUEsZ0JBRUFuTixLQUFBNFksTUFBQTZ2QyxHQUFBLElBT0F3aUMsRUFBQXJ5RixVQUFBZ2dCLE1BQUEsU0FBQTZ2QyxFQUFBaGtDLEdBRUEsSUFBQWhRLEVBQ0FpM0UsRUFDQUMsRUFDQUMsRUFDQWx1RixFQUNBaWdFLEVBQ0FrdUIsRUFDQUMsRUFDQTV6RixFQUNBK3lCLEVBQ0FqMEIsRUFDQXNGLEVBQ0FyRixFQUNBODBGLEVBQ0FDLEVBQ0FDLEVBRUEsSUFsQkF4akMsSUFBQXQ3QyxRQUFBLGFBa0JBczdDLEdBWUEsSUFWQWtqQyxFQUFBM3JGLEtBQUFtckYsTUFBQVQsUUFBQW54RixLQUFBa3ZELE1BQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBZ3dGLEVBQUEsR0FBQWh3RixPQUFBLEdBQ0FxRSxLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLFdBTUE2akYsRUFBQTNyRixLQUFBbXJGLE1BQUFqL0UsS0FBQTNTLEtBQUFrdkQsR0FDQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0Fnd0YsSUFBQSxHQUFBeCtFLFFBQUEsVUFBaUMsSUFDakNuTixLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLE9BQ0F2RCxLQUFBdkUsS0FBQXNGLFFBQUE0bUUsU0FFQXlmLEVBREFPLEVBQUFQLEVBQUEsYUFPQSxHQUFBQSxFQUFBM3JGLEtBQUFtckYsTUFBQVIsT0FBQXB4RixLQUFBa3ZELEdBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBcUUsS0FBQWlaLE9BQUF6WCxNQUNBc0csS0FBQSxPQUNBdTJELEtBQUFzdEIsRUFBQSxHQUNBcG5GLEtBQUFvbkYsRUFBQSxjQU1BLEdBQUFBLEVBQUEzckYsS0FBQW1yRixNQUFBbndCLFFBQUF6aEUsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQXFFLEtBQUFpWixPQUFBelgsTUFDQXNHLEtBQUEsVUFDQWtzRSxNQUFBMlgsRUFBQSxHQUFBaHdGLE9BQ0E0SSxLQUFBb25GLEVBQUEsVUFNQSxHQUFBbG5FLElBQUFrbkUsRUFBQTNyRixLQUFBbXJGLE1BQUFOLFFBQUF0eEYsS0FBQWt2RCxNQUNBa1YsR0FDQTcxRCxLQUFBLFFBQ0FxM0QsT0FBQWd0QixFQUFBUixFQUFBLEdBQUF4K0UsUUFBQSxvQkFDQXVqQixNQUFBaTdELEVBQUEsR0FBQXgrRSxRQUFBLGlCQUFBdlAsTUFBQSxVQUNBd3VGLE1BQUFULEVBQUEsR0FBQUEsRUFBQSxHQUFBeCtFLFFBQUEsVUFBQXZQLE1BQUEsV0FHQXVoRSxPQUFBeGpFLFNBQUFnaUUsRUFBQWp0QyxNQUFBLzBCLE9BUkEsQ0FXQSxJQUZBOHNELElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUVBM0UsRUFBQSxFQUFtQkEsRUFBQTJtRSxFQUFBanRDLE1BQUEvMEIsT0FBdUIzRSxJQUMxQyxZQUFBb0MsS0FBQXVrRSxFQUFBanRDLE1BQUExNUIsSUFDQTJtRSxFQUFBanRDLE1BQUExNUIsR0FBQSxRQUNXLGFBQUFvQyxLQUFBdWtFLEVBQUFqdEMsTUFBQTE1QixJQUNYMm1FLEVBQUFqdEMsTUFBQTE1QixHQUFBLFNBQ1csWUFBQW9DLEtBQUF1a0UsRUFBQWp0QyxNQUFBMTVCLElBQ1gybUUsRUFBQWp0QyxNQUFBMTVCLEdBQUEsT0FFQTJtRSxFQUFBanRDLE1BQUExNUIsR0FBQSxLQUlBLElBQUFBLEVBQUEsRUFBbUJBLEVBQUEybUUsRUFBQXl1QixNQUFBendGLE9BQXVCM0UsSUFDMUMybUUsRUFBQXl1QixNQUFBcDFGLEdBQUFtMUYsRUFBQXh1QixFQUFBeXVCLE1BQUFwMUYsR0FBQTJtRSxFQUFBd0IsT0FBQXhqRSxRQUdBcUUsS0FBQWlaLE9BQUF6WCxLQUFBbThELFFBT0EsR0FBQWd1QixFQUFBM3JGLEtBQUFtckYsTUFBQTVyQixHQUFBaG1FLEtBQUFrdkQsR0FDQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0FxRSxLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLFlBTUEsR0FBQTZqRixFQUFBM3JGLEtBQUFtckYsTUFBQWxaLFdBQUExNEUsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFFQXFFLEtBQUFpWixPQUFBelgsTUFDQXNHLEtBQUEscUJBR0E2akYsSUFBQSxHQUFBeCtFLFFBQUEsZUFLQW5OLEtBQUE0WSxNQUFBK3lFLEVBQUFsbkUsR0FFQXprQixLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLHdCQU9BLEdBQUE2akYsRUFBQTNyRixLQUFBbXJGLE1BQUFydEUsS0FBQXZrQixLQUFBa3ZELEdBQUEsQ0FzQkEsSUFyQkFBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUlBa3dGLEdBQ0EvakYsS0FBQSxhQUNBdWtGLFFBSkFOLEdBREFILEVBQUFELEVBQUEsSUFDQWh3RixPQUFBLEVBS0FtQyxNQUFBaXVGLEdBQUFILEVBQUEsR0FDQUYsT0FBQSxHQUdBMXJGLEtBQUFpWixPQUFBelgsS0FBQXFxRixHQUtBQyxLQUNBcjNFLEdBQUEsRUFDQXhkLEdBSkEwMEYsSUFBQSxHQUFBL3dGLE1BQUFvRixLQUFBbXJGLE1BQUF4dEIsT0FJQWhpRSxPQUNBM0UsRUFBQSxFQUVZQSxFQUFBQyxFQUFPRCxJQUtuQmkwQixHQUpBMHlDLEVBQUFndUIsRUFBQTMwRixJQUlBMkUsU0FDQWdpRSxJQUFBeHdELFFBQUEsMEJBSUF4TixRQUFBLFNBQ0FzckIsR0FBQTB5QyxFQUFBaGlFLE9BQ0FnaUUsRUFBQTM5RCxLQUFBc0YsUUFBQTRtRSxTQUVBdk8sRUFBQXh3RCxRQUFBLFlBQW1DLElBRG5Dd3dELEVBQUF4d0QsUUFBQSxJQUFBalMsT0FBQSxRQUEwQyt2QixFQUFBLElBQWdCLFdBTTFEanJCLEtBQUFzRixRQUFBOG1FLFlBQUFwMUUsSUFBQUMsRUFBQSxJQUVBMjBGLEtBREFsdUYsRUFBQXFqRSxFQUFBK2pCLE9BQUF2ckYsS0FBQW95RixFQUFBMzBGLEVBQUEsU0FDQTQwRixFQUFBandGLE9BQUEsR0FBQStCLEVBQUEvQixPQUFBLElBQ0E4c0QsRUFBQWtqQyxFQUFBbHdGLE1BQUF6RSxFQUFBLEdBQUFpMUMsS0FBQSxNQUFBd2MsRUFDQXp4RCxFQUFBQyxFQUFBLElBT0F5MEYsRUFBQWozRSxHQUFBLGVBQUFyYixLQUFBdWtFLEdBQ0EzbUUsSUFBQUMsRUFBQSxJQUNBd2QsRUFBQSxPQUFBa3BELEVBQUExNkQsT0FBQTA2RCxFQUFBaGlFLE9BQUEsR0FDQSt2RixNQUFBajNFLElBR0FpM0UsSUFDQUcsRUFBQUgsT0FBQSxHQUtBTyxPQUFBejNFLEdBREF3M0UsRUFBQSxjQUFBNXlGLEtBQUF1a0UsTUFHQXN1QixFQUFBLE1BQUF0dUIsRUFBQSxHQUNBQSxJQUFBeHdELFFBQUEsb0JBR0FqVixHQUNBNFAsS0FBQSxrQkFDQXdrRixLQUFBTixFQUNBTyxRQUFBTixFQUNBUCxTQUdBSSxFQUFBdHFGLEtBQUF0SixHQUNBOEgsS0FBQWlaLE9BQUF6WCxLQUFBdEosR0FHQThILEtBQUE0WSxNQUFBK2tELEdBQUEsR0FFQTM5RCxLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLGtCQUlBLEdBQUErakYsRUFBQUgsTUFHQSxJQUZBejBGLEVBQUE2MEYsRUFBQW53RixPQUNBM0UsRUFBQSxFQUNjQSxFQUFBQyxFQUFPRCxJQUNyQjgwRixFQUFBOTBGLEdBQUEwMEYsT0FBQSxFQUlBMXJGLEtBQUFpWixPQUFBelgsTUFDQXNHLEtBQUEsa0JBT0EsR0FBQTZqRixFQUFBM3JGLEtBQUFtckYsTUFBQXhJLEtBQUFwcEYsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQXFFLEtBQUFpWixPQUFBelgsTUFDQXNHLEtBQUE5SCxLQUFBc0YsUUFBQTZtRSxTQUNBLFlBQ0EsT0FDQS94RCxLQUFBcGEsS0FBQXNGLFFBQUFrbkYsWUFDQSxRQUFBYixFQUFBLGVBQUFBLEVBQUEsY0FBQUEsRUFBQSxJQUNBcG5GLEtBQUFvbkYsRUFBQSxVQU1BLEdBQUFsbkUsSUFBQWtuRSxFQUFBM3JGLEtBQUFtckYsTUFBQUwsSUFBQXZ4RixLQUFBa3ZELElBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBZ3dGLEVBQUEsS0FBQUEsRUFBQSxHQUFBQSxFQUFBLEdBQUF4bkIsVUFBQSxFQUFBd25CLEVBQUEsR0FBQWh3RixPQUFBLElBQ0FXLEVBQUFxdkYsRUFBQSxHQUFBcnBGLGNBQUE2SyxRQUFBLFlBQ0FuTixLQUFBaVosT0FBQWl5RSxNQUFBNXVGLEtBQ0EwRCxLQUFBaVosT0FBQWl5RSxNQUFBNXVGLElBQ0ErdEUsS0FBQXNoQixFQUFBLEdBQ0F2d0UsTUFBQXV3RSxFQUFBLFVBT0EsR0FBQWxuRSxJQUFBa25FLEVBQUEzckYsS0FBQW1yRixNQUFBL3VCLE1BQUE3aUUsS0FBQWt2RCxNQUNBa1YsR0FDQTcxRCxLQUFBLFFBQ0FxM0QsT0FBQWd0QixFQUFBUixFQUFBLEdBQUF4K0UsUUFBQSxvQkFDQXVqQixNQUFBaTdELEVBQUEsR0FBQXgrRSxRQUFBLGlCQUFBdlAsTUFBQSxVQUNBd3VGLE1BQUFULEVBQUEsR0FBQUEsRUFBQSxHQUFBeCtFLFFBQUEscUJBQUF2UCxNQUFBLFdBR0F1aEUsT0FBQXhqRSxTQUFBZ2lFLEVBQUFqdEMsTUFBQS8wQixPQVJBLENBV0EsSUFGQThzRCxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFFQTNFLEVBQUEsRUFBbUJBLEVBQUEybUUsRUFBQWp0QyxNQUFBLzBCLE9BQXVCM0UsSUFDMUMsWUFBQW9DLEtBQUF1a0UsRUFBQWp0QyxNQUFBMTVCLElBQ0EybUUsRUFBQWp0QyxNQUFBMTVCLEdBQUEsUUFDVyxhQUFBb0MsS0FBQXVrRSxFQUFBanRDLE1BQUExNUIsSUFDWDJtRSxFQUFBanRDLE1BQUExNUIsR0FBQSxTQUNXLFlBQUFvQyxLQUFBdWtFLEVBQUFqdEMsTUFBQTE1QixJQUNYMm1FLEVBQUFqdEMsTUFBQTE1QixHQUFBLE9BRUEybUUsRUFBQWp0QyxNQUFBMTVCLEdBQUEsS0FJQSxJQUFBQSxFQUFBLEVBQW1CQSxFQUFBMm1FLEVBQUF5dUIsTUFBQXp3RixPQUF1QjNFLElBQzFDMm1FLEVBQUF5dUIsTUFBQXAxRixHQUFBbTFGLEVBQ0F4dUIsRUFBQXl1QixNQUFBcDFGLEdBQUFtVyxRQUFBLHVCQUNBd3dELEVBQUF3QixPQUFBeGpFLFFBR0FxRSxLQUFBaVosT0FBQXpYLEtBQUFtOEQsUUFPQSxHQUFBZ3VCLEVBQUEzckYsS0FBQW1yRixNQUFBSixTQUFBeHhGLEtBQUFrdkQsR0FDQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0FxRSxLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLFVBQ0Frc0UsTUFBQSxNQUFBMlgsRUFBQSxPQUNBcG5GLEtBQUFvbkYsRUFBQSxVQU1BLEdBQUFsbkUsSUFBQWtuRSxFQUFBM3JGLEtBQUFtckYsTUFBQUgsVUFBQXp4RixLQUFBa3ZELElBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBcUUsS0FBQWlaLE9BQUF6WCxNQUNBc0csS0FBQSxZQUNBdkQsS0FBQSxPQUFBb25GLEVBQUEsR0FBQTFvRixPQUFBMG9GLEVBQUEsR0FBQWh3RixPQUFBLEdBQ0Fnd0YsRUFBQSxHQUFBbHdGLE1BQUEsTUFDQWt3RixFQUFBLFVBTUEsR0FBQUEsRUFBQTNyRixLQUFBbXJGLE1BQUE1bUYsS0FBQWhMLEtBQUFrdkQsR0FFQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0FxRSxLQUFBaVosT0FBQXpYLE1BQ0FzRyxLQUFBLE9BQ0F2RCxLQUFBb25GLEVBQUEsVUFLQSxHQUFBbGpDLEVBQ0EsVUFBQTNrRCxNQUFBLDBCQUFBMmtELEVBQUE1bEQsV0FBQSxJQUlBLE9BQUE3QyxLQUFBaVosUUFPQSxJQUFBNG5ELEdBQ0E0ckIsT0FBQSw4Q0FDQUMsU0FBQSxzQ0FDQW55QixJQUFBcXdCLEVBQ0F0dUYsSUFBQSwySkFNQXl6QyxLQUFBLDJDQUNBNDhDLFFBQUEsd0RBQ0FDLE9BQUEsZ0VBQ0E1c0IsT0FBQSw4R0FDQUQsR0FBQSxpTEFDQTd6RCxLQUFBLG9DQUNBdWtFLEdBQUEsd0JBQ0FvYyxJQUFBakMsRUFDQXJtRixLQUFBLHlDQW9GQSxTQUFBdW9GLEVBQUE1QixFQUFBNWxGLEdBT0EsR0FOQXRGLEtBQUFzRixXQUFBdW1FLEVBQUF4bEIsU0FDQXJtRCxLQUFBa3JGLFFBQ0FsckYsS0FBQW1yRixNQUFBdHFCLEVBQUExN0MsT0FDQW5sQixLQUFBK3NGLFNBQUEvc0YsS0FBQXNGLFFBQUF5bkYsVUFBQSxJQUFBQyxFQUNBaHRGLEtBQUErc0YsU0FBQXpuRixRQUFBdEYsS0FBQXNGLFNBRUF0RixLQUFBa3JGLE1BQ0EsVUFBQXBuRixNQUFBLDZDQUdBOUQsS0FBQXNGLFFBQUE0bUUsU0FDQWxzRSxLQUFBbXJGLE1BQUF0cUIsRUFBQXFMLFNBQ0dsc0UsS0FBQXNGLFFBQUF5bUUsTUFDSC9yRSxLQUFBc0YsUUFBQTJtRSxPQUNBanNFLEtBQUFtckYsTUFBQXRxQixFQUFBb0wsT0FFQWpzRSxLQUFBbXJGLE1BQUF0cUIsRUFBQWtMLEtBNFBBLFNBQUFpaEIsRUFBQTFuRixHQUNBdEYsS0FBQXNGLFdBQUF1bUUsRUFBQXhsQixTQTJLQSxTQUFBNG1DLEtBeUJBLFNBQUFDLEVBQUE1bkYsR0FDQXRGLEtBQUFpWixVQUNBalosS0FBQTRZLE1BQUEsS0FDQTVZLEtBQUFzRixXQUFBdW1FLEVBQUF4bEIsU0FDQXJtRCxLQUFBc0YsUUFBQXluRixTQUFBL3NGLEtBQUFzRixRQUFBeW5GLFVBQUEsSUFBQUMsRUFDQWh0RixLQUFBK3NGLFNBQUEvc0YsS0FBQXNGLFFBQUF5bkYsU0FDQS9zRixLQUFBK3NGLFNBQUF6bkYsUUFBQXRGLEtBQUFzRixRQTRLQSxTQUFBbW5GLEVBQUE5SixFQUFBd0ssR0FDQSxPQUFBeEssRUFDQXgxRSxRQUFBZ2dGLEVBQWtDLEtBQWxDLGVBQWtDLFNBQ2xDaGdGLFFBQUEsYUFDQUEsUUFBQSxhQUNBQSxRQUFBLGVBQ0FBLFFBQUEsY0FHQSxTQUFBaWdGLEVBQUF6SyxHQUVBLE9BQUFBLEVBQUF4MUUsUUFBQSw2Q0FBOEQsU0FBQXl5RSxFQUFBbm5GLEdBRTlELGlCQURBQSxJQUFBNkosZUFDQSxJQUNBLE1BQUE3SixFQUFBd0ssT0FBQSxHQUNBLE1BQUF4SyxFQUFBd0ssT0FBQSxHQUNBc0MsT0FBQXN3QyxhQUFBdHpCLFNBQUE5cEIsRUFBQTByRSxVQUFBLFFBQ0E1K0QsT0FBQXN3QyxjQUFBcDlDLEVBQUEwckUsVUFBQSxJQUVBLEtBSUEsU0FBQTNJLEVBQUF1SSxFQUFBNTVCLEdBR0EsT0FGQTQ1QixJQUFBdGhFLFFBQUFzaEUsRUFDQTU1QixLQUFBLElBRUFoOUIsUUFBQSxTQUFBNVYsRUFBQW1jLEdBSUEsT0FGQUEsR0FEQUEsSUFBQWpSLFFBQUFpUixHQUNBdkcsUUFBQSxxQkFDQTQyRCxJQUFBNTJELFFBQUE1VixFQUFBbWMsR0FDQTFULE1BRUFzckYsU0FBQSxXQUNBLFdBQUFwd0YsT0FBQTZvRSxFQUFBNTVCLEtBS0EsU0FBQWtqRCxFQUFBdHJGLEVBQUFzb0UsR0FhQSxPQVpBaWpCLEVBQUEsSUFBQXZyRixLQUlBLG1CQUFBM0ksS0FBQTJJLEdBQ0F1ckYsRUFBQSxJQUFBdnJGLEtBQUEsSUFFQXVyRixFQUFBLElBQUF2ckYsR0FBQW1xRixFQUFBbnFGLEVBQUEsU0FHQUEsRUFBQXVyRixFQUFBLElBQUF2ckYsR0FFQSxPQUFBc29FLEVBQUE1dUUsTUFBQSxLQUNBc0csRUFBQW9MLFFBQUEsZ0JBQUFrOUQsRUFDRyxNQUFBQSxFQUFBcG5FLE9BQUEsR0FDSGxCLEVBQUFvTCxRQUFBLDJCQUFBazlELEVBRUF0b0UsRUFBQXNvRSxFQTl3QkF4SixFQUFBMHNCLFNBQUEsOENBRUExc0IsRUFBQTJzQixRQUFBLCtCQUNBM3NCLEVBQUE0c0IsT0FBQSwrSUFDQTVzQixFQUFBNnJCLFNBQUFseEIsRUFBQXFGLEVBQUE2ckIsVUFDQXYvRSxRQUFBLFNBQUEwekQsRUFBQTJzQixTQUNBcmdGLFFBQUEsUUFBQTB6RCxFQUFBNHNCLFFBQ0FuQyxXQUVBenFCLEVBQUE2c0IsV0FBQSw4RUFFQTdzQixFQUFBdmtFLElBQUFrL0QsRUFBQXFGLEVBQUF2a0UsS0FDQTZRLFFBQUEsVUFBQTR6RCxFQUFBeXFCLFVBQ0FyK0UsUUFBQSxZQUFBMHpELEVBQUE2c0IsWUFDQXBDLFdBRUF6cUIsRUFBQXVxQixPQUFBLGlEQUNBdnFCLEVBQUE4c0IsTUFBQSx1RkFDQTlzQixFQUFBd3FCLE9BQUEsOERBRUF4cUIsRUFBQTl3QixLQUFBeXJCLEVBQUFxRixFQUFBOXdCLE1BQ0E1aUMsUUFBQSxRQUFBMHpELEVBQUF1cUIsUUFDQWorRSxRQUFBLE9BQUEwekQsRUFBQThzQixPQUNBeGdGLFFBQUEsUUFBQTB6RCxFQUFBd3FCLFFBQ0FDLFdBRUF6cUIsRUFBQThyQixRQUFBbnhCLEVBQUFxRixFQUFBOHJCLFNBQ0F4L0UsUUFBQSxRQUFBMHpELEVBQUF1cUIsUUFDQUUsV0FNQXpxQixFQUFBMTdDLE9BQUFzbUUsS0FBd0I1cUIsR0FNeEJBLEVBQUFxTCxTQUFBdWYsS0FBMEI1cUIsRUFBQTE3QyxRQUMxQjY2QyxPQUFBLGlFQUNBRCxHQUFBLDJEQUNBaHdCLEtBQUF5ckIsRUFBQSwyQkFDQXJ1RCxRQUFBLFFBQUEwekQsRUFBQXVxQixRQUNBRSxXQUNBcUIsUUFBQW54QixFQUFBLGlDQUNBcnVELFFBQUEsUUFBQTB6RCxFQUFBdXFCLFFBQ0FFLGFBT0F6cUIsRUFBQWtMLElBQUEwZixLQUFxQjVxQixFQUFBMTdDLFFBQ3JCc25FLE9BQUFqeEIsRUFBQXFGLEVBQUE0ckIsUUFBQXQvRSxRQUFBLGFBQUFtK0UsV0FDQS93QixJQUFBaUIsRUFBQSxvRUFDQXJ1RCxRQUFBLFFBQUEwekQsRUFBQTRzQixRQUNBbkMsV0FDQXNDLFdBQUEseUVBQ0FmLElBQUEsMEJBQ0F0b0YsS0FBQWkzRCxFQUFBcUYsRUFBQXQ4RCxNQUNBNEksUUFBQSxZQUNBQSxRQUFBLHFFQUNBbStFLGFBT0F6cUIsRUFBQW9MLE9BQUF3ZixLQUF3QjVxQixFQUFBa0wsS0FDeEIwRSxHQUFBalYsRUFBQXFGLEVBQUE0UCxJQUFBdGpFLFFBQUEsT0FBbUMsS0FBQW0rRSxXQUNuQy9tRixLQUFBaTNELEVBQUFxRixFQUFBa0wsSUFBQXhuRSxNQUFBNEksUUFBQSxPQUEyQyxLQUFBbStFLGFBaUMzQ3dCLEVBQUEzQixNQUFBdHFCLEVBTUFpc0IsRUFBQTN6RSxPQUFBLFNBQUFzdkMsRUFBQXlpQyxFQUFBNWxGLEdBRUEsT0FEQSxJQUFBd25GLEVBQUE1QixFQUFBNWxGLEdBQ0E2VCxPQUFBc3ZDLElBT0Fxa0MsRUFBQWwwRixVQUFBdWdCLE9BQUEsU0FBQXN2QyxHQVNBLElBUkEsSUFDQTFZLEVBQ0F4ckMsRUFDQThsRSxFQUNBanZELEVBQ0F1d0UsRUFDQWtDLEVBTkFqc0YsRUFBQSxHQVFBNm1ELEdBRUEsR0FBQWtqQyxFQUFBM3JGLEtBQUFtckYsTUFBQXNCLE9BQUFsekYsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQWlHLEdBQUErcEYsRUFBQSxRQUtBLEdBQUFBLEVBQUEzckYsS0FBQW1yRixNQUFBdUIsU0FBQW56RixLQUFBa3ZELEdBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUdBMHVFLEVBRkEsTUFBQXNoQixFQUFBLEdBRUEsV0FEQXBuRixFQUFBa29GLEVBQUF6c0YsS0FBQTh0RixPQUFBbkMsRUFBQSxNQUdBcG5GLEVBQUFrb0YsRUFBQWQsRUFBQSxJQUdBL3BGLEdBQUE1QixLQUFBK3NGLFNBQUFoOUMsS0FBQXM2QixFQUFBLEtBQUE5bEUsUUFLQSxHQUFBdkUsS0FBQSt0RixVQUFBcEMsRUFBQTNyRixLQUFBbXJGLE1BQUE1d0IsSUFBQWhoRSxLQUFBa3ZELEtBc0JBLEdBQUFrakMsRUFBQTNyRixLQUFBbXJGLE1BQUE3dUYsSUFBQS9DLEtBQUFrdkQsSUFDQXpvRCxLQUFBK3RGLFFBQUEsUUFBQTMwRixLQUFBdXlGLEVBQUEsSUFDQTNyRixLQUFBK3RGLFFBQUEsRUFDTy90RixLQUFBK3RGLFFBQUEsVUFBQTMwRixLQUFBdXlGLEVBQUEsTUFDUDNyRixLQUFBK3RGLFFBQUEsR0FFQXRsQyxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQWlHLEdBQUE1QixLQUFBc0YsUUFBQTZtRSxTQUNBbnNFLEtBQUFzRixRQUFBa25GLFVBQ0F4c0YsS0FBQXNGLFFBQUFrbkYsVUFBQWIsRUFBQSxJQUNBYyxFQUFBZCxFQUFBLElBQ0FBLEVBQUEsUUFLQSxHQUFBQSxFQUFBM3JGLEtBQUFtckYsTUFBQXA3QyxLQUFBeDJDLEtBQUFrdkQsR0FDQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0FxRSxLQUFBK3RGLFFBQUEsRUFDQTFqQixFQUFBc2hCLEVBQUEsR0FDQTNyRixLQUFBc0YsUUFBQTRtRSxVQUNBbjhCLEVBQUEsZ0NBQUF4MkMsS0FBQTh3RSxLQUdBQSxFQUFBdDZCLEVBQUEsR0FDQTMwQixFQUFBMjBCLEVBQUEsSUFFQTMwQixFQUFBLEdBR0FBLEVBQUF1d0UsRUFBQSxHQUFBQSxFQUFBLEdBQUFsd0YsTUFBQSxTQUVBNHVFLElBQUEyakIsT0FBQTdnRixRQUFBLHNCQUNBdkwsR0FBQTVCLEtBQUFpdUYsV0FBQXRDLEdBQ0F0aEIsS0FBQXlpQixFQUFBb0IsUUFBQTdqQixHQUNBanZELE1BQUEweEUsRUFBQW9CLFFBQUE5eUUsS0FFQXBiLEtBQUErdEYsUUFBQSxPQUtBLElBQUFwQyxFQUFBM3JGLEtBQUFtckYsTUFBQXdCLFFBQUFwekYsS0FBQWt2RCxNQUNBa2pDLEVBQUEzckYsS0FBQW1yRixNQUFBeUIsT0FBQXJ6RixLQUFBa3ZELElBREEsQ0FLQSxHQUhBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQW8wQyxHQUFBNDdDLEVBQUEsSUFBQUEsRUFBQSxJQUFBeCtFLFFBQUEsY0FDQTRpQyxFQUFBL3ZDLEtBQUFrckYsTUFBQW43QyxFQUFBenRDLGtCQUNBeXRDLEVBQUFzNkIsS0FBQSxDQUNBem9FLEdBQUErcEYsRUFBQSxHQUFBMW9GLE9BQUEsR0FDQXdsRCxFQUFBa2pDLEVBQUEsR0FBQXhuQixVQUFBLEdBQUExYixFQUNBLFNBRUF6b0QsS0FBQSt0RixRQUFBLEVBQ0Fuc0YsR0FBQTVCLEtBQUFpdUYsV0FBQXRDLEVBQUE1N0MsR0FDQS92QyxLQUFBK3RGLFFBQUEsT0FLQSxHQUFBcEMsRUFBQTNyRixLQUFBbXJGLE1BQUFuckIsT0FBQXptRSxLQUFBa3ZELEdBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBaUcsR0FBQTVCLEtBQUErc0YsU0FBQS9zQixPQUFBaGdFLEtBQUFtWixPQUFBd3lFLEVBQUEsSUFBQUEsRUFBQSxJQUFBQSxFQUFBLElBQUFBLEVBQUEsVUFLQSxHQUFBQSxFQUFBM3JGLEtBQUFtckYsTUFBQXByQixHQUFBeG1FLEtBQUFrdkQsR0FDQUEsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0FpRyxHQUFBNUIsS0FBQStzRixTQUFBaHRCLEdBQUEvL0QsS0FBQW1aLE9BQUF3eUUsRUFBQSxJQUFBQSxFQUFBLElBQUFBLEVBQUEsSUFBQUEsRUFBQSxJQUFBQSxFQUFBLElBQUFBLEVBQUEsVUFLQSxHQUFBQSxFQUFBM3JGLEtBQUFtckYsTUFBQWovRSxLQUFBM1MsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQWlHLEdBQUE1QixLQUFBK3NGLFNBQUFvQixTQUFBMUIsRUFBQWQsRUFBQSxHQUFBcUMsUUFBQSxTQUtBLEdBQUFyQyxFQUFBM3JGLEtBQUFtckYsTUFBQTFhLEdBQUFsM0UsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQWlHLEdBQUE1QixLQUFBK3NGLFNBQUF0YyxVQUtBLEdBQUFrYixFQUFBM3JGLEtBQUFtckYsTUFBQTBCLElBQUF0ekYsS0FBQWt2RCxHQUNBQSxJQUFBMGIsVUFBQXduQixFQUFBLEdBQUFod0YsUUFDQWlHLEdBQUE1QixLQUFBK3NGLFNBQUFGLElBQUE3c0YsS0FBQW1aLE9BQUF3eUUsRUFBQSxVQUtBLEdBQUFBLEVBQUEzckYsS0FBQW1yRixNQUFBNW1GLEtBQUFoTCxLQUFBa3ZELEdBQ0FBLElBQUEwYixVQUFBd25CLEVBQUEsR0FBQWh3RixRQUNBaUcsR0FBQTVCLEtBQUErc0YsU0FBQXhvRixLQUFBa29GLEVBQUF6c0YsS0FBQXFzRSxZQUFBc2YsRUFBQSxXQUlBLEdBQUFsakMsRUFDQSxVQUFBM2tELE1BQUEsMEJBQUEya0QsRUFBQTVsRCxXQUFBLFFBM0hBLENBQ0EsR0FDQWdyRixFQUFBbEMsRUFBQSxHQUNBQSxFQUFBLEdBQUEzckYsS0FBQW1yRixNQUFBeUMsV0FBQXIwRixLQUFBb3lGLEVBQUEsYUFDT2tDLElBQUFsQyxFQUFBLElBQ1BsakMsSUFBQTBiLFVBQUF3bkIsRUFBQSxHQUFBaHdGLFFBQ0EsTUFBQWd3RixFQUFBLEdBRUF0aEIsRUFBQSxXQURBOWxFLEVBQUFrb0YsRUFBQWQsRUFBQSxNQUdBcG5GLEVBQUFrb0YsRUFBQWQsRUFBQSxJQUVBdGhCLEVBREEsU0FBQXNoQixFQUFBLEdBQ0EsVUFBQXBuRixFQUVBQSxHQUdBM0MsR0FBQTVCLEtBQUErc0YsU0FBQWg5QyxLQUFBczZCLEVBQUEsS0FBQTlsRSxHQThHQSxPQUFBM0MsR0FHQWtyRixFQUFBb0IsUUFBQSxTQUFBM3BGLEdBQ0EsT0FBQUEsSUFBQTRJLFFBQUEyL0UsRUFBQTNCLE1BQUFvQyxTQUFBLE1BQUFocEYsR0FPQXVvRixFQUFBbDBGLFVBQUFxMUYsV0FBQSxTQUFBdEMsRUFBQTU3QyxHQUNBLElBQUFzNkIsRUFBQXQ2QixFQUFBczZCLEtBQ0FqdkQsRUFBQTIwQixFQUFBMzBCLE1BQUFxeEUsRUFBQTE4QyxFQUFBMzBCLE9BQUEsS0FFQSxZQUFBdXdFLEVBQUEsR0FBQTFvRixPQUFBLEdBQ0FqRCxLQUFBK3NGLFNBQUFoOUMsS0FBQXM2QixFQUFBanZELEVBQUFwYixLQUFBbVosT0FBQXd5RSxFQUFBLEtBQ0EzckYsS0FBQStzRixTQUFBNXhCLE1BQUFrUCxFQUFBanZELEVBQUFxeEUsRUFBQWQsRUFBQSxNQU9BbUIsRUFBQWwwRixVQUFBeXpFLFlBQUEsU0FBQTluRSxHQUNBLE9BQUF2RSxLQUFBc0YsUUFBQSttRSxZQUNBOW5FLEVBRUE0SSxRQUFBLFlBRUFBLFFBQUEsV0FFQUEsUUFBQSwwQkFBOEIsT0FFOUJBLFFBQUEsVUFFQUEsUUFBQSwrQkFBOEIsT0FFOUJBLFFBQUEsVUFFQUEsUUFBQSxTQUFtQixLQWZuQjVJLEdBc0JBdW9GLEVBQUFsMEYsVUFBQWsxRixPQUFBLFNBQUF2cEYsR0FDQSxJQUFBdkUsS0FBQXNGLFFBQUF3b0YsT0FBQSxPQUFBdnBGLEVBTUEsSUFMQSxJQUdBbkMsRUFIQVIsRUFBQSxHQUNBM0ssRUFBQXNOLEVBQUE1SSxPQUNBM0UsRUFBQSxFQUdRQSxFQUFBQyxFQUFPRCxJQUNmb0wsRUFBQW1DLEVBQUExQixXQUFBN0wsR0FDQW9LLEtBQUFndEYsU0FBQSxLQUNBaHNGLEVBQUEsSUFBQUEsRUFBQTNCLFNBQUEsS0FFQW1CLEdBQUEsS0FBQVEsRUFBQSxJQUdBLE9BQUFSLEdBV0FvckYsRUFBQXAwRixVQUFBc1QsS0FBQSxTQUFBQSxFQUFBbXlELEVBQUFzYyxHQUNBLEdBQUEzNkUsS0FBQXNGLFFBQUFzMUIsVUFBQSxDQUNBLElBQUFoNUIsRUFBQTVCLEtBQUFzRixRQUFBczFCLFVBQUExdUIsRUFBQW15RCxHQUNBLE1BQUF6OEQsT0FBQXNLLElBQ0F5dUUsR0FBQSxFQUNBenVFLEVBQUF0SyxHQUlBLE9BQUF5OEQsRUFNQSxxQkFDQXIrRCxLQUFBc0YsUUFBQStvRixXQUNBNUIsRUFBQXB1QixHQUFBLEdBQ0EsTUFDQXNjLEVBQUF6dUUsRUFBQXVnRixFQUFBdmdGLEdBQUEsSUFDQSxrQkFWQSxlQUNBeXVFLEVBQUF6dUUsRUFBQXVnRixFQUFBdmdGLEdBQUEsSUFDQSxpQkFXQThnRixFQUFBcDBGLFVBQUFxNUUsV0FBQSxTQUFBL1gsR0FDQSx1QkFBQUEsRUFBQSxtQkFHQTh5QixFQUFBcDBGLFVBQUErcEYsS0FBQSxTQUFBQSxHQUNBLE9BQUFBLEdBR0FxSyxFQUFBcDBGLFVBQUFvaUUsUUFBQSxTQUFBejJELEVBQUFrSSxFQUFBNmhGLEdBQ0EsT0FBQXR1RixLQUFBc0YsUUFBQWlwRixVQUNBLEtBQ0E5aEYsRUFDQSxRQUNBek0sS0FBQXNGLFFBQUFrcEYsYUFDQUYsRUFBQWhzRixjQUFBNkssUUFBQSxlQUNBLEtBQ0E1SSxFQUNBLE1BQ0FrSSxFQUNBLE1BR0EsS0FBQUEsRUFBQSxJQUFBbEksRUFBQSxNQUFBa0ksRUFBQSxPQUdBdWdGLEVBQUFwMEYsVUFBQTJtRSxHQUFBLFdBQ0EsT0FBQXYvRCxLQUFBc0YsUUFBQW1wRixNQUFBLG9CQUdBekIsRUFBQXAwRixVQUFBa2xCLEtBQUEsU0FBQXpnQixFQUFBZ3ZGLEVBQUF2dUYsR0FDQSxJQUFBZ0ssRUFBQXVrRixFQUFBLFVBRUEsVUFBQXZrRixHQURBdWtGLEdBQUEsSUFBQXZ1RixFQUFBLFdBQUFBLEVBQUEsUUFDQSxNQUFBVCxFQUFBLEtBQUF5SyxFQUFBLE9BR0FrbEYsRUFBQXAwRixVQUFBODFGLFNBQUEsU0FBQW5xRixHQUNBLGFBQUFBLEVBQUEsV0FHQXlvRixFQUFBcDBGLFVBQUErMUYsU0FBQSxTQUFBcEMsR0FDQSxpQkFDQUEsRUFBQSxrQkFDQSwrQkFDQXZzRixLQUFBc0YsUUFBQW1wRixNQUFBLFNBQ0EsTUFHQXpCLEVBQUFwMEYsVUFBQW95RixVQUFBLFNBQUF6bUYsR0FDQSxZQUFBQSxFQUFBLFVBR0F5b0YsRUFBQXAwRixVQUFBd2pFLE1BQUEsU0FBQStDLEVBQUE5aEUsR0FHQSxPQUZBQSxNQUFBLFVBQUFBLEVBQUEsWUFFQSxxQkFFQThoRSxFQUNBLGFBQ0E5aEUsRUFDQSxjQUdBMnZGLEVBQUFwMEYsVUFBQWcyRixTQUFBLFNBQUFyeUYsR0FDQSxlQUFBQSxFQUFBLFdBR0F5d0YsRUFBQXAwRixVQUFBaTJGLFVBQUEsU0FBQXR5RixFQUFBdXlGLEdBQ0EsSUFBQWhuRixFQUFBZ25GLEVBQUEzdkIsT0FBQSxVQUlBLE9BSEEydkIsRUFBQXArRCxNQUNBLElBQUE1b0IsRUFBQSxXQUFBZ25GLEVBQUFwK0QsTUFBQSxLQUNBLElBQUE1b0IsRUFBQSxLQUNBdkwsRUFBQSxLQUFBdUwsRUFBQSxPQUlBa2xGLEVBQUFwMEYsVUFBQW9uRSxPQUFBLFNBQUF6N0QsR0FDQSxpQkFBQUEsRUFBQSxhQUdBeW9GLEVBQUFwMEYsVUFBQW1uRSxHQUFBLFNBQUF4N0QsR0FDQSxhQUFBQSxFQUFBLFNBR0F5b0YsRUFBQXAwRixVQUFBdTFGLFNBQUEsU0FBQTVwRixHQUNBLGVBQUFBLEVBQUEsV0FHQXlvRixFQUFBcDBGLFVBQUE2M0UsR0FBQSxXQUNBLE9BQUF6d0UsS0FBQXNGLFFBQUFtcEYsTUFBQSxnQkFHQXpCLEVBQUFwMEYsVUFBQWkwRixJQUFBLFNBQUF0b0YsR0FDQSxjQUFBQSxFQUFBLFVBR0F5b0YsRUFBQXAwRixVQUFBbTNDLEtBQUEsU0FBQXM2QixFQUFBanZELEVBQUE3VyxHQUNBLEdBQUF2RSxLQUFBc0YsUUFBQTZtRSxTQUFBLENBQ0EsSUFDQSxJQUFBNGlCLEVBQUFDLG1CQUFBNUIsRUFBQS9pQixJQUNBbDlELFFBQUEsY0FDQTdLLGNBQ0ssTUFBQXpHLEdBQ0wsT0FBQTBJLEVBRUEsT0FBQXdxRixFQUFBcHZGLFFBQUEsb0JBQUFvdkYsRUFBQXB2RixRQUFBLGtCQUFBb3ZGLEVBQUFwdkYsUUFBQSxTQUNBLE9BQUE0RSxFQUdBdkUsS0FBQXNGLFFBQUEwekQsVUFBQWkyQixFQUFBNzFGLEtBQUFpeEUsS0FDQUEsRUFBQWdqQixFQUFBcnRGLEtBQUFzRixRQUFBMHpELFFBQUFxUixJQUVBLElBQ0FBLEVBQUE2a0IsVUFBQTdrQixHQUFBbDlELFFBQUEsWUFDRyxNQUFBdFIsR0FDSCxPQUFBMEksRUFFQSxJQUFBM0MsRUFBQSxZQUFBNnFGLEVBQUFwaUIsR0FBQSxJQUtBLE9BSkFqdkQsSUFDQXhaLEdBQUEsV0FBQXdaLEVBQUEsS0FFQXhaLEdBQUEsSUFBQTJDLEVBQUEsUUFJQXlvRixFQUFBcDBGLFVBQUF1aUUsTUFBQSxTQUFBa1AsRUFBQWp2RCxFQUFBN1csR0FDQXZFLEtBQUFzRixRQUFBMHpELFVBQUFpMkIsRUFBQTcxRixLQUFBaXhFLEtBQ0FBLEVBQUFnakIsRUFBQXJ0RixLQUFBc0YsUUFBQTB6RCxRQUFBcVIsSUFFQSxJQUFBem9FLEVBQUEsYUFBQXlvRSxFQUFBLFVBQUE5bEUsRUFBQSxJQUtBLE9BSkE2VyxJQUNBeFosR0FBQSxXQUFBd1osRUFBQSxLQUVBeFosR0FBQTVCLEtBQUFzRixRQUFBbXBGLE1BQUEsVUFJQXpCLEVBQUFwMEYsVUFBQTJMLEtBQUEsU0FBQUEsR0FDQSxPQUFBQSxHQVlBMG9GLEVBQUFyMEYsVUFBQW9uRSxPQUNBaXRCLEVBQUFyMEYsVUFBQW1uRSxHQUNBa3RCLEVBQUFyMEYsVUFBQXUxRixTQUNBbEIsRUFBQXIwRixVQUFBaTBGLElBQ0FJLEVBQUFyMEYsVUFBQTJMLEtBQUEsU0FBQUEsR0FDQSxPQUFBQSxHQUdBMG9GLEVBQUFyMEYsVUFBQW0zQyxLQUNBazlDLEVBQUFyMEYsVUFBQXVpRSxNQUFBLFNBQUFrUCxFQUFBanZELEVBQUE3VyxHQUNBLFNBQUFBLEdBR0Ewb0YsRUFBQXIwRixVQUFBNjNFLEdBQUEsV0FDQSxVQW9CQXljLEVBQUE1ZCxNQUFBLFNBQUE3bUIsRUFBQW5qRCxHQUVBLE9BREEsSUFBQTRuRixFQUFBNW5GLEdBQ0FncUUsTUFBQTdtQixJQU9BeWtDLEVBQUF0MEYsVUFBQTAyRSxNQUFBLFNBQUE3bUIsR0FDQXpvRCxLQUFBNmdFLE9BQUEsSUFBQWlzQixFQUFBcmtDLEVBQUF5aUMsTUFBQWxyRixLQUFBc0YsU0FFQXRGLEtBQUFtdkYsV0FBQSxJQUFBckMsRUFDQXJrQyxFQUFBeWlDLE1BQ0FPLEtBQVl6ckYsS0FBQXNGLFNBQWlCeW5GLFNBQUEsSUFBQUUsS0FFN0JqdEYsS0FBQWlaLE9BQUF3dkMsRUFBQXY2QyxVQUdBLElBREEsSUFBQXRNLEVBQUEsR0FDQTVCLEtBQUF5VSxRQUNBN1MsR0FBQTVCLEtBQUEwaUYsTUFHQSxPQUFBOWdGLEdBT0FzckYsRUFBQXQwRixVQUFBNmIsS0FBQSxXQUNBLE9BQUF6VSxLQUFBNFksTUFBQTVZLEtBQUFpWixPQUFBaXFCLE9BT0FncUQsRUFBQXQwRixVQUFBMmIsS0FBQSxXQUNBLE9BQUF2VSxLQUFBaVosT0FBQWpaLEtBQUFpWixPQUFBdGQsT0FBQSxPQU9BdXhGLEVBQUF0MEYsVUFBQXcyRixVQUFBLFdBR0EsSUFGQSxJQUFBL3hGLEVBQUEyQyxLQUFBNFksTUFBQXJVLEtBRUEsU0FBQXZFLEtBQUF1VSxPQUFBek0sTUFDQXpLLEdBQUEsS0FBQTJDLEtBQUF5VSxPQUFBbFEsS0FHQSxPQUFBdkUsS0FBQTZnRSxPQUFBMW5ELE9BQUE5YixJQU9BNnZGLEVBQUF0MEYsVUFBQThwRixJQUFBLFdBQ0EsT0FBQTFpRixLQUFBNFksTUFBQTlRLE1BQ0EsWUFDQSxTQUVBLFNBQ0EsT0FBQTlILEtBQUErc0YsU0FBQXh0QixLQUVBLGNBQ0EsT0FBQXYvRCxLQUFBK3NGLFNBQUEveEIsUUFDQWg3RCxLQUFBNmdFLE9BQUExbkQsT0FBQW5aLEtBQUE0WSxNQUFBclUsTUFDQXZFLEtBQUE0WSxNQUFBbzdELE1BQ0FvWixFQUFBcHRGLEtBQUFtdkYsV0FBQWgyRSxPQUFBblosS0FBQTRZLE1BQUFyVSxRQUVBLFdBQ0EsT0FBQXZFLEtBQUErc0YsU0FBQTdnRixLQUFBbE0sS0FBQTRZLE1BQUFyVSxLQUNBdkUsS0FBQTRZLE1BQUF5bEQsS0FDQXIrRCxLQUFBNFksTUFBQStoRSxTQUVBLFlBQ0EsSUFFQTNqRixFQUNBcTRGLEVBQ0FDLEVBQ0FsaUYsRUFMQSt4RCxFQUFBLEdBQ0E5aEUsRUFBQSxHQVFBLElBREFpeUYsRUFBQSxHQUNBdDRGLEVBQUEsRUFBaUJBLEVBQUFnSixLQUFBNFksTUFBQXVtRCxPQUFBeGpFLE9BQThCM0UsSUFDL0NzNEYsR0FBQXR2RixLQUFBK3NGLFNBQUE4QixVQUNBN3VGLEtBQUE2Z0UsT0FBQTFuRCxPQUFBblosS0FBQTRZLE1BQUF1bUQsT0FBQW5vRSxLQUNXbW9FLFFBQUEsRUFBQXp1QyxNQUFBMXdCLEtBQUE0WSxNQUFBOFgsTUFBQTE1QixLQUtYLElBRkFtb0UsR0FBQW4vRCxLQUFBK3NGLFNBQUE2QixTQUFBVSxHQUVBdDRGLEVBQUEsRUFBaUJBLEVBQUFnSixLQUFBNFksTUFBQXd6RSxNQUFBendGLE9BQTZCM0UsSUFBQSxDQUk5QyxJQUhBcTRGLEVBQUFydkYsS0FBQTRZLE1BQUF3ekUsTUFBQXAxRixHQUVBczRGLEVBQUEsR0FDQWxpRixFQUFBLEVBQW1CQSxFQUFBaWlGLEVBQUExekYsT0FBZ0J5UixJQUNuQ2tpRixHQUFBdHZGLEtBQUErc0YsU0FBQThCLFVBQ0E3dUYsS0FBQTZnRSxPQUFBMW5ELE9BQUFrMkUsRUFBQWppRixLQUNhK3hELFFBQUEsRUFBQXp1QyxNQUFBMXdCLEtBQUE0WSxNQUFBOFgsTUFBQXRqQixLQUliL1AsR0FBQTJDLEtBQUErc0YsU0FBQTZCLFNBQUFVLEdBRUEsT0FBQXR2RixLQUFBK3NGLFNBQUEzd0IsTUFBQStDLEVBQUE5aEUsR0FFQSx1QkFHQSxJQUZBQSxFQUFBLEdBRUEsbUJBQUEyQyxLQUFBeVUsT0FBQTNNLE1BQ0F6SyxHQUFBMkMsS0FBQTBpRixNQUdBLE9BQUExaUYsS0FBQStzRixTQUFBOWEsV0FBQTUwRSxHQUVBLGlCQUNBQSxFQUFBLEdBSUEsSUFIQSxJQUFBZ3ZGLEVBQUFyc0YsS0FBQTRZLE1BQUF5ekUsUUFDQXZ1RixFQUFBa0MsS0FBQTRZLE1BQUE5YSxNQUVBLGFBQUFrQyxLQUFBeVUsT0FBQTNNLE1BQ0F6SyxHQUFBMkMsS0FBQTBpRixNQUdBLE9BQUExaUYsS0FBQStzRixTQUFBanZFLEtBQUF6Z0IsRUFBQWd2RixFQUFBdnVGLEdBRUEsc0JBQ0FULEVBQUEsR0FDQSxJQUFBcXVGLEVBQUExckYsS0FBQTRZLE1BQUE4eUUsTUFNQSxJQUpBMXJGLEtBQUE0WSxNQUFBMHpFLE9BQ0FqdkYsR0FBQTJDLEtBQUErc0YsU0FBQTRCLFNBQUEzdUYsS0FBQTRZLE1BQUEyekUsVUFHQSxrQkFBQXZzRixLQUFBeVUsT0FBQTNNLE1BQ0F6SyxHQUFBcXVGLEdBQUEsU0FBQTFyRixLQUFBNFksTUFBQTlRLEtBRUE5SCxLQUFBMGlGLE1BREExaUYsS0FBQW92RixZQUlBLE9BQUFwdkYsS0FBQStzRixTQUFBMkIsU0FBQXJ4RixHQUVBLFdBRUEsT0FBQTJDLEtBQUErc0YsU0FBQXBLLEtBQUEzaUYsS0FBQTRZLE1BQUFyVSxNQUVBLGdCQUNBLE9BQUF2RSxLQUFBK3NGLFNBQUEvQixVQUFBaHJGLEtBQUE2Z0UsT0FBQTFuRCxPQUFBblosS0FBQTRZLE1BQUFyVSxPQUVBLFdBQ0EsT0FBQXZFLEtBQUErc0YsU0FBQS9CLFVBQUFockYsS0FBQW92RixlQXFFQSxJQUFBOUIsS0FDQTJCLEVBQUEsZ0NBRUEsU0FBQXJFLEtBR0EsU0FBQWEsRUFBQXpzRixHQUtBLElBSkEsSUFDQUMsRUFDQTFHLEVBRkF2QixFQUFBLEVBSVFBLEVBQUE2SCxVQUFBbEQsT0FBc0IzRSxJQUU5QixJQUFBdUIsS0FEQTBHLEVBQUFKLFVBQUE3SCxHQUVBVSxPQUFBa0IsVUFBQUMsZUFBQTFCLEtBQUE4SCxFQUFBMUcsS0FDQXlHLEVBQUF6RyxHQUFBMEcsRUFBQTFHLElBS0EsT0FBQXlHLEVBR0EsU0FBQW10RixFQUFBb0QsRUFBQXp6RixHQUdBLElBYUFzd0YsRUFiQW1ELEVBQUFwaUYsUUFBQSxlQUFBdlMsRUFBQXlOLEVBQUF0RixHQUdBLElBRkEsSUFBQTQzRSxHQUFBLEVBQ0E2VSxFQUFBbm5GLElBQ0FtbkYsR0FBQSxVQUFBenNGLEVBQUF5c0YsSUFBQTdVLEtBQ0EsT0FBQUEsRUFHQSxJQUdBLE9BR0EvOEUsTUFBQSxPQUNBNUcsRUFBQSxFQUVBLEdBQUFvMUYsRUFBQXp3RixPQUFBRyxFQUNBc3dGLEVBQUFwakYsT0FBQWxOLFFBRUEsS0FBQXN3RixFQUFBendGLE9BQUFHLEdBQUFzd0YsRUFBQTVxRixLQUFBLElBR0EsS0FBUXhLLEVBQUFvMUYsRUFBQXp3RixPQUFrQjNFLElBRTFCbzFGLEVBQUFwMUYsR0FBQW8xRixFQUFBcDFGLEdBQUFnM0YsT0FBQTdnRixRQUFBLGFBRUEsT0FBQWkvRSxFQU1BLFNBQUFGLEVBQUFucEYsRUFBQTFMLEVBQUFreEIsR0FDQSxPQUFBeGxCLEVBQUFwSCxPQUNBLFNBT0EsSUFIQSxJQUFBOHpGLEVBQUEsRUFHQUEsRUFBQTFzRixFQUFBcEgsUUFBQSxDQUNBLElBQUErekYsRUFBQTNzRixFQUFBRSxPQUFBRixFQUFBcEgsT0FBQTh6RixFQUFBLEdBQ0EsR0FBQUMsSUFBQXI0RixHQUFBa3hCLEVBRUssSUFBQW1uRSxJQUFBcjRGLElBQUFreEIsRUFHTCxNQUZBa25FLFNBRkFBLElBUUEsT0FBQTFzRixFQUFBdVMsT0FBQSxFQUFBdlMsRUFBQXBILE9BQUE4ekYsR0FPQSxTQUFBNWpCLEVBQUFwakIsRUFBQXRlLEVBQUF3bEQsR0FFQSxZQUFBbG5DLEdBQUEsT0FBQUEsRUFDQSxVQUFBM2tELE1BQUEsa0RBRUEsb0JBQUEya0QsRUFDQSxVQUFBM2tELE1BQUEsd0NBQ0FwTSxPQUFBa0IsVUFBQTZILFNBQUF0SixLQUFBc3hELEdBQUEscUJBR0EsR0FBQWtuQyxHQUFBLG1CQUFBeGxELEVBQUEsQ0FDQXdsRCxJQUNBQSxFQUFBeGxELEVBQ0FBLEVBQUEsTUFLQSxJQUNBbHhCLEVBQ0EyMkUsRUFGQWgxRCxHQUZBdVAsRUFBQXNoRCxLQUFrQjVmLEVBQUF4bEIsU0FBQWxjLFFBRWxCdlAsVUFHQTVqQyxFQUFBLEVBRUEsSUFDQWlpQixFQUFBZ3lFLEVBQUE1TixJQUFBNTBCLEVBQUF0ZSxHQUNLLE1BQUF0dUMsR0FDTCxPQUFBOHpGLEVBQUE5ekYsR0FHQSt6RixFQUFBMzJFLEVBQUF0ZCxPQUVBLElBQUF3bUMsRUFBQSxTQUFBMHRELEdBQ0EsR0FBQUEsRUFFQSxPQURBMWxELEVBQUF2UCxZQUNBKzBELEVBQUFFLEdBR0EsSUFBQWp1RixFQUVBLElBQ0FBLEVBQUFzckYsRUFBQTVkLE1BQUFyMkQsRUFBQWt4QixHQUNPLE1BQUF0dUMsR0FDUGcwRixFQUFBaDBGLEVBS0EsT0FGQXN1QyxFQUFBdlAsWUFFQWkxRCxFQUNBRixFQUFBRSxHQUNBRixFQUFBLEtBQUEvdEYsSUFHQSxJQUFBZzVCLEtBQUFqL0IsT0FBQSxFQUNBLE9BQUF3bUMsSUFLQSxVQUZBZ0ksRUFBQXZQLFdBRUFnMUQsRUFBQSxPQUFBenRELElBRUEsS0FBVW5yQyxFQUFBaWlCLEVBQUF0ZCxPQUFtQjNFLEtBQzdCLFNBQUE0aEIsR0FDQSxTQUFBQSxFQUFBOVEsT0FDQThuRixHQUFBenRELElBRUF2SCxFQUFBaGlCLEVBQUFyVSxLQUFBcVUsRUFBQXlsRCxLQUFBLFNBQUF3eEIsRUFBQTNqRixHQUNBLE9BQUEyakYsRUFBQTF0RCxFQUFBMHRELEdBQ0EsTUFBQTNqRixPQUFBME0sRUFBQXJVLE9BQ0FxckYsR0FBQXp0RCxLQUVBdnBCLEVBQUFyVSxLQUFBMkgsRUFDQTBNLEVBQUEraEUsU0FBQSxTQUNBaVYsR0FBQXp0RCxRQVhBLENBYU9scEIsRUFBQWppQixTQUtQLElBRUEsT0FEQW16QyxNQUFBc2hELEtBQTJCNWYsRUFBQXhsQixTQUFBbGMsSUFDM0IraUQsRUFBQTVkLE1BQUEyYixFQUFBNU4sSUFBQTUwQixFQUFBdGUsTUFDRyxNQUFBdHVDLEdBRUgsR0FEQUEsRUFBQWkwRixTQUFBLCtEQUNBM2xELEdBQUEwaEMsRUFBQXhsQixVQUFBMHBDLE9BQ0EsdUNBQ0F0RCxFQUFBNXdGLEVBQUFpMEYsUUFBQSxPQUNBLFNBRUEsTUFBQWowRixHQTFLQSt1RixFQUFBcnhGLEtBQUFxeEYsRUFrTEEvZSxFQUFBdm1FLFFBQ0F1bUUsRUFBQVksV0FBQSxTQUFBdGlDLEdBRUEsT0FEQXNoRCxFQUFBNWYsRUFBQXhsQixTQUFBbGMsR0FDQTBoQyxHQUdBQSxFQUFBbWtCLFlBQUEsV0FDQSxPQUNBaDNCLFFBQUEsS0FDQWlULFFBQUEsRUFDQUYsS0FBQSxFQUNBd2lCLFdBQUEsRUFDQUMsYUFBQSxHQUNBNXpELFVBQUEsS0FDQXl6RCxXQUFBLFlBQ0FQLFFBQUEsRUFDQTVoQixVQUFBLEVBQ0E2Z0IsU0FBQSxJQUFBQyxFQUNBN2dCLFVBQUEsRUFDQXFnQixVQUFBLEtBQ0F1RCxRQUFBLEVBQ0EzakIsWUFBQSxFQUNBQyxhQUFBLEVBQ0FMLFFBQUEsRUFDQXlpQixPQUFBLElBSUE1aUIsRUFBQXhsQixTQUFBd2xCLEVBQUFta0IsY0FNQW5rQixFQUFBcWhCLFNBQ0FyaEIsRUFBQWdJLE9BQUFxWixFQUFBNWQsTUFFQXpELEVBQUFtaEIsV0FDQW5oQixFQUFBb2hCLGVBRUFwaEIsRUFBQW9mLFFBQ0FwZixFQUFBb2tCLE1BQUFoRixFQUFBNU4sSUFFQXhSLEVBQUFpaEIsY0FDQWpoQixFQUFBcWtCLFlBQUFwRCxFQUFBM3pFLE9BRUEweUQsRUFBQXlELE1BQUF6RCxFQUdBcDFFLEVBQUFELFFBQUFxMUUsRUF4aERDLENBOGhEQTdyRSxNQUFBLG9CQUFBcEosa0RDcGlERCxJQUFBb3ZELEVBR0FBLEVBQUEsV0FDQSxPQUFBaG1ELEtBREEsR0FJQSxJQUVBZ21ELEtBQUFtcUMsU0FBQSxjQUFBQSxLQUFBLEVBQUFDLE1BQUEsUUFDQyxNQUFBdjBGLEdBRUQsaUJBQUFqRixTQUFBb3ZELEVBQUFwdkQsUUFPQUgsRUFBQUQsUUFBQXd2RCxtQkNuQkEsSUFBQXNtQixFQUFXeDFFLEVBQVEsSUFFbkJ3MUUsRUFBQStqQixpQkFBQSxLQUE0QnY1RixFQUFRLEtBQ3BDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxLQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFlBQW1DdjVGLEVBQVEsS0FDM0N3MUUsRUFBQStqQixpQkFBQSxlQUFzQ3Y1RixFQUFRLEtBQzlDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsS0FDeEN3MUUsRUFBQStqQixpQkFBQSxjQUFxQ3Y1RixFQUFRLEtBQzdDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFVBQWlDdjVGLEVBQVEsS0FDekN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLEtBQ3hDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFdBQWtDdjVGLEVBQVEsS0FDMUN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLEtBQ3pDdzFFLEVBQUErakIsaUJBQUEsYUFBb0N2NUYsRUFBUSxLQUM1Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsS0FDeEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLEtBQ3hDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsS0FDeEN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLEtBQ3RDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxLQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsS0FDckN3MUUsRUFBQStqQixpQkFBQSxZQUFtQ3Y1RixFQUFRLEtBQzNDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFlBQW1DdjVGLEVBQVEsS0FDM0N3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLEtBQ3hDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxLQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLFVBQWlDdjVGLEVBQVEsS0FDekN3MUUsRUFBQStqQixpQkFBQSxlQUFzQ3Y1RixFQUFRLEtBQzlDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxLQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLGVBQXNDdjVGLEVBQVEsS0FDOUN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLEtBQ3JDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFFBQStCdjVGLEVBQVEsS0FDdkN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLEtBQ3pDdzFFLEVBQUErakIsaUJBQUEsS0FBNEJ2NUYsRUFBUSxLQUNwQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsS0FDckN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLEtBQ3JDdzFFLEVBQUErakIsaUJBQUEsSUFBMkJ2NUYsRUFBUSxLQUNuQ3cxRSxFQUFBK2pCLGlCQUFBLFdBQWtDdjVGLEVBQVEsS0FDMUN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLEtBQ3RDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxLQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsS0FDdEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLEtBQ3hDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxLQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsS0FDNUN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLEtBQ3JDdzFFLEVBQUErakIsaUJBQUEsV0FBa0N2NUYsRUFBUSxLQUMxQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsS0FDckN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLEtBQ3RDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxLQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsS0FDeEN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLEtBQ3JDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxLQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsS0FDckN3MUUsRUFBQStqQixpQkFBQSxjQUFxQ3Y1RixFQUFRLEtBQzdDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxLQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLFFBQStCdjVGLEVBQVEsS0FDdkN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLEtBQ3JDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxLQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFVBQWlDdjVGLEVBQVEsS0FDekN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLEtBQ3hDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxLQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFFBQStCdjVGLEVBQVEsTUFDdkN3MUUsRUFBQStqQixpQkFBQSxRQUErQnY1RixFQUFRLE1BQ3ZDdzFFLEVBQUErakIsaUJBQUEsVUFBaUN2NUYsRUFBUSxNQUN6Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxLQUE0QnY1RixFQUFRLE1BQ3BDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsTUFDckN3MUUsRUFBQStqQixpQkFBQSxXQUFrQ3Y1RixFQUFRLE1BQzFDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLEtBQTRCdjVGLEVBQVEsTUFDcEN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsYUFBb0N2NUYsRUFBUSxNQUM1Q3cxRSxFQUFBK2pCLGlCQUFBLFlBQW1DdjVGLEVBQVEsTUFDM0N3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxpQkFBd0N2NUYsRUFBUSxNQUNoRHcxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsTUFDckN3MUUsRUFBQStqQixpQkFBQSxXQUFrQ3Y1RixFQUFRLE1BQzFDdzFFLEVBQUErakIsaUJBQUEsY0FBcUN2NUYsRUFBUSxNQUM3Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLFVBQWlDdjVGLEVBQVEsTUFDekN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxjQUFxQ3Y1RixFQUFRLE1BQzdDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxRQUErQnY1RixFQUFRLE1BQ3ZDdzFFLEVBQUErakIsaUJBQUEsV0FBa0N2NUYsRUFBUSxNQUMxQ3cxRSxFQUFBK2pCLGlCQUFBLFVBQWlDdjVGLEVBQVEsTUFDekN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsS0FBNEJ2NUYsRUFBUSxNQUNwQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsTUFDckN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsYUFBb0N2NUYsRUFBUSxNQUM1Q3cxRSxFQUFBK2pCLGlCQUFBLGFBQW9DdjVGLEVBQVEsTUFDNUN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLFdBQWtDdjVGLEVBQVEsTUFDMUN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsWUFBbUN2NUYsRUFBUSxNQUMzQ3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxJQUEyQnY1RixFQUFRLE1BQ25DdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLElBQTJCdjVGLEVBQVEsTUFDbkN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsV0FBa0N2NUYsRUFBUSxNQUMxQ3cxRSxFQUFBK2pCLGlCQUFBLFdBQWtDdjVGLEVBQVEsTUFDMUN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsZ0JBQXVDdjVGLEVBQVEsTUFDL0N3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsT0FBOEJ2NUYsRUFBUSxNQUN0Q3cxRSxFQUFBK2pCLGlCQUFBLFFBQStCdjVGLEVBQVEsTUFDdkN3MUUsRUFBQStqQixpQkFBQSxRQUErQnY1RixFQUFRLE1BQ3ZDdzFFLEVBQUErakIsaUJBQUEsWUFBbUN2NUYsRUFBUSxNQUMzQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsTUFDckN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxRQUErQnY1RixFQUFRLE1BQ3ZDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLFNBQWdDdjVGLEVBQVEsTUFDeEN3MUUsRUFBQStqQixpQkFBQSxVQUFpQ3Y1RixFQUFRLE1BQ3pDdzFFLEVBQUErakIsaUJBQUEsUUFBK0J2NUYsRUFBUSxNQUN2Q3cxRSxFQUFBK2pCLGlCQUFBLGVBQXNDdjVGLEVBQVEsTUFDOUN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsTUFBNkJ2NUYsRUFBUSxNQUNyQ3cxRSxFQUFBK2pCLGlCQUFBLE1BQTZCdjVGLEVBQVEsTUFDckN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLEtBQTRCdjVGLEVBQVEsTUFDcEN3MUUsRUFBQStqQixpQkFBQSxPQUE4QnY1RixFQUFRLE1BQ3RDdzFFLEVBQUErakIsaUJBQUEsYUFBb0N2NUYsRUFBUSxNQUM1Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxRQUErQnY1RixFQUFRLE1BQ3ZDdzFFLEVBQUErakIsaUJBQUEsV0FBa0N2NUYsRUFBUSxNQUMxQ3cxRSxFQUFBK2pCLGlCQUFBLGdCQUF1Q3Y1RixFQUFRLE1BQy9DdzFFLEVBQUErakIsaUJBQUEsVUFBaUN2NUYsRUFBUSxNQUN6Q3cxRSxFQUFBK2pCLGlCQUFBLE9BQThCdjVGLEVBQVEsTUFDdEN3MUUsRUFBQStqQixpQkFBQSxNQUE2QnY1RixFQUFRLE1BQ3JDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUN4Q3cxRSxFQUFBK2pCLGlCQUFBLEtBQTRCdjVGLEVBQVEsTUFDcEN3MUUsRUFBQStqQixpQkFBQSxTQUFnQ3Y1RixFQUFRLE1BQ3hDdzFFLEVBQUErakIsaUJBQUEsU0FBZ0N2NUYsRUFBUSxNQUV4Q0wsRUFBQUQsUUFBQTgxRSxvQkM5S0EsU0FBQS8xRSxHQUdBLGlCQUFBSyxnQkFDQSxpQkFBQXlpRSxZQW1CQyxTQUFBaVQsR0FFRCxJQUFBZ2tCLEtBQ0FDLEVBQUE3NEYsT0FBQTYrQyxLQUdBaTZDLEtBQ0FDLEtBR0FDLEVBQUEsZ0NBQ0FDLEVBQUEsOEJBQ0FDLEVBQUEsK0JBRUFDLEVBQUEsVUFJQXZyRixHQUNBd3JGLFlBQUEsUUFDQUMsV0FBQSxLQUNBQyxPQUFBLEVBQ0FSLGVBQUFoOEUsR0FNQSxTQUFBaTRFLEVBQUF4MEYsR0FDQSxPQUFBQSxFQUFBa1YsUUFBQSxjQUFxQ0EsUUFBQSxhQUFzQkEsUUFBQSxhQUczRCxTQUFBN1EsRUFBQWpCLEdBQ0EsT0FBQUEsRUFBQXExRCxTQUFBcHVELGNBR0EsU0FBQTJ1RixFQUFBQyxFQUFBQyxHQUNBLElBQUF2MkYsRUFBQXMyRixLQUFBMzNGLEtBQUE0M0YsR0FDQSxPQUFBdjJGLEdBQUEsSUFBQUEsRUFBQWMsTUFHQSxTQUFBMDFGLEVBQUFoekIsR0FDQSxPQUFBc3lCLEVBQUF0M0YsS0FBQWdsRSxHQTBCQSxTQUFBaXpCLEVBQUFsMUYsR0FDQSxJQUFBNUQsRUFDQW9aLEtBQ0EyL0UsRUFBQTF5RixNQUFBaEcsVUFBQTZDLE1BQUF0RSxLQUFBMEgsVUFBQSxHQUVBLElBQUF0RyxLQUFBNEQsRUFDQXdWLEVBQUFwWixHQUFBNEQsRUFBQTVELEdBS0EsT0FKQSs0RixFQUFBNXpCLFFBQUEsU0FBQTErRCxHQUNBLElBQUF6RyxLQUFBeUcsRUFDQTJTLEVBQUFwWixHQUFBeUcsRUFBQXpHLEtBRUFvWixFQUtBLFNBQUE0L0UsRUFBQWwyRixHQUNBLElBQUFzVyxLQTBCQSxPQXpCQSxTQUFBNi9FLEVBQUFuMkYsRUFBQWdOLEdBQ0EsUUFBQXRMLEVBQUExQixFQUFBWSxXQUF1Q2MsRUFBT0EsSUFBQXNqQixZQUM5QyxJQUFBdGpCLEVBQUFDLFNBQ0FxTCxHQUFBdEwsRUFBQTZ3RCxVQUFBanlELE9BQ0EsSUFBQW9CLEVBQUFDLFdBQ0EyVSxFQUFBblEsTUFDQWtqQyxNQUFBLFFBQ0FyOEIsU0FDQWhOLEtBQUEwQixJQUVBc0wsRUFBQW1wRixFQUFBejBGLEVBQUFzTCxHQUlBL0wsRUFBQVMsR0FBQW5DLE1BQUEsb0JBQ0ErVyxFQUFBblEsTUFDQWtqQyxNQUFBLE9BQ0FyOEIsU0FDQWhOLEtBQUEwQixLQUtBLE9BQUFzTCxFQXZCQSxDQXdCS2hOLEVBQUEsR0FDTHNXLEVBdUZBLFNBQUE4L0UsRUFBQXJ6QixHQUVBLFNBQUFzekIsRUFBQVIsR0FDQSxPQUFBQSxLQUFBenVGLFFBQUF5dUYsRUFHQSxTQUFBUyxFQUFBMTVGLEVBQUF3eUYsR0FDQSxXQUFBdnZGLE9BQ0F3MkYsRUFBQXo1RixHQUNBLEtBQUFtbUUsRUFBQXd6QixpQkFBQSxTQUFBbkgsRUFBQSxVQUlBLFNBQUFvSCxFQUFBMTVGLEVBQUFnRSxHQUNBLEdBQUFoRSxFQUFBMjVGLFNBQ0EsT0FDQTM1RixFQUFBMjVGLFVBQUEsRUFFQTM1RixFQUFBeS9FLFNBQUF6L0UsRUFBQXkvRSxVQUFBei9FLEVBQUE0NUYsY0FDQSxHQUFBNTVGLEVBQUF5L0UsU0FBQSxDQUNBLElBQUFvYSxLQUVBQyxFQUFBLFNBQUExMkYsRUFBQXdILEdBQ0FxN0QsRUFBQXd6QixtQkFDQTd1RixJQUFBVCxlQUVBUyxFQUFBbkYsTUFBQSxLQUFBOC9ELFFBQUEsU0FBQW1hLEdBQ0EsSUFBQXFhLEVBQUFyYSxFQUFBajZFLE1BQUEsS0FDQW8wRixFQUFBRSxFQUFBLEtBQUEzMkYsRUFBQTIyRixFQUFBLEdBQUFyM0YsT0FBQXEzRixFQUFBLFVBSUEsaUJBQUEvNUYsRUFBQXkvRSxTQUNBcWEsRUFBQSxVQUFBOTVGLEVBQUF5L0UsVUFFQTJZLEVBQUFwNEYsRUFBQXkvRSxVQUFBbGEsUUFBQSxTQUFBbmlFLEdBQ0EwMkYsRUFBQTEyRixFQUFBcEQsRUFBQXkvRSxTQUFBcjhFLE1BR0FwRCxFQUFBeS9FLFNBQUFvYSxFQUVBNzVGLEVBQUFnNkYsVUFBQVIsRUFBQXg1RixFQUFBaTZGLFNBQUEsVUFFQWoyRixJQUNBaEUsRUFBQTQ1RixnQkFDQTU1RixFQUFBK3dCLE1BQUEsT0FBQS93QixFQUFBNDVGLGNBQUFuMEYsTUFBQSxLQUFBcXVDLEtBQUEsYUFFQTl6QyxFQUFBK3dCLFFBQ0Evd0IsRUFBQSt3QixNQUFBLFNBQ0Evd0IsRUFBQWs2RixRQUFBVixFQUFBeDVGLEVBQUErd0IsT0FDQS93QixFQUFBNEYsS0FBQTVGLEVBQUFtNkYsaUJBQ0FuNkYsRUFBQTRGLElBQUEsU0FDQTVGLEVBQUE0RixNQUNBNUYsRUFBQW82RixNQUFBWixFQUFBeDVGLEVBQUE0RixNQUNBNUYsRUFBQXE2RixlQUFBZCxFQUFBdjVGLEVBQUE0RixNQUFBLEdBQ0E1RixFQUFBbTZGLGdCQUFBbjJGLEVBQUFxMkYsaUJBQ0FyNkYsRUFBQXE2RixpQkFBQXI2RixFQUFBNEYsSUFBQSxRQUFBNUIsRUFBQXEyRixpQkFFQXI2RixFQUFBczZGLFVBQ0F0NkYsRUFBQXU2RixVQUFBZixFQUFBeDVGLEVBQUFzNkYsVUFDQSxNQUFBdDZGLEVBQUF3NkYsWUFDQXg2RixFQUFBdzZGLFVBQUEsR0FDQXg2RixFQUFBMkUsV0FDQTNFLEVBQUEyRSxhQUVBM0UsRUFBQTJFLFNBQUE4QixNQUFBaEcsVUFBQStWLE9BQUE3UCxTQUFBM0csRUFBQTJFLFNBQUE2RSxJQUFBLFNBQUF0SyxHQUNBLE9BM0VBLFNBQUFjLEdBQ0FBLEVBQUF5NkYsV0FBQXo2RixFQUFBMDZGLGtCQUNBMTZGLEVBQUEwNkYsZ0JBQUExNkYsRUFBQXk2RixTQUFBanhGLElBQUEsU0FBQW14RixHQUNBLE9BQUF6QixFQUFBbDVGLEdBQThCeTZGLFNBQUEsTUFBZUUsTUFHN0MsT0FBQTM2RixFQUFBMDZGLGlCQUFBMTZGLEVBQUFtNkYsaUJBQUFqQixFQUFBbDVGLFNBcUVBNDZGLENBQUEsU0FBQTE3RixFQUFBYyxFQUFBZCxNQUVBYyxFQUFBMkUsU0FBQTRnRSxRQUFBLFNBQUFybUUsR0FBeUN3NkYsRUFBQXg2RixFQUFBYyxLQUV6Q0EsRUFBQTY2RixRQUNBbkIsRUFBQTE1RixFQUFBNjZGLE9BQUE3MkYsR0FHQSxJQUFBODJGLEVBQ0E5NkYsRUFBQTJFLFNBQUE2RSxJQUFBLFNBQUF0SyxHQUNBLE9BQUFBLEVBQUEwNkYsY0FBQSxRQUFBMTZGLEVBQUE2eEIsTUFBQSxRQUFBN3hCLEVBQUE2eEIsUUFFQXZhLFFBQUF4VyxFQUFBcTZGLGVBQUFyNkYsRUFBQXM2RixVQUNBOXdGLElBQUErdkYsR0FDQTdwRCxPQUFBcXJELFNBQ0EvNkYsRUFBQTg2RixjQUFBdDNGLE9BQUFnMkYsRUFBQXNCLEVBQUFobkQsS0FBQSxVQUFxRjF5QyxLQUFBLFdBQXVCLGNBRzVHczRGLENBQUF6ekIsR0FZQSxTQUFBeGpDLEVBQUFyakMsRUFBQVUsRUFBQWs3RixFQUFBQyxHQTRCQSxTQUFBQyxFQUFBbDdGLEVBQUF5QyxHQUNBLElBQUEwNEYsRUFBQWwxQixFQUFBd3pCLGlCQUFBaDNGLEVBQUEsR0FBQTBILGNBQUExSCxFQUFBLEdBQ0EsT0FBQXpDLEVBQUF5L0UsU0FBQS8rRSxlQUFBeTZGLElBQUFuN0YsRUFBQXkvRSxTQUFBMGIsR0FHQSxTQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxHQUNBLElBQUE3QyxFQUFBNkMsRUFBQSxHQUFBcnVGLEVBQUF3ckYsWUFDQThDLEVBQUEsZ0JBQUE5QyxFQUNBK0MsRUFBQUgsRUFBQSxHQUFBN0MsRUFJQSxPQUZBK0MsR0FBQUosRUFBQSxNQUVBQyxFQUFBSSxFQW9EQSxTQUFBQyxJQUNBbmlGLEdBQUEsTUFBQThTLEVBQUFzdkUsWUF4QkEsV0FDQSxJQUFBQyxFQUFBLGlCQUFBdnZFLEVBQUFzdkUsWUFDQSxHQUFBQyxJQUFBeEQsRUFBQS9yRSxFQUFBc3ZFLGFBQ0EsT0FBQXRILEVBQUF3SCxHQUdBLElBQUF0aUYsRUFBQXFpRixFQUNBcDVELEVBQUFuVyxFQUFBc3ZFLFlBQUFFLEdBQUEsRUFBQUMsRUFBQXp2RSxFQUFBc3ZFLGNBQ0F4bkIsRUFBQTBuQixFQUFBeHZFLEVBQUFzdkUsWUFBQXA0RixPQUFBOG9CLEVBQUFzdkUsaUJBQUF2L0UsR0FNQWlRLEVBQUFrdUUsVUFBQSxJQUNBQSxHQUFBaGhGLEVBQUFnaEYsV0FFQXFCLElBQ0FFLEVBQUF6dkUsRUFBQXN2RSxhQUFBcGlGLEVBQUE4UyxLQUVBLE9BQUE4dUUsRUFBQTVoRixFQUFBeXNELFNBQUF6c0QsRUFBQTFaLE9BQUEsTUFJQWs4RixHQWxEQSxXQUNBLElBQUFDLEVBQUFDLEVBQUF6NUYsRUFBQStXLEVBRUEsSUFBQThTLEVBQUFtekQsU0FDQSxPQUFBNlUsRUFBQXdILEdBRUF0aUYsRUFBQSxHQUNBMGlGLEVBQUEsRUFDQTV2RSxFQUFBMHRFLFVBQUFwMkUsVUFBQSxFQUNBbmhCLEVBQUE2cEIsRUFBQTB0RSxVQUFBNTRGLEtBQUEwNkYsR0FFQSxLQUFBcjVGLEdBQ0ErVyxHQUFBODZFLEVBQUF3SCxFQUFBOXZCLFVBQUFrd0IsRUFBQXo1RixFQUFBYyxTQUNBMDRGLEVBQUFmLEVBQUE1dUUsRUFBQTdwQixLQUVBKzNGLEdBQUF5QixFQUFBLEdBQ0F6aUYsR0FBQTRoRixFQUFBYSxFQUFBLEdBQUEzSCxFQUFBN3hGLEVBQUEsTUFFQStXLEdBQUE4NkUsRUFBQTd4RixFQUFBLElBRUF5NUYsRUFBQTV2RSxFQUFBMHRFLFVBQUFwMkUsVUFDQW5oQixFQUFBNnBCLEVBQUEwdEUsVUFBQTU0RixLQUFBMDZGLEdBRUEsT0FBQXRpRixFQUFBODZFLEVBQUF3SCxFQUFBMytFLE9BQUErK0UsSUEyQkFDLEdBQ0FMLEVBQUEsR0FHQSxTQUFBTSxFQUFBcDhGLEdBQ0F3WixHQUFBeFosRUFBQW9ELFVBQUFnNEYsRUFBQXA3RixFQUFBb0QsVUFBQSxVQUNBa3BCLEVBQUEvc0IsT0FBQVksT0FBQUgsR0FBaUNnRSxRQUFTbEUsTUFBQXdzQixLQUcxQyxTQUFBK3ZFLEVBQUFDLEVBQUF0RCxHQUlBLEdBRkE4QyxHQUFBUSxFQUVBLE1BQUF0RCxFQUVBLE9BREEyQyxJQUNBLEVBR0EsSUFBQVksRUE3R0EsU0FBQXZELEVBQUFoNUYsR0FDQSxJQUFBbkIsRUFBQTJFLEVBRUEsSUFBQTNFLEVBQUEsRUFBQTJFLEVBQUF4RCxFQUFBMkUsU0FBQW5CLE9BQWdEM0UsRUFBQTJFLEVBQVkzRSxJQUM1RCxHQUFBaTZGLEVBQUE5NEYsRUFBQTJFLFNBQUE5RixHQUFBcTdGLFFBQUFsQixHQUNBLE9BQUFoNUYsRUFBQTJFLFNBQUE5RixHQXdHQTI5RixDQUFBeEQsRUFBQTFzRSxHQUNBLEdBQUFpd0UsRUFhQSxPQVpBQSxFQUFBaHpELEtBQ0F1eUQsR0FBQTlDLEdBRUF1RCxFQUFBRSxlQUNBWCxHQUFBOUMsR0FFQTJDLElBQ0FZLEVBQUFHLGFBQUFILEVBQUFFLGVBQ0FYLEVBQUE5QyxJQUdBb0QsRUFBQUcsR0FDQUEsRUFBQUcsWUFBQSxFQUFBMUQsRUFBQXgxRixPQUdBLElBQUFtNUYsRUFwSEEsU0FBQUMsRUFBQTU4RixFQUFBZzVGLEdBQ0EsR0FBQUYsRUFBQTk0RixFQUFBbzZGLE1BQUFwQixHQUFBLENBQ0EsS0FBQWg1RixFQUFBNjhGLFlBQUE3OEYsRUFBQWdFLFFBQ0FoRSxJQUFBZ0UsT0FFQSxPQUFBaEUsRUFFQSxHQUFBQSxFQUFBbTZGLGVBQ0EsT0FBQXlDLEVBQUE1OEYsRUFBQWdFLE9BQUFnMUYsR0E0R0E0RCxDQUFBdHdFLEVBQUEwc0UsR0FDQSxHQUFBMkQsRUFBQSxDQUNBLElBQUFqMEYsRUFBQTRqQixFQUNBNWpCLEVBQUE2Z0MsS0FDQXV5RCxHQUFBOUMsR0FFQXR3RixFQUFBbzBGLFdBQUFwMEYsRUFBQXEwRixhQUNBakIsR0FBQTlDLEdBRUEyQyxJQUNBanpGLEVBQUFxMEYsYUFDQWpCLEVBQUE5QyxJQUdBLEdBQ0Exc0UsRUFBQWxwQixZQUNBb1csR0FBQWsvRSxHQUVBcHNFLEVBQUFpZCxPQUNBaXhELEdBQUFsdUUsRUFBQWt1RSxXQUVBbHVFLElBQUF0b0IsYUFDU3NvQixJQUFBcXdFLEVBQUEzNEYsUUFJVCxPQUhBMjRGLEVBQUE5QixRQUNBdUIsRUFBQU8sRUFBQTlCLFFBRUFueUYsRUFBQW8wRixVQUFBLEVBQUE5RCxFQUFBeDFGLE9BR0EsR0FySUEsU0FBQXcxRixFQUFBaDVGLEdBQ0EsT0FBQWc3RixHQUFBbEMsRUFBQTk0RixFQUFBdTZGLFVBQUF2QixHQW9JQWdFLENBQUFoRSxFQUFBMXNFLEdBQ0EsVUFBQTNnQixNQUFBLG1CQUFBcXRGLEVBQUEsZ0JBQUExc0UsRUFBQWxwQixXQUFBLGtCQVFBLE9BREEwNEYsR0FBQTlDLEVBQ0FBLEVBQUF4MUYsUUFBQSxFQUdBLElBQUF5aUUsRUFBQWczQixFQUFBNzlGLEdBQ0EsSUFBQTZtRSxFQUNBLFVBQUF0NkQsTUFBQSxzQkFBQXZNLEVBQUEsS0FHQWs2RixFQUFBcnpCLEdBQ0EsSUFFQTlpRSxFQUZBbXBCLEVBQUEydUUsR0FBQWgxQixFQUNBODFCLEtBQ0F2aUYsRUFBQSxHQUNBLElBQUFyVyxFQUFBbXBCLEVBQXNCbnBCLElBQUE4aUUsRUFBc0I5aUUsSUFBQWEsT0FDNUNiLEVBQUFDLFlBQ0FvVyxFQUFBNGhGLEVBQUFqNEYsRUFBQUMsVUFBQSxPQUFBb1csR0FHQSxJQUFBc2lGLEVBQUEsR0FDQXRCLEVBQUEsRUFDQSxJQUVBLElBREEsSUFBQS8zRixFQUFBa0IsRUFBQUosRUFBQSxFQUVBK29CLEVBQUF3dUUsWUFBQWwzRSxVQUFBcmdCLEVBQ0FkLEVBQUE2cEIsRUFBQXd1RSxZQUFBMTVGLEtBQUF0QixJQUdBNkQsRUFBQTA0RixFQUFBdjhGLEVBQUFrc0UsVUFBQXpvRSxFQUFBZCxFQUFBYyxPQUFBZCxFQUFBLElBQ0FjLEVBQUFkLEVBQUFjLE1BQUFJLEVBR0EsSUFEQTA0RixFQUFBdjhGLEVBQUFxZCxPQUFBNVosSUFDQUosRUFBQW1wQixFQUF3Qm5wQixFQUFBYSxPQUFnQmIsSUFBQWEsT0FDeENiLEVBQUFDLFlBQ0FvVyxHQUFBay9FLEdBR0EsT0FDQThCLFlBQ0ExNkYsTUFBQTBaLEVBQ0F5c0QsU0FBQTdtRSxFQUNBa3RCLE9BRUssTUFBQTVvQixHQUNMLEdBQUFBLEVBQUFpMEYsVUFBQSxJQUFBajBGLEVBQUFpMEYsUUFBQW53RixRQUFBLFdBQ0EsT0FDQWd6RixVQUFBLEVBQ0ExNkYsTUFBQXcwRixFQUFBeDBGLElBR0EsTUFBQTRELEdBZ0JBLFNBQUEwd0UsRUFBQWhvRSxFQUFBOHdGLEdBQ0FBLEtBQUEvdkYsRUFBQWtyRixXQUFBRCxFQUFBQyxHQUNBLElBQUE3K0UsR0FDQWdoRixVQUFBLEVBQ0ExNkYsTUFBQXcwRixFQUFBbG9GLElBRUErd0YsRUFBQTNqRixFQWVBLE9BZEEwakYsRUFBQXh0RCxPQUFBdXRELEdBQUExM0IsUUFBQSxTQUFBbm1FLEdBQ0EsSUFBQStELEVBQUFzL0IsRUFBQXJqQyxFQUFBZ04sR0FBQSxHQUNBakosRUFBQThpRSxTQUFBN21FLEVBQ0ErRCxFQUFBcTNGLFVBQUEyQyxFQUFBM0MsWUFDQTJDLEVBQUFoNkYsR0FFQUEsRUFBQXEzRixVQUFBaGhGLEVBQUFnaEYsWUFDQTJDLEVBQUEzakYsRUFDQUEsRUFBQXJXLEtBR0FnNkYsRUFBQWwzQixXQUNBenNELEVBQUEyakYsZUFFQTNqRixFQVVBLFNBQUE0akYsRUFBQXQ5RixHQUNBLE9BQUFxTixFQUFBeXJGLFlBQUF6ckYsRUFBQTByRixNQUVBLzRGLEVBQUFrVixRQUFBeWpGLEVBQUEsU0FBQWgyRixFQUFBNDZGLEdBQ0EsT0FBQWx3RixFQUFBMHJGLE9BQUEsT0FBQXAyRixFQUNBLE9BQ1cwSyxFQUFBeXJGLFdBQ1h5RSxFQUFBcm9GLFFBQUEsTUFBQTdILEVBQUF5ckYsWUFFQSxLQVBBOTRGLEVBOEJBLFNBQUF3OUYsRUFBQTEwQixHQUNBLElBQUExbEUsRUFBQXE2RixFQUFBL2pGLEVBQUFna0YsRUFBQXB4RixFQUNBNjVELEVBaGlCQSxTQUFBMkMsR0FDQSxJQUFBL3BFLEVBQUE0RCxFQUFBZSxFQUFBaTZGLEVBQ0E5K0UsRUFBQWlxRCxFQUFBeGxFLFVBQUEsSUFNQSxHQUpBdWIsR0FBQWlxRCxFQUFBOWpFLFdBQUE4akUsRUFBQTlqRSxXQUFBMUIsVUFBQSxHQUdBWCxFQUFBKzFGLEVBQUFwM0YsS0FBQXVkLEdBRUEsT0FBQXMrRSxFQUFBeDZGLEVBQUEsSUFBQUEsRUFBQSxrQkFLQSxJQUZBa2MsSUFBQWxaLE1BQUEsT0FFQTVHLEVBQUEsRUFBQTJFLEVBQUFtYixFQUFBbmIsT0FBd0MzRSxFQUFBMkUsRUFBWTNFLElBR3BELEdBQUFvNkYsRUFGQXdFLEVBQUE5K0UsRUFBQTlmLEtBRUFvK0YsRUFBQVEsR0FDQSxPQUFBQSxFQThnQkFDLENBQUE5MEIsR0FFQXF3QixFQUFBaHpCLEtBR0E5NEQsRUFBQTByRixPQUNBMzFGLEVBQUExQixTQUFBbThGLGdCQUFBLHVDQUNBanBCLFVBQUE5TCxFQUFBOEwsVUFBQTEvRCxRQUFBLFVBQUFBLFFBQUEsb0JBRUE5UixFQUFBMGxFLEVBRUF4OEQsRUFBQWxKLEVBQUF5eUQsWUFDQW44QyxFQUFBeXNELEVBQUF4akMsRUFBQXdqQyxFQUFBNzVELEdBQUEsR0FBQWdvRSxFQUFBaG9FLElBRUFteEYsRUFBQW5FLEVBQUFsMkYsSUFDQU0sVUFDQWc2RixFQUFBaDhGLFNBQUFtOEYsZ0JBQUEsdUNBQ0FqcEIsVUFBQWw3RCxFQUFBMVosTUFDQTBaLEVBQUExWixNQTdlQSxTQUFBODlGLEVBQUE3NkQsRUFBQWpqQyxHQUNBLElBQUErOUYsRUFBQSxFQUNBcmtGLEVBQUEsR0FDQXNrRixLQUVBLFNBQUFDLElBQ0EsT0FBQUgsRUFBQXA2RixRQUFBdS9CLEVBQUF2L0IsT0FHQW82RixFQUFBLEdBQUExdEYsU0FBQTZ5QixFQUFBLEdBQUE3eUIsT0FDQTB0RixFQUFBLEdBQUExdEYsT0FBQTZ5QixFQUFBLEdBQUE3eUIsT0FBQTB0RixFQUFBNzZELEVBa0JBLFVBQUFBLEVBQUEsR0FBQXdKLE1BQUFxeEQsRUFBQTc2RCxFQXJCQTY2RCxFQUFBcDZGLE9BQUFvNkYsRUFBQTc2RCxFQXdCQSxTQUFBcWdDLEVBQUFsZ0UsR0FFQXNXLEdBQUEsSUFBQXJWLEVBQUFqQixHQUFBaTFGLEVBQUEzdUYsSUFBQXhLLEtBQUFrRSxFQUFBODZGLFdBREEsU0FBQTE0RixHQUE0QixVQUFBQSxFQUFBaXpELFNBQUEsS0FBQSs3QixFQUFBaHZGLEVBQUF4RixPQUFBa1YsUUFBQSxjQUFxRSxNQUNqRzgrQixLQUFBLFFBR0EsU0FBQWtrQixFQUFBOTBELEdBQ0FzVyxHQUFBLEtBQUFyVixFQUFBakIsR0FBQSxJQUdBLFNBQUErNkYsRUFBQTF4RCxJQUNBLFVBQUFBLFFBQUE2MkIsRUFBQXBMLEdBQUF6ckIsRUFBQXJwQyxNQUdBLEtBQUEwNkYsRUFBQXA2RixRQUFBdS9CLEVBQUF2L0IsUUFBQSxDQUNBLElBQUE2YyxFQUFBMDlFLElBR0EsR0FGQXZrRixHQUFBODZFLEVBQUF4MEYsRUFBQWtzRSxVQUFBNnhCLEVBQUF4OUUsRUFBQSxHQUFBblEsU0FDQTJ0RixFQUFBeDlFLEVBQUEsR0FBQW5RLE9BQ0FtUSxJQUFBdTlFLEVBQUEsQ0FPQUUsRUFBQS9uRixVQUFBd3ZELFFBQUF2TixHQUNBLEdBQ0FpbUMsRUFBQTU5RSxFQUFBeFAsT0FBQSxTQUNBd1AsRUFBQTA5RSxVQUNTMTlFLElBQUF1OUUsR0FBQXY5RSxFQUFBN2MsUUFBQTZjLEVBQUEsR0FBQW5RLFNBQUEydEYsR0FDVEMsRUFBQS9uRixVQUFBd3ZELFFBQUFuQyxPQUVBLFVBQUEvaUQsRUFBQSxHQUFBa3NCLE1BQ0F1eEQsRUFBQXowRixLQUFBZ1gsRUFBQSxHQUFBbmQsTUFFQTQ2RixFQUFBL3lELE1BRUFrekQsRUFBQTU5RSxFQUFBeFAsT0FBQSxTQUdBLE9BQUEySSxFQUFBODZFLEVBQUF4MEYsRUFBQXFkLE9BQUEwZ0YsSUF1YUFLLENBQUFYLEVBQUFuRSxFQUFBb0UsR0FBQXB4RixJQUVBb04sRUFBQTFaLE1BQUFzOUYsRUFBQTVqRixFQUFBMVosT0FFQThvRSxFQUFBOEwsVUFBQWw3RCxFQUFBMVosTUFDQThvRSxFQUFBeGxFLFVBNUNBLFNBQUErNkYsRUFBQUMsRUFBQUMsR0FDQSxJQUFBcDRCLEVBQUFtNEIsRUFBQTlGLEVBQUE4RixHQUFBQyxFQUNBN2tGLEdBQUEya0YsRUFBQXRJLFFBRUFzSSxFQUFBMTdGLE1BQUEsYUFDQStXLEVBQUFuUSxLQUFBLFNBR0EsSUFBQTgwRixFQUFBMzJGLFFBQUF5K0QsSUFDQXpzRCxFQUFBblEsS0FBQTQ4RCxHQUdBLE9BQUF6c0QsRUFBQXM2QixLQUFBLEtBQUEraEQsT0FnQ0F5SSxDQUFBMTFCLEVBQUF4bEUsVUFBQTZpRSxFQUFBenNELEVBQUF5c0QsVUFDQTJDLEVBQUFwdkQsUUFDQXlzRCxTQUFBenNELEVBQUF5c0QsU0FDQTh5QixHQUFBdi9FLEVBQUFnaEYsV0FFQWhoRixFQUFBMmpGLGNBQ0F2MEIsRUFBQXUwQixhQUNBbDNCLFNBQUF6c0QsRUFBQTJqRixZQUFBbDNCLFNBQ0E4eUIsR0FBQXYvRSxFQUFBMmpGLFlBQUEzQyxhQWVBLFNBQUErRCxJQUNBLElBQUFBLEVBQUFDLE9BQUEsQ0FFQUQsRUFBQUMsUUFBQSxFQUVBLElBQUFDLEVBQUFqOUYsU0FBQWs5RixpQkFBQSxZQUNBdkcsRUFBQTV5QixRQUFBdm1FLEtBQUF5L0YsRUFBQW5CLElBc0JBLFNBQUFMLEVBQUE3OUYsR0FFQSxPQURBQSxNQUFBLElBQUErSyxjQUNBa3VGLEVBQUFqNUYsSUFBQWk1RixFQUFBQyxFQUFBbDVGLElBS0ErMEUsRUFBQTF4QyxZQUNBMHhDLEVBQUFDLGdCQUNBRCxFQUFBaXBCLFlBQ0FqcEIsRUFBQW1wQixpQkFDQW5wQixFQUFBd3FCLFVBOUNBLFNBQUFDLEdBQ0F6eEYsRUFBQStyRixFQUFBL3JGLEVBQUF5eEYsSUE4Q0F6cUIsRUFBQW9xQixtQkFDQXBxQixFQUFBMHFCLHVCQTdCQSxXQUNBem9GLGlCQUFBLG1CQUFBbW9GLEdBQUEsR0FDQW5vRixpQkFBQSxPQUFBbW9GLEdBQUEsSUE0QkFwcUIsRUFBQStqQixpQkF6QkEsU0FBQTk0RixFQUFBNm1FLEdBQ0EsSUFBQUMsRUFBQW15QixFQUFBajVGLEdBQUE2bUUsRUFBQWtPLEdBQ0FqTyxFQUFBb3lCLFNBQ0FweUIsRUFBQW95QixRQUFBL3lCLFFBQUEsU0FBQXlZLEdBQTRDc2EsRUFBQXRhLEdBQUE1K0UsS0F1QjVDKzBFLEVBQUEycUIsY0FuQkEsV0FDQSxPQUFBMUcsRUFBQUMsSUFtQkFsa0IsRUFBQThvQixjQUNBOW9CLEVBQUEra0IsVUFHQS9rQixFQUFBNHFCLFNBQUEsZUFDQTVxQixFQUFBNnFCLG9CQUFBLGdCQUNBN3FCLEVBQUE4cUIsVUFBQSxvQkFDQTlxQixFQUFBK3FCLFlBQUEseUVBQ0EvcUIsRUFBQWdyQixpQkFBQSxlQUNBaHJCLEVBQUFpckIsZUFBQSwrSUFHQWpyQixFQUFBa3JCLGtCQUNBdHVFLE1BQUEsZUFBQXlwRSxVQUFBLEdBRUFybUIsRUFBQW1yQixrQkFDQWw4RixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLE1BQ0EzMUYsVUFBQXd2RSxFQUFBa3JCLG1CQUVBbHJCLEVBQUFvckIsbUJBQ0FuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxNQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixtQkFFQWxyQixFQUFBcXJCLG9CQUNBenVFLE1BQUEsOElBRUFvakQsRUFBQXNyQixRQUFBLFNBQUExdUUsRUFBQW5yQixFQUFBODVGLEdBQ0EsSUFBQTEvRixFQUFBbTBFLEVBQUEra0IsU0FFQTkxRixVQUFBLFVBQ0EydEIsUUFBQW5yQixNQUNBakIsYUFFQSs2RixPQVFBLE9BTkExL0YsRUFBQTJFLFNBQUEwRSxLQUFBOHFFLEVBQUFxckIsb0JBQ0F4L0YsRUFBQTJFLFNBQUEwRSxNQUNBakcsVUFBQSxTQUNBMnRCLE1BQUEsK0JBQ0F5cEUsVUFBQSxJQUVBeDZGLEdBRUFtMEUsRUFBQXdyQixvQkFBQXhyQixFQUFBc3JCLFFBQUEsVUFDQXRyQixFQUFBeXJCLHFCQUFBenJCLEVBQUFzckIsUUFBQSxlQUNBdHJCLEVBQUEwckIsa0JBQUExckIsRUFBQXNyQixRQUFBLFNBQ0F0ckIsRUFBQTJyQixhQUNBMThGLFVBQUEsU0FDQTJ0QixNQUFBb2pELEVBQUE4cUIsVUFDQXpFLFVBQUEsR0FFQXJtQixFQUFBNHJCLGVBQ0EzOEYsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQStxQixZQUNBMUUsVUFBQSxHQUVBcm1CLEVBQUE2ckIsb0JBQ0E1OEYsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQWdyQixpQkFDQTNFLFVBQUEsR0FFQXJtQixFQUFBOHJCLGlCQUNBNzhGLFVBQUEsU0FDQTJ0QixNQUFBb2pELEVBQUE4cUIsVUFBQSxrR0FTQXpFLFVBQUEsR0FFQXJtQixFQUFBK3JCLGFBQ0E5OEYsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLGFBQ0EwMEYsUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQWtyQixrQkFFQXR1RSxNQUFBLEtBQUFuckIsSUFBQSxLQUNBNDBGLFVBQUEsRUFDQTcxRixVQUFBd3ZFLEVBQUFrckIscUJBSUFsckIsRUFBQWdzQixZQUNBLzhGLFVBQUEsUUFDQTJ0QixNQUFBb2pELEVBQUE0cUIsU0FDQXZFLFVBQUEsR0FFQXJtQixFQUFBaXNCLHVCQUNBaDlGLFVBQUEsUUFDQTJ0QixNQUFBb2pELEVBQUE2cUIsb0JBQ0F4RSxVQUFBLEdBRUFybUIsRUFBQWtzQixjQUVBdHZFLE1BQUEsVUFBQW9qRCxFQUFBNnFCLG9CQUNBeEUsVUFBQSxJQTd4QkFwOEYsQ0FBQUMsR0FUQSxrQkNMQUMsRUFBQUQsUUFBQSxTQUFBODFFLEdBR0EsSUFBQTZxQixFQUFBLHlDQVlBc0IsRUFBQUMsa05BNllBQyxFQUFBLGdDQUdBQyxFQUFBdHNCLEVBQUEra0IsUUFBQS9rQixFQUFBMnJCLGFBR0FZLEdBQ0F0OUYsVUFBQSxTQUNBMnRCLE1BQUEsUUFBQW5yQixJQUFBLE1BQ0FqQixXQUFnQm9zQixNQUFBLFFBSWhCNHZFLEdBQ0E1dkUsTUFBQSxJQUFBbnJCLElBQUEsSUFBQTYyRixjQUFBLEVBQUFNLFlBQUEsRUFDQXA0RixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsc0NBTUE2dkUsRUFBQXpzQixFQUFBK2tCLFFBQUEva0IsRUFBQXdyQixxQkFvREEsT0FDQWxHLGtCQUFBLEVBQ0FRLFFBQUErRSxFQUNBdmYsVUFDQW9oQixRQUFBUCxFQUNBUSxTQWxXQUMsaWtVQW1XQW5mLE1BMUpBb2YseXBaQTJKQXJ4RixLQXZGQXN4RiwrNUhBd0ZBQyxRQUFBVixHQUVBNzdGLFdBMURBdkIsVUFBQSxPQUNBNjJGLFFBQUErRSxFQUNBanVFLE1BQUEsTUFBQW5yQixJQUFBLElBQ0E2NUUsVUFBZTBoQixlQUFBYixFQS9aZmMsc1VBZ2FBejhGLFVBQ0FpOEYsS0FZQXg5RixVQUFBLFdBQ0E2MkYsUUFBQStFLEVBQ0F2RSxXQUNPMXBFLE1BQUEsb0JBQUFuckIsSUFBQSxNQUFBNjVFLFNBQUEsc0JBQ0ExdUQsTUFBQSw4QkFBQTB1RCxTQUFBLGdDQUVQOTZFLFdBRUFvc0IsTUFBQSxNQUFBbnJCLElBQUEsTUFBQWkzRixZQUFBLEVBQ0FsNEYsV0FFQXZCLFVBQUEsU0FDQTYyRixRQUFBK0UsRUFDQWp1RSxNQUFBaXVFLEVBQUFwNUYsSUFBQSxJQUFBbTNGLFlBQUEsRUFBQTVDLGdCQUFBLEVBQ0ExYSxVQUNBb2hCLFFBQUEsT0FDQUssUUFBQVYsR0FFQTc3RixVQUNBODdGLEVBQ0FDLEVBQ0FDLElBR0FDLElBR0F6c0IsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBcUNwdkUsTUFBQWl1RSxNQWlCckM0QixHQWxEQXg5RixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsTUFBdUJtM0YsWUFBQSxHQW1EdkIwRCxFQUNBQyxFQUNBQyxvQkN6ZkFyaUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQWt0QixFQUNBLHlCQURBQSxFQUVBLG1CQXNCQUMsRUFBQW50QixFQUFBc3JCLFFBQUEsSUFBcUMsS0FzQnJDOEIsR0FDQXh3RSxNQUFBc3dFLEVBQUEsUUFDQTNFLGFBQUEsRUFDQTkyRixJQUFBLElBQ0E0MEYsVUFBQSxFQUNBNzFGLFdBQW9CdkIsVUFBQSxZQUFBMnRCLE1BQUFzd0UsS0FHcEIsT0FDQS9HLFFBQUErRyxFQUNBNWhCLFVBbERBLFFBQ0EsTUFDQSxPQUNBLEtBQ0EsT0FDQSxNQUNBLFFBQ0EsU0FDQSxTQUNBLE9BQ0EsS0FDQSxPQUNBLFFBQ0EsS0FDQSxRQUNBLE9BbUNBM3JDLEtBQUEsS0FDQW52QyxVQUNBNDhGLEVBQ0FELEdBaENBbCtGLFVBQUEsU0FDQTJ0QixNQUFBLHVDQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLHVDQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLGdEQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLFNBcUJBb2pELEVBQUFvckIsa0JBQ0FwckIsRUFBQTJyQiw4QkNsRUF4aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXh2RSxXQUdBdkIsVUFBQSxTQUNBMnRCLE1BQUEsZ0VBSUEzdEIsVUFBQSxTQUNBMnRCLE1BQUEsYUFDQXlwRSxVQUFBLElBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsMERBQUFuckIsSUFBQSxJQUNBNjVFLFNBQUEsdURBQ0E2YSxRQUFBLE1BQ0FFLFVBQUEsS0FJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTAwRixRQUFBLFFBSUFsM0YsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSx5QkNoQ0FoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFHQXF0QixHQUNBcCtGLFVBQUEsV0FDQTJ0QixNQUFBLFNBQWtCbnJCLElBTGxCLDJCQU1BNDBGLFVBQUEsSUFHQSxPQUNBbEMsU0FBQSxNQUNBN1ksVUFDQW9oQixRQUFBLG1VQUtBSyxRQUFBLDZCQUVBdjhGLFVBQ0F3dkUsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBcHJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxRQUNBdzJGLGNBQUEsVUFBQWgwRixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFnc0IsY0FHQS84RixVQUFBLFFBQ0F3MkYsY0FBQSxrQkFBQWgwRixJQUFBLElBQWlEbTNGLFlBQUEsRUFDakRwNEYsV0FFQWkxRixjQUFBLHNCQUVBemxCLEVBQUFnc0IsY0FJQS84RixVQUFBLE9BQ0F3MkYsY0FBQSxpQkFBQWgwRixJQUFBLElBQ0E2NUUsVUFBbUIwaEIsZUFBQSxvQkFHbkIvOUYsVUFBQSxXQUNBdzJGLGNBQUEsV0FBQWgwRixJQUFBLE9BQTRDbTNGLFlBQUEsRUFDNUN6QyxRQUFBLE1BQ0EzMUYsVUFDQXd2RSxFQUFBZ3NCLFlBRUEvOEYsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixVQUNBd3ZFLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0E0QixLQUlBendFLE1BQUEseUNBSUFvakQsRUFBQWtzQixjQUVBL0YsUUFBQSxxQkN0RUFoOEYsRUFBQUQsUUFVQSxTQUFBODFFLEdBS0EsSUFXQXN0QixFQUFBLDRCQU1BYixFQUFBenNCLEVBQUFzckIsUUFBQSxVQUtBaUMsR0FJQTN3RSxNQUFBLFlBQUFuckIsSUFBQSxzQkFHQTAwRixRQWZBLFlBZ0JBMzFGLFdBSUFpMUYsY0FBQSwwQkFDQWlELFlBQUEsSUFJQXo1RixVQUFBLFVBQ0F3MkYsY0FBQSx5RUFHQXgyRixVQUFBLE9BQ0EydEIsTUFBQTB3RSxFQUNBNUUsWUFBQSxFQUNBckMsVUFBQSxLQUtBLE9BQ0FmLGtCQUFBLEVBQ0FoYSxVQUNBb2hCLFFBQ0EsNGJBT0FLLFFBQ0EsY0FFQXY4RixVQUNBaThGLEdBR0F4OUYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixXQUE0Qm9zQixNQUFBLEtBQUF5cEUsVUFBQSxNQUs1QnAzRixVQUFBLFNBQ0EydEIsTUFBQSxRQUlBM3RCLFVBQUEsU0FDQTJ0QixNQTFFQSw4R0EyRUF5cEUsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLElBQUEwd0UsSUFJQXIrRixVQUFBLFFBQ0EydEIsTUFBQSw4REFBQW5yQixJQUFBLFNBQ0E2NUUsU0FBQSxlQUNBZ2QsY0FBQSxFQUNBTSxZQUFBLEVBQ0F6QyxRQW5GQSxjQXdGQXZwRSxNQUFBLHlEQUFBbnJCLElBQUEsc0NBQ0E2NUUsU0FBQSx1REFHQWlkLGFBQUEsRUFDQS8zRixVQUVBaThGLEdBR0F4OUYsVUFBQSxRQUNBMnRCLE1BQUEsNENBQ0FuckIsSUFBQSxlQUNBNjJGLGNBQUEsRUFDQU0sWUFBQSxFQUNBekMsUUF2R0EsYUEyR0FvSCxHQUdBdCtGLFVBQUEsT0FDQTJ0QixNQUFBLGdCQUFBbnJCLElBQUEsYUFDQTY1RSxTQUFBLFNBQ0FnZCxjQUFBLEVBQ0FNLFlBQUEsRUFFQUYsWUFBQSxFQUNBdkMsUUFySEEsZ0JBNkhBbDNGLFVBQUEsT0FDQTJ0QixNQUFBLG9CQUFBbnJCLElBQUEsT0FDQTY1RSxTQUFBLE9BQ0FnZCxjQUFBLEVBQ0FuQyxRQWpJQSxhQXFJQW9ILG9CQ2xLQXBqRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBd3RCLEdBQWdCditGLFVBQUEsU0FBQTJ0QixNQUFBLGNBQ2hCLE9BQ0F1bkUsU0FBQSxjQUNBbUIsa0JBQUEsRUFDQTkwRixVQUNBd3ZFLEVBQUEwckIsbUJBQ096OEYsVUFBQSxVQUFBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BRVB4QyxVQUFBLFlBQ0EydEIsTUFBQSxNQUNBeXBFLFVBQUEsRUFHQS9hLFVBQ0FtaUIsU0FDQSw4SkFJQS9HLFFBQ0FqMUYsSUFBQSxJQUNBNDBGLFVBQUEsRUFDQS9hLFVBQ0F5aEIsUUFBQSxjQUVBdjhGLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQSxTQUFBbnJCLElBQUEsU0FHQXhDLFVBQUEsV0FDQTJ0QixNQUFBLFlBQStCbnJCLElBQUEsTUFDL0JqQixVQUFBLE9BQUFnOUYsSUFFQUEsRUFDQXh0QixFQUFBb3JCLHNCQUtBakYsUUFBQSxzQkMxQ0FoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQTB0QixFQUFBMXRCLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUFxRGpGLFFBQUEsS0FDckR3SCxHQUNBMStGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQSxPQUFBd3ZFLEVBQUE0ckIsY0FBQThCLElBRUFFLEVBQUE1dEIsRUFBQXNyQixRQUFBLFVBUUFtQixHQUNBbUIsRUFSQTV0QixFQUFBc3JCLFFBQ0EsU0FDQSxVQUVBOTZGLFVBQUEsT0FBQW85RixLQU1BNXRCLEVBQUEwckIsbUJBR0EsT0FDQXZILFNBQUEsYUFDQTdZLFVBQ0FvaEIsUUFDQSwwaUJBVUFLLFFBQ0EsbUVBQ0FKLFNBQ0Esc1VBUUFuOEYsVUFDQWs5RixFQUNBMXRCLEVBQUE0ckIsZUFFQTM4RixVQUFBLFdBQ0EydEIsTUFDQSxtY0FXQTN0QixVQUFBLFVBQ0EydEIsTUFDQSxtRUFHQTN0QixVQUFBLFVBQ0EydEIsTUFDQSxzU0FPQTZvRSxjQUFBLEtBQ0FVLFFBQUEsWUFDQTMxRixVQUFBd3ZFLEVBQUFpc0Isc0JBQUEwQixLQUVBdHJGLE9BQUFvcUYsR0FDQXRHLFFBQUEsbUNDbEZBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUE2dEIsR0FDQTUrRixVQUFBLFVBQ0EydEIsTUFBQSxzQkFHQTJ2RSxHQUNBdDlGLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsY0FBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxNQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixvQkFHQXR1RSxNQUFBLGFBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsVUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxPQUtBbUcsR0FDQXI5RixVQUFBLFNBQ0FxM0YsV0FDTzFwRSxNQUFBLGtCQUNBQSxNQUFBLG9FQUNBQSxNQUFBLHdGQUVQeXBFLFVBQUEsR0FHQXlILEdBQ0E3K0YsVUFBQSxPQUNBMnRCLE1BQUEsZUFBQW5yQixJQUFBLElBQ0E2NUUsVUFDQTBoQixlQUNBLGtGQUdBeDhGLFdBRUFvc0IsTUFBQSxPQUFBeXBFLFVBQUEsR0FFQXJtQixFQUFBK2tCLFFBQUF3SCxHQUE2QnQ5RixVQUFBLGlCQUU3QkEsVUFBQSxjQUNBMnRCLE1BQUEsWUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxPQUVBbm1CLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQix1QkFJQXNDLEVBQUEvdEIsRUFBQTRxQixTQUFBLFVBRUFvRCxHQUNBdEIsUUFBQSwrckJBV0FDLFNBQUEsNHZCQVNBSSxRQUFBLDJCQUdBa0IsR0FDQUosRUFDQTd0QixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0FhLEVBQ0FDLEdBR0EsT0FDQXBJLFNBQUEsZ0NBQ0E3WSxTQUFBMGlCLEVBQ0E3SCxRQUFBLEtBQ0EzMUYsU0FBQXk5RixFQUFBNXJGLFFBQ0F5ckYsR0FFQWx4RSxNQUFBLG1KQUFBbnJCLElBQUEsSUFDQTY1RSxTQUFBMGlCLEVBQ0F4OUYsVUFBQSxPQUFBcTlGLEtBR0FqeEUsTUFBQW9qRCxFQUFBNHFCLFNBQUEsS0FDQXRmLFNBQUEwaUIsSUFNQTFILFdBQ1cxcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLEtBQUFuckIsSUFBQSxPQUNBZzBGLGNBQUEsd0JBQUFoMEYsSUFBQSxNQUVYNjVFLFNBQUEwaUIsRUFDQXg5RixTQUFBeTlGLEVBQUE1ckYsU0FFQXVhLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2NUUsU0FBQTBpQixFQUNBeDlGLFNBQUF5OUYsRUFBQTVyRixRQUFBLFNBQ0Fna0YsVUFBQSxLQUdBQSxVQUFBLElBR0FwM0YsVUFBQSxXQUNBMnRCLE1BQUEsSUFBQW9qRCxFQUFBNHFCLFNBQUEsZUFBQW1ELEVBQ0F4RixhQUFBLEVBQUE5MkYsSUFBQSxRQUNBbTNGLFlBQUEsRUFDQXRkLFNBQUEwaUIsRUFDQTdILFFBQUEsYUFDQTMxRixXQUVBb3NCLE1BQUFteEUsRUFBQXhGLGFBQUEsRUFDQS8zRixVQUFBd3ZFLEVBQUFnc0IsWUFDQTNGLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTY1RSxTQUFBMGlCLEVBQ0EzSCxVQUFBLEVBQ0E3MUYsVUFDQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0FjLEVBQ0FELEVBQ0F1QixJQUdBN3RCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXFDLEtBSUE3K0YsVUFBQSxRQUNBdzJGLGNBQUEsZUFBQWgwRixJQUFBLFFBQ0FqQixXQUNXb3NCLE1BQUEsSUFBQW5yQixJQUFBLElBQUFqQixVQUFBLFNBQ1h3dkUsRUFBQWdzQixlQUlBOWhHLFNBQ0Fna0csYUFBQUosRUFDQUssUUFBQTVCLEVBQ0FqaEIsU0FBQTBpQixvQkMxS0E3akcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQW91QixFQUFBcHVCLEVBQUE4b0IsWUFBQSxPQUFBNStGLFFBQ0EsT0FDQW9oRixVQUNBb2hCLFFBQ0EseUNBQUEwQixFQUFBOWlCLFNBQUFvaEIsUUFDQUMsU0FDQSwwMkdBMkVBSSxRQUNBLHNOQU1BdjhGLFVBQ0E0OUYsRUFBQUYsYUFDQWx1QixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE0ckIsZ0NDL0ZBemhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUVBLE9BQ0FzbEIsa0JBQUEsRUFDQW5CLFNBQUEsT0FDQTJCLFFBQUEsT0FBQTlsQixFQUFBNHFCLFNBQ0F0ZixVQUNBOUcsS0FFQSw2dEJBR0Ftb0IsU0FDQSwyMUJBbUJBbjhGLFdBRUF2QixVQUFBLFVBQ0EydEIsTUFBQSxzdEJBaUJBbnJCLElBQUEsT0FFQXV1RSxFQUFBc3JCLFFBQUEsT0FBc0IsS0FBV2pGLFVBQUEsSUFDakNybUIsRUFBQXlyQixxQkFDQXpyQixFQUFBb3JCLG1CQUVBbjhGLFVBQUEsU0FDQTJ0QixNQUFBLElBQ0FuckIsSUFBQSxXQUNBNDBGLFVBQUEsSUFHQXAzRixVQUFBLFFBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQTAwRixRQUFBLE1BQ0FFLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0FxM0YsV0FDYTFwRSxNQUFBLHNCQUNBQSxNQUFBLGtCQUNBQSxNQUFBLGNBQ0FBLE1BQUEsWUFFYnlwRSxVQUFBLElBR0FwM0YsVUFBQSxTQUNBcTNGLFdBQ2ExcEUsTUFBQSxrQ0FDQUEsTUFBQSx1Q0FDQUEsTUFBQSxhQUVieXBFLFVBQUEscUJDdEZBbDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQ0FxdUIsR0FDQXJJLGdCQUFBLEVBQ0FHLFFBQUEsSUFDQUUsVUFBQSxFQUNBNzFGLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFSQSxxQkFTQXlwRSxVQUFBLElBR0F6cEUsTUFBQSxPQUNBeXBFLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxTQUNBeTVGLFlBQUEsRUFDQXBDLFdBQ2UxcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsc0JBT2YsT0FDQXVuRSxTQUFBLHVEQUNBbUIsa0JBQUEsRUFDQTkwRixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEsWUFBQW5yQixJQUFBLElBQ0E0MEYsVUFBQSxHQUNBNzFGLFdBQW9Cb3NCLE1BQUEsTUFBQW5yQixJQUFBLFNBRXBCdXVFLEVBQUFzckIsUUFDQSxVQUNBLFVBRUFqRixVQUFBLE1BSUF6cEUsTUFBQSxrQkFBQW5yQixJQUFBLFVBQ0E0MEYsVUFBQSxLQUdBenBFLE1BQUEsWUFBQW5yQixJQUFBLE1BQ0FnMkYsWUFBQSxNQUNBajNGLFdBQW9Cb3NCLE1BQUEsT0FBQW5yQixJQUFBLE9BQUEyakMsTUFBQSxNQUdwQm5tQyxVQUFBLE1BT0EydEIsTUFBQSxvQkFBQW5yQixJQUFBLElBQ0E2NUUsVUFBbUJyZ0YsS0FBQSxTQUNuQnVGLFVBQUE2OUYsR0FDQTNILFFBQ0FqMUYsSUFBQSxXQUFBazNGLFdBQUEsRUFDQWxCLGFBQUEsZ0JBSUF4NEYsVUFBQSxNQUVBMnRCLE1BQUEscUJBQUFuckIsSUFBQSxJQUNBNjVFLFVBQW1CcmdGLEtBQUEsVUFDbkJ1RixVQUFBNjlGLEdBQ0EzSCxRQUNBajFGLElBQUEsYUFBQWszRixXQUFBLEVBQ0FsQixhQUFBLG1EQUlBeDRGLFVBQUEsT0FDQXEzRixXQUNXMXBFLE1BQUEsU0FBQW5yQixJQUFBLE1BQUE0MEYsVUFBQSxLQUNBenBFLE1BQUEsU0FBQW5yQixJQUFBLFVBSVh4QyxVQUFBLE1BQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQWpCLFdBRUF2QixVQUFBLE9BQUEydEIsTUFBQSxhQUFBeXBFLFVBQUEsR0FFQWdJLHNCQ2hHQWxrRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsUUFDQTN6RixVQUVBd3ZFLEVBQUFzckIsUUFDQSxZQUNBLGFBS0FqRixVQUFBLEtBSUFybUIsRUFBQXNyQixRQUNBLE1BQ0EsS0FFQWpGLFVBQUEsS0FLQXAzRixVQUFBLFFBQ0EydEIsTUFBQSxlQUlBQSxNQUFBLGlCQUNBbnJCLElBQUEsa0JBQ0E0MEYsVUFBQSxLQUlBcDNGLFVBQUEsVUFDQW8zRixVQUFBLEdBQ0FDLFdBQ1cxcEUsTUFBQSwwQkFDQUEsTUFBQSwyQ0FLWDN0QixVQUFBLE9BQ0EydEIsTUFBQSxTQUNBbnJCLElBQUEsTUFDQW0zRixZQUFBLEVBQ0F2QyxVQUFBLEtBSUFwM0YsVUFBQSxPQUNBMnRCLE1BQUEsY0FDQXlwRSxVQUFBLElBSUFwM0YsVUFBQSxRQUNBMnRCLE1BQUEsWUFDQW5yQixJQUFBLFlBQ0E0MEYsVUFBQSxLQUlBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLG1CQUNBbnJCLElBQUEsbUJBQ0E0MEYsVUFBQSxLQUlBenBFLE1BQUEsY0FDQW5yQixJQUFBLGNBQ0FqQixXQUVBb3NCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FnMkYsWUFBQSxNQUNBcEIsVUFBQSxJQUdBQSxVQUFBLEtBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEscUNBSUEzdEIsVUFBQSxTQUNBMnRCLE1BQUEsNkNBQ0F5cEUsVUFBQSxLQUlBcDNGLFVBQUEsU0FFQTJ0QixNQUFBLHFCQUNBbnJCLElBQUEsZUFFQWpCLFdBRUFvc0IsTUFBQSxXQUNBeXBFLFVBQUEsTUFNQXAzRixVQUFBLFdBRUEydEIsTUFBQSxpQkFDQW5yQixJQUFBLGFBRUFqQixXQUVBb3NCLE1BQUEsV0FDQXlwRSxVQUFBLElBR0FBLFVBQUEsSUFJQXAzRixVQUFBLFdBRUEydEIsTUFBQSxjQUNBbnJCLElBQUEsYUFDQTQwRixVQUFBLElBSUFwM0YsVUFBQSxTQUNBcTNGLFdBQ1cxcEUsTUFBQSxZQUNBQSxNQUFBLFlBS1gzdEIsVUFBQSxPQUNBMnRCLE1BQUEsb0JBQ0F5cEUsVUFBQSxJQUlBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLFVBQ0FuckIsSUFBQSxJQUNBNDBGLFVBQUEsSUFJQXpwRSxNQUFBLGlCQUNBeXBFLFVBQUEsS0FJQXpwRSxNQUFBLDBEQUNBMnJFLGFBQUEsRUFDQS8zRixXQUVBb3NCLE1BQUEsa0JBQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLE1BQ0FuckIsSUFBQSxVQUNBNDBGLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxNQUNBbnJCLElBQUEsTUFDQTYyRixjQUFBLEVBQ0FNLFlBQUEsRUFDQXZDLFVBQUEsSUFHQUEsVUFBQSxzQkN0TEFsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXN1QixFQUNBLHFvQkFTQSxPQUNBaGpCLFNBQUFnakIsRUFDQW5JLFFBQUEsUUFDQTMxRixVQUNBd3ZFLEVBQUFzckIsUUFDQSxVQUNBLFFBRUFqRixVQUFBLEVBQ0E3MUYsV0FHQW9zQixNQUFBLE9BQUF5cEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLGlCQUtBb2pELEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxRQUNBdzJGLGNBQUEsU0FDQWgwRixJQUFBLFFBQ0FtM0YsWUFBQSxFQUNBekMsUUFBQSxZQUNBMzFGLFdBRUFpMUYsY0FBQSx5RkFFQXpsQixFQUFBaXNCLHVCQUVBcnZFLE1BQUEsV0FDQW5yQixJQUFBLE9BQ0E2NUUsU0FBQWdqQixFQUFBLHFCQUNBMUYsWUFBQSxNQUtBMzVGLFVBQUEsUUFDQXcyRixjQUFBLGtCQUNBaDBGLElBQUEsUUFDQW0zRixZQUFBLEVBQ0F2QyxVQUFBLEVBQ0EvYSxTQUFBLGtCQUNBNmEsUUFBQSxXQUNBMzFGLFdBQ1dpMUYsY0FBQSxzQkFDWHpsQixFQUFBaXNCLHlCQUtBeEcsY0FBQSxrREFDQWgwRixJQUFBLE1BQ0FtM0YsWUFBQSxFQUNBekMsUUFBQSxVQUNBMzFGLFdBRUFvc0IsTUFBQW9qRCxFQUFBNnFCLG9CQUFBLFVBQ0F0QyxhQUFBLEVBQ0EvM0YsVUFBQXd2RSxFQUFBaXNCLDJCQUtBcnZFLE1BQUEsTUFDQTJyRSxhQUFBLEVBQ0E5MkYsSUFBQSxPQUNBNDBGLFVBQUEsRUFDQXVDLFlBQUEsRUFDQXRkLFNBQUFnakIsRUFDQW5JLFFBQUEsVUFDQTMxRixXQUVBb3NCLE1BQUFvakQsRUFBQTZxQixvQkFBQSxVQUNBdmYsU0FBQWdqQixFQUFBLHFCQUNBakksVUFBQSxHQUVBcm1CLEVBQUFvckIscUJBS0EzRixjQUFBLFlBQ0FZLFVBQUEsSUFJQXAzRixVQUFBLFdBQ0EydEIsTUFBQSwyREFDQTJyRSxhQUFBLEVBQ0E5MkYsSUFBQSxRQUNBNjVFLFNBQUFnakIsRUFDQTFGLFlBQUEsRUFDQXA0RixXQUVBb3NCLE1BQUFvakQsRUFBQTZxQixvQkFBQSxVQUNBdEMsYUFBQSxFQUNBbEMsVUFBQSxFQUNBNzFGLFVBQUF3dkUsRUFBQWlzQix5QkFHQWg5RixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTQwRixVQUFBLEVBQ0EvYSxTQUFBZ2pCLEVBQ0E5OUYsVUFDQXd2RSxFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixjQUNBNXJCLEVBQUF5ckIsdUJBR0F6ckIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHVCQUdBenJCLEVBQUE0ckIsZUFHQTM4RixVQUFBLE9BQ0EydEIsTUFBQSxnQ0MzSUF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXV1QixHQUNBM3hFLE1BQUEsYUFHQSxPQUNBMG9FLGtCQUFBLEVBQ0FuQixTQUFBLE9BQ0E3WSxVQUNBb2hCLFFBQUEsdUtBQ0FLLFFBQUEsNEJBQ0FKLFNBQUEsNkNBRUFuOEYsV0FFQXZCLFVBQUEsV0FDQTJ0QixNQUFBLGtCQUVBMnhFLEVBQ0F2dUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDNTZGLFVBQUErOUYsS0FDNUN2dUIsRUFBQXNyQixRQUFBLElBQXFCLEtBQVNqRixVQUFBLElBQzlCcm1CLEVBQUF5ckIsc0JBRUF4OEYsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQThxQixVQUNBekUsVUFBQSxJQUdBcDNGLFVBQUEsUUFDQTJ0QixNQUFBLHVCQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLHFCQUdBbDNGLFVBQUEsV0FDQTJ0QixNQUFBLG1CQUlBM3RCLFVBQUEsT0FDQTJ0QixNQUFBLFdBQUFuckIsSUFBQSxJQUNBNDBGLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0F1QixVQUFBKzlGLEdBQ0FqSSxXQUNXMXBFLE1BQUEsc0JBQ0FBLE1BQUEsbUJBQWdCeXBFLFVBQUEsTUFNM0J6cEUsTUFBQSw0QkNyREF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFXQXNyQixHQUNBaEYsVUFDQXRtQixFQUFBc3JCLFFBQUEsSUFBNkIsS0FBU2pGLFVBQUEsSUFDdENybUIsRUFBQXNyQixRQUFBLGFBQ0F0ckIsRUFBQXNyQixRQUFBLHFDQUlBa0QsR0FDQTV4RSxNQUFBLGlCQUdBOHdFLEdBQ0F6K0YsVUFBQSxTQUNBcTNGLFdBQ0ExcEUsTUFBQSxJQUNBbnJCLElBQUEsSUFDQWpCLFdBQ0Fvc0IsTUFBQSxLQUNBeXBFLFVBQUEsTUFHQXpwRSxNQUFBLElBQ0FuckIsSUFBQSxJQUNBakIsV0FDQW9zQixNQUFBLEtBQ0F5cEUsVUFBQSxPQUtBbUgsR0FDQWxILFVBQUF0bUIsRUFBQTZyQixtQkFBQTdyQixFQUFBNHJCLGdCQXdFQSxPQUNBdEcsa0JBQUEsRUFDQWEsUUFBQSxPQUNBN2EsVUFDQW9oQixRQXZIQSxvUEF3SEFDLFNBL0dBLGs0SkFnSEFJLFFBbkhBLDhCQXFIQXY4RixVQUNBODZGLEVBQ0FrRCxFQUNBZCxFQUNBRixHQWhGQXYrRixVQUFBLE9BQ0EydEIsTUFBQSxJQUNBbnJCLElBQUEsSUFDQTY1RSxVQUF1QjBoQixlQUFBLDhGQUN2Qng4RixXQUNBb3NCLE1BQUEsT0FDQXlwRSxVQUFBLElBRUFaLGNBQUEsVUFDQW5hLFVBQStCMGhCLGVBQUEsV0FDL0J2N0YsSUFBQSxJQUNBakIsVUFDQWs5RixHQUNBeitGLFVBQUEsY0FDQXEzRixXQUNBMXBFLE1BQUEsSUFDQW5yQixJQUFBLE1BRUFtckIsTUFBQSxJQUNBbnJCLElBQUEsSUFDQWpCLFdBQ0Fvc0IsTUFBQSxLQUNBeXBFLFVBQUEsTUFHQXpwRSxNQUFBLElBQ0FuckIsSUFBQSxJQUNBakIsV0FDQW9zQixNQUFBLEtBQ0F5cEUsVUFBQSxTQU1BcUgsRUFDQXBDLEtBS0FyOEYsVUFBQSxTQUtBMnRCLE1BQUEsZ0JBSUEzdEIsVUFBQSxXQUNBdzJGLGNBQUEsT0FDQWgwRixJQUFBLElBQ0EwMEYsUUFBQSxZQUNBMzFGLFVBQ0F3dkUsRUFBQWlzQix1QkFDQWg5RixVQUFBLFNBQ0EydEIsTUFBQSxNQUNBbnJCLElBQUEsTUFDQWpCLFVBQ0FnK0YsRUFDQWQsRUFDQUYsd0JDOUdBcmpHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzbEIsa0JBQUEsRUFDQVEsUUFBQSxPQUFBOWxCLEVBQUE0cUIsU0FDQXRmLFVBQ0FvaEIsUUFFQSxtZ0JBT0FDLFNBRUEsNnhCQVdBbm9CLEtBQ0Esc0hBR0FoMEUsVUFDQXd2RSxFQUFBeXJCLHFCQUNBenJCLEVBQUFzckIsUUFDQSxJQUNBLEtBRUFqRixVQUFBLElBR0FybUIsRUFBQTRyQixjQUNBNXJCLEVBQUE2ckIsb0JBRUE1OEYsVUFBQSxTQUNBMnRCLE1BQUEsaUNBRUFvakQsRUFBQW9yQixtQkFFQW44RixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsV0FDQTAwRixRQUFBLGdCQUVPbDNGLFVBQUEsU0FBQTJ0QixNQUFBLHNCQUNBM3RCLFVBQUEsT0FBQTJ0QixNQUFBLElBQUFuckIsSUFBQSxNQUVQeEMsVUFBQSxRQUNBMnRCLE1BQUEsNkJDeERBenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQXVDQSxPQUNBc0wsVUFDQW9oQixRQWpDQSwrRkFtQ0FsOEYsV0F6Q0F2QixVQUFBLFdBQ0FxM0YsV0FDTzFwRSxNQUFBLHVCQUNBQSxNQUFBLGlCQUtQM3RCLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixrQkFDQTVFLFdBRUExcEUsTUFBQSxjQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEtBR0F6cEUsTUFBQSxjQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEtBR0F6cEUsTUFBQSxZQUFBbnJCLElBQUEsSUFDQTQwRixVQUFBLEtBR0F6cEUsTUFBQSxZQUFBbnJCLElBQUEsSUFDQTQwRixVQUFBLEtBR0F6cEUsTUFBQSxVQUFBbnJCLElBQUEsTUFHQW1yQixNQUFBLFVBQUFuckIsSUFBQSxLQUVBdXVFLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixvQkFVQXByQixFQUFBK3JCLFlBQ0EvckIsRUFBQTByQixrQkFDQTFyQixFQUFBMnJCLDhCQ2hEQXhoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBc0wsU0FBQSxtYUFNQTk2RSxVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixlQUVBMzhGLFVBQUEsT0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxNQUdBeEMsVUFBQSxRQUNBdzJGLGNBQUEsa0JBQUFoMEYsSUFBQSxJQUFpRG0zRixZQUFBLEVBQ2pEekMsUUFBQSxJQUNBMzFGLFdBQ1dpMUYsY0FBQSxzQkFDWHpsQixFQUFBaXNCLDBDQ3hCQTloRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBeXVCLEdBQ0F4L0YsVUFBQSxXQUNBcTNGLFdBQ08xcEUsTUFBQSx1QkFDQUEsTUFBQSxnQkFHUDh4RSxHQUNBei9GLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFDQXd2RSxFQUFBa3JCLGlCQUNBdUQsR0FFQXgvRixVQUFBLFdBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsS0FDQWpCLFVBQUF3dkUsRUFBQWtyQixxQkFTQSxPQUNBL0csU0FBQSxZQUNBMkIsUUFBQSxrQkFDQXhhLFVBQ0FvaEIsUUFDQSwrREFDQUssUUFDQSxhQUNBSixTQUdBLDR1QkFjQXJaLEVBQ0EscUNBRUE5aUYsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLGtCQUNBeXBFLFVBQUEsS0FHQXAzRixVQUFBLFdBQ0EydEIsTUFBQSw0QkFDQTJyRSxhQUFBLEVBQ0EvM0YsVUFBQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUFrRHB2RSxNQUFBLGdCQUNsRHlwRSxVQUFBLEdBRUFybUIsRUFBQTByQixrQkFDQWdELEdBOUNBei9GLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxLQStDQWc5RixvQkN0RUF0a0csRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNsQixrQkFBQSxFQUNBYSxRQUFBLEtBRUFMLFFBQUEsNEJBQ0F4YSxVQUNBb2hCLFFBQ0EsdzhCQWFBbDhGLFVBQ0F3dkUsRUFBQW9yQixrQkFDQXByQixFQUFBc3JCLFFBQUEsV0FBZ0NqRixVQUFBLEtBQ2hDcm1CLEVBQUFzckIsUUFBQSxTQUErQmpGLFVBQUEsS0FHL0JwM0YsVUFBQSxTQUNBMnRCLE1BQUEsV0FDQXlwRSxVQUFBLEtBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsOEJBQ0F5cEUsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDRCQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLHVDQzdDQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeHZFLFdBR0F2QixVQUFBLFlBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsTUFJQW1yQixNQUFBLE1BQ0E4cEUsUUFDQWoxRixJQUFBLElBQ0FqQixXQUVBb3NCLE1BQUEsSUFBQW5yQixJQUFBLEtBR0F1dUUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQix1Q0NyQkFqaEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXFzQixHQUNBcDlGLFVBQUEsVUFDQTJ0QixNQUFBLFdBQ0F5cEUsVUFBQSxHQUVBLE9BQ0FsQyxTQUFBLE1BQ0EzekYsVUFDQXd2RSxFQUFBc3JCLFFBQ0EsNkJBQ0EsNkJBRUEzQyxXQUFBLEVBQ0F0QyxVQUFBLEtBSUFwM0YsVUFBQSxRQUNBMnRCLE1BQUEsV0FDQXlwRSxVQUFBLElBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsU0FDQXlwRSxVQUFBLElBSUF6cEUsTUFBQSxZQUFBMnJFLGFBQUEsRUFDQS8zRixVQUFBNjdGLElBRUFBLG9CQ2hDQWxpRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBc3VCLEVBQ0EseUhBR0FLLEdBQ0EzdUIsRUFBQXdyQixvQkFDQXhyQixFQUFBc3JCLFFBQ0EsS0FDQSxNQUVBakYsVUFBQSxJQUdBcm1CLEVBQUFzckIsUUFDQSxPQUNBLFFBRUFqRixVQUFBLE1BSUFxSCxHQUNBeitGLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsV0FBZ0Jvc0IsTUFBQSxRQUVoQmd5RSxHQUNBMy9GLFVBQUEsU0FBQTJ0QixNQUFBLFdBYUFpeUUsR0FDQTUvRixVQUFBLFdBQ0F3MkYsY0FBQSxZQUFBaDBGLElBQUEsT0FDQTY1RSxTQUFBLGVBQ0E5NkUsVUFDQXd2RSxFQUFBZ3NCLFlBRUEvOEYsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2NUUsU0FBQWdqQixFQUNBOTlGLFVBQUFrOUYsRUFBQWtCLEtBRUF2c0YsT0FBQXNzRixJQUdBRyxHQUNBNy9GLFVBQUEsUUFDQTJ0QixNQUFBLGdHQUNBMnJFLGFBQUEsRUFDQS8zRixVQUNBd3ZFLEVBQUFnc0IsV0FDQTZDLElBSUEsT0FDQXZKLGtCQUFBLEVBQ0FoYSxVQUFlb2hCLFFBQUE0QixFQUFBdkIsUUFoRWYsY0FpRUE1RyxRQUFBLE9BQ0EzMUYsVUFDQWs5RixFQUFBa0IsR0F4Q0EzL0YsVUFBQSxTQUNBMnRCLE1BQUEsNEJBQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLElBQ0FuckIsSUFBQSxLQW1DQXV1RSxFQUFBMnJCLFlBQ0FtRCxFQUNBRCxvQkMzRUExa0csRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLFNBQ0E3WSxVQUNBb2hCLFFBQ0Esc0dBQ0FDLFNBQ0EsNkhBRUFJLFFBQ0EsY0FFQXY4RixVQUNBd3ZFLEVBQUFvckIsa0JBQ0FwckIsRUFBQTJyQixZQUNBM3JCLEVBQUEwckIsbUJBRUF6OEYsVUFBQSxPQUNBMnRCLE1BQUEsaUJBQ0F1cEUsUUFBQSxPQUdBbDNGLFVBQUEsU0FDQTJ0QixNQUFBLFdBR0EzdEIsVUFBQSxRQUNBdzJGLGNBQUEsY0FBQWgwRixJQUFBLEtBQ0EwMEYsUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFDQXRGLFFBQXFCVixnQkFBQSxFQUFBNEMsWUFBQSxRQUtyQjM1RixVQUFBLFFBQ0F3MkYsY0FBQSxZQUFBaDBGLElBQUEsS0FDQTAwRixRQUFBLEtBQ0EzMUYsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUNBdEYsUUFBcUJWLGdCQUFBLEVBQUE0QyxZQUFBLHlCQ3pDckJ6K0YsRUFBQUQsUUFBQSxTQUFBODFFLEdBRUEsSUFBQXN1QixFQUNBLGlSQVdBUyxHQUNBOS9GLFVBQUEsUUFBQXE1RixjQUFBLEVBQUFNLFlBQUEsRUFDQWhzRSxNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjVFLFNBQUFnakIsRUFDQWpJLFVBQUEsSUFFQTJJLElBR0EvL0YsVUFBQSxTQUNBMnRCLE1BQUEsTUFDQW5yQixJQUFBLE1BQ0E0MEYsVUFBQSxLQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXUrRixLQUlBOS9GLFVBQUEsU0FDQTJ0QixNQUFBLElBQ0FuckIsSUFBQSxNQUlBeEMsVUFBQSxTQUNBMnRCLE1BQUEsZ0ZBQ0F5cEUsVUFBQSxJQUtBLE9BRkEwSSxFQUFBditGLFNBQUF3K0YsR0FHQTFqQixVQUNBb2hCLFFBQUE0QixFQUFBLHVIQUNBOXBCLEtBdkNBLG9DQXlDQTJoQixRQUFBLHlCQUNBMzFGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBc3JCLFFBQUEsZUFBb0M5NkYsVUFBQSxXQUdwQ3ZCLFVBQUEsT0FDQTJ0QixNQUFBLDhCQUVBdmEsT0FBQTJzRixvQkMvREE3a0csRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLHFCQUNBN1ksVUFDQW9oQixRQUNBLDZNQUlBSyxRQUNBLGNBRUF2OEYsVUFFQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE0ckIsZUFFT2h2RSxNQUFBLDRFQ3BCUHp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQWlDQWl2QixFQUFBLHdEQUdBQyxHQUNBdHlFLE1BQUFxeUUsRUFDQTVJLFVBQUEsR0FFQW1ILEdBQ0F2K0YsVUFBQSxTQUFBMnRCLE1BUEEsc0JBUUF5cEUsVUFBQSxHQUVBcUgsRUFBQTF0QixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBcURqRixRQUFBLE9BQ3JEbUYsRUFBQXRyQixFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxJQUdBZ0csR0FDQXA5RixVQUFBLFVBQ0EydEIsTUFBQSx3QkFFQXV5RSxHQUNBdnlFLE1BQUEsV0FBbUJuckIsSUFBQSxZQUVuQjI5RixHQUNBbmdHLFVBQUEsVUFDQTJ0QixNQUFBLE1BQUFxeUUsR0FFQUksRUFBQXJ2QixFQUFBc3JCLFFBQUEsU0FBcUMsT0FDckNnRSxHQUNBcmdHLFVBQUEsU0FDQTJ0QixNQUFBLFdBQW9CcXlFLEdBRXBCTSxHQUNBM3lFLE1BQUEsTUFBQW5yQixJQUFBLE9BRUErOUYsR0FDQXhKLGdCQUFBLEVBQ0FLLFVBQUEsR0FFQW9KLEdBQ0Fua0IsVUEzRUFva0IsZUFFQSxtakZBMEVBNUosUUFBQW1KLEVBQ0FoZ0csVUFBQSxPQUFBMnRCLE1BQUFxeUUsRUFDQXZJLE9BQUE4SSxHQUVBRyxHQUFBSixFQUFBN0IsRUFBQTBCLEVBQUFDLEVBQUEvRCxFQUFBZ0UsRUFBQUgsRUFBQTNCLEVBQUFuQixFQUFBNkMsR0FPQSxPQUxBSyxFQUFBLytGLFVBQUF3dkUsRUFBQXNyQixRQUFBLGNBQUFtRSxFQUFBRCxHQUNBQSxFQUFBaC9GLFNBQUFtL0YsRUFDQVIsRUFBQTMrRixTQUFBbS9GLEVBQ0FOLEVBQUE3K0YsVUFBQTIrRixJQUdBaEwsU0FBQSxPQUNBZ0MsUUFBQSxLQUNBMzFGLFVBQUErK0YsRUFBQTdCLEVBQUEwQixFQUFBQyxFQUFBL0QsRUFBQWdFLEVBQUFILEVBQUEzQixFQUFBbkIsb0JDNUZBbGlHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0F4dkUsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLHFCQUNBOHBFLFFBQ0FqMUYsSUFBQSxJQUNBZzJGLFlBQUEsOEJDUkF0OUYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLFlBQ0FtQixrQkFBQSxFQUNBaGEsVUFDQW9oQixRQUNBLG01Q0FvQkFsOEYsV0FFQXZCLFVBQUEsV0FDQTJ0QixNQUFBLE9BQW9CbnJCLElBQUEsS0FFcEJ1dUUsRUFBQTByQixrQkFDQTFyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUEyckIsOEJDakNBeGhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBRUEsK05BSUFLLFFBRUEsMENBR0FKLFNBQ0EsMkRBRUFpRCxFQUFBLDJCQUNBYixHQUNBOS9GLFVBQUEsUUFDQTJ0QixNQUFBLE1BQWVuckIsSUFBQSxJQUNmNjVFLFNBQUFnakIsR0FFQVUsR0FDQWh2QixFQUFBNnJCLG1CQUNBN3JCLEVBQUEra0IsUUFBQS9rQixFQUFBNHJCLGVBQXNDbEYsUUFBU2oxRixJQUFBLFdBQUE0MEYsVUFBQSxNQUUvQ3AzRixVQUFBLFNBQ0FxM0YsV0FFQTFwRSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsb0JBR0F0dUUsTUFBQSxNQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEtBR0FueUUsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELE9BS0E5L0YsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxNQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF1K0YsRUFBQS91QixFQUFBMHJCLHFCQUdBOXVFLE1BQUEsV0FDQXlwRSxVQUFBLElBS0F6cEUsTUFBQSwyQ0FLQUEsTUFBQSxJQUFBZ3pFLElBR0FuSSxZQUFBLGFBQ0FhLGNBQUEsRUFBQU0sWUFBQSxFQUNBdEMsV0FFQTFwRSxNQUFBLE1BQUFuckIsSUFBQSxRQUdBbXJCLE1BQUEsSUFBQW5yQixJQUFBLFFBS0FzOUYsRUFBQXYrRixTQUFBdytGLEVBRUEsSUFBQWEsRUFBQTd2QixFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUE2Q3B2RSxNQUFBZ3pFLElBRTdDakMsR0FDQTErRixVQUFBLFNBQ0EydEIsTUFBQSxZQUFBMnJFLGFBQUEsRUFHQS8zRixXQUNBb3NCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2NUUsU0FBQWdqQixFQUNBOTlGLFVBQUEsUUFBQTZSLE9BQUEyc0YsTUFJQSxPQUNBN0ssU0FBQSx3QkFDQTdZLFNBQUFnakIsRUFDQW5JLFFBQUEsT0FDQTMxRixTQUFBdytGLEVBQUEzc0YsUUFDQTI5RCxFQUFBc3JCLFFBQUEsYUFDQXRyQixFQUFBMHJCLG1CQUVBejhGLFVBQUEsV0FDQTJ0QixNQUFBLFFBQUFnekUsRUFBQSxtQ0FBQW4rRixJQUFBLFFBQ0E4MkYsYUFBQSxFQUNBLzNGLFVBQUFxL0YsRUFBQWxDLEtBSUEvd0UsTUFBQSxhQUNBeXBFLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxXQUNBMnRCLE1BakNBLDBCQWlDQW5yQixJQUFBLFFBQ0E4MkYsYUFBQSxFQUNBLzNGLFVBQUFtOUYsT0FLQTErRixVQUFBLFFBQ0F3MkYsY0FBQSxRQUNBaDBGLElBQUEsSUFDQTAwRixRQUFBLFlBQ0EzMUYsV0FFQWkxRixjQUFBLFVBQ0FPLGdCQUFBLEVBQ0FHLFFBQUEsWUFDQTMxRixVQUFBcS9GLElBRUFBLEtBSUFqekUsTUFBQWd6RSxFQUFBLElBQUFuK0YsSUFBQSxJQUNBODJGLGFBQUEsRUFBQUksV0FBQSxFQUNBdEMsVUFBQSxzQkM1SUFsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFVBQ0FvaEIsUUFDQSxtdkRBeUJBQyxTQUNBLHk1Q0FzQkFuOEYsVUFDQXd2RSxFQUFBb3JCLGtCQUNBcHJCLEVBQUFzckIsUUFBQSxtQkFDQXRyQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUNBcTVGLGNBQUEsRUFDQTFyRSxNQUFBLFVBQ0FuckIsSUFBQSxTQUVPbXJCLE1BQUEsMkJDOURQenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQW9FQSxPQUNBc2xCLGtCQUFBLEVBQ0FuQixTQUFBLGFBQ0E3WSxTQWhEQSxnYkFpREE5NkUsV0F2REF2QixVQUFBLFNBQ0EydEIsTUFBQSw4QkFDQXlwRSxVQUFBLElBaEJBcDNGLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsSUFDQW5yQixJQUFBLElBQ0FqQixXQUNBb3NCLE1BQUEsS0FDQXlwRSxVQUFBLE9BaUVBcm1CLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXg4RixVQUFBLFVBQ0EydEIsTUFBQSxJQUFpQm5yQixJQUFBLElBQ2pCNDBGLFVBQUEsSUFHQXAzRixVQUFBLFdBQ0EydEIsTUFBQSwrQkFHQTN0QixVQUFBLFdBQ0EydEIsTUFBQSxvQkFHQTN0QixVQUFBLFdBQ0EydEIsTUFBQSx5QkFHQTN0QixVQUFBLFNBQ0EydEIsTUFBQSxzQkFHQTN0QixVQUFBLFVBQ0EydEIsTUFBQSxpQ0FNQUEsTUFBQSxTQUFBbnJCLElBQUEsS0FDQTYyRixjQUFBLEVBQUFNLFlBQUEsRUFDQW5CLFlBQUEsUUFHQTdxRSxNQUFBLDRCQUFBbnJCLElBQUEsSUFDQTYyRixjQUFBLEVBQUFNLFlBQUEsRUFDQW5CLFlBQUEsZUFJQTdxRSxNQUFBLGFBQUFuckIsSUFBQSxRQUNBZzJGLFlBQUEseUJDdEhBdDlGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBRUE4dkIsRUFBQSxxSEFnQkEsT0FDQTNMLFNBQUEsY0FDQW1CLGtCQUFBLEVBQ0FoYSxVQUNBb2hCLFFBQUE0Qiw2TUFDQXZCLFFBUEEsNkVBU0F2OEYsVUFDQXd2RSxFQUFBMHJCLG1CQUVBakcsY0FBQSxPQUNBaUIsUUFDQWoxRixJQUFBLG1CQUNBaTFGLFFBQ0F6M0YsVUFBQSxRQUNBd0MsSUFBQSw0QkFLQWcwRixjQXRDQSx5QkF1Q0FpQixRQUNBejNGLFVBQUEsUUFDQXdDLElBQUEsd0JBQ0FpMUYsUUFDQWoxRixJQUFBLCtCQUtBbXJCLE1BQUEsT0FBQWt6RSxFQUFBeCtGLE1BQUEsS0FBQXF1QyxLQUFBLGFBQ0EyckMsU0FBQXdrQixFQUNBcEosUUFDQXozRixVQUFBLFFBQ0F3QyxJQUFBLHVCQUlBZzBGLGNBbERBLG9DQW1EQWlCLFFBQ0F6M0YsVUFBQSxRQUNBd0MsSUFBQSxxQkFHQXV1RSxFQUFBb3JCLG1CQUVBbjhGLFVBQUEsT0FDQTJ0QixNQUFBLHNDQUNBeXBFLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSwrQkFDQXlwRSxVQUFBLElBR0FwM0YsVUFBQSxVQUNBMnRCLE1BQUEscUJBQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLDBCQUNBeXBFLFVBQUEsSUFHQXAzRixVQUFBLE1BQ0EydEIsTUFBQSxNQUNBbnJCLElBQUEsTUFDQTQwRixVQUFBLHFCQ3hGQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBK3ZCLEVBQUEsd0JBSUFDLEVBQUEsd0ZBQ0FDLEdBQ0F2RCxRQUNBLHFYQUlBSyxRQUFBLGtCQUVBZ0MsR0FDQTkvRixVQUFBLFFBQ0EydEIsTUFBQSxLQUFjbnJCLElBQUEsSUFDZDY1RSxTQUFBMmtCLEdBRUFDLEdBQ0FqaEcsVUFBQSxvQkFDQXEzRixXQUNPMXBFLE1BQUEsU0FBY25yQixJQUFBLFdBQ2RtckIsTUFBQSxPQUFXbnJCLElBQUEsU0FFbEI2NUUsU0FBQTJrQixHQUdBLFNBQUFFLEVBQUF2ekUsRUFBQW5yQixHQUNBLElBQ0FqQixJQUFpQm9zQixRQUFBbnJCLFFBRWpCLE9BREFqQixFQUFBLEdBQUFBLFdBQ0FBLEVBRUEsSUFBQWs5RixHQUNBeitGLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEdBQ0F6SSxXQUNPMXBFLE1BQUEsSUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxJQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsU0FBQW5yQixJQUFBLE1BQUFqQixTQUFBMi9GLEVBQUEsZUFDQXZ6RSxNQUFBLFNBQUFuckIsSUFBQSxNQUFBakIsU0FBQTIvRixFQUFBLGVBQ0F2ekUsTUFBQSxPQUFZbnJCLElBQUEsSUFBVWpCLFNBQUEyL0YsRUFBQSxJQUE4QixPQUNwRHZ6RSxNQUFBLE9BQUFuckIsSUFBQSxJQUFBakIsU0FBQTIvRixFQUFBLFdBQ0F2ekUsTUFBQSxPQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLE9BQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsT0FBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxTQUFBbnJCLElBQUEsUUFDQW1yQixNQUFBLFVBQUFuckIsSUFBQSxhQUVQNDBGLFVBQUEsR0E2REErSixHQUNBRixFQUNBeEMsR0E1REF6K0YsVUFBQSxTQUNBcTNGLFdBQ08xcEUsTUFBQSxRQUFBbnJCLElBQUEsTUFBQWpCLFNBQUEyL0YsRUFBQSxlQUNBdnpFLE1BQUEsUUFBQW5yQixJQUFBLE1BQUFqQixTQUFBMi9GLEVBQUEsZUFDQXZ6RSxNQUFBLE1BQVduckIsSUFBQSxJQUFVakIsU0FBQTIvRixFQUFBLElBQThCLE9BQ25EdnpFLE1BQUEsTUFBQW5yQixJQUFBLElBQUFqQixTQUFBMi9GLEVBQUEsV0FDQXZ6RSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLFFBQUFuckIsSUFBQSxRQUNBbXJCLE1BQUEsWUFBQW5yQixJQUFBLGFBRVA0MEYsVUFBQSxJQUdBenBFLE1BQUEsK0lBQ0Fwc0IsV0FFQXZCLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEdBQ0F6SSxXQUNXMXBFLE1BQUEsV0FBQXlwRSxVQUFBLElBQ0F6cEUsTUFBQSxJQUFBbnJCLElBQUEsWUFDQW1yQixNQUFBLFFBQUFuckIsSUFBQSxNQUFBakIsU0FBQTIvRixFQUFBLGVBQ0F2ekUsTUFBQSxRQUFBbnJCLElBQUEsTUFBQWpCLFNBQUEyL0YsRUFBQSxlQUNBdnpFLE1BQUEsTUFBV25yQixJQUFBLElBQVVqQixTQUFBMi9GLEVBQUEsSUFBOEIsT0FDbkR2ekUsTUFBQSxNQUFBbnJCLElBQUEsSUFBQWpCLFNBQUEyL0YsRUFBQSxXQUNBdnpFLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLE1BQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsUUFBQW5yQixJQUFBLFVBSVg0MEYsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEdBQ0F6SSxXQUNPMXBFLE1BQUEsUUFBQW5yQixJQUFBLE1BQUFqQixTQUFBMi9GLEVBQUEsZUFDQXZ6RSxNQUFBLFFBQUFuckIsSUFBQSxNQUFBakIsU0FBQTIvRixFQUFBLGVBQ0F2ekUsTUFBQSxNQUFXbnJCLElBQUEsSUFBVWpCLFNBQUEyL0YsRUFBQSxJQUE4QixPQUNuRHZ6RSxNQUFBLE1BQUFuckIsSUFBQSxJQUFBakIsU0FBQTIvRixFQUFBLFdBQ0F2ekUsTUFBQSxNQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLE1BQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxRQUFBbnJCLElBQUEsUUFFUDQwRixVQUFBLElBR0FwM0YsVUFBQSxPQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLE1BQ0FqQixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUE0Q244RixVQUFBLGtCQVU1Qyt3RSxFQUFBMHJCLG1CQUVBejhGLFVBQUEsUUFDQXcyRixjQUFBLHNCQUFBaDBGLElBQUEsTUFDQTAwRixRQUFBLElBQ0EzMUYsVUFDQXd2RSxFQUFBMHJCLGtCQUNBMXJCLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXVDcHZFLE1BQUEsc0NBQzlCQSxNQUFBLFFBSVQzdEIsVUFBQSxRQUNBdzJGLGNBQUEsaUJBQUFoMEYsSUFBQSxNQUNBMDBGLFFBQUEsSUFDQTMxRixVQUNBd3ZFLEVBQUEwckIsa0JBQ0ExckIsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBdUNwdkUsTUFBQSxzQ0FFdkN5cEUsVUFBQSxLQUdBcDNGLFVBQUEsV0FDQXcyRixjQUFBLE1BQUFoMEYsSUFBQSxPQUNBakIsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUNBcHZFLE1BQUFvekUsRUFDQXRILFlBQUEsT0FLQXo1RixVQUFBLFdBQ0F3MkYsY0FBQSxZQUFBaDBGLElBQUEsT0FDQWpCLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFDQXB2RSxNQUFBb3pFLEVBQ0F0SCxZQUFBLEtBR0FyQyxVQUFBLElBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQTZxQixvQkFBQSxjQUNBeEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLElBQ0Fwc0IsVUFBQWs5RixHQUEwQjl3RSxNQUFBb3pFLElBQzFCM0osVUFBQSxJQUdBcDNGLFVBQUEsU0FDQXEzRixXQUNTMXBFLE1BQUEsb0JBQUFtekUsSUFDQW56RSxNQUFBLHNCQUFBbXpFLElBQ0FuekUsTUFBQSxrQ0FBQW16RSxJQUNBbnpFLE1BQUEsMkVBQUFtekUsSUFFVDFKLFVBQUEsSUFNQSxPQUhBMEksRUFBQXYrRixTQUFBNC9GLEVBQ0FGLEVBQUExL0YsU0FBQTQvRixFQUFBamhHLE1BQUEsSUFHQWcxRixTQUFBLE1BQ0EyQixRQTFMQSxzQkEyTEF4YSxTQUFBMmtCLEVBQ0F6L0YsU0FBQTQvRixtQkM5TEFqbUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXN1QixHQUNBNUIsUUFFQSxtbUJBU0FLLFFBQ0EsbUJBR0FzRCxHQUNBcGhHLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxJQUNBakIsV0FBZ0Jvc0IsTUFBQSxRQUVoQjB6RSxFQUFBdHdCLEVBQUEra0IsUUFBQXNMLEdBQTZEbEssUUFBQSxPQUM3RDRJLEdBQ0E5L0YsVUFBQSxRQUNBMnRCLE1BQUEsSUFBYW5yQixJQUFBLElBQ2I2NUUsU0FBQWdqQixHQUVBaUMsRUFBQXZ3QixFQUFBK2tCLFFBQUFnSyxHQUF5QzVJLFFBQUEsT0FDekNxSyxHQUNBdmhHLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsS0FDQTMxRixXQUFnQm9zQixNQUFBLE9BQWVBLE1BQUEsTUFBWW9qRCxFQUFBa3JCLGlCQUFBcUYsSUFFM0NFLEdBQ0F4aEcsVUFBQSxTQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLElBQ0FqQixXQUFnQm9zQixNQUFBLE9BQWVBLE1BQUEsT0FBZUEsTUFBQSxNQUFZbXlFLElBRTFEMkIsRUFBQTF3QixFQUFBK2tCLFFBQUEwTCxHQUNBdEssUUFBQSxLQUNBMzFGLFdBQWdCb3NCLE1BQUEsT0FBZUEsTUFBQSxPQUFlQSxNQUFBLE1BQVkyekUsS0FFMUR4QixFQUFBditGLFVBQ0FpZ0csRUFDQUQsRUFDQUgsRUFDQXJ3QixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixjQUNBNXJCLEVBQUF5ckIsc0JBRUE4RSxFQUFBLy9GLFVBQ0FrZ0csRUFDQUYsRUFDQUYsRUFDQXR3QixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixjQUNBNXJCLEVBQUEra0IsUUFBQS9rQixFQUFBeXJCLHNCQUE2Q3RGLFFBQUEsUUFFN0MsSUFBQXVILEdBQ0FwSCxVQUNBbUssRUFDQUQsRUFDQUgsRUFDQXJ3QixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsb0JBSUF1RixFQUFBM3dCLEVBQUE0cUIsU0FBQSxLQUFBNXFCLEVBQUE0cUIsU0FBQSxhQUFBNXFCLEVBQUE0cUIsU0FBQSxpQkFFQSxPQUNBekcsU0FBQSxVQUNBN1ksU0FBQWdqQixFQUNBbkksUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQXNyQixRQUNBLE1BQ0EsS0FFQS9DLGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxNQUFBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLG1CQUdBQSxNQUFBLE1BQUFuckIsSUFBQSxVQU9BdXVFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXg4RixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTY1RSxVQUNBMGhCLGVBQUEsd0ZBR0FVLEVBQ0ExdEIsRUFBQTRyQixlQUVBbkcsY0FBQSxrQkFBQWgwRixJQUFBLFFBQ0EwMEYsUUFBQSxTQUNBMzFGLFVBQ0F3dkUsRUFBQWdzQixXQUNBaHNCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQix3QkFJQWhHLGNBQUEsWUFBQWgwRixJQUFBLFFBQ0EwMEYsUUFBQSxTQUNBMzFGLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBeUNwdkUsTUFBQSx1QkFDekNvakQsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHdCQUtBeDhGLFVBQUEsT0FDQTJ0QixNQUFBLFdBQUEwckUsY0FBQSxFQUFBNzJGLElBQUEsTUFBQW0zRixZQUFBLEVBQ0FwNEYsV0FDV3ZCLFVBQUEsY0FBQTJ0QixNQUFBLElBQUFuckIsSUFBQSxRQU1YZzBGLGNBQUEsOEJBQ0FZLFVBQUEsSUFHQXAzRixVQUFBLFdBQ0EydEIsTUFBQSxJQUFBK3pFLEVBQUEsU0FBQTN3QixFQUFBNHFCLFNBQUEsVUFBQXJDLGFBQUEsRUFDQTkyRixJQUFBLFFBQWlCbTNGLFlBQUEsRUFDakJ0ZCxTQUFBZ2pCLEVBQ0E5OUYsV0FFQW9zQixNQUFBb2pELEVBQUE0cUIsU0FBQSxVQUFBckMsYUFBQSxFQUNBLzNGLFVBQUF3dkUsRUFBQWdzQixZQUNBM0YsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjJGLGNBQUEsRUFDQU0sWUFBQSxFQUNBdGQsU0FBQWdqQixFQUNBakksVUFBQSxFQUNBNzFGLFVBQ0FrOUYsRUFDQTF0QixFQUFBNHJCLGNBQ0E1ckIsRUFBQXlyQix1QkFHQXpyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIseUNDMUtBdGhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzbEIsa0JBQUEsRUFDQVEsUUFBQSx5QkFDQXhhLFVBQ0FvaEIsUUFBQSwrS0FJQWw4RixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLE1BR0F4QyxVQUFBLFlBQ0EydEIsTUFBQSxXQUFBbnJCLElBQUEsSUFBQW0zRixZQUFBLHFCQ2hCQXorRixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUNBNHdCLEdBQ0FoMEUsTUFBQSxtQkFBQTJyRSxhQUFBLEVBQUE5MkYsSUFBQSxJQUF5RHUwRixnQkFBQSxFQUN6RHgxRixXQUVBdkIsVUFBQSxZQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLElBQUFtM0YsWUFBQSxFQUNBbEMsUUFDQVYsZ0JBQUEsRUFBQTRDLFlBQUEsRUFDQXA0RixXQUVBb3NCLE1BQUEsV0FBQTJyRSxhQUFBLEVBQ0EvM0YsV0FFQXZCLFVBQUEsV0FDQTJ0QixNQUFBLFdBR0FBLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0FqQixVQUNBd3ZFLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixzQkFLQXByQixFQUFBOHJCLGdCQUNBOXJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQW1yQixpQkFDQW5yQixFQUFBeXJCLHNCQUVBeDhGLFVBQUEsU0FBQTJ0QixNQUFBLGtCQUdBM3RCLFVBQUEsT0FBQTJ0QixNQUFBLG1CQVFBLE9BQ0Ewb0Usa0JBQUEsRUFDQWEsUUFBQSxZQUNBMzFGLFVBQ0F3dkUsRUFBQXlyQixzQkFFQXg4RixVQUFBLGNBQUEydEIsTUFBQSxvQkFHQTN0QixVQUFBLGlCQUFBMnRCLE1BQUEscUJBR0EzdEIsVUFBQSxnQkFDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBMDBGLFFBQUEsTUFHQWwzRixVQUFBLGtCQUNBMnRCLE1BQUEsbUNBR0FBLE1BQUEsb0JBQ0FrcEUsUUFBQSxVQUNBeGEsU0FBQSxtQkFHQTF1RCxNQUFBLElBQUFuckIsSUFBQSxPQUlBMDBGLFFBQUEsSUFDQTMxRixXQUVBdkIsVUFBQSxVQUNBMnRCLE1BQUEsUUFHQUEsTUFBQSxLQUFBb3BFLGdCQUFBLEVBQUE0QyxZQUFBLEVBQ0F2QyxVQUFBLEVBQ0E3MUYsVUFDQXd2RSxFQUFBbXJCLGlCQUFBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQThyQixxQkFNQTc4RixVQUFBLGVBQUEydEIsTUF6RkEsMEJBMEZBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLElBQWlCbnJCLElBQUEsSUFDakIwMEYsUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQXlyQixxQkFDQW1GLHNCQ2xHQXptRyxFQUFBRCxRQWdCQSxTQUFBODFFLEdBTUEsSUF1Q0E2d0IsRUFBQSwyRkFnQkFDLEVBQUEseUdBY0FDLEdBQ0E5aEcsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQWkwRSxFQUFBLHVCQUNBeEssVUFBQSxHQU9BMkssR0FDQS9oRyxVQUFBLFNBQ0EydEIsTUFBQSw4ZkFFQWkwRSxFQUFBLGdCQUVBeEssVUFBQSxHQVFBNEssR0FDQWhpRyxVQUFBLFNBQ0EydEIsTUFBQSxLQUFBazBFLEVBQUEsTUFBQXIvRixJQUFBLElBQ0EwMEYsUUFBQSxLQWtCQStLLEdBQ0FqaUcsVUFBQSxTQUNBMnRCLE1BQUEsSUFDQXBzQixXQVpBb3NCLE1BQUFrMEUsRUFDQXpLLFVBQUEsSUFZQTUwRixJQUFBLFdBdUZBMC9GLEVBQUFueEIsRUFBQXNyQixRQUNBLFNBQ0EsVUFFQTk2RixVQUFBLFFBQ0E2MUYsVUFBQSxLQUlBLE9BQ0FQLFFBQUE5bEIsRUFBQTZxQixvQkFDQXZmLFVBdk5Bb2hCLFFBQ0EsNm1CQVFBQyxTQUNBLDJLQUdBSSxRQUNBLG1CQTBNQXY4RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQTBGLEdBdEVBbGlHLFVBQUEsU0FDQTJ0QixNQUFBLGlDQUNBeXBFLFVBQUEsSUFzRUE2SyxHQS9GQWppRyxVQUFBLFNBQ0EydEIsTUFBQSxRQUNBbnJCLElBQUEsVUFDQTQwRixVQUFBLElBU0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsSUFDQW5yQixJQUFBLFlBb0JBeEMsVUFBQSxTQUNBMnRCLE1BQUEsUUFDQW5yQixJQUFBLFFBK0RBdS9GLEVBQ0FELEVBQ0FFLEdBeERBaGlHLFVBQUEsT0FDQTJ0QixNQUFBLE1BQ0FuckIsSUFBQSxJQUNBNDBGLFVBQUEsSUFTQXAzRixVQUFBLE9BQ0EydEIsTUFBQSxVQUNBbnJCLElBQUEsSUFDQTQwRixVQUFBLElBU0FwM0YsVUFBQSxVQUNBMnRCLE1BQUEsNkNDM05BenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0Fta0IsU0FBQSxxQkFDQTN6RixXQUdBdkIsVUFBQSxVQUNBcTNGLFdBQ1cxcEUsTUFBQSxVQUFnQm5yQixJQUFBLE1BQ2hCbXJCLE1BQUEsdUJBS1hBLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FnMkYsWUFBQSxNQUNBcEIsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDJCQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLHNCQUlBM3RCLFVBQUEsV0FDQXEzRixXQUNXMXBFLE1BQUEsY0FDQUEsTUFBQSxRQUNYeXBFLFVBQUEsTUFNQXAzRixVQUFBLFFBQ0EydEIsTUFBQSxTQUFBbnJCLElBQUEsTUFJQXhDLFVBQUEsT0FDQXEzRixXQUVBMXBFLE1BQUEsWUFBQW5yQixJQUFBLFlBR0FtckIsTUFBQSxVQUdBQSxNQUFBLGFBQTBCbnJCLElBQUEsSUFDMUI0MEYsVUFBQSxNQU1BenBFLE1BQUEsY0FBMkJuckIsSUFBQSxNQUkzQm1yQixNQUFBLCtCQUNBMnJFLGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUNBSyxXQUFBLEVBQ0F0QyxVQUFBLElBR0FwM0YsVUFBQSxPQUNBMnRCLE1BQUEsU0FBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLElBR0EzNUYsVUFBQSxTQUNBMnRCLE1BQUEsU0FBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLElBR0F2QyxVQUFBLEtBR0F6cEUsTUFBQSxlQUNBMnJFLGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLElBR0EzNUYsVUFBQSxPQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLElBQ0E2MkYsY0FBQSx1QkNwR0FuK0YsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQSt1QixHQUNBOS9GLFVBQUEsUUFDQTJ0QixNQUFBLFNBQWtCbnJCLElBQUEsSUFDbEI2NUUsU0FBQSxxQ0FHQW9pQixHQUNBeitGLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsT0FBQW5yQixJQUFBLFFBR0FtckIsTUFBQSxPQUFBbnJCLElBQUEsUUFHQW1yQixNQUFBLEtBQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsUUFHQXZwRSxNQUFBLEtBQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsUUFHQXZwRSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsS0FHQW55RSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsS0FHQW55RSxNQUFBLElBQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsTUFDQTMxRixVQUFBd3ZFLEVBQUFrckIsaUJBQUE2RCxLQUdBbnlFLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxNQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELE1BSUFBLEVBQUF2K0YsVUFDQXd2RSxFQUFBNHJCLGNBQUE4QixHQWVBLE9BQ0FwaUIsVUFaQW9oQixRQUFBLDRUQUdBQyxTQUVBLCtQQVFBbjhGLFVBQ0FrOUYsRUFDQTF0QixFQUFBc3JCLFFBQ0EsVUFDQSxRQUVBN0QsWUFBQSxhQUdBem5CLEVBQUFzckIsUUFDQSxNQUNBLEtBRUE3RCxZQUFBLGFBR0F6bkIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHNCQUVBeDhGLFVBQUEsUUFDQXcyRixjQUFBLGtCQUFBaDBGLElBQUEsSUFBaURtM0YsWUFBQSxFQUNqRHA0RixXQUVBaTFGLGNBQUEsc0JBRUF6bEIsRUFBQWlzQix3QkFHQWpzQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUFBMnRCLE1BQUEsZUFHQUEsTUFBQSx3QkMvRkF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXN1QixFQUNBLDI2QkFXQUssR0FDQTN1QixFQUFBd3JCLG9CQUNBeHJCLEVBQUFzckIsUUFBQSxLQUFvQixNQUFVakYsVUFBQSxJQUM5QnJtQixFQUFBc3JCLFFBQUEsZUFBa0NqRixVQUFBLE1BRWxDK0ssR0FDQW5pRyxVQUFBLE9BQ0FxM0YsV0FDTzFwRSxNQUFBLE9BQVVuckIsSUFBQSxPQUNWbXJCLE1BQUEsU0FBQW5yQixJQUFBLFVBR1BpOEYsR0FDQXorRixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFdBQWdCb3NCLE1BQUEsUUFFaEJneUUsR0FDQTMvRixVQUFBLFNBQUEydEIsTUFBQSxXQUVBeTBFLEdBQ0F6MEUsTUFBQW9qRCxFQUFBNHFCLFNBQUEsd0JBQUFyQyxhQUFBLEVBQ0EvM0YsVUFDQXd2RSxFQUFBZ3NCLGFBR0FzRixHQUNBcmlHLFVBQUEsV0FDQXcyRixjQUFBLDRDQUFBaDBGLElBQUEsT0FDQTY1RSxTQUFBLHFEQUNBOTZFLFVBQ0F3dkUsRUFBQWdzQixZQUVBLzhGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjVFLFNBQUFnakIsRUFDQTk5RixVQUFBazlGLEVBQUFrQixFQUFBd0MsR0FBQS91RixPQUFBc3NGLElBRUF5QyxHQUNBL3VGLE9BQUFzc0YsSUFFQSxPQUNBeEssU0FBQSwrREFDQW1CLGtCQUFBLEVBQ0FoYSxTQUFBZ2pCLEVBQ0FuSSxRQUFBLDJCQUNBMzFGLFVBQ0FrOUYsRUFBQWtCLEVBQ0E1dUIsRUFBQTJyQixZQUNBMEYsRUFDQUMsRUFDQUYsR0FDQS91RixPQUFBc3NGLG9CQ2pFQXhrRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsU0FDQTN6RixXQUVBdkIsVUFBQSxPQUNBbzNGLFVBQUEsR0FDQUMsV0FDVzFwRSxNQUFBLG1DQUNBQSxNQUFBLGdDQUNBQSxNQUFBLGtDQUlYM3RCLFVBQUEsVUFDQXEzRixXQUNXMXBFLE1BQUEsVUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxRQUFhbnJCLElBQUEsTUFDYm1yQixNQUFBLFNBQWNuckIsSUFBQSxNQUNkbXJCLE1BQUEsVUFBY25yQixJQUFBLE1BQ2RtckIsTUFBQSxTQUFjbnJCLElBQUEsTUFDZG1yQixNQUFBLFFBQWFuckIsSUFBQSxhQUl4QnhDLFVBQUEsV0FDQTJ0QixNQUFBLE9BQUFuckIsSUFBQSxNQUdBeEMsVUFBQSxXQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLE1BR0F4QyxVQUFBLFdBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsdUJDbENBdEgsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXV4QixHQUNBMzBFLE1BQUEsZ0JBQ0EwdUQsVUFDQXJnRixLQUNBLDRrQkFTQXVGLFVBQ0F3dkUsRUFBQW9yQixrQkFDQXByQixFQUFBbXJCLG1CQUlBLE9BQ0FoSCxTQUFBLFNBQ0FtQixrQkFBQSxFQUNBbUMsWUFBQSxNQUNBajNGLFVBQ0F3dkUsRUFBQXNyQixRQUFBLHFCQUFzQyx5QkFDdEN0ckIsRUFBQXNyQixRQUFBLE1BQXNCLE9BRXRCcjhGLFVBQUEsZUFDQTJ0QixNQUFBLE1BQWtCbnJCLElBQUEsS0FDbEJqQixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEsTUFDQTB1RCxVQUNBcmdGLEtBQ0EsaW1CQVVBeTdGLFFBQ0FWLGdCQUFBLEVBQ0ExYSxTQUFBLFdBQ0E5NkUsVUFBQStnRyxHQUNBbEwsVUFBQSxPQU1BcDNGLFVBQUEsb0JBQ0EydEIsTUFBQSxPQUFvQm5yQixJQUFBLEtBQ3BCakIsVUFBQStnRyxzQkMxREFwbkcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLGVBQ0E3WSxVQUNBb2hCLFFBQ0EsMkxBR0FsOEYsVUFDQXd2RSxFQUFBc3JCLFFBQUEsSUFBcUIsS0FBU2pGLFVBQUEsS0FFOUJwM0YsVUFBQSxPQUNBMnRCLE1BQUEsdUNBSUEzdEIsVUFBQSxTQUNBMnRCLE1BQUEsZ25DQUlBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLCtGQUVBb2pELEVBQUEra0IsUUFBQS9rQixFQUFBMnJCLGFBQXNDL3VFLE1BQUEsbUNDeEJ0Q3p5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsVUFDQW1CLGtCQUFBLEVBQ0FoYSxTQUFBLHlEQUNBOTZFLFVBQ0F3dkUsRUFBQTByQixrQkFDQTFyQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTJyQixhQUVBbEcsY0FBQSxxRUFDQWlCLFFBQ0FqMUYsSUFBQSxVQUNBZzJGLFlBQUEsVUFJQXRCLFFBQUEsc0JDbEJBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzckIsRUFBQXRyQixFQUFBc3JCLFFBQ0EsbUJBRUFqRixVQUFBLEtBUUEsT0FDQWxDLFNBQUEsYUFDQW1CLGtCQUFBLEVBQ0FhLFFBQUEsT0FDQTdhLFVBQ0FvaEIsUUFDQSx3RkFFQUMsU0FDQSxtZkFVQW44RixXQUVBdkIsVUFBQSxXQUFBMnRCLE1BQUEsNkJBR0EzdEIsVUFBQSxXQUNBMnRCLE1BNUJBLG1EQTRCQW5yQixJQUFBLFdBQ0FqQixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXlDcHZFLE1BQUEsc0RBQ3pDMHVFLEtBSUFyOEYsVUFBQSxTQUFBMnRCLE1BQUEsVUFDQXlwRSxVQUFBLEdBRUFpRixvQkMvQ0FuaEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBb0JBLE9BQ0FzTCxTQUFBLFdBQ0E5NkUsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBLFlBQUFuckIsSUFBQSxNQUFBbTNGLFlBQUEsRUFDQXZDLFVBQUEsS0FHQXAzRixVQUFBLFdBQ0EydEIsTUFBQSxzQ0FBQW5yQixJQUFBLE1BQUFtM0YsWUFBQSxFQUNBekMsUUFBQSxhQUNBRSxVQUFBLEtBR0FwM0YsVUFBQSxXQUNBMnRCLE1BQUEsV0FBQW5yQixJQUFBLE1BQUFtM0YsWUFBQSxJQWxDQTM1RixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsTUFHQXhDLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxNQUdBeEMsVUFBQSxTQUNBMnRCLE1BQUEsZ0JBQUFuckIsSUFBQSxNQUNBNDBGLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxhQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEdBeUJBcm1CLEVBQUEwckIsb0NDMUNBdmhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUF1c0IsR0FDQXQ5RixVQUFBLFNBQ0FxM0YsVUFDQXRtQixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBNEN4dUUsTUFBQSxtQkFFNUNBLE1BQUEsYUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsb0JBR0F0dUUsTUFBQSxVQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLE9BS0FtRyxHQUNBcjlGLFVBQUEsU0FDQXEzRixXQUNPMXBFLE1BQUEsbURBQ0FBLE1BQUFvakQsRUFBQStxQixjQUVQMUUsVUFBQSxHQUdBeUgsR0FDQTcrRixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTY1RSxVQUFlMGhCLGVBQUEsZ0RBQ2Z4OEYsV0FFQW9zQixNQUFBLE9BQUF5cEUsVUFBQSxJQUdBWixjQUFBLFVBQUFoMEYsSUFBQSxJQUNBNjVFLFVBQW1CMGhCLGVBQUEsV0FDbkJ4OEYsVUFDQXd2RSxFQUFBK2tCLFFBQUF3SCxHQUFpQ3Q5RixVQUFBLGlCQUVqQ0EsVUFBQSxjQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxTQUlBb0csRUFDQXZzQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsdUJBSUErRixHQUNBdmlHLFVBQUEsV0FDQTJ0QixNQUFBLG9CQUdBNjBFLEdBQ0F4aUcsVUFBQSxlQUNBMnRCLE1BQUEscUJBR0E4MEUsR0FDQXppRyxVQUFBLFNBQ0EydEIsTUFBQSxnQ0FHQSswRSxHQUNBMWlHLFVBQUEsU0FDQTJ0QixNQUFBLElBQ0FuckIsSUFBQSxJQUNBakIsVUFDQTg3RixFQUNBa0YsSUFJQUksR0FDQTNpRyxVQUFBLFFBQ0EydEIsTUFBQSw0QkFDQW5yQixJQUFBLFFBQ0E4MkYsYUFBQSxFQUNBSyxZQUFBLEdBcUJBLE9BQ0F0ZCxTQUFBLEdBQ0E5NkUsV0FuQkF2QixVQUFBLFFBQ0EydEIsTUFBQSxTQUNBbnJCLElBQUEsS0FDQTQwRixVQUFBLEdBQ0E3MUYsVUFDQWdoRyxFQUNBQyxFQUNBQyxFQUNBRSxFQUNBRCxFQUNBM3hCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQWEsRUFDQUMsSUFRQWlGLEVBQ0FDLEVBQ0FDLEVBQ0FFLEVBQ0FELEVBQ0EzeEIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBYSxFQUNBQyxFQUNBdUIsR0FFQWx4RSxNQUFBb2pELEVBQUE0cUIsU0FBQSxLQUNBdGYsU0FBQSxzQkN0SEFuaEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBRUEsT0FDQW1rQixTQUFBLE9BQ0FtQixrQkFBQSxFQUNBbUMsWUFBQSxNQUNBajNGLFdBRUF2QixVQUFBLGVBQ0EydEIsTUFBQSxVQUFrQm5yQixJQUFBLEtBQWdCMDBGLFFBQUEsSUFDbEMzMUYsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLGVBQ0E4cEUsUUFDQVYsZ0JBQUEsRUFBQUssVUFBQSxFQUNBNzFGLFVBQ0F3dkUsRUFBQW9yQix3QkFPQW44RixVQUFBLG9CQUNBMnRCLE1BQUEsS0FBa0JuckIsSUFBQSxLQUFXMDBGLFFBQUEsSUFDN0I3YSxTQXpCQSxvRUNEQW5oRixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBbXRCLEVBQUFudEIsRUFBQXNyQixRQUFBLGVBc0JBLE9BQ0FuRixRQUFBLEtBQ0EzMUYsVUFDQTI4RixHQXRCQWwrRixVQUFBLFlBQ0EydEIsTUFBQSxzREFTQUEsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQ0EyOEYsR0FQQWwrRixVQUFBLE9BQ0EydEIsTUFBQSxVQVNBb2pELEVBQUFtckIsaUJBQUFuckIsRUFBQW9yQixzQ0NuQkFqaEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQTZ4QixFQUFBLG1DQUVBQyxFQUNBLGdMQUdBL0MsR0FDQTkvRixVQUFBLFFBQ0EydEIsTUFBQSxPQUFnQm5yQixJQUFBLElBQ2hCcTBGLFFBQUErTCxFQUNBdm1CLFNBQUF3bUIsR0FFQXBFLEdBQ0F6K0YsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsR0FDQXpJLFdBRUExcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFHQW1yQixNQUFBLElBQUFuckIsSUFBQSxPQUlBNi9GLEdBQ0FyaUcsVUFBQSxXQUNBdzJGLGNBQUEsb0JBQUFoMEYsSUFBQSxPQUNBakIsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUNBcHZFLE1BQUFpMUUsRUFDQW5KLFlBQUEsTUFJQTJJLEVBQUFyeEIsRUFBQStrQixRQUFBdU0sR0FDQXJpRyxVQUFBLFFBQ0F3MkYsY0FBQSwwQ0FBQWgwRixJQUFBLGVBRUFzZ0csR0FDQXJFLEVBQ0ExdEIsRUFBQTByQixrQkFDQTJGLEVBQ0FDLEdBRUFyaUcsVUFBQSxTQUNBMnRCLE1BQUEsV0FDQXBzQixVQUFBazlGLEdBQTBCOXdFLE1BN0MxQix1RkE4Q0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBaTFFLEVBQUEsSUFDQXhMLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSw0RUFDQXlwRSxVQUFBLElBR0FwM0YsVUFBQSxXQUNBMnRCLE1BQUEsbUNBR0FBLE1BQUEsT0FHQUEsTUFBQSxJQUFBb2pELEVBQUFpckIsZUFBQSxRQUNBejZGLFVBQ0F3dkUsRUFBQTByQixtQkFFQXo4RixVQUFBLFNBQ0FrM0YsUUFBQSxNQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEdBQ0F6SSxXQUVBMXBFLE1BQUEsSUFBQW5yQixJQUFBLFlBR0FtckIsTUFBQSxRQUFBbnJCLElBQUEsZ0JBS0E0MEYsVUFBQSxJQUtBLE9BRkEwSSxFQUFBditGLFNBQUF1aEcsR0FHQWpNLFFBQUErTCxFQUNBdm1CLFNBQUF3bUIsRUFDQXRoRyxTQUFBdWhHLG1CQzdGQTVuRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBc3JCLEdBQ0FoRixVQUNBdG1CLEVBQUFzckIsUUFBQSxVQUNBdHJCLEVBQUFzckIsUUFDQSxLQUNBLE1BRUE5NkYsVUFBQSxZQU1Bd2hHLEdBQ0EvaUcsVUFBQSxPQUNBMnRCLE1BQUEsa0JBQ0F5cEUsVUFBQSxHQUdBa0osR0FDQTN5RSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBMDBGLFFBQUEsSUFDQTMxRixXQUNPdkIsVUFBQSxPQUFBMnRCLE1BQUEsMENBQ1AwdUUsSUFTQSxPQUNBaGdCLFNBQ0EsOEhBRUE5NkUsV0FLQWkxRixjQUFBLHFCQUFBaDBGLElBQUEsV0FDQTY1RSxTQUFBLHlEQUNBOTZFLFVBQUErK0YsRUFBQWpFLEdBQ0FuRixRQUFBLGFBR0F2cEUsTUFBQSxTQUFBbnJCLElBQUEsSUFDQTY1RSxTQUFBLHFCQUNBOTZFLFVBQUErK0YsRUFBQWpFLEdBQ0FuRixRQUFBLGFBR0F2cEUsTUFBQSxPQUFBbnJCLElBQUEsSUFDQTY1RSxTQUFBLGFBQ0E5NkUsVUFBQXdoRyxFQUFBekMsR0EzQkEzeUUsTUFBQSxJQUFhbnJCLElBQUEsSUFDYmpCLFNBQUErK0YsRUFBQS8rRixVQTBCQTg2RixLQUdBN0YsY0FBQSxzQkFBQWgwRixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUE0ckIsY0FBQU4sS0FHQTF1RSxNQUFBLE9BQUFuckIsSUFBQSxJQUNBNjVFLFNBQUEsT0FDQTk2RSxVQUFBODZGLElBTUF0ckIsRUFBQW9yQixrQkFDQXByQixFQUFBNHJCLGNBQ0FvRyxFQUNBaHlCLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXFDcHZFLE1BQUEsbUJBQ3JDMHVFLEdBRU8xdUUsTUFBQSxVQUVQdXBFLFFBQUEscUJDaEZBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFpeUIsRUFBQSxxRkFDQUMsR0FDQXhGLFFBQ0EsOE9BR0FLLFFBQ0Esa0JBRUFvRixHQUNBbGpHLFVBQUEsU0FDQTJ0QixNQUFBLGNBRUF3MUUsR0FDQXgxRSxNQUFBLEtBQUFuckIsSUFBQSxLQUVBazlGLEdBQ0EzdUIsRUFBQXNyQixRQUNBLElBQ0EsS0FFQTk2RixVQUFBMmhHLEtBR0FueUIsRUFBQXNyQixRQUNBLFlBQ0EsV0FFQTk2RixVQUFBMmhHLEdBQ0E5TCxVQUFBLEtBR0FybUIsRUFBQXNyQixRQUFBLG9CQUVBeUQsR0FDQTkvRixVQUFBLFFBQ0EydEIsTUFBQSxPQUFnQm5yQixJQUFBLElBQ2hCNjVFLFNBQUE0bUIsR0FFQXhFLEdBQ0F6K0YsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsR0FDQXpJLFdBQ08xcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxlQUFBbnJCLElBQUEsUUFDQW1yQixNQUFBLGVBQUFuckIsSUFBQSxRQUNBbXJCLE1BQUEsYUFBa0JuckIsSUFBQSxNQUNsQm1yQixNQUFBLGFBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsYUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxhQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLGFBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsZUFBQW5yQixJQUFBLFFBSVBtckIsTUFBQSxrRUFHQUEsTUFBQSxhQUFBbnJCLElBQUEsY0FJQWs4RixHQUNBMStGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUFBaTNGLFlBQUEsRUFDQXBkLFNBQUE0bUIsR0FHQUcsR0FDQTNFLEVBQ0EwRSxHQUVBbmpHLFVBQUEsUUFDQXcyRixjQUFBLGVBQUFoMEYsSUFBQSxNQUNBMDBGLFFBQUEsSUFDQTMxRixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXVDcHZFLE1BQUEsc0NBRXZDQSxNQUFBLFFBQ0Fwc0IsV0FDQW9zQixNQUFBLElBQUFvakQsRUFBQTRxQixTQUFBLE9BQUE1cUIsRUFBQTRxQixhQUdBdm9GLE9BQUFzc0YsS0FHQTEvRixVQUFBLFdBQ0F3MkYsY0FBQSxNQUFBaDBGLElBQUEsTUFDQWpCLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBdUNwdkUsTUFBQXExRSxJQUN2Q3RFLEdBQ0F0ckYsT0FBQXNzRixLQUlBL3hFLE1BQUFvakQsRUFBQTRxQixTQUFBLE9BR0EzN0YsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQTZxQixvQkFBQSxjQUNBeEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLFdBQ0Fwc0IsVUFBQWs5RixHQUEwQjl3RSxNQUFBcTFFLElBQzFCNUwsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDRFQUNBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLG1DQUdBM3RCLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjVFLFNBQUE0bUIsSUFHQXQxRSxNQUFBLElBQUFvakQsRUFBQWlyQixlQUFBLGVBQ0EzZixTQUFBLFNBQ0E5NkUsVUFDQTRoRyxHQUVBbmpHLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixpQkFBQTZELEdBQ0E1SSxRQUFBLEtBQ0FHLFdBQ2ExcEUsTUFBQSxJQUFBbnJCLElBQUEsWUFDQW1yQixNQUFBLE1BQVduckIsSUFBQSxZQUNYbXJCLE1BQUEsUUFBQW5yQixJQUFBLGNBQ0FtckIsTUFBQSxNQUFBbnJCLElBQUEsWUFDQW1yQixNQUFBLFFBQUFuckIsSUFBQSxnQkFHYjRRLE9BQUFzc0YsR0FDQXRJLFVBQUEsSUFFQWhrRixPQUFBc3NGLEdBRUFJLEVBQUF2K0YsU0FBQTZoRyxFQUNBMUUsRUFBQW45RixTQUFBNmhHLEVBRUEsSUFJQUMsSUFFQTExRSxNQUFBLFNBQ0E4cEUsUUFDQWoxRixJQUFBLElBQUFqQixTQUFBNmhHLEtBSUFwakcsVUFBQSxPQUNBMnRCLE1BQUEsZ0ZBQ0E4cEUsUUFDQWoxRixJQUFBLElBQUFqQixTQUFBNmhHLEtBS0EsT0FDQWxPLFNBQUEsdUNBQ0E3WSxTQUFBNG1CLEVBQ0EvTCxRQUFBLE9BQ0EzMUYsU0FBQW0rRixFQUFBdHNGLE9BQUFpd0YsR0FBQWp3RixPQUFBZ3dGLG9CQzdLQWxvRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeW5CLFlBQUEsTUFDQWozRixVQUNBd3ZFLEVBQUFzckIsUUFBQSxhQUVBMXVFLE1BQUEsV0FBQW5yQixJQUFBLFVBQ0FnMkYsWUFBQSxPQUNBYSxjQUFBLEVBQ0FNLFlBQUEscUJDVEF6K0YsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFVBQ0FxaEIsU0FDQSx3QkFDQUQsUUFDQSwrSUFHQWw4RixXQUVBdkIsVUFBQSxPQUFBMnRCLE1BQUEsWUFDQXlwRSxVQUFBLElBRUFybUIsRUFBQXNyQixRQUFBLFVBRUFyOEYsVUFBQSxTQUNBMnRCLE1BQUEsd0RBQ0F5cEUsVUFBQSxHQUVBcm1CLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixtQkFFQXh1RSxNQUFBLDhCQUdBQSxNQUFBLE9BR0FBLE1BQUEsT0FHQUEsTUFBQSxNQUdBQSxNQUFBLDJFQUNBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLHNCQUNBeXBFLFVBQUEscUJDeENBbDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUF1eUIsRUFBQSx1QkFDQUMsRUFBQSxJQUFBRCxFQUFBLElBQUFBLEVBQUEsSUFBQUEsRUFBQSxJQUNBRSxHQUNBL0YsUUFDQSwySUFFQUssUUFDQSxjQUdBekIsRUFBQXRyQixFQUFBc3JCLFFBQUEsU0FDQWtDLEdBQ0F2K0YsVUFBQSxTQUNBMnRCLE1BQUEsd0RBQ0F5cEUsVUFBQSxHQUVBcU0sR0FDQTkxRSxNQUFBLFVBQUEyMUUsRUFBQSxTQUVBSSxHQUNBLzFFLE1BQUE0MUUsRUFBQSxNQUFBL2dHLElBQUEsTUFDQTgyRixhQUFBLEVBQ0FsQyxVQUFBLEVBQ0E3MUYsV0FFQW9zQixNQUFBNDFFLEVBQUFuTSxVQUFBLElBR0F6cEUsTUFBQSxNQUFBbnJCLElBQUEsTUFBQXUwRixnQkFBQSxFQUNBMkMsV0FBQSxFQUNBdEMsVUFBQSxLQUtBdU0sR0FDQWgyRSxNQUFBLElBQWFuckIsSUFBQSxJQUNiNDBGLFVBQUEsR0FHQXdNLEdBQ0FqMkUsTUFBQSw0QkFDQXlwRSxVQUFBLEdBRUF5TSxHQUNBbDJFLE1BQUEscUJBQ0F5cEUsVUFBQSxHQUVBME0sR0FDQW4yRSxNQUFBLElBQUFvakQsRUFBQTZxQixvQkFDQXhFLFVBQUEsRUFDQWtDLGFBQUEsRUFDQS8zRixXQUVBb3NCLE1BQUEsSUFBQW9qRCxFQUFBNnFCLG9CQUNBeEUsVUFBQSxJQUdBenBFLE1BQUEsSUFBaUJuckIsSUFBQSxJQUNqQjQwRixVQUFBLEtBTUEyTSxHQUNBdk4sY0FBQSwwQkFBQWgwRixJQUFBLE1BQ0E2NUUsU0FBQW1uQixHQUVBTyxFQUFBeGlHLFVBQ0E4NkYsRUFDQW9ILEVBQ0ExeUIsRUFBQStrQixRQUFBL2tCLEVBQUFtckIsa0JBQXlDbDhGLFVBQUEsS0FDekMrakcsRUFDQUwsRUFDQTN5QixFQUFBb3JCLGtCQUNBb0MsRUFDQW9GLEVBQ0FDLEVBQUFDLEVBQ0FDLEdBR0EsSUFBQUUsR0FDQTNILEVBQ0FvSCxFQUNBTSxFQUNBTCxFQUNBM3lCLEVBQUFvckIsa0JBQ0FvQyxFQUNBb0YsRUFDQUMsRUFBQUMsRUFDQUMsR0FFQUosRUFBQW5pRyxTQUFBLEdBQUFBLFNBQUF5aUcsRUFDQUwsRUFBQXBpRyxTQUFBeWlHLEVBQ0FGLEVBQUF2aUcsU0FBQSxHQUFBQSxTQUFBeWlHLEVBRUEsSUFBQXRGLEdBQ0ExK0YsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixTQUFBeWlHLEdBRUEsT0FDQTlPLFNBQUEsT0FDQTdZLFNBQUFtbkIsRUFDQXRNLFFBQUEsNENBQ0EzMUYsV0FFQXZCLFVBQUEsV0FDQTJ0QixNQUFBLElBQUEyMUUsRUFBQSxVQUFBOWdHLElBQUEsS0FDQTgyRixhQUFBLEVBQ0FwQyxRQUFBLHlCQUNBMzFGLFVBQ0FtOUYsRUFDQTN0QixFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUF5Q3B2RSxNQUFBMjFFLEtBRXpDN0wsUUFDQWoxRixJQUFBLFFBQ0E2NUUsU0FBQW1uQixFQUNBamlHLFNBQUF5aUcsSUFHQTNILEdBRUExdUUsTUFBQSxLQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEVBQ0F1QyxZQUFBLEVBQ0FMLGFBQUEsRUFDQXpDLFFBQUEsSUFBQTlsQixFQUFBNHFCLFNBQ0F0ZixTQUNBLDBLQUdBOTZFLFVBQUFtOUYsSUFFQUgsRUFDQXh0QixFQUFBb3JCLGtCQUNBMkgsRUFDQUYsRUFBQUMsRUFDQUYsR0FDT2gyRSxNQUFBLHlCQzdJUHp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsY0FDQW1CLGtCQUFBLEVBQ0FRLFFBQUEsa0JBRUF4YSxVQUNBcWhCLFNBQUEsb3FIQUVBbjhGLFdBR0Fvc0IsTUFBQSxLQUNBbnJCLElBQUEsT0FBQWszRixXQUFBLEVBQUF4QyxRQUFBLElBQ0FFLFVBQUEsS0FLQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxvQkFDQW5yQixJQUFBLFFBQUFtM0YsWUFBQSxFQUNBdkMsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDhCQUNBeXBFLFVBQUEsR0FFQXJtQixFQUFBa3JCLGlCQUNBbHJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUFvakQsRUFBQThxQixVQUFBLE9BQ0F6RSxVQUFBLEdBR0FybUIsRUFBQXNyQixRQUFBLGNBRUFoRCxjQUFBLEVBQ0FNLFlBQUEsRUFDQXpDLFFBQUEseUJDMUNBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0F4dkUsV0FFQW9zQixNQUFBLG1CQUNBbnJCLElBQUEsaUJBQ0FtM0YsWUFBQSxFQUNBTCxhQUFBLEVBQ0FJLFdBQUEsRUFDQW40RixXQUVBb3NCLE1BQUEsc0JBQ0FuckIsSUFBQSx1QkFDQWszRixXQUFBLEVBQ0FKLGFBQUEsRUFDQXQ1RixVQUFBLFNBR0EydEIsTUFBQSxJQUNBbnJCLElBQUEsbUJBQ0FtM0YsWUFBQSxFQUNBTixjQUFBLEVBQ0FyNUYsVUFBQSxhQUdBcTJGLGtCQUFBLG1CQ3pCQW43RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxJQW1CQWt6QixHQUNBamtHLFVBQUEsV0FDQXcyRixjQUFBLE1BQ0FoMEYsSUFBQSxjQUNBbTNGLFlBQUEsRUFDQXA0RixXQVRBdkIsVUFBQSxRQUNBMnRCLE1BQUEsb0ZBV0EsT0FDQTB1RCxVQUNBeWhCLFFBQUEsYUFDQUwsUUFBQSx1R0FFQWw4RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFqQ0F4OEYsVUFBQSxTQUNBMnRCLE1BQUEsK0JBSUEzdEIsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxJQUFBbnJCLElBQUEsT0E0QkF5aEcsRUFDQWx6QixFQUFBNHJCLGdDQ3hDQXpoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0ErQ0EsT0FDQXNsQixrQkFBQSxFQUNBbkIsU0FBQSxhQUNBN1ksVUEzQ0F5aEIsUUFBQSxpQkFDQUwsUUFBQSx1dURBb0JBQyxTQUFBLGk5REF1QkF4RyxRQUFBLE9BQ0EzMUYsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBMkNsOEYsVUFBQSxTQUFBbzNGLFVBQUEsSUFDM0NybUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDbjhGLFVBQUEsU0FBQW8zRixVQUFBLEtBRTVDcDNGLFVBQUEsV0FDQXcyRixjQUFBLDhCQUNBVSxRQUFBLFdBQ0EzMUYsVUFBQXd2RSxFQUFBaXNCLHVCQXpEQWg5RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsU0EwREF1dUUsRUFBQXNyQixRQUFBLFNBQThCakYsVUFBQSxLQUU5QnAzRixVQUFBLFNBQ0EydEIsTUFBQSxrRkFDQXlwRSxVQUFBLHFCQ2pFQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBbXpCLEdBQ0F2MkUsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBcUNwdkUsTUFBQSxxQkFJckMsT0FDQXVuRSxTQUFBLE1BQ0E3WSxTQUNBLHdYQU1BNmEsUUFBQSxPQUNBMzFGLFdBR0F2QixVQUFBLFVBQ0EydEIsTUFBQSw2QkFHQTN0QixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsSUFDQWpCLFdBQW9Cb3NCLE1BQUEsU0FHcEIzdEIsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE9BRUF1dUUsRUFBQXNyQixRQUFBLG9CQUVBcjhGLFVBQUEsUUFDQXcyRixjQUFBLE9BQUFoMEYsSUFBQSxVQUFBbTNGLFlBQUEsRUFDQXA0RixVQUNBd3ZFLEVBQUFpc0Isc0JBQ0FrSCxLQUlBbGtHLFVBQUEsT0FDQTJ0QixNQUFBLE9BQUFuckIsSUFBQSxPQUNBNDBGLFVBQUEsS0FHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxvQkFDQXBzQixVQUFBd3ZFLEVBQUFrckIsbUJBRUFsckIsRUFBQXdyQixvQkFDQXhyQixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBNENqRixRQUFBLE9BQzVDbm1CLEVBQUE0ckIsZ0NDdERBemhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBQ0Esb1ZBS0FLLFFBQUEsYUFDQXFHLFdBQ0EsdTNCQXFCQUMsR0FDQXBrRyxVQUFBLFNBQ0FxM0YsV0FDTzFwRSxNQUFBLGdCQUNBQSxNQUFBLFFBR1AwMkUsR0FDQXJrRyxVQUFBLFVBQ0FxM0YsV0FDTzFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE1BRVAwMEYsUUFBQSxNQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixtQkFFQXFJLEdBQ0EzMkUsTUFBQSxJQUNBbnJCLElBQUEsSUFDQTY1RSxTQUFBZ2pCLEVBQ0E5OUYsVUFDQThpRyxFQUNBdHpCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQTRyQixnQkFHQTRILEdBQ0E1MkUsTUFBQSwyQ0FDQTByRSxjQUFBLEVBQ0E3MkYsSUFBQSxJQUNBdTBGLGdCQUFBLEVBQ0F4MUYsVUFDQThpRyxFQUNBQyxHQUVBdGtHLFVBQUEsVUFDQTJ0QixNQUFBLGdEQUNBeXBFLFVBQUEsS0FLQSxPQUNBbEMsU0FBQSxPQUNBbUIsa0JBQUEsRUFDQWhhLFNBQUFnakIsRUFDQTk5RixVQUNBd3ZFLEVBQUFzckIsUUFBQSwyQkFFQXI4RixVQUFBLE9BQ0EydEIsTUFBQSxnQkFDQW5yQixJQUFBLElBQ0E4MkYsYUFBQSxFQUNBLzNGLFdBRUF2QixVQUFBLGVBQ0EydEIsTUFBQSxtQkFJQW9qRCxFQUFBc3JCLFFBQUEsWUFDQXRyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQW9yQixrQkFDQXByQixFQUFBbXJCLGtCQUdBMUYsY0FDQSxxRkFFQWgwRixJQUFBLElBQ0FqQixVQUNBd3ZFLEVBQUFzckIsUUFBQSxZQUNBdHJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUFtckIsaUJBQ0FvSSxFQUNBQyxLQUlBL04sY0FBQSxRQUNBaDBGLElBQUEsSUFDQTgyRixhQUFBLEVBQ0EvM0YsV0FFQWkxRixjQUFBLFFBQ0FoMEYsSUFBQSxJQUNBakIsVUFBQWdqRyxJQUVBeHpCLEVBQUFzckIsUUFBQSxZQUNBdHJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQTRyQixpQkFNQTM4RixVQUFBLFdBQ0EydEIsTUFBQSxpQ0FDQTJyRSxhQUFBLEVBQ0EvM0YsV0FFQXZCLFVBQUEsUUFDQTJ0QixNQUFBLGdCQXBIQTN0QixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTYyRixjQUFBLEVBQ0FNLFlBQUEsR0FvSEF5SyxJQUdBcnpCLEVBQUE0ckIsY0FDQXlILG9CQ3JKQWxwRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBc3VCLEdBQ0E1QixRQUFBLGd1QkFTQUMsU0FBQSwrNFNBb0ZBSSxRQUFBLHliQU9BZSxHQUVBNytGLFVBQUEsT0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBNjVFLFVBQWUwaEIsZUFBQSw2SEFDZng4RixXQUVBb3NCLE1BQUEsT0FBQXlwRSxVQUFBLElBR0FaLGNBQUEsVUFBQWgwRixJQUFBLElBQ0E2NUUsVUFBbUIwaEIsZUFBQSxXQUNuQng4RixXQUVBdkIsVUFBQSxjQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxTQUlBbm1CLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQix1QkFJQXNDLEVBQUEvdEIsRUFBQTZxQixvQkFBQSxXQUNBNEksSUFFQXhrRyxVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTY1RSxTQUFBZ2pCLEVBQ0FqSSxVQUFBLEVBQ0E3MUYsVUFDQXd2RSxFQUFBNHJCLGNBQ0E1ckIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHdCQUtBLE9BQ0F0SCxTQUFBLE9BQ0FtQixrQkFBQSxFQUNBaGEsU0FBQWdqQixFQUNBbkksUUFBQSxvQkFDQTMxRixVQUNBd3ZFLEVBQUE0ckIsY0FDQTVyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQXNyQixRQUFBLFNBQ0F3QyxHQUVBNytGLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUdBajhGLFVBQUEsV0FDQXcyRixjQUFBLGVBQ0FoMEYsSUFBQSxJQUNBbTNGLFlBQUEsRUFDQXRkLFNBQUFnakIsRUFDQTk5RixXQUVBb3NCLE1BQUFteEUsRUFBQXhGLGFBQUEsRUFDQS8zRixVQUFBd3ZFLEVBQUFpc0IsdUJBQ0E1RixVQUFBLEdBRUFybUIsRUFBQTRyQixjQUNBNXJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXFDLEdBQ0F6ckYsT0FBQW94RixLQUdBeGtHLFVBQUEsV0FDQXcyRixjQUFBLEtBQ0FoMEYsSUFBQSxJQUNBbTNGLFlBQUEsRUFDQXRkLFNBQUFnakIsRUFDQTk5RixXQUVBb3NCLE1BQUFteEUsRUFBQS90QixFQUFBNHFCLFNBQUEsa0JBQUFyQyxhQUFBLEVBQ0EvM0YsVUFBQXd2RSxFQUFBaXNCLHVCQUNBNUYsVUFBQSxHQUVBcm1CLEVBQUE0ckIsY0FDQTVyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsc0JBQ0FwcEYsT0FBQW94RixLQUdBeGtHLFVBQUEsV0FDQTJ0QixNQUFBLG9DQUNBbnJCLElBQUEsSUFDQW0zRixZQUFBLEVBQ0F0ZCxTQUFBZ2pCLEVBQ0E5OUYsV0FFQW9zQixNQUFBbXhFLEVBQUF4RixhQUFBLEVBQ0EvM0YsVUFBQXd2RSxFQUFBaXNCLHVCQUNBNUYsVUFBQSxHQUVBcm1CLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQix3QkFJQXg4RixVQUFBLFdBQ0EydEIsTUFBQSx5REFBQW9qRCxFQUFBNHFCLFNBQUEsUUFDQW41RixJQUFBLElBQ0FtM0YsWUFBQSxFQUNBdGQsU0FBQWdqQixFQUNBOTlGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHlDQ3pOQXRoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQVNBMHpCLEdBQ0ExekIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFzckIsUUFBQSxXQUNBdHJCLEVBQUEra0IsUUFBQS9rQixFQUFBNHJCLGVBQTBDaHZFLE1BQUEsaUNBQUFvakQsRUFBQStxQixjQUMxQy9xQixFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBNkNoRixRQUFBLE9BQzdDbm1CLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUE4Q2pGLFFBQUEsUUFFOUNsM0YsVUFBQSxPQUNBMnRCLE1BQUEsNEJBR0EzdEIsVUFBQSxPQUNBMnRCLE1BQUEsNEJBR0EzdEIsVUFBQSxPQUNBMnRCLE1BQUEsWUFDQW5yQixJQUFBLFdBR0F4QyxVQUFBLE9BQ0EydEIsTUFBQSx3QkFHQTN0QixVQUFBLFdBQ0EydEIsTUFBQSw2REFDQW5yQixJQUFBLHVDQUdBeEMsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxJQUFBbnJCLElBQUEsT0FDQTAwRixRQUFBLFVBTUEsT0FDQWhDLFNBQUEsTUFHQW1CLGtCQUFBLEVBQ0FRLFFBdERBLG9CQXVEQXhhLFNBcERBLDRGQXFEQTk2RSxXQUVBdkIsVUFBQSxPQUNBMnRCLE1BMURBLFFBS0EzdEIsVUFBQSxPQUNBMnRCLE1BQUEsa0JBdURBdmEsT0FBQXF4RixvQkMvREF2cEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLFdBQ0E3WSxTQUFBLGtJQUNBOTZFLFdBRUF2QixVQUFBLFNBQ0EydEIsTUFBQSxNQUNBeXBFLFVBQUEsSUFHQXAzRixVQUFBLE9BQ0EydEIsTUFBQSxjQUdBQSxNQUFBLE1BQUFuckIsSUFBQSxXQUNBakIsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLFlBS0EzdEIsVUFBQSxXQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLEtBRUF1dUUsRUFBQTByQixtQkFFQXo4RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsT0FFQXV1RSxFQUFBb3JCLG9DQ2hDQWpoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBc0wsVUFDQW9oQixRQUVBLGlnQ0FhQWx4RixLQUNBLHV3Q0FlQW14RixTQUVBLHluTEFrRUFJLFFBQUEsY0FFQTVHLFFBQUEsSUFDQTMxRixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLHVCQy9HQXRILEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUEyekIsR0FDQWpILFFBQ0EsMFJBSUFLLFFBQ0Esc0JBQ0FKLFNBQ0EsMkZBRUEsT0FDQXhJLFNBQUEsVUFDQTdZLFNBQUFxb0IsRUFDQXhOLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXg4RixVQUFBLFNBQ0FxM0YsVUFDQXRtQixFQUFBb3JCLG1CQUNXeHVFLE1BQUEsSUFBQW5yQixJQUFBLGFBQ0FtckIsTUFBQSxJQUFBbnJCLElBQUEsUUFJWHhDLFVBQUEsU0FDQXEzRixXQUNXMXBFLE1BQUFvakQsRUFBQStxQixZQUFBLFVBQUExRSxVQUFBLEdBQ1hybUIsRUFBQTRyQixpQkFJQWh2RSxNQUFBLE9BR0EzdEIsVUFBQSxXQUNBdzJGLGNBQUEsT0FBQWgwRixJQUFBLFFBQTBDbTNGLFlBQUEsRUFDMUNwNEYsVUFDQXd2RSxFQUFBZ3NCLFlBRUEvOEYsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2NUUsU0FBQXFvQixFQUNBeE4sUUFBQSw0QkM5Q0FoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFVBQ0FvaEIsUUFDQSwwVEFLQUssUUFDQSxtQkFFQXY4RixVQUNBd3ZFLEVBQUEwckIsa0JBQ0ExckIsRUFBQW9yQixrQkFDQXByQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUFBMnRCLE1BQUEsZ0NDakJBenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzbEIsa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFDQSxteENBa0JBbDhGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBMnJCLFlBQ0EzckIsRUFBQStyQiw4QkM3QkE1aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFVBQ0F5aEIsUUFBQSxrQkFDQUwsUUFDQSx3VUFTQWw4RixVQUNBd3ZFLEVBQUFzckIsUUFDQSxVQUNBLFFBRUFqRixVQUFBLEVBQ0E3MUYsV0FHQW9zQixNQUFBLE9BQUF5cEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLGlCQUtBb2pELEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXg4RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsUUFHQXhDLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxRQUdBeEMsVUFBQSxTQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLE9BQ0E0MEYsVUFBQSxJQUVBcm1CLEVBQUFtckIsa0JBRUFsOEYsVUFBQSxTQUNBMnRCLE1BQUEsaUJBQ0Fwc0IsVUFDQXd2RSxFQUFBa3JCLG1CQUdBbHJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxPQUNBMnRCLE1BQUEsa0JBQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsTUFFQW5tQixFQUFBNnJCLG9CQUVBNThGLFVBQUEsUUFDQXcyRixjQUFBLDZCQUFBaDBGLElBQUEsSUFDQTAwRixRQUFBLElBQ0EzMUYsV0FDcUJpMUYsY0FBQSxzQkFDckJ6bEIsRUFBQWlzQix3QkFHQWpzQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUFBMnRCLE1BQUEsZUFJQTN0QixVQUFBLFNBQUEydEIsTUFBQSw4QkFLQUEsTUFBQSxLQUFBbnJCLElBQUEsT0FJQXhDLFVBQUEsU0FBQTJ0QixNQUFBLHVCQUNBeXBFLFVBQUEsSUFHQUYsUUFBQSx5QkMxRkFoOEYsRUFBQUQsUUFDQSxTQUFBODFFLEdBQ0EsT0FDQXNsQixrQkFBQSxFQUNBOTBGLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQSxnRUFDQXlwRSxVQUFBLElBR0FybUIsRUFBQXNyQixRQUNBLHlCQUNBLEdBRUFqRixVQUFBLEtBSUF6cEUsTUFBQSxxQkFDQThwRSxRQUNBajFGLElBQUEsTUFDQWcyRixZQUFBLFVBSUF4NEYsVUFBQSxNQUNBMnRCLE1BQUEsU0FDQXBzQixXQUVBdkIsVUFBQSxlQUNBMnRCLE1BQUEsU0FHQTN0QixVQUFBLGNBQ0EydEIsTUFBQSxhQUdBM3RCLFVBQUEsaUJBQ0EydEIsTUFBQSxlQUdBQSxNQUFBLFFBQ0FuckIsSUFBQSxRQUNBakIsV0FFQW9zQixNQUFBLGNBQ0FuckIsSUFBQSxRQUNBODJGLGFBQUEsRUFDQXZDLGdCQUFBLEVBQ0F4MUYsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLFNBRUFvakQsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLG1CQUVBeHVFLE1BQUEsT0FDQXlwRSxVQUFBLFFBT0F6cEUsTUFBQSxVQUNBbnJCLElBQUEsVUFDQW0zRixZQUFBLEVBQ0FwNEYsV0FFQW9zQixNQUFBLFlBQ0FuckIsSUFBQSxPQUNBODJGLGFBQUEsRUFDQXZDLGdCQUFBLEVBQ0F4MUYsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLE9BQ0F5cEUsVUFBQSxHQUVBcm1CLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixtQkFFQXh1RSxNQUFBLE9BQ0F5cEUsVUFBQSxVQVNBenBFLE1BQUEsa0JBR0FBLE1BQUEsS0FDQThwRSxRQUNBajFGLElBQUEsSUFDQWcyRixZQUFBLDJCQ3BHQXQ5RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBNHpCLEdBQW1CbEUsZUFBQSwwR0FDbkIsT0FDQXZMLFNBQUEsb0NBQ0FtQixrQkFBQSxFQUNBbUMsWUFBQSxNQUNBajNGLFVBQ0F3dkUsRUFBQXNyQixRQUFBLFdBQW9CLFlBRXBCcjhGLFVBQUEsZUFDQTJ0QixNQUFBLFlBQW9CbnJCLElBQUEsT0FDcEJqQixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEsZUFDQTB1RCxTQUFBc29CLEVBQ0FsTixRQUNBVixnQkFBQSxFQUFBSyxVQUFBLEVBQ0E3MUYsVUFDQXd2RSxFQUFBb3JCLHdCQU9BbjhGLFVBQUEsb0JBQ0EydEIsTUFBQSxPQUFvQm5yQixJQUFBLE9BQ3BCNjVFLFNBQUFzb0IscUJDNUJBenBHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzckIsR0FDQWhGLFVBQ0F0bUIsRUFBQXNyQixRQUFBLFVBQ0F0ckIsRUFBQXNyQixRQUNBLEtBQ0EsTUFFQTk2RixVQUFBLFlBTUFxakcsR0FDQTVrRyxVQUFBLE9BQ0EydEIsTUFBQSxNQUFhbnJCLElBQUEsT0FHYnE4RixHQUNBNytGLFVBQUEsT0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUdBdWdHLEdBQ0EvaUcsVUFBQSxPQUNBMnRCLE1BQUEsa0JBQ0F5cEUsVUFBQSxHQUdBa0osR0FDQTN5RSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBMDBGLFFBQUEsSUFDQTMxRixVQUNBcWpHLEVBQ0EvRixHQUNPNytGLFVBQUEsT0FBQTJ0QixNQUFBLDBDQUNQb2pELEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXFDcHZFLE1BQUEsa0JBQ3JDMHVFLElBU0EsT0FDQW5ILFNBQUEsTUFDQTdZLFNBQ0Esd09BSUE5NkUsV0FLQWkxRixjQUFBLFNBQUFoMEYsSUFBQSxRQUNBNjVFLFNBQUEsZUFDQTk2RSxVQUFBKytGLEVBQUFqRSxHQUNBbkYsUUFBQSxhQUdBdnBFLE1BQUEsZUFBQW5yQixJQUFBLElBQ0E2NUUsU0FBQSw2QkFDQTk2RSxVQUFBKytGLEVBQUFqRSxHQUNBbkYsUUFBQSxhQUlBbDNGLFVBQUEsUUFDQTJ0QixNQUFBLDhCQUFBbnJCLElBQUEsUUFDQTY1RSxTQUFBLDhCQUNBOTZFLFVBQUF3aEcsRUFBQXpDLEVBQUFqRSxLQUdBcjhGLFVBQUEsUUFDQTJ0QixNQUFBLDBCQUFBbnJCLElBQUEsSUFDQTY1RSxTQUFBLG9DQUNBOTZFLFVBQUFxakcsRUFBQTdCLEVBQUF6QyxHQXRDQTN5RSxNQUFBLElBQWFuckIsSUFBQSxJQUNiakIsU0FBQSsrRixFQUFBLytGLFVBcUNBODZGLEtBR0E3RixjQUFBLFVBQUFoMEYsSUFBQSxJQUNBakIsVUFBQXdoRyxFQUFBekMsRUFBQWpFLEtBR0E3RixjQUFBLHNCQUFBaDBGLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQTRyQixjQUFBTixLQUdBMXVFLE1BQUEsZ0JBQUFuckIsSUFBQSxJQUNBNjVFLFNBQUEsdUVBRUE5NkUsVUFBQXdoRyxFQUFBaHlCLEVBQUFvckIsa0JBQUFFLEtBR0FyOEYsVUFBQSxPQUNBMnRCLE1BQUEsa0NBQUFuckIsSUFBQSxLQUtBb2lHLEVBQ0EvRixFQUtBOXRCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixjQUNBb0csRUFDQWh5QixFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUFxQ3B2RSxNQUFBLG1CQUVyQzB1RSxHQUVPMXVFLE1BQUEsMkJDckhQenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQU1BLE9BQ0Fta0IsU0FBQSxNQUNBN1ksVUFDQW9oQixRQUFBLHVSQUlBQyxTQUNBLGFBQ0FJLFFBQ0EscUJBRUF2OEYsV0FDT3ZCLFVBQUEsU0FDUDJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFDQXd2RSxFQUFBa3JCLGtCQUNXajhGLFVBQUEsUUFDWDJ0QixNQUFBLFNBQTBCbnJCLElBQUEsUUFFZnhDLFVBQUEsUUFDWDJ0QixNQUFBLE1BQUFuckIsSUFBQSxVQUlBdXVFLEVBQUFvckIsa0JBQ0FwckIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUE0ckIsZUFDTzM4RixVQUFBLE9BQ1AydEIsTUFBQSxLQUFBbnJCLElBQUEsTUFFT3hDLFVBQUEsT0FDUDJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBNjVFLFVBQW1CMGhCLGVBQUEsOEJBRVovOUYsVUFBQSxPQUNQMnRCLE1BQUEsVUFBQW5yQixJQUFBLHVCQUNBNjJGLGNBQUEsRUFBQU0sWUFBQSxFQUNBdkMsVUFBQSxJQUVPcDNGLFVBQUEsT0FDUDJ0QixNQUFBLFVBQUFuckIsSUFBQSxNQUNBNjJGLGNBQUEsRUFBQU0sWUFBQSxJQUVPMzVGLFVBQUEsT0FDUDJ0QixNQUFBLFFBQUFuckIsSUFBQSxNQUNBNjJGLGNBQUEsRUFBQU0sWUFBQSxJQUVPMzVGLFVBQUEsUUFDUHcyRixjQUFBLE9BQUFoMEYsSUFBQSxNQUNBakIsVUFDQXd2RSxFQUFBZ3NCLGNBR08vOEYsVUFBQSxRQUNQdzJGLGNBQUEsV0FBQWgwRixJQUFBLFNBQ0FqQixXQUNXdkIsVUFBQSxPQUNYMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLElBRVczNUYsVUFBQSxPQUNYMnRCLE1BQUEsU0FBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLElBRVczNUYsVUFBQSxPQUNYMnRCLE1BQUEsT0FBQW5yQixJQUFBLE1BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLEdBRUE1b0IsRUFBQWdzQixZQUVBMWdCLFVBQ0FvaEIsUUFBQSxzQkFHT3o5RixVQUFBLFFBQ1AydEIsTUFBQSx5QkFBQW5yQixJQUFBLFNBQW1EbTNGLFlBQUEsRUFDbkR0ZCxTQUFBLGtCQUNBOTZFLFdBQ1d2QixVQUFBLFVBQ1gydEIsTUFBQSw0QkFDQTB1RCxTQUFBLHFCQUNBOTZFLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQW9qRCxFQUFBNHFCLFNBQ0F2RSxVQUFBLEtBSUFybUIsRUFBQWdzQixjQUdPLzhGLFVBQUEsV0FDUHcyRixjQUFBLFdBQUFoMEYsSUFBQSxNQUFBbTNGLFlBQUEsRUFDQXpDLFFBQUEsTUFDQTMxRixVQUNBd3ZFLEVBQUFnc0IsY0FJQTdGLFFBQUEsdUJDNUdBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzbEIsa0JBQUEsRUFDQVEsUUFBQSxXQUNBeGEsU0FBQSwyL0VBQ0E5NkUsVUFDQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQW9yQixrQkFDQXByQixFQUFBbXJCLGtCQUlBbDhGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQWlCbnJCLElBQUEsS0FDakJqQixVQUFBd3ZFLEVBQUFrckIsbUJBR0FsckIsRUFBQXNyQixRQUFBLElBQXFCLEtBQVNqRixVQUFBLEtBSTlCcDNGLFVBQUEsT0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBNjVFLFVBQW1CMGhCLGVBQUEsbU5BQ25CeDhGLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQWdEbjhGLFVBQUEsZ0JBQ2hEK3dFLEVBQUEyckIsWUFDQTNyQixFQUFBNHJCLGNBQ0E1ckIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHdCQU1BeDhGLFVBQUEsU0FDQTJ0QixNQUFBLGdCQUdBb2pELEVBQUEyckIsWUFDQTNyQixFQUFBNHJCLGdDQ3pDQXpoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBNHpCLEVBQUEsaUxBK0JBRSxHQVBBOXpCLEVBQUFvckIsbUJBUUFwRixnQkFBQSxFQUFBSyxVQUFBLEVBQ0EvYSxVQUFlb2hCLFFBQUEsS0FBQUMsU0FBQWlILEdBQ2ZwakcsVUFDQXd2RSxFQUFBb3JCLG1CQWhDQWpGLFFBQUEsT0FDQXZwRSxNQUFBLGlCQUNBMnJFLGFBQUEsRUFDQWxDLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxPQUFBMnRCLE1BQUEsbUJBNEJBb2pELEVBQUEyckIsZUFJQSxPQUNBckcsa0JBQUEsRUFDQW1DLFlBQUEsTUFDQWozRixVQUNBd3ZFLEVBQUFzckIsUUFBQSxXQUFzQixZQUV0QnI4RixVQUFBLGVBQ0EydEIsTUFBQSxZQUFvQm5yQixJQUFBLE9BQ3BCakIsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLGdCQUNBMHVELFVBQXVCb2tCLGVBQUFrRSxHQUN2QmxOLE9BQUFvTixNQUtBN2tHLFVBQUEsb0JBQ0EydEIsTUFBQSwwQkFBb0JuckIsSUFBQSxPQUNwQjY1RSxVQUFtQm9oQixRQUFBLEtBQUFDLFNBQUFpSCxHQUNuQnBqRyxVQUNBd3ZFLEVBQUFvckIsc0NDaEVBamhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUErekIsRUFBQSxpQkFDQSxPQUNBNVAsU0FBQSxTQUNBZ0MsUUFBQSxNQUNBMzFGLFdBRUFvc0IsTUFBQSxJQUFBbTNFLEVBQUF0aUcsSUFBQSxJQUNBakIsV0FBb0J2QixVQUFBLFNBQUEydEIsTUFBQSxtQkFHcEJBLE1BQUEsaUJBQUFtM0UsRUFBQSxJQUFBeEwsYUFBQSxFQUFBOTJGLElBQUEsSUFDQWpCLFdBRUF2QixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTYyRixjQUFBLEVBQUFNLFlBQUEsSUFHQWhzRSxNQUFBbTNFLElBR0E5a0csVUFBQSxVQUNBMnRCLE1BQUEsYUFLQTN0QixVQUFBLFlBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsS0FBQW0zRixZQUFBLEVBQ0F6QyxRQUFBLFlBQ0FPLFFBQWlCajFGLElBQUEsSUFBQTQwRixVQUFBLEtBR2pCenBFLE1BQUEsU0FDQThwRSxRQUFpQmUsZUFBQXpCLGdCQUFBLHNCQ25DakI3N0YsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFtQ0FpdkIsRUFBQSx3REFRQUMsR0FDQXR5RSxNQUFBcXlFLEVBQ0E1SSxVQUFBLEdBRUFtSCxHQUNBditGLFVBQUEsU0FBQTJ0QixNQVpBLHNCQWFBeXBFLFVBQUEsR0FFQXFILEVBQUExdEIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQXFEakYsUUFBQSxPQUNyRG1GLEVBQUF0ckIsRUFBQXNyQixRQUNBLElBQ0EsS0FFQWpGLFVBQUEsSUFHQWdHLEdBQ0FwOUYsVUFBQSxVQUNBMnRCLE1BQUEsbUNBRUF1eUUsR0FDQXZ5RSxNQUFBLFdBQW1CbnJCLElBQUEsWUFFbkIyOUYsR0FDQW5nRyxVQUFBLFVBQ0EydEIsTUFBQSxNQUFBcXlFLEdBRUFJLEVBQUFydkIsRUFBQXNyQixRQUFBLFNBQXFDLE9BQ3JDZ0UsR0FDQXJnRyxVQUFBLFNBQ0EydEIsTUFBQSxXQUFvQnF5RSxHQUVwQk0sR0FDQTN5RSxNQUFBLE1BQUFuckIsSUFBQSxPQUVBKzlGLEdBQ0F4SixnQkFBQSxFQUNBSyxVQUFBLEdBRUFvSixHQUNBbmtCLFVBbEZBb2tCLGVBRUEsb2tFQWlGQTVKLFFBQUFtSixFQUNBaGdHLFVBQUEsT0FBQTJ0QixNQUFBcXlFLEVBQ0F2SSxPQUFBOEksR0FFQUcsR0FBQUosRUFBQTdCLEVBQUEwQixFQUFBQyxFQUFBL0QsRUFBQWdFLEVBQUFILEVBQUEzQixFQUFBbkIsRUFBQTZDLEdBTUEsT0FKQUssRUFBQS8rRixVQUFBd3ZFLEVBQUFzckIsUUFBQSxjQUFBbUUsRUFBQUQsR0FDQUEsRUFBQWgvRixTQUFBbS9GLEVBQ0FSLEVBQUEzK0YsU0FBQW0vRixHQUdBeEwsU0FBQSxVQUNBZ0MsUUFBQSxLQUNBMzFGLFdBMURBdkIsVUFBQSxPQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLEtBeURBODlGLEVBQUE3QixFQUFBMEIsRUFBQUMsRUFBQS9ELEVBQUFnRSxFQUFBSCxFQUFBM0IsRUFBQW5CLG9CQ2xHQWxpRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FHQSxPQUNBbWtCLFNBQUEsTUFDQW1CLGtCQUFBLEVBQ0FoYSxVQUVBb2hCLFFBRUEsb0pBU0FsOEYsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBNDBGLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxRQUNBMnRCLE1BMUJBLE1BMEJBbnJCLElBekJBLFVBOEJBeEMsVUFBQSxVQUNBMnRCLE1BQUEsOENBQ0FuckIsSUFBQSxNQUtBbXJCLE1BQUEsbUVBQ0FuckIsSUFBQSxJQUNBakIsV0FHQW9zQixNQUFBLFVBQUFuckIsSUFBQSxVQUtBeEMsVUFBQSxVQUNBMnRCLE1BakRBLE1BaURBbnJCLElBaERBLE1BaURBakIsVUFBQSwyQkNuREFyRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBMHRCLEdBQ0F6K0YsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGtCQUNBNUUsV0FFQTFwRSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBNDBGLFVBQUEsS0FFQXpwRSxNQUFBLE1BQUFuckIsSUFBQSxNQUNBNDBGLFVBQUEsS0FFQXpwRSxNQUFBLElBQUFuckIsSUFBQSxNQUVBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE9BSUEsT0FDQTB5RixTQUFBLFFBQ0FtQixrQkFBQSxFQUNBYSxRQUFBLEtBQ0EzMUYsVUFDQXd2RSxFQUFBc3JCLFFBQUEsSUFBcUIsS0FDckJ0ckIsRUFBQTByQixtQkFFQXo4RixVQUFBLFVBQ0EydEIsTUFBQSxVQUFBbnJCLElBQUEsUUFHQW1yQixNQUFBLDBCQUFBbnJCLElBQUEsSUFDQTgyRixhQUFBLEVBQ0EvM0YsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLG9CQUdBQSxNQUFBLElBQUFvcEUsZ0JBQUEsRUFDQUssVUFBQSxFQUNBNzFGLFdBRUF2QixVQUFBLFVBQ0EydEIsTUFBQSxpQ0FHQTN0QixVQUFBLFdBQ0FxM0YsV0FDbUIxcEUsTUFBQSxzQkFDQUEsTUFBQSxnQkFHbkI4d0UsR0FFQXorRixVQUFBLFNBQ0EydEIsTUFBQSwwQkFFQW9qRCxFQUFBMnJCLGtDQ3pEQXhoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FvREEsT0FDQXNsQixrQkFBQSxFQUNBaGEsVUEvQ0F5aEIsUUFBQSxpQkFDQUwsUUFBQSxvNkRBdUJBQyxTQUFBLG8rREF3QkF4RyxRQUFBLE9BQ0EzMUYsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBMkNsOEYsVUFBQSxTQUFBbzNGLFVBQUEsSUFDM0NybUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDbjhGLFVBQUEsU0FBQW8zRixVQUFBLEtBRTVDcDNGLFVBQUEsV0FDQXcyRixjQUFBLDhCQUNBVSxRQUFBLFdBQ0EzMUYsVUFBQXd2RSxFQUFBaXNCLHVCQTdEQWg5RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsU0E4REF1dUUsRUFBQXNyQixRQUFBLFNBQThCakYsVUFBQSxJQUM5QnJtQixFQUFBc3JCLFFBQUEsdUJBQTRDakYsVUFBQSxNQUU1Q3AzRixVQUFBLFNBQ0EydEIsTUFBQSxrRkFDQXlwRSxVQUFBLHFCQ3RFQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUVBc3VCLEVBQ0EsNlZBcUJBMEYsR0FDQS9rRyxVQUFBLFNBQ0EydEIsTUFoQkEsdU5BaUJBeXBFLFVBQUEsR0FHQSxPQUNBbEMsU0FBQSxPQUNBN1ksU0FBQWdqQixFQUNBbkksUUFBQSxRQUNBMzFGLFVBQ0F3dkUsRUFBQXNyQixRQUNBLFVBQ0EsUUFFQWpGLFVBQUEsRUFDQTcxRixXQUdBb3NCLE1BQUEsT0FBQXlwRSxVQUFBLElBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsaUJBS0FvakQsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixtQkFFQW44RixVQUFBLFFBQ0F3MkYsY0FBQSxrQkFBQWgwRixJQUFBLFFBQW1EbTNGLFlBQUEsRUFDbkR0ZCxTQUFBLGtCQUNBNmEsUUFBQSxXQUNBMzFGLFdBQ1dpMUYsY0FBQSxzQkFDWHpsQixFQUFBaXNCLHlCQU1BeEcsY0FBQSx3QkFDQVksVUFBQSxJQUdBcDNGLFVBQUEsV0FDQTJ0QixNQUFBLHFIQUFBb2pELEVBQUE2cUIsb0JBQUEsVUFBQXRDLGFBQUEsRUFBQTkyRixJQUFBLFFBQ0FtM0YsWUFBQSxFQUNBdGQsU0FBQWdqQixFQUNBOTlGLFdBRUFvc0IsTUFBQW9qRCxFQUFBNnFCLG9CQUFBLFVBQUF0QyxhQUFBLEVBQ0FsQyxVQUFBLEVBQ0E3MUYsVUFBQXd2RSxFQUFBaXNCLHlCQUdBaDlGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjVFLFNBQUFnakIsRUFDQWpJLFVBQUEsRUFDQTcxRixVQUNBd3ZFLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBNHJCLGNBQ0E1ckIsRUFBQXlyQix1QkFHQXpyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsdUJBR0F1SSxHQUVBL2tHLFVBQUEsT0FBQTJ0QixNQUFBLGdDQ3RHQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBNHFCLEVBQUEsMkJBQ0EwRCxHQUNBNUIsUUFDQSxtT0FNQUssUUFDQSx5Q0FDQUosU0FDQSwyZ0JBVUFhLEdBQ0F2K0YsVUFBQSxTQUNBcTNGLFdBQ08xcEUsTUFBQSxvQkFDQUEsTUFBQSxxQkFDQUEsTUFBQW9qRCxFQUFBK3FCLGNBRVAxRSxVQUFBLEdBRUEwSSxHQUNBOS9GLFVBQUEsUUFDQTJ0QixNQUFBLFNBQWtCbnJCLElBQUEsTUFDbEI2NUUsU0FBQWdqQixFQUNBOTlGLGFBRUF5akcsR0FDQWhsRyxVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQ0F3dkUsRUFBQWtyQixpQkFDQTZELElBR0FBLEVBQUF2K0YsVUFDQXd2RSxFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0E2SSxFQUNBekcsRUFDQXh0QixFQUFBK3JCLGFBRUEsSUFBQW1JLEVBQUFuRixFQUFBditGLFNBQUE2UixRQUNBMjlELEVBQUF5ckIscUJBQ0F6ckIsRUFBQXdyQixzQkFHQSxPQUNBckgsU0FBQSxZQUNBN1ksU0FBQWdqQixFQUNBOTlGLFdBRUF2QixVQUFBLE9BQ0FvM0YsVUFBQSxHQUNBenBFLE1BQUEsaUNBR0EzdEIsVUFBQSxPQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLEtBRUF1dUUsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBNkksRUFDQWowQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0ErQixHQUVBNXdFLE1BQUEsVUFBa0J5cEUsVUFBQSxFQUNsQjcxRixXQUVBb3NCLE1BQUFndUUsRUFBQSxRQUFBckMsYUFBQSxFQUNBbEMsVUFBQSxFQUNBNzFGLFdBQXdCdkIsVUFBQSxPQUFBMnRCLE1BQUFndUUsRUFBQXZFLFVBQUEsUUFLeEJ6cEUsTUFBQSxJQUFBb2pELEVBQUFpckIsZUFBQSxrQ0FDQTNmLFNBQUEsb0JBQ0E5NkUsVUFDQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQStyQixhQUVBOThGLFVBQUEsV0FDQTJ0QixNQUFBLGNBQUFndUUsRUFBQSxVQUFBckMsYUFBQSxFQUNBOTJGLElBQUEsU0FDQWpCLFdBRUF2QixVQUFBLFNBQ0FxM0YsV0FFQTFwRSxNQUFBZ3VFLElBR0FodUUsTUFBQSxZQUdBQSxNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjJGLGNBQUEsRUFBQU0sWUFBQSxFQUNBdGQsU0FBQWdqQixFQUNBOTlGLFNBQUEwakcsUUFPQXQzRSxNQUFBLElBQUFuckIsSUFBQSxpQkFDQWcyRixZQUFBLE1BQ0FqM0YsV0FDZW9zQixNQUFBLGFBQUF3WSxNQUFBLElBRWZ4WSxNQUFBLE9BQUFuckIsSUFBQSxpQkFBQTJqQyxNQUFBLEVBQ0E1a0MsV0FDbUJvc0IsTUFBQSxhQUFBd1ksTUFBQSxHQUNuQixZQU1BaXhELFVBQUEsSUFHQXAzRixVQUFBLFdBQ0F3MkYsY0FBQSxXQUFBaDBGLElBQUEsS0FBMkNtM0YsWUFBQSxFQUMzQ3A0RixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXlDcHZFLE1BQUFndUUsS0FFekMzN0YsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2MkYsY0FBQSxFQUNBTSxZQUFBLEVBQ0FwNEYsU0FBQTBqRyxJQUdBL04sUUFBQSxTQUdBdnBFLE1BQUEsVUFFQW9qRCxFQUFBa3NCLGNBRUFqOUYsVUFBQSxRQUNBdzJGLGNBQUEsUUFBQWgwRixJQUFBLFFBQXlDbTNGLFlBQUEsRUFDekN6QyxRQUFBLFdBQ0EzMUYsV0FDV2kxRixjQUFBLFdBQ1h6bEIsRUFBQWlzQix5QkFJQXhHLGNBQUEsY0FBQWgwRixJQUFBLEtBQThDbTNGLFlBQUEsSUFHOUN6QyxRQUFBLDBCQ3ZLQWg4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUtBbTBCLEdBQ0FsbEcsVUFBQSxTQUNBMnRCLE1BQUEsS0FDQW5yQixJQUFBLEtBQ0FqQixXQVJBb3NCLE1BQUEsWUFBQTJyRSxhQUFBLEVBQ0FsQyxVQUFBLEVBQ0E3MUYsV0FBZ0J2QixVQUFBLE9BQUEydEIsTUFBQSxhQU9oQnlwRSxVQUFBLEdBZUEsT0FDQWxDLFNBQUEsZUFDQTJCLFFBQUEsVUFDQXhhLFVBQ0FvaEIsUUFBQSxzVkFJQUssUUFBQSxjQUVBdjhGLFVBQ0F3dkUsRUFBQTByQixrQkFDQTFyQixFQUFBb3JCLG1CQWZBbjhGLFVBQUEsU0FDQTJ0QixNQUFBLGlCQVZBM3RCLFVBQUEsV0FDQTJ0QixNQUFBLFlBQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDJCQXNCQXUzRSxvQkMxQ0FocUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQW8wQixHQUFrQnJILFFBQUEsbUJBQ2xCc0gsR0FDQXIwQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE0ckIsZUFFQTBJLEdBQ0E3aUcsSUFBQSxJQUFBdTBGLGdCQUFBLEVBQUE0QyxZQUFBLEVBQ0FwNEYsU0FBQTZqRyxFQUNBL29CLFNBQUE4b0IsR0FFQXRGLEdBQ0FseUUsTUFBQSxJQUFhbnJCLElBQUEsSUFDYmpCLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixrQkFDQS9FLFFBQUEsT0FFQW5tQixFQUFBK2tCLFFBQUF1UCxHQUFxQzEzRSxNQUFBLE9BRXJDdXBFLFFBQUEsT0FFQW9PLEdBQ0EzM0UsTUFBQSxNQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF3dkUsRUFBQStrQixRQUFBdVAsSUFDQW5PLFFBQUEsT0FHQSxPQURBa08sRUFBQTMzRixPQUFBMjNGLEVBQUFobEcsT0FBQSxFQUFBeS9GLEVBQUF5RixJQUVBL2pHLFNBQUE2akcsRUFDQS9vQixTQUFBOG9CLEVBQ0FqTyxRQUFBLHVCQ2pDQWg4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FNQSxJQUFBc3VCLEdBUUE1QixRQUNBLHNQQWlCQUssUUFDQSx1VkFlQUosU0FDQSx5aEZBMkJBNkgsRUFBQSx1REFHQUMsR0FDQTNPLFFBQUEwTyxFQUFBbHBCLFNBQUFnakIsRUFBQW5JLFFBQUEsT0FzQkF1TyxHQUNBemxHLFVBQUEsUUFDQTJ0QixNQUFBLE9BQUFuckIsSUFBQSxLQUNBNjVFLFNBQUFnakIsR0FHQXFHLEdBQ0ExbEcsVUFBQSxXQUNBMnRCLE1BQUEsTUFBQTQzRSxHQUlBOUcsR0FDQXorRixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsaUJBQUF3SixFQUFBQyxHQUNBck8sV0FDTzFwRSxNQUFBLFNBQUFuckIsSUFBQSxTQUFBNDBGLFVBQUEsS0FDQXpwRSxNQUFBLE9BQUFuckIsSUFBQSxVQUlQbWpHLEdBQ0EzbEcsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBd0osRUFBQUMsR0FDQS8zRSxNQUFBLElBQUFuckIsSUFBQSxLQUdBb2pHLEdBQ0E1bEcsVUFBQSxPQUNBMnRCLE1BQUEsSUFBQTQzRSxHQTRCQSxPQWpCQUMsRUFBQWprRyxXQXpEQXZCLFVBQUEsU0FRQTJ0QixNQUFBLHFJQUNBeXBFLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSw4QkE4Q0E4d0UsRUFDQWtILEVBQ0FDLEdBWkE1bEcsVUFBQSxVQUNBcTNGLFdBQ08xcEUsTUFBQSxLQUFBbnJCLElBQUEsS0FBQTQwRixVQUFBLEtBQ0F6cEUsTUFBQSxJQUFBbnJCLElBQUEsT0FXUHV1RSxFQUFBMHJCLG1CQUVBejhGLFVBQUEsVUFDQTJ0QixNQUNBLGdFQUVLQSxNQUFBLE9BRUw4M0UsRUFBQWxrRyxTQUFBaWtHLEVBQUFqa0csU0FFQWlrRyxrQkMvSkF0cUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXh2RSxXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEsVUFDQXlwRSxVQUFBLEdBQ0FLLFFBR0FqMUYsSUFBQSxjQUNBZzJGLFlBQUEsU0FPQXRELFNBQUEsZ0NDbEJBaDZGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBQ0EsNFdBTUFDLFNBQ0Esa0VBQ0FJLFFBQ0EsbUJBY0ErSCxHQUNBN2xHLFVBQUEsU0FBQTJ0QixNQUFBb2pELEVBQUE2cUIsb0JBQUEsS0FJQWtFLEdBQ0E5L0YsVUFBQSxRQUNBMnRCLE1BQUEsT0FBZ0JuckIsSUFBQSxJQUFVakIsVUFBQXd2RSxFQUFBbXJCLGlCQUFBbnJCLEVBQUE0ckIsZ0JBRTFCNEMsR0FDQXYvRixVQUFBLFdBQUEydEIsTUFBQSxNQUFBb2pELEVBQUE2cUIscUJBRUE2QyxHQUNBeitGLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixVQUFBZytGLEVBQUFPLEtBTUFueUUsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLEtBQ0EzMUYsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsSUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxLQUNBMzFGLFVBQUF3dkUsRUFBQWtyQixpQkFBQXNELEVBQUFPLE1BS0FnRyxHQUNBOWxHLFVBQUEsT0FBQTJ0QixNQUFBLGdGQUFBb2pELEVBQUE2cUIsb0JBQUEsTUFFQW1LLEdBQ0EvbEcsVUFBQSxPQUFBMnRCLE1BQUEsSUFBQW9qRCxFQUFBNnFCLG9CQUNBcjZGLFdBRUFvc0IsTUFBQSxLQUFBbnJCLElBQUEsS0FDQWpCLFVBQ0F3dkUsRUFBQStrQixRQUFBMkksR0FBZ0N6K0YsVUFBQSxvQkFNaEMsT0FDQXE4RSxTQUFBZ2pCLEVBQ0E5OUYsVUFDQXd2RSxFQUFBc3JCLFFBQ0EsVUFDQSxRQUVBakYsVUFBQSxFQUNBNzFGLFdBQ0F2QixVQUFBLFNBQ0EydEIsTUFBQSxpQkFJQW9qRCxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsc0JBNUVBeDhGLFVBQUEsVUFDQTJ0QixNQUFBLG1DQUNBOHBFLFFBQ0FsMkYsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLFdBd0VBazRFLEVBQ0FDLEVBQ0FDLEdBRUEvbEcsVUFBQSxXQUNBdzJGLGNBQUEsTUFBQWgwRixJQUFBLFFBQ0E4MkYsYUFBQSxFQUNBSyxZQUFBLEVBQ0F0ZCxTQUFBZ2pCLEVBQ0FuSSxRQUFBLHlDQUNBRSxVQUFBLEVBQ0E3MUYsV0FFQW9zQixNQUFBb2pELEVBQUE2cUIsb0JBQUEsVUFBQXRDLGFBQUEsRUFDQWxDLFVBQUEsRUFDQTcxRixVQUFBd3ZFLEVBQUFpc0IseUJBR0FoOUYsVUFBQSxPQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQUE2NUUsU0FBQSxVQUNBK2EsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBaTNGLFlBQUEsRUFDQXBkLFNBQUFnakIsRUFDQWpJLFVBQUEsRUFDQTcxRixXQUVBb3NCLE1BQUEsSUFBQW5yQixJQUFBLFNBQUF1MEYsZ0JBQUEsRUFDQXgxRixXQUNtQnZCLFVBQUEsT0FBQTJ0QixNQUFBb2pELEVBQUE2cUIscUJBQ25CN3FCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXBGLFVBQUEsR0FFQXJtQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0FzSixFQUNBQyxFQUNBdEgsRUFDQTF0QixFQUFBNHJCLGdCQUdBNXJCLEVBQUF5ckIsd0JBSUF4OEYsVUFBQSxRQUNBdzJGLGNBQUEsd0JBQUFoMEYsSUFBQSxXQUNBbTNGLFlBQUEsRUFDQXpDLFFBQUEscUJBQ0EzMUYsV0FDV2kxRixjQUFBLGlEQUNYemxCLEVBQUFpc0IsdUJBRUFoOUYsVUFBQSxPQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQUE2MkYsY0FBQSxFQUFBTSxZQUFBLEVBQ0F2QyxVQUFBLElBR0FwM0YsVUFBQSxPQUNBMnRCLE1BQUEsVUFBQW5yQixJQUFBLFdBQUE2MkYsY0FBQSxFQUFBSyxXQUFBLEdBRUFvTSxFQUNBQyxJQUdBdEgsR0FFQXorRixVQUFBLE9BQ0EydEIsTUFBQSxrQkFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxNQUVBbm1CLEVBQUE0ckIsZ0NDektBemhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBRUFpMUIsRUFBQSxXQUNBQyxHQUNBbkksUUFDQSx1R0FFQUosU0FDQSx5TUFHQUQsUUFDQSwyaENBa0JBeUksRUFBQW4xQixFQUFBc3JCLFFBQ0EsVUFDQSxVQUVBakYsVUFBQSxJQUdBK08sR0FDQW5tRyxVQUFBLE9BQ0EydEIsTUFBQSxrQkFDQThwRSxRQUNBajFGLElBQUEsbUJBQ0FrM0YsV0FBQSxFQUNBbjRGLFVBQUEya0csS0FHQUUsR0FDQXBtRyxVQUFBLE9BQ0EydEIsTUFBQSx3Q0FFQTA0RSxHQUNBcm1HLFVBQUEsU0FDQTJ0QixNQUFBLHNCQUVBMjRFLEdBQ0F2MUIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUEra0IsUUFBQS9rQixFQUFBNHJCLGVBQXNDaHZFLE1BQUFvakQsRUFBQStxQixZQUFBLHlCQUN0Qy9xQixFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBeUNoRixRQUFBLE9BQ3pDbm1CLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUEwQ2pGLFFBQUEsUUFFMUNsM0YsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLE1BR0E2MEYsV0FFQTFwRSxNQUFBLHlCQUdBQSxNQUFBLElBQUFuckIsSUFBQSxPQUNBMDBGLFFBQUEsVUFLQWwzRixVQUFBLE9BQ0EydEIsTUFBQSxTQUFBbnJCLElBN0VBLG1CQThFQTAwRixRQUFBLFFBR0FsM0YsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxnQ0FDQXlwRSxVQUFBLElBR0F6cEUsTUFBQSxrQkFLQUEsTUFBQSxhQUNBeXBFLFVBQUEsRUFDQTcxRixVQUFBOGtHLEtBR0FybUcsVUFBQSxRQUNBdzJGLGNBQUEsU0FDQWtELFdBQUEsRUFBQWwzRixJQUFBLFNBQ0FqQixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXVDcHZFLE1BQUE0NEUsOENBSXZDLE9BQ0FyUixTQUFBLG9CQUNBbUIsa0JBQUEsRUFDQVEsUUFBQTBQLDJCQUNBbHFCLFNBQUE0cEIsRUFDQTFrRyxXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUFxNEUsRUFDQTVPLFVBQUEsRUFDQUssUUFDQWoxRixJQUFBLDZCQUNBazNGLFdBQUEsRUFDQXRDLFVBQUEsRUFDQTcxRixVQUFBMmtHLEtBR0FDLEVBQ0FDLEdBRUFwbUcsVUFBQSxPQUNBMnRCLE1BQUEsd0JBQ0E4cEUsUUFDQWoxRixJQUFBLDRCQUNBcTBGLFFBQUEwUCwyQkFDQWxxQixTQUFBNHBCLEVBQ0Exa0csV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBcTRFLEVBQ0E1TyxVQUFBLEVBQ0FLLFFBQ0FqMUYsSUFBQSx5Q0FDQWszRixXQUFBLEVBQ0FuNEYsVUFBQTJrRyxLQUdBQyxFQUNBQyxHQUNBaHpGLE9BQUFrekYsTUFJQXRtRyxVQUFBLE9BQ0EydEIsTUFBQSxNQUNBeXBFLFVBQUEsSUFHQXAzRixVQUFBLE9BQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsVUFDQTQwRixVQUFBLEtBRUFoa0YsT0FBQWt6RixvQkMvSkFwckcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXh2RSxXQUVBdkIsVUFBQSxZQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLEtBQUFtM0YsWUFBQSxFQUNBbEMsUUFBaUJqMUYsSUFBQSxJQUFBNDBGLFVBQUEsR0FDakJBLFVBQUEsS0FHQXAzRixVQUFBLFlBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsS0FBQW0zRixZQUFBLEVBQ0FsQyxRQUFpQmoxRixJQUFBLElBQUE0MEYsVUFBQSxLQUdqQnAzRixVQUFBLFVBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FFQXV1RSxFQUFBMHJCLG9DQ2xCQXZoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeHZFLFdBRUF2QixVQUFBLFdBQ0EydEIsTUFBQSxxQkFDQW5yQixJQUFBLEtBQ0E4MkYsYUFBQSxFQUNBSyxZQUFBLEVBQ0FwNEYsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBLE9BR0EzdEIsVUFBQSxRQUNBMnRCLE1BQUEsMkJBR0EzdEIsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FpM0YsWUFBQSxFQUNBbDRGLFdBRUF2QixVQUFBLFNBQ0EydEIsTUFBQSxJQUNBbnJCLElBQUEsTUFHQXhDLFVBQUEsV0FDQTJ0QixNQUFBLGdEQzlCQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUNBeTFCLEVBQUEsdUJBSUFDLEtBQUFDLEtBRUFDLEVBQUEsU0FBQTdxRyxHQUFpQyxPQUVqQ2tFLFVBQUEsU0FBQTJ0QixNQUFBLEtBQUE3eEIsRUFBQSxNQUFBQSxJQUdBOHFHLEVBQUEsU0FBQTVxRyxFQUFBMnhCLEVBQUF5cEUsR0FBcUQsT0FDckRwM0YsVUFBQWhFLEVBQUEyeEIsUUFBQXlwRSxjQUdBeVAsR0FFQWw1RSxNQUFBLE1BQUFuckIsSUFBQSxNQUFBakIsU0FBQW1sRyxFQUFBdFAsVUFBQSxHQUlBc1AsRUFBQXpnRyxLQUNBOHFFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQW1LLEVBQUEsS0FDQUEsRUFBQSxLQUNBNTFCLEVBQUE4ckIsaUJBRUFsdkUsTUFBQSxvQkFDQThwRSxRQUFlejNGLFVBQUEsU0FBQXdDLElBQUEsV0FBQW0zRixZQUFBLElBRWZpTixFQUFBLDZCQUNBQyxFQUNBRCxFQUFBLDRCQUNBQSxFQUFBLHlCQUNBQSxFQUFBLDBCQUVBNW1HLFVBQUEsWUFBQTJ0QixNQUFBZ3VFLGVBQUFuNUYsSUFBQSxJQUFBODJGLGFBQUEsRUFBQUssWUFBQSxJQUdBMzVGLFVBQUEsT0FDQTJ0QixNQUFBLGVBSUEsSUFBQW01RSxFQUFBSixFQUFBdHpGLFFBQ0F1YSxNQUFBLElBQWFuckIsSUFBQSxJQUFVakIsU0FBQWtsRyxJQUd2Qk0sR0FDQXZRLGNBQUEsT0FBQU8sZ0JBQUEsRUFDQXgxRixXQUFnQmkxRixjQUFBLFlBQXlCcGpGLE9BQUFzekYsSUFLekNNLEdBQ0FyNUUsTUFBQTY0RSxFQUFBLFFBQUFsTixhQUFBLEVBQUE5MkYsSUFBQSxPQUNBNDBGLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxZQUNBMnRCLE1BQUE2NEUsRUFBQWhrRyxJQUFBLElBQUFtM0YsWUFBQSxFQUNBbEMsUUFDQVYsZ0JBQUEsRUFBQUcsUUFBQSxRQUNBRSxVQUFBLEVBQ0E3MUYsU0FBQW1sRyxNQU1BTyxHQUNBam5HLFVBQUEsVUFDQTJ0QixNQUFBLDJHQUNBOHBFLFFBQWFqMUYsSUFBQSxRQUFVazNGLFdBQUEsRUFBQW40RixTQUFBbWxHLEVBQUF0UCxVQUFBLElBSXZCOFAsR0FDQWxuRyxVQUFBLFdBQ0FxM0YsV0FLTzFwRSxNQUFBLGdCQUFBeXBFLFVBQUEsS0FDQXpwRSxNQUFBLGFBRVA4cEUsUUFBYWoxRixJQUFBLE9BQVNrM0YsV0FBQSxFQUFBbjRGLFNBQUF1bEcsSUFHdEJLLEdBSUE5UCxXQUNBMXBFLE1BQUEsZUFBQW5yQixJQUFBLFVBRUFtckIsTUFBQTY0RSxFQUFBaGtHLElBQUEsTUFFQTgyRixhQUFBLEVBQ0FJLFdBQUEsRUFDQXhDLFFBQUEsV0FDQUUsVUFBQSxFQUNBNzFGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBdUssRUFDQUgsRUFBQSxvQkFDQUEsRUFBQSx5QkFDQUEsRUFBQSxlQUFBSixFQUFBLFFBQ0FJLEVBQUEsa0JBQUFKLEdBQ0FJLEVBQUEsdUJBQUFKLEVBQUEsR0FDQUksRUFBQSx1QkFDTzVtRyxVQUFBLGdCQUFBMnRCLE1BQUEsTUFBQW5yQixJQUFBLFFBQ0F4QyxVQUFBLGtCQUFBMnRCLE1BQUEsbUNBQ0FBLE1BQUEsTUFBQW5yQixJQUFBLE1BQUFqQixTQUFBdWxHLElBQ0FuNUUsTUFBQSxnQkFhUCxPQVRBODRFLEVBQUF4Z0csS0FDQThxRSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F5SyxFQUNBQyxFQUNBRixFQUNBRyxJQUlBOVEsa0JBQUEsRUFDQWEsUUFBQSxjQUNBMzFGLFNBQUFrbEcsbUJDeElBdnJHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFxMkIsRUFBQSxnRkFFQUMsRUFBQSx5RUFLQWpLLEdBQ0FwOUYsVUFBQSxVQUNBMnRCLE1BQUEsb0JBRUE0d0UsR0FDQXYrRixVQUFBLFNBQ0FxM0YsV0FDTzFwRSxNQUFBMDVFLEVBQUFqUSxVQUFBLElBQ0F6cEUsTUFBQSwyQkFDQUEsTUFBQSwyQkFDQUEsTUFBQSx1Q0FDQUEsTUFBQSxZQUFBMDVFLEVBQUEsS0FBQUEsRUFBQTdrRyxJQUFBLFNBR1BpOEYsRUFBQTF0QixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBcURqRixRQUFBLE9BQ3JEbUYsRUFBQXRyQixFQUFBc3JCLFFBQ0EsSUFBTSxLQUVOakYsVUFBQSxJQUdBbUksR0FDQTV4RSxNQUFBLE1BQUFuckIsSUFBQSxPQUVBMDZGLEdBQ0FsOUYsVUFBQSxTQUNBMnRCLE1BQUEsT0FBQXk1RSxHQUVBRSxHQUNBMzVFLE1BQUF5NUUsRUFDQWhRLFVBQUEsR0FFQW1RLEdBQ0E1NUUsTUF2Q0EsZUE2Q0E2NUUsR0FDQWptRyxVQUFBZzlGLEVBQUFFLEVBQUFjLEVBQUFyQyxHQUpBdnZFLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixVQUFBLE9BQUE2N0YsRUFBQXFCLEVBQUFGLEVBQUErSSxJQUdBQSxHQUNBalEsV0FFQTFwRSxNQUFBLFVBQUFuckIsSUFBQSxRQUdBbXJCLE1BQUEsWUFBQW5yQixJQUFBLE1BQ0E2NUUsVUFBbUJyZ0YsS0FBQSxXQUduQjJ4QixNQUFBLGtCQUlBODVFLEdBQ0FwUSxXQUNPMXBFLE1BQUEsSUFBQXk1RSxJQUNBejVFLE1BQUEsS0FBQXk1RSxFQUFBLE1BQUFBLEVBQUEsUUFHUDlHLEdBQ0EzeUUsTUFBQSxVQUFBbnJCLElBQUEsT0FFQSs5RixHQUNBeEosZ0JBQUEsRUFDQUssVUFBQSxHQWNBLE9BWkFrSixFQUFBLytGLFdBRUF2QixVQUFBLE9BQ0FxM0YsV0FDUzFwRSxNQUFBeTVFLElBQ0F6NUUsTUE5RVQsaUJBaUZBNHlFLEdBRUFBLEVBQUFoL0YsVUFBQWltRyxFQUFBQyxFQUFBbkgsRUFBQWxELEVBQUFtQixFQUFBRSxFQUFBcEMsRUFBQWtELEVBQUFyQyxFQUFBcUssRUFBQUQsSUFHQXBRLFFBQUEsS0FDQTMxRixVQUNBZzlGLEdBckZBditGLFVBQUEsT0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxLQXNGQTQ2RixFQUNBcUIsRUFDQXBDLEVBQ0FtTCxFQUNBQyxFQUNBbkgsRUFDQWdILG9CQ2xHQXBzRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBd3VCLEdBQ0E1eEUsTUFBQSxnREFDQXlwRSxVQUFBLEdBRUFzSSxHQUNBM3VCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQTByQixrQkFDQTFyQixFQUFBc3JCLFFBQUEsVUFDQXRyQixFQUFBc3JCLFFBQUEsZUFFQXFMLEVBQUEzMkIsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFDQTFGLFdBQ08xcEUsTUFBQSxtQ0FDQUEsTUFBQSx1QkFHUGc2RSxFQUFBNTJCLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQThDcHZFLE1BQUEsNkJBQzlDLE9BQ0Ewb0Usa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFDQSw0L0JBWUFLLFFBQ0EsZ2ZBTUFKLFNBQ0EsMndLQXFEQW44RixVQUNBZytGLEdBRUF2L0YsVUFBQSxVQUNBMnRCLE1BQUEsbUJBR0EzdEIsVUFBQSxXQUNBdzJGLGNBQUEsV0FBQWgwRixJQUFBLElBQ0FqQixVQUNBZytGLEVBQ0FvSSxFQUNBNTJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBNnJCLG1CQUNBN3JCLEVBQUE0ckIsY0FDQStLLEtBSUExbkcsVUFBQSxXQUNBMnRCLE1BQUEsYUFBQW5yQixJQUFBLElBQ0E2NUUsU0FBQSxNQUNBOTZFLFVBQ0FvbUcsRUFDQUQsR0FFQXRRLFVBQUEsSUFHQVosY0FBQSxhQUFBaDBGLElBQUEsSUFDQWpCLFVBQ0FnK0YsRUFDQW9JLEVBQ0E1MkIsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE2ckIsbUJBQ0E3ckIsRUFBQTRyQixjQUNBK0ssS0FJQTFuRyxVQUFBLE9BQ0FxM0YsV0FFQTFwRSxNQUFBLHdCQUNBeXBFLFVBQUEsS0FFV3pwRSxNQUFBLFNBQ0FBLE1BQUEsVUFHWG9qRCxFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTZyQixtQkFDQTdyQixFQUFBNHJCLGNBQ0ErSyxHQUNBdDBGLE9BQUFzc0YsR0FDQXhJLFFBQUEsa0NDekpBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBRUEsOFdBTUFLLFFBRUEsdURBR0FKLFNBQ0EsMkRBRUFpRCxFQUFBLDhDQUNBQyxFQUFBN3ZCLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQTZDcHZFLE1BQUFnekUsSUFDN0NiLEdBQ0E5L0YsVUFBQSxRQUNBMnRCLE1BQUEsTUFBZW5yQixJQUFBLElBQ2Y2NUUsU0FBQWdqQixHQUVBdUksR0FDQTVuRyxVQUFBLFFBQ0EydEIsTUFBQSxjQUFBbnJCLElBQUEscUNBQ0E2NUUsU0FBQWdqQixHQUVBVSxHQUNBaHZCLEVBQUE2ckIsb0JBRUE1OEYsVUFBQSxTQUNBMnRCLE1BQUEsMEdBQ0F5cEUsVUFBQSxFQUNBSyxRQUFlajFGLElBQUEsV0FBQTQwRixVQUFBLEtBR2ZwM0YsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxNQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF3dkUsRUFBQWtyQixvQkFHQXR1RSxNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixVQUFBd3ZFLEVBQUFrckIsaUJBQUE2RCxFQUFBOEgsS0FHQWo2RSxNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsRUFBQThILEtBR0FqNkUsTUFBQSxLQUFBbnJCLElBQUEsU0FDQW0zRixZQUFBLE1BS0EzNUYsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxLQUFBbnJCLElBQUEsV0FDQWpCLFVBQUF1K0YsRUFBQS91QixFQUFBMHJCLHFCQUtBOXVFLE1BQUEsMkNBS0FBLE1BQUEsSUFBQWd6RSxJQUdBaHpFLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLEVBQ0FuQixZQUFBLGVBR0FzSCxFQUFBditGLFNBQUF3K0YsRUFFQSxJQUFBckIsR0FDQTErRixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBMnJFLGFBQUEsRUFHQS8zRixXQUVBb3NCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2NUUsU0FBQWdqQixFQUNBOTlGLFVBQUEsUUFBQTZSLE9BQUEyc0YsTUFLQSxPQUNBN0ssU0FBQSxNQUNBN1ksU0FBQWdqQixFQUNBbkksUUFBQSxPQUNBMzFGLFNBQUF3K0YsRUFBQTNzRixRQUNBMjlELEVBQUFzckIsUUFBQSxtQkFDQXRyQixFQUFBMHJCLG1CQUVBejhGLFVBQUEsV0FDQXVCLFVBQUFxL0YsRUFBQWxDLEdBQ0FwRixhQUFBLEVBQ0FqQyxXQUVBMXBFLE1BQUEsSUFBQWd6RSxFQUFBLCtDQUFBbitGLElBQUEsYUFHQW1yQixNQUFBLElBQUFnekUsRUFBQSx1REFBdUZuK0YsSUFBQSxtQkFHdkZtckIsTUFBQSxJQUFBZ3pFLEVBQUEsdURBQXVGbitGLElBQUEsdUJBS3ZGeEMsVUFBQSxRQUNBdzJGLGNBQUEsUUFDQWgwRixJQUFBLElBQ0EwMEYsUUFBQSxZQUNBMzFGLFdBRUFpMUYsY0FBQSxVQUNBTyxnQkFBQSxFQUNBRyxRQUFBLFlBQ0EzMUYsVUFBQXEvRixJQUVBQSxLQUlBanpFLE1BQUFnekUsRUFBQSxJQUFBbitGLElBQUEsSUFDQTgyRixhQUFBLEVBQUFJLFdBQUEsRUFDQXRDLFVBQUEsc0JDL0lBbDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUE4MkIsRUFBQSw0QkFDQSxPQUVBeHJCLFNBQ0EseXNEQXFDQTk2RSxXQUVBdkIsVUFBQSxVQUNBMnRCLE1BQUEsU0FFQW9qRCxFQUFBc3JCLFFBQ0EsSUFBVSxPQUFXakYsVUFBQSxJQUdyQnJtQixFQUFBb3JCLG1CQUVBbjhGLFVBQUEsU0FDQXEzRixXQUVXMXBFLE1BQUEsSUFBQW5yQixJQUFBLGFBRVg0MEYsVUFBQSxJQUdBcDNGLFVBQUEsUUFDQXEzRixXQUNXMXBFLE1BQUEsSUFBQWs2RSxJQUNBbDZFLE1BQUEsVUFDQUEsTUFBQSxJQUFBazZFLElBQ0FsNkUsTUFBQSxRQUFBazZFLE1BSVg3bkcsVUFBQSxTQUNBcTNGLFdBQ1cxcEUsTUFBQSxJQUFBazZFLElBQ0FsNkUsTUFBQSxVQUNBQSxNQUFBLFlBSVgzdEIsVUFBQSxTQUNBcTNGLFdBQ2ExcEUsTUFBQSxzQkFDQUEsTUFBQSxxREFFYnlwRSxVQUFBLHFCQ25GQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxJQUtBKzJCLEdBQ0E5bkcsVUFBQSxTQUNBMnRCLE1BQUEsSUFDQW5yQixJQUFBLElBQ0FqQixXQVJBdkIsVUFBQSxRQUNBMnRCLE1BQUEsZUFZQW82RSxHQUNBL25HLFVBQUEsU0FDQTJ0QixNQUFBb2pELEVBQUErcUIsYUFnQ0EsT0FDQTVFLFFBQUEsSUFDQTMxRixVQUNBdW1HLEdBRUE5bkcsVUFBQSxVQUNBcTNGLFVBQ0F0bUIsRUFBQXNyQixRQUFBLFVBQ0F0ckIsRUFBQXNyQixRQUFBLGlCQUdBMEwsR0FFQS9uRyxVQUFBLFVBQ0FxM0YsV0FFQTFwRSxNQUFBLDRCQUdBQSxNQUFBLDBYQXZCQTN0QixVQUFBLFdBQ0EydEIsTUFBQSx1aElBekJBM3RCLFVBQUEsVUFDQXEzRixXQUVBMXBFLE1BQUEsOERBR0FBLE1BQUEsZ3NOQUdBQSxNQUFBLHlCQUdBQSxNQUFBLDRCQUdBQSxNQUFBLGlMQUdBQSxNQUFBLDhEQW9DQTN0QixVQUFBLE9BQ0EydEIsTUFBQSx3RkM3RUF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFFQWkzQixHQUNBcjZFLE1BSEEsV0FHQW5yQixJQUZBLFdBR0FqQixVQUFBLFNBRUFpOEYsR0FDQXpzQixFQUFBc3JCLFFBQUEsc0JBQ0F0ckIsRUFBQXNyQixRQUNBLGFBUkEsWUFXQTk2RixVQUFBeW1HLEdBQ0E1USxVQUFBLE1BSUEsT0FDQVAsUUFBQTlsQixFQUFBNnFCLG9CQUNBdmYsVUFDQXloQixRQUFBLGlCQUNBTCxRQUFBLDBGQUNBQyxTQUVBLHFsQ0FlQW44RixTQUFBaThGLEVBQUFwcUYsU0FFQXBULFVBQUEsV0FDQXcyRixjQUFBLFdBQUFoMEYsSUFBQSxNQUNBakIsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUF5Q3B2RSxNQUFBLHVEQUV6QzN0QixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBb3BFLGdCQUFBLEVBQ0F4MUYsU0FBQWk4RixJQUVBcHFGLE9BQUFvcUYsSUFFQXpzQixFQUFBNHJCLGNBQ0E1ckIsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLG1CQUVBbjhGLFVBQUEsU0FDQTJ0QixNQXpEQSxXQXlEQW5yQixJQXhEQSxXQXlEQWpCLFVBQUF5bUcsR0FDQTVRLFVBQUEsc0JDNURBbDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUVBLElBQUF3dUIsR0FDQXYvRixVQUFBLFdBQ0FxM0YsV0FFQTFwRSxNQUFBLFNBQUFvakQsRUFBQTZxQixvQkFBQSxNQUNBcjZGLFVBQUF3dkUsRUFBQWtyQixvQkFHQXR1RSxNQUFBLG9CQUtBOHhFLEdBQ0F6L0YsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUNBd3ZFLEVBQUFrckIsaUJBQ0FzRCxJQUlBMEksR0FDQWpvRyxVQUFBLFdBQ0EydEIsTUFBQSxlQUFBbnJCLElBQUEsS0FDQTY1RSxVQUNBcWhCLFNBQ0Esa1BBS0FuOEYsVUFDQWcrRixJQUlBMkksR0FDQXY2RSxNQUFBLElBQUFvakQsRUFBQTZxQixvQkFBQSxjQUNBMUUsUUFBQSxNQUNBb0MsYUFBQSxFQUNBLzNGLFdBRUFvc0IsTUFBQSxJQUFBb2pELEVBQUE2cUIsb0JBQUFwNUYsSUFBQSxVQUNBbTNGLFlBQUEsS0FZQXdPLEdBQ0Fub0csVUFBQSxVQUNBMnRCLE1BQUEsV0FBQW5yQixJQUFBLElBQ0FqQixVQUFBZytGLElBRUEsT0FDQXJLLFNBQUEsWUFDQTdZLFNBQ0EsNEhBRUF3YSxRQUFBLFNBQ0F0MUYsVUFDQXd2RSxFQUFBMHJCLGtCQUNBOEMsRUFDQUUsRUFDQXdJLEVBQ0FDLEdBdEJBbG9HLFVBQUEsT0FDQTJ0QixNQUFBLFlBQUFuckIsSUFBQSxJQUNBNjVFLFVBQWUwaEIsZUFBQSxVQUNmbEgsUUFBQSxXQXFCQXNSLG9CQzVFQWp0RyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsT0FDQTJCLFFBQUEsWUFBQTlsQixFQUFBNHFCLFNBQUEsTUFDQXRmLFNBQUEseXUrREFzQ0E5NkUsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBLE9BQUFuckIsSUFBQSxRQUVBdXVFLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBNHJCLGVBRUFodkUsTUFBQSxLQUFrQm5yQixJQUFBLEtBQ2xCMDBGLFFBQUEsdUJDcERBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFxM0IsR0FDQXIzQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsa0JBQXlDdHVFLE1BQUEsU0FHekMwNkUsR0FDQWpSLFVBQUEsRUFDQTcxRixXQUVBb3NCLE1BQUEsYUFLQSxPQUNBMHVELFVBQ0FvaEIsUUFDQSwwS0FFQUMsU0FDQSxrbENBZUF4RyxRQUFBLDBCQUNBMzFGLFdBRUF2QixVQUFBLFdBQ0F3MkYsY0FBQSxXQUFBaDBGLElBQUEsSUFDQWpCLFVBQ0F3dkUsRUFBQWlzQix1QkFFQWg5RixVQUFBLFNBQ0FxM0YsV0FDZTFwRSxNQUFBLE1BQUFuckIsSUFBQSxRQUNBbXJCLE1BQUEsTUFBQW5yQixJQUFBLFlBTWZtckIsTUFBQSxnQ0FDQTJyRSxhQUFBLEVBQ0FsQyxVQUFBLEVBQ0E3MUYsV0FDV29zQixNQUFBLHlCQUFBeXBFLFVBQUEsR0FDWGlSLEVBQUE5bUcsU0FBQSxNQUlBb3NCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FqQixTQUFBNm1HLEVBQ0FoUixVQUFBLEVBQ0FLLE9BQUE0USxJQUdBMTZFLE1BQUEsTUFBbUJuckIsSUFBQSxJQUNuQmpCLFNBQUE2bUcsRUFDQWhSLFVBQUEsRUFDQUssT0FBQTRRLElBSUExNkUsTUFBQSxLQUNBeXBFLFVBQUEsRUFDQUssT0FBQTRRLEdBRUF0M0IsRUFBQXNyQixRQUFBLG1CQUErQixvQkFDL0J0ckIsRUFBQXNyQixRQUFBLFlBQ0FqcEYsT0FBQWcxRixvQkNwRkFsdEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBdVdBLE9BQ0E4bEIsUUFBQSwyQkFDQXhhLFVBQ0FvaEIsUUF6V0Esa0VBMFdBSyxRQXpXQSw0REEwV0FKLFNBeFdBLDAzMkJBeVdBNEssT0FSQSxpQkFVQS9tRyxXQUVBdkIsVUFBQSxVQUNBMnRCLE1BQUEsT0FDQW5yQixJQUFBLE9BQ0FqQixVQUFBLFNBRUF3dkUsRUFBQW9yQixtQkFFQW44RixVQUFBLFNBQ0FvM0YsVUFBQSxFQUNBQyxXQUlBMXBFLE1BQUEsMERBSUFBLE1BQUEsd0RBQ0F5cEUsVUFBQSxLQUtBenBFLE1BQUEsZ0NBS0FBLE1BQUEscUNBS0F1cEUsUUFBQSxxQkNsWkFoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFNBQ0EsbzBmQTJNQTZhLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUE0ckIsY0FDQTVyQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsb0JBR0F0dUUsTUFBQSx1REFFQW9qRCxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsdUNDNU5BdGhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBNkJBc3JCLEVBQUF0ckIsRUFBQXNyQixRQUFBLFNBT0FrTSxFQUFBeDNCLEVBQUEra0IsUUFBQS9rQixFQUFBbXJCLGtCQUFrRDlFLFVBQUEsSUFDbERxSCxFQUFBMXRCLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUFxRC9FLFVBQUEsSUFNckRxSCxFQUFBbDlGLFNBQUEwRSxNQUpBakcsVUFBQSxRQUNBMnRCLE1BQUEsd0VBQ0F5cEUsVUFBQSxJQXVCQSxPQUNBbEMsU0FBQSxXQUNBN1ksVUFqRUFvaEIsUUFDQSxvZEFPQWxvQixLQUVBLGdyQkFhQW1vQixTQUNBLHFJQTBDQW44RixXQXJCQXZCLFVBQUEsV0FDQXEzRixXQUNPMXBFLE1BQUEsUUFDQUEsTUFBQSxLQUFBeXBFLFVBQUEsSUFDQXpwRSxNQUFBLEtBQUF5cEUsVUFBQSxJQUNBenBFLE1BQUEsVUFDQUEsTUFBQSxZQUtQM3RCLFVBQUEsV0FDQXEzRixXQUNPMXBFLE1BQUEsZ0JBQ0FBLE1BQUEsSUFBQXlwRSxVQUFBLEtBVVBpRixFQUNBdHJCLEVBQUF5ckIsc0JBdkNBeDhGLFVBQUEsU0FDQTJ0QixNQUFBLDRCQXdDQW9qRCxFQUFBMnJCLFlBQ0E2TCxFQUNBOUosR0FDTzl3RSxNQUFBLHdCQzdFUHp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxPQUNBc2xCLGtCQUFBLEVBQ0FuQixTQUFBLFFBQ0EyQixRQUFBLE9BQUE5bEIsRUFBQTRxQixTQUNBdGYsVUFDQTlHLEtBRUEsNk9BQ0Ftb0IsU0FDQSxvcEJBWUFuOEYsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBLDZ6QkFxQkFuckIsSUFBQSxPQUVBdXVFLEVBQUFzckIsUUFBQSxPQUFzQixLQUN0QnRyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFDQW5yQixJQUFBLFdBQ0E0MEYsVUFBQSxJQUdBcDNGLFVBQUEsUUFDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUNBMDBGLFFBQUEsTUFDQUUsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQXEzRixXQUNhMXBFLE1BQUEsZ0JBQ0FBLE1BQUEsY0FFYnlwRSxVQUFBLElBR0FwM0YsVUFBQSxTQUNBcTNGLFdBQ2ExcEUsTUFBQSx1Q0FDQUEsTUFBQSxpQkFDQUEsTUFBQSxlQUVieXBFLFVBQUEsSUFHQUYsUUFBQSxxQkNsRkFoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNMLFNBQ0EseWxCQVVBOTZFLFVBQ0F3dkUsRUFBQXNyQixRQUFBLDRCQ2RBbmhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUF5M0IsRUFBQSwyaURBbUJBMUksR0FDQTkvRixVQUFBLFFBQ0EydEIsTUFBQSxVQUFtQm5yQixJQUFBLE1BQ25CNjVFLFNBQUFtc0IsR0FFQXZFLEdBQ0F0MkUsTUFBQSxNQUFlbnJCLElBQUEsS0FHZmc5RixHQUNBbkksV0FDTzFwRSxNQUFBLFNBQ0FBLE1BQUEsa0RBQ0FBLE1BQUEsaUJBQXFCeXBFLFVBQUEsS0FHNUJxUixHQUFBMTNCLEVBQUFrckIsaUJBQUE2RCxFQUFBTixHQUNBa0osR0FDQWxKLEVBQ0F6dUIsRUFBQTByQixrQkFDQTFyQixFQUFBc3JCLFFBQ0EsVUFDQSxVQUVBdEYsZ0JBQUEsSUFHQWtOLEdBRUFqa0csVUFBQSxTQUNBdUIsU0FBQWtuRyxFQUNBcFIsV0FFQTFwRSxNQUFBLGtCQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLElBR0F6cEUsTUFBQSxrQkFBQW5yQixJQUFBLE1BQ0E0MEYsVUFBQSxJQUdBenBFLE1BQUEsa0JBQWlDbnJCLElBQUEsTUFDakM0MEYsVUFBQSxJQUdBenBFLE1BQUEsa0JBQUFuckIsSUFBQSxNQUNBNDBGLFVBQUEsSUFHQXpwRSxNQUFBLGtCQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLElBR0F6cEUsTUFBQSxVQUFBbnJCLElBQUEsSUFDQTQwRixVQUFBLElBR0F6cEUsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixvQkFHQXR1RSxNQUFBLElBQUFuckIsSUFBQSxNQUdBbXJCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsb0JBR0F0dUUsTUFBQSxTQUNBcHNCLFlBQ0E2MUYsVUFBQSxJQUdBenBFLE1BQUEsbUJBQ0Fwc0IsWUFDQTYxRixVQUFBLE1BS0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsNEVBQ0F5cEUsVUFBQSxJQUdBenBFLE1BQUEsV0FBQW9qRCxFQUFBaXJCLGVBQUEsZ0RBQ0EzZixTQUFBLGtDQUNBK2EsVUFBQSxFQUNBNzFGLFVBQ0F3dkUsRUFBQTByQixtQkFFQXo4RixVQUFBLFNBQ0EydEIsTUFBQSw4Q0FDQXlwRSxVQUFBLEtBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsV0FBQW5yQixJQUFBLFVBQ0FqQixVQUFBd3ZFLEVBQUFrckIsa0JBQ0E3RSxVQUFBLE1BS0FwM0YsVUFBQSxXQUNBdzJGLGNBQUEsTUFBQWgwRixJQUFBLHVCQUFxRG0zRixZQUFBLEVBQ3JEdkMsVUFBQSxFQUNBNzFGLFVBQUF3dkUsRUFBQWdzQixjQUdBcHZFLE1BQUEsVUFDQXlwRSxVQUFBLElBR0F6cEUsTUFBQSxhQUNBbnJCLElBQUEsWUFDQWcyRixZQUFBLGNBQ0FqM0YsV0FFQW9zQixNQUFBLFFBQ0FuckIsSUFBQSxJQUNBeEMsVUFBQSxjQVFBLE9BSEE4L0YsRUFBQXYrRixTQUFBbW5HLEVBQ0F6RSxFQUFBMWlHLFNBQUFtbkcsR0FHQXhULFNBQUEsV0FDQTJCLFFBQUEsVUFDQXhhLFNBQUFtc0IsRUFDQWpuRyxTQUFBbW5HLG1CQ3pKQXh0RyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeW5CLFlBQUEsTUFDQWozRixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEscUJBSUFBLE1BQUEsb0JBQWlDbnJCLElBQUEsSUFDakNnMkYsWUFBQSxTQUlBN3FFLE1BQUEsZ0JBQ0FuckIsSUFBQSxXQUNBZzJGLFlBQUEsT0FDQWEsY0FBQSxFQUNBTSxZQUFBLHFCQ25CQXorRixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBd3RCLEdBQ0F2K0YsVUFBQSxTQUFBbzNGLFVBQUEsRUFDQUMsV0FFQTFwRSxNQUFBLG1CQUVBb2pELEVBQUEyckIsY0FJQSxPQUNBckcsa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFBQSxxUEFLQUMsU0FBQSx1TUFHQUksUUFBQSxzQ0FFQTVHLFFBQUEsT0FDQTMxRixVQUNBd3ZFLEVBQUFzckIsUUFBQSxlQUNBdHJCLEVBQUFzckIsUUFDQSxJQUNBLEtBRUFqRixVQUFBLEtBSUFwM0YsVUFBQSxXQUNBdzJGLGNBQUEsa0JBQUFoMEYsSUFBQSxVQUNBMDBGLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUFpc0IseUJBSUFoOUYsVUFBQSxRQUNBdzJGLGNBQUEsa0JBQUFoMEYsSUFBQSxJQUNBakIsV0FFQWkxRixjQUFBLHNCQUVBemxCLEVBQUFpc0IseUJBSUFoOUYsVUFBQSxXQUNBMnRCLE1BQUEsdUJBR0EzdEIsVUFBQSxPQUNBMnRCLE1BQUEsUUFBQW5yQixJQUFBLElBQ0E2NUUsVUFBbUIwaEIsZUFBQSxtQ0FHbkIvOUYsVUFBQSxPQUNBMnRCLE1BQUEsbUJBR0E2b0UsY0FBQSxRQUFBaDBGLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWlzQix3QkFFQWpzQixFQUFBb3JCLGtCQUNBb0Msb0JDdEVBcmpHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBRUEsNklBRUFLLFFBQ0EsaUJBQ0FKLFNBQ0EscVJBS0FpRCxFQUFBLDJCQUNBYixHQUNBOS9GLFVBQUEsUUFDQTJ0QixNQUFBLE1BQWVuckIsSUFBQSxJQUNmNjVFLFNBQUFnakIsR0FFQVUsR0FDQWh2QixFQUFBK2tCLFFBQUEva0IsRUFBQTRyQixlQUNPbEYsUUFBU2oxRixJQUFBLFdBQUE0MEYsVUFBQSxNQUVoQnAzRixVQUFBLFNBQ0FxM0YsV0FFQTFwRSxNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsaUJBQUE2RCxPQUtBOS9GLFVBQUEsV0FDQTJ0QixNQUFBLE1BQUFvakQsRUFBQTRxQixXQUdBaHVFLE1BQUEsSUFBQW9qRCxFQUFBNHFCLFdBR0FodUUsTUFBQW9qRCxFQUFBNHFCLFNBQUEsT0FBQTVxQixFQUFBNHFCLFdBR0FtRSxFQUFBditGLFNBQUF3K0YsRUFFQSxJQUFBYSxFQUFBN3ZCLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQTZDcHZFLE1BQUFnekUsSUFFN0NqQyxHQUNBMStGLFVBQUEsU0FDQTJ0QixNQUFBLFlBQUEyckUsYUFBQSxFQUdBLzNGLFdBQ0Fvc0IsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTY1RSxTQUFBZ2pCLEVBQ0E5OUYsVUFBQSxRQUFBNlIsT0FBQTJzRixNQUlBLE9BQ0E3SyxTQUFBLFFBQ0E3WSxTQUFBZ2pCLEVBQ0FuSSxRQUFBLE9BQ0EzMUYsU0FBQXcrRixFQUFBM3NGLFFBQ0EyOUQsRUFBQXNyQixRQUFBLFdBRUFyOEYsVUFBQSxXQUNBMnRCLE1BQUEsUUFBQWd6RSxFQUFBLG1DQUFBbitGLElBQUEsUUFDQTgyRixhQUFBLEVBQ0EvM0YsVUFBQXEvRixFQUFBbEMsS0FHQS93RSxNQUFBLGFBQ0F5cEUsVUFBQSxFQUNBNzFGLFdBRUF2QixVQUFBLFdBQ0EydEIsTUEvQkEsMEJBK0JBbnJCLElBQUEsUUFDQTgyRixhQUFBLEVBQ0EvM0YsVUFBQW05RixPQUtBMStGLFVBQUEsUUFDQXcyRixjQUFBLFFBQ0FoMEYsSUFBQSxJQUNBMDBGLFFBQUEsWUFDQTMxRixXQUVBaTFGLGNBQUEsVUFDQU8sZ0JBQUEsRUFDQUcsUUFBQSxZQUNBMzFGLFVBQUFxL0YsSUFFQUEsS0FJQTVnRyxVQUFBLE9BQ0EydEIsTUFBQWd6RSxFQUFBLElBQUFuK0YsSUFBQSxJQUNBODJGLGFBQUEsRUFBQUksV0FBQSxFQUNBdEMsVUFBQSxzQkMxR0FsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNsQixrQkFBQSxFQUNBOTBGLFdBRUFpMUYsY0FDQSwrRkFDQWgwRixJQUFBLElBQWV1MEYsZ0JBQUEsRUFDZjFhLFVBRUFvaEIsUUFDQSxna0NBYUFLLFFBQ0EsNEJBRUFKLFNBQ0EsbXhDQWFBbjhGLFdBRUF2QixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixrQkFDQTdFLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixrQkFDQTdFLFVBQUEsSUFHQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWtyQixrQkFDQTdFLFVBQUEsR0FFQXJtQixFQUFBNHJCLGNBQ0E1ckIsRUFBQXlyQix1QkFHQXpyQixFQUFBeXJCLHVDQ2hFQXRoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBeXVCLEdBQ0F4L0YsVUFBQSxXQUNBcTNGLFdBQ08xcEUsTUFBQSxVQUNBQSxNQUFBLE9BQVluckIsSUFBQSxNQUNabXJCLE1BQUEsV0FBQW9qRCxFQUFBNnFCLHVCQUdQNEosR0FDQXpPLGdCQUFBLEVBQ0FGLFFBQUEsV0FDQXhhLFVBQ0F5aEIsUUFDQSxrSkFHQTFHLFVBQUEsRUFDQUYsUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQTByQixtQkFFQXo4RixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsaUJBQUF1RCxHQUNBbkksV0FDVzFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLFFBS1htckIsTUFBQSxhQUFBbnJCLElBQUEsTUFBQXUwRixnQkFBQSxFQUFBNEMsWUFBQSxFQUNBcDRGLFVBQUFpK0YsS0FHQXgvRixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsaUJBQUF1RCxHQUNBbkksV0FDVzFwRSxNQUFBLFNBQUFuckIsSUFBQSxVQUE4QmszRixXQUFBLElBRTlCL3JFLE1BQUEsWUFBQW5yQixJQUFBLFVBQWlDazNGLFdBQUEsSUFFakMvckUsTUFBQSx1QkFFQUEsTUFBQSx5QkFLWDN0QixVQUFBLFNBQ0EydEIsTUFBQSxnRUFJQTN0QixVQUFBLFNBQ0EydEIsTUFBQSw0QkFDQXlwRSxVQUFBLEdBRUFvSSxJQUlBLE9BQ0F0SyxTQUFBLGFBQ0EzekYsVUFDQXd2RSxFQUFBMHJCLG1CQUVBOXVFLE1BQUFvakQsRUFBQTZxQixvQkFBQSxRQUFnRHRDLGFBQUEsRUFDaEQ5MkYsSUFBQSxJQUNBakIsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBb2pELEVBQUE2cUIsc0JBR0F4RSxVQUFBLElBR0F6cEUsTUFBQW9qRCxFQUFBNnFCLG9CQUFBLE1BQUFwNUYsSUFBQSxNQUEwRDgyRixhQUFBLEVBQzFELzNGLFdBRUF2QixVQUFBLFlBQ0EydEIsTUFBQW9qRCxFQUFBNnFCLG9CQUNBbkUsT0FBQStOLElBR0FwTyxVQUFBLElBR0FGLFFBQUEsNkJDekZBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0Fta0IsU0FBQSxPQUNBN1ksVUFDQW9oQixRQUNBLGdYQU1BSyxRQUNBLHVEQUNBSixTQUNBLDRUQU1BbjhGLFdBQ0F2QixVQUFBLE9BQ0EydEIsTUFBQSxNQUNBbnJCLElBQUEsTUFDQTQwRixVQUFBLEtBRUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsZUFDQW5yQixJQUFBLElBQ0FqQixXQUFvQm9zQixNQUFBLFNBRXBCM3RCLFVBQUEsU0FDQTJ0QixNQUFBLG9CQUNBbnJCLElBQUEsT0FFQXV1RSxFQUFBb3JCLG1CQUVBbjhGLFVBQUEsT0FDQTJ0QixNQUFBLGVBQ0F5cEUsVUFBQSxJQUVBcDNGLFVBQUEsU0FDQW8zRixVQUFBLEVBQ0FDLFdBQ1cxcEUsTUFBQSw2REFDQUEsTUFBQSxnREFDQUEsTUFBQSxrREFDQUEsTUFBQSwyQ0FHWG9qRCxFQUFBMHJCLG9DQ2xEQXZoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBNDNCLEdBQ0FsTCxRQUNBLDhDQUNBSyxRQUNBLHlCQUNBSixTQUNBLDJGQUdBa0wsR0FDQTVvRyxVQUFBLFFBQ0EydEIsTUFBQSxPQUNBbnJCLElBQUEsSUFDQTY1RSxTQUFBc3NCLEdBWUFsSyxHQUNBeitGLFVBQUEsU0FDQXVCLFVBQUFxbkcsR0FDQXZSLFdBQ08xcEUsTUFBQSxLQUFBbnJCLElBQUEsT0FDQW1yQixNQUFBLElBQUFuckIsSUFBQSxPQUdQdTlGLEdBQ0FodkIsRUFBQTJyQixZQUNBM3JCLEVBQUEwckIsa0JBQ0ExckIsRUFBQXlyQixxQkFDQWlDLEdBckJBOXdFLE1BQUEsdUJBQUEyckUsYUFBQSxFQUNBbEMsVUFBQSxFQUNBNzFGLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQSxVQW9CQSxPQURBaTdFLEVBQUFybkcsU0FBQXcrRixHQUVBN0ssU0FBQSxTQUNBN1ksU0FBQXNzQixFQUNBcG5HLFNBQUF3K0YsbUJDN0NBN2tHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBS0E4M0IsR0FFQTdvRyxVQUFBLFdBQ0EydEIsTUFBQSxrQkFHQW03RSxHQUVBOW9HLFVBQUEsV0FDQTJ0QixNQUFBLFNBQ0F1cEUsUUFBQSxVQUdBNlIsR0FFQS9vRyxVQUFBLFdBQ0EydEIsTUFBQSxzQkEyQkE4d0UsR0FDQXorRixVQUFBLFNBQ0FxM0YsV0FFQTFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUdBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE1BR0FtckIsTUFBQSxJQUFBbnJCLElBQUEsTUFHQTAwRixRQUFBLEtBQ0EzMUYsV0F4QkF2QixVQUFBLFFBQ0EydEIsTUFBQSxtQkF0Q0EzdEIsVUFBQSxXQUNBMnRCLE1BQUEsd2JBK0RBazdFLEVBQ0FDLEVBQ0FDLElBSUEsT0FDQTFTLGtCQUFBLEVBQ0FoYSxVQUNBb2hCLFFBQ0EsdTJFQUNBSyxRQUNBLGtZQUVBdjhGLFVBQ0F3dkUsRUFBQTByQixrQkFDQTFyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFzckIsUUFDQSxJQUNBLEtBRUFqRixVQUFBLEtBSUFwM0YsVUFBQSxXQUNBdzJGLGNBQUEsdUNBQUFoMEYsSUFBQSxLQUVBaThGLEdBN0RBeitGLFVBQUEsVUFDQTJ0QixNQUFBLDhRQThEQWs3RSxFQUNBQyxFQUNBQyxHQXZFQS9vRyxVQUFBLFNBQ0EydEIsTUFBQSxzcEJBaUJBM3RCLFVBQUEsUUFDQTJ0QixNQUFBLGNBdURBb2pELEVBQUEyckIsOEJDckdBeGhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBaUNBaTRCLEVBQUEseUJBQ0FDLEVBQUEsOENBQ0EsT0FDQS9ULFNBQUEscUJBQ0E3WSxVQWhDQW9oQixRQUNBLGd1Q0FzQkFLLFFBQ0Esd0NBQ0FKLFNBQ0Esb0ZBT0E3RyxRQUFBbVMsRUFDQTlSLFFBQUEsS0FDQTMxRixXQXZDQXZCLFVBQUEsV0FDQTJ0QixNQUFBLHdFQXdDQW9qRCxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQTRyQixjQUNBNXJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBcTNGLFdBRUExcEUsTUFBQSxLQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLE1BQ0EzMUYsVUFBQXd2RSxFQUFBa3JCLG9CQUdBdHVFLE1BQUEsSUFBQW5yQixJQUFBLFdBQ0EwMEYsUUFBQSxrQkFLQWwzRixVQUFBLE9BQ0EydEIsTUFBQSxJQUNBbnJCLElBQUEsSUFDQWpCLFdBRUF2QixVQUFBLGNBQ0FxM0YsV0FDZTFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLFVBTWZ4QyxVQUFBLFFBQ0EydEIsTUFBQSxJQUFBczdFLEVBQUE1bUcsTUFBQSxLQUFBcXVDLEtBQUEsWUFBQWx1QyxJQUFBLFFBQTJFbTNGLFlBQUEsRUFDM0V0ZCxTQUFBNHNCLEVBQUFwUyxRQUFBbVMsRUFDQXpuRyxVQUNBd3ZFLEVBQUFpc0IseUJBSUFydkUsTUFBQSxNQUFBb2pELEVBQUE2cUIsb0JBQ0F4RSxVQUFBLHFCQ3JGQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxPQUNBbWtCLFNBQUEsTUFDQTdZLFVBQ0FvaEIsUUFDQSxzVkFPQUMsU0FFQSxxSEFHQUksUUFDQSxjQUVBNUcsUUFBQSxVQUNBTCxRQUFBLGVBQ0F0MUYsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBLHlCQUNBeXBFLFVBQUEsR0FFQXJtQixFQUFBc3JCLFFBQ0EsU0FDQSxVQUVBOTZGLFVBQUEsV0FJQXZCLFVBQUEsU0FDQTJ0QixNQUFBLDJCQUlBM3RCLFVBQUEsT0FDQTJ0QixNQUFBLGtCQUdBM3RCLFVBQUEsT0FDQTJ0QixNQUFBLGtCQUNBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLHFCQUFBeXBFLFVBQUEsR0FFQXJtQixFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBMkNsOEYsVUFBQSxTQUFBbzNGLFVBQUEsSUFDM0NybUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDakYsUUFBQSxRQUU1Q2wzRixVQUFBLFNBQ0EydEIsTUFDQSwySEFJQXlwRSxVQUFBLElBR0F6cEUsTUFBQSwyQkNqRUF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQW00QixHQUNBbHBHLFVBQUEsVUFDQTJ0QixNQUFBLGtDQU1BMHZFLEdBQ0FyOUYsVUFBQSxTQUNBMnRCLE1BQUEsOEJBQ0F5cEUsVUFBQSxHQUVBcUgsRUFBQTF0QixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBK0NqRixRQUFBLE9BZ0IvQ2lTLEdBQ0FucEcsVUFBQSxXQUNBdzJGLGNBQUEsa0JBQ0FoMEYsSUFBQSxVQUNBakIsV0FaQXZCLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQSxPQUFBODdGLEVBQUFvQixFQUFBeUssR0FsQkFscEcsVUFBQSxVQUNBMnRCLE1BQUEseUJBMkJBb2pELEVBQUFpc0Isd0JBR0EsT0FDQTlILFNBQUEsUUFDQTdZLFVBQ0FvaEIsUUFBQSwrREFDQUssUUFBQSxzQkFDQUosU0FBQSx1ZEFFQW44RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQWEsR0EvQkFyOUYsVUFBQSxPQUNBcThFLFVBQWEwaEIsZUFBQSxlQUNicHdFLE1BQUEsZ0JBQ0FuckIsSUFBQSxLQThCQWk4RixFQUNBeUssR0F2QkF2N0UsTUFBQSxTQUNBeXBFLFVBQUEsR0F3QkErUixvQkNwREFqdUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXE0QixFQUFBLDhsQ0FRQUMsRUFBQXQ0QixFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxJQUdBa1MsRUFBQXY0QixFQUFBc3JCLFFBQ0EsU0FDQSxVQUVBakYsVUFBQSxLQUdBcUgsR0FDQXorRixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFdBQWdCb3NCLE1BQUEsUUFFaEJneUUsR0FDQTMvRixVQUFBLFNBQUEydEIsTUFBQSxZQUVBMDBFLEdBQ0FyaUcsVUFBQSxXQUNBdzJGLGNBQUEsbURBQUFoMEYsSUFBQSxPQUNBNjVFLFNBQUEsK0RBQ0E5NkUsVUFDQXd2RSxFQUFBZ3NCLFlBRUEvOEYsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0E2NUUsU0FBQStzQixFQUNBN25HLFVBQUFrOUYsRUFBQWtCLElBRUEwSixFQUFBQyxJQUdBLE9BQ0FqVCxrQkFBQSxFQUNBUSxRQUFBLFNBQ0F4YSxTQUFBK3NCLEVBQ0FsUyxRQUFBLGtDQUNBMzFGLFVBQ0E4bkcsRUFBQUMsRUFBQXY0QixFQUFBd3JCLG9CQUNBa0MsRUFBQWtCLEVBQ0E1dUIsRUFBQTJyQixZQUNBMkYsR0FFQXJpRyxVQUFBLFFBQ0EydEIsTUFBQSxlQUFBbnJCLElBQUEsT0FDQTY1RSxTQUFBK3NCLEVBQ0E3bkcsVUFDQWs5RixFQUFBa0IsRUFDQTBKLEVBQUFDLEVBQUF2NEIsRUFBQXdyQixvQkFDQThGLHNCQy9EQW5uRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBdzRCLEVBQUF4NEIsRUFBQXNyQixRQUNBLElBQ0EsS0FFQTk2RixVQUFBLFVBR0EsT0FDQWkzRixZQUFBLE1BQUFwQixVQUFBLEVBQ0E3MUYsVUFDQXd2RSxFQUFBc3JCLFFBQUEsVUFDQXRyQixFQUFBc3JCLFFBQ0EsVUFDQSxLQUVBakYsVUFBQSxHQUNBNzFGLFVBQ0Fnb0csTUFLQXZwRyxVQUFBLE9BQ0EydEIsTUFBQSxnQ0FDQXlwRSxVQUFBLEtBR0FwM0YsVUFBQSxRQUNBMnRCLE1BQUEsNkRBR0EzdEIsVUFBQSxXQUNBMnRCLE1BQUEsK0JBR0EzdEIsVUFBQSxVQUNBMnRCLE1BQUEsdUJBR0EzdEIsVUFBQSxTQUNBMnRCLE1BQUEsb0JBRUFvakQsRUFBQTRyQixnQ0MzQ0F6aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBY0EsT0FDQW1rQixTQUFBLFdBQ0EyQixRQUFBLGdCQUNBeGEsVUFDQXFoQixTQUdBLHdEQUNBRCxRQUNBLG15QkFnQkFLLFFBQ0Esc0RBRUF2OEYsVUFDQXd2RSxFQUFBMHJCLGtCQUNBMXJCLEVBQUEyckIsWUFDQTNyQixFQUFBb3JCLG1CQTNDQW44RixVQUFBLFdBQ0EydEIsTUFBQSx1QkFHQTN0QixVQUFBLFdBQ0EydEIsTUFBQSxVQUFBbnJCLElBQUEsdUJDUEF0SCxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUFBd3VCLEdBQ0E1eEUsTUFBQSxvQ0FFQWt4RSxHQUNBNytGLFVBQUEsT0FBQTJ0QixNQUFBLGlCQUVBOHdFLEdBQ0F6K0YsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNEMsR0FDQXhILFdBRUExcEUsTUFBQSxLQUFBbnJCLElBQUEsTUFHQW1yQixNQUFBLEtBQUFuckIsSUFBQSxLQUVBdXVFLEVBQUEra0IsUUFBQS9rQixFQUFBbXJCLGtCQUEyQ2hGLFFBQUEsT0FDM0NubUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDakYsUUFBQSxTQUc1Q3FILEdBQWdCbEgsVUFBQXRtQixFQUFBNnJCLG1CQUFBN3JCLEVBQUE0ckIsZ0JBQ2hCLE9BQ0F6SCxTQUFBLDZCQUNBbUIsa0JBQUEsRUFDQWhhLFNBQ0Esa2dCQVFBOTZFLFVBQ0F3dkUsRUFBQTByQixrQkFDQTFyQixFQUFBc3JCLFFBQUEsVUFBK0I5NkYsVUFBQXM5RixLQUMvQjl0QixFQUFBc3JCLFFBQ0EsT0FDQSxRQUVBOTZGLFdBRUF2QixVQUFBLFNBQ0EydEIsTUFBQSxpQkFLQW9qRCxFQUFBc3JCLFFBQ0EsdUJBQ0EsR0FFQXRGLGdCQUFBLEVBQ0ExYSxTQUFBLGtCQUNBd2EsUUFBQTlsQixFQUFBNnFCLHVCQUlBNTdGLFVBQUEsU0FDQTJ0QixNQUFBLG9CQUFBbnJCLElBQUEsVUFDQWpCLFVBQ0F3dkUsRUFBQWtyQixrQkFFQWo4RixVQUFBLFFBQ0FxM0YsV0FDZTFwRSxNQUFBLFVBQ0FBLE1BQUEsT0FBVW5yQixJQUFBLFVBS3pCcThGLEdBRUE3K0YsVUFBQSxVQUFBMnRCLE1BQUEsWUFFQTR4RSxHQUdBNXhFLE1BQUEscURBR0EzdEIsVUFBQSxXQUNBdzJGLGNBQUEsV0FBQWgwRixJQUFBLE9BQTRDbTNGLFlBQUEsRUFDNUN6QyxRQUFBLFlBQ0EzMUYsVUFDQXd2RSxFQUFBaXNCLHVCQUVBaDlGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFDQSxPQUNBZytGLEVBQ0F4dUIsRUFBQXlyQixxQkFDQWlDLEVBQ0FGLE9BTUF2K0YsVUFBQSxRQUNBdzJGLGNBQUEsa0JBQUFoMEYsSUFBQSxJQUFpRG0zRixZQUFBLEVBQ2pEekMsUUFBQSxXQUNBMzFGLFdBQ1dpMUYsY0FBQSxzQkFDWHpsQixFQUFBaXNCLHlCQUlBeEcsY0FBQSxZQUFBaDBGLElBQUEsSUFDQTAwRixRQUFBLFFBQ0EzMUYsVUFBQXd2RSxFQUFBaXNCLHlCQUdBeEcsY0FBQSxNQUFBaDBGLElBQUEsSUFDQWpCLFVBQUF3dkUsRUFBQWlzQix5QkFHQXJ2RSxNQUFBLE1BRUE4d0UsRUFDQUYsb0JDMUhBcmpHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBbUJBb3JCLEdBQ0FuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFrckIsbUJBR0F1TixHQUNBeHBHLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLGtCQUNBN0UsVUFBQSxHQUdBcVMsR0FDQXpwRyxVQUFBLE9BQ0EydEIsTUFBQSxtQkFDQXlwRSxVQUFBLEdBR0FzUyxHQUNBLzdFLE1BQUFvakQsRUFBQTRxQixTQUFBLElBQUF2RSxVQUFBLEdBa0NBLE9BQ0EvYSxVQXpFQW9oQixRQUNBLDhTQUtBbG9CLEtBQ0EsMEJBQ0F1b0IsUUFDQSxtQkFpRUF2OEYsV0FoQ0F2QixVQUFBLFFBQ0F3MkYsY0FBQSxjQUFBaDBGLElBQUEsSUFDQWpCLFVBQ0F3dkUsRUFBQWdzQixXQUNBaHNCLEVBQUF3ckIsdUJBS0F2OEYsVUFBQSxXQUNBdzJGLGNBQUEsVUFBQWgwRixJQUFBLEtBQ0FqQixVQUNBd3ZFLEVBQUFnc0IsWUFFQXB2RSxNQUFBLEtBQUFuckIsSUFBQSxLQUNBakIsVUFDQWtvRyxFQUNBQyxFQUNBMzRCLEVBQUE0ckIsY0FDQTVyQixFQUFBeXJCLHdCQUlBN3VFLE1BQUEsSUFBQW9wRSxnQkFBQSxFQUNBeDFGLFVBQUFrb0csSUFFQTE0QixFQUFBd3JCLHNCQVNBa04sR0FoRUF6cEcsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0E0MEYsVUFBQSxJQWdFQStFLEVBQ0FxTixFQUNBRSxFQUNBMzRCLEVBQUE0ckIsY0FDQTVyQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsdUNDdEZBdGhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUF1dUIsR0FDQTN4RSxNQUFBLFlBQ0F5cEUsVUFBQSxHQUVBb0ksR0FDQXgvRixVQUFBLFdBQ0FxM0YsV0FDTzFwRSxNQUFBLHVCQU9QOHhFLEdBQ0F6L0YsVUFBQSxTQUNBcTNGLFdBQ08xcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLEtBQUFuckIsSUFBQSxRQUVQakIsVUFDQSs5RixFQUNBRSxHQUVBeC9GLFVBQUEsV0FDQTJ0QixNQUFBLFVBQUFuckIsSUFBQSxZQXFCQW1uRyxFQUFBNTRCLEVBQUEra0IsUUFDQS9rQixFQUFBc3JCLFFBQUEsWUFFQWhGLFdBRVMxcEUsTUFBQSxJQUFBbnJCLElBQUEsTUFFQW1yQixNQUFBLEtBQUFuckIsSUFBQSxPQUVUakIsV0FqQkF2QixVQUFBLFNBQ0FxM0YsV0FFTzFwRSxNQUFBLDRGQUVBQSxNQUFBLHNHQWdCUCxPQUNBdW5FLFNBQUEsTUFDQTJCLFFBQUEsZUFDQVIsa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFBQSx3S0FDQUMsU0FBQSx1aktBQ0FjLFNBQUEsMkdBRUFqOUYsVUFDQSs5RixFQUNBdnVCLEVBQUEyckIsWUFDQStDLEdBekNBei9GLFVBQUEsU0FDQXEzRixXQUNPMXBFLE1BQUEsSUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxLQUFBbnJCLElBQUEsVUF0QlB4QyxVQUFBLFVBQ0EydEIsTUFBQSx5QkE4REE2eEUsRUFDQW1LLG9CQzVFQXp1RyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBc0wsVUFDQW9oQixRQUFBLDZpQkFRQUssUUFBQSwyQ0FDQWorRSxNQUFBLGFBQ0E2OUUsU0FBQSx3dEVBeUJBbjhGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBNHJCLGdDQzNDQXpoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeHZFLFVBQ0F3dkUsRUFBQTRyQixlQUVBaHZFLE1BQUEsNkNBQTBEbnJCLElBQUEsSUFDMURtM0YsWUFBQSxJQUdBaHNFLE1BQUEsMkJBQUFuckIsSUFBQSxJQUNBNjVFLFNBQUEsd0NBQ0ErYSxVQUFBLEtBR0F6cEUsTUFBQSxpQkFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUE0ckIsZUFDQXZGLFVBQUEsSUFFQXJtQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUEsTUFBQW5yQixJQUFBLE9BQ0E2MkYsY0FBQSxFQUFBTSxZQUFBLEVBQ0F2QyxVQUFBLHFCQ3hCQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxJQWdCQTY0QixHQUVBajhFLE1BQUEsS0FDQW5yQixJQUFBLEtBQ0E0MEYsVUFBQSxHQUdBa0osR0FFQTN5RSxNQUFBLEtBQ0FuckIsSUFBQSxNQUdBcW5HLEdBRUE3cEcsVUFBQSxVQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFxckIscUJBR0EwTixHQUVBOXBHLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG1CQW1CQWhpRixJQXpEQTBULE1BQUEscUJBQ0F5cEUsVUFBQSxJQUtBcDNGLFVBQUEsU0FDQXEzRixXQUNPMXBFLE1BQUEsdUJBQ0FBLE1BQUEsbUJBRVB5cEUsVUFBQSxHQWtEQXdTLEdBUEFqOEUsTUFBQSxNQVNBMnlFLEVBQ0F1SixFQUNBOTRCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQW9yQixrQkFDQXByQixFQUFBbXJCLGlCQUNBNE4sR0F6QkE5cEcsVUFBQSxTQUNBMnRCLE1BQUEsZ0JBS0EzdEIsVUFBQSxTQUNBMnRCLE1BQUEsVUFxQkFvakQsRUFBQTRyQixlQU1BLE9BSEFpTixFQUFBcm9HLFNBQUEwWSxFQUNBcW1GLEVBQUEvK0YsU0FBQTBZLEdBR0ExWSxTQUFBMFksRUFBQTdHLFNBQ091YSxNQUFBLDBCQ25GUHp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBc0wsVUFDQW9oQixRQUFBLHlEQUNBQyxTQUFBLDJHQUVBSSxRQUFBLGNBRUF2OEYsVUFDQXd2RSxFQUFBb3JCLGtCQUNBcHJCLEVBQUEyckIsWUFDQTNyQixFQUFBd3JCLHFCQUVBdjhGLFVBQUEsUUFDQXcyRixjQUFBLHVCQUFBaDBGLElBQUEsS0FDQTAwRixRQUFBLEtBQ0EzMUYsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUNBdEYsUUFBcUJWLGdCQUFBLEVBQUE0QyxZQUFBLFFBS3JCMzVGLFVBQUEsV0FDQXcyRixjQUFBLE1BQ0FoMEYsSUFBQSxJQUFlbTNGLFlBQUEsRUFDZnRkLFNBQUEsZ0JBR0ExdUQsTUFBQSxjQUNBbnJCLElBQUEsT0FBQW0zRixZQUFBLHFCQzlCQXorRixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxJQXFDQXNyQixFQUFBdHJCLEVBQUFzckIsUUFBQSxTQUlBdUUsRUFBQTd2QixFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUE2Q3B2RSxNQUY3Qyw0QkFJQTR4RSxHQUFrQnYvRixVQUFBLFdBQUEydEIsTUFBQSw4QkFFbEI4d0UsR0FDQXorRixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsaUJBQUFzRCxHQUNBbEksV0FDTzFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE9BSVAsT0FDQTB5RixTQUFBLE1BQ0EzekYsVUFDQTg2RixFQUNBa0QsRUFDQWQsR0FFQWpJLGNBQUEsUUFBQWgwRixJQUFBLFFBQ0EwMEYsUUFBQSxJQUNBMzFGLFVBQUFxL0YsRUFBQXZFLEtBR0E3RixjQUFBLFNBQUFoMEYsSUFBQSxLQUNBakIsV0FFQXZCLFVBQUEsVUFBQTJ0QixNQUFBb2pELEVBQUE0cUIsU0FBQWxDLFlBQUEsTUFLQTlyRSxNQUFBb2pELEVBQUE0cUIsU0FBQSxVQUF1Q3JDLGFBQUEsRUFDdkM5MkYsSUFBQSxLQUNBakIsV0FFQXZCLFVBQUEsVUFDQTJ0QixNQUFBb2pELEVBQUE0cUIsV0FHQWh1RSxNQUFBLEtBQXNCbnJCLElBQUEsS0FDdEI2NUUsVUFsRkFvaEIsUUFFQSwyR0FDQUssUUFFQSwweERBaUJBSixTQUVBLCtzQ0EyREF0RyxVQUFBLEVBQ0E3MUYsVUFDQWs5RixFQUNBcEMsR0FFQTF1RSxNQUFBLG1CQUNBMnJFLGFBQUEsRUFBQTkyRixJQUFBLEtBQ0FqQixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUFvakQsRUFBQTRxQixhQUtBMzdGLFVBQUEsU0FDQTJ0QixNQUFBLDRFQUNBeXBFLFVBQUEsR0FFQW1JLEtBSUFuSSxVQUFBLHFCQzdHQWw4RixFQUFBRCxRQUVBLFNBQUE4MUUsR0FZQSxPQUNBbWtCLFNBQUEsWUFDQTdZLFNBRUEsaTJCQVVBOTZFLFVBRUF3dkUsRUFBQXNyQixRQUFBLElBQXFCLEtBQVNqRixVQUFBLEtBRzlCcDNGLFVBQUEsV0FDQTJ0QixNQUFBLHlDQUNBbnJCLElBQUEsTUFDQW0zRixZQUFBLEVBQ0FMLGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxVQUNBMnRCLE1BQUEsbUNBQ0Fnc0UsWUFBQSxJQUdBMzVGLFVBQUEsT0FDQTJ0QixNQUFBLFdBR0FvakQsRUFBQWlzQix5QkE3Q0FoOUYsVUFBQSxTQUNBMnRCLE1BQUEsUUFBQW5yQixJQUFBLElBQ0EwMEYsUUFBQSxRQUlBbDNGLFVBQUEsU0FDQTJ0QixNQUFBLHdDQ1hBenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFzdUIsR0FDQTVCLFFBQ0EsOE1BR0FDLFNBQ0EsMkJBRUFxTSxHQUNBL3BHLFVBQUEsT0FBQTJ0QixNQUFBLGtCQUVBbXlFLEdBQ0E5L0YsVUFBQSxRQUNBMnRCLE1BQUEsS0FBY25yQixJQUFBLEtBQ2Q2NUUsU0FBQWdqQixFQUNBbkksUUFBQSxLQUVBdUgsR0FDQXorRixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsa0JBQ0E1RSxXQUVBMXBFLE1BQUEsY0FBQW5yQixJQUFBLE1BQ0FqQixVQUFBd29HLEdBQ0EzUyxVQUFBLEtBR0F6cEUsTUFBQSxjQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF3b0csR0FDQTNTLFVBQUEsS0FHQXpwRSxNQUFBLGVBQUFuckIsSUFBQSxNQUNBakIsVUFBQXdvRyxFQUFBakssS0FHQW55RSxNQUFBLGVBQUFuckIsSUFBQSxNQUNBakIsVUFBQXdvRyxFQUFBakssS0FHQW55RSxNQUFBLFlBQUFuckIsSUFBQSxJQUNBNDBGLFVBQUEsS0FHQXpwRSxNQUFBLFlBQUFuckIsSUFBQSxJQUNBNDBGLFVBQUEsS0FHQXpwRSxNQUFBLFVBQUFuckIsSUFBQSxNQUdBbXJCLE1BQUEsVUFBQW5yQixJQUFBLE1BR0FtckIsTUFBQSxhQUFBbnJCLElBQUEsSUFDQWpCLFVBQUF1K0YsS0FHQW55RSxNQUFBLGFBQUFuckIsSUFBQSxJQUNBakIsVUFBQXUrRixJQUVBL3VCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixvQkFHQW9DLEdBQ0F2K0YsVUFBQSxTQUFBbzNGLFVBQUEsRUFDQUMsV0FDTzFwRSxNQUFBb2pELEVBQUFnckIsaUJBQUEsWUFDQXB1RSxNQUFBLHlCQUNBQSxNQUFBb2pELEVBQUErcUIsWUFBQSxhQUdQNEMsR0FDQTErRixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQWpCLFVBQUEsT0FBQXdvRyxFQUFBeEwsRUFBQUUsSUFHQSxPQURBcUIsRUFBQXYrRixVQUFBazlGLEVBQUFGLEVBQUF3TCxJQUVBN1UsU0FBQSxZQUNBN1ksU0FBQWdqQixFQUNBbkksUUFBQSxpQkFDQTMxRixVQUNBd29HLEVBQ0F4TCxFQUNBRSxFQUNBMXRCLEVBQUEwckIsbUJBRUFwRixXQUNXcjNGLFVBQUEsV0FBQXcyRixjQUFBLFFBQ0F4MkYsVUFBQSxRQUFBdzJGLGNBQUEsVUFFWGgwRixJQUFBLElBQ0EwMEYsUUFBQSxZQUNBMzFGLFVBQ0F3dkUsRUFBQWlzQixzQkFDQTBCLEdBRUEvd0UsTUFBQSxLQUFBb3BFLGdCQUFBLEVBQ0ExYSxTQUFBLFdBS0FyOEUsVUFBQSxPQUNBMnRCLE1BQUEsV0FBQW5yQixJQUFBLE1BR0FtckIsTUFBQSxzQ0M5R0F6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBV0EsT0FDQW1rQixTQUFBLFdBQ0E3WSxVQVhBb2hCLFFBQ0Esd0NBQ0FLLFFBQ0EsUUFDQUosU0FDQSxxdEJBQ0FueEYsS0FDQSw4SUFLQXNxRixRQUFBLHNCQUNBdDFGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE0ckIsZ0NDbEJBemhHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBcUJBaTVCLEVBQUEsNEJBNEJBQyxHQUNBanFHLFVBQUEsWUFDQTJ0QixNQUFBLGFBQ0E4cEUsUUFDQXozRixVQUFBLFNBQ0F3QyxJQUFBd25HLEVBQ0F0USxXQUFBLElBUUF3USxHQUNBdjhFLE1BQUFxOEUsRUFBQSxRQUNBMVEsYUFBQSxFQUNBLzNGLFdBRUF2QixVQUFBLFlBQ0EydEIsTUFBQXE4RSxFQUNBeG5HLElBQUEsUUFDQW0zRixZQUFBLEVBQ0F2QyxVQUFBLElBR0FBLFVBQUEsR0FLQStTLEdBQ0F4OEUsTUFBQXE4RSxFQUFBLFFBQWdDeG5HLElBQUEsSUFDaEM4MkYsYUFBQSxFQUNBbEMsVUFBQSxFQUNBNzFGLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFnc0IsWUFBcUNwdkUsTUFBQXE4RSxNQUlyQyxPQUNBOVUsU0FBQSxNQUNBbUIsa0JBQUEsRUFDQWhhLFVBM0ZBb2hCLFFBQ0EsdU5BR0FLLFFBQ0EseUNBQ0FKLFNBQ0EsOHNCQXFGQW44RixXQUVBdkIsVUFBQSxPQUNBMnRCLE1BQUEsZ0NBRUFvakQsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLG1CQUVBbjhGLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFDQXd2RSxFQUFBa3JCLGtCQUVBajhGLFVBQUEsUUFDQTJ0QixNQUFBLFNBQTBCbnJCLElBQUEsU0FJMUJ1dUUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHNCQUVBeDhGLFVBQUEsU0FDQXEzRixXQUNXMXBFLE1BQUEsb0JBQ0FBLE1BQUEscUJBQ0FBLE1BQUFvakQsRUFBQStxQixjQUVYMUUsVUFBQSxJQUdBenBFLE1BQUEsSUFBQW9qRCxFQUFBaXJCLGVBQUEsa0NBQ0EzZixTQUFBLG9CQUNBOTZFLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUErckIsYUFFQW52RSxNQUFBLElBQUFuckIsSUFBQSxhQUNBNDBGLFVBQUEsRUFDQW9CLFlBQUEsUUFHQXBCLFVBQUEsSUFqR0FwM0YsVUFBQSxVQUNBMnRCLE1BQUEsZUFDQThwRSxRQUNBejNGLFVBQUEsU0FDQXdDLElBQUEsMEJBQ0FrM0YsV0FBQSxLQWpCQTE1RixVQUFBLFVBQ0EydEIsTUFBQSxpQkFDQThwRSxRQUNBejNGLFVBQUEsU0FDQXdDLElBQUEsc0JBQ0FrM0YsV0FBQSxLQTZHQTE1RixVQUFBLFdBQ0F3MkYsY0FBQSxXQUFBaDBGLElBQUEsS0FBMkNtM0YsWUFBQSxFQUMzQ3A0RixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXlDcHZFLE1BQUEsOEJBRXpDM3RCLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUNBNjJGLGNBQUEsRUFDQU0sWUFBQSxFQUNBcDRGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHdCQUlBdEYsUUFBQSxTQUdBdnBFLE1BQUEsTUFBQW9qRCxFQUFBNHFCLFNBQUF2RSxVQUFBLEdBRUE2UyxFQUNBQyxFQUNBQyxHQUVBalQsUUFBQSxxQkNyS0FoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQTRxQixFQUFBLHdDQUVBLE9BQ0FwNkYsVUFDQXd2RSxFQUFBMHJCLG1CQUVBOXVFLE1BQUFndUUsRUFDQTlFLFFBQUE4RSxFQUNBdGYsVUFDQW9oQixRQUNBLGlMQUdBSyxRQUNBLDZGQUdBMUcsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDRCQUNBeXBFLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSwrQkFDQXlwRSxVQUFBLElBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsMEJBQ0F5cEUsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDRDQUNBeXBFLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxtQ0FDQXlwRSxVQUFBLElBS0F6cEUsTUFBQSxJQUNBbnJCLElBQUEsSUFDQTQwRixVQUFBLElBSUFwM0YsVUFBQSxTQUNBdUIsVUFBQXd2RSxFQUFBa3JCLGtCQUNBNUUsV0FDVzFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLHlCQy9EWHRILEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzTCxTQUNBLGtsQ0FjQTZhLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUEwckIsa0JBQ0ExckIsRUFBQTRyQixjQUNBNXJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixvQ0N0QkFqaEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXE1QixFQUFBLHdCQUVBQyxHQUNBcnFHLFVBQUEsWUFDQTJ0QixNQUFBLGNBQUFuckIsSUFBQSxPQUFBbTNGLFlBQUEsRUFDQWxDLFFBQ0FqMUYsSUFBQSxJQUNBNDBGLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxXQUNBMnRCLE1BQUEsa0JBR0EzdEIsVUFBQSxVQUNBMnRCLE1BQUEsbUJBTUEsT0FDQXVuRSxTQUFBLHFCQUNBbUIsa0JBQUEsRUFDQWhhLFNBQUEsU0FDQTk2RSxXQUdBb3NCLE1BQUEsVUFBQXk4RSxFQUNBNW5HLElBQUEsSUFDQTY1RSxTQUFBLFFBQ0E5NkUsVUFDQThvRyxFQUNBdDVCLEVBQUEwckIscUJBTUE5dUUsTUFBQSxvQkFBQXk4RSxFQUNBNW5HLElBQUEsSUFDQTY1RSxTQUFBLCtEQUNBNmEsUUFBQSxLQUNBMzFGLFVBQ0EsT0FDQThvRyxFQUNBdDVCLEVBQUEwckIscUJBTUE5dUUsTUFBQSxJQUFBeThFLEVBQ0E1bkcsSUFBQSxJQUNBakIsVUFDQThvRyxFQUNBdDVCLEVBQUEwckIsb0JBS0ExckIsRUFBQTByQixvQ0M5REF2aEcsRUFBQUQsUUFNQSxTQUFBODFFLEdBRUEsSUFBQXU1QixFQUFBLG1FQVFBbkYsRUFBQSxxQ0FhQTNGLEdBQ0F4L0YsVUFBQSxXQUNBcTNGLFdBQ08xcEUsTUFBQSx1QkFDQUEsTUFBQSxnQkFJUDh4RSxHQUNBei9GLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFDQXd2RSxFQUFBa3JCLGlCQUNBdUQsR0FFQXgvRixVQUFBLFdBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsS0FDQWpCLFVBQUF3dkUsRUFBQWtyQixxQkFLQXNPLEdBQ0F2cUcsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLEtBTUEsT0FDQTB5RixTQUFBLHVCQUNBbUIsa0JBQUEsRUFDQVEsUUFBQSxXQUNBeGEsVUFDQXloQixRQUFBcUgsRUFDQTFILFFBQUE2TSxFQUFBLEtBQUFBLEVBQUFqb0csTUFBQSxLQUFBcXVDLEtBQUEsV0F0REEsbUtBc0RBcnVDLE1BQUEsS0FBQXF1QyxLQUFBLE9BRUFudkMsV0FFQTgxRixXQUNXMXBFLE1BQUEsS0FBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxPQUFBbnJCLElBQUEsU0FDQW1yQixNQUFBLEtBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsS0FBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxnQkFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxPQUFBbnJCLElBQUEsTUFDQW1yQixNQUFBLFFBQUFuckIsSUFBQSxVQUNBbXJCLE1BQUEsTUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxVQUFBbnJCLElBQUEsT0FDQW1yQixNQUFBLGtCQUFBbnJCLElBQUEsTUFFWDAwRixRQUFBLEtBRUFubUIsRUFBQXNyQixRQUFBLFVBQ0FvRCxFQUNBOEssRUFDQS9LLEdBRUE3eEUsTUFBQSwrQkFDQXlwRSxVQUFBLEVBQ0FrQyxhQUFBLEVBQ0EvM0YsV0FFQXZCLFVBQUEsWUFDQTJ0QixNQUFBLFVBR0FBLE1BQUEsSUFDQW9wRSxnQkFBQSxFQUNBSyxVQUFBLEVBQ0E3MUYsVUFDQWsrRixFQUNBOEssRUFDQS9LLEdBRUF4L0YsVUFBQSxVQUNBMnRCLE1BQUEsT0FBQXczRSxFQUFBOWlHLE1BQUEsS0FBQXF1QyxLQUFBLGNBbUJBL2lCLE1BQUEsaUNBUUEzdEIsVUFBQSxTQUNBMnRCLE1BQUEsbUJBSUFBLE1BQUEsT0E1SEEsd0ZBNEhBdHJCLE1BQUEsS0FBQXF1QyxLQUFBLG9CQUNBNG9ELGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxlQUNBMnRCLE1BQUEsVUFNQTN0QixVQUFBLFdBQ0FxM0YsV0FDVzFwRSxNQUFBLG9CQXJJWCxvN0JBcUlXdHJCLE1BQUEsS0FBQXF1QyxLQUFBLGdCQUErRDBtRCxVQUFBLEtBQy9EenBFLE1BQUEsNEJDeEpYenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzTCxVQUNBb2hCLFFBQ0EsMkZBQ0FDLFNBQ0EsMmlCQVFBeEcsUUFBQSxLQUNBMzFGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBenJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQW1yQixpQkFDQW5yQixFQUFBNHJCLGVBRUEzOEYsVUFBQSxPQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLE1BR0F4QyxVQUFBLFFBQ0F3MkYsY0FBQSwyQ0FBQWgwRixJQUFBLFFBR0FnMEYsY0FBQSxnQ0FBQWgwRixJQUFBLHlCQzlCQXRILEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzTCxVQUNBb2hCLFFBQUEseS9GQW1DQUMsU0FBQSxvY0FNQW44RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsa0JBQ0FwckIsRUFBQTRyQixlQUVBMzhGLFVBQUEsVUFDQXEzRixXQUNXMXBFLE1BQUEsdUJBQUF5cEUsVUFBQSxJQUNBenBFLE1BQUEsd0NDdERYenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUErdkIsRUFBQSx3Q0FNQTBKLEVBRUEsdXBCQWtCQSxPQUNBdFYsU0FBQSxNQUNBN1ksVUFDQW9oQixRQTNCQSxvUkE2QkFLLFFBQ0EsOEJBQ0FKLFNBQ0E4TSxHQUVBM1QsUUFBQTlsQixFQUFBNHFCLFNBQUEsS0FDQXpFLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXNyQixRQUFBLGVBQW9DOTZGLFVBQUEsVUFDcEN3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDeHVFLE1BQUEsTUFBQXVwRSxRQUFBLFFBRTVDbDNGLFVBQUEsU0FDQXEzRixXQUNZMXBFLE1BQUEsMkJBQ0FBLE1BQUEsc0NBSVozdEIsVUFBQSxTQUNBMnRCLE1BQUEsNEJBR0EzdEIsVUFBQSxTQUNBcTNGLFdBQ1cxcEUsTUFBQSxnQkFBQW16RSxJQUNBbnpFLE1BQUEsaUJBQUFtekUsSUFDQW56RSxNQUFBLHVCQUFBbXpFLElBQ0FuekUsTUFBQSxrREFDWG16RSxJQUdBMUosVUFBQSxJQUdBcDNGLFVBQUEsV0FDQXcyRixjQUFBLEtBQUFoMEYsSUFBQSxVQUFBbTNGLFlBQUEsRUFDQXA0RixVQUFBd3ZFLEVBQUFpc0IseUJBR0FoOUYsVUFBQSxPQUNBMnRCLE1BQUEsV0FBQW5yQixJQUFBLE1BQ0FqQixXQUVBdkIsVUFBQSxjQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLFFBS0F4QyxVQUFBLFFBQ0F3MkYsY0FBQSxPQUFBaDBGLElBQUEsSUFDQWpCLFVBQ0F3dkUsRUFBQStrQixRQUFBL2tCLEVBQUFpc0IsdUJBQW9EdkQsWUFBQSxLQUVwRHZDLFFBQUEsUUFHQWwzRixVQUFBLFFBQ0F3MkYsY0FBQSwwQkFBQWgwRixJQUFBLElBQ0FqQixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBaXNCLHVCQUFvRHZELFlBQUEsS0FFcER2QyxRQUFBLGFBR0F2cEUsTUFBQW9qRCxFQUFBNHFCLFNBQUEsS0FDQXRmLFVBQW1CcWhCLFNBQUE4TSxLQUduQjc4RSxNQUFBLHdCQ3RHQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FFQSxJQUdBK3VCLEdBQ0E5L0YsVUFBQSxRQUNBcTNGLFdBQ08xcEUsTUFBQSxxQkFDQUEsTUFBQSxPQUFZbnJCLElBQUEsT0FJbkJpOEYsR0FDQXorRixVQUFBLFNBQ0FxM0YsV0FFQTFwRSxNQUFBLElBQUFuckIsSUFBQSxJQUNBMDBGLFFBQUEsTUFDQTMxRixVQUFBd3ZFLEVBQUFrckIsb0JBR0F0dUUsTUFBQSxNQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEtBR0F6cEUsTUFBQSxVQUFBbnJCLElBQUEsSUFDQTAwRixRQUFBLE1BQ0EzMUYsVUFBQXd2RSxFQUFBa3JCLGlCQUFBNkQsS0FHQTkvRixVQUFBLFNBQ0EydEIsTUFBQSxZQUFBbnJCLElBQUEsTUFDQWpCLFVBQUF1K0YsR0FDQTFJLFVBQUEsTUFXQXFULEdBQ0F6cUcsVUFBQSxPQUNBMnRCLE1BQUEsd0JBQ0F5cEUsVUFBQSxHQUdBb0osR0FDQXhnRyxVQUFBLFFBQ0EydEIsTUFBQSxpRkFDQXlwRSxVQUFBLEdBR0FnTCxHQUNBcGlHLFVBQUEsUUFDQXcyRixjQUFBLDBCQUNBaDBGLElBQUEsYUFDQW0zRixZQUFBLEVBQ0FwNEYsV0FFQWkxRixjQUFBLGVBQ0FZLFVBQUEsS0FHQXpwRSxNQUFBLEtBQ0FuckIsSUFBQSxLQUNBNjJGLGNBQUEsRUFDQU0sWUFBQSxFQUNBdkMsVUFBQSxFQUNBNzFGLFVBQUFrcEcsS0FHQXpxRyxVQUFBLFNBQ0EydEIsTUFBQSxLQUNBbnJCLElBQUEsS0FDQTYyRixjQUFBLEVBQ0FNLFlBQUEsRUFDQXZDLFVBQUEsRUFDQTcxRixVQUFBa3BHLElBRUFqSyxJQUlBeUQsR0FDQWprRyxVQUFBLFdBQ0F3MkYsY0FBQSxNQUNBaDBGLElBQUEsY0FDQW0zRixZQUFBLEVBQ0FwNEYsVUFBQWkvRixJQUdBLE9BQ0Fua0IsVUFDQXloQixRQUFBLGtCQUNBTCxRQUFBLHlQQUVBbDhGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBaUMsR0EvREF6K0YsVUFBQSxTQUNBMnRCLE1BQUEsdUJBZ0VBODhFLEVBQ0F4RyxFQUNBN0IsRUFDQXJ4QixFQUFBNHJCLGVBM0dvQjM4RixVQUFBLE9BQUEydEIsTUFBQSxnQ0NGcEJ6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQTI1QixFQUFBLHdDQThDQXROLEdBQ0FwOUYsVUFBQSxVQUNBMnRCLE1BQUEsZUFBQSs4RSxFQUFBLFlBR0FuTSxHQUNBditGLFVBQUEsU0FDQXEzRixXQUNPMXBFLE1BckRQLDRCQXFET3lwRSxVQUFBLElBQ0F6cEUsTUFyRFBnOUUsNERBcURPdlQsVUFBQSxJQUNBenBFLE1BQUEsdUJBQ0FBLE1BQUEsdUJBQ0FBLE1BQUEsOEJBSVA4d0UsRUFBQTF0QixFQUFBb3JCLGtCQVFBdUQsR0FDQTN1QixFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxJQUdBcm1CLEVBQUFzckIsUUFBQSxnQkFHQWlMLEdBQ0EzNUUsTUFBQSs4RSxFQUNBdFQsVUFBQSxHQUdBd1QsR0FDQTVxRyxVQUFBLFNBQ0EydEIsTUFBQSxJQUFBKzhFLEdBR0FuSyxHQUNBeEosZ0JBQUEsRUFDQUssVUFBQSxHQUdBeVQsR0FDQXhULFdBQ08xcEUsTUFBQSxNQUNBQSxNQUFBLE1BRVBwc0IsV0FFQW9zQixNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFBQSxPQUFBNjdGLEVBQUFxQixFQUFBRixFQUFBK0ksRUFBQXNELE1BS0FwSyxHQUNBeGdHLFVBQUEsT0FDQTJ0QixNQUFBKzhFLEVBQ0E3VCxRQUFBNlQsRUFDQXJ1QixVQTdHQW9rQixlQUNBLHFvRUEwSEFILEdBQ0FqSixXQUNPMXBFLE1BQUEsTUFBQW5yQixJQUFBLFFBQ0FtckIsTUFBQSxNQUFBbnJCLElBQUEsUUFFUGpCLFdBZkFvc0IsTUFBQSxTQUFBb3BFLGdCQUFBLEVBQUF1QyxhQUFBLEVBQ0EvM0YsVUFDQWkvRixHQUVBN3lFLE1BQUEsS0FBQW5yQixJQUFBLEtBQUFpM0YsWUFBQSxFQUNBbDRGLFVBQUErbEcsTUFVQTlHLEVBQUFELElBS0EsT0FGQUEsRUFBQWgvRixVQUFBNjdGLEVBQUFtQixFQUFBRSxFQUFBNkksRUFBQXNELEVBQUFDLEVBQUF2SyxHQUFBbHRGLE9BQUFzc0YsSUFHQXhJLFFBQUEsS0FDQTMxRixXQWxHQXZCLFVBQUEsT0FDQTJ0QixNQUFBLE1BQ0FuckIsSUFBQSxLQWdHQSs3RixFQUFBRSxFQUFBbU0sRUFBQUMsRUFBQXZLLEdBQUFsdEYsT0FBQXNzRixvQkM1SUF4a0csRUFBQUQsUUFBQSxTQUFBODFFLEdBRUEsSUFBQXEzQixHQUNBcjNCLEVBQUE0ckIsZUFFQTM4RixVQUFBLFNBQ0EydEIsTUFBQSxPQUFBbnJCLElBQUEsT0FDQWpCLFVBQUF3dkUsRUFBQWtyQixrQkFBeUN0dUUsTUFBQSxTQUl6QyxPQUNBdW5FLFNBQUEsT0FDQTJCLFFBQUEsUUFDQXhhLFVBQ0FvaEIsUUFBQSx3SUFFQUssUUFDQSw2Q0FDQUosU0FDQSw0YkFPQXhHLFFBQUEsdUJBQ0EzMUYsV0FFQXZCLFVBQUEsV0FDQXcyRixjQUFBLFdBQUFoMEYsSUFBQSxJQUNBakIsVUFDQXd2RSxFQUFBaXNCLHVCQUVBaDlGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxVQUtBbXJCLE1BQUEsNENBQUFuckIsSUFBQSxHQUNBNDBGLFVBQUEsSUFHQXpwRSxNQUFBLE1BQUFuckIsSUFBQSxlQUNBNDBGLFVBQUEsRUFDQTcxRixTQUFBNm1HLEdBRUFyM0IsRUFBQXNyQixRQUFBLFdBQ0FqcEYsT0FBQWcxRixvQkNsREFsdEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFDQXd1QixHQUNBdi9GLFVBQUEsV0FDQTJ0QixNQUFBLG1DQUVBbTlFLEdBQ0E5cUcsVUFBQSxTQUFBMnRCLE1BQUEsaUJBV0FvakQsRUFBQThyQixnQkFDQTlyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUFtckIsaUJBQ0FuckIsRUFBQXlyQixxQkFPQSxPQUNBbkcsa0JBQUEsRUFDQWEsUUFBQSxTQUNBMzFGLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHNCQUVBeDhGLFVBQUEsY0FBQTJ0QixNQUFBLG9CQUNBeXBFLFVBQUEsSUFHQXAzRixVQUFBLGlCQUFBMnRCLE1BQUEsb0JBQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsZ0JBQUEydEIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQTAwRixRQUFBLE1BR0FsM0YsVUFBQSxlQUNBMnRCLE1BQUEsaWtCQUNBeXBFLFVBQUEsSUFHQXpwRSxNQUFBLHdXQUdBQSxNQUFBLDZGQUVBNHhFLEdBRUF2L0YsVUFBQSxZQUNBMnRCLE1BQUEsc3VGQUNBdXBFLFFBQUEsV0FHQXZwRSxNQUFBLCtvQ0FHQUEsTUFBQSxJQUFBbnJCLElBQUEsSUFDQWpCLFVBQ0FnK0YsRUFDQXVMLEVBQ0EvNUIsRUFBQThyQixnQkFDQTlyQixFQUFBb3JCLGtCQUNBcHJCLEVBQUFtckIsa0JBRUFsOEYsVUFBQSxPQUFBMnRCLE1BQUEsaUJBS0FBLE1BQUEsSUFBQW5yQixJQUFBLE9BQ0E2NUUsU0FBQSwrR0FDQTk2RSxVQUNBZytGLEVBQ0F4dUIsRUFBQW9yQixrQkFDQXByQixFQUFBbXJCLGlCQUNBNE8sRUFDQS81QixFQUFBOHJCLGlCQUVBbHZFLE1BQUEscUJBQ0F5cEUsVUFBQSx1QkMxRkFsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLFdBQ0EzekYsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLHFDQUNBOHBFLFFBQ0FqMUYsSUFBQSxJQUFBZzJGLFlBQUEsMkJDUkF0OUYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQWc2QixHQUFBLGdNQUdBLE9BQ0E3VixTQUFBLFNBQ0EzekYsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBNDBGLFVBQUEsR0FFQXJtQixFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxLQUlBcDNGLFVBQUEsVUFDQXEzRixXQUNXMXBFLE1BQUEsOEJBQ0FBLE1BQUEsb0JBQUF5cEUsVUFBQSxJQUNBenBFLE1BQUEsb0JBQUF5cEUsVUFBQSxJQUNBenBFLE1BQUEsUUF0Qlgsb0hBc0JXK2lCLEtBQUEsYUFJWDF3QyxVQUFBLFdBQ0FxM0YsV0FFQTFwRSxNQUFBLE9BQUFvOUUsRUFBQXI2RCxLQUFBLGNBR0EvaUIsTUFBQSxPQUFBbzlFLEVBQUFyNkQsS0FBQSxrQ0FDQTBtRCxVQUFBLEtBR0F6cEUsTUFBQSxRQXJDQSxrSkFxQ0EraUIsS0FBQSxrQ0FDQTBtRCxVQUFBLE9BS0FwM0YsVUFBQSxRQUNBMnRCLE1BQUEsY0FDQXlwRSxVQUFBLElBR0F6cEUsTUFBQSxnQ0NsREF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFDQWk2QixHQUNBaHJHLFVBQUEsU0FDQTJ0QixNQUFBLFdBRUFzeUUsR0FDQWpnRyxVQUFBLFNBQ0EydEIsTUFBQSxJQUFBb2pELEVBQUE2cUIscUJBRUEsT0FDQTFHLFNBQUEsTUFDQTdZLFNBQUEsd0NBQ0E5NkUsVUFDQXd2RSxFQUFBc3JCLFFBQUEsU0FDQXRyQixFQUFBbXJCLGtCQUVBbDhGLFVBQUEsT0FDQTJ0QixNQUFBLHdCQUNBeXBFLFVBQUEsSUFHQXpwRSxNQUFBczlFLHNCQUNBN1QsVUFBQSxHQUVBcm1CLEVBQUE0ckIsY0FDQXNELEVBQ0ErSyxHQUtBcjlFLE1BQUEsNERBQ0EyckUsYUFBQSxFQUFBOTJGLElBQUEsS0FDQTAwRixRQUFBLEtBQ0EzMUYsV0FBb0Jvc0IsTUFBQSxtQ0FHcEJBLE1BQUEsU0FBQW5yQixJQUFBLE1BQ0FqQixVQUNBd3ZFLEVBQUFtckIsaUJBQ0E4TyxFQUNBajZCLEVBQUE0ckIsY0FDQXNELHNCQzNDQS9rRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsTUFDQTdZLFVBQ0FvaEIsUUFFQSxpUEFJQUMsU0FFQSx1RkFDQUksUUFDQSwrQ0FFQTVHLFFBQUEsVUFDQUwsUUFBQSxlQUNBdDFGLFdBRUF2QixVQUFBLFVBQ0EydEIsTUFBQSxtQkFDQXlwRSxVQUFBLEdBRUFybUIsRUFBQXNyQixRQUNBLFNBQ0EsVUFFQTk2RixVQUFBLFdBSUF2QixVQUFBLFNBQ0EydEIsTUFBQSwyQkFJQTN0QixVQUFBLE9BQ0EydEIsTUFBQSxrQkFHQTN0QixVQUFBLE9BQ0EydEIsTUFBQSxrQkFDQXlwRSxVQUFBLElBR0F6cEUsTUFBQSxzQkFFQW9qRCxFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBMkNsOEYsVUFBQSxTQUFBbzNGLFVBQUEsSUFDM0NybUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDakYsUUFBQSxRQUU1Q2wzRixVQUFBLFNBQ0EydEIsTUFDQSwySEFJQXlwRSxVQUFBLElBR0F6cEUsTUFBQSwyQkM1REF6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQW91QixFQUFBcHVCLEVBQUE4b0IsWUFBQSxPQUFBNStGLFFBaUNBLE9BQ0FpNkYsU0FBQSxPQUNBbUIsa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFDQSw2R0FFQUMsU0FDQSwwbjNCQXlUQUksUUFDQSxrQkFFQXY4RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBMnJCLGFBcFdBMThGLFVBQUEsV0FDQTJ0QixNQUFBLHFCQU1BM3RCLFVBQUEsUUFDQTJ0QixNQUFBLGlDQU1BM3RCLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsSUFDQW5yQixJQUFBLElBQ0FqQixXQUFvQm9zQixNQUFBLEtBQUF5cEUsVUFBQSxNQUdwQnpwRSxNQUFBLElBQ0FuckIsSUFBQSxJQUNBakIsV0FBb0Jvc0IsTUFBQSxLQUFBeXBFLFVBQUEsT0FnVnBCK0gsRUFBQUYsY0FFQS9ILFFBQUEscUJDL1dBaDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUFtNkIsRUFBQW42QixFQUFBc3JCLFFBQUEsVUFDQSxPQUNBaEcsa0JBQUEsRUFDQWEsUUFBQSxXQUNBMzFGLFdBRUFpMUYsY0FDQSxvWEFLQWgwRixJQUFBLElBQWV1MEYsZ0JBQUEsRUFDZkYsUUFBQSxVQUNBeGEsVUFDQW9oQixRQUNBLCtyVkE4R0FLLFFBQ0Esa0JBQ0FKLFNBQ0EscUxBR0FuOEYsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLGtCQUErQ3R1RSxNQUFBLFNBRy9DM3RCLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLGtCQUErQ3R1RSxNQUFBLFNBRy9DM3RCLFVBQUEsU0FDQTJ0QixNQUFBLElBQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBa3JCLG1CQUVBbHJCLEVBQUE0ckIsY0FDQTVyQixFQUFBeXJCLHFCQUNBME8sSUFHQW42QixFQUFBeXJCLHFCQUNBME8sb0JDM0pBaHdHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0F4dkUsVUFDQXd2RSxFQUFBMHJCLGtCQUNBMXJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQTd1RSxNQUFBb2pELEVBQUE2cUIsb0JBQ0EvRSxRQUFBOWxCLEVBQUE2cUIsb0JBQ0F2ZixVQUVBcmdGLEtBQ0EseUNBSUFzc0csT0FDQSxzbUJBWUE2QyxlQUNBLGlKQUlBdHJGLE1BQ0EsbUVBRUFpK0UsUUFDQSxjQUVBMUcsVUFBQSxJQUtBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDRCQUNBeXBFLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSw0QkFDQXlwRSxVQUFBLElBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsK0JBQ0F5cEUsVUFBQSxJQUlBcDNGLFVBQUEsU0FDQTJ0QixNQUFBLDBCQUNBeXBFLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSw0Q0FDQXlwRSxVQUFBLElBSUFwM0YsVUFBQSxTQUNBMnRCLE1BQUEsbUNBQ0F5cEUsVUFBQSxxQkM3RUFsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLFlBQ0FtQixrQkFBQSxFQUNBaGEsU0FBQSx3NWNBQ0E5NkUsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLG9CQUdBM3RCLFVBQUEsV0FDQTJ0QixNQUFBLDBCQUdBM3RCLFVBQUEsU0FDQXEzRixXQUNXMXBFLE1BQUEsbUJBQ0FBLE1BQUEsa0JBS1gzdEIsVUFBQSxXQUNBcTNGLFdBRUExcEUsTUFBQSx1NUNBS0FvakQsRUFBQXNyQixRQUFBLG9CQUNBdHJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQix1Q0NqQ0F0aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBZ0JBLE9BQ0Fta0IsU0FBQSxvQkFDQW1CLGtCQUFBLEVBQ0FRLFFBbEJBLG9CQW1CQXhhLFVBakJBb2hCLFFBQUEsc0JBa0JBbDhGLFdBZkF2QixVQUFBLE9BQ0EydEIsTUFBQSxnQkFDQXlwRSxVQUFBLEtBR0FwM0YsVUFBQSxPQUNBMnRCLE1BQUEsb0JBQ0F5cEUsVUFBQSxJQVdBcm1CLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixxQkFDQXpyQixFQUFBc3JCLFFBQUEsbUJBQ0F0ckIsRUFBQTRyQixjQUNBNXJCLEVBQUEra0IsUUFBQS9rQixFQUFBbXJCLGtCQUEyQ2hGLFFBQUEsT0FDM0NubUIsRUFBQStrQixRQUFBL2tCLEVBQUFvckIsbUJBQTRDakYsUUFBQSxRQUU1Q2wzRixVQUFBLFNBQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsTUFHQXhDLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUEsSUFBQW5yQixJQUFBLE9BQ0EwMEYsUUFBQSwyQkN2Q0FoOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBRUEsSUFBQXd1QixHQUNBdi9GLFVBQUEsV0FDQTJ0QixNQUFBLE1BQUFvakQsRUFBQTRxQixVQUdBeVAsR0FDQXByRyxVQUFBLFNBQ0EydEIsTUFBQSxvQ0EyR0EwOUUsRUFBQSxxQkErTkEsT0FDQW5XLFNBQUEsUUFDQW1CLGtCQUFBLEVBQ0FoYSxTQUFBLGlCQUNBNmEsUUFBQSxLQWpCQSxNQUNBLGlCQUNBLGNBQ0EsY0FDQSxjQUNBLElBQ0EsT0FDQSxTQUNBLFNBQ0EsTUFDQSxLQU9BeG1ELEtBQUEsU0FDQW52QyxVQUdBd3ZFLEVBQUFvckIsa0JBQ0FwckIsRUFBQW1yQixpQkFHQW5yQixFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBR0E0TyxHQUlBejlFLE1BQUEsNEJBQUEwOUUsRUFDQS9SLGFBQUEsRUFDQS8zRixXQUNXdkIsVUFBQSxpQkFBQTJ0QixNQUFBLGdDQU1YQSxNQUFBLDRCQUFBMDlFLEVBQ0EvUixhQUFBLEVBQ0EvM0YsV0FDV3ZCLFVBQUEsY0FBQTJ0QixNQUFBLGdDQU1YQSxNQUFBLFFBOVVBLElBQ0EsT0FDQSxVQUNBLFVBQ0EsUUFDQSxRQUNBLElBQ0EsYUFDQSxPQUNBLFNBQ0EsU0FDQSxVQUNBLE9BQ0EsT0FDQSxLQUNBLE1BQ0EsVUFDQSxNQUNBLE1BQ0EsS0FDQSxLQUNBLEtBQ0EsV0FDQSxhQUNBLFNBQ0EsU0FDQSxPQUNBLEtBQ0EsS0FDQSxLQUNBLEtBQ0EsS0FDQSxLQUNBLFNBQ0EsU0FDQSxPQUNBLElBQ0EsU0FDQSxNQUNBLFFBQ0EsTUFDQSxNQUNBLFFBQ0EsU0FDQSxLQUNBLE9BQ0EsT0FDQSxNQUNBLFNBQ0EsS0FDQSxJQUNBLElBQ0EsUUFDQSxPQUNBLFVBQ0EsT0FDQSxTQUNBLFVBQ0EsTUFDQSxRQUNBLFFBQ0EsS0FDQSxXQUNBLFFBQ0EsS0FDQSxRQUNBLE9BQ0EsS0FDQSxLQUNBLE1BQ0EsU0F3UUEraUIsS0FBQSxTQUFBMjZELEVBQ0EvUixhQUFBLEVBQ0EvM0YsV0FDV3ZCLFVBQUEsZUFBQTJ0QixNQUFBLGdDQU1YQSxNQUFBLGFBcldBLFFBQ0EsU0FDQSxlQUNBLGFBQ0EsU0FDQSxjQUNBLFFBQ0EsUUFDQSxPQUNBLE9BQ0EsV0EyVkEraUIsS0FBQSxTQUFBMjZELElBS0ExOUUsTUFBQSxNQTFYQSxVQUNBLE1BQ0EsUUFDQSxTQUNBLFlBQ0EsTUFDQSxTQUNBLFVBQ0EsUUFDQSxRQUNBLE9BQ0EsT0FDQSxTQThXQStpQixLQUFBLGFBSUE2dUQsRUFHQXh1QixFQUFBOHJCLGdCQUdBOXJCLEVBQUEyckIsYUFLQTE4RixVQUFBLFdBQ0EydEIsTUFBQSxrQ0FDQXVwRSxRQUFBLFFBQ0FvQyxhQUFBLEVBQ0EvM0YsV0FDV3ZCLFVBQUEsUUFBQTJ0QixNQUFBLDhCQUVYM3RCLFVBQUEsU0FDQTJ0QixNQUFBLEtBQ0FuckIsSUFBQSxLQUNBakIsVUFDQTZwRyxFQUNBN0wsRUFDQXh1QixFQUFBbXJCLGlCQUNBbnJCLEVBQUE4ckIsZ0JBQ0E5ckIsRUFBQTJyQixZQUNBM3JCLEVBQUFvckIsdUJBVUFuOEYsVUFBQSxZQUNBMnRCLE1BQUEsUUExVEEsZ0JBQ0EsY0FDQSxhQUNBLFlBQ0Esa0JBQ0Esc0JBQ0EscUJBQ0Esc0JBQ0EsNEJBQ0EsaUJBQ0EsdUJBQ0EsNEJBQ0EsT0FDQSxzQkFDQSxhQUNBLHdCQUNBLGtCQUNBLG1CQUNBLG1CQUNBLG9CQUNBLHNCQUNBLG9CQUNBLGtCQUNBLFNBQ0EsZ0JBQ0Esc0JBQ0EsNEJBQ0EsNkJBQ0Esc0JBQ0Esc0JBQ0Esa0JBQ0EsZUFDQSxlQUNBLHNCQUNBLHNCQUNBLHFCQUNBLHNCQUNBLHFCQUNBLGNBQ0Esb0JBQ0Esb0JBQ0Esb0JBQ0EsZ0JBQ0EsZUFDQSxxQkFDQSxxQkFDQSxxQkFDQSxpQkFDQSxlQUNBLGFBQ0EsbUJBQ0EseUJBQ0EsMEJBQ0EsbUJBQ0EsbUJBQ0EsZUFDQSxTQUNBLHVCQUNBLGFBQ0EsYUFDQSxjQUNBLGVBQ0EsZUFDQSxlQUNBLFFBQ0EsT0FDQSxZQUNBLFFBQ0EsZUFDQSxjQUNBLGFBQ0EsY0FDQSxvQkFDQSxvQkFDQSxvQkFDQSxjQUNBLGVBQ0EsVUFDQSxVQUNBLG9CQUNBLGdCQUNBLFNBQ0EsWUFDQSxVQUNBLGNBQ0EsU0FDQSxPQUNBLGFBQ0EsaUJBQ0EsWUFDQSxZQUNBLGNBQ0EsWUFDQSxRQUNBLE9BQ0EsY0FDQSx3QkFDQSxlQUNBLHlCQUNBLFlBQ0EsbUJBQ0EsZUFDQSxhQUNBLGVBQ0EseUJBQ0EsY0FDQSxTQUNBLFVBQ0EsT0FDQSxvQkFDQSxrQkFDQSxtQkFDQSxXQUNBLFVBQ0EsVUFDQSxrQkFDQSxPQUNBLGlCQUNBLGNBQ0EsYUFDQSxtQkFDQSxzQkFDQSxrQkFDQSxTQUNBLGdCQUNBLGNBQ0EsZUFDQSxhQUNBLFFBQ0EsT0FDQSxhQUNBLFlBQ0EsYUFDQSxZQUNBLFdBQ0EsWUFDQSxXQUNBLFlBQ0EsU0FDQSxPQUNBLFNBQ0EsYUFDQSxrQkFDQSxVQUNBLFFBQ0EsVUFDQSxVQUNBLGdCQUNBLGlCQUNBLGdCQUNBLGdCQUNBLFdBQ0EsZ0JBQ0EsYUFDQSxhQUNBLFVBQ0EsaUJBQ0EsZUFDQSxnQkFDQSxjQUNBLG1CQUNBLG9CQUNBLG9CQUNBLGNBQ0EscUJBQ0EsaUJBQ0EsV0FDQSxTQUNBLFNBQ0EsUUFDQSxXQUNBLGVBQ0EsYUFDQSxrQkFDQSxrQkFDQSx3QkFDQSx1QkFDQSx3QkFDQSxjQUNBLGdCQUNBLGlCQUNBLGNBQ0EsaUJBQ0EsMEJBQ0EsTUFDQSxZQUNBLG1CQUNBLGtCQUNBLGFBQ0EsbUJBQ0Esc0JBQ0Esc0JBQ0EsNkJBQ0EsZUFDQSxpQkFDQSxhQUNBLGNBQ0EsU0FDQSxRQUNBLGFBQ0EsZUFDQSxZQUNBLFdBZ0hBaGIsVUFBQSs5QixLQUFBLFlBQ0ErbUQsUUFFQWoxRixJQUFBLE1BQ0FqQixVQUNBNnBHLEVBQ0E3TCxFQUNBeHVCLEVBQUFtckIsaUJBQ0FuckIsRUFBQW9yQixrQkFDQXByQixFQUFBOHJCLGdCQUNBOXJCLEVBQUEyckIsWUFDQTNyQixFQUFBeXJCLHNCQUVBdEYsUUFBQSxLQUNBRSxVQUFBLHNCQy9iQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0F1QkEsT0FDQXNsQixrQkFBQSxFQUNBOTBGLFdBdkJBdkIsVUFBQSxTQUNBMnRCLE1BQUEsb0JBQUFuckIsSUFBQSxVQUdBeEMsVUFBQSxTQUNBMnRCLE1BQUEseURBR0EzdEIsVUFBQSxTQUNBMnRCLE1BQUEsZ0JBR0EzdEIsVUFBQSxVQUNBbzNGLFVBQUEsR0FDQUMsV0FDTzFwRSxNQUFBLHlGQUNBQSxNQUFBLG9DQUNBQSxNQUFBLFdBQ0FBLE1BQUEsOEJDcEJQenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUF1NkIsR0FDQTdOLFFBQUEsc2xCQVFBSyxRQUFBLGlCQUNBSixTQUFBLCtrQ0FzQkE2TixFQUFBeDZCLEVBQUFzckIsUUFDQSxPQUNBLFFBRUE5NkYsVUFBQSxVQUdBdStGLEdBQ0E5L0YsVUFBQSxRQUNBMnRCLE1BQUEsT0FBQW5yQixJQUFBLE1BQ0E2NUUsU0FBQWl2QixFQUNBL3BHLGFBRUE4N0YsR0FDQXI5RixVQUFBLFNBQ0EydEIsTUFBQSx3RkFDQXlwRSxVQUFBLEdBRUErRSxFQUFBcHJCLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUNBNTZGLFVBQUF1K0YsRUFBQS91QixFQUFBa3JCLG9CQUlBLE9BRkE2RCxFQUFBditGLFVBQUE4N0YsSUFHQWhoQixTQUFBaXZCLEVBQ0EvcEcsVUFDQTQ2RixFQUNBcHJCLEVBQUF3ckIsb0JBQ0FnUCxHQWhDQXZyRyxVQUFBLE9BQ0EydEIsTUFBQSxxQkFDQXlwRSxVQUFBLEdBZ0NBaUcsR0FFQXI5RixVQUFBLFdBQ0F3MkYsY0FBQSxPQUFBaDBGLElBQUEsSUFBc0NtM0YsWUFBQSxFQUN0Q3A0RixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQ0FwdkUsTUFBQSw4QkFHQUEsTUFBQSxJQUFBbnJCLElBQUEsTUFHQXhDLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxLQUFBaTNGLFlBQUEsRUFDQXBkLFNBQUFpdkIsRUFDQS9wRyxVQUNBLE9BQ0E4N0YsRUFDQWxCLEVBQ0FwckIsRUFBQXlyQixzQkFDZTd1RSxNQUFBLE1BRWZ1cEUsUUFBQSxTQUdBQSxRQUFBLFNBR0FsM0YsVUFBQSxRQUNBdzJGLGNBQUEsdUNBQ0FuYSxTQUFBaXZCLEVBQ0E5b0csSUFBQSxNQUNBbTNGLFlBQUEsRUFDQXA0RixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBZ3NCLFlBQXlDcHZFLE1BQUEsNkNBSXpDM3RCLFVBQUEsT0FDQTJ0QixNQUFBLDBRQVFBNm9FLGNBQUEsU0FBQWgwRixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUF3ckIsb0JBQUFnUCxzQkMvR0Fyd0csRUFBQUQsUUFBQSxTQUFBODFFLEdBa0NBLE9BQ0F4dkUsV0FoQ0F2QixVQUFBLFVBQ0EydEIsTUFBQSxXQUNBbnJCLElBQUEsS0FDQWpCLFdBQ0Fvc0IsTUFBQSxLQUNBbnJCLElBQUEsS0FDQWpCLFVBQUEsUUFDQW9zQixNQUFBLFVBR0F5cEUsVUFBQSxLQUlBcDNGLFVBQUEsVUFDQTJ0QixNQUFBLGtDQUNBbnJCLElBQUEsS0FDQW0zRixZQUFBLElBSUEzNUYsVUFBQSxXQUNBMnRCLE1BQUEsa0JBQ0FuckIsSUFBQSxNQUlBeEMsVUFBQSxTQUNBMnRCLE1BQUEseUJDL0JBenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBR0FwMUIsRUFBQSxxQkFDQTBrRCxHQUNBcmdHLFVBQUEsT0FDQXEzRixXQUNPMXBFLE1BTFAsV0FLT2d1QixFQUFBLE1BQ0FodUIsTUFBQTY5RSxZQUFBN3ZELEVBQUEsT0FDQWh1QixNQUFBNjlFLFlBQUE3dkQsRUFBQSxRQVdQOGlELEdBQ0F6K0YsVUFBQSxTQUNBbzNGLFVBQUEsRUFDQUMsV0FDTzFwRSxNQUFBLElBQUFuckIsSUFBQSxNQUNBbXJCLE1BQUEsSUFBQW5yQixJQUFBLE1BQ0FtckIsTUFBQSxRQUVQcHNCLFVBQ0F3dkUsRUFBQWtyQixrQkFmQWo4RixVQUFBLG9CQUNBcTNGLFdBQ08xcEUsTUFBQSxLQUFhbnJCLElBQUEsT0FDYm1yQixNQUFBLEtBQVluckIsSUFBQSxTQWlCbkIsT0FDQTZ6RixrQkFBQSxFQUNBbkIsU0FBQSxxQkFDQTN6RixVQUNBOCtGLEdBRUFyZ0csVUFBQSxPQUNBMnRCLE1BQUEsVUFDQXlwRSxVQUFBLEtBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsWUFDQStyRSxXQUFBLEVBQ0FuNEYsU0FBQWs5RixFQUFBbDlGLFNBRUFpQixJQUFBNjlGLEVBQUFoSixTQUFBLEdBQUExcEUsUUFHQUEsTUFBQSxXQUFBbnJCLElBQUEsVUFDQWcyRixZQUFBLE9BQ0FhLGNBQUEsRUFDQU0sWUFBQSxFQUNBdkMsVUFBQSxJQUdBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLEtBQUFvakQsRUFBQTZxQixzQkFHQTU3RixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBb2pELEVBQUE2cUIsb0JBQUEsTUFHQTU3RixVQUFBLE9BQ0EydEIsTUFBQSxNQUFBb2pELEVBQUE2cUIsb0JBQUEsTUFHQTU3RixVQUFBLFNBQ0EydEIsTUFBQSxPQUNBeXBFLFVBQUEsR0FFQXJtQixFQUFBMHJCLG1CQUVBakcsY0E5RUEseUJBK0VBbmEsVUFBbUJ5aEIsUUEvRW5CLDJCQWlGQS9zQixFQUFBNHJCLGNBQ0E4QixvQkNuRkF2akcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQXNsQixrQkFBQSxFQUNBOTBGLFVBQ0F3dkUsRUFBQTByQixtQkFHQXo4RixVQUFBLE9BQ0FxM0YsV0FDVzFwRSxNQUFBLHlCQUNBQSxNQUFBLHNCQUtYQSxNQUFBLFlBQUFuckIsSUFBQSxhQUNBZzJGLFlBQUEsT0FDQXBCLFVBQUEsSUFJQXAzRixVQUFBLFNBQ0EydEIsTUFBQSxhQUlBM3RCLFVBQUEsU0FDQXEzRixXQUNXMXBFLE1BQUEsUUFDQUEsTUFBQSwrQkM3Qlh6eUIsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLE1BQ0E3WSxTQUFBLCs2QkFZQTk2RSxVQUNBd3ZFLEVBQUFzckIsUUFBQSxZQUFxQixLQUNyQnRyQixFQUFBc3JCLFFBQUEsa0JBRUE3RixjQUFBLE9BQ0FoMEYsSUFBQSxRQUNBbTNGLFlBQUEsRUFDQXA0RixXQUVBdkIsVUFBQSxRQUNBMnRCLE1BQUEsa0RBQ0FuckIsSUFBQSxlQUNBdTBGLGdCQUFBLEVBQ0E0QyxZQUFBLE1BS0FBLFlBQUEsRUFDQXRDLFdBRUExcEUsTUFBQSxtRUFDQW5yQixJQUFBLHdCQUdBbXJCLE1BQUEsOENBQ0FuckIsSUFBQSxnQ0FLQXhDLFVBQUEsU0FDQXVCLFVBQUF3dkUsRUFBQWtyQixrQkFDQTVFLFVBQ0F0bUIsRUFBQStrQixRQUFBL2tCLEVBQUFtckIsa0JBQStDaEYsUUFBQSxPQUMvQ25tQixFQUFBK2tCLFFBQUEva0IsRUFBQW9yQixtQkFBZ0RqRixRQUFBLFVBSWhEbDNGLFVBQUEsU0FDQXEzRixVQUFBdG1CLEVBQUE2ckIsbUJBQUE3ckIsRUFBQTRyQixrQ0N2REF6aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQTQwQixHQUNBM2xHLFVBQUEsTUFDQTJ0QixNQUFBLEtBQ0F5cEUsVUFBQSxFQUNBNzFGLFdBRUF2QixVQUFBLE9BQ0FxM0YsV0FDVzFwRSxNQUFBLHdCQUNBQSxNQUFBLHVCQUVYOHBFLFFBQ0FWLGdCQUFBLEVBQ0FLLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxTQUNBcTNGLFdBQ2lCMXBFLE1BQUEsS0FBQW5yQixJQUFBLE9BQ0FtckIsTUFBQSxLQUFVbnJCLElBQUEsU0FJM0JtckIsTUFBQSxVQUFBb3BFLGdCQUFBLEVBQ0FLLFVBQUEsRUFDQTcxRixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsbURBVUEsT0FDQXBzQixVQUNBb2tHLEdBRUEzbEcsVUFBQSxVQUNBdUIsVUFBQW9rRyxHQUNBdk8sVUFBQSxFQUNBQyxXQUNXMXBFLE1BQUEsT0FBQW5yQixJQUFBLFNBQ0FtckIsTUFBQSxLQUFBbnJCLElBQUEsUUFHWHV1RSxFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxzQkN2REFsOEYsRUFBQUQsUUFBQSxTQUFBODFFLEdBRUEsT0FDQXNMLFVBQ0FvaEIsUUFDQSxtR0FDQUMsU0FMQSw2Q0FPQUksUUFDQSxjQUVBdjhGLFVBQ0F3dkUsRUFBQW9yQixrQkFDQXByQixFQUFBMnJCLFlBQ0EzckIsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHNCQUVBeDhGLFVBQUEsUUFDQXcyRixjQUFBLGdDQUFBaDBGLElBQUEsS0FDQTAwRixRQUFBLEtBQ0EzMUYsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUNBdEYsUUFBcUJWLGdCQUFBLEVBQUE0QyxZQUFBLFFBS3JCaHNFLE1BQUEseUJBQUFuckIsSUFBQSxJQUNBNjVFLFNBM0JBLDZDQTRCQTk2RSxVQUFBLDJCQzdCQXJHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUEwNkIsR0FDQXpyRyxVQUFBLFNBQ0EydEIsTUFBQSxjQUNBeXBFLFVBQUEsR0FFQXNVLEdBQ0ExckcsVUFBQSxTQUNBMnRCLE1BQUEsWUF1QkEsT0FDQTB1RCxVQUNBb2hCLFFBQ0EsMlhBTUFLLFFBQ0EsOERBRUF2OEYsV0FoQ0F2QixVQUFBLFdBQ0EydEIsTUFBQSwrSEFDQW5yQixJQUFBLE1BQ0FqQixVQUNBLE9BQ0FrcUcsRUFDQUMsS0FJQTFyRyxVQUFBLFdBQ0EydEIsTUFBQSw2Q0FBQW5yQixJQUFBLE1BQ0FqQixVQUNBLE9BQ0FrcUcsRUFDQTE2QixFQUFBb3JCLGtCQUNBdVAsS0FvQkExckcsVUFBQSxVQUNBMnRCLE1BQUEsK0JBSUEzdEIsVUFBQSxVQUNBMnRCLE1BQUEsa0NBS0EzdEIsVUFBQSxVQUNBMnRCLE1BQUEsMERBSUEzdEIsVUFBQSxTQUNBMnRCLE1BQUEsNkRBQ0F5cEUsVUFBQSxHQUVBcm1CLEVBQUFzckIsUUFBQSxhQUNBdHJCLEVBQUFzckIsUUFBQSxZQUNBdHJCLEVBQUFzckIsUUFBQSxhQUNBdHJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLEtBRUF1dUUsRUFBQTRyQixlQUVBMzhGLFVBQUEsV0FDQTJ0QixNQUFBLHNDQzlFQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUtBNDZCLEVBQUEsMkdBR0F4QyxHQUNBM1MsY0FBQW1WLEVBQ0F0dkIsVUFBZXJnRixLQUFBMnZHLEdBQ2Z2VSxVQUFBLEVBQ0E3MUYsV0FYQXZCLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxTQWVBOC9GLEdBQ0EzMEUsTUFBQSxpQkFDQTB1RCxTQUNBLHdPQUlBOTZFLFVBQ0E0bkcsSUFJQXlDLEVBQUEsZ0hBS0EsT0FGQUEsSUFBQSxJQUFBQSxFQUFBdnBHLE1BQUEsS0FBQStELElBQUEsU0FBQXpKLEdBQXNELFlBQUFBLElBQWlCK3pDLEtBQUEsTUFHdkV3a0QsU0FBQSxZQUNBbUIsa0JBQUEsRUFDQW1DLFlBQUEsTUFDQWozRixVQUNBd3ZFLEVBQUFzckIsUUFBQSxNQUFzQixPQUV0QnI4RixVQUFBLGVBQ0EydEIsTUFBQSxNQUFrQm5yQixJQUFBLEtBQ2xCakIsV0FFQXZCLFVBQUEsT0FDQTJ0QixNQUFBLE1BQ0EwdUQsU0FBQXV2QixFQUNBblUsUUFDQVYsZ0JBQUEsRUFDQXgxRixVQUFBK2dHLEVBQUE2RyxHQUNBL1IsVUFBQSxPQU1BcDNGLFVBQUEsb0JBQ0EydEIsTUFBQSxPQUFvQm5yQixJQUFBLEtBQ3BCakIsVUFBQSxPQUFBK2dHLEVBQUE2RyxzQkM1REFqdUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUFBQXN1QixHQUNBNUIsUUFDQSxtVEFLQUssUUFDQSx5Q0FDQUosU0FDQSw2ZkFTQSxPQUNBeEksU0FBQSxNQUNBN1ksU0FBQWdqQixFQUNBOTlGLFdBRUF2QixVQUFBLE9BQ0EydEIsTUFBQSwwQkFFQW9qRCxFQUFBbXJCLGlCQUNBbnJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQ0FqQixVQUNBd3ZFLEVBQUFrckIsa0JBRUFqOEYsVUFBQSxRQUNBMnRCLE1BQUEsU0FBMEJuckIsSUFBQSxTQUkxQnV1RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsc0JBRUF4OEYsVUFBQSxTQUNBcTNGLFdBQ1cxcEUsTUFBQSxvQkFDQUEsTUFBQSxxQkFDQUEsTUFBQW9qRCxFQUFBK3FCLGNBRVgxRSxVQUFBLElBR0F6cEUsTUFBQSxJQUFBb2pELEVBQUFpckIsZUFBQSxrQ0FDQTNmLFNBQUEsb0JBQ0E5NkUsVUFDQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIscUJBQ0F6ckIsRUFBQStyQixhQUVBOThGLFVBQUEsV0FDQTJ0QixNQUFBLGNBQUFvakQsRUFBQTRxQixTQUFBLFVBQUFyQyxhQUFBLEVBQ0E5MkYsSUFBQSxTQUNBakIsV0FFQXZCLFVBQUEsU0FDQXEzRixXQUVBMXBFLE1BQUFvakQsRUFBQTRxQixXQUdBaHVFLE1BQUEsWUFHQUEsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTYyRixjQUFBLEVBQUFNLFlBQUEsRUFDQXRkLFNBQUFnakIsRUFDQTk5RixVQUNBLE9BQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLDRCQVFBcEYsVUFBQSxJQUdBcDNGLFVBQUEsV0FDQTJ0QixNQUFBLFdBQUFuckIsSUFBQSxRQUFxQ20zRixZQUFBLEVBQ3JDdGQsU0FBQWdqQixFQUNBOTlGLFVBQ0EsT0FDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUF5Q3B2RSxNQUFBLDhCQUV6QzN0QixVQUFBLFNBQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsS0FDQTYyRixjQUFBLEVBQ0FNLFlBQUEsRUFDQXRkLFNBQUFnakIsRUFDQTk5RixVQUNBd3ZFLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXRGLFFBQUEsV0FHQUEsUUFBQSxJQUNBRSxVQUFBLElBR0FaLGNBQUEsY0FBQWgwRixJQUFBLEtBQThDbTNGLFlBQUEsRUFDOUNwNEYsVUFDQSxRQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0E2MkYsY0FBQSxFQUNBTSxZQUFBLEVBQ0F0ZCxTQUFBZ2pCLEVBQ0E5OUYsVUFDQXd2RSxFQUFBd3JCLG9CQUNBeHJCLEVBQUF5ckIsc0JBRUF0RixRQUFBLGFBS0F2cEUsTUFBQSxXQUNBMHVELFVBQW1CcWhCLFNBQUEsVUFDbkJ0RyxVQUFBLElBR0FaLGNBQUEsU0FBQWgwRixJQUFBLEtBQXlDbTNGLFlBQUEsSUFHekNuRCxjQUFBLFlBQUFoMEYsSUFBQSxLQUE0Q20zRixZQUFBLEVBQzVDdGQsU0FBQSxzQkFHQTF1RCxNQUFBLFdBR0FBLE1BQUEsTUFBQW9qRCxFQUFBNHFCLFNBQUF2RSxVQUFBLElBR0FwM0YsVUFBQSxPQUFBMnRCLE1BQUEsZ0NDdEpBenlCLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLE9BQ0FzTCxVQUNBb2hCLFFBRUEscVlBWUFDLFNBQ0EsdUNBQ0FJLFFBQ0EsbUJBRUF2OEYsV0FFQXZCLFVBQUEsUUFDQXcyRixjQUFBLDRCQUFBaDBGLElBQUEsSUFBMkRtM0YsWUFBQSxFQUMzRHpDLFFBQUEsaUJBQ0EzMUYsVUFDQXd2RSxFQUFBaXNCLHdCQUdBanNCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQXlyQixzQkFFQXg4RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsTUFDQTQwRixVQUFBLEdBRUFybUIsRUFBQW1yQixpQkFDQW5yQixFQUFBb3JCLGtCQUNBcHJCLEVBQUE0ckIsZUFFQTM4RixVQUFBLE9BQ0EydEIsTUFBQSxLQUFBbnJCLElBQUEsSUFDQTQwRixVQUFBLHFCQzVDQWw4RixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBbWtCLFNBQUEsTUFDQW1CLGtCQUFBLEVBQ0FoYSxVQUNBb2hCLFFBQ0EsMDVCQVdBQyxTQUNBLGlQQUdBSSxRQUNBLHNCQUVBNUcsUUFBQSxrQ0FDQTMxRixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUE0QzU2RixXQUFZb3NCLE1BQUEsU0FDeERvakQsRUFBQXNyQixRQUNBLElBQ0EsS0FFQS9DLGFBQUEsRUFDQS8zRixXQUVBdkIsVUFBQSxTQUNBMnRCLE1BQUEscUJBQ0Fwc0IsVUFBQXd2RSxFQUFBcXJCLHNCQUdBcDhGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxJQUNBakIsVUFBQXd2RSxFQUFBcXJCLHdCQUtBcnJCLEVBQUE0ckIsZUFFQTM4RixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTY1RSxVQUFtQjBoQixlQUFBLCtEQ2xEbkI3aUcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQW1rQixTQUFBLE9BQ0FtQixrQkFBQSxFQUNBaGEsVUFDQW9oQixRQUNBLG1WQUlBQyxTQUNBLG13QkFVQUksUUFDQSxpQ0FFQTVHLFFBQUEsS0FDQTMxRixVQUNBd3ZFLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUE0QzU2RixXQUFZb3NCLE1BQUEsU0FDeERvakQsRUFBQXNyQixRQUNBLElBQ0EsS0FFQWpGLFVBQUEsSUFHQXJtQixFQUFBNHJCLGdDQ2xDQXpoRyxFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBeW5CLFlBQUEsTUFDQWozRixXQUVBb3NCLE1BQUEsS0FBQW5yQixJQUFBLEtBQ0FnMkYsWUFBQSw4QkNOQXQ5RixFQUFBRCxRQUFBLFNBQUE4MUUsR0E0REEsT0FDQW1rQixTQUFBLGdCQUNBbUIsa0JBQUEsRUFDQWhhLFVBN0RBb2hCLFFBQ0EsODNEQXdCQUssUUFDQSxPQUNBSixTQUNBLDhoRUFpQ0E3RyxRQUFBLFVBQ0F0MUYsVUFDQXd2RSxFQUFBeXJCLHFCQUNBenJCLEVBQUF3ckIsb0JBQ0F4ckIsRUFBQW9yQixtQkFFQW44RixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsa0JBQ0E1RSxXQUNXMXBFLE1BQUEsbURBQ0FBLE1BQUEsK0NBQ0FBLE1BQUEsZUFBQXlwRSxVQUFBLE1BS1hwM0YsVUFBQSxXQUNBcTNGLFdBQ1cxcEUsTUFBQSwyQkFDQUEsTUFBQSxVQUFBeXBFLFVBQUEsTUFJWHAzRixVQUFBLE9BQ0EydEIsTUFBQSxJQUFBbnJCLElBQUEsSUFDQTY1RSxVQUFtQjBoQixlQUFBLHFPQUtuQjNHLFVBQUEscUJDN0ZBbDhGLEVBQUFELFFBQUEsU0FBQTgxRSxHQWFBLE9BQ0FzbEIsa0JBQUEsRUFDQWhhLFVBQ0FvaEIsUUFDQSw2dUJBU0FDLFNBQ0EsNFNBTUFJLFFBQ0EsOERBR0E1RyxRQUFBLElBQ0EzMUYsVUFDQXd2RSxFQUFBeXJCLHFCQUNBenJCLEVBQUFzckIsUUFBQSxVQUNBdHJCLEVBQUFvckIsbUJBRUFuOEYsVUFBQSxTQUNBMnRCLE1BakNBLDhHQWtDQXlwRSxVQUFBLElBR0FwM0YsVUFBQSxTQUNBMnRCLE1BQUEsd0JBQ0Fwc0IsVUFBQXd2RSxFQUFBa3JCLG9CQUdBajhGLFVBQUEsU0FDQTJ0QixNQUFBLDRCQUNBcHNCLFVBQUF3dkUsRUFBQWtyQixxQ0N2REEvZ0csRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsT0FDQThsQixRQUFBLFdBQ0F4YSxVQUNBb2hCLFFBRUEsbXdMQWtCQUMsU0FDQSwrbkVBb0NBeEcsUUFBQSxJQUNBMzFGLFVBQ0F3dkUsRUFBQTJyQixZQUNBM3JCLEVBQUFtckIsa0JBYUFsOEYsVUFBQSxTQUNBMnRCLE1BQUEsd0JBRUFvakQsRUFBQXNyQixRQUFBLFVBR0FyOEYsVUFBQSxXQUNBMnRCLE1BQUEsd0JBR0EzdEIsVUFBQSxXQUNBdzJGLGNBQUEscUJBQUFoMEYsSUFBQSxJQUNBNDBGLFVBQUEsRUFDQTcxRixVQUNBd3ZFLEVBQUFnc0IsWUFFQS84RixVQUFBLFNBQ0EydEIsTUFBQSxNQUFBbnJCLElBQUEsVUFLQXhDLFVBQUEsU0FDQTJ0QixNQUFBLDhCQ3BHQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxPQUNBc2xCLGtCQUFBLEVBQ0FRLFFBQUEsUUFBQTlsQixFQUFBNHFCLFNBQ0F0ZixVQUNBb2hCLFFBQ0EscXRlQUVBQyxTQUVBLGk1Q0F5Q0Fub0IsS0FDQSwwL0JBY0FoMEUsVUFDQXd2RSxFQUFBc3JCLFFBQ0EsSUFDQSxLQUVBakYsVUFBQSxLQUlBcDNGLFVBQUEsU0FDQXEzRixXQUdBMXBFLE1BQUEscUhBRUF5cEUsVUFBQSxJQUlXenBFLE1BQUEsdUJBQUF5cEUsVUFBQSxJQUdBenBFLE1BQUEscUdBR0FBLE1BQUEsK0VBSVhvakQsRUFBQW9yQixtQkFFQW44RixVQUFBLFNBQ0FxM0YsV0FFVzFwRSxNQUFBLElBQUFuckIsSUFBQSxhQUVBbXJCLE1BQUEsSUFBQW5yQixJQUFBLGFBRVg0MEYsVUFBQSxJQUdBcDNGLFVBQUEsU0FDQXEzRixXQUVXMXBFLE1BQUEscURBRUFBLE1BQUEsZ0NBRVh5cEUsVUFBQSxJQUlBcDNGLFVBQUEsUUFDQTJ0QixNQUFBLFVBQ0F5cEUsVUFBQSxJQUlBcDNGLFVBQUEsUUFDQTJ0QixNQUFBLE9BQ0F5cEUsVUFBQSxJQUdBcDNGLFVBQUEsT0FDQTJ0QixNQUFBLG1DQ2xJQXp5QixFQUFBRCxRQUFBLFNBQUE4MUUsR0FDQSxJQUlBODZCLEdBQ0FwTyxRQUNBLDJKQUVBSyxRQUNBLGlCQUNBSixTQUNBLDh2QkFZQW9PLEdBQ0E5ckcsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQUEwMEYsUUFBQSxPQWNBNlUsR0FDQXZWLGNBQUEsU0FBQWgwRixJQUFBLElBQ0E2NUUsU0FBQXd2QixFQUNBdHFHLFVBQUF1cUcsSUFFQUUsR0FDQWhzRyxVQUFBLFdBQ0EydEIsTUFBQSxnQkFBQTJyRSxhQUFBLEVBQUE5MkYsSUFBQSxLQUNBakIsVUFDQXd2RSxFQUFBK2tCLFFBQUEva0IsRUFBQWdzQixZQUFxQ3RGLFFBQ3JDVixnQkFBQSxFQUNBMWEsU0FBQXd2QixPQUlBLE9BQ0EzVyxTQUFBLE9BQ0EyQixRQUFBLHlCQUNBeGEsU0FBQXd2QixFQUNBdHFHLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBeXJCLHFCQUNBc1AsR0FqQ0E5ckcsVUFBQSxTQUNBMnRCLE1BQUEsSUFBQW5yQixJQUFBLElBQUEwMEYsUUFBQSxRQUdBbDNGLFVBQUEsU0FDQTJ0QixNQUFBLEtBQUFuckIsSUFBQSxNQStCQXdwRyxFQUNBRCxHQTdCQS9yRyxVQUFBLFNBQ0EydEIsTUFBQSwwREE4QkFvakQsRUFBQTJyQiw4QkNwRUF4aEcsRUFBQUQsUUFBQSxTQUFBODFFLEdBQ0EsSUEwQ0FrekIsR0FDQXQyRSxNQUFBLElBQWFuckIsSUFBQSxLQUdieXBHLElBckNBdCtFLE1BQUEscUJBVUEzdEIsVUFBQSxTQUNBcTNGLFdBQ08xcEUsTUFBQSxJQUFBbnJCLElBQUEsSUFBQWpCLFdBQWtDb3NCLE1BQUEsS0FBQXlwRSxVQUFBLE1BQ2xDenBFLE1BQUEsSUFBQW5yQixJQUFBLElBQUFqQixXQUFrQ29zQixNQUFBLEtBQUF5cEUsVUFBQSxRQVR6Q3AzRixVQUFBLFNBQ0EydEIsTUFBQSw0RUFDQXlwRSxVQUFBLElBaUJBcDNGLFVBQUEsVUFDQTJ0QixNQUFBLE9BQUFuckIsSUFBQSxPQUNBNDBGLFVBQUEsR0FDQTcxRixXQUVBdkIsVUFBQSxTQUFBMnRCLE1BQUEsWUFWQTN0QixVQUFBLE9BQ0EydEIsTUFBQSxTQXdCQXMyRSxHQUtBLE9BSEFBLEVBQUExaUcsU0FBQTBxRyxHQUlBL1csU0FBQSxjQUNBbUIsa0JBQUEsRUFDQVEsUUFBQSw2QkFDQUssUUFBQSwwQ0FDQTdhLFVBQ0FvaEIsUUEvREEsa2lCQWdFQUssUUF6REEsNEpBMkRBdjhGLFNBQUEwcUcsbUJDbkVBL3dHLEVBQUFELFFBQUEsU0FBQTgxRSxHQUNBLElBQUEwdEIsR0FDQXorRixVQUFBLFNBQ0F1QixVQUFBd3ZFLEVBQUFrckIsa0JBQ0E1RSxXQUVBMXBFLE1BQUEsS0FBQW5yQixJQUFBLE1BR0FtckIsTUFBQSxLQUFBbnJCLElBQUEsS0FFQXV1RSxFQUFBK2tCLFFBQUEva0IsRUFBQW1yQixrQkFBMkNoRixRQUFBLE9BQzNDbm1CLEVBQUEra0IsUUFBQS9rQixFQUFBb3JCLG1CQUE0Q2pGLFFBQUEsU0FHNUNxSCxHQUFnQmxILFVBQUF0bUIsRUFBQTZyQixtQkFBQTdyQixFQUFBNHJCLGdCQUNoQixPQUNBekgsU0FBQSxPQUNBbUIsa0JBQUEsRUFDQWhhLFNBQ0EscWxCQVNBOTZFLFVBQ0F3dkUsRUFBQXdyQixvQkFDQXhyQixFQUFBMHJCLGtCQUNBMXJCLEVBQUFzckIsUUFDQSxPQUNBLFFBRUE5NkYsV0FFQXZCLFVBQUEsU0FDQTJ0QixNQUFBLGlCQUtBb2pELEVBQUFzckIsUUFDQSx1QkFDQSxHQUVBdEYsZ0JBQUEsRUFDQTFhLFNBQUEsa0JBQ0F3YSxRQUFBOWxCLEVBQUE2cUIsdUJBSUE1N0YsVUFBQSxTQUNBMnRCLE1BQUEsdUJBQUFuckIsSUFBQSxTQUNBakIsVUFBQXd2RSxFQUFBa3JCLG9CQUlBdHVFLE1BQUEscURBR0EzdEIsVUFBQSxXQUNBdzJGLGNBQUEsV0FBQWgwRixJQUFBLE9BQTRDbTNGLFlBQUEsRUFDNUN6QyxRQUFBLFlBQ0EzMUYsVUFDQXd2RSxFQUFBaXNCLHVCQUVBaDlGLFVBQUEsU0FDQTJ0QixNQUFBLE1BQUFuckIsSUFBQSxNQUNBakIsVUFDQSxPQUNBd3ZFLEVBQUF5ckIscUJBQ0FpQyxFQUNBRixPQU1BditGLFVBQUEsUUFDQXcyRixjQUFBLGtCQUFBaDBGLElBQUEsSUFBaURtM0YsWUFBQSxFQUNqRHpDLFFBQUEsV0FDQTMxRixXQUNXaTFGLGNBQUEsc0JBQ1h6bEIsRUFBQWlzQix5QkFJQXhHLGNBQUEsWUFBQWgwRixJQUFBLElBQ0EwMEYsUUFBQSxRQUNBMzFGLFVBQUF3dkUsRUFBQWlzQix5QkFHQXhHLGNBQUEsTUFBQWgwRixJQUFBLElBQ0FqQixVQUFBd3ZFLEVBQUFpc0IseUJBR0FydkUsTUFBQSxNQUVBOHdFLEVBQ0FGIiwiZmlsZSI6ImNvb2xNZEVkaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkNvb2xNREVkaXRvclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJDb29sTURFZGl0b3JcIl0gPSBmYWN0b3J5KCk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8vIFRoaXMgaXMgQ29kZU1pcnJvciAoaHR0cHM6Ly9jb2RlbWlycm9yLm5ldCksIGEgY29kZSBlZGl0b3Jcbi8vIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgb24gdG9wIG9mIHRoZSBicm93c2VyJ3MgRE9NLlxuLy9cbi8vIFlvdSBjYW4gZmluZCBzb21lIHRlY2huaWNhbCBiYWNrZ3JvdW5kIGZvciBzb21lIG9mIHRoZSBjb2RlIGJlbG93XG4vLyBhdCBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvI2NtLWludGVybmFscyAuXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5Db2RlTWlycm9yID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4vLyBLbHVkZ2VzIGZvciBidWdzIGFuZCBiZWhhdmlvciBkaWZmZXJlbmNlcyB0aGF0IGNhbid0IGJlIGZlYXR1cmVcbi8vIGRldGVjdGVkIGFyZSBlbmFibGVkIGJhc2VkIG9uIHVzZXJBZ2VudCBldGMgc25pZmZpbmcuXG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbnZhciBwbGF0Zm9ybSA9IG5hdmlnYXRvci5wbGF0Zm9ybTtcblxudmFyIGdlY2tvID0gL2dlY2tvXFwvXFxkL2kudGVzdCh1c2VyQWdlbnQpO1xudmFyIGllX3VwdG8xMCA9IC9NU0lFIFxcZC8udGVzdCh1c2VyQWdlbnQpO1xudmFyIGllXzExdXAgPSAvVHJpZGVudFxcLyg/Ols3LTldfFxcZHsyLH0pXFwuLipydjooXFxkKykvLmV4ZWModXNlckFnZW50KTtcbnZhciBlZGdlID0gL0VkZ2VcXC8oXFxkKykvLmV4ZWModXNlckFnZW50KTtcbnZhciBpZSA9IGllX3VwdG8xMCB8fCBpZV8xMXVwIHx8IGVkZ2U7XG52YXIgaWVfdmVyc2lvbiA9IGllICYmIChpZV91cHRvMTAgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgNiA6ICsoZWRnZSB8fCBpZV8xMXVwKVsxXSk7XG52YXIgd2Via2l0ID0gIWVkZ2UgJiYgL1dlYktpdFxcLy8udGVzdCh1c2VyQWdlbnQpO1xudmFyIHF0d2Via2l0ID0gd2Via2l0ICYmIC9RdFxcL1xcZCtcXC5cXGQrLy50ZXN0KHVzZXJBZ2VudCk7XG52YXIgY2hyb21lID0gIWVkZ2UgJiYgL0Nocm9tZVxcLy8udGVzdCh1c2VyQWdlbnQpO1xudmFyIHByZXN0byA9IC9PcGVyYVxcLy8udGVzdCh1c2VyQWdlbnQpO1xudmFyIHNhZmFyaSA9IC9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKTtcbnZhciBtYWNfZ2VNb3VudGFpbkxpb24gPSAvTWFjIE9TIFggMVxcZFxcRChbOC05XXxcXGRcXGQpXFxELy50ZXN0KHVzZXJBZ2VudCk7XG52YXIgcGhhbnRvbSA9IC9QaGFudG9tSlMvLnRlc3QodXNlckFnZW50KTtcblxudmFyIGlvcyA9ICFlZGdlICYmIC9BcHBsZVdlYktpdC8udGVzdCh1c2VyQWdlbnQpICYmIC9Nb2JpbGVcXC9cXHcrLy50ZXN0KHVzZXJBZ2VudCk7XG52YXIgYW5kcm9pZCA9IC9BbmRyb2lkLy50ZXN0KHVzZXJBZ2VudCk7XG4vLyBUaGlzIGlzIHdvZWZ1bGx5IGluY29tcGxldGUuIFN1Z2dlc3Rpb25zIGZvciBhbHRlcm5hdGl2ZSBtZXRob2RzIHdlbGNvbWUuXG52YXIgbW9iaWxlID0gaW9zIHx8IGFuZHJvaWQgfHwgL3dlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdCh1c2VyQWdlbnQpO1xudmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KHBsYXRmb3JtKTtcbnZhciBjaHJvbWVPUyA9IC9cXGJDck9TXFxiLy50ZXN0KHVzZXJBZ2VudCk7XG52YXIgd2luZG93cyA9IC93aW4vaS50ZXN0KHBsYXRmb3JtKTtcblxudmFyIHByZXN0b192ZXJzaW9uID0gcHJlc3RvICYmIHVzZXJBZ2VudC5tYXRjaCgvVmVyc2lvblxcLyhcXGQqXFwuXFxkKikvKTtcbmlmIChwcmVzdG9fdmVyc2lvbikgeyBwcmVzdG9fdmVyc2lvbiA9IE51bWJlcihwcmVzdG9fdmVyc2lvblsxXSk7IH1cbmlmIChwcmVzdG9fdmVyc2lvbiAmJiBwcmVzdG9fdmVyc2lvbiA+PSAxNSkgeyBwcmVzdG8gPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfVxuLy8gU29tZSBicm93c2VycyB1c2UgdGhlIHdyb25nIGV2ZW50IHByb3BlcnRpZXMgdG8gc2lnbmFsIGNtZC9jdHJsIG9uIE9TIFhcbnZhciBmbGlwQ3RybENtZCA9IG1hYyAmJiAocXR3ZWJraXQgfHwgcHJlc3RvICYmIChwcmVzdG9fdmVyc2lvbiA9PSBudWxsIHx8IHByZXN0b192ZXJzaW9uIDwgMTIuMTEpKTtcbnZhciBjYXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49IDkpO1xuXG5mdW5jdGlvbiBjbGFzc1Rlc3QoY2xzKSB7IHJldHVybiBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbHMgKyBcIig/OiR8XFxcXHMpXFxcXHMqXCIpIH1cblxudmFyIHJtQ2xhc3MgPSBmdW5jdGlvbihub2RlLCBjbHMpIHtcbiAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTtcbiAgdmFyIG1hdGNoID0gY2xhc3NUZXN0KGNscykuZXhlYyhjdXJyZW50KTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgdmFyIGFmdGVyID0gY3VycmVudC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgbm9kZS5jbGFzc05hbWUgPSBjdXJyZW50LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIChhZnRlciA/IG1hdGNoWzFdICsgYWZ0ZXIgOiBcIlwiKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRyZW4oZSkge1xuICBmb3IgKHZhciBjb3VudCA9IGUuY2hpbGROb2Rlcy5sZW5ndGg7IGNvdW50ID4gMDsgLS1jb3VudClcbiAgICB7IGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTsgfVxuICByZXR1cm4gZVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBhcmVudCkuYXBwZW5kQ2hpbGQoZSlcbn1cblxuZnVuY3Rpb24gZWx0KHRhZywgY29udGVudCwgY2xhc3NOYW1lLCBzdHlsZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKGNsYXNzTmFtZSkgeyBlLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsgfVxuICBpZiAoc3R5bGUpIHsgZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7IH1cbiAgaWYgKHR5cGVvZiBjb250ZW50ID09IFwic3RyaW5nXCIpIHsgZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KSk7IH1cbiAgZWxzZSBpZiAoY29udGVudCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyArK2kpIHsgZS5hcHBlbmRDaGlsZChjb250ZW50W2ldKTsgfSB9XG4gIHJldHVybiBlXG59XG4vLyB3cmFwcGVyIGZvciBlbHQsIHdoaWNoIHJlbW92ZXMgdGhlIGVsdCBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWVcbmZ1bmN0aW9uIGVsdFAodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7XG4gIHZhciBlID0gZWx0KHRhZywgY29udGVudCwgY2xhc3NOYW1lLCBzdHlsZSk7XG4gIGUuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInByZXNlbnRhdGlvblwiKTtcbiAgcmV0dXJuIGVcbn1cblxudmFyIHJhbmdlO1xuaWYgKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7IHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kTm9kZSkge1xuICB2YXIgciA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIHIuc2V0RW5kKGVuZE5vZGUgfHwgbm9kZSwgZW5kKTtcbiAgci5zZXRTdGFydChub2RlLCBzdGFydCk7XG4gIHJldHVybiByXG59OyB9XG5lbHNlIHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7XG4gIHZhciByID0gZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgdHJ5IHsgci5tb3ZlVG9FbGVtZW50VGV4dChub2RlLnBhcmVudE5vZGUpOyB9XG4gIGNhdGNoKGUpIHsgcmV0dXJuIHIgfVxuICByLmNvbGxhcHNlKHRydWUpO1xuICByLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIiwgZW5kKTtcbiAgci5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIiwgc3RhcnQpO1xuICByZXR1cm4gclxufTsgfVxuXG5mdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAzKSAvLyBBbmRyb2lkIGJyb3dzZXIgYWx3YXlzIHJldHVybnMgZmFsc2Ugd2hlbiBjaGlsZCBpcyBhIHRleHRub2RlXG4gICAgeyBjaGlsZCA9IGNoaWxkLnBhcmVudE5vZGU7IH1cbiAgaWYgKHBhcmVudC5jb250YWlucylcbiAgICB7IHJldHVybiBwYXJlbnQuY29udGFpbnMoY2hpbGQpIH1cbiAgZG8ge1xuICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxMSkgeyBjaGlsZCA9IGNoaWxkLmhvc3Q7IH1cbiAgICBpZiAoY2hpbGQgPT0gcGFyZW50KSB7IHJldHVybiB0cnVlIH1cbiAgfSB3aGlsZSAoY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlKVxufVxuXG5mdW5jdGlvbiBhY3RpdmVFbHQoKSB7XG4gIC8vIElFIGFuZCBFZGdlIG1heSB0aHJvdyBhbiBcIlVuc3BlY2lmaWVkIEVycm9yXCIgd2hlbiBhY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5cbiAgLy8gSUUgPCAxMCB3aWxsIHRocm93IHdoZW4gYWNjZXNzZWQgd2hpbGUgdGhlIHBhZ2UgaXMgbG9hZGluZyBvciBpbiBhbiBpZnJhbWUuXG4gIC8vIElFID4gOSBhbmQgRWRnZSB3aWxsIHRocm93IHdoZW4gYWNjZXNzZWQgaW4gYW4gaWZyYW1lIGlmIGRvY3VtZW50LmJvZHkgaXMgdW5hdmFpbGFibGUuXG4gIHZhciBhY3RpdmVFbGVtZW50O1xuICB0cnkge1xuICAgIGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB9IGNhdGNoKGUpIHtcbiAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYm9keSB8fCBudWxsO1xuICB9XG4gIHdoaWxlIChhY3RpdmVFbGVtZW50ICYmIGFjdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCAmJiBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudClcbiAgICB7IGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDsgfVxuICByZXR1cm4gYWN0aXZlRWxlbWVudFxufVxuXG5mdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHtcbiAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTtcbiAgaWYgKCFjbGFzc1Rlc3QoY2xzKS50ZXN0KGN1cnJlbnQpKSB7IG5vZGUuY2xhc3NOYW1lICs9IChjdXJyZW50ID8gXCIgXCIgOiBcIlwiKSArIGNsczsgfVxufVxuZnVuY3Rpb24gam9pbkNsYXNzZXMoYSwgYikge1xuICB2YXIgYXMgPSBhLnNwbGl0KFwiIFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKylcbiAgICB7IGlmIChhc1tpXSAmJiAhY2xhc3NUZXN0KGFzW2ldKS50ZXN0KGIpKSB7IGIgKz0gXCIgXCIgKyBhc1tpXTsgfSB9XG4gIHJldHVybiBiXG59XG5cbnZhciBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgbm9kZS5zZWxlY3QoKTsgfTtcbmlmIChpb3MpIC8vIE1vYmlsZSBTYWZhcmkgYXBwYXJlbnRseSBoYXMgYSBidWcgd2hlcmUgc2VsZWN0KCkgaXMgYnJva2VuLlxuICB7IHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsgfTsgfVxuZWxzZSBpZiAoaWUpIC8vIFN1cHByZXNzIG15c3RlcmlvdXMgSUUxMCBlcnJvcnNcbiAgeyBzZWxlY3RJbnB1dCA9IGZ1bmN0aW9uKG5vZGUpIHsgdHJ5IHsgbm9kZS5zZWxlY3QoKTsgfSBjYXRjaChfZSkge30gfTsgfVxuXG5mdW5jdGlvbiBiaW5kKGYpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKX1cbn1cblxuZnVuY3Rpb24gY29weU9iaihvYmosIHRhcmdldCwgb3ZlcndyaXRlKSB7XG4gIGlmICghdGFyZ2V0KSB7IHRhcmdldCA9IHt9OyB9XG4gIGZvciAodmFyIHByb3AgaW4gb2JqKVxuICAgIHsgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAob3ZlcndyaXRlICE9PSBmYWxzZSB8fCAhdGFyZ2V0Lmhhc093blByb3BlcnR5KHByb3ApKSlcbiAgICAgIHsgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdOyB9IH1cbiAgcmV0dXJuIHRhcmdldFxufVxuXG4vLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC5cbi8vIFVzZWQgbW9zdGx5IHRvIGZpbmQgaW5kZW50YXRpb24uXG5mdW5jdGlvbiBjb3VudENvbHVtbihzdHJpbmcsIGVuZCwgdGFiU2l6ZSwgc3RhcnRJbmRleCwgc3RhcnRWYWx1ZSkge1xuICBpZiAoZW5kID09IG51bGwpIHtcbiAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxcc1xcdTAwYTBdLyk7XG4gICAgaWYgKGVuZCA9PSAtMSkgeyBlbmQgPSBzdHJpbmcubGVuZ3RoOyB9XG4gIH1cbiAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7XG4gICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZihcIlxcdFwiLCBpKTtcbiAgICBpZiAobmV4dFRhYiA8IDAgfHwgbmV4dFRhYiA+PSBlbmQpXG4gICAgICB7IHJldHVybiBuICsgKGVuZCAtIGkpIH1cbiAgICBuICs9IG5leHRUYWIgLSBpO1xuICAgIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7XG4gICAgaSA9IG5leHRUYWIgKyAxO1xuICB9XG59XG5cbnZhciBEZWxheWVkID0gZnVuY3Rpb24oKSB7dGhpcy5pZCA9IG51bGw7fTtcbkRlbGF5ZWQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtcywgZikge1xuICBjbGVhclRpbWVvdXQodGhpcy5pZCk7XG4gIHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTtcbn07XG5cbmZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIGVsdCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKVxuICAgIHsgaWYgKGFycmF5W2ldID09IGVsdCkgeyByZXR1cm4gaSB9IH1cbiAgcmV0dXJuIC0xXG59XG5cbi8vIE51bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xsZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xsYmFyXG52YXIgc2Nyb2xsZXJHYXAgPSAzMDtcblxuLy8gUmV0dXJuZWQgb3IgdGhyb3duIGJ5IHZhcmlvdXMgcHJvdG9jb2xzIHRvIHNpZ25hbCAnSSdtIG5vdFxuLy8gaGFuZGxpbmcgdGhpcycuXG52YXIgUGFzcyA9IHt0b1N0cmluZzogZnVuY3Rpb24oKXtyZXR1cm4gXCJDb2RlTWlycm9yLlBhc3NcIn19O1xuXG4vLyBSZXVzZWQgb3B0aW9uIG9iamVjdHMgZm9yIHNldFNlbGVjdGlvbiAmIGZyaWVuZHNcbnZhciBzZWxfZG9udFNjcm9sbCA9IHtzY3JvbGw6IGZhbHNlfTtcbnZhciBzZWxfbW91c2UgPSB7b3JpZ2luOiBcIiptb3VzZVwifTtcbnZhciBzZWxfbW92ZSA9IHtvcmlnaW46IFwiK21vdmVcIn07XG5cbi8vIFRoZSBpbnZlcnNlIG9mIGNvdW50Q29sdW1uIC0tIGZpbmQgdGhlIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvXG4vLyBhIHBhcnRpY3VsYXIgY29sdW1uLlxuZnVuY3Rpb24gZmluZENvbHVtbihzdHJpbmcsIGdvYWwsIHRhYlNpemUpIHtcbiAgZm9yICh2YXIgcG9zID0gMCwgY29sID0gMDs7KSB7XG4gICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZihcIlxcdFwiLCBwb3MpO1xuICAgIGlmIChuZXh0VGFiID09IC0xKSB7IG5leHRUYWIgPSBzdHJpbmcubGVuZ3RoOyB9XG4gICAgdmFyIHNraXBwZWQgPSBuZXh0VGFiIC0gcG9zO1xuICAgIGlmIChuZXh0VGFiID09IHN0cmluZy5sZW5ndGggfHwgY29sICsgc2tpcHBlZCA+PSBnb2FsKVxuICAgICAgeyByZXR1cm4gcG9zICsgTWF0aC5taW4oc2tpcHBlZCwgZ29hbCAtIGNvbCkgfVxuICAgIGNvbCArPSBuZXh0VGFiIC0gcG9zO1xuICAgIGNvbCArPSB0YWJTaXplIC0gKGNvbCAlIHRhYlNpemUpO1xuICAgIHBvcyA9IG5leHRUYWIgKyAxO1xuICAgIGlmIChjb2wgPj0gZ29hbCkgeyByZXR1cm4gcG9zIH1cbiAgfVxufVxuXG52YXIgc3BhY2VTdHJzID0gW1wiXCJdO1xuZnVuY3Rpb24gc3BhY2VTdHIobikge1xuICB3aGlsZSAoc3BhY2VTdHJzLmxlbmd0aCA8PSBuKVxuICAgIHsgc3BhY2VTdHJzLnB1c2gobHN0KHNwYWNlU3RycykgKyBcIiBcIik7IH1cbiAgcmV0dXJuIHNwYWNlU3Ryc1tuXVxufVxuXG5mdW5jdGlvbiBsc3QoYXJyKSB7IHJldHVybiBhcnJbYXJyLmxlbmd0aC0xXSB9XG5cbmZ1bmN0aW9uIG1hcChhcnJheSwgZikge1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsgb3V0W2ldID0gZihhcnJheVtpXSwgaSk7IH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBpbnNlcnRTb3J0ZWQoYXJyYXksIHZhbHVlLCBzY29yZSkge1xuICB2YXIgcG9zID0gMCwgcHJpb3JpdHkgPSBzY29yZSh2YWx1ZSk7XG4gIHdoaWxlIChwb3MgPCBhcnJheS5sZW5ndGggJiYgc2NvcmUoYXJyYXlbcG9zXSkgPD0gcHJpb3JpdHkpIHsgcG9zKys7IH1cbiAgYXJyYXkuc3BsaWNlKHBvcywgMCwgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBub3RoaW5nKCkge31cblxuZnVuY3Rpb24gY3JlYXRlT2JqKGJhc2UsIHByb3BzKSB7XG4gIHZhciBpbnN0O1xuICBpZiAoT2JqZWN0LmNyZWF0ZSkge1xuICAgIGluc3QgPSBPYmplY3QuY3JlYXRlKGJhc2UpO1xuICB9IGVsc2Uge1xuICAgIG5vdGhpbmcucHJvdG90eXBlID0gYmFzZTtcbiAgICBpbnN0ID0gbmV3IG5vdGhpbmcoKTtcbiAgfVxuICBpZiAocHJvcHMpIHsgY29weU9iaihwcm9wcywgaW5zdCk7IH1cbiAgcmV0dXJuIGluc3Rcbn1cblxudmFyIG5vbkFTQ0lJU2luZ2xlQ2FzZVdvcmRDaGFyID0gL1tcXHUwMGRmXFx1MDU4N1xcdTA1OTAtXFx1MDVmNFxcdTA2MDAtXFx1MDZmZlxcdTMwNDAtXFx1MzA5ZlxcdTMwYTAtXFx1MzBmZlxcdTM0MDAtXFx1NGRiNVxcdTRlMDAtXFx1OWZjY1xcdWFjMDAtXFx1ZDdhZl0vO1xuZnVuY3Rpb24gaXNXb3JkQ2hhckJhc2ljKGNoKSB7XG4gIHJldHVybiAvXFx3Ly50ZXN0KGNoKSB8fCBjaCA+IFwiXFx4ODBcIiAmJlxuICAgIChjaC50b1VwcGVyQ2FzZSgpICE9IGNoLnRvTG93ZXJDYXNlKCkgfHwgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIudGVzdChjaCkpXG59XG5mdW5jdGlvbiBpc1dvcmRDaGFyKGNoLCBoZWxwZXIpIHtcbiAgaWYgKCFoZWxwZXIpIHsgcmV0dXJuIGlzV29yZENoYXJCYXNpYyhjaCkgfVxuICBpZiAoaGVscGVyLnNvdXJjZS5pbmRleE9mKFwiXFxcXHdcIikgPiAtMSAmJiBpc1dvcmRDaGFyQmFzaWMoY2gpKSB7IHJldHVybiB0cnVlIH1cbiAgcmV0dXJuIGhlbHBlci50ZXN0KGNoKVxufVxuXG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICBmb3IgKHZhciBuIGluIG9iaikgeyBpZiAob2JqLmhhc093blByb3BlcnR5KG4pICYmIG9ialtuXSkgeyByZXR1cm4gZmFsc2UgfSB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8vIEV4dGVuZGluZyB1bmljb2RlIGNoYXJhY3RlcnMuIEEgc2VyaWVzIG9mIGEgbm9uLWV4dGVuZGluZyBjaGFyICtcbi8vIGFueSBudW1iZXIgb2YgZXh0ZW5kaW5nIGNoYXJzIGlzIHRyZWF0ZWQgYXMgYSBzaW5nbGUgdW5pdCBhcyBmYXJcbi8vIGFzIGVkaXRpbmcgYW5kIG1lYXN1cmluZyBpcyBjb25jZXJuZWQuIFRoaXMgaXMgbm90IGZ1bGx5IGNvcnJlY3QsXG4vLyBzaW5jZSBzb21lIHNjcmlwdHMvZm9udHMvYnJvd3NlcnMgYWxzbyB0cmVhdCBvdGhlciBjb25maWd1cmF0aW9uc1xuLy8gb2YgY29kZSBwb2ludHMgYXMgYSBncm91cC5cbnZhciBleHRlbmRpbmdDaGFycyA9IC9bXFx1MDMwMC1cXHUwMzZmXFx1MDQ4My1cXHUwNDg5XFx1MDU5MS1cXHUwNWJkXFx1MDViZlxcdTA1YzFcXHUwNWMyXFx1MDVjNFxcdTA1YzVcXHUwNWM3XFx1MDYxMC1cXHUwNjFhXFx1MDY0Yi1cXHUwNjVlXFx1MDY3MFxcdTA2ZDYtXFx1MDZkY1xcdTA2ZGUtXFx1MDZlNFxcdTA2ZTdcXHUwNmU4XFx1MDZlYS1cXHUwNmVkXFx1MDcxMVxcdTA3MzAtXFx1MDc0YVxcdTA3YTYtXFx1MDdiMFxcdTA3ZWItXFx1MDdmM1xcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA5MDAtXFx1MDkwMlxcdTA5M2NcXHUwOTQxLVxcdTA5NDhcXHUwOTRkXFx1MDk1MS1cXHUwOTU1XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDliY1xcdTA5YmVcXHUwOWMxLVxcdTA5YzRcXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MGEwMVxcdTBhMDJcXHUwYTNjXFx1MGE0MVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTcwXFx1MGE3MVxcdTBhNzVcXHUwYTgxXFx1MGE4MlxcdTBhYmNcXHUwYWMxLVxcdTBhYzVcXHUwYWM3XFx1MGFjOFxcdTBhY2RcXHUwYWUyXFx1MGFlM1xcdTBiMDFcXHUwYjNjXFx1MGIzZVxcdTBiM2ZcXHUwYjQxLVxcdTBiNDRcXHUwYjRkXFx1MGI1NlxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiODJcXHUwYmJlXFx1MGJjMFxcdTBiY2RcXHUwYmQ3XFx1MGMzZS1cXHUwYzQwXFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjYmNcXHUwY2JmXFx1MGNjMlxcdTBjYzZcXHUwY2NjXFx1MGNjZFxcdTBjZDVcXHUwY2Q2XFx1MGNlMlxcdTBjZTNcXHUwZDNlXFx1MGQ0MS1cXHUwZDQ0XFx1MGQ0ZFxcdTBkNTdcXHUwZDYyXFx1MGQ2M1xcdTBkY2FcXHUwZGNmXFx1MGRkMi1cXHUwZGQ0XFx1MGRkNlxcdTBkZGZcXHUwZTMxXFx1MGUzNC1cXHUwZTNhXFx1MGU0Ny1cXHUwZTRlXFx1MGViMVxcdTBlYjQtXFx1MGViOVxcdTBlYmJcXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGYxOFxcdTBmMTlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjcxLVxcdTBmN2VcXHUwZjgwLVxcdTBmODRcXHUwZjg2XFx1MGY4N1xcdTBmOTAtXFx1MGY5N1xcdTBmOTktXFx1MGZiY1xcdTBmYzZcXHUxMDJkLVxcdTEwMzBcXHUxMDMyLVxcdTEwMzdcXHUxMDM5XFx1MTAzYVxcdTEwM2RcXHUxMDNlXFx1MTA1OFxcdTEwNTlcXHUxMDVlLVxcdTEwNjBcXHUxMDcxLVxcdTEwNzRcXHUxMDgyXFx1MTA4NVxcdTEwODZcXHUxMDhkXFx1MTA5ZFxcdTEzNWZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdiNy1cXHUxN2JkXFx1MTdjNlxcdTE3YzktXFx1MTdkM1xcdTE3ZGRcXHUxODBiLVxcdTE4MGRcXHUxOGE5XFx1MTkyMC1cXHUxOTIyXFx1MTkyN1xcdTE5MjhcXHUxOTMyXFx1MTkzOS1cXHUxOTNiXFx1MWExN1xcdTFhMThcXHUxYTU2XFx1MWE1OC1cXHUxYTVlXFx1MWE2MFxcdTFhNjJcXHUxYTY1LVxcdTFhNmNcXHUxYTczLVxcdTFhN2NcXHUxYTdmXFx1MWIwMC1cXHUxYjAzXFx1MWIzNFxcdTFiMzYtXFx1MWIzYVxcdTFiM2NcXHUxYjQyXFx1MWI2Yi1cXHUxYjczXFx1MWI4MFxcdTFiODFcXHUxYmEyLVxcdTFiYTVcXHUxYmE4XFx1MWJhOVxcdTFjMmMtXFx1MWMzM1xcdTFjMzZcXHUxYzM3XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2UwXFx1MWNlMi1cXHUxY2U4XFx1MWNlZFxcdTFkYzAtXFx1MWRlNlxcdTFkZmQtXFx1MWRmZlxcdTIwMGNcXHUyMDBkXFx1MjBkMC1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjZmLVxcdWE2NzJcXHVhNjdjXFx1YTY3ZFxcdWE2ZjBcXHVhNmYxXFx1YTgwMlxcdWE4MDZcXHVhODBiXFx1YTgyNVxcdWE4MjZcXHVhOGM0XFx1YThlMC1cXHVhOGYxXFx1YTkyNi1cXHVhOTJkXFx1YTk0Ny1cXHVhOTUxXFx1YTk4MC1cXHVhOTgyXFx1YTliM1xcdWE5YjYtXFx1YTliOVxcdWE5YmNcXHVhYTI5LVxcdWFhMmVcXHVhYTMxXFx1YWEzMlxcdWFhMzVcXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYmU1XFx1YWJlOFxcdWFiZWRcXHVkYzAwLVxcdWRmZmZcXHVmYjFlXFx1ZmUwMC1cXHVmZTBmXFx1ZmUyMC1cXHVmZTI2XFx1ZmY5ZVxcdWZmOWZdLztcbmZ1bmN0aW9uIGlzRXh0ZW5kaW5nQ2hhcihjaCkgeyByZXR1cm4gY2guY2hhckNvZGVBdCgwKSA+PSA3NjggJiYgZXh0ZW5kaW5nQ2hhcnMudGVzdChjaCkgfVxuXG4vLyBSZXR1cm5zIGEgbnVtYmVyIGZyb20gdGhlIHJhbmdlIFtgMGA7IGBzdHIubGVuZ3RoYF0gdW5sZXNzIGBwb3NgIGlzIG91dHNpZGUgdGhhdCByYW5nZS5cbmZ1bmN0aW9uIHNraXBFeHRlbmRpbmdDaGFycyhzdHIsIHBvcywgZGlyKSB7XG4gIHdoaWxlICgoZGlyIDwgMCA/IHBvcyA+IDAgOiBwb3MgPCBzdHIubGVuZ3RoKSAmJiBpc0V4dGVuZGluZ0NoYXIoc3RyLmNoYXJBdChwb3MpKSkgeyBwb3MgKz0gZGlyOyB9XG4gIHJldHVybiBwb3Ncbn1cblxuLy8gUmV0dXJucyB0aGUgdmFsdWUgZnJvbSB0aGUgcmFuZ2UgW2Bmcm9tYDsgYHRvYF0gdGhhdCBzYXRpc2ZpZXNcbi8vIGBwcmVkYCBhbmQgaXMgY2xvc2VzdCB0byBgZnJvbWAuIEFzc3VtZXMgdGhhdCBhdCBsZWFzdCBgdG9gXG4vLyBzYXRpc2ZpZXMgYHByZWRgLiBTdXBwb3J0cyBgZnJvbWAgYmVpbmcgZ3JlYXRlciB0aGFuIGB0b2AuXG5mdW5jdGlvbiBmaW5kRmlyc3QocHJlZCwgZnJvbSwgdG8pIHtcbiAgLy8gQXQgYW55IHBvaW50IHdlIGFyZSBjZXJ0YWluIGB0b2Agc2F0aXNmaWVzIGBwcmVkYCwgZG9uJ3Qga25vd1xuICAvLyB3aGV0aGVyIGBmcm9tYCBkb2VzLlxuICB2YXIgZGlyID0gZnJvbSA+IHRvID8gLTEgOiAxO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKGZyb20gPT0gdG8pIHsgcmV0dXJuIGZyb20gfVxuICAgIHZhciBtaWRGID0gKGZyb20gKyB0bykgLyAyLCBtaWQgPSBkaXIgPCAwID8gTWF0aC5jZWlsKG1pZEYpIDogTWF0aC5mbG9vcihtaWRGKTtcbiAgICBpZiAobWlkID09IGZyb20pIHsgcmV0dXJuIHByZWQobWlkKSA/IGZyb20gOiB0byB9XG4gICAgaWYgKHByZWQobWlkKSkgeyB0byA9IG1pZDsgfVxuICAgIGVsc2UgeyBmcm9tID0gbWlkICsgZGlyOyB9XG4gIH1cbn1cblxuLy8gVGhlIGRpc3BsYXkgaGFuZGxlcyB0aGUgRE9NIGludGVncmF0aW9uLCBib3RoIGZvciBpbnB1dCByZWFkaW5nXG4vLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBub2RlcyBhbmRcbi8vIGRpc3BsYXktcmVsYXRlZCBzdGF0ZS5cblxuZnVuY3Rpb24gRGlzcGxheShwbGFjZSwgZG9jLCBpbnB1dCkge1xuICB2YXIgZCA9IHRoaXM7XG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAvLyBDb3ZlcnMgYm90dG9tLXJpZ2h0IHNxdWFyZSB3aGVuIGJvdGggc2Nyb2xsYmFycyBhcmUgcHJlc2VudC5cbiAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJcIik7XG4gIGQuc2Nyb2xsYmFyRmlsbGVyLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKTtcbiAgLy8gQ292ZXJzIGJvdHRvbSBvZiBndXR0ZXIgd2hlbiBjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciBpcyBvblxuICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2VudC5cbiAgZC5ndXR0ZXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlci1maWxsZXJcIik7XG4gIGQuZ3V0dGVyRmlsbGVyLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKTtcbiAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuXG4gIGQubGluZURpdiA9IGVsdFAoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWNvZGVcIik7XG4gIC8vIEVsZW1lbnRzIGFyZSBhZGRlZCB0byB0aGVzZSB0byByZXByZXNlbnQgc2VsZWN0aW9uIGFuZCBjdXJzb3JzLlxuICBkLnNlbGVjdGlvbkRpdiA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMVwiKTtcbiAgZC5jdXJzb3JEaXYgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWN1cnNvcnNcIik7XG4gIC8vIEEgdmlzaWJpbGl0eTogaGlkZGVuIGVsZW1lbnQgdXNlZCB0byBmaW5kIHRoZSBzaXplIG9mIHRoaW5ncy5cbiAgZC5tZWFzdXJlID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO1xuICAvLyBXaGVuIGxpbmVzIG91dHNpZGUgb2YgdGhlIHZpZXdwb3J0IGFyZSBtZWFzdXJlZCwgdGhleSBhcmUgZHJhd24gaW4gdGhpcy5cbiAgZC5saW5lTWVhc3VyZSA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItbWVhc3VyZVwiKTtcbiAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgZC5saW5lU3BhY2UgPSBlbHRQKFwiZGl2XCIsIFtkLm1lYXN1cmUsIGQubGluZU1lYXN1cmUsIGQuc2VsZWN0aW9uRGl2LCBkLmN1cnNvckRpdiwgZC5saW5lRGl2XSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG91dGxpbmU6IG5vbmVcIik7XG4gIHZhciBsaW5lcyA9IGVsdFAoXCJkaXZcIiwgW2QubGluZVNwYWNlXSwgXCJDb2RlTWlycm9yLWxpbmVzXCIpO1xuICAvLyBNb3ZlZCBhcm91bmQgaXRzIHBhcmVudCB0byBjb3ZlciB2aXNpYmxlIHZpZXcuXG4gIGQubW92ZXIgPSBlbHQoXCJkaXZcIiwgW2xpbmVzXSwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmVcIik7XG4gIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLlxuICBkLnNpemVyID0gZWx0KFwiZGl2XCIsIFtkLm1vdmVyXSwgXCJDb2RlTWlycm9yLXNpemVyXCIpO1xuICBkLnNpemVyV2lkdGggPSBudWxsO1xuICAvLyBCZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcgaXNcbiAgLy8gaW5jb25zaXN0ZW50IGFjcm9zcyBicm93c2Vycy4gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGVcbiAgLy8gc2Nyb2xsYWJsZSBhcmVhIGlzIGJpZyBlbm91Z2guXG4gIGQuaGVpZ2h0Rm9yY2VyID0gZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IFwiICsgc2Nyb2xsZXJHYXAgKyBcInB4OyB3aWR0aDogMXB4O1wiKTtcbiAgLy8gV2lsbCBjb250YWluIHRoZSBndXR0ZXJzLCBpZiBhbnkuXG4gIGQuZ3V0dGVycyA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyc1wiKTtcbiAgZC5saW5lR3V0dGVyID0gbnVsbDtcbiAgLy8gQWN0dWFsIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgZC5zY3JvbGxlciA9IGVsdChcImRpdlwiLCBbZC5zaXplciwgZC5oZWlnaHRGb3JjZXIsIGQuZ3V0dGVyc10sIFwiQ29kZU1pcnJvci1zY3JvbGxcIik7XG4gIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKFwidGFiSW5kZXhcIiwgXCItMVwiKTtcbiAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy5cbiAgZC53cmFwcGVyID0gZWx0KFwiZGl2XCIsIFtkLnNjcm9sbGJhckZpbGxlciwgZC5ndXR0ZXJGaWxsZXIsIGQuc2Nyb2xsZXJdLCBcIkNvZGVNaXJyb3JcIik7XG5cbiAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKVxuICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHsgZC5ndXR0ZXJzLnN0eWxlLnpJbmRleCA9IC0xOyBkLnNjcm9sbGVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IDA7IH1cbiAgaWYgKCF3ZWJraXQgJiYgIShnZWNrbyAmJiBtb2JpbGUpKSB7IGQuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsgfVxuXG4gIGlmIChwbGFjZSkge1xuICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgeyBwbGFjZS5hcHBlbmRDaGlsZChkLndyYXBwZXIpOyB9XG4gICAgZWxzZSB7IHBsYWNlKGQud3JhcHBlcik7IH1cbiAgfVxuXG4gIC8vIEN1cnJlbnQgcmVuZGVyZWQgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLlxuICBkLnZpZXdGcm9tID0gZC52aWV3VG8gPSBkb2MuZmlyc3Q7XG4gIGQucmVwb3J0ZWRWaWV3RnJvbSA9IGQucmVwb3J0ZWRWaWV3VG8gPSBkb2MuZmlyc3Q7XG4gIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSByZW5kZXJlZCBsaW5lcy5cbiAgZC52aWV3ID0gW107XG4gIGQucmVuZGVyZWRWaWV3ID0gbnVsbDtcbiAgLy8gSG9sZHMgaW5mbyBhYm91dCBhIHNpbmdsZSByZW5kZXJlZCBsaW5lIHdoZW4gaXQgd2FzIHJlbmRlcmVkXG4gIC8vIGZvciBtZWFzdXJlbWVudCwgd2hpbGUgbm90IGluIHZpZXcuXG4gIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7XG4gIC8vIEVtcHR5IHNwYWNlIChpbiBwaXhlbHMpIGFib3ZlIHRoZSB2aWV3XG4gIGQudmlld09mZnNldCA9IDA7XG4gIGQubGFzdFdyYXBIZWlnaHQgPSBkLmxhc3RXcmFwV2lkdGggPSAwO1xuICBkLnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICBkLm5hdGl2ZUJhcldpZHRoID0gZC5iYXJIZWlnaHQgPSBkLmJhcldpZHRoID0gMDtcbiAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlO1xuXG4gIC8vIFVzZWQgdG8gb25seSByZXNpemUgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciB3aGVuIG5lY2Vzc2FyeSAod2hlblxuICAvLyB0aGUgYW1vdW50IG9mIGxpbmVzIGNyb3NzZXMgYSBib3VuZGFyeSB0aGF0IG1ha2VzIGl0cyB3aWR0aCBjaGFuZ2UpXG4gIGQubGluZU51bVdpZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbDtcbiAgLy8gU2V0IHRvIHRydWUgd2hlbiBhIG5vbi1ob3Jpem9udGFsLXNjcm9sbGluZyBsaW5lIHdpZGdldCBpc1xuICAvLyBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCBsaW5lIHdpZGdldCBhbGlnbmluZyBpcyBza2lwcGVkIHdoZW5cbiAgLy8gdGhpcyBpcyBmYWxzZS5cbiAgZC5hbGlnbldpZGdldHMgPSBmYWxzZTtcblxuICBkLmNhY2hlZENoYXJXaWR0aCA9IGQuY2FjaGVkVGV4dEhlaWdodCA9IGQuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuXG4gIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhclxuICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuXG4gIGQubWF4TGluZSA9IG51bGw7XG4gIGQubWF4TGluZUxlbmd0aCA9IDA7XG4gIGQubWF4TGluZUNoYW5nZWQgPSBmYWxzZTtcblxuICAvLyBVc2VkIGZvciBtZWFzdXJpbmcgd2hlZWwgc2Nyb2xsaW5nIGdyYW51bGFyaXR5XG4gIGQud2hlZWxEWCA9IGQud2hlZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVsbDtcblxuICAvLyBUcnVlIHdoZW4gc2hpZnQgaXMgaGVsZCBkb3duLlxuICBkLnNoaWZ0ID0gZmFsc2U7XG5cbiAgLy8gVXNlZCB0byB0cmFjayB3aGV0aGVyIGFueXRoaW5nIGhhcHBlbmVkIHNpbmNlIHRoZSBjb250ZXh0IG1lbnVcbiAgLy8gd2FzIG9wZW5lZC5cbiAgZC5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG5cbiAgZC5hY3RpdmVUb3VjaCA9IG51bGw7XG5cbiAgaW5wdXQuaW5pdChkKTtcbn1cblxuLy8gRmluZCB0aGUgbGluZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuXG5mdW5jdGlvbiBnZXRMaW5lKGRvYywgbikge1xuICBuIC09IGRvYy5maXJzdDtcbiAgaWYgKG4gPCAwIHx8IG4gPj0gZG9jLnNpemUpIHsgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gbGluZSBcIiArIChuICsgZG9jLmZpcnN0KSArIFwiIGluIHRoZSBkb2N1bWVudC5cIikgfVxuICB2YXIgY2h1bmsgPSBkb2M7XG4gIHdoaWxlICghY2h1bmsubGluZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDs7ICsraSkge1xuICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICBpZiAobiA8IHN6KSB7IGNodW5rID0gY2hpbGQ7IGJyZWFrIH1cbiAgICAgIG4gLT0gc3o7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaHVuay5saW5lc1tuXVxufVxuXG4vLyBHZXQgdGhlIHBhcnQgb2YgYSBkb2N1bWVudCBiZXR3ZWVuIHR3byBwb3NpdGlvbnMsIGFzIGFuIGFycmF5IG9mXG4vLyBzdHJpbmdzLlxuZnVuY3Rpb24gZ2V0QmV0d2Vlbihkb2MsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIG91dCA9IFtdLCBuID0gc3RhcnQubGluZTtcbiAgZG9jLml0ZXIoc3RhcnQubGluZSwgZW5kLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgIHZhciB0ZXh0ID0gbGluZS50ZXh0O1xuICAgIGlmIChuID09IGVuZC5saW5lKSB7IHRleHQgPSB0ZXh0LnNsaWNlKDAsIGVuZC5jaCk7IH1cbiAgICBpZiAobiA9PSBzdGFydC5saW5lKSB7IHRleHQgPSB0ZXh0LnNsaWNlKHN0YXJ0LmNoKTsgfVxuICAgIG91dC5wdXNoKHRleHQpO1xuICAgICsrbjtcbiAgfSk7XG4gIHJldHVybiBvdXRcbn1cbi8vIEdldCB0aGUgbGluZXMgYmV0d2VlbiBmcm9tIGFuZCB0bywgYXMgYXJyYXkgb2Ygc3RyaW5ncy5cbmZ1bmN0aW9uIGdldExpbmVzKGRvYywgZnJvbSwgdG8pIHtcbiAgdmFyIG91dCA9IFtdO1xuICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24gKGxpbmUpIHsgb3V0LnB1c2gobGluZS50ZXh0KTsgfSk7IC8vIGl0ZXIgYWJvcnRzIHdoZW4gY2FsbGJhY2sgcmV0dXJucyB0cnV0aHkgdmFsdWVcbiAgcmV0dXJuIG91dFxufVxuXG4vLyBVcGRhdGUgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHByb3BhZ2F0aW5nIHRoZSBoZWlnaHQgY2hhbmdlXG4vLyB1cHdhcmRzIHRvIHBhcmVudCBub2Rlcy5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7XG4gIHZhciBkaWZmID0gaGVpZ2h0IC0gbGluZS5oZWlnaHQ7XG4gIGlmIChkaWZmKSB7IGZvciAodmFyIG4gPSBsaW5lOyBuOyBuID0gbi5wYXJlbnQpIHsgbi5oZWlnaHQgKz0gZGlmZjsgfSB9XG59XG5cbi8vIEdpdmVuIGEgbGluZSBvYmplY3QsIGZpbmQgaXRzIGxpbmUgbnVtYmVyIGJ5IHdhbGtpbmcgdXAgdGhyb3VnaFxuLy8gaXRzIHBhcmVudCBsaW5rcy5cbmZ1bmN0aW9uIGxpbmVObyhsaW5lKSB7XG4gIGlmIChsaW5lLnBhcmVudCA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIGN1ciA9IGxpbmUucGFyZW50LCBubyA9IGluZGV4T2YoY3VyLmxpbmVzLCBsaW5lKTtcbiAgZm9yICh2YXIgY2h1bmsgPSBjdXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1bmsucGFyZW50KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7OyArK2kpIHtcbiAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIHsgYnJlYWsgfVxuICAgICAgbm8gKz0gY2h1bmsuY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBubyArIGN1ci5maXJzdFxufVxuXG4vLyBGaW5kIHRoZSBsaW5lIGF0IHRoZSBnaXZlbiB2ZXJ0aWNhbCBwb3NpdGlvbiwgdXNpbmcgdGhlIGhlaWdodFxuLy8gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHRyZWUuXG5mdW5jdGlvbiBsaW5lQXRIZWlnaHQoY2h1bmssIGgpIHtcbiAgdmFyIG4gPSBjaHVuay5maXJzdDtcbiAgb3V0ZXI6IGRvIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaHVuay5jaGlsZHJlbi5sZW5ndGg7ICsraSQxKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpJDFdLCBjaCA9IGNoaWxkLmhlaWdodDtcbiAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXIgfVxuICAgICAgaCAtPSBjaDtcbiAgICAgIG4gKz0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgfVxuICAgIHJldHVybiBuXG4gIH0gd2hpbGUgKCFjaHVuay5saW5lcylcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGxpbmUgPSBjaHVuay5saW5lc1tpXSwgbGggPSBsaW5lLmhlaWdodDtcbiAgICBpZiAoaCA8IGxoKSB7IGJyZWFrIH1cbiAgICBoIC09IGxoO1xuICB9XG4gIHJldHVybiBuICsgaVxufVxuXG5mdW5jdGlvbiBpc0xpbmUoZG9jLCBsKSB7cmV0dXJuIGwgPj0gZG9jLmZpcnN0ICYmIGwgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZX1cblxuZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRpb25zLCBpKSB7XG4gIHJldHVybiBTdHJpbmcob3B0aW9ucy5saW5lTnVtYmVyRm9ybWF0dGVyKGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlcikpXG59XG5cbi8vIEEgUG9zIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQuXG5mdW5jdGlvbiBQb3MobGluZSwgY2gsIHN0aWNreSkge1xuICBpZiAoIHN0aWNreSA9PT0gdm9pZCAwICkgc3RpY2t5ID0gbnVsbDtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkgeyByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCwgc3RpY2t5KSB9XG4gIHRoaXMubGluZSA9IGxpbmU7XG4gIHRoaXMuY2ggPSBjaDtcbiAgdGhpcy5zdGlja3kgPSBzdGlja3k7XG59XG5cbi8vIENvbXBhcmUgdHdvIHBvc2l0aW9ucywgcmV0dXJuIDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIGEgbmVnYXRpdmVcbi8vIG51bWJlciB3aGVuIGEgaXMgbGVzcywgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIG90aGVyd2lzZS5cbmZ1bmN0aW9uIGNtcChhLCBiKSB7IHJldHVybiBhLmxpbmUgLSBiLmxpbmUgfHwgYS5jaCAtIGIuY2ggfVxuXG5mdW5jdGlvbiBlcXVhbEN1cnNvclBvcyhhLCBiKSB7IHJldHVybiBhLnN0aWNreSA9PSBiLnN0aWNreSAmJiBjbXAoYSwgYikgPT0gMCB9XG5cbmZ1bmN0aW9uIGNvcHlQb3MoeCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKX1cbmZ1bmN0aW9uIG1heFBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYiA6IGEgfVxuZnVuY3Rpb24gbWluUG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBhIDogYiB9XG5cbi8vIE1vc3Qgb2YgdGhlIGV4dGVybmFsIEFQSSBjbGlwcyBnaXZlbiBwb3NpdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXlcbi8vIGFjdHVhbGx5IGV4aXN0IHdpdGhpbiB0aGUgZG9jdW1lbnQuXG5mdW5jdGlvbiBjbGlwTGluZShkb2MsIG4pIHtyZXR1cm4gTWF0aC5tYXgoZG9jLmZpcnN0LCBNYXRoLm1pbihuLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpKX1cbmZ1bmN0aW9uIGNsaXBQb3MoZG9jLCBwb3MpIHtcbiAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0KSB7IHJldHVybiBQb3MoZG9jLmZpcnN0LCAwKSB9XG4gIHZhciBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICBpZiAocG9zLmxpbmUgPiBsYXN0KSB7IHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSB9XG4gIHJldHVybiBjbGlwVG9MZW4ocG9zLCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQubGVuZ3RoKVxufVxuZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGluZWxlbikge1xuICB2YXIgY2ggPSBwb3MuY2g7XG4gIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikgeyByZXR1cm4gUG9zKHBvcy5saW5lLCBsaW5lbGVuKSB9XG4gIGVsc2UgaWYgKGNoIDwgMCkgeyByZXR1cm4gUG9zKHBvcy5saW5lLCAwKSB9XG4gIGVsc2UgeyByZXR1cm4gcG9zIH1cbn1cbmZ1bmN0aW9uIGNsaXBQb3NBcnJheShkb2MsIGFycmF5KSB7XG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeyBvdXRbaV0gPSBjbGlwUG9zKGRvYywgYXJyYXlbaV0pOyB9XG4gIHJldHVybiBvdXRcbn1cblxuLy8gT3B0aW1pemUgc29tZSBjb2RlIHdoZW4gdGhlc2UgZmVhdHVyZXMgYXJlIG5vdCB1c2VkLlxudmFyIHNhd1JlYWRPbmx5U3BhbnMgPSBmYWxzZTtcbnZhciBzYXdDb2xsYXBzZWRTcGFucyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZWVSZWFkT25seVNwYW5zKCkge1xuICBzYXdSZWFkT25seVNwYW5zID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2VlQ29sbGFwc2VkU3BhbnMoKSB7XG4gIHNhd0NvbGxhcHNlZFNwYW5zID0gdHJ1ZTtcbn1cblxuLy8gVEVYVE1BUktFUiBTUEFOU1xuXG5mdW5jdGlvbiBNYXJrZWRTcGFuKG1hcmtlciwgZnJvbSwgdG8pIHtcbiAgdGhpcy5tYXJrZXIgPSBtYXJrZXI7XG4gIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bztcbn1cblxuLy8gU2VhcmNoIGFuIGFycmF5IG9mIHNwYW5zIGZvciBhIHNwYW4gbWF0Y2hpbmcgdGhlIGdpdmVuIG1hcmtlci5cbmZ1bmN0aW9uIGdldE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikge1xuICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBzcGFuID0gc3BhbnNbaV07XG4gICAgaWYgKHNwYW4ubWFya2VyID09IG1hcmtlcikgeyByZXR1cm4gc3BhbiB9XG4gIH0gfVxufVxuLy8gUmVtb3ZlIGEgc3BhbiBmcm9tIGFuIGFycmF5LCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vIHNwYW5zIGFyZVxuLy8gbGVmdCAod2UgZG9uJ3Qgc3RvcmUgYXJyYXlzIGZvciBsaW5lcyB3aXRob3V0IHNwYW5zKS5cbmZ1bmN0aW9uIHJlbW92ZU1hcmtlZFNwYW4oc3BhbnMsIHNwYW4pIHtcbiAgdmFyIHI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgeyBpZiAoc3BhbnNbaV0gIT0gc3BhbikgeyAociB8fCAociA9IFtdKSkucHVzaChzcGFuc1tpXSk7IH0gfVxuICByZXR1cm4gclxufVxuLy8gQWRkIGEgc3BhbiB0byBhIGxpbmUuXG5mdW5jdGlvbiBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHtcbiAgbGluZS5tYXJrZWRTcGFucyA9IGxpbmUubWFya2VkU3BhbnMgPyBsaW5lLm1hcmtlZFNwYW5zLmNvbmNhdChbc3Bhbl0pIDogW3NwYW5dO1xuICBzcGFuLm1hcmtlci5hdHRhY2hMaW5lKGxpbmUpO1xufVxuXG4vLyBVc2VkIGZvciB0aGUgYWxnb3JpdGhtIHRoYXQgYWRqdXN0cyBtYXJrZXJzIGZvciBhIGNoYW5nZSBpbiB0aGVcbi8vIGRvY3VtZW50LiBUaGVzZSBmdW5jdGlvbnMgY3V0IGFuIGFycmF5IG9mIHNwYW5zIGF0IGEgZ2l2ZW5cbi8vIGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJlbWFpbmluZyBjaHVua3MgKG9yXG4vLyB1bmRlZmluZWQgaWYgbm90aGluZyByZW1haW5zKS5cbmZ1bmN0aW9uIG1hcmtlZFNwYW5zQmVmb3JlKG9sZCwgc3RhcnRDaCwgaXNJbnNlcnQpIHtcbiAgdmFyIG53O1xuICBpZiAob2xkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyO1xuICAgIHZhciBzdGFydHNCZWZvcmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZUxlZnQgPyBzcGFuLmZyb20gPD0gc3RhcnRDaCA6IHNwYW4uZnJvbSA8IHN0YXJ0Q2gpO1xuICAgIGlmIChzdGFydHNCZWZvcmUgfHwgc3Bhbi5mcm9tID09IHN0YXJ0Q2ggJiYgbWFya2VyLnR5cGUgPT0gXCJib29rbWFya1wiICYmICghaXNJbnNlcnQgfHwgIXNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7XG4gICAgICB2YXIgZW5kc0FmdGVyID0gc3Bhbi50byA9PSBudWxsIHx8IChtYXJrZXIuaW5jbHVzaXZlUmlnaHQgPyBzcGFuLnRvID49IHN0YXJ0Q2ggOiBzcGFuLnRvID4gc3RhcnRDaCk7KG53IHx8IChudyA9IFtdKSkucHVzaChuZXcgTWFya2VkU3BhbihtYXJrZXIsIHNwYW4uZnJvbSwgZW5kc0FmdGVyID8gbnVsbCA6IHNwYW4udG8pKTtcbiAgICB9XG4gIH0gfVxuICByZXR1cm4gbndcbn1cbmZ1bmN0aW9uIG1hcmtlZFNwYW5zQWZ0ZXIob2xkLCBlbmRDaCwgaXNJbnNlcnQpIHtcbiAgdmFyIG53O1xuICBpZiAob2xkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgb2xkLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyO1xuICAgIHZhciBlbmRzQWZ0ZXIgPSBzcGFuLnRvID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IHNwYW4udG8gPj0gZW5kQ2ggOiBzcGFuLnRvID4gZW5kQ2gpO1xuICAgIGlmIChlbmRzQWZ0ZXIgfHwgc3Bhbi5mcm9tID09IGVuZENoICYmIG1hcmtlci50eXBlID09IFwiYm9va21hcmtcIiAmJiAoIWlzSW5zZXJ0IHx8IHNwYW4ubWFya2VyLmluc2VydExlZnQpKSB7XG4gICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5kQ2gpOyhudyB8fCAobncgPSBbXSkpLnB1c2gobmV3IE1hcmtlZFNwYW4obWFya2VyLCBzdGFydHNCZWZvcmUgPyBudWxsIDogc3Bhbi5mcm9tIC0gZW5kQ2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKTtcbiAgICB9XG4gIH0gfVxuICByZXR1cm4gbndcbn1cblxuLy8gR2l2ZW4gYSBjaGFuZ2Ugb2JqZWN0LCBjb21wdXRlIHRoZSBuZXcgc2V0IG9mIG1hcmtlciBzcGFucyB0aGF0XG4vLyBjb3ZlciB0aGUgbGluZSBpbiB3aGljaCB0aGUgY2hhbmdlIHRvb2sgcGxhY2UuIFJlbW92ZXMgc3BhbnNcbi8vIGVudGlyZWx5IHdpdGhpbiB0aGUgY2hhbmdlLCByZWNvbm5lY3RzIHNwYW5zIGJlbG9uZ2luZyB0byB0aGVcbi8vIHNhbWUgbWFya2VyIHRoYXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgdGhlIGNoYW5nZSwgYW5kIGN1dHMgb2ZmXG4vLyBzcGFucyBwYXJ0aWFsbHkgd2l0aGluIHRoZSBjaGFuZ2UuIFJldHVybnMgYW4gYXJyYXkgb2Ygc3BhblxuLy8gYXJyYXlzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBpbiAoYWZ0ZXIpIHRoZSBjaGFuZ2UuXG5mdW5jdGlvbiBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7XG4gIGlmIChjaGFuZ2UuZnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gIHZhciBvbGRGaXJzdCA9IGlzTGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UuZnJvbS5saW5lKS5tYXJrZWRTcGFucztcbiAgdmFyIG9sZExhc3QgPSBpc0xpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS50by5saW5lKS5tYXJrZWRTcGFucztcbiAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkgeyByZXR1cm4gbnVsbCB9XG5cbiAgdmFyIHN0YXJ0Q2ggPSBjaGFuZ2UuZnJvbS5jaCwgZW5kQ2ggPSBjaGFuZ2UudG8uY2gsIGlzSW5zZXJ0ID0gY21wKGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pID09IDA7XG4gIC8vIEdldCB0aGUgc3BhbnMgdGhhdCAnc3RpY2sgb3V0JyBvbiBib3RoIHNpZGVzXG4gIHZhciBmaXJzdCA9IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7XG4gIHZhciBsYXN0ID0gbWFya2VkU3BhbnNBZnRlcihvbGRMYXN0LCBlbmRDaCwgaXNJbnNlcnQpO1xuXG4gIC8vIE5leHQsIG1lcmdlIHRob3NlIHR3byBlbmRzXG4gIHZhciBzYW1lTGluZSA9IGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxLCBvZmZzZXQgPSBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChzYW1lTGluZSA/IHN0YXJ0Q2ggOiAwKTtcbiAgaWYgKGZpcnN0KSB7XG4gICAgLy8gRml4IHVwIC50byBwcm9wZXJ0aWVzIG9mIGZpcnN0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBmaXJzdFtpXTtcbiAgICAgIGlmIChzcGFuLnRvID09IG51bGwpIHtcbiAgICAgICAgdmFyIGZvdW5kID0gZ2V0TWFya2VkU3BhbkZvcihsYXN0LCBzcGFuLm1hcmtlcik7XG4gICAgICAgIGlmICghZm91bmQpIHsgc3Bhbi50byA9IHN0YXJ0Q2g7IH1cbiAgICAgICAgZWxzZSBpZiAoc2FtZUxpbmUpIHsgc3Bhbi50byA9IGZvdW5kLnRvID09IG51bGwgPyBudWxsIDogZm91bmQudG8gKyBvZmZzZXQ7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGxhc3QpIHtcbiAgICAvLyBGaXggdXAgLmZyb20gaW4gbGFzdCAob3IgbW92ZSB0aGVtIGludG8gZmlyc3QgaW4gY2FzZSBvZiBzYW1lTGluZSlcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBsYXN0Lmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIHZhciBzcGFuJDEgPSBsYXN0W2kkMV07XG4gICAgICBpZiAoc3BhbiQxLnRvICE9IG51bGwpIHsgc3BhbiQxLnRvICs9IG9mZnNldDsgfVxuICAgICAgaWYgKHNwYW4kMS5mcm9tID09IG51bGwpIHtcbiAgICAgICAgdmFyIGZvdW5kJDEgPSBnZXRNYXJrZWRTcGFuRm9yKGZpcnN0LCBzcGFuJDEubWFya2VyKTtcbiAgICAgICAgaWYgKCFmb3VuZCQxKSB7XG4gICAgICAgICAgc3BhbiQxLmZyb20gPSBvZmZzZXQ7XG4gICAgICAgICAgaWYgKHNhbWVMaW5lKSB7IChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3BhbiQxKTsgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGFuJDEuZnJvbSArPSBvZmZzZXQ7XG4gICAgICAgIGlmIChzYW1lTGluZSkgeyAoZmlyc3QgfHwgKGZpcnN0ID0gW10pKS5wdXNoKHNwYW4kMSk7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gTWFrZSBzdXJlIHdlIGRpZG4ndCBjcmVhdGUgYW55IHplcm8tbGVuZ3RoIHNwYW5zXG4gIGlmIChmaXJzdCkgeyBmaXJzdCA9IGNsZWFyRW1wdHlTcGFucyhmaXJzdCk7IH1cbiAgaWYgKGxhc3QgJiYgbGFzdCAhPSBmaXJzdCkgeyBsYXN0ID0gY2xlYXJFbXB0eVNwYW5zKGxhc3QpOyB9XG5cbiAgdmFyIG5ld01hcmtlcnMgPSBbZmlyc3RdO1xuICBpZiAoIXNhbWVMaW5lKSB7XG4gICAgLy8gRmlsbCBnYXAgd2l0aCB3aG9sZS1saW5lLXNwYW5zXG4gICAgdmFyIGdhcCA9IGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDIsIGdhcE1hcmtlcnM7XG4gICAgaWYgKGdhcCA+IDAgJiYgZmlyc3QpXG4gICAgICB7IGZvciAodmFyIGkkMiA9IDA7IGkkMiA8IGZpcnN0Lmxlbmd0aDsgKytpJDIpXG4gICAgICAgIHsgaWYgKGZpcnN0W2kkMl0udG8gPT0gbnVsbClcbiAgICAgICAgICB7IChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKGZpcnN0W2kkMl0ubWFya2VyLCBudWxsLCBudWxsKSk7IH0gfSB9XG4gICAgZm9yICh2YXIgaSQzID0gMDsgaSQzIDwgZ2FwOyArK2kkMylcbiAgICAgIHsgbmV3TWFya2Vycy5wdXNoKGdhcE1hcmtlcnMpOyB9XG4gICAgbmV3TWFya2Vycy5wdXNoKGxhc3QpO1xuICB9XG4gIHJldHVybiBuZXdNYXJrZXJzXG59XG5cbi8vIFJlbW92ZSBzcGFucyB0aGF0IGFyZSBlbXB0eSBhbmQgZG9uJ3QgaGF2ZSBhIGNsZWFyV2hlbkVtcHR5XG4vLyBvcHRpb24gb2YgZmFsc2UuXG5mdW5jdGlvbiBjbGVhckVtcHR5U3BhbnMoc3BhbnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBzcGFuID0gc3BhbnNbaV07XG4gICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsICYmIHNwYW4uZnJvbSA9PSBzcGFuLnRvICYmIHNwYW4ubWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSlcbiAgICAgIHsgc3BhbnMuc3BsaWNlKGktLSwgMSk7IH1cbiAgfVxuICBpZiAoIXNwYW5zLmxlbmd0aCkgeyByZXR1cm4gbnVsbCB9XG4gIHJldHVybiBzcGFuc1xufVxuXG4vLyBVc2VkIHRvICdjbGlwJyBvdXQgcmVhZE9ubHkgcmFuZ2VzIHdoZW4gbWFraW5nIGEgY2hhbmdlLlxuZnVuY3Rpb24gcmVtb3ZlUmVhZE9ubHlSYW5nZXMoZG9jLCBmcm9tLCB0bykge1xuICB2YXIgbWFya2VycyA9IG51bGw7XG4gIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKGxpbmUubWFya2VkU3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbWFyayA9IGxpbmUubWFya2VkU3BhbnNbaV0ubWFya2VyO1xuICAgICAgaWYgKG1hcmsucmVhZE9ubHkgJiYgKCFtYXJrZXJzIHx8IGluZGV4T2YobWFya2VycywgbWFyaykgPT0gLTEpKVxuICAgICAgICB7IChtYXJrZXJzIHx8IChtYXJrZXJzID0gW10pKS5wdXNoKG1hcmspOyB9XG4gICAgfSB9XG4gIH0pO1xuICBpZiAoIW1hcmtlcnMpIHsgcmV0dXJuIG51bGwgfVxuICB2YXIgcGFydHMgPSBbe2Zyb206IGZyb20sIHRvOiB0b31dO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbWsgPSBtYXJrZXJzW2ldLCBtID0gbWsuZmluZCgwKTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhcnRzLmxlbmd0aDsgKytqKSB7XG4gICAgICB2YXIgcCA9IHBhcnRzW2pdO1xuICAgICAgaWYgKGNtcChwLnRvLCBtLmZyb20pIDwgMCB8fCBjbXAocC5mcm9tLCBtLnRvKSA+IDApIHsgY29udGludWUgfVxuICAgICAgdmFyIG5ld1BhcnRzID0gW2osIDFdLCBkZnJvbSA9IGNtcChwLmZyb20sIG0uZnJvbSksIGR0byA9IGNtcChwLnRvLCBtLnRvKTtcbiAgICAgIGlmIChkZnJvbSA8IDAgfHwgIW1rLmluY2x1c2l2ZUxlZnQgJiYgIWRmcm9tKVxuICAgICAgICB7IG5ld1BhcnRzLnB1c2goe2Zyb206IHAuZnJvbSwgdG86IG0uZnJvbX0pOyB9XG4gICAgICBpZiAoZHRvID4gMCB8fCAhbWsuaW5jbHVzaXZlUmlnaHQgJiYgIWR0bylcbiAgICAgICAgeyBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBtLnRvLCB0bzogcC50b30pOyB9XG4gICAgICBwYXJ0cy5zcGxpY2UuYXBwbHkocGFydHMsIG5ld1BhcnRzKTtcbiAgICAgIGogKz0gbmV3UGFydHMubGVuZ3RoIC0gMztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbi8vIENvbm5lY3Qgb3IgZGlzY29ubmVjdCBzcGFucyBmcm9tIGEgbGluZS5cbmZ1bmN0aW9uIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpIHtcbiAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucztcbiAgaWYgKCFzcGFucykgeyByZXR1cm4gfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKVxuICAgIHsgc3BhbnNbaV0ubWFya2VyLmRldGFjaExpbmUobGluZSk7IH1cbiAgbGluZS5tYXJrZWRTcGFucyA9IG51bGw7XG59XG5mdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykge1xuICBpZiAoIXNwYW5zKSB7IHJldHVybiB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyArK2kpXG4gICAgeyBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsgfVxuICBsaW5lLm1hcmtlZFNwYW5zID0gc3BhbnM7XG59XG5cbi8vIEhlbHBlcnMgdXNlZCB3aGVuIGNvbXB1dGluZyB3aGljaCBvdmVybGFwcGluZyBjb2xsYXBzZWQgc3BhblxuLy8gY291bnRzIGFzIHRoZSBsYXJnZXIgb25lLlxuZnVuY3Rpb24gZXh0cmFMZWZ0KG1hcmtlcikgeyByZXR1cm4gbWFya2VyLmluY2x1c2l2ZUxlZnQgPyAtMSA6IDAgfVxuZnVuY3Rpb24gZXh0cmFSaWdodChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IDEgOiAwIH1cblxuLy8gUmV0dXJucyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIG9mIHR3byBvdmVybGFwcGluZyBjb2xsYXBzZWRcbi8vIHNwYW5zIGlzIGxhcmdlciAoYW5kIHRodXMgaW5jbHVkZXMgdGhlIG90aGVyKS4gRmFsbHMgYmFjayB0b1xuLy8gY29tcGFyaW5nIGlkcyB3aGVuIHRoZSBzcGFucyBjb3ZlciBleGFjdGx5IHRoZSBzYW1lIHJhbmdlLlxuZnVuY3Rpb24gY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoYSwgYikge1xuICB2YXIgbGVuRGlmZiA9IGEubGluZXMubGVuZ3RoIC0gYi5saW5lcy5sZW5ndGg7XG4gIGlmIChsZW5EaWZmICE9IDApIHsgcmV0dXJuIGxlbkRpZmYgfVxuICB2YXIgYVBvcyA9IGEuZmluZCgpLCBiUG9zID0gYi5maW5kKCk7XG4gIHZhciBmcm9tQ21wID0gY21wKGFQb3MuZnJvbSwgYlBvcy5mcm9tKSB8fCBleHRyYUxlZnQoYSkgLSBleHRyYUxlZnQoYik7XG4gIGlmIChmcm9tQ21wKSB7IHJldHVybiAtZnJvbUNtcCB9XG4gIHZhciB0b0NtcCA9IGNtcChhUG9zLnRvLCBiUG9zLnRvKSB8fCBleHRyYVJpZ2h0KGEpIC0gZXh0cmFSaWdodChiKTtcbiAgaWYgKHRvQ21wKSB7IHJldHVybiB0b0NtcCB9XG4gIHJldHVybiBiLmlkIC0gYS5pZFxufVxuXG4vLyBGaW5kIG91dCB3aGV0aGVyIGEgbGluZSBlbmRzIG9yIHN0YXJ0cyBpbiBhIGNvbGxhcHNlZCBzcGFuLiBJZlxuLy8gc28sIHJldHVybiB0aGUgbWFya2VyIGZvciB0aGF0IHNwYW4uXG5mdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHN0YXJ0KSB7XG4gIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zLCBmb3VuZDtcbiAgaWYgKHNwcykgeyBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkge1xuICAgIHNwID0gc3BzW2ldO1xuICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmIChzdGFydCA/IHNwLmZyb20gOiBzcC50bykgPT0gbnVsbCAmJlxuICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpXG4gICAgICB7IGZvdW5kID0gc3AubWFya2VyOyB9XG4gIH0gfVxuICByZXR1cm4gZm91bmRcbn1cbmZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgdHJ1ZSkgfVxuZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgZmFsc2UpIH1cblxuZnVuY3Rpb24gY29sbGFwc2VkU3BhbkFyb3VuZChsaW5lLCBjaCkge1xuICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucywgZm91bmQ7XG4gIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgc3AgPSBzcHNbaV07XG4gICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgKHNwLmZyb20gPT0gbnVsbCB8fCBzcC5mcm9tIDwgY2gpICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gY2gpICYmXG4gICAgICAgICghZm91bmQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoZm91bmQsIHNwLm1hcmtlcikgPCAwKSkgeyBmb3VuZCA9IHNwLm1hcmtlcjsgfVxuICB9IH1cbiAgcmV0dXJuIGZvdW5kXG59XG5cbi8vIFRlc3Qgd2hldGhlciB0aGVyZSBleGlzdHMgYSBjb2xsYXBzZWQgc3BhbiB0aGF0IHBhcnRpYWxseVxuLy8gb3ZlcmxhcHMgKGNvdmVycyB0aGUgc3RhcnQgb3IgZW5kLCBidXQgbm90IGJvdGgpIG9mIGEgbmV3IHNwYW4uXG4vLyBTdWNoIG92ZXJsYXAgaXMgbm90IGFsbG93ZWQuXG5mdW5jdGlvbiBjb25mbGljdGluZ0NvbGxhcHNlZFJhbmdlKGRvYywgbGluZU5vJCQxLCBmcm9tLCB0bywgbWFya2VyKSB7XG4gIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVObyQkMSk7XG4gIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zO1xuICBpZiAoc3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHNwID0gc3BzW2ldO1xuICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgeyBjb250aW51ZSB9XG4gICAgdmFyIGZvdW5kID0gc3AubWFya2VyLmZpbmQoMCk7XG4gICAgdmFyIGZyb21DbXAgPSBjbXAoZm91bmQuZnJvbSwgZnJvbSkgfHwgZXh0cmFMZWZ0KHNwLm1hcmtlcikgLSBleHRyYUxlZnQobWFya2VyKTtcbiAgICB2YXIgdG9DbXAgPSBjbXAoZm91bmQudG8sIHRvKSB8fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcik7XG4gICAgaWYgKGZyb21DbXAgPj0gMCAmJiB0b0NtcCA8PSAwIHx8IGZyb21DbXAgPD0gMCAmJiB0b0NtcCA+PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoZnJvbUNtcCA8PSAwICYmIChzcC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgbWFya2VyLmluY2x1c2l2ZUxlZnQgPyBjbXAoZm91bmQudG8sIGZyb20pID49IDAgOiBjbXAoZm91bmQudG8sIGZyb20pID4gMCkgfHxcbiAgICAgICAgZnJvbUNtcCA+PSAwICYmIChzcC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgbWFya2VyLmluY2x1c2l2ZUxlZnQgPyBjbXAoZm91bmQuZnJvbSwgdG8pIDw9IDAgOiBjbXAoZm91bmQuZnJvbSwgdG8pIDwgMCkpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgfSB9XG59XG5cbi8vIEEgdmlzdWFsIGxpbmUgaXMgYSBsaW5lIGFzIGRyYXduIG9uIHRoZSBzY3JlZW4uIEZvbGRpbmcsIGZvclxuLy8gZXhhbXBsZSwgY2FuIGNhdXNlIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgdG8gYXBwZWFyIG9uIHRoZSBzYW1lXG4vLyB2aXN1YWwgbGluZS4gVGhpcyBmaW5kcyB0aGUgc3RhcnQgb2YgdGhlIHZpc3VhbCBsaW5lIHRoYXQgdGhlXG4vLyBnaXZlbiBsaW5lIGlzIHBhcnQgb2YgKHVzdWFsbHkgdGhhdCBpcyB0aGUgbGluZSBpdHNlbGYpLlxuZnVuY3Rpb24gdmlzdWFsTGluZShsaW5lKSB7XG4gIHZhciBtZXJnZWQ7XG4gIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSlcbiAgICB7IGxpbmUgPSBtZXJnZWQuZmluZCgtMSwgdHJ1ZSkubGluZTsgfVxuICByZXR1cm4gbGluZVxufVxuXG5mdW5jdGlvbiB2aXN1YWxMaW5lRW5kKGxpbmUpIHtcbiAgdmFyIG1lcmdlZDtcbiAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSlcbiAgICB7IGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOyB9XG4gIHJldHVybiBsaW5lXG59XG5cbi8vIFJldHVybnMgYW4gYXJyYXkgb2YgbG9naWNhbCBsaW5lcyB0aGF0IGNvbnRpbnVlIHRoZSB2aXN1YWwgbGluZVxuLy8gc3RhcnRlZCBieSB0aGUgYXJndW1lbnQsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy5cbmZ1bmN0aW9uIHZpc3VhbExpbmVDb250aW51ZWQobGluZSkge1xuICB2YXIgbWVyZ2VkLCBsaW5lcztcbiAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkge1xuICAgIGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lXG4gICAgOyhsaW5lcyB8fCAobGluZXMgPSBbXSkpLnB1c2gobGluZSk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzXG59XG5cbi8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZVxuLy8gZ2l2ZW4gbGluZSBudW1iZXIgaXMgcGFydCBvZi5cbmZ1bmN0aW9uIHZpc3VhbExpbmVObyhkb2MsIGxpbmVOKSB7XG4gIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgdmlzID0gdmlzdWFsTGluZShsaW5lKTtcbiAgaWYgKGxpbmUgPT0gdmlzKSB7IHJldHVybiBsaW5lTiB9XG4gIHJldHVybiBsaW5lTm8odmlzKVxufVxuXG4vLyBHZXQgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgbmV4dCB2aXN1YWwgbGluZSBhZnRlclxuLy8gdGhlIGdpdmVuIGxpbmUuXG5mdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5lTikge1xuICBpZiAobGluZU4gPiBkb2MubGFzdExpbmUoKSkgeyByZXR1cm4gbGluZU4gfVxuICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTiksIG1lcmdlZDtcbiAgaWYgKCFsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyByZXR1cm4gbGluZU4gfVxuICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKVxuICAgIHsgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmU7IH1cbiAgcmV0dXJuIGxpbmVObyhsaW5lKSArIDFcbn1cblxuLy8gQ29tcHV0ZSB3aGV0aGVyIGEgbGluZSBpcyBoaWRkZW4uIExpbmVzIGNvdW50IGFzIGhpZGRlbiB3aGVuIHRoZXlcbi8vIGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxpbmUsIG9yIHdoZW5cbi8vIHRoZXkgYXJlIGVudGlyZWx5IGNvdmVyZWQgYnkgY29sbGFwc2VkLCBub24td2lkZ2V0IHNwYW4uXG5mdW5jdGlvbiBsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSB7XG4gIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zO1xuICBpZiAoc3BzKSB7IGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgc3BzLmxlbmd0aDsgKytpKSB7XG4gICAgc3AgPSBzcHNbaV07XG4gICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAoc3AuZnJvbSA9PSBudWxsKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAoc3AubWFya2VyLndpZGdldE5vZGUpIHsgY29udGludWUgfVxuICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpXG4gICAgICB7IHJldHVybiB0cnVlIH1cbiAgfSB9XG59XG5mdW5jdGlvbiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGxpbmUsIHNwYW4pIHtcbiAgaWYgKHNwYW4udG8gPT0gbnVsbCkge1xuICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpO1xuICAgIHJldHVybiBsaW5lSXNIaWRkZW5Jbm5lcihkb2MsIGVuZC5saW5lLCBnZXRNYXJrZWRTcGFuRm9yKGVuZC5saW5lLm1hcmtlZFNwYW5zLCBzcGFuLm1hcmtlcikpXG4gIH1cbiAgaWYgKHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aClcbiAgICB7IHJldHVybiB0cnVlIH1cbiAgZm9yICh2YXIgc3AgPSAodm9pZCAwKSwgaSA9IDA7IGkgPCBsaW5lLm1hcmtlZFNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldO1xuICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmICFzcC5tYXJrZXIud2lkZ2V0Tm9kZSAmJiBzcC5mcm9tID09IHNwYW4udG8gJiZcbiAgICAgICAgKHNwLnRvID09IG51bGwgfHwgc3AudG8gIT0gc3Bhbi5mcm9tKSAmJlxuICAgICAgICAoc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmXG4gICAgICAgIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3ApKSB7IHJldHVybiB0cnVlIH1cbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBoZWlnaHQgYWJvdmUgdGhlIGdpdmVuIGxpbmUuXG5mdW5jdGlvbiBoZWlnaHRBdExpbmUobGluZU9iaikge1xuICBsaW5lT2JqID0gdmlzdWFsTGluZShsaW5lT2JqKTtcblxuICB2YXIgaCA9IDAsIGNodW5rID0gbGluZU9iai5wYXJlbnQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldO1xuICAgIGlmIChsaW5lID09IGxpbmVPYmopIHsgYnJlYWsgfVxuICAgIGVsc2UgeyBoICs9IGxpbmUuaGVpZ2h0OyB9XG4gIH1cbiAgZm9yICh2YXIgcCA9IGNodW5rLnBhcmVudDsgcDsgY2h1bmsgPSBwLCBwID0gY2h1bmsucGFyZW50KSB7XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgcC5jaGlsZHJlbi5sZW5ndGg7ICsraSQxKSB7XG4gICAgICB2YXIgY3VyID0gcC5jaGlsZHJlbltpJDFdO1xuICAgICAgaWYgKGN1ciA9PSBjaHVuaykgeyBicmVhayB9XG4gICAgICBlbHNlIHsgaCArPSBjdXIuaGVpZ2h0OyB9XG4gICAgfVxuICB9XG4gIHJldHVybiBoXG59XG5cbi8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBsZW5ndGggb2YgYSBsaW5lLCB0YWtpbmcgaW50byBhY2NvdW50XG4vLyBjb2xsYXBzZWQgcmFuZ2VzIChzZWUgbWFya1RleHQpIHRoYXQgbWlnaHQgaGlkZSBwYXJ0cywgYW5kIGpvaW5cbi8vIG90aGVyIGxpbmVzIG9udG8gaXQuXG5mdW5jdGlvbiBsaW5lTGVuZ3RoKGxpbmUpIHtcbiAgaWYgKGxpbmUuaGVpZ2h0ID09IDApIHsgcmV0dXJuIDAgfVxuICB2YXIgbGVuID0gbGluZS50ZXh0Lmxlbmd0aCwgbWVyZ2VkLCBjdXIgPSBsaW5lO1xuICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0U3RhcnQoY3VyKSkge1xuICAgIHZhciBmb3VuZCA9IG1lcmdlZC5maW5kKDAsIHRydWUpO1xuICAgIGN1ciA9IGZvdW5kLmZyb20ubGluZTtcbiAgICBsZW4gKz0gZm91bmQuZnJvbS5jaCAtIGZvdW5kLnRvLmNoO1xuICB9XG4gIGN1ciA9IGxpbmU7XG4gIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQoY3VyKSkge1xuICAgIHZhciBmb3VuZCQxID0gbWVyZ2VkLmZpbmQoMCwgdHJ1ZSk7XG4gICAgbGVuIC09IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kJDEuZnJvbS5jaDtcbiAgICBjdXIgPSBmb3VuZCQxLnRvLmxpbmU7XG4gICAgbGVuICs9IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kJDEudG8uY2g7XG4gIH1cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBGaW5kIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50LlxuZnVuY3Rpb24gZmluZE1heExpbmUoY20pIHtcbiAgdmFyIGQgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7XG4gIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3QpO1xuICBkLm1heExpbmVMZW5ndGggPSBsaW5lTGVuZ3RoKGQubWF4TGluZSk7XG4gIGQubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICBkb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgIHZhciBsZW4gPSBsaW5lTGVuZ3RoKGxpbmUpO1xuICAgIGlmIChsZW4gPiBkLm1heExpbmVMZW5ndGgpIHtcbiAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxlbjtcbiAgICAgIGQubWF4TGluZSA9IGxpbmU7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gQklESSBIRUxQRVJTXG5cbmZ1bmN0aW9uIGl0ZXJhdGVCaWRpU2VjdGlvbnMob3JkZXIsIGZyb20sIHRvLCBmKSB7XG4gIGlmICghb3JkZXIpIHsgcmV0dXJuIGYoZnJvbSwgdG8sIFwibHRyXCIsIDApIH1cbiAgdmFyIGZvdW5kID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFydCA9IG9yZGVyW2ldO1xuICAgIGlmIChwYXJ0LmZyb20gPCB0byAmJiBwYXJ0LnRvID4gZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkge1xuICAgICAgZihNYXRoLm1heChwYXJ0LmZyb20sIGZyb20pLCBNYXRoLm1pbihwYXJ0LnRvLCB0byksIHBhcnQubGV2ZWwgPT0gMSA/IFwicnRsXCIgOiBcImx0clwiLCBpKTtcbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZCkgeyBmKGZyb20sIHRvLCBcImx0clwiKTsgfVxufVxuXG52YXIgYmlkaU90aGVyID0gbnVsbDtcbmZ1bmN0aW9uIGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpIHtcbiAgdmFyIGZvdW5kO1xuICBiaWRpT3RoZXIgPSBudWxsO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGN1ciA9IG9yZGVyW2ldO1xuICAgIGlmIChjdXIuZnJvbSA8IGNoICYmIGN1ci50byA+IGNoKSB7IHJldHVybiBpIH1cbiAgICBpZiAoY3VyLnRvID09IGNoKSB7XG4gICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvICYmIHN0aWNreSA9PSBcImJlZm9yZVwiKSB7IGZvdW5kID0gaTsgfVxuICAgICAgZWxzZSB7IGJpZGlPdGhlciA9IGk7IH1cbiAgICB9XG4gICAgaWYgKGN1ci5mcm9tID09IGNoKSB7XG4gICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvICYmIHN0aWNreSAhPSBcImJlZm9yZVwiKSB7IGZvdW5kID0gaTsgfVxuICAgICAgZWxzZSB7IGJpZGlPdGhlciA9IGk7IH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZvdW5kICE9IG51bGwgPyBmb3VuZCA6IGJpZGlPdGhlclxufVxuXG4vLyBCaWRpcmVjdGlvbmFsIG9yZGVyaW5nIGFsZ29yaXRobVxuLy8gU2VlIGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS90cjktMTMuaHRtbCBmb3IgdGhlIGFsZ29yaXRobVxuLy8gdGhhdCB0aGlzIChwYXJ0aWFsbHkpIGltcGxlbWVudHMuXG5cbi8vIE9uZS1jaGFyIGNvZGVzIHVzZWQgZm9yIGNoYXJhY3RlciB0eXBlczpcbi8vIEwgKEwpOiAgIExlZnQtdG8tUmlnaHRcbi8vIFIgKFIpOiAgIFJpZ2h0LXRvLUxlZnRcbi8vIHIgKEFMKTogIFJpZ2h0LXRvLUxlZnQgQXJhYmljXG4vLyAxIChFTik6ICBFdXJvcGVhbiBOdW1iZXJcbi8vICsgKEVTKTogIEV1cm9wZWFuIE51bWJlciBTZXBhcmF0b3Jcbi8vICUgKEVUKTogIEV1cm9wZWFuIE51bWJlciBUZXJtaW5hdG9yXG4vLyBuIChBTik6ICBBcmFiaWMgTnVtYmVyXG4vLyAsIChDUyk6ICBDb21tb24gTnVtYmVyIFNlcGFyYXRvclxuLy8gbSAoTlNNKTogTm9uLVNwYWNpbmcgTWFya1xuLy8gYiAoQk4pOiAgQm91bmRhcnkgTmV1dHJhbFxuLy8gcyAoQik6ICAgUGFyYWdyYXBoIFNlcGFyYXRvclxuLy8gdCAoUyk6ICAgU2VnbWVudCBTZXBhcmF0b3Jcbi8vIHcgKFdTKTogIFdoaXRlc3BhY2Vcbi8vIE4gKE9OKTogIE90aGVyIE5ldXRyYWxzXG5cbi8vIFJldHVybnMgbnVsbCBpZiBjaGFyYWN0ZXJzIGFyZSBvcmRlcmVkIGFzIHRoZXkgYXBwZWFyXG4vLyAobGVmdC10by1yaWdodCksIG9yIGFuIGFycmF5IG9mIHNlY3Rpb25zICh7ZnJvbSwgdG8sIGxldmVsfVxuLy8gb2JqZWN0cykgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgdmlzdWFsbHkuXG52YXIgYmlkaU9yZGVyaW5nID0gKGZ1bmN0aW9uKCkge1xuICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMCB0byAweGZmXG4gIHZhciBsb3dUeXBlcyA9IFwiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5cIjtcbiAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDB4NjAwIHRvIDB4NmY5XG4gIHZhciBhcmFiaWNUeXBlcyA9IFwibm5ubm5uTk5yJSVyLHJOTm1tbW1tbW1tbW1tcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJybW1tbW1tbW1tbW1tbW1tbW1tbW1tbm5ubm5ubm5ubiVubnJycm1ycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1uTm1tbW1tbXJybW1ObW1tbXJyMTExMTExMTExMVwiO1xuICBmdW5jdGlvbiBjaGFyVHlwZShjb2RlKSB7XG4gICAgaWYgKGNvZGUgPD0gMHhmNykgeyByZXR1cm4gbG93VHlwZXMuY2hhckF0KGNvZGUpIH1cbiAgICBlbHNlIGlmICgweDU5MCA8PSBjb2RlICYmIGNvZGUgPD0gMHg1ZjQpIHsgcmV0dXJuIFwiUlwiIH1cbiAgICBlbHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZjkpIHsgcmV0dXJuIGFyYWJpY1R5cGVzLmNoYXJBdChjb2RlIC0gMHg2MDApIH1cbiAgICBlbHNlIGlmICgweDZlZSA8PSBjb2RlICYmIGNvZGUgPD0gMHg4YWMpIHsgcmV0dXJuIFwiclwiIH1cbiAgICBlbHNlIGlmICgweDIwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MjAwYikgeyByZXR1cm4gXCJ3XCIgfVxuICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSB7IHJldHVybiBcImJcIiB9XG4gICAgZWxzZSB7IHJldHVybiBcIkxcIiB9XG4gIH1cblxuICB2YXIgYmlkaVJFID0gL1tcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUwNzAwLVxcdTA4YWNdLztcbiAgdmFyIGlzTmV1dHJhbCA9IC9bc3R3Tl0vLCBpc1N0cm9uZyA9IC9bTFJyXS8sIGNvdW50c0FzTGVmdCA9IC9bTGIxbl0vLCBjb3VudHNBc051bSA9IC9bMW5dLztcblxuICBmdW5jdGlvbiBCaWRpU3BhbihsZXZlbCwgZnJvbSwgdG8pIHtcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gICAgdGhpcy5mcm9tID0gZnJvbTsgdGhpcy50byA9IHRvO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHN0ciwgZGlyZWN0aW9uKSB7XG4gICAgdmFyIG91dGVyVHlwZSA9IGRpcmVjdGlvbiA9PSBcImx0clwiID8gXCJMXCIgOiBcIlJcIjtcblxuICAgIGlmIChzdHIubGVuZ3RoID09IDAgfHwgZGlyZWN0aW9uID09IFwibHRyXCIgJiYgIWJpZGlSRS50ZXN0KHN0cikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgbGVuID0gc3RyLmxlbmd0aCwgdHlwZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgeyB0eXBlcy5wdXNoKGNoYXJUeXBlKHN0ci5jaGFyQ29kZUF0KGkpKSk7IH1cblxuICAgIC8vIFcxLiBFeGFtaW5lIGVhY2ggbm9uLXNwYWNpbmcgbWFyayAoTlNNKSBpbiB0aGUgbGV2ZWwgcnVuLCBhbmRcbiAgICAvLyBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIE5TTSB0byB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXNcbiAgICAvLyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGxcbiAgICAvLyBnZXQgdGhlIHR5cGUgb2Ygc29yLlxuICAgIGZvciAodmFyIGkkMSA9IDAsIHByZXYgPSBvdXRlclR5cGU7IGkkMSA8IGxlbjsgKytpJDEpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZXNbaSQxXTtcbiAgICAgIGlmICh0eXBlID09IFwibVwiKSB7IHR5cGVzW2kkMV0gPSBwcmV2OyB9XG4gICAgICBlbHNlIHsgcHJldiA9IHR5cGU7IH1cbiAgICB9XG5cbiAgICAvLyBXMi4gU2VhcmNoIGJhY2t3YXJkcyBmcm9tIGVhY2ggaW5zdGFuY2Ugb2YgYSBFdXJvcGVhbiBudW1iZXJcbiAgICAvLyB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIEFMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhblxuICAgIC8vIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWNcbiAgICAvLyBudW1iZXIuXG4gICAgLy8gVzMuIENoYW5nZSBhbGwgQUxzIHRvIFIuXG4gICAgZm9yICh2YXIgaSQyID0gMCwgY3VyID0gb3V0ZXJUeXBlOyBpJDIgPCBsZW47ICsraSQyKSB7XG4gICAgICB2YXIgdHlwZSQxID0gdHlwZXNbaSQyXTtcbiAgICAgIGlmICh0eXBlJDEgPT0gXCIxXCIgJiYgY3VyID09IFwiclwiKSB7IHR5cGVzW2kkMl0gPSBcIm5cIjsgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDEpKSB7IGN1ciA9IHR5cGUkMTsgaWYgKHR5cGUkMSA9PSBcInJcIikgeyB0eXBlc1tpJDJdID0gXCJSXCI7IH0gfVxuICAgIH1cblxuICAgIC8vIFc0LiBBIHNpbmdsZSBFdXJvcGVhbiBzZXBhcmF0b3IgYmV0d2VlbiB0d28gRXVyb3BlYW4gbnVtYmVyc1xuICAgIC8vIGNoYW5nZXMgdG8gYSBFdXJvcGVhbiBudW1iZXIuIEEgc2luZ2xlIGNvbW1vbiBzZXBhcmF0b3IgYmV0d2VlblxuICAgIC8vIHR3byBudW1iZXJzIG9mIHRoZSBzYW1lIHR5cGUgY2hhbmdlcyB0byB0aGF0IHR5cGUuXG4gICAgZm9yICh2YXIgaSQzID0gMSwgcHJldiQxID0gdHlwZXNbMF07IGkkMyA8IGxlbiAtIDE7ICsraSQzKSB7XG4gICAgICB2YXIgdHlwZSQyID0gdHlwZXNbaSQzXTtcbiAgICAgIGlmICh0eXBlJDIgPT0gXCIrXCIgJiYgcHJldiQxID09IFwiMVwiICYmIHR5cGVzW2kkMysxXSA9PSBcIjFcIikgeyB0eXBlc1tpJDNdID0gXCIxXCI7IH1cbiAgICAgIGVsc2UgaWYgKHR5cGUkMiA9PSBcIixcIiAmJiBwcmV2JDEgPT0gdHlwZXNbaSQzKzFdICYmXG4gICAgICAgICAgICAgICAocHJldiQxID09IFwiMVwiIHx8IHByZXYkMSA9PSBcIm5cIikpIHsgdHlwZXNbaSQzXSA9IHByZXYkMTsgfVxuICAgICAgcHJldiQxID0gdHlwZSQyO1xuICAgIH1cblxuICAgIC8vIFc1LiBBIHNlcXVlbmNlIG9mIEV1cm9wZWFuIHRlcm1pbmF0b3JzIGFkamFjZW50IHRvIEV1cm9wZWFuXG4gICAgLy8gbnVtYmVycyBjaGFuZ2VzIHRvIGFsbCBFdXJvcGVhbiBudW1iZXJzLlxuICAgIC8vIFc2LiBPdGhlcndpc2UsIHNlcGFyYXRvcnMgYW5kIHRlcm1pbmF0b3JzIGNoYW5nZSB0byBPdGhlclxuICAgIC8vIE5ldXRyYWwuXG4gICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgbGVuOyArK2kkNCkge1xuICAgICAgdmFyIHR5cGUkMyA9IHR5cGVzW2kkNF07XG4gICAgICBpZiAodHlwZSQzID09IFwiLFwiKSB7IHR5cGVzW2kkNF0gPSBcIk5cIjsgfVxuICAgICAgZWxzZSBpZiAodHlwZSQzID09IFwiJVwiKSB7XG4gICAgICAgIHZhciBlbmQgPSAodm9pZCAwKTtcbiAgICAgICAgZm9yIChlbmQgPSBpJDQgKyAxOyBlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIiVcIjsgKytlbmQpIHt9XG4gICAgICAgIHZhciByZXBsYWNlID0gKGkkNCAmJiB0eXBlc1tpJDQtMV0gPT0gXCIhXCIpIHx8IChlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIjFcIikgPyBcIjFcIiA6IFwiTlwiO1xuICAgICAgICBmb3IgKHZhciBqID0gaSQ0OyBqIDwgZW5kOyArK2opIHsgdHlwZXNbal0gPSByZXBsYWNlOyB9XG4gICAgICAgIGkkNCA9IGVuZCAtIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVzcuIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyXG4gICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbiBMIGlzXG4gICAgLy8gZm91bmQsIHRoZW4gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIgdG8gTC5cbiAgICBmb3IgKHZhciBpJDUgPSAwLCBjdXIkMSA9IG91dGVyVHlwZTsgaSQ1IDwgbGVuOyArK2kkNSkge1xuICAgICAgdmFyIHR5cGUkNCA9IHR5cGVzW2kkNV07XG4gICAgICBpZiAoY3VyJDEgPT0gXCJMXCIgJiYgdHlwZSQ0ID09IFwiMVwiKSB7IHR5cGVzW2kkNV0gPSBcIkxcIjsgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJvbmcudGVzdCh0eXBlJDQpKSB7IGN1ciQxID0gdHlwZSQ0OyB9XG4gICAgfVxuXG4gICAgLy8gTjEuIEEgc2VxdWVuY2Ugb2YgbmV1dHJhbHMgdGFrZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGVcbiAgICAvLyBzdXJyb3VuZGluZyBzdHJvbmcgdGV4dCBpZiB0aGUgdGV4dCBvbiBib3RoIHNpZGVzIGhhcyB0aGUgc2FtZVxuICAgIC8vIGRpcmVjdGlvbi4gRXVyb3BlYW4gYW5kIEFyYWJpYyBudW1iZXJzIGFjdCBhcyBpZiB0aGV5IHdlcmUgUiBpblxuICAgIC8vIHRlcm1zIG9mIHRoZWlyIGluZmx1ZW5jZSBvbiBuZXV0cmFscy4gU3RhcnQtb2YtbGV2ZWwtcnVuIChzb3IpXG4gICAgLy8gYW5kIGVuZC1vZi1sZXZlbC1ydW4gKGVvcikgYXJlIHVzZWQgYXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMuXG4gICAgLy8gTjIuIEFueSByZW1haW5pbmcgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbi5cbiAgICBmb3IgKHZhciBpJDYgPSAwOyBpJDYgPCBsZW47ICsraSQ2KSB7XG4gICAgICBpZiAoaXNOZXV0cmFsLnRlc3QodHlwZXNbaSQ2XSkpIHtcbiAgICAgICAgdmFyIGVuZCQxID0gKHZvaWQgMCk7XG4gICAgICAgIGZvciAoZW5kJDEgPSBpJDYgKyAxOyBlbmQkMSA8IGxlbiAmJiBpc05ldXRyYWwudGVzdCh0eXBlc1tlbmQkMV0pOyArK2VuZCQxKSB7fVxuICAgICAgICB2YXIgYmVmb3JlID0gKGkkNiA/IHR5cGVzW2kkNi0xXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgIHZhciBhZnRlciA9IChlbmQkMSA8IGxlbiA/IHR5cGVzW2VuZCQxXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgIHZhciByZXBsYWNlJDEgPSBiZWZvcmUgPT0gYWZ0ZXIgPyAoYmVmb3JlID8gXCJMXCIgOiBcIlJcIikgOiBvdXRlclR5cGU7XG4gICAgICAgIGZvciAodmFyIGokMSA9IGkkNjsgaiQxIDwgZW5kJDE7ICsraiQxKSB7IHR5cGVzW2okMV0gPSByZXBsYWNlJDE7IH1cbiAgICAgICAgaSQ2ID0gZW5kJDEgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQgYWxnb3JpdGhtLCBpbiBvcmRlciB0byBhdm9pZFxuICAgIC8vIGJ1aWxkaW5nIHVwIGFuIGFjdHVhbCBsZXZlbHMgYXJyYXkuIFNpbmNlIHRoZXJlIGFyZSBvbmx5IHRocmVlXG4gICAgLy8gbGV2ZWxzICgwLCAxLCAyKSBpbiBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgdGFrZVxuICAgIC8vIGV4cGxpY2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0aGUgb3JkZXIgb25cbiAgICAvLyB0aGUgZmx5LCB3aXRob3V0IGZvbGxvd2luZyB0aGUgbGV2ZWwtYmFzZWQgYWxnb3JpdGhtLlxuICAgIHZhciBvcmRlciA9IFtdLCBtO1xuICAgIGZvciAodmFyIGkkNyA9IDA7IGkkNyA8IGxlbjspIHtcbiAgICAgIGlmIChjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpJDddKSkge1xuICAgICAgICB2YXIgc3RhcnQgPSBpJDc7XG4gICAgICAgIGZvciAoKytpJDc7IGkkNyA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpJDddKTsgKytpJDcpIHt9XG4gICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIHN0YXJ0LCBpJDcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwb3MgPSBpJDcsIGF0ID0gb3JkZXIubGVuZ3RoO1xuICAgICAgICBmb3IgKCsraSQ3OyBpJDcgPCBsZW4gJiYgdHlwZXNbaSQ3XSAhPSBcIkxcIjsgKytpJDcpIHt9XG4gICAgICAgIGZvciAodmFyIGokMiA9IHBvczsgaiQyIDwgaSQ3Oykge1xuICAgICAgICAgIGlmIChjb3VudHNBc051bS50ZXN0KHR5cGVzW2okMl0pKSB7XG4gICAgICAgICAgICBpZiAocG9zIDwgaiQyKSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaiQyKSk7IH1cbiAgICAgICAgICAgIHZhciBuc3RhcnQgPSBqJDI7XG4gICAgICAgICAgICBmb3IgKCsraiQyOyBqJDIgPCBpJDcgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKTsgKytqJDIpIHt9XG4gICAgICAgICAgICBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigyLCBuc3RhcnQsIGokMikpO1xuICAgICAgICAgICAgcG9zID0gaiQyO1xuICAgICAgICAgIH0gZWxzZSB7ICsraiQyOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcyA8IGkkNykgeyBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGkkNykpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb24gPT0gXCJsdHJcIikge1xuICAgICAgaWYgKG9yZGVyWzBdLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL15cXHMrLykpKSB7XG4gICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDtcbiAgICAgICAgb3JkZXIudW5zaGlmdChuZXcgQmlkaVNwYW4oMCwgMCwgbVswXS5sZW5ndGgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xccyskLykpKSB7XG4gICAgICAgIGxzdChvcmRlcikudG8gLT0gbVswXS5sZW5ndGg7XG4gICAgICAgIG9yZGVyLnB1c2gobmV3IEJpZGlTcGFuKDAsIGxlbiAtIG1bMF0ubGVuZ3RoLCBsZW4pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uID09IFwicnRsXCIgPyBvcmRlci5yZXZlcnNlKCkgOiBvcmRlclxuICB9XG59KSgpO1xuXG4vLyBHZXQgdGhlIGJpZGkgb3JkZXJpbmcgZm9yIHRoZSBnaXZlbiBsaW5lIChhbmQgY2FjaGUgaXQpLiBSZXR1cm5zXG4vLyBmYWxzZSBmb3IgbGluZXMgdGhhdCBhcmUgZnVsbHkgbGVmdC10by1yaWdodCwgYW5kIGFuIGFycmF5IG9mXG4vLyBCaWRpU3BhbiBvYmplY3RzIG90aGVyd2lzZS5cbmZ1bmN0aW9uIGdldE9yZGVyKGxpbmUsIGRpcmVjdGlvbikge1xuICB2YXIgb3JkZXIgPSBsaW5lLm9yZGVyO1xuICBpZiAob3JkZXIgPT0gbnVsbCkgeyBvcmRlciA9IGxpbmUub3JkZXIgPSBiaWRpT3JkZXJpbmcobGluZS50ZXh0LCBkaXJlY3Rpb24pOyB9XG4gIHJldHVybiBvcmRlclxufVxuXG4vLyBFVkVOVCBIQU5ETElOR1xuXG4vLyBMaWdodHdlaWdodCBldmVudCBmcmFtZXdvcmsuIG9uL29mZiBhbHNvIHdvcmsgb24gRE9NIG5vZGVzLFxuLy8gcmVnaXN0ZXJpbmcgbmF0aXZlIERPTSBoYW5kbGVycy5cblxudmFyIG5vSGFuZGxlcnMgPSBbXTtcblxudmFyIG9uID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgZikge1xuICBpZiAoZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTtcbiAgfSBlbHNlIGlmIChlbWl0dGVyLmF0dGFjaEV2ZW50KSB7XG4gICAgZW1pdHRlci5hdHRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBmKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbWFwJCQxID0gZW1pdHRlci5faGFuZGxlcnMgfHwgKGVtaXR0ZXIuX2hhbmRsZXJzID0ge30pO1xuICAgIG1hcCQkMVt0eXBlXSA9IChtYXAkJDFbdHlwZV0gfHwgbm9IYW5kbGVycykuY29uY2F0KGYpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLl9oYW5kbGVycyAmJiBlbWl0dGVyLl9oYW5kbGVyc1t0eXBlXSB8fCBub0hhbmRsZXJzXG59XG5cbmZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7XG4gIGlmIChlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKGVtaXR0ZXIuZGV0YWNoRXZlbnQpIHtcbiAgICBlbWl0dGVyLmRldGFjaEV2ZW50KFwib25cIiArIHR5cGUsIGYpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtYXAkJDEgPSBlbWl0dGVyLl9oYW5kbGVycywgYXJyID0gbWFwJCQxICYmIG1hcCQkMVt0eXBlXTtcbiAgICBpZiAoYXJyKSB7XG4gICAgICB2YXIgaW5kZXggPSBpbmRleE9mKGFyciwgZik7XG4gICAgICBpZiAoaW5kZXggPiAtMSlcbiAgICAgICAgeyBtYXAkJDFbdHlwZV0gPSBhcnIuc2xpY2UoMCwgaW5kZXgpLmNvbmNhdChhcnIuc2xpY2UoaW5kZXggKyAxKSk7IH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lnbmFsKGVtaXR0ZXIsIHR5cGUgLyosIHZhbHVlcy4uLiovKSB7XG4gIHZhciBoYW5kbGVycyA9IGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpO1xuICBpZiAoIWhhbmRsZXJzLmxlbmd0aCkgeyByZXR1cm4gfVxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyArK2kpIHsgaGFuZGxlcnNbaV0uYXBwbHkobnVsbCwgYXJncyk7IH1cbn1cblxuLy8gVGhlIERPTSBldmVudHMgdGhhdCBDb2RlTWlycm9yIGhhbmRsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnlcbi8vIHJlZ2lzdGVyaW5nIGEgKG5vbi1ET00pIGhhbmRsZXIgb24gdGhlIGVkaXRvciBmb3IgdGhlIGV2ZW50IG5hbWUsXG4vLyBhbmQgcHJldmVudERlZmF1bHQtaW5nIHRoZSBldmVudCBpbiB0aGF0IGhhbmRsZXIuXG5mdW5jdGlvbiBzaWduYWxET01FdmVudChjbSwgZSwgb3ZlcnJpZGUpIHtcbiAgaWYgKHR5cGVvZiBlID09IFwic3RyaW5nXCIpXG4gICAgeyBlID0ge3R5cGU6IGUsIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHsgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsgfX07IH1cbiAgc2lnbmFsKGNtLCBvdmVycmlkZSB8fCBlLnR5cGUsIGNtLCBlKTtcbiAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKSB8fCBlLmNvZGVtaXJyb3JJZ25vcmVcbn1cblxuZnVuY3Rpb24gc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pIHtcbiAgdmFyIGFyciA9IGNtLl9oYW5kbGVycyAmJiBjbS5faGFuZGxlcnMuY3Vyc29yQWN0aXZpdHk7XG4gIGlmICghYXJyKSB7IHJldHVybiB9XG4gIHZhciBzZXQgPSBjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzIHx8IChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzID0gW10pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgeyBpZiAoaW5kZXhPZihzZXQsIGFycltpXSkgPT0gLTEpXG4gICAgeyBzZXQucHVzaChhcnJbaV0pOyB9IH1cbn1cblxuZnVuY3Rpb24gaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKS5sZW5ndGggPiAwXG59XG5cbi8vIEFkZCBvbiBhbmQgb2ZmIG1ldGhvZHMgdG8gYSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSwgdG8gbWFrZVxuLy8gcmVnaXN0ZXJpbmcgZXZlbnRzIG9uIHN1Y2ggb2JqZWN0cyBtb3JlIGNvbnZlbmllbnQuXG5mdW5jdGlvbiBldmVudE1peGluKGN0b3IpIHtcbiAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywgdHlwZSwgZik7fTtcbiAgY3Rvci5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24odHlwZSwgZikge29mZih0aGlzLCB0eXBlLCBmKTt9O1xufVxuXG4vLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBzdGlsbCBzdXBwb3J0IGp1cmFzc2ljIElFIHZlcnNpb25zLCBzb21lXG4vLyBjb21wYXRpYmlsaXR5IHdyYXBwZXJzIGFyZSBuZWVkZWQuXG5cbmZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkge1xuICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgZWxzZSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfVxufVxuZnVuY3Rpb24gZV9zdG9wUHJvcGFnYXRpb24oZSkge1xuICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfVxuICBlbHNlIHsgZS5jYW5jZWxCdWJibGUgPSB0cnVlOyB9XG59XG5mdW5jdGlvbiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSkge1xuICByZXR1cm4gZS5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBlLmRlZmF1bHRQcmV2ZW50ZWQgOiBlLnJldHVyblZhbHVlID09IGZhbHNlXG59XG5mdW5jdGlvbiBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO31cblxuZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnR9XG5mdW5jdGlvbiBlX2J1dHRvbihlKSB7XG4gIHZhciBiID0gZS53aGljaDtcbiAgaWYgKGIgPT0gbnVsbCkge1xuICAgIGlmIChlLmJ1dHRvbiAmIDEpIHsgYiA9IDE7IH1cbiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDIpIHsgYiA9IDM7IH1cbiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDQpIHsgYiA9IDI7IH1cbiAgfVxuICBpZiAobWFjICYmIGUuY3RybEtleSAmJiBiID09IDEpIHsgYiA9IDM7IH1cbiAgcmV0dXJuIGJcbn1cblxuLy8gRGV0ZWN0IGRyYWctYW5kLWRyb3BcbnZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2LTgsIGJ1dCBJXG4gIC8vIGNvdWxkbid0IGdldCBpdCB0byB3b3JrIHlldC5cbiAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IHJldHVybiBmYWxzZSB9XG4gIHZhciBkaXYgPSBlbHQoJ2RpdicpO1xuICByZXR1cm4gXCJkcmFnZ2FibGVcIiBpbiBkaXYgfHwgXCJkcmFnRHJvcFwiIGluIGRpdlxufSgpO1xuXG52YXIgendzcFN1cHBvcnRlZDtcbmZ1bmN0aW9uIHplcm9XaWR0aEVsZW1lbnQobWVhc3VyZSkge1xuICBpZiAoendzcFN1cHBvcnRlZCA9PSBudWxsKSB7XG4gICAgdmFyIHRlc3QgPSBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBlbHQoXCJzcGFuXCIsIFt0ZXN0LCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcInhcIildKSk7XG4gICAgaWYgKG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgIT0gMClcbiAgICAgIHsgendzcFN1cHBvcnRlZCA9IHRlc3Qub2Zmc2V0V2lkdGggPD0gMSAmJiB0ZXN0Lm9mZnNldEhlaWdodCA+IDIgJiYgIShpZSAmJiBpZV92ZXJzaW9uIDwgOCk7IH1cbiAgfVxuICB2YXIgbm9kZSA9IHp3c3BTdXBwb3J0ZWQgPyBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKSA6XG4gICAgZWx0KFwic3BhblwiLCBcIlxcdTAwYTBcIiwgbnVsbCwgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweFwiKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsIFwiXCIpO1xuICByZXR1cm4gbm9kZVxufVxuXG4vLyBGZWF0dXJlLWRldGVjdCBJRSdzIGNydW1teSBjbGllbnQgcmVjdCByZXBvcnRpbmcgZm9yIGJpZGkgdGV4dFxudmFyIGJhZEJpZGlSZWN0cztcbmZ1bmN0aW9uIGhhc0JhZEJpZGlSZWN0cyhtZWFzdXJlKSB7XG4gIGlmIChiYWRCaWRpUmVjdHMgIT0gbnVsbCkgeyByZXR1cm4gYmFkQmlkaVJlY3RzIH1cbiAgdmFyIHR4dCA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiQVxcdTA2MmVBXCIpKTtcbiAgdmFyIHIwID0gcmFuZ2UodHh0LCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHIxID0gcmFuZ2UodHh0LCAxLCAyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmVtb3ZlQ2hpbGRyZW4obWVhc3VyZSk7XG4gIGlmICghcjAgfHwgcjAubGVmdCA9PSByMC5yaWdodCkgeyByZXR1cm4gZmFsc2UgfSAvLyBTYWZhcmkgcmV0dXJucyBudWxsIGluIHNvbWUgY2FzZXMgKCMyNzgwKVxuICByZXR1cm4gYmFkQmlkaVJlY3RzID0gKHIxLnJpZ2h0IC0gcjAucmlnaHQgPCAzKVxufVxuXG4vLyBTZWUgaWYgXCJcIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuXG4vLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuXG52YXIgc3BsaXRMaW5lc0F1dG8gPSBcIlxcblxcbmJcIi5zcGxpdCgvXFxuLykubGVuZ3RoICE9IDMgPyBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBwb3MgPSAwLCByZXN1bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChwb3MgPD0gbCkge1xuICAgIHZhciBubCA9IHN0cmluZy5pbmRleE9mKFwiXFxuXCIsIHBvcyk7XG4gICAgaWYgKG5sID09IC0xKSB7IG5sID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgIHZhciBsaW5lID0gc3RyaW5nLnNsaWNlKHBvcywgc3RyaW5nLmNoYXJBdChubCAtIDEpID09IFwiXFxyXCIgPyBubCAtIDEgOiBubCk7XG4gICAgdmFyIHJ0ID0gbGluZS5pbmRleE9mKFwiXFxyXCIpO1xuICAgIGlmIChydCAhPSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2gobGluZS5zbGljZSgwLCBydCkpO1xuICAgICAgcG9zICs9IHJ0ICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobGluZSk7XG4gICAgICBwb3MgPSBubCArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn0gOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiBzdHJpbmcuc3BsaXQoL1xcclxcbj98XFxuLyk7IH07XG5cbnZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rpb24gKHRlKSB7XG4gIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQgfVxuICBjYXRjaChlKSB7IHJldHVybiBmYWxzZSB9XG59IDogZnVuY3Rpb24gKHRlKSB7XG4gIHZhciByYW5nZSQkMTtcbiAgdHJ5IHtyYW5nZSQkMSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fVxuICBjYXRjaChlKSB7fVxuICBpZiAoIXJhbmdlJCQxIHx8IHJhbmdlJCQxLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgeyByZXR1cm4gZmFsc2UgfVxuICByZXR1cm4gcmFuZ2UkJDEuY29tcGFyZUVuZFBvaW50cyhcIlN0YXJ0VG9FbmRcIiwgcmFuZ2UkJDEpICE9IDBcbn07XG5cbnZhciBoYXNDb3B5RXZlbnQgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgZSA9IGVsdChcImRpdlwiKTtcbiAgaWYgKFwib25jb3B5XCIgaW4gZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIGUuc2V0QXR0cmlidXRlKFwib25jb3B5XCIsIFwicmV0dXJuO1wiKTtcbiAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSBcImZ1bmN0aW9uXCJcbn0pKCk7XG5cbnZhciBiYWRab29tZWRSZWN0cyA9IG51bGw7XG5mdW5jdGlvbiBoYXNCYWRab29tZWRSZWN0cyhtZWFzdXJlKSB7XG4gIGlmIChiYWRab29tZWRSZWN0cyAhPSBudWxsKSB7IHJldHVybiBiYWRab29tZWRSZWN0cyB9XG4gIHZhciBub2RlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQobWVhc3VyZSwgZWx0KFwic3BhblwiLCBcInhcIikpO1xuICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIGZyb21SYW5nZSA9IHJhbmdlKG5vZGUsIDAsIDEpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gYmFkWm9vbWVkUmVjdHMgPSBNYXRoLmFicyhub3JtYWwubGVmdCAtIGZyb21SYW5nZS5sZWZ0KSA+IDFcbn1cblxuLy8gS25vd24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUVcbnZhciBtb2RlcyA9IHt9O1xudmFyIG1pbWVNb2RlcyA9IHt9O1xuXG4vLyBFeHRyYSBhcmd1bWVudHMgYXJlIHN0b3JlZCBhcyB0aGUgbW9kZSdzIGRlcGVuZGVuY2llcywgd2hpY2ggaXNcbi8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHlcbi8vIGxvYWQgYSBtb2RlLiAoUHJlZmVycmVkIG1lY2hhbmlzbSBpcyB0aGUgcmVxdWlyZS9kZWZpbmUgY2FsbHMuKVxuZnVuY3Rpb24gZGVmaW5lTW9kZShuYW1lLCBtb2RlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICB7IG1vZGUuZGVwZW5kZW5jaWVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsgfVxuICBtb2Rlc1tuYW1lXSA9IG1vZGU7XG59XG5cbmZ1bmN0aW9uIGRlZmluZU1JTUUobWltZSwgc3BlYykge1xuICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjO1xufVxuXG4vLyBHaXZlbiBhIE1JTUUgdHlwZSwgYSB7bmFtZSwgLi4ub3B0aW9uc30gY29uZmlnIG9iamVjdCwgb3IgYSBuYW1lXG4vLyBzdHJpbmcsIHJldHVybiBhIG1vZGUgY29uZmlnIG9iamVjdC5cbmZ1bmN0aW9uIHJlc29sdmVNb2RlKHNwZWMpIHtcbiAgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgbWltZU1vZGVzLmhhc093blByb3BlcnR5KHNwZWMpKSB7XG4gICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTtcbiAgfSBlbHNlIGlmIChzcGVjICYmIHR5cGVvZiBzcGVjLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkge1xuICAgIHZhciBmb3VuZCA9IG1pbWVNb2Rlc1tzcGVjLm5hbWVdO1xuICAgIGlmICh0eXBlb2YgZm91bmQgPT0gXCJzdHJpbmdcIikgeyBmb3VuZCA9IHtuYW1lOiBmb3VuZH07IH1cbiAgICBzcGVjID0gY3JlYXRlT2JqKGZvdW5kLCBzcGVjKTtcbiAgICBzcGVjLm5hbWUgPSBmb3VuZC5uYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgL15bXFx3XFwtXStcXC9bXFx3XFwtXStcXCt4bWwkLy50ZXN0KHNwZWMpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24veG1sXCIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIiAmJiAvXltcXHdcXC1dK1xcL1tcXHdcXC1dK1xcK2pzb24kLy50ZXN0KHNwZWMpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24vanNvblwiKVxuICB9XG4gIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiKSB7IHJldHVybiB7bmFtZTogc3BlY30gfVxuICBlbHNlIHsgcmV0dXJuIHNwZWMgfHwge25hbWU6IFwibnVsbFwifSB9XG59XG5cbi8vIEdpdmVuIGEgbW9kZSBzcGVjIChhbnl0aGluZyB0aGF0IHJlc29sdmVNb2RlIGFjY2VwdHMpLCBmaW5kIGFuZFxuLy8gaW5pdGlhbGl6ZSBhbiBhY3R1YWwgbW9kZSBvYmplY3QuXG5mdW5jdGlvbiBnZXRNb2RlKG9wdGlvbnMsIHNwZWMpIHtcbiAgc3BlYyA9IHJlc29sdmVNb2RlKHNwZWMpO1xuICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdO1xuICBpZiAoIW1mYWN0b3J5KSB7IHJldHVybiBnZXRNb2RlKG9wdGlvbnMsIFwidGV4dC9wbGFpblwiKSB9XG4gIHZhciBtb2RlT2JqID0gbWZhY3Rvcnkob3B0aW9ucywgc3BlYyk7XG4gIGlmIChtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShzcGVjLm5hbWUpKSB7XG4gICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9uc1tzcGVjLm5hbWVdO1xuICAgIGZvciAodmFyIHByb3AgaW4gZXh0cykge1xuICAgICAgaWYgKCFleHRzLmhhc093blByb3BlcnR5KHByb3ApKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChtb2RlT2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7IG1vZGVPYmpbXCJfXCIgKyBwcm9wXSA9IG1vZGVPYmpbcHJvcF07IH1cbiAgICAgIG1vZGVPYmpbcHJvcF0gPSBleHRzW3Byb3BdO1xuICAgIH1cbiAgfVxuICBtb2RlT2JqLm5hbWUgPSBzcGVjLm5hbWU7XG4gIGlmIChzcGVjLmhlbHBlclR5cGUpIHsgbW9kZU9iai5oZWxwZXJUeXBlID0gc3BlYy5oZWxwZXJUeXBlOyB9XG4gIGlmIChzcGVjLm1vZGVQcm9wcykgeyBmb3IgKHZhciBwcm9wJDEgaW4gc3BlYy5tb2RlUHJvcHMpXG4gICAgeyBtb2RlT2JqW3Byb3AkMV0gPSBzcGVjLm1vZGVQcm9wc1twcm9wJDFdOyB9IH1cblxuICByZXR1cm4gbW9kZU9ialxufVxuXG4vLyBUaGlzIGNhbiBiZSB1c2VkIHRvIGF0dGFjaCBwcm9wZXJ0aWVzIHRvIG1vZGUgb2JqZWN0cyBmcm9tXG4vLyBvdXRzaWRlIHRoZSBhY3R1YWwgbW9kZSBkZWZpbml0aW9uLlxudmFyIG1vZGVFeHRlbnNpb25zID0ge307XG5mdW5jdGlvbiBleHRlbmRNb2RlKG1vZGUsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9ucy5oYXNPd25Qcm9wZXJ0eShtb2RlKSA/IG1vZGVFeHRlbnNpb25zW21vZGVdIDogKG1vZGVFeHRlbnNpb25zW21vZGVdID0ge30pO1xuICBjb3B5T2JqKHByb3BlcnRpZXMsIGV4dHMpO1xufVxuXG5mdW5jdGlvbiBjb3B5U3RhdGUobW9kZSwgc3RhdGUpIHtcbiAgaWYgKHN0YXRlID09PSB0cnVlKSB7IHJldHVybiBzdGF0ZSB9XG4gIGlmIChtb2RlLmNvcHlTdGF0ZSkgeyByZXR1cm4gbW9kZS5jb3B5U3RhdGUoc3RhdGUpIH1cbiAgdmFyIG5zdGF0ZSA9IHt9O1xuICBmb3IgKHZhciBuIGluIHN0YXRlKSB7XG4gICAgdmFyIHZhbCA9IHN0YXRlW25dO1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBBcnJheSkgeyB2YWwgPSB2YWwuY29uY2F0KFtdKTsgfVxuICAgIG5zdGF0ZVtuXSA9IHZhbDtcbiAgfVxuICByZXR1cm4gbnN0YXRlXG59XG5cbi8vIEdpdmVuIGEgbW9kZSBhbmQgYSBzdGF0ZSAoZm9yIHRoYXQgbW9kZSksIGZpbmQgdGhlIGlubmVyIG1vZGUgYW5kXG4vLyBzdGF0ZSBhdCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgc3RhdGUgcmVmZXJzIHRvLlxuZnVuY3Rpb24gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKSB7XG4gIHZhciBpbmZvO1xuICB3aGlsZSAobW9kZS5pbm5lck1vZGUpIHtcbiAgICBpbmZvID0gbW9kZS5pbm5lck1vZGUoc3RhdGUpO1xuICAgIGlmICghaW5mbyB8fCBpbmZvLm1vZGUgPT0gbW9kZSkgeyBicmVhayB9XG4gICAgc3RhdGUgPSBpbmZvLnN0YXRlO1xuICAgIG1vZGUgPSBpbmZvLm1vZGU7XG4gIH1cbiAgcmV0dXJuIGluZm8gfHwge21vZGU6IG1vZGUsIHN0YXRlOiBzdGF0ZX1cbn1cblxuZnVuY3Rpb24gc3RhcnRTdGF0ZShtb2RlLCBhMSwgYTIpIHtcbiAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZVxufVxuXG4vLyBTVFJJTkcgU1RSRUFNXG5cbi8vIEZlZCB0byB0aGUgbW9kZSBwYXJzZXJzLCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIHRvIG1ha2Vcbi8vIHBhcnNlcnMgbW9yZSBzdWNjaW5jdC5cblxudmFyIFN0cmluZ1N0cmVhbSA9IGZ1bmN0aW9uKHN0cmluZywgdGFiU2l6ZSwgbGluZU9yYWNsZSkge1xuICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQgPSAwO1xuICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgdGhpcy50YWJTaXplID0gdGFiU2l6ZSB8fCA4O1xuICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLmxhc3RDb2x1bW5WYWx1ZSA9IDA7XG4gIHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgdGhpcy5saW5lT3JhY2xlID0gbGluZU9yYWNsZTtcbn07XG5cblN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZW9sID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGh9O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5zb2wgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMucG9zID09IHRoaXMubGluZVN0YXJ0fTtcblN0cmluZ1N0cmVhbS5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSB8fCB1bmRlZmluZWR9O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpXG4gICAgeyByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspIH1cbn07XG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdCA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpO1xuICB2YXIgb2s7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT0gXCJzdHJpbmdcIikgeyBvayA9IGNoID09IG1hdGNoOyB9XG4gIGVsc2UgeyBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOyB9XG4gIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaH1cbn07XG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFdoaWxlID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICB3aGlsZSAodGhpcy5lYXQobWF0Y2gpKXt9XG4gIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG59O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lYXRTcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgc3RhcnQgPSB0aGlzLnBvcztcbiAgd2hpbGUgKC9bXFxzXFx1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHsgKyt0aGlzJDEucG9zOyB9XG4gIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0XG59O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5za2lwVG9FbmQgPSBmdW5jdGlvbiAoKSB7dGhpcy5wb3MgPSB0aGlzLnN0cmluZy5sZW5ndGg7fTtcblN0cmluZ1N0cmVhbS5wcm90b3R5cGUuc2tpcFRvID0gZnVuY3Rpb24gKGNoKSB7XG4gIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTtcbiAgaWYgKGZvdW5kID4gLTEpIHt0aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZX1cbn07XG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmJhY2tVcCA9IGZ1bmN0aW9uIChuKSB7dGhpcy5wb3MgLT0gbjt9O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5jb2x1bW4gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmxhc3RDb2x1bW5Qb3MgPCB0aGlzLnN0YXJ0KSB7XG4gICAgdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVlKTtcbiAgICB0aGlzLmxhc3RDb2x1bW5Qb3MgPSB0aGlzLnN0YXJ0O1xuICB9XG4gIHJldHVybiB0aGlzLmxhc3RDb2x1bW5WYWx1ZSAtICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApXG59O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5pbmRlbnRhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpIC1cbiAgICAodGhpcy5saW5lU3RhcnQgPyBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5saW5lU3RhcnQsIHRoaXMudGFiU2l6ZSkgOiAwKVxufTtcblN0cmluZ1N0cmVhbS5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiAocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7XG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PSBcInN0cmluZ1wiKSB7XG4gICAgdmFyIGNhc2VkID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7IH07XG4gICAgdmFyIHN1YnN0ciA9IHRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcywgcGF0dGVybi5sZW5ndGgpO1xuICAgIGlmIChjYXNlZChzdWJzdHIpID09IGNhc2VkKHBhdHRlcm4pKSB7XG4gICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7IH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTtcbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2guaW5kZXggPiAwKSB7IHJldHVybiBudWxsIH1cbiAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHsgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOyB9XG4gICAgcmV0dXJuIG1hdGNoXG4gIH1cbn07XG5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpfTtcblN0cmluZ1N0cmVhbS5wcm90b3R5cGUuaGlkZUZpcnN0Q2hhcnMgPSBmdW5jdGlvbiAobiwgaW5uZXIpIHtcbiAgdGhpcy5saW5lU3RhcnQgKz0gbjtcbiAgdHJ5IHsgcmV0dXJuIGlubmVyKCkgfVxuICBmaW5hbGx5IHsgdGhpcy5saW5lU3RhcnQgLT0gbjsgfVxufTtcblN0cmluZ1N0cmVhbS5wcm90b3R5cGUubG9va0FoZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIG9yYWNsZSA9IHRoaXMubGluZU9yYWNsZTtcbiAgcmV0dXJuIG9yYWNsZSAmJiBvcmFjbGUubG9va0FoZWFkKG4pXG59O1xuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5iYXNlVG9rZW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcmFjbGUgPSB0aGlzLmxpbmVPcmFjbGU7XG4gIHJldHVybiBvcmFjbGUgJiYgb3JhY2xlLmJhc2VUb2tlbih0aGlzLnBvcylcbn07XG5cbnZhciBTYXZlZENvbnRleHQgPSBmdW5jdGlvbihzdGF0ZSwgbG9va0FoZWFkKSB7XG4gIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgdGhpcy5sb29rQWhlYWQgPSBsb29rQWhlYWQ7XG59O1xuXG52YXIgQ29udGV4dCA9IGZ1bmN0aW9uKGRvYywgc3RhdGUsIGxpbmUsIGxvb2tBaGVhZCkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIHRoaXMuZG9jID0gZG9jO1xuICB0aGlzLmxpbmUgPSBsaW5lO1xuICB0aGlzLm1heExvb2tBaGVhZCA9IGxvb2tBaGVhZCB8fCAwO1xuICB0aGlzLmJhc2VUb2tlbnMgPSBudWxsO1xuICB0aGlzLmJhc2VUb2tlblBvcyA9IDE7XG59O1xuXG5Db250ZXh0LnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbiAobikge1xuICB2YXIgbGluZSA9IHRoaXMuZG9jLmdldExpbmUodGhpcy5saW5lICsgbik7XG4gIGlmIChsaW5lICE9IG51bGwgJiYgbiA+IHRoaXMubWF4TG9va0FoZWFkKSB7IHRoaXMubWF4TG9va0FoZWFkID0gbjsgfVxuICByZXR1cm4gbGluZVxufTtcblxuQ29udGV4dC5wcm90b3R5cGUuYmFzZVRva2VuID0gZnVuY3Rpb24gKG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAoIXRoaXMuYmFzZVRva2VucykgeyByZXR1cm4gbnVsbCB9XG4gIHdoaWxlICh0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdIDw9IG4pXG4gICAgeyB0aGlzJDEuYmFzZVRva2VuUG9zICs9IDI7IH1cbiAgdmFyIHR5cGUgPSB0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3MgKyAxXTtcbiAgcmV0dXJuIHt0eXBlOiB0eXBlICYmIHR5cGUucmVwbGFjZSgvKCB8XilvdmVybGF5IC4qLywgXCJcIiksXG4gICAgICAgICAgc2l6ZTogdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zXSAtIG59XG59O1xuXG5Db250ZXh0LnByb3RvdHlwZS5uZXh0TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5saW5lKys7XG4gIGlmICh0aGlzLm1heExvb2tBaGVhZCA+IDApIHsgdGhpcy5tYXhMb29rQWhlYWQtLTsgfVxufTtcblxuQ29udGV4dC5mcm9tU2F2ZWQgPSBmdW5jdGlvbiAoZG9jLCBzYXZlZCwgbGluZSkge1xuICBpZiAoc2F2ZWQgaW5zdGFuY2VvZiBTYXZlZENvbnRleHQpXG4gICAgeyByZXR1cm4gbmV3IENvbnRleHQoZG9jLCBjb3B5U3RhdGUoZG9jLm1vZGUsIHNhdmVkLnN0YXRlKSwgbGluZSwgc2F2ZWQubG9va0FoZWFkKSB9XG4gIGVsc2VcbiAgICB7IHJldHVybiBuZXcgQ29udGV4dChkb2MsIGNvcHlTdGF0ZShkb2MubW9kZSwgc2F2ZWQpLCBsaW5lKSB9XG59O1xuXG5Db250ZXh0LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gKGNvcHkpIHtcbiAgdmFyIHN0YXRlID0gY29weSAhPT0gZmFsc2UgPyBjb3B5U3RhdGUodGhpcy5kb2MubW9kZSwgdGhpcy5zdGF0ZSkgOiB0aGlzLnN0YXRlO1xuICByZXR1cm4gdGhpcy5tYXhMb29rQWhlYWQgPiAwID8gbmV3IFNhdmVkQ29udGV4dChzdGF0ZSwgdGhpcy5tYXhMb29rQWhlYWQpIDogc3RhdGVcbn07XG5cblxuLy8gQ29tcHV0ZSBhIHN0eWxlIGFycmF5IChhbiBhcnJheSBzdGFydGluZyB3aXRoIGEgbW9kZSBnZW5lcmF0aW9uXG4vLyAtLSBmb3IgaW52YWxpZGF0aW9uIC0tIGZvbGxvd2VkIGJ5IHBhaXJzIG9mIGVuZCBwb3NpdGlvbnMgYW5kXG4vLyBzdHlsZSBzdHJpbmdzKSwgd2hpY2ggaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIHRva2VucyBvbiB0aGVcbi8vIGxpbmUuXG5mdW5jdGlvbiBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0LCBmb3JjZVRvRW5kKSB7XG4gIC8vIEEgc3R5bGVzIGFycmF5IGFsd2F5cyBzdGFydHMgd2l0aCBhIG51bWJlciBpZGVudGlmeWluZyB0aGVcbiAgLy8gbW9kZS9vdmVybGF5cyB0aGF0IGl0IGlzIGJhc2VkIG9uIChmb3IgZWFzeSBpbnZhbGlkYXRpb24pLlxuICB2YXIgc3QgPSBbY20uc3RhdGUubW9kZUdlbl0sIGxpbmVDbGFzc2VzID0ge307XG4gIC8vIENvbXB1dGUgdGhlIGJhc2UgYXJyYXkgb2Ygc3R5bGVzXG4gIHJ1bk1vZGUoY20sIGxpbmUudGV4dCwgY20uZG9jLm1vZGUsIGNvbnRleHQsIGZ1bmN0aW9uIChlbmQsIHN0eWxlKSB7IHJldHVybiBzdC5wdXNoKGVuZCwgc3R5bGUpOyB9LFxuICAgICAgICAgIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKTtcbiAgdmFyIHN0YXRlID0gY29udGV4dC5zdGF0ZTtcblxuICAvLyBSdW4gb3ZlcmxheXMsIGFkanVzdCBzdHlsZSBhcnJheS5cbiAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIG8gKSB7XG4gICAgY29udGV4dC5iYXNlVG9rZW5zID0gc3Q7XG4gICAgdmFyIG92ZXJsYXkgPSBjbS5zdGF0ZS5vdmVybGF5c1tvXSwgaSA9IDEsIGF0ID0gMDtcbiAgICBjb250ZXh0LnN0YXRlID0gdHJ1ZTtcbiAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgY29udGV4dCwgZnVuY3Rpb24gKGVuZCwgc3R5bGUpIHtcbiAgICAgIHZhciBzdGFydCA9IGk7XG4gICAgICAvLyBFbnN1cmUgdGhlcmUncyBhIHRva2VuIGVuZCBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgYW5kIHRoYXQgaSBwb2ludHMgYXQgaXRcbiAgICAgIHdoaWxlIChhdCA8IGVuZCkge1xuICAgICAgICB2YXIgaV9lbmQgPSBzdFtpXTtcbiAgICAgICAgaWYgKGlfZW5kID4gZW5kKVxuICAgICAgICAgIHsgc3Quc3BsaWNlKGksIDEsIGVuZCwgc3RbaSsxXSwgaV9lbmQpOyB9XG4gICAgICAgIGkgKz0gMjtcbiAgICAgICAgYXQgPSBNYXRoLm1pbihlbmQsIGlfZW5kKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3R5bGUpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChvdmVybGF5Lm9wYXF1ZSkge1xuICAgICAgICBzdC5zcGxpY2Uoc3RhcnQsIGkgLSBzdGFydCwgZW5kLCBcIm92ZXJsYXkgXCIgKyBzdHlsZSk7XG4gICAgICAgIGkgPSBzdGFydCArIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IHN0W3N0YXJ0KzFdO1xuICAgICAgICAgIHN0W3N0YXJ0KzFdID0gKGN1ciA/IGN1ciArIFwiIFwiIDogXCJcIikgKyBcIm92ZXJsYXkgXCIgKyBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGxpbmVDbGFzc2VzKTtcbiAgICBjb250ZXh0LnN0YXRlID0gc3RhdGU7XG4gICAgY29udGV4dC5iYXNlVG9rZW5zID0gbnVsbDtcbiAgICBjb250ZXh0LmJhc2VUb2tlblBvcyA9IDE7XG4gIH07XG5cbiAgZm9yICh2YXIgbyA9IDA7IG8gPCBjbS5zdGF0ZS5vdmVybGF5cy5sZW5ndGg7ICsrbykgbG9vcCggbyApO1xuXG4gIHJldHVybiB7c3R5bGVzOiBzdCwgY2xhc3NlczogbGluZUNsYXNzZXMuYmdDbGFzcyB8fCBsaW5lQ2xhc3Nlcy50ZXh0Q2xhc3MgPyBsaW5lQ2xhc3NlcyA6IG51bGx9XG59XG5cbmZ1bmN0aW9uIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIHVwZGF0ZUZyb250aWVyKSB7XG4gIGlmICghbGluZS5zdHlsZXMgfHwgbGluZS5zdHlsZXNbMF0gIT0gY20uc3RhdGUubW9kZUdlbikge1xuICAgIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgbGluZU5vKGxpbmUpKTtcbiAgICB2YXIgcmVzZXRTdGF0ZSA9IGxpbmUudGV4dC5sZW5ndGggPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCAmJiBjb3B5U3RhdGUoY20uZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpO1xuICAgIHZhciByZXN1bHQgPSBoaWdobGlnaHRMaW5lKGNtLCBsaW5lLCBjb250ZXh0KTtcbiAgICBpZiAocmVzZXRTdGF0ZSkgeyBjb250ZXh0LnN0YXRlID0gcmVzZXRTdGF0ZTsgfVxuICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvbnRleHQuc2F2ZSghcmVzZXRTdGF0ZSk7XG4gICAgbGluZS5zdHlsZXMgPSByZXN1bHQuc3R5bGVzO1xuICAgIGlmIChyZXN1bHQuY2xhc3NlcykgeyBsaW5lLnN0eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOyB9XG4gICAgZWxzZSBpZiAobGluZS5zdHlsZUNsYXNzZXMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOyB9XG4gICAgaWYgKHVwZGF0ZUZyb250aWVyID09PSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIpXG4gICAgICB7IGNtLmRvYy5tb2RlRnJvbnRpZXIgPSBNYXRoLm1heChjbS5kb2MubW9kZUZyb250aWVyLCArK2NtLmRvYy5oaWdobGlnaHRGcm9udGllcik7IH1cbiAgfVxuICByZXR1cm4gbGluZS5zdHlsZXNcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEJlZm9yZShjbSwgbiwgcHJlY2lzZSkge1xuICB2YXIgZG9jID0gY20uZG9jLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgaWYgKCFkb2MubW9kZS5zdGFydFN0YXRlKSB7IHJldHVybiBuZXcgQ29udGV4dChkb2MsIHRydWUsIG4pIH1cbiAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSk7XG4gIHZhciBzYXZlZCA9IHN0YXJ0ID4gZG9jLmZpcnN0ICYmIGdldExpbmUoZG9jLCBzdGFydCAtIDEpLnN0YXRlQWZ0ZXI7XG4gIHZhciBjb250ZXh0ID0gc2F2ZWQgPyBDb250ZXh0LmZyb21TYXZlZChkb2MsIHNhdmVkLCBzdGFydCkgOiBuZXcgQ29udGV4dChkb2MsIHN0YXJ0U3RhdGUoZG9jLm1vZGUpLCBzdGFydCk7XG5cbiAgZG9jLml0ZXIoc3RhcnQsIG4sIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgcHJvY2Vzc0xpbmUoY20sIGxpbmUudGV4dCwgY29udGV4dCk7XG4gICAgdmFyIHBvcyA9IGNvbnRleHQubGluZTtcbiAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBwb3MgPT0gbiAtIDEgfHwgcG9zICUgNSA9PSAwIHx8IHBvcyA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHBvcyA8IGRpc3BsYXkudmlld1RvID8gY29udGV4dC5zYXZlKCkgOiBudWxsO1xuICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgfSk7XG4gIGlmIChwcmVjaXNlKSB7IGRvYy5tb2RlRnJvbnRpZXIgPSBjb250ZXh0LmxpbmU7IH1cbiAgcmV0dXJuIGNvbnRleHRcbn1cblxuLy8gTGlnaHR3ZWlnaHQgZm9ybSBvZiBoaWdobGlnaHQgLS0gcHJvY2VlZCBvdmVyIHRoaXMgbGluZSBhbmRcbi8vIHVwZGF0ZSBzdGF0ZSwgYnV0IGRvbid0IHNhdmUgYSBzdHlsZSBhcnJheS4gVXNlZCBmb3IgbGluZXMgdGhhdFxuLy8gYXJlbid0IGN1cnJlbnRseSB2aXNpYmxlLlxuZnVuY3Rpb24gcHJvY2Vzc0xpbmUoY20sIHRleHQsIGNvbnRleHQsIHN0YXJ0QXQpIHtcbiAgdmFyIG1vZGUgPSBjbS5kb2MubW9kZTtcbiAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KTtcbiAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcyA9IHN0YXJ0QXQgfHwgMDtcbiAgaWYgKHRleHQgPT0gXCJcIikgeyBjYWxsQmxhbmtMaW5lKG1vZGUsIGNvbnRleHQuc3RhdGUpOyB9XG4gIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgY29udGV4dC5zdGF0ZSk7XG4gICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvcztcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQmxhbmtMaW5lKG1vZGUsIHN0YXRlKSB7XG4gIGlmIChtb2RlLmJsYW5rTGluZSkgeyByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUpIH1cbiAgaWYgKCFtb2RlLmlubmVyTW9kZSkgeyByZXR1cm4gfVxuICB2YXIgaW5uZXIgPSBpbm5lck1vZGUobW9kZSwgc3RhdGUpO1xuICBpZiAoaW5uZXIubW9kZS5ibGFua0xpbmUpIHsgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKSB9XG59XG5cbmZ1bmN0aW9uIHJlYWRUb2tlbihtb2RlLCBzdHJlYW0sIHN0YXRlLCBpbm5lcikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICBpZiAoaW5uZXIpIHsgaW5uZXJbMF0gPSBpbm5lck1vZGUobW9kZSwgc3RhdGUpLm1vZGU7IH1cbiAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpO1xuICAgIGlmIChzdHJlYW0ucG9zID4gc3RyZWFtLnN0YXJ0KSB7IHJldHVybiBzdHlsZSB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZSBcIiArIG1vZGUubmFtZSArIFwiIGZhaWxlZCB0byBhZHZhbmNlIHN0cmVhbS5cIilcbn1cblxudmFyIFRva2VuID0gZnVuY3Rpb24oc3RyZWFtLCB0eXBlLCBzdGF0ZSkge1xuICB0aGlzLnN0YXJ0ID0gc3RyZWFtLnN0YXJ0OyB0aGlzLmVuZCA9IHN0cmVhbS5wb3M7XG4gIHRoaXMuc3RyaW5nID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgdGhpcy50eXBlID0gdHlwZSB8fCBudWxsO1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59O1xuXG4vLyBVdGlsaXR5IGZvciBnZXRUb2tlbkF0IGFuZCBnZXRMaW5lVG9rZW5zXG5mdW5jdGlvbiB0YWtlVG9rZW4oY20sIHBvcywgcHJlY2lzZSwgYXNBcnJheSkge1xuICB2YXIgZG9jID0gY20uZG9jLCBtb2RlID0gZG9jLm1vZGUsIHN0eWxlO1xuICBwb3MgPSBjbGlwUG9zKGRvYywgcG9zKTtcbiAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLCBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgcG9zLmxpbmUsIHByZWNpc2UpO1xuICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbShsaW5lLnRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSwgY29udGV4dCksIHRva2VucztcbiAgaWYgKGFzQXJyYXkpIHsgdG9rZW5zID0gW107IH1cbiAgd2hpbGUgKChhc0FycmF5IHx8IHN0cmVhbS5wb3MgPCBwb3MuY2gpICYmICFzdHJlYW0uZW9sKCkpIHtcbiAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICAgIHN0eWxlID0gcmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgY29udGV4dC5zdGF0ZSk7XG4gICAgaWYgKGFzQXJyYXkpIHsgdG9rZW5zLnB1c2gobmV3IFRva2VuKHN0cmVhbSwgc3R5bGUsIGNvcHlTdGF0ZShkb2MubW9kZSwgY29udGV4dC5zdGF0ZSkpKTsgfVxuICB9XG4gIHJldHVybiBhc0FycmF5ID8gdG9rZW5zIDogbmV3IFRva2VuKHN0cmVhbSwgc3R5bGUsIGNvbnRleHQuc3RhdGUpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBvdXRwdXQpIHtcbiAgaWYgKHR5cGUpIHsgZm9yICg7Oykge1xuICAgIHZhciBsaW5lQ2xhc3MgPSB0eXBlLm1hdGNoKC8oPzpefFxccyspbGluZS0oYmFja2dyb3VuZC0pPyhcXFMrKS8pO1xuICAgIGlmICghbGluZUNsYXNzKSB7IGJyZWFrIH1cbiAgICB0eXBlID0gdHlwZS5zbGljZSgwLCBsaW5lQ2xhc3MuaW5kZXgpICsgdHlwZS5zbGljZShsaW5lQ2xhc3MuaW5kZXggKyBsaW5lQ2xhc3NbMF0ubGVuZ3RoKTtcbiAgICB2YXIgcHJvcCA9IGxpbmVDbGFzc1sxXSA/IFwiYmdDbGFzc1wiIDogXCJ0ZXh0Q2xhc3NcIjtcbiAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpXG4gICAgICB7IG91dHB1dFtwcm9wXSA9IGxpbmVDbGFzc1syXTsgfVxuICAgIGVsc2UgaWYgKCEobmV3IFJlZ0V4cChcIig/Ol58XFxzKVwiICsgbGluZUNsYXNzWzJdICsgXCIoPzokfFxccylcIikpLnRlc3Qob3V0cHV0W3Byb3BdKSlcbiAgICAgIHsgb3V0cHV0W3Byb3BdICs9IFwiIFwiICsgbGluZUNsYXNzWzJdOyB9XG4gIH0gfVxuICByZXR1cm4gdHlwZVxufVxuXG4vLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIGNhbGxpbmcgZiBmb3IgZWFjaCB0b2tlbi5cbmZ1bmN0aW9uIHJ1bk1vZGUoY20sIHRleHQsIG1vZGUsIGNvbnRleHQsIGYsIGxpbmVDbGFzc2VzLCBmb3JjZVRvRW5kKSB7XG4gIHZhciBmbGF0dGVuU3BhbnMgPSBtb2RlLmZsYXR0ZW5TcGFucztcbiAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSB7IGZsYXR0ZW5TcGFucyA9IGNtLm9wdGlvbnMuZmxhdHRlblNwYW5zOyB9XG4gIHZhciBjdXJTdGFydCA9IDAsIGN1clN0eWxlID0gbnVsbDtcbiAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KSwgc3R5bGU7XG4gIHZhciBpbm5lciA9IGNtLm9wdGlvbnMuYWRkTW9kZUNsYXNzICYmIFtudWxsXTtcbiAgaWYgKHRleHQgPT0gXCJcIikgeyBleHRyYWN0TGluZUNsYXNzZXMoY2FsbEJsYW5rTGluZShtb2RlLCBjb250ZXh0LnN0YXRlKSwgbGluZUNsYXNzZXMpOyB9XG4gIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgaWYgKHN0cmVhbS5wb3MgPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCkge1xuICAgICAgZmxhdHRlblNwYW5zID0gZmFsc2U7XG4gICAgICBpZiAoZm9yY2VUb0VuZCkgeyBwcm9jZXNzTGluZShjbSwgdGV4dCwgY29udGV4dCwgc3RyZWFtLnBvcyk7IH1cbiAgICAgIHN0cmVhbS5wb3MgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgIHN0eWxlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUgPSBleHRyYWN0TGluZUNsYXNzZXMocmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgY29udGV4dC5zdGF0ZSwgaW5uZXIpLCBsaW5lQ2xhc3Nlcyk7XG4gICAgfVxuICAgIGlmIChpbm5lcikge1xuICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTtcbiAgICAgIGlmIChtTmFtZSkgeyBzdHlsZSA9IFwibS1cIiArIChzdHlsZSA/IG1OYW1lICsgXCIgXCIgKyBzdHlsZSA6IG1OYW1lKTsgfVxuICAgIH1cbiAgICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHlsZSAhPSBzdHlsZSkge1xuICAgICAgd2hpbGUgKGN1clN0YXJ0IDwgc3RyZWFtLnN0YXJ0KSB7XG4gICAgICAgIGN1clN0YXJ0ID0gTWF0aC5taW4oc3RyZWFtLnN0YXJ0LCBjdXJTdGFydCArIDUwMDApO1xuICAgICAgICBmKGN1clN0YXJ0LCBjdXJTdHlsZSk7XG4gICAgICB9XG4gICAgICBjdXJTdHlsZSA9IHN0eWxlO1xuICAgIH1cbiAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICB9XG4gIHdoaWxlIChjdXJTdGFydCA8IHN0cmVhbS5wb3MpIHtcbiAgICAvLyBXZWJraXQgc2VlbXMgdG8gcmVmdXNlIHRvIHJlbmRlciB0ZXh0IG5vZGVzIGxvbmdlciB0aGFuIDU3NDQ0XG4gICAgLy8gY2hhcmFjdGVycywgYW5kIHJldHVybnMgaW5hY2N1cmF0ZSBtZWFzdXJlbWVudHMgaW4gbm9kZXNcbiAgICAvLyBzdGFydGluZyBhcm91bmQgNTAwMCBjaGFycy5cbiAgICB2YXIgcG9zID0gTWF0aC5taW4oc3RyZWFtLnBvcywgY3VyU3RhcnQgKyA1MDAwKTtcbiAgICBmKHBvcywgY3VyU3R5bGUpO1xuICAgIGN1clN0YXJ0ID0gcG9zO1xuICB9XG59XG5cbi8vIEZpbmRzIHRoZSBsaW5lIHRvIHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0b1xuLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYVxuLy8gdmFsaWQgc3RhdGUuIElmIHRoYXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIGxpbmUgd2l0aCB0aGVcbi8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFzdCBjb250ZXh0IHRvXG4vLyBwYXJzZSBjb3JyZWN0bHkuXG5mdW5jdGlvbiBmaW5kU3RhcnRMaW5lKGNtLCBuLCBwcmVjaXNlKSB7XG4gIHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9IGNtLmRvYztcbiAgdmFyIGxpbSA9IHByZWNpc2UgPyAtMSA6IG4gLSAoY20uZG9jLm1vZGUuaW5uZXJNb2RlID8gMTAwMCA6IDEwMCk7XG4gIGZvciAodmFyIHNlYXJjaCA9IG47IHNlYXJjaCA+IGxpbTsgLS1zZWFyY2gpIHtcbiAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgeyByZXR1cm4gZG9jLmZpcnN0IH1cbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBzZWFyY2ggLSAxKSwgYWZ0ZXIgPSBsaW5lLnN0YXRlQWZ0ZXI7XG4gICAgaWYgKGFmdGVyICYmICghcHJlY2lzZSB8fCBzZWFyY2ggKyAoYWZ0ZXIgaW5zdGFuY2VvZiBTYXZlZENvbnRleHQgPyBhZnRlci5sb29rQWhlYWQgOiAwKSA8PSBkb2MubW9kZUZyb250aWVyKSlcbiAgICAgIHsgcmV0dXJuIHNlYXJjaCB9XG4gICAgdmFyIGluZGVudGVkID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCBjbS5vcHRpb25zLnRhYlNpemUpO1xuICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50ID4gaW5kZW50ZWQpIHtcbiAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxO1xuICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW5saW5lXG59XG5cbmZ1bmN0aW9uIHJldHJlYXRGcm9udGllcihkb2MsIG4pIHtcbiAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWluKGRvYy5tb2RlRnJvbnRpZXIsIG4pO1xuICBpZiAoZG9jLmhpZ2hsaWdodEZyb250aWVyIDwgbiAtIDEwKSB7IHJldHVybiB9XG4gIHZhciBzdGFydCA9IGRvYy5maXJzdDtcbiAgZm9yICh2YXIgbGluZSA9IG4gLSAxOyBsaW5lID4gc3RhcnQ7IGxpbmUtLSkge1xuICAgIHZhciBzYXZlZCA9IGdldExpbmUoZG9jLCBsaW5lKS5zdGF0ZUFmdGVyO1xuICAgIC8vIGNoYW5nZSBpcyBvbiAzXG4gICAgLy8gc3RhdGUgb24gbGluZSAxIGxvb2tlZCBhaGVhZCAyIC0tIHNvIHNhdyAzXG4gICAgLy8gdGVzdCAxICsgMiA8IDMgc2hvdWxkIGNvdmVyIHRoaXNcbiAgICBpZiAoc2F2ZWQgJiYgKCEoc2F2ZWQgaW5zdGFuY2VvZiBTYXZlZENvbnRleHQpIHx8IGxpbmUgKyBzYXZlZC5sb29rQWhlYWQgPCBuKSkge1xuICAgICAgc3RhcnQgPSBsaW5lICsgMTtcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG4gIGRvYy5oaWdobGlnaHRGcm9udGllciA9IE1hdGgubWluKGRvYy5oaWdobGlnaHRGcm9udGllciwgc3RhcnQpO1xufVxuXG4vLyBMSU5FIERBVEEgU1RSVUNUVVJFXG5cbi8vIExpbmUgb2JqZWN0cy4gVGhlc2UgaG9sZCBzdGF0ZSByZWxhdGVkIHRvIGEgbGluZSwgaW5jbHVkaW5nXG4vLyBoaWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuXG52YXIgTGluZSA9IGZ1bmN0aW9uKHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkge1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICBhdHRhY2hNYXJrZWRTcGFucyh0aGlzLCBtYXJrZWRTcGFucyk7XG4gIHRoaXMuaGVpZ2h0ID0gZXN0aW1hdGVIZWlnaHQgPyBlc3RpbWF0ZUhlaWdodCh0aGlzKSA6IDE7XG59O1xuXG5MaW5lLnByb3RvdHlwZS5saW5lTm8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsaW5lTm8odGhpcykgfTtcbmV2ZW50TWl4aW4oTGluZSk7XG5cbi8vIENoYW5nZSB0aGUgY29udGVudCAodGV4dCwgbWFya2Vycykgb2YgYSBsaW5lLiBBdXRvbWF0aWNhbGx5XG4vLyBpbnZhbGlkYXRlcyBjYWNoZWQgaW5mb3JtYXRpb24gYW5kIHRyaWVzIHRvIHJlLWVzdGltYXRlIHRoZVxuLy8gbGluZSdzIGhlaWdodC5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7XG4gIGxpbmUudGV4dCA9IHRleHQ7XG4gIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICBpZiAobGluZS5zdHlsZXMpIHsgbGluZS5zdHlsZXMgPSBudWxsOyB9XG4gIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIHsgbGluZS5vcmRlciA9IG51bGw7IH1cbiAgZGV0YWNoTWFya2VkU3BhbnMobGluZSk7XG4gIGF0dGFjaE1hcmtlZFNwYW5zKGxpbmUsIG1hcmtlZFNwYW5zKTtcbiAgdmFyIGVzdEhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1hdGVIZWlnaHQobGluZSkgOiAxO1xuICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxufVxuXG4vLyBEZXRhY2ggYSBsaW5lIGZyb20gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGl0cyBtYXJrZXJzLlxuZnVuY3Rpb24gY2xlYW5VcExpbmUobGluZSkge1xuICBsaW5lLnBhcmVudCA9IG51bGw7XG4gIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpO1xufVxuXG4vLyBDb252ZXJ0IGEgc3R5bGUgYXMgcmV0dXJuZWQgYnkgYSBtb2RlIChlaXRoZXIgbnVsbCwgb3IgYSBzdHJpbmdcbi8vIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0byBhIENTUyBzdHlsZS4gVGhpcyBpcyBjYWNoZWQsXG4vLyBhbmQgYWxzbyBsb29rcyBmb3IgbGluZS13aWRlIHN0eWxlcy5cbnZhciBzdHlsZVRvQ2xhc3NDYWNoZSA9IHt9O1xudmFyIHN0eWxlVG9DbGFzc0NhY2hlV2l0aE1vZGUgPSB7fTtcbmZ1bmN0aW9uIGludGVycHJldFRva2VuU3R5bGUoc3R5bGUsIG9wdGlvbnMpIHtcbiAgaWYgKCFzdHlsZSB8fCAvXlxccyokLy50ZXN0KHN0eWxlKSkgeyByZXR1cm4gbnVsbCB9XG4gIHZhciBjYWNoZSA9IG9wdGlvbnMuYWRkTW9kZUNsYXNzID8gc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA6IHN0eWxlVG9DbGFzc0NhY2hlO1xuICByZXR1cm4gY2FjaGVbc3R5bGVdIHx8XG4gICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxhY2UoL1xcUysvZywgXCJjbS0kJlwiKSlcbn1cblxuLy8gUmVuZGVyIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhlIHRleHQgb2YgYSBsaW5lLiBBbHNvIGJ1aWxkc1xuLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2ludHMgYXQgdGhlIERPTSBub2RlcyB0aGF0IHJlcHJlc2VudFxuLy8gc3BlY2lmaWMgc3RyZXRjaGVzIG9mIHRleHQsIGFuZCBpcyB1c2VkIGJ5IHRoZSBtZWFzdXJpbmcgY29kZS5cbi8vIFRoZSByZXR1cm5lZCBvYmplY3QgY29udGFpbnMgdGhlIERPTSBub2RlLCB0aGlzIG1hcCwgYW5kXG4vLyBpbmZvcm1hdGlvbiBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIG1vZGUuXG5mdW5jdGlvbiBidWlsZExpbmVDb250ZW50KGNtLCBsaW5lVmlldykge1xuICAvLyBUaGUgcGFkZGluZy1yaWdodCBmb3JjZXMgdGhlIGVsZW1lbnQgdG8gaGF2ZSBhICdib3JkZXInLCB3aGljaFxuICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUtbGV2ZWwgYm91bmRpbmdcbiAgLy8gcmVjdGFuZ2xlcyBmb3IgaXQgKGluIG1lYXN1cmVDaGFyKS5cbiAgdmFyIGNvbnRlbnQgPSBlbHRQKFwic3BhblwiLCBudWxsLCBudWxsLCB3ZWJraXQgPyBcInBhZGRpbmctcmlnaHQ6IC4xcHhcIiA6IG51bGwpO1xuICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdFAoXCJwcmVcIiwgW2NvbnRlbnRdLCBcIkNvZGVNaXJyb3ItbGluZVwiKSwgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgICAgICAgY29sOiAwLCBwb3M6IDAsIGNtOiBjbSxcbiAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiAoaWUgfHwgd2Via2l0KSAmJiBjbS5nZXRPcHRpb24oXCJsaW5lV3JhcHBpbmdcIil9O1xuICBsaW5lVmlldy5tZWFzdXJlID0ge307XG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBsb2dpY2FsIGxpbmVzIHRoYXQgbWFrZSB1cCB0aGlzIHZpc3VhbCBsaW5lLlxuICBmb3IgKHZhciBpID0gMDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3RoIDogMCk7IGkrKykge1xuICAgIHZhciBsaW5lID0gaSA/IGxpbmVWaWV3LnJlc3RbaSAtIDFdIDogbGluZVZpZXcubGluZSwgb3JkZXIgPSAodm9pZCAwKTtcbiAgICBidWlsZGVyLnBvcyA9IDA7XG4gICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW47XG4gICAgLy8gT3B0aW9uYWxseSB3aXJlIGluIHNvbWUgaGFja3MgaW50byB0aGUgdG9rZW4tcmVuZGVyaW5nXG4gICAgLy8gYWxnb3JpdGhtLCB0byBkZWFsIHdpdGggYnJvd3NlciBxdWlya3MuXG4gICAgaWYgKGhhc0JhZEJpZGlSZWN0cyhjbS5kaXNwbGF5Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pKSlcbiAgICAgIHsgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW5CYWRCaWRpKGJ1aWxkZXIuYWRkVG9rZW4sIG9yZGVyKTsgfVxuICAgIGJ1aWxkZXIubWFwID0gW107XG4gICAgdmFyIGFsbG93RnJvbnRpZXJVcGRhdGUgPSBsaW5lVmlldyAhPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgJiYgbGluZU5vKGxpbmUpO1xuICAgIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIGdldExpbmVTdHlsZXMoY20sIGxpbmUsIGFsbG93RnJvbnRpZXJVcGRhdGUpKTtcbiAgICBpZiAobGluZS5zdHlsZUNsYXNzZXMpIHtcbiAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKVxuICAgICAgICB7IGJ1aWxkZXIuYmdDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLmJnQ2xhc3MsIGJ1aWxkZXIuYmdDbGFzcyB8fCBcIlwiKTsgfVxuICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcylcbiAgICAgICAgeyBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcywgYnVpbGRlci50ZXh0Q2xhc3MgfHwgXCJcIik7IH1cbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgYXQgbGVhc3QgYSBzaW5nbGUgbm9kZSBpcyBwcmVzZW50LCBmb3IgbWVhc3VyaW5nLlxuICAgIGlmIChidWlsZGVyLm1hcC5sZW5ndGggPT0gMClcbiAgICAgIHsgYnVpbGRlci5tYXAucHVzaCgwLCAwLCBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoemVyb1dpZHRoRWxlbWVudChjbS5kaXNwbGF5Lm1lYXN1cmUpKSk7IH1cblxuICAgIC8vIFN0b3JlIHRoZSBtYXAgYW5kIGEgY2FjaGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmVcbiAgICBpZiAoaSA9PSAwKSB7XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLm1hcCA9IGJ1aWxkZXIubWFwO1xuICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICAobGluZVZpZXcubWVhc3VyZS5tYXBzIHx8IChsaW5lVmlldy5tZWFzdXJlLm1hcHMgPSBbXSkpLnB1c2goYnVpbGRlci5tYXApXG4gICAgICA7KGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzIHx8IChsaW5lVmlldy5tZWFzdXJlLmNhY2hlcyA9IFtdKSkucHVzaCh7fSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGlzc3VlICMyOTAxXG4gIGlmICh3ZWJraXQpIHtcbiAgICB2YXIgbGFzdCA9IGJ1aWxkZXIuY29udGVudC5sYXN0Q2hpbGQ7XG4gICAgaWYgKC9cXGJjbS10YWJcXGIvLnRlc3QobGFzdC5jbGFzc05hbWUpIHx8IChsYXN0LnF1ZXJ5U2VsZWN0b3IgJiYgbGFzdC5xdWVyeVNlbGVjdG9yKFwiLmNtLXRhYlwiKSkpXG4gICAgICB7IGJ1aWxkZXIuY29udGVudC5jbGFzc05hbWUgPSBcImNtLXRhYi13cmFwLWhhY2tcIjsgfVxuICB9XG5cbiAgc2lnbmFsKGNtLCBcInJlbmRlckxpbmVcIiwgY20sIGxpbmVWaWV3LmxpbmUsIGJ1aWxkZXIucHJlKTtcbiAgaWYgKGJ1aWxkZXIucHJlLmNsYXNzTmFtZSlcbiAgICB7IGJ1aWxkZXIudGV4dENsYXNzID0gam9pbkNsYXNzZXMoYnVpbGRlci5wcmUuY2xhc3NOYW1lLCBidWlsZGVyLnRleHRDbGFzcyB8fCBcIlwiKTsgfVxuXG4gIHJldHVybiBidWlsZGVyXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyKGNoKSB7XG4gIHZhciB0b2tlbiA9IGVsdChcInNwYW5cIiwgXCJcXHUyMDIyXCIsIFwiY20taW52YWxpZGNoYXJcIik7XG4gIHRva2VuLnRpdGxlID0gXCJcXFxcdVwiICsgY2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gIHRva2VuLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdG9rZW4udGl0bGUpO1xuICByZXR1cm4gdG9rZW5cbn1cblxuLy8gQnVpbGQgdXAgdGhlIERPTSByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgdG9rZW4sIGFuZCBhZGQgaXQgdG9cbi8vIHRoZSBsaW5lIG1hcC4gVGFrZXMgY2FyZSB0byByZW5kZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIHNlcGFyYXRlbHkuXG5mdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUsIGNzcykge1xuICBpZiAoIXRleHQpIHsgcmV0dXJuIH1cbiAgdmFyIGRpc3BsYXlUZXh0ID0gYnVpbGRlci5zcGxpdFNwYWNlcyA/IHNwbGl0U3BhY2VzKHRleHQsIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSkgOiB0ZXh0O1xuICB2YXIgc3BlY2lhbCA9IGJ1aWxkZXIuY20uc3RhdGUuc3BlY2lhbENoYXJzLCBtdXN0V3JhcCA9IGZhbHNlO1xuICB2YXIgY29udGVudDtcbiAgaWYgKCFzcGVjaWFsLnRlc3QodGV4dCkpIHtcbiAgICBidWlsZGVyLmNvbCArPSB0ZXh0Lmxlbmd0aDtcbiAgICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheVRleHQpO1xuICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4dC5sZW5ndGgsIGNvbnRlbnQpO1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyBtdXN0V3JhcCA9IHRydWU7IH1cbiAgICBidWlsZGVyLnBvcyArPSB0ZXh0Lmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBwb3MgPSAwO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzcGVjaWFsLmxhc3RJbmRleCA9IHBvcztcbiAgICAgIHZhciBtID0gc3BlY2lhbC5leGVjKHRleHQpO1xuICAgICAgdmFyIHNraXBwZWQgPSBtID8gbS5pbmRleCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zO1xuICAgICAgaWYgKHNraXBwZWQpIHtcbiAgICAgICAgdmFyIHR4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0LnNsaWNlKHBvcywgcG9zICsgc2tpcHBlZCkpO1xuICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIFt0eHRdKSk7IH1cbiAgICAgICAgZWxzZSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0KTsgfVxuICAgICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNraXBwZWQsIHR4dCk7XG4gICAgICAgIGJ1aWxkZXIuY29sICs9IHNraXBwZWQ7XG4gICAgICAgIGJ1aWxkZXIucG9zICs9IHNraXBwZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIW0pIHsgYnJlYWsgfVxuICAgICAgcG9zICs9IHNraXBwZWQgKyAxO1xuICAgICAgdmFyIHR4dCQxID0gKHZvaWQgMCk7XG4gICAgICBpZiAobVswXSA9PSBcIlxcdFwiKSB7XG4gICAgICAgIHZhciB0YWJTaXplID0gYnVpbGRlci5jbS5vcHRpb25zLnRhYlNpemUsIHRhYldpZHRoID0gdGFiU2l6ZSAtIGJ1aWxkZXIuY29sICUgdGFiU2l6ZTtcbiAgICAgICAgdHh0JDEgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdChcInNwYW5cIiwgc3BhY2VTdHIodGFiV2lkdGgpLCBcImNtLXRhYlwiKSk7XG4gICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgXCJcXHRcIik7XG4gICAgICAgIGJ1aWxkZXIuY29sICs9IHRhYldpZHRoO1xuICAgICAgfSBlbHNlIGlmIChtWzBdID09IFwiXFxyXCIgfHwgbVswXSA9PSBcIlxcblwiKSB7XG4gICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIG1bMF0gPT0gXCJcXHJcIiA/IFwiXFx1MjQwZFwiIDogXCJcXHUyNDI0XCIsIFwiY20taW52YWxpZGNoYXJcIikpO1xuICAgICAgICB0eHQkMS5zZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIsIG1bMF0pO1xuICAgICAgICBidWlsZGVyLmNvbCArPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHh0JDEgPSBidWlsZGVyLmNtLm9wdGlvbnMuc3BlY2lhbENoYXJQbGFjZWhvbGRlcihtWzBdKTtcbiAgICAgICAgdHh0JDEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBtWzBdKTtcbiAgICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQoZWx0KFwic3BhblwiLCBbdHh0JDFdKSk7IH1cbiAgICAgICAgZWxzZSB7IGNvbnRlbnQuYXBwZW5kQ2hpbGQodHh0JDEpOyB9XG4gICAgICAgIGJ1aWxkZXIuY29sICs9IDE7XG4gICAgICB9XG4gICAgICBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIDEsIHR4dCQxKTtcbiAgICAgIGJ1aWxkZXIucG9zKys7XG4gICAgfVxuICB9XG4gIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSA9IGRpc3BsYXlUZXh0LmNoYXJDb2RlQXQodGV4dC5sZW5ndGggLSAxKSA9PSAzMjtcbiAgaWYgKHN0eWxlIHx8IHN0YXJ0U3R5bGUgfHwgZW5kU3R5bGUgfHwgbXVzdFdyYXAgfHwgY3NzKSB7XG4gICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8IFwiXCI7XG4gICAgaWYgKHN0YXJ0U3R5bGUpIHsgZnVsbFN0eWxlICs9IHN0YXJ0U3R5bGU7IH1cbiAgICBpZiAoZW5kU3R5bGUpIHsgZnVsbFN0eWxlICs9IGVuZFN0eWxlOyB9XG4gICAgdmFyIHRva2VuID0gZWx0KFwic3BhblwiLCBbY29udGVudF0sIGZ1bGxTdHlsZSwgY3NzKTtcbiAgICBpZiAodGl0bGUpIHsgdG9rZW4udGl0bGUgPSB0aXRsZTsgfVxuICAgIHJldHVybiBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodG9rZW4pXG4gIH1cbiAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGNvbnRlbnQpO1xufVxuXG5mdW5jdGlvbiBzcGxpdFNwYWNlcyh0ZXh0LCB0cmFpbGluZ0JlZm9yZSkge1xuICBpZiAodGV4dC5sZW5ndGggPiAxICYmICEvICAvLnRlc3QodGV4dCkpIHsgcmV0dXJuIHRleHQgfVxuICB2YXIgc3BhY2VCZWZvcmUgPSB0cmFpbGluZ0JlZm9yZSwgcmVzdWx0ID0gXCJcIjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoID0gdGV4dC5jaGFyQXQoaSk7XG4gICAgaWYgKGNoID09IFwiIFwiICYmIHNwYWNlQmVmb3JlICYmIChpID09IHRleHQubGVuZ3RoIC0gMSB8fCB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID09IDMyKSlcbiAgICAgIHsgY2ggPSBcIlxcdTAwYTBcIjsgfVxuICAgIHJlc3VsdCArPSBjaDtcbiAgICBzcGFjZUJlZm9yZSA9IGNoID09IFwiIFwiO1xuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gV29yayBhcm91bmQgbm9uc2Vuc2UgZGltZW5zaW9ucyBiZWluZyByZXBvcnRlZCBmb3Igc3RyZXRjaGVzIG9mXG4vLyByaWdodC10by1sZWZ0IHRleHQuXG5mdW5jdGlvbiBidWlsZFRva2VuQmFkQmlkaShpbm5lciwgb3JkZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIHRpdGxlLCBjc3MpIHtcbiAgICBzdHlsZSA9IHN0eWxlID8gc3R5bGUgKyBcIiBjbS1mb3JjZS1ib3JkZXJcIiA6IFwiY20tZm9yY2UtYm9yZGVyXCI7XG4gICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGg7XG4gICAgZm9yICg7Oykge1xuICAgICAgLy8gRmluZCB0aGUgcGFydCB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXJ0IG9mIHRoaXMgdGV4dFxuICAgICAgdmFyIHBhcnQgPSAodm9pZCAwKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcGFydCA9IG9yZGVyW2ldO1xuICAgICAgICBpZiAocGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgeyBicmVhayB9XG4gICAgICB9XG4gICAgICBpZiAocGFydC50byA+PSBlbmQpIHsgcmV0dXJuIGlubmVyKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgdGl0bGUsIGNzcykgfVxuICAgICAgaW5uZXIoYnVpbGRlciwgdGV4dC5zbGljZSgwLCBwYXJ0LnRvIC0gc3RhcnQpLCBzdHlsZSwgc3RhcnRTdHlsZSwgbnVsbCwgdGl0bGUsIGNzcyk7XG4gICAgICBzdGFydFN0eWxlID0gbnVsbDtcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKHBhcnQudG8gLSBzdGFydCk7XG4gICAgICBzdGFydCA9IHBhcnQudG87XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXplLCBtYXJrZXIsIGlnbm9yZVdpZGdldCkge1xuICB2YXIgd2lkZ2V0ID0gIWlnbm9yZVdpZGdldCAmJiBtYXJrZXIud2lkZ2V0Tm9kZTtcbiAgaWYgKHdpZGdldCkgeyBidWlsZGVyLm1hcC5wdXNoKGJ1aWxkZXIucG9zLCBidWlsZGVyLnBvcyArIHNpemUsIHdpZGdldCk7IH1cbiAgaWYgKCFpZ25vcmVXaWRnZXQgJiYgYnVpbGRlci5jbS5kaXNwbGF5LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSkge1xuICAgIGlmICghd2lkZ2V0KVxuICAgICAgeyB3aWRnZXQgPSBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpOyB9XG4gICAgd2lkZ2V0LnNldEF0dHJpYnV0ZShcImNtLW1hcmtlclwiLCBtYXJrZXIuaWQpO1xuICB9XG4gIGlmICh3aWRnZXQpIHtcbiAgICBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZSh3aWRnZXQpO1xuICAgIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZCh3aWRnZXQpO1xuICB9XG4gIGJ1aWxkZXIucG9zICs9IHNpemU7XG4gIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSA9IGZhbHNlO1xufVxuXG4vLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nXG4vLyBhbmQgbWFya2VkIHRleHQgaW50byBhY2NvdW50LlxuZnVuY3Rpb24gaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgc3R5bGVzKSB7XG4gIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDtcbiAgaWYgKCFzcGFucykge1xuICAgIGZvciAodmFyIGkkMSA9IDE7IGkkMSA8IHN0eWxlcy5sZW5ndGg7IGkkMSs9MilcbiAgICAgIHsgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpJDFdKSwgaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZXNbaSQxKzFdLCBidWlsZGVyLmNtLm9wdGlvbnMpKTsgfVxuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBwb3MgPSAwLCBpID0gMSwgdGV4dCA9IFwiXCIsIHN0eWxlLCBjc3M7XG4gIHZhciBuZXh0Q2hhbmdlID0gMCwgc3BhblN0eWxlLCBzcGFuRW5kU3R5bGUsIHNwYW5TdGFydFN0eWxlLCB0aXRsZSwgY29sbGFwc2VkO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKG5leHRDaGFuZ2UgPT0gcG9zKSB7IC8vIFVwZGF0ZSBjdXJyZW50IG1hcmtlciBzZXRcbiAgICAgIHNwYW5TdHlsZSA9IHNwYW5FbmRTdHlsZSA9IHNwYW5TdGFydFN0eWxlID0gdGl0bGUgPSBjc3MgPSBcIlwiO1xuICAgICAgY29sbGFwc2VkID0gbnVsbDsgbmV4dENoYW5nZSA9IEluZmluaXR5O1xuICAgICAgdmFyIGZvdW5kQm9va21hcmtzID0gW10sIGVuZFN0eWxlcyA9ICh2b2lkIDApO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgc3AgPSBzcGFuc1tqXSwgbSA9IHNwLm1hcmtlcjtcbiAgICAgICAgaWYgKG0udHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgc3AuZnJvbSA9PSBwb3MgJiYgbS53aWRnZXROb2RlKSB7XG4gICAgICAgICAgZm91bmRCb29rbWFya3MucHVzaChtKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcC5mcm9tIDw9IHBvcyAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA+IHBvcyB8fCBtLmNvbGxhcHNlZCAmJiBzcC50byA9PSBwb3MgJiYgc3AuZnJvbSA9PSBwb3MpKSB7XG4gICAgICAgICAgaWYgKHNwLnRvICE9IG51bGwgJiYgc3AudG8gIT0gcG9zICYmIG5leHRDaGFuZ2UgPiBzcC50bykge1xuICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLnRvO1xuICAgICAgICAgICAgc3BhbkVuZFN0eWxlID0gXCJcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG0uY2xhc3NOYW1lKSB7IHNwYW5TdHlsZSArPSBcIiBcIiArIG0uY2xhc3NOYW1lOyB9XG4gICAgICAgICAgaWYgKG0uY3NzKSB7IGNzcyA9IChjc3MgPyBjc3MgKyBcIjtcIiA6IFwiXCIpICsgbS5jc3M7IH1cbiAgICAgICAgICBpZiAobS5zdGFydFN0eWxlICYmIHNwLmZyb20gPT0gcG9zKSB7IHNwYW5TdGFydFN0eWxlICs9IFwiIFwiICsgbS5zdGFydFN0eWxlOyB9XG4gICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgeyAoZW5kU3R5bGVzIHx8IChlbmRTdHlsZXMgPSBbXSkpLnB1c2gobS5lbmRTdHlsZSwgc3AudG8pOyB9XG4gICAgICAgICAgaWYgKG0udGl0bGUgJiYgIXRpdGxlKSB7IHRpdGxlID0gbS50aXRsZTsgfVxuICAgICAgICAgIGlmIChtLmNvbGxhcHNlZCAmJiAoIWNvbGxhcHNlZCB8fCBjb21wYXJlQ29sbGFwc2VkTWFya2Vycyhjb2xsYXBzZWQubWFya2VyLCBtKSA8IDApKVxuICAgICAgICAgICAgeyBjb2xsYXBzZWQgPSBzcDsgfVxuICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHtcbiAgICAgICAgICBuZXh0Q2hhbmdlID0gc3AuZnJvbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVuZFN0eWxlcykgeyBmb3IgKHZhciBqJDEgPSAwOyBqJDEgPCBlbmRTdHlsZXMubGVuZ3RoOyBqJDEgKz0gMilcbiAgICAgICAgeyBpZiAoZW5kU3R5bGVzW2okMSArIDFdID09IG5leHRDaGFuZ2UpIHsgc3BhbkVuZFN0eWxlICs9IFwiIFwiICsgZW5kU3R5bGVzW2okMV07IH0gfSB9XG5cbiAgICAgIGlmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5mcm9tID09IHBvcykgeyBmb3IgKHZhciBqJDIgPSAwOyBqJDIgPCBmb3VuZEJvb2ttYXJrcy5sZW5ndGg7ICsraiQyKVxuICAgICAgICB7IGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCAwLCBmb3VuZEJvb2ttYXJrc1tqJDJdKTsgfSB9XG4gICAgICBpZiAoY29sbGFwc2VkICYmIChjb2xsYXBzZWQuZnJvbSB8fCAwKSA9PSBwb3MpIHtcbiAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/IGxlbiArIDEgOiBjb2xsYXBzZWQudG8pIC0gcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkLm1hcmtlciwgY29sbGFwc2VkLmZyb20gPT0gbnVsbCk7XG4gICAgICAgIGlmIChjb2xsYXBzZWQudG8gPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IHBvcykgeyBjb2xsYXBzZWQgPSBmYWxzZTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9zID49IGxlbikgeyBicmVhayB9XG5cbiAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENoYW5nZSk7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHZhciBlbmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICB2YXIgdG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0O1xuICAgICAgICAgIGJ1aWxkZXIuYWRkVG9rZW4oYnVpbGRlciwgdG9rZW5UZXh0LCBzdHlsZSA/IHN0eWxlICsgc3BhblN0eWxlIDogc3BhblN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhblN0YXJ0U3R5bGUsIHBvcyArIHRva2VuVGV4dC5sZW5ndGggPT0gbmV4dENoYW5nZSA/IHNwYW5FbmRTdHlsZSA6IFwiXCIsIHRpdGxlLCBjc3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmQgPj0gdXB0bykge3RleHQgPSB0ZXh0LnNsaWNlKHVwdG8gLSBwb3MpOyBwb3MgPSB1cHRvOyBicmVha31cbiAgICAgICAgcG9zID0gZW5kO1xuICAgICAgICBzcGFuU3RhcnRTdHlsZSA9IFwiXCI7XG4gICAgICB9XG4gICAgICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaSsrXSk7XG4gICAgICBzdHlsZSA9IGludGVycHJldFRva2VuU3R5bGUoc3R5bGVzW2krK10sIGJ1aWxkZXIuY20ub3B0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHZpc2libGUgKGN1cnJlbnRseSBkcmF3bilcbi8vIHBhcnQgb2YgdGhlIGRvY3VtZW50LiBBIExpbmVWaWV3IG1heSBjb3JyZXNwb25kIHRvIG11bHRpcGxlXG4vLyBsb2dpY2FsIGxpbmVzLCBpZiB0aG9zZSBhcmUgY29ubmVjdGVkIGJ5IGNvbGxhcHNlZCByYW5nZXMuXG5mdW5jdGlvbiBMaW5lVmlldyhkb2MsIGxpbmUsIGxpbmVOKSB7XG4gIC8vIFRoZSBzdGFydGluZyBsaW5lXG4gIHRoaXMubGluZSA9IGxpbmU7XG4gIC8vIENvbnRpbnVpbmcgbGluZXMsIGlmIGFueVxuICB0aGlzLnJlc3QgPSB2aXN1YWxMaW5lQ29udGludWVkKGxpbmUpO1xuICAvLyBOdW1iZXIgb2YgbG9naWNhbCBsaW5lcyBpbiB0aGlzIHZpc3VhbCBsaW5lXG4gIHRoaXMuc2l6ZSA9IHRoaXMucmVzdCA/IGxpbmVObyhsc3QodGhpcy5yZXN0KSkgLSBsaW5lTiArIDEgOiAxO1xuICB0aGlzLm5vZGUgPSB0aGlzLnRleHQgPSBudWxsO1xuICB0aGlzLmhpZGRlbiA9IGxpbmVJc0hpZGRlbihkb2MsIGxpbmUpO1xufVxuXG4vLyBDcmVhdGUgYSByYW5nZSBvZiBMaW5lVmlldyBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gbGluZXMuXG5mdW5jdGlvbiBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pIHtcbiAgdmFyIGFycmF5ID0gW10sIG5leHRQb3M7XG4gIGZvciAodmFyIHBvcyA9IGZyb207IHBvcyA8IHRvOyBwb3MgPSBuZXh0UG9zKSB7XG4gICAgdmFyIHZpZXcgPSBuZXcgTGluZVZpZXcoY20uZG9jLCBnZXRMaW5lKGNtLmRvYywgcG9zKSwgcG9zKTtcbiAgICBuZXh0UG9zID0gcG9zICsgdmlldy5zaXplO1xuICAgIGFycmF5LnB1c2godmlldyk7XG4gIH1cbiAgcmV0dXJuIGFycmF5XG59XG5cbnZhciBvcGVyYXRpb25Hcm91cCA9IG51bGw7XG5cbmZ1bmN0aW9uIHB1c2hPcGVyYXRpb24ob3ApIHtcbiAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7XG4gICAgb3BlcmF0aW9uR3JvdXAub3BzLnB1c2gob3ApO1xuICB9IGVsc2Uge1xuICAgIG9wLm93bnNHcm91cCA9IG9wZXJhdGlvbkdyb3VwID0ge1xuICAgICAgb3BzOiBbb3BdLFxuICAgICAgZGVsYXllZENhbGxiYWNrczogW11cbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpcmVDYWxsYmFja3NGb3JPcHMoZ3JvdXApIHtcbiAgLy8gQ2FsbHMgZGVsYXllZCBjYWxsYmFja3MgYW5kIGN1cnNvckFjdGl2aXR5IGhhbmRsZXJzIHVudGlsIG5vXG4gIC8vIG5ldyBvbmVzIGFwcGVhclxuICB2YXIgY2FsbGJhY2tzID0gZ3JvdXAuZGVsYXllZENhbGxiYWNrcywgaSA9IDA7XG4gIGRvIHtcbiAgICBmb3IgKDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7IH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdyb3VwLm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIG9wID0gZ3JvdXAub3BzW2pdO1xuICAgICAgaWYgKG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpXG4gICAgICAgIHsgd2hpbGUgKG9wLmN1cnNvckFjdGl2aXR5Q2FsbGVkIDwgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycy5sZW5ndGgpXG4gICAgICAgICAgeyBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzW29wLmN1cnNvckFjdGl2aXR5Q2FsbGVkKytdLmNhbGwobnVsbCwgb3AuY20pOyB9IH1cbiAgICB9XG4gIH0gd2hpbGUgKGkgPCBjYWxsYmFja3MubGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBmaW5pc2hPcGVyYXRpb24ob3AsIGVuZENiKSB7XG4gIHZhciBncm91cCA9IG9wLm93bnNHcm91cDtcbiAgaWYgKCFncm91cCkgeyByZXR1cm4gfVxuXG4gIHRyeSB7IGZpcmVDYWxsYmFja3NGb3JPcHMoZ3JvdXApOyB9XG4gIGZpbmFsbHkge1xuICAgIG9wZXJhdGlvbkdyb3VwID0gbnVsbDtcbiAgICBlbmRDYihncm91cCk7XG4gIH1cbn1cblxudmFyIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsO1xuXG4vLyBPZnRlbiwgd2Ugd2FudCB0byBzaWduYWwgZXZlbnRzIGF0IGEgcG9pbnQgd2hlcmUgd2UgYXJlIGluIHRoZVxuLy8gbWlkZGxlIG9mIHNvbWUgd29yaywgYnV0IGRvbid0IHdhbnQgdGhlIGhhbmRsZXIgdG8gc3RhcnQgY2FsbGluZ1xuLy8gb3RoZXIgbWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnRcbi8vIHN0YXRlIG9yIHNpbXBseSBub3QgZXhwZWN0IGFueSBvdGhlciBldmVudHMgdG8gaGFwcGVuLlxuLy8gc2lnbmFsTGF0ZXIgbG9va3Mgd2hldGhlciB0aGVyZSBhcmUgYW55IGhhbmRsZXJzLCBhbmQgc2NoZWR1bGVzXG4vLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9uIGVuZHMsIG9yLCBpZiBub1xuLy8gb3BlcmF0aW9uIGlzIGFjdGl2ZSwgd2hlbiBhIHRpbWVvdXQgZmlyZXMuXG5mdW5jdGlvbiBzaWduYWxMYXRlcihlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykge1xuICB2YXIgYXJyID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSk7XG4gIGlmICghYXJyLmxlbmd0aCkgeyByZXR1cm4gfVxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksIGxpc3Q7XG4gIGlmIChvcGVyYXRpb25Hcm91cCkge1xuICAgIGxpc3QgPSBvcGVyYXRpb25Hcm91cC5kZWxheWVkQ2FsbGJhY2tzO1xuICB9IGVsc2UgaWYgKG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MpIHtcbiAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcztcbiAgfSBlbHNlIHtcbiAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IFtdO1xuICAgIHNldFRpbWVvdXQoZmlyZU9ycGhhbkRlbGF5ZWQsIDApO1xuICB9XG4gIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgIGxpc3QucHVzaChmdW5jdGlvbiAoKSB7IHJldHVybiBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7IH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgKytpKVxuICAgIGxvb3AoIGkgKTtcbn1cblxuZnVuY3Rpb24gZmlyZU9ycGhhbkRlbGF5ZWQoKSB7XG4gIHZhciBkZWxheWVkID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcztcbiAgb3JwaGFuRGVsYXllZENhbGxiYWNrcyA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsYXllZC5sZW5ndGg7ICsraSkgeyBkZWxheWVkW2ldKCk7IH1cbn1cblxuLy8gV2hlbiBhbiBhc3BlY3Qgb2YgYSBsaW5lIGNoYW5nZXMsIGEgc3RyaW5nIGlzIGFkZGVkIHRvXG4vLyBsaW5lVmlldy5jaGFuZ2VzLiBUaGlzIHVwZGF0ZXMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIGxpbmUnc1xuLy8gRE9NIHN0cnVjdHVyZS5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lVmlldy5jaGFuZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgdmFyIHR5cGUgPSBsaW5lVmlldy5jaGFuZ2VzW2pdO1xuICAgIGlmICh0eXBlID09IFwidGV4dFwiKSB7IHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldyk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09IFwiZ3V0dGVyXCIpIHsgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTsgfVxuICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJjbGFzc1wiKSB7IHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7IH1cbiAgICBlbHNlIGlmICh0eXBlID09IFwid2lkZ2V0XCIpIHsgdXBkYXRlTGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKTsgfVxuICB9XG4gIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsO1xufVxuXG4vLyBMaW5lcyB3aXRoIGd1dHRlciBlbGVtZW50cywgd2lkZ2V0cyBvciBhIGJhY2tncm91bmQgY2xhc3MgbmVlZCB0b1xuLy8gYmUgd3JhcHBlZCwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSB3cmFwcGVyIGRpdlxuZnVuY3Rpb24gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpIHtcbiAgaWYgKGxpbmVWaWV3Lm5vZGUgPT0gbGluZVZpZXcudGV4dCkge1xuICAgIGxpbmVWaWV3Lm5vZGUgPSBlbHQoXCJkaXZcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmVcIik7XG4gICAgaWYgKGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZSlcbiAgICAgIHsgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaW5lVmlldy5ub2RlLCBsaW5lVmlldy50ZXh0KTsgfVxuICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGluZVZpZXcudGV4dCk7XG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7IGxpbmVWaWV3Lm5vZGUuc3R5bGUuekluZGV4ID0gMjsgfVxuICB9XG4gIHJldHVybiBsaW5lVmlldy5ub2RlXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmVCYWNrZ3JvdW5kKGNtLCBsaW5lVmlldykge1xuICB2YXIgY2xzID0gbGluZVZpZXcuYmdDbGFzcyA/IGxpbmVWaWV3LmJnQ2xhc3MgKyBcIiBcIiArIChsaW5lVmlldy5saW5lLmJnQ2xhc3MgfHwgXCJcIikgOiBsaW5lVmlldy5saW5lLmJnQ2xhc3M7XG4gIGlmIChjbHMpIHsgY2xzICs9IFwiIENvZGVNaXJyb3ItbGluZWJhY2tncm91bmRcIjsgfVxuICBpZiAobGluZVZpZXcuYmFja2dyb3VuZCkge1xuICAgIGlmIChjbHMpIHsgbGluZVZpZXcuYmFja2dyb3VuZC5jbGFzc05hbWUgPSBjbHM7IH1cbiAgICBlbHNlIHsgbGluZVZpZXcuYmFja2dyb3VuZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3LmJhY2tncm91bmQpOyBsaW5lVmlldy5iYWNrZ3JvdW5kID0gbnVsbDsgfVxuICB9IGVsc2UgaWYgKGNscykge1xuICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgIGxpbmVWaWV3LmJhY2tncm91bmQgPSB3cmFwLmluc2VydEJlZm9yZShlbHQoXCJkaXZcIiwgbnVsbCwgY2xzKSwgd3JhcC5maXJzdENoaWxkKTtcbiAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobGluZVZpZXcuYmFja2dyb3VuZCk7XG4gIH1cbn1cblxuLy8gV3JhcHBlciBhcm91bmQgYnVpbGRMaW5lQ29udGVudCB3aGljaCB3aWxsIHJldXNlIHRoZSBzdHJ1Y3R1cmVcbi8vIGluIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCB3aGVuIHBvc3NpYmxlLlxuZnVuY3Rpb24gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7XG4gIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gIGlmIChleHQgJiYgZXh0LmxpbmUgPT0gbGluZVZpZXcubGluZSkge1xuICAgIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7XG4gICAgbGluZVZpZXcubWVhc3VyZSA9IGV4dC5tZWFzdXJlO1xuICAgIHJldHVybiBleHQuYnVpbHRcbiAgfVxuICByZXR1cm4gYnVpbGRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpXG59XG5cbi8vIFJlZHJhdyB0aGUgbGluZSdzIHRleHQuIEludGVyYWN0cyB3aXRoIHRoZSBiYWNrZ3JvdW5kIGFuZCB0ZXh0XG4vLyBjbGFzc2VzIGJlY2F1c2UgdGhlIG1vZGUgbWF5IG91dHB1dCB0b2tlbnMgdGhhdCBpbmZsdWVuY2UgdGhlc2Vcbi8vIGNsYXNzZXMuXG5mdW5jdGlvbiB1cGRhdGVMaW5lVGV4dChjbSwgbGluZVZpZXcpIHtcbiAgdmFyIGNscyA9IGxpbmVWaWV3LnRleHQuY2xhc3NOYW1lO1xuICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpO1xuICBpZiAobGluZVZpZXcudGV4dCA9PSBsaW5lVmlldy5ub2RlKSB7IGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7IH1cbiAgbGluZVZpZXcudGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChidWlsdC5wcmUsIGxpbmVWaWV3LnRleHQpO1xuICBsaW5lVmlldy50ZXh0ID0gYnVpbHQucHJlO1xuICBpZiAoYnVpbHQuYmdDbGFzcyAhPSBsaW5lVmlldy5iZ0NsYXNzIHx8IGJ1aWx0LnRleHRDbGFzcyAhPSBsaW5lVmlldy50ZXh0Q2xhc3MpIHtcbiAgICBsaW5lVmlldy5iZ0NsYXNzID0gYnVpbHQuYmdDbGFzcztcbiAgICBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7XG4gICAgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTtcbiAgfSBlbHNlIGlmIChjbHMpIHtcbiAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IGNscztcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5lQ2xhc3NlcyhjbSwgbGluZVZpZXcpIHtcbiAgdXBkYXRlTGluZUJhY2tncm91bmQoY20sIGxpbmVWaWV3KTtcbiAgaWYgKGxpbmVWaWV3LmxpbmUud3JhcENsYXNzKVxuICAgIHsgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOyB9XG4gIGVsc2UgaWYgKGxpbmVWaWV3Lm5vZGUgIT0gbGluZVZpZXcudGV4dClcbiAgICB7IGxpbmVWaWV3Lm5vZGUuY2xhc3NOYW1lID0gXCJcIjsgfVxuICB2YXIgdGV4dENsYXNzID0gbGluZVZpZXcudGV4dENsYXNzID8gbGluZVZpZXcudGV4dENsYXNzICsgXCIgXCIgKyAobGluZVZpZXcubGluZS50ZXh0Q2xhc3MgfHwgXCJcIikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzcztcbiAgbGluZVZpZXcudGV4dC5jbGFzc05hbWUgPSB0ZXh0Q2xhc3MgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7XG4gIGlmIChsaW5lVmlldy5ndXR0ZXIpIHtcbiAgICBsaW5lVmlldy5ub2RlLnJlbW92ZUNoaWxkKGxpbmVWaWV3Lmd1dHRlcik7XG4gICAgbGluZVZpZXcuZ3V0dGVyID0gbnVsbDtcbiAgfVxuICBpZiAobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCkge1xuICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCk7XG4gICAgbGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCA9IG51bGw7XG4gIH1cbiAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpIHtcbiAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTtcbiAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCBcIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgXCJweDsgd2lkdGg6IFwiICsgKGRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4XCIpKTtcbiAgICBjbS5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCk7XG4gICAgd3JhcC5pbnNlcnRCZWZvcmUobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCwgbGluZVZpZXcudGV4dCk7XG4gIH1cbiAgdmFyIG1hcmtlcnMgPSBsaW5lVmlldy5saW5lLmd1dHRlck1hcmtlcnM7XG4gIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzIHx8IG1hcmtlcnMpIHtcbiAgICB2YXIgd3JhcCQxID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgIHZhciBndXR0ZXJXcmFwID0gbGluZVZpZXcuZ3V0dGVyID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlclwiLCAoXCJsZWZ0OiBcIiArIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgXCJweFwiKSk7XG4gICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGd1dHRlcldyYXApO1xuICAgIHdyYXAkMS5pbnNlcnRCZWZvcmUoZ3V0dGVyV3JhcCwgbGluZVZpZXcudGV4dCk7XG4gICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpXG4gICAgICB7IGd1dHRlcldyYXAuY2xhc3NOYW1lICs9IFwiIFwiICsgbGluZVZpZXcubGluZS5ndXR0ZXJDbGFzczsgfVxuICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1tcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0pKVxuICAgICAgeyBsaW5lVmlldy5saW5lTnVtYmVyID0gZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChcbiAgICAgICAgZWx0KFwiZGl2XCIsIGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pLFxuICAgICAgICAgICAgXCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIsXG4gICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChkaW1zLmd1dHRlckxlZnRbXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCJdKSArIFwicHg7IHdpZHRoOiBcIiArIChjbS5kaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoKSArIFwicHhcIikpKTsgfVxuICAgIGlmIChtYXJrZXJzKSB7IGZvciAodmFyIGsgPSAwOyBrIDwgY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aDsgKytrKSB7XG4gICAgICB2YXIgaWQgPSBjbS5vcHRpb25zLmd1dHRlcnNba10sIGZvdW5kID0gbWFya2Vycy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07XG4gICAgICBpZiAoZm91bmQpXG4gICAgICAgIHsgZ3V0dGVyV3JhcC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgW2ZvdW5kXSwgXCJDb2RlTWlycm9yLWd1dHRlci1lbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwibGVmdDogXCIgKyAoZGltcy5ndXR0ZXJMZWZ0W2lkXSkgKyBcInB4OyB3aWR0aDogXCIgKyAoZGltcy5ndXR0ZXJXaWR0aFtpZF0pICsgXCJweFwiKSkpOyB9XG4gICAgfSB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKSB7XG4gIGlmIChsaW5lVmlldy5hbGlnbmFibGUpIHsgbGluZVZpZXcuYWxpZ25hYmxlID0gbnVsbDsgfVxuICBmb3IgKHZhciBub2RlID0gbGluZVZpZXcubm9kZS5maXJzdENoaWxkLCBuZXh0ID0gKHZvaWQgMCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7XG4gICAgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgaWYgKG5vZGUuY2xhc3NOYW1lID09IFwiQ29kZU1pcnJvci1saW5ld2lkZ2V0XCIpXG4gICAgICB7IGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7IH1cbiAgfVxuICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpO1xufVxuXG4vLyBCdWlsZCBhIGxpbmUncyBET00gcmVwcmVzZW50YXRpb24gZnJvbSBzY3JhdGNoXG5mdW5jdGlvbiBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgdmFyIGJ1aWx0ID0gZ2V0TGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KTtcbiAgbGluZVZpZXcudGV4dCA9IGxpbmVWaWV3Lm5vZGUgPSBidWlsdC5wcmU7XG4gIGlmIChidWlsdC5iZ0NsYXNzKSB7IGxpbmVWaWV3LmJnQ2xhc3MgPSBidWlsdC5iZ0NsYXNzOyB9XG4gIGlmIChidWlsdC50ZXh0Q2xhc3MpIHsgbGluZVZpZXcudGV4dENsYXNzID0gYnVpbHQudGV4dENsYXNzOyB9XG5cbiAgdXBkYXRlTGluZUNsYXNzZXMoY20sIGxpbmVWaWV3KTtcbiAgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTtcbiAgaW5zZXJ0TGluZVdpZGdldHMoY20sIGxpbmVWaWV3LCBkaW1zKTtcbiAgcmV0dXJuIGxpbmVWaWV3Lm5vZGVcbn1cblxuLy8gQSBsaW5lVmlldyBtYXkgY29udGFpbiBtdWx0aXBsZSBsb2dpY2FsIGxpbmVzICh3aGVuIG1lcmdlZCBieVxuLy8gY29sbGFwc2VkIHNwYW5zKS4gVGhlIHdpZGdldHMgZm9yIGFsbCBvZiB0aGVtIG5lZWQgdG8gYmUgZHJhd24uXG5mdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LmxpbmUsIGxpbmVWaWV3LCBkaW1zLCB0cnVlKTtcbiAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgIHsgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3LCBkaW1zLCBmYWxzZSk7IH0gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZSwgbGluZVZpZXcsIGRpbXMsIGFsbG93QWJvdmUpIHtcbiAgaWYgKCFsaW5lLndpZGdldHMpIHsgcmV0dXJuIH1cbiAgdmFyIHdyYXAgPSBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldyk7XG4gIGZvciAodmFyIGkgPSAwLCB3cyA9IGxpbmUud2lkZ2V0czsgaSA8IHdzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0KFwiZGl2XCIsIFt3aWRnZXQubm9kZV0sIFwiQ29kZU1pcnJvci1saW5ld2lkZ2V0XCIpO1xuICAgIGlmICghd2lkZ2V0LmhhbmRsZU1vdXNlRXZlbnRzKSB7IG5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7IH1cbiAgICBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcyk7XG4gICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgIGlmIChhbGxvd0Fib3ZlICYmIHdpZGdldC5hYm92ZSlcbiAgICAgIHsgd3JhcC5pbnNlcnRCZWZvcmUobm9kZSwgbGluZVZpZXcuZ3V0dGVyIHx8IGxpbmVWaWV3LnRleHQpOyB9XG4gICAgZWxzZVxuICAgICAgeyB3cmFwLmFwcGVuZENoaWxkKG5vZGUpOyB9XG4gICAgc2lnbmFsTGF0ZXIod2lkZ2V0LCBcInJlZHJhd1wiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3NpdGlvbkxpbmVXaWRnZXQod2lkZ2V0LCBub2RlLCBsaW5lVmlldywgZGltcykge1xuICBpZiAod2lkZ2V0Lm5vSFNjcm9sbCkge1xuICAgIChsaW5lVmlldy5hbGlnbmFibGUgfHwgKGxpbmVWaWV3LmFsaWduYWJsZSA9IFtdKSkucHVzaChub2RlKTtcbiAgICB2YXIgd2lkdGggPSBkaW1zLndyYXBwZXJXaWR0aDtcbiAgICBub2RlLnN0eWxlLmxlZnQgPSBkaW1zLmZpeGVkUG9zICsgXCJweFwiO1xuICAgIGlmICghd2lkZ2V0LmNvdmVyR3V0dGVyKSB7XG4gICAgICB3aWR0aCAtPSBkaW1zLmd1dHRlclRvdGFsV2lkdGg7XG4gICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgXCJweFwiO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyBcInB4XCI7XG4gIH1cbiAgaWYgKHdpZGdldC5jb3Zlckd1dHRlcikge1xuICAgIG5vZGUuc3R5bGUuekluZGV4ID0gNTtcbiAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIGlmICghd2lkZ2V0Lm5vSFNjcm9sbCkgeyBub2RlLnN0eWxlLm1hcmdpbkxlZnQgPSAtZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgXCJweFwiOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd2lkZ2V0SGVpZ2h0KHdpZGdldCkge1xuICBpZiAod2lkZ2V0LmhlaWdodCAhPSBudWxsKSB7IHJldHVybiB3aWRnZXQuaGVpZ2h0IH1cbiAgdmFyIGNtID0gd2lkZ2V0LmRvYy5jbTtcbiAgaWYgKCFjbSkgeyByZXR1cm4gMCB9XG4gIGlmICghY29udGFpbnMoZG9jdW1lbnQuYm9keSwgd2lkZ2V0Lm5vZGUpKSB7XG4gICAgdmFyIHBhcmVudFN0eWxlID0gXCJwb3NpdGlvbjogcmVsYXRpdmU7XCI7XG4gICAgaWYgKHdpZGdldC5jb3Zlckd1dHRlcilcbiAgICAgIHsgcGFyZW50U3R5bGUgKz0gXCJtYXJnaW4tbGVmdDogLVwiICsgY20uZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoICsgXCJweDtcIjsgfVxuICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKVxuICAgICAgeyBwYXJlbnRTdHlsZSArPSBcIndpZHRoOiBcIiArIGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aCArIFwicHg7XCI7IH1cbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5Lm1lYXN1cmUsIGVsdChcImRpdlwiLCBbd2lkZ2V0Lm5vZGVdLCBudWxsLCBwYXJlbnRTdHlsZSkpO1xuICB9XG4gIHJldHVybiB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0Lm5vZGUucGFyZW50Tm9kZS5vZmZzZXRIZWlnaHRcbn1cblxuLy8gUmV0dXJuIHRydWUgd2hlbiB0aGUgZ2l2ZW4gbW91c2UgZXZlbnQgaGFwcGVuZWQgaW4gYSB3aWRnZXRcbmZ1bmN0aW9uIGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkge1xuICBmb3IgKHZhciBuID0gZV90YXJnZXQoZSk7IG4gIT0gZGlzcGxheS53cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKSB7XG4gICAgaWYgKCFuIHx8IChuLm5vZGVUeXBlID09IDEgJiYgbi5nZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIpID09IFwidHJ1ZVwiKSB8fFxuICAgICAgICAobi5wYXJlbnROb2RlID09IGRpc3BsYXkuc2l6ZXIgJiYgbiAhPSBkaXNwbGF5Lm1vdmVyKSlcbiAgICAgIHsgcmV0dXJuIHRydWUgfVxuICB9XG59XG5cbi8vIFBPU0lUSU9OIE1FQVNVUkVNRU5UXG5cbmZ1bmN0aW9uIHBhZGRpbmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3B9XG5mdW5jdGlvbiBwYWRkaW5nVmVydChkaXNwbGF5KSB7cmV0dXJuIGRpc3BsYXkubW92ZXIub2Zmc2V0SGVpZ2h0IC0gZGlzcGxheS5saW5lU3BhY2Uub2Zmc2V0SGVpZ2h0fVxuZnVuY3Rpb24gcGFkZGluZ0goZGlzcGxheSkge1xuICBpZiAoZGlzcGxheS5jYWNoZWRQYWRkaW5nSCkgeyByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSCB9XG4gIHZhciBlID0gcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBlbHQoXCJwcmVcIiwgXCJ4XCIpKTtcbiAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSA6IGUuY3VycmVudFN0eWxlO1xuICB2YXIgZGF0YSA9IHtsZWZ0OiBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCksIHJpZ2h0OiBwYXJzZUludChzdHlsZS5wYWRkaW5nUmlnaHQpfTtcbiAgaWYgKCFpc05hTihkYXRhLmxlZnQpICYmICFpc05hTihkYXRhLnJpZ2h0KSkgeyBkaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gZGF0YTsgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBzY3JvbGxHYXAoY20pIHsgcmV0dXJuIHNjcm9sbGVyR2FwIC0gY20uZGlzcGxheS5uYXRpdmVCYXJXaWR0aCB9XG5mdW5jdGlvbiBkaXNwbGF5V2lkdGgoY20pIHtcbiAgcmV0dXJuIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGggLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJXaWR0aFxufVxuZnVuY3Rpb24gZGlzcGxheUhlaWdodChjbSkge1xuICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQgLSBzY3JvbGxHYXAoY20pIC0gY20uZGlzcGxheS5iYXJIZWlnaHRcbn1cblxuLy8gRW5zdXJlIHRoZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVsYXRlZC4gVGhpcyBpc1xuLy8gYW4gYXJyYXkgb2YgYm90dG9tIG9mZnNldHMgZm9yIHRoZSBsaW5lcyB0aGF0IG1ha2UgdXAgYSBkcmF3blxuLy8gbGluZS4gV2hlbiBsaW5lV3JhcHBpbmcgaXMgb24sIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmVcbi8vIGhlaWdodC5cbmZ1bmN0aW9uIGVuc3VyZUxpbmVIZWlnaHRzKGNtLCBsaW5lVmlldywgcmVjdCkge1xuICB2YXIgd3JhcHBpbmcgPSBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgdmFyIGN1cldpZHRoID0gd3JhcHBpbmcgJiYgZGlzcGxheVdpZHRoKGNtKTtcbiAgaWYgKCFsaW5lVmlldy5tZWFzdXJlLmhlaWdodHMgfHwgd3JhcHBpbmcgJiYgbGluZVZpZXcubWVhc3VyZS53aWR0aCAhPSBjdXJXaWR0aCkge1xuICAgIHZhciBoZWlnaHRzID0gbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gW107XG4gICAgaWYgKHdyYXBwaW5nKSB7XG4gICAgICBsaW5lVmlldy5tZWFzdXJlLndpZHRoID0gY3VyV2lkdGg7XG4gICAgICB2YXIgcmVjdHMgPSBsaW5lVmlldy50ZXh0LmZpcnN0Q2hpbGQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHZhciBjdXIgPSByZWN0c1tpXSwgbmV4dCA9IHJlY3RzW2kgKyAxXTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGN1ci5ib3R0b20gLSBuZXh0LmJvdHRvbSkgPiAyKVxuICAgICAgICAgIHsgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4dC50b3ApIC8gMiAtIHJlY3QudG9wKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBoZWlnaHRzLnB1c2gocmVjdC5ib3R0b20gLSByZWN0LnRvcCk7XG4gIH1cbn1cblxuLy8gRmluZCBhIGxpbmUgbWFwIChtYXBwaW5nIGNoYXJhY3RlciBvZmZzZXRzIHRvIHRleHQgbm9kZXMpIGFuZCBhXG4vLyBtZWFzdXJlbWVudCBjYWNoZSBmb3IgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAoQSBsaW5lIHZpZXcgbWlnaHRcbi8vIGNvbnRhaW4gbXVsdGlwbGUgbGluZXMgd2hlbiBjb2xsYXBzZWQgcmFuZ2VzIGFyZSBwcmVzZW50LilcbmZ1bmN0aW9uIG1hcEZyb21MaW5lVmlldyhsaW5lVmlldywgbGluZSwgbGluZU4pIHtcbiAgaWYgKGxpbmVWaWV3LmxpbmUgPT0gbGluZSlcbiAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcCwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGV9IH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgIHsgaWYgKGxpbmVWaWV3LnJlc3RbaV0gPT0gbGluZSlcbiAgICAgIHsgcmV0dXJuIHttYXA6IGxpbmVWaWV3Lm1lYXN1cmUubWFwc1tpXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2ldfSB9IH1cbiAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkkMSsrKVxuICAgIHsgaWYgKGxpbmVObyhsaW5lVmlldy5yZXN0W2kkMV0pID4gbGluZU4pXG4gICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaSQxXSwgY2FjaGU6IGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGVzW2kkMV0sIGJlZm9yZTogdHJ1ZX0gfSB9XG59XG5cbi8vIFJlbmRlciBhIGxpbmUgaW50byB0aGUgaGlkZGVuIG5vZGUgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkLiBVc2VkXG4vLyB3aGVuIG1lYXN1cmVtZW50IGlzIG5lZWRlZCBmb3IgYSBsaW5lIHRoYXQncyBub3QgaW4gdGhlIHZpZXdwb3J0LlxuZnVuY3Rpb24gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSkge1xuICBsaW5lID0gdmlzdWFsTGluZShsaW5lKTtcbiAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpO1xuICB2YXIgdmlldyA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG5ldyBMaW5lVmlldyhjbS5kb2MsIGxpbmUsIGxpbmVOKTtcbiAgdmlldy5saW5lTiA9IGxpbmVOO1xuICB2YXIgYnVpbHQgPSB2aWV3LmJ1aWx0ID0gYnVpbGRMaW5lQ29udGVudChjbSwgdmlldyk7XG4gIHZpZXcudGV4dCA9IGJ1aWx0LnByZTtcbiAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5saW5lTWVhc3VyZSwgYnVpbHQucHJlKTtcbiAgcmV0dXJuIHZpZXdcbn1cblxuLy8gR2V0IGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IChpbiBsaW5lLWxvY2FsIGNvb3JkaW5hdGVzKVxuLy8gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLlxuZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBiaWFzKSB7XG4gIHJldHVybiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmUpLCBjaCwgYmlhcylcbn1cblxuLy8gRmluZCBhIGxpbmUgdmlldyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci5cbmZ1bmN0aW9uIGZpbmRWaWV3Rm9yTGluZShjbSwgbGluZU4pIHtcbiAgaWYgKGxpbmVOID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgbGluZU4gPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICB7IHJldHVybiBjbS5kaXNwbGF5LnZpZXdbZmluZFZpZXdJbmRleChjbSwgbGluZU4pXSB9XG4gIHZhciBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gIGlmIChleHQgJiYgbGluZU4gPj0gZXh0LmxpbmVOICYmIGxpbmVOIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgeyByZXR1cm4gZXh0IH1cbn1cblxuLy8gTWVhc3VyZW1lbnQgY2FuIGJlIHNwbGl0IGluIHR3byBzdGVwcywgdGhlIHNldC11cCB3b3JrIHRoYXRcbi8vIGFwcGxpZXMgdG8gdGhlIHdob2xlIGxpbmUsIGFuZCB0aGUgbWVhc3VyZW1lbnQgb2YgdGhlIGFjdHVhbFxuLy8gY2hhcmFjdGVyLiBGdW5jdGlvbnMgbGlrZSBjb29yZHNDaGFyLCB0aGF0IG5lZWQgdG8gZG8gYSBsb3Qgb2Zcbi8vIG1lYXN1cmVtZW50cyBpbiBhIHJvdywgY2FuIHRodXMgZW5zdXJlIHRoYXQgdGhlIHNldC11cCB3b3JrIGlzXG4vLyBvbmx5IGRvbmUgb25jZS5cbmZ1bmN0aW9uIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSkge1xuICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7XG4gIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7XG4gIGlmICh2aWV3ICYmICF2aWV3LnRleHQpIHtcbiAgICB2aWV3ID0gbnVsbDtcbiAgfSBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykge1xuICAgIHVwZGF0ZUxpbmVGb3JDaGFuZ2VzKGNtLCB2aWV3LCBsaW5lTiwgZ2V0RGltZW5zaW9ucyhjbSkpO1xuICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgfVxuICBpZiAoIXZpZXcpXG4gICAgeyB2aWV3ID0gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSk7IH1cblxuICB2YXIgaW5mbyA9IG1hcEZyb21MaW5lVmlldyh2aWV3LCBsaW5lLCBsaW5lTik7XG4gIHJldHVybiB7XG4gICAgbGluZTogbGluZSwgdmlldzogdmlldywgcmVjdDogbnVsbCxcbiAgICBtYXA6IGluZm8ubWFwLCBjYWNoZTogaW5mby5jYWNoZSwgYmVmb3JlOiBpbmZvLmJlZm9yZSxcbiAgICBoYXNIZWlnaHRzOiBmYWxzZVxuICB9XG59XG5cbi8vIEdpdmVuIGEgcHJlcGFyZWQgbWVhc3VyZW1lbnQgb2JqZWN0LCBtZWFzdXJlcyB0aGUgcG9zaXRpb24gb2YgYW5cbi8vIGFjdHVhbCBjaGFyYWN0ZXIgKG9yIGZldGNoZXMgaXQgZnJvbSB0aGUgY2FjaGUpLlxuZnVuY3Rpb24gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzLCB2YXJIZWlnaHQpIHtcbiAgaWYgKHByZXBhcmVkLmJlZm9yZSkgeyBjaCA9IC0xOyB9XG4gIHZhciBrZXkgPSBjaCArIChiaWFzIHx8IFwiXCIpLCBmb3VuZDtcbiAgaWYgKHByZXBhcmVkLmNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICBmb3VuZCA9IHByZXBhcmVkLmNhY2hlW2tleV07XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFwcmVwYXJlZC5yZWN0KVxuICAgICAgeyBwcmVwYXJlZC5yZWN0ID0gcHJlcGFyZWQudmlldy50ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgaWYgKCFwcmVwYXJlZC5oYXNIZWlnaHRzKSB7XG4gICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7XG4gICAgICBwcmVwYXJlZC5oYXNIZWlnaHRzID0gdHJ1ZTtcbiAgICB9XG4gICAgZm91bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpO1xuICAgIGlmICghZm91bmQuYm9ndXMpIHsgcHJlcGFyZWQuY2FjaGVba2V5XSA9IGZvdW5kOyB9XG4gIH1cbiAgcmV0dXJuIHtsZWZ0OiBmb3VuZC5sZWZ0LCByaWdodDogZm91bmQucmlnaHQsXG4gICAgICAgICAgdG9wOiB2YXJIZWlnaHQgPyBmb3VuZC5ydG9wIDogZm91bmQudG9wLFxuICAgICAgICAgIGJvdHRvbTogdmFySGVpZ2h0ID8gZm91bmQucmJvdHRvbSA6IGZvdW5kLmJvdHRvbX1cbn1cblxudmFyIG51bGxSZWN0ID0ge2xlZnQ6IDAsIHJpZ2h0OiAwLCB0b3A6IDAsIGJvdHRvbTogMH07XG5cbmZ1bmN0aW9uIG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAobWFwJCQxLCBjaCwgYmlhcykge1xuICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2UsIG1TdGFydCwgbUVuZDtcbiAgLy8gRmlyc3QsIHNlYXJjaCB0aGUgbGluZSBtYXAgZm9yIHRoZSB0ZXh0IG5vZGUgY29ycmVzcG9uZGluZyB0byxcbiAgLy8gb3IgY2xvc2VzdCB0bywgdGhlIHRhcmdldCBjaGFyYWN0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwJCQxLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgbVN0YXJ0ID0gbWFwJCQxW2ldO1xuICAgIG1FbmQgPSBtYXAkJDFbaSArIDFdO1xuICAgIGlmIChjaCA8IG1TdGFydCkge1xuICAgICAgc3RhcnQgPSAwOyBlbmQgPSAxO1xuICAgICAgY29sbGFwc2UgPSBcImxlZnRcIjtcbiAgICB9IGVsc2UgaWYgKGNoIDwgbUVuZCkge1xuICAgICAgc3RhcnQgPSBjaCAtIG1TdGFydDtcbiAgICAgIGVuZCA9IHN0YXJ0ICsgMTtcbiAgICB9IGVsc2UgaWYgKGkgPT0gbWFwJCQxLmxlbmd0aCAtIDMgfHwgY2ggPT0gbUVuZCAmJiBtYXAkJDFbaSArIDNdID4gY2gpIHtcbiAgICAgIGVuZCA9IG1FbmQgLSBtU3RhcnQ7XG4gICAgICBzdGFydCA9IGVuZCAtIDE7XG4gICAgICBpZiAoY2ggPj0gbUVuZCkgeyBjb2xsYXBzZSA9IFwicmlnaHRcIjsgfVxuICAgIH1cbiAgICBpZiAoc3RhcnQgIT0gbnVsbCkge1xuICAgICAgbm9kZSA9IG1hcCQkMVtpICsgMl07XG4gICAgICBpZiAobVN0YXJ0ID09IG1FbmQgJiYgYmlhcyA9PSAobm9kZS5pbnNlcnRMZWZ0ID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIpKVxuICAgICAgICB7IGNvbGxhcHNlID0gYmlhczsgfVxuICAgICAgaWYgKGJpYXMgPT0gXCJsZWZ0XCIgJiYgc3RhcnQgPT0gMClcbiAgICAgICAgeyB3aGlsZSAoaSAmJiBtYXAkJDFbaSAtIDJdID09IG1hcCQkMVtpIC0gM10gJiYgbWFwJCQxW2kgLSAxXS5pbnNlcnRMZWZ0KSB7XG4gICAgICAgICAgbm9kZSA9IG1hcCQkMVsoaSAtPSAzKSArIDJdO1xuICAgICAgICAgIGNvbGxhcHNlID0gXCJsZWZ0XCI7XG4gICAgICAgIH0gfVxuICAgICAgaWYgKGJpYXMgPT0gXCJyaWdodFwiICYmIHN0YXJ0ID09IG1FbmQgLSBtU3RhcnQpXG4gICAgICAgIHsgd2hpbGUgKGkgPCBtYXAkJDEubGVuZ3RoIC0gMyAmJiBtYXAkJDFbaSArIDNdID09IG1hcCQkMVtpICsgNF0gJiYgIW1hcCQkMVtpICsgNV0uaW5zZXJ0TGVmdCkge1xuICAgICAgICAgIG5vZGUgPSBtYXAkJDFbKGkgKz0gMykgKyAyXTtcbiAgICAgICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICAgICAgfSB9XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuICByZXR1cm4ge25vZGU6IG5vZGUsIHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQsIGNvbGxhcHNlOiBjb2xsYXBzZSwgY292ZXJTdGFydDogbVN0YXJ0LCBjb3ZlckVuZDogbUVuZH1cbn1cblxuZnVuY3Rpb24gZ2V0VXNlZnVsUmVjdChyZWN0cywgYmlhcykge1xuICB2YXIgcmVjdCA9IG51bGxSZWN0O1xuICBpZiAoYmlhcyA9PSBcImxlZnRcIikgeyBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKChyZWN0ID0gcmVjdHNbaV0pLmxlZnQgIT0gcmVjdC5yaWdodCkgeyBicmVhayB9XG4gIH0gfSBlbHNlIHsgZm9yICh2YXIgaSQxID0gcmVjdHMubGVuZ3RoIC0gMTsgaSQxID49IDA7IGkkMS0tKSB7XG4gICAgaWYgKChyZWN0ID0gcmVjdHNbaSQxXSkubGVmdCAhPSByZWN0LnJpZ2h0KSB7IGJyZWFrIH1cbiAgfSB9XG4gIHJldHVybiByZWN0XG59XG5cbmZ1bmN0aW9uIG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykge1xuICB2YXIgcGxhY2UgPSBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKHByZXBhcmVkLm1hcCwgY2gsIGJpYXMpO1xuICB2YXIgbm9kZSA9IHBsYWNlLm5vZGUsIHN0YXJ0ID0gcGxhY2Uuc3RhcnQsIGVuZCA9IHBsYWNlLmVuZCwgY29sbGFwc2UgPSBwbGFjZS5jb2xsYXBzZTtcblxuICB2YXIgcmVjdDtcbiAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykgeyAvLyBJZiBpdCBpcyBhIHRleHQgbm9kZSwgdXNlIGEgcmFuZ2UgdG8gcmV0cmlldmUgdGhlIGNvb3JkaW5hdGVzLlxuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IDQ7IGkkMSsrKSB7IC8vIFJldHJ5IGEgbWF4aW11bSBvZiA0IHRpbWVzIHdoZW4gbm9uc2Vuc2UgcmVjdGFuZ2xlcyBhcmUgcmV0dXJuZWRcbiAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkgeyAtLXN0YXJ0OyB9XG4gICAgICB3aGlsZSAocGxhY2UuY292ZXJTdGFydCArIGVuZCA8IHBsYWNlLmNvdmVyRW5kICYmIGlzRXh0ZW5kaW5nQ2hhcihwcmVwYXJlZC5saW5lLnRleHQuY2hhckF0KHBsYWNlLmNvdmVyU3RhcnQgKyBlbmQpKSkgeyArK2VuZDsgfVxuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5ICYmIHN0YXJ0ID09IDAgJiYgZW5kID09IHBsYWNlLmNvdmVyRW5kIC0gcGxhY2UuY292ZXJTdGFydClcbiAgICAgICAgeyByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmVjdCA9IGdldFVzZWZ1bFJlY3QocmFuZ2Uobm9kZSwgc3RhcnQsIGVuZCkuZ2V0Q2xpZW50UmVjdHMoKSwgYmlhcyk7IH1cbiAgICAgIGlmIChyZWN0LmxlZnQgfHwgcmVjdC5yaWdodCB8fCBzdGFydCA9PSAwKSB7IGJyZWFrIH1cbiAgICAgIGVuZCA9IHN0YXJ0O1xuICAgICAgc3RhcnQgPSBzdGFydCAtIDE7XG4gICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICB9XG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSkgeyByZWN0ID0gbWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyhjbS5kaXNwbGF5Lm1lYXN1cmUsIHJlY3QpOyB9XG4gIH0gZWxzZSB7IC8vIElmIGl0IGlzIGEgd2lkZ2V0LCBzaW1wbHkgZ2V0IHRoZSBib3ggZm9yIHRoZSB3aG9sZSB3aWRnZXQuXG4gICAgaWYgKHN0YXJ0ID4gMCkgeyBjb2xsYXBzZSA9IGJpYXMgPSBcInJpZ2h0XCI7IH1cbiAgICB2YXIgcmVjdHM7XG4gICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIChyZWN0cyA9IG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSkubGVuZ3RoID4gMSlcbiAgICAgIHsgcmVjdCA9IHJlY3RzW2JpYXMgPT0gXCJyaWdodFwiID8gcmVjdHMubGVuZ3RoIC0gMSA6IDBdOyB9XG4gICAgZWxzZVxuICAgICAgeyByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgfVxuICB9XG4gIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiAhc3RhcnQgJiYgKCFyZWN0IHx8ICFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpKSB7XG4gICAgdmFyIHJTcGFuID0gbm9kZS5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07XG4gICAgaWYgKHJTcGFuKVxuICAgICAgeyByZWN0ID0ge2xlZnQ6IHJTcGFuLmxlZnQsIHJpZ2h0OiByU3Bhbi5sZWZ0ICsgY2hhcldpZHRoKGNtLmRpc3BsYXkpLCB0b3A6IHJTcGFuLnRvcCwgYm90dG9tOiByU3Bhbi5ib3R0b219OyB9XG4gICAgZWxzZVxuICAgICAgeyByZWN0ID0gbnVsbFJlY3Q7IH1cbiAgfVxuXG4gIHZhciBydG9wID0gcmVjdC50b3AgLSBwcmVwYXJlZC5yZWN0LnRvcCwgcmJvdCA9IHJlY3QuYm90dG9tIC0gcHJlcGFyZWQucmVjdC50b3A7XG4gIHZhciBtaWQgPSAocnRvcCArIHJib3QpIC8gMjtcbiAgdmFyIGhlaWdodHMgPSBwcmVwYXJlZC52aWV3Lm1lYXN1cmUuaGVpZ2h0cztcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGhlaWdodHMubGVuZ3RoIC0gMTsgaSsrKVxuICAgIHsgaWYgKG1pZCA8IGhlaWdodHNbaV0pIHsgYnJlYWsgfSB9XG4gIHZhciB0b3AgPSBpID8gaGVpZ2h0c1tpIC0gMV0gOiAwLCBib3QgPSBoZWlnaHRzW2ldO1xuICB2YXIgcmVzdWx0ID0ge2xlZnQ6IChjb2xsYXBzZSA9PSBcInJpZ2h0XCIgPyByZWN0LnJpZ2h0IDogcmVjdC5sZWZ0KSAtIHByZXBhcmVkLnJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICByaWdodDogKGNvbGxhcHNlID09IFwibGVmdFwiID8gcmVjdC5sZWZ0IDogcmVjdC5yaWdodCkgLSBwcmVwYXJlZC5yZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgdG9wOiB0b3AsIGJvdHRvbTogYm90fTtcbiAgaWYgKCFyZWN0LmxlZnQgJiYgIXJlY3QucmlnaHQpIHsgcmVzdWx0LmJvZ3VzID0gdHJ1ZTsgfVxuICBpZiAoIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSkgeyByZXN1bHQucnRvcCA9IHJ0b3A7IHJlc3VsdC5yYm90dG9tID0gcmJvdDsgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gV29yayBhcm91bmQgcHJvYmxlbSB3aXRoIGJvdW5kaW5nIGNsaWVudCByZWN0cyBvbiByYW5nZXMgYmVpbmdcbi8vIHJldHVybmVkIGluY29ycmVjdGx5IHdoZW4gem9vbWVkIG9uIElFMTAgYW5kIGJlbG93LlxuZnVuY3Rpb24gbWF5YmVVcGRhdGVSZWN0Rm9yWm9vbWluZyhtZWFzdXJlLCByZWN0KSB7XG4gIGlmICghd2luZG93LnNjcmVlbiB8fCBzY3JlZW4ubG9naWNhbFhEUEkgPT0gbnVsbCB8fFxuICAgICAgc2NyZWVuLmxvZ2ljYWxYRFBJID09IHNjcmVlbi5kZXZpY2VYRFBJIHx8ICFoYXNCYWRab29tZWRSZWN0cyhtZWFzdXJlKSlcbiAgICB7IHJldHVybiByZWN0IH1cbiAgdmFyIHNjYWxlWCA9IHNjcmVlbi5sb2dpY2FsWERQSSAvIHNjcmVlbi5kZXZpY2VYRFBJO1xuICB2YXIgc2NhbGVZID0gc2NyZWVuLmxvZ2ljYWxZRFBJIC8gc2NyZWVuLmRldmljZVlEUEk7XG4gIHJldHVybiB7bGVmdDogcmVjdC5sZWZ0ICogc2NhbGVYLCByaWdodDogcmVjdC5yaWdodCAqIHNjYWxlWCxcbiAgICAgICAgICB0b3A6IHJlY3QudG9wICogc2NhbGVZLCBib3R0b206IHJlY3QuYm90dG9tICogc2NhbGVZfVxufVxuXG5mdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGxpbmVWaWV3KSB7XG4gIGlmIChsaW5lVmlldy5tZWFzdXJlKSB7XG4gICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9O1xuICAgIGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IG51bGw7XG4gICAgaWYgKGxpbmVWaWV3LnJlc3QpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OyB9IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKSB7XG4gIGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlID0gbnVsbDtcbiAgcmVtb3ZlQ2hpbGRyZW4oY20uZGlzcGxheS5saW5lTWVhc3VyZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKVxuICAgIHsgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZUZvcihjbS5kaXNwbGF5LnZpZXdbaV0pOyB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyQ2FjaGVzKGNtKSB7XG4gIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUoY20pO1xuICBjbS5kaXNwbGF5LmNhY2hlZENoYXJXaWR0aCA9IGNtLmRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGNtLmRpc3BsYXkuY2FjaGVkUGFkZGluZ0ggPSBudWxsO1xuICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOyB9XG4gIGNtLmRpc3BsYXkubGluZU51bUNoYXJzID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7XG4gIC8vIFdvcmsgYXJvdW5kIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ4OTIwNlxuICAvLyB3aGljaCBjYXVzZXMgcGFnZV9PZmZzZXQgYW5kIGJvdW5kaW5nIGNsaWVudCByZWN0cyB0byB1c2VcbiAgLy8gZGlmZmVyZW50IHJlZmVyZW5jZSB2aWV3cG9ydHMgYW5kIGludmFsaWRhdGUgb3VyIGNhbGN1bGF0aW9ucy5cbiAgaWYgKGNocm9tZSAmJiBhbmRyb2lkKSB7IHJldHVybiAtKGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkubWFyZ2luTGVmdCkpIH1cbiAgcmV0dXJuIHdpbmRvdy5wYWdlWE9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbExlZnRcbn1cbmZ1bmN0aW9uIHBhZ2VTY3JvbGxZKCkge1xuICBpZiAoY2hyb21lICYmIGFuZHJvaWQpIHsgcmV0dXJuIC0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm1hcmdpblRvcCkpIH1cbiAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcFxufVxuXG5mdW5jdGlvbiB3aWRnZXRUb3BIZWlnaHQobGluZU9iaikge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgaWYgKGxpbmVPYmoud2lkZ2V0cykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVPYmoud2lkZ2V0cy5sZW5ndGg7ICsraSkgeyBpZiAobGluZU9iai53aWRnZXRzW2ldLmFib3ZlKVxuICAgIHsgaGVpZ2h0ICs9IHdpZGdldEhlaWdodChsaW5lT2JqLndpZGdldHNbaV0pOyB9IH0gfVxuICByZXR1cm4gaGVpZ2h0XG59XG5cbi8vIENvbnZlcnRzIGEge3RvcCwgYm90dG9tLCBsZWZ0LCByaWdodH0gYm94IGZyb20gbGluZS1sb2NhbFxuLy8gY29vcmRpbmF0ZXMgaW50byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLiBDb250ZXh0IG1heSBiZSBvbmUgb2Zcbi8vIFwibGluZVwiLCBcImRpdlwiIChkaXNwbGF5LmxpbmVEaXYpLCBcImxvY2FsXCIuL251bGwgKGVkaXRvciksIFwid2luZG93XCIsXG4vLyBvciBcInBhZ2VcIi5cbmZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCwgaW5jbHVkZVdpZGdldHMpIHtcbiAgaWYgKCFpbmNsdWRlV2lkZ2V0cykge1xuICAgIHZhciBoZWlnaHQgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgcmVjdC50b3AgKz0gaGVpZ2h0OyByZWN0LmJvdHRvbSArPSBoZWlnaHQ7XG4gIH1cbiAgaWYgKGNvbnRleHQgPT0gXCJsaW5lXCIpIHsgcmV0dXJuIHJlY3QgfVxuICBpZiAoIWNvbnRleHQpIHsgY29udGV4dCA9IFwibG9jYWxcIjsgfVxuICB2YXIgeU9mZiA9IGhlaWdodEF0TGluZShsaW5lT2JqKTtcbiAgaWYgKGNvbnRleHQgPT0gXCJsb2NhbFwiKSB7IHlPZmYgKz0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KTsgfVxuICBlbHNlIHsgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7IH1cbiAgaWYgKGNvbnRleHQgPT0gXCJwYWdlXCIgfHwgY29udGV4dCA9PSBcIndpbmRvd1wiKSB7XG4gICAgdmFyIGxPZmYgPSBjbS5kaXNwbGF5LmxpbmVTcGFjZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB5T2ZmICs9IGxPZmYudG9wICsgKGNvbnRleHQgPT0gXCJ3aW5kb3dcIiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTtcbiAgICB2YXIgeE9mZiA9IGxPZmYubGVmdCArIChjb250ZXh0ID09IFwid2luZG93XCIgPyAwIDogcGFnZVNjcm9sbFgoKSk7XG4gICAgcmVjdC5sZWZ0ICs9IHhPZmY7IHJlY3QucmlnaHQgKz0geE9mZjtcbiAgfVxuICByZWN0LnRvcCArPSB5T2ZmOyByZWN0LmJvdHRvbSArPSB5T2ZmO1xuICByZXR1cm4gcmVjdFxufVxuXG4vLyBDb3ZlcnRzIGEgYm94IGZyb20gXCJkaXZcIiBjb29yZHMgdG8gYW5vdGhlciBjb29yZGluYXRlIHN5c3RlbS5cbi8vIENvbnRleHQgbWF5IGJlIFwid2luZG93XCIsIFwicGFnZVwiLCBcImRpdlwiLCBvciBcImxvY2FsXCIuL251bGwuXG5mdW5jdGlvbiBmcm9tQ29vcmRTeXN0ZW0oY20sIGNvb3JkcywgY29udGV4dCkge1xuICBpZiAoY29udGV4dCA9PSBcImRpdlwiKSB7IHJldHVybiBjb29yZHMgfVxuICB2YXIgbGVmdCA9IGNvb3Jkcy5sZWZ0LCB0b3AgPSBjb29yZHMudG9wO1xuICAvLyBGaXJzdCBtb3ZlIGludG8gXCJwYWdlXCIgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgaWYgKGNvbnRleHQgPT0gXCJwYWdlXCIpIHtcbiAgICBsZWZ0IC09IHBhZ2VTY3JvbGxYKCk7XG4gICAgdG9wIC09IHBhZ2VTY3JvbGxZKCk7XG4gIH0gZWxzZSBpZiAoY29udGV4dCA9PSBcImxvY2FsXCIgfHwgIWNvbnRleHQpIHtcbiAgICB2YXIgbG9jYWxCb3ggPSBjbS5kaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDtcbiAgICB0b3AgKz0gbG9jYWxCb3gudG9wO1xuICB9XG5cbiAgdmFyIGxpbmVTcGFjZUJveCA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge2xlZnQ6IGxlZnQgLSBsaW5lU3BhY2VCb3gubGVmdCwgdG9wOiB0b3AgLSBsaW5lU3BhY2VCb3gudG9wfVxufVxuXG5mdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIGJpYXMpIHtcbiAgaWYgKCFsaW5lT2JqKSB7IGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpOyB9XG4gIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyKGNtLCBsaW5lT2JqLCBwb3MuY2gsIGJpYXMpLCBjb250ZXh0KVxufVxuXG4vLyBSZXR1cm5zIGEgYm94IGZvciBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgd2hpY2ggbWF5IGhhdmUgYW5cbi8vICdvdGhlcicgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlY29uZGFyeSBjdXJzb3Jcbi8vIG9uIGEgYmlkaSBib3VuZGFyeS5cbi8vIEEgY3Vyc29yIFBvcyhsaW5lLCBjaGFyLCBcImJlZm9yZVwiKSBpcyBvbiB0aGUgc2FtZSB2aXN1YWwgbGluZSBhcyBgY2hhciAtIDFgXG4vLyBhbmQgYWZ0ZXIgYGNoYXIgLSAxYCBpbiB3cml0aW5nIG9yZGVyIG9mIGBjaGFyIC0gMWBcbi8vIEEgY3Vyc29yIFBvcyhsaW5lLCBjaGFyLCBcImFmdGVyXCIpIGlzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lIGFzIGBjaGFyYFxuLy8gYW5kIGJlZm9yZSBgY2hhcmAgaW4gd3JpdGluZyBvcmRlciBvZiBgY2hhcmBcbi8vIEV4YW1wbGVzICh1cHBlci1jYXNlIGxldHRlcnMgYXJlIFJUTCwgbG93ZXItY2FzZSBhcmUgTFRSKTpcbi8vICAgICBQb3MoMCwgMSwgLi4uKVxuLy8gICAgIGJlZm9yZSAgIGFmdGVyXG4vLyBhYiAgICAgYXxiICAgICBhfGJcbi8vIGFCICAgICBhfEIgICAgIGFCfFxuLy8gQWIgICAgIHxBYiAgICAgQXxiXG4vLyBBQiAgICAgQnxBICAgICBCfEFcbi8vIEV2ZXJ5IHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUgaXMgY29uc2lkZXJlZCB0byBzdGlja1xuLy8gdG8gdGhlIGxhc3QgY2hhcmFjdGVyIG9uIHRoZSBsaW5lLlxuZnVuY3Rpb24gY3Vyc29yQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdmFySGVpZ2h0KSB7XG4gIGxpbmVPYmogPSBsaW5lT2JqIHx8IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7XG4gIGlmICghcHJlcGFyZWRNZWFzdXJlKSB7IHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7IH1cbiAgZnVuY3Rpb24gZ2V0KGNoLCByaWdodCkge1xuICAgIHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmlnaHQgPyBcInJpZ2h0XCIgOiBcImxlZnRcIiwgdmFySGVpZ2h0KTtcbiAgICBpZiAocmlnaHQpIHsgbS5sZWZ0ID0gbS5yaWdodDsgfSBlbHNlIHsgbS5yaWdodCA9IG0ubGVmdDsgfVxuICAgIHJldHVybiBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG0sIGNvbnRleHQpXG4gIH1cbiAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgY20uZG9jLmRpcmVjdGlvbiksIGNoID0gcG9zLmNoLCBzdGlja3kgPSBwb3Muc3RpY2t5O1xuICBpZiAoY2ggPj0gbGluZU9iai50ZXh0Lmxlbmd0aCkge1xuICAgIGNoID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICBzdGlja3kgPSBcImJlZm9yZVwiO1xuICB9IGVsc2UgaWYgKGNoIDw9IDApIHtcbiAgICBjaCA9IDA7XG4gICAgc3RpY2t5ID0gXCJhZnRlclwiO1xuICB9XG4gIGlmICghb3JkZXIpIHsgcmV0dXJuIGdldChzdGlja3kgPT0gXCJiZWZvcmVcIiA/IGNoIC0gMSA6IGNoLCBzdGlja3kgPT0gXCJiZWZvcmVcIikgfVxuXG4gIGZ1bmN0aW9uIGdldEJpZGkoY2gsIHBhcnRQb3MsIGludmVydCkge1xuICAgIHZhciBwYXJ0ID0gb3JkZXJbcGFydFBvc10sIHJpZ2h0ID0gcGFydC5sZXZlbCA9PSAxO1xuICAgIHJldHVybiBnZXQoaW52ZXJ0ID8gY2ggLSAxIDogY2gsIHJpZ2h0ICE9IGludmVydClcbiAgfVxuICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGNoLCBzdGlja3kpO1xuICB2YXIgb3RoZXIgPSBiaWRpT3RoZXI7XG4gIHZhciB2YWwgPSBnZXRCaWRpKGNoLCBwYXJ0UG9zLCBzdGlja3kgPT0gXCJiZWZvcmVcIik7XG4gIGlmIChvdGhlciAhPSBudWxsKSB7IHZhbC5vdGhlciA9IGdldEJpZGkoY2gsIG90aGVyLCBzdGlja3kgIT0gXCJiZWZvcmVcIik7IH1cbiAgcmV0dXJuIHZhbFxufVxuXG4vLyBVc2VkIHRvIGNoZWFwbHkgZXN0aW1hdGUgdGhlIGNvb3JkaW5hdGVzIGZvciBhIHBvc2l0aW9uLiBVc2VkIGZvclxuLy8gaW50ZXJtZWRpYXRlIHNjcm9sbCB1cGRhdGVzLlxuZnVuY3Rpb24gZXN0aW1hdGVDb29yZHMoY20sIHBvcykge1xuICB2YXIgbGVmdCA9IDA7XG4gIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpO1xuICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGxlZnQgPSBjaGFyV2lkdGgoY20uZGlzcGxheSkgKiBwb3MuY2g7IH1cbiAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpO1xuICB2YXIgdG9wID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopICsgcGFkZGluZ1RvcChjbS5kaXNwbGF5KTtcbiAgcmV0dXJuIHtsZWZ0OiBsZWZ0LCByaWdodDogbGVmdCwgdG9wOiB0b3AsIGJvdHRvbTogdG9wICsgbGluZU9iai5oZWlnaHR9XG59XG5cbi8vIFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZvcm1hdGlvbi5cbi8vIHhSZWwgaXMgdGhlIHJlbGF0aXZlIHggcG9zaXRpb24gb2YgdGhlIGlucHV0IGNvb3JkaW5hdGVzIGNvbXBhcmVkXG4vLyB0byB0aGUgZm91bmQgcG9zaXRpb24gKHNvIHhSZWwgPiAwIG1lYW5zIHRoZSBjb29yZGluYXRlcyBhcmUgdG9cbi8vIHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdoZW4gb3V0c2lkZVxuLy8gaXMgdHJ1ZSwgdGhhdCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgbGllIG91dHNpZGUgdGhlIGxpbmUnc1xuLy8gdmVydGljYWwgcmFuZ2UuXG5mdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgc3RpY2t5LCBvdXRzaWRlLCB4UmVsKSB7XG4gIHZhciBwb3MgPSBQb3MobGluZSwgY2gsIHN0aWNreSk7XG4gIHBvcy54UmVsID0geFJlbDtcbiAgaWYgKG91dHNpZGUpIHsgcG9zLm91dHNpZGUgPSB0cnVlOyB9XG4gIHJldHVybiBwb3Ncbn1cblxuLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxuLy8gSW5wdXQgbXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwgKFwiZGl2XCIgY29vcmRpbmF0ZSBzeXN0ZW0pLlxuZnVuY3Rpb24gY29vcmRzQ2hhcihjbSwgeCwgeSkge1xuICB2YXIgZG9jID0gY20uZG9jO1xuICB5ICs9IGNtLmRpc3BsYXkudmlld09mZnNldDtcbiAgaWYgKHkgPCAwKSB7IHJldHVybiBQb3NXaXRoSW5mbyhkb2MuZmlyc3QsIDAsIG51bGwsIHRydWUsIC0xKSB9XG4gIHZhciBsaW5lTiA9IGxpbmVBdEhlaWdodChkb2MsIHkpLCBsYXN0ID0gZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxO1xuICBpZiAobGluZU4gPiBsYXN0KVxuICAgIHsgcmV0dXJuIFBvc1dpdGhJbmZvKGRvYy5maXJzdCArIGRvYy5zaXplIC0gMSwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoLCBudWxsLCB0cnVlLCAxKSB9XG4gIGlmICh4IDwgMCkgeyB4ID0gMDsgfVxuXG4gIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmVOKTtcbiAgZm9yICg7Oykge1xuICAgIHZhciBmb3VuZCA9IGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU4sIHgsIHkpO1xuICAgIHZhciBjb2xsYXBzZWQgPSBjb2xsYXBzZWRTcGFuQXJvdW5kKGxpbmVPYmosIGZvdW5kLmNoICsgKGZvdW5kLnhSZWwgPiAwID8gMSA6IDApKTtcbiAgICBpZiAoIWNvbGxhcHNlZCkgeyByZXR1cm4gZm91bmQgfVxuICAgIHZhciByYW5nZUVuZCA9IGNvbGxhcHNlZC5maW5kKDEpO1xuICAgIGlmIChyYW5nZUVuZC5saW5lID09IGxpbmVOKSB7IHJldHVybiByYW5nZUVuZCB9XG4gICAgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lTiA9IHJhbmdlRW5kLmxpbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBwZWRMaW5lRXh0ZW50KGNtLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUsIHkpIHtcbiAgeSAtPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gIHZhciBlbmQgPSBsaW5lT2JqLnRleHQubGVuZ3RoO1xuICB2YXIgYmVnaW4gPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7IHJldHVybiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoIC0gMSkuYm90dG9tIDw9IHk7IH0sIGVuZCwgMCk7XG4gIGVuZCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpLnRvcCA+IHk7IH0sIGJlZ2luLCBlbmQpO1xuICByZXR1cm4ge2JlZ2luOiBiZWdpbiwgZW5kOiBlbmR9XG59XG5cbmZ1bmN0aW9uIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXQpIHtcbiAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHsgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsgfVxuICB2YXIgdGFyZ2V0VG9wID0gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIHRhcmdldCksIFwibGluZVwiKS50b3A7XG4gIHJldHVybiB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB0YXJnZXRUb3ApXG59XG5cbi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2lkZSBvZiBhIGJveCBpcyBhZnRlciB0aGUgZ2l2ZW5cbi8vIGNvb3JkaW5hdGVzLCBpbiB0b3AtdG8tYm90dG9tLCBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuZnVuY3Rpb24gYm94SXNBZnRlcihib3gsIHgsIHksIGxlZnQpIHtcbiAgcmV0dXJuIGJveC5ib3R0b20gPD0geSA/IGZhbHNlIDogYm94LnRvcCA+IHkgPyB0cnVlIDogKGxlZnQgPyBib3gubGVmdCA6IGJveC5yaWdodCkgPiB4XG59XG5cbmZ1bmN0aW9uIGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5vJCQxLCB4LCB5KSB7XG4gIC8vIE1vdmUgeSBpbnRvIGxpbmUtbG9jYWwgY29vcmRpbmF0ZSBzcGFjZVxuICB5IC09IGhlaWdodEF0TGluZShsaW5lT2JqKTtcbiAgdmFyIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7XG4gIC8vIFdoZW4gZGlyZWN0bHkgY2FsbGluZyBgbWVhc3VyZUNoYXJQcmVwYXJlZGAsIHdlIGhhdmUgdG8gYWRqdXN0XG4gIC8vIGZvciB0aGUgd2lkZ2V0cyBhdCB0aGlzIGxpbmUuXG4gIHZhciB3aWRnZXRIZWlnaHQkJDEgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gIHZhciBiZWdpbiA9IDAsIGVuZCA9IGxpbmVPYmoudGV4dC5sZW5ndGgsIGx0ciA9IHRydWU7XG5cbiAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgY20uZG9jLmRpcmVjdGlvbik7XG4gIC8vIElmIHRoZSBsaW5lIGlzbid0IHBsYWluIGxlZnQtdG8tcmlnaHQgdGV4dCwgZmlyc3QgZmlndXJlIG91dFxuICAvLyB3aGljaCBiaWRpIHNlY3Rpb24gdGhlIGNvb3JkaW5hdGVzIGZhbGwgaW50by5cbiAgaWYgKG9yZGVyKSB7XG4gICAgdmFyIHBhcnQgPSAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgPyBjb29yZHNCaWRpUGFydFdyYXBwZWQgOiBjb29yZHNCaWRpUGFydClcbiAgICAgICAgICAgICAgICAgKGNtLCBsaW5lT2JqLCBsaW5lTm8kJDEsIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpO1xuICAgIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAvLyBUaGUgYXdrd2FyZCAtMSBvZmZzZXRzIGFyZSBuZWVkZWQgYmVjYXVzZSBmaW5kRmlyc3QgKGNhbGxlZFxuICAgIC8vIG9uIHRoZXNlIGJlbG93KSB3aWxsIHRyZWF0IGl0cyBmaXJzdCBib3VuZCBhcyBpbmNsdXNpdmUsXG4gICAgLy8gc2Vjb25kIGFzIGV4Y2x1c2l2ZSwgYnV0IHdlIHdhbnQgdG8gYWN0dWFsbHkgYWRkcmVzcyB0aGVcbiAgICAvLyBjaGFyYWN0ZXJzIGluIHRoZSBwYXJ0J3MgcmFuZ2VcbiAgICBiZWdpbiA9IGx0ciA/IHBhcnQuZnJvbSA6IHBhcnQudG8gLSAxO1xuICAgIGVuZCA9IGx0ciA/IHBhcnQudG8gOiBwYXJ0LmZyb20gLSAxO1xuICB9XG5cbiAgLy8gQSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJhY3RlciB3aG9zZSBib3VuZGluZyBib3hcbiAgLy8gc3RhcnRzIGFmdGVyIHRoZSBjb29yZGluYXRlcy4gSWYgd2UgcnVuIGFjcm9zcyBhbnkgd2hvc2UgYm94IHdyYXBcbiAgLy8gdGhlIGNvb3JkaW5hdGVzLCBzdG9yZSB0aGF0LlxuICB2YXIgY2hBcm91bmQgPSBudWxsLCBib3hBcm91bmQgPSBudWxsO1xuICB2YXIgY2ggPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7XG4gICAgdmFyIGJveCA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpO1xuICAgIGJveC50b3AgKz0gd2lkZ2V0SGVpZ2h0JCQxOyBib3guYm90dG9tICs9IHdpZGdldEhlaWdodCQkMTtcbiAgICBpZiAoIWJveElzQWZ0ZXIoYm94LCB4LCB5LCBmYWxzZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAoYm94LnRvcCA8PSB5ICYmIGJveC5sZWZ0IDw9IHgpIHtcbiAgICAgIGNoQXJvdW5kID0gY2g7XG4gICAgICBib3hBcm91bmQgPSBib3g7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sIGJlZ2luLCBlbmQpO1xuXG4gIHZhciBiYXNlWCwgc3RpY2t5LCBvdXRzaWRlID0gZmFsc2U7XG4gIC8vIElmIGEgYm94IGFyb3VuZCB0aGUgY29vcmRpbmF0ZXMgd2FzIGZvdW5kLCB1c2UgdGhhdFxuICBpZiAoYm94QXJvdW5kKSB7XG4gICAgLy8gRGlzdGluZ3Vpc2ggY29vcmRpbmF0ZXMgbmVhcmVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGUgb2YgdGhlIGJveFxuICAgIHZhciBhdExlZnQgPSB4IC0gYm94QXJvdW5kLmxlZnQgPCBib3hBcm91bmQucmlnaHQgLSB4LCBhdFN0YXJ0ID0gYXRMZWZ0ID09IGx0cjtcbiAgICBjaCA9IGNoQXJvdW5kICsgKGF0U3RhcnQgPyAwIDogMSk7XG4gICAgc3RpY2t5ID0gYXRTdGFydCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgYmFzZVggPSBhdExlZnQgPyBib3hBcm91bmQubGVmdCA6IGJveEFyb3VuZC5yaWdodDtcbiAgfSBlbHNlIHtcbiAgICAvLyAoQWRqdXN0IGZvciBleHRlbmRlZCBib3VuZCwgaWYgbmVjZXNzYXJ5LilcbiAgICBpZiAoIWx0ciAmJiAoY2ggPT0gZW5kIHx8IGNoID09IGJlZ2luKSkgeyBjaCsrOyB9XG4gICAgLy8gVG8gZGV0ZXJtaW5lIHdoaWNoIHNpZGUgdG8gYXNzb2NpYXRlIHdpdGgsIGdldCB0aGUgYm94IHRvIHRoZVxuICAgIC8vIGxlZnQgb2YgdGhlIGNoYXJhY3RlciBhbmQgY29tcGFyZSBpdCdzIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHRoZVxuICAgIC8vIGNvb3JkaW5hdGVzXG4gICAgc3RpY2t5ID0gY2ggPT0gMCA/IFwiYWZ0ZXJcIiA6IGNoID09IGxpbmVPYmoudGV4dC5sZW5ndGggPyBcImJlZm9yZVwiIDpcbiAgICAgIChtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoIC0gKGx0ciA/IDEgOiAwKSkuYm90dG9tICsgd2lkZ2V0SGVpZ2h0JCQxIDw9IHkpID09IGx0ciA/XG4gICAgICBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgIC8vIE5vdyBnZXQgYWNjdXJhdGUgY29vcmRpbmF0ZXMgZm9yIHRoaXMgcGxhY2UsIGluIG9yZGVyIHRvIGdldCBhXG4gICAgLy8gYmFzZSBYIHBvc2l0aW9uXG4gICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObyQkMSwgY2gsIHN0aWNreSksIFwibGluZVwiLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpO1xuICAgIGJhc2VYID0gY29vcmRzLmxlZnQ7XG4gICAgb3V0c2lkZSA9IHkgPCBjb29yZHMudG9wIHx8IHkgPj0gY29vcmRzLmJvdHRvbTtcbiAgfVxuXG4gIGNoID0gc2tpcEV4dGVuZGluZ0NoYXJzKGxpbmVPYmoudGV4dCwgY2gsIDEpO1xuICByZXR1cm4gUG9zV2l0aEluZm8obGluZU5vJCQxLCBjaCwgc3RpY2t5LCBvdXRzaWRlLCB4IC0gYmFzZVgpXG59XG5cbmZ1bmN0aW9uIGNvb3Jkc0JpZGlQYXJ0KGNtLCBsaW5lT2JqLCBsaW5lTm8kJDEsIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpIHtcbiAgLy8gQmlkaSBwYXJ0cyBhcmUgc29ydGVkIGxlZnQtdG8tcmlnaHQsIGFuZCBpbiBhIG5vbi1saW5lLXdyYXBwaW5nXG4gIC8vIHNpdHVhdGlvbiwgd2UgY2FuIHRha2UgdGhpcyBvcmRlcmluZyB0byBjb3JyZXNwb25kIHRvIHRoZSB2aXN1YWxcbiAgLy8gb3JkZXJpbmcuIFRoaXMgZmluZHMgdGhlIGZpcnN0IHBhcnQgd2hvc2UgZW5kIGlzIGFmdGVyIHRoZSBnaXZlblxuICAvLyBjb29yZGluYXRlcy5cbiAgdmFyIGluZGV4ID0gZmluZEZpcnN0KGZ1bmN0aW9uIChpKSB7XG4gICAgdmFyIHBhcnQgPSBvcmRlcltpXSwgbHRyID0gcGFydC5sZXZlbCAhPSAxO1xuICAgIHJldHVybiBib3hJc0FmdGVyKGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObyQkMSwgbHRyID8gcGFydC50byA6IHBhcnQuZnJvbSwgbHRyID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZVwiLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpLCB4LCB5LCB0cnVlKVxuICB9LCAwLCBvcmRlci5sZW5ndGggLSAxKTtcbiAgdmFyIHBhcnQgPSBvcmRlcltpbmRleF07XG4gIC8vIElmIHRoaXMgaXNuJ3QgdGhlIGZpcnN0IHBhcnQsIHRoZSBwYXJ0J3Mgc3RhcnQgaXMgYWxzbyBhZnRlclxuICAvLyB0aGUgY29vcmRpbmF0ZXMsIGFuZCB0aGUgY29vcmRpbmF0ZXMgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUgYXNcbiAgLy8gdGhhdCBzdGFydCwgbW92ZSBvbmUgcGFydCBiYWNrLlxuICBpZiAoaW5kZXggPiAwKSB7XG4gICAgdmFyIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICB2YXIgc3RhcnQgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8kJDEsIGx0ciA/IHBhcnQuZnJvbSA6IHBhcnQudG8sIGx0ciA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmVcIiwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlKTtcbiAgICBpZiAoYm94SXNBZnRlcihzdGFydCwgeCwgeSwgdHJ1ZSkgJiYgc3RhcnQudG9wID4geSlcbiAgICAgIHsgcGFydCA9IG9yZGVyW2luZGV4IC0gMV07IH1cbiAgfVxuICByZXR1cm4gcGFydFxufVxuXG5mdW5jdGlvbiBjb29yZHNCaWRpUGFydFdyYXBwZWQoY20sIGxpbmVPYmosIF9saW5lTm8sIHByZXBhcmVkTWVhc3VyZSwgb3JkZXIsIHgsIHkpIHtcbiAgLy8gSW4gYSB3cmFwcGVkIGxpbmUsIHJ0bCB0ZXh0IG9uIHdyYXBwaW5nIGJvdW5kYXJpZXMgY2FuIGRvIHRoaW5nc1xuICAvLyB0aGF0IGRvbid0IGNvcnJlc3BvbmQgdG8gdGhlIG9yZGVyaW5nIGluIG91ciBgb3JkZXJgIGFycmF5IGF0XG4gIC8vIGFsbCwgc28gYSBiaW5hcnkgc2VhcmNoIGRvZXNuJ3Qgd29yaywgYW5kIHdlIHdhbnQgdG8gcmV0dXJuIGFcbiAgLy8gcGFydCB0aGF0IG9ubHkgc3BhbnMgb25lIGxpbmUgc28gdGhhdCB0aGUgYmluYXJ5IHNlYXJjaCBpblxuICAvLyBjb29yZHNDaGFySW5uZXIgaXMgc2FmZS4gQXMgc3VjaCwgd2UgZmlyc3QgZmluZCB0aGUgZXh0ZW50IG9mIHRoZVxuICAvLyB3cmFwcGVkIGxpbmUsIGFuZCB0aGVuIGRvIGEgZmxhdCBzZWFyY2ggaW4gd2hpY2ggd2UgZGlzY2FyZCBhbnlcbiAgLy8gc3BhbnMgdGhhdCBhcmVuJ3Qgb24gdGhlIGxpbmUuXG4gIHZhciByZWYgPSB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB5KTtcbiAgdmFyIGJlZ2luID0gcmVmLmJlZ2luO1xuICB2YXIgZW5kID0gcmVmLmVuZDtcbiAgaWYgKC9cXHMvLnRlc3QobGluZU9iai50ZXh0LmNoYXJBdChlbmQgLSAxKSkpIHsgZW5kLS07IH1cbiAgdmFyIHBhcnQgPSBudWxsLCBjbG9zZXN0RGlzdCA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IG9yZGVyW2ldO1xuICAgIGlmIChwLmZyb20gPj0gZW5kIHx8IHAudG8gPD0gYmVnaW4pIHsgY29udGludWUgfVxuICAgIHZhciBsdHIgPSBwLmxldmVsICE9IDE7XG4gICAgdmFyIGVuZFggPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGx0ciA/IE1hdGgubWluKGVuZCwgcC50bykgLSAxIDogTWF0aC5tYXgoYmVnaW4sIHAuZnJvbSkpLnJpZ2h0O1xuICAgIC8vIFdlaWdoIGFnYWluc3Qgc3BhbnMgZW5kaW5nIGJlZm9yZSB0aGlzLCBzbyB0aGF0IHRoZXkgYXJlIG9ubHlcbiAgICAvLyBwaWNrZWQgaWYgbm90aGluZyBlbmRzIGFmdGVyXG4gICAgdmFyIGRpc3QgPSBlbmRYIDwgeCA/IHggLSBlbmRYICsgMWU5IDogZW5kWCAtIHg7XG4gICAgaWYgKCFwYXJ0IHx8IGNsb3Nlc3REaXN0ID4gZGlzdCkge1xuICAgICAgcGFydCA9IHA7XG4gICAgICBjbG9zZXN0RGlzdCA9IGRpc3Q7XG4gICAgfVxuICB9XG4gIGlmICghcGFydCkgeyBwYXJ0ID0gb3JkZXJbb3JkZXIubGVuZ3RoIC0gMV07IH1cbiAgLy8gQ2xpcCB0aGUgcGFydCB0byB0aGUgd3JhcHBlZCBsaW5lLlxuICBpZiAocGFydC5mcm9tIDwgYmVnaW4pIHsgcGFydCA9IHtmcm9tOiBiZWdpbiwgdG86IHBhcnQudG8sIGxldmVsOiBwYXJ0LmxldmVsfTsgfVxuICBpZiAocGFydC50byA+IGVuZCkgeyBwYXJ0ID0ge2Zyb206IHBhcnQuZnJvbSwgdG86IGVuZCwgbGV2ZWw6IHBhcnQubGV2ZWx9OyB9XG4gIHJldHVybiBwYXJ0XG59XG5cbnZhciBtZWFzdXJlVGV4dDtcbi8vIENvbXB1dGUgdGhlIGRlZmF1bHQgdGV4dCBoZWlnaHQuXG5mdW5jdGlvbiB0ZXh0SGVpZ2h0KGRpc3BsYXkpIHtcbiAgaWYgKGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgfVxuICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkge1xuICAgIG1lYXN1cmVUZXh0ID0gZWx0KFwicHJlXCIpO1xuICAgIC8vIE1lYXN1cmUgYSBidW5jaCBvZiBsaW5lcywgZm9yIGJyb3dzZXJzIHRoYXQgY29tcHV0ZVxuICAgIC8vIGZyYWN0aW9uYWwgaGVpZ2h0cy5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIHtcbiAgICAgIG1lYXN1cmVUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwieFwiKSk7XG4gICAgICBtZWFzdXJlVGV4dC5hcHBlbmRDaGlsZChlbHQoXCJiclwiKSk7XG4gICAgfVxuICAgIG1lYXN1cmVUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwieFwiKSk7XG4gIH1cbiAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7XG4gIHZhciBoZWlnaHQgPSBtZWFzdXJlVGV4dC5vZmZzZXRIZWlnaHQgLyA1MDtcbiAgaWYgKGhlaWdodCA+IDMpIHsgZGlzcGxheS5jYWNoZWRUZXh0SGVpZ2h0ID0gaGVpZ2h0OyB9XG4gIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubWVhc3VyZSk7XG4gIHJldHVybiBoZWlnaHQgfHwgMVxufVxuXG4vLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC5cbmZ1bmN0aW9uIGNoYXJXaWR0aChkaXNwbGF5KSB7XG4gIGlmIChkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZENoYXJXaWR0aCB9XG4gIHZhciBhbmNob3IgPSBlbHQoXCJzcGFuXCIsIFwieHh4eHh4eHh4eFwiKTtcbiAgdmFyIHByZSA9IGVsdChcInByZVwiLCBbYW5jaG9yXSk7XG4gIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTtcbiAgdmFyIHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIHdpZHRoID0gKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gMTA7XG4gIGlmICh3aWR0aCA+IDIpIHsgZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSB3aWR0aDsgfVxuICByZXR1cm4gd2lkdGggfHwgMTBcbn1cblxuLy8gRG8gYSBidWxrLXJlYWQgb2YgdGhlIERPTSBwb3NpdGlvbnMgYW5kIHNpemVzIG5lZWRlZCB0byBkcmF3IHRoZVxuLy8gdmlldywgc28gdGhhdCB3ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIERPTS5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbnMoY20pIHtcbiAgdmFyIGQgPSBjbS5kaXNwbGF5LCBsZWZ0ID0ge30sIHdpZHRoID0ge307XG4gIHZhciBndXR0ZXJMZWZ0ID0gZC5ndXR0ZXJzLmNsaWVudExlZnQ7XG4gIGZvciAodmFyIG4gPSBkLmd1dHRlcnMuZmlyc3RDaGlsZCwgaSA9IDA7IG47IG4gPSBuLm5leHRTaWJsaW5nLCArK2kpIHtcbiAgICBsZWZ0W2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLm9mZnNldExlZnQgKyBuLmNsaWVudExlZnQgKyBndXR0ZXJMZWZ0O1xuICAgIHdpZHRoW2NtLm9wdGlvbnMuZ3V0dGVyc1tpXV0gPSBuLmNsaWVudFdpZHRoO1xuICB9XG4gIHJldHVybiB7Zml4ZWRQb3M6IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGQpLFxuICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCxcbiAgICAgICAgICBndXR0ZXJMZWZ0OiBsZWZ0LFxuICAgICAgICAgIGd1dHRlcldpZHRoOiB3aWR0aCxcbiAgICAgICAgICB3cmFwcGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH1cbn1cblxuLy8gQ29tcHV0ZXMgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ICsgZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoLFxuLy8gYnV0IHVzaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBnZXQgYSBzdWItcGl4ZWwtYWNjdXJhdGVcbi8vIHJlc3VsdC5cbmZ1bmN0aW9uIGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGRpc3BsYXkpIHtcbiAgcmV0dXJuIGRpc3BsYXkuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxufVxuXG4vLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBlc3RpbWF0ZXMgdGhlIGhlaWdodCBvZiBhIGxpbmUsIHRvIHVzZSBhc1xuLy8gZmlyc3QgYXBwcm94aW1hdGlvbiB1bnRpbCB0aGUgbGluZSBiZWNvbWVzIHZpc2libGUgKGFuZCBpcyB0aHVzXG4vLyBwcm9wZXJseSBtZWFzdXJhYmxlKS5cbmZ1bmN0aW9uIGVzdGltYXRlSGVpZ2h0KGNtKSB7XG4gIHZhciB0aCA9IHRleHRIZWlnaHQoY20uZGlzcGxheSksIHdyYXBwaW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gIHZhciBwZXJMaW5lID0gd3JhcHBpbmcgJiYgTWF0aC5tYXgoNSwgY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAvIGNoYXJXaWR0aChjbS5kaXNwbGF5KSAtIDMpO1xuICByZXR1cm4gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHsgcmV0dXJuIDAgfVxuXG4gICAgdmFyIHdpZGdldHNIZWlnaHQgPSAwO1xuICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChsaW5lLndpZGdldHNbaV0uaGVpZ2h0KSB7IHdpZGdldHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhlaWdodDsgfVxuICAgIH0gfVxuXG4gICAgaWYgKHdyYXBwaW5nKVxuICAgICAgeyByZXR1cm4gd2lkZ2V0c0hlaWdodCArIChNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGggfVxuICAgIGVsc2VcbiAgICAgIHsgcmV0dXJuIHdpZGdldHNIZWlnaHQgKyB0aCB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSkge1xuICB2YXIgZG9jID0gY20uZG9jLCBlc3QgPSBlc3RpbWF0ZUhlaWdodChjbSk7XG4gIGRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgdmFyIGVzdEhlaWdodCA9IGVzdChsaW5lKTtcbiAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxuICB9KTtcbn1cblxuLy8gR2l2ZW4gYSBtb3VzZSBldmVudCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4gSWYgbGliZXJhbFxuLy8gaXMgZmFsc2UsIGl0IGNoZWNrcyB3aGV0aGVyIGEgZ3V0dGVyIG9yIHNjcm9sbGJhciB3YXMgY2xpY2tlZCxcbi8vIGFuZCByZXR1cm5zIG51bGwgaWYgaXQgd2FzLiBmb3JSZWN0IGlzIHVzZWQgYnkgcmVjdGFuZ3VsYXJcbi8vIHNlbGVjdGlvbnMsIGFuZCB0cmllcyB0byBlc3RpbWF0ZSBhIGNoYXJhY3RlciBwb3NpdGlvbiBldmVuIGZvclxuLy8gY29vcmRpbmF0ZXMgYmV5b25kIHRoZSByaWdodCBvZiB0aGUgdGV4dC5cbmZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShjbSwgZSwgbGliZXJhbCwgZm9yUmVjdCkge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIGlmICghbGliZXJhbCAmJiBlX3RhcmdldChlKS5nZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiKSA9PSBcInRydWVcIikgeyByZXR1cm4gbnVsbCB9XG5cbiAgdmFyIHgsIHksIHNwYWNlID0gZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS5cbiAgdHJ5IHsgeCA9IGUuY2xpZW50WCAtIHNwYWNlLmxlZnQ7IHkgPSBlLmNsaWVudFkgLSBzcGFjZS50b3A7IH1cbiAgY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfVxuICB2YXIgY29vcmRzID0gY29vcmRzQ2hhcihjbSwgeCwgeSksIGxpbmU7XG4gIGlmIChmb3JSZWN0ICYmIGNvb3Jkcy54UmVsID09IDEgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHtcbiAgICB2YXIgY29sRGlmZiA9IGNvdW50Q29sdW1uKGxpbmUsIGxpbmUubGVuZ3RoLCBjbS5vcHRpb25zLnRhYlNpemUpIC0gbGluZS5sZW5ndGg7XG4gICAgY29vcmRzID0gUG9zKGNvb3Jkcy5saW5lLCBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh4IC0gcGFkZGluZ0goY20uZGlzcGxheSkubGVmdCkgLyBjaGFyV2lkdGgoY20uZGlzcGxheSkpIC0gY29sRGlmZikpO1xuICB9XG4gIHJldHVybiBjb29yZHNcbn1cblxuLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbFxuLy8gd2hlbiB0aGUgbGluZSBpc24ndCB2aXNpYmxlLlxuZnVuY3Rpb24gZmluZFZpZXdJbmRleChjbSwgbikge1xuICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gbnVsbCB9XG4gIG4gLT0gY20uZGlzcGxheS52aWV3RnJvbTtcbiAgaWYgKG4gPCAwKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIG4gLT0gdmlld1tpXS5zaXplO1xuICAgIGlmIChuIDwgMCkgeyByZXR1cm4gaSB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uKGNtKSB7XG4gIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTZWxlY3Rpb24oY20sIHByaW1hcnkpIHtcbiAgaWYgKCBwcmltYXJ5ID09PSB2b2lkIDAgKSBwcmltYXJ5ID0gdHJ1ZTtcblxuICB2YXIgZG9jID0gY20uZG9jLCByZXN1bHQgPSB7fTtcbiAgdmFyIGN1ckZyYWdtZW50ID0gcmVzdWx0LmN1cnNvcnMgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghcHJpbWFyeSAmJiBpID09IGRvYy5zZWwucHJpbUluZGV4KSB7IGNvbnRpbnVlIH1cbiAgICB2YXIgcmFuZ2UkJDEgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICBpZiAocmFuZ2UkJDEuZnJvbSgpLmxpbmUgPj0gY20uZGlzcGxheS52aWV3VG8gfHwgcmFuZ2UkJDEudG8oKS5saW5lIDwgY20uZGlzcGxheS52aWV3RnJvbSkgeyBjb250aW51ZSB9XG4gICAgdmFyIGNvbGxhcHNlZCA9IHJhbmdlJCQxLmVtcHR5KCk7XG4gICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKVxuICAgICAgeyBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCByYW5nZSQkMS5oZWFkLCBjdXJGcmFnbWVudCk7IH1cbiAgICBpZiAoIWNvbGxhcHNlZClcbiAgICAgIHsgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSQkMSwgc2VsRnJhZ21lbnQpOyB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBEcmF3cyBhIGN1cnNvciBmb3IgdGhlIGdpdmVuIHJhbmdlXG5mdW5jdGlvbiBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBoZWFkLCBvdXRwdXQpIHtcbiAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgXCJkaXZcIiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7XG5cbiAgdmFyIGN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgXCJcXHUwMGEwXCIsIFwiQ29kZU1pcnJvci1jdXJzb3JcIikpO1xuICBjdXJzb3Iuc3R5bGUubGVmdCA9IHBvcy5sZWZ0ICsgXCJweFwiO1xuICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArIFwicHhcIjtcbiAgY3Vyc29yLnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KDAsIHBvcy5ib3R0b20gLSBwb3MudG9wKSAqIGNtLm9wdGlvbnMuY3Vyc29ySGVpZ2h0ICsgXCJweFwiO1xuXG4gIGlmIChwb3Mub3RoZXIpIHtcbiAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHRcbiAgICB2YXIgb3RoZXJDdXJzb3IgPSBvdXRwdXQuYXBwZW5kQ2hpbGQoZWx0KFwiZGl2XCIsIFwiXFx1MDBhMFwiLCBcIkNvZGVNaXJyb3ItY3Vyc29yIENvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yXCIpKTtcbiAgICBvdGhlckN1cnNvci5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyBcInB4XCI7XG4gICAgb3RoZXJDdXJzb3Iuc3R5bGUudG9wID0gcG9zLm90aGVyLnRvcCArIFwicHhcIjtcbiAgICBvdGhlckN1cnNvci5zdHlsZS5oZWlnaHQgPSAocG9zLm90aGVyLmJvdHRvbSAtIHBvcy5vdGhlci50b3ApICogLjg1ICsgXCJweFwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNtcENvb3JkcyhhLCBiKSB7IHJldHVybiBhLnRvcCAtIGIudG9wIHx8IGEubGVmdCAtIGIubGVmdCB9XG5cbi8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVjdGlvblxuZnVuY3Rpb24gZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSQkMSwgb3V0cHV0KSB7XG4gIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIHZhciBwYWRkaW5nID0gcGFkZGluZ0goY20uZGlzcGxheSksIGxlZnRTaWRlID0gcGFkZGluZy5sZWZ0O1xuICB2YXIgcmlnaHRTaWRlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplcldpZHRoLCBkaXNwbGF5V2lkdGgoY20pIC0gZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0KSAtIHBhZGRpbmcucmlnaHQ7XG4gIHZhciBkb2NMVFIgPSBkb2MuZGlyZWN0aW9uID09IFwibHRyXCI7XG5cbiAgZnVuY3Rpb24gYWRkKGxlZnQsIHRvcCwgd2lkdGgsIGJvdHRvbSkge1xuICAgIGlmICh0b3AgPCAwKSB7IHRvcCA9IDA7IH1cbiAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7XG4gICAgYm90dG9tID0gTWF0aC5yb3VuZChib3R0b20pO1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3Itc2VsZWN0ZWRcIiwgKFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiBcIiArIGxlZnQgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBcIiArIHRvcCArIFwicHg7IHdpZHRoOiBcIiArICh3aWR0aCA9PSBudWxsID8gcmlnaHRTaWRlIC0gbGVmdCA6IHdpZHRoKSArIFwicHg7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKGJvdHRvbSAtIHRvcCkgKyBcInB4XCIpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3Rm9yTGluZShsaW5lLCBmcm9tQXJnLCB0b0FyZykge1xuICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmUpO1xuICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICB2YXIgc3RhcnQsIGVuZDtcbiAgICBmdW5jdGlvbiBjb29yZHMoY2gsIGJpYXMpIHtcbiAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCBcImRpdlwiLCBsaW5lT2JqLCBiaWFzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyYXBYKHBvcywgZGlyLCBzaWRlKSB7XG4gICAgICB2YXIgZXh0ZW50ID0gd3JhcHBlZExpbmVFeHRlbnRDaGFyKGNtLCBsaW5lT2JqLCBudWxsLCBwb3MpO1xuICAgICAgdmFyIHByb3AgPSAoZGlyID09IFwibHRyXCIpID09IChzaWRlID09IFwiYWZ0ZXJcIikgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgICAgIHZhciBjaCA9IHNpZGUgPT0gXCJhZnRlclwiID8gZXh0ZW50LmJlZ2luIDogZXh0ZW50LmVuZCAtICgvXFxzLy50ZXN0KGxpbmVPYmoudGV4dC5jaGFyQXQoZXh0ZW50LmVuZCAtIDEpKSA/IDIgOiAxKTtcbiAgICAgIHJldHVybiBjb29yZHMoY2gsIHByb3ApW3Byb3BdXG4gICAgfVxuXG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZU9iaiwgZG9jLmRpcmVjdGlvbik7XG4gICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbiAoZnJvbSwgdG8sIGRpciwgaSkge1xuICAgICAgdmFyIGx0ciA9IGRpciA9PSBcImx0clwiO1xuICAgICAgdmFyIGZyb21Qb3MgPSBjb29yZHMoZnJvbSwgbHRyID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIpO1xuICAgICAgdmFyIHRvUG9zID0gY29vcmRzKHRvIC0gMSwgbHRyID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpO1xuXG4gICAgICB2YXIgb3BlblN0YXJ0ID0gZnJvbUFyZyA9PSBudWxsICYmIGZyb20gPT0gMCwgb3BlbkVuZCA9IHRvQXJnID09IG51bGwgJiYgdG8gPT0gbGluZUxlbjtcbiAgICAgIHZhciBmaXJzdCA9IGkgPT0gMCwgbGFzdCA9ICFvcmRlciB8fCBpID09IG9yZGVyLmxlbmd0aCAtIDE7XG4gICAgICBpZiAodG9Qb3MudG9wIC0gZnJvbVBvcy50b3AgPD0gMykgeyAvLyBTaW5nbGUgbGluZVxuICAgICAgICB2YXIgb3BlbkxlZnQgPSAoZG9jTFRSID8gb3BlblN0YXJ0IDogb3BlbkVuZCkgJiYgZmlyc3Q7XG4gICAgICAgIHZhciBvcGVuUmlnaHQgPSAoZG9jTFRSID8gb3BlbkVuZCA6IG9wZW5TdGFydCkgJiYgbGFzdDtcbiAgICAgICAgdmFyIGxlZnQgPSBvcGVuTGVmdCA/IGxlZnRTaWRlIDogKGx0ciA/IGZyb21Qb3MgOiB0b1BvcykubGVmdDtcbiAgICAgICAgdmFyIHJpZ2h0ID0gb3BlblJpZ2h0ID8gcmlnaHRTaWRlIDogKGx0ciA/IHRvUG9zIDogZnJvbVBvcykucmlnaHQ7XG4gICAgICAgIGFkZChsZWZ0LCBmcm9tUG9zLnRvcCwgcmlnaHQgLSBsZWZ0LCBmcm9tUG9zLmJvdHRvbSk7XG4gICAgICB9IGVsc2UgeyAvLyBNdWx0aXBsZSBsaW5lc1xuICAgICAgICB2YXIgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdExlZnQsIGJvdFJpZ2h0O1xuICAgICAgICBpZiAobHRyKSB7XG4gICAgICAgICAgdG9wTGVmdCA9IGRvY0xUUiAmJiBvcGVuU3RhcnQgJiYgZmlyc3QgPyBsZWZ0U2lkZSA6IGZyb21Qb3MubGVmdDtcbiAgICAgICAgICB0b3BSaWdodCA9IGRvY0xUUiA/IHJpZ2h0U2lkZSA6IHdyYXBYKGZyb20sIGRpciwgXCJiZWZvcmVcIik7XG4gICAgICAgICAgYm90TGVmdCA9IGRvY0xUUiA/IGxlZnRTaWRlIDogd3JhcFgodG8sIGRpciwgXCJhZnRlclwiKTtcbiAgICAgICAgICBib3RSaWdodCA9IGRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyByaWdodFNpZGUgOiB0b1Bvcy5yaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3BMZWZ0ID0gIWRvY0xUUiA/IGxlZnRTaWRlIDogd3JhcFgoZnJvbSwgZGlyLCBcImJlZm9yZVwiKTtcbiAgICAgICAgICB0b3BSaWdodCA9ICFkb2NMVFIgJiYgb3BlblN0YXJ0ICYmIGZpcnN0ID8gcmlnaHRTaWRlIDogZnJvbVBvcy5yaWdodDtcbiAgICAgICAgICBib3RMZWZ0ID0gIWRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyBsZWZ0U2lkZSA6IHRvUG9zLmxlZnQ7XG4gICAgICAgICAgYm90UmlnaHQgPSAhZG9jTFRSID8gcmlnaHRTaWRlIDogd3JhcFgodG8sIGRpciwgXCJhZnRlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQodG9wTGVmdCwgZnJvbVBvcy50b3AsIHRvcFJpZ2h0IC0gdG9wTGVmdCwgZnJvbVBvcy5ib3R0b20pO1xuICAgICAgICBpZiAoZnJvbVBvcy5ib3R0b20gPCB0b1Bvcy50b3ApIHsgYWRkKGxlZnRTaWRlLCBmcm9tUG9zLmJvdHRvbSwgbnVsbCwgdG9Qb3MudG9wKTsgfVxuICAgICAgICBhZGQoYm90TGVmdCwgdG9Qb3MudG9wLCBib3RSaWdodCAtIGJvdExlZnQsIHRvUG9zLmJvdHRvbSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhcnQgfHwgY21wQ29vcmRzKGZyb21Qb3MsIHN0YXJ0KSA8IDApIHsgc3RhcnQgPSBmcm9tUG9zOyB9XG4gICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gdG9Qb3M7IH1cbiAgICAgIGlmICghZW5kIHx8IGNtcENvb3Jkcyhmcm9tUG9zLCBlbmQpIDwgMCkgeyBlbmQgPSBmcm9tUG9zOyB9XG4gICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBlbmQpIDwgMCkgeyBlbmQgPSB0b1BvczsgfVxuICAgIH0pO1xuICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH1cbiAgfVxuXG4gIHZhciBzRnJvbSA9IHJhbmdlJCQxLmZyb20oKSwgc1RvID0gcmFuZ2UkJDEudG8oKTtcbiAgaWYgKHNGcm9tLmxpbmUgPT0gc1RvLmxpbmUpIHtcbiAgICBkcmF3Rm9yTGluZShzRnJvbS5saW5lLCBzRnJvbS5jaCwgc1RvLmNoKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZnJvbUxpbmUgPSBnZXRMaW5lKGRvYywgc0Zyb20ubGluZSksIHRvTGluZSA9IGdldExpbmUoZG9jLCBzVG8ubGluZSk7XG4gICAgdmFyIHNpbmdsZVZMaW5lID0gdmlzdWFsTGluZShmcm9tTGluZSkgPT0gdmlzdWFsTGluZSh0b0xpbmUpO1xuICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kO1xuICAgIHZhciByaWdodFN0YXJ0ID0gZHJhd0ZvckxpbmUoc1RvLmxpbmUsIHNpbmdsZVZMaW5lID8gMCA6IG51bGwsIHNUby5jaCkuc3RhcnQ7XG4gICAgaWYgKHNpbmdsZVZMaW5lKSB7XG4gICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHtcbiAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCBudWxsLCBsZWZ0RW5kLmJvdHRvbSk7XG4gICAgICAgIGFkZChsZWZ0U2lkZSwgcmlnaHRTdGFydC50b3AsIHJpZ2h0U3RhcnQubGVmdCwgcmlnaHRTdGFydC5ib3R0b20pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkKGxlZnRFbmQucmlnaHQsIGxlZnRFbmQudG9wLCByaWdodFN0YXJ0LmxlZnQgLSBsZWZ0RW5kLnJpZ2h0LCBsZWZ0RW5kLmJvdHRvbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsZWZ0RW5kLmJvdHRvbSA8IHJpZ2h0U3RhcnQudG9wKVxuICAgICAgeyBhZGQobGVmdFNpZGUsIGxlZnRFbmQuYm90dG9tLCBudWxsLCByaWdodFN0YXJ0LnRvcCk7IH1cbiAgfVxuXG4gIG91dHB1dC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG59XG5cbi8vIEN1cnNvci1ibGlua2luZ1xuZnVuY3Rpb24gcmVzdGFydEJsaW5rKGNtKSB7XG4gIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyByZXR1cm4gfVxuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIGNsZWFySW50ZXJ2YWwoZGlzcGxheS5ibGlua2VyKTtcbiAgdmFyIG9uID0gdHJ1ZTtcbiAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XG4gIGlmIChjbS5vcHRpb25zLmN1cnNvckJsaW5rUmF0ZSA+IDApXG4gICAgeyBkaXNwbGF5LmJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/IFwiXCIgOiBcImhpZGRlblwiOyB9LFxuICAgICAgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOyB9XG4gIGVsc2UgaWYgKGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlIDwgMClcbiAgICB7IGRpc3BsYXkuY3Vyc29yRGl2LnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiOyB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUZvY3VzKGNtKSB7XG4gIGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IG9uRm9jdXMoY20pOyB9XG59XG5cbmZ1bmN0aW9uIGRlbGF5Qmx1ckV2ZW50KGNtKSB7XG4gIGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50ID0gdHJ1ZTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkge1xuICAgIGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50ID0gZmFsc2U7XG4gICAgb25CbHVyKGNtKTtcbiAgfSB9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBvbkZvY3VzKGNtLCBlKSB7XG4gIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOyB9XG5cbiAgaWYgKGNtLm9wdGlvbnMucmVhZE9ubHkgPT0gXCJub2N1cnNvclwiKSB7IHJldHVybiB9XG4gIGlmICghY20uc3RhdGUuZm9jdXNlZCkge1xuICAgIHNpZ25hbChjbSwgXCJmb2N1c1wiLCBjbSwgZSk7XG4gICAgY20uc3RhdGUuZm9jdXNlZCA9IHRydWU7XG4gICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3ItZm9jdXNlZFwiKTtcbiAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dFxuICAgIC8vIG1lbnUgaXMgY2xvc2VkIChzaW5jZSB0aGUgaW5wdXQgcmVzZXQgd291bGQga2lsbCB0aGVcbiAgICAvLyBzZWxlY3QtYWxsIGRldGVjdGlvbiBoYWNrKVxuICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICBpZiAod2Via2l0KSB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gY20uZGlzcGxheS5pbnB1dC5yZXNldCh0cnVlKTsgfSwgMjApOyB9IC8vIElzc3VlICMxNzMwXG4gICAgfVxuICAgIGNtLmRpc3BsYXkuaW5wdXQucmVjZWl2ZWRGb2N1cygpO1xuICB9XG4gIHJlc3RhcnRCbGluayhjbSk7XG59XG5mdW5jdGlvbiBvbkJsdXIoY20sIGUpIHtcbiAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7IHJldHVybiB9XG5cbiAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICBzaWduYWwoY20sIFwiYmx1clwiLCBjbSwgZSk7XG4gICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3ItZm9jdXNlZFwiKTtcbiAgfVxuICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlOyB9IH0sIDE1MCk7XG59XG5cbi8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpclxuLy8gc3RvcmVkIGhlaWdodHMgdG8gbWF0Y2guXG5mdW5jdGlvbiB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSkge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIHZhciBwcmV2Qm90dG9tID0gZGlzcGxheS5saW5lRGl2Lm9mZnNldFRvcDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCBoZWlnaHQgPSAodm9pZCAwKTtcbiAgICBpZiAoY3VyLmhpZGRlbikgeyBjb250aW51ZSB9XG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA4KSB7XG4gICAgICB2YXIgYm90ID0gY3VyLm5vZGUub2Zmc2V0VG9wICsgY3VyLm5vZGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTtcbiAgICAgIHByZXZCb3R0b20gPSBib3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGhlaWdodCA9IGJveC5ib3R0b20gLSBib3gudG9wO1xuICAgIH1cbiAgICB2YXIgZGlmZiA9IGN1ci5saW5lLmhlaWdodCAtIGhlaWdodDtcbiAgICBpZiAoaGVpZ2h0IDwgMikgeyBoZWlnaHQgPSB0ZXh0SGVpZ2h0KGRpc3BsYXkpOyB9XG4gICAgaWYgKGRpZmYgPiAuMDA1IHx8IGRpZmYgPCAtLjAwNSkge1xuICAgICAgdXBkYXRlTGluZUhlaWdodChjdXIubGluZSwgaGVpZ2h0KTtcbiAgICAgIHVwZGF0ZVdpZGdldEhlaWdodChjdXIubGluZSk7XG4gICAgICBpZiAoY3VyLnJlc3QpIHsgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKylcbiAgICAgICAgeyB1cGRhdGVXaWRnZXRIZWlnaHQoY3VyLnJlc3Rbal0pOyB9IH1cbiAgICB9XG4gIH1cbn1cblxuLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuLy8gZ2l2ZW4gbGluZS5cbmZ1bmN0aW9uIHVwZGF0ZVdpZGdldEhlaWdodChsaW5lKSB7XG4gIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgdyA9IGxpbmUud2lkZ2V0c1tpXSwgcGFyZW50ID0gdy5ub2RlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkgeyB3LmhlaWdodCA9IHBhcmVudC5vZmZzZXRIZWlnaHQ7IH1cbiAgfSB9XG59XG5cbi8vIENvbXB1dGUgdGhlIGxpbmVzIHRoYXQgYXJlIHZpc2libGUgaW4gYSBnaXZlbiB2aWV3cG9ydCAoZGVmYXVsdHNcbi8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3cG9ydCBtYXkgY29udGFpbiB0b3AsXG4vLyBoZWlnaHQsIGFuZCBlbnN1cmUgKHNlZSBvcC5zY3JvbGxUb1BvcykgcHJvcGVydGllcy5cbmZ1bmN0aW9uIHZpc2libGVMaW5lcyhkaXNwbGF5LCBkb2MsIHZpZXdwb3J0KSB7XG4gIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgdG9wID0gTWF0aC5mbG9vcih0b3AgLSBwYWRkaW5nVG9wKGRpc3BsYXkpKTtcbiAgdmFyIGJvdHRvbSA9IHZpZXdwb3J0ICYmIHZpZXdwb3J0LmJvdHRvbSAhPSBudWxsID8gdmlld3BvcnQuYm90dG9tIDogdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDtcblxuICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTtcbiAgLy8gRW5zdXJlIGlzIGEge2Zyb206IHtsaW5lLCBjaH0sIHRvOiB7bGluZSwgY2h9fSBvYmplY3QsIGFuZFxuICAvLyBmb3JjZXMgdGhvc2UgbGluZXMgaW50byB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKS5cbiAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkge1xuICAgIHZhciBlbnN1cmVGcm9tID0gdmlld3BvcnQuZW5zdXJlLmZyb20ubGluZSwgZW5zdXJlVG8gPSB2aWV3cG9ydC5lbnN1cmUudG8ubGluZTtcbiAgICBpZiAoZW5zdXJlRnJvbSA8IGZyb20pIHtcbiAgICAgIGZyb20gPSBlbnN1cmVGcm9tO1xuICAgICAgdG8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRBdExpbmUoZ2V0TGluZShkb2MsIGVuc3VyZUZyb20pKSArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgIH0gZWxzZSBpZiAoTWF0aC5taW4oZW5zdXJlVG8sIGRvYy5sYXN0TGluZSgpKSA+PSB0bykge1xuICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgICAgdG8gPSBlbnN1cmVUbztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtmcm9tOiBmcm9tLCB0bzogTWF0aC5tYXgodG8sIGZyb20gKyAxKX1cbn1cblxuLy8gUmUtYWxpZ24gbGluZSBudW1iZXJzIGFuZCBndXR0ZXIgbWFya3MgdG8gY29tcGVuc2F0ZSBmb3Jcbi8vIGhvcml6b250YWwgc2Nyb2xsaW5nLlxuZnVuY3Rpb24gYWxpZ25Ib3Jpem9udGFsbHkoY20pIHtcbiAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB2aWV3ID0gZGlzcGxheS52aWV3O1xuICBpZiAoIWRpc3BsYXkuYWxpZ25XaWRnZXRzICYmICghZGlzcGxheS5ndXR0ZXJzLmZpcnN0Q2hpbGQgfHwgIWNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpKSB7IHJldHVybiB9XG4gIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgdmFyIGd1dHRlclcgPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGgsIGxlZnQgPSBjb21wICsgXCJweFwiO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHsgaWYgKCF2aWV3W2ldLmhpZGRlbikge1xuICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7XG4gICAgICBpZiAodmlld1tpXS5ndXR0ZXIpXG4gICAgICAgIHsgdmlld1tpXS5ndXR0ZXIuc3R5bGUubGVmdCA9IGxlZnQ7IH1cbiAgICAgIGlmICh2aWV3W2ldLmd1dHRlckJhY2tncm91bmQpXG4gICAgICAgIHsgdmlld1tpXS5ndXR0ZXJCYWNrZ3JvdW5kLnN0eWxlLmxlZnQgPSBsZWZ0OyB9XG4gICAgfVxuICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlO1xuICAgIGlmIChhbGlnbikgeyBmb3IgKHZhciBqID0gMDsgaiA8IGFsaWduLmxlbmd0aDsgaisrKVxuICAgICAgeyBhbGlnbltqXS5zdHlsZS5sZWZ0ID0gbGVmdDsgfSB9XG4gIH0gfVxuICBpZiAoY20ub3B0aW9ucy5maXhlZEd1dHRlcilcbiAgICB7IGRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gKGNvbXAgKyBndXR0ZXJXKSArIFwicHhcIjsgfVxufVxuXG4vLyBVc2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBsaW5lIG51bWJlciBndXR0ZXIgaXMgc3RpbGwgdGhlIHJpZ2h0XG4vLyBzaXplIGZvciB0aGUgY3VycmVudCBkb2N1bWVudCBzaXplLiBSZXR1cm5zIHRydWUgd2hlbiBhbiB1cGRhdGVcbi8vIGlzIG5lZWRlZC5cbmZ1bmN0aW9uIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSB7XG4gIGlmICghY20ub3B0aW9ucy5saW5lTnVtYmVycykgeyByZXR1cm4gZmFsc2UgfVxuICB2YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgaWYgKGxhc3QubGVuZ3RoICE9IGRpc3BsYXkubGluZU51bUNoYXJzKSB7XG4gICAgdmFyIHRlc3QgPSBkaXNwbGF5Lm1lYXN1cmUuYXBwZW5kQ2hpbGQoZWx0KFwiZGl2XCIsIFtlbHQoXCJkaXZcIiwgbGFzdCldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIikpO1xuICAgIHZhciBpbm5lclcgPSB0ZXN0LmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGgsIHBhZGRpbmcgPSB0ZXN0Lm9mZnNldFdpZHRoIC0gaW5uZXJXO1xuICAgIGRpc3BsYXkubGluZUd1dHRlci5zdHlsZS53aWR0aCA9IFwiXCI7XG4gICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxO1xuICAgIGRpc3BsYXkubGluZU51bVdpZHRoID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCArIHBhZGRpbmc7XG4gICAgZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoID8gbGFzdC5sZW5ndGggOiAtMTtcbiAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArIFwicHhcIjtcbiAgICB1cGRhdGVHdXR0ZXJTcGFjZShjbSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVdcblxuLy8gSWYgYW4gZWRpdG9yIHNpdHMgb24gdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHdpbmRvdywgcGFydGlhbGx5XG4vLyBzY3JvbGxlZCBvdXQgb2YgdmlldywgdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGN1cnNvciBpcyB2aXNpYmxlLlxuZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpIHtcbiAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBcInNjcm9sbEN1cnNvckludG9WaWV3XCIpKSB7IHJldHVybiB9XG5cbiAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBib3ggPSBkaXNwbGF5LnNpemVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBkb1Njcm9sbCA9IG51bGw7XG4gIGlmIChyZWN0LnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICBlbHNlIGlmIChyZWN0LmJvdHRvbSArIGJveC50b3AgPiAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKSB7IGRvU2Nyb2xsID0gZmFsc2U7IH1cbiAgaWYgKGRvU2Nyb2xsICE9IG51bGwgJiYgIXBoYW50b20pIHtcbiAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdChcImRpdlwiLCBcIlxcdTIwMGJcIiwgbnVsbCwgKFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiICsgKHJlY3QudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIgKyAocmVjdC5sZWZ0KSArIFwicHg7IHdpZHRoOiBcIiArIChNYXRoLm1heCgyLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSkgKyBcInB4O1wiKSk7XG4gICAgY20uZGlzcGxheS5saW5lU3BhY2UuYXBwZW5kQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gICAgc2Nyb2xsTm9kZS5zY3JvbGxJbnRvVmlldyhkb1Njcm9sbCk7XG4gICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gIH1cbn1cblxuLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0XG4vLyBpdCBhY3R1YWxseSBiZWNhbWUgdmlzaWJsZSAoYXMgbGluZSBoZWlnaHRzIGFyZSBhY2N1cmF0ZWx5XG4vLyBtZWFzdXJlZCwgdGhlIHBvc2l0aW9uIG9mIHNvbWV0aGluZyBtYXkgJ2RyaWZ0JyBkdXJpbmcgZHJhd2luZykuXG5mdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikge1xuICBpZiAobWFyZ2luID09IG51bGwpIHsgbWFyZ2luID0gMDsgfVxuICB2YXIgcmVjdDtcbiAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwb3MgPT0gZW5kKSB7XG4gICAgLy8gU2V0IHBvcyBhbmQgZW5kIHRvIHRoZSBjdXJzb3IgcG9zaXRpb25zIGFyb3VuZCB0aGUgY2hhcmFjdGVyIHBvcyBzdGlja3MgdG9cbiAgICAvLyBJZiBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIsIHRoYXQgaXMgYXJvdW5kIHBvcy5jaCAtIDEsIG90aGVyd2lzZSBhcm91bmQgcG9zLmNoXG4gICAgLy8gSWYgcG9zID09IFBvcyhfLCAwLCBcImJlZm9yZVwiKSwgcG9zIGFuZCBlbmQgYXJlIHVuY2hhbmdlZFxuICAgIHBvcyA9IHBvcy5jaCA/IFBvcyhwb3MubGluZSwgcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiID8gcG9zLmNoIC0gMSA6IHBvcy5jaCwgXCJhZnRlclwiKSA6IHBvcztcbiAgICBlbmQgPSBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBQb3MocG9zLmxpbmUsIHBvcy5jaCArIDEsIFwiYmVmb3JlXCIpIDogcG9zO1xuICB9XG4gIGZvciAodmFyIGxpbWl0ID0gMDsgbGltaXQgPCA1OyBsaW1pdCsrKSB7XG4gICAgdmFyIGNoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpO1xuICAgIHZhciBlbmRDb29yZHMgPSAhZW5kIHx8IGVuZCA9PSBwb3MgPyBjb29yZHMgOiBjdXJzb3JDb29yZHMoY20sIGVuZCk7XG4gICAgcmVjdCA9IHtsZWZ0OiBNYXRoLm1pbihjb29yZHMubGVmdCwgZW5kQ29vcmRzLmxlZnQpLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbixcbiAgICAgICAgICAgIHJpZ2h0OiBNYXRoLm1heChjb29yZHMubGVmdCwgZW5kQ29vcmRzLmxlZnQpLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChjb29yZHMuYm90dG9tLCBlbmRDb29yZHMuYm90dG9tKSArIG1hcmdpbn07XG4gICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCk7XG4gICAgdmFyIHN0YXJ0VG9wID0gY20uZG9jLnNjcm9sbFRvcCwgc3RhcnRMZWZ0ID0gY20uZG9jLnNjcm9sbExlZnQ7XG4gICAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTtcbiAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsVG9wIC0gc3RhcnRUb3ApID4gMSkgeyBjaGFuZ2VkID0gdHJ1ZTsgfVxuICAgIH1cbiAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgc2Nyb2xsUG9zLnNjcm9sbExlZnQpO1xuICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxMZWZ0IC0gc3RhcnRMZWZ0KSA+IDEpIHsgY2hhbmdlZCA9IHRydWU7IH1cbiAgICB9XG4gICAgaWYgKCFjaGFuZ2VkKSB7IGJyZWFrIH1cbiAgfVxuICByZXR1cm4gcmVjdFxufVxuXG4vLyBTY3JvbGwgYSBnaXZlbiBzZXQgb2YgY29vcmRpbmF0ZXMgaW50byB2aWV3IChpbW1lZGlhdGVseSkuXG5mdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgcmVjdCkge1xuICB2YXIgc2Nyb2xsUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCByZWN0KTtcbiAgaWYgKHNjcm9sbFBvcy5zY3JvbGxUb3AgIT0gbnVsbCkgeyB1cGRhdGVTY3JvbGxUb3AoY20sIHNjcm9sbFBvcy5zY3JvbGxUb3ApOyB9XG4gIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsgfVxufVxuXG4vLyBDYWxjdWxhdGUgYSBuZXcgc2Nyb2xsIHBvc2l0aW9uIG5lZWRlZCB0byBzY3JvbGwgdGhlIGdpdmVuXG4vLyByZWN0YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmRcbi8vIHNjcm9sbExlZnQgcHJvcGVydGllcy4gV2hlbiB0aGVzZSBhcmUgdW5kZWZpbmVkLCB0aGVcbi8vIHZlcnRpY2FsL2hvcml6b250YWwgcG9zaXRpb24gZG9lcyBub3QgbmVlZCB0byBiZSBhZGp1c3RlZC5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCkge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHNuYXBNYXJnaW4gPSB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpO1xuICBpZiAocmVjdC50b3AgPCAwKSB7IHJlY3QudG9wID0gMDsgfVxuICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgdmFyIHNjcmVlbiA9IGRpc3BsYXlIZWlnaHQoY20pLCByZXN1bHQgPSB7fTtcbiAgaWYgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgPiBzY3JlZW4pIHsgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIHNjcmVlbjsgfVxuICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpO1xuICB2YXIgYXRUb3AgPSByZWN0LnRvcCA8IHNuYXBNYXJnaW4sIGF0Qm90dG9tID0gcmVjdC5ib3R0b20gPiBkb2NCb3R0b20gLSBzbmFwTWFyZ2luO1xuICBpZiAocmVjdC50b3AgPCBzY3JlZW50b3ApIHtcbiAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogcmVjdC50b3A7XG4gIH0gZWxzZSBpZiAocmVjdC5ib3R0b20gPiBzY3JlZW50b3AgKyBzY3JlZW4pIHtcbiAgICB2YXIgbmV3VG9wID0gTWF0aC5taW4ocmVjdC50b3AsIChhdEJvdHRvbSA/IGRvY0JvdHRvbSA6IHJlY3QuYm90dG9tKSAtIHNjcmVlbik7XG4gICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHsgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsgfVxuICB9XG5cbiAgdmFyIHNjcmVlbmxlZnQgPSBjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxMZWZ0ICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxMZWZ0IDogZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0O1xuICB2YXIgc2NyZWVudyA9IGRpc3BsYXlXaWR0aChjbSkgLSAoY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCA6IDApO1xuICB2YXIgdG9vV2lkZSA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQgPiBzY3JlZW53O1xuICBpZiAodG9vV2lkZSkgeyByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgc2NyZWVudzsgfVxuICBpZiAocmVjdC5sZWZ0IDwgMTApXG4gICAgeyByZXN1bHQuc2Nyb2xsTGVmdCA9IDA7IH1cbiAgZWxzZSBpZiAocmVjdC5sZWZ0IDwgc2NyZWVubGVmdClcbiAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0IC0gKHRvb1dpZGUgPyAwIDogMTApKTsgfVxuICBlbHNlIGlmIChyZWN0LnJpZ2h0ID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKVxuICAgIHsgcmVzdWx0LnNjcm9sbExlZnQgPSByZWN0LnJpZ2h0ICsgKHRvb1dpZGUgPyAwIDogMTApIC0gc2NyZWVudzsgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIFN0b3JlIGEgcmVsYXRpdmUgYWRqdXN0bWVudCB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50XG4vLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS5cbmZ1bmN0aW9uIGFkZFRvU2Nyb2xsVG9wKGNtLCB0b3ApIHtcbiAgaWYgKHRvcCA9PSBudWxsKSB7IHJldHVybiB9XG4gIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gIGNtLmN1ck9wLnNjcm9sbFRvcCA9IChjbS5jdXJPcC5zY3JvbGxUb3AgPT0gbnVsbCA/IGNtLmRvYy5zY3JvbGxUb3AgOiBjbS5jdXJPcC5zY3JvbGxUb3ApICsgdG9wO1xufVxuXG4vLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzXG4vLyBzaG93bi5cbmZ1bmN0aW9uIGVuc3VyZUN1cnNvclZpc2libGUoY20pIHtcbiAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpO1xuICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHtmcm9tOiBjdXIsIHRvOiBjdXIsIG1hcmdpbjogY20ub3B0aW9ucy5jdXJzb3JTY3JvbGxNYXJnaW59O1xufVxuXG5mdW5jdGlvbiBzY3JvbGxUb0Nvb3JkcyhjbSwgeCwgeSkge1xuICBpZiAoeCAhPSBudWxsIHx8IHkgIT0gbnVsbCkgeyByZXNvbHZlU2Nyb2xsVG9Qb3MoY20pOyB9XG4gIGlmICh4ICE9IG51bGwpIHsgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IHg7IH1cbiAgaWYgKHkgIT0gbnVsbCkgeyBjbS5jdXJPcC5zY3JvbGxUb3AgPSB5OyB9XG59XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UoY20sIHJhbmdlJCQxKSB7XG4gIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gIGNtLmN1ck9wLnNjcm9sbFRvUG9zID0gcmFuZ2UkJDE7XG59XG5cbi8vIFdoZW4gYW4gb3BlcmF0aW9uIGhhcyBpdHMgc2Nyb2xsVG9Qb3MgcHJvcGVydHkgc2V0LCBhbmQgYW5vdGhlclxuLy8gc2Nyb2xsIGFjdGlvbiBpcyBhcHBsaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24sIHRoaXNcbi8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc29cbi8vIHRoYXQgdGhlIGVmZmVjdCBvZiBpbnRlcm1lZGlhdGUgc2Nyb2xsIGNvbW1hbmRzIGlzIG5vdCBpZ25vcmVkLlxuZnVuY3Rpb24gcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKSB7XG4gIHZhciByYW5nZSQkMSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zO1xuICBpZiAocmFuZ2UkJDEpIHtcbiAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IG51bGw7XG4gICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UkJDEuZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlJCQxLnRvKTtcbiAgICBzY3JvbGxUb0Nvb3Jkc1JhbmdlKGNtLCBmcm9tLCB0bywgcmFuZ2UkJDEubWFyZ2luKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxUb0Nvb3Jkc1JhbmdlKGNtLCBmcm9tLCB0bywgbWFyZ2luKSB7XG4gIHZhciBzUG9zID0gY2FsY3VsYXRlU2Nyb2xsUG9zKGNtLCB7XG4gICAgbGVmdDogTWF0aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSxcbiAgICB0b3A6IE1hdGgubWluKGZyb20udG9wLCB0by50b3ApIC0gbWFyZ2luLFxuICAgIHJpZ2h0OiBNYXRoLm1heChmcm9tLnJpZ2h0LCB0by5yaWdodCksXG4gICAgYm90dG9tOiBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIG1hcmdpblxuICB9KTtcbiAgc2Nyb2xsVG9Db29yZHMoY20sIHNQb3Muc2Nyb2xsTGVmdCwgc1Bvcy5zY3JvbGxUb3ApO1xufVxuXG4vLyBTeW5jIHRoZSBzY3JvbGxhYmxlIGFyZWEgYW5kIHNjcm9sbGJhcnMsIGVuc3VyZSB0aGUgdmlld3BvcnRcbi8vIGNvdmVycyB0aGUgdmlzaWJsZSBhcmVhLlxuZnVuY3Rpb24gdXBkYXRlU2Nyb2xsVG9wKGNtLCB2YWwpIHtcbiAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSB2YWwpIDwgMikgeyByZXR1cm4gfVxuICBpZiAoIWdlY2tvKSB7IHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHt0b3A6IHZhbH0pOyB9XG4gIHNldFNjcm9sbFRvcChjbSwgdmFsLCB0cnVlKTtcbiAgaWYgKGdlY2tvKSB7IHVwZGF0ZURpc3BsYXlTaW1wbGUoY20pOyB9XG4gIHN0YXJ0V29ya2VyKGNtLCAxMDApO1xufVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3AoY20sIHZhbCwgZm9yY2VTY3JvbGwpIHtcbiAgdmFsID0gTWF0aC5taW4oY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCwgdmFsKTtcbiAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID09IHZhbCAmJiAhZm9yY2VTY3JvbGwpIHsgcmV0dXJuIH1cbiAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDtcbiAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcCh2YWwpO1xuICBpZiAoY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgIT0gdmFsKSB7IGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdmFsOyB9XG59XG5cbi8vIFN5bmMgc2Nyb2xsZXIgYW5kIHNjcm9sbGJhciwgZW5zdXJlIHRoZSBndXR0ZXIgZWxlbWVudHMgYXJlXG4vLyBhbGlnbmVkLlxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyLCBmb3JjZVNjcm9sbCkge1xuICB2YWwgPSBNYXRoLm1pbih2YWwsIGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsV2lkdGggLSBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoKTtcbiAgaWYgKChpc1Njcm9sbGVyID8gdmFsID09IGNtLmRvYy5zY3JvbGxMZWZ0IDogTWF0aC5hYnMoY20uZG9jLnNjcm9sbExlZnQgLSB2YWwpIDwgMikgJiYgIWZvcmNlU2Nyb2xsKSB7IHJldHVybiB9XG4gIGNtLmRvYy5zY3JvbGxMZWZ0ID0gdmFsO1xuICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgIT0gdmFsKSB7IGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHZhbDsgfVxuICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdCh2YWwpO1xufVxuXG4vLyBTQ1JPTExCQVJTXG5cbi8vIFByZXBhcmUgRE9NIHJlYWRzIG5lZWRlZCB0byB1cGRhdGUgdGhlIHNjcm9sbGJhcnMuIERvbmUgaW4gb25lXG4vLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuXG5mdW5jdGlvbiBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSkge1xuICB2YXIgZCA9IGNtLmRpc3BsYXksIGd1dHRlclcgPSBkLmd1dHRlcnMub2Zmc2V0V2lkdGg7XG4gIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpO1xuICByZXR1cm4ge1xuICAgIGNsaWVudEhlaWdodDogZC5zY3JvbGxlci5jbGllbnRIZWlnaHQsXG4gICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICBzY3JvbGxXaWR0aDogZC5zY3JvbGxlci5zY3JvbGxXaWR0aCwgY2xpZW50V2lkdGg6IGQuc2Nyb2xsZXIuY2xpZW50V2lkdGgsXG4gICAgdmlld1dpZHRoOiBkLndyYXBwZXIuY2xpZW50V2lkdGgsXG4gICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLFxuICAgIGRvY0hlaWdodDogZG9jSCxcbiAgICBzY3JvbGxIZWlnaHQ6IGRvY0ggKyBzY3JvbGxHYXAoY20pICsgZC5iYXJIZWlnaHQsXG4gICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsXG4gICAgZ3V0dGVyV2lkdGg6IGd1dHRlcldcbiAgfVxufVxuXG52YXIgTmF0aXZlU2Nyb2xsYmFycyA9IGZ1bmN0aW9uKHBsYWNlLCBzY3JvbGwsIGNtKSB7XG4gIHRoaXMuY20gPSBjbTtcbiAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcIm1pbi13aWR0aDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIik7XG4gIHZhciBob3JpeiA9IHRoaXMuaG9yaXogPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcImhlaWdodDogMTAwJTsgbWluLWhlaWdodDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLWhzY3JvbGxiYXJcIik7XG4gIHZlcnQudGFiSW5kZXggPSBob3Jpei50YWJJbmRleCA9IC0xO1xuICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopO1xuXG4gIG9uKHZlcnQsIFwic2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodmVydC5jbGllbnRIZWlnaHQpIHsgc2Nyb2xsKHZlcnQuc2Nyb2xsVG9wLCBcInZlcnRpY2FsXCIpOyB9XG4gIH0pO1xuICBvbihob3JpeiwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChob3Jpei5jbGllbnRXaWR0aCkgeyBzY3JvbGwoaG9yaXouc2Nyb2xsTGVmdCwgXCJob3Jpem9udGFsXCIpOyB9XG4gIH0pO1xuXG4gIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IGZhbHNlO1xuICAvLyBOZWVkIHRvIHNldCBhIG1pbmltdW0gd2lkdGggdG8gc2VlIHRoZSBzY3JvbGxiYXIgb24gSUU3IChidXQgbXVzdCBub3Qgc2V0IGl0IG9uIElFOCkuXG4gIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyB0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiOyB9XG59O1xuXG5OYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVhc3VyZSkge1xuICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGggKyAxO1xuICB2YXIgbmVlZHNWID0gbWVhc3VyZS5zY3JvbGxIZWlnaHQgPiBtZWFzdXJlLmNsaWVudEhlaWdodCArIDE7XG4gIHZhciBzV2lkdGggPSBtZWFzdXJlLm5hdGl2ZUJhcldpZHRoO1xuXG4gIGlmIChuZWVkc1YpIHtcbiAgICB0aGlzLnZlcnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLnZlcnQuc3R5bGUuYm90dG9tID0gbmVlZHNIID8gc1dpZHRoICsgXCJweFwiIDogXCIwXCI7XG4gICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5lZWRzSCA/IHNXaWR0aCA6IDApO1xuICAgIC8vIEEgYnVnIGluIElFOCBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBuZWdhdGl2ZSwgc28gZ3VhcmQgaXQuXG4gICAgdGhpcy52ZXJ0LmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID1cbiAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyB0b3RhbEhlaWdodCkgKyBcInB4XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy52ZXJ0LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICB9XG5cbiAgaWYgKG5lZWRzSCkge1xuICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLmhvcml6LnN0eWxlLnJpZ2h0ID0gbmVlZHNWID8gc1dpZHRoICsgXCJweFwiIDogXCIwXCI7XG4gICAgdGhpcy5ob3Jpei5zdHlsZS5sZWZ0ID0gbWVhc3VyZS5iYXJMZWZ0ICsgXCJweFwiO1xuICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCk7XG4gICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID1cbiAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsV2lkdGggLSBtZWFzdXJlLmNsaWVudFdpZHRoICsgdG90YWxXaWR0aCkgKyBcInB4XCI7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5ob3Jpei5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICB0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSBcIjBcIjtcbiAgfVxuXG4gIGlmICghdGhpcy5jaGVja2VkWmVyb1dpZHRoICYmIG1lYXN1cmUuY2xpZW50SGVpZ2h0ID4gMCkge1xuICAgIGlmIChzV2lkdGggPT0gMCkgeyB0aGlzLnplcm9XaWR0aEhhY2soKTsgfVxuICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7XG4gIH1cblxuICByZXR1cm4ge3JpZ2h0OiBuZWVkc1YgPyBzV2lkdGggOiAwLCBib3R0b206IG5lZWRzSCA/IHNXaWR0aCA6IDB9XG59O1xuXG5OYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24gKHBvcykge1xuICBpZiAodGhpcy5ob3Jpei5zY3JvbGxMZWZ0ICE9IHBvcykgeyB0aGlzLmhvcml6LnNjcm9sbExlZnQgPSBwb3M7IH1cbiAgaWYgKHRoaXMuZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpOyB9XG59O1xuXG5OYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbiAocG9zKSB7XG4gIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zOyB9XG4gIGlmICh0aGlzLmRpc2FibGVWZXJ0KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMudmVydCwgdGhpcy5kaXNhYmxlVmVydCwgXCJ2ZXJ0XCIpOyB9XG59O1xuXG5OYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdyA9IG1hYyAmJiAhbWFjX2dlTW91bnRhaW5MaW9uID8gXCIxMnB4XCIgOiBcIjE4cHhcIjtcbiAgdGhpcy5ob3Jpei5zdHlsZS5oZWlnaHQgPSB0aGlzLnZlcnQuc3R5bGUud2lkdGggPSB3O1xuICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICB0aGlzLmRpc2FibGVIb3JpeiA9IG5ldyBEZWxheWVkO1xuICB0aGlzLmRpc2FibGVWZXJ0ID0gbmV3IERlbGF5ZWQ7XG59O1xuXG5OYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS5lbmFibGVaZXJvV2lkdGhCYXIgPSBmdW5jdGlvbiAoYmFyLCBkZWxheSwgdHlwZSkge1xuICBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwiYXV0b1wiO1xuICBmdW5jdGlvbiBtYXliZURpc2FibGUoKSB7XG4gICAgLy8gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgc2Nyb2xsYmFyIGlzIHN0aWxsIHZpc2libGUsIHdlXG4gICAgLy8gY2hlY2sgd2hldGhlciB0aGUgZWxlbWVudCB1bmRlciB0aGUgcGl4ZWwgaW4gdGhlIGJvdHRvbVxuICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFyIGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveFxuICAgIC8vIGl0c2VsZiAod2hlbiB0aGUgYmFyIGlzIHN0aWxsIHZpc2libGUpIG9yIGl0cyBmaWxsZXIgY2hpbGRcbiAgICAvLyAod2hlbiB0aGUgYmFyIGlzIGhpZGRlbikuIElmIGl0IGlzIHN0aWxsIHZpc2libGUsIHdlIGtlZXBcbiAgICAvLyBpdCBlbmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy5cbiAgICB2YXIgYm94ID0gYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBlbHQkJDEgPSB0eXBlID09IFwidmVydFwiID8gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChib3gucmlnaHQgLSAxLCAoYm94LnRvcCArIGJveC5ib3R0b20pIC8gMilcbiAgICAgICAgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChib3gucmlnaHQgKyBib3gubGVmdCkgLyAyLCBib3guYm90dG9tIC0gMSk7XG4gICAgaWYgKGVsdCQkMSAhPSBiYXIpIHsgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjsgfVxuICAgIGVsc2UgeyBkZWxheS5zZXQoMTAwMCwgbWF5YmVEaXNhYmxlKTsgfVxuICB9XG4gIGRlbGF5LnNldCgxMDAwLCBtYXliZURpc2FibGUpO1xufTtcblxuTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLmhvcml6LnBhcmVudE5vZGU7XG4gIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLmhvcml6KTtcbiAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7XG59O1xuXG52YXIgTnVsbFNjcm9sbGJhcnMgPSBmdW5jdGlvbiAoKSB7fTtcblxuTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfSB9O1xuTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbiAoKSB7fTtcbk51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbiAoKSB7fTtcbk51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHt9O1xuXG5mdW5jdGlvbiB1cGRhdGVTY3JvbGxiYXJzKGNtLCBtZWFzdXJlKSB7XG4gIGlmICghbWVhc3VyZSkgeyBtZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pOyB9XG4gIHZhciBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aCwgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDtcbiAgdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0ICYmIHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCB8fCBzdGFydEhlaWdodCAhPSBjbS5kaXNwbGF5LmJhckhlaWdodDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOyB9XG4gICAgdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlRm9yU2Nyb2xsYmFycyhjbSkpO1xuICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0O1xuICB9XG59XG5cbi8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlXG4vLyBjb250ZW50LlxuZnVuY3Rpb24gdXBkYXRlU2Nyb2xsYmFyc0lubmVyKGNtLCBtZWFzdXJlKSB7XG4gIHZhciBkID0gY20uZGlzcGxheTtcbiAgdmFyIHNpemVzID0gZC5zY3JvbGxiYXJzLnVwZGF0ZShtZWFzdXJlKTtcblxuICBkLnNpemVyLnN0eWxlLnBhZGRpbmdSaWdodCA9IChkLmJhcldpZHRoID0gc2l6ZXMucmlnaHQpICsgXCJweFwiO1xuICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgXCJweFwiO1xuICBkLmhlaWdodEZvcmNlci5zdHlsZS5ib3JkZXJCb3R0b20gPSBzaXplcy5ib3R0b20gKyBcInB4IHNvbGlkIHRyYW5zcGFyZW50XCI7XG5cbiAgaWYgKHNpemVzLnJpZ2h0ICYmIHNpemVzLmJvdHRvbSkge1xuICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgZC5zY3JvbGxiYXJGaWxsZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZXMuYm90dG9tICsgXCJweFwiO1xuICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLndpZHRoID0gc2l6ZXMucmlnaHQgKyBcInB4XCI7XG4gIH0gZWxzZSB7IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gIGlmIChzaXplcy5ib3R0b20gJiYgY20ub3B0aW9ucy5jb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhciAmJiBjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7XG4gICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgZC5ndXR0ZXJGaWxsZXIuc3R5bGUud2lkdGggPSBtZWFzdXJlLmd1dHRlcldpZHRoICsgXCJweFwiO1xuICB9IGVsc2UgeyBkLmd1dHRlckZpbGxlci5zdHlsZS5kaXNwbGF5ID0gXCJcIjsgfVxufVxuXG52YXIgc2Nyb2xsYmFyTW9kZWwgPSB7XCJuYXRpdmVcIjogTmF0aXZlU2Nyb2xsYmFycywgXCJudWxsXCI6IE51bGxTY3JvbGxiYXJzfTtcblxuZnVuY3Rpb24gaW5pdFNjcm9sbGJhcnMoY20pIHtcbiAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykge1xuICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5jbGVhcigpO1xuICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpXG4gICAgICB7IHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOyB9XG4gIH1cblxuICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMgPSBuZXcgc2Nyb2xsYmFyTW9kZWxbY20ub3B0aW9ucy5zY3JvbGxiYXJTdHlsZV0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBjbS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTtcbiAgICAvLyBQcmV2ZW50IGNsaWNrcyBpbiB0aGUgc2Nyb2xsYmFycyBmcm9tIGtpbGxpbmcgZm9jdXNcbiAgICBvbihub2RlLCBcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH1cbiAgICB9KTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIsIFwidHJ1ZVwiKTtcbiAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykge1xuICAgIGlmIChheGlzID09IFwiaG9yaXpvbnRhbFwiKSB7IHNldFNjcm9sbExlZnQoY20sIHBvcyk7IH1cbiAgICBlbHNlIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBwb3MpOyB9XG4gIH0sIGNtKTtcbiAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcylcbiAgICB7IGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKTsgfVxufVxuXG4vLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgYSBzZXJpZXMgb2YgY2hhbmdlcyB0byB0aGUgZWRpdG9yXG4vLyBzdGF0ZSBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaCBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlXG4vLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZFxuLy8gZXJyb3ItcHJvbmUpLiBJbnN0ZWFkLCBkaXNwbGF5IHVwZGF0ZXMgYXJlIGJhdGNoZWQgYW5kIHRoZW4gYWxsXG4vLyBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS5cblxudmFyIG5leHRPcElkID0gMDtcbi8vIFN0YXJ0IGEgbmV3IG9wZXJhdGlvbi5cbmZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKGNtKSB7XG4gIGNtLmN1ck9wID0ge1xuICAgIGNtOiBjbSxcbiAgICB2aWV3Q2hhbmdlZDogZmFsc2UsICAgICAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IGxpbmVzIG1pZ2h0IG5lZWQgdG8gYmUgcmVkcmF3blxuICAgIHN0YXJ0SGVpZ2h0OiBjbS5kb2MuaGVpZ2h0LCAvLyBVc2VkIHRvIGRldGVjdCBuZWVkIHRvIHVwZGF0ZSBzY3JvbGxiYXJcbiAgICBmb3JjZVVwZGF0ZTogZmFsc2UsICAgICAgLy8gVXNlZCB0byBmb3JjZSBhIHJlZHJhd1xuICAgIHVwZGF0ZUlucHV0OiBudWxsLCAgICAgICAvLyBXaGV0aGVyIHRvIHJlc2V0IHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVzZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0aW5nKVxuICAgIGNoYW5nZU9ianM6IG51bGwsICAgICAgICAvLyBBY2N1bXVsYXRlZCBjaGFuZ2VzLCBmb3IgZmlyaW5nIGNoYW5nZSBldmVudHNcbiAgICBjdXJzb3JBY3Rpdml0eUhhbmRsZXJzOiBudWxsLCAvLyBTZXQgb2YgaGFuZGxlcnMgdG8gZmlyZSBjdXJzb3JBY3Rpdml0eSBvblxuICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5XG4gICAgc2VsZWN0aW9uQ2hhbmdlZDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBuZWVkcyB0byBiZSByZWRyYXduXG4gICAgdXBkYXRlTWF4TGluZTogZmFsc2UsICAgIC8vIFNldCB3aGVuIHRoZSB3aWRlc3QgbGluZSBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGFuZXdcbiAgICBzY3JvbGxMZWZ0OiBudWxsLCBzY3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNoZWQgdG8gRE9NIHlldFxuICAgIHNjcm9sbFRvUG9zOiBudWxsLCAgICAgICAvLyBVc2VkIHRvIHNjcm9sbCB0byBhIHNwZWNpZmljIHBvc2l0aW9uXG4gICAgZm9jdXM6IGZhbHNlLFxuICAgIGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSURcbiAgfTtcbiAgcHVzaE9wZXJhdGlvbihjbS5jdXJPcCk7XG59XG5cbi8vIEZpbmlzaCBhbiBvcGVyYXRpb24sIHVwZGF0aW5nIHRoZSBkaXNwbGF5IGFuZCBzaWduYWxsaW5nIGRlbGF5ZWQgZXZlbnRzXG5mdW5jdGlvbiBlbmRPcGVyYXRpb24oY20pIHtcbiAgdmFyIG9wID0gY20uY3VyT3A7XG4gIGZpbmlzaE9wZXJhdGlvbihvcCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cC5vcHMubGVuZ3RoOyBpKyspXG4gICAgICB7IGdyb3VwLm9wc1tpXS5jbS5jdXJPcCA9IG51bGw7IH1cbiAgICBlbmRPcGVyYXRpb25zKGdyb3VwKTtcbiAgfSk7XG59XG5cbi8vIFRoZSBET00gdXBkYXRlcyBkb25lIHdoZW4gYW4gb3BlcmF0aW9uIGZpbmlzaGVzIGFyZSBiYXRjaGVkIHNvXG4vLyB0aGF0IHRoZSBtaW5pbXVtIG51bWJlciBvZiByZWxheW91dHMgYXJlIHJlcXVpcmVkLlxuZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkge1xuICB2YXIgb3BzID0gZ3JvdXAub3BzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykgLy8gUmVhZCBET01cbiAgICB7IGVuZE9wZXJhdGlvbl9SMShvcHNbaV0pOyB9XG4gIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IG9wcy5sZW5ndGg7IGkkMSsrKSAvLyBXcml0ZSBET00gKG1heWJlKVxuICAgIHsgZW5kT3BlcmF0aW9uX1cxKG9wc1tpJDFdKTsgfVxuICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBvcHMubGVuZ3RoOyBpJDIrKykgLy8gUmVhZCBET01cbiAgICB7IGVuZE9wZXJhdGlvbl9SMihvcHNbaSQyXSk7IH1cbiAgZm9yICh2YXIgaSQzID0gMDsgaSQzIDwgb3BzLmxlbmd0aDsgaSQzKyspIC8vIFdyaXRlIERPTSAobWF5YmUpXG4gICAgeyBlbmRPcGVyYXRpb25fVzIob3BzW2kkM10pOyB9XG4gIGZvciAodmFyIGkkNCA9IDA7IGkkNCA8IG9wcy5sZW5ndGg7IGkkNCsrKSAvLyBSZWFkIERPTVxuICAgIHsgZW5kT3BlcmF0aW9uX2ZpbmlzaChvcHNbaSQ0XSk7IH1cbn1cblxuZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1IxKG9wKSB7XG4gIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSk7XG4gIGlmIChvcC51cGRhdGVNYXhMaW5lKSB7IGZpbmRNYXhMaW5lKGNtKTsgfVxuXG4gIG9wLm11c3RVcGRhdGUgPSBvcC52aWV3Q2hhbmdlZCB8fCBvcC5mb3JjZVVwZGF0ZSB8fCBvcC5zY3JvbGxUb3AgIT0gbnVsbCB8fFxuICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIG9wLnNjcm9sbFRvUG9zLnRvLmxpbmUgPj0gZGlzcGxheS52aWV3VG8pIHx8XG4gICAgZGlzcGxheS5tYXhMaW5lQ2hhbmdlZCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZztcbiAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJlxuICAgIG5ldyBEaXNwbGF5VXBkYXRlKGNtLCBvcC5tdXN0VXBkYXRlICYmIHt0b3A6IG9wLnNjcm9sbFRvcCwgZW5zdXJlOiBvcC5zY3JvbGxUb1Bvc30sIG9wLmZvcmNlVXBkYXRlKTtcbn1cblxuZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cxKG9wKSB7XG4gIG9wLnVwZGF0ZWREaXNwbGF5ID0gb3AubXVzdFVwZGF0ZSAmJiB1cGRhdGVEaXNwbGF5SWZOZWVkZWQob3AuY20sIG9wLnVwZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMihvcCkge1xuICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIGlmIChvcC51cGRhdGVkRGlzcGxheSkgeyB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7IH1cblxuICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuXG4gIC8vIElmIHRoZSBtYXggbGluZSBjaGFuZ2VkIHNpbmNlIGl0IHdhcyBsYXN0IG1lYXN1cmVkLCBtZWFzdXJlIGl0LFxuICAvLyBhbmQgZW5zdXJlIHRoZSBkb2N1bWVudCdzIHdpZHRoIG1hdGNoZXMgaXQuXG4gIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nXG4gIGlmIChkaXNwbGF5Lm1heExpbmVDaGFuZ2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgIG9wLmFkanVzdFdpZHRoVG8gPSBtZWFzdXJlQ2hhcihjbSwgZGlzcGxheS5tYXhMaW5lLCBkaXNwbGF5Lm1heExpbmUudGV4dC5sZW5ndGgpLmxlZnQgKyAzO1xuICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87XG4gICAgb3AuYmFyTWVhc3VyZS5zY3JvbGxXaWR0aCA9XG4gICAgICBNYXRoLm1heChkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvICsgc2Nyb2xsR2FwKGNtKSArIGNtLmRpc3BsYXkuYmFyV2lkdGgpO1xuICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7XG4gIH1cblxuICBpZiAob3AudXBkYXRlZERpc3BsYXkgfHwgb3Auc2VsZWN0aW9uQ2hhbmdlZClcbiAgICB7IG9wLnByZXBhcmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7IH1cbn1cblxuZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cyKG9wKSB7XG4gIHZhciBjbSA9IG9wLmNtO1xuXG4gIGlmIChvcC5hZGp1c3RXaWR0aFRvICE9IG51bGwpIHtcbiAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gb3AuYWRqdXN0V2lkdGhUbyArIFwicHhcIjtcbiAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KVxuICAgICAgeyBzZXRTY3JvbGxMZWZ0KGNtLCBNYXRoLm1pbihjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQsIG9wLm1heFNjcm9sbExlZnQpLCB0cnVlKTsgfVxuICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciB0YWtlRm9jdXMgPSBvcC5mb2N1cyAmJiBvcC5mb2N1cyA9PSBhY3RpdmVFbHQoKTtcbiAgaWYgKG9wLnByZXBhcmVkU2VsZWN0aW9uKVxuICAgIHsgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uLCB0YWtlRm9jdXMpOyB9XG4gIGlmIChvcC51cGRhdGVkRGlzcGxheSB8fCBvcC5zdGFydEhlaWdodCAhPSBjbS5kb2MuaGVpZ2h0KVxuICAgIHsgdXBkYXRlU2Nyb2xsYmFycyhjbSwgb3AuYmFyTWVhc3VyZSk7IH1cbiAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KVxuICAgIHsgc2V0RG9jdW1lbnRIZWlnaHQoY20sIG9wLmJhck1lYXN1cmUpOyB9XG5cbiAgaWYgKG9wLnNlbGVjdGlvbkNoYW5nZWQpIHsgcmVzdGFydEJsaW5rKGNtKTsgfVxuXG4gIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KVxuICAgIHsgY20uZGlzcGxheS5pbnB1dC5yZXNldChvcC50eXBpbmcpOyB9XG4gIGlmICh0YWtlRm9jdXMpIHsgZW5zdXJlRm9jdXMob3AuY20pOyB9XG59XG5cbmZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9maW5pc2gob3ApIHtcbiAgdmFyIGNtID0gb3AuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7XG5cbiAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpOyB9XG5cbiAgLy8gQWJvcnQgbW91c2Ugd2hlZWwgZGVsdGEgbWVhc3VyZW1lbnQsIHdoZW4gc2Nyb2xsaW5nIGV4cGxpY2l0bHlcbiAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggIT0gbnVsbCAmJiAob3Auc2Nyb2xsVG9wICE9IG51bGwgfHwgb3Auc2Nyb2xsTGVmdCAhPSBudWxsIHx8IG9wLnNjcm9sbFRvUG9zKSlcbiAgICB7IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsgfVxuXG4gIC8vIFByb3BhZ2F0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIHRoZSBhY3R1YWwgRE9NIHNjcm9sbGVyXG4gIGlmIChvcC5zY3JvbGxUb3AgIT0gbnVsbCkgeyBzZXRTY3JvbGxUb3AoY20sIG9wLnNjcm9sbFRvcCwgb3AuZm9yY2VTY3JvbGwpOyB9XG5cbiAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRTY3JvbGxMZWZ0KGNtLCBvcC5zY3JvbGxMZWZ0LCB0cnVlLCB0cnVlKTsgfVxuICAvLyBJZiB3ZSBuZWVkIHRvIHNjcm9sbCBhIHNwZWNpZmljIHBvc2l0aW9uIGludG8gdmlldywgZG8gc28uXG4gIGlmIChvcC5zY3JvbGxUb1Bvcykge1xuICAgIHZhciByZWN0ID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy50byksIG9wLnNjcm9sbFRvUG9zLm1hcmdpbik7XG4gICAgbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpO1xuICB9XG5cbiAgLy8gRmlyZSBldmVudHMgZm9yIG1hcmtlcnMgdGhhdCBhcmUgaGlkZGVuL3VuaWRkZW4gYnkgZWRpdGluZyBvclxuICAvLyB1bmRvaW5nXG4gIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7XG4gIGlmIChoaWRkZW4pIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW4ubGVuZ3RoOyArK2kpXG4gICAgeyBpZiAoIWhpZGRlbltpXS5saW5lcy5sZW5ndGgpIHsgc2lnbmFsKGhpZGRlbltpXSwgXCJoaWRlXCIpOyB9IH0gfVxuICBpZiAodW5oaWRkZW4pIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kkMSlcbiAgICB7IGlmICh1bmhpZGRlbltpJDFdLmxpbmVzLmxlbmd0aCkgeyBzaWduYWwodW5oaWRkZW5baSQxXSwgXCJ1bmhpZGVcIik7IH0gfSB9XG5cbiAgaWYgKGRpc3BsYXkud3JhcHBlci5vZmZzZXRIZWlnaHQpXG4gICAgeyBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7IH1cblxuICAvLyBGaXJlIGNoYW5nZSBldmVudHMsIGFuZCBkZWxheWVkIGV2ZW50IGhhbmRsZXJzXG4gIGlmIChvcC5jaGFuZ2VPYmpzKVxuICAgIHsgc2lnbmFsKGNtLCBcImNoYW5nZXNcIiwgY20sIG9wLmNoYW5nZU9ianMpOyB9XG4gIGlmIChvcC51cGRhdGUpXG4gICAgeyBvcC51cGRhdGUuZmluaXNoKCk7IH1cbn1cblxuLy8gUnVuIHRoZSBnaXZlbiBmdW5jdGlvbiBpbiBhbiBvcGVyYXRpb25cbmZ1bmN0aW9uIHJ1bkluT3AoY20sIGYpIHtcbiAgaWYgKGNtLmN1ck9wKSB7IHJldHVybiBmKCkgfVxuICBzdGFydE9wZXJhdGlvbihjbSk7XG4gIHRyeSB7IHJldHVybiBmKCkgfVxuICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxufVxuLy8gV3JhcHMgYSBmdW5jdGlvbiBpbiBhbiBvcGVyYXRpb24uIFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb24uXG5mdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmIChjbS5jdXJPcCkgeyByZXR1cm4gZi5hcHBseShjbSwgYXJndW1lbnRzKSB9XG4gICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KGNtLCBhcmd1bWVudHMpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG59XG4vLyBVc2VkIHRvIGFkZCBtZXRob2RzIHRvIGVkaXRvciBhbmQgZG9jIGluc3RhbmNlcywgd3JhcHBpbmcgdGhlbSBpblxuLy8gb3BlcmF0aW9ucy5cbmZ1bmN0aW9uIG1ldGhvZE9wKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKHRoaXMpO1xuICAgIHRyeSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH1cbiAgfVxufVxuZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jbTtcbiAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTtcbiAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG59XG5cbi8vIFVwZGF0ZXMgdGhlIGRpc3BsYXkudmlldyBkYXRhIHN0cnVjdHVyZSBmb3IgYSBnaXZlbiBjaGFuZ2UgdG8gdGhlXG4vLyBkb2N1bWVudC4gRnJvbSBhbmQgdG8gYXJlIGluIHByZS1jaGFuZ2UgY29vcmRpbmF0ZXMuIExlbmRpZmYgaXNcbi8vIHRoZSBhbW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzXG4vLyB1c2VkIGZvciBjaGFuZ2VzIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcywgb3IgY2hhbmdlIHRoZSB3YXlcbi8vIGxpbmVzIGFyZSBkaXZpZGVkIGludG8gdmlzdWFsIGxpbmVzLiByZWdMaW5lQ2hhbmdlIChiZWxvdylcbi8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLlxuZnVuY3Rpb24gcmVnQ2hhbmdlKGNtLCBmcm9tLCB0bywgbGVuZGlmZikge1xuICBpZiAoZnJvbSA9PSBudWxsKSB7IGZyb20gPSBjbS5kb2MuZmlyc3Q7IH1cbiAgaWYgKHRvID09IG51bGwpIHsgdG8gPSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsgfVxuICBpZiAoIWxlbmRpZmYpIHsgbGVuZGlmZiA9IDA7IH1cblxuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiZcbiAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+IGZyb20pKVxuICAgIHsgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA9IGZyb207IH1cblxuICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG5cbiAgaWYgKGZyb20gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gQ2hhbmdlIGFmdGVyXG4gICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pIDwgZGlzcGxheS52aWV3VG8pXG4gICAgICB7IHJlc2V0VmlldyhjbSk7IH1cbiAgfSBlbHNlIGlmICh0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIENoYW5nZSBiZWZvcmVcbiAgICBpZiAoc2F3Q29sbGFwc2VkU3BhbnMgJiYgdmlzdWFsTGluZUVuZE5vKGNtLmRvYywgdG8gKyBsZW5kaWZmKSA+IGRpc3BsYXkudmlld0Zyb20pIHtcbiAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXkudmlld0Zyb20gKz0gbGVuZGlmZjtcbiAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgfVxuICB9IGVsc2UgaWYgKGZyb20gPD0gZGlzcGxheS52aWV3RnJvbSAmJiB0byA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBGdWxsIG92ZXJsYXBcbiAgICByZXNldFZpZXcoY20pO1xuICB9IGVsc2UgaWYgKGZyb20gPD0gZGlzcGxheS52aWV3RnJvbSkgeyAvLyBUb3Agb3ZlcmxhcFxuICAgIHZhciBjdXQgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCB0bywgdG8gKyBsZW5kaWZmLCAxKTtcbiAgICBpZiAoY3V0KSB7XG4gICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoY3V0LmluZGV4KTtcbiAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBjdXQubGluZU47XG4gICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0byA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBCb3R0b20gb3ZlcmxhcFxuICAgIHZhciBjdXQkMSA9IHZpZXdDdXR0aW5nUG9pbnQoY20sIGZyb20sIGZyb20sIC0xKTtcbiAgICBpZiAoY3V0JDEpIHtcbiAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgwLCBjdXQkMS5pbmRleCk7XG4gICAgICBkaXNwbGF5LnZpZXdUbyA9IGN1dCQxLmxpbmVOO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH1cbiAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGVcbiAgICB2YXIgY3V0VG9wID0gdmlld0N1dHRpbmdQb2ludChjbSwgZnJvbSwgZnJvbSwgLTEpO1xuICAgIHZhciBjdXRCb3QgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCB0bywgdG8gKyBsZW5kaWZmLCAxKTtcbiAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkge1xuICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dFRvcC5pbmRleClcbiAgICAgICAgLmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgY3V0VG9wLmxpbmVOLCBjdXRCb3QubGluZU4pKVxuICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTtcbiAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgaWYgKGV4dCkge1xuICAgIGlmICh0byA8IGV4dC5saW5lTilcbiAgICAgIHsgZXh0LmxpbmVOICs9IGxlbmRpZmY7IH1cbiAgICBlbHNlIGlmIChmcm9tIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7IH1cbiAgfVxufVxuXG4vLyBSZWdpc3RlciBhIGNoYW5nZSB0byBhIHNpbmdsZSBsaW5lLiBUeXBlIG11c3QgYmUgb25lIG9mIFwidGV4dFwiLFxuLy8gXCJndXR0ZXJcIiwgXCJjbGFzc1wiLCBcIndpZGdldFwiXG5mdW5jdGlvbiByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lLCB0eXBlKSB7XG4gIGNtLmN1ck9wLnZpZXdDaGFuZ2VkID0gdHJ1ZTtcbiAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gIGlmIChleHQgJiYgbGluZSA+PSBleHQubGluZU4gJiYgbGluZSA8IGV4dC5saW5lTiArIGV4dC5zaXplKVxuICAgIHsgZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDsgfVxuXG4gIGlmIChsaW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gIHZhciBsaW5lVmlldyA9IGRpc3BsYXkudmlld1tmaW5kVmlld0luZGV4KGNtLCBsaW5lKV07XG4gIGlmIChsaW5lVmlldy5ub2RlID09IG51bGwpIHsgcmV0dXJuIH1cbiAgdmFyIGFyciA9IGxpbmVWaWV3LmNoYW5nZXMgfHwgKGxpbmVWaWV3LmNoYW5nZXMgPSBbXSk7XG4gIGlmIChpbmRleE9mKGFyciwgdHlwZSkgPT0gLTEpIHsgYXJyLnB1c2godHlwZSk7IH1cbn1cblxuLy8gQ2xlYXIgdGhlIHZpZXcuXG5mdW5jdGlvbiByZXNldFZpZXcoY20pIHtcbiAgY20uZGlzcGxheS52aWV3RnJvbSA9IGNtLmRpc3BsYXkudmlld1RvID0gY20uZG9jLmZpcnN0O1xuICBjbS5kaXNwbGF5LnZpZXcgPSBbXTtcbiAgY20uZGlzcGxheS52aWV3T2Zmc2V0ID0gMDtcbn1cblxuZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7XG4gIHZhciBpbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIG9sZE4pLCBkaWZmLCB2aWV3ID0gY20uZGlzcGxheS52aWV3O1xuICBpZiAoIXNhd0NvbGxhcHNlZFNwYW5zIHx8IG5ld04gPT0gY20uZG9jLmZpcnN0ICsgY20uZG9jLnNpemUpXG4gICAgeyByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059IH1cbiAgdmFyIG4gPSBjbS5kaXNwbGF5LnZpZXdGcm9tO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4OyBpKyspXG4gICAgeyBuICs9IHZpZXdbaV0uc2l6ZTsgfVxuICBpZiAobiAhPSBvbGROKSB7XG4gICAgaWYgKGRpciA+IDApIHtcbiAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgZGlmZiA9IChuICsgdmlld1tpbmRleF0uc2l6ZSkgLSBvbGROO1xuICAgICAgaW5kZXgrKztcbiAgICB9IGVsc2Uge1xuICAgICAgZGlmZiA9IG4gLSBvbGROO1xuICAgIH1cbiAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjtcbiAgfVxuICB3aGlsZSAodmlzdWFsTGluZU5vKGNtLmRvYywgbmV3TikgIT0gbmV3Tikge1xuICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSB7IHJldHVybiBudWxsIH1cbiAgICBuZXdOICs9IGRpciAqIHZpZXdbaW5kZXggLSAoZGlyIDwgMCA/IDEgOiAwKV0uc2l6ZTtcbiAgICBpbmRleCArPSBkaXI7XG4gIH1cbiAgcmV0dXJuIHtpbmRleDogaW5kZXgsIGxpbmVOOiBuZXdOfVxufVxuXG4vLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50XG4vLyBvciBjbGlwcGluZyBvZmYgZXhpc3Rpbmcgb25lcyBhcyBuZWVkZWQuXG5mdW5jdGlvbiBhZGp1c3RWaWV3KGNtLCBmcm9tLCB0bykge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gIGlmICh2aWV3Lmxlbmd0aCA9PSAwIHx8IGZyb20gPj0gZGlzcGxheS52aWV3VG8gfHwgdG8gPD0gZGlzcGxheS52aWV3RnJvbSkge1xuICAgIGRpc3BsYXkudmlldyA9IGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCB0byk7XG4gICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRpc3BsYXkudmlld0Zyb20gPiBmcm9tKVxuICAgICAgeyBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgZGlzcGxheS52aWV3RnJvbSkuY29uY2F0KGRpc3BsYXkudmlldyk7IH1cbiAgICBlbHNlIGlmIChkaXNwbGF5LnZpZXdGcm9tIDwgZnJvbSlcbiAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKGZpbmRWaWV3SW5kZXgoY20sIGZyb20pKTsgfVxuICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tO1xuICAgIGlmIChkaXNwbGF5LnZpZXdUbyA8IHRvKVxuICAgICAgeyBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuY29uY2F0KGJ1aWxkVmlld0FycmF5KGNtLCBkaXNwbGF5LnZpZXdUbywgdG8pKTsgfVxuICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pXG4gICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZSgwLCBmaW5kVmlld0luZGV4KGNtLCB0bykpOyB9XG4gIH1cbiAgZGlzcGxheS52aWV3VG8gPSB0bztcbn1cblxuLy8gQ291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmlldyB3aG9zZSBET00gcmVwcmVzZW50YXRpb24gaXNcbi8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuXG5mdW5jdGlvbiBjb3VudERpcnR5VmlldyhjbSkge1xuICB2YXIgdmlldyA9IGNtLmRpc3BsYXkudmlldywgZGlydHkgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZVZpZXcgPSB2aWV3W2ldO1xuICAgIGlmICghbGluZVZpZXcuaGlkZGVuICYmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5jaGFuZ2VzKSkgeyArK2RpcnR5OyB9XG4gIH1cbiAgcmV0dXJuIGRpcnR5XG59XG5cbi8vIEhJR0hMSUdIVCBXT1JLRVJcblxuZnVuY3Rpb24gc3RhcnRXb3JrZXIoY20sIHRpbWUpIHtcbiAgaWYgKGNtLmRvYy5oaWdobGlnaHRGcm9udGllciA8IGNtLmRpc3BsYXkudmlld1RvKVxuICAgIHsgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsgfVxufVxuXG5mdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoY20pIHtcbiAgdmFyIGRvYyA9IGNtLmRvYztcbiAgaWYgKGRvYy5oaWdobGlnaHRGcm9udGllciA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gfVxuICB2YXIgZW5kID0gK25ldyBEYXRlICsgY20ub3B0aW9ucy53b3JrVGltZTtcbiAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIpO1xuICB2YXIgY2hhbmdlZExpbmVzID0gW107XG5cbiAgZG9jLml0ZXIoY29udGV4dC5saW5lLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgY20uZGlzcGxheS52aWV3VG8gKyA1MDApLCBmdW5jdGlvbiAobGluZSkge1xuICAgIGlmIChjb250ZXh0LmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlXG4gICAgICB2YXIgb2xkU3R5bGVzID0gbGluZS5zdHlsZXM7XG4gICAgICB2YXIgcmVzZXRTdGF0ZSA9IGxpbmUudGV4dC5sZW5ndGggPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCA/IGNvcHlTdGF0ZShkb2MubW9kZSwgY29udGV4dC5zdGF0ZSkgOiBudWxsO1xuICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgdHJ1ZSk7XG4gICAgICBpZiAocmVzZXRTdGF0ZSkgeyBjb250ZXh0LnN0YXRlID0gcmVzZXRTdGF0ZTsgfVxuICAgICAgbGluZS5zdHlsZXMgPSBoaWdobGlnaHRlZC5zdHlsZXM7XG4gICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7XG4gICAgICBpZiAobmV3Q2xzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbmV3Q2xzOyB9XG4gICAgICBlbHNlIGlmIChvbGRDbHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBudWxsOyB9XG4gICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8XG4gICAgICAgIG9sZENscyAhPSBuZXdDbHMgJiYgKCFvbGRDbHMgfHwgIW5ld0NscyB8fCBvbGRDbHMuYmdDbGFzcyAhPSBuZXdDbHMuYmdDbGFzcyB8fCBvbGRDbHMudGV4dENsYXNzICE9IG5ld0Nscy50ZXh0Q2xhc3MpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7ICFpc2NoYW5nZSAmJiBpIDwgb2xkU3R5bGVzLmxlbmd0aDsgKytpKSB7IGlzY2hhbmdlID0gb2xkU3R5bGVzW2ldICE9IGxpbmUuc3R5bGVzW2ldOyB9XG4gICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goY29udGV4dC5saW5lKTsgfVxuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29udGV4dC5zYXZlKCk7XG4gICAgICBjb250ZXh0Lm5leHRMaW5lKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoIDw9IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoKVxuICAgICAgICB7IHByb2Nlc3NMaW5lKGNtLCBsaW5lLnRleHQsIGNvbnRleHQpOyB9XG4gICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LmxpbmUgJSA1ID09IDAgPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICBjb250ZXh0Lm5leHRMaW5lKCk7XG4gICAgfVxuICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHtcbiAgICAgIHN0YXJ0V29ya2VyKGNtLCBjbS5vcHRpb25zLndvcmtEZWxheSk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGRvYy5oaWdobGlnaHRGcm9udGllciA9IGNvbnRleHQubGluZTtcbiAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGRvYy5tb2RlRnJvbnRpZXIsIGNvbnRleHQubGluZSk7XG4gIGlmIChjaGFuZ2VkTGluZXMubGVuZ3RoKSB7IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRMaW5lcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdlZExpbmVzW2ldLCBcInRleHRcIik7IH1cbiAgfSk7IH1cbn1cblxuLy8gRElTUExBWSBEUkFXSU5HXG5cbnZhciBEaXNwbGF5VXBkYXRlID0gZnVuY3Rpb24oY20sIHZpZXdwb3J0LCBmb3JjZSkge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG5cbiAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAvLyBTdG9yZSBzb21lIHZhbHVlcyB0aGF0IHdlJ2xsIG5lZWQgbGF0ZXIgKGJ1dCBkb24ndCB3YW50IHRvIGZvcmNlIGEgcmVsYXlvdXQgZm9yKVxuICB0aGlzLnZpc2libGUgPSB2aXNpYmxlTGluZXMoZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoO1xuICB0aGlzLndyYXBwZXJIZWlnaHQgPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0O1xuICB0aGlzLndyYXBwZXJXaWR0aCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRXaWR0aDtcbiAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pO1xuICB0aGlzLmZvcmNlID0gZm9yY2U7XG4gIHRoaXMuZGltcyA9IGdldERpbWVuc2lvbnMoY20pO1xuICB0aGlzLmV2ZW50cyA9IFtdO1xufTtcblxuRGlzcGxheVVwZGF0ZS5wcm90b3R5cGUuc2lnbmFsID0gZnVuY3Rpb24gKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpXG4gICAgeyB0aGlzLmV2ZW50cy5wdXNoKGFyZ3VtZW50cyk7IH1cbn07XG5EaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKylcbiAgICB7IHNpZ25hbC5hcHBseShudWxsLCB0aGlzJDEuZXZlbnRzW2ldKTsgfVxufTtcblxuZnVuY3Rpb24gbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSkge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIGlmICghZGlzcGxheS5zY3JvbGxiYXJzQ2xpcHBlZCAmJiBkaXNwbGF5LnNjcm9sbGVyLm9mZnNldFdpZHRoKSB7XG4gICAgZGlzcGxheS5uYXRpdmVCYXJXaWR0aCA9IGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGggLSBkaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoO1xuICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyBcInB4XCI7XG4gICAgZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5Cb3R0b20gPSAtZGlzcGxheS5uYXRpdmVCYXJXaWR0aCArIFwicHhcIjtcbiAgICBkaXNwbGF5LnNpemVyLnN0eWxlLmJvcmRlclJpZ2h0V2lkdGggPSBzY3JvbGxHYXAoY20pICsgXCJweFwiO1xuICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvblNuYXBzaG90KGNtKSB7XG4gIGlmIChjbS5oYXNGb2N1cygpKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIGFjdGl2ZSA9IGFjdGl2ZUVsdCgpO1xuICBpZiAoIWFjdGl2ZSB8fCAhY29udGFpbnMoY20uZGlzcGxheS5saW5lRGl2LCBhY3RpdmUpKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIHJlc3VsdCA9IHthY3RpdmVFbHQ6IGFjdGl2ZX07XG4gIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsLmFuY2hvck5vZGUgJiYgc2VsLmV4dGVuZCAmJiBjb250YWlucyhjbS5kaXNwbGF5LmxpbmVEaXYsIHNlbC5hbmNob3JOb2RlKSkge1xuICAgICAgcmVzdWx0LmFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTtcbiAgICAgIHJlc3VsdC5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgcmVzdWx0LmZvY3VzTm9kZSA9IHNlbC5mb2N1c05vZGU7XG4gICAgICByZXN1bHQuZm9jdXNPZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gcmVzdG9yZVNlbGVjdGlvbihzbmFwc2hvdCkge1xuICBpZiAoIXNuYXBzaG90IHx8ICFzbmFwc2hvdC5hY3RpdmVFbHQgfHwgc25hcHNob3QuYWN0aXZlRWx0ID09IGFjdGl2ZUVsdCgpKSB7IHJldHVybiB9XG4gIHNuYXBzaG90LmFjdGl2ZUVsdC5mb2N1cygpO1xuICBpZiAoc25hcHNob3QuYW5jaG9yTm9kZSAmJiBjb250YWlucyhkb2N1bWVudC5ib2R5LCBzbmFwc2hvdC5hbmNob3JOb2RlKSAmJiBjb250YWlucyhkb2N1bWVudC5ib2R5LCBzbmFwc2hvdC5mb2N1c05vZGUpKSB7XG4gICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwgcmFuZ2UkJDEgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlJCQxLnNldEVuZChzbmFwc2hvdC5hbmNob3JOb2RlLCBzbmFwc2hvdC5hbmNob3JPZmZzZXQpO1xuICAgIHJhbmdlJCQxLmNvbGxhcHNlKGZhbHNlKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlJCQxKTtcbiAgICBzZWwuZXh0ZW5kKHNuYXBzaG90LmZvY3VzTm9kZSwgc25hcHNob3QuZm9jdXNPZmZzZXQpO1xuICB9XG59XG5cbi8vIERvZXMgdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0aGUgbGluZSBkaXNwbGF5LiBCYWlscyBvdXRcbi8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXNcbi8vIGZhbHNlLlxuZnVuY3Rpb24gdXBkYXRlRGlzcGxheUlmTmVlZGVkKGNtLCB1cGRhdGUpIHtcbiAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7XG5cbiAgaWYgKHVwZGF0ZS5lZGl0b3JJc0hpZGRlbikge1xuICAgIHJlc2V0VmlldyhjbSk7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJsZSBhcmVhIGlzIGFscmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC5cbiAgaWYgKCF1cGRhdGUuZm9yY2UgJiZcbiAgICAgIHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBkaXNwbGF5LnZpZXdUbyAmJlxuICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID49IGRpc3BsYXkudmlld1RvKSAmJlxuICAgICAgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmIGNvdW50RGlydHlWaWV3KGNtKSA9PSAwKVxuICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICBpZiAobWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pKSB7XG4gICAgcmVzZXRWaWV3KGNtKTtcbiAgICB1cGRhdGUuZGltcyA9IGdldERpbWVuc2lvbnMoY20pO1xuICB9XG5cbiAgLy8gQ29tcHV0ZSBhIHN1aXRhYmxlIG5ldyB2aWV3cG9ydCAoZnJvbSAmIHRvKVxuICB2YXIgZW5kID0gZG9jLmZpcnN0ICsgZG9jLnNpemU7XG4gIHZhciBmcm9tID0gTWF0aC5tYXgodXBkYXRlLnZpc2libGUuZnJvbSAtIGNtLm9wdGlvbnMudmlld3BvcnRNYXJnaW4sIGRvYy5maXJzdCk7XG4gIHZhciB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtcbiAgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tICYmIGZyb20gLSBkaXNwbGF5LnZpZXdGcm9tIDwgMjApIHsgZnJvbSA9IE1hdGgubWF4KGRvYy5maXJzdCwgZGlzcGxheS52aWV3RnJvbSk7IH1cbiAgaWYgKGRpc3BsYXkudmlld1RvID4gdG8gJiYgZGlzcGxheS52aWV3VG8gLSB0byA8IDIwKSB7IHRvID0gTWF0aC5taW4oZW5kLCBkaXNwbGF5LnZpZXdUbyk7IH1cbiAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7XG4gICAgZnJvbSA9IHZpc3VhbExpbmVObyhjbS5kb2MsIGZyb20pO1xuICAgIHRvID0gdmlzdWFsTGluZUVuZE5vKGNtLmRvYywgdG8pO1xuICB9XG5cbiAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gZGlzcGxheS52aWV3RnJvbSB8fCB0byAhPSBkaXNwbGF5LnZpZXdUbyB8fFxuICAgIGRpc3BsYXkubGFzdFdyYXBIZWlnaHQgIT0gdXBkYXRlLndyYXBwZXJIZWlnaHQgfHwgZGlzcGxheS5sYXN0V3JhcFdpZHRoICE9IHVwZGF0ZS53cmFwcGVyV2lkdGg7XG4gIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKTtcblxuICBkaXNwbGF5LnZpZXdPZmZzZXQgPSBoZWlnaHRBdExpbmUoZ2V0TGluZShjbS5kb2MsIGRpc3BsYXkudmlld0Zyb20pKTtcbiAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxuICBjbS5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcCA9IGRpc3BsYXkudmlld09mZnNldCArIFwicHhcIjtcblxuICB2YXIgdG9VcGRhdGUgPSBjb3VudERpcnR5VmlldyhjbSk7XG4gIGlmICghZGlmZmVyZW50ICYmIHRvVXBkYXRlID09IDAgJiYgIXVwZGF0ZS5mb3JjZSAmJiBkaXNwbGF5LnJlbmRlcmVkVmlldyA9PSBkaXNwbGF5LnZpZXcgJiZcbiAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykpXG4gICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gIC8vIEZvciBiaWcgY2hhbmdlcywgd2UgaGlkZSB0aGUgZW5jbG9zaW5nIGVsZW1lbnQgZHVyaW5nIHRoZVxuICAvLyB1cGRhdGUsIHNpbmNlIHRoYXQgc3BlZWRzIHVwIHRoZSBvcGVyYXRpb25zIG9uIG1vc3QgYnJvd3NlcnMuXG4gIHZhciBzZWxTbmFwc2hvdCA9IHNlbGVjdGlvblNuYXBzaG90KGNtKTtcbiAgaWYgKHRvVXBkYXRlID4gNCkgeyBkaXNwbGF5LmxpbmVEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiOyB9XG4gIHBhdGNoRGlzcGxheShjbSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywgdXBkYXRlLmRpbXMpO1xuICBpZiAodG9VcGRhdGUgPiA0KSB7IGRpc3BsYXkubGluZURpdi5zdHlsZS5kaXNwbGF5ID0gXCJcIjsgfVxuICBkaXNwbGF5LnJlbmRlcmVkVmlldyA9IGRpc3BsYXkudmlldztcbiAgLy8gVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEgd2lkZ2V0IHdpdGggYSBmb2N1c2VkIGVsZW1lbnQgdGhhdCBnb3RcbiAgLy8gaGlkZGVuIG9yIHVwZGF0ZWQsIGlmIHNvIHJlLWZvY3VzIGl0LlxuICByZXN0b3JlU2VsZWN0aW9uKHNlbFNuYXBzaG90KTtcblxuICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHNjcm9sbFxuICAvLyB3aWR0aCBhbmQgaGVpZ2h0LlxuICByZW1vdmVDaGlsZHJlbihkaXNwbGF5LmN1cnNvckRpdik7XG4gIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTtcbiAgZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IGRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gMDtcblxuICBpZiAoZGlmZmVyZW50KSB7XG4gICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCA9IHVwZGF0ZS53cmFwcGVySGVpZ2h0O1xuICAgIGRpc3BsYXkubGFzdFdyYXBXaWR0aCA9IHVwZGF0ZS53cmFwcGVyV2lkdGg7XG4gICAgc3RhcnRXb3JrZXIoY20sIDQwMCk7XG4gIH1cblxuICBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID0gbnVsbDtcblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBwb3N0VXBkYXRlRGlzcGxheShjbSwgdXBkYXRlKSB7XG4gIHZhciB2aWV3cG9ydCA9IHVwZGF0ZS52aWV3cG9ydDtcblxuICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgaWYgKCFmaXJzdCB8fCAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgfHwgdXBkYXRlLm9sZERpc3BsYXlXaWR0aCA9PSBkaXNwbGF5V2lkdGgoY20pKSB7XG4gICAgICAvLyBDbGlwIGZvcmNlZCB2aWV3cG9ydCB0byBhY3R1YWwgc2Nyb2xsYWJsZSBhcmVhLlxuICAgICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LnRvcCAhPSBudWxsKVxuICAgICAgICB7IHZpZXdwb3J0ID0ge3RvcDogTWF0aC5taW4oY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGNtLmRpc3BsYXkpIC0gZGlzcGxheUhlaWdodChjbSksIHZpZXdwb3J0LnRvcCl9OyB9XG4gICAgICAvLyBVcGRhdGVkIGxpbmUgaGVpZ2h0cyBtaWdodCByZXN1bHQgaW4gdGhlIGRyYXduIGFyZWEgbm90XG4gICAgICAvLyBhY3R1YWxseSBjb3ZlcmluZyB0aGUgdmlld3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBkb2VzLlxuICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gICAgICBpZiAodXBkYXRlLnZpc2libGUuZnJvbSA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGNtLmRpc3BsYXkudmlld1RvKVxuICAgICAgICB7IGJyZWFrIH1cbiAgICB9XG4gICAgaWYgKCF1cGRhdGVEaXNwbGF5SWZOZWVkZWQoY20sIHVwZGF0ZSkpIHsgYnJlYWsgfVxuICAgIHVwZGF0ZUhlaWdodHNJblZpZXdwb3J0KGNtKTtcbiAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTtcbiAgICB1cGRhdGVTZWxlY3Rpb24oY20pO1xuICAgIHVwZGF0ZVNjcm9sbGJhcnMoY20sIGJhck1lYXN1cmUpO1xuICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTtcbiAgICB1cGRhdGUuZm9yY2UgPSBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZS5zaWduYWwoY20sIFwidXBkYXRlXCIsIGNtKTtcbiAgaWYgKGNtLmRpc3BsYXkudmlld0Zyb20gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tIHx8IGNtLmRpc3BsYXkudmlld1RvICE9IGNtLmRpc3BsYXkucmVwb3J0ZWRWaWV3VG8pIHtcbiAgICB1cGRhdGUuc2lnbmFsKGNtLCBcInZpZXdwb3J0Q2hhbmdlXCIsIGNtLCBjbS5kaXNwbGF5LnZpZXdGcm9tLCBjbS5kaXNwbGF5LnZpZXdUbyk7XG4gICAgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1RvO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHZpZXdwb3J0KSB7XG4gIHZhciB1cGRhdGUgPSBuZXcgRGlzcGxheVVwZGF0ZShjbSwgdmlld3BvcnQpO1xuICBpZiAodXBkYXRlRGlzcGxheUlmTmVlZGVkKGNtLCB1cGRhdGUpKSB7XG4gICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pO1xuICAgIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpO1xuICAgIHZhciBiYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7XG4gICAgdXBkYXRlU2Nyb2xsYmFycyhjbSwgYmFyTWVhc3VyZSk7XG4gICAgc2V0RG9jdW1lbnRIZWlnaHQoY20sIGJhck1lYXN1cmUpO1xuICAgIHVwZGF0ZS5maW5pc2goKTtcbiAgfVxufVxuXG4vLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1vdmluZ1xuLy8gbm9kZXMgZm9yIGxpbmVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB2aWV3LCBhbmQgY3JlYXRpbmcgdGhlIG9uZXNcbi8vIHRoYXQgYXJlIG5vdCB0aGVyZSB5ZXQsIGFuZCB1cGRhdGluZyB0aGUgb25lcyB0aGF0IGFyZSBvdXQgb2Zcbi8vIGRhdGUuXG5mdW5jdGlvbiBwYXRjaERpc3BsYXkoY20sIHVwZGF0ZU51bWJlcnNGcm9tLCBkaW1zKSB7XG4gIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbGluZU51bWJlcnMgPSBjbS5vcHRpb25zLmxpbmVOdW1iZXJzO1xuICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcblxuICBmdW5jdGlvbiBybShub2RlKSB7XG4gICAgdmFyIG5leHQgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4gT1MgWCBXZWJraXRcbiAgICBpZiAod2Via2l0ICYmIG1hYyAmJiBjbS5kaXNwbGF5LmN1cnJlbnRXaGVlbFRhcmdldCA9PSBub2RlKVxuICAgICAgeyBub2RlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjsgfVxuICAgIGVsc2VcbiAgICAgIHsgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOyB9XG4gICAgcmV0dXJuIG5leHRcbiAgfVxuXG4gIHZhciB2aWV3ID0gZGlzcGxheS52aWV3LCBsaW5lTiA9IGRpc3BsYXkudmlld0Zyb207XG4gIC8vIExvb3Agb3ZlciB0aGUgZWxlbWVudHMgaW4gdGhlIHZpZXcsIHN5bmNpbmcgY3VyICh0aGUgRE9NIG5vZGVzXG4gIC8vIGluIGRpc3BsYXkubGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGxpbmVWaWV3ID0gdmlld1tpXTtcbiAgICBpZiAobGluZVZpZXcuaGlkZGVuKSB7XG4gICAgfSBlbHNlIGlmICghbGluZVZpZXcubm9kZSB8fCBsaW5lVmlldy5ub2RlLnBhcmVudE5vZGUgIT0gY29udGFpbmVyKSB7IC8vIE5vdCBkcmF3biB5ZXRcbiAgICAgIHZhciBub2RlID0gYnVpbGRMaW5lRWxlbWVudChjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTtcbiAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUobm9kZSwgY3VyKTtcbiAgICB9IGVsc2UgeyAvLyBBbHJlYWR5IGRyYXduXG4gICAgICB3aGlsZSAoY3VyICE9IGxpbmVWaWV3Lm5vZGUpIHsgY3VyID0gcm0oY3VyKTsgfVxuICAgICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51bGwgJiZcbiAgICAgICAgdXBkYXRlTnVtYmVyc0Zyb20gPD0gbGluZU4gJiYgbGluZVZpZXcubGluZU51bWJlcjtcbiAgICAgIGlmIChsaW5lVmlldy5jaGFuZ2VzKSB7XG4gICAgICAgIGlmIChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsIFwiZ3V0dGVyXCIpID4gLTEpIHsgdXBkYXRlTnVtYmVyID0gZmFsc2U7IH1cbiAgICAgICAgdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7XG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlTnVtYmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkcmVuKGxpbmVWaWV3LmxpbmVOdW1iZXIpO1xuICAgICAgICBsaW5lVmlldy5saW5lTnVtYmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmVOdW1iZXJGb3IoY20ub3B0aW9ucywgbGluZU4pKSk7XG4gICAgICB9XG4gICAgICBjdXIgPSBsaW5lVmlldy5ub2RlLm5leHRTaWJsaW5nO1xuICAgIH1cbiAgICBsaW5lTiArPSBsaW5lVmlldy5zaXplO1xuICB9XG4gIHdoaWxlIChjdXIpIHsgY3VyID0gcm0oY3VyKTsgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVHdXR0ZXJTcGFjZShjbSkge1xuICB2YXIgd2lkdGggPSBjbS5kaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7XG4gIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWFyZ2luTGVmdCA9IHdpZHRoICsgXCJweFwiO1xufVxuXG5mdW5jdGlvbiBzZXREb2N1bWVudEhlaWdodChjbSwgbWVhc3VyZSkge1xuICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbkhlaWdodCA9IG1lYXN1cmUuZG9jSGVpZ2h0ICsgXCJweFwiO1xuICBjbS5kaXNwbGF5LmhlaWdodEZvcmNlci5zdHlsZS50b3AgPSBtZWFzdXJlLmRvY0hlaWdodCArIFwicHhcIjtcbiAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IChtZWFzdXJlLmRvY0hlaWdodCArIGNtLmRpc3BsYXkuYmFySGVpZ2h0ICsgc2Nyb2xsR2FwKGNtKSkgKyBcInB4XCI7XG59XG5cbi8vIFJlYnVpbGQgdGhlIGd1dHRlciBlbGVtZW50cywgZW5zdXJlIHRoZSBtYXJnaW4gdG8gdGhlIGxlZnQgb2YgdGhlXG4vLyBjb2RlIG1hdGNoZXMgdGhlaXIgd2lkdGguXG5mdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7XG4gIHZhciBndXR0ZXJzID0gY20uZGlzcGxheS5ndXR0ZXJzLCBzcGVjcyA9IGNtLm9wdGlvbnMuZ3V0dGVycztcbiAgcmVtb3ZlQ2hpbGRyZW4oZ3V0dGVycyk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBzcGVjcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBndXR0ZXJDbGFzcyA9IHNwZWNzW2ldO1xuICAgIHZhciBnRWx0ID0gZ3V0dGVycy5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlciBcIiArIGd1dHRlckNsYXNzKSk7XG4gICAgaWYgKGd1dHRlckNsYXNzID09IFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiKSB7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVHdXR0ZXIgPSBnRWx0O1xuICAgICAgZ0VsdC5zdHlsZS53aWR0aCA9IChjbS5kaXNwbGF5LmxpbmVOdW1XaWR0aCB8fCAxKSArIFwicHhcIjtcbiAgICB9XG4gIH1cbiAgZ3V0dGVycy5zdHlsZS5kaXNwbGF5ID0gaSA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgdXBkYXRlR3V0dGVyU3BhY2UoY20pO1xufVxuXG4vLyBNYWtlIHN1cmUgdGhlIGd1dHRlcnMgb3B0aW9ucyBjb250YWlucyB0aGUgZWxlbWVudFxuLy8gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIgd2hlbiB0aGUgbGluZU51bWJlcnMgb3B0aW9uIGlzIHRydWUuXG5mdW5jdGlvbiBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMob3B0aW9ucykge1xuICB2YXIgZm91bmQgPSBpbmRleE9mKG9wdGlvbnMuZ3V0dGVycywgXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIpO1xuICBpZiAoZm91bmQgPT0gLTEgJiYgb3B0aW9ucy5saW5lTnVtYmVycykge1xuICAgIG9wdGlvbnMuZ3V0dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5jb25jYXQoW1wiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiXSk7XG4gIH0gZWxzZSBpZiAoZm91bmQgPiAtMSAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykge1xuICAgIG9wdGlvbnMuZ3V0dGVycyA9IG9wdGlvbnMuZ3V0dGVycy5zbGljZSgwKTtcbiAgICBvcHRpb25zLmd1dHRlcnMuc3BsaWNlKGZvdW5kLCAxKTtcbiAgfVxufVxuXG4vLyBTaW5jZSB0aGUgZGVsdGEgdmFsdWVzIHJlcG9ydGVkIG9uIG1vdXNlIHdoZWVsIGV2ZW50cyBhcmVcbi8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3NlcnMgYW5kIGV2ZW4gYnJvd3NlciB2ZXJzaW9ucywgYW5kXG4vLyBnZW5lcmFsbHkgaG9ycmlibHkgdW5wcmVkaWN0YWJsZSwgdGhpcyBjb2RlIHN0YXJ0cyBieSBtZWFzdXJpbmdcbi8vIHRoZSBzY3JvbGwgZWZmZWN0IHRoYXQgdGhlIGZpcnN0IGZldyBtb3VzZSB3aGVlbCBldmVudHMgaGF2ZSxcbi8vIGFuZCwgZnJvbSB0aGF0LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVsdGFzIHRvIHBpeGVsXG4vLyBvZmZzZXRzIGFmdGVyd2FyZHMuXG4vL1xuLy8gVGhlIHJlYXNvbiB3ZSB3YW50IHRvIGtub3cgdGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xsXG4vLyBpcyB0aGF0IGl0IGdpdmVzIHVzIGEgY2hhbmNlIHRvIHVwZGF0ZSB0aGUgZGlzcGxheSBiZWZvcmUgdGhlXG4vLyBhY3R1YWwgc2Nyb2xsaW5nIGhhcHBlbnMsIHJlZHVjaW5nIGZsaWNrZXJpbmcuXG5cbnZhciB3aGVlbFNhbXBsZXMgPSAwO1xudmFyIHdoZWVsUGl4ZWxzUGVyVW5pdCA9IG51bGw7XG4vLyBGaWxsIGluIGEgYnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3ZVxuLy8ga25vdyBvbmUuIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgYWNjdXJhdGUgLS0gdGhlIHJlc3VsdCBvZiB0aGVtXG4vLyBiZWluZyB3cm9uZyB3b3VsZCBqdXN0IGJlIGEgc2xpZ2h0IGZsaWNrZXIgb24gdGhlIGZpcnN0IHdoZWVsXG4vLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCkuXG5pZiAoaWUpIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gLS41MzsgfVxuZWxzZSBpZiAoZ2Vja28pIHsgd2hlZWxQaXhlbHNQZXJVbml0ID0gMTU7IH1cbmVsc2UgaWYgKGNocm9tZSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjc7IH1cbmVsc2UgaWYgKHNhZmFyaSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtMS8zOyB9XG5cbmZ1bmN0aW9uIHdoZWVsRXZlbnREZWx0YShlKSB7XG4gIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTtcbiAgaWYgKGR4ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuSE9SSVpPTlRBTF9BWElTKSB7IGR4ID0gZS5kZXRhaWw7IH1cbiAgaWYgKGR5ID09IG51bGwgJiYgZS5kZXRhaWwgJiYgZS5heGlzID09IGUuVkVSVElDQUxfQVhJUykgeyBkeSA9IGUuZGV0YWlsOyB9XG4gIGVsc2UgaWYgKGR5ID09IG51bGwpIHsgZHkgPSBlLndoZWVsRGVsdGE7IH1cbiAgcmV0dXJuIHt4OiBkeCwgeTogZHl9XG59XG5mdW5jdGlvbiB3aGVlbEV2ZW50UGl4ZWxzKGUpIHtcbiAgdmFyIGRlbHRhID0gd2hlZWxFdmVudERlbHRhKGUpO1xuICBkZWx0YS54ICo9IHdoZWVsUGl4ZWxzUGVyVW5pdDtcbiAgZGVsdGEueSAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gIHJldHVybiBkZWx0YVxufVxuXG5mdW5jdGlvbiBvblNjcm9sbFdoZWVsKGNtLCBlKSB7XG4gIHZhciBkZWx0YSA9IHdoZWVsRXZlbnREZWx0YShlKSwgZHggPSBkZWx0YS54LCBkeSA9IGRlbHRhLnk7XG5cbiAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzY3JvbGwgPSBkaXNwbGF5LnNjcm9sbGVyO1xuICAvLyBRdWl0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzY3JvbGwgaGVyZVxuICB2YXIgY2FuU2Nyb2xsWCA9IHNjcm9sbC5zY3JvbGxXaWR0aCA+IHNjcm9sbC5jbGllbnRXaWR0aDtcbiAgdmFyIGNhblNjcm9sbFkgPSBzY3JvbGwuc2Nyb2xsSGVpZ2h0ID4gc2Nyb2xsLmNsaWVudEhlaWdodDtcbiAgaWYgKCEoZHggJiYgY2FuU2Nyb2xsWCB8fCBkeSAmJiBjYW5TY3JvbGxZKSkgeyByZXR1cm4gfVxuXG4gIC8vIFdlYmtpdCBicm93c2VycyBvbiBPUyBYIGFib3J0IG1vbWVudHVtIHNjcm9sbHMgd2hlbiB0aGUgdGFyZ2V0XG4gIC8vIG9mIHRoZSBzY3JvbGwgZXZlbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQuXG4gIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlXG4gIC8vIGVsZW1lbnQgaXMga2VwdCBhcm91bmQuXG4gIGlmIChkeSAmJiBtYWMgJiYgd2Via2l0KSB7XG4gICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh2aWV3W2ldLm5vZGUgPT0gY3VyKSB7XG4gICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7XG4gICAgICAgICAgYnJlYWsgb3V0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE9uIHNvbWUgYnJvd3NlcnMsIGhvcml6b250YWwgc2Nyb2xsaW5nIHdpbGwgY2F1c2UgcmVkcmF3cyB0b1xuICAvLyBoYXBwZW4gYmVmb3JlIHRoZSBndXR0ZXIgaGFzIGJlZW4gcmVhbGlnbmVkLCBjYXVzaW5nIGl0IHRvXG4gIC8vIHdyaWdnbGUgYXJvdW5kIGluIGEgbW9zdCB1bnNlZW1seSB3YXkuIFdoZW4gd2UgaGF2ZSBhblxuICAvLyBlc3RpbWF0ZWQgcGl4ZWxzL2RlbHRhIHZhbHVlLCB3ZSBqdXN0IGhhbmRsZSBob3Jpem9udGFsXG4gIC8vIHNjcm9sbGluZyBlbnRpcmVseSBoZXJlLiBJdCdsbCBiZSBzbGlnaHRseSBvZmYgZnJvbSBuYXRpdmUsIGJ1dFxuICAvLyBiZXR0ZXIgdGhhbiBnbGl0Y2hpbmcgb3V0LlxuICBpZiAoZHggJiYgIWdlY2tvICYmICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHtcbiAgICBpZiAoZHkgJiYgY2FuU2Nyb2xsWSlcbiAgICAgIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBNYXRoLm1heCgwLCBzY3JvbGwuc2Nyb2xsVG9wICsgZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQpKTsgfVxuICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAsIHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQpKTtcbiAgICAvLyBPbmx5IHByZXZlbnQgZGVmYXVsdCBzY3JvbGxpbmcgaWYgdmVydGljYWwgc2Nyb2xsaW5nIGlzXG4gICAgLy8gYWN0dWFsbHkgcG9zc2libGUuIE90aGVyd2lzZSwgaXQgY2F1c2VzIHZlcnRpY2FsIHNjcm9sbFxuICAgIC8vIGppdHRlciBvbiBPU1ggdHJhY2twYWRzIHdoZW4gZGVsdGFYIGlzIHNtYWxsIGFuZCBkZWx0YVlcbiAgICAvLyBpcyBsYXJnZSAoaXNzdWUgIzM1NzkpXG4gICAgaWYgKCFkeSB8fCAoZHkgJiYgY2FuU2Nyb2xsWSkpXG4gICAgICB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gbnVsbDsgLy8gQWJvcnQgbWVhc3VyZW1lbnQsIGlmIGluIHByb2dyZXNzXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAnUHJvamVjdCcgdGhlIHZpc2libGUgdmlld3BvcnQgdG8gY292ZXIgdGhlIGFyZWEgdGhhdCBpcyBiZWluZ1xuICAvLyBzY3JvbGxlZCBpbnRvIHZpZXcgKGlmIHdlIGtub3cgZW5vdWdoIHRvIGVzdGltYXRlIGl0KS5cbiAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7XG4gICAgdmFyIHBpeGVscyA9IGR5ICogd2hlZWxQaXhlbHNQZXJVbml0O1xuICAgIHZhciB0b3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBib3QgPSB0b3AgKyBkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChwaXhlbHMgPCAwKSB7IHRvcCA9IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyAtIDUwKTsgfVxuICAgIGVsc2UgeyBib3QgPSBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0LCBib3QgKyBwaXhlbHMgKyA1MCk7IH1cbiAgICB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB0b3AsIGJvdHRvbTogYm90fSk7XG4gIH1cblxuICBpZiAod2hlZWxTYW1wbGVzIDwgMjApIHtcbiAgICBpZiAoZGlzcGxheS53aGVlbFN0YXJ0WCA9PSBudWxsKSB7XG4gICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wO1xuICAgICAgZGlzcGxheS53aGVlbERYID0gZHg7IGRpc3BsYXkud2hlZWxEWSA9IGR5O1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgdmFyIG1vdmVkWCA9IHNjcm9sbC5zY3JvbGxMZWZ0IC0gZGlzcGxheS53aGVlbFN0YXJ0WDtcbiAgICAgICAgdmFyIG1vdmVkWSA9IHNjcm9sbC5zY3JvbGxUb3AgLSBkaXNwbGF5LndoZWVsU3RhcnRZO1xuICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiBkaXNwbGF5LndoZWVsRFkgJiYgbW92ZWRZIC8gZGlzcGxheS53aGVlbERZKSB8fFxuICAgICAgICAgIChtb3ZlZFggJiYgZGlzcGxheS53aGVlbERYICYmIG1vdmVkWCAvIGRpc3BsYXkud2hlZWxEWCk7XG4gICAgICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDtcbiAgICAgICAgaWYgKCFzYW1wbGUpIHsgcmV0dXJuIH1cbiAgICAgICAgd2hlZWxQaXhlbHNQZXJVbml0ID0gKHdoZWVsUGl4ZWxzUGVyVW5pdCAqIHdoZWVsU2FtcGxlcyArIHNhbXBsZSkgLyAod2hlZWxTYW1wbGVzICsgMSk7XG4gICAgICAgICsrd2hlZWxTYW1wbGVzO1xuICAgICAgfSwgMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheS53aGVlbERYICs9IGR4OyBkaXNwbGF5LndoZWVsRFkgKz0gZHk7XG4gICAgfVxuICB9XG59XG5cbi8vIFNlbGVjdGlvbiBvYmplY3RzIGFyZSBpbW11dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWVcbi8vIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4gQSBzZWxlY3Rpb24gaXMgb25lIG9yIG1vcmUgbm9uLW92ZXJsYXBwaW5nXG4vLyAoYW5kIG5vbi10b3VjaGluZykgcmFuZ2VzLCBzb3J0ZWQsIGFuZCBhbiBpbnRlZ2VyIHRoYXQgaW5kaWNhdGVzXG4vLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9uICh0aGUgb25lIHRoYXQncyBzY3JvbGxlZCBpbnRvXG4vLyB2aWV3LCB0aGF0IGdldEN1cnNvciByZXR1cm5zLCBldGMpLlxudmFyIFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHJhbmdlcywgcHJpbUluZGV4KSB7XG4gIHRoaXMucmFuZ2VzID0gcmFuZ2VzO1xuICB0aGlzLnByaW1JbmRleCA9IHByaW1JbmRleDtcbn07XG5cblNlbGVjdGlvbi5wcm90b3R5cGUucHJpbWFyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XSB9O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmIChvdGhlciA9PSB0aGlzKSB7IHJldHVybiB0cnVlIH1cbiAgaWYgKG90aGVyLnByaW1JbmRleCAhPSB0aGlzLnByaW1JbmRleCB8fCBvdGhlci5yYW5nZXMubGVuZ3RoICE9IHRoaXMucmFuZ2VzLmxlbmd0aCkgeyByZXR1cm4gZmFsc2UgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhlcmUgPSB0aGlzJDEucmFuZ2VzW2ldLCB0aGVyZSA9IG90aGVyLnJhbmdlc1tpXTtcbiAgICBpZiAoIWVxdWFsQ3Vyc29yUG9zKGhlcmUuYW5jaG9yLCB0aGVyZS5hbmNob3IpIHx8ICFlcXVhbEN1cnNvclBvcyhoZXJlLmhlYWQsIHRoZXJlLmhlYWQpKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn07XG5cblNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNvcHlQb3ModGhpcyQxLnJhbmdlc1tpXS5hbmNob3IpLCBjb3B5UG9zKHRoaXMkMS5yYW5nZXNbaV0uaGVhZCkpOyB9XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgdGhpcy5wcmltSW5kZXgpXG59O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLnNvbWV0aGluZ1NlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgeyBpZiAoIXRoaXMkMS5yYW5nZXNbaV0uZW1wdHkoKSkgeyByZXR1cm4gdHJ1ZSB9IH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG5TZWxlY3Rpb24ucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHBvcywgZW5kKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKCFlbmQpIHsgZW5kID0gcG9zOyB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmFuZ2UgPSB0aGlzJDEucmFuZ2VzW2ldO1xuICAgIGlmIChjbXAoZW5kLCByYW5nZS5mcm9tKCkpID49IDAgJiYgY21wKHBvcywgcmFuZ2UudG8oKSkgPD0gMClcbiAgICAgIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufTtcblxudmFyIFJhbmdlID0gZnVuY3Rpb24oYW5jaG9yLCBoZWFkKSB7XG4gIHRoaXMuYW5jaG9yID0gYW5jaG9yOyB0aGlzLmhlYWQgPSBoZWFkO1xufTtcblxuUmFuZ2UucHJvdG90eXBlLmZyb20gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5Qb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCkgfTtcblJhbmdlLnByb3RvdHlwZS50byA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1heFBvcyh0aGlzLmFuY2hvciwgdGhpcy5oZWFkKSB9O1xuUmFuZ2UucHJvdG90eXBlLmVtcHR5ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5oZWFkLmxpbmUgPT0gdGhpcy5hbmNob3IubGluZSAmJiB0aGlzLmhlYWQuY2ggPT0gdGhpcy5hbmNob3IuY2ggfTtcblxuLy8gVGFrZSBhbiB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5kXG4vLyBidWlsZCBhIHNlbGVjdGlvbiBvdXQgb2YgaXQuICdDb25zdW1lcycgcmFuZ2VzIGFycmF5IChtb2RpZnlpbmdcbi8vIGl0KS5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleCkge1xuICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhdO1xuICByYW5nZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gY21wKGEuZnJvbSgpLCBiLmZyb20oKSk7IH0pO1xuICBwcmltSW5kZXggPSBpbmRleE9mKHJhbmdlcywgcHJpbSk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1ciA9IHJhbmdlc1tpXSwgcHJldiA9IHJhbmdlc1tpIC0gMV07XG4gICAgaWYgKGNtcChwcmV2LnRvKCksIGN1ci5mcm9tKCkpID49IDApIHtcbiAgICAgIHZhciBmcm9tID0gbWluUG9zKHByZXYuZnJvbSgpLCBjdXIuZnJvbSgpKSwgdG8gPSBtYXhQb3MocHJldi50bygpLCBjdXIudG8oKSk7XG4gICAgICB2YXIgaW52ID0gcHJldi5lbXB0eSgpID8gY3VyLmZyb20oKSA9PSBjdXIuaGVhZCA6IHByZXYuZnJvbSgpID09IHByZXYuaGVhZDtcbiAgICAgIGlmIChpIDw9IHByaW1JbmRleCkgeyAtLXByaW1JbmRleDsgfVxuICAgICAgcmFuZ2VzLnNwbGljZSgtLWksIDIsIG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0bykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihyYW5nZXMsIHByaW1JbmRleClcbn1cblxuZnVuY3Rpb24gc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbbmV3IFJhbmdlKGFuY2hvciwgaGVhZCB8fCBhbmNob3IpXSwgMClcbn1cblxuLy8gQ29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiBhIGNoYW5nZSAoaXRzICd0bycgcHJvcGVydHlcbi8vIHJlZmVycyB0byB0aGUgcHJlLWNoYW5nZSBlbmQpLlxuZnVuY3Rpb24gY2hhbmdlRW5kKGNoYW5nZSkge1xuICBpZiAoIWNoYW5nZS50ZXh0KSB7IHJldHVybiBjaGFuZ2UudG8gfVxuICByZXR1cm4gUG9zKGNoYW5nZS5mcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGggLSAxLFxuICAgICAgICAgICAgIGxzdChjaGFuZ2UudGV4dCkubGVuZ3RoICsgKGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxID8gY2hhbmdlLmZyb20uY2ggOiAwKSlcbn1cblxuLy8gQWRqdXN0IGEgcG9zaXRpb24gdG8gcmVmZXIgdG8gdGhlIHBvc3QtY2hhbmdlIHBvc2l0aW9uIG9mIHRoZVxuLy8gc2FtZSB0ZXh0LCBvciB0aGUgZW5kIG9mIHRoZSBjaGFuZ2UgaWYgdGhlIGNoYW5nZSBjb3ZlcnMgaXQuXG5mdW5jdGlvbiBhZGp1c3RGb3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHtcbiAgaWYgKGNtcChwb3MsIGNoYW5nZS5mcm9tKSA8IDApIHsgcmV0dXJuIHBvcyB9XG4gIGlmIChjbXAocG9zLCBjaGFuZ2UudG8pIDw9IDApIHsgcmV0dXJuIGNoYW5nZUVuZChjaGFuZ2UpIH1cblxuICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBvcy5jaDtcbiAgaWYgKHBvcy5saW5lID09IGNoYW5nZS50by5saW5lKSB7IGNoICs9IGNoYW5nZUVuZChjaGFuZ2UpLmNoIC0gY2hhbmdlLnRvLmNoOyB9XG4gIHJldHVybiBQb3MobGluZSwgY2gpXG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkge1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICBvdXQucHVzaChuZXcgUmFuZ2UoYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmFuY2hvciwgY2hhbmdlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkpKTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5wcmltSW5kZXgpXG59XG5cbmZ1bmN0aW9uIG9mZnNldFBvcyhwb3MsIG9sZCwgbncpIHtcbiAgaWYgKHBvcy5saW5lID09IG9sZC5saW5lKVxuICAgIHsgcmV0dXJuIFBvcyhudy5saW5lLCBwb3MuY2ggLSBvbGQuY2ggKyBudy5jaCkgfVxuICBlbHNlXG4gICAgeyByZXR1cm4gUG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCkgfVxufVxuXG4vLyBVc2VkIGJ5IHJlcGxhY2VTZWxlY3Rpb25zIHRvIGFsbG93IG1vdmluZyB0aGUgc2VsZWN0aW9uIHRvIHRoZVxuLy8gc3RhcnQgb3IgYXJvdW5kIHRoZSByZXBsYWNlZCB0ZXN0LiBIaW50IG1heSBiZSBcInN0YXJ0XCIgb3IgXCJhcm91bmRcIi5cbmZ1bmN0aW9uIGNvbXB1dGVSZXBsYWNlZFNlbChkb2MsIGNoYW5nZXMsIGhpbnQpIHtcbiAgdmFyIG91dCA9IFtdO1xuICB2YXIgb2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9sZFByZXYsIG5ld1ByZXYpO1xuICAgIHZhciB0byA9IG9mZnNldFBvcyhjaGFuZ2VFbmQoY2hhbmdlKSwgb2xkUHJldiwgbmV3UHJldik7XG4gICAgb2xkUHJldiA9IGNoYW5nZS50bztcbiAgICBuZXdQcmV2ID0gdG87XG4gICAgaWYgKGhpbnQgPT0gXCJhcm91bmRcIikge1xuICAgICAgdmFyIHJhbmdlID0gZG9jLnNlbC5yYW5nZXNbaV0sIGludiA9IGNtcChyYW5nZS5oZWFkLCByYW5nZS5hbmNob3IpIDwgMDtcbiAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShmcm9tLCBmcm9tKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleClcbn1cblxuLy8gVXNlZCB0byBnZXQgdGhlIGVkaXRvciBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZSBhZ2FpbiB3aGVuIG9wdGlvbnMgY2hhbmdlLlxuXG5mdW5jdGlvbiBsb2FkTW9kZShjbSkge1xuICBjbS5kb2MubW9kZSA9IGdldE1vZGUoY20ub3B0aW9ucywgY20uZG9jLm1vZGVPcHRpb24pO1xuICByZXNldE1vZGVTdGF0ZShjbSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0TW9kZVN0YXRlKGNtKSB7XG4gIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgeyBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOyB9XG4gICAgaWYgKGxpbmUuc3R5bGVzKSB7IGxpbmUuc3R5bGVzID0gbnVsbDsgfVxuICB9KTtcbiAgY20uZG9jLm1vZGVGcm9udGllciA9IGNtLmRvYy5oaWdobGlnaHRGcm9udGllciA9IGNtLmRvYy5maXJzdDtcbiAgc3RhcnRXb3JrZXIoY20sIDEwMCk7XG4gIGNtLnN0YXRlLm1vZGVHZW4rKztcbiAgaWYgKGNtLmN1ck9wKSB7IHJlZ0NoYW5nZShjbSk7IH1cbn1cblxuLy8gRE9DVU1FTlQgREFUQSBTVFJVQ1RVUkVcblxuLy8gQnkgZGVmYXVsdCwgdXBkYXRlcyB0aGF0IHN0YXJ0IGFuZCBlbmQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmVcbi8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24gb2YgbGluZVxuLy8gd2lkZ2V0cyBhbmQgbWFya2VyIGVsZW1lbnRzIHdpdGggdGhlIHRleHQgYmVoYXZlIG1vcmUgaW50dWl0aXZlLlxuZnVuY3Rpb24gaXNXaG9sZUxpbmVVcGRhdGUoZG9jLCBjaGFuZ2UpIHtcbiAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRvLmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSBcIlwiICYmXG4gICAgKCFkb2MuY20gfHwgZG9jLmNtLm9wdGlvbnMud2hvbGVMaW5lVXBkYXRlQmVmb3JlKVxufVxuXG4vLyBQZXJmb3JtIGEgY2hhbmdlIG9uIHRoZSBkb2N1bWVudCBkYXRhIHN0cnVjdHVyZS5cbmZ1bmN0aW9uIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0JCQxKSB7XG4gIGZ1bmN0aW9uIHNwYW5zRm9yKG4pIHtyZXR1cm4gbWFya2VkU3BhbnMgPyBtYXJrZWRTcGFuc1tuXSA6IG51bGx9XG4gIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykge1xuICAgIHVwZGF0ZUxpbmUobGluZSwgdGV4dCwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0JCQxKTtcbiAgICBzaWduYWxMYXRlcihsaW5lLCBcImNoYW5nZVwiLCBsaW5lLCBjaGFuZ2UpO1xuICB9XG4gIGZ1bmN0aW9uIGxpbmVzRm9yKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpXG4gICAgICB7IHJlc3VsdC5wdXNoKG5ldyBMaW5lKHRleHRbaV0sIHNwYW5zRm9yKGkpLCBlc3RpbWF0ZUhlaWdodCQkMSkpOyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG8sIHRleHQgPSBjaGFuZ2UudGV4dDtcbiAgdmFyIGZpcnN0TGluZSA9IGdldExpbmUoZG9jLCBmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUoZG9jLCB0by5saW5lKTtcbiAgdmFyIGxhc3RUZXh0ID0gbHN0KHRleHQpLCBsYXN0U3BhbnMgPSBzcGFuc0Zvcih0ZXh0Lmxlbmd0aCAtIDEpLCBubGluZXMgPSB0by5saW5lIC0gZnJvbS5saW5lO1xuXG4gIC8vIEFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmVcbiAgaWYgKGNoYW5nZS5mdWxsKSB7XG4gICAgZG9jLmluc2VydCgwLCBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCkpO1xuICAgIGRvYy5yZW1vdmUodGV4dC5sZW5ndGgsIGRvYy5zaXplIC0gdGV4dC5sZW5ndGgpO1xuICB9IGVsc2UgaWYgKGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSkge1xuICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2VcbiAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uXG4gICAgdmFyIGFkZGVkID0gbGluZXNGb3IoMCwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7XG4gICAgaWYgKG5saW5lcykgeyBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzKTsgfVxuICAgIGlmIChhZGRlZC5sZW5ndGgpIHsgZG9jLmluc2VydChmcm9tLmxpbmUsIGFkZGVkKTsgfVxuICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICB1cGRhdGUoZmlyc3RMaW5lLCBmaXJzdExpbmUudGV4dC5zbGljZSgwLCBmcm9tLmNoKSArIGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYWRkZWQkMSA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICBhZGRlZCQxLnB1c2gobmV3IExpbmUobGFzdFRleHQgKyBmaXJzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucywgZXN0aW1hdGVIZWlnaHQkJDEpKTtcbiAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgICAgZG9jLmluc2VydChmcm9tLmxpbmUgKyAxLCBhZGRlZCQxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkge1xuICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSArIGxhc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBzcGFuc0ZvcigwKSk7XG4gICAgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMpO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgIHVwZGF0ZShsYXN0TGluZSwgbGFzdFRleHQgKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTtcbiAgICB2YXIgYWRkZWQkMiA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgaWYgKG5saW5lcyA+IDEpIHsgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxKTsgfVxuICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQkMik7XG4gIH1cblxuICBzaWduYWxMYXRlcihkb2MsIFwiY2hhbmdlXCIsIGRvYywgY2hhbmdlKTtcbn1cblxuLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy5cbmZ1bmN0aW9uIGxpbmtlZERvY3MoZG9jLCBmLCBzaGFyZWRIaXN0T25seSkge1xuICBmdW5jdGlvbiBwcm9wYWdhdGUoZG9jLCBza2lwLCBzaGFyZWRIaXN0KSB7XG4gICAgaWYgKGRvYy5saW5rZWQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgcmVsID0gZG9jLmxpbmtlZFtpXTtcbiAgICAgIGlmIChyZWwuZG9jID09IHNraXApIHsgY29udGludWUgfVxuICAgICAgdmFyIHNoYXJlZCA9IHNoYXJlZEhpc3QgJiYgcmVsLnNoYXJlZEhpc3Q7XG4gICAgICBpZiAoc2hhcmVkSGlzdE9ubHkgJiYgIXNoYXJlZCkgeyBjb250aW51ZSB9XG4gICAgICBmKHJlbC5kb2MsIHNoYXJlZCk7XG4gICAgICBwcm9wYWdhdGUocmVsLmRvYywgZG9jLCBzaGFyZWQpO1xuICAgIH0gfVxuICB9XG4gIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpO1xufVxuXG4vLyBBdHRhY2ggYSBkb2N1bWVudCB0byBhbiBlZGl0b3IuXG5mdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykge1xuICBpZiAoZG9jLmNtKSB7IHRocm93IG5ldyBFcnJvcihcIlRoaXMgZG9jdW1lbnQgaXMgYWxyZWFkeSBpbiB1c2UuXCIpIH1cbiAgY20uZG9jID0gZG9jO1xuICBkb2MuY20gPSBjbTtcbiAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gIGxvYWRNb2RlKGNtKTtcbiAgc2V0RGlyZWN0aW9uQ2xhc3MoY20pO1xuICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGZpbmRNYXhMaW5lKGNtKTsgfVxuICBjbS5vcHRpb25zLm1vZGUgPSBkb2MubW9kZU9wdGlvbjtcbiAgcmVnQ2hhbmdlKGNtKTtcbn1cblxuZnVuY3Rpb24gc2V0RGlyZWN0aW9uQ2xhc3MoY20pIHtcbiAgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiA/IGFkZENsYXNzIDogcm1DbGFzcykoY20uZGlzcGxheS5saW5lRGl2LCBcIkNvZGVNaXJyb3ItcnRsXCIpO1xufVxuXG5mdW5jdGlvbiBkaXJlY3Rpb25DaGFuZ2VkKGNtKSB7XG4gIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICBzZXREaXJlY3Rpb25DbGFzcyhjbSk7XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEhpc3Rvcnkoc3RhcnRHZW4pIHtcbiAgLy8gQXJyYXlzIG9mIGNoYW5nZSBldmVudHMgYW5kIHNlbGVjdGlvbnMuIERvaW5nIHNvbWV0aGluZyBhZGRzIGFuXG4gIC8vIGV2ZW50IHRvIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVzIGV2ZW50cyBmcm9tIGRvbmVcbiAgLy8gdG8gdW5kb25lLCByZWRvaW5nIG1vdmVzIHRoZW0gaW4gdGhlIG90aGVyIGRpcmVjdGlvbi5cbiAgdGhpcy5kb25lID0gW107IHRoaXMudW5kb25lID0gW107XG4gIHRoaXMudW5kb0RlcHRoID0gSW5maW5pdHk7XG4gIC8vIFVzZWQgdG8gdHJhY2sgd2hlbiBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSB1bmRvXG4gIC8vIGV2ZW50XG4gIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDtcbiAgdGhpcy5sYXN0T3AgPSB0aGlzLmxhc3RTZWxPcCA9IG51bGw7XG4gIHRoaXMubGFzdE9yaWdpbiA9IHRoaXMubGFzdFNlbE9yaWdpbiA9IG51bGw7XG4gIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2RcbiAgdGhpcy5nZW5lcmF0aW9uID0gdGhpcy5tYXhHZW5lcmF0aW9uID0gc3RhcnRHZW4gfHwgMTtcbn1cblxuLy8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5bGUgY2hhbmdlXG4vLyBvYmplY3QuXG5mdW5jdGlvbiBoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkge1xuICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNoYW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9O1xuICBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTtcbiAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uIChkb2MpIHsgcmV0dXJuIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpOyB9LCB0cnVlKTtcbiAgcmV0dXJuIGhpc3RDaGFuZ2Vcbn1cblxuLy8gUG9wIGFsbCBzZWxlY3Rpb24gZXZlbnRzIG9mZiB0aGUgZW5kIG9mIGEgaGlzdG9yeSBhcnJheS4gU3RvcCBhdFxuLy8gYSBjaGFuZ2UgZXZlbnQuXG5mdW5jdGlvbiBjbGVhclNlbGVjdGlvbkV2ZW50cyhhcnJheSkge1xuICB3aGlsZSAoYXJyYXkubGVuZ3RoKSB7XG4gICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpO1xuICAgIGlmIChsYXN0LnJhbmdlcykgeyBhcnJheS5wb3AoKTsgfVxuICAgIGVsc2UgeyBicmVhayB9XG4gIH1cbn1cblxuLy8gRmluZCB0aGUgdG9wIGNoYW5nZSBldmVudCBpbiB0aGUgaGlzdG9yeS4gUG9wIG9mZiBzZWxlY3Rpb25cbi8vIGV2ZW50cyB0aGF0IGFyZSBpbiB0aGUgd2F5LlxuZnVuY3Rpb24gbGFzdENoYW5nZUV2ZW50KGhpc3QsIGZvcmNlKSB7XG4gIGlmIChmb3JjZSkge1xuICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QuZG9uZSk7XG4gICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCAmJiAhbHN0KGhpc3QuZG9uZSkucmFuZ2VzKSB7XG4gICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gIH0gZWxzZSBpZiAoaGlzdC5kb25lLmxlbmd0aCA+IDEgJiYgIWhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMl0ucmFuZ2VzKSB7XG4gICAgaGlzdC5kb25lLnBvcCgpO1xuICAgIHJldHVybiBsc3QoaGlzdC5kb25lKVxuICB9XG59XG5cbi8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJnZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW5cbi8vIGEgc2luZ2xlIG9wZXJhdGlvbiwgb3IgYXJlIGNsb3NlIHRvZ2V0aGVyIHdpdGggYW4gb3JpZ2luIHRoYXRcbi8vIGFsbG93cyBtZXJnaW5nIChzdGFydGluZyB3aXRoIFwiK1wiKSBpbnRvIGEgc2luZ2xlIGV2ZW50LlxuZnVuY3Rpb24gYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgb3BJZCkge1xuICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5O1xuICBoaXN0LnVuZG9uZS5sZW5ndGggPSAwO1xuICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyO1xuICB2YXIgbGFzdDtcblxuICBpZiAoKGhpc3QubGFzdE9wID09IG9wSWQgfHxcbiAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2luICYmXG4gICAgICAgKChjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSBcIitcIiAmJiBoaXN0Lmxhc3RNb2RUaW1lID4gdGltZSAtIChkb2MuY20gPyBkb2MuY20ub3B0aW9ucy5oaXN0b3J5RXZlbnREZWxheSA6IDUwMCkpIHx8XG4gICAgICAgIGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09IFwiKlwiKSkgJiZcbiAgICAgIChjdXIgPSBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgaGlzdC5sYXN0T3AgPT0gb3BJZCkpKSB7XG4gICAgLy8gTWVyZ2UgdGhpcyBjaGFuZ2UgaW50byB0aGUgbGFzdCBldmVudFxuICAgIGxhc3QgPSBsc3QoY3VyLmNoYW5nZXMpO1xuICAgIGlmIChjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZyb20sIGxhc3QudG8pID09IDApIHtcbiAgICAgIC8vIE9wdGltaXplZCBjYXNlIGZvciBzaW1wbGUgaW5zZXJ0aW9uIC0tIGRvbid0IHdhbnQgdG8gYWRkXG4gICAgICAvLyBuZXcgY2hhbmdlc2V0cyBmb3IgZXZlcnkgY2hhcmFjdGVyIHR5cGVkXG4gICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBuZXcgc3ViLWV2ZW50XG4gICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBldmVudC5cbiAgICB2YXIgYmVmb3JlID0gbHN0KGhpc3QuZG9uZSk7XG4gICAgaWYgKCFiZWZvcmUgfHwgIWJlZm9yZS5yYW5nZXMpXG4gICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLnNlbCwgaGlzdC5kb25lKTsgfVxuICAgIGN1ciA9IHtjaGFuZ2VzOiBbaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpXSxcbiAgICAgICAgICAgZ2VuZXJhdGlvbjogaGlzdC5nZW5lcmF0aW9ufTtcbiAgICBoaXN0LmRvbmUucHVzaChjdXIpO1xuICAgIHdoaWxlIChoaXN0LmRvbmUubGVuZ3RoID4gaGlzdC51bmRvRGVwdGgpIHtcbiAgICAgIGhpc3QuZG9uZS5zaGlmdCgpO1xuICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSB7IGhpc3QuZG9uZS5zaGlmdCgpOyB9XG4gICAgfVxuICB9XG4gIGhpc3QuZG9uZS5wdXNoKHNlbEFmdGVyKTtcbiAgaGlzdC5nZW5lcmF0aW9uID0gKytoaXN0Lm1heEdlbmVyYXRpb247XG4gIGhpc3QubGFzdE1vZFRpbWUgPSBoaXN0Lmxhc3RTZWxUaW1lID0gdGltZTtcbiAgaGlzdC5sYXN0T3AgPSBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7XG4gIGhpc3QubGFzdE9yaWdpbiA9IGhpc3QubGFzdFNlbE9yaWdpbiA9IGNoYW5nZS5vcmlnaW47XG5cbiAgaWYgKCFsYXN0KSB7IHNpZ25hbChkb2MsIFwiaGlzdG9yeUFkZGVkXCIpOyB9XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIHByZXYsIHNlbCkge1xuICB2YXIgY2ggPSBvcmlnaW4uY2hhckF0KDApO1xuICByZXR1cm4gY2ggPT0gXCIqXCIgfHxcbiAgICBjaCA9PSBcIitcIiAmJlxuICAgIHByZXYucmFuZ2VzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJlxuICAgIHByZXYuc29tZXRoaW5nU2VsZWN0ZWQoKSA9PSBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSAmJlxuICAgIG5ldyBEYXRlIC0gZG9jLmhpc3RvcnkubGFzdFNlbFRpbWUgPD0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKVxufVxuXG4vLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzXG4vLyB0aGUgcGVuZGluZyBzZWxlY3Rpb24gaW4gdGhlIGhpc3RvcnksIGFuZCBwdXNoZXMgdGhlIG9sZCBwZW5kaW5nXG4vLyBzZWxlY3Rpb24gaW50byB0aGUgJ2RvbmUnIGFycmF5IHdoZW4gaXQgd2FzIHNpZ25pZmljYW50bHlcbi8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywgZW1wdGluZXNzLCBvciB0aW1lKS5cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblRvSGlzdG9yeShkb2MsIHNlbCwgb3BJZCwgb3B0aW9ucykge1xuICB2YXIgaGlzdCA9IGRvYy5oaXN0b3J5LCBvcmlnaW4gPSBvcHRpb25zICYmIG9wdGlvbnMub3JpZ2luO1xuXG4gIC8vIEEgbmV3IGV2ZW50IGlzIHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoXG4gIC8vIHRoZSBjdXJyZW50LCBvciB0aGUgb3JpZ2lucyBkb24ndCBhbGxvdyBtYXRjaGluZy4gT3JpZ2luc1xuICAvLyBzdGFydGluZyB3aXRoICogYXJlIGFsd2F5cyBtZXJnZWQsIHRob3NlIHN0YXJ0aW5nIHdpdGggKyBhcmVcbiAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRoZXIgaW4gdGltZS5cbiAgaWYgKG9wSWQgPT0gaGlzdC5sYXN0U2VsT3AgfHxcbiAgICAgIChvcmlnaW4gJiYgaGlzdC5sYXN0U2VsT3JpZ2luID09IG9yaWdpbiAmJlxuICAgICAgIChoaXN0Lmxhc3RNb2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2luID09IG9yaWdpbiB8fFxuICAgICAgICBzZWxlY3Rpb25FdmVudENhbkJlTWVyZ2VkKGRvYywgb3JpZ2luLCBsc3QoaGlzdC5kb25lKSwgc2VsKSkpKVxuICAgIHsgaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGggLSAxXSA9IHNlbDsgfVxuICBlbHNlXG4gICAgeyBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KHNlbCwgaGlzdC5kb25lKTsgfVxuXG4gIGhpc3QubGFzdFNlbFRpbWUgPSArbmV3IERhdGU7XG4gIGhpc3QubGFzdFNlbE9yaWdpbiA9IG9yaWdpbjtcbiAgaGlzdC5sYXN0U2VsT3AgPSBvcElkO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNsZWFyUmVkbyAhPT0gZmFsc2UpXG4gICAgeyBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LnVuZG9uZSk7IH1cbn1cblxuZnVuY3Rpb24gcHVzaFNlbGVjdGlvblRvSGlzdG9yeShzZWwsIGRlc3QpIHtcbiAgdmFyIHRvcCA9IGxzdChkZXN0KTtcbiAgaWYgKCEodG9wICYmIHRvcC5yYW5nZXMgJiYgdG9wLmVxdWFscyhzZWwpKSlcbiAgICB7IGRlc3QucHVzaChzZWwpOyB9XG59XG5cbi8vIFVzZWQgdG8gc3RvcmUgbWFya2VkIHNwYW4gaW5mb3JtYXRpb24gaW4gdGhlIGhpc3RvcnkuXG5mdW5jdGlvbiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgY2hhbmdlLCBmcm9tLCB0bykge1xuICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbXCJzcGFuc19cIiArIGRvYy5pZF0sIG4gPSAwO1xuICBkb2MuaXRlcihNYXRoLm1heChkb2MuZmlyc3QsIGZyb20pLCBNYXRoLm1pbihkb2MuZmlyc3QgKyBkb2Muc2l6ZSwgdG8pLCBmdW5jdGlvbiAobGluZSkge1xuICAgIGlmIChsaW5lLm1hcmtlZFNwYW5zKVxuICAgICAgeyAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7IH1cbiAgICArK247XG4gIH0pO1xufVxuXG4vLyBXaGVuIHVuL3JlLWRvaW5nIHJlc3RvcmVzIHRleHQgY29udGFpbmluZyBtYXJrZWQgc3BhbnMsIHRob3NlXG4vLyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5IGNsZWFyZWQgc2hvdWxkIG5vdCBiZSByZXN0b3JlZC5cbmZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFucykge1xuICBpZiAoIXNwYW5zKSB7IHJldHVybiBudWxsIH1cbiAgdmFyIG91dDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgIGlmIChzcGFuc1tpXS5tYXJrZXIuZXhwbGljaXRseUNsZWFyZWQpIHsgaWYgKCFvdXQpIHsgb3V0ID0gc3BhbnMuc2xpY2UoMCwgaSk7IH0gfVxuICAgIGVsc2UgaWYgKG91dCkgeyBvdXQucHVzaChzcGFuc1tpXSk7IH1cbiAgfVxuICByZXR1cm4gIW91dCA/IHNwYW5zIDogb3V0Lmxlbmd0aCA/IG91dCA6IG51bGxcbn1cblxuLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUgb2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuXG5mdW5jdGlvbiBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSkge1xuICB2YXIgZm91bmQgPSBjaGFuZ2VbXCJzcGFuc19cIiArIGRvYy5pZF07XG4gIGlmICghZm91bmQpIHsgcmV0dXJuIG51bGwgfVxuICB2YXIgbncgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2UudGV4dC5sZW5ndGg7ICsraSlcbiAgICB7IG53LnB1c2gocmVtb3ZlQ2xlYXJlZFNwYW5zKGZvdW5kW2ldKSk7IH1cbiAgcmV0dXJuIG53XG59XG5cbi8vIFVzZWQgZm9yIHVuL3JlLWRvaW5nIGNoYW5nZXMgZnJvbSB0aGUgaGlzdG9yeS4gQ29tYmluZXMgdGhlXG4vLyByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBleGlzdGluZyBzcGFucyB3aXRoIHRoZSBzZXQgb2Ygc3BhbnMgdGhhdFxuLy8gZXhpc3RlZCBpbiB0aGUgaGlzdG9yeSAoc28gdGhhdCBkZWxldGluZyBhcm91bmQgYSBzcGFuIGFuZCB0aGVuXG4vLyB1bmRvaW5nIGJyaW5ncyBiYWNrIHRoZSBzcGFuKS5cbmZ1bmN0aW9uIG1lcmdlT2xkU3BhbnMoZG9jLCBjaGFuZ2UpIHtcbiAgdmFyIG9sZCA9IGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKTtcbiAgdmFyIHN0cmV0Y2hlZCA9IHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpO1xuICBpZiAoIW9sZCkgeyByZXR1cm4gc3RyZXRjaGVkIH1cbiAgaWYgKCFzdHJldGNoZWQpIHsgcmV0dXJuIG9sZCB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgb2xkQ3VyID0gb2xkW2ldLCBzdHJldGNoQ3VyID0gc3RyZXRjaGVkW2ldO1xuICAgIGlmIChvbGRDdXIgJiYgc3RyZXRjaEN1cikge1xuICAgICAgc3BhbnM6IGZvciAodmFyIGogPSAwOyBqIDwgc3RyZXRjaEN1ci5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgc3BhbiA9IHN0cmV0Y2hDdXJbal07XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb2xkQ3VyLmxlbmd0aDsgKytrKVxuICAgICAgICAgIHsgaWYgKG9sZEN1cltrXS5tYXJrZXIgPT0gc3Bhbi5tYXJrZXIpIHsgY29udGludWUgc3BhbnMgfSB9XG4gICAgICAgIG9sZEN1ci5wdXNoKHNwYW4pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RyZXRjaEN1cikge1xuICAgICAgb2xkW2ldID0gc3RyZXRjaEN1cjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9sZFxufVxuXG4vLyBVc2VkIGJvdGggdG8gcHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwgd2hlblxuLy8gZGV0YWNoaW5nIGEgZG9jdW1lbnQsIHRvIHNwbGl0IHRoZSBoaXN0b3J5IGluIHR3b1xuZnVuY3Rpb24gY29weUhpc3RvcnlBcnJheShldmVudHMsIG5ld0dyb3VwLCBpbnN0YW50aWF0ZVNlbCkge1xuICB2YXIgY29weSA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBldmVudCA9IGV2ZW50c1tpXTtcbiAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICBjb3B5LnB1c2goaW5zdGFudGlhdGVTZWwgPyBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5LmNhbGwoZXZlbnQpIDogZXZlbnQpO1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgdmFyIGNoYW5nZXMgPSBldmVudC5jaGFuZ2VzLCBuZXdDaGFuZ2VzID0gW107XG4gICAgY29weS5wdXNoKHtjaGFuZ2VzOiBuZXdDaGFuZ2VzfSk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytqKSB7XG4gICAgICB2YXIgY2hhbmdlID0gY2hhbmdlc1tqXSwgbSA9ICh2b2lkIDApO1xuICAgICAgbmV3Q2hhbmdlcy5wdXNoKHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5nZS50bywgdGV4dDogY2hhbmdlLnRleHR9KTtcbiAgICAgIGlmIChuZXdHcm91cCkgeyBmb3IgKHZhciBwcm9wIGluIGNoYW5nZSkgeyBpZiAobSA9IHByb3AubWF0Y2goL15zcGFuc18oXFxkKykkLykpIHtcbiAgICAgICAgaWYgKGluZGV4T2YobmV3R3JvdXAsIE51bWJlcihtWzFdKSkgPiAtMSkge1xuICAgICAgICAgIGxzdChuZXdDaGFuZ2VzKVtwcm9wXSA9IGNoYW5nZVtwcm9wXTtcbiAgICAgICAgICBkZWxldGUgY2hhbmdlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IH0gfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29weVxufVxuXG4vLyBUaGUgJ3Njcm9sbCcgcGFyYW1ldGVyIGdpdmVuIHRvIG1hbnkgb2YgdGhlc2UgaW5kaWNhdGVkIHdoZXRoZXJcbi8vIHRoZSBuZXcgY3Vyc29yIHBvc2l0aW9uIHNob3VsZCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcgYWZ0ZXJcbi8vIG1vZGlmeWluZyB0aGUgc2VsZWN0aW9uLlxuXG4vLyBJZiBzaGlmdCBpcyBoZWxkIG9yIHRoZSBleHRlbmQgZmxhZyBpcyBzZXQsIGV4dGVuZHMgYSByYW5nZSB0b1xuLy8gaW5jbHVkZSBhIGdpdmVuIHBvc2l0aW9uIChhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBwb3NpdGlvbikuXG4vLyBPdGhlcndpc2UsIHNpbXBseSByZXR1cm5zIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMuXG4vLyBVc2VkIGZvciBjdXJzb3IgbW90aW9uIGFuZCBzdWNoLlxuZnVuY3Rpb24gZXh0ZW5kUmFuZ2UocmFuZ2UsIGhlYWQsIG90aGVyLCBleHRlbmQpIHtcbiAgaWYgKGV4dGVuZCkge1xuICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3I7XG4gICAgaWYgKG90aGVyKSB7XG4gICAgICB2YXIgcG9zQmVmb3JlID0gY21wKGhlYWQsIGFuY2hvcikgPCAwO1xuICAgICAgaWYgKHBvc0JlZm9yZSAhPSAoY21wKG90aGVyLCBhbmNob3IpIDwgMCkpIHtcbiAgICAgICAgYW5jaG9yID0gaGVhZDtcbiAgICAgICAgaGVhZCA9IG90aGVyO1xuICAgICAgfSBlbHNlIGlmIChwb3NCZWZvcmUgIT0gKGNtcChoZWFkLCBvdGhlcikgPCAwKSkge1xuICAgICAgICBoZWFkID0gb3RoZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgUmFuZ2Uob3RoZXIgfHwgaGVhZCwgaGVhZClcbiAgfVxufVxuXG4vLyBFeHRlbmQgdGhlIHByaW1hcnkgc2VsZWN0aW9uIHJhbmdlLCBkaXNjYXJkIHRoZSByZXN0LlxuZnVuY3Rpb24gZXh0ZW5kU2VsZWN0aW9uKGRvYywgaGVhZCwgb3RoZXIsIG9wdGlvbnMsIGV4dGVuZCkge1xuICBpZiAoZXh0ZW5kID09IG51bGwpIHsgZXh0ZW5kID0gZG9jLmNtICYmIChkb2MuY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKTsgfVxuICBzZXRTZWxlY3Rpb24oZG9jLCBuZXcgU2VsZWN0aW9uKFtleHRlbmRSYW5nZShkb2Muc2VsLnByaW1hcnkoKSwgaGVhZCwgb3RoZXIsIGV4dGVuZCldLCAwKSwgb3B0aW9ucyk7XG59XG5cbi8vIEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVjdGlvbnMgd2l0aCBsZW5ndGhcbi8vIGVxdWFsIHRoZSBudW1iZXIgb2Ygc2VsZWN0aW9ucylcbmZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbnMoZG9jLCBoZWFkcywgb3B0aW9ucykge1xuICB2YXIgb3V0ID0gW107XG4gIHZhciBleHRlbmQgPSBkb2MuY20gJiYgKGRvYy5jbS5kaXNwbGF5LnNoaWZ0IHx8IGRvYy5leHRlbmQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgIHsgb3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ldLCBudWxsLCBleHRlbmQpOyB9XG4gIHZhciBuZXdTZWwgPSBub3JtYWxpemVTZWxlY3Rpb24ob3V0LCBkb2Muc2VsLnByaW1JbmRleCk7XG4gIHNldFNlbGVjdGlvbihkb2MsIG5ld1NlbCwgb3B0aW9ucyk7XG59XG5cbi8vIFVwZGF0ZXMgYSBzaW5nbGUgcmFuZ2UgaW4gdGhlIHNlbGVjdGlvbi5cbmZ1bmN0aW9uIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykge1xuICB2YXIgcmFuZ2VzID0gZG9jLnNlbC5yYW5nZXMuc2xpY2UoMCk7XG4gIHJhbmdlc1tpXSA9IHJhbmdlO1xuICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCBkb2Muc2VsLnByaW1JbmRleCksIG9wdGlvbnMpO1xufVxuXG4vLyBSZXNldCB0aGUgc2VsZWN0aW9uIHRvIGEgc2luZ2xlIHJhbmdlLlxuZnVuY3Rpb24gc2V0U2ltcGxlU2VsZWN0aW9uKGRvYywgYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gIHNldFNlbGVjdGlvbihkb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBvcHRpb25zKTtcbn1cblxuLy8gR2l2ZSBiZWZvcmVTZWxlY3Rpb25DaGFuZ2UgaGFuZGxlcnMgYSBjaGFuZ2UgdG8gaW5mbHVlbmNlIGFcbi8vIHNlbGVjdGlvbiB1cGRhdGUuXG5mdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgdmFyIG9iaiA9IHtcbiAgICByYW5nZXM6IHNlbC5yYW5nZXMsXG4gICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB0aGlzLnJhbmdlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgdGhpcyQxLnJhbmdlc1tpXSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgcmFuZ2VzW2ldLmFuY2hvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQb3MoZG9jLCByYW5nZXNbaV0uaGVhZCkpOyB9XG4gICAgfSxcbiAgICBvcmlnaW46IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW5cbiAgfTtcbiAgc2lnbmFsKGRvYywgXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIiwgZG9jLCBvYmopO1xuICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGRvYy5jbSwgb2JqKTsgfVxuICBpZiAob2JqLnJhbmdlcyAhPSBzZWwucmFuZ2VzKSB7IHJldHVybiBub3JtYWxpemVTZWxlY3Rpb24ob2JqLnJhbmdlcywgb2JqLnJhbmdlcy5sZW5ndGggLSAxKSB9XG4gIGVsc2UgeyByZXR1cm4gc2VsIH1cbn1cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgdmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBsYXN0ID0gbHN0KGRvbmUpO1xuICBpZiAobGFzdCAmJiBsYXN0LnJhbmdlcykge1xuICAgIGRvbmVbZG9uZS5sZW5ndGggLSAxXSA9IHNlbDtcbiAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gU2V0IGEgbmV3IHNlbGVjdGlvbi5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucykge1xuICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICBhZGRTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLCBkb2Muc2VsLCBkb2MuY20gPyBkb2MuY20uY3VyT3AuaWQgOiBOYU4sIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgaWYgKGhhc0hhbmRsZXIoZG9jLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiKSB8fCBkb2MuY20gJiYgaGFzSGFuZGxlcihkb2MuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIpKVxuICAgIHsgc2VsID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsLCBvcHRpb25zKTsgfVxuXG4gIHZhciBiaWFzID0gb3B0aW9ucyAmJiBvcHRpb25zLmJpYXMgfHxcbiAgICAoY21wKHNlbC5wcmltYXJ5KCkuaGVhZCwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCkgPCAwID8gLTEgOiAxKTtcbiAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIHRydWUpKTtcblxuICBpZiAoIShvcHRpb25zICYmIG9wdGlvbnMuc2Nyb2xsID09PSBmYWxzZSkgJiYgZG9jLmNtKVxuICAgIHsgZW5zdXJlQ3Vyc29yVmlzaWJsZShkb2MuY20pOyB9XG59XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbklubmVyKGRvYywgc2VsKSB7XG4gIGlmIChzZWwuZXF1YWxzKGRvYy5zZWwpKSB7IHJldHVybiB9XG5cbiAgZG9jLnNlbCA9IHNlbDtcblxuICBpZiAoZG9jLmNtKSB7XG4gICAgZG9jLmNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gZG9jLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuICAgIHNpZ25hbEN1cnNvckFjdGl2aXR5KGRvYy5jbSk7XG4gIH1cbiAgc2lnbmFsTGF0ZXIoZG9jLCBcImN1cnNvckFjdGl2aXR5XCIsIGRvYyk7XG59XG5cbi8vIFZlcmlmeSB0aGF0IHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljXG4vLyBtYXJrZWQgcmFuZ2VzLlxuZnVuY3Rpb24gcmVDaGVja1NlbGVjdGlvbihkb2MpIHtcbiAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBkb2Muc2VsLCBudWxsLCBmYWxzZSkpO1xufVxuXG4vLyBSZXR1cm4gYSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5vdCBwYXJ0aWFsbHkgc2VsZWN0IGFueSBhdG9taWNcbi8vIHJhbmdlcy5cbmZ1bmN0aW9uIHNraXBBdG9taWNJblNlbGVjdGlvbihkb2MsIHNlbCwgYmlhcywgbWF5Q2xlYXIpIHtcbiAgdmFyIG91dDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJhbmdlID0gc2VsLnJhbmdlc1tpXTtcbiAgICB2YXIgb2xkID0gc2VsLnJhbmdlcy5sZW5ndGggPT0gZG9jLnNlbC5yYW5nZXMubGVuZ3RoICYmIGRvYy5zZWwucmFuZ2VzW2ldO1xuICAgIHZhciBuZXdBbmNob3IgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuYW5jaG9yLCBvbGQgJiYgb2xkLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIpO1xuICAgIHZhciBuZXdIZWFkID0gc2tpcEF0b21pYyhkb2MsIHJhbmdlLmhlYWQsIG9sZCAmJiBvbGQuaGVhZCwgYmlhcywgbWF5Q2xlYXIpO1xuICAgIGlmIChvdXQgfHwgbmV3QW5jaG9yICE9IHJhbmdlLmFuY2hvciB8fCBuZXdIZWFkICE9IHJhbmdlLmhlYWQpIHtcbiAgICAgIGlmICghb3V0KSB7IG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7IH1cbiAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShuZXdBbmNob3IsIG5ld0hlYWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0ID8gbm9ybWFsaXplU2VsZWN0aW9uKG91dCwgc2VsLnByaW1JbmRleCkgOiBzZWxcbn1cblxuZnVuY3Rpb24gc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHtcbiAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpO1xuICBpZiAobGluZS5tYXJrZWRTcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLCBtID0gc3AubWFya2VyO1xuICAgIGlmICgoc3AuZnJvbSA9PSBudWxsIHx8IChtLmluY2x1c2l2ZUxlZnQgPyBzcC5mcm9tIDw9IHBvcy5jaCA6IHNwLmZyb20gPCBwb3MuY2gpKSAmJlxuICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCAobS5pbmNsdXNpdmVSaWdodCA/IHNwLnRvID49IHBvcy5jaCA6IHNwLnRvID4gcG9zLmNoKSkpIHtcbiAgICAgIGlmIChtYXlDbGVhcikge1xuICAgICAgICBzaWduYWwobSwgXCJiZWZvcmVDdXJzb3JFbnRlclwiKTtcbiAgICAgICAgaWYgKG0uZXhwbGljaXRseUNsZWFyZWQpIHtcbiAgICAgICAgICBpZiAoIWxpbmUubWFya2VkU3BhbnMpIHsgYnJlYWsgfVxuICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWV9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbS5hdG9taWMpIHsgY29udGludWUgfVxuXG4gICAgICBpZiAob2xkUG9zKSB7XG4gICAgICAgIHZhciBuZWFyID0gbS5maW5kKGRpciA8IDAgPyAxIDogLTEpLCBkaWZmID0gKHZvaWQgMCk7XG4gICAgICAgIGlmIChkaXIgPCAwID8gbS5pbmNsdXNpdmVSaWdodCA6IG0uaW5jbHVzaXZlTGVmdClcbiAgICAgICAgICB7IG5lYXIgPSBtb3ZlUG9zKGRvYywgbmVhciwgLWRpciwgbmVhciAmJiBuZWFyLmxpbmUgPT0gcG9zLmxpbmUgPyBsaW5lIDogbnVsbCk7IH1cbiAgICAgICAgaWYgKG5lYXIgJiYgbmVhci5saW5lID09IHBvcy5saW5lICYmIChkaWZmID0gY21wKG5lYXIsIG9sZFBvcykpICYmIChkaXIgPCAwID8gZGlmZiA8IDAgOiBkaWZmID4gMCkpXG4gICAgICAgICAgeyByZXR1cm4gc2tpcEF0b21pY0lubmVyKGRvYywgbmVhciwgcG9zLCBkaXIsIG1heUNsZWFyKSB9XG4gICAgICB9XG5cbiAgICAgIHZhciBmYXIgPSBtLmZpbmQoZGlyIDwgMCA/IC0xIDogMSk7XG4gICAgICBpZiAoZGlyIDwgMCA/IG0uaW5jbHVzaXZlTGVmdCA6IG0uaW5jbHVzaXZlUmlnaHQpXG4gICAgICAgIHsgZmFyID0gbW92ZVBvcyhkb2MsIGZhciwgZGlyLCBmYXIubGluZSA9PSBwb3MubGluZSA/IGxpbmUgOiBudWxsKTsgfVxuICAgICAgcmV0dXJuIGZhciA/IHNraXBBdG9taWNJbm5lcihkb2MsIGZhciwgcG9zLCBkaXIsIG1heUNsZWFyKSA6IG51bGxcbiAgICB9XG4gIH0gfVxuICByZXR1cm4gcG9zXG59XG5cbi8vIEVuc3VyZSBhIGdpdmVuIHBvc2l0aW9uIGlzIG5vdCBpbnNpZGUgYW4gYXRvbWljIHJhbmdlLlxuZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBiaWFzLCBtYXlDbGVhcikge1xuICB2YXIgZGlyID0gYmlhcyB8fCAxO1xuICB2YXIgZm91bmQgPSBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgZGlyLCBtYXlDbGVhcikgfHxcbiAgICAgICghbWF5Q2xlYXIgJiYgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgdHJ1ZSkpIHx8XG4gICAgICBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgLWRpciwgbWF5Q2xlYXIpIHx8XG4gICAgICAoIW1heUNsZWFyICYmIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCAtZGlyLCB0cnVlKSk7XG4gIGlmICghZm91bmQpIHtcbiAgICBkb2MuY2FudEVkaXQgPSB0cnVlO1xuICAgIHJldHVybiBQb3MoZG9jLmZpcnN0LCAwKVxuICB9XG4gIHJldHVybiBmb3VuZFxufVxuXG5mdW5jdGlvbiBtb3ZlUG9zKGRvYywgcG9zLCBkaXIsIGxpbmUpIHtcbiAgaWYgKGRpciA8IDAgJiYgcG9zLmNoID09IDApIHtcbiAgICBpZiAocG9zLmxpbmUgPiBkb2MuZmlyc3QpIHsgcmV0dXJuIGNsaXBQb3MoZG9jLCBQb3MocG9zLmxpbmUgLSAxKSkgfVxuICAgIGVsc2UgeyByZXR1cm4gbnVsbCB9XG4gIH0gZWxzZSBpZiAoZGlyID4gMCAmJiBwb3MuY2ggPT0gKGxpbmUgfHwgZ2V0TGluZShkb2MsIHBvcy5saW5lKSkudGV4dC5sZW5ndGgpIHtcbiAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpIHsgcmV0dXJuIFBvcyhwb3MubGluZSArIDEsIDApIH1cbiAgICBlbHNlIHsgcmV0dXJuIG51bGwgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgUG9zKHBvcy5saW5lLCBwb3MuY2ggKyBkaXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0QWxsKGNtKSB7XG4gIGNtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xsKTtcbn1cblxuLy8gVVBEQVRJTkdcblxuLy8gQWxsb3cgXCJiZWZvcmVDaGFuZ2VcIiBldmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2VcbmZ1bmN0aW9uIGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdXBkYXRlKSB7XG4gIHZhciBvYmogPSB7XG4gICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgIGZyb206IGNoYW5nZS5mcm9tLFxuICAgIHRvOiBjaGFuZ2UudG8sXG4gICAgdGV4dDogY2hhbmdlLnRleHQsXG4gICAgb3JpZ2luOiBjaGFuZ2Uub3JpZ2luLFxuICAgIGNhbmNlbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gb2JqLmNhbmNlbGVkID0gdHJ1ZTsgfVxuICB9O1xuICBpZiAodXBkYXRlKSB7IG9iai51cGRhdGUgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHRleHQsIG9yaWdpbikge1xuICAgIGlmIChmcm9tKSB7IG9iai5mcm9tID0gY2xpcFBvcyhkb2MsIGZyb20pOyB9XG4gICAgaWYgKHRvKSB7IG9iai50byA9IGNsaXBQb3MoZG9jLCB0byk7IH1cbiAgICBpZiAodGV4dCkgeyBvYmoudGV4dCA9IHRleHQ7IH1cbiAgICBpZiAob3JpZ2luICE9PSB1bmRlZmluZWQpIHsgb2JqLm9yaWdpbiA9IG9yaWdpbjsgfVxuICB9OyB9XG4gIHNpZ25hbChkb2MsIFwiYmVmb3JlQ2hhbmdlXCIsIGRvYywgb2JqKTtcbiAgaWYgKGRvYy5jbSkgeyBzaWduYWwoZG9jLmNtLCBcImJlZm9yZUNoYW5nZVwiLCBkb2MuY20sIG9iaik7IH1cblxuICBpZiAob2JqLmNhbmNlbGVkKSB7IHJldHVybiBudWxsIH1cbiAgcmV0dXJuIHtmcm9tOiBvYmouZnJvbSwgdG86IG9iai50bywgdGV4dDogb2JqLnRleHQsIG9yaWdpbjogb2JqLm9yaWdpbn1cbn1cblxuLy8gQXBwbHkgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCwgYW5kIGFkZCBpdCB0byB0aGUgZG9jdW1lbnQnc1xuLy8gaGlzdG9yeSwgYW5kIHByb3BhZ2F0aW5nIGl0IHRvIGFsbCBsaW5rZWQgZG9jdW1lbnRzLlxuZnVuY3Rpb24gbWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIHtcbiAgaWYgKGRvYy5jbSkge1xuICAgIGlmICghZG9jLmNtLmN1ck9wKSB7IHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlKShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIH1cbiAgICBpZiAoZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHsgcmV0dXJuIH1cbiAgfVxuXG4gIGlmIChoYXNIYW5kbGVyKGRvYywgXCJiZWZvcmVDaGFuZ2VcIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCBcImJlZm9yZUNoYW5nZVwiKSkge1xuICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7XG4gICAgaWYgKCFjaGFuZ2UpIHsgcmV0dXJuIH1cbiAgfVxuXG4gIC8vIFBvc3NpYmx5IHNwbGl0IG9yIHN1cHByZXNzIHRoZSB1cGRhdGUgYmFzZWQgb24gdGhlIHByZXNlbmNlXG4gIC8vIG9mIHJlYWQtb25seSBzcGFucyBpbiBpdHMgcmFuZ2UuXG4gIHZhciBzcGxpdCA9IHNhd1JlYWRPbmx5U3BhbnMgJiYgIWlnbm9yZVJlYWRPbmx5ICYmIHJlbW92ZVJlYWRPbmx5UmFuZ2VzKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7XG4gIGlmIChzcGxpdCkge1xuICAgIGZvciAodmFyIGkgPSBzcGxpdC5sZW5ndGggLSAxOyBpID49IDA7IC0taSlcbiAgICAgIHsgbWFrZUNoYW5nZUlubmVyKGRvYywge2Zyb206IHNwbGl0W2ldLmZyb20sIHRvOiBzcGxpdFtpXS50bywgdGV4dDogaSA/IFtcIlwiXSA6IGNoYW5nZS50ZXh0LCBvcmlnaW46IGNoYW5nZS5vcmlnaW59KTsgfVxuICB9IGVsc2Uge1xuICAgIG1ha2VDaGFuZ2VJbm5lcihkb2MsIGNoYW5nZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKSB7XG4gIGlmIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSAmJiBjaGFuZ2UudGV4dFswXSA9PSBcIlwiICYmIGNtcChjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA9PSAwKSB7IHJldHVybiB9XG4gIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7XG4gIGFkZENoYW5nZVRvSGlzdG9yeShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIGRvYy5jbSA/IGRvYy5jbS5jdXJPcC5pZCA6IE5hTik7XG5cbiAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcbiAgdmFyIHJlYmFzZWQgPSBbXTtcblxuICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYywgc2hhcmVkSGlzdCkge1xuICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkge1xuICAgICAgcmViYXNlSGlzdChkb2MuaGlzdG9yeSwgY2hhbmdlKTtcbiAgICAgIHJlYmFzZWQucHVzaChkb2MuaGlzdG9yeSk7XG4gICAgfVxuICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcbiAgfSk7XG59XG5cbi8vIFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuXG5mdW5jdGlvbiBtYWtlQ2hhbmdlRnJvbUhpc3RvcnkoZG9jLCB0eXBlLCBhbGxvd1NlbGVjdGlvbk9ubHkpIHtcbiAgdmFyIHN1cHByZXNzID0gZG9jLmNtICYmIGRvYy5jbS5zdGF0ZS5zdXBwcmVzc0VkaXRzO1xuICBpZiAoc3VwcHJlc3MgJiYgIWFsbG93U2VsZWN0aW9uT25seSkgeyByZXR1cm4gfVxuXG4gIHZhciBoaXN0ID0gZG9jLmhpc3RvcnksIGV2ZW50LCBzZWxBZnRlciA9IGRvYy5zZWw7XG4gIHZhciBzb3VyY2UgPSB0eXBlID09IFwidW5kb1wiID8gaGlzdC5kb25lIDogaGlzdC51bmRvbmUsIGRlc3QgPSB0eXBlID09IFwidW5kb1wiID8gaGlzdC51bmRvbmUgOiBoaXN0LmRvbmU7XG5cbiAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwteiB3b24ndFxuICAvLyBuZWVkbGVzc2x5IGNsZWFyIHNlbGVjdGlvbiBldmVudHMpXG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICBldmVudCA9IHNvdXJjZVtpXTtcbiAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ID8gZXZlbnQucmFuZ2VzICYmICFldmVudC5lcXVhbHMoZG9jLnNlbCkgOiAhZXZlbnQucmFuZ2VzKVxuICAgICAgeyBicmVhayB9XG4gIH1cbiAgaWYgKGkgPT0gc291cmNlLmxlbmd0aCkgeyByZXR1cm4gfVxuICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBudWxsO1xuXG4gIGZvciAoOzspIHtcbiAgICBldmVudCA9IHNvdXJjZS5wb3AoKTtcbiAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICBwdXNoU2VsZWN0aW9uVG9IaXN0b3J5KGV2ZW50LCBkZXN0KTtcbiAgICAgIGlmIChhbGxvd1NlbGVjdGlvbk9ubHkgJiYgIWV2ZW50LmVxdWFscyhkb2Muc2VsKSkge1xuICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZWxBZnRlciA9IGV2ZW50O1xuICAgIH0gZWxzZSBpZiAoc3VwcHJlc3MpIHtcbiAgICAgIHNvdXJjZS5wdXNoKGV2ZW50KTtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7IGJyZWFrIH1cbiAgfVxuXG4gIC8vIEJ1aWxkIHVwIGEgcmV2ZXJzZSBjaGFuZ2Ugb2JqZWN0IHRvIGFkZCB0byB0aGUgb3Bwb3NpdGUgaGlzdG9yeVxuICAvLyBzdGFjayAocmVkbyB3aGVuIHVuZG9pbmcsIGFuZCB2aWNlIHZlcnNhKS5cbiAgdmFyIGFudGlDaGFuZ2VzID0gW107XG4gIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIsIGRlc3QpO1xuICBkZXN0LnB1c2goe2NoYW5nZXM6IGFudGlDaGFuZ2VzLCBnZW5lcmF0aW9uOiBoaXN0LmdlbmVyYXRpb259KTtcbiAgaGlzdC5nZW5lcmF0aW9uID0gZXZlbnQuZ2VuZXJhdGlvbiB8fCArK2hpc3QubWF4R2VuZXJhdGlvbjtcblxuICB2YXIgZmlsdGVyID0gaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIik7XG5cbiAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGkgKSB7XG4gICAgdmFyIGNoYW5nZSA9IGV2ZW50LmNoYW5nZXNbaV07XG4gICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7XG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCBmYWxzZSkpIHtcbiAgICAgIHNvdXJjZS5sZW5ndGggPSAwO1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgYW50aUNoYW5nZXMucHVzaChoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSkpO1xuXG4gICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkgOiBsc3Qoc291cmNlKTtcbiAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBhZnRlciwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgIGlmICghaSAmJiBkb2MuY20pIHsgZG9jLmNtLnNjcm9sbEludG9WaWV3KHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpfSk7IH1cbiAgICB2YXIgcmViYXNlZCA9IFtdO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBsaW5rZWQgZG9jdW1lbnRzXG4gICAgbGlua2VkRG9jcyhkb2MsIGZ1bmN0aW9uIChkb2MsIHNoYXJlZEhpc3QpIHtcbiAgICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkge1xuICAgICAgICByZWJhc2VIaXN0KGRvYy5oaXN0b3J5LCBjaGFuZ2UpO1xuICAgICAgICByZWJhc2VkLnB1c2goZG9jLmhpc3RvcnkpO1xuICAgICAgfVxuICAgICAgbWFrZUNoYW5nZVNpbmdsZURvYyhkb2MsIGNoYW5nZSwgbnVsbCwgbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkpO1xuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGkkMSA9IGV2ZW50LmNoYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IC0taSQxKSB7XG4gICAgdmFyIHJldHVybmVkID0gbG9vcCggaSQxICk7XG5cbiAgICBpZiAoIHJldHVybmVkICkgcmV0dXJuIHJldHVybmVkLnY7XG4gIH1cbn1cblxuLy8gU3ViLXZpZXdzIG5lZWQgdGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkXG4vLyBhYm92ZSBvciBiZWxvdyB0aGVtIGluIHRoZSBwYXJlbnQgZG9jdW1lbnQuXG5mdW5jdGlvbiBzaGlmdERvYyhkb2MsIGRpc3RhbmNlKSB7XG4gIGlmIChkaXN0YW5jZSA9PSAwKSB7IHJldHVybiB9XG4gIGRvYy5maXJzdCArPSBkaXN0YW5jZTtcbiAgZG9jLnNlbCA9IG5ldyBTZWxlY3Rpb24obWFwKGRvYy5zZWwucmFuZ2VzLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIG5ldyBSYW5nZShcbiAgICBQb3MocmFuZ2UuYW5jaG9yLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuYW5jaG9yLmNoKSxcbiAgICBQb3MocmFuZ2UuaGVhZC5saW5lICsgZGlzdGFuY2UsIHJhbmdlLmhlYWQuY2gpXG4gICk7IH0pLCBkb2Muc2VsLnByaW1JbmRleCk7XG4gIGlmIChkb2MuY20pIHtcbiAgICByZWdDaGFuZ2UoZG9jLmNtLCBkb2MuZmlyc3QsIGRvYy5maXJzdCAtIGRpc3RhbmNlLCBkaXN0YW5jZSk7XG4gICAgZm9yICh2YXIgZCA9IGRvYy5jbS5kaXNwbGF5LCBsID0gZC52aWV3RnJvbTsgbCA8IGQudmlld1RvOyBsKyspXG4gICAgICB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBsLCBcImd1dHRlclwiKTsgfVxuICB9XG59XG5cbi8vIE1vcmUgbG93ZXItbGV2ZWwgY2hhbmdlIGZ1bmN0aW9uLCBoYW5kbGluZyBvbmx5IGEgc2luZ2xlIGRvY3VtZW50XG4vLyAobm90IGxpbmtlZCBvbmVzKS5cbmZ1bmN0aW9uIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykge1xuICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApXG4gICAgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZVNpbmdsZURvYykoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzcGFucykgfVxuXG4gIGlmIChjaGFuZ2UudG8ubGluZSA8IGRvYy5maXJzdCkge1xuICAgIHNoaWZ0RG9jKGRvYywgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSB7IHJldHVybiB9XG5cbiAgLy8gQ2xpcCB0aGUgY2hhbmdlIHRvIHRoZSBzaXplIG9mIHRoaXMgZG9jXG4gIGlmIChjaGFuZ2UuZnJvbS5saW5lIDwgZG9jLmZpcnN0KSB7XG4gICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTtcbiAgICBzaGlmdERvYyhkb2MsIHNoaWZ0KTtcbiAgICBjaGFuZ2UgPSB7ZnJvbTogUG9zKGRvYy5maXJzdCwgMCksIHRvOiBQb3MoY2hhbmdlLnRvLmxpbmUgKyBzaGlmdCwgY2hhbmdlLnRvLmNoKSxcbiAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59O1xuICB9XG4gIHZhciBsYXN0ID0gZG9jLmxhc3RMaW5lKCk7XG4gIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHtcbiAgICBjaGFuZ2UgPSB7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgdGV4dDogW2NoYW5nZS50ZXh0WzBdXSwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufTtcbiAgfVxuXG4gIGNoYW5nZS5yZW1vdmVkID0gZ2V0QmV0d2Vlbihkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pO1xuXG4gIGlmICghc2VsQWZ0ZXIpIHsgc2VsQWZ0ZXIgPSBjb21wdXRlU2VsQWZ0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpOyB9XG4gIGlmIChkb2MuY20pIHsgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7IH1cbiAgZWxzZSB7IHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMpOyB9XG4gIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbEFmdGVyLCBzZWxfZG9udFNjcm9sbCk7XG59XG5cbi8vIEhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gb2YgYSBjaGFuZ2UgdG8gYSBkb2N1bWVudCB3aXRoIHRoZSBlZGl0b3Jcbi8vIHRoYXQgdGhpcyBkb2N1bWVudCBpcyBwYXJ0IG9mLlxuZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7XG4gIHZhciBkb2MgPSBjbS5kb2MsIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBmcm9tID0gY2hhbmdlLmZyb20sIHRvID0gY2hhbmdlLnRvO1xuXG4gIHZhciByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZSwgY2hlY2tXaWR0aFN0YXJ0ID0gZnJvbS5saW5lO1xuICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgY2hlY2tXaWR0aFN0YXJ0ID0gbGluZU5vKHZpc3VhbExpbmUoZ2V0TGluZShkb2MsIGZyb20ubGluZSkpKTtcbiAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUgPT0gZGlzcGxheS5tYXhMaW5lKSB7XG4gICAgICAgIHJlY29tcHV0ZU1heExlbmd0aCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZG9jLnNlbC5jb250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKVxuICAgIHsgc2lnbmFsQ3Vyc29yQWN0aXZpdHkoY20pOyB9XG5cbiAgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucywgZXN0aW1hdGVIZWlnaHQoY20pKTtcblxuICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCBmcm9tLmxpbmUgKyBjaGFuZ2UudGV4dC5sZW5ndGgsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgbGVuID0gbGluZUxlbmd0aChsaW5lKTtcbiAgICAgIGlmIChsZW4gPiBkaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgZGlzcGxheS5tYXhMaW5lID0gbGluZTtcbiAgICAgICAgZGlzcGxheS5tYXhMaW5lTGVuZ3RoID0gbGVuO1xuICAgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgeyBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsgfVxuICB9XG5cbiAgcmV0cmVhdEZyb250aWVyKGRvYywgZnJvbS5saW5lKTtcbiAgc3RhcnRXb3JrZXIoY20sIDQwMCk7XG5cbiAgdmFyIGxlbmRpZmYgPSBjaGFuZ2UudGV4dC5sZW5ndGggLSAodG8ubGluZSAtIGZyb20ubGluZSkgLSAxO1xuICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheVxuICBpZiAoY2hhbmdlLmZ1bGwpXG4gICAgeyByZWdDaGFuZ2UoY20pOyB9XG4gIGVsc2UgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpXG4gICAgeyByZWdMaW5lQ2hhbmdlKGNtLCBmcm9tLmxpbmUsIFwidGV4dFwiKTsgfVxuICBlbHNlXG4gICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOyB9XG5cbiAgdmFyIGNoYW5nZXNIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VzXCIpLCBjaGFuZ2VIYW5kbGVyID0gaGFzSGFuZGxlcihjbSwgXCJjaGFuZ2VcIik7XG4gIGlmIChjaGFuZ2VIYW5kbGVyIHx8IGNoYW5nZXNIYW5kbGVyKSB7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGZyb206IGZyb20sIHRvOiB0byxcbiAgICAgIHRleHQ6IGNoYW5nZS50ZXh0LFxuICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsXG4gICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW5cbiAgICB9O1xuICAgIGlmIChjaGFuZ2VIYW5kbGVyKSB7IHNpZ25hbExhdGVyKGNtLCBcImNoYW5nZVwiLCBjbSwgb2JqKTsgfVxuICAgIGlmIChjaGFuZ2VzSGFuZGxlcikgeyAoY20uY3VyT3AuY2hhbmdlT2JqcyB8fCAoY20uY3VyT3AuY2hhbmdlT2JqcyA9IFtdKSkucHVzaChvYmopOyB9XG4gIH1cbiAgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSYW5nZShkb2MsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHtcbiAgaWYgKCF0bykgeyB0byA9IGZyb207IH1cbiAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IHZhciBhc3NpZ247XG4gICAgKGFzc2lnbiA9IFt0bywgZnJvbV0sIGZyb20gPSBhc3NpZ25bMF0sIHRvID0gYXNzaWduWzFdKTsgfVxuICBpZiAodHlwZW9mIGNvZGUgPT0gXCJzdHJpbmdcIikgeyBjb2RlID0gZG9jLnNwbGl0TGluZXMoY29kZSk7IH1cbiAgbWFrZUNoYW5nZShkb2MsIHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IGNvZGUsIG9yaWdpbjogb3JpZ2lufSk7XG59XG5cbi8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlc1xuXG5mdW5jdGlvbiByZWJhc2VIaXN0U2VsU2luZ2xlKHBvcywgZnJvbSwgdG8sIGRpZmYpIHtcbiAgaWYgKHRvIDwgcG9zLmxpbmUpIHtcbiAgICBwb3MubGluZSArPSBkaWZmO1xuICB9IGVsc2UgaWYgKGZyb20gPCBwb3MubGluZSkge1xuICAgIHBvcy5saW5lID0gZnJvbTtcbiAgICBwb3MuY2ggPSAwO1xuICB9XG59XG5cbi8vIFRyaWVzIHRvIHJlYmFzZSBhbiBhcnJheSBvZiBoaXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGVcbi8vIGRvY3VtZW50LiBJZiB0aGUgY2hhbmdlIHRvdWNoZXMgdGhlIHNhbWUgbGluZXMgYXMgdGhlIGV2ZW50LCB0aGVcbi8vIGV2ZW50LCBhbmQgZXZlcnl0aGluZyAnYmVoaW5kJyBpdCwgaXMgZGlzY2FyZGVkLiBJZiB0aGUgY2hhbmdlIGlzXG4vLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQuIFVzZXMgYVxuLy8gY29weS1vbi13cml0ZSBzY2hlbWUgZm9yIHRoZSBwb3NpdGlvbnMsIHRvIGF2b2lkIGhhdmluZyB0b1xuLy8gcmVhbGxvY2F0ZSB0aGVtIGFsbCBvbiBldmVyeSByZWJhc2UsIGJ1dCBhbHNvIGF2b2lkIHByb2JsZW1zIHdpdGhcbi8vIHNoYXJlZCBwb3NpdGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuXG5mdW5jdGlvbiByZWJhc2VIaXN0QXJyYXkoYXJyYXksIGZyb20sIHRvLCBkaWZmKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgc3ViID0gYXJyYXlbaV0sIG9rID0gdHJ1ZTtcbiAgICBpZiAoc3ViLnJhbmdlcykge1xuICAgICAgaWYgKCFzdWIuY29waWVkKSB7IHN1YiA9IGFycmF5W2ldID0gc3ViLmRlZXBDb3B5KCk7IHN1Yi5jb3BpZWQgPSB0cnVlOyB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmFuY2hvciwgZnJvbSwgdG8sIGRpZmYpO1xuICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uaGVhZCwgZnJvbSwgdG8sIGRpZmYpO1xuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyArK2okMSkge1xuICAgICAgdmFyIGN1ciA9IHN1Yi5jaGFuZ2VzW2okMV07XG4gICAgICBpZiAodG8gPCBjdXIuZnJvbS5saW5lKSB7XG4gICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUgKyBkaWZmLCBjdXIuZnJvbS5jaCk7XG4gICAgICAgIGN1ci50byA9IFBvcyhjdXIudG8ubGluZSArIGRpZmYsIGN1ci50by5jaCk7XG4gICAgICB9IGVsc2UgaWYgKGZyb20gPD0gY3VyLnRvLmxpbmUpIHtcbiAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFvaykge1xuICAgICAgYXJyYXkuc3BsaWNlKDAsIGkgKyAxKTtcbiAgICAgIGkgPSAwO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWJhc2VIaXN0KGhpc3QsIGNoYW5nZSkge1xuICB2YXIgZnJvbSA9IGNoYW5nZS5mcm9tLmxpbmUsIHRvID0gY2hhbmdlLnRvLmxpbmUsIGRpZmYgPSBjaGFuZ2UudGV4dC5sZW5ndGggLSAodG8gLSBmcm9tKSAtIDE7XG4gIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTtcbiAgcmViYXNlSGlzdEFycmF5KGhpc3QudW5kb25lLCBmcm9tLCB0bywgZGlmZik7XG59XG5cbi8vIFV0aWxpdHkgZm9yIGFwcGx5aW5nIGEgY2hhbmdlIHRvIGEgbGluZSBieSBoYW5kbGUgb3IgbnVtYmVyLFxuLy8gcmV0dXJuaW5nIHRoZSBudW1iZXIgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJpbmcgdGhlIGxpbmUgYXNcbi8vIGNoYW5nZWQuXG5mdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkge1xuICB2YXIgbm8gPSBoYW5kbGUsIGxpbmUgPSBoYW5kbGU7XG4gIGlmICh0eXBlb2YgaGFuZGxlID09IFwibnVtYmVyXCIpIHsgbGluZSA9IGdldExpbmUoZG9jLCBjbGlwTGluZShkb2MsIGhhbmRsZSkpOyB9XG4gIGVsc2UgeyBubyA9IGxpbmVObyhoYW5kbGUpOyB9XG4gIGlmIChubyA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgaWYgKG9wKGxpbmUsIG5vKSAmJiBkb2MuY20pIHsgcmVnTGluZUNoYW5nZShkb2MuY20sIG5vLCBjaGFuZ2VUeXBlKTsgfVxuICByZXR1cm4gbGluZVxufVxuXG4vLyBUaGUgZG9jdW1lbnQgaXMgcmVwcmVzZW50ZWQgYXMgYSBCVHJlZSBjb25zaXN0aW5nIG9mIGxlYXZlcywgd2l0aFxuLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwgYW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3Jcbi8vIG90aGVyIGJyYW5jaCBub2RlcyBiZWxvdyB0aGVtLiBUaGUgdG9wIG5vZGUgaXMgYWx3YXlzIGEgYnJhbmNoXG4vLyBub2RlLCBhbmQgaXMgdGhlIGRvY3VtZW50IG9iamVjdCBpdHNlbGYgKG1lYW5pbmcgaXQgaGFzXG4vLyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLlxuLy9cbi8vIEFsbCBub2RlcyBoYXZlIHBhcmVudCBsaW5rcy4gVGhlIHRyZWUgaXMgdXNlZCBib3RoIHRvIGdvIGZyb21cbi8vIGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVjdHMgdG8gbnVtYmVycy5cbi8vIEl0IGFsc28gaW5kZXhlcyBieSBoZWlnaHQsIGFuZCBpcyB1c2VkIHRvIGNvbnZlcnQgYmV0d2VlbiBoZWlnaHRcbi8vIGFuZCBsaW5lIG9iamVjdCwgYW5kIHRvIGZpbmQgdGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgZG9jdW1lbnQuXG4vL1xuLy8gU2VlIGFsc28gaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9ibG9nL2NvZGVtaXJyb3ItbGluZS10cmVlLmh0bWxcblxuZnVuY3Rpb24gTGVhZkNodW5rKGxpbmVzKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHRoaXMubGluZXMgPSBsaW5lcztcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgIGxpbmVzW2ldLnBhcmVudCA9IHRoaXMkMTtcbiAgICBoZWlnaHQgKz0gbGluZXNbaV0uaGVpZ2h0O1xuICB9XG4gIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xufVxuXG5MZWFmQ2h1bmsucHJvdG90eXBlID0ge1xuICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggfSxcblxuICAvLyBSZW1vdmUgdGhlIG4gbGluZXMgYXQgb2Zmc2V0ICdhdCcuXG4gIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgaSA9IGF0LCBlID0gYXQgKyBuOyBpIDwgZTsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IHRoaXMkMS5saW5lc1tpXTtcbiAgICAgIHRoaXMkMS5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7XG4gICAgICBjbGVhblVwTGluZShsaW5lKTtcbiAgICAgIHNpZ25hbExhdGVyKGxpbmUsIFwiZGVsZXRlXCIpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7XG4gIH0sXG5cbiAgLy8gSGVscGVyIHVzZWQgdG8gY29sbGFwc2UgYSBzbWFsbCBicmFuY2ggaW50byBhIHNpbmdsZSBsZWFmLlxuICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHtcbiAgICBsaW5lcy5wdXNoLmFwcGx5KGxpbmVzLCB0aGlzLmxpbmVzKTtcbiAgfSxcblxuICAvLyBJbnNlcnQgdGhlIGdpdmVuIGFycmF5IG9mIGxpbmVzIGF0IG9mZnNldCAnYXQnLCBjb3VudCB0aGVtIGFzXG4gIC8vIGhhdmluZyB0aGUgZ2l2ZW4gaGVpZ2h0LlxuICBpbnNlcnRJbm5lcjogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDtcbiAgICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhdCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgbGluZXNbaV0ucGFyZW50ID0gdGhpcyQxOyB9XG4gIH0sXG5cbiAgLy8gVXNlZCB0byBpdGVyYXRlIG92ZXIgYSBwYXJ0IG9mIHRoZSB0cmVlLlxuICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpXG4gICAgICB7IGlmIChvcCh0aGlzJDEubGluZXNbYXRdKSkgeyByZXR1cm4gdHJ1ZSB9IH1cbiAgfVxufTtcblxuZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB2YXIgc2l6ZSA9IDAsIGhlaWdodCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTtcbiAgICBzaXplICs9IGNoLmNodW5rU2l6ZSgpOyBoZWlnaHQgKz0gY2guaGVpZ2h0O1xuICAgIGNoLnBhcmVudCA9IHRoaXMkMTtcbiAgfVxuICB0aGlzLnNpemUgPSBzaXplO1xuICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xufVxuXG5CcmFuY2hDaHVuay5wcm90b3R5cGUgPSB7XG4gIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemUgfSxcblxuICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuc2l6ZSAtPSBuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGNoaWxkID0gdGhpcyQxLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDtcbiAgICAgICAgY2hpbGQucmVtb3ZlSW5uZXIoYXQsIHJtKTtcbiAgICAgICAgdGhpcyQxLmhlaWdodCAtPSBvbGRIZWlnaHQgLSBjaGlsZC5oZWlnaHQ7XG4gICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzJDEuY2hpbGRyZW4uc3BsaWNlKGktLSwgMSk7IGNoaWxkLnBhcmVudCA9IG51bGw7IH1cbiAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgYXQgPSAwO1xuICAgICAgfSBlbHNlIHsgYXQgLT0gc3o7IH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gMjUgbGluZXMsIGVuc3VyZSB0aGF0IGl0IGlzIGFcbiAgICAvLyBzaW5nbGUgbGVhZiBub2RlLlxuICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUgJiZcbiAgICAgICAgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMSB8fCAhKHRoaXMuY2hpbGRyZW5bMF0gaW5zdGFuY2VvZiBMZWFmQ2h1bmspKSkge1xuICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICB0aGlzLmNvbGxhcHNlKGxpbmVzKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldO1xuICAgICAgdGhpcy5jaGlsZHJlblswXS5wYXJlbnQgPSB0aGlzO1xuICAgIH1cbiAgfSxcblxuICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgeyB0aGlzJDEuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOyB9XG4gIH0sXG5cbiAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoO1xuICAgIHRoaXMuaGVpZ2h0ICs9IGhlaWdodDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBjaGlsZCA9IHRoaXMkMS5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTtcbiAgICAgIGlmIChhdCA8PSBzeikge1xuICAgICAgICBjaGlsZC5pbnNlcnRJbm5lcihhdCwgbGluZXMsIGhlaWdodCk7XG4gICAgICAgIGlmIChjaGlsZC5saW5lcyAmJiBjaGlsZC5saW5lcy5sZW5ndGggPiA1MCkge1xuICAgICAgICAgIC8vIFRvIGF2b2lkIG1lbW9yeSB0aHJhc2hpbmcgd2hlbiBjaGlsZC5saW5lcyBpcyBodWdlIChlLmcuIGZpcnN0IHZpZXcgb2YgYSBsYXJnZSBmaWxlKSwgaXQncyBuZXZlciBzcGxpY2VkLlxuICAgICAgICAgIC8vIEluc3RlYWQsIHNtYWxsIHNsaWNlcyBhcmUgdGFrZW4uIFRoZXkncmUgdGFrZW4gaW4gb3JkZXIgYmVjYXVzZSBzZXF1ZW50aWFsIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZmFzdGVzdC5cbiAgICAgICAgICB2YXIgcmVtYWluaW5nID0gY2hpbGQubGluZXMubGVuZ3RoICUgMjUgKyAyNTtcbiAgICAgICAgICBmb3IgKHZhciBwb3MgPSByZW1haW5pbmc7IHBvcyA8IGNoaWxkLmxpbmVzLmxlbmd0aDspIHtcbiAgICAgICAgICAgIHZhciBsZWFmID0gbmV3IExlYWZDaHVuayhjaGlsZC5saW5lcy5zbGljZShwb3MsIHBvcyArPSAyNSkpO1xuICAgICAgICAgICAgY2hpbGQuaGVpZ2h0IC09IGxlYWYuaGVpZ2h0O1xuICAgICAgICAgICAgdGhpcyQxLmNoaWxkcmVuLnNwbGljZSgrK2ksIDAsIGxlYWYpO1xuICAgICAgICAgICAgbGVhZi5wYXJlbnQgPSB0aGlzJDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkLmxpbmVzID0gY2hpbGQubGluZXMuc2xpY2UoMCwgcmVtYWluaW5nKTtcbiAgICAgICAgICB0aGlzJDEubWF5YmVTcGlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBhdCAtPSBzejtcbiAgICB9XG4gIH0sXG5cbiAgLy8gV2hlbiBhIG5vZGUgaGFzIGdyb3duLCBjaGVjayB3aGV0aGVyIGl0IHNob3VsZCBiZSBzcGxpdC5cbiAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSB7IHJldHVybiB9XG4gICAgdmFyIG1lID0gdGhpcztcbiAgICBkbyB7XG4gICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTtcbiAgICAgIHZhciBzaWJsaW5nID0gbmV3IEJyYW5jaENodW5rKHNwaWxsZWQpO1xuICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21lIHRoZSBwYXJlbnQgbm9kZVxuICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7XG4gICAgICAgIGNvcHkucGFyZW50ID0gbWU7XG4gICAgICAgIG1lLmNoaWxkcmVuID0gW2NvcHksIHNpYmxpbmddO1xuICAgICAgICBtZSA9IGNvcHk7XG4gICAgIH0gZWxzZSB7XG4gICAgICAgIG1lLnNpemUgLT0gc2libGluZy5zaXplO1xuICAgICAgICBtZS5oZWlnaHQgLT0gc2libGluZy5oZWlnaHQ7XG4gICAgICAgIHZhciBteUluZGV4ID0gaW5kZXhPZihtZS5wYXJlbnQuY2hpbGRyZW4sIG1lKTtcbiAgICAgICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7XG4gICAgICB9XG4gICAgICBzaWJsaW5nLnBhcmVudCA9IG1lLnBhcmVudDtcbiAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMClcbiAgICBtZS5wYXJlbnQubWF5YmVTcGlsbCgpO1xuICB9LFxuXG4gIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGNoaWxkID0gdGhpcyQxLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgdmFyIHVzZWQgPSBNYXRoLm1pbihuLCBzeiAtIGF0KTtcbiAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgICBpZiAoKG4gLT0gdXNlZCkgPT0gMCkgeyBicmVhayB9XG4gICAgICAgIGF0ID0gMDtcbiAgICAgIH0gZWxzZSB7IGF0IC09IHN6OyB9XG4gICAgfVxuICB9XG59O1xuXG4vLyBMaW5lIHdpZGdldHMgYXJlIGJsb2NrIGVsZW1lbnRzIGRpc3BsYXllZCBhYm92ZSBvciBiZWxvdyBhIGxpbmUuXG5cbnZhciBMaW5lV2lkZ2V0ID0gZnVuY3Rpb24oZG9jLCBub2RlLCBvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmIChvcHRpb25zKSB7IGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSB7IGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgeyB0aGlzJDFbb3B0XSA9IG9wdGlvbnNbb3B0XTsgfSB9IH1cbiAgdGhpcy5kb2MgPSBkb2M7XG4gIHRoaXMubm9kZSA9IG5vZGU7XG59O1xuXG5MaW5lV2lkZ2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd3MgPSB0aGlzLmxpbmUud2lkZ2V0cywgbGluZSA9IHRoaXMubGluZSwgbm8gPSBsaW5lTm8obGluZSk7XG4gIGlmIChubyA9PSBudWxsIHx8ICF3cykgeyByZXR1cm4gfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSB7IGlmICh3c1tpXSA9PSB0aGlzJDEpIHsgd3Muc3BsaWNlKGktLSwgMSk7IH0gfVxuICBpZiAoIXdzLmxlbmd0aCkgeyBsaW5lLndpZGdldHMgPSBudWxsOyB9XG4gIHZhciBoZWlnaHQgPSB3aWRnZXRIZWlnaHQodGhpcyk7XG4gIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgTWF0aC5tYXgoMCwgbGluZS5oZWlnaHQgLSBoZWlnaHQpKTtcbiAgaWYgKGNtKSB7XG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgLWhlaWdodCk7XG4gICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgXCJ3aWRnZXRcIik7XG4gICAgfSk7XG4gICAgc2lnbmFsTGF0ZXIoY20sIFwibGluZVdpZGdldENsZWFyZWRcIiwgY20sIHRoaXMsIG5vKTtcbiAgfVxufTtcblxuTGluZVdpZGdldC5wcm90b3R5cGUuY2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgb2xkSCA9IHRoaXMuaGVpZ2h0LCBjbSA9IHRoaXMuZG9jLmNtLCBsaW5lID0gdGhpcy5saW5lO1xuICB0aGlzLmhlaWdodCA9IG51bGw7XG4gIHZhciBkaWZmID0gd2lkZ2V0SGVpZ2h0KHRoaXMpIC0gb2xkSDtcbiAgaWYgKCFkaWZmKSB7IHJldHVybiB9XG4gIGlmICghbGluZUlzSGlkZGVuKHRoaXMuZG9jLCBsaW5lKSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGxpbmUuaGVpZ2h0ICsgZGlmZik7IH1cbiAgaWYgKGNtKSB7XG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJsaW5lV2lkZ2V0Q2hhbmdlZFwiLCBjbSwgdGhpcyQxLCBsaW5lTm8obGluZSkpO1xuICAgIH0pO1xuICB9XG59O1xuZXZlbnRNaXhpbihMaW5lV2lkZ2V0KTtcblxuZnVuY3Rpb24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikge1xuICBpZiAoaGVpZ2h0QXRMaW5lKGxpbmUpIDwgKChjbS5jdXJPcCAmJiBjbS5jdXJPcC5zY3JvbGxUb3ApIHx8IGNtLmRvYy5zY3JvbGxUb3ApKVxuICAgIHsgYWRkVG9TY3JvbGxUb3AoY20sIGRpZmYpOyB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmVXaWRnZXQoZG9jLCBoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgdmFyIHdpZGdldCA9IG5ldyBMaW5lV2lkZ2V0KGRvYywgbm9kZSwgb3B0aW9ucyk7XG4gIHZhciBjbSA9IGRvYy5jbTtcbiAgaWYgKGNtICYmIHdpZGdldC5ub0hTY3JvbGwpIHsgY20uZGlzcGxheS5hbGlnbldpZGdldHMgPSB0cnVlOyB9XG4gIGNoYW5nZUxpbmUoZG9jLCBoYW5kbGUsIFwid2lkZ2V0XCIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTtcbiAgICBpZiAod2lkZ2V0Lmluc2VydEF0ID09IG51bGwpIHsgd2lkZ2V0cy5wdXNoKHdpZGdldCk7IH1cbiAgICBlbHNlIHsgd2lkZ2V0cy5zcGxpY2UoTWF0aC5taW4od2lkZ2V0cy5sZW5ndGggLSAxLCBNYXRoLm1heCgwLCB3aWRnZXQuaW5zZXJ0QXQpKSwgMCwgd2lkZ2V0KTsgfVxuICAgIHdpZGdldC5saW5lID0gbGluZTtcbiAgICBpZiAoY20gJiYgIWxpbmVJc0hpZGRlbihkb2MsIGxpbmUpKSB7XG4gICAgICB2YXIgYWJvdmVWaXNpYmxlID0gaGVpZ2h0QXRMaW5lKGxpbmUpIDwgZG9jLnNjcm9sbFRvcDtcbiAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7XG4gICAgICBpZiAoYWJvdmVWaXNpYmxlKSB7IGFkZFRvU2Nyb2xsVG9wKGNtLCB3aWRnZXQuaGVpZ2h0KTsgfVxuICAgICAgY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9KTtcbiAgaWYgKGNtKSB7IHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRBZGRlZFwiLCBjbSwgd2lkZ2V0LCB0eXBlb2YgaGFuZGxlID09IFwibnVtYmVyXCIgPyBoYW5kbGUgOiBsaW5lTm8oaGFuZGxlKSk7IH1cbiAgcmV0dXJuIHdpZGdldFxufVxuXG4vLyBURVhUTUFSS0VSU1xuXG4vLyBDcmVhdGVkIHdpdGggbWFya1RleHQgYW5kIHNldEJvb2ttYXJrIG1ldGhvZHMuIEEgVGV4dE1hcmtlciBpcyBhXG4vLyBoYW5kbGUgdGhhdCBjYW4gYmUgdXNlZCB0byBjbGVhciBvciBmaW5kIGEgbWFya2VkIHBvc2l0aW9uIGluIHRoZVxuLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmdcbi8vIHtmcm9tLCB0bywgbWFya2VyfSBvYmplY3QgcG9pbnRpbmcgdG8gc3VjaCBtYXJrZXIgb2JqZWN0cywgYW5kXG4vLyBpbmRpY2F0aW5nIHRoYXQgc3VjaCBhIG1hcmtlciBpcyBwcmVzZW50IG9uIHRoYXQgbGluZS4gTXVsdGlwbGVcbi8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFucyBhY3Jvc3MgbGluZXMuXG4vLyBUaGUgc3BhbnMgd2lsbCBoYXZlIG51bGwgZm9yIHRoZWlyIGZyb20vdG8gcHJvcGVydGllcyB3aGVuIHRoZVxuLy8gbWFya2VyIGNvbnRpbnVlcyBiZXlvbmQgdGhlIHN0YXJ0L2VuZCBvZiB0aGUgbGluZS4gTWFya2VycyBoYXZlXG4vLyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC5cblxuLy8gQ29sbGFwc2VkIG1hcmtlcnMgaGF2ZSB1bmlxdWUgaWRzLCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIG9yZGVyXG4vLyB0aGVtLCB3aGljaCBpcyBuZWVkZWQgZm9yIHVuaXF1ZWx5IGRldGVybWluaW5nIGFuIG91dGVyIG1hcmtlclxuLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLlxudmFyIG5leHRNYXJrZXJJZCA9IDA7XG5cbnZhciBUZXh0TWFya2VyID0gZnVuY3Rpb24oZG9jLCB0eXBlKSB7XG4gIHRoaXMubGluZXMgPSBbXTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5kb2MgPSBkb2M7XG4gIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDtcbn07XG5cbi8vIENsZWFyIHRoZSBtYXJrZXIuXG5UZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgeyByZXR1cm4gfVxuICB2YXIgY20gPSB0aGlzLmRvYy5jbSwgd2l0aE9wID0gY20gJiYgIWNtLmN1ck9wO1xuICBpZiAod2l0aE9wKSB7IHN0YXJ0T3BlcmF0aW9uKGNtKTsgfVxuICBpZiAoaGFzSGFuZGxlcih0aGlzLCBcImNsZWFyXCIpKSB7XG4gICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKCk7XG4gICAgaWYgKGZvdW5kKSB7IHNpZ25hbExhdGVyKHRoaXMsIFwiY2xlYXJcIiwgZm91bmQuZnJvbSwgZm91bmQudG8pOyB9XG4gIH1cbiAgdmFyIG1pbiA9IG51bGwsIG1heCA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBsaW5lID0gdGhpcyQxLmxpbmVzW2ldO1xuICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzJDEpO1xuICAgIGlmIChjbSAmJiAhdGhpcyQxLmNvbGxhcHNlZCkgeyByZWdMaW5lQ2hhbmdlKGNtLCBsaW5lTm8obGluZSksIFwidGV4dFwiKTsgfVxuICAgIGVsc2UgaWYgKGNtKSB7XG4gICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7IG1heCA9IGxpbmVObyhsaW5lKTsgfVxuICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKSB7IG1pbiA9IGxpbmVObyhsaW5lKTsgfVxuICAgIH1cbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gcmVtb3ZlTWFya2VkU3BhbihsaW5lLm1hcmtlZFNwYW5zLCBzcGFuKTtcbiAgICBpZiAoc3Bhbi5mcm9tID09IG51bGwgJiYgdGhpcyQxLmNvbGxhcHNlZCAmJiAhbGluZUlzSGlkZGVuKHRoaXMkMS5kb2MsIGxpbmUpICYmIGNtKVxuICAgICAgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIHRleHRIZWlnaHQoY20uZGlzcGxheSkpOyB9XG4gIH1cbiAgaWYgKGNtICYmIHRoaXMuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpJDEpIHtcbiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZSh0aGlzJDEubGluZXNbaSQxXSksIGxlbiA9IGxpbmVMZW5ndGgodmlzdWFsKTtcbiAgICBpZiAobGVuID4gY20uZGlzcGxheS5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmUgPSB2aXN1YWw7XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0gfVxuXG4gIGlmIChtaW4gIT0gbnVsbCAmJiBjbSAmJiB0aGlzLmNvbGxhcHNlZCkgeyByZWdDaGFuZ2UoY20sIG1pbiwgbWF4ICsgMSk7IH1cbiAgdGhpcy5saW5lcy5sZW5ndGggPSAwO1xuICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTtcbiAgaWYgKHRoaXMuYXRvbWljICYmIHRoaXMuZG9jLmNhbnRFZGl0KSB7XG4gICAgdGhpcy5kb2MuY2FudEVkaXQgPSBmYWxzZTtcbiAgICBpZiAoY20pIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gIH1cbiAgaWYgKGNtKSB7IHNpZ25hbExhdGVyKGNtLCBcIm1hcmtlckNsZWFyZWRcIiwgY20sIHRoaXMsIG1pbiwgbWF4KTsgfVxuICBpZiAod2l0aE9wKSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgaWYgKHRoaXMucGFyZW50KSB7IHRoaXMucGFyZW50LmNsZWFyKCk7IH1cbn07XG5cbi8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIgaW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20sXG4vLyB0b30gb2JqZWN0IGJ5IGRlZmF1bHQuIFNpZGUgY2FuIGJlIHBhc3NlZCB0byBnZXQgYSBzcGVjaWZpYyBzaWRlXG4vLyAtLSAwIChib3RoKSwgLTEgKGxlZnQpLCBvciAxIChyaWdodCkuIFdoZW4gbGluZU9iaiBpcyB0cnVlLCB0aGVcbi8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNvbnRhaW4gYSBsaW5lIG9iamVjdCwgcmF0aGVyIHRoYW4gYSBsaW5lXG4vLyBudW1iZXIgKHVzZWQgdG8gcHJldmVudCBsb29raW5nIHVwIHRoZSBzYW1lIGxpbmUgdHdpY2UpLlxuVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uIChzaWRlLCBsaW5lT2JqKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHNpZGUgPT0gbnVsbCAmJiB0aGlzLnR5cGUgPT0gXCJib29rbWFya1wiKSB7IHNpZGUgPSAxOyB9XG4gIHZhciBmcm9tLCB0bztcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGxpbmUgPSB0aGlzJDEubGluZXNbaV07XG4gICAgdmFyIHNwYW4gPSBnZXRNYXJrZWRTcGFuRm9yKGxpbmUubWFya2VkU3BhbnMsIHRoaXMkMSk7XG4gICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsKSB7XG4gICAgICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pO1xuICAgICAgaWYgKHNpZGUgPT0gLTEpIHsgcmV0dXJuIGZyb20gfVxuICAgIH1cbiAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7XG4gICAgICB0byA9IFBvcyhsaW5lT2JqID8gbGluZSA6IGxpbmVObyhsaW5lKSwgc3Bhbi50byk7XG4gICAgICBpZiAoc2lkZSA9PSAxKSB7IHJldHVybiB0byB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmcm9tICYmIHtmcm9tOiBmcm9tLCB0bzogdG99XG59O1xuXG4vLyBTaWduYWxzIHRoYXQgdGhlIG1hcmtlcidzIHdpZGdldCBjaGFuZ2VkLCBhbmQgc3Vycm91bmRpbmcgbGF5b3V0XG4vLyBzaG91bGQgYmUgcmVjb21wdXRlZC5cblRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIHBvcyA9IHRoaXMuZmluZCgtMSwgdHJ1ZSksIHdpZGdldCA9IHRoaXMsIGNtID0gdGhpcy5kb2MuY207XG4gIGlmICghcG9zIHx8ICFjbSkgeyByZXR1cm4gfVxuICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxpbmUgPSBwb3MubGluZSwgbGluZU4gPSBsaW5lTm8ocG9zLmxpbmUpO1xuICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7XG4gICAgaWYgKHZpZXcpIHtcbiAgICAgIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3Iodmlldyk7XG4gICAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgICBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTtcbiAgICBpZiAoIWxpbmVJc0hpZGRlbih3aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgIHZhciBvbGRIZWlnaHQgPSB3aWRnZXQuaGVpZ2h0O1xuICAgICAgd2lkZ2V0LmhlaWdodCA9IG51bGw7XG4gICAgICB2YXIgZEhlaWdodCA9IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0O1xuICAgICAgaWYgKGRIZWlnaHQpXG4gICAgICAgIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRIZWlnaHQpOyB9XG4gICAgfVxuICAgIHNpZ25hbExhdGVyKGNtLCBcIm1hcmtlckNoYW5nZWRcIiwgY20sIHRoaXMkMSk7XG4gIH0pO1xufTtcblxuVGV4dE1hcmtlci5wcm90b3R5cGUuYXR0YWNoTGluZSA9IGZ1bmN0aW9uIChsaW5lKSB7XG4gIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHtcbiAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDtcbiAgICBpZiAoIW9wLm1heWJlSGlkZGVuTWFya2VycyB8fCBpbmRleE9mKG9wLm1heWJlSGlkZGVuTWFya2VycywgdGhpcykgPT0gLTEpXG4gICAgICB7IChvcC5tYXliZVVuaGlkZGVuTWFya2VycyB8fCAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7IH1cbiAgfVxuICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG59O1xuXG5UZXh0TWFya2VyLnByb3RvdHlwZS5kZXRhY2hMaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgdGhpcy5saW5lcy5zcGxpY2UoaW5kZXhPZih0aGlzLmxpbmVzLCBsaW5lKSwgMSk7XG4gIGlmICghdGhpcy5saW5lcy5sZW5ndGggJiYgdGhpcy5kb2MuY20pIHtcbiAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDsob3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IChvcC5tYXliZUhpZGRlbk1hcmtlcnMgPSBbXSkpLnB1c2godGhpcyk7XG4gIH1cbn07XG5ldmVudE1peGluKFRleHRNYXJrZXIpO1xuXG4vLyBDcmVhdGUgYSBtYXJrZXIsIHdpcmUgaXQgdXAgdG8gdGhlIHJpZ2h0IGxpbmVzLCBhbmRcbmZ1bmN0aW9uIG1hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHtcbiAgLy8gU2hhcmVkIG1hcmtlcnMgKGFjcm9zcyBsaW5rZWQgZG9jdW1lbnRzKSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG4gIC8vIChtYXJrVGV4dFNoYXJlZCB3aWxsIGNhbGwgb3V0IHRvIHRoaXMgYWdhaW4sIG9uY2UgcGVyXG4gIC8vIGRvY3VtZW50KS5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaGFyZWQpIHsgcmV0dXJuIG1hcmtUZXh0U2hhcmVkKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cbiAgLy8gRW5zdXJlIHdlIGFyZSBpbiBhbiBvcGVyYXRpb24uXG4gIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFya1RleHQpKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cblxuICB2YXIgbWFya2VyID0gbmV3IFRleHRNYXJrZXIoZG9jLCB0eXBlKSwgZGlmZiA9IGNtcChmcm9tLCB0byk7XG4gIGlmIChvcHRpb25zKSB7IGNvcHlPYmoob3B0aW9ucywgbWFya2VyLCBmYWxzZSk7IH1cbiAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBtYXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZVxuICBpZiAoZGlmZiA+IDAgfHwgZGlmZiA9PSAwICYmIG1hcmtlci5jbGVhcldoZW5FbXB0eSAhPT0gZmFsc2UpXG4gICAgeyByZXR1cm4gbWFya2VyIH1cbiAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHtcbiAgICAvLyBTaG93aW5nIHVwIGFzIGEgd2lkZ2V0IGltcGxpZXMgY29sbGFwc2VkICh3aWRnZXQgcmVwbGFjZXMgdGV4dClcbiAgICBtYXJrZXIuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICBtYXJrZXIud2lkZ2V0Tm9kZSA9IGVsdFAoXCJzcGFuXCIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgXCJDb2RlTWlycm9yLXdpZGdldFwiKTtcbiAgICBpZiAoIW9wdGlvbnMuaGFuZGxlTW91c2VFdmVudHMpIHsgbWFya2VyLndpZGdldE5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7IH1cbiAgICBpZiAob3B0aW9ucy5pbnNlcnRMZWZ0KSB7IG1hcmtlci53aWRnZXROb2RlLmluc2VydExlZnQgPSB0cnVlOyB9XG4gIH1cbiAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHtcbiAgICBpZiAoY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIGZyb20ubGluZSwgZnJvbSwgdG8sIG1hcmtlcikgfHxcbiAgICAgICAgZnJvbS5saW5lICE9IHRvLmxpbmUgJiYgY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIHRvLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpKVxuICAgICAgeyB0aHJvdyBuZXcgRXJyb3IoXCJJbnNlcnRpbmcgY29sbGFwc2VkIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgYW4gZXhpc3Rpbmcgb25lXCIpIH1cbiAgICBzZWVDb2xsYXBzZWRTcGFucygpO1xuICB9XG5cbiAgaWYgKG1hcmtlci5hZGRUb0hpc3RvcnkpXG4gICAgeyBhZGRDaGFuZ2VUb0hpc3RvcnkoZG9jLCB7ZnJvbTogZnJvbSwgdG86IHRvLCBvcmlnaW46IFwibWFya1RleHRcIn0sIGRvYy5zZWwsIE5hTik7IH1cblxuICB2YXIgY3VyTGluZSA9IGZyb20ubGluZSwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7XG4gIGRvYy5pdGVyKGN1ckxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgIGlmIChjbSAmJiBtYXJrZXIuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiB2aXN1YWxMaW5lKGxpbmUpID09IGNtLmRpc3BsYXkubWF4TGluZSlcbiAgICAgIHsgdXBkYXRlTWF4TGluZSA9IHRydWU7IH1cbiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCAmJiBjdXJMaW5lICE9IGZyb20ubGluZSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gICAgYWRkTWFya2VkU3BhbihsaW5lLCBuZXcgTWFya2VkU3BhbihtYXJrZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyTGluZSA9PSB0by5saW5lID8gdG8uY2ggOiBudWxsKSk7XG4gICAgKytjdXJMaW5lO1xuICB9KTtcbiAgLy8gbGluZUlzSGlkZGVuIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzcGFucywgc28gbmVlZHMgYSBzZWNvbmQgcGFzc1xuICBpZiAobWFya2VyLmNvbGxhcHNlZCkgeyBkb2MuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgIGlmIChsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gIH0pOyB9XG5cbiAgaWYgKG1hcmtlci5jbGVhck9uRW50ZXIpIHsgb24obWFya2VyLCBcImJlZm9yZUN1cnNvckVudGVyXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hcmtlci5jbGVhcigpOyB9KTsgfVxuXG4gIGlmIChtYXJrZXIucmVhZE9ubHkpIHtcbiAgICBzZWVSZWFkT25seVNwYW5zKCk7XG4gICAgaWYgKGRvYy5oaXN0b3J5LmRvbmUubGVuZ3RoIHx8IGRvYy5oaXN0b3J5LnVuZG9uZS5sZW5ndGgpXG4gICAgICB7IGRvYy5jbGVhckhpc3RvcnkoKTsgfVxuICB9XG4gIGlmIChtYXJrZXIuY29sbGFwc2VkKSB7XG4gICAgbWFya2VyLmlkID0gKytuZXh0TWFya2VySWQ7XG4gICAgbWFya2VyLmF0b21pYyA9IHRydWU7XG4gIH1cbiAgaWYgKGNtKSB7XG4gICAgLy8gU3luYyBlZGl0b3Igc3RhdGVcbiAgICBpZiAodXBkYXRlTWF4TGluZSkgeyBjbS5jdXJPcC51cGRhdGVNYXhMaW5lID0gdHJ1ZTsgfVxuICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKVxuICAgICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEpOyB9XG4gICAgZWxzZSBpZiAobWFya2VyLmNsYXNzTmFtZSB8fCBtYXJrZXIudGl0bGUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jc3MpXG4gICAgICB7IGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSB7IHJlZ0xpbmVDaGFuZ2UoY20sIGksIFwidGV4dFwiKTsgfSB9XG4gICAgaWYgKG1hcmtlci5hdG9taWMpIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gICAgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQWRkZWRcIiwgY20sIG1hcmtlcik7XG4gIH1cbiAgcmV0dXJuIG1hcmtlclxufVxuXG4vLyBTSEFSRUQgVEVYVE1BUktFUlNcblxuLy8gQSBzaGFyZWQgbWFya2VyIHNwYW5zIG11bHRpcGxlIGxpbmtlZCBkb2N1bWVudHMuIEl0IGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIG1ldGEtbWFya2VyLW9iamVjdCBjb250cm9sbGluZyBtdWx0aXBsZSBub3JtYWxcbi8vIG1hcmtlcnMuXG52YXIgU2hhcmVkVGV4dE1hcmtlciA9IGZ1bmN0aW9uKG1hcmtlcnMsIHByaW1hcnkpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5tYXJrZXJzID0gbWFya2VycztcbiAgdGhpcy5wcmltYXJ5ID0gcHJpbWFyeTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKVxuICAgIHsgbWFya2Vyc1tpXS5wYXJlbnQgPSB0aGlzJDE7IH1cbn07XG5cblNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICh0aGlzLmV4cGxpY2l0bHlDbGVhcmVkKSB7IHJldHVybiB9XG4gIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSlcbiAgICB7IHRoaXMkMS5tYXJrZXJzW2ldLmNsZWFyKCk7IH1cbiAgc2lnbmFsTGF0ZXIodGhpcywgXCJjbGVhclwiKTtcbn07XG5cblNoYXJlZFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2lkZSwgbGluZU9iaikge1xuICByZXR1cm4gdGhpcy5wcmltYXJ5LmZpbmQoc2lkZSwgbGluZU9iailcbn07XG5ldmVudE1peGluKFNoYXJlZFRleHRNYXJrZXIpO1xuXG5mdW5jdGlvbiBtYXJrVGV4dFNoYXJlZChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKSB7XG4gIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpO1xuICBvcHRpb25zLnNoYXJlZCA9IGZhbHNlO1xuICB2YXIgbWFya2VycyA9IFttYXJrVGV4dChkb2MsIGZyb20sIHRvLCBvcHRpb25zLCB0eXBlKV0sIHByaW1hcnkgPSBtYXJrZXJzWzBdO1xuICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlO1xuICBsaW5rZWREb2NzKGRvYywgZnVuY3Rpb24gKGRvYykge1xuICAgIGlmICh3aWRnZXQpIHsgb3B0aW9ucy53aWRnZXROb2RlID0gd2lkZ2V0LmNsb25lTm9kZSh0cnVlKTsgfVxuICAgIG1hcmtlcnMucHVzaChtYXJrVGV4dChkb2MsIGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhkb2MsIHRvKSwgb3B0aW9ucywgdHlwZSkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLmxpbmtlZC5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKGRvYy5saW5rZWRbaV0uaXNQYXJlbnQpIHsgcmV0dXJuIH0gfVxuICAgIHByaW1hcnkgPSBsc3QobWFya2Vycyk7XG4gIH0pO1xuICByZXR1cm4gbmV3IFNoYXJlZFRleHRNYXJrZXIobWFya2VycywgcHJpbWFyeSlcbn1cblxuZnVuY3Rpb24gZmluZFNoYXJlZE1hcmtlcnMoZG9jKSB7XG4gIHJldHVybiBkb2MuZmluZE1hcmtzKFBvcyhkb2MuZmlyc3QsIDApLCBkb2MuY2xpcFBvcyhQb3MoZG9jLmxhc3RMaW5lKCkpKSwgZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG0ucGFyZW50OyB9KVxufVxuXG5mdW5jdGlvbiBjb3B5U2hhcmVkTWFya2Vycyhkb2MsIG1hcmtlcnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1hcmtlci5maW5kKCk7XG4gICAgdmFyIG1Gcm9tID0gZG9jLmNsaXBQb3MocG9zLmZyb20pLCBtVG8gPSBkb2MuY2xpcFBvcyhwb3MudG8pO1xuICAgIGlmIChjbXAobUZyb20sIG1UbykpIHtcbiAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9jLCBtRnJvbSwgbVRvLCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7XG4gICAgICBtYXJrZXIubWFya2Vycy5wdXNoKHN1Yk1hcmspO1xuICAgICAgc3ViTWFyay5wYXJlbnQgPSBtYXJrZXI7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFya2Vycykge1xuICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2Vyc1tpXSwgbGlua2VkID0gW21hcmtlci5wcmltYXJ5LmRvY107XG4gICAgbGlua2VkRG9jcyhtYXJrZXIucHJpbWFyeS5kb2MsIGZ1bmN0aW9uIChkKSB7IHJldHVybiBsaW5rZWQucHVzaChkKTsgfSk7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrZXIubWFya2Vycy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHN1Yk1hcmtlciA9IG1hcmtlci5tYXJrZXJzW2pdO1xuICAgICAgaWYgKGluZGV4T2YobGlua2VkLCBzdWJNYXJrZXIuZG9jKSA9PSAtMSkge1xuICAgICAgICBzdWJNYXJrZXIucGFyZW50ID0gbnVsbDtcbiAgICAgICAgbWFya2VyLm1hcmtlcnMuc3BsaWNlKGotLSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgbG9vcCggaSApO1xufVxuXG52YXIgbmV4dERvY0lkID0gMDtcbnZhciBEb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRG9jKSkgeyByZXR1cm4gbmV3IERvYyh0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikgfVxuICBpZiAoZmlyc3RMaW5lID09IG51bGwpIHsgZmlyc3RMaW5lID0gMDsgfVxuXG4gIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKFwiXCIsIG51bGwpXSldKTtcbiAgdGhpcy5maXJzdCA9IGZpcnN0TGluZTtcbiAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbExlZnQgPSAwO1xuICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7XG4gIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gMTtcbiAgdGhpcy5tb2RlRnJvbnRpZXIgPSB0aGlzLmhpZ2hsaWdodEZyb250aWVyID0gZmlyc3RMaW5lO1xuICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RMaW5lLCAwKTtcbiAgdGhpcy5zZWwgPSBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpO1xuICB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTtcbiAgdGhpcy5pZCA9ICsrbmV4dERvY0lkO1xuICB0aGlzLm1vZGVPcHRpb24gPSBtb2RlO1xuICB0aGlzLmxpbmVTZXAgPSBsaW5lU2VwO1xuICB0aGlzLmRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gXCJydGxcIikgPyBcInJ0bFwiIDogXCJsdHJcIjtcbiAgdGhpcy5leHRlbmQgPSBmYWxzZTtcblxuICBpZiAodHlwZW9mIHRleHQgPT0gXCJzdHJpbmdcIikgeyB0ZXh0ID0gdGhpcy5zcGxpdExpbmVzKHRleHQpOyB9XG4gIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pO1xuICBzZXRTZWxlY3Rpb24odGhpcywgc2ltcGxlU2VsZWN0aW9uKHN0YXJ0KSwgc2VsX2RvbnRTY3JvbGwpO1xufTtcblxuRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IERvYyxcbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBkb2N1bWVudC4gU3VwcG9ydHMgdHdvIGZvcm1zIC0tIHdpdGggb25seSBvbmVcbiAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVhY2ggbGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGhcbiAgLy8gdGhyZWUsIGl0IGl0ZXJhdGVzIG92ZXIgdGhlIHJhbmdlIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gKHdpdGhcbiAgLy8gdGhlIHNlY29uZCBiZWluZyBub24taW5jbHVzaXZlKS5cbiAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7XG4gICAgaWYgKG9wKSB7IHRoaXMuaXRlck4oZnJvbSAtIHRoaXMuZmlyc3QsIHRvIC0gZnJvbSwgb3ApOyB9XG4gICAgZWxzZSB7IHRoaXMuaXRlck4odGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSwgZnJvbSk7IH1cbiAgfSxcblxuICAvLyBOb24tcHVibGljIGludGVyZmFjZSBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBsaW5lcy5cbiAgaW5zZXJ0OiBmdW5jdGlvbihhdCwgbGluZXMpIHtcbiAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7IGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7IH1cbiAgICB0aGlzLmluc2VydElubmVyKGF0IC0gdGhpcy5maXJzdCwgbGluZXMsIGhlaWdodCk7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4pIHsgdGhpcy5yZW1vdmVJbm5lcihhdCAtIHRoaXMuZmlyc3QsIG4pOyB9LFxuXG4gIC8vIEZyb20gaGVyZSwgdGhlIG1ldGhvZHMgYXJlIHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuIE1vc3RcbiAgLy8gYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuXG5cbiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICB2YXIgbGluZXMgPSBnZXRMaW5lcyh0aGlzLCB0aGlzLmZpcnN0LCB0aGlzLmZpcnN0ICsgdGhpcy5zaXplKTtcbiAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH1cbiAgICByZXR1cm4gbGluZXMuam9pbihsaW5lU2VwIHx8IHRoaXMubGluZVNlcGFyYXRvcigpKVxuICB9LFxuICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkge1xuICAgIHZhciB0b3AgPSBQb3ModGhpcy5maXJzdCwgMCksIGxhc3QgPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplIC0gMTtcbiAgICBtYWtlQ2hhbmdlKHRoaXMsIHtmcm9tOiB0b3AsIHRvOiBQb3MobGFzdCwgZ2V0TGluZSh0aGlzLCBsYXN0KS50ZXh0Lmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46IFwic2V0VmFsdWVcIiwgZnVsbDogdHJ1ZX0sIHRydWUpO1xuICAgIGlmICh0aGlzLmNtKSB7IHNjcm9sbFRvQ29vcmRzKHRoaXMuY20sIDAsIDApOyB9XG4gICAgc2V0U2VsZWN0aW9uKHRoaXMsIHNpbXBsZVNlbGVjdGlvbih0b3ApLCBzZWxfZG9udFNjcm9sbCk7XG4gIH0pLFxuICByZXBsYWNlUmFuZ2U6IGZ1bmN0aW9uKGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pIHtcbiAgICBmcm9tID0gY2xpcFBvcyh0aGlzLCBmcm9tKTtcbiAgICB0byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tO1xuICAgIHJlcGxhY2VSYW5nZSh0aGlzLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKTtcbiAgfSxcbiAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7XG4gICAgdmFyIGxpbmVzID0gZ2V0QmV0d2Vlbih0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSk7XG4gICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSlcbiAgfSxcblxuICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7dmFyIGwgPSB0aGlzLmdldExpbmVIYW5kbGUobGluZSk7IHJldHVybiBsICYmIGwudGV4dH0sXG5cbiAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSkgfX0sXG4gIGdldExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmUpIHtyZXR1cm4gbGluZU5vKGxpbmUpfSxcblxuICBnZXRMaW5lSGFuZGxlVmlzdWFsU3RhcnQ6IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICBpZiAodHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIikgeyBsaW5lID0gZ2V0TGluZSh0aGlzLCBsaW5lKTsgfVxuICAgIHJldHVybiB2aXN1YWxMaW5lKGxpbmUpXG4gIH0sXG5cbiAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplfSxcbiAgZmlyc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdH0sXG4gIGxhc3RMaW5lOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maXJzdCArIHRoaXMuc2l6ZSAtIDF9LFxuXG4gIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyl9LFxuXG4gIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHtcbiAgICB2YXIgcmFuZ2UkJDEgPSB0aGlzLnNlbC5wcmltYXJ5KCksIHBvcztcbiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PSBcImhlYWRcIikgeyBwb3MgPSByYW5nZSQkMS5oZWFkOyB9XG4gICAgZWxzZSBpZiAoc3RhcnQgPT0gXCJhbmNob3JcIikgeyBwb3MgPSByYW5nZSQkMS5hbmNob3I7IH1cbiAgICBlbHNlIGlmIChzdGFydCA9PSBcImVuZFwiIHx8IHN0YXJ0ID09IFwidG9cIiB8fCBzdGFydCA9PT0gZmFsc2UpIHsgcG9zID0gcmFuZ2UkJDEudG8oKTsgfVxuICAgIGVsc2UgeyBwb3MgPSByYW5nZSQkMS5mcm9tKCk7IH1cbiAgICByZXR1cm4gcG9zXG4gIH0sXG4gIGxpc3RTZWxlY3Rpb25zOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsLnJhbmdlcyB9LFxuICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCl9LFxuXG4gIHNldEN1cnNvcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24obGluZSwgY2gsIG9wdGlvbnMpIHtcbiAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiID8gUG9zKGxpbmUsIGNoIHx8IDApIDogbGluZSksIG51bGwsIG9wdGlvbnMpO1xuICB9KSxcbiAgc2V0U2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHtcbiAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSwgb3B0aW9ucyk7XG4gIH0pLFxuICBleHRlbmRTZWxlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWQsIG90aGVyLCBvcHRpb25zKSB7XG4gICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgaGVhZCksIG90aGVyICYmIGNsaXBQb3ModGhpcywgb3RoZXIpLCBvcHRpb25zKTtcbiAgfSksXG4gIGV4dGVuZFNlbGVjdGlvbnM6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhlYWRzLCBvcHRpb25zKSB7XG4gICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBjbGlwUG9zQXJyYXkodGhpcywgaGVhZHMpLCBvcHRpb25zKTtcbiAgfSksXG4gIGV4dGVuZFNlbGVjdGlvbnNCeTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZiwgb3B0aW9ucykge1xuICAgIHZhciBoZWFkcyA9IG1hcCh0aGlzLnNlbC5yYW5nZXMsIGYpO1xuICAgIGV4dGVuZFNlbGVjdGlvbnModGhpcywgY2xpcFBvc0FycmF5KHRoaXMsIGhlYWRzKSwgb3B0aW9ucyk7XG4gIH0pLFxuICBzZXRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihyYW5nZXMsIHByaW1hcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByZXR1cm4gfVxuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcyQxLCByYW5nZXNbaV0uYW5jaG9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMkMSwgcmFuZ2VzW2ldLmhlYWQpKTsgfVxuICAgIGlmIChwcmltYXJ5ID09IG51bGwpIHsgcHJpbWFyeSA9IE1hdGgubWluKHJhbmdlcy5sZW5ndGggLSAxLCB0aGlzLnNlbC5wcmltSW5kZXgpOyB9XG4gICAgc2V0U2VsZWN0aW9uKHRoaXMsIG5vcm1hbGl6ZVNlbGVjdGlvbihvdXQsIHByaW1hcnkpLCBvcHRpb25zKTtcbiAgfSksXG4gIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSkpO1xuICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9wdGlvbnMpO1xuICB9KSxcblxuICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKGxpbmVTZXApIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByYW5nZXMgPSB0aGlzLnNlbC5yYW5nZXMsIGxpbmVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VsID0gZ2V0QmV0d2Vlbih0aGlzJDEsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTtcbiAgICAgIGxpbmVzID0gbGluZXMgPyBsaW5lcy5jb25jYXQoc2VsKSA6IHNlbDtcbiAgICB9XG4gICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgZWxzZSB7IHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpIH1cbiAgfSxcbiAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24obGluZVNlcCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlbCA9IGdldEJldHdlZW4odGhpcyQxLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gICAgICBpZiAobGluZVNlcCAhPT0gZmFsc2UpIHsgc2VsID0gc2VsLmpvaW4obGluZVNlcCB8fCB0aGlzJDEubGluZVNlcGFyYXRvcigpKTsgfVxuICAgICAgcGFydHNbaV0gPSBzZWw7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0c1xuICB9LFxuICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgdmFyIGR1cCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBkdXBbaV0gPSBjb2RlOyB9XG4gICAgdGhpcy5yZXBsYWNlU2VsZWN0aW9ucyhkdXAsIGNvbGxhcHNlLCBvcmlnaW4gfHwgXCIraW5wdXRcIik7XG4gIH0sXG4gIHJlcGxhY2VTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSQkMSA9IHNlbC5yYW5nZXNbaV07XG4gICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlJCQxLmZyb20oKSwgdG86IHJhbmdlJCQxLnRvKCksIHRleHQ6IHRoaXMkMS5zcGxpdExpbmVzKGNvZGVbaV0pLCBvcmlnaW46IG9yaWdpbn07XG4gICAgfVxuICAgIHZhciBuZXdTZWwgPSBjb2xsYXBzZSAmJiBjb2xsYXBzZSAhPSBcImVuZFwiICYmIGNvbXB1dGVSZXBsYWNlZFNlbCh0aGlzLCBjaGFuZ2VzLCBjb2xsYXBzZSk7XG4gICAgZm9yICh2YXIgaSQxID0gY2hhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pXG4gICAgICB7IG1ha2VDaGFuZ2UodGhpcyQxLCBjaGFuZ2VzW2kkMV0pOyB9XG4gICAgaWYgKG5ld1NlbCkgeyBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSh0aGlzLCBuZXdTZWwpOyB9XG4gICAgZWxzZSBpZiAodGhpcy5jbSkgeyBlbnN1cmVDdXJzb3JWaXNpYmxlKHRoaXMuY20pOyB9XG4gIH0pLFxuICB1bmRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJ1bmRvXCIpO30pLFxuICByZWRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIpO30pLFxuICB1bmRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJ1bmRvXCIsIHRydWUpO30pLFxuICByZWRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIsIHRydWUpO30pLFxuXG4gIHNldEV4dGVuZGluZzogZnVuY3Rpb24odmFsKSB7dGhpcy5leHRlbmQgPSB2YWw7fSxcbiAgZ2V0RXh0ZW5kaW5nOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5leHRlbmR9LFxuXG4gIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGlzdCA9IHRoaXMuaGlzdG9yeSwgZG9uZSA9IDAsIHVuZG9uZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaXN0LmRvbmUubGVuZ3RoOyBpKyspIHsgaWYgKCFoaXN0LmRvbmVbaV0ucmFuZ2VzKSB7ICsrZG9uZTsgfSB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpJDErKykgeyBpZiAoIWhpc3QudW5kb25lW2kkMV0ucmFuZ2VzKSB7ICsrdW5kb25lOyB9IH1cbiAgICByZXR1cm4ge3VuZG86IGRvbmUsIHJlZG86IHVuZG9uZX1cbiAgfSxcbiAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHt0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7fSxcblxuICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xlYW5HZW5lcmF0aW9uID0gdGhpcy5jaGFuZ2VHZW5lcmF0aW9uKHRydWUpO1xuICB9LFxuICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7XG4gICAgaWYgKGZvcmNlU3BsaXQpXG4gICAgICB7IHRoaXMuaGlzdG9yeS5sYXN0T3AgPSB0aGlzLmhpc3RvcnkubGFzdFNlbE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RPcmlnaW4gPSBudWxsOyB9XG4gICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uXG4gIH0sXG4gIGlzQ2xlYW46IGZ1bmN0aW9uIChnZW4pIHtcbiAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0gKGdlbiB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbilcbiAgfSxcblxuICBnZXRIaXN0b3J5OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLFxuICAgICAgICAgICAgdW5kb25lOiBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS51bmRvbmUpfVxuICB9LFxuICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkge1xuICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkodGhpcy5oaXN0b3J5Lm1heEdlbmVyYXRpb24pO1xuICAgIGhpc3QuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkoaGlzdERhdGEuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7XG4gICAgaGlzdC51bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7XG4gIH0sXG5cbiAgc2V0R3V0dGVyTWFya2VyOiBkb2NNZXRob2RPcChmdW5jdGlvbihsaW5lLCBndXR0ZXJJRCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5lLCBcImd1dHRlclwiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIG1hcmtlcnMgPSBsaW5lLmd1dHRlck1hcmtlcnMgfHwgKGxpbmUuZ3V0dGVyTWFya2VycyA9IHt9KTtcbiAgICAgIG1hcmtlcnNbZ3V0dGVySURdID0gdmFsdWU7XG4gICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFya2VycykpIHsgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9KSxcblxuICBjbGVhckd1dHRlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oZ3V0dGVySUQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUuZ3V0dGVyTWFya2VycyAmJiBsaW5lLmd1dHRlck1hcmtlcnNbZ3V0dGVySURdKSB7XG4gICAgICAgIGNoYW5nZUxpbmUodGhpcyQxLCBsaW5lLCBcImd1dHRlclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7XG4gICAgICAgICAgaWYgKGlzRW1wdHkobGluZS5ndXR0ZXJNYXJrZXJzKSkgeyBsaW5lLmd1dHRlck1hcmtlcnMgPSBudWxsOyB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pLFxuXG4gIGxpbmVJbmZvOiBmdW5jdGlvbihsaW5lKSB7XG4gICAgdmFyIG47XG4gICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmICghaXNMaW5lKHRoaXMsIGxpbmUpKSB7IHJldHVybiBudWxsIH1cbiAgICAgIG4gPSBsaW5lO1xuICAgICAgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7XG4gICAgICBpZiAoIWxpbmUpIHsgcmV0dXJuIG51bGwgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuID0gbGluZU5vKGxpbmUpO1xuICAgICAgaWYgKG4gPT0gbnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIGd1dHRlck1hcmtlcnM6IGxpbmUuZ3V0dGVyTWFya2VycyxcbiAgICAgICAgICAgIHRleHRDbGFzczogbGluZS50ZXh0Q2xhc3MsIGJnQ2xhc3M6IGxpbmUuYmdDbGFzcywgd3JhcENsYXNzOiBsaW5lLndyYXBDbGFzcyxcbiAgICAgICAgICAgIHdpZGdldHM6IGxpbmUud2lkZ2V0c31cbiAgfSxcblxuICBhZGRMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyXCIgOiBcImNsYXNzXCIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgcHJvcCA9IHdoZXJlID09IFwidGV4dFwiID8gXCJ0ZXh0Q2xhc3NcIlxuICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICA6IHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlckNsYXNzXCIgOiBcIndyYXBDbGFzc1wiO1xuICAgICAgaWYgKCFsaW5lW3Byb3BdKSB7IGxpbmVbcHJvcF0gPSBjbHM7IH1cbiAgICAgIGVsc2UgaWYgKGNsYXNzVGVzdChjbHMpLnRlc3QobGluZVtwcm9wXSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgIGVsc2UgeyBsaW5lW3Byb3BdICs9IFwiIFwiICsgY2xzOyB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gIH0pLFxuICByZW1vdmVMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgIHJldHVybiBjaGFuZ2VMaW5lKHRoaXMsIGhhbmRsZSwgd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyXCIgOiBcImNsYXNzXCIsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgcHJvcCA9IHdoZXJlID09IFwidGV4dFwiID8gXCJ0ZXh0Q2xhc3NcIlxuICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICA6IHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlckNsYXNzXCIgOiBcIndyYXBDbGFzc1wiO1xuICAgICAgdmFyIGN1ciA9IGxpbmVbcHJvcF07XG4gICAgICBpZiAoIWN1cikgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgZWxzZSBpZiAoY2xzID09IG51bGwpIHsgbGluZVtwcm9wXSA9IG51bGw7IH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpO1xuICAgICAgICBpZiAoIWZvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICAgIHZhciBlbmQgPSBmb3VuZC5pbmRleCArIGZvdW5kWzBdLmxlbmd0aDtcbiAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gXCJcIiA6IFwiIFwiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0pXG4gIH0pLFxuXG4gIGFkZExpbmVXaWRnZXQ6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgbm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucylcbiAgfSksXG4gIHJlbW92ZUxpbmVXaWRnZXQ6IGZ1bmN0aW9uKHdpZGdldCkgeyB3aWRnZXQuY2xlYXIoKTsgfSxcblxuICBtYXJrVGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbWFya1RleHQodGhpcywgY2xpcFBvcyh0aGlzLCBmcm9tKSwgY2xpcFBvcyh0aGlzLCB0byksIG9wdGlvbnMsIG9wdGlvbnMgJiYgb3B0aW9ucy50eXBlIHx8IFwicmFuZ2VcIilcbiAgfSxcbiAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKHBvcywgb3B0aW9ucykge1xuICAgIHZhciByZWFsT3B0cyA9IHtyZXBsYWNlZFdpdGg6IG9wdGlvbnMgJiYgKG9wdGlvbnMubm9kZVR5cGUgPT0gbnVsbCA/IG9wdGlvbnMud2lkZ2V0IDogb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIGluc2VydExlZnQ6IG9wdGlvbnMgJiYgb3B0aW9ucy5pbnNlcnRMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJlZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVudHM6IG9wdGlvbnMgJiYgb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50c307XG4gICAgcG9zID0gY2xpcFBvcyh0aGlzLCBwb3MpO1xuICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsIFwiYm9va21hcmtcIilcbiAgfSxcbiAgZmluZE1hcmtzQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTtcbiAgICB2YXIgbWFya2VycyA9IFtdLCBzcGFucyA9IGdldExpbmUodGhpcywgcG9zLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgIGlmIChzcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgaWYgKChzcGFuLmZyb20gPT0gbnVsbCB8fCBzcGFuLmZyb20gPD0gcG9zLmNoKSAmJlxuICAgICAgICAgIChzcGFuLnRvID09IG51bGwgfHwgc3Bhbi50byA+PSBwb3MuY2gpKVxuICAgICAgICB7IG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOyB9XG4gICAgfSB9XG4gICAgcmV0dXJuIG1hcmtlcnNcbiAgfSxcbiAgZmluZE1hcmtzOiBmdW5jdGlvbihmcm9tLCB0bywgZmlsdGVyKSB7XG4gICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7IHRvID0gY2xpcFBvcyh0aGlzLCB0byk7XG4gICAgdmFyIGZvdW5kID0gW10sIGxpbmVObyQkMSA9IGZyb20ubGluZTtcbiAgICB0aGlzLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnM7XG4gICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICBpZiAoIShzcGFuLnRvICE9IG51bGwgJiYgbGluZU5vJCQxID09IGZyb20ubGluZSAmJiBmcm9tLmNoID49IHNwYW4udG8gfHxcbiAgICAgICAgICAgICAgc3Bhbi5mcm9tID09IG51bGwgJiYgbGluZU5vJCQxICE9IGZyb20ubGluZSB8fFxuICAgICAgICAgICAgICBzcGFuLmZyb20gIT0gbnVsbCAmJiBsaW5lTm8kJDEgPT0gdG8ubGluZSAmJiBzcGFuLmZyb20gPj0gdG8uY2gpICYmXG4gICAgICAgICAgICAoIWZpbHRlciB8fCBmaWx0ZXIoc3Bhbi5tYXJrZXIpKSlcbiAgICAgICAgICB7IGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsgfVxuICAgICAgfSB9XG4gICAgICArK2xpbmVObyQkMTtcbiAgICB9KTtcbiAgICByZXR1cm4gZm91bmRcbiAgfSxcbiAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBtYXJrZXJzID0gW107XG4gICAgdGhpcy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgc3BzID0gbGluZS5tYXJrZWRTcGFucztcbiAgICAgIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHsgaWYgKHNwc1tpXS5mcm9tICE9IG51bGwpIHsgbWFya2Vycy5wdXNoKHNwc1tpXS5tYXJrZXIpOyB9IH0gfVxuICAgIH0pO1xuICAgIHJldHVybiBtYXJrZXJzXG4gIH0sXG5cbiAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHtcbiAgICB2YXIgY2gsIGxpbmVObyQkMSA9IHRoaXMuZmlyc3QsIHNlcFNpemUgPSB0aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGg7XG4gICAgdGhpcy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgc2VwU2l6ZTtcbiAgICAgIGlmIChzeiA+IG9mZikgeyBjaCA9IG9mZjsgcmV0dXJuIHRydWUgfVxuICAgICAgb2ZmIC09IHN6O1xuICAgICAgKytsaW5lTm8kJDE7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsaXBQb3ModGhpcywgUG9zKGxpbmVObyQkMSwgY2gpKVxuICB9LFxuICBpbmRleEZyb21Qb3M6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICBjb29yZHMgPSBjbGlwUG9zKHRoaXMsIGNvb3Jkcyk7XG4gICAgdmFyIGluZGV4ID0gY29vcmRzLmNoO1xuICAgIGlmIChjb29yZHMubGluZSA8IHRoaXMuZmlyc3QgfHwgY29vcmRzLmNoIDwgMCkgeyByZXR1cm4gMCB9XG4gICAgdmFyIHNlcFNpemUgPSB0aGlzLmxpbmVTZXBhcmF0b3IoKS5sZW5ndGg7XG4gICAgdGhpcy5pdGVyKHRoaXMuZmlyc3QsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgeyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgYSB0cnV0aHkgdmFsdWVcbiAgICAgIGluZGV4ICs9IGxpbmUudGV4dC5sZW5ndGggKyBzZXBTaXplO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleFxuICB9LFxuXG4gIGNvcHk6IGZ1bmN0aW9uKGNvcHlIaXN0b3J5KSB7XG4gICAgdmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlT3B0aW9uLCB0aGlzLmZpcnN0LCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICBkb2Muc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3A7IGRvYy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0O1xuICAgIGRvYy5zZWwgPSB0aGlzLnNlbDtcbiAgICBkb2MuZXh0ZW5kID0gZmFsc2U7XG4gICAgaWYgKGNvcHlIaXN0b3J5KSB7XG4gICAgICBkb2MuaGlzdG9yeS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoO1xuICAgICAgZG9jLnNldEhpc3RvcnkodGhpcy5nZXRIaXN0b3J5KCkpO1xuICAgIH1cbiAgICByZXR1cm4gZG9jXG4gIH0sXG5cbiAgbGlua2VkRG9jOiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmcm9tID0gdGhpcy5maXJzdCwgdG8gPSB0aGlzLmZpcnN0ICsgdGhpcy5zaXplO1xuICAgIGlmIChvcHRpb25zLmZyb20gIT0gbnVsbCAmJiBvcHRpb25zLmZyb20gPiBmcm9tKSB7IGZyb20gPSBvcHRpb25zLmZyb207IH1cbiAgICBpZiAob3B0aW9ucy50byAhPSBudWxsICYmIG9wdGlvbnMudG8gPCB0bykgeyB0byA9IG9wdGlvbnMudG87IH1cbiAgICB2YXIgY29weSA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgZnJvbSwgdG8pLCBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlT3B0aW9uLCBmcm9tLCB0aGlzLmxpbmVTZXAsIHRoaXMuZGlyZWN0aW9uKTtcbiAgICBpZiAob3B0aW9ucy5zaGFyZWRIaXN0KSB7IGNvcHkuaGlzdG9yeSA9IHRoaXMuaGlzdG9yeVxuICAgIDsgfSh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5rZWQgPSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fSk7XG4gICAgY29weS5saW5rZWQgPSBbe2RvYzogdGhpcywgaXNQYXJlbnQ6IHRydWUsIHNoYXJlZEhpc3Q6IG9wdGlvbnMuc2hhcmVkSGlzdH1dO1xuICAgIGNvcHlTaGFyZWRNYXJrZXJzKGNvcHksIGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMpKTtcbiAgICByZXR1cm4gY29weVxuICB9LFxuICB1bmxpbmtEb2M6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBDb2RlTWlycm9yJDEpIHsgb3RoZXIgPSBvdGhlci5kb2M7IH1cbiAgICBpZiAodGhpcy5saW5rZWQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmtlZC5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGxpbmsgPSB0aGlzJDEubGlua2VkW2ldO1xuICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVyKSB7IGNvbnRpbnVlIH1cbiAgICAgIHRoaXMkMS5saW5rZWQuc3BsaWNlKGksIDEpO1xuICAgICAgb3RoZXIudW5saW5rRG9jKHRoaXMkMSk7XG4gICAgICBkZXRhY2hTaGFyZWRNYXJrZXJzKGZpbmRTaGFyZWRNYXJrZXJzKHRoaXMkMSkpO1xuICAgICAgYnJlYWtcbiAgICB9IH1cbiAgICAvLyBJZiB0aGUgaGlzdG9yaWVzIHdlcmUgc2hhcmVkLCBzcGxpdCB0aGVtIGFnYWluXG4gICAgaWYgKG90aGVyLmhpc3RvcnkgPT0gdGhpcy5oaXN0b3J5KSB7XG4gICAgICB2YXIgc3BsaXRJZHMgPSBbb3RoZXIuaWRdO1xuICAgICAgbGlua2VkRG9jcyhvdGhlciwgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gc3BsaXRJZHMucHVzaChkb2MuaWQpOyB9LCB0cnVlKTtcbiAgICAgIG90aGVyLmhpc3RvcnkgPSBuZXcgSGlzdG9yeShudWxsKTtcbiAgICAgIG90aGVyLmhpc3RvcnkuZG9uZSA9IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUsIHNwbGl0SWRzKTtcbiAgICAgIG90aGVyLmhpc3RvcnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7XG4gICAgfVxuICB9LFxuICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSxcblxuICBnZXRNb2RlOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5tb2RlfSxcbiAgZ2V0RWRpdG9yOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5jbX0sXG5cbiAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKHRoaXMubGluZVNlcCkgeyByZXR1cm4gc3RyLnNwbGl0KHRoaXMubGluZVNlcCkgfVxuICAgIHJldHVybiBzcGxpdExpbmVzQXV0byhzdHIpXG4gIH0sXG4gIGxpbmVTZXBhcmF0b3I6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lU2VwIHx8IFwiXFxuXCIgfSxcblxuICBzZXREaXJlY3Rpb246IGRvY01ldGhvZE9wKGZ1bmN0aW9uIChkaXIpIHtcbiAgICBpZiAoZGlyICE9IFwicnRsXCIpIHsgZGlyID0gXCJsdHJcIjsgfVxuICAgIGlmIChkaXIgPT0gdGhpcy5kaXJlY3Rpb24pIHsgcmV0dXJuIH1cbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcjtcbiAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHsgcmV0dXJuIGxpbmUub3JkZXIgPSBudWxsOyB9KTtcbiAgICBpZiAodGhpcy5jbSkgeyBkaXJlY3Rpb25DaGFuZ2VkKHRoaXMuY20pOyB9XG4gIH0pXG59KTtcblxuLy8gUHVibGljIGFsaWFzLlxuRG9jLnByb3RvdHlwZS5lYWNoTGluZSA9IERvYy5wcm90b3R5cGUuaXRlcjtcblxuLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzXG4vLyByZS1maXJlIGEgc2VyaWVzIG9mIGRyYWctcmVsYXRlZCBldmVudHMgcmlnaHQgYWZ0ZXIgdGhlIGRyb3AgKCMxNTUxKVxudmFyIGxhc3REcm9wID0gMDtcblxuZnVuY3Rpb24gb25Ecm9wKGUpIHtcbiAgdmFyIGNtID0gdGhpcztcbiAgY2xlYXJEcmFnQ3Vyc29yKGNtKTtcbiAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKVxuICAgIHsgcmV0dXJuIH1cbiAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgaWYgKGllKSB7IGxhc3REcm9wID0gK25ldyBEYXRlOyB9XG4gIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoY20sIGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzO1xuICBpZiAoIXBvcyB8fCBjbS5pc1JlYWRPbmx5KCkpIHsgcmV0dXJuIH1cbiAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHRcbiAgLy8gYW5kIGluc2VydCBpdC5cbiAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZSkge1xuICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwO1xuICAgIHZhciBsb2FkRmlsZSA9IGZ1bmN0aW9uIChmaWxlLCBpKSB7XG4gICAgICBpZiAoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMgJiZcbiAgICAgICAgICBpbmRleE9mKGNtLm9wdGlvbnMuYWxsb3dEcm9wRmlsZVR5cGVzLCBmaWxlLnR5cGUpID09IC0xKVxuICAgICAgICB7IHJldHVybiB9XG5cbiAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICBpZiAoL1tcXHgwMC1cXHgwOFxceDBlLVxceDFmXXsyfS8udGVzdChjb250ZW50KSkgeyBjb250ZW50ID0gXCJcIjsgfVxuICAgICAgICB0ZXh0W2ldID0gY29udGVudDtcbiAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7XG4gICAgICAgICAgcG9zID0gY2xpcFBvcyhjbS5kb2MsIHBvcyk7XG4gICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjbS5kb2Muc3BsaXRMaW5lcyh0ZXh0LmpvaW4oY20uZG9jLmxpbmVTZXBhcmF0b3IoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcInBhc3RlXCJ9O1xuICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2UpO1xuICAgICAgICAgIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcywgY2hhbmdlRW5kKGNoYW5nZSkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7IGxvYWRGaWxlKGZpbGVzW2ldLCBpKTsgfVxuICB9IGVsc2UgeyAvLyBOb3JtYWwgZHJvcFxuICAgIC8vIERvbid0IGRvIGEgcmVwbGFjZSBpZiB0aGUgZHJvcCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuXG4gICAgaWYgKGNtLnN0YXRlLmRyYWdnaW5nVGV4dCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPiAtMSkge1xuICAgICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0KGUpO1xuICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNlZFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdmFyIHRleHQkMSA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoXCJUZXh0XCIpO1xuICAgICAgaWYgKHRleHQkMSkge1xuICAgICAgICB2YXIgc2VsZWN0ZWQ7XG4gICAgICAgIGlmIChjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgJiYgIWNtLnN0YXRlLmRyYWdnaW5nVGV4dC5jb3B5KVxuICAgICAgICAgIHsgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOyB9XG4gICAgICAgIHNldFNlbGVjdGlvbk5vVW5kbyhjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MsIHBvcykpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgc2VsZWN0ZWQubGVuZ3RoOyArK2kkMSlcbiAgICAgICAgICB7IHJlcGxhY2VSYW5nZShjbS5kb2MsIFwiXCIsIHNlbGVjdGVkW2kkMV0uYW5jaG9yLCBzZWxlY3RlZFtpJDFdLmhlYWQsIFwiZHJhZ1wiKTsgfSB9XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24odGV4dCQxLCBcImFyb3VuZFwiLCBcInBhc3RlXCIpO1xuICAgICAgICBjbS5kaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpe31cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkge1xuICBpZiAoaWUgJiYgKCFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgfHwgK25ldyBEYXRlIC0gbGFzdERyb3AgPCAxMDApKSB7IGVfc3RvcChlKTsgcmV0dXJuIH1cbiAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKSB7IHJldHVybiB9XG5cbiAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YShcIlRleHRcIiwgY20uZ2V0U2VsZWN0aW9uKCkpO1xuICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gXCJjb3B5TW92ZVwiO1xuXG4gIC8vIFVzZSBkdW1teSBpbWFnZSBpbnN0ZWFkIG9mIGRlZmF1bHQgYnJvd3NlcnMgaW1hZ2UuXG4gIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS5cbiAgaWYgKGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSAmJiAhc2FmYXJpKSB7XG4gICAgdmFyIGltZyA9IGVsdChcImltZ1wiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBmaXhlZDsgbGVmdDogMDsgdG9wOiAwO1wiKTtcbiAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiO1xuICAgIGlmIChwcmVzdG8pIHtcbiAgICAgIGltZy53aWR0aCA9IGltZy5oZWlnaHQgPSAxO1xuICAgICAgY20uZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XG4gICAgICAvLyBGb3JjZSBhIHJlbGF5b3V0LCBvciBPcGVyYSB3b24ndCB1c2Ugb3VyIGltYWdlIGZvciBzb21lIG9ic2N1cmUgcmVhc29uXG4gICAgICBpbWcuX3RvcCA9IGltZy5vZmZzZXRUb3A7XG4gICAgfVxuICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShpbWcsIDAsIDApO1xuICAgIGlmIChwcmVzdG8pIHsgaW1nLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaW1nKTsgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uRHJhZ092ZXIoY20sIGUpIHtcbiAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7XG4gIGlmICghcG9zKSB7IHJldHVybiB9XG4gIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBwb3MsIGZyYWcpO1xuICBpZiAoIWNtLmRpc3BsYXkuZHJhZ0N1cnNvcikge1xuICAgIGNtLmRpc3BsYXkuZHJhZ0N1cnNvciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY3Vyc29ycyBDb2RlTWlycm9yLWRyYWdjdXJzb3JzXCIpO1xuICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGNtLmRpc3BsYXkuY3Vyc29yRGl2KTtcbiAgfVxuICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGZyYWcpO1xufVxuXG5mdW5jdGlvbiBjbGVhckRyYWdDdXJzb3IoY20pIHtcbiAgaWYgKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcikge1xuICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcik7XG4gICAgY20uZGlzcGxheS5kcmFnQ3Vyc29yID0gbnVsbDtcbiAgfVxufVxuXG4vLyBUaGVzZSBtdXN0IGJlIGhhbmRsZWQgY2FyZWZ1bGx5LCBiZWNhdXNlIG5haXZlbHkgcmVnaXN0ZXJpbmcgYVxuLy8gaGFuZGxlciBmb3IgZWFjaCBlZGl0b3Igd2lsbCBjYXVzZSB0aGUgZWRpdG9ycyB0byBuZXZlciBiZVxuLy8gZ2FyYmFnZSBjb2xsZWN0ZWQuXG5cbmZ1bmN0aW9uIGZvckVhY2hDb2RlTWlycm9yKGYpIHtcbiAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7IHJldHVybiB9XG4gIHZhciBieUNsYXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIkNvZGVNaXJyb3JcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnlDbGFzcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjbSA9IGJ5Q2xhc3NbaV0uQ29kZU1pcnJvcjtcbiAgICBpZiAoY20pIHsgZihjbSk7IH1cbiAgfVxufVxuXG52YXIgZ2xvYmFsc1JlZ2lzdGVyZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGVuc3VyZUdsb2JhbEhhbmRsZXJzKCkge1xuICBpZiAoZ2xvYmFsc1JlZ2lzdGVyZWQpIHsgcmV0dXJuIH1cbiAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVycygpO1xuICBnbG9iYWxzUmVnaXN0ZXJlZCA9IHRydWU7XG59XG5mdW5jdGlvbiByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCkge1xuICAvLyBXaGVuIHRoZSB3aW5kb3cgcmVzaXplcywgd2UgbmVlZCB0byByZWZyZXNoIGFjdGl2ZSBlZGl0b3JzLlxuICB2YXIgcmVzaXplVGltZXI7XG4gIG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChyZXNpemVUaW1lciA9PSBudWxsKSB7IHJlc2l6ZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICByZXNpemVUaW1lciA9IG51bGw7XG4gICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7XG4gICAgfSwgMTAwKTsgfVxuICB9KTtcbiAgLy8gV2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLCB3ZSB3YW50IHRvIHNob3cgdGhlIGVkaXRvciBhcyBibHVycmVkXG4gIG9uKHdpbmRvdywgXCJibHVyXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZvckVhY2hDb2RlTWlycm9yKG9uQmx1cik7IH0pO1xufVxuLy8gQ2FsbGVkIHdoZW4gdGhlIHdpbmRvdyByZXNpemVzXG5mdW5jdGlvbiBvblJlc2l6ZShjbSkge1xuICB2YXIgZCA9IGNtLmRpc3BsYXk7XG4gIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuXG4gIGQuY2FjaGVkQ2hhcldpZHRoID0gZC5jYWNoZWRUZXh0SGVpZ2h0ID0gZC5jYWNoZWRQYWRkaW5nSCA9IG51bGw7XG4gIGQuc2Nyb2xsYmFyc0NsaXBwZWQgPSBmYWxzZTtcbiAgY20uc2V0U2l6ZSgpO1xufVxuXG52YXIga2V5TmFtZXMgPSB7XG4gIDM6IFwiUGF1c2VcIiwgODogXCJCYWNrc3BhY2VcIiwgOTogXCJUYWJcIiwgMTM6IFwiRW50ZXJcIiwgMTY6IFwiU2hpZnRcIiwgMTc6IFwiQ3RybFwiLCAxODogXCJBbHRcIixcbiAgMTk6IFwiUGF1c2VcIiwgMjA6IFwiQ2Fwc0xvY2tcIiwgMjc6IFwiRXNjXCIsIDMyOiBcIlNwYWNlXCIsIDMzOiBcIlBhZ2VVcFwiLCAzNDogXCJQYWdlRG93blwiLCAzNTogXCJFbmRcIixcbiAgMzY6IFwiSG9tZVwiLCAzNzogXCJMZWZ0XCIsIDM4OiBcIlVwXCIsIDM5OiBcIlJpZ2h0XCIsIDQwOiBcIkRvd25cIiwgNDQ6IFwiUHJpbnRTY3JuXCIsIDQ1OiBcIkluc2VydFwiLFxuICA0NjogXCJEZWxldGVcIiwgNTk6IFwiO1wiLCA2MTogXCI9XCIsIDkxOiBcIk1vZFwiLCA5MjogXCJNb2RcIiwgOTM6IFwiTW9kXCIsXG4gIDEwNjogXCIqXCIsIDEwNzogXCI9XCIsIDEwOTogXCItXCIsIDExMDogXCIuXCIsIDExMTogXCIvXCIsIDEyNzogXCJEZWxldGVcIiwgMTQ1OiBcIlNjcm9sbExvY2tcIixcbiAgMTczOiBcIi1cIiwgMTg2OiBcIjtcIiwgMTg3OiBcIj1cIiwgMTg4OiBcIixcIiwgMTg5OiBcIi1cIiwgMTkwOiBcIi5cIiwgMTkxOiBcIi9cIiwgMTkyOiBcImBcIiwgMjE5OiBcIltcIiwgMjIwOiBcIlxcXFxcIixcbiAgMjIxOiBcIl1cIiwgMjIyOiBcIidcIiwgNjMyMzI6IFwiVXBcIiwgNjMyMzM6IFwiRG93blwiLCA2MzIzNDogXCJMZWZ0XCIsIDYzMjM1OiBcIlJpZ2h0XCIsIDYzMjcyOiBcIkRlbGV0ZVwiLFxuICA2MzI3MzogXCJIb21lXCIsIDYzMjc1OiBcIkVuZFwiLCA2MzI3NjogXCJQYWdlVXBcIiwgNjMyNzc6IFwiUGFnZURvd25cIiwgNjMzMDI6IFwiSW5zZXJ0XCJcbn07XG5cbi8vIE51bWJlciBrZXlzXG5mb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsga2V5TmFtZXNbaSArIDQ4XSA9IGtleU5hbWVzW2kgKyA5Nl0gPSBTdHJpbmcoaSk7IH1cbi8vIEFscGhhYmV0aWMga2V5c1xuZm9yICh2YXIgaSQxID0gNjU7IGkkMSA8PSA5MDsgaSQxKyspIHsga2V5TmFtZXNbaSQxXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSQxKTsgfVxuLy8gRnVuY3Rpb24ga2V5c1xuZm9yICh2YXIgaSQyID0gMTsgaSQyIDw9IDEyOyBpJDIrKykgeyBrZXlOYW1lc1tpJDIgKyAxMTFdID0ga2V5TmFtZXNbaSQyICsgNjMyMzVdID0gXCJGXCIgKyBpJDI7IH1cblxudmFyIGtleU1hcCA9IHt9O1xuXG5rZXlNYXAuYmFzaWMgPSB7XG4gIFwiTGVmdFwiOiBcImdvQ2hhckxlZnRcIiwgXCJSaWdodFwiOiBcImdvQ2hhclJpZ2h0XCIsIFwiVXBcIjogXCJnb0xpbmVVcFwiLCBcIkRvd25cIjogXCJnb0xpbmVEb3duXCIsXG4gIFwiRW5kXCI6IFwiZ29MaW5lRW5kXCIsIFwiSG9tZVwiOiBcImdvTGluZVN0YXJ0U21hcnRcIiwgXCJQYWdlVXBcIjogXCJnb1BhZ2VVcFwiLCBcIlBhZ2VEb3duXCI6IFwiZ29QYWdlRG93blwiLFxuICBcIkRlbGV0ZVwiOiBcImRlbENoYXJBZnRlclwiLCBcIkJhY2tzcGFjZVwiOiBcImRlbENoYXJCZWZvcmVcIiwgXCJTaGlmdC1CYWNrc3BhY2VcIjogXCJkZWxDaGFyQmVmb3JlXCIsXG4gIFwiVGFiXCI6IFwiZGVmYXVsdFRhYlwiLCBcIlNoaWZ0LVRhYlwiOiBcImluZGVudEF1dG9cIixcbiAgXCJFbnRlclwiOiBcIm5ld2xpbmVBbmRJbmRlbnRcIiwgXCJJbnNlcnRcIjogXCJ0b2dnbGVPdmVyd3JpdGVcIixcbiAgXCJFc2NcIjogXCJzaW5nbGVTZWxlY3Rpb25cIlxufTtcbi8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5XG4vLyBkZWZhdWx0LiBVc2VyIGNvZGUgb3IgYWRkb25zIGNhbiBkZWZpbmUgdGhlbS4gVW5rbm93biBjb21tYW5kc1xuLy8gYXJlIHNpbXBseSBpZ25vcmVkLlxua2V5TWFwLnBjRGVmYXVsdCA9IHtcbiAgXCJDdHJsLUFcIjogXCJzZWxlY3RBbGxcIiwgXCJDdHJsLURcIjogXCJkZWxldGVMaW5lXCIsIFwiQ3RybC1aXCI6IFwidW5kb1wiLCBcIlNoaWZ0LUN0cmwtWlwiOiBcInJlZG9cIiwgXCJDdHJsLVlcIjogXCJyZWRvXCIsXG4gIFwiQ3RybC1Ib21lXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkN0cmwtRW5kXCI6IFwiZ29Eb2NFbmRcIiwgXCJDdHJsLVVwXCI6IFwiZ29MaW5lVXBcIiwgXCJDdHJsLURvd25cIjogXCJnb0xpbmVEb3duXCIsXG4gIFwiQ3RybC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIiwgXCJDdHJsLVJpZ2h0XCI6IFwiZ29Hcm91cFJpZ2h0XCIsIFwiQWx0LUxlZnRcIjogXCJnb0xpbmVTdGFydFwiLCBcIkFsdC1SaWdodFwiOiBcImdvTGluZUVuZFwiLFxuICBcIkN0cmwtQmFja3NwYWNlXCI6IFwiZGVsR3JvdXBCZWZvcmVcIiwgXCJDdHJsLURlbGV0ZVwiOiBcImRlbEdyb3VwQWZ0ZXJcIiwgXCJDdHJsLVNcIjogXCJzYXZlXCIsIFwiQ3RybC1GXCI6IFwiZmluZFwiLFxuICBcIkN0cmwtR1wiOiBcImZpbmROZXh0XCIsIFwiU2hpZnQtQ3RybC1HXCI6IFwiZmluZFByZXZcIiwgXCJTaGlmdC1DdHJsLUZcIjogXCJyZXBsYWNlXCIsIFwiU2hpZnQtQ3RybC1SXCI6IFwicmVwbGFjZUFsbFwiLFxuICBcIkN0cmwtW1wiOiBcImluZGVudExlc3NcIiwgXCJDdHJsLV1cIjogXCJpbmRlbnRNb3JlXCIsXG4gIFwiQ3RybC1VXCI6IFwidW5kb1NlbGVjdGlvblwiLCBcIlNoaWZ0LUN0cmwtVVwiOiBcInJlZG9TZWxlY3Rpb25cIiwgXCJBbHQtVVwiOiBcInJlZG9TZWxlY3Rpb25cIixcbiAgXCJmYWxsdGhyb3VnaFwiOiBcImJhc2ljXCJcbn07XG4vLyBWZXJ5IGJhc2ljIHJlYWRsaW5lL2VtYWNzLXN0eWxlIGJpbmRpbmdzLCB3aGljaCBhcmUgc3RhbmRhcmQgb24gTWFjLlxua2V5TWFwLmVtYWNzeSA9IHtcbiAgXCJDdHJsLUZcIjogXCJnb0NoYXJSaWdodFwiLCBcIkN0cmwtQlwiOiBcImdvQ2hhckxlZnRcIiwgXCJDdHJsLVBcIjogXCJnb0xpbmVVcFwiLCBcIkN0cmwtTlwiOiBcImdvTGluZURvd25cIixcbiAgXCJBbHQtRlwiOiBcImdvV29yZFJpZ2h0XCIsIFwiQWx0LUJcIjogXCJnb1dvcmRMZWZ0XCIsIFwiQ3RybC1BXCI6IFwiZ29MaW5lU3RhcnRcIiwgXCJDdHJsLUVcIjogXCJnb0xpbmVFbmRcIixcbiAgXCJDdHJsLVZcIjogXCJnb1BhZ2VEb3duXCIsIFwiU2hpZnQtQ3RybC1WXCI6IFwiZ29QYWdlVXBcIiwgXCJDdHJsLURcIjogXCJkZWxDaGFyQWZ0ZXJcIiwgXCJDdHJsLUhcIjogXCJkZWxDaGFyQmVmb3JlXCIsXG4gIFwiQWx0LURcIjogXCJkZWxXb3JkQWZ0ZXJcIiwgXCJBbHQtQmFja3NwYWNlXCI6IFwiZGVsV29yZEJlZm9yZVwiLCBcIkN0cmwtS1wiOiBcImtpbGxMaW5lXCIsIFwiQ3RybC1UXCI6IFwidHJhbnNwb3NlQ2hhcnNcIixcbiAgXCJDdHJsLU9cIjogXCJvcGVuTGluZVwiXG59O1xua2V5TWFwLm1hY0RlZmF1bHQgPSB7XG4gIFwiQ21kLUFcIjogXCJzZWxlY3RBbGxcIiwgXCJDbWQtRFwiOiBcImRlbGV0ZUxpbmVcIiwgXCJDbWQtWlwiOiBcInVuZG9cIiwgXCJTaGlmdC1DbWQtWlwiOiBcInJlZG9cIiwgXCJDbWQtWVwiOiBcInJlZG9cIixcbiAgXCJDbWQtSG9tZVwiOiBcImdvRG9jU3RhcnRcIiwgXCJDbWQtVXBcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ21kLUVuZFwiOiBcImdvRG9jRW5kXCIsIFwiQ21kLURvd25cIjogXCJnb0RvY0VuZFwiLCBcIkFsdC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIixcbiAgXCJBbHQtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIiwgXCJDbWQtTGVmdFwiOiBcImdvTGluZUxlZnRcIiwgXCJDbWQtUmlnaHRcIjogXCJnb0xpbmVSaWdodFwiLCBcIkFsdC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLFxuICBcIkN0cmwtQWx0LUJhY2tzcGFjZVwiOiBcImRlbEdyb3VwQWZ0ZXJcIiwgXCJBbHQtRGVsZXRlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkNtZC1TXCI6IFwic2F2ZVwiLCBcIkNtZC1GXCI6IFwiZmluZFwiLFxuICBcIkNtZC1HXCI6IFwiZmluZE5leHRcIiwgXCJTaGlmdC1DbWQtR1wiOiBcImZpbmRQcmV2XCIsIFwiQ21kLUFsdC1GXCI6IFwicmVwbGFjZVwiLCBcIlNoaWZ0LUNtZC1BbHQtRlwiOiBcInJlcGxhY2VBbGxcIixcbiAgXCJDbWQtW1wiOiBcImluZGVudExlc3NcIiwgXCJDbWQtXVwiOiBcImluZGVudE1vcmVcIiwgXCJDbWQtQmFja3NwYWNlXCI6IFwiZGVsV3JhcHBlZExpbmVMZWZ0XCIsIFwiQ21kLURlbGV0ZVwiOiBcImRlbFdyYXBwZWRMaW5lUmlnaHRcIixcbiAgXCJDbWQtVVwiOiBcInVuZG9TZWxlY3Rpb25cIiwgXCJTaGlmdC1DbWQtVVwiOiBcInJlZG9TZWxlY3Rpb25cIiwgXCJDdHJsLVVwXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkN0cmwtRG93blwiOiBcImdvRG9jRW5kXCIsXG4gIFwiZmFsbHRocm91Z2hcIjogW1wiYmFzaWNcIiwgXCJlbWFjc3lcIl1cbn07XG5rZXlNYXBbXCJkZWZhdWx0XCJdID0gbWFjID8ga2V5TWFwLm1hY0RlZmF1bHQgOiBrZXlNYXAucGNEZWZhdWx0O1xuXG4vLyBLRVlNQVAgRElTUEFUQ0hcblxuZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoLy0oPyEkKS8pO1xuICBuYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gIHZhciBhbHQsIGN0cmwsIHNoaWZ0LCBjbWQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIG1vZCA9IHBhcnRzW2ldO1xuICAgIGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIHsgY21kID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKC9eYShsdCk/JC9pLnRlc3QobW9kKSkgeyBhbHQgPSB0cnVlOyB9XG4gICAgZWxzZSBpZiAoL14oY3xjdHJsfGNvbnRyb2wpJC9pLnRlc3QobW9kKSkgeyBjdHJsID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKC9ecyhoaWZ0KT8kL2kudGVzdChtb2QpKSB7IHNoaWZ0ID0gdHJ1ZTsgfVxuICAgIGVsc2UgeyB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbW9kaWZpZXIgbmFtZTogXCIgKyBtb2QpIH1cbiAgfVxuICBpZiAoYWx0KSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgaWYgKGN0cmwpIHsgbmFtZSA9IFwiQ3RybC1cIiArIG5hbWU7IH1cbiAgaWYgKGNtZCkgeyBuYW1lID0gXCJDbWQtXCIgKyBuYW1lOyB9XG4gIGlmIChzaGlmdCkgeyBuYW1lID0gXCJTaGlmdC1cIiArIG5hbWU7IH1cbiAgcmV0dXJuIG5hbWVcbn1cblxuLy8gVGhpcyBpcyBhIGtsdWRnZSB0byBrZWVwIGtleW1hcHMgbW9zdGx5IHdvcmtpbmcgYXMgcmF3IG9iamVjdHNcbi8vIChiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBzdXBwb3J0IGZlYXR1cmVzXG4vLyBsaWtlIG5vcm1hbGl6YXRpb24gYW5kIG11bHRpLXN0cm9rZSBrZXkgYmluZGluZ3MuIEl0IGNvbXBpbGVzIGFcbi8vIG5ldyBub3JtYWxpemVkIGtleW1hcCwgYW5kIHRoZW4gdXBkYXRlcyB0aGUgb2xkIG9iamVjdCB0byByZWZsZWN0XG4vLyB0aGlzLlxuZnVuY3Rpb24gbm9ybWFsaXplS2V5TWFwKGtleW1hcCkge1xuICB2YXIgY29weSA9IHt9O1xuICBmb3IgKHZhciBrZXluYW1lIGluIGtleW1hcCkgeyBpZiAoa2V5bWFwLmhhc093blByb3BlcnR5KGtleW5hbWUpKSB7XG4gICAgdmFyIHZhbHVlID0ga2V5bWFwW2tleW5hbWVdO1xuICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIHsgY29udGludWUgfVxuICAgIGlmICh2YWx1ZSA9PSBcIi4uLlwiKSB7IGRlbGV0ZSBrZXltYXBba2V5bmFtZV07IGNvbnRpbnVlIH1cblxuICAgIHZhciBrZXlzID0gbWFwKGtleW5hbWUuc3BsaXQoXCIgXCIpLCBub3JtYWxpemVLZXlOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSAodm9pZCAwKSwgbmFtZSA9ICh2b2lkIDApO1xuICAgICAgaWYgKGkgPT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgIG5hbWUgPSBrZXlzLmpvaW4oXCIgXCIpO1xuICAgICAgICB2YWwgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiIFwiKTtcbiAgICAgICAgdmFsID0gXCIuLi5cIjtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2ID0gY29weVtuYW1lXTtcbiAgICAgIGlmICghcHJldikgeyBjb3B5W25hbWVdID0gdmFsOyB9XG4gICAgICBlbHNlIGlmIChwcmV2ICE9IHZhbCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvbnNpc3RlbnQgYmluZGluZ3MgZm9yIFwiICsgbmFtZSkgfVxuICAgIH1cbiAgICBkZWxldGUga2V5bWFwW2tleW5hbWVdO1xuICB9IH1cbiAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSB7IGtleW1hcFtwcm9wXSA9IGNvcHlbcHJvcF07IH1cbiAgcmV0dXJuIGtleW1hcFxufVxuXG5mdW5jdGlvbiBsb29rdXBLZXkoa2V5LCBtYXAkJDEsIGhhbmRsZSwgY29udGV4dCkge1xuICBtYXAkJDEgPSBnZXRLZXlNYXAobWFwJCQxKTtcbiAgdmFyIGZvdW5kID0gbWFwJCQxLmNhbGwgPyBtYXAkJDEuY2FsbChrZXksIGNvbnRleHQpIDogbWFwJCQxW2tleV07XG4gIGlmIChmb3VuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIFwibm90aGluZ1wiIH1cbiAgaWYgKGZvdW5kID09PSBcIi4uLlwiKSB7IHJldHVybiBcIm11bHRpXCIgfVxuICBpZiAoZm91bmQgIT0gbnVsbCAmJiBoYW5kbGUoZm91bmQpKSB7IHJldHVybiBcImhhbmRsZWRcIiB9XG5cbiAgaWYgKG1hcCQkMS5mYWxsdGhyb3VnaCkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobWFwJCQxLmZhbGx0aHJvdWdoKSAhPSBcIltvYmplY3QgQXJyYXldXCIpXG4gICAgICB7IHJldHVybiBsb29rdXBLZXkoa2V5LCBtYXAkJDEuZmFsbHRocm91Z2gsIGhhbmRsZSwgY29udGV4dCkgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwJCQxLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9va3VwS2V5KGtleSwgbWFwJCQxLmZhbGx0aHJvdWdoW2ldLCBoYW5kbGUsIGNvbnRleHQpO1xuICAgICAgaWYgKHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0IH1cbiAgICB9XG4gIH1cbn1cblxuLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGVcbi8vIHB1cnBvc2Ugb2Yga2V5bWFwIGZhbGx0aHJvdWdoLlxuZnVuY3Rpb24gaXNNb2RpZmllcktleSh2YWx1ZSkge1xuICB2YXIgbmFtZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXTtcbiAgcmV0dXJuIG5hbWUgPT0gXCJDdHJsXCIgfHwgbmFtZSA9PSBcIkFsdFwiIHx8IG5hbWUgPT0gXCJTaGlmdFwiIHx8IG5hbWUgPT0gXCJNb2RcIlxufVxuXG5mdW5jdGlvbiBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50LCBub1NoaWZ0KSB7XG4gIHZhciBiYXNlID0gbmFtZTtcbiAgaWYgKGV2ZW50LmFsdEtleSAmJiBiYXNlICE9IFwiQWx0XCIpIHsgbmFtZSA9IFwiQWx0LVwiICsgbmFtZTsgfVxuICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXkpICYmIGJhc2UgIT0gXCJDdHJsXCIpIHsgbmFtZSA9IFwiQ3RybC1cIiArIG5hbWU7IH1cbiAgaWYgKChmbGlwQ3RybENtZCA/IGV2ZW50LmN0cmxLZXkgOiBldmVudC5tZXRhS2V5KSAmJiBiYXNlICE9IFwiQ21kXCIpIHsgbmFtZSA9IFwiQ21kLVwiICsgbmFtZTsgfVxuICBpZiAoIW5vU2hpZnQgJiYgZXZlbnQuc2hpZnRLZXkgJiYgYmFzZSAhPSBcIlNoaWZ0XCIpIHsgbmFtZSA9IFwiU2hpZnQtXCIgKyBuYW1lOyB9XG4gIHJldHVybiBuYW1lXG59XG5cbi8vIExvb2sgdXAgdGhlIG5hbWUgb2YgYSBrZXkgYXMgaW5kaWNhdGVkIGJ5IGFuIGV2ZW50IG9iamVjdC5cbmZ1bmN0aW9uIGtleU5hbWUoZXZlbnQsIG5vU2hpZnQpIHtcbiAgaWYgKHByZXN0byAmJiBldmVudC5rZXlDb2RlID09IDM0ICYmIGV2ZW50W1wiY2hhclwiXSkgeyByZXR1cm4gZmFsc2UgfVxuICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdO1xuICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSB7IHJldHVybiBmYWxzZSB9XG4gIC8vIEN0cmwtU2Nyb2xsTG9jayBoYXMga2V5Q29kZSAzLCBzYW1lIGFzIEN0cmwtUGF1c2UsXG4gIC8vIHNvIHdlJ2xsIHVzZSBldmVudC5jb2RlIHdoZW4gYXZhaWxhYmxlIChDaHJvbWUgNDgrLCBGRiAzOCssIFNhZmFyaSAxMC4xKylcbiAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMyAmJiBldmVudC5jb2RlKSB7IG5hbWUgPSBldmVudC5jb2RlOyB9XG4gIHJldHVybiBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50LCBub1NoaWZ0KVxufVxuXG5mdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyBrZXlNYXBbdmFsXSA6IHZhbFxufVxuXG4vLyBIZWxwZXIgZm9yIGRlbGV0aW5nIHRleHQgbmVhciB0aGUgc2VsZWN0aW9uKHMpLCB1c2VkIHRvIGltcGxlbWVudFxuLy8gYmFja3NwYWNlLCBkZWxldGUsIGFuZCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkuXG5mdW5jdGlvbiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBjb21wdXRlKSB7XG4gIHZhciByYW5nZXMgPSBjbS5kb2Muc2VsLnJhbmdlcywga2lsbCA9IFtdO1xuICAvLyBCdWlsZCB1cCBhIHNldCBvZiByYW5nZXMgdG8ga2lsbCBmaXJzdCwgbWVyZ2luZyBvdmVybGFwcGluZ1xuICAvLyByYW5nZXMuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRvS2lsbCA9IGNvbXB1dGUocmFuZ2VzW2ldKTtcbiAgICB3aGlsZSAoa2lsbC5sZW5ndGggJiYgY21wKHRvS2lsbC5mcm9tLCBsc3Qoa2lsbCkudG8pIDw9IDApIHtcbiAgICAgIHZhciByZXBsYWNlZCA9IGtpbGwucG9wKCk7XG4gICAgICBpZiAoY21wKHJlcGxhY2VkLmZyb20sIHRvS2lsbC5mcm9tKSA8IDApIHtcbiAgICAgICAgdG9LaWxsLmZyb20gPSByZXBsYWNlZC5mcm9tO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBraWxsLnB1c2godG9LaWxsKTtcbiAgfVxuICAvLyBOZXh0LCByZW1vdmUgdGhvc2UgYWN0dWFsIHJhbmdlcy5cbiAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSBraWxsLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCBcIlwiLCBraWxsW2ldLmZyb20sIGtpbGxbaV0udG8sIFwiK2RlbGV0ZVwiKTsgfVxuICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgY2gsIGRpcikge1xuICB2YXIgdGFyZ2V0ID0gc2tpcEV4dGVuZGluZ0NoYXJzKGxpbmUudGV4dCwgY2ggKyBkaXIsIGRpcik7XG4gIHJldHVybiB0YXJnZXQgPCAwIHx8IHRhcmdldCA+IGxpbmUudGV4dC5sZW5ndGggPyBudWxsIDogdGFyZ2V0XG59XG5cbmZ1bmN0aW9uIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpcikge1xuICB2YXIgY2ggPSBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBzdGFydC5jaCwgZGlyKTtcbiAgcmV0dXJuIGNoID09IG51bGwgPyBudWxsIDogbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgZGlyIDwgMCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpXG59XG5cbmZ1bmN0aW9uIGVuZE9mTGluZSh2aXN1YWxseSwgY20sIGxpbmVPYmosIGxpbmVObywgZGlyKSB7XG4gIGlmICh2aXN1YWxseSkge1xuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgIGlmIChvcmRlcikge1xuICAgICAgdmFyIHBhcnQgPSBkaXIgPCAwID8gbHN0KG9yZGVyKSA6IG9yZGVyWzBdO1xuICAgICAgdmFyIG1vdmVJblN0b3JhZ2VPcmRlciA9IChkaXIgPCAwKSA9PSAocGFydC5sZXZlbCA9PSAxKTtcbiAgICAgIHZhciBzdGlja3kgPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgICAgdmFyIGNoO1xuICAgICAgLy8gV2l0aCBhIHdyYXBwZWQgcnRsIGNodW5rIChwb3NzaWJseSBzcGFubmluZyBtdWx0aXBsZSBiaWRpIHBhcnRzKSxcbiAgICAgIC8vIGl0IGNvdWxkIGJlIHRoYXQgdGhlIGxhc3QgYmlkaSBwYXJ0IGlzIG5vdCBvbiB0aGUgbGFzdCB2aXN1YWwgbGluZSxcbiAgICAgIC8vIHNpbmNlIHZpc3VhbCBsaW5lcyBjb250YWluIGNvbnRlbnQgb3JkZXItY29uc2VjdXRpdmUgY2h1bmtzLlxuICAgICAgLy8gVGh1cywgaW4gcnRsLCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGZpcnN0IChjb250ZW50LW9yZGVyKSBjaGFyYWN0ZXJcbiAgICAgIC8vIGluIHRoZSBydGwgY2h1bmsgdGhhdCBpcyBvbiB0aGUgbGFzdCBsaW5lICh0aGF0IGlzLCB0aGUgc2FtZSBsaW5lXG4gICAgICAvLyBhcyB0aGUgbGFzdCAoY29udGVudC1vcmRlcikgY2hhcmFjdGVyKS5cbiAgICAgIGlmIChwYXJ0LmxldmVsID4gMCB8fCBjbS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIpIHtcbiAgICAgICAgdmFyIHByZXAgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopO1xuICAgICAgICBjaCA9IGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgIHZhciB0YXJnZXRUb3AgPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwLCBjaCkudG9wO1xuICAgICAgICBjaCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXAsIGNoKS50b3AgPT0gdGFyZ2V0VG9wOyB9LCAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSkgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMSwgY2gpO1xuICAgICAgICBpZiAoc3RpY2t5ID09IFwiYmVmb3JlXCIpIHsgY2ggPSBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lT2JqLCBjaCwgMSk7IH1cbiAgICAgIH0gZWxzZSB7IGNoID0gZGlyIDwgMCA/IHBhcnQudG8gOiBwYXJ0LmZyb207IH1cbiAgICAgIHJldHVybiBuZXcgUG9zKGxpbmVObywgY2gsIHN0aWNreSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBQb3MobGluZU5vLCBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDAsIGRpciA8IDAgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKVxufVxuXG5mdW5jdGlvbiBtb3ZlVmlzdWFsbHkoY20sIGxpbmUsIHN0YXJ0LCBkaXIpIHtcbiAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgaWYgKCFiaWRpKSB7IHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIpIH1cbiAgaWYgKHN0YXJ0LmNoID49IGxpbmUudGV4dC5sZW5ndGgpIHtcbiAgICBzdGFydC5jaCA9IGxpbmUudGV4dC5sZW5ndGg7XG4gICAgc3RhcnQuc3RpY2t5ID0gXCJiZWZvcmVcIjtcbiAgfSBlbHNlIGlmIChzdGFydC5jaCA8PSAwKSB7XG4gICAgc3RhcnQuY2ggPSAwO1xuICAgIHN0YXJ0LnN0aWNreSA9IFwiYWZ0ZXJcIjtcbiAgfVxuICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQoYmlkaSwgc3RhcnQuY2gsIHN0YXJ0LnN0aWNreSksIHBhcnQgPSBiaWRpW3BhcnRQb3NdO1xuICBpZiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcImx0clwiICYmIHBhcnQubGV2ZWwgJSAyID09IDAgJiYgKGRpciA+IDAgPyBwYXJ0LnRvID4gc3RhcnQuY2ggOiBwYXJ0LmZyb20gPCBzdGFydC5jaCkpIHtcbiAgICAvLyBDYXNlIDE6IFdlIG1vdmUgd2l0aGluIGFuIGx0ciBwYXJ0IGluIGFuIGx0ciBlZGl0b3IuIEV2ZW4gd2l0aCB3cmFwcGVkIGxpbmVzLFxuICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy5cbiAgICByZXR1cm4gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyKVxuICB9XG5cbiAgdmFyIG12ID0gZnVuY3Rpb24gKHBvcywgZGlyKSB7IHJldHVybiBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBwb3MgaW5zdGFuY2VvZiBQb3MgPyBwb3MuY2ggOiBwb3MsIGRpcik7IH07XG4gIHZhciBwcmVwO1xuICB2YXIgZ2V0V3JhcHBlZExpbmVFeHRlbnQgPSBmdW5jdGlvbiAoY2gpIHtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IHJldHVybiB7YmVnaW46IDAsIGVuZDogbGluZS50ZXh0Lmxlbmd0aH0gfVxuICAgIHByZXAgPSBwcmVwIHx8IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSk7XG4gICAgcmV0dXJuIHdyYXBwZWRMaW5lRXh0ZW50Q2hhcihjbSwgbGluZSwgcHJlcCwgY2gpXG4gIH07XG4gIHZhciB3cmFwcGVkTGluZUV4dGVudCA9IGdldFdyYXBwZWRMaW5lRXh0ZW50KHN0YXJ0LnN0aWNreSA9PSBcImJlZm9yZVwiID8gbXYoc3RhcnQsIC0xKSA6IHN0YXJ0LmNoKTtcblxuICBpZiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiIHx8IHBhcnQubGV2ZWwgPT0gMSkge1xuICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAocGFydC5sZXZlbCA9PSAxKSA9PSAoZGlyIDwgMCk7XG4gICAgdmFyIGNoID0gbXYoc3RhcnQsIG1vdmVJblN0b3JhZ2VPcmRlciA/IDEgOiAtMSk7XG4gICAgaWYgKGNoICE9IG51bGwgJiYgKCFtb3ZlSW5TdG9yYWdlT3JkZXIgPyBjaCA+PSBwYXJ0LmZyb20gJiYgY2ggPj0gd3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gOiBjaCA8PSBwYXJ0LnRvICYmIGNoIDw9IHdyYXBwZWRMaW5lRXh0ZW50LmVuZCkpIHtcbiAgICAgIC8vIENhc2UgMjogV2UgbW92ZSB3aXRoaW4gYW4gcnRsIHBhcnQgb3IgaW4gYW4gcnRsIGVkaXRvciBvbiB0aGUgc2FtZSB2aXN1YWwgbGluZVxuICAgICAgdmFyIHN0aWNreSA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IFwiYmVmb3JlXCIgOiBcImFmdGVyXCI7XG4gICAgICByZXR1cm4gbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgc3RpY2t5KVxuICAgIH1cbiAgfVxuXG4gIC8vIENhc2UgMzogQ291bGQgbm90IG1vdmUgd2l0aGluIHRoaXMgYmlkaSBwYXJ0IGluIHRoaXMgdmlzdWFsIGxpbmUsIHNvIGxlYXZlXG4gIC8vIHRoZSBjdXJyZW50IGJpZGkgcGFydFxuXG4gIHZhciBzZWFyY2hJblZpc3VhbExpbmUgPSBmdW5jdGlvbiAocGFydFBvcywgZGlyLCB3cmFwcGVkTGluZUV4dGVudCkge1xuICAgIHZhciBnZXRSZXMgPSBmdW5jdGlvbiAoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgeyByZXR1cm4gbW92ZUluU3RvcmFnZU9yZGVyXG4gICAgICA/IG5ldyBQb3Moc3RhcnQubGluZSwgbXYoY2gsIDEpLCBcImJlZm9yZVwiKVxuICAgICAgOiBuZXcgUG9zKHN0YXJ0LmxpbmUsIGNoLCBcImFmdGVyXCIpOyB9O1xuXG4gICAgZm9yICg7IHBhcnRQb3MgPj0gMCAmJiBwYXJ0UG9zIDwgYmlkaS5sZW5ndGg7IHBhcnRQb3MgKz0gZGlyKSB7XG4gICAgICB2YXIgcGFydCA9IGJpZGlbcGFydFBvc107XG4gICAgICB2YXIgbW92ZUluU3RvcmFnZU9yZGVyID0gKGRpciA+IDApID09IChwYXJ0LmxldmVsICE9IDEpO1xuICAgICAgdmFyIGNoID0gbW92ZUluU3RvcmFnZU9yZGVyID8gd3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gOiBtdih3cmFwcGVkTGluZUV4dGVudC5lbmQsIC0xKTtcbiAgICAgIGlmIChwYXJ0LmZyb20gPD0gY2ggJiYgY2ggPCBwYXJ0LnRvKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgY2ggPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBwYXJ0LmZyb20gOiBtdihwYXJ0LnRvLCAtMSk7XG4gICAgICBpZiAod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4gPD0gY2ggJiYgY2ggPCB3cmFwcGVkTGluZUV4dGVudC5lbmQpIHsgcmV0dXJuIGdldFJlcyhjaCwgbW92ZUluU3RvcmFnZU9yZGVyKSB9XG4gICAgfVxuICB9O1xuXG4gIC8vIENhc2UgM2E6IExvb2sgZm9yIG90aGVyIGJpZGkgcGFydHMgb24gdGhlIHNhbWUgdmlzdWFsIGxpbmVcbiAgdmFyIHJlcyA9IHNlYXJjaEluVmlzdWFsTGluZShwYXJ0UG9zICsgZGlyLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KTtcbiAgaWYgKHJlcykgeyByZXR1cm4gcmVzIH1cblxuICAvLyBDYXNlIDNiOiBMb29rIGZvciBvdGhlciBiaWRpIHBhcnRzIG9uIHRoZSBuZXh0IHZpc3VhbCBsaW5lXG4gIHZhciBuZXh0Q2ggPSBkaXIgPiAwID8gd3JhcHBlZExpbmVFeHRlbnQuZW5kIDogbXYod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4sIC0xKTtcbiAgaWYgKG5leHRDaCAhPSBudWxsICYmICEoZGlyID4gMCAmJiBuZXh0Q2ggPT0gbGluZS50ZXh0Lmxlbmd0aCkpIHtcbiAgICByZXMgPSBzZWFyY2hJblZpc3VhbExpbmUoZGlyID4gMCA/IDAgOiBiaWRpLmxlbmd0aCAtIDEsIGRpciwgZ2V0V3JhcHBlZExpbmVFeHRlbnQobmV4dENoKSk7XG4gICAgaWYgKHJlcykgeyByZXR1cm4gcmVzIH1cbiAgfVxuXG4gIC8vIENhc2UgNDogTm93aGVyZSB0byBtb3ZlXG4gIHJldHVybiBudWxsXG59XG5cbi8vIENvbW1hbmRzIGFyZSBwYXJhbWV0ZXItbGVzcyBhY3Rpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBvbiBhblxuLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuXG52YXIgY29tbWFuZHMgPSB7XG4gIHNlbGVjdEFsbDogc2VsZWN0QWxsLFxuICBzaW5nbGVTZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcihcImFuY2hvclwiKSwgY20uZ2V0Q3Vyc29yKFwiaGVhZFwiKSwgc2VsX2RvbnRTY3JvbGwpOyB9LFxuICBraWxsTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICBpZiAocmFuZ2UuZW1wdHkoKSkge1xuICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoO1xuICAgICAgaWYgKHJhbmdlLmhlYWQuY2ggPT0gbGVuICYmIHJhbmdlLmhlYWQubGluZSA8IGNtLmxhc3RMaW5lKCkpXG4gICAgICAgIHsgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSArIDEsIDApfSB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgcmV0dXJuIHtmcm9tOiByYW5nZS5oZWFkLCB0bzogUG9zKHJhbmdlLmhlYWQubGluZSwgbGVuKX0gfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9XG4gICAgfVxuICB9KTsgfSxcbiAgZGVsZXRlTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuICh7XG4gICAgZnJvbTogUG9zKHJhbmdlLmZyb20oKS5saW5lLCAwKSxcbiAgICB0bzogY2xpcFBvcyhjbS5kb2MsIFBvcyhyYW5nZS50bygpLmxpbmUgKyAxLCAwKSlcbiAgfSk7IH0pOyB9LFxuICBkZWxMaW5lTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuICh7XG4gICAgZnJvbTogUG9zKHJhbmdlLmZyb20oKS5saW5lLCAwKSwgdG86IHJhbmdlLmZyb20oKVxuICB9KTsgfSk7IH0sXG4gIGRlbFdyYXBwZWRMaW5lTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICB2YXIgdG9wID0gY20uY2hhckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICByZXR1cm4ge2Zyb206IGxlZnRQb3MsIHRvOiByYW5nZS5mcm9tKCl9XG4gIH0pOyB9LFxuICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgdmFyIHJpZ2h0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogY20uZGlzcGxheS5saW5lRGl2Lm9mZnNldFdpZHRoICsgMTAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpO1xuICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmlnaHRQb3MgfVxuICB9KTsgfSxcbiAgdW5kbzogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS51bmRvKCk7IH0sXG4gIHJlZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkbygpOyB9LFxuICB1bmRvU2VsZWN0aW9uOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnVuZG9TZWxlY3Rpb24oKTsgfSxcbiAgcmVkb1NlbGVjdGlvbjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZWRvU2VsZWN0aW9uKCk7IH0sXG4gIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpOyB9LFxuICBnb0RvY0VuZDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb24oUG9zKGNtLmxhc3RMaW5lKCkpKTsgfSxcbiAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0KGNtLCByYW5nZS5oZWFkLmxpbmUpOyB9LFxuICAgIHtvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMX1cbiAgKTsgfSxcbiAgZ29MaW5lU3RhcnRTbWFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCk7IH0sXG4gICAge29yaWdpbjogXCIrbW92ZVwiLCBiaWFzOiAxfVxuICApOyB9LFxuICBnb0xpbmVFbmQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZUVuZChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSxcbiAgICB7b3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IC0xfVxuICApOyB9LFxuICBnb0xpbmVSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgdmFyIHRvcCA9IGNtLmN1cnNvckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiBjbS5kaXNwbGF5LmxpbmVEaXYub2Zmc2V0V2lkdGggKyAxMDAsIHRvcDogdG9wfSwgXCJkaXZcIilcbiAgfSwgc2VsX21vdmUpOyB9LFxuICBnb0xpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICB2YXIgdG9wID0gY20uY3Vyc29yQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IDAsIHRvcDogdG9wfSwgXCJkaXZcIilcbiAgfSwgc2VsX21vdmUpOyB9LFxuICBnb0xpbmVMZWZ0U21hcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHZhciB0b3AgPSBjbS5jdXJzb3JDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICBpZiAocG9zLmNoIDwgY20uZ2V0TGluZShwb3MubGluZSkuc2VhcmNoKC9cXFMvKSkgeyByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpIH1cbiAgICByZXR1cm4gcG9zXG4gIH0sIHNlbF9tb3ZlKTsgfSxcbiAgZ29MaW5lVXA6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoLTEsIFwibGluZVwiKTsgfSxcbiAgZ29MaW5lRG93bjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCBcImxpbmVcIik7IH0sXG4gIGdvUGFnZVVwOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKC0xLCBcInBhZ2VcIik7IH0sXG4gIGdvUGFnZURvd246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoMSwgXCJwYWdlXCIpOyB9LFxuICBnb0NoYXJMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImNoYXJcIik7IH0sXG4gIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwiY2hhclwiKTsgfSxcbiAgZ29Db2x1bW5MZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImNvbHVtblwiKTsgfSxcbiAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCBcImNvbHVtblwiKTsgfSxcbiAgZ29Xb3JkTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJ3b3JkXCIpOyB9LFxuICBnb0dyb3VwUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJncm91cFwiKTsgfSxcbiAgZ29Hcm91cExlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsIFwiZ3JvdXBcIik7IH0sXG4gIGdvV29yZFJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwid29yZFwiKTsgfSxcbiAgZGVsQ2hhckJlZm9yZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKC0xLCBcImNoYXJcIik7IH0sXG4gIGRlbENoYXJBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiY2hhclwiKTsgfSxcbiAgZGVsV29yZEJlZm9yZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKC0xLCBcIndvcmRcIik7IH0sXG4gIGRlbFdvcmRBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwid29yZFwiKTsgfSxcbiAgZGVsR3JvdXBCZWZvcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgtMSwgXCJncm91cFwiKTsgfSxcbiAgZGVsR3JvdXBBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiZ3JvdXBcIik7IH0sXG4gIGluZGVudEF1dG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwic21hcnRcIik7IH0sXG4gIGluZGVudE1vcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwiYWRkXCIpOyB9LFxuICBpbmRlbnRMZXNzOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcInN1YnRyYWN0XCIpOyB9LFxuICBpbnNlcnRUYWI6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVwbGFjZVNlbGVjdGlvbihcIlxcdFwiKTsgfSxcbiAgaW5zZXJ0U29mdFRhYjogZnVuY3Rpb24gKGNtKSB7XG4gICAgdmFyIHNwYWNlcyA9IFtdLCByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmZyb20oKTtcbiAgICAgIHZhciBjb2wgPSBjb3VudENvbHVtbihjbS5nZXRMaW5lKHBvcy5saW5lKSwgcG9zLmNoLCB0YWJTaXplKTtcbiAgICAgIHNwYWNlcy5wdXNoKHNwYWNlU3RyKHRhYlNpemUgLSBjb2wgJSB0YWJTaXplKSk7XG4gICAgfVxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHNwYWNlcyk7XG4gIH0sXG4gIGRlZmF1bHRUYWI6IGZ1bmN0aW9uIChjbSkge1xuICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IGNtLmluZGVudFNlbGVjdGlvbihcImFkZFwiKTsgfVxuICAgIGVsc2UgeyBjbS5leGVjQ29tbWFuZChcImluc2VydFRhYlwiKTsgfVxuICB9LFxuICAvLyBTd2FwIHRoZSB0d28gY2hhcnMgbGVmdCBhbmQgcmlnaHQgb2YgZWFjaCBzZWxlY3Rpb24ncyBoZWFkLlxuICAvLyBNb3ZlIGN1cnNvciBiZWhpbmQgdGhlIHR3byBzd2FwcGVkIGNoYXJhY3RlcnMgYWZ0ZXJ3YXJkcy5cbiAgLy9cbiAgLy8gRG9lc24ndCBjb25zaWRlciBsaW5lIGZlZWRzIGEgY2hhcmFjdGVyLlxuICAvLyBEb2Vzbid0IHNjYW4gbW9yZSB0aGFuIG9uZSBsaW5lIGFib3ZlIHRvIGZpbmQgYSBjaGFyYWN0ZXIuXG4gIC8vIERvZXNuJ3QgZG8gYW55dGhpbmcgb24gYW4gZW1wdHkgbGluZS5cbiAgLy8gRG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIG5vbi1lbXB0eSBzZWxlY3Rpb25zLlxuICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIG5ld1NlbCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0uaGVhZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSkudGV4dDtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIGlmIChjdXIuY2ggPT0gbGluZS5sZW5ndGgpIHsgY3VyID0gbmV3IFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMSk7IH1cbiAgICAgICAgaWYgKGN1ci5jaCA+IDApIHtcbiAgICAgICAgICBjdXIgPSBuZXcgUG9zKGN1ci5saW5lLCBjdXIuY2ggKyAxKTtcbiAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoIC0gMSkgKyBsaW5lLmNoYXJBdChjdXIuY2ggLSAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyLCBcIit0cmFuc3Bvc2VcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VyLmxpbmUgPiBjbS5kb2MuZmlyc3QpIHtcbiAgICAgICAgICB2YXIgcHJldiA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSAtIDEpLnRleHQ7XG4gICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIDEpO1xuICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGxpbmUuY2hhckF0KDApICsgY20uZG9jLmxpbmVTZXBhcmF0b3IoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3MoY3VyLmxpbmUgLSAxLCBwcmV2Lmxlbmd0aCAtIDEpLCBjdXIsIFwiK3RyYW5zcG9zZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5ld1NlbC5wdXNoKG5ldyBSYW5nZShjdXIsIGN1cikpO1xuICAgIH1cbiAgICBjbS5zZXRTZWxlY3Rpb25zKG5ld1NlbCk7XG4gIH0pOyB9LFxuICBuZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IHNlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICB7IGNtLnJlcGxhY2VSYW5nZShjbS5kb2MubGluZVNlcGFyYXRvcigpLCBzZWxzW2ldLmFuY2hvciwgc2Vsc1tpXS5oZWFkLCBcIitpbnB1dFwiKTsgfVxuICAgIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNlbHMubGVuZ3RoOyBpJDErKylcbiAgICAgIHsgY20uaW5kZW50TGluZShzZWxzW2kkMV0uZnJvbSgpLmxpbmUsIG51bGwsIHRydWUpOyB9XG4gICAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7XG4gIH0pOyB9LFxuICBvcGVuTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXFxuXCIsIFwic3RhcnRcIik7IH0sXG4gIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS50b2dnbGVPdmVyd3JpdGUoKTsgfVxufTtcblxuXG5mdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7XG4gIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTtcbiAgdmFyIHZpc3VhbCA9IHZpc3VhbExpbmUobGluZSk7XG4gIGlmICh2aXN1YWwgIT0gbGluZSkgeyBsaW5lTiA9IGxpbmVObyh2aXN1YWwpOyB9XG4gIHJldHVybiBlbmRPZkxpbmUodHJ1ZSwgY20sIHZpc3VhbCwgbGluZU4sIDEpXG59XG5mdW5jdGlvbiBsaW5lRW5kKGNtLCBsaW5lTikge1xuICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBsaW5lTik7XG4gIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lRW5kKGxpbmUpO1xuICBpZiAodmlzdWFsICE9IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsgfVxuICByZXR1cm4gZW5kT2ZMaW5lKHRydWUsIGNtLCBsaW5lLCBsaW5lTiwgLTEpXG59XG5mdW5jdGlvbiBsaW5lU3RhcnRTbWFydChjbSwgcG9zKSB7XG4gIHZhciBzdGFydCA9IGxpbmVTdGFydChjbSwgcG9zLmxpbmUpO1xuICB2YXIgbGluZSA9IGdldExpbmUoY20uZG9jLCBzdGFydC5saW5lKTtcbiAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSwgY20uZG9jLmRpcmVjdGlvbik7XG4gIGlmICghb3JkZXIgfHwgb3JkZXJbMF0ubGV2ZWwgPT0gMCkge1xuICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZS50ZXh0LnNlYXJjaCgvXFxTLykpO1xuICAgIHZhciBpbldTID0gcG9zLmxpbmUgPT0gc3RhcnQubGluZSAmJiBwb3MuY2ggPD0gZmlyc3ROb25XUyAmJiBwb3MuY2g7XG4gICAgcmV0dXJuIFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MsIHN0YXJ0LnN0aWNreSlcbiAgfVxuICByZXR1cm4gc3RhcnRcbn1cblxuLy8gUnVuIGEgaGFuZGxlciB0aGF0IHdhcyBib3VuZCB0byBhIGtleS5cbmZ1bmN0aW9uIGRvSGFuZGxlQmluZGluZyhjbSwgYm91bmQsIGRyb3BTaGlmdCkge1xuICBpZiAodHlwZW9mIGJvdW5kID09IFwic3RyaW5nXCIpIHtcbiAgICBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTtcbiAgICBpZiAoIWJvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgLy8gRW5zdXJlIHByZXZpb3VzIGlucHV0IGhhcyBiZWVuIHJlYWQsIHNvIHRoYXQgdGhlIGhhbmRsZXIgc2VlcyBhXG4gIC8vIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgZG9jdW1lbnRcbiAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTtcbiAgdmFyIHByZXZTaGlmdCA9IGNtLmRpc3BsYXkuc2hpZnQsIGRvbmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBpZiAoY20uaXNSZWFkT25seSgpKSB7IGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOyB9XG4gICAgaWYgKGRyb3BTaGlmdCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH1cbiAgICBkb25lID0gYm91bmQoY20pICE9IFBhc3M7XG4gIH0gZmluYWxseSB7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IHByZXZTaGlmdDtcbiAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRvbmVcbn1cblxuZnVuY3Rpb24gbG9va3VwS2V5Rm9yRWRpdG9yKGNtLCBuYW1lLCBoYW5kbGUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5zdGF0ZS5rZXlNYXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShuYW1lLCBjbS5zdGF0ZS5rZXlNYXBzW2ldLCBoYW5kbGUsIGNtKTtcbiAgICBpZiAocmVzdWx0KSB7IHJldHVybiByZXN1bHQgfVxuICB9XG4gIHJldHVybiAoY20ub3B0aW9ucy5leHRyYUtleXMgJiYgbG9va3VwS2V5KG5hbWUsIGNtLm9wdGlvbnMuZXh0cmFLZXlzLCBoYW5kbGUsIGNtKSlcbiAgICB8fCBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5rZXlNYXAsIGhhbmRsZSwgY20pXG59XG5cbi8vIE5vdGUgdGhhdCwgZGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgdG8gY2hlY2tcbi8vIGZvciBib3VuZCBtb3VzZSBjbGlja3MuXG5cbnZhciBzdG9wU2VxID0gbmV3IERlbGF5ZWQ7XG5cbmZ1bmN0aW9uIGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBoYW5kbGUpIHtcbiAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTtcbiAgaWYgKHNlcSkge1xuICAgIGlmIChpc01vZGlmaWVyS2V5KG5hbWUpKSB7IHJldHVybiBcImhhbmRsZWRcIiB9XG4gICAgaWYgKC9cXCckLy50ZXN0KG5hbWUpKVxuICAgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsOyB9XG4gICAgZWxzZVxuICAgICAgeyBzdG9wU2VxLnNldCg1MCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY20uc3RhdGUua2V5U2VxID09IHNlcSkge1xuICAgICAgICAgIGNtLnN0YXRlLmtleVNlcSA9IG51bGw7XG4gICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICB9KTsgfVxuICAgIGlmIChkaXNwYXRjaEtleUlubmVyKGNtLCBzZXEgKyBcIiBcIiArIG5hbWUsIGUsIGhhbmRsZSkpIHsgcmV0dXJuIHRydWUgfVxuICB9XG4gIHJldHVybiBkaXNwYXRjaEtleUlubmVyKGNtLCBuYW1lLCBlLCBoYW5kbGUpXG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoS2V5SW5uZXIoY20sIG5hbWUsIGUsIGhhbmRsZSkge1xuICB2YXIgcmVzdWx0ID0gbG9va3VwS2V5Rm9yRWRpdG9yKGNtLCBuYW1lLCBoYW5kbGUpO1xuXG4gIGlmIChyZXN1bHQgPT0gXCJtdWx0aVwiKVxuICAgIHsgY20uc3RhdGUua2V5U2VxID0gbmFtZTsgfVxuICBpZiAocmVzdWx0ID09IFwiaGFuZGxlZFwiKVxuICAgIHsgc2lnbmFsTGF0ZXIoY20sIFwia2V5SGFuZGxlZFwiLCBjbSwgbmFtZSwgZSk7IH1cblxuICBpZiAocmVzdWx0ID09IFwiaGFuZGxlZFwiIHx8IHJlc3VsdCA9PSBcIm11bHRpXCIpIHtcbiAgICBlX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgIHJlc3RhcnRCbGluayhjbSk7XG4gIH1cblxuICByZXR1cm4gISFyZXN1bHRcbn1cblxuLy8gSGFuZGxlIGEga2V5IGZyb20gdGhlIGtleWRvd24gZXZlbnQuXG5mdW5jdGlvbiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSB7XG4gIHZhciBuYW1lID0ga2V5TmFtZShlLCB0cnVlKTtcbiAgaWYgKCFuYW1lKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgaWYgKGUuc2hpZnRLZXkgJiYgIWNtLnN0YXRlLmtleVNlcSkge1xuICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5jbHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZ1xuICAgIC8vIHRoYXQsIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnNvci1tb3Rpb24gY29tbWFuZCAoc3RhcnRpbmcgd2l0aFxuICAgIC8vICdnbycpIGJvdW5kIHRvIHRoZSBrZXluYW1lIHdpdGhvdXQgJ1NoaWZ0LScuXG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBcIlNoaWZ0LVwiICsgbmFtZSwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pXG4gICAgICAgIHx8IGRpc3BhdGNoS2V5KGNtLCBuYW1lLCBlLCBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSBcInN0cmluZ1wiID8gL15nb1tBLVpdLy50ZXN0KGIpIDogYi5tb3Rpb24pXG4gICAgICAgICAgICAgICB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpIH1cbiAgICAgICAgICAgfSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KVxuICB9XG59XG5cbi8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudFxuZnVuY3Rpb24gaGFuZGxlQ2hhckJpbmRpbmcoY20sIGUsIGNoKSB7XG4gIHJldHVybiBkaXNwYXRjaEtleShjbSwgXCInXCIgKyBjaCArIFwiJ1wiLCBlLCBmdW5jdGlvbiAoYikgeyByZXR1cm4gZG9IYW5kbGVCaW5kaW5nKGNtLCBiLCB0cnVlKTsgfSlcbn1cblxudmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbDtcbmZ1bmN0aW9uIG9uS2V5RG93bihlKSB7XG4gIHZhciBjbSA9IHRoaXM7XG4gIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgLy8gSUUgZG9lcyBzdHJhbmdlIHRoaW5ncyB3aXRoIGVzY2FwZS5cbiAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gIHZhciBjb2RlID0gZS5rZXlDb2RlO1xuICBjbS5kaXNwbGF5LnNoaWZ0ID0gY29kZSA9PSAxNiB8fCBlLnNoaWZ0S2V5O1xuICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpO1xuICBpZiAocHJlc3RvKSB7XG4gICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7XG4gICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ib1xuICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYmICFoYXNDb3B5RXZlbnQgJiYgKG1hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpXG4gICAgICB7IGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7IH1cbiAgfVxuXG4gIC8vIFR1cm4gbW91c2UgaW50byBjcm9zc2hhaXIgd2hlbiBBbHQgaXMgaGVsZCBvbiBNYWMuXG4gIGlmIChjb2RlID09IDE4ICYmICEvXFxiQ29kZU1pcnJvci1jcm9zc2hhaXJcXGIvLnRlc3QoY20uZGlzcGxheS5saW5lRGl2LmNsYXNzTmFtZSkpXG4gICAgeyBzaG93Q3Jvc3NIYWlyKGNtKTsgfVxufVxuXG5mdW5jdGlvbiBzaG93Q3Jvc3NIYWlyKGNtKSB7XG4gIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2O1xuICBhZGRDbGFzcyhsaW5lRGl2LCBcIkNvZGVNaXJyb3ItY3Jvc3NoYWlyXCIpO1xuXG4gIGZ1bmN0aW9uIHVwKGUpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09IDE4IHx8ICFlLmFsdEtleSkge1xuICAgICAgcm1DbGFzcyhsaW5lRGl2LCBcIkNvZGVNaXJyb3ItY3Jvc3NoYWlyXCIpO1xuICAgICAgb2ZmKGRvY3VtZW50LCBcImtleXVwXCIsIHVwKTtcbiAgICAgIG9mZihkb2N1bWVudCwgXCJtb3VzZW92ZXJcIiwgdXApO1xuICAgIH1cbiAgfVxuICBvbihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gIG9uKGRvY3VtZW50LCBcIm1vdXNlb3ZlclwiLCB1cCk7XG59XG5cbmZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICBpZiAoZS5rZXlDb2RlID09IDE2KSB7IHRoaXMuZG9jLnNlbC5zaGlmdCA9IGZhbHNlOyB9XG4gIHNpZ25hbERPTUV2ZW50KHRoaXMsIGUpO1xufVxuXG5mdW5jdGlvbiBvbktleVByZXNzKGUpIHtcbiAgdmFyIGNtID0gdGhpcztcbiAgaWYgKGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGUuY3RybEtleSAmJiAhZS5hbHRLZXkgfHwgbWFjICYmIGUubWV0YUtleSkgeyByZXR1cm4gfVxuICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZSwgY2hhckNvZGUgPSBlLmNoYXJDb2RlO1xuICBpZiAocHJlc3RvICYmIGtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybn1cbiAgaWYgKChwcmVzdG8gJiYgKCFlLndoaWNoIHx8IGUud2hpY2ggPCAxMCkpICYmIGhhbmRsZUtleUJpbmRpbmcoY20sIGUpKSB7IHJldHVybiB9XG4gIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7XG4gIC8vIFNvbWUgYnJvd3NlcnMgZmlyZSBrZXlwcmVzcyBldmVudHMgZm9yIGJhY2tzcGFjZVxuICBpZiAoY2ggPT0gXCJcXHgwOFwiKSB7IHJldHVybiB9XG4gIGlmIChoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSB7IHJldHVybiB9XG4gIGNtLmRpc3BsYXkuaW5wdXQub25LZXlQcmVzcyhlKTtcbn1cblxudmFyIERPVUJMRUNMSUNLX0RFTEFZID0gNDAwO1xuXG52YXIgUGFzdENsaWNrID0gZnVuY3Rpb24odGltZSwgcG9zLCBidXR0b24pIHtcbiAgdGhpcy50aW1lID0gdGltZTtcbiAgdGhpcy5wb3MgPSBwb3M7XG4gIHRoaXMuYnV0dG9uID0gYnV0dG9uO1xufTtcblxuUGFzdENsaWNrLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHRpbWUsIHBvcywgYnV0dG9uKSB7XG4gIHJldHVybiB0aGlzLnRpbWUgKyBET1VCTEVDTElDS19ERUxBWSA+IHRpbWUgJiZcbiAgICBjbXAocG9zLCB0aGlzLnBvcykgPT0gMCAmJiBidXR0b24gPT0gdGhpcy5idXR0b25cbn07XG5cbnZhciBsYXN0Q2xpY2s7XG52YXIgbGFzdERvdWJsZUNsaWNrO1xuZnVuY3Rpb24gY2xpY2tSZXBlYXQocG9zLCBidXR0b24pIHtcbiAgdmFyIG5vdyA9ICtuZXcgRGF0ZTtcbiAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2suY29tcGFyZShub3csIHBvcywgYnV0dG9uKSkge1xuICAgIGxhc3RDbGljayA9IGxhc3REb3VibGVDbGljayA9IG51bGw7XG4gICAgcmV0dXJuIFwidHJpcGxlXCJcbiAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLmNvbXBhcmUobm93LCBwb3MsIGJ1dHRvbikpIHtcbiAgICBsYXN0RG91YmxlQ2xpY2sgPSBuZXcgUGFzdENsaWNrKG5vdywgcG9zLCBidXR0b24pO1xuICAgIGxhc3RDbGljayA9IG51bGw7XG4gICAgcmV0dXJuIFwiZG91YmxlXCJcbiAgfSBlbHNlIHtcbiAgICBsYXN0Q2xpY2sgPSBuZXcgUGFzdENsaWNrKG5vdywgcG9zLCBidXR0b24pO1xuICAgIGxhc3REb3VibGVDbGljayA9IG51bGw7XG4gICAgcmV0dXJuIFwic2luZ2xlXCJcbiAgfVxufVxuXG4vLyBBIG1vdXNlIGRvd24gY2FuIGJlIGEgc2luZ2xlIGNsaWNrLCBkb3VibGUgY2xpY2ssIHRyaXBsZSBjbGljayxcbi8vIHN0YXJ0IG9mIHNlbGVjdGlvbiBkcmFnLCBzdGFydCBvZiB0ZXh0IGRyYWcsIG5ldyBjdXJzb3Jcbi8vIChjdHJsLWNsaWNrKSwgcmVjdGFuZ2xlIGRyYWcgKGFsdC1kcmFnKSwgb3IgeHdpblxuLy8gbWlkZGxlLWNsaWNrLXBhc3RlLiBPciBpdCBtaWdodCBiZSBhIGNsaWNrIG9uIHNvbWV0aGluZyB3ZSBzaG91bGRcbi8vIG5vdCBpbnRlcmZlcmUgd2l0aCwgc3VjaCBhcyBhIHNjcm9sbGJhciBvciB3aWRnZXQuXG5mdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gIHZhciBjbSA9IHRoaXMsIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGRpc3BsYXkuYWN0aXZlVG91Y2ggJiYgZGlzcGxheS5pbnB1dC5zdXBwb3J0c1RvdWNoKCkpIHsgcmV0dXJuIH1cbiAgZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTtcbiAgZGlzcGxheS5zaGlmdCA9IGUuc2hpZnRLZXk7XG5cbiAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHtcbiAgICBpZiAoIXdlYmtpdCkge1xuICAgICAgLy8gQnJpZWZseSB0dXJuIG9mZiBkcmFnZ2FiaWxpdHksIHRvIGFsbG93IHdpZGdldHMgdG8gZG9cbiAgICAgIC8vIG5vcm1hbCBkcmFnZ2luZyB0aGluZ3MuXG4gICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7IH0sIDEwMCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjbGlja0luR3V0dGVyKGNtLCBlKSkgeyByZXR1cm4gfVxuICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgYnV0dG9uID0gZV9idXR0b24oZSksIHJlcGVhdCA9IHBvcyA/IGNsaWNrUmVwZWF0KHBvcywgYnV0dG9uKSA6IFwic2luZ2xlXCI7XG4gIHdpbmRvdy5mb2N1cygpO1xuXG4gIC8vICMzMjYxOiBtYWtlIHN1cmUsIHRoYXQgd2UncmUgbm90IHN0YXJ0aW5nIGEgc2Vjb25kIHNlbGVjdGlvblxuICBpZiAoYnV0dG9uID09IDEgJiYgY20uc3RhdGUuc2VsZWN0aW5nVGV4dClcbiAgICB7IGNtLnN0YXRlLnNlbGVjdGluZ1RleHQoZSk7IH1cblxuICBpZiAocG9zICYmIGhhbmRsZU1hcHBlZEJ1dHRvbihjbSwgYnV0dG9uLCBwb3MsIHJlcGVhdCwgZSkpIHsgcmV0dXJuIH1cblxuICBpZiAoYnV0dG9uID09IDEpIHtcbiAgICBpZiAocG9zKSB7IGxlZnRCdXR0b25Eb3duKGNtLCBwb3MsIHJlcGVhdCwgZSk7IH1cbiAgICBlbHNlIGlmIChlX3RhcmdldChlKSA9PSBkaXNwbGF5LnNjcm9sbGVyKSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgfSBlbHNlIGlmIChidXR0b24gPT0gMikge1xuICAgIGlmIChwb3MpIHsgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgcG9zKTsgfVxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9LCAyMCk7XG4gIH0gZWxzZSBpZiAoYnV0dG9uID09IDMpIHtcbiAgICBpZiAoY2FwdHVyZVJpZ2h0Q2xpY2spIHsgb25Db250ZXh0TWVudShjbSwgZSk7IH1cbiAgICBlbHNlIHsgZGVsYXlCbHVyRXZlbnQoY20pOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWFwcGVkQnV0dG9uKGNtLCBidXR0b24sIHBvcywgcmVwZWF0LCBldmVudCkge1xuICB2YXIgbmFtZSA9IFwiQ2xpY2tcIjtcbiAgaWYgKHJlcGVhdCA9PSBcImRvdWJsZVwiKSB7IG5hbWUgPSBcIkRvdWJsZVwiICsgbmFtZTsgfVxuICBlbHNlIGlmIChyZXBlYXQgPT0gXCJ0cmlwbGVcIikgeyBuYW1lID0gXCJUcmlwbGVcIiArIG5hbWU7IH1cbiAgbmFtZSA9IChidXR0b24gPT0gMSA/IFwiTGVmdFwiIDogYnV0dG9uID09IDIgPyBcIk1pZGRsZVwiIDogXCJSaWdodFwiKSArIG5hbWU7XG5cbiAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCAgYWRkTW9kaWZpZXJOYW1lcyhuYW1lLCBldmVudCksIGV2ZW50LCBmdW5jdGlvbiAoYm91bmQpIHtcbiAgICBpZiAodHlwZW9mIGJvdW5kID09IFwic3RyaW5nXCIpIHsgYm91bmQgPSBjb21tYW5kc1tib3VuZF07IH1cbiAgICBpZiAoIWJvdW5kKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKGNtLmlzUmVhZE9ubHkoKSkgeyBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gdHJ1ZTsgfVxuICAgICAgZG9uZSA9IGJvdW5kKGNtLCBwb3MpICE9IFBhc3M7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbmVcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29uZmlndXJlTW91c2UoY20sIHJlcGVhdCwgZXZlbnQpIHtcbiAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIpO1xuICB2YXIgdmFsdWUgPSBvcHRpb24gPyBvcHRpb24oY20sIHJlcGVhdCwgZXZlbnQpIDoge307XG4gIGlmICh2YWx1ZS51bml0ID09IG51bGwpIHtcbiAgICB2YXIgcmVjdCA9IGNocm9tZU9TID8gZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQubWV0YUtleSA6IGV2ZW50LmFsdEtleTtcbiAgICB2YWx1ZS51bml0ID0gcmVjdCA/IFwicmVjdGFuZ2xlXCIgOiByZXBlYXQgPT0gXCJzaW5nbGVcIiA/IFwiY2hhclwiIDogcmVwZWF0ID09IFwiZG91YmxlXCIgPyBcIndvcmRcIiA6IFwibGluZVwiO1xuICB9XG4gIGlmICh2YWx1ZS5leHRlbmQgPT0gbnVsbCB8fCBjbS5kb2MuZXh0ZW5kKSB7IHZhbHVlLmV4dGVuZCA9IGNtLmRvYy5leHRlbmQgfHwgZXZlbnQuc2hpZnRLZXk7IH1cbiAgaWYgKHZhbHVlLmFkZE5ldyA9PSBudWxsKSB7IHZhbHVlLmFkZE5ldyA9IG1hYyA/IGV2ZW50Lm1ldGFLZXkgOiBldmVudC5jdHJsS2V5OyB9XG4gIGlmICh2YWx1ZS5tb3ZlT25EcmFnID09IG51bGwpIHsgdmFsdWUubW92ZU9uRHJhZyA9ICEobWFjID8gZXZlbnQuYWx0S2V5IDogZXZlbnQuY3RybEtleSk7IH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmZ1bmN0aW9uIGxlZnRCdXR0b25Eb3duKGNtLCBwb3MsIHJlcGVhdCwgZXZlbnQpIHtcbiAgaWYgKGllKSB7IHNldFRpbWVvdXQoYmluZChlbnN1cmVGb2N1cywgY20pLCAwKTsgfVxuICBlbHNlIHsgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQoKTsgfVxuXG4gIHZhciBiZWhhdmlvciA9IGNvbmZpZ3VyZU1vdXNlKGNtLCByZXBlYXQsIGV2ZW50KTtcblxuICB2YXIgc2VsID0gY20uZG9jLnNlbCwgY29udGFpbmVkO1xuICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhY20uaXNSZWFkT25seSgpICYmXG4gICAgICByZXBlYXQgPT0gXCJzaW5nbGVcIiAmJiAoY29udGFpbmVkID0gc2VsLmNvbnRhaW5zKHBvcykpID4gLTEgJiZcbiAgICAgIChjbXAoKGNvbnRhaW5lZCA9IHNlbC5yYW5nZXNbY29udGFpbmVkXSkuZnJvbSgpLCBwb3MpIDwgMCB8fCBwb3MueFJlbCA+IDApICYmXG4gICAgICAoY21wKGNvbnRhaW5lZC50bygpLCBwb3MpID4gMCB8fCBwb3MueFJlbCA8IDApKVxuICAgIHsgbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZXZlbnQsIHBvcywgYmVoYXZpb3IpOyB9XG4gIGVsc2VcbiAgICB7IGxlZnRCdXR0b25TZWxlY3QoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKTsgfVxufVxuXG4vLyBTdGFydCBhIHRleHQgZHJhZy4gV2hlbiBpdCBlbmRzLCBzZWUgaWYgYW55IGRyYWdnaW5nIGFjdHVhbGx5XG4vLyBoYXBwZW4sIGFuZCB0cmVhdCBhcyBhIGNsaWNrIGlmIGl0IGRpZG4ndC5cbmZ1bmN0aW9uIGxlZnRCdXR0b25TdGFydERyYWcoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKSB7XG4gIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgbW92ZWQgPSBmYWxzZTtcbiAgdmFyIGRyYWdFbmQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHdlYmtpdCkgeyBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlOyB9XG4gICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZmFsc2U7XG4gICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgZHJhZ0VuZCk7XG4gICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3VzZU1vdmUpO1xuICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBkcmFnU3RhcnQpO1xuICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgZHJhZ0VuZCk7XG4gICAgaWYgKCFtb3ZlZCkge1xuICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIGlmICghYmVoYXZpb3IuYWRkTmV3KVxuICAgICAgICB7IGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHBvcywgbnVsbCwgbnVsbCwgYmVoYXZpb3IuZXh0ZW5kKTsgfVxuICAgICAgLy8gV29yayBhcm91bmQgdW5leHBsYWluYWJsZSBmb2N1cyBwcm9ibGVtIGluIElFOSAoIzIxMjcpIGFuZCBDaHJvbWUgKCMzMDgxKVxuICAgICAgaWYgKHdlYmtpdCB8fCBpZSAmJiBpZV92ZXJzaW9uID09IDkpXG4gICAgICAgIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cygpOyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7fSwgMjApOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgZGlzcGxheS5pbnB1dC5mb2N1cygpOyB9XG4gICAgfVxuICB9KTtcbiAgdmFyIG1vdXNlTW92ZSA9IGZ1bmN0aW9uKGUyKSB7XG4gICAgbW92ZWQgPSBtb3ZlZCB8fCBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhldmVudC5jbGllbnRZIC0gZTIuY2xpZW50WSkgPj0gMTA7XG4gIH07XG4gIHZhciBkcmFnU3RhcnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtb3ZlZCA9IHRydWU7IH07XG4gIC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLlxuICBpZiAod2Via2l0KSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsgfVxuICBjbS5zdGF0ZS5kcmFnZ2luZ1RleHQgPSBkcmFnRW5kO1xuICBkcmFnRW5kLmNvcHkgPSAhYmVoYXZpb3IubW92ZU9uRHJhZztcbiAgLy8gSUUncyBhcHByb2FjaCB0byBkcmFnZ2FibGVcbiAgaWYgKGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3ApIHsgZGlzcGxheS5zY3JvbGxlci5kcmFnRHJvcCgpOyB9XG4gIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgZHJhZ0VuZCk7XG4gIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3VzZU1vdmUpO1xuICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdzdGFydFwiLCBkcmFnU3RhcnQpO1xuICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgZHJhZ0VuZCk7XG5cbiAgZGVsYXlCbHVyRXZlbnQoY20pO1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMjApO1xufVxuXG5mdW5jdGlvbiByYW5nZUZvclVuaXQoY20sIHBvcywgdW5pdCkge1xuICBpZiAodW5pdCA9PSBcImNoYXJcIikgeyByZXR1cm4gbmV3IFJhbmdlKHBvcywgcG9zKSB9XG4gIGlmICh1bml0ID09IFwid29yZFwiKSB7IHJldHVybiBjbS5maW5kV29yZEF0KHBvcykgfVxuICBpZiAodW5pdCA9PSBcImxpbmVcIikgeyByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgMCksIGNsaXBQb3MoY20uZG9jLCBQb3MocG9zLmxpbmUgKyAxLCAwKSkpIH1cbiAgdmFyIHJlc3VsdCA9IHVuaXQoY20sIHBvcyk7XG4gIHJldHVybiBuZXcgUmFuZ2UocmVzdWx0LmZyb20sIHJlc3VsdC50bylcbn1cblxuLy8gTm9ybWFsIHNlbGVjdGlvbiwgYXMgb3Bwb3NlZCB0byB0ZXh0IGRyYWdnaW5nLlxuZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZXZlbnQsIHN0YXJ0LCBiZWhhdmlvcikge1xuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgZV9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgdmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsLCByYW5nZXMgPSBzdGFydFNlbC5yYW5nZXM7XG4gIGlmIChiZWhhdmlvci5hZGROZXcgJiYgIWJlaGF2aW9yLmV4dGVuZCkge1xuICAgIG91ckluZGV4ID0gZG9jLnNlbC5jb250YWlucyhzdGFydCk7XG4gICAgaWYgKG91ckluZGV4ID4gLTEpXG4gICAgICB7IG91clJhbmdlID0gcmFuZ2VzW291ckluZGV4XTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsgfVxuICB9IGVsc2Uge1xuICAgIG91clJhbmdlID0gZG9jLnNlbC5wcmltYXJ5KCk7XG4gICAgb3VySW5kZXggPSBkb2Muc2VsLnByaW1JbmRleDtcbiAgfVxuXG4gIGlmIChiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpIHtcbiAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldykgeyBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgc3RhcnQpOyB9XG4gICAgc3RhcnQgPSBwb3NGcm9tTW91c2UoY20sIGV2ZW50LCB0cnVlLCB0cnVlKTtcbiAgICBvdXJJbmRleCA9IC0xO1xuICB9IGVsc2Uge1xuICAgIHZhciByYW5nZSQkMSA9IHJhbmdlRm9yVW5pdChjbSwgc3RhcnQsIGJlaGF2aW9yLnVuaXQpO1xuICAgIGlmIChiZWhhdmlvci5leHRlbmQpXG4gICAgICB7IG91clJhbmdlID0gZXh0ZW5kUmFuZ2Uob3VyUmFuZ2UsIHJhbmdlJCQxLmFuY2hvciwgcmFuZ2UkJDEuaGVhZCwgYmVoYXZpb3IuZXh0ZW5kKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb3VyUmFuZ2UgPSByYW5nZSQkMTsgfVxuICB9XG5cbiAgaWYgKCFiZWhhdmlvci5hZGROZXcpIHtcbiAgICBvdXJJbmRleCA9IDA7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTtcbiAgICBzdGFydFNlbCA9IGRvYy5zZWw7XG4gIH0gZWxzZSBpZiAob3VySW5kZXggPT0gLTEpIHtcbiAgICBvdXJJbmRleCA9IHJhbmdlcy5sZW5ndGg7XG4gICAgc2V0U2VsZWN0aW9uKGRvYywgbm9ybWFsaXplU2VsZWN0aW9uKHJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSxcbiAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICB9IGVsc2UgaWYgKHJhbmdlcy5sZW5ndGggPiAxICYmIHJhbmdlc1tvdXJJbmRleF0uZW1wdHkoKSAmJiBiZWhhdmlvci51bml0ID09IFwiY2hhclwiICYmICFiZWhhdmlvci5leHRlbmQpIHtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24ocmFuZ2VzLnNsaWNlKDAsIG91ckluZGV4KS5jb25jYXQocmFuZ2VzLnNsaWNlKG91ckluZGV4ICsgMSkpLCAwKSxcbiAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICAgIHN0YXJ0U2VsID0gZG9jLnNlbDtcbiAgfSBlbHNlIHtcbiAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpO1xuICB9XG5cbiAgdmFyIGxhc3RQb3MgPSBzdGFydDtcbiAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9zKSB7XG4gICAgaWYgKGNtcChsYXN0UG9zLCBwb3MpID09IDApIHsgcmV0dXJuIH1cbiAgICBsYXN0UG9zID0gcG9zO1xuXG4gICAgaWYgKGJlaGF2aW9yLnVuaXQgPT0gXCJyZWN0YW5nbGVcIikge1xuICAgICAgdmFyIHJhbmdlcyA9IFtdLCB0YWJTaXplID0gY20ub3B0aW9ucy50YWJTaXplO1xuICAgICAgdmFyIHN0YXJ0Q29sID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIHN0YXJ0LmxpbmUpLnRleHQsIHN0YXJ0LmNoLCB0YWJTaXplKTtcbiAgICAgIHZhciBwb3NDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQsIHBvcy5jaCwgdGFiU2l6ZSk7XG4gICAgICB2YXIgbGVmdCA9IE1hdGgubWluKHN0YXJ0Q29sLCBwb3NDb2wpLCByaWdodCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBwb3NDb2wpO1xuICAgICAgZm9yICh2YXIgbGluZSA9IE1hdGgubWluKHN0YXJ0LmxpbmUsIHBvcy5saW5lKSwgZW5kID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgTWF0aC5tYXgoc3RhcnQubGluZSwgcG9zLmxpbmUpKTtcbiAgICAgICAgICAgbGluZSA8PSBlbmQ7IGxpbmUrKykge1xuICAgICAgICB2YXIgdGV4dCA9IGdldExpbmUoZG9jLCBsaW5lKS50ZXh0LCBsZWZ0UG9zID0gZmluZENvbHVtbih0ZXh0LCBsZWZ0LCB0YWJTaXplKTtcbiAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpXG4gICAgICAgICAgeyByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lmxlbmd0aCA+IGxlZnRQb3MpXG4gICAgICAgICAgeyByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgZmluZENvbHVtbih0ZXh0LCByaWdodCwgdGFiU2l6ZSkpKSk7IH1cbiAgICAgIH1cbiAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByYW5nZXMucHVzaChuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KSk7IH1cbiAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydFNlbC5yYW5nZXMuc2xpY2UoMCwgb3VySW5kZXgpLmNvbmNhdChyYW5nZXMpLCBvdXJJbmRleCksXG4gICAgICAgICAgICAgICAgICAge29yaWdpbjogXCIqbW91c2VcIiwgc2Nyb2xsOiBmYWxzZX0pO1xuICAgICAgY20uc2Nyb2xsSW50b1ZpZXcocG9zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9sZFJhbmdlID0gb3VyUmFuZ2U7XG4gICAgICB2YXIgcmFuZ2UkJDEgPSByYW5nZUZvclVuaXQoY20sIHBvcywgYmVoYXZpb3IudW5pdCk7XG4gICAgICB2YXIgYW5jaG9yID0gb2xkUmFuZ2UuYW5jaG9yLCBoZWFkO1xuICAgICAgaWYgKGNtcChyYW5nZSQkMS5hbmNob3IsIGFuY2hvcikgPiAwKSB7XG4gICAgICAgIGhlYWQgPSByYW5nZSQkMS5oZWFkO1xuICAgICAgICBhbmNob3IgPSBtaW5Qb3Mob2xkUmFuZ2UuZnJvbSgpLCByYW5nZSQkMS5hbmNob3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZCA9IHJhbmdlJCQxLmFuY2hvcjtcbiAgICAgICAgYW5jaG9yID0gbWF4UG9zKG9sZFJhbmdlLnRvKCksIHJhbmdlJCQxLmhlYWQpO1xuICAgICAgfVxuICAgICAgdmFyIHJhbmdlcyQxID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgcmFuZ2VzJDFbb3VySW5kZXhdID0gYmlkaVNpbXBsaWZ5KGNtLCBuZXcgUmFuZ2UoY2xpcFBvcyhkb2MsIGFuY2hvciksIGhlYWQpKTtcbiAgICAgIHNldFNlbGVjdGlvbihkb2MsIG5vcm1hbGl6ZVNlbGVjdGlvbihyYW5nZXMkMSwgb3VySW5kZXgpLCBzZWxfbW91c2UpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlZGl0b3JTaXplID0gZGlzcGxheS53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyBVc2VkIHRvIGVuc3VyZSB0aW1lb3V0IHJlLXRyaWVzIGRvbid0IGZpcmUgd2hlbiBhbm90aGVyIGV4dGVuZFxuICAvLyBoYXBwZW5lZCBpbiB0aGUgbWVhbnRpbWUgKGNsZWFyVGltZW91dCBpc24ndCByZWxpYWJsZSAtLSBhdFxuICAvLyBsZWFzdCBvbiBDaHJvbWUsIHRoZSB0aW1lb3V0cyBzdGlsbCBoYXBwZW4gZXZlbiB3aGVuIGNsZWFyZWQsXG4gIC8vIGlmIHRoZSBjbGVhciBoYXBwZW5zIGFmdGVyIHRoZWlyIHNjaGVkdWxlZCBmaXJpbmcgdGltZSkuXG4gIHZhciBjb3VudGVyID0gMDtcblxuICBmdW5jdGlvbiBleHRlbmQoZSkge1xuICAgIHZhciBjdXJDb3VudCA9ICsrY291bnRlcjtcbiAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlLCBiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpO1xuICAgIGlmICghY3VyKSB7IHJldHVybiB9XG4gICAgaWYgKGNtcChjdXIsIGxhc3RQb3MpICE9IDApIHtcbiAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICBleHRlbmRUbyhjdXIpO1xuICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jKTtcbiAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKVxuICAgICAgICB7IHNldFRpbWVvdXQob3BlcmF0aW9uKGNtLCBmdW5jdGlvbiAoKSB7aWYgKGNvdW50ZXIgPT0gY3VyQ291bnQpIHsgZXh0ZW5kKGUpOyB9fSksIDE1MCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG91dHNpZGUgPSBlLmNsaWVudFkgPCBlZGl0b3JTaXplLnRvcCA/IC0yMCA6IGUuY2xpZW50WSA+IGVkaXRvclNpemUuYm90dG9tID8gMjAgOiAwO1xuICAgICAgaWYgKG91dHNpZGUpIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNvdW50ZXIgIT0gY3VyQ291bnQpIHsgcmV0dXJuIH1cbiAgICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgKz0gb3V0c2lkZTtcbiAgICAgICAgZXh0ZW5kKGUpO1xuICAgICAgfSksIDUwKTsgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRvbmUoZSkge1xuICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSBmYWxzZTtcbiAgICBjb3VudGVyID0gSW5maW5pdHk7XG4gICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICBkaXNwbGF5LmlucHV0LmZvY3VzKCk7XG4gICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBtb3ZlKTtcbiAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCB1cCk7XG4gICAgZG9jLmhpc3RvcnkubGFzdFNlbE9yaWdpbiA9IG51bGw7XG4gIH1cblxuICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS5idXR0b25zID09PSAwIHx8ICFlX2J1dHRvbihlKSkgeyBkb25lKGUpOyB9XG4gICAgZWxzZSB7IGV4dGVuZChlKTsgfVxuICB9KTtcbiAgdmFyIHVwID0gb3BlcmF0aW9uKGNtLCBkb25lKTtcbiAgY20uc3RhdGUuc2VsZWN0aW5nVGV4dCA9IHVwO1xuICBvbihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG4gIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgdXApO1xufVxuXG4vLyBVc2VkIHdoZW4gbW91c2Utc2VsZWN0aW5nIHRvIGFkanVzdCB0aGUgYW5jaG9yIHRvIHRoZSBwcm9wZXIgc2lkZVxuLy8gb2YgYSBiaWRpIGp1bXAgZGVwZW5kaW5nIG9uIHRoZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIGhlYWQuXG5mdW5jdGlvbiBiaWRpU2ltcGxpZnkoY20sIHJhbmdlJCQxKSB7XG4gIHZhciBhbmNob3IgPSByYW5nZSQkMS5hbmNob3I7XG4gIHZhciBoZWFkID0gcmFuZ2UkJDEuaGVhZDtcbiAgdmFyIGFuY2hvckxpbmUgPSBnZXRMaW5lKGNtLmRvYywgYW5jaG9yLmxpbmUpO1xuICBpZiAoY21wKGFuY2hvciwgaGVhZCkgPT0gMCAmJiBhbmNob3Iuc3RpY2t5ID09IGhlYWQuc3RpY2t5KSB7IHJldHVybiByYW5nZSQkMSB9XG4gIHZhciBvcmRlciA9IGdldE9yZGVyKGFuY2hvckxpbmUpO1xuICBpZiAoIW9yZGVyKSB7IHJldHVybiByYW5nZSQkMSB9XG4gIHZhciBpbmRleCA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGFuY2hvci5jaCwgYW5jaG9yLnN0aWNreSksIHBhcnQgPSBvcmRlcltpbmRleF07XG4gIGlmIChwYXJ0LmZyb20gIT0gYW5jaG9yLmNoICYmIHBhcnQudG8gIT0gYW5jaG9yLmNoKSB7IHJldHVybiByYW5nZSQkMSB9XG4gIHZhciBib3VuZGFyeSA9IGluZGV4ICsgKChwYXJ0LmZyb20gPT0gYW5jaG9yLmNoKSA9PSAocGFydC5sZXZlbCAhPSAxKSA/IDAgOiAxKTtcbiAgaWYgKGJvdW5kYXJ5ID09IDAgfHwgYm91bmRhcnkgPT0gb3JkZXIubGVuZ3RoKSB7IHJldHVybiByYW5nZSQkMSB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcmVsYXRpdmUgdmlzdWFsIHBvc2l0aW9uIG9mIHRoZSBoZWFkIGNvbXBhcmVkIHRvIHRoZVxuICAvLyBhbmNob3IgKDwwIGlzIHRvIHRoZSBsZWZ0LCA+MCB0byB0aGUgcmlnaHQpXG4gIHZhciBsZWZ0U2lkZTtcbiAgaWYgKGhlYWQubGluZSAhPSBhbmNob3IubGluZSkge1xuICAgIGxlZnRTaWRlID0gKGhlYWQubGluZSAtIGFuY2hvci5saW5lKSAqIChjbS5kb2MuZGlyZWN0aW9uID09IFwibHRyXCIgPyAxIDogLTEpID4gMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaGVhZEluZGV4ID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgaGVhZC5jaCwgaGVhZC5zdGlja3kpO1xuICAgIHZhciBkaXIgPSBoZWFkSW5kZXggLSBpbmRleCB8fCAoaGVhZC5jaCAtIGFuY2hvci5jaCkgKiAocGFydC5sZXZlbCA9PSAxID8gLTEgOiAxKTtcbiAgICBpZiAoaGVhZEluZGV4ID09IGJvdW5kYXJ5IC0gMSB8fCBoZWFkSW5kZXggPT0gYm91bmRhcnkpXG4gICAgICB7IGxlZnRTaWRlID0gZGlyIDwgMDsgfVxuICAgIGVsc2VcbiAgICAgIHsgbGVmdFNpZGUgPSBkaXIgPiAwOyB9XG4gIH1cblxuICB2YXIgdXNlUGFydCA9IG9yZGVyW2JvdW5kYXJ5ICsgKGxlZnRTaWRlID8gLTEgOiAwKV07XG4gIHZhciBmcm9tID0gbGVmdFNpZGUgPT0gKHVzZVBhcnQubGV2ZWwgPT0gMSk7XG4gIHZhciBjaCA9IGZyb20gPyB1c2VQYXJ0LmZyb20gOiB1c2VQYXJ0LnRvLCBzdGlja3kgPSBmcm9tID8gXCJhZnRlclwiIDogXCJiZWZvcmVcIjtcbiAgcmV0dXJuIGFuY2hvci5jaCA9PSBjaCAmJiBhbmNob3Iuc3RpY2t5ID09IHN0aWNreSA/IHJhbmdlJCQxIDogbmV3IFJhbmdlKG5ldyBQb3MoYW5jaG9yLmxpbmUsIGNoLCBzdGlja3kpLCBoZWFkKVxufVxuXG5cbi8vIERldGVybWluZXMgd2hldGhlciBhbiBldmVudCBoYXBwZW5lZCBpbiB0aGUgZ3V0dGVyLCBhbmQgZmlyZXMgdGhlXG4vLyBoYW5kbGVycyBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQuXG5mdW5jdGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlwZSwgcHJldmVudCkge1xuICB2YXIgbVgsIG1ZO1xuICBpZiAoZS50b3VjaGVzKSB7XG4gICAgbVggPSBlLnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICBtWSA9IGUudG91Y2hlc1swXS5jbGllbnRZO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7IG1YID0gZS5jbGllbnRYOyBtWSA9IGUuY2xpZW50WTsgfVxuICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICBpZiAobVggPj0gTWF0aC5mbG9vcihjbS5kaXNwbGF5Lmd1dHRlcnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQpKSB7IHJldHVybiBmYWxzZSB9XG4gIGlmIChwcmV2ZW50KSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cblxuICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gIHZhciBsaW5lQm94ID0gZGlzcGxheS5saW5lRGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGlmIChtWSA+IGxpbmVCb3guYm90dG9tIHx8ICFoYXNIYW5kbGVyKGNtLCB0eXBlKSkgeyByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpIH1cbiAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5vcHRpb25zLmd1dHRlcnMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgZyA9IGRpc3BsYXkuZ3V0dGVycy5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChnICYmIGcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgPj0gbVgpIHtcbiAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpO1xuICAgICAgdmFyIGd1dHRlciA9IGNtLm9wdGlvbnMuZ3V0dGVyc1tpXTtcbiAgICAgIHNpZ25hbChjbSwgdHlwZSwgY20sIGxpbmUsIGd1dHRlciwgZSk7XG4gICAgICByZXR1cm4gZV9kZWZhdWx0UHJldmVudGVkKGUpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsaWNrSW5HdXR0ZXIoY20sIGUpIHtcbiAgcmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCBcImd1dHRlckNsaWNrXCIsIHRydWUpXG59XG5cbi8vIENPTlRFWFQgTUVOVSBIQU5ETElOR1xuXG4vLyBUbyBtYWtlIHRoZSBjb250ZXh0IG1lbnUgd29yaywgd2UgbmVlZCB0byBicmllZmx5IHVuaGlkZSB0aGVcbi8vIHRleHRhcmVhIChtYWtpbmcgaXQgYXMgdW5vYnRydXNpdmUgYXMgcG9zc2libGUpIHRvIGxldCB0aGVcbi8vIHJpZ2h0LWNsaWNrIHRha2UgZWZmZWN0IG9uIGl0LlxuZnVuY3Rpb24gb25Db250ZXh0TWVudShjbSwgZSkge1xuICBpZiAoZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSB8fCBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSkgeyByZXR1cm4gfVxuICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUsIFwiY29udGV4dG1lbnVcIikpIHsgcmV0dXJuIH1cbiAgY20uZGlzcGxheS5pbnB1dC5vbkNvbnRleHRNZW51KGUpO1xufVxuXG5mdW5jdGlvbiBjb250ZXh0TWVudUluR3V0dGVyKGNtLCBlKSB7XG4gIGlmICghaGFzSGFuZGxlcihjbSwgXCJndXR0ZXJDb250ZXh0TWVudVwiKSkgeyByZXR1cm4gZmFsc2UgfVxuICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsIFwiZ3V0dGVyQ29udGV4dE1lbnVcIiwgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIHRoZW1lQ2hhbmdlZChjbSkge1xuICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqY20tcy1cXFMrL2csIFwiXCIpICtcbiAgICBjbS5vcHRpb25zLnRoZW1lLnJlcGxhY2UoLyhefFxccylcXHMqL2csIFwiIGNtLXMtXCIpO1xuICBjbGVhckNhY2hlcyhjbSk7XG59XG5cbnZhciBJbml0ID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiBcIkNvZGVNaXJyb3IuSW5pdFwifX07XG5cbnZhciBkZWZhdWx0cyA9IHt9O1xudmFyIG9wdGlvbkhhbmRsZXJzID0ge307XG5cbmZ1bmN0aW9uIGRlZmluZU9wdGlvbnMoQ29kZU1pcnJvcikge1xuICB2YXIgb3B0aW9uSGFuZGxlcnMgPSBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzO1xuXG4gIGZ1bmN0aW9uIG9wdGlvbihuYW1lLCBkZWZsdCwgaGFuZGxlLCBub3RPbkluaXQpIHtcbiAgICBDb2RlTWlycm9yLmRlZmF1bHRzW25hbWVdID0gZGVmbHQ7XG4gICAgaWYgKGhhbmRsZSkgeyBvcHRpb25IYW5kbGVyc1tuYW1lXSA9XG4gICAgICBub3RPbkluaXQgPyBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7aWYgKG9sZCAhPSBJbml0KSB7IGhhbmRsZShjbSwgdmFsLCBvbGQpOyB9fSA6IGhhbmRsZTsgfVxuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBvcHRpb247XG5cbiAgLy8gUGFzc2VkIHRvIG9wdGlvbiBoYW5kbGVycyB3aGVuIHRoZXJlIGlzIG5vIG9sZCB2YWx1ZS5cbiAgQ29kZU1pcnJvci5Jbml0ID0gSW5pdDtcblxuICAvLyBUaGVzZSB0d28gYXJlLCBvbiBpbml0LCBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IgYmVjYXVzZSB0aGV5XG4gIC8vIGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlZGl0b3IgY2FuIHN0YXJ0IGF0IGFsbC5cbiAgb3B0aW9uKFwidmFsdWVcIiwgXCJcIiwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLnNldFZhbHVlKHZhbCk7IH0sIHRydWUpO1xuICBvcHRpb24oXCJtb2RlXCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgY20uZG9jLm1vZGVPcHRpb24gPSB2YWw7XG4gICAgbG9hZE1vZGUoY20pO1xuICB9LCB0cnVlKTtcblxuICBvcHRpb24oXCJpbmRlbnRVbml0XCIsIDIsIGxvYWRNb2RlLCB0cnVlKTtcbiAgb3B0aW9uKFwiaW5kZW50V2l0aFRhYnNcIiwgZmFsc2UpO1xuICBvcHRpb24oXCJzbWFydEluZGVudFwiLCB0cnVlKTtcbiAgb3B0aW9uKFwidGFiU2l6ZVwiLCA0LCBmdW5jdGlvbiAoY20pIHtcbiAgICByZXNldE1vZGVTdGF0ZShjbSk7XG4gICAgY2xlYXJDYWNoZXMoY20pO1xuICAgIHJlZ0NoYW5nZShjbSk7XG4gIH0sIHRydWUpO1xuXG4gIG9wdGlvbihcImxpbmVTZXBhcmF0b3JcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICBjbS5kb2MubGluZVNlcCA9IHZhbDtcbiAgICBpZiAoIXZhbCkgeyByZXR1cm4gfVxuICAgIHZhciBuZXdCcmVha3MgPSBbXSwgbGluZU5vID0gY20uZG9jLmZpcnN0O1xuICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHtcbiAgICAgICAgdmFyIGZvdW5kID0gbGluZS50ZXh0LmluZGV4T2YodmFsLCBwb3MpO1xuICAgICAgICBpZiAoZm91bmQgPT0gLTEpIHsgYnJlYWsgfVxuICAgICAgICBwb3MgPSBmb3VuZCArIHZhbC5sZW5ndGg7XG4gICAgICAgIG5ld0JyZWFrcy5wdXNoKFBvcyhsaW5lTm8sIGZvdW5kKSk7XG4gICAgICB9XG4gICAgICBsaW5lTm8rKztcbiAgICB9KTtcbiAgICBmb3IgKHZhciBpID0gbmV3QnJlYWtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgeyByZXBsYWNlUmFuZ2UoY20uZG9jLCB2YWwsIG5ld0JyZWFrc1tpXSwgUG9zKG5ld0JyZWFrc1tpXS5saW5lLCBuZXdCcmVha3NbaV0uY2ggKyB2YWwubGVuZ3RoKSk7IH1cbiAgfSk7XG4gIG9wdGlvbihcInNwZWNpYWxDaGFyc1wiLCAvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5ZlxcdTAwYWRcXHUwNjFjXFx1MjAwYi1cXHUyMDBmXFx1MjAyOFxcdTIwMjlcXHVmZWZmXS9nLCBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7XG4gICAgY20uc3RhdGUuc3BlY2lhbENoYXJzID0gbmV3IFJlZ0V4cCh2YWwuc291cmNlICsgKHZhbC50ZXN0KFwiXFx0XCIpID8gXCJcIiA6IFwifFxcdFwiKSwgXCJnXCIpO1xuICAgIGlmIChvbGQgIT0gSW5pdCkgeyBjbS5yZWZyZXNoKCk7IH1cbiAgfSk7XG4gIG9wdGlvbihcInNwZWNpYWxDaGFyUGxhY2Vob2xkZXJcIiwgZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVmcmVzaCgpOyB9LCB0cnVlKTtcbiAgb3B0aW9uKFwiZWxlY3RyaWNDaGFyc1wiLCB0cnVlKTtcbiAgb3B0aW9uKFwiaW5wdXRTdHlsZVwiLCBtb2JpbGUgPyBcImNvbnRlbnRlZGl0YWJsZVwiIDogXCJ0ZXh0YXJlYVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiaW5wdXRTdHlsZSBjYW4gbm90ICh5ZXQpIGJlIGNoYW5nZWQgaW4gYSBydW5uaW5nIGVkaXRvclwiKSAvLyBGSVhNRVxuICB9LCB0cnVlKTtcbiAgb3B0aW9uKFwic3BlbGxjaGVja1wiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmdldElucHV0RmllbGQoKS5zcGVsbGNoZWNrID0gdmFsOyB9LCB0cnVlKTtcbiAgb3B0aW9uKFwicnRsTW92ZVZpc3VhbGx5XCIsICF3aW5kb3dzKTtcbiAgb3B0aW9uKFwid2hvbGVMaW5lVXBkYXRlQmVmb3JlXCIsIHRydWUpO1xuXG4gIG9wdGlvbihcInRoZW1lXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbiAoY20pIHtcbiAgICB0aGVtZUNoYW5nZWQoY20pO1xuICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTtcbiAgfSwgdHJ1ZSk7XG4gIG9wdGlvbihcImtleU1hcFwiLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24gKGNtLCB2YWwsIG9sZCkge1xuICAgIHZhciBuZXh0ID0gZ2V0S2V5TWFwKHZhbCk7XG4gICAgdmFyIHByZXYgPSBvbGQgIT0gSW5pdCAmJiBnZXRLZXlNYXAob2xkKTtcbiAgICBpZiAocHJldiAmJiBwcmV2LmRldGFjaCkgeyBwcmV2LmRldGFjaChjbSwgbmV4dCk7IH1cbiAgICBpZiAobmV4dC5hdHRhY2gpIHsgbmV4dC5hdHRhY2goY20sIHByZXYgfHwgbnVsbCk7IH1cbiAgfSk7XG4gIG9wdGlvbihcImV4dHJhS2V5c1wiLCBudWxsKTtcbiAgb3B0aW9uKFwiY29uZmlndXJlTW91c2VcIiwgbnVsbCk7XG5cbiAgb3B0aW9uKFwibGluZVdyYXBwaW5nXCIsIGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUpO1xuICBvcHRpb24oXCJndXR0ZXJzXCIsIFtdLCBmdW5jdGlvbiAoY20pIHtcbiAgICBzZXRHdXR0ZXJzRm9yTGluZU51bWJlcnMoY20ub3B0aW9ucyk7XG4gICAgZ3V0dGVyc0NoYW5nZWQoY20pO1xuICB9LCB0cnVlKTtcbiAgb3B0aW9uKFwiZml4ZWRHdXR0ZXJcIiwgdHJ1ZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICBjbS5kaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IHZhbCA/IGNvbXBlbnNhdGVGb3JIU2Nyb2xsKGNtLmRpc3BsYXkpICsgXCJweFwiIDogXCIwXCI7XG4gICAgY20ucmVmcmVzaCgpO1xuICB9LCB0cnVlKTtcbiAgb3B0aW9uKFwiY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXJcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gdXBkYXRlU2Nyb2xsYmFycyhjbSk7IH0sIHRydWUpO1xuICBvcHRpb24oXCJzY3JvbGxiYXJTdHlsZVwiLCBcIm5hdGl2ZVwiLCBmdW5jdGlvbiAoY20pIHtcbiAgICBpbml0U2Nyb2xsYmFycyhjbSk7XG4gICAgdXBkYXRlU2Nyb2xsYmFycyhjbSk7XG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChjbS5kb2Muc2Nyb2xsVG9wKTtcbiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7XG4gIH0sIHRydWUpO1xuICBvcHRpb24oXCJsaW5lTnVtYmVyc1wiLCBmYWxzZSwgZnVuY3Rpb24gKGNtKSB7XG4gICAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKGNtLm9wdGlvbnMpO1xuICAgIGd1dHRlcnNDaGFuZ2VkKGNtKTtcbiAgfSwgdHJ1ZSk7XG4gIG9wdGlvbihcImZpcnN0TGluZU51bWJlclwiLCAxLCBndXR0ZXJzQ2hhbmdlZCwgdHJ1ZSk7XG4gIG9wdGlvbihcImxpbmVOdW1iZXJGb3JtYXR0ZXJcIiwgZnVuY3Rpb24gKGludGVnZXIpIHsgcmV0dXJuIGludGVnZXI7IH0sIGd1dHRlcnNDaGFuZ2VkLCB0cnVlKTtcbiAgb3B0aW9uKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwgZmFsc2UsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG5cbiAgb3B0aW9uKFwicmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51XCIsIHRydWUpO1xuICBvcHRpb24oXCJsaW5lV2lzZUNvcHlDdXRcIiwgdHJ1ZSk7XG4gIG9wdGlvbihcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwgdHJ1ZSk7XG5cbiAgb3B0aW9uKFwicmVhZE9ubHlcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgaWYgKHZhbCA9PSBcIm5vY3Vyc29yXCIpIHtcbiAgICAgIG9uQmx1cihjbSk7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LmJsdXIoKTtcbiAgICB9XG4gICAgY20uZGlzcGxheS5pbnB1dC5yZWFkT25seUNoYW5nZWQodmFsKTtcbiAgfSk7XG4gIG9wdGlvbihcImRpc2FibGVJbnB1dFwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7IH19LCB0cnVlKTtcbiAgb3B0aW9uKFwiZHJhZ0Ryb3BcIiwgdHJ1ZSwgZHJhZ0Ryb3BDaGFuZ2VkKTtcbiAgb3B0aW9uKFwiYWxsb3dEcm9wRmlsZVR5cGVzXCIsIG51bGwpO1xuXG4gIG9wdGlvbihcImN1cnNvckJsaW5rUmF0ZVwiLCA1MzApO1xuICBvcHRpb24oXCJjdXJzb3JTY3JvbGxNYXJnaW5cIiwgMCk7XG4gIG9wdGlvbihcImN1cnNvckhlaWdodFwiLCAxLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpO1xuICBvcHRpb24oXCJzaW5nbGVDdXJzb3JIZWlnaHRQZXJMaW5lXCIsIHRydWUsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG4gIG9wdGlvbihcIndvcmtUaW1lXCIsIDEwMCk7XG4gIG9wdGlvbihcIndvcmtEZWxheVwiLCAxMDApO1xuICBvcHRpb24oXCJmbGF0dGVuU3BhbnNcIiwgdHJ1ZSwgcmVzZXRNb2RlU3RhdGUsIHRydWUpO1xuICBvcHRpb24oXCJhZGRNb2RlQ2xhc3NcIiwgZmFsc2UsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTtcbiAgb3B0aW9uKFwicG9sbEludGVydmFsXCIsIDEwMCk7XG4gIG9wdGlvbihcInVuZG9EZXB0aFwiLCAyMDAsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kb2MuaGlzdG9yeS51bmRvRGVwdGggPSB2YWw7IH0pO1xuICBvcHRpb24oXCJoaXN0b3J5RXZlbnREZWxheVwiLCAxMjUwKTtcbiAgb3B0aW9uKFwidmlld3BvcnRNYXJnaW5cIiwgMTAsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVmcmVzaCgpOyB9LCB0cnVlKTtcbiAgb3B0aW9uKFwibWF4SGlnaGxpZ2h0TGVuZ3RoXCIsIDEwMDAwLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gIG9wdGlvbihcIm1vdmVJbnB1dFdpdGhDdXJzb3JcIiwgdHJ1ZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICBpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKTsgfVxuICB9KTtcblxuICBvcHRpb24oXCJ0YWJpbmRleFwiLCBudWxsLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpLnRhYkluZGV4ID0gdmFsIHx8IFwiXCI7IH0pO1xuICBvcHRpb24oXCJhdXRvZm9jdXNcIiwgbnVsbCk7XG4gIG9wdGlvbihcImRpcmVjdGlvblwiLCBcImx0clwiLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZG9jLnNldERpcmVjdGlvbih2YWwpOyB9LCB0cnVlKTtcbiAgb3B0aW9uKFwicGhyYXNlc1wiLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gZ3V0dGVyc0NoYW5nZWQoY20pIHtcbiAgdXBkYXRlR3V0dGVycyhjbSk7XG4gIHJlZ0NoYW5nZShjbSk7XG4gIGFsaWduSG9yaXpvbnRhbGx5KGNtKTtcbn1cblxuZnVuY3Rpb24gZHJhZ0Ryb3BDaGFuZ2VkKGNtLCB2YWx1ZSwgb2xkKSB7XG4gIHZhciB3YXNPbiA9IG9sZCAmJiBvbGQgIT0gSW5pdDtcbiAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHtcbiAgICB2YXIgZnVuY3MgPSBjbS5kaXNwbGF5LmRyYWdGdW5jdGlvbnM7XG4gICAgdmFyIHRvZ2dsZSA9IHZhbHVlID8gb24gOiBvZmY7XG4gICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGZ1bmNzLnN0YXJ0KTtcbiAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnZW50ZXJcIiwgZnVuY3MuZW50ZXIpO1xuICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdvdmVyXCIsIGZ1bmNzLm92ZXIpO1xuICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdsZWF2ZVwiLCBmdW5jcy5sZWF2ZSk7XG4gICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJvcFwiLCBmdW5jcy5kcm9wKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoY20pIHtcbiAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICBjbS5kaXNwbGF5LnNpemVyLnN0eWxlLm1pbldpZHRoID0gXCJcIjtcbiAgICBjbS5kaXNwbGF5LnNpemVyV2lkdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICBmaW5kTWF4TGluZShjbSk7XG4gIH1cbiAgZXN0aW1hdGVMaW5lSGVpZ2h0cyhjbSk7XG4gIHJlZ0NoYW5nZShjbSk7XG4gIGNsZWFyQ2FjaGVzKGNtKTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgMTAwKTtcbn1cblxuLy8gQSBDb2RlTWlycm9yIGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZWRpdG9yLiBUaGlzIGlzIHRoZSBvYmplY3Rcbi8vIHRoYXQgdXNlciBjb2RlIGlzIHVzdWFsbHkgZGVhbGluZyB3aXRoLlxuXG5mdW5jdGlvbiBDb2RlTWlycm9yJDEocGxhY2UsIG9wdGlvbnMpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IkMSkpIHsgcmV0dXJuIG5ldyBDb2RlTWlycm9yJDEocGxhY2UsIG9wdGlvbnMpIH1cblxuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gb3B0aW9ucyA/IGNvcHlPYmoob3B0aW9ucykgOiB7fTtcbiAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuXG4gIGNvcHlPYmooZGVmYXVsdHMsIG9wdGlvbnMsIGZhbHNlKTtcbiAgc2V0R3V0dGVyc0ZvckxpbmVOdW1iZXJzKG9wdGlvbnMpO1xuXG4gIHZhciBkb2MgPSBvcHRpb25zLnZhbHVlO1xuICBpZiAodHlwZW9mIGRvYyA9PSBcInN0cmluZ1wiKSB7IGRvYyA9IG5ldyBEb2MoZG9jLCBvcHRpb25zLm1vZGUsIG51bGwsIG9wdGlvbnMubGluZVNlcGFyYXRvciwgb3B0aW9ucy5kaXJlY3Rpb24pOyB9XG4gIGVsc2UgaWYgKG9wdGlvbnMubW9kZSkgeyBkb2MubW9kZU9wdGlvbiA9IG9wdGlvbnMubW9kZTsgfVxuICB0aGlzLmRvYyA9IGRvYztcblxuICB2YXIgaW5wdXQgPSBuZXcgQ29kZU1pcnJvciQxLmlucHV0U3R5bGVzW29wdGlvbnMuaW5wdXRTdHlsZV0odGhpcyk7XG4gIHZhciBkaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID0gbmV3IERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQpO1xuICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7XG4gIHVwZGF0ZUd1dHRlcnModGhpcyk7XG4gIHRoZW1lQ2hhbmdlZCh0aGlzKTtcbiAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKVxuICAgIHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9IFwiIENvZGVNaXJyb3Itd3JhcFwiOyB9XG4gIGluaXRTY3JvbGxiYXJzKHRoaXMpO1xuXG4gIHRoaXMuc3RhdGUgPSB7XG4gICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFwcyBhZGRlZCBieSBhZGRLZXlNYXBcbiAgICBvdmVybGF5czogW10sIC8vIGhpZ2hsaWdodGluZyBvdmVybGF5cywgYXMgYWRkZWQgYnkgYWRkT3ZlcmxheVxuICAgIG1vZGVHZW46IDAsICAgLy8gYnVtcGVkIHdoZW4gbW9kZS9vdmVybGF5IGNoYW5nZXMsIHVzZWQgdG8gaW52YWxpZGF0ZSBoaWdobGlnaHRpbmcgaW5mb1xuICAgIG92ZXJ3cml0ZTogZmFsc2UsXG4gICAgZGVsYXlpbmdCbHVyRXZlbnQ6IGZhbHNlLFxuICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1c2VkIHRvIGRpc2FibGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9ubHkgbW9kZVxuICAgIHBhc3RlSW5jb21pbmc6IGZhbHNlLCBjdXRJbmNvbWluZzogZmFsc2UsIC8vIGhlbHAgcmVjb2duaXplIHBhc3RlL2N1dCBlZGl0cyBpbiBpbnB1dC5wb2xsXG4gICAgc2VsZWN0aW5nVGV4dDogZmFsc2UsXG4gICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSxcbiAgICBoaWdobGlnaHQ6IG5ldyBEZWxheWVkKCksIC8vIHN0b3JlcyBoaWdobGlnaHQgd29ya2VyIHRpbWVvdXRcbiAgICBrZXlTZXE6IG51bGwsICAvLyBVbmZpbmlzaGVkIGtleSBzZXF1ZW5jZVxuICAgIHNwZWNpYWxDaGFyczogbnVsbFxuICB9O1xuXG4gIGlmIChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB7IGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfVxuXG4gIC8vIE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzXG4gIC8vIG9uIG91ciBoaWRkZW4gdGV4dGFyZWEgb24gcmVsb2FkXG4gIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzJDEuZGlzcGxheS5pbnB1dC5yZXNldCh0cnVlKTsgfSwgMjApOyB9XG5cbiAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpO1xuICBlbnN1cmVHbG9iYWxIYW5kbGVycygpO1xuXG4gIHN0YXJ0T3BlcmF0aW9uKHRoaXMpO1xuICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7XG5cbiAgaWYgKChvcHRpb25zLmF1dG9mb2N1cyAmJiAhbW9iaWxlKSB8fCB0aGlzLmhhc0ZvY3VzKCkpXG4gICAgeyBzZXRUaW1lb3V0KGJpbmQob25Gb2N1cywgdGhpcyksIDIwKTsgfVxuICBlbHNlXG4gICAgeyBvbkJsdXIodGhpcyk7IH1cblxuICBmb3IgKHZhciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpIHsgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgeyBvcHRpb25IYW5kbGVyc1tvcHRdKHRoaXMkMSwgb3B0aW9uc1tvcHRdLCBJbml0KTsgfSB9XG4gIG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKHRoaXMpO1xuICBpZiAob3B0aW9ucy5maW5pc2hJbml0KSB7IG9wdGlvbnMuZmluaXNoSW5pdCh0aGlzKTsgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkgeyBpbml0SG9va3NbaV0odGhpcyQxKTsgfVxuICBlbmRPcGVyYXRpb24odGhpcyk7XG4gIC8vIFN1cHByZXNzIG9wdGltaXplbGVnaWJpbGl0eSBpbiBXZWJraXQsIHNpbmNlIGl0IGJyZWFrcyB0ZXh0XG4gIC8vIG1lYXN1cmluZyBvbiBsaW5lIHdyYXBwaW5nIGJvdW5kYXJpZXMuXG4gIGlmICh3ZWJraXQgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiZcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGlzcGxheS5saW5lRGl2KS50ZXh0UmVuZGVyaW5nID09IFwib3B0aW1pemVsZWdpYmlsaXR5XCIpXG4gICAgeyBkaXNwbGF5LmxpbmVEaXYuc3R5bGUudGV4dFJlbmRlcmluZyA9IFwiYXV0b1wiOyB9XG59XG5cbi8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbkNvZGVNaXJyb3IkMS5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuLy8gRnVuY3Rpb25zIHRvIHJ1biB3aGVuIG9wdGlvbnMgYXJlIGNoYW5nZWQuXG5Db2RlTWlycm9yJDEub3B0aW9uSGFuZGxlcnMgPSBvcHRpb25IYW5kbGVycztcblxuLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBpbml0aWFsaXppbmcgdGhlIGVkaXRvclxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudEhhbmRsZXJzKGNtKSB7XG4gIHZhciBkID0gY20uZGlzcGxheTtcbiAgb24oZC5zY3JvbGxlciwgXCJtb3VzZWRvd25cIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpO1xuICAvLyBPbGRlciBJRSdzIHdpbGwgbm90IGZpcmUgYSBzZWNvbmQgbW91c2Vkb3duIGZvciBhIGRvdWJsZSBjbGlja1xuICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKVxuICAgIHsgb24oZC5zY3JvbGxlciwgXCJkYmxjbGlja1wiLCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKTtcbiAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICB2YXIgd29yZCA9IGNtLmZpbmRXb3JkQXQocG9zKTtcbiAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9yLCB3b3JkLmhlYWQpO1xuICAgIH0pKTsgfVxuICBlbHNlXG4gICAgeyBvbihkLnNjcm9sbGVyLCBcImRibGNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7IH1cbiAgLy8gU29tZSBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXRcbiAgLy8gd2hpY2ggcG9pbnQgd2UgY2FuJ3QgbWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVudSBpc1xuICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciB0aGVzZSBicm93c2Vycy5cbiAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgeyBvbihkLnNjcm9sbGVyLCBcImNvbnRleHRtZW51XCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkNvbnRleHRNZW51KGNtLCBlKTsgfSk7IH1cblxuICAvLyBVc2VkIHRvIHN1cHByZXNzIG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdoZW4gYSB0b3VjaCBoYXBwZW5zXG4gIHZhciB0b3VjaEZpbmlzaGVkLCBwcmV2VG91Y2ggPSB7ZW5kOiAwfTtcbiAgZnVuY3Rpb24gZmluaXNoVG91Y2goKSB7XG4gICAgaWYgKGQuYWN0aXZlVG91Y2gpIHtcbiAgICAgIHRvdWNoRmluaXNoZWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGQuYWN0aXZlVG91Y2ggPSBudWxsOyB9LCAxMDAwKTtcbiAgICAgIHByZXZUb3VjaCA9IGQuYWN0aXZlVG91Y2g7XG4gICAgICBwcmV2VG91Y2guZW5kID0gK25ldyBEYXRlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkge1xuICAgIGlmIChlLnRvdWNoZXMubGVuZ3RoICE9IDEpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgdG91Y2ggPSBlLnRvdWNoZXNbMF07XG4gICAgcmV0dXJuIHRvdWNoLnJhZGl1c1ggPD0gMSAmJiB0b3VjaC5yYWRpdXNZIDw9IDFcbiAgfVxuICBmdW5jdGlvbiBmYXJBd2F5KHRvdWNoLCBvdGhlcikge1xuICAgIGlmIChvdGhlci5sZWZ0ID09IG51bGwpIHsgcmV0dXJuIHRydWUgfVxuICAgIHZhciBkeCA9IG90aGVyLmxlZnQgLSB0b3VjaC5sZWZ0LCBkeSA9IG90aGVyLnRvcCAtIHRvdWNoLnRvcDtcbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHkgPiAyMCAqIDIwXG4gIH1cbiAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKCFzaWduYWxET01FdmVudChjbSwgZSkgJiYgIWlzTW91c2VMaWtlVG91Y2hFdmVudChlKSAmJiAhY2xpY2tJbkd1dHRlcihjbSwgZSkpIHtcbiAgICAgIGQuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgICBjbGVhclRpbWVvdXQodG91Y2hGaW5pc2hlZCk7XG4gICAgICB2YXIgbm93ID0gK25ldyBEYXRlO1xuICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBtb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgIHByZXY6IG5vdyAtIHByZXZUb3VjaC5lbmQgPD0gMzAwID8gcHJldlRvdWNoIDogbnVsbH07XG4gICAgICBpZiAoZS50b3VjaGVzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgZC5hY3RpdmVUb3VjaC50b3AgPSBlLnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaG1vdmVcIiwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7IGQuYWN0aXZlVG91Y2gubW92ZWQgPSB0cnVlOyB9XG4gIH0pO1xuICBvbihkLnNjcm9sbGVyLCBcInRvdWNoZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHRvdWNoID0gZC5hY3RpdmVUb3VjaDtcbiAgICBpZiAodG91Y2ggJiYgIWV2ZW50SW5XaWRnZXQoZCwgZSkgJiYgdG91Y2gubGVmdCAhPSBudWxsICYmXG4gICAgICAgICF0b3VjaC5tb3ZlZCAmJiBuZXcgRGF0ZSAtIHRvdWNoLnN0YXJ0IDwgMzAwKSB7XG4gICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihkLmFjdGl2ZVRvdWNoLCBcInBhZ2VcIiksIHJhbmdlO1xuICAgICAgaWYgKCF0b3VjaC5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYpKSAvLyBTaW5nbGUgdGFwXG4gICAgICAgIHsgcmFuZ2UgPSBuZXcgUmFuZ2UocG9zLCBwb3MpOyB9XG4gICAgICBlbHNlIGlmICghdG91Y2gucHJldi5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYucHJldikpIC8vIERvdWJsZSB0YXBcbiAgICAgICAgeyByYW5nZSA9IGNtLmZpbmRXb3JkQXQocG9zKTsgfVxuICAgICAgZWxzZSAvLyBUcmlwbGUgdGFwXG4gICAgICAgIHsgcmFuZ2UgPSBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSk7IH1cbiAgICAgIGNtLnNldFNlbGVjdGlvbihyYW5nZS5hbmNob3IsIHJhbmdlLmhlYWQpO1xuICAgICAgY20uZm9jdXMoKTtcbiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgfVxuICAgIGZpbmlzaFRvdWNoKCk7XG4gIH0pO1xuICBvbihkLnNjcm9sbGVyLCBcInRvdWNoY2FuY2VsXCIsIGZpbmlzaFRvdWNoKTtcblxuICAvLyBTeW5jIHNjcm9sbGluZyBiZXR3ZWVuIGZha2Ugc2Nyb2xsYmFycyBhbmQgcmVhbCBzY3JvbGxhYmxlXG4gIC8vIGFyZWEsIGVuc3VyZSB2aWV3cG9ydCBpcyB1cGRhdGVkIHdoZW4gc2Nyb2xsaW5nLlxuICBvbihkLnNjcm9sbGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSB7XG4gICAgICB1cGRhdGVTY3JvbGxUb3AoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsVG9wKTtcbiAgICAgIHNldFNjcm9sbExlZnQoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdHJ1ZSk7XG4gICAgICBzaWduYWwoY20sIFwic2Nyb2xsXCIsIGNtKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIExpc3RlbiB0byB3aGVlbCBldmVudHMgaW4gb3JkZXIgdG8gdHJ5IGFuZCB1cGRhdGUgdGhlIHZpZXdwb3J0IG9uIHRpbWUuXG4gIG9uKGQuc2Nyb2xsZXIsIFwibW91c2V3aGVlbFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25TY3JvbGxXaGVlbChjbSwgZSk7IH0pO1xuICBvbihkLnNjcm9sbGVyLCBcIkRPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvblNjcm9sbFdoZWVsKGNtLCBlKTsgfSk7XG5cbiAgLy8gUHJldmVudCB3cmFwcGVyIGZyb20gZXZlciBzY3JvbGxpbmdcbiAgb24oZC53cmFwcGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTtcblxuICBkLmRyYWdGdW5jdGlvbnMgPSB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uIChlKSB7aWYgKCFzaWduYWxET01FdmVudChjbSwgZSkpIHsgZV9zdG9wKGUpOyB9fSxcbiAgICBvdmVyOiBmdW5jdGlvbiAoZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20sIGUpOyBlX3N0b3AoZSk7IH19LFxuICAgIHN0YXJ0OiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25EcmFnU3RhcnQoY20sIGUpOyB9LFxuICAgIGRyb3A6IG9wZXJhdGlvbihjbSwgb25Ecm9wKSxcbiAgICBsZWF2ZTogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBjbGVhckRyYWdDdXJzb3IoY20pOyB9fVxuICB9O1xuXG4gIHZhciBpbnAgPSBkLmlucHV0LmdldEZpZWxkKCk7XG4gIG9uKGlucCwgXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25LZXlVcC5jYWxsKGNtLCBlKTsgfSk7XG4gIG9uKGlucCwgXCJrZXlkb3duXCIsIG9wZXJhdGlvbihjbSwgb25LZXlEb3duKSk7XG4gIG9uKGlucCwgXCJrZXlwcmVzc1wiLCBvcGVyYXRpb24oY20sIG9uS2V5UHJlc3MpKTtcbiAgb24oaW5wLCBcImZvY3VzXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkZvY3VzKGNtLCBlKTsgfSk7XG4gIG9uKGlucCwgXCJibHVyXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkJsdXIoY20sIGUpOyB9KTtcbn1cblxudmFyIGluaXRIb29rcyA9IFtdO1xuQ29kZU1pcnJvciQxLmRlZmluZUluaXRIb29rID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGluaXRIb29rcy5wdXNoKGYpOyB9O1xuXG4vLyBJbmRlbnQgdGhlIGdpdmVuIGxpbmUuIFRoZSBob3cgcGFyYW1ldGVyIGNhbiBiZSBcInNtYXJ0XCIsXG4vLyBcImFkZFwiL251bGwsIFwic3VidHJhY3RcIiwgb3IgXCJwcmV2XCIuIFdoZW4gYWdncmVzc2l2ZSBpcyBmYWxzZVxuLy8gKHR5cGljYWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eVxuLy8gbGluZXMgYXJlIG5vdCBpbmRlbnRlZCwgYW5kIHBsYWNlcyB3aGVyZSB0aGUgbW9kZSByZXR1cm5zIFBhc3Ncbi8vIGFyZSBsZWZ0IGFsb25lLlxuZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7XG4gIHZhciBkb2MgPSBjbS5kb2MsIHN0YXRlO1xuICBpZiAoaG93ID09IG51bGwpIHsgaG93ID0gXCJhZGRcIjsgfVxuICBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgIC8vIEZhbGwgYmFjayB0byBcInByZXZcIiB3aGVuIHRoZSBtb2RlIGRvZXNuJ3QgaGF2ZSBhbiBpbmRlbnRhdGlvblxuICAgIC8vIG1ldGhvZC5cbiAgICBpZiAoIWRvYy5tb2RlLmluZGVudCkgeyBob3cgPSBcInByZXZcIjsgfVxuICAgIGVsc2UgeyBzdGF0ZSA9IGdldENvbnRleHRCZWZvcmUoY20sIG4pLnN0YXRlOyB9XG4gIH1cblxuICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTtcbiAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbiksIGN1clNwYWNlID0gY291bnRDb2x1bW4obGluZS50ZXh0LCBudWxsLCB0YWJTaXplKTtcbiAgaWYgKGxpbmUuc3RhdGVBZnRlcikgeyBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOyB9XG4gIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxccyovKVswXSwgaW5kZW50YXRpb247XG4gIGlmICghYWdncmVzc2l2ZSAmJiAhL1xcUy8udGVzdChsaW5lLnRleHQpKSB7XG4gICAgaW5kZW50YXRpb24gPSAwO1xuICAgIGhvdyA9IFwibm90XCI7XG4gIH0gZWxzZSBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgIGluZGVudGF0aW9uID0gZG9jLm1vZGUuaW5kZW50KHN0YXRlLCBsaW5lLnRleHQuc2xpY2UoY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSwgbGluZS50ZXh0KTtcbiAgICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkge1xuICAgICAgaWYgKCFhZ2dyZXNzaXZlKSB7IHJldHVybiB9XG4gICAgICBob3cgPSBcInByZXZcIjtcbiAgICB9XG4gIH1cbiAgaWYgKGhvdyA9PSBcInByZXZcIikge1xuICAgIGlmIChuID4gZG9jLmZpcnN0KSB7IGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIG4tMSkudGV4dCwgbnVsbCwgdGFiU2l6ZSk7IH1cbiAgICBlbHNlIHsgaW5kZW50YXRpb24gPSAwOyB9XG4gIH0gZWxzZSBpZiAoaG93ID09IFwiYWRkXCIpIHtcbiAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0O1xuICB9IGVsc2UgaWYgKGhvdyA9PSBcInN1YnRyYWN0XCIpIHtcbiAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gY20ub3B0aW9ucy5pbmRlbnRVbml0O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0gXCJudW1iZXJcIikge1xuICAgIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBob3c7XG4gIH1cbiAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7XG5cbiAgdmFyIGluZGVudFN0cmluZyA9IFwiXCIsIHBvcyA9IDA7XG4gIGlmIChjbS5vcHRpb25zLmluZGVudFdpdGhUYWJzKVxuICAgIHsgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVudFN0cmluZyArPSBcIlxcdFwiO30gfVxuICBpZiAocG9zIDwgaW5kZW50YXRpb24pIHsgaW5kZW50U3RyaW5nICs9IHNwYWNlU3RyKGluZGVudGF0aW9uIC0gcG9zKTsgfVxuXG4gIGlmIChpbmRlbnRTdHJpbmcgIT0gY3VyU3BhY2VTdHJpbmcpIHtcbiAgICByZXBsYWNlUmFuZ2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIFwiK2lucHV0XCIpO1xuICAgIGxpbmUuc3RhdGVBZnRlciA9IG51bGw7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIHtcbiAgICAvLyBFbnN1cmUgdGhhdCwgaWYgdGhlIGN1cnNvciB3YXMgaW4gdGhlIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0XG4gICAgLy8gb2YgdGhlIGxpbmUsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhhdCBzcGFjZS5cbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpJDFdO1xuICAgICAgaWYgKHJhbmdlLmhlYWQubGluZSA9PSBuICYmIHJhbmdlLmhlYWQuY2ggPCBjdXJTcGFjZVN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHBvcyQxID0gUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpJDEsIG5ldyBSYW5nZShwb3MkMSwgcG9zJDEpKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyB3aWxsIGJlIHNldCB0byBhIHtsaW5lV2lzZTogYm9vbCwgdGV4dDogW3N0cmluZ119IG9iamVjdCwgc29cbi8vIHRoYXQsIHdoZW4gcGFzdGluZywgd2Uga25vdyB3aGF0IGtpbmQgb2Ygc2VsZWN0aW9ucyB0aGUgY29waWVkXG4vLyB0ZXh0IHdhcyBtYWRlIG91dCBvZi5cbnZhciBsYXN0Q29waWVkID0gbnVsbDtcblxuZnVuY3Rpb24gc2V0TGFzdENvcGllZChuZXdMYXN0Q29waWVkKSB7XG4gIGxhc3RDb3BpZWQgPSBuZXdMYXN0Q29waWVkO1xufVxuXG5mdW5jdGlvbiBhcHBseVRleHRJbnB1dChjbSwgaW5zZXJ0ZWQsIGRlbGV0ZWQsIHNlbCwgb3JpZ2luKSB7XG4gIHZhciBkb2MgPSBjbS5kb2M7XG4gIGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTtcbiAgaWYgKCFzZWwpIHsgc2VsID0gZG9jLnNlbDsgfVxuXG4gIHZhciBwYXN0ZSA9IGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgfHwgb3JpZ2luID09IFwicGFzdGVcIjtcbiAgdmFyIHRleHRMaW5lcyA9IHNwbGl0TGluZXNBdXRvKGluc2VydGVkKSwgbXVsdGlQYXN0ZSA9IG51bGw7XG4gIC8vIFdoZW4gcGFzdGluZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvblxuICBpZiAocGFzdGUgJiYgc2VsLnJhbmdlcy5sZW5ndGggPiAxKSB7XG4gICAgaWYgKGxhc3RDb3BpZWQgJiYgbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIikgPT0gaW5zZXJ0ZWQpIHtcbiAgICAgIGlmIChzZWwucmFuZ2VzLmxlbmd0aCAlIGxhc3RDb3BpZWQudGV4dC5sZW5ndGggPT0gMCkge1xuICAgICAgICBtdWx0aVBhc3RlID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdENvcGllZC50ZXh0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgbXVsdGlQYXN0ZS5wdXNoKGRvYy5zcGxpdExpbmVzKGxhc3RDb3BpZWQudGV4dFtpXSkpOyB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0ZXh0TGluZXMubGVuZ3RoID09IHNlbC5yYW5nZXMubGVuZ3RoICYmIGNtLm9wdGlvbnMucGFzdGVMaW5lc1BlclNlbGVjdGlvbikge1xuICAgICAgbXVsdGlQYXN0ZSA9IG1hcCh0ZXh0TGluZXMsIGZ1bmN0aW9uIChsKSB7IHJldHVybiBbbF07IH0pO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGVJbnB1dDtcbiAgLy8gTm9ybWFsIGJlaGF2aW9yIGlzIHRvIGluc2VydCB0aGUgbmV3IHRleHQgaW50byBldmVyeSBzZWxlY3Rpb25cbiAgZm9yICh2YXIgaSQxID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pIHtcbiAgICB2YXIgcmFuZ2UkJDEgPSBzZWwucmFuZ2VzW2kkMV07XG4gICAgdmFyIGZyb20gPSByYW5nZSQkMS5mcm9tKCksIHRvID0gcmFuZ2UkJDEudG8oKTtcbiAgICBpZiAocmFuZ2UkJDEuZW1wdHkoKSkge1xuICAgICAgaWYgKGRlbGV0ZWQgJiYgZGVsZXRlZCA+IDApIC8vIEhhbmRsZSBkZWxldGlvblxuICAgICAgICB7IGZyb20gPSBQb3MoZnJvbS5saW5lLCBmcm9tLmNoIC0gZGVsZXRlZCk7IH1cbiAgICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiAhcGFzdGUpIC8vIEhhbmRsZSBvdmVyd3JpdGVcbiAgICAgICAgeyB0byA9IFBvcyh0by5saW5lLCBNYXRoLm1pbihnZXRMaW5lKGRvYywgdG8ubGluZSkudGV4dC5sZW5ndGgsIHRvLmNoICsgbHN0KHRleHRMaW5lcykubGVuZ3RoKSk7IH1cbiAgICAgIGVsc2UgaWYgKGxhc3RDb3BpZWQgJiYgbGFzdENvcGllZC5saW5lV2lzZSAmJiBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKSA9PSBpbnNlcnRlZClcbiAgICAgICAgeyBmcm9tID0gdG8gPSBQb3MoZnJvbS5saW5lLCAwKTsgfVxuICAgIH1cbiAgICB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0O1xuICAgIHZhciBjaGFuZ2VFdmVudCA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHRleHQ6IG11bHRpUGFzdGUgPyBtdWx0aVBhc3RlW2kkMSAlIG11bHRpUGFzdGUubGVuZ3RoXSA6IHRleHRMaW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBvcmlnaW4gfHwgKHBhc3RlID8gXCJwYXN0ZVwiIDogY20uc3RhdGUuY3V0SW5jb21pbmcgPyBcImN1dFwiIDogXCIraW5wdXRcIil9O1xuICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7XG4gICAgc2lnbmFsTGF0ZXIoY20sIFwiaW5wdXRSZWFkXCIsIGNtLCBjaGFuZ2VFdmVudCk7XG4gIH1cbiAgaWYgKGluc2VydGVkICYmICFwYXN0ZSlcbiAgICB7IHRyaWdnZXJFbGVjdHJpYyhjbSwgaW5zZXJ0ZWQpOyB9XG5cbiAgZW5zdXJlQ3Vyc29yVmlzaWJsZShjbSk7XG4gIGNtLmN1ck9wLnVwZGF0ZUlucHV0ID0gdXBkYXRlSW5wdXQ7XG4gIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7XG4gIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVQYXN0ZShlLCBjbSkge1xuICB2YXIgcGFzdGVkID0gZS5jbGlwYm9hcmREYXRhICYmIGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKTtcbiAgaWYgKHBhc3RlZCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIWNtLmlzUmVhZE9ubHkoKSAmJiAhY20ub3B0aW9ucy5kaXNhYmxlSW5wdXQpXG4gICAgICB7IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFwcGx5VGV4dElucHV0KGNtLCBwYXN0ZWQsIDAsIG51bGwsIFwicGFzdGVcIik7IH0pOyB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2VydGVkKSB7XG4gIC8vIFdoZW4gYW4gJ2VsZWN0cmljJyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGltbWVkaWF0ZWx5IHRyaWdnZXIgYSByZWluZGVudFxuICBpZiAoIWNtLm9wdGlvbnMuZWxlY3RyaWNDaGFycyB8fCAhY20ub3B0aW9ucy5zbWFydEluZGVudCkgeyByZXR1cm4gfVxuICB2YXIgc2VsID0gY20uZG9jLnNlbDtcblxuICBmb3IgKHZhciBpID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciByYW5nZSQkMSA9IHNlbC5yYW5nZXNbaV07XG4gICAgaWYgKHJhbmdlJCQxLmhlYWQuY2ggPiAxMDAgfHwgKGkgJiYgc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lID09IHJhbmdlJCQxLmhlYWQubGluZSkpIHsgY29udGludWUgfVxuICAgIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHJhbmdlJCQxLmhlYWQpO1xuICAgIHZhciBpbmRlbnRlZCA9IGZhbHNlO1xuICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbW9kZS5lbGVjdHJpY0NoYXJzLmxlbmd0aDsgaisrKVxuICAgICAgICB7IGlmIChpbnNlcnRlZC5pbmRleE9mKG1vZGUuZWxlY3RyaWNDaGFycy5jaGFyQXQoaikpID4gLTEpIHtcbiAgICAgICAgICBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlJCQxLmhlYWQubGluZSwgXCJzbWFydFwiKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IH1cbiAgICB9IGVsc2UgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dCkge1xuICAgICAgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dC50ZXN0KGdldExpbmUoY20uZG9jLCByYW5nZSQkMS5oZWFkLmxpbmUpLnRleHQuc2xpY2UoMCwgcmFuZ2UkJDEuaGVhZC5jaCkpKVxuICAgICAgICB7IGluZGVudGVkID0gaW5kZW50TGluZShjbSwgcmFuZ2UkJDEuaGVhZC5saW5lLCBcInNtYXJ0XCIpOyB9XG4gICAgfVxuICAgIGlmIChpbmRlbnRlZCkgeyBzaWduYWxMYXRlcihjbSwgXCJlbGVjdHJpY0lucHV0XCIsIGNtLCByYW5nZSQkMS5oZWFkLmxpbmUpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29weWFibGVSYW5nZXMoY20pIHtcbiAgdmFyIHRleHQgPSBbXSwgcmFuZ2VzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGluZSA9IGNtLmRvYy5zZWwucmFuZ2VzW2ldLmhlYWQubGluZTtcbiAgICB2YXIgbGluZVJhbmdlID0ge2FuY2hvcjogUG9zKGxpbmUsIDApLCBoZWFkOiBQb3MobGluZSArIDEsIDApfTtcbiAgICByYW5nZXMucHVzaChsaW5lUmFuZ2UpO1xuICAgIHRleHQucHVzaChjbS5nZXRSYW5nZShsaW5lUmFuZ2UuYW5jaG9yLCBsaW5lUmFuZ2UuaGVhZCkpO1xuICB9XG4gIHJldHVybiB7dGV4dDogdGV4dCwgcmFuZ2VzOiByYW5nZXN9XG59XG5cbmZ1bmN0aW9uIGRpc2FibGVCcm93c2VyTWFnaWMoZmllbGQsIHNwZWxsY2hlY2spIHtcbiAgZmllbGQuc2V0QXR0cmlidXRlKFwiYXV0b2NvcnJlY3RcIiwgXCJvZmZcIik7XG4gIGZpZWxkLnNldEF0dHJpYnV0ZShcImF1dG9jYXBpdGFsaXplXCIsIFwib2ZmXCIpO1xuICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJzcGVsbGNoZWNrXCIsICEhc3BlbGxjaGVjayk7XG59XG5cbmZ1bmN0aW9uIGhpZGRlblRleHRhcmVhKCkge1xuICB2YXIgdGUgPSBlbHQoXCJ0ZXh0YXJlYVwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAtMWVtOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZVwiKTtcbiAgdmFyIGRpdiA9IGVsdChcImRpdlwiLCBbdGVdLCBudWxsLCBcIm92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7XCIpO1xuICAvLyBUaGUgdGV4dGFyZWEgaXMga2VwdCBwb3NpdGlvbmVkIG5lYXIgdGhlIGN1cnNvciB0byBwcmV2ZW50IHRoZVxuICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nXG4gIC8vIG91ciBmYWtlIGN1cnNvciBvdXQgb2Ygdmlldy4gT24gd2Via2l0LCB3aGVuIHdyYXA9b2ZmLCBwYXN0ZSBpc1xuICAvLyB2ZXJ5IHNsb3cuIFNvIG1ha2UgdGhlIGFyZWEgd2lkZSBpbnN0ZWFkLlxuICBpZiAod2Via2l0KSB7IHRlLnN0eWxlLndpZHRoID0gXCIxMDAwcHhcIjsgfVxuICBlbHNlIHsgdGUuc2V0QXR0cmlidXRlKFwid3JhcFwiLCBcIm9mZlwiKTsgfVxuICAvLyBJZiBib3JkZXI6IDA7IC0tIGlPUyBmYWlscyB0byBvcGVuIGtleWJvYXJkIChpc3N1ZSAjMTI4NylcbiAgaWYgKGlvcykgeyB0ZS5zdHlsZS5ib3JkZXIgPSBcIjFweCBzb2xpZCBibGFja1wiOyB9XG4gIGRpc2FibGVCcm93c2VyTWFnaWModGUpO1xuICByZXR1cm4gZGl2XG59XG5cbi8vIFRoZSBwdWJsaWNseSB2aXNpYmxlIEFQSS4gTm90ZSB0aGF0IG1ldGhvZE9wKGYpIG1lYW5zXG4vLyAnd3JhcCBmIGluIGFuIG9wZXJhdGlvbiwgcGVyZm9ybWVkIG9uIGl0cyBgdGhpc2AgcGFyYW1ldGVyJy5cblxuLy8gVGhpcyBpcyBub3QgdGhlIGNvbXBsZXRlIHNldCBvZiBlZGl0b3IgbWV0aG9kcy4gTW9zdCBvZiB0aGVcbi8vIG1ldGhvZHMgZGVmaW5lZCBvbiB0aGUgRG9jIHR5cGUgYXJlIGFsc28gaW5qZWN0ZWQgaW50b1xuLy8gQ29kZU1pcnJvci5wcm90b3R5cGUsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmRcbi8vIGNvbnZlbmllbmNlLlxuXG52YXIgYWRkRWRpdG9yTWV0aG9kcyA9IGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycztcblxuICB2YXIgaGVscGVycyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9O1xuXG4gIENvZGVNaXJyb3IucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb2RlTWlycm9yLFxuICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LFxuXG4gICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucywgb2xkID0gb3B0aW9uc1tvcHRpb25dO1xuICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9PSB2YWx1ZSAmJiBvcHRpb24gIT0gXCJtb2RlXCIpIHsgcmV0dXJuIH1cbiAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdGlvbikpXG4gICAgICAgIHsgb3BlcmF0aW9uKHRoaXMsIG9wdGlvbkhhbmRsZXJzW29wdGlvbl0pKHRoaXMsIHZhbHVlLCBvbGQpOyB9XG4gICAgICBzaWduYWwodGhpcywgXCJvcHRpb25DaGFuZ2VcIiwgdGhpcywgb3B0aW9uKTtcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbl19LFxuICAgIGdldERvYzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZG9jfSxcblxuICAgIGFkZEtleU1hcDogZnVuY3Rpb24obWFwJCQxLCBib3R0b20pIHtcbiAgICAgIHRoaXMuc3RhdGUua2V5TWFwc1tib3R0b20gPyBcInB1c2hcIiA6IFwidW5zaGlmdFwiXShnZXRLZXlNYXAobWFwJCQxKSk7XG4gICAgfSxcbiAgICByZW1vdmVLZXlNYXA6IGZ1bmN0aW9uKG1hcCQkMSkge1xuICAgICAgdmFyIG1hcHMgPSB0aGlzLnN0YXRlLmtleU1hcHM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcHMubGVuZ3RoOyArK2kpXG4gICAgICAgIHsgaWYgKG1hcHNbaV0gPT0gbWFwJCQxIHx8IG1hcHNbaV0ubmFtZSA9PSBtYXAkJDEpIHtcbiAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9IH1cbiAgICB9LFxuXG4gICAgYWRkT3ZlcmxheTogbWV0aG9kT3AoZnVuY3Rpb24oc3BlYywgb3B0aW9ucykge1xuICAgICAgdmFyIG1vZGUgPSBzcGVjLnRva2VuID8gc3BlYyA6IENvZGVNaXJyb3IuZ2V0TW9kZSh0aGlzLm9wdGlvbnMsIHNwZWMpO1xuICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLlwiKSB9XG4gICAgICBpbnNlcnRTb3J0ZWQodGhpcy5zdGF0ZS5vdmVybGF5cyxcbiAgICAgICAgICAgICAgICAgICB7bW9kZTogbW9kZSwgbW9kZVNwZWM6IHNwZWMsIG9wYXF1ZTogb3B0aW9ucyAmJiBvcHRpb25zLm9wYXF1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IChvcHRpb25zICYmIG9wdGlvbnMucHJpb3JpdHkpIHx8IDB9LFxuICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChvdmVybGF5KSB7IHJldHVybiBvdmVybGF5LnByaW9yaXR5OyB9KTtcbiAgICAgIHRoaXMuc3RhdGUubW9kZUdlbisrO1xuICAgICAgcmVnQ2hhbmdlKHRoaXMpO1xuICAgIH0pLFxuICAgIHJlbW92ZU92ZXJsYXk6IG1ldGhvZE9wKGZ1bmN0aW9uKHNwZWMpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB2YXIgb3ZlcmxheXMgPSB0aGlzLnN0YXRlLm92ZXJsYXlzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdmVybGF5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7XG4gICAgICAgIGlmIChjdXIgPT0gc3BlYyB8fCB0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIGN1ci5uYW1lID09IHNwZWMpIHtcbiAgICAgICAgICBvdmVybGF5cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgdGhpcyQxLnN0YXRlLm1vZGVHZW4rKztcbiAgICAgICAgICByZWdDaGFuZ2UodGhpcyQxKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaW5kZW50TGluZTogbWV0aG9kT3AoZnVuY3Rpb24obiwgZGlyLCBhZ2dyZXNzaXZlKSB7XG4gICAgICBpZiAodHlwZW9mIGRpciAhPSBcInN0cmluZ1wiICYmIHR5cGVvZiBkaXIgIT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZGlyID09IG51bGwpIHsgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50ID8gXCJzbWFydFwiIDogXCJwcmV2XCI7IH1cbiAgICAgICAgZWxzZSB7IGRpciA9IGRpciA/IFwiYWRkXCIgOiBcInN1YnRyYWN0XCI7IH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSB7IGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZlKTsgfVxuICAgIH0pLFxuICAgIGluZGVudFNlbGVjdGlvbjogbWV0aG9kT3AoZnVuY3Rpb24oaG93KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZG9jLnNlbC5yYW5nZXMsIGVuZCA9IC0xO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJhbmdlJCQxID0gcmFuZ2VzW2ldO1xuICAgICAgICBpZiAoIXJhbmdlJCQxLmVtcHR5KCkpIHtcbiAgICAgICAgICB2YXIgZnJvbSA9IHJhbmdlJCQxLmZyb20oKSwgdG8gPSByYW5nZSQkMS50bygpO1xuICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5saW5lKTtcbiAgICAgICAgICBlbmQgPSBNYXRoLm1pbih0aGlzJDEubGFzdExpbmUoKSwgdG8ubGluZSAtICh0by5jaCA/IDAgOiAxKSkgKyAxO1xuICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKVxuICAgICAgICAgICAgeyBpbmRlbnRMaW5lKHRoaXMkMSwgaiwgaG93KTsgfVxuICAgICAgICAgIHZhciBuZXdSYW5nZXMgPSB0aGlzJDEuZG9jLnNlbC5yYW5nZXM7XG4gICAgICAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiByYW5nZXMubGVuZ3RoID09IG5ld1Jhbmdlcy5sZW5ndGggJiYgbmV3UmFuZ2VzW2ldLmZyb20oKS5jaCA+IDApXG4gICAgICAgICAgICB7IHJlcGxhY2VPbmVTZWxlY3Rpb24odGhpcyQxLmRvYywgaSwgbmV3IFJhbmdlKGZyb20sIG5ld1Jhbmdlc1tpXS50bygpKSwgc2VsX2RvbnRTY3JvbGwpOyB9XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2UkJDEuaGVhZC5saW5lID4gZW5kKSB7XG4gICAgICAgICAgaW5kZW50TGluZSh0aGlzJDEsIHJhbmdlJCQxLmhlYWQubGluZSwgaG93LCB0cnVlKTtcbiAgICAgICAgICBlbmQgPSByYW5nZSQkMS5oZWFkLmxpbmU7XG4gICAgICAgICAgaWYgKGkgPT0gdGhpcyQxLmRvYy5zZWwucHJpbUluZGV4KSB7IGVuc3VyZUN1cnNvclZpc2libGUodGhpcyQxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBGZXRjaCB0aGUgcGFyc2VyIHRva2VuIGZvciBhIGdpdmVuIGNoYXJhY3Rlci4gVXNlZnVsIGZvciBoYWNrc1xuICAgIC8vIHRoYXQgd2FudCB0byBpbnNwZWN0IHRoZSBtb2RlIHN0YXRlIChzYXksIGZvciBjb21wbGV0aW9uKS5cbiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3MsIHByZWNpc2UpIHtcbiAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgcG9zLCBwcmVjaXNlKVxuICAgIH0sXG5cbiAgICBnZXRMaW5lVG9rZW5zOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7XG4gICAgICByZXR1cm4gdGFrZVRva2VuKHRoaXMsIFBvcyhsaW5lKSwgcHJlY2lzZSwgdHJ1ZSlcbiAgICB9LFxuXG4gICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgcG9zKTtcbiAgICAgIHZhciBzdHlsZXMgPSBnZXRMaW5lU3R5bGVzKHRoaXMsIGdldExpbmUodGhpcy5kb2MsIHBvcy5saW5lKSk7XG4gICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7XG4gICAgICB2YXIgdHlwZTtcbiAgICAgIGlmIChjaCA9PSAwKSB7IHR5cGUgPSBzdHlsZXNbMl07IH1cbiAgICAgIGVsc2UgeyBmb3IgKDs7KSB7XG4gICAgICAgIHZhciBtaWQgPSAoYmVmb3JlICsgYWZ0ZXIpID4+IDE7XG4gICAgICAgIGlmICgobWlkID8gc3R5bGVzW21pZCAqIDIgLSAxXSA6IDApID49IGNoKSB7IGFmdGVyID0gbWlkOyB9XG4gICAgICAgIGVsc2UgaWYgKHN0eWxlc1ttaWQgKiAyICsgMV0gPCBjaCkgeyBiZWZvcmUgPSBtaWQgKyAxOyB9XG4gICAgICAgIGVsc2UgeyB0eXBlID0gc3R5bGVzW21pZCAqIDIgKyAyXTsgYnJlYWsgfVxuICAgICAgfSB9XG4gICAgICB2YXIgY3V0ID0gdHlwZSA/IHR5cGUuaW5kZXhPZihcIm92ZXJsYXkgXCIpIDogLTE7XG4gICAgICByZXR1cm4gY3V0IDwgMCA/IHR5cGUgOiBjdXQgPT0gMCA/IG51bGwgOiB0eXBlLnNsaWNlKDAsIGN1dCAtIDEpXG4gICAgfSxcblxuICAgIGdldE1vZGVBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICB2YXIgbW9kZSA9IHRoaXMuZG9jLm1vZGU7XG4gICAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSB7IHJldHVybiBtb2RlIH1cbiAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCB0aGlzLmdldFRva2VuQXQocG9zKS5zdGF0ZSkubW9kZVxuICAgIH0sXG5cbiAgICBnZXRIZWxwZXI6IGZ1bmN0aW9uKHBvcywgdHlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBdXG4gICAgfSxcblxuICAgIGdldEhlbHBlcnM6IGZ1bmN0aW9uKHBvcywgdHlwZSkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHZhciBmb3VuZCA9IFtdO1xuICAgICAgaWYgKCFoZWxwZXJzLmhhc093blByb3BlcnR5KHR5cGUpKSB7IHJldHVybiBmb3VuZCB9XG4gICAgICB2YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUgPSB0aGlzLmdldE1vZGVBdChwb3MpO1xuICAgICAgaWYgKHR5cGVvZiBtb2RlW3R5cGVdID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGhlbHBbbW9kZVt0eXBlXV0pIHsgZm91bmQucHVzaChoZWxwW21vZGVbdHlwZV1dKTsgfVxuICAgICAgfSBlbHNlIGlmIChtb2RlW3R5cGVdKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZVt0eXBlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciB2YWwgPSBoZWxwW21vZGVbdHlwZV1baV1dO1xuICAgICAgICAgIGlmICh2YWwpIHsgZm91bmQucHVzaCh2YWwpOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobW9kZS5oZWxwZXJUeXBlICYmIGhlbHBbbW9kZS5oZWxwZXJUeXBlXSkge1xuICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7XG4gICAgICB9IGVsc2UgaWYgKGhlbHBbbW9kZS5uYW1lXSkge1xuICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5uYW1lXSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBoZWxwLl9nbG9iYWwubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgY3VyID0gaGVscC5fZ2xvYmFsW2kkMV07XG4gICAgICAgIGlmIChjdXIucHJlZChtb2RlLCB0aGlzJDEpICYmIGluZGV4T2YoZm91bmQsIGN1ci52YWwpID09IC0xKVxuICAgICAgICAgIHsgZm91bmQucHVzaChjdXIudmFsKTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kXG4gICAgfSxcblxuICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUsIHByZWNpc2UpIHtcbiAgICAgIHZhciBkb2MgPSB0aGlzLmRvYztcbiAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSk7XG4gICAgICByZXR1cm4gZ2V0Q29udGV4dEJlZm9yZSh0aGlzLCBsaW5lICsgMSwgcHJlY2lzZSkuc3RhdGVcbiAgICB9LFxuXG4gICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkge1xuICAgICAgdmFyIHBvcywgcmFuZ2UkJDEgPSB0aGlzLmRvYy5zZWwucHJpbWFyeSgpO1xuICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHsgcG9zID0gcmFuZ2UkJDEuaGVhZDsgfVxuICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09IFwib2JqZWN0XCIpIHsgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgc3RhcnQpOyB9XG4gICAgICBlbHNlIHsgcG9zID0gc3RhcnQgPyByYW5nZSQkMS5mcm9tKCkgOiByYW5nZSQkMS50bygpOyB9XG4gICAgICByZXR1cm4gY3Vyc29yQ29vcmRzKHRoaXMsIHBvcywgbW9kZSB8fCBcInBhZ2VcIilcbiAgICB9LFxuXG4gICAgY2hhckNvb3JkczogZnVuY3Rpb24ocG9zLCBtb2RlKSB7XG4gICAgICByZXR1cm4gY2hhckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpLCBtb2RlIHx8IFwicGFnZVwiKVxuICAgIH0sXG5cbiAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMsIG1vZGUpIHtcbiAgICAgIGNvb3JkcyA9IGZyb21Db29yZFN5c3RlbSh0aGlzLCBjb29yZHMsIG1vZGUgfHwgXCJwYWdlXCIpO1xuICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApXG4gICAgfSxcblxuICAgIGxpbmVBdEhlaWdodDogZnVuY3Rpb24oaGVpZ2h0LCBtb2RlKSB7XG4gICAgICBoZWlnaHQgPSBmcm9tQ29vcmRTeXN0ZW0odGhpcywge3RvcDogaGVpZ2h0LCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIikudG9wO1xuICAgICAgcmV0dXJuIGxpbmVBdEhlaWdodCh0aGlzLmRvYywgaGVpZ2h0ICsgdGhpcy5kaXNwbGF5LnZpZXdPZmZzZXQpXG4gICAgfSxcbiAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUsIGluY2x1ZGVXaWRnZXRzKSB7XG4gICAgICB2YXIgZW5kID0gZmFsc2UsIGxpbmVPYmo7XG4gICAgICBpZiAodHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICB2YXIgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7XG4gICAgICAgIGlmIChsaW5lIDwgdGhpcy5kb2MuZmlyc3QpIHsgbGluZSA9IHRoaXMuZG9jLmZpcnN0OyB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUgPiBsYXN0KSB7IGxpbmUgPSBsYXN0OyBlbmQgPSB0cnVlOyB9XG4gICAgICAgIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmVPYmogPSBsaW5lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludG9Db29yZFN5c3RlbSh0aGlzLCBsaW5lT2JqLCB7dG9wOiAwLCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIiwgaW5jbHVkZVdpZGdldHMgfHwgZW5kKS50b3AgK1xuICAgICAgICAoZW5kID8gdGhpcy5kb2MuaGVpZ2h0IC0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopIDogMClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRleHRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpIH0sXG4gICAgZGVmYXVsdENoYXJXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjaGFyV2lkdGgodGhpcy5kaXNwbGF5KSB9LFxuXG4gICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG99fSxcblxuICAgIGFkZFdpZGdldDogZnVuY3Rpb24ocG9zLCBub2RlLCBzY3JvbGwsIHZlcnQsIGhvcml6KSB7XG4gICAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheTtcbiAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpKTtcbiAgICAgIHZhciB0b3AgPSBwb3MuYm90dG9tLCBsZWZ0ID0gcG9zLmxlZnQ7XG4gICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKG5vZGUpO1xuICAgICAgZGlzcGxheS5zaXplci5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIGlmICh2ZXJ0ID09IFwib3ZlclwiKSB7XG4gICAgICAgIHRvcCA9IHBvcy50b3A7XG4gICAgICB9IGVsc2UgaWYgKHZlcnQgPT0gXCJhYm92ZVwiIHx8IHZlcnQgPT0gXCJuZWFyXCIpIHtcbiAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHRoaXMuZG9jLmhlaWdodCksXG4gICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXIuY2xpZW50V2lkdGgsIGRpc3BsYXkubGluZVNwYWNlLmNsaWVudFdpZHRoKTtcbiAgICAgICAgLy8gRGVmYXVsdCB0byBwb3NpdGlvbmluZyBhYm92ZSAoaWYgc3BlY2lmaWVkIGFuZCBwb3NzaWJsZSk7IG90aGVyd2lzZSBkZWZhdWx0IHRvIHBvc2l0aW9uaW5nIGJlbG93XG4gICAgICAgIGlmICgodmVydCA9PSAnYWJvdmUnIHx8IHBvcy5ib3R0b20gKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSkgJiYgcG9zLnRvcCA+IG5vZGUub2Zmc2V0SGVpZ2h0KVxuICAgICAgICAgIHsgdG9wID0gcG9zLnRvcCAtIG5vZGUub2Zmc2V0SGVpZ2h0OyB9XG4gICAgICAgIGVsc2UgaWYgKHBvcy5ib3R0b20gKyBub2RlLm9mZnNldEhlaWdodCA8PSB2c3BhY2UpXG4gICAgICAgICAgeyB0b3AgPSBwb3MuYm90dG9tOyB9XG4gICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSlcbiAgICAgICAgICB7IGxlZnQgPSBoc3BhY2UgLSBub2RlLm9mZnNldFdpZHRoOyB9XG4gICAgICB9XG4gICAgICBub2RlLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSBcIlwiO1xuICAgICAgaWYgKGhvcml6ID09IFwicmlnaHRcIikge1xuICAgICAgICBsZWZ0ID0gZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUucmlnaHQgPSBcIjBweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGhvcml6ID09IFwibGVmdFwiKSB7IGxlZnQgPSAwOyB9XG4gICAgICAgIGVsc2UgaWYgKGhvcml6ID09IFwibWlkZGxlXCIpIHsgbGVmdCA9IChkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aCkgLyAyOyB9XG4gICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsKVxuICAgICAgICB7IHNjcm9sbEludG9WaWV3KHRoaXMsIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcCwgcmlnaHQ6IGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCBib3R0b206IHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0fSk7IH1cbiAgICB9LFxuXG4gICAgdHJpZ2dlck9uS2V5RG93bjogbWV0aG9kT3Aob25LZXlEb3duKSxcbiAgICB0cmlnZ2VyT25LZXlQcmVzczogbWV0aG9kT3Aob25LZXlQcmVzcyksXG4gICAgdHJpZ2dlck9uS2V5VXA6IG9uS2V5VXAsXG4gICAgdHJpZ2dlck9uTW91c2VEb3duOiBtZXRob2RPcChvbk1vdXNlRG93biksXG5cbiAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7XG4gICAgICBpZiAoY29tbWFuZHMuaGFzT3duUHJvcGVydHkoY21kKSlcbiAgICAgICAgeyByZXR1cm4gY29tbWFuZHNbY21kXS5jYWxsKG51bGwsIHRoaXMpIH1cbiAgICB9LFxuXG4gICAgdHJpZ2dlckVsZWN0cmljOiBtZXRob2RPcChmdW5jdGlvbih0ZXh0KSB7IHRyaWdnZXJFbGVjdHJpYyh0aGlzLCB0ZXh0KTsgfSksXG5cbiAgICBmaW5kUG9zSDogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0LCB2aXN1YWxseSkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHZhciBkaXIgPSAxO1xuICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3VudCA9IC1hbW91bnQ7IH1cbiAgICAgIHZhciBjdXIgPSBjbGlwUG9zKHRoaXMuZG9jLCBmcm9tKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgY3VyID0gZmluZFBvc0godGhpcyQxLmRvYywgY3VyLCBkaXIsIHVuaXQsIHZpc3VhbGx5KTtcbiAgICAgICAgaWYgKGN1ci5oaXRTaWRlKSB7IGJyZWFrIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJcbiAgICB9LFxuXG4gICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSQkMSkge1xuICAgICAgICBpZiAodGhpcyQxLmRpc3BsYXkuc2hpZnQgfHwgdGhpcyQxLmRvYy5leHRlbmQgfHwgcmFuZ2UkJDEuZW1wdHkoKSlcbiAgICAgICAgICB7IHJldHVybiBmaW5kUG9zSCh0aGlzJDEuZG9jLCByYW5nZSQkMS5oZWFkLCBkaXIsIHVuaXQsIHRoaXMkMS5vcHRpb25zLnJ0bE1vdmVWaXN1YWxseSkgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4gZGlyIDwgMCA/IHJhbmdlJCQxLmZyb20oKSA6IHJhbmdlJCQxLnRvKCkgfVxuICAgICAgfSwgc2VsX21vdmUpO1xuICAgIH0pLFxuXG4gICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7XG4gICAgICB2YXIgc2VsID0gdGhpcy5kb2Muc2VsLCBkb2MgPSB0aGlzLmRvYztcbiAgICAgIGlmIChzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSlcbiAgICAgICAgeyBkb2MucmVwbGFjZVNlbGVjdGlvbihcIlwiLCBudWxsLCBcIitkZWxldGVcIik7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBkZWxldGVOZWFyU2VsZWN0aW9uKHRoaXMsIGZ1bmN0aW9uIChyYW5nZSQkMSkge1xuICAgICAgICAgIHZhciBvdGhlciA9IGZpbmRQb3NIKGRvYywgcmFuZ2UkJDEuaGVhZCwgZGlyLCB1bml0LCBmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIGRpciA8IDAgPyB7ZnJvbTogb3RoZXIsIHRvOiByYW5nZSQkMS5oZWFkfSA6IHtmcm9tOiByYW5nZSQkMS5oZWFkLCB0bzogb3RoZXJ9XG4gICAgICAgIH0pOyB9XG4gICAgfSksXG5cbiAgICBmaW5kUG9zVjogZnVuY3Rpb24oZnJvbSwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgdmFyIGRpciA9IDEsIHggPSBnb2FsQ29sdW1uO1xuICAgICAgaWYgKGFtb3VudCA8IDApIHsgZGlyID0gLTE7IGFtb3VudCA9IC1hbW91bnQ7IH1cbiAgICAgIHZhciBjdXIgPSBjbGlwUG9zKHRoaXMuZG9jLCBmcm9tKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgdmFyIGNvb3JkcyA9IGN1cnNvckNvb3Jkcyh0aGlzJDEsIGN1ciwgXCJkaXZcIik7XG4gICAgICAgIGlmICh4ID09IG51bGwpIHsgeCA9IGNvb3Jkcy5sZWZ0OyB9XG4gICAgICAgIGVsc2UgeyBjb29yZHMubGVmdCA9IHg7IH1cbiAgICAgICAgY3VyID0gZmluZFBvc1YodGhpcyQxLCBjb29yZHMsIGRpciwgdW5pdCk7XG4gICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VyXG4gICAgfSxcblxuICAgIG1vdmVWOiBtZXRob2RPcChmdW5jdGlvbihkaXIsIHVuaXQpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107XG4gICAgICB2YXIgY29sbGFwc2UgPSAhdGhpcy5kaXNwbGF5LnNoaWZ0ICYmICFkb2MuZXh0ZW5kICYmIGRvYy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKTtcbiAgICAgIGRvYy5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlJCQxKSB7XG4gICAgICAgIGlmIChjb2xsYXBzZSlcbiAgICAgICAgICB7IHJldHVybiBkaXIgPCAwID8gcmFuZ2UkJDEuZnJvbSgpIDogcmFuZ2UkJDEudG8oKSB9XG4gICAgICAgIHZhciBoZWFkUG9zID0gY3Vyc29yQ29vcmRzKHRoaXMkMSwgcmFuZ2UkJDEuaGVhZCwgXCJkaXZcIik7XG4gICAgICAgIGlmIChyYW5nZSQkMS5nb2FsQ29sdW1uICE9IG51bGwpIHsgaGVhZFBvcy5sZWZ0ID0gcmFuZ2UkJDEuZ29hbENvbHVtbjsgfVxuICAgICAgICBnb2Fscy5wdXNoKGhlYWRQb3MubGVmdCk7XG4gICAgICAgIHZhciBwb3MgPSBmaW5kUG9zVih0aGlzJDEsIGhlYWRQb3MsIGRpciwgdW5pdCk7XG4gICAgICAgIGlmICh1bml0ID09IFwicGFnZVwiICYmIHJhbmdlJCQxID09IGRvYy5zZWwucHJpbWFyeSgpKVxuICAgICAgICAgIHsgYWRkVG9TY3JvbGxUb3AodGhpcyQxLCBjaGFyQ29vcmRzKHRoaXMkMSwgcG9zLCBcImRpdlwiKS50b3AgLSBoZWFkUG9zLnRvcCk7IH1cbiAgICAgICAgcmV0dXJuIHBvc1xuICAgICAgfSwgc2VsX21vdmUpO1xuICAgICAgaWYgKGdvYWxzLmxlbmd0aCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgICB7IGRvYy5zZWwucmFuZ2VzW2ldLmdvYWxDb2x1bW4gPSBnb2Fsc1tpXTsgfSB9XG4gICAgfSksXG5cbiAgICAvLyBGaW5kIHRoZSB3b3JkIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYXMgcmV0dXJuZWQgYnkgY29vcmRzQ2hhcikuXG4gICAgZmluZFdvcmRBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7XG4gICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDtcbiAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgIHZhciBoZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsIFwid29yZENoYXJzXCIpO1xuICAgICAgICBpZiAoKHBvcy5zdGlja3kgPT0gXCJiZWZvcmVcIiB8fCBlbmQgPT0gbGluZS5sZW5ndGgpICYmIHN0YXJ0KSB7IC0tc3RhcnQ7IH0gZWxzZSB7ICsrZW5kOyB9XG4gICAgICAgIHZhciBzdGFydENoYXIgPSBsaW5lLmNoYXJBdChzdGFydCk7XG4gICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpXG4gICAgICAgICAgPyBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIGlzV29yZENoYXIoY2gsIGhlbHBlcik7IH1cbiAgICAgICAgICA6IC9cXHMvLnRlc3Qoc3RhcnRDaGFyKSA/IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gL1xccy8udGVzdChjaCk7IH1cbiAgICAgICAgICA6IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gKCEvXFxzLy50ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCkpOyB9O1xuICAgICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGNoZWNrKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSB7IC0tc3RhcnQ7IH1cbiAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGNoZWNrKGxpbmUuY2hhckF0KGVuZCkpKSB7ICsrZW5kOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKFBvcyhwb3MubGluZSwgc3RhcnQpLCBQb3MocG9zLmxpbmUsIGVuZCkpXG4gICAgfSxcblxuICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID09IHRoaXMuc3RhdGUub3ZlcndyaXRlKSB7IHJldHVybiB9XG4gICAgICBpZiAodGhpcy5zdGF0ZS5vdmVyd3JpdGUgPSAhdGhpcy5zdGF0ZS5vdmVyd3JpdGUpXG4gICAgICAgIHsgYWRkQ2xhc3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgXCJDb2RlTWlycm9yLW92ZXJ3cml0ZVwiKTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJtQ2xhc3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgXCJDb2RlTWlycm9yLW92ZXJ3cml0ZVwiKTsgfVxuXG4gICAgICBzaWduYWwodGhpcywgXCJvdmVyd3JpdGVUb2dnbGVcIiwgdGhpcywgdGhpcy5zdGF0ZS5vdmVyd3JpdGUpO1xuICAgIH0sXG4gICAgaGFzRm9jdXM6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5kaXNwbGF5LmlucHV0LmdldEZpZWxkKCkgPT0gYWN0aXZlRWx0KCkgfSxcbiAgICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHsgcmV0dXJuICEhKHRoaXMub3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLmRvYy5jYW50RWRpdCkgfSxcblxuICAgIHNjcm9sbFRvOiBtZXRob2RPcChmdW5jdGlvbiAoeCwgeSkgeyBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCB4LCB5KTsgfSksXG4gICAgZ2V0U2Nyb2xsSW5mbzogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgICByZXR1cm4ge2xlZnQ6IHNjcm9sbGVyLnNjcm9sbExlZnQsIHRvcDogc2Nyb2xsZXIuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHNjcm9sbGVyLnNjcm9sbEhlaWdodCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJIZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJXaWR0aCxcbiAgICAgICAgICAgICAgY2xpZW50SGVpZ2h0OiBkaXNwbGF5SGVpZ2h0KHRoaXMpLCBjbGllbnRXaWR0aDogZGlzcGxheVdpZHRoKHRoaXMpfVxuICAgIH0sXG5cbiAgICBzY3JvbGxJbnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UkJDEsIG1hcmdpbikge1xuICAgICAgaWYgKHJhbmdlJCQxID09IG51bGwpIHtcbiAgICAgICAgcmFuZ2UkJDEgPSB7ZnJvbTogdGhpcy5kb2Muc2VsLnByaW1hcnkoKS5oZWFkLCB0bzogbnVsbH07XG4gICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSB0aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luOyB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByYW5nZSQkMSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJhbmdlJCQxID0ge2Zyb206IFBvcyhyYW5nZSQkMSwgMCksIHRvOiBudWxsfTtcbiAgICAgIH0gZWxzZSBpZiAocmFuZ2UkJDEuZnJvbSA9PSBudWxsKSB7XG4gICAgICAgIHJhbmdlJCQxID0ge2Zyb206IHJhbmdlJCQxLCB0bzogbnVsbH07XG4gICAgICB9XG4gICAgICBpZiAoIXJhbmdlJCQxLnRvKSB7IHJhbmdlJCQxLnRvID0gcmFuZ2UkJDEuZnJvbTsgfVxuICAgICAgcmFuZ2UkJDEubWFyZ2luID0gbWFyZ2luIHx8IDA7XG5cbiAgICAgIGlmIChyYW5nZSQkMS5mcm9tLmxpbmUgIT0gbnVsbCkge1xuICAgICAgICBzY3JvbGxUb1JhbmdlKHRoaXMsIHJhbmdlJCQxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjcm9sbFRvQ29vcmRzUmFuZ2UodGhpcywgcmFuZ2UkJDEuZnJvbSwgcmFuZ2UkJDEudG8sIHJhbmdlJCQxLm1hcmdpbik7XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBzZXRTaXplOiBtZXRob2RPcChmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgdmFyIGludGVycHJldCA9IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJudW1iZXJcIiB8fCAvXlxcZCskLy50ZXN0KFN0cmluZyh2YWwpKSA/IHZhbCArIFwicHhcIiA6IHZhbDsgfTtcbiAgICAgIGlmICh3aWR0aCAhPSBudWxsKSB7IHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLndpZHRoID0gaW50ZXJwcmV0KHdpZHRoKTsgfVxuICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7IHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpOyB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKHRoaXMpOyB9XG4gICAgICB2YXIgbGluZU5vJCQxID0gdGhpcy5kaXNwbGF5LnZpZXdGcm9tO1xuICAgICAgdGhpcy5kb2MuaXRlcihsaW5lTm8kJDEsIHRoaXMuZGlzcGxheS52aWV3VG8sIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyBpZiAobGluZS53aWRnZXRzW2ldLm5vSFNjcm9sbCkgeyByZWdMaW5lQ2hhbmdlKHRoaXMkMSwgbGluZU5vJCQxLCBcIndpZGdldFwiKTsgYnJlYWsgfSB9IH1cbiAgICAgICAgKytsaW5lTm8kJDE7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgc2lnbmFsKHRoaXMsIFwicmVmcmVzaFwiLCB0aGlzKTtcbiAgICB9KSxcblxuICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIHJ1bkluT3AodGhpcywgZil9LFxuICAgIHN0YXJ0T3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBzdGFydE9wZXJhdGlvbih0aGlzKX0sXG4gICAgZW5kT3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBlbmRPcGVyYXRpb24odGhpcyl9LFxuXG4gICAgcmVmcmVzaDogbWV0aG9kT3AoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7XG4gICAgICByZWdDaGFuZ2UodGhpcyk7XG4gICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpO1xuICAgICAgc2Nyb2xsVG9Db29yZHModGhpcywgdGhpcy5kb2Muc2Nyb2xsTGVmdCwgdGhpcy5kb2Muc2Nyb2xsVG9wKTtcbiAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKHRoaXMpO1xuICAgICAgaWYgKG9sZEhlaWdodCA9PSBudWxsIHx8IE1hdGguYWJzKG9sZEhlaWdodCAtIHRleHRIZWlnaHQodGhpcy5kaXNwbGF5KSkgPiAuNSlcbiAgICAgICAgeyBlc3RpbWF0ZUxpbmVIZWlnaHRzKHRoaXMpOyB9XG4gICAgICBzaWduYWwodGhpcywgXCJyZWZyZXNoXCIsIHRoaXMpO1xuICAgIH0pLFxuXG4gICAgc3dhcERvYzogbWV0aG9kT3AoZnVuY3Rpb24oZG9jKSB7XG4gICAgICB2YXIgb2xkID0gdGhpcy5kb2M7XG4gICAgICBvbGQuY20gPSBudWxsO1xuICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7XG4gICAgICBjbGVhckNhY2hlcyh0aGlzKTtcbiAgICAgIHRoaXMuZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgc2Nyb2xsVG9Db29yZHModGhpcywgZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApO1xuICAgICAgdGhpcy5jdXJPcC5mb3JjZVNjcm9sbCA9IHRydWU7XG4gICAgICBzaWduYWxMYXRlcih0aGlzLCBcInN3YXBEb2NcIiwgdGhpcywgb2xkKTtcbiAgICAgIHJldHVybiBvbGRcbiAgICB9KSxcblxuICAgIHBocmFzZTogZnVuY3Rpb24ocGhyYXNlVGV4dCkge1xuICAgICAgdmFyIHBocmFzZXMgPSB0aGlzLm9wdGlvbnMucGhyYXNlcztcbiAgICAgIHJldHVybiBwaHJhc2VzICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwaHJhc2VzLCBwaHJhc2VUZXh0KSA/IHBocmFzZXNbcGhyYXNlVGV4dF0gOiBwaHJhc2VUZXh0XG4gICAgfSxcblxuICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpfSxcbiAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LndyYXBwZXJ9LFxuICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5LnNjcm9sbGVyfSxcbiAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc31cbiAgfTtcbiAgZXZlbnRNaXhpbihDb2RlTWlycm9yKTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIWhlbHBlcnMuaGFzT3duUHJvcGVydHkodHlwZSkpIHsgaGVscGVyc1t0eXBlXSA9IENvZGVNaXJyb3JbdHlwZV0gPSB7X2dsb2JhbDogW119OyB9XG4gICAgaGVscGVyc1t0eXBlXVtuYW1lXSA9IHZhbHVlO1xuICB9O1xuICBDb2RlTWlycm9yLnJlZ2lzdGVyR2xvYmFsSGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgcHJlZGljYXRlLCB2YWx1ZSkge1xuICAgIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIodHlwZSwgbmFtZSwgdmFsdWUpO1xuICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNoKHtwcmVkOiBwcmVkaWNhdGUsIHZhbDogdmFsdWV9KTtcbiAgfTtcbn07XG5cbi8vIFVzZWQgZm9yIGhvcml6b250YWwgcmVsYXRpdmUgbW90aW9uLiBEaXIgaXMgLTEgb3IgMSAobGVmdCBvclxuLy8gcmlnaHQpLCB1bml0IGNhbiBiZSBcImNoYXJcIiwgXCJjb2x1bW5cIiAobGlrZSBjaGFyLCBidXQgZG9lc24ndFxuLy8gY3Jvc3MgbGluZSBib3VuZGFyaWVzKSwgXCJ3b3JkXCIgKGFjcm9zcyBuZXh0IHdvcmQpLCBvciBcImdyb3VwXCIgKHRvXG4vLyB0aGUgc3RhcnQgb2YgbmV4dCBncm91cCBvZiB3b3JkIG9yIG5vbi13b3JkLW5vbi13aGl0ZXNwYWNlXG4vLyBjaGFycykuIFRoZSB2aXN1YWxseSBwYXJhbSBjb250cm9scyB3aGV0aGVyLCBpbiByaWdodC10by1sZWZ0XG4vLyB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0byBtb3ZlIHRvd2FyZHMgdGhlIG5leHQgaW5kZXggaW4gdGhlXG4vLyBzdHJpbmcsIG9yIHRvd2FyZHMgdGhlIGNoYXJhY3RlciB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnJlbnRcbi8vIHBvc2l0aW9uLiBUaGUgcmVzdWx0aW5nIHBvc2l0aW9uIHdpbGwgaGF2ZSBhIGhpdFNpZGU9dHJ1ZVxuLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbmZ1bmN0aW9uIGZpbmRQb3NIKGRvYywgcG9zLCBkaXIsIHVuaXQsIHZpc3VhbGx5KSB7XG4gIHZhciBvbGRQb3MgPSBwb3M7XG4gIHZhciBvcmlnRGlyID0gZGlyO1xuICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBwb3MubGluZSk7XG4gIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHtcbiAgICB2YXIgbCA9IHBvcy5saW5lICsgZGlyO1xuICAgIGlmIChsIDwgZG9jLmZpcnN0IHx8IGwgPj0gZG9jLmZpcnN0ICsgZG9jLnNpemUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBwb3MgPSBuZXcgUG9zKGwsIHBvcy5jaCwgcG9zLnN0aWNreSk7XG4gICAgcmV0dXJuIGxpbmVPYmogPSBnZXRMaW5lKGRvYywgbClcbiAgfVxuICBmdW5jdGlvbiBtb3ZlT25jZShib3VuZFRvTGluZSkge1xuICAgIHZhciBuZXh0O1xuICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgbmV4dCA9IG1vdmVWaXN1YWxseShkb2MuY20sIGxpbmVPYmosIHBvcywgZGlyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCA9IG1vdmVMb2dpY2FsbHkobGluZU9iaiwgcG9zLCBkaXIpO1xuICAgIH1cbiAgICBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZpbmROZXh0TGluZSgpKVxuICAgICAgICB7IHBvcyA9IGVuZE9mTGluZSh2aXN1YWxseSwgZG9jLmNtLCBsaW5lT2JqLCBwb3MubGluZSwgZGlyKTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcyA9IG5leHQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodW5pdCA9PSBcImNoYXJcIikge1xuICAgIG1vdmVPbmNlKCk7XG4gIH0gZWxzZSBpZiAodW5pdCA9PSBcImNvbHVtblwiKSB7XG4gICAgbW92ZU9uY2UodHJ1ZSk7XG4gIH0gZWxzZSBpZiAodW5pdCA9PSBcIndvcmRcIiB8fCB1bml0ID09IFwiZ3JvdXBcIikge1xuICAgIHZhciBzYXdUeXBlID0gbnVsbCwgZ3JvdXAgPSB1bml0ID09IFwiZ3JvdXBcIjtcbiAgICB2YXIgaGVscGVyID0gZG9jLmNtICYmIGRvYy5jbS5nZXRIZWxwZXIocG9zLCBcIndvcmRDaGFyc1wiKTtcbiAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgICBpZiAoZGlyIDwgMCAmJiAhbW92ZU9uY2UoIWZpcnN0KSkgeyBicmVhayB9XG4gICAgICB2YXIgY3VyID0gbGluZU9iai50ZXh0LmNoYXJBdChwb3MuY2gpIHx8IFwiXFxuXCI7XG4gICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gXCJ3XCJcbiAgICAgICAgOiBncm91cCAmJiBjdXIgPT0gXCJcXG5cIiA/IFwiblwiXG4gICAgICAgIDogIWdyb3VwIHx8IC9cXHMvLnRlc3QoY3VyKSA/IG51bGxcbiAgICAgICAgOiBcInBcIjtcbiAgICAgIGlmIChncm91cCAmJiAhZmlyc3QgJiYgIXR5cGUpIHsgdHlwZSA9IFwic1wiOyB9XG4gICAgICBpZiAoc2F3VHlwZSAmJiBzYXdUeXBlICE9IHR5cGUpIHtcbiAgICAgICAgaWYgKGRpciA8IDApIHtkaXIgPSAxOyBtb3ZlT25jZSgpOyBwb3Muc3RpY2t5ID0gXCJhZnRlclwiO31cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUpIHsgc2F3VHlwZSA9IHR5cGU7IH1cbiAgICAgIGlmIChkaXIgPiAwICYmICFtb3ZlT25jZSghZmlyc3QpKSB7IGJyZWFrIH1cbiAgICB9XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHNraXBBdG9taWMoZG9jLCBwb3MsIG9sZFBvcywgb3JpZ0RpciwgdHJ1ZSk7XG4gIGlmIChlcXVhbEN1cnNvclBvcyhvbGRQb3MsIHJlc3VsdCkpIHsgcmVzdWx0LmhpdFNpZGUgPSB0cnVlOyB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gRm9yIHJlbGF0aXZlIHZlcnRpY2FsIG1vdmVtZW50LiBEaXIgbWF5IGJlIC0xIG9yIDEuIFVuaXQgY2FuIGJlXG4vLyBcInBhZ2VcIiBvciBcImxpbmVcIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWVcbi8vIHByb3BlcnR5IGlmIGl0IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG5mdW5jdGlvbiBmaW5kUG9zVihjbSwgcG9zLCBkaXIsIHVuaXQpIHtcbiAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5O1xuICBpZiAodW5pdCA9PSBcInBhZ2VcIikge1xuICAgIHZhciBwYWdlU2l6ZSA9IE1hdGgubWluKGNtLmRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcbiAgICB2YXIgbW92ZUFtb3VudCA9IE1hdGgubWF4KHBhZ2VTaXplIC0gLjUgKiB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCAzKTtcbiAgICB5ID0gKGRpciA+IDAgPyBwb3MuYm90dG9tIDogcG9zLnRvcCkgKyBkaXIgKiBtb3ZlQW1vdW50O1xuXG4gIH0gZWxzZSBpZiAodW5pdCA9PSBcImxpbmVcIikge1xuICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMgOiBwb3MudG9wIC0gMztcbiAgfVxuICB2YXIgdGFyZ2V0O1xuICBmb3IgKDs7KSB7XG4gICAgdGFyZ2V0ID0gY29vcmRzQ2hhcihjbSwgeCwgeSk7XG4gICAgaWYgKCF0YXJnZXQub3V0c2lkZSkgeyBicmVhayB9XG4gICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhayB9XG4gICAgeSArPSBkaXIgKiA1O1xuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cblxuLy8gQ09OVEVOVEVESVRBQkxFIElOUFVUIFNUWUxFXG5cbnZhciBDb250ZW50RWRpdGFibGVJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gIHRoaXMuY20gPSBjbTtcbiAgdGhpcy5sYXN0QW5jaG9yTm9kZSA9IHRoaXMubGFzdEFuY2hvck9mZnNldCA9IHRoaXMubGFzdEZvY3VzTm9kZSA9IHRoaXMubGFzdEZvY3VzT2Zmc2V0ID0gbnVsbDtcbiAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgdGhpcy5jb21wb3NpbmcgPSBudWxsO1xuICB0aGlzLmdyYWNlUGVyaW9kID0gZmFsc2U7XG4gIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsO1xufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoZGlzcGxheSkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gaW5wdXQuY207XG4gIHZhciBkaXYgPSBpbnB1dC5kaXYgPSBkaXNwbGF5LmxpbmVEaXY7XG4gIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2LCBjbS5vcHRpb25zLnNwZWxsY2hlY2spO1xuXG4gIG9uKGRpdiwgXCJwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20pKSB7IHJldHVybiB9XG4gICAgLy8gSUUgZG9lc24ndCBmaXJlIGlucHV0IGV2ZW50cywgc28gd2Ugc2NoZWR1bGUgYSByZWFkIGZvciB0aGUgcGFzdGVkIGNvbnRlbnQgaW4gdGhpcyB3YXlcbiAgICBpZiAoaWVfdmVyc2lvbiA8PSAxMSkgeyBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLnVwZGF0ZUZyb21ET00oKTsgfSksIDIwKTsgfVxuICB9KTtcblxuICBvbihkaXYsIFwiY29tcG9zaXRpb25zdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgIHRoaXMkMS5jb21wb3NpbmcgPSB7ZGF0YTogZS5kYXRhLCBkb25lOiBmYWxzZX07XG4gIH0pO1xuICBvbihkaXYsIFwiY29tcG9zaXRpb251cGRhdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIXRoaXMkMS5jb21wb3NpbmcpIHsgdGhpcyQxLmNvbXBvc2luZyA9IHtkYXRhOiBlLmRhdGEsIGRvbmU6IGZhbHNlfTsgfVxuICB9KTtcbiAgb24oZGl2LCBcImNvbXBvc2l0aW9uZW5kXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHRoaXMkMS5jb21wb3NpbmcpIHtcbiAgICAgIGlmIChlLmRhdGEgIT0gdGhpcyQxLmNvbXBvc2luZy5kYXRhKSB7IHRoaXMkMS5yZWFkRnJvbURPTVNvb24oKTsgfVxuICAgICAgdGhpcyQxLmNvbXBvc2luZy5kb25lID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIG9uKGRpdiwgXCJ0b3VjaHN0YXJ0XCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0LmZvcmNlQ29tcG9zaXRpb25FbmQoKTsgfSk7XG5cbiAgb24oZGl2LCBcImlucHV0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS5jb21wb3NpbmcpIHsgdGhpcyQxLnJlYWRGcm9tRE9NU29vbigpOyB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIG9uQ29weUN1dChlKSB7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogZmFsc2UsIHRleHQ6IGNtLmdldFNlbGVjdGlvbnMoKX0pO1xuICAgICAgaWYgKGUudHlwZSA9PSBcImN1dFwiKSB7IGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7IH1cbiAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogdHJ1ZSwgdGV4dDogcmFuZ2VzLnRleHR9KTtcbiAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikge1xuICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMocmFuZ2VzLnJhbmdlcywgMCwgc2VsX2RvbnRTY3JvbGwpO1xuICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcIiwgbnVsbCwgXCJjdXRcIik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XG4gICAgICBlLmNsaXBib2FyZERhdGEuY2xlYXJEYXRhKCk7XG4gICAgICB2YXIgY29udGVudCA9IGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpO1xuICAgICAgLy8gaU9TIGV4cG9zZXMgdGhlIGNsaXBib2FyZCBBUEksIGJ1dCBzZWVtcyB0byBkaXNjYXJkIGNvbnRlbnQgaW5zZXJ0ZWQgaW50byBpdFxuICAgICAgZS5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJUZXh0XCIsIGNvbnRlbnQpO1xuICAgICAgaWYgKGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwiVGV4dFwiKSA9PSBjb250ZW50KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIC8vIE9sZC1mYXNoaW9uZWQgYnJpZWZseS1mb2N1cy1hLXRleHRhcmVhIGhhY2tcbiAgICB2YXIga2x1ZGdlID0gaGlkZGVuVGV4dGFyZWEoKSwgdGUgPSBrbHVkZ2UuZmlyc3RDaGlsZDtcbiAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTtcbiAgICB0ZS52YWx1ZSA9IGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpO1xuICAgIHZhciBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgc2VsZWN0SW5wdXQodGUpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoa2x1ZGdlKTtcbiAgICAgIGhhZEZvY3VzLmZvY3VzKCk7XG4gICAgICBpZiAoaGFkRm9jdXMgPT0gZGl2KSB7IGlucHV0LnNob3dQcmltYXJ5U2VsZWN0aW9uKCk7IH1cbiAgICB9LCA1MCk7XG4gIH1cbiAgb24oZGl2LCBcImNvcHlcIiwgb25Db3B5Q3V0KTtcbiAgb24oZGl2LCBcImN1dFwiLCBvbkNvcHlDdXQpO1xufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKHRoaXMuY20sIGZhbHNlKTtcbiAgcmVzdWx0LmZvY3VzID0gdGhpcy5jbS5zdGF0ZS5mb2N1c2VkO1xuICByZXR1cm4gcmVzdWx0XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChpbmZvLCB0YWtlRm9jdXMpIHtcbiAgaWYgKCFpbmZvIHx8ICF0aGlzLmNtLmRpc3BsYXkudmlldy5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgaWYgKGluZm8uZm9jdXMgfHwgdGFrZUZvY3VzKSB7IHRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICB0aGlzLnNob3dNdWx0aXBsZVNlbGVjdGlvbnMoaW5mbyk7XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5jbS5kaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudC5nZXRTZWxlY3Rpb24oKVxufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNob3dQcmltYXJ5U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKSwgY20gPSB0aGlzLmNtLCBwcmltID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7XG4gIHZhciBmcm9tID0gcHJpbS5mcm9tKCksIHRvID0gcHJpbS50bygpO1xuXG4gIGlmIChjbS5kaXNwbGF5LnZpZXdUbyA9PSBjbS5kaXNwbGF5LnZpZXdGcm9tIHx8IGZyb20ubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCB0by5saW5lIDwgY20uZGlzcGxheS52aWV3RnJvbSkge1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXJBbmNob3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpO1xuICB2YXIgY3VyRm9jdXMgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgaWYgKGN1ckFuY2hvciAmJiAhY3VyQW5jaG9yLmJhZCAmJiBjdXJGb2N1cyAmJiAhY3VyRm9jdXMuYmFkICYmXG4gICAgICBjbXAobWluUG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCBmcm9tKSA9PSAwICYmXG4gICAgICBjbXAobWF4UG9zKGN1ckFuY2hvciwgY3VyRm9jdXMpLCB0bykgPT0gMClcbiAgICB7IHJldHVybiB9XG5cbiAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gIHZhciBzdGFydCA9IChmcm9tLmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiBwb3NUb0RPTShjbSwgZnJvbSkpIHx8XG4gICAgICB7bm9kZTogdmlld1swXS5tZWFzdXJlLm1hcFsyXSwgb2Zmc2V0OiAwfTtcbiAgdmFyIGVuZCA9IHRvLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdUbyAmJiBwb3NUb0RPTShjbSwgdG8pO1xuICBpZiAoIWVuZCkge1xuICAgIHZhciBtZWFzdXJlID0gdmlld1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7XG4gICAgdmFyIG1hcCQkMSA9IG1lYXN1cmUubWFwcyA/IG1lYXN1cmUubWFwc1ttZWFzdXJlLm1hcHMubGVuZ3RoIC0gMV0gOiBtZWFzdXJlLm1hcDtcbiAgICBlbmQgPSB7bm9kZTogbWFwJCQxW21hcCQkMS5sZW5ndGggLSAxXSwgb2Zmc2V0OiBtYXAkJDFbbWFwJCQxLmxlbmd0aCAtIDJdIC0gbWFwJCQxW21hcCQkMS5sZW5ndGggLSAzXX07XG4gIH1cblxuICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgb2xkID0gc2VsLnJhbmdlQ291bnQgJiYgc2VsLmdldFJhbmdlQXQoMCksIHJuZztcbiAgdHJ5IHsgcm5nID0gcmFuZ2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0LCBlbmQub2Zmc2V0LCBlbmQubm9kZSk7IH1cbiAgY2F0Y2goZSkge30gLy8gT3VyIG1vZGVsIG9mIHRoZSBET00gbWlnaHQgYmUgb3V0ZGF0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIHJhbmdlIHdlIHRyeSB0byBzZXQgY2FuIGJlIGltcG9zc2libGVcbiAgaWYgKHJuZykge1xuICAgIGlmICghZ2Vja28gJiYgY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgc2VsLmNvbGxhcHNlKHN0YXJ0Lm5vZGUsIHN0YXJ0Lm9mZnNldCk7XG4gICAgICBpZiAoIXJuZy5jb2xsYXBzZWQpIHtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWwuYWRkUmFuZ2Uocm5nKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsLmFkZFJhbmdlKHJuZyk7XG4gICAgfVxuICAgIGlmIChvbGQgJiYgc2VsLmFuY2hvck5vZGUgPT0gbnVsbCkgeyBzZWwuYWRkUmFuZ2Uob2xkKTsgfVxuICAgIGVsc2UgaWYgKGdlY2tvKSB7IHRoaXMuc3RhcnRHcmFjZVBlcmlvZCgpOyB9XG4gIH1cbiAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO1xufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2QgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgY2xlYXJUaW1lb3V0KHRoaXMuZ3JhY2VQZXJpb2QpO1xuICB0aGlzLmdyYWNlUGVyaW9kID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLmdyYWNlUGVyaW9kID0gZmFsc2U7XG4gICAgaWYgKHRoaXMkMS5zZWxlY3Rpb25DaGFuZ2VkKCkpXG4gICAgICB7IHRoaXMkMS5jbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KTsgfVxuICB9LCAyMCk7XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5jdXJzb3JEaXYsIGluZm8uY3Vyc29ycyk7XG4gIHJlbW92ZUNoaWxkcmVuQW5kQWRkKHRoaXMuY20uZGlzcGxheS5zZWxlY3Rpb25EaXYsIGluZm8uc2VsZWN0aW9uKTtcbn07XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZW1lbWJlclNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gIHRoaXMubGFzdEFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTsgdGhpcy5sYXN0QW5jaG9yT2Zmc2V0ID0gc2VsLmFuY2hvck9mZnNldDtcbiAgdGhpcy5sYXN0Rm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTsgdGhpcy5sYXN0Rm9jdXNPZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQ7XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICBpZiAoIXNlbC5yYW5nZUNvdW50KSB7IHJldHVybiBmYWxzZSB9XG4gIHZhciBub2RlID0gc2VsLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gIHJldHVybiBjb250YWlucyh0aGlzLmRpdiwgbm9kZSlcbn07XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuY20ub3B0aW9ucy5yZWFkT25seSAhPSBcIm5vY3Vyc29yXCIpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5FZGl0b3IoKSlcbiAgICAgIHsgdGhpcy5zaG93U2VsZWN0aW9uKHRoaXMucHJlcGFyZVNlbGVjdGlvbigpLCB0cnVlKTsgfVxuICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gIH1cbn07XG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy5kaXYuYmx1cigpOyB9O1xuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kaXYgfTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnN1cHBvcnRzVG91Y2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlIH07XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW5wdXQgPSB0aGlzO1xuICBpZiAodGhpcy5zZWxlY3Rpb25JbkVkaXRvcigpKVxuICAgIHsgdGhpcy5wb2xsU2VsZWN0aW9uKCk7IH1cbiAgZWxzZVxuICAgIHsgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnB1dC5jbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfSk7IH1cblxuICBmdW5jdGlvbiBwb2xsKCkge1xuICAgIGlmIChpbnB1dC5jbS5zdGF0ZS5mb2N1c2VkKSB7XG4gICAgICBpbnB1dC5wb2xsU2VsZWN0aW9uKCk7XG4gICAgICBpbnB1dC5wb2xsaW5nLnNldChpbnB1dC5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG4gICAgfVxuICB9XG4gIHRoaXMucG9sbGluZy5zZXQodGhpcy5jbS5vcHRpb25zLnBvbGxJbnRlcnZhbCwgcG9sbCk7XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gIHJldHVybiBzZWwuYW5jaG9yTm9kZSAhPSB0aGlzLmxhc3RBbmNob3JOb2RlIHx8IHNlbC5hbmNob3JPZmZzZXQgIT0gdGhpcy5sYXN0QW5jaG9yT2Zmc2V0IHx8XG4gICAgc2VsLmZvY3VzTm9kZSAhPSB0aGlzLmxhc3RGb2N1c05vZGUgfHwgc2VsLmZvY3VzT2Zmc2V0ICE9IHRoaXMubGFzdEZvY3VzT2Zmc2V0XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCB8fCB0aGlzLmdyYWNlUGVyaW9kIHx8ICF0aGlzLnNlbGVjdGlvbkNoYW5nZWQoKSkgeyByZXR1cm4gfVxuICB2YXIgc2VsID0gdGhpcy5nZXRTZWxlY3Rpb24oKSwgY20gPSB0aGlzLmNtO1xuICAvLyBPbiBBbmRyb2lkIENocm9tZSAodmVyc2lvbiA1NiwgYXQgbGVhc3QpLCBiYWNrc3BhY2luZyBpbnRvIGFuXG4gIC8vIHVuZWRpdGFibGUgYmxvY2sgZWxlbWVudCB3aWxsIHB1dCB0aGUgY3Vyc29yIGluIHRoYXQgZWxlbWVudCxcbiAgLy8gYW5kIHRoZW4sIGJlY2F1c2UgaXQncyBub3QgZWRpdGFibGUsIGhpZGUgdGhlIHZpcnR1YWwga2V5Ym9hcmQuXG4gIC8vIEJlY2F1c2UgQW5kcm9pZCBkb2Vzbid0IGFsbG93IHVzIHRvIGFjdHVhbGx5IGRldGVjdCBiYWNrc3BhY2VcbiAgLy8gcHJlc3NlcyBpbiBhIHNhbmUgd2F5LCB0aGlzIGNvZGUgY2hlY2tzIGZvciB3aGVuIHRoYXQgaGFwcGVuc1xuICAvLyBhbmQgc2ltdWxhdGVzIGEgYmFja3NwYWNlIHByZXNzIGluIHRoaXMgY2FzZS5cbiAgaWYgKGFuZHJvaWQgJiYgY2hyb21lICYmIHRoaXMuY20ub3B0aW9ucy5ndXR0ZXJzLmxlbmd0aCAmJiBpc0luR3V0dGVyKHNlbC5hbmNob3JOb2RlKSkge1xuICAgIHRoaXMuY20udHJpZ2dlck9uS2V5RG93bih7dHlwZTogXCJrZXlkb3duXCIsIGtleUNvZGU6IDgsIHByZXZlbnREZWZhdWx0OiBNYXRoLmFic30pO1xuICAgIHRoaXMuYmx1cigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO1xuICB2YXIgYW5jaG9yID0gZG9tVG9Qb3MoY20sIHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTtcbiAgdmFyIGhlYWQgPSBkb21Ub1BvcyhjbSwgc2VsLmZvY3VzTm9kZSwgc2VsLmZvY3VzT2Zmc2V0KTtcbiAgaWYgKGFuY2hvciAmJiBoZWFkKSB7IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICBzZXRTZWxlY3Rpb24oY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgc2VsX2RvbnRTY3JvbGwpO1xuICAgIGlmIChhbmNob3IuYmFkIHx8IGhlYWQuYmFkKSB7IGNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9XG4gIH0pOyB9XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCk7XG4gICAgdGhpcy5yZWFkRE9NVGltZW91dCA9IG51bGw7XG4gIH1cblxuICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2VsID0gY20uZG9jLnNlbC5wcmltYXJ5KCk7XG4gIHZhciBmcm9tID0gc2VsLmZyb20oKSwgdG8gPSBzZWwudG8oKTtcbiAgaWYgKGZyb20uY2ggPT0gMCAmJiBmcm9tLmxpbmUgPiBjbS5maXJzdExpbmUoKSlcbiAgICB7IGZyb20gPSBQb3MoZnJvbS5saW5lIC0gMSwgZ2V0TGluZShjbS5kb2MsIGZyb20ubGluZSAtIDEpLmxlbmd0aCk7IH1cbiAgaWYgKHRvLmNoID09IGdldExpbmUoY20uZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCAmJiB0by5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICB7IHRvID0gUG9zKHRvLmxpbmUgKyAxLCAwKTsgfVxuICBpZiAoZnJvbS5saW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCB0by5saW5lID4gZGlzcGxheS52aWV3VG8gLSAxKSB7IHJldHVybiBmYWxzZSB9XG5cbiAgdmFyIGZyb21JbmRleCwgZnJvbUxpbmUsIGZyb21Ob2RlO1xuICBpZiAoZnJvbS5saW5lID09IGRpc3BsYXkudmlld0Zyb20gfHwgKGZyb21JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIGZyb20ubGluZSkpID09IDApIHtcbiAgICBmcm9tTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbMF0ubGluZSk7XG4gICAgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbMF0ubm9kZTtcbiAgfSBlbHNlIHtcbiAgICBmcm9tTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbZnJvbUluZGV4XS5saW5lKTtcbiAgICBmcm9tTm9kZSA9IGRpc3BsYXkudmlld1tmcm9tSW5kZXggLSAxXS5ub2RlLm5leHRTaWJsaW5nO1xuICB9XG4gIHZhciB0b0luZGV4ID0gZmluZFZpZXdJbmRleChjbSwgdG8ubGluZSk7XG4gIHZhciB0b0xpbmUsIHRvTm9kZTtcbiAgaWYgKHRvSW5kZXggPT0gZGlzcGxheS52aWV3Lmxlbmd0aCAtIDEpIHtcbiAgICB0b0xpbmUgPSBkaXNwbGF5LnZpZXdUbyAtIDE7XG4gICAgdG9Ob2RlID0gZGlzcGxheS5saW5lRGl2Lmxhc3RDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICB0b0xpbmUgPSBsaW5lTm8oZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5saW5lKSAtIDE7XG4gICAgdG9Ob2RlID0gZGlzcGxheS52aWV3W3RvSW5kZXggKyAxXS5ub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIGlmICghZnJvbU5vZGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgdmFyIG5ld1RleHQgPSBjbS5kb2Muc3BsaXRMaW5lcyhkb21UZXh0QmV0d2VlbihjbSwgZnJvbU5vZGUsIHRvTm9kZSwgZnJvbUxpbmUsIHRvTGluZSkpO1xuICB2YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20uZG9jLCBQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5lKS50ZXh0Lmxlbmd0aCkpO1xuICB3aGlsZSAobmV3VGV4dC5sZW5ndGggPiAxICYmIG9sZFRleHQubGVuZ3RoID4gMSkge1xuICAgIGlmIChsc3QobmV3VGV4dCkgPT0gbHN0KG9sZFRleHQpKSB7IG5ld1RleHQucG9wKCk7IG9sZFRleHQucG9wKCk7IHRvTGluZS0tOyB9XG4gICAgZWxzZSBpZiAobmV3VGV4dFswXSA9PSBvbGRUZXh0WzBdKSB7IG5ld1RleHQuc2hpZnQoKTsgb2xkVGV4dC5zaGlmdCgpOyBmcm9tTGluZSsrOyB9XG4gICAgZWxzZSB7IGJyZWFrIH1cbiAgfVxuXG4gIHZhciBjdXRGcm9udCA9IDAsIGN1dEVuZCA9IDA7XG4gIHZhciBuZXdUb3AgPSBuZXdUZXh0WzBdLCBvbGRUb3AgPSBvbGRUZXh0WzBdLCBtYXhDdXRGcm9udCA9IE1hdGgubWluKG5ld1RvcC5sZW5ndGgsIG9sZFRvcC5sZW5ndGgpO1xuICB3aGlsZSAoY3V0RnJvbnQgPCBtYXhDdXRGcm9udCAmJiBuZXdUb3AuY2hhckNvZGVBdChjdXRGcm9udCkgPT0gb2xkVG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpKVxuICAgIHsgKytjdXRGcm9udDsgfVxuICB2YXIgbmV3Qm90ID0gbHN0KG5ld1RleHQpLCBvbGRCb3QgPSBsc3Qob2xkVGV4dCk7XG4gIHZhciBtYXhDdXRFbmQgPSBNYXRoLm1pbihuZXdCb3QubGVuZ3RoIC0gKG5ld1RleHQubGVuZ3RoID09IDEgPyBjdXRGcm9udCA6IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQm90Lmxlbmd0aCAtIChvbGRUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAwKSk7XG4gIHdoaWxlIChjdXRFbmQgPCBtYXhDdXRFbmQgJiZcbiAgICAgICAgIG5ld0JvdC5jaGFyQ29kZUF0KG5ld0JvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSA9PSBvbGRCb3QuY2hhckNvZGVBdChvbGRCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkpXG4gICAgeyArK2N1dEVuZDsgfVxuICAvLyBUcnkgdG8gbW92ZSBzdGFydCBvZiBjaGFuZ2UgdG8gc3RhcnQgb2Ygc2VsZWN0aW9uIGlmIGFtYmlndW91c1xuICBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSAmJiBvbGRUZXh0Lmxlbmd0aCA9PSAxICYmIGZyb21MaW5lID09IGZyb20ubGluZSkge1xuICAgIHdoaWxlIChjdXRGcm9udCAmJiBjdXRGcm9udCA+IGZyb20uY2ggJiZcbiAgICAgICAgICAgbmV3Qm90LmNoYXJDb2RlQXQobmV3Qm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpID09IG9sZEJvdC5jaGFyQ29kZUF0KG9sZEJvdC5sZW5ndGggLSBjdXRFbmQgLSAxKSkge1xuICAgICAgY3V0RnJvbnQtLTtcbiAgICAgIGN1dEVuZCsrO1xuICAgIH1cbiAgfVxuXG4gIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9IG5ld0JvdC5zbGljZSgwLCBuZXdCb3QubGVuZ3RoIC0gY3V0RW5kKS5yZXBsYWNlKC9eXFx1MjAwYisvLCBcIlwiKTtcbiAgbmV3VGV4dFswXSA9IG5ld1RleHRbMF0uc2xpY2UoY3V0RnJvbnQpLnJlcGxhY2UoL1xcdTIwMGIrJC8sIFwiXCIpO1xuXG4gIHZhciBjaEZyb20gPSBQb3MoZnJvbUxpbmUsIGN1dEZyb250KTtcbiAgdmFyIGNoVG8gPSBQb3ModG9MaW5lLCBvbGRUZXh0Lmxlbmd0aCA/IGxzdChvbGRUZXh0KS5sZW5ndGggLSBjdXRFbmQgOiAwKTtcbiAgaWYgKG5ld1RleHQubGVuZ3RoID4gMSB8fCBuZXdUZXh0WzBdIHx8IGNtcChjaEZyb20sIGNoVG8pKSB7XG4gICAgcmVwbGFjZVJhbmdlKGNtLmRvYywgbmV3VGV4dCwgY2hGcm9tLCBjaFRvLCBcIitpbnB1dFwiKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZW5zdXJlUG9sbGVkID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZvcmNlQ29tcG9zaXRpb25FbmQoKTtcbn07XG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpO1xufTtcbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb3JjZUNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gIGNsZWFyVGltZW91dCh0aGlzLnJlYWRET01UaW1lb3V0KTtcbiAgdGhpcy5jb21wb3NpbmcgPSBudWxsO1xuICB0aGlzLnVwZGF0ZUZyb21ET00oKTtcbiAgdGhpcy5kaXYuYmx1cigpO1xuICB0aGlzLmRpdi5mb2N1cygpO1xufTtcbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZWFkRnJvbURPTVNvb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHRoaXMucmVhZERPTVRpbWVvdXQgIT0gbnVsbCkgeyByZXR1cm4gfVxuICB0aGlzLnJlYWRET01UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLnJlYWRET01UaW1lb3V0ID0gbnVsbDtcbiAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgaWYgKHRoaXMkMS5jb21wb3NpbmcuZG9uZSkgeyB0aGlzJDEuY29tcG9zaW5nID0gbnVsbDsgfVxuICAgICAgZWxzZSB7IHJldHVybiB9XG4gICAgfVxuICAgIHRoaXMkMS51cGRhdGVGcm9tRE9NKCk7XG4gIH0sIDgwKTtcbn07XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS51cGRhdGVGcm9tRE9NID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICh0aGlzLmNtLmlzUmVhZE9ubHkoKSB8fCAhdGhpcy5wb2xsQ29udGVudCgpKVxuICAgIHsgcnVuSW5PcCh0aGlzLmNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiByZWdDaGFuZ2UodGhpcyQxLmNtKTsgfSk7IH1cbn07XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgbm9kZS5jb250ZW50RWRpdGFibGUgPSBcImZhbHNlXCI7XG59O1xuXG5Db250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUub25LZXlQcmVzcyA9IGZ1bmN0aW9uIChlKSB7XG4gIGlmIChlLmNoYXJDb2RlID09IDAgfHwgdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoIXRoaXMuY20uaXNSZWFkT25seSgpKVxuICAgIHsgb3BlcmF0aW9uKHRoaXMuY20sIGFwcGx5VGV4dElucHV0KSh0aGlzLmNtLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUgPT0gbnVsbCA/IGUua2V5Q29kZSA6IGUuY2hhckNvZGUpLCAwKTsgfVxufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgdGhpcy5kaXYuY29udGVudEVkaXRhYmxlID0gU3RyaW5nKHZhbCAhPSBcIm5vY3Vyc29yXCIpO1xufTtcblxuQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoKSB7fTtcbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5yZXNldFBvc2l0aW9uID0gZnVuY3Rpb24gKCkge307XG5cbkNvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUgPSB0cnVlO1xuXG5mdW5jdGlvbiBwb3NUb0RPTShjbSwgcG9zKSB7XG4gIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBwb3MubGluZSk7XG4gIGlmICghdmlldyB8fCB2aWV3LmhpZGRlbikgeyByZXR1cm4gbnVsbCB9XG4gIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgdmFyIGluZm8gPSBtYXBGcm9tTGluZVZpZXcodmlldywgbGluZSwgcG9zLmxpbmUpO1xuXG4gIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pLCBzaWRlID0gXCJsZWZ0XCI7XG4gIGlmIChvcmRlcikge1xuICAgIHZhciBwYXJ0UG9zID0gZ2V0QmlkaVBhcnRBdChvcmRlciwgcG9zLmNoKTtcbiAgICBzaWRlID0gcGFydFBvcyAlIDIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbm9kZUFuZE9mZnNldEluTGluZU1hcChpbmZvLm1hcCwgcG9zLmNoLCBzaWRlKTtcbiAgcmVzdWx0Lm9mZnNldCA9IHJlc3VsdC5jb2xsYXBzZSA9PSBcInJpZ2h0XCIgPyByZXN1bHQuZW5kIDogcmVzdWx0LnN0YXJ0O1xuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIGlzSW5HdXR0ZXIobm9kZSkge1xuICBmb3IgKHZhciBzY2FuID0gbm9kZTsgc2Nhbjsgc2NhbiA9IHNjYW4ucGFyZW50Tm9kZSlcbiAgICB7IGlmICgvQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlci8udGVzdChzY2FuLmNsYXNzTmFtZSkpIHsgcmV0dXJuIHRydWUgfSB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBiYWRQb3MocG9zLCBiYWQpIHsgaWYgKGJhZCkgeyBwb3MuYmFkID0gdHJ1ZTsgfSByZXR1cm4gcG9zIH1cblxuZnVuY3Rpb24gZG9tVGV4dEJldHdlZW4oY20sIGZyb20sIHRvLCBmcm9tTGluZSwgdG9MaW5lKSB7XG4gIHZhciB0ZXh0ID0gXCJcIiwgY2xvc2luZyA9IGZhbHNlLCBsaW5lU2VwID0gY20uZG9jLmxpbmVTZXBhcmF0b3IoKSwgZXh0cmFMaW5lYnJlYWsgPSBmYWxzZTtcbiAgZnVuY3Rpb24gcmVjb2duaXplTWFya2VyKGlkKSB7IHJldHVybiBmdW5jdGlvbiAobWFya2VyKSB7IHJldHVybiBtYXJrZXIuaWQgPT0gaWQ7IH0gfVxuICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICBpZiAoY2xvc2luZykge1xuICAgICAgdGV4dCArPSBsaW5lU2VwO1xuICAgICAgaWYgKGV4dHJhTGluZWJyZWFrKSB7IHRleHQgKz0gbGluZVNlcDsgfVxuICAgICAgY2xvc2luZyA9IGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFkZFRleHQoc3RyKSB7XG4gICAgaWYgKHN0cikge1xuICAgICAgY2xvc2UoKTtcbiAgICAgIHRleHQgKz0gc3RyO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB3YWxrKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAxKSB7XG4gICAgICB2YXIgY21UZXh0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIpO1xuICAgICAgaWYgKGNtVGV4dCkge1xuICAgICAgICBhZGRUZXh0KGNtVGV4dCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdmFyIG1hcmtlcklEID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJjbS1tYXJrZXJcIiksIHJhbmdlJCQxO1xuICAgICAgaWYgKG1hcmtlcklEKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IGNtLmZpbmRNYXJrcyhQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lICsgMSwgMCksIHJlY29nbml6ZU1hcmtlcigrbWFya2VySUQpKTtcbiAgICAgICAgaWYgKGZvdW5kLmxlbmd0aCAmJiAocmFuZ2UkJDEgPSBmb3VuZFswXS5maW5kKDApKSlcbiAgICAgICAgICB7IGFkZFRleHQoZ2V0QmV0d2VlbihjbS5kb2MsIHJhbmdlJCQxLmZyb20sIHJhbmdlJCQxLnRvKS5qb2luKGxpbmVTZXApKTsgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSA9PSBcImZhbHNlXCIpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpc0Jsb2NrID0gL14ocHJlfGRpdnxwfGxpfHRhYmxlfGJyKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpO1xuICAgICAgaWYgKCEvXmJyJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSkgJiYgbm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT0gMCkgeyByZXR1cm4gfVxuXG4gICAgICBpZiAoaXNCbG9jaykgeyBjbG9zZSgpOyB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyB3YWxrKG5vZGUuY2hpbGROb2Rlc1tpXSk7IH1cblxuICAgICAgaWYgKC9eKHByZXxwKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpKSB7IGV4dHJhTGluZWJyZWFrID0gdHJ1ZTsgfVxuICAgICAgaWYgKGlzQmxvY2spIHsgY2xvc2luZyA9IHRydWU7IH1cbiAgICB9IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT0gMykge1xuICAgICAgYWRkVGV4dChub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9cXHUyMDBiL2csIFwiXCIpLnJlcGxhY2UoL1xcdTAwYTAvZywgXCIgXCIpKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7Oykge1xuICAgIHdhbGsoZnJvbSk7XG4gICAgaWYgKGZyb20gPT0gdG8pIHsgYnJlYWsgfVxuICAgIGZyb20gPSBmcm9tLm5leHRTaWJsaW5nO1xuICAgIGV4dHJhTGluZWJyZWFrID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRleHRcbn1cblxuZnVuY3Rpb24gZG9tVG9Qb3MoY20sIG5vZGUsIG9mZnNldCkge1xuICB2YXIgbGluZU5vZGU7XG4gIGlmIChub2RlID09IGNtLmRpc3BsYXkubGluZURpdikge1xuICAgIGxpbmVOb2RlID0gY20uZGlzcGxheS5saW5lRGl2LmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICBpZiAoIWxpbmVOb2RlKSB7IHJldHVybiBiYWRQb3MoY20uY2xpcFBvcyhQb3MoY20uZGlzcGxheS52aWV3VG8gLSAxKSksIHRydWUpIH1cbiAgICBub2RlID0gbnVsbDsgb2Zmc2V0ID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxpbmVOb2RlID0gbm9kZTs7IGxpbmVOb2RlID0gbGluZU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFsaW5lTm9kZSB8fCBsaW5lTm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgaWYgKGxpbmVOb2RlLnBhcmVudE5vZGUgJiYgbGluZU5vZGUucGFyZW50Tm9kZSA9PSBjbS5kaXNwbGF5LmxpbmVEaXYpIHsgYnJlYWsgfVxuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkudmlldy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBsaW5lVmlldyA9IGNtLmRpc3BsYXkudmlld1tpXTtcbiAgICBpZiAobGluZVZpZXcubm9kZSA9PSBsaW5lTm9kZSlcbiAgICAgIHsgcmV0dXJuIGxvY2F0ZU5vZGVJbkxpbmVWaWV3KGxpbmVWaWV3LCBub2RlLCBvZmZzZXQpIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB7XG4gIHZhciB3cmFwcGVyID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLCBiYWQgPSBmYWxzZTtcbiAgaWYgKCFub2RlIHx8ICFjb250YWlucyh3cmFwcGVyLCBub2RlKSkgeyByZXR1cm4gYmFkUG9zKFBvcyhsaW5lTm8obGluZVZpZXcubGluZSksIDApLCB0cnVlKSB9XG4gIGlmIChub2RlID09IHdyYXBwZXIpIHtcbiAgICBiYWQgPSB0cnVlO1xuICAgIG5vZGUgPSB3cmFwcGVyLmNoaWxkTm9kZXNbb2Zmc2V0XTtcbiAgICBvZmZzZXQgPSAwO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgdmFyIGxpbmUgPSBsaW5lVmlldy5yZXN0ID8gbHN0KGxpbmVWaWV3LnJlc3QpIDogbGluZVZpZXcubGluZTtcbiAgICAgIHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lKSwgbGluZS50ZXh0Lmxlbmd0aCksIGJhZClcbiAgICB9XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBub2RlLm5vZGVUeXBlID09IDMgPyBub2RlIDogbnVsbCwgdG9wTm9kZSA9IG5vZGU7XG4gIGlmICghdGV4dE5vZGUgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7XG4gICAgdGV4dE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgaWYgKG9mZnNldCkgeyBvZmZzZXQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUubGVuZ3RoOyB9XG4gIH1cbiAgd2hpbGUgKHRvcE5vZGUucGFyZW50Tm9kZSAhPSB3cmFwcGVyKSB7IHRvcE5vZGUgPSB0b3BOb2RlLnBhcmVudE5vZGU7IH1cbiAgdmFyIG1lYXN1cmUgPSBsaW5lVmlldy5tZWFzdXJlLCBtYXBzID0gbWVhc3VyZS5tYXBzO1xuXG4gIGZ1bmN0aW9uIGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCkge1xuICAgIGZvciAodmFyIGkgPSAtMTsgaSA8IChtYXBzID8gbWFwcy5sZW5ndGggOiAwKTsgaSsrKSB7XG4gICAgICB2YXIgbWFwJCQxID0gaSA8IDAgPyBtZWFzdXJlLm1hcCA6IG1hcHNbaV07XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcCQkMS5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICB2YXIgY3VyTm9kZSA9IG1hcCQkMVtqICsgMl07XG4gICAgICAgIGlmIChjdXJOb2RlID09IHRleHROb2RlIHx8IGN1ck5vZGUgPT0gdG9wTm9kZSkge1xuICAgICAgICAgIHZhciBsaW5lID0gbGluZU5vKGkgPCAwID8gbGluZVZpZXcubGluZSA6IGxpbmVWaWV3LnJlc3RbaV0pO1xuICAgICAgICAgIHZhciBjaCA9IG1hcCQkMVtqXSArIG9mZnNldDtcbiAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBjdXJOb2RlICE9IHRleHROb2RlKSB7IGNoID0gbWFwJCQxW2ogKyAob2Zmc2V0ID8gMSA6IDApXTsgfVxuICAgICAgICAgIHJldHVybiBQb3MobGluZSwgY2gpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGZvdW5kID0gZmluZCh0ZXh0Tm9kZSwgdG9wTm9kZSwgb2Zmc2V0KTtcbiAgaWYgKGZvdW5kKSB7IHJldHVybiBiYWRQb3MoZm91bmQsIGJhZCkgfVxuXG4gIC8vIEZJWE1FIHRoaXMgaXMgYWxsIHJlYWxseSBzaGFreS4gbWlnaHQgaGFuZGxlIHRoZSBmZXcgY2FzZXMgaXQgbmVlZHMgdG8gaGFuZGxlLCBidXQgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zXG4gIGZvciAodmFyIGFmdGVyID0gdG9wTm9kZS5uZXh0U2libGluZywgZGlzdCA9IHRleHROb2RlID8gdGV4dE5vZGUubm9kZVZhbHVlLmxlbmd0aCAtIG9mZnNldCA6IDA7IGFmdGVyOyBhZnRlciA9IGFmdGVyLm5leHRTaWJsaW5nKSB7XG4gICAgZm91bmQgPSBmaW5kKGFmdGVyLCBhZnRlci5maXJzdENoaWxkLCAwKTtcbiAgICBpZiAoZm91bmQpXG4gICAgICB7IHJldHVybiBiYWRQb3MoUG9zKGZvdW5kLmxpbmUsIGZvdW5kLmNoIC0gZGlzdCksIGJhZCkgfVxuICAgIGVsc2VcbiAgICAgIHsgZGlzdCArPSBhZnRlci50ZXh0Q29udGVudC5sZW5ndGg7IH1cbiAgfVxuICBmb3IgKHZhciBiZWZvcmUgPSB0b3BOb2RlLnByZXZpb3VzU2libGluZywgZGlzdCQxID0gb2Zmc2V0OyBiZWZvcmU7IGJlZm9yZSA9IGJlZm9yZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICBmb3VuZCA9IGZpbmQoYmVmb3JlLCBiZWZvcmUuZmlyc3RDaGlsZCwgLTEpO1xuICAgIGlmIChmb3VuZClcbiAgICAgIHsgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggKyBkaXN0JDEpLCBiYWQpIH1cbiAgICBlbHNlXG4gICAgICB7IGRpc3QkMSArPSBiZWZvcmUudGV4dENvbnRlbnQubGVuZ3RoOyB9XG4gIH1cbn1cblxuLy8gVEVYVEFSRUEgSU5QVVQgU1RZTEVcblxudmFyIFRleHRhcmVhSW5wdXQgPSBmdW5jdGlvbihjbSkge1xuICB0aGlzLmNtID0gY207XG4gIC8vIFNlZSBpbnB1dC5wb2xsIGFuZCBpbnB1dC5yZXNldFxuICB0aGlzLnByZXZJbnB1dCA9IFwiXCI7XG5cbiAgLy8gRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGV4cGVjdCBpbnB1dCB0byBhcHBlYXIgcmVhbCBzb29uXG4gIC8vIG5vdyAoYWZ0ZXIgc29tZSBldmVudCBsaWtlICdrZXlwcmVzcycgb3IgJ2lucHV0JykgYW5kIGFyZVxuICAvLyBwb2xsaW5nIGludGVuc2l2ZWx5LlxuICB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7XG4gIC8vIFNlbGYtcmVzZXR0aW5nIHRpbWVvdXQgZm9yIHRoZSBwb2xsZXJcbiAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgLy8gVXNlZCB0byB3b3JrIGFyb3VuZCBJRSBpc3N1ZSB3aXRoIHNlbGVjdGlvbiBiZWluZyBmb3Jnb3R0ZW4gd2hlbiBmb2N1cyBtb3ZlcyBhd2F5IGZyb20gdGV4dGFyZWFcbiAgdGhpcy5oYXNTZWxlY3Rpb24gPSBmYWxzZTtcbiAgdGhpcy5jb21wb3NpbmcgPSBudWxsO1xufTtcblxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uIChkaXNwbGF5KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGlucHV0ID0gdGhpcywgY20gPSB0aGlzLmNtO1xuICB0aGlzLmNyZWF0ZUZpZWxkKGRpc3BsYXkpO1xuICB2YXIgdGUgPSB0aGlzLnRleHRhcmVhO1xuXG4gIGRpc3BsYXkud3JhcHBlci5pbnNlcnRCZWZvcmUodGhpcy53cmFwcGVyLCBkaXNwbGF5LndyYXBwZXIuZmlyc3RDaGlsZCk7XG5cbiAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkgKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIGlPUyA4IGFueW1vcmUpXG4gIGlmIChpb3MpIHsgdGUuc3R5bGUud2lkdGggPSBcIjBweFwiOyB9XG5cbiAgb24odGUsIFwiaW5wdXRcIiwgZnVuY3Rpb24gKCkge1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgdGhpcyQxLmhhc1NlbGVjdGlvbikgeyB0aGlzJDEuaGFzU2VsZWN0aW9uID0gbnVsbDsgfVxuICAgIGlucHV0LnBvbGwoKTtcbiAgfSk7XG5cbiAgb24odGUsIFwicGFzdGVcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGhhbmRsZVBhc3RlKGUsIGNtKSkgeyByZXR1cm4gfVxuXG4gICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IHRydWU7XG4gICAgaW5wdXQuZmFzdFBvbGwoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUNvcHlDdXQoZSkge1xuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICBpZiAoY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgICAgc2V0TGFzdENvcGllZCh7bGluZVdpc2U6IGZhbHNlLCB0ZXh0OiBjbS5nZXRTZWxlY3Rpb25zKCl9KTtcbiAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgcmV0dXJuXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICBzZXRMYXN0Q29waWVkKHtsaW5lV2lzZTogdHJ1ZSwgdGV4dDogcmFuZ2VzLnRleHR9KTtcbiAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikge1xuICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcy5yYW5nZXMsIG51bGwsIHNlbF9kb250U2Nyb2xsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LnByZXZJbnB1dCA9IFwiXCI7XG4gICAgICAgIHRlLnZhbHVlID0gcmFuZ2VzLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgICAgc2VsZWN0SW5wdXQodGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHsgY20uc3RhdGUuY3V0SW5jb21pbmcgPSB0cnVlOyB9XG4gIH1cbiAgb24odGUsIFwiY3V0XCIsIHByZXBhcmVDb3B5Q3V0KTtcbiAgb24odGUsIFwiY29weVwiLCBwcmVwYXJlQ29weUN1dCk7XG5cbiAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpIHx8IHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIGNtLnN0YXRlLnBhc3RlSW5jb21pbmcgPSB0cnVlO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gIH0pO1xuXG4gIC8vIFByZXZlbnQgbm9ybWFsIHNlbGVjdGlvbiBpbiB0aGUgZWRpdG9yICh3ZSBoYW5kbGUgb3VyIG93bilcbiAgb24oZGlzcGxheS5saW5lU3BhY2UsIFwic2VsZWN0c3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkpIHsgZV9wcmV2ZW50RGVmYXVsdChlKTsgfVxuICB9KTtcblxuICBvbih0ZSwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhcnQgPSBjbS5nZXRDdXJzb3IoXCJmcm9tXCIpO1xuICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHsgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7IH1cbiAgICBpbnB1dC5jb21wb3NpbmcgPSB7XG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICByYW5nZTogY20ubWFya1RleHQoc3RhcnQsIGNtLmdldEN1cnNvcihcInRvXCIpLCB7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KVxuICAgIH07XG4gIH0pO1xuICBvbih0ZSwgXCJjb21wb3NpdGlvbmVuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlucHV0LmNvbXBvc2luZykge1xuICAgICAgaW5wdXQucG9sbCgpO1xuICAgICAgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7XG4gICAgICBpbnB1dC5jb21wb3NpbmcgPSBudWxsO1xuICAgIH1cbiAgfSk7XG59O1xuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5jcmVhdGVGaWVsZCA9IGZ1bmN0aW9uIChfZGlzcGxheSkge1xuICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWFcbiAgdGhpcy53cmFwcGVyID0gaGlkZGVuVGV4dGFyZWEoKTtcbiAgLy8gVGhlIHNlbWloaWRkZW4gdGV4dGFyZWEgdGhhdCBpcyBmb2N1c2VkIHdoZW4gdGhlIGVkaXRvciBpc1xuICAvLyBmb2N1c2VkLCBhbmQgcmVjZWl2ZXMgaW5wdXQuXG4gIHRoaXMudGV4dGFyZWEgPSB0aGlzLndyYXBwZXIuZmlyc3RDaGlsZDtcbn07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3JcbiAgdmFyIGNtID0gdGhpcy5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgdmFyIHJlc3VsdCA9IHByZXBhcmVTZWxlY3Rpb24oY20pO1xuXG4gIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzXG4gIGlmIChjbS5vcHRpb25zLm1vdmVJbnB1dFdpdGhDdXJzb3IpIHtcbiAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3JkcyhjbSwgZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgXCJkaXZcIik7XG4gICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmVzdWx0LnRlVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCAtIDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRQb3MudG9wICsgbGluZU9mZi50b3AgLSB3cmFwT2ZmLnRvcCkpO1xuICAgIHJlc3VsdC50ZUxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZFBvcy5sZWZ0ICsgbGluZU9mZi5sZWZ0IC0gd3JhcE9mZi5sZWZ0KSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59O1xuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24gKGRyYXduKSB7XG4gIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LmN1cnNvckRpdiwgZHJhd24uY3Vyc29ycyk7XG4gIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuc2VsZWN0aW9uRGl2LCBkcmF3bi5zZWxlY3Rpb24pO1xuICBpZiAoZHJhd24udGVUb3AgIT0gbnVsbCkge1xuICAgIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSBkcmF3bi50ZVRvcCArIFwicHhcIjtcbiAgICB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IGRyYXduLnRlTGVmdCArIFwicHhcIjtcbiAgfVxufTtcblxuLy8gUmVzZXQgdGhlIGlucHV0IHRvIGNvcnJlc3BvbmQgdG8gdGhlIHNlbGVjdGlvbiAob3IgdG8gYmUgZW1wdHksXG4vLyB3aGVuIG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMgc2VsZWN0ZWQpXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICh0eXBpbmcpIHtcbiAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8IHRoaXMuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gIHZhciBjbSA9IHRoaXMuY207XG4gIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgdGhpcy5wcmV2SW5wdXQgPSBcIlwiO1xuICAgIHZhciBjb250ZW50ID0gY20uZ2V0U2VsZWN0aW9uKCk7XG4gICAgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgaWYgKGNtLnN0YXRlLmZvY3VzZWQpIHsgc2VsZWN0SW5wdXQodGhpcy50ZXh0YXJlYSk7IH1cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gY29udGVudDsgfVxuICB9IGVsc2UgaWYgKCF0eXBpbmcpIHtcbiAgICB0aGlzLnByZXZJbnB1dCA9IHRoaXMudGV4dGFyZWEudmFsdWUgPSBcIlwiO1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gIH1cbn07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50ZXh0YXJlYSB9O1xuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zdXBwb3J0c1RvdWNoID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2UgfTtcblxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuZm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiICYmICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IHRoaXMudGV4dGFyZWEpKSB7XG4gICAgdHJ5IHsgdGhpcy50ZXh0YXJlYS5mb2N1cygpOyB9XG4gICAgY2F0Y2ggKGUpIHt9IC8vIElFOCB3aWxsIHRocm93IGlmIHRoZSB0ZXh0YXJlYSBpcyBkaXNwbGF5OiBub25lIG9yIG5vdCBpbiBET01cbiAgfVxufTtcblxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuYmx1ciA9IGZ1bmN0aW9uICgpIHsgdGhpcy50ZXh0YXJlYS5ibHVyKCk7IH07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMud3JhcHBlci5zdHlsZS50b3AgPSB0aGlzLndyYXBwZXIuc3R5bGUubGVmdCA9IDA7XG59O1xuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkgeyB0aGlzLnNsb3dQb2xsKCk7IH07XG5cbi8vIFBvbGwgZm9yIGlucHV0IGNoYW5nZXMsIHVzaW5nIHRoZSBub3JtYWwgcmF0ZSBvZiBwb2xsaW5nLiBUaGlzXG4vLyBydW5zIGFzIGxvbmcgYXMgdGhlIGVkaXRvciBpcyBmb2N1c2VkLlxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2xvd1BvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHRoaXMucG9sbGluZ0Zhc3QpIHsgcmV0dXJuIH1cbiAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLnBvbGwoKTtcbiAgICBpZiAodGhpcyQxLmNtLnN0YXRlLmZvY3VzZWQpIHsgdGhpcyQxLnNsb3dQb2xsKCk7IH1cbiAgfSk7XG59O1xuXG4vLyBXaGVuIGFuIGV2ZW50IGhhcyBqdXN0IGNvbWUgaW4gdGhhdCBpcyBsaWtlbHkgdG8gYWRkIG9yIGNoYW5nZVxuLy8gc29tZXRoaW5nIGluIHRoZSBpbnB1dCB0ZXh0YXJlYSwgd2UgcG9sbCBmYXN0ZXIsIHRvIGVuc3VyZSB0aGF0XG4vLyB0aGUgY2hhbmdlIGFwcGVhcnMgb24gdGhlIHNjcmVlbiBxdWlja2x5LlxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuZmFzdFBvbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtaXNzZWQgPSBmYWxzZSwgaW5wdXQgPSB0aGlzO1xuICBpbnB1dC5wb2xsaW5nRmFzdCA9IHRydWU7XG4gIGZ1bmN0aW9uIHAoKSB7XG4gICAgdmFyIGNoYW5nZWQgPSBpbnB1dC5wb2xsKCk7XG4gICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBpbnB1dC5wb2xsaW5nLnNldCg2MCwgcCk7fVxuICAgIGVsc2Uge2lucHV0LnBvbGxpbmdGYXN0ID0gZmFsc2U7IGlucHV0LnNsb3dQb2xsKCk7fVxuICB9XG4gIGlucHV0LnBvbGxpbmcuc2V0KDIwLCBwKTtcbn07XG5cbi8vIFJlYWQgaW5wdXQgZnJvbSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLlxuLy8gV2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQsIGl0IGlzIHByZXNlbnQgaW4gdGhlIHRleHRhcmVhLCBhbmRcbi8vIHNlbGVjdGVkICh1bmxlc3MgaXQgaXMgaHVnZSwgaW4gd2hpY2ggY2FzZSBhIHBsYWNlaG9sZGVyIGlzXG4vLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUgY3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseVxuLy8gc2VlbiB0ZXh0IChjYW4gYmUgZW1wdHkpLCB3aGljaCBpcyBzdG9yZWQgaW4gcHJldklucHV0ICh3ZSBtdXN0XG4vLyBub3QgcmVzZXQgdGhlIHRleHRhcmVhIHdoZW4gdHlwaW5nLCBiZWNhdXNlIHRoYXQgYnJlYWtzIElNRSkuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5wb2xsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBjbSA9IHRoaXMuY20sIGlucHV0ID0gdGhpcy50ZXh0YXJlYSwgcHJldklucHV0ID0gdGhpcy5wcmV2SW5wdXQ7XG4gIC8vIFNpbmNlIHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzXG4gIC8vIHBvc3NpYmxlIHdoZW4gaXQgaXMgY2xlYXIgdGhhdCBub3RoaW5nIGhhcHBlbmVkLiBoYXNTZWxlY3Rpb25cbiAgLy8gd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgbG90IG9mIHRleHQgaW4gdGhlIHRleHRhcmVhLFxuICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVlIHdvdWxkIGJlIGV4cGVuc2l2ZS5cbiAgaWYgKHRoaXMuY29udGV4dE1lbnVQZW5kaW5nIHx8ICFjbS5zdGF0ZS5mb2N1c2VkIHx8XG4gICAgICAoaGFzU2VsZWN0aW9uKGlucHV0KSAmJiAhcHJldklucHV0ICYmICF0aGlzLmNvbXBvc2luZykgfHxcbiAgICAgIGNtLmlzUmVhZE9ubHkoKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpXG4gICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7XG4gIC8vIElmIG5vdGhpbmcgY2hhbmdlZCwgYmFpbC5cbiAgaWYgKHRleHQgPT0gcHJldklucHV0ICYmICFjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7IHJldHVybiBmYWxzZSB9XG4gIC8vIFdvcmsgYXJvdW5kIG5vbnNlbnNpY2FsIHNlbGVjdGlvbiByZXNldHRpbmcgaW4gSUU5LzEwLCBhbmRcbiAgLy8gaW5leHBsaWNhYmxlIGFwcGVhcmFuY2Ugb2YgcHJpdmF0ZSBhcmVhIHVuaWNvZGUgY2hhcmFjdGVycyBvblxuICAvLyBzb21lIGtleSBjb21ib3MgaW4gTWFjICgjMjY4OSkuXG4gIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkgJiYgdGhpcy5oYXNTZWxlY3Rpb24gPT09IHRleHQgfHxcbiAgICAgIG1hYyAmJiAvW1xcdWY3MDAtXFx1ZjdmZl0vLnRlc3QodGV4dCkpIHtcbiAgICBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoY20uZG9jLnNlbCA9PSBjbS5kaXNwbGF5LnNlbEZvckNvbnRleHRNZW51KSB7XG4gICAgdmFyIGZpcnN0ID0gdGV4dC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChmaXJzdCA9PSAweDIwMGIgJiYgIXByZXZJbnB1dCkgeyBwcmV2SW5wdXQgPSBcIlxcdTIwMGJcIjsgfVxuICAgIGlmIChmaXJzdCA9PSAweDIxZGEpIHsgdGhpcy5yZXNldCgpOyByZXR1cm4gdGhpcy5jbS5leGVjQ29tbWFuZChcInVuZG9cIikgfVxuICB9XG4gIC8vIEZpbmQgdGhlIHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3XG4gIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTtcbiAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dC5jaGFyQ29kZUF0KHNhbWUpID09IHRleHQuY2hhckNvZGVBdChzYW1lKSkgeyArK3NhbWU7IH1cblxuICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgYXBwbHlUZXh0SW5wdXQoY20sIHRleHQuc2xpY2Uoc2FtZSksIHByZXZJbnB1dC5sZW5ndGggLSBzYW1lLFxuICAgICAgICAgICAgICAgICAgIG51bGwsIHRoaXMkMS5jb21wb3NpbmcgPyBcIipjb21wb3NlXCIgOiBudWxsKTtcblxuICAgIC8vIERvbid0IGxlYXZlIGxvbmcgdGV4dCBpbiB0aGUgdGV4dGFyZWEsIHNpbmNlIGl0IG1ha2VzIGZ1cnRoZXIgcG9sbGluZyBzbG93XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTAwMCB8fCB0ZXh0LmluZGV4T2YoXCJcXG5cIikgPiAtMSkgeyBpbnB1dC52YWx1ZSA9IHRoaXMkMS5wcmV2SW5wdXQgPSBcIlwiOyB9XG4gICAgZWxzZSB7IHRoaXMkMS5wcmV2SW5wdXQgPSB0ZXh0OyB9XG5cbiAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgdGhpcyQxLmNvbXBvc2luZy5yYW5nZS5jbGVhcigpO1xuICAgICAgdGhpcyQxLmNvbXBvc2luZy5yYW5nZSA9IGNtLm1hcmtUZXh0KHRoaXMkMS5jb21wb3Npbmcuc3RhcnQsIGNtLmdldEN1cnNvcihcInRvXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdHJ1ZVxufTtcblxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuZW5zdXJlUG9sbGVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkgeyB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7IH1cbn07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLm9uS2V5UHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gIHRoaXMuZmFzdFBvbGwoKTtcbn07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoZSkge1xuICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IGlucHV0LmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgdGUgPSBpbnB1dC50ZXh0YXJlYTtcbiAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSksIHNjcm9sbFBvcyA9IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wO1xuICBpZiAoIXBvcyB8fCBwcmVzdG8pIHsgcmV0dXJuIH0gLy8gT3BlcmEgaXMgZGlmZmljdWx0LlxuXG4gIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9uIG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9uXG4gIC8vIGFuZCAncmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51JyBvcHRpb24gaXMgdHJ1ZS5cbiAgdmFyIHJlc2V0ID0gY20ub3B0aW9ucy5yZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnU7XG4gIGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpXG4gICAgeyBvcGVyYXRpb24oY20sIHNldFNlbGVjdGlvbikoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24ocG9zKSwgc2VsX2RvbnRTY3JvbGwpOyB9XG5cbiAgdmFyIG9sZENTUyA9IHRlLnN0eWxlLmNzc1RleHQsIG9sZFdyYXBwZXJDU1MgPSBpbnB1dC53cmFwcGVyLnN0eWxlLmNzc1RleHQ7XG4gIGlucHV0LndyYXBwZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlXCI7XG4gIHZhciB3cmFwcGVyQm94ID0gaW5wdXQud3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4O1xcbiAgICAgIHRvcDogXCIgKyAoZS5jbGllbnRZIC0gd3JhcHBlckJveC50b3AgLSA1KSArIFwicHg7IGxlZnQ6IFwiICsgKGUuY2xpZW50WCAtIHdyYXBwZXJCb3gubGVmdCAtIDUpICsgXCJweDtcXG4gICAgICB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiBcIiArIChpZSA/IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpXCIgOiBcInRyYW5zcGFyZW50XCIpICsgXCI7XFxuICAgICAgb3V0bGluZTogbm9uZTsgYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTtcIjtcbiAgdmFyIG9sZFNjcm9sbFk7XG4gIGlmICh3ZWJraXQpIHsgb2xkU2Nyb2xsWSA9IHdpbmRvdy5zY3JvbGxZOyB9IC8vIFdvcmsgYXJvdW5kIENocm9tZSBpc3N1ZSAoIzI3MTIpXG4gIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgaWYgKHdlYmtpdCkgeyB3aW5kb3cuc2Nyb2xsVG8obnVsbCwgb2xkU2Nyb2xsWSk7IH1cbiAgZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAvLyBBZGRzIFwiU2VsZWN0IGFsbFwiIHRvIGNvbnRleHQgbWVudSBpbiBGRlxuICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgdGUudmFsdWUgPSBpbnB1dC5wcmV2SW5wdXQgPSBcIiBcIjsgfVxuICBpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSB0cnVlO1xuICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDtcbiAgY2xlYXJUaW1lb3V0KGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsKTtcblxuICAvLyBTZWxlY3QtYWxsIHdpbGwgYmUgZ3JleWVkIG91dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2VsZWN0LCBzb1xuICAvLyB0aGlzIGFkZHMgYSB6ZXJvLXdpZHRoIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGxhdGVyIGNoZWNrIHdoZXRoZXJcbiAgLy8gaXQgZ290IHNlbGVjdGVkLlxuICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0QWxsSGFjaygpIHtcbiAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgdmFyIHNlbGVjdGVkID0gY20uc29tZXRoaW5nU2VsZWN0ZWQoKTtcbiAgICAgIHZhciBleHR2YWwgPSBcIlxcdTIwMGJcIiArIChzZWxlY3RlZCA/IHRlLnZhbHVlIDogXCJcIik7XG4gICAgICB0ZS52YWx1ZSA9IFwiXFx1MjFkYVwiOyAvLyBVc2VkIHRvIGNhdGNoIGNvbnRleHQtbWVudSB1bmRvXG4gICAgICB0ZS52YWx1ZSA9IGV4dHZhbDtcbiAgICAgIGlucHV0LnByZXZJbnB1dCA9IHNlbGVjdGVkID8gXCJcIiA6IFwiXFx1MjAwYlwiO1xuICAgICAgdGUuc2VsZWN0aW9uU3RhcnQgPSAxOyB0ZS5zZWxlY3Rpb25FbmQgPSBleHR2YWwubGVuZ3RoO1xuICAgICAgLy8gUmUtc2V0IHRoaXMsIGluIGNhc2Ugc29tZSBvdGhlciBoYW5kbGVyIHRvdWNoZWQgdGhlXG4gICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLlxuICAgICAgZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IGNtLmRvYy5zZWw7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlaGlkZSgpIHtcbiAgICBpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcgPSBmYWxzZTtcbiAgICBpbnB1dC53cmFwcGVyLnN0eWxlLmNzc1RleHQgPSBvbGRXcmFwcGVyQ1NTO1xuICAgIHRlLnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7XG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IGRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgPSBzY3JvbGxQb3MpOyB9XG5cbiAgICAvLyBUcnkgdG8gZGV0ZWN0IHRoZSB1c2VyIGNob29zaW5nIHNlbGVjdC1hbGxcbiAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgaWYgKCFpZSB8fCAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpKSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgICAgIHZhciBpID0gMCwgcG9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiB0ZS5zZWxlY3Rpb25TdGFydCA9PSAwICYmXG4gICAgICAgICAgICB0ZS5zZWxlY3Rpb25FbmQgPiAwICYmIGlucHV0LnByZXZJbnB1dCA9PSBcIlxcdTIwMGJcIikge1xuICAgICAgICAgIG9wZXJhdGlvbihjbSwgc2VsZWN0QWxsKShjbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSsrIDwgMTApIHtcbiAgICAgICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgNTAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDtcbiAgICAgICAgICBkaXNwbGF5LmlucHV0LnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCA9IHNldFRpbWVvdXQocG9sbCwgMjAwKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHByZXBhcmVTZWxlY3RBbGxIYWNrKCk7IH1cbiAgaWYgKGNhcHR1cmVSaWdodENsaWNrKSB7XG4gICAgZV9zdG9wKGUpO1xuICAgIHZhciBtb3VzZXVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgb2ZmKHdpbmRvdywgXCJtb3VzZXVwXCIsIG1vdXNldXApO1xuICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTtcbiAgICB9O1xuICAgIG9uKHdpbmRvdywgXCJtb3VzZXVwXCIsIG1vdXNldXApO1xuICB9IGVsc2Uge1xuICAgIHNldFRpbWVvdXQocmVoaWRlLCA1MCk7XG4gIH1cbn07XG5cblRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlYWRPbmx5Q2hhbmdlZCA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgaWYgKCF2YWwpIHsgdGhpcy5yZXNldCgpOyB9XG4gIHRoaXMudGV4dGFyZWEuZGlzYWJsZWQgPSB2YWwgPT0gXCJub2N1cnNvclwiO1xufTtcblxuVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2V0VW5lZGl0YWJsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG5UZXh0YXJlYUlucHV0LnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUgPSBmYWxzZTtcblxuZnVuY3Rpb24gZnJvbVRleHRBcmVhKHRleHRhcmVhLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zID8gY29weU9iaihvcHRpb25zKSA6IHt9O1xuICBvcHRpb25zLnZhbHVlID0gdGV4dGFyZWEudmFsdWU7XG4gIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleClcbiAgICB7IG9wdGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJJbmRleDsgfVxuICBpZiAoIW9wdGlvbnMucGxhY2Vob2xkZXIgJiYgdGV4dGFyZWEucGxhY2Vob2xkZXIpXG4gICAgeyBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7IH1cbiAgLy8gU2V0IGF1dG9mb2N1cyB0byB0cnVlIGlmIHRoaXMgdGV4dGFyZWEgaXMgZm9jdXNlZCwgb3IgaWYgaXQgaGFzXG4gIC8vIGF1dG9mb2N1cyBhbmQgbm8gb3RoZXIgZWxlbWVudCBpcyBmb2N1c2VkLlxuICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkge1xuICAgIHZhciBoYXNGb2N1cyA9IGFjdGl2ZUVsdCgpO1xuICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gaGFzRm9jdXMgPT0gdGV4dGFyZWEgfHxcbiAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gY20uZ2V0VmFsdWUoKTt9XG5cbiAgdmFyIHJlYWxTdWJtaXQ7XG4gIGlmICh0ZXh0YXJlYS5mb3JtKSB7XG4gICAgb24odGV4dGFyZWEuZm9ybSwgXCJzdWJtaXRcIiwgc2F2ZSk7XG4gICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgIGlmICghb3B0aW9ucy5sZWF2ZVN1Ym1pdE1ldGhvZEFsb25lKSB7XG4gICAgICB2YXIgZm9ybSA9IHRleHRhcmVhLmZvcm07XG4gICAgICByZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgd3JhcHBlZFN1Ym1pdCA9IGZvcm0uc3VibWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNhdmUoKTtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7XG4gICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgb3B0aW9ucy5maW5pc2hJbml0ID0gZnVuY3Rpb24gKGNtKSB7XG4gICAgY20uc2F2ZSA9IHNhdmU7XG4gICAgY20uZ2V0VGV4dEFyZWEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXh0YXJlYTsgfTtcbiAgICBjbS50b1RleHRBcmVhID0gZnVuY3Rpb24gKCkge1xuICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2VcbiAgICAgIHNhdmUoKTtcbiAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7XG4gICAgICAgIG9mZih0ZXh0YXJlYS5mb3JtLCBcInN1Ym1pdFwiLCBzYXZlKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgeyB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7IH1cbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgdmFyIGNtID0gQ29kZU1pcnJvciQxKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7IH0sXG4gICAgb3B0aW9ucyk7XG4gIHJldHVybiBjbVxufVxuXG5mdW5jdGlvbiBhZGRMZWdhY3lQcm9wcyhDb2RlTWlycm9yKSB7XG4gIENvZGVNaXJyb3Iub2ZmID0gb2ZmO1xuICBDb2RlTWlycm9yLm9uID0gb247XG4gIENvZGVNaXJyb3Iud2hlZWxFdmVudFBpeGVscyA9IHdoZWVsRXZlbnRQaXhlbHM7XG4gIENvZGVNaXJyb3IuRG9jID0gRG9jO1xuICBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzQXV0bztcbiAgQ29kZU1pcnJvci5jb3VudENvbHVtbiA9IGNvdW50Q29sdW1uO1xuICBDb2RlTWlycm9yLmZpbmRDb2x1bW4gPSBmaW5kQ29sdW1uO1xuICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBpc1dvcmRDaGFyQmFzaWM7XG4gIENvZGVNaXJyb3IuUGFzcyA9IFBhc3M7XG4gIENvZGVNaXJyb3Iuc2lnbmFsID0gc2lnbmFsO1xuICBDb2RlTWlycm9yLkxpbmUgPSBMaW5lO1xuICBDb2RlTWlycm9yLmNoYW5nZUVuZCA9IGNoYW5nZUVuZDtcbiAgQ29kZU1pcnJvci5zY3JvbGxiYXJNb2RlbCA9IHNjcm9sbGJhck1vZGVsO1xuICBDb2RlTWlycm9yLlBvcyA9IFBvcztcbiAgQ29kZU1pcnJvci5jbXBQb3MgPSBjbXA7XG4gIENvZGVNaXJyb3IubW9kZXMgPSBtb2RlcztcbiAgQ29kZU1pcnJvci5taW1lTW9kZXMgPSBtaW1lTW9kZXM7XG4gIENvZGVNaXJyb3IucmVzb2x2ZU1vZGUgPSByZXNvbHZlTW9kZTtcbiAgQ29kZU1pcnJvci5nZXRNb2RlID0gZ2V0TW9kZTtcbiAgQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IG1vZGVFeHRlbnNpb25zO1xuICBDb2RlTWlycm9yLmV4dGVuZE1vZGUgPSBleHRlbmRNb2RlO1xuICBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGNvcHlTdGF0ZTtcbiAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTtcbiAgQ29kZU1pcnJvci5pbm5lck1vZGUgPSBpbm5lck1vZGU7XG4gIENvZGVNaXJyb3IuY29tbWFuZHMgPSBjb21tYW5kcztcbiAgQ29kZU1pcnJvci5rZXlNYXAgPSBrZXlNYXA7XG4gIENvZGVNaXJyb3Iua2V5TmFtZSA9IGtleU5hbWU7XG4gIENvZGVNaXJyb3IuaXNNb2RpZmllcktleSA9IGlzTW9kaWZpZXJLZXk7XG4gIENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9va3VwS2V5O1xuICBDb2RlTWlycm9yLm5vcm1hbGl6ZUtleU1hcCA9IG5vcm1hbGl6ZUtleU1hcDtcbiAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBTdHJpbmdTdHJlYW07XG4gIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7XG4gIENvZGVNaXJyb3IuVGV4dE1hcmtlciA9IFRleHRNYXJrZXI7XG4gIENvZGVNaXJyb3IuTGluZVdpZGdldCA9IExpbmVXaWRnZXQ7XG4gIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7XG4gIENvZGVNaXJyb3IuZV9zdG9wUHJvcGFnYXRpb24gPSBlX3N0b3BQcm9wYWdhdGlvbjtcbiAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7XG4gIENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBhZGRDbGFzcztcbiAgQ29kZU1pcnJvci5jb250YWlucyA9IGNvbnRhaW5zO1xuICBDb2RlTWlycm9yLnJtQ2xhc3MgPSBybUNsYXNzO1xuICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7XG59XG5cbi8vIEVESVRPUiBDT05TVFJVQ1RPUlxuXG5kZWZpbmVPcHRpb25zKENvZGVNaXJyb3IkMSk7XG5cbmFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvciQxKTtcblxuLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuXG52YXIgZG9udERlbGVnYXRlID0gXCJpdGVyIGluc2VydCByZW1vdmUgY29weSBnZXRFZGl0b3IgY29uc3RydWN0b3JcIi5zcGxpdChcIiBcIik7XG5mb3IgKHZhciBwcm9wIGluIERvYy5wcm90b3R5cGUpIHsgaWYgKERvYy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgaW5kZXhPZihkb250RGVsZWdhdGUsIHByb3ApIDwgMClcbiAgeyBDb2RlTWlycm9yJDEucHJvdG90eXBlW3Byb3BdID0gKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpfVxuICB9KShEb2MucHJvdG90eXBlW3Byb3BdKTsgfSB9XG5cbmV2ZW50TWl4aW4oRG9jKTtcblxuLy8gSU5QVVQgSEFORExJTkdcblxuQ29kZU1pcnJvciQxLmlucHV0U3R5bGVzID0ge1widGV4dGFyZWFcIjogVGV4dGFyZWFJbnB1dCwgXCJjb250ZW50ZWRpdGFibGVcIjogQ29udGVudEVkaXRhYmxlSW5wdXR9O1xuXG4vLyBNT0RFIERFRklOSVRJT04gQU5EIFFVRVJZSU5HXG5cbi8vIEV4dHJhIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGFzIHRoZSBtb2RlJ3MgZGVwZW5kZW5jaWVzLCB3aGljaCBpc1xuLy8gdXNlZCBieSAobGVnYWN5KSBtZWNoYW5pc21zIGxpa2UgbG9hZG1vZGUuanMgdG8gYXV0b21hdGljYWxseVxuLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pXG5Db2RlTWlycm9yJDEuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUvKiwgbW9kZSwg4oCmKi8pIHtcbiAgaWYgKCFDb2RlTWlycm9yJDEuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9IFwibnVsbFwiKSB7IENvZGVNaXJyb3IkMS5kZWZhdWx0cy5tb2RlID0gbmFtZTsgfVxuICBkZWZpbmVNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xuXG5Db2RlTWlycm9yJDEuZGVmaW5lTUlNRSA9IGRlZmluZU1JTUU7XG5cbi8vIE1pbmltYWwgZGVmYXVsdCBtb2RlLlxuQ29kZU1pcnJvciQxLmRlZmluZU1vZGUoXCJudWxsXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7dG9rZW46IGZ1bmN0aW9uIChzdHJlYW0pIHsgcmV0dXJuIHN0cmVhbS5za2lwVG9FbmQoKTsgfX0pOyB9KTtcbkNvZGVNaXJyb3IkMS5kZWZpbmVNSU1FKFwidGV4dC9wbGFpblwiLCBcIm51bGxcIik7XG5cbi8vIEVYVEVOU0lPTlNcblxuQ29kZU1pcnJvciQxLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gIENvZGVNaXJyb3IkMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jO1xufTtcbkNvZGVNaXJyb3IkMS5kZWZpbmVEb2NFeHRlbnNpb24gPSBmdW5jdGlvbiAobmFtZSwgZnVuYykge1xuICBEb2MucHJvdG90eXBlW25hbWVdID0gZnVuYztcbn07XG5cbkNvZGVNaXJyb3IkMS5mcm9tVGV4dEFyZWEgPSBmcm9tVGV4dEFyZWE7XG5cbmFkZExlZ2FjeVByb3BzKENvZGVNaXJyb3IkMSk7XG5cbkNvZGVNaXJyb3IkMS52ZXJzaW9uID0gXCI1LjQwLjBcIjtcblxucmV0dXJuIENvZGVNaXJyb3IkMTtcblxufSkpKTtcbiIsImltcG9ydCBVVElMIGZyb20gJy4uL3V0aWwvVXRpbCc7XHJcbmltcG9ydCBDT05GSUcgZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgQ00gZnJvbSAnLi9jb2RlbWlycm9yJztcclxuXHJcbmNvbnN0IHsgaXNNYWMsIHRvZ2dsZUNsYXNzLCBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MgfSA9IFVUSUw7XHJcbmNvbnN0IHsgYmFzZVVybCwgZ2l0R3ViVXJsIH0gPSBDT05GSUc7XHJcbmNvbnN0IHsgZ2V0U3RhdGUgfSA9IENNO1xyXG5cclxuXHJcbmxldCBFRElUT1IgPSBudWxsO1xyXG4vKipcclxuICog5bel5YW35qCP5Yqf6IO9XHJcbiAqL1xyXG5cclxuIC8qKiBcclxuICAqIEFjdGlvbiBmcm8gdG9nZ2xlIEJvbGQuXHJcbiAgKiBg5Yqg57KXYCDlm77moIflpITnkIblip/og71cclxuICAqL1xyXG5jb25zdCB0b2dnbGVCb2xkID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdib2xkJztcclxuICAvLyDlvZPliY3lnZflr7nlupTnmoQgbWFya2Rvd24g57G75Z6LLlxyXG4gIGNvbnN0IGJsb2NrU3R5bGVzID0gZWRpdG9yLl9vcHRpb25zLiR0b29scy5ibG9ja1N0eWxlc1t0eXBlXTtcclxuXHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICAvLyDmj5LlhaXlhoXlrrlcclxuICBsZXQgdGV4dDtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG5cclxuICBsZXQgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcclxuICBsZXQgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xyXG5cclxuICAvLyDlvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBpZiAoc3RhdFt0eXBlXSkge1xyXG4gICAgLy8gdGV4dCA9IGNtLmdldExpbmUoc3RhcnRQb2ludC5saW5lKTtcclxuICAgIC8vIHN0YXJ0Q2hhcnMgPSB0ZXh0LnNsaWNlKDAsIHN0YXJ0UG9pbnQuY2gpO1xyXG4gICAgLy8gZW5kQ2hhcnMgPSB0ZXh0LnNsaWNlKHN0YXJ0UG9pbnQuY2gpO1xyXG5cclxuICAgIC8vIGlmKHR5cGUgPT0gXCJib2xkXCIpIHtcclxuXHRcdC8vIFx0c3RhcnRDaGFycyA9IHN0YXJ0Q2hhcnMucmVwbGFjZSgvKFxcKlxcKnxfXykoPyFbXFxzXFxTXSooXFwqXFwqfF9fKSkvLCBcIlwiKTtcclxuXHRcdC8vIFx0ZW5kQ2hhcnMgPSBlbmRDaGFycy5yZXBsYWNlKC8oXFwqXFwqfF9fKS8sIFwiXCIpO1xyXG5cdFx0Ly8gfSBlbHNlIGlmKHR5cGUgPT0gXCJpdGFsaWNcIikge1xyXG5cdFx0Ly8gXHRzdGFydENoYXJzID0gc3RhcnRDaGFycy5yZXBsYWNlKC8oXFwqfF8pKD8hW1xcc1xcU10qKFxcKnxfKSkvLCBcIlwiKTtcclxuXHRcdC8vIFx0ZW5kQ2hhcnMgPSBlbmRDaGFycy5yZXBsYWNlKC8oXFwqfF8pLywgXCJcIik7XHJcblx0XHQvLyB9IGVsc2UgaWYodHlwZSA9PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG5cdFx0Ly8gXHRzdGFydENoYXJzID0gc3RhcnRDaGFycy5yZXBsYWNlKC8oXFwqXFwqfH5+KSg/IVtcXHNcXFNdKihcXCpcXCp8fn4pKS8sIFwiXCIpO1xyXG5cdFx0Ly8gXHRlbmRDaGFycyA9IGVuZENoYXJzLnJlcGxhY2UoLyhcXCpcXCp8fn4pLywgXCJcIik7XHJcbiAgICAvLyB9XHJcbiAgICBcclxuICAgIC8vIGNtLnJlcGxhY2VSYW5nZShzdGFydENoYXJzICsgZW5kQ2hhcnMsIHtcclxuICAgIC8vICAgbGluZTogc3RhcnRQb2ludC5saW5lLFxyXG4gICAgLy8gICBjaDogMFxyXG4gICAgLy8gfSwge1xyXG4gICAgLy8gICBsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcbiAgICAvLyAgIGNoOiA5OTk5OTk5OTk5OTk5OVxyXG4gICAgLy8gfSk7XHJcbiAgfSBlbHNlIHsgLy8g6ZyA6KaB5o+S5YWl55qE5YaF5a65XHJcbiAgICB0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIioqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX19cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwiaXRhbGljXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJzdHJpa2V0aHJvdWdoXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJ+flwiKS5qb2luKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgY20ucmVwbGFjZVNlbGVjdGlvbihzdGFydENoYXJzICsgdGV4dCArIGVuZENoYXJzKTtcclxuXHJcbiAgICBzdGFydFBvaW50LmNoICs9IHN0YXJ0Q2hhcnMubGVuZ3RoO1xyXG4gICAgZW5kUG9pbnQuY2ggPSBzdGFydFBvaW50LmNoICsgdGV4dC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xyXG4gIGNtLmZvY3VzKCk7XHJcbn1cclxuXHJcbi8qKiBcclxuICogQWN0aW9uIGZybyB0b2dnbGUgSXRhbGljLlxyXG4gKiBg5pac5L2TYCDlm77moIflpITnkIblip/og71cclxuICovXHJcbmNvbnN0IHRvZ2dsZUl0YWxpYyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAnaXRhbGljJztcclxuICAvLyDlvZPliY3lnZflr7nlupTnmoQgbWFya2Rvd24g57G75Z6LLlxyXG4gIGNvbnN0IGJsb2NrU3R5bGVzID0gZWRpdG9yLl9vcHRpb25zLiR0b29scy5ibG9ja1N0eWxlc1t0eXBlXTtcclxuICBjb25zdCBzdGF0ID0gZ2V0U3RhdGUoY20pO1xyXG4gIC8vIOaPkuWFpeWGheWuuVxyXG4gIGxldCB0ZXh0O1xyXG4gIGxldCBzdGFydENoYXJzID0gYmxvY2tTdHlsZXM7XHJcbiAgbGV0IGVuZENoYXJzID0gYmxvY2tTdHlsZXM7XHJcblxyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcblxyXG4gIC8vIOW9k+WJjea/gOa0u+eahOexu+Wei1xyXG4gIGlmIChzdGF0W3R5cGVdKSB7XHJcbiAgICBcclxuICB9IGVsc2UgeyAvLyDpnIDopoHmj5LlhaXnmoTlhoXlrrlcclxuICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBpZih0eXBlID09IFwiYm9sZFwiKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiKipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJpdGFsaWNcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIipcIikuam9pbihcIlwiKTtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJfXCIpLmpvaW4oXCJcIik7XHJcblx0XHR9IGVsc2UgaWYodHlwZSA9PSBcInN0cmlrZXRocm91Z2hcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIn5+XCIpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKHN0YXJ0Q2hhcnMgKyB0ZXh0ICsgZW5kQ2hhcnMpO1xyXG5cclxuICAgIHN0YXJ0UG9pbnQuY2ggKz0gc3RhcnRDaGFycy5sZW5ndGg7XHJcbiAgICBlbmRQb2ludC5jaCA9IHN0YXJ0UG9pbnQuY2ggKyB0ZXh0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNtLnNldFNlbGVjdGlvbihzdGFydFBvaW50LCBlbmRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLy8g5qCH6aKY55u45YWzIHN0YXJ0ID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIEhlYWRpbmcuXHJcbiAqIGDmoIfpophgIOWbvuagh+WkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlSGVhZGluZyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAnSGVhZGluZyc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG5cclxuICBsZXQgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcclxuICBsZXQgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xyXG5cclxuICBmb3IgKGxldCBpID0gc3RhcnRQb2ludC5saW5lOyBpIDw9IGVuZFBvaW50LmxpbmU7IGkrKykge1xyXG4gICAgLy8g5o+S5YWl5YaF5a65XHJcbiAgICBsZXQgdGV4dCA9IGNtLmdldExpbmUoaSk7XHJcbiAgICBjb25zdCBjdXJySGVhZGluZ0xldmVsID0gdGV4dC5zZWFyY2goL1teI10vKTtcclxuXHJcbiAgICB0ZXh0ID0gXCIjIFwiICsgdGV4dC5zdWJzdHIoY3VyckhlYWRpbmdMZXZlbCArIDEpO1xyXG5cclxuICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXh0LCB7XHJcbiAgICAgIGxpbmU6IGksXHJcbiAgICAgIGNoOiAwXHJcbiAgICB9LCB7XHJcbiAgICAgIGxpbmU6IGksXHJcbiAgICAgIGNoOiA5OTk5OTk5OTk5OTk5OVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbS5mb2N1cygpO1xyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciB0b2dnbGluZyBoZWFkaW5nIHNpemU6IG5vcm1hbCAtPiBoMSAtPiBoMiAtPiBoMyAtPiBoNCAtPiBoNSAtPiBoNiAtPiBub3JtYWxcclxuICogYOWwj+agh+mimGAg5aSE55CG5Yqf6IO9XHJcbiAqL1xyXG5jb25zdCB0b2dnbGVIZWFkaW5nU21hbGxlciA9IChlKSA9PiB7XHJcblxyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciB0b2dnbGluZyBoZWFkaW5nIHNpemU6IG5vcm1hbCAtPiBoNiAtPiBoNSAtPiBoNCAtPiBoMyAtPiBoMiAtPiBoMSAtPiBub3JtYWxcclxuICogYOWkp+agh+mimGAg5aSE55CG5Yqf6IO9XHJcbiAqL1xyXG5jb25zdCB0b2dnbGVIZWFkaW5nQmlnZ2VyID0gKGUpID0+IHtcclxuICBcclxufVxyXG5cclxuLy8g5qCH6aKY55u45YWzIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciB0b2dnbGUgQmxvY2txdW90ZS5cclxuICogYOW8leWPt2Ag5aSE55CG5Yqf6IO9XHJcbiAqL1xyXG5jb25zdCB0b2dnbGVCbG9ja3F1b3RlID0gKGUpID0+IHtcclxuICBlID0gZSB8fCB3aW5kb3dsLmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG4gIGNvbnN0IGNtID0gZWRpdG9yLiRjb2RlbWlycm9yO1xyXG5cclxuICAvLyDojrflj5blvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBjb25zdCB0eXBlID0gc2VsZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpIHx8ICdxdW90ZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKCdzdGFydCcpO1xyXG4gIGxldCBlbmRQb2ludCA9IGNtLmdldEN1cnNvcignZW5kJyk7XHJcbiAgY29uc3QgcmVwbCA9IHtcclxuXHRcdFwicXVvdGVcIjogL14oXFxzKilcXD5cXHMrLyxcclxuXHRcdFwidW5vcmRlcmVkLWxpc3RcIjogL14oXFxzKikoXFwqfFxcLXxcXCspXFxzKy8sXHJcblx0XHRcIm9yZGVyZWQtbGlzdFwiOiAvXihcXHMqKVxcZCtcXC5cXHMrL1xyXG5cdH07XHJcblx0Y29uc3QgbWFwID0ge1xyXG5cdFx0XCJxdW90ZVwiOiBcIj4gXCIsXHJcblx0XHRcInVub3JkZXJlZC1saXN0XCI6IFwiKiBcIixcclxuXHRcdFwib3JkZXJlZC1saXN0XCI6IFwiMS4gXCJcclxuICB9O1xyXG4gIFxyXG4gIGZvciAobGV0IGkgPSBzdGFydFBvaW50LmxpbmU7IGkgPD0gZW5kUG9pbnQubGluZTsgaSsrKSB7XHJcbiAgICBsZXQgdGV4dCA9IGNtLmdldExpbmUoaSk7XHJcbiAgICBpZihzdGF0W3R5cGVdKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVwbFt0eXBlXSwgJyQxJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0ZXh0ID0gbWFwW3R5cGVdICsgdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dCwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogMFxyXG4gICAgfSwge1xyXG4gICAgICBsaW5lOiBpLFxyXG4gICAgICBjaDogOTk5OTk5OTk5OTk5OTlcclxuICAgIH0pO1xyXG4gIH1cclxuICBjbS5mb2N1cygpO1xyXG5cclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIGNvZGUuXHJcbiAqIGDku6PnoIHlnZdgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZUNvZGVCbG9jayA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAnY29kZSc7XHJcbiAgLy8g5b2T5YmN5Z2X5a+55bqU55qEIG1hcmtkb3duIOexu+Weiy5cclxuICBjb25zdCBibG9ja1N0eWxlcyA9IGVkaXRvci5fb3B0aW9ucy4kdG9vbHMuYmxvY2tTdHlsZXNbdHlwZV07XHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICAvLyDmj5LlhaXlhoXlrrlcclxuICBsZXQgdGV4dDtcclxuICBsZXQgc3RhcnRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG4gIGxldCBlbmRDaGFycyA9IGJsb2NrU3R5bGVzO1xyXG5cclxuICBsZXQgc3RhcnRQb2ludCA9IGNtLmdldEN1cnNvcignc3RhcnQnKTtcclxuICBsZXQgZW5kUG9pbnQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpO1xyXG5cclxuICAvLyDlvZPliY3mv4DmtLvnmoTnsbvlnotcclxuICBpZiAoc3RhdFt0eXBlXSkge1xyXG4gICAgXHJcbiAgfSBlbHNlIHsgLy8g6ZyA6KaB5o+S5YWl55qE5YaF5a65XHJcbiAgICB0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgaWYodHlwZSA9PSBcImJvbGRcIikge1xyXG5cdFx0XHR0ZXh0ID0gdGV4dC5zcGxpdChcIioqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX19cIikuam9pbihcIlwiKTtcclxuXHRcdH0gZWxzZSBpZih0eXBlID09IFwiaXRhbGljXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCIqXCIpLmpvaW4oXCJcIik7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnNwbGl0KFwiX1wiKS5qb2luKFwiXCIpO1xyXG5cdFx0fSBlbHNlIGlmKHR5cGUgPT0gXCJzdHJpa2V0aHJvdWdoXCIpIHtcclxuXHRcdFx0dGV4dCA9IHRleHQuc3BsaXQoXCJ+flwiKS5qb2luKFwiXCIpO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY29kZVwiKSB7XHJcbiAgICAgIHRleHQgPSAnXFxuXFxuJztcclxuICAgIH1cclxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oc3RhcnRDaGFycyArIHRleHQgKyBlbmRDaGFycyk7XHJcblxyXG4gICAgc3RhcnRQb2ludC5jaCArPSBzdGFydENoYXJzLmxlbmd0aDtcclxuICAgIGVuZFBvaW50LmNoID0gc3RhcnRQb2ludC5jaCArIHRleHQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLy8gY20uc2V0U2VsZWN0aW9uKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcclxuICBjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgc3RhcnRQb2ludCk7XHJcbiAgY20uZm9jdXMoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlIFVub3JkZXJlZExpc3QuXHJcbiAqIGDml6Dluo/liJfooahgIOWkhOeQhuWKn+iDvVxyXG4gKi9cclxuY29uc3QgdG9nZ2xlVW5vcmRlcmVkTGlzdCA9IChlKSA9PiB7XHJcbiAgdG9nZ2xlQmxvY2txdW90ZShlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFjdGlvbiBmb3IgdG9nZ2xlT3JkZXJlZExpc3QuXHJcbiAqIGDmnInluo/liJfooahgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IHRvZ2dsZU9yZGVyZWRMaXN0ID0gKGUpID0+IHtcclxuICB0b2dnbGVCbG9ja3F1b3RlKGUpO1xyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciBkcmF3SW1hZ2UuXHJcbiAqIGDlm77niYdgIOWkhOeQhuWKn+iDvS5cclxuICovXHJcbmNvbnN0IGRyYXdJbWFnZSA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAncXVvdGUnO1xyXG5cclxuICAvLyDlvZPliY3lnZflr7nlupTnmoQgbWFya2Rvd24g57G75Z6LLlxyXG4gIGNvbnN0IGluc2VydFRleHRzID0gZWRpdG9yLl9vcHRpb25zLiR0b29scy5pbnNlcnRUZXh0c1t0eXBlXTtcclxuXHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBsZXQgdXJsID0gJyc7XHJcbiAgXHJcbiAgLy8gdXJsID0gcHJvbXB0KCfor7fovpPlhaXlm77niYflnLDlnYAnLCAnJyk7XHJcbiAgLy8gaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcclxuICBfcmVwbGFjZVNlbGVjdGlvbihjbSwgc3RhdC5pbWFnZSwgaW5zZXJ0VGV4dHMsIHVybCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIGRyYXdMaW5rLlxyXG4gKiBg6ZO+5o6lYCDlpITnkIblip/og70uXHJcbiAqL1xyXG5jb25zdCBkcmF3TGluayA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93bC5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuXHJcbiAgLy8g6I635Y+W5b2T5YmN5r+A5rS755qE57G75Z6LXHJcbiAgY29uc3QgdHlwZSA9IHNlbGYuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKSB8fCAncXVvdGUnO1xyXG5cclxuICAvLyDlvZPliY3lnZflr7nlupTnmoQgbWFya2Rvd24g57G75Z6LLlxyXG4gIGNvbnN0IGluc2VydFRleHRzID0gZWRpdG9yLl9vcHRpb25zLiR0b29scy5pbnNlcnRUZXh0c1t0eXBlXTtcclxuXHJcbiAgY29uc3Qgc3RhdCA9IGdldFN0YXRlKGNtKTtcclxuICBsZXQgdXJsID0gJyc7XHJcbiAgXHJcbiAgLy8gdXJsID0gcHJvbXB0KCfor7fovpPlhaXpk77mjqUnLCAnJyk7XHJcbiAgLy8gaWYgKCF1cmwpIHJldHVybiBmYWxzZTtcclxuICBfcmVwbGFjZVNlbGVjdGlvbihjbSwgc3RhdC5saW5rLCBpbnNlcnRUZXh0cywgdXJsKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWbvueJh+WSjOWcsOWdgOaPkuWFpeWGheWuueWkhOeQhi4gXHJcbiAqL1xyXG5mdW5jdGlvbiBfcmVwbGFjZVNlbGVjdGlvbihjbSwgYWN0aXZlLCBzdGFydEVuZCwgdXJsKSB7XHJcblx0dmFyIHRleHQ7XHJcblx0dmFyIHN0YXJ0ID0gc3RhcnRFbmRbMF07XHJcblx0dmFyIGVuZCA9IHN0YXJ0RW5kWzFdO1xyXG5cdHZhciBzdGFydFBvaW50ID0gY20uZ2V0Q3Vyc29yKFwic3RhcnRcIik7XHJcblx0dmFyIGVuZFBvaW50ID0gY20uZ2V0Q3Vyc29yKFwiZW5kXCIpO1xyXG5cdC8vIGlmKHVybCkge1xyXG4gIC8vICAgZW5kID0gZW5kLnJlcGxhY2UoXCIjdXJsI1wiLCB1cmwpO1xyXG4gIC8vIH1cclxuICBlbmQgPSBlbmQucmVwbGFjZShcIiN1cmwjXCIsIHVybCk7XHJcblx0aWYoYWN0aXZlKSB7XHJcblx0XHR0ZXh0ID0gY20uZ2V0TGluZShzdGFydFBvaW50LmxpbmUpO1xyXG5cdFx0c3RhcnQgPSB0ZXh0LnNsaWNlKDAsIHN0YXJ0UG9pbnQuY2gpO1xyXG5cdFx0ZW5kID0gdGV4dC5zbGljZShzdGFydFBvaW50LmNoKTtcclxuXHRcdGNtLnJlcGxhY2VSYW5nZShzdGFydCArIGVuZCwge1xyXG5cdFx0XHRsaW5lOiBzdGFydFBvaW50LmxpbmUsXHJcblx0XHRcdGNoOiAwXHJcblx0XHR9KTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0dGV4dCA9IGNtLmdldFNlbGVjdGlvbigpO1xyXG4gICAgY20ucmVwbGFjZVNlbGVjdGlvbihzdGFydCArIHRleHQgKyBlbmQpO1xyXG5cclxuXHRcdHN0YXJ0UG9pbnQuY2ggKz0gc3RhcnQubGVuZ3RoO1xyXG5cdFx0aWYoc3RhcnRQb2ludCAhPT0gZW5kUG9pbnQpIHtcclxuXHRcdFx0ZW5kUG9pbnQuY2ggKz0gc3RhcnQubGVuZ3RoO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRjbS5zZXRTZWxlY3Rpb24oc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xyXG4gIGNtLmZvY3VzKCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBY3Rpb24gZm9yIEJhY2suXHJcbiAqIOi/lOWbnuS4gOatpSjmkqTplIApLiBcclxuICovXHJcbmNvbnN0IG9uVW5kbyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG5cclxuICBjb25zdCBjbSA9IGVkaXRvci4kY29kZW1pcnJvcjtcclxuICBpZiAoY20pIHtcclxuICAgIGNvbnN0IGhpc3RvcnkgPSBjbS5nZXRIaXN0b3J5KCk7XHJcbiAgICBjb25zb2xlLmxvZygn5Zue6YCAJywgaGlzdG9yeSk7XHJcbiAgICBjbS51bmRvU2VsZWN0aW9uKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9uIGZvciBGcm9udC5cclxuICog5YmN6L+b5LiA5q2lKOmHjeWBmikuXHJcbiAqL1xyXG5jb25zdCBvblJlZG8gPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuXHJcbiAgaWYgKCFFRElUT1IpIEVESVRPUiA9IGVkaXRvcjtcclxuXHJcbiAgY29uc3QgY20gPSBlZGl0b3IuJGNvZGVtaXJyb3I7XHJcbiAgaWYgKGNtKSB7XHJcbiAgICBjb25zdCBoaXN0b3J5ID0gY20uZ2V0SGlzdG9yeSgpO1xyXG4gICAgY29uc29sZS5sb2coJ+WPlua2iOaSpOmUgCcsIGhpc3RvcnkpO1xyXG4gICAgY20ucmVkb1NlbGVjdGlvbigpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7heaYvuekuue8lui+kemDqOWIhlxyXG4gKi9cclxuY29uc3Qgb3BlbkVkaXQgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuXHJcbiAgaWYgKCFFRElUT1IpIEVESVRPUiA9IGVkaXRvcjtcclxuICBjb25zdCBpc09ubHlFZGl0ID0gRURJVE9SLiRzdGF0dXNbJ2lzT25seUVkaXQnXTtcclxuXHJcbiAgLy8g5b2T5YmN5Y+q5pi+56S657yW6L6R5pWI5p6cXHJcbiAgaWYgKGlzT25seUVkaXQpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seUVkaXQnXSA9IHRydWU7XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seVByZXZpZXcnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddO1xyXG4gIEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddO1xyXG5cclxuICB0b2dnbGVDbGFzcyhzZWxmLCAnYWN0aXZlJyk7XHJcblxyXG4gIC8vIOmakOiXjyBg6aKE6KeI5a655ZmoYO+8jOaYvuekuiBg5YaF5a6557yW6L6R5a655ZmoYC5cclxuICBjb25zdCBlZGl0b3JFbCA9IEVESVRPUi5fb3B0aW9ucy5lbDtcclxuICBjb25zdCBwcmV2aWV3RWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXByZXZpZXcnKTtcclxuICBjb25zdCBtZEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1tZCcpO1xyXG4gIGlmIChtZEVsKSByZW1vdmVDbGFzcyhtZEVsLCAnaGlkZScpO1xyXG4gIGlmIChwcmV2aWV3RWwpIGFkZENsYXNzKHByZXZpZXdFbCwgJ2hpZGUnKTtcclxuXHJcbiAgLy8gYOWPquaYvuekuumihOiniOWbvuagh2Ag5Y675o6J5r+A5rS754q25oCBLlxyXG4gIGNvbnN0IHRvb2xQcmV2aWV3RWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXRvb2xzJykucXVlcnlTZWxlY3RvcignLmljb24tZXllJyk7XHJcbiAgY29uc3QgdG9vbFNob3dBbGxFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1jb2x1bW5zJyk7XHJcbiAgaWYgKHRvb2xQcmV2aWV3RWwpIHJlbW92ZUNsYXNzKHRvb2xQcmV2aWV3RWwsICdhY3RpdmUnKTtcclxuICBpZiAodG9vbFNob3dBbGxFbCkgcmVtb3ZlQ2xhc3ModG9vbFNob3dBbGxFbCwgJ2FjdGl2ZScpO1xyXG59XHJcblxyXG4vKipcclxuICog5pi+56S657yW6L6R5ZKM6aKE6KeILlxyXG4gKi9cclxuY29uc3Qgb3BlbkNvbXBhcmUgPSAoZSkgPT4ge1xyXG4gIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBjb25zdCBzZWxmID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gIGNvbnN0IGVkaXRvciA9IHNlbGYuJGVkaXRvcjtcclxuXHJcbiAgaWYgKCFFRElUT1IpIEVESVRPUiA9IGVkaXRvcjtcclxuICBjb25zdCBpc1Nob3dBbGwgPSBFRElUT1IuJHN0YXR1c1snaXNTaG93QWxsJ107XHJcblxyXG4gIC8vIOW9k+WJjeWPquaYvuekuue8lui+keaViOaenFxyXG4gIGlmIChpc1Nob3dBbGwpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzU2hvd0FsbCddID0gdHJ1ZTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuICBFRElUT1IuJHN0YXR1c1snaXNPbmx5RWRpdCddID0gIUVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXTtcclxuXHJcbiAgdG9nZ2xlQ2xhc3Moc2VsZiwgJ2FjdGl2ZScpO1xyXG5cclxuICAvLyDmmL7npLogYOmihOiniOWuueWZqGDvvIzmmL7npLogYOWGheWuuee8lui+keWuueWZqGAuXHJcbiAgY29uc3QgZWRpdG9yRWwgPSBFRElUT1IuX29wdGlvbnMuZWw7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgY29uc3QgbWRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItbWQnKTtcclxuICBpZiAobWRFbCkgcmVtb3ZlQ2xhc3MobWRFbCwgJ2hpZGUnKTtcclxuICBpZiAocHJldmlld0VsKSByZW1vdmVDbGFzcyhwcmV2aWV3RWwsICdoaWRlJyk7XHJcblxyXG4gIC8vIOWOu+aOiSBg57yW6L6RYCBg6aKE6KeIYCDmv4DmtLvmlYjmnpwuXHJcbiAgY29uc3QgdG9vbEVkaXRFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1wZW4nKTtcclxuICBjb25zdCB0b29sUHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLWV5ZScpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xQcmV2aWV3RWwpIHJlbW92ZUNsYXNzKHRvb2xQcmV2aWV3RWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOS7heaYvuekuumihOiniOmDqOWIhi4gXHJcbiAqL1xyXG5jb25zdCBvcGVuUHJldmlldyA9IChlKSA9PiB7XHJcbiAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xyXG4gIGNvbnN0IHNlbGYgPSBlLmN1cnJlbnRUYXJnZXQ7XHJcbiAgY29uc3QgZWRpdG9yID0gc2VsZi4kZWRpdG9yO1xyXG5cclxuICBpZiAoIUVESVRPUikgRURJVE9SID0gZWRpdG9yO1xyXG4gIGNvbnN0IGlzT25seVByZXZpZXcgPSBFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICAvLyDlvZPliY3lj6rmmL7npLrpooTop4jop4blm74uXHJcbiAgaWYgKGlzT25seVByZXZpZXcpIHJldHVybjtcclxuXHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seVByZXZpZXcnXSA9IHRydWU7XHJcbiAgRURJVE9SLiRzdGF0dXNbJ2lzT25seUVkaXQnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG4gIEVESVRPUi4kc3RhdHVzWydpc1Nob3dBbGwnXSA9ICFFRElUT1IuJHN0YXR1c1snaXNPbmx5UHJldmlldyddO1xyXG5cclxuICB0b2dnbGVDbGFzcyhzZWxmLCAnYWN0aXZlJyk7XHJcblxyXG4gIC8vIOaYvuekuu+8miBg6aKE6KeI5a655ZmoYO+8jOmakOiXj++8mmDlhoXlrrnnvJbovpHlrrnlmahgLlxyXG4gIGNvbnN0IGVkaXRvckVsID0gRURJVE9SLl9vcHRpb25zLmVsO1xyXG4gIGNvbnN0IG1kRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLW1kJyk7XHJcbiAgY29uc3QgcHJldmlld0VsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1wcmV2aWV3Jyk7XHJcbiAgaWYgKG1kRWwpIGFkZENsYXNzKG1kRWwsICdoaWRlJyk7XHJcbiAgaWYgKHByZXZpZXdFbCkgcmVtb3ZlQ2xhc3MocHJldmlld0VsLCAnaGlkZScpO1xyXG5cclxuICAvLyBg5Y+q5pi+56S657yW6L6R5Zu+5qCHYCDljrvmjonmv4DmtLvnirbmgIFcclxuICBjb25zdCB0b29sRWRpdEVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci10b29scycpLnF1ZXJ5U2VsZWN0b3IoJy5pY29uLXBlbicpO1xyXG4gIGNvbnN0IHRvb2xTaG93QWxsRWwgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXRvb2xzJykucXVlcnlTZWxlY3RvcignLmljb24tY29sdW1ucycpO1xyXG4gIGlmICh0b29sRWRpdEVsKSByZW1vdmVDbGFzcyh0b29sRWRpdEVsLCAnYWN0aXZlJyk7XHJcbiAgaWYgKHRvb2xTaG93QWxsRWwpIHJlbW92ZUNsYXNzKHRvb2xTaG93QWxsRWwsICdhY3RpdmUnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWFqOWxj+aMiemSrueCueWHu+WkhOeQhuWbnuiwgy4gXHJcbiAqL1xyXG5jb25zdCBvcGVuRnVsbFNjcmVlbiA9IChlKSA9PiB7XHJcbiAgY29tbW9GbkhhbmxkZShlKTtcclxuXHJcbiAgY29uc3QgZWRpdG9yRWwgPSBFRElUT1IuX29wdGlvbnMuZWw7XHJcblxyXG4gIHRvZ2dsZUNsYXNzKGVkaXRvckVsLCAnZnVsbHNjcmVlbicpO1xyXG59XHJcblxyXG4vKipcclxuICogYOWFs+S6jmAg54K55Ye75aSE55CG5Zue6LCDLlxyXG4gKi9cclxuY29uc3QgYWJvdXRFZGl0b3IgPSAoKSA9PiB7XHJcbiAgd2luZG93Lm9wZW4oZ2l0R3ViVXJsKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRvb2xzIOWbvuagh+eCueWHu+Wbnuiwg+WkhOeQhuWHveaVsOS4reebuOWQjOeahOWkhOeQhumDqOWIhi4gXHJcbiAqIFxyXG4gKiBAcGFyYW0ge09iamVjdH0gZSDop6blj5Hlm77moIflr7nlupTlm57osIPnmoTkuovku7blr7nosaEuXHJcbiAqIEByZXR1cm4ge09iamVjdH0gZWRpdG9yIOe8lui+keWZqOWunuS+i+WvueixoS5cclxuICovXHJcbmZ1bmN0aW9uIGNvbW1vRm5IYW5sZGUgKGUpIHtcclxuICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgY29uc3Qgc2VsZiA9IGUuY3VycmVudFRhcmdldDtcclxuICBjb25zdCBlZGl0b3IgPSBzZWxmLiRlZGl0b3I7XHJcblxyXG4gIHRvZ2dsZUNsYXNzKHNlbGYsICdhY3RpdmUnKTtcclxuXHJcbiAgaWYgKCFFRElUT1IpIEVESVRPUiA9IGVkaXRvcjtcclxuXHJcbiAgcmV0dXJuIGVkaXRvcjtcclxufVxyXG5cclxuLy8g5oyJ6ZKu5a6a5LmJXHJcbmNvbnN0IHRvb2xiYXJCdWlsdEluQnV0dG9ucyA9IHtcclxuICAnYm9sZCc6IHtcclxuICAgIG5hbWU6ICdib2xkJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlQm9sZCxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tYm9sZCcsXHJcbiAgICB0aXRsZTogJ0JvbGQnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAwLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdpdGFsaWMnOiB7XHJcbiAgICBuYW1lOiAnaXRhbGljJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlSXRhbGljLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1pdGFsaWMnLFxyXG4gICAgdGl0bGU6ICdJdGFsaWMnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAxLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdoZWFkaW5nJzoge1xyXG4gICAgbmFtZTogJ2hlYWRpbmcnLFxyXG4gICAgYWN0aW9uOiB0b2dnbGVIZWFkaW5nLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1oZWFkaW5nJyxcclxuICAgIHRpdGxlOiAnSGVhZGluZycsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDIsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ3F1b3RlJzoge1xyXG4gICAgbmFtZTogJ3F1b3RlJyxcclxuICAgIGFjdGlvbjogdG9nZ2xlQmxvY2txdW90ZSxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tcXVvdGF0aW9uLW1hcmtzJyxcclxuICAgIHRpdGxlOiAnUXVvdGUnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAzLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdjb2RlJzoge1xyXG4gICAgbmFtZTogJ2NvZGUnLFxyXG4gICAgYWN0aW9uOiB0b2dnbGVDb2RlQmxvY2ssXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWNvZGUnLFxyXG4gICAgdGl0bGU6ICdDb2RlJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogNCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAndW5vcmRlcmVkLWxpc3QnOiB7XHJcbiAgICBuYW1lOiAndW5vcmRlcmVkLWxpc3QnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1MaXN0b2Zpc3N1ZXMnLFxyXG4gICAgYWN0aW9uOiB0b2dnbGVVbm9yZGVyZWRMaXN0LFxyXG4gICAgdGl0bGU6ICdHZW5lcmljIExpc3QnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiA1LFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdvcmRlcmVkLWxpc3QnOiB7XHJcbiAgICBuYW1lOiAnb3JkZXJlZC1saXN0JyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tbGlzdCcsXHJcbiAgICBhY3Rpb246IHRvZ2dsZU9yZGVyZWRMaXN0LFxyXG4gICAgdGl0bGU6ICdOdW1iZXIgTGlzdCcsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDYsXHJcbiAgICBpc0VkaXRUb29sczogdHJ1ZVxyXG4gIH0sXHJcbiAgJ2xpbmsnOiB7XHJcbiAgICBuYW1lOiAnbGluaycsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWxpbmsnLFxyXG4gICAgYWN0aW9uOiBkcmF3TGluayxcclxuICAgIHRpdGxlOiAnSW5zZXJ0IExpbmsnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiA3LFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdpbWFnZSc6IHtcclxuICAgIG5hbWU6ICdpbWFnZScsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLWltZycsXHJcbiAgICBhY3Rpb246IGRyYXdJbWFnZSxcclxuICAgIHRpdGxlOiAnSW5zZXJ0IEltYWdlJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogOCxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAndW5kbyc6IHtcclxuICAgIG5hbWU6ICd1bmRvJyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tZ29MZWZ0JyxcclxuICAgIGFjdGlvbjogb25VbmRvLFxyXG4gICAgdGl0bGU6ICdVbmRvJyxcclxuICAgIGRlZmF1bHQ6IHRydWUsXHJcbiAgICBpbmRleDogOSxcclxuICAgIGlzRWRpdFRvb2xzOiB0cnVlXHJcbiAgfSxcclxuICAncmVkbyc6IHtcclxuICAgIG5hbWU6ICdyZWRvJyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tZ29SaWdodCcsXHJcbiAgICBhY3Rpb246IG9uUmVkbyxcclxuICAgIHRpdGxlOiAnUmVkbycsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDEwLFxyXG4gICAgaXNFZGl0VG9vbHM6IHRydWVcclxuICB9LFxyXG4gICdhYm91dCc6IHtcclxuICAgIG5hbWU6ICdhYm91dCcsXHJcbiAgICBjbGFzc05hbWU6ICdpY29uLXF1ZXN0aW9uJyxcclxuICAgIGFjdGlvbjogYWJvdXRFZGl0b3IsXHJcbiAgICB0aXRsZTogJ0Fib3V0IEVkaXRvcicsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDAsXHJcbiAgICBpc0VkaXRUb29sczogZmFsc2VcclxuICB9LFxyXG4gICdlZGl0Jzoge1xyXG4gICAgbmFtZTogJ2VkaXQnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1wZW4nLFxyXG4gICAgYWN0aW9uOiBvcGVuRWRpdCxcclxuICAgIHRpdGxlOiAnVG9nZ2xlIEVkaXQnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAxLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAnY29tcGFyZSc6IHtcclxuICAgIG5hbWU6ICdjb21wYXJlJyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tY29sdW1ucycsXHJcbiAgICBhY3Rpb246IG9wZW5Db21wYXJlLFxyXG4gICAgdGl0bGU6ICdUb2dnbGUgQ29tcGFyZScsXHJcbiAgICBkZWZhdWx0OiB0cnVlLFxyXG4gICAgaW5kZXg6IDIsXHJcbiAgICBpc0VkaXRUb29sczogZmFsc2VcclxuICB9LFxyXG4gICdwcmV2aWV3Jzoge1xyXG4gICAgbmFtZTogJ3ByZXZpZXcnLFxyXG4gICAgY2xhc3NOYW1lOiAnaWNvbi1leWUnLFxyXG4gICAgYWN0aW9uOiBvcGVuUHJldmlldyxcclxuICAgIHRpdGxlOiAnVG9nZ2xlIFByZXZpZXcnLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiAzLFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuICAnZnVsbHNjcmVlbic6IHtcclxuICAgIG5hbWU6ICdmdWxsc2NyZWVuJyxcclxuICAgIGNsYXNzTmFtZTogJ2ljb24tZnVsbC1zY3JlZW4nLFxyXG4gICAgYWN0aW9uOiBvcGVuRnVsbFNjcmVlbixcclxuICAgIHRpdGxlOiAnVG9nZ2xlIEZ1bGxzY3JlZW4nLFxyXG4gICAgZGVmYXVsdDogdHJ1ZSxcclxuICAgIGluZGV4OiA0LFxyXG4gICAgaXNFZGl0VG9vbHM6IGZhbHNlXHJcbiAgfSxcclxuXHJcbn1cclxuXHJcbi8qKiDmoLzlvI8gKi9cclxuY29uc3QgaW5zZXJ0VGV4dHMgPSB7XHJcbiAgbGluazogW1wiW1wiLCBcIl0oI3VybCMpXCJdLFxyXG5cdGltYWdlOiBbXCIhW10oXCIsIFwiI3VybCMpXCJdLFxyXG5cdHRhYmxlOiBbXCJcIiwgXCJcXG5cXG58IENvbHVtbiAxIHwgQ29sdW1uIDIgfCBDb2x1bW4gMyB8XFxufCAtLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0gfFxcbnwgVGV4dCAgICAgfCBUZXh0ICAgICB8IFRleHQgICAgIHxcXG5cXG5cIl0sXHJcblx0aG9yaXpvbnRhbFJ1bGU6IFtcIlwiLCBcIlxcblxcbi0tLS0tXFxuXFxuXCJdXHJcbn1cclxuXHJcbi8qKiDov5znqIvnmoTmloflrZcuICovXHJcbmNvbnN0IHByb21wdFRleHRzID0ge1xyXG5cdGxpbms6IFwiVVJMIGZvciB0aGUgbGluazpcIixcclxuXHRpbWFnZTogXCJVUkwgb2YgdGhlIGltYWdlOlwiXHJcbn1cclxuXHJcbi8qKiBNYXJrZG93biDnvKnlhpkgKi9cclxuY29uc3QgYmxvY2tTdHlsZXMgPSB7XHJcbiAgXCJib2xkXCI6IFwiKipcIixcclxuXHRcImNvZGVcIjogXCJgYGBcIixcclxuXHRcIml0YWxpY1wiOiBcIipcIlxyXG59XHJcblxyXG4vKiog5b+r5o236ZSuICovXHJcbmNvbnN0IHNob3J0Y3V0cyA9IHtcclxuICBcImJvbGRcIjogXCJDbWQtQlwiLFxyXG5cdFwiaXRhbGljXCI6IFwiQ21kLUlcIixcclxuXHRcImxpbmtcIjogXCJDbWQtS1wiLFxyXG4gIFwiaGVhZGluZ1wiOiBcIkNtZC1IXCIsXHJcbiAgXCJxdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJ0b2dnbGVIZWFkaW5nQmlnZ2VyXCI6IFwiU2hpZnQtQ21kLUhcIixcclxuXHRcImNsZWFuQmxvY2tcIjogXCJDbWQtRVwiLFxyXG4gIFwiaW1hZ2VcIjogXCJDbWQtQWx0LUlcIixcclxuICBcImJhY2tcIjogXCJDbWQtWlwiLFxyXG4gIFwiZnJvbnRcIjogXCJDbWQtWVwiLFxyXG5cdFwidG9nZ2xlQmxvY2txdW90ZVwiOiBcIkNtZC0nXCIsXHJcblx0XCJvcmRlcmVkLWxpc3RcIjogXCJDbWQtQWx0LUxcIixcclxuXHRcInVub3JkZXJlZC1saXN0XCI6IFwiQ21kLUxcIixcclxuXHRcInRvZ2dsZUNvZGVCbG9ja1wiOiBcIkNtZC1BbHQtQ1wiLFxyXG5cdFwidG9nZ2xlUHJldmlld1wiOiBcIkNtZC1QXCIsXHJcblx0XCJ0b2dnbGVTaWRlQnlTaWRlXCI6IFwiRjlcIixcclxuXHRcInRvZ2dsZUZ1bGxTY3JlZW5cIjogXCJGMTFcIlxyXG59XHJcblxyXG4vKipcclxuICog5b+r5o236ZSu6ZKI5a+55LiN5ZCM57O757uf5YGa5YW85a655aSE55CGLlxyXG4gKiBAcGFyYW0ge29iamV0fSBuYW1lIFxyXG4gKiBAZGVzYyB3aW46IEN0cmw7IG1hYzogQ21kXHJcbiAqL1xyXG5jb25zdCBmaXhTaG9ydGN1dCA9IChuYW1lKSA9PiB7XHJcbiAgaWYgKGlzTWFjKSB7XHJcbiAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCdDdHJsJywgJ0NtZCcpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCdDbWQnLCAnQ3RybCcpO1xyXG4gIH1cclxuICByZXR1cm4gbmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8vIOW3peWFt+adoeWbvuagh+OAgeexu+WQjeOAgeWbnuiwg+WHveaVsOetiS5cclxuICB0b29sYmFyQnVpbHRJbkJ1dHRvbnMsXHJcblxyXG4gIGluc2VydFRleHRzLFxyXG5cclxuICBwcm9tcHRUZXh0cyxcclxuXHJcbiAgYmxvY2tTdHlsZXMsXHJcblxyXG4gIC8vIOW/q+aNt+mUrlxyXG4gIHNob3J0Y3V0cyxcclxuXHJcbiAgLy8gQ3RybChXaW4gT1MpIOi/mOaYryBDbWQoTWFjIE9TKVxyXG4gIGZpeFNob3J0Y3V0LFxyXG5cclxufSIsImNvbnN0IFV0aWwgPSB7XHJcbiAgLyoqXHJcbiAgICogTWVyZ2UgdGhlIHByb3BlcnRpZXMgb2Ygb25lIG9iamVjdCBpbnRvIGFub3RoZXIuXHJcbiAgICog5bCG5LiA5Liq5a+56LGh55qE5bGe5oCn5ZCI5bm25Yiw5Y+m5LiA5Liq5a+56LGh5LiKLiBcclxuICAgKi9cclxuICBfbWVyZ2VQcm9wZXJ0aWVzKHRhcmdldCwgc291cmNlKSB7XHJcbiAgICBmb3IgKGxldCBwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcclxuICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuICAgICAgICBpZiAoc291Y2VbcHJvcGVydHldIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BlcnR5XSBpbnN0YW5jZW9mIEFycmF5ID8gdGFyZ2V0W3Byb3BlcnR5XSA6IFtdO1xyXG4gICAgICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV0uY29uY2F0KHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgc291cmNlW3Byb3BlcnR5XSAhPSBudWxsICYmXHJcbiAgICAgICAgICB0eXBlb2Ygc291cmNlW3Byb3BlcnR5XSA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0uY29uc3RydWN0b3IgPT09IE9iamVjdCApIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRhcmdldFtwcm9wZXJ0eV0gPSB0aGlzLl9tZXJnZVByb3BlcnRpZXModGFyZ2V0W3Byb3BlcnR5XSB8fCB7fSwgc291Y2VbcHJvcGVydHldKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGFyZ2V0W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxuICB9LFxyXG4gIFxyXG4gIC8qKiBcclxuICAgKiBNZXJnZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG9iamVjdHMgaW50IG9uZS5cclxuICAgKiDlsIbku7vmhI/mlbDph4/nmoTlr7nosaHlkIjlubbliLDkuIDkuKrlr7nosaHkuIouXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHt9IHRhcmdldCBcclxuICAgKi9cclxuICBleHRlbmQodGFyZ2V0KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0YXJnZXQgPSB0aGlzLl9tZXJnZVByb3BlcnRpZXModGFyZ2V0LCBhcmd1bWVudHNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgfSxcclxuXHJcbiAgaXNNYWM6IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxcclxuXHJcbiAgLyoqXHJcbiAgICog5YWD57Sg5qC35byP5YiH5o2iLiBcclxuICAgKi9cclxuICB0b2dnbGVDbGFzcyhlbCwgY2xhc3NOYW1lKSB7XHJcbiAgICBpZiAodHlwZW9mIGVsICE9PSAnb2JqZWN0JykgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNFeGlzdCA9IGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xyXG4gICAgaWYgKGlzRXhpc3QpIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIOWFg+e0oOagt+W8j+WinuWKoC4gXHJcbiAgICovXHJcbiAgYWRkQ2xhc3MoZWwsIGNsYXNzTmFtZSkge1xyXG4gICAgaWYgKHR5cGVvZiBlbCAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuICAgIGNvbnN0IGlzRXhpc3QgPSBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcclxuICAgIGlmICghaXNFeGlzdCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgfSxcclxuICAvKipcclxuICAgKiDlhYPntKDmoLflvI/liKDpmaQuIFxyXG4gICAqL1xyXG4gIHJlbW92ZUNsYXNzKGVsLCBjbGFzc05hbWUpIHtcclxuICAgIGlmICh0eXBlb2YgZWwgIT09ICdvYmplY3QnKSByZXR1cm47XHJcbiAgICBjb25zdCBpc0V4aXN0ID0gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XHJcbiAgICBpZiAoaXNFeGlzdCkge1xyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICog5a+56LGh6L2s5Li65pWw57uELlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmog6ZyA6KaB6L2s5o2i55qE5a+56LGhLiBcclxuICAgKi9cclxuICBvYmoyQXJyKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm47XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYXJyID0gW107XHJcbiAgICBjb25zdCBrZXlBcnIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopO1xyXG4gICAgaWYgKGtleUFyci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB2YWx1ZTtcclxuICAgICAga2V5QXJyLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdmFsdWUgPSBvYmpbaXRlbV07XHJcbiAgICAgICAgYXJyLnB1c2godmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICog5Yik5pat5piv5ZCm5Li65Ye95pWwLiBcclxuICAgKi9cclxuICBpc0Z1bmN0aW9uKGZuKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbDsiLCJpbXBvcnQgbGFuZyBmcm9tICcuL2xhbmcvZW4nO1xyXG5cclxuY29uc3QgY29uZmlnID0ge1xyXG4gIGJhc2VVcmw6ICdodHRwczovL3d3dy5naXRodWIuY29tJyxcclxuICAvKiog6Zi/6YeM5Zu+5qCH6L+e5o6lICovXHJcbiAgaWNvbkxpbms6ICcvL2F0LmFsaWNkbi5jb20vdC9mb250XzgyMzAzMF9neHZrZ2FocHg0OS5jc3MnLFxyXG4gIGdpdEd1YlVybDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9KZXNvbmh1L2Nvb2wtbWQtZWRpdG9yJyxcclxuICBlZGl0b3I6IHtcclxuICAgIC8qKiDmt7vliqDnu5lg57yW6L6R5ZmoYOmhtue6p+WuueWZqOeahOagt+W8j+exu+WQjSAqL1xyXG4gICAgY2xhc3NOYW1lOiB7XHJcbiAgICAgIC8qKiDpu5HoibLkuLvpopggKi9cclxuICAgICAgdGhlbWVEYXJrOiAnZWRpdG9yLXRoZW1lLWRhcmsnLFxyXG4gICAgICAvKiog5Lqu6Imy5Li76aKYICovXHJcbiAgICAgIHRoZW1lTGlnaHQ6ICdlZGl0b3ItdGhlbWUtbGlnaHQnLFxyXG4gICAgICAvKiog5YWo5bGPICovXHJcbiAgICAgIGZ1bGxzY3JlZW46ICdlZGl0b3Itc3RhdHVzX2Z1bGxzY3JlZW4nLFxyXG4gICAgICAvKiog5a+55q+U6aKE6KeIICovXHJcbiAgICAgIGNvbXBhcmU6ICdlZGl0b3Itc3RhdHVzX3Nob3ctYWxsJyxcclxuICAgICAgLyoqIOS7hee8lui+kSAqL1xyXG4gICAgICBlZGl0OiAnZWRpdG9yLXN0YXR1c19vbmx5LWVkaXQnLFxyXG4gICAgICAvKiog5LuF55yL6aKE6KeIICovXHJcbiAgICAgIHByZXZpZXc6ICdlZGl0b3Itc3RhdHVzX29ubHktcHJldmlldycsXHJcbiAgICB9LFxyXG4gICAgdGhlbWU6IHtcclxuICAgICAgZGFyazoge1xyXG4gICAgICAgIGNsYXNzTmFtZTogJ2VkaXRvci10aGVtZS1kYXJrJyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWRhcmsnXHJcbiAgICAgIH0sXHJcbiAgICAgIGxpZ2h0OiB7XHJcbiAgICAgICAgY2xhc3NOYW1lOiAnZWRpdG9yLXRoZW1lLWxpZ2h0JyxcclxuICAgICAgICBtb2RlOiAnYmFzZTE2LWxpZ2h0J1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbGFuZ3VhZ2U6IGxhbmdcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZzsiLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4veG1sL3htbFwiKSwgcmVxdWlyZShcIi4uL21ldGFcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi94bWwveG1sXCIsIFwiLi4vbWV0YVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG5Db2RlTWlycm9yLmRlZmluZU1vZGUoXCJtYXJrZG93blwiLCBmdW5jdGlvbihjbUNmZywgbW9kZUNmZykge1xuXG4gIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgXCJ0ZXh0L2h0bWxcIik7XG4gIHZhciBodG1sTW9kZU1pc3NpbmcgPSBodG1sTW9kZS5uYW1lID09IFwibnVsbFwiXG5cbiAgZnVuY3Rpb24gZ2V0TW9kZShuYW1lKSB7XG4gICAgaWYgKENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUpIHtcbiAgICAgIHZhciBmb3VuZCA9IENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUobmFtZSk7XG4gICAgICBpZiAoZm91bmQpIG5hbWUgPSBmb3VuZC5taW1lIHx8IGZvdW5kLm1pbWVzWzBdO1xuICAgIH1cbiAgICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgbmFtZSk7XG4gICAgcmV0dXJuIG1vZGUubmFtZSA9PSBcIm51bGxcIiA/IG51bGwgOiBtb2RlO1xuICB9XG5cbiAgLy8gU2hvdWxkIGNoYXJhY3RlcnMgdGhhdCBhZmZlY3QgaGlnaGxpZ2h0aW5nIGJlIGhpZ2hsaWdodGVkIHNlcGFyYXRlP1xuICAvLyBEb2VzIG5vdCBpbmNsdWRlIGNoYXJhY3RlcnMgdGhhdCB3aWxsIGJlIG91dHB1dCAoc3VjaCBhcyBgMS5gIGFuZCBgLWAgZm9yIGxpc3RzKVxuICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nID0gZmFsc2U7XG5cbiAgLy8gTWF4aW11bSBudW1iZXIgb2YgbmVzdGVkIGJsb2NrcXVvdGVzLiBTZXQgdG8gMCBmb3IgaW5maW5pdGUgbmVzdGluZy5cbiAgLy8gRXhjZXNzIGA+YCB3aWxsIGVtaXQgYGVycm9yYCB0b2tlbi5cbiAgaWYgKG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5tYXhCbG9ja3F1b3RlRGVwdGggPSAwO1xuXG4gIC8vIFR1cm4gb24gdGFzayBsaXN0cz8gKFwiLSBbIF0gXCIgYW5kIFwiLSBbeF0gXCIpXG4gIGlmIChtb2RlQ2ZnLnRhc2tMaXN0cyA9PT0gdW5kZWZpbmVkKSBtb2RlQ2ZnLnRhc2tMaXN0cyA9IGZhbHNlO1xuXG4gIC8vIFR1cm4gb24gc3RyaWtldGhyb3VnaCBzeW50YXhcbiAgaWYgKG1vZGVDZmcuc3RyaWtldGhyb3VnaCA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcuc3RyaWtldGhyb3VnaCA9IGZhbHNlO1xuXG4gIGlmIChtb2RlQ2ZnLmVtb2ppID09PSB1bmRlZmluZWQpXG4gICAgbW9kZUNmZy5lbW9qaSA9IGZhbHNlO1xuXG4gIGlmIChtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZyA9PT0gdW5kZWZpbmVkKVxuICAgIG1vZGVDZmcuZmVuY2VkQ29kZUJsb2NrSGlnaGxpZ2h0aW5nID0gdHJ1ZTtcblxuICBpZiAobW9kZUNmZy54bWwgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLnhtbCA9IHRydWU7XG5cbiAgLy8gQWxsb3cgdG9rZW4gdHlwZXMgdG8gYmUgb3ZlcnJpZGRlbiBieSB1c2VyLXByb3ZpZGVkIHRva2VuIHR5cGVzLlxuICBpZiAobW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXMgPT09IHVuZGVmaW5lZClcbiAgICBtb2RlQ2ZnLnRva2VuVHlwZU92ZXJyaWRlcyA9IHt9O1xuXG4gIHZhciB0b2tlblR5cGVzID0ge1xuICAgIGhlYWRlcjogXCJoZWFkZXJcIixcbiAgICBjb2RlOiBcImNvbW1lbnRcIixcbiAgICBxdW90ZTogXCJxdW90ZVwiLFxuICAgIGxpc3QxOiBcInZhcmlhYmxlLTJcIixcbiAgICBsaXN0MjogXCJ2YXJpYWJsZS0zXCIsXG4gICAgbGlzdDM6IFwia2V5d29yZFwiLFxuICAgIGhyOiBcImhyXCIsXG4gICAgaW1hZ2U6IFwiaW1hZ2VcIixcbiAgICBpbWFnZUFsdFRleHQ6IFwiaW1hZ2UtYWx0LXRleHRcIixcbiAgICBpbWFnZU1hcmtlcjogXCJpbWFnZS1tYXJrZXJcIixcbiAgICBmb3JtYXR0aW5nOiBcImZvcm1hdHRpbmdcIixcbiAgICBsaW5rSW5saW5lOiBcImxpbmtcIixcbiAgICBsaW5rRW1haWw6IFwibGlua1wiLFxuICAgIGxpbmtUZXh0OiBcImxpbmtcIixcbiAgICBsaW5rSHJlZjogXCJzdHJpbmdcIixcbiAgICBlbTogXCJlbVwiLFxuICAgIHN0cm9uZzogXCJzdHJvbmdcIixcbiAgICBzdHJpa2V0aHJvdWdoOiBcInN0cmlrZXRocm91Z2hcIixcbiAgICBlbW9qaTogXCJidWlsdGluXCJcbiAgfTtcblxuICBmb3IgKHZhciB0b2tlblR5cGUgaW4gdG9rZW5UeXBlcykge1xuICAgIGlmICh0b2tlblR5cGVzLmhhc093blByb3BlcnR5KHRva2VuVHlwZSkgJiYgbW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXNbdG9rZW5UeXBlXSkge1xuICAgICAgdG9rZW5UeXBlc1t0b2tlblR5cGVdID0gbW9kZUNmZy50b2tlblR5cGVPdmVycmlkZXNbdG9rZW5UeXBlXTtcbiAgICB9XG4gIH1cblxuICB2YXIgaHJSRSA9IC9eKFsqXFwtX10pKD86XFxzKlxcMSl7Mix9XFxzKiQvXG4gICwgICBsaXN0UkUgPSAvXig/OlsqXFwtK118XlswLTldKyhbLildKSlcXHMrL1xuICAsICAgdGFza0xpc3RSRSA9IC9eXFxbKHh8IClcXF0oPz1cXHMpL2kgLy8gTXVzdCBmb2xsb3cgbGlzdFJFXG4gICwgICBhdHhIZWFkZXJSRSA9IG1vZGVDZmcuYWxsb3dBdHhIZWFkZXJXaXRob3V0U3BhY2UgPyAvXigjKykvIDogL14oIyspKD86IHwkKS9cbiAgLCAgIHNldGV4dEhlYWRlclJFID0gL14gKig/OlxcPXsxLH18LXsxLH0pXFxzKiQvXG4gICwgICB0ZXh0UkUgPSAvXlteIyFcXFtcXF0qX1xcXFw8PmAgXCInKH46XSsvXG4gICwgICBmZW5jZWRDb2RlUkUgPSAvXih+fn4rfGBgYCspWyBcXHRdKihbXFx3KyMtXSopW15cXG5gXSokL1xuICAsICAgbGlua0RlZlJFID0gL15cXHMqXFxbW15cXF1dKz9cXF06LiokLyAvLyBuYWl2ZSBsaW5rLWRlZmluaXRpb25cbiAgLCAgIHB1bmN0dWF0aW9uID0gL1shXFxcIiMkJSZcXCcoKSorLFxcLVxcLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fuKAlF0vXG4gICwgICBleHBhbmRlZFRhYiA9IFwiICAgIFwiIC8vIENvbW1vbk1hcmsgc3BlY2lmaWVzIHRhYiBhcyA0IHNwYWNlc1xuXG4gIGZ1bmN0aW9uIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7XG4gICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBmKSB7XG4gICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gZjtcbiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVJc0VtcHR5KGxpbmUpIHtcbiAgICByZXR1cm4gIWxpbmUgfHwgIS9cXFMvLnRlc3QobGluZS5zdHJpbmcpXG4gIH1cblxuICAvLyBCbG9ja3NcblxuICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHtcbiAgICAvLyBSZXNldCBsaW5rVGl0bGUgc3RhdGVcbiAgICBzdGF0ZS5saW5rVGl0bGUgPSBmYWxzZTtcbiAgICBzdGF0ZS5saW5rSHJlZiA9IGZhbHNlO1xuICAgIHN0YXRlLmxpbmtUZXh0ID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgRU0gc3RhdGVcbiAgICBzdGF0ZS5lbSA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IFNUUk9ORyBzdGF0ZVxuICAgIHN0YXRlLnN0cm9uZyA9IGZhbHNlO1xuICAgIC8vIFJlc2V0IHN0cmlrZXRocm91Z2ggc3RhdGVcbiAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgc3RhdGUucXVvdGVcbiAgICBzdGF0ZS5xdW90ZSA9IDA7XG4gICAgLy8gUmVzZXQgc3RhdGUuaW5kZW50ZWRDb2RlXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlLmYgPT0gaHRtbEJsb2NrKSB7XG4gICAgICB2YXIgZXhpdCA9IGh0bWxNb2RlTWlzc2luZ1xuICAgICAgaWYgKCFleGl0KSB7XG4gICAgICAgIHZhciBpbm5lciA9IENvZGVNaXJyb3IuaW5uZXJNb2RlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpXG4gICAgICAgIGV4aXQgPSBpbm5lci5tb2RlLm5hbWUgPT0gXCJ4bWxcIiAmJiBpbm5lci5zdGF0ZS50YWdTdGFydCA9PT0gbnVsbCAmJlxuICAgICAgICAgICghaW5uZXIuc3RhdGUuY29udGV4dCAmJiBpbm5lci5zdGF0ZS50b2tlbml6ZS5pc0luVGV4dClcbiAgICAgIH1cbiAgICAgIGlmIChleGl0KSB7XG4gICAgICAgIHN0YXRlLmYgPSBpbmxpbmVOb3JtYWw7XG4gICAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlc2V0IHN0YXRlLnRyYWlsaW5nU3BhY2VcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlID0gMDtcbiAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IGZhbHNlO1xuICAgIC8vIE1hcmsgdGhpcyBsaW5lIGFzIGJsYW5rXG4gICAgc3RhdGUucHJldkxpbmUgPSBzdGF0ZS50aGlzTGluZVxuICAgIHN0YXRlLnRoaXNMaW5lID0ge3N0cmVhbTogbnVsbH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJsb2NrTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZmlyc3RUb2tlbk9uTGluZSA9IHN0cmVhbS5jb2x1bW4oKSA9PT0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgdmFyIHByZXZMaW5lTGluZUlzRW1wdHkgPSBsaW5lSXNFbXB0eShzdGF0ZS5wcmV2TGluZS5zdHJlYW0pO1xuICAgIHZhciBwcmV2TGluZUlzSW5kZW50ZWRDb2RlID0gc3RhdGUuaW5kZW50ZWRDb2RlO1xuICAgIHZhciBwcmV2TGluZUlzSHIgPSBzdGF0ZS5wcmV2TGluZS5ocjtcbiAgICB2YXIgcHJldkxpbmVJc0xpc3QgPSBzdGF0ZS5saXN0ICE9PSBmYWxzZTtcbiAgICB2YXIgbWF4Tm9uQ29kZUluZGVudGF0aW9uID0gKHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMCkgKyAzO1xuXG4gICAgc3RhdGUuaW5kZW50ZWRDb2RlID0gZmFsc2U7XG5cbiAgICB2YXIgbGluZUluZGVudGF0aW9uID0gc3RhdGUuaW5kZW50YXRpb247XG4gICAgLy8gY29tcHV0ZSBvbmNlIHBlciBsaW5lIChvbiBmaXJzdCB0b2tlbilcbiAgICBpZiAoc3RhdGUuaW5kZW50YXRpb25EaWZmID09PSBudWxsKSB7XG4gICAgICBzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPSBzdGF0ZS5pbmRlbnRhdGlvbjtcbiAgICAgIGlmIChwcmV2TGluZUlzTGlzdCkge1xuICAgICAgICAvLyBSZXNldCBpbmxpbmUgc3R5bGVzIHdoaWNoIHNob3VsZG4ndCBwcm9wYWdhdGUgYXJvc3MgbGlzdCBpdGVtc1xuICAgICAgICBzdGF0ZS5lbSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG5cbiAgICAgICAgc3RhdGUubGlzdCA9IG51bGw7XG4gICAgICAgIC8vIFdoaWxlIHRoaXMgbGlzdCBpdGVtJ3MgbWFya2VyJ3MgaW5kZW50YXRpb24gaXMgbGVzcyB0aGFuIHRoZSBkZWVwZXN0XG4gICAgICAgIC8vICBsaXN0IGl0ZW0ncyBjb250ZW50J3MgaW5kZW50YXRpb24scG9wIHRoZSBkZWVwZXN0IGxpc3QgaXRlbVxuICAgICAgICAvLyAgaW5kZW50YXRpb24gb2ZmIHRoZSBzdGFjaywgYW5kIHVwZGF0ZSBibG9jayBpbmRlbnRhdGlvbiBzdGF0ZVxuICAgICAgICB3aGlsZSAobGluZUluZGVudGF0aW9uIDwgc3RhdGUubGlzdFN0YWNrW3N0YXRlLmxpc3RTdGFjay5sZW5ndGggLSAxXSkge1xuICAgICAgICAgIHN0YXRlLmxpc3RTdGFjay5wb3AoKTtcbiAgICAgICAgICBpZiAoc3RhdGUubGlzdFN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBzdGF0ZS5saXN0U3RhY2tbc3RhdGUubGlzdFN0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgZmlyc3QgbGlzdCdzIGluZGVudCAtPiB0aGUgbGluZSBpcyBubyBsb25nZXIgYSBsaXN0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlLmxpc3QgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLmxpc3QgIT09IGZhbHNlKSB7XG4gICAgICAgICAgc3RhdGUuaW5kZW50YXRpb25EaWZmID0gbGluZUluZGVudGF0aW9uIC0gc3RhdGUubGlzdFN0YWNrW3N0YXRlLmxpc3RTdGFjay5sZW5ndGggLSAxXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbm90IGNvbXByZWhlbnNpdmUgKGN1cnJlbnRseSBvbmx5IGZvciBzZXRleHQgZGV0ZWN0aW9uIHB1cnBvc2VzKVxuICAgIHZhciBhbGxvd3NJbmxpbmVDb250aW51YXRpb24gPSAoXG4gICAgICAgICFwcmV2TGluZUxpbmVJc0VtcHR5ICYmICFwcmV2TGluZUlzSHIgJiYgIXN0YXRlLnByZXZMaW5lLmhlYWRlciAmJlxuICAgICAgICAoIXByZXZMaW5lSXNMaXN0IHx8ICFwcmV2TGluZUlzSW5kZW50ZWRDb2RlKSAmJlxuICAgICAgICAhc3RhdGUucHJldkxpbmUuZmVuY2VkQ29kZUVuZFxuICAgICk7XG5cbiAgICB2YXIgaXNIciA9IChzdGF0ZS5saXN0ID09PSBmYWxzZSB8fCBwcmV2TGluZUlzSHIgfHwgcHJldkxpbmVMaW5lSXNFbXB0eSkgJiZcbiAgICAgIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiBzdHJlYW0ubWF0Y2goaHJSRSk7XG5cbiAgICB2YXIgbWF0Y2ggPSBudWxsO1xuICAgIGlmIChzdGF0ZS5pbmRlbnRhdGlvbkRpZmYgPj0gNCAmJiAocHJldkxpbmVJc0luZGVudGVkQ29kZSB8fCBzdGF0ZS5wcmV2TGluZS5mZW5jZWRDb2RlRW5kIHx8XG4gICAgICAgICBzdGF0ZS5wcmV2TGluZS5oZWFkZXIgfHwgcHJldkxpbmVMaW5lSXNFbXB0eSkpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHN0YXRlLmluZGVudGVkQ29kZSA9IHRydWU7XG4gICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZmlyc3RUb2tlbk9uTGluZSAmJiBzdGF0ZS5pbmRlbnRhdGlvbiA8PSBtYXhOb25Db2RlSW5kZW50YXRpb24gJiYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKGF0eEhlYWRlclJFKSkgJiYgbWF0Y2hbMV0ubGVuZ3RoIDw9IDYpIHtcbiAgICAgIHN0YXRlLnF1b3RlID0gMDtcbiAgICAgIHN0YXRlLmhlYWRlciA9IG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhlYWRlciA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmU7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5pbmRlbnRhdGlvbiA8PSBtYXhOb25Db2RlSW5kZW50YXRpb24gJiYgc3RyZWFtLmVhdCgnPicpKSB7XG4gICAgICBzdGF0ZS5xdW90ZSA9IGZpcnN0VG9rZW5PbkxpbmUgPyAxIDogc3RhdGUucXVvdGUgKyAxO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwicXVvdGVcIjtcbiAgICAgIHN0cmVhbS5lYXRTcGFjZSgpO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoIWlzSHIgJiYgIXN0YXRlLnNldGV4dCAmJiBmaXJzdFRva2VuT25MaW5lICYmIHN0YXRlLmluZGVudGF0aW9uIDw9IG1heE5vbkNvZGVJbmRlbnRhdGlvbiAmJiAobWF0Y2ggPSBzdHJlYW0ubWF0Y2gobGlzdFJFKSkpIHtcbiAgICAgIHZhciBsaXN0VHlwZSA9IG1hdGNoWzFdID8gXCJvbFwiIDogXCJ1bFwiO1xuXG4gICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IGxpbmVJbmRlbnRhdGlvbiArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoO1xuICAgICAgc3RhdGUubGlzdCA9IHRydWU7XG4gICAgICBzdGF0ZS5xdW90ZSA9IDA7XG5cbiAgICAgIC8vIEFkZCB0aGlzIGxpc3QgaXRlbSdzIGNvbnRlbnQncyBpbmRlbnRhdGlvbiB0byB0aGUgc3RhY2tcbiAgICAgIHN0YXRlLmxpc3RTdGFjay5wdXNoKHN0YXRlLmluZGVudGF0aW9uKTtcblxuICAgICAgaWYgKG1vZGVDZmcudGFza0xpc3RzICYmIHN0cmVhbS5tYXRjaCh0YXNrTGlzdFJFLCBmYWxzZSkpIHtcbiAgICAgICAgc3RhdGUudGFza0xpc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBbXCJsaXN0XCIsIFwibGlzdC1cIiArIGxpc3RUeXBlXTtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0VG9rZW5PbkxpbmUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4Tm9uQ29kZUluZGVudGF0aW9uICYmIChtYXRjaCA9IHN0cmVhbS5tYXRjaChmZW5jZWRDb2RlUkUsIHRydWUpKSkge1xuICAgICAgc3RhdGUucXVvdGUgPSAwO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBuZXcgUmVnRXhwKG1hdGNoWzFdICsgXCIrICokXCIpO1xuICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBtb2RlQ2ZnLmZlbmNlZENvZGVCbG9ja0hpZ2hsaWdodGluZyAmJiBnZXRNb2RlKG1hdGNoWzJdKTtcbiAgICAgIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHN0YXRlLmxvY2FsU3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUoc3RhdGUubG9jYWxNb2RlKTtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGxvY2FsO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiY29kZS1ibG9ja1wiO1xuICAgICAgc3RhdGUuY29kZSA9IC0xXG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgLy8gU0VURVhUIGhhcyBsb3dlc3QgYmxvY2stc2NvcGUgcHJlY2VkZW5jZSBhZnRlciBIUiwgc28gY2hlY2sgaXQgYWZ0ZXJcbiAgICAvLyAgdGhlIG90aGVycyAoY29kZSwgYmxvY2txdW90ZSwgbGlzdC4uLilcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gaWYgc2V0ZXh0IHNldCwgaW5kaWNhdGVzIGxpbmUgYWZ0ZXIgLS0tLz09PVxuICAgICAgc3RhdGUuc2V0ZXh0IHx8IChcbiAgICAgICAgLy8gbGluZSBiZWZvcmUgLS0tLz09PVxuICAgICAgICAoIWFsbG93c0lubGluZUNvbnRpbnVhdGlvbiB8fCAhcHJldkxpbmVJc0xpc3QpICYmICFzdGF0ZS5xdW90ZSAmJiBzdGF0ZS5saXN0ID09PSBmYWxzZSAmJlxuICAgICAgICAhc3RhdGUuY29kZSAmJiAhaXNIciAmJiAhbGlua0RlZlJFLnRlc3Qoc3RyZWFtLnN0cmluZykgJiZcbiAgICAgICAgKG1hdGNoID0gc3RyZWFtLmxvb2tBaGVhZCgxKSkgJiYgKG1hdGNoID0gbWF0Y2gubWF0Y2goc2V0ZXh0SGVhZGVyUkUpKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKCAhc3RhdGUuc2V0ZXh0ICkge1xuICAgICAgICBzdGF0ZS5oZWFkZXIgPSBtYXRjaFswXS5jaGFyQXQoMCkgPT0gJz0nID8gMSA6IDI7XG4gICAgICAgIHN0YXRlLnNldGV4dCA9IHN0YXRlLmhlYWRlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmhlYWRlciA9IHN0YXRlLnNldGV4dDtcbiAgICAgICAgLy8gaGFzIG5vIGVmZmVjdCBvbiB0eXBlIHNvIHdlIGNhbiByZXNldCBpdCBub3dcbiAgICAgICAgc3RhdGUuc2V0ZXh0ID0gMDtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnRoaXNMaW5lLmhlYWRlciA9IHRydWU7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoaXNIcikge1xuICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgc3RhdGUuaHIgPSB0cnVlO1xuICAgICAgc3RhdGUudGhpc0xpbmUuaHIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRva2VuVHlwZXMuaHI7XG4gICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09PSAnWycpIHtcbiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZm9vdG5vdGVMaW5rKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7XG4gIH1cblxuICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuaHRtbFN0YXRlKTtcbiAgICBpZiAoIWh0bWxNb2RlTWlzc2luZykge1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSlcbiAgICAgIGlmICgoaW5uZXIubW9kZS5uYW1lID09IFwieG1sXCIgJiYgaW5uZXIuc3RhdGUudGFnU3RhcnQgPT09IG51bGwgJiZcbiAgICAgICAgICAgKCFpbm5lci5zdGF0ZS5jb250ZXh0ICYmIGlubmVyLnN0YXRlLnRva2VuaXplLmlzSW5UZXh0KSkgfHxcbiAgICAgICAgICAoc3RhdGUubWRfaW5zaWRlICYmIHN0cmVhbS5jdXJyZW50KCkuaW5kZXhPZihcIj5cIikgPiAtMSkpIHtcbiAgICAgICAgc3RhdGUuZiA9IGlubGluZU5vcm1hbDtcbiAgICAgICAgc3RhdGUuYmxvY2sgPSBibG9ja05vcm1hbDtcbiAgICAgICAgc3RhdGUuaHRtbFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBjdXJyTGlzdEluZCA9IHN0YXRlLmxpc3RTdGFja1tzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMV0gfHwgMDtcbiAgICB2YXIgaGFzRXhpdGVkTGlzdCA9IHN0YXRlLmluZGVudGF0aW9uIDwgY3Vyckxpc3RJbmQ7XG4gICAgdmFyIG1heEZlbmNlZEVuZEluZCA9IGN1cnJMaXN0SW5kICsgMztcbiAgICBpZiAoc3RhdGUuZmVuY2VkRW5kUkUgJiYgc3RhdGUuaW5kZW50YXRpb24gPD0gbWF4RmVuY2VkRW5kSW5kICYmIChoYXNFeGl0ZWRMaXN0IHx8IHN0cmVhbS5tYXRjaChzdGF0ZS5mZW5jZWRFbmRSRSkpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJjb2RlLWJsb2NrXCI7XG4gICAgICB2YXIgcmV0dXJuVHlwZTtcbiAgICAgIGlmICghaGFzRXhpdGVkTGlzdCkgcmV0dXJuVHlwZSA9IGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5sb2NhbE1vZGUgPSBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDtcbiAgICAgIHN0YXRlLmJsb2NrID0gYmxvY2tOb3JtYWw7XG4gICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsO1xuICAgICAgc3RhdGUuZmVuY2VkRW5kUkUgPSBudWxsO1xuICAgICAgc3RhdGUuY29kZSA9IDBcbiAgICAgIHN0YXRlLnRoaXNMaW5lLmZlbmNlZENvZGVFbmQgPSB0cnVlO1xuICAgICAgaWYgKGhhc0V4aXRlZExpc3QpIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBzdGF0ZS5ibG9jayk7XG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmxvY2FsTW9kZSkge1xuICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7XG4gICAgICByZXR1cm4gdG9rZW5UeXBlcy5jb2RlO1xuICAgIH1cbiAgfVxuXG4gIC8vIElubGluZVxuICBmdW5jdGlvbiBnZXRUeXBlKHN0YXRlKSB7XG4gICAgdmFyIHN0eWxlcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLmZvcm1hdHRpbmcpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3RhdGUuZm9ybWF0dGluZyA9PT0gXCJzdHJpbmdcIikgc3RhdGUuZm9ybWF0dGluZyA9IFtzdGF0ZS5mb3JtYXR0aW5nXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5mb3JtYXR0aW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLVwiICsgc3RhdGUuZm9ybWF0dGluZ1tpXSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmZvcm1hdHRpbmdbaV0gPT09IFwiaGVhZGVyXCIpIHtcbiAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgYGZvcm1hdHRpbmctcXVvdGVgIGFuZCBgZm9ybWF0dGluZy1xdW90ZS0jYCBmb3IgYmxvY2txdW90ZXNcbiAgICAgICAgLy8gQWRkIGBlcnJvcmAgaW5zdGVhZCBpZiB0aGUgbWF4aW11bSBibG9ja3F1b3RlIG5lc3RpbmcgZGVwdGggaXMgcGFzc2VkXG4gICAgICAgIGlmIChzdGF0ZS5mb3JtYXR0aW5nW2ldID09PSBcInF1b3RlXCIpIHtcbiAgICAgICAgICBpZiAoIW1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoIHx8IG1vZGVDZmcubWF4QmxvY2txdW90ZURlcHRoID49IHN0YXRlLnF1b3RlKSB7XG4gICAgICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmZvcm1hdHRpbmcgKyBcIi1cIiArIHN0YXRlLmZvcm1hdHRpbmdbaV0gKyBcIi1cIiArIHN0YXRlLnF1b3RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3R5bGVzLnB1c2goXCJlcnJvclwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudGFza09wZW4pIHtcbiAgICAgIHN0eWxlcy5wdXNoKFwibWV0YVwiKTtcbiAgICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50YXNrQ2xvc2VkKSB7XG4gICAgICBzdHlsZXMucHVzaChcInByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIHN0eWxlcy5sZW5ndGggPyBzdHlsZXMuam9pbignICcpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUubGlua0hyZWYpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua0hyZWYsIFwidXJsXCIpO1xuICAgIH0gZWxzZSB7IC8vIE9ubHkgYXBwbHkgaW5saW5lIHN0eWxlcyB0byBub24tdXJsIHRleHRcbiAgICAgIGlmIChzdGF0ZS5zdHJvbmcpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5zdHJvbmcpOyB9XG4gICAgICBpZiAoc3RhdGUuZW0pIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5lbSk7IH1cbiAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuc3RyaWtldGhyb3VnaCk7IH1cbiAgICAgIGlmIChzdGF0ZS5lbW9qaSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmVtb2ppKTsgfVxuICAgICAgaWYgKHN0YXRlLmxpbmtUZXh0KSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlua1RleHQpOyB9XG4gICAgICBpZiAoc3RhdGUuY29kZSkgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmNvZGUpOyB9XG4gICAgICBpZiAoc3RhdGUuaW1hZ2UpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZSk7IH1cbiAgICAgIGlmIChzdGF0ZS5pbWFnZUFsdFRleHQpIHsgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5pbWFnZUFsdFRleHQsIFwibGlua1wiKTsgfVxuICAgICAgaWYgKHN0YXRlLmltYWdlTWFya2VyKSB7IHN0eWxlcy5wdXNoKHRva2VuVHlwZXMuaW1hZ2VNYXJrZXIpOyB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmhlYWRlcikgeyBzdHlsZXMucHVzaCh0b2tlblR5cGVzLmhlYWRlciwgdG9rZW5UeXBlcy5oZWFkZXIgKyBcIi1cIiArIHN0YXRlLmhlYWRlcik7IH1cblxuICAgIGlmIChzdGF0ZS5xdW90ZSkge1xuICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5xdW90ZSk7XG5cbiAgICAgIC8vIEFkZCBgcXVvdGUtI2Agd2hlcmUgdGhlIG1heGltdW0gZm9yIGAjYCBpcyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aFxuICAgICAgaWYgKCFtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCB8fCBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCA+PSBzdGF0ZS5xdW90ZSkge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBzdGF0ZS5xdW90ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZXMucHVzaCh0b2tlblR5cGVzLnF1b3RlICsgXCItXCIgKyBtb2RlQ2ZnLm1heEJsb2NrcXVvdGVEZXB0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmxpc3QgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgbGlzdE1vZCA9IChzdGF0ZS5saXN0U3RhY2subGVuZ3RoIC0gMSkgJSAzO1xuICAgICAgaWYgKCFsaXN0TW9kKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDEpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0TW9kID09PSAxKSB7XG4gICAgICAgIHN0eWxlcy5wdXNoKHRva2VuVHlwZXMubGlzdDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzLnB1c2godG9rZW5UeXBlcy5saXN0Myk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnRyYWlsaW5nU3BhY2VOZXdMaW5lKSB7XG4gICAgICBzdHlsZXMucHVzaChcInRyYWlsaW5nLXNwYWNlLW5ldy1saW5lXCIpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUudHJhaWxpbmdTcGFjZSkge1xuICAgICAgc3R5bGVzLnB1c2goXCJ0cmFpbGluZy1zcGFjZS1cIiArIChzdGF0ZS50cmFpbGluZ1NwYWNlICUgMiA/IFwiYVwiIDogXCJiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGVzLmxlbmd0aCA/IHN0eWxlcy5qb2luKCcgJykgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXh0UkUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVOb3JtYWwoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnRleHQoc3RyZWFtLCBzdGF0ZSk7XG4gICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICByZXR1cm4gc3R5bGU7XG5cbiAgICBpZiAoc3RhdGUubGlzdCkgeyAvLyBMaXN0IG1hcmtlciAoKiwgKywgLSwgMS4sIGV0YylcbiAgICAgIHN0YXRlLmxpc3QgPSBudWxsO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50YXNrTGlzdCkge1xuICAgICAgdmFyIHRhc2tPcGVuID0gc3RyZWFtLm1hdGNoKHRhc2tMaXN0UkUsIHRydWUpWzFdID09PSBcIiBcIjtcbiAgICAgIGlmICh0YXNrT3Blbikgc3RhdGUudGFza09wZW4gPSB0cnVlO1xuICAgICAgZWxzZSBzdGF0ZS50YXNrQ2xvc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcInRhc2tcIjtcbiAgICAgIHN0YXRlLnRhc2tMaXN0ID0gZmFsc2U7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGUudGFza09wZW4gPSBmYWxzZTtcbiAgICBzdGF0ZS50YXNrQ2xvc2VkID0gZmFsc2U7XG5cbiAgICBpZiAoc3RhdGUuaGVhZGVyICYmIHN0cmVhbS5tYXRjaCgvXiMrJC8sIHRydWUpKSB7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJoZWFkZXJcIjtcbiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTtcbiAgICB9XG5cbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuXG4gICAgLy8gTWF0Y2hlcyBsaW5rIHRpdGxlcyBwcmVzZW50IG9uIG5leHQgbGluZVxuICAgIGlmIChzdGF0ZS5saW5rVGl0bGUpIHtcbiAgICAgIHN0YXRlLmxpbmtUaXRsZSA9IGZhbHNlO1xuICAgICAgdmFyIG1hdGNoQ2ggPSBjaDtcbiAgICAgIGlmIChjaCA9PT0gJygnKSB7XG4gICAgICAgIG1hdGNoQ2ggPSAnKSc7XG4gICAgICB9XG4gICAgICBtYXRjaENoID0gKG1hdGNoQ2grJycpLnJlcGxhY2UoLyhbLj8qK15cXFtcXF1cXFxcKCl7fXwtXSkvZywgXCJcXFxcJDFcIik7XG4gICAgICB2YXIgcmVnZXggPSAnXlxcXFxzKig/OlteJyArIG1hdGNoQ2ggKyAnXFxcXFxcXFxdK3xcXFxcXFxcXFxcXFxcXFxcfFxcXFxcXFxcLiknICsgbWF0Y2hDaDtcbiAgICAgIGlmIChzdHJlYW0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleCksIHRydWUpKSB7XG4gICAgICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtIcmVmO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBHRk0gbW9kZVxuICAgIGlmIChjaCA9PT0gJ2AnKSB7XG4gICAgICB2YXIgcHJldmlvdXNGb3JtYXR0aW5nID0gc3RhdGUuZm9ybWF0dGluZztcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImNvZGVcIjtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgnYCcpO1xuICAgICAgdmFyIGNvdW50ID0gc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGhcbiAgICAgIGlmIChzdGF0ZS5jb2RlID09IDAgJiYgKCFzdGF0ZS5xdW90ZSB8fCBjb3VudCA9PSAxKSkge1xuICAgICAgICBzdGF0ZS5jb2RlID0gY291bnRcbiAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICB9IGVsc2UgaWYgKGNvdW50ID09IHN0YXRlLmNvZGUpIHsgLy8gTXVzdCBiZSBleGFjdFxuICAgICAgICB2YXIgdCA9IGdldFR5cGUoc3RhdGUpXG4gICAgICAgIHN0YXRlLmNvZGUgPSAwXG4gICAgICAgIHJldHVybiB0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5mb3JtYXR0aW5nID0gcHJldmlvdXNGb3JtYXR0aW5nXG4gICAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RhdGUuY29kZSkge1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ1xcXFwnKSB7XG4gICAgICBzdHJlYW0ubmV4dCgpO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB2YXIgZm9ybWF0dGluZ0VzY2FwZSA9IHRva2VuVHlwZXMuZm9ybWF0dGluZyArIFwiLWVzY2FwZVwiO1xuICAgICAgICByZXR1cm4gdHlwZSA/IHR5cGUgKyBcIiBcIiArIGZvcm1hdHRpbmdFc2NhcGUgOiBmb3JtYXR0aW5nRXNjYXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJyEnICYmIHN0cmVhbS5tYXRjaCgvXFxbW15cXF1dKlxcXSA/KD86XFwofFxcWykvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmltYWdlID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImltYWdlXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnWycgJiYgc3RhdGUuaW1hZ2VNYXJrZXIgJiYgc3RyZWFtLm1hdGNoKC9bXlxcXV0qXFxdKFxcKC4qP1xcKXwgP1xcWy4qP1xcXSkvLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmltYWdlTWFya2VyID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSB0cnVlXG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJpbWFnZVwiO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJ10nICYmIHN0YXRlLmltYWdlQWx0VGV4dCkge1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwiaW1hZ2VcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5pbWFnZUFsdFRleHQgPSBmYWxzZTtcbiAgICAgIHN0YXRlLmltYWdlID0gZmFsc2U7XG4gICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09ICdbJyAmJiAhc3RhdGUuaW1hZ2UpIHtcbiAgICAgIGlmIChzdGF0ZS5saW5rVGV4dCAmJiBzdHJlYW0ubWF0Y2goL14uKj9cXF0vKSkgcmV0dXJuIGdldFR5cGUoc3RhdGUpXG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IHRydWU7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAnXScgJiYgc3RhdGUubGlua1RleHQpIHtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlO1xuICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IHN0cmVhbS5tYXRjaCgvXFwoLio/XFwpfCA/XFxbLio/XFxdLywgZmFsc2UpID8gbGlua0hyZWYgOiBpbmxpbmVOb3JtYWxcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXihodHRwcz98ZnRwcz8pOlxcL1xcLyg/OlteXFxcXD5dfFxcXFwuKSs+LywgZmFsc2UpKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gbGlua0lubGluZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciB0eXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBpZiAodHlwZSl7XG4gICAgICAgIHR5cGUgKz0gXCIgXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlICsgdG9rZW5UeXBlcy5saW5rSW5saW5lO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXltePiBcXFxcXStAKD86W15cXFxcPl18XFxcXC4pKz4vLCBmYWxzZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBsaW5rSW5saW5lO1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgIGlmICh0eXBlKXtcbiAgICAgICAgdHlwZSArPSBcIiBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGUgKyB0b2tlblR5cGVzLmxpbmtFbWFpbDtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL14oIS0tfFxcP3whXFxbQ0RBVEFcXFt8W2Etel1bYS16MC05LV0qKD86XFxzK1thLXpfOi5cXC1dKyg/Olxccyo9XFxzKltePl0rKT8pKlxccyooPzo+fCQpKS9pLCBmYWxzZSkpIHtcbiAgICAgIHZhciBlbmQgPSBzdHJlYW0uc3RyaW5nLmluZGV4T2YoXCI+XCIsIHN0cmVhbS5wb3MpO1xuICAgICAgaWYgKGVuZCAhPSAtMSkge1xuICAgICAgICB2YXIgYXR0cyA9IHN0cmVhbS5zdHJpbmcuc3Vic3RyaW5nKHN0cmVhbS5zdGFydCwgZW5kKTtcbiAgICAgICAgaWYgKC9tYXJrZG93blxccyo9XFxzKignfFwiKXswLDF9MSgnfFwiKXswLDF9Ly50ZXN0KGF0dHMpKSBzdGF0ZS5tZF9pbnNpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgc3RyZWFtLmJhY2tVcCgxKTtcbiAgICAgIHN0YXRlLmh0bWxTdGF0ZSA9IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShodG1sTW9kZSk7XG4gICAgICByZXR1cm4gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgaHRtbEJsb2NrKTtcbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy54bWwgJiYgY2ggPT09ICc8JyAmJiBzdHJlYW0ubWF0Y2goL15cXC9cXHcqPz4vKSkge1xuICAgICAgc3RhdGUubWRfaW5zaWRlID0gZmFsc2U7XG4gICAgICByZXR1cm4gXCJ0YWdcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIipcIiB8fCBjaCA9PT0gXCJfXCIpIHtcbiAgICAgIHZhciBsZW4gPSAxLCBiZWZvcmUgPSBzdHJlYW0ucG9zID09IDEgPyBcIiBcIiA6IHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5wb3MgLSAyKVxuICAgICAgd2hpbGUgKGxlbiA8IDMgJiYgc3RyZWFtLmVhdChjaCkpIGxlbisrXG4gICAgICB2YXIgYWZ0ZXIgPSBzdHJlYW0ucGVlaygpIHx8IFwiIFwiXG4gICAgICAvLyBTZWUgaHR0cDovL3NwZWMuY29tbW9ubWFyay5vcmcvMC4yNy8jZW1waGFzaXMtYW5kLXN0cm9uZy1lbXBoYXNpc1xuICAgICAgdmFyIGxlZnRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGFmdGVyKSAmJiAoIXB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpIHx8IC9cXHMvLnRlc3QoYmVmb3JlKSB8fCBwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkpXG4gICAgICB2YXIgcmlnaHRGbGFua2luZyA9ICEvXFxzLy50ZXN0KGJlZm9yZSkgJiYgKCFwdW5jdHVhdGlvbi50ZXN0KGJlZm9yZSkgfHwgL1xccy8udGVzdChhZnRlcikgfHwgcHVuY3R1YXRpb24udGVzdChhZnRlcikpXG4gICAgICB2YXIgc2V0RW0gPSBudWxsLCBzZXRTdHJvbmcgPSBudWxsXG4gICAgICBpZiAobGVuICUgMikgeyAvLyBFbVxuICAgICAgICBpZiAoIXN0YXRlLmVtICYmIGxlZnRGbGFua2luZyAmJiAoY2ggPT09IFwiKlwiIHx8ICFyaWdodEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYmVmb3JlKSkpXG4gICAgICAgICAgc2V0RW0gPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLmVtID09IGNoICYmIHJpZ2h0RmxhbmtpbmcgJiYgKGNoID09PSBcIipcIiB8fCAhbGVmdEZsYW5raW5nIHx8IHB1bmN0dWF0aW9uLnRlc3QoYWZ0ZXIpKSlcbiAgICAgICAgICBzZXRFbSA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAobGVuID4gMSkgeyAvLyBTdHJvbmdcbiAgICAgICAgaWYgKCFzdGF0ZS5zdHJvbmcgJiYgbGVmdEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIXJpZ2h0RmxhbmtpbmcgfHwgcHVuY3R1YXRpb24udGVzdChiZWZvcmUpKSlcbiAgICAgICAgICBzZXRTdHJvbmcgPSB0cnVlXG4gICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0cm9uZyA9PSBjaCAmJiByaWdodEZsYW5raW5nICYmIChjaCA9PT0gXCIqXCIgfHwgIWxlZnRGbGFua2luZyB8fCBwdW5jdHVhdGlvbi50ZXN0KGFmdGVyKSkpXG4gICAgICAgICAgc2V0U3Ryb25nID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmIChzZXRTdHJvbmcgIT0gbnVsbCB8fCBzZXRFbSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBzZXRFbSA9PSBudWxsID8gXCJzdHJvbmdcIiA6IHNldFN0cm9uZyA9PSBudWxsID8gXCJlbVwiIDogXCJzdHJvbmcgZW1cIlxuICAgICAgICBpZiAoc2V0RW0gPT09IHRydWUpIHN0YXRlLmVtID0gY2hcbiAgICAgICAgaWYgKHNldFN0cm9uZyA9PT0gdHJ1ZSkgc3RhdGUuc3Ryb25nID0gY2hcbiAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKVxuICAgICAgICBpZiAoc2V0RW0gPT09IGZhbHNlKSBzdGF0ZS5lbSA9IGZhbHNlXG4gICAgICAgIGlmIChzZXRTdHJvbmcgPT09IGZhbHNlKSBzdGF0ZS5zdHJvbmcgPSBmYWxzZVxuICAgICAgICByZXR1cm4gdFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcgJykge1xuICAgICAgaWYgKHN0cmVhbS5lYXQoJyonKSB8fCBzdHJlYW0uZWF0KCdfJykpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZXNcbiAgICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcgJykgeyAvLyBTdXJyb3VuZGVkIGJ5IHNwYWNlcywgaWdub3JlXG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9IGVsc2UgeyAvLyBOb3Qgc3Vycm91bmRlZCBieSBzcGFjZXMsIGJhY2sgdXAgcG9pbnRlclxuICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZUNmZy5zdHJpa2V0aHJvdWdoKSB7XG4gICAgICBpZiAoY2ggPT09ICd+JyAmJiBzdHJlYW0uZWF0V2hpbGUoY2gpKSB7XG4gICAgICAgIGlmIChzdGF0ZS5zdHJpa2V0aHJvdWdoKSB7Ly8gUmVtb3ZlIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXHNdLywgZmFsc2UpKSB7Ly8gQWRkIHN0cmlrZXRocm91Z2hcbiAgICAgICAgICBzdGF0ZS5zdHJpa2V0aHJvdWdoID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJzdHJpa2V0aHJvdWdoXCI7XG4gICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAnICcpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXn5+LywgdHJ1ZSkpIHsgLy8gUHJvYmFibHkgc3Vycm91bmRlZCBieSBzcGFjZVxuICAgICAgICAgIGlmIChzdHJlYW0ucGVlaygpID09PSAnICcpIHsgLy8gU3Vycm91bmRlZCBieSBzcGFjZXMsIGlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIE5vdCBzdXJyb3VuZGVkIGJ5IHNwYWNlcywgYmFjayB1cCBwb2ludGVyXG4gICAgICAgICAgICBzdHJlYW0uYmFja1VwKDIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RlQ2ZnLmVtb2ppICYmIGNoID09PSBcIjpcIiAmJiBzdHJlYW0ubWF0Y2goL15bYS16X1xcZCstXSs6LykpIHtcbiAgICAgIHN0YXRlLmVtb2ppID0gdHJ1ZTtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImVtb2ppXCI7XG4gICAgICB2YXIgcmV0VHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgc3RhdGUuZW1vamkgPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXRUeXBlO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gJyAnKSB7XG4gICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eICskLywgZmFsc2UpKSB7XG4gICAgICAgIHN0YXRlLnRyYWlsaW5nU3BhY2UrKztcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUudHJhaWxpbmdTcGFjZSkge1xuICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlTmV3TGluZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlua0lubGluZShzdHJlYW0sIHN0YXRlKSB7XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcblxuICAgIGlmIChjaCA9PT0gXCI+XCIpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rXCI7XG4gICAgICB2YXIgdHlwZSA9IGdldFR5cGUoc3RhdGUpO1xuICAgICAgaWYgKHR5cGUpe1xuICAgICAgICB0eXBlICs9IFwiIFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IFwiXCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZSArIHRva2VuVHlwZXMubGlua0lubGluZTtcbiAgICB9XG5cbiAgICBzdHJlYW0ubWF0Y2goL15bXj5dKy8sIHRydWUpO1xuXG4gICAgcmV0dXJuIHRva2VuVHlwZXMubGlua0lubGluZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmtIcmVmKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAvLyBDaGVjayBpZiBzcGFjZSwgYW5kIHJldHVybiBOVUxMIGlmIHNvICh0byBhdm9pZCBtYXJraW5nIHRoZSBzcGFjZSlcbiAgICBpZihzdHJlYW0uZWF0U3BhY2UoKSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT09ICcoJyB8fCBjaCA9PT0gJ1snKSB7XG4gICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gZ2V0TGlua0hyZWZJbnNpZGUoY2ggPT09IFwiKFwiID8gXCIpXCIgOiBcIl1cIik7XG4gICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rLXN0cmluZ1wiO1xuICAgICAgc3RhdGUubGlua0hyZWYgPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gJ2Vycm9yJztcbiAgfVxuXG4gIHZhciBsaW5rUkUgPSB7XG4gICAgXCIpXCI6IC9eKD86W15cXFxcXFwoXFwpXXxcXFxcLnxcXCgoPzpbXlxcXFxcXChcXCldfFxcXFwuKSpcXCkpKj8oPz1cXCkpLyxcbiAgICBcIl1cIjogL14oPzpbXlxcXFxcXFtcXF1dfFxcXFwufFxcWyg/OlteXFxcXFxcW1xcXV18XFxcXC4pKlxcXSkqPyg/PVxcXSkvXG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW5rSHJlZkluc2lkZShlbmRDaGFyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7XG5cbiAgICAgIGlmIChjaCA9PT0gZW5kQ2hhcikge1xuICAgICAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsO1xuICAgICAgICBpZiAobW9kZUNmZy5oaWdobGlnaHRGb3JtYXR0aW5nKSBzdGF0ZS5mb3JtYXR0aW5nID0gXCJsaW5rLXN0cmluZ1wiO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSBnZXRUeXBlKHN0YXRlKTtcbiAgICAgICAgc3RhdGUubGlua0hyZWYgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlO1xuICAgICAgfVxuXG4gICAgICBzdHJlYW0ubWF0Y2gobGlua1JFW2VuZENoYXJdKVxuICAgICAgc3RhdGUubGlua0hyZWYgPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmb290bm90ZUxpbmsoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL14oW15cXF1cXFxcXXxcXFxcLikqXFxdOi8sIGZhbHNlKSkge1xuICAgICAgc3RhdGUuZiA9IGZvb3Rub3RlTGlua0luc2lkZTtcbiAgICAgIHN0cmVhbS5uZXh0KCk7IC8vIENvbnN1bWUgW1xuICAgICAgaWYgKG1vZGVDZmcuaGlnaGxpZ2h0Rm9ybWF0dGluZykgc3RhdGUuZm9ybWF0dGluZyA9IFwibGlua1wiO1xuICAgICAgc3RhdGUubGlua1RleHQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGlubGluZU5vcm1hbCk7XG4gIH1cblxuICBmdW5jdGlvbiBmb290bm90ZUxpbmtJbnNpZGUoc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmIChzdHJlYW0ubWF0Y2goL15cXF06LywgdHJ1ZSkpIHtcbiAgICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBmb290bm90ZVVybDtcbiAgICAgIGlmIChtb2RlQ2ZnLmhpZ2hsaWdodEZvcm1hdHRpbmcpIHN0YXRlLmZvcm1hdHRpbmcgPSBcImxpbmtcIjtcbiAgICAgIHZhciByZXR1cm5UeXBlID0gZ2V0VHlwZShzdGF0ZSk7XG4gICAgICBzdGF0ZS5saW5rVGV4dCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldHVyblR5cGU7XG4gICAgfVxuXG4gICAgc3RyZWFtLm1hdGNoKC9eKFteXFxdXFxcXF18XFxcXC4pKy8sIHRydWUpO1xuXG4gICAgcmV0dXJuIHRva2VuVHlwZXMubGlua1RleHQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb290bm90ZVVybChzdHJlYW0sIHN0YXRlKSB7XG4gICAgLy8gQ2hlY2sgaWYgc3BhY2UsIGFuZCByZXR1cm4gTlVMTCBpZiBzbyAodG8gYXZvaWQgbWFya2luZyB0aGUgc3BhY2UpXG4gICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIE1hdGNoIFVSTFxuICAgIHN0cmVhbS5tYXRjaCgvXlteXFxzXSsvLCB0cnVlKTtcbiAgICAvLyBDaGVjayBmb3IgbGluayB0aXRsZVxuICAgIGlmIChzdHJlYW0ucGVlaygpID09PSB1bmRlZmluZWQpIHsgLy8gRW5kIG9mIGxpbmUsIHNldCBmbGFnIHRvIGNoZWNrIG5leHQgbGluZVxuICAgICAgc3RhdGUubGlua1RpdGxlID0gdHJ1ZTtcbiAgICB9IGVsc2UgeyAvLyBNb3JlIGNvbnRlbnQgb24gbGluZSwgY2hlY2sgaWYgbGluayB0aXRsZVxuICAgICAgc3RyZWFtLm1hdGNoKC9eKD86XFxzKyg/OlwiKD86W15cIlxcXFxdfFxcXFxcXFxcfFxcXFwuKStcInwnKD86W14nXFxcXF18XFxcXFxcXFx8XFxcXC4pKyd8XFwoKD86W14pXFxcXF18XFxcXFxcXFx8XFxcXC4pK1xcKSkpPy8sIHRydWUpO1xuICAgIH1cbiAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gaW5saW5lTm9ybWFsO1xuICAgIHJldHVybiB0b2tlblR5cGVzLmxpbmtIcmVmICsgXCIgdXJsXCI7XG4gIH1cblxuICB2YXIgbW9kZSA9IHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGY6IGJsb2NrTm9ybWFsLFxuXG4gICAgICAgIHByZXZMaW5lOiB7c3RyZWFtOiBudWxsfSxcbiAgICAgICAgdGhpc0xpbmU6IHtzdHJlYW06IG51bGx9LFxuXG4gICAgICAgIGJsb2NrOiBibG9ja05vcm1hbCxcbiAgICAgICAgaHRtbFN0YXRlOiBudWxsLFxuICAgICAgICBpbmRlbnRhdGlvbjogMCxcblxuICAgICAgICBpbmxpbmU6IGlubGluZU5vcm1hbCxcbiAgICAgICAgdGV4dDogaGFuZGxlVGV4dCxcblxuICAgICAgICBmb3JtYXR0aW5nOiBmYWxzZSxcbiAgICAgICAgbGlua1RleHQ6IGZhbHNlLFxuICAgICAgICBsaW5rSHJlZjogZmFsc2UsXG4gICAgICAgIGxpbmtUaXRsZTogZmFsc2UsXG4gICAgICAgIGNvZGU6IDAsXG4gICAgICAgIGVtOiBmYWxzZSxcbiAgICAgICAgc3Ryb25nOiBmYWxzZSxcbiAgICAgICAgaGVhZGVyOiAwLFxuICAgICAgICBzZXRleHQ6IDAsXG4gICAgICAgIGhyOiBmYWxzZSxcbiAgICAgICAgdGFza0xpc3Q6IGZhbHNlLFxuICAgICAgICBsaXN0OiBmYWxzZSxcbiAgICAgICAgbGlzdFN0YWNrOiBbXSxcbiAgICAgICAgcXVvdGU6IDAsXG4gICAgICAgIHRyYWlsaW5nU3BhY2U6IDAsXG4gICAgICAgIHRyYWlsaW5nU3BhY2VOZXdMaW5lOiBmYWxzZSxcbiAgICAgICAgc3RyaWtldGhyb3VnaDogZmFsc2UsXG4gICAgICAgIGVtb2ppOiBmYWxzZSxcbiAgICAgICAgZmVuY2VkRW5kUkU6IG51bGxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZjogcy5mLFxuXG4gICAgICAgIHByZXZMaW5lOiBzLnByZXZMaW5lLFxuICAgICAgICB0aGlzTGluZTogcy50aGlzTGluZSxcblxuICAgICAgICBibG9jazogcy5ibG9jayxcbiAgICAgICAgaHRtbFN0YXRlOiBzLmh0bWxTdGF0ZSAmJiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgcy5odG1sU3RhdGUpLFxuICAgICAgICBpbmRlbnRhdGlvbjogcy5pbmRlbnRhdGlvbixcblxuICAgICAgICBsb2NhbE1vZGU6IHMubG9jYWxNb2RlLFxuICAgICAgICBsb2NhbFN0YXRlOiBzLmxvY2FsTW9kZSA/IENvZGVNaXJyb3IuY29weVN0YXRlKHMubG9jYWxNb2RlLCBzLmxvY2FsU3RhdGUpIDogbnVsbCxcblxuICAgICAgICBpbmxpbmU6IHMuaW5saW5lLFxuICAgICAgICB0ZXh0OiBzLnRleHQsXG4gICAgICAgIGZvcm1hdHRpbmc6IGZhbHNlLFxuICAgICAgICBsaW5rVGV4dDogcy5saW5rVGV4dCxcbiAgICAgICAgbGlua1RpdGxlOiBzLmxpbmtUaXRsZSxcbiAgICAgICAgbGlua0hyZWY6IHMubGlua0hyZWYsXG4gICAgICAgIGNvZGU6IHMuY29kZSxcbiAgICAgICAgZW06IHMuZW0sXG4gICAgICAgIHN0cm9uZzogcy5zdHJvbmcsXG4gICAgICAgIHN0cmlrZXRocm91Z2g6IHMuc3RyaWtldGhyb3VnaCxcbiAgICAgICAgZW1vamk6IHMuZW1vamksXG4gICAgICAgIGhlYWRlcjogcy5oZWFkZXIsXG4gICAgICAgIHNldGV4dDogcy5zZXRleHQsXG4gICAgICAgIGhyOiBzLmhyLFxuICAgICAgICB0YXNrTGlzdDogcy50YXNrTGlzdCxcbiAgICAgICAgbGlzdDogcy5saXN0LFxuICAgICAgICBsaXN0U3RhY2s6IHMubGlzdFN0YWNrLnNsaWNlKDApLFxuICAgICAgICBxdW90ZTogcy5xdW90ZSxcbiAgICAgICAgaW5kZW50ZWRDb2RlOiBzLmluZGVudGVkQ29kZSxcbiAgICAgICAgdHJhaWxpbmdTcGFjZTogcy50cmFpbGluZ1NwYWNlLFxuICAgICAgICB0cmFpbGluZ1NwYWNlTmV3TGluZTogcy50cmFpbGluZ1NwYWNlTmV3TGluZSxcbiAgICAgICAgbWRfaW5zaWRlOiBzLm1kX2luc2lkZSxcbiAgICAgICAgZmVuY2VkRW5kUkU6IHMuZmVuY2VkRW5kUkVcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG5cbiAgICAgIC8vIFJlc2V0IHN0YXRlLmZvcm1hdHRpbmdcbiAgICAgIHN0YXRlLmZvcm1hdHRpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0cmVhbSAhPSBzdGF0ZS50aGlzTGluZS5zdHJlYW0pIHtcbiAgICAgICAgc3RhdGUuaGVhZGVyID0gMDtcbiAgICAgICAgc3RhdGUuaHIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXFxzKiQvLCB0cnVlKSkge1xuICAgICAgICAgIGJsYW5rTGluZShzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZS5wcmV2TGluZSA9IHN0YXRlLnRoaXNMaW5lXG4gICAgICAgIHN0YXRlLnRoaXNMaW5lID0ge3N0cmVhbTogc3RyZWFtfVxuXG4gICAgICAgIC8vIFJlc2V0IHN0YXRlLnRhc2tMaXN0XG4gICAgICAgIHN0YXRlLnRhc2tMaXN0ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gUmVzZXQgc3RhdGUudHJhaWxpbmdTcGFjZVxuICAgICAgICBzdGF0ZS50cmFpbGluZ1NwYWNlID0gMDtcbiAgICAgICAgc3RhdGUudHJhaWxpbmdTcGFjZU5ld0xpbmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXN0YXRlLmxvY2FsU3RhdGUpIHtcbiAgICAgICAgICBzdGF0ZS5mID0gc3RhdGUuYmxvY2s7XG4gICAgICAgICAgaWYgKHN0YXRlLmYgIT0gaHRtbEJsb2NrKSB7XG4gICAgICAgICAgICB2YXIgaW5kZW50YXRpb24gPSBzdHJlYW0ubWF0Y2goL15cXHMqLywgdHJ1ZSlbMF0ucmVwbGFjZSgvXFx0L2csIGV4cGFuZGVkVGFiKS5sZW5ndGg7XG4gICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IGluZGVudGF0aW9uO1xuICAgICAgICAgICAgc3RhdGUuaW5kZW50YXRpb25EaWZmID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpbmRlbnRhdGlvbiA+IDApIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlLmYoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfSxcblxuICAgIGlubmVyTW9kZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIGlmIChzdGF0ZS5ibG9jayA9PSBodG1sQmxvY2spIHJldHVybiB7c3RhdGU6IHN0YXRlLmh0bWxTdGF0ZSwgbW9kZTogaHRtbE1vZGV9O1xuICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUpIHJldHVybiB7c3RhdGU6IHN0YXRlLmxvY2FsU3RhdGUsIG1vZGU6IHN0YXRlLmxvY2FsTW9kZX07XG4gICAgICByZXR1cm4ge3N0YXRlOiBzdGF0ZSwgbW9kZTogbW9kZX07XG4gICAgfSxcblxuICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgbGluZSkge1xuICAgICAgaWYgKHN0YXRlLmJsb2NrID09IGh0bWxCbG9jayAmJiBodG1sTW9kZS5pbmRlbnQpIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpXG4gICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSAmJiBzdGF0ZS5sb2NhbE1vZGUuaW5kZW50KSByZXR1cm4gc3RhdGUubG9jYWxNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIsIGxpbmUpXG4gICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzXG4gICAgfSxcblxuICAgIGJsYW5rTGluZTogYmxhbmtMaW5lLFxuXG4gICAgZ2V0VHlwZTogZ2V0VHlwZSxcblxuICAgIGJsb2NrQ29tbWVudFN0YXJ0OiBcIjwhLS1cIixcbiAgICBibG9ja0NvbW1lbnRFbmQ6IFwiLS0+XCIsXG4gICAgY2xvc2VCcmFja2V0czogXCIoKVtde30nJ1xcXCJcXFwiYGBcIixcbiAgICBmb2xkOiBcIm1hcmtkb3duXCJcbiAgfTtcbiAgcmV0dXJuIG1vZGU7XG59LCBcInhtbFwiKTtcblxuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9tYXJrZG93blwiLCBcIm1hcmtkb3duXCIpO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3gtbWFya2Rvd25cIiwgXCJtYXJrZG93blwiKTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4vLyBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgYWxsb3dzIG1vZGVzIHRvIGJlIGNvbWJpbmVkLiBUaGUgbW9kZSBnaXZlblxuLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZVxuLy8gZnVuY3Rpb25hbGl0eSwgYnV0IGEgc2Vjb25kICh0eXBpY2FsbHkgc2ltcGxlKSBtb2RlIGlzIHVzZWQsIHdoaWNoXG4vLyBjYW4gb3ZlcnJpZGUgdGhlIHN0eWxlIG9mIHRleHQuIEJvdGggbW9kZXMgZ2V0IHRvIHBhcnNlIGFsbCBvZiB0aGVcbi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGVcbi8vIG92ZXJsYXkgd2lucywgdW5sZXNzIHRoZSBjb21iaW5lIGFyZ3VtZW50IHdhcyB0cnVlIGFuZCBub3Qgb3ZlcnJpZGRlbixcbi8vIG9yIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyB3YXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgc3R5bGVzIGFyZVxuLy8gY29tYmluZWQuXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5vdmVybGF5TW9kZSA9IGZ1bmN0aW9uKGJhc2UsIG92ZXJsYXksIGNvbWJpbmUpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSxcbiAgICAgICAgb3ZlcmxheTogQ29kZU1pcnJvci5zdGFydFN0YXRlKG92ZXJsYXkpLFxuICAgICAgICBiYXNlUG9zOiAwLCBiYXNlQ3VyOiBudWxsLFxuICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsLFxuICAgICAgICBzdHJlYW1TZWVuOiBudWxsXG4gICAgICB9O1xuICAgIH0sXG4gICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogQ29kZU1pcnJvci5jb3B5U3RhdGUoYmFzZSwgc3RhdGUuYmFzZSksXG4gICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLFxuICAgICAgICBiYXNlUG9zOiBzdGF0ZS5iYXNlUG9zLCBiYXNlQ3VyOiBudWxsLFxuICAgICAgICBvdmVybGF5UG9zOiBzdGF0ZS5vdmVybGF5UG9zLCBvdmVybGF5Q3VyOiBudWxsXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgaWYgKHN0cmVhbSAhPSBzdGF0ZS5zdHJlYW1TZWVuIHx8XG4gICAgICAgICAgTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcykgPCBzdHJlYW0uc3RhcnQpIHtcbiAgICAgICAgc3RhdGUuc3RyZWFtU2VlbiA9IHN0cmVhbTtcbiAgICAgICAgc3RhdGUuYmFzZVBvcyA9IHN0YXRlLm92ZXJsYXlQb3MgPSBzdHJlYW0uc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUuYmFzZVBvcykge1xuICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpO1xuICAgICAgICBzdGF0ZS5iYXNlUG9zID0gc3RyZWFtLnBvcztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykge1xuICAgICAgICBzdHJlYW0ucG9zID0gc3RyZWFtLnN0YXJ0O1xuICAgICAgICBzdGF0ZS5vdmVybGF5Q3VyID0gb3ZlcmxheS50b2tlbihzdHJlYW0sIHN0YXRlLm92ZXJsYXkpO1xuICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvcztcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5wb3MgPSBNYXRoLm1pbihzdGF0ZS5iYXNlUG9zLCBzdGF0ZS5vdmVybGF5UG9zKTtcblxuICAgICAgLy8gc3RhdGUub3ZlcmxheS5jb21iaW5lVG9rZW5zIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgY29tYmluZSxcbiAgICAgIC8vIHVubGVzcyBzZXQgdG8gbnVsbFxuICAgICAgaWYgKHN0YXRlLm92ZXJsYXlDdXIgPT0gbnVsbCkgcmV0dXJuIHN0YXRlLmJhc2VDdXI7XG4gICAgICBlbHNlIGlmIChzdGF0ZS5iYXNlQ3VyICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgIHN0YXRlLm92ZXJsYXkuY29tYmluZVRva2VucyB8fFxuICAgICAgICAgICAgICAgY29tYmluZSAmJiBzdGF0ZS5vdmVybGF5LmNvbWJpbmVUb2tlbnMgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHN0YXRlLmJhc2VDdXIgKyBcIiBcIiArIHN0YXRlLm92ZXJsYXlDdXI7XG4gICAgICBlbHNlIHJldHVybiBzdGF0ZS5vdmVybGF5Q3VyO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGJhc2UuaW5kZW50ICYmIGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIHJldHVybiBiYXNlLmluZGVudChzdGF0ZS5iYXNlLCB0ZXh0QWZ0ZXIpO1xuICAgIH0sXG4gICAgZWxlY3RyaWNDaGFyczogYmFzZS5lbGVjdHJpY0NoYXJzLFxuXG4gICAgaW5uZXJNb2RlOiBmdW5jdGlvbihzdGF0ZSkgeyByZXR1cm4ge3N0YXRlOiBzdGF0ZS5iYXNlLCBtb2RlOiBiYXNlfTsgfSxcblxuICAgIGJsYW5rTGluZTogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHZhciBiYXNlVG9rZW4sIG92ZXJsYXlUb2tlbjtcbiAgICAgIGlmIChiYXNlLmJsYW5rTGluZSkgYmFzZVRva2VuID0gYmFzZS5ibGFua0xpbmUoc3RhdGUuYmFzZSk7XG4gICAgICBpZiAob3ZlcmxheS5ibGFua0xpbmUpIG92ZXJsYXlUb2tlbiA9IG92ZXJsYXkuYmxhbmtMaW5lKHN0YXRlLm92ZXJsYXkpO1xuXG4gICAgICByZXR1cm4gb3ZlcmxheVRva2VuID09IG51bGwgP1xuICAgICAgICBiYXNlVG9rZW4gOlxuICAgICAgICAoY29tYmluZSAmJiBiYXNlVG9rZW4gIT0gbnVsbCA/IGJhc2VUb2tlbiArIFwiIFwiICsgb3ZlcmxheVRva2VuIDogb3ZlcmxheVRva2VuKTtcbiAgICB9XG4gIH07XG59O1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvcztcbiAgZnVuY3Rpb24gY21wKGEsIGIpIHsgcmV0dXJuIGEubGluZSAtIGIubGluZSB8fCBhLmNoIC0gYi5jaDsgfVxuXG4gIHZhciBuYW1lU3RhcnRDaGFyID0gXCJBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbiAgdmFyIG5hbWVDaGFyID0gbmFtZVN0YXJ0Q2hhciArIFwiXFwtXFw6XFwuMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbiAgdmFyIHhtbFRhZ1N0YXJ0ID0gbmV3IFJlZ0V4cChcIjwoLz8pKFtcIiArIG5hbWVTdGFydENoYXIgKyBcIl1bXCIgKyBuYW1lQ2hhciArIFwiXSopXCIsIFwiZ1wiKTtcblxuICBmdW5jdGlvbiBJdGVyKGNtLCBsaW5lLCBjaCwgcmFuZ2UpIHtcbiAgICB0aGlzLmxpbmUgPSBsaW5lOyB0aGlzLmNoID0gY2g7XG4gICAgdGhpcy5jbSA9IGNtOyB0aGlzLnRleHQgPSBjbS5nZXRMaW5lKGxpbmUpO1xuICAgIHRoaXMubWluID0gcmFuZ2UgPyBNYXRoLm1heChyYW5nZS5mcm9tLCBjbS5maXJzdExpbmUoKSkgOiBjbS5maXJzdExpbmUoKTtcbiAgICB0aGlzLm1heCA9IHJhbmdlID8gTWF0aC5taW4ocmFuZ2UudG8gLSAxLCBjbS5sYXN0TGluZSgpKSA6IGNtLmxhc3RMaW5lKCk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWdBdChpdGVyLCBjaCkge1xuICAgIHZhciB0eXBlID0gaXRlci5jbS5nZXRUb2tlblR5cGVBdChQb3MoaXRlci5saW5lLCBjaCkpO1xuICAgIHJldHVybiB0eXBlICYmIC9cXGJ0YWdcXGIvLnRlc3QodHlwZSk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0TGluZShpdGVyKSB7XG4gICAgaWYgKGl0ZXIubGluZSA+PSBpdGVyLm1heCkgcmV0dXJuO1xuICAgIGl0ZXIuY2ggPSAwO1xuICAgIGl0ZXIudGV4dCA9IGl0ZXIuY20uZ2V0TGluZSgrK2l0ZXIubGluZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gcHJldkxpbmUoaXRlcikge1xuICAgIGlmIChpdGVyLmxpbmUgPD0gaXRlci5taW4pIHJldHVybjtcbiAgICBpdGVyLnRleHQgPSBpdGVyLmNtLmdldExpbmUoLS1pdGVyLmxpbmUpO1xuICAgIGl0ZXIuY2ggPSBpdGVyLnRleHQubGVuZ3RoO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9UYWdFbmQoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBndCA9IGl0ZXIudGV4dC5pbmRleE9mKFwiPlwiLCBpdGVyLmNoKTtcbiAgICAgIGlmIChndCA9PSAtMSkgeyBpZiAobmV4dExpbmUoaXRlcikpIGNvbnRpbnVlOyBlbHNlIHJldHVybjsgfVxuICAgICAgaWYgKCF0YWdBdChpdGVyLCBndCArIDEpKSB7IGl0ZXIuY2ggPSBndCArIDE7IGNvbnRpbnVlOyB9XG4gICAgICB2YXIgbGFzdFNsYXNoID0gaXRlci50ZXh0Lmxhc3RJbmRleE9mKFwiL1wiLCBndCk7XG4gICAgICB2YXIgc2VsZkNsb3NlID0gbGFzdFNsYXNoID4gLTEgJiYgIS9cXFMvLnRlc3QoaXRlci50ZXh0LnNsaWNlKGxhc3RTbGFzaCArIDEsIGd0KSk7XG4gICAgICBpdGVyLmNoID0gZ3QgKyAxO1xuICAgICAgcmV0dXJuIHNlbGZDbG9zZSA/IFwic2VsZkNsb3NlXCIgOiBcInJlZ3VsYXJcIjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdG9UYWdTdGFydChpdGVyKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIGx0ID0gaXRlci5jaCA/IGl0ZXIudGV4dC5sYXN0SW5kZXhPZihcIjxcIiwgaXRlci5jaCAtIDEpIDogLTE7XG4gICAgICBpZiAobHQgPT0gLTEpIHsgaWYgKHByZXZMaW5lKGl0ZXIpKSBjb250aW51ZTsgZWxzZSByZXR1cm47IH1cbiAgICAgIGlmICghdGFnQXQoaXRlciwgbHQgKyAxKSkgeyBpdGVyLmNoID0gbHQ7IGNvbnRpbnVlOyB9XG4gICAgICB4bWxUYWdTdGFydC5sYXN0SW5kZXggPSBsdDtcbiAgICAgIGl0ZXIuY2ggPSBsdDtcbiAgICAgIHZhciBtYXRjaCA9IHhtbFRhZ1N0YXJ0LmV4ZWMoaXRlci50ZXh0KTtcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA9PSBsdCkgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvTmV4dFRhZyhpdGVyKSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgeG1sVGFnU3RhcnQubGFzdEluZGV4ID0gaXRlci5jaDtcbiAgICAgIHZhciBmb3VuZCA9IHhtbFRhZ1N0YXJ0LmV4ZWMoaXRlci50ZXh0KTtcbiAgICAgIGlmICghZm91bmQpIHsgaWYgKG5leHRMaW5lKGl0ZXIpKSBjb250aW51ZTsgZWxzZSByZXR1cm47IH1cbiAgICAgIGlmICghdGFnQXQoaXRlciwgZm91bmQuaW5kZXggKyAxKSkgeyBpdGVyLmNoID0gZm91bmQuaW5kZXggKyAxOyBjb250aW51ZTsgfVxuICAgICAgaXRlci5jaCA9IGZvdW5kLmluZGV4ICsgZm91bmRbMF0ubGVuZ3RoO1xuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0b1ByZXZUYWcoaXRlcikge1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBndCA9IGl0ZXIuY2ggPyBpdGVyLnRleHQubGFzdEluZGV4T2YoXCI+XCIsIGl0ZXIuY2ggLSAxKSA6IC0xO1xuICAgICAgaWYgKGd0ID09IC0xKSB7IGlmIChwcmV2TGluZShpdGVyKSkgY29udGludWU7IGVsc2UgcmV0dXJuOyB9XG4gICAgICBpZiAoIXRhZ0F0KGl0ZXIsIGd0ICsgMSkpIHsgaXRlci5jaCA9IGd0OyBjb250aW51ZTsgfVxuICAgICAgdmFyIGxhc3RTbGFzaCA9IGl0ZXIudGV4dC5sYXN0SW5kZXhPZihcIi9cIiwgZ3QpO1xuICAgICAgdmFyIHNlbGZDbG9zZSA9IGxhc3RTbGFzaCA+IC0xICYmICEvXFxTLy50ZXN0KGl0ZXIudGV4dC5zbGljZShsYXN0U2xhc2ggKyAxLCBndCkpO1xuICAgICAgaXRlci5jaCA9IGd0ICsgMTtcbiAgICAgIHJldHVybiBzZWxmQ2xvc2UgPyBcInNlbGZDbG9zZVwiIDogXCJyZWd1bGFyXCI7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZE1hdGNoaW5nQ2xvc2UoaXRlciwgdGFnKSB7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG5leHQgPSB0b05leHRUYWcoaXRlciksIGVuZCwgc3RhcnRMaW5lID0gaXRlci5saW5lLCBzdGFydENoID0gaXRlci5jaCAtIChuZXh0ID8gbmV4dFswXS5sZW5ndGggOiAwKTtcbiAgICAgIGlmICghbmV4dCB8fCAhKGVuZCA9IHRvVGFnRW5kKGl0ZXIpKSkgcmV0dXJuO1xuICAgICAgaWYgKGVuZCA9PSBcInNlbGZDbG9zZVwiKSBjb250aW51ZTtcbiAgICAgIGlmIChuZXh0WzFdKSB7IC8vIGNsb3NpbmcgdGFnXG4gICAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgaWYgKHN0YWNrW2ldID09IG5leHRbMl0pIHtcbiAgICAgICAgICBzdGFjay5sZW5ndGggPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgMCAmJiAoIXRhZyB8fCB0YWcgPT0gbmV4dFsyXSkpIHJldHVybiB7XG4gICAgICAgICAgdGFnOiBuZXh0WzJdLFxuICAgICAgICAgIGZyb206IFBvcyhzdGFydExpbmUsIHN0YXJ0Q2gpLFxuICAgICAgICAgIHRvOiBQb3MoaXRlci5saW5lLCBpdGVyLmNoKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHsgLy8gb3BlbmluZyB0YWdcbiAgICAgICAgc3RhY2sucHVzaChuZXh0WzJdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZmluZE1hdGNoaW5nT3BlbihpdGVyLCB0YWcpIHtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgcHJldiA9IHRvUHJldlRhZyhpdGVyKTtcbiAgICAgIGlmICghcHJldikgcmV0dXJuO1xuICAgICAgaWYgKHByZXYgPT0gXCJzZWxmQ2xvc2VcIikgeyB0b1RhZ1N0YXJ0KGl0ZXIpOyBjb250aW51ZTsgfVxuICAgICAgdmFyIGVuZExpbmUgPSBpdGVyLmxpbmUsIGVuZENoID0gaXRlci5jaDtcbiAgICAgIHZhciBzdGFydCA9IHRvVGFnU3RhcnQoaXRlcik7XG4gICAgICBpZiAoIXN0YXJ0KSByZXR1cm47XG4gICAgICBpZiAoc3RhcnRbMV0pIHsgLy8gY2xvc2luZyB0YWdcbiAgICAgICAgc3RhY2sucHVzaChzdGFydFsyXSk7XG4gICAgICB9IGVsc2UgeyAvLyBvcGVuaW5nIHRhZ1xuICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIGlmIChzdGFja1tpXSA9PSBzdGFydFsyXSkge1xuICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCAwICYmICghdGFnIHx8IHRhZyA9PSBzdGFydFsyXSkpIHJldHVybiB7XG4gICAgICAgICAgdGFnOiBzdGFydFsyXSxcbiAgICAgICAgICBmcm9tOiBQb3MoaXRlci5saW5lLCBpdGVyLmNoKSxcbiAgICAgICAgICB0bzogUG9zKGVuZExpbmUsIGVuZENoKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwieG1sXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICAgIHZhciBpdGVyID0gbmV3IEl0ZXIoY20sIHN0YXJ0LmxpbmUsIDApO1xuICAgIGZvciAoOzspIHtcbiAgICAgIHZhciBvcGVuVGFnID0gdG9OZXh0VGFnKGl0ZXIpXG4gICAgICBpZiAoIW9wZW5UYWcgfHwgaXRlci5saW5lICE9IHN0YXJ0LmxpbmUpIHJldHVyblxuICAgICAgdmFyIGVuZCA9IHRvVGFnRW5kKGl0ZXIpXG4gICAgICBpZiAoIWVuZCkgcmV0dXJuXG4gICAgICBpZiAoIW9wZW5UYWdbMV0gJiYgZW5kICE9IFwic2VsZkNsb3NlXCIpIHtcbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gUG9zKGl0ZXIubGluZSwgaXRlci5jaCk7XG4gICAgICAgIHZhciBlbmRQb3MgPSBmaW5kTWF0Y2hpbmdDbG9zZShpdGVyLCBvcGVuVGFnWzJdKTtcbiAgICAgICAgcmV0dXJuIGVuZFBvcyAmJiBjbXAoZW5kUG9zLmZyb20sIHN0YXJ0UG9zKSA+IDAgPyB7ZnJvbTogc3RhcnRQb3MsIHRvOiBlbmRQb3MuZnJvbX0gOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgQ29kZU1pcnJvci5maW5kTWF0Y2hpbmdUYWcgPSBmdW5jdGlvbihjbSwgcG9zLCByYW5nZSkge1xuICAgIHZhciBpdGVyID0gbmV3IEl0ZXIoY20sIHBvcy5saW5lLCBwb3MuY2gsIHJhbmdlKTtcbiAgICBpZiAoaXRlci50ZXh0LmluZGV4T2YoXCI+XCIpID09IC0xICYmIGl0ZXIudGV4dC5pbmRleE9mKFwiPFwiKSA9PSAtMSkgcmV0dXJuO1xuICAgIHZhciBlbmQgPSB0b1RhZ0VuZChpdGVyKSwgdG8gPSBlbmQgJiYgUG9zKGl0ZXIubGluZSwgaXRlci5jaCk7XG4gICAgdmFyIHN0YXJ0ID0gZW5kICYmIHRvVGFnU3RhcnQoaXRlcik7XG4gICAgaWYgKCFlbmQgfHwgIXN0YXJ0IHx8IGNtcChpdGVyLCBwb3MpID4gMCkgcmV0dXJuO1xuICAgIHZhciBoZXJlID0ge2Zyb206IFBvcyhpdGVyLmxpbmUsIGl0ZXIuY2gpLCB0bzogdG8sIHRhZzogc3RhcnRbMl19O1xuICAgIGlmIChlbmQgPT0gXCJzZWxmQ2xvc2VcIikgcmV0dXJuIHtvcGVuOiBoZXJlLCBjbG9zZTogbnVsbCwgYXQ6IFwib3BlblwifTtcblxuICAgIGlmIChzdGFydFsxXSkgeyAvLyBjbG9zaW5nIHRhZ1xuICAgICAgcmV0dXJuIHtvcGVuOiBmaW5kTWF0Y2hpbmdPcGVuKGl0ZXIsIHN0YXJ0WzJdKSwgY2xvc2U6IGhlcmUsIGF0OiBcImNsb3NlXCJ9O1xuICAgIH0gZWxzZSB7IC8vIG9wZW5pbmcgdGFnXG4gICAgICBpdGVyID0gbmV3IEl0ZXIoY20sIHRvLmxpbmUsIHRvLmNoLCByYW5nZSk7XG4gICAgICByZXR1cm4ge29wZW46IGhlcmUsIGNsb3NlOiBmaW5kTWF0Y2hpbmdDbG9zZShpdGVyLCBzdGFydFsyXSksIGF0OiBcIm9wZW5cIn07XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZEVuY2xvc2luZ1RhZyA9IGZ1bmN0aW9uKGNtLCBwb3MsIHJhbmdlLCB0YWcpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBJdGVyKGNtLCBwb3MubGluZSwgcG9zLmNoLCByYW5nZSk7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG9wZW4gPSBmaW5kTWF0Y2hpbmdPcGVuKGl0ZXIsIHRhZyk7XG4gICAgICBpZiAoIW9wZW4pIGJyZWFrO1xuICAgICAgdmFyIGZvcndhcmQgPSBuZXcgSXRlcihjbSwgcG9zLmxpbmUsIHBvcy5jaCwgcmFuZ2UpO1xuICAgICAgdmFyIGNsb3NlID0gZmluZE1hdGNoaW5nQ2xvc2UoZm9yd2FyZCwgb3Blbi50YWcpO1xuICAgICAgaWYgKGNsb3NlKSByZXR1cm4ge29wZW46IG9wZW4sIGNsb3NlOiBjbG9zZX07XG4gICAgfVxuICB9O1xuXG4gIC8vIFVzZWQgYnkgYWRkb24vZWRpdC9jbG9zZXRhZy5qc1xuICBDb2RlTWlycm9yLnNjYW5Gb3JDbG9zaW5nVGFnID0gZnVuY3Rpb24oY20sIHBvcywgbmFtZSwgZW5kKSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgSXRlcihjbSwgcG9zLmxpbmUsIHBvcy5jaCwgZW5kID8ge2Zyb206IDAsIHRvOiBlbmR9IDogbnVsbCk7XG4gICAgcmV0dXJuIGZpbmRNYXRjaGluZ0Nsb3NlKGl0ZXIsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBmdW5jdGlvbiBkb0ZvbGQoY20sIHBvcywgb3B0aW9ucywgZm9yY2UpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNhbGwpIHtcbiAgICAgIHZhciBmaW5kZXIgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaW5kZXIgPSBnZXRPcHRpb24oY20sIG9wdGlvbnMsIFwicmFuZ2VGaW5kZXJcIik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcG9zID09IFwibnVtYmVyXCIpIHBvcyA9IENvZGVNaXJyb3IuUG9zKHBvcywgMCk7XG4gICAgdmFyIG1pblNpemUgPSBnZXRPcHRpb24oY20sIG9wdGlvbnMsIFwibWluRm9sZFNpemVcIik7XG5cbiAgICBmdW5jdGlvbiBnZXRSYW5nZShhbGxvd0ZvbGRlZCkge1xuICAgICAgdmFyIHJhbmdlID0gZmluZGVyKGNtLCBwb3MpO1xuICAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS50by5saW5lIC0gcmFuZ2UuZnJvbS5saW5lIDwgbWluU2l6ZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgbWFya3MgPSBjbS5maW5kTWFya3NBdChyYW5nZS5mcm9tKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKG1hcmtzW2ldLl9faXNGb2xkICYmIGZvcmNlICE9PSBcImZvbGRcIikge1xuICAgICAgICAgIGlmICghYWxsb3dGb2xkZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgIHJhbmdlLmNsZWFyZWQgPSB0cnVlO1xuICAgICAgICAgIG1hcmtzW2ldLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBnZXRSYW5nZSh0cnVlKTtcbiAgICBpZiAoZ2V0T3B0aW9uKGNtLCBvcHRpb25zLCBcInNjYW5VcFwiKSkgd2hpbGUgKCFyYW5nZSAmJiBwb3MubGluZSA+IGNtLmZpcnN0TGluZSgpKSB7XG4gICAgICBwb3MgPSBDb2RlTWlycm9yLlBvcyhwb3MubGluZSAtIDEsIDApO1xuICAgICAgcmFuZ2UgPSBnZXRSYW5nZShmYWxzZSk7XG4gICAgfVxuICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UuY2xlYXJlZCB8fCBmb3JjZSA9PT0gXCJ1bmZvbGRcIikgcmV0dXJuO1xuXG4gICAgdmFyIG15V2lkZ2V0ID0gbWFrZVdpZGdldChjbSwgb3B0aW9ucyk7XG4gICAgQ29kZU1pcnJvci5vbihteVdpZGdldCwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24oZSkge1xuICAgICAgbXlSYW5nZS5jbGVhcigpO1xuICAgICAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0KGUpO1xuICAgIH0pO1xuICAgIHZhciBteVJhbmdlID0gY20ubWFya1RleHQocmFuZ2UuZnJvbSwgcmFuZ2UudG8sIHtcbiAgICAgIHJlcGxhY2VkV2l0aDogbXlXaWRnZXQsXG4gICAgICBjbGVhck9uRW50ZXI6IGdldE9wdGlvbihjbSwgb3B0aW9ucywgXCJjbGVhck9uRW50ZXJcIiksXG4gICAgICBfX2lzRm9sZDogdHJ1ZVxuICAgIH0pO1xuICAgIG15UmFuZ2Uub24oXCJjbGVhclwiLCBmdW5jdGlvbihmcm9tLCB0bykge1xuICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sIFwidW5mb2xkXCIsIGNtLCBmcm9tLCB0byk7XG4gICAgfSk7XG4gICAgQ29kZU1pcnJvci5zaWduYWwoY20sIFwiZm9sZFwiLCBjbSwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZVdpZGdldChjbSwgb3B0aW9ucykge1xuICAgIHZhciB3aWRnZXQgPSBnZXRPcHRpb24oY20sIG9wdGlvbnMsIFwid2lkZ2V0XCIpO1xuICAgIGlmICh0eXBlb2Ygd2lkZ2V0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUod2lkZ2V0KTtcbiAgICAgIHdpZGdldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgd2lkZ2V0LmFwcGVuZENoaWxkKHRleHQpO1xuICAgICAgd2lkZ2V0LmNsYXNzTmFtZSA9IFwiQ29kZU1pcnJvci1mb2xkbWFya2VyXCI7XG4gICAgfSBlbHNlIGlmICh3aWRnZXQpIHtcbiAgICAgIHdpZGdldCA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHdpZGdldDtcbiAgfVxuXG4gIC8vIENsdW1zeSBiYWNrd2FyZHMtY29tcGF0aWJsZSBpbnRlcmZhY2VcbiAgQ29kZU1pcnJvci5uZXdGb2xkRnVuY3Rpb24gPSBmdW5jdGlvbihyYW5nZUZpbmRlciwgd2lkZ2V0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNtLCBwb3MpIHsgZG9Gb2xkKGNtLCBwb3MsIHtyYW5nZUZpbmRlcjogcmFuZ2VGaW5kZXIsIHdpZGdldDogd2lkZ2V0fSk7IH07XG4gIH07XG5cbiAgLy8gTmV3LXN0eWxlIGludGVyZmFjZVxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbihcImZvbGRDb2RlXCIsIGZ1bmN0aW9uKHBvcywgb3B0aW9ucywgZm9yY2UpIHtcbiAgICBkb0ZvbGQodGhpcywgcG9zLCBvcHRpb25zLCBmb3JjZSk7XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKFwiaXNGb2xkZWRcIiwgZnVuY3Rpb24ocG9zKSB7XG4gICAgdmFyIG1hcmtzID0gdGhpcy5maW5kTWFya3NBdChwb3MpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpXG4gICAgICBpZiAobWFya3NbaV0uX19pc0ZvbGQpIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBDb2RlTWlycm9yLmNvbW1hbmRzLnRvZ2dsZUZvbGQgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLmZvbGRDb2RlKGNtLmdldEN1cnNvcigpKTtcbiAgfTtcbiAgQ29kZU1pcnJvci5jb21tYW5kcy5mb2xkID0gZnVuY3Rpb24oY20pIHtcbiAgICBjbS5mb2xkQ29kZShjbS5nZXRDdXJzb3IoKSwgbnVsbCwgXCJmb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20uZm9sZENvZGUoY20uZ2V0Q3Vyc29yKCksIG51bGwsIFwidW5mb2xkXCIpO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLmZvbGRBbGwgPSBmdW5jdGlvbihjbSkge1xuICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIGkgPSBjbS5maXJzdExpbmUoKSwgZSA9IGNtLmxhc3RMaW5lKCk7IGkgPD0gZTsgaSsrKVxuICAgICAgICBjbS5mb2xkQ29kZShDb2RlTWlycm9yLlBvcyhpLCAwKSwgbnVsbCwgXCJmb2xkXCIpO1xuICAgIH0pO1xuICB9O1xuICBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZm9sZEFsbCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGNtLmZpcnN0TGluZSgpLCBlID0gY20ubGFzdExpbmUoKTsgaSA8PSBlOyBpKyspXG4gICAgICAgIGNtLmZvbGRDb2RlKENvZGVNaXJyb3IuUG9zKGksIDApLCBudWxsLCBcInVuZm9sZFwiKTtcbiAgICB9KTtcbiAgfTtcblxuICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKFwiZm9sZFwiLCBcImNvbWJpbmVcIiwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGZ1bmNzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBmb3VuZCA9IGZ1bmNzW2ldKGNtLCBzdGFydCk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIENvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiYXV0b1wiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgICB2YXIgaGVscGVycyA9IGNtLmdldEhlbHBlcnMoc3RhcnQsIFwiZm9sZFwiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlbHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjdXIgPSBoZWxwZXJzW2ldKGNtLCBzdGFydCk7XG4gICAgICBpZiAoY3VyKSByZXR1cm4gY3VyO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgIHJhbmdlRmluZGVyOiBDb2RlTWlycm9yLmZvbGQuYXV0byxcbiAgICB3aWRnZXQ6IFwiXFx1MjE5NFwiLFxuICAgIG1pbkZvbGRTaXplOiAwLFxuICAgIHNjYW5VcDogZmFsc2UsXG4gICAgY2xlYXJPbkVudGVyOiB0cnVlXG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJmb2xkT3B0aW9uc1wiLCBudWxsKTtcblxuICBmdW5jdGlvbiBnZXRPcHRpb24oY20sIG9wdGlvbnMsIG5hbWUpIHtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zW25hbWVdICE9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gb3B0aW9uc1tuYW1lXTtcbiAgICB2YXIgZWRpdG9yT3B0aW9ucyA9IGNtLm9wdGlvbnMuZm9sZE9wdGlvbnM7XG4gICAgaWYgKGVkaXRvck9wdGlvbnMgJiYgZWRpdG9yT3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIGVkaXRvck9wdGlvbnNbbmFtZV07XG4gICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zW25hbWVdO1xuICB9XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oXCJmb2xkT3B0aW9uXCIsIGZ1bmN0aW9uKG9wdGlvbnMsIG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0T3B0aW9uKHRoaXMsIG9wdGlvbnMsIG5hbWUpO1xuICB9KTtcbn0pO1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsIlxyXG5pbXBvcnQgZG9tUmVuZGVyIGZyb20gJy4vZWRpdG9yL2NyZWF0ZUVsZW1lbnQnO1xyXG5pbXBvcnQgQ09ORklHIGZyb20gJy4vZWRpdG9yL2NvbmZpZyc7XHJcblxyXG4vLyDlt6Xlhbflm77moIflip/og71cclxuaW1wb3J0ICcuL3N0eWxlL2luZGV4LnNjc3MnO1xyXG5cclxuaW1wb3J0ICR0b29scyBmcm9tICcuL2VkaXRvci90b29sYmFySGFuZGxlJztcclxuXHJcbi8qKiDlt6Xlhbfpm4blkIjlr7nosaEuICAqL1xyXG5pbXBvcnQgVVRJTCBmcm9tICcuL3V0aWwvVXRpbCc7XHJcblxyXG4vLyBjb2RlbWlycm9yID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuaW1wb3J0IENvZGVtaXJyb3IgZnJvbSAnY29kZW1pcnJvcic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL21hcmtkb3duL21hcmtkb3duJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvZ2ZtL2dmbSc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdCc7XHJcblxyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vbW9kZS9vdmVybGF5JztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2VkaXQvY2xvc2V0YWcnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jb250aW51ZWxpc3QnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZWRpdC9jbG9zZWJyYWNrZXRzJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL3Njcm9sbC9hbm5vdGF0ZXNjcm9sbGJhcic7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJztcclxuaW1wb3J0ICdjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGNvZGUnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC94bWwtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRndXR0ZXInO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9jb21tZW50LWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9pbmRlbnQtZm9sZCc7XHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2JyYWNlLWZvbGQnO1xyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvYWRkb24vZm9sZC9tYXJrZG93bi1mb2xkJztcclxuXHJcblxyXG5pbXBvcnQgJ2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuY3NzJztcclxuLy8gaW1wb3J0ICdjb2RlbWlycm9yL3RoZW1lL2Jhc2UxNi1saWdodC5jc3MnXHJcbmltcG9ydCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRndXR0ZXIuY3NzJztcclxuLy8gY29kZW1pcnJvciA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyBtYXJrZWQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5pbXBvcnQgbWFya2VkIGZyb20gJ21hcmtlZCc7XHJcbi8vIG1hcmtlZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyBoaWdobGlnaHQuanMgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5pbXBvcnQgaGxqcyBmcm9tICdoaWdobGlnaHQuanMnO1xyXG5pbXBvcnQgJ2hpZ2hsaWdodC5qcy9zdHlsZXMvbW9ub2thaS1zdWJsaW1lLmNzcyc7XHJcbi8vIGhpZ2hsaWdodC5qcyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyBAc2VlIFtjb25maWctc2VlXSlbaHR0cHM6Ly9naXRodWIuY29tL2hhY2ttZGlvL2NvZGltZC9ibG9iL21hc3Rlci9wdWJsaWMvanMvbGliL2VkaXRvci9pbmRleC5qc11cclxuXHJcbmNvbnN0IGNvZGVtaXJyb3IgPSB7XHJcbiAgLyoqIENvZGVtaXJyb3Ig6K6+572uLiAqL1xyXG4gIGNvbmZpZzoge1xyXG4gICAgbW9kZToge1xyXG4gICAgICBuYW1lOiAnZ2ZtJyxcclxuICAgICAgdG9rZW5UeXBlT3ZlcnJpZGVzOiB7XHJcbiAgICAgICAgZW1vamk6ICdlbW9qaSdcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKiDmmL7npLrooYzlj7cgKi9cclxuICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxyXG4gICAgLy8g6Ieq5Yqo6aqM6K+B6ZSZ6K+vXHJcbiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLFxyXG4gICAgLy8g57yp6L+bXHJcbiAgICBpbmRlbnRVbml0OiA0LFxyXG4gICAgLy8g5piv5ZCm5o2i6KGMXHJcbiAgICBsaW5lV3JhcHBpbmc6IGZhbHNlLFxyXG4gICAgLy8g54K55Ye76auY5Lqu5q2j6KGMXHJcbiAgICBzdHlsZUFjdGl2ZUxpbmU6IHRydWUsXHJcbiAgICAvLyDphY3oibIo5Li76aKYKVxyXG4gICAgdGhlbWU6ICdiYXNlMTYtZGFyaycsXHJcbiAgICAvLyDoh6rliqjooaXlhajmi6zlj7dcclxuICAgIGF1dG9DbG9zZUJyYWNrZXRzOiB0cnVlLFxyXG4gICAgLy8g6Ieq5Yqo6Zet5ZCI5qCH562+XHJcbiAgICBhdXRvQ2xvc2VUYWdzOiB0cnVlLFxyXG4gICAgLy8g5bGV5byA5oqY5Y+gXHJcbiAgICBmb2xkR3V0dGVyOiB0cnVlLFxyXG4gICAgZ3V0dGVyczogWydDb2RlTWlycm9yLWxpbmVudW1iZXJzJywgJ2F1dGhvcnNoaXAtZ3V0dGVycycsICdDb2RlTWlycm9yLWZvbGRndXR0ZXInXSxcclxuICAgIHBsYWNlaG9sZGVyOiBcIuKGkCBTdGFydCBieSBlbnRlcmluZyBhIHRpdGxlIGhlcmVcXG49PT1cXG5WaXNpdCAvZmVhdHVyZXMgaWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkby5cXG5IYXBweSBoYWNraW5nIDopXCJcclxuICB9XHJcbn1cclxuXHJcblxyXG5jbGFzcyBDb29sTURFZGl0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG5cclxuICAgIG9wdGlvbnMuZWRpdG9yID0gdGhpcztcclxuXHJcbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XHJcblxyXG4gICAgLy8gQXV0byByZW5kZXJcclxuICAgIC8vIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJ3lp4vljJYuIFxyXG4gICAqL1xyXG4gIGluaXQob3B0aW9ucykge1xyXG4gICAgdGhpcy5pbml0RGF0YShvcHRpb25zKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0VmlldyhvcHRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8vIOiuvue9riBjb25maWdcclxuICBzZXQgb3B0aW9ucyhvcHRpb24pIHtcclxuICAgIC8vIOWQjOWAvOWvueixoeWAvOimhuebllxyXG4gIH1cclxuICBnZXQgb3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiDliJ3lp4vljJbnvJbovpHlmajmlbDmja4uIFxyXG4gICAqL1xyXG4gIC8vIGluaXREYXRhKG9wdGlvbnMpIHtcclxuICAvLyAgIC8vIEZpbmQgdGhlIGVsZW1lbnQgYXR0clxyXG4gIC8vICAgaWYgKG9wdGlvbnMuZWxlbWVudCkge1xyXG4gIC8vICAgICB0aGlzLmVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQ7XHJcbiAgLy8gICAgIHRoaXMudGV4dEFyZWFFbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdO1xyXG4gIC8vICAgfSBlbHNlIGlmIChvcHRpb25zLmVsZW1lbnQgPT09IG51bGwpIHtcclxuICAvLyAgICAgY29uc29sZS5sb2coJ01ERWRpdG9yOiBFcnJvci4gTm8gZWxlbWVudCB3YXMgZm91bmQuJyk7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAvLyBIYW5kbGUgdG9vbGJhclxyXG4gIC8vICAgaWYgKG9wdGlvbnMudG9vbGJhciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgLy8gICAgIG9wdGlvbnMudG9vbGJhciA9IFtdO1xyXG5cclxuICAvLyAgICAgLy8gTG9vcCBvdmVyIHRoZSBidWlsdCBpbiBidXR0b25zLCB0byBnZXQgdGhlIHByZWZlcnJlZCBvcmRlclxyXG4gIC8vICAgICBmb3IgKGxldCBrZXkgaW4gdG9vbGJhckJ1aWx0SW5CdXR0b25zKSB7XHJcbiAgLy8gICAgICAgaWYgKHRvb2xiYXJCdWlsdEluQnV0dG9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblxyXG4gIC8vICAgICAgICAgLy8g5YiG6ZqU56ym5Yqf6IO9XHJcbiAgLy8gICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ3NlcGFyYXRvci0nKSAhPSAtMSkge1xyXG4gIC8vICAgICAgICAgICBvcHRpb25zLnRvb2xiYXIucHVzaCgnfCcpXHJcbiAgLy8gICAgICAgICB9XHJcblxyXG4gIC8vICAgICAgICAgLy8gXHJcbiAgLy8gICAgICAgICBpZiAodG9vbGJhckJ1aWx0SW5CdXR0b25zW2tleV0uZGVmYXVsdCA9PT0gdHJ1ZSB8fCBcclxuICAvLyAgICAgICAgICAgIChvcHRpb25zLnNob3dJY29ucyAmJiBcclxuICAvLyAgICAgICAgICAgICBvcHRpb25zLnNob3dJY29ucy5jb25zdHJ1dG9yID09PSBBcnJheSAmJiBcclxuICAvLyAgICAgICAgICAgICBvcHRpb25zLnNob3dJY29ucy5pbmRleE9mKGtleSkgIT0gLTEpKSB7XHJcbiAgLy8gICAgICAgICAgIG9wdGlvbnMudG9vbGJhci5wdXNoKGtleSk7ICAgIFxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIC8vIEhhbmRsZSBzdGF0dXMgYmFyXHJcbiAgLy8gICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ3N0YXR1cycpKSB7XHJcbiAgLy8gICAgIG9wdGlvbnMuc3RhdHVzID0gWydhdXRvc2F2ZScsICdsaW5lcycsICd3b3JkcycsICdjdXJzb3InXTtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAvLyBBZGQgZGVmYXVsdCBwcmV2aWV3IHJlbmRlcmluZyBmdW5jdGlvblxyXG4gIC8vICAgaWYgKCFvcHRpb25zLnByZXZpZXdSZW5kZXIpIHtcclxuICAvLyAgICAgb3B0aW9ucy5wcmV2aWV3UmVuZGVyID0gZnVuY3Rpb24ocGxhaW5UZXh0KSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLm1hcmtkb3duKHBsYWluVGV4dCk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAvLyBTZXQgZGVmYXVsdCBvcHRpb25zIGZvciBwYXJzaW5nIGNvbmZpZ1xyXG4gIC8vICAgb3B0aW9ucy5wYXJzaW5nQ29uZmlnID0gZXh0ZW5kKFxyXG4gIC8vICAgICB7IGhpZ2hsaWdodEZvcm1hdHRpbmc6IHRydWUgfSxcclxuICAvLyAgICAgb3B0aW9ucy5wYXJzaW5nQ29uZmlnIHx8IHt9XHJcbiAgLy8gICApO1xyXG5cclxuICAvLyAgIC8vIE1lcmdpbmcgdGhlIGluc2VydFRleHRzLCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zXHJcbiAgLy8gICBvcHRpb25zLmluc2VydFRleHRzID0gZXh0ZW5kKHt9LCBpbnNlcnRUZXh0cywgb3B0aW9ucy5pbnNlcnRUZXh0cyB8fCB7fSk7XHJcblxyXG4gIC8vICAgLy8gTWVyZ2luZyB0aGUgcHJvbXB0VGV4dHMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgLy8gICBvcHRpb25zLnByb21wdFRleHRzID0gcHJvbXB0VGV4dHM7XHJcblxyXG4gIC8vICAgLy8gTWVyZ2luZyB0aGUgYmxvY2tTdHlsZXMsIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgLy8gICBvcHRpb25zLmJsb2NrU3R5bGVzID0gZXh0ZW5kKHt9LCBibG9ja1N0eWxlcywgb3B0aW9ucy5ibG9ja1N0eWxlcyB8fCB7fSk7XHJcblxyXG4gIC8vICAgLy8gTWVyZ2ludCB0aGUgc2hvcnRjdXRzLCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxyXG4gIC8vICAgLy8g5b+r5o236ZSu6YWN572u6K6+572uXHJcbiAgLy8gICBvcHRpb25zLnNob3J0Y3V0cyA9IGV4dGVuZCh7fSwgc2hvcnRjdXRzLCBvcHRpb25zLnNob3J0Y3V0cyB8fCB7fSk7XHJcblxyXG4gIC8vICAgLy8gVXBkYXRlIHRoaXMgb3B0aW9uc1xyXG4gIC8vICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuXHJcbiAgLy8gICAvLyBUaGUgY29kZW1pcnJvciBjb21tcG9uZW50IGlzIG9ubHkgYXZhbGlhYmxlIGFmdGVyIHJlbmRlcmVkLlxyXG4gIC8vICAgLy8gc28gc2V0dGVyIGZvciB0aGUgaW5pdGlhbFZhbHVlIGNhbiBvbmx5IHJ1biBhZnRlclxyXG4gIC8vICAgLy8gdGhlIGVsZW1lbnQgaGFzIGJlbiByZW5lcmVkXHJcbiAgLy8gICBpZiAob3B0aW9ucy5pbml0aWFsVmFsdWUgJiYgKCF0aGlzLm9wdGlvbnMuYXV0b3NhdmUgfHwgdGhpcy5vcHRpb25zLmF1dG9zYXZlLmZvdW5kU2F2ZVZhbHVlICE9PSB0cnVlKSkge1xyXG4gIC8vICAgICB0aGlzLnZhbHVlKG9wdGlvbnMuaW5pdGlhbFZhbHVlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgaW5pdERhdGEob3B0aW9ucykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5pbml0T3B0aW9uKG9wdGlvbnMpO1xyXG4gICAgICB0aGlzLmluaXRFZGl0b3JTdGF0dXMoKTtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7IFxyXG4gIH1cclxuICAvKipcclxuICAgKiDliJ3lp4vnvJbovpHlmajljJbop4blm77mmL7npLouIFxyXG4gICAqL1xyXG4gIGluaXRWaWV3KG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy5jcmVhdGVJY29uTGluaygpO1xyXG4gICAgdGhpcy5jcmVhdGVFbGVtZW50KG9wdGlvbnMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICBzZWxmLmluaXRFdmVudCgpO1xyXG4gICAgICAgIHNlbGYuaW5pdENvZGVNaXJyb3JEYXRhKCk7XHJcbiAgICAgICAgc2VsZi5pbml0TWFya2Rvd25EYXRhKCk7XHJcbiAgICAgICAgc2VsZi5pbml0RGVmYXVsdENvbnRlbnQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJ3lp4vljJZg57yW6L6R5ZmoYOS6i+S7tuWkhOeQhi4gXHJcbiAgICovXHJcbiAgaW5pdEV2ZW50KCkge1xyXG4gICAgdGhpcy5pbml0U3RhdHVzRXZlbnQoKTtcclxuICAgIHRoaXMuaW5pdFRvb2xzRXZlbnQoKTtcclxuICB9XHJcbiAgaW5pdE9wdGlvbihvcHRpb25zKSB7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMuX29wdGlvbnMuJHRvb2xzID0gJHRvb2xzO1xyXG4gICAgdGhpcy5fb3B0aW9ucy5sYW5nPSBDT05GSUcuZWRpdG9yLmxhbmd1YWdlO1xyXG4gIH1cclxuICAvLyDliJvlu7rnvJbovpHlmajlhYPntKAgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog57yW6L6R5ZmoIGDlm77moIdjc3Ppk77mjqVgIOWFg+e0oOWIm+W7ui5cclxuICAgKi9cclxuICBjcmVhdGVJY29uTGluaygpIHtcclxuICAgIGNvbnN0IGlzQ3JlYXRlZEljb25MaW5rID0gdGhpcy5pc0NyZWF0ZWRJY29uTGluaygpO1xyXG4gICAgaWYgKGlzQ3JlYXRlZEljb25MaW5rKSByZXR1cm47XHJcblxyXG4gICAgLy8gQHNlZSBodHRwOi8vd3d3LnJ1bm9vYi5jb20vanNyZWYvbWV0LWRvY3VtZW50LWNyZWF0ZWVsZW1lbnQuaHRtbFxyXG4gICAgY29uc3Qgb2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICBvbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtZWRpdG9yJywgdHJ1ZSk7XHJcbiAgICBvbGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjtcclxuICAgIG9saW5rLmhyZWYgPSBDT05GSUcuaWNvbkxpbms7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQob2xpbmspO1xyXG4gIH1cclxuICAvKipcclxuICAgKiDmo4DmtYvmmK/lkKblt7Lnu4/liJvlu7rkuobnvJbovpHlmajlm77moIfmoLflvI/pk77mjqUuIFxyXG4gICAqL1xyXG4gIGlzQ3JlYXRlZEljb25MaW5rKCkge1xyXG4gICAgY29uc3Qgb0xpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibGlua1tkYXRhLWVkaXRvcl1cIik7XHJcbiAgICBjb25zdCByZXN1bHQgPSBvTGluayA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uue8lui+keWZqCBg5pi+56S65a655ZmoYC4gXHJcbiAgICovXHJcbiAgY3JlYXRlRWxlbWVudChvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBkb21SZW5kZXIuaW5pdChvcHRpb25zKS50aGVuKCgpID0+IHtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIOWIm+W7uue8lui+keWZqOWFg+e0oCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOe8lui+keWZqCBgVG9vbHNgIOebuOWFsyBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAvKipcclxuICAgKiDlm77moIfmt7vliqDngrnlh7vkuovku7bnm5HlkKwuIFxyXG4gICAqL1xyXG4gIGluaXRUb29sc0V2ZW50KCkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCB0b29sc09iaiA9IHRoaXMuX29wdGlvbnMuJHRvb2xzO1xyXG4gICAgY29uc3QgZWRpdG9yRWwgPSB0aGlzLl9vcHRpb25zLmVsO1xyXG4gICAgY29uc3QgeyB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgfSA9IHRvb2xzT2JqO1xyXG4gICAgY29uc3QgdG9vbHNBcnIgPSBVVElMLm9iajJBcnIodG9vbGJhckJ1aWx0SW5CdXR0b25zKTtcclxuXHJcbiAgICBpZiAodG9vbHNBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICB0b29sc0Fyci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9ICcuJyArIGl0ZW1bJ2NsYXNzTmFtZSddO1xyXG4gICAgICAgIGNvbnN0IGNhbGxCYWNrID0gaXRlbVsnYWN0aW9uJ107XHJcbiAgICAgICAgY29uc3QgaXNGdW5jdGlvbiA9IFVUSUwuaXNGdW5jdGlvbihjYWxsQmFjayk7XHJcblxyXG4gICAgICAgIGlmIChjbGFzc05hbWUgIT09ICcnICYmIGlzRnVuY3Rpb24pIHtcclxuICAgICAgICAgIGNvbnN0IHRvb2xFbCA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3ItdG9vbHMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICAgICAgICBpZiAodG9vbEVsKSB7XHJcbiAgICAgICAgICAgIHRvb2xFbC4kZWRpdG9yID0gc2VsZjtcclxuICAgICAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lclxyXG4gICAgICAgICAgICB0b29sRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxsQmFjaywgZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIOe8lui+keWZqCBgVG9vbHNgIOebuOWFsyBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOe8lui+keWZqCBgQ29kZU1pcnJvcmAg55u45YWzIHN0YXJ0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uiBDb2RlbWlycm9yIOWuueWZqC4gXHJcbiAgICovXHJcbiAgY3JlYXRlQ29kZU1pcnJvckVsZW1lbnQoZWwsIGNvbmZpZykge1xyXG4gICAgcmV0dXJuIENvZGVtaXJyb3IuZnJvbVRleHRBcmVhKGVsLCBjb25maWcpO1xyXG4gIH1cclxuICBpbml0Q29kZU1pcnJvckRhdGEoKSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucztcclxuICAgIGxldCBtb2RlO1xyXG4gICAgbGV0IGJhY2tkcm9wO1xyXG4gICAgbGV0IHRleHRBcmVhRWxlbWVudCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignI2FyZWEnKTtcclxuICAgIFxyXG4gICAgLy8gaWYgKG9wdGlvbnMuc3BlbGxDaGVja2RlciAhPT0gZmFsc2UpIHtcclxuICAgIC8vICAgbW9kZSA9ICdzcGVsbC1jaGVja2VyJztcclxuICAgIC8vICAgYmFja2Ryb3AgPSBvcHRpb25zLnBhcnNpbmdDb25maWc7XHJcbiAgICAvLyAgIGJhY2tkcm9wLm5hbWUgPSAnZ2ZtJztcclxuICAgIC8vICAgYmFja2Ryb3AuZ2l0SHViU3BpY2UgPSBmYWxzZTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIG1vZGUgPSBvcHRpb25zLnBhcnNpbmdDb25maWc7XHJcbiAgICAvLyAgIG1vZGUubmFtZSA9ICdnZm0nO1xyXG4gICAgLy8gICBtb2RlLmdpdEh1YlNwaWNlID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gQ29kZU1pcnJvciDoh6rlrprkuYnorr7nva5cclxuICAgIGNvbnN0IGNtRGl5Q29uZmlnID0ge1xyXG4gICAgICBtb2RlOiB7XHJcbiAgICAgICAgbmFtZTogXCJnZm1cIixcclxuICAgICAgICB0b2tlblR5cGVPdmVycmlkZXM6IHtcclxuICAgICAgICAgIGVtb2ppOiBcImVtb2ppXCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8qKiDmmL7npLrooYzlj7cgKi9cclxuICAgICAgbGluZU51bWJlcnM6IHRydWUsXHJcbiAgICAgIC8vIOiHquWKqOmqjOivgemUmeivr1xyXG4gICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLFxyXG4gICAgICAvLyDnvKnov5tcclxuICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgLy8g5piv5ZCm5o2i6KGMXHJcbiAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSxcclxuICAgICAgLy8g54K55Ye76auY5Lqu5q2j6KGMXHJcbiAgICAgIHN0eWxlQWN0aXZlTGluZTogdHJ1ZSxcclxuICAgICAgLy8g6YWN6ImyKOS4u+mimClcclxuICAgICAgdGhlbWU6IFwiYmFzZTE2LWRhcmtcIixcclxuICAgICAgLy8g6Ieq5Yqo6KGl5YWo5ous5Y+3XHJcbiAgICAgIGF1dG9DbG9zZUJyYWNrZXRzOiB0cnVlLFxyXG4gICAgICAvLyDoh6rliqjpl63lkIjmoIfnrb5cclxuICAgICAgYXV0b0Nsb3NlVGFnczogdHJ1ZSxcclxuICAgICAgLy8g5bGV5byA5oqY5Y+gXHJcbiAgICAgIGZvbGRHdXR0ZXI6IHRydWUsXHJcbiAgICAgIGd1dHRlcnM6IFtcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIiwgXCJDb2RlTWlycm9yLWZvbGRndXR0ZXJcIl1cclxuICAgIH1cclxuXHJcbiAgICAvLyDnvJbovpHlmajpu5jorqTorr7nva5cclxuICAgIC8vIOWunuS+i+WMlue8lui+keWZqOaXtum7mOiupOeahOS8oOWPglxyXG4gICAgLy8gY29uc3QgZWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcclxuICAgIC8vICAgbW9kZTogbW9kZSxcclxuICAgIC8vICAgYmFja2Ryb3A6IGJhY2tkcm9wLFxyXG4gICAgLy8gICB0aGVtZTogXCJwYXBlclwiLFxyXG4gICAgLy8gICB0YWJTaXplOiAob3B0aW9ucy50YWJTaXplICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zLnRhYlNpemUgOiAyLFxyXG4gICAgLy8gICBpbmRlbnRVbml0OiAob3B0aW9ucy50YWJTaXplICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zLnRhYlNpemUgOiAyLFxyXG4gICAgLy8gICBpbmRlbnRXaXRoVGFiczogKG9wdGlvbnMuaW5kZW50V2l0aFRhYnMgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgIC8vICAgbGluZU51bWJlcnM6IGZhbHNlLFxyXG4gICAgLy8gICBhdXRvZm9jdXM6IChvcHRpb25zLmF1dG9mb2N1cyA9PT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAvLyAgIGV4dHJhS2V5czoga2V5TWFwcyxcclxuICAgIC8vICAgbGluZVdyYXBwaW5nOiAob3B0aW9ucy5saW5lV3JhcHBpbmcgPT09IGZhbHNlKSA/IGZhbHNlIDogdHJ1ZSxcclxuICAgIC8vICAgYWxsb3dEcm9wRmlsZVR5cGVzOiBbXCJ0ZXh0L3BsYWluXCJdLFxyXG4gICAgLy8gICBwbGFjZWhvbGRlcjogb3B0aW9ucy5wbGFjZWhvbGRlciB8fCB0ZXh0QXJlYUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikgfHwgXCJcIixcclxuICAgIC8vICAgc3R5bGVTZWxlY3RlZFRleHQ6IChvcHRpb25zLnN0eWxlU2VsZWN0ZWRUZXh0ICE9IHVuZGVmaW5lZCkgPyBvcHRpb25zLnN0eWxlU2VsZWN0ZWRUZXh0IDogdHJ1ZVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIOWPguaVsOa3t+WQiFxyXG4gICAgLy8gT2JqZWN0LmFzc2lnbih7fSwgY21EaXlDb25maWcpO1xyXG4gICAgLy8gdGhpcy4kY29kZW1pcnJvciA9IENvZGVtaXJyb3IuZnJvbVRleHRBcmVhKHRleHRBcmVhRWxlbWVudCwgY21EaXlDb25maWcpO1xyXG4gICAgdGhpcy4kY29kZW1pcnJvciA9IHRoaXMuY3JlYXRlQ29kZU1pcnJvckVsZW1lbnQodGV4dEFyZWFFbGVtZW50LCBjbURpeUNvbmZpZyk7XHJcbiAgICBcclxuICAgIC8vIOayoeacieS9v+eUqOeureWktOWHveaVsO+8jOmAmui/h+i/meenjeaWueW8j+iOt+WPliBg57yW6L6R5Zmo5a+56LGhYFxyXG4gICAgdGhpcy4kY29kZW1pcnJvci4kZWRpdG9yID0gdGhpcztcclxuXHJcbiAgICB0aGlzLmluaXRDb2RlTWlycm9yRXZlbnQoKTtcclxuICB9XHJcbiAgaW5pdENvZGVNaXJyb3JFdmVudCgpIHtcclxuICAgIHRoaXMuYWRkX0NNX2NoYW5nZV9ldmVudEhhbmRsZSgpO1xyXG4gICAgdGhpcy5hZGRfQ01fY3Vyc29yQWN0aXZpdHlfZXZlbnRIYW5kbGUoKTtcclxuICAgIHRoaXMuYWRkU2Nyb2xsU3luYygpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBgQ29kZU1pcnJvcmAg5YaF5a655Y+Y5YyW5LqL5Lu255uR5ZCsLlxyXG4gICAqL1xyXG4gIGFkZF9DTV9jaGFuZ2VfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjaGFuZ2VzJywgdGhpcy5vbkNvZGVNaXJyb3JDaGFuZ2UpO1xyXG4gIH1cclxuICBvbkNvZGVNaXJyb3JDaGFuZ2UoY20pIHtcclxuICAgIC8vIOe8lui+keWZqOWunuS+iy5cclxuICAgIGNvbnN0IGVkaXRvciA9IGNtLiRlZGl0b3I7XHJcbiAgICBlZGl0b3IuY29tbW9uQ29kZU1pcnJvckV2ZW50SGFuZGxlKGNtKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogYENvZGVNaXJyb3JgIOWFieagh+enu+WKqOS6i+S7tuebkeWQrC5cclxuICAgKi9cclxuICBhZGRfQ01fY3Vyc29yQWN0aXZpdHlfZXZlbnRIYW5kbGUoKSB7XHJcbiAgICB0aGlzLiRjb2RlbWlycm9yLm9uKCdjdXJzb3JBY3Rpdml0eScsIHRoaXMub25Db2RlTWlycm9yQ3Vyc29yQWN0aXZpdHkpO1xyXG4gIH1cclxuICBvbkNvZGVNaXJyb3JDdXJzb3JBY3Rpdml0eShjbSkge1xyXG4gICAgLy8g57yW6L6R5Zmo5a6e5L6LLlxyXG4gICAgY29uc3QgZWRpdG9yID0gY20uJGVkaXRvcjtcclxuICAgIGVkaXRvci5jb21tb25Db2RlTWlycm9yRXZlbnRIYW5kbGUoY20pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBgQ29kZU1pcnJvcmAg5LqL5Lu25Zue6LCD5Lit6YO96ZyA6KaB5aSE55CG55qE5YaF5a65LiBcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0NvZGVNaXJyb3J9IGNtIENvZGVNaXJyb3Ig5a+56LGhLlxyXG4gICAqL1xyXG4gIGNvbW1vbkNvZGVNaXJyb3JFdmVudEhhbmRsZShjbSkge1xyXG4gICAgY29uc3QgY29udGVudCA9IGNtLmdldFZhbHVlKCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBjbS4kZWRpdG9yO1xyXG4gICAgZWRpdG9yLnNldEh0bWxWYWx1ZShjb250ZW50KTtcclxuICAgIGVkaXRvci51cGRhdGVTdGF0dXNCYXIoZWRpdG9yKTtcclxuICB9XHJcbiAgLy8g57yW6L6R5ZmoIGBDb2RlTWlycm9yYCDnm7jlhbMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDnvJbovpHlmaggYG1hcmtkb3duYCDnm7jlhbMgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgaW5pdE1hcmtkb3duRGF0YSh0ZXh0KSB7XHJcbiAgICBpZiAobWFya2VkKSB7XHJcbiAgICAgIGNvbnN0IG1hcmtlZE9wdGlvbnMgPSB7XHJcbiAgICAgICAgZ2ZtOiB0cnVlLFxyXG4gICAgICAgIHRhYmxlczogdHJ1ZSxcclxuICAgICAgICBicmVha3M6IGZhbHNlLFxyXG4gICAgICAgIHBlZGFudGljOiBmYWxzZSxcclxuICAgICAgICBzYW5pdGl6ZTogZmFsc2UsXHJcbiAgICAgICAgc21hcnRMaXN0czogdHJ1ZSxcclxuICAgICAgICBzbWFydHlwYW50czogZmFsc2UsXHJcbiAgICAgICAgaGlnaGxpZ2h0OiBmdW5jdGlvbihjb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGxqcy5oaWdobGlnaHRBdXRvKGNvZGUpLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLiRtYXJrZWQgPSBtYXJrZWQ7XHJcbiAgICAgIC8vIFNldCBvcHRpb25zXHJcbiAgICAgIHRoaXMuJG1hcmtlZC5zZXRPcHRpb25zKG1hcmtlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0TWFya2Rvd25FdmVudCgpIHtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWFya2Rvd24g5YaF5a655pi+56S66K6+572uLlxyXG4gICAqL1xyXG4gIGluaXREZWZhdWx0Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGRlZmF1bHRDb24gPSB0aGlzLl9vcHRpb25zLmRlZmF1bHRDb247XHJcbiAgICBpZiAoZGVmYXVsdENvbikge1xyXG4gICAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcbiAgICAgIGNtLnNldFZhbHVlKGRlZmF1bHRDb24pO1xyXG4gICAgICB0aGlzLmNvbW1vbkNvZGVNaXJyb3JFdmVudEhhbmRsZShjbSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKiBcclxuICAgKiDojrflj5YgYENvZGVNaXJyb3JgIOeahOWAvC5cclxuICAgKi9cclxuICBnZXRNRFZhbHVlKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgcmV0dXJuIGNtLmdldFZhbHVlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiuvue9riBgQ29kZU1pcnJvcmAg55qE5YC8LiBcclxuICAgKi9cclxuICBzZXRIdG1sVmFsdWUobWRWYWx1ZSkge1xyXG4gICAgY29uc3QgaHRtbFN0ciA9IHRoaXMuJG1hcmtlZChtZFZhbHVlKTtcclxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXByZXZpZXcnKS5xdWVyeVNlbGVjdG9yKCcucHJldmlldy1iZCcpO1xyXG4gICAgaHRtbEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbFN0cjtcclxuICB9XHJcbiAgLy8g57yW6L6R5ZmoIGBtYXJrZG93bmAg55u45YWzIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g57yW6L6R5ZmoIGBwcmV2aWV3YCDlrrnlmajnm7jlhbMgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLy8g57yW6L6R5ZmoIGBwcmV2aWV3YCDlrrnlmajnm7jlhbMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvKipcclxuICAgKiDmu5rliqjlhoXlrrnlkIzmraUuIFxyXG4gICAqL1xyXG4gIGFkZFNjcm9sbFN5bmMoKSB7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5fb3B0aW9ucy5lbC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXByZXZpZXcnKTtcclxuXHJcbiAgICBsZXQgY1Njcm9sbCA9IGZhbHNlO1xyXG4gICAgbGV0IHBTY3JvbGwgPSBmYWxzZTtcclxuICAgIC8vIFN5bmNzIHNjcm9sbCAgZWRpdG9yIC0+IHByZXZpZXdcclxuICAgIGNtLm9uKFwic2Nyb2xsXCIsIGZ1bmN0aW9uKHYpIHtcclxuICAgICAgaWYoY1Njcm9sbCkge1xyXG4gICAgICAgIGNTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcFNjcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSB2LmdldFNjcm9sbEluZm8oKS5oZWlnaHQgLSB2LmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHZhciByYXRpbyA9IHBhcnNlRmxvYXQodi5nZXRTY3JvbGxJbmZvKCkudG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAocHJldmlldy5zY3JvbGxIZWlnaHQgLSBwcmV2aWV3LmNsaWVudEhlaWdodCkgKiByYXRpbztcclxuICAgICAgcHJldmlldy5zY3JvbGxUb3AgPSBtb3ZlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU3luY3Mgc2Nyb2xsICBwcmV2aWV3IC0+IGVkaXRvclxyXG4gICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbigpIHtcclxuICAgICAgaWYocFNjcm9sbCkge1xyXG4gICAgICAgIHBTY3JvbGwgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY1Njcm9sbCA9IHRydWU7XHJcbiAgICAgIHZhciBoZWlnaHQgPSBwcmV2aWV3LnNjcm9sbEhlaWdodCAtIHByZXZpZXcuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB2YXIgcmF0aW8gPSBwYXJzZUZsb2F0KHByZXZpZXcuc2Nyb2xsVG9wKSAvIGhlaWdodDtcclxuICAgICAgdmFyIG1vdmUgPSAoY20uZ2V0U2Nyb2xsSW5mbygpLmhlaWdodCAtIGNtLmdldFNjcm9sbEluZm8oKS5jbGllbnRIZWlnaHQpICogcmF0aW87XHJcbiAgICAgIGNtLnNjcm9sbFRvKDAsIG1vdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDnvJbovpHlmaggYHN0YXR1c2Ag5a655Zmo55u45YWzIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICB1cGRhdGVTdGF0dXNCYXIoKSB7XHJcbiAgICBjb25zdCBjbSA9IHRoaXMuJGNvZGVtaXJyb3I7XHJcblxyXG4gICAgY29uc3QgY29uTGVuID0gY20uZ2V0VmFsdWUoKS5sZW5ndGg7XHJcbiAgICB0aGlzLnJlbmRlckVkaXRvckNvbnRlbnRQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5yZW5kZXJFZGl0Q29udGVudExlbmd0aChjb25MZW4pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiDmmL7npLrovpPlhaXlhoXlrrnmgLvplb/luqYuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBsZW4g6ZW/5bqmXHJcbiAgICovXHJcbiAgcmVuZGVyRWRpdENvbnRlbnRMZW5ndGgobGVuKSB7XHJcbiAgICBjb25zdCBlZGl0b3JFbCA9IHRoaXMuX29wdGlvbnMuZWw7XHJcbiAgICBjb25zdCBsZW5FbGVtZW50ID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cy1sZW5ndGgnKTtcclxuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5fb3B0aW9ucy5sYW5nO1xyXG4gICAgY29uc3QgeyBsZW5ndGggfSA9IGxhbmd1YWdlLnN0YXR1c0JhcjtcclxuXHJcbiAgICBsZW5FbGVtZW50LmlubmVySFRNTCA9IGAke2xlbmd0aH0gJHtsZW59YDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5pi+56S65b2T5YmN5YWJ5qCH5omA5Zyo55qEIGDooYzmlbBg44CBYOWIl+aVsGAuIGDmgLvliJfmlbBg44CBYOaAu+mVv+W6pmAuXHJcbiAgICovXHJcbiAgcmVuZGVyRWRpdG9yQ29udGVudFBvc2l0aW9uKCkge1xyXG4gICAgY29uc3QgY20gPSB0aGlzLiRjb2RlbWlycm9yO1xyXG4gICAgLy8gQHNlZSBbY29kZW1pcnJvci1hcGldKGh0dHBzOi8vY29kZW1pcnJvci5uZXQvZG9jL21hbnVhbC5odG1sI2FwaSlcclxuICAgIC8vIEBzZWUgW+iOt+WPluWFieagh+aJgOWcqOeahOS9jee9rl1odHRwczovL2dpdGh1Yi5jb20vaGFja21kaW8vY29kaW1kL2Jsb2IvZGI2OTk4M2E2MjI2OTM5NjJhMGZkNDJiMmYwOTFiM2YzYjZmNjkwNi9wdWJsaWMvanMvbGliL2VkaXRvci9pbmRleC5qc1xyXG4gICAgY29uc3QgbGluZUNvdW50ID0gY20ubGluZUNvdW50KCk7XHJcbiAgICBjb25zdCBjbUN1cnNvciA9IGNtLmdldEN1cnNvcigpO1xyXG4gICAgY29uc3QgY3VyckNvbCA9IGNtQ3Vyc29yLmNoICsgMTtcclxuICAgIGNvbnN0IGN1cnJMaW5lID0gY21DdXJzb3IubGluZSArIDE7XHJcbiAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuX29wdGlvbnMubGFuZztcclxuICAgIGNvbnN0IHsgbGluZSwgY29sdW1ucyB9ID0gbGFuZ3VhZ2Uuc3RhdHVzQmFyO1xyXG5cclxuICAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5fb3B0aW9ucy5lbDtcclxuICAgIGNvbnN0IHN0YXR1c0JhckVsID0gZWRpdG9yRWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yLXN0YXR1cy1wb3NpdG9uJykucXVlcnlTZWxlY3Rvcignc3BhbicpO1xyXG4gICAgc3RhdHVzQmFyRWwuaW5uZXJIVE1MID0gYCR7bGluZX0gJHtjdXJyTGluZX0sJHtjb2x1bW5zfSAke2N1cnJDb2x9IOS4gCAke2xpbmVDb3VudH0gJHtsaW5lfWA7XHJcbiAgfVxyXG4gIC8vIOe8lui+keWZqCBgc3RhdHVzYCDlrrnlmajnm7jlhbMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDnvJbovpHlmajliJ3lp4vnirbmgIHorr7nva4gc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgaW5pdEVkaXRvclN0YXR1cyhvcHRpb25zKSB7XHJcbiAgICAvLyDkuLvpopjorr7nva4uXHJcbiAgICB0aGlzLiRzdGF0dXMgPSB7fTtcclxuICAgIHRoaXMuJHN0YXR1c1snaXNUaGVtZUxpZ2h0J10gPSB0cnVlO1xyXG4gICAgdGhpcy4kc3RhdHVzWydpc0Z1bGxzY3JlZW4nXSA9IGZhbHNlO1xyXG4gIH1cclxuICAvLyDnvJbovpHlmajliJ3lp4vnirbmgIHorr7nva4gZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDnvJbovpHlmajkuovku7blpITnkIYgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLyoqXHJcbiAgICog54q25oCB5p2h77yM5o2i55qu6IKkLiBcclxuICAgKi9cclxuICBpbml0U3RhdHVzRXZlbnQoKSB7XHJcbiAgICB0aGlzLmluaXRFdmVudFRvZ2dsZVRoZW1lKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOaNouiCpOWKn+iDvea3u+WKoC4gXHJcbiAgICovXHJcbiAgaW5pdEV2ZW50VG9nZ2xlVGhlbWUob3B0aW9ucywgY2xhc3NOYW1lID0gJy5pY29uLXRoZW1lJykge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBvVGhlbWVFbCA9IHRoaXMuX29wdGlvbnMuZWwucXVlcnlTZWxlY3RvcignLmVkaXRvci1zdGF0dXMnKS5xdWVyeVNlbGVjdG9yKGNsYXNzTmFtZSk7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX29wdGlvbnMuZWw7XHJcbiAgICBjb25zdCB7IGFkZENsYXNzLCByZW1vdmVDbGFzcyB9ID0gVVRJTDtcclxuXHJcbiAgICBpZiAob1RoZW1lRWwpIHtcclxuICAgICAgbGV0IGlzVGhlbWVMaWdodDtcclxuICAgICAgb1RoZW1lRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaXNUaGVtZUxpZ2h0ID0gc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgICAvLyDlvZPliY0gYOWco+WFieagt+W8j2AgPT0+IOWIh+aNouWIsCBg5pqX6buR5qC35byPYFxyXG4gICAgICAgIGlmIChpc1RoZW1lTGlnaHQpIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWRhcmsnKTtcclxuICAgICAgICAgIHJlbW92ZUNsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFkZENsYXNzKGVsLCAnZWRpdG9yLXRoZW1lLWxpZ2h0Jyk7XHJcbiAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgJ2VkaXRvci10aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGYuJHN0YXR1c1snaXNUaGVtZUxpZ2h0J10gPSAhc2VsZi4kc3RhdHVzWydpc1RoZW1lTGlnaHQnXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXRFdmVudFRvZ2dsZUZ1bGxzY3JlZW4ob3B0aW9ucykge1xyXG4gIH1cclxuICAvLyDnvJbovpHlmajkuovku7blpITnkIYgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXIgZWRpdG9yIHRvIHRoZSBnaXZlbiBlbGVtZW50LlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWwgXHJcbiAgICovXHJcbiAgcmVuZGVyKGVsKSB7XHJcbiAgICBpZiAoIWVsKSB7XHJcbiAgICAgIGVsID0gdGhpcy50ZXh0QXJlYUVsZW1lbnQgfHwgdGhpcy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzO1xyXG4gICAgY29uc3Qga2V5TWFwcyA9IHt9O1xyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBvcHRpb25zLnNob3J0Y3V0cykge1xyXG4gICAgICBpZiAob3B0aW9ucy5zaG9ydGN1dHNba2V5XSAhPT0gbnVsbCAmJiBiaW5kaW5nc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAga2V5TWFwc1tmaXhTaG9ydGN1dChvcHRpb25zLnNob3J0Y3V0c1trZXldKV0gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGJpbmRpbmdzW2tleV0oZWRpdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KShrZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aKe5Yqg5pON5L2c5b+r5o236ZSuXHJcbiAgICBrZXlNYXBzWydFbnRlciddID0gJ25ld2xpbmVBbmRJbmRlbnRDb250aW51ZU1hcmtkb3duTGlzdCc7XHJcbiAgICBrZXlNYXBzWydUYWInXSA9ICd0YWJBbmRJbmRlbnRNYXJrZG93bkxpc3QnO1xyXG4gICAga2V5TWFwc1snRXNjJ10gPSAoY20pID0+IHtcclxuICAgICAgaWYgKGNtLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xyXG4gICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcblxyXG4gICAgICBpZiAoZS5rZXlDb2RlID09IDI3KSB7XHJcbiAgICAgICAgaWYgKGVkaXRvci5jb2RlbWlycm9yLmdldE9wdGlvbnMoJ2Z1bGxTY3JlZW4nKSkgdG9nZ2xlRnVsbFNjcmVlbihlZGl0b3IpO1xyXG4gICAgICB9XHJcbiAgICB9LCBmYWxzZSk7XHJcblxyXG4gIH1cclxufVxyXG5cclxuLy8gZXhwb3J0IGRlZmF1bHQgQ29vbE1ERWRpdG9yO1xyXG5cclxuLy8g5qih5Z2X5a+85Ye6XHJcbmlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxyXG4gIGRlZmluZShmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBDb29sTURFZGl0b3I7XHJcbiAgfSk7XHJcbn0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IENvb2xNREVkaXRvcjtcclxufSBlbHNlIHtcclxuICB3aW5kb3cuQ29vbE1ERWRpdG9yID0gQ29vbE1ERWRpdG9yO1xyXG59XHJcblxyXG5cclxuIiwiaW1wb3J0IFRPT0xTIGZyb20gJy4vdG9vbGJhckhhbmRsZSc7XHJcbmNvbnN0IHsgc2hvcnRjdXRzLCBmaXhTaG9ydGN1dCB9ID0gVE9PTFM7XHJcblxyXG5jb25zdCBkb21SZW5kZXIgPSB7XHJcbiAgaW5pdChvcHRpb25zKSB7XHJcbiAgICB0aGlzLmluaXREYXRhKG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJUb29scyhvcHRpb25zKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJDb2RlKG9wdGlvbnMpO1xyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJQcml2aWV3KG9wdGlvbnMpO1xyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJTdGF0dXMob3B0aW9ucyk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnJvciA9PiBlcnJvcik7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBiZXR0ZXIgd2F5IGJ1dCBtdXN0IHRoaW5rIGJyb3dzZXIgc3VwcG9ydFxyXG4gICAgLy8gYXdhaXQgdGhpcy5yZW5kZXJUb29scyhwYXJlbnQpO1xyXG4gICAgLy8gYXdhaXQgdGhpcy5yZW5kZXJDb2RlKHBhcmVudCk7XHJcbiAgICAvLyBhd2FpdCB0aGlzLnJlbmRlclByaXZpZXcocGFyZW50KTtcclxuICAgIC8vIGF3YWl0IHRoaXMucmVuZGVyU3RhdHVzKHBhcmVudCk7XHJcbiAgfSxcclxuICBpbml0RGF0YShvcHRpb25zKSB7XHJcbiAgICB0aGlzLmxhbmcgPSBvcHRpb25zLmxhbmc7XHJcbiAgfSxcclxuICAvLyDliJvlu7ogRWRpdCBUb29scyBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyVG9vbHMob3B0aW9ucykge1xyXG4gICAgY29uc3QgZWwgPSBvcHRpb25zLmVsO1xyXG4gICAgY29uc3QgeyB0b29sYmFyQnVpbHRJbkJ1dHRvbnMgfSA9IG9wdGlvbnMuJHRvb2xzO1xyXG4gICAgY29uc3QgdG9vbHNNYWluSHRtbFN0ciA9IHRoaXMuY3JlYXRlVG9vbHNNYWluKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICBjb25zdCB0b29sc0hhbmRsZUh0bWxTdHIgPSB0aGlzLmNyZWF0ZVRvb2xzSGFuZGxlKHRvb2xiYXJCdWlsdEluQnV0dG9ucyk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0b3ItdG9vbHNcIj4ke3Rvb2xzTWFpbkh0bWxTdHJ9JHt0b29sc0hhbmRsZUh0bWxTdHJ9PC9kaXY+XHJcbiAgICAgIGA7XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDnvJbovpHlt6Xlhbflm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc01haW4oaWNvbnMpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgdG9vbHNFZGl0ID0gdGhpcy5nZXRUb29sc0VkaXQoaWNvbnMpO1xyXG4gICAgbGV0IGh0bWxTdHIgPSAnPGRpdiBjbGFzcz1cImVkaXRvci10b29scy1tYWluXCI+JztcclxuXHJcbiAgICAvLyDlvqrnjq/liJvlu7rlm77moIdcclxuICAgIGlmICh0b29sc0VkaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvKiDmmK/lkKbmmK8z55qE5YCN5pWwICovXHJcbiAgICAgIGxldCBpc1RocmVlO1xyXG5cclxuICAgICAgY29uc3QgdG9vbHNFZGl0TGVuID0gdG9vbHNFZGl0Lmxlbmd0aDtcclxuICAgICAgdG9vbHNFZGl0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaXNUaHJlZSA9IGluZGV4ID4gMCAmJiAoKGluZGV4ICsgMSkgJSAzID09PSAwKTtcclxuICAgICAgICBpZiAoaXNUaHJlZSkge1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAodG9vbHNFZGl0TGVuIC0gMSkpIHtcclxuICAgICAgICAgICAgaHRtbFN0ciA9IGh0bWxTdHIgKyBzZWxmLmNyZWF0ZVRvb2xzSXRlbShpdGVtKSArICc8c3BhbiBjbGFzcz1cImVkaXRvci10b29scy1kaXZpc2lvblwiPnw8L3NwYW4+JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGh0bWxTdHIgKz0gc2VsZi5jcmVhdGVUb29sc0l0ZW0oaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIGh0bWxTdHIgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgcmV0dXJuIGh0bWxTdHI7XHJcbiAgfSxcclxuICAvKipcclxuICAgKiDojrflj5YgYOW3peWFt+adoe+8mue8lui+keWbvuagh2AuIFxyXG4gICAqIFxyXG4gICAqIEBkZXNjIOW3peWFt+adoeWbvuagh+aMieeFp+e8lui+keWKn+iDveWIhuS4uu+8mmDnvJbovpHlm77moIdg44CBYOinhuWbvuWbvuagh2Ag6YCa6L+HIGBpc0VkaXRUb29sc2DmmK/lkKbkuLogYHRydWVgIOagh+iusFxyXG4gICAqL1xyXG4gIGdldFRvb2xzRWRpdChpY29uc09wdGlvbikge1xyXG4gICAgaWYgKHR5cGVvZiBpY29uc09wdGlvbiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7fTtcclxuICAgIGxldCBfb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWNvbnNPcHRpb24pKTtcclxuICAgIGZvciAobGV0IGtleSBpbiBfb3B0aW9ucykge1xyXG4gICAgICBpZiAoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkge1xyXG4gICAgICAgIHJlc3VsdE9ialtrZXldID0gX29wdGlvbnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydEVkaXRUb29sc0FyciA9IHRoaXMuc29ydFRvb2xzSWNvbihyZXN1bHRPYmosICdpbmRleCcpO1xyXG5cclxuICAgIHJldHVybiBzb3J0RWRpdFRvb2xzQXJyO1xyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65bel5YW35p2hIGDop4blm77mk43kvZzlm77moIdgLiBcclxuICAgKi9cclxuICBjcmVhdGVUb29sc0hhbmRsZShpY29ucykge1xyXG4gICAgY29uc3QgX2ljb25zID0gdGhpcy5nZXRUb29sc0hhbmRsZShpY29ucyk7XHJcbiAgICBsZXQgaHRtbFN0ciA9ICc8ZGl2IGNsYXNzPVwiZWRpdG9yLXRvb2xzLWhhbmRsZVwiPic7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyDlvqrnjq/nlJ/miJAgaWNvbnNcclxuICAgIF9pY29ucy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBodG1sU3RyICs9IHNlbGYuY3JlYXRlVG9vbHNJdGVtKGl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaHRtbFN0ciArPSAnPC9kaXY+JztcclxuXHJcbiAgICByZXR1cm4gaHRtbFN0cjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOiOt+WPliBg5bel5YW35p2h77ya6KeG5Zu+5Zu+5qCHYC4gXHJcbiAgICogXHJcbiAgICogQGRlc2Mg5bel5YW35p2h5Zu+5qCH5oyJ54Wn57yW6L6R5Yqf6IO95YiG5Li677yaYOe8lui+keWbvuagh2DjgIFg6KeG5Zu+5Zu+5qCHYCDpgJrov4cgYGlzRWRpdFRvb2xzYOaYr+WQpuS4uiBgdHJ1ZWAg5qCH6K6wXHJcbiAgICovXHJcbiAgZ2V0VG9vbHNIYW5kbGUoaWNvbnNPcHRpb24pIHtcclxuICAgIGlmICh0eXBlb2YgaWNvbnNPcHRpb24gIT09ICdvYmplY3QnKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0T2JqID0ge307XHJcbiAgICBsZXQgX29wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGljb25zT3B0aW9uKSk7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gX29wdGlvbnMpIHtcclxuICAgICAgaWYgKCEoX29wdGlvbnNba2V5XVsnaXNFZGl0VG9vbHMnXSkpIHtcclxuICAgICAgICByZXN1bHRPYmpba2V5XSA9IF9vcHRpb25zW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRFZGl0VG9vbHNBcnIgPSB0aGlzLnNvcnRUb29sc0ljb24ocmVzdWx0T2JqLCAnaW5kZXgnKTtcclxuXHJcbiAgICByZXR1cm4gc29ydEVkaXRUb29sc0FycjtcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOWbvuagh+aOkuW6jy4gXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iaiDpnIDopoHmjpLluo/nmoTlr7nosaEuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHIg5o6S5bqP5Y+C54Wn5bGe5oCnLlxyXG4gICAqL1xyXG4gIHNvcnRUb29sc0ljb24ob2JqLCBhdHRyKSB7XHJcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHJldHVybjtcclxuXHJcbiAgICBsZXQgYXJyID0gW107XHJcbiAgICBsZXQgc29ydEFyciA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICBhcnIucHVzaChvYmpba2V5XSlcclxuICAgIH1cclxuXHJcbiAgICBzb3J0QXJyID0gYXJyLnNvcnQoKG9iajEsIG9iajIpID0+IHtcclxuICAgICAgcmV0dXJuIG9iajFbJ2luZGV4J10gLSBvYmoyWydpbmRleCddO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNvcnRBcnI7XHJcbiAgfSxcclxuICBjcmVhdGVUb29sc0l0ZW0oY29uZmlnKSB7XHJcbiAgICBjb25zdCBjdXJyU2hvcnRjdXRzSXRlbSA9IHNob3J0Y3V0c1tjb25maWcubmFtZV07XHJcbiAgICBsZXQgY3VyclBsYXRTaG9ydGN1dHNJdGVtO1xyXG4gICAgXHJcbiAgICBpZihjdXJyU2hvcnRjdXRzSXRlbSkge1xyXG4gICAgICBjdXJyUGxhdFNob3J0Y3V0c0l0ZW0gPSBmaXhTaG9ydGN1dChjdXJyU2hvcnRjdXRzSXRlbSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN1cnJQbGF0U2hvcnRjdXRzSXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCIke2NvbmZpZy5jbGFzc05hbWV9XCIgdGl0bGU9XCIke2NvbmZpZy50aXRsZX0gKCR7Y3VyclBsYXRTaG9ydGN1dHNJdGVtfSlcIiBkYXRhLW5hbWU9XCIke2NvbmZpZy5uYW1lfVwiPjwvc3Bhbj5gO1xyXG4gIH0sXHJcbiAgLy8g5Yib5bu6IEVkaXQgVG9vbHMgZW5kID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIHN0YXJ0ID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICByZW5kZXJDb2RlKG9wdGlvbnMpIHtcclxuICAgIGNvbnN0IGVsID0gb3B0aW9ucy5lbDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGVsLmlubmVySFRNTCArPSBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1tZFwiPlxyXG4gICAgICAgIDxmb3JtPlxyXG4gICAgICAgICAgPHRleHRBcmVhIGlkPVwiYXJlYVwiPjwvdGV4dEFyZWE+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgYDtcclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSlcclxuICAgIFxyXG4gIH0sXHJcbiAgLy8g5Yib5bu6IEVkaXQg57yW6L6R5a655ZmoIGVuZCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBzdGFydCA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyUHJpdmlldyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBlbC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXByZXZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iZCBtYXJrZG93bi1ib2R5XCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBgO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KTtcclxuICB9LFxyXG4gIC8vIOWIm+W7uiBFZGl0IOmihOiniChodG1sKeWuueWZqCBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDliJvlu7ogRWRpdCBTdGF0dXMgc3RhcnQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIHJlbmRlclN0YXR1cyhvcHRpb25zKSB7XHJcbiAgICBjb25zdCBlbCA9IG9wdGlvbnMuZWw7XHJcblxyXG4gICAgY29uc3QgcG9zaXRvbkh0bWxTdHIgPSB0aGlzLmNyZWF0ZVN0YXR1c1Bvc2l0aW9uKG9wdGlvbnMpO1xyXG4gICAgY29uc3QgbGVuZ3RoSHRtbFN0ciA9IHRoaXMuY3JlYXRlU3RhdHVzTGVucygpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgZWwuaW5uZXJIVE1MICs9IGBcclxuICAgICAgPGRpdiBjbGFzcz1cImVkaXRvci1zdGF0dXNcIj4ke3Bvc2l0b25IdG1sU3RyfSR7bGVuZ3RoSHRtbFN0cn08L2Rpdj5gO1xyXG4gICAgICByZXNvbHZlKCk7XHJcbiAgICB9KVxyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzUG9zaXRpb24ob3B0aW9ucykge1xyXG4gICAgY29uc3QgdG9nZ2xlVGhlbWVIdG1sU3RyID0gdGhpcy5jcmVhdGVTdGF0dXNUb2dnbGVUaGVtZSgpO1xyXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmxhbmc7XHJcbiAgICBjb25zdCB7IGxpbmUsICBjb2x1bW5zIH0gPSBsYW5ndWFnZS5zdGF0dXNCYXI7XHJcbiAgICBsZXQgaHRtbFN0ciA9IGA8ZGl2IGNsYXNzPVwiZWRpdG9yLXN0YXR1cy1wb3NpdG9uXCI+PHNwYW4+JHtsaW5lfSAsJHtjb2x1bW5zfSAg5LiAICAke2xpbmV9PC9zcGFuPiR7dG9nZ2xlVGhlbWVIdG1sU3RyfTwvZGl2PmA7XHJcblxyXG4gICAgcmV0dXJuIGh0bWxTdHI7XHJcbiAgfSxcclxuICBjcmVhdGVTdGF0dXNUb2dnbGVUaGVtZSgpIHtcclxuICAgIGxldCBodG1sU3RyID0gJzxzcGFuIGNsYXNzPVwiaWNvbi10aGVtZVwiPjwvc3Bhbj4nO1xyXG5cclxuICAgIHJldHVybiBodG1sU3RyO1xyXG4gIH0sXHJcbiAgY3JlYXRlU3RhdHVzTGVucygpIHtcclxuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5sYW5nO1xyXG4gICAgY29uc3QgeyBsZW5ndGggfSA9IGxhbmd1YWdlLnN0YXR1c0JhcjtcclxuICAgIGxldCBodG1sU3RyID0gYDxkaXYgY2xhc3M9XCJlZGl0b3Itc3RhdHVzLWxlbmd0aFwiPiR7bGVuZ3RofTwvZGl2PmA7XHJcblxyXG4gICAgcmV0dXJuIGh0bWxTdHI7XHJcbiAgfVxyXG4gIC8vIOWIm+W7uiBFZGl0IFN0YXR1cyBlbmQgPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBkb21SZW5kZXI7IiwiLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gZWRpdG9yIGVuZ2xpc2ggbGFudWFnZS5cclxuLy9cclxuLy8gQHVwZGF0ZSAyMDE5LzAxLzIyXHJcbi8vIEBhdXRob3IgSmVzb25odShnaXRodWIpXHJcbi8vIEBlbWlhbCBqZXNvbmh1X3dlYkAxNjMuY29tXHJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgc3RhdHVzQmFyOiB7XHJcbiAgICBsaW5lOiAnbGluZScsXHJcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXHJcbiAgICBsZW5ndGg6ICdsZW5ndGgnXHJcbiAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8qKlxyXG4gICAqIOiOt+WPluW9k+WJjea/gOa0u+eahOexu+Weiy4gXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtjbX0gY29kZW1pcnJvciDlr7nosaEuXHJcbiAgICogQHBhcmFtIHtwb3N9IHBvcyDkvY3nva4uXHJcbiAgICovXHJcbiAgZ2V0U3RhdGUoY20sIHBvcykge1xyXG4gICAgcG9zID0gcG9zIHx8IGNtLmdldEN1cnNvcihcInN0YXJ0XCIpO1xyXG4gICAgdmFyIHN0YXQgPSBjbS5nZXRUb2tlbkF0KHBvcyk7XHJcbiAgICBpZiAoIXN0YXQudHlwZSkgcmV0dXJuIHt9O1xyXG5cclxuICAgIHZhciB0eXBlcyA9IHN0YXQudHlwZS5zcGxpdChcIiBcIik7XHJcblxyXG4gICAgdmFyIHJldCA9IHt9LFxyXG4gICAgICBkYXRhLCB0ZXh0O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBkYXRhID0gdHlwZXNbaV07XHJcbiAgICAgIGlmIChkYXRhID09PSBcInN0cm9uZ1wiKSB7XHJcbiAgICAgICAgcmV0LmJvbGQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwidmFyaWFibGUtMlwiKSB7XHJcbiAgICAgICAgdGV4dCA9IGNtLmdldExpbmUocG9zLmxpbmUpO1xyXG4gICAgICAgIGlmICgvXlxccypcXGQrXFwuXFxzLy50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgICByZXRbXCJvcmRlcmVkLWxpc3RcIl0gPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXRbXCJ1bm9yZGVyZWQtbGlzdFwiXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwiYXRvbVwiKSB7XHJcbiAgICAgICAgcmV0LnF1b3RlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcImVtXCIpIHtcclxuICAgICAgICByZXQuaXRhbGljID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBcInF1b3RlXCIpIHtcclxuICAgICAgICByZXQucXVvdGUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwic3RyaWtldGhyb3VnaFwiKSB7XHJcbiAgICAgICAgcmV0LnN0cmlrZXRocm91Z2ggPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwiY29tbWVudFwiKSB7XHJcbiAgICAgICAgcmV0LmNvZGUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwibGlua1wiKSB7XHJcbiAgICAgICAgcmV0LmxpbmsgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFwidGFnXCIpIHtcclxuICAgICAgICByZXQuaW1hZ2UgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEubWF0Y2goL15oZWFkZXIoXFwtWzEtNl0pPyQvKSkge1xyXG4gICAgICAgIHJldFtkYXRhLnJlcGxhY2UoXCJoZWFkZXJcIiwgXCJoZWFkaW5nXCIpXSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXQ7XHJcbiAgfVxyXG59IiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgaHRtbENvbmZpZyA9IHtcbiAgYXV0b1NlbGZDbG9zZXJzOiB7J2FyZWEnOiB0cnVlLCAnYmFzZSc6IHRydWUsICdicic6IHRydWUsICdjb2wnOiB0cnVlLCAnY29tbWFuZCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICdlbWJlZCc6IHRydWUsICdmcmFtZSc6IHRydWUsICdocic6IHRydWUsICdpbWcnOiB0cnVlLCAnaW5wdXQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAna2V5Z2VuJzogdHJ1ZSwgJ2xpbmsnOiB0cnVlLCAnbWV0YSc6IHRydWUsICdwYXJhbSc6IHRydWUsICdzb3VyY2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndHJhY2snOiB0cnVlLCAnd2JyJzogdHJ1ZSwgJ21lbnVpdGVtJzogdHJ1ZX0sXG4gIGltcGxpY2l0bHlDbG9zZWQ6IHsnZGQnOiB0cnVlLCAnbGknOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlLCAnb3B0aW9uJzogdHJ1ZSwgJ3AnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgJ3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZSwgJ3Rib2R5JzogdHJ1ZSwgJ3RkJzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICd0aCc6IHRydWUsICd0cic6IHRydWV9LFxuICBjb250ZXh0R3JhYmJlcnM6IHtcbiAgICAnZGQnOiB7J2RkJzogdHJ1ZSwgJ2R0JzogdHJ1ZX0sXG4gICAgJ2R0JzogeydkZCc6IHRydWUsICdkdCc6IHRydWV9LFxuICAgICdsaSc6IHsnbGknOiB0cnVlfSxcbiAgICAnb3B0aW9uJzogeydvcHRpb24nOiB0cnVlLCAnb3B0Z3JvdXAnOiB0cnVlfSxcbiAgICAnb3B0Z3JvdXAnOiB7J29wdGdyb3VwJzogdHJ1ZX0sXG4gICAgJ3AnOiB7J2FkZHJlc3MnOiB0cnVlLCAnYXJ0aWNsZSc6IHRydWUsICdhc2lkZSc6IHRydWUsICdibG9ja3F1b3RlJzogdHJ1ZSwgJ2Rpcic6IHRydWUsXG4gICAgICAgICAgJ2Rpdic6IHRydWUsICdkbCc6IHRydWUsICdmaWVsZHNldCc6IHRydWUsICdmb290ZXInOiB0cnVlLCAnZm9ybSc6IHRydWUsXG4gICAgICAgICAgJ2gxJzogdHJ1ZSwgJ2gyJzogdHJ1ZSwgJ2gzJzogdHJ1ZSwgJ2g0JzogdHJ1ZSwgJ2g1JzogdHJ1ZSwgJ2g2JzogdHJ1ZSxcbiAgICAgICAgICAnaGVhZGVyJzogdHJ1ZSwgJ2hncm91cCc6IHRydWUsICdocic6IHRydWUsICdtZW51JzogdHJ1ZSwgJ25hdic6IHRydWUsICdvbCc6IHRydWUsXG4gICAgICAgICAgJ3AnOiB0cnVlLCAncHJlJzogdHJ1ZSwgJ3NlY3Rpb24nOiB0cnVlLCAndGFibGUnOiB0cnVlLCAndWwnOiB0cnVlfSxcbiAgICAncnAnOiB7J3JwJzogdHJ1ZSwgJ3J0JzogdHJ1ZX0sXG4gICAgJ3J0JzogeydycCc6IHRydWUsICdydCc6IHRydWV9LFxuICAgICd0Ym9keSc6IHsndGJvZHknOiB0cnVlLCAndGZvb3QnOiB0cnVlfSxcbiAgICAndGQnOiB7J3RkJzogdHJ1ZSwgJ3RoJzogdHJ1ZX0sXG4gICAgJ3Rmb290Jzogeyd0Ym9keSc6IHRydWV9LFxuICAgICd0aCc6IHsndGQnOiB0cnVlLCAndGgnOiB0cnVlfSxcbiAgICAndGhlYWQnOiB7J3Rib2R5JzogdHJ1ZSwgJ3Rmb290JzogdHJ1ZX0sXG4gICAgJ3RyJzogeyd0cic6IHRydWV9XG4gIH0sXG4gIGRvTm90SW5kZW50OiB7XCJwcmVcIjogdHJ1ZX0sXG4gIGFsbG93VW5xdW90ZWQ6IHRydWUsXG4gIGFsbG93TWlzc2luZzogdHJ1ZSxcbiAgY2FzZUZvbGQ6IHRydWVcbn1cblxudmFyIHhtbENvbmZpZyA9IHtcbiAgYXV0b1NlbGZDbG9zZXJzOiB7fSxcbiAgaW1wbGljaXRseUNsb3NlZDoge30sXG4gIGNvbnRleHRHcmFiYmVyczoge30sXG4gIGRvTm90SW5kZW50OiB7fSxcbiAgYWxsb3dVbnF1b3RlZDogZmFsc2UsXG4gIGFsbG93TWlzc2luZzogZmFsc2UsXG4gIGFsbG93TWlzc2luZ1RhZ05hbWU6IGZhbHNlLFxuICBjYXNlRm9sZDogZmFsc2Vcbn1cblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwieG1sXCIsIGZ1bmN0aW9uKGVkaXRvckNvbmYsIGNvbmZpZ18pIHtcbiAgdmFyIGluZGVudFVuaXQgPSBlZGl0b3JDb25mLmluZGVudFVuaXRcbiAgdmFyIGNvbmZpZyA9IHt9XG4gIHZhciBkZWZhdWx0cyA9IGNvbmZpZ18uaHRtbE1vZGUgPyBodG1sQ29uZmlnIDogeG1sQ29uZmlnXG4gIGZvciAodmFyIHByb3AgaW4gZGVmYXVsdHMpIGNvbmZpZ1twcm9wXSA9IGRlZmF1bHRzW3Byb3BdXG4gIGZvciAodmFyIHByb3AgaW4gY29uZmlnXykgY29uZmlnW3Byb3BdID0gY29uZmlnX1twcm9wXVxuXG4gIC8vIFJldHVybiB2YXJpYWJsZXMgZm9yIHRva2VuaXplcnNcbiAgdmFyIHR5cGUsIHNldFN0eWxlO1xuXG4gIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7XG4gICAgZnVuY3Rpb24gY2hhaW4ocGFyc2VyKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlcjtcbiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTtcbiAgICBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiIVwiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcIltcIikpIHtcbiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKFwiQ0RBVEFbXCIpKSByZXR1cm4gY2hhaW4oaW5CbG9jayhcImF0b21cIiwgXCJdXT5cIikpO1xuICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKFwiLS1cIikpIHtcbiAgICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jayhcImNvbW1lbnRcIiwgXCItLT5cIikpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChcIkRPQ1RZUEVcIiwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5fXFwtXS8pO1xuICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KFwiP1wiKSkge1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5fXFwtXS8pO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soXCJtZXRhXCIsIFwiPz5cIik7XG4gICAgICAgIHJldHVybiBcIm1ldGFcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KFwiL1wiKSA/IFwiY2xvc2VUYWdcIiA6IFwib3BlblRhZ1wiO1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnO1xuICAgICAgICByZXR1cm4gXCJ0YWcgYnJhY2tldFwiO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCImXCIpIHtcbiAgICAgIHZhciBvaztcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiI1wiKSkge1xuICAgICAgICBpZiAoc3RyZWFtLmVhdChcInhcIikpIHtcbiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW2EtZkEtRlxcZF0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvayA9IHN0cmVhbS5lYXRXaGlsZSgvW1xcZF0vKSAmJiBzdHJlYW0uZWF0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcXHdcXC5cXC06XS8pICYmIHN0cmVhbS5lYXQoXCI7XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9rID8gXCJhdG9tXCIgOiBcImVycm9yXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14mPF0vKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBpblRleHQuaXNJblRleHQgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIGluVGFnKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSBcIj5cIiB8fCAoY2ggPT0gXCIvXCIgJiYgc3RyZWFtLmVhdChcIj5cIikpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDtcbiAgICAgIHR5cGUgPSBjaCA9PSBcIj5cIiA/IFwiZW5kVGFnXCIgOiBcInNlbGZjbG9zZVRhZ1wiO1xuICAgICAgcmV0dXJuIFwidGFnIGJyYWNrZXRcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiPVwiKSB7XG4gICAgICB0eXBlID0gXCJlcXVhbHNcIjtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgc3RhdGUuc3RhdGUgPSBiYXNlU3RhdGU7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RhdGUudGFnU3RhcnQgPSBudWxsO1xuICAgICAgdmFyIG5leHQgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXh0ID8gbmV4dCArIFwiIHRhZyBlcnJvclwiIDogXCJ0YWcgZXJyb3JcIjtcbiAgICB9IGVsc2UgaWYgKC9bXFwnXFxcIl0vLnRlc3QoY2gpKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTtcbiAgICAgIHN0YXRlLnN0cmluZ1N0YXJ0Q29sID0gc3RyZWFtLmNvbHVtbigpO1xuICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15bXlxcc1xcdTAwYTA9PD5cXFwiXFwnXSpbXlxcc1xcdTAwYTA9PD5cXFwiXFwnXFwvXS8pO1xuICAgICAgcmV0dXJuIFwid29yZFwiO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7XG4gICAgdmFyIGNsb3N1cmUgPSBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH07XG4gICAgY2xvc3VyZS5pc0luQXR0cmlidXRlID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvc3VyZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZG9jdHlwZShkZXB0aCkge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICB2YXIgY2g7XG4gICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkge1xuICAgICAgICBpZiAoY2ggPT0gXCI8XCIpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTtcbiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI+XCIpIHtcbiAgICAgICAgICBpZiAoZGVwdGggPT0gMSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJtZXRhXCI7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQoc3RhdGUsIHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKSB7XG4gICAgdGhpcy5wcmV2ID0gc3RhdGUuY29udGV4dDtcbiAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xuICAgIHRoaXMuaW5kZW50ID0gc3RhdGUuaW5kZW50ZWQ7XG4gICAgdGhpcy5zdGFydE9mTGluZSA9IHN0YXJ0T2ZMaW5lO1xuICAgIGlmIChjb25maWcuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5ub0luZGVudCkpXG4gICAgICB0aGlzLm5vSW5kZW50ID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQpIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVQb3BDb250ZXh0KHN0YXRlLCBuZXh0VGFnTmFtZSkge1xuICAgIHZhciBwYXJlbnRUYWdOYW1lO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoIXN0YXRlLmNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcGFyZW50VGFnTmFtZSA9IHN0YXRlLmNvbnRleHQudGFnTmFtZTtcbiAgICAgIGlmICghY29uZmlnLmNvbnRleHRHcmFiYmVycy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRUYWdOYW1lKSB8fFxuICAgICAgICAgICFjb25maWcuY29udGV4dEdyYWJiZXJzW3BhcmVudFRhZ05hbWVdLmhhc093blByb3BlcnR5KG5leHRUYWdOYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiYXNlU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwib3BlblRhZ1wiKSB7XG4gICAgICBzdGF0ZS50YWdTdGFydCA9IHN0cmVhbS5jb2x1bW4oKTtcbiAgICAgIHJldHVybiB0YWdOYW1lU3RhdGU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiY2xvc2VUYWdcIikge1xuICAgICAgcmV0dXJuIGNsb3NlVGFnTmFtZVN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZVN0YXRlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0YWdOYW1lU3RhdGUodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIGlmICh0eXBlID09IFwid29yZFwiKSB7XG4gICAgICBzdGF0ZS50YWdOYW1lID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIHNldFN0eWxlID0gXCJ0YWdcIjtcbiAgICAgIHJldHVybiBhdHRyU3RhdGU7XG4gICAgfSBlbHNlIGlmIChjb25maWcuYWxsb3dNaXNzaW5nVGFnTmFtZSAmJiB0eXBlID09IFwiZW5kVGFnXCIpIHtcbiAgICAgIHNldFN0eWxlID0gXCJ0YWcgYnJhY2tldFwiO1xuICAgICAgcmV0dXJuIGF0dHJTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U3R5bGUgPSBcImVycm9yXCI7XG4gICAgICByZXR1cm4gdGFnTmFtZVN0YXRlO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBjbG9zZVRhZ05hbWVTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lICYmXG4gICAgICAgICAgY29uZmlnLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoc3RhdGUuY29udGV4dC50YWdOYW1lKSlcbiAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7XG4gICAgICBpZiAoKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC50YWdOYW1lID09IHRhZ05hbWUpIHx8IGNvbmZpZy5tYXRjaENsb3NpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHNldFN0eWxlID0gXCJ0YWdcIjtcbiAgICAgICAgcmV0dXJuIGNsb3NlU3RhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTdHlsZSA9IFwidGFnIGVycm9yXCI7XG4gICAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29uZmlnLmFsbG93TWlzc2luZ1RhZ05hbWUgJiYgdHlwZSA9PSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwidGFnIGJyYWNrZXRcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlRXJyO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlU3RhdGUodHlwZSwgX3N0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSAhPSBcImVuZFRhZ1wiKSB7XG4gICAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICAgIHJldHVybiBjbG9zZVN0YXRlO1xuICAgIH1cbiAgICBwb3BDb250ZXh0KHN0YXRlKTtcbiAgICByZXR1cm4gYmFzZVN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIGNsb3NlU3RhdGVFcnIodHlwZSwgc3RyZWFtLCBzdGF0ZSkge1xuICAgIHNldFN0eWxlID0gXCJlcnJvclwiO1xuICAgIHJldHVybiBjbG9zZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0clN0YXRlKHR5cGUsIF9zdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ3b3JkXCIpIHtcbiAgICAgIHNldFN0eWxlID0gXCJhdHRyaWJ1dGVcIjtcbiAgICAgIHJldHVybiBhdHRyRXFTdGF0ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJlbmRUYWdcIiB8fCB0eXBlID09IFwic2VsZmNsb3NlVGFnXCIpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gc3RhdGUudGFnTmFtZSwgdGFnU3RhcnQgPSBzdGF0ZS50YWdTdGFydDtcbiAgICAgIHN0YXRlLnRhZ05hbWUgPSBzdGF0ZS50YWdTdGFydCA9IG51bGw7XG4gICAgICBpZiAodHlwZSA9PSBcInNlbGZjbG9zZVRhZ1wiIHx8XG4gICAgICAgICAgY29uZmlnLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSkge1xuICAgICAgICBtYXliZVBvcENvbnRleHQoc3RhdGUsIHRhZ05hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF5YmVQb3BDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTtcbiAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLCB0YWdOYW1lLCB0YWdTdGFydCA9PSBzdGF0ZS5pbmRlbnRlZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVN0YXRlO1xuICAgIH1cbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJFcVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcImVxdWFsc1wiKSByZXR1cm4gYXR0clZhbHVlU3RhdGU7XG4gICAgaWYgKCFjb25maWcuYWxsb3dNaXNzaW5nKSBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJWYWx1ZVN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAodHlwZSA9PSBcInN0cmluZ1wiKSByZXR1cm4gYXR0ckNvbnRpbnVlZFN0YXRlO1xuICAgIGlmICh0eXBlID09IFwid29yZFwiICYmIGNvbmZpZy5hbGxvd1VucXVvdGVkKSB7c2V0U3R5bGUgPSBcInN0cmluZ1wiOyByZXR1cm4gYXR0clN0YXRlO31cbiAgICBzZXRTdHlsZSA9IFwiZXJyb3JcIjtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG4gIGZ1bmN0aW9uIGF0dHJDb250aW51ZWRTdGF0ZSh0eXBlLCBzdHJlYW0sIHN0YXRlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGF0dHJDb250aW51ZWRTdGF0ZTtcbiAgICByZXR1cm4gYXR0clN0YXRlKHR5cGUsIHN0cmVhbSwgc3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlSW5kZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSB7dG9rZW5pemU6IGluVGV4dCxcbiAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmFzZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgIGluZGVudGVkOiBiYXNlSW5kZW50IHx8IDAsXG4gICAgICAgICAgICAgICAgICAgdGFnTmFtZTogbnVsbCwgdGFnU3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgY29udGV4dDogbnVsbH1cbiAgICAgIGlmIChiYXNlSW5kZW50ICE9IG51bGwpIHN0YXRlLmJhc2VJbmRlbnQgPSBiYXNlSW5kZW50XG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmICghc3RhdGUudGFnTmFtZSAmJiBzdHJlYW0uc29sKCkpXG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7XG5cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7XG4gICAgICB0eXBlID0gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKChzdHlsZSB8fCB0eXBlKSAmJiBzdHlsZSAhPSBcImNvbW1lbnRcIikge1xuICAgICAgICBzZXRTdHlsZSA9IG51bGw7XG4gICAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGUuc3RhdGUodHlwZSB8fCBzdHlsZSwgc3RyZWFtLCBzdGF0ZSk7XG4gICAgICAgIGlmIChzZXRTdHlsZSlcbiAgICAgICAgICBzdHlsZSA9IHNldFN0eWxlID09IFwiZXJyb3JcIiA/IHN0eWxlICsgXCIgZXJyb3JcIiA6IHNldFN0eWxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIsIGZ1bGxMaW5lKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgICAvLyBJbmRlbnQgbXVsdGktbGluZSBzdHJpbmdzIChlLmcuIGNzcykuXG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUuaXNJbkF0dHJpYnV0ZSkge1xuICAgICAgICBpZiAoc3RhdGUudGFnU3RhcnQgPT0gc3RhdGUuaW5kZW50ZWQpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlLnN0cmluZ1N0YXJ0Q29sICsgMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRlZCArIGluZGVudFVuaXQ7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IGluVGFnICYmIHN0YXRlLnRva2VuaXplICE9IGluVGV4dClcbiAgICAgICAgcmV0dXJuIGZ1bGxMaW5lID8gZnVsbExpbmUubWF0Y2goL14oXFxzKikvKVswXS5sZW5ndGggOiAwO1xuICAgICAgLy8gSW5kZW50IHRoZSBzdGFydHMgb2YgYXR0cmlidXRlIG5hbWVzLlxuICAgICAgaWYgKHN0YXRlLnRhZ05hbWUpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRQYXN0VGFnICE9PSBmYWxzZSlcbiAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBzdGF0ZS50YWdOYW1lLmxlbmd0aCArIDI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gc3RhdGUudGFnU3RhcnQgKyBpbmRlbnRVbml0ICogKGNvbmZpZy5tdWx0aWxpbmVUYWdJbmRlbnRGYWN0b3IgfHwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmFsaWduQ0RBVEEgJiYgLzwhXFxbQ0RBVEFcXFsvLnRlc3QodGV4dEFmdGVyKSkgcmV0dXJuIDA7XG4gICAgICB2YXIgdGFnQWZ0ZXIgPSB0ZXh0QWZ0ZXIgJiYgL148KFxcLyk/KFtcXHdfOlxcLi1dKikvLmV4ZWModGV4dEFmdGVyKTtcbiAgICAgIGlmICh0YWdBZnRlciAmJiB0YWdBZnRlclsxXSkgeyAvLyBDbG9zaW5nIHRhZyBzcG90dGVkXG4gICAgICAgIHdoaWxlIChjb250ZXh0KSB7XG4gICAgICAgICAgaWYgKGNvbnRleHQudGFnTmFtZSA9PSB0YWdBZnRlclsyXSkge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmltcGxpY2l0bHlDbG9zZWQuaGFzT3duUHJvcGVydHkoY29udGV4dC50YWdOYW1lKSkge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZ0FmdGVyKSB7IC8vIE9wZW5pbmcgdGFnIHNwb3R0ZWRcbiAgICAgICAgd2hpbGUgKGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgZ3JhYmJlcnMgPSBjb25maWcuY29udGV4dEdyYWJiZXJzW2NvbnRleHQudGFnTmFtZV07XG4gICAgICAgICAgaWYgKGdyYWJiZXJzICYmIGdyYWJiZXJzLmhhc093blByb3BlcnR5KHRhZ0FmdGVyWzJdKSlcbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQucHJldiAmJiAhY29udGV4dC5zdGFydE9mTGluZSlcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjtcbiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0O1xuICAgICAgZWxzZSByZXR1cm4gc3RhdGUuYmFzZUluZGVudCB8fCAwO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvPFxcL1tcXHNcXHc6XSs+JC8sXG4gICAgYmxvY2tDb21tZW50U3RhcnQ6IFwiPCEtLVwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDogXCItLT5cIixcblxuICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZy5odG1sTW9kZSA/IFwiaHRtbFwiIDogXCJ4bWxcIixcbiAgICBoZWxwZXJUeXBlOiBjb25maWcuaHRtbE1vZGUgPyBcImh0bWxcIiA6IFwieG1sXCIsXG5cbiAgICBza2lwQXR0cmlidXRlOiBmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLnN0YXRlID09IGF0dHJWYWx1ZVN0YXRlKVxuICAgICAgICBzdGF0ZS5zdGF0ZSA9IGF0dHJTdGF0ZVxuICAgIH1cbiAgfTtcbn0pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L3htbFwiLCBcInhtbFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3htbFwiLCBcInhtbFwiKTtcbmlmICghQ29kZU1pcnJvci5taW1lTW9kZXMuaGFzT3duUHJvcGVydHkoXCJ0ZXh0L2h0bWxcIikpXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvaHRtbFwiLCB7bmFtZTogXCJ4bWxcIiwgaHRtbE1vZGU6IHRydWV9KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLm1vZGVJbmZvID0gW1xuICAgIHtuYW1lOiBcIkFQTFwiLCBtaW1lOiBcInRleHQvYXBsXCIsIG1vZGU6IFwiYXBsXCIsIGV4dDogW1wiZHlhbG9nXCIsIFwiYXBsXCJdfSxcbiAgICB7bmFtZTogXCJQR1BcIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL3BncFwiLCBcImFwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWRcIiwgXCJhcHBsaWNhdGlvbi9wZ3Ata2V5c1wiLCBcImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmVcIl0sIG1vZGU6IFwiYXNjaWlhcm1vclwiLCBleHQ6IFtcImFzY1wiLCBcInBncFwiLCBcInNpZ1wiXX0sXG4gICAge25hbWU6IFwiQVNOLjFcIiwgbWltZTogXCJ0ZXh0L3gtdHRjbi1hc25cIiwgbW9kZTogXCJhc24uMVwiLCBleHQ6IFtcImFzblwiLCBcImFzbjFcIl19LFxuICAgIHtuYW1lOiBcIkFzdGVyaXNrXCIsIG1pbWU6IFwidGV4dC94LWFzdGVyaXNrXCIsIG1vZGU6IFwiYXN0ZXJpc2tcIiwgZmlsZTogL15leHRlbnNpb25zXFwuY29uZiQvaX0sXG4gICAge25hbWU6IFwiQnJhaW5mdWNrXCIsIG1pbWU6IFwidGV4dC94LWJyYWluZnVja1wiLCBtb2RlOiBcImJyYWluZnVja1wiLCBleHQ6IFtcImJcIiwgXCJiZlwiXX0sXG4gICAge25hbWU6IFwiQ1wiLCBtaW1lOiBcInRleHQveC1jc3JjXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJjXCIsIFwiaFwiLCBcImlub1wiXX0sXG4gICAge25hbWU6IFwiQysrXCIsIG1pbWU6IFwidGV4dC94LWMrK3NyY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wiY3BwXCIsIFwiYysrXCIsIFwiY2NcIiwgXCJjeHhcIiwgXCJocHBcIiwgXCJoKytcIiwgXCJoaFwiLCBcImh4eFwiXSwgYWxpYXM6IFtcImNwcFwiXX0sXG4gICAge25hbWU6IFwiQ29ib2xcIiwgbWltZTogXCJ0ZXh0L3gtY29ib2xcIiwgbW9kZTogXCJjb2JvbFwiLCBleHQ6IFtcImNvYlwiLCBcImNweVwiXX0sXG4gICAge25hbWU6IFwiQyNcIiwgbWltZTogXCJ0ZXh0L3gtY3NoYXJwXCIsIG1vZGU6IFwiY2xpa2VcIiwgZXh0OiBbXCJjc1wiXSwgYWxpYXM6IFtcImNzaGFycFwiXX0sXG4gICAge25hbWU6IFwiQ2xvanVyZVwiLCBtaW1lOiBcInRleHQveC1jbG9qdXJlXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImNsalwiLCBcImNsamNcIiwgXCJjbGp4XCJdfSxcbiAgICB7bmFtZTogXCJDbG9qdXJlU2NyaXB0XCIsIG1pbWU6IFwidGV4dC94LWNsb2p1cmVzY3JpcHRcIiwgbW9kZTogXCJjbG9qdXJlXCIsIGV4dDogW1wiY2xqc1wiXX0sXG4gICAge25hbWU6IFwiQ2xvc3VyZSBTdHlsZXNoZWV0cyAoR1NTKVwiLCBtaW1lOiBcInRleHQveC1nc3NcIiwgbW9kZTogXCJjc3NcIiwgZXh0OiBbXCJnc3NcIl19LFxuICAgIHtuYW1lOiBcIkNNYWtlXCIsIG1pbWU6IFwidGV4dC94LWNtYWtlXCIsIG1vZGU6IFwiY21ha2VcIiwgZXh0OiBbXCJjbWFrZVwiLCBcImNtYWtlLmluXCJdLCBmaWxlOiAvXkNNYWtlTGlzdHMudHh0JC99LFxuICAgIHtuYW1lOiBcIkNvZmZlZVNjcmlwdFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vdm5kLmNvZmZlZXNjcmlwdFwiLCBcInRleHQvY29mZmVlc2NyaXB0XCIsIFwidGV4dC94LWNvZmZlZXNjcmlwdFwiXSwgbW9kZTogXCJjb2ZmZWVzY3JpcHRcIiwgZXh0OiBbXCJjb2ZmZWVcIl0sIGFsaWFzOiBbXCJjb2ZmZWVcIiwgXCJjb2ZmZWUtc2NyaXB0XCJdfSxcbiAgICB7bmFtZTogXCJDb21tb24gTGlzcFwiLCBtaW1lOiBcInRleHQveC1jb21tb24tbGlzcFwiLCBtb2RlOiBcImNvbW1vbmxpc3BcIiwgZXh0OiBbXCJjbFwiLCBcImxpc3BcIiwgXCJlbFwiXSwgYWxpYXM6IFtcImxpc3BcIl19LFxuICAgIHtuYW1lOiBcIkN5cGhlclwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtY3lwaGVyLXF1ZXJ5XCIsIG1vZGU6IFwiY3lwaGVyXCIsIGV4dDogW1wiY3lwXCIsIFwiY3lwaGVyXCJdfSxcbiAgICB7bmFtZTogXCJDeXRob25cIiwgbWltZTogXCJ0ZXh0L3gtY3l0aG9uXCIsIG1vZGU6IFwicHl0aG9uXCIsIGV4dDogW1wicHl4XCIsIFwicHhkXCIsIFwicHhpXCJdfSxcbiAgICB7bmFtZTogXCJDcnlzdGFsXCIsIG1pbWU6IFwidGV4dC94LWNyeXN0YWxcIiwgbW9kZTogXCJjcnlzdGFsXCIsIGV4dDogW1wiY3JcIl19LFxuICAgIHtuYW1lOiBcIkNTU1wiLCBtaW1lOiBcInRleHQvY3NzXCIsIG1vZGU6IFwiY3NzXCIsIGV4dDogW1wiY3NzXCJdfSxcbiAgICB7bmFtZTogXCJDUUxcIiwgbWltZTogXCJ0ZXh0L3gtY2Fzc2FuZHJhXCIsIG1vZGU6IFwic3FsXCIsIGV4dDogW1wiY3FsXCJdfSxcbiAgICB7bmFtZTogXCJEXCIsIG1pbWU6IFwidGV4dC94LWRcIiwgbW9kZTogXCJkXCIsIGV4dDogW1wiZFwiXX0sXG4gICAge25hbWU6IFwiRGFydFwiLCBtaW1lczogW1wiYXBwbGljYXRpb24vZGFydFwiLCBcInRleHQveC1kYXJ0XCJdLCBtb2RlOiBcImRhcnRcIiwgZXh0OiBbXCJkYXJ0XCJdfSxcbiAgICB7bmFtZTogXCJkaWZmXCIsIG1pbWU6IFwidGV4dC94LWRpZmZcIiwgbW9kZTogXCJkaWZmXCIsIGV4dDogW1wiZGlmZlwiLCBcInBhdGNoXCJdfSxcbiAgICB7bmFtZTogXCJEamFuZ29cIiwgbWltZTogXCJ0ZXh0L3gtZGphbmdvXCIsIG1vZGU6IFwiZGphbmdvXCJ9LFxuICAgIHtuYW1lOiBcIkRvY2tlcmZpbGVcIiwgbWltZTogXCJ0ZXh0L3gtZG9ja2VyZmlsZVwiLCBtb2RlOiBcImRvY2tlcmZpbGVcIiwgZmlsZTogL15Eb2NrZXJmaWxlJC99LFxuICAgIHtuYW1lOiBcIkRURFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3htbC1kdGRcIiwgbW9kZTogXCJkdGRcIiwgZXh0OiBbXCJkdGRcIl19LFxuICAgIHtuYW1lOiBcIkR5bGFuXCIsIG1pbWU6IFwidGV4dC94LWR5bGFuXCIsIG1vZGU6IFwiZHlsYW5cIiwgZXh0OiBbXCJkeWxhblwiLCBcImR5bFwiLCBcImludHJcIl19LFxuICAgIHtuYW1lOiBcIkVCTkZcIiwgbWltZTogXCJ0ZXh0L3gtZWJuZlwiLCBtb2RlOiBcImVibmZcIn0sXG4gICAge25hbWU6IFwiRUNMXCIsIG1pbWU6IFwidGV4dC94LWVjbFwiLCBtb2RlOiBcImVjbFwiLCBleHQ6IFtcImVjbFwiXX0sXG4gICAge25hbWU6IFwiZWRuXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vZWRuXCIsIG1vZGU6IFwiY2xvanVyZVwiLCBleHQ6IFtcImVkblwiXX0sXG4gICAge25hbWU6IFwiRWlmZmVsXCIsIG1pbWU6IFwidGV4dC94LWVpZmZlbFwiLCBtb2RlOiBcImVpZmZlbFwiLCBleHQ6IFtcImVcIl19LFxuICAgIHtuYW1lOiBcIkVsbVwiLCBtaW1lOiBcInRleHQveC1lbG1cIiwgbW9kZTogXCJlbG1cIiwgZXh0OiBbXCJlbG1cIl19LFxuICAgIHtuYW1lOiBcIkVtYmVkZGVkIEphdmFzY3JpcHRcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94LWVqc1wiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImVqc1wiXX0sXG4gICAge25hbWU6IFwiRW1iZWRkZWQgUnVieVwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtZXJiXCIsIG1vZGU6IFwiaHRtbGVtYmVkZGVkXCIsIGV4dDogW1wiZXJiXCJdfSxcbiAgICB7bmFtZTogXCJFcmxhbmdcIiwgbWltZTogXCJ0ZXh0L3gtZXJsYW5nXCIsIG1vZGU6IFwiZXJsYW5nXCIsIGV4dDogW1wiZXJsXCJdfSxcbiAgICB7bmFtZTogXCJFc3BlclwiLCBtaW1lOiBcInRleHQveC1lc3BlclwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJGYWN0b3JcIiwgbWltZTogXCJ0ZXh0L3gtZmFjdG9yXCIsIG1vZGU6IFwiZmFjdG9yXCIsIGV4dDogW1wiZmFjdG9yXCJdfSxcbiAgICB7bmFtZTogXCJGQ0xcIiwgbWltZTogXCJ0ZXh0L3gtZmNsXCIsIG1vZGU6IFwiZmNsXCJ9LFxuICAgIHtuYW1lOiBcIkZvcnRoXCIsIG1pbWU6IFwidGV4dC94LWZvcnRoXCIsIG1vZGU6IFwiZm9ydGhcIiwgZXh0OiBbXCJmb3J0aFwiLCBcImZ0aFwiLCBcIjR0aFwiXX0sXG4gICAge25hbWU6IFwiRm9ydHJhblwiLCBtaW1lOiBcInRleHQveC1mb3J0cmFuXCIsIG1vZGU6IFwiZm9ydHJhblwiLCBleHQ6IFtcImZcIiwgXCJmb3JcIiwgXCJmNzdcIiwgXCJmOTBcIl19LFxuICAgIHtuYW1lOiBcIkYjXCIsIG1pbWU6IFwidGV4dC94LWZzaGFycFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcImZzXCJdLCBhbGlhczogW1wiZnNoYXJwXCJdfSxcbiAgICB7bmFtZTogXCJHYXNcIiwgbWltZTogXCJ0ZXh0L3gtZ2FzXCIsIG1vZGU6IFwiZ2FzXCIsIGV4dDogW1wic1wiXX0sXG4gICAge25hbWU6IFwiR2hlcmtpblwiLCBtaW1lOiBcInRleHQveC1mZWF0dXJlXCIsIG1vZGU6IFwiZ2hlcmtpblwiLCBleHQ6IFtcImZlYXR1cmVcIl19LFxuICAgIHtuYW1lOiBcIkdpdEh1YiBGbGF2b3JlZCBNYXJrZG93blwiLCBtaW1lOiBcInRleHQveC1nZm1cIiwgbW9kZTogXCJnZm1cIiwgZmlsZTogL14ocmVhZG1lfGNvbnRyaWJ1dGluZ3xoaXN0b3J5KS5tZCQvaX0sXG4gICAge25hbWU6IFwiR29cIiwgbWltZTogXCJ0ZXh0L3gtZ29cIiwgbW9kZTogXCJnb1wiLCBleHQ6IFtcImdvXCJdfSxcbiAgICB7bmFtZTogXCJHcm9vdnlcIiwgbWltZTogXCJ0ZXh0L3gtZ3Jvb3Z5XCIsIG1vZGU6IFwiZ3Jvb3Z5XCIsIGV4dDogW1wiZ3Jvb3Z5XCIsIFwiZ3JhZGxlXCJdLCBmaWxlOiAvXkplbmtpbnNmaWxlJC99LFxuICAgIHtuYW1lOiBcIkhBTUxcIiwgbWltZTogXCJ0ZXh0L3gtaGFtbFwiLCBtb2RlOiBcImhhbWxcIiwgZXh0OiBbXCJoYW1sXCJdfSxcbiAgICB7bmFtZTogXCJIYXNrZWxsXCIsIG1pbWU6IFwidGV4dC94LWhhc2tlbGxcIiwgbW9kZTogXCJoYXNrZWxsXCIsIGV4dDogW1wiaHNcIl19LFxuICAgIHtuYW1lOiBcIkhhc2tlbGwgKExpdGVyYXRlKVwiLCBtaW1lOiBcInRleHQveC1saXRlcmF0ZS1oYXNrZWxsXCIsIG1vZGU6IFwiaGFza2VsbC1saXRlcmF0ZVwiLCBleHQ6IFtcImxoc1wiXX0sXG4gICAge25hbWU6IFwiSGF4ZVwiLCBtaW1lOiBcInRleHQveC1oYXhlXCIsIG1vZGU6IFwiaGF4ZVwiLCBleHQ6IFtcImh4XCJdfSxcbiAgICB7bmFtZTogXCJIWE1MXCIsIG1pbWU6IFwidGV4dC94LWh4bWxcIiwgbW9kZTogXCJoYXhlXCIsIGV4dDogW1wiaHhtbFwiXX0sXG4gICAge25hbWU6IFwiQVNQLk5FVFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtYXNweFwiLCBtb2RlOiBcImh0bWxlbWJlZGRlZFwiLCBleHQ6IFtcImFzcHhcIl0sIGFsaWFzOiBbXCJhc3BcIiwgXCJhc3B4XCJdfSxcbiAgICB7bmFtZTogXCJIVE1MXCIsIG1pbWU6IFwidGV4dC9odG1sXCIsIG1vZGU6IFwiaHRtbG1peGVkXCIsIGV4dDogW1wiaHRtbFwiLCBcImh0bVwiLCBcImhhbmRsZWJhcnNcIiwgXCJoYnNcIl0sIGFsaWFzOiBbXCJ4aHRtbFwiXX0sXG4gICAge25hbWU6IFwiSFRUUFwiLCBtaW1lOiBcIm1lc3NhZ2UvaHR0cFwiLCBtb2RlOiBcImh0dHBcIn0sXG4gICAge25hbWU6IFwiSURMXCIsIG1pbWU6IFwidGV4dC94LWlkbFwiLCBtb2RlOiBcImlkbFwiLCBleHQ6IFtcInByb1wiXX0sXG4gICAge25hbWU6IFwiUHVnXCIsIG1pbWU6IFwidGV4dC94LXB1Z1wiLCBtb2RlOiBcInB1Z1wiLCBleHQ6IFtcImphZGVcIiwgXCJwdWdcIl0sIGFsaWFzOiBbXCJqYWRlXCJdfSxcbiAgICB7bmFtZTogXCJKYXZhXCIsIG1pbWU6IFwidGV4dC94LWphdmFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcImphdmFcIl19LFxuICAgIHtuYW1lOiBcIkphdmEgU2VydmVyIFBhZ2VzXCIsIG1pbWU6IFwiYXBwbGljYXRpb24veC1qc3BcIiwgbW9kZTogXCJodG1sZW1iZWRkZWRcIiwgZXh0OiBbXCJqc3BcIl0sIGFsaWFzOiBbXCJqc3BcIl19LFxuICAgIHtuYW1lOiBcIkphdmFTY3JpcHRcIiwgbWltZXM6IFtcInRleHQvamF2YXNjcmlwdFwiLCBcInRleHQvZWNtYXNjcmlwdFwiLCBcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHRcIiwgXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCJdLFxuICAgICBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJqc1wiXSwgYWxpYXM6IFtcImVjbWFzY3JpcHRcIiwgXCJqc1wiLCBcIm5vZGVcIl19LFxuICAgIHtuYW1lOiBcIkpTT05cIiwgbWltZXM6IFtcImFwcGxpY2F0aW9uL2pzb25cIiwgXCJhcHBsaWNhdGlvbi94LWpzb25cIl0sIG1vZGU6IFwiamF2YXNjcmlwdFwiLCBleHQ6IFtcImpzb25cIiwgXCJtYXBcIl0sIGFsaWFzOiBbXCJqc29uNVwiXX0sXG4gICAge25hbWU6IFwiSlNPTi1MRFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwgbW9kZTogXCJqYXZhc2NyaXB0XCIsIGV4dDogW1wianNvbmxkXCJdLCBhbGlhczogW1wianNvbmxkXCJdfSxcbiAgICB7bmFtZTogXCJKU1hcIiwgbWltZTogXCJ0ZXh0L2pzeFwiLCBtb2RlOiBcImpzeFwiLCBleHQ6IFtcImpzeFwiXX0sXG4gICAge25hbWU6IFwiSmluamEyXCIsIG1pbWU6IFwibnVsbFwiLCBtb2RlOiBcImppbmphMlwiLCBleHQ6IFtcImoyXCIsIFwiamluamFcIiwgXCJqaW5qYTJcIl19LFxuICAgIHtuYW1lOiBcIkp1bGlhXCIsIG1pbWU6IFwidGV4dC94LWp1bGlhXCIsIG1vZGU6IFwianVsaWFcIiwgZXh0OiBbXCJqbFwiXX0sXG4gICAge25hbWU6IFwiS290bGluXCIsIG1pbWU6IFwidGV4dC94LWtvdGxpblwiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wia3RcIl19LFxuICAgIHtuYW1lOiBcIkxFU1NcIiwgbWltZTogXCJ0ZXh0L3gtbGVzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcImxlc3NcIl19LFxuICAgIHtuYW1lOiBcIkxpdmVTY3JpcHRcIiwgbWltZTogXCJ0ZXh0L3gtbGl2ZXNjcmlwdFwiLCBtb2RlOiBcImxpdmVzY3JpcHRcIiwgZXh0OiBbXCJsc1wiXSwgYWxpYXM6IFtcImxzXCJdfSxcbiAgICB7bmFtZTogXCJMdWFcIiwgbWltZTogXCJ0ZXh0L3gtbHVhXCIsIG1vZGU6IFwibHVhXCIsIGV4dDogW1wibHVhXCJdfSxcbiAgICB7bmFtZTogXCJNYXJrZG93blwiLCBtaW1lOiBcInRleHQveC1tYXJrZG93blwiLCBtb2RlOiBcIm1hcmtkb3duXCIsIGV4dDogW1wibWFya2Rvd25cIiwgXCJtZFwiLCBcIm1rZFwiXX0sXG4gICAge25hbWU6IFwibUlSQ1wiLCBtaW1lOiBcInRleHQvbWlyY1wiLCBtb2RlOiBcIm1pcmNcIn0sXG4gICAge25hbWU6IFwiTWFyaWFEQiBTUUxcIiwgbWltZTogXCJ0ZXh0L3gtbWFyaWFkYlwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJNYXRoZW1hdGljYVwiLCBtaW1lOiBcInRleHQveC1tYXRoZW1hdGljYVwiLCBtb2RlOiBcIm1hdGhlbWF0aWNhXCIsIGV4dDogW1wibVwiLCBcIm5iXCJdfSxcbiAgICB7bmFtZTogXCJNb2RlbGljYVwiLCBtaW1lOiBcInRleHQveC1tb2RlbGljYVwiLCBtb2RlOiBcIm1vZGVsaWNhXCIsIGV4dDogW1wibW9cIl19LFxuICAgIHtuYW1lOiBcIk1VTVBTXCIsIG1pbWU6IFwidGV4dC94LW11bXBzXCIsIG1vZGU6IFwibXVtcHNcIiwgZXh0OiBbXCJtcHNcIl19LFxuICAgIHtuYW1lOiBcIk1TIFNRTFwiLCBtaW1lOiBcInRleHQveC1tc3NxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJtYm94XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vbWJveFwiLCBtb2RlOiBcIm1ib3hcIiwgZXh0OiBbXCJtYm94XCJdfSxcbiAgICB7bmFtZTogXCJNeVNRTFwiLCBtaW1lOiBcInRleHQveC1teXNxbFwiLCBtb2RlOiBcInNxbFwifSxcbiAgICB7bmFtZTogXCJOZ2lueFwiLCBtaW1lOiBcInRleHQveC1uZ2lueC1jb25mXCIsIG1vZGU6IFwibmdpbnhcIiwgZmlsZTogL25naW54LipcXC5jb25mJC9pfSxcbiAgICB7bmFtZTogXCJOU0lTXCIsIG1pbWU6IFwidGV4dC94LW5zaXNcIiwgbW9kZTogXCJuc2lzXCIsIGV4dDogW1wibnNoXCIsIFwibnNpXCJdfSxcbiAgICB7bmFtZTogXCJOVHJpcGxlc1wiLCBtaW1lczogW1wiYXBwbGljYXRpb24vbi10cmlwbGVzXCIsIFwiYXBwbGljYXRpb24vbi1xdWFkc1wiLCBcInRleHQvbi10cmlwbGVzXCJdLFxuICAgICBtb2RlOiBcIm50cmlwbGVzXCIsIGV4dDogW1wibnRcIiwgXCJucVwiXX0sXG4gICAge25hbWU6IFwiT2JqZWN0aXZlLUNcIiwgbWltZTogXCJ0ZXh0L3gtb2JqZWN0aXZlY1wiLCBtb2RlOiBcImNsaWtlXCIsIGV4dDogW1wibVwiLCBcIm1tXCJdLCBhbGlhczogW1wib2JqZWN0aXZlLWNcIiwgXCJvYmpjXCJdfSxcbiAgICB7bmFtZTogXCJPQ2FtbFwiLCBtaW1lOiBcInRleHQveC1vY2FtbFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcIm1sXCIsIFwibWxpXCIsIFwibWxsXCIsIFwibWx5XCJdfSxcbiAgICB7bmFtZTogXCJPY3RhdmVcIiwgbWltZTogXCJ0ZXh0L3gtb2N0YXZlXCIsIG1vZGU6IFwib2N0YXZlXCIsIGV4dDogW1wibVwiXX0sXG4gICAge25hbWU6IFwiT3pcIiwgbWltZTogXCJ0ZXh0L3gtb3pcIiwgbW9kZTogXCJvelwiLCBleHQ6IFtcIm96XCJdfSxcbiAgICB7bmFtZTogXCJQYXNjYWxcIiwgbWltZTogXCJ0ZXh0L3gtcGFzY2FsXCIsIG1vZGU6IFwicGFzY2FsXCIsIGV4dDogW1wicFwiLCBcInBhc1wiXX0sXG4gICAge25hbWU6IFwiUEVHLmpzXCIsIG1pbWU6IFwibnVsbFwiLCBtb2RlOiBcInBlZ2pzXCIsIGV4dDogW1wianNvbmxkXCJdfSxcbiAgICB7bmFtZTogXCJQZXJsXCIsIG1pbWU6IFwidGV4dC94LXBlcmxcIiwgbW9kZTogXCJwZXJsXCIsIGV4dDogW1wicGxcIiwgXCJwbVwiXX0sXG4gICAge25hbWU6IFwiUEhQXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtcGhwXCIsIFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIiwgXCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocC1vcGVuXCJdLCBtb2RlOiBcInBocFwiLCBleHQ6IFtcInBocFwiLCBcInBocDNcIiwgXCJwaHA0XCIsIFwicGhwNVwiLCBcInBocDdcIiwgXCJwaHRtbFwiXX0sXG4gICAge25hbWU6IFwiUGlnXCIsIG1pbWU6IFwidGV4dC94LXBpZ1wiLCBtb2RlOiBcInBpZ1wiLCBleHQ6IFtcInBpZ1wiXX0sXG4gICAge25hbWU6IFwiUGxhaW4gVGV4dFwiLCBtaW1lOiBcInRleHQvcGxhaW5cIiwgbW9kZTogXCJudWxsXCIsIGV4dDogW1widHh0XCIsIFwidGV4dFwiLCBcImNvbmZcIiwgXCJkZWZcIiwgXCJsaXN0XCIsIFwibG9nXCJdfSxcbiAgICB7bmFtZTogXCJQTFNRTFwiLCBtaW1lOiBcInRleHQveC1wbHNxbFwiLCBtb2RlOiBcInNxbFwiLCBleHQ6IFtcInBsc1wiXX0sXG4gICAge25hbWU6IFwiUG93ZXJTaGVsbFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3gtcG93ZXJzaGVsbFwiLCBtb2RlOiBcInBvd2Vyc2hlbGxcIiwgZXh0OiBbXCJwczFcIiwgXCJwc2QxXCIsIFwicHNtMVwiXX0sXG4gICAge25hbWU6IFwiUHJvcGVydGllcyBmaWxlc1wiLCBtaW1lOiBcInRleHQveC1wcm9wZXJ0aWVzXCIsIG1vZGU6IFwicHJvcGVydGllc1wiLCBleHQ6IFtcInByb3BlcnRpZXNcIiwgXCJpbmlcIiwgXCJpblwiXSwgYWxpYXM6IFtcImluaVwiLCBcInByb3BlcnRpZXNcIl19LFxuICAgIHtuYW1lOiBcIlByb3RvQnVmXCIsIG1pbWU6IFwidGV4dC94LXByb3RvYnVmXCIsIG1vZGU6IFwicHJvdG9idWZcIiwgZXh0OiBbXCJwcm90b1wiXX0sXG4gICAge25hbWU6IFwiUHl0aG9uXCIsIG1pbWU6IFwidGV4dC94LXB5dGhvblwiLCBtb2RlOiBcInB5dGhvblwiLCBleHQ6IFtcIkJVSUxEXCIsIFwiYnpsXCIsIFwicHlcIiwgXCJweXdcIl0sIGZpbGU6IC9eKEJVQ0t8QlVJTEQpJC99LFxuICAgIHtuYW1lOiBcIlB1cHBldFwiLCBtaW1lOiBcInRleHQveC1wdXBwZXRcIiwgbW9kZTogXCJwdXBwZXRcIiwgZXh0OiBbXCJwcFwiXX0sXG4gICAge25hbWU6IFwiUVwiLCBtaW1lOiBcInRleHQveC1xXCIsIG1vZGU6IFwicVwiLCBleHQ6IFtcInFcIl19LFxuICAgIHtuYW1lOiBcIlJcIiwgbWltZTogXCJ0ZXh0L3gtcnNyY1wiLCBtb2RlOiBcInJcIiwgZXh0OiBbXCJyXCIsIFwiUlwiXSwgYWxpYXM6IFtcInJzY3JpcHRcIl19LFxuICAgIHtuYW1lOiBcInJlU3RydWN0dXJlZFRleHRcIiwgbWltZTogXCJ0ZXh0L3gtcnN0XCIsIG1vZGU6IFwicnN0XCIsIGV4dDogW1wicnN0XCJdLCBhbGlhczogW1wicnN0XCJdfSxcbiAgICB7bmFtZTogXCJSUE0gQ2hhbmdlc1wiLCBtaW1lOiBcInRleHQveC1ycG0tY2hhbmdlc1wiLCBtb2RlOiBcInJwbVwifSxcbiAgICB7bmFtZTogXCJSUE0gU3BlY1wiLCBtaW1lOiBcInRleHQveC1ycG0tc3BlY1wiLCBtb2RlOiBcInJwbVwiLCBleHQ6IFtcInNwZWNcIl19LFxuICAgIHtuYW1lOiBcIlJ1YnlcIiwgbWltZTogXCJ0ZXh0L3gtcnVieVwiLCBtb2RlOiBcInJ1YnlcIiwgZXh0OiBbXCJyYlwiXSwgYWxpYXM6IFtcImpydWJ5XCIsIFwibWFjcnVieVwiLCBcInJha2VcIiwgXCJyYlwiLCBcInJieFwiXX0sXG4gICAge25hbWU6IFwiUnVzdFwiLCBtaW1lOiBcInRleHQveC1ydXN0c3JjXCIsIG1vZGU6IFwicnVzdFwiLCBleHQ6IFtcInJzXCJdfSxcbiAgICB7bmFtZTogXCJTQVNcIiwgbWltZTogXCJ0ZXh0L3gtc2FzXCIsIG1vZGU6IFwic2FzXCIsIGV4dDogW1wic2FzXCJdfSxcbiAgICB7bmFtZTogXCJTYXNzXCIsIG1pbWU6IFwidGV4dC94LXNhc3NcIiwgbW9kZTogXCJzYXNzXCIsIGV4dDogW1wic2Fzc1wiXX0sXG4gICAge25hbWU6IFwiU2NhbGFcIiwgbWltZTogXCJ0ZXh0L3gtc2NhbGFcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcInNjYWxhXCJdfSxcbiAgICB7bmFtZTogXCJTY2hlbWVcIiwgbWltZTogXCJ0ZXh0L3gtc2NoZW1lXCIsIG1vZGU6IFwic2NoZW1lXCIsIGV4dDogW1wic2NtXCIsIFwic3NcIl19LFxuICAgIHtuYW1lOiBcIlNDU1NcIiwgbWltZTogXCJ0ZXh0L3gtc2Nzc1wiLCBtb2RlOiBcImNzc1wiLCBleHQ6IFtcInNjc3NcIl19LFxuICAgIHtuYW1lOiBcIlNoZWxsXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2hcIiwgXCJhcHBsaWNhdGlvbi94LXNoXCJdLCBtb2RlOiBcInNoZWxsXCIsIGV4dDogW1wic2hcIiwgXCJrc2hcIiwgXCJiYXNoXCJdLCBhbGlhczogW1wiYmFzaFwiLCBcInNoXCIsIFwienNoXCJdLCBmaWxlOiAvXlBLR0JVSUxEJC99LFxuICAgIHtuYW1lOiBcIlNpZXZlXCIsIG1pbWU6IFwiYXBwbGljYXRpb24vc2lldmVcIiwgbW9kZTogXCJzaWV2ZVwiLCBleHQ6IFtcInNpdlwiLCBcInNpZXZlXCJdfSxcbiAgICB7bmFtZTogXCJTbGltXCIsIG1pbWVzOiBbXCJ0ZXh0L3gtc2xpbVwiLCBcImFwcGxpY2F0aW9uL3gtc2xpbVwiXSwgbW9kZTogXCJzbGltXCIsIGV4dDogW1wic2xpbVwiXX0sXG4gICAge25hbWU6IFwiU21hbGx0YWxrXCIsIG1pbWU6IFwidGV4dC94LXN0c3JjXCIsIG1vZGU6IFwic21hbGx0YWxrXCIsIGV4dDogW1wic3RcIl19LFxuICAgIHtuYW1lOiBcIlNtYXJ0eVwiLCBtaW1lOiBcInRleHQveC1zbWFydHlcIiwgbW9kZTogXCJzbWFydHlcIiwgZXh0OiBbXCJ0cGxcIl19LFxuICAgIHtuYW1lOiBcIlNvbHJcIiwgbWltZTogXCJ0ZXh0L3gtc29sclwiLCBtb2RlOiBcInNvbHJcIn0sXG4gICAge25hbWU6IFwiU01MXCIsIG1pbWU6IFwidGV4dC94LXNtbFwiLCBtb2RlOiBcIm1sbGlrZVwiLCBleHQ6IFtcInNtbFwiLCBcInNpZ1wiLCBcImZ1blwiLCBcInNtYWNrc3BlY1wiXX0sXG4gICAge25hbWU6IFwiU295XCIsIG1pbWU6IFwidGV4dC94LXNveVwiLCBtb2RlOiBcInNveVwiLCBleHQ6IFtcInNveVwiXSwgYWxpYXM6IFtcImNsb3N1cmUgdGVtcGxhdGVcIl19LFxuICAgIHtuYW1lOiBcIlNQQVJRTFwiLCBtaW1lOiBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiLCBtb2RlOiBcInNwYXJxbFwiLCBleHQ6IFtcInJxXCIsIFwic3BhcnFsXCJdLCBhbGlhczogW1wic3BhcnVsXCJdfSxcbiAgICB7bmFtZTogXCJTcHJlYWRzaGVldFwiLCBtaW1lOiBcInRleHQveC1zcHJlYWRzaGVldFwiLCBtb2RlOiBcInNwcmVhZHNoZWV0XCIsIGFsaWFzOiBbXCJleGNlbFwiLCBcImZvcm11bGFcIl19LFxuICAgIHtuYW1lOiBcIlNRTFwiLCBtaW1lOiBcInRleHQveC1zcWxcIiwgbW9kZTogXCJzcWxcIiwgZXh0OiBbXCJzcWxcIl19LFxuICAgIHtuYW1lOiBcIlNRTGl0ZVwiLCBtaW1lOiBcInRleHQveC1zcWxpdGVcIiwgbW9kZTogXCJzcWxcIn0sXG4gICAge25hbWU6IFwiU3F1aXJyZWxcIiwgbWltZTogXCJ0ZXh0L3gtc3F1aXJyZWxcIiwgbW9kZTogXCJjbGlrZVwiLCBleHQ6IFtcIm51dFwiXX0sXG4gICAge25hbWU6IFwiU3R5bHVzXCIsIG1pbWU6IFwidGV4dC94LXN0eWxcIiwgbW9kZTogXCJzdHlsdXNcIiwgZXh0OiBbXCJzdHlsXCJdfSxcbiAgICB7bmFtZTogXCJTd2lmdFwiLCBtaW1lOiBcInRleHQveC1zd2lmdFwiLCBtb2RlOiBcInN3aWZ0XCIsIGV4dDogW1wic3dpZnRcIl19LFxuICAgIHtuYW1lOiBcInNUZVhcIiwgbWltZTogXCJ0ZXh0L3gtc3RleFwiLCBtb2RlOiBcInN0ZXhcIn0sXG4gICAge25hbWU6IFwiTGFUZVhcIiwgbWltZTogXCJ0ZXh0L3gtbGF0ZXhcIiwgbW9kZTogXCJzdGV4XCIsIGV4dDogW1widGV4dFwiLCBcImx0eFwiLCBcInRleFwiXSwgYWxpYXM6IFtcInRleFwiXX0sXG4gICAge25hbWU6IFwiU3lzdGVtVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC1zeXN0ZW12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIiwgXCJzdlwiLCBcInN2aFwiXX0sXG4gICAge25hbWU6IFwiVGNsXCIsIG1pbWU6IFwidGV4dC94LXRjbFwiLCBtb2RlOiBcInRjbFwiLCBleHQ6IFtcInRjbFwiXX0sXG4gICAge25hbWU6IFwiVGV4dGlsZVwiLCBtaW1lOiBcInRleHQveC10ZXh0aWxlXCIsIG1vZGU6IFwidGV4dGlsZVwiLCBleHQ6IFtcInRleHRpbGVcIl19LFxuICAgIHtuYW1lOiBcIlRpZGRseVdpa2kgXCIsIG1pbWU6IFwidGV4dC94LXRpZGRseXdpa2lcIiwgbW9kZTogXCJ0aWRkbHl3aWtpXCJ9LFxuICAgIHtuYW1lOiBcIlRpa2kgd2lraVwiLCBtaW1lOiBcInRleHQvdGlraVwiLCBtb2RlOiBcInRpa2lcIn0sXG4gICAge25hbWU6IFwiVE9NTFwiLCBtaW1lOiBcInRleHQveC10b21sXCIsIG1vZGU6IFwidG9tbFwiLCBleHQ6IFtcInRvbWxcIl19LFxuICAgIHtuYW1lOiBcIlRvcm5hZG9cIiwgbWltZTogXCJ0ZXh0L3gtdG9ybmFkb1wiLCBtb2RlOiBcInRvcm5hZG9cIn0sXG4gICAge25hbWU6IFwidHJvZmZcIiwgbWltZTogXCJ0ZXh0L3Ryb2ZmXCIsIG1vZGU6IFwidHJvZmZcIiwgZXh0OiBbXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05cIiwgbWltZTogXCJ0ZXh0L3gtdHRjblwiLCBtb2RlOiBcInR0Y25cIiwgZXh0OiBbXCJ0dGNuXCIsIFwidHRjbjNcIiwgXCJ0dGNucHBcIl19LFxuICAgIHtuYW1lOiBcIlRUQ05fQ0ZHXCIsIG1pbWU6IFwidGV4dC94LXR0Y24tY2ZnXCIsIG1vZGU6IFwidHRjbi1jZmdcIiwgZXh0OiBbXCJjZmdcIl19LFxuICAgIHtuYW1lOiBcIlR1cnRsZVwiLCBtaW1lOiBcInRleHQvdHVydGxlXCIsIG1vZGU6IFwidHVydGxlXCIsIGV4dDogW1widHRsXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0XCIsIG1pbWU6IFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCBtb2RlOiBcImphdmFzY3JpcHRcIiwgZXh0OiBbXCJ0c1wiXSwgYWxpYXM6IFtcInRzXCJdfSxcbiAgICB7bmFtZTogXCJUeXBlU2NyaXB0LUpTWFwiLCBtaW1lOiBcInRleHQvdHlwZXNjcmlwdC1qc3hcIiwgbW9kZTogXCJqc3hcIiwgZXh0OiBbXCJ0c3hcIl0sIGFsaWFzOiBbXCJ0c3hcIl19LFxuICAgIHtuYW1lOiBcIlR3aWdcIiwgbWltZTogXCJ0ZXh0L3gtdHdpZ1wiLCBtb2RlOiBcInR3aWdcIn0sXG4gICAge25hbWU6IFwiV2ViIElETFwiLCBtaW1lOiBcInRleHQveC13ZWJpZGxcIiwgbW9kZTogXCJ3ZWJpZGxcIiwgZXh0OiBbXCJ3ZWJpZGxcIl19LFxuICAgIHtuYW1lOiBcIlZCLk5FVFwiLCBtaW1lOiBcInRleHQveC12YlwiLCBtb2RlOiBcInZiXCIsIGV4dDogW1widmJcIl19LFxuICAgIHtuYW1lOiBcIlZCU2NyaXB0XCIsIG1pbWU6IFwidGV4dC92YnNjcmlwdFwiLCBtb2RlOiBcInZic2NyaXB0XCIsIGV4dDogW1widmJzXCJdfSxcbiAgICB7bmFtZTogXCJWZWxvY2l0eVwiLCBtaW1lOiBcInRleHQvdmVsb2NpdHlcIiwgbW9kZTogXCJ2ZWxvY2l0eVwiLCBleHQ6IFtcInZ0bFwiXX0sXG4gICAge25hbWU6IFwiVmVyaWxvZ1wiLCBtaW1lOiBcInRleHQveC12ZXJpbG9nXCIsIG1vZGU6IFwidmVyaWxvZ1wiLCBleHQ6IFtcInZcIl19LFxuICAgIHtuYW1lOiBcIlZIRExcIiwgbWltZTogXCJ0ZXh0L3gtdmhkbFwiLCBtb2RlOiBcInZoZGxcIiwgZXh0OiBbXCJ2aGRcIiwgXCJ2aGRsXCJdfSxcbiAgICB7bmFtZTogXCJWdWUuanMgQ29tcG9uZW50XCIsIG1pbWVzOiBbXCJzY3JpcHQveC12dWVcIiwgXCJ0ZXh0L3gtdnVlXCJdLCBtb2RlOiBcInZ1ZVwiLCBleHQ6IFtcInZ1ZVwiXX0sXG4gICAge25hbWU6IFwiWE1MXCIsIG1pbWVzOiBbXCJhcHBsaWNhdGlvbi94bWxcIiwgXCJ0ZXh0L3htbFwiXSwgbW9kZTogXCJ4bWxcIiwgZXh0OiBbXCJ4bWxcIiwgXCJ4c2xcIiwgXCJ4c2RcIiwgXCJzdmdcIl0sIGFsaWFzOiBbXCJyc3NcIiwgXCJ3c2RsXCIsIFwieHNkXCJdfSxcbiAgICB7bmFtZTogXCJYUXVlcnlcIiwgbWltZTogXCJhcHBsaWNhdGlvbi94cXVlcnlcIiwgbW9kZTogXCJ4cXVlcnlcIiwgZXh0OiBbXCJ4eVwiLCBcInhxdWVyeVwiXX0sXG4gICAge25hbWU6IFwiWWFjYXNcIiwgbWltZTogXCJ0ZXh0L3gteWFjYXNcIiwgbW9kZTogXCJ5YWNhc1wiLCBleHQ6IFtcInlzXCJdfSxcbiAgICB7bmFtZTogXCJZQU1MXCIsIG1pbWVzOiBbXCJ0ZXh0L3gteWFtbFwiLCBcInRleHQveWFtbFwiXSwgbW9kZTogXCJ5YW1sXCIsIGV4dDogW1wieWFtbFwiLCBcInltbFwiXSwgYWxpYXM6IFtcInltbFwiXX0sXG4gICAge25hbWU6IFwiWjgwXCIsIG1pbWU6IFwidGV4dC94LXo4MFwiLCBtb2RlOiBcIno4MFwiLCBleHQ6IFtcIno4MFwiXX0sXG4gICAge25hbWU6IFwibXNjZ2VuXCIsIG1pbWU6IFwidGV4dC94LW1zY2dlblwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcIm1zY2dlblwiLCBcIm1zY2luXCIsIFwibXNjXCJdfSxcbiAgICB7bmFtZTogXCJ4dVwiLCBtaW1lOiBcInRleHQveC14dVwiLCBtb2RlOiBcIm1zY2dlblwiLCBleHQ6IFtcInh1XCJdfSxcbiAgICB7bmFtZTogXCJtc2dlbm55XCIsIG1pbWU6IFwidGV4dC94LW1zZ2VubnlcIiwgbW9kZTogXCJtc2NnZW5cIiwgZXh0OiBbXCJtc2dlbm55XCJdfVxuICBdO1xuICAvLyBFbnN1cmUgYWxsIG1vZGVzIGhhdmUgYSBtaW1lIHByb3BlcnR5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgaWYgKGluZm8ubWltZXMpIGluZm8ubWltZSA9IGluZm8ubWltZXNbMF07XG4gIH1cblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlNSU1FID0gZnVuY3Rpb24obWltZSkge1xuICAgIG1pbWUgPSBtaW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBDb2RlTWlycm9yLm1vZGVJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IENvZGVNaXJyb3IubW9kZUluZm9baV07XG4gICAgICBpZiAoaW5mby5taW1lID09IG1pbWUpIHJldHVybiBpbmZvO1xuICAgICAgaWYgKGluZm8ubWltZXMpIGZvciAodmFyIGogPSAwOyBqIDwgaW5mby5taW1lcy5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8ubWltZXNbal0gPT0gbWltZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIGlmICgvXFwreG1sJC8udGVzdChtaW1lKSkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeU1JTUUoXCJhcHBsaWNhdGlvbi94bWxcIilcbiAgICBpZiAoL1xcK2pzb24kLy50ZXN0KG1pbWUpKSByZXR1cm4gQ29kZU1pcnJvci5maW5kTW9kZUJ5TUlNRShcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgfTtcblxuICBDb2RlTWlycm9yLmZpbmRNb2RlQnlFeHRlbnNpb24gPSBmdW5jdGlvbihleHQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmV4dCkgZm9yICh2YXIgaiA9IDA7IGogPCBpbmZvLmV4dC5sZW5ndGg7IGorKylcbiAgICAgICAgaWYgKGluZm8uZXh0W2pdID09IGV4dCkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeUZpbGVOYW1lID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLmZpbGUgJiYgaW5mby5maWxlLnRlc3QoZmlsZW5hbWUpKSByZXR1cm4gaW5mbztcbiAgICB9XG4gICAgdmFyIGRvdCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKFwiLlwiKTtcbiAgICB2YXIgZXh0ID0gZG90ID4gLTEgJiYgZmlsZW5hbWUuc3Vic3RyaW5nKGRvdCArIDEsIGZpbGVuYW1lLmxlbmd0aCk7XG4gICAgaWYgKGV4dCkgcmV0dXJuIENvZGVNaXJyb3IuZmluZE1vZGVCeUV4dGVuc2lvbihleHQpO1xuICB9O1xuXG4gIENvZGVNaXJyb3IuZmluZE1vZGVCeU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IENvZGVNaXJyb3IubW9kZUluZm8ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpbmZvID0gQ29kZU1pcnJvci5tb2RlSW5mb1tpXTtcbiAgICAgIGlmIChpbmZvLm5hbWUudG9Mb3dlckNhc2UoKSA9PSBuYW1lKSByZXR1cm4gaW5mbztcbiAgICAgIGlmIChpbmZvLmFsaWFzKSBmb3IgKHZhciBqID0gMDsgaiA8IGluZm8uYWxpYXMubGVuZ3RoOyBqKyspXG4gICAgICAgIGlmIChpbmZvLmFsaWFzW2pdLnRvTG93ZXJDYXNlKCkgPT0gbmFtZSkgcmV0dXJuIGluZm87XG4gICAgfVxuICB9O1xufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vbWFya2Rvd24vbWFya2Rvd25cIiksIHJlcXVpcmUoXCIuLi8uLi9hZGRvbi9tb2RlL292ZXJsYXlcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIiwgXCIuLi9tYXJrZG93bi9tYXJrZG93blwiLCBcIi4uLy4uL2FkZG9uL21vZGUvb3ZlcmxheVwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcblwidXNlIHN0cmljdFwiO1xuXG52YXIgdXJsUkUgPSAvXigoPzooPzphYWFzP3xhYm91dHxhY2FwfGFkaXVteHRyYXxhZltwc118YWltfGFwdHxhdHRhY2htZW50fGF3fGJlc2hhcmV8Yml0Y29pbnxib2xvfGNhbGx0b3xjYXB8Y2hyb21lKD86LWV4dGVuc2lvbik/fGNpZHxjb2FwfGNvbS1ldmVudGJyaXRlLWF0dGVuZGVlfGNvbnRlbnR8Y3JpZHxjdnN8ZGF0YXxkYXZ8ZGljdHxkbG5hLSg/OnBsYXljb250YWluZXJ8cGxheXNpbmdsZSl8ZG5zfGRvaXxkdG58ZHZifGVkMmt8ZmFjZXRpbWV8ZmVlZHxmaWxlfGZpbmdlcnxmaXNofGZ0cHxnZW98Z2d8Z2l0fGdpem1vcHJvamVjdHxnb3xnb3BoZXJ8Z3RhbGt8aDMyM3xoY3B8aHR0cHM/fGlheHxpY2FwfGljb258aW18aW1hcHxpbmZvfGlwbnxpcHB8aXJjWzZzXT98aXJpcyg/OlxcLmJlZXB8XFwubHd6fFxcLnhwY3xcXC54cGNzKT98aXRtc3xqYXJ8amF2YXNjcmlwdHxqbXN8a2V5cGFyY3xsYXN0Zm18bGRhcHM/fG1hZ25ldHxtYWlsdG98bWFwc3xtYXJrZXR8bWVzc2FnZXxtaWR8bW1zfG1zLWhlbHB8bXNuaW18bXNycHM/fG10cXB8bXVtYmxlfG11cGRhdGV8bXZufG5ld3N8bmZzfG5paD98bm50cHxub3Rlc3xvaWR8b3BhcXVlbG9ja3Rva2VufHBhbG18cGFwYXJhenppfHBsYXRmb3JtfHBvcHxwcmVzfHByb3h5fHBzeWN8cXVlcnl8cmVzKD86b3VyY2UpP3xybWl8cnN5bmN8cnRtcHxydHNwfHNlY29uZGxpZmV8c2VydmljZXxzZXNzaW9ufHNmdHB8c2dufHNodHRwfHNpZXZlfHNpcHM/fHNreXBlfHNtW2JzXXxzbm1wfHNvYXBcXC5iZWVwcz98c29sZGF0fHNwb3RpZnl8c3NofHN0ZWFtfHN2bnx0YWd8dGVhbXNwZWFrfHRlbCg/Om5ldCk/fHRmdHB8dGhpbmdzfHRoaXNtZXNzYWdlfHRpcHx0bjMyNzB8dHZ8dWRwfHVucmVhbHx1cm58dXQyMDA0fHZlbW1pfHZlbnRyaWxvfHZpZXctc291cmNlfHdlYmNhbHx3c3M/fHd0YWl8d3ljaXd5Z3x4Y29uKD86LXVzZXJpZCk/fHhmaXJlfHhtbHJwY1xcLmJlZXBzP3x4bXBwfHhyaXx5bXNncnx6MzlcXC41MFtyc10/KTooPzpcXC97MSwzfXxbYS16MC05JV0pfHd3d1xcZHswLDN9Wy5dfFthLXowLTkuXFwtXStbLl1bYS16XXsyLDR9XFwvKSg/OlteXFxzKCk8Pl18XFwoW15cXHMoKTw+XSpcXCkpKyg/OlxcKFteXFxzKCk8Pl0qXFwpfFteXFxzYCohKClcXFtcXF17fTs6J1wiLiw8Pj/Cq8K74oCc4oCd4oCY4oCZXSkpL2lcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiZ2ZtXCIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykge1xuICB2YXIgY29kZURlcHRoID0gMDtcbiAgZnVuY3Rpb24gYmxhbmtMaW5lKHN0YXRlKSB7XG4gICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBnZm1PdmVybGF5ID0ge1xuICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogZmFsc2UsXG4gICAgICAgIGNvZGVCbG9jazogZmFsc2UsXG4gICAgICAgIGF0ZVNwYWNlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogcy5jb2RlLFxuICAgICAgICBjb2RlQmxvY2s6IHMuY29kZUJsb2NrLFxuICAgICAgICBhdGVTcGFjZTogcy5hdGVTcGFjZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7XG4gICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gbnVsbDtcblxuICAgICAgLy8gSGFjayB0byBwcmV2ZW50IGZvcm1hdHRpbmcgb3ZlcnJpZGUgaW5zaWRlIGNvZGUgYmxvY2tzIChibG9jayBhbmQgaW5saW5lKVxuICAgICAgaWYgKHN0YXRlLmNvZGVCbG9jaykge1xuICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eYGBgKy8pKSB7XG4gICAgICAgICAgc3RhdGUuY29kZUJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgc3RhdGUuY29kZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goL15gYGArLykpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICBzdGF0ZS5jb2RlQmxvY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoaXMgYmxvY2sgaXMgY2hhbmdlZCwgaXQgbWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpbiBNYXJrZG93biBtb2RlXG4gICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PT0gJ2AnKSB7XG4gICAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICAgIHZhciBiZWZvcmUgPSBzdHJlYW0ucG9zO1xuICAgICAgICBzdHJlYW0uZWF0V2hpbGUoJ2AnKTtcbiAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSAxICsgc3RyZWFtLnBvcyAtIGJlZm9yZTtcbiAgICAgICAgaWYgKCFzdGF0ZS5jb2RlKSB7XG4gICAgICAgICAgY29kZURlcHRoID0gZGlmZmVyZW5jZTtcbiAgICAgICAgICBzdGF0ZS5jb2RlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGlmZmVyZW5jZSA9PT0gY29kZURlcHRoKSB7IC8vIE11c3QgYmUgZXhhY3RcbiAgICAgICAgICAgIHN0YXRlLmNvZGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlLmNvZGUpIHtcbiAgICAgICAgc3RyZWFtLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBzcGFjZS4gSWYgc28sIGxpbmtzIGNhbiBiZSBmb3JtYXR0ZWQgbGF0ZXIgb25cbiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5zb2woKSB8fCBzdGF0ZS5hdGVTcGFjZSkge1xuICAgICAgICBzdGF0ZS5hdGVTcGFjZSA9IGZhbHNlO1xuICAgICAgICBpZiAobW9kZUNvbmZpZy5naXRIdWJTcGljZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goL14oPzpbYS16QS1aMC05XFwtX10rXFwvKT8oPzpbYS16QS1aMC05XFwtX10rQCk/KD89LnswLDZ9XFxkKSg/OlthLWYwLTldezcsNDB9XFxiKS8pKSB7XG4gICAgICAgICAgICAvLyBVc2VyL1Byb2plY3RAU0hBXG4gICAgICAgICAgICAvLyBVc2VyQFNIQVxuICAgICAgICAgICAgLy8gU0hBXG4gICAgICAgICAgICBzdGF0ZS5jb21iaW5lVG9rZW5zID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgvXig/OlthLXpBLVowLTlcXC1fXStcXC8pPyg/OlthLXpBLVowLTlcXC1fXSspPyNbMC05XStcXGIvKSkge1xuICAgICAgICAgICAgLy8gVXNlci9Qcm9qZWN0I051bVxuICAgICAgICAgICAgLy8gVXNlciNOdW1cbiAgICAgICAgICAgIC8vICNOdW1cbiAgICAgICAgICAgIHN0YXRlLmNvbWJpbmVUb2tlbnMgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIFwibGlua1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0cmVhbS5tYXRjaCh1cmxSRSkgJiZcbiAgICAgICAgICBzdHJlYW0uc3RyaW5nLnNsaWNlKHN0cmVhbS5zdGFydCAtIDIsIHN0cmVhbS5zdGFydCkgIT0gXCJdKFwiICYmXG4gICAgICAgICAgKHN0cmVhbS5zdGFydCA9PSAwIHx8IC9cXFcvLnRlc3Qoc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnN0YXJ0IC0gMSkpKSkge1xuICAgICAgICAvLyBVUkxzXG4gICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC8yMDEwLzA3L2ltcHJvdmVkX3JlZ2V4X2Zvcl9tYXRjaGluZ191cmxzXG4gICAgICAgIC8vIEFuZCB0aGVuIChpc3N1ZSAjMTE2MCkgc2ltcGxpZmllZCB0byBtYWtlIGl0IG5vdCBjcmFzaCB0aGUgQ2hyb21lIFJlZ2V4cCBlbmdpbmVcbiAgICAgICAgLy8gQW5kIHRoZW4gbGltaXRlZCB1cmwgc2NoZW1lcyB0byB0aGUgQ29tbW9uTWFyayBsaXN0LCBzbyBmb286YmFyIGlzbid0IG1hdGNoZWQgYXMgYSBVUkxcbiAgICAgICAgc3RhdGUuY29tYmluZVRva2VucyA9IHRydWU7XG4gICAgICAgIHJldHVybiBcImxpbmtcIjtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5uZXh0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGJsYW5rTGluZTogYmxhbmtMaW5lXG4gIH07XG5cbiAgdmFyIG1hcmtkb3duQ29uZmlnID0ge1xuICAgIHRhc2tMaXN0czogdHJ1ZSxcbiAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxuICAgIGVtb2ppOiB0cnVlXG4gIH07XG4gIGZvciAodmFyIGF0dHIgaW4gbW9kZUNvbmZpZykge1xuICAgIG1hcmtkb3duQ29uZmlnW2F0dHJdID0gbW9kZUNvbmZpZ1thdHRyXTtcbiAgfVxuICBtYXJrZG93bkNvbmZpZy5uYW1lID0gXCJtYXJrZG93blwiO1xuICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5TW9kZShDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtYXJrZG93bkNvbmZpZyksIGdmbU92ZXJsYXkpO1xuXG59LCBcIm1hcmtkb3duXCIpO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQveC1nZm1cIiwgXCJnZm1cIik7XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwiamF2YXNjcmlwdFwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykge1xuICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0O1xuICB2YXIgc3RhdGVtZW50SW5kZW50ID0gcGFyc2VyQ29uZmlnLnN0YXRlbWVudEluZGVudDtcbiAgdmFyIGpzb25sZE1vZGUgPSBwYXJzZXJDb25maWcuanNvbmxkO1xuICB2YXIganNvbk1vZGUgPSBwYXJzZXJDb25maWcuanNvbiB8fCBqc29ubGRNb2RlO1xuICB2YXIgaXNUUyA9IHBhcnNlckNvbmZpZy50eXBlc2NyaXB0O1xuICB2YXIgd29yZFJFID0gcGFyc2VyQ29uZmlnLndvcmRDaGFyYWN0ZXJzIHx8IC9bXFx3JFxceGExLVxcdWZmZmZdLztcblxuICAvLyBUb2tlbml6ZXJcblxuICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpe1xuICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiBcImtleXdvcmRcIn07fVxuICAgIHZhciBBID0ga3coXCJrZXl3b3JkIGFcIiksIEIgPSBrdyhcImtleXdvcmQgYlwiKSwgQyA9IGt3KFwia2V5d29yZCBjXCIpLCBEID0ga3coXCJrZXl3b3JkIGRcIik7XG4gICAgdmFyIG9wZXJhdG9yID0ga3coXCJvcGVyYXRvclwiKSwgYXRvbSA9IHt0eXBlOiBcImF0b21cIiwgc3R5bGU6IFwiYXRvbVwifTtcblxuICAgIHJldHVybiB7XG4gICAgICBcImlmXCI6IGt3KFwiaWZcIiksIFwid2hpbGVcIjogQSwgXCJ3aXRoXCI6IEEsIFwiZWxzZVwiOiBCLCBcImRvXCI6IEIsIFwidHJ5XCI6IEIsIFwiZmluYWxseVwiOiBCLFxuICAgICAgXCJyZXR1cm5cIjogRCwgXCJicmVha1wiOiBELCBcImNvbnRpbnVlXCI6IEQsIFwibmV3XCI6IGt3KFwibmV3XCIpLCBcImRlbGV0ZVwiOiBDLCBcInZvaWRcIjogQywgXCJ0aHJvd1wiOiBDLFxuICAgICAgXCJkZWJ1Z2dlclwiOiBrdyhcImRlYnVnZ2VyXCIpLCBcInZhclwiOiBrdyhcInZhclwiKSwgXCJjb25zdFwiOiBrdyhcInZhclwiKSwgXCJsZXRcIjoga3coXCJ2YXJcIiksXG4gICAgICBcImZ1bmN0aW9uXCI6IGt3KFwiZnVuY3Rpb25cIiksIFwiY2F0Y2hcIjoga3coXCJjYXRjaFwiKSxcbiAgICAgIFwiZm9yXCI6IGt3KFwiZm9yXCIpLCBcInN3aXRjaFwiOiBrdyhcInN3aXRjaFwiKSwgXCJjYXNlXCI6IGt3KFwiY2FzZVwiKSwgXCJkZWZhdWx0XCI6IGt3KFwiZGVmYXVsdFwiKSxcbiAgICAgIFwiaW5cIjogb3BlcmF0b3IsIFwidHlwZW9mXCI6IG9wZXJhdG9yLCBcImluc3RhbmNlb2ZcIjogb3BlcmF0b3IsXG4gICAgICBcInRydWVcIjogYXRvbSwgXCJmYWxzZVwiOiBhdG9tLCBcIm51bGxcIjogYXRvbSwgXCJ1bmRlZmluZWRcIjogYXRvbSwgXCJOYU5cIjogYXRvbSwgXCJJbmZpbml0eVwiOiBhdG9tLFxuICAgICAgXCJ0aGlzXCI6IGt3KFwidGhpc1wiKSwgXCJjbGFzc1wiOiBrdyhcImNsYXNzXCIpLCBcInN1cGVyXCI6IGt3KFwiYXRvbVwiKSxcbiAgICAgIFwieWllbGRcIjogQywgXCJleHBvcnRcIjoga3coXCJleHBvcnRcIiksIFwiaW1wb3J0XCI6IGt3KFwiaW1wb3J0XCIpLCBcImV4dGVuZHNcIjogQyxcbiAgICAgIFwiYXdhaXRcIjogQ1xuICAgIH07XG4gIH0oKTtcblxuICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcXC0qJiU9PD4hP3x+XkBdLztcbiAgdmFyIGlzSnNvbmxkS2V5d29yZCA9IC9eQChjb250ZXh0fGlkfHZhbHVlfGxhbmd1YWdlfHR5cGV8Y29udGFpbmVyfGxpc3R8c2V0fHJldmVyc2V8aW5kZXh8YmFzZXx2b2NhYnxncmFwaClcIi87XG5cbiAgZnVuY3Rpb24gcmVhZFJlZ2V4cChzdHJlYW0pIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBpblNldCA9IGZhbHNlO1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgICBpZiAobmV4dCA9PSBcIi9cIiAmJiAhaW5TZXQpIHJldHVybjtcbiAgICAgICAgaWYgKG5leHQgPT0gXCJbXCIpIGluU2V0ID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBpZiAoaW5TZXQgJiYgbmV4dCA9PSBcIl1cIikgaW5TZXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09IFwiXFxcXFwiO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXRcbiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuXG4gIHZhciB0eXBlLCBjb250ZW50O1xuICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7XG4gICAgdHlwZSA9IHRwOyBjb250ZW50ID0gY29udDtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cbiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpO1xuICAgIGlmIChjaCA9PSAnXCInIHx8IGNoID09IFwiJ1wiKSB7XG4gICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTtcbiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKGNoID09IFwiLlwiICYmIHN0cmVhbS5tYXRjaCgvXlxcZCsoPzpbZUVdWytcXC1dP1xcZCspPy8pKSB7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIuXCIgJiYgc3RyZWFtLm1hdGNoKFwiLi5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCJzcHJlYWRcIiwgXCJtZXRhXCIpO1xuICAgIH0gZWxzZSBpZiAoL1tcXFtcXF17fVxcKFxcKSw7XFw6XFwuXS8udGVzdChjaCkpIHtcbiAgICAgIHJldHVybiByZXQoY2gpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCI9XCIgJiYgc3RyZWFtLmVhdChcIj5cIikpIHtcbiAgICAgIHJldHVybiByZXQoXCI9PlwiLCBcIm9wZXJhdG9yXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIwXCIgJiYgc3RyZWFtLm1hdGNoKC9eKD86eFtcXGRhLWZdK3xvWzAtN10rfGJbMDFdKyluPy9pKSkge1xuICAgICAgcmV0dXJuIHJldChcIm51bWJlclwiLCBcIm51bWJlclwiKTtcbiAgICB9IGVsc2UgaWYgKC9cXGQvLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0ubWF0Y2goL15cXGQqKD86bnwoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/Lyk7XG4gICAgICByZXR1cm4gcmV0KFwibnVtYmVyXCIsIFwibnVtYmVyXCIpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIvXCIpIHtcbiAgICAgIGlmIChzdHJlYW0uZWF0KFwiKlwiKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDtcbiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdChcIi9cIikpIHtcbiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpO1xuICAgICAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIDEpKSB7XG4gICAgICAgIHJlYWRSZWdleHAoc3RyZWFtKTtcbiAgICAgICAgc3RyZWFtLm1hdGNoKC9eXFxiKChbZ2lteXVzXSkoPyFbZ2lteXVzXSpcXDIpKStcXGIvKTtcbiAgICAgICAgcmV0dXJuIHJldChcInJlZ2V4cFwiLCBcInN0cmluZy0yXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyZWFtLmVhdChcIj1cIik7XG4gICAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCJgXCIpIHtcbiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5RdWFzaTtcbiAgICAgIHJldHVybiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpO1xuICAgIH0gZWxzZSBpZiAoY2ggPT0gXCIjXCIpIHtcbiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgIHJldHVybiByZXQoXCJlcnJvclwiLCBcImVycm9yXCIpO1xuICAgIH0gZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHtcbiAgICAgIGlmIChjaCAhPSBcIj5cIiB8fCAhc3RhdGUubGV4aWNhbCB8fCBzdGF0ZS5sZXhpY2FsLnR5cGUgIT0gXCI+XCIpIHtcbiAgICAgICAgaWYgKHN0cmVhbS5lYXQoXCI9XCIpKSB7XG4gICAgICAgICAgaWYgKGNoID09IFwiIVwiIHx8IGNoID09IFwiPVwiKSBzdHJlYW0uZWF0KFwiPVwiKVxuICAgICAgICB9IGVsc2UgaWYgKC9bPD4qK1xcLV0vLnRlc3QoY2gpKSB7XG4gICAgICAgICAgc3RyZWFtLmVhdChjaClcbiAgICAgICAgICBpZiAoY2ggPT0gXCI+XCIpIHN0cmVhbS5lYXQoY2gpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQoXCJvcGVyYXRvclwiLCBcIm9wZXJhdG9yXCIsIHN0cmVhbS5jdXJyZW50KCkpO1xuICAgIH0gZWxzZSBpZiAod29yZFJFLnRlc3QoY2gpKSB7XG4gICAgICBzdHJlYW0uZWF0V2hpbGUod29yZFJFKTtcbiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKVxuICAgICAgaWYgKHN0YXRlLmxhc3RUeXBlICE9IFwiLlwiKSB7XG4gICAgICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkge1xuICAgICAgICAgIHZhciBrdyA9IGtleXdvcmRzW3dvcmRdXG4gICAgICAgICAgcmV0dXJuIHJldChrdy50eXBlLCBrdy5zdHlsZSwgd29yZClcbiAgICAgICAgfVxuICAgICAgICBpZiAod29yZCA9PSBcImFzeW5jXCIgJiYgc3RyZWFtLm1hdGNoKC9eKFxcc3xcXC9cXCouKj9cXCpcXC8pKltcXFtcXChcXHddLywgZmFsc2UpKVxuICAgICAgICAgIHJldHVybiByZXQoXCJhc3luY1wiLCBcImtleXdvcmRcIiwgd29yZClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQoXCJ2YXJpYWJsZVwiLCBcInZhcmlhYmxlXCIsIHdvcmQpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkge1xuICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDtcbiAgICAgIGlmIChqc29ubGRNb2RlICYmIHN0cmVhbS5wZWVrKCkgPT0gXCJAXCIgJiYgc3RyZWFtLm1hdGNoKGlzSnNvbmxkS2V5d29yZCkpe1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgcmV0dXJuIHJldChcImpzb25sZC1rZXl3b3JkXCIsIFwibWV0YVwiKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIGJyZWFrO1xuICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICAgIH1cbiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICByZXR1cm4gcmV0KFwic3RyaW5nXCIsIFwic3RyaW5nXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkge1xuICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDtcbiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7XG4gICAgICBpZiAoY2ggPT0gXCIvXCIgJiYgbWF5YmVFbmQpIHtcbiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gXCIqXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0KFwiY29tbWVudFwiLCBcImNvbW1lbnRcIik7XG4gIH1cblxuICBmdW5jdGlvbiB0b2tlblF1YXNpKHN0cmVhbSwgc3RhdGUpIHtcbiAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0O1xuICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHtcbiAgICAgIGlmICghZXNjYXBlZCAmJiAobmV4dCA9PSBcImBcIiB8fCBuZXh0ID09IFwiJFwiICYmIHN0cmVhbS5lYXQoXCJ7XCIpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSBcIlxcXFxcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJldChcInF1YXNpXCIsIFwic3RyaW5nLTJcIiwgc3RyZWFtLmN1cnJlbnQoKSk7XG4gIH1cblxuICB2YXIgYnJhY2tldHMgPSBcIihbe31dKVwiO1xuICAvLyBUaGlzIGlzIGEgY3J1ZGUgbG9va2FoZWFkIHRyaWNrIHRvIHRyeSBhbmQgbm90aWNlIHRoYXQgd2UncmVcbiAgLy8gcGFyc2luZyB0aGUgYXJndW1lbnQgcGF0dGVybnMgZm9yIGEgZmF0LWFycm93IGZ1bmN0aW9uIGJlZm9yZSB3ZVxuICAvLyBhY3R1YWxseSBoaXQgdGhlIGFycm93IHRva2VuLiBJdCBvbmx5IHdvcmtzIGlmIHRoZSBhcnJvdyBpcyBvblxuICAvLyB0aGUgc2FtZSBsaW5lIGFzIHRoZSBhcmd1bWVudHMgYW5kIHRoZXJlJ3Mgbm8gc3RyYW5nZSBub2lzZVxuICAvLyAoY29tbWVudHMpIGluIGJldHdlZW4uIEZhbGxiYWNrIGlzIHRvIG9ubHkgbm90aWNlIHdoZW4gd2UgaGl0IHRoZVxuICAvLyBhcnJvdywgYW5kIG5vdCBkZWNsYXJlIHRoZSBhcmd1bWVudHMgYXMgbG9jYWxzIGZvciB0aGUgYXJyb3dcbiAgLy8gYm9keS5cbiAgZnVuY3Rpb24gZmluZEZhdEFycm93KHN0cmVhbSwgc3RhdGUpIHtcbiAgICBpZiAoc3RhdGUuZmF0QXJyb3dBdCkgc3RhdGUuZmF0QXJyb3dBdCA9IG51bGw7XG4gICAgdmFyIGFycm93ID0gc3RyZWFtLnN0cmluZy5pbmRleE9mKFwiPT5cIiwgc3RyZWFtLnN0YXJ0KTtcbiAgICBpZiAoYXJyb3cgPCAwKSByZXR1cm47XG5cbiAgICBpZiAoaXNUUykgeyAvLyBUcnkgdG8gc2tpcCBUeXBlU2NyaXB0IHJldHVybiB0eXBlIGRlY2xhcmF0aW9ucyBhZnRlciB0aGUgYXJndW1lbnRzXG4gICAgICB2YXIgbSA9IC86XFxzKig/OlxcdysoPzo8W14+XSo+fFxcW1xcXSk/fFxce1tefV0qXFx9KVxccyokLy5leGVjKHN0cmVhbS5zdHJpbmcuc2xpY2Uoc3RyZWFtLnN0YXJ0LCBhcnJvdykpXG4gICAgICBpZiAobSkgYXJyb3cgPSBtLmluZGV4XG4gICAgfVxuXG4gICAgdmFyIGRlcHRoID0gMCwgc2F3U29tZXRoaW5nID0gZmFsc2U7XG4gICAgZm9yICh2YXIgcG9zID0gYXJyb3cgLSAxOyBwb3MgPj0gMDsgLS1wb3MpIHtcbiAgICAgIHZhciBjaCA9IHN0cmVhbS5zdHJpbmcuY2hhckF0KHBvcyk7XG4gICAgICB2YXIgYnJhY2tldCA9IGJyYWNrZXRzLmluZGV4T2YoY2gpO1xuICAgICAgaWYgKGJyYWNrZXQgPj0gMCAmJiBicmFja2V0IDwgMykge1xuICAgICAgICBpZiAoIWRlcHRoKSB7ICsrcG9zOyBicmVhazsgfVxuICAgICAgICBpZiAoLS1kZXB0aCA9PSAwKSB7IGlmIChjaCA9PSBcIihcIikgc2F3U29tZXRoaW5nID0gdHJ1ZTsgYnJlYWs7IH1cbiAgICAgIH0gZWxzZSBpZiAoYnJhY2tldCA+PSAzICYmIGJyYWNrZXQgPCA2KSB7XG4gICAgICAgICsrZGVwdGg7XG4gICAgICB9IGVsc2UgaWYgKHdvcmRSRS50ZXN0KGNoKSkge1xuICAgICAgICBzYXdTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICgvW1wiJ1xcL10vLnRlc3QoY2gpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoc2F3U29tZXRoaW5nICYmICFkZXB0aCkge1xuICAgICAgICArK3BvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYXdTb21ldGhpbmcgJiYgIWRlcHRoKSBzdGF0ZS5mYXRBcnJvd0F0ID0gcG9zO1xuICB9XG5cbiAgLy8gUGFyc2VyXG5cbiAgdmFyIGF0b21pY1R5cGVzID0ge1wiYXRvbVwiOiB0cnVlLCBcIm51bWJlclwiOiB0cnVlLCBcInZhcmlhYmxlXCI6IHRydWUsIFwic3RyaW5nXCI6IHRydWUsIFwicmVnZXhwXCI6IHRydWUsIFwidGhpc1wiOiB0cnVlLCBcImpzb25sZC1rZXl3b3JkXCI6IHRydWV9O1xuXG4gIGZ1bmN0aW9uIEpTTGV4aWNhbChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldiwgaW5mbykge1xuICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDtcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICBpZiAoYWxpZ24gIT0gbnVsbCkgdGhpcy5hbGlnbiA9IGFsaWduO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5TY29wZShzdGF0ZSwgdmFybmFtZSkge1xuICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpXG4gICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGN4ID0gc3RhdGUuY29udGV4dDsgY3g7IGN4ID0gY3gucHJldikge1xuICAgICAgZm9yICh2YXIgdiA9IGN4LnZhcnM7IHY7IHYgPSB2Lm5leHQpXG4gICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkge1xuICAgIHZhciBjYyA9IHN0YXRlLmNjO1xuICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy5cbiAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKVxuICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFya2VkID0gbnVsbCwgY3guY2MgPSBjYzsgY3guc3R5bGUgPSBzdHlsZTtcblxuICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eShcImFsaWduXCIpKVxuICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7XG5cbiAgICB3aGlsZSh0cnVlKSB7XG4gICAgICB2YXIgY29tYmluYXRvciA9IGNjLmxlbmd0aCA/IGNjLnBvcCgpIDoganNvbk1vZGUgPyBleHByZXNzaW9uIDogc3RhdGVtZW50O1xuICAgICAgaWYgKGNvbWJpbmF0b3IodHlwZSwgY29udGVudCkpIHtcbiAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxlbmd0aCAtIDFdLmxleClcbiAgICAgICAgICBjYy5wb3AoKSgpO1xuICAgICAgICBpZiAoY3gubWFya2VkKSByZXR1cm4gY3gubWFya2VkO1xuICAgICAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgaW5TY29wZShzdGF0ZSwgY29udGVudCkpIHJldHVybiBcInZhcmlhYmxlLTJcIjtcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbWJpbmF0b3IgdXRpbHNcblxuICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07XG4gIGZ1bmN0aW9uIHBhc3MoKSB7XG4gICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pO1xuICB9XG4gIGZ1bmN0aW9uIGNvbnQoKSB7XG4gICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIGluTGlzdChuYW1lLCBsaXN0KSB7XG4gICAgZm9yICh2YXIgdiA9IGxpc3Q7IHY7IHYgPSB2Lm5leHQpIGlmICh2Lm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gcmVnaXN0ZXIodmFybmFtZSkge1xuICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlO1xuICAgIGN4Lm1hcmtlZCA9IFwiZGVmXCI7XG4gICAgaWYgKHN0YXRlLmNvbnRleHQpIHtcbiAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLmluZm8gPT0gXCJ2YXJcIiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYmxvY2spIHtcbiAgICAgICAgLy8gRklYTUUgZnVuY3Rpb24gZGVjbHMgYXJlIGFsc28gbm90IGJsb2NrIHNjb3BlZFxuICAgICAgICB2YXIgbmV3Q29udGV4dCA9IHJlZ2lzdGVyVmFyU2NvcGVkKHZhcm5hbWUsIHN0YXRlLmNvbnRleHQpXG4gICAgICAgIGlmIChuZXdDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3Q29udGV4dFxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkxpc3QodmFybmFtZSwgc3RhdGUubG9jYWxWYXJzKSkge1xuICAgICAgICBzdGF0ZS5sb2NhbFZhcnMgPSBuZXcgVmFyKHZhcm5hbWUsIHN0YXRlLmxvY2FsVmFycylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGwgdGhyb3VnaCBtZWFucyB0aGlzIGlzIGdsb2JhbFxuICAgIGlmIChwYXJzZXJDb25maWcuZ2xvYmFsVmFycyAmJiAhaW5MaXN0KHZhcm5hbWUsIHN0YXRlLmdsb2JhbFZhcnMpKVxuICAgICAgc3RhdGUuZ2xvYmFsVmFycyA9IG5ldyBWYXIodmFybmFtZSwgc3RhdGUuZ2xvYmFsVmFycylcbiAgfVxuICBmdW5jdGlvbiByZWdpc3RlclZhclNjb3BlZCh2YXJuYW1lLCBjb250ZXh0KSB7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAoY29udGV4dC5ibG9jaykge1xuICAgICAgdmFyIGlubmVyID0gcmVnaXN0ZXJWYXJTY29wZWQodmFybmFtZSwgY29udGV4dC5wcmV2KVxuICAgICAgaWYgKCFpbm5lcikgcmV0dXJuIG51bGxcbiAgICAgIGlmIChpbm5lciA9PSBjb250ZXh0LnByZXYpIHJldHVybiBjb250ZXh0XG4gICAgICByZXR1cm4gbmV3IENvbnRleHQoaW5uZXIsIGNvbnRleHQudmFycywgdHJ1ZSlcbiAgICB9IGVsc2UgaWYgKGluTGlzdCh2YXJuYW1lLCBjb250ZXh0LnZhcnMpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IENvbnRleHQoY29udGV4dC5wcmV2LCBuZXcgVmFyKHZhcm5hbWUsIGNvbnRleHQudmFycyksIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTW9kaWZpZXIobmFtZSkge1xuICAgIHJldHVybiBuYW1lID09IFwicHVibGljXCIgfHwgbmFtZSA9PSBcInByaXZhdGVcIiB8fCBuYW1lID09IFwicHJvdGVjdGVkXCIgfHwgbmFtZSA9PSBcImFic3RyYWN0XCIgfHwgbmFtZSA9PSBcInJlYWRvbmx5XCJcbiAgfVxuXG4gIC8vIENvbWJpbmF0b3JzXG5cbiAgZnVuY3Rpb24gQ29udGV4dChwcmV2LCB2YXJzLCBibG9jaykgeyB0aGlzLnByZXYgPSBwcmV2OyB0aGlzLnZhcnMgPSB2YXJzOyB0aGlzLmJsb2NrID0gYmxvY2sgfVxuICBmdW5jdGlvbiBWYXIobmFtZSwgbmV4dCkgeyB0aGlzLm5hbWUgPSBuYW1lOyB0aGlzLm5leHQgPSBuZXh0IH1cblxuICB2YXIgZGVmYXVsdFZhcnMgPSBuZXcgVmFyKFwidGhpc1wiLCBuZXcgVmFyKFwiYXJndW1lbnRzXCIsIG51bGwpKVxuICBmdW5jdGlvbiBwdXNoY29udGV4dCgpIHtcbiAgICBjeC5zdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoY3guc3RhdGUuY29udGV4dCwgY3guc3RhdGUubG9jYWxWYXJzLCBmYWxzZSlcbiAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBkZWZhdWx0VmFyc1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hibG9ja2NvbnRleHQoKSB7XG4gICAgY3guc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KGN4LnN0YXRlLmNvbnRleHQsIGN4LnN0YXRlLmxvY2FsVmFycywgdHJ1ZSlcbiAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBudWxsXG4gIH1cbiAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHtcbiAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBjeC5zdGF0ZS5jb250ZXh0LnZhcnNcbiAgICBjeC5zdGF0ZS5jb250ZXh0ID0gY3guc3RhdGUuY29udGV4dC5wcmV2XG4gIH1cbiAgcG9wY29udGV4dC5sZXggPSB0cnVlXG4gIGZ1bmN0aW9uIHB1c2hsZXgodHlwZSwgaW5mbykge1xuICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlLCBpbmRlbnQgPSBzdGF0ZS5pbmRlbnRlZDtcbiAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gXCJzdGF0XCIpIGluZGVudCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7XG4gICAgICBlbHNlIGZvciAodmFyIG91dGVyID0gc3RhdGUubGV4aWNhbDsgb3V0ZXIgJiYgb3V0ZXIudHlwZSA9PSBcIilcIiAmJiBvdXRlci5hbGlnbjsgb3V0ZXIgPSBvdXRlci5wcmV2KVxuICAgICAgICBpbmRlbnQgPSBvdXRlci5pbmRlbnRlZDtcbiAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2FsKGluZGVudCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKTtcbiAgICB9O1xuICAgIHJlc3VsdC5sZXggPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZnVuY3Rpb24gcG9wbGV4KCkge1xuICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlO1xuICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHtcbiAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gXCIpXCIpXG4gICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7XG4gICAgfVxuICB9XG4gIHBvcGxleC5sZXggPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIGV4cGVjdCh3YW50ZWQpIHtcbiAgICBmdW5jdGlvbiBleHAodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT0gd2FudGVkKSByZXR1cm4gY29udCgpO1xuICAgICAgZWxzZSBpZiAod2FudGVkID09IFwiO1wiIHx8IHR5cGUgPT0gXCJ9XCIgfHwgdHlwZSA9PSBcIilcIiB8fCB0eXBlID09IFwiXVwiKSByZXR1cm4gcGFzcygpO1xuICAgICAgZWxzZSByZXR1cm4gY29udChleHApO1xuICAgIH07XG4gICAgcmV0dXJuIGV4cDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ2YXJkZWZcIiwgdmFsdWUpLCB2YXJkZWYsIGV4cGVjdChcIjtcIiksIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGFcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHBhcmVuRXhwciwgc3RhdGVtZW50LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBiXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGRcIikgcmV0dXJuIGN4LnN0cmVhbS5tYXRjaCgvXlxccyokLywgZmFsc2UpID8gY29udCgpIDogY29udChwdXNobGV4KFwic3RhdFwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiZGVidWdnZXJcIikgcmV0dXJuIGNvbnQoZXhwZWN0KFwiO1wiKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBwdXNoYmxvY2tjb250ZXh0LCBibG9jaywgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodHlwZSA9PSBcImlmXCIpIHtcbiAgICAgIGlmIChjeC5zdGF0ZS5sZXhpY2FsLmluZm8gPT0gXCJlbHNlXCIgJiYgY3guc3RhdGUuY2NbY3guc3RhdGUuY2MubGVuZ3RoIC0gMV0gPT0gcG9wbGV4KVxuICAgICAgICBjeC5zdGF0ZS5jYy5wb3AoKSgpO1xuICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHBhcmVuRXhwciwgc3RhdGVtZW50LCBwb3BsZXgsIG1heWJlZWxzZSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO1xuICAgIGlmICh0eXBlID09IFwiZm9yXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBmb3JzcGVjLCBzdGF0ZW1lbnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJjbGFzc1wiIHx8IChpc1RTICYmIHZhbHVlID09IFwiaW50ZXJmYWNlXCIpKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChwdXNobGV4KFwiZm9ybVwiKSwgY2xhc3NOYW1lLCBwb3BsZXgpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcImRlY2xhcmVcIikge1xuICAgICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIlxuICAgICAgICByZXR1cm4gY29udChzdGF0ZW1lbnQpXG4gICAgICB9IGVsc2UgaWYgKGlzVFMgJiYgKHZhbHVlID09IFwibW9kdWxlXCIgfHwgdmFsdWUgPT0gXCJlbnVtXCIgfHwgdmFsdWUgPT0gXCJ0eXBlXCIpICYmIGN4LnN0cmVhbS5tYXRjaCgvXlxccypcXHcvLCBmYWxzZSkpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgaWYgKHZhbHVlID09IFwiZW51bVwiKSByZXR1cm4gY29udChlbnVtZGVmKTtcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gXCJ0eXBlXCIpIHJldHVybiBjb250KHR5cGVleHByLCBleHBlY3QoXCJvcGVyYXRvclwiKSwgdHlwZWV4cHIsIGV4cGVjdChcIjtcIikpO1xuICAgICAgICBlbHNlIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwYXR0ZXJuLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiKSwgYmxvY2ssIHBvcGxleCwgcG9wbGV4KVxuICAgICAgfSBlbHNlIGlmIChpc1RTICYmIHZhbHVlID09IFwibmFtZXNwYWNlXCIpIHtcbiAgICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgICAgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIGV4cHJlc3Npb24sIGJsb2NrLCBwb3BsZXgpXG4gICAgICB9IGVsc2UgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJhYnN0cmFjdFwiKSB7XG4gICAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICAgIHJldHVybiBjb250KHN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCJzdGF0XCIpLCBtYXliZWxhYmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJzd2l0Y2hcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIHBhcmVuRXhwciwgZXhwZWN0KFwie1wiKSwgcHVzaGxleChcIn1cIiwgXCJzd2l0Y2hcIiksIHB1c2hibG9ja2NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCwgcG9wY29udGV4dCk7XG4gICAgaWYgKHR5cGUgPT0gXCJjYXNlXCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjpcIikpO1xuICAgIGlmICh0eXBlID09IFwiZGVmYXVsdFwiKSByZXR1cm4gY29udChleHBlY3QoXCI6XCIpKTtcbiAgICBpZiAodHlwZSA9PSBcImNhdGNoXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJmb3JtXCIpLCBwdXNoY29udGV4dCwgbWF5YmVDYXRjaEJpbmRpbmcsIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcImV4cG9ydFwiKSByZXR1cm4gY29udChwdXNobGV4KFwic3RhdFwiKSwgYWZ0ZXJFeHBvcnQsIHBvcGxleCk7XG4gICAgaWYgKHR5cGUgPT0gXCJpbXBvcnRcIikgcmV0dXJuIGNvbnQocHVzaGxleChcInN0YXRcIiksIGFmdGVySW1wb3J0LCBwb3BsZXgpO1xuICAgIGlmICh0eXBlID09IFwiYXN5bmNcIikgcmV0dXJuIGNvbnQoc3RhdGVtZW50KVxuICAgIGlmICh2YWx1ZSA9PSBcIkBcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgc3RhdGVtZW50KVxuICAgIHJldHVybiBwYXNzKHB1c2hsZXgoXCJzdGF0XCIpLCBleHByZXNzaW9uLCBleHBlY3QoXCI7XCIpLCBwb3BsZXgpO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlQ2F0Y2hCaW5kaW5nKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQoZnVuYXJnLCBleHBlY3QoXCIpXCIpKVxuICB9XG4gIGZ1bmN0aW9uIGV4cHJlc3Npb24odHlwZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gZXhwcmVzc2lvbk5vQ29tbWEodHlwZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbklubmVyKHR5cGUsIHZhbHVlLCB0cnVlKTtcbiAgfVxuICBmdW5jdGlvbiBwYXJlbkV4cHIodHlwZSkge1xuICAgIGlmICh0eXBlICE9IFwiKFwiKSByZXR1cm4gcGFzcygpXG4gICAgcmV0dXJuIGNvbnQocHVzaGxleChcIilcIiksIGV4cHJlc3Npb24sIGV4cGVjdChcIilcIiksIHBvcGxleClcbiAgfVxuICBmdW5jdGlvbiBleHByZXNzaW9uSW5uZXIodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICBpZiAoY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQpIHtcbiAgICAgIHZhciBib2R5ID0gbm9Db21tYSA/IGFycm93Qm9keU5vQ29tbWEgOiBhcnJvd0JvZHk7XG4gICAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIHB1c2hsZXgoXCIpXCIpLCBjb21tYXNlcChmdW5hcmcsIFwiKVwiKSwgcG9wbGV4LCBleHBlY3QoXCI9PlwiKSwgYm9keSwgcG9wY29udGV4dCk7XG4gICAgICBlbHNlIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MocHVzaGNvbnRleHQsIHBhdHRlcm4sIGV4cGVjdChcIj0+XCIpLCBib2R5LCBwb3Bjb250ZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgbWF5YmVvcCA9IG5vQ29tbWEgPyBtYXliZW9wZXJhdG9yTm9Db21tYSA6IG1heWJlb3BlcmF0b3JDb21tYTtcbiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwiY2xhc3NcIiB8fCAoaXNUUyAmJiB2YWx1ZSA9PSBcImludGVyZmFjZVwiKSkgeyBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiksIGNsYXNzRXhwcmVzc2lvbiwgcG9wbGV4KTsgfVxuICAgIGlmICh0eXBlID09IFwia2V5d29yZCBjXCIgfHwgdHlwZSA9PSBcImFzeW5jXCIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgbWF5YmVleHByZXNzaW9uLCBleHBlY3QoXCIpXCIpLCBwb3BsZXgsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwib3BlcmF0b3JcIiB8fCB0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KG5vQ29tbWEgPyBleHByZXNzaW9uTm9Db21tYSA6IGV4cHJlc3Npb24pO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udChwdXNobGV4KFwiXVwiKSwgYXJyYXlMaXRlcmFsLCBwb3BsZXgsIG1heWJlb3ApO1xuICAgIGlmICh0eXBlID09IFwie1wiKSByZXR1cm4gY29udENvbW1hc2VwKG9ianByb3AsIFwifVwiLCBudWxsLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcInF1YXNpXCIpIHJldHVybiBwYXNzKHF1YXNpLCBtYXliZW9wKTtcbiAgICBpZiAodHlwZSA9PSBcIm5ld1wiKSByZXR1cm4gY29udChtYXliZVRhcmdldChub0NvbW1hKSk7XG4gICAgaWYgKHR5cGUgPT0gXCJpbXBvcnRcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIGNvbnQoKTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb24odHlwZSkge1xuICAgIGlmICh0eXBlLm1hdGNoKC9bO1xcfVxcKVxcXSxdLykpIHJldHVybiBwYXNzKCk7XG4gICAgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gIH1cblxuICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yQ29tbWEodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcIixcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIG1heWJlb3BlcmF0b3JOb0NvbW1hKHR5cGUsIHZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvck5vQ29tbWEodHlwZSwgdmFsdWUsIG5vQ29tbWEpIHtcbiAgICB2YXIgbWUgPSBub0NvbW1hID09IGZhbHNlID8gbWF5YmVvcGVyYXRvckNvbW1hIDogbWF5YmVvcGVyYXRvck5vQ29tbWE7XG4gICAgdmFyIGV4cHIgPSBub0NvbW1hID09IGZhbHNlID8gZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25Ob0NvbW1hO1xuICAgIGlmICh0eXBlID09IFwiPT5cIikgcmV0dXJuIGNvbnQocHVzaGNvbnRleHQsIG5vQ29tbWEgPyBhcnJvd0JvZHlOb0NvbW1hIDogYXJyb3dCb2R5LCBwb3Bjb250ZXh0KTtcbiAgICBpZiAodHlwZSA9PSBcIm9wZXJhdG9yXCIpIHtcbiAgICAgIGlmICgvXFwrXFwrfC0tLy50ZXN0KHZhbHVlKSB8fCBpc1RTICYmIHZhbHVlID09IFwiIVwiKSByZXR1cm4gY29udChtZSk7XG4gICAgICBpZiAoaXNUUyAmJiB2YWx1ZSA9PSBcIjxcIiAmJiBjeC5zdHJlYW0ubWF0Y2goL14oW14+XXw8Lio/PikqPlxccypcXCgvLCBmYWxzZSkpXG4gICAgICAgIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIG1lKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KFwiOlwiKSwgZXhwcik7XG4gICAgICByZXR1cm4gY29udChleHByKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJxdWFzaVwiKSB7IHJldHVybiBwYXNzKHF1YXNpLCBtZSk7IH1cbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udENvbW1hc2VwKGV4cHJlc3Npb25Ob0NvbW1hLCBcIilcIiwgXCJjYWxsXCIsIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1lKTtcbiAgICBpZiAodHlwZSA9PSBcIltcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIl1cIiksIG1heWJlZXhwcmVzc2lvbiwgZXhwZWN0KFwiXVwiKSwgcG9wbGV4LCBtZSk7XG4gICAgaWYgKGlzVFMgJiYgdmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udCh0eXBlZXhwciwgbWUpIH1cbiAgICBpZiAodHlwZSA9PSBcInJlZ2V4cFwiKSB7XG4gICAgICBjeC5zdGF0ZS5sYXN0VHlwZSA9IGN4Lm1hcmtlZCA9IFwib3BlcmF0b3JcIlxuICAgICAgY3guc3RyZWFtLmJhY2tVcChjeC5zdHJlYW0ucG9zIC0gY3guc3RyZWFtLnN0YXJ0IC0gMSlcbiAgICAgIHJldHVybiBjb250KGV4cHIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHF1YXNpKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJxdWFzaVwiKSByZXR1cm4gcGFzcygpO1xuICAgIGlmICh2YWx1ZS5zbGljZSh2YWx1ZS5sZW5ndGggLSAyKSAhPSBcIiR7XCIpIHJldHVybiBjb250KHF1YXNpKTtcbiAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBjb250aW51ZVF1YXNpKTtcbiAgfVxuICBmdW5jdGlvbiBjb250aW51ZVF1YXNpKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikge1xuICAgICAgY3gubWFya2VkID0gXCJzdHJpbmctMlwiO1xuICAgICAgY3guc3RhdGUudG9rZW5pemUgPSB0b2tlblF1YXNpO1xuICAgICAgcmV0dXJuIGNvbnQocXVhc2kpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBhcnJvd0JvZHkodHlwZSkge1xuICAgIGZpbmRGYXRBcnJvdyhjeC5zdHJlYW0sIGN4LnN0YXRlKTtcbiAgICByZXR1cm4gcGFzcyh0eXBlID09IFwie1wiID8gc3RhdGVtZW50IDogZXhwcmVzc2lvbik7XG4gIH1cbiAgZnVuY3Rpb24gYXJyb3dCb2R5Tm9Db21tYSh0eXBlKSB7XG4gICAgZmluZEZhdEFycm93KGN4LnN0cmVhbSwgY3guc3RhdGUpO1xuICAgIHJldHVybiBwYXNzKHR5cGUgPT0gXCJ7XCIgPyBzdGF0ZW1lbnQgOiBleHByZXNzaW9uTm9Db21tYSk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUYXJnZXQobm9Db21tYSkge1xuICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIi5cIikgcmV0dXJuIGNvbnQobm9Db21tYSA/IHRhcmdldE5vQ29tbWEgOiB0YXJnZXQpO1xuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgJiYgaXNUUykgcmV0dXJuIGNvbnQobWF5YmVUeXBlQXJncywgbm9Db21tYSA/IG1heWJlb3BlcmF0b3JOb0NvbW1hIDogbWF5YmVvcGVyYXRvckNvbW1hKVxuICAgICAgZWxzZSByZXR1cm4gcGFzcyhub0NvbW1hID8gZXhwcmVzc2lvbk5vQ29tbWEgOiBleHByZXNzaW9uKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHRhcmdldChfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yQ29tbWEpOyB9XG4gIH1cbiAgZnVuY3Rpb24gdGFyZ2V0Tm9Db21tYShfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcInRhcmdldFwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChtYXliZW9wZXJhdG9yTm9Db21tYSk7IH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpO1xuICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3JDb21tYSwgZXhwZWN0KFwiO1wiKSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7Y3gubWFya2VkID0gXCJwcm9wZXJ0eVwiOyByZXR1cm4gY29udCgpO31cbiAgfVxuICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJhc3luY1wiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICByZXR1cm4gY29udChvYmpwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCI7XG4gICAgICBpZiAodmFsdWUgPT0gXCJnZXRcIiB8fCB2YWx1ZSA9PSBcInNldFwiKSByZXR1cm4gY29udChnZXR0ZXJTZXR0ZXIpO1xuICAgICAgdmFyIG0gLy8gV29yayBhcm91bmQgZmF0LWFycm93LWRldGVjdGlvbiBjb21wbGljYXRpb24gZm9yIGRldGVjdGluZyB0eXBlc2NyaXB0IHR5cGVkIGFycm93IHBhcmFtc1xuICAgICAgaWYgKGlzVFMgJiYgY3guc3RhdGUuZmF0QXJyb3dBdCA9PSBjeC5zdHJlYW0uc3RhcnQgJiYgKG0gPSBjeC5zdHJlYW0ubWF0Y2goL15cXHMqOlxccyovLCBmYWxzZSkpKVxuICAgICAgICBjeC5zdGF0ZS5mYXRBcnJvd0F0ID0gY3guc3RyZWFtLnBvcyArIG1bMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgY3gubWFya2VkID0ganNvbmxkTW9kZSA/IFwicHJvcGVydHlcIiA6IChjeC5zdHlsZSArIFwiIHByb3BlcnR5XCIpO1xuICAgICAgcmV0dXJuIGNvbnQoYWZ0ZXJwcm9wKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJqc29ubGQta2V5d29yZFwiKSB7XG4gICAgICByZXR1cm4gY29udChhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAoaXNUUyAmJiBpc01vZGlmaWVyKHZhbHVlKSkge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KG9ianByb3ApXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiW1wiKSB7XG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIGFmdGVycHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHtcbiAgICAgIHJldHVybiBjb250KGV4cHJlc3Npb25Ob0NvbW1hLCBhZnRlcnByb3ApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCIqXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQob2JqcHJvcCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiOlwiKSB7XG4gICAgICByZXR1cm4gcGFzcyhhZnRlcnByb3ApXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldHRlclNldHRlcih0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gcGFzcyhhZnRlcnByb3ApO1xuICAgIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICByZXR1cm4gY29udChmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJwcm9wKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gcGFzcyhmdW5jdGlvbmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kLCBzZXApIHtcbiAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUsIHZhbHVlKSB7XG4gICAgICBpZiAoc2VwID8gc2VwLmluZGV4T2YodHlwZSkgPiAtMSA6IHR5cGUgPT0gXCIsXCIpIHtcbiAgICAgICAgdmFyIGxleCA9IGN4LnN0YXRlLmxleGljYWw7XG4gICAgICAgIGlmIChsZXguaW5mbyA9PSBcImNhbGxcIikgbGV4LnBvcyA9IChsZXgucG9zIHx8IDApICsgMTtcbiAgICAgICAgcmV0dXJuIGNvbnQoZnVuY3Rpb24odHlwZSwgdmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gcGFzcygpXG4gICAgICAgICAgcmV0dXJuIHBhc3Mod2hhdClcbiAgICAgICAgfSwgcHJvY2VlZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PSBlbmQgfHwgdmFsdWUgPT0gZW5kKSByZXR1cm4gY29udCgpO1xuICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KGVuZCkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlID09IGVuZCB8fCB2YWx1ZSA9PSBlbmQpIHJldHVybiBjb250KCk7XG4gICAgICByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGNvbnRDb21tYXNlcCh3aGF0LCBlbmQsIGluZm8pIHtcbiAgICBmb3IgKHZhciBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICByZXR1cm4gY29udChwdXNobGV4KGVuZCwgaW5mbyksIGNvbW1hc2VwKHdoYXQsIGVuZCksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gYmxvY2sodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwifVwiKSByZXR1cm4gY29udCgpO1xuICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spO1xuICB9XG4gIGZ1bmN0aW9uIG1heWJldHlwZSh0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTKSB7XG4gICAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpO1xuICAgICAgaWYgKHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udChtYXliZXR5cGUpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtYXliZXJldHR5cGUodHlwZSkge1xuICAgIGlmIChpc1RTICYmIHR5cGUgPT0gXCI6XCIpIHtcbiAgICAgIGlmIChjeC5zdHJlYW0ubWF0Y2goL15cXHMqXFx3K1xccytpc1xcYi8sIGZhbHNlKSkgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgaXNLVywgdHlwZWV4cHIpXG4gICAgICBlbHNlIHJldHVybiBjb250KHR5cGVleHByKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBpc0tXKF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiaXNcIikge1xuICAgICAgY3gubWFya2VkID0gXCJrZXl3b3JkXCJcbiAgICAgIHJldHVybiBjb250KClcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdHlwZWV4cHIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJrZXlvZlwiIHx8IHZhbHVlID09IFwidHlwZW9mXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiXG4gICAgICByZXR1cm4gY29udCh2YWx1ZSA9PSBcImtleW9mXCIgPyB0eXBlZXhwciA6IGV4cHJlc3Npb25Ob0NvbW1hKVxuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIgfHwgdmFsdWUgPT0gXCJ2b2lkXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwidHlwZVwiXG4gICAgICByZXR1cm4gY29udChhZnRlclR5cGUpXG4gICAgfVxuICAgIGlmICh0eXBlID09IFwic3RyaW5nXCIgfHwgdHlwZSA9PSBcIm51bWJlclwiIHx8IHR5cGUgPT0gXCJhdG9tXCIpIHJldHVybiBjb250KGFmdGVyVHlwZSk7XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJdXCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCJdXCIsIFwiLFwiKSwgcG9wbGV4LCBhZnRlclR5cGUpXG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCJ9XCIpLCBjb21tYXNlcCh0eXBlcHJvcCwgXCJ9XCIsIFwiLDtcIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChjb21tYXNlcCh0eXBlYXJnLCBcIilcIiksIG1heWJlUmV0dXJuVHlwZSlcbiAgICBpZiAodHlwZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQoY29tbWFzZXAodHlwZWV4cHIsIFwiPlwiKSwgdHlwZWV4cHIpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVSZXR1cm5UeXBlKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIj0+XCIpIHJldHVybiBjb250KHR5cGVleHByKVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVwcm9wKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiIHx8IGN4LnN0eWxlID09IFwia2V5d29yZFwiKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcInByb3BlcnR5XCJcbiAgICAgIHJldHVybiBjb250KHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCI/XCIpIHtcbiAgICAgIHJldHVybiBjb250KHR5cGVwcm9wKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcIjpcIikge1xuICAgICAgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiW1wiKSB7XG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIHR5cGVwcm9wKVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB0eXBlYXJnKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmIGN4LnN0cmVhbS5tYXRjaCgvXlxccypbPzpdLywgZmFsc2UpIHx8IHZhbHVlID09IFwiP1wiKSByZXR1cm4gY29udCh0eXBlYXJnKVxuICAgIGlmICh0eXBlID09IFwiOlwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgICByZXR1cm4gcGFzcyh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiBhZnRlclR5cGUodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCI8XCIpIHJldHVybiBjb250KHB1c2hsZXgoXCI+XCIpLCBjb21tYXNlcCh0eXBlZXhwciwgXCI+XCIpLCBwb3BsZXgsIGFmdGVyVHlwZSlcbiAgICBpZiAodmFsdWUgPT0gXCJ8XCIgfHwgdHlwZSA9PSBcIi5cIiB8fCB2YWx1ZSA9PSBcIiZcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIpXG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpIHJldHVybiBjb250KGV4cGVjdChcIl1cIiksIGFmdGVyVHlwZSlcbiAgICBpZiAodmFsdWUgPT0gXCJleHRlbmRzXCIgfHwgdmFsdWUgPT0gXCJpbXBsZW1lbnRzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KHR5cGVleHByKSB9XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVUeXBlQXJncyhfLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIjxcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIj5cIiksIGNvbW1hc2VwKHR5cGVleHByLCBcIj5cIiksIHBvcGxleCwgYWZ0ZXJUeXBlKVxuICB9XG4gIGZ1bmN0aW9uIHR5cGVwYXJhbSgpIHtcbiAgICByZXR1cm4gcGFzcyh0eXBlZXhwciwgbWF5YmVUeXBlRGVmYXVsdClcbiAgfVxuICBmdW5jdGlvbiBtYXliZVR5cGVEZWZhdWx0KF8sIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPVwiKSByZXR1cm4gY29udCh0eXBlZXhwcilcbiAgfVxuICBmdW5jdGlvbiB2YXJkZWYoXywgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJlbnVtXCIpIHtjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZW51bWRlZil9XG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbiwgdmFyZGVmQ29udCk7XG4gIH1cbiAgZnVuY3Rpb24gcGF0dGVybih0eXBlLCB2YWx1ZSkge1xuICAgIGlmIChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChwYXR0ZXJuKSB9XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7IHJlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTsgfVxuICAgIGlmICh0eXBlID09IFwic3ByZWFkXCIpIHJldHVybiBjb250KHBhdHRlcm4pO1xuICAgIGlmICh0eXBlID09IFwiW1wiKSByZXR1cm4gY29udENvbW1hc2VwKHBhdHRlcm4sIFwiXVwiKTtcbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnRDb21tYXNlcChwcm9wcGF0dGVybiwgXCJ9XCIpO1xuICB9XG4gIGZ1bmN0aW9uIHByb3BwYXR0ZXJuKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmICFjeC5zdHJlYW0ubWF0Y2goL15cXHMqOi8sIGZhbHNlKSkge1xuICAgICAgcmVnaXN0ZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGNvbnQobWF5YmVBc3NpZ24pO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIGN4Lm1hcmtlZCA9IFwicHJvcGVydHlcIjtcbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChwYXR0ZXJuKTtcbiAgICBpZiAodHlwZSA9PSBcIn1cIikgcmV0dXJuIHBhc3MoKTtcbiAgICByZXR1cm4gY29udChleHBlY3QoXCI6XCIpLCBwYXR0ZXJuLCBtYXliZUFzc2lnbik7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVBc3NpZ24oX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPVwiKSByZXR1cm4gY29udChleHByZXNzaW9uTm9Db21tYSk7XG4gIH1cbiAgZnVuY3Rpb24gdmFyZGVmQ29udCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KHZhcmRlZik7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVlbHNlKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJrZXl3b3JkIGJcIiAmJiB2YWx1ZSA9PSBcImVsc2VcIikgcmV0dXJuIGNvbnQocHVzaGxleChcImZvcm1cIiwgXCJlbHNlXCIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYyh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImF3YWl0XCIpIHJldHVybiBjb250KGZvcnNwZWMpO1xuICAgIGlmICh0eXBlID09IFwiKFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiKVwiKSwgZm9yc3BlYzEsIGV4cGVjdChcIilcIiksIHBvcGxleCk7XG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkge1xuICAgIGlmICh0eXBlID09IFwidmFyXCIpIHJldHVybiBjb250KHZhcmRlZiwgZXhwZWN0KFwiO1wiKSwgZm9yc3BlYzIpO1xuICAgIGlmICh0eXBlID09IFwiO1wiKSByZXR1cm4gY29udChmb3JzcGVjMik7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSByZXR1cm4gY29udChmb3JtYXliZWlub2YpO1xuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIGZvcnNwZWMyKTtcbiAgfVxuICBmdW5jdGlvbiBmb3JtYXliZWlub2YoX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiaW5cIiB8fCB2YWx1ZSA9PSBcIm9mXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9XG4gICAgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvckNvbW1hLCBmb3JzcGVjMik7XG4gIH1cbiAgZnVuY3Rpb24gZm9yc3BlYzIodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcIjtcIikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpO1xuICAgIGlmICh2YWx1ZSA9PSBcImluXCIgfHwgdmFsdWUgPT0gXCJvZlwiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChleHByZXNzaW9uKTsgfVxuICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIiksIGZvcnNwZWMzKTtcbiAgfVxuICBmdW5jdGlvbiBmb3JzcGVjMyh0eXBlKSB7XG4gICAgaWYgKHR5cGUgIT0gXCIpXCIpIGNvbnQoZXhwcmVzc2lvbik7XG4gIH1cbiAgZnVuY3Rpb24gZnVuY3Rpb25kZWYodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHtjeC5tYXJrZWQgPSBcImtleXdvcmRcIjsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO31cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9XG4gICAgaWYgKHR5cGUgPT0gXCIoXCIpIHJldHVybiBjb250KHB1c2hjb250ZXh0LCBwdXNobGV4KFwiKVwiKSwgY29tbWFzZXAoZnVuYXJnLCBcIilcIiksIHBvcGxleCwgbWF5YmVyZXR0eXBlLCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpO1xuICAgIGlmIChpc1RTICYmIHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleCwgZnVuY3Rpb25kZWYpXG4gIH1cbiAgZnVuY3Rpb24gZnVuYXJnKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSBjb250KGV4cHJlc3Npb24sIGZ1bmFyZylcbiAgICBpZiAodHlwZSA9PSBcInNwcmVhZFwiKSByZXR1cm4gY29udChmdW5hcmcpO1xuICAgIGlmIChpc1RTICYmIGlzTW9kaWZpZXIodmFsdWUpKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChmdW5hcmcpOyB9XG4gICAgcmV0dXJuIHBhc3MocGF0dGVybiwgbWF5YmV0eXBlLCBtYXliZUFzc2lnbik7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NFeHByZXNzaW9uKHR5cGUsIHZhbHVlKSB7XG4gICAgLy8gQ2xhc3MgZXhwcmVzc2lvbnMgbWF5IGhhdmUgYW4gb3B0aW9uYWwgbmFtZS5cbiAgICBpZiAodHlwZSA9PSBcInZhcmlhYmxlXCIpIHJldHVybiBjbGFzc05hbWUodHlwZSwgdmFsdWUpO1xuICAgIHJldHVybiBjbGFzc05hbWVBZnRlcih0eXBlLCB2YWx1ZSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NOYW1lKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChjbGFzc05hbWVBZnRlcik7fVxuICB9XG4gIGZ1bmN0aW9uIGNsYXNzTmFtZUFmdGVyKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IFwiPFwiKSByZXR1cm4gY29udChwdXNobGV4KFwiPlwiKSwgY29tbWFzZXAodHlwZXBhcmFtLCBcIj5cIiksIHBvcGxleCwgY2xhc3NOYW1lQWZ0ZXIpXG4gICAgaWYgKHZhbHVlID09IFwiZXh0ZW5kc1wiIHx8IHZhbHVlID09IFwiaW1wbGVtZW50c1wiIHx8IChpc1RTICYmIHR5cGUgPT0gXCIsXCIpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gXCJpbXBsZW1lbnRzXCIpIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQoaXNUUyA/IHR5cGVleHByIDogZXhwcmVzc2lvbiwgY2xhc3NOYW1lQWZ0ZXIpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSBcIntcIikgcmV0dXJuIGNvbnQocHVzaGxleChcIn1cIiksIGNsYXNzQm9keSwgcG9wbGV4KTtcbiAgfVxuICBmdW5jdGlvbiBjbGFzc0JvZHkodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZSA9PSBcImFzeW5jXCIgfHxcbiAgICAgICAgKHR5cGUgPT0gXCJ2YXJpYWJsZVwiICYmXG4gICAgICAgICAodmFsdWUgPT0gXCJzdGF0aWNcIiB8fCB2YWx1ZSA9PSBcImdldFwiIHx8IHZhbHVlID09IFwic2V0XCIgfHwgKGlzVFMgJiYgaXNNb2RpZmllcih2YWx1ZSkpKSAmJlxuICAgICAgICAgY3guc3RyZWFtLm1hdGNoKC9eXFxzK1tcXHckXFx4YTEtXFx1ZmZmZl0vLCBmYWxzZSkpKSB7XG4gICAgICBjeC5tYXJrZWQgPSBcImtleXdvcmRcIjtcbiAgICAgIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIiB8fCBjeC5zdHlsZSA9PSBcImtleXdvcmRcIikge1xuICAgICAgY3gubWFya2VkID0gXCJwcm9wZXJ0eVwiO1xuICAgICAgcmV0dXJuIGNvbnQoaXNUUyA/IGNsYXNzZmllbGQgOiBmdW5jdGlvbmRlZiwgY2xhc3NCb2R5KTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCJbXCIpXG4gICAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBtYXliZXR5cGUsIGV4cGVjdChcIl1cIiksIGlzVFMgPyBjbGFzc2ZpZWxkIDogZnVuY3Rpb25kZWYsIGNsYXNzQm9keSlcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHtcbiAgICAgIGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiO1xuICAgICAgcmV0dXJuIGNvbnQoY2xhc3NCb2R5KTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gXCI7XCIpIHJldHVybiBjb250KGNsYXNzQm9keSk7XG4gICAgaWYgKHR5cGUgPT0gXCJ9XCIpIHJldHVybiBjb250KCk7XG4gICAgaWYgKHZhbHVlID09IFwiQFwiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBjbGFzc0JvZHkpXG4gIH1cbiAgZnVuY3Rpb24gY2xhc3NmaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcIj9cIikgcmV0dXJuIGNvbnQoY2xhc3NmaWVsZClcbiAgICBpZiAodHlwZSA9PSBcIjpcIikgcmV0dXJuIGNvbnQodHlwZWV4cHIsIG1heWJlQXNzaWduKVxuICAgIGlmICh2YWx1ZSA9PSBcIj1cIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbk5vQ29tbWEpXG4gICAgcmV0dXJuIHBhc3MoZnVuY3Rpb25kZWYpXG4gIH1cbiAgZnVuY3Rpb24gYWZ0ZXJFeHBvcnQodHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCIqXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7IH1cbiAgICBpZiAodmFsdWUgPT0gXCJkZWZhdWx0XCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdChcIjtcIikpOyB9XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250KGNvbW1hc2VwKGV4cG9ydEZpZWxkLCBcIn1cIiksIG1heWJlRnJvbSwgZXhwZWN0KFwiO1wiKSk7XG4gICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50KTtcbiAgfVxuICBmdW5jdGlvbiBleHBvcnRGaWVsZCh0eXBlLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBcImFzXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cGVjdChcInZhcmlhYmxlXCIpKTsgfVxuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbk5vQ29tbWEsIGV4cG9ydEZpZWxkKTtcbiAgfVxuICBmdW5jdGlvbiBhZnRlckltcG9ydCh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnQoKTtcbiAgICBpZiAodHlwZSA9PSBcIihcIikgcmV0dXJuIHBhc3MoZXhwcmVzc2lvbik7XG4gICAgcmV0dXJuIHBhc3MoaW1wb3J0U3BlYywgbWF5YmVNb3JlSW1wb3J0cywgbWF5YmVGcm9tKTtcbiAgfVxuICBmdW5jdGlvbiBpbXBvcnRTcGVjKHR5cGUsIHZhbHVlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCJ7XCIpIHJldHVybiBjb250Q29tbWFzZXAoaW1wb3J0U3BlYywgXCJ9XCIpO1xuICAgIGlmICh0eXBlID09IFwidmFyaWFibGVcIikgcmVnaXN0ZXIodmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PSBcIipcIikgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7XG4gICAgcmV0dXJuIGNvbnQobWF5YmVBcyk7XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVNb3JlSW1wb3J0cyh0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT0gXCIsXCIpIHJldHVybiBjb250KGltcG9ydFNwZWMsIG1heWJlTW9yZUltcG9ydHMpXG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVBcyhfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJhc1wiKSB7IGN4Lm1hcmtlZCA9IFwia2V5d29yZFwiOyByZXR1cm4gY29udChpbXBvcnRTcGVjKTsgfVxuICB9XG4gIGZ1bmN0aW9uIG1heWJlRnJvbShfdHlwZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gXCJmcm9tXCIpIHsgY3gubWFya2VkID0gXCJrZXl3b3JkXCI7IHJldHVybiBjb250KGV4cHJlc3Npb24pOyB9XG4gIH1cbiAgZnVuY3Rpb24gYXJyYXlMaXRlcmFsKHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PSBcIl1cIikgcmV0dXJuIGNvbnQoKTtcbiAgICByZXR1cm4gcGFzcyhjb21tYXNlcChleHByZXNzaW9uTm9Db21tYSwgXCJdXCIpKTtcbiAgfVxuICBmdW5jdGlvbiBlbnVtZGVmKCkge1xuICAgIHJldHVybiBwYXNzKHB1c2hsZXgoXCJmb3JtXCIpLCBwYXR0ZXJuLCBleHBlY3QoXCJ7XCIpLCBwdXNobGV4KFwifVwiKSwgY29tbWFzZXAoZW51bW1lbWJlciwgXCJ9XCIpLCBwb3BsZXgsIHBvcGxleClcbiAgfVxuICBmdW5jdGlvbiBlbnVtbWVtYmVyKCkge1xuICAgIHJldHVybiBwYXNzKHBhdHRlcm4sIG1heWJlQXNzaWduKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiIHx8XG4gICAgICBpc09wZXJhdG9yQ2hhci50ZXN0KHRleHRBZnRlci5jaGFyQXQoMCkpIHx8XG4gICAgICAvWywuXS8udGVzdCh0ZXh0QWZ0ZXIuY2hhckF0KDApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cHJlc3Npb25BbGxvd2VkKHN0cmVhbSwgc3RhdGUsIGJhY2tVcCkge1xuICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkJhc2UgJiZcbiAgICAgIC9eKD86b3BlcmF0b3J8c29mfGtleXdvcmQgW2JjZF18Y2FzZXxuZXd8ZXhwb3J0fGRlZmF1bHR8c3ByZWFkfFtcXFt7fVxcKCw7Ol18PT4pJC8udGVzdChzdGF0ZS5sYXN0VHlwZSkgfHxcbiAgICAgIChzdGF0ZS5sYXN0VHlwZSA9PSBcInF1YXNpXCIgJiYgL1xce1xccyokLy50ZXN0KHN0cmVhbS5zdHJpbmcuc2xpY2UoMCwgc3RyZWFtLnBvcyAtIChiYWNrVXAgfHwgMCkpKSlcbiAgfVxuXG4gIC8vIEludGVyZmFjZVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikge1xuICAgICAgdmFyIHN0YXRlID0ge1xuICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLFxuICAgICAgICBsYXN0VHlwZTogXCJzb2ZcIixcbiAgICAgICAgY2M6IFtdLFxuICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgXCJibG9ja1wiLCBmYWxzZSksXG4gICAgICAgIGxvY2FsVmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyxcbiAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiBuZXcgQ29udGV4dChudWxsLCBudWxsLCBmYWxzZSksXG4gICAgICAgIGluZGVudGVkOiBiYXNlY29sdW1uIHx8IDBcbiAgICAgIH07XG4gICAgICBpZiAocGFyc2VyQ29uZmlnLmdsb2JhbFZhcnMgJiYgdHlwZW9mIHBhcnNlckNvbmZpZy5nbG9iYWxWYXJzID09IFwib2JqZWN0XCIpXG4gICAgICAgIHN0YXRlLmdsb2JhbFZhcnMgPSBwYXJzZXJDb25maWcuZ2xvYmFsVmFycztcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9LFxuXG4gICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHtcbiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KFwiYWxpZ25cIikpXG4gICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpO1xuICAgICAgICBmaW5kRmF0QXJyb3coc3RyZWFtLCBzdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5Db21tZW50ICYmIHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpO1xuICAgICAgaWYgKHR5cGUgPT0gXCJjb21tZW50XCIpIHJldHVybiBzdHlsZTtcbiAgICAgIHN0YXRlLmxhc3RUeXBlID0gdHlwZSA9PSBcIm9wZXJhdG9yXCIgJiYgKGNvbnRlbnQgPT0gXCIrK1wiIHx8IGNvbnRlbnQgPT0gXCItLVwiKSA/IFwiaW5jZGVjXCIgOiB0eXBlO1xuICAgICAgcmV0dXJuIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pO1xuICAgIH0sXG5cbiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSA9PSB0b2tlbkNvbW1lbnQpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDtcbiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsIHRvcFxuICAgICAgLy8gS2x1ZGdlIHRvIHByZXZlbnQgJ21heWJlbHNlJyBmcm9tIGJsb2NraW5nIGxleGljYWwgc2NvcGUgcG9wc1xuICAgICAgaWYgKCEvXlxccyplbHNlXFxiLy50ZXN0KHRleHRBZnRlcikpIGZvciAodmFyIGkgPSBzdGF0ZS5jYy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgYyA9IHN0YXRlLmNjW2ldO1xuICAgICAgICBpZiAoYyA9PSBwb3BsZXgpIGxleGljYWwgPSBsZXhpY2FsLnByZXY7XG4gICAgICAgIGVsc2UgaWYgKGMgIT0gbWF5YmVlbHNlKSBicmVhaztcbiAgICAgIH1cbiAgICAgIHdoaWxlICgobGV4aWNhbC50eXBlID09IFwic3RhdFwiIHx8IGxleGljYWwudHlwZSA9PSBcImZvcm1cIikgJiZcbiAgICAgICAgICAgICAoZmlyc3RDaGFyID09IFwifVwiIHx8ICgodG9wID0gc3RhdGUuY2Nbc3RhdGUuY2MubGVuZ3RoIC0gMV0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3AgPT0gbWF5YmVvcGVyYXRvckNvbW1hIHx8IHRvcCA9PSBtYXliZW9wZXJhdG9yTm9Db21tYSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIS9eWyxcXC49K1xcLSo6P1tcXChdLy50ZXN0KHRleHRBZnRlcikpKSlcbiAgICAgICAgbGV4aWNhbCA9IGxleGljYWwucHJldjtcbiAgICAgIGlmIChzdGF0ZW1lbnRJbmRlbnQgJiYgbGV4aWNhbC50eXBlID09IFwiKVwiICYmIGxleGljYWwucHJldi50eXBlID09IFwic3RhdFwiKVxuICAgICAgICBsZXhpY2FsID0gbGV4aWNhbC5wcmV2O1xuICAgICAgdmFyIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTtcblxuICAgICAgaWYgKHR5cGUgPT0gXCJ2YXJkZWZcIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoc3RhdGUubGFzdFR5cGUgPT0gXCJvcGVyYXRvclwiIHx8IHN0YXRlLmxhc3RUeXBlID09IFwiLFwiID8gbGV4aWNhbC5pbmZvLmxlbmd0aCArIDEgOiAwKTtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIgJiYgZmlyc3RDaGFyID09IFwie1wiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJmb3JtXCIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDtcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJzdGF0XCIpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGlzQ29udGludWVkU3RhdGVtZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpID8gc3RhdGVtZW50SW5kZW50IHx8IGluZGVudFVuaXQgOiAwKTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuaW5mbyA9PSBcInN3aXRjaFwiICYmICFjbG9zaW5nICYmIHBhcnNlckNvbmZpZy5kb3VibGVJbmRlbnRTd2l0Y2ggIT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxcYi8udGVzdCh0ZXh0QWZ0ZXIpID8gaW5kZW50VW5pdCA6IDIgKiBpbmRlbnRVbml0KTtcbiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpO1xuICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpO1xuICAgIH0sXG5cbiAgICBlbGVjdHJpY0lucHV0OiAvXlxccyooPzpjYXNlIC4qPzp8ZGVmYXVsdDp8XFx7fFxcfSkkLyxcbiAgICBibG9ja0NvbW1lbnRTdGFydDoganNvbk1vZGUgPyBudWxsIDogXCIvKlwiLFxuICAgIGJsb2NrQ29tbWVudEVuZDoganNvbk1vZGUgPyBudWxsIDogXCIqL1wiLFxuICAgIGJsb2NrQ29tbWVudENvbnRpbnVlOiBqc29uTW9kZSA/IG51bGwgOiBcIiAqIFwiLFxuICAgIGxpbmVDb21tZW50OiBqc29uTW9kZSA/IG51bGwgOiBcIi8vXCIsXG4gICAgZm9sZDogXCJicmFjZVwiLFxuICAgIGNsb3NlQnJhY2tldHM6IFwiKClbXXt9JydcXFwiXFxcImBgXCIsXG5cbiAgICBoZWxwZXJUeXBlOiBqc29uTW9kZSA/IFwianNvblwiIDogXCJqYXZhc2NyaXB0XCIsXG4gICAganNvbmxkTW9kZToganNvbmxkTW9kZSxcbiAgICBqc29uTW9kZToganNvbk1vZGUsXG5cbiAgICBleHByZXNzaW9uQWxsb3dlZDogZXhwcmVzc2lvbkFsbG93ZWQsXG5cbiAgICBza2lwRXhwcmVzc2lvbjogZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgIHZhciB0b3AgPSBzdGF0ZS5jY1tzdGF0ZS5jYy5sZW5ndGggLSAxXVxuICAgICAgaWYgKHRvcCA9PSBleHByZXNzaW9uIHx8IHRvcCA9PSBleHByZXNzaW9uTm9Db21tYSkgc3RhdGUuY2MucG9wKClcbiAgICB9XG4gIH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcIndvcmRDaGFyc1wiLCBcImphdmFzY3JpcHRcIiwgL1tcXHckXS8pO1xuXG5Db2RlTWlycm9yLmRlZmluZU1JTUUoXCJ0ZXh0L2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwidGV4dC9lY21hc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0XCIsIFwiamF2YXNjcmlwdFwiKTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHRcIiwgXCJqYXZhc2NyaXB0XCIpO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL3gtanNvblwiLCB7bmFtZTogXCJqYXZhc2NyaXB0XCIsIGpzb246IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcImFwcGxpY2F0aW9uL2xkK2pzb25cIiwge25hbWU6IFwiamF2YXNjcmlwdFwiLCBqc29ubGQ6IHRydWV9KTtcbkNvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuQ29kZU1pcnJvci5kZWZpbmVNSU1FKFwiYXBwbGljYXRpb24vdHlwZXNjcmlwdFwiLCB7IG5hbWU6IFwiamF2YXNjcmlwdFwiLCB0eXBlc2NyaXB0OiB0cnVlIH0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbi8qKlxuICogVGFnLWNsb3NlciBleHRlbnNpb24gZm9yIENvZGVNaXJyb3IuXG4gKlxuICogVGhpcyBleHRlbnNpb24gYWRkcyBhbiBcImF1dG9DbG9zZVRhZ3NcIiBvcHRpb24gdGhhdCBjYW4gYmUgc2V0IHRvXG4gKiBlaXRoZXIgdHJ1ZSB0byBnZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIG9yIGFuIG9iamVjdCB0byBmdXJ0aGVyXG4gKiBjb25maWd1cmUgaXRzIGJlaGF2aW9yLlxuICpcbiAqIFRoZXNlIGFyZSBzdXBwb3J0ZWQgb3B0aW9uczpcbiAqXG4gKiBgd2hlbkNsb3NpbmdgIChkZWZhdWx0IHRydWUpXG4gKiAgIFdoZXRoZXIgdG8gYXV0b2Nsb3NlIHdoZW4gdGhlICcvJyBvZiBhIGNsb3NpbmcgdGFnIGlzIHR5cGVkLlxuICogYHdoZW5PcGVuaW5nYCAoZGVmYXVsdCB0cnVlKVxuICogICBXaGV0aGVyIHRvIGF1dG9jbG9zZSB0aGUgdGFnIHdoZW4gdGhlIGZpbmFsICc+JyBvZiBhbiBvcGVuaW5nXG4gKiAgIHRhZyBpcyB0eXBlZC5cbiAqIGBkb250Q2xvc2VUYWdzYCAoZGVmYXVsdCBpcyBlbXB0eSB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCBub3QgYmUgYXV0b2Nsb3NlZC5cbiAqIGBpbmRlbnRUYWdzYCAoZGVmYXVsdCBpcyBibG9jayB0YWdzIGZvciBIVE1MLCBub25lIGZvciBYTUwpXG4gKiAgIEFuIGFycmF5IG9mIHRhZyBuYW1lcyB0aGF0IHNob3VsZCwgd2hlbiBvcGVuZWQsIGNhdXNlIGFcbiAqICAgYmxhbmsgbGluZSB0byBiZSBhZGRlZCBpbnNpZGUgdGhlIHRhZywgYW5kIHRoZSBibGFuayBsaW5lIGFuZFxuICogICBjbG9zaW5nIGxpbmUgdG8gYmUgaW5kZW50ZWQuXG4gKlxuICogU2VlIGRlbW9zL2Nsb3NldGFnLmh0bWwgZm9yIGEgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi4vZm9sZC94bWwtZm9sZFwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4uL2ZvbGQveG1sLWZvbGRcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwiYXV0b0Nsb3NlVGFnc1wiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCAhPSBDb2RlTWlycm9yLkluaXQgJiYgb2xkKVxuICAgICAgY20ucmVtb3ZlS2V5TWFwKFwiYXV0b0Nsb3NlVGFnc1wiKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIHZhciBtYXAgPSB7bmFtZTogXCJhdXRvQ2xvc2VUYWdzXCJ9O1xuICAgIGlmICh0eXBlb2YgdmFsICE9IFwib2JqZWN0XCIgfHwgdmFsLndoZW5DbG9zaW5nKVxuICAgICAgbWFwW1wiJy8nXCJdID0gZnVuY3Rpb24oY20pIHsgcmV0dXJuIGF1dG9DbG9zZVNsYXNoKGNtKTsgfTtcbiAgICBpZiAodHlwZW9mIHZhbCAhPSBcIm9iamVjdFwiIHx8IHZhbC53aGVuT3BlbmluZylcbiAgICAgIG1hcFtcIic+J1wiXSA9IGZ1bmN0aW9uKGNtKSB7IHJldHVybiBhdXRvQ2xvc2VHVChjbSk7IH07XG4gICAgY20uYWRkS2V5TWFwKG1hcCk7XG4gIH0pO1xuXG4gIHZhciBodG1sRG9udENsb3NlID0gW1wiYXJlYVwiLCBcImJhc2VcIiwgXCJiclwiLCBcImNvbFwiLCBcImNvbW1hbmRcIiwgXCJlbWJlZFwiLCBcImhyXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJrZXlnZW5cIiwgXCJsaW5rXCIsIFwibWV0YVwiLCBcInBhcmFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgIFwic291cmNlXCIsIFwidHJhY2tcIiwgXCJ3YnJcIl07XG4gIHZhciBodG1sSW5kZW50ID0gW1wiYXBwbGV0XCIsIFwiYmxvY2txdW90ZVwiLCBcImJvZHlcIiwgXCJidXR0b25cIiwgXCJkaXZcIiwgXCJkbFwiLCBcImZpZWxkc2V0XCIsIFwiZm9ybVwiLCBcImZyYW1lc2V0XCIsIFwiaDFcIiwgXCJoMlwiLCBcImgzXCIsIFwiaDRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJoNVwiLCBcImg2XCIsIFwiaGVhZFwiLCBcImh0bWxcIiwgXCJpZnJhbWVcIiwgXCJsYXllclwiLCBcImxlZ2VuZFwiLCBcIm9iamVjdFwiLCBcIm9sXCIsIFwicFwiLCBcInNlbGVjdFwiLCBcInRhYmxlXCIsIFwidWxcIl07XG5cbiAgZnVuY3Rpb24gYXV0b0Nsb3NlR1QoY20pIHtcbiAgICBpZiAoY20uZ2V0T3B0aW9uKFwiZGlzYWJsZUlucHV0XCIpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICB2YXIgb3B0ID0gY20uZ2V0T3B0aW9uKFwiYXV0b0Nsb3NlVGFnc1wiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBwb3MgPSByYW5nZXNbaV0uaGVhZCwgdG9rID0gY20uZ2V0VG9rZW5BdChwb3MpO1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoY20uZ2V0TW9kZSgpLCB0b2suc3RhdGUpLCBzdGF0ZSA9IGlubmVyLnN0YXRlO1xuICAgICAgaWYgKGlubmVyLm1vZGUubmFtZSAhPSBcInhtbFwiIHx8ICFzdGF0ZS50YWdOYW1lKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgICB2YXIgaHRtbCA9IGlubmVyLm1vZGUuY29uZmlndXJhdGlvbiA9PSBcImh0bWxcIjtcbiAgICAgIHZhciBkb250Q2xvc2VUYWdzID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udENsb3NlVGFncykgfHwgKGh0bWwgJiYgaHRtbERvbnRDbG9zZSk7XG4gICAgICB2YXIgaW5kZW50VGFncyA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmluZGVudFRhZ3MpIHx8IChodG1sICYmIGh0bWxJbmRlbnQpO1xuXG4gICAgICB2YXIgdGFnTmFtZSA9IHN0YXRlLnRhZ05hbWU7XG4gICAgICBpZiAodG9rLmVuZCA+IHBvcy5jaCkgdGFnTmFtZSA9IHRhZ05hbWUuc2xpY2UoMCwgdGFnTmFtZS5sZW5ndGggLSB0b2suZW5kICsgcG9zLmNoKTtcbiAgICAgIHZhciBsb3dlclRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBEb24ndCBwcm9jZXNzIHRoZSAnPicgYXQgdGhlIGVuZCBvZiBhbiBlbmQtdGFnIG9yIHNlbGYtY2xvc2luZyB0YWdcbiAgICAgIGlmICghdGFnTmFtZSB8fFxuICAgICAgICAgIHRvay50eXBlID09IFwic3RyaW5nXCIgJiYgKHRvay5lbmQgIT0gcG9zLmNoIHx8ICEvW1xcXCJcXCddLy50ZXN0KHRvay5zdHJpbmcuY2hhckF0KHRvay5zdHJpbmcubGVuZ3RoIC0gMSkpIHx8IHRvay5zdHJpbmcubGVuZ3RoID09IDEpIHx8XG4gICAgICAgICAgdG9rLnR5cGUgPT0gXCJ0YWdcIiAmJiBzdGF0ZS50eXBlID09IFwiY2xvc2VUYWdcIiB8fFxuICAgICAgICAgIHRvay5zdHJpbmcuaW5kZXhPZihcIi9cIikgPT0gKHRvay5zdHJpbmcubGVuZ3RoIC0gMSkgfHwgLy8gbWF0Y2ggc29tZXRoaW5nIGxpa2UgPHNvbWVUYWdOYW1lIC8+XG4gICAgICAgICAgZG9udENsb3NlVGFncyAmJiBpbmRleE9mKGRvbnRDbG9zZVRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMSB8fFxuICAgICAgICAgIGNsb3NpbmdUYWdFeGlzdHMoY20sIHRhZ05hbWUsIHBvcywgc3RhdGUsIHRydWUpKVxuICAgICAgICByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuXG4gICAgICB2YXIgaW5kZW50ID0gaW5kZW50VGFncyAmJiBpbmRleE9mKGluZGVudFRhZ3MsIGxvd2VyVGFnTmFtZSkgPiAtMTtcbiAgICAgIHJlcGxhY2VtZW50c1tpXSA9IHtpbmRlbnQ6IGluZGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcIj5cIiArIChpbmRlbnQgPyBcIlxcblxcblwiIDogXCJcIikgKyBcIjwvXCIgKyB0YWdOYW1lICsgXCI+XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbmV3UG9zOiBpbmRlbnQgPyBDb2RlTWlycm9yLlBvcyhwb3MubGluZSArIDEsIDApIDogQ29kZU1pcnJvci5Qb3MocG9zLmxpbmUsIHBvcy5jaCArIDEpfTtcbiAgICB9XG5cbiAgICB2YXIgZG9udEluZGVudE9uQXV0b0Nsb3NlID0gKHR5cGVvZiBvcHQgPT0gXCJvYmplY3RcIiAmJiBvcHQuZG9udEluZGVudE9uQXV0b0Nsb3NlKTtcbiAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgaW5mbyA9IHJlcGxhY2VtZW50c1tpXTtcbiAgICAgIGNtLnJlcGxhY2VSYW5nZShpbmZvLnRleHQsIHJhbmdlc1tpXS5oZWFkLCByYW5nZXNbaV0uYW5jaG9yLCBcIitpbnNlcnRcIik7XG4gICAgICB2YXIgc2VsID0gY20ubGlzdFNlbGVjdGlvbnMoKS5zbGljZSgwKTtcbiAgICAgIHNlbFtpXSA9IHtoZWFkOiBpbmZvLm5ld1BvcywgYW5jaG9yOiBpbmZvLm5ld1Bvc307XG4gICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbCk7XG4gICAgICBpZiAoIWRvbnRJbmRlbnRPbkF1dG9DbG9zZSAmJiBpbmZvLmluZGVudCkge1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUsIG51bGwsIHRydWUpO1xuICAgICAgICBjbS5pbmRlbnRMaW5lKGluZm8ubmV3UG9zLmxpbmUgKyAxLCBudWxsLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvQ2xvc2VDdXJyZW50KGNtLCB0eXBpbmdTbGFzaCkge1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpLCByZXBsYWNlbWVudHMgPSBbXTtcbiAgICB2YXIgaGVhZCA9IHR5cGluZ1NsYXNoID8gXCIvXCIgOiBcIjwvXCI7XG4gICAgdmFyIG9wdCA9IGNtLmdldE9wdGlvbihcImF1dG9DbG9zZVRhZ3NcIik7XG4gICAgdmFyIGRvbnRJbmRlbnRPbkF1dG9DbG9zZSA9ICh0eXBlb2Ygb3B0ID09IFwib2JqZWN0XCIgJiYgb3B0LmRvbnRJbmRlbnRPblNsYXNoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIHZhciBwb3MgPSByYW5nZXNbaV0uaGVhZCwgdG9rID0gY20uZ2V0VG9rZW5BdChwb3MpO1xuICAgICAgdmFyIGlubmVyID0gQ29kZU1pcnJvci5pbm5lck1vZGUoY20uZ2V0TW9kZSgpLCB0b2suc3RhdGUpLCBzdGF0ZSA9IGlubmVyLnN0YXRlO1xuICAgICAgaWYgKHR5cGluZ1NsYXNoICYmICh0b2sudHlwZSA9PSBcInN0cmluZ1wiIHx8IHRvay5zdHJpbmcuY2hhckF0KDApICE9IFwiPFwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvay5zdGFydCAhPSBwb3MuY2ggLSAxKSlcbiAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIC8vIEtsdWRnZSB0byBnZXQgYXJvdW5kIHRoZSBmYWN0IHRoYXQgd2UgYXJlIG5vdCBpbiBYTUwgbW9kZVxuICAgICAgLy8gd2hlbiBjb21wbGV0aW5nIGluIEpTL0NTUyBzbmlwcGV0IGluIGh0bWxtaXhlZCBtb2RlLiBEb2VzIG5vdFxuICAgICAgLy8gd29yayBmb3Igb3RoZXIgWE1MIGVtYmVkZGVkIGxhbmd1YWdlcyAodGhlcmUgaXMgbm8gZ2VuZXJhbFxuICAgICAgLy8gd2F5IHRvIGdvIGZyb20gYSBtaXhlZCBtb2RlIHRvIGl0cyBjdXJyZW50IFhNTCBzdGF0ZSkuXG4gICAgICB2YXIgcmVwbGFjZW1lbnQ7XG4gICAgICBpZiAoaW5uZXIubW9kZS5uYW1lICE9IFwieG1sXCIpIHtcbiAgICAgICAgaWYgKGNtLmdldE1vZGUoKS5uYW1lID09IFwiaHRtbG1peGVkXCIgJiYgaW5uZXIubW9kZS5uYW1lID09IFwiamF2YXNjcmlwdFwiKVxuICAgICAgICAgIHJlcGxhY2VtZW50ID0gaGVhZCArIFwic2NyaXB0XCI7XG4gICAgICAgIGVsc2UgaWYgKGNtLmdldE1vZGUoKS5uYW1lID09IFwiaHRtbG1peGVkXCIgJiYgaW5uZXIubW9kZS5uYW1lID09IFwiY3NzXCIpXG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBoZWFkICsgXCJzdHlsZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghc3RhdGUuY29udGV4dCB8fCAhc3RhdGUuY29udGV4dC50YWdOYW1lIHx8XG4gICAgICAgICAgICBjbG9zaW5nVGFnRXhpc3RzKGNtLCBzdGF0ZS5jb250ZXh0LnRhZ05hbWUsIHBvcywgc3RhdGUpKVxuICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICAgIHJlcGxhY2VtZW50ID0gaGVhZCArIHN0YXRlLmNvbnRleHQudGFnTmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChjbS5nZXRMaW5lKHBvcy5saW5lKS5jaGFyQXQodG9rLmVuZCkgIT0gXCI+XCIpIHJlcGxhY2VtZW50ICs9IFwiPlwiO1xuICAgICAgcmVwbGFjZW1lbnRzW2ldID0gcmVwbGFjZW1lbnQ7XG4gICAgfVxuICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHJlcGxhY2VtZW50cyk7XG4gICAgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTtcbiAgICBpZiAoIWRvbnRJbmRlbnRPbkF1dG9DbG9zZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIGlmIChpID09IHJhbmdlcy5sZW5ndGggLSAxIHx8IHJhbmdlc1tpXS5oZWFkLmxpbmUgPCByYW5nZXNbaSArIDFdLmhlYWQubGluZSlcbiAgICAgICAgICAgICAgICBjbS5pbmRlbnRMaW5lKHJhbmdlc1tpXS5oZWFkLmxpbmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF1dG9DbG9zZVNsYXNoKGNtKSB7XG4gICAgaWYgKGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICByZXR1cm4gYXV0b0Nsb3NlQ3VycmVudChjbSwgdHJ1ZSk7XG4gIH1cblxuICBDb2RlTWlycm9yLmNvbW1hbmRzLmNsb3NlVGFnID0gZnVuY3Rpb24oY20pIHsgcmV0dXJuIGF1dG9DbG9zZUN1cnJlbnQoY20pOyB9O1xuXG4gIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7XG4gICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbHQpO1xuICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyArK2kpXG4gICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIElmIHhtbC1mb2xkIGlzIGxvYWRlZCwgd2UgdXNlIGl0cyBmdW5jdGlvbmFsaXR5IHRvIHRyeSBhbmQgdmVyaWZ5XG4gIC8vIHdoZXRoZXIgYSBnaXZlbiB0YWcgaXMgYWN0dWFsbHkgdW5jbG9zZWQuXG4gIGZ1bmN0aW9uIGNsb3NpbmdUYWdFeGlzdHMoY20sIHRhZ05hbWUsIHBvcywgc3RhdGUsIG5ld1RhZykge1xuICAgIGlmICghQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbihjbS5sYXN0TGluZSgpICsgMSwgcG9zLmxpbmUgKyA1MDApO1xuICAgIHZhciBuZXh0Q2xvc2UgPSBDb2RlTWlycm9yLnNjYW5Gb3JDbG9zaW5nVGFnKGNtLCBwb3MsIG51bGwsIGVuZCk7XG4gICAgaWYgKCFuZXh0Q2xvc2UgfHwgbmV4dENsb3NlLnRhZyAhPSB0YWdOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGN4ID0gc3RhdGUuY29udGV4dDtcbiAgICAvLyBJZiB0aGUgaW1tZWRpYXRlIHdyYXBwaW5nIGNvbnRleHQgY29udGFpbnMgb25DeCBpbnN0YW5jZXMgb2ZcbiAgICAvLyB0aGUgc2FtZSB0YWcsIGEgY2xvc2luZyB0YWcgb25seSBleGlzdHMgaWYgdGhlcmUgYXJlIGF0IGxlYXN0XG4gICAgLy8gdGhhdCBtYW55IGNsb3NpbmcgdGFncyBvZiB0aGF0IHR5cGUgZm9sbG93aW5nLlxuICAgIGZvciAodmFyIG9uQ3ggPSBuZXdUYWcgPyAxIDogMDsgY3ggJiYgY3gudGFnTmFtZSA9PSB0YWdOYW1lOyBjeCA9IGN4LnByZXYpICsrb25DeDtcbiAgICBwb3MgPSBuZXh0Q2xvc2UudG87XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBvbkN4OyBpKyspIHtcbiAgICAgIHZhciBuZXh0ID0gQ29kZU1pcnJvci5zY2FuRm9yQ2xvc2luZ1RhZyhjbSwgcG9zLCBudWxsLCBlbmQpO1xuICAgICAgaWYgKCFuZXh0IHx8IG5leHQudGFnICE9IHRhZ05hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgIHBvcyA9IG5leHQudG87XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBsaXN0UkUgPSAvXihcXHMqKSg+Wz4gXSp8WyorLV0gXFxbW3ggXVxcXVxcc3xbKistXVxcc3woXFxkKykoWy4pXSkpKFxccyopLyxcbiAgICAgIGVtcHR5TGlzdFJFID0gL14oXFxzKikoPls+IF0qfFsqKy1dIFxcW1t4IF1cXF18WyorLV18KFxcZCspWy4pXSkoXFxzKikkLyxcbiAgICAgIHVub3JkZXJlZExpc3RSRSA9IC9bKistXVxccy87XG5cbiAgQ29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVNYXJrZG93bkxpc3QgPSBmdW5jdGlvbihjbSkge1xuICAgIGlmIChjbS5nZXRPcHRpb24oXCJkaXNhYmxlSW5wdXRcIikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHJlcGxhY2VtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmhlYWQ7XG4gICAgICB2YXIgZW9sU3RhdGUgPSBjbS5nZXRTdGF0ZUFmdGVyKHBvcy5saW5lKTtcbiAgICAgIHZhciBpbkxpc3QgPSBlb2xTdGF0ZS5saXN0ICE9PSBmYWxzZTtcbiAgICAgIHZhciBpblF1b3RlID0gZW9sU3RhdGUucXVvdGUgIT09IDA7XG5cbiAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShwb3MubGluZSksIG1hdGNoID0gbGlzdFJFLmV4ZWMobGluZSk7XG4gICAgICB2YXIgY3Vyc29yQmVmb3JlQnVsbGV0ID0gL15cXHMqJC8udGVzdChsaW5lLnNsaWNlKDAsIHBvcy5jaCkpO1xuICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSB8fCAoIWluTGlzdCAmJiAhaW5RdW90ZSkgfHwgIW1hdGNoIHx8IGN1cnNvckJlZm9yZUJ1bGxldCkge1xuICAgICAgICBjbS5leGVjQ29tbWFuZChcIm5ld2xpbmVBbmRJbmRlbnRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChlbXB0eUxpc3RSRS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIGlmICghLz5cXHMqJC8udGVzdChsaW5lKSkgY20ucmVwbGFjZVJhbmdlKFwiXCIsIHtcbiAgICAgICAgICBsaW5lOiBwb3MubGluZSwgY2g6IDBcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxpbmU6IHBvcy5saW5lLCBjaDogcG9zLmNoICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpbmRlbnQgPSBtYXRjaFsxXSwgYWZ0ZXIgPSBtYXRjaFs1XTtcbiAgICAgICAgdmFyIG51bWJlcmVkID0gISh1bm9yZGVyZWRMaXN0UkUudGVzdChtYXRjaFsyXSkgfHwgbWF0Y2hbMl0uaW5kZXhPZihcIj5cIikgPj0gMCk7XG4gICAgICAgIHZhciBidWxsZXQgPSBudW1iZXJlZCA/IChwYXJzZUludChtYXRjaFszXSwgMTApICsgMSkgKyBtYXRjaFs0XSA6IG1hdGNoWzJdLnJlcGxhY2UoXCJ4XCIsIFwiIFwiKTtcbiAgICAgICAgcmVwbGFjZW1lbnRzW2ldID0gXCJcXG5cIiArIGluZGVudCArIGJ1bGxldCArIGFmdGVyO1xuXG4gICAgICAgIGlmIChudW1iZXJlZCkgaW5jcmVtZW50UmVtYWluaW5nTWFya2Rvd25MaXN0TnVtYmVycyhjbSwgcG9zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyhyZXBsYWNlbWVudHMpO1xuICB9O1xuXG4gIC8vIEF1dG8tdXBkYXRpbmcgTWFya2Rvd24gbGlzdCBudW1iZXJzIHdoZW4gYSBuZXcgaXRlbSBpcyBhZGRlZCB0byB0aGVcbiAgLy8gbWlkZGxlIG9mIGEgbGlzdFxuICBmdW5jdGlvbiBpbmNyZW1lbnRSZW1haW5pbmdNYXJrZG93bkxpc3ROdW1iZXJzKGNtLCBwb3MpIHtcbiAgICB2YXIgc3RhcnRMaW5lID0gcG9zLmxpbmUsIGxvb2tBaGVhZCA9IDAsIHNraXBDb3VudCA9IDA7XG4gICAgdmFyIHN0YXJ0SXRlbSA9IGxpc3RSRS5leGVjKGNtLmdldExpbmUoc3RhcnRMaW5lKSksIHN0YXJ0SW5kZW50ID0gc3RhcnRJdGVtWzFdO1xuXG4gICAgZG8ge1xuICAgICAgbG9va0FoZWFkICs9IDE7XG4gICAgICB2YXIgbmV4dExpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsb29rQWhlYWQ7XG4gICAgICB2YXIgbmV4dExpbmUgPSBjbS5nZXRMaW5lKG5leHRMaW5lTnVtYmVyKSwgbmV4dEl0ZW0gPSBsaXN0UkUuZXhlYyhuZXh0TGluZSk7XG5cbiAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHRJdGVtWzFdO1xuICAgICAgICB2YXIgbmV3TnVtYmVyID0gKHBhcnNlSW50KHN0YXJ0SXRlbVszXSwgMTApICsgbG9va0FoZWFkIC0gc2tpcENvdW50KTtcbiAgICAgICAgdmFyIG5leHROdW1iZXIgPSAocGFyc2VJbnQobmV4dEl0ZW1bM10sIDEwKSksIGl0ZW1OdW1iZXIgPSBuZXh0TnVtYmVyO1xuXG4gICAgICAgIGlmIChzdGFydEluZGVudCA9PT0gbmV4dEluZGVudCAmJiAhaXNOYU4obmV4dE51bWJlcikpIHtcbiAgICAgICAgICBpZiAobmV3TnVtYmVyID09PSBuZXh0TnVtYmVyKSBpdGVtTnVtYmVyID0gbmV4dE51bWJlciArIDE7XG4gICAgICAgICAgaWYgKG5ld051bWJlciA+IG5leHROdW1iZXIpIGl0ZW1OdW1iZXIgPSBuZXdOdW1iZXIgKyAxO1xuICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShcbiAgICAgICAgICAgIG5leHRMaW5lLnJlcGxhY2UobGlzdFJFLCBuZXh0SW5kZW50ICsgaXRlbU51bWJlciArIG5leHRJdGVtWzRdICsgbmV4dEl0ZW1bNV0pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogMFxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGxpbmU6IG5leHRMaW5lTnVtYmVyLCBjaDogbmV4dExpbmUubGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0YXJ0SW5kZW50Lmxlbmd0aCA+IG5leHRJbmRlbnQubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHJ1biBpZiB0aGUgbmV4dCBsaW5lIGltbWVkaWF0bGV5IGluZGVudHMsIGFzIGl0IGlzXG4gICAgICAgICAgLy8gbm90IGNsZWFyIG9mIHRoZSB1c2VycyBpbnRlbnRpb24gKG5ldyBpbmRlbnRlZCBpdGVtIG9yIHNhbWUgbGV2ZWwpXG4gICAgICAgICAgaWYgKChzdGFydEluZGVudC5sZW5ndGggPCBuZXh0SW5kZW50Lmxlbmd0aCkgJiYgKGxvb2tBaGVhZCA9PT0gMSkpIHJldHVybjtcbiAgICAgICAgICBza2lwQ291bnQgKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRJdGVtKTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgcGFpcnM6IFwiKClbXXt9JydcXFwiXFxcIlwiLFxuICAgIHRyaXBsZXM6IFwiXCIsXG4gICAgZXhwbG9kZTogXCJbXXt9XCJcbiAgfTtcblxuICB2YXIgUG9zID0gQ29kZU1pcnJvci5Qb3M7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJhdXRvQ2xvc2VCcmFja2V0c1wiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0KSB7XG4gICAgICBjbS5yZW1vdmVLZXlNYXAoa2V5TWFwKTtcbiAgICAgIGNtLnN0YXRlLmNsb3NlQnJhY2tldHMgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsKSB7XG4gICAgICBlbnN1cmVCb3VuZChnZXRPcHRpb24odmFsLCBcInBhaXJzXCIpKVxuICAgICAgY20uc3RhdGUuY2xvc2VCcmFja2V0cyA9IHZhbDtcbiAgICAgIGNtLmFkZEtleU1hcChrZXlNYXApO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0T3B0aW9uKGNvbmYsIG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PSBcInBhaXJzXCIgJiYgdHlwZW9mIGNvbmYgPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbmY7XG4gICAgaWYgKHR5cGVvZiBjb25mID09IFwib2JqZWN0XCIgJiYgY29uZltuYW1lXSAhPSBudWxsKSByZXR1cm4gY29uZltuYW1lXTtcbiAgICByZXR1cm4gZGVmYXVsdHNbbmFtZV07XG4gIH1cblxuICB2YXIga2V5TWFwID0ge0JhY2tzcGFjZTogaGFuZGxlQmFja3NwYWNlLCBFbnRlcjogaGFuZGxlRW50ZXJ9O1xuICBmdW5jdGlvbiBlbnN1cmVCb3VuZChjaGFycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaCA9IGNoYXJzLmNoYXJBdChpKSwga2V5ID0gXCInXCIgKyBjaCArIFwiJ1wiXG4gICAgICBpZiAoIWtleU1hcFtrZXldKSBrZXlNYXBba2V5XSA9IGhhbmRsZXIoY2gpXG4gICAgfVxuICB9XG4gIGVuc3VyZUJvdW5kKGRlZmF1bHRzLnBhaXJzICsgXCJgXCIpXG5cbiAgZnVuY3Rpb24gaGFuZGxlcihjaCkge1xuICAgIHJldHVybiBmdW5jdGlvbihjbSkgeyByZXR1cm4gaGFuZGxlQ2hhcihjbSwgY2gpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29uZmlnKGNtKSB7XG4gICAgdmFyIGRlZmx0ID0gY20uc3RhdGUuY2xvc2VCcmFja2V0cztcbiAgICBpZiAoIWRlZmx0IHx8IGRlZmx0Lm92ZXJyaWRlKSByZXR1cm4gZGVmbHQ7XG4gICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQoY20uZ2V0Q3Vyc29yKCkpO1xuICAgIHJldHVybiBtb2RlLmNsb3NlQnJhY2tldHMgfHwgZGVmbHQ7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVCYWNrc3BhY2UoY20pIHtcbiAgICB2YXIgY29uZiA9IGdldENvbmZpZyhjbSk7XG4gICAgaWYgKCFjb25mIHx8IGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgIHZhciBwYWlycyA9IGdldE9wdGlvbihjb25mLCBcInBhaXJzXCIpO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7XG4gICAgICBpZiAoIWFyb3VuZCB8fCBwYWlycy5pbmRleE9mKGFyb3VuZCkgJSAyICE9IDApIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0uaGVhZDtcbiAgICAgIGNtLnJlcGxhY2VSYW5nZShcIlwiLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpLCBcIitkZWxldGVcIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRW50ZXIoY20pIHtcbiAgICB2YXIgY29uZiA9IGdldENvbmZpZyhjbSk7XG4gICAgdmFyIGV4cGxvZGUgPSBjb25mICYmIGdldE9wdGlvbihjb25mLCBcImV4cGxvZGVcIik7XG4gICAgaWYgKCFleHBsb2RlIHx8IGNtLmdldE9wdGlvbihcImRpc2FibGVJbnB1dFwiKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcblxuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXJhbmdlc1tpXS5lbXB0eSgpKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgdmFyIGFyb3VuZCA9IGNoYXJzQXJvdW5kKGNtLCByYW5nZXNbaV0uaGVhZCk7XG4gICAgICBpZiAoIWFyb3VuZCB8fCBleHBsb2RlLmluZGV4T2YoYXJvdW5kKSAlIDIgIT0gMCkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB9XG4gICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxpbmVzZXAgPSBjbS5saW5lU2VwYXJhdG9yKCkgfHwgXCJcXG5cIjtcbiAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGluZXNlcCArIGxpbmVzZXAsIG51bGwpO1xuICAgICAgY20uZXhlY0NvbW1hbmQoXCJnb0NoYXJMZWZ0XCIpO1xuICAgICAgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gcmFuZ2VzW2ldLmhlYWQubGluZTtcbiAgICAgICAgY20uaW5kZW50TGluZShsaW5lLCBudWxsLCB0cnVlKTtcbiAgICAgICAgY20uaW5kZW50TGluZShsaW5lICsgMSwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb250cmFjdFNlbGVjdGlvbihzZWwpIHtcbiAgICB2YXIgaW52ZXJ0ZWQgPSBDb2RlTWlycm9yLmNtcFBvcyhzZWwuYW5jaG9yLCBzZWwuaGVhZCkgPiAwO1xuICAgIHJldHVybiB7YW5jaG9yOiBuZXcgUG9zKHNlbC5hbmNob3IubGluZSwgc2VsLmFuY2hvci5jaCArIChpbnZlcnRlZCA/IC0xIDogMSkpLFxuICAgICAgICAgICAgaGVhZDogbmV3IFBvcyhzZWwuaGVhZC5saW5lLCBzZWwuaGVhZC5jaCArIChpbnZlcnRlZCA/IDEgOiAtMSkpfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNoYXIoY20sIGNoKSB7XG4gICAgdmFyIGNvbmYgPSBnZXRDb25maWcoY20pO1xuICAgIGlmICghY29uZiB8fCBjbS5nZXRPcHRpb24oXCJkaXNhYmxlSW5wdXRcIikpIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG5cbiAgICB2YXIgcGFpcnMgPSBnZXRPcHRpb24oY29uZiwgXCJwYWlyc1wiKTtcbiAgICB2YXIgcG9zID0gcGFpcnMuaW5kZXhPZihjaCk7XG4gICAgaWYgKHBvcyA9PSAtMSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICB2YXIgdHJpcGxlcyA9IGdldE9wdGlvbihjb25mLCBcInRyaXBsZXNcIik7XG5cbiAgICB2YXIgaWRlbnRpY2FsID0gcGFpcnMuY2hhckF0KHBvcyArIDEpID09IGNoO1xuICAgIHZhciByYW5nZXMgPSBjbS5saXN0U2VsZWN0aW9ucygpO1xuICAgIHZhciBvcGVuaW5nID0gcG9zICUgMiA9PSAwO1xuXG4gICAgdmFyIHR5cGU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXSwgY3VyID0gcmFuZ2UuaGVhZCwgY3VyVHlwZTtcbiAgICAgIHZhciBuZXh0ID0gY20uZ2V0UmFuZ2UoY3VyLCBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpKTtcbiAgICAgIGlmIChvcGVuaW5nICYmICFyYW5nZS5lbXB0eSgpKSB7XG4gICAgICAgIGN1clR5cGUgPSBcInN1cnJvdW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKChpZGVudGljYWwgfHwgIW9wZW5pbmcpICYmIG5leHQgPT0gY2gpIHtcbiAgICAgICAgaWYgKGlkZW50aWNhbCAmJiBzdHJpbmdTdGFydHNBZnRlcihjbSwgY3VyKSlcbiAgICAgICAgICBjdXJUeXBlID0gXCJib3RoXCI7XG4gICAgICAgIGVsc2UgaWYgKHRyaXBsZXMuaW5kZXhPZihjaCkgPj0gMCAmJiBjbS5nZXRSYW5nZShjdXIsIFBvcyhjdXIubGluZSwgY3VyLmNoICsgMykpID09IGNoICsgY2ggKyBjaClcbiAgICAgICAgICBjdXJUeXBlID0gXCJza2lwVGhyZWVcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGN1clR5cGUgPSBcInNraXBcIjtcbiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsICYmIGN1ci5jaCA+IDEgJiYgdHJpcGxlcy5pbmRleE9mKGNoKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgIGNtLmdldFJhbmdlKFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMiksIGN1cikgPT0gY2ggKyBjaCkge1xuICAgICAgICBpZiAoY3VyLmNoID4gMiAmJiAvXFxic3RyaW5nLy50ZXN0KGNtLmdldFRva2VuVHlwZUF0KFBvcyhjdXIubGluZSwgY3VyLmNoIC0gMikpKSkgcmV0dXJuIENvZGVNaXJyb3IuUGFzcztcbiAgICAgICAgY3VyVHlwZSA9IFwiYWRkRm91clwiO1xuICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwpIHtcbiAgICAgICAgdmFyIHByZXYgPSBjdXIuY2ggPT0gMCA/IFwiIFwiIDogY20uZ2V0UmFuZ2UoUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAxKSwgY3VyKVxuICAgICAgICBpZiAoIUNvZGVNaXJyb3IuaXNXb3JkQ2hhcihuZXh0KSAmJiBwcmV2ICE9IGNoICYmICFDb2RlTWlycm9yLmlzV29yZENoYXIocHJldikpIGN1clR5cGUgPSBcImJvdGhcIjtcbiAgICAgICAgZWxzZSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgICAgfSBlbHNlIGlmIChvcGVuaW5nKSB7XG4gICAgICAgIGN1clR5cGUgPSBcImJvdGhcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBDb2RlTWlycm9yLlBhc3M7XG4gICAgICB9XG4gICAgICBpZiAoIXR5cGUpIHR5cGUgPSBjdXJUeXBlO1xuICAgICAgZWxzZSBpZiAodHlwZSAhPSBjdXJUeXBlKSByZXR1cm4gQ29kZU1pcnJvci5QYXNzO1xuICAgIH1cblxuICAgIHZhciBsZWZ0ID0gcG9zICUgMiA/IHBhaXJzLmNoYXJBdChwb3MgLSAxKSA6IGNoO1xuICAgIHZhciByaWdodCA9IHBvcyAlIDIgPyBjaCA6IHBhaXJzLmNoYXJBdChwb3MgKyAxKTtcbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodHlwZSA9PSBcInNraXBcIikge1xuICAgICAgICBjbS5leGVjQ29tbWFuZChcImdvQ2hhclJpZ2h0XCIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic2tpcFRocmVlXCIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspXG4gICAgICAgICAgY20uZXhlY0NvbW1hbmQoXCJnb0NoYXJSaWdodFwiKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1cnJvdW5kXCIpIHtcbiAgICAgICAgdmFyIHNlbHMgPSBjbS5nZXRTZWxlY3Rpb25zKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vscy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBzZWxzW2ldID0gbGVmdCArIHNlbHNbaV0gKyByaWdodDtcbiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc2VscywgXCJhcm91bmRcIik7XG4gICAgICAgIHNlbHMgPSBjbS5saXN0U2VsZWN0aW9ucygpLnNsaWNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vscy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBzZWxzW2ldID0gY29udHJhY3RTZWxlY3Rpb24oc2Vsc1tpXSk7XG4gICAgICAgIGNtLnNldFNlbGVjdGlvbnMoc2Vscyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJib3RoXCIpIHtcbiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbihsZWZ0ICsgcmlnaHQsIG51bGwpO1xuICAgICAgICBjbS50cmlnZ2VyRWxlY3RyaWMobGVmdCArIHJpZ2h0KTtcbiAgICAgICAgY20uZXhlY0NvbW1hbmQoXCJnb0NoYXJMZWZ0XCIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWRkRm91clwiKSB7XG4gICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24obGVmdCArIGxlZnQgKyBsZWZ0ICsgbGVmdCwgXCJiZWZvcmVcIik7XG4gICAgICAgIGNtLmV4ZWNDb21tYW5kKFwiZ29DaGFyUmlnaHRcIik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFyc0Fyb3VuZChjbSwgcG9zKSB7XG4gICAgdmFyIHN0ciA9IGNtLmdldFJhbmdlKFBvcyhwb3MubGluZSwgcG9zLmNoIC0gMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhwb3MubGluZSwgcG9zLmNoICsgMSkpO1xuICAgIHJldHVybiBzdHIubGVuZ3RoID09IDIgPyBzdHIgOiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5nU3RhcnRzQWZ0ZXIoY20sIHBvcykge1xuICAgIHZhciB0b2tlbiA9IGNtLmdldFRva2VuQXQoUG9zKHBvcy5saW5lLCBwb3MuY2ggKyAxKSlcbiAgICByZXR1cm4gL1xcYnN0cmluZy8udGVzdCh0b2tlbi50eXBlKSAmJiB0b2tlbi5zdGFydCA9PSBwb3MuY2ggJiZcbiAgICAgIChwb3MuY2ggPT0gMCB8fCAhL1xcYnN0cmluZy8udGVzdChjbS5nZXRUb2tlblR5cGVBdChwb3MpKSlcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbihcImFubm90YXRlU2Nyb2xsYmFyXCIsIGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gXCJzdHJpbmdcIikgb3B0aW9ucyA9IHtjbGFzc05hbWU6IG9wdGlvbnN9O1xuICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbih0aGlzLCBvcHRpb25zKTtcbiAgfSk7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJzY3JvbGxCdXR0b25IZWlnaHRcIiwgMCk7XG5cbiAgZnVuY3Rpb24gQW5ub3RhdGlvbihjbSwgb3B0aW9ucykge1xuICAgIHRoaXMuY20gPSBjbTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuYnV0dG9uSGVpZ2h0ID0gb3B0aW9ucy5zY3JvbGxCdXR0b25IZWlnaHQgfHwgY20uZ2V0T3B0aW9uKFwic2Nyb2xsQnV0dG9uSGVpZ2h0XCIpO1xuICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBbXTtcbiAgICB0aGlzLmRvUmVkcmF3ID0gdGhpcy5kb1VwZGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kaXYgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgIHRoaXMuZGl2LnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDA7IHRvcDogMDsgei1pbmRleDogNzsgcG9pbnRlci1ldmVudHM6IG5vbmVcIjtcbiAgICB0aGlzLmNvbXB1dGVTY2FsZSgpO1xuXG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZWRyYXcoZGVsYXkpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLmRvUmVkcmF3KTtcbiAgICAgIHNlbGYuZG9SZWRyYXcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxmLnJlZHJhdygpOyB9LCBkZWxheSk7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGNtLm9uKFwicmVmcmVzaFwiLCB0aGlzLnJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dChzZWxmLmRvVXBkYXRlKTtcbiAgICAgIHNlbGYuZG9VcGRhdGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2VsZi5jb21wdXRlU2NhbGUoKSkgc2NoZWR1bGVSZWRyYXcoMjApO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcbiAgICBjbS5vbihcIm1hcmtlckFkZGVkXCIsIHRoaXMucmVzaXplSGFuZGxlcik7XG4gICAgY20ub24oXCJtYXJrZXJDbGVhcmVkXCIsIHRoaXMucmVzaXplSGFuZGxlcik7XG4gICAgaWYgKG9wdGlvbnMubGlzdGVuRm9yQ2hhbmdlcyAhPT0gZmFsc2UpXG4gICAgICBjbS5vbihcImNoYW5nZVwiLCB0aGlzLmNoYW5nZUhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgc2NoZWR1bGVSZWRyYXcoMjUwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgQW5ub3RhdGlvbi5wcm90b3R5cGUuY29tcHV0ZVNjYWxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNtID0gdGhpcy5jbTtcbiAgICB2YXIgaFNjYWxlID0gKGNtLmdldFdyYXBwZXJFbGVtZW50KCkuY2xpZW50SGVpZ2h0IC0gY20uZGlzcGxheS5iYXJIZWlnaHQgLSB0aGlzLmJ1dHRvbkhlaWdodCAqIDIpIC9cbiAgICAgIGNtLmdldFNjcm9sbGVyRWxlbWVudCgpLnNjcm9sbEhlaWdodFxuICAgIGlmIChoU2NhbGUgIT0gdGhpcy5oU2NhbGUpIHtcbiAgICAgIHRoaXMuaFNjYWxlID0gaFNjYWxlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIEFubm90YXRpb24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKGFubm90YXRpb25zKSB7XG4gICAgdGhpcy5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH07XG5cbiAgQW5ub3RhdGlvbi5wcm90b3R5cGUucmVkcmF3ID0gZnVuY3Rpb24oY29tcHV0ZSkge1xuICAgIGlmIChjb21wdXRlICE9PSBmYWxzZSkgdGhpcy5jb21wdXRlU2NhbGUoKTtcbiAgICB2YXIgY20gPSB0aGlzLmNtLCBoU2NhbGUgPSB0aGlzLmhTY2FsZTtcblxuICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBhbm5zID0gdGhpcy5hbm5vdGF0aW9ucztcblxuICAgIHZhciB3cmFwcGluZyA9IGNtLmdldE9wdGlvbihcImxpbmVXcmFwcGluZ1wiKTtcbiAgICB2YXIgc2luZ2xlTGluZUggPSB3cmFwcGluZyAmJiBjbS5kZWZhdWx0VGV4dEhlaWdodCgpICogMS41O1xuICAgIHZhciBjdXJMaW5lID0gbnVsbCwgY3VyTGluZU9iaiA9IG51bGw7XG4gICAgZnVuY3Rpb24gZ2V0WShwb3MsIHRvcCkge1xuICAgICAgaWYgKGN1ckxpbmUgIT0gcG9zLmxpbmUpIHtcbiAgICAgICAgY3VyTGluZSA9IHBvcy5saW5lO1xuICAgICAgICBjdXJMaW5lT2JqID0gY20uZ2V0TGluZUhhbmRsZShjdXJMaW5lKTtcbiAgICAgIH1cbiAgICAgIGlmICgoY3VyTGluZU9iai53aWRnZXRzICYmIGN1ckxpbmVPYmoud2lkZ2V0cy5sZW5ndGgpIHx8XG4gICAgICAgICAgKHdyYXBwaW5nICYmIGN1ckxpbmVPYmouaGVpZ2h0ID4gc2luZ2xlTGluZUgpKVxuICAgICAgICByZXR1cm4gY20uY2hhckNvb3Jkcyhwb3MsIFwibG9jYWxcIilbdG9wID8gXCJ0b3BcIiA6IFwiYm90dG9tXCJdO1xuICAgICAgdmFyIHRvcFkgPSBjbS5oZWlnaHRBdExpbmUoY3VyTGluZU9iaiwgXCJsb2NhbFwiKTtcbiAgICAgIHJldHVybiB0b3BZICsgKHRvcCA/IDAgOiBjdXJMaW5lT2JqLmhlaWdodCk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3RMaW5lID0gY20ubGFzdExpbmUoKVxuICAgIGlmIChjbS5kaXNwbGF5LmJhcldpZHRoKSBmb3IgKHZhciBpID0gMCwgbmV4dFRvcDsgaSA8IGFubnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBhbm4gPSBhbm5zW2ldO1xuICAgICAgaWYgKGFubi50by5saW5lID4gbGFzdExpbmUpIGNvbnRpbnVlO1xuICAgICAgdmFyIHRvcCA9IG5leHRUb3AgfHwgZ2V0WShhbm4uZnJvbSwgdHJ1ZSkgKiBoU2NhbGU7XG4gICAgICB2YXIgYm90dG9tID0gZ2V0WShhbm4udG8sIGZhbHNlKSAqIGhTY2FsZTtcbiAgICAgIHdoaWxlIChpIDwgYW5ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIGlmIChhbm5zW2kgKyAxXS50by5saW5lID4gbGFzdExpbmUpIGJyZWFrO1xuICAgICAgICBuZXh0VG9wID0gZ2V0WShhbm5zW2kgKyAxXS5mcm9tLCB0cnVlKSAqIGhTY2FsZTtcbiAgICAgICAgaWYgKG5leHRUb3AgPiBib3R0b20gKyAuOSkgYnJlYWs7XG4gICAgICAgIGFubiA9IGFubnNbKytpXTtcbiAgICAgICAgYm90dG9tID0gZ2V0WShhbm4udG8sIGZhbHNlKSAqIGhTY2FsZTtcbiAgICAgIH1cbiAgICAgIGlmIChib3R0b20gPT0gdG9wKSBjb250aW51ZTtcbiAgICAgIHZhciBoZWlnaHQgPSBNYXRoLm1heChib3R0b20gLSB0b3AsIDMpO1xuXG4gICAgICB2YXIgZWx0ID0gZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIGVsdC5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAwcHg7IHdpZHRoOiBcIiArIE1hdGgubWF4KGNtLmRpc3BsYXkuYmFyV2lkdGggLSAxLCAyKSArIFwicHg7IHRvcDogXCJcbiAgICAgICAgKyAodG9wICsgdGhpcy5idXR0b25IZWlnaHQpICsgXCJweDsgaGVpZ2h0OiBcIiArIGhlaWdodCArIFwicHhcIjtcbiAgICAgIGVsdC5jbGFzc05hbWUgPSB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lO1xuICAgICAgaWYgKGFubi5pZCkge1xuICAgICAgICBlbHQuc2V0QXR0cmlidXRlKFwiYW5ub3RhdGlvbi1pZFwiLCBhbm4uaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRpdi50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgdGhpcy5kaXYuYXBwZW5kQ2hpbGQoZnJhZyk7XG4gIH07XG5cbiAgQW5ub3RhdGlvbi5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNtLm9mZihcInJlZnJlc2hcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICB0aGlzLmNtLm9mZihcIm1hcmtlckFkZGVkXCIsIHRoaXMucmVzaXplSGFuZGxlcik7XG4gICAgdGhpcy5jbS5vZmYoXCJtYXJrZXJDbGVhcmVkXCIsIHRoaXMucmVzaXplSGFuZGxlcik7XG4gICAgaWYgKHRoaXMuY2hhbmdlSGFuZGxlcikgdGhpcy5jbS5vZmYoXCJjaGFuZ2VcIiwgdGhpcy5jaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLmRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZGl2KTtcbiAgfTtcbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuKGZ1bmN0aW9uKG1vZCkge1xuICBpZiAodHlwZW9mIGV4cG9ydHMgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlID09IFwib2JqZWN0XCIpIC8vIENvbW1vbkpTXG4gICAgbW9kKHJlcXVpcmUoXCIuLi8uLi9saWIvY29kZW1pcnJvclwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiXSwgbW9kKTtcbiAgZWxzZSAvLyBQbGFpbiBicm93c2VyIGVudlxuICAgIG1vZChDb2RlTWlycm9yKTtcbn0pKGZ1bmN0aW9uKENvZGVNaXJyb3IpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBXUkFQX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmVcIjtcbiAgdmFyIEJBQ0tfQ0xBU1MgPSBcIkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kXCI7XG4gIHZhciBHVVRUX0NMQVNTID0gXCJDb2RlTWlycm9yLWFjdGl2ZWxpbmUtZ3V0dGVyXCI7XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24oXCJzdHlsZUFjdGl2ZUxpbmVcIiwgZmFsc2UsIGZ1bmN0aW9uKGNtLCB2YWwsIG9sZCkge1xuICAgIHZhciBwcmV2ID0gb2xkID09IENvZGVNaXJyb3IuSW5pdCA/IGZhbHNlIDogb2xkO1xuICAgIGlmICh2YWwgPT0gcHJldikgcmV0dXJuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIGNtLm9mZihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgICAgY2xlYXJBY3RpdmVMaW5lcyhjbSk7XG4gICAgICBkZWxldGUgY20uc3RhdGUuYWN0aXZlTGluZXM7XG4gICAgfVxuICAgIGlmICh2YWwpIHtcbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gW107XG4gICAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgY20ubGlzdFNlbGVjdGlvbnMoKSk7XG4gICAgICBjbS5vbihcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiLCBzZWxlY3Rpb25DaGFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2xlYXJBY3RpdmVMaW5lcyhjbSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uc3RhdGUuYWN0aXZlTGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNtLnJlbW92ZUxpbmVDbGFzcyhjbS5zdGF0ZS5hY3RpdmVMaW5lc1tpXSwgXCJ3cmFwXCIsIFdSQVBfQ0xBU1MpO1xuICAgICAgY20ucmVtb3ZlTGluZUNsYXNzKGNtLnN0YXRlLmFjdGl2ZUxpbmVzW2ldLCBcImJhY2tncm91bmRcIiwgQkFDS19DTEFTUyk7XG4gICAgICBjbS5yZW1vdmVMaW5lQ2xhc3MoY20uc3RhdGUuYWN0aXZlTGluZXNbaV0sIFwiZ3V0dGVyXCIsIEdVVFRfQ0xBU1MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhbWVBcnJheShhLCBiKSB7XG4gICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZlTGluZXMoY20sIHJhbmdlcykge1xuICAgIHZhciBhY3RpdmUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgdmFyIG9wdGlvbiA9IGNtLmdldE9wdGlvbihcInN0eWxlQWN0aXZlTGluZVwiKTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09IFwib2JqZWN0XCIgJiYgb3B0aW9uLm5vbkVtcHR5ID8gcmFuZ2UuYW5jaG9yLmxpbmUgIT0gcmFuZ2UuaGVhZC5saW5lIDogIXJhbmdlLmVtcHR5KCkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB2YXIgbGluZSA9IGNtLmdldExpbmVIYW5kbGVWaXN1YWxTdGFydChyYW5nZS5oZWFkLmxpbmUpO1xuICAgICAgaWYgKGFjdGl2ZVthY3RpdmUubGVuZ3RoIC0gMV0gIT0gbGluZSkgYWN0aXZlLnB1c2gobGluZSk7XG4gICAgfVxuICAgIGlmIChzYW1lQXJyYXkoY20uc3RhdGUuYWN0aXZlTGluZXMsIGFjdGl2ZSkpIHJldHVybjtcbiAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhckFjdGl2ZUxpbmVzKGNtKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aXZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNtLmFkZExpbmVDbGFzcyhhY3RpdmVbaV0sIFwid3JhcFwiLCBXUkFQX0NMQVNTKTtcbiAgICAgICAgY20uYWRkTGluZUNsYXNzKGFjdGl2ZVtpXSwgXCJiYWNrZ3JvdW5kXCIsIEJBQ0tfQ0xBU1MpO1xuICAgICAgICBjbS5hZGRMaW5lQ2xhc3MoYWN0aXZlW2ldLCBcImd1dHRlclwiLCBHVVRUX0NMQVNTKTtcbiAgICAgIH1cbiAgICAgIGNtLnN0YXRlLmFjdGl2ZUxpbmVzID0gYWN0aXZlO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uQ2hhbmdlKGNtLCBzZWwpIHtcbiAgICB1cGRhdGVBY3RpdmVMaW5lcyhjbSwgc2VsLnJhbmdlcyk7XG4gIH1cbn0pO1xuIiwiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gQmVjYXVzZSBzb21ldGltZXMgeW91IG5lZWQgdG8gbWFyayB0aGUgc2VsZWN0ZWQgKnRleHQqLlxuLy9cbi8vIEFkZHMgYW4gb3B0aW9uICdzdHlsZVNlbGVjdGVkVGV4dCcgd2hpY2gsIHdoZW4gZW5hYmxlZCwgZ2l2ZXNcbi8vIHNlbGVjdGVkIHRleHQgdGhlIENTUyBjbGFzcyBnaXZlbiBhcyBvcHRpb24gdmFsdWUsIG9yXG4vLyBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCIgd2hlbiB0aGUgdmFsdWUgaXMgbm90IGEgc3RyaW5nLlxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbihcInN0eWxlU2VsZWN0ZWRUZXh0XCIsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBvbGQpIHtcbiAgICB2YXIgcHJldiA9IG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0O1xuICAgIGlmICh2YWwgJiYgIXByZXYpIHtcbiAgICAgIGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbiA9IFtdO1xuICAgICAgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGUgPSB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIgPyB2YWwgOiBcIkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0XCI7XG4gICAgICByZXNldChjbSk7XG4gICAgICBjbS5vbihcImN1cnNvckFjdGl2aXR5XCIsIG9uQ3Vyc29yQWN0aXZpdHkpO1xuICAgICAgY20ub24oXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAoIXZhbCAmJiBwcmV2KSB7XG4gICAgICBjbS5vZmYoXCJjdXJzb3JBY3Rpdml0eVwiLCBvbkN1cnNvckFjdGl2aXR5KTtcbiAgICAgIGNtLm9mZihcImNoYW5nZVwiLCBvbkNoYW5nZSk7XG4gICAgICBjbGVhcihjbSk7XG4gICAgICBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb25TdHlsZSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBvbkN1cnNvckFjdGl2aXR5KGNtKSB7XG4gICAgaWYgKGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbilcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgdXBkYXRlKGNtKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjbSkge1xuICAgIGlmIChjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb24gJiYgY20uc3RhdGUubWFya2VkU2VsZWN0aW9uLmxlbmd0aClcbiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsgY2xlYXIoY20pOyB9KTtcbiAgfVxuXG4gIHZhciBDSFVOS19TSVpFID0gODtcbiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zO1xuICB2YXIgY21wID0gQ29kZU1pcnJvci5jbXBQb3M7XG5cbiAgZnVuY3Rpb24gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8sIGFkZEF0KSB7XG4gICAgaWYgKGNtcChmcm9tLCB0bykgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBhcnJheSA9IGNtLnN0YXRlLm1hcmtlZFNlbGVjdGlvbjtcbiAgICB2YXIgY2xzID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uU3R5bGU7XG4gICAgZm9yICh2YXIgbGluZSA9IGZyb20ubGluZTs7KSB7XG4gICAgICB2YXIgc3RhcnQgPSBsaW5lID09IGZyb20ubGluZSA/IGZyb20gOiBQb3MobGluZSwgMCk7XG4gICAgICB2YXIgZW5kTGluZSA9IGxpbmUgKyBDSFVOS19TSVpFLCBhdEVuZCA9IGVuZExpbmUgPj0gdG8ubGluZTtcbiAgICAgIHZhciBlbmQgPSBhdEVuZCA/IHRvIDogUG9zKGVuZExpbmUsIDApO1xuICAgICAgdmFyIG1hcmsgPSBjbS5tYXJrVGV4dChzdGFydCwgZW5kLCB7Y2xhc3NOYW1lOiBjbHN9KTtcbiAgICAgIGlmIChhZGRBdCA9PSBudWxsKSBhcnJheS5wdXNoKG1hcmspO1xuICAgICAgZWxzZSBhcnJheS5zcGxpY2UoYWRkQXQrKywgMCwgbWFyayk7XG4gICAgICBpZiAoYXRFbmQpIGJyZWFrO1xuICAgICAgbGluZSA9IGVuZExpbmU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoY20pIHtcbiAgICB2YXIgYXJyYXkgPSBjbS5zdGF0ZS5tYXJrZWRTZWxlY3Rpb247XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgYXJyYXlbaV0uY2xlYXIoKTtcbiAgICBhcnJheS5sZW5ndGggPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoY20pIHtcbiAgICBjbGVhcihjbSk7XG4gICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICBjb3ZlclJhbmdlKGNtLCByYW5nZXNbaV0uZnJvbSgpLCByYW5nZXNbaV0udG8oKSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoY20pIHtcbiAgICBpZiAoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybiBjbGVhcihjbSk7XG4gICAgaWYgKGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoID4gMSkgcmV0dXJuIHJlc2V0KGNtKTtcblxuICAgIHZhciBmcm9tID0gY20uZ2V0Q3Vyc29yKFwic3RhcnRcIiksIHRvID0gY20uZ2V0Q3Vyc29yKFwiZW5kXCIpO1xuXG4gICAgdmFyIGFycmF5ID0gY20uc3RhdGUubWFya2VkU2VsZWN0aW9uO1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSByZXR1cm4gY292ZXJSYW5nZShjbSwgZnJvbSwgdG8pO1xuXG4gICAgdmFyIGNvdmVyU3RhcnQgPSBhcnJheVswXS5maW5kKCksIGNvdmVyRW5kID0gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0uZmluZCgpO1xuICAgIGlmICghY292ZXJTdGFydCB8fCAhY292ZXJFbmQgfHwgdG8ubGluZSAtIGZyb20ubGluZSA8PSBDSFVOS19TSVpFIHx8XG4gICAgICAgIGNtcChmcm9tLCBjb3ZlckVuZC50bykgPj0gMCB8fCBjbXAodG8sIGNvdmVyU3RhcnQuZnJvbSkgPD0gMClcbiAgICAgIHJldHVybiByZXNldChjbSk7XG5cbiAgICB3aGlsZSAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPiAwKSB7XG4gICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICBjb3ZlclN0YXJ0ID0gYXJyYXlbMF0uZmluZCgpO1xuICAgIH1cbiAgICBpZiAoY21wKGZyb20sIGNvdmVyU3RhcnQuZnJvbSkgPCAwKSB7XG4gICAgICBpZiAoY292ZXJTdGFydC50by5saW5lIC0gZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5zaGlmdCgpLmNsZWFyKCk7XG4gICAgICAgIGNvdmVyUmFuZ2UoY20sIGZyb20sIGNvdmVyU3RhcnQudG8sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY292ZXJSYW5nZShjbSwgZnJvbSwgY292ZXJTdGFydC5mcm9tLCAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoY21wKHRvLCBjb3ZlckVuZC50bykgPCAwKSB7XG4gICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgY292ZXJFbmQgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXS5maW5kKCk7XG4gICAgfVxuICAgIGlmIChjbXAodG8sIGNvdmVyRW5kLnRvKSA+IDApIHtcbiAgICAgIGlmICh0by5saW5lIC0gY292ZXJFbmQuZnJvbS5saW5lIDwgQ0hVTktfU0laRSkge1xuICAgICAgICBhcnJheS5wb3AoKS5jbGVhcigpO1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC5mcm9tLCB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3ZlclJhbmdlKGNtLCBjb3ZlckVuZC50bywgdG8pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpLCByZXF1aXJlKFwiLi9mb2xkY29kZVwiKSk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIC8vIEFNRFxuICAgIGRlZmluZShbXCIuLi8uLi9saWIvY29kZW1pcnJvclwiLCBcIi4vZm9sZGNvZGVcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uKFwiZm9sZEd1dHRlclwiLCBmYWxzZSwgZnVuY3Rpb24oY20sIHZhbCwgb2xkKSB7XG4gICAgaWYgKG9sZCAmJiBvbGQgIT0gQ29kZU1pcnJvci5Jbml0KSB7XG4gICAgICBjbS5jbGVhckd1dHRlcihjbS5zdGF0ZS5mb2xkR3V0dGVyLm9wdGlvbnMuZ3V0dGVyKTtcbiAgICAgIGNtLnN0YXRlLmZvbGRHdXR0ZXIgPSBudWxsO1xuICAgICAgY20ub2ZmKFwiZ3V0dGVyQ2xpY2tcIiwgb25HdXR0ZXJDbGljayk7XG4gICAgICBjbS5vZmYoXCJjaGFuZ2VcIiwgb25DaGFuZ2UpO1xuICAgICAgY20ub2ZmKFwidmlld3BvcnRDaGFuZ2VcIiwgb25WaWV3cG9ydENoYW5nZSk7XG4gICAgICBjbS5vZmYoXCJmb2xkXCIsIG9uRm9sZCk7XG4gICAgICBjbS5vZmYoXCJ1bmZvbGRcIiwgb25Gb2xkKTtcbiAgICAgIGNtLm9mZihcInN3YXBEb2NcIiwgb25DaGFuZ2UpO1xuICAgIH1cbiAgICBpZiAodmFsKSB7XG4gICAgICBjbS5zdGF0ZS5mb2xkR3V0dGVyID0gbmV3IFN0YXRlKHBhcnNlT3B0aW9ucyh2YWwpKTtcbiAgICAgIHVwZGF0ZUluVmlld3BvcnQoY20pO1xuICAgICAgY20ub24oXCJndXR0ZXJDbGlja1wiLCBvbkd1dHRlckNsaWNrKTtcbiAgICAgIGNtLm9uKFwiY2hhbmdlXCIsIG9uQ2hhbmdlKTtcbiAgICAgIGNtLm9uKFwidmlld3BvcnRDaGFuZ2VcIiwgb25WaWV3cG9ydENoYW5nZSk7XG4gICAgICBjbS5vbihcImZvbGRcIiwgb25Gb2xkKTtcbiAgICAgIGNtLm9uKFwidW5mb2xkXCIsIG9uRm9sZCk7XG4gICAgICBjbS5vbihcInN3YXBEb2NcIiwgb25DaGFuZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIFBvcyA9IENvZGVNaXJyb3IuUG9zO1xuXG4gIGZ1bmN0aW9uIFN0YXRlKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZnJvbSA9IHRoaXMudG8gPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAob3B0cyA9PT0gdHJ1ZSkgb3B0cyA9IHt9O1xuICAgIGlmIChvcHRzLmd1dHRlciA9PSBudWxsKSBvcHRzLmd1dHRlciA9IFwiQ29kZU1pcnJvci1mb2xkZ3V0dGVyXCI7XG4gICAgaWYgKG9wdHMuaW5kaWNhdG9yT3BlbiA9PSBudWxsKSBvcHRzLmluZGljYXRvck9wZW4gPSBcIkNvZGVNaXJyb3ItZm9sZGd1dHRlci1vcGVuXCI7XG4gICAgaWYgKG9wdHMuaW5kaWNhdG9yRm9sZGVkID09IG51bGwpIG9wdHMuaW5kaWNhdG9yRm9sZGVkID0gXCJDb2RlTWlycm9yLWZvbGRndXR0ZXItZm9sZGVkXCI7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH1cblxuICBmdW5jdGlvbiBpc0ZvbGRlZChjbSwgbGluZSkge1xuICAgIHZhciBtYXJrcyA9IGNtLmZpbmRNYXJrcyhQb3MobGluZSwgMCksIFBvcyhsaW5lICsgMSwgMCkpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyArK2kpXG4gICAgICBpZiAobWFya3NbaV0uX19pc0ZvbGQgJiYgbWFya3NbaV0uZmluZCgpLmZyb20ubGluZSA9PSBsaW5lKSByZXR1cm4gbWFya3NbaV07XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrZXIoc3BlYykge1xuICAgIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB2YXIgZWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIGVsdC5jbGFzc05hbWUgPSBzcGVjICsgXCIgQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXItc3VidGxlXCI7XG4gICAgICByZXR1cm4gZWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3BlYy5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRm9sZEluZm8oY20sIGZyb20sIHRvKSB7XG4gICAgdmFyIG9wdHMgPSBjbS5zdGF0ZS5mb2xkR3V0dGVyLm9wdGlvbnMsIGN1ciA9IGZyb207XG4gICAgdmFyIG1pblNpemUgPSBjbS5mb2xkT3B0aW9uKG9wdHMsIFwibWluRm9sZFNpemVcIik7XG4gICAgdmFyIGZ1bmMgPSBjbS5mb2xkT3B0aW9uKG9wdHMsIFwicmFuZ2VGaW5kZXJcIik7XG4gICAgY20uZWFjaExpbmUoZnJvbSwgdG8sIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBtYXJrID0gbnVsbDtcbiAgICAgIGlmIChpc0ZvbGRlZChjbSwgY3VyKSkge1xuICAgICAgICBtYXJrID0gbWFya2VyKG9wdHMuaW5kaWNhdG9yRm9sZGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwb3MgPSBQb3MoY3VyLCAwKTtcbiAgICAgICAgdmFyIHJhbmdlID0gZnVuYyAmJiBmdW5jKGNtLCBwb3MpO1xuICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UudG8ubGluZSAtIHJhbmdlLmZyb20ubGluZSA+PSBtaW5TaXplKVxuICAgICAgICAgIG1hcmsgPSBtYXJrZXIob3B0cy5pbmRpY2F0b3JPcGVuKTtcbiAgICAgIH1cbiAgICAgIGNtLnNldEd1dHRlck1hcmtlcihsaW5lLCBvcHRzLmd1dHRlciwgbWFyayk7XG4gICAgICArK2N1cjtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUluVmlld3BvcnQoY20pIHtcbiAgICB2YXIgdnAgPSBjbS5nZXRWaWV3cG9ydCgpLCBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHtcbiAgICAgIHVwZGF0ZUZvbGRJbmZvKGNtLCB2cC5mcm9tLCB2cC50byk7XG4gICAgfSk7XG4gICAgc3RhdGUuZnJvbSA9IHZwLmZyb207IHN0YXRlLnRvID0gdnAudG87XG4gIH1cblxuICBmdW5jdGlvbiBvbkd1dHRlckNsaWNrKGNtLCBsaW5lLCBndXR0ZXIpIHtcbiAgICB2YXIgc3RhdGUgPSBjbS5zdGF0ZS5mb2xkR3V0dGVyO1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcbiAgICB2YXIgb3B0cyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgaWYgKGd1dHRlciAhPSBvcHRzLmd1dHRlcikgcmV0dXJuO1xuICAgIHZhciBmb2xkZWQgPSBpc0ZvbGRlZChjbSwgbGluZSk7XG4gICAgaWYgKGZvbGRlZCkgZm9sZGVkLmNsZWFyKCk7XG4gICAgZWxzZSBjbS5mb2xkQ29kZShQb3MobGluZSwgMCksIG9wdHMucmFuZ2VGaW5kZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaGFuZ2UoY20pIHtcbiAgICB2YXIgc3RhdGUgPSBjbS5zdGF0ZS5mb2xkR3V0dGVyO1xuICAgIGlmICghc3RhdGUpIHJldHVybjtcbiAgICB2YXIgb3B0cyA9IHN0YXRlLm9wdGlvbnM7XG4gICAgc3RhdGUuZnJvbSA9IHN0YXRlLnRvID0gMDtcbiAgICBjbGVhclRpbWVvdXQoc3RhdGUuY2hhbmdlVXBkYXRlKTtcbiAgICBzdGF0ZS5jaGFuZ2VVcGRhdGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB1cGRhdGVJblZpZXdwb3J0KGNtKTsgfSwgb3B0cy5mb2xkT25DaGFuZ2VUaW1lU3BhbiB8fCA2MDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25WaWV3cG9ydENoYW5nZShjbSkge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBvcHRzID0gc3RhdGUub3B0aW9ucztcbiAgICBjbGVhclRpbWVvdXQoc3RhdGUuY2hhbmdlVXBkYXRlKTtcbiAgICBzdGF0ZS5jaGFuZ2VVcGRhdGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHZwID0gY20uZ2V0Vmlld3BvcnQoKTtcbiAgICAgIGlmIChzdGF0ZS5mcm9tID09IHN0YXRlLnRvIHx8IHZwLmZyb20gLSBzdGF0ZS50byA+IDIwIHx8IHN0YXRlLmZyb20gLSB2cC50byA+IDIwKSB7XG4gICAgICAgIHVwZGF0ZUluVmlld3BvcnQoY20pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICh2cC5mcm9tIDwgc3RhdGUuZnJvbSkge1xuICAgICAgICAgICAgdXBkYXRlRm9sZEluZm8oY20sIHZwLmZyb20sIHN0YXRlLmZyb20pO1xuICAgICAgICAgICAgc3RhdGUuZnJvbSA9IHZwLmZyb207XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2cC50byA+IHN0YXRlLnRvKSB7XG4gICAgICAgICAgICB1cGRhdGVGb2xkSW5mbyhjbSwgc3RhdGUudG8sIHZwLnRvKTtcbiAgICAgICAgICAgIHN0YXRlLnRvID0gdnAudG87XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBvcHRzLnVwZGF0ZVZpZXdwb3J0VGltZVNwYW4gfHwgNDAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRm9sZChjbSwgZnJvbSkge1xuICAgIHZhciBzdGF0ZSA9IGNtLnN0YXRlLmZvbGRHdXR0ZXI7XG4gICAgaWYgKCFzdGF0ZSkgcmV0dXJuO1xuICAgIHZhciBsaW5lID0gZnJvbS5saW5lO1xuICAgIGlmIChsaW5lID49IHN0YXRlLmZyb20gJiYgbGluZSA8IHN0YXRlLnRvKVxuICAgICAgdXBkYXRlRm9sZEluZm8oY20sIGxpbmUsIGxpbmUgKyAxKTtcbiAgfVxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJHbG9iYWxIZWxwZXIoXCJmb2xkXCIsIFwiY29tbWVudFwiLCBmdW5jdGlvbihtb2RlKSB7XG4gIHJldHVybiBtb2RlLmJsb2NrQ29tbWVudFN0YXJ0ICYmIG1vZGUuYmxvY2tDb21tZW50RW5kO1xufSwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBtb2RlID0gY20uZ2V0TW9kZUF0KHN0YXJ0KSwgc3RhcnRUb2tlbiA9IG1vZGUuYmxvY2tDb21tZW50U3RhcnQsIGVuZFRva2VuID0gbW9kZS5ibG9ja0NvbW1lbnRFbmQ7XG4gIGlmICghc3RhcnRUb2tlbiB8fCAhZW5kVG9rZW4pIHJldHVybjtcbiAgdmFyIGxpbmUgPSBzdGFydC5saW5lLCBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSk7XG5cbiAgdmFyIHN0YXJ0Q2g7XG4gIGZvciAodmFyIGF0ID0gc3RhcnQuY2gsIHBhc3MgPSAwOzspIHtcbiAgICB2YXIgZm91bmQgPSBhdCA8PSAwID8gLTEgOiBsaW5lVGV4dC5sYXN0SW5kZXhPZihzdGFydFRva2VuLCBhdCAtIDEpO1xuICAgIGlmIChmb3VuZCA9PSAtMSkge1xuICAgICAgaWYgKHBhc3MgPT0gMSkgcmV0dXJuO1xuICAgICAgcGFzcyA9IDE7XG4gICAgICBhdCA9IGxpbmVUZXh0Lmxlbmd0aDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocGFzcyA9PSAxICYmIGZvdW5kIDwgc3RhcnQuY2gpIHJldHVybjtcbiAgICBpZiAoL2NvbW1lbnQvLnRlc3QoY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgZm91bmQgKyAxKSkpICYmXG4gICAgICAgIChmb3VuZCA9PSAwIHx8IGxpbmVUZXh0LnNsaWNlKGZvdW5kIC0gZW5kVG9rZW4ubGVuZ3RoLCBmb3VuZCkgPT0gZW5kVG9rZW4gfHxcbiAgICAgICAgICEvY29tbWVudC8udGVzdChjbS5nZXRUb2tlblR5cGVBdChDb2RlTWlycm9yLlBvcyhsaW5lLCBmb3VuZCkpKSkpIHtcbiAgICAgIHN0YXJ0Q2ggPSBmb3VuZCArIHN0YXJ0VG9rZW4ubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGF0ID0gZm91bmQgLSAxO1xuICB9XG5cbiAgdmFyIGRlcHRoID0gMSwgbGFzdExpbmUgPSBjbS5sYXN0TGluZSgpLCBlbmQsIGVuZENoO1xuICBvdXRlcjogZm9yICh2YXIgaSA9IGxpbmU7IGkgPD0gbGFzdExpbmU7ICsraSkge1xuICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgcG9zID0gaSA9PSBsaW5lID8gc3RhcnRDaCA6IDA7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG5leHRPcGVuID0gdGV4dC5pbmRleE9mKHN0YXJ0VG9rZW4sIHBvcyksIG5leHRDbG9zZSA9IHRleHQuaW5kZXhPZihlbmRUb2tlbiwgcG9zKTtcbiAgICAgIGlmIChuZXh0T3BlbiA8IDApIG5leHRPcGVuID0gdGV4dC5sZW5ndGg7XG4gICAgICBpZiAobmV4dENsb3NlIDwgMCkgbmV4dENsb3NlID0gdGV4dC5sZW5ndGg7XG4gICAgICBwb3MgPSBNYXRoLm1pbihuZXh0T3BlbiwgbmV4dENsb3NlKTtcbiAgICAgIGlmIChwb3MgPT0gdGV4dC5sZW5ndGgpIGJyZWFrO1xuICAgICAgaWYgKHBvcyA9PSBuZXh0T3BlbikgKytkZXB0aDtcbiAgICAgIGVsc2UgaWYgKCEtLWRlcHRoKSB7IGVuZCA9IGk7IGVuZENoID0gcG9zOyBicmVhayBvdXRlcjsgfVxuICAgICAgKytwb3M7XG4gICAgfVxuICB9XG4gIGlmIChlbmQgPT0gbnVsbCB8fCBsaW5lID09IGVuZCAmJiBlbmRDaCA9PSBzdGFydENoKSByZXR1cm47XG4gIHJldHVybiB7ZnJvbTogQ29kZU1pcnJvci5Qb3MobGluZSwgc3RhcnRDaCksXG4gICAgICAgICAgdG86IENvZGVNaXJyb3IuUG9zKGVuZCwgZW5kQ2gpfTtcbn0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gbGluZUluZGVudChjbSwgbGluZU5vKSB7XG4gIHZhciB0ZXh0ID0gY20uZ2V0TGluZShsaW5lTm8pXG4gIHZhciBzcGFjZVRvID0gdGV4dC5zZWFyY2goL1xcUy8pXG4gIGlmIChzcGFjZVRvID09IC0xIHx8IC9cXGJjb21tZW50XFxiLy50ZXN0KGNtLmdldFRva2VuVHlwZUF0KENvZGVNaXJyb3IuUG9zKGxpbmVObywgc3BhY2VUbyArIDEpKSkpXG4gICAgcmV0dXJuIC0xXG4gIHJldHVybiBDb2RlTWlycm9yLmNvdW50Q29sdW1uKHRleHQsIG51bGwsIGNtLmdldE9wdGlvbihcInRhYlNpemVcIikpXG59XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiaW5kZW50XCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICB2YXIgbXlJbmRlbnQgPSBsaW5lSW5kZW50KGNtLCBzdGFydC5saW5lKVxuICBpZiAobXlJbmRlbnQgPCAwKSByZXR1cm5cbiAgdmFyIGxhc3RMaW5lSW5Gb2xkID0gbnVsbFxuXG4gIC8vIEdvIHRocm91Z2ggbGluZXMgdW50aWwgd2UgZmluZCBhIGxpbmUgdGhhdCBkZWZpbml0ZWx5IGRvZXNuJ3QgYmVsb25nIGluXG4gIC8vIHRoZSBibG9jayB3ZSdyZSBmb2xkaW5nLCBvciB0byB0aGUgZW5kLlxuICBmb3IgKHZhciBpID0gc3RhcnQubGluZSArIDEsIGVuZCA9IGNtLmxhc3RMaW5lKCk7IGkgPD0gZW5kOyArK2kpIHtcbiAgICB2YXIgaW5kZW50ID0gbGluZUluZGVudChjbSwgaSlcbiAgICBpZiAoaW5kZW50ID09IC0xKSB7XG4gICAgfSBlbHNlIGlmIChpbmRlbnQgPiBteUluZGVudCkge1xuICAgICAgLy8gTGluZXMgd2l0aCBhIGdyZWF0ZXIgaW5kZW50IGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGJsb2NrLlxuICAgICAgbGFzdExpbmVJbkZvbGQgPSBpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGlzIGxpbmUgaGFzIG5vbi1zcGFjZSwgbm9uLWNvbW1lbnQgY29udGVudCwgYW5kIGlzXG4gICAgICAvLyBpbmRlbnRlZCBsZXNzIG9yIGVxdWFsIHRvIHRoZSBzdGFydCBsaW5lLCBpdCBpcyB0aGUgc3RhcnQgb2ZcbiAgICAgIC8vIGFub3RoZXIgYmxvY2suXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGxhc3RMaW5lSW5Gb2xkKSByZXR1cm4ge1xuICAgIGZyb206IENvZGVNaXJyb3IuUG9zKHN0YXJ0LmxpbmUsIGNtLmdldExpbmUoc3RhcnQubGluZSkubGVuZ3RoKSxcbiAgICB0bzogQ29kZU1pcnJvci5Qb3MobGFzdExpbmVJbkZvbGQsIGNtLmdldExpbmUobGFzdExpbmVJbkZvbGQpLmxlbmd0aClcbiAgfTtcbn0pO1xuXG59KTtcbiIsIi8vIENvZGVNaXJyb3IsIGNvcHlyaWdodCAoYykgYnkgTWFyaWpuIEhhdmVyYmVrZSBhbmQgb3RoZXJzXG4vLyBEaXN0cmlidXRlZCB1bmRlciBhbiBNSVQgbGljZW5zZTogaHR0cHM6Ly9jb2RlbWlycm9yLm5ldC9MSUNFTlNFXG5cbihmdW5jdGlvbihtb2QpIHtcbiAgaWYgKHR5cGVvZiBleHBvcnRzID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZSA9PSBcIm9iamVjdFwiKSAvLyBDb21tb25KU1xuICAgIG1vZChyZXF1aXJlKFwiLi4vLi4vbGliL2NvZGVtaXJyb3JcIikpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSAvLyBBTURcbiAgICBkZWZpbmUoW1wiLi4vLi4vbGliL2NvZGVtaXJyb3JcIl0sIG1vZCk7XG4gIGVsc2UgLy8gUGxhaW4gYnJvd3NlciBlbnZcbiAgICBtb2QoQ29kZU1pcnJvcik7XG59KShmdW5jdGlvbihDb2RlTWlycm9yKSB7XG5cInVzZSBzdHJpY3RcIjtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJicmFjZVwiLCBmdW5jdGlvbihjbSwgc3RhcnQpIHtcbiAgdmFyIGxpbmUgPSBzdGFydC5saW5lLCBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSk7XG4gIHZhciB0b2tlblR5cGU7XG5cbiAgZnVuY3Rpb24gZmluZE9wZW5pbmcob3BlbkNoKSB7XG4gICAgZm9yICh2YXIgYXQgPSBzdGFydC5jaCwgcGFzcyA9IDA7Oykge1xuICAgICAgdmFyIGZvdW5kID0gYXQgPD0gMCA/IC0xIDogbGluZVRleHQubGFzdEluZGV4T2Yob3BlbkNoLCBhdCAtIDEpO1xuICAgICAgaWYgKGZvdW5kID09IC0xKSB7XG4gICAgICAgIGlmIChwYXNzID09IDEpIGJyZWFrO1xuICAgICAgICBwYXNzID0gMTtcbiAgICAgICAgYXQgPSBsaW5lVGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHBhc3MgPT0gMSAmJiBmb3VuZCA8IHN0YXJ0LmNoKSBicmVhaztcbiAgICAgIHRva2VuVHlwZSA9IGNtLmdldFRva2VuVHlwZUF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIGZvdW5kICsgMSkpO1xuICAgICAgaWYgKCEvXihjb21tZW50fHN0cmluZykvLnRlc3QodG9rZW5UeXBlKSkgcmV0dXJuIGZvdW5kICsgMTtcbiAgICAgIGF0ID0gZm91bmQgLSAxO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGFydFRva2VuID0gXCJ7XCIsIGVuZFRva2VuID0gXCJ9XCIsIHN0YXJ0Q2ggPSBmaW5kT3BlbmluZyhcIntcIik7XG4gIGlmIChzdGFydENoID09IG51bGwpIHtcbiAgICBzdGFydFRva2VuID0gXCJbXCIsIGVuZFRva2VuID0gXCJdXCI7XG4gICAgc3RhcnRDaCA9IGZpbmRPcGVuaW5nKFwiW1wiKTtcbiAgfVxuXG4gIGlmIChzdGFydENoID09IG51bGwpIHJldHVybjtcbiAgdmFyIGNvdW50ID0gMSwgbGFzdExpbmUgPSBjbS5sYXN0TGluZSgpLCBlbmQsIGVuZENoO1xuICBvdXRlcjogZm9yICh2YXIgaSA9IGxpbmU7IGkgPD0gbGFzdExpbmU7ICsraSkge1xuICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgcG9zID0gaSA9PSBsaW5lID8gc3RhcnRDaCA6IDA7XG4gICAgZm9yICg7Oykge1xuICAgICAgdmFyIG5leHRPcGVuID0gdGV4dC5pbmRleE9mKHN0YXJ0VG9rZW4sIHBvcyksIG5leHRDbG9zZSA9IHRleHQuaW5kZXhPZihlbmRUb2tlbiwgcG9zKTtcbiAgICAgIGlmIChuZXh0T3BlbiA8IDApIG5leHRPcGVuID0gdGV4dC5sZW5ndGg7XG4gICAgICBpZiAobmV4dENsb3NlIDwgMCkgbmV4dENsb3NlID0gdGV4dC5sZW5ndGg7XG4gICAgICBwb3MgPSBNYXRoLm1pbihuZXh0T3BlbiwgbmV4dENsb3NlKTtcbiAgICAgIGlmIChwb3MgPT0gdGV4dC5sZW5ndGgpIGJyZWFrO1xuICAgICAgaWYgKGNtLmdldFRva2VuVHlwZUF0KENvZGVNaXJyb3IuUG9zKGksIHBvcyArIDEpKSA9PSB0b2tlblR5cGUpIHtcbiAgICAgICAgaWYgKHBvcyA9PSBuZXh0T3BlbikgKytjb3VudDtcbiAgICAgICAgZWxzZSBpZiAoIS0tY291bnQpIHsgZW5kID0gaTsgZW5kQ2ggPSBwb3M7IGJyZWFrIG91dGVyOyB9XG4gICAgICB9XG4gICAgICArK3BvcztcbiAgICB9XG4gIH1cbiAgaWYgKGVuZCA9PSBudWxsIHx8IGxpbmUgPT0gZW5kICYmIGVuZENoID09IHN0YXJ0Q2gpIHJldHVybjtcbiAgcmV0dXJuIHtmcm9tOiBDb2RlTWlycm9yLlBvcyhsaW5lLCBzdGFydENoKSxcbiAgICAgICAgICB0bzogQ29kZU1pcnJvci5Qb3MoZW5kLCBlbmRDaCl9O1xufSk7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwiaW1wb3J0XCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbXBvcnQobGluZSkge1xuICAgIGlmIChsaW5lIDwgY20uZmlyc3RMaW5lKCkgfHwgbGluZSA+IGNtLmxhc3RMaW5lKCkpIHJldHVybiBudWxsO1xuICAgIHZhciBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgMSkpO1xuICAgIGlmICghL1xcUy8udGVzdChzdGFydC5zdHJpbmcpKSBzdGFydCA9IGNtLmdldFRva2VuQXQoQ29kZU1pcnJvci5Qb3MobGluZSwgc3RhcnQuZW5kICsgMSkpO1xuICAgIGlmIChzdGFydC50eXBlICE9IFwia2V5d29yZFwiIHx8IHN0YXJ0LnN0cmluZyAhPSBcImltcG9ydFwiKSByZXR1cm4gbnVsbDtcbiAgICAvLyBOb3cgZmluZCBjbG9zaW5nIHNlbWljb2xvbiwgcmV0dXJuIGl0cyBwb3NpdGlvblxuICAgIGZvciAodmFyIGkgPSBsaW5lLCBlID0gTWF0aC5taW4oY20ubGFzdExpbmUoKSwgbGluZSArIDEwKTsgaSA8PSBlOyArK2kpIHtcbiAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgc2VtaSA9IHRleHQuaW5kZXhPZihcIjtcIik7XG4gICAgICBpZiAoc2VtaSAhPSAtMSkgcmV0dXJuIHtzdGFydENoOiBzdGFydC5lbmQsIGVuZDogQ29kZU1pcnJvci5Qb3MoaSwgc2VtaSl9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGFydExpbmUgPSBzdGFydC5saW5lLCBoYXMgPSBoYXNJbXBvcnQoc3RhcnRMaW5lKSwgcHJldjtcbiAgaWYgKCFoYXMgfHwgaGFzSW1wb3J0KHN0YXJ0TGluZSAtIDEpIHx8ICgocHJldiA9IGhhc0ltcG9ydChzdGFydExpbmUgLSAyKSkgJiYgcHJldi5lbmQubGluZSA9PSBzdGFydExpbmUgLSAxKSlcbiAgICByZXR1cm4gbnVsbDtcbiAgZm9yICh2YXIgZW5kID0gaGFzLmVuZDs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbXBvcnQoZW5kLmxpbmUgKyAxKTtcbiAgICBpZiAobmV4dCA9PSBudWxsKSBicmVhaztcbiAgICBlbmQgPSBuZXh0LmVuZDtcbiAgfVxuICByZXR1cm4ge2Zyb206IGNtLmNsaXBQb3MoQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMuc3RhcnRDaCArIDEpKSwgdG86IGVuZH07XG59KTtcblxuQ29kZU1pcnJvci5yZWdpc3RlckhlbHBlcihcImZvbGRcIiwgXCJpbmNsdWRlXCIsIGZ1bmN0aW9uKGNtLCBzdGFydCkge1xuICBmdW5jdGlvbiBoYXNJbmNsdWRlKGxpbmUpIHtcbiAgICBpZiAobGluZSA8IGNtLmZpcnN0TGluZSgpIHx8IGxpbmUgPiBjbS5sYXN0TGluZSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIDEpKTtcbiAgICBpZiAoIS9cXFMvLnRlc3Qoc3RhcnQuc3RyaW5nKSkgc3RhcnQgPSBjbS5nZXRUb2tlbkF0KENvZGVNaXJyb3IuUG9zKGxpbmUsIHN0YXJ0LmVuZCArIDEpKTtcbiAgICBpZiAoc3RhcnQudHlwZSA9PSBcIm1ldGFcIiAmJiBzdGFydC5zdHJpbmcuc2xpY2UoMCwgOCkgPT0gXCIjaW5jbHVkZVwiKSByZXR1cm4gc3RhcnQuc3RhcnQgKyA4O1xuICB9XG5cbiAgdmFyIHN0YXJ0TGluZSA9IHN0YXJ0LmxpbmUsIGhhcyA9IGhhc0luY2x1ZGUoc3RhcnRMaW5lKTtcbiAgaWYgKGhhcyA9PSBudWxsIHx8IGhhc0luY2x1ZGUoc3RhcnRMaW5lIC0gMSkgIT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIGZvciAodmFyIGVuZCA9IHN0YXJ0TGluZTs7KSB7XG4gICAgdmFyIG5leHQgPSBoYXNJbmNsdWRlKGVuZCArIDEpO1xuICAgIGlmIChuZXh0ID09IG51bGwpIGJyZWFrO1xuICAgICsrZW5kO1xuICB9XG4gIHJldHVybiB7ZnJvbTogQ29kZU1pcnJvci5Qb3Moc3RhcnRMaW5lLCBoYXMgKyAxKSxcbiAgICAgICAgICB0bzogY20uY2xpcFBvcyhDb2RlTWlycm9yLlBvcyhlbmQpKX07XG59KTtcblxufSk7XG4iLCIvLyBDb2RlTWlycm9yLCBjb3B5cmlnaHQgKGMpIGJ5IE1hcmlqbiBIYXZlcmJla2UgYW5kIG90aGVyc1xuLy8gRGlzdHJpYnV0ZWQgdW5kZXIgYW4gTUlUIGxpY2Vuc2U6IGh0dHBzOi8vY29kZW1pcnJvci5uZXQvTElDRU5TRVxuXG4oZnVuY3Rpb24obW9kKSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUgPT0gXCJvYmplY3RcIikgLy8gQ29tbW9uSlNcbiAgICBtb2QocmVxdWlyZShcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCIpKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkgLy8gQU1EXG4gICAgZGVmaW5lKFtcIi4uLy4uL2xpYi9jb2RlbWlycm9yXCJdLCBtb2QpO1xuICBlbHNlIC8vIFBsYWluIGJyb3dzZXIgZW52XG4gICAgbW9kKENvZGVNaXJyb3IpO1xufSkoZnVuY3Rpb24oQ29kZU1pcnJvcikge1xuXCJ1c2Ugc3RyaWN0XCI7XG5cbkNvZGVNaXJyb3IucmVnaXN0ZXJIZWxwZXIoXCJmb2xkXCIsIFwibWFya2Rvd25cIiwgZnVuY3Rpb24oY20sIHN0YXJ0KSB7XG4gIHZhciBtYXhEZXB0aCA9IDEwMDtcblxuICBmdW5jdGlvbiBpc0hlYWRlcihsaW5lTm8pIHtcbiAgICB2YXIgdG9rZW50eXBlID0gY20uZ2V0VG9rZW5UeXBlQXQoQ29kZU1pcnJvci5Qb3MobGluZU5vLCAwKSk7XG4gICAgcmV0dXJuIHRva2VudHlwZSAmJiAvXFxiaGVhZGVyXFxiLy50ZXN0KHRva2VudHlwZSk7XG4gIH1cblxuICBmdW5jdGlvbiBoZWFkZXJMZXZlbChsaW5lTm8sIGxpbmUsIG5leHRMaW5lKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZSAmJiBsaW5lLm1hdGNoKC9eIysvKTtcbiAgICBpZiAobWF0Y2ggJiYgaXNIZWFkZXIobGluZU5vKSkgcmV0dXJuIG1hdGNoWzBdLmxlbmd0aDtcbiAgICBtYXRjaCA9IG5leHRMaW5lICYmIG5leHRMaW5lLm1hdGNoKC9eWz1cXC1dK1xccyokLyk7XG4gICAgaWYgKG1hdGNoICYmIGlzSGVhZGVyKGxpbmVObyArIDEpKSByZXR1cm4gbmV4dExpbmVbMF0gPT0gXCI9XCIgPyAxIDogMjtcbiAgICByZXR1cm4gbWF4RGVwdGg7XG4gIH1cblxuICB2YXIgZmlyc3RMaW5lID0gY20uZ2V0TGluZShzdGFydC5saW5lKSwgbmV4dExpbmUgPSBjbS5nZXRMaW5lKHN0YXJ0LmxpbmUgKyAxKTtcbiAgdmFyIGxldmVsID0gaGVhZGVyTGV2ZWwoc3RhcnQubGluZSwgZmlyc3RMaW5lLCBuZXh0TGluZSk7XG4gIGlmIChsZXZlbCA9PT0gbWF4RGVwdGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgdmFyIGxhc3RMaW5lTm8gPSBjbS5sYXN0TGluZSgpO1xuICB2YXIgZW5kID0gc3RhcnQubGluZSwgbmV4dE5leHRMaW5lID0gY20uZ2V0TGluZShlbmQgKyAyKTtcbiAgd2hpbGUgKGVuZCA8IGxhc3RMaW5lTm8pIHtcbiAgICBpZiAoaGVhZGVyTGV2ZWwoZW5kICsgMSwgbmV4dExpbmUsIG5leHROZXh0TGluZSkgPD0gbGV2ZWwpIGJyZWFrO1xuICAgICsrZW5kO1xuICAgIG5leHRMaW5lID0gbmV4dE5leHRMaW5lO1xuICAgIG5leHROZXh0TGluZSA9IGNtLmdldExpbmUoZW5kICsgMik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZyb206IENvZGVNaXJyb3IuUG9zKHN0YXJ0LmxpbmUsIGZpcnN0TGluZS5sZW5ndGgpLFxuICAgIHRvOiBDb2RlTWlycm9yLlBvcyhlbmQsIGNtLmdldExpbmUoZW5kKS5sZW5ndGgpXG4gIH07XG59KTtcblxufSk7XG4iLCIvKipcbiAqIG1hcmtlZCAtIGEgbWFya2Rvd24gcGFyc2VyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCwgQ2hyaXN0b3BoZXIgSmVmZnJleS4gKE1JVCBMaWNlbnNlZClcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWRcbiAqL1xuXG47KGZ1bmN0aW9uKHJvb3QpIHtcbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCbG9jay1MZXZlbCBHcmFtbWFyXG4gKi9cblxudmFyIGJsb2NrID0ge1xuICBuZXdsaW5lOiAvXlxcbisvLFxuICBjb2RlOiAvXiggezR9W15cXG5dK1xcbiopKy8sXG4gIGZlbmNlczogbm9vcCxcbiAgaHI6IC9eIHswLDN9KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKS8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSAqKFteXFxuXSs/KSAqKD86IysgKik/KD86XFxuK3wkKS8sXG4gIG5wdGFibGU6IG5vb3AsXG4gIGJsb2NrcXVvdGU6IC9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cXG5dKikoPzpcXG58JCkpKy8sXG4gIGxpc3Q6IC9eKCAqKShidWxsKSBbXFxzXFxTXSs/KD86aHJ8ZGVmfFxcbnsyLH0oPyEgKSg/IVxcMWJ1bGwgKVxcbip8XFxzKiQpLyxcbiAgaHRtbDogJ14gezAsM30oPzonIC8vIG9wdGlvbmFsIGluZGVudGF0aW9uXG4gICAgKyAnPChzY3JpcHR8cHJlfHN0eWxlKVtcXFxccz5dW1xcXFxzXFxcXFNdKj8oPzo8L1xcXFwxPlteXFxcXG5dKlxcXFxuK3wkKScgLy8gKDEpXG4gICAgKyAnfGNvbW1lbnRbXlxcXFxuXSooXFxcXG4rfCQpJyAvLyAoMilcbiAgICArICd8PFxcXFw/W1xcXFxzXFxcXFNdKj9cXFxcPz5cXFxcbionIC8vICgzKVxuICAgICsgJ3w8IVtBLVpdW1xcXFxzXFxcXFNdKj8+XFxcXG4qJyAvLyAoNClcbiAgICArICd8PCFcXFxcW0NEQVRBXFxcXFtbXFxcXHNcXFxcU10qP1xcXFxdXFxcXF0+XFxcXG4qJyAvLyAoNSlcbiAgICArICd8PC8/KHRhZykoPzogK3xcXFxcbnwvPz4pW1xcXFxzXFxcXFNdKj8oPzpcXFxcbnsyLH18JCknIC8vICg2KVxuICAgICsgJ3w8KD8hc2NyaXB0fHByZXxzdHlsZSkoW2Etel1bXFxcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIG9wZW4gdGFnXG4gICAgKyAnfDwvKD8hc2NyaXB0fHByZXxzdHlsZSlbYS16XVtcXFxcdy1dKlxcXFxzKj4oPz1cXFxcaCpcXFxcbilbXFxcXHNcXFxcU10qPyg/OlxcXFxuezIsfXwkKScgLy8gKDcpIGNsb3NpbmcgdGFnXG4gICAgKyAnKScsXG4gIGRlZjogL14gezAsM31cXFsobGFiZWwpXFxdOiAqXFxuPyAqPD8oW15cXHM+XSspPj8oPzooPzogK1xcbj8gKnwgKlxcbiAqKSh0aXRsZSkpPyAqKD86XFxuK3wkKS8sXG4gIHRhYmxlOiBub29wLFxuICBsaGVhZGluZzogL14oW15cXG5dKylcXG4gKig9fC0pezIsfSAqKD86XFxuK3wkKS8sXG4gIHBhcmFncmFwaDogL14oW15cXG5dKyg/Olxcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8IHswLDN9Pnw8XFwvPyg/OnRhZykoPzogK3xcXG58XFwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfCEtLSkpW15cXG5dKykqKS8sXG4gIHRleHQ6IC9eW15cXG5dKy9cbn07XG5cbmJsb2NrLl9sYWJlbCA9IC8oPyFcXHMqXFxdKSg/OlxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKy87XG5ibG9jay5fdGl0bGUgPSAvKD86XCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8J1teJ1xcbl0qKD86XFxuW14nXFxuXSspKlxcbj8nfFxcKFteKCldKlxcKSkvO1xuYmxvY2suZGVmID0gZWRpdChibG9jay5kZWYpXG4gIC5yZXBsYWNlKCdsYWJlbCcsIGJsb2NrLl9sYWJlbClcbiAgLnJlcGxhY2UoJ3RpdGxlJywgYmxvY2suX3RpdGxlKVxuICAuZ2V0UmVnZXgoKTtcblxuYmxvY2suYnVsbGV0ID0gLyg/OlsqKy1dfFxcZCtcXC4pLztcbmJsb2NrLml0ZW0gPSAvXiggKikoYnVsbCkgW15cXG5dKig/Olxcbig/IVxcMWJ1bGwgKVteXFxuXSopKi87XG5ibG9jay5pdGVtID0gZWRpdChibG9jay5pdGVtLCAnZ20nKVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5saXN0ID0gZWRpdChibG9jay5saXN0KVxuICAucmVwbGFjZSgvYnVsbC9nLCBibG9jay5idWxsZXQpXG4gIC5yZXBsYWNlKCdocicsICdcXFxcbisoPz1cXFxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXFxcKiAqKXszLH0pKD86XFxcXG4rfCQpKScpXG4gIC5yZXBsYWNlKCdkZWYnLCAnXFxcXG4rKD89JyArIGJsb2NrLmRlZi5zb3VyY2UgKyAnKScpXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5fdGFnID0gJ2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9uJ1xuICArICd8Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb24nXG4gICsgJ3xmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lJ1xuICArICd8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbidcbiAgKyAnfHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cidcbiAgKyAnfHRyYWNrfHVsJztcbmJsb2NrLl9jb21tZW50ID0gLzwhLS0oPyEtPz4pW1xcc1xcU10qPy0tPi87XG5ibG9jay5odG1sID0gZWRpdChibG9jay5odG1sLCAnaScpXG4gIC5yZXBsYWNlKCdjb21tZW50JywgYmxvY2suX2NvbW1lbnQpXG4gIC5yZXBsYWNlKCd0YWcnLCBibG9jay5fdGFnKVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgLyArW2EtekEtWjpfXVtcXHcuOi1dKig/OiAqPSAqXCJbXlwiXFxuXSpcInwgKj0gKidbXidcXG5dKid8ICo9ICpbXlxcc1wiJz08PmBdKyk/LylcbiAgLmdldFJlZ2V4KCk7XG5cbmJsb2NrLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnaHInLCBibG9jay5ocilcbiAgLnJlcGxhY2UoJ2hlYWRpbmcnLCBibG9jay5oZWFkaW5nKVxuICAucmVwbGFjZSgnbGhlYWRpbmcnLCBibG9jay5saGVhZGluZylcbiAgLnJlcGxhY2UoJ3RhZycsIGJsb2NrLl90YWcpIC8vIHBhcnMgY2FuIGJlIGludGVycnVwdGVkIGJ5IHR5cGUgKDYpIGh0bWwgYmxvY2tzXG4gIC5nZXRSZWdleCgpO1xuXG5ibG9jay5ibG9ja3F1b3RlID0gZWRpdChibG9jay5ibG9ja3F1b3RlKVxuICAucmVwbGFjZSgncGFyYWdyYXBoJywgYmxvY2sucGFyYWdyYXBoKVxuICAuZ2V0UmVnZXgoKTtcblxuLyoqXG4gKiBOb3JtYWwgQmxvY2sgR3JhbW1hclxuICovXG5cbmJsb2NrLm5vcm1hbCA9IG1lcmdlKHt9LCBibG9jayk7XG5cbi8qKlxuICogR0ZNIEJsb2NrIEdyYW1tYXJcbiAqL1xuXG5ibG9jay5nZm0gPSBtZXJnZSh7fSwgYmxvY2subm9ybWFsLCB7XG4gIGZlbmNlczogL14gKihgezMsfXx+ezMsfSlbIFxcLl0qKFxcUyspPyAqXFxuKFtcXHNcXFNdKj8pXFxuPyAqXFwxICooPzpcXG4rfCQpLyxcbiAgcGFyYWdyYXBoOiAvXi8sXG4gIGhlYWRpbmc6IC9eICooI3sxLDZ9KSArKFteXFxuXSs/KSAqIyogKig/Olxcbit8JCkvXG59KTtcblxuYmxvY2suZ2ZtLnBhcmFncmFwaCA9IGVkaXQoYmxvY2sucGFyYWdyYXBoKVxuICAucmVwbGFjZSgnKD8hJywgJyg/ISdcbiAgICArIGJsb2NrLmdmbS5mZW5jZXMuc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwyJykgKyAnfCdcbiAgICArIGJsb2NrLmxpc3Quc291cmNlLnJlcGxhY2UoJ1xcXFwxJywgJ1xcXFwzJykgKyAnfCcpXG4gIC5nZXRSZWdleCgpO1xuXG4vKipcbiAqIEdGTSArIFRhYmxlcyBCbG9jayBHcmFtbWFyXG4gKi9cblxuYmxvY2sudGFibGVzID0gbWVyZ2Uoe30sIGJsb2NrLmdmbSwge1xuICBucHRhYmxlOiAvXiAqKFtefFxcbiBdLipcXHwuKilcXG4gKihbLTpdKyAqXFx8Wy18IDpdKikoPzpcXG4oKD86LipbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS8sXG4gIHRhYmxlOiAvXiAqXFx8KC4rKVxcbiAqXFx8PyggKlstOl0rWy18IDpdKikoPzpcXG4oKD86ICpbXj5cXG4gXS4qKD86XFxufCQpKSopXFxuKnwkKS9cbn0pO1xuXG4vKipcbiAqIFBlZGFudGljIGdyYW1tYXJcbiAqL1xuXG5ibG9jay5wZWRhbnRpYyA9IG1lcmdlKHt9LCBibG9jay5ub3JtYWwsIHtcbiAgaHRtbDogZWRpdChcbiAgICAnXiAqKD86Y29tbWVudCAqKD86XFxcXG58XFxcXHMqJCknXG4gICAgKyAnfDwodGFnKVtcXFxcc1xcXFxTXSs/PC9cXFxcMT4gKig/OlxcXFxuezIsfXxcXFxccyokKScgLy8gY2xvc2VkIHRhZ1xuICAgICsgJ3w8dGFnKD86XCJbXlwiXSpcInxcXCdbXlxcJ10qXFwnfFxcXFxzW15cXCdcIi8+XFxcXHNdKikqPy8/PiAqKD86XFxcXG57Mix9fFxcXFxzKiQpKScpXG4gICAgLnJlcGxhY2UoJ2NvbW1lbnQnLCBibG9jay5fY29tbWVudClcbiAgICAucmVwbGFjZSgvdGFnL2csICcoPyEoPzonXG4gICAgICArICdhfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3ViJ1xuICAgICAgKyAnfHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZyknXG4gICAgICArICdcXFxcYilcXFxcdysoPyE6fFteXFxcXHdcXFxcc0BdKkApXFxcXGInKVxuICAgIC5nZXRSZWdleCgpLFxuICBkZWY6IC9eICpcXFsoW15cXF1dKylcXF06ICo8PyhbXlxccz5dKyk+Pyg/OiArKFtcIihdW15cXG5dK1tcIildKSk/ICooPzpcXG4rfCQpL1xufSk7XG5cbi8qKlxuICogQmxvY2sgTGV4ZXJcbiAqL1xuXG5mdW5jdGlvbiBMZXhlcihvcHRpb25zKSB7XG4gIHRoaXMudG9rZW5zID0gW107XG4gIHRoaXMudG9rZW5zLmxpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBtYXJrZWQuZGVmYXVsdHM7XG4gIHRoaXMucnVsZXMgPSBibG9jay5ub3JtYWw7XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5wZWRhbnRpYykge1xuICAgIHRoaXMucnVsZXMgPSBibG9jay5wZWRhbnRpYztcbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2ZtKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50YWJsZXMpIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay50YWJsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBibG9jay5nZm07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRXhwb3NlIEJsb2NrIFJ1bGVzXG4gKi9cblxuTGV4ZXIucnVsZXMgPSBibG9jaztcblxuLyoqXG4gKiBTdGF0aWMgTGV4IE1ldGhvZFxuICovXG5cbkxleGVyLmxleCA9IGZ1bmN0aW9uKHNyYywgb3B0aW9ucykge1xuICB2YXIgbGV4ZXIgPSBuZXcgTGV4ZXIob3B0aW9ucyk7XG4gIHJldHVybiBsZXhlci5sZXgoc3JjKTtcbn07XG5cbi8qKlxuICogUHJlcHJvY2Vzc2luZ1xuICovXG5cbkxleGVyLnByb3RvdHlwZS5sZXggPSBmdW5jdGlvbihzcmMpIHtcbiAgc3JjID0gc3JjXG4gICAgLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoL1xcdC9nLCAnICAgICcpXG4gICAgLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKVxuICAgIC5yZXBsYWNlKC9cXHUyNDI0L2csICdcXG4nKTtcblxuICByZXR1cm4gdGhpcy50b2tlbihzcmMsIHRydWUpO1xufTtcblxuLyoqXG4gKiBMZXhpbmdcbiAqL1xuXG5MZXhlci5wcm90b3R5cGUudG9rZW4gPSBmdW5jdGlvbihzcmMsIHRvcCkge1xuICBzcmMgPSBzcmMucmVwbGFjZSgvXiArJC9nbSwgJycpO1xuICB2YXIgbmV4dCxcbiAgICAgIGxvb3NlLFxuICAgICAgY2FwLFxuICAgICAgYnVsbCxcbiAgICAgIGIsXG4gICAgICBpdGVtLFxuICAgICAgbGlzdFN0YXJ0LFxuICAgICAgbGlzdEl0ZW1zLFxuICAgICAgdCxcbiAgICAgIHNwYWNlLFxuICAgICAgaSxcbiAgICAgIHRhZyxcbiAgICAgIGwsXG4gICAgICBpc29yZGVyZWQsXG4gICAgICBpc3Rhc2ssXG4gICAgICBpc2NoZWNrZWQ7XG5cbiAgd2hpbGUgKHNyYykge1xuICAgIC8vIG5ld2xpbmVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5uZXdsaW5lLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGlmIChjYXBbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAnc3BhY2UnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvZGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5jb2RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eIHs0fS9nbSwgJycpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgdGV4dDogIXRoaXMub3B0aW9ucy5wZWRhbnRpY1xuICAgICAgICAgID8gcnRyaW0oY2FwLCAnXFxuJylcbiAgICAgICAgICA6IGNhcFxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmZW5jZXMgKGdmbSlcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5mZW5jZXMuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdjb2RlJyxcbiAgICAgICAgbGFuZzogY2FwWzJdLFxuICAgICAgICB0ZXh0OiBjYXBbM10gfHwgJydcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaGVhZGluZ1xuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhlYWRpbmcuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdoZWFkaW5nJyxcbiAgICAgICAgZGVwdGg6IGNhcFsxXS5sZW5ndGgsXG4gICAgICAgIHRleHQ6IGNhcFsyXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSBubyBsZWFkaW5nIHBpcGUgKGdmbSlcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLm5wdGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhpdGVtLmNlbGxzW2ldLCBpdGVtLmhlYWRlci5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaChpdGVtKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoclxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmhyLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnaHInXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGJsb2NrcXVvdGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5ibG9ja3F1b3RlLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdibG9ja3F1b3RlX3N0YXJ0J1xuICAgICAgfSk7XG5cbiAgICAgIGNhcCA9IGNhcFswXS5yZXBsYWNlKC9eICo+ID8vZ20sICcnKTtcblxuICAgICAgLy8gUGFzcyBgdG9wYCB0byBrZWVwIHRoZSBjdXJyZW50XG4gICAgICAvLyBcInRvcGxldmVsXCIgc3RhdGUuIFRoaXMgaXMgZXhhY3RseVxuICAgICAgLy8gaG93IG1hcmtkb3duLnBsIHdvcmtzLlxuICAgICAgdGhpcy50b2tlbihjYXAsIHRvcCk7XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnYmxvY2txdW90ZV9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbGlzdFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmxpc3QuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgYnVsbCA9IGNhcFsyXTtcbiAgICAgIGlzb3JkZXJlZCA9IGJ1bGwubGVuZ3RoID4gMTtcblxuICAgICAgbGlzdFN0YXJ0ID0ge1xuICAgICAgICB0eXBlOiAnbGlzdF9zdGFydCcsXG4gICAgICAgIG9yZGVyZWQ6IGlzb3JkZXJlZCxcbiAgICAgICAgc3RhcnQ6IGlzb3JkZXJlZCA/ICtidWxsIDogJycsXG4gICAgICAgIGxvb3NlOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgdGhpcy50b2tlbnMucHVzaChsaXN0U3RhcnQpO1xuXG4gICAgICAvLyBHZXQgZWFjaCB0b3AtbGV2ZWwgaXRlbS5cbiAgICAgIGNhcCA9IGNhcFswXS5tYXRjaCh0aGlzLnJ1bGVzLml0ZW0pO1xuXG4gICAgICBsaXN0SXRlbXMgPSBbXTtcbiAgICAgIG5leHQgPSBmYWxzZTtcbiAgICAgIGwgPSBjYXAubGVuZ3RoO1xuICAgICAgaSA9IDA7XG5cbiAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGl0ZW0gPSBjYXBbaV07XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBsaXN0IGl0ZW0ncyBidWxsZXRcbiAgICAgICAgLy8gc28gaXQgaXMgc2VlbiBhcyB0aGUgbmV4dCB0b2tlbi5cbiAgICAgICAgc3BhY2UgPSBpdGVtLmxlbmd0aDtcbiAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXiAqKFsqKy1dfFxcZCtcXC4pICsvLCAnJyk7XG5cbiAgICAgICAgLy8gT3V0ZGVudCB3aGF0ZXZlciB0aGVcbiAgICAgICAgLy8gbGlzdCBpdGVtIGNvbnRhaW5zLiBIYWNreS5cbiAgICAgICAgaWYgKH5pdGVtLmluZGV4T2YoJ1xcbiAnKSkge1xuICAgICAgICAgIHNwYWNlIC09IGl0ZW0ubGVuZ3RoO1xuICAgICAgICAgIGl0ZW0gPSAhdGhpcy5vcHRpb25zLnBlZGFudGljXG4gICAgICAgICAgICA/IGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCdeIHsxLCcgKyBzcGFjZSArICd9JywgJ2dtJyksICcnKVxuICAgICAgICAgICAgOiBpdGVtLnJlcGxhY2UoL14gezEsNH0vZ20sICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBuZXh0IGxpc3QgaXRlbSBiZWxvbmdzIGhlcmUuXG4gICAgICAgIC8vIEJhY2twZWRhbCBpZiBpdCBkb2VzIG5vdCBiZWxvbmcgaW4gdGhpcyBsaXN0LlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtYXJ0TGlzdHMgJiYgaSAhPT0gbCAtIDEpIHtcbiAgICAgICAgICBiID0gYmxvY2suYnVsbGV0LmV4ZWMoY2FwW2kgKyAxXSlbMF07XG4gICAgICAgICAgaWYgKGJ1bGwgIT09IGIgJiYgIShidWxsLmxlbmd0aCA+IDEgJiYgYi5sZW5ndGggPiAxKSkge1xuICAgICAgICAgICAgc3JjID0gY2FwLnNsaWNlKGkgKyAxKS5qb2luKCdcXG4nKSArIHNyYztcbiAgICAgICAgICAgIGkgPSBsIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciBpdGVtIGlzIGxvb3NlIG9yIG5vdC5cbiAgICAgICAgLy8gVXNlOiAvKF58XFxuKSg/ISApW15cXG5dK1xcblxcbig/IVxccyokKS9cbiAgICAgICAgLy8gZm9yIGRpc2NvdW50IGJlaGF2aW9yLlxuICAgICAgICBsb29zZSA9IG5leHQgfHwgL1xcblxcbig/IVxccyokKS8udGVzdChpdGVtKTtcbiAgICAgICAgaWYgKGkgIT09IGwgLSAxKSB7XG4gICAgICAgICAgbmV4dCA9IGl0ZW0uY2hhckF0KGl0ZW0ubGVuZ3RoIC0gMSkgPT09ICdcXG4nO1xuICAgICAgICAgIGlmICghbG9vc2UpIGxvb3NlID0gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb29zZSkge1xuICAgICAgICAgIGxpc3RTdGFydC5sb29zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgdGFzayBsaXN0IGl0ZW1zXG4gICAgICAgIGlzdGFzayA9IC9eXFxbWyB4WF1cXF0gLy50ZXN0KGl0ZW0pO1xuICAgICAgICBpc2NoZWNrZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpc3Rhc2spIHtcbiAgICAgICAgICBpc2NoZWNrZWQgPSBpdGVtWzFdICE9PSAnICc7XG4gICAgICAgICAgaXRlbSA9IGl0ZW0ucmVwbGFjZSgvXlxcW1sgeFhdXFxdICsvLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0ID0ge1xuICAgICAgICAgIHR5cGU6ICdsaXN0X2l0ZW1fc3RhcnQnLFxuICAgICAgICAgIHRhc2s6IGlzdGFzayxcbiAgICAgICAgICBjaGVja2VkOiBpc2NoZWNrZWQsXG4gICAgICAgICAgbG9vc2U6IGxvb3NlXG4gICAgICAgIH07XG5cbiAgICAgICAgbGlzdEl0ZW1zLnB1c2godCk7XG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2godCk7XG5cbiAgICAgICAgLy8gUmVjdXJzZS5cbiAgICAgICAgdGhpcy50b2tlbihpdGVtLCBmYWxzZSk7XG5cbiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ2xpc3RfaXRlbV9lbmQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobGlzdFN0YXJ0Lmxvb3NlKSB7XG4gICAgICAgIGwgPSBsaXN0SXRlbXMubGVuZ3RoO1xuICAgICAgICBpID0gMDtcbiAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBsaXN0SXRlbXNbaV0ubG9vc2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9rZW5zLnB1c2goe1xuICAgICAgICB0eXBlOiAnbGlzdF9lbmQnXG4gICAgICB9KTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gaHRtbFxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmh0bWwuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICAgID8gJ3BhcmFncmFwaCdcbiAgICAgICAgICA6ICdodG1sJyxcbiAgICAgICAgcHJlOiAhdGhpcy5vcHRpb25zLnNhbml0aXplclxuICAgICAgICAgICYmIChjYXBbMV0gPT09ICdwcmUnIHx8IGNhcFsxXSA9PT0gJ3NjcmlwdCcgfHwgY2FwWzFdID09PSAnc3R5bGUnKSxcbiAgICAgICAgdGV4dDogY2FwWzBdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlZlxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMuZGVmLmV4ZWMoc3JjKSkpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBpZiAoY2FwWzNdKSBjYXBbM10gPSBjYXBbM10uc3Vic3RyaW5nKDEsIGNhcFszXS5sZW5ndGggLSAxKTtcbiAgICAgIHRhZyA9IGNhcFsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgICAgIGlmICghdGhpcy50b2tlbnMubGlua3NbdGFnXSkge1xuICAgICAgICB0aGlzLnRva2Vucy5saW5rc1t0YWddID0ge1xuICAgICAgICAgIGhyZWY6IGNhcFsyXSxcbiAgICAgICAgICB0aXRsZTogY2FwWzNdXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0YWJsZSAoZ2ZtKVxuICAgIGlmICh0b3AgJiYgKGNhcCA9IHRoaXMucnVsZXMudGFibGUuZXhlYyhzcmMpKSkge1xuICAgICAgaXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgaGVhZGVyOiBzcGxpdENlbGxzKGNhcFsxXS5yZXBsYWNlKC9eICp8ICpcXHwgKiQvZywgJycpKSxcbiAgICAgICAgYWxpZ246IGNhcFsyXS5yZXBsYWNlKC9eICp8XFx8ICokL2csICcnKS5zcGxpdCgvICpcXHwgKi8pLFxuICAgICAgICBjZWxsczogY2FwWzNdID8gY2FwWzNdLnJlcGxhY2UoLyg/OiAqXFx8ICopP1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpIDogW11cbiAgICAgIH07XG5cbiAgICAgIGlmIChpdGVtLmhlYWRlci5sZW5ndGggPT09IGl0ZW0uYWxpZ24ubGVuZ3RoKSB7XG4gICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uYWxpZ24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoL14gKi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdyaWdodCc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvXiAqOi0rOiAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdjZW50ZXInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoL14gKjotKyAqJC8udGVzdChpdGVtLmFsaWduW2ldKSkge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9ICdsZWZ0JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5hbGlnbltpXSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW0uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpdGVtLmNlbGxzW2ldID0gc3BsaXRDZWxscyhcbiAgICAgICAgICAgIGl0ZW0uY2VsbHNbaV0ucmVwbGFjZSgvXiAqXFx8ICp8ICpcXHwgKiQvZywgJycpLFxuICAgICAgICAgICAgaXRlbS5oZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9rZW5zLnB1c2goaXRlbSk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbGhlYWRpbmdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saGVhZGluZy5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2hlYWRpbmcnLFxuICAgICAgICBkZXB0aDogY2FwWzJdID09PSAnPScgPyAxIDogMixcbiAgICAgICAgdGV4dDogY2FwWzFdXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIHRvcC1sZXZlbCBwYXJhZ3JhcGhcbiAgICBpZiAodG9wICYmIChjYXAgPSB0aGlzLnJ1bGVzLnBhcmFncmFwaC5leGVjKHNyYykpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgdGhpcy50b2tlbnMucHVzaCh7XG4gICAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgICAgICB0ZXh0OiBjYXBbMV0uY2hhckF0KGNhcFsxXS5sZW5ndGggLSAxKSA9PT0gJ1xcbidcbiAgICAgICAgICA/IGNhcFsxXS5zbGljZSgwLCAtMSlcbiAgICAgICAgICA6IGNhcFsxXVxuICAgICAgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIC8vIFRvcC1sZXZlbCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS5cbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICB0aGlzLnRva2Vucy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0ZXh0OiBjYXBbMF1cbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHNyYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICcgKyBzcmMuY2hhckNvZGVBdCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMudG9rZW5zO1xufTtcblxuLyoqXG4gKiBJbmxpbmUtTGV2ZWwgR3JhbW1hclxuICovXG5cbnZhciBpbmxpbmUgPSB7XG4gIGVzY2FwZTogL15cXFxcKFshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AXFxbXFxdXFxcXF5fYHt8fX5dKS8sXG4gIGF1dG9saW5rOiAvXjwoc2NoZW1lOlteXFxzXFx4MDAtXFx4MWY8Pl0qfGVtYWlsKT4vLFxuICB1cmw6IG5vb3AsXG4gIHRhZzogJ15jb21tZW50J1xuICAgICsgJ3xePC9bYS16QS1aXVtcXFxcdzotXSpcXFxccyo+JyAvLyBzZWxmLWNsb3NpbmcgdGFnXG4gICAgKyAnfF48W2EtekEtWl1bXFxcXHctXSooPzphdHRyaWJ1dGUpKj9cXFxccyovPz4nIC8vIG9wZW4gdGFnXG4gICAgKyAnfF48XFxcXD9bXFxcXHNcXFxcU10qP1xcXFw/PicgLy8gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgZS5nLiA8P3BocCA/PlxuICAgICsgJ3xePCFbYS16QS1aXStcXFxcc1tcXFxcc1xcXFxTXSo/PicgLy8gZGVjbGFyYXRpb24sIGUuZy4gPCFET0NUWVBFIGh0bWw+XG4gICAgKyAnfF48IVxcXFxbQ0RBVEFcXFxcW1tcXFxcc1xcXFxTXSo/XFxcXF1cXFxcXT4nLCAvLyBDREFUQSBzZWN0aW9uXG4gIGxpbms6IC9eIT9cXFsobGFiZWwpXFxdXFwoaHJlZig/OlxccysodGl0bGUpKT9cXHMqXFwpLyxcbiAgcmVmbGluazogL14hP1xcWyhsYWJlbClcXF1cXFsoPyFcXHMqXFxdKSgoPzpcXFxcW1xcW1xcXV0/fFteXFxbXFxdXFxcXF0pKylcXF0vLFxuICBub2xpbms6IC9eIT9cXFsoPyFcXHMqXFxdKSgoPzpcXFtbXlxcW1xcXV0qXFxdfFxcXFxbXFxbXFxdXXxbXlxcW1xcXV0pKilcXF0oPzpcXFtcXF0pPy8sXG4gIHN0cm9uZzogL15fXyhbXlxcc10pX18oPyFfKXxeXFwqXFwqKFteXFxzXSlcXCpcXCooPyFcXCopfF5fXyhbXlxcc11bXFxzXFxTXSo/W15cXHNdKV9fKD8hXyl8XlxcKlxcKihbXlxcc11bXFxzXFxTXSo/W15cXHNdKVxcKlxcKig/IVxcKikvLFxuICBlbTogL15fKFteXFxzX10pXyg/IV8pfF5cXCooW15cXHMqXCI8XFxbXSlcXCooPyFcXCopfF5fKFteXFxzXVtcXHNcXFNdKj9bXlxcc19dKV8oPyFfKXxeXyhbXlxcc19dW1xcc1xcU10qP1teXFxzXSlfKD8hXyl8XlxcKihbXlxcc1wiPFxcW11bXFxzXFxTXSo/W15cXHMqXSlcXCooPyFcXCopfF5cXCooW15cXHMqXCI8XFxbXVtcXHNcXFNdKj9bXlxcc10pXFwqKD8hXFwqKS8sXG4gIGNvZGU6IC9eKGArKVxccyooW1xcc1xcU10qP1teYF0/KVxccypcXDEoPyFgKS8sXG4gIGJyOiAvXiggezIsfXxcXFxcKVxcbig/IVxccyokKS8sXG4gIGRlbDogbm9vcCxcbiAgdGV4dDogL15bXFxzXFxTXSs/KD89W1xcXFw8IVxcW2AqXXxcXGJffCB7Mix9XFxufCQpL1xufTtcblxuaW5saW5lLl9lc2NhcGVzID0gL1xcXFwoWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BcXFtcXF1cXFxcXl9ge3x9fl0pL2c7XG5cbmlubGluZS5fc2NoZW1lID0gL1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vO1xuaW5saW5lLl9lbWFpbCA9IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvO1xuaW5saW5lLmF1dG9saW5rID0gZWRpdChpbmxpbmUuYXV0b2xpbmspXG4gIC5yZXBsYWNlKCdzY2hlbWUnLCBpbmxpbmUuX3NjaGVtZSlcbiAgLnJlcGxhY2UoJ2VtYWlsJywgaW5saW5lLl9lbWFpbClcbiAgLmdldFJlZ2V4KCk7XG5cbmlubGluZS5fYXR0cmlidXRlID0gL1xccytbYS16QS1aOl9dW1xcdy46LV0qKD86XFxzKj1cXHMqXCJbXlwiXSpcInxcXHMqPVxccyonW14nXSonfFxccyo9XFxzKlteXFxzXCInPTw+YF0rKT8vO1xuXG5pbmxpbmUudGFnID0gZWRpdChpbmxpbmUudGFnKVxuICAucmVwbGFjZSgnY29tbWVudCcsIGJsb2NrLl9jb21tZW50KVxuICAucmVwbGFjZSgnYXR0cmlidXRlJywgaW5saW5lLl9hdHRyaWJ1dGUpXG4gIC5nZXRSZWdleCgpO1xuXG5pbmxpbmUuX2xhYmVsID0gLyg/OlxcW1teXFxbXFxdXSpcXF18XFxcXFtcXFtcXF1dP3xgW15gXSpgfFteXFxbXFxdXFxcXF0pKj8vO1xuaW5saW5lLl9ocmVmID0gL1xccyooPCg/OlxcXFxbPD5dP3xbXlxcczw+XFxcXF0pKj58KD86XFxcXFsoKV0/fFxcKFteXFxzXFx4MDAtXFx4MWZcXFxcXSpcXCl8W15cXHNcXHgwMC1cXHgxZigpXFxcXF0pKj8pLztcbmlubGluZS5fdGl0bGUgPSAvXCIoPzpcXFxcXCI/fFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwnP3xbXidcXFxcXSkqJ3xcXCgoPzpcXFxcXFwpP3xbXilcXFxcXSkqXFwpLztcblxuaW5saW5lLmxpbmsgPSBlZGl0KGlubGluZS5saW5rKVxuICAucmVwbGFjZSgnbGFiZWwnLCBpbmxpbmUuX2xhYmVsKVxuICAucmVwbGFjZSgnaHJlZicsIGlubGluZS5faHJlZilcbiAgLnJlcGxhY2UoJ3RpdGxlJywgaW5saW5lLl90aXRsZSlcbiAgLmdldFJlZ2V4KCk7XG5cbmlubGluZS5yZWZsaW5rID0gZWRpdChpbmxpbmUucmVmbGluaylcbiAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgLmdldFJlZ2V4KCk7XG5cbi8qKlxuICogTm9ybWFsIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLm5vcm1hbCA9IG1lcmdlKHt9LCBpbmxpbmUpO1xuXG4vKipcbiAqIFBlZGFudGljIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLnBlZGFudGljID0gbWVyZ2Uoe30sIGlubGluZS5ub3JtYWwsIHtcbiAgc3Ryb25nOiAvXl9fKD89XFxTKShbXFxzXFxTXSo/XFxTKV9fKD8hXyl8XlxcKlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCpcXCooPyFcXCopLyxcbiAgZW06IC9eXyg/PVxcUykoW1xcc1xcU10qP1xcUylfKD8hXyl8XlxcKig/PVxcUykoW1xcc1xcU10qP1xcUylcXCooPyFcXCopLyxcbiAgbGluazogZWRpdCgvXiE/XFxbKGxhYmVsKVxcXVxcKCguKj8pXFwpLylcbiAgICAucmVwbGFjZSgnbGFiZWwnLCBpbmxpbmUuX2xhYmVsKVxuICAgIC5nZXRSZWdleCgpLFxuICByZWZsaW5rOiBlZGl0KC9eIT9cXFsobGFiZWwpXFxdXFxzKlxcWyhbXlxcXV0qKVxcXS8pXG4gICAgLnJlcGxhY2UoJ2xhYmVsJywgaW5saW5lLl9sYWJlbClcbiAgICAuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogR0ZNIElubGluZSBHcmFtbWFyXG4gKi9cblxuaW5saW5lLmdmbSA9IG1lcmdlKHt9LCBpbmxpbmUubm9ybWFsLCB7XG4gIGVzY2FwZTogZWRpdChpbmxpbmUuZXNjYXBlKS5yZXBsYWNlKCddKScsICd+fF0pJykuZ2V0UmVnZXgoKSxcbiAgdXJsOiBlZGl0KC9eKCg/OmZ0cHxodHRwcz8pOlxcL1xcL3x3d3dcXC4pKD86W2EtekEtWjAtOVxcLV0rXFwuPykrW15cXHM8XSp8XmVtYWlsLylcbiAgICAucmVwbGFjZSgnZW1haWwnLCBpbmxpbmUuX2VtYWlsKVxuICAgIC5nZXRSZWdleCgpLFxuICBfYmFja3BlZGFsOiAvKD86W14/IS4sOjsqX34oKSZdK3xcXChbXildKlxcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqX34pXSsoPyEkKSkrLyxcbiAgZGVsOiAvXn4rKD89XFxTKShbXFxzXFxTXSo/XFxTKX4rLyxcbiAgdGV4dDogZWRpdChpbmxpbmUudGV4dClcbiAgICAucmVwbGFjZSgnXXwnLCAnfl18JylcbiAgICAucmVwbGFjZSgnfCcsICd8aHR0cHM/Oi8vfGZ0cDovL3x3d3dcXFxcLnxbYS16QS1aMC05LiEjJCUmXFwnKisvPT9eX2B7XFxcXHx9fi1dK0B8JylcbiAgICAuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogR0ZNICsgTGluZSBCcmVha3MgSW5saW5lIEdyYW1tYXJcbiAqL1xuXG5pbmxpbmUuYnJlYWtzID0gbWVyZ2Uoe30sIGlubGluZS5nZm0sIHtcbiAgYnI6IGVkaXQoaW5saW5lLmJyKS5yZXBsYWNlKCd7Mix9JywgJyonKS5nZXRSZWdleCgpLFxuICB0ZXh0OiBlZGl0KGlubGluZS5nZm0udGV4dCkucmVwbGFjZSgnezIsfScsICcqJykuZ2V0UmVnZXgoKVxufSk7XG5cbi8qKlxuICogSW5saW5lIExleGVyICYgQ29tcGlsZXJcbiAqL1xuXG5mdW5jdGlvbiBJbmxpbmVMZXhlcihsaW5rcywgb3B0aW9ucykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IG1hcmtlZC5kZWZhdWx0cztcbiAgdGhpcy5saW5rcyA9IGxpbmtzO1xuICB0aGlzLnJ1bGVzID0gaW5saW5lLm5vcm1hbDtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXIoKTtcbiAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIGlmICghdGhpcy5saW5rcykge1xuICAgIHRocm93IG5ldyBFcnJvcignVG9rZW5zIGFycmF5IHJlcXVpcmVzIGEgYGxpbmtzYCBwcm9wZXJ0eS4nKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdGlvbnMucGVkYW50aWMpIHtcbiAgICB0aGlzLnJ1bGVzID0gaW5saW5lLnBlZGFudGljO1xuICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5nZm0pIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmJyZWFrcykge1xuICAgICAgdGhpcy5ydWxlcyA9IGlubGluZS5icmVha3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVsZXMgPSBpbmxpbmUuZ2ZtO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4cG9zZSBJbmxpbmUgUnVsZXNcbiAqL1xuXG5JbmxpbmVMZXhlci5ydWxlcyA9IGlubGluZTtcblxuLyoqXG4gKiBTdGF0aWMgTGV4aW5nL0NvbXBpbGluZyBNZXRob2RcbiAqL1xuXG5JbmxpbmVMZXhlci5vdXRwdXQgPSBmdW5jdGlvbihzcmMsIGxpbmtzLCBvcHRpb25zKSB7XG4gIHZhciBpbmxpbmUgPSBuZXcgSW5saW5lTGV4ZXIobGlua3MsIG9wdGlvbnMpO1xuICByZXR1cm4gaW5saW5lLm91dHB1dChzcmMpO1xufTtcblxuLyoqXG4gKiBMZXhpbmcvQ29tcGlsaW5nXG4gKi9cblxuSW5saW5lTGV4ZXIucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKHNyYykge1xuICB2YXIgb3V0ID0gJycsXG4gICAgICBsaW5rLFxuICAgICAgdGV4dCxcbiAgICAgIGhyZWYsXG4gICAgICB0aXRsZSxcbiAgICAgIGNhcCxcbiAgICAgIHByZXZDYXBaZXJvO1xuXG4gIHdoaWxlIChzcmMpIHtcbiAgICAvLyBlc2NhcGVcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lc2NhcGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IGNhcFsxXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGF1dG9saW5rXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYXV0b2xpbmsuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBlc2NhcGUodGhpcy5tYW5nbGUoY2FwWzFdKSk7XG4gICAgICAgIGhyZWYgPSAnbWFpbHRvOicgKyB0ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGVzY2FwZShjYXBbMV0pO1xuICAgICAgICBocmVmID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIG91dCArPSB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgbnVsbCwgdGV4dCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB1cmwgKGdmbSlcbiAgICBpZiAoIXRoaXMuaW5MaW5rICYmIChjYXAgPSB0aGlzLnJ1bGVzLnVybC5leGVjKHNyYykpKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHByZXZDYXBaZXJvID0gY2FwWzBdO1xuICAgICAgICBjYXBbMF0gPSB0aGlzLnJ1bGVzLl9iYWNrcGVkYWwuZXhlYyhjYXBbMF0pWzBdO1xuICAgICAgfSB3aGlsZSAocHJldkNhcFplcm8gIT09IGNhcFswXSk7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgaWYgKGNhcFsyXSA9PT0gJ0AnKSB7XG4gICAgICAgIHRleHQgPSBlc2NhcGUoY2FwWzBdKTtcbiAgICAgICAgaHJlZiA9ICdtYWlsdG86JyArIHRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ID0gZXNjYXBlKGNhcFswXSk7XG4gICAgICAgIGlmIChjYXBbMV0gPT09ICd3d3cuJykge1xuICAgICAgICAgIGhyZWYgPSAnaHR0cDovLycgKyB0ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhyZWYgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5saW5rKGhyZWYsIG51bGwsIHRleHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gdGFnXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGFnLmV4ZWMoc3JjKSkge1xuICAgICAgaWYgKCF0aGlzLmluTGluayAmJiAvXjxhIC9pLnRlc3QoY2FwWzBdKSkge1xuICAgICAgICB0aGlzLmluTGluayA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaW5MaW5rICYmIC9ePFxcL2E+L2kudGVzdChjYXBbMF0pKSB7XG4gICAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMub3B0aW9ucy5zYW5pdGl6ZVxuICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXJcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5zYW5pdGl6ZXIoY2FwWzBdKVxuICAgICAgICAgIDogZXNjYXBlKGNhcFswXSlcbiAgICAgICAgOiBjYXBbMF1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxpbmtcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5saW5rLmV4ZWMoc3JjKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIHRoaXMuaW5MaW5rID0gdHJ1ZTtcbiAgICAgIGhyZWYgPSBjYXBbMl07XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBlZGFudGljKSB7XG4gICAgICAgIGxpbmsgPSAvXihbXidcIl0qW15cXHNdKVxccysoWydcIl0pKC4qKVxcMi8uZXhlYyhocmVmKTtcblxuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgIGhyZWYgPSBsaW5rWzFdO1xuICAgICAgICAgIHRpdGxlID0gbGlua1szXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aXRsZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aXRsZSA9IGNhcFszXSA/IGNhcFszXS5zbGljZSgxLCAtMSkgOiAnJztcbiAgICAgIH1cbiAgICAgIGhyZWYgPSBocmVmLnRyaW0oKS5yZXBsYWNlKC9ePChbXFxzXFxTXSopPiQvLCAnJDEnKTtcbiAgICAgIG91dCArPSB0aGlzLm91dHB1dExpbmsoY2FwLCB7XG4gICAgICAgIGhyZWY6IElubGluZUxleGVyLmVzY2FwZXMoaHJlZiksXG4gICAgICAgIHRpdGxlOiBJbmxpbmVMZXhlci5lc2NhcGVzKHRpdGxlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmluTGluayA9IGZhbHNlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gcmVmbGluaywgbm9saW5rXG4gICAgaWYgKChjYXAgPSB0aGlzLnJ1bGVzLnJlZmxpbmsuZXhlYyhzcmMpKVxuICAgICAgICB8fCAoY2FwID0gdGhpcy5ydWxlcy5ub2xpbmsuZXhlYyhzcmMpKSkge1xuICAgICAgc3JjID0gc3JjLnN1YnN0cmluZyhjYXBbMF0ubGVuZ3RoKTtcbiAgICAgIGxpbmsgPSAoY2FwWzJdIHx8IGNhcFsxXSkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xuICAgICAgbGluayA9IHRoaXMubGlua3NbbGluay50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIGlmICghbGluayB8fCAhbGluay5ocmVmKSB7XG4gICAgICAgIG91dCArPSBjYXBbMF0uY2hhckF0KDApO1xuICAgICAgICBzcmMgPSBjYXBbMF0uc3Vic3RyaW5nKDEpICsgc3JjO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5MaW5rID0gdHJ1ZTtcbiAgICAgIG91dCArPSB0aGlzLm91dHB1dExpbmsoY2FwLCBsaW5rKTtcbiAgICAgIHRoaXMuaW5MaW5rID0gZmFsc2U7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBzdHJvbmdcbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5zdHJvbmcuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuc3Ryb25nKHRoaXMub3V0cHV0KGNhcFs0XSB8fCBjYXBbM10gfHwgY2FwWzJdIHx8IGNhcFsxXSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gZW1cbiAgICBpZiAoY2FwID0gdGhpcy5ydWxlcy5lbS5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5lbSh0aGlzLm91dHB1dChjYXBbNl0gfHwgY2FwWzVdIHx8IGNhcFs0XSB8fCBjYXBbM10gfHwgY2FwWzJdIHx8IGNhcFsxXSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY29kZVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmNvZGUuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuY29kZXNwYW4oZXNjYXBlKGNhcFsyXS50cmltKCksIHRydWUpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGJyXG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMuYnIuZXhlYyhzcmMpKSB7XG4gICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKGNhcFswXS5sZW5ndGgpO1xuICAgICAgb3V0ICs9IHRoaXMucmVuZGVyZXIuYnIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGRlbCAoZ2ZtKVxuICAgIGlmIChjYXAgPSB0aGlzLnJ1bGVzLmRlbC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci5kZWwodGhpcy5vdXRwdXQoY2FwWzFdKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyB0ZXh0XG4gICAgaWYgKGNhcCA9IHRoaXMucnVsZXMudGV4dC5leGVjKHNyYykpIHtcbiAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcoY2FwWzBdLmxlbmd0aCk7XG4gICAgICBvdXQgKz0gdGhpcy5yZW5kZXJlci50ZXh0KGVzY2FwZSh0aGlzLnNtYXJ0eXBhbnRzKGNhcFswXSkpKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzcmMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5maW5pdGUgbG9vcCBvbiBieXRlOiAnICsgc3JjLmNoYXJDb2RlQXQoMCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5JbmxpbmVMZXhlci5lc2NhcGVzID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dCA/IHRleHQucmVwbGFjZShJbmxpbmVMZXhlci5ydWxlcy5fZXNjYXBlcywgJyQxJykgOiB0ZXh0O1xufVxuXG4vKipcbiAqIENvbXBpbGUgTGlua1xuICovXG5cbklubGluZUxleGVyLnByb3RvdHlwZS5vdXRwdXRMaW5rID0gZnVuY3Rpb24oY2FwLCBsaW5rKSB7XG4gIHZhciBocmVmID0gbGluay5ocmVmLFxuICAgICAgdGl0bGUgPSBsaW5rLnRpdGxlID8gZXNjYXBlKGxpbmsudGl0bGUpIDogbnVsbDtcblxuICByZXR1cm4gY2FwWzBdLmNoYXJBdCgwKSAhPT0gJyEnXG4gICAgPyB0aGlzLnJlbmRlcmVyLmxpbmsoaHJlZiwgdGl0bGUsIHRoaXMub3V0cHV0KGNhcFsxXSkpXG4gICAgOiB0aGlzLnJlbmRlcmVyLmltYWdlKGhyZWYsIHRpdGxlLCBlc2NhcGUoY2FwWzFdKSk7XG59O1xuXG4vKipcbiAqIFNtYXJ0eXBhbnRzIFRyYW5zZm9ybWF0aW9uc1xuICovXG5cbklubGluZUxleGVyLnByb3RvdHlwZS5zbWFydHlwYW50cyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgaWYgKCF0aGlzLm9wdGlvbnMuc21hcnR5cGFudHMpIHJldHVybiB0ZXh0O1xuICByZXR1cm4gdGV4dFxuICAgIC8vIGVtLWRhc2hlc1xuICAgIC5yZXBsYWNlKC8tLS0vZywgJ1xcdTIwMTQnKVxuICAgIC8vIGVuLWRhc2hlc1xuICAgIC5yZXBsYWNlKC8tLS9nLCAnXFx1MjAxMycpXG4gICAgLy8gb3BlbmluZyBzaW5nbGVzXG4gICAgLnJlcGxhY2UoLyhefFstXFx1MjAxNC8oXFxbe1wiXFxzXSknL2csICckMVxcdTIwMTgnKVxuICAgIC8vIGNsb3Npbmcgc2luZ2xlcyAmIGFwb3N0cm9waGVzXG4gICAgLnJlcGxhY2UoLycvZywgJ1xcdTIwMTknKVxuICAgIC8vIG9wZW5pbmcgZG91Ymxlc1xuICAgIC5yZXBsYWNlKC8oXnxbLVxcdTIwMTQvKFxcW3tcXHUyMDE4XFxzXSlcIi9nLCAnJDFcXHUyMDFjJylcbiAgICAvLyBjbG9zaW5nIGRvdWJsZXNcbiAgICAucmVwbGFjZSgvXCIvZywgJ1xcdTIwMWQnKVxuICAgIC8vIGVsbGlwc2VzXG4gICAgLnJlcGxhY2UoL1xcLnszfS9nLCAnXFx1MjAyNicpO1xufTtcblxuLyoqXG4gKiBNYW5nbGUgTGlua3NcbiAqL1xuXG5JbmxpbmVMZXhlci5wcm90b3R5cGUubWFuZ2xlID0gZnVuY3Rpb24odGV4dCkge1xuICBpZiAoIXRoaXMub3B0aW9ucy5tYW5nbGUpIHJldHVybiB0ZXh0O1xuICB2YXIgb3V0ID0gJycsXG4gICAgICBsID0gdGV4dC5sZW5ndGgsXG4gICAgICBpID0gMCxcbiAgICAgIGNoO1xuXG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgY2ggPSB0ZXh0LmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjUpIHtcbiAgICAgIGNoID0gJ3gnICsgY2gudG9TdHJpbmcoMTYpO1xuICAgIH1cbiAgICBvdXQgKz0gJyYjJyArIGNoICsgJzsnO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8qKlxuICogUmVuZGVyZXJcbiAqL1xuXG5mdW5jdGlvbiBSZW5kZXJlcihvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgbWFya2VkLmRlZmF1bHRzO1xufVxuXG5SZW5kZXJlci5wcm90b3R5cGUuY29kZSA9IGZ1bmN0aW9uKGNvZGUsIGxhbmcsIGVzY2FwZWQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpIHtcbiAgICB2YXIgb3V0ID0gdGhpcy5vcHRpb25zLmhpZ2hsaWdodChjb2RlLCBsYW5nKTtcbiAgICBpZiAob3V0ICE9IG51bGwgJiYgb3V0ICE9PSBjb2RlKSB7XG4gICAgICBlc2NhcGVkID0gdHJ1ZTtcbiAgICAgIGNvZGUgPSBvdXQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFsYW5nKSB7XG4gICAgcmV0dXJuICc8cHJlPjxjb2RlPidcbiAgICAgICsgKGVzY2FwZWQgPyBjb2RlIDogZXNjYXBlKGNvZGUsIHRydWUpKVxuICAgICAgKyAnPC9jb2RlPjwvcHJlPic7XG4gIH1cblxuICByZXR1cm4gJzxwcmU+PGNvZGUgY2xhc3M9XCInXG4gICAgKyB0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeFxuICAgICsgZXNjYXBlKGxhbmcsIHRydWUpXG4gICAgKyAnXCI+J1xuICAgICsgKGVzY2FwZWQgPyBjb2RlIDogZXNjYXBlKGNvZGUsIHRydWUpKVxuICAgICsgJzwvY29kZT48L3ByZT5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmJsb2NrcXVvdGUgPSBmdW5jdGlvbihxdW90ZSkge1xuICByZXR1cm4gJzxibG9ja3F1b3RlPlxcbicgKyBxdW90ZSArICc8L2Jsb2NrcXVvdGU+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5odG1sID0gZnVuY3Rpb24oaHRtbCkge1xuICByZXR1cm4gaHRtbDtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5oZWFkaW5nID0gZnVuY3Rpb24odGV4dCwgbGV2ZWwsIHJhdykge1xuICBpZiAodGhpcy5vcHRpb25zLmhlYWRlcklkcykge1xuICAgIHJldHVybiAnPGgnXG4gICAgICArIGxldmVsXG4gICAgICArICcgaWQ9XCInXG4gICAgICArIHRoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXhcbiAgICAgICsgcmF3LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15cXHddKy9nLCAnLScpXG4gICAgICArICdcIj4nXG4gICAgICArIHRleHRcbiAgICAgICsgJzwvaCdcbiAgICAgICsgbGV2ZWxcbiAgICAgICsgJz5cXG4nO1xuICB9XG4gIC8vIGlnbm9yZSBJRHNcbiAgcmV0dXJuICc8aCcgKyBsZXZlbCArICc+JyArIHRleHQgKyAnPC9oJyArIGxldmVsICsgJz5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmhyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMueGh0bWwgPyAnPGhyLz5cXG4nIDogJzxocj5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmxpc3QgPSBmdW5jdGlvbihib2R5LCBvcmRlcmVkLCBzdGFydCkge1xuICB2YXIgdHlwZSA9IG9yZGVyZWQgPyAnb2wnIDogJ3VsJyxcbiAgICAgIHN0YXJ0YXR0ID0gKG9yZGVyZWQgJiYgc3RhcnQgIT09IDEpID8gKCcgc3RhcnQ9XCInICsgc3RhcnQgKyAnXCInKSA6ICcnO1xuICByZXR1cm4gJzwnICsgdHlwZSArIHN0YXJ0YXR0ICsgJz5cXG4nICsgYm9keSArICc8LycgKyB0eXBlICsgJz5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmxpc3RpdGVtID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxsaT4nICsgdGV4dCArICc8L2xpPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY2hlY2tib3ggPSBmdW5jdGlvbihjaGVja2VkKSB7XG4gIHJldHVybiAnPGlucHV0ICdcbiAgICArIChjaGVja2VkID8gJ2NoZWNrZWQ9XCJcIiAnIDogJycpXG4gICAgKyAnZGlzYWJsZWQ9XCJcIiB0eXBlPVwiY2hlY2tib3hcIidcbiAgICArICh0aGlzLm9wdGlvbnMueGh0bWwgPyAnIC8nIDogJycpXG4gICAgKyAnPiAnO1xufVxuXG5SZW5kZXJlci5wcm90b3R5cGUucGFyYWdyYXBoID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxwPicgKyB0ZXh0ICsgJzwvcD5cXG4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnRhYmxlID0gZnVuY3Rpb24oaGVhZGVyLCBib2R5KSB7XG4gIGlmIChib2R5KSBib2R5ID0gJzx0Ym9keT4nICsgYm9keSArICc8L3Rib2R5Pic7XG5cbiAgcmV0dXJuICc8dGFibGU+XFxuJ1xuICAgICsgJzx0aGVhZD5cXG4nXG4gICAgKyBoZWFkZXJcbiAgICArICc8L3RoZWFkPlxcbidcbiAgICArIGJvZHlcbiAgICArICc8L3RhYmxlPlxcbic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUudGFibGVyb3cgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiAnPHRyPlxcbicgKyBjb250ZW50ICsgJzwvdHI+XFxuJztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS50YWJsZWNlbGwgPSBmdW5jdGlvbihjb250ZW50LCBmbGFncykge1xuICB2YXIgdHlwZSA9IGZsYWdzLmhlYWRlciA/ICd0aCcgOiAndGQnO1xuICB2YXIgdGFnID0gZmxhZ3MuYWxpZ25cbiAgICA/ICc8JyArIHR5cGUgKyAnIGFsaWduPVwiJyArIGZsYWdzLmFsaWduICsgJ1wiPidcbiAgICA6ICc8JyArIHR5cGUgKyAnPic7XG4gIHJldHVybiB0YWcgKyBjb250ZW50ICsgJzwvJyArIHR5cGUgKyAnPlxcbic7XG59O1xuXG4vLyBzcGFuIGxldmVsIHJlbmRlcmVyXG5SZW5kZXJlci5wcm90b3R5cGUuc3Ryb25nID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxzdHJvbmc+JyArIHRleHQgKyAnPC9zdHJvbmc+Jztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5lbSA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuICc8ZW0+JyArIHRleHQgKyAnPC9lbT4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmNvZGVzcGFuID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gJzxjb2RlPicgKyB0ZXh0ICsgJzwvY29kZT4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmJyID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLm9wdGlvbnMueGh0bWwgPyAnPGJyLz4nIDogJzxicj4nO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgcmV0dXJuICc8ZGVsPicgKyB0ZXh0ICsgJzwvZGVsPic7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUubGluayA9IGZ1bmN0aW9uKGhyZWYsIHRpdGxlLCB0ZXh0KSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHByb3QgPSBkZWNvZGVVUklDb21wb25lbnQodW5lc2NhcGUoaHJlZikpXG4gICAgICAgIC5yZXBsYWNlKC9bXlxcdzpdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKHByb3QuaW5kZXhPZignamF2YXNjcmlwdDonKSA9PT0gMCB8fCBwcm90LmluZGV4T2YoJ3Zic2NyaXB0OicpID09PSAwIHx8IHByb3QuaW5kZXhPZignZGF0YTonKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9XG4gIGlmICh0aGlzLm9wdGlvbnMuYmFzZVVybCAmJiAhb3JpZ2luSW5kZXBlbmRlbnRVcmwudGVzdChocmVmKSkge1xuICAgIGhyZWYgPSByZXNvbHZlVXJsKHRoaXMub3B0aW9ucy5iYXNlVXJsLCBocmVmKTtcbiAgfVxuICB0cnkge1xuICAgIGhyZWYgPSBlbmNvZGVVUkkoaHJlZikucmVwbGFjZSgvJTI1L2csICclJyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICB2YXIgb3V0ID0gJzxhIGhyZWY9XCInICsgZXNjYXBlKGhyZWYpICsgJ1wiJztcbiAgaWYgKHRpdGxlKSB7XG4gICAgb3V0ICs9ICcgdGl0bGU9XCInICsgdGl0bGUgKyAnXCInO1xuICB9XG4gIG91dCArPSAnPicgKyB0ZXh0ICsgJzwvYT4nO1xuICByZXR1cm4gb3V0O1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmltYWdlID0gZnVuY3Rpb24oaHJlZiwgdGl0bGUsIHRleHQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5iYXNlVXJsICYmICFvcmlnaW5JbmRlcGVuZGVudFVybC50ZXN0KGhyZWYpKSB7XG4gICAgaHJlZiA9IHJlc29sdmVVcmwodGhpcy5vcHRpb25zLmJhc2VVcmwsIGhyZWYpO1xuICB9XG4gIHZhciBvdXQgPSAnPGltZyBzcmM9XCInICsgaHJlZiArICdcIiBhbHQ9XCInICsgdGV4dCArICdcIic7XG4gIGlmICh0aXRsZSkge1xuICAgIG91dCArPSAnIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiJztcbiAgfVxuICBvdXQgKz0gdGhpcy5vcHRpb25zLnhodG1sID8gJy8+JyA6ICc+JztcbiAgcmV0dXJuIG91dDtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odGV4dCkge1xuICByZXR1cm4gdGV4dDtcbn07XG5cbi8qKlxuICogVGV4dFJlbmRlcmVyXG4gKiByZXR1cm5zIG9ubHkgdGhlIHRleHR1YWwgcGFydCBvZiB0aGUgdG9rZW5cbiAqL1xuXG5mdW5jdGlvbiBUZXh0UmVuZGVyZXIoKSB7fVxuXG4vLyBubyBuZWVkIGZvciBibG9jayBsZXZlbCByZW5kZXJlcnNcblxuVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5zdHJvbmcgPVxuVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5lbSA9XG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmNvZGVzcGFuID1cblRleHRSZW5kZXJlci5wcm90b3R5cGUuZGVsID1cblRleHRSZW5kZXJlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0O1xufVxuXG5UZXh0UmVuZGVyZXIucHJvdG90eXBlLmxpbmsgPVxuVGV4dFJlbmRlcmVyLnByb3RvdHlwZS5pbWFnZSA9IGZ1bmN0aW9uKGhyZWYsIHRpdGxlLCB0ZXh0KSB7XG4gIHJldHVybiAnJyArIHRleHQ7XG59XG5cblRleHRSZW5kZXJlci5wcm90b3R5cGUuYnIgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFBhcnNpbmcgJiBDb21waWxpbmdcbiAqL1xuXG5mdW5jdGlvbiBQYXJzZXIob3B0aW9ucykge1xuICB0aGlzLnRva2VucyA9IFtdO1xuICB0aGlzLnRva2VuID0gbnVsbDtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBtYXJrZWQuZGVmYXVsdHM7XG4gIHRoaXMub3B0aW9ucy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlciB8fCBuZXcgUmVuZGVyZXIoKTtcbiAgdGhpcy5yZW5kZXJlciA9IHRoaXMub3B0aW9ucy5yZW5kZXJlcjtcbiAgdGhpcy5yZW5kZXJlci5vcHRpb25zID0gdGhpcy5vcHRpb25zO1xufVxuXG4vKipcbiAqIFN0YXRpYyBQYXJzZSBNZXRob2RcbiAqL1xuXG5QYXJzZXIucGFyc2UgPSBmdW5jdGlvbihzcmMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gIHJldHVybiBwYXJzZXIucGFyc2Uoc3JjKTtcbn07XG5cbi8qKlxuICogUGFyc2UgTG9vcFxuICovXG5cblBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbihzcmMpIHtcbiAgdGhpcy5pbmxpbmUgPSBuZXcgSW5saW5lTGV4ZXIoc3JjLmxpbmtzLCB0aGlzLm9wdGlvbnMpO1xuICAvLyB1c2UgYW4gSW5saW5lTGV4ZXIgd2l0aCBhIFRleHRSZW5kZXJlciB0byBleHRyYWN0IHB1cmUgdGV4dFxuICB0aGlzLmlubGluZVRleHQgPSBuZXcgSW5saW5lTGV4ZXIoXG4gICAgc3JjLmxpbmtzLFxuICAgIG1lcmdlKHt9LCB0aGlzLm9wdGlvbnMsIHtyZW5kZXJlcjogbmV3IFRleHRSZW5kZXJlcigpfSlcbiAgKTtcbiAgdGhpcy50b2tlbnMgPSBzcmMucmV2ZXJzZSgpO1xuXG4gIHZhciBvdXQgPSAnJztcbiAgd2hpbGUgKHRoaXMubmV4dCgpKSB7XG4gICAgb3V0ICs9IHRoaXMudG9rKCk7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcblxuLyoqXG4gKiBOZXh0IFRva2VuXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRva2VuID0gdGhpcy50b2tlbnMucG9wKCk7XG59O1xuXG4vKipcbiAqIFByZXZpZXcgTmV4dCBUb2tlblxuICovXG5cblBhcnNlci5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoIC0gMV0gfHwgMDtcbn07XG5cbi8qKlxuICogUGFyc2UgVGV4dCBUb2tlbnNcbiAqL1xuXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlVGV4dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYm9keSA9IHRoaXMudG9rZW4udGV4dDtcblxuICB3aGlsZSAodGhpcy5wZWVrKCkudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgYm9keSArPSAnXFxuJyArIHRoaXMubmV4dCgpLnRleHQ7XG4gIH1cblxuICByZXR1cm4gdGhpcy5pbmxpbmUub3V0cHV0KGJvZHkpO1xufTtcblxuLyoqXG4gKiBQYXJzZSBDdXJyZW50IFRva2VuXG4gKi9cblxuUGFyc2VyLnByb3RvdHlwZS50b2sgPSBmdW5jdGlvbigpIHtcbiAgc3dpdGNoICh0aGlzLnRva2VuLnR5cGUpIHtcbiAgICBjYXNlICdzcGFjZSc6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY2FzZSAnaHInOiB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5ocigpO1xuICAgIH1cbiAgICBjYXNlICdoZWFkaW5nJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuaGVhZGluZyhcbiAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHRoaXMudG9rZW4udGV4dCksXG4gICAgICAgIHRoaXMudG9rZW4uZGVwdGgsXG4gICAgICAgIHVuZXNjYXBlKHRoaXMuaW5saW5lVGV4dC5vdXRwdXQodGhpcy50b2tlbi50ZXh0KSkpO1xuICAgIH1cbiAgICBjYXNlICdjb2RlJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuY29kZSh0aGlzLnRva2VuLnRleHQsXG4gICAgICAgIHRoaXMudG9rZW4ubGFuZyxcbiAgICAgICAgdGhpcy50b2tlbi5lc2NhcGVkKTtcbiAgICB9XG4gICAgY2FzZSAndGFibGUnOiB7XG4gICAgICB2YXIgaGVhZGVyID0gJycsXG4gICAgICAgICAgYm9keSA9ICcnLFxuICAgICAgICAgIGksXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNlbGwsXG4gICAgICAgICAgajtcblxuICAgICAgLy8gaGVhZGVyXG4gICAgICBjZWxsID0gJyc7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy50b2tlbi5oZWFkZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2VsbCArPSB0aGlzLnJlbmRlcmVyLnRhYmxlY2VsbChcbiAgICAgICAgICB0aGlzLmlubGluZS5vdXRwdXQodGhpcy50b2tlbi5oZWFkZXJbaV0pLFxuICAgICAgICAgIHsgaGVhZGVyOiB0cnVlLCBhbGlnbjogdGhpcy50b2tlbi5hbGlnbltpXSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBoZWFkZXIgKz0gdGhpcy5yZW5kZXJlci50YWJsZXJvdyhjZWxsKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMudG9rZW4uY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcm93ID0gdGhpcy50b2tlbi5jZWxsc1tpXTtcblxuICAgICAgICBjZWxsID0gJyc7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjZWxsICs9IHRoaXMucmVuZGVyZXIudGFibGVjZWxsKFxuICAgICAgICAgICAgdGhpcy5pbmxpbmUub3V0cHV0KHJvd1tqXSksXG4gICAgICAgICAgICB7IGhlYWRlcjogZmFsc2UsIGFsaWduOiB0aGlzLnRva2VuLmFsaWduW2pdIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgYm9keSArPSB0aGlzLnJlbmRlcmVyLnRhYmxlcm93KGNlbGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIudGFibGUoaGVhZGVyLCBib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnYmxvY2txdW90ZV9zdGFydCc6IHtcbiAgICAgIGJvZHkgPSAnJztcblxuICAgICAgd2hpbGUgKHRoaXMubmV4dCgpLnR5cGUgIT09ICdibG9ja3F1b3RlX2VuZCcpIHtcbiAgICAgICAgYm9keSArPSB0aGlzLnRvaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGJvZHkpO1xuICAgIH1cbiAgICBjYXNlICdsaXN0X3N0YXJ0Jzoge1xuICAgICAgYm9keSA9ICcnO1xuICAgICAgdmFyIG9yZGVyZWQgPSB0aGlzLnRva2VuLm9yZGVyZWQsXG4gICAgICAgICAgc3RhcnQgPSB0aGlzLnRva2VuLnN0YXJ0O1xuXG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfZW5kJykge1xuICAgICAgICBib2R5ICs9IHRoaXMudG9rKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmxpc3QoYm9keSwgb3JkZXJlZCwgc3RhcnQpO1xuICAgIH1cbiAgICBjYXNlICdsaXN0X2l0ZW1fc3RhcnQnOiB7XG4gICAgICBib2R5ID0gJyc7XG4gICAgICB2YXIgbG9vc2UgPSB0aGlzLnRva2VuLmxvb3NlO1xuXG4gICAgICBpZiAodGhpcy50b2tlbi50YXNrKSB7XG4gICAgICAgIGJvZHkgKz0gdGhpcy5yZW5kZXJlci5jaGVja2JveCh0aGlzLnRva2VuLmNoZWNrZWQpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAodGhpcy5uZXh0KCkudHlwZSAhPT0gJ2xpc3RfaXRlbV9lbmQnKSB7XG4gICAgICAgIGJvZHkgKz0gIWxvb3NlICYmIHRoaXMudG9rZW4udHlwZSA9PT0gJ3RleHQnXG4gICAgICAgICAgPyB0aGlzLnBhcnNlVGV4dCgpXG4gICAgICAgICAgOiB0aGlzLnRvaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0aXRlbShib2R5KTtcbiAgICB9XG4gICAgY2FzZSAnaHRtbCc6IHtcbiAgICAgIC8vIFRPRE8gcGFyc2UgaW5saW5lIGNvbnRlbnQgaWYgcGFyYW1ldGVyIG1hcmtkb3duPTFcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmh0bWwodGhpcy50b2tlbi50ZXh0KTtcbiAgICB9XG4gICAgY2FzZSAncGFyYWdyYXBoJzoge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMuaW5saW5lLm91dHB1dCh0aGlzLnRva2VuLnRleHQpKTtcbiAgICB9XG4gICAgY2FzZSAndGV4dCc6IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlVGV4dCgpKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShodG1sLCBlbmNvZGUpIHtcbiAgcmV0dXJuIGh0bWxcbiAgICAucmVwbGFjZSghZW5jb2RlID8gLyYoPyEjP1xcdys7KS9nIDogLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMzOTsnKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGUoaHRtbCkge1xuICAvLyBleHBsaWNpdGx5IG1hdGNoIGRlY2ltYWwsIGhleCwgYW5kIG5hbWVkIEhUTUwgZW50aXRpZXNcbiAgcmV0dXJuIGh0bWwucmVwbGFjZSgvJigjKD86XFxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/OlxcdyspKTs/L2lnLCBmdW5jdGlvbihfLCBuKSB7XG4gICAgbiA9IG4udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobiA9PT0gJ2NvbG9uJykgcmV0dXJuICc6JztcbiAgICBpZiAobi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgcmV0dXJuIG4uY2hhckF0KDEpID09PSAneCdcbiAgICAgICAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4uc3Vic3RyaW5nKDIpLCAxNikpXG4gICAgICAgIDogU3RyaW5nLmZyb21DaGFyQ29kZSgrbi5zdWJzdHJpbmcoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZGl0KHJlZ2V4LCBvcHQpIHtcbiAgcmVnZXggPSByZWdleC5zb3VyY2UgfHwgcmVnZXg7XG4gIG9wdCA9IG9wdCB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICByZXBsYWNlOiBmdW5jdGlvbihuYW1lLCB2YWwpIHtcbiAgICAgIHZhbCA9IHZhbC5zb3VyY2UgfHwgdmFsO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLyhefFteXFxbXSlcXF4vZywgJyQxJyk7XG4gICAgICByZWdleCA9IHJlZ2V4LnJlcGxhY2UobmFtZSwgdmFsKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZ2V0UmVnZXg6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsIG9wdCk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKGJhc2UsIGhyZWYpIHtcbiAgaWYgKCFiYXNlVXJsc1snICcgKyBiYXNlXSkge1xuICAgIC8vIHdlIGNhbiBpZ25vcmUgZXZlcnl0aGluZyBpbiBiYXNlIGFmdGVyIHRoZSBsYXN0IHNsYXNoIG9mIGl0cyBwYXRoIGNvbXBvbmVudCxcbiAgICAvLyBidXQgd2UgbWlnaHQgbmVlZCB0byBhZGQgX3RoYXRfXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zXG4gICAgaWYgKC9eW146XSs6XFwvKlteL10qJC8udGVzdChiYXNlKSkge1xuICAgICAgYmFzZVVybHNbJyAnICsgYmFzZV0gPSBiYXNlICsgJy8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlVXJsc1snICcgKyBiYXNlXSA9IHJ0cmltKGJhc2UsICcvJywgdHJ1ZSk7XG4gICAgfVxuICB9XG4gIGJhc2UgPSBiYXNlVXJsc1snICcgKyBiYXNlXTtcblxuICBpZiAoaHJlZi5zbGljZSgwLCAyKSA9PT0gJy8vJykge1xuICAgIHJldHVybiBiYXNlLnJlcGxhY2UoLzpbXFxzXFxTXSovLCAnOicpICsgaHJlZjtcbiAgfSBlbHNlIGlmIChocmVmLmNoYXJBdCgwKSA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIGJhc2UucmVwbGFjZSgvKDpcXC8qW14vXSopW1xcc1xcU10qLywgJyQxJykgKyBocmVmO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlICsgaHJlZjtcbiAgfVxufVxudmFyIGJhc2VVcmxzID0ge307XG52YXIgb3JpZ2luSW5kZXBlbmRlbnRVcmwgPSAvXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO1xuXG5mdW5jdGlvbiBub29wKCkge31cbm5vb3AuZXhlYyA9IG5vb3A7XG5cbmZ1bmN0aW9uIG1lcmdlKG9iaikge1xuICB2YXIgaSA9IDEsXG4gICAgICB0YXJnZXQsXG4gICAgICBrZXk7XG5cbiAgZm9yICg7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB0YXJnZXQgPSBhcmd1bWVudHNbaV07XG4gICAgZm9yIChrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwga2V5KSkge1xuICAgICAgICBvYmpba2V5XSA9IHRhcmdldFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHNwbGl0Q2VsbHModGFibGVSb3csIGNvdW50KSB7XG4gIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IGNlbGwtZGVsaW1pdGluZyBwaXBlIGhhcyBhIHNwYWNlXG4gIC8vIGJlZm9yZSBpdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGFuIGVzY2FwZWQgcGlwZVxuICB2YXIgcm93ID0gdGFibGVSb3cucmVwbGFjZSgvXFx8L2csIGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHIpIHtcbiAgICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGN1cnIgPSBvZmZzZXQ7XG4gICAgICAgIHdoaWxlICgtLWN1cnIgPj0gMCAmJiBzdHJbY3Vycl0gPT09ICdcXFxcJykgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgIC8vIG9kZCBudW1iZXIgb2Ygc2xhc2hlcyBtZWFucyB8IGlzIGVzY2FwZWRcbiAgICAgICAgICAvLyBzbyB3ZSBsZWF2ZSBpdCBhbG9uZVxuICAgICAgICAgIHJldHVybiAnfCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWRkIHNwYWNlIGJlZm9yZSB1bmVzY2FwZWQgfFxuICAgICAgICAgIHJldHVybiAnIHwnO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNlbGxzID0gcm93LnNwbGl0KC8gXFx8LyksXG4gICAgICBpID0gMDtcblxuICBpZiAoY2VsbHMubGVuZ3RoID4gY291bnQpIHtcbiAgICBjZWxscy5zcGxpY2UoY291bnQpO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChjZWxscy5sZW5ndGggPCBjb3VudCkgY2VsbHMucHVzaCgnJyk7XG4gIH1cblxuICBmb3IgKDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgcGVyIHRoZSBnZm0gc3BlY1xuICAgIGNlbGxzW2ldID0gY2VsbHNbaV0udHJpbSgpLnJlcGxhY2UoL1xcXFxcXHwvZywgJ3wnKTtcbiAgfVxuICByZXR1cm4gY2VsbHM7XG59XG5cbi8vIFJlbW92ZSB0cmFpbGluZyAnYydzLiBFcXVpdmFsZW50IHRvIHN0ci5yZXBsYWNlKC9jKiQvLCAnJykuXG4vLyAvYyokLyBpcyB2dWxuZXJhYmxlIHRvIFJFRE9TLlxuLy8gaW52ZXJ0OiBSZW1vdmUgc3VmZml4IG9mIG5vbi1jIGNoYXJzIGluc3RlYWQuIERlZmF1bHQgZmFsc2V5LlxuZnVuY3Rpb24gcnRyaW0oc3RyLCBjLCBpbnZlcnQpIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBMZW5ndGggb2Ygc3VmZml4IG1hdGNoaW5nIHRoZSBpbnZlcnQgY29uZGl0aW9uLlxuICB2YXIgc3VmZkxlbiA9IDA7XG5cbiAgLy8gU3RlcCBsZWZ0IHVudGlsIHdlIGZhaWwgdG8gbWF0Y2ggdGhlIGludmVydCBjb25kaXRpb24uXG4gIHdoaWxlIChzdWZmTGVuIDwgc3RyLmxlbmd0aCkge1xuICAgIHZhciBjdXJyQ2hhciA9IHN0ci5jaGFyQXQoc3RyLmxlbmd0aCAtIHN1ZmZMZW4gLSAxKTtcbiAgICBpZiAoY3VyckNoYXIgPT09IGMgJiYgIWludmVydCkge1xuICAgICAgc3VmZkxlbisrO1xuICAgIH0gZWxzZSBpZiAoY3VyckNoYXIgIT09IGMgJiYgaW52ZXJ0KSB7XG4gICAgICBzdWZmTGVuKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHIuc3Vic3RyKDAsIHN0ci5sZW5ndGggLSBzdWZmTGVuKTtcbn1cblxuLyoqXG4gKiBNYXJrZWRcbiAqL1xuXG5mdW5jdGlvbiBtYXJrZWQoc3JjLCBvcHQsIGNhbGxiYWNrKSB7XG4gIC8vIHRocm93IGVycm9yIGluIGNhc2Ugb2Ygbm9uIHN0cmluZyBpbnB1dFxuICBpZiAodHlwZW9mIHNyYyA9PT0gJ3VuZGVmaW5lZCcgfHwgc3JjID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBzcmMgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgJ1xuICAgICAgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3JjKSArICcsIHN0cmluZyBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGNhbGxiYWNrIHx8IHR5cGVvZiBvcHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdDtcbiAgICAgIG9wdCA9IG51bGw7XG4gICAgfVxuXG4gICAgb3B0ID0gbWVyZ2Uoe30sIG1hcmtlZC5kZWZhdWx0cywgb3B0IHx8IHt9KTtcblxuICAgIHZhciBoaWdobGlnaHQgPSBvcHQuaGlnaGxpZ2h0LFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgIHBlbmRpbmcsXG4gICAgICAgIGkgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRva2VucyA9IExleGVyLmxleChzcmMsIG9wdClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZSk7XG4gICAgfVxuXG4gICAgcGVuZGluZyA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBvcHQuaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0O1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG91dDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgb3V0ID0gUGFyc2VyLnBhcnNlKHRva2Vucywgb3B0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZXJyID0gZTtcbiAgICAgIH1cblxuICAgICAgb3B0LmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcblxuICAgICAgcmV0dXJuIGVyclxuICAgICAgICA/IGNhbGxiYWNrKGVycilcbiAgICAgICAgOiBjYWxsYmFjayhudWxsLCBvdXQpO1xuICAgIH07XG5cbiAgICBpZiAoIWhpZ2hsaWdodCB8fCBoaWdobGlnaHQubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICB9XG5cbiAgICBkZWxldGUgb3B0LmhpZ2hsaWdodDtcblxuICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUoKTtcblxuICAgIGZvciAoOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xuICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQodG9rZW4udGV4dCwgdG9rZW4ubGFuZywgZnVuY3Rpb24oZXJyLCBjb2RlKSB7XG4gICAgICAgICAgaWYgKGVycikgcmV0dXJuIGRvbmUoZXJyKTtcbiAgICAgICAgICBpZiAoY29kZSA9PSBudWxsIHx8IGNvZGUgPT09IHRva2VuLnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0b2tlbi50ZXh0ID0gY29kZTtcbiAgICAgICAgICB0b2tlbi5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAtLXBlbmRpbmcgfHwgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKHRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdCkgb3B0ID0gbWVyZ2Uoe30sIG1hcmtlZC5kZWZhdWx0cywgb3B0KTtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKExleGVyLmxleChzcmMsIG9wdCksIG9wdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlLm1lc3NhZ2UgKz0gJ1xcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLic7XG4gICAgaWYgKChvcHQgfHwgbWFya2VkLmRlZmF1bHRzKS5zaWxlbnQpIHtcbiAgICAgIHJldHVybiAnPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+J1xuICAgICAgICArIGVzY2FwZShlLm1lc3NhZ2UgKyAnJywgdHJ1ZSlcbiAgICAgICAgKyAnPC9wcmU+JztcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnNcbiAqL1xuXG5tYXJrZWQub3B0aW9ucyA9XG5tYXJrZWQuc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9wdCkge1xuICBtZXJnZShtYXJrZWQuZGVmYXVsdHMsIG9wdCk7XG4gIHJldHVybiBtYXJrZWQ7XG59O1xuXG5tYXJrZWQuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZVVybDogbnVsbCxcbiAgICBicmVha3M6IGZhbHNlLFxuICAgIGdmbTogdHJ1ZSxcbiAgICBoZWFkZXJJZHM6IHRydWUsXG4gICAgaGVhZGVyUHJlZml4OiAnJyxcbiAgICBoaWdobGlnaHQ6IG51bGwsXG4gICAgbGFuZ1ByZWZpeDogJ2xhbmd1YWdlLScsXG4gICAgbWFuZ2xlOiB0cnVlLFxuICAgIHBlZGFudGljOiBmYWxzZSxcbiAgICByZW5kZXJlcjogbmV3IFJlbmRlcmVyKCksXG4gICAgc2FuaXRpemU6IGZhbHNlLFxuICAgIHNhbml0aXplcjogbnVsbCxcbiAgICBzaWxlbnQ6IGZhbHNlLFxuICAgIHNtYXJ0TGlzdHM6IGZhbHNlLFxuICAgIHNtYXJ0eXBhbnRzOiBmYWxzZSxcbiAgICB0YWJsZXM6IHRydWUsXG4gICAgeGh0bWw6IGZhbHNlXG4gIH07XG59XG5cbm1hcmtlZC5kZWZhdWx0cyA9IG1hcmtlZC5nZXREZWZhdWx0cygpO1xuXG4vKipcbiAqIEV4cG9zZVxuICovXG5cbm1hcmtlZC5QYXJzZXIgPSBQYXJzZXI7XG5tYXJrZWQucGFyc2VyID0gUGFyc2VyLnBhcnNlO1xuXG5tYXJrZWQuUmVuZGVyZXIgPSBSZW5kZXJlcjtcbm1hcmtlZC5UZXh0UmVuZGVyZXIgPSBUZXh0UmVuZGVyZXI7XG5cbm1hcmtlZC5MZXhlciA9IExleGVyO1xubWFya2VkLmxleGVyID0gTGV4ZXIubGV4O1xuXG5tYXJrZWQuSW5saW5lTGV4ZXIgPSBJbmxpbmVMZXhlcjtcbm1hcmtlZC5pbmxpbmVMZXhlciA9IElubGluZUxleGVyLm91dHB1dDtcblxubWFya2VkLnBhcnNlID0gbWFya2VkO1xuXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gbWFya2VkO1xufSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uKCkgeyByZXR1cm4gbWFya2VkOyB9KTtcbn0gZWxzZSB7XG4gIHJvb3QubWFya2VkID0gbWFya2VkO1xufVxufSkodGhpcyB8fCAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLCBldmFsKShcInRoaXNcIik7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgaGxqcyA9IHJlcXVpcmUoJy4vaGlnaGxpZ2h0Jyk7XG5cbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnMWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy8xYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWJuZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FjY2Vzc2xvZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FjY2Vzc2xvZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYWN0aW9uc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYWN0aW9uc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhZGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hZGEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FwYWNoZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2FwYWNoZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXBwbGVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hcHBsZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY3BwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3BwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhcmR1aW5vJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJkdWlubycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXJtYXNtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXJtYXNtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4bWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94bWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FzY2lpZG9jJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXNjaWlkb2MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2FzcGVjdGonLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hc3BlY3RqJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdXRvaG90a2V5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXV0b2hvdGtleScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXV0b2l0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXV0b2l0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdhdnJhc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9hdnJhc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2F3aycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2F3aycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYXhhcHRhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYXhhcHRhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdiYXNoJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYmFzaCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYmFzaWMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9iYXNpYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnYm5mJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvYm5mJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdicmFpbmZ1Y2snLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9icmFpbmZ1Y2snKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NhbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NhbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY2FwbnByb3RvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2FwbnByb3RvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjZXlsb24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jZXlsb24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NsZWFuJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY2xlYW4nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2Nsb2p1cmUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbG9qdXJlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjbG9qdXJlLXJlcGwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jbG9qdXJlLXJlcGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NtYWtlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY21ha2UnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NvZmZlZXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NvZmZlZXNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnY29xJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY29xJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjb3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jb3MnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NybXNoJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvY3Jtc2gnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NyeXN0YWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jcnlzdGFsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdjc3AnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9jc3AnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2NzcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2NzcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2QnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21hcmtkb3duJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWFya2Rvd24nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RhcnQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kYXJ0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkZWxwaGknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kZWxwaGknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RpZmYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kaWZmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkamFuZ28nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kamFuZ28nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RucycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RucycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZG9ja2VyZmlsZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RvY2tlcmZpbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2RvcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2RvcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZHNjb25maWcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9kc2NvbmZpZycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZHRzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZHRzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdkdXN0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZHVzdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZWJuZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VibmYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2VsaXhpcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VsaXhpcicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZWxtJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZWxtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdydWJ5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcnVieScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZXJiJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZXJiJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlcmxhbmctcmVwbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2VybGFuZy1yZXBsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdlcmxhbmcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9lcmxhbmcnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2V4Y2VsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZXhjZWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2ZpeCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZpeCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZmxpeCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2ZsaXgnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2ZvcnRyYW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9mb3J0cmFuJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdmc2hhcnAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9mc2hhcnAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dhbXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nYW1zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnYXVzcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dhdXNzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnY29kZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2djb2RlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdnaGVya2luJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ2hlcmtpbicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnZ2xzbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dsc2wnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dvJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvZ28nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dvbG8nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9nb2xvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdncmFkbGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ncmFkbGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2dyb292eScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2dyb292eScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGFtbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hhbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hhbmRsZWJhcnMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9oYW5kbGViYXJzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdoYXNrZWxsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaGFza2VsbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaGF4ZScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hheGUnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2hzcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2hzcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaHRtbGJhcnMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9odG1sYmFycycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnaHR0cCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2h0dHAnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2h5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvaHknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2luZm9ybTcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pbmZvcm03JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdpbmknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9pbmknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2lycGY5MCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2lycGY5MCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnamF2YScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2phdmEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2phdmFzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qYXZhc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqYm9zcy1jbGknLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qYm9zcy1jbGknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2pzb24nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9qc29uJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqdWxpYScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2p1bGlhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdqdWxpYS1yZXBsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvanVsaWEtcmVwbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgna290bGluJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMva290bGluJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsYXNzbycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xhc3NvJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsZGlmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGRpZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGVhZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xlYWYnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xlc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sZXNzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsaXNwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbGlzcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGl2ZWNvZGVzZXJ2ZXInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9saXZlY29kZXNlcnZlcicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbGl2ZXNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2xpdmVzY3JpcHQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2xsdm0nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sbHZtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdsc2wnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9sc2wnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ2x1YScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL2x1YScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWFrZWZpbGUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYWtlZmlsZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWF0aGVtYXRpY2EnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXRoZW1hdGljYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWF0bGFiJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbWF0bGFiJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtYXhpbWEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tYXhpbWEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21lbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21lbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbWVyY3VyeScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21lcmN1cnknKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ21pcHNhc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9taXBzYXNtJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtaXphcicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL21pemFyJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwZXJsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGVybCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbW9qb2xpY2lvdXMnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9tb2pvbGljaW91cycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbW9ua2V5JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbW9ua2V5JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdtb29uc2NyaXB0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbW9vbnNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbjFxbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL24xcWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ25naW54JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbmdpbngnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ25pbXJvZCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL25pbXJvZCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnbml4JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbml4JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCduc2lzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvbnNpcycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnb2JqZWN0aXZlYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL29iamVjdGl2ZWMnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ29jYW1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb2NhbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ29wZW5zY2FkJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvb3BlbnNjYWQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ294eWdlbmUnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9veHlnZW5lJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwYXJzZXIzJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGFyc2VyMycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGYnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wZicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncGhwJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcGhwJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwb255JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcG9ueScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncG93ZXJzaGVsbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Bvd2Vyc2hlbGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Byb2Nlc3NpbmcnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wcm9jZXNzaW5nJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwcm9maWxlJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvZmlsZScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHJvbG9nJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHJvbG9nJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwcm90b2J1ZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Byb3RvYnVmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdwdXBwZXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9wdXBwZXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3B1cmViYXNpYycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3B1cmViYXNpYycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncHl0aG9uJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcHl0aG9uJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdxJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncW1sJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcW1sJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcicpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgncmliJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcmliJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyb2JvY29uZicsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JvYm9jb25mJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyb3V0ZXJvcycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3JvdXRlcm9zJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdyc2wnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9yc2wnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3J1bGVzbGFuZ3VhZ2UnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9ydWxlc2xhbmd1YWdlJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdydXN0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvcnVzdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2NhbGEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zY2FsYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc2NoZW1lJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc2NoZW1lJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzY2lsYWInLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zY2lsYWInKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Njc3MnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zY3NzJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzaGVsbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NoZWxsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzbWFsaScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NtYWxpJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzbWFsbHRhbGsnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zbWFsbHRhbGsnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3NtbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3NtbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3FmJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3FmJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzcWwnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zcWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N0YW4nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdGFuJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdGF0YScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N0YXRhJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCdzdGVwMjEnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy9zdGVwMjEnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N0eWx1cycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N0eWx1cycpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnc3VidW5pdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3N1YnVuaXQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3N3aWZ0JywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvc3dpZnQnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RhZ2dlcnNjcmlwdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RhZ2dlcnNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgneWFtbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3lhbWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RhcCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RhcCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndGNsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdGNsJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd0ZXgnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90ZXgnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3RocmlmdCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3RocmlmdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndHAnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90cCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndHdpZycsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3R3aWcnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3R5cGVzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy90eXBlc2NyaXB0JykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2YWxhJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmFsYScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmJuZXQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92Ym5ldCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmJzY3JpcHQnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92YnNjcmlwdCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmJzY3JpcHQtaHRtbCcsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3Zic2NyaXB0LWh0bWwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3Zlcmlsb2cnLCByZXF1aXJlKCcuL2xhbmd1YWdlcy92ZXJpbG9nJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd2aGRsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmhkbCcpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgndmltJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvdmltJykpO1xuaGxqcy5yZWdpc3Rlckxhbmd1YWdlKCd4ODZhc20nLCByZXF1aXJlKCcuL2xhbmd1YWdlcy94ODZhc20nKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3hsJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMveGwnKSk7XG5obGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoJ3hxdWVyeScsIHJlcXVpcmUoJy4vbGFuZ3VhZ2VzL3hxdWVyeScpKTtcbmhsanMucmVnaXN0ZXJMYW5ndWFnZSgnemVwaGlyJywgcmVxdWlyZSgnLi9sYW5ndWFnZXMvemVwaGlyJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhsanM7IiwiLypcblN5bnRheCBoaWdobGlnaHRpbmcgd2l0aCBsYW5ndWFnZSBhdXRvZGV0ZWN0aW9uLlxuaHR0cHM6Ly9oaWdobGlnaHRqcy5vcmcvXG4qL1xuXG4oZnVuY3Rpb24oZmFjdG9yeSkge1xuXG4gIC8vIEZpbmQgdGhlIGdsb2JhbCBvYmplY3QgZm9yIGV4cG9ydCB0byBib3RoIHRoZSBicm93c2VyIGFuZCB3ZWIgd29ya2Vycy5cbiAgdmFyIGdsb2JhbE9iamVjdCA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHdpbmRvdyB8fFxuICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYgPT09ICdvYmplY3QnICYmIHNlbGY7XG5cbiAgLy8gU2V0dXAgaGlnaGxpZ2h0LmpzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLiBGaXJzdCBpcyBOb2RlLmpzIG9yXG4gIC8vIENvbW1vbkpTLlxuICBpZih0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMpO1xuICB9IGVsc2UgaWYoZ2xvYmFsT2JqZWN0KSB7XG4gICAgLy8gRXhwb3J0IGhsanMgZ2xvYmFsbHkgZXZlbiB3aGVuIHVzaW5nIEFNRCBmb3IgY2FzZXMgd2hlbiB0aGlzIHNjcmlwdFxuICAgIC8vIGlzIGxvYWRlZCB3aXRoIG90aGVycyB0aGF0IG1heSBzdGlsbCBleHBlY3QgYSBnbG9iYWwgaGxqcy5cbiAgICBnbG9iYWxPYmplY3QuaGxqcyA9IGZhY3Rvcnkoe30pO1xuXG4gICAgLy8gRmluYWxseSByZWdpc3RlciB0aGUgZ2xvYmFsIGhsanMgd2l0aCBBTUQuXG4gICAgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmhsanM7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufShmdW5jdGlvbihobGpzKSB7XG4gIC8vIENvbnZlbmllbmNlIHZhcmlhYmxlcyBmb3IgYnVpbGQtaW4gb2JqZWN0c1xuICB2YXIgQXJyYXlQcm90byA9IFtdLFxuICAgICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xuXG4gIC8vIEdsb2JhbCBpbnRlcm5hbCB2YXJpYWJsZXMgdXNlZCB3aXRoaW4gdGhlIGhpZ2hsaWdodC5qcyBsaWJyYXJ5LlxuICB2YXIgbGFuZ3VhZ2VzID0ge30sXG4gICAgICBhbGlhc2VzICAgPSB7fTtcblxuICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgdGhyb3VnaG91dCB0aGUgaGlnaGxpZ2h0LmpzIGxpYnJhcnkuXG4gIHZhciBub0hpZ2hsaWdodFJlICAgID0gL14obm8tP2hpZ2hsaWdodHxwbGFpbnx0ZXh0KSQvaSxcbiAgICAgIGxhbmd1YWdlUHJlZml4UmUgPSAvXFxibGFuZyg/OnVhZ2UpPy0oW1xcdy1dKylcXGIvaSxcbiAgICAgIGZpeE1hcmt1cFJlICAgICAgPSAvKCheKDxbXj5dKz58XFx0fCkrfCg/OlxcbikpKS9nbTtcblxuICB2YXIgc3BhbkVuZFRhZyA9ICc8L3NwYW4+JztcblxuICAvLyBHbG9iYWwgb3B0aW9ucyB1c2VkIHdoZW4gd2l0aGluIGV4dGVybmFsIEFQSXMuIFRoaXMgaXMgbW9kaWZpZWQgd2hlblxuICAvLyBjYWxsaW5nIHRoZSBgaGxqcy5jb25maWd1cmVgIGZ1bmN0aW9uLlxuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBjbGFzc1ByZWZpeDogJ2hsanMtJyxcbiAgICB0YWJSZXBsYWNlOiBudWxsLFxuICAgIHVzZUJSOiBmYWxzZSxcbiAgICBsYW5ndWFnZXM6IHVuZGVmaW5lZFxuICB9O1xuXG5cbiAgLyogVXRpbGl0eSBmdW5jdGlvbnMgKi9cblxuICBmdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVzdFJlKHJlLCBsZXhlbWUpIHtcbiAgICB2YXIgbWF0Y2ggPSByZSAmJiByZS5leGVjKGxleGVtZSk7XG4gICAgcmV0dXJuIG1hdGNoICYmIG1hdGNoLmluZGV4ID09PSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb3RIaWdobGlnaHRlZChsYW5ndWFnZSkge1xuICAgIHJldHVybiBub0hpZ2hsaWdodFJlLnRlc3QobGFuZ3VhZ2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gYmxvY2tMYW5ndWFnZShibG9jaykge1xuICAgIHZhciBpLCBtYXRjaCwgbGVuZ3RoLCBfY2xhc3M7XG4gICAgdmFyIGNsYXNzZXMgPSBibG9jay5jbGFzc05hbWUgKyAnICc7XG5cbiAgICBjbGFzc2VzICs9IGJsb2NrLnBhcmVudE5vZGUgPyBibG9jay5wYXJlbnROb2RlLmNsYXNzTmFtZSA6ICcnO1xuXG4gICAgLy8gbGFuZ3VhZ2UtKiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbm9uLXByZWZpeGVkIGNsYXNzIG5hbWVzLlxuICAgIG1hdGNoID0gbGFuZ3VhZ2VQcmVmaXhSZS5leGVjKGNsYXNzZXMpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIGdldExhbmd1YWdlKG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ25vLWhpZ2hsaWdodCc7XG4gICAgfVxuXG4gICAgY2xhc3NlcyA9IGNsYXNzZXMuc3BsaXQoL1xccysvKTtcblxuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIF9jbGFzcyA9IGNsYXNzZXNbaV1cblxuICAgICAgaWYgKGlzTm90SGlnaGxpZ2h0ZWQoX2NsYXNzKSB8fCBnZXRMYW5ndWFnZShfY2xhc3MpKSB7XG4gICAgICAgIHJldHVybiBfY2xhc3M7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5oZXJpdChwYXJlbnQpIHsgIC8vIGluaGVyaXQocGFyZW50LCBvdmVycmlkZV9vYmosIG92ZXJyaWRlX29iaiwgLi4uKVxuICAgIHZhciBrZXk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBvYmplY3RzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIGZvciAoa2V5IGluIHBhcmVudClcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyZW50W2tleV07XG4gICAgb2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xuICAgICAgZm9yIChrZXkgaW4gb2JqKVxuICAgICAgICByZXN1bHRba2V5XSA9IG9ialtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKiBTdHJlYW0gbWVyZ2luZyAqL1xuXG4gIGZ1bmN0aW9uIG5vZGVTdHJlYW0obm9kZSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAoZnVuY3Rpb24gX25vZGVTdHJlYW0obm9kZSwgb2Zmc2V0KSB7XG4gICAgICBmb3IgKHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAzKVxuICAgICAgICAgIG9mZnNldCArPSBjaGlsZC5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgICBlbHNlIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgIGV2ZW50OiAnc3RhcnQnLFxuICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICBub2RlOiBjaGlsZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG9mZnNldCA9IF9ub2RlU3RyZWFtKGNoaWxkLCBvZmZzZXQpO1xuICAgICAgICAgIC8vIFByZXZlbnQgdm9pZCBlbGVtZW50cyBmcm9tIGhhdmluZyBhbiBlbmQgdGFnIHRoYXQgd291bGQgYWN0dWFsbHlcbiAgICAgICAgICAvLyBkb3VibGUgdGhlbSBpbiB0aGUgb3V0cHV0LiBUaGVyZSBhcmUgbW9yZSB2b2lkIGVsZW1lbnRzIGluIEhUTUxcbiAgICAgICAgICAvLyBidXQgd2UgbGlzdCBvbmx5IHRob3NlIHJlYWxpc3RpY2FsbHkgZXhwZWN0ZWQgaW4gY29kZSBkaXNwbGF5LlxuICAgICAgICAgIGlmICghdGFnKGNoaWxkKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0LykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgZXZlbnQ6ICdzdG9wJyxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgICAgICAgIG5vZGU6IGNoaWxkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfSkobm9kZSwgMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlU3RyZWFtcyhvcmlnaW5hbCwgaGlnaGxpZ2h0ZWQsIHZhbHVlKSB7XG4gICAgdmFyIHByb2Nlc3NlZCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBub2RlU3RhY2sgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHNlbGVjdFN0cmVhbSgpIHtcbiAgICAgIGlmICghb3JpZ2luYWwubGVuZ3RoIHx8ICFoaWdobGlnaHRlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmxlbmd0aCA/IG9yaWdpbmFsIDogaGlnaGxpZ2h0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAob3JpZ2luYWxbMF0ub2Zmc2V0ICE9PSBoaWdobGlnaHRlZFswXS5vZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbFswXS5vZmZzZXQgPCBoaWdobGlnaHRlZFswXS5vZmZzZXQpID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIFRvIGF2b2lkIHN0YXJ0aW5nIHRoZSBzdHJlYW0ganVzdCBiZWZvcmUgaXQgc2hvdWxkIHN0b3AgdGhlIG9yZGVyIGlzXG4gICAgICBlbnN1cmVkIHRoYXQgb3JpZ2luYWwgYWx3YXlzIHN0YXJ0cyBmaXJzdCBhbmQgY2xvc2VzIGxhc3Q6XG5cbiAgICAgIGlmIChldmVudDEgPT0gJ3N0YXJ0JyAmJiBldmVudDIgPT0gJ3N0YXJ0JylcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgaWYgKGV2ZW50MSA9PSAnc3RhcnQnICYmIGV2ZW50MiA9PSAnc3RvcCcpXG4gICAgICAgIHJldHVybiBoaWdobGlnaHRlZDtcbiAgICAgIGlmIChldmVudDEgPT0gJ3N0b3AnICYmIGV2ZW50MiA9PSAnc3RhcnQnKVxuICAgICAgICByZXR1cm4gb3JpZ2luYWw7XG4gICAgICBpZiAoZXZlbnQxID09ICdzdG9wJyAmJiBldmVudDIgPT0gJ3N0b3AnKVxuICAgICAgICByZXR1cm4gaGlnaGxpZ2h0ZWQ7XG5cbiAgICAgIC4uLiB3aGljaCBpcyBjb2xsYXBzZWQgdG86XG4gICAgICAqL1xuICAgICAgcmV0dXJuIGhpZ2hsaWdodGVkWzBdLmV2ZW50ID09PSAnc3RhcnQnID8gb3JpZ2luYWwgOiBoaWdobGlnaHRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuKG5vZGUpIHtcbiAgICAgIGZ1bmN0aW9uIGF0dHJfc3RyKGEpIHtyZXR1cm4gJyAnICsgYS5ub2RlTmFtZSArICc9XCInICsgZXNjYXBlKGEudmFsdWUpLnJlcGxhY2UoJ1wiJywgJyZxdW90OycpICsgJ1wiJzt9XG4gICAgICByZXN1bHQgKz0gJzwnICsgdGFnKG5vZGUpICsgQXJyYXlQcm90by5tYXAuY2FsbChub2RlLmF0dHJpYnV0ZXMsIGF0dHJfc3RyKS5qb2luKCcnKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZShub2RlKSB7XG4gICAgICByZXN1bHQgKz0gJzwvJyArIHRhZyhub2RlKSArICc+JztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW5kZXIoZXZlbnQpIHtcbiAgICAgIChldmVudC5ldmVudCA9PT0gJ3N0YXJ0JyA/IG9wZW4gOiBjbG9zZSkoZXZlbnQubm9kZSk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG9yaWdpbmFsLmxlbmd0aCB8fCBoaWdobGlnaHRlZC5sZW5ndGgpIHtcbiAgICAgIHZhciBzdHJlYW0gPSBzZWxlY3RTdHJlYW0oKTtcbiAgICAgIHJlc3VsdCArPSBlc2NhcGUodmFsdWUuc3Vic3RyaW5nKHByb2Nlc3NlZCwgc3RyZWFtWzBdLm9mZnNldCkpO1xuICAgICAgcHJvY2Vzc2VkID0gc3RyZWFtWzBdLm9mZnNldDtcbiAgICAgIGlmIChzdHJlYW0gPT09IG9yaWdpbmFsKSB7XG4gICAgICAgIC8qXG4gICAgICAgIE9uIGFueSBvcGVuaW5nIG9yIGNsb3NpbmcgdGFnIG9mIHRoZSBvcmlnaW5hbCBtYXJrdXAgd2UgZmlyc3QgY2xvc2VcbiAgICAgICAgdGhlIGVudGlyZSBoaWdobGlnaHRlZCBub2RlIHN0YWNrLCB0aGVuIHJlbmRlciB0aGUgb3JpZ2luYWwgdGFnIGFsb25nXG4gICAgICAgIHdpdGggYWxsIHRoZSBmb2xsb3dpbmcgb3JpZ2luYWwgdGFncyBhdCB0aGUgc2FtZSBvZmZzZXQgYW5kIHRoZW5cbiAgICAgICAgcmVvcGVuIGFsbCB0aGUgdGFncyBvbiB0aGUgaGlnaGxpZ2h0ZWQgc3RhY2suXG4gICAgICAgICovXG4gICAgICAgIG5vZGVTdGFjay5yZXZlcnNlKCkuZm9yRWFjaChjbG9zZSk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICAgICAgc3RyZWFtID0gc2VsZWN0U3RyZWFtKCk7XG4gICAgICAgIH0gd2hpbGUgKHN0cmVhbSA9PT0gb3JpZ2luYWwgJiYgc3RyZWFtLmxlbmd0aCAmJiBzdHJlYW1bMF0ub2Zmc2V0ID09PSBwcm9jZXNzZWQpO1xuICAgICAgICBub2RlU3RhY2sucmV2ZXJzZSgpLmZvckVhY2gob3Blbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RyZWFtWzBdLmV2ZW50ID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgbm9kZVN0YWNrLnB1c2goc3RyZWFtWzBdLm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoc3RyZWFtLnNwbGljZSgwLCAxKVswXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgKyBlc2NhcGUodmFsdWUuc3Vic3RyKHByb2Nlc3NlZCkpO1xuICB9XG5cbiAgLyogSW5pdGlhbGl6YXRpb24gKi9cblxuICBmdW5jdGlvbiBleHBhbmRfbW9kZShtb2RlKSB7XG4gICAgaWYgKG1vZGUudmFyaWFudHMgJiYgIW1vZGUuY2FjaGVkX3ZhcmlhbnRzKSB7XG4gICAgICBtb2RlLmNhY2hlZF92YXJpYW50cyA9IG1vZGUudmFyaWFudHMubWFwKGZ1bmN0aW9uKHZhcmlhbnQpIHtcbiAgICAgICAgcmV0dXJuIGluaGVyaXQobW9kZSwge3ZhcmlhbnRzOiBudWxsfSwgdmFyaWFudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGUuY2FjaGVkX3ZhcmlhbnRzIHx8IChtb2RlLmVuZHNXaXRoUGFyZW50ICYmIFtpbmhlcml0KG1vZGUpXSkgfHwgW21vZGVdO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZUxhbmd1YWdlKGxhbmd1YWdlKSB7XG5cbiAgICBmdW5jdGlvbiByZVN0cihyZSkge1xuICAgICAgICByZXR1cm4gKHJlICYmIHJlLnNvdXJjZSkgfHwgcmU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGFuZ1JlKHZhbHVlLCBnbG9iYWwpIHtcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKFxuICAgICAgICByZVN0cih2YWx1ZSksXG4gICAgICAgICdtJyArIChsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlID8gJ2knIDogJycpICsgKGdsb2JhbCA/ICdnJyA6ICcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21waWxlTW9kZShtb2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChtb2RlLmNvbXBpbGVkKVxuICAgICAgICByZXR1cm47XG4gICAgICBtb2RlLmNvbXBpbGVkID0gdHJ1ZTtcblxuICAgICAgbW9kZS5rZXl3b3JkcyA9IG1vZGUua2V5d29yZHMgfHwgbW9kZS5iZWdpbktleXdvcmRzO1xuICAgICAgaWYgKG1vZGUua2V5d29yZHMpIHtcbiAgICAgICAgdmFyIGNvbXBpbGVkX2tleXdvcmRzID0ge307XG5cbiAgICAgICAgdmFyIGZsYXR0ZW4gPSBmdW5jdGlvbihjbGFzc05hbWUsIHN0cikge1xuICAgICAgICAgIGlmIChsYW5ndWFnZS5jYXNlX2luc2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbihrdykge1xuICAgICAgICAgICAgdmFyIHBhaXIgPSBrdy5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgY29tcGlsZWRfa2V5d29yZHNbcGFpclswXV0gPSBbY2xhc3NOYW1lLCBwYWlyWzFdID8gTnVtYmVyKHBhaXJbMV0pIDogMV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlLmtleXdvcmRzID09PSAnc3RyaW5nJykgeyAvLyBzdHJpbmdcbiAgICAgICAgICBmbGF0dGVuKCdrZXl3b3JkJywgbW9kZS5rZXl3b3Jkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqZWN0S2V5cyhtb2RlLmtleXdvcmRzKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGZsYXR0ZW4oY2xhc3NOYW1lLCBtb2RlLmtleXdvcmRzW2NsYXNzTmFtZV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1vZGUua2V5d29yZHMgPSBjb21waWxlZF9rZXl3b3JkcztcbiAgICAgIH1cbiAgICAgIG1vZGUubGV4ZW1lc1JlID0gbGFuZ1JlKG1vZGUubGV4ZW1lcyB8fCAvXFx3Ky8sIHRydWUpO1xuXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGlmIChtb2RlLmJlZ2luS2V5d29yZHMpIHtcbiAgICAgICAgICBtb2RlLmJlZ2luID0gJ1xcXFxiKCcgKyBtb2RlLmJlZ2luS2V5d29yZHMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxiJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vZGUuYmVnaW4pXG4gICAgICAgICAgbW9kZS5iZWdpbiA9IC9cXEJ8XFxiLztcbiAgICAgICAgbW9kZS5iZWdpblJlID0gbGFuZ1JlKG1vZGUuYmVnaW4pO1xuICAgICAgICBpZiAoIW1vZGUuZW5kICYmICFtb2RlLmVuZHNXaXRoUGFyZW50KVxuICAgICAgICAgIG1vZGUuZW5kID0gL1xcQnxcXGIvO1xuICAgICAgICBpZiAobW9kZS5lbmQpXG4gICAgICAgICAgbW9kZS5lbmRSZSA9IGxhbmdSZShtb2RlLmVuZCk7XG4gICAgICAgIG1vZGUudGVybWluYXRvcl9lbmQgPSByZVN0cihtb2RlLmVuZCkgfHwgJyc7XG4gICAgICAgIGlmIChtb2RlLmVuZHNXaXRoUGFyZW50ICYmIHBhcmVudC50ZXJtaW5hdG9yX2VuZClcbiAgICAgICAgICBtb2RlLnRlcm1pbmF0b3JfZW5kICs9IChtb2RlLmVuZCA/ICd8JyA6ICcnKSArIHBhcmVudC50ZXJtaW5hdG9yX2VuZDtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlLmlsbGVnYWwpXG4gICAgICAgIG1vZGUuaWxsZWdhbFJlID0gbGFuZ1JlKG1vZGUuaWxsZWdhbCk7XG4gICAgICBpZiAobW9kZS5yZWxldmFuY2UgPT0gbnVsbClcbiAgICAgICAgbW9kZS5yZWxldmFuY2UgPSAxO1xuICAgICAgaWYgKCFtb2RlLmNvbnRhaW5zKSB7XG4gICAgICAgIG1vZGUuY29udGFpbnMgPSBbXTtcbiAgICAgIH1cbiAgICAgIG1vZGUuY29udGFpbnMgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBtb2RlLmNvbnRhaW5zLm1hcChmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBleHBhbmRfbW9kZShjID09PSAnc2VsZicgPyBtb2RlIDogYylcbiAgICAgIH0pKTtcbiAgICAgIG1vZGUuY29udGFpbnMuZm9yRWFjaChmdW5jdGlvbihjKSB7Y29tcGlsZU1vZGUoYywgbW9kZSk7fSk7XG5cbiAgICAgIGlmIChtb2RlLnN0YXJ0cykge1xuICAgICAgICBjb21waWxlTW9kZShtb2RlLnN0YXJ0cywgcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgdmFyIHRlcm1pbmF0b3JzID1cbiAgICAgICAgbW9kZS5jb250YWlucy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICAgIHJldHVybiBjLmJlZ2luS2V5d29yZHMgPyAnXFxcXC4/KCcgKyBjLmJlZ2luICsgJylcXFxcLj8nIDogYy5iZWdpbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbbW9kZS50ZXJtaW5hdG9yX2VuZCwgbW9kZS5pbGxlZ2FsXSlcbiAgICAgICAgLm1hcChyZVN0cilcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIG1vZGUudGVybWluYXRvcnMgPSB0ZXJtaW5hdG9ycy5sZW5ndGggPyBsYW5nUmUodGVybWluYXRvcnMuam9pbignfCcpLCB0cnVlKSA6IHtleGVjOiBmdW5jdGlvbigvKnMqLykge3JldHVybiBudWxsO319O1xuICAgIH1cblxuICAgIGNvbXBpbGVNb2RlKGxhbmd1YWdlKTtcbiAgfVxuXG4gIC8qXG4gIENvcmUgaGlnaGxpZ2h0aW5nIGZ1bmN0aW9uLiBBY2NlcHRzIGEgbGFuZ3VhZ2UgbmFtZSwgb3IgYW4gYWxpYXMsIGFuZCBhXG4gIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvIGhpZ2hsaWdodC4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nXG4gIHByb3BlcnRpZXM6XG5cbiAgLSByZWxldmFuY2UgKGludClcbiAgLSB2YWx1ZSAoYW4gSFRNTCBzdHJpbmcgd2l0aCBoaWdobGlnaHRpbmcgbWFya3VwKVxuXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodChuYW1lLCB2YWx1ZSwgaWdub3JlX2lsbGVnYWxzLCBjb250aW51YXRpb24pIHtcblxuICAgIGZ1bmN0aW9uIHN1Yk1vZGUobGV4ZW1lLCBtb2RlKSB7XG4gICAgICB2YXIgaSwgbGVuZ3RoO1xuXG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBtb2RlLmNvbnRhaW5zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0ZXN0UmUobW9kZS5jb250YWluc1tpXS5iZWdpblJlLCBsZXhlbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIG1vZGUuY29udGFpbnNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZk1vZGUobW9kZSwgbGV4ZW1lKSB7XG4gICAgICBpZiAodGVzdFJlKG1vZGUuZW5kUmUsIGxleGVtZSkpIHtcbiAgICAgICAgd2hpbGUgKG1vZGUuZW5kc1BhcmVudCAmJiBtb2RlLnBhcmVudCkge1xuICAgICAgICAgIG1vZGUgPSBtb2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kZTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2RlLmVuZHNXaXRoUGFyZW50KSB7XG4gICAgICAgIHJldHVybiBlbmRPZk1vZGUobW9kZS5wYXJlbnQsIGxleGVtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJbGxlZ2FsKGxleGVtZSwgbW9kZSkge1xuICAgICAgcmV0dXJuICFpZ25vcmVfaWxsZWdhbHMgJiYgdGVzdFJlKG1vZGUuaWxsZWdhbFJlLCBsZXhlbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleXdvcmRNYXRjaChtb2RlLCBtYXRjaCkge1xuICAgICAgdmFyIG1hdGNoX3N0ciA9IGxhbmd1YWdlLmNhc2VfaW5zZW5zaXRpdmUgPyBtYXRjaFswXS50b0xvd2VyQ2FzZSgpIDogbWF0Y2hbMF07XG4gICAgICByZXR1cm4gbW9kZS5rZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eShtYXRjaF9zdHIpICYmIG1vZGUua2V5d29yZHNbbWF0Y2hfc3RyXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWlsZFNwYW4oY2xhc3NuYW1lLCBpbnNpZGVTcGFuLCBsZWF2ZU9wZW4sIG5vUHJlZml4KSB7XG4gICAgICB2YXIgY2xhc3NQcmVmaXggPSBub1ByZWZpeCA/ICcnIDogb3B0aW9ucy5jbGFzc1ByZWZpeCxcbiAgICAgICAgICBvcGVuU3BhbiAgICA9ICc8c3BhbiBjbGFzcz1cIicgKyBjbGFzc1ByZWZpeCxcbiAgICAgICAgICBjbG9zZVNwYW4gICA9IGxlYXZlT3BlbiA/ICcnIDogc3BhbkVuZFRhZ1xuXG4gICAgICBvcGVuU3BhbiArPSBjbGFzc25hbWUgKyAnXCI+JztcblxuICAgICAgcmV0dXJuIG9wZW5TcGFuICsgaW5zaWRlU3BhbiArIGNsb3NlU3BhbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzS2V5d29yZHMoKSB7XG4gICAgICB2YXIga2V5d29yZF9tYXRjaCwgbGFzdF9pbmRleCwgbWF0Y2gsIHJlc3VsdDtcblxuICAgICAgaWYgKCF0b3Aua2V5d29yZHMpXG4gICAgICAgIHJldHVybiBlc2NhcGUobW9kZV9idWZmZXIpO1xuXG4gICAgICByZXN1bHQgPSAnJztcbiAgICAgIGxhc3RfaW5kZXggPSAwO1xuICAgICAgdG9wLmxleGVtZXNSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbWF0Y2ggPSB0b3AubGV4ZW1lc1JlLmV4ZWMobW9kZV9idWZmZXIpO1xuXG4gICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZShtb2RlX2J1ZmZlci5zdWJzdHJpbmcobGFzdF9pbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAga2V5d29yZF9tYXRjaCA9IGtleXdvcmRNYXRjaCh0b3AsIG1hdGNoKTtcbiAgICAgICAgaWYgKGtleXdvcmRfbWF0Y2gpIHtcbiAgICAgICAgICByZWxldmFuY2UgKz0ga2V5d29yZF9tYXRjaFsxXTtcbiAgICAgICAgICByZXN1bHQgKz0gYnVpbGRTcGFuKGtleXdvcmRfbWF0Y2hbMF0sIGVzY2FwZShtYXRjaFswXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGUobWF0Y2hbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RfaW5kZXggPSB0b3AubGV4ZW1lc1JlLmxhc3RJbmRleDtcbiAgICAgICAgbWF0Y2ggPSB0b3AubGV4ZW1lc1JlLmV4ZWMobW9kZV9idWZmZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdCArIGVzY2FwZShtb2RlX2J1ZmZlci5zdWJzdHIobGFzdF9pbmRleCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NTdWJMYW5ndWFnZSgpIHtcbiAgICAgIHZhciBleHBsaWNpdCA9IHR5cGVvZiB0b3Auc3ViTGFuZ3VhZ2UgPT09ICdzdHJpbmcnO1xuICAgICAgaWYgKGV4cGxpY2l0ICYmICFsYW5ndWFnZXNbdG9wLnN1Ykxhbmd1YWdlXSkge1xuICAgICAgICByZXR1cm4gZXNjYXBlKG1vZGVfYnVmZmVyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IGV4cGxpY2l0ID9cbiAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQodG9wLnN1Ykxhbmd1YWdlLCBtb2RlX2J1ZmZlciwgdHJ1ZSwgY29udGludWF0aW9uc1t0b3Auc3ViTGFuZ3VhZ2VdKSA6XG4gICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0QXV0byhtb2RlX2J1ZmZlciwgdG9wLnN1Ykxhbmd1YWdlLmxlbmd0aCA/IHRvcC5zdWJMYW5ndWFnZSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIENvdW50aW5nIGVtYmVkZGVkIGxhbmd1YWdlIHNjb3JlIHRvd2FyZHMgdGhlIGhvc3QgbGFuZ3VhZ2UgbWF5IGJlIGRpc2FibGVkXG4gICAgICAvLyB3aXRoIHplcm9pbmcgdGhlIGNvbnRhaW5pbmcgbW9kZSByZWxldmFuY2UuIFVzZWNhc2UgaW4gcG9pbnQgaXMgTWFya2Rvd24gdGhhdFxuICAgICAgLy8gYWxsb3dzIFhNTCBldmVyeXdoZXJlIGFuZCBtYWtlcyBldmVyeSBYTUwgc25pcHBldCB0byBoYXZlIGEgbXVjaCBsYXJnZXIgTWFya2Rvd25cbiAgICAgIC8vIHNjb3JlLlxuICAgICAgaWYgKHRvcC5yZWxldmFuY2UgPiAwKSB7XG4gICAgICAgIHJlbGV2YW5jZSArPSByZXN1bHQucmVsZXZhbmNlO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAgIGNvbnRpbnVhdGlvbnNbdG9wLnN1Ykxhbmd1YWdlXSA9IHJlc3VsdC50b3A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVpbGRTcGFuKHJlc3VsdC5sYW5ndWFnZSwgcmVzdWx0LnZhbHVlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0J1ZmZlcigpIHtcbiAgICAgIHJlc3VsdCArPSAodG9wLnN1Ykxhbmd1YWdlICE9IG51bGwgPyBwcm9jZXNzU3ViTGFuZ3VhZ2UoKSA6IHByb2Nlc3NLZXl3b3JkcygpKTtcbiAgICAgIG1vZGVfYnVmZmVyID0gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnROZXdNb2RlKG1vZGUpIHtcbiAgICAgIHJlc3VsdCArPSBtb2RlLmNsYXNzTmFtZT8gYnVpbGRTcGFuKG1vZGUuY2xhc3NOYW1lLCAnJywgdHJ1ZSk6ICcnO1xuICAgICAgdG9wID0gT2JqZWN0LmNyZWF0ZShtb2RlLCB7cGFyZW50OiB7dmFsdWU6IHRvcH19KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzTGV4ZW1lKGJ1ZmZlciwgbGV4ZW1lKSB7XG5cbiAgICAgIG1vZGVfYnVmZmVyICs9IGJ1ZmZlcjtcblxuICAgICAgaWYgKGxleGVtZSA9PSBudWxsKSB7XG4gICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdfbW9kZSA9IHN1Yk1vZGUobGV4ZW1lLCB0b3ApO1xuICAgICAgaWYgKG5ld19tb2RlKSB7XG4gICAgICAgIGlmIChuZXdfbW9kZS5za2lwKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdfbW9kZS5leGNsdWRlQmVnaW4pIHtcbiAgICAgICAgICAgIG1vZGVfYnVmZmVyICs9IGxleGVtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0J1ZmZlcigpO1xuICAgICAgICAgIGlmICghbmV3X21vZGUucmV0dXJuQmVnaW4gJiYgIW5ld19tb2RlLmV4Y2x1ZGVCZWdpbikge1xuICAgICAgICAgICAgbW9kZV9idWZmZXIgPSBsZXhlbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXJ0TmV3TW9kZShuZXdfbW9kZSwgbGV4ZW1lKTtcbiAgICAgICAgcmV0dXJuIG5ld19tb2RlLnJldHVybkJlZ2luID8gMCA6IGxleGVtZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHZhciBlbmRfbW9kZSA9IGVuZE9mTW9kZSh0b3AsIGxleGVtZSk7XG4gICAgICBpZiAoZW5kX21vZGUpIHtcbiAgICAgICAgdmFyIG9yaWdpbiA9IHRvcDtcbiAgICAgICAgaWYgKG9yaWdpbi5za2lwKSB7XG4gICAgICAgICAgbW9kZV9idWZmZXIgKz0gbGV4ZW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghKG9yaWdpbi5yZXR1cm5FbmQgfHwgb3JpZ2luLmV4Y2x1ZGVFbmQpKSB7XG4gICAgICAgICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NCdWZmZXIoKTtcbiAgICAgICAgICBpZiAob3JpZ2luLmV4Y2x1ZGVFbmQpIHtcbiAgICAgICAgICAgIG1vZGVfYnVmZmVyID0gbGV4ZW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKHRvcC5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBzcGFuRW5kVGFnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRvcC5za2lwKSB7XG4gICAgICAgICAgICByZWxldmFuY2UgKz0gdG9wLnJlbGV2YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG9wID0gdG9wLnBhcmVudDtcbiAgICAgICAgfSB3aGlsZSAodG9wICE9PSBlbmRfbW9kZS5wYXJlbnQpO1xuICAgICAgICBpZiAoZW5kX21vZGUuc3RhcnRzKSB7XG4gICAgICAgICAgc3RhcnROZXdNb2RlKGVuZF9tb2RlLnN0YXJ0cywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW4ucmV0dXJuRW5kID8gMCA6IGxleGVtZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0lsbGVnYWwobGV4ZW1lLCB0b3ApKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgbGV4ZW1lIFwiJyArIGxleGVtZSArICdcIiBmb3IgbW9kZSBcIicgKyAodG9wLmNsYXNzTmFtZSB8fCAnPHVubmFtZWQ+JykgKyAnXCInKTtcblxuICAgICAgLypcbiAgICAgIFBhcnNlciBzaG91bGQgbm90IHJlYWNoIHRoaXMgcG9pbnQgYXMgYWxsIHR5cGVzIG9mIGxleGVtZXMgc2hvdWxkIGJlIGNhdWdodFxuICAgICAgZWFybGllciwgYnV0IGlmIGl0IGRvZXMgZHVlIHRvIHNvbWUgYnVnIG1ha2Ugc3VyZSBpdCBhZHZhbmNlcyBhdCBsZWFzdCBvbmVcbiAgICAgIGNoYXJhY3RlciBmb3J3YXJkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcGluZy5cbiAgICAgICovXG4gICAgICBtb2RlX2J1ZmZlciArPSBsZXhlbWU7XG4gICAgICByZXR1cm4gbGV4ZW1lLmxlbmd0aCB8fCAxO1xuICAgIH1cblxuICAgIHZhciBsYW5ndWFnZSA9IGdldExhbmd1YWdlKG5hbWUpO1xuICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBsYW5ndWFnZTogXCInICsgbmFtZSArICdcIicpO1xuICAgIH1cblxuICAgIGNvbXBpbGVMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgdmFyIHRvcCA9IGNvbnRpbnVhdGlvbiB8fCBsYW5ndWFnZTtcbiAgICB2YXIgY29udGludWF0aW9ucyA9IHt9OyAvLyBrZWVwIGNvbnRpbnVhdGlvbnMgZm9yIHN1Yi1sYW5ndWFnZXNcbiAgICB2YXIgcmVzdWx0ID0gJycsIGN1cnJlbnQ7XG4gICAgZm9yKGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQgIT09IGxhbmd1YWdlOyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50LmNsYXNzTmFtZSkge1xuICAgICAgICByZXN1bHQgPSBidWlsZFNwYW4oY3VycmVudC5jbGFzc05hbWUsICcnLCB0cnVlKSArIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1vZGVfYnVmZmVyID0gJyc7XG4gICAgdmFyIHJlbGV2YW5jZSA9IDA7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtYXRjaCwgY291bnQsIGluZGV4ID0gMDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHRvcC50ZXJtaW5hdG9ycy5sYXN0SW5kZXggPSBpbmRleDtcbiAgICAgICAgbWF0Y2ggPSB0b3AudGVybWluYXRvcnMuZXhlYyh2YWx1ZSk7XG4gICAgICAgIGlmICghbWF0Y2gpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNvdW50ID0gcHJvY2Vzc0xleGVtZSh2YWx1ZS5zdWJzdHJpbmcoaW5kZXgsIG1hdGNoLmluZGV4KSwgbWF0Y2hbMF0pO1xuICAgICAgICBpbmRleCA9IG1hdGNoLmluZGV4ICsgY291bnQ7XG4gICAgICB9XG4gICAgICBwcm9jZXNzTGV4ZW1lKHZhbHVlLnN1YnN0cihpbmRleCkpO1xuICAgICAgZm9yKGN1cnJlbnQgPSB0b3A7IGN1cnJlbnQucGFyZW50OyBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQpIHsgLy8gY2xvc2UgZGFuZ2xpbmcgbW9kZXNcbiAgICAgICAgaWYgKGN1cnJlbnQuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgcmVzdWx0ICs9IHNwYW5FbmRUYWc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbGV2YW5jZTogcmVsZXZhbmNlLFxuICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICBsYW5ndWFnZTogbmFtZSxcbiAgICAgICAgdG9wOiB0b3BcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubWVzc2FnZSAmJiBlLm1lc3NhZ2UuaW5kZXhPZignSWxsZWdhbCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICB2YWx1ZTogZXNjYXBlKHZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKlxuICBIaWdobGlnaHRpbmcgd2l0aCBsYW5ndWFnZSBkZXRlY3Rpb24uIEFjY2VwdHMgYSBzdHJpbmcgd2l0aCB0aGUgY29kZSB0b1xuICBoaWdobGlnaHQuIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuXG4gIC0gbGFuZ3VhZ2UgKGRldGVjdGVkIGxhbmd1YWdlKVxuICAtIHJlbGV2YW5jZSAoaW50KVxuICAtIHZhbHVlIChhbiBIVE1MIHN0cmluZyB3aXRoIGhpZ2hsaWdodGluZyBtYXJrdXApXG4gIC0gc2Vjb25kX2Jlc3QgKG9iamVjdCB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBmb3Igc2Vjb25kLWJlc3QgaGV1cmlzdGljYWxseVxuICAgIGRldGVjdGVkIGxhbmd1YWdlLCBtYXkgYmUgYWJzZW50KVxuXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEF1dG8odGV4dCwgbGFuZ3VhZ2VTdWJzZXQpIHtcbiAgICBsYW5ndWFnZVN1YnNldCA9IGxhbmd1YWdlU3Vic2V0IHx8IG9wdGlvbnMubGFuZ3VhZ2VzIHx8IG9iamVjdEtleXMobGFuZ3VhZ2VzKTtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgdmFsdWU6IGVzY2FwZSh0ZXh0KVxuICAgIH07XG4gICAgdmFyIHNlY29uZF9iZXN0ID0gcmVzdWx0O1xuICAgIGxhbmd1YWdlU3Vic2V0LmZpbHRlcihnZXRMYW5ndWFnZSkuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhpZ2hsaWdodChuYW1lLCB0ZXh0LCBmYWxzZSk7XG4gICAgICBjdXJyZW50Lmxhbmd1YWdlID0gbmFtZTtcbiAgICAgIGlmIChjdXJyZW50LnJlbGV2YW5jZSA+IHNlY29uZF9iZXN0LnJlbGV2YW5jZSkge1xuICAgICAgICBzZWNvbmRfYmVzdCA9IGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudC5yZWxldmFuY2UgPiByZXN1bHQucmVsZXZhbmNlKSB7XG4gICAgICAgIHNlY29uZF9iZXN0ID0gcmVzdWx0O1xuICAgICAgICByZXN1bHQgPSBjdXJyZW50O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChzZWNvbmRfYmVzdC5sYW5ndWFnZSkge1xuICAgICAgcmVzdWx0LnNlY29uZF9iZXN0ID0gc2Vjb25kX2Jlc3Q7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKlxuICBQb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGhpZ2hsaWdodGVkIG1hcmt1cDpcblxuICAtIHJlcGxhY2UgVEFCcyB3aXRoIHNvbWV0aGluZyBtb3JlIHVzZWZ1bFxuICAtIHJlcGxhY2UgcmVhbCBsaW5lLWJyZWFrcyB3aXRoICc8YnI+JyBmb3Igbm9uLXByZSBjb250YWluZXJzXG5cbiAgKi9cbiAgZnVuY3Rpb24gZml4TWFya3VwKHZhbHVlKSB7XG4gICAgcmV0dXJuICEob3B0aW9ucy50YWJSZXBsYWNlIHx8IG9wdGlvbnMudXNlQlIpXG4gICAgICA/IHZhbHVlXG4gICAgICA6IHZhbHVlLnJlcGxhY2UoZml4TWFya3VwUmUsIGZ1bmN0aW9uKG1hdGNoLCBwMSkge1xuICAgICAgICAgIGlmIChvcHRpb25zLnVzZUJSICYmIG1hdGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgcmV0dXJuICc8YnI+JztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudGFiUmVwbGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHAxLnJlcGxhY2UoL1xcdC9nLCBvcHRpb25zLnRhYlJlcGxhY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ2xhc3NOYW1lKHByZXZDbGFzc05hbWUsIGN1cnJlbnRMYW5nLCByZXN1bHRMYW5nKSB7XG4gICAgdmFyIGxhbmd1YWdlID0gY3VycmVudExhbmcgPyBhbGlhc2VzW2N1cnJlbnRMYW5nXSA6IHJlc3VsdExhbmcsXG4gICAgICAgIHJlc3VsdCAgID0gW3ByZXZDbGFzc05hbWUudHJpbSgpXTtcblxuICAgIGlmICghcHJldkNsYXNzTmFtZS5tYXRjaCgvXFxiaGxqc1xcYi8pKSB7XG4gICAgICByZXN1bHQucHVzaCgnaGxqcycpO1xuICAgIH1cblxuICAgIGlmIChwcmV2Q2xhc3NOYW1lLmluZGV4T2YobGFuZ3VhZ2UpID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2gobGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuam9pbignICcpLnRyaW0oKTtcbiAgfVxuXG4gIC8qXG4gIEFwcGxpZXMgaGlnaGxpZ2h0aW5nIHRvIGEgRE9NIG5vZGUgY29udGFpbmluZyBjb2RlLiBBY2NlcHRzIGEgRE9NIG5vZGUgYW5kXG4gIHR3byBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBmaXhNYXJrdXAuXG4gICovXG4gIGZ1bmN0aW9uIGhpZ2hsaWdodEJsb2NrKGJsb2NrKSB7XG4gICAgdmFyIG5vZGUsIG9yaWdpbmFsU3RyZWFtLCByZXN1bHQsIHJlc3VsdE5vZGUsIHRleHQ7XG4gICAgdmFyIGxhbmd1YWdlID0gYmxvY2tMYW5ndWFnZShibG9jayk7XG5cbiAgICBpZiAoaXNOb3RIaWdobGlnaHRlZChsYW5ndWFnZSkpXG4gICAgICAgIHJldHVybjtcblxuICAgIGlmIChvcHRpb25zLnVzZUJSKSB7XG4gICAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2RpdicpO1xuICAgICAgbm9kZS5pbm5lckhUTUwgPSBibG9jay5pbm5lckhUTUwucmVwbGFjZSgvXFxuL2csICcnKS5yZXBsYWNlKC88YnJbIFxcL10qPi9nLCAnXFxuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBibG9jaztcbiAgICB9XG4gICAgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQ7XG4gICAgcmVzdWx0ID0gbGFuZ3VhZ2UgPyBoaWdobGlnaHQobGFuZ3VhZ2UsIHRleHQsIHRydWUpIDogaGlnaGxpZ2h0QXV0byh0ZXh0KTtcblxuICAgIG9yaWdpbmFsU3RyZWFtID0gbm9kZVN0cmVhbShub2RlKTtcbiAgICBpZiAob3JpZ2luYWxTdHJlYW0ubGVuZ3RoKSB7XG4gICAgICByZXN1bHROb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2RpdicpO1xuICAgICAgcmVzdWx0Tm9kZS5pbm5lckhUTUwgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXN1bHQudmFsdWUgPSBtZXJnZVN0cmVhbXMob3JpZ2luYWxTdHJlYW0sIG5vZGVTdHJlYW0ocmVzdWx0Tm9kZSksIHRleHQpO1xuICAgIH1cbiAgICByZXN1bHQudmFsdWUgPSBmaXhNYXJrdXAocmVzdWx0LnZhbHVlKTtcblxuICAgIGJsb2NrLmlubmVySFRNTCA9IHJlc3VsdC52YWx1ZTtcbiAgICBibG9jay5jbGFzc05hbWUgPSBidWlsZENsYXNzTmFtZShibG9jay5jbGFzc05hbWUsIGxhbmd1YWdlLCByZXN1bHQubGFuZ3VhZ2UpO1xuICAgIGJsb2NrLnJlc3VsdCA9IHtcbiAgICAgIGxhbmd1YWdlOiByZXN1bHQubGFuZ3VhZ2UsXG4gICAgICByZTogcmVzdWx0LnJlbGV2YW5jZVxuICAgIH07XG4gICAgaWYgKHJlc3VsdC5zZWNvbmRfYmVzdCkge1xuICAgICAgYmxvY2suc2Vjb25kX2Jlc3QgPSB7XG4gICAgICAgIGxhbmd1YWdlOiByZXN1bHQuc2Vjb25kX2Jlc3QubGFuZ3VhZ2UsXG4gICAgICAgIHJlOiByZXN1bHQuc2Vjb25kX2Jlc3QucmVsZXZhbmNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gIFVwZGF0ZXMgaGlnaGxpZ2h0LmpzIGdsb2JhbCBvcHRpb25zIHdpdGggdmFsdWVzIHBhc3NlZCBpbiB0aGUgZm9ybSBvZiBhbiBvYmplY3QuXG4gICovXG4gIGZ1bmN0aW9uIGNvbmZpZ3VyZSh1c2VyX29wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gaW5oZXJpdChvcHRpb25zLCB1c2VyX29wdGlvbnMpO1xuICB9XG5cbiAgLypcbiAgQXBwbGllcyBoaWdobGlnaHRpbmcgdG8gYWxsIDxwcmU+PGNvZGU+Li48L2NvZGU+PC9wcmU+IGJsb2NrcyBvbiBhIHBhZ2UuXG4gICovXG4gIGZ1bmN0aW9uIGluaXRIaWdobGlnaHRpbmcoKSB7XG4gICAgaWYgKGluaXRIaWdobGlnaHRpbmcuY2FsbGVkKVxuICAgICAgcmV0dXJuO1xuICAgIGluaXRIaWdobGlnaHRpbmcuY2FsbGVkID0gdHJ1ZTtcblxuICAgIHZhciBibG9ja3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwcmUgY29kZScpO1xuICAgIEFycmF5UHJvdG8uZm9yRWFjaC5jYWxsKGJsb2NrcywgaGlnaGxpZ2h0QmxvY2spO1xuICB9XG5cbiAgLypcbiAgQXR0YWNoZXMgaGlnaGxpZ2h0aW5nIHRvIHRoZSBwYWdlIGxvYWQgZXZlbnQuXG4gICovXG4gIGZ1bmN0aW9uIGluaXRIaWdobGlnaHRpbmdPbkxvYWQoKSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXRIaWdobGlnaHRpbmcsIGZhbHNlKTtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdsb2FkJywgaW5pdEhpZ2hsaWdodGluZywgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJMYW5ndWFnZShuYW1lLCBsYW5ndWFnZSkge1xuICAgIHZhciBsYW5nID0gbGFuZ3VhZ2VzW25hbWVdID0gbGFuZ3VhZ2UoaGxqcyk7XG4gICAgaWYgKGxhbmcuYWxpYXNlcykge1xuICAgICAgbGFuZy5hbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHthbGlhc2VzW2FsaWFzXSA9IG5hbWU7fSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGlzdExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gb2JqZWN0S2V5cyhsYW5ndWFnZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2UobmFtZSkge1xuICAgIG5hbWUgPSAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbGFuZ3VhZ2VzW25hbWVdIHx8IGxhbmd1YWdlc1thbGlhc2VzW25hbWVdXTtcbiAgfVxuXG4gIC8qIEludGVyZmFjZSBkZWZpbml0aW9uICovXG5cbiAgaGxqcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7XG4gIGhsanMuaGlnaGxpZ2h0QXV0byA9IGhpZ2hsaWdodEF1dG87XG4gIGhsanMuZml4TWFya3VwID0gZml4TWFya3VwO1xuICBobGpzLmhpZ2hsaWdodEJsb2NrID0gaGlnaGxpZ2h0QmxvY2s7XG4gIGhsanMuY29uZmlndXJlID0gY29uZmlndXJlO1xuICBobGpzLmluaXRIaWdobGlnaHRpbmcgPSBpbml0SGlnaGxpZ2h0aW5nO1xuICBobGpzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQgPSBpbml0SGlnaGxpZ2h0aW5nT25Mb2FkO1xuICBobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UgPSByZWdpc3Rlckxhbmd1YWdlO1xuICBobGpzLmxpc3RMYW5ndWFnZXMgPSBsaXN0TGFuZ3VhZ2VzO1xuICBobGpzLmdldExhbmd1YWdlID0gZ2V0TGFuZ3VhZ2U7XG4gIGhsanMuaW5oZXJpdCA9IGluaGVyaXQ7XG5cbiAgLy8gQ29tbW9uIHJlZ2V4cHNcbiAgaGxqcy5JREVOVF9SRSA9ICdbYS16QS1aXVxcXFx3Kic7XG4gIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdyonO1xuICBobGpzLk5VTUJFUl9SRSA9ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/JztcbiAgaGxqcy5DX05VTUJFUl9SRSA9ICcoLT8pKFxcXFxiMFt4WF1bYS1mQS1GMC05XSt8KFxcXFxiXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKFtlRV1bLStdP1xcXFxkKyk/KSc7IC8vIDB4Li4uLCAwLi4uLCBkZWNpbWFsLCBmbG9hdFxuICBobGpzLkJJTkFSWV9OVU1CRVJfUkUgPSAnXFxcXGIoMGJbMDFdKyknOyAvLyAwYi4uLlxuICBobGpzLlJFX1NUQVJURVJTX1JFID0gJyF8IT18IT09fCV8JT18JnwmJnwmPXxcXFxcKnxcXFxcKj18XFxcXCt8XFxcXCs9fCx8LXwtPXwvPXwvfDp8O3w8PHw8PD18PD18PHw9PT18PT18PXw+Pj49fD4+PXw+PXw+Pj58Pj58PnxcXFxcP3xcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG5cbiAgLy8gQ29tbW9uIG1vZGVzXG4gIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ1xcXFxcXFxcW1xcXFxzXFxcXFNdJywgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQVBPU19TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlFVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuICBobGpzLlBIUkFTQUxfV09SRFNfTU9ERSA9IHtcbiAgICBiZWdpbjogL1xcYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXFxiL1xuICB9O1xuICBobGpzLkNPTU1FTlQgPSBmdW5jdGlvbiAoYmVnaW4sIGVuZCwgaW5oZXJpdHMpIHtcbiAgICB2YXIgbW9kZSA9IGhsanMuaW5oZXJpdChcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiBiZWdpbiwgZW5kOiBlbmQsXG4gICAgICAgIGNvbnRhaW5zOiBbXVxuICAgICAgfSxcbiAgICAgIGluaGVyaXRzIHx8IHt9XG4gICAgKTtcbiAgICBtb2RlLmNvbnRhaW5zLnB1c2goaGxqcy5QSFJBU0FMX1dPUkRTX01PREUpO1xuICAgIG1vZGUuY29udGFpbnMucHVzaCh7XG4gICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLFxuICAgICAgYmVnaW46ICcoPzpUT0RPfEZJWE1FfE5PVEV8QlVHfFhYWCk6JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlO1xuICB9O1xuICBobGpzLkNfTElORV9DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoJy8vJywgJyQnKTtcbiAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnL1xcXFwqJywgJ1xcXFwqLycpO1xuICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcbiAgaGxqcy5OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBobGpzLk5VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuQklOQVJZX05VTUJFUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46IGhsanMuQklOQVJZX05VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5DU1NfTlVNQkVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCcgK1xuICAgICAgJyV8ZW18ZXh8Y2h8cmVtJyAgK1xuICAgICAgJ3x2d3x2aHx2bWlufHZtYXgnICtcbiAgICAgICd8Y218bW18aW58cHR8cGN8cHgnICtcbiAgICAgICd8ZGVnfGdyYWR8cmFkfHR1cm4nICtcbiAgICAgICd8c3xtcycgK1xuICAgICAgJ3xIenxrSHonICtcbiAgICAgICd8ZHBpfGRwY218ZHBweCcgK1xuICAgICAgJyk/JyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgaGxqcy5SRUdFWFBfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgIGJlZ2luOiAvXFwvLywgZW5kOiAvXFwvW2dpbXV5XSovLFxuICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIGhsanMuVElUTEVfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgYmVnaW46IGhsanMuSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICBobGpzLk1FVEhPRF9HVUFSRCA9IHtcbiAgICAvLyBleGNsdWRlcyBtZXRob2QgbmFtZXMgZnJvbSBrZXl3b3JkIHByb2Nlc3NpbmdcbiAgICBiZWdpbjogJ1xcXFwuXFxcXHMqJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4gaGxqcztcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcyl7XG5cbiAgLy8g0L7QsdGJ0LjQuSDQv9Cw0YLRgtC10YDQvSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LJcbiAgdmFyIFVOREVSU0NPUkVfSURFTlRfUkUgPSAnW0EtWmEtetCQLdCv0LAt0Y/RkdCBX11bQS1aYS160JAt0K/QsC3Rj9GR0IFfMC05XSsnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4ga2V5d29yZFxuICB2YXIgdjdfa2V5d29yZHMgPVxuICAn0LTQsNC70LXQtSAnO1xuXG4gIC8vIHY4INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCA9PT4ga2V5d29yZFxuICB2YXIgdjhfa2V5d29yZHMgPVxuICAn0LLQvtC30LLRgNCw0YIg0LLRi9C30LLQsNGC0YzQuNGB0LrQu9GO0YfQtdC90LjQtSDQstGL0L/QvtC70L3QuNGC0Ywg0LTQu9GPINC10YHQu9C4INC4INC40Lcg0LjQu9C4INC40L3QsNGH0LUg0LjQvdCw0YfQtdC10YHQu9C4INC40YHQutC70Y7Rh9C10L3QuNC1INC60LDQttC00L7Qs9C+INC60L7QvdC10YbQtdGB0LvQuCAnICtcbiAgJ9C60L7QvdC10YbQv9C+0L/Ri9GC0LrQuCDQutC+0L3QtdGG0YbQuNC60LvQsCDQvdC1INC90L7QstGL0Lkg0L/QtdGA0LXQudGC0Lgg0L/QtdGA0LXQvCDQv9C+INC/0L7QutCwINC/0L7Qv9GL0YLQutCwINC/0YDQtdGA0LLQsNGC0Ywg0L/RgNC+0LTQvtC70LbQuNGC0Ywg0YLQvtCz0LTQsCDRhtC40LrQuyDRjdC60YHQv9C+0YDRgiAnO1xuXG4gIC8vIGtleXdvcmQgOiDQutC70Y7Rh9C10LLRi9C1INGB0LvQvtCy0LBcbiAgdmFyIEtFWVdPUkQgPSB2N19rZXl3b3JkcyArIHY4X2tleXdvcmRzO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LTQuNGA0LXQutGC0LjQstGLLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2N19tZXRhX2tleXdvcmRzID1cbiAgJ9C30LDQs9GA0YPQt9C40YLRjNC40LfRhNCw0LnQu9CwICc7XG5cbiAgLy8gdjgg0LrQu9GO0YfQtdCy0YvQtSDRgdC70L7QstCwINCyINC40L3RgdGC0YDRg9C60YbQuNGP0YUg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLQsNGFINC60L7QvNC/0LjQu9GP0YbQuNC4LCDQsNC90L3QvtGC0LDRhtC40Y/RhSA9PT4gbWV0YS1rZXl3b3JkXG4gIHZhciB2OF9tZXRhX2tleXdvcmRzID1cbiAgJ9Cy0LXQsdC60LvQuNC10L3RgiDQstC80LXRgdGC0L4g0LLQvdC10YjQvdC10LXRgdC+0LXQtNC40L3QtdC90LjQtSDQutC70LjQtdC90YIg0LrQvtC90LXRhtC+0LHQu9Cw0YHRgtC4INC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10LrQu9C40LXQvdGCINC80L7QsdC40LvRjNC90L7QtdC/0YDQuNC70L7QttC10L3QuNC10YHQtdGA0LLQtdGAICcgK1xuICAn0L3QsNC60LvQuNC10L3RgtC1INC90LDQutC70LjQtdC90YLQtdC90LDRgdC10YDQstC10YDQtSDQvdCw0LrQu9C40LXQvdGC0LXQvdCw0YHQtdGA0LLQtdGA0LXQsdC10LfQutC+0L3RgtC10LrRgdGC0LAg0L3QsNGB0LXRgNCy0LXRgNC1INC90LDRgdC10YDQstC10YDQtdCx0LXQt9C60L7QvdGC0LXQutGB0YLQsCDQvtCx0LvQsNGB0YLRjCDQv9C10YDQtdC0ICcgK1xuICAn0L/QvtGB0LvQtSDRgdC10YDQstC10YAg0YLQvtC70YHRgtGL0LnQutC70LjQtdC90YLQvtCx0YvRh9C90L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7Qu9GB0YLRi9C50LrQu9C40LXQvdGC0YPQv9GA0LDQstC70Y/QtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0L7QvdC60LjQudC60LvQuNC10L3RgiAnO1xuXG4gIC8vIG1ldGEta2V5d29yZCA6INC60LvRjtGH0LXQstGL0LUg0YHQu9C+0LLQsCDQsiDQuNC90YHRgtGA0YPQutGG0LjRj9GFINC/0YDQtdC/0YDQvtGG0LXRgdGB0L7RgNCwLCDQtNC40YDQtdC60YLQuNCy0LDRhSDQutC+0LzQv9C40LvRj9GG0LjQuCwg0LDQvdC90L7RgtCw0YbQuNGP0YVcbiAgdmFyIE1FVEFLRVlXT1JEID0gdjdfbWV0YV9rZXl3b3JkcyArIHY4X21ldGFfa2V5d29yZHM7XG5cbiAgLy8gdjcg0YHQuNGB0YLQtdC80L3Ri9C1INC60L7QvdGB0YLQsNC90YLRiyA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X3N5c3RlbV9jb25zdGFudHMgPVxuICAn0YDQsNC30LTQtdC70LjRgtC10LvRjNGB0YLRgNCw0L3QuNGGINGA0LDQt9C00LXQu9C40YLQtdC70YzRgdGC0YDQvtC6INGB0LjQvNCy0L7Qu9GC0LDQsdGD0LvRj9GG0LjQuCAnO1xuICBcbiAgLy8gdjcg0YPQvdC40LrQsNC70YzQvdGL0LUg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwLCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjQtSDQsiB2OCA9PT4gYnVpbHRfaW5cbiAgdmFyIHY3X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgPVxuICAnYW5zaXRvb2VtIG9lbXRvYW5zaSDQstCy0LXRgdGC0LjQstC40LTRgdGD0LHQutC+0L3RgtC+INCy0LLQtdGB0YLQuNC/0LXRgNC10YfQuNGB0LvQtdC90LjQtSDQstCy0LXRgdGC0LjQv9C10YDQuNC+0LQg0LLQstC10YHRgtC40L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0LLRi9Cx0YDQsNC90L3Ri9C50L/Qu9Cw0L3RgdGH0LXRgtC+0LIgJyArXG4gICfQtNCw0YLQsNCz0L7QtCDQtNCw0YLQsNC80LXRgdGP0YYg0LTQsNGC0LDRh9C40YHQu9C+INC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC30L3QsNGH0LXQvdC40LXQstGB0YLRgNC+0LrRgyDQt9C90LDRh9C10L3QuNC10LjQt9GB0YLRgNC+0LrQuCDQutCw0YLQsNC70L7Qs9C40LEg0LrQsNGC0LDQu9C+0LPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQutC+0LTRgdC40LzQsiDQutC+0L3Qs9C+0LTQsCDQutC+0L3QtdGG0L/QtdGA0LjQvtC00LDQsdC4INC60L7QvdC10YbRgNCw0YHRgdGH0LjRgtCw0L3QvdC+0LPQvtC/0LXRgNC40L7QtNCw0LHQuCDQutC+0L3QtdGG0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0LjQvdGC0LXRgNCy0LDQu9CwINC60L7QvdC60LLQsNGA0YLQsNC70LAg0LrQvtC90LzQtdGB0Y/RhtCwICcgK1xuICAn0LrQvtC90L3QtdC00LXQu9C4INC70L7QsyDQu9C+0LMxMCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LXQutC+0LvQuNGH0LXRgdGC0LLQvtGB0YPQsdC60L7QvdGC0L4g0L3QsNC30LLQsNC90LjQtdC40L3RgtC10YDRhNC10LnRgdCwINC90LDQt9Cy0LDQvdC40LXQvdCw0LHQvtGA0LDQv9GA0LDQsiDQvdCw0LfQvdCw0YfQuNGC0YzQstC40LQgJyArXG4gICfQvdCw0LfQvdCw0YfQuNGC0YzRgdGH0LXRgiDQvdCw0LnRgtC40YHRgdGL0LvQutC4INC90LDRh9Cw0LvQvtC/0LXRgNC40L7QtNCw0LHQuCDQvdCw0YfQsNC70L7RgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0LLQsNC70LAg0L3QsNGH0LPQvtC00LAg0L3QsNGH0LrQstCw0YDRgtCw0LvQsCDQvdCw0YfQvNC10YHRj9GG0LAgJyArXG4gICfQvdCw0YfQvdC10LTQtdC70Lgg0L3QvtC80LXRgNC00L3Rj9Cz0L7QtNCwINC90L7QvNC10YDQtNC90Y/QvdC10LTQtdC70Lgg0L3QvtC80LXRgNC90LXQtNC10LvQuNCz0L7QtNCwINC+0LHRgNCw0LHQvtGC0LrQsNC+0LbQuNC00LDQvdC40Y8g0L7RgdC90L7QstC90L7QudC20YPRgNC90LDQu9GA0LDRgdGH0LXRgtC+0LIgJyArXG4gICfQvtGB0L3QvtCy0L3QvtC50L/Qu9Cw0L3RgdGH0LXRgtC+0LIg0L7RgdC90L7QstC90L7QudGP0LfRi9C6INC+0YfQuNGB0YLQuNGC0YzQvtC60L3QvtGB0L7QvtCx0YnQtdC90LjQuSDQv9C10YDQuNC+0LTRgdGC0YAg0L/QvtC70YPRh9C40YLRjNCy0YDQtdC80Y/RgtCwINC/0L7Qu9GD0YfQuNGC0YzQtNCw0YLRg9GC0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC60YPQvNC10L3RgtGC0LAg0L/QvtC70YPRh9C40YLRjNC30L3QsNGH0LXQvdC40Y/QvtGC0LHQvtGA0LAg0L/QvtC70YPRh9C40YLRjNC/0L7Qt9C40YbQuNGO0YLQsCDQv9C+0LvRg9GH0LjRgtGM0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDQv9C+0LvRg9GH0LjRgtGM0YLQsCAnICtcbiAgJ9C/0YDQtdGE0LjQutGB0LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40Lgg0L/RgNC+0L/QuNGB0Ywg0L/Rg9GB0YLQvtC10LfQvdCw0YfQtdC90LjQtSDRgNCw0LfQvCDRgNCw0LfQvtCx0YDQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCDRgNCw0YHRgdGH0LjRgtCw0YLRjNGA0LXQs9C40YHRgtGA0YvQvdCwICcgK1xuICAn0YDQsNGB0YHRh9C40YLQsNGC0YzRgNC10LPQuNGB0YLRgNGL0L/QviDRgdC40LzQsiDRgdC+0LfQtNCw0YLRjNC+0LHRitC10LrRgiDRgdGC0LDRgtGD0YHQstC+0LfQstGA0LDRgtCwINGB0YLRgNC60L7Qu9C40YfQtdGB0YLQstC+0YHRgtGA0L7QuiDRgdGE0L7RgNC80LjRgNC+0LLQsNGC0YzQv9C+0LfQuNGG0LjRjtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0YfQtdGC0L/QvtC60L7QtNGDINGC0LXQutGD0YnQtdC10LLRgNC10LzRjyDRgtC40L/Qt9C90LDRh9C10L3QuNGPINGC0LjQv9C30L3QsNGH0LXQvdC40Y/RgdGC0YAg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgtCw0L3QsCDRg9GB0YLQsNC90L7QstC40YLRjNGC0LDQv9C+INGE0LjQutGB0YjQsNCx0LvQvtC9INGI0LDQsdC70L7QvSAnO1xuICBcbiAgLy8gdjgg0LzQtdGC0L7QtNGLINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyA9XG4gICdhY29zIGFzaW4gYXRhbiBiYXNlNjTQt9C90LDRh9C10L3QuNC1IGJhc2U2NNGB0YLRgNC+0LrQsCBjb3MgZXhwIGxvZyBsb2cxMCBwb3cgc2luIHNxcnQgdGFuIHhtbNC30L3QsNGH0LXQvdC40LUgeG1s0YHRgtGA0L7QutCwICcgK1xuICAneG1s0YLQuNC/IHhtbNGC0LjQv9C30L3RhyDQsNC60YLQuNCy0L3QvtC10L7QutC90L4g0LHQtdC30L7Qv9Cw0YHQvdGL0LnRgNC10LbQuNC8INCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINCx0YPQu9C10LLQviDQstCy0LXRgdGC0LjQtNCw0YLRgyDQstCy0LXRgdGC0LjQt9C90LDRh9C10L3QuNC1ICcgK1xuICAn0LLQstC10YHRgtC40YHRgtGA0L7QutGDINCy0LLQtdGB0YLQuNGH0LjRgdC70L4g0LLQvtC30LzQvtC20L3QvtGB0YLRjNGH0YLQtdC90LjRj3htbCDQstC+0L/RgNC+0YEg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGM0LfQvdCw0YfQtdC90LjQtSDQstGA0LXQsyDQstGL0LPRgNGD0LfQuNGC0YzQttGD0YDQvdCw0LvRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0LLRi9C/0L7Qu9C90LjRgtGM0L7QsdGA0LDQsdC+0YLQutGD0L7Qv9C+0LLQtdGJ0LXQvdC40Y8g0LLRi9C/0L7Qu9C90LjRgtGM0L/RgNC+0LLQtdGA0LrRg9C/0YDQsNCy0LTQvtGB0YLRg9C/0LAg0LLRi9GH0LjRgdC70LjRgtGMINCz0L7QtCDQtNCw0L3QvdGL0LXRhNC+0YDQvNGL0LLQt9C90LDRh9C10L3QuNC1INC00LDRgtCwINC00LXQvdGMINC00LXQvdGM0LPQvtC00LAgJyArXG4gICfQtNC10L3RjNC90LXQtNC10LvQuCDQtNC+0LHQsNCy0LjRgtGM0LzQtdGB0Y/RhiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0YzRgNCw0LHQvtGC0YPQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0LfQsNCy0LXRgNGI0LjRgtGM0YDQsNCx0L7RgtGD0YHQuNGB0YLQtdC80YsgJyArXG4gICfQt9Cw0LPRgNGD0LfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDINC30LDQutGA0YvRgtGM0YHQv9GA0LDQstC60YMg0LfQsNC/0LjRgdCw0YLRjGpzb24g0LfQsNC/0LjRgdCw0YLRjHhtbCDQt9Cw0L/QuNGB0LDRgtGM0LTQsNGC0YNqc29uINC30LDQv9C40YHRjNC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C30LDQv9C+0LvQvdC40YLRjNC30L3QsNGH0LXQvdC40Y/RgdCy0L7QudGB0YLQsiDQt9Cw0L/RgNC+0YHQuNGC0YzRgNCw0LfRgNC10YjQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQt9Cw0L/Rg9GB0YLQuNGC0YzQv9GA0LjQu9C+0LbQtdC90LjQtSDQt9Cw0L/Rg9GB0YLQuNGC0YzRgdC40YHRgtC10LzRgyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOICcgK1xuICAn0LfQvdCw0YfQtdC90LjQtdCy0LTQsNC90L3Ri9C10YTQvtGA0LzRiyDQt9C90LDRh9C10L3QuNC10LLRgdGC0YDQvtC60YPQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQstGE0LDQudC7INC30L3QsNGH0LXQvdC40LXQt9Cw0L/QvtC70L3QtdC90L4g0LfQvdCw0YfQtdC90LjQtdC40LfRgdGC0YDQvtC60LjQstC90YPRgtGAINC30L3QsNGH0LXQvdC40LXQuNC30YTQsNC50LvQsCAnICtcbiAgJ9C40Ld4bWzRgtC40L/QsCDQuNC80L/QvtGA0YLQvNC+0LTQtdC70Lh4ZHRvINC40LzRj9C60L7QvNC/0YzRjtGC0LXRgNCwINC40LzRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQuNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjNC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C10LTQsNC90L3Ri9C1INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC+0YjQuNCx0LrQtSAnICtcbiAgJ9C60LDRgtCw0LvQvtCz0LHQuNCx0LvQuNC+0YLQtdC60LjQvNC+0LHQuNC70YzQvdC+0LPQvtGD0YHRgtGA0L7QudGB0YLQstCwINC60LDRgtCw0LvQvtCz0LLRgNC10LzQtdC90L3Ri9GF0YTQsNC50LvQvtCyINC60LDRgtCw0LvQvtCz0LTQvtC60YPQvNC10L3RgtC+0LIg0LrQsNGC0LDQu9C+0LPQv9GA0L7Qs9GA0LDQvNC80Ysg0LrQvtC00LjRgNC+0LLQsNGC0YzRgdGC0YDQvtC60YMgJyArXG4gICfQutC+0LTQu9C+0LrQsNC70LjQt9Cw0YbQuNC40LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC60L7QtNGB0LjQvNCy0L7Qu9CwINC60L7QvNCw0L3QtNCw0YHQuNGB0YLQtdC80Ysg0LrQvtC90LXRhtCz0L7QtNCwINC60L7QvdC10YbQtNC90Y8g0LrQvtC90LXRhtC60LLQsNGA0YLQsNC70LAg0LrQvtC90LXRhtC80LXRgdGP0YbQsCDQutC+0L3QtdGG0LzQuNC90YPRgtGLICcgK1xuICAn0LrQvtC90LXRhtC90LXQtNC10LvQuCDQutC+0L3QtdGG0YfQsNGB0LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0LHQsNC30YvQtNCw0L3QvdGL0YXQuNC30LzQtdC90LXQvdCw0LTQuNC90LDQvNC40YfQtdGB0LrQuCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/QuNC30LzQtdC90LXQvdCwINC60L7Qv9C40YDQvtCy0LDRgtGM0LTQsNC90L3Ri9C10YTQvtGA0LzRiyAnICtcbiAgJ9C60L7Qv9C40YDQvtCy0LDRgtGM0YTQsNC50Lsg0LrRgNCw0YLQutC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCDQu9C10LIg0LzQsNC60YEg0LzQtdGB0YLQvdC+0LXQstGA0LXQvNGPINC80LXRgdGP0YYg0LzQuNC9INC80LjQvdGD0YLQsCDQvNC+0L3QvtC/0L7Qu9GM0L3Ri9C50YDQtdC20LjQvCDQvdCw0LnRgtC4ICcgK1xuICAn0L3QsNC50YLQuNC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtdGB0LjQvNCy0L7Qu9GLeG1sINC90LDQudGC0LjQvtC60L3QvtC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQvdCw0LnRgtC40L/QvtC80LXRh9C10L3QvdGL0LXQvdCw0YPQtNCw0LvQtdC90LjQtSDQvdCw0LnRgtC40L/QvtGB0YHRi9C70LrQsNC8INC90LDQudGC0LjRhNCw0LnQu9GLICcgK1xuICAn0L3QsNGH0LDQu9C+0LPQvtC00LAg0L3QsNGH0LDQu9C+0LTQvdGPINC90LDRh9Cw0LvQvtC60LLQsNGA0YLQsNC70LAg0L3QsNGH0LDQu9C+0LzQtdGB0Y/RhtCwINC90LDRh9Cw0LvQvtC80LjQvdGD0YLRiyDQvdCw0YfQsNC70L7QvdC10LTQtdC70Lgg0L3QsNGH0LDQu9C+0YfQsNGB0LAg0L3QsNGH0LDRgtGM0LfQsNC/0YDQvtGB0YDQsNC30YDQtdGI0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQt9Cw0L/Rg9GB0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0YfQsNGC0YzQutC+0L/QuNGA0L7QstCw0L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C10YDQtdC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LTQutC70Y7Rh9C10L3QuNC10LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyAnICtcbiAgJ9C90LDRh9Cw0YLRjNC/0L7QtNC60LvRjtGH0LXQvdC40LXRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10Lkg0L3QsNGH0LDRgtGM0L/QvtC00LrQu9GO0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQvdCw0YfQsNGC0YzQv9C+0LjRgdC60YTQsNC50LvQvtCyICcgK1xuICAn0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10LrQsNGC0LDQu9C+0LPQsNCy0YDQtdC80LXQvdC90YvRhdGE0LDQudC70L7QsiDQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXQutCw0YLQsNC70L7Qs9Cw0LTQvtC60YPQvNC10L3RgtC+0LIg0L3QsNGH0LDRgtGM0L/QvtC70YPRh9C10L3QuNC10YDQsNCx0L7Rh9C10LPQvtC60LDRgtCw0LvQvtCz0LDQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQvdCw0YfQsNGC0YzQv9C+0LvRg9GH0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0L/QvtC80LXRidC10L3QuNC10YTQsNC50LvQsCDQvdCw0YfQsNGC0YzQv9C+0LzQtdGJ0LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YHQvtC30LTQsNC90LjQtdC00LLQvtC40YfQvdGL0YXQtNCw0L3QvdGL0YXQuNC30YTQsNC50LvQsCDQvdCw0YfQsNGC0YzRgdC+0LfQtNCw0L3QuNC10LrQsNGC0LDQu9C+0LPQsCAnICtcbiAgJ9C90LDRh9Cw0YLRjNGC0YDQsNC90LfQsNC60YbQuNGOINC90LDRh9Cw0YLRjNGD0LTQsNC70LXQvdC40LXRhNCw0LnQu9C+0LIg0L3QsNGH0LDRgtGM0YPRgdGC0LDQvdC+0LLQutGD0LLQvdC10YjQvdC10LnQutC+0LzQv9C+0L3QtdC90YLRiyDQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC10LkgJyArXG4gICfQvdCw0YfQsNGC0YzRg9GB0YLQsNC90L7QstC60YPRgNCw0YHRiNC40YDQtdC90LjRj9GA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0L3QtdC00LXQu9GP0LPQvtC00LAg0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0YzQt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L7QtdC00LjQvdC10L3QuNGPINC90L7QvNC10YDRgdC10LDQvdGB0LDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfQvdC+0LzQtdGA0YHQvtC10LTQuNC90LXQvdC40Y/QuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L3RgNC10LMg0L3RgdGC0YAg0L7QsdC90L7QstC40YLRjNC40L3RgtC10YDRhNC10LnRgSDQvtCx0L3QvtCy0LjRgtGM0L3Rg9C80LXRgNCw0YbQuNGO0L7QsdGK0LXQutGC0L7QsiDQvtCx0L3QvtCy0LjRgtGM0L/QvtCy0YLQvtGA0L3QvtC40YHQv9C+0LvRjNC30YPQtdC80YvQtdC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQvtCx0YDQsNCx0L7RgtC60LDQv9GA0LXRgNGL0LLQsNC90LjRj9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQvtCx0YrQtdC00LjQvdC40YLRjNGE0LDQudC70Ysg0L7QutGAINC+0L/QuNGB0LDQvdC40LXQvtGI0LjQsdC60Lgg0L7Qv9C+0LLQtdGB0YLQuNGC0Ywg0L7Qv9C+0LLQtdGB0YLQuNGC0YzQvtCx0LjQt9C80LXQvdC10L3QuNC4ICcgK1xuICAn0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQt9Cw0L/RgNC+0YHQsNC90LDRgdGC0YDQvtC10LrQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L7RgtC60LvRjtGH0LjRgtGM0L7QsdGA0LDQsdC+0YLRh9C40LrQvtC20LjQtNCw0L3QuNGPINC+0YLQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQvtGC0LrRgNGL0YLRjNC30L3QsNGH0LXQvdC40LUg0L7RgtC60YDRi9GC0YzQuNC90LTQtdC60YHRgdC/0YDQsNCy0LrQuCDQvtGC0LrRgNGL0YLRjNGB0L7QtNC10YDQttCw0L3QuNC10YHQv9GA0LDQstC60Lgg0L7RgtC60YDRi9GC0YzRgdC/0YDQsNCy0LrRgyDQvtGC0LrRgNGL0YLRjNGE0L7RgNC80YMg0L7RgtC60YDRi9GC0YzRhNC+0YDQvNGD0LzQvtC00LDQu9GM0L3QviAnICtcbiAgJ9C+0YLQvNC10L3QuNGC0YzRgtGA0LDQvdC30LDQutGG0LjRjiDQvtGH0LjRgdGC0LjRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQvtGH0LjRgdGC0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC+0YfQuNGB0YLQuNGC0YzRgdC+0L7QsdGJ0LXQvdC40Y8g0L/QsNGA0LDQvNC10YLRgNGL0LTQvtGB0YLRg9C/0LAgJyArXG4gICfQv9C10YDQtdC50YLQuNC/0L7QvdCw0LLQuNCz0LDRhtC40L7QvdC90L7QudGB0YHRi9C70LrQtSDQv9C10YDQtdC80LXRgdGC0LjRgtGM0YTQsNC50Lsg0L/QvtC00LrQu9GO0YfQuNGC0YzQstC90LXRiNC90Y7RjtC60L7QvNC/0L7QvdC10L3RgtGDICcgK1xuICAn0L/QvtC00LrQu9GO0YfQuNGC0YzQvtCx0YDQsNCx0L7RgtGH0LjQutC30LDQv9GA0L7RgdCw0L3QsNGB0YLRgNC+0LXQutC60LvQuNC10L3RgtCw0LvQuNGG0LXQvdC30LjRgNC+0LLQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7QttC40LTQsNC90LjRjyDQv9C+0LTQutC70Y7Rh9C40YLRjNC+0LHRgNCw0LHQvtGC0YfQuNC60L7Qv9C+0LLQtdGJ0LXQvdC40Y8gJyArXG4gICfQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHQutGA0LjQv9GC0L7Qs9GA0LDRhNC40LXQuSDQv9C+0LTQutC70Y7Rh9C40YLRjNGA0LDRgdGI0LjRgNC10L3QuNC10YDQsNCx0L7RgtGL0YHRhNCw0LnQu9Cw0LzQuCDQv9C+0LTRgNC+0LHQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC+0YjQuNCx0LrQuCAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC00LDRgtGLINC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNC30L3QsNGH0LXQvdC40Y8g0L/QvtC60LDQt9Cw0YLRjNCy0LLQvtC00YHRgtGA0L7QutC4INC/0L7QutCw0LfQsNGC0YzQstCy0L7QtNGH0LjRgdC70LAg0L/QvtC60LDQt9Cw0YLRjNCy0L7Qv9GA0L7RgSDQv9C+0LrQsNC30LDRgtGM0LfQvdCw0YfQtdC90LjQtSAnICtcbiAgJ9C/0L7QutCw0LfQsNGC0YzQuNC90YTQvtGA0LzQsNGG0LjRjtC+0LHQvtGI0LjQsdC60LUg0L/QvtC60LDQt9Cw0YLRjNC90LDQutCw0YDRgtC1INC/0L7QutCw0LfQsNGC0YzQvtC/0L7QstC10YnQtdC90LjQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQv9C+0LrQsNC30LDRgtGM0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQv9C+0LvQvdC+0LXQuNC80Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGMY29t0L7QsdGK0LXQutGCINC/0L7Qu9GD0YfQuNGC0Yx4bWzRgtC40L8g0L/QvtC70YPRh9C40YLRjNCw0LTRgNC10YHQv9C+0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjRjiDQv9C+0LvRg9GH0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDQstC10YDRiNC10L3QuNGP0YHQv9GP0YnQtdCz0L7RgdC10LDQvdGB0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINC/0L7Qu9GD0YfQuNGC0YzQstGA0LXQvNGP0L7QttC40LTQsNC90LjRj9Cx0LvQvtC60LjRgNC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQtNCw0L3QvdGL0LXQstGL0LHQvtGA0LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQudC/0LDRgNCw0LzQtdGC0YDQutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC00L7Qv9GD0YHRgtC40LzRi9C10LrQvtC00YvQu9C+0LrQsNC70LjQt9Cw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQtNC+0L/Rg9GB0YLQuNC80YvQtdGH0LDRgdC+0LLRi9C10L/QvtGP0YHQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQt9Cw0LPQvtC70L7QstC+0LrQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC30LDQs9C+0LvQvtCy0L7QutGB0LjRgdGC0LXQvNGLINC/0L7Qu9GD0YfQuNGC0YzQt9C90LDRh9C10L3QuNGP0L7RgtCx0L7RgNCw0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC/0L7Qu9GD0YfQuNGC0YzQuNC30LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAg0L/QvtC70YPRh9C40YLRjNC40LzRj9Cy0YDQtdC80LXQvdC90L7Qs9C+0YTQsNC50LvQsCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQuNC80Y/QutC70LjQtdC90YLQsNC70LjRhtC10L3Qt9C40YDQvtCy0LDQvdC40Y8g0L/QvtC70YPRh9C40YLRjNC40L3RhNC+0YDQvNCw0YbQuNGO0Y3QutGA0LDQvdC+0LLQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40LggJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0LvRg9GH0LjRgtGM0LrRgNCw0YLQutC40LnQt9Cw0LPQvtC70L7QstC+0LrQv9GA0LjQu9C+0LbQtdC90LjRjyDQv9C+0LvRg9GH0LjRgtGM0LzQsNC60LXRgtC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNC80LDRgdC60YPQstGB0LXRhNCw0LnQu9GLINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9C60LvQuNC10L3RgtCwINC/0L7Qu9GD0YfQuNGC0YzQvNCw0YHQutGD0LLRgdC10YTQsNC50LvRi9GB0LXRgNCy0LXRgNCwINC/0L7Qu9GD0YfQuNGC0YzQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10L/QvtCw0LTRgNC10YHRgyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvNC40L3QuNC80LDQu9GM0L3Rg9GO0LTQu9C40L3Rg9C/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNC90LDQstC40LPQsNGG0LjQvtC90L3Rg9GO0YHRgdGL0LvQutGDINC/0L7Qu9GD0YfQuNGC0YzQvdCw0LLQuNCz0LDRhtC40L7QvdC90YPRjtGB0YHRi9C70LrRg9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuNCx0LDQt9GL0LTQsNC90L3Ri9GFINC/0L7Qu9GD0YfQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzQvtCx0YnQuNC50LzQsNC60LXRgiAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzQvtCx0YnRg9GO0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0L7QutC90LAg0L/QvtC70YPRh9C40YLRjNC+0L/QtdGA0LDRgtC40LLQvdGD0Y7QvtGC0LzQtdGC0LrRg9Cy0YDQtdC80LXQvdC4INC/0L7Qu9GD0YfQuNGC0YzQvtGC0LrQu9GO0YfQtdC90LjQtdCx0LXQt9C+0L/QsNGB0L3QvtCz0L7RgNC10LbQuNC80LAgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/QsNGA0LDQvNC10YLRgNGL0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YvRhdC+0L/RhtC40LnQuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0L/QvtC70L3QvtC10LjQvNGP0L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQvtC30L3QsNGH0LXQvdC40Y8gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y/QvdCw0LLQuNCz0LDRhtC40L7QvdC90YvRhdGB0YHRi9C70L7QuiDQv9C+0LvRg9GH0LjRgtGM0L/RgNC+0LLQtdGA0LrRg9GB0LvQvtC20L3QvtGB0YLQuNC/0LDRgNC+0LvQtdC50L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10Lkg0L/QvtC70YPRh9C40YLRjNGA0LDQt9C00LXQu9C40YLQtdC70YzQv9GD0YLQuCAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgNCw0LfQtNC10LvQuNGC0LXQu9GM0L/Rg9GC0LjQutC70LjQtdC90YLQsCDQv9C+0LvRg9GH0LjRgtGM0YDQsNC30LTQtdC70LjRgtC10LvRjNC/0YPRgtC40YHQtdGA0LLQtdGA0LAg0L/QvtC70YPRh9C40YLRjNGB0LXQsNC90YHRi9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyAnICtcbiAgJ9C/0L7Qu9GD0YfQuNGC0YzRgdC60L7RgNC+0YHRgtGM0LrQu9C40LXQvdGC0YHQutC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPINC/0L7Qu9GD0YfQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjRj9C40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRg9GH0LjRgtGM0YHQvtC+0LHRidC10L3QuNGP0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOICcgK1xuICAn0L/QvtC70YPRh9C40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLINC/0L7Qu9GD0YfQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDRg9C60YLRg9GA0YPRhdGA0LDQvdC10L3QuNGP0LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YLQtdC60YPRidC40LnRgdC10LDQvdGB0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINC/0L7Qu9GD0YfQuNGC0YzRhNCw0LnQuyDQv9C+0LvRg9GH0LjRgtGM0YTQsNC50LvRiyDQv9C+0LvRg9GH0LjRgtGM0YTQvtGA0LzRgyDQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y4gJyArXG4gICfQv9C+0LvRg9GH0LjRgtGM0YTRg9C90LrRhtC40L7QvdCw0LvRjNC90YPRjtC+0L/RhtC40Y7QuNC90YLQtdGA0YTQtdC50YHQsCDQv9C+0LvRg9GH0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQvtGBINC/0L7QvNC10YHRgtC40YLRjNCy0L7QstGA0LXQvNC10L3QvdC+0LXRhdGA0LDQvdC40LvQuNGJ0LUgJyArXG4gICfQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQuyDQv9C+0LzQtdGB0YLQuNGC0YzRhNCw0LnQu9GLINC/0YDQsNCyINC/0YDQsNCy0L7QtNC+0YHRgtGD0L/QsCDQv9GA0LXQtNC+0L/RgNC10LTQtdC70LXQvdC90L7QtdC30L3QsNGH0LXQvdC40LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQutC+0LTQsNC70L7QutCw0LvQuNC30LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQv9C10YDQuNC+0LTQsCAnICtcbiAgJ9C/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/RgNCw0LLQsCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdC/0YDQuNC70L7QttC10L3QuNGPINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10YHQvtCx0YvRgtC40Y/QttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRh9Cw0YHQvtCy0L7Qs9C+0L/QvtGP0YHQsCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1ICcgK1xuICAn0L/RgNC10LrRgNCw0YLQuNGC0YzRgNCw0LHQvtGC0YPRgdC40YHRgtC10LzRiyDQv9GA0LjQstC40LvQtdCz0LjRgNC+0LLQsNC90L3Ri9C50YDQtdC20LjQvCDQv9GA0L7QtNC+0LvQttC40YLRjNCy0YvQt9C+0LIg0L/RgNC+0YfQuNGC0LDRgtGManNvbiDQv9GA0L7Rh9C40YLQsNGC0Yx4bWwg0L/RgNC+0YfQuNGC0LDRgtGM0LTQsNGC0YNqc29uINC/0YPRgdGC0LDRj9GB0YLRgNC+0LrQsCAnICtcbiAgJ9GA0LDQsdC+0YfQuNC50LrQsNGC0LDQu9C+0LPQtNCw0L3QvdGL0YXQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjNC00LDQvdC90YvQtdC00LvRj9GA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YDQsNC30LTQtdC70LjRgtGM0YTQsNC50Lsg0YDQsNC30L7RgNCy0LDRgtGM0YHQvtC10LTQuNC90LXQvdC40LXRgdCy0L3QtdGI0L3QuNC80LjRgdGC0L7Rh9C90LjQutC+0LzQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQutC+0LTQuNGA0L7QstCw0YLRjNGB0YLRgNC+0LrRgyDRgNC+0LvRjNC00L7RgdGC0YPQv9C90LAg0YHQtdC60YPQvdC00LAg0YHQuNCz0L3QsNC7INGB0LjQvNCy0L7QuyDRgdC60L7Qv9C40YDQvtCy0LDRgtGM0LbRg9GA0L3QsNC70YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgdC80LXRidC10L3QuNC10LvQtdGC0L3QtdCz0L7QstGA0LXQvNC10L3QuCAnICtcbiAgJ9GB0LzQtdGJ0LXQvdC40LXRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QstGA0LXQvNC10L3QuCDRgdC+0LXQtNC40L3QuNGC0YzQsdGD0YTQtdGA0YvQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINGB0L7Qt9C00LDRgtGM0LrQsNGC0LDQu9C+0LMg0YHQvtC30LTQsNGC0YzRhNCw0LHRgNC40LrRg3hkdG8g0YHQvtC60YDQuyDRgdC+0LrRgNC70L8g0YHQvtC60YDQvyDRgdC+0L7QsdGJ0LjRgtGMICcgK1xuICAn0YHQvtGB0YLQvtGP0L3QuNC1INGB0L7RhdGA0LDQvdC40YLRjNC30L3QsNGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINGB0YDQtdC0INGB0YLRgNC00LvQuNC90LAg0YHRgtGA0LfQsNC60LDQvdGH0LjQstCw0LXRgtGB0Y/QvdCwINGB0YLRgNC30LDQvNC10L3QuNGC0Ywg0YHRgtGA0L3QsNC50YLQuCDRgdGC0YDQvdCw0YfQuNC90LDQtdGC0YHRj9GBICcgK1xuICAn0YHRgtGA0L7QutCwINGB0YLRgNC+0LrQsNGB0L7QtdC00LjQvdC10L3QuNGP0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGB0YLRgNC/0L7Qu9GD0YfQuNGC0YzRgdGC0YDQvtC60YMg0YHRgtGA0YDQsNC30LTQtdC70LjRgtGMINGB0YLRgNGB0L7QtdC00LjQvdC40YLRjCDRgdGC0YDRgdGA0LDQstC90LjRgtGMINGB0YLRgNGH0LjRgdC70L7QstGF0L7QttC00LXQvdC40LkgJytcbiAgJ9GB0YLRgNGH0LjRgdC70L7RgdGC0YDQvtC6INGB0YLRgNGI0LDQsdC70L7QvSDRgtC10LrRg9GJ0LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0LTQsNGC0LDRgdC10LDQvdGB0LAg0YLQtdC60YPRidCw0Y/Rg9C90LjQstC10YDRgdCw0LvRjNC90LDRj9C00LDRgtCwINGC0LXQutGD0YnQsNGP0YPQvdC40LLQtdGA0YHQsNC70YzQvdCw0Y/QtNCw0YLQsNCy0LzQuNC70LvQuNGB0LXQutGD0L3QtNCw0YUgJyArXG4gICfRgtC10LrRg9GJ0LjQudCy0LDRgNC40LDQvdGC0LjQvdGC0LXRgNGE0LXQudGB0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YLQtdC60YPRidC40LnQstCw0YDQuNCw0L3RgtC+0YHQvdC+0LLQvdC+0LPQvtGI0YDQuNGE0YLQsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgtC10LrRg9GJ0LjQudC60L7QtNC70L7QutCw0LvQuNC30LDRhtC40LggJyArXG4gICfRgtC10LrRg9GJ0LjQudGA0LXQttC40LzQt9Cw0L/Rg9GB0LrQsCDRgtC10LrRg9GJ0LjQudGP0LfRi9C6INGC0LXQutGD0YnQuNC50Y/Qt9GL0LrRgdC40YHRgtC10LzRiyDRgtC40L8g0YLQuNC/0LfQvdGHINGC0YDQsNC90LfQsNC60YbQuNGP0LDQutGC0LjQstC90LAg0YLRgNC10LMg0YPQtNCw0LvQuNGC0YzQtNCw0L3QvdGL0LXQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30YsgJyArXG4gICfRg9C00LDQu9C40YLRjNC40LfQstGA0LXQvNC10L3QvdC+0LPQvtGF0YDQsNC90LjQu9C40YnQsCDRg9C00LDQu9C40YLRjNC+0LHRitC10LrRgtGLINGD0LTQsNC70LjRgtGM0YTQsNC50LvRiyDRg9C90LjQstC10YDRgdCw0LvRjNC90L7QtdCy0YDQtdC80Y8g0YPRgdGC0LDQvdC+0LLQuNGC0YzQsdC10LfQvtC/0LDRgdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCx0LXQt9C+0L/QsNGB0L3Ri9C50YDQtdC20LjQvNGA0LDQt9C00LXQu9C10L3QuNGP0LTQsNC90L3Ri9GFINGD0YHRgtCw0L3QvtCy0LjRgtGM0LHQu9C+0LrQuNGA0L7QstC60YPRgdC10LDQvdGB0L7QsiDRg9GB0YLQsNC90L7QstC40YLRjNCy0L3QtdGI0L3RjtGO0LrQvtC80L/QvtC90LXQvdGC0YMgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNCy0YDQtdC80Y/Qt9Cw0LLQtdGA0YjQtdC90LjRj9GB0L/Rj9GJ0LXQs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C30LDRgdGL0L/QsNC90LjRj9C/0LDRgdGB0LjQstC90L7Qs9C+0YHQtdCw0L3RgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0LLRgNC10LzRj9C+0LbQuNC00LDQvdC40Y/QsdC70L7QutC40YDQvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINGD0YHRgtCw0L3QvtCy0LjRgtGM0LfQsNCz0L7Qu9C+0LLQvtC60YHQuNGB0YLQtdC80Ysg0YPRgdGC0LDQvdC+0LLQuNGC0YzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9GD0YHRgtCw0L3QvtCy0LjRgtGM0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRg9GB0YLQsNC90L7QstC40YLRjNC60YDQsNGC0LrQuNC50LfQsNCz0L7Qu9C+0LLQvtC60L/RgNC40LvQvtC20LXQvdC40Y8gJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC80LjQvdC40LzQsNC70YzQvdGD0Y7QtNC70LjQvdGD0L/QsNGA0L7Qu9C10LnQv9C+0LvRjNC30L7QstCw0YLQtdC70LXQuSDRg9GB0YLQsNC90L7QstC40YLRjNC80L7QvdC+0L/QvtC70YzQvdGL0LnRgNC10LbQuNC8INGD0YHRgtCw0L3QvtCy0LjRgtGM0L3QsNGB0YLRgNC+0LnQutC40LrQu9C40LXQvdGC0LDQu9C40YbQtdC90LfQuNGA0L7QstCw0L3QuNGPICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GF0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90L7QudCx0LDQt9GLINGD0YHRgtCw0L3QvtCy0LjRgtGM0L7RgtC60LvRjtGH0LXQvdC40LXQsdC10LfQvtC/0LDRgdC90L7Qs9C+0YDQtdC20LjQvNCwICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzQv9Cw0YDQsNC80LXRgtGA0YvRhNGD0L3QutGG0LjQvtC90LDQu9GM0L3Ri9GF0L7Qv9GG0LjQudC40L3RgtC10YDRhNC10LnRgdCwINGD0YHRgtCw0L3QvtCy0LjRgtGM0L/RgNC40LLQuNC70LXQs9C40YDQvtCy0LDQvdC90YvQudGA0LXQttC40LwgJyArXG4gICfRg9GB0YLQsNC90L7QstC40YLRjNC/0YDQvtCy0LXRgNC60YPRgdC70L7QttC90L7RgdGC0LjQv9Cw0YDQvtC70LXQudC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5INGD0YHRgtCw0L3QvtCy0LjRgtGM0YDQsNGB0YjQuNGA0LXQvdC40LXRgNCw0LHQvtGC0YvRgdC60YDQuNC/0YLQvtCz0YDQsNGE0LjQtdC5ICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgNCw0YHRiNC40YDQtdC90LjQtdGA0LDQsdC+0YLRi9GB0YTQsNC50LvQsNC80Lgg0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0LXQtNC40L3QtdC90LjQtdGB0LLQvdC10YjQvdC40LzQuNGB0YLQvtGH0L3QuNC60L7QvNC00LDQvdC90YvRhSDRg9GB0YLQsNC90L7QstC40YLRjNGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtdC+0LHRitC10LrRgtCw0LjRhNC+0YDQvNGLICcgK1xuICAn0YPRgdGC0LDQvdC+0LLQuNGC0YzRgdC+0YHRgtCw0LLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7QuNC90YLQtdGA0YTQtdC50YHQsG9kYXRhINGD0YHRgtCw0L3QvtCy0LjRgtGM0YfQsNGB0L7QstC+0LnQv9C+0Y/RgdC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC+0LnQsdCw0LfRiyDRg9GB0YLQsNC90L7QstC40YLRjNGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAgJyArXG4gICfRhNC+0YDQvNCw0YIg0YbQtdC7INGH0LDRgSDRh9Cw0YHQvtCy0L7QudC/0L7Rj9GBINGH0LDRgdC+0LLQvtC50L/QvtGP0YHRgdC10LDQvdGB0LAg0YfQuNGB0LvQviDRh9C40YHQu9C+0L/RgNC+0L/QuNGB0YzRjiDRjdGC0L7QsNC00YDQtdGB0LLRgNC10LzQtdC90L3QvtCz0L7RhdGA0LDQvdC40LvQuNGJ0LAgJztcblxuICAvLyB2OCDRgdCy0L7QudGB0YLQstCwINCz0LvQvtCx0LDQu9GM0L3QvtCz0L4g0LrQvtC90YLQtdC60YHRgtCwID09PiBidWlsdF9pblxuICB2YXIgdjhfZ2xvYmFsX2NvbnRleHRfcHJvcGVydHkgPVxuICAnd3PRgdGB0YvQu9C60Lgg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INCx0LjQsdC70LjQvtGC0LXQutCw0LzQsNC60LXRgtC+0LLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCx0LjQsdC70LjQvtGC0LXQutCw0YHRgtC40LvQtdC5INCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0YsgJyArXG4gICfQstC90LXRiNC90LjQtdC40YHRgtC+0YfQvdC40LrQuNC00LDQvdC90YvRhSDQstC90LXRiNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuCDQstC90LXRiNC90LjQtdC+0YLRh9C10YLRiyDQstGB0YLRgNC+0LXQvdC90YvQtdC/0L7QutGD0L/QutC4INCz0LvQsNCy0L3Ri9C50LjQvdGC0LXRgNGE0LXQudGBINCz0LvQsNCy0L3Ri9C50YHRgtC40LvRjCAnICtcbiAgJ9C00L7QutGD0LzQtdC90YLRiyDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0LXRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC20YPRgNC90LDQu9GL0LTQvtC60YPQvNC10L3RgtC+0LIg0LfQsNC00LDRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGP0L7QsdC40L3RgtC10YDQvdC10YLRgdC+0LXQtNC40L3QtdC90LjQuCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LDQsdC+0YfQtdC50LTQsNGC0YsgJyArXG4gICfQuNGB0YLQvtGA0LjRj9GA0LDQsdC+0YLRi9C/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQutC+0L3RgdGC0LDQvdGC0Ysg0LrRgNC40YLQtdGA0LjQuNC+0YLQsdC+0YDQsCDQvNC10YLQsNC00LDQvdC90YvQtSDQvtCx0YDQsNCx0L7RgtC60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdGA0LXQutC70LDQvNGLINC+0YLQv9GA0LDQstC60LDQtNC+0YHRgtCw0LLQu9GP0LXQvNGL0YXRg9Cy0LXQtNC+0LzQu9C10L3QuNC5ICcgK1xuICAn0L7RgtGH0LXRgtGLINC/0LDQvdC10LvRjNC30LDQtNCw0YfQvtGBINC/0LDRgNCw0LzQtdGC0YDQt9Cw0L/Rg9GB0LrQsCDQv9Cw0YDQsNC80LXRgtGA0YvRgdC10LDQvdGB0LAg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPINC/0LvQsNC90YvQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0L/Qu9Cw0L3Ri9Cy0LjQtNC+0LLRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQuiAnICtcbiAgJ9C/0LvQsNC90YvQvtCx0LzQtdC90LAg0L/Qu9Cw0L3Ri9GB0YfQtdGC0L7QsiDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQuiDQv9C+0LvRjNC30L7QstCw0YLQtdC70LjQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QvtC50LHQsNC30Ysg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC4INC/0YDQvtCy0LXRgNC60LDQstGB0YLRgNC+0LXQvdC90YvRhdC/0L7QutGD0L/QvtC6ICcgK1xuICAn0YDQsNCx0L7Rh9Cw0Y/QtNCw0YLQsCDRgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDRgNC10LPQuNGB0YLRgNGL0LHRg9GF0LPQsNC70YLQtdGA0LjQuCDRgNC10LPQuNGB0YLRgNGL0L3QsNC60L7Qv9C70LXQvdC40Y8g0YDQtdCz0LjRgdGC0YDRi9GA0LDRgdGH0LXRgtCwINGA0LXQs9C40YHRgtGA0YvRgdCy0LXQtNC10L3QuNC5ICcgK1xuICAn0YDQtdCz0LvQsNC80LXQvdGC0L3Ri9C10LfQsNC00LDQvdC40Y8g0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byDRgdC/0YDQsNCy0L7Rh9C90LjQutC4INGB0YDQtdC00YHRgtCy0LDQs9C10L7Qv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90LjRjyDRgdGA0LXQtNGB0YLQstCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGB0YDQtdC00YHRgtCy0LDQvNGD0LvRjNGC0LjQvNC10LTQuNCwICcgK1xuICAn0YHRgNC10LTRgdGC0LLQsNC+0YLQvtCx0YDQsNC20LXQvdC40Y/RgNC10LrQu9Cw0LzRiyDRgdGA0LXQtNGB0YLQstCw0L/QvtGH0YLRiyDRgdGA0LXQtNGB0YLQstCw0YLQtdC70LXRhNC+0L3QuNC4INGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQu9C+0LLRi9C10L/QvtGC0L7QutC4INGE0L7QvdC+0LLRi9C10LfQsNC00LDQvdC40Y8g0YXRgNCw0L3QuNC70LjRidCw0L3QsNGB0YLRgNC+0LXQuiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdCy0LDRgNC40LDQvdGC0L7QstC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdC90LDRgdGC0YDQvtC10LrQtNCw0L3QvdGL0YXRhNC+0YDQvCDRhdGA0LDQvdC40LvQuNGJ0LXQvtCx0YnQuNGF0L3QsNGB0YLRgNC+0LXQuiDRhdGA0LDQvdC40LvQuNGJ0LXQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjRhdC90LDRgdGC0YDQvtC10LrQtNC40L3QsNC80LjRh9C10YHQutC40YXRgdC/0LjRgdC60L7QsiAnICtcbiAgJ9GF0YDQsNC90LjQu9C40YnQtdC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjNGB0LrQuNGF0L3QsNGB0YLRgNC+0LXQutC+0YLRh9C10YLQvtCyINGF0YDQsNC90LjQu9C40YnQtdGB0LjRgdGC0LXQvNC90YvRhdC90LDRgdGC0YDQvtC10LogJztcblxuICAvLyBidWlsdF9pbiA6INCy0YHRgtGA0L7QtdC90L3Ri9C1INC40LvQuCDQsdC40LHQu9C40L7RgtC10YfQvdGL0LUg0L7QsdGK0LXQutGC0YsgKNC60L7QvdGB0YLQsNC90YLRiywg0LrQu9Cw0YHRgdGLLCDRhNGD0L3QutGG0LjQuClcbiAgdmFyIEJVSUxUSU4gPVxuICB2N19zeXN0ZW1fY29uc3RhbnRzICtcbiAgdjdfZ2xvYmFsX2NvbnRleHRfbWV0aG9kcyArIHY4X2dsb2JhbF9jb250ZXh0X21ldGhvZHMgK1xuICB2OF9nbG9iYWxfY29udGV4dF9wcm9wZXJ0eTtcbiAgXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQvdCw0LHQvtGA0Ysg0LfQvdCw0YfQtdC90LjQuSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9zZXRzX29mX3ZhbHVlcyA9XG4gICd3ZWLRhtCy0LXRgtCwIHdpbmRvd3PRhtCy0LXRgtCwIHdpbmRvd3PRiNGA0LjRhNGC0Ysg0LHQuNCx0LvQuNC+0YLQtdC60LDQutCw0YDRgtC40L3QvtC6INGA0LDQvNC60LjRgdGC0LjQu9GPINGB0LjQvNCy0L7Qu9GLINGG0LLQtdGC0LDRgdGC0LjQu9GPINGI0YDQuNGE0YLRi9GB0YLQuNC70Y8gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LjQvdGC0LXRgNGE0LXQudGB0L3Ri9C1ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSA9XG4gICfQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC10YHQvtGF0YDQsNC90LXQvdC40LXQtNCw0L3QvdGL0YXRhNC+0YDQvNGL0LLQvdCw0YHRgtGA0L7QudC60LDRhSDQsNCy0YLQvtC90YPQvNC10YDQsNGG0LjRj9Cy0YTQvtGA0LzQtSDQsNCy0YLQvtGA0LDQt9C00LLQuNC20LXQvdC40LXRgdC10YDQuNC5ICcgK1xuICAn0LDQvdC40LzQsNGG0LjRj9C00LjQsNCz0YDQsNC80LzRiyDQstCw0YDQuNCw0L3RgtCy0YvRgNCw0LLQvdC40LLQsNC90LjRj9GN0LvQtdC80LXQvdGC0L7QstC40LfQsNCz0L7Qu9C+0LLQutC+0LIg0LLQsNGA0LjQsNC90YLRg9C/0YDQsNCy0LvQtdC90LjRj9Cy0YvRgdC+0YLQvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQstC10YDRgtC40LrQsNC70YzQvdCw0Y/Qv9GA0L7QutGA0YPRgtC60LDRhNC+0YDQvNGLINCy0LXRgNGC0LjQutCw0LvRjNC90L7QtdC/0L7Qu9C+0LbQtdC90LjQtSDQstC10YDRgtC40LrQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LXRjdC70LXQvNC10L3RgtCwINCy0LjQtNCz0YDRg9C/0L/Ri9GE0L7RgNC80YsgJyArXG4gICfQstC40LTQtNC10LrQvtGA0LDRhtC40LjRhNC+0YDQvNGLINCy0LjQtNC00L7Qv9C+0LvQvdC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0LLQuNC00LjQt9C80LXQvdC10L3QuNGP0LTQsNC90L3Ri9GFINCy0LjQtNC60L3QvtC/0LrQuNGE0L7RgNC80Ysg0LLQuNC00L/QtdGA0LXQutC70Y7Rh9Cw0YLQtdC70Y8gJyArXG4gICfQstC40LTQv9C+0LTQv9C40YHQtdC50LrQtNC40LDQs9GA0LDQvNC80LUg0LLQuNC00L/QvtC70Y/RhNC+0YDQvNGLINCy0LjQtNGE0LvQsNC20LrQsCDQstC70LjRj9C90LjQtdGA0LDQt9C80LXRgNCw0L3QsNC/0YPQt9GL0YDQtdC60LTQuNCw0LPRgNCw0LzQvNGLINCz0L7RgNC40LfQvtC90YLQsNC70YzQvdC+0LXQv9C+0LvQvtC20LXQvdC40LUgJyArXG4gICfQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC10L/QvtC70L7QttC10L3QuNC10Y3Qu9C10LzQtdC90YLQsCDQs9GA0YPQv9C/0LjRgNC+0LLQutCw0LrQvtC70L7QvdC+0Log0LPRgNGD0L/Qv9C40YDQvtCy0LrQsNC/0L7QtNGH0LjQvdC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRhNC+0YDQvNGLICcgK1xuICAn0LPRgNGD0L/Qv9GL0LjRjdC70LXQvNC10L3RgtGLINC00LXQudGB0YLQstC40LXQv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LnRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRjyDQtNC+0L/Rg9GB0YLQuNC80YvQtdC00LXQudGB0YLQstC40Y/Qv9C10YDQtdGC0LDRgdC60LjQstCw0L3QuNGPICcgK1xuICAn0LjQvdGC0LXRgNCy0LDQu9C80LXQttC00YPRjdC70LXQvNC10L3RgtCw0LzQuNGE0L7RgNC80Ysg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQstGL0LLQvtC00LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LvQvtGB0YvQv9GA0L7QutGA0YPRgtC60LggJyArXG4gICfQuNGB0L/QvtC70YzQt9GD0LXQvNC+0LXQt9C90LDRh9C10L3QuNC10YLQvtGH0LrQuNCx0LjRgNC20LXQstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0LjRgdGC0L7RgNC40Y/QstGL0LHQvtGA0LDQv9GA0LjQstCy0L7QtNC1INC40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNC50L7RgdC40YLQvtGH0LXQutC00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9C40YHRgtC+0YfQvdC40LrQt9C90LDRh9C10L3QuNGP0YDQsNC30LzQtdGA0LDQv9GD0LfRi9GA0YzQutCw0LTQuNCw0LPRgNCw0LzQvNGLINC60LDRgtC10LPQvtGA0LjRj9Cz0YDRg9C/0L/Ri9C60L7QvNCw0L3QtCDQvNCw0LrRgdC40LzRg9C80YHQtdGA0LjQuSDQvdCw0YfQsNC70YzQvdC+0LXQvtGC0L7QsdGA0LDQttC10L3QuNC10LTQtdGA0LXQstCwICcgK1xuICAn0L3QsNGH0LDQu9GM0L3QvtC10L7RgtC+0LHRgNCw0LbQtdC90LjQtdGB0L/QuNGB0LrQsCDQvtCx0L3QvtCy0LvQtdC90LjQtdGC0LXQutGB0YLQsNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC10L3QtNGA0L7Qs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQvtGA0LjQtdC90YLQsNGG0LjRj9C80LXRgtC+0LrQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/QvNC10YLQvtC60YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgNC40LXQvdGC0LDRhtC40Y/RjdC70LXQvNC10L3RgtCw0YTQvtGA0LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQtNC40LDQs9GA0LDQvNC80LUgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10LLQu9C10LPQtdC90LTQtdC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LPRgNGD0L/Qv9GL0LrQvdC+0L/QvtC6INC+0YLQvtCx0YDQsNC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC30L3QsNGH0LXQvdC40LnRgdCy0L7QtNC90L7QudC00LjQsNCz0YDQsNC80LzRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10LfQvdCw0YfQtdC90LjRj9C40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC40L3RgtC10YDQstCw0LvQsNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC60L3QvtC/0LrQuCDQvtGC0L7QsdGA0LDQttC10L3QuNC10LrQvdC+0L/QutC40LLRi9Cx0L7RgNCwINC+0YLQvtCx0YDQsNC20LXQvdC40LXQvtCx0YHRg9C20LTQtdC90LjQudGE0L7RgNC80YsgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10L7QsdGL0YfQvdC+0LnQs9GA0YPQv9C/0Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC+0YLRgNC40YbQsNGC0LXQu9GM0L3Ri9GF0LfQvdCw0YfQtdC90LjQudC/0YPQt9GL0YDRjNC60L7QstC+0LnQtNC40LDQs9GA0LDQvNC80Ysg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNC/0L7QuNGB0LrQsCAnICtcbiAgJ9C+0YLQvtCx0YDQsNC20LXQvdC40LXQv9C+0LTRgdC60LDQt9C60Lgg0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Y/Qv9GA0LjRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC4INC+0YLQvtCx0YDQsNC20LXQvdC40LXRgNCw0LfQvNC10YLQutC40L/QvtC70L7RgdGL0YDQtdCz0YPQu9C40YDQvtCy0LDQvdC40Y8gJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YHRgtGA0LDQvdC40YbRhNC+0YDQvNGLINC+0YLQvtCx0YDQsNC20LXQvdC40LXRgtCw0LHQu9C40YbRiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YLQtdC60YHRgtCw0LfQvdCw0YfQtdC90LjRj9C00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAgJyArXG4gICfQvtGC0L7QsdGA0LDQttC10L3QuNC10YPQv9GA0LDQstC70LXQvdC40Y/QvtCx0YvRh9C90L7QudCz0YDRg9C/0L/RiyDQvtGC0L7QsdGA0LDQttC10L3QuNC10YTQuNCz0YPRgNGL0LrQvdC+0L/QutC4INC/0LDQu9C40YLRgNCw0YbQstC10YLQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINC/0L7QstC10LTQtdC90LjQtdC+0LHRi9GH0L3QvtC50LPRgNGD0L/Qv9GLICcgK1xuICAn0L/QvtC00LTQtdGA0LbQutCw0LzQsNGB0YjRgtCw0LHQsNC00LXQvdC00YDQvtCz0YDQsNC80LzRiyDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0LTQuNCw0LPRgNCw0LzQvNGL0LPQsNC90YLQsCDQv9C+0LTQtNC10YDQttC60LDQvNCw0YHRiNGC0LDQsdCw0YHQstC+0LTQvdC+0LnQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfQv9C+0LjRgdC60LLRgtCw0LHQu9C40YbQtdC/0YDQuNCy0LLQvtC00LUg0L/QvtC70L7QttC10L3QuNC10LfQsNCz0L7Qu9C+0LLQutCw0Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQsNGA0YLQuNC90LrQuNC60L3QvtC/0LrQuNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQutCw0YDRgtC40L3QutC40Y3Qu9C10LzQtdC90YLQsNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINC/0L7Qu9C+0LbQtdC90LjQtdC60L7QvNCw0L3QtNC90L7QudC/0LDQvdC10LvQuNGE0L7RgNC80Ysg0L/QvtC70L7QttC10L3QuNC10LrQvtC80LDQvdC00L3QvtC50L/QsNC90LXQu9C40Y3Qu9C10LzQtdC90YLQsNGE0L7RgNC80YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQvtC/0L7RgNC90L7QudGC0L7Rh9C60LjQvtGC0YDQuNGB0L7QstC60Lgg0L/QvtC70L7QttC10L3QuNC10L/QvtC00L/QuNGB0LXQudC60LTQuNCw0LPRgNCw0LzQvNC1INC/0L7Qu9C+0LbQtdC90LjQtdC/0L7QtNC/0LjRgdC10LnRiNC60LDQu9GL0LfQvdCw0YfQtdC90LjQudC40LfQvNC10YDQuNGC0LXQu9GM0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YHQvtGB0YLQvtGP0L3QuNGP0L/RgNC+0YHQvNC+0YLRgNCwINC/0L7Qu9C+0LbQtdC90LjQtdGB0YLRgNC+0LrQuNC/0L7QuNGB0LrQsCDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDRgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDQv9C+0LvQvtC20LXQvdC40LXRg9C/0YDQsNCy0LvQtdC90LjRj9C/0L7QuNGB0LrQvtC8ICcgK1xuICAn0L/QvtC70L7QttC10L3QuNC10YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4INC/0L7RgNGP0LTQvtC60L7RgtC+0LHRgNCw0LbQtdC90LjRj9GC0L7Rh9C10LrQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QvtC50LPQuNGB0YLQvtCz0YDQsNC80LzRiyDQv9C+0YDRj9C00L7QutGB0LXRgNC40LnQstC70LXQs9C10L3QtNC10LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YDQsNC30LzQtdGA0LrQsNGA0YLQuNC90LrQuCDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQt9Cw0LPQvtC70L7QstC60LDRiNC60LDQu9GL0LTQuNCw0LPRgNCw0LzQvNGLINGA0LDRgdGC0Y/Qs9C40LLQsNC90LjQtdC/0L7QstC10YDRgtC40LrQsNC70LjQtNC40LDQs9GA0LDQvNC80YvQs9Cw0L3RgtCwICcgK1xuICAn0YDQtdC20LjQvNCw0LLRgtC+0L7RgtC+0LHRgNCw0LbQtdC90LjRj9GB0L7RgdGC0L7Rj9C90LjRjyDRgNC10LbQuNC80LLQstC+0LTQsNGB0YLRgNC+0LrRgtCw0LHQu9C40YbRiyDRgNC10LbQuNC80LLRi9Cx0L7RgNCw0L3QtdC30LDQv9C+0LvQvdC10L3QvdC+0LPQviDRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0LTQsNGC0YsgJyArXG4gICfRgNC10LbQuNC80LLRi9C00LXQu9C10L3QuNGP0YHRgtGA0L7QutC40YLQsNCx0LvQuNGG0Ysg0YDQtdC20LjQvNCy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRhtGLINGA0LXQttC40LzQuNC30LzQtdC90LXQvdC40Y/RgNCw0LfQvNC10YDQsCDRgNC10LbQuNC80LjQt9C80LXQvdC10L3QuNGP0YHQstGP0LfQsNC90L3QvtCz0L7Qt9C90LDRh9C10L3QuNGPICcgK1xuICAn0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LTQuNCw0LvQvtCz0LDQv9C10YfQsNGC0Lgg0YDQtdC20LjQvNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0L/QsNGA0LDQvNC10YLRgNCw0LrQvtC80LDQvdC00Ysg0YDQtdC20LjQvNC80LDRgdGI0YLQsNCx0LjRgNC+0LLQsNC90LjRj9C/0YDQvtGB0LzQvtGC0YDQsCAnICtcbiAgJ9GA0LXQttC40LzQvtGB0L3QvtCy0L3QvtCz0L7QvtC60L3QsNC60LvQuNC10L3RgtGB0LrQvtCz0L7Qv9GA0LjQu9C+0LbQtdC90LjRjyDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9C+0LrQvdCw0YTQvtGA0LzRiyDRgNC10LbQuNC80L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50YHQtdGA0LjQuCDRgNC10LbQuNC80L7RgtGA0LjRgdC+0LLQutC40YHQtdGC0LrQuNCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLICcgK1xuICAn0YDQtdC20LjQvNC/0L7Qu9GD0L/RgNC+0LfRgNCw0YfQvdC+0YHRgtC40LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzQv9GA0L7QsdC10LvQvtCy0LTQuNCw0LPRgNCw0LzQvNGLINGA0LXQttC40LzRgNCw0LfQvNC10YnQtdC90LjRj9C90LDRgdGC0YDQsNC90LjRhtC1INGA0LXQttC40LzRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0LrQvtC70L7QvdC60LggJyArXG4gICfRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C00LjQsNCz0YDQsNC80LzRiyDRgNC10LbQuNC80YHQs9C70LDQttC40LLQsNC90LjRj9C40L3QtNC40LrQsNGC0L7RgNCwINGA0LXQttC40LzRgdC/0LjRgdC60LDQt9Cw0LTQsNGHINGB0LrQstC+0LfQvdC+0LXQstGL0YDQsNCy0L3QuNCy0LDQvdC40LUgJyArXG4gICfRgdC+0YXRgNCw0L3QtdC90LjQtdC00LDQvdC90YvRhdGE0L7RgNC80YvQstC90LDRgdGC0YDQvtC50LrQsNGFINGB0L/QvtGB0L7QsdC30LDQv9C+0LvQvdC10L3QuNGP0YLQtdC60YHRgtCw0LfQsNCz0L7Qu9C+0LLQutCw0YjQutCw0LvRi9C00LjQsNCz0YDQsNC80LzRiyAnICtcbiAgJ9GB0L/QvtGB0L7QsdC+0L/RgNC10LTQtdC70LXQvdC40Y/QvtCz0YDQsNC90LjRh9C40LLQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGP0LTQuNCw0LPRgNCw0LzQvNGLINGB0YLQsNC90LTQsNGA0YLQvdCw0Y/Qs9GA0YPQv9C/0LDQutC+0LzQsNC90LQg0YHRgtCw0L3QtNCw0YDRgtC90L7QtdC+0YTQvtGA0LzQu9C10L3QuNC1ICcgK1xuICAn0YHRgtCw0YLRg9GB0L7Qv9C+0LLQtdGJ0LXQvdC40Y/Qv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0YHRgtC40LvRjNGB0YLRgNC10LvQutC4INGC0LjQv9Cw0L/Qv9GA0L7QutGB0LjQvNCw0YbQuNC40LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/QtdC00LjQvdC40YbRi9GI0LrQsNC70YvQstGA0LXQvNC10L3QuCDRgtC40L/QuNC80L/QvtGA0YLQsNGB0LXRgNC40LnRgdC70L7Rj9Cz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C70LjQvdC40LjQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/Qu9C40L3QuNC40LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0LzQsNGA0LrQtdGA0LDQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/QvNCw0YDQutC10YDQsNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/QvtCx0LvQsNGB0YLQuNC+0YTQvtGA0LzQu9C10L3QuNGPICcgK1xuICAn0YLQuNC/0L7RgNCz0LDQvdC40LfQsNGG0LjQuNC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhdCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgdC10YDQuNC40YHQu9C+0Y/Qs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyAnICtcbiAgJ9GC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RgtC+0YfQtdGH0L3QvtCz0L7QvtCx0YrQtdC60YLQsNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/RiNC60LDQu9GL0Y3Qu9C10LzQtdC90YLQsNC70LXQs9C10L3QtNGL0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80YsgJyArXG4gICfRgtC40L/Qv9C+0LjRgdC60LDQvtCx0YrQtdC60YLQvtCy0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YLQuNC/0L/RgNC+0LXQutGG0LjQuNCz0LXQvtCz0YDQsNGE0LjRh9C10YHQutC+0LnRgdGF0LXQvNGLINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjQt9C80LXRgNC10L3QuNC5ICcgK1xuICAn0YLQuNC/0YDQsNC30LzQtdGJ0LXQvdC40Y/RgNC10LrQstC40LfQuNGC0L7QstC40LfQvNC10YDQtdC90LjQuSDRgtC40L/RgNCw0LzQutC40Y3Qu9C10LzQtdC90YLQsNGD0L/RgNCw0LLQu9C10L3QuNGPINGC0LjQv9GB0LLQvtC00L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YLQuNC/0YHQstGP0LfQuNC00LjQsNCz0YDQsNC80LzRi9Cz0LDQvdGC0LAg0YLQuNC/0YHQvtC10LTQuNC90LXQvdC40Y/Qt9C90LDRh9C10L3QuNC50L/QvtGB0LXRgNC40Y/QvNC00LjQsNCz0YDQsNC80LzRiyDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GC0L7Rh9C10LrQtNC40LDQs9GA0LDQvNC80YsgJyArXG4gICfRgtC40L/RgdC+0LXQtNC40L3QuNGC0LXQu9GM0L3QvtC50LvQuNC90LjQuCDRgtC40L/RgdGC0L7RgNC+0L3Ri9GN0LvQtdC80LXQvdGC0LDQs9GA0LDRhNC40YfQtdGB0LrQvtC50YHRhdC10LzRiyDRgtC40L/RhNC+0YDQvNGL0L7RgtGH0LXRgtCwINGC0LjQv9GI0LrQsNC70YvRgNCw0LTQsNGA0L3QvtC50LTQuNCw0LPRgNCw0LzQvNGLICcgK1xuICAn0YTQsNC60YLQvtGA0LvQuNC90LjQuNGC0YDQtdC90LTQsNC00LjQsNCz0YDQsNC80LzRiyDRhNC40LPRg9GA0LDQutC90L7Qv9C60Lgg0YTQuNCz0YPRgNGL0LPRgNCw0YTQuNGH0LXRgdC60L7QudGB0YXQtdC80Ysg0YTQuNC60YHQsNGG0LjRj9Cy0YLQsNCx0LvQuNGG0LUg0YTQvtGA0LzQsNGC0LTQvdGP0YjQutCw0LvRi9Cy0YDQtdC80LXQvdC4ICcgK1xuICAn0YTQvtGA0LzQsNGC0LrQsNGA0YLQuNC90LrQuCDRiNC40YDQuNC90LDQv9C+0LTRh9C40L3QtdC90L3Ri9GF0Y3Qu9C10LzQtdC90YLQvtCy0YTQvtGA0LzRiyAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC/0YDQuNC60LvQsNC00L3Ri9GFINC+0LHRitC10LrRgtC+0LIgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb2JqZWN0c19wcm9wZXJ0aWVzID1cbiAgJ9Cy0LjQtNC00LLQuNC20LXQvdC40Y/QsdGD0YXQs9Cw0LvRgtC10YDQuNC4INCy0LjQtNC00LLQuNC20LXQvdC40Y/QvdCw0LrQvtC/0LvQtdC90LjRjyDQstC40LTQv9C10YDQuNC+0LTQsNGA0LXQs9C40YHRgtGA0LDRgNCw0YHRh9C10YLQsCDQstC40LTRgdGH0LXRgtCwINCy0LjQtNGC0L7Rh9C60LjQvNCw0YDRiNGA0YPRgtCw0LHQuNC30L3QtdGB0L/RgNC+0YbQtdGB0YHQsCAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCz0YDRg9C/0L/QuNGN0LvQtdC80LXQvdGC0L7QsiDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQttC40LzQsNC/0YDQvtCy0LXQtNC10L3QuNGPICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdGA0LXQt9CwINC/0LXRgNC40L7QtNC40YfQvdC+0YHRgtGM0LDQs9GA0LXQs9Cw0YLQsNGA0LXQs9C40YHRgtGA0LDQvdCw0LrQvtC/0LvQtdC90LjRjyDRgNC10LbQuNC80LDQstGC0L7QstGA0LXQvNGPINGA0LXQttC40LzQt9Cw0L/QuNGB0LjQtNC+0LrRg9C80LXQvdGC0LAg0YDQtdC20LjQvNC/0YDQvtCy0LXQtNC10L3QuNGP0LTQvtC60YPQvNC10L3RgtCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90Ysg0L7QsdC80LXQvdCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2V4Y2hhbmdlX3BsYW5zID1cbiAgJ9Cw0LLRgtC+0YDQtdCz0LjRgdGC0YDQsNGG0LjRj9C40LfQvNC10L3QtdC90LjQuSDQtNC+0L/Rg9GB0YLQuNC80YvQudC90L7QvNC10YDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7RgtC/0YDQsNCy0LrQsNGN0LvQtdC80LXQvdGC0LDQtNCw0L3QvdGL0YUg0L/QvtC70YPRh9C10L3QuNC10Y3Qu9C10LzQtdC90YLQsNC00LDQvdC90YvRhSAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgtCw0LHQu9C40YfQvdGL0Lkg0LTQvtC60YPQvNC10L3RgiA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc190YWJ1bGFyX2RvY3VtZW50ID1cbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINC+0YDQuNC10L3RgtCw0YbQuNGP0YHRgtGA0LDQvdC40YbRiyDQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLQutC+0LvQvtC90L7QutGB0LLQvtC00L3QvtC50YLQsNCx0LvQuNGG0YsgJyArXG4gICfQv9C+0LvQvtC20LXQvdC40LXQuNGC0L7Qs9C+0LLRgdGC0YDQvtC60YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyDQv9C+0LvQvtC20LXQvdC40LXRgtC10LrRgdGC0LDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L7QutCw0YDRgtC40L3QutC4INGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC30LDQs9C+0LvQvtCy0LrQsNCz0YDRg9C/0L/QuNGA0L7QstC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GB0L/QvtGB0L7QsdGH0YLQtdC90LjRj9C30L3QsNGH0LXQvdC40LnRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/QtNCy0YPRgdGC0L7RgNC+0L3QvdC10LnQv9C10YfQsNGC0Lgg0YLQuNC/0LfQsNC/0L7Qu9C90LXQvdC40Y/QvtCx0LvQsNGB0YLQuNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwICcgK1xuICAn0YLQuNC/0LrRg9GA0YHQvtGA0L7QstGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRgNC40YHRg9C90LrQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C70LjQvdC40LjRj9GH0LXQudC60LjRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCAnICtcbiAgJ9GC0LjQv9C90LDQv9GA0LDQstC70LXQvdC40Y/Qv9C10YDQtdGF0L7QtNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0L7RgtC+0LHRgNCw0LbQtdC90LjRj9Cy0YvQtNC10LvQtdC90LjRj9GC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C+0YLQvtCx0YDQsNC20LXQvdC40Y/Qu9C40L3QuNC50YHQstC+0LTQvdC+0LnRgtCw0LHQu9C40YbRiyAnICtcbiAgJ9GC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0YLQtdC60YHRgtCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YDQuNGB0YPQvdC60LDRgtCw0LHQu9C40YfQvdC+0LPQvtC00L7QutGD0LzQtdC90YLQsCDRgtC40L/RgdC80LXRidC10L3QuNGP0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJyArXG4gICfRgtC40L/Rg9C30L7RgNCw0YLQsNCx0LvQuNGH0L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAg0YLQuNC/0YTQsNC50LvQsNGC0LDQsdC70LjRh9C90L7Qs9C+0LTQvtC60YPQvNC10L3RgtCwINGC0L7Rh9C90L7RgdGC0YzQv9C10YfQsNGC0Lgg0YfQtdGA0LXQtNC+0LLQsNC90LjQtdGA0LDRgdC/0L7Qu9C+0LbQtdC90LjRj9GB0YLRgNCw0L3QuNGGICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0LvQsNC90LjRgNC+0LLRidC40LogPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfc2hlZHVsZXIgPVxuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdCy0YDQtdC80LXQvdC40Y3Qu9C10LzQtdC90YLQvtCy0L/Qu9Cw0L3QuNGA0L7QstGJ0LjQutCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQuSDQtNC+0LrRg9C80LXQvdGCID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2Zvcm1hdHRlZF9kb2N1bWVudCA9XG4gICfRgtC40L/RhNCw0LnQu9Cw0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtCz0L7QtNC+0LrRg9C80LXQvdGC0LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0LfQsNC/0YDQvtGBID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3F1ZXJ5ID1cbiAgJ9C+0LHRhdC+0LTRgNC10LfRg9C70YzRgtCw0YLQsNC30LDQv9GA0L7RgdCwINGC0LjQv9C30LDQv9C40YHQuNC30LDQv9GA0L7RgdCwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7RgdGC0YDQvtC40YLQtdC70Ywg0L7RgtGH0LXRgtCwID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX3JlcG9ydF9idWlsZGVyID1cbiAgJ9Cy0LjQtNC30LDQv9C+0LvQvdC10L3QuNGP0YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC/0L7RgdGC0YDQvtC40YLQtdC70Y/QvtGC0YfQtdGC0LAg0YLQuNC/0LTQvtCx0LDQstC70LXQvdC40Y/Qv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSDRgtC40L/QuNC30LzQtdGA0LXQvdC40Y/Qv9C+0YHRgtGA0L7QuNGC0LXQu9GP0L7RgtGH0LXRgtCwINGC0LjQv9GA0LDQt9C80LXRidC10L3QuNGP0LjRgtC+0LPQvtCyICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQsdC+0YLQsCDRgSDRhNCw0LnQu9Cw0LzQuCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19maWxlcyA9XG4gICfQtNC+0YHRgtGD0L/QutGE0LDQudC70YMg0YDQtdC20LjQvNC00LjQsNC70L7Qs9Cw0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDRgNC10LbQuNC80L7RgtC60YDRi9GC0LjRj9GE0LDQudC70LAgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0L/QvtGB0YLRgNC+0LjRgtC10LvRjCDQt9Cw0L/RgNC+0YHQsCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19xdWVyeV9idWlsZGVyID1cbiAgJ9GC0LjQv9C40LfQvNC10YDQtdC90LjRj9C/0L7RgdGC0YDQvtC40YLQtdC70Y/Qt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDQsNC90LDQu9C40Lcg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfYW5hbHlzaXMgPVxuICAn0LLQuNC00LTQsNC90L3Ri9GF0LDQvdCw0LvQuNC30LAg0LzQtdGC0L7QtNC60LvQsNGB0YLQtdGA0LjQt9Cw0YbQuNC4INGC0LjQv9C10LTQuNC90LjRhtGL0LjQvdGC0LXRgNCy0LDQu9Cw0LLRgNC10LzQtdC90LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/Qt9Cw0L/QvtC70L3QtdC90LjRj9GC0LDQsdC70LjRhtGL0YDQtdC30YPQu9GM0YLQsNGC0LDQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YfQuNGB0LvQvtCy0YvRhdC30L3QsNGH0LXQvdC40LnQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/QuNGB0YLQvtGH0L3QuNC60LDQtNCw0L3QvdGL0YXQv9C+0LjRgdC60LDQsNGB0YHQvtGG0LjQsNGG0LjQuSDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LTQtdGA0LXQstC+0YDQtdGI0LXQvdC40LkgJyArXG4gICfRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0LrQu9Cw0YHRgtC10YDQuNC30LDRhtC40Y8g0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC+0LHRidCw0Y/RgdGC0LDRgtC40YHRgtC40LrQsCDRgtC40L/QutC+0LvQvtC90LrQuNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GF0L/QvtC40YHQutCw0YHRgdC+0YbQuNCw0YbQuNC5ICcgK1xuICAn0YLQuNC/0LrQvtC70L7QvdC60LjQsNC90LDQu9C40LfQsNC00LDQvdC90YvRhdC/0L7QuNGB0LrQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0LXQuSDRgtC40L/QutC+0LvQvtC90LrQuNC80L7QtNC10LvQuNC/0YDQvtCz0L3QvtC30LAg0YLQuNC/0LzQtdGA0YvRgNCw0YHRgdGC0L7Rj9C90LjRj9Cw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L7RgtGB0LXRh9C10L3QuNGP0L/RgNCw0LLQuNC70LDRgdGB0L7RhtC40LDRhtC40Lgg0YLQuNC/0L/QvtC70Y/QsNC90LDQu9C40LfQsNC00LDQvdC90YvRhSDRgtC40L/RgdGC0LDQvdC00LDRgNGC0LjQt9Cw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9C+0YDRj9C00L7Rh9C40LLQsNC90LjRj9C/0YDQsNCy0LjQu9Cw0YHRgdC+0YbQuNCw0YbQuNC40LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfRgtC40L/Rg9C/0L7RgNGP0LTQvtGH0LjQstCw0L3QuNGP0YjQsNCx0LvQvtC90L7QstC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC50LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUg0YLQuNC/0YPQv9GA0L7RidC10L3QuNGP0LTQtdGA0LXQstCw0YDQtdGI0LXQvdC40LkgJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0geG1sLCBqc29uLCB4cywgZG9tLCB4ZHRvLCB3ZWIt0YHQtdGA0LLQuNGB0YsgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfeG1sX2pzb25feHNfZG9tX3hkdG9fd3MgPVxuICAnd3PQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QsNGA0LDQvNC10YLRgNCwINCy0LDRgNC40LDQvdGCeHBhdGh4cyDQstCw0YDQuNCw0L3RgtC30LDQv9C40YHQuNC00LDRgtGLanNvbiDQstCw0YDQuNCw0L3RgtC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINCy0LjQtNCz0YDRg9C/0L/Ri9C80L7QtNC10LvQuHhzINCy0LjQtNGE0LDRgdC10YLQsHhkdG8gJyArXG4gICfQtNC10LnRgdGC0LLQuNC10L/QvtGB0YLRgNC+0LjRgtC10LvRj2RvbSDQt9Cw0LLQtdGA0YjQtdC90L3QvtGB0YLRjNC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHQvtGB0YLQsNCy0L3QvtCz0L7RgtC40L/QsHhzINC30LDQstC10YDRiNC10L3QvdC+0YHRgtGM0YHRhdC10LzRi3hzINC30LDQv9GA0LXRidC10L3QvdGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMgJyArXG4gICfQuNGB0LrQu9GO0YfQtdC90LjRj9Cz0YDRg9C/0L/Qv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0LrQsNGC0LXQs9C+0YDQuNGP0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/QsNGC0YDQuNCx0YPRgtCweHMg0LrQsNGC0LXQs9C+0YDQuNGP0L7Qs9GA0LDQvdC40YfQtdC90LjRj9C40LTQtdC90YLQuNGH0L3QvtGB0YLQuHhzINC60LDRgtC10LPQvtGA0LjRj9C+0LPRgNCw0L3QuNGH0LXQvdC40Y/Qv9GA0L7RgdGC0YDQsNC90YHRgtCy0LjQvNC10L14cyAnICtcbiAgJ9C80LXRgtC+0LTQvdCw0YHQu9C10LTQvtCy0LDQvdC40Y94cyDQvNC+0LTQtdC70YzRgdC+0LTQtdGA0LbQuNC80L7Qs9C+eHMg0L3QsNC30L3QsNGH0LXQvdC40LXRgtC40L/QsHhtbCDQvdC10LTQvtC/0YPRgdGC0LjQvNGL0LXQv9C+0LTRgdGC0LDQvdC+0LLQutC4eHMg0L7QsdGA0LDQsdC+0YLQutCw0L/RgNC+0LHQtdC70YzQvdGL0YXRgdC40LzQstC+0LvQvtCyeHMg0L7QsdGA0LDQsdC+0YLQutCw0YHQvtC00LXRgNC20LjQvNC+0LPQvnhzICcgK1xuICAn0L7Qs9GA0LDQvdC40YfQtdC90LjQtdC30L3QsNGH0LXQvdC40Y94cyDQv9Cw0YDQsNC80LXRgtGA0YvQvtGC0LHQvtGA0LDRg9C30LvQvtCyZG9tINC/0LXRgNC10L3QvtGB0YHRgtGA0L7Qumpzb24g0L/QvtC30LjRhtC40Y/QstC00L7QutGD0LzQtdC90YLQtWRvbSDQv9GA0L7QsdC10LvRjNC90YvQtdGB0LjQvNCy0L7Qu9GLeG1sINGC0LjQv9Cw0YLRgNC40LHRg9GC0LB4bWwg0YLQuNC/0LfQvdCw0YfQtdC90LjRj2pzb24gJyArXG4gICfRgtC40L/QutCw0L3QvtC90LjRh9C10YHQutC+0LPQvnhtbCDRgtC40L/QutC+0LzQv9C+0L3QtdC90YLRi3hzINGC0LjQv9C/0YDQvtCy0LXRgNC60Lh4bWwg0YLQuNC/0YDQtdC30YPQu9GM0YLQsNGC0LBkb214cGF0aCDRgtC40L/Rg9C30LvQsGRvbSDRgtC40L/Rg9C30LvQsHhtbCDRhNC+0YDQvNCweG1sINGE0L7RgNC80LDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRj3hzICcgK1xuICAn0YTQvtGA0LzQsNGC0LTQsNGC0Ytqc29uINGN0LrRgNCw0L3QuNGA0L7QstCw0L3QuNC10YHQuNC80LLQvtC70L7Qsmpzb24gJztcblxuICAvLyB2OCDRgdC40YHRgtC10LzQvdGL0LUg0L/QtdGA0LXRh9C40YHQu9C10L3QuNGPIC0g0YHQuNGB0YLQtdC80LAg0LrQvtC80L/QvtC90L7QstC60Lgg0LTQsNC90L3Ri9GFID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtID1cbiAgJ9Cy0LjQtNGB0YDQsNCy0L3QtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LXQudGB0YLQstC40LXQvtCx0YDQsNCx0L7RgtC60LjRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L3QsNC/0YDQsNCy0LvQtdC90LjQtdGB0L7RgNGC0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXQstC70L7QttC10L3QvdGL0YXRjdC70LXQvNC10L3RgtC+0LLRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC40YLQvtCz0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdCz0YDRg9C/0L/QuNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GA0LDRgdC/0L7Qu9C+0LbQtdC90LjQtdC/0L7Qu9C10LnQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10L/QvtC70Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LXRgNC10LrQstC40LfQuNGC0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cx0YPRhdCz0LDQu9GC0LXRgNGB0LrQvtCz0L7QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cy0YvQstC+0LTQsNGC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0LPRgNGD0L/Qv9C40YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9Cz0YDRg9C/0L/Ri9GN0LvQtdC80LXQvdGC0L7QstC+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9GC0LjQv9C30LDQs9C+0LvQvtCy0LrQsNC/0L7Qu9C10LnQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvNCw0LrQtdGC0LDQs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQuNC/0LzQsNC60LXRgtCw0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/QvtGB0YLQsNGC0LrQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YLQuNC/0L/QtdGA0LjQvtC00LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/RgNCw0LfQvNC10YnQtdC90LjRj9GC0LXQutGB0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GB0LLRj9C30LjQvdCw0LHQvtGA0L7QstC00LDQvdC90YvRhdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGC0LjQv9GN0LvQtdC80LXQvdGC0LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10LvQtdCz0LXQvdC00YvQtNC40LDQs9GA0LDQvNC80YvQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDRgtC40L/Qv9GA0LjQvNC10L3QtdC90LjRj9C+0YLQsdC+0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGA0LXQttC40LzQvtGC0L7QsdGA0LDQttC10L3QuNGP0Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0YDQtdC20LjQvNC+0YLQvtCx0YDQsNC20LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQvtGB0YLQvtGP0L3QuNC10Y3Qu9C10LzQtdC90YLQsNC90LDRgdGC0YDQvtC50LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINGB0L/QvtGB0L7QsdCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/QvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJyArXG4gICfRgNC10LbQuNC80LrQvtC80L/QvtC90L7QstC60LjRgNC10LfRg9C70YzRgtCw0YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC/0LDRgNCw0LzQtdGC0YDQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCw0LLRgtC+0L/QvtC30LjRhtC40Y/RgNC10YHRg9GA0YHQvtCy0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJytcbiAgJ9Cy0LDRgNC40LDQvdGC0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qs9GA0YPQv9C/0LjRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YDQtdGB0YPRgNGB0L7QstCy0LTQuNCw0LPRgNCw0LzQvNC10LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YTQuNC60YHQsNGG0LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRg9GB0LvQvtCy0L3QvtCz0L7QvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC/0L7Rh9GC0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfZW1haWwgPVxuICAn0LLQsNC20L3QvtGB0YLRjNC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsdGA0LDQsdC+0YLQutCw0YLQtdC60YHRgtCw0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtGB0L7QvtCx0YnQtdC90LjRjyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0LjQvdGC0LXRgNC90LXRgtC/0L7Rh9GC0L7QstC+0LPQvtCy0LvQvtC20LXQvdC40Y8gJyArXG4gICfRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0L3QtWFzY2lp0YHQuNC80LLQvtC70L7QstC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtCz0L7RgdC+0L7QsdGJ0LXQvdC40Y8g0YLQuNC/0YLQtdC60YHRgtCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPINC/0YDQvtGC0L7QutC+0LvQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLRiyAnICtcbiAgJ9GB0YLQsNGC0YPRgdGA0LDQt9Cx0L7RgNCw0L/QvtGH0YLQvtCy0L7Qs9C+0YHQvtC+0LHRidC10L3QuNGPICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC20YPRgNC90LDQuyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ID09PiBjbGFzc1xuICB2YXIgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgPVxuICAn0YDQtdC20LjQvNGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGB0YLQsNGC0YPRgdGC0YDQsNC90LfQsNC60YbQuNC40LfQsNC/0LjRgdC40LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INGD0YDQvtCy0LXQvdGM0LbRg9GA0L3QsNC70LDRgNC10LPQuNGB0YLRgNCw0YbQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINC60YDQuNC/0YLQvtCz0YDQsNGE0LjRjyA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19jcnlwdG9ncmFwaHkgPVxuICAn0YDQsNGB0L/QvtC70L7QttC10L3QuNC10YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INGA0LXQttC40LzQstC60LvRjtGH0LXQvdC40Y/RgdC10YDRgtC40YTQuNC60LDRgtC+0LLQutGA0LjQv9GC0L7Qs9GA0LDRhNC40Lgg0YDQtdC20LjQvNC/0YDQvtCy0LXRgNC60LjRgdC10YDRgtC40YTQuNC60LDRgtCw0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICcgK1xuICAn0YLQuNC/0YXRgNCw0L3QuNC70LjRidCw0YHQtdGA0YLQuNGE0LjQutCw0YLQvtCy0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFpJUCA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc196aXAgPVxuICAn0LrQvtC00LjRgNC+0LLQutCw0LjQvNC10L3RhNCw0LnQu9C+0LLQsnppcNGE0LDQudC70LUg0LzQtdGC0L7QtNGB0LbQsNGC0LjRj3ppcCDQvNC10YLQvtC00YjQuNGE0YDQvtCy0LDQvdC40Y96aXAg0YDQtdC20LjQvNCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y/Qv9GD0YLQtdC50YTQsNC50LvQvtCyemlwINGA0LXQttC40LzQvtCx0YDQsNCx0L7RgtC60LjQv9C+0LTQutCw0YLQsNC70L7Qs9C+0LJ6aXAgJyArXG4gICfRgNC10LbQuNC80YHQvtGF0YDQsNC90LXQvdC40Y/Qv9GD0YLQtdC5emlwINGD0YDQvtCy0LXQvdGM0YHQttCw0YLQuNGPemlwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtIFxuICAvLyDQkdC70L7QutC40YDQvtCy0LrQsCDQtNCw0L3QvdGL0YUsINCk0L7QvdC+0LLRi9C1INC30LDQtNCw0L3QuNGPLCDQkNCy0YLQvtC80LDRgtC40LfQuNGA0L7QstCw0L3QvdC+0LUg0YLQtdGB0YLQuNGA0L7QstCw0L3QuNC1LFxuICAvLyDQlNC+0YHRgtCw0LLQu9GP0LXQvNGL0LUg0YPQstC10LTQvtC80LvQtdC90LjRjywg0JLRgdGC0YDQvtC10L3QvdGL0LUg0L/QvtC60YPQv9C60LgsINCY0L3RgtC10YDQvdC10YIsINCg0LDQsdC+0YLQsCDRgSDQtNCy0L7QuNGH0L3Ri9C80Lgg0LTQsNC90L3Ri9C80LggPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfb3RoZXIgPVxuICAn0LfQstGD0LrQvtCy0L7QtdC+0L/QvtCy0LXRidC10L3QuNC1INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdGF0L7QtNCw0LrRgdGC0YDQvtC60LUg0L/QvtC30LjRhtC40Y/QstC/0L7RgtC+0LrQtSDQv9C+0YDRj9C00L7QutCx0LDQudGC0L7QsiDRgNC10LbQuNC80LHQu9C+0LrQuNGA0L7QstC60LjQtNCw0L3QvdGL0YUg0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhSAnICtcbiAgJ9GB0LXRgNCy0LjRgdCy0YHRgtGA0L7QtdC90L3Ri9GF0L/QvtC60YPQv9C+0Log0YHQvtGB0YLQvtGP0L3QuNC10YTQvtC90L7QstC+0LPQvtC30LDQtNCw0L3QuNGPINGC0LjQv9C/0L7QtNC/0LjRgdGH0LjQutCw0LTQvtGB0YLQsNCy0LvRj9C10LzRi9GF0YPQstC10LTQvtC80LvQtdC90LjQuSDRg9GA0L7QstC10L3RjNC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0LfQsNGJ0LjRidC10L3QvdC+0LPQvtGB0L7QtdC00LjQvdC10L3QuNGPZnRwICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGB0YXQtdC80LAg0LfQsNC/0YDQvtGB0LAgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcmVxdWVzdF9zY2hlbWEgPVxuICAn0L3QsNC/0YDQsNCy0LvQtdC90LjQtdC/0L7RgNGP0LTQutCw0YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C00L7Qv9C+0LvQvdC10L3QuNGP0L/QtdGA0LjQvtC00LDQvNC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C60L7QvdGC0YDQvtC70YzQvdC+0LnRgtC+0YfQutC40YHRhdC10LzRi9C30LDQv9GA0L7RgdCwINGC0LjQv9C+0LHRitC10LTQuNC90LXQvdC40Y/RgdGF0LXQvNGL0LfQsNC/0YDQvtGB0LAgJyArXG4gICfRgtC40L/Qv9Cw0YDQsNC80LXRgtGA0LDQtNC+0YHRgtGD0L/QvdC+0LnRgtCw0LHQu9C40YbRi9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCDRgtC40L/RgdC+0LXQtNC40L3QtdC90LjRj9GB0YXQtdC80YvQt9Cw0L/RgNC+0YHQsCAnO1xuXG4gIC8vIHY4INGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gLSDRgdCy0L7QudGB0YLQstCwINC+0LHRitC10LrRgtC+0LIg0LzQtdGC0LDQtNCw0L3QvdGL0YUgPT0+IGNsYXNzXG4gIHZhciB2OF9zeXN0ZW1fZW51bXNfcHJvcGVydGllc19vZl9tZXRhZGF0YV9vYmplY3RzID1cbiAgJ2h0dHDQvNC10YLQvtC0INCw0LLRgtC+0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LDQstGC0L7Qv9GA0LXRhNC40LrRgdC90L7QvNC10YDQsNC30LDQtNCw0YfQuCDQstCw0YDQuNCw0L3RgtCy0YHRgtGA0L7QtdC90L3QvtCz0L7Rj9C30YvQutCwINCy0LjQtNC40LXRgNCw0YDRhdC40Lgg0LLQuNC00YDQtdCz0LjRgdGC0YDQsNC90LDQutC+0L/Qu9C10L3QuNGPICcgK1xuICAn0LLQuNC00YLQsNCx0LvQuNGG0YvQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINC30LDQv9C40YHRjNC00LLQuNC20LXQvdC40LnQv9GA0LjQv9GA0L7QstC10LTQtdC90LjQuCDQt9Cw0L/QvtC70L3QtdC90LjQtdC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLQtdC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40LUgJyArXG4gICfQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0LDQt9GL0L/Qu9Cw0L3QsNCy0LjQtNC+0LLRgNCw0YHRh9C10YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdCx0YvRgdGC0YDQvtCz0L7QstGL0LHQvtGA0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvtCx0YnQtdCz0L7RgNC10LrQstC40LfQuNGC0LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQv9C+0LTRh9C40L3QtdC90LjRjyAnICtcbiAgJ9C40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10L/QvtC70L3QvtGC0LXQutGB0YLQvtCy0L7Qs9C+0L/QvtC40YHQutCwINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10YDQsNC30LTQtdC70Y/QtdC80YvRhdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdGA0LXQutCy0LjQt9C40YLQsCAnICtcbiAgJ9C90LDQt9C90LDRh9C10L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/Qv9GA0LjQu9C+0LbQtdC90LjRjyDQvdCw0LfQvdCw0YfQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC90LDQv9GA0LDQstC70LXQvdC40LXQv9C10YDQtdC00LDRh9C4INC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC10LTQvtC/0YDQtdC00LXQu9C10L3QvdGL0YXQtNCw0L3QvdGL0YUgJyArXG4gICfQvtC/0LXRgNCw0YLQuNCy0L3QvtC10L/RgNC+0LLQtdC00LXQvdC40LUg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LLQuNC00LDRgNCw0YHRh9C10YLQsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXQstC40LTQsNGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10LfQsNC00LDRh9C4ICcgK1xuICAn0L7RgdC90L7QstC90L7QtdC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC10L/Qu9Cw0L3QsNC+0LHQvNC10L3QsCDQvtGB0L3QvtCy0L3QvtC10L/RgNC10LTRgdGC0LDQstC70LXQvdC40LXRgdC/0YDQsNCy0L7Rh9C90LjQutCwINC+0YHQvdC+0LLQvdC+0LXQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtdGB0YfQtdGC0LAg0L/QtdGA0LXQvNC10YnQtdC90LjQtdCz0YDQsNC90LjRhtGL0L/RgNC40L/RgNC+0LLQtdC00LXQvdC40LggJyArXG4gICfQv9C10YDQuNC+0LTQuNGH0L3QvtGB0YLRjNC90L7QvNC10YDQsNCx0LjQt9C90LXRgdC/0YDQvtGG0LXRgdGB0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzQvdC+0LzQtdGA0LDQtNC+0LrRg9C80LXQvdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YDQsNGB0YfQtdGC0LAg0L/QtdGA0LjQvtC00LjRh9C90L7RgdGC0YzRgNC10LPQuNGB0YLRgNCw0YHQstC10LTQtdC90LjQuSAnICtcbiAgJ9C/0L7QstGC0L7RgNC90L7QtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LLQvtC30LLRgNCw0YnQsNC10LzRi9GF0LfQvdCw0YfQtdC90LjQuSDQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLRi9C50L/QvtC40YHQutC/0YDQuNCy0LLQvtC00LXQv9C+0YHRgtGA0L7QutC1INC/0YDQuNC90LDQtNC70LXQttC90L7RgdGC0YzQvtCx0YrQtdC60YLQsCDQv9GA0L7QstC10LTQtdC90LjQtSAnICtcbiAgJ9GA0LDQt9C00LXQu9C10L3QuNC10LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuNC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdC00LDQvdC90YvRhdC+0LHRidC10LPQvtGA0LXQutCy0LjQt9C40YLQsCDRgNCw0LfQtNC10LvQtdC90LjQtdGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40L7QsdGJ0LXQs9C+0YDQtdC60LLQuNC30LjRgtCwICcrXG4gICfRgNC10LbQuNC80LDQstGC0L7QvdGD0LzQtdGA0LDRhtC40LjQvtCx0YrQtdC60YLQvtCyINGA0LXQttC40LzQt9Cw0L/QuNGB0LjRgNC10LPQuNGB0YLRgNCwINGA0LXQttC40LzQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9C80L7QtNCw0LvRjNC90L7RgdGC0LggJyArXG4gICfRgNC10LbQuNC80LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC40L3RhdGA0L7QvdC90YvRhdCy0YvQt9C+0LLQvtCy0YDQsNGB0YjQuNGA0LXQvdC40LnQv9C70LDRgtGE0L7RgNC80YvQuNCy0L3QtdGI0L3QuNGF0LrQvtC80L/QvtC90LXQvdGCINGA0LXQttC40LzQv9C+0LLRgtC+0YDQvdC+0LPQvtC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP0YHQtdCw0L3RgdC+0LIgJyArXG4gICfRgNC10LbQuNC80L/QvtC70YPRh9C10L3QuNGP0LTQsNC90L3Ri9GF0LLRi9Cx0L7RgNCw0L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YDQtdC20LjQvNGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGA0LXQttC40LzRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuNC40L3RgtC10YDRhNC10LnRgdCwICcgK1xuICAn0YDQtdC20LjQvNGD0L/RgNCw0LLQu9C10L3QuNGP0LHQu9C+0LrQuNGA0L7QstC60L7QudC00LDQvdC90YvRhdC/0L7Rg9C80L7Qu9GH0LDQvdC40Y4g0YHQtdGA0LjQuNC60L7QtNC+0LLQv9C70LDQvdCw0LLQuNC00L7QstGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC6INGB0LXRgNC40LjQutC+0LTQvtCy0L/Qu9Cw0L3QsNGB0YfQtdGC0L7QsiAnICtcbiAgJ9GB0LXRgNC40LjQutC+0LTQvtCy0YHQv9GA0LDQstC+0YfQvdC40LrQsCDRgdC+0LfQtNCw0L3QuNC10L/RgNC40LLQstC+0LTQtSDRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LAg0YHQv9C+0YHQvtCx0L/QvtC40YHQutCw0YHRgtGA0L7QutC40L/RgNC40LLQstC+0LTQtdC/0L7RgdGC0YDQvtC60LUg0YHQv9C+0YHQvtCx0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyAnICtcbiAgJ9GC0LjQv9C00LDQvdC90YvRhdGC0LDQsdC70LjRhtGL0LLQvdC10YjQvdC10LPQvtC40YHRgtC+0YfQvdC40LrQsNC00LDQvdC90YvRhSDRgtC40L/QutC+0LTQsNC/0LvQsNC90LDQstC40LTQvtCy0YDQsNGB0YfQtdGC0LAg0YLQuNC/0LrQvtC00LDRgdC/0YDQsNCy0L7Rh9C90LjQutCwINGC0LjQv9C80LDQutC10YLQsCDRgtC40L/QvdC+0LzQtdGA0LDQsdC40LfQvdC10YHQv9GA0L7RhtC10YHRgdCwICcgK1xuICAn0YLQuNC/0L3QvtC80LXRgNCw0LTQvtC60YPQvNC10L3RgtCwINGC0LjQv9C90L7QvNC10YDQsNC30LDQtNCw0YfQuCDRgtC40L/RhNC+0YDQvNGLINGD0LTQsNC70LXQvdC40LXQtNCy0LjQttC10L3QuNC5ICc7XG5cbiAgLy8gdjgg0YHQuNGB0YLQtdC80L3Ri9C1INC/0LXRgNC10YfQuNGB0LvQtdC90LjRjyAtINGA0LDQt9C90YvQtSA9PT4gY2xhc3NcbiAgdmFyIHY4X3N5c3RlbV9lbnVtc19kaWZmZXJlbnRzID1cbiAgJ9Cy0LDQttC90L7RgdGC0YzQv9GA0L7QsdC70LXQvNGL0L/RgNC40LzQtdC90LXQvdC40Y/RgNCw0YHRiNC40YDQtdC90LjRj9C60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCDQstCw0YDQuNCw0L3RgtC40L3RgtC10YDRhNC10LnRgdCw0LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPINCy0LDRgNC40LDQvdGC0LzQsNGB0YjRgtCw0LHQsNGE0L7RgNC80LrQu9C40LXQvdGC0YHQutC+0LPQvtC/0YDQuNC70L7QttC10L3QuNGPICcgK1xuICAn0LLQsNGA0LjQsNC90YLQvtGB0L3QvtCy0L3QvtCz0L7RiNGA0LjRhNGC0LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0LLQsNGA0LjQsNC90YLRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L7Qv9C10YDQuNC+0LTQsCDQstCw0YDQuNCw0L3RgtGB0YLQsNC90LTQsNGA0YLQvdC+0LnQtNCw0YLRi9C90LDRh9Cw0LvQsCDQstC40LTQs9GA0LDQvdC40YbRiyDQstC40LTQutCw0YDRgtC40L3QutC4ICcgK1xuICAn0LLQuNC00L7RgtC+0LHRgNCw0LbQtdC90LjRj9C/0L7Qu9C90L7RgtC10LrRgdGC0L7QstC+0LPQvtC/0L7QuNGB0LrQsCDQstC40LTRgNCw0LzQutC4INCy0LjQtNGB0YDQsNCy0L3QtdC90LjRjyDQstC40LTRhtCy0LXRgtCwINCy0LjQtNGH0LjRgdC70L7QstC+0LPQvtC30L3QsNGH0LXQvdC40Y8g0LLQuNC00YjRgNC40YTRgtCwINC00L7Qv9GD0YHRgtC40LzQsNGP0LTQu9C40L3QsCDQtNC+0L/Rg9GB0YLQuNC80YvQudC30L3QsNC6ICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LVieXRlb3JkZXJtYXJrINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC10LzQtdGC0LDQtNCw0L3QvdGL0YXQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0LjRgdGC0L7Rh9C90LjQutGA0LDRgdGI0LjRgNC10L3QuNC50LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC60LvQsNCy0LjRiNCwINC60L7QtNCy0L7Qt9Cy0YDQsNGC0LDQtNC40LDQu9C+0LPQsCAnICtcbiAgJ9C60L7QtNC40YDQvtCy0LrQsHhiYXNlINC60L7QtNC40YDQvtCy0LrQsNGC0LXQutGB0YLQsCDQvdCw0L/RgNCw0LLQu9C10L3QuNC10L/QvtC40YHQutCwINC90LDQv9GA0LDQstC70LXQvdC40LXRgdC+0YDRgtC40YDQvtCy0LrQuCDQvtCx0L3QvtCy0LvQtdC90LjQtdC/0YDQtdC00L7Qv9GA0LXQtNC10LvQtdC90L3Ri9GF0LTQsNC90L3Ri9GFINC+0LHQvdC+0LLQu9C10L3QuNC10L/RgNC40LjQt9C80LXQvdC10L3QuNC40LTQsNC90L3Ri9GFICcgK1xuICAn0L7RgtC+0LHRgNCw0LbQtdC90LjQtdC/0LDQvdC10LvQuNGA0LDQt9C00LXQu9C+0LIg0L/RgNC+0LLQtdGA0LrQsNC30LDQv9C+0LvQvdC10L3QuNGPINGA0LXQttC40LzQtNC40LDQu9C+0LPQsNCy0L7Qv9GA0L7RgSDRgNC10LbQuNC80LfQsNC/0YPRgdC60LDQutC70LjQtdC90YLRgdC60L7Qs9C+0L/RgNC40LvQvtC20LXQvdC40Y8g0YDQtdC20LjQvNC+0LrRgNGD0LPQu9C10L3QuNGPINGA0LXQttC40LzQvtGC0LrRgNGL0YLQuNGP0YTQvtGA0LzQv9GA0LjQu9C+0LbQtdC90LjRjyAnICtcbiAgJ9GA0LXQttC40LzQv9C+0LvQvdC+0YLQtdC60YHRgtC+0LLQvtCz0L7Qv9C+0LjRgdC60LAg0YHQutC+0YDQvtGB0YLRjNC60LvQuNC10L3RgtGB0LrQvtCz0L7RgdC+0LXQtNC40L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40LXQstC90LXRiNC90LXQs9C+0LjRgdGC0L7Rh9C90LjQutCw0LTQsNC90L3Ri9GFINGB0L7RgdGC0L7Rj9C90LjQtdC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUgJyArXG4gICfRgdC/0L7RgdC+0LHQstGL0LHQvtGA0LDRgdC10YDRgtC40YTQuNC60LDRgtCwd2luZG93cyDRgdC/0L7RgdC+0LHQutC+0LTQuNGA0L7QstCw0L3QuNGP0YHRgtGA0L7QutC4INGB0YLQsNGC0YPRgdGB0L7QvtCx0YnQtdC90LjRjyDRgtC40L/QstC90LXRiNC90LXQudC60L7QvNC/0L7QvdC10L3RgtGLINGC0LjQv9C/0LvQsNGC0YTQvtGA0LzRiyDRgtC40L/Qv9C+0LLQtdC00LXQvdC40Y/QutC70LDQstC40YjQuGVudGVyICcgK1xuICAn0YLQuNC/0Y3Qu9C10LzQtdC90YLQsNC40L3RhNC+0YDQvNCw0YbQuNC40L7QstGL0L/QvtC70L3QtdC90LjQuNC+0LHQvdC+0LLQu9C10L3QuNGP0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC40LHQsNC30YvQtNCw0L3QvdGL0YUg0YPRgNC+0LLQtdC90YzQuNC30L7Qu9GP0YbQuNC40YLRgNCw0L3Qt9Cw0LrRhtC40Lkg0YXQtdGI0YTRg9C90LrRhtC40Y8g0YfQsNGB0YLQuNC00LDRgtGLJztcblxuICAvLyBjbGFzczog0LLRgdGC0YDQvtC10L3QvdGL0LUg0L3QsNCx0L7RgNGLINC30L3QsNGH0LXQvdC40LksINGB0LjRgdGC0LXQvNC90YvQtSDQv9C10YDQtdGH0LjRgdC70LXQvdC40Y8gKNGB0L7QtNC10YDQttCw0YIg0LTQvtGH0LXRgNC90LjQtSDQt9C90LDRh9C10L3QuNGPLCDQvtCx0YDQsNGJ0LXQvdC40Y8g0Log0LrQvtGC0L7RgNGL0Lwg0YfQtdGA0LXQtyDRgNCw0LfRi9C80LXQvdC+0LLQsNC90LjQtSlcbiAgdmFyIENMQVNTID1cbiAgdjhfc3lzdGVtX3NldHNfb2ZfdmFsdWVzICtcbiAgdjhfc3lzdGVtX2VudW1zX2ludGVyZmFjZSArXG4gIHY4X3N5c3RlbV9lbnVtc19vYmplY3RzX3Byb3BlcnRpZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZXhjaGFuZ2VfcGxhbnMgK1xuICB2OF9zeXN0ZW1fZW51bXNfdGFidWxhcl9kb2N1bWVudCArXG4gIHY4X3N5c3RlbV9lbnVtc19zaGVkdWxlciArXG4gIHY4X3N5c3RlbV9lbnVtc19mb3JtYXR0ZWRfZG9jdW1lbnQgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnkgK1xuICB2OF9zeXN0ZW1fZW51bXNfcmVwb3J0X2J1aWxkZXIgK1xuICB2OF9zeXN0ZW1fZW51bXNfZmlsZXMgK1xuICB2OF9zeXN0ZW1fZW51bXNfcXVlcnlfYnVpbGRlciArXG4gIHY4X3N5c3RlbV9lbnVtc19kYXRhX2FuYWx5c2lzICtcbiAgdjhfc3lzdGVtX2VudW1zX3htbF9qc29uX3hzX2RvbV94ZHRvX3dzICtcbiAgdjhfc3lzdGVtX2VudW1zX2RhdGFfY29tcG9zaXRpb25fc3lzdGVtICtcbiAgdjhfc3lzdGVtX2VudW1zX2VtYWlsICtcbiAgdjhfc3lzdGVtX2VudW1zX2xvZ2Jvb2sgK1xuICB2OF9zeXN0ZW1fZW51bXNfY3J5cHRvZ3JhcGh5ICtcbiAgdjhfc3lzdGVtX2VudW1zX3ppcCArXG4gIHY4X3N5c3RlbV9lbnVtc19vdGhlciArXG4gIHY4X3N5c3RlbV9lbnVtc19yZXF1ZXN0X3NjaGVtYSArXG4gIHY4X3N5c3RlbV9lbnVtc19wcm9wZXJ0aWVzX29mX21ldGFkYXRhX29iamVjdHMgK1xuICB2OF9zeXN0ZW1fZW51bXNfZGlmZmVyZW50cztcblxuICAvLyB2OCDQvtCx0YnQuNC1INC+0LHRitC10LrRgtGLICjRgyDQvtCx0YrQtdC60YLQvtCyINC10YHRgtGMINC60L7QvdGB0YLRgNGD0LrRgtC+0YAsINGN0LrQt9C10LzQv9C70Y/RgNGLINGB0L7Qt9C00LDRjtGC0YHRjyDQvNC10YLQvtC00L7QvCDQndCe0JLQq9CZKSA9PT4gdHlwZVxuICB2YXIgdjhfc2hhcmVkX29iamVjdCA9XG4gICdjb23QvtCx0YrQtdC60YIgZnRw0YHQvtC10LTQuNC90LXQvdC40LUgaHR0cNC30LDQv9GA0L7RgSBodHRw0YHQtdGA0LLQuNGB0L7RgtCy0LXRgiBodHRw0YHQvtC10LTQuNC90LXQvdC40LUgd3PQvtC/0YDQtdC00LXQu9C10L3QuNGPIHdz0L/RgNC+0LrRgdC4IHhiYXNlINCw0L3QsNC70LjQt9C00LDQvdC90YvRhSDQsNC90L3QvtGC0LDRhtC40Y94cyAnICtcbiAgJ9Cx0LvQvtC60LjRgNC+0LLQutCw0LTQsNC90L3Ri9GFINCx0YPRhNC10YDQtNCy0L7QuNGH0L3Ri9GF0LTQsNC90L3Ri9GFINCy0LrQu9GO0YfQtdC90LjQtXhzINCy0YvRgNCw0LbQtdC90LjQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINCz0LXQvdC10YDQsNGC0L7RgNGB0LvRg9GH0LDQudC90YvRhdGH0LjRgdC10Lsg0LPQtdC+0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAgJyArXG4gICfQs9C10L7Qs9GA0LDRhNC40YfQtdGB0LrQuNC10LrQvtC+0YDQtNC40L3QsNGC0Ysg0LPRgNCw0YTQuNGH0LXRgdC60LDRj9GB0YXQtdC80LAg0LPRgNGD0L/Qv9Cw0LzQvtC00LXQu9C4eHMg0LTQsNC90L3Ri9C10YDQsNGB0YjQuNGE0YDQvtCy0LrQuNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC00LLQvtC40YfQvdGL0LXQtNCw0L3QvdGL0LUg0LTQtdC90LTRgNC+0LPRgNCw0LzQvNCwICcgK1xuICAn0LTQuNCw0LPRgNCw0LzQvNCwINC00LjQsNCz0YDQsNC80LzQsNCz0LDQvdGC0LAg0LTQuNCw0LvQvtCz0LLRi9Cx0L7RgNCw0YTQsNC50LvQsCDQtNC40LDQu9C+0LPQstGL0LHQvtGA0LDRhtCy0LXRgtCwINC00LjQsNC70L7Qs9Cy0YvQsdC+0YDQsNGI0YDQuNGE0YLQsCDQtNC40LDQu9C+0LPRgNCw0YHQv9C40YHQsNC90LjRj9GA0LXQs9C70LDQvNC10L3RgtC90L7Qs9C+0LfQsNC00LDQvdC40Y8gJyArXG4gICfQtNC40LDQu9C+0LPRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGP0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+0L/QtdGA0LjQvtC00LAg0LTQuNCw0L/QsNC30L7QvSDQtNC+0LrRg9C80LXQvdGCZG9tINC00L7QutGD0LzQtdC90YJodG1sINC00L7QutGD0LzQtdC90YLQsNGG0LjRj3hzINC00L7RgdGC0LDQstC70Y/QtdC80L7QtdGD0LLQtdC00L7QvNC70LXQvdC40LUgJyArXG4gICfQt9Cw0L/QuNGB0Yxkb20g0LfQsNC/0LjRgdGMZmFzdGluZm9zZXQg0LfQsNC/0LjRgdGMaHRtbCDQt9Cw0L/QuNGB0Yxqc29uINC30LDQv9C40YHRjHhtbCDQt9Cw0L/QuNGB0Yx6aXDRhNCw0LnQu9CwINC30LDQv9C40YHRjNC00LDQvdC90YvRhSDQt9Cw0L/QuNGB0YzRgtC10LrRgdGC0LAg0LfQsNC/0LjRgdGM0YPQt9C70L7QsmRvbSAnICtcbiAgJ9C30LDQv9GA0L7RgSDQt9Cw0YnQuNGJ0LXQvdC90L7QtdGB0L7QtdC00LjQvdC10L3QuNC1b3BlbnNzbCDQt9C90LDRh9C10L3QuNGP0L/QvtC70LXQudGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQuNC30LLQu9C10YfQtdC90LjQtdGC0LXQutGB0YLQsCDQuNC80L/QvtGA0YJ4cyDQuNC90YLQtdGA0L3QtdGC0L/QvtGH0YLQsCAnICtcbiAgJ9C40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLQvtC10YHQvtC+0LHRidC10L3QuNC1INC40L3RgtC10YDQvdC10YLQv9C+0YfRgtC+0LLRi9C50L/RgNC+0YTQuNC70Ywg0LjQvdGC0LXRgNC90LXRgtC/0YDQvtC60YHQuCDQuNC90YLQtdGA0L3QtdGC0YHQvtC10LTQuNC90LXQvdC40LUg0LjQvdGE0L7RgNC80LDRhtC40Y/QtNC70Y/Qv9GA0LjQu9C+0LbQtdC90LjRj3hzICcgK1xuICAn0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQsNGC0YDQuNCx0YPRgtCweHMg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXRgdC+0LHRi9GC0LjRj9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQuNGB0YLQvtGH0L3QuNC60LTQvtGB0YLRg9C/0L3Ri9GF0L3QsNGB0YLRgNC+0LXQutC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFICcgK1xuICAn0LjRgtC10YDQsNGC0L7RgNGD0LfQu9C+0LJkb20g0LrQsNGA0YLQuNC90LrQsCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9C00LDRgtGLINC60LLQsNC70LjRhNC40LrQsNGC0L7RgNGL0LTQstC+0LjRh9C90YvRhdC00LDQvdC90YvRhSDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GB0YLRgNC+0LrQuCDQutCy0LDQu9C40YTQuNC60LDRgtC+0YDRi9GH0LjRgdC70LAgJyArXG4gICfQutC+0LzQv9C+0L3QvtCy0YnQuNC60LzQsNC60LXRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC80L/QvtC90L7QstGJ0LjQutC90LDRgdGC0YDQvtC10LrQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQutC+0L3RgdGC0YDRg9C60YLQvtGA0LzQsNC60LXRgtCw0L7RhNC+0YDQvNC70LXQvdC40Y/QutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C60L7QvdGB0YLRgNGD0LrRgtC+0YDQvdCw0YHRgtGA0L7QtdC60LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0LrQvtC90YHRgtGA0YPQutGC0L7RgNGE0L7RgNC80LDRgtC90L7QudGB0YLRgNC+0LrQuCDQu9C40L3QuNGPINC80LDQutC10YLQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvNCw0LrQtdGC0L7QsdC70LDRgdGC0LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C80LDQutC10YLQvtGE0L7RgNC80LvQtdC90LjRj9C60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC80LDRgdC60LB4cyDQvNC10L3QtdC00LbQtdGA0LrRgNC40L/RgtC+0LPRgNCw0YTQuNC4INC90LDQsdC+0YDRgdGF0LXQvHhtbCDQvdCw0YHRgtGA0L7QudC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSDQvdCw0YHRgtGA0L7QudC60LjRgdC10YDQuNCw0LvQuNC30LDRhtC40Lhqc29uICcgK1xuICAn0L7QsdGA0LDQsdC+0YLQutCw0LrQsNGA0YLQuNC90L7QuiDQvtCx0YDQsNCx0L7RgtC60LDRgNCw0YHRiNC40YTRgNC+0LLQutC40LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0L7QsdGF0L7QtNC00LXRgNC10LLQsGRvbSDQvtCx0YrRj9Cy0LvQtdC90LjQtdCw0YLRgNC40LHRg9GC0LB4cyDQvtCx0YrRj9Cy0LvQtdC90LjQtdC90L7RgtCw0YbQuNC4eHMgJyArXG4gICfQvtCx0YrRj9Cy0LvQtdC90LjQtdGN0LvQtdC80LXQvdGC0LB4cyDQvtC/0LjRgdCw0L3QuNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y/RgdC+0LHRi9GC0LjRj9C00L7RgdGC0YPQv9C20YPRgNC90LDQu9Cw0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRj9GB0L7QsdGL0YLQuNGP0L7RgtC60LDQt9Cy0LTQvtGB0YLRg9C/0LXQttGD0YDQvdCw0LvQsNGA0LXQs9C40YHRgtGA0LDRhtC40Lgg0L7Qv9C40YHQsNC90LjQtdC+0LHRgNCw0LHQvtGC0LrQuNGA0LDRgdGI0LjRhNGA0L7QstC60LjQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C+0L/QuNGB0LDQvdC40LXQv9C10YDQtdC00LDQstCw0LXQvNC+0LPQvtGE0LDQudC70LAg0L7Qv9C40YHQsNC90LjQtdGC0LjQv9C+0LIg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdCz0YDRg9C/0L/Ri9Cw0YLRgNC40LHRg9GC0L7QsnhzINC+0L/RgNC10LTQtdC70LXQvdC40LXQs9GA0YPQv9C/0YvQvNC+0LTQtdC70Lh4cyAnICtcbiAgJ9C+0L/RgNC10LTQtdC70LXQvdC40LXQvtCz0YDQsNC90LjRh9C10L3QuNGP0LjQtNC10L3RgtC40YfQvdC+0YHRgtC4eHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdC/0YDQvtGB0YLQvtCz0L7RgtC40L/QsHhzINC+0L/RgNC10LTQtdC70LXQvdC40LXRgdC+0YHRgtCw0LLQvdC+0LPQvtGC0LjQv9CweHMg0L7Qv9GA0LXQtNC10LvQtdC90LjQtdGC0LjQv9Cw0LTQvtC60YPQvNC10L3RgtCwZG9tICcgK1xuICAn0L7Qv9GA0LXQtNC10LvQtdC90LjRj3hwYXRoeHMg0L7RgtCx0L7RgNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0LDQutC10YLQvtGC0L7QsdGA0LDQttCw0LXQvNGL0YXQtNC+0LrRg9C80LXQvdGC0L7QsiDQv9Cw0YDQsNC80LXRgtGA0LLRi9Cx0L7RgNCwINC/0LDRgNCw0LzQtdGC0YDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhSAnICtcbiAgJ9C/0LDRgNCw0LzQtdGC0YDRi9C30LDQv9C40YHQuGpzb24g0L/QsNGA0LDQvNC10YLRgNGL0LfQsNC/0LjRgdC4eG1sINC/0LDRgNCw0LzQtdGC0YDRi9GH0YLQtdC90LjRj3htbCDQv9C10YDQtdC+0L/RgNC10LTQtdC70LXQvdC40LV4cyDQv9C70LDQvdC40YDQvtCy0YnQuNC6INC/0L7Qu9C10LDQvdCw0LvQuNC30LDQtNCw0L3QvdGL0YUgJyArXG4gICfQv9C+0LvQtdC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GFINC/0L7RgdGC0YDQvtC40YLQtdC70Yxkb20g0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC30LDQv9GA0L7RgdCwINC/0L7RgdGC0YDQvtC40YLQtdC70YzQvtGC0YfQtdGC0LAg0L/QvtGB0YLRgNC+0LjRgtC10LvRjNC+0YLRh9C10YLQsNCw0L3QsNC70LjQt9Cw0LTQsNC90L3Ri9GFICcgK1xuICAn0L/QvtGB0YLRgNC+0LjRgtC10LvRjNGB0YXQtdC8eG1sINC/0L7RgtC+0Log0L/QvtGC0L7QutCy0L/QsNC80Y/RgtC4INC/0L7Rh9GC0LAg0L/QvtGH0YLQvtCy0L7QtdGB0L7QvtCx0YnQtdC90LjQtSDQv9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1eHNsINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LXQutC60LDQvdC+0L3QuNGH0LXRgdC60L7QvNGDeG1sICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LLRi9Cy0L7QtNCw0YDQtdC30YPQu9GM0YLQsNGC0LDQutC+0LzQv9C+0L3QvtCy0LrQuNC00LDQvdC90YvRhdCy0LrQvtC70LvQtdC60YbQuNGO0LfQvdCw0YfQtdC90LjQuSDQv9GA0L7RhtC10YHRgdC+0YDQstGL0LLQvtC00LDRgNC10LfRg9C70YzRgtCw0YLQsNC60L7QvNC/0L7QvdC+0LLQutC40LTQsNC90L3Ri9GF0LLRgtCw0LHQu9C40YfQvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0L/RgNC+0YbQtdGB0YHQvtGA0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YDQsNC30YvQvNC10L3QvtCy0LDRgtC10LvRjNC/0YDQvtGB0YLRgNCw0L3RgdGC0LLQuNC80LXQvWRvbSDRgNCw0LzQutCwINGA0LDRgdC/0LjRgdCw0L3QuNC10YDQtdCz0LvQsNC80LXQvdGC0L3QvtCz0L7Qt9Cw0LTQsNC90LjRjyDRgNCw0YHRiNC40YDQtdC90L3QvtC10LjQvNGPeG1sICcgK1xuICAn0YDQtdC30YPQu9GM0YLQsNGC0YfRgtC10L3QuNGP0LTQsNC90L3Ri9GFINGB0LLQvtC00L3QsNGP0LTQuNCw0LPRgNCw0LzQvNCwINGB0LLRj9C30YzQv9Cw0YDQsNC80LXRgtGA0LDQstGL0LHQvtGA0LAg0YHQstGP0LfRjNC/0L7RgtC40L/RgyDRgdCy0Y/Qt9GM0L/QvtGC0LjQv9GD0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YHQtdGA0LjQsNC70LjQt9Cw0YLQvtGAeGR0byAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LB3aW5kb3dzINGB0LXRgNGC0LjRhNC40LrQsNGC0LrQu9C40LXQvdGC0LDRhNCw0LnQuyDRgdC10YDRgtC40YTQuNC60LDRgtC60YDQuNC/0YLQvtCz0YDQsNGE0LjQuCDRgdC10YDRgtC40YTQuNC60LDRgtGL0YPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjRhdGG0LXQvdGC0YDQvtCyd2luZG93cyAnICtcbiAgJ9GB0LXRgNGC0LjRhNC40LrQsNGC0YvRg9C00L7RgdGC0L7QstC10YDRj9GO0YnQuNGF0YbQtdC90YLRgNC+0LLRhNCw0LnQuyDRgdC20LDRgtC40LXQtNCw0L3QvdGL0YUg0YHQuNGB0YLQtdC80L3QsNGP0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHQvtC+0LHRidC10L3QuNC10L/QvtC70YzQt9C+0LLQsNGC0LXQu9GOINGB0L7Rh9C10YLQsNC90LjQtdC60LvQsNCy0LjRiCAnICtcbiAgJ9GB0YDQsNCy0L3QtdC90LjQtdC30L3QsNGH0LXQvdC40Lkg0YHRgtCw0L3QtNCw0YDRgtC90LDRj9C00LDRgtCw0L3QsNGH0LDQu9CwINGB0YLQsNC90LTQsNGA0YLQvdGL0LnQv9C10YDQuNC+0LQg0YHRhdC10LzQsHhtbCDRgdGF0LXQvNCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUg0YLQsNCx0LvQuNGH0L3Ri9C50LTQvtC60YPQvNC10L3RgiAnICtcbiAgJ9GC0LXQutGB0YLQvtCy0YvQudC00L7QutGD0LzQtdC90YIg0YLQtdGB0YLQuNGA0YPQtdC80L7QtdC/0YDQuNC70L7QttC10L3QuNC1INGC0LjQv9C00LDQvdC90YvRhXhtbCDRg9C90LjQutCw0LvRjNC90YvQudC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGE0LDQsdGA0LjQutCweGR0byDRhNCw0LnQuyDRhNCw0LnQu9C+0LLRi9C50L/QvtGC0L7QuiAnICtcbiAgJ9GE0LDRgdC10YLQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QstC00YDQvtCx0L3QvtC50YfQsNGB0YLQuHhzINGE0LDRgdC10YLQvNCw0LrRgdC40LzQsNC70YzQvdC+0LPQvtCy0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMgJyArXG4gICfRhNCw0YHQtdGC0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LDQutGB0LjQvNCw0LvRjNC90L7QudC00LvQuNC90Yt4cyDRhNCw0YHQtdGC0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+0LLQutC70Y7Rh9Cw0Y7RidC10LPQvtC30L3QsNGH0LXQvdC40Y94cyAnICtcbiAgJ9GE0LDRgdC10YLQvNC40L3QuNC80LDQu9GM0L3QvtCz0L7QuNGB0LrQu9GO0YfQsNGO0YnQtdCz0L7Qt9C90LDRh9C10L3QuNGPeHMg0YTQsNGB0LXRgtC80LjQvdC40LzQsNC70YzQvdC+0LnQtNC70LjQvdGLeHMg0YTQsNGB0LXRgtC+0LHRgNCw0LfRhtCweHMg0YTQsNGB0LXRgtC+0LHRidC10LPQvtC60L7Qu9C40YfQtdGB0YLQstCw0YDQsNC30YDRj9C00L7QsnhzICcgK1xuICAn0YTQsNGB0LXRgtC/0LXRgNC10YfQuNGB0LvQtdC90LjRj3hzINGE0LDRgdC10YLQv9GA0L7QsdC10LvRjNC90YvRhdGB0LjQvNCy0L7Qu9C+0LJ4cyDRhNC40LvRjNGC0YDRg9C30LvQvtCyZG9tINGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90LDRj9GB0YLRgNC+0LrQsCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdGL0LnQtNC+0LrRg9C80LXQvdGCICcgK1xuICAn0YTRgNCw0LPQvNC10L3RgnhzINGF0LXRiNC40YDQvtCy0LDQvdC40LXQtNCw0L3QvdGL0YUg0YXRgNCw0L3QuNC70LjRidC10LfQvdCw0YfQtdC90LjRjyDRhtCy0LXRgiDRh9GC0LXQvdC40LVmYXN0aW5mb3NldCDRh9GC0LXQvdC40LVodG1sINGH0YLQtdC90LjQtWpzb24g0YfRgtC10L3QuNC1eG1sINGH0YLQtdC90LjQtXppcNGE0LDQudC70LAgJyArXG4gICfRh9GC0LXQvdC40LXQtNCw0L3QvdGL0YUg0YfRgtC10L3QuNC10YLQtdC60YHRgtCwINGH0YLQtdC90LjQtdGD0LfQu9C+0LJkb20g0YjRgNC40YTRgiDRjdC70LXQvNC10L3RgtGA0LXQt9GD0LvRjNGC0LDRgtCw0LrQvtC80L/QvtC90L7QstC60LjQtNCw0L3QvdGL0YUgJztcblxuICAvLyB2OCDRg9C90LjQstC10YDRgdCw0LvRjNC90YvQtSDQutC+0LvQu9C10LrRhtC40Lgg0LfQvdCw0YfQtdC90LjQuSA9PT4gdHlwZVxuICB2YXIgdjhfdW5pdmVyc2FsX2NvbGxlY3Rpb24gPVxuICAnY29tc2FmZWFycmF5INC00LXRgNC10LLQvtC30L3QsNGH0LXQvdC40Lkg0LzQsNGB0YHQuNCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgdC/0LjRgdC+0LrQt9C90LDRh9C10L3QuNC5INGB0YLRgNGD0LrRgtGD0YDQsCDRgtCw0LHQu9C40YbQsNC30L3QsNGH0LXQvdC40Lkg0YTQuNC60YHQuNGA0L7QstCw0L3QvdCw0Y/RgdGC0YDRg9C60YLRg9GA0LAgJyArXG4gICfRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQudC80LDRgdGB0LjQsiAnO1xuXG4gIC8vIHR5cGUgOiDQstGB0YLRgNC+0LXQvdC90YvQtSDRgtC40L/Ri1xuICB2YXIgVFlQRSA9XG4gIHY4X3NoYXJlZF9vYmplY3QgK1xuICB2OF91bml2ZXJzYWxfY29sbGVjdGlvbjtcblxuICAvLyBsaXRlcmFsIDog0L/RgNC40LzQuNGC0LjQstC90YvQtSDRgtC40L/Ri1xuICB2YXIgTElURVJBTCA9ICdudWxsINC40YHRgtC40L3QsCDQu9C+0LbRjCDQvdC10L7Qv9GA0LXQtNC10LvQtdC90L4nO1xuICBcbiAgLy8gbnVtYmVyIDog0YfQuNGB0LvQsFxuICB2YXIgTlVNQkVSUyA9IGhsanMuaW5oZXJpdChobGpzLk5VTUJFUl9NT0RFKTtcblxuICAvLyBzdHJpbmcgOiDRgdGC0YDQvtC60LhcbiAgdmFyIFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wifFxcXFx8JywgZW5kOiAnXCJ8JCcsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dXG4gIH07XG5cbiAgLy8gbnVtYmVyIDog0LTQsNGC0YtcbiAgdmFyIERBVEUgPSB7XG4gICAgYmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wiLCBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcZHs0fShbXFxcXC5cXFxcXFxcXC86LV0/XFxcXGR7Mn0pezAsNX0nXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBcbiAgLy8gY29tbWVudCA6INC60L7QvNC80LXQvdGC0LDRgNC40LhcbiAgdmFyIENPTU1FTlRTID0gaGxqcy5pbmhlcml0KGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSk7XG4gIFxuICAvLyBtZXRhIDog0LjQvdGB0YLRgNGD0LrRhtC40Lgg0L/RgNC10L/RgNC+0YbQtdGB0YHQvtGA0LAsINC00LjRgNC10LrRgtC40LLRiyDQutC+0LzQv9C40LvRj9GG0LjQuFxuICB2YXIgTUVUQSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGJlZ2luOiAnI3wmJywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogS0VZV09SRCArIE1FVEFLRVlXT1JEfSxcbiAgICBjb250YWluczogW1xuICAgICAgQ09NTUVOVFNcbiAgICBdXG4gIH07XG4gIFxuICAvLyBzeW1ib2wgOiDQvNC10YLQutCwIGdvdG9cbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnficsIGVuZDogJzt8OicsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgfTsgIFxuICBcbiAgLy8gZnVuY3Rpb24gOiDQvtCx0YrRj9Cy0LvQtdC90LjQtSDQv9GA0L7RhtC10LTRg9GAINC4INGE0YPQvdC60YbQuNC5XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgbGV4ZW1lczogVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAn0L/RgNC+0YbQtdC00YPRgNCwfNGE0YPQvdC60YbQuNGPJywgZW5kOiAnXFxcXCknLCBrZXl3b3JkczogJ9C/0YDQvtGG0LXQtNGD0YDQsCDRhNGD0L3QutGG0LjRjyd9LFxuICAgICAge2JlZ2luOiAn0LrQvtC90LXRhtC/0YDQvtGG0LXQtNGD0YDRi3zQutC+0L3QtdGG0YTRg9C90LrRhtC40LgnLCBrZXl3b3JkczogJ9C60L7QvdC10YbQv9GA0L7RhtC10LTRg9GA0Ysg0LrQvtC90LXRhtGE0YPQvdC60YbQuNC4J31cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGVuZHNQYXJlbnQgOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBsZXhlbWVzOiBVTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICAgICAgYmVnaW46IFVOREVSU0NPUkVfSURFTlRfUkUsIGVuZDogJywnLCBleGNsdWRlRW5kOiB0cnVlLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICAgIGtleXdvcmQ6ICfQt9C90LDRhycsXG4gICAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBOVU1CRVJTLFxuICAgICAgICAgICAgICBTVFJJTkdTLFxuICAgICAgICAgICAgICBEQVRFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBDT01NRU5UU1xuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBVTkRFUlNDT1JFX0lERU5UX1JFfSlcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IFVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6IEtFWVdPUkQsXG4gICAgICBidWlsdF9pbjogQlVJTFRJTixcbiAgICAgIGNsYXNzOiBDTEFTUyxcbiAgICAgIHR5cGU6IFRZUEUsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgTUVUQSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgQ09NTUVOVFMsXG4gICAgICBTWU1CT0wsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIERBVEVcbiAgICBdICBcbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICB2YXIgcmVnZXhlcyA9IHtcbiAgICAgICAgcnVsZURlY2xhcmF0aW9uOiBcIl5bYS16QS1aXVthLXpBLVowLTktXSpcIixcbiAgICAgICAgdW5leHBlY3RlZENoYXJzOiBcIlshQCMkXiYnLD8rfmB8Ol1cIlxuICAgIH07XG5cbiAgICB2YXIga2V5d29yZHMgPSBbXG4gICAgICAgIFwiQUxQSEFcIixcbiAgICAgICAgXCJCSVRcIixcbiAgICAgICAgXCJDSEFSXCIsXG4gICAgICAgIFwiQ1JcIixcbiAgICAgICAgXCJDUkxGXCIsXG4gICAgICAgIFwiQ1RMXCIsXG4gICAgICAgIFwiRElHSVRcIixcbiAgICAgICAgXCJEUVVPVEVcIixcbiAgICAgICAgXCJIRVhESUdcIixcbiAgICAgICAgXCJIVEFCXCIsXG4gICAgICAgIFwiTEZcIixcbiAgICAgICAgXCJMV1NQXCIsXG4gICAgICAgIFwiT0NURVRcIixcbiAgICAgICAgXCJTUFwiLFxuICAgICAgICBcIlZDSEFSXCIsXG4gICAgICAgIFwiV1NQXCJcbiAgICBdO1xuXG4gICAgdmFyIGNvbW1lbnRNb2RlID0gaGxqcy5DT01NRU5UKFwiO1wiLCBcIiRcIik7XG5cbiAgICB2YXIgdGVybWluYWxCaW5hcnlNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWJbMC0xXSsoLVswLTFdK3woXFwuWzAtMV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbERlY2ltYWxNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwic3ltYm9sXCIsXG4gICAgICAgIGJlZ2luOiAvJWRbMC05XSsoLVswLTldK3woXFwuWzAtOV0rKSspezAsMX0vXG4gICAgfTtcblxuICAgIHZhciB0ZXJtaW5hbEhleGFkZWNpbWFsTW9kZSA9IHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInN5bWJvbFwiLFxuICAgICAgICBiZWdpbjogLyV4WzAtOUEtRl0rKC1bMC05QS1GXSt8KFxcLlswLTlBLUZdKykrKXswLDF9LyxcbiAgICB9O1xuXG4gICAgdmFyIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJzeW1ib2xcIixcbiAgICAgICAgYmVnaW46IC8lW3NpXS9cbiAgICB9O1xuXG4gICAgdmFyIHJ1bGVEZWNsYXJhdGlvbk1vZGUgPSB7XG4gICAgICAgIGJlZ2luOiByZWdleGVzLnJ1bGVEZWNsYXJhdGlvbiArICdcXFxccyo9JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogLz0vLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbe2NsYXNzTmFtZTogXCJhdHRyaWJ1dGVcIiwgYmVnaW46IHJlZ2V4ZXMucnVsZURlY2xhcmF0aW9ufV1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlsbGVnYWw6IHJlZ2V4ZXMudW5leHBlY3RlZENoYXJzLFxuICAgICAga2V5d29yZHM6IGtleXdvcmRzLmpvaW4oXCIgXCIpLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBydWxlRGVjbGFyYXRpb25Nb2RlLFxuICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsQmluYXJ5TW9kZSxcbiAgICAgICAgICB0ZXJtaW5hbERlY2ltYWxNb2RlLFxuICAgICAgICAgIHRlcm1pbmFsSGV4YWRlY2ltYWxNb2RlLFxuICAgICAgICAgIGNhc2VTZW5zaXRpdml0eUluZGljYXRvck1vZGUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIElQXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyBPdGhlciBudW1iZXJzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZCtcXFxcYicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIFJlcXVlc3RzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCIoR0VUfFBPU1R8SEVBRHxQVVR8REVMRVRFfENPTk5FQ1R8T1BUSU9OU3xQQVRDSHxUUkFDRSknLCBlbmQ6ICdcIicsXG4gICAgICAgIGtleXdvcmRzOiAnR0VUIFBPU1QgSEVBRCBQVVQgREVMRVRFIENPTk5FQ1QgT1BUSU9OUyBQQVRDSCBUUkFDRScsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBEYXRlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogL1xcWy8sIGVuZDogL1xcXS8sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH0sXG4gICAgICAvLyBTdHJpbmdzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJztcbiAgdmFyIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkUgPSAnKFsqXXxbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJztcblxuICB2YXIgQVMzX1JFU1RfQVJHX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVzdF9hcmcnLFxuICAgIGJlZ2luOiAnWy5dezN9JywgZW5kOiBJREVOVF9SRSxcbiAgICByZWxldmFuY2U6IDEwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2FzJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6ICdhcyBicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgZGVsZXRlIGRvIGR5bmFtaWMgZWFjaCAnICtcbiAgICAgICAgJ2Vsc2UgZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZvciBmdW5jdGlvbiBnZXQgaWYgaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luc3RhbmNlb2YgaW50ZXJmYWNlIGludGVybmFsIGlzIG5hbWVzcGFjZSBuYXRpdmUgbmV3IG92ZXJyaWRlIHBhY2thZ2UgcHJpdmF0ZSAnICtcbiAgICAgICAgJ3Byb3RlY3RlZCBwdWJsaWMgcmV0dXJuIHNldCBzdGF0aWMgc3VwZXIgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1c2UgdmFyIHZvaWQgJyArXG4gICAgICAgICd3aGlsZSB3aXRoJyxcbiAgICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwYWNrYWdlJywgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ltcG9ydCBpbmNsdWRlJywgZW5kOiAnOycsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbXBvcnQgaW5jbHVkZSd9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbicsIGVuZDogJ1t7O10nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBBUzNfUkVTVF9BUkdfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc6XFxcXHMqJyArIElERU5UX0ZVTkNfUkVUVVJOX1RZUEVfUkVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLk1FVEhPRF9HVUFSRFxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLy8gV2UgdHJ5IHRvIHN1cHBvcnQgZnVsbCBBZGEyMDEyXG4vL1xuLy8gV2UgaGlnaGxpZ2h0IGFsbCBhcHBlYXJhbmNlcyBvZiB0eXBlcywga2V5d29yZHMsIGxpdGVyYWxzIChzdHJpbmcsIGNoYXIsIG51bWJlciwgYm9vbClcbi8vIGFuZCB0aXRsZXMgKHVzZXIgZGVmaW5lZCBmdW5jdGlvbi9wcm9jZWR1cmUvcGFja2FnZSlcbi8vIENTUyBjbGFzc2VzIGFyZSBzZXQgYWNjb3JkaW5nbHlcbi8vXG4vLyBMYW5ndWFnZXMgY2F1c2luZyBwcm9ibGVtcyBmb3IgbGFuZ3VhZ2UgZGV0ZWN0aW9uOlxuLy8geG1sIChicm9rZW4gYnkgRm9vIDogQmFyIHR5cGUpLCBlbG0gKGJyb2tlbiBieSBGb28gOiBCYXIgdHlwZSksIHZic2NyaXB0LWh0bWwgKGJyb2tlbiBieSBib2R5IGtleXdvcmQpXG4vLyBzcWwgKGFkYSBkZWZhdWx0LnR4dCBoYXMgYSBsb3Qgb2Ygc3FsIGtleXdvcmRzKVxuXG5mdW5jdGlvbihobGpzKSB7XG4gICAgLy8gUmVndWxhciBleHByZXNzaW9uIGZvciBBZGEgbnVtZXJpYyBsaXRlcmFscy5cbiAgICAvLyBzdG9sZW4gZm9ybSB0aGUgVkhETCBoaWdobGlnaHRlclxuXG4gICAgLy8gRGVjaW1hbCBsaXRlcmFsOlxuICAgIHZhciBJTlRFR0VSX1JFID0gJ1xcXFxkKF98XFxcXGQpKic7XG4gICAgdmFyIEVYUE9ORU5UX1JFID0gJ1tlRV1bLStdPycgKyBJTlRFR0VSX1JFO1xuICAgIHZhciBERUNJTUFMX0xJVEVSQUxfUkUgPSBJTlRFR0VSX1JFICsgJyhcXFxcLicgKyBJTlRFR0VSX1JFICsgJyk/JyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIC8vIEJhc2VkIGxpdGVyYWw6XG4gICAgdmFyIEJBU0VEX0lOVEVHRVJfUkUgPSAnXFxcXHcrJztcbiAgICB2YXIgQkFTRURfTElURVJBTF9SRSA9IElOVEVHRVJfUkUgKyAnIycgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyhcXFxcLicgKyBCQVNFRF9JTlRFR0VSX1JFICsgJyk/JyArICcjJyArICcoJyArIEVYUE9ORU5UX1JFICsgJyk/JztcblxuICAgIHZhciBOVU1CRVJfUkUgPSAnXFxcXGIoJyArIEJBU0VEX0xJVEVSQUxfUkUgKyAnfCcgKyBERUNJTUFMX0xJVEVSQUxfUkUgKyAnKSc7XG5cbiAgICAvLyBJZGVudGlmaWVyIHJlZ2V4XG4gICAgdmFyIElEX1JFR0VYID0gJ1tBLVphLXpdKF8/W0EtWmEtejAtOS5dKSonO1xuXG4gICAgLy8gYmFkIGNoYXJzLCBvbmx5IGFsbG93ZWQgaW4gbGl0ZXJhbHNcbiAgICB2YXIgQkFEX0NIQVJTID0gJ1tde30lI1xcJ1xcXCInXG5cbiAgICAvLyBBZGEgZG9lc24ndCBoYXZlIGJsb2NrIGNvbW1lbnRzLCBvbmx5IGxpbmUgY29tbWVudHNcbiAgICB2YXIgQ09NTUVOVFMgPSBobGpzLkNPTU1FTlQoJy0tJywgJyQnKTtcblxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9ybVxuICAgIC8vIEZvbyA6IEJhciA6PSBCYXo7XG4gICAgLy8gd2hlcmUgb25seSBCYXIgd2lsbCBiZSBoaWdobGlnaHRlZFxuICAgIHZhciBWQVJfREVDTFMgPSB7XG4gICAgICAgIC8vIFRPRE86IFRoZXNlIHNwYWNlcyBhcmUgbm90IHJlcXVpcmVkIGJ5IHRoZSBBZGEgc3ludGF4XG4gICAgICAgIC8vIGhvd2V2ZXIsIEkgaGF2ZSB5ZXQgdG8gc2VlIGhhbmR3cml0dGVuIEFkYSBjb2RlIHdoZXJlXG4gICAgICAgIC8vIHNvbWVvbmUgZG9lcyBub3QgcHV0IHNwYWNlcyBhcm91bmQgOlxuICAgICAgICBiZWdpbjogJ1xcXFxzKzpcXFxccysnLCBlbmQ6ICdcXFxccyooOj18O3xcXFxcKXw9PnwkKScsXG4gICAgICAgIC8vIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAvLyByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIHdvcmthcm91bmQgdG8gYXZvaWQgaGlnaGxpZ2h0aW5nXG4gICAgICAgICAgICAgICAgLy8gbmFtZWQgbG9vcHMgYW5kIGRlY2xhcmUgYmxvY2tzXG4gICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2xvb3AgZm9yIGRlY2xhcmUgb3RoZXJzJyxcbiAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJseSBoaWdobGlnaHQgYWxsIG1vZGlmaWVyc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdub3QgbnVsbCBjb25zdGFudCBhY2Nlc3MgZnVuY3Rpb24gcHJvY2VkdXJlIGluIG91dCBhbGlhc2VkIGV4Y2VwdGlvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46IElEX1JFR0VYLFxuICAgICAgICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgICAgICdhYm9ydCBlbHNlIG5ldyByZXR1cm4gYWJzIGVsc2lmIG5vdCByZXZlcnNlIGFic3RyYWN0IGVuZCAnICtcbiAgICAgICAgICAgICAgICAnYWNjZXB0IGVudHJ5IHNlbGVjdCBhY2Nlc3MgZXhjZXB0aW9uIG9mIHNlcGFyYXRlIGFsaWFzZWQgZXhpdCBvciBzb21lICcgK1xuICAgICAgICAgICAgICAgICdhbGwgb3RoZXJzIHN1YnR5cGUgYW5kIGZvciBvdXQgc3luY2hyb25pemVkIGFycmF5IGZ1bmN0aW9uIG92ZXJyaWRpbmcgJyArXG4gICAgICAgICAgICAgICAgJ2F0IHRhZ2dlZCBnZW5lcmljIHBhY2thZ2UgdGFzayBiZWdpbiBnb3RvIHByYWdtYSB0ZXJtaW5hdGUgJyArXG4gICAgICAgICAgICAgICAgJ2JvZHkgcHJpdmF0ZSB0aGVuIGlmIHByb2NlZHVyZSB0eXBlIGNhc2UgaW4gcHJvdGVjdGVkIGNvbnN0YW50IGludGVyZmFjZSAnICtcbiAgICAgICAgICAgICAgICAnaXMgcmFpc2UgdXNlIGRlY2xhcmUgcmFuZ2UgZGVsYXkgbGltaXRlZCByZWNvcmQgd2hlbiBkZWx0YSBsb29wIHJlbSB3aGlsZSAnICtcbiAgICAgICAgICAgICAgICAnZGlnaXRzIHJlbmFtZXMgd2l0aCBkbyBtb2QgcmVxdWV1ZSB4b3InLFxuICAgICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICAgICAnVHJ1ZSBGYWxzZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBDT01NRU5UUyxcbiAgICAgICAgICAgIC8vIHN0cmluZ3MgXCJmb29iYXJcIlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tiZWdpbjogL1wiXCIvLCByZWxldmFuY2U6IDB9XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgJydcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBjaGFyYWN0ZXIgbGl0ZXJhbHMgYWx3YXlzIGNvbnRhaW4gb25lIGNoYXJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvJy4nL1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBudW1iZXIgbGl0ZXJhbHNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBOVU1CRVJfUkUsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIidcIiArIElEX1JFR0VYLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBwYWNrYWdlIGRlZmluaXRpb24sIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/KFxcXFxicHJpdmF0ZVxcXFxzKyk/XFxcXGJwYWNrYWdlXFxcXHMrKFxcXFxiYm9keVxcXFxzKyk/JywgZW5kOiAnKGlzfCQpJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ3BhY2thZ2UgYm9keScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uL3Byb2NlZHVyZSBkZWNsYXJhdGlvbi9kZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgLy8gbWF5YmUgaW5zaWRlIGdlbmVyaWNcbiAgICAgICAgICAgICAgICBiZWdpbjogJyhcXFxcYih3aXRofG92ZXJyaWRpbmcpXFxcXHMrKT9cXFxcYihmdW5jdGlvbnxwcm9jZWR1cmUpXFxcXHMrJywgZW5kOiAnKFxcXFxiaXN8XFxcXGJ3aXRofFxcXFxicmVuYW1lc3xcXFxcKVxcXFxzKjspJyxcbiAgICAgICAgICAgICAgICBrZXl3b3JkczogJ292ZXJyaWRpbmcgZnVuY3Rpb24gcHJvY2VkdXJlIHdpdGggaXMgcmVuYW1lcyByZXR1cm4nLFxuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmUtbWF0Y2ggdGhlICdmdW5jdGlvbicga2V5d29yZCwgc28gdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSB0aXRsZSBtb2RlIGJlbG93IG1hdGNoZXMgb25seSBleGFjdGx5IG9uY2VcbiAgICAgICAgICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250YWluczpcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIENPTU1FTlRTLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmdW5jdGlvbi9wcm9jZWR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnKFxcXFxid2l0aFxcXFxzKyk/XFxcXGIoZnVuY3Rpb258cHJvY2VkdXJlKVxcXFxzKycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6ICcoXFxcXCh8XFxcXHMrfCQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsOiBCQURfQ0hBUlNcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnXG4gICAgICAgICAgICAgICAgICAgIC8vIC8vIHBhcmFtZXRlciB0eXBlc1xuICAgICAgICAgICAgICAgICAgICBWQVJfREVDTFMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGJyZXR1cm5cXFxccysnLCBlbmQ6ICcoXFxcXHMrfDt8JCknLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6ICdyZXR1cm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBkb25lIHdpdGggZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWxsZWdhbDogQkFEX0NIQVJTXG5cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG5ldyB0eXBlIGRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIC8vIG1heWJlIGluc2lkZSBnZW5lcmljXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYihzdWIpP3R5cGVcXFxccysnLCBlbmQ6ICdcXFxccysnLFxuICAgICAgICAgICAgICAgIGtleXdvcmRzOiAndHlwZScsXG4gICAgICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlsbGVnYWw6IEJBRF9DSEFSU1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIFZBUl9ERUNMUyxcblxuICAgICAgICAgICAgLy8gbm8gbWFya3VwXG4gICAgICAgICAgICAvLyByZWxldmFuY2UgYm9vc3RlcnMgZm9yIHNtYWxsIHNuaXBwZXRzXG4gICAgICAgICAgICAvLyB7YmVnaW46ICdcXFxccyo9PlxcXFxzKid9LFxuICAgICAgICAgICAgLy8ge2JlZ2luOiAnXFxcXHMqOj1cXFxccyonfSxcbiAgICAgICAgICAgIC8vIHtiZWdpbjogJ1xcXFxzKzo9XFxcXHMrJ30sXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5VTUJFUiA9IHtjbGFzc05hbWU6ICdudW1iZXInLCBiZWdpbjogJ1tcXFxcJCVdXFxcXGQrJ307XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydhcGFjaGVjb25mJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtjbGFzc05hbWU6ICdzZWN0aW9uJywgYmVnaW46ICc8Lz8nLCBlbmQ6ICc+J30sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgLy8ga2V5d29yZHMgYXJlbuKAmXQgbmVlZGVkIGZvciBoaWdobGlnaHRpbmcgcGVyIHNlLCB0aGV5IG9ubHkgYm9vc3QgcmVsZXZhbmNlXG4gICAgICAgIC8vIGZvciBhIHZlcnkgZ2VuZXJhbGx5IGRlZmluZWQgbW9kZSAoc3RhcnRzIHdpdGggYSB3b3JkLCBlbmRzIHdpdGggbGluZS1lbmRcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBub21hcmt1cDpcbiAgICAgICAgICAgICdvcmRlciBkZW55IGFsbG93IHNldGVudiByZXdyaXRlcnVsZSByZXdyaXRlZW5naW5lIHJld3JpdGVjb25kIGRvY3VtZW50cm9vdCAnICtcbiAgICAgICAgICAgICdzZXRoYW5kbGVyIGVycm9yZG9jdW1lbnQgbG9hZG1vZHVsZSBvcHRpb25zIGhlYWRlciBsaXN0ZW4gc2VydmVycm9vdCAnICtcbiAgICAgICAgICAgICdzZXJ2ZXJuYW1lJ1xuICAgICAgICB9LFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC8kLyxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICAgIGxpdGVyYWw6ICdvbiBvZmYgYWxsJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHNcXFxcWycsIGVuZDogJ1xcXFxdJCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdbXFxcXCQlXVxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgICAgICBjb250YWluczogWydzZWxmJywgTlVNQkVSXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC9cXFMvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiAnJ30pO1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogWydzZWxmJywgaGxqcy5DX05VTUJFUl9NT0RFLCBTVFJJTkddXG4gIH07XG4gIHZhciBDT01NRU5UX01PREVfMSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICB2YXIgQ09NTUVOVF9NT0RFXzIgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwoXFxcXConLFxuICAgICdcXFxcKlxcXFwpJyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJywgQ09NTUVOVF9NT0RFXzFdIC8vYWxsb3cgbmVzdGluZ1xuICAgIH1cbiAgKTtcbiAgdmFyIENPTU1FTlRTID0gW1xuICAgIENPTU1FTlRfTU9ERV8xLFxuICAgIENPTU1FTlRfTU9ERV8yLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnb3Nhc2NyaXB0J10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdhYm91dCBhYm92ZSBhZnRlciBhZ2FpbnN0IGFuZCBhcm91bmQgYXMgYXQgYmFjayBiZWZvcmUgYmVnaW5uaW5nICcgK1xuICAgICAgICAnYmVoaW5kIGJlbG93IGJlbmVhdGggYmVzaWRlIGJldHdlZW4gYnV0IGJ5IGNvbnNpZGVyaW5nICcgK1xuICAgICAgICAnY29udGFpbiBjb250YWlucyBjb250aW51ZSBjb3B5IGRpdiBkb2VzIGVpZ2h0aCBlbHNlIGVuZCBlcXVhbCAnICtcbiAgICAgICAgJ2VxdWFscyBlcnJvciBldmVyeSBleGl0IGZpZnRoIGZpcnN0IGZvciBmb3VydGggZnJvbSBmcm9udCAnICtcbiAgICAgICAgJ2dldCBnaXZlbiBnbG9iYWwgaWYgaWdub3JpbmcgaW4gaW50byBpcyBpdCBpdHMgbGFzdCBsb2NhbCBtZSAnICtcbiAgICAgICAgJ21pZGRsZSBtb2QgbXkgbmludGggbm90IG9mIG9uIG9udG8gb3Igb3ZlciBwcm9wIHByb3BlcnR5IHB1dCByZWYgJyArXG4gICAgICAgICdyZWZlcmVuY2UgcmVwZWF0IHJldHVybmluZyBzY3JpcHQgc2Vjb25kIHNldCBzZXZlbnRoIHNpbmNlICcgK1xuICAgICAgICAnc2l4dGggc29tZSB0ZWxsIHRlbnRoIHRoYXQgdGhlfDAgdGhlbiB0aGlyZCB0aHJvdWdoIHRocnUgJyArXG4gICAgICAgICd0aW1lb3V0IHRpbWVzIHRvIHRyYW5zYWN0aW9uIHRyeSB1bnRpbCB3aGVyZSB3aGlsZSB3aG9zZSB3aXRoICcgK1xuICAgICAgICAnd2l0aG91dCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnQXBwbGVTY3JpcHQgZmFsc2UgbGluZWZlZWQgcmV0dXJuIHBpIHF1b3RlIHJlc3VsdCBzcGFjZSB0YWIgdHJ1ZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2FsaWFzIGFwcGxpY2F0aW9uIGJvb2xlYW4gY2xhc3MgY29uc3RhbnQgZGF0ZSBmaWxlIGludGVnZXIgbGlzdCAnICtcbiAgICAgICAgJ251bWJlciByZWFsIHJlY29yZCBzdHJpbmcgdGV4dCAnICtcbiAgICAgICAgJ2FjdGl2YXRlIGJlZXAgY291bnQgZGVsYXkgbGF1bmNoIGxvZyBvZmZzZXQgcmVhZCByb3VuZCAnICtcbiAgICAgICAgJ3J1biBzYXkgc3VtbWFyaXplIHdyaXRlICcgK1xuICAgICAgICAnY2hhcmFjdGVyIGNoYXJhY3RlcnMgY29udGVudHMgZGF5IGZyb250bW9zdCBpZCBpdGVtIGxlbmd0aCAnICtcbiAgICAgICAgJ21vbnRoIG5hbWUgcGFyYWdyYXBoIHBhcmFncmFwaHMgcmVzdCByZXZlcnNlIHJ1bm5pbmcgdGltZSB2ZXJzaW9uICcgK1xuICAgICAgICAnd2Vla2RheSB3b3JkIHdvcmRzIHllYXInXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYihjbGlwYm9hcmQgaW5mb3x0aGUgY2xpcGJvYXJkfGluZm8gZm9yfGxpc3QgKGRpc2tzfGZvbGRlcil8JyArXG4gICAgICAgICAgJ21vdW50IHZvbHVtZXxwYXRoIHRvfChjbG9zZXxvcGVuIGZvcikgYWNjZXNzfChnZXR8c2V0KSBlb2Z8JyArXG4gICAgICAgICAgJ2N1cnJlbnQgZGF0ZXxkbyBzaGVsbCBzY3JpcHR8Z2V0IHZvbHVtZSBzZXR0aW5nc3xyYW5kb20gbnVtYmVyfCcgK1xuICAgICAgICAgICdzZXQgdm9sdW1lfHN5c3RlbSBhdHRyaWJ1dGV8c3lzdGVtIGluZm98dGltZSB0byBHTVR8JyArXG4gICAgICAgICAgJyhsb2FkfHJ1bnxzdG9yZSkgc2NyaXB0fHNjcmlwdGluZyBjb21wb25lbnRzfCcgK1xuICAgICAgICAgICdBU0NJSSAoY2hhcmFjdGVyfG51bWJlcil8bG9jYWxpemVkIHN0cmluZ3wnICtcbiAgICAgICAgICAnY2hvb3NlIChhcHBsaWNhdGlvbnxjb2xvcnxmaWxlfGZpbGUgbmFtZXwnICtcbiAgICAgICAgICAnZm9sZGVyfGZyb20gbGlzdHxyZW1vdGUgYXBwbGljYXRpb258VVJMKXwnICtcbiAgICAgICAgICAnZGlzcGxheSAoYWxlcnR8ZGlhbG9nKSlcXFxcYnxeXFxcXHMqcmV0dXJuXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgJ1xcXFxiKHRleHQgaXRlbSBkZWxpbWl0ZXJzfGN1cnJlbnQgYXBwbGljYXRpb258bWlzc2luZyB2YWx1ZSlcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjpcbiAgICAgICAgICAnXFxcXGIoYXBhcnQgZnJvbXxhc2lkZSBmcm9tfGluc3RlYWQgb2Z8b3V0IG9mfGdyZWF0ZXIgdGhhbnwnICtcbiAgICAgICAgICBcImlzbid0fChkb2Vzbid0fGRvZXMgbm90KSAoZXF1YWx8Y29tZSBiZWZvcmV8Y29tZSBhZnRlcnxjb250YWluKXxcIiArXG4gICAgICAgICAgJyhncmVhdGVyfGxlc3MpIHRoYW4oIG9yIGVxdWFsKT98KHN0YXJ0cz98ZW5kc3xiZWdpbnM/KSB3aXRofCcgK1xuICAgICAgICAgICdjb250YWluZWQgYnl8Y29tZXMgKGJlZm9yZXxhZnRlcil8YSAocmVmfHJlZmVyZW5jZSl8UE9TSVggZmlsZXwnICtcbiAgICAgICAgICAnUE9TSVggcGF0aHwoZGF0ZXx0aW1lKSBzdHJpbmd8cXVvdGVkIGZvcm0pXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnb24nLFxuICAgICAgICBpbGxlZ2FsOiAnWyR7PTtcXFxcbl0nLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCBQQVJBTVNdXG4gICAgICB9XG4gICAgXS5jb25jYXQoQ09NTUVOVFMpLFxuICAgIGlsbGVnYWw6ICcvL3wtPnw9PnxcXFxcW1xcXFxbJ1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENQUF9QUklNSVRJVkVfVFlQRVMgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdcXFxcYlthLXpcXFxcZF9dKl90XFxcXGInXG4gIH07XG5cbiAgdmFyIFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VSk/TD9cIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VSk/UlwiJywgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFxcXFxcXFw/LicsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMGJbMDFcXCddKyknIH0sXG4gICAgICB7IGJlZ2luOiAnKC0/KVxcXFxiKFtcXFxcZFxcJ10rKFxcXFwuW1xcXFxkXFwnXSopP3xcXFxcLltcXFxcZFxcJ10rKSh1fFV8bHxMfHVsfFVMfGZ8RnxifEIpJyB9LFxuICAgICAgeyBiZWdpbjogJygtPykoXFxcXGIwW3hYXVthLWZBLUYwLTlcXCddK3woXFxcXGJbXFxcXGRcXCddKyhcXFxcLltcXFxcZFxcJ10qKT98XFxcXC5bXFxcXGRcXCddKykoW2VFXVstK10/W1xcXFxkXFwnXSspPyknIH1cbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBQUkVQUk9DRVNTT1IgPSAgICAgICB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC8jXFxzKlthLXpdK1xcYi8sIGVuZDogLyQvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAnbWV0YS1rZXl3b3JkJzpcbiAgICAgICAgJ2lmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lICcgK1xuICAgICAgICAncHJhZ21hIGlmZGVmIGlmbmRlZiBpbmNsdWRlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICBiZWdpbjogLzxbXlxcbj5dKj4vLCBlbmQ6IC8kLyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHZhciBGVU5DVElPTl9USVRMRSA9IGhsanMuSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnO1xuXG4gIHZhciBDUFBfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDogJ2ludCBmbG9hdCB3aGlsZSBwcml2YXRlIGNoYXIgY2F0Y2ggaW1wb3J0IG1vZHVsZSBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgJyArXG4gICAgICAnZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlICcgK1xuICAgICAgJ3Vuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCAnICtcbiAgICAgICdkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGFzbSBjYXNlIHR5cGVpZCAnICtcbiAgICAgICdzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyAnICtcbiAgICAgICdzd2l0Y2ggY29udGludWUgaW5saW5lIGRlbGV0ZSBhbGlnbm9mIGNvbnN0ZXhwciBkZWNsdHlwZSAnICtcbiAgICAgICdub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBfQm9vbCBjb21wbGV4IF9Db21wbGV4IF9JbWFnaW5hcnkgJyArXG4gICAgICAnYXRvbWljX2Jvb2wgYXRvbWljX2NoYXIgYXRvbWljX3NjaGFyICcgK1xuICAgICAgJ2F0b21pY191Y2hhciBhdG9taWNfc2hvcnQgYXRvbWljX3VzaG9ydCBhdG9taWNfaW50IGF0b21pY191aW50IGF0b21pY19sb25nIGF0b21pY191bG9uZyBhdG9taWNfbGxvbmcgJyArXG4gICAgICAnYXRvbWljX3VsbG9uZyBuZXcgdGhyb3cgcmV0dXJuICcgK1xuICAgICAgJ2FuZCBvciBub3QnLFxuICAgIGJ1aWx0X2luOiAnc3RkIHN0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtICcgK1xuICAgICAgJ2F1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgJyArXG4gICAgICAndW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgYWJzIGFjb3MgJyArXG4gICAgICAnYXNpbiBhdGFuMiBhdGFuIGNhbGxvYyBjZWlsIGNvc2ggY29zIGV4aXQgZXhwIGZhYnMgZmxvb3IgZm1vZCBmcHJpbnRmIGZwdXRzIGZyZWUgZnJleHAgJyArXG4gICAgICAnZnNjYW5mIGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFwaCBpc2xvd2VyIGlzcHJpbnQgaXNwdW5jdCBpc3NwYWNlIGlzdXBwZXIgJyArXG4gICAgICAnaXN4ZGlnaXQgdG9sb3dlciB0b3VwcGVyIGxhYnMgbGRleHAgbG9nMTAgbG9nIG1hbGxvYyByZWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbXNldCBtb2RmIHBvdyAnICtcbiAgICAgICdwcmludGYgcHV0Y2hhciBwdXRzIHNjYW5mIHNpbmggc2luIHNucHJpbnRmIHNwcmludGYgc3FydCBzc2NhbmYgc3RyY2F0IHN0cmNociBzdHJjbXAgJyArXG4gICAgICAnc3RyY3B5IHN0cmNzcG4gc3RybGVuIHN0cm5jYXQgc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHRhbmggdGFuICcgK1xuICAgICAgJ3ZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgZW5kbCBpbml0aWFsaXplcl9saXN0IHVuaXF1ZV9wdHInLFxuICAgIGxpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGxwdHIgTlVMTCdcbiAgfTtcblxuICB2YXIgRVhQUkVTU0lPTl9DT05UQUlOUyA9IFtcbiAgICBDUFBfUFJJTUlUSVZFX1RZUEVTLFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIE5VTUJFUlMsXG4gICAgU1RSSU5HU1xuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjJywgJ2NjJywgJ2gnLCAnYysrJywgJ2grKycsICdocHAnXSxcbiAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFtcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXFxccyo8JywgZW5kOiAnPicsXG4gICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnLCBDUFBfUFJJTUlUSVZFX1RZUEVTXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBUaGlzIG1vZGUgY292ZXJzIGV4cHJlc3Npb24gY29udGV4dCB3aGVyZSB3ZSBjYW4ndCBleHBlY3QgYSBmdW5jdGlvblxuICAgICAgICAvLyBkZWZpbml0aW9uIGFuZCBzaG91bGRuJ3QgaGlnaGxpZ2h0IGFueXRoaW5nIHRoYXQgbG9va3MgbGlrZSBvbmU6XG4gICAgICAgIC8vIGByZXR1cm4gc29tZSgpYCwgYGVsc2UgaWYoKWAsIGAoeCpzdW0oMSwgMikpYFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogLz0vLCBlbmQ6IC87L30sXG4gICAgICAgICAge2JlZ2luOiAvXFwoLywgZW5kOiAvXFwpL30sXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICduZXcgdGhyb3cgcmV0dXJuIGVsc2UnLCBlbmQ6IC87L31cbiAgICAgICAgXSxcbiAgICAgICAga2V5d29yZHM6IENQUF9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICAgICAgY29udGFpbnM6IEVYUFJFU1NJT05fQ09OVEFJTlMuY29uY2F0KFsnc2VsZiddKSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH1cbiAgICAgICAgXSksXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5JREVOVF9SRSArICdbXFxcXComXFxcXHNdKykrJyArIEZVTkNUSU9OX1RJVExFLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAvW3s7PV0vLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogQ1BQX0tFWVdPUkRTLFxuICAgICAgICBpbGxlZ2FsOiAvW15cXHdcXHNcXComXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEZVTkNUSU9OX1RJVExFLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5USVRMRV9NT0RFXSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFMsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklOR1MsXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIENQUF9QUklNSVRJVkVfVFlQRVNcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFBSRVBST0NFU1NPUlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBzdHJ1Y3QnLCBlbmQ6IC9bezs6XS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luOiAvPC8sIGVuZDogLz4vLCBjb250YWluczogWydzZWxmJ119LCAvLyBza2lwIGdlbmVyaWMgc3R1ZmZcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pLFxuICAgIGV4cG9ydHM6IHtcbiAgICAgIHByZXByb2Nlc3NvcjogUFJFUFJPQ0VTU09SLFxuICAgICAgc3RyaW5nczogU1RSSU5HUyxcbiAgICAgIGtleXdvcmRzOiBDUFBfS0VZV09SRFNcbiAgICB9XG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ1BQID0gaGxqcy5nZXRMYW5ndWFnZSgnY3BwJykuZXhwb3J0cztcblx0cmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2Jvb2xlYW4gYnl0ZSB3b3JkIHN0cmluZyBTdHJpbmcgYXJyYXkgJyArIENQUC5rZXl3b3Jkcy5rZXl3b3JkLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzZXR1cCBsb29wIHdoaWxlIGNhdGNoIGZvciBpZiBkbyBnb3RvIHRyeSBzd2l0Y2ggY2FzZSBlbHNlICcgK1xuICAgICAgICAnZGVmYXVsdCBicmVhayBjb250aW51ZSByZXR1cm4gJyArXG4gICAgICAgICdLZXlib2FyZENvbnRyb2xsZXIgTW91c2VDb250cm9sbGVyIFNvZnR3YXJlU2VyaWFsICcgK1xuICAgICAgICAnRXRoZXJuZXRTZXJ2ZXIgRXRoZXJuZXRDbGllbnQgTGlxdWlkQ3J5c3RhbCAnICtcbiAgICAgICAgJ1JvYm90Q29udHJvbCBHU01Wb2ljZUNhbGwgRXRoZXJuZXRVRFAgRXNwbG9yYVRGVCAnICtcbiAgICAgICAgJ0h0dHBDbGllbnQgUm9ib3RNb3RvciBXaUZpQ2xpZW50IEdTTVNjYW5uZXIgJyArXG4gICAgICAgICdGaWxlU3lzdGVtIFNjaGVkdWxlciBHU01TZXJ2ZXIgWXVuQ2xpZW50IFl1blNlcnZlciAnICtcbiAgICAgICAgJ0lQQWRkcmVzcyBHU01DbGllbnQgR1NNTW9kZW0gS2V5Ym9hcmQgRXRoZXJuZXQgJyArXG4gICAgICAgICdDb25zb2xlIEdTTUJhbmQgRXNwbG9yYSBTdGVwcGVyIFByb2Nlc3MgJyArXG4gICAgICAgICdXaUZpVURQIEdTTV9TTVMgTWFpbGJveCBVU0JIb3N0IEZpcm1hdGEgUEltYWdlICcgK1xuICAgICAgICAnQ2xpZW50IFNlcnZlciBHU01QSU4gRmlsZUlPIEJyaWRnZSBTZXJpYWwgJyArXG4gICAgICAgICdFRVBST00gU3RyZWFtIE1vdXNlIEF1ZGlvIFNlcnZvIEZpbGUgVGFzayAnICtcbiAgICAgICAgJ0dQUlMgV2lGaSBXaXJlIFRGVCBHU00gU1BJIFNEICcgK1xuICAgICAgICAncnVuU2hlbGxDb21tYW5kQXN5bmNocm9ub3VzbHkgYW5hbG9nV3JpdGVSZXNvbHV0aW9uICcgK1xuICAgICAgICAncmV0cmlldmVDYWxsaW5nTnVtYmVyIHByaW50RmlybXdhcmVWZXJzaW9uICcgK1xuICAgICAgICAnYW5hbG9nUmVhZFJlc29sdXRpb24gc2VuZERpZ2l0YWxQb3J0UGFpciAnICtcbiAgICAgICAgJ25vTGlzdGVuT25Mb2NhbGhvc3QgcmVhZEpveXN0aWNrQnV0dG9uIHNldEZpcm13YXJlVmVyc2lvbiAnICtcbiAgICAgICAgJ3JlYWRKb3lzdGlja1N3aXRjaCBzY3JvbGxEaXNwbGF5UmlnaHQgZ2V0Vm9pY2VDYWxsU3RhdHVzICcgK1xuICAgICAgICAnc2Nyb2xsRGlzcGxheUxlZnQgd3JpdGVNaWNyb3NlY29uZHMgZGVsYXlNaWNyb3NlY29uZHMgJyArXG4gICAgICAgICdiZWdpblRyYW5zbWlzc2lvbiBnZXRTaWduYWxTdHJlbmd0aCBydW5Bc3luY2hyb25vdXNseSAnICtcbiAgICAgICAgJ2dldEFzeW5jaHJvbm91c2x5IGxpc3Rlbk9uTG9jYWxob3N0IGdldEN1cnJlbnRDYXJyaWVyICcgK1xuICAgICAgICAncmVhZEFjY2VsZXJvbWV0ZXIgbWVzc2FnZUF2YWlsYWJsZSBzZW5kRGlnaXRhbFBvcnRzICcgK1xuICAgICAgICAnbGluZUZvbGxvd0NvbmZpZyBjb3VudHJ5TmFtZVdyaXRlIHJ1blNoZWxsQ29tbWFuZCAnICtcbiAgICAgICAgJ3JlYWRTdHJpbmdVbnRpbCByZXdpbmREaXJlY3RvcnkgcmVhZFRlbXBlcmF0dXJlICcgK1xuICAgICAgICAnc2V0Q2xvY2tEaXZpZGVyIHJlYWRMaWdodFNlbnNvciBlbmRUcmFuc21pc3Npb24gJyArXG4gICAgICAgICdhbmFsb2dSZWZlcmVuY2UgZGV0YWNoSW50ZXJydXB0IGNvdW50cnlOYW1lUmVhZCAnICtcbiAgICAgICAgJ2F0dGFjaEludGVycnVwdCBlbmNyeXB0aW9uVHlwZSByZWFkQnl0ZXNVbnRpbCAnICtcbiAgICAgICAgJ3JvYm90TmFtZVdyaXRlIHJlYWRNaWNyb3Bob25lIHJvYm90TmFtZVJlYWQgY2l0eU5hbWVXcml0ZSAnICtcbiAgICAgICAgJ3VzZXJOYW1lV3JpdGUgcmVhZEpveXN0aWNrWSByZWFkSm95c3RpY2tYIG1vdXNlUmVsZWFzZWQgJyArXG4gICAgICAgICdvcGVuTmV4dEZpbGUgc2Nhbk5ldHdvcmtzIG5vSW50ZXJydXB0cyBkaWdpdGFsV3JpdGUgJyArXG4gICAgICAgICdiZWdpblNwZWFrZXIgbW91c2VQcmVzc2VkIGlzQWN0aW9uRG9uZSBtb3VzZURyYWdnZWQgJyArXG4gICAgICAgICdkaXNwbGF5TG9nb3Mgbm9BdXRvc2Nyb2xsIGFkZFBhcmFtZXRlciByZW1vdGVOdW1iZXIgJyArXG4gICAgICAgICdnZXRNb2RpZmllcnMga2V5Ym9hcmRSZWFkIHVzZXJOYW1lUmVhZCB3YWl0Q29udGludWUgJyArXG4gICAgICAgICdwcm9jZXNzSW5wdXQgcGFyc2VDb21tYW5kIHByaW50VmVyc2lvbiByZWFkTmV0d29ya3MgJyArXG4gICAgICAgICd3cml0ZU1lc3NhZ2UgYmxpbmtWZXJzaW9uIGNpdHlOYW1lUmVhZCByZWFkTWVzc2FnZSAnICtcbiAgICAgICAgJ3NldERhdGFNb2RlIHBhcnNlUGFja2V0IGlzTGlzdGVuaW5nIHNldEJpdE9yZGVyICcgK1xuICAgICAgICAnYmVnaW5QYWNrZXQgaXNEaXJlY3RvcnkgbW90b3JzV3JpdGUgZHJhd0NvbXBhc3MgJyArXG4gICAgICAgICdkaWdpdGFsUmVhZCBjbGVhclNjcmVlbiBzZXJpYWxFdmVudCByaWdodFRvTGVmdCAnICtcbiAgICAgICAgJ3NldFRleHRTaXplIGxlZnRUb1JpZ2h0IHJlcXVlc3RGcm9tIGtleVJlbGVhc2VkICcgK1xuICAgICAgICAnY29tcGFzc1JlYWQgYW5hbG9nV3JpdGUgaW50ZXJydXB0cyBXaUZpU2VydmVyICcgK1xuICAgICAgICAnZGlzY29ubmVjdCBwbGF5TWVsb2R5IHBhcnNlRmxvYXQgYXV0b3Njcm9sbCAnICtcbiAgICAgICAgJ2dldFBJTlVzZWQgc2V0UElOVXNlZCBzZXRUaW1lb3V0IHNlbmRBbmFsb2cgJyArXG4gICAgICAgICdyZWFkU2xpZGVyIGFuYWxvZ1JlYWQgYmVnaW5Xcml0ZSBjcmVhdGVDaGFyICcgK1xuICAgICAgICAnbW90b3JzU3RvcCBrZXlQcmVzc2VkIHRlbXBvV3JpdGUgcmVhZEJ1dHRvbiAnICtcbiAgICAgICAgJ3N1Ym5ldE1hc2sgZGVidWdQcmludCBtYWNBZGRyZXNzIHdyaXRlR3JlZW4gJyArXG4gICAgICAgICdyYW5kb21TZWVkIGF0dGFjaEdQUlMgcmVhZFN0cmluZyBzZW5kU3RyaW5nICcgK1xuICAgICAgICAncmVtb3RlUG9ydCByZWxlYXNlQWxsIG1vdXNlTW92ZWQgYmFja2dyb3VuZCAnICtcbiAgICAgICAgJ2dldFhDaGFuZ2UgZ2V0WUNoYW5nZSBhbnN3ZXJDYWxsIGdldFJlc3VsdCAnICtcbiAgICAgICAgJ3ZvaWNlQ2FsbCBlbmRQYWNrZXQgY29uc3RyYWluIGdldFNvY2tldCB3cml0ZUpTT04gJyArXG4gICAgICAgICdnZXRCdXR0b24gYXZhaWxhYmxlIGNvbm5lY3RlZCBmaW5kVW50aWwgcmVhZEJ5dGVzICcgK1xuICAgICAgICAnZXhpdFZhbHVlIHJlYWRHcmVlbiB3cml0ZUJsdWUgc3RhcnRMb29wIElQQWRkcmVzcyAnICtcbiAgICAgICAgJ2lzUHJlc3NlZCBzZW5kU3lzZXggcGF1c2VNb2RlIGdhdGV3YXlJUCBzZXRDdXJzb3IgJyArXG4gICAgICAgICdnZXRPZW1LZXkgdHVuZVdyaXRlIG5vRGlzcGxheSBsb2FkSW1hZ2Ugc3dpdGNoUElOICcgK1xuICAgICAgICAnb25SZXF1ZXN0IG9uUmVjZWl2ZSBjaGFuZ2VQSU4gcGxheUZpbGUgbm9CdWZmZXIgJyArXG4gICAgICAgICdwYXJzZUludCBvdmVyZmxvdyBjaGVja1BJTiBrbm9iUmVhZCBiZWdpblRGVCAnICtcbiAgICAgICAgJ2JpdENsZWFyIHVwZGF0ZUlSIGJpdFdyaXRlIHBvc2l0aW9uIHdyaXRlUkdCICcgK1xuICAgICAgICAnaGlnaEJ5dGUgd3JpdGVSZWQgc2V0U3BlZWQgcmVhZEJsdWUgbm9TdHJva2UgJyArXG4gICAgICAgICdyZW1vdGVJUCB0cmFuc2ZlciBzaHV0ZG93biBoYW5nQ2FsbCBiZWdpblNNUyAnICtcbiAgICAgICAgJ2VuZFdyaXRlIGF0dGFjaGVkIG1haW50YWluIG5vQ3Vyc29yIGNoZWNrUmVnICcgK1xuICAgICAgICAnY2hlY2tQVUsgc2hpZnRPdXQgaXNWYWxpZCBzaGlmdEluIHB1bHNlSW4gJyArXG4gICAgICAgICdjb25uZWN0IHByaW50bG4gbG9jYWxJUCBwaW5Nb2RlIGdldElNRUkgJyArXG4gICAgICAgICdkaXNwbGF5IG5vQmxpbmsgcHJvY2VzcyBnZXRCYW5kIHJ1bm5pbmcgYmVnaW5TRCAnICtcbiAgICAgICAgJ2RyYXdCTVAgbG93Qnl0ZSBzZXRCYW5kIHJlbGVhc2UgYml0UmVhZCBwcmVwYXJlICcgK1xuICAgICAgICAncG9pbnRUbyByZWFkUmVkIHNldE1vZGUgbm9GaWxsIHJlbW92ZSBsaXN0ZW4gJyArXG4gICAgICAgICdzdHJva2UgZGV0YWNoIGF0dGFjaCBub1RvbmUgZXhpc3RzIGJ1ZmZlciAnICtcbiAgICAgICAgJ2hlaWdodCBiaXRTZXQgY2lyY2xlIGNvbmZpZyBjdXJzb3IgcmFuZG9tICcgK1xuICAgICAgICAnSVJyZWFkIHNldEROUyBlbmRTTVMgZ2V0S2V5IG1pY3JvcyAnICtcbiAgICAgICAgJ21pbGxpcyBiZWdpbiBwcmludCB3cml0ZSByZWFkeSBmbHVzaCB3aWR0aCAnICtcbiAgICAgICAgJ2lzUElOIGJsaW5rIGNsZWFyIHByZXNzIG1rZGlyIHJtZGlyIGNsb3NlICcgK1xuICAgICAgICAncG9pbnQgeWllbGQgaW1hZ2UgQlNTSUQgY2xpY2sgZGVsYXkgJyArXG4gICAgICAgICdyZWFkIHRleHQgbW92ZSBwZWVrIGJlZXAgcmVjdCBsaW5lIG9wZW4gJyArXG4gICAgICAgICdzZWVrIGZpbGwgc2l6ZSB0dXJuIHN0b3AgaG9tZSBmaW5kICcgK1xuICAgICAgICAnc3RlcCB0b25lIHNxcnQgUlNTSSBTU0lEICcgK1xuICAgICAgICAnZW5kIGJpdCB0YW4gY29zIHNpbiBwb3cgbWFwIGFicyBtYXggJyArXG4gICAgICAgICdtaW4gZ2V0IHJ1biBwdXQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ0RJR0lUQUxfTUVTU0FHRSBGSVJNQVRBX1NUUklORyBBTkFMT0dfTUVTU0FHRSAnICtcbiAgICAgICAgJ1JFUE9SVF9ESUdJVEFMIFJFUE9SVF9BTkFMT0cgSU5QVVRfUFVMTFVQICcgK1xuICAgICAgICAnU0VUX1BJTl9NT0RFIElOVEVSTkFMMlY1NiBTWVNURU1fUkVTRVQgTEVEX0JVSUxUSU4gJyArXG4gICAgICAgICdJTlRFUk5BTDFWMSBTWVNFWF9TVEFSVCBJTlRFUk5BTCBFWFRFUk5BTCAnICtcbiAgICAgICAgJ0RFRkFVTFQgT1VUUFVUIElOUFVUIEhJR0ggTE9XJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIENQUC5wcmVwcm9jZXNzb3IsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgLy9sb2NhbCBsYWJlbHM6ICU/W0ZCXT9bQVRdP1xcZHsxLDJ9XFx3K1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWydhcm0nXSxcbiAgICBsZXhlbWVzOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG1ldGE6XG4gICAgICAgIC8vR05VIHByZXByb2NzXG4gICAgICAgICcuMmJ5dGUgLjRieXRlIC5hbGlnbiAuYXNjaWkgLmFzY2l6IC5iYWxpZ24gLmJ5dGUgLmNvZGUgLmRhdGEgLmVsc2UgLmVuZCAuZW5kaWYgLmVuZG0gLmVuZHIgLmVxdSAuZXJyIC5leGl0bSAuZXh0ZXJuIC5nbG9iYWwgLmh3b3JkIC5pZiAuaWZkZWYgLmlmbmRlZiAuaW5jbHVkZSAuaXJwIC5sb25nIC5tYWNybyAucmVwdCAucmVxIC5zZWN0aW9uIC5zZXQgLnNraXAgLnNwYWNlIC50ZXh0IC53b3JkIC5hcm0gLnRodW1iIC5jb2RlMTYgLmNvZGUzMiAuZm9yY2VfdGh1bWIgLnRodW1iX2Z1bmMgLmx0b3JnICcrXG4gICAgICAgIC8vQVJNIGRpcmVjdGl2ZXNcbiAgICAgICAgJ0FMSUFTIEFMSUdOIEFSTSBBUkVBIEFTU0VSVCBBVFRSIENOIENPREUgQ09ERTE2IENPREUzMiBDT01NT04gQ1AgREFUQSBEQ0IgRENEIERDRFUgRENETyBEQ0ZEIERDRkRVIERDSSBEQ1EgRENRVSBEQ1cgRENXVSBETiBFTElGIEVMU0UgRU5EIEVOREZVTkMgRU5ESUYgRU5EUCBFTlRSWSBFUVUgRVhQT1JUIEVYUE9SVEFTIEVYVEVSTiBGSUVMRCBGSUxMIEZVTkNUSU9OIEdCTEEgR0JMTCBHQkxTIEdFVCBHTE9CQUwgSUYgSU1QT1JUIElOQ0JJTiBJTkNMVURFIElORk8gS0VFUCBMQ0xBIExDTEwgTENMUyBMVE9SRyBNQUNSTyBNQVAgTUVORCBNRVhJVCBOT0ZQIE9QVCBQUkVTRVJWRTggUFJPQyBRTiBSRUFET05MWSBSRUxPQyBSRVFVSVJFIFJFUVVJUkU4IFJMSVNUIEZOIFJPVVQgU0VUQSBTRVRMIFNFVFMgU04gU1BBQ0UgU1VCVCBUSFVNQiBUSFVNQlggVFRMIFdISUxFIFdFTkQgJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgJysgLy9zdGFuZGFyZCByZWdpc3RlcnNcbiAgICAgICAgJ3BjIGxyIHNwIGlwIHNsIHNiIGZwICcrIC8vdHlwaWNhbCByZWdzIHBsdXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAnYTEgYTIgYTMgYTQgdjEgdjIgdjMgdjQgdjUgdjYgdjcgdjggZjAgZjEgZjIgZjMgZjQgZjUgZjYgZjcgJysgLy9tb3JlIHJlZ3MgYW5kIGZwXG4gICAgICAgICdwMCBwMSBwMiBwMyBwNCBwNSBwNiBwNyBwOCBwOSBwMTAgcDExIHAxMiBwMTMgcDE0IHAxNSAnKyAvL2NvcHJvY2Vzc29yIHJlZ3NcbiAgICAgICAgJ2MwIGMxIGMyIGMzIGM0IGM1IGM2IGM3IGM4IGM5IGMxMCBjMTEgYzEyIGMxMyBjMTQgYzE1ICcrIC8vbW9yZSBjb3Byb2NcbiAgICAgICAgJ3EwIHExIHEyIHEzIHE0IHE1IHE2IHE3IHE4IHE5IHExMCBxMTEgcTEyIHExMyBxMTQgcTE1ICcrIC8vYWR2YW5jZWQgU0lNRCBORU9OIHJlZ3NcblxuICAgICAgICAvL3Byb2dyYW0gc3RhdHVzIHJlZ2lzdGVyc1xuICAgICAgICAnY3Bzcl9jIGNwc3JfeCBjcHNyX3MgY3Bzcl9mIGNwc3JfY3ggY3Bzcl9jeHMgY3Bzcl94cyBjcHNyX3hzZiBjcHNyX3NmIGNwc3JfY3hzZiAnK1xuICAgICAgICAnc3Bzcl9jIHNwc3JfeCBzcHNyX3Mgc3Bzcl9mIHNwc3JfY3ggc3Bzcl9jeHMgc3Bzcl94cyBzcHNyX3hzZiBzcHNyX3NmIHNwc3JfY3hzZiAnK1xuXG4gICAgICAgIC8vTkVPTiBhbmQgVkZQIHJlZ2lzdGVyc1xuICAgICAgICAnczAgczEgczIgczMgczQgczUgczYgczcgczggczkgczEwIHMxMSBzMTIgczEzIHMxNCBzMTUgJytcbiAgICAgICAgJ3MxNiBzMTcgczE4IHMxOSBzMjAgczIxIHMyMiBzMjMgczI0IHMyNSBzMjYgczI3IHMyOCBzMjkgczMwIHMzMSAnK1xuICAgICAgICAnZDAgZDEgZDIgZDMgZDQgZDUgZDYgZDcgZDggZDkgZDEwIGQxMSBkMTIgZDEzIGQxNCBkMTUgJytcbiAgICAgICAgJ2QxNiBkMTcgZDE4IGQxOSBkMjAgZDIxIGQyMiBkMjMgZDI0IGQyNSBkMjYgZDI3IGQyOCBkMjkgZDMwIGQzMSAnICtcblxuICAgICAgICAne1BDfSB7VkFSfSB7VFJVRX0ge0ZBTFNFfSB7T1BUfSB7Q09ORklHfSB7RU5ESUFOfSB7Q09ERVNJWkV9IHtDUFV9IHtGUFV9IHtBUkNISVRFQ1RVUkV9IHtQQ1NUT1JFT0ZGU0VUfSB7QVJNQVNNX1ZFUlNJT059IHtJTlRFUn0ge1JPUEl9IHtSV1BJfSB7U1dTVH0ge05PU1dTVH0gLiBAJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoJysgICAgIC8vbW5lbW9uaWNzXG4gICAgICAgICAgICAnYWRjfCcrXG4gICAgICAgICAgICAnKHFkP3xzaD98dVtxaF0/KT9hZGQoOHwxNik/fHVzYWRhPzh8KHF8c2g/fHVbcWhdPyk/KGFzfHNhKXh8JytcbiAgICAgICAgICAgICdhbmR8YWRybD98c2JjfHJzW2JjXXxhc3J8YltseF0/fGJseHxieGp8Y2JuP3p8dGJbYmhdfGJpY3wnK1xuICAgICAgICAgICAgJ2JmY3xiZml8W3N1XWJmeHxia3B0fGNkcDI/fGNsenxjbHJleHxjbXB8Y21ufGNwc2lbZWRdfGNwc3wnK1xuICAgICAgICAgICAgJ3NldGVuZHxkYmd8ZG1ifGRzYnxlb3J8aXNifGl0W3RlXXswLDN9fGxzbHxsc3J8cm9yfHJyeHwnK1xuICAgICAgICAgICAgJ2xkbSgoW2lkXVthYl0pfGZbZHNdKT98bGRyKChzfGV4KT9bYmhkXSk/fG1vdnQ/fG12bnxtcmF8bWFyfCcrXG4gICAgICAgICAgICAnbXVsfFt1c11tdWxsfHNtdWxbYnd0XVtidF18c211W2FzXWR8c21tdWx8c21tbGF8JytcbiAgICAgICAgICAgICdtbGF8dW1sYWFsfHNtbGFsPyhbd2J0XVtidF18ZCl8bWxzfHNtbHNsP1tkc118c21jfHN2Y3xzZXZ8JytcbiAgICAgICAgICAgICdtaWEoW2J0XXsyfXxwaCk/fG1ycj9jMj98bWNycjI/fG1yc3xtc3J8b3JyfG9ybnxwa2godGJ8YnQpfHJiaXR8JytcbiAgICAgICAgICAgICdyZXYoMTZ8c2gpP3xzZWx8W3N1XXNhdCgxNik/fG5vcHxwb3B8cHVzaHxyZmUoW2lkXVthYl0pP3wnK1xuICAgICAgICAgICAgJ3N0bShbaWRdW2FiXSk/fHN0cihleCk/W2JoZF0/fChxZD8pP3N1Ynwoc2g/fHF8dVtxaF0/KT9zdWIoOHwxNil8JytcbiAgICAgICAgICAgICdbc3VdeHQoYT9ofGE/YigxNik/KXxzcnMoW2lkXVthYl0pP3xzd3BiP3xzd2l8c21pfHRzdHx0ZXF8JytcbiAgICAgICAgICAgICd3ZmV8d2ZpfHlpZWxkJytcbiAgICAgICAgJyknK1xuICAgICAgICAnKGVxfG5lfGNzfGNjfG1pfHBsfHZzfHZjfGhpfGxzfGdlfGx0fGd0fGxlfGFsfGhzfGxvKT8nKyAvL2NvbmRpdGlvbiBjb2Rlc1xuICAgICAgICAnW3NwdHJ4XT8nICwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xlZ2FsIHBvc3RmaXhlc1xuICAgICAgICBlbmQ6ICdcXFxccydcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ1s7QF0nLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsXG4gICAgICAgIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLCBlbmQ6ICdcXFxcfCcsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ1sjJD1dPzB4WzAtOWEtZl0rJ30sIC8vaGV4XG4gICAgICAgICAgICB7YmVnaW46ICdbIyQ9XT8wYlswMV0rJ30sICAgICAvL2JpblxuICAgICAgICAgICAge2JlZ2luOiAnWyMkPV1cXFxcZCsnfSwgICAgICAgIC8vbGl0ZXJhbFxuICAgICAgICAgICAge2JlZ2luOiAnXFxcXGJcXFxcZCsnfSAgICAgICAgICAgLy9iYXJlIG51bWJlclxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7YmVnaW46ICdeW2Etel9cXFxcLlxcXFwkXVthLXowLTlfXFxcXC5cXFxcJF0rJ30sIC8vQVJNIHN5bnRheFxuICAgICAgICAgICAge2JlZ2luOiAnXlxcXFxzKlthLXpfXFxcXC5cXFxcJF1bYS16MC05X1xcXFwuXFxcXCRdKzonfSwgLy9HTlUgQVJNIHN5bnRheFxuICAgICAgICAgICAge2JlZ2luOiAnWz0jXVxcXFx3KycgfSAgLy9sYWJlbCByZWZlcmVuY2VcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFhNTF9JREVOVF9SRSA9ICdbQS1aYS16MC05XFxcXC5fOi1dKyc7XG4gIHZhciBUQUdfSU5URVJOQUxTID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGlsbGVnYWw6IC88LyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiBYTUxfSURFTlRfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC89XFxzKi8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAvW15cXHNcIic9PD5gXSsvfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2h0bWwnLCAneGh0bWwnLCAncnNzJywgJ2F0b20nLCAneGpiJywgJ3hzZCcsICd4c2wnLCAncGxpc3QnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJzwhRE9DVFlQRScsIGVuZDogJz4nLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1xcXFxbJywgZW5kOiAnXFxcXF0nfV1cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc8IS0tJyxcbiAgICAgICAgJy0tPicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPFxcXFwhXFxcXFtDREFUQVxcXFxbJywgZW5kOiAnXFxcXF1cXFxcXT4nLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLzxcXD8ocGhwKT8vLCBlbmQ6IC9cXD8+LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwaHAnLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJy9cXFxcKicsIGVuZDogJ1xcXFwqLycsIHNraXA6IHRydWV9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLypcbiAgICAgICAgVGhlIGxvb2thaGVhZCBwYXR0ZXJuICg/PS4uLikgZW5zdXJlcyB0aGF0ICdiZWdpbicgb25seSBtYXRjaGVzXG4gICAgICAgICc8c3R5bGUnIGFzIGEgc2luZ2xlIHdvcmQsIGZvbGxvd2VkIGJ5IGEgd2hpdGVzcGFjZSBvciBhblxuICAgICAgICBlbmRpbmcgYnJha2V0LiBUaGUgJyQnIGlzIG5lZWRlZCBmb3IgdGhlIGxleGVtZSB0byBiZSByZWNvZ25pemVkXG4gICAgICAgIGJ5IGhsanMuc3ViTW9kZSgpIHRoYXQgdGVzdHMgbGV4ZW1lcyBvdXRzaWRlIHRoZSBzdHJlYW0uXG4gICAgICAgICovXG4gICAgICAgIGJlZ2luOiAnPHN0eWxlKD89XFxcXHN8PnwkKScsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3Jkczoge25hbWU6ICdzdHlsZSd9LFxuICAgICAgICBjb250YWluczogW1RBR19JTlRFUk5BTFNdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICc8L3N0eWxlPicsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogWydjc3MnLCAneG1sJ11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZSA8c3R5bGUgdGFnIGFib3V0IHRoZSBsb29rYWhlYWQgcGF0dGVyblxuICAgICAgICBiZWdpbjogJzxzY3JpcHQoPz1cXFxcc3w+fCQpJywgZW5kOiAnPicsXG4gICAgICAgIGtleXdvcmRzOiB7bmFtZTogJ3NjcmlwdCd9LFxuICAgICAgICBjb250YWluczogW1RBR19JTlRFUk5BTFNdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICdcXDxcXC9zY3JpcHRcXD4nLCByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6IFsnYWN0aW9uc2NyaXB0JywgJ2phdmFzY3JpcHQnLCAnaGFuZGxlYmFycycsICd4bWwnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC88XFw/eG1sLywgZW5kOiAvXFw/Pi8sIHJlbGV2YW5jZTogMTB9LFxuICAgICAgICAgIHtiZWdpbjogLzxcXD9cXHcrLywgZW5kOiAvXFw/Pi99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiAnPC8/JywgZW5kOiAnLz8+JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IC9bXlxcLz48XFxzXSsvLCByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFRBR19JTlRFUk5BTFNcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydhZG9jJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIGJsb2NrIGNvbW1lbnRcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ14vezQsfVxcXFxuJyxcbiAgICAgICAgJ1xcXFxuL3s0LH0kJyxcbiAgICAgICAgLy8gY2FuIGFsc28gYmUgZG9uZSBhcy4uLlxuICAgICAgICAvLydeL3s0LH0kJyxcbiAgICAgICAgLy8nXi97NCx9JCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAvLyBsaW5lIGNvbW1lbnRcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ14vLycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgLy8gdGl0bGVcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ15cXFxcLlxcXFx3LiokJ1xuICAgICAgfSxcbiAgICAgIC8vIGV4YW1wbGUsIGFkbW9uaXRpb24gJiBzaWRlYmFyIGJsb2Nrc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15bPVxcXFwqXXs0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuXls9XFxcXCpdezQsfSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gaGVhZGluZ3NcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIHJlbGV2YW5jZTogMTAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnXig9ezEsNX0pIC4rPyggXFxcXDEpPyQnfSxcbiAgICAgICAgICB7YmVnaW46ICdeW15cXFxcW1xcXFxdXFxcXG5dKz9cXFxcbls9XFxcXC1+XFxcXF5cXFxcK117Mix9JCd9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gZG9jdW1lbnQgYXR0cmlidXRlc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeOi4rPzonLFxuICAgICAgICBlbmQ6ICdcXFxccycsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBibG9jayBhdHRyaWJ1dGVzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxcWy4rP1xcXFxdJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIHF1b3RlYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3F1b3RlJyxcbiAgICAgICAgYmVnaW46ICdeX3s0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuX3s0LH0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RpbmcgYW5kIGxpdGVyYWwgYmxvY2tzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICBiZWdpbjogJ15bXFxcXC1cXFxcLl17NCx9XFxcXG4nLFxuICAgICAgICBlbmQ6ICdcXFxcbltcXFxcLVxcXFwuXXs0LH0kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIHBhc3N0aHJvdWdoIGJsb2Nrc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxcK3s0LH1cXFxcbicsXG4gICAgICAgIGVuZDogJ1xcXFxuXFxcXCt7NCx9JCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICAvLyBsaXN0cyAoY2FuIG9ubHkgY2FwdHVyZSBpbmRpY2F0b3JzKVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWxsZXQnLFxuICAgICAgICBiZWdpbjogJ14oXFxcXCorfFxcXFwtK3xcXFxcLit8W15cXFxcbl0rPzo6KVxcXFxzKydcbiAgICAgIH0sXG4gICAgICAvLyBhZG1vbml0aW9uXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXihOT1RFfFRJUHxJTVBPUlRBTlR8V0FSTklOR3xDQVVUSU9OKTpcXFxccysnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gaW5saW5lIHN0cm9uZ1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJvbmcnLFxuICAgICAgICAvLyBtdXN0IG5vdCBmb2xsb3cgYSB3b3JkIGNoYXJhY3RlciBvciBiZSBmb2xsb3dlZCBieSBhbiBhc3RlcmlzayBvciBzcGFjZVxuICAgICAgICBiZWdpbjogJ1xcXFxCXFxcXCooPyFbXFxcXCpcXFxcc10pJyxcbiAgICAgICAgZW5kOiAnKFxcXFxuezJ9fFxcXFwqKScsXG4gICAgICAgIC8vIGFsbG93IGVzY2FwZWQgYXN0ZXJpc2sgZm9sbG93ZWQgYnkgd29yZCBjaGFyXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcXFxcXCpcXFxcdycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBpbmxpbmUgZW1waGFzaXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZW1waGFzaXMnLFxuICAgICAgICAvLyBtdXN0IG5vdCBmb2xsb3cgYSB3b3JkIGNoYXJhY3RlciBvciBiZSBmb2xsb3dlZCBieSBhIHNpbmdsZSBxdW90ZSBvciBzcGFjZVxuICAgICAgICBiZWdpbjogJ1xcXFxCXFwnKD8hW1xcJ1xcXFxzXSknLFxuICAgICAgICBlbmQ6ICcoXFxcXG57Mn18XFwnKScsXG4gICAgICAgIC8vIGFsbG93IGVzY2FwZWQgc2luZ2xlIHF1b3RlIGZvbGxvd2VkIGJ5IHdvcmQgY2hhclxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXFxcXFxcXCdcXFxcdycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBlbXBoYXNpcyAoYWx0KVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIC8vIG11c3Qgbm90IGZvbGxvdyBhIHdvcmQgY2hhcmFjdGVyIG9yIGJlIGZvbGxvd2VkIGJ5IGFuIHVuZGVybGluZSBvciBzcGFjZVxuICAgICAgICBiZWdpbjogJ18oPyFbX1xcXFxzXSknLFxuICAgICAgICBlbmQ6ICcoXFxcXG57Mn18XyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICAvLyBpbmxpbmUgc21hcnQgcXVvdGVzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiBcImBgLis/JydcIn0sXG4gICAgICAgICAge2JlZ2luOiBcImAuKz8nXCJ9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBpbmxpbmUgY29kZSBzbmlwcGV0cyAoVE9ETyBzaG91bGQgZ2V0IHNhbWUgdHJlYXRtZW50IGFzIHN0cm9uZyBhbmQgZW1waGFzaXMpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICBiZWdpbjogJyhgLis/YHxcXFxcKy4rP1xcXFwrKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGluZGVudGVkIGxpdGVyYWwgYmxvY2tcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29kZScsXG4gICAgICAgIGJlZ2luOiAnXlsgXFxcXHRdJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGhvcml6b250YWwgcnVsZXNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeXFwnezMsfVsgXFxcXHRdKiQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAgLy8gaW1hZ2VzIGFuZCBsaW5rc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyhsaW5rOik/KGh0dHB8aHR0cHN8ZnRwfGZpbGV8aXJjfGltYWdlOj8pOlxcXFxTK1xcXFxbLio/XFxcXF0nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJyhsaW5rfGltYWdlOj8pOicsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2xpbmsnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcdycsXG4gICAgICAgICAgICBlbmQ6ICdbXlxcXFxbXSsnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgICAgICBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2ZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgJyArXG4gICAgJ2ZvciB0cnVlIHdoaWxlIGxvbmcgdGhyb3cgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCByZXR1cm4gdm9pZCAnICtcbiAgICAnZW51bSBlbHNlIGV4dGVuZHMgaW1wbGVtZW50cyBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlICcgK1xuICAgICdhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcml2aWxlZ2VkICcgK1xuICAgICdhc3BlY3RPZiBhZHZpY2VleGVjdXRpb24gcHJvY2VlZCBjZmxvd2JlbG93IGNmbG93IGluaXRpYWxpemF0aW9uIHByZWluaXRpYWxpemF0aW9uICcgK1xuICAgICdzdGF0aWNpbml0aWFsaXphdGlvbiB3aXRoaW5jb2RlIHRhcmdldCB3aXRoaW4gZXhlY3V0aW9uIGdldFdpdGhpblR5cGVOYW1lIGhhbmRsZXIgJyArXG4gICAgJ3RoaXNKb2luUG9pbnQgdGhpc0pvaW5Qb2ludFN0YXRpY1BhcnQgdGhpc0VuY2xvc2luZ0pvaW5Qb2ludFN0YXRpY1BhcnQgZGVjbGFyZSBwYXJlbnRzICcrXG4gICAgJ3dhcm5pbmcgZXJyb3Igc29mdCBwcmVjZWRlbmNlIHRoaXNBc3BlY3RJbnN0YW5jZSc7XG4gIHZhciBTSE9SVEtFWVMgPSAnZ2V0IHNldCBhcmdzIGNhbGwnO1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgaWxsZWdhbCA6IC88XFwvfCMvLFxuICAgIGNvbnRhaW5zIDogW1xuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnL1xcXFwqXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZSA6IDAsXG4gICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGVhdCB1cCBAJ3MgaW4gZW1haWxzIHRvIHByZXZlbnQgdGhlbSB0byBiZSByZWNvZ25pemVkIGFzIGRvY3RhZ3NcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHcrQC8sIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lIDogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZSA6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHMgOiAnYXNwZWN0JyxcbiAgICAgICAgZW5kIDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZCA6IHRydWUsXG4gICAgICAgIGlsbGVnYWwgOiAvWzo7XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW5LZXl3b3JkcyA6ICdleHRlbmRzIGltcGxlbWVudHMgcGVydHlwZXdpdGhpbiBwZXJ0aGlzIHBlcnRhcmdldCBwZXJjZmxvd2JlbG93IHBlcmNmbG93IGlzc2luZ2xldG9uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW4gOiAvXFwoW15cXCldKi8sXG4gICAgICAgICAgICBlbmQgOiAvWyldKy8sXG4gICAgICAgICAgICBrZXl3b3JkcyA6IEtFWVdPUkRTICsgJyAnICsgU0hPUlRLRVlTLFxuICAgICAgICAgICAgZXhjbHVkZUVuZCA6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWUgOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzIDogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGVuZCA6IC9bezs9XS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQgOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGtleXdvcmRzIDogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGlsbGVnYWwgOiAvWzpcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkcyA6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBBc3BlY3RKIENvbnN0cnVjdHNcbiAgICAgICAgYmVnaW5LZXl3b3JkcyA6ICdwb2ludGN1dCBhZnRlciBiZWZvcmUgYXJvdW5kIHRocm93aW5nIHJldHVybmluZycsXG4gICAgICAgIGVuZCA6IC9bKV0vLFxuICAgICAgICBleGNsdWRlRW5kIDogZmFsc2UsXG4gICAgICAgIGlsbGVnYWwgOiAvW1wiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luIDogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luIDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zIDogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW4gOiAvWzpdLyxcbiAgICAgICAgcmV0dXJuQmVnaW4gOiB0cnVlLFxuICAgICAgICBlbmQgOiAvW3s7XS8sXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZXhjbHVkZUVuZCA6IGZhbHNlLFxuICAgICAgICBrZXl3b3JkcyA6IEtFWVdPUkRTLFxuICAgICAgICBpbGxlZ2FsIDogL1tcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbiA6IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsXG4gICAgICAgICAgICBrZXl3b3JkcyA6IEtFWVdPUkRTICsgJyAnICsgU0hPUlRLRVlTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgcHJldmVudHMgJ25ldyBOYW1lKC4uLiksIG9yIHRocm93IC4uLicgZnJvbSBiZWluZyByZWNvZ25pemVkIGFzIGEgZnVuY3Rpb24gZGVmaW5pdGlvblxuICAgICAgICBiZWdpbktleXdvcmRzIDogJ25ldyB0aHJvdycsXG4gICAgICAgIHJlbGV2YW5jZSA6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBjbGFzcyBpcyBhIGJpdCBkaWZmZXJlbnQgZm9yIEFzcGVjdEogY29tcGFyZWQgdG8gdGhlIEphdmEgbGFuZ3VhZ2VcbiAgICAgICAgY2xhc3NOYW1lIDogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW4gOiAvXFx3KyArXFx3KyhcXC4pP1xcdytcXHMqXFwoW15cXCldKlxcKVxccyooKHRocm93cylbXFx3XFxzLF0rKT9bXFx7O10vLFxuICAgICAgICByZXR1cm5CZWdpbiA6IHRydWUsXG4gICAgICAgIGVuZCA6IC9bezs9XS8sXG4gICAgICAgIGtleXdvcmRzIDogS0VZV09SRFMsXG4gICAgICAgIGV4Y2x1ZGVFbmQgOiB0cnVlLFxuICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbiA6IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSArICdcXFxccypcXFxcKCcsXG4gICAgICAgICAgICByZXR1cm5CZWdpbiA6IHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWlucyA6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW4gOiAvXFwoLywgZW5kIDogL1xcKS8sXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBrZXl3b3JkcyA6IEtFWVdPUkRTLFxuICAgICAgICAgICAgY29udGFpbnMgOiBbXG4gICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICAvLyBhbm5vdGF0aW9uIGlzIGFsc28gdXNlZCBpbiB0aGlzIGxhbmd1YWdlXG4gICAgICAgIGNsYXNzTmFtZSA6ICdtZXRhJyxcbiAgICAgICAgYmVnaW4gOiAnQFtBLVphLXpdKydcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQkFDS1RJQ0tfRVNDQVBFID0ge1xuICAgIGJlZ2luOiAnYFtcXFxcc1xcXFxTXSdcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyAnYWhrJyBdLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnQnJlYWsgQ29udGludWUgQ3JpdGljYWwgRXhpdCBFeGl0QXBwIEdvc3ViIEdvdG8gTmV3IE9uRXhpdCBQYXVzZSByZXR1cm4gU2V0QmF0Y2hMaW5lcyBTZXRUaW1lciBTdXNwZW5kIFRocmVhZCBUaHJvdyBVbnRpbCBhaGtfaWQgYWhrX2NsYXNzIGFoa19waWQgYWhrX2V4ZSBhaGtfZ3JvdXAnLFxuICAgICAgbGl0ZXJhbDogJ0F8MCB0cnVlIGZhbHNlIE5PVCBBTkQgT1InLFxuICAgICAgYnVpbHRfaW46ICdDb21TcGVjIENsaXBib2FyZCBDbGlwYm9hcmRBbGwgRXJyb3JMZXZlbCcsXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnQV9bYS16QS1aMC05XSsnXG4gICAgICB9LFxuICAgICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtjb250YWluczogW0JBQ0tUSUNLX0VTQ0FQRV19KSxcbiAgICAgIGhsanMuQ09NTUVOVCgnOycsICckJywge3JlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IGhsanMuTlVNQkVSX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JywgLy8gRklYRURcbiAgICAgICAgYmVnaW46ICclKD89W2EtekEtWjAtOSNfJEBdKScsIGVuZDogJyUnLFxuICAgICAgICBpbGxlZ2FsOiAnW15hLXpBLVowLTkjXyRAXSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqXFxcXHcrXFxcXHMqLCdcbiAgICAgICAgLy9JIGRvbid0IHJlYWxseSBrbm93IGlmIHRoaXMgaXMgdG90YWxseSByZWxldmFudFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIFxuICAgICAgICBiZWdpbjogJ15cXFxccyojXFx3KycsIGVuZDonJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgY29udGFpbnM6IFtCQUNLVElDS19FU0NBUEVdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ15bXlxcXFxuXCI7XSs6Oig/IT0pJ30sXG4gICAgICAgICAge2JlZ2luOiAnXlteXFxcXG5cIjtdKzooPyE9KScsIHJlbGV2YW5jZTogMH0gLy8gemVybyByZWxldmFuY2UgYXMgaXQgY2F0Y2hlcyBhIGxvdCBvZiB0aGluZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb2xsb3dlZCBieSBhIHNpbmdsZSAnOicgaW4gbWFueSBsYW5ndWFnZXNcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gY29uc2VjdXRpdmUgY29tbWFzLCBub3QgZm9yIGhpZ2hsaWdodGluZyBidXQganVzdCBmb3IgcmVsZXZhbmNlXG4gICAgICAgIGJlZ2luOiAnLFxcXFxzKiwnXG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBLRVlXT1JEUyA9ICdCeVJlZiBDYXNlIENvbnN0IENvbnRpbnVlQ2FzZSBDb250aW51ZUxvb3AgJyArXG4gICAgICAgICdEZWZhdWx0IERpbSBEbyBFbHNlIEVsc2VJZiBFbmRGdW5jIEVuZElmIEVuZFNlbGVjdCAnICtcbiAgICAgICAgJ0VuZFN3aXRjaCBFbmRXaXRoIEVudW0gRXhpdCBFeGl0TG9vcCBGb3IgRnVuYyAnICtcbiAgICAgICAgJ0dsb2JhbCBJZiBJbiBMb2NhbCBOZXh0IFJlRGltIFJldHVybiBTZWxlY3QgU3RhdGljICcgK1xuICAgICAgICAnU3RlcCBTd2l0Y2ggVGhlbiBUbyBVbnRpbCBWb2xhdGlsZSBXRW5kIFdoaWxlIFdpdGgnLFxuXG4gICAgICAgIExJVEVSQUwgPSAnVHJ1ZSBGYWxzZSBBbmQgTnVsbCBOb3QgT3InLFxuXG4gICAgICAgIEJVSUxUX0lOID1cbiAgICAgICAgICAnQWJzIEFDb3MgQWRsaWJSZWdpc3RlciBBZGxpYlVuUmVnaXN0ZXIgQXNjIEFzY1cgQVNpbiBBc3NpZ24gQVRhbiBBdXRvSXRTZXRPcHRpb24gQXV0b0l0V2luR2V0VGl0bGUgQXV0b0l0V2luU2V0VGl0bGUgQmVlcCBCaW5hcnkgQmluYXJ5TGVuIEJpbmFyeU1pZCBCaW5hcnlUb1N0cmluZyBCaXRBTkQgQml0Tk9UIEJpdE9SIEJpdFJvdGF0ZSBCaXRTaGlmdCBCaXRYT1IgQmxvY2tJbnB1dCBCcmVhayBDYWxsIENEVHJheSBDZWlsaW5nIENociBDaHJXIENsaXBHZXQgQ2xpcFB1dCBDb25zb2xlUmVhZCBDb25zb2xlV3JpdGUgQ29uc29sZVdyaXRlRXJyb3IgQ29udHJvbENsaWNrIENvbnRyb2xDb21tYW5kIENvbnRyb2xEaXNhYmxlIENvbnRyb2xFbmFibGUgQ29udHJvbEZvY3VzIENvbnRyb2xHZXRGb2N1cyBDb250cm9sR2V0SGFuZGxlIENvbnRyb2xHZXRQb3MgQ29udHJvbEdldFRleHQgQ29udHJvbEhpZGUgQ29udHJvbExpc3RWaWV3IENvbnRyb2xNb3ZlIENvbnRyb2xTZW5kIENvbnRyb2xTZXRUZXh0IENvbnRyb2xTaG93IENvbnRyb2xUcmVlVmlldyBDb3MgRGVjIERpckNvcHkgRGlyQ3JlYXRlIERpckdldFNpemUgRGlyTW92ZSBEaXJSZW1vdmUgRGxsQ2FsbCBEbGxDYWxsQWRkcmVzcyBEbGxDYWxsYmFja0ZyZWUgRGxsQ2FsbGJhY2tHZXRQdHIgRGxsQ2FsbGJhY2tSZWdpc3RlciBEbGxDbG9zZSBEbGxPcGVuIERsbFN0cnVjdENyZWF0ZSBEbGxTdHJ1Y3RHZXREYXRhIERsbFN0cnVjdEdldFB0ciBEbGxTdHJ1Y3RHZXRTaXplIERsbFN0cnVjdFNldERhdGEgRHJpdmVHZXREcml2ZSBEcml2ZUdldEZpbGVTeXN0ZW0gRHJpdmVHZXRMYWJlbCBEcml2ZUdldFNlcmlhbCBEcml2ZUdldFR5cGUgRHJpdmVNYXBBZGQgRHJpdmVNYXBEZWwgRHJpdmVNYXBHZXQgRHJpdmVTZXRMYWJlbCBEcml2ZVNwYWNlRnJlZSBEcml2ZVNwYWNlVG90YWwgRHJpdmVTdGF0dXMgRW52R2V0IEVudlNldCBFbnZVcGRhdGUgRXZhbCBFeGVjdXRlIEV4cCBGaWxlQ2hhbmdlRGlyIEZpbGVDbG9zZSBGaWxlQ29weSBGaWxlQ3JlYXRlTlRGU0xpbmsgRmlsZUNyZWF0ZVNob3J0Y3V0IEZpbGVEZWxldGUgRmlsZUV4aXN0cyBGaWxlRmluZEZpcnN0RmlsZSBGaWxlRmluZE5leHRGaWxlIEZpbGVGbHVzaCBGaWxlR2V0QXR0cmliIEZpbGVHZXRFbmNvZGluZyBGaWxlR2V0TG9uZ05hbWUgRmlsZUdldFBvcyBGaWxlR2V0U2hvcnRjdXQgRmlsZUdldFNob3J0TmFtZSBGaWxlR2V0U2l6ZSBGaWxlR2V0VGltZSBGaWxlR2V0VmVyc2lvbiBGaWxlSW5zdGFsbCBGaWxlTW92ZSBGaWxlT3BlbiBGaWxlT3BlbkRpYWxvZyBGaWxlUmVhZCBGaWxlUmVhZExpbmUgRmlsZVJlYWRUb0FycmF5IEZpbGVSZWN5Y2xlIEZpbGVSZWN5Y2xlRW1wdHkgRmlsZVNhdmVEaWFsb2cgRmlsZVNlbGVjdEZvbGRlciBGaWxlU2V0QXR0cmliIEZpbGVTZXRFbmQgRmlsZVNldFBvcyBGaWxlU2V0VGltZSBGaWxlV3JpdGUgRmlsZVdyaXRlTGluZSBGbG9vciBGdHBTZXRQcm94eSBGdW5jTmFtZSBHVUlDcmVhdGUgR1VJQ3RybENyZWF0ZUF2aSBHVUlDdHJsQ3JlYXRlQnV0dG9uIEdVSUN0cmxDcmVhdGVDaGVja2JveCBHVUlDdHJsQ3JlYXRlQ29tYm8gR1VJQ3RybENyZWF0ZUNvbnRleHRNZW51IEdVSUN0cmxDcmVhdGVEYXRlIEdVSUN0cmxDcmVhdGVEdW1teSBHVUlDdHJsQ3JlYXRlRWRpdCBHVUlDdHJsQ3JlYXRlR3JhcGhpYyBHVUlDdHJsQ3JlYXRlR3JvdXAgR1VJQ3RybENyZWF0ZUljb24gR1VJQ3RybENyZWF0ZUlucHV0IEdVSUN0cmxDcmVhdGVMYWJlbCBHVUlDdHJsQ3JlYXRlTGlzdCBHVUlDdHJsQ3JlYXRlTGlzdFZpZXcgR1VJQ3RybENyZWF0ZUxpc3RWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlTWVudSBHVUlDdHJsQ3JlYXRlTWVudUl0ZW0gR1VJQ3RybENyZWF0ZU1vbnRoQ2FsIEdVSUN0cmxDcmVhdGVPYmogR1VJQ3RybENyZWF0ZVBpYyBHVUlDdHJsQ3JlYXRlUHJvZ3Jlc3MgR1VJQ3RybENyZWF0ZVJhZGlvIEdVSUN0cmxDcmVhdGVTbGlkZXIgR1VJQ3RybENyZWF0ZVRhYiBHVUlDdHJsQ3JlYXRlVGFiSXRlbSBHVUlDdHJsQ3JlYXRlVHJlZVZpZXcgR1VJQ3RybENyZWF0ZVRyZWVWaWV3SXRlbSBHVUlDdHJsQ3JlYXRlVXBkb3duIEdVSUN0cmxEZWxldGUgR1VJQ3RybEdldEhhbmRsZSBHVUlDdHJsR2V0U3RhdGUgR1VJQ3RybFJlYWQgR1VJQ3RybFJlY3ZNc2cgR1VJQ3RybFJlZ2lzdGVyTGlzdFZpZXdTb3J0IEdVSUN0cmxTZW5kTXNnIEdVSUN0cmxTZW5kVG9EdW1teSBHVUlDdHJsU2V0QmtDb2xvciBHVUlDdHJsU2V0Q29sb3IgR1VJQ3RybFNldEN1cnNvciBHVUlDdHJsU2V0RGF0YSBHVUlDdHJsU2V0RGVmQmtDb2xvciBHVUlDdHJsU2V0RGVmQ29sb3IgR1VJQ3RybFNldEZvbnQgR1VJQ3RybFNldEdyYXBoaWMgR1VJQ3RybFNldEltYWdlIEdVSUN0cmxTZXRMaW1pdCBHVUlDdHJsU2V0T25FdmVudCBHVUlDdHJsU2V0UG9zIEdVSUN0cmxTZXRSZXNpemluZyBHVUlDdHJsU2V0U3RhdGUgR1VJQ3RybFNldFN0eWxlIEdVSUN0cmxTZXRUaXAgR1VJRGVsZXRlIEdVSUdldEN1cnNvckluZm8gR1VJR2V0TXNnIEdVSUdldFN0eWxlIEdVSVJlZ2lzdGVyTXNnIEdVSVNldEFjY2VsZXJhdG9ycyBHVUlTZXRCa0NvbG9yIEdVSVNldENvb3JkIEdVSVNldEN1cnNvciBHVUlTZXRGb250IEdVSVNldEhlbHAgR1VJU2V0SWNvbiBHVUlTZXRPbkV2ZW50IEdVSVNldFN0YXRlIEdVSVNldFN0eWxlIEdVSVN0YXJ0R3JvdXAgR1VJU3dpdGNoIEhleCBIb3RLZXlTZXQgSHR0cFNldFByb3h5IEh0dHBTZXRVc2VyQWdlbnQgSFduZCBJbmV0Q2xvc2UgSW5ldEdldCBJbmV0R2V0SW5mbyBJbmV0R2V0U2l6ZSBJbmV0UmVhZCBJbmlEZWxldGUgSW5pUmVhZCBJbmlSZWFkU2VjdGlvbiBJbmlSZWFkU2VjdGlvbk5hbWVzIEluaVJlbmFtZVNlY3Rpb24gSW5pV3JpdGUgSW5pV3JpdGVTZWN0aW9uIElucHV0Qm94IEludCBJc0FkbWluIElzQXJyYXkgSXNCaW5hcnkgSXNCb29sIElzRGVjbGFyZWQgSXNEbGxTdHJ1Y3QgSXNGbG9hdCBJc0Z1bmMgSXNIV25kIElzSW50IElzS2V5d29yZCBJc051bWJlciBJc09iaiBJc1B0ciBJc1N0cmluZyBMb2cgTWVtR2V0U3RhdHMgTW9kIE1vdXNlQ2xpY2sgTW91c2VDbGlja0RyYWcgTW91c2VEb3duIE1vdXNlR2V0Q3Vyc29yIE1vdXNlR2V0UG9zIE1vdXNlTW92ZSBNb3VzZVVwIE1vdXNlV2hlZWwgTXNnQm94IE51bWJlciBPYmpDcmVhdGUgT2JqQ3JlYXRlSW50ZXJmYWNlIE9iakV2ZW50IE9iakdldCBPYmpOYW1lIE9uQXV0b0l0RXhpdFJlZ2lzdGVyIE9uQXV0b0l0RXhpdFVuUmVnaXN0ZXIgUGluZyBQaXhlbENoZWNrc3VtIFBpeGVsR2V0Q29sb3IgUGl4ZWxTZWFyY2ggUHJvY2Vzc0Nsb3NlIFByb2Nlc3NFeGlzdHMgUHJvY2Vzc0dldFN0YXRzIFByb2Nlc3NMaXN0IFByb2Nlc3NTZXRQcmlvcml0eSBQcm9jZXNzV2FpdCBQcm9jZXNzV2FpdENsb3NlIFByb2dyZXNzT2ZmIFByb2dyZXNzT24gUHJvZ3Jlc3NTZXQgUHRyIFJhbmRvbSBSZWdEZWxldGUgUmVnRW51bUtleSBSZWdFbnVtVmFsIFJlZ1JlYWQgUmVnV3JpdGUgUm91bmQgUnVuIFJ1bkFzIFJ1bkFzV2FpdCBSdW5XYWl0IFNlbmQgU2VuZEtlZXBBY3RpdmUgU2V0RXJyb3IgU2V0RXh0ZW5kZWQgU2hlbGxFeGVjdXRlIFNoZWxsRXhlY3V0ZVdhaXQgU2h1dGRvd24gU2luIFNsZWVwIFNvdW5kUGxheSBTb3VuZFNldFdhdmVWb2x1bWUgU3BsYXNoSW1hZ2VPbiBTcGxhc2hPZmYgU3BsYXNoVGV4dE9uIFNxcnQgU1JhbmRvbSBTdGF0dXNiYXJHZXRUZXh0IFN0ZGVyclJlYWQgU3RkaW5Xcml0ZSBTdGRpb0Nsb3NlIFN0ZG91dFJlYWQgU3RyaW5nIFN0cmluZ0FkZENSIFN0cmluZ0NvbXBhcmUgU3RyaW5nRm9ybWF0IFN0cmluZ0Zyb21BU0NJSUFycmF5IFN0cmluZ0luU3RyIFN0cmluZ0lzQWxOdW0gU3RyaW5nSXNBbHBoYSBTdHJpbmdJc0FTQ0lJIFN0cmluZ0lzRGlnaXQgU3RyaW5nSXNGbG9hdCBTdHJpbmdJc0ludCBTdHJpbmdJc0xvd2VyIFN0cmluZ0lzU3BhY2UgU3RyaW5nSXNVcHBlciBTdHJpbmdJc1hEaWdpdCBTdHJpbmdMZWZ0IFN0cmluZ0xlbiBTdHJpbmdMb3dlciBTdHJpbmdNaWQgU3RyaW5nUmVnRXhwIFN0cmluZ1JlZ0V4cFJlcGxhY2UgU3RyaW5nUmVwbGFjZSBTdHJpbmdSZXZlcnNlIFN0cmluZ1JpZ2h0IFN0cmluZ1NwbGl0IFN0cmluZ1N0cmlwQ1IgU3RyaW5nU3RyaXBXUyBTdHJpbmdUb0FTQ0lJQXJyYXkgU3RyaW5nVG9CaW5hcnkgU3RyaW5nVHJpbUxlZnQgU3RyaW5nVHJpbVJpZ2h0IFN0cmluZ1VwcGVyIFRhbiBUQ1BBY2NlcHQgVENQQ2xvc2VTb2NrZXQgVENQQ29ubmVjdCBUQ1BMaXN0ZW4gVENQTmFtZVRvSVAgVENQUmVjdiBUQ1BTZW5kIFRDUFNodXRkb3duLCBVRFBTaHV0ZG93biBUQ1BTdGFydHVwLCBVRFBTdGFydHVwIFRpbWVyRGlmZiBUaW1lckluaXQgVG9vbFRpcCBUcmF5Q3JlYXRlSXRlbSBUcmF5Q3JlYXRlTWVudSBUcmF5R2V0TXNnIFRyYXlJdGVtRGVsZXRlIFRyYXlJdGVtR2V0SGFuZGxlIFRyYXlJdGVtR2V0U3RhdGUgVHJheUl0ZW1HZXRUZXh0IFRyYXlJdGVtU2V0T25FdmVudCBUcmF5SXRlbVNldFN0YXRlIFRyYXlJdGVtU2V0VGV4dCBUcmF5U2V0Q2xpY2sgVHJheVNldEljb24gVHJheVNldE9uRXZlbnQgVHJheVNldFBhdXNlSWNvbiBUcmF5U2V0U3RhdGUgVHJheVNldFRvb2xUaXAgVHJheVRpcCBVQm91bmQgVURQQmluZCBVRFBDbG9zZVNvY2tldCBVRFBPcGVuIFVEUFJlY3YgVURQU2VuZCBWYXJHZXRUeXBlIFdpbkFjdGl2YXRlIFdpbkFjdGl2ZSBXaW5DbG9zZSBXaW5FeGlzdHMgV2luRmxhc2ggV2luR2V0Q2FyZXRQb3MgV2luR2V0Q2xhc3NMaXN0IFdpbkdldENsaWVudFNpemUgV2luR2V0SGFuZGxlIFdpbkdldFBvcyBXaW5HZXRQcm9jZXNzIFdpbkdldFN0YXRlIFdpbkdldFRleHQgV2luR2V0VGl0bGUgV2luS2lsbCBXaW5MaXN0IFdpbk1lbnVTZWxlY3RJdGVtIFdpbk1pbmltaXplQWxsIFdpbk1pbmltaXplQWxsVW5kbyBXaW5Nb3ZlIFdpblNldE9uVG9wIFdpblNldFN0YXRlIFdpblNldFRpdGxlIFdpblNldFRyYW5zIFdpbldhaXQnLFxuXG4gICAgICAgIENPTU1FTlQgPSB7XG4gICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgICAgICAgICAgaGxqcy5DT01NRU5UKCcjY3MnLCAnI2NlJyksXG4gICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnI2NvbW1lbnRzLXN0YXJ0JywgJyNjb21tZW50cy1lbmQnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIFZBUklBQkxFID0ge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJFtBLXowLTlfXSsnXG4gICAgICAgIH0sXG5cbiAgICAgICAgU1RSSU5HID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbe1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgIGVuZDogL1wiLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW3tcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLycvLFxuICAgICAgICAgICAgICAgIGVuZDogLycvLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogLycnLyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgIH1dXG4gICAgICAgIH0sXG5cbiAgICAgICAgTlVNQkVSID0ge1xuICAgICAgICAgICAgdmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICAgICAgICB9LFxuXG4gICAgICAgIFBSRVBST0NFU1NPUiA9IHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgICAgIGVuZDogJyQnLFxuICAgICAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2NvbW1lbnRzIGluY2x1ZGUgaW5jbHVkZS1vbmNlIE5vVHJheUljb24gT25BdXRvSXRTdGFydFJlZ2lzdGVyIHByYWdtYSBjb21waWxlIFJlcXVpcmVBZG1pbid9LFxuICAgICAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFxcXFxcbi8sXG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICc8JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAnPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXCIvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cIlwiLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nLyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAvJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IC8nJy8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgICAgQ09NTUVOVFxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIENPTlNUQU5UID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIC8vIGJlZ2luOiAnQCcsXG4gICAgICAgICAgICAvLyBlbmQ6ICckJyxcbiAgICAgICAgICAgIC8vIGtleXdvcmRzOiAnQXBwRGF0YUNvbW1vbkRpciBBcHBEYXRhRGlyIEF1dG9JdEV4ZSBBdXRvSXRQSUQgQXV0b0l0VmVyc2lvbiBBdXRvSXRYNjQgQ09NX0V2ZW50T2JqIENvbW1vbkZpbGVzRGlyIENvbXBpbGVkIENvbXB1dGVyTmFtZSBDb21TcGVjIENQVUFyY2ggQ1IgQ1JMRiBEZXNrdG9wQ29tbW9uRGlyIERlc2t0b3BEZXB0aCBEZXNrdG9wRGlyIERlc2t0b3BIZWlnaHQgRGVza3RvcFJlZnJlc2ggRGVza3RvcFdpZHRoIERvY3VtZW50c0NvbW1vbkRpciBlcnJvciBleGl0Q29kZSBleGl0TWV0aG9kIGV4dGVuZGVkIEZhdm9yaXRlc0NvbW1vbkRpciBGYXZvcml0ZXNEaXIgR1VJX0N0cmxIYW5kbGUgR1VJX0N0cmxJZCBHVUlfRHJhZ0ZpbGUgR1VJX0RyYWdJZCBHVUlfRHJvcElkIEdVSV9XaW5IYW5kbGUgSG9tZURyaXZlIEhvbWVQYXRoIEhvbWVTaGFyZSBIb3RLZXlQcmVzc2VkIEhPVVIgSVBBZGRyZXNzMSBJUEFkZHJlc3MyIElQQWRkcmVzczMgSVBBZGRyZXNzNCBLQkxheW91dCBMRiBMb2NhbEFwcERhdGFEaXIgTG9nb25ETlNEb21haW4gTG9nb25Eb21haW4gTG9nb25TZXJ2ZXIgTURBWSBNSU4gTU9OIE1TRUMgTVVJTGFuZyBNeURvY3VtZW50c0RpciBOdW1QYXJhbXMgT1NBcmNoIE9TQnVpbGQgT1NMYW5nIE9TU2VydmljZVBhY2sgT1NUeXBlIE9TVmVyc2lvbiBQcm9ncmFtRmlsZXNEaXIgUHJvZ3JhbXNDb21tb25EaXIgUHJvZ3JhbXNEaXIgU2NyaXB0RGlyIFNjcmlwdEZ1bGxQYXRoIFNjcmlwdExpbmVOdW1iZXIgU2NyaXB0TmFtZSBTRUMgU3RhcnRNZW51Q29tbW9uRGlyIFN0YXJ0TWVudURpciBTdGFydHVwQ29tbW9uRGlyIFN0YXJ0dXBEaXIgU1dfRElTQUJMRSBTV19FTkFCTEUgU1dfSElERSBTV19MT0NLIFNXX01BWElNSVpFIFNXX01JTklNSVpFIFNXX1JFU1RPUkUgU1dfU0hPVyBTV19TSE9XREVGQVVMVCBTV19TSE9XTUFYSU1JWkVEIFNXX1NIT1dNSU5JTUlaRUQgU1dfU0hPV01JTk5PQUNUSVZFIFNXX1NIT1dOQSBTV19TSE9XTk9BQ1RJVkFURSBTV19TSE9XTk9STUFMIFNXX1VOTE9DSyBTeXN0ZW1EaXIgVEFCIFRlbXBEaXIgVFJBWV9JRCBUcmF5SWNvbkZsYXNoaW5nIFRyYXlJY29uVmlzaWJsZSBVc2VyTmFtZSBVc2VyUHJvZmlsZURpciBXREFZIFdpbmRvd3NEaXIgV29ya2luZ0RpciBZREFZIFlFQVInLFxuICAgICAgICAgICAgLy8gcmVsZXZhbmNlOiA1XG4gICAgICAgICAgICBiZWdpbjogJ0BbQS16MC05X10rJ1xuICAgICAgICB9LFxuXG4gICAgICAgIEZVTkNUSU9OID0ge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ0Z1bmMnLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXCR8XFxcXFt8JScsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLFxuICAgICAgICAgICAgICAgICAgICBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGJ1aWx0X2luOiBCVUlMVF9JTixcbiAgICAgICAgICAgIGxpdGVyYWw6IExJVEVSQUxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIENPTU1FTlQsXG4gICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgIE5VTUJFUixcbiAgICAgICAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgICAgICAgIENPTlNUQU5ULFxuICAgICAgICAgICAgRlVOQ1RJT05cbiAgICAgICAgXVxuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8qIG1uZW1vbmljICovXG4gICAgICAgICdhZGMgYWRkIGFkaXcgYW5kIGFuZGkgYXNyIGJjbHIgYmxkIGJyYmMgYnJicyBicmNjIGJyY3MgYnJlYWsgYnJlcSBicmdlIGJyaGMgYnJocyAnICtcbiAgICAgICAgJ2JyaWQgYnJpZSBicmxvIGJybHQgYnJtaSBicm5lIGJycGwgYnJzaCBicnRjIGJydHMgYnJ2YyBicnZzIGJzZXQgYnN0IGNhbGwgY2JpIGNiciAnICtcbiAgICAgICAgJ2NsYyBjbGggY2xpIGNsbiBjbHIgY2xzIGNsdCBjbHYgY2x6IGNvbSBjcCBjcGMgY3BpIGNwc2UgZGVjIGVpY2FsbCBlaWptcCBlbHBtIGVvciAnICtcbiAgICAgICAgJ2ZtdWwgZm11bHMgZm11bHN1IGljYWxsIGlqbXAgaW4gaW5jIGptcCBsZCBsZGQgbGRpIGxkcyBscG0gbHNsIGxzciBtb3YgbW92dyBtdWwgJyArXG4gICAgICAgICdtdWxzIG11bHN1IG5lZyBub3Agb3Igb3JpIG91dCBwb3AgcHVzaCByY2FsbCByZXQgcmV0aSByam1wIHJvbCByb3Igc2JjIHNiciBzYnJjIHNicnMgJyArXG4gICAgICAgICdzZWMgc2VoIHNiaSBzYmNpIHNiaWMgc2JpcyBzYml3IHNlaSBzZW4gc2VyIHNlcyBzZXQgc2V2IHNleiBzbGVlcCBzcG0gc3Qgc3RkIHN0cyBzdWIgJyArXG4gICAgICAgICdzdWJpIHN3YXAgdHN0IHdkcicsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLyogZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqL1xuICAgICAgICAncjAgcjEgcjIgcjMgcjQgcjUgcjYgcjcgcjggcjkgcjEwIHIxMSByMTIgcjEzIHIxNCByMTUgcjE2IHIxNyByMTggcjE5IHIyMCByMjEgcjIyICcgK1xuICAgICAgICAncjIzIHIyNCByMjUgcjI2IHIyNyByMjggcjI5IHIzMCByMzEgeHwwIHhoIHhsIHl8MCB5aCB5bCB6fDAgemggemwgJyArXG4gICAgICAgIC8qIElPIFJlZ2lzdGVycyAoQVRNZWdhMTI4KSAqL1xuICAgICAgICAndWNzcjFjIHVkcjEgdWNzcjFhIHVjc3IxYiB1YnJyMWwgdWJycjFoIHVjc3IwYyB1YnJyMGggdGNjcjNjIHRjY3IzYSB0Y2NyM2IgdGNudDNoICcgK1xuICAgICAgICAndGNudDNsIG9jcjNhaCBvY3IzYWwgb2NyM2JoIG9jcjNibCBvY3IzY2ggb2NyM2NsIGljcjNoIGljcjNsIGV0aW1zayBldGlmciB0Y2NyMWMgJyArXG4gICAgICAgICdvY3IxY2ggb2NyMWNsIHR3Y3IgdHdkciB0d2FyIHR3c3IgdHdiciBvc2NjYWwgeG1jcmEgeG1jcmIgZWljcmEgc3BtY3NyIHNwbWNyIHBvcnRnICcgK1xuICAgICAgICAnZGRyZyBwaW5nIHBvcnRmIGRkcmYgc3JlZyBzcGggc3BsIHhkaXYgcmFtcHogZWljcmIgZWltc2sgZ2ltc2sgZ2ljciBlaWZyIGdpZnIgdGltc2sgJyArXG4gICAgICAgICd0aWZyIG1jdWNyIG1jdWNzciB0Y2NyMCB0Y250MCBvY3IwIGFzc3IgdGNjcjFhIHRjY3IxYiB0Y250MWggdGNudDFsIG9jcjFhaCBvY3IxYWwgJyArXG4gICAgICAgICdvY3IxYmggb2NyMWJsIGljcjFoIGljcjFsIHRjY3IyIHRjbnQyIG9jcjIgb2NkciB3ZHRjciBzZmlvciBlZWFyaCBlZWFybCBlZWRyIGVlY3IgJyArXG4gICAgICAgICdwb3J0YSBkZHJhIHBpbmEgcG9ydGIgZGRyYiBwaW5iIHBvcnRjIGRkcmMgcGluYyBwb3J0ZCBkZHJkIHBpbmQgc3BkciBzcHNyIHNwY3IgdWRyMCAnICtcbiAgICAgICAgJ3Vjc3IwYSB1Y3NyMGIgdWJycjBsIGFjc3IgYWRtdXggYWRjc3IgYWRjaCBhZGNsIHBvcnRlIGRkcmUgcGluZSBwaW5mJyxcbiAgICAgIG1ldGE6XG4gICAgICAgICcuYnl0ZSAuY3NlZyAuZGIgLmRlZiAuZGV2aWNlIC5kc2VnIC5kdyAuZW5kbWFjcm8gLmVxdSAuZXNlZyAuZXhpdCAuaW5jbHVkZSAubGlzdCAnICtcbiAgICAgICAgJy5saXN0bWFjIC5tYWNybyAubm9saXN0IC5vcmcgLnNldCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnOycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLCAvLyAweC4uLiwgZGVjaW1hbCwgZmxvYXRcbiAgICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLCAvLyAwYi4uLlxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFwkW2EtekEtWjAtOV0rfDBvWzAtN10rKScgLy8gJC4uLiwgMG8uLi5cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1teXFxcXFxcXFxdXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1teXFxcXFxcXFxdW15cXCddJ1xuICAgICAgfSxcbiAgICAgIHtjbGFzc05hbWU6ICdzeW1ib2wnLCAgYmVnaW46ICdeW0EtWmEtejAtOV8uJF0rOid9LFxuICAgICAge2NsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyMnLCBlbmQ6ICckJ30sXG4gICAgICB7ICAvLyDQv9C+0LTRgdGC0LDQvdC+0LLQutCwINCyIMKrLm1hY3JvwrtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICBiZWdpbjogJ0BbMC05XSsnXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFwkW1xcd1xcZCNAXVtcXHdcXGRfXSovfSxcbiAgICAgIHtiZWdpbjogL1xcJFxceyguKj8pfS99XG4gICAgXVxuICB9O1xuICB2YXIgS0VZV09SRFMgPSAnQkVHSU4gRU5EIGlmIGVsc2Ugd2hpbGUgZG8gZm9yIGluIGJyZWFrIGNvbnRpbnVlIGRlbGV0ZSBuZXh0IG5leHRmaWxlIGZ1bmN0aW9uIGZ1bmMgZXhpdHwxMCc7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxiKT9yPycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8Yik/cj9cIlwiXCIvLCBlbmQ6IC9cIlwiXCIvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpJy8sIGVuZDogLycvLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyh1fHJ8dXIpXCIvLCBlbmQ6IC9cIi8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKGJ8YnIpJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhifGJyKVwiLywgZW5kOiAvXCIvXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgIF1cbiAgfTtcbiAgcmV0dXJuIHtcblx0IGtleXdvcmRzOiB7XG5cdCAgIGtleXdvcmQ6IEtFWVdPUkRTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLlJFR0VYUF9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6ICdmYWxzZSBpbnQgYWJzdHJhY3QgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgZm9yIHRydWUgJyArXG4gICAgICAnd2hpbGUgbG9uZyB0aHJvdyBmaW5hbGx5IHByb3RlY3RlZCBmaW5hbCByZXR1cm4gdm9pZCBlbnVtIGVsc2UgJyArXG4gICAgICAnYnJlYWsgbmV3IGNhdGNoIGJ5dGUgc3VwZXIgY2FzZSBzaG9ydCBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoICcgK1xuICAgICAgJ2NvbnRpbnVlIHJldmVyc2UgZmlyc3RmYXN0IGZpcnN0b25seSBmb3J1cGRhdGUgbm9mZXRjaCBzdW0gYXZnIG1pbm9mIG1heG9mIGNvdW50ICcgK1xuICAgICAgJ29yZGVyIGdyb3VwIGJ5IGFzYyBkZXNjIGluZGV4IGhpbnQgbGlrZSBkaXNwYWx5IGVkaXQgY2xpZW50IHNlcnZlciB0dHNiZWdpbiAnICtcbiAgICAgICd0dHNjb21taXQgc3RyIHJlYWwgZGF0ZSBjb250YWluZXIgYW55dHlwZSBjb21tb24gZGl2IG1vZCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnOicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFtcXHdcXGQjQF1bXFx3XFxkX10qL30sXG4gICAgICB7YmVnaW46IC9cXCRcXHsoLio/KX0vfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnc2gnLCAnenNoJ10sXG4gICAgbGV4ZW1lczogL1xcYi0/W2EtelxcLl9dK1xcYi8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpZiB0aGVuIGVsc2UgZWxpZiBmaSBmb3Igd2hpbGUgaW4gZG8gZG9uZSBjYXNlIGVzYWMgZnVuY3Rpb24nLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2UnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8vIFNoZWxsIGJ1aWx0LWluc1xuICAgICAgICAvLyBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxuICAgICAgICAnYnJlYWsgY2QgY29udGludWUgZXZhbCBleGVjIGV4aXQgZXhwb3J0IGdldG9wdHMgaGFzaCBwd2QgcmVhZG9ubHkgcmV0dXJuIHNoaWZ0IHRlc3QgdGltZXMgJyArXG4gICAgICAgICd0cmFwIHVtYXNrIHVuc2V0ICcgK1xuICAgICAgICAvLyBCYXNoIGJ1aWx0LWluc1xuICAgICAgICAnYWxpYXMgYmluZCBidWlsdGluIGNhbGxlciBjb21tYW5kIGRlY2xhcmUgZWNobyBlbmFibGUgaGVscCBsZXQgbG9jYWwgbG9nb3V0IG1hcGZpbGUgcHJpbnRmICcgK1xuICAgICAgICAncmVhZCByZWFkYXJyYXkgc291cmNlIHR5cGUgdHlwZXNldCB1bGltaXQgdW5hbGlhcyAnICtcbiAgICAgICAgLy8gU2hlbGwgbW9kaWZpZXJzXG4gICAgICAgICdzZXQgc2hvcHQgJyArXG4gICAgICAgIC8vIFpzaCBidWlsdC1pbnNcbiAgICAgICAgJ2F1dG9sb2FkIGJnIGJpbmRrZXkgYnllIGNhcCBjaGRpciBjbG9uZSBjb21wYXJndW1lbnRzIGNvbXBjYWxsIGNvbXBjdGwgY29tcGRlc2NyaWJlIGNvbXBmaWxlcyAnICtcbiAgICAgICAgJ2NvbXBncm91cHMgY29tcHF1b3RlIGNvbXB0YWdzIGNvbXB0cnkgY29tcHZhbHVlcyBkaXJzIGRpc2FibGUgZGlzb3duIGVjaG90YyBlY2hvdGkgZW11bGF0ZSAnICtcbiAgICAgICAgJ2ZjIGZnIGZsb2F0IGZ1bmN0aW9ucyBnZXRjYXAgZ2V0bG4gaGlzdG9yeSBpbnRlZ2VyIGpvYnMga2lsbCBsaW1pdCBsb2cgbm9nbG9iIHBvcGQgcHJpbnQgJyArXG4gICAgICAgICdwdXNoZCBwdXNobG4gcmVoYXNoIHNjaGVkIHNldGNhcCBzZXRvcHQgc3RhdCBzdXNwZW5kIHR0eWN0bCB1bmZ1bmN0aW9uIHVuaGFzaCB1bmxpbWl0ICcgK1xuICAgICAgICAndW5zZXRvcHQgdmFyZWQgd2FpdCB3aGVuY2Ugd2hlcmUgd2hpY2ggemNvbXBpbGUgemZvcm1hdCB6ZnRwIHpsZSB6bW9kbG9hZCB6cGFyc2VvcHRzIHpwcm9mICcgK1xuICAgICAgICAnenB0eSB6cmVnZXhwYXJzZSB6c29ja2V0IHpzdHlsZSB6dGNwJyxcbiAgICAgIF86XG4gICAgICAgICctbmUgLWVxIC1sdCAtZ3QgLWYgLWQgLWUgLXMgLWwgLWEnIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eIyFbXlxcbl0rc2hcXHMqJC8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46IC9cXHdbXFx3XFxkX10qXFxzKlxcKFxccypcXClcXHMqXFx7LyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAvXFx3W1xcd1xcZF9dKi99KV0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnXlxcLicsXG4gICAgLy8gU3VwcG9ydCBleHBsaWNpdGVseSB0eXBlZCB2YXJpYWJsZXMgdGhhdCBlbmQgd2l0aCAkJSEgb3IgIy5cbiAgICBsZXhlbWVzOiAnW2EtekEtWl1bYS16QS1aMC05X1xcJFxcJVxcIVxcI10qJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICdBQlMgQVNDIEFORCBBVE4gQVVUT3wwIEJFRVAgQkxPQUR8MTAgQlNBVkV8MTAgQ0FMTCBDQUxMUyBDREJMIENIQUlOIENIRElSIENIUiR8MTAgQ0lOVCBDSVJDTEUgJyArXG4gICAgICAgICAgJ0NMRUFSIENMT1NFIENMUyBDT0xPUiBDT00gQ09NTU9OIENPTlQgQ09TIENTTkcgQ1NSTElOIENWRCBDVkkgQ1ZTIERBVEEgREFURSQgJyArXG4gICAgICAgICAgJ0RFRkRCTCBERUZJTlQgREVGU05HIERFRlNUUiBERUZ8MCBTRUcgVVNSIERFTEVURSBESU0gRFJBVyBFRElUIEVORCBFTlZJUk9OIEVOVklST04kICcgK1xuICAgICAgICAgICdFT0YgRVFWIEVSQVNFIEVSREVWIEVSREVWJCBFUkwgRVJSIEVSUk9SIEVYUCBGSUVMRCBGSUxFUyBGSVggRk9SfDAgRlJFIEdFVCBHT1NVQnwxMCBHT1RPICcgK1xuICAgICAgICAgICdIRVgkIElGfDAgVEhFTiBFTFNFfDAgSU5LRVkkIElOUCBJTlBVVCBJTlBVVCMgSU5QVVQkIElOU1RSIElNUCBJTlQgSU9DVEwgSU9DVEwkIEtFWSBPTiAnICtcbiAgICAgICAgICAnT0ZGIExJU1QgS0lMTCBMRUZUJCBMRU4gTEVUIExJTkUgTExJU1QgTE9BRCBMT0MgTE9DQVRFIExPRiBMT0cgTFBSSU5UIFVTSU5HIExTRVQgJyArXG4gICAgICAgICAgJ01FUkdFIE1JRCQgTUtESVIgTUtEJCBNS0kkIE1LUyQgTU9EIE5BTUUgTkVXIE5FWFQgTk9JU0UgTk9UIE9DVCQgT04gT1IgUEVOIFBMQVkgU1RSSUcgT1BFTiBPUFRJT04gJyArXG4gICAgICAgICAgJ0JBU0UgT1VUIFBBSU5UIFBBTEVUVEUgUENPUFkgUEVFSyBQTUFQIFBPSU5UIFBPS0UgUE9TIFBSSU5UIFBSSU5UXSBQU0VUIFBSRVNFVCAnICtcbiAgICAgICAgICAnUFVUIFJBTkRPTUlaRSBSRUFEIFJFTSBSRU5VTSBSRVNFVHwwIFJFU1RPUkUgUkVTVU1FIFJFVFVSTnwwIFJJR0hUJCBSTURJUiBSTkQgUlNFVCAnICtcbiAgICAgICAgICAnUlVOIFNBVkUgU0NSRUVOIFNHTiBTSEVMTCBTSU4gU09VTkQgU1BBQ0UkIFNQQyBTUVIgU1RFUCBTVElDSyBTVE9QIFNUUiQgU1RSSU5HJCBTV0FQICcgK1xuICAgICAgICAgICdTWVNURU0gVEFCIFRBTiBUSU1FJCBUSU1FUiBUUk9GRiBUUk9OIFRPIFVTUiBWQUwgVkFSUFRSIFZBUlBUUiQgVklFVyBXQUlUIFdISUxFICcgK1xuICAgICAgICAgICdXRU5EIFdJRFRIIFdJTkRPVyBXUklURSBYT1InXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnUkVNJywgJyQnLCB7cmVsZXZhbmNlOiAxMH0pLFxuICAgICAgaGxqcy5DT01NRU5UKCdcXCcnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgLy8gTWF0Y2ggbGluZSBudW1iZXJzXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAnXlswLTldK1xcICcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIHR5cGVkIG51bWVyaWMgY29uc3RhbnRzICgxMDAwLCAxMi4zNCEsIDEuMmU1LCAxLjUjLCAxLjJEMilcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYihbMC05XStbMC05ZWRFRFxcLl0qWyNcXCFdPyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIE1hdGNoIGhleGFkZWNpbWFsIG51bWJlcnMgKCZIeHh4eClcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoXFwmW2hIXVswLTlhLWZBLUZdezEsNH0pJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gTWF0Y2ggb2N0YWwgbnVtYmVycyAoJk94eHh4eHgpXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKFxcJltvT11bMC03XXsxLDZ9KSdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcyl7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIEF0dHJpYnV0ZVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogLzwvLCBlbmQ6IC8+L1xuICAgICAgfSxcbiAgICAgIC8vIFNwZWNpZmljXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvOjo9LyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBDb21tb25cbiAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpe1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogJ1tcXFxcK1xcXFwtXScsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydiZiddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdbXlxcXFxbXFxcXF1cXFxcLixcXFxcK1xcXFwtPD4gXFxyXFxuXScsXG4gICAgICAgICdbXFxcXFtcXFxcXVxcXFwuLFxcXFwrXFxcXC08PiBcXHJcXG5dJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ1tcXFxcW1xcXFxdXScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdbXFxcXC4sXScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gdGhpcyBtb2RlIHdvcmtzIGFzIHRoZSBvbmx5IHJlbGV2YW5jZSBjb3VudGVyXG4gICAgICAgIGJlZ2luOiAvXFwrXFwrfFxcLVxcLS8sIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW0xJVEVSQUxdXG4gICAgICB9LFxuICAgICAgTElURVJBTFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2RpdiBtb2QgaW4gYW5kIG9yIG5vdCB4b3IgYXNzZXJ0ZXJyb3IgYmVnaW4gY2FzZSBkbyBkb3dudG8gZWxzZSBlbmQgZXhpdCBmb3IgaWYgb2YgcmVwZWF0IHRoZW4gdG8gJyArXG4gICAgJ3VudGlsIHdoaWxlIHdpdGggdmFyJztcbiAgdmFyIExJVEVSQUxTID0gJ2ZhbHNlIHRydWUnO1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgL1xcey8sXG4gICAgICAvXFx9LyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgKSxcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAvXFwoXFwqLyxcbiAgICAgIC9cXCpcXCkvLFxuICAgICAge1xuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9XG4gICAgKVxuICBdO1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy8sXG4gICAgY29udGFpbnM6IFt7YmVnaW46IC8nJy99XVxuICB9O1xuICB2YXIgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46IC8oI1xcZCspKy9cbiAgfTtcbiAgdmFyIERBVEUgPSB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICdcXFxcYlxcXFxkKyhcXFxcLlxcXFxkKyk/KERUfER8VCknLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBEQkxfUVVPVEVEX1ZBUklBQkxFID0ge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gbm90IGEgc3RyaW5nIHRlY2huaWNhbGx5IGJ1dCBtYWtlcyBzZW5zZSB0byBiZSBoaWdobGlnaHRlZCBpbiB0aGUgc2FtZSBzdHlsZVxuICAgICAgYmVnaW46ICdcIicsXG4gICAgICBlbmQ6ICdcIidcbiAgfTtcblxuICB2YXIgUFJPQ0VEVVJFID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbktleXdvcmRzOiAncHJvY2VkdXJlJywgZW5kOiAvWzo7XS8sXG4gICAga2V5d29yZHM6ICdwcm9jZWR1cmV8MTAnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1NUUklORywgQ0hBUl9TVFJJTkddXG4gICAgICB9XG4gICAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgfTtcblxuICB2YXIgT0JKRUNUID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogJ09CSkVDVCAoVGFibGV8Rm9ybXxSZXBvcnR8RGF0YXBvcnR8Q29kZXVuaXR8WE1McG9ydHxNZW51U3VpdGV8UGFnZXxRdWVyeSkgKFxcXFxkKykgKFteXFxcXHJcXFxcbl0rKScsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgICAgUFJPQ0VEVVJFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogeyBrZXl3b3JkOiBLRVlXT1JEUywgbGl0ZXJhbDogTElURVJBTFMgfSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwqLyxcbiAgICBjb250YWluczogW1xuICAgICAgU1RSSU5HLCBDSEFSX1NUUklORyxcbiAgICAgIERBVEUsIERCTF9RVU9URURfVkFSSUFCTEUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgT0JKRUNULFxuICAgICAgUFJPQ0VEVVJFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NhcG5wJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdzdHJ1Y3QgZW51bSBpbnRlcmZhY2UgdW5pb24gZ3JvdXAgaW1wb3J0IHVzaW5nIGNvbnN0IGFubm90YXRpb24gZXh0ZW5kcyBpbiBvZiBvbiBhcyB3aXRoIGZyb20gZml4ZWQnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdWb2lkIEJvb2wgSW50OCBJbnQxNiBJbnQzMiBJbnQ2NCBVSW50OCBVSW50MTYgVUludDMyIFVJbnQ2NCBGbG9hdDMyIEZsb2F0NjQgJyArXG4gICAgICAgICdUZXh0IERhdGEgQW55UG9pbnRlciBBbnlTdHJ1Y3QgQ2FwYWJpbGl0eSBMaXN0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvQDB4W1xcd1xcZF17MTZ9Oy8sXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogL0BcXGQrXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0nLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlJywgZW5kOiAvXFx7LyxcbiAgICAgICAgaWxsZWdhbDogL1xcbi8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgc3RhcnRzOiB7ZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWV9IC8vIGhhY2s6IGVhdGluZyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCB0aXRsZVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyAyLjMuIElkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuICB2YXIgS0VZV09SRFMgPVxuICAgICdhc3NlbWJseSBtb2R1bGUgcGFja2FnZSBpbXBvcnQgYWxpYXMgY2xhc3MgaW50ZXJmYWNlIG9iamVjdCBnaXZlbiB2YWx1ZSAnICtcbiAgICAnYXNzaWduIHZvaWQgZnVuY3Rpb24gbmV3IG9mIGV4dGVuZHMgc2F0aXNmaWVzIGFic3RyYWN0cyBpbiBvdXQgcmV0dXJuICcgK1xuICAgICdicmVhayBjb250aW51ZSB0aHJvdyBhc3NlcnQgZHluYW1pYyBpZiBlbHNlIHN3aXRjaCBjYXNlIGZvciB3aGlsZSB0cnkgJyArXG4gICAgJ2NhdGNoIGZpbmFsbHkgdGhlbiBsZXQgdGhpcyBvdXRlciBzdXBlciBpcyBleGlzdHMgbm9uZW1wdHknO1xuICAvLyA3LjQuMSBEZWNsYXJhdGlvbiBNb2RpZmllcnNcbiAgdmFyIERFQ0xBUkFUSU9OX01PRElGSUVSUyA9XG4gICAgJ3NoYXJlZCBhYnN0cmFjdCBmb3JtYWwgZGVmYXVsdCBhY3R1YWwgdmFyaWFibGUgbGF0ZSBuYXRpdmUgZGVwcmVjYXRlZCcgK1xuICAgICdmaW5hbCBzZWFsZWQgYW5ub3RhdGlvbiBzdXBwcmVzc1dhcm5pbmdzIHNtYWxsJztcbiAgLy8gNy40LjIgRG9jdW1lbnRhdGlvblxuICB2YXIgRE9DVU1FTlRBVElPTiA9XG4gICAgJ2RvYyBieSBsaWNlbnNlIHNlZSB0aHJvd3MgdGFnZ2VkJztcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JywgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGJlZ2luOiAvYGAvLCBlbmQ6IC9gYC8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcbiAgdmFyIEVYUFJFU1NJT05TID0gW1xuICAgIHtcbiAgICAgIC8vIHZlcmJhdGltIHN0cmluZ1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiAnXCJcIlwiJyxcbiAgICAgIGVuZDogJ1wiXCJcIicsXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBzdHJpbmcgbGl0ZXJhbCBvciB0ZW1wbGF0ZVxuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICBjb250YWluczogW1NVQlNUXVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gY2hhcmFjdGVyIGxpdGVyYWxcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogXCInXCIsXG4gICAgICBlbmQ6IFwiJ1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBudW1lcmljIGxpdGVyYWxcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyNbMC05YS1mQS1GX10rfFxcXFwkWzAxX10rfFswLTlfXSsoPzpcXFxcLlswLTlfXSg/OltlRV1bKy1dP1xcXFxkKyk/KT9ba01HVFBtdW5wZl0/JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBFWFBSRVNTSU9OUztcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyArICcgJyArIERFQ0xBUkFUSU9OX01PRElGSUVSUyxcbiAgICAgIG1ldGE6IERPQ1VNRU5UQVRJT05cbiAgICB9LFxuICAgIGlsbGVnYWw6ICdcXFxcJFteMDFdfCNbXjAtOWEtZkEtRl0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nLCB7Y29udGFpbnM6IFsnc2VsZiddfSksXG4gICAgICB7XG4gICAgICAgIC8vIGNvbXBpbGVyIGFubm90YXRpb25cbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnQFthLXpdXFxcXHcqKD86XFxcXDpcXFwiW15cXFwiXSpcXFwiKT8nXG4gICAgICB9XG4gICAgXS5jb25jYXQoRVhQUkVTU0lPTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY2xlYW4nLCdpY2wnLCdkY2wnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2lmIGxldCBpbiB3aXRoIHdoZXJlIGNhc2Ugb2YgY2xhc3MgaW5zdGFuY2Ugb3RoZXJ3aXNlICcgK1xuICAgICAgICAnaW1wbGVtZW50YXRpb24gZGVmaW5pdGlvbiBzeXN0ZW0gbW9kdWxlIGZyb20gaW1wb3J0IHF1YWxpZmllZCBhcyAnICtcbiAgICAgICAgJ3NwZWNpYWwgY29kZSBpbmxpbmUgZm9yZWlnbiBleHBvcnQgY2NhbGwgc3RkY2FsbCBnZW5lcmljIGRlcml2ZSAnICtcbiAgICAgICAgJ2luZml4IGluZml4bCBpbmZpeHInLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ1RydWUgRmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcblxuICAgICAge2JlZ2luOiAnLT58PC1bfDpdP3w6OnwjIT98Pj49fFxcXFx7XFxcXHx8XFxcXHxcXFxcfXw6PT18PTp8XFxcXC5cXFxcLnw8PnxgJ30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIga2V5d29yZHMgPSB7XG4gICAgJ2J1aWx0aW4tbmFtZSc6XG4gICAgICAvLyBDbG9qdXJlIGtleXdvcmRzXG4gICAgICAnZGVmIGRlZm9uY2UgY29uZCBhcHBseSBpZi1ub3QgaWYtbGV0IGlmIG5vdCBub3Q9ID0gPCA+IDw9ID49ID09ICsgLyAqIC0gcmVtICcrXG4gICAgICAncXVvdCBuZWc/IHBvcz8gZGVsYXk/IHN5bWJvbD8ga2V5d29yZD8gdHJ1ZT8gZmFsc2U/IGludGVnZXI/IGVtcHR5PyBjb2xsPyBsaXN0PyAnK1xuICAgICAgJ3NldD8gaWZuPyBmbj8gYXNzb2NpYXRpdmU/IHNlcXVlbnRpYWw/IHNvcnRlZD8gY291bnRlZD8gcmV2ZXJzaWJsZT8gbnVtYmVyPyBkZWNpbWFsPyAnK1xuICAgICAgJ2NsYXNzPyBkaXN0aW5jdD8gaXNhPyBmbG9hdD8gcmF0aW9uYWw/IHJlZHVjZWQ/IHJhdGlvPyBvZGQ/IGV2ZW4/IGNoYXI/IHNlcT8gdmVjdG9yPyAnK1xuICAgICAgJ3N0cmluZz8gbWFwPyBuaWw/IGNvbnRhaW5zPyB6ZXJvPyBpbnN0YW5jZT8gbm90LWV2ZXJ5PyBub3QtYW55PyBsaWJzcGVjPyAtPiAtPj4gLi4gLiAnK1xuICAgICAgJ2luYyBjb21wYXJlIGRvIGRvdGltZXMgbWFwY2F0IHRha2UgcmVtb3ZlIHRha2Utd2hpbGUgZHJvcCBsZXRmbiBkcm9wLWxhc3QgdGFrZS1sYXN0ICcrXG4gICAgICAnZHJvcC13aGlsZSB3aGlsZSBpbnRlcm4gY29uZHAgY2FzZSByZWR1Y2VkIGN5Y2xlIHNwbGl0LWF0IHNwbGl0LXdpdGggcmVwZWF0IHJlcGxpY2F0ZSAnK1xuICAgICAgJ2l0ZXJhdGUgcmFuZ2UgbWVyZ2UgemlwbWFwIGRlY2xhcmUgbGluZS1zZXEgc29ydCBjb21wYXJhdG9yIHNvcnQtYnkgZG9ydW4gZG9hbGwgbnRobmV4dCAnK1xuICAgICAgJ250aHJlc3QgcGFydGl0aW9uIGV2YWwgZG9zZXEgYXdhaXQgYXdhaXQtZm9yIGxldCBhZ2VudCBhdG9tIHNlbmQgc2VuZC1vZmYgcmVsZWFzZS1wZW5kaW5nLXNlbmRzICcrXG4gICAgICAnYWRkLXdhdGNoIG1hcHYgZmlsdGVydiByZW1vdmUtd2F0Y2ggYWdlbnQtZXJyb3IgcmVzdGFydC1hZ2VudCBzZXQtZXJyb3ItaGFuZGxlciBlcnJvci1oYW5kbGVyICcrXG4gICAgICAnc2V0LWVycm9yLW1vZGUhIGVycm9yLW1vZGUgc2h1dGRvd24tYWdlbnRzIHF1b3RlIHZhciBmbiBsb29wIHJlY3VyIHRocm93IHRyeSBtb25pdG9yLWVudGVyICcrXG4gICAgICAnbW9uaXRvci1leGl0IGRlZm1hY3JvIGRlZm4gZGVmbi0gbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBmb3IgZG9zeW5jIGFuZCBvciAnK1xuICAgICAgJ3doZW4gd2hlbi1ub3Qgd2hlbi1sZXQgY29tcCBqdXh0IHBhcnRpYWwgc2VxdWVuY2UgbWVtb2l6ZSBjb25zdGFudGx5IGNvbXBsZW1lbnQgaWRlbnRpdHkgYXNzZXJ0ICcrXG4gICAgICAncGVlayBwb3AgZG90byBwcm94eSBkZWZzdHJ1Y3QgZmlyc3QgcmVzdCBjb25zIGRlZnByb3RvY29sIGNhc3QgY29sbCBkZWZ0eXBlIGRlZnJlY29yZCBsYXN0IGJ1dGxhc3QgJytcbiAgICAgICdzaWdzIHJlaWZ5IHNlY29uZCBmZmlyc3QgZm5leHQgbmZpcnN0IG5uZXh0IGRlZm11bHRpIGRlZm1ldGhvZCBtZXRhIHdpdGgtbWV0YSBucyBpbi1ucyBjcmVhdGUtbnMgaW1wb3J0ICcrXG4gICAgICAncmVmZXIga2V5cyBzZWxlY3Qta2V5cyB2YWxzIGtleSB2YWwgcnNlcSBuYW1lIG5hbWVzcGFjZSBwcm9taXNlIGludG8gdHJhbnNpZW50IHBlcnNpc3RlbnQhIGNvbmohICcrXG4gICAgICAnYXNzb2MhIGRpc3NvYyEgcG9wISBkaXNqISB1c2UgY2xhc3MgdHlwZSBudW0gZmxvYXQgZG91YmxlIHNob3J0IGJ5dGUgYm9vbGVhbiBiaWdpbnQgYmlnaW50ZWdlciAnK1xuICAgICAgJ2JpZ2RlYyBwcmludC1tZXRob2QgcHJpbnQtZHVwIHRocm93LWlmIHByaW50ZiBmb3JtYXQgbG9hZCBjb21waWxlIGdldC1pbiB1cGRhdGUtaW4gcHIgcHItb24gbmV3bGluZSAnK1xuICAgICAgJ2ZsdXNoIHJlYWQgc2x1cnAgcmVhZC1saW5lIHN1YnZlYyB3aXRoLW9wZW4gbWVtZm4gdGltZSByZS1maW5kIHJlLWdyb3VwcyByYW5kLWludCByYW5kIG1vZCBsb2NraW5nICcrXG4gICAgICAnYXNzZXJ0LXZhbGlkLWZkZWNsIGFsaWFzIHJlc29sdmUgcmVmIGRlcmVmIHJlZnNldCBzd2FwISByZXNldCEgc2V0LXZhbGlkYXRvciEgY29tcGFyZS1hbmQtc2V0ISBhbHRlci1tZXRhISAnK1xuICAgICAgJ3Jlc2V0LW1ldGEhIGNvbW11dGUgZ2V0LXZhbGlkYXRvciBhbHRlciByZWYtc2V0IHJlZi1oaXN0b3J5LWNvdW50IHJlZi1taW4taGlzdG9yeSByZWYtbWF4LWhpc3RvcnkgZW5zdXJlIHN5bmMgaW8hICcrXG4gICAgICAnbmV3IG5leHQgY29uaiBzZXQhIHRvLWFycmF5IGZ1dHVyZSBmdXR1cmUtY2FsbCBpbnRvLWFycmF5IGFzZXQgZ2VuLWNsYXNzIHJlZHVjZSBtYXAgZmlsdGVyIGZpbmQgZW1wdHkgJytcbiAgICAgICdoYXNoLW1hcCBoYXNoLXNldCBzb3J0ZWQtbWFwIHNvcnRlZC1tYXAtYnkgc29ydGVkLXNldCBzb3J0ZWQtc2V0LWJ5IHZlYyB2ZWN0b3Igc2VxIGZsYXR0ZW4gcmV2ZXJzZSBhc3NvYyBkaXNzb2MgbGlzdCAnK1xuICAgICAgJ2Rpc2ogZ2V0IHVuaW9uIGRpZmZlcmVuY2UgaW50ZXJzZWN0aW9uIGV4dGVuZCBleHRlbmQtdHlwZSBleHRlbmQtcHJvdG9jb2wgaW50IG50aCBkZWxheSBjb3VudCBjb25jYXQgY2h1bmsgY2h1bmstYnVmZmVyICcrXG4gICAgICAnY2h1bmstYXBwZW5kIGNodW5rLWZpcnN0IGNodW5rLXJlc3QgbWF4IG1pbiBkZWMgdW5jaGVja2VkLWluYy1pbnQgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtZGVjLWluYyB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1uZWdhdGUgJytcbiAgICAgICd1bmNoZWNrZWQtYWRkLWludCB1bmNoZWNrZWQtYWRkIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgdW5jaGVja2VkLXN1YnRyYWN0IGNodW5rLW5leHQgY2h1bmstY29ucyBjaHVua2VkLXNlcT8gcHJuIHZhcnktbWV0YSAnK1xuICAgICAgJ2xhenktc2VxIHNwcmVhZCBsaXN0KiBzdHIgZmluZC1rZXl3b3JkIGtleXdvcmQgc3ltYm9sIGdlbnN5bSBmb3JjZSByYXRpb25hbGl6ZSdcbiAgIH07XG5cbiAgdmFyIFNZTUJPTFNUQVJUID0gJ2EtekEtWl9cXFxcLSEuPysqPTw+JiNcXCcnO1xuICB2YXIgU1lNQk9MX1JFID0gJ1snICsgU1lNQk9MU1RBUlQgKyAnXVsnICsgU1lNQk9MU1RBUlQgKyAnMC05Lzs6XSonO1xuICB2YXIgU0lNUExFX05VTUJFUl9SRSA9ICdbLStdP1xcXFxkKyhcXFxcLlxcXFxkKyk/JztcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46IFNJTVBMRV9OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KTtcbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzsnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFxiKHRydWV8ZmFsc2V8bmlsKVxcYi9cbiAgfTtcbiAgdmFyIENPTExFQ1RJT04gPSB7XG4gICAgYmVnaW46ICdbXFxcXFtcXFxce10nLCBlbmQ6ICdbXFxcXF1cXFxcfV0nXG4gIH07XG4gIHZhciBISU5UID0ge1xuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAnXFxcXF4nICsgU1lNQk9MX1JFXG4gIH07XG4gIHZhciBISU5UX0NPTCA9IGhsanMuQ09NTUVOVCgnXFxcXF5cXFxceycsICdcXFxcfScpO1xuICB2YXIgS0VZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdbOl17MSwyfScgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIE5BTUUgPSB7XG4gICAga2V5d29yZHM6IGtleXdvcmRzLFxuICAgIGxleGVtZXM6IFNZTUJPTF9SRSxcbiAgICBjbGFzc05hbWU6ICduYW1lJywgYmVnaW46IFNZTUJPTF9SRSxcbiAgICBzdGFydHM6IEJPRFlcbiAgfTtcbiAgdmFyIERFRkFVTFRfQ09OVEFJTlMgPSBbTElTVCwgU1RSSU5HLCBISU5ULCBISU5UX0NPTCwgQ09NTUVOVCwgS0VZLCBDT0xMRUNUSU9OLCBOVU1CRVIsIExJVEVSQUwsIFNZTUJPTF07XG5cbiAgTElTVC5jb250YWlucyA9IFtobGpzLkNPTU1FTlQoJ2NvbW1lbnQnLCAnJyksIE5BTUUsIEJPRFldO1xuICBCT0RZLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcbiAgQ09MTEVDVElPTi5jb250YWlucyA9IERFRkFVTFRfQ09OVEFJTlM7XG4gIEhJTlRfQ09MLmNvbnRhaW5zID0gW0NPTExFQ1RJT05dO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjbGonXSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW0xJU1QsIFNUUklORywgSElOVCwgSElOVF9DT0wsIENPTU1FTlQsIEtFWSwgQ09MTEVDVElPTiwgTlVNQkVSLCBMSVRFUkFMXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL14oW1xcdy4tXSt8XFxzKiNfKT0+LyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAvJC8sXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdjbG9qdXJlJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY21ha2UuaW4nXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWRkX2N1c3RvbV9jb21tYW5kIGFkZF9jdXN0b21fdGFyZ2V0IGFkZF9kZWZpbml0aW9ucyBhZGRfZGVwZW5kZW5jaWVzICcgK1xuICAgICAgICAnYWRkX2V4ZWN1dGFibGUgYWRkX2xpYnJhcnkgYWRkX3N1YmRpcmVjdG9yeSBhZGRfdGVzdCBhdXhfc291cmNlX2RpcmVjdG9yeSAnICtcbiAgICAgICAgJ2JyZWFrIGJ1aWxkX2NvbW1hbmQgY21ha2VfbWluaW11bV9yZXF1aXJlZCBjbWFrZV9wb2xpY3kgY29uZmlndXJlX2ZpbGUgJyArXG4gICAgICAgICdjcmVhdGVfdGVzdF9zb3VyY2VsaXN0IGRlZmluZV9wcm9wZXJ0eSBlbHNlIGVsc2VpZiBlbmFibGVfbGFuZ3VhZ2UgZW5hYmxlX3Rlc3RpbmcgJyArXG4gICAgICAgICdlbmRmb3JlYWNoIGVuZGZ1bmN0aW9uIGVuZGlmIGVuZG1hY3JvIGVuZHdoaWxlIGV4ZWN1dGVfcHJvY2VzcyBleHBvcnQgZmluZF9maWxlICcgK1xuICAgICAgICAnZmluZF9saWJyYXJ5IGZpbmRfcGFja2FnZSBmaW5kX3BhdGggZmluZF9wcm9ncmFtIGZsdGtfd3JhcF91aSBmb3JlYWNoIGZ1bmN0aW9uICcgK1xuICAgICAgICAnZ2V0X2NtYWtlX3Byb3BlcnR5IGdldF9kaXJlY3RvcnlfcHJvcGVydHkgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCBnZXRfcHJvcGVydHkgJyArXG4gICAgICAgICdnZXRfc291cmNlX2ZpbGVfcHJvcGVydHkgZ2V0X3RhcmdldF9wcm9wZXJ0eSBnZXRfdGVzdF9wcm9wZXJ0eSBpZiBpbmNsdWRlICcgK1xuICAgICAgICAnaW5jbHVkZV9kaXJlY3RvcmllcyBpbmNsdWRlX2V4dGVybmFsX21zcHJvamVjdCBpbmNsdWRlX3JlZ3VsYXJfZXhwcmVzc2lvbiBpbnN0YWxsICcgK1xuICAgICAgICAnbGlua19kaXJlY3RvcmllcyBsb2FkX2NhY2hlIGxvYWRfY29tbWFuZCBtYWNybyBtYXJrX2FzX2FkdmFuY2VkIG1lc3NhZ2Ugb3B0aW9uICcgK1xuICAgICAgICAnb3V0cHV0X3JlcXVpcmVkX2ZpbGVzIHByb2plY3QgcXRfd3JhcF9jcHAgcXRfd3JhcF91aSByZW1vdmVfZGVmaW5pdGlvbnMgcmV0dXJuICcgK1xuICAgICAgICAnc2VwYXJhdGVfYXJndW1lbnRzIHNldCBzZXRfZGlyZWN0b3J5X3Byb3BlcnRpZXMgc2V0X3Byb3BlcnR5ICcgK1xuICAgICAgICAnc2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzIHNldF90YXJnZXRfcHJvcGVydGllcyBzZXRfdGVzdHNfcHJvcGVydGllcyBzaXRlX25hbWUgJyArXG4gICAgICAgICdzb3VyY2VfZ3JvdXAgc3RyaW5nIHRhcmdldF9saW5rX2xpYnJhcmllcyB0cnlfY29tcGlsZSB0cnlfcnVuIHVuc2V0IHZhcmlhYmxlX3dhdGNoICcgK1xuICAgICAgICAnd2hpbGUgYnVpbGRfbmFtZSBleGVjX3Byb2dyYW0gZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzIGluc3RhbGxfZmlsZXMgJyArXG4gICAgICAgICdpbnN0YWxsX3Byb2dyYW1zIGluc3RhbGxfdGFyZ2V0cyBsaW5rX2xpYnJhcmllcyBtYWtlX2RpcmVjdG9yeSByZW1vdmUgc3ViZGlyX2RlcGVuZHMgJyArXG4gICAgICAgICdzdWJkaXJzIHVzZV9tYW5nbGVkX21lc2EgdXRpbGl0eV9zb3VyY2UgdmFyaWFibGVfcmVxdWlyZXMgd3JpdGVfZmlsZSAnICtcbiAgICAgICAgJ3F0NV91c2VfbW9kdWxlcyBxdDVfdXNlX3BhY2thZ2UgcXQ1X3dyYXBfY3BwIG9uIG9mZiB0cnVlIGZhbHNlIGFuZCBvciAnICtcbiAgICAgICAgJ2VxdWFsIGxlc3MgZ3JlYXRlciBzdHJsZXNzIHN0cmdyZWF0ZXIgc3RyZXF1YWwgbWF0Y2hlcydcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcJHsnLCBlbmQ6ICd9J1xuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgLy8gSlMga2V5d29yZHNcbiAgICAgICdpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyAnICtcbiAgICAgICdzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBzdXBlciB5aWVsZCBpbXBvcnQgZXhwb3J0IGZyb20gYXMgZGVmYXVsdCBhd2FpdCAnICtcbiAgICAgIC8vIENvZmZlZSBrZXl3b3Jkc1xuICAgICAgJ3RoZW4gdW5sZXNzIHVudGlsIGxvb3Agb2YgYnkgd2hlbiBhbmQgb3IgaXMgaXNudCBub3QnLFxuICAgIGxpdGVyYWw6XG4gICAgICAvLyBKUyBsaXRlcmFsc1xuICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgJyArXG4gICAgICAvLyBDb2ZmZWUgbGl0ZXJhbHNcbiAgICAgICd5ZXMgbm8gb24gb2ZmJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICducG0gcmVxdWlyZSBjb25zb2xlIHByaW50IG1vZHVsZSBnbG9iYWwgd2luZG93IGRvY3VtZW50J1xuICB9O1xuICB2YXIgSlNfSURFTlRfUkUgPSAnW0EtWmEteiRfXVswLTlBLVphLXokX10qJztcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogLyNcXHsvLCBlbmQ6IC99LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFNcbiAgfTtcbiAgdmFyIEVYUFJFU1NJT05TID0gW1xuICAgIGhsanMuQklOQVJZX05VTUJFUl9NT0RFLFxuICAgIGhsanMuaW5oZXJpdChobGpzLkNfTlVNQkVSX01PREUsIHtzdGFydHM6IHtlbmQ6ICcoXFxcXHMqLyk/JywgcmVsZXZhbmNlOiAwfX0pLCAvLyBhIG51bWJlciB0cmllcyB0byBlYXQgdGhlIGZvbGxvd2luZyBzbGFzaCB0byBwcmV2ZW50IHRyZWF0aW5nIGl0IGFzIGEgcmVnZXhwXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogLycvLCBlbmQ6IC8nLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvXCJcIlwiLywgZW5kOiAvXCJcIlwiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJy8vLycsIGVuZDogJy8vLycsXG4gICAgICAgICAgY29udGFpbnM6IFtTVUJTVCwgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy9bZ2ltXSonLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgLy8gcmVnZXggY2FuJ3Qgc3RhcnQgd2l0aCBzcGFjZSB0byBwYXJzZSB4IC8gMiAvIDMgYXMgdHdvIGRpdmlzaW9uc1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggKiwgYW5kIGl0IHN1cHBvcnRzIGFuIFwiaWxsZWdhbFwiIGluIHRoZSBtYWluIG1vZGVcbiAgICAgICAgICBiZWdpbjogL1xcLyg/IVsgKl0pKFxcXFxcXC98LikqP1xcL1tnaW1dKig/PVxcV3wkKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdAJyArIEpTX0lERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgfSxcbiAgICB7XG4gICAgICBzdWJMYW5ndWFnZTogJ2phdmFzY3JpcHQnLFxuICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYGBgJywgZW5kOiAnYGBgJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVYUFJFU1NJT05TO1xuXG4gIHZhciBUSVRMRSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSlNfSURFTlRfUkV9KTtcbiAgdmFyIFBBUkFNU19SRSA9ICcoXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstPV0+JztcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXChbXlxcXFwoXScsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIC8qIFdlIG5lZWQgYW5vdGhlciBjb250YWluZWQgbmFtZWxlc3MgbW9kZSB0byBub3QgaGF2ZSBldmVyeSBuZXN0ZWRcbiAgICBwYWlyIG9mIHBhcmVucyB0byBiZSBjYWxsZWQgXCJwYXJhbXNcIiAqL1xuICAgIGNvbnRhaW5zOiBbe1xuICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICB9XVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydjb2ZmZWUnLCAnY3NvbicsICdpY2VkJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCcjIyMnLCAnIyMjJyksXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9uIHN0YXJ0XG4gICAgICAgIGJlZ2luOiAvWzpcXCgsPV1cXHMqLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBKU19JREVOVF9SRSArICc6JywgZW5kOiAnOicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnXyBhcyBhdCBjb2ZpeCBlbHNlIGVuZCBleGlzdHMgZXhpc3RzMiBmaXggZm9yIGZvcmFsbCBmdW4gaWYgSUYgaW4gbGV0ICcgK1xuICAgICAgICAnbWF0Y2ggbW9kIFByb3AgcmV0dXJuIFNldCB0aGVuIFR5cGUgdXNpbmcgd2hlcmUgd2l0aCAnICtcbiAgICAgICAgJ0Fib3J0IEFib3V0IEFkZCBBZG1pdCBBZG1pdHRlZCBBbGwgQXJndW1lbnRzIEFzc3VtcHRpb25zIEF4aW9tIEJhY2sgQmFja1RvICcgK1xuICAgICAgICAnQmFja3RyYWNrIEJpbmQgQmxhY2tsaXN0IENhbm9uaWNhbCBDZCBDaGVjayBDbGFzcyBDbGFzc2VzIENsb3NlIENvZXJjaW9uICcgK1xuICAgICAgICAnQ29lcmNpb25zIENvRml4cG9pbnQgQ29JbmR1Y3RpdmUgQ29sbGVjdGlvbiBDb21iaW5lZCBDb21wdXRlIENvbmplY3R1cmUgJyArXG4gICAgICAgICdDb25qZWN0dXJlcyBDb25zdGFudCBjb25zdHIgQ29uc3RyYWludCBDb25zdHJ1Y3RvcnMgQ29udGV4dCBDb3JvbGxhcnkgJyArXG4gICAgICAgICdDcmVhdGVIaW50RGIgQ3V0IERlY2xhcmUgRGVmaW5lZCBEZWZpbml0aW9uIERlbGltaXQgRGVwZW5kZW5jaWVzIERlcGVuZGVudCcgK1xuICAgICAgICAnRGVyaXZlIERyb3AgZWF1dG8gRW5kIEVxdWFsaXR5IEV2YWwgRXhhbXBsZSBFeGlzdGVudGlhbCBFeGlzdGVudGlhbHMgJyArXG4gICAgICAgICdFeGlzdGluZyBFeHBvcnQgZXhwb3J0aW5nIEV4dGVybiBFeHRyYWN0IEV4dHJhY3Rpb24gRmFjdCBGaWVsZCBGaWVsZHMgRmlsZSAnICtcbiAgICAgICAgJ0ZpeHBvaW50IEZvY3VzIGZvciBGcm9tIEZ1bmN0aW9uIEZ1bmN0aW9uYWwgR2VuZXJhbGl6YWJsZSBHbG9iYWwgR29hbCBHcmFiICcgK1xuICAgICAgICAnR3JhbW1hciBHcmFwaCBHdWFyZGVkIEhlYXAgSGludCBIaW50RGIgSGludHMgSHlwb3RoZXNlcyBIeXBvdGhlc2lzIGlkZW50ICcgK1xuICAgICAgICAnSWRlbnRpdHkgSWYgSW1tZWRpYXRlIEltcGxpY2l0IEltcG9ydCBJbmNsdWRlIEluZHVjdGl2ZSBJbmZpeCBJbmZvIEluaXRpYWwgJyArXG4gICAgICAgICdJbmxpbmUgSW5zcGVjdCBJbnN0YW5jZSBJbnN0YW5jZXMgSW50cm8gSW50cm9zIEludmVyc2lvbiBJbnZlcnNpb25fY2xlYXIgJyArXG4gICAgICAgICdMYW5ndWFnZSBMZWZ0IExlbW1hIExldCBMaWJyYXJpZXMgTGlicmFyeSBMb2FkIExvYWRQYXRoIExvY2FsIExvY2F0ZSBMdGFjIE1MICcgK1xuICAgICAgICAnTW9kZSBNb2R1bGUgTW9kdWxlcyBNb25vbW9ycGhpYyBNb3JwaGlzbSBOZXh0IE5vSW5saW5lIE5vdGF0aW9uIE9ibGlnYXRpb24gJyArXG4gICAgICAgICdPYmxpZ2F0aW9ucyBPcGFxdWUgT3BlbiBPcHRpbWl6ZSBPcHRpb25zIFBhcmFtZXRlciBQYXJhbWV0ZXJzIFBhcmFtZXRyaWMgJyArXG4gICAgICAgICdQYXRoIFBhdGhzIHBhdHRlcm4gUG9seW1vcnBoaWMgUHJldGVybSBQcmludCBQcmludGluZyBQcm9ncmFtIFByb2plY3Rpb25zICcgK1xuICAgICAgICAnUHJvb2YgUHJvcG9zaXRpb24gUHdkIFFlZCBRdWl0IFJlYyBSZWNvcmQgUmVjdXJzaXZlIFJlZGlyZWN0IFJlbGF0aW9uIFJlbWFyayAnICtcbiAgICAgICAgJ1JlbW92ZSBSZXF1aXJlIFJlc2VydmVkIFJlc2V0IFJlc29sdmUgUmVzdGFydCBSZXdyaXRlIFJpZ2h0IFJpbmcgUmluZ3MgU2F2ZSAnICtcbiAgICAgICAgJ1NjaGVtZSBTY29wZSBTY29wZXMgU2NyaXB0IFNlYXJjaCBTZWFyY2hBYm91dCBTZWFyY2hIZWFkIFNlYXJjaFBhdHRlcm4gJyArXG4gICAgICAgICdTZWFyY2hSZXdyaXRlIFNlY3Rpb24gU2VwYXJhdGUgU2V0IFNldG9pZCBTaG93IFNvbHZlIFNvcnRlZCBTdGVwIFN0cmF0ZWdpZXMgJyArXG4gICAgICAgICdTdHJhdGVneSBTdHJ1Y3R1cmUgU3ViQ2xhc3MgVGFibGUgVGFibGVzIFRhY3RpYyBUZXJtIFRlc3QgVGhlb3JlbSBUaW1lICcgK1xuICAgICAgICAnVGltZW91dCBUcmFuc3BhcmVudCBUeXBlIFR5cGVjbGFzc2VzIFR5cGVzIFVuZGVsaW1pdCBVbmRvIFVuZm9jdXMgVW5mb2N1c2VkICcgK1xuICAgICAgICAnVW5mb2xkIFVuaXZlcnNlIFVuaXZlcnNlcyBVbnNldCBVbnNoZWx2ZSB1c2luZyBWYXJpYWJsZSBWYXJpYWJsZXMgVmFyaWFudCAnICtcbiAgICAgICAgJ1ZlcmJvc2UgVmlzaWJpbGl0eSB3aGVyZSB3aXRoJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYWJzdHJhY3QgYWJzdXJkIGFkbWl0IGFmdGVyIGFwcGx5IGFzIGFzc2VydCBhc3N1bXB0aW9uIGF0IGF1dG8gYXV0b3Jld3JpdGUgJyArXG4gICAgICAgICdhdXRvdW5mb2xkIGJlZm9yZSBib3R0b20gYnRhdXRvIGJ5IGNhc2UgY2FzZV9lcSBjYm4gY2J2IGNoYW5nZSAnICtcbiAgICAgICAgJ2NsYXNzaWNhbF9sZWZ0IGNsYXNzaWNhbF9yaWdodCBjbGVhciBjbGVhcmJvZHkgY29maXggY29tcGFyZSBjb21wdXRlICcgK1xuICAgICAgICAnY29uZ3J1ZW5jZSBjb25zdHJfZXEgY29uc3RydWN0b3IgY29udHJhZGljdCBjb250cmFkaWN0aW9uIGN1dCBjdXRyZXdyaXRlICcgK1xuICAgICAgICAnY3ljbGUgZGVjaWRlIGRlY29tcG9zZSBkZXBlbmRlbnQgZGVzdHJ1Y3QgZGVzdHJ1Y3Rpb24gZGludHVpdGlvbiAnICtcbiAgICAgICAgJ2Rpc2NyaW1pbmF0ZSBkaXNjclIgZG8gZG91YmxlIGR0YXV0byBlYXBwbHkgZWFzc3VtcHRpb24gZWF1dG8gZWNhc2UgJyArXG4gICAgICAgICdlY29uc3RydWN0b3IgZWRlc3RydWN0IGVkaXNjcmltaW5hdGUgZWVsaW0gZWV4YWN0IGVleGlzdHMgZWluZHVjdGlvbiAnICtcbiAgICAgICAgJ2VpbmplY3Rpb24gZWxlZnQgZWxpbSBlbGltdHlwZSBlbm91Z2ggZXF1YWxpdHkgZXJld3JpdGUgZXJpZ2h0ICcgK1xuICAgICAgICAnZXNpbXBsaWZ5X2VxIGVzcGxpdCBldmFyIGV4YWN0IGV4YWN0bHlfb25jZSBleGZhbHNvIGV4aXN0cyBmX2VxdWFsIGZhaWwgJyArXG4gICAgICAgICdmaWVsZCBmaWVsZF9zaW1wbGlmeSBmaWVsZF9zaW1wbGlmeV9lcSBmaXJzdCBmaXJzdG9yZGVyIGZpeCBmb2xkIGZvdXJpZXIgJyArXG4gICAgICAgICdmdW5jdGlvbmFsIGdlbmVyYWxpemUgZ2VuZXJhbGl6aW5nIGdmYWlsIGdpdmVfdXAgaGFzX2V2YXIgaG5mIGlkdGFjIGluICcgK1xuICAgICAgICAnaW5kdWN0aW9uIGluamVjdGlvbiBpbnN0YW50aWF0ZSBpbnRybyBpbnRyb19wYXR0ZXJuIGludHJvcyBpbnR1aXRpb24gJyArXG4gICAgICAgICdpbnZlcnNpb24gaW52ZXJzaW9uX2NsZWFyIGlzX2V2YXIgaXNfdmFyIGxhcHBseSBsYXp5IGxlZnQgbGlhIGxyYSBtb3ZlICcgK1xuICAgICAgICAnbmF0aXZlX2NvbXB1dGUgbmlhIG5zYXR6IG9tZWdhIG9uY2UgcGF0dGVybiBwb3NlIHByb2dyZXNzIHByb29mIHBzYXR6IHF1b3RlICcgK1xuICAgICAgICAncmVjb3JkIHJlZCByZWZpbmUgcmVmbGV4aXZpdHkgcmVtZW1iZXIgcmVuYW1lIHJlcGVhdCByZXBsYWNlIHJldmVydCAnICtcbiAgICAgICAgJ3JldmdvYWxzIHJld3JpdGUgcmV3cml0ZV9zdHJhdCByaWdodCByaW5nIHJpbmdfc2ltcGxpZnkgcnRhdXRvIHNldCAnICtcbiAgICAgICAgJ3NldG9pZF9yZWZsZXhpdml0eSBzZXRvaWRfcmVwbGFjZSBzZXRvaWRfcmV3cml0ZSBzZXRvaWRfc3ltbWV0cnkgJyArXG4gICAgICAgICdzZXRvaWRfdHJhbnNpdGl2aXR5IHNoZWx2ZSBzaGVsdmVfdW5pZmlhYmxlIHNpbXBsIHNpbXBsZSBzaW1wbGlmeV9lcSBzb2x2ZSAnICtcbiAgICAgICAgJ3NwZWNpYWxpemUgc3BsaXQgc3BsaXRfUmFicyBzcGxpdF9SbXVsdCBzdGVwbCBzdGVwciBzdWJzdCBzdW0gc3dhcCAnICtcbiAgICAgICAgJ3N5bW1ldHJ5IHRhY3RpYyB0YXV0byB0aW1lIHRpbWVvdXQgdG9wIHRyYW5zaXRpdml0eSB0cml2aWFsIHRyeSB0cnlpZiAnICtcbiAgICAgICAgJ3VuZm9sZCB1bmlmeSB1bnRpbCB1c2luZyB2bV9jb21wdXRlIHdpdGgnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXFxcXChcXFxcKicsICdcXFxcKlxcXFwpJyksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGJlZ2luOiAnXFxcXHxcXFxccyonLFxuICAgICAgICBlbmQ6ICdcXFxcdysnXG4gICAgICB9LFxuICAgICAge2JlZ2luOiAvWy09XT4vfSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3MgKGhsanMpIHtcblxuICB2YXIgU1RSSU5HUyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICBlbmQ6ICdcIicsXG4gICAgICAgIGNvbnRhaW5zOiBbeyAvLyBlc2NhcGVkXG4gICAgICAgICAgYmVnaW46IFwiXFxcIlxcXCJcIixcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE5VTUJFUlMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm51bWJlclwiLFxuICAgIGJlZ2luOiBcIlxcXFxiKFxcXFxkKyhcXFxcLlxcXFxkKik/fFxcXFwuXFxcXGQrKVwiLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDT1NfS0VZV09SRFMgPVxuICAgICdwcm9wZXJ0eSBwYXJhbWV0ZXIgY2xhc3MgY2xhc3NtZXRob2QgY2xpZW50bWV0aG9kIGV4dGVuZHMgYXMgYnJlYWsgJyArXG4gICAgJ2NhdGNoIGNsb3NlIGNvbnRpbnVlIGRvIGR8MCBlbHNlIGVsc2VpZiBmb3IgZ290byBoYWx0IGhhbmcgaHwwIGlmIGpvYiAnICtcbiAgICAnanwwIGtpbGwga3wwIGxvY2sgbHwwIG1lcmdlIG5ldyBvcGVuIHF1aXQgcXwwIHJlYWQgcnwwIHJldHVybiBzZXQgc3wwICcgK1xuICAgICd0Y29tbWl0IHRocm93IHRyb2xsYmFjayB0cnkgdHN0YXJ0IHVzZSB2aWV3IHdoaWxlIHdyaXRlIHd8MCB4ZWN1dGUgeHwwICcgK1xuICAgICd6a2lsbCB6bnNwYWNlIHpuIHp0cmFwIHp3cml0ZSB6dyB6emR1bXAgenp3cml0ZSBwcmludCB6YnJlYWsgemluc2VydCAnICtcbiAgICAnemxvYWQgenByaW50IHpyZW1vdmUgenNhdmUgenpwcmludCBtdiBtdmNhbGwgbXZjcnQgbXZkaW0gbXZwcmludCB6cXVpdCAnICtcbiAgICAnenN5bmMgYXNjaWknO1xuXG4gICAgLy8gcmVnaXN0ZXJlZCBmdW5jdGlvbiAtIG5vIG5lZWQgaW4gdGhlbSBkdWUgdG8gYWxsIGZ1bmN0aW9ucyBhcmUgaGlnaGxpZ2h0ZWQsXG4gICAgLy8gYnV0IEknbGwganVzdCBsZWF2ZSB0aGlzIGhlcmUuXG5cbiAgICAvL1wiJGJpdFwiLCBcIiRiaXRjb3VudFwiLFxuICAgIC8vXCIkYml0ZmluZFwiLCBcIiRiaXRsb2dpY1wiLCBcIiRjYXNlXCIsIFwiJGNoYXJcIiwgXCIkY2xhc3NtZXRob2RcIiwgXCIkY2xhc3NuYW1lXCIsXG4gICAgLy9cIiRjb21waWxlXCIsIFwiJGRhdGFcIiwgXCIkZGVjaW1hbFwiLCBcIiRkb3VibGVcIiwgXCIkZXh0cmFjdFwiLCBcIiRmYWN0b3JcIixcbiAgICAvL1wiJGZpbmRcIiwgXCIkZm51bWJlclwiLCBcIiRnZXRcIiwgXCIkaW5jcmVtZW50XCIsIFwiJGludW1iZXJcIiwgXCIkaXNvYmplY3RcIixcbiAgICAvL1wiJGlzdmFsaWRkb3VibGVcIiwgXCIkaXN2YWxpZG51bVwiLCBcIiRqdXN0aWZ5XCIsIFwiJGxlbmd0aFwiLCBcIiRsaXN0XCIsXG4gICAgLy9cIiRsaXN0YnVpbGRcIiwgXCIkbGlzdGRhdGFcIiwgXCIkbGlzdGZpbmRcIiwgXCIkbGlzdGZyb21zdHJpbmdcIiwgXCIkbGlzdGdldFwiLFxuICAgIC8vXCIkbGlzdGxlbmd0aFwiLCBcIiRsaXN0bmV4dFwiLCBcIiRsaXN0c2FtZVwiLCBcIiRsaXN0dG9zdHJpbmdcIiwgXCIkbGlzdHZhbGlkXCIsXG4gICAgLy9cIiRsb2NhdGVcIiwgXCIkbWF0Y2hcIiwgXCIkbWV0aG9kXCIsIFwiJG5hbWVcIiwgXCIkbmNvbnZlcnRcIiwgXCIkbmV4dFwiLFxuICAgIC8vXCIkbm9ybWFsaXplXCIsIFwiJG5vd1wiLCBcIiRudW1iZXJcIiwgXCIkb3JkZXJcIiwgXCIkcGFyYW1ldGVyXCIsIFwiJHBpZWNlXCIsXG4gICAgLy9cIiRwcmVmZXRjaG9mZlwiLCBcIiRwcmVmZXRjaG9uXCIsIFwiJHByb3BlcnR5XCIsIFwiJHFsZW5ndGhcIiwgXCIkcXN1YnNjcmlwdFwiLFxuICAgIC8vXCIkcXVlcnlcIiwgXCIkcmFuZG9tXCIsIFwiJHJlcGxhY2VcIiwgXCIkcmV2ZXJzZVwiLCBcIiRzY29udmVydFwiLCBcIiRzZWxlY3RcIixcbiAgICAvL1wiJHNvcnRiZWdpblwiLCBcIiRzb3J0ZW5kXCIsIFwiJHN0YWNrXCIsIFwiJHRleHRcIiwgXCIkdHJhbnNsYXRlXCIsIFwiJHZpZXdcIixcbiAgICAvL1wiJHdhc2NpaVwiLCBcIiR3Y2hhclwiLCBcIiR3ZXh0cmFjdFwiLCBcIiR3ZmluZFwiLCBcIiR3aXN3aWRlXCIsIFwiJHdsZW5ndGhcIixcbiAgICAvL1wiJHdyZXZlcnNlXCIsIFwiJHhlY3V0ZVwiLCBcIiR6YWJzXCIsIFwiJHphcmNjb3NcIiwgXCIkemFyY3NpblwiLCBcIiR6YXJjdGFuXCIsXG4gICAgLy9cIiR6Y29zXCIsIFwiJHpjb3RcIiwgXCIkemNzY1wiLCBcIiR6ZGF0ZVwiLCBcIiR6ZGF0ZWhcIiwgXCIkemRhdGV0aW1lXCIsXG4gICAgLy9cIiR6ZGF0ZXRpbWVoXCIsIFwiJHpleHBcIiwgXCIkemhleFwiLCBcIiR6bG5cIiwgXCIkemxvZ1wiLCBcIiR6cG93ZXJcIiwgXCIkenNlY1wiLFxuICAgIC8vXCIkenNpblwiLCBcIiR6c3FyXCIsIFwiJHp0YW5cIiwgXCIkenRpbWVcIiwgXCIkenRpbWVoXCIsIFwiJHpib29sZWFuXCIsXG4gICAgLy9cIiR6Y29udmVydFwiLCBcIiR6Y3JjXCIsIFwiJHpjeWNcIiwgXCIkemRhc2NpaVwiLCBcIiR6ZGNoYXJcIiwgXCIkemZcIixcbiAgICAvL1wiJHppc3dpZGVcIiwgXCIkemxhc2NpaVwiLCBcIiR6bGNoYXJcIiwgXCIkem5hbWVcIiwgXCIkenBvc2l0aW9uXCIsIFwiJHpxYXNjaWlcIixcbiAgICAvL1wiJHpxY2hhclwiLCBcIiR6c2VhcmNoXCIsIFwiJHpzZWVrXCIsIFwiJHpzdHJpcFwiLCBcIiR6d2FzY2lpXCIsIFwiJHp3Y2hhclwiLFxuICAgIC8vXCIkendpZHRoXCIsIFwiJHp3cGFja1wiLCBcIiR6d2JwYWNrXCIsIFwiJHp3dW5wYWNrXCIsIFwiJHp3YnVucGFja1wiLCBcIiR6emVua2FrdVwiLFxuICAgIC8vXCIkY2hhbmdlXCIsIFwiJG12XCIsIFwiJG12YXRcIiwgXCIkbXZmbXRcIiwgXCIkbXZmbXRzXCIsIFwiJG12aWNvbnZcIixcbiAgICAvL1wiJG12aWNvbnZzXCIsIFwiJG12aW5tYXRcIiwgXCIkbXZsb3ZlclwiLCBcIiRtdm9jb252XCIsIFwiJG12b2NvbnZzXCIsIFwiJG12cmFpc2VcIixcbiAgICAvL1wiJG12dHJhbnNcIiwgXCIkbXZ2XCIsIFwiJG12bmFtZVwiLCBcIiR6Yml0YW5kXCIsIFwiJHpiaXRjb3VudFwiLCBcIiR6Yml0ZmluZFwiLFxuICAgIC8vXCIkemJpdGdldFwiLCBcIiR6Yml0bGVuXCIsIFwiJHpiaXRub3RcIiwgXCIkemJpdG9yXCIsIFwiJHpiaXRzZXRcIiwgXCIkemJpdHN0clwiLFxuICAgIC8vXCIkemJpdHhvclwiLCBcIiR6aW5jcmVtZW50XCIsIFwiJHpuZXh0XCIsIFwiJHpvcmRlclwiLCBcIiR6cHJldmlvdXNcIiwgXCIkenNvcnRcIixcbiAgICAvL1wiZGV2aWNlXCIsIFwiJGVjb2RlXCIsIFwiJGVzdGFja1wiLCBcIiRldHJhcFwiLCBcIiRoYWx0XCIsIFwiJGhvcm9sb2dcIixcbiAgICAvL1wiJGlvXCIsIFwiJGpvYlwiLCBcIiRrZXlcIiwgXCIkbmFtZXNwYWNlXCIsIFwiJHByaW5jaXBhbFwiLCBcIiRxdWl0XCIsIFwiJHJvbGVzXCIsXG4gICAgLy9cIiRzdG9yYWdlXCIsIFwiJHN5c3RlbVwiLCBcIiR0ZXN0XCIsIFwiJHRoaXNcIiwgXCIkdGxldmVsXCIsIFwiJHVzZXJuYW1lXCIsXG4gICAgLy9cIiR4XCIsIFwiJHlcIiwgXCIkemFcIiwgXCIkemJcIiwgXCIkemNoaWxkXCIsIFwiJHplb2ZcIiwgXCIkemVvc1wiLCBcIiR6ZXJyb3JcIixcbiAgICAvL1wiJHpob3JvbG9nXCIsIFwiJHppb1wiLCBcIiR6am9iXCIsIFwiJHptb2RlXCIsIFwiJHpuc3BhY2VcIiwgXCIkenBhcmVudFwiLCBcIiR6cGlcIixcbiAgICAvL1wiJHpwb3NcIiwgXCIkenJlZmVyZW5jZVwiLCBcIiR6c3RvcmFnZVwiLCBcIiR6dGltZXN0YW1wXCIsIFwiJHp0aW1lem9uZVwiLFxuICAgIC8vXCIkenRyYXBcIiwgXCIkenZlcnNpb25cIlxuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbXCJjb3NcIiwgXCJjbHNcIl0sXG4gICAga2V5d29yZHM6IENPU19LRVlXT1JEUyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSUyxcbiAgICAgIFNUUklOR1MsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IFwiY29tbWVudFwiLFxuICAgICAgICBiZWdpbjogLzsvLCBlbmQ6IFwiJFwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIEZ1bmN0aW9ucyBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczogd3JpdGUgJHp0aW1lKDYwKjYwKjMpLCAkJG15RnVuYygxMCksICQkXlZhbCgxKVxuICAgICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgICAgYmVnaW46IC8oPzpcXCRcXCQ/fFxcLlxcLilcXF4/W2EtekEtWl0rL1xuICAgICAgfSxcbiAgICAgIHsgLy8gTWFjcm8gY29tbWFuZDogcXVpdCAkJCRPS1xuICAgICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgICAgYmVnaW46IC9cXCRcXCRcXCRbYS16QS1aXSsvXG4gICAgICB9LFxuICAgICAgeyAvLyBTcGVjaWFsIChnbG9iYWwpIHZhcmlhYmxlczogd3JpdGUgJXJlcXVlc3QuQ29udGVudDsgQnVpbHQtaW4gY2xhc3NlczogJUxpYnJhcnkuSW50ZWdlclxuICAgICAgICBjbGFzc05hbWU6IFwiYnVpbHRfaW5cIixcbiAgICAgICAgYmVnaW46IC8lW2Etel0rKD86XFwuW2Etel0rKSovXG4gICAgICB9LFxuICAgICAgeyAvLyBHbG9iYWwgdmFyaWFibGU6IHNldCBeZ2xvYmFsTmFtZSA9IDEyIHdyaXRlIF5nbG9iYWxOYW1lXG4gICAgICAgIGNsYXNzTmFtZTogXCJzeW1ib2xcIixcbiAgICAgICAgYmVnaW46IC9cXF4lP1thLXpBLVpdW1xcd10qL1xuICAgICAgfSxcbiAgICAgIHsgLy8gU29tZSBjb250cm9sIGNvbnN0cnVjdGlvbnM6IGRvICMjY2xhc3MoUGFja2FnZS5DbGFzc05hbWUpLk1ldGhvZCgpLCAjI3N1cGVyKClcbiAgICAgICAgY2xhc3NOYW1lOiBcImtleXdvcmRcIixcbiAgICAgICAgYmVnaW46IC8jI2NsYXNzfCMjc3VwZXJ8I2RlZmluZXwjZGltL1xuICAgICAgfSxcblxuICAgICAgLy8gc3ViLWxhbmd1YWdlczogYXJlIG5vdCBmdWxseSBzdXBwb3J0ZWQgYnkgaGxqcyBieSAxMS8xNS8yMDE1XG4gICAgICAvLyBsZWZ0IGZvciB0aGUgZnV0dXJlIGltcGxlbWVudGF0aW9uLlxuICAgICAge1xuICAgICAgICBiZWdpbjogLyZzcWxcXCgvLCAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN1Ykxhbmd1YWdlOiBcInNxbFwiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyYoanN8anNjcmlwdHxqYXZhc2NyaXB0KTwvLCBlbmQ6IC8+LyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdWJMYW5ndWFnZTogXCJqYXZhc2NyaXB0XCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIHRoaXMgYnJha2VzIGZpcnN0IGFuZCBsYXN0IHRhZywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGVtYmVkIGEgdmFsaWQgaHRtbFxuICAgICAgICBiZWdpbjogLyZodG1sPFxccyo8LywgZW5kOiAvPlxccyo+LyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6IFwieG1sXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUkVTT1VSQ0VTID0gJ3ByaW1pdGl2ZSByc2NfdGVtcGxhdGUnO1xuXG4gIHZhciBDT01NQU5EUyA9ICdncm91cCBjbG9uZSBtcyBtYXN0ZXIgbG9jYXRpb24gY29sb2NhdGlvbiBvcmRlciBmZW5jaW5nX3RvcG9sb2d5ICcgK1xuICAgICAgJ3JzY190aWNrZXQgYWNsX3RhcmdldCBhY2xfZ3JvdXAgdXNlciByb2xlICcgK1xuICAgICAgJ3RhZyB4bWwnO1xuXG4gIHZhciBQUk9QRVJUWV9TRVRTID0gJ3Byb3BlcnR5IHJzY19kZWZhdWx0cyBvcF9kZWZhdWx0cyc7XG5cbiAgdmFyIEtFWVdPUkRTID0gJ3BhcmFtcyBtZXRhIG9wZXJhdGlvbnMgb3AgcnVsZSBhdHRyaWJ1dGVzIHV0aWxpemF0aW9uJztcblxuICB2YXIgT1BFUkFUT1JTID0gJ3JlYWQgd3JpdGUgZGVueSBkZWZpbmVkIG5vdF9kZWZpbmVkIGluX3JhbmdlIGRhdGUgc3BlYyBpbiAnICtcbiAgICAgICdyZWYgcmVmZXJlbmNlIGF0dHJpYnV0ZSB0eXBlIHhwYXRoIHZlcnNpb24gYW5kIG9yIGx0IGd0IHRhZyAnICtcbiAgICAgICdsdGUgZ3RlIGVxIG5lIFxcXFwnO1xuXG4gIHZhciBUWVBFUyA9ICdudW1iZXIgc3RyaW5nJztcblxuICB2YXIgTElURVJBTFMgPSAnTWFzdGVyIFN0YXJ0ZWQgU2xhdmUgU3RvcHBlZCBzdGFydCBwcm9tb3RlIGRlbW90ZSBzdG9wIG1vbml0b3IgdHJ1ZSBmYWxzZSc7XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2NybScsICdwY21rJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMgKyAnICcgKyBPUEVSQVRPUlMgKyAnICcgKyBUWVBFUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25vZGUnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICdcXFxccyooW1xcXFx3Xy1dKzopPycsXG4gICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccypbXFxcXCRcXFxcd19dW1xcXFx3Xy1dKidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IFJFU09VUkNFUyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgIGVuZDogJ1xcXFxzKltcXFxcJFxcXFx3X11bXFxcXHdfLV0qJyxcbiAgICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKkA/W1xcXFx3X11bXFxcXHdfXFxcXC46LV0qJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYignICsgQ09NTUFORFMuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKVxcXFxzKycsXG4gICAgICAgIGtleXdvcmRzOiBDT01NQU5EUyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgIGVuZDogJ1tcXFxcJFxcXFx3X11bXFxcXHdfLV0qJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiBQUk9QRVJUWV9TRVRTLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgICAgZW5kOiAnXFxcXHMqKFtcXFxcd18tXSs6KT8nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcob2NmfHN5c3RlbWR8c2VydmljZXxsc2IpOltcXFxcd186LV0rJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8obXN8c3xofG0pPycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnWy1dPyhpbmZpbml0eXxpbmYpJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IC8oW0EtWmEtelxcJF9cXCNdW1xcd18tXSspPS8sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICAgICAgYmVnaW46ICc8Lz8nLFxuICAgICAgICBlbmQ6ICcvPz4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNX1NVRkZJWCA9ICcoX1t1aWZdKDh8MTZ8MzJ8NjQpKT8nO1xuICB2YXIgQ1JZU1RBTF9JREVOVF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT8nO1xuICB2YXIgUkVfU1RBUlRFUiA9ICchPXwhPT18JXwlPXwmfCYmfCY9fFxcXFwqfFxcXFwqPXxcXFxcK3xcXFxcKz18LHwtfC09fC89fC98Onw7fDw8fDw8PXw8PXw8fD09PXw9PXw9fD4+Pj18Pj49fD49fD4+PnwnICtcbiAgICAnPj58PnxcXFxcW3xcXFxce3xcXFxcKHxcXFxcXnxcXFxcXj18XFxcXHx8XFxcXHw9fFxcXFx8XFxcXHx8fic7XG4gIHZhciBDUllTVEFMX01FVEhPRF9SRSA9ICdbYS16QS1aX11cXFxcdypbIT89XT98Wy0rfl1cXFxcQHw8PHw+Pnw9fnw9PT0/fDw9PnxbPD5dPT98XFxcXCpcXFxcKnxbLS8rJV4mKn5gfF18XFxcXFtcXFxcXVs9P10/JztcbiAgdmFyIENSWVNUQUxfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhYnN0cmFjdCBhbGlhcyBhcyBhcz8gYXNtIGJlZ2luIGJyZWFrIGNhc2UgY2xhc3MgZGVmIGRvIGVsc2UgZWxzaWYgZW5kIGVuc3VyZSBlbnVtIGV4dGVuZCBmb3IgZnVuIGlmICcgK1xuICAgICAgJ2luY2x1ZGUgaW5zdGFuY2Vfc2l6ZW9mIGlzX2E/IGxpYiBtYWNybyBtb2R1bGUgbmV4dCBuaWw/IG9mIG91dCBwb2ludGVyb2YgcHJpdmF0ZSBwcm90ZWN0ZWQgcmVzY3VlIHJlc3BvbmRzX3RvPyAnICtcbiAgICAgICdyZXR1cm4gcmVxdWlyZSBzZWxlY3Qgc2VsZiBzaXplb2Ygc3RydWN0IHN1cGVyIHRoZW4gdHlwZSB0eXBlb2YgdW5pb24gdW5pbml0aWFsaXplZCB1bmxlc3MgdW50aWwgd2hlbiB3aGlsZSB3aXRoIHlpZWxkICcgK1xuICAgICAgJ19fRElSX18gX19FTkRfTElORV9fIF9fRklMRV9fIF9fTElORV9fJyxcbiAgICBsaXRlcmFsOiAnZmFsc2UgbmlsIHRydWUnXG4gIH07XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICcjeycsIGVuZDogJ30nLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBBTlNJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXFxce1xcXFx7JywgZW5kOiAnXFxcXH1cXFxcfSd9LFxuICAgICAge2JlZ2luOiAnXFxcXHslJywgZW5kOiAnJVxcXFx9J31cbiAgICBdLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTXG4gIH07XG5cbiAgZnVuY3Rpb24gcmVjdXJzaXZlUGFyZW4oYmVnaW4sIGVuZCkge1xuICAgIHZhclxuICAgIGNvbnRhaW5zID0gW3tiZWdpbjogYmVnaW4sIGVuZDogZW5kfV07XG4gICAgY29udGFpbnNbMF0uY29udGFpbnMgPSBjb250YWlucztcbiAgICByZXR1cm4gY29udGFpbnM7XG4gIH1cbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogLycvLCBlbmQ6IC8nL30sXG4gICAgICB7YmVnaW46IC9cIi8sIGVuZDogL1wiL30sXG4gICAgICB7YmVnaW46IC9gLywgZW5kOiAvYC99LFxuICAgICAge2JlZ2luOiAnJXc/XFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICB7YmVnaW46ICcldz9cXFxcWycsIGVuZDogJ1xcXFxdJywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcWycsICdcXFxcXScpfSxcbiAgICAgIHtiZWdpbjogJyV3P3snLCBlbmQ6ICd9JywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCd7JywgJ30nKX0sXG4gICAgICB7YmVnaW46ICcldz88JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAge2JlZ2luOiAnJXc/LycsIGVuZDogJy8nfSxcbiAgICAgIHtiZWdpbjogJyV3PyUnLCBlbmQ6ICclJ30sXG4gICAgICB7YmVnaW46ICcldz8tJywgZW5kOiAnLSd9LFxuICAgICAge2JlZ2luOiAnJXc/XFxcXHwnLCBlbmQ6ICdcXFxcfCd9LFxuICAgICAge2JlZ2luOiAvPDwtXFx3KyQvLCBlbmQ6IC9eXFxzKlxcdyskL30sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDAsXG4gIH07XG4gIHZhciBRX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICclcVxcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFwoJywgJ1xcXFwpJyl9LFxuICAgICAge2JlZ2luOiAnJXFcXFxcWycsIGVuZDogJ1xcXFxdJywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcWycsICdcXFxcXScpfSxcbiAgICAgIHtiZWdpbjogJyVxeycsIGVuZDogJ30nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ3snLCAnfScpfSxcbiAgICAgIHtiZWdpbjogJyVxPCcsIGVuZDogJz4nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJzwnLCAnPicpfSxcbiAgICAgIHtiZWdpbjogJyVxLycsIGVuZDogJy8nfSxcbiAgICAgIHtiZWdpbjogJyVxJScsIGVuZDogJyUnfSxcbiAgICAgIHtiZWdpbjogJyVxLScsIGVuZDogJy0nfSxcbiAgICAgIHtiZWdpbjogJyVxXFxcXHwnLCBlbmQ6ICdcXFxcfCd9LFxuICAgICAge2JlZ2luOiAvPDwtJ1xcdysnJC8sIGVuZDogL15cXHMqXFx3KyQvfSxcbiAgICBdLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgfTtcbiAgdmFyIFJFR0VYUCA9IHtcbiAgICBiZWdpbjogJygnICsgUkVfU1RBUlRFUiArICcpXFxcXHMqJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJy8vW2Etel0qJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICB7YmVnaW46ICcvJywgZW5kOiAnL1thLXpdKid9LFxuICAgICAgICAgIHtiZWdpbjogJyVyXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignXFxcXCgnLCAnXFxcXCknKX0sXG4gICAgICAgICAge2JlZ2luOiAnJXJcXFxcWycsIGVuZDogJ1xcXFxdJywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcWycsICdcXFxcXScpfSxcbiAgICAgICAgICB7YmVnaW46ICclcnsnLCBlbmQ6ICd9JywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCd7JywgJ30nKX0sXG4gICAgICAgICAge2JlZ2luOiAnJXI8JywgZW5kOiAnPicsIGNvbnRhaW5zOiByZWN1cnNpdmVQYXJlbignPCcsICc+Jyl9LFxuICAgICAgICAgIHtiZWdpbjogJyVyLycsIGVuZDogJy8nfSxcbiAgICAgICAgICB7YmVnaW46ICclciUnLCBlbmQ6ICclJ30sXG4gICAgICAgICAge2JlZ2luOiAnJXItJywgZW5kOiAnLSd9LFxuICAgICAgICAgIHtiZWdpbjogJyVyXFxcXHwnLCBlbmQ6ICdcXFxcfCd9LFxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFJFR0VYUDIgPSB7XG4gICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICclclxcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ1xcXFwoJywgJ1xcXFwpJyl9LFxuICAgICAge2JlZ2luOiAnJXJcXFxcWycsIGVuZDogJ1xcXFxdJywgY29udGFpbnM6IHJlY3Vyc2l2ZVBhcmVuKCdcXFxcWycsICdcXFxcXScpfSxcbiAgICAgIHtiZWdpbjogJyVyeycsIGVuZDogJ30nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJ3snLCAnfScpfSxcbiAgICAgIHtiZWdpbjogJyVyPCcsIGVuZDogJz4nLCBjb250YWluczogcmVjdXJzaXZlUGFyZW4oJzwnLCAnPicpfSxcbiAgICAgIHtiZWdpbjogJyVyLycsIGVuZDogJy8nfSxcbiAgICAgIHtiZWdpbjogJyVyJScsIGVuZDogJyUnfSxcbiAgICAgIHtiZWdpbjogJyVyLScsIGVuZDogJy0nfSxcbiAgICAgIHtiZWdpbjogJyVyXFxcXHwnLCBlbmQ6ICdcXFxcfCd9LFxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBBVFRSSUJVVEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSlcbiAgICBdXG4gIH07XG4gIHZhciBDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgRVhQQU5TSU9OLFxuICAgIFNUUklORyxcbiAgICBRX1NUUklORyxcbiAgICBSRUdFWFAsXG4gICAgUkVHRVhQMixcbiAgICBBVFRSSUJVVEUsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgbW9kdWxlIHN0cnVjdCcsIGVuZDogJyR8OycsXG4gICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdbQS1aYS16X11cXFxcdyooOjpcXFxcdyspKihcXFxcP3xcXFxcISk/J30pLFxuICAgICAgICB7YmVnaW46ICc8J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXIgZm9yIGluaGVyaXRhbmNlXG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnbGliIGVudW0gdW5pb24nLCBlbmQ6ICckfDsnLFxuICAgICAgaWxsZWdhbDogLz0vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnW0EtWmEtel9dXFxcXHcqKDo6XFxcXHcrKSooXFxcXD98XFxcXCEpPyd9KSxcbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmJywgZW5kOiAvXFxCXFxiLyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICAgICAgICBiZWdpbjogQ1JZU1RBTF9NRVRIT0RfUkUsXG4gICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1biBtYWNybycsIGVuZDogL1xcQlxcYi8sXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgYmVnaW46IENSWVNUQUxfTUVUSE9EX1JFLFxuICAgICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICByZWxldmFuY2U6IDVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyhcXFxcIXxcXFxcPyk/OicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICBiZWdpbjogJzonLFxuICAgICAgY29udGFpbnM6IFtTVFJJTkcsIHtiZWdpbjogQ1JZU1RBTF9NRVRIT0RfUkV9XSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYjBiKFswMV9dKlswMV0pJyArIE5VTV9TVUZGSVggfSxcbiAgICAgICAgeyBiZWdpbjogJ1xcXFxiMG8oWzAtN19dKlswLTddKScgKyBOVU1fU1VGRklYIH0sXG4gICAgICAgIHsgYmVnaW46ICdcXFxcYjB4KFtBLUZhLWYwLTlfXSpbQS1GYS1mMC05XSknICsgTlVNX1NVRkZJWCB9LFxuICAgICAgICB7IGJlZ2luOiAnXFxcXGIoKFswLTldWzAtOV9dKlswLTldfFswLTldKShcXFxcLlswLTlfXSpbMC05XSk/KFtlRV1bKy1dP1swLTlfXSpbMC05XSk/KScgKyBOVU1fU1VGRklYfVxuICAgICAgXSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgXTtcbiAgU1VCU1QuY29udGFpbnMgPSBDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlM7XG4gIEVYUEFOU0lPTi5jb250YWlucyA9IENSWVNUQUxfREVGQVVMVF9DT05UQUlOUy5zbGljZSgxKTsgLy8gd2l0aG91dCBFWFBBTlNJT05cblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3InXSxcbiAgICBsZXhlbWVzOiBDUllTVEFMX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBDUllTVEFMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBDUllTVEFMX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgLy8gTm9ybWFsIGtleXdvcmRzLlxuICAgICAgJ2Fic3RyYWN0IGFzIGJhc2UgYm9vbCBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjaGVja2VkIGNvbnN0IGNvbnRpbnVlIGRlY2ltYWwgJyArXG4gICAgICAnZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmbG9hdCAnICtcbiAgICAgICdmb3IgZm9yZWFjaCBnb3RvIGlmIGltcGxpY2l0IGluIGludCBpbnRlcmZhY2UgaW50ZXJuYWwgaXMgbG9jayBsb25nIG5hbWVvZiAnICtcbiAgICAgICdvYmplY3Qgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHNieXRlICcgK1xuICAgICAgJ3NlYWxlZCBzaG9ydCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3RyaW5nIHN0cnVjdCBzd2l0Y2ggdGhpcyB0cnkgdHlwZW9mICcgK1xuICAgICAgJ3VpbnQgdWxvbmcgdW5jaGVja2VkIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2lkIHZvbGF0aWxlIHdoaWxlICcgK1xuICAgICAgLy8gQ29udGV4dHVhbCBrZXl3b3Jkcy5cbiAgICAgICdhZGQgYWxpYXMgYXNjZW5kaW5nIGFzeW5jIGF3YWl0IGJ5IGRlc2NlbmRpbmcgZHluYW1pYyBlcXVhbHMgZnJvbSBnZXQgZ2xvYmFsIGdyb3VwIGludG8gam9pbiAnICtcbiAgICAgICdsZXQgb24gb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHZhbHVlIHZhciB3aGVyZSB5aWVsZCcsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdudWxsIGZhbHNlIHRydWUnXG4gIH07XG5cbiAgdmFyIFZFUkJBVElNX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnQFwiJywgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XVxuICB9O1xuICB2YXIgVkVSQkFUSU1fU1RSSU5HX05PX0xGID0gaGxqcy5pbmhlcml0KFZFUkJBVElNX1NUUklORywge2lsbGVnYWw6IC9cXG4vfSk7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBTVUJTVF9OT19MRiA9IGhsanMuaW5oZXJpdChTVUJTVCwge2lsbGVnYWw6IC9cXG4vfSk7XG4gIHZhciBJTlRFUlBPTEFURURfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXCRcIi8sIGVuZDogJ1wiJyxcbiAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ3t7J30sIHtiZWdpbjogJ319J30sIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RfTk9fTEZdXG4gIH07XG4gIHZhciBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXCRAXCIvLCBlbmQ6ICdcIicsXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICd7eyd9LCB7YmVnaW46ICd9fSd9LCB7YmVnaW46ICdcIlwiJ30sIFNVQlNUXVxuICB9O1xuICB2YXIgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklOR19OT19MRiA9IGhsanMuaW5oZXJpdChJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HLCB7XG4gICAgaWxsZWdhbDogL1xcbi8sXG4gICAgY29udGFpbnM6IFt7YmVnaW46ICd7eyd9LCB7YmVnaW46ICd9fSd9LCB7YmVnaW46ICdcIlwiJ30sIFNVQlNUX05PX0xGXVxuICB9KTtcbiAgU1VCU1QuY29udGFpbnMgPSBbXG4gICAgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyxcbiAgICBJTlRFUlBPTEFURURfU1RSSU5HLFxuICAgIFZFUkJBVElNX1NUUklORyxcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICBdO1xuICBTVUJTVF9OT19MRi5jb250YWlucyA9IFtcbiAgICBJTlRFUlBPTEFURURfVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgVkVSQkFUSU1fU1RSSU5HX05PX0xGLFxuICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSwge2lsbGVnYWw6IC9cXG4vfSlcbiAgXTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgSU5URVJQT0xBVEVEX1ZFUkJBVElNX1NUUklORyxcbiAgICAgIElOVEVSUE9MQVRFRF9TVFJJTkcsXG4gICAgICBWRVJCQVRJTV9TVFJJTkcsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xuXG4gIHZhciBUWVBFX0lERU5UX1JFID0gaGxqcy5JREVOVF9SRSArICcoPCcgKyBobGpzLklERU5UX1JFICsgJyhcXFxccyosXFxcXHMqJyArIGhsanMuSURFTlRfUkUgKyAnKSo+KT8oXFxcXFtcXFxcXSk/JztcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3NoYXJwJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC86Oi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy8vLycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYmVnaW46ICcvLy8nLCByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAnPCEtLXwtLT4nXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBiZWdpbjogJzwvPycsIGVuZDogJz4nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIycsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICdtZXRhLWtleXdvcmQnOiAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiB3YXJuaW5nIGVycm9yIGxpbmUgcmVnaW9uIGVuZHJlZ2lvbiBwcmFnbWEgY2hlY2tzdW0nXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6IC9bezs9XS8sXG4gICAgICAgIGlsbGVnYWw6IC9bXlxcczpdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25hbWVzcGFjZScsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgaWxsZWdhbDogL1teXFxzOl0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogJ1thLXpBLVpdKFxcXFwuP1xcXFx3KSonfSksXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gW0F0dHJpYnV0ZXMoXCJcIildXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxccypcXFxcWycsIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZW5kOiAnXFxcXF0nLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIEV4cHJlc3Npb24ga2V5d29yZHMgcHJldmVudCAna2V5d29yZCBOYW1lKC4uLiknIGZyb20gYmVpbmdcbiAgICAgICAgLy8gcmVjb2duaXplZCBhcyBhIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ25ldyByZXR1cm4gdGhyb3cgYXdhaXQgZWxzZScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJygnICsgVFlQRV9JREVOVF9SRSArICdcXFxccyspKycgKyBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1t7Oz1dLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzKlxcXFwoJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuVElUTEVfTU9ERV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGxleGVtZXM6ICdbYS16QS1aXVthLXpBLVowLTlfLV0qJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2Jhc2UtdXJpIGNoaWxkLXNyYyBjb25uZWN0LXNyYyBkZWZhdWx0LXNyYyBmb250LXNyYyBmb3JtLWFjdGlvbicgK1xuICAgICAgICAnIGZyYW1lLWFuY2VzdG9ycyBmcmFtZS1zcmMgaW1nLXNyYyBtZWRpYS1zcmMgb2JqZWN0LXNyYyBwbHVnaW4tdHlwZXMnICtcbiAgICAgICAgJyByZXBvcnQtdXJpIHNhbmRib3ggc2NyaXB0LXNyYyBzdHlsZS1zcmMnLCBcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiBcIidcIiwgZW5kOiBcIidcIlxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgIGJlZ2luOiAnXkNvbnRlbnQnLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICB9LFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbYS16QS1aLV1bYS16QS1aMC05Xy1dKic7XG4gIHZhciBSVUxFID0ge1xuICAgIGJlZ2luOiAvW0EtWlxcX1xcLlxcLV0rXFxzKjovLCByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAnOycsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAvXFxTLywgZW5kOiAnOicsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlZ2luOiAvW1xcdy1dK1xcKC8sIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAvW1xcdy1dKy9cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsIGJlZ2luOiAnI1swLTlBLUZhLWZdKydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvWz1cXC98J1xcJF0vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsIGJlZ2luOiAvI1tBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLCBiZWdpbjogL1xcLltBLVphLXowLTlfLV0rL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgaWxsZWdhbDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1wc2V1ZG8nLFxuICAgICAgICBiZWdpbjogLzooOik/W2EtekEtWjAtOVxcX1xcLVxcK1xcKFxcKVwiJy5dKy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQChmb250LWZhY2V8cGFnZSknLFxuICAgICAgICBsZXhlbWVzOiAnW2Etei1dKycsXG4gICAgICAgIGtleXdvcmRzOiAnZm9udC1mYWNlIHBhZ2UnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ0AnLCBlbmQ6ICdbeztdJywgLy8gYXRfcnVsZSBlYXRpbmcgZmlyc3QgXCJ7XCIgaXMgYSBnb29kIHRoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGl0IGRvZXNu4oCZdCBsZXQgaXQgdG8gYmUgcGFyc2VkIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHJ1bGUgc2V0IGJ1dCBpbnN0ZWFkIGRyb3BzIHBhcnNlciBpbnRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBtb2RlIHdoaWNoIGlzIGhvdyBpdCBzaG91bGQgYmUuXG4gICAgICAgIGlsbGVnYWw6IC86LywgLy8gYnJlYWsgb24gTGVzcyB2YXJpYWJsZXMgQHZhcjogLi4uXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogL1xcdysvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogL1xccy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLCBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItdGFnJywgYmVnaW46IElERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgICAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIFJVTEUsXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLyoqXG4gKiBLbm93biBpc3N1ZXM6XG4gKlxuICogLSBpbnZhbGlkIGhleCBzdHJpbmcgbGl0ZXJhbHMgd2lsbCBiZSByZWNvZ25pemVkIGFzIGEgZG91YmxlIHF1b3RlZCBzdHJpbmdzXG4gKiAgIGJ1dCAneCcgYXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmcgd2lsbCBub3QgYmUgbWF0Y2hlZFxuICpcbiAqIC0gZGVsaW1pdGVkIHN0cmluZyBsaXRlcmFscyBhcmUgbm90IGNoZWNrZWQgZm9yIG1hdGNoaW5nIGVuZCBkZWxpbWl0ZXJcbiAqICAgKG5vdCBwb3NzaWJsZSB0byBkbyB3aXRoIGpzIHJlZ2V4cClcbiAqXG4gKiAtIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIGNvbG9yZWQgYXMgYSBzdHJpbmcgKGkuZS4gbm8ga2V5d29yZCBjb2xvcmluZyBpbnNpZGUgYSB0b2tlbiBzdHJpbmcpXG4gKiAgIGFsc28sIGNvbnRlbnQgb2YgdG9rZW4gc3RyaW5nIGlzIG5vdCB2YWxpZGF0ZWQgdG8gY29udGFpbiBvbmx5IHZhbGlkIEQgdG9rZW5zXG4gKlxuICogLSBzcGVjaWFsIHRva2VuIHNlcXVlbmNlIHJ1bGUgaXMgbm90IHN0cmljdGx5IGZvbGxvd2luZyBEIGdyYW1tYXIgKGFueXRoaW5nIGZvbGxvd2luZyAjbGluZVxuICogICB1cCB0byB0aGUgZW5kIG9mIGxpbmUgaXMgbWF0Y2hlZCBhcyBzcGVjaWFsIHRva2VuIHNlcXVlbmNlKVxuICovXG5cbmZ1bmN0aW9uKGhsanMpIHtcbiAgLyoqXG4gICAqIExhbmd1YWdlIGtleXdvcmRzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFsaWFzIGFsaWduIGFzbSBhc3NlcnQgYXV0byBib2R5IGJyZWFrIGJ5dGUgY2FzZSBjYXN0IGNhdGNoIGNsYXNzICcgK1xuICAgICAgJ2NvbnN0IGNvbnRpbnVlIGRlYnVnIGRlZmF1bHQgZGVsZXRlIGRlcHJlY2F0ZWQgZG8gZWxzZSBlbnVtIGV4cG9ydCBleHRlcm4gZmluYWwgJyArXG4gICAgICAnZmluYWxseSBmb3IgZm9yZWFjaCBmb3JlYWNoX3JldmVyc2V8MTAgZ290byBpZiBpbW11dGFibGUgaW1wb3J0IGluIGlub3V0IGludCAnICtcbiAgICAgICdpbnRlcmZhY2UgaW52YXJpYW50IGlzIGxhenkgbWFjcm8gbWl4aW4gbW9kdWxlIG5ldyBub3Rocm93IG91dCBvdmVycmlkZSBwYWNrYWdlICcgK1xuICAgICAgJ3ByYWdtYSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcHVyZSByZWYgcmV0dXJuIHNjb3BlIHNoYXJlZCBzdGF0aWMgc3RydWN0ICcgK1xuICAgICAgJ3N1cGVyIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGVtcGxhdGUgdGhpcyB0aHJvdyB0cnkgdHlwZWRlZiB0eXBlaWQgdHlwZW9mIHVuaW9uICcgK1xuICAgICAgJ3VuaXR0ZXN0IHZlcnNpb24gdm9pZCB2b2xhdGlsZSB3aGlsZSB3aXRoIF9fRklMRV9fIF9fTElORV9fIF9fZ3NoYXJlZHwxMCAnICtcbiAgICAgICdfX3RocmVhZCBfX3RyYWl0cyBfX0RBVEVfXyBfX0VPRl9fIF9fVElNRV9fIF9fVElNRVNUQU1QX18gX19WRU5ET1JfXyBfX1ZFUlNJT05fXycsXG4gICAgYnVpbHRfaW46XG4gICAgICAnYm9vbCBjZG91YmxlIGNlbnQgY2Zsb2F0IGNoYXIgY3JlYWwgZGNoYXIgZGVsZWdhdGUgZG91YmxlIGRzdHJpbmcgZmxvYXQgZnVuY3Rpb24gJyArXG4gICAgICAnaWRvdWJsZSBpZmxvYXQgaXJlYWwgbG9uZyByZWFsIHNob3J0IHN0cmluZyB1Ynl0ZSB1Y2VudCB1aW50IHVsb25nIHVzaG9ydCB3Y2hhciAnICtcbiAgICAgICd3c3RyaW5nJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ2ZhbHNlIG51bGwgdHJ1ZSdcbiAgfTtcblxuICAvKipcbiAgICogTnVtYmVyIGxpdGVyYWwgcmVnZXhwc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGRlY2ltYWxfaW50ZWdlcl9yZSA9ICcoMHxbMS05XVtcXFxcZF9dKiknLFxuICAgIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSA9ICcoMHxbMS05XVtcXFxcZF9dKnxcXFxcZFtcXFxcZF9dKnxbXFxcXGRfXSs/XFxcXGQpJyxcbiAgICBiaW5hcnlfaW50ZWdlcl9yZSA9ICcwW2JCXVswMV9dKycsXG4gICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlID0gJyhbXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qfF9bXFxcXGRhLWZBLUZdW1xcXFxkYS1mQS1GX10qKScsXG4gICAgaGV4YWRlY2ltYWxfaW50ZWdlcl9yZSA9ICcwW3hYXScgKyBoZXhhZGVjaW1hbF9kaWdpdHNfcmUsXG5cbiAgICBkZWNpbWFsX2V4cG9uZW50X3JlID0gJyhbZUVdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuICAgIGRlY2ltYWxfZmxvYXRfcmUgPSAnKCcgKyBkZWNpbWFsX2ludGVnZXJfbm9zdXNfcmUgKyAnKFxcXFwuXFxcXGQqfCcgKyBkZWNpbWFsX2V4cG9uZW50X3JlICsgJyl8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFxkK1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArIGRlY2ltYWxfaW50ZWdlcl9ub3N1c19yZSArICd8JyArXG4gICAgICAgICAgICAgICAgJ1xcXFwuJyArIGRlY2ltYWxfaW50ZWdlcl9yZSArIGRlY2ltYWxfZXhwb25lbnRfcmUgKyAnPycgK1xuICAgICAgICAgICAgICAnKScsXG4gICAgaGV4YWRlY2ltYWxfZmxvYXRfcmUgPSAnKDBbeFhdKCcgK1xuICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICsgJ1xcXFwuJyArIGhleGFkZWNpbWFsX2RpZ2l0c19yZSArICd8JytcbiAgICAgICAgICAgICAgICAgICdcXFxcLj8nICsgaGV4YWRlY2ltYWxfZGlnaXRzX3JlICtcbiAgICAgICAgICAgICAgICAgJylbcFBdWystXT8nICsgZGVjaW1hbF9pbnRlZ2VyX25vc3VzX3JlICsgJyknLFxuXG4gICAgaW50ZWdlcl9yZSA9ICcoJyArXG4gICAgICBkZWNpbWFsX2ludGVnZXJfcmUgKyAnfCcgK1xuICAgICAgYmluYXJ5X2ludGVnZXJfcmUgICsgJ3wnICtcbiAgICAgICBoZXhhZGVjaW1hbF9pbnRlZ2VyX3JlICAgK1xuICAgICcpJyxcblxuICAgIGZsb2F0X3JlID0gJygnICtcbiAgICAgIGhleGFkZWNpbWFsX2Zsb2F0X3JlICsgJ3wnICtcbiAgICAgIGRlY2ltYWxfZmxvYXRfcmUgICtcbiAgICAnKSc7XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBzZXF1ZW5jZSBzdXBwb3J0ZWQgaW4gRCBzdHJpbmcgYW5kIGNoYXJhY3RlciBsaXRlcmFsc1xuICAgKlxuICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgKi9cbiAgdmFyIGVzY2FwZV9zZXF1ZW5jZV9yZSA9ICdcXFxcXFxcXCgnICtcbiAgICAgICAgICAgICAgJ1tcXCdcIlxcXFw/XFxcXFxcXFxhYmZucnR2XXwnICsgIC8vIGNvbW1vbiBlc2NhcGVzXG4gICAgICAgICAgICAgICd1W1xcXFxkQS1GYS1mXXs0fXwnICsgICAgIC8vIGZvdXIgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICdbMC03XXsxLDN9fCcgKyAgICAgICAvLyBvbmUgdG8gdGhyZWUgb2N0YWwgZGlnaXQgYXNjaWkgY2hhciBjb2RlXG4gICAgICAgICAgICAgICd4W1xcXFxkQS1GYS1mXXsyfXwnICsgICAgLy8gdHdvIGhleCBkaWdpdCBhc2NpaSBjaGFyIGNvZGVcbiAgICAgICAgICAgICAgJ1VbXFxcXGRBLUZhLWZdezh9JyArICAgICAgLy8gZWlnaHQgaGV4IGRpZ2l0IHVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICAgICcpfCcgK1xuICAgICAgICAgICAgICAnJlthLXpBLVpcXFxcZF17Mix9Oyc7ICAgICAgLy8gbmFtZWQgY2hhcmFjdGVyIGVudGl0eVxuXG4gIC8qKlxuICAgKiBEIGludGVnZXIgbnVtYmVyIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9JTlRFR0VSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgIGJlZ2luOiAnXFxcXGInICsgaW50ZWdlcl9yZSArICcoTHx1fFV8THV8TFV8dUx8VUwpPycsXG4gICAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogW0RfRkxPQVRfTU9ERSBkZXNjcmlwdGlvbl1cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0ZMT0FUX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJ1xcXFxiKCcgK1xuICAgICAgICBmbG9hdF9yZSArICcoW2ZGXXxMfGl8W2ZGXWl8TGkpP3wnICtcbiAgICAgICAgaW50ZWdlcl9yZSArICcoaXxbZkZdaXxMaSknICtcbiAgICAgICcpJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICAvKipcbiAgICogRCBjaGFyYWN0ZXIgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQ0hBUkFDVEVSX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcJygnICsgZXNjYXBlX3NlcXVlbmNlX3JlICsgJ3wuKScsIGVuZDogJ1xcJycsXG4gICAgaWxsZWdhbDogJy4nXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfRVNDQVBFX1NFUVVFTkNFID0ge1xuICAgIGJlZ2luOiBlc2NhcGVfc2VxdWVuY2VfcmUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLyoqXG4gICAqIEQgZG91YmxlIHF1b3RlZCBzdHJpbmcgbGl0ZXJhbFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJyxcbiAgICBjb250YWluczogW0RfRVNDQVBFX1NFUVVFTkNFXSxcbiAgICBlbmQ6ICdcIltjd2RdPydcbiAgfTtcblxuICAvKipcbiAgICogRCB3eXNpd3lnIGFuZCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxzXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9XWVNJV1lHX0RFTElNSVRFRF9TVFJJTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnW3JxXVwiJyxcbiAgICBlbmQ6ICdcIltjd2RdPycsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYWx0ZXJuYXRlIHd5c2l3eWcgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJyxcbiAgICBlbmQ6ICdgW2N3ZF0/J1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIGhleGFkZWNpbWFsIHN0cmluZyBsaXRlcmFsXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgRF9IRVhfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ3hcIltcXFxcZGEtZkEtRlxcXFxzXFxcXG5cXFxccl0qXCJbY3dkXT8nLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICAvKipcbiAgICogRCBkZWxpbWl0ZWQgc3RyaW5nIGxpdGVyYWxcbiAgICpcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBEX1RPS0VOX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdxXCJcXFxceycsXG4gICAgZW5kOiAnXFxcXH1cIidcbiAgfTtcblxuICAvKipcbiAgICogSGFzaGJhbmcgc3VwcG9ydFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfSEFTSEJBTkdfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgc3BlY2lhbCB0b2tlbiBzZXF1ZW5jZVxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnIyhsaW5lKScsXG4gICAgZW5kOiAnJCcsXG4gICAgcmVsZXZhbmNlOiA1XG4gIH07XG5cbiAgLyoqXG4gICAqIEQgYXR0cmlidXRlc1xuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfQVRUUklCVVRFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAW2EtekEtWl9dW2EtekEtWl9cXFxcZF0qJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBEIG5lc3RpbmcgY29tbWVudFxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIERfTkVTVElOR19DT01NRU5UX01PREUgPSBobGpzLkNPTU1FTlQoXG4gICAgJ1xcXFwvXFxcXCsnLFxuICAgICdcXFxcK1xcXFwvJyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ10sXG4gICAgICByZWxldmFuY2U6IDEwXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBEX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgIERfTkVTVElOR19DT01NRU5UX01PREUsXG4gICAgICAgIERfSEVYX1NUUklOR19NT0RFLFxuICAgICAgICBEX1NUUklOR19NT0RFLFxuICAgICAgICBEX1dZU0lXWUdfREVMSU1JVEVEX1NUUklOR19NT0RFLFxuICAgICAgICBEX0FMVEVSTkFURV9XWVNJV1lHX1NUUklOR19NT0RFLFxuICAgICAgICBEX1RPS0VOX1NUUklOR19NT0RFLFxuICAgICAgICBEX0ZMT0FUX01PREUsXG4gICAgICAgIERfSU5URUdFUl9NT0RFLFxuICAgICAgICBEX0NIQVJBQ1RFUl9NT0RFLFxuICAgICAgICBEX0hBU0hCQU5HX01PREUsXG4gICAgICAgIERfU1BFQ0lBTF9UT0tFTl9TRVFVRU5DRV9NT0RFLFxuICAgICAgICBEX0FUVFJJQlVURV9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21kJywgJ21rZG93bicsICdta2QnXSxcbiAgICBjb250YWluczogW1xuICAgICAgLy8gaGlnaGxpZ2h0IGhlYWRlcnNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ14jezEsNn0nLCBlbmQ6ICckJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdeLis/XFxcXG5bPS1dezIsfSQnIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIGlubGluZSBodG1sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCcsIGVuZDogJz4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIGxpc3RzIChpbmRpY2F0b3JzIG9ubHkpXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXihbKistXXwoXFxcXGQrXFxcXC4pKVxcXFxzKydcbiAgICAgIH0sXG4gICAgICAvLyBzdHJvbmcgc2VnbWVudHNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3Ryb25nJyxcbiAgICAgICAgYmVnaW46ICdbKl9dezJ9Lis/WypfXXsyfSdcbiAgICAgIH0sXG4gICAgICAvLyBlbXBoYXNpcyBzZWdtZW50c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdlbXBoYXNpcycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwqLis/XFxcXConIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ18uKz9fJ1xuICAgICAgICAgICwgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgLy8gYmxvY2txdW90ZXNcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncXVvdGUnLFxuICAgICAgICBiZWdpbjogJ14+XFxcXHMrJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NvZGUnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXmBgYFxcdypcXHMqJCcsIGVuZDogJ15gYGBcXHMqJCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnYC4rP2AnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ14oIHs0fXxcXHQpJywgZW5kOiAnJCcsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBob3Jpem9udGFsIHJ1bGVzXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlstXFxcXCpdezMsfScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgLy8gdXNpbmcgbGlua3MgLSB0aXRsZSBhbmQgbGlua1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxbLis/XFxcXF1bXFxcXChcXFxcW10uKj9bXFxcXClcXFxcXV0nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxdXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXlxcW1teXFxuXStcXF06LyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFxbLywgZW5kOiAvXFxdLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbGluaycsXG4gICAgICAgICAgICBiZWdpbjogLzpcXHMqLywgZW5kOiAvJC8sXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICd9JyxcbiAgICBrZXl3b3JkczogJ3RydWUgZmFsc2UgbnVsbCB0aGlzIGlzIG5ldyBzdXBlcidcbiAgfTtcblxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnXFwnXFwnJywgZW5kOiAnXFwnXFwnXFwnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdyXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFwnXFwnJywgZW5kOiAnXFwnXFwnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIFNVQlNULmNvbnRhaW5zID0gW1xuICAgIGhsanMuQ19OVU1CRVJfTU9ERSwgU1RSSU5HXG4gIF07XG5cbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgIGtleXdvcmQ6ICdhc3NlcnQgYXN5bmMgYXdhaXQgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGVsc2UgZW51bSBleHRlbmRzIGZhbHNlIGZpbmFsICcgK1xuICAgICAgJ2ZpbmFsbHkgZm9yIGlmIGluIGlzIG5ldyBudWxsIHJldGhyb3cgcmV0dXJuIHN1cGVyIHN3aXRjaCBzeW5jIHRoaXMgdGhyb3cgdHJ1ZSB0cnkgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCAnICtcbiAgICAgICdhYnN0cmFjdCBhcyBkeW5hbWljIGV4cG9ydCBleHRlcm5hbCBmYWN0b3J5IGdldCBpbXBsZW1lbnRzIGltcG9ydCBsaWJyYXJ5IG9wZXJhdG9yIHBhcnQgc2V0IHN0YXRpYyB0eXBlZGVmJyxcbiAgICBidWlsdF9pbjpcbiAgICAgIC8vIGRhcnQ6Y29yZVxuICAgICAgJ3ByaW50IENvbXBhcmFibGUgRGF0ZVRpbWUgRHVyYXRpb24gRnVuY3Rpb24gSXRlcmFibGUgSXRlcmF0b3IgTGlzdCBNYXAgTWF0Y2ggTnVsbCBPYmplY3QgUGF0dGVybiBSZWdFeHAgU2V0ICcgK1xuICAgICAgJ1N0b3B3YXRjaCBTdHJpbmcgU3RyaW5nQnVmZmVyIFN0cmluZ1NpbmsgU3ltYm9sIFR5cGUgVXJpIGJvb2wgZG91YmxlIGludCBudW0gJyArXG4gICAgICAvLyBkYXJ0Omh0bWxcbiAgICAgICdkb2N1bWVudCB3aW5kb3cgcXVlcnlTZWxlY3RvciBxdWVyeVNlbGVjdG9yQWxsIEVsZW1lbnQgRWxlbWVudExpc3QnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORyxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgJ1xcXFwqLycsXG4gICAgICAgIHtcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ21hcmtkb3duJ1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnLy8vJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdtYXJrZG93bidcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsIGVuZDogJ3snLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2V4cG9ydHMgcmVnaXN0ZXIgZmlsZSBzaGwgYXJyYXkgcmVjb3JkIHByb3BlcnR5IGZvciBtb2Qgd2hpbGUgc2V0IGFsbHkgbGFiZWwgdXNlcyByYWlzZSBub3QgJyArXG4gICAgJ3N0b3JlZCBjbGFzcyBzYWZlY2FsbCB2YXIgaW50ZXJmYWNlIG9yIHByaXZhdGUgc3RhdGljIGV4aXQgaW5kZXggaW5oZXJpdGVkIHRvIGVsc2Ugc3RkY2FsbCAnICtcbiAgICAnb3ZlcnJpZGUgc2hyIGFzbSBmYXIgcmVzb3VyY2VzdHJpbmcgZmluYWxpemF0aW9uIHBhY2tlZCB2aXJ0dWFsIG91dCBhbmQgcHJvdGVjdGVkIGxpYnJhcnkgZG8gJyArXG4gICAgJ3hvcndyaXRlIGdvdG8gbmVhciBmdW5jdGlvbiBlbmQgZGl2IG92ZXJsb2FkIG9iamVjdCB1bml0IGJlZ2luIHN0cmluZyBvbiBpbmxpbmUgcmVwZWF0IHVudGlsICcgK1xuICAgICdkZXN0cnVjdG9yIHdyaXRlIG1lc3NhZ2UgcHJvZ3JhbSB3aXRoIHJlYWQgaW5pdGlhbGl6YXRpb24gZXhjZXB0IGRlZmF1bHQgbmlsIGlmIGNhc2UgY2RlY2wgaW4gJyArXG4gICAgJ2Rvd250byB0aHJlYWR2YXIgb2YgdHJ5IHBhc2NhbCBjb25zdCBleHRlcm5hbCBjb25zdHJ1Y3RvciB0eXBlIHB1YmxpYyB0aGVuIGltcGxlbWVudGF0aW9uICcgK1xuICAgICdmaW5hbGx5IHB1Ymxpc2hlZCBwcm9jZWR1cmUgYWJzb2x1dGUgcmVpbnRyb2R1Y2Ugb3BlcmF0b3IgYXMgaXMgYWJzdHJhY3QgYWxpYXMgYXNzZW1ibGVyICcgK1xuICAgICdiaXRwYWNrZWQgYnJlYWsgY29udGludWUgY3BwZGVjbCBjdmFyIGVudW1lcmF0b3IgZXhwZXJpbWVudGFsIHBsYXRmb3JtIGRlcHJlY2F0ZWQgJyArXG4gICAgJ3VuaW1wbGVtZW50ZWQgZHluYW1pYyBleHBvcnQgZmFyMTYgZm9yd2FyZCBnZW5lcmljIGhlbHBlciBpbXBsZW1lbnRzIGludGVycnVwdCBpb2NoZWNrcyAnICtcbiAgICAnbG9jYWwgbmFtZSBub2RlZmF1bHQgbm9yZXR1cm4gbm9zdGFja2ZyYW1lIG9sZGZwY2NhbGwgb3RoZXJ3aXNlIHNhdmVyZWdpc3RlcnMgc29mdGZsb2F0ICcgK1xuICAgICdzcGVjaWFsaXplIHN0cmljdCB1bmFsaWduZWQgdmFyYXJncyAnO1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKC9cXHsvLCAvXFx9Lywge3JlbGV2YW5jZTogMH0pLFxuICAgIGhsanMuQ09NTUVOVCgvXFwoXFwqLywgL1xcKlxcKS8sIHtyZWxldmFuY2U6IDEwfSlcbiAgXTtcbiAgdmFyIERJUkVDVElWRSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L30sXG4gICAgICB7YmVnaW46IC9cXChcXCpcXCQvLCBlbmQ6IC9cXCpcXCkvfVxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvJycvfV1cbiAgfTtcbiAgdmFyIENIQVJfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvKCNcXGQrKSsvXG4gIH07XG4gIHZhciBDTEFTUyA9IHtcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXFxccyo9XFxcXHMqY2xhc3NcXFxccypcXFxcKCcsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREVcbiAgICBdXG4gIH07XG4gIHZhciBGVU5DVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yIGRlc3RydWN0b3IgcHJvY2VkdXJlJywgZW5kOiAvWzo7XS8sXG4gICAga2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvcnwxMCBkZXN0cnVjdG9yfDEwIHByb2NlZHVyZXwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklORywgRElSRUNUSVZFXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgICAgIH0sXG4gICAgICBESVJFQ1RJVkVcbiAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZHByJywgJ2RmbScsICdwYXMnLCAncGFzY2FsJywgJ2ZyZWVwYXNjYWwnLCAnbGF6YXJ1cycsICdscHInLCAnbGZtJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1wifFxcJFtHLVpnLXpdfFxcL1xcKnw8XFwvfFxcfC8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNUUklORywgQ0hBUl9TVFJJTkcsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgQ0xBU1MsXG4gICAgICBGVU5DVElPTixcbiAgICAgIERJUkVDVElWRVxuICAgIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGF0Y2gnXSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9eQEAgK1xcLVxcZCssXFxkKyArXFwrXFxkKyxcXGQrICtAQCQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwqXFwqXFwqICtcXGQrLFxcZCsgK1xcKlxcKlxcKlxcKiQvfSxcbiAgICAgICAgICB7YmVnaW46IC9eXFwtXFwtXFwtICtcXGQrLFxcZCsgK1xcLVxcLVxcLVxcLSQvfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9JbmRleDogLywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogLz17Myx9LywgZW5kOiAvJC99LFxuICAgICAgICAgIHtiZWdpbjogL15cXC17M30vLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcKnszfSAvLCBlbmQ6IC8kL30sXG4gICAgICAgICAge2JlZ2luOiAvXlxcK3szfS8sIGVuZDogLyQvfSxcbiAgICAgICAgICB7YmVnaW46IC9cXCp7NX0vLCBlbmQ6IC9cXCp7NX0kL31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYWRkaXRpb24nLFxuICAgICAgICBiZWdpbjogJ15cXFxcKycsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkZWxldGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlxcXFwtJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2FkZGl0aW9uJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCEnLCBlbmQ6ICckJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBGSUxURVIgPSB7XG4gICAgYmVnaW46IC9cXHxbQS1aYS16XSs6Py8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG5hbWU6XG4gICAgICAgICd0cnVuY2F0ZXdvcmRzIHJlbW92ZXRhZ3MgbGluZWJyZWFrc2JyIHllc25vIGdldF9kaWdpdCB0aW1lc2luY2UgcmFuZG9tIHN0cmlwdGFncyAnICtcbiAgICAgICAgJ2ZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzICcgK1xuICAgICAgICAndGl0bGUgZmxvYXRmb3JtYXQgY2FwZmlyc3QgcHByaW50IGRpdmlzaWJsZWJ5IGFkZCBtYWtlX2xpc3QgdW5vcmRlcmVkX2xpc3QgdXJsZW5jb2RlICcgK1xuICAgICAgICAndGltZXVudGlsIHVybGl6ZXRydW5jIHdvcmRjb3VudCBzdHJpbmdmb3JtYXQgbGluZW51bWJlcnMgc2xpY2UgZGF0ZSBkaWN0c29ydCAnICtcbiAgICAgICAgJ2RpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0ICcgK1xuICAgICAgICAndHJ1bmNhdGV3b3Jkc19odG1sIHVwcGVyIGxlbmd0aCBwaG9uZTJudW1lcmljIHdvcmR3cmFwIHRpbWUgYWRkc2xhc2hlcyBzbHVnaWZ5IGZpcnN0ICcgK1xuICAgICAgICAnZXNjYXBlanMgZm9yY2VfZXNjYXBlIGlyaWVuY29kZSBsYXN0IHNhZmUgc2FmZXNlcSB0cnVuY2F0ZWNoYXJzIGxvY2FsaXplIHVubG9jYWxpemUgJyArXG4gICAgICAgICdsb2NhbHRpbWUgdXRjIHRpbWV6b25lJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2ppbmphJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXFx7JVxccypjb21tZW50XFxzKiV9LywgL1xceyVcXHMqZW5kY29tbWVudFxccyolfS8pLFxuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICdjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yICcgK1xuICAgICAgICAgICAgICAgICdlbmRmb3IgaWZub3RlcXVhbCBlbmRpZm5vdGVxdWFsIHdpZHRocmF0aW8gZXh0ZW5kcyBpbmNsdWRlIHNwYWNlbGVzcyAnICtcbiAgICAgICAgICAgICAgICAnZW5kc3BhY2VsZXNzIHJlZ3JvdXAgaWZlcXVhbCBlbmRpZmVxdWFsIHNzaSBub3cgd2l0aCBjeWNsZSB1cmwgZmlsdGVyICcgK1xuICAgICAgICAgICAgICAgICdlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmICcgK1xuICAgICAgICAgICAgICAgICdlbmR3aXRoIHN0YXRpYyB0cmFucyBibG9ja3RyYW5zIGVuZGJsb2NrdHJhbnMgZ2V0X3N0YXRpY19wcmVmaXggZ2V0X21lZGlhX3ByZWZpeCAnICtcbiAgICAgICAgICAgICAgICAncGx1cmFsIGdldF9jdXJyZW50X2xhbmd1YWdlIGxhbmd1YWdlIGdldF9hdmFpbGFibGVfbGFuZ3VhZ2VzICcgK1xuICAgICAgICAgICAgICAgICdnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgJyArXG4gICAgICAgICAgICAgICAgJ2VuZGxvY2FsaXplIGxvY2FsdGltZSBlbmRsb2NhbHRpbWUgdGltZXpvbmUgZW5kdGltZXpvbmUgZ2V0X2N1cnJlbnRfdGltZXpvbmUgJyArXG4gICAgICAgICAgICAgICAgJ3ZlcmJhdGltJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAga2V5d29yZHM6ICdpbiBieSBhcycsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbRklMVEVSXSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvfX0vLFxuICAgICAgICBjb250YWluczogW0ZJTFRFUl1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnYmluZCcsICd6b25lJ10sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdJTiBBIEFBQUEgQUZTREIgQVBMIENBQSBDRE5TS0VZIENEUyBDRVJUIENOQU1FIERIQ0lEIERMViBETkFNRSBETlNLRVkgRFMgSElQIElQU0VDS0VZIEtFWSBLWCAnICtcbiAgICAgICAgJ0xPQyBNWCBOQVBUUiBOUyBOU0VDIE5TRUMzIE5TRUMzUEFSQU0gUFRSIFJSU0lHIFJQIFNJRyBTT0EgU1JWIFNTSEZQIFRBIFRLRVkgVExTQSBUU0lHIFRYVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxcJChUVEx8R0VORVJBVEV8SU5DTFVERXxPUklHSU4pXFxiL1xuICAgICAgfSxcbiAgICAgIC8vIElQdjZcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46ICcoKChbMC05QS1GYS1mXXsxLDR9Oil7N30oWzAtOUEtRmEtZl17MSw0fXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7Nn0oOlswLTlBLUZhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs1fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs0fSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05QS1GYS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7M30oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXsyfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkoXFxcXC4oMjVbMC01XXwyWzAtNF1cXFxcZHwxXFxcXGRcXFxcZHxbMS05XT9cXFxcZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezF9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNn0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKShcXFxcLigyNVswLTVdfDJbMC00XVxcXFxkfDFcXFxcZFxcXFxkfFsxLTldP1xcXFxkKSl7M30pKXw6KSl8KDooKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKFxcXFwuKDI1WzAtNV18MlswLTRdXFxcXGR8MVxcXFxkXFxcXGR8WzEtOV0/XFxcXGQpKXszfSkpfDopKSlcXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyBJUHY0XG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezMsM30oMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFxcXGInXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuTlVNQkVSX01PREUsIHtiZWdpbjogL1xcYlxcZCtbZGh3bV0/L30pXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RvY2tlciddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6ICdmcm9tIG1haW50YWluZXIgZXhwb3NlIGVudiBhcmcgdXNlciBvbmJ1aWxkIHN0b3BzaWduYWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdydW4gY21kIGVudHJ5cG9pbnQgdm9sdW1lIGFkZCBjb3B5IHdvcmtkaXIgbGFiZWwgaGVhbHRoY2hlY2sgc2hlbGwnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6IC9bXlxcXFxdXFxuLyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ2Jhc2gnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6ICc8LydcbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgL15cXHMqQD9yZW1cXGIvLCAvJC8sXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH1cbiAgKTtcbiAgdmFyIExBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdeXFxcXHMqW0EtWmEtei5fP11bQS1aYS16MC05XyQjQH4uP10qKDp8XFxcXHMrbGFiZWwpJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2JhdCcsICdjbWQnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnaWYgZWxzZSBnb3RvIGZvciBpbiBkbyBjYWxsIGV4aXQgbm90IGV4aXN0IGVycm9ybGV2ZWwgZGVmaW5lZCAnICtcbiAgICAgICAgJ2VxdSBuZXEgbHNzIGxlcSBndHIgZ2VxJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAncHJuIG51bCBscHQzIGxwdDIgbHB0MSBjb24gY29tNCBjb20zIGNvbTIgY29tMSBhdXggJyArXG4gICAgICAgICdzaGlmdCBjZCBkaXIgZWNobyBzZXRsb2NhbCBlbmRsb2NhbCBzZXQgcGF1c2UgY29weSAnICtcbiAgICAgICAgJ2FwcGVuZCBhc3NvYyBhdCBhdHRyaWIgYnJlYWsgY2FjbHMgY2QgY2hjcCBjaGRpciBjaGtkc2sgY2hrbnRmcyBjbHMgY21kIGNvbG9yICcgK1xuICAgICAgICAnY29tcCBjb21wYWN0IGNvbnZlcnQgZGF0ZSBkaXIgZGlza2NvbXAgZGlza2NvcHkgZG9za2V5IGVyYXNlIGZzICcgK1xuICAgICAgICAnZmluZCBmaW5kc3RyIGZvcm1hdCBmdHlwZSBncmFmdGFibCBoZWxwIGtleWIgbGFiZWwgbWQgbWtkaXIgbW9kZSBtb3JlIG1vdmUgcGF0aCAnICtcbiAgICAgICAgJ3BhdXNlIHByaW50IHBvcGQgcHVzaGQgcHJvbXQgcmQgcmVjb3ZlciByZW0gcmVuYW1lIHJlcGxhY2UgcmVzdG9yZSBybWRpciBzaGlmdCcgK1xuICAgICAgICAnc29ydCBzdGFydCBzdWJzdCB0aW1lIHRpdGxlIHRyZWUgdHlwZSB2ZXIgdmVyaWZ5IHZvbCAnICtcbiAgICAgICAgLy8gd2ludXRpbHNcbiAgICAgICAgJ3BpbmcgbmV0IGlwY29uZmlnIHRhc2traWxsIHhjb3B5IHJlbiBkZWwnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsIGJlZ2luOiAvJSVbXiBdfCVbXiBdKz8lfCFbXiBdKz8hL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogTEFCRUwuYmVnaW4sIGVuZDogJ2dvdG86ZW9mJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICcoW19hLXpBLVpdXFxcXHcqXFxcXC4pKihbX2EtekEtWl1cXFxcdyo6KT9bX2EtekEtWl1cXFxcdyonfSksXG4gICAgICAgICAgQ09NTUVOVFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLCBiZWdpbjogJ1xcXFxiXFxcXGQrJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBRVU9URURfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gIH07XG4gIHZhciBBUE9TX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy9cbiAgfTtcbiAgdmFyIFVOUVVPVEVEX1BST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdbXFxcXHctP10rOlxcXFx3KycsIGVuZDogJ1xcXFxXJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFZBTFVFTEVTU19QUk9QRVJUWSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFxcXHcrLT9cXFxcdysnLCBlbmQ6ICdcXFxcVycsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogJ2RzY29uZmlnJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICdeZHNjb25maWcnLCBlbmQ6ICdcXFxccycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICcobGlzdHxjcmVhdGV8Z2V0fHNldHxkZWxldGUpLShcXFxcdyspJywgZW5kOiAnXFxcXHMnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnIUAjJCVeJiooKScsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgICAgYmVnaW46ICctLShcXFxcdyspJywgZW5kOiAnXFxcXHMnLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAgUVVPVEVEX1BST1BFUlRZLFxuICAgICAgQVBPU19QUk9QRVJUWSxcbiAgICAgIFVOUVVPVEVEX1BST1BFUlRZLFxuICAgICAgVkFMVUVMRVNTX1BST1BFUlRZLFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVFJJTkdTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7IGJlZ2luOiAnKCh1OD98VSl8TCk/XCInIH0pLFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyh1OD98VSk/UlwiJywgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnXFxcXFxcXFw/LicsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6ICcuJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgTlVNQkVSUyA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoXFxcXGQrKFxcXFwuXFxcXGQqKT98XFxcXC5cXFxcZCspKHV8VXxsfEx8dWx8VUx8ZnxGKScgfSxcbiAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaWYgZWxzZSBlbGlmIGVuZGlmIGRlZmluZSB1bmRlZiBpZmRlZiBpZm5kZWYnfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcXFxcXG4vLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbmNsdWRlJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpbmNsdWRlJ30sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KFNUUklOR1MsIHtjbGFzc05hbWU6ICdtZXRhLXN0cmluZyd9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhLXN0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+JyxcbiAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBTVFJJTkdTLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgRFRTX1JFRkVSRU5DRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJlthLXpcXFxcZF9dKlxcXFxiJ1xuICB9O1xuXG4gIHZhciBEVFNfS0VZV09SRCA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhLWtleXdvcmQnLFxuICAgIGJlZ2luOiAnL1thLXpdW2EtelxcXFxkLV0qLydcbiAgfTtcblxuICB2YXIgRFRTX0xBQkVMID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdeXFxcXHMqW2EtekEtWl9dW2EtekEtWlxcXFxkX10qOidcbiAgfTtcblxuICB2YXIgRFRTX0NFTExfUFJPUEVSVFkgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogJzwnLFxuICAgIGVuZDogJz4nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBOVU1CRVJTLFxuICAgICAgRFRTX1JFRkVSRU5DRVxuICAgIF1cbiAgfTtcblxuICB2YXIgRFRTX05PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luOiAvW2EtekEtWl9dW2EtekEtWlxcZF9AXSpcXHN7LyxcbiAgICBlbmQ6IC9bezs9XS8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZVxuICB9O1xuXG4gIHZhciBEVFNfUk9PVF9OT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbjogJy9cXFxccyp7JyxcbiAgICBlbmQ6ICd9OycsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICBjb250YWluczogW1xuICAgICAgRFRTX1JFRkVSRU5DRSxcbiAgICAgIERUU19LRVlXT1JELFxuICAgICAgRFRTX0xBQkVMLFxuICAgICAgRFRTX05PREUsXG4gICAgICBEVFNfQ0VMTF9QUk9QRVJUWSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiBcIlwiLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBEVFNfUk9PVF9OT0RFLFxuICAgICAgRFRTX1JFRkVSRU5DRSxcbiAgICAgIERUU19LRVlXT1JELFxuICAgICAgRFRTX0xBQkVMLFxuICAgICAgRFRTX05PREUsXG4gICAgICBEVFNfQ0VMTF9QUk9QRVJUWSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1CRVJTLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIFBSRVBST0NFU1NPUixcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICBrZXl3b3JkczogXCJcIlxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBFWFBSRVNTSU9OX0tFWVdPUkRTID0gJ2lmIGVxIG5lIGx0IGx0ZSBndCBndGUgc2VsZWN0IGRlZmF1bHQgbWF0aCBzZXAnO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZHN0J10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtbI1xcL10vLCBlbmQ6IC9cXH0vLCBpbGxlZ2FsOiAvOy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogL1thLXpBLVpcXC4tXSsvLFxuICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7LywgZW5kOiAvXFx9LywgaWxsZWdhbDogLzsvLFxuICAgICAgICBrZXl3b3JkczogRVhQUkVTU0lPTl9LRVlXT1JEU1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gICAgdmFyIGNvbW1lbnRNb2RlID0gaGxqcy5DT01NRU5UKC9cXChcXCovLCAvXFwqXFwpLyk7XG5cbiAgICB2YXIgbm9uVGVybWluYWxNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwiYXR0cmlidXRlXCIsXG4gICAgICAgIGJlZ2luOiAvXlsgXSpbYS16QS1aXVthLXpBLVotXSooW1xccy1dK1thLXpBLVpdW2EtekEtWl0qKSovXG4gICAgfTtcblxuICAgIHZhciBzcGVjaWFsU2VxdWVuY2VNb2RlID0ge1xuICAgICAgICBjbGFzc05hbWU6IFwibWV0YVwiLFxuICAgICAgICBiZWdpbjogL1xcPy4qXFw/L1xuICAgIH07XG5cbiAgICB2YXIgcnVsZUJvZHlNb2RlID0ge1xuICAgICAgICBiZWdpbjogLz0vLCBlbmQ6IC87LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGNvbW1lbnRNb2RlLFxuICAgICAgICAgICAgc3BlY2lhbFNlcXVlbmNlTW9kZSxcbiAgICAgICAgICAgIC8vIHRlcm1pbmFsc1xuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLCBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgICAgIF1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBjb21tZW50TW9kZSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTW9kZSxcbiAgICAgICAgICAgIHJ1bGVCb2R5TW9kZVxuICAgICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBFTElYSVJfSURFTlRfUkUgPSAnW2EtekEtWl9dW2EtekEtWjAtOV9dKihcXFxcIXxcXFxcPyk/JztcbiAgdmFyIEVMSVhJUl9NRVRIT0RfUkUgPSAnW2EtekEtWl9dXFxcXHcqWyE/PV0/fFstK35dXFxcXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcXFwqXFxcXCp8Wy0vKyVeJip+YHxdfFxcXFxbXFxcXF09Pyc7XG4gIHZhciBFTElYSVJfS0VZV09SRFMgPVxuICAgICdhbmQgZmFsc2UgdGhlbiBkZWZpbmVkIG1vZHVsZSBpbiByZXR1cm4gcmVkbyByZXRyeSBlbmQgZm9yIHRydWUgc2VsZiB3aGVuICcgK1xuICAgICduZXh0IHVudGlsIGRvIGJlZ2luIHVubGVzcyBuaWwgYnJlYWsgbm90IGNhc2UgY29uZCBhbGlhcyB3aGlsZSBlbnN1cmUgb3IgJyArXG4gICAgJ2luY2x1ZGUgdXNlIGFsaWFzIGZuIHF1b3RlJztcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJyNcXFxceycsIGVuZDogJ30nLFxuICAgIGxleGVtZXM6IEVMSVhJUl9JREVOVF9SRSxcbiAgICBrZXl3b3JkczogRUxJWElSX0tFWVdPUkRTXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvXG4gICAgICB9XG4gICAgXVxuICB9O1xuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdkZWYgZGVmcCBkZWZtYWNybycsIGVuZDogL1xcQlxcYi8sIC8vIHRoZSBtb2RlIGlzIGVuZGVkIGJ5IHRoZSB0aXRsZVxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgIGJlZ2luOiBFTElYSVJfSURFTlRfUkUsXG4gICAgICAgIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgIH0pXG4gICAgXVxuICB9O1xuICB2YXIgQ0xBU1MgPSBobGpzLmluaGVyaXQoRlVOQ1RJT04sIHtcbiAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgYmVnaW5LZXl3b3JkczogJ2RlZmltcGwgZGVmbW9kdWxlIGRlZnByb3RvY29sIGRlZnJlY29yZCcsIGVuZDogL1xcYmRvXFxifCR8Oy9cbiAgfSk7XG4gIHZhciBFTElYSVJfREVGQVVMVF9DT05UQUlOUyA9IFtcbiAgICBTVFJJTkcsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBDTEFTUyxcbiAgICBGVU5DVElPTixcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgYmVnaW46ICc6KD8hXFxcXHMpJyxcbiAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCB7YmVnaW46IEVMSVhJUl9NRVRIT0RfUkV9XSxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBFTElYSVJfSURFTlRfUkUgKyAnOicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJyhcXFxcYjBbMC03X10rKXwoXFxcXGIweFswLTlhLWZBLUZfXSspfChcXFxcYlsxLTldWzAtOV9dKihcXFxcLlswLTlfXSspPyl8WzBfXVxcXFxiJyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgYmVnaW46ICcoXFxcXCRcXFxcVyl8KChcXFxcJHxcXFxcQFxcXFxAPykoXFxcXHcrKSknXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogJy0+J1xuICAgIH0sXG4gICAgeyAvLyByZWdleHAgY29udGFpbmVyXG4gICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICcpXFxcXHMqJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXSxcbiAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBiZWdpbjogJy8nLCBlbmQ6ICcvW2Etel0qJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46ICclclxcXFxbJywgZW5kOiAnXFxcXF1bYS16XSonXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IEVMSVhJUl9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogRUxJWElSX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBFTElYSVJfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IEVMSVhJUl9ERUZBVUxUX0NPTlRBSU5TXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgQ09NTUVOVCA9IHtcbiAgICB2YXJpYW50czogW1xuICAgICAgaGxqcy5DT01NRU5UKCctLScsICckJyksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICd7LScsXG4gICAgICAgICctfScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcblxuICB2YXIgQ09OU1RSVUNUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLCAvLyBUT0RPOiBvdGhlciBjb25zdHJ1Y3RvcnMgKGJ1aWx0LWluLCBpbmZpeCkuXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBpbGxlZ2FsOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7Y2xhc3NOYW1lOiAndHlwZScsIGJlZ2luOiAnXFxcXGJbQS1aXVtcXFxcd10qKFxcXFwoKFxcXFwuXFxcXC58LHxcXFxcdyspXFxcXCkpPyd9LFxuICAgICAgQ09NTUVOVFxuICAgIF1cbiAgfTtcblxuICB2YXIgUkVDT1JEID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIGNvbnRhaW5zOiBMSVNULmNvbnRhaW5zXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczpcbiAgICAgICdsZXQgaW4gaWYgdGhlbiBlbHNlIGNhc2Ugb2Ygd2hlcmUgbW9kdWxlIGltcG9ydCBleHBvc2luZyAnICtcbiAgICAgICd0eXBlIGFsaWFzIGFzIGluZml4IGluZml4bCBpbmZpeHIgcG9ydCBlZmZlY3QgY29tbWFuZCBzdWJzY3JpcHRpb24nLFxuICAgIGNvbnRhaW5zOiBbXG5cbiAgICAgIC8vIFRvcC1sZXZlbCBjb25zdHJ1Y3Rpb25zLlxuXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwb3J0IGVmZmVjdCBtb2R1bGUnLCBlbmQ6ICdleHBvc2luZycsXG4gICAgICAgIGtleXdvcmRzOiAncG9ydCBlZmZlY3QgbW9kdWxlIHdoZXJlIGNvbW1hbmQgc3Vic2NyaXB0aW9uIGV4cG9zaW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtMSVNULCBDT01NRU5UXSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxXXFxcXC58OydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnaW1wb3J0JywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnaW1wb3J0IGFzIGV4cG9zaW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtMSVNULCBDT01NRU5UXSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxXXFxcXC58OydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAndHlwZScsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ3R5cGUgYWxpYXMnLFxuICAgICAgICBjb250YWluczogW0NPTlNUUlVDVE9SLCBMSVNULCBSRUNPUkQsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5maXggaW5maXhsIGluZml4cicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW2hsanMuQ19OVU1CRVJfTU9ERSwgQ09NTUVOVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAncG9ydCcsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogJ3BvcnQnLFxuICAgICAgICBjb250YWluczogW0NPTU1FTlRdXG4gICAgICB9LFxuXG4gICAgICAvLyBMaXRlcmFscyBhbmQgbmFtZXMuXG5cbiAgICAgIC8vIFRPRE86IGNoYXJhY3RlcnMuXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgQ09OU1RSVUNUT1IsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdeW19hLXpdW1xcXFx3XFwnXSonfSksXG4gICAgICBDT01NRU5ULFxuXG4gICAgICB7YmVnaW46ICctPnw8LSd9IC8vIE5vIG1hcmt1cCwgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdLFxuICAgIGlsbGVnYWw6IC87L1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFJVQllfTUVUSE9EX1JFID0gJ1thLXpBLVpfXVxcXFx3KlshPz1dP3xbLSt+XVxcXFxAfDw8fD4+fD1+fD09PT98PD0+fFs8Pl09P3xcXFxcKlxcXFwqfFstLyslXiYqfmB8XXxcXFxcW1xcXFxdPT8nO1xuICB2YXIgUlVCWV9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2FuZCB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3Igc2VsZiB3aGVuICcgK1xuICAgICAgJ25leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSAnICtcbiAgICAgICdyZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIGF0dHJfcmVhZGVyIGF0dHJfd3JpdGVyIGF0dHJfYWNjZXNzb3InLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnXG4gIH07XG4gIHZhciBZQVJET0NUQUcgPSB7XG4gICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICBiZWdpbjogJ0BbQS1aYS16XSsnXG4gIH07XG4gIHZhciBJUkJfT0JKRUNUID0ge1xuICAgIGJlZ2luOiAnIzwnLCBlbmQ6ICc+J1xuICB9O1xuICB2YXIgQ09NTUVOVF9NT0RFUyA9IFtcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnIycsXG4gICAgICAnJCcsXG4gICAgICB7XG4gICAgICAgIGNvbnRhaW5zOiBbWUFSRE9DVEFHXVxuICAgICAgfVxuICAgICksXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ15cXFxcPWJlZ2luJyxcbiAgICAgICdeXFxcXD1lbmQnLFxuICAgICAge1xuICAgICAgICBjb250YWluczogW1lBUkRPQ1RBR10sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH1cbiAgICApLFxuICAgIGhsanMuQ09NTUVOVCgnXl9fRU5EX18nLCAnXFxcXG4kJylcbiAgXTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJyNcXFxceycsIGVuZDogJ30nLFxuICAgIGtleXdvcmRzOiBSVUJZX0tFWVdPUkRTXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99LFxuICAgICAge2JlZ2luOiAvXCIvLCBlbmQ6IC9cIi99LFxuICAgICAge2JlZ2luOiAvYC8sIGVuZDogL2AvfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdP1xcXFwoJywgZW5kOiAnXFxcXCknfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdP1xcXFxbJywgZW5kOiAnXFxcXF0nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdP3snLCBlbmQ6ICd9J30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT88JywgZW5kOiAnPid9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/LycsIGVuZDogJy8nfSxcbiAgICAgIHtiZWdpbjogJyVbcVF3V3hdPyUnLCBlbmQ6ICclJ30sXG4gICAgICB7YmVnaW46ICclW3FRd1d4XT8tJywgZW5kOiAnLSd9LFxuICAgICAge2JlZ2luOiAnJVtxUXdXeF0/XFxcXHwnLCBlbmQ6ICdcXFxcfCd9LFxuICAgICAge1xuICAgICAgICAvLyBcXEIgaW4gdGhlIGJlZ2lubmluZyBzdXBwcmVzc2VzIHJlY29nbml0aW9uIG9mID8tc2VxdWVuY2VzIHdoZXJlID9cbiAgICAgICAgLy8gaXMgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgcHJlY2VkaW5nIGlkZW50aWZpZXIsIGFzIGluOiBgZnVuYz80YFxuICAgICAgICBiZWdpbjogL1xcQlxcPyhcXFxcXFxkezEsM318XFxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcXFx1W0EtRmEtZjAtOV17NH18XFxcXD9cXFMpXFxiL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC88PCgtPylcXHcrJC8sIGVuZDogL15cXHMqXFx3KyQvLFxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAga2V5d29yZHM6IFJVQllfS0VZV09SRFNcbiAgfTtcblxuICB2YXIgUlVCWV9ERUZBVUxUX0NPTlRBSU5TID0gW1xuICAgIFNUUklORyxcbiAgICBJUkJfT0JKRUNULFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBtb2R1bGUnLCBlbmQ6ICckfDsnLFxuICAgICAgaWxsZWdhbDogLz0vLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnW0EtWmEtel9dXFxcXHcqKDo6XFxcXHcrKSooXFxcXD98XFxcXCEpPyd9KSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnPFxcXFxzKicsXG4gICAgICAgICAgY29udGFpbnM6IFt7XG4gICAgICAgICAgICBiZWdpbjogJygnICsgaGxqcy5JREVOVF9SRSArICc6Oik/JyArIGhsanMuSURFTlRfUkVcbiAgICAgICAgICB9XVxuICAgICAgICB9XG4gICAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgYmVnaW5LZXl3b3JkczogJ2RlZicsIGVuZDogJyR8OycsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IFJVQllfTUVUSE9EX1JFfSksXG4gICAgICAgIFBBUkFNU1xuICAgICAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN3YWxsb3cgbmFtZXNwYWNlIHF1YWxpZmllcnMgYmVmb3JlIHN5bWJvbHNcbiAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJzo6J1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnKFxcXFwhfFxcXFw/KT86JyxcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgIGJlZ2luOiAnOig/IVxcXFxzKScsXG4gICAgICBjb250YWluczogW1NUUklORywge2JlZ2luOiBSVUJZX01FVEhPRF9SRX1dLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnKFxcXFwkXFxcXFcpfCgoXFxcXCR8XFxcXEBcXFxcQD8pKFxcXFx3KykpJyAvLyB2YXJpYWJsZXNcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICBiZWdpbjogL1xcfC8sIGVuZDogL1xcfC8sXG4gICAgICBrZXl3b3JkczogUlVCWV9LRVlXT1JEU1xuICAgIH0sXG4gICAgeyAvLyByZWdleHAgY29udGFpbmVyXG4gICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8dW5sZXNzKVxcXFxzKicsXG4gICAgICBrZXl3b3JkczogJ3VubGVzcycsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBJUkJfT0JKRUNULFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7YmVnaW46ICcvJywgZW5kOiAnL1thLXpdKid9LFxuICAgICAgICAgICAge2JlZ2luOiAnJXJ7JywgZW5kOiAnfVthLXpdKid9LFxuICAgICAgICAgICAge2JlZ2luOiAnJXJcXFxcKCcsIGVuZDogJ1xcXFwpW2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclciEnLCBlbmQ6ICchW2Etel0qJ30sXG4gICAgICAgICAgICB7YmVnaW46ICclclxcXFxbJywgZW5kOiAnXFxcXF1bYS16XSonfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXS5jb25jYXQoQ09NTUVOVF9NT0RFUyksXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gIF0uY29uY2F0KENPTU1FTlRfTU9ERVMpO1xuXG4gIFNVQlNULmNvbnRhaW5zID0gUlVCWV9ERUZBVUxUX0NPTlRBSU5TO1xuICBQQVJBTVMuY29udGFpbnMgPSBSVUJZX0RFRkFVTFRfQ09OVEFJTlM7XG5cbiAgdmFyIFNJTVBMRV9QUk9NUFQgPSBcIls+P10+XCI7XG4gIHZhciBERUZBVUxUX1BST01QVCA9IFwiW1xcXFx3I10rXFxcXChcXFxcdytcXFxcKTpcXFxcZCs6XFxcXGQrPlwiO1xuICB2YXIgUlZNX1BST01QVCA9IFwiKFxcXFx3Ky0pP1xcXFxkK1xcXFwuXFxcXGQrXFxcXC5cXFxcZChwXFxcXGQrKT9bXj5dKz5cIjtcblxuICB2YXIgSVJCX0RFRkFVTFQgPSBbXG4gICAge1xuICAgICAgYmVnaW46IC9eXFxzKj0+LyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6ICckJywgY29udGFpbnM6IFJVQllfREVGQVVMVF9DT05UQUlOU1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICBiZWdpbjogJ14oJytTSU1QTEVfUFJPTVBUK1wifFwiK0RFRkFVTFRfUFJPTVBUKyd8JytSVk1fUFJPTVBUKycpJyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBlbmQ6ICckJywgY29udGFpbnM6IFJVQllfREVGQVVMVF9DT05UQUlOU1xuICAgICAgfVxuICAgIH1cbiAgXTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncmInLCAnZ2Vtc3BlYycsICdwb2RzcGVjJywgJ3Rob3InLCAnaXJiJ10sXG4gICAga2V5d29yZHM6IFJVQllfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IENPTU1FTlRfTU9ERVMuY29uY2F0KElSQl9ERUZBVUxUKS5jb25jYXQoUlVCWV9ERUZBVUxUX0NPTlRBSU5TKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBzdWJMYW5ndWFnZTogJ3htbCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnPCUjJywgJyU+JyksXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnPCVbJT0tXT8nLCBlbmQ6ICdbJS1dPyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzcGF3biBzcGF3bl9saW5rIHNlbGYnLFxuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FmdGVyIGFuZCBhbmRhbHNvfDEwIGJhbmQgYmVnaW4gYm5vdCBib3IgYnNsIGJzciBieG9yIGNhc2UgY2F0Y2ggY29uZCBkaXYgZW5kIGZ1biBpZiAnICtcbiAgICAgICAgJ2xldCBub3Qgb2Ygb3Igb3JlbHNlfDEwIHF1ZXJ5IHJlY2VpdmUgcmVtIHRyeSB3aGVuIHhvcidcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJ15bMC05XSs+ICcsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJyUnLCAnJCcpLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkKyNbYS1mQS1GMC05XSt8XFxcXGQrKFxcXFwuXFxcXGQrKT8oW2VFXVstK10/XFxcXGQrKT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcPyg6Oik/KFtBLVpdXFxcXHcqKDo6KT8pKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnLT4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ29rJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICchJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcoXFxcXGJbYS16XFwnXVthLXpBLVowLTlfXFwnXSo6W2EtelxcJ11bYS16QS1aMC05X1xcJ10qKXwoXFxcXGJbYS16XFwnXVthLXpBLVowLTlfXFwnXSopJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1tBLVpdW2EtekEtWjAtOV9cXCddKicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCQVNJQ19BVE9NX1JFID0gJ1thLXpcXCddW2EtekEtWjAtOV9cXCddKic7XG4gIHZhciBGVU5DVElPTl9OQU1FX1JFID0gJygnICsgQkFTSUNfQVRPTV9SRSArICc6JyArIEJBU0lDX0FUT01fUkUgKyAnfCcgKyBCQVNJQ19BVE9NX1JFICsgJyknO1xuICB2YXIgRVJMQU5HX1JFU0VSVkVEID0ge1xuICAgIGtleXdvcmQ6XG4gICAgICAnYWZ0ZXIgYW5kIGFuZGFsc298MTAgYmFuZCBiZWdpbiBibm90IGJvciBic2wgYnpyIGJ4b3IgY2FzZSBjYXRjaCBjb25kIGRpdiBlbmQgZnVuIGlmICcgK1xuICAgICAgJ2xldCBub3Qgb2Ygb3JlbHNlfDEwIHF1ZXJ5IHJlY2VpdmUgcmVtIHRyeSB3aGVuIHhvcicsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdmYWxzZSB0cnVlJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCclJywgJyQnKTtcbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrI1thLWZBLUYwLTldK3xcXFxcZCsoXFxcXC5cXFxcZCspPyhbZUVdWy0rXT9cXFxcZCspPyknLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTkFNRURfRlVOID0ge1xuICAgIGJlZ2luOiAnZnVuXFxcXHMrJyArIEJBU0lDX0FUT01fUkUgKyAnL1xcXFxkKydcbiAgfTtcbiAgdmFyIEZVTkNUSU9OX0NBTEwgPSB7XG4gICAgYmVnaW46IEZVTkNUSU9OX05BTUVfUkUgKyAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBGVU5DVElPTl9OQU1FX1JFLCByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAvLyBcImNvbnRhaW5zXCIgZGVmaW5lZCBsYXRlclxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIFRVUExFID0ge1xuICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgIHJlbGV2YW5jZTogMFxuICAgIC8vIFwiY29udGFpbnNcIiBkZWZpbmVkIGxhdGVyXG4gIH07XG4gIHZhciBWQVIxID0ge1xuICAgIGJlZ2luOiAnXFxcXGJfKFtBLVpdW0EtWmEtejAtOV9dKik/JyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFZBUjIgPSB7XG4gICAgYmVnaW46ICdbQS1aXVthLXpBLVowLTlfXSonLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgUkVDT1JEX0FDQ0VTUyA9IHtcbiAgICBiZWdpbjogJyMnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJyMnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAneycsIGVuZDogJ30nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgLy8gXCJjb250YWluc1wiIGRlZmluZWQgbGF0ZXJcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIEJMT0NLX1NUQVRFTUVOVFMgPSB7XG4gICAgYmVnaW5LZXl3b3JkczogJ2Z1biByZWNlaXZlIGlmIHRyeSBjYXNlJywgZW5kOiAnZW5kJyxcbiAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVEXG4gIH07XG4gIEJMT0NLX1NUQVRFTUVOVFMuY29udGFpbnMgPSBbXG4gICAgQ09NTUVOVCxcbiAgICBOQU1FRF9GVU4sXG4gICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJyd9KSxcbiAgICBCTE9DS19TVEFURU1FTlRTLFxuICAgIEZVTkNUSU9OX0NBTEwsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBOVU1CRVIsXG4gICAgVFVQTEUsXG4gICAgVkFSMSwgVkFSMixcbiAgICBSRUNPUkRfQUNDRVNTXG4gIF07XG5cbiAgdmFyIEJBU0lDX01PREVTID0gW1xuICAgIENPTU1FTlQsXG4gICAgTkFNRURfRlVOLFxuICAgIEJMT0NLX1NUQVRFTUVOVFMsXG4gICAgRlVOQ1RJT05fQ0FMTCxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIE5VTUJFUixcbiAgICBUVVBMRSxcbiAgICBWQVIxLCBWQVIyLFxuICAgIFJFQ09SRF9BQ0NFU1NcbiAgXTtcbiAgRlVOQ1RJT05fQ0FMTC5jb250YWluc1sxXS5jb250YWlucyA9IEJBU0lDX01PREVTO1xuICBUVVBMRS5jb250YWlucyA9IEJBU0lDX01PREVTO1xuICBSRUNPUkRfQUNDRVNTLmNvbnRhaW5zWzFdLmNvbnRhaW5zID0gQkFTSUNfTU9ERVM7XG5cbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgY29udGFpbnM6IEJBU0lDX01PREVTXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydlcmwnXSxcbiAgICBrZXl3b3JkczogRVJMQU5HX1JFU0VSVkVELFxuICAgIGlsbGVnYWw6ICcoPC98XFxcXCo9fFxcXFwrPXwtPXwvXFxcXCp8XFxcXCovfFxcXFwoXFxcXCp8XFxcXCpcXFxcKSknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdeJyArIEJBU0lDX0FUT01fUkUgKyAnXFxcXHMqXFxcXCgnLCBlbmQ6ICctPicsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXCh8I3wvL3wvXFxcXCp8XFxcXFxcXFx8Onw7JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQQVJBTVMsXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBCQVNJQ19BVE9NX1JFfSlcbiAgICAgICAgXSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnO3xcXFxcLicsXG4gICAgICAgICAga2V5d29yZHM6IEVSTEFOR19SRVNFUlZFRCxcbiAgICAgICAgICBjb250YWluczogQkFTSUNfTU9ERVNcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENPTU1FTlQsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXi0nLCBlbmQ6ICdcXFxcLicsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGxleGVtZXM6ICctJyArIGhsanMuSURFTlRfUkUsXG4gICAgICAgIGtleXdvcmRzOlxuICAgICAgICAgICctbW9kdWxlIC1yZWNvcmQgLXVuZGVmIC1leHBvcnQgLWlmZGVmIC1pZm5kZWYgLWF1dGhvciAtY29weXJpZ2h0IC1kb2MgLXZzbiAnICtcbiAgICAgICAgICAnLWltcG9ydCAtaW5jbHVkZSAtaW5jbHVkZV9saWIgLWNvbXBpbGUgLWRlZmluZSAtZWxzZSAtZW5kaWYgLWZpbGUgLWJlaGF2aW91ciAnICtcbiAgICAgICAgICAnLWJlaGF2aW9yIC1zcGVjJyxcbiAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICB9LFxuICAgICAgTlVNQkVSLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIFJFQ09SRF9BQ0NFU1MsXG4gICAgICBWQVIxLCBWQVIyLFxuICAgICAgVFVQTEUsXG4gICAgICB7YmVnaW46IC9cXC4kL30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsneGxzeCcsICd4bHMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IC9bYS16QS1aXVtcXHdcXC5dKi8sXG4gICAgLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGltcG9ydGVkIGZyb20gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTYwNTEzMDQyNzEwL2h0dHBzOi8vc3VwcG9ydC5vZmZpY2UuY29tL2VuLXVzL2FydGljbGUvRXhjZWwtZnVuY3Rpb25zLWFscGhhYmV0aWNhbC1iMzk0NDU3Mi0yNTVkLTRlZmItYmI5Ni1jNmQ5MDAzM2UxODhcbiAgICBrZXl3b3Jkczoge1xuICAgICAgICBidWlsdF9pbjogJ0FCUyBBQ0NSSU5UIEFDQ1JJTlRNIEFDT1MgQUNPU0ggQUNPVCBBQ09USCBBR0dSRUdBVEUgQUREUkVTUyBBTU9SREVHUkMgQU1PUkxJTkMgQU5EIEFSQUJJQyBBUkVBUyBBU0MgQVNJTiBBU0lOSCBBVEFOIEFUQU4yIEFUQU5IIEFWRURFViBBVkVSQUdFIEFWRVJBR0VBIEFWRVJBR0VJRiBBVkVSQUdFSUZTIEJBSFRURVhUIEJBU0UgQkVTU0VMSSBCRVNTRUxKIEJFU1NFTEsgQkVTU0VMWSBCRVRBRElTVCBCRVRBLkRJU1QgQkVUQUlOViBCRVRBLklOViBCSU4yREVDIEJJTjJIRVggQklOMk9DVCBCSU5PTURJU1QgQklOT00uRElTVCBCSU5PTS5ESVNULlJBTkdFIEJJTk9NLklOViBCSVRBTkQgQklUTFNISUZUIEJJVE9SIEJJVFJTSElGVCBCSVRYT1IgQ0FMTCBDRUlMSU5HIENFSUxJTkcuTUFUSCBDRUlMSU5HLlBSRUNJU0UgQ0VMTCBDSEFSIENISURJU1QgQ0hJSU5WIENISVRFU1QgQ0hJU1EuRElTVCBDSElTUS5ESVNULlJUIENISVNRLklOViBDSElTUS5JTlYuUlQgQ0hJU1EuVEVTVCBDSE9PU0UgQ0xFQU4gQ09ERSBDT0xVTU4gQ09MVU1OUyBDT01CSU4gQ09NQklOQSBDT01QTEVYIENPTkNBVCBDT05DQVRFTkFURSBDT05GSURFTkNFIENPTkZJREVOQ0UuTk9STSBDT05GSURFTkNFLlQgQ09OVkVSVCBDT1JSRUwgQ09TIENPU0ggQ09UIENPVEggQ09VTlQgQ09VTlRBIENPVU5UQkxBTksgQ09VTlRJRiBDT1VOVElGUyBDT1VQREFZQlMgQ09VUERBWVMgQ09VUERBWVNOQyBDT1VQTkNEIENPVVBOVU0gQ09VUFBDRCBDT1ZBUiBDT1ZBUklBTkNFLlAgQ09WQVJJQU5DRS5TIENSSVRCSU5PTSBDU0MgQ1NDSCBDVUJFS1BJTUVNQkVSIENVQkVNRU1CRVIgQ1VCRU1FTUJFUlBST1BFUlRZIENVQkVSQU5LRURNRU1CRVIgQ1VCRVNFVCBDVUJFU0VUQ09VTlQgQ1VCRVZBTFVFIENVTUlQTVQgQ1VNUFJJTkMgREFURSBEQVRFRElGIERBVEVWQUxVRSBEQVZFUkFHRSBEQVkgREFZUyBEQVlTMzYwIERCIERCQ1MgRENPVU5UIERDT1VOVEEgRERCIERFQzJCSU4gREVDMkhFWCBERUMyT0NUIERFQ0lNQUwgREVHUkVFUyBERUxUQSBERVZTUSBER0VUIERJU0MgRE1BWCBETUlOIERPTExBUiBET0xMQVJERSBET0xMQVJGUiBEUFJPRFVDVCBEU1RERVYgRFNUREVWUCBEU1VNIERVUkFUSU9OIERWQVIgRFZBUlAgRURBVEUgRUZGRUNUIEVOQ09ERVVSTCBFT01PTlRIIEVSRiBFUkYuUFJFQ0lTRSBFUkZDIEVSRkMuUFJFQ0lTRSBFUlJPUi5UWVBFIEVVUk9DT05WRVJUIEVWRU4gRVhBQ1QgRVhQIEVYUE9OLkRJU1QgRVhQT05ESVNUIEZBQ1QgRkFDVERPVUJMRSBGQUxTRXwwIEYuRElTVCBGRElTVCBGLkRJU1QuUlQgRklMVEVSWE1MIEZJTkQgRklOREIgRi5JTlYgRi5JTlYuUlQgRklOViBGSVNIRVIgRklTSEVSSU5WIEZJWEVEIEZMT09SIEZMT09SLk1BVEggRkxPT1IuUFJFQ0lTRSBGT1JFQ0FTVCBGT1JFQ0FTVC5FVFMgRk9SRUNBU1QuRVRTLkNPTkZJTlQgRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIEZPUkVDQVNULkVUUy5TVEFUIEZPUkVDQVNULkxJTkVBUiBGT1JNVUxBVEVYVCBGUkVRVUVOQ1kgRi5URVNUIEZURVNUIEZWIEZWU0NIRURVTEUgR0FNTUEgR0FNTUEuRElTVCBHQU1NQURJU1QgR0FNTUEuSU5WIEdBTU1BSU5WIEdBTU1BTE4gR0FNTUFMTi5QUkVDSVNFIEdBVVNTIEdDRCBHRU9NRUFOIEdFU1RFUCBHRVRQSVZPVERBVEEgR1JPV1RIIEhBUk1FQU4gSEVYMkJJTiBIRVgyREVDIEhFWDJPQ1QgSExPT0tVUCBIT1VSIEhZUEVSTElOSyBIWVBHRU9NLkRJU1QgSFlQR0VPTURJU1QgSUZ8MCBJRkVSUk9SIElGTkEgSUZTIElNQUJTIElNQUdJTkFSWSBJTUFSR1VNRU5UIElNQ09OSlVHQVRFIElNQ09TIElNQ09TSCBJTUNPVCBJTUNTQyBJTUNTQ0ggSU1ESVYgSU1FWFAgSU1MTiBJTUxPRzEwIElNTE9HMiBJTVBPV0VSIElNUFJPRFVDVCBJTVJFQUwgSU1TRUMgSU1TRUNIIElNU0lOIElNU0lOSCBJTVNRUlQgSU1TVUIgSU1TVU0gSU1UQU4gSU5ERVggSU5ESVJFQ1QgSU5GTyBJTlQgSU5URVJDRVBUIElOVFJBVEUgSVBNVCBJUlIgSVNCTEFOSyBJU0VSUiBJU0VSUk9SIElTRVZFTiBJU0ZPUk1VTEEgSVNMT0dJQ0FMIElTTkEgSVNOT05URVhUIElTTlVNQkVSIElTT0REIElTUkVGIElTVEVYVCBJU08uQ0VJTElORyBJU09XRUVLTlVNIElTUE1UIEpJUyBLVVJUIExBUkdFIExDTSBMRUZUIExFRlRCIExFTiBMRU5CIExJTkVTVCBMTiBMT0cgTE9HMTAgTE9HRVNUIExPR0lOViBMT0dOT1JNLkRJU1QgTE9HTk9STURJU1QgTE9HTk9STS5JTlYgTE9PS1VQIExPV0VSIE1BVENIIE1BWCBNQVhBIE1BWElGUyBNREVURVJNIE1EVVJBVElPTiBNRURJQU4gTUlEIE1JREJzIE1JTiBNSU5JRlMgTUlOQSBNSU5VVEUgTUlOVkVSU0UgTUlSUiBNTVVMVCBNT0QgTU9ERSBNT0RFLk1VTFQgTU9ERS5TTkdMIE1PTlRIIE1ST1VORCBNVUxUSU5PTUlBTCBNVU5JVCBOIE5BIE5FR0JJTk9NLkRJU1QgTkVHQklOT01ESVNUIE5FVFdPUktEQVlTIE5FVFdPUktEQVlTLklOVEwgTk9NSU5BTCBOT1JNLkRJU1QgTk9STURJU1QgTk9STUlOViBOT1JNLklOViBOT1JNLlMuRElTVCBOT1JNU0RJU1QgTk9STS5TLklOViBOT1JNU0lOViBOT1QgTk9XIE5QRVIgTlBWIE5VTUJFUlZBTFVFIE9DVDJCSU4gT0NUMkRFQyBPQ1QySEVYIE9ERCBPRERGUFJJQ0UgT0RERllJRUxEIE9ERExQUklDRSBPRERMWUlFTEQgT0ZGU0VUIE9SIFBEVVJBVElPTiBQRUFSU09OIFBFUkNFTlRJTEUuRVhDIFBFUkNFTlRJTEUuSU5DIFBFUkNFTlRJTEUgUEVSQ0VOVFJBTksuRVhDIFBFUkNFTlRSQU5LLklOQyBQRVJDRU5UUkFOSyBQRVJNVVQgUEVSTVVUQVRJT05BIFBISSBQSE9ORVRJQyBQSSBQTVQgUE9JU1NPTi5ESVNUIFBPSVNTT04gUE9XRVIgUFBNVCBQUklDRSBQUklDRURJU0MgUFJJQ0VNQVQgUFJPQiBQUk9EVUNUIFBST1BFUiBQViBRVUFSVElMRSBRVUFSVElMRS5FWEMgUVVBUlRJTEUuSU5DIFFVT1RJRU5UIFJBRElBTlMgUkFORCBSQU5EQkVUV0VFTiBSQU5LLkFWRyBSQU5LLkVRIFJBTksgUkFURSBSRUNFSVZFRCBSRUdJU1RFUi5JRCBSRVBMQUNFIFJFUExBQ0VCIFJFUFQgUklHSFQgUklHSFRCIFJPTUFOIFJPVU5EIFJPVU5ERE9XTiBST1VORFVQIFJPVyBST1dTIFJSSSBSU1EgUlREIFNFQVJDSCBTRUFSQ0hCIFNFQyBTRUNIIFNFQ09ORCBTRVJJRVNTVU0gU0hFRVQgU0hFRVRTIFNJR04gU0lOIFNJTkggU0tFVyBTS0VXLlAgU0xOIFNMT1BFIFNNQUxMIFNRTC5SRVFVRVNUIFNRUlQgU1FSVFBJIFNUQU5EQVJESVpFIFNUREVWIFNUREVWLlAgU1RERVYuUyBTVERFVkEgU1RERVZQIFNUREVWUEEgU1RFWVggU1VCU1RJVFVURSBTVUJUT1RBTCBTVU0gU1VNSUYgU1VNSUZTIFNVTVBST0RVQ1QgU1VNU1EgU1VNWDJNWTIgU1VNWDJQWTIgU1VNWE1ZMiBTV0lUQ0ggU1lEIFQgVEFOIFRBTkggVEJJTExFUSBUQklMTFBSSUNFIFRCSUxMWUlFTEQgVC5ESVNUIFQuRElTVC4yVCBULkRJU1QuUlQgVERJU1QgVEVYVCBURVhUSk9JTiBUSU1FIFRJTUVWQUxVRSBULklOViBULklOVi4yVCBUSU5WIFRPREFZIFRSQU5TUE9TRSBUUkVORCBUUklNIFRSSU1NRUFOIFRSVUV8MCBUUlVOQyBULlRFU1QgVFRFU1QgVFlQRSBVTklDSEFSIFVOSUNPREUgVVBQRVIgVkFMVUUgVkFSIFZBUi5QIFZBUi5TIFZBUkEgVkFSUCBWQVJQQSBWREIgVkxPT0tVUCBXRUJTRVJWSUNFIFdFRUtEQVkgV0VFS05VTSBXRUlCVUxMIFdFSUJVTEwuRElTVCBXT1JLREFZIFdPUktEQVkuSU5UTCBYSVJSIFhOUFYgWE9SIFlFQVIgWUVBUkZSQUMgWUlFTEQgWUlFTERESVNDIFlJRUxETUFUIFouVEVTVCBaVEVTVCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8qIG1hdGNoZXMgYSBiZWdpbm5pbmcgZXF1YWwgc2lnbiBmb3VuZCBpbiBFeGNlbCBmb3JtdWxhIGV4YW1wbGVzICovIFxuICAgICAgICBiZWdpbjogL149LyxcbiAgICAgICAgZW5kOiAvW149XS8sIHJldHVybkVuZDogdHJ1ZSwgaWxsZWdhbDogLz0vLCAvKiBvbmx5IGFsbG93IHNpbmdsZSBlcXVhbCBzaWduIGF0IGZyb250IG9mIGxpbmUgKi9cbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8qIHRlY2huaWNhbGx5LCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIDIgbGV0dGVycyBpbiBjb2x1bW4gbmFtZXMsIGJ1dCB0aGlzIHByZXZlbnRzIGNvbmZsaWN0IHdpdGggc29tZSBrZXl3b3JkcyAqL1xuICAgICAge1xuICAgICAgICAvKiBtYXRjaGVzIGEgcmVmZXJlbmNlIHRvIGEgc2luZ2xlIGNlbGwgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9cXGJbQS1aXXsxLDJ9XFxkK1xcYi8sXG4gICAgICAgIGVuZDogL1teXFxkXS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLyogbWF0Y2hlcyBhIHJlZmVyZW5jZSB0byBhIHJhbmdlIG9mIGNlbGxzICovXG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvW0EtWl17MCwyfVxcZCo6W0EtWl17MCwyfVxcZCovLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogaGxqcy5OVU1CRVJfUkUgKyAnKCUpPycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8qIEV4Y2VsIGZvcm11bGEgY29tbWVudHMgYXJlIGRvbmUgYnkgcHV0dGluZyB0aGUgY29tbWVudCBpbiBhIGZ1bmN0aW9uIGNhbGwgdG8gTigpICovXG4gICAgICBobGpzLkNPTU1FTlQoL1xcYk5cXCgvLC9cXCkvLFxuICAgICAge1xuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vXG4gICAgICB9KVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICB7XG4gICAgICBiZWdpbjogL1teXFx1MjQwMVxcdTAwMDFdKy8sXG4gICAgICBlbmQ6IC9bXFx1MjQwMVxcdTAwMDFdLyxcbiAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgIHJldHVybkVuZDogZmFsc2UsXG4gICAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogLyhbXlxcdTI0MDFcXHUwMDAxPV0rKS8sXG4gICAgICAgIGVuZDogLz0oW15cXHUyNDAxXFx1MDAwMT1dKykvLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWUsXG4gICAgICAgIHJldHVybkJlZ2luOiBmYWxzZSxcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvPS8sXG4gICAgICAgIGVuZDogLyhbXFx1MjQwMVxcdTAwMDFdKS8sXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJ1xuICAgICAgfV1cbiAgICB9XSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcblxuICAgIHZhciBDSEFSID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLycoLnxcXFxcW3hYdVVdW2EtekEtWjAtOV0rKScvXG4gICAgfTtcblxuICAgIHZhciBTVFJJTkcgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHZhciBOQU1FID0ge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAvW14wLTlcXG5cXHQgXCInKCksLmB7fVxcW1xcXTo7XVteXFxuXFx0IFwiJygpLC5ge31cXFtcXF06O10rfFteMC05XFxuXFx0IFwiJygpLC5ge31cXFtcXF06Oz1dL1xuICAgIH07XG5cbiAgICB2YXIgTUVUSE9EID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdkZWYnLFxuICAgICAgICBlbmQ6IC9bOj17XFxbKFxcbjtdLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtOQU1FXVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnLFxuICAgICAgICAgICAga2V5d29yZDogJ2Nhc2UgY2xhc3MgZGVmIGVsc2UgZW51bSBpZiBpbXBsIGltcG9ydCBpbiBsYXQgcmVsIGluZGV4IGxldCBtYXRjaCBuYW1lc3BhY2Ugc3dpdGNoIHR5cGUgeWllbGQgd2l0aCdcbiAgICAgICAgfSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICBDSEFSLFxuICAgICAgICAgICAgU1RSSU5HLFxuICAgICAgICAgICAgTUVUSE9ELFxuICAgICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgICAgIF1cbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgfTtcblxuICB2YXIgRl9LRVlXT1JEUyA9IHtcbiAgICBsaXRlcmFsOiAnLkZhbHNlLiAuVHJ1ZS4nLFxuICAgIGtleXdvcmQ6ICdraW5kIGRvIHdoaWxlIHByaXZhdGUgY2FsbCBpbnRyaW5zaWMgd2hlcmUgZWxzZXdoZXJlICcgK1xuICAgICAgJ3R5cGUgZW5kdHlwZSBlbmRtb2R1bGUgZW5kc2VsZWN0IGVuZGludGVyZmFjZSBlbmQgZW5kZG8gZW5kaWYgaWYgZm9yYWxsIGVuZGZvcmFsbCBvbmx5IGNvbnRhaW5zIGRlZmF1bHQgcmV0dXJuIHN0b3AgdGhlbiAnICtcbiAgICAgICdwdWJsaWMgc3Vicm91dGluZXwxMCBmdW5jdGlvbiBwcm9ncmFtIC5hbmQuIC5vci4gLm5vdC4gLmxlLiAuZXEuIC5nZS4gLmd0LiAubHQuICcgK1xuICAgICAgJ2dvdG8gc2F2ZSBlbHNlIHVzZSBtb2R1bGUgc2VsZWN0IGNhc2UgJyArXG4gICAgICAnYWNjZXNzIGJsYW5rIGRpcmVjdCBleGlzdCBmaWxlIGZtdCBmb3JtIGZvcm1hdHRlZCBpb3N0YXQgbmFtZSBuYW1lZCBuZXh0cmVjIG51bWJlciBvcGVuZWQgcmVjIHJlY2wgc2VxdWVudGlhbCBzdGF0dXMgdW5mb3JtYXR0ZWQgdW5pdCAnICtcbiAgICAgICdjb250aW51ZSBmb3JtYXQgcGF1c2UgY3ljbGUgZXhpdCAnICtcbiAgICAgICdjX251bGxfY2hhciBjX2FsZXJ0IGNfYmFja3NwYWNlIGNfZm9ybV9mZWVkIGZsdXNoIHdhaXQgZGVjaW1hbCByb3VuZCBpb21zZyAnICtcbiAgICAgICdzeW5jaHJvbm91cyBub3Bhc3Mgbm9uX292ZXJyaWRhYmxlIHBhc3MgcHJvdGVjdGVkIHZvbGF0aWxlIGFic3RyYWN0IGV4dGVuZHMgaW1wb3J0ICcgK1xuICAgICAgJ25vbl9pbnRyaW5zaWMgdmFsdWUgZGVmZXJyZWQgZ2VuZXJpYyBmaW5hbCBlbnVtZXJhdG9yIGNsYXNzIGFzc29jaWF0ZSBiaW5kIGVudW0gJyArXG4gICAgICAnY19pbnQgY19zaG9ydCBjX2xvbmcgY19sb25nX2xvbmcgY19zaWduZWRfY2hhciBjX3NpemVfdCBjX2ludDhfdCBjX2ludDE2X3QgY19pbnQzMl90IGNfaW50NjRfdCBjX2ludF9sZWFzdDhfdCBjX2ludF9sZWFzdDE2X3QgJyArXG4gICAgICAnY19pbnRfbGVhc3QzMl90IGNfaW50X2xlYXN0NjRfdCBjX2ludF9mYXN0OF90IGNfaW50X2Zhc3QxNl90IGNfaW50X2Zhc3QzMl90IGNfaW50X2Zhc3Q2NF90IGNfaW50bWF4X3QgQ19pbnRwdHJfdCBjX2Zsb2F0IGNfZG91YmxlICcgK1xuICAgICAgJ2NfbG9uZ19kb3VibGUgY19mbG9hdF9jb21wbGV4IGNfZG91YmxlX2NvbXBsZXggY19sb25nX2RvdWJsZV9jb21wbGV4IGNfYm9vbCBjX2NoYXIgY19udWxsX3B0ciBjX251bGxfZnVucHRyICcgK1xuICAgICAgJ2NfbmV3X2xpbmUgY19jYXJyaWFnZV9yZXR1cm4gY19ob3Jpem9udGFsX3RhYiBjX3ZlcnRpY2FsX3RhYiBpc29fY19iaW5kaW5nIGNfbG9jIGNfZnVubG9jIGNfYXNzb2NpYXRlZCAgY19mX3BvaW50ZXIgJyArXG4gICAgICAnY19wdHIgY19mdW5wdHIgaXNvX2ZvcnRyYW5fZW52IGNoYXJhY3Rlcl9zdG9yYWdlX3NpemUgZXJyb3JfdW5pdCBmaWxlX3N0b3JhZ2Vfc2l6ZSBpbnB1dF91bml0IGlvc3RhdF9lbmQgaW9zdGF0X2VvciAnICtcbiAgICAgICdudW1lcmljX3N0b3JhZ2Vfc2l6ZSBvdXRwdXRfdW5pdCBjX2ZfcHJvY3BvaW50ZXIgaWVlZV9hcml0aG1ldGljIGllZWVfc3VwcG9ydF91bmRlcmZsb3dfY29udHJvbCAnICtcbiAgICAgICdpZWVlX2dldF91bmRlcmZsb3dfbW9kZSBpZWVlX3NldF91bmRlcmZsb3dfbW9kZSBuZXd1bml0IGNvbnRpZ3VvdXMgcmVjdXJzaXZlICcgK1xuICAgICAgJ3BhZCBwb3NpdGlvbiBhY3Rpb24gZGVsaW0gcmVhZHdyaXRlIGVvciBhZHZhbmNlIG5tbCBpbnRlcmZhY2UgcHJvY2VkdXJlIG5hbWVsaXN0IGluY2x1ZGUgc2VxdWVuY2UgZWxlbWVudGFsIHB1cmUgJyArXG4gICAgICAnaW50ZWdlciByZWFsIGNoYXJhY3RlciBjb21wbGV4IGxvZ2ljYWwgZGltZW5zaW9uIGFsbG9jYXRhYmxlfDEwIHBhcmFtZXRlciAnICtcbiAgICAgICdleHRlcm5hbCBpbXBsaWNpdHwxMCBub25lIGRvdWJsZSBwcmVjaXNpb24gYXNzaWduIGludGVudCBvcHRpb25hbCBwb2ludGVyICcgK1xuICAgICAgJ3RhcmdldCBpbiBvdXQgY29tbW9uIGVxdWl2YWxlbmNlIGRhdGEnLFxuICAgIGJ1aWx0X2luOiAnYWxvZyBhbG9nMTAgYW1heDAgYW1heDEgYW1pbjAgYW1pbjEgYW1vZCBjYWJzIGNjb3MgY2V4cCBjbG9nIGNzaW4gY3NxcnQgZGFicyBkYWNvcyBkYXNpbiBkYXRhbiBkYXRhbjIgZGNvcyBkY29zaCBkZGltIGRleHAgZGludCAnICtcbiAgICAgICdkbG9nIGRsb2cxMCBkbWF4MSBkbWluMSBkbW9kIGRuaW50IGRzaWduIGRzaW4gZHNpbmggZHNxcnQgZHRhbiBkdGFuaCBmbG9hdCBpYWJzIGlkaW0gaWRpbnQgaWRuaW50IGlmaXggaXNpZ24gbWF4MCBtYXgxIG1pbjAgbWluMSBzbmdsICcgK1xuICAgICAgJ2FsZ2FtYSBjZGFicyBjZGNvcyBjZGV4cCBjZGxvZyBjZHNpbiBjZHNxcnQgY3FhYnMgY3Fjb3MgY3FleHAgY3Fsb2cgY3FzaW4gY3FzcXJ0IGRjbXBseCBkY29uamcgZGVyZiBkZXJmYyBkZmxvYXQgZGdhbW1hIGRpbWFnIGRsZ2FtYSAnICtcbiAgICAgICdpcWludCBxYWJzIHFhY29zIHFhc2luIHFhdGFuIHFhdGFuMiBxY21wbHggcWNvbmpnIHFjb3MgcWNvc2ggcWRpbSBxZXJmIHFlcmZjIHFleHAgcWdhbW1hIHFpbWFnIHFsZ2FtYSBxbG9nIHFsb2cxMCBxbWF4MSBxbWluMSBxbW9kICcgK1xuICAgICAgJ3FuaW50IHFzaWduIHFzaW4gcXNpbmggcXNxcnQgcXRhbiBxdGFuaCBhYnMgYWNvcyBhaW1hZyBhaW50IGFuaW50IGFzaW4gYXRhbiBhdGFuMiBjaGFyIGNtcGx4IGNvbmpnIGNvcyBjb3NoIGV4cCBpY2hhciBpbmRleCBpbnQgbG9nICcgK1xuICAgICAgJ2xvZzEwIG1heCBtaW4gbmludCBzaWduIHNpbiBzaW5oIHNxcnQgdGFuIHRhbmggcHJpbnQgd3JpdGUgZGltIGxnZSBsZ3QgbGxlIGxsdCBtb2QgbnVsbGlmeSBhbGxvY2F0ZSBkZWFsbG9jYXRlICcgK1xuICAgICAgJ2FkanVzdGwgYWRqdXN0ciBhbGwgYWxsb2NhdGVkIGFueSBhc3NvY2lhdGVkIGJpdF9zaXplIGJ0ZXN0IGNlaWxpbmcgY291bnQgY3NoaWZ0IGRhdGVfYW5kX3RpbWUgZGlnaXRzIGRvdF9wcm9kdWN0ICcgK1xuICAgICAgJ2Vvc2hpZnQgZXBzaWxvbiBleHBvbmVudCBmbG9vciBmcmFjdGlvbiBodWdlIGlhbmQgaWJjbHIgaWJpdHMgaWJzZXQgaWVvciBpb3IgaXNoZnQgaXNoZnRjIGxib3VuZCBsZW5fdHJpbSBtYXRtdWwgJyArXG4gICAgICAnbWF4ZXhwb25lbnQgbWF4bG9jIG1heHZhbCBtZXJnZSBtaW5leHBvbmVudCBtaW5sb2MgbWludmFsIG1vZHVsbyBtdmJpdHMgbmVhcmVzdCBwYWNrIHByZXNlbnQgcHJvZHVjdCAnICtcbiAgICAgICdyYWRpeCByYW5kb21fbnVtYmVyIHJhbmRvbV9zZWVkIHJhbmdlIHJlcGVhdCByZXNoYXBlIHJyc3BhY2luZyBzY2FsZSBzY2FuIHNlbGVjdGVkX2ludF9raW5kIHNlbGVjdGVkX3JlYWxfa2luZCAnICtcbiAgICAgICdzZXRfZXhwb25lbnQgc2hhcGUgc2l6ZSBzcGFjaW5nIHNwcmVhZCBzdW0gc3lzdGVtX2Nsb2NrIHRpbnkgdHJhbnNwb3NlIHRyaW0gdWJvdW5kIHVucGFjayB2ZXJpZnkgYWNoYXIgaWFjaGFyIHRyYW5zZmVyICcgK1xuICAgICAgJ2RibGUgZW50cnkgZHByb2QgY3B1X3RpbWUgY29tbWFuZF9hcmd1bWVudF9jb3VudCBnZXRfY29tbWFuZCBnZXRfY29tbWFuZF9hcmd1bWVudCBnZXRfZW52aXJvbm1lbnRfdmFyaWFibGUgaXNfaW9zdGF0X2VuZCAnICtcbiAgICAgICdpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sIGllZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlICcgK1xuICAgICAgJ2lzX2lvc3RhdF9lb3IgbW92ZV9hbGxvYyBuZXdfbGluZSBzZWxlY3RlZF9jaGFyX2tpbmQgc2FtZV90eXBlX2FzIGV4dGVuZHNfdHlwZV9vZicgICtcbiAgICAgICdhY29zaCBhc2luaCBhdGFuaCBiZXNzZWxfajAgYmVzc2VsX2oxIGJlc3NlbF9qbiBiZXNzZWxfeTAgYmVzc2VsX3kxIGJlc3NlbF95biBlcmYgZXJmYyBlcmZjX3NjYWxlZCBnYW1tYSBsb2dfZ2FtbWEgaHlwb3Qgbm9ybTIgJyArXG4gICAgICAnYXRvbWljX2RlZmluZSBhdG9taWNfcmVmIGV4ZWN1dGVfY29tbWFuZF9saW5lIGxlYWR6IHRyYWlseiBzdG9yYWdlX3NpemUgbWVyZ2VfYml0cyAnICtcbiAgICAgICdiZ2UgYmd0IGJsZSBibHQgZHNoaWZ0bCBkc2hpZnRyIGZpbmRsb2MgaWFsbCBpYW55IGlwYXJpdHkgaW1hZ2VfaW5kZXggbGNvYm91bmQgdWNvYm91bmQgbWFza2wgbWFza3IgJyArXG4gICAgICAnbnVtX2ltYWdlcyBwYXJpdHkgcG9wY250IHBvcHBhciBzaGlmdGEgc2hpZnRsIHNoaWZ0ciB0aGlzX2ltYWdlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWydmOTAnLCAnZjk1J10sXG4gICAga2V5d29yZHM6IEZfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnc3RyaW5nJywgcmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N1YnJvdXRpbmUgZnVuY3Rpb24gcHJvZ3JhbScsXG4gICAgICAgIGlsbGVnYWw6ICdbJHs9XFxcXG5dJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnIScsICckJywge3JlbGV2YW5jZTogMH0pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJyg/PVxcXFxifFxcXFwrfFxcXFwtfFxcXFwuKSg/PVxcXFwuXFxcXGR8XFxcXGQpKD86XFxcXGQrKT8oPzpcXFxcLj9cXFxcZCopKD86W2RlXVsrLV0/XFxcXGQrKT9cXFxcYlxcXFwuPycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBUWVBFUEFSQU0gPSB7XG4gICAgYmVnaW46ICc8JywgZW5kOiAnPicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogLydbYS16QS1aMC05X10rL30pXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydmcyddLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2Fic3RyYWN0IGFuZCBhcyBhc3NlcnQgYmFzZSBiZWdpbiBjbGFzcyBkZWZhdWx0IGRlbGVnYXRlIGRvIGRvbmUgJyArXG4gICAgICAnZG93bmNhc3QgZG93bnRvIGVsaWYgZWxzZSBlbmQgZXhjZXB0aW9uIGV4dGVybiBmYWxzZSBmaW5hbGx5IGZvciAnICtcbiAgICAgICdmdW4gZnVuY3Rpb24gZ2xvYmFsIGlmIGluIGluaGVyaXQgaW5saW5lIGludGVyZmFjZSBpbnRlcm5hbCBsYXp5IGxldCAnICtcbiAgICAgICdtYXRjaCBtZW1iZXIgbW9kdWxlIG11dGFibGUgbmFtZXNwYWNlIG5ldyBudWxsIG9mIG9wZW4gb3IgJyArXG4gICAgICAnb3ZlcnJpZGUgcHJpdmF0ZSBwdWJsaWMgcmVjIHJldHVybiBzaWcgc3RhdGljIHN0cnVjdCB0aGVuIHRvICcgK1xuICAgICAgJ3RydWUgdHJ5IHR5cGUgdXBjYXN0IHVzZSB2YWwgdm9pZCB3aGVuIHdoaWxlIHdpdGggeWllbGQnLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIC8vIG1vbmFkIGJ1aWxkZXIga2V5d29yZHMgKG1hdGNoZXMgYmVmb3JlIG5vbi1iYW5nIGt3cylcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAvXFxiKHlpZWxkfHJldHVybnxsZXR8ZG8pIS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnQFwiJywgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1wiXCInfV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXFxcXChcXFxcKicsICdcXFxcKlxcXFwpJyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3R5cGUnLCBlbmQ6ICdcXFxcKHw9fCQnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIFRZUEVQQVJBTVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWzwnLCBlbmQ6ICc+XFxcXF0nLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcXFxCKFxcJ1tBLVphLXpdKVxcXFxiJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0ge1xuICAgICdrZXl3b3JkJzpcbiAgICAgICdhYm9ydCBhY3JvbnltIGFjcm9ueW1zIGFsaWFzIGFsbCBhbmQgYXNzaWduIGJpbmFyeSBjYXJkIGRpYWcgZGlzcGxheSAnICtcbiAgICAgICdlbHNlIGVxIGZpbGUgZmlsZXMgZm9yIGZyZWUgZ2UgZ3QgaWYgaW50ZWdlciBsZSBsb29wIGx0IG1heGltaXppbmcgJyArXG4gICAgICAnbWluaW1pemluZyBtb2RlbCBtb2RlbHMgbmUgbmVnYXRpdmUgbm8gbm90IG9wdGlvbiBvcHRpb25zIG9yIG9yZCAnICtcbiAgICAgICdwb3NpdGl2ZSBwcm9kIHB1dCBwdXRwYWdlIHB1dHRsIHJlcGVhdCBzYW1lYXMgc2VtaWNvbnQgc2VtaWludCBzbWF4ICcgK1xuICAgICAgJ3NtaW4gc29sdmUgc29zMSBzb3MyIHN1bSBzeXN0ZW0gdGFibGUgdGhlbiB1bnRpbCB1c2luZyB3aGlsZSB4b3IgeWVzJyxcbiAgICAnbGl0ZXJhbCc6ICdlcHMgaW5mIG5hJyxcbiAgICAnYnVpbHQtaW4nOlxuICAgICAgJ2FicyBhcmNjb3MgYXJjc2luIGFyY3RhbiBhcmN0YW4yIEJldGEgYmV0YVJlZyBiaW5vbWlhbCBjZWlsIGNlbnRyb3B5ICcgK1xuICAgICAgJ2NvcyBjb3NoIGN2UG93ZXIgZGl2IGRpdjAgZURpc3QgZW50cm9weSBlcnJvcmYgZXhlY1NlZWQgZXhwIGZhY3QgJyArXG4gICAgICAnZmxvb3IgZnJhYyBnYW1tYSBnYW1tYVJlZyBsb2cgbG9nQmV0YSBsb2dHYW1tYSBsb2cxMCBsb2cyIG1hcFZhbCBtYXggJyArXG4gICAgICAnbWluIG1vZCBuY3BDTSBuY3BGIG5jcFZVcG93IG5jcFZVc2luIG5vcm1hbCBwaSBwb2x5IHBvd2VyICcgK1xuICAgICAgJ3JhbmRCaW5vbWlhbCByYW5kTGluZWFyIHJhbmRUcmlhbmdsZSByb3VuZCByUG93ZXIgc2lnbW9pZCBzaWduICcgK1xuICAgICAgJ3NpZ25Qb3dlciBzaW4gc2luaCBzbGV4cCBzbGxvZzEwIHNscmVjIHNxZXhwIHNxbG9nMTAgc3FyIHNxcmVjIHNxcnQgJyArXG4gICAgICAndGFuIHRhbmggdHJ1bmMgdW5pZm9ybSB1bmlmb3JtSW50IHZjUG93ZXIgYm9vbF9hbmQgYm9vbF9lcXYgYm9vbF9pbXAgJyArXG4gICAgICAnYm9vbF9ub3QgYm9vbF9vciBib29sX3hvciBpZlRoZW4gcmVsX2VxIHJlbF9nZSByZWxfZ3QgcmVsX2xlIHJlbF9sdCAnICtcbiAgICAgICdyZWxfbmUgZ2RheSBnZG93IGdob3VyIGdsZWFwIGdtaWxsaXNlYyBnbWludXRlIGdtb250aCBnc2Vjb25kIGd5ZWFyICcgK1xuICAgICAgJ2pkYXRlIGpub3cganN0YXJ0IGp0aW1lIGVycm9yTGV2ZWwgZXhlY0Vycm9yIGdhbXNSZWxlYXNlIGdhbXNWZXJzaW9uICcgK1xuICAgICAgJ2hhbmRsZUNvbGxlY3QgaGFuZGxlRGVsZXRlIGhhbmRsZVN0YXR1cyBoYW5kbGVTdWJtaXQgaGVhcEZyZWUgJyArXG4gICAgICAnaGVhcExpbWl0IGhlYXBTaXplIGpvYkhhbmRsZSBqb2JLaWxsIGpvYlN0YXR1cyBqb2JUZXJtaW5hdGUgJyArXG4gICAgICAnbGljZW5zZUxldmVsIGxpY2Vuc2VTdGF0dXMgbWF4RXhlY0Vycm9yIHNsZWVwIHRpbWVDbG9zZSB0aW1lQ29tcCAnICtcbiAgICAgICd0aW1lRWxhcHNlZCB0aW1lRXhlYyB0aW1lU3RhcnQnXG4gIH07XG4gIHZhciBQQVJBTVMgPSB7XG4gICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gIH07XG4gIHZhciBTWU1CT0xTID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcPVtsZ2VueGNdPS99LFxuICAgICAge2JlZ2luOiAvXFwkL30sXG4gICAgXVxuICB9O1xuICB2YXIgUVNUUiA9IHsgLy8gT25lLWxpbmUgcXVvdGVkIGNvbW1lbnQgc3RyaW5nXG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJ1xcJycsIGVuZDogJ1xcJyd9LFxuICAgICAge2JlZ2luOiAnXCInLCBlbmQ6ICdcIid9LFxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgfTtcbiAgdmFyIEFTU0lHTk1FTlQgPSB7XG4gICAgYmVnaW46ICcvJyxcbiAgICBlbmQ6ICcvJyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFTVFIsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICBdLFxuICB9O1xuICB2YXIgREVTQ1RFWFQgPSB7IC8vIFBhcmFtZXRlci9zZXQvdmFyaWFibGUgZGVzY3JpcHRpb24gdGV4dFxuICAgIGJlZ2luOiAvW2Etel1bYS16MC05X10qKFxcKFthLXowLTlfLCBdKlxcKSk/WyBcXHRdKy8sXG4gICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgIGVuZDogJyQnLFxuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBRU1RSLFxuICAgICAgQVNTSUdOTUVOVCxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiAvKFsgXSpbYS16MC05JiMqPT9APlxcXFw8OlxcLSwoKSRcXFtcXF1fLnt9ISslXl0rKSsvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ21zJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgvXlxcJG9udGV4dC8sIC9eXFwkb2ZmdGV4dC8pLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXCRbYS16MC05XSsnLFxuICAgICAgICBlbmQ6ICckJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1rZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXlxcXFwkW2EtejAtOV0rJyxcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ15cXFxcKicsICckJyksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIC8vIERlY2xhcmF0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOlxuICAgICAgICAgICdzZXQgc2V0cyBwYXJhbWV0ZXIgcGFyYW1ldGVycyB2YXJpYWJsZSB2YXJpYWJsZXMgJyArXG4gICAgICAgICAgJ3NjYWxhciBzY2FsYXJzIGVxdWF0aW9uIGVxdWF0aW9ucycsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBBU1NJR05NRU5ULFxuICAgICAgICAgIERFU0NURVhULFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgeyAvLyB0YWJsZSBlbnZpcm9ubWVudFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndGFibGUnLFxuICAgICAgICBlbmQ6ICc7JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyB0YWJsZSBoZWFkZXIgcm93XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAndGFibGUnLFxuICAgICAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgICAgICBjb250YWluczogW0RFU0NURVhUXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFwqJywgJyQnKSxcbiAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgLy8gVGFibGUgZG9lcyBub3QgY29udGFpbiBERVNDVEVYVCBvciBBU1NJR05NRU5UXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uc1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAvXlthLXpdW2EtejAtOV8sXFwtKycgKCkkXStcXC57Mn0vLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgeyAvLyBGdW5jdGlvbiB0aXRsZVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogL15bYS16MC05X10rLyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgUEFSQU1TLFxuICAgICAgICAgICAgICBTWU1CT0xTLFxuICAgICAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBTWU1CT0xTLFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnYW5kIGJvb2wgYnJlYWsgY2FsbCBjYWxsZXhlIGNoZWNraW50ZXJydXB0IGNsZWFyIGNsZWFyZyBjbG9zZWFsbCBjbHMgY29tbG9nIGNvbXBpbGUgJyArXG4gICAgICAgICAgICAgICdjb250aW51ZSBjcmVhdGUgZGVidWcgZGVjbGFyZSBkZWxldGUgZGlzYWJsZSBkbGlicmFyeSBkbGxjYWxsIGRvIGRvcyBlZCBlZGl0IGVsc2UgJyArXG4gICAgICAgICAgICAgICdlbHNlaWYgZW5hYmxlIGVuZCBlbmRmb3IgZW5kaWYgZW5kcCBlbmRvIGVycm9ybG9nIGVycm9ybG9nYXQgZXhwciBleHRlcm5hbCBmbiAnICtcbiAgICAgICAgICAgICAgJ2ZvciBmb3JtYXQgZ290byBnb3N1YiBncmFwaCBpZiBrZXl3b3JkIGxldCBsaWIgbGlicmFyeSBsaW5lIGxvYWQgbG9hZGFycmF5IGxvYWRleGUgJyArXG4gICAgICAgICAgICAgICdsb2FkZiBsb2FkayBsb2FkbSBsb2FkcCBsb2FkcyBsb2FkeCBsb2NhbCBsb2NhdGUgbG9vcG5leHRpbmRleCBscHJpbnQgbHB3aWR0aCBsc2hvdyAnICtcbiAgICAgICAgICAgICAgJ21hdHJpeCBtc3ltIG5kcGNsZXggbmV3IG5vdCBvcGVuIG9yIG91dHB1dCBvdXR3aWR0aCBwbG90IHBsb3RzeW0gcG9wIHByY3NuIHByaW50ICcgK1xuICAgICAgICAgICAgICAncHJpbnRkb3MgcHJvYyBwdXNoIHJldHAgcmV0dXJuIHJuZGNvbiBybmRtb2Qgcm5kbXVsdCBybmRzZWVkIHJ1biBzYXZlIHNhdmVhbGwgc2NyZWVuICcgK1xuICAgICAgICAgICAgICAnc2Nyb2xsIHNldGFycmF5IHNob3cgc3BhcnNlIHN0b3Agc3RyaW5nIHN0cnVjdCBzeXN0ZW0gdHJhY2UgdHJhcCB0aHJlYWRmb3IgJyArXG4gICAgICAgICAgICAgICd0aHJlYWRlbmRmb3IgdGhyZWFkYmVnaW4gdGhyZWFkam9pbiB0aHJlYWRzdGF0IHRocmVhZGVuZCB1bnRpbCB1c2Ugd2hpbGUgd2lucHJpbnQnLFxuICAgIGJ1aWx0X2luOiAnYWJzIGFjZiBhY29uY2F0IGFleWUgYW1heCBhbWVhbiBBbWVyaWNhbkJpbm9tQ2FsbCBBbWVyaWNhbkJpbm9tQ2FsbF9HcmVla3MgQW1lcmljYW5CaW5vbUNhbGxfSW1wVm9sICcgK1xuICAgICAgICAgICAgICAnQW1lcmljYW5CaW5vbVB1dCBBbWVyaWNhbkJpbm9tUHV0X0dyZWVrcyBBbWVyaWNhbkJpbm9tUHV0X0ltcFZvbCBBbWVyaWNhbkJTQ2FsbCBBbWVyaWNhbkJTQ2FsbF9HcmVla3MgJyArXG4gICAgICAgICAgICAgICdBbWVyaWNhbkJTQ2FsbF9JbXBWb2wgQW1lcmljYW5CU1B1dCBBbWVyaWNhbkJTUHV0X0dyZWVrcyBBbWVyaWNhbkJTUHV0X0ltcFZvbCBhbWluIGFtdWx0IGFubm90YXRpb25HZXREZWZhdWx0cyAnICtcbiAgICAgICAgICAgICAgJ2Fubm90YXRpb25TZXRCa2QgYW5ub3RhdGlvblNldEZvbnQgYW5ub3RhdGlvblNldExpbmVDb2xvciBhbm5vdGF0aW9uU2V0TGluZVN0eWxlIGFubm90YXRpb25TZXRMaW5lVGhpY2tuZXNzICcgK1xuICAgICAgICAgICAgICAnYW5udWFsVHJhZGluZ0RheXMgYXJjY29zIGFyY3NpbiBhcmVzaGFwZSBhcnJheWFsbG9jIGFycmF5aW5kZXggYXJyYXlpbml0IGFycmF5dG9tYXQgYXNjaWlsb2FkIGFzY2xhYmVsIGFzdGQgJyArXG4gICAgICAgICAgICAgICdhc3RkcyBhc3VtIGF0YW4gYXRhbjIgYXRyYW5zcG9zZSBheG1hcmdpbiBiYWxhbmNlIGJhbmQgYmFuZGNob2wgYmFuZGNob2xzb2wgYmFuZGx0c29sIGJhbmRydiBiYW5kc29scGQgYmFyICcgK1xuICAgICAgICAgICAgICAnYmFzZTEwIGJlZ3dpbmQgYmVzc2VsaiBiZXNzZWx5IGJldGEgYm94IGJveGNveCBjZGZCZXRhIGNkZkJldGFJbnYgY2RmQmlub21pYWwgY2RmQmlub21pYWxJbnYgY2RmQnZuIGNkZkJ2bjIgJyArXG4gICAgICAgICAgICAgICdjZGZCdm4yZSBjZGZDYXVjaHkgY2RmQ2F1Y2h5SW52IGNkZkNoaWMgY2RmQ2hpaSBjZGZDaGluYyBjZGZDaGluY0ludiBjZGZFeHAgY2RmRXhwSW52IGNkZkZjIGNkZkZuYyBjZGZGbmNJbnYgJyArXG4gICAgICAgICAgICAgICdjZGZHYW0gY2RmR2VuUGFyZXRvIGNkZkh5cGVyR2VvIGNkZkxhcGxhY2UgY2RmTGFwbGFjZUludiBjZGZMb2dpc3RpYyBjZGZMb2dpc3RpY0ludiBjZGZtQ29udHJvbENyZWF0ZSBjZGZNdm4gJyArXG4gICAgICAgICAgICAgICdjZGZNdm4yZSBjZGZNdm5jZSBjZGZNdm5lIGNkZk12dDJlIGNkZk12dGNlIGNkZk12dGUgY2RmTiBjZGZOMiBjZGZOYyBjZGZOZWdCaW5vbWlhbCBjZGZOZWdCaW5vbWlhbEludiBjZGZOaSAnICtcbiAgICAgICAgICAgICAgJ2NkZlBvaXNzb24gY2RmUG9pc3NvbkludiBjZGZSYXlsZWlnaCBjZGZSYXlsZWlnaEludiBjZGZUYyBjZGZUY2kgY2RmVG5jIGNkZlR2biBjZGZXZWlidWxsIGNkZldlaWJ1bGxJbnYgY2RpciAnICtcbiAgICAgICAgICAgICAgJ2NlaWwgQ2hhbmdlRGlyIGNoZGlyIGNoaUJhclNxdWFyZSBjaG9sIGNob2xkbiBjaG9sc29sIGNob2x1cCBjaHJzIGNsb3NlIGNvZGUgY29scyBjb2xzZiBjb21iaW5hdGUgY29tYmluYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2NvbXBsZXggY29uIGNvbmQgY29uaiBjb25zIENvblNjb3JlIGNvbnRvdXIgY29udiBjb252ZXJ0c2F0b3N0ciBjb252ZXJ0c3RydG9zYSBjb3JybSBjb3JybXMgY29ycnZjIGNvcnJ4IGNvcnJ4cyAnICtcbiAgICAgICAgICAgICAgJ2NvcyBjb3NoIGNvdW50cyBjb3VudHd0cyBjcm9zc3ByZCBjcm91dCBjcm91dHAgY3NyY29sIGNzcmxpbiBjc3ZSZWFkTSBjc3ZSZWFkU0EgY3VtcHJvZGMgY3Vtc3VtYyBjdXJ2ZSBjdnRvcyAnICtcbiAgICAgICAgICAgICAgJ2RhdGFjcmVhdGUgZGF0YWNyZWF0ZWNvbXBsZXggZGF0YWxpc3QgZGF0YWxvYWQgZGF0YWxvb3AgZGF0YW9wZW4gZGF0YXNhdmUgZGF0ZSBkYXRlc3RyIGRhdGVzdHJpbmcgZGF0ZXN0cnltZCAnICtcbiAgICAgICAgICAgICAgJ2RheWlueXIgZGF5b2Z3ZWVrIGRiQWRkRGF0YWJhc2UgZGJDbG9zZSBkYkNvbW1pdCBkYkNyZWF0ZVF1ZXJ5IGRiRXhlY1F1ZXJ5IGRiR2V0Q29ubmVjdE9wdGlvbnMgZGJHZXREYXRhYmFzZU5hbWUgJyArXG4gICAgICAgICAgICAgICdkYkdldERyaXZlck5hbWUgZGJHZXREcml2ZXJzIGRiR2V0SG9zdE5hbWUgZGJHZXRMYXN0RXJyb3JOdW0gZGJHZXRMYXN0RXJyb3JUZXh0IGRiR2V0TnVtZXJpY2FsUHJlY1BvbGljeSAnICtcbiAgICAgICAgICAgICAgJ2RiR2V0UGFzc3dvcmQgZGJHZXRQb3J0IGRiR2V0VGFibGVIZWFkZXJzIGRiR2V0VGFibGVzIGRiR2V0VXNlck5hbWUgZGJIYXNGZWF0dXJlIGRiSXNEcml2ZXJBdmFpbGFibGUgZGJJc09wZW4gJyArXG4gICAgICAgICAgICAgICdkYklzT3BlbkVycm9yIGRiT3BlbiBkYlF1ZXJ5QmluZFZhbHVlIGRiUXVlcnlDbGVhciBkYlF1ZXJ5Q29scyBkYlF1ZXJ5RXhlY1ByZXBhcmVkIGRiUXVlcnlGZXRjaEFsbE0gZGJRdWVyeUZldGNoQWxsU0EgJyArXG4gICAgICAgICAgICAgICdkYlF1ZXJ5RmV0Y2hPbmVNIGRiUXVlcnlGZXRjaE9uZVNBIGRiUXVlcnlGaW5pc2ggZGJRdWVyeUdldEJvdW5kVmFsdWUgZGJRdWVyeUdldEJvdW5kVmFsdWVzIGRiUXVlcnlHZXRGaWVsZCAnICtcbiAgICAgICAgICAgICAgJ2RiUXVlcnlHZXRMYXN0RXJyb3JOdW0gZGJRdWVyeUdldExhc3RFcnJvclRleHQgZGJRdWVyeUdldExhc3RJbnNlcnRJRCBkYlF1ZXJ5R2V0TGFzdFF1ZXJ5IGRiUXVlcnlHZXRQb3NpdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2RiUXVlcnlJc0FjdGl2ZSBkYlF1ZXJ5SXNGb3J3YXJkT25seSBkYlF1ZXJ5SXNOdWxsIGRiUXVlcnlJc1NlbGVjdCBkYlF1ZXJ5SXNWYWxpZCBkYlF1ZXJ5UHJlcGFyZSBkYlF1ZXJ5Um93cyAnICtcbiAgICAgICAgICAgICAgJ2RiUXVlcnlTZWVrIGRiUXVlcnlTZWVrRmlyc3QgZGJRdWVyeVNlZWtMYXN0IGRiUXVlcnlTZWVrTmV4dCBkYlF1ZXJ5U2Vla1ByZXZpb3VzIGRiUXVlcnlTZXRGb3J3YXJkT25seSAnICtcbiAgICAgICAgICAgICAgJ2RiUmVtb3ZlRGF0YWJhc2UgZGJSb2xsYmFjayBkYlNldENvbm5lY3RPcHRpb25zIGRiU2V0RGF0YWJhc2VOYW1lIGRiU2V0SG9zdE5hbWUgZGJTZXROdW1lcmljYWxQcmVjUG9saWN5ICcgK1xuICAgICAgICAgICAgICAnZGJTZXRQb3J0IGRiU2V0VXNlck5hbWUgZGJUcmFuc2FjdGlvbiBEZWxldGVGaWxlIGRlbGlmIGRlbHJvd3MgZGVuc2VUb1NwIGRlbnNlVG9TcFJFIGRlblRvWmVybyBkZXNpZ24gZGV0IGRldGwgJyArXG4gICAgICAgICAgICAgICdkZmZ0IGRmZnRpIGRpYWcgZGlhZ3J2IGRpZ2FtbWEgZG9zd2luIERPU1dpbkNsb3NlYWxsIERPU1dpbk9wZW4gZG90ZmVxIGRvdGZlcW10IGRvdGZnZSBkb3RmZ2VtdCBkb3RmZ3QgZG90Zmd0bXQgJyArXG4gICAgICAgICAgICAgICdkb3RmbGUgZG90ZmxlbXQgZG90Zmx0IGRvdGZsdG10IGRvdGZuZSBkb3RmbmVtdCBkcmF3IGRyb3AgZHNDcmVhdGUgZHN0YXQgZHN0YXRtdCBkc3RhdG10Q29udHJvbENyZWF0ZSBkdGRhdGUgZHRkYXkgJyArXG4gICAgICAgICAgICAgICdkdHRpbWUgZHR0b2R0diBkdHRvc3RyIGR0dG91dGMgZHR2bm9ybWFsIGR0dnRvZHQgZHR2dG91dGMgZHVtbXkgZHVtbXliciBkdW1teWRuIGVpZyBlaWdoIGVpZ2h2IGVpZ3YgZWxhcHNlZFRyYWRpbmdEYXlzICcgK1xuICAgICAgICAgICAgICAnZW5kd2luZCBlbnZnZXQgZW9mIGVxU29sdmUgZXFTb2x2ZW10IGVxU29sdmVtdENvbnRyb2xDcmVhdGUgZXFTb2x2ZW10T3V0Q3JlYXRlIGVxU29sdmVzZXQgZXJmIGVyZmMgZXJmY2NwbHggZXJmY3BseCBlcnJvciAnICtcbiAgICAgICAgICAgICAgJ2V0ZGF5cyBldGhzZWMgZXRzdHIgRXVyb3BlYW5CaW5vbUNhbGwgRXVyb3BlYW5CaW5vbUNhbGxfR3JlZWtzIEV1cm9wZWFuQmlub21DYWxsX0ltcFZvbCBFdXJvcGVhbkJpbm9tUHV0ICcgK1xuICAgICAgICAgICAgICAnRXVyb3BlYW5CaW5vbVB1dF9HcmVla3MgRXVyb3BlYW5CaW5vbVB1dF9JbXBWb2wgRXVyb3BlYW5CU0NhbGwgRXVyb3BlYW5CU0NhbGxfR3JlZWtzIEV1cm9wZWFuQlNDYWxsX0ltcFZvbCAnICtcbiAgICAgICAgICAgICAgJ0V1cm9wZWFuQlNQdXQgRXVyb3BlYW5CU1B1dF9HcmVla3MgRXVyb3BlYW5CU1B1dF9JbXBWb2wgZXhjdHNtcGwgZXhlYyBleGVjYmcgZXhwIGV4dGVybiBleWUgZmNoZWNrZXJyIGZjbGVhcmVyciBmZXEgJyArXG4gICAgICAgICAgICAgICdmZXFtdCBmZmx1c2ggZmZ0IGZmdGkgZmZ0bSBmZnRtaSBmZnRuIGZnZSBmZ2VtdCBmZ2V0cyBmZ2V0c2EgZmdldHNhdCBmZ2V0c3QgZmd0IGZndG10IGZpbGVpbmZvIGZpbGVzYSBmbGUgZmxlbXQgJyArXG4gICAgICAgICAgICAgICdmbG9vciBmbHQgZmx0bXQgZm1vZCBmbmUgZm5lbXQgZm9udHMgZm9wZW4gZm9ybWF0Y3YgZm9ybWF0bnYgZnB1dHMgZnB1dHN0IGZzZWVrIGZzdHJlcnJvciBmdGVsbCBmdG9jdiBmdG9zIGZ0b3N0ckMgJyArXG4gICAgICAgICAgICAgICdnYW1tYSBnYW1tYWNwbHggZ2FtbWFpaSBnYXVzc2V0IGdkYUFwcGVuZCBnZGFDcmVhdGUgZ2RhRFN0YXQgZ2RhRFN0YXRNYXQgZ2RhR2V0SW5kZXggZ2RhR2V0TmFtZSBnZGFHZXROYW1lcyBnZGFHZXRPcmRlcnMgJyArXG4gICAgICAgICAgICAgICdnZGFHZXRUeXBlIGdkYUdldFR5cGVzIGdkYUdldFZhckluZm8gZ2RhSXNDcGx4IGdkYUxvYWQgZ2RhUGFjayBnZGFSZWFkIGdkYVJlYWRCeUluZGV4IGdkYVJlYWRTb21lIGdkYVJlYWRTcGFyc2UgJyArXG4gICAgICAgICAgICAgICdnZGFSZWFkU3RydWN0IGdkYVJlcG9ydFZhckluZm8gZ2RhU2F2ZSBnZGFVcGRhdGUgZ2RhVXBkYXRlQW5kUGFjayBnZGFWYXJzIGdkYVdyaXRlIGdkYVdyaXRlMzIgZ2RhV3JpdGVTb21lIGdldGFycmF5ICcgK1xuICAgICAgICAgICAgICAnZ2V0ZGltcyBnZXRmIGdldEdBVVNTaG9tZSBnZXRtYXRyaXggZ2V0bWF0cml4NEQgZ2V0bmFtZSBnZXRuYW1lZiBnZXROZXh0VHJhZGluZ0RheSBnZXROZXh0V2Vla0RheSBnZXRuciBnZXRvcmRlcnMgJyArXG4gICAgICAgICAgICAgICdnZXRwYXRoIGdldFByZXZpb3VzVHJhZGluZ0RheSBnZXRQcmV2aW91c1dlZWtEYXkgZ2V0Um93IGdldHNjYWxhcjNEIGdldHNjYWxhcjREIGdldFRyUm93IGdldHdpbmQgZ2xtIGdyYWRjcGx4IGdyYWRNVCAnICtcbiAgICAgICAgICAgICAgJ2dyYWRNVG0gZ3JhZE1UVCBncmFkTVRUbSBncmFkcCBncmFwaHBydCBncmFwaHNldCBoYXNpbWFnIGhlYWRlciBoZWFkZXJtdCBoZXNzIGhlc3NNVCBoZXNzTVRnIGhlc3NNVGd3IGhlc3NNVG0gJyArXG4gICAgICAgICAgICAgICdoZXNzTVRtdyBoZXNzTVRUIGhlc3NNVFRnIGhlc3NNVFRndyBoZXNzTVRUbSBoZXNzTVR3IGhlc3NwIGhpc3QgaGlzdGYgaGlzdHAgaHNlYyBpbWFnIGluZGN2IGluZGV4Y2F0IGluZGljZXMgaW5kaWNlczIgJyArXG4gICAgICAgICAgICAgICdpbmRpY2VzZiBpbmRpY2VzZm4gaW5kbnYgaW5kc2F2IGludGVncmF0ZTFkIGludGVncmF0ZUNvbnRyb2xDcmVhdGUgaW50Z3JhdDIgaW50Z3JhdDMgaW50aHAxIGludGhwMiBpbnRocDMgaW50aHA0ICcgK1xuICAgICAgICAgICAgICAnaW50aHBDb250cm9sQ3JlYXRlIGludHF1YWQxIGludHF1YWQyIGludHF1YWQzIGludHJsZWF2IGludHJsZWF2c2EgaW50cnNlY3QgaW50c2ltcCBpbnYgaW52cGQgaW52c3dwIGlzY3BseCBpc2NwbHhmICcgK1xuICAgICAgICAgICAgICAnaXNkZW4gaXNpbmZuYW5taXNzIGlzbWlzcyBrZXkga2V5YXYga2V5dyBsYWcgbGFnMSBsYWduIGxhcEVpZ2hiIGxhcEVpZ2hpIGxhcEVpZ2h2YiBsYXBFaWdodmkgbGFwZ0VpZyBsYXBnRWlnaCBsYXBnRWlnaHYgJyArXG4gICAgICAgICAgICAgICdsYXBnRWlndiBsYXBnU2NodXIgbGFwZ1N2ZGNzdCBsYXBnU3ZkcyBsYXBnU3Zkc3QgbGFwU3ZkY3VzdiBsYXBTdmRzIGxhcFN2ZHVzdiBsZGxwIGxkbHNvbCBsaW5Tb2x2ZSBsaXN0d2lzZSBsbiBsbmNkZmJ2biAnICtcbiAgICAgICAgICAgICAgJ2xuY2RmYnZuMiBsbmNkZm12biBsbmNkZm4gbG5jZGZuMiBsbmNkZm5jIGxuZmFjdCBsbmdhbW1hY3BseCBsbnBkZm12biBsbnBkZm12dCBsbnBkZm4gbG5wZGZ0IGxvYWRkIGxvYWRzdHJ1Y3QgbG9hZHdpbmQgJyArXG4gICAgICAgICAgICAgICdsb2VzcyBsb2Vzc210IGxvZXNzbXRDb250cm9sQ3JlYXRlIGxvZyBsb2dsb2cgbG9neCBsb2d5IGxvd2VyIGxvd21hdCBsb3dtYXQxIGx0cmlzb2wgbHUgbHVzb2wgbWFjaEVwc2lsb24gbWFrZSBtYWtldmFycyAnICtcbiAgICAgICAgICAgICAgJ21ha2V3aW5kIG1hcmdpbiBtYXRhbGxvYyBtYXRpbml0IG1hdHRvYXJyYXkgbWF4Ynl0ZXMgbWF4YyBtYXhpbmRjIG1heHYgbWF4dmVjIG1iZXNzZWxlaSBtYmVzc2VsZWkwIG1iZXNzZWxlaTEgbWJlc3NlbGkgJyArXG4gICAgICAgICAgICAgICdtYmVzc2VsaTAgbWJlc3NlbGkxIG1lYW5jIG1lZGlhbiBtZXJnZWJ5IG1lcmdldmFyIG1pbmMgbWluaW5kYyBtaW52IG1pc3MgbWlzc2V4IG1pc3NydiBtb21lbnQgbW9tZW50ZCBtb3ZpbmdhdmUgJyArXG4gICAgICAgICAgICAgICdtb3ZpbmdhdmVFeHB3Z3QgbW92aW5nYXZlV2d0IG5leHRpbmRleCBuZXh0biBuZXh0bmV2biBuZXh0d2luZCBudG9zIG51bGwgbnVsbDEgbnVtQ29tYmluYXRpb25zIG9scyBvbHNtdCBvbHNtdENvbnRyb2xDcmVhdGUgJyArXG4gICAgICAgICAgICAgICdvbHNxciBvbHNxcjIgb2xzcXJtdCBvbmVzIG9wdG4gb3B0bmV2biBvcnRoIG91dHR5cCBwYWNmIHBhY2tlZFRvU3AgcGFja3IgcGFyc2UgcGF1c2UgcGRmQ2F1Y2h5IHBkZkNoaSBwZGZFeHAgcGRmR2VuUGFyZXRvICcgK1xuICAgICAgICAgICAgICAncGRmSHlwZXJHZW8gcGRmTGFwbGFjZSBwZGZMb2dpc3RpYyBwZGZuIHBkZlBvaXNzb24gcGRmUmF5bGVpZ2ggcGRmV2VpYnVsbCBwaSBwaW52IHBpbnZtdCBwbG90QWRkQXJyb3cgcGxvdEFkZEJhciBwbG90QWRkQm94ICcgK1xuICAgICAgICAgICAgICAncGxvdEFkZEhpc3QgcGxvdEFkZEhpc3RGIHBsb3RBZGRIaXN0UCBwbG90QWRkUG9sYXIgcGxvdEFkZFNjYXR0ZXIgcGxvdEFkZFNoYXBlIHBsb3RBZGRUZXh0Ym94IHBsb3RBZGRUUyBwbG90QWRkWFkgcGxvdEFyZWEgJyArXG4gICAgICAgICAgICAgICdwbG90QmFyIHBsb3RCb3ggcGxvdENsZWFyTGF5b3V0IHBsb3RDb250b3VyIHBsb3RDdXN0b21MYXlvdXQgcGxvdEdldERlZmF1bHRzIHBsb3RIaXN0IHBsb3RIaXN0RiBwbG90SGlzdFAgcGxvdExheW91dCAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RMb2dMb2cgcGxvdExvZ1ggcGxvdExvZ1kgcGxvdE9wZW5XaW5kb3cgcGxvdFBvbGFyIHBsb3RTYXZlIHBsb3RTY2F0dGVyIHBsb3RTZXRBeGVzUGVuIHBsb3RTZXRCYXIgcGxvdFNldEJhckZpbGwgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0QmFyU3RhY2tlZCBwbG90U2V0QmtkQ29sb3IgcGxvdFNldEZpbGwgcGxvdFNldEdyaWQgcGxvdFNldExlZ2VuZCBwbG90U2V0TGluZUNvbG9yIHBsb3RTZXRMaW5lU3R5bGUgcGxvdFNldExpbmVTeW1ib2wgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0TGluZVRoaWNrbmVzcyBwbG90U2V0TmV3V2luZG93IHBsb3RTZXRUaXRsZSBwbG90U2V0V2hpY2hZQXhpcyBwbG90U2V0WEF4aXNTaG93IHBsb3RTZXRYTGFiZWwgcGxvdFNldFhSYW5nZSAnICtcbiAgICAgICAgICAgICAgJ3Bsb3RTZXRYVGljSW50ZXJ2YWwgcGxvdFNldFhUaWNMYWJlbCBwbG90U2V0WUF4aXNTaG93IHBsb3RTZXRZTGFiZWwgcGxvdFNldFlSYW5nZSBwbG90U2V0WkF4aXNTaG93IHBsb3RTZXRaTGFiZWwgJyArXG4gICAgICAgICAgICAgICdwbG90U3VyZmFjZSBwbG90VFMgcGxvdFhZIHBvbGFyIHBvbHljaGFyIHBvbHlldmFsIHBvbHlnYW1tYSBwb2x5aW50IHBvbHltYWtlIHBvbHltYXQgcG9seW1yb290IHBvbHltdWx0IHBvbHlyb290ICcgK1xuICAgICAgICAgICAgICAncHFnd2luIHByZXZpb3VzaW5kZXggcHJpbmNvbXAgcHJpbnRmbSBwcmludGZtdCBwcm9kYyBwc2kgcHV0YXJyYXkgcHV0ZiBwdXR2YWxzIHB2Q3JlYXRlIHB2R2V0SW5kZXggcHZHZXRQYXJOYW1lcyAnICtcbiAgICAgICAgICAgICAgJ3B2R2V0UGFyVmVjdG9yIHB2TGVuZ3RoIHB2TGlzdCBwdlBhY2sgcHZQYWNraSBwdlBhY2ttIHB2UGFja21pIHB2UGFja3MgcHZQYWNrc2kgcHZQYWNrc20gcHZQYWNrc21pIHB2UHV0UGFyVmVjdG9yICcgK1xuICAgICAgICAgICAgICAncHZUZXN0IHB2VW5wYWNrIFFOZXd0b24gUU5ld3Rvbm10IFFOZXd0b25tdENvbnRyb2xDcmVhdGUgUU5ld3Rvbm10T3V0Q3JlYXRlIFFOZXd0b25TZXQgUVByb2cgUVByb2dtdCBRUHJvZ210SW5DcmVhdGUgJyArXG4gICAgICAgICAgICAgICdxcXIgcXFyZSBxcXJlcCBxciBxcmUgcXJlcCBxcnNvbCBxcnRzb2wgcXR5ciBxdHlyZSBxdHlyZXAgcXVhbnRpbGUgcXVhbnRpbGVkIHF5ciBxeXJlIHF5cmVwIHF6IHJhbmsgcmFua2luZHggcmVhZHIgJyArXG4gICAgICAgICAgICAgICdyZWFsIHJlY2xhc3NpZnkgcmVjbGFzc2lmeUN1dHMgcmVjb2RlIHJlY3NlcmFyIHJlY3NlcmNwIHJlY3NlcnJjIHJlcnVuIHJlc2NhbGUgcmVzaGFwZSByZXRzIHJldiByZmZ0IHJmZnRpIHJmZnRpcCByZmZ0biAnICtcbiAgICAgICAgICAgICAgJ3JmZnRucCByZmZ0cCBybmRCZXJub3VsbGkgcm5kQmV0YSBybmRCaW5vbWlhbCBybmRDYXVjaHkgcm5kQ2hpU3F1YXJlIHJuZENvbiBybmRDcmVhdGVTdGF0ZSBybmRFeHAgcm5kR2FtbWEgcm5kR2VvIHJuZEd1bWJlbCAnICtcbiAgICAgICAgICAgICAgJ3JuZEh5cGVyR2VvIHJuZGkgcm5kS01iZXRhIHJuZEtNZ2FtIHJuZEtNaSBybmRLTW4gcm5kS01uYiBybmRLTXAgcm5kS011IHJuZEtNdm0gcm5kTGFwbGFjZSBybmRMQ2JldGEgcm5kTENnYW0gcm5kTENpIHJuZExDbiAnICtcbiAgICAgICAgICAgICAgJ3JuZExDbmIgcm5kTENwIHJuZExDdSBybmRMQ3ZtIHJuZExvZ05vcm0gcm5kTVR1IHJuZE1WbiBybmRNVnQgcm5kbiBybmRuYiBybmROZWdCaW5vbWlhbCBybmRwIHJuZFBvaXNzb24gcm5kUmF5bGVpZ2ggJyArXG4gICAgICAgICAgICAgICdybmRTdGF0ZVNraXAgcm5kdSBybmR2bSBybmRXZWlidWxsIHJuZFdpc2hhcnQgcm90YXRlciByb3VuZCByb3dzIHJvd3NmIHJyZWYgc2FtcGxlRGF0YSBzYXRvc3RyQyBzYXZlZCBzYXZlU3RydWN0IHNhdmV3aW5kICcgK1xuICAgICAgICAgICAgICAnc2NhbGUgc2NhbGUzZCBzY2FsZXJyIHNjYWxpbmZuYW5taXNzIHNjYWxtaXNzIHNjaHRvYyBzY2h1ciBzZWFyY2hzb3VyY2VwYXRoIHNlZWtyIHNlbGVjdCBzZWxpZiBzZXFhIHNlcW0gc2V0ZGlmIHNldGRpZnNhICcgK1xuICAgICAgICAgICAgICAnc2V0dmFycyBzZXR2d3Jtb2RlIHNldHdpbmQgc2hlbGwgc2hpZnRyIHNpbiBzaW5nbGVpbmRleCBzaW5oIHNsZWVwIHNvbHBkIHNvcnRjIHNvcnRjYyBzb3J0ZCBzb3J0aGMgc29ydGhjYyBzb3J0aW5kICcgK1xuICAgICAgICAgICAgICAnc29ydGluZGMgc29ydG1jIHNvcnRyIHNvcnRyYyBzcEJpY29uakdyYWRTb2wgc3BDaG9sIHNwQ29uakdyYWRTb2wgc3BDcmVhdGUgc3BEZW5zZVN1Ym1hdCBzcERpYWdSdk1hdCBzcEVpZ3Ygc3BFeWUgc3BMREwgJyArXG4gICAgICAgICAgICAgICdzcGxpbmUgc3BMVSBzcE51bU5aRSBzcE9uZXMgc3ByZWFkU2hlZXRSZWFkTSBzcHJlYWRTaGVldFJlYWRTQSBzcHJlYWRTaGVldFdyaXRlIHNwU2NhbGUgc3BTdWJtYXQgc3BUb0RlbnNlIHNwVHJURGVuc2UgJyArXG4gICAgICAgICAgICAgICdzcFRTY2FsYXIgc3BaZXJvcyBzcXBTb2x2ZSBzcXBTb2x2ZU1UIHNxcFNvbHZlTVRDb250cm9sQ3JlYXRlIHNxcFNvbHZlTVRsYWdyYW5nZUNyZWF0ZSBzcXBTb2x2ZU1Ub3V0Q3JlYXRlIHNxcFNvbHZlU2V0ICcgK1xuICAgICAgICAgICAgICAnc3FydCBzdGF0ZW1lbnRzIHN0ZGMgc3Rkc2Mgc3RvY3Ygc3RvZiBzdHJjb21iaW5lIHN0cmluZHggc3RybGVuIHN0cnB1dCBzdHJyaW5keCBzdHJzZWN0IHN0cnNwbGl0IHN0cnNwbGl0UGFkIHN0cnRvZHQgJyArXG4gICAgICAgICAgICAgICdzdHJ0b2Ygc3RydG9mY3BseCBzdHJ0cmltbCBzdHJ0cmltciBzdHJ0cnVuYyBzdHJ0cnVuY2wgc3RydHJ1bmNwYWQgc3RydHJ1bmNyIHN1Ym1hdCBzdWJzY2F0IHN1YnN0dXRlIHN1YnZlYyBzdW1jIHN1bXIgJyArXG4gICAgICAgICAgICAgICdzdXJmYWNlIHN2ZCBzdmQxIHN2ZDIgc3ZkY3VzdiBzdmRzIHN2ZHVzdiBzeXNzdGF0ZSB0YWIgdGFuIHRhbmggdGVtcG5hbWUgdGhyZWFkQmVnaW4gdGhyZWFkRW5kIHRocmVhZEVuZEZvciB0aHJlYWRGb3IgJyArXG4gICAgICAgICAgICAgICd0aHJlYWRKb2luIHRocmVhZFN0YXQgdGltZSB0aW1lZHQgdGltZXN0ciB0aW1ldXRjIHRpdGxlIHRrZjJlcHMgdGtmMnBzIHRvY2FydCB0b2RheWR0IHRvZXBsaXR6IHRva2VuIHRvcG9sYXIgdHJhcGNoayAnICtcbiAgICAgICAgICAgICAgJ3RyaWdhbW1hIHRyaW1yIHRydW5jIHR5cGUgdHlwZWN2IHR5cGVmIHVuaW9uIHVuaW9uc2EgdW5pcWluZHggdW5pcWluZHhzYSB1bmlxdWUgdW5pcXVlc2EgdXBtYXQgdXBtYXQxIHVwcGVyIHV0Y3RvZHQgJyArXG4gICAgICAgICAgICAgICd1dGN0b2R0diB1dHJpc29sIHZhbHMgdmFyQ292TVMgdmFyQ292WFMgdmFyZ2V0IHZhcmdldGwgdmFybWFsbCB2YXJtYXJlcyB2YXJwdXQgdmFycHV0bCB2YXJ0eXBlZiB2Y20gdmNtcyB2Y3ggdmN4cyAnICtcbiAgICAgICAgICAgICAgJ3ZlYyB2ZWNoIHZlY3IgdmVjdG9yIHZnZXQgdmlldyB2aWV3eHl6IHZsaXN0IHZuYW1lY3Ygdm9sdW1lIHZwdXQgdnJlYWQgdnR5cGVjdiB3YWl0IHdhaXRjIHdhbGtpbmRleCB3aGVyZSB3aW5kb3cgJyArXG4gICAgICAgICAgICAgICd3cml0ZXIgeGxhYmVsIHhsc0dldFNoZWV0Q291bnQgeGxzR2V0U2hlZXRTaXplIHhsc0dldFNoZWV0VHlwZXMgeGxzTWFrZVJhbmdlIHhsc1JlYWRNIHhsc1JlYWRTQSB4bHNXcml0ZSB4bHNXcml0ZU0gJyArXG4gICAgICAgICAgICAgICd4bHNXcml0ZVNBIHhwbmQgeHRpY3MgeHkgeHl6IHlsYWJlbCB5dGljcyB6ZXJvcyB6ZXRhIHpsYWJlbCB6dGljcyBjZGZFbXBpcmljYWwgZG90IGg1Y3JlYXRlIGg1b3BlbiBoNXJlYWQgaDVyZWFkQXR0cmlidXRlICcgK1xuICAgICAgICAgICAgICAnaDV3cml0ZSBoNXdyaXRlQXR0cmlidXRlIGxkbCBwbG90QWRkRXJyb3JCYXIgcGxvdEFkZFN1cmZhY2UgcGxvdENERkVtcGlyaWNhbCBwbG90U2V0Q29sb3JtYXAgcGxvdFNldENvbnRvdXJMYWJlbHMgJyArXG4gICAgICAgICAgICAgICdwbG90U2V0TGVnZW5kRm9udCBwbG90U2V0VGV4dEludGVycHJldGVyIHBsb3RTZXRYVGljQ291bnQgcGxvdFNldFlUaWNDb3VudCBwbG90U2V0WkxldmVscyBwb3dlcm0gc3Ryam9pbiBzdHJ0cmltIHN5bHZlc3RlcicsXG4gICAgbGl0ZXJhbDogJ0RCX0FGVEVSX0xBU1RfUk9XIERCX0FMTF9UQUJMRVMgREJfQkFUQ0hfT1BFUkFUSU9OUyBEQl9CRUZPUkVfRklSU1RfUk9XIERCX0JMT0IgREJfRVZFTlRfTk9USUZJQ0FUSU9OUyAnICtcbiAgICAgICAgICAgICAnREJfRklOSVNIX1FVRVJZIERCX0hJR0hfUFJFQ0lTSU9OIERCX0xBU1RfSU5TRVJUX0lEIERCX0xPV19QUkVDSVNJT05fRE9VQkxFIERCX0xPV19QUkVDSVNJT05fSU5UMzIgJyArXG4gICAgICAgICAgICAgJ0RCX0xPV19QUkVDSVNJT05fSU5UNjQgREJfTE9XX1BSRUNJU0lPTl9OVU1CRVJTIERCX01VTFRJUExFX1JFU1VMVF9TRVRTIERCX05BTUVEX1BMQUNFSE9MREVSUyAnICtcbiAgICAgICAgICAgICAnREJfUE9TSVRJT05BTF9QTEFDRUhPTERFUlMgREJfUFJFUEFSRURfUVVFUklFUyBEQl9RVUVSWV9TSVpFIERCX1NJTVBMRV9MT0NLSU5HIERCX1NZU1RFTV9UQUJMRVMgREJfVEFCTEVTICcgK1xuICAgICAgICAgICAgICdEQl9UUkFOU0FDVElPTlMgREJfVU5JQ09ERSBEQl9WSUVXUydcbiAgfTtcblxuICB2YXIgUFJFUFJPQ0VTU09SID1cbiAge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnIycsIGVuZDogJyQnLFxuICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdkZWZpbmUgZGVmaW5lY3N8MTAgdW5kZWYgaWZkZWYgaWZuZGVmIGlmbGlnaHQgaWZkbGxjYWxsIGlmbWFjIGlmb3Myd2luIGlmdW5peCBlbHNlIGVuZGlmIGxpbmVzb24gbGluZXNvZmYgc3JjZmlsZSBzcmNsaW5lJ30sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFxcXFxuLywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW5jbHVkZScsIGVuZDogJyQnLFxuICAgICAgICBrZXl3b3JkczogeydtZXRhLWtleXdvcmQnOiAnaW5jbHVkZSd9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEtc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcblxuICB2YXIgRlVOQ1RJT05fVElUTEUgPSBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCg/JztcbiAgdmFyIFBBUlNFX1BBUkFNUyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgIF1cbiAgICB9XG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2dzcyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsIC8vIGxhbmd1YWdlIGlzIGNhc2UtaW5zZW5zaXRpdmVcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogJyhcXFxce1slI118WyUjXVxcXFx9KScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJ0AnLCAnQCcpLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3Byb2Mga2V5d29yZCcsXG4gICAgICAgIGVuZDogJzsnLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IEZVTkNUSU9OX1RJVExFLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgUFJFUFJPQ0VTU09SXG4gICAgICAgIF0uY29uY2F0KFBBUlNFX1BBUkFNUylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2ZuJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUgKyBobGpzLklERU5UX1JFICsgJ1xcXFwpP1xcXFxzKlxcXFw9XFxcXHMqJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF0uY29uY2F0KFBBUlNFX1BBUkFNUylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYmV4dGVybmFsIChwcm9jfGtleXdvcmR8Zm4pXFxcXHMrJyxcbiAgICAgICAgZW5kOiAnOycsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogRlVOQ1RJT05fVElUTEUsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYmV4dGVybmFsIChtYXRyaXh8c3RyaW5nfGFycmF5fHNwYXJzZSBtYXRyaXh8c3RydWN0ICcgKyBobGpzLklERU5UX1JFICsgJylcXFxccysnLFxuICAgICAgICBlbmQ6ICc7JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHZhciBHQ09ERV9JREVOVF9SRSA9ICdbQS1aX11bQS1aMC05Xy5dKic7XG4gICAgdmFyIEdDT0RFX0NMT1NFX1JFID0gJ1xcXFwlJztcbiAgICB2YXIgR0NPREVfS0VZV09SRFMgPVxuICAgICAgJ0lGIERPIFdISUxFIEVORFdISUxFIENBTEwgRU5ESUYgU1VCIEVORFNVQiBHT1RPIFJFUEVBVCBFTkRSRVBFQVQgJyArXG4gICAgICAnRVEgTFQgR1QgTkUgR0UgTEUgT1IgWE9SJztcbiAgICB2YXIgR0NPREVfU1RBUlQgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyhbT10pKFswLTldKyknXG4gICAgfTtcbiAgICB2YXIgR0NPREVfQ09ERSA9IFtcbiAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICBobGpzLkNPTU1FTlQoL1xcKC8sIC9cXCkvKSxcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuQ19OVU1CRVJfTU9ERSwge2JlZ2luOiAnKFstK10/KFswLTldKlxcXFwuP1swLTldK1xcXFwuPykpfCcgKyBobGpzLkNfTlVNQkVSX1JFfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAnKFtHXSkoWzAtOV0rXFxcXC4/WzAtOV0/KSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgICAgICAgICBiZWdpbjogJyhbTV0pKFswLTldK1xcXFwuP1swLTldPyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVkN8VlN8IyknLFxuICAgICAgICAgICAgZW5kOiAnKFxcXFxkKyknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgYmVnaW46ICcoVlpPRlh8VlpPRll8VlpPRlopJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgICAgICBiZWdpbjogJyhBVEFOfEFCU3xBQ09TfEFTSU58U0lOfENPU3xFWFB8RklYfEZVUHxST1VORHxMTnxUQU4pKFxcXFxbKScsXG4gICAgICAgICAgICBlbmQ6ICcoWy0rXT8oWzAtOV0qXFxcXC4/WzAtOV0rXFxcXC4/KSkoXFxcXF0pJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnTicsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICAgICAgICAgIGlsbGVnYWw6ICdcXFxcVydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWxpYXNlczogWyduYyddLFxuICAgICAgICAvLyBTb21lIGltcGxlbWVudGF0aW9ucyAoQ05DIGNvbnRyb2xzKSBvZiBHLWNvZGUgYXJlIGludGVyb3BlcmFibGUgd2l0aCB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSBsZXR0ZXJzIHNlYW1sZXNzbHkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIG1vc3QgcHJlZmVyIGFsbCB1cHBlcmNhc2UgYW5kIHVwcGVyY2FzZSBpcyBjdXN0b21hcnkuXG4gICAgICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgICAgIGxleGVtZXM6IEdDT0RFX0lERU5UX1JFLFxuICAgICAgICBrZXl3b3JkczogR0NPREVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgICAgICAgICAgYmVnaW46IEdDT0RFX0NMT1NFX1JFXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgR0NPREVfU1RBUlRcbiAgICAgICAgXS5jb25jYXQoR0NPREVfQ09ERSlcbiAgICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydmZWF0dXJlJ10sXG4gICAga2V5d29yZHM6ICdGZWF0dXJlIEJhY2tncm91bmQgQWJpbGl0eSBCdXNpbmVzc1xcIE5lZWQgU2NlbmFyaW8gU2NlbmFyaW9zIFNjZW5hcmlvXFwgT3V0bGluZSBTY2VuYXJpb1xcIFRlbXBsYXRlIEV4YW1wbGVzIEdpdmVuIEFuZCBUaGVuIEJ1dCBXaGVuJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcXFwqJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdAW15AXFxcXHNdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXHwnLCBlbmQ6ICdcXFxcfFxcXFx3KiQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1tefF0rJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJzwnLCBlbmQ6ICc+J1xuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJ1xuICAgICAgfSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBTdGF0ZW1lbnRzXG4gICAgICAgICdicmVhayBjb250aW51ZSBkaXNjYXJkIGRvIGVsc2UgZm9yIGlmIHJldHVybiB3aGlsZSBzd2l0Y2ggY2FzZSBkZWZhdWx0ICcgK1xuICAgICAgICAvLyBRdWFsaWZpZXJzXG4gICAgICAgICdhdHRyaWJ1dGUgYmluZGluZyBidWZmZXIgY2N3IGNlbnRyb2lkIGNlbnRyb2lkIHZhcnlpbmcgY29oZXJlbnQgY29sdW1uX21ham9yIGNvbnN0IGN3ICcgK1xuICAgICAgICAnZGVwdGhfYW55IGRlcHRoX2dyZWF0ZXIgZGVwdGhfbGVzcyBkZXB0aF91bmNoYW5nZWQgZWFybHlfZnJhZ21lbnRfdGVzdHMgZXF1YWxfc3BhY2luZyAnICtcbiAgICAgICAgJ2ZsYXQgZnJhY3Rpb25hbF9ldmVuX3NwYWNpbmcgZnJhY3Rpb25hbF9vZGRfc3BhY2luZyBoaWdocCBpbiBpbmRleCBpbm91dCBpbnZhcmlhbnQgJyArXG4gICAgICAgICdpbnZvY2F0aW9ucyBpc29saW5lcyBsYXlvdXQgbGluZV9zdHJpcCBsaW5lcyBsaW5lc19hZGphY2VuY3kgbG9jYWxfc2l6ZV94IGxvY2FsX3NpemVfeSAnICtcbiAgICAgICAgJ2xvY2FsX3NpemVfeiBsb2NhdGlvbiBsb3dwIG1heF92ZXJ0aWNlcyBtZWRpdW1wIG5vcGVyc3BlY3RpdmUgb2Zmc2V0IG9yaWdpbl91cHBlcl9sZWZ0ICcgK1xuICAgICAgICAnb3V0IHBhY2tlZCBwYXRjaCBwaXhlbF9jZW50ZXJfaW50ZWdlciBwb2ludF9tb2RlIHBvaW50cyBwcmVjaXNlIHByZWNpc2lvbiBxdWFkcyByMTFmX2cxMWZfYjEwZiAnK1xuICAgICAgICAncjE2IHIxNl9zbm9ybSByMTZmIHIxNmkgcjE2dWkgcjMyZiByMzJpIHIzMnVpIHI4IHI4X3Nub3JtIHI4aSByOHVpIHJlYWRvbmx5IHJlc3RyaWN0ICcgK1xuICAgICAgICAncmcxNiByZzE2X3Nub3JtIHJnMTZmIHJnMTZpIHJnMTZ1aSByZzMyZiByZzMyaSByZzMydWkgcmc4IHJnOF9zbm9ybSByZzhpIHJnOHVpIHJnYjEwX2EyICcgK1xuICAgICAgICAncmdiMTBfYTJ1aSByZ2JhMTYgcmdiYTE2X3Nub3JtIHJnYmExNmYgcmdiYTE2aSByZ2JhMTZ1aSByZ2JhMzJmIHJnYmEzMmkgcmdiYTMydWkgcmdiYTggJyArXG4gICAgICAgICdyZ2JhOF9zbm9ybSByZ2JhOGkgcmdiYTh1aSByb3dfbWFqb3Igc2FtcGxlIHNoYXJlZCBzbW9vdGggc3RkMTQwIHN0ZDQzMCBzdHJlYW0gdHJpYW5nbGVfc3RyaXAgJyArXG4gICAgICAgICd0cmlhbmdsZXMgdHJpYW5nbGVzX2FkamFjZW5jeSB1bmlmb3JtIHZhcnlpbmcgdmVydGljZXMgdm9sYXRpbGUgd3JpdGVvbmx5JyxcbiAgICAgIHR5cGU6XG4gICAgICAgICdhdG9taWNfdWludCBib29sIGJ2ZWMyIGJ2ZWMzIGJ2ZWM0IGRtYXQyIGRtYXQyeDIgZG1hdDJ4MyBkbWF0Mng0IGRtYXQzIGRtYXQzeDIgZG1hdDN4MyAnICtcbiAgICAgICAgJ2RtYXQzeDQgZG1hdDQgZG1hdDR4MiBkbWF0NHgzIGRtYXQ0eDQgZG91YmxlIGR2ZWMyIGR2ZWMzIGR2ZWM0IGZsb2F0IGlpbWFnZTFEIGlpbWFnZTFEQXJyYXkgJyArXG4gICAgICAgICdpaW1hZ2UyRCBpaW1hZ2UyREFycmF5IGlpbWFnZTJETVMgaWltYWdlMkRNU0FycmF5IGlpbWFnZTJEUmVjdCBpaW1hZ2UzRCBpaW1hZ2VCdWZmZXInICtcbiAgICAgICAgJ2lpbWFnZUN1YmUgaWltYWdlQ3ViZUFycmF5IGltYWdlMUQgaW1hZ2UxREFycmF5IGltYWdlMkQgaW1hZ2UyREFycmF5IGltYWdlMkRNUyBpbWFnZTJETVNBcnJheSAnICtcbiAgICAgICAgJ2ltYWdlMkRSZWN0IGltYWdlM0QgaW1hZ2VCdWZmZXIgaW1hZ2VDdWJlIGltYWdlQ3ViZUFycmF5IGludCBpc2FtcGxlcjFEIGlzYW1wbGVyMURBcnJheSAnICtcbiAgICAgICAgJ2lzYW1wbGVyMkQgaXNhbXBsZXIyREFycmF5IGlzYW1wbGVyMkRNUyBpc2FtcGxlcjJETVNBcnJheSBpc2FtcGxlcjJEUmVjdCBpc2FtcGxlcjNEICcgK1xuICAgICAgICAnaXNhbXBsZXJCdWZmZXIgaXNhbXBsZXJDdWJlIGlzYW1wbGVyQ3ViZUFycmF5IGl2ZWMyIGl2ZWMzIGl2ZWM0IG1hdDIgbWF0MngyIG1hdDJ4MyAnICtcbiAgICAgICAgJ21hdDJ4NCBtYXQzIG1hdDN4MiBtYXQzeDMgbWF0M3g0IG1hdDQgbWF0NHgyIG1hdDR4MyBtYXQ0eDQgc2FtcGxlcjFEIHNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAnc2FtcGxlcjFEQXJyYXlTaGFkb3cgc2FtcGxlcjFEU2hhZG93IHNhbXBsZXIyRCBzYW1wbGVyMkRBcnJheSBzYW1wbGVyMkRBcnJheVNoYWRvdyAnICtcbiAgICAgICAgJ3NhbXBsZXIyRE1TIHNhbXBsZXIyRE1TQXJyYXkgc2FtcGxlcjJEUmVjdCBzYW1wbGVyMkRSZWN0U2hhZG93IHNhbXBsZXIyRFNoYWRvdyBzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHNhbXBsZXJDdWJlIHNhbXBsZXJDdWJlQXJyYXkgc2FtcGxlckN1YmVBcnJheVNoYWRvdyBzYW1wbGVyQ3ViZVNoYWRvdyAnICtcbiAgICAgICAgJ2ltYWdlMUQgdWltYWdlMURBcnJheSB1aW1hZ2UyRCB1aW1hZ2UyREFycmF5IHVpbWFnZTJETVMgdWltYWdlMkRNU0FycmF5IHVpbWFnZTJEUmVjdCAnICtcbiAgICAgICAgJ3VpbWFnZTNEIHVpbWFnZUJ1ZmZlciB1aW1hZ2VDdWJlIHVpbWFnZUN1YmVBcnJheSB1aW50IHVzYW1wbGVyMUQgdXNhbXBsZXIxREFycmF5ICcgK1xuICAgICAgICAndXNhbXBsZXIyRCB1c2FtcGxlcjJEQXJyYXkgdXNhbXBsZXIyRE1TIHVzYW1wbGVyMkRNU0FycmF5IHVzYW1wbGVyMkRSZWN0IHVzYW1wbGVyM0QgJyArXG4gICAgICAgICdzYW1wbGVyQnVmZmVyIHVzYW1wbGVyQ3ViZSB1c2FtcGxlckN1YmVBcnJheSB1dmVjMiB1dmVjMyB1dmVjNCB2ZWMyIHZlYzMgdmVjNCB2b2lkJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBDb25zdGFudHNcbiAgICAgICAgJ2dsX01heEF0b21pY0NvdW50ZXJCaW5kaW5ncyBnbF9NYXhBdG9taWNDb3VudGVyQnVmZmVyU2l6ZSBnbF9NYXhDbGlwRGlzdGFuY2VzIGdsX01heENsaXBQbGFuZXMgJyArXG4gICAgICAgICdnbF9NYXhDb21iaW5lZEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heENvbWJpbmVkQXRvbWljQ291bnRlcnMgZ2xfTWF4Q29tYmluZWRJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4Q29tYmluZWRJbWFnZVVuaXRzQW5kRnJhZ21lbnRPdXRwdXRzIGdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJCdWZmZXJzICcgK1xuICAgICAgICAnZ2xfTWF4Q29tcHV0ZUF0b21pY0NvdW50ZXJzIGdsX01heENvbXB1dGVJbWFnZVVuaWZvcm1zIGdsX01heENvbXB1dGVUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heENvbXB1dGVVbmlmb3JtQ29tcG9uZW50cyBnbF9NYXhDb21wdXRlV29ya0dyb3VwQ291bnQgZ2xfTWF4Q29tcHV0ZVdvcmtHcm91cFNpemUgJyArXG4gICAgICAgICdnbF9NYXhEcmF3QnVmZmVycyBnbF9NYXhGcmFnbWVudEF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heEZyYWdtZW50QXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudEltYWdlVW5pZm9ybXMgZ2xfTWF4RnJhZ21lbnRJbnB1dENvbXBvbmVudHMgZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgJyArXG4gICAgICAgICdnbF9NYXhGcmFnbWVudFVuaWZvcm1Db21wb25lbnRzIGdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgZ2xfTWF4R2VvbWV0cnlBdG9taWNDb3VudGVyQnVmZmVycyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5QXRvbWljQ291bnRlcnMgZ2xfTWF4R2VvbWV0cnlJbWFnZVVuaWZvcm1zIGdsX01heEdlb21ldHJ5SW5wdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4R2VvbWV0cnlPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5T3V0cHV0VmVydGljZXMgZ2xfTWF4R2VvbWV0cnlUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heEdlb21ldHJ5VG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heEdlb21ldHJ5VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4R2VvbWV0cnlWYXJ5aW5nQ29tcG9uZW50cyAnICtcbiAgICAgICAgJ2dsX01heEltYWdlU2FtcGxlcyBnbF9NYXhJbWFnZVVuaXRzIGdsX01heExpZ2h0cyBnbF9NYXhQYXRjaFZlcnRpY2VzIGdsX01heFByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sQXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VGVzc0NvbnRyb2xBdG9taWNDb3VudGVycyBnbF9NYXhUZXNzQ29udHJvbEltYWdlVW5pZm9ybXMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzQ29udHJvbElucHV0Q29tcG9uZW50cyBnbF9NYXhUZXNzQ29udHJvbE91dHB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0NvbnRyb2xUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRlc3NDb250cm9sVG90YWxPdXRwdXRDb21wb25lbnRzIGdsX01heFRlc3NDb250cm9sVW5pZm9ybUNvbXBvbmVudHMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkF0b21pY0NvdW50ZXJCdWZmZXJzIGdsX01heFRlc3NFdmFsdWF0aW9uQXRvbWljQ291bnRlcnMgJyArXG4gICAgICAgICdnbF9NYXhUZXNzRXZhbHVhdGlvbkltYWdlVW5pZm9ybXMgZ2xfTWF4VGVzc0V2YWx1YXRpb25JbnB1dENvbXBvbmVudHMgZ2xfTWF4VGVzc0V2YWx1YXRpb25PdXRwdXRDb21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0V2YWx1YXRpb25UZXh0dXJlSW1hZ2VVbml0cyBnbF9NYXhUZXNzRXZhbHVhdGlvblVuaWZvcm1Db21wb25lbnRzICcgK1xuICAgICAgICAnZ2xfTWF4VGVzc0dlbkxldmVsIGdsX01heFRlc3NQYXRjaENvbXBvbmVudHMgZ2xfTWF4VGV4dHVyZUNvb3JkcyBnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyAnICtcbiAgICAgICAgJ2dsX01heFRleHR1cmVVbml0cyBnbF9NYXhWYXJ5aW5nQ29tcG9uZW50cyBnbF9NYXhWYXJ5aW5nRmxvYXRzIGdsX01heFZhcnlpbmdWZWN0b3JzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlckJ1ZmZlcnMgZ2xfTWF4VmVydGV4QXRvbWljQ291bnRlcnMgZ2xfTWF4VmVydGV4QXR0cmlicyBnbF9NYXhWZXJ0ZXhJbWFnZVVuaWZvcm1zICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4T3V0cHV0Q29tcG9uZW50cyBnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIGdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzICcgK1xuICAgICAgICAnZ2xfTWF4VmVydGV4VW5pZm9ybUNvbXBvbmVudHMgZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgZ2xfTWF4Vmlld3BvcnRzIGdsX01pblByb2dyYW1UZXhlbE9mZnNldCAnICtcbiAgICAgICAgLy8gVmFyaWFibGVzXG4gICAgICAgICdnbF9CYWNrQ29sb3IgZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IGdsX0JhY2tMaWdodFByb2R1Y3QgZ2xfQmFja01hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfQmFja1NlY29uZGFyeUNvbG9yIGdsX0NsaXBEaXN0YW5jZSBnbF9DbGlwUGxhbmUgZ2xfQ2xpcFZlcnRleCBnbF9Db2xvciAnICtcbiAgICAgICAgJ2dsX0RlcHRoUmFuZ2UgZ2xfRXllUGxhbmVRIGdsX0V5ZVBsYW5lUiBnbF9FeWVQbGFuZVMgZ2xfRXllUGxhbmVUIGdsX0ZvZyBnbF9Gb2dDb29yZCAnICtcbiAgICAgICAgJ2dsX0ZvZ0ZyYWdDb29yZCBnbF9GcmFnQ29sb3IgZ2xfRnJhZ0Nvb3JkIGdsX0ZyYWdEYXRhIGdsX0ZyYWdEZXB0aCBnbF9Gcm9udENvbG9yICcgK1xuICAgICAgICAnZ2xfRnJvbnRGYWNpbmcgZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCBnbF9Gcm9udExpZ2h0UHJvZHVjdCBnbF9Gcm9udE1hdGVyaWFsICcgK1xuICAgICAgICAnZ2xfRnJvbnRTZWNvbmRhcnlDb2xvciBnbF9HbG9iYWxJbnZvY2F0aW9uSUQgZ2xfSW5zdGFuY2VJRCBnbF9JbnZvY2F0aW9uSUQgZ2xfTGF5ZXIgZ2xfTGlnaHRNb2RlbCAnICtcbiAgICAgICAgJ2dsX0xpZ2h0U291cmNlIGdsX0xvY2FsSW52b2NhdGlvbklEIGdsX0xvY2FsSW52b2NhdGlvbkluZGV4IGdsX01vZGVsVmlld01hdHJpeCAnICtcbiAgICAgICAgJ2dsX01vZGVsVmlld01hdHJpeEludmVyc2UgZ2xfTW9kZWxWaWV3TWF0cml4SW52ZXJzZVRyYW5zcG9zZSBnbF9Nb2RlbFZpZXdNYXRyaXhUcmFuc3Bvc2UgJyArXG4gICAgICAgICdnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4IGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIGdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9NdWx0aVRleENvb3JkMCBnbF9NdWx0aVRleENvb3JkMSBnbF9NdWx0aVRleENvb3JkMiAnICtcbiAgICAgICAgJ2dsX011bHRpVGV4Q29vcmQzIGdsX011bHRpVGV4Q29vcmQ0IGdsX011bHRpVGV4Q29vcmQ1IGdsX011bHRpVGV4Q29vcmQ2IGdsX011bHRpVGV4Q29vcmQ3ICcgK1xuICAgICAgICAnZ2xfTm9ybWFsIGdsX05vcm1hbE1hdHJpeCBnbF9Ob3JtYWxTY2FsZSBnbF9OdW1TYW1wbGVzIGdsX051bVdvcmtHcm91cHMgZ2xfT2JqZWN0UGxhbmVRICcgK1xuICAgICAgICAnZ2xfT2JqZWN0UGxhbmVSIGdsX09iamVjdFBsYW5lUyBnbF9PYmplY3RQbGFuZVQgZ2xfUGF0Y2hWZXJ0aWNlc0luIGdsX1BvaW50IGdsX1BvaW50Q29vcmQgJyArXG4gICAgICAgICdnbF9Qb2ludFNpemUgZ2xfUG9zaXRpb24gZ2xfUHJpbWl0aXZlSUQgZ2xfUHJpbWl0aXZlSURJbiBnbF9Qcm9qZWN0aW9uTWF0cml4IGdsX1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlICcgK1xuICAgICAgICAnZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UgZ2xfUHJvamVjdGlvbk1hdHJpeFRyYW5zcG9zZSBnbF9TYW1wbGVJRCBnbF9TYW1wbGVNYXNrICcgK1xuICAgICAgICAnZ2xfU2FtcGxlTWFza0luIGdsX1NhbXBsZVBvc2l0aW9uIGdsX1NlY29uZGFyeUNvbG9yIGdsX1Rlc3NDb29yZCBnbF9UZXNzTGV2ZWxJbm5lciBnbF9UZXNzTGV2ZWxPdXRlciAnICtcbiAgICAgICAgJ2dsX1RleENvb3JkIGdsX1RleHR1cmVFbnZDb2xvciBnbF9UZXh0dXJlTWF0cml4IGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIGdsX1RleHR1cmVNYXRyaXhJbnZlcnNlVHJhbnNwb3NlICcgK1xuICAgICAgICAnZ2xfVGV4dHVyZU1hdHJpeFRyYW5zcG9zZSBnbF9WZXJ0ZXggZ2xfVmVydGV4SUQgZ2xfVmlld3BvcnRJbmRleCBnbF9Xb3JrR3JvdXBJRCBnbF9Xb3JrR3JvdXBTaXplIGdsX2luIGdsX291dCAnICtcbiAgICAgICAgLy8gRnVuY3Rpb25zXG4gICAgICAgICdFbWl0U3RyZWFtVmVydGV4IEVtaXRWZXJ0ZXggRW5kUHJpbWl0aXZlIEVuZFN0cmVhbVByaW1pdGl2ZSBhYnMgYWNvcyBhY29zaCBhbGwgYW55IGFzaW4gJyArXG4gICAgICAgICdhc2luaCBhdGFuIGF0YW5oIGF0b21pY0FkZCBhdG9taWNBbmQgYXRvbWljQ29tcFN3YXAgYXRvbWljQ291bnRlciBhdG9taWNDb3VudGVyRGVjcmVtZW50ICcgK1xuICAgICAgICAnYXRvbWljQ291bnRlckluY3JlbWVudCBhdG9taWNFeGNoYW5nZSBhdG9taWNNYXggYXRvbWljTWluIGF0b21pY09yIGF0b21pY1hvciBiYXJyaWVyICcgK1xuICAgICAgICAnYml0Q291bnQgYml0ZmllbGRFeHRyYWN0IGJpdGZpZWxkSW5zZXJ0IGJpdGZpZWxkUmV2ZXJzZSBjZWlsIGNsYW1wIGNvcyBjb3NoIGNyb3NzICcgK1xuICAgICAgICAnZEZkeCBkRmR5IGRlZ3JlZXMgZGV0ZXJtaW5hbnQgZGlzdGFuY2UgZG90IGVxdWFsIGV4cCBleHAyIGZhY2Vmb3J3YXJkIGZpbmRMU0IgZmluZE1TQiAnICtcbiAgICAgICAgJ2Zsb2F0Qml0c1RvSW50IGZsb2F0Qml0c1RvVWludCBmbG9vciBmbWEgZnJhY3QgZnJleHAgZnRyYW5zZm9ybSBmd2lkdGggZ3JlYXRlclRoYW4gJyArXG4gICAgICAgICdncmVhdGVyVGhhbkVxdWFsIGdyb3VwTWVtb3J5QmFycmllciBpbWFnZUF0b21pY0FkZCBpbWFnZUF0b21pY0FuZCBpbWFnZUF0b21pY0NvbXBTd2FwICcgK1xuICAgICAgICAnaW1hZ2VBdG9taWNFeGNoYW5nZSBpbWFnZUF0b21pY01heCBpbWFnZUF0b21pY01pbiBpbWFnZUF0b21pY09yIGltYWdlQXRvbWljWG9yIGltYWdlTG9hZCAnICtcbiAgICAgICAgJ2ltYWdlU2l6ZSBpbWFnZVN0b3JlIGltdWxFeHRlbmRlZCBpbnRCaXRzVG9GbG9hdCBpbnRlcnBvbGF0ZUF0Q2VudHJvaWQgaW50ZXJwb2xhdGVBdE9mZnNldCAnICtcbiAgICAgICAgJ2ludGVycG9sYXRlQXRTYW1wbGUgaW52ZXJzZSBpbnZlcnNlc3FydCBpc2luZiBpc25hbiBsZGV4cCBsZW5ndGggbGVzc1RoYW4gbGVzc1RoYW5FcXVhbCBsb2cgJyArXG4gICAgICAgICdsb2cyIG1hdHJpeENvbXBNdWx0IG1heCBtZW1vcnlCYXJyaWVyIG1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyIG1lbW9yeUJhcnJpZXJCdWZmZXIgJyArXG4gICAgICAgICdtZW1vcnlCYXJyaWVySW1hZ2UgbWVtb3J5QmFycmllclNoYXJlZCBtaW4gbWl4IG1vZCBtb2RmIG5vaXNlMSBub2lzZTIgbm9pc2UzIG5vaXNlNCAnICtcbiAgICAgICAgJ25vcm1hbGl6ZSBub3Qgbm90RXF1YWwgb3V0ZXJQcm9kdWN0IHBhY2tEb3VibGUyeDMyIHBhY2tIYWxmMngxNiBwYWNrU25vcm0yeDE2IHBhY2tTbm9ybTR4OCAnICtcbiAgICAgICAgJ3BhY2tVbm9ybTJ4MTYgcGFja1Vub3JtNHg4IHBvdyByYWRpYW5zIHJlZmxlY3QgcmVmcmFjdCByb3VuZCByb3VuZEV2ZW4gc2hhZG93MUQgc2hhZG93MURMb2QgJyArXG4gICAgICAgICdzaGFkb3cxRFByb2ogc2hhZG93MURQcm9qTG9kIHNoYWRvdzJEIHNoYWRvdzJETG9kIHNoYWRvdzJEUHJvaiBzaGFkb3cyRFByb2pMb2Qgc2lnbiBzaW4gc2luaCAnICtcbiAgICAgICAgJ3Ntb290aHN0ZXAgc3FydCBzdGVwIHRhbiB0YW5oIHRleGVsRmV0Y2ggdGV4ZWxGZXRjaE9mZnNldCB0ZXh0dXJlIHRleHR1cmUxRCB0ZXh0dXJlMURMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlMURQcm9qIHRleHR1cmUxRFByb2pMb2QgdGV4dHVyZTJEIHRleHR1cmUyRExvZCB0ZXh0dXJlMkRQcm9qIHRleHR1cmUyRFByb2pMb2QgJyArXG4gICAgICAgICd0ZXh0dXJlM0QgdGV4dHVyZTNETG9kIHRleHR1cmUzRFByb2ogdGV4dHVyZTNEUHJvakxvZCB0ZXh0dXJlQ3ViZSB0ZXh0dXJlQ3ViZUxvZCAnICtcbiAgICAgICAgJ3RleHR1cmVHYXRoZXIgdGV4dHVyZUdhdGhlck9mZnNldCB0ZXh0dXJlR2F0aGVyT2Zmc2V0cyB0ZXh0dXJlR3JhZCB0ZXh0dXJlR3JhZE9mZnNldCAnICtcbiAgICAgICAgJ3RleHR1cmVMb2QgdGV4dHVyZUxvZE9mZnNldCB0ZXh0dXJlT2Zmc2V0IHRleHR1cmVQcm9qIHRleHR1cmVQcm9qR3JhZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQgJyArXG4gICAgICAgICd0ZXh0dXJlUHJvakxvZCB0ZXh0dXJlUHJvakxvZE9mZnNldCB0ZXh0dXJlUHJvak9mZnNldCB0ZXh0dXJlUXVlcnlMZXZlbHMgdGV4dHVyZVF1ZXJ5TG9kICcgK1xuICAgICAgICAndGV4dHVyZVNpemUgdHJhbnNwb3NlIHRydW5jIHVhZGRDYXJyeSB1aW50Qml0c1RvRmxvYXQgdW11bEV4dGVuZGVkIHVucGFja0RvdWJsZTJ4MzIgJyArXG4gICAgICAgICd1bnBhY2tIYWxmMngxNiB1bnBhY2tTbm9ybTJ4MTYgdW5wYWNrU25vcm00eDggdW5wYWNrVW5vcm0yeDE2IHVucGFja1Vub3JtNHg4IHVzdWJCb3Jyb3cnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgR09fS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdicmVhayBkZWZhdWx0IGZ1bmMgaW50ZXJmYWNlIHNlbGVjdCBjYXNlIG1hcCBzdHJ1Y3QgY2hhbiBlbHNlIGdvdG8gcGFja2FnZSBzd2l0Y2ggJyArXG4gICAgICAnY29uc3QgZmFsbHRocm91Z2ggaWYgcmFuZ2UgdHlwZSBjb250aW51ZSBmb3IgaW1wb3J0IHJldHVybiB2YXIgZ28gZGVmZXIgJyArXG4gICAgICAnYm9vbCBieXRlIGNvbXBsZXg2NCBjb21wbGV4MTI4IGZsb2F0MzIgZmxvYXQ2NCBpbnQ4IGludDE2IGludDMyIGludDY0IHN0cmluZyB1aW50OCAnICtcbiAgICAgICd1aW50MTYgdWludDMyIHVpbnQ2NCBpbnQgdWludCB1aW50cHRyIHJ1bmUnLFxuICAgIGxpdGVyYWw6XG4gICAgICAgJ3RydWUgZmFsc2UgaW90YSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FwcGVuZCBjYXAgY2xvc2UgY29tcGxleCBjb3B5IGltYWcgbGVuIG1ha2UgbmV3IHBhbmljIHByaW50IHByaW50bG4gcmVhbCByZWNvdmVyIGRlbGV0ZSdcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2dvbGFuZyddLFxuICAgIGtleXdvcmRzOiBHT19LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnPC8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAge2JlZ2luOiAnXFwnJywgZW5kOiAnW15cXFxcXFxcXF1cXCcnfSxcbiAgICAgICAgICB7YmVnaW46ICdgJywgZW5kOiAnYCd9LFxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogaGxqcy5DX05VTUJFUl9SRSArICdbZGZsc2ldJywgcmVsZXZhbmNlOiAxfSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86PS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmMnLCBlbmQ6IC9cXHMqXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGtleXdvcmRzOiBHT19LRVlXT1JEUyxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bXCInXS9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHJldHVybiB7XG4gICAgICBrZXl3b3Jkczoge1xuICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICdwcmludGxuIHJlYWRsbiBwcmludCBpbXBvcnQgbW9kdWxlIGZ1bmN0aW9uIGxvY2FsIHJldHVybiBsZXQgdmFyICcgK1xuICAgICAgICAgICd3aGlsZSBmb3IgZm9yZWFjaCB0aW1lcyBpbiBjYXNlIHdoZW4gbWF0Y2ggd2l0aCBicmVhayBjb250aW51ZSAnICtcbiAgICAgICAgICAnYXVnbWVudCBhdWdtZW50YXRpb24gZWFjaCBmaW5kIGZpbHRlciByZWR1Y2UgJyArXG4gICAgICAgICAgJ2lmIHRoZW4gZWxzZSBvdGhlcndpc2UgdHJ5IGNhdGNoIGZpbmFsbHkgcmFpc2UgdGhyb3cgb3JJZk51bGwgJyArXG4gICAgICAgICAgJ0R5bmFtaWNPYmplY3R8MTAgRHluYW1pY1ZhcmlhYmxlIHN0cnVjdCBPYnNlcnZhYmxlIG1hcCBzZXQgdmVjdG9yIGxpc3QgYXJyYXknLFxuICAgICAgICBsaXRlcmFsOlxuICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwnXG4gICAgICB9LFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ3Rhc2sgcHJvamVjdCBhbGxwcm9qZWN0cyBzdWJwcm9qZWN0cyBhcnRpZmFjdHMgYnVpbGRzY3JpcHQgY29uZmlndXJhdGlvbnMgJyArXG4gICAgICAgICdkZXBlbmRlbmNpZXMgcmVwb3NpdG9yaWVzIHNvdXJjZVNldHMgZGVzY3JpcHRpb24gZGVsZXRlIGZyb20gaW50byBpbmNsdWRlICcgK1xuICAgICAgICAnZXhjbHVkZSBzb3VyY2UgY2xhc3NwYXRoIGRlc3RpbmF0aW9uRGlyIGluY2x1ZGVzIG9wdGlvbnMgc291cmNlQ29tcGF0aWJpbGl0eSAnICtcbiAgICAgICAgJ3RhcmdldENvbXBhdGliaWxpdHkgZ3JvdXAgZmxhdERpciBkb0xhc3QgZG9GaXJzdCBmbGF0dGVuIHRvZGlyIGZyb21kaXIgYW50ICcgK1xuICAgICAgICAnZGVmIGFic3RyYWN0IGJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVmYXVsdCBkbyBlbHNlIGV4dGVuZHMgZmluYWwgZmluYWxseSAnICtcbiAgICAgICAgJ2ZvciBpZiBpbXBsZW1lbnRzIGluc3RhbmNlb2YgbmF0aXZlIG5ldyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmV0dXJuIHN0YXRpYyAnICtcbiAgICAgICAgJ3N3aXRjaCBzeW5jaHJvbml6ZWQgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCB0cnkgdm9sYXRpbGUgd2hpbGUgc3RyaWN0ZnAgcGFja2FnZSAnICtcbiAgICAgICAgJ2ltcG9ydCBmYWxzZSBudWxsIHN1cGVyIHRoaXMgdHJ1ZSBhbnRscnRhc2sgY2hlY2tzdHlsZSBjb2RlbmFyYyBjb3B5IGJvb2xlYW4gJyArXG4gICAgICAgICdieXRlIGNoYXIgY2xhc3MgZG91YmxlIGZsb2F0IGludCBpbnRlcmZhY2UgbG9uZyBzaG9ydCB2b2lkIGNvbXBpbGUgcnVuVGltZSAnICtcbiAgICAgICAgJ2ZpbGUgZmlsZVRyZWUgYWJzIGFueSBhcHBlbmQgYXNMaXN0IGFzV3JpdGFibGUgY2FsbCBjb2xsZWN0IGNvbXBhcmVUbyBjb3VudCAnICtcbiAgICAgICAgJ2RpdiBkdW1wIGVhY2ggZWFjaEJ5dGUgZWFjaEZpbGUgZWFjaExpbmUgZXZlcnkgZmluZCBmaW5kQWxsIGZsYXR0ZW4gZ2V0QXQgJyArXG4gICAgICAgICdnZXRFcnIgZ2V0SW4gZ2V0T3V0IGdldFRleHQgZ3JlcCBpbW11dGFibGUgaW5qZWN0IGluc3BlY3QgaW50ZXJzZWN0IGludm9rZU1ldGhvZHMgJyArXG4gICAgICAgICdpc0Nhc2Ugam9pbiBsZWZ0U2hpZnQgbWludXMgbXVsdGlwbHkgbmV3SW5wdXRTdHJlYW0gbmV3T3V0cHV0U3RyZWFtIG5ld1ByaW50V3JpdGVyICcgK1xuICAgICAgICAnbmV3UmVhZGVyIG5ld1dyaXRlciBuZXh0IHBsdXMgcG9wIHBvd2VyIHByZXZpb3VzIHByaW50IHByaW50bG4gcHVzaCBwdXRBdCByZWFkICcgK1xuICAgICAgICAncmVhZEJ5dGVzIHJlYWRMaW5lcyByZXZlcnNlIHJldmVyc2VFYWNoIHJvdW5kIHNpemUgc29ydCBzcGxpdEVhY2hMaW5lIHN0ZXAgc3ViTWFwICcgK1xuICAgICAgICAndGltZXMgdG9JbnRlZ2VyIHRvTGlzdCB0b2tlbml6ZSB1cHRvIHdhaXRGb3JPcktpbGwgd2l0aFByaW50V3JpdGVyIHdpdGhSZWFkZXIgJyArXG4gICAgICAgICd3aXRoU3RyZWFtIHdpdGhXcml0ZXIgd2l0aFdyaXRlckFwcGVuZCB3cml0ZSB3cml0ZUxpbmUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5SRUdFWFBfTU9ERVxuXG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAgIHJldHVybiB7XG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgICBsaXRlcmFsIDogJ3RydWUgZmFsc2UgbnVsbCcsXG4gICAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2J5dGUgc2hvcnQgY2hhciBpbnQgbG9uZyBib29sZWFuIGZsb2F0IGRvdWJsZSB2b2lkICcgK1xuICAgICAgICAgICAgLy8gZ3Jvb3Z5IHNwZWNpZmljIGtleXdvcmRzXG4gICAgICAgICAgICAnZGVmIGFzIGluIGFzc2VydCB0cmFpdCAnICtcbiAgICAgICAgICAgIC8vIGNvbW1vbiBrZXl3b3JkcyB3aXRoIEphdmFcbiAgICAgICAgICAgICdzdXBlciB0aGlzIGFic3RyYWN0IHN0YXRpYyB2b2xhdGlsZSB0cmFuc2llbnQgcHVibGljIHByaXZhdGUgcHJvdGVjdGVkIHN5bmNocm9uaXplZCBmaW5hbCAnICtcbiAgICAgICAgICAgICdjbGFzcyBpbnRlcmZhY2UgZW51bSBpZiBlbHNlIGZvciB3aGlsZSBzd2l0Y2ggY2FzZSBicmVhayBkZWZhdWx0IGNvbnRpbnVlICcgK1xuICAgICAgICAgICAgJ3Rocm93IHRocm93cyB0cnkgY2F0Y2ggZmluYWxseSBpbXBsZW1lbnRzIGV4dGVuZHMgbmV3IGltcG9ydCBwYWNrYWdlIHJldHVybiBpbnN0YW5jZW9mJ1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICAgICAgICAgJy9cXFxcKlxcXFwqJyxcbiAgICAgICAgICAgICAgICAnXFxcXCovJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGV2YW5jZSA6IDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWF0IHVwIEAncyBpbiBlbWFpbHMgdG8gcHJldmVudCB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgZG9jdGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcdytALywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA6ICdkb2N0YWcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA6ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgYmVnaW46IFwiJycnXCIsIGVuZDogXCInJydcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiBcIlxcXFwkL1wiLCBlbmQ6IFwiL1xcXFwkXCIsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvfj9cXC9bXlxcL1xcbl0rXFwvLyxcbiAgICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogXCJeIyEvdXNyL2Jpbi9lbnZcIiwgZW5kOiAnJCcsXG4gICAgICAgICAgICAgICAgaWxsZWdhbDogJ1xcbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgICAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZSB0cmFpdCBlbnVtJywgZW5kOiAneycsXG4gICAgICAgICAgICAgICAgaWxsZWdhbDogJzonLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJ30sXG4gICAgICAgICAgICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHQgbWFwIGtleXMgYW5kIG5hbWVkIHBhcmFtZXRlcnMgYXMgc3RyaW5nc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAvW15cXD9dezB9W0EtWmEtejAtOV8kXSsgKjovXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGNhdGNoIG1pZGRsZSBlbGVtZW50IG9mIHRoZSB0ZXJuYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaGlnaGxpZ2h0IGl0IGFzIGEgbGFiZWwsIG5hbWVkIHBhcmFtZXRlciwgb3IgbWFwIGtleVxuICAgICAgICAgICAgICAgIGJlZ2luOiAvXFw/LywgZW5kOiAvXFw6L1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBoaWdobGlnaHQgbGFiZWxlZCBzdGF0ZW1lbnRzXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJywgYmVnaW46ICdeXFxcXHMqW0EtWmEtejAtOV8kXSs6JyxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaWxsZWdhbDogLyN8PFxcLy9cbiAgICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gLy8gVE9ETyBzdXBwb3J0IGZpbHRlciB0YWdzIGxpa2UgOmphdmFzY3JpcHQsIHN1cHBvcnQgaW5saW5lIEhUTUxcbmZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ14hISEoICg1fDFcXFxcLjF8U3RyaWN0fEZyYW1lc2V0fEJhc2ljfE1vYmlsZXxSREZhfFhNTFxcXFxiLiopKT8kJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIC8vIEZJWE1FIHRoZXNlIGNvbW1lbnRzIHNob3VsZCBiZSBhbGxvd2VkIHRvIHNwYW4gaW5kZW50ZWQgbGluZXNcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ15cXFxccyooIT0jfD0jfC0jfC8pLiokJyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqKC18PXwhPSkoPyEjKScsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIGVuZDogJ1xcXFxuJyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ3J1YnknXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RhZycsXG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKiUnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFx3KydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWlkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnI1tcXFxcdy1dKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWNsYXNzJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXC5bXFxcXHctXSsnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ3tcXFxccyonLFxuICAgICAgICAgICAgZW5kOiAnXFxcXHMqfScsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICc6XFxcXHcrXFxcXHMqPT4nLFxuICAgICAgICAgICAgICAgIGVuZDogJyxcXFxccysnLFxuICAgICAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbjogJzpcXFxcdysnXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXChcXFxccyonLFxuICAgICAgICAgICAgZW5kOiAnXFxcXHMqXFxcXCknLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFx3K1xcXFxzKj0nLFxuICAgICAgICAgICAgICAgIGVuZDogJ1xcXFxzKycsXG4gICAgICAgICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXHcrJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcdysnLFxuICAgICAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKls9fl1cXFxccyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJyN7JyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnfScsXG4gICAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEJVSUxUX0lOUyA9IHsnYnVpbHRpbi1uYW1lJzogJ2VhY2ggaW4gd2l0aCBpZiBlbHNlIHVubGVzcyBiaW5kYXR0ciBhY3Rpb24gY29sbGVjdGlvbiBkZWJ1Z2dlciBsb2cgb3V0bGV0IHRlbXBsYXRlIHVuYm91bmQgdmlldyB5aWVsZCd9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaGJzJywgJ2h0bWwuaGJzJywgJ2h0bWwuaGFuZGxlYmFycyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgaGxqcy5DT01NRU5UKCd7eyEoLS0pPycsICcoLS0pP319JyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7WyNcXC9dLywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW2EtekEtWlxcLi1dKy8sXG4gICAgICAgICAgICBrZXl3b3JkczogQlVJTFRfSU5TLFxuICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLCByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0ZW1wbGF0ZS12YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFx7XFx7LywgZW5kOiAvXFx9XFx9LyxcbiAgICAgICAga2V5d29yZHM6IEJVSUxUX0lOU1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT01NRU5UID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ3stJyxcbiAgICAgICAgJy19JyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgICB9XG4gICAgICApXG4gICAgXVxuICB9O1xuXG4gIHZhciBQUkFHTUEgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICd7LSMnLCBlbmQ6ICcjLX0nXG4gIH07XG5cbiAgdmFyIFBSRVBST0NFU1NPUiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jJywgZW5kOiAnJCdcbiAgfTtcblxuICB2YXIgQ09OU1RSVUNUT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLCAvLyBUT0RPOiBvdGhlciBjb25zdHJ1Y3RvcnMgKGJ1aWxkLWluLCBpbmZpeCkuXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBpbGxlZ2FsOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUkFHTUEsXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7Y2xhc3NOYW1lOiAndHlwZScsIGJlZ2luOiAnXFxcXGJbQS1aXVtcXFxcd10qKFxcXFwoKFxcXFwuXFxcXC58LHxcXFxcdyspXFxcXCkpPyd9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnW19hLXpdW1xcXFx3XFwnXSonfSksXG4gICAgICBDT01NRU5UXG4gICAgXVxuICB9O1xuXG4gIHZhciBSRUNPUkQgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsXG4gICAgY29udGFpbnM6IExJU1QuY29udGFpbnNcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaHMnXSxcbiAgICBrZXl3b3JkczpcbiAgICAgICdsZXQgaW4gaWYgdGhlbiBlbHNlIGNhc2Ugb2Ygd2hlcmUgZG8gbW9kdWxlIGltcG9ydCBoaWRpbmcgJyArXG4gICAgICAncXVhbGlmaWVkIHR5cGUgZGF0YSBuZXd0eXBlIGRlcml2aW5nIGNsYXNzIGluc3RhbmNlIGFzIGRlZmF1bHQgJyArXG4gICAgICAnaW5maXggaW5maXhsIGluZml4ciBmb3JlaWduIGV4cG9ydCBjY2FsbCBzdGRjYWxsIGNwbHVzcGx1cyAnICtcbiAgICAgICdqdm0gZG90bmV0IHNhZmUgdW5zYWZlIGZhbWlseSBmb3JhbGwgbWRvIHByb2MgcmVjJyxcbiAgICBjb250YWluczogW1xuXG4gICAgICAvLyBUb3AtbGV2ZWwgY29uc3RydWN0aW9ucy5cblxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbW9kdWxlJywgZW5kOiAnd2hlcmUnLFxuICAgICAgICBrZXl3b3JkczogJ21vZHVsZSB3aGVyZScsXG4gICAgICAgIGNvbnRhaW5zOiBbTElTVCwgQ09NTUVOVF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiaW1wb3J0XFxcXGInLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdpbXBvcnQgcXVhbGlmaWVkIGFzIGhpZGluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbTElTVCwgQ09NTUVOVF0sXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcV1xcXFwufDsnXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICdeKFxcXFxzKik/KGNsYXNzfGluc3RhbmNlKVxcXFxiJywgZW5kOiAnd2hlcmUnLFxuICAgICAgICBrZXl3b3JkczogJ2NsYXNzIGZhbWlseSBpbnN0YW5jZSB3aGVyZScsXG4gICAgICAgIGNvbnRhaW5zOiBbQ09OU1RSVUNUT1IsIExJU1QsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoZGF0YXwobmV3KT90eXBlKVxcXFxiJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnZGF0YSBmYW1pbHkgdHlwZSBuZXd0eXBlIGRlcml2aW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtQUkFHTUEsIENPTlNUUlVDVE9SLCBMSVNULCBSRUNPUkQsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmYXVsdCcsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW0NPTlNUUlVDVE9SLCBMSVNULCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2luZml4IGluZml4bCBpbmZpeHInLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkNfTlVNQkVSX01PREUsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiZm9yZWlnblxcXFxiJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiAnZm9yZWlnbiBpbXBvcnQgZXhwb3J0IGNjYWxsIHN0ZGNhbGwgY3BsdXNwbHVzIGp2bSAnICtcbiAgICAgICAgICAgICAgICAgICdkb3RuZXQgc2FmZSB1bnNhZmUnLFxuICAgICAgICBjb250YWluczogW0NPTlNUUlVDVE9SLCBobGpzLlFVT1RFX1NUUklOR19NT0RFLCBDT01NRU5UXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnIyFcXFxcL3VzclxcXFwvYmluXFxcXC9lbnZcXCBydW5oYXNrZWxsJywgZW5kOiAnJCdcbiAgICAgIH0sXG5cbiAgICAgIC8vIFwiV2hpdGVzcGFjZXNcIi5cblxuICAgICAgUFJBR01BLFxuICAgICAgUFJFUFJPQ0VTU09SLFxuXG4gICAgICAvLyBMaXRlcmFscyBhbmQgbmFtZXMuXG5cbiAgICAgIC8vIFRPRE86IGNoYXJhY3RlcnMuXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgQ09OU1RSVUNUT1IsXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdeW19hLXpdW1xcXFx3XFwnXSonfSksXG5cbiAgICAgIENPTU1FTlQsXG5cbiAgICAgIHtiZWdpbjogJy0+fDwtJ30gLy8gTm8gbWFya3VwLCByZWxldmFuY2UgYm9vc3RlclxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbYS16QS1aXyRdW2EtekEtWjAtOV8kXSonO1xuICB2YXIgSURFTlRfRlVOQ19SRVRVUk5fVFlQRV9SRSA9ICcoWypdfFthLXpBLVpfJF1bYS16QS1aMC05XyRdKiknO1xuXG4gIHZhciBIQVhFX0JBU0lDX1RZUEVTID0gJ0ludCBGbG9hdCBTdHJpbmcgQm9vbCBEeW5hbWljIFZvaWQgQXJyYXkgJztcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaHgnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2JyZWFrIGNhc2UgY2FzdCBjYXRjaCBjb250aW51ZSBkZWZhdWx0IGRvIGR5bmFtaWMgZWxzZSBlbnVtIGV4dGVybiAnICtcbiAgICAgICAgICAgICAgICdmb3IgZnVuY3Rpb24gaGVyZSBpZiBpbXBvcnQgaW4gaW5saW5lIG5ldmVyIG5ldyBvdmVycmlkZSBwYWNrYWdlIHByaXZhdGUgZ2V0IHNldCAnICtcbiAgICAgICAgICAgICAgICdwdWJsaWMgcmV0dXJuIHN0YXRpYyBzdXBlciBzd2l0Y2ggdGhpcyB0aHJvdyB0cmFjZSB0cnkgdHlwZWRlZiB1bnR5cGVkIHVzaW5nIHZhciB3aGlsZSAnICtcbiAgICAgICAgICAgICAgIEhBWEVfQkFTSUNfVFlQRVMsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3RyYWNlIHRoaXMnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCBfJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHsgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gaW50ZXJwb2xhdGUtYWJsZSBzdHJpbmdzXG4gICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLkJBQ0tTTEFTSF9FU0NBUEUsXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdzdWJzdCcsIC8vIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCRcXFxceycsIGVuZDogJ1xcXFx9J1xuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdzdWJzdCcsIC8vIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCQnLCBlbmQ6ICdcXFxcV30nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7IGNsYXNzTmFtZTogJ21ldGEnLCAvLyBjb21waWxlciBtZXRhXG4gICAgICAgIGJlZ2luOiAnQDonLCBlbmQ6ICckJ1xuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAnbWV0YScsIC8vIGNvbXBpbGVyIGNvbmRpdGlvbmFsc1xuICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxzZWlmIGVuZCBlcnJvcid9XG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICd0eXBlJywgLy8gZnVuY3Rpb24gdHlwZXNcbiAgICAgICAgYmVnaW46ICc6WyBcXHRdKicsIGVuZDogJ1teQS1aYS16MC05XyBcXHRcXFxcLT5dJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLCAvLyB0eXBlc1xuICAgICAgICBiZWdpbjogJzpbIFxcdF0qJywgZW5kOiAnXFxcXFcnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLCAvLyBpbnN0YW50aWF0aW9uXG4gICAgICAgIGJlZ2luOiAnbmV3IConLCBlbmQ6ICdcXFxcVycsXG4gICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAnY2xhc3MnLCAvLyBlbnVtc1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZW51bScsIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHsgY2xhc3NOYW1lOiAnY2xhc3MnLCAvLyBhYnN0cmFjdHNcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Fic3RyYWN0JywgZW5kOiAnW1xcXFx7JF0nLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46ICdmcm9tICsnLCBlbmQ6ICdcXFxcVycsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ3RvICsnLCBlbmQ6ICdcXFxcVycsXG4gICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGtleXdvcmQ6ICdhYnN0cmFjdCBmcm9tIHRvJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBjbGFzc05hbWU6ICdjbGFzcycsIC8vIGNsYXNzZXNcbiAgICAgICAgYmVnaW46ICdcXFxcYihjbGFzc3xpbnRlcmZhY2UpICsnLCBlbmQ6ICdbXFxcXHskXScsICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoZXh0ZW5kc3xpbXBsZW1lbnRzKSArJyxcbiAgICAgICAgICAgIGtleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRSxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnXFxcXCgnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFMnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvPFxcLy9cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBsZXhlbWVzOiAvW1xcd1xcLl9dKy8sXG4gICAga2V5d29yZHM6ICdnb3RvIGdvc3ViIHJldHVybiBicmVhayByZXBlYXQgbG9vcCBjb250aW51ZSB3YWl0IGF3YWl0IGRpbSBzZGltIGZvcmVhY2ggZGltdHlwZSBkdXAgZHVwcHRyIGVuZCBzdG9wIG5ld21vZCBkZWxtb2QgbXJlZiBydW4gZXhnb3RvIG9uIG1jYWxsIGFzc2VydCBsb2dtZXMgbmV3bGFiIHJlc3VtZSB5aWVsZCBvbmV4aXQgb25lcnJvciBvbmtleSBvbmNsaWNrIG9uY21kIGV4aXN0IGRlbGV0ZSBta2RpciBjaGRpciBkaXJsaXN0IGJsb2FkIGJzYXZlIGJjb3B5IG1lbWZpbGUgaWYgZWxzZSBwb2tlIHdwb2tlIGxwb2tlIGdldHN0ciBjaGRwbSBtZW1leHBhbmQgbWVtY3B5IG1lbXNldCBub3Rlc2VsIG5vdGVhZGQgbm90ZWRlbCBub3RlbG9hZCBub3Rlc2F2ZSByYW5kb21pemUgbm90ZXVuc2VsIG5vdGVnZXQgc3BsaXQgc3RycmVwIHNldGVhc2UgYnV0dG9uIGNoZ2Rpc3AgZXhlYyBkaWFsb2cgbW1sb2FkIG1tcGxheSBtbXN0b3AgbWNpIHBzZXQgcGdldCBzeXNjb2xvciBtZXMgcHJpbnQgdGl0bGUgcG9zIGNpcmNsZSBjbHMgZm9udCBzeXNmb250IG9ianNpemUgcGljbG9hZCBjb2xvciBwYWxjb2xvciBwYWxldHRlIHJlZHJhdyB3aWR0aCBnc2VsIGdjb3B5IGd6b29tIGdtb2RlIGJtcHNhdmUgaHN2Y29sb3IgZ2V0a2V5IGxpc3Rib3ggY2hrYm94IGNvbWJveCBpbnB1dCBtZXNib3ggYnVmZmVyIHNjcmVlbiBiZ3NjciBtb3VzZSBvYmpzZWwgZ3JvbGwgbGluZSBjbHJvYmogYm94ZiBvYmpwcm0gb2JqbW9kZSBzdGljayBncmVjdCBncm90YXRlIGdzcXVhcmUgZ3JhZGYgb2JqaW1hZ2Ugb2Jqc2tpcCBvYmplbmFibGUgY2VsbG9hZCBjZWxkaXYgY2VscHV0IG5ld2NvbSBxdWVyeWNvbSBkZWxjb20gY252c3RvdyBjb21yZXMgYXhvYmogd2lub2JqIHNlbmRtc2cgY29tZXZlbnQgY29tZXZhcmcgc2FycmF5Y29udiBjYWxsZnVuYyBjbnZ3dG9zIGNvbWV2ZGlzcCBsaWJwdHIgc3lzdGVtIGhzcHN0YXQgaHNwdmVyIHN0YXQgY250IGVyciBzdHJzaXplIGxvb3BsZXYgc3VibGV2IGlwYXJhbSB3cGFyYW0gbHBhcmFtIHJlZnN0ciByZWZkdmFsIGludCBybmQgc3RybGVuIGxlbmd0aCBsZW5ndGgyIGxlbmd0aDMgbGVuZ3RoNCB2YXJ0eXBlIGdldHRpbWUgcGVlayB3cGVlayBscGVlayB2YXJwdHIgdmFydXNlIG5vdGVpbmZvIGluc3RyIGFicyBsaW1pdCBnZXRlYXNlIHN0ciBzdHJtaWQgc3RyZiBnZXRwYXRoIHN0cnRyaW0gc2luIGNvcyB0YW4gYXRhbiBzcXJ0IGRvdWJsZSBhYnNmIGV4cGYgbG9nZiBsaW1pdGYgcG93ZiBnZXRlYXNlZiBtb3VzZXggbW91c2V5IG1vdXNldyBod25kIGhpbnN0YW5jZSBoZGMgZ2luZm8gb2JqaW5mbyBkaXJpbmZvIHN5c2luZm8gdGhpc21vZCBfX2hzcHZlcl9fIF9faHNwMzBfXyBfX2RhdGVfXyBfX3RpbWVfXyBfX2xpbmVfXyBfX2ZpbGVfXyBfZGVidWcgX19oc3BkZWZfXyBhbmQgb3IgeG9yIG5vdCBzY3JlZW5fbm9ybWFsIHNjcmVlbl9wYWxldHRlIHNjcmVlbl9oaWRlIHNjcmVlbl9maXhlZHNpemUgc2NyZWVuX3Rvb2wgc2NyZWVuX2ZyYW1lIGdtb2RlX2dkaSBnbW9kZV9tZW0gZ21vZGVfcmdiMCBnbW9kZV9hbHBoYSBnbW9kZV9yZ2IwYWxwaGEgZ21vZGVfYWRkIGdtb2RlX3N1YiBnbW9kZV9waXhlbGEgZ2luZm9fbXggZ2luZm9fbXkgZ2luZm9fYWN0IGdpbmZvX3NlbCBnaW5mb193eDEgZ2luZm9fd3kxIGdpbmZvX3d4MiBnaW5mb193eTIgZ2luZm9fdnggZ2luZm9fdnkgZ2luZm9fc2l6ZXggZ2luZm9fc2l6ZXkgZ2luZm9fd2lueCBnaW5mb193aW55IGdpbmZvX21lc3ggZ2luZm9fbWVzeSBnaW5mb19yIGdpbmZvX2cgZ2luZm9fYiBnaW5mb19wYWx1c2UgZ2luZm9fZGlzcHggZ2luZm9fZGlzcHkgZ2luZm9fY3ggZ2luZm9fY3kgZ2luZm9faW50aWQgZ2luZm9fbmV3aWQgZ2luZm9fc3ggZ2luZm9fc3kgb2JqaW5mb19tb2RlIG9iamluZm9fYm1zY3Igb2JqaW5mb19od25kIG5vdGVtYXggbm90ZXNpemUgZGlyX2N1ciBkaXJfZXhlIGRpcl93aW4gZGlyX3N5cyBkaXJfY21kbGluZSBkaXJfZGVza3RvcCBkaXJfbXlkb2MgZGlyX3R2IGZvbnRfbm9ybWFsIGZvbnRfYm9sZCBmb250X2l0YWxpYyBmb250X3VuZGVybGluZSBmb250X3N0cmlrZW91dCBmb250X2FudGlhbGlhcyBvYmptb2RlX25vcm1hbCBvYmptb2RlX2d1aWZvbnQgb2JqbW9kZV91c2Vmb250IGdzcXVhcmVfZ3JhZCBtc2dvdGhpYyBtc21pbmNobyBkbyB1bnRpbCB3aGlsZSB3ZW5kIGZvciBuZXh0IF9icmVhayBfY29udGludWUgc3dpdGNoIGNhc2UgZGVmYXVsdCBzd2JyZWFrIHN3ZW5kIGRkaW0gbGRpbSBhbGxvYyBtX3BpIHJhZDJkZWcgZGVnMnJhZCBlYXNlX2xpbmVhciBlYXNlX3F1YWRfaW4gZWFzZV9xdWFkX291dCBlYXNlX3F1YWRfaW5vdXQgZWFzZV9jdWJpY19pbiBlYXNlX2N1YmljX291dCBlYXNlX2N1YmljX2lub3V0IGVhc2VfcXVhcnRpY19pbiBlYXNlX3F1YXJ0aWNfb3V0IGVhc2VfcXVhcnRpY19pbm91dCBlYXNlX2JvdW5jZV9pbiBlYXNlX2JvdW5jZV9vdXQgZWFzZV9ib3VuY2VfaW5vdXQgZWFzZV9zaGFrZV9pbiBlYXNlX3NoYWtlX291dCBlYXNlX3NoYWtlX2lub3V0IGVhc2VfbG9vcCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuXG4gICAgICB7XG4gICAgICAgIC8vIG11bHRpLWxpbmUgc3RyaW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAne1wiJywgZW5kOiAnXCJ9JyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuXG4gICAgICBobGpzLkNPTU1FTlQoJzsnLCAnJCcsIHtyZWxldmFuY2U6IDB9KSxcblxuICAgICAge1xuICAgICAgICAvLyBwcmUtcHJvY2Vzc29yXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2FkZGlvbiBjZnVuYyBjbWQgY21wb3B0IGNvbWZ1bmMgY29uc3QgZGVmY2Z1bmMgZGVmZnVuYyBkZWZpbmUgZWxzZSBlbmRpZiBlbnVtIGVwYWNrIGZ1bmMgZ2xvYmFsIGlmIGlmZGVmIGlmbmRlZiBpbmNsdWRlIG1vZGNmdW5jIG1vZGZ1bmMgbW9kaW5pdCBtb2R0ZXJtIG1vZHVsZSBwYWNrIHBhY2tvcHQgcmVnY21kIHJ1bnRpbWUgdW5kZWYgdXNlY29tIHVzZWxpYid9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnfSksXG4gICAgICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICAvLyBsYWJlbFxuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ15cXFxcKihcXFxcdyt8QCknXG4gICAgICB9LFxuXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEJVSUxUX0lOUyA9ICdhY3Rpb24gY29sbGVjdGlvbiBjb21wb25lbnQgY29uY2F0IGRlYnVnZ2VyIGVhY2ggZWFjaC1pbiBlbHNlIGdldCBoYXNoIGlmIGlucHV0IGxpbmstdG8gbG9jIGxvZyBtdXQgb3V0bGV0IHBhcnRpYWwgcXVlcnktcGFyYW1zIHJlbmRlciB0ZXh0YXJlYSB1bmJvdW5kIHVubGVzcyB3aXRoIHlpZWxkIHZpZXcnO1xuXG4gIHZhciBBVFRSX0FTU0lHTk1FTlQgPSB7XG4gICAgaWxsZWdhbDogL1xcfVxcfS8sXG4gICAgYmVnaW46IC9bYS16QS1aMC05X10rPS8sXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHInLCBiZWdpbjogL1thLXpBLVowLTlfXSsvXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBTVUJfRVhQUiA9IHtcbiAgICBpbGxlZ2FsOiAvXFx9XFx9LyxcbiAgICBiZWdpbjogL1xcKS8sIGVuZDogL1xcKS8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bYS16QS1aXFwuXFwtXSsvLFxuICAgICAgICBrZXl3b3Jkczoge2J1aWx0X2luOiBCVUlMVF9JTlN9LFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSwgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgVEFHX0lOTkFSRFMgPSB7XG4gICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIHJlbGV2YW5jZTogMCxcbiAgICBrZXl3b3Jkczoge2tleXdvcmQ6ICdhcycsIGJ1aWx0X2luOiBCVUlMVF9JTlN9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgQVRUUl9BU1NJR05NRU5ULFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJ3t7ISgtLSk/JywgJygtLSk/fX0nKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdGFnJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtbI1xcL10vLCBlbmQ6IC9cXH1cXH0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgYmVnaW46IC9bYS16QS1aXFwuXFwtXSsvLFxuICAgICAgICAgICAga2V5d29yZHM6IHsnYnVpbHRpbi1uYW1lJzogQlVJTFRfSU5TfSxcbiAgICAgICAgICAgIHN0YXJ0czogVEFHX0lOTkFSRFNcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXHtcXHtbYS16QS1aXVthLXpBLVpcXC1dKy8sIGVuZDogL1xcfVxcfS8sXG4gICAgICAgIGtleXdvcmRzOiB7a2V5d29yZDogJ2FzJywgYnVpbHRfaW46IEJVSUxUX0lOU30sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZFUlNJT04gPSAnSFRUUC9bMC05XFxcXC5dKyc7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydodHRwcyddLFxuICAgIGlsbGVnYWw6ICdcXFxcUycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeJyArIFZFUlNJT04sIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW3tjbGFzc05hbWU6ICdudW1iZXInLCBiZWdpbjogJ1xcXFxiXFxcXGR7M31cXFxcYid9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeW0EtWl0rICguKj8pICcgKyBWRVJTSU9OICsgJyQnLCByZXR1cm5CZWdpbjogdHJ1ZSwgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGJlZ2luOiAnICcsIGVuZDogJyAnLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogVkVSU0lPTlxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJ1tBLVpdKydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXlxcXFx3JywgZW5kOiAnOiAnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG58XFxcXHN8PScsXG4gICAgICAgIHN0YXJ0czoge2VuZDogJyQnLCByZWxldmFuY2U6IDB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxuXFxcXG4nLFxuICAgICAgICBzdGFydHM6IHtzdWJMYW5ndWFnZTogW10sIGVuZHNXaXRoUGFyZW50OiB0cnVlfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBrZXl3b3JkcyA9IHtcbiAgICAnYnVpbHRpbi1uYW1lJzpcbiAgICAgIC8vIGtleXdvcmRzXG4gICAgICAnIT0gJSAlPSAmICY9ICogKiogKio9ICo9ICptYXAgJyArXG4gICAgICAnKyArPSAsIC0tYnVpbGQtY2xhc3MtLSAtLWltcG9ydC0tIC09IC4gLyAvLyAvLz0gJyArXG4gICAgICAnLz0gPCA8PCA8PD0gPD0gPSA+ID49ID4+ID4+PSAnICtcbiAgICAgICdAIEA9IF4gXj0gYWJzIGFjY3VtdWxhdGUgYWxsIGFuZCBhbnkgYXAtY29tcG9zZSAnICtcbiAgICAgICdhcC1kb3RpbWVzIGFwLWVhY2ggYXAtZWFjaC13aGlsZSBhcC1maWx0ZXIgYXAtZmlyc3QgYXAtaWYgYXAtbGFzdCBhcC1tYXAgYXAtbWFwLXdoZW4gYXAtcGlwZSAnICtcbiAgICAgICdhcC1yZWR1Y2UgYXAtcmVqZWN0IGFwcGx5IGFzLT4gYXNjaWkgYXNzZXJ0IGFzc29jIGJpbiBicmVhayBidXRsYXN0ICcgK1xuICAgICAgJ2NhbGxhYmxlIGNhbGxpbmctbW9kdWxlLW5hbWUgY2FyIGNhc2UgY2RyIGNoYWluIGNociBjb2xsPyBjb21iaW5hdGlvbnMgY29tcGlsZSAnICtcbiAgICAgICdjb21wcmVzcyBjb25kIGNvbnMgY29ucz8gY29udGludWUgY291bnQgY3VycnkgY3V0IGN5Y2xlIGRlYyAnICtcbiAgICAgICdkZWYgZGVmYXVsdC1tZXRob2QgZGVmY2xhc3MgZGVmbWFjcm8gZGVmbWFjcm8tYWxpYXMgZGVmbWFjcm8vZyEgZGVmbWFpbiBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiAnICtcbiAgICAgICdkZWZuLWFsaWFzIGRlZm5jIGRlZm5yIGRlZnJlYWRlciBkZWZzZXEgZGVsIGRlbGF0dHIgZGVsZXRlLXJvdXRlIGRpY3QtY29tcCBkaXIgJyArXG4gICAgICAnZGlzYXNzZW1ibGUgZGlzcGF0Y2gtcmVhZGVyLW1hY3JvIGRpc3RpbmN0IGRpdm1vZCBkbyBkb3RvIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHk/ICcgK1xuICAgICAgJ2VuZC1zZXF1ZW5jZSBldmFsIGV2YWwtYW5kLWNvbXBpbGUgZXZhbC13aGVuLWNvbXBpbGUgZXZlbj8gZXZlcnk/IGV4Y2VwdCBleGVjIGZpbHRlciBmaXJzdCAnICtcbiAgICAgICdmbGF0dGVuIGZsb2F0PyBmbiBmbmMgZm5yIGZvciBmb3IqIGZvcm1hdCBmcmFjdGlvbiBnZW5leHByICcgK1xuICAgICAgJ2dlbnN5bSBnZXQgZ2V0YXR0ciBnbG9iYWwgZ2xvYmFscyBncm91cC1ieSBoYXNhdHRyIGhhc2ggaGV4IGlkICcgK1xuICAgICAgJ2lkZW50aXR5IGlmIGlmKiBpZi1ub3QgaWYtcHl0aG9uMiBpbXBvcnQgaW4gaW5jIGlucHV0IGluc3RhbmNlPyAnICtcbiAgICAgICdpbnRlZ2VyIGludGVnZXItY2hhcj8gaW50ZWdlcj8gaW50ZXJsZWF2ZSBpbnRlcnBvc2UgaXMgaXMtY29sbCBpcy1jb25zIGlzLWVtcHR5IGlzLWV2ZW4gJyArXG4gICAgICAnaXMtZXZlcnkgaXMtZmxvYXQgaXMtaW5zdGFuY2UgaXMtaW50ZWdlciBpcy1pbnRlZ2VyLWNoYXIgaXMtaXRlcmFibGUgaXMtaXRlcmF0b3IgaXMta2V5d29yZCBpcy1uZWcgaXMtbm9uZSAnICtcbiAgICAgICdpcy1ub3QgaXMtbnVtZXJpYyBpcy1vZGQgaXMtcG9zIGlzLXN0cmluZyBpcy1zeW1ib2wgaXMtemVybyBpc2luc3RhbmNlIGlzbGljZSBpc3N1YmNsYXNzICcgK1xuICAgICAgJ2l0ZXIgaXRlcmFibGU/IGl0ZXJhdGUgaXRlcmF0b3I/IGtleXdvcmQga2V5d29yZD8gbGFtYmRhIGxhc3QgbGVuIGxldCAnICtcbiAgICAgICdsaWYgbGlmLW5vdCBsaXN0KiBsaXN0LWNvbXAgbG9jYWxzIGxvb3AgbWFjcm8tZXJyb3IgbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBtYWNyb2V4cGFuZC1hbGwgJyArXG4gICAgICAnbWFwIG1heCBtZXJnZS13aXRoIG1ldGhvZC1kZWNvcmF0b3IgbWluIG11bHRpLWRlY29yYXRvciBtdWx0aWNvbWJpbmF0aW9ucyBuYW1lIG5lZz8gbmV4dCAnICtcbiAgICAgICdub25lPyBub25sb2NhbCBub3Qgbm90LWluIG5vdD8gbnRoIG51bWVyaWM/IG9jdCBvZGQ/IG9wZW4gJyArXG4gICAgICAnb3Igb3JkIHBhcnRpdGlvbiBwZXJtdXRhdGlvbnMgcG9zPyBwb3N0LXJvdXRlIHBvc3R3YWxrIHBvdyBwcmV3YWxrIHByaW50ICcgK1xuICAgICAgJ3Byb2R1Y3QgcHJvZmlsZS9jYWxscyBwcm9maWxlL2NwdSBwdXQtcm91dGUgcXVhc2lxdW90ZSBxdW90ZSByYWlzZSByYW5nZSByZWFkIHJlYWQtc3RyICcgK1xuICAgICAgJ3JlY3Vyc2l2ZS1yZXBsYWNlIHJlZHVjZSByZW1vdmUgcmVwZWF0IHJlcGVhdGVkbHkgcmVwciByZXF1aXJlIHJlc3Qgcm91bmQgcm91dGUgJyArXG4gICAgICAncm91dGUtd2l0aC1tZXRob2RzIHJ3bSBzZWNvbmQgc2VxIHNldC1jb21wIHNldGF0dHIgc2V0diBzb21lIHNvcnRlZCBzdHJpbmcgJyArXG4gICAgICAnc3RyaW5nPyBzdW0gc3dpdGNoIHN5bWJvbD8gdGFrZSB0YWtlLW50aCB0YWtlLXdoaWxlIHRlZSB0cnkgdW5sZXNzICcgK1xuICAgICAgJ3VucXVvdGUgdW5xdW90ZS1zcGxpY2luZyB2YXJzIHdhbGsgd2hlbiB3aGlsZSB3aXRoIHdpdGgqIHdpdGgtZGVjb3JhdG9yIHdpdGgtZ2Vuc3ltcyAnICtcbiAgICAgICd4aSB4b3IgeWllbGQgeWllbGQtZnJvbSB6ZXJvPyB6aXAgemlwLWxvbmdlc3QgfCB8PSB+J1xuICAgfTtcblxuICB2YXIgU1lNQk9MU1RBUlQgPSAnYS16QS1aX1xcXFwtIS4/Kyo9PD4mI1xcJyc7XG4gIHZhciBTWU1CT0xfUkUgPSAnWycgKyBTWU1CT0xTVEFSVCArICddWycgKyBTWU1CT0xTVEFSVCArICcwLTkvOzpdKic7XG4gIHZhciBTSU1QTEVfTlVNQkVSX1JFID0gJ1stK10/XFxcXGQrKFxcXFwuXFxcXGQrKT8nO1xuXG4gIHZhciBTSEVCQU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnXiMhJywgZW5kOiAnJCdcbiAgfTtcblxuICB2YXIgU1lNQk9MID0ge1xuICAgIGJlZ2luOiBTWU1CT0xfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46IFNJTVBMRV9OVU1CRVJfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KTtcbiAgdmFyIENPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzsnLFxuICAgICckJyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAvXFxiKFtUdF1ydWV8W0ZmXWFsc2V8bmlsfE5vbmUpXFxiL1xuICB9O1xuICB2YXIgQ09MTEVDVElPTiA9IHtcbiAgICBiZWdpbjogJ1tcXFxcW1xcXFx7XScsIGVuZDogJ1tcXFxcXVxcXFx9XSdcbiAgfTtcbiAgdmFyIEhJTlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgYmVnaW46ICdcXFxcXicgKyBTWU1CT0xfUkVcbiAgfTtcbiAgdmFyIEhJTlRfQ09MID0gaGxqcy5DT01NRU5UKCdcXFxcXlxcXFx7JywgJ1xcXFx9Jyk7XG4gIHZhciBLRVkgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1s6XXsxLDJ9JyArIFNZTUJPTF9SRVxuICB9O1xuICB2YXIgTElTVCA9IHtcbiAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknXG4gIH07XG4gIHZhciBCT0RZID0ge1xuICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgTkFNRSA9IHtcbiAgICBrZXl3b3Jkczoga2V5d29yZHMsXG4gICAgbGV4ZW1lczogU1lNQk9MX1JFLFxuICAgIGNsYXNzTmFtZTogJ25hbWUnLCBiZWdpbjogU1lNQk9MX1JFLFxuICAgIHN0YXJ0czogQk9EWVxuICB9O1xuICB2YXIgREVGQVVMVF9DT05UQUlOUyA9IFtMSVNULCBTVFJJTkcsIEhJTlQsIEhJTlRfQ09MLCBDT01NRU5ULCBLRVksIENPTExFQ1RJT04sIE5VTUJFUiwgTElURVJBTCwgU1lNQk9MXTtcblxuICBMSVNULmNvbnRhaW5zID0gW2hsanMuQ09NTUVOVCgnY29tbWVudCcsICcnKSwgTkFNRSwgQk9EWV07XG4gIEJPRFkuY29udGFpbnMgPSBERUZBVUxUX0NPTlRBSU5TO1xuICBDT0xMRUNUSU9OLmNvbnRhaW5zID0gREVGQVVMVF9DT05UQUlOUztcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaHlsYW5nJ10sXG4gICAgaWxsZWdhbDogL1xcUy8sXG4gICAgY29udGFpbnM6IFtTSEVCQU5HLCBMSVNULCBTVFJJTkcsIEhJTlQsIEhJTlRfQ09MLCBDT01NRU5ULCBLRVksIENPTExFQ1RJT04sIE5VTUJFUiwgTElURVJBTF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFNUQVJUX0JSQUNLRVQgPSAnXFxcXFsnO1xuICB2YXIgRU5EX0JSQUNLRVQgPSAnXFxcXF0nO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnaTcnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICAvLyBTb21lIGtleXdvcmRzIG1vcmUgb3IgbGVzcyB1bmlxdWUgdG8gSTcsIGZvciByZWxldmFuY2UuXG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvLyBraW5kOlxuICAgICAgICAndGhpbmcgcm9vbSBwZXJzb24gbWFuIHdvbWFuIGFuaW1hbCBjb250YWluZXIgJyArXG4gICAgICAgICdzdXBwb3J0ZXIgYmFja2Ryb3AgZG9vciAnICtcbiAgICAgICAgLy8gY2hhcmFjdGVyaXN0aWM6XG4gICAgICAgICdzY2VuZXJ5IG9wZW4gY2xvc2VkIGxvY2tlZCBpbnNpZGUgZ2VuZGVyICcgK1xuICAgICAgICAvLyB2ZXJiOlxuICAgICAgICAnaXMgYXJlIHNheSB1bmRlcnN0YW5kICcgK1xuICAgICAgICAvLyBtaXNjIGtleXdvcmQ6XG4gICAgICAgICdraW5kIG9mIHJ1bGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgICAgICAgICAgYmVnaW46IFNUQVJUX0JSQUNLRVQsIGVuZDogRU5EX0JSQUNLRVRcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogL14oVm9sdW1lfEJvb2t8UGFydHxDaGFwdGVyfFNlY3Rpb258VGFibGUpXFxiLyxcbiAgICAgICAgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIFJ1bGUgZGVmaW5pdGlvblxuICAgICAgICAvLyBUaGlzIGlzIGhlcmUgZm9yIHJlbGV2YW5jZS5cbiAgICAgICAgYmVnaW46IC9eKENoZWNrfENhcnJ5IG91dHxSZXBvcnR8SW5zdGVhZCBvZnxUb3xSdWxlfFdoZW58QmVmb3JlfEFmdGVyKVxcYi8sXG4gICAgICAgIGVuZDogJzonLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vUnVsZSBuYW1lXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoVGhpcycsIGVuZDogJ1xcXFwpJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiBTVEFSVF9CUkFDS0VULCBlbmQ6IEVORF9CUkFDS0VULFxuICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogXCJzdHJpbmdcIixcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiJycnXCIsIGVuZDogXCInJydcIixcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSwge1xuICAgICAgICBiZWdpbjogJ1wiXCJcIicsIGVuZDogJ1wiXCJcIicsXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sIHtcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJ1xuICAgICAgfSwge1xuICAgICAgICBiZWdpbjogXCInXCIsIGVuZDogXCInXCJcbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd0b21sJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKCc7JywgJyQnKSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlY3Rpb24nLFxuICAgICAgICBiZWdpbjogL15cXHMqXFxbKy8sIGVuZDogL1xcXSsvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL15bYS16MC05XFxbXFxdXy1dK1xccyo9XFxzKi8sIGVuZDogJyQnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgICAgIGJlZ2luOiAvW2EtejAtOVxcW1xcXV8tXSsvXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLz0vLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogL1xcYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xcYi9cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge2JlZ2luOiAvXFwkW1xcd1xcZFwiXVtcXHdcXGRfXSovfSxcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogL1xcJFxceyguKj8pfS99XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvKFtcXCtcXC1dKyk/W1xcZF0rX1tcXGRfXSsvXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhsanMuTlVNQkVSX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuXG4gIHZhciBGX0tFWVdPUkRTID0ge1xuICAgIGxpdGVyYWw6ICcuRmFsc2UuIC5UcnVlLicsXG4gICAga2V5d29yZDogJ2tpbmQgZG8gd2hpbGUgcHJpdmF0ZSBjYWxsIGludHJpbnNpYyB3aGVyZSBlbHNld2hlcmUgJyArXG4gICAgICAndHlwZSBlbmR0eXBlIGVuZG1vZHVsZSBlbmRzZWxlY3QgZW5kaW50ZXJmYWNlIGVuZCBlbmRkbyBlbmRpZiBpZiBmb3JhbGwgZW5kZm9yYWxsIG9ubHkgY29udGFpbnMgZGVmYXVsdCByZXR1cm4gc3RvcCB0aGVuICcgK1xuICAgICAgJ3B1YmxpYyBzdWJyb3V0aW5lfDEwIGZ1bmN0aW9uIHByb2dyYW0gLmFuZC4gLm9yLiAubm90LiAubGUuIC5lcS4gLmdlLiAuZ3QuIC5sdC4gJyArXG4gICAgICAnZ290byBzYXZlIGVsc2UgdXNlIG1vZHVsZSBzZWxlY3QgY2FzZSAnICtcbiAgICAgICdhY2Nlc3MgYmxhbmsgZGlyZWN0IGV4aXN0IGZpbGUgZm10IGZvcm0gZm9ybWF0dGVkIGlvc3RhdCBuYW1lIG5hbWVkIG5leHRyZWMgbnVtYmVyIG9wZW5lZCByZWMgcmVjbCBzZXF1ZW50aWFsIHN0YXR1cyB1bmZvcm1hdHRlZCB1bml0ICcgK1xuICAgICAgJ2NvbnRpbnVlIGZvcm1hdCBwYXVzZSBjeWNsZSBleGl0ICcgK1xuICAgICAgJ2NfbnVsbF9jaGFyIGNfYWxlcnQgY19iYWNrc3BhY2UgY19mb3JtX2ZlZWQgZmx1c2ggd2FpdCBkZWNpbWFsIHJvdW5kIGlvbXNnICcgK1xuICAgICAgJ3N5bmNocm9ub3VzIG5vcGFzcyBub25fb3ZlcnJpZGFibGUgcGFzcyBwcm90ZWN0ZWQgdm9sYXRpbGUgYWJzdHJhY3QgZXh0ZW5kcyBpbXBvcnQgJyArXG4gICAgICAnbm9uX2ludHJpbnNpYyB2YWx1ZSBkZWZlcnJlZCBnZW5lcmljIGZpbmFsIGVudW1lcmF0b3IgY2xhc3MgYXNzb2NpYXRlIGJpbmQgZW51bSAnICtcbiAgICAgICdjX2ludCBjX3Nob3J0IGNfbG9uZyBjX2xvbmdfbG9uZyBjX3NpZ25lZF9jaGFyIGNfc2l6ZV90IGNfaW50OF90IGNfaW50MTZfdCBjX2ludDMyX3QgY19pbnQ2NF90IGNfaW50X2xlYXN0OF90IGNfaW50X2xlYXN0MTZfdCAnICtcbiAgICAgICdjX2ludF9sZWFzdDMyX3QgY19pbnRfbGVhc3Q2NF90IGNfaW50X2Zhc3Q4X3QgY19pbnRfZmFzdDE2X3QgY19pbnRfZmFzdDMyX3QgY19pbnRfZmFzdDY0X3QgY19pbnRtYXhfdCBDX2ludHB0cl90IGNfZmxvYXQgY19kb3VibGUgJyArXG4gICAgICAnY19sb25nX2RvdWJsZSBjX2Zsb2F0X2NvbXBsZXggY19kb3VibGVfY29tcGxleCBjX2xvbmdfZG91YmxlX2NvbXBsZXggY19ib29sIGNfY2hhciBjX251bGxfcHRyIGNfbnVsbF9mdW5wdHIgJyArXG4gICAgICAnY19uZXdfbGluZSBjX2NhcnJpYWdlX3JldHVybiBjX2hvcml6b250YWxfdGFiIGNfdmVydGljYWxfdGFiIGlzb19jX2JpbmRpbmcgY19sb2MgY19mdW5sb2MgY19hc3NvY2lhdGVkICBjX2ZfcG9pbnRlciAnICtcbiAgICAgICdjX3B0ciBjX2Z1bnB0ciBpc29fZm9ydHJhbl9lbnYgY2hhcmFjdGVyX3N0b3JhZ2Vfc2l6ZSBlcnJvcl91bml0IGZpbGVfc3RvcmFnZV9zaXplIGlucHV0X3VuaXQgaW9zdGF0X2VuZCBpb3N0YXRfZW9yICcgK1xuICAgICAgJ251bWVyaWNfc3RvcmFnZV9zaXplIG91dHB1dF91bml0IGNfZl9wcm9jcG9pbnRlciBpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sICcgK1xuICAgICAgJ2llZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlIG5ld3VuaXQgY29udGlndW91cyByZWN1cnNpdmUgJyArXG4gICAgICAncGFkIHBvc2l0aW9uIGFjdGlvbiBkZWxpbSByZWFkd3JpdGUgZW9yIGFkdmFuY2Ugbm1sIGludGVyZmFjZSBwcm9jZWR1cmUgbmFtZWxpc3QgaW5jbHVkZSBzZXF1ZW5jZSBlbGVtZW50YWwgcHVyZSAnICtcbiAgICAgICdpbnRlZ2VyIHJlYWwgY2hhcmFjdGVyIGNvbXBsZXggbG9naWNhbCBkaW1lbnNpb24gYWxsb2NhdGFibGV8MTAgcGFyYW1ldGVyICcgK1xuICAgICAgJ2V4dGVybmFsIGltcGxpY2l0fDEwIG5vbmUgZG91YmxlIHByZWNpc2lvbiBhc3NpZ24gaW50ZW50IG9wdGlvbmFsIHBvaW50ZXIgJyArXG4gICAgICAndGFyZ2V0IGluIG91dCBjb21tb24gZXF1aXZhbGVuY2UgZGF0YSAnICtcbiAgICAgIC8vIElSUEY5MCBzcGVjaWFsIGtleXdvcmRzXG4gICAgICAnYmVnaW5fcHJvdmlkZXIgJmJlZ2luX3Byb3ZpZGVyIGVuZF9wcm92aWRlciBiZWdpbl9zaGVsbCBlbmRfc2hlbGwgYmVnaW5fdGVtcGxhdGUgZW5kX3RlbXBsYXRlIHN1YnN0IGFzc2VydCB0b3VjaCAnICtcbiAgICAgICdzb2Z0X3RvdWNoIHByb3ZpZGUgbm9fZGVwIGZyZWUgaXJwX2lmIGlycF9lbHNlIGlycF9lbmRpZiBpcnBfd3JpdGUgaXJwX3JlYWQnLFxuICAgIGJ1aWx0X2luOiAnYWxvZyBhbG9nMTAgYW1heDAgYW1heDEgYW1pbjAgYW1pbjEgYW1vZCBjYWJzIGNjb3MgY2V4cCBjbG9nIGNzaW4gY3NxcnQgZGFicyBkYWNvcyBkYXNpbiBkYXRhbiBkYXRhbjIgZGNvcyBkY29zaCBkZGltIGRleHAgZGludCAnICtcbiAgICAgICdkbG9nIGRsb2cxMCBkbWF4MSBkbWluMSBkbW9kIGRuaW50IGRzaWduIGRzaW4gZHNpbmggZHNxcnQgZHRhbiBkdGFuaCBmbG9hdCBpYWJzIGlkaW0gaWRpbnQgaWRuaW50IGlmaXggaXNpZ24gbWF4MCBtYXgxIG1pbjAgbWluMSBzbmdsICcgK1xuICAgICAgJ2FsZ2FtYSBjZGFicyBjZGNvcyBjZGV4cCBjZGxvZyBjZHNpbiBjZHNxcnQgY3FhYnMgY3Fjb3MgY3FleHAgY3Fsb2cgY3FzaW4gY3FzcXJ0IGRjbXBseCBkY29uamcgZGVyZiBkZXJmYyBkZmxvYXQgZGdhbW1hIGRpbWFnIGRsZ2FtYSAnICtcbiAgICAgICdpcWludCBxYWJzIHFhY29zIHFhc2luIHFhdGFuIHFhdGFuMiBxY21wbHggcWNvbmpnIHFjb3MgcWNvc2ggcWRpbSBxZXJmIHFlcmZjIHFleHAgcWdhbW1hIHFpbWFnIHFsZ2FtYSBxbG9nIHFsb2cxMCBxbWF4MSBxbWluMSBxbW9kICcgK1xuICAgICAgJ3FuaW50IHFzaWduIHFzaW4gcXNpbmggcXNxcnQgcXRhbiBxdGFuaCBhYnMgYWNvcyBhaW1hZyBhaW50IGFuaW50IGFzaW4gYXRhbiBhdGFuMiBjaGFyIGNtcGx4IGNvbmpnIGNvcyBjb3NoIGV4cCBpY2hhciBpbmRleCBpbnQgbG9nICcgK1xuICAgICAgJ2xvZzEwIG1heCBtaW4gbmludCBzaWduIHNpbiBzaW5oIHNxcnQgdGFuIHRhbmggcHJpbnQgd3JpdGUgZGltIGxnZSBsZ3QgbGxlIGxsdCBtb2QgbnVsbGlmeSBhbGxvY2F0ZSBkZWFsbG9jYXRlICcgK1xuICAgICAgJ2FkanVzdGwgYWRqdXN0ciBhbGwgYWxsb2NhdGVkIGFueSBhc3NvY2lhdGVkIGJpdF9zaXplIGJ0ZXN0IGNlaWxpbmcgY291bnQgY3NoaWZ0IGRhdGVfYW5kX3RpbWUgZGlnaXRzIGRvdF9wcm9kdWN0ICcgK1xuICAgICAgJ2Vvc2hpZnQgZXBzaWxvbiBleHBvbmVudCBmbG9vciBmcmFjdGlvbiBodWdlIGlhbmQgaWJjbHIgaWJpdHMgaWJzZXQgaWVvciBpb3IgaXNoZnQgaXNoZnRjIGxib3VuZCBsZW5fdHJpbSBtYXRtdWwgJyArXG4gICAgICAnbWF4ZXhwb25lbnQgbWF4bG9jIG1heHZhbCBtZXJnZSBtaW5leHBvbmVudCBtaW5sb2MgbWludmFsIG1vZHVsbyBtdmJpdHMgbmVhcmVzdCBwYWNrIHByZXNlbnQgcHJvZHVjdCAnICtcbiAgICAgICdyYWRpeCByYW5kb21fbnVtYmVyIHJhbmRvbV9zZWVkIHJhbmdlIHJlcGVhdCByZXNoYXBlIHJyc3BhY2luZyBzY2FsZSBzY2FuIHNlbGVjdGVkX2ludF9raW5kIHNlbGVjdGVkX3JlYWxfa2luZCAnICtcbiAgICAgICdzZXRfZXhwb25lbnQgc2hhcGUgc2l6ZSBzcGFjaW5nIHNwcmVhZCBzdW0gc3lzdGVtX2Nsb2NrIHRpbnkgdHJhbnNwb3NlIHRyaW0gdWJvdW5kIHVucGFjayB2ZXJpZnkgYWNoYXIgaWFjaGFyIHRyYW5zZmVyICcgK1xuICAgICAgJ2RibGUgZW50cnkgZHByb2QgY3B1X3RpbWUgY29tbWFuZF9hcmd1bWVudF9jb3VudCBnZXRfY29tbWFuZCBnZXRfY29tbWFuZF9hcmd1bWVudCBnZXRfZW52aXJvbm1lbnRfdmFyaWFibGUgaXNfaW9zdGF0X2VuZCAnICtcbiAgICAgICdpZWVlX2FyaXRobWV0aWMgaWVlZV9zdXBwb3J0X3VuZGVyZmxvd19jb250cm9sIGllZWVfZ2V0X3VuZGVyZmxvd19tb2RlIGllZWVfc2V0X3VuZGVyZmxvd19tb2RlICcgK1xuICAgICAgJ2lzX2lvc3RhdF9lb3IgbW92ZV9hbGxvYyBuZXdfbGluZSBzZWxlY3RlZF9jaGFyX2tpbmQgc2FtZV90eXBlX2FzIGV4dGVuZHNfdHlwZV9vZicgICtcbiAgICAgICdhY29zaCBhc2luaCBhdGFuaCBiZXNzZWxfajAgYmVzc2VsX2oxIGJlc3NlbF9qbiBiZXNzZWxfeTAgYmVzc2VsX3kxIGJlc3NlbF95biBlcmYgZXJmYyBlcmZjX3NjYWxlZCBnYW1tYSBsb2dfZ2FtbWEgaHlwb3Qgbm9ybTIgJyArXG4gICAgICAnYXRvbWljX2RlZmluZSBhdG9taWNfcmVmIGV4ZWN1dGVfY29tbWFuZF9saW5lIGxlYWR6IHRyYWlseiBzdG9yYWdlX3NpemUgbWVyZ2VfYml0cyAnICtcbiAgICAgICdiZ2UgYmd0IGJsZSBibHQgZHNoaWZ0bCBkc2hpZnRyIGZpbmRsb2MgaWFsbCBpYW55IGlwYXJpdHkgaW1hZ2VfaW5kZXggbGNvYm91bmQgdWNvYm91bmQgbWFza2wgbWFza3IgJyArXG4gICAgICAnbnVtX2ltYWdlcyBwYXJpdHkgcG9wY250IHBvcHBhciBzaGlmdGEgc2hpZnRsIHNoaWZ0ciB0aGlzX2ltYWdlICcgK1xuICAgICAgLy8gSVJQRjkwIHNwZWNpYWwgYnVpbHRfaW5zXG4gICAgICAnSVJQX0FMSUdOIGlycF9oZXJlJ1xuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6IEZfS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtjbGFzc05hbWU6ICdzdHJpbmcnLCByZWxldmFuY2U6IDB9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnc3RyaW5nJywgcmVsZXZhbmNlOiAwfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N1YnJvdXRpbmUgZnVuY3Rpb24gcHJvZ3JhbScsXG4gICAgICAgIGlsbGVnYWw6ICdbJHs9XFxcXG5dJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnIScsICckJywge3JlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5DT01NRU5UKCdiZWdpbl9kb2MnLCAnZW5kX2RvYycsIHtyZWxldmFuY2U6IDEwfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnKD89XFxcXGJ8XFxcXCt8XFxcXC18XFxcXC4pKD89XFxcXC5cXFxcZHxcXFxcZCkoPzpcXFxcZCspPyg/OlxcXFwuP1xcXFxkKikoPzpbZGVdWystXT9cXFxcZCspP1xcXFxiXFxcXC4/JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEpBVkFfSURFTlRfUkUgPSAnW1xcdTAwQzAtXFx1MDJCOGEtekEtWl8kXVtcXHUwMEMwLVxcdTAyQjhhLXpBLVpfJDAtOV0qJztcbiAgdmFyIEdFTkVSSUNfSURFTlRfUkUgPSBKQVZBX0lERU5UX1JFICsgJyg8JyArIEpBVkFfSURFTlRfUkUgKyAnKFxcXFxzKixcXFxccyonICsgSkFWQV9JREVOVF9SRSArICcpKj4pPyc7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2ZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgJyArXG4gICAgJ2ZvciB0cnVlIHdoaWxlIGxvbmcgc3RyaWN0ZnAgZmluYWxseSBwcm90ZWN0ZWQgaW1wb3J0IG5hdGl2ZSBmaW5hbCB2b2lkICcgK1xuICAgICdlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCAnICtcbiAgICAncGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUgJyArXG4gICAgJ21vZHVsZSByZXF1aXJlcyBleHBvcnRzIGRvJztcblxuICAvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvNy9kb2NzL3RlY2hub3Rlcy9ndWlkZXMvbGFuZ3VhZ2UvdW5kZXJzY29yZXMtbGl0ZXJhbHMuaHRtbFxuICB2YXIgSkFWQV9OVU1CRVJfUkUgPSAnXFxcXGInICtcbiAgICAnKCcgK1xuICAgICAgJzBbYkJdKFswMV0rWzAxX10rWzAxXSt8WzAxXSspJyArIC8vIDBiLi4uXG4gICAgICAnfCcgK1xuICAgICAgJzBbeFhdKFthLWZBLUYwLTldK1thLWZBLUYwLTlfXStbYS1mQS1GMC05XSt8W2EtZkEtRjAtOV0rKScgKyAvLyAweC4uLlxuICAgICAgJ3wnICtcbiAgICAgICcoJyArXG4gICAgICAgICcoW1xcXFxkXStbXFxcXGRfXStbXFxcXGRdK3xbXFxcXGRdKykoXFxcXC4oW1xcXFxkXStbXFxcXGRfXStbXFxcXGRdK3xbXFxcXGRdKykpPycgK1xuICAgICAgICAnfCcgK1xuICAgICAgICAnXFxcXC4oW1xcXFxkXStbXFxcXGRfXStbXFxcXGRdK3xbXFxcXGRdKyknICtcbiAgICAgICcpJyArXG4gICAgICAnKFtlRV1bLStdP1xcXFxkKyk/JyArIC8vIG9jdGFsLCBkZWNpbWFsLCBmbG9hdFxuICAgICcpJyArXG4gICAgJ1tsTGZGXT8nO1xuICB2YXIgSkFWQV9OVU1CRVJfTU9ERSA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIGJlZ2luOiBKQVZBX05VTUJFUl9SRSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnanNwJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC88XFwvfCMvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gZWF0IHVwIEAncyBpbiBlbWFpbHMgdG8gcHJldmVudCB0aGVtIHRvIGJlIHJlY29nbml6ZWQgYXMgZG9jdGFnc1xuICAgICAgICAgICAgICBiZWdpbjogL1xcdytALywgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW4gOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAvW3s7PV0vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogJ2NsYXNzIGludGVyZmFjZScsXG4gICAgICAgIGlsbGVnYWw6IC9bOlwiXFxbXFxdXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBFeHByZXNzaW9uIGtleXdvcmRzIHByZXZlbnQgJ2tleXdvcmQgTmFtZSguLi4pJyBmcm9tIGJlaW5nXG4gICAgICAgIC8vIHJlY29nbml6ZWQgYXMgYSBmdW5jdGlvbiBkZWZpbml0aW9uXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduZXcgdGhyb3cgcmV0dXJuIGVsc2UnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICcoJyArIEdFTkVSSUNfSURFTlRfUkUgKyAnXFxcXHMrKSsnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKlxcXFwoJywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogL1t7Oz1dLyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBKQVZBX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbQS1aYS16JF9dWzAtOUEtWmEteiRfXSonO1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdpbiBvZiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggJyArXG4gICAgICAnaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSAnICtcbiAgICAgICdsZXQgeWllbGQgY29uc3QgZXhwb3J0IHN1cGVyIGRlYnVnZ2VyIGFzIGFzeW5jIGF3YWl0IHN0YXRpYyAnICtcbiAgICAgIC8vIEVDTUFTY3JpcHQgNiBtb2R1bGVzIGltcG9ydFxuICAgICAgJ2ltcG9ydCBmcm9tIGFzJ1xuICAgICxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5JyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdldmFsIGlzRmluaXRlIGlzTmFOIHBhcnNlRmxvYXQgcGFyc2VJbnQgZGVjb2RlVVJJIGRlY29kZVVSSUNvbXBvbmVudCAnICtcbiAgICAgICdlbmNvZGVVUkkgZW5jb2RlVVJJQ29tcG9uZW50IGVzY2FwZSB1bmVzY2FwZSBPYmplY3QgRnVuY3Rpb24gQm9vbGVhbiBFcnJvciAnICtcbiAgICAgICdFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgJyArXG4gICAgICAnVHlwZUVycm9yIFVSSUVycm9yIE51bWJlciBNYXRoIERhdGUgU3RyaW5nIFJlZ0V4cCBBcnJheSBGbG9hdDMyQXJyYXkgJyArXG4gICAgICAnRmxvYXQ2NEFycmF5IEludDE2QXJyYXkgSW50MzJBcnJheSBJbnQ4QXJyYXkgVWludDE2QXJyYXkgVWludDMyQXJyYXkgJyArXG4gICAgICAnVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgJyArXG4gICAgICAnbW9kdWxlIGNvbnNvbGUgd2luZG93IGRvY3VtZW50IFN5bWJvbCBTZXQgTWFwIFdlYWtTZXQgV2Vha01hcCBQcm94eSBSZWZsZWN0ICcgK1xuICAgICAgJ1Byb21pc2UnXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUztcbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMFtiQl1bMDFdKyknIH0sXG4gICAgICB7IGJlZ2luOiAnXFxcXGIoMFtvT11bMC03XSspJyB9LFxuICAgICAgeyBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSB9XG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXSAgLy8gZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgVEVNUExBVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFNVQlNUXG4gICAgXVxuICB9O1xuICBTVUJTVC5jb250YWlucyA9IFtcbiAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgTlVNQkVSLFxuICAgIGhsanMuUkVHRVhQX01PREVcbiAgXVxuICB2YXIgUEFSQU1TX0NPTlRBSU5TID0gU1VCU1QuY29udGFpbnMuY29uY2F0KFtcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERVxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnanMnLCAnanN4J10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2UgKHN0cmljdHxhc20pWydcIl0vXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eIyEvLCBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBURU1QTEFURV9TVFJJTkcsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgTlVNQkVSLFxuICAgICAgeyAvLyBvYmplY3QgYXR0ciBjb250YWluZXJcbiAgICAgICAgYmVnaW46IC9beyxdXFxzKi8sIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogSURFTlRfUkUgKyAnXFxcXHMqOicsIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgY29udGFpbnM6IFt7Y2xhc3NOYW1lOiAnYXR0cicsIGJlZ2luOiBJREVOVF9SRSwgcmVsZXZhbmNlOiAwfV1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgSURFTlRfUkUgKyAnKVxcXFxzKj0+JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgICBlbmQ6ICdcXFxccyo9PicsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogSURFTlRfUkVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiAvXFwoXFxzKlxcKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluczogUEFSQU1TX0NPTlRBSU5TXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IC8vIEU0WCAvIEpTWFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvKFxcL1xcdyt8XFx3K1xcLyk+LyxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogLzxcXHcrXFxzKlxcLz4vLCBza2lwOiB0cnVlfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAvPFxcdysvLCBlbmQ6IC8oXFwvXFx3K3xcXHcrXFwvKT4vLCBza2lwOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICAgICB7YmVnaW46IC88XFx3K1xccypcXC8+Lywgc2tpcDogdHJ1ZX0sXG4gICAgICAgICAgICAgICAgICAnc2VsZidcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogSURFTlRfUkV9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBQQVJBTVNfQ09OVEFJTlNcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkWyguXS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXIgZm9yIGEgcGF0dGVybiBjb21tb24gdG8gSlMgbGliczogYCQoc29tZXRoaW5nKWAgYW5kIGAkLnNvbWV0aGluZ2BcbiAgICAgIH0sXG4gICAgICBobGpzLk1FVEhPRF9HVUFSRCxcbiAgICAgIHsgLy8gRVM2IGNsYXNzXG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJywgZW5kOiAvW3s7PV0vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAvWzpcIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjb25zdHJ1Y3RvcicsIGVuZDogL1xcey8sIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jKD8hISkvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhsanMpIHtcbiAgdmFyIFBBUkFNID0ge1xuICAgIGJlZ2luOiAvW1xcdy1dKyAqPS8sIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW3tjbGFzc05hbWU6ICdhdHRyJywgYmVnaW46IC9bXFx3LV0rL31dXG4gIH07XG4gIHZhciBQQVJBTVNCTE9DSyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbUEFSQU1dLFxuICAgIHJlbGV2YW5jZSA6IDBcbiAgfTtcbiAgdmFyIE9QRVJBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW46IC86W1xcd1xcLS5dKy8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBQQVRIID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cXEIoKFtcXC8uXSlbXFx3XFwtLlxcLz1dKykrLyxcbiAgfTtcbiAgdmFyIENPTU1BTkRfUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46IC8tLVtcXHdcXC09XFwvXSsvLFxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnd2lsZGZseS1jbGknXSxcbiAgICBsZXhlbWVzOiAnW2EtelxcLV0rJyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2FsaWFzIGJhdGNoIGNkIGNsZWFyIGNvbW1hbmQgY29ubmVjdCBjb25uZWN0aW9uLWZhY3RvcnkgY29ubmVjdGlvbi1pbmZvIGRhdGEtc291cmNlIGRlcGxveSAnICtcbiAgICAgICdkZXBsb3ltZW50LWluZm8gZGVwbG95bWVudC1vdmVybGF5IGVjaG8gZWNoby1kbXIgaGVscCBoaXN0b3J5IGlmIGpkYmMtZHJpdmVyLWluZm8gam1zLXF1ZXVlfDIwIGptcy10b3BpY3wyMCBscyAnICtcbiAgICAgICdwYXRjaCBwd2QgcXVpdCByZWFkLWF0dHJpYnV0ZSByZWFkLW9wZXJhdGlvbiByZWxvYWQgcm9sbG91dC1wbGFuIHJ1bi1iYXRjaCBzZXQgc2h1dGRvd24gdHJ5IHVuYWxpYXMgJyArXG4gICAgICAndW5kZXBsb3kgdW5zZXQgdmVyc2lvbiB4YS1kYXRhLXNvdXJjZScsIC8vIG1vZHVsZVxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBDT01NQU5EX1BBUkFNUyxcbiAgICAgIE9QRVJBVElPTixcbiAgICAgIFBBVEgsXG4gICAgICBQQVJBTVNCTE9DS1xuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIExJVEVSQUxTID0ge2xpdGVyYWw6ICd0cnVlIGZhbHNlIG51bGwnfTtcbiAgdmFyIFRZUEVTID0gW1xuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgaGxqcy5DX05VTUJFUl9NT0RFXG4gIF07XG4gIHZhciBWQUxVRV9DT05UQUlORVIgPSB7XG4gICAgZW5kOiAnLCcsIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBUWVBFUyxcbiAgICBrZXl3b3JkczogTElURVJBTFNcbiAgfTtcbiAgdmFyIE9CSkVDVCA9IHtcbiAgICBiZWdpbjogJ3snLCBlbmQ6ICd9JyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyJyxcbiAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgfSxcbiAgICAgIGhsanMuaW5oZXJpdChWQUxVRV9DT05UQUlORVIsIHtiZWdpbjogLzovfSlcbiAgICBdLFxuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgdmFyIEFSUkFZID0ge1xuICAgIGJlZ2luOiAnXFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgY29udGFpbnM6IFtobGpzLmluaGVyaXQoVkFMVUVfQ09OVEFJTkVSKV0sIC8vIGluaGVyaXQgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyB0aGF0IG1ha2VzIHNoYXJlZCBtb2RlcyB3aXRoIGVuZHNXaXRoUGFyZW50IGNvbXBpbGUgb25seSB0aGUgZW5kaW5nIG9mIG9uZSBvZiB0aGUgcGFyZW50c1xuICAgIGlsbGVnYWw6ICdcXFxcUydcbiAgfTtcbiAgVFlQRVMuc3BsaWNlKFRZUEVTLmxlbmd0aCwgMCwgT0JKRUNULCBBUlJBWSk7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFRZUEVTLFxuICAgIGtleXdvcmRzOiBMSVRFUkFMUyxcbiAgICBpbGxlZ2FsOiAnXFxcXFMnXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICAvLyBTaW5jZSB0aGVyZSBhcmUgbnVtZXJvdXMgc3BlY2lhbCBuYW1lcyBpbiBKdWxpYSwgaXQgaXMgdG9vIG11Y2ggdHJvdWJsZVxuICAvLyB0byBtYWludGFpbiB0aGVtIGJ5IGhhbmQuIEhlbmNlIHRoZXNlIG5hbWVzIChpLmUuIGtleXdvcmRzLCBsaXRlcmFscyBhbmRcbiAgLy8gYnVpbHQtaW5zKSBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBKdWxpYSB2MC42IGl0c2VsZiB0aHJvdWdoXG4gIC8vIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBmb3IgZWFjaC5cblxuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgLy8gIyBrZXl3b3JkIGdlbmVyYXRvciwgbXVsdGktd29yZCBrZXl3b3JkcyBoYW5kbGVkIG1hbnVhbGx5IGJlbG93XG4gICAgLy8gZm9yZWFjaChwcmludGxuLCBbXCJpblwiLCBcImlzYVwiLCBcIndoZXJlXCJdKVxuICAgIC8vIGZvciBrdyBpbiBCYXNlLlJFUExDb21wbGV0aW9ucy5jb21wbGV0ZV9rZXl3b3JkKFwiXCIpXG4gICAgLy8gICAgIGlmICEoY29udGFpbnMoa3csIFwiIFwiKSB8fCBrdyA9PSBcInN0cnVjdFwiKVxuICAgIC8vICAgICAgICAgcHJpbnRsbihrdylcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAga2V5d29yZDpcbiAgICAgICdpbiBpc2Egd2hlcmUgJyArXG4gICAgICAnYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uICcgK1xuICAgICAgJ2dsb2JhbCBpZiBpbXBvcnQgaW1wb3J0YWxsIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoaWxlICcgK1xuICAgICAgLy8gbGVnYWN5LCB0byBiZSBkZXByZWNhdGVkIGluIHRoZSBuZXh0IHJlbGVhc2VcbiAgICAgICd0eXBlIGltbXV0YWJsZSBhYnN0cmFjdCBiaXRzdHlwZSB0eXBlYWxpYXMgJyxcblxuICAgIC8vICMgbGl0ZXJhbCBnZW5lcmF0b3JcbiAgICAvLyBwcmludGxuKFwidHJ1ZVwiKVxuICAgIC8vIHByaW50bG4oXCJmYWxzZVwiKVxuICAgIC8vIGZvciBuYW1lIGluIEJhc2UuUkVQTENvbXBsZXRpb25zLmNvbXBsZXRpb25zKFwiXCIsIDApWzFdXG4gICAgLy8gICAgIHRyeVxuICAgIC8vICAgICAgICAgdiA9IGV2YWwoU3ltYm9sKG5hbWUpKVxuICAgIC8vICAgICAgICAgaWYgISh2IGlzYSBGdW5jdGlvbiB8fCB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXIgfHwgdiBpc2EgTW9kdWxlIHx8IHYgaXNhIENvbG9uKVxuICAgIC8vICAgICAgICAgICAgIHByaW50bG4obmFtZSlcbiAgICAvLyAgICAgICAgIGVuZFxuICAgIC8vICAgICBlbmRcbiAgICAvLyBlbmRcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgJyArXG4gICAgICAnQVJHUyBDX05VTEwgRGV2TnVsbCBFTkRJQU5fQk9NIEVOViBJIEluZiBJbmYxNiBJbmYzMiBJbmY2NCBJbnNlcnRpb25Tb3J0IEpVTElBX0hPTUUgTE9BRF9QQVRIIE1lcmdlU29ydCAnICtcbiAgICAgICdOYU4gTmFOMTYgTmFOMzIgTmFONjQgUFJPR1JBTV9GSUxFIFF1aWNrU29ydCBSb3VuZERvd24gUm91bmRGcm9tWmVybyBSb3VuZE5lYXJlc3QgUm91bmROZWFyZXN0VGllc0F3YXkgJyArXG4gICAgICAnUm91bmROZWFyZXN0VGllc1VwIFJvdW5kVG9aZXJvIFJvdW5kVXAgU1RERVJSIFNURElOIFNURE9VVCBWRVJTSU9OIGNhdGFsYW4gZXwwIGV1fDAgZXVsZXJnYW1tYSBnb2xkZW4gaW0gJyArXG4gICAgICAnbm90aGluZyBwaSDOsyDPgCDPhiAnLFxuXG4gICAgLy8gIyBidWlsdF9pbiBnZW5lcmF0b3I6XG4gICAgLy8gZm9yIG5hbWUgaW4gQmFzZS5SRVBMQ29tcGxldGlvbnMuY29tcGxldGlvbnMoXCJcIiwgMClbMV1cbiAgICAvLyAgICAgdHJ5XG4gICAgLy8gICAgICAgICB2ID0gZXZhbChTeW1ib2wobmFtZSkpXG4gICAgLy8gICAgICAgICBpZiB2IGlzYSBUeXBlIHx8IHYgaXNhIFR5cGVWYXJcbiAgICAvLyAgICAgICAgICAgICBwcmludGxuKG5hbWUpXG4gICAgLy8gICAgICAgICBlbmRcbiAgICAvLyAgICAgZW5kXG4gICAgLy8gZW5kXG4gICAgYnVpbHRfaW46XG4gICAgICAnQU5ZIEFic3RyYWN0QXJyYXkgQWJzdHJhY3RDaGFubmVsIEFic3RyYWN0RmxvYXQgQWJzdHJhY3RNYXRyaXggQWJzdHJhY3RSTkcgQWJzdHJhY3RTZXJpYWxpemVyIEFic3RyYWN0U2V0ICcgK1xuICAgICAgJ0Fic3RyYWN0U3BhcnNlQXJyYXkgQWJzdHJhY3RTcGFyc2VNYXRyaXggQWJzdHJhY3RTcGFyc2VWZWN0b3IgQWJzdHJhY3RTdHJpbmcgQWJzdHJhY3RVbml0UmFuZ2UgQWJzdHJhY3RWZWNPck1hdCAnICtcbiAgICAgICdBYnN0cmFjdFZlY3RvciBBbnkgQXJndW1lbnRFcnJvciBBcnJheSBBc3NlcnRpb25FcnJvciBBc3NvY2lhdGl2ZSBCYXNlNjREZWNvZGVQaXBlIEJhc2U2NEVuY29kZVBpcGUgQmlkaWFnb25hbCAnK1xuICAgICAgJ0JpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0VmVjdG9yIEJvb2wgQm91bmRzRXJyb3IgQnVmZmVyU3RyZWFtIENhY2hpbmdQb29sIENhcHR1cmVkRXhjZXB0aW9uICcgK1xuICAgICAgJ0NhcnRlc2lhbkluZGV4IENhcnRlc2lhblJhbmdlIENjaGFyIENkb3VibGUgQ2Zsb2F0IENoYW5uZWwgQ2hhciBDaW50IENpbnRtYXhfdCBDbG9uZyBDbG9uZ2xvbmcgQ2x1c3Rlck1hbmFnZXIgJyArXG4gICAgICAnQ21kIENvZGVJbmZvIENvbG9uIENvbXBsZXggQ29tcGxleDEyOCBDb21wbGV4MzIgQ29tcGxleDY0IENvbXBvc2l0ZUV4Y2VwdGlvbiBDb25kaXRpb24gQ29uakFycmF5IENvbmpNYXRyaXggJyArXG4gICAgICAnQ29ualZlY3RvciBDcHRyZGlmZl90IENzaG9ydCBDc2l6ZV90IENzc2l6ZV90IENzdHJpbmcgQ3VjaGFyIEN1aW50IEN1aW50bWF4X3QgQ3Vsb25nIEN1bG9uZ2xvbmcgQ3VzaG9ydCBDd2NoYXJfdCAnICtcbiAgICAgICdDd3N0cmluZyBEYXRhVHlwZSBEYXRlIERhdGVGb3JtYXQgRGF0ZVRpbWUgRGVuc2VBcnJheSBEZW5zZU1hdHJpeCBEZW5zZVZlY09yTWF0IERlbnNlVmVjdG9yIERpYWdvbmFsIERpY3QgJyArXG4gICAgICAnRGltZW5zaW9uTWlzbWF0Y2ggRGltcyBEaXJlY3RJbmRleFN0cmluZyBEaXNwbGF5IERpdmlkZUVycm9yIERvbWFpbkVycm9yIEVPRkVycm9yIEVhY2hMaW5lIEVudW0gRW51bWVyYXRlICcgK1xuICAgICAgJ0Vycm9yRXhjZXB0aW9uIEV4Y2VwdGlvbiBFeHBvbmVudGlhbEJhY2tPZmYgRXhwciBGYWN0b3JpemF0aW9uIEZpbGVNb25pdG9yIEZsb2F0MTYgRmxvYXQzMiBGbG9hdDY0IEZ1bmN0aW9uICcgK1xuICAgICAgJ0Z1dHVyZSBHbG9iYWxSZWYgR290b05vZGUgSFRNTCBIZXJtaXRpYW4gSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElQQWRkciBJUHY0IElQdjYgSW5kZXhDYXJ0ZXNpYW4gSW5kZXhMaW5lYXIgJyArXG4gICAgICAnSW5kZXhTdHlsZSBJbmV4YWN0RXJyb3IgSW5pdEVycm9yIEludCBJbnQxMjggSW50MTYgSW50MzIgSW50NjQgSW50OCBJbnRTZXQgSW50ZWdlciBJbnRlcnJ1cHRFeGNlcHRpb24gJyArXG4gICAgICAnSW52YWxpZFN0YXRlRXhjZXB0aW9uIElycmF0aW9uYWwgS2V5RXJyb3IgTGFiZWxOb2RlIExpblNwYWNlIExpbmVOdW1iZXJOb2RlIExvYWRFcnJvciBMb3dlclRyaWFuZ3VsYXIgTUlNRSBNYXRyaXggJyArXG4gICAgICAnTWVyc2VubmVUd2lzdGVyIE1ldGhvZCBNZXRob2RFcnJvciBNZXRob2RUYWJsZSBNb2R1bGUgTlR1cGxlIE5ld3Zhck5vZGUgTnVsbEV4Y2VwdGlvbiBOdWxsYWJsZSBOdW1iZXIgT2JqZWN0SWREaWN0ICcgK1xuICAgICAgJ09yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJzZUVycm9yIFBhcnRpYWxRdWlja1NvcnQgUGVybXV0ZWREaW1zQXJyYXkgUGlwZSAnICtcbiAgICAgICdQb2xsaW5nRmlsZVdhdGNoZXIgUHJvY2Vzc0V4aXRlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhbmRvbURldmljZSBSYW5nZSBSYW5nZUluZGV4IFJhdGlvbmFsIFJhd0ZEICcgK1xuICAgICAgJ1JlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJlbW90ZUNoYW5uZWwgUmVtb3RlRXhjZXB0aW9uIFJldlN0cmluZyBSb3VuZGluZ01vZGUgJyArXG4gICAgICAnUm93VmVjdG9yIFNTQVZhbHVlIFNlZ21lbnRhdGlvbkZhdWx0IFNlcmlhbGl6YXRpb25TdGF0ZSBTZXQgU2hhcmVkQXJyYXkgU2hhcmVkTWF0cml4IFNoYXJlZFZlY3RvciBTaWduZWQgJyArXG4gICAgICAnU2ltcGxlVmVjdG9yIFNsb3QgU2xvdE51bWJlciBTcGFyc2VNYXRyaXhDU0MgU3BhcnNlVmVjdG9yIFN0YWNrRnJhbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0YWNrVHJhY2UgU3RlcFJhbmdlICcgK1xuICAgICAgJ1N0ZXBSYW5nZUxlbiBTdHJpZGVkQXJyYXkgU3RyaWRlZE1hdHJpeCBTdHJpZGVkVmVjT3JNYXQgU3RyaWRlZFZlY3RvciBTdHJpbmcgU3ViQXJyYXkgU3ViU3RyaW5nIFN5bVRyaWRpYWdvbmFsICcgK1xuICAgICAgJ1N5bWJvbCBTeW1tZXRyaWMgU3lzdGVtRXJyb3IgVENQU29ja2V0IFRhc2sgVGV4dCBUZXh0RGlzcGxheSBUaW1lciBUcmlkaWFnb25hbCBUdXBsZSBUeXBlIFR5cGVFcnJvciBUeXBlTWFwRW50cnkgJyArXG4gICAgICAnVHlwZU1hcExldmVsIFR5cGVOYW1lIFR5cGVWYXIgVHlwZWRTbG90IFVEUFNvY2tldCBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZSZWZFcnJvciBVbmRlZlZhckVycm9yICcgK1xuICAgICAgJ1VuaWNvZGVFcnJvciBVbmlmb3JtU2NhbGluZyBVbmlvbiBVbmlvbkFsbCBVbml0UmFuZ2UgVW5zaWduZWQgVXBwZXJUcmlhbmd1bGFyIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgJyArXG4gICAgICAnVmVyc2lvbk51bWJlciBWb2lkIFdlYWtLZXlEaWN0IFdlYWtSZWYgV29ya2VyQ29uZmlnIFdvcmtlclBvb2wgJ1xuICB9O1xuXG4gIC8vIHJlZjogaHR0cDovL2p1bGlhLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvbWFudWFsL3ZhcmlhYmxlcy8jYWxsb3dlZC12YXJpYWJsZS1uYW1lc1xuICB2YXIgVkFSSUFCTEVfTkFNRV9SRSA9ICdbQS1aYS16X1xcXFx1MDBBMS1cXFxcdUZGRkZdW0EtWmEtel8wLTlcXFxcdTAwQTEtXFxcXHVGRkZGXSonO1xuXG4gIC8vIHBsYWNlaG9sZGVyIGZvciByZWN1cnNpdmUgc2VsZi1yZWZlcmVuY2VcbiAgdmFyIERFRkFVTFQgPSB7XG4gICAgbGV4ZW1lczogVkFSSUFCTEVfTkFNRV9SRSwga2V5d29yZHM6IEtFWVdPUkRTLCBpbGxlZ2FsOiAvPFxcLy9cbiAgfTtcblxuICAvLyByZWY6IGh0dHA6Ly9qdWxpYS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L21hbnVhbC9pbnRlZ2Vycy1hbmQtZmxvYXRpbmctcG9pbnQtbnVtYmVycy9cbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIC8vIHN1cHBvcnRlZCBudW1lcmljIGxpdGVyYWxzOlxuICAgIC8vICAqIGJpbmFyeSBsaXRlcmFsIChlLmcuIDB4MTApXG4gICAgLy8gICogb2N0YWwgbGl0ZXJhbCAoZS5nLiAwbzc2NTQzMjEwKVxuICAgIC8vICAqIGhleGFkZWNpbWFsIGxpdGVyYWwgKGUuZy4gMHhmZWRjYmE4NzY1NDMyMTApXG4gICAgLy8gICogaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbCAoZS5nLiAweDFwMCwgMHgxLjJwMilcbiAgICAvLyAgKiBkZWNpbWFsIGxpdGVyYWwgKGUuZy4gOTg3NjU0MzIxMCwgMTAwXzAwMF8wMDApXG4gICAgLy8gICogZmxvYXRpbmcgcG9pbnRlIGxpdGVyYWwgKGUuZy4gMS4yLCAxLjJmLCAuMiwgMS4sIDEuMmUxMCwgMS4yZS0xMClcbiAgICBiZWdpbjogLyhcXGIweFtcXGRfXSooXFwuW1xcZF9dKik/fDB4XFwuXFxkW1xcZF9dKilwWy0rXT9cXGQrfFxcYjBbYm94XVthLWZBLUYwLTldW2EtZkEtRjAtOV9dKnwoXFxiXFxkW1xcZF9dKihcXC5bXFxkX10qKT98XFwuXFxkW1xcZF9dKikoW2VFZkZdWy0rXT9cXGQrKT8vLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBDSEFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nKC58XFxcXFt4WHVVXVthLXpBLVowLTldKyknL1xuICB9O1xuXG4gIHZhciBJTlRFUlBPTEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcKC8sIGVuZDogL1xcKS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG5cbiAgdmFyIElOVEVSUE9MQVRFRF9WQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICdcXFxcJCcgKyBWQVJJQUJMRV9OQU1FX1JFXG4gIH07XG5cbiAgLy8gVE9ETzogbmVhdGx5IGVzY2FwZSBub3JtYWwgY29kZSBpbiBzdHJpbmcgbGl0ZXJhbFxuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIElOVEVSUE9MQVRJT04sIElOVEVSUE9MQVRFRF9WQVJJQUJMRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cXHcqXCJcIlwiLywgZW5kOiAvXCJcIlwiXFx3Ki8sIHJlbGV2YW5jZTogMTAgfSxcbiAgICAgIHsgYmVnaW46IC9cXHcqXCIvLCBlbmQ6IC9cIlxcdyovIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIENPTU1BTkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgSU5URVJQT0xBVElPTiwgSU5URVJQT0xBVEVEX1ZBUklBQkxFXSxcbiAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICB9O1xuXG4gIHZhciBNQUNST0NBTEwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdAJyArIFZBUklBQkxFX05BTUVfUkVcbiAgfTtcblxuICB2YXIgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJyM9JywgZW5kOiAnPSMnLCByZWxldmFuY2U6IDEwIH0sXG4gICAgICB7IGJlZ2luOiAnIycsIGVuZDogJyQnIH1cbiAgICBdXG4gIH07XG5cbiAgREVGQVVMVC5jb250YWlucyA9IFtcbiAgICBOVU1CRVIsXG4gICAgQ0hBUixcbiAgICBTVFJJTkcsXG4gICAgQ09NTUFORCxcbiAgICBNQUNST0NBTEwsXG4gICAgQ09NTUVOVCxcbiAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46XG4gICAgICAgICdcXFxcYigoKGFic3RyYWN0fHByaW1pdGl2ZSlcXFxccyspdHlwZXwobXV0YWJsZVxcXFxzKyk/c3RydWN0KVxcXFxiJ1xuICAgIH0sXG4gICAge2JlZ2luOiAvPDovfSAgLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgXTtcbiAgSU5URVJQT0xBVElPTi5jb250YWlucyA9IERFRkFVTFQuY29udGFpbnM7XG5cbiAgcmV0dXJuIERFRkFVTFQ7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15qdWxpYT4vLFxuICAgICAgICByZWxldmFuY2U6IDEwLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICAvLyBlbmQgdGhlIGhpZ2hsaWdodGluZyBpZiB3ZSBhcmUgb24gYSBuZXcgbGluZSBhbmQgdGhlIGxpbmUgZG9lcyBub3QgaGF2ZSBhdFxuICAgICAgICAgIC8vIGxlYXN0IHNpeCBzcGFjZXMgaW4gdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIGVuZDogL14oPyFbIF17Nn0pLyxcbiAgICAgICAgICBzdWJMYW5ndWFnZTogJ2p1bGlhJ1xuICAgICAgfSxcbiAgICAgIC8vIGpsZG9jdGVzdCBNYXJrZG93biBibG9ja3MgYXJlIHVzZWQgaW4gdGhlIEp1bGlhIG1hbnVhbCBhbmQgcGFja2FnZSBkb2NzIGluZGljYXRlXG4gICAgICAvLyBjb2RlIHNuaXBwZXRzIHRoYXQgc2hvdWxkIGJlIHZlcmlmaWVkIHdoZW4gdGhlIGRvY3VtZW50YXRpb24gaXMgYnVpbHQuIFRoZXkgY2FuIGJlXG4gICAgICAvLyBlaXRoZXIgUkVQTC1saWtlIG9yIHNjcmlwdC1saWtlLCBidXQgYXJlIHVzdWFsbHkgUkVQTC1saWtlIGFuZCB0aGVyZWZvcmUgd2UgYXBwbHlcbiAgICAgIC8vIGp1bGlhLXJlcGwgaGlnaGxpZ2h0aW5nIHRvIHRoZW0uIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIERvY3VtZW50ZXInc1xuICAgICAgLy8gbWFudWFsOiBodHRwczovL2p1bGlhZG9jcy5naXRodWIuaW8vRG9jdW1lbnRlci5qbC9sYXRlc3QvbWFuL2RvY3Rlc3RzLmh0bWxcbiAgICAgIGFsaWFzZXM6IFsnamxkb2N0ZXN0J11cbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2Fic3RyYWN0IGFzIHZhbCB2YXIgdmFyYXJnIGdldCBzZXQgY2xhc3Mgb2JqZWN0IG9wZW4gcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIG5vaW5saW5lICcgK1xuICAgICAgJ2Nyb3NzaW5saW5lIGR5bmFtaWMgZmluYWwgZW51bSBpZiBlbHNlIGRvIHdoaWxlIGZvciB3aGVuIHRocm93IHRyeSBjYXRjaCBmaW5hbGx5ICcgK1xuICAgICAgJ2ltcG9ydCBwYWNrYWdlIGlzIGluIGZ1biBvdmVycmlkZSBjb21wYW5pb24gcmVpZmllZCBpbmxpbmUgbGF0ZWluaXQgaW5pdCcgK1xuICAgICAgJ2ludGVyZmFjZSBhbm5vdGF0aW9uIGRhdGEgc2VhbGVkIGludGVybmFsIGluZml4IG9wZXJhdG9yIG91dCBieSBjb25zdHJ1Y3RvciBzdXBlciAnICtcbiAgICAgIC8vIHRvIGJlIGRlbGV0ZWQgc29vblxuICAgICAgJ3RyYWl0IHZvbGF0aWxlIHRyYW5zaWVudCBuYXRpdmUgZGVmYXVsdCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnQnl0ZSBTaG9ydCBDaGFyIEludCBMb25nIEJvb2xlYW4gRmxvYXQgRG91YmxlIFZvaWQgVW5pdCBOb3RoaW5nJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2UgbnVsbCdcbiAgfTtcbiAgdmFyIEtFWVdPUkRTX1dJVEhfTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXGIoYnJlYWt8Y29udGludWV8cmV0dXJufHRoaXMpXFxiLyxcbiAgICBzdGFydHM6IHtcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgIGJlZ2luOiAvQFxcdysvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG4gIHZhciBMQUJFTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLCBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ0AnXG4gIH07XG5cbiAgLy8gZm9yIHN0cmluZyB0ZW1wbGF0ZXNcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogJ1xcXFwkeycsIGVuZDogJ30nLCBjb250YWluczogW2hsanMuQVBPU19TVFJJTkdfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICB9O1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLCBiZWdpbjogJ1xcXFwkJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRVxuICB9O1xuICB2YXIgU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInLFxuICAgICAgICBjb250YWluczogW1ZBUklBQkxFLCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICAvLyBDYW4ndCB1c2UgYnVpbHQtaW4gbW9kZXMgZWFzaWx5LCBhcyB3ZSB3YW50IHRvIHVzZSBTVFJJTkcgaW4gdGhlIG1ldGFcbiAgICAgIC8vIGNvbnRleHQgYXMgJ21ldGEtc3RyaW5nJyBhbmQgdGhlcmUncyBubyBzeW50YXggdG8gcmVtb3ZlIGV4cGxpY2l0bHkgc2V0XG4gICAgICAvLyBjbGFzc05hbWVzIGluIGJ1aWx0LWluIG1vZGVzLlxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIicsXG4gICAgICAgIGlsbGVnYWw6IC9cXG4vLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEUsIFNVQlNUXVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICB2YXIgQU5OT1RBVElPTl9VU0VfU0lURSA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAKD86ZmlsZXxwcm9wZXJ0eXxmaWVsZHxnZXR8c2V0fHJlY2VpdmVyfHBhcmFtfHNldHBhcmFtfGRlbGVnYXRlKVxcXFxzKjooPzpcXFxccyonICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyk/J1xuICB9O1xuICB2YXIgQU5OT1RBVElPTiA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KFNUUklORywge2NsYXNzTmFtZTogJ21ldGEtc3RyaW5nJ30pXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnMgOiBbXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXCpcXFxcKicsXG4gICAgICAgICdcXFxcKi8nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlIDogMCxcbiAgICAgICAgICBjb250YWlucyA6IFt7XG4gICAgICAgICAgICBjbGFzc05hbWUgOiAnZG9jdGFnJyxcbiAgICAgICAgICAgIGJlZ2luIDogJ0BbQS1aYS16XSsnXG4gICAgICAgICAgfV1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBLRVlXT1JEU19XSVRIX0xBQkVMLFxuICAgICAgTEFCRUwsXG4gICAgICBBTk5PVEFUSU9OX1VTRV9TSVRFLFxuICAgICAgQU5OT1RBVElPTixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuJywgZW5kOiAnWyhdfCQnLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgICAgICBpbGxlZ2FsOiAvZnVuXFxzKyg8Lio+KT9bXlxcc1xcKF0rKFxccytbXlxcc1xcKF0rKVxccyo9LyxcbiAgICAgICAgcmVsZXZhbmNlOiA1LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMqXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgICAgIGJlZ2luOiAvPC8sIGVuZDogLz4vLCBrZXl3b3JkczogJ3JlaWZpZWQnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogLzovLCBlbmQ6IC9bPSxcXC9dLywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6ICd0eXBlJywgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRX0sXG4gICAgICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OX1VTRV9TSVRFLFxuICAgICAgICAgICAgICBBTk5PVEFUSU9OLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgdHJhaXQnLCBlbmQ6IC9bOlxceyhdfCQvLCAvLyByZW1vdmUgJ3RyYWl0JyB3aGVuIHJlbW92ZWQgZnJvbSBLRVlXT1JEU1xuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBpbGxlZ2FsOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ3B1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3Rvcid9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi8sIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogL1ssOl1cXHMqLywgZW5kOiAvWzxcXCgsXXwkLywgZXhjbHVkZUJlZ2luOiB0cnVlLCByZXR1cm5FbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFOTk9UQVRJT05fVVNFX1NJVEUsXG4gICAgICAgICAgQU5OT1RBVElPTlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IFwiXiMhL3Vzci9iaW4vZW52XCIsIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxuJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBMQVNTT19JREVOVF9SRSA9ICdbYS16QS1aX11bXFxcXHcuXSonO1xuICB2YXIgTEFTU09fQU5HTEVfUkUgPSAnPFxcXFw/KGxhc3NvKHNjcmlwdCk/fD0pJztcbiAgdmFyIExBU1NPX0NMT1NFX1JFID0gJ1xcXFxdfFxcXFw/Pic7XG4gIHZhciBMQVNTT19LRVlXT1JEUyA9IHtcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RydWUgZmFsc2Ugbm9uZSBtaW5pbWFsIGZ1bGwgYWxsIHZvaWQgYW5kIG9yIG5vdCAnICtcbiAgICAgICdidyBuYncgZXcgbmV3IGNuIG5jbiBsdCBsdGUgZ3QgZ3RlIGVxIG5lcSByeCBucnggZnQnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2FycmF5IGRhdGUgZGVjaW1hbCBkdXJhdGlvbiBpbnRlZ2VyIG1hcCBwYWlyIHN0cmluZyB0YWcgeG1sIG51bGwgJyArXG4gICAgICAnYm9vbGVhbiBieXRlcyBrZXl3b3JkIGxpc3QgbG9jYWxlIHF1ZXVlIHNldCBzdGFjayBzdGF0aWNhcnJheSAnICtcbiAgICAgICdsb2NhbCB2YXIgdmFyaWFibGUgZ2xvYmFsIGRhdGEgc2VsZiBpbmhlcml0ZWQgY3VycmVudGNhcHR1cmUgZ2l2ZW5ibG9jaycsXG4gICAga2V5d29yZDpcbiAgICAgICdjYWNoZSBkYXRhYmFzZV9uYW1lcyBkYXRhYmFzZV9zY2hlbWFuYW1lcyBkYXRhYmFzZV90YWJsZW5hbWVzICcgK1xuICAgICAgJ2RlZmluZV90YWcgZGVmaW5lX3R5cGUgZW1haWxfYmF0Y2ggZW5jb2RlX3NldCBodG1sX2NvbW1lbnQgaGFuZGxlICcgK1xuICAgICAgJ2hhbmRsZV9lcnJvciBoZWFkZXIgaWYgaW5saW5lIGl0ZXJhdGUgbGpheF90YXJnZXQgbGluayAnICtcbiAgICAgICdsaW5rX2N1cnJlbnRhY3Rpb24gbGlua19jdXJyZW50Z3JvdXAgbGlua19jdXJyZW50cmVjb3JkIGxpbmtfZGV0YWlsICcgK1xuICAgICAgJ2xpbmtfZmlyc3Rncm91cCBsaW5rX2ZpcnN0cmVjb3JkIGxpbmtfbGFzdGdyb3VwIGxpbmtfbGFzdHJlY29yZCAnICtcbiAgICAgICdsaW5rX25leHRncm91cCBsaW5rX25leHRyZWNvcmQgbGlua19wcmV2Z3JvdXAgbGlua19wcmV2cmVjb3JkIGxvZyAnICtcbiAgICAgICdsb29wIG5hbWVzcGFjZV91c2luZyBvdXRwdXRfbm9uZSBwb3J0YWwgcHJpdmF0ZSBwcm90ZWN0IHJlY29yZHMgJyArXG4gICAgICAncmVmZXJlciByZWZlcnJlciByZXBlYXRpbmcgcmVzdWx0c2V0IHJvd3Mgc2VhcmNoX2FyZ3MgJyArXG4gICAgICAnc2VhcmNoX2FyZ3VtZW50cyBzZWxlY3Qgc29ydF9hcmdzIHNvcnRfYXJndW1lbnRzIHRocmVhZF9hdG9taWMgJyArXG4gICAgICAndmFsdWVfbGlzdCB3aGlsZSBhYm9ydCBjYXNlIGVsc2UgZmFpbF9pZiBmYWlsX2lmbm90IGZhaWwgaWZfZW1wdHkgJyArXG4gICAgICAnaWZfZmFsc2UgaWZfbnVsbCBpZl90cnVlIGxvb3BfYWJvcnQgbG9vcF9jb250aW51ZSBsb29wX2NvdW50IHBhcmFtcyAnICtcbiAgICAgICdwYXJhbXNfdXAgcmV0dXJuIHJldHVybl92YWx1ZSBydW5fY2hpbGRyZW4gc29hcF9kZWZpbmV0YWcgJyArXG4gICAgICAnc29hcF9sYXN0cmVxdWVzdCBzb2FwX2xhc3RyZXNwb25zZSB0YWdfbmFtZSBhc2NlbmRpbmcgYXZlcmFnZSBieSAnICtcbiAgICAgICdkZWZpbmUgZGVzY2VuZGluZyBkbyBlcXVhbHMgZnJvemVuIGdyb3VwIGhhbmRsZV9mYWlsdXJlIGltcG9ydCBpbiAnICtcbiAgICAgICdpbnRvIGpvaW4gbGV0IG1hdGNoIG1heCBtaW4gb24gb3JkZXIgcGFyZW50IHByb3RlY3RlZCBwcm92aWRlIHB1YmxpYyAnICtcbiAgICAgICdyZXF1aXJlIHJldHVybmhvbWUgc2tpcCBzcGxpdF90aHJlYWQgc3VtIHRha2UgdGhyZWFkIHRvIHRyYWl0IHR5cGUgJyArXG4gICAgICAnd2hlcmUgd2l0aCB5aWVsZCB5aWVsZGhvbWUnXG4gIH07XG4gIHZhciBIVE1MX0NPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJzwhLS0nLFxuICAgICctLT4nLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIExBU1NPX05PUFJPQ0VTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ1xcXFxbbm9wcm9jZXNzXFxcXF0nLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kOiAnXFxcXFsvbm9wcm9jZXNzXFxcXF0nLFxuICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgfVxuICB9O1xuICB2YXIgTEFTU09fU1RBUlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdcXFxcWy9ub3Byb2Nlc3N8JyArIExBU1NPX0FOR0xFX1JFXG4gIH07XG4gIHZhciBMQVNTT19EQVRBTUVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICdcXCcnICsgTEFTU09fSURFTlRfUkUgKyAnXFwnJ1xuICB9O1xuICB2YXIgTEFTU09fQ09ERSA9IFtcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLCB7YmVnaW46IGhsanMuQ19OVU1CRVJfUkUgKyAnfCgtP2luZmluaXR5fE5hTilcXFxcYid9KSxcbiAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICBiZWdpbjogJ2AnLCBlbmQ6ICdgJ1xuICAgIH0sXG4gICAgeyAvLyB2YXJpYWJsZXNcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1sjJF0nICsgTEFTU09fSURFTlRfUkVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnIycsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgIGJlZ2luOiAnOjpcXFxccyonLCBlbmQ6IExBU1NPX0lERU5UX1JFLFxuICAgICAgaWxsZWdhbDogJ1xcXFxXJ1xuICAgIH0sXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJy0oPyFpbmZpbml0eSknICsgTEFTU09fSURFTlRfUkUsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJyhcXFxcLlxcXFwuXFxcXC4pJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogLygtPnxcXC4pXFxzKi8sXG4gICAgICByZWxldmFuY2U6IDAsXG4gICAgICBjb250YWluczogW0xBU1NPX0RBVEFNRU1CRVJdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJyxcbiAgICAgIHJldHVybkVuZDogdHJ1ZSwgZW5kOiAnXFxcXCh8PT4nLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBMQVNTT19JREVOVF9SRSArICcoPSg/IT4pKT98Wy0rKi8lXSg/IT4pJ30pXG4gICAgICBdXG4gICAgfVxuICBdO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbHMnLCAnbGFzc29zY3JpcHQnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IExBU1NPX0lERU5UX1JFICsgJ3wmW2xnXXQ7JyxcbiAgICBrZXl3b3JkczogTEFTU09fS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiBMQVNTT19DTE9TRV9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IHsgLy8gbWFya3VwXG4gICAgICAgICAgZW5kOiAnXFxcXFt8JyArIExBU1NPX0FOR0xFX1JFLFxuICAgICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtIVE1MX0NPTU1FTlRdXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBMQVNTT19OT1BST0NFU1MsXG4gICAgICBMQVNTT19TVEFSVCxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXFtub19zcXVhcmVfYnJhY2tldHMnLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmQ6ICdcXFxcWy9ub19zcXVhcmVfYnJhY2tldHNcXFxcXScsIC8vIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgbGFuZ3VhZ2VcbiAgICAgICAgICBsZXhlbWVzOiBMQVNTT19JREVOVF9SRSArICd8JltsZ110OycsXG4gICAgICAgICAga2V5d29yZHM6IExBU1NPX0tFWVdPUkRTLFxuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICAgICAgICBiZWdpbjogTEFTU09fQ0xPU0VfUkUsXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgICAgICAgZW5kOiAnXFxcXFtub3Byb2Nlc3NcXFxcXXwnICsgTEFTU09fQU5HTEVfUkUsXG4gICAgICAgICAgICAgICAgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRhaW5zOiBbSFRNTF9DT01NRU5UXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTEFTU09fTk9QUk9DRVNTLFxuICAgICAgICAgICAgTEFTU09fU1RBUlRcbiAgICAgICAgICBdLmNvbmNhdChMQVNTT19DT0RFKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxcWycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMhJywgZW5kOidsYXNzbzkkJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF0uY29uY2F0KExBU1NPX0NPREUpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgIGJlZ2luOiAnXmRuJywgZW5kOiAnOiAnLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBzdGFydHM6IHtlbmQ6ICckJywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHcnLCBlbmQ6ICc6ICcsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHN0YXJ0czoge2VuZDogJyQnLCByZWxldmFuY2U6IDB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgYmVnaW46ICdeLScsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGxqcykge1xuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW46ICcjKycgKyAnW0EtWmEtel8wLTldKicgKyAnXFxcXCgnLFxuICAgICAgICBlbmQ6JyB7JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zIDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgICAgYmVnaW46ICcjKydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgZW5kc1BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnXCInLFxuICAgICAgICAgICAgICAgIGVuZDogJ1wiJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGJlZ2luOiAnW0EtWmEtel9dW0EtWmEtel8wLTldKidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSAgICAgICAgPSAnW1xcXFx3LV0rJzsgLy8geWVzLCBMZXNzIGlkZW50aWZpZXJzIG1heSBiZWdpbiB3aXRoIGEgZGlnaXRcbiAgdmFyIElOVEVSUF9JREVOVF9SRSA9ICcoJyArIElERU5UX1JFICsgJ3xAeycgKyBJREVOVF9SRSArICd9KSc7XG5cbiAgLyogR2VuZXJpYyBNb2RlcyAqL1xuXG4gIHZhciBSVUxFUyA9IFtdLCBWQUxVRSA9IFtdOyAvLyBmb3J3YXJkIGRlZi4gZm9yIHJlY3Vyc2l2ZSBtb2Rlc1xuXG4gIHZhciBTVFJJTkdfTU9ERSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIHtcbiAgICAvLyBMZXNzIHN0cmluZ3MgYXJlIG5vdCBtdWx0aWxpbmUgKGFsc28gaW5jbHVkZSAnficgZm9yIG1vcmUgY29uc2lzdGVudCBjb2xvcmluZyBvZiBcImVzY2FwZWRcIiBzdHJpbmdzKVxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIGJlZ2luOiAnfj8nICsgYyArICcuKj8nICsgY1xuICB9O307XG5cbiAgdmFyIElERU5UX01PREUgPSBmdW5jdGlvbihuYW1lLCBiZWdpbiwgcmVsZXZhbmNlKSB7IHJldHVybiB7XG4gICAgY2xhc3NOYW1lOiBuYW1lLCBiZWdpbjogYmVnaW4sIHJlbGV2YW5jZTogcmVsZXZhbmNlXG4gIH07fTtcblxuICB2YXIgUEFSRU5TX01PREUgPSB7XG4gICAgLy8gdXNlZCBvbmx5IHRvIHByb3Blcmx5IGJhbGFuY2UgbmVzdGVkIHBhcmVucyBpbnNpZGUgbWl4aW4gY2FsbCwgZGVmLiBhcmcgbGlzdFxuICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsIGNvbnRhaW5zOiBWQUxVRSwgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLy8gZ2VuZXJpYyBMZXNzIGhpZ2hsaWdodGVyICh1c2VkIGFsbW9zdCBldmVyeXdoZXJlIGV4Y2VwdCBzZWxlY3RvcnMpOlxuICBWQUxVRS5wdXNoKFxuICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIFNUUklOR19NT0RFKFwiJ1wiKSxcbiAgICBTVFJJTkdfTU9ERSgnXCInKSxcbiAgICBobGpzLkNTU19OVU1CRVJfTU9ERSwgLy8gZml4bWU6IGl0IGRvZXMgbm90IGluY2x1ZGUgZG90IGZvciBudW1iZXJzIGxpa2UgLjVlbSA6KFxuICAgIHtcbiAgICAgIGJlZ2luOiAnKHVybHxkYXRhLXVyaSlcXFxcKCcsXG4gICAgICBzdGFydHM6IHtjbGFzc05hbWU6ICdzdHJpbmcnLCBlbmQ6ICdbXFxcXClcXFxcbl0nLCBleGNsdWRlRW5kOiB0cnVlfVxuICAgIH0sXG4gICAgSURFTlRfTU9ERSgnbnVtYmVyJywgJyNbMC05QS1GYS1mXStcXFxcYicpLFxuICAgIFBBUkVOU19NT0RFLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0BAPycgKyBJREVOVF9SRSwgMTApLFxuICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksXG4gICAgSURFTlRfTU9ERSgnYnVpbHRfaW4nLCAnfj9gW15gXSo/YCcpLCAvLyBpbmxpbmUgamF2YXNjcmlwdCAob3Igd2hhdGV2ZXIgaG9zdCBsYW5ndWFnZSkgKm11bHRpbGluZSogc3RyaW5nXG4gICAgeyAvLyBAbWVkaWEgZmVhdHVyZXMgKGl04oCZcyBoZXJlIHRvIG5vdCBkdXBsaWNhdGUgdGhpbmdzIGluIEFUX1JVTEVfTU9ERSB3aXRoIGV4dHJhIFBBUkVOU19NT0RFIG92ZXJyaWRpbmcpOlxuICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJywgYmVnaW46IElERU5UX1JFICsgJ1xcXFxzKjonLCBlbmQ6ICc6JywgcmV0dXJuQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgYmVnaW46ICchaW1wb3J0YW50J1xuICAgIH1cbiAgKTtcblxuICB2YXIgVkFMVUVfV0lUSF9SVUxFU0VUUyA9IFZBTFVFLmNvbmNhdCh7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfScsIGNvbnRhaW5zOiBSVUxFU1xuICB9KTtcblxuICB2YXIgTUlYSU5fR1VBUkRfTU9ERSA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnd2hlbicsIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbe2JlZ2luS2V5d29yZHM6ICdhbmQgbm90J31dLmNvbmNhdChWQUxVRSkgLy8gdXNpbmcgdGhpcyBmb3JtIHRvIG92ZXJyaWRlIFZBTFVF4oCZcyAnZnVuY3Rpb24nIG1hdGNoXG4gIH07XG5cbiAgLyogUnVsZS1MZXZlbCBNb2RlcyAqL1xuXG4gIHZhciBSVUxFX01PREUgPSB7XG4gICAgYmVnaW46IElOVEVSUF9JREVOVF9SRSArICdcXFxccyo6JywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogJ1s7fV0nLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICc6JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGlsbGVnYWw6ICdbPD0kXScsXG4gICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgIGNvbnRhaW5zOiBWQUxVRVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBBVF9SVUxFX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46ICdAKGltcG9ydHxtZWRpYXxjaGFyc2V0fGZvbnQtZmFjZXwoLVthLXpdKy0pP2tleWZyYW1lc3xzdXBwb3J0c3xkb2N1bWVudHxuYW1lc3BhY2V8cGFnZXx2aWV3cG9ydHxob3N0KVxcXFxiJyxcbiAgICBzdGFydHM6IHtlbmQ6ICdbO3t9XScsIHJldHVybkVuZDogdHJ1ZSwgY29udGFpbnM6IFZBTFVFLCByZWxldmFuY2U6IDB9XG4gIH07XG5cbiAgLy8gdmFyaWFibGUgZGVmaW5pdGlvbnMgYW5kIGNhbGxzXG4gIHZhciBWQVJfUlVMRV9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgLy8gdXNpbmcgbW9yZSBzdHJpY3QgcGF0dGVybiBmb3IgaGlnaGVyIHJlbGV2YW5jZSB0byBpbmNyZWFzZSBjaGFuY2VzIG9mIExlc3MgZGV0ZWN0aW9uLlxuICAgICAgLy8gdGhpcyBpcyAqdGhlIG9ubHkqIExlc3Mgc3BlY2lmaWMgc3RhdGVtZW50IHVzZWQgaW4gbW9zdCBvZiB0aGUgc291cmNlcywgc28uLi5cbiAgICAgIC8vICh3ZeKAmWxsIHN0aWxsIG9mdGVuIGxvb3NlIHRvIHRoZSBjc3MtcGFyc2VyIHVubGVzcyB0aGVyZSdzICcvLycgY29tbWVudCxcbiAgICAgIC8vIHNpbXBseSBiZWNhdXNlIDEgdmFyaWFibGUganVzdCBjYW4ndCBiZWF0IDk5IHByb3BlcnRpZXMgOilcbiAgICAgIHtiZWdpbjogJ0AnICsgSURFTlRfUkUgKyAnXFxcXHMqOicsIHJlbGV2YW5jZTogMTV9LFxuICAgICAge2JlZ2luOiAnQCcgKyBJREVOVF9SRX1cbiAgICBdLFxuICAgIHN0YXJ0czoge2VuZDogJ1s7fV0nLCByZXR1cm5FbmQ6IHRydWUsIGNvbnRhaW5zOiBWQUxVRV9XSVRIX1JVTEVTRVRTfVxuICB9O1xuXG4gIHZhciBTRUxFQ1RPUl9NT0RFID0ge1xuICAgIC8vIGZpcnN0IHBhcnNlIHVuYW1iaWd1b3VzIHNlbGVjdG9ycyAoaS5lLiB0aG9zZSBub3Qgc3RhcnRpbmcgd2l0aCB0YWcpXG4gICAgLy8gdGhlbiBmYWxsIGludG8gdGhlIHNjYXJ5IGxvb2thaGVhZC1kaXNjcmltaW5hdG9yIHZhcmlhbnQuXG4gICAgLy8gdGhpcyBtb2RlIGFsc28gaGFuZGxlcyBtaXhpbiBkZWZpbml0aW9ucyBhbmQgY2FsbHNcbiAgICB2YXJpYW50czogW3tcbiAgICAgIGJlZ2luOiAnW1xcXFwuIzomXFxcXFs+XScsIGVuZDogJ1s7e31dJyAgLy8gbWl4aW4gY2FsbHMgZW5kIHdpdGggJzsnXG4gICAgICB9LCB7XG4gICAgICBiZWdpbjogSU5URVJQX0lERU5UX1JFLCBlbmQ6ICd7J1xuICAgIH1dLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJldHVybkVuZDogICB0cnVlLFxuICAgIGlsbGVnYWw6ICdbPD1cXCckXCJdJyxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBNSVhJTl9HVUFSRF9NT0RFLFxuICAgICAgSURFTlRfTU9ERSgna2V5d29yZCcsICAnYWxsXFxcXGInKSxcbiAgICAgIElERU5UX01PREUoJ3ZhcmlhYmxlJywgJ0B7JyAgKyBJREVOVF9SRSArICd9JyksICAgICAvLyBvdGhlcndpc2UgaXTigJlzIGlkZW50aWZpZWQgYXMgdGFnXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgSU5URVJQX0lERU5UX1JFICsgJyU/JywgMCksIC8vICclJyBmb3IgbW9yZSBjb25zaXN0ZW50IGNvbG9yaW5nIG9mIEBrZXlmcmFtZXMgXCJ0YWdzXCJcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWlkJywgJyMnICsgSU5URVJQX0lERU5UX1JFKSxcbiAgICAgIElERU5UX01PREUoJ3NlbGVjdG9yLWNsYXNzJywgJ1xcXFwuJyArIElOVEVSUF9JREVOVF9SRSwgMCksXG4gICAgICBJREVOVF9NT0RFKCdzZWxlY3Rvci10YWcnLCAgJyYnLCAwKSxcbiAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci1hdHRyJywgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJ30sXG4gICAgICB7Y2xhc3NOYW1lOiAnc2VsZWN0b3ItcHNldWRvJywgYmVnaW46IC86KDopP1thLXpBLVowLTlcXF9cXC1cXCtcXChcXClcIicuXSsvfSxcbiAgICAgIHtiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLCBjb250YWluczogVkFMVUVfV0lUSF9SVUxFU0VUU30sIC8vIGFyZ3VtZW50IGxpc3Qgb2YgcGFyYW1ldHJpYyBtaXhpbnNcbiAgICAgIHtiZWdpbjogJyFpbXBvcnRhbnQnfSAvLyBlYXQgIWltcG9ydGFudCBhZnRlciBtaXhpbiBjYWxsIG9yIGl0IHdpbGwgYmUgY29sb3JlZCBhcyB0YWdcbiAgICBdXG4gIH07XG5cbiAgUlVMRVMucHVzaChcbiAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBBVF9SVUxFX01PREUsXG4gICAgVkFSX1JVTEVfTU9ERSxcbiAgICBSVUxFX01PREUsXG4gICAgU0VMRUNUT1JfTU9ERVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnWz0+XFwnLzwoJFwiXScsXG4gICAgY29udGFpbnM6IFJVTEVTXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTElTUF9JREVOVF9SRSA9ICdbYS16QS1aX1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcI11bYS16QS1aMC05X1xcXFwtXFxcXCtcXFxcKlxcXFwvXFxcXDxcXFxcPVxcXFw+XFxcXCZcXFxcIyFdKic7XG4gIHZhciBNRUNfUkUgPSAnXFxcXHxbXl0qP1xcXFx8JztcbiAgdmFyIExJU1BfU0lNUExFX05VTUJFUl9SRSA9ICcoXFxcXC18XFxcXCspP1xcXFxkKyhcXFxcLlxcXFxkK3xcXFxcL1xcXFxkKyk/KChkfGV8ZnxsfHN8RHxFfEZ8THxTKShcXFxcK3xcXFxcLSk/XFxcXGQrKT8nO1xuICB2YXIgU0hFQkFORyA9IHtcbiAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICBiZWdpbjogJ14jIScsIGVuZDogJyQnXG4gIH07XG4gIHZhciBMSVRFUkFMID0ge1xuICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgIGJlZ2luOiAnXFxcXGIodHsxfXxuaWwpXFxcXGInXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiBMSVNQX1NJTVBMRV9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMH0sXG4gICAgICB7YmVnaW46ICcjKGJ8QilbMC0xXSsoL1swLTFdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKG98TylbMC03XSsoL1swLTddKyk/J30sXG4gICAgICB7YmVnaW46ICcjKHh8WClbMC05YS1mQS1GXSsoL1swLTlhLWZBLUZdKyk/J30sXG4gICAgICB7YmVnaW46ICcjKGN8QylcXFxcKCcgKyBMSVNQX1NJTVBMRV9OVU1CRVJfUkUgKyAnICsnICsgTElTUF9TSU1QTEVfTlVNQkVSX1JFLCBlbmQ6ICdcXFxcKSd9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HID0gaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSk7XG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICc7JywgJyQnLFxuICAgIHtcbiAgICAgIHJlbGV2YW5jZTogMFxuICAgIH1cbiAgKTtcbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGJlZ2luOiAnXFxcXConLCBlbmQ6ICdcXFxcKidcbiAgfTtcbiAgdmFyIEtFWVdPUkQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1s6Jl0nICsgTElTUF9JREVOVF9SRVxuICB9O1xuICB2YXIgSURFTlQgPSB7XG4gICAgYmVnaW46IExJU1BfSURFTlRfUkUsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBNRUMgPSB7XG4gICAgYmVnaW46IE1FQ19SRVxuICB9O1xuICB2YXIgUVVPVEVEX0xJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICBjb250YWluczogWydzZWxmJywgTElURVJBTCwgU1RSSU5HLCBOVU1CRVIsIElERU5UXVxuICB9O1xuICB2YXIgUVVPVEVEID0ge1xuICAgIGNvbnRhaW5zOiBbTlVNQkVSLCBTVFJJTkcsIFZBUklBQkxFLCBLRVlXT1JELCBRVU9URURfTElTVCwgSURFTlRdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW1xcJ2BdXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXChxdW90ZSAnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGtleXdvcmRzOiB7bmFtZTogJ3F1b3RlJ31cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFwnJyArIE1FQ19SRVxuICAgICAgfVxuICAgIF1cbiAgfTtcbiAgdmFyIFFVT1RFRF9BVE9NID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICdcXCcnICsgTElTUF9JREVOVF9SRX0sXG4gICAgICB7YmVnaW46ICcjXFwnJyArIExJU1BfSURFTlRfUkUgKyAnKDo6JyArIExJU1BfSURFTlRfUkUgKyAnKSonfVxuICAgIF1cbiAgfTtcbiAgdmFyIExJU1QgPSB7XG4gICAgYmVnaW46ICdcXFxcKFxcXFxzKicsIGVuZDogJ1xcXFwpJ1xuICB9O1xuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgTElTVC5jb250YWlucyA9IFtcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtiZWdpbjogTElTUF9JREVOVF9SRX0sXG4gICAgICAgIHtiZWdpbjogTUVDX1JFfVxuICAgICAgXVxuICAgIH0sXG4gICAgQk9EWVxuICBdO1xuICBCT0RZLmNvbnRhaW5zID0gW1FVT1RFRCwgUVVPVEVEX0FUT00sIExJU1QsIExJVEVSQUwsIE5VTUJFUiwgU1RSSU5HLCBDT01NRU5ULCBWQVJJQUJMRSwgS0VZV09SRCwgTUVDLCBJREVOVF07XG5cbiAgcmV0dXJuIHtcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1xuICAgICAgTlVNQkVSLFxuICAgICAgU0hFQkFORyxcbiAgICAgIExJVEVSQUwsXG4gICAgICBTVFJJTkcsXG4gICAgICBDT01NRU5ULFxuICAgICAgUVVPVEVELFxuICAgICAgUVVPVEVEX0FUT00sXG4gICAgICBMSVNULFxuICAgICAgSURFTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgYmVnaW46ICdcXFxcYltndHBzXVtBLVpdK1tBLVphLXowLTlfXFxcXC1dKlxcXFxifFxcXFwkX1tBLVpdKycsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBDT01NRU5UX01PREVTID0gW1xuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICBobGpzLkNPTU1FTlQoJ1teOl0vLycsICckJylcbiAgXTtcbiAgdmFyIFRJVExFMSA9IGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAnXFxcXGJfKnJpZ1tBLVpdK1tBLVphLXowLTlfXFxcXC1dKid9LFxuICAgICAge2JlZ2luOiAnXFxcXGJfW2EtejAtOVxcXFwtXSsnfVxuICAgIF1cbiAgfSk7XG4gIHZhciBUSVRMRTIgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46ICdcXFxcYihbQS1aYS16MC05X1xcXFwtXSspXFxcXGInfSk7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICckX0NPT0tJRSAkX0ZJTEVTICRfR0VUICRfR0VUX0JJTkFSWSAkX0dFVF9SQVcgJF9QT1NUICRfUE9TVF9CSU5BUlkgJF9QT1NUX1JBVyAkX1NFU1NJT04gJF9TRVJWRVIgJyArXG4gICAgICAgICdjb2RlcG9pbnQgY29kZXBvaW50cyBzZWdtZW50IHNlZ21lbnRzIGNvZGV1bml0IGNvZGV1bml0cyBzZW50ZW5jZSBzZW50ZW5jZXMgdHJ1ZVdvcmQgdHJ1ZVdvcmRzIHBhcmFncmFwaCAnICtcbiAgICAgICAgJ2FmdGVyIGJ5dGUgYnl0ZXMgZW5nbGlzaCB0aGUgdW50aWwgaHR0cCBmb3JldmVyIGRlc2NlbmRpbmcgdXNpbmcgbGluZSByZWFsOCB3aXRoIHNldmVudGggJyArXG4gICAgICAgICdmb3Igc3Rkb3V0IGZpbmFsbHkgZWxlbWVudCB3b3JkIHdvcmRzIGZvdXJ0aCBiZWZvcmUgYmxhY2sgbmludGggc2l4dGggY2hhcmFjdGVycyBjaGFycyBzdGRlcnIgJyArXG4gICAgICAgICd1SW50MSB1SW50MXMgdUludDIgdUludDJzIHN0ZGluIHN0cmluZyBsaW5lcyByZWxhdGl2ZSByZWwgYW55IGZpZnRoIGl0ZW1zIGZyb20gbWlkZGxlIG1pZCAnICtcbiAgICAgICAgJ2F0IGVsc2Ugb2YgY2F0Y2ggdGhlbiB0aGlyZCBpdCBmaWxlIG1pbGxpc2Vjb25kcyBzZWNvbmRzIHNlY29uZCBzZWNzIHNlYyBpbnQxIGludDFzIGludDQgJyArXG4gICAgICAgICdpbnQ0cyBpbnRlcm5ldCBpbnQyIGludDJzIG5vcm1hbCB0ZXh0IGl0ZW0gbGFzdCBsb25nIGRldGFpbGVkIGVmZmVjdGl2ZSB1SW50NCB1SW50NHMgcmVwZWF0ICcgK1xuICAgICAgICAnZW5kIHJlcGVhdCBVUkwgaW4gdHJ5IGludG8gc3dpdGNoIHRvIHdvcmRzIGh0dHBzIHRva2VuIGJpbmZpbGUgZWFjaCB0ZW50aCBhcyB0aWNrcyB0aWNrICcgK1xuICAgICAgICAnc3lzdGVtIHJlYWw0IGJ5IGRhdGVJdGVtcyB3aXRob3V0IGNoYXIgY2hhcmFjdGVyIGFzY2VuZGluZyBlaWdodGggd2hvbGUgZGF0ZVRpbWUgbnVtZXJpYyBzaG9ydCAnICtcbiAgICAgICAgJ2ZpcnN0IGZ0cCBpbnRlZ2VyIGFiYnJldmlhdGVkIGFiYnIgYWJicmV2IHByaXZhdGUgY2FzZSB3aGlsZSBpZiAnICtcbiAgICAgICAgJ2RpdiBtb2Qgd3JhcCBhbmQgb3IgYml0QW5kIGJpdE5vdCBiaXRPciBiaXRYb3IgYW1vbmcgbm90IGluIGEgYW4gd2l0aGluICcgK1xuICAgICAgICAnY29udGFpbnMgZW5kcyB3aXRoIGJlZ2lucyB0aGUga2V5cyBvZiBrZXlzJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdTSVggVEVOIEZPUk1GRUVEIE5JTkUgWkVSTyBOT05FIFNQQUNFIEZPVVIgRkFMU0UgQ09MT04gQ1JMRiBQSSBDT01NQSBFTkRPRkZJTEUgRU9GIEVJR0hUIEZJVkUgJyArXG4gICAgICAgICdRVU9URSBFTVBUWSBPTkUgVFJVRSBSRVRVUk4gQ1IgTElORUZFRUQgUklHSFQgQkFDS1NMQVNIIE5VTEwgU0VWRU4gVEFCIFRIUkVFIFRXTyAnICtcbiAgICAgICAgJ3NpeCB0ZW4gZm9ybWZlZWQgbmluZSB6ZXJvIG5vbmUgc3BhY2UgZm91ciBmYWxzZSBjb2xvbiBjcmxmIHBpIGNvbW1hIGVuZG9mZmlsZSBlb2YgZWlnaHQgZml2ZSAnICtcbiAgICAgICAgJ3F1b3RlIGVtcHR5IG9uZSB0cnVlIHJldHVybiBjciBsaW5lZmVlZCByaWdodCBiYWNrc2xhc2ggbnVsbCBzZXZlbiB0YWIgdGhyZWUgdHdvICcgK1xuICAgICAgICAnUklWRVJTSU9OIFJJU1RBVEUgRklMRV9SRUFEX01PREUgRklMRV9XUklURV9NT0RFIEZJTEVfV1JJVEVfTU9ERSBESVJfV1JJVEVfTU9ERSBGSUxFX1JFQURfVU1BU0sgJyArXG4gICAgICAgICdGSUxFX1dSSVRFX1VNQVNLIERJUl9SRUFEX1VNQVNLIERJUl9XUklURV9VTUFTSycsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ3B1dCBhYnMgYWNvcyBhbGlhc1JlZmVyZW5jZSBhbm51aXR5IGFycmF5RGVjb2RlIGFycmF5RW5jb2RlIGFzaW4gYXRhbiBhdGFuMiBhdmVyYWdlIGF2ZyBhdmdEZXYgYmFzZTY0RGVjb2RlICcgK1xuICAgICAgICAnYmFzZTY0RW5jb2RlIGJhc2VDb252ZXJ0IGJpbmFyeURlY29kZSBiaW5hcnlFbmNvZGUgYnl0ZU9mZnNldCBieXRlVG9OdW0gY2FjaGVkVVJMIGNhY2hlZFVSTHMgY2hhclRvTnVtICcgK1xuICAgICAgICAnY2lwaGVyTmFtZXMgY29kZXBvaW50T2Zmc2V0IGNvZGVwb2ludFByb3BlcnR5IGNvZGVwb2ludFRvTnVtIGNvZGV1bml0T2Zmc2V0IGNvbW1hbmROYW1lcyBjb21wb3VuZCBjb21wcmVzcyAnICtcbiAgICAgICAgJ2NvbnN0YW50TmFtZXMgY29zIGRhdGUgZGF0ZUZvcm1hdCBkZWNvbXByZXNzIGRpcmVjdG9yaWVzICcgK1xuICAgICAgICAnZGlza1NwYWNlIEROU1NlcnZlcnMgZXhwIGV4cDEgZXhwMiBleHAxMCBleHRlbnRzIGZpbGVzIGZsdXNoRXZlbnRzIGZvbGRlcnMgZm9ybWF0IGZ1bmN0aW9uTmFtZXMgZ2VvbWV0cmljTWVhbiBnbG9iYWwgJyArXG4gICAgICAgICdnbG9iYWxzIGhhc01lbW9yeSBoYXJtb25pY01lYW4gaG9zdEFkZHJlc3MgaG9zdEFkZHJlc3NUb05hbWUgaG9zdE5hbWUgaG9zdE5hbWVUb0FkZHJlc3MgaXNOdW1iZXIgSVNPVG9NYWMgaXRlbU9mZnNldCAnICtcbiAgICAgICAgJ2tleXMgbGVuIGxlbmd0aCBsaWJVUkxFcnJvckRhdGEgbGliVXJsRm9ybURhdGEgbGliVVJMZnRwQ29tbWFuZCBsaWJVUkxMYXN0SFRUUEhlYWRlcnMgbGliVVJMTGFzdFJISGVhZGVycyAnICtcbiAgICAgICAgJ2xpYlVybE11bHRpcGFydEZvcm1BZGRQYXJ0IGxpYlVybE11bHRpcGFydEZvcm1EYXRhIGxpYlVSTFZlcnNpb24gbGluZU9mZnNldCBsbiBsbjEgbG9jYWxOYW1lcyBsb2cgbG9nMiBsb2cxMCAnICtcbiAgICAgICAgJ2xvbmdGaWxlUGF0aCBsb3dlciBtYWNUb0lTTyBtYXRjaENodW5rIG1hdGNoVGV4dCBtYXRyaXhNdWx0aXBseSBtYXggbWQ1RGlnZXN0IG1lZGlhbiBtZXJnZSBtaWxsaXNlYyAnICtcbiAgICAgICAgJ21pbGxpc2VjcyBtaWxsaXNlY29uZCBtaWxsaXNlY29uZHMgbWluIG1vbnRoTmFtZXMgbmF0aXZlQ2hhclRvTnVtIG5vcm1hbGl6ZVRleHQgbnVtIG51bWJlciBudW1Ub0J5dGUgbnVtVG9DaGFyICcgK1xuICAgICAgICAnbnVtVG9Db2RlcG9pbnQgbnVtVG9OYXRpdmVDaGFyIG9mZnNldCBvcGVuIG9wZW5maWxlcyBvcGVuUHJvY2Vzc2VzIG9wZW5Qcm9jZXNzSURzIG9wZW5Tb2NrZXRzICcgK1xuICAgICAgICAncGFyYWdyYXBoT2Zmc2V0IHBhcmFtQ291bnQgcGFyYW0gcGFyYW1zIHBlZXJBZGRyZXNzIHBlbmRpbmdNZXNzYWdlcyBwbGF0Zm9ybSBwb3BTdGREZXYgcG9wdWxhdGlvblN0YW5kYXJkRGV2aWF0aW9uICcgK1xuICAgICAgICAncG9wdWxhdGlvblZhcmlhbmNlIHBvcFZhcmlhbmNlIHByb2Nlc3NJRCByYW5kb20gcmFuZG9tQnl0ZXMgcmVwbGFjZVRleHQgcmVzdWx0IHJldkNyZWF0ZVhNTFRyZWUgcmV2Q3JlYXRlWE1MVHJlZUZyb21GaWxlICcgK1xuICAgICAgICAncmV2Q3VycmVudFJlY29yZCByZXZDdXJyZW50UmVjb3JkSXNGaXJzdCByZXZDdXJyZW50UmVjb3JkSXNMYXN0IHJldkRhdGFiYXNlQ29sdW1uQ291bnQgcmV2RGF0YWJhc2VDb2x1bW5Jc051bGwgJyArXG4gICAgICAgICdyZXZEYXRhYmFzZUNvbHVtbkxlbmd0aHMgcmV2RGF0YWJhc2VDb2x1bW5OYW1lcyByZXZEYXRhYmFzZUNvbHVtbk5hbWVkIHJldkRhdGFiYXNlQ29sdW1uTnVtYmVyZWQgJyArXG4gICAgICAgICdyZXZEYXRhYmFzZUNvbHVtblR5cGVzIHJldkRhdGFiYXNlQ29ubmVjdFJlc3VsdCByZXZEYXRhYmFzZUN1cnNvcnMgcmV2RGF0YWJhc2VJRCByZXZEYXRhYmFzZVRhYmxlTmFtZXMgJyArXG4gICAgICAgICdyZXZEYXRhYmFzZVR5cGUgcmV2RGF0YUZyb21RdWVyeSByZXZkYl9jbG9zZUN1cnNvciByZXZkYl9jb2x1bW5ieW51bWJlciByZXZkYl9jb2x1bW5jb3VudCByZXZkYl9jb2x1bW5pc251bGwgJyArXG4gICAgICAgICdyZXZkYl9jb2x1bW5sZW5ndGhzIHJldmRiX2NvbHVtbm5hbWVzIHJldmRiX2NvbHVtbnR5cGVzIHJldmRiX2NvbW1pdCByZXZkYl9jb25uZWN0IHJldmRiX2Nvbm5lY3Rpb25zICcgK1xuICAgICAgICAncmV2ZGJfY29ubmVjdGlvbmVyciByZXZkYl9jdXJyZW50cmVjb3JkIHJldmRiX2N1cnNvcmNvbm5lY3Rpb24gcmV2ZGJfY3Vyc29yZXJyIHJldmRiX2N1cnNvcnMgcmV2ZGJfZGJ0eXBlICcgK1xuICAgICAgICAncmV2ZGJfZGlzY29ubmVjdCByZXZkYl9leGVjdXRlIHJldmRiX2lzZW9mIHJldmRiX2lzYm9mIHJldmRiX21vdmVmaXJzdCByZXZkYl9tb3ZlbGFzdCByZXZkYl9tb3ZlbmV4dCAnICtcbiAgICAgICAgJ3JldmRiX21vdmVwcmV2IHJldmRiX3F1ZXJ5IHJldmRiX3F1ZXJ5bGlzdCByZXZkYl9yZWNvcmRjb3VudCByZXZkYl9yb2xsYmFjayByZXZkYl90YWJsZW5hbWVzICcgK1xuICAgICAgICAncmV2R2V0RGF0YWJhc2VEcml2ZXJQYXRoIHJldk51bWJlck9mUmVjb3JkcyByZXZPcGVuRGF0YWJhc2UgcmV2T3BlbkRhdGFiYXNlcyByZXZRdWVyeURhdGFiYXNlICcgK1xuICAgICAgICAncmV2UXVlcnlEYXRhYmFzZUJsb2IgcmV2UXVlcnlSZXN1bHQgcmV2UXVlcnlJc0F0U3RhcnQgcmV2UXVlcnlJc0F0RW5kIHJldlVuaXhGcm9tTWFjUGF0aCByZXZYTUxBdHRyaWJ1dGUgJyArXG4gICAgICAgICdyZXZYTUxBdHRyaWJ1dGVzIHJldlhNTEF0dHJpYnV0ZVZhbHVlcyByZXZYTUxDaGlsZENvbnRlbnRzIHJldlhNTENoaWxkTmFtZXMgcmV2WE1MQ3JlYXRlVHJlZUZyb21GaWxlV2l0aE5hbWVzcGFjZXMgJyArXG4gICAgICAgICdyZXZYTUxDcmVhdGVUcmVlV2l0aE5hbWVzcGFjZXMgcmV2WE1MRGF0YUZyb21YUGF0aFF1ZXJ5IHJldlhNTEV2YWx1YXRlWFBhdGggcmV2WE1MRmlyc3RDaGlsZCByZXZYTUxNYXRjaGluZ05vZGUgJyArXG4gICAgICAgICdyZXZYTUxOZXh0U2libGluZyByZXZYTUxOb2RlQ29udGVudHMgcmV2WE1MTnVtYmVyT2ZDaGlsZHJlbiByZXZYTUxQYXJlbnQgcmV2WE1MUHJldmlvdXNTaWJsaW5nICcgK1xuICAgICAgICAncmV2WE1MUm9vdE5vZGUgcmV2WE1MUlBDX0NyZWF0ZVJlcXVlc3QgcmV2WE1MUlBDX0RvY3VtZW50cyByZXZYTUxSUENfRXJyb3IgJyArXG4gICAgICAgICdyZXZYTUxSUENfR2V0SG9zdCByZXZYTUxSUENfR2V0TWV0aG9kIHJldlhNTFJQQ19HZXRQYXJhbSByZXZYTUxUZXh0IHJldlhNTFJQQ19FeGVjdXRlICcgK1xuICAgICAgICAncmV2WE1MUlBDX0dldFBhcmFtQ291bnQgcmV2WE1MUlBDX0dldFBhcmFtTm9kZSByZXZYTUxSUENfR2V0UGFyYW1UeXBlIHJldlhNTFJQQ19HZXRQYXRoIHJldlhNTFJQQ19HZXRQb3J0ICcgK1xuICAgICAgICAncmV2WE1MUlBDX0dldFByb3RvY29sIHJldlhNTFJQQ19HZXRSZXF1ZXN0IHJldlhNTFJQQ19HZXRSZXNwb25zZSByZXZYTUxSUENfR2V0U29ja2V0IHJldlhNTFRyZWUgJyArXG4gICAgICAgICdyZXZYTUxUcmVlcyByZXZYTUxWYWxpZGF0ZURURCByZXZaaXBEZXNjcmliZUl0ZW0gcmV2WmlwRW51bWVyYXRlSXRlbXMgcmV2WmlwT3BlbkFyY2hpdmVzIHJvdW5kIHNhbXBWYXJpYW5jZSAnICtcbiAgICAgICAgJ3NlYyBzZWNzIHNlY29uZHMgc2VudGVuY2VPZmZzZXQgc2hhMURpZ2VzdCBzaGVsbCBzaG9ydEZpbGVQYXRoIHNpbiBzcGVjaWFsRm9sZGVyUGF0aCBzcXJ0IHN0YW5kYXJkRGV2aWF0aW9uIHN0YXRSb3VuZCAnICtcbiAgICAgICAgJ3N0ZERldiBzdW0gc3lzRXJyb3Igc3lzdGVtVmVyc2lvbiB0YW4gdGVtcE5hbWUgdGV4dERlY29kZSB0ZXh0RW5jb2RlIHRpY2sgdGlja3MgdGltZSB0byB0b2tlbk9mZnNldCB0b0xvd2VyIHRvVXBwZXIgJyArXG4gICAgICAgICd0cmFuc3Bvc2UgdHJ1ZXdvcmRPZmZzZXQgdHJ1bmMgdW5pRGVjb2RlIHVuaUVuY29kZSB1cHBlciBVUkxEZWNvZGUgVVJMRW5jb2RlIFVSTFN0YXR1cyB1dWlkIHZhbHVlIHZhcmlhYmxlTmFtZXMgJyArXG4gICAgICAgICd2YXJpYW5jZSB2ZXJzaW9uIHdhaXREZXB0aCB3ZWVrZGF5TmFtZXMgd29yZE9mZnNldCB4c2x0QXBwbHlTdHlsZXNoZWV0IHhzbHRBcHBseVN0eWxlc2hlZXRGcm9tRmlsZSB4c2x0TG9hZFN0eWxlc2hlZXQgJyArXG4gICAgICAgICd4c2x0TG9hZFN0eWxlc2hlZXRGcm9tRmlsZSBhZGQgYnJlYWtwb2ludCBjYW5jZWwgY2xlYXIgbG9jYWwgdmFyaWFibGUgZmlsZSB3b3JkIGxpbmUgZm9sZGVyIGRpcmVjdG9yeSBVUkwgY2xvc2Ugc29ja2V0IHByb2Nlc3MgJyArXG4gICAgICAgICdjb21iaW5lIGNvbnN0YW50IGNvbnZlcnQgY3JlYXRlIG5ldyBhbGlhcyBmb2xkZXIgZGlyZWN0b3J5IGRlY3J5cHQgZGVsZXRlIHZhcmlhYmxlIHdvcmQgbGluZSBmb2xkZXIgJyArXG4gICAgICAgICdkaXJlY3RvcnkgVVJMIGRpc3BhdGNoIGRpdmlkZSBkbyBlbmNyeXB0IGZpbHRlciBnZXQgaW5jbHVkZSBpbnRlcnNlY3Qga2lsbCBsaWJVUkxEb3dubG9hZFRvRmlsZSAnICtcbiAgICAgICAgJ2xpYlVSTEZvbGxvd0h0dHBSZWRpcmVjdHMgbGliVVJMZnRwVXBsb2FkIGxpYlVSTGZ0cFVwbG9hZEZpbGUgbGliVVJMcmVzZXRBbGwgbGliVXJsU2V0QXV0aENhbGxiYWNrICcgK1xuICAgICAgICAnbGliVVJMU2V0Q3VzdG9tSFRUUEhlYWRlcnMgbGliVXJsU2V0RXhwZWN0MTAwIGxpYlVSTFNldEZUUExpc3RDb21tYW5kIGxpYlVSTFNldEZUUE1vZGUgbGliVVJMU2V0RlRQU3RvcFRpbWUgJyArXG4gICAgICAgICdsaWJVUkxTZXRTdGF0dXNDYWxsYmFjayBsb2FkIG11bHRpcGx5IHNvY2tldCBwcmVwYXJlIHByb2Nlc3MgcG9zdCBzZWVrIHJlbCByZWxhdGl2ZSByZWFkIGZyb20gcHJvY2VzcyByZW5hbWUgJyArXG4gICAgICAgICdyZXBsYWNlIHJlcXVpcmUgcmVzZXRBbGwgcmVzb2x2ZSByZXZBZGRYTUxOb2RlIHJldkFwcGVuZFhNTCByZXZDbG9zZUN1cnNvciByZXZDbG9zZURhdGFiYXNlIHJldkNvbW1pdERhdGFiYXNlICcgK1xuICAgICAgICAncmV2Q29weUZpbGUgcmV2Q29weUZvbGRlciByZXZDb3B5WE1MTm9kZSByZXZEZWxldGVGb2xkZXIgcmV2RGVsZXRlWE1MTm9kZSByZXZEZWxldGVBbGxYTUxUcmVlcyAnICtcbiAgICAgICAgJ3JldkRlbGV0ZVhNTFRyZWUgcmV2RXhlY3V0ZVNRTCByZXZHb1VSTCByZXZJbnNlcnRYTUxOb2RlIHJldk1vdmVGb2xkZXIgcmV2TW92ZVRvRmlyc3RSZWNvcmQgcmV2TW92ZVRvTGFzdFJlY29yZCAnICtcbiAgICAgICAgJ3Jldk1vdmVUb05leHRSZWNvcmQgcmV2TW92ZVRvUHJldmlvdXNSZWNvcmQgcmV2TW92ZVRvUmVjb3JkIHJldk1vdmVYTUxOb2RlIHJldlB1dEludG9YTUxOb2RlIHJldlJvbGxCYWNrRGF0YWJhc2UgJyArXG4gICAgICAgICdyZXZTZXREYXRhYmFzZURyaXZlclBhdGggcmV2U2V0WE1MQXR0cmlidXRlIHJldlhNTFJQQ19BZGRQYXJhbSByZXZYTUxSUENfRGVsZXRlQWxsRG9jdW1lbnRzIHJldlhNTEFkZERURCAnICtcbiAgICAgICAgJ3JldlhNTFJQQ19GcmVlIHJldlhNTFJQQ19GcmVlQWxsIHJldlhNTFJQQ19EZWxldGVEb2N1bWVudCByZXZYTUxSUENfRGVsZXRlUGFyYW0gcmV2WE1MUlBDX1NldEhvc3QgJyArXG4gICAgICAgICdyZXZYTUxSUENfU2V0TWV0aG9kIHJldlhNTFJQQ19TZXRQb3J0IHJldlhNTFJQQ19TZXRQcm90b2NvbCByZXZYTUxSUENfU2V0U29ja2V0IHJldlppcEFkZEl0ZW1XaXRoRGF0YSAnICtcbiAgICAgICAgJ3JldlppcEFkZEl0ZW1XaXRoRmlsZSByZXZaaXBBZGRVbmNvbXByZXNzZWRJdGVtV2l0aERhdGEgcmV2WmlwQWRkVW5jb21wcmVzc2VkSXRlbVdpdGhGaWxlIHJldlppcENhbmNlbCAnICtcbiAgICAgICAgJ3JldlppcENsb3NlQXJjaGl2ZSByZXZaaXBEZWxldGVJdGVtIHJldlppcEV4dHJhY3RJdGVtVG9GaWxlIHJldlppcEV4dHJhY3RJdGVtVG9WYXJpYWJsZSByZXZaaXBTZXRQcm9ncmVzc0NhbGxiYWNrICcgK1xuICAgICAgICAncmV2WmlwUmVuYW1lSXRlbSByZXZaaXBSZXBsYWNlSXRlbVdpdGhEYXRhIHJldlppcFJlcGxhY2VJdGVtV2l0aEZpbGUgcmV2WmlwT3BlbkFyY2hpdmUgc2VuZCBzZXQgc29ydCBzcGxpdCBzdGFydCBzdG9wICcgK1xuICAgICAgICAnc3VidHJhY3QgdW5pb24gdW5sb2FkIHdhaXQgd3JpdGUnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiZW5kXFxcXHNpZlxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICBUSVRMRTIsXG4gICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIFRJVExFMVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJlbmRcXFxccysnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICdlbmQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBUSVRMRTFcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29tbWFuZCBvbicsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgIFRJVExFMixcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICAgICAgVElUTEUxXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnPFxcXFw/KHJldnxsY3xsaXZlY29kZSknLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBiZWdpbjogJzxcXFxcPycgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXD8+JyB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5CSU5BUllfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBUSVRMRTFcbiAgICBdLmNvbmNhdChDT01NRU5UX01PREVTKSxcbiAgICBpbGxlZ2FsOiAnOyR8XlxcXFxbfF49fCZ8eydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgLy8gSlMga2V5d29yZHNcbiAgICAgICdpbiBpZiBmb3Igd2hpbGUgZmluYWxseSBuZXcgZG8gcmV0dXJuIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB0aHJvdyB0cnkgdGhpcyAnICtcbiAgICAgICdzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBkZWJ1Z2dlciBjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHdpdGggJyArXG4gICAgICAvLyBMaXZlU2NyaXB0IGtleXdvcmRzXG4gICAgICAndGhlbiB1bmxlc3MgdW50aWwgbG9vcCBvZiBieSB3aGVuIGFuZCBvciBpcyBpc250IG5vdCBpdCB0aGF0IG90aGVyd2lzZSBmcm9tIHRvIHRpbCBmYWxsdGhyb3VnaCBzdXBlciAnICtcbiAgICAgICdjYXNlIGRlZmF1bHQgZnVuY3Rpb24gdmFyIHZvaWQgY29uc3QgbGV0IGVudW0gZXhwb3J0IGltcG9ydCBuYXRpdmUgJyArXG4gICAgICAnX19oYXNQcm9wIF9fZXh0ZW5kcyBfX3NsaWNlIF9fYmluZCBfX2luZGV4T2YnLFxuICAgIGxpdGVyYWw6XG4gICAgICAvLyBKUyBsaXRlcmFsc1xuICAgICAgJ3RydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgJyArXG4gICAgICAvLyBMaXZlU2NyaXB0IGxpdGVyYWxzXG4gICAgICAneWVzIG5vIG9uIG9mZiBpdCB0aGF0IHZvaWQnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ25wbSByZXF1aXJlIGNvbnNvbGUgcHJpbnQgbW9kdWxlIGdsb2JhbCB3aW5kb3cgZG9jdW1lbnQnXG4gIH07XG4gIHZhciBKU19JREVOVF9SRSA9ICdbQS1aYS16JF9dKD86XFwtWzAtOUEtWmEteiRfXXxbMC05QS1aYS16JF9dKSonO1xuICB2YXIgVElUTEUgPSBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IEpTX0lERU5UX1JFfSk7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LywgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBTVUJTVF9TSU1QTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvI1tBLVphLXokX10vLCBlbmQ6IC8oPzpcXC1bMC05QS1aYS16JF9dfFswLTlBLVphLXokX10pKi8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwW3hYXVthLWZBLUYwLTlfXSspfChcXFxcYlxcXFxkKFxcXFxkfF9cXFxcZCkqKFxcXFwuKFxcXFxkKFxcXFxkfF9cXFxcZCkqKT8pPyhfKltlRV0oWy0rXVxcXFxkKF9cXFxcZHxcXFxcZCkqKT8pP1tfYS16XSopJyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIHN0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9IC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC8nJycvLCBlbmQ6IC8nJycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC8nLywgZW5kOiAvJy8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1wiXCJcIi8sIGVuZDogL1wiXCJcIi8sXG4gICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNULCBTVUJTVF9TSU1QTEVdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogL1wiLywgZW5kOiAvXCIvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBTVUJTVCwgU1VCU1RfU0lNUExFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cXFxcLywgZW5kOiAvKFxcc3wkKS8sXG4gICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnLy8nLCBlbmQ6ICcvL1tnaW1dKicsXG4gICAgICAgICAgY29udGFpbnM6IFtTVUJTVCwgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIHJlZ2V4IGNhbid0IHN0YXJ0IHdpdGggc3BhY2UgdG8gcGFyc2UgeCAvIDIgLyAzIGFzIHR3byBkaXZpc2lvbnNcbiAgICAgICAgICAvLyByZWdleCBjYW4ndCBzdGFydCB3aXRoICosIGFuZCBpdCBzdXBwb3J0cyBhbiBcImlsbGVnYWxcIiBpbiB0aGUgbWFpbiBtb2RlXG4gICAgICAgICAgYmVnaW46IC9cXC8oPyFbICpdKShcXFxcXFwvfC4pKj9cXC9bZ2ltXSooPz1cXFd8JCkvXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBKU19JREVOVF9SRVxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46ICdgYCcsIGVuZDogJ2BgJyxcbiAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgIHN1Ykxhbmd1YWdlOiAnamF2YXNjcmlwdCdcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAnXFxcXCgnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAvKiBXZSBuZWVkIGFub3RoZXIgY29udGFpbmVkIG5hbWVsZXNzIG1vZGUgdG8gbm90IGhhdmUgZXZlcnkgbmVzdGVkXG4gICAgcGFpciBvZiBwYXJlbnMgdG8gYmUgY2FsbGVkIFwicGFyYW1zXCIgKi9cbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddLmNvbmNhdChFWFBSRVNTSU9OUylcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2xzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBFWFBSRVNTSU9OUy5jb25jYXQoW1xuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcL1xcXFwqJywgJ1xcXFwqXFxcXC8nKSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlxcXFwtPlxcXFwqPycsIGVuZDogJ1xcXFwtPlxcXFwqPydcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnKCcgKyBKU19JREVOVF9SRSArICdcXFxccyooPzo9fDo9KVxcXFxzKik/IT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQlstfl17MSwyfT5cXFxcKj8nLCBlbmQ6ICdbLX5dezEsMn0+XFxcXCo/J1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICcoJyArIEpTX0lERU5UX1JFICsgJ1xcXFxzKig/Oj18Oj0pXFxcXHMqKT8oXFxcXCguKlxcXFwpKT9cXFxccypcXFxcQiE/Wy1+XXsxLDJ9PlxcXFwqPycsIGVuZDogJyE/Wy1+XXsxLDJ9PlxcXFwqPydcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2NsYXNzJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luS2V5d29yZHM6ICdleHRlbmRzJyxcbiAgICAgICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgaWxsZWdhbDogL1s6PVwiXFxbXFxdXS8sXG4gICAgICAgICAgICBjb250YWluczogW1RJVExFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgVElUTEVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IEpTX0lERU5UX1JFICsgJzonLCBlbmQ6ICc6JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSlcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBpZGVudGlmaWVyID0gJyhbLWEtekEtWiQuX11bXFxcXHdcXFxcLSQuXSopJztcbiAgcmV0dXJuIHtcbiAgICAvL2xleGVtZXM6ICdbLiVdPycgKyBobGpzLklERU5UX1JFLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2JlZ2luIGVuZCB0cnVlIGZhbHNlIGRlY2xhcmUgZGVmaW5lIGdsb2JhbCAnICtcbiAgICAgICdjb25zdGFudCBwcml2YXRlIGxpbmtlcl9wcml2YXRlIGludGVybmFsICcgK1xuICAgICAgJ2F2YWlsYWJsZV9leHRlcm5hbGx5IGxpbmtvbmNlIGxpbmtvbmNlX29kciB3ZWFrICcgK1xuICAgICAgJ3dlYWtfb2RyIGFwcGVuZGluZyBkbGxpbXBvcnQgZGxsZXhwb3J0IGNvbW1vbiAnICtcbiAgICAgICdkZWZhdWx0IGhpZGRlbiBwcm90ZWN0ZWQgZXh0ZXJuX3dlYWsgZXh0ZXJuYWwgJyArXG4gICAgICAndGhyZWFkX2xvY2FsIHplcm9pbml0aWFsaXplciB1bmRlZiBudWxsIHRvIHRhaWwgJyArXG4gICAgICAndGFyZ2V0IHRyaXBsZSBkYXRhbGF5b3V0IHZvbGF0aWxlIG51dyBuc3cgbm5hbiAnICtcbiAgICAgICduaW5mIG5zeiBhcmNwIGZhc3QgZXhhY3QgaW5ib3VuZHMgYWxpZ24gJyArXG4gICAgICAnYWRkcnNwYWNlIHNlY3Rpb24gYWxpYXMgbW9kdWxlIGFzbSBzaWRlZWZmZWN0ICcgK1xuICAgICAgJ2djIGRiZyBsaW5rZXJfcHJpdmF0ZV93ZWFrIGF0dHJpYnV0ZXMgYmxvY2thZGRyZXNzICcgK1xuICAgICAgJ2luaXRpYWxleGVjIGxvY2FsZHluYW1pYyBsb2NhbGV4ZWMgcHJlZml4IHVubmFtZWRfYWRkciAnICtcbiAgICAgICdjY2MgZmFzdGNjIGNvbGRjYyB4ODZfc3RkY2FsbGNjIHg4Nl9mYXN0Y2FsbGNjICcgK1xuICAgICAgJ2FybV9hcGNzY2MgYXJtX2FhcGNzY2MgYXJtX2FhcGNzX3ZmcGNjIHB0eF9kZXZpY2UgJyArXG4gICAgICAncHR4X2tlcm5lbCBpbnRlbF9vY2xfYmljYyBtc3A0MzBfaW50cmNjIHNwaXJfZnVuYyAnICtcbiAgICAgICdzcGlyX2tlcm5lbCB4ODZfNjRfc3lzdmNjIHg4Nl82NF93aW42NGNjIHg4Nl90aGlzY2FsbGNjICcgK1xuICAgICAgJ2NjIGMgc2lnbmV4dCB6ZXJvZXh0IGlucmVnIHNyZXQgbm91bndpbmQgJyArXG4gICAgICAnbm9yZXR1cm4gbm9hbGlhcyBub2NhcHR1cmUgYnl2YWwgbmVzdCByZWFkbm9uZSAnICtcbiAgICAgICdyZWFkb25seSBpbmxpbmVoaW50IG5vaW5saW5lIGFsd2F5c2lubGluZSBvcHRzaXplIHNzcCAnICtcbiAgICAgICdzc3ByZXEgbm9yZWR6b25lIG5vaW1wbGljaXRmbG9hdCBuYWtlZCBidWlsdGluIGNvbGQgJyArXG4gICAgICAnbm9idWlsdGluIG5vZHVwbGljYXRlIG5vbmxhenliaW5kIG9wdG5vbmUgcmV0dXJuc190d2ljZSAnICtcbiAgICAgICdzYW5pdGl6ZV9hZGRyZXNzIHNhbml0aXplX21lbW9yeSBzYW5pdGl6ZV90aHJlYWQgc3Nwc3Ryb25nICcgK1xuICAgICAgJ3V3dGFibGUgcmV0dXJuZWQgdHlwZSBvcGFxdWUgZXEgbmUgc2x0IHNndCAnICtcbiAgICAgICdzbGUgc2dlIHVsdCB1Z3QgdWxlIHVnZSBvZXEgb25lIG9sdCBvZ3QgJyArXG4gICAgICAnb2xlIG9nZSBvcmQgdW5vIHVlcSB1bmUgeCBhY3FfcmVsIGFjcXVpcmUgJyArXG4gICAgICAnYWxpZ25zdGFjayBhdG9taWMgY2F0Y2ggY2xlYW51cCBmaWx0ZXIgaW50ZWxkaWFsZWN0ICcgK1xuICAgICAgJ21heCBtaW4gbW9ub3RvbmljIG5hbmQgcGVyc29uYWxpdHkgcmVsZWFzZSBzZXFfY3N0ICcgK1xuICAgICAgJ3NpbmdsZXRocmVhZCB1bWF4IHVtaW4gdW5vcmRlcmVkIHhjaGcgYWRkIGZhZGQgJyArXG4gICAgICAnc3ViIGZzdWIgbXVsIGZtdWwgdWRpdiBzZGl2IGZkaXYgdXJlbSBzcmVtICcgK1xuICAgICAgJ2ZyZW0gc2hsIGxzaHIgYXNociBhbmQgb3IgeG9yIGljbXAgZmNtcCAnICtcbiAgICAgICdwaGkgY2FsbCB0cnVuYyB6ZXh0IHNleHQgZnB0cnVuYyBmcGV4dCB1aXRvZnAgJyArXG4gICAgICAnc2l0b2ZwIGZwdG91aSBmcHRvc2kgaW50dG9wdHIgcHRydG9pbnQgYml0Y2FzdCAnICtcbiAgICAgICdhZGRyc3BhY2VjYXN0IHNlbGVjdCB2YV9hcmcgcmV0IGJyIHN3aXRjaCBpbnZva2UgJyArXG4gICAgICAndW53aW5kIHVucmVhY2hhYmxlIGluZGlyZWN0YnIgbGFuZGluZ3BhZCByZXN1bWUgJyArXG4gICAgICAnbWFsbG9jIGFsbG9jYSBmcmVlIGxvYWQgc3RvcmUgZ2V0ZWxlbWVudHB0ciAnICtcbiAgICAgICdleHRyYWN0ZWxlbWVudCBpbnNlcnRlbGVtZW50IHNodWZmbGV2ZWN0b3IgZ2V0cmVzdWx0ICcgK1xuICAgICAgJ2V4dHJhY3R2YWx1ZSBpbnNlcnR2YWx1ZSBhdG9taWNybXcgY21weGNoZyBmZW5jZSAnICtcbiAgICAgICdhcmdtZW1vbmx5IGRvdWJsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnaVxcXFxkKydcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JywgJ1xcXFxuJywge3JlbGV2YW5jZTogMH1cbiAgICAgICksXG4gICAgICAvLyBEb3VibGUgcXVvdGUgc3RyaW5nXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIC8vIERvdWJsZS1xdW90ZWQgc3RyaW5nXG4gICAgICAgICAgeyBiZWdpbjogJ1wiJywgZW5kOiAnW15cXFxcXFxcXF1cIicgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ0AnICsgaWRlbnRpZmllciB9LFxuICAgICAgICAgIHsgYmVnaW46ICdAXFxcXGQrJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICchJyArIGlkZW50aWZpZXIgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnIVxcXFxkKycgKyBpZGVudGlmaWVyIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnJScgKyBpZGVudGlmaWVyIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyVcXFxcZCsnIH0sXG4gICAgICAgICAgeyBiZWdpbjogJyNcXFxcZCsnIH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7IGJlZ2luOiAnMFt4WF1bYS1mQS1GMC05XSsnIH0sXG4gICAgICAgICAgICB7IGJlZ2luOiAnLT9cXFxcZCsoPzpbLl1cXFxcZCspPyg/OltlRV1bLStdP1xcXFxkKyg/OlsuXVxcXFxkKyk/KT8nIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgICB2YXIgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgYmVnaW46IC9cXFxcW3RuXCJcXFxcXS9cbiAgICB9O1xuXG4gICAgdmFyIExTTF9TVFJJTkdTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgTFNMX1NUUklOR19FU0NBUEVfQ0hBUlNcbiAgICAgICAgXVxuICAgIH07XG5cbiAgICB2YXIgTFNMX05VTUJFUlMgPSB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBobGpzLkNfTlVNQkVSX1JFXG4gICAgfTtcblxuICAgIHZhciBMU0xfQ09OU1RBTlRTID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86UEl8VFdPX1BJfFBJX0JZX1RXT3xERUdfVE9fUkFEfFJBRF9UT19ERUd8U1FSVDIpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpYUF9FUlJPUl8oPzpFWFBFUklFTkNFU19ESVNBQkxFRHxFWFBFUklFTkNFXyg/OkRJU0FCTEVEfFNVU1BFTkRFRCl8SU5WQUxJRF8oPzpFWFBFUklFTkNFfFBBUkFNRVRFUlMpfEtFWV9OT1RfRk9VTkR8TUFUVVJJVFlfRVhDRUVERUR8Tk9ORXxOT1RfKD86Rk9VTkR8UEVSTUlUVEVEKD86X0xBTkQpPyl8Tk9fRVhQRVJJRU5DRXxRVU9UQV9FWENFRURFRHxSRVRSWV9VUERBVEV8U1RPUkFHRV9FWENFUFRJT058U1RPUkVfRElTQUJMRUR8VEhST1RUTEVEfFVOS05PV05fRVJST1IpfEpTT05fQVBQRU5EfFNUQVRVU18oPzpQSFlTSUNTfFJPVEFURV9bWFlaXXxQSEFOVE9NfFNBTkRCT1h8QkxPQ0tfR1JBQig/Ol9PQkpFQ1QpP3woPzpESUV8UkVUVVJOKV9BVF9FREdFfENBU1RfU0hBRE9XU3xPS3xNQUxGT1JNRURfUEFSQU1TfFRZUEVfTUlTTUFUQ0h8Qk9VTkRTX0VSUk9SfE5PVF8oPzpGT1VORHxTVVBQT1JURUQpfElOVEVSTkFMX0VSUk9SfFdISVRFTElTVF9GQUlMRUQpfEFHRU5UKD86Xyg/OkJZXyg/OkxFR0FDWV98VVNFUilOQU1FfEZMWUlOR3xBVFRBQ0hNRU5UU3xTQ1JJUFRFRHxNT1VTRUxPT0t8U0lUVElOR3xPTl9PQkpFQ1R8QVdBWXxXQUxLSU5HfElOX0FJUnxUWVBJTkd8Q1JPVUNISU5HfEJVU1l8QUxXQVlTX1JVTnxBVVRPUElMT1R8TElTVF8oPzpQQVJDRUwoPzpfT1dORVIpP3xSRUdJT04pKSk/fENBTUVSQV8oPzpQSVRDSHxESVNUQU5DRXxCRUhJTkRORVNTXyg/OkFOR0xFfExBRyl8KD86Rk9DVVN8UE9TSVRJT04pKD86Xyg/OlRIUkVTSE9MRHxMT0NLRUR8TEFHKSk/fEZPQ1VTX09GRlNFVHxBQ1RJVkUpfEFOSU1fT058TE9PUHxSRVZFUlNFfFBJTkdfUE9OR3xTTU9PVEh8Uk9UQVRFfFNDQUxFfEFMTF9TSURFU3xMSU5LXyg/OlJPT1R8U0VUfEFMTF8oPzpPVEhFUlN8Q0hJTERSRU4pfFRISVMpfEFDVElWRXxQQVNTKD86SVZFfF8oPzpBTFdBWVN8SUZfTk9UX0hBTkRMRUR8TkVWRVIpKXxTQ1JJUFRFRHxDT05UUk9MXyg/OkZXRHxCQUNLfCg/OlJPVF8pPyg/OkxFRlR8UklHSFQpfFVQfERPV058KD86TUxfKT9MQlVUVE9OKXxQRVJNSVNTSU9OXyg/OlJFVFVSTl9PQkpFQ1RTfERFQklUfE9WRVJSSURFX0FOSU1BVElPTlN8U0lMRU5UX0VTVEFURV9NQU5BR0VNRU5UfFRBS0VfQ09OVFJPTFN8VFJJR0dFUl9BTklNQVRJT058QVRUQUNIfENIQU5HRV9MSU5LU3woPzpDT05UUk9MfFRSQUNLKV9DQU1FUkF8VEVMRVBPUlQpfElOVkVOVE9SWV8oPzpURVhUVVJFfFNPVU5EfE9CSkVDVHxTQ1JJUFR8TEFORE1BUkt8Q0xPVEhJTkd8Tk9URUNBUkR8Qk9EWVBBUlR8QU5JTUFUSU9OfEdFU1RVUkV8QUxMfE5PTkUpfENIQU5HRURfKD86SU5WRU5UT1JZfENPTE9SfFNIQVBFfFNDQUxFfFRFWFRVUkV8TElOS3xBTExPV0VEX0RST1B8T1dORVJ8UkVHSU9OKD86X1NUQVJUKT98VEVMRVBPUlR8TUVESUEpfE9CSkVDVF8oPzpDTElDS19BQ1RJT058SE9WRVJfSEVJR0hUfExBU1RfT1dORVJfSUR8KD86UEhZU0lDU3xTRVJWRVJ8U1RSRUFNSU5HKV9DT1NUfFVOS05PV05fREVUQUlMfENIQVJBQ1RFUl9USU1FfFBIQU5UT018UEhZU0lDU3xURU1QX09OX1JFWnxOQU1FfERFU0N8UE9TfFBSSU1fKD86Q09VTlR8RVFVSVZBTEVOQ0UpfFJFVFVSTl8oPzpQQVJDRUwoPzpfT1dORVIpP3xSRUdJT04pfFJFWlpFUl9LRVl8Uk9PP1R8VkVMT0NJVFl8T01FR0F8T1dORVJ8R1JPVVB8Q1JFQVRPUnxBVFRBQ0hFRF9QT0lOVHxSRU5ERVJfV0VJR0hUfCg/OkJPRFlfU0hBUEV8UEFUSEZJTkRJTkcpX1RZUEV8KD86UlVOTklOR3xUT1RBTClfU0NSSVBUX0NPVU5UfFRPVEFMX0lOVkVOVE9SWV9DT1VOVHxTQ1JJUFRfKD86TUVNT1JZfFRJTUUpKXxUWVBFXyg/OklOVEVHRVJ8RkxPQVR8U1RSSU5HfEtFWXxWRUNUT1J8Uk9UQVRJT058SU5WQUxJRCl8KD86REVCVUd8UFVCTElDKV9DSEFOTkVMfEFUVEFDSF8oPzpBVkFUQVJfQ0VOVEVSfENIRVNUfEhFQUR8QkFDS3xQRUxWSVN8TU9VVEh8Q0hJTnxORUNLfE5PU0V8QkVMTFl8W0xSXSg/OlNIT1VMREVSfEhBTkR8Rk9PVHxFQVJ8RVlFfFtVTF0oPzpBUk18TEVHKXxISVApfCg/OkxFRlR8UklHSFQpX1BFQ3xIVURfKD86Q0VOVEVSX1sxMl18VE9QXyg/OlJJR0hUfENFTlRFUnxMRUZUKXxCT1RUT00oPzpfKD86UklHSFR8TEVGVCkpPyl8W0xSXUhBTkRfUklORzF8VEFJTF8oPzpCQVNFfFRJUCl8W0xSXVdJTkd8RkFDRV8oPzpKQVd8W0xSXUVBUnxbTFJdRVlFfFRPVU5HRSl8R1JPSU58SElORF9bTFJdRk9PVCl8TEFORF8oPzpMRVZFTHxSQUlTRXxMT1dFUnxTTU9PVEh8Tk9JU0V8UkVWRVJUKXxEQVRBXyg/Ok9OTElORXxOQU1FfEJPUk58U0lNXyg/OlBPU3xTVEFUVVN8UkFUSU5HKXxQQVlJTkZPKXxQQVlNRU5UX0lORk9fKD86T05fRklMRXxVU0VEKXxSRU1PVEVfREFUQV8oPzpDSEFOTkVMfFJFUVVFU1R8UkVQTFkpfFBTWVNfKD86UEFSVF8oPzpCRl8oPzpaRVJPfE9ORSg/Ol9NSU5VU18oPzpERVNUX0NPTE9SfFNPVVJDRV8oQUxQSEF8Q09MT1IpKSk/fERFU1RfQ09MT1J8U09VUkNFXyhBTFBIQXxDT0xPUikpfEJMRU5EX0ZVTkNfKERFU1R8U09VUkNFKXxGTEFHU3woPzpTVEFSVHxFTkQpXyg/OkNPTE9SfEFMUEhBfFNDQUxFfEdMT1cpfE1BWF9BR0V8KD86UklCQk9OfFdJTkR8SU5URVJQXyg/OkNPTE9SfFNDQUxFKXxCT1VOQ0V8Rk9MTE9XXyg/OlNSQ3xWRUxPQ0lUWSl8VEFSR0VUXyg/OlBPU3xMSU5FQVIpfEVNSVNTSVZFKV9NQVNLKXxTUkNfKD86TUFYX0FHRXxQQVRURVJOfEFOR0xFXyg/OkJFR0lOfEVORCl8QlVSU1RfKD86UkFURXxQQVJUX0NPVU5UfFJBRElVU3xTUEVFRF8oPzpNSU58TUFYKSl8QUNDRUx8VEVYVFVSRXxUQVJHRVRfS0VZfE9NRUdBfFBBVFRFUk5fKD86RFJPUHxFWFBMT0RFfEFOR0xFKD86X0NPTkUoPzpfRU1QVFkpPyk/KSkpfFZFSElDTEVfKD86UkVGRVJFTkNFX0ZSQU1FfFRZUEVfKD86Tk9ORXxTTEVEfENBUnxCT0FUfEFJUlBMQU5FfEJBTExPT04pfCg/OkxJTkVBUnxBTkdVTEFSKV8oPzpGUklDVElPTl9USU1FU0NBTEV8TU9UT1JfRElSRUNUSU9OKXxMSU5FQVJfTU9UT1JfT0ZGU0VUfEhPVkVSXyg/OkhFSUdIVHxFRkZJQ0lFTkNZfFRJTUVTQ0FMRSl8QlVPWUFOQ1l8KD86TElORUFSfEFOR1VMQVIpXyg/OkRFRkxFQ1RJT05fKD86RUZGSUNJRU5DWXxUSU1FU0NBTEUpfE1PVE9SXyg/OkRFQ0FZXyk/VElNRVNDQUxFKXxWRVJUSUNBTF9BVFRSQUNUSU9OXyg/OkVGRklDSUVOQ1l8VElNRVNDQUxFKXxCQU5LSU5HXyg/OkVGRklDSUVOQ1l8TUlYfFRJTUVTQ0FMRSl8RkxBR18oPzpOT19ERUZMRUNUSU9OX1VQfExJTUlUXyg/OlJPTExfT05MWXxNT1RPUl9VUCl8SE9WRVJfKD86KD86V0FURVJ8VEVSUkFJTnxVUClfT05MWXxHTE9CQUxfSEVJR0hUKXxNT1VTRUxPT0tfKD86U1RFRVJ8QkFOSyl8Q0FNRVJBX0RFQ09VUExFRCkpfFBSSU1fKD86QUxQSEFfTU9ERSg/Ol8oPzpCTEVORHxFTUlTU0lWRXxNQVNLfE5PTkUpKT98Tk9STUFMfFNQRUNVTEFSfFRZUEUoPzpfKD86Qk9YfENZTElOREVSfFBSSVNNfFNQSEVSRXxUT1JVU3xUVUJFfFJJTkd8U0NVTFBUKSk/fEhPTEVfKD86REVGQVVMVHxDSVJDTEV8U1FVQVJFfFRSSUFOR0xFKXxNQVRFUklBTCg/Ol8oPzpTVE9ORXxNRVRBTHxHTEFTU3xXT09EfEZMRVNIfFBMQVNUSUN8UlVCQkVSKSk/fFNISU5ZXyg/Ok5PTkV8TE9XfE1FRElVTXxISUdIKXxCVU1QXyg/Ok5PTkV8QlJJR0hUfERBUkt8V09PRHxCQVJLfEJSSUNLU3xDSEVDS0VSfENPTkNSRVRFfFRJTEV8U1RPTkV8RElTS1N8R1JBVkVMfEJMT0JTfFNJRElOR3xMQVJHRVRJTEV8U1RVQ0NPfFNVQ1RJT058V0VBVkUpfFRFWEdFTl8oPzpERUZBVUxUfFBMQU5BUil8U0NVTFBUXyg/OlRZUEVfKD86U1BIRVJFfFRPUlVTfFBMQU5FfENZTElOREVSfE1BU0spfEZMQUdfKD86TUlSUk9SfElOVkVSVCkpfFBIWVNJQ1MoPzpfKD86U0hBUEVfKD86Q09OVkVYfE5PTkV8UFJJTXxUWVBFKSkpP3woPzpQT1N8Uk9UKV9MT0NBTHxTTElDRXxURVhUfEZMRVhJQkxFfFBPSU5UX0xJR0hUfFRFTVBfT05fUkVafFBIQU5UT018UE9TSVRJT058U0laRXxST1RBVElPTnxURVhUVVJFfE5BTUV8T01FR0F8REVTQ3xMSU5LX1RBUkdFVHxDT0xPUnxCVU1QX1NISU5ZfEZVTExCUklHSFR8VEVYR0VOfEdMT1d8TUVESUFfKD86QUxUX0lNQUdFX0VOQUJMRXxDT05UUk9MU3woPzpDVVJSRU5UfEhPTUUpX1VSTHxBVVRPXyg/OkxPT1B8UExBWXxTQ0FMRXxaT09NKXxGSVJTVF9DTElDS19JTlRFUkFDVHwoPzpXSURUSHxIRUlHSFQpX1BJWEVMU3xXSElURUxJU1QoPzpfRU5BQkxFKT98UEVSTVNfKD86SU5URVJBQ1R8Q09OVFJPTCl8UEFSQU1fTUFYfENPTlRST0xTXyg/OlNUQU5EQVJEfE1JTkkpfFBFUk1fKD86Tk9ORXxPV05FUnxHUk9VUHxBTllPTkUpfE1BWF8oPzpVUkxfTEVOR1RIfFdISVRFTElTVF8oPzpTSVpFfENPVU5UKXwoPzpXSURUSHxIRUlHSFQpX1BJWEVMUykpKXxNQVNLXyg/OkJBU0V8T1dORVJ8R1JPVVB8RVZFUllPTkV8TkVYVCl8UEVSTV8oPzpUUkFOU0ZFUnxNT0RJRll8Q09QWXxNT1ZFfEFMTCl8UEFSQ0VMXyg/Ok1FRElBX0NPTU1BTkRfKD86U1RPUHxQQVVTRXxQTEFZfExPT1B8VEVYVFVSRXxVUkx8VElNRXxBR0VOVHxVTkxPQUR8QVVUT19BTElHTnxUWVBFfFNJWkV8REVTQ3xMT09QX1NFVCl8RkxBR18oPzpBTExPV18oPzpGTFl8KD86R1JPVVBfKT9TQ1JJUFRTfExBTkRNQVJLfFRFUlJBRk9STXxEQU1BR0V8Q1JFQVRFXyg/OkdST1VQXyk/T0JKRUNUUyl8VVNFXyg/OkFDQ0VTU18oPzpHUk9VUHxMSVNUKXxCQU5fTElTVHxMQU5EX1BBU1NfTElTVCl8TE9DQUxfU09VTkRfT05MWXxSRVNUUklDVF9QVVNIT0JKRUNUfEFMTE9XXyg/OkdST1VQfEFMTClfT0JKRUNUX0VOVFJZKXxDT1VOVF8oPzpUT1RBTHxPV05FUnxHUk9VUHxPVEhFUnxTRUxFQ1RFRHxURU1QKXxERVRBSUxTXyg/Ok5BTUV8REVTQ3xPV05FUnxHUk9VUHxBUkVBfElEfFNFRV9BVkFUQVJTKSl8TElTVF9TVEFUXyg/Ok1BWHxNSU58TUVBTnxNRURJQU58U1REX0RFVnxTVU0oPzpfU1FVQVJFUyk/fE5VTV9DT1VOVHxHRU9NRVRSSUNfTUVBTnxSQU5HRSl8UEFZXyg/OkhJREV8REVGQVVMVCl8UkVHSU9OX0ZMQUdfKD86QUxMT1dfREFNQUdFfEZJWEVEX1NVTnxCTE9DS19URVJSQUZPUk18U0FOREJPWHxESVNBQkxFXyg/OkNPTExJU0lPTlN8UEhZU0lDUyl8QkxPQ0tfRkxZfEFMTE9XX0RJUkVDVF9URUxFUE9SVHxSRVNUUklDVF9QVVNIT0JKRUNUKXxIVFRQXyg/Ok1FVEhPRHxNSU1FVFlQRXxCT0RZXyg/Ok1BWExFTkdUSHxUUlVOQ0FURUQpfENVU1RPTV9IRUFERVJ8UFJBR01BX05PX0NBQ0hFfFZFUkJPU0VfVEhST1RUTEV8VkVSSUZZX0NFUlQpfFNUUklOR18oPzpUUklNKD86Xyg/OkhFQUR8VEFJTCkpPyl8Q0xJQ0tfQUNUSU9OXyg/Ok5PTkV8VE9VQ0h8U0lUfEJVWXxQQVl8T1BFTig/Ol9NRURJQSk/fFBMQVl8Wk9PTSl8VE9VQ0hfSU5WQUxJRF9GQUNFfFBST0ZJTEVfKD86Tk9ORXxTQ1JJUFRfTUVNT1JZKXxSQ18oPzpEQVRBX0ZMQUdTfERFVEVDVF9QSEFOVE9NfEdFVF8oPzpMSU5LX05VTXxOT1JNQUx8Uk9PVF9LRVkpfE1BWF9ISVRTfFJFSkVDVF8oPzpUWVBFU3xBR0VOVFN8KD86Tk9OKT9QSFlTSUNBTHxMQU5EKSl8UkNFUlJfKD86Q0FTVF9USU1FX0VYQ0VFREVEfFNJTV9QRVJGX0xPV3xVTktOT1dOKXxFU1RBVEVfQUNDRVNTXyg/OkFMTE9XRURfKD86QUdFTlR8R1JPVVApXyg/OkFERHxSRU1PVkUpfEJBTk5FRF9BR0VOVF8oPzpBRER8UkVNT1ZFKSl8REVOU0lUWXxGUklDVElPTnxSRVNUSVRVVElPTnxHUkFWSVRZX01VTFRJUExJRVJ8S0ZNXyg/OkNPTU1BTkR8Q01EXyg/OlBMQVl8U1RPUHxQQVVTRSl8TU9ERXxGT1JXQVJEfExPT1B8UElOR19QT05HfFJFVkVSU0V8REFUQXxST1RBVElPTnxUUkFOU0xBVElPTil8RVJSXyg/OkdFTkVSSUN8UEFSQ0VMX1BFUk1JU1NJT05TfE1BTEZPUk1FRF9QQVJBTVN8UlVOVElNRV9QRVJNSVNTSU9OU3xUSFJPVFRMRUQpfENIQVJBQ1RFUl8oPzpDTURfKD86KD86U01PT1RIXyk/U1RPUHxKVU1QKXxERVNJUkVEXyg/OlRVUk5fKT9TUEVFRHxSQURJVVN8U1RBWV9XSVRISU5fUEFSQ0VMfExFTkdUSHxPUklFTlRBVElPTnxBQ0NPVU5UX0ZPUl9TS0lQUEVEX0ZSQU1FU3xBVk9JREFOQ0VfTU9ERXxUWVBFKD86Xyg/OltBQkNEXXxOT05FKSk/fE1BWF8oPzpERUNFTHxUVVJOX1JBRElVU3woPzpBQ0NFTHxTUEVFRCkpKXxQVVJTVUlUXyg/Ok9GRlNFVHxGVVpaX0ZBQ1RPUnxHT0FMX1RPTEVSQU5DRXxJTlRFUkNFUFQpfFJFUVVJUkVfTElORV9PRl9TSUdIVHxGT1JDRV9ESVJFQ1RfUEFUSHxWRVJUSUNBTHxIT1JJWk9OVEFMfEFWT0lEXyg/OkNIQVJBQ1RFUlN8RFlOQU1JQ19PQlNUQUNMRVN8Tk9ORSl8UFVfKD86RVZBREVfKD86SElEREVOfFNQT1RURUQpfEZBSUxVUkVfKD86RFlOQU1JQ19QQVRIRklORElOR19ESVNBQkxFRHxJTlZBTElEXyg/OkdPQUx8U1RBUlQpfE5PXyg/Ok5BVk1FU0h8VkFMSURfREVTVElOQVRJT04pfE9USEVSfFRBUkdFVF9HT05FfCg/OlBBUkNFTF8pP1VOUkVBQ0hBQkxFKXwoPzpHT0FMfFNMT1dET1dOX0RJU1RBTkNFKV9SRUFDSEVEKXxUUkFWRVJTQUxfVFlQRSg/Ol8oPzpGQVNUfE5PTkV8U0xPVykpP3xDT05URU5UX1RZUEVfKD86QVRPTXxGT1JNfEhUTUx8SlNPTnxMTFNEfFJTU3xURVhUfFhIVE1MfFhNTCl8R0NOUF8oPzpSQURJVVN8U1RBVElDKXwoPzpQQVRST0x8V0FOREVSKV9QQVVTRV9BVF9XQVlQT0lOVFN8T1BUXyg/OkFWQVRBUnxDSEFSQUNURVJ8RVhDTFVTSU9OX1ZPTFVNRXxMRUdBQ1lfTElOS1NFVHxNQVRFUklBTF9WT0xVTUV8T1RIRVJ8U1RBVElDX09CU1RBQ0xFfFdBTEtBQkxFKXxTSU1fU1RBVF9QQ1RfQ0hBUlNfU1RFUFBFRClcXFxcYidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OkZBTFNFfFRSVUUpXFxcXGInXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoPzpaRVJPX1JPVEFUSU9OKVxcXFxiJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86RU9GfEpTT05fKD86QVJSQVl8REVMRVRFfEZBTFNFfElOVkFMSUR8TlVMTHxOVU1CRVJ8T0JKRUNUfFNUUklOR3xUUlVFKXxOVUxMX0tFWXxURVhUVVJFXyg/OkJMQU5LfERFRkFVTFR8TUVESUF8UExZV09PRHxUUkFOU1BBUkVOVCl8VVJMX1JFUVVFU1RfKD86R1JBTlRFRHxERU5JRUQpKVxcXFxiJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86WkVST19WRUNUT1J8VE9VQ0hfSU5WQUxJRF8oPzpURVhDT09SRHxWRUNUT1IpKVxcXFxiJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcblxuICAgIHZhciBMU0xfRlVOQ1RJT05TID0ge1xuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGIoPzpsbCg/OkFnZW50SW5FeHBlcmllbmNlfCg/OkNyZWF0ZXxEYXRhU2l6ZXxEZWxldGV8S2V5Q291bnR8S2V5c3xSZWFkfFVwZGF0ZSlLZXlWYWx1ZXxHZXRFeHBlcmllbmNlKD86RGV0YWlsc3xFcnJvck1lc3NhZ2UpfFJldHVybk9iamVjdHNCeSg/OklEfE93bmVyKXxKc29uKD86Mkxpc3R8W0dTXWV0VmFsdWV8VmFsdWVUeXBlKXxTaW58Q29zfFRhbnxBdGFuMnxTcXJ0fFBvd3xBYnN8RmFic3xGcmFuZHxGbG9vcnxDZWlsfFJvdW5kfFZlYyg/Ok1hZ3xOb3JtfERpc3QpfFJvdCg/OkJldHdlZW58Mig/OkV1bGVyfEZ3ZHxMZWZ0fFVwKSl8KD86RXVsZXJ8QXhlcykyUm90fFdoaXNwZXJ8KD86UmVnaW9ufE93bmVyKT9TYXl8U2hvdXR8TGlzdGVuKD86Q29udHJvbHxSZW1vdmUpP3xTZW5zb3IoPzpSZXBlYXR8UmVtb3ZlKT98RGV0ZWN0ZWQoPzpOYW1lfEtleXxPd25lcnxUeXBlfFBvc3xWZWx8R3JhYnxSb3R8R3JvdXB8TGlua051bWJlcil8RGllfEdyb3VuZHxXaW5kfCg/OltHU11ldCkoPzpBbmltYXRpb25PdmVycmlkZXxNZW1vcnlMaW1pdHxQcmltTWVkaWFQYXJhbXN8UGFyY2VsTXVzaWNVUkx8T2JqZWN0KD86RGVzY3xOYW1lKXxQaHlzaWNzTWF0ZXJpYWx8U3RhdHVzfFNjYWxlfENvbG9yfEFscGhhfFRleHR1cmV8UG9zfFJvdHxGb3JjZXxUb3JxdWUpfFJlc2V0QW5pbWF0aW9uT3ZlcnJpZGV8KD86U2NhbGV8T2Zmc2V0fFJvdGF0ZSlUZXh0dXJlfCg/OlJvdCk/VGFyZ2V0KD86UmVtb3ZlKT98KD86U3RvcCk/TW92ZVRvVGFyZ2V0fEFwcGx5KD86Um90YXRpb25hbCk/SW1wdWxzZXxTZXQoPzpLZXlmcmFtZWRNb3Rpb258Q29udGVudFR5cGV8UmVnaW9uUG9zfCg/OkFuZ3VsYXIpP1ZlbG9jaXR5fEJ1b3lhbmN5fEhvdmVySGVpZ2h0fEZvcmNlQW5kVG9ycXVlfFRpbWVyRXZlbnR8U2NyaXB0U3RhdGV8RGFtYWdlfFRleHR1cmVBbmltfFNvdW5kKD86UXVldWVpbmd8UmFkaXVzKXxWZWhpY2xlKD86VHlwZXwoPzpGbG9hdHxWZWN0b3J8Um90YXRpb24pUGFyYW0pfCg/OlRvdWNofFNpdCk/VGV4dHxDYW1lcmEoPzpFeWV8QXQpT2Zmc2V0fFByaW1pdGl2ZVBhcmFtc3xDbGlja0FjdGlvbnxMaW5rKD86QWxwaGF8Q29sb3J8UHJpbWl0aXZlUGFyYW1zKD86RmFzdCk/fFRleHR1cmUoPzpBbmltKT98Q2FtZXJhfE1lZGlhKXxSZW1vdGVTY3JpcHRBY2Nlc3NQaW58UGF5UHJpY2V8TG9jYWxSb3QpfFNjYWxlQnlGYWN0b3J8R2V0KD86KD86TWF4fE1pbilTY2FsZUZhY3RvcnxDbG9zZXN0TmF2UG9pbnR8U3RhdGljUGF0aHxTaW1TdGF0c3xFbnZ8UHJpbWl0aXZlUGFyYW1zfExpbmsoPzpQcmltaXRpdmVQYXJhbXN8TnVtYmVyKD86T2ZTaWRlcyk/fEtleXxOYW1lfE1lZGlhKXxIVFRQSGVhZGVyfEZyZWVVUkxzfE9iamVjdCg/OkRldGFpbHN8UGVybU1hc2t8UHJpbUNvdW50KXxQYXJjZWwoPzpNYXhQcmltc3xEZXRhaWxzfFByaW0oPzpDb3VudHxPd25lcnMpKXxBdHRhY2hlZCg/Okxpc3QpP3woPzpTUE1heHxGcmVlfFVzZWQpTWVtb3J5fFJlZ2lvbig/Ok5hbWV8VGltZURpbGF0aW9ufEZQU3xDb3JuZXJ8QWdlbnRDb3VudCl8Um9vdCg/OlBvc2l0aW9ufFJvdGF0aW9uKXxVbml4VGltZXwoPzpQYXJjZWx8UmVnaW9uKUZsYWdzfCg/OldhbGx8R01UKWNsb2NrfFNpbXVsYXRvckhvc3RuYW1lfEJvdW5kaW5nQm94fEdlb21ldHJpY0NlbnRlcnxDcmVhdG9yfE51bWJlck9mKD86UHJpbXN8Tm90ZWNhcmRMaW5lc3xTaWRlcyl8QW5pbWF0aW9uKD86TGlzdCk/fCg/OkNhbWVyYXxMb2NhbCkoPzpQb3N8Um90KXxWZWx8QWNjZWx8T21lZ2F8VGltZSg/OnN0YW1wfE9mRGF5KXwoPzpPYmplY3R8Q2VudGVyT2YpP01hc3N8TWFzc01LU3xFbmVyZ3l8T3duZXJ8KD86T3duZXIpP0tleXxTdW5EaXJlY3Rpb258VGV4dHVyZSg/Ok9mZnNldHxTY2FsZXxSb3QpfEludmVudG9yeSg/Ok51bWJlcnxOYW1lfEtleXxUeXBlfENyZWF0b3J8UGVybU1hc2spfFBlcm1pc3Npb25zKD86S2V5KT98U3RhcnRQYXJhbWV0ZXJ8TGlzdCg/Okxlbmd0aHxFbnRyeVR5cGUpfERhdGV8QWdlbnQoPzpTaXplfEluZm98TGFuZ3VhZ2V8TGlzdCl8TGFuZE93bmVyQXR8Tm90ZWNhcmRMaW5lfFNjcmlwdCg/Ok5hbWV8U3RhdGUpKXwoPzpHZXR8UmVzZXR8R2V0QW5kUmVzZXQpVGltZXxQbGF5U291bmQoPzpTbGF2ZSk/fExvb3BTb3VuZCg/Ok1hc3RlcnxTbGF2ZSk/fCg/OlRyaWdnZXJ8U3RvcHxQcmVsb2FkKVNvdW5kfCg/Oig/OkdldHxEZWxldGUpU3VifEluc2VydClTdHJpbmd8VG8oPzpVcHBlcnxMb3dlcil8R2l2ZSg/OkludmVudG9yeUxpc3R8TW9uZXkpfFJlek9iamVjdHwoPzpTdG9wKT9Mb29rQXR8U2xlZXB8Q29sbGlzaW9uRmlsdGVyfCg/OlRha2V8UmVsZWFzZSlDb250cm9sc3xEZXRhY2hGcm9tQXZhdGFyfEF0dGFjaFRvQXZhdGFyKD86VGVtcCk/fEluc3RhbnRNZXNzYWdlfCg/OkdldE5leHQpP0VtYWlsfFN0b3BIb3ZlcnxNaW5FdmVudERlbGF5fFJvdExvb2tBdHxTdHJpbmcoPzpMZW5ndGh8VHJpbSl8KD86U3RhcnR8U3RvcClBbmltYXRpb258VGFyZ2V0T21lZ2F8UmVxdWVzdCg/OkV4cGVyaWVuY2UpP1Blcm1pc3Npb25zfCg/OkNyZWF0ZXxCcmVhaylMaW5rfEJyZWFrQWxsTGlua3N8KD86R2l2ZXxSZW1vdmUpSW52ZW50b3J5fFdhdGVyfFBhc3NUb3VjaGVzfFJlcXVlc3QoPzpBZ2VudHxJbnZlbnRvcnkpRGF0YXxUZWxlcG9ydEFnZW50KD86SG9tZXxHbG9iYWxDb29yZHMpP3xNb2RpZnlMYW5kfENvbGxpc2lvblNvdW5kfFJlc2V0U2NyaXB0fE1lc3NhZ2VMaW5rZWR8UHVzaE9iamVjdHxQYXNzQ29sbGlzaW9uc3xBeGlzQW5nbGUyUm90fFJvdDIoPzpBeGlzfEFuZ2xlKXxBKD86Y29zfHNpbil8QW5nbGVCZXR3ZWVufEFsbG93SW52ZW50b3J5RHJvcHxTdWJTdHJpbmdJbmRleHxMaXN0Mig/OkNTVnxJbnRlZ2VyfEpzb258RmxvYXR8U3RyaW5nfEtleXxWZWN0b3J8Um90fExpc3QoPzpTdHJpZGVkKT8pfERlbGV0ZVN1Ykxpc3R8TGlzdCg/OlN0YXRpc3RpY3N8U29ydHxSYW5kb21pemV8KD86SW5zZXJ0fEZpbmR8UmVwbGFjZSlMaXN0KXxFZGdlT2ZXb3JsZHxBZGp1c3RTb3VuZFZvbHVtZXxLZXkyTmFtZXxUcmlnZ2VyU291bmRMaW1pdGVkfEVqZWN0RnJvbUxhbmR8KD86Q1NWfFBhcnNlU3RyaW5nKTJMaXN0fE92ZXJNeUxhbmR8U2FtZUdyb3VwfFVuU2l0fEdyb3VuZCg/OlNsb3BlfE5vcm1hbHxDb250b3VyKXxHcm91bmRSZXBlbHwoPzpTZXR8UmVtb3ZlKVZlaGljbGVGbGFnc3woPzpBdmF0YXJPbik/KD86TGluayk/U2l0VGFyZ2V0fFNjcmlwdCg/OkRhbmdlcnxQcm9maWxlcil8RGlhbG9nfFZvbHVtZURldGVjdHxSZXNldE90aGVyU2NyaXB0fFJlbW90ZUxvYWRTY3JpcHRQaW58KD86T3BlbnxDbG9zZSlSZW1vdGVEYXRhQ2hhbm5lbHxTZW5kUmVtb3RlRGF0YXxSZW1vdGVEYXRhUmVwbHl8KD86SW50ZWdlcnxTdHJpbmcpVG9CYXNlNjR8WG9yQmFzZTY0fExvZyg/OjEwKT98QmFzZTY0VG8oPzpTdHJpbmd8SW50ZWdlcil8UGFyc2VTdHJpbmdLZWVwTnVsbHN8UmV6QXRSb290fFJlcXVlc3RTaW11bGF0b3JEYXRhfEZvcmNlTW91c2Vsb29rfCg/OkxvYWR8UmVsZWFzZXwoPzpFfFVuZSlzY2FwZSlVUkx8UGFyY2VsTWVkaWEoPzpDb21tYW5kTGlzdHxRdWVyeSl8TW9kUG93fE1hcERlc3RpbmF0aW9ufCg/OlJlbW92ZUZyb218QWRkVG98UmVzZXQpTGFuZCg/OlBhc3N8QmFuKUxpc3R8KD86U2V0fENsZWFyKUNhbWVyYVBhcmFtc3xIVFRQKD86UmVxdWVzdHxSZXNwb25zZSl8VGV4dEJveHxEZXRlY3RlZFRvdWNoKD86VVZ8RmFjZXxQb3N8KD86TnxCaW4pb3JtYWx8U1QpfCg/Ok1ENXxTSEExfER1bXBMaXN0MilTdHJpbmd8UmVxdWVzdCg/OlNlY3VyZSk/VVJMfENsZWFyKD86UHJpbXxMaW5rKU1lZGlhfCg/OkxpbmspP1BhcnRpY2xlU3lzdGVtfCg/OkdldHxSZXF1ZXN0KSg/OlVzZXJuYW1lfERpc3BsYXlOYW1lKXxSZWdpb25TYXlUb3xDYXN0UmF5fEdlbmVyYXRlS2V5fFRyYW5zZmVyTGluZGVuRG9sbGFyc3xNYW5hZ2VFc3RhdGVBY2Nlc3N8KD86Q3JlYXRlfERlbGV0ZSlDaGFyYWN0ZXJ8RXhlY0NoYXJhY3RlckNtZHxFdmFkZXxGbGVlRnJvbXxOYXZpZ2F0ZVRvfFBhdHJvbFBvaW50c3xQdXJzdWV8VXBkYXRlQ2hhcmFjdGVyfFdhbmRlcldpdGhpbikpXFxcXGInXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlsbGVnYWw6ICc6JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIExTTF9TVFJJTkdTLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIGhsanMuQ09NTUVOVCgnLy8nLCAnJCcpLFxuICAgICAgICAgICAgICAgICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKicsICdcXFxcKi8nKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBMU0xfTlVNQkVSUyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86c3RhdGV8ZGVmYXVsdClcXFxcYidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OnN0YXRlXyg/OmVudHJ5fGV4aXQpfHRvdWNoKD86Xyg/OnN0YXJ0fGVuZCkpP3woPzpsYW5kXyk/Y29sbGlzaW9uKD86Xyg/OnN0YXJ0fGVuZCkpP3x0aW1lcnxsaXN0ZW58KD86bm9fKT9zZW5zb3J8Y29udHJvbHwoPzpub3RfKT9hdF8oPzpyb3RfKT90YXJnZXR8bW9uZXl8ZW1haWx8ZXhwZXJpZW5jZV9wZXJtaXNzaW9ucyg/Ol9kZW5pZWQpP3xydW5fdGltZV9wZXJtaXNzaW9uc3xjaGFuZ2VkfGF0dGFjaHxkYXRhc2VydmVyfG1vdmluZ18oPzpzdGFydHxlbmQpfGxpbmtfbWVzc2FnZXwoPzpvbnxvYmplY3QpX3JlenxyZW1vdGVfZGF0YXxodHRwX3JlKD86c3BvbnNlfHF1ZXN0KXxwYXRoX3VwZGF0ZXx0cmFuc2FjdGlvbl9yZXN1bHQpXFxcXGInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTFNMX0ZVTkNUSU9OUyxcbiAgICAgICAgICAgIExTTF9DT05TVEFOVFMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICAgICAgYmVnaW46ICdcXFxcYig/OmludGVnZXJ8ZmxvYXR8c3RyaW5nfGtleXx2ZWN0b3J8cXVhdGVybmlvbnxyb3RhdGlvbnxsaXN0KVxcXFxiJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBPUEVOSU5HX0xPTkdfQlJBQ0tFVCA9ICdcXFxcWz0qXFxcXFsnO1xuICB2YXIgQ0xPU0lOR19MT05HX0JSQUNLRVQgPSAnXFxcXF09KlxcXFxdJztcbiAgdmFyIExPTkdfQlJBQ0tFVFMgPSB7XG4gICAgYmVnaW46IE9QRU5JTkdfTE9OR19CUkFDS0VULCBlbmQ6IENMT1NJTkdfTE9OR19CUkFDS0VULFxuICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICB9O1xuICB2YXIgQ09NTUVOVFMgPSBbXG4gICAgaGxqcy5DT01NRU5UKCctLSg/IScgKyBPUEVOSU5HX0xPTkdfQlJBQ0tFVCArICcpJywgJyQnKSxcbiAgICBobGpzLkNPTU1FTlQoXG4gICAgICAnLS0nICsgT1BFTklOR19MT05HX0JSQUNLRVQsXG4gICAgICBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgIHtcbiAgICAgICAgY29udGFpbnM6IFtMT05HX0JSQUNLRVRTXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIClcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICBsZXhlbWVzOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGxpdGVyYWw6IFwidHJ1ZSBmYWxzZSBuaWxcIixcbiAgICAgIGtleXdvcmQ6IFwiYW5kIGJyZWFrIGRvIGVsc2UgZWxzZWlmIGVuZCBmb3IgZ290byBpZiBpbiBsb2NhbCBub3Qgb3IgcmVwZWF0IHJldHVybiB0aGVuIHVudGlsIHdoaWxlXCIsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgLy9NZXRhdGFncyBhbmQgZ2xvYmFsczpcbiAgICAgICAgJ19HIF9FTlYgX1ZFUlNJT04gX19pbmRleCBfX25ld2luZGV4IF9fbW9kZSBfX2NhbGwgX19tZXRhdGFibGUgX190b3N0cmluZyBfX2xlbiAnICtcbiAgICAgICAgJ19fZ2MgX19hZGQgX19zdWIgX19tdWwgX19kaXYgX19tb2QgX19wb3cgX19jb25jYXQgX191bm0gX19lcSBfX2x0IF9fbGUgYXNzZXJ0ICcgK1xuICAgICAgICAvL1N0YW5kYXJkIG1ldGhvZHMgYW5kIHByb3BlcnRpZXM6XG4gICAgICAgICdjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgbG9hZGZpbGUgbG9hZHN0cmluZycgK1xuICAgICAgICAnbW9kdWxlIG5leHQgcGFpcnMgcGNhbGwgcHJpbnQgcmF3ZXF1YWwgcmF3Z2V0IHJhd3NldCByZXF1aXJlIHNlbGVjdCBzZXRmZW52JyArXG4gICAgICAgICdzZXRtZXRhdGFibGUgdG9udW1iZXIgdG9zdHJpbmcgdHlwZSB1bnBhY2sgeHBjYWxsIGFyZyBzZWxmJyArXG4gICAgICAgIC8vTGlicmFyeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIChvbmUgbGluZSBwZXIgbGlicmFyeSk6XG4gICAgICAgICdjb3JvdXRpbmUgcmVzdW1lIHlpZWxkIHN0YXR1cyB3cmFwIGNyZWF0ZSBydW5uaW5nIGRlYnVnIGdldHVwdmFsdWUgJyArXG4gICAgICAgICdkZWJ1ZyBzZXRob29rIGdldG1ldGF0YWJsZSBnZXRob29rIHNldG1ldGF0YWJsZSBzZXRsb2NhbCB0cmFjZWJhY2sgc2V0ZmVudiBnZXRpbmZvIHNldHVwdmFsdWUgZ2V0bG9jYWwgZ2V0cmVnaXN0cnkgZ2V0ZmVudiAnICtcbiAgICAgICAgJ2lvIGxpbmVzIHdyaXRlIGNsb3NlIGZsdXNoIG9wZW4gb3V0cHV0IHR5cGUgcmVhZCBzdGRlcnIgc3RkaW4gaW5wdXQgc3Rkb3V0IHBvcGVuIHRtcGZpbGUgJyArXG4gICAgICAgICdtYXRoIGxvZyBtYXggYWNvcyBodWdlIGxkZXhwIHBpIGNvcyB0YW5oIHBvdyBkZWcgdGFuIGNvc2ggc2luaCByYW5kb20gcmFuZG9tc2VlZCBmcmV4cCBjZWlsIGZsb29yIHJhZCBhYnMgc3FydCBtb2RmIGFzaW4gbWluIG1vZCBmbW9kIGxvZzEwIGF0YW4yIGV4cCBzaW4gYXRhbiAnICtcbiAgICAgICAgJ29zIGV4aXQgc2V0bG9jYWxlIGRhdGUgZ2V0ZW52IGRpZmZ0aW1lIHJlbW92ZSB0aW1lIGNsb2NrIHRtcG5hbWUgcmVuYW1lIGV4ZWN1dGUgcGFja2FnZSBwcmVsb2FkIGxvYWRsaWIgbG9hZGVkIGxvYWRlcnMgY3BhdGggY29uZmlnIHBhdGggc2VlYWxsICcgK1xuICAgICAgICAnc3RyaW5nIHN1YiB1cHBlciBsZW4gZ2ZpbmQgcmVwIGZpbmQgbWF0Y2ggY2hhciBkdW1wIGdtYXRjaCByZXZlcnNlIGJ5dGUgZm9ybWF0IGdzdWIgbG93ZXIgJyArXG4gICAgICAgICd0YWJsZSBzZXRuIGluc2VydCBnZXRuIGZvcmVhY2hpIG1heG4gZm9yZWFjaCBjb25jYXQgc29ydCByZW1vdmUnXG4gICAgfSxcbiAgICBjb250YWluczogQ09NTUVOVFMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiAnKFtfYS16QS1aXVxcXFx3KlxcXFwuKSooW19hLXpBLVpdXFxcXHcqOik/W19hLXpBLVpdXFxcXHcqJ30pLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogQ09NTUVOVFNcbiAgICAgICAgICB9XG4gICAgICAgIF0uY29uY2F0KENPTU1FTlRTKVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiBPUEVOSU5HX0xPTkdfQlJBQ0tFVCwgZW5kOiBDTE9TSU5HX0xPTkdfQlJBQ0tFVCxcbiAgICAgICAgY29udGFpbnM6IFtMT05HX0JSQUNLRVRTXSxcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9XG4gICAgXSlcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8qIFZhcmlhYmxlczogc2ltcGxlIChlZyAkKHZhcikpIGFuZCBzcGVjaWFsIChlZyAkQCkgKi9cbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXCgnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFwpJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCRbQCU8P1xcXlxcK1xcKl0vXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbiAgLyogUXVvdGVkIHN0cmluZyB3aXRoIHZhcmlhYmxlcyBpbnNpZGUgKi9cbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi8sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFZBUklBQkxFLFxuICAgIF1cbiAgfTtcbiAgLyogRnVuY3Rpb246ICQoZnVuYyBhcmcsLi4uKSAqL1xuICB2YXIgRlVOQyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCRcXChbXFx3LV0rXFxzLywgZW5kOiAvXFwpLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgJyArXG4gICAgICAgICd3b3JkIHdvcmRsaXN0IGZpcnN0d29yZCBsYXN0d29yZCBkaXIgbm90ZGlyIHN1ZmZpeCBiYXNlbmFtZSAnICtcbiAgICAgICAgJ2FkZHN1ZmZpeCBhZGRwcmVmaXggam9pbiB3aWxkY2FyZCByZWFscGF0aCBhYnNwYXRoIGVycm9yIHdhcm5pbmcgJyArXG4gICAgICAgICdzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlJyxcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBWQVJJQUJMRSxcbiAgICBdXG4gIH07XG4gIC8qIFZhcmlhYmxlIGFzc2lnbm1lbnQgKi9cbiAgdmFyIFZBUl9BU1NJRyA9IHtcbiAgICBiZWdpbjogJ14nICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzKls6Kz9dPz0nLFxuICAgIGlsbGVnYWw6ICdcXFxcbicsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdeJyArIGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSwgZW5kOiAnWzorP10/PScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICB9XG4gICAgXVxuICB9O1xuICAvKiBNZXRhIHRhcmdldHMgKC5QSE9OWSkgKi9cbiAgdmFyIE1FVEEgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46IC9eXFwuUEhPTlk6LywgZW5kOiAvJC8sXG4gICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJy5QSE9OWSd9LFxuICAgIGxleGVtZXM6IC9bXFwuXFx3XSsvXG4gIH07XG4gIC8qIFRhcmdldHMgKi9cbiAgdmFyIFRBUkdFVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzZWN0aW9uJyxcbiAgICBiZWdpbjogL15bXlxcc10rOi8sIGVuZDogLyQvLFxuICAgIGNvbnRhaW5zOiBbVkFSSUFCTEUsXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbWsnLCAnbWFrJ10sXG4gICAga2V5d29yZHM6XG4gICAgICAnZGVmaW5lIGVuZGVmIHVuZGVmaW5lIGlmZGVmIGlmbmRlZiBpZmVxIGlmbmVxIGVsc2UgZW5kaWYgJyArXG4gICAgICAnaW5jbHVkZSAtaW5jbHVkZSBzaW5jbHVkZSBvdmVycmlkZSBleHBvcnQgdW5leHBvcnQgcHJpdmF0ZSB2cGF0aCcsXG4gICAgbGV4ZW1lczogL1tcXHctXSsvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBGVU5DLFxuICAgICAgVkFSX0FTU0lHLFxuICAgICAgTUVUQSxcbiAgICAgIFRBUkdFVCxcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbW1hJ10sXG4gICAgbGV4ZW1lczogJyhcXFxcJHxcXFxcYiknICsgaGxqcy5JREVOVF9SRSArICdcXFxcYicsXG4gICAga2V5d29yZHM6ICdBYmVsaWFuR3JvdXAgQWJvcnQgQWJvcnRLZXJuZWxzIEFib3J0UHJvdGVjdCBBYm92ZSBBYnMgQWJzb2x1dGUgQWJzb2x1dGVDb3JyZWxhdGlvbiBBYnNvbHV0ZUNvcnJlbGF0aW9uRnVuY3Rpb24gQWJzb2x1dGVDdXJyZW50VmFsdWUgQWJzb2x1dGVEYXNoaW5nIEFic29sdXRlRmlsZU5hbWUgQWJzb2x1dGVPcHRpb25zIEFic29sdXRlUG9pbnRTaXplIEFic29sdXRlVGhpY2tuZXNzIEFic29sdXRlVGltZSBBYnNvbHV0ZVRpbWluZyBBY2NvdW50aW5nRm9ybSBBY2N1bXVsYXRlIEFjY3VyYWN5IEFjY3VyYWN5R29hbCBBY3Rpb25EZWxheSBBY3Rpb25NZW51IEFjdGlvbk1lbnVCb3ggQWN0aW9uTWVudUJveE9wdGlvbnMgQWN0aXZlIEFjdGl2ZUl0ZW0gQWN0aXZlU3R5bGUgQWN5Y2xpY0dyYXBoUSBBZGRPbkhlbHBQYXRoIEFkZFRvIEFkamFjZW5jeUdyYXBoIEFkamFjZW5jeUxpc3QgQWRqYWNlbmN5TWF0cml4IEFkanVzdG1lbnRCb3ggQWRqdXN0bWVudEJveE9wdGlvbnMgQWRqdXN0VGltZVNlcmllc0ZvcmVjYXN0IEFmZmluZVRyYW5zZm9ybSBBZnRlciBBaXJ5QWkgQWlyeUFpUHJpbWUgQWlyeUFpWmVybyBBaXJ5QmkgQWlyeUJpUHJpbWUgQWlyeUJpWmVybyBBbGdlYnJhaWNJbnRlZ2VyUSBBbGdlYnJhaWNOdW1iZXIgQWxnZWJyYWljTnVtYmVyRGVub21pbmF0b3IgQWxnZWJyYWljTnVtYmVyTm9ybSBBbGdlYnJhaWNOdW1iZXJQb2x5bm9taWFsIEFsZ2VicmFpY051bWJlclRyYWNlIEFsZ2VicmFpY1J1bGVzIEFsZ2VicmFpY1J1bGVzRGF0YSBBbGdlYnJhaWNzIEFsZ2VicmFpY1VuaXRRIEFsaWdubWVudCBBbGlnbm1lbnRNYXJrZXIgQWxpZ25tZW50UG9pbnQgQWxsIEFsbG93ZWREaW1lbnNpb25zIEFsbG93R3JvdXBDbG9zZSBBbGxvd0lubGluZUNlbGxzIEFsbG93S2VybmVsSW5pdGlhbGl6YXRpb24gQWxsb3dSZXZlcnNlR3JvdXBDbG9zZSBBbGxvd1NjcmlwdExldmVsQ2hhbmdlIEFscGhhQ2hhbm5lbCBBbHRlcm5hdGluZ0dyb3VwIEFsdGVybmF0aXZlSHlwb3RoZXNpcyBBbHRlcm5hdGl2ZXMgQW1iaWVudExpZ2h0IEFuYWx5dGljIEFuY2hvcmVkU2VhcmNoIEFuZCBBbmRlcnNvbkRhcmxpbmdUZXN0IEFuZ2VySiBBbmdsZUJyYWNrZXQgQW5ndWxhckdhdWdlIEFuaW1hdGUgQW5pbWF0aW9uQ3ljbGVPZmZzZXQgQW5pbWF0aW9uQ3ljbGVSZXBldGl0aW9ucyBBbmltYXRpb25EaXJlY3Rpb24gQW5pbWF0aW9uRGlzcGxheVRpbWUgQW5pbWF0aW9uUmF0ZSBBbmltYXRpb25SZXBldGl0aW9ucyBBbmltYXRpb25SdW5uaW5nIEFuaW1hdG9yIEFuaW1hdG9yQm94IEFuaW1hdG9yQm94T3B0aW9ucyBBbmltYXRvckVsZW1lbnRzIEFubm90YXRpb24gQW5udWl0eSBBbm51aXR5RHVlIEFudGlhbGlhc2luZyBBbnRpc3ltbWV0cmljIEFwYXJ0IEFwYXJ0U3F1YXJlRnJlZSBBcHBlYXJhbmNlIEFwcGVhcmFuY2VFbGVtZW50cyBBcHBlbGxGMSBBcHBlbmQgQXBwZW5kVG8gQXBwbHkgQXJjQ29zIEFyY0Nvc2ggQXJjQ290IEFyY0NvdGggQXJjQ3NjIEFyY0NzY2ggQXJjU2VjIEFyY1NlY2ggQXJjU2luIEFyY1NpbkRpc3RyaWJ1dGlvbiBBcmNTaW5oIEFyY1RhbiBBcmNUYW5oIEFyZyBBcmdNYXggQXJnTWluIEFyZ3VtZW50Q291bnRRIEFSSU1BUHJvY2VzcyBBcml0aG1ldGljR2VvbWV0cmljTWVhbiBBUk1BUHJvY2VzcyBBUlByb2Nlc3MgQXJyYXkgQXJyYXlDb21wb25lbnRzIEFycmF5RGVwdGggQXJyYXlGbGF0dGVuIEFycmF5UGFkIEFycmF5UGxvdCBBcnJheVEgQXJyYXlSZXNoYXBlIEFycmF5UnVsZXMgQXJyYXlzIEFycm93IEFycm93M0RCb3ggQXJyb3dCb3ggQXJyb3doZWFkcyBBc3BlY3RSYXRpbyBBc3BlY3RSYXRpb0ZpeGVkIEFzc2VydCBBc3N1bWluZyBBc3N1bXB0aW9ucyBBc3Ryb25vbWljYWxEYXRhIEFzeW5jaHJvbm91cyBBc3luY2hyb25vdXNUYXNrT2JqZWN0IEFzeW5jaHJvbm91c1Rhc2tzIEF0b21RIEF0dHJpYnV0ZXMgQXVnbWVudGVkU3ltbWV0cmljUG9seW5vbWlhbCBBdXRvQWN0aW9uIEF1dG9EZWxldGUgQXV0b0V2YWx1YXRlRXZlbnRzIEF1dG9HZW5lcmF0ZWRQYWNrYWdlIEF1dG9JbmRlbnQgQXV0b0luZGVudFNwYWNpbmdzIEF1dG9JdGFsaWNXb3JkcyBBdXRvbG9hZFBhdGggQXV0b01hdGNoIEF1dG9tYXRpYyBBdXRvbWF0aWNJbWFnZVNpemUgQXV0b011bHRpcGxpY2F0aW9uU3ltYm9sIEF1dG9OdW1iZXJGb3JtYXR0aW5nIEF1dG9PcGVuTm90ZWJvb2tzIEF1dG9PcGVuUGFsZXR0ZXMgQXV0b3J1blNlcXVlbmNpbmcgQXV0b1NjYWxpbmcgQXV0b1Njcm9sbCBBdXRvU3BhY2luZyBBdXRvU3R5bGVPcHRpb25zIEF1dG9TdHlsZVdvcmRzIEF4ZXMgQXhlc0VkZ2UgQXhlc0xhYmVsIEF4ZXNPcmlnaW4gQXhlc1N0eWxlIEF4aXMgJyArXG4gICAgICAnQmFieU1vbnN0ZXJHcm91cEIgQmFjayBCYWNrZ3JvdW5kIEJhY2tncm91bmRUYXNrc1NldHRpbmdzIEJhY2tzbGFzaCBCYWNrc3Vic3RpdHV0aW9uIEJhY2t3YXJkIEJhbmQgQmFuZHBhc3NGaWx0ZXIgQmFuZHN0b3BGaWx0ZXIgQmFyYWJhc2lBbGJlcnRHcmFwaERpc3RyaWJ1dGlvbiBCYXJDaGFydCBCYXJDaGFydDNEIEJhckxlZ2VuZCBCYXJsb3dQcm9zY2hhbkltcG9ydGFuY2UgQmFybmVzRyBCYXJPcmlnaW4gQmFyU3BhY2luZyBCYXJ0bGV0dEhhbm5XaW5kb3cgQmFydGxldHRXaW5kb3cgQmFzZUZvcm0gQmFzZWxpbmUgQmFzZWxpbmVQb3NpdGlvbiBCYXNlU3R5bGUgQmF0ZXNEaXN0cmlidXRpb24gQmF0dGxlTGVtYXJpZVdhdmVsZXQgQmVjYXVzZSBCZWNrbWFubkRpc3RyaWJ1dGlvbiBCZWVwIEJlZm9yZSBCZWdpbiBCZWdpbkRpYWxvZ1BhY2tldCBCZWdpbkZyb250RW5kSW50ZXJhY3Rpb25QYWNrZXQgQmVnaW5QYWNrYWdlIEJlbGxCIEJlbGxZIEJlbG93IEJlbmZvcmREaXN0cmlidXRpb24gQmVuaW5pRGlzdHJpYnV0aW9uIEJlbmt0YW5kZXJHaWJyYXREaXN0cmlidXRpb24gQmVua3RhbmRlcldlaWJ1bGxEaXN0cmlidXRpb24gQmVybm91bGxpQiBCZXJub3VsbGlEaXN0cmlidXRpb24gQmVybm91bGxpR3JhcGhEaXN0cmlidXRpb24gQmVybm91bGxpUHJvY2VzcyBCZXJuc3RlaW5CYXNpcyBCZXNzZWxGaWx0ZXJNb2RlbCBCZXNzZWxJIEJlc3NlbEogQmVzc2VsSlplcm8gQmVzc2VsSyBCZXNzZWxZIEJlc3NlbFlaZXJvIEJldGEgQmV0YUJpbm9taWFsRGlzdHJpYnV0aW9uIEJldGFEaXN0cmlidXRpb24gQmV0YU5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb24gQmV0YVByaW1lRGlzdHJpYnV0aW9uIEJldGFSZWd1bGFyaXplZCBCZXR3ZWVubmVzc0NlbnRyYWxpdHkgQmV6aWVyQ3VydmUgQmV6aWVyQ3VydmUzREJveCBCZXppZXJDdXJ2ZTNEQm94T3B0aW9ucyBCZXppZXJDdXJ2ZUJveCBCZXppZXJDdXJ2ZUJveE9wdGlvbnMgQmV6aWVyRnVuY3Rpb24gQmlsYXRlcmFsRmlsdGVyIEJpbmFyaXplIEJpbmFyeUZvcm1hdCBCaW5hcnlJbWFnZVEgQmluYXJ5UmVhZCBCaW5hcnlSZWFkTGlzdCBCaW5hcnlXcml0ZSBCaW5Db3VudHMgQmluTGlzdHMgQmlub21pYWwgQmlub21pYWxEaXN0cmlidXRpb24gQmlub21pYWxQcm9jZXNzIEJpbm9ybWFsRGlzdHJpYnV0aW9uIEJpb3J0aG9nb25hbFNwbGluZVdhdmVsZXQgQmlwYXJ0aXRlR3JhcGhRIEJpcm5iYXVtSW1wb3J0YW5jZSBCaXJuYmF1bVNhdW5kZXJzRGlzdHJpYnV0aW9uIEJpdEFuZCBCaXRDbGVhciBCaXRHZXQgQml0TGVuZ3RoIEJpdE5vdCBCaXRPciBCaXRTZXQgQml0U2hpZnRMZWZ0IEJpdFNoaWZ0UmlnaHQgQml0WG9yIEJsYWNrIEJsYWNrbWFuSGFycmlzV2luZG93IEJsYWNrbWFuTnV0dGFsbFdpbmRvdyBCbGFja21hbldpbmRvdyBCbGFuayBCbGFua0Zvcm0gQmxhbmtOdWxsU2VxdWVuY2UgQmxhbmtTZXF1ZW5jZSBCbGVuZCBCbG9jayBCbG9ja1JhbmRvbSBCbG9tcXZpc3RCZXRhIEJsb21xdmlzdEJldGFUZXN0IEJsdWUgQmx1ciBCb2RlUGxvdCBCb2htYW5XaW5kb3cgQm9sZCBCb29rbWFya3MgQm9vbGUgQm9vbGVhbkNvbnNlY3V0aXZlRnVuY3Rpb24gQm9vbGVhbkNvbnZlcnQgQm9vbGVhbkNvdW50aW5nRnVuY3Rpb24gQm9vbGVhbkZ1bmN0aW9uIEJvb2xlYW5HcmFwaCBCb29sZWFuTWF4dGVybXMgQm9vbGVhbk1pbmltaXplIEJvb2xlYW5NaW50ZXJtcyBCb29sZWFucyBCb29sZWFuVGFibGUgQm9vbGVhblZhcmlhYmxlcyBCb3JkZXJEaW1lbnNpb25zIEJvcmVsVGFubmVyRGlzdHJpYnV0aW9uIEJvdHRvbSBCb3R0b21IYXRUcmFuc2Zvcm0gQm91bmRhcnlTdHlsZSBCb3VuZHMgQm94IEJveEJhc2VsaW5lU2hpZnQgQm94RGF0YSBCb3hEaW1lbnNpb25zIEJveGVkIEJveGVzIEJveEZvcm0gQm94Rm9ybUZvcm1hdFR5cGVzIEJveEZyYW1lIEJveElEIEJveE1hcmdpbnMgQm94TWF0cml4IEJveFJhdGlvcyBCb3hSb3RhdGlvbiBCb3hSb3RhdGlvblBvaW50IEJveFN0eWxlIEJveFdoaXNrZXJDaGFydCBCcmEgQnJhY2tldGluZ0JhciBCcmFLZXQgQnJheUN1cnRpc0Rpc3RhbmNlIEJyZWFkdGhGaXJzdFNjYW4gQnJlYWsgQnJvd24gQnJvd25Gb3JzeXRoZVRlc3QgQnJvd25pYW5CcmlkZ2VQcm9jZXNzIEJyb3dzZXJDYXRlZ29yeSBCU3BsaW5lQmFzaXMgQlNwbGluZUN1cnZlIEJTcGxpbmVDdXJ2ZTNEQm94IEJTcGxpbmVDdXJ2ZUJveCBCU3BsaW5lQ3VydmVCb3hPcHRpb25zIEJTcGxpbmVGdW5jdGlvbiBCU3BsaW5lU3VyZmFjZSBCU3BsaW5lU3VyZmFjZTNEQm94IEJ1YmJsZUNoYXJ0IEJ1YmJsZUNoYXJ0M0QgQnViYmxlU2NhbGUgQnViYmxlU2l6ZXMgQnVsbGV0R2F1Z2UgQnVzaW5lc3NEYXlRIEJ1dHRlcmZseUdyYXBoIEJ1dHRlcndvcnRoRmlsdGVyTW9kZWwgQnV0dG9uIEJ1dHRvbkJhciBCdXR0b25Cb3ggQnV0dG9uQm94T3B0aW9ucyBCdXR0b25DZWxsIEJ1dHRvbkNvbnRlbnRzIEJ1dHRvbkRhdGEgQnV0dG9uRXZhbHVhdG9yIEJ1dHRvbkV4cGFuZGFibGUgQnV0dG9uRnJhbWUgQnV0dG9uRnVuY3Rpb24gQnV0dG9uTWFyZ2lucyBCdXR0b25NaW5IZWlnaHQgQnV0dG9uTm90ZSBCdXR0b25Ob3RlYm9vayBCdXR0b25Tb3VyY2UgQnV0dG9uU3R5bGUgQnV0dG9uU3R5bGVNZW51TGlzdGluZyBCeXRlIEJ5dGVDb3VudCBCeXRlT3JkZXJpbmcgJyArXG4gICAgICAnQyBDYWNoZWRWYWx1ZSBDYWNoZUdyYXBoaWNzIENhbGVuZGFyRGF0YSBDYWxlbmRhclR5cGUgQ2FsbFBhY2tldCBDYW5iZXJyYURpc3RhbmNlIENhbmNlbCBDYW5jZWxCdXR0b24gQ2FuZGxlc3RpY2tDaGFydCBDYXAgQ2FwRm9ybSBDYXBpdGFsRGlmZmVyZW50aWFsRCBDYXJkaW5hbEJTcGxpbmVCYXNpcyBDYXJtaWNoYWVsTGFtYmRhIENhc2VzIENhc2hmbG93IENhc29yYXRpYW4gQ2F0YWxhbiBDYXRhbGFuTnVtYmVyIENhdGNoIENhdWNoeURpc3RyaWJ1dGlvbiBDYXVjaHlXaW5kb3cgQ2F5bGV5R3JhcGggQ0RGIENERkRlcGxveSBDREZJbmZvcm1hdGlvbiBDREZXYXZlbGV0IENlaWxpbmcgQ2VsbCBDZWxsQXV0b092ZXJ3cml0ZSBDZWxsQmFzZWxpbmUgQ2VsbEJvdW5kaW5nQm94IENlbGxCcmFja2V0T3B0aW9ucyBDZWxsQ2hhbmdlVGltZXMgQ2VsbENvbnRlbnRzIENlbGxDb250ZXh0IENlbGxEaW5nYmF0IENlbGxEeW5hbWljRXhwcmVzc2lvbiBDZWxsRWRpdER1cGxpY2F0ZSBDZWxsRWxlbWVudHNCb3VuZGluZ0JveCBDZWxsRWxlbWVudFNwYWNpbmdzIENlbGxFcGlsb2cgQ2VsbEV2YWx1YXRpb25EdXBsaWNhdGUgQ2VsbEV2YWx1YXRpb25GdW5jdGlvbiBDZWxsRXZlbnRBY3Rpb25zIENlbGxGcmFtZSBDZWxsRnJhbWVDb2xvciBDZWxsRnJhbWVMYWJlbE1hcmdpbnMgQ2VsbEZyYW1lTGFiZWxzIENlbGxGcmFtZU1hcmdpbnMgQ2VsbEdyb3VwIENlbGxHcm91cERhdGEgQ2VsbEdyb3VwaW5nIENlbGxHcm91cGluZ1J1bGVzIENlbGxIb3Jpem9udGFsU2Nyb2xsaW5nIENlbGxJRCBDZWxsTGFiZWwgQ2VsbExhYmVsQXV0b0RlbGV0ZSBDZWxsTGFiZWxNYXJnaW5zIENlbGxMYWJlbFBvc2l0aW9uaW5nIENlbGxNYXJnaW5zIENlbGxPYmplY3QgQ2VsbE9wZW4gQ2VsbFByaW50IENlbGxQcm9sb2cgQ2VsbHMgQ2VsbFNpemUgQ2VsbFN0eWxlIENlbGxUYWdzIENlbGx1bGFyQXV0b21hdG9uIENlbnNvcmVkRGlzdHJpYnV0aW9uIENlbnNvcmluZyBDZW50ZXIgQ2VudGVyRG90IENlbnRyYWxNb21lbnQgQ2VudHJhbE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiBDRm9ybSBDaGFtcGVybm93bmVOdW1iZXIgQ2hhblZlc2VCaW5hcml6ZSBDaGFyYWN0ZXIgQ2hhcmFjdGVyRW5jb2RpbmcgQ2hhcmFjdGVyRW5jb2RpbmdzUGF0aCBDaGFyYWN0ZXJpc3RpY0Z1bmN0aW9uIENoYXJhY3RlcmlzdGljUG9seW5vbWlhbCBDaGFyYWN0ZXJSYW5nZSBDaGFyYWN0ZXJzIENoYXJ0QmFzZVN0eWxlIENoYXJ0RWxlbWVudERhdGEgQ2hhcnRFbGVtZW50RGF0YUZ1bmN0aW9uIENoYXJ0RWxlbWVudEZ1bmN0aW9uIENoYXJ0RWxlbWVudHMgQ2hhcnRMYWJlbHMgQ2hhcnRMYXlvdXQgQ2hhcnRMZWdlbmRzIENoYXJ0U3R5bGUgQ2hlYnlzaGV2MUZpbHRlck1vZGVsIENoZWJ5c2hldjJGaWx0ZXJNb2RlbCBDaGVieXNoZXZEaXN0YW5jZSBDaGVieXNoZXZUIENoZWJ5c2hldlUgQ2hlY2sgQ2hlY2tBYm9ydCBDaGVja0FsbCBDaGVja2JveCBDaGVja2JveEJhciBDaGVja2JveEJveCBDaGVja2JveEJveE9wdGlvbnMgQ2hlbWljYWxEYXRhIENoZXNzYm9hcmREaXN0YW5jZSBDaGlEaXN0cmlidXRpb24gQ2hpbmVzZVJlbWFpbmRlciBDaGlTcXVhcmVEaXN0cmlidXRpb24gQ2hvaWNlQnV0dG9ucyBDaG9pY2VEaWFsb2cgQ2hvbGVza3lEZWNvbXBvc2l0aW9uIENob3AgQ2lyY2xlIENpcmNsZUJveCBDaXJjbGVEb3QgQ2lyY2xlTWludXMgQ2lyY2xlUGx1cyBDaXJjbGVUaW1lcyBDaXJjdWxhbnRHcmFwaCBDaXR5RGF0YSBDbGVhciBDbGVhckFsbCBDbGVhckF0dHJpYnV0ZXMgQ2xlYXJTeXN0ZW1DYWNoZSBDbGVic2NoR29yZGFuIENsaWNrUGFuZSBDbGlwIENsaXBib2FyZE5vdGVib29rIENsaXBGaWxsIENsaXBwaW5nU3R5bGUgQ2xpcFBsYW5lcyBDbGlwUmFuZ2UgQ2xvY2sgQ2xvY2tHYXVnZSBDbG9ja3dpc2VDb250b3VySW50ZWdyYWwgQ2xvc2UgQ2xvc2VkIENsb3NlS2VybmVscyBDbG9zZW5lc3NDZW50cmFsaXR5IENsb3NpbmcgQ2xvc2luZ0F1dG9TYXZlIENsb3NpbmdFdmVudCBDbHVzdGVyaW5nQ29tcG9uZW50cyBDTVlLQ29sb3IgQ29hcnNlIENvZWZmaWNpZW50IENvZWZmaWNpZW50QXJyYXlzIENvZWZmaWNpZW50RG9tYWluIENvZWZmaWNpZW50TGlzdCBDb2VmZmljaWVudFJ1bGVzIENvaWZsZXRXYXZlbGV0IENvbGxlY3QgQ29sb24gQ29sb25Gb3JtIENvbG9yQ29tYmluZSBDb2xvckNvbnZlcnQgQ29sb3JEYXRhIENvbG9yRGF0YUZ1bmN0aW9uIENvbG9yRnVuY3Rpb24gQ29sb3JGdW5jdGlvblNjYWxpbmcgQ29sb3JpemUgQ29sb3JOZWdhdGUgQ29sb3JPdXRwdXQgQ29sb3JQcm9maWxlRGF0YSBDb2xvclF1YW50aXplIENvbG9yUmVwbGFjZSBDb2xvclJ1bGVzIENvbG9yU2VsZWN0b3JTZXR0aW5ncyBDb2xvclNlcGFyYXRlIENvbG9yU2V0dGVyIENvbG9yU2V0dGVyQm94IENvbG9yU2V0dGVyQm94T3B0aW9ucyBDb2xvclNsaWRlciBDb2xvclNwYWNlIENvbHVtbiBDb2x1bW5BbGlnbm1lbnRzIENvbHVtbkJhY2tncm91bmRzIENvbHVtbkZvcm0gQ29sdW1uTGluZXMgQ29sdW1uc0VxdWFsIENvbHVtblNwYWNpbmdzIENvbHVtbldpZHRocyBDb21tb25EZWZhdWx0Rm9ybWF0VHlwZXMgQ29tbW9uZXN0IENvbW1vbmVzdEZpbHRlciBDb21tb25Vbml0cyBDb21tdW5pdHlCb3VuZGFyeVN0eWxlIENvbW11bml0eUdyYXBoUGxvdCBDb21tdW5pdHlMYWJlbHMgQ29tbXVuaXR5UmVnaW9uU3R5bGUgQ29tcGF0aWJsZVVuaXRRIENvbXBpbGF0aW9uT3B0aW9ucyBDb21waWxhdGlvblRhcmdldCBDb21waWxlIENvbXBpbGVkIENvbXBpbGVkRnVuY3Rpb24gQ29tcGxlbWVudCBDb21wbGV0ZUdyYXBoIENvbXBsZXRlR3JhcGhRIENvbXBsZXRlS2FyeVRyZWUgQ29tcGxldGlvbnNMaXN0UGFja2V0IENvbXBsZXggQ29tcGxleGVzIENvbXBsZXhFeHBhbmQgQ29tcGxleEluZmluaXR5IENvbXBsZXhpdHlGdW5jdGlvbiBDb21wb25lbnRNZWFzdXJlbWVudHMgJyArXG4gICAgICAnQ29tcG9uZW50d2lzZUNvbnRleHRNZW51IENvbXBvc2UgQ29tcG9zZUxpc3QgQ29tcG9zZVNlcmllcyBDb21wb3NpdGlvbiBDb21wb3VuZEV4cHJlc3Npb24gQ29tcG91bmRQb2lzc29uRGlzdHJpYnV0aW9uIENvbXBvdW5kUG9pc3NvblByb2Nlc3MgQ29tcG91bmRSZW5ld2FsUHJvY2VzcyBDb21wcmVzcyBDb21wcmVzc2VkRGF0YSBDb25kaXRpb24gQ29uZGl0aW9uYWxFeHByZXNzaW9uIENvbmRpdGlvbmVkIENvbmUgQ29uZUJveCBDb25maWRlbmNlTGV2ZWwgQ29uZmlkZW5jZVJhbmdlIENvbmZpZGVuY2VUcmFuc2Zvcm0gQ29uZmlndXJhdGlvblBhdGggQ29uZ3J1ZW50IENvbmp1Z2F0ZSBDb25qdWdhdGVUcmFuc3Bvc2UgQ29uanVuY3Rpb24gQ29ubmVjdCBDb25uZWN0ZWRDb21wb25lbnRzIENvbm5lY3RlZEdyYXBoUSBDb25uZXNXaW5kb3cgQ29ub3ZlclRlc3QgQ29uc29sZU1lc3NhZ2UgQ29uc29sZU1lc3NhZ2VQYWNrZXQgQ29uc29sZVByaW50IENvbnN0YW50IENvbnN0YW50QXJyYXkgQ29uc3RhbnRzIENvbnN0cmFpbmVkTWF4IENvbnN0cmFpbmVkTWluIENvbnRlbnRQYWRkaW5nIENvbnRlbnRzQm91bmRpbmdCb3ggQ29udGVudFNlbGVjdGFibGUgQ29udGVudFNpemUgQ29udGV4dCBDb250ZXh0TWVudSBDb250ZXh0cyBDb250ZXh0VG9GaWxlbmFtZSBDb250ZXh0VG9GaWxlTmFtZSBDb250aW51YXRpb24gQ29udGludWUgQ29udGludWVkRnJhY3Rpb24gQ29udGludWVkRnJhY3Rpb25LIENvbnRpbnVvdXNBY3Rpb24gQ29udGludW91c01hcmtvdlByb2Nlc3MgQ29udGludW91c1RpbWVNb2RlbFEgQ29udGludW91c1dhdmVsZXREYXRhIENvbnRpbnVvdXNXYXZlbGV0VHJhbnNmb3JtIENvbnRvdXJEZXRlY3QgQ29udG91ckdyYXBoaWNzIENvbnRvdXJJbnRlZ3JhbCBDb250b3VyTGFiZWxzIENvbnRvdXJMaW5lcyBDb250b3VyUGxvdCBDb250b3VyUGxvdDNEIENvbnRvdXJzIENvbnRvdXJTaGFkaW5nIENvbnRvdXJTbW9vdGhpbmcgQ29udG91clN0eWxlIENvbnRyYWhhcm1vbmljTWVhbiBDb250cm9sIENvbnRyb2xBY3RpdmUgQ29udHJvbEFsaWdubWVudCBDb250cm9sbGFiaWxpdHlHcmFtaWFuIENvbnRyb2xsYWJpbGl0eU1hdHJpeCBDb250cm9sbGFibGVEZWNvbXBvc2l0aW9uIENvbnRyb2xsYWJsZU1vZGVsUSBDb250cm9sbGVyRHVyYXRpb24gQ29udHJvbGxlckluZm9ybWF0aW9uIENvbnRyb2xsZXJJbmZvcm1hdGlvbkRhdGEgQ29udHJvbGxlckxpbmtpbmcgQ29udHJvbGxlck1hbmlwdWxhdGUgQ29udHJvbGxlck1ldGhvZCBDb250cm9sbGVyUGF0aCBDb250cm9sbGVyU3RhdGUgQ29udHJvbFBsYWNlbWVudCBDb250cm9sc1JlbmRlcmluZyBDb250cm9sVHlwZSBDb252ZXJnZW50cyBDb252ZXJzaW9uT3B0aW9ucyBDb252ZXJzaW9uUnVsZXMgQ29udmVydFRvQml0bWFwUGFja2V0IENvbnZlcnRUb1Bvc3RTY3JpcHQgQ29udmVydFRvUG9zdFNjcmlwdFBhY2tldCBDb252b2x2ZSBDb253YXlHcm91cENvMSBDb253YXlHcm91cENvMiBDb253YXlHcm91cENvMyBDb29yZGluYXRlQ2hhcnREYXRhIENvb3JkaW5hdGVzVG9vbE9wdGlvbnMgQ29vcmRpbmF0ZVRyYW5zZm9ybSBDb29yZGluYXRlVHJhbnNmb3JtRGF0YSBDb3ByaW1lUSBDb3Byb2R1Y3QgQ29wdWxhRGlzdHJpYnV0aW9uIENvcHlhYmxlIENvcHlEaXJlY3RvcnkgQ29weUZpbGUgQ29weVRhZyBDb3B5VG9DbGlwYm9hcmQgQ29ybmVyRmlsdGVyIENvcm5lck5laWdoYm9ycyBDb3JyZWxhdGlvbiBDb3JyZWxhdGlvbkRpc3RhbmNlIENvcnJlbGF0aW9uRnVuY3Rpb24gQ29ycmVsYXRpb25UZXN0IENvcyBDb3NoIENvc2hJbnRlZ3JhbCBDb3NpbmVEaXN0YW5jZSBDb3NpbmVXaW5kb3cgQ29zSW50ZWdyYWwgQ290IENvdGggQ291bnQgQ291bnRlckFzc2lnbm1lbnRzIENvdW50ZXJCb3ggQ291bnRlckJveE9wdGlvbnMgQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCBDb3VudGVyRXZhbHVhdG9yIENvdW50ZXJGdW5jdGlvbiBDb3VudGVySW5jcmVtZW50cyBDb3VudGVyU3R5bGUgQ291bnRlclN0eWxlTWVudUxpc3RpbmcgQ291bnRSb290cyBDb3VudHJ5RGF0YSBDb3ZhcmlhbmNlIENvdmFyaWFuY2VFc3RpbWF0b3JGdW5jdGlvbiBDb3ZhcmlhbmNlRnVuY3Rpb24gQ294aWFuRGlzdHJpYnV0aW9uIENveEluZ2Vyc29sbFJvc3NQcm9jZXNzIENveE1vZGVsIENveE1vZGVsRml0IENyYW1lclZvbk1pc2VzVGVzdCBDcmVhdGVBcmNoaXZlIENyZWF0ZURpYWxvZyBDcmVhdGVEaXJlY3RvcnkgQ3JlYXRlRG9jdW1lbnQgQ3JlYXRlSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXMgQ3JlYXRlUGFsZXR0ZSBDcmVhdGVQYWxldHRlUGFja2V0IENyZWF0ZVNjaGVkdWxlZFRhc2sgQ3JlYXRlVGVtcG9yYXJ5IENyZWF0ZVdpbmRvdyBDcml0aWNhbGl0eUZhaWx1cmVJbXBvcnRhbmNlIENyaXRpY2FsaXR5U3VjY2Vzc0ltcG9ydGFuY2UgQ3JpdGljYWxTZWN0aW9uIENyb3NzIENyb3NzaW5nRGV0ZWN0IENyb3NzTWF0cml4IENzYyBDc2NoIEN1YmVSb290IEN1YmljcyBDdWJvaWQgQ3Vib2lkQm94IEN1bXVsYW50IEN1bXVsYW50R2VuZXJhdGluZ0Z1bmN0aW9uIEN1cCBDdXBDYXAgQ3VybCBDdXJseURvdWJsZVF1b3RlIEN1cmx5UXVvdGUgQ3VycmVudEltYWdlIEN1cnJlbnRseVNwZWFraW5nUGFja2V0IEN1cnJlbnRWYWx1ZSBDdXJ2YXR1cmVGbG93RmlsdGVyIEN1cnZlQ2xvc2VkIEN5YW4gQ3ljbGVHcmFwaCBDeWNsZUluZGV4UG9seW5vbWlhbCBDeWNsZXMgQ3ljbGljR3JvdXAgQ3ljbG90b21pYyBDeWxpbmRlciBDeWxpbmRlckJveCBDeWxpbmRyaWNhbERlY29tcG9zaXRpb24gJyArXG4gICAgICAnRCBEYWd1bURpc3RyaWJ1dGlvbiBEYW1lcmF1TGV2ZW5zaHRlaW5EaXN0YW5jZSBEYW1waW5nRmFjdG9yIERhcmtlciBEYXNoZWQgRGFzaGluZyBEYXRhQ29tcHJlc3Npb24gRGF0YURpc3RyaWJ1dGlvbiBEYXRhUmFuZ2UgRGF0YVJldmVyc2VkIERhdGUgRGF0ZURlbGltaXRlcnMgRGF0ZURpZmZlcmVuY2UgRGF0ZUZ1bmN0aW9uIERhdGVMaXN0IERhdGVMaXN0TG9nUGxvdCBEYXRlTGlzdFBsb3QgRGF0ZVBhdHRlcm4gRGF0ZVBsdXMgRGF0ZVJhbmdlIERhdGVTdHJpbmcgRGF0ZVRpY2tzRm9ybWF0IERhdWJlY2hpZXNXYXZlbGV0IERhdmlzRGlzdHJpYnV0aW9uIERhd3NvbkYgRGF5Q291bnQgRGF5Q291bnRDb252ZW50aW9uIERheU1hdGNoUSBEYXlOYW1lIERheVBsdXMgRGF5UmFuZ2UgRGF5Um91bmQgRGVCcnVpam5HcmFwaCBEZWJ1ZyBEZWJ1Z1RhZyBEZWNpbWFsIERlY2xhcmVLbm93blN5bWJvbHMgRGVjbGFyZVBhY2thZ2UgRGVjb21wb3NlIERlY3JlbWVudCBEZWRla2luZEV0YSBEZWZhdWx0IERlZmF1bHRBeGVzU3R5bGUgRGVmYXVsdEJhc2VTdHlsZSBEZWZhdWx0Qm94U3R5bGUgRGVmYXVsdEJ1dHRvbiBEZWZhdWx0Q29sb3IgRGVmYXVsdENvbnRyb2xQbGFjZW1lbnQgRGVmYXVsdER1cGxpY2F0ZUNlbGxTdHlsZSBEZWZhdWx0RHVyYXRpb24gRGVmYXVsdEVsZW1lbnQgRGVmYXVsdEZhY2VHcmlkc1N0eWxlIERlZmF1bHRGaWVsZEhpbnRTdHlsZSBEZWZhdWx0Rm9udCBEZWZhdWx0Rm9udFByb3BlcnRpZXMgRGVmYXVsdEZvcm1hdFR5cGUgRGVmYXVsdEZvcm1hdFR5cGVGb3JTdHlsZSBEZWZhdWx0RnJhbWVTdHlsZSBEZWZhdWx0RnJhbWVUaWNrc1N0eWxlIERlZmF1bHRHcmlkTGluZXNTdHlsZSBEZWZhdWx0SW5saW5lRm9ybWF0VHlwZSBEZWZhdWx0SW5wdXRGb3JtYXRUeXBlIERlZmF1bHRMYWJlbFN0eWxlIERlZmF1bHRNZW51U3R5bGUgRGVmYXVsdE5hdHVyYWxMYW5ndWFnZSBEZWZhdWx0TmV3Q2VsbFN0eWxlIERlZmF1bHROZXdJbmxpbmVDZWxsU3R5bGUgRGVmYXVsdE5vdGVib29rIERlZmF1bHRPcHRpb25zIERlZmF1bHRPdXRwdXRGb3JtYXRUeXBlIERlZmF1bHRTdHlsZSBEZWZhdWx0U3R5bGVEZWZpbml0aW9ucyBEZWZhdWx0VGV4dEZvcm1hdFR5cGUgRGVmYXVsdFRleHRJbmxpbmVGb3JtYXRUeXBlIERlZmF1bHRUaWNrc1N0eWxlIERlZmF1bHRUb29sdGlwU3R5bGUgRGVmYXVsdFZhbHVlcyBEZWZlciBEZWZpbmVFeHRlcm5hbCBEZWZpbmVJbnB1dFN0cmVhbU1ldGhvZCBEZWZpbmVPdXRwdXRTdHJlYW1NZXRob2QgRGVmaW5pdGlvbiBEZWdyZWUgRGVncmVlQ2VudHJhbGl0eSBEZWdyZWVHcmFwaERpc3RyaWJ1dGlvbiBEZWdyZWVMZXhpY29ncmFwaGljIERlZ3JlZVJldmVyc2VMZXhpY29ncmFwaGljIERlaW5pdGlhbGl6YXRpb24gRGVsIERlbGV0YWJsZSBEZWxldGUgRGVsZXRlQm9yZGVyQ29tcG9uZW50cyBEZWxldGVDYXNlcyBEZWxldGVDb250ZW50cyBEZWxldGVEaXJlY3RvcnkgRGVsZXRlRHVwbGljYXRlcyBEZWxldGVGaWxlIERlbGV0ZVNtYWxsQ29tcG9uZW50cyBEZWxldGVXaXRoQ29udGVudHMgRGVsZXRpb25XYXJuaW5nIERlbGltaXRlciBEZWxpbWl0ZXJGbGFzaFRpbWUgRGVsaW1pdGVyTWF0Y2hpbmcgRGVsaW1pdGVycyBEZW5vbWluYXRvciBEZW5zaXR5R3JhcGhpY3MgRGVuc2l0eUhpc3RvZ3JhbSBEZW5zaXR5UGxvdCBEZXBlbmRlbnRWYXJpYWJsZXMgRGVwbG95IERlcGxveWVkIERlcHRoIERlcHRoRmlyc3RTY2FuIERlcml2YXRpdmUgRGVyaXZhdGl2ZUZpbHRlciBEZXNjcmlwdG9yU3RhdGVTcGFjZSBEZXNpZ25NYXRyaXggRGV0IERHYXVzc2lhbldhdmVsZXQgRGlhY3JpdGljYWxQb3NpdGlvbmluZyBEaWFnb25hbCBEaWFnb25hbE1hdHJpeCBEaWFsb2cgRGlhbG9nSW5kZW50IERpYWxvZ0lucHV0IERpYWxvZ0xldmVsIERpYWxvZ05vdGVib29rIERpYWxvZ1Byb2xvZyBEaWFsb2dSZXR1cm4gRGlhbG9nU3ltYm9scyBEaWFtb25kIERpYW1vbmRNYXRyaXggRGljZURpc3NpbWlsYXJpdHkgRGljdGlvbmFyeUxvb2t1cCBEaWZmZXJlbmNlRGVsdGEgRGlmZmVyZW5jZU9yZGVyIERpZmZlcmVuY2VSb290IERpZmZlcmVuY2VSb290UmVkdWNlIERpZmZlcmVuY2VzIERpZmZlcmVudGlhbEQgRGlmZmVyZW50aWFsUm9vdCBEaWZmZXJlbnRpYWxSb290UmVkdWNlIERpZmZlcmVudGlhdG9yRmlsdGVyIERpZ2l0QmxvY2sgRGlnaXRCbG9ja01pbmltdW0gRGlnaXRDaGFyYWN0ZXIgRGlnaXRDb3VudCBEaWdpdFEgRGloZWRyYWxHcm91cCBEaWxhdGlvbiBEaW1lbnNpb25zIERpcmFjQ29tYiBEaXJhY0RlbHRhIERpcmVjdGVkRWRnZSBEaXJlY3RlZEVkZ2VzIERpcmVjdGVkR3JhcGggRGlyZWN0ZWRHcmFwaFEgRGlyZWN0ZWRJbmZpbml0eSBEaXJlY3Rpb24gRGlyZWN0aXZlIERpcmVjdG9yeSBEaXJlY3RvcnlOYW1lIERpcmVjdG9yeVEgRGlyZWN0b3J5U3RhY2sgRGlyaWNobGV0Q2hhcmFjdGVyIERpcmljaGxldENvbnZvbHZlIERpcmljaGxldERpc3RyaWJ1dGlvbiBEaXJpY2hsZXRMIERpcmljaGxldFRyYW5zZm9ybSBEaXJpY2hsZXRXaW5kb3cgRGlzYWJsZUNvbnNvbGVQcmludFBhY2tldCBEaXNjcmV0ZUNoaXJwWlRyYW5zZm9ybSBEaXNjcmV0ZUNvbnZvbHZlIERpc2NyZXRlRGVsdGEgRGlzY3JldGVIYWRhbWFyZFRyYW5zZm9ybSBEaXNjcmV0ZUluZGljYXRvciBEaXNjcmV0ZUxRRXN0aW1hdG9yR2FpbnMgRGlzY3JldGVMUVJlZ3VsYXRvckdhaW5zIERpc2NyZXRlTHlhcHVub3ZTb2x2ZSBEaXNjcmV0ZU1hcmtvdlByb2Nlc3MgRGlzY3JldGVQbG90IERpc2NyZXRlUGxvdDNEIERpc2NyZXRlUmF0aW8gRGlzY3JldGVSaWNjYXRpU29sdmUgRGlzY3JldGVTaGlmdCBEaXNjcmV0ZVRpbWVNb2RlbFEgRGlzY3JldGVVbmlmb3JtRGlzdHJpYnV0aW9uIERpc2NyZXRlVmFyaWFibGVzIERpc2NyZXRlV2F2ZWxldERhdGEgRGlzY3JldGVXYXZlbGV0UGFja2V0VHJhbnNmb3JtICcgK1xuICAgICAgJ0Rpc2NyZXRlV2F2ZWxldFRyYW5zZm9ybSBEaXNjcmltaW5hbnQgRGlzanVuY3Rpb24gRGlzayBEaXNrQm94IERpc2tNYXRyaXggRGlzcGF0Y2ggRGlzcGVyc2lvbkVzdGltYXRvckZ1bmN0aW9uIERpc3BsYXkgRGlzcGxheUFsbFN0ZXBzIERpc3BsYXlFbmRQYWNrZXQgRGlzcGxheUZsdXNoSW1hZ2VQYWNrZXQgRGlzcGxheUZvcm0gRGlzcGxheUZ1bmN0aW9uIERpc3BsYXlQYWNrZXQgRGlzcGxheVJ1bGVzIERpc3BsYXlTZXRTaXplUGFja2V0IERpc3BsYXlTdHJpbmcgRGlzcGxheVRlbXBvcmFyeSBEaXNwbGF5V2l0aCBEaXNwbGF5V2l0aFJlZiBEaXNwbGF5V2l0aFZhcmlhYmxlIERpc3RhbmNlRnVuY3Rpb24gRGlzdGFuY2VUcmFuc2Zvcm0gRGlzdHJpYnV0ZSBEaXN0cmlidXRlZCBEaXN0cmlidXRlZENvbnRleHRzIERpc3RyaWJ1dGVEZWZpbml0aW9ucyBEaXN0cmlidXRpb25DaGFydCBEaXN0cmlidXRpb25Eb21haW4gRGlzdHJpYnV0aW9uRml0VGVzdCBEaXN0cmlidXRpb25QYXJhbWV0ZXJBc3N1bXB0aW9ucyBEaXN0cmlidXRpb25QYXJhbWV0ZXJRIERpdGhlcmluZyBEaXYgRGl2ZXJnZW5jZSBEaXZpZGUgRGl2aWRlQnkgRGl2aWRlcnMgRGl2aXNpYmxlIERpdmlzb3JzIERpdmlzb3JTaWdtYSBEaXZpc29yU3VtIERNU0xpc3QgRE1TU3RyaW5nIERvIERvY2tlZENlbGxzIERvY3VtZW50Tm90ZWJvb2sgRG9taW5hbnRDb2xvcnMgRE9TVGV4dEZvcm1hdCBEb3QgRG90RGFzaGVkIERvdEVxdWFsIERvdHRlZCBEb3VibGVCcmFja2V0aW5nQmFyIERvdWJsZUNvbnRvdXJJbnRlZ3JhbCBEb3VibGVEb3duQXJyb3cgRG91YmxlTGVmdEFycm93IERvdWJsZUxlZnRSaWdodEFycm93IERvdWJsZUxlZnRUZWUgRG91YmxlTG9uZ0xlZnRBcnJvdyBEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3cgRG91YmxlTG9uZ1JpZ2h0QXJyb3cgRG91YmxlUmlnaHRBcnJvdyBEb3VibGVSaWdodFRlZSBEb3VibGVVcEFycm93IERvdWJsZVVwRG93bkFycm93IERvdWJsZVZlcnRpY2FsQmFyIERvdWJseUluZmluaXRlIERvd24gRG93bkFycm93IERvd25BcnJvd0JhciBEb3duQXJyb3dVcEFycm93IERvd25MZWZ0UmlnaHRWZWN0b3IgRG93bkxlZnRUZWVWZWN0b3IgRG93bkxlZnRWZWN0b3IgRG93bkxlZnRWZWN0b3JCYXIgRG93blJpZ2h0VGVlVmVjdG9yIERvd25SaWdodFZlY3RvciBEb3duUmlnaHRWZWN0b3JCYXIgRG93bnNhbXBsZSBEb3duVGVlIERvd25UZWVBcnJvdyBEb3duVmFsdWVzIERyYWdBbmREcm9wIERyYXdFZGdlcyBEcmF3RnJvbnRGYWNlcyBEcmF3SGlnaGxpZ2h0ZWQgRHJvcCBEU29sdmUgRHQgRHVhbExpbmVhclByb2dyYW1taW5nIER1YWxTeXN0ZW1zTW9kZWwgRHVtcEdldCBEdW1wU2F2ZSBEdXBsaWNhdGVGcmVlUSBEeW5hbWljIER5bmFtaWNCb3ggRHluYW1pY0JveE9wdGlvbnMgRHluYW1pY0V2YWx1YXRpb25UaW1lb3V0IER5bmFtaWNMb2NhdGlvbiBEeW5hbWljTW9kdWxlIER5bmFtaWNNb2R1bGVCb3ggRHluYW1pY01vZHVsZUJveE9wdGlvbnMgRHluYW1pY01vZHVsZVBhcmVudCBEeW5hbWljTW9kdWxlVmFsdWVzIER5bmFtaWNOYW1lIER5bmFtaWNOYW1lc3BhY2UgRHluYW1pY1JlZmVyZW5jZSBEeW5hbWljU2V0dGluZyBEeW5hbWljVXBkYXRpbmcgRHluYW1pY1dyYXBwZXIgRHluYW1pY1dyYXBwZXJCb3ggRHluYW1pY1dyYXBwZXJCb3hPcHRpb25zICcgK1xuICAgICAgJ0UgRWNjZW50cmljaXR5Q2VudHJhbGl0eSBFZGdlQWRkIEVkZ2VCZXR3ZWVubmVzc0NlbnRyYWxpdHkgRWRnZUNhcGFjaXR5IEVkZ2VDYXBGb3JtIEVkZ2VDb2xvciBFZGdlQ29ubmVjdGl2aXR5IEVkZ2VDb3N0IEVkZ2VDb3VudCBFZGdlQ292ZXJRIEVkZ2VEYXNoaW5nIEVkZ2VEZWxldGUgRWRnZURldGVjdCBFZGdlRm9ybSBFZGdlSW5kZXggRWRnZUpvaW5Gb3JtIEVkZ2VMYWJlbGluZyBFZGdlTGFiZWxzIEVkZ2VMYWJlbFN0eWxlIEVkZ2VMaXN0IEVkZ2VPcGFjaXR5IEVkZ2VRIEVkZ2VSZW5kZXJpbmdGdW5jdGlvbiBFZGdlUnVsZXMgRWRnZVNoYXBlRnVuY3Rpb24gRWRnZVN0eWxlIEVkZ2VUaGlja25lc3MgRWRnZVdlaWdodCBFZGl0YWJsZSBFZGl0QnV0dG9uU2V0dGluZ3MgRWRpdENlbGxUYWdzU2V0dGluZ3MgRWRpdERpc3RhbmNlIEVmZmVjdGl2ZUludGVyZXN0IEVpZ2Vuc3lzdGVtIEVpZ2VudmFsdWVzIEVpZ2VudmVjdG9yQ2VudHJhbGl0eSBFaWdlbnZlY3RvcnMgRWxlbWVudCBFbGVtZW50RGF0YSBFbGltaW5hdGUgRWxpbWluYXRpb25PcmRlciBFbGxpcHRpY0UgRWxsaXB0aWNFeHAgRWxsaXB0aWNFeHBQcmltZSBFbGxpcHRpY0YgRWxsaXB0aWNGaWx0ZXJNb2RlbCBFbGxpcHRpY0sgRWxsaXB0aWNMb2cgRWxsaXB0aWNOb21lUSBFbGxpcHRpY1BpIEVsbGlwdGljUmVkdWNlZEhhbGZQZXJpb2RzIEVsbGlwdGljVGhldGEgRWxsaXB0aWNUaGV0YVByaW1lIEVtaXRTb3VuZCBFbXBoYXNpemVTeW50YXhFcnJvcnMgRW1waXJpY2FsRGlzdHJpYnV0aW9uIEVtcHR5IEVtcHR5R3JhcGhRIEVuYWJsZUNvbnNvbGVQcmludFBhY2tldCBFbmFibGVkIEVuY29kZSBFbmQgRW5kQWRkIEVuZERpYWxvZ1BhY2tldCBFbmRGcm9udEVuZEludGVyYWN0aW9uUGFja2V0IEVuZE9mRmlsZSBFbmRPZkxpbmUgRW5kT2ZTdHJpbmcgRW5kUGFja2FnZSBFbmdpbmVlcmluZ0Zvcm0gRW50ZXIgRW50ZXJFeHByZXNzaW9uUGFja2V0IEVudGVyVGV4dFBhY2tldCBFbnRyb3B5IEVudHJvcHlGaWx0ZXIgRW52aXJvbm1lbnQgRXBpbG9nIEVxdWFsIEVxdWFsQ29sdW1ucyBFcXVhbFJvd3MgRXF1YWxUaWxkZSBFcXVhdGVkVG8gRXF1aWxpYnJpdW0gRXF1aXJpcHBsZUZpbHRlcktlcm5lbCBFcXVpdmFsZW50IEVyZiBFcmZjIEVyZmkgRXJsYW5nQiBFcmxhbmdDIEVybGFuZ0Rpc3RyaWJ1dGlvbiBFcm9zaW9uIEVycm9yQm94IEVycm9yQm94T3B0aW9ucyBFcnJvck5vcm0gRXJyb3JQYWNrZXQgRXJyb3JzRGlhbG9nU2V0dGluZ3MgRXN0aW1hdGVkRGlzdHJpYnV0aW9uIEVzdGltYXRlZFByb2Nlc3MgRXN0aW1hdG9yR2FpbnMgRXN0aW1hdG9yUmVndWxhdG9yIEV1Y2xpZGVhbkRpc3RhbmNlIEV1bGVyRSBFdWxlckdhbW1hIEV1bGVyaWFuR3JhcGhRIEV1bGVyUGhpIEV2YWx1YXRhYmxlIEV2YWx1YXRlIEV2YWx1YXRlZCBFdmFsdWF0ZVBhY2tldCBFdmFsdWF0aW9uQ2VsbCBFdmFsdWF0aW9uQ29tcGxldGlvbkFjdGlvbiBFdmFsdWF0aW9uRWxlbWVudHMgRXZhbHVhdGlvbk1vZGUgRXZhbHVhdGlvbk1vbml0b3IgRXZhbHVhdGlvbk5vdGVib29rIEV2YWx1YXRpb25PYmplY3QgRXZhbHVhdGlvbk9yZGVyIEV2YWx1YXRvciBFdmFsdWF0b3JOYW1lcyBFdmVuUSBFdmVudERhdGEgRXZlbnRFdmFsdWF0b3IgRXZlbnRIYW5kbGVyIEV2ZW50SGFuZGxlclRhZyBFdmVudExhYmVscyBFeGFjdEJsYWNrbWFuV2luZG93IEV4YWN0TnVtYmVyUSBFeGFjdFJvb3RJc29sYXRpb24gRXhhbXBsZURhdGEgRXhjZXB0IEV4Y2x1ZGVkRm9ybXMgRXhjbHVkZVBvZHMgRXhjbHVzaW9ucyBFeGNsdXNpb25zU3R5bGUgRXhpc3RzIEV4aXQgRXhpdERpYWxvZyBFeHAgRXhwYW5kIEV4cGFuZEFsbCBFeHBhbmREZW5vbWluYXRvciBFeHBhbmRGaWxlTmFtZSBFeHBhbmROdW1lcmF0b3IgRXhwZWN0YXRpb24gRXhwZWN0YXRpb25FIEV4cGVjdGVkVmFsdWUgRXhwR2FtbWFEaXN0cmlidXRpb24gRXhwSW50ZWdyYWxFIEV4cEludGVncmFsRWkgRXhwb25lbnQgRXhwb25lbnRGdW5jdGlvbiBFeHBvbmVudGlhbERpc3RyaWJ1dGlvbiBFeHBvbmVudGlhbEZhbWlseSBFeHBvbmVudGlhbEdlbmVyYXRpbmdGdW5jdGlvbiBFeHBvbmVudGlhbE1vdmluZ0F2ZXJhZ2UgRXhwb25lbnRpYWxQb3dlckRpc3RyaWJ1dGlvbiBFeHBvbmVudFBvc2l0aW9uIEV4cG9uZW50U3RlcCBFeHBvcnQgRXhwb3J0QXV0b1JlcGxhY2VtZW50cyBFeHBvcnRQYWNrZXQgRXhwb3J0U3RyaW5nIEV4cHJlc3Npb24gRXhwcmVzc2lvbkNlbGwgRXhwcmVzc2lvblBhY2tldCBFeHBUb1RyaWcgRXh0ZW5kZWRHQ0QgRXh0ZW5zaW9uIEV4dGVudEVsZW1lbnRGdW5jdGlvbiBFeHRlbnRNYXJrZXJzIEV4dGVudFNpemUgRXh0ZXJuYWxDYWxsIEV4dGVybmFsRGF0YUNoYXJhY3RlckVuY29kaW5nIEV4dHJhY3QgRXh0cmFjdEFyY2hpdmUgRXh0cmVtZVZhbHVlRGlzdHJpYnV0aW9uICcgK1xuICAgICAgJ0ZhY2VGb3JtIEZhY2VHcmlkcyBGYWNlR3JpZHNTdHlsZSBGYWN0b3IgRmFjdG9yQ29tcGxldGUgRmFjdG9yaWFsIEZhY3RvcmlhbDIgRmFjdG9yaWFsTW9tZW50IEZhY3RvcmlhbE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiBGYWN0b3JpYWxQb3dlciBGYWN0b3JJbnRlZ2VyIEZhY3Rvckxpc3QgRmFjdG9yU3F1YXJlRnJlZSBGYWN0b3JTcXVhcmVGcmVlTGlzdCBGYWN0b3JUZXJtcyBGYWN0b3JUZXJtc0xpc3QgRmFpbCBGYWlsdXJlRGlzdHJpYnV0aW9uIEZhbHNlIEZBUklNQVByb2Nlc3MgRkVEaXNhYmxlQ29uc29sZVByaW50UGFja2V0IEZlZWRiYWNrU2VjdG9yIEZlZWRiYWNrU2VjdG9yU3R5bGUgRmVlZGJhY2tUeXBlIEZFRW5hYmxlQ29uc29sZVByaW50UGFja2V0IEZpYm9uYWNjaSBGaWVsZEhpbnQgRmllbGRIaW50U3R5bGUgRmllbGRNYXNrZWQgRmllbGRTaXplIEZpbGUgRmlsZUJhc2VOYW1lIEZpbGVCeXRlQ291bnQgRmlsZURhdGUgRmlsZUV4aXN0c1EgRmlsZUV4dGVuc2lvbiBGaWxlRm9ybWF0IEZpbGVIYXNoIEZpbGVJbmZvcm1hdGlvbiBGaWxlTmFtZSBGaWxlTmFtZURlcHRoIEZpbGVOYW1lRGlhbG9nU2V0dGluZ3MgRmlsZU5hbWVEcm9wIEZpbGVOYW1lSm9pbiBGaWxlTmFtZXMgRmlsZU5hbWVTZXR0ZXIgRmlsZU5hbWVTcGxpdCBGaWxlTmFtZVRha2UgRmlsZVByaW50IEZpbGVUeXBlIEZpbGxlZEN1cnZlIEZpbGxlZEN1cnZlQm94IEZpbGxpbmcgRmlsbGluZ1N0eWxlIEZpbGxpbmdUcmFuc2Zvcm0gRmlsdGVyUnVsZXMgRmluYW5jaWFsQm9uZCBGaW5hbmNpYWxEYXRhIEZpbmFuY2lhbERlcml2YXRpdmUgRmluYW5jaWFsSW5kaWNhdG9yIEZpbmQgRmluZEFyZ01heCBGaW5kQXJnTWluIEZpbmRDbGlxdWUgRmluZENsdXN0ZXJzIEZpbmRDdXJ2ZVBhdGggRmluZERpc3RyaWJ1dGlvblBhcmFtZXRlcnMgRmluZERpdmlzaW9ucyBGaW5kRWRnZUNvdmVyIEZpbmRFZGdlQ3V0IEZpbmRFdWxlcmlhbkN5Y2xlIEZpbmRGYWNlcyBGaW5kRmlsZSBGaW5kRml0IEZpbmRHZW5lcmF0aW5nRnVuY3Rpb24gRmluZEdlb0xvY2F0aW9uIEZpbmRHZW9tZXRyaWNUcmFuc2Zvcm0gRmluZEdyYXBoQ29tbXVuaXRpZXMgRmluZEdyYXBoSXNvbW9ycGhpc20gRmluZEdyYXBoUGFydGl0aW9uIEZpbmRIYW1pbHRvbmlhbkN5Y2xlIEZpbmRJbmRlcGVuZGVudEVkZ2VTZXQgRmluZEluZGVwZW5kZW50VmVydGV4U2V0IEZpbmRJbnN0YW5jZSBGaW5kSW50ZWdlck51bGxWZWN0b3IgRmluZEtDbGFuIEZpbmRLQ2xpcXVlIEZpbmRLQ2x1YiBGaW5kS1BsZXggRmluZExpYnJhcnkgRmluZExpbmVhclJlY3VycmVuY2UgRmluZExpc3QgRmluZE1heGltdW0gRmluZE1heGltdW1GbG93IEZpbmRNYXhWYWx1ZSBGaW5kTWluaW11bSBGaW5kTWluaW11bUNvc3RGbG93IEZpbmRNaW5pbXVtQ3V0IEZpbmRNaW5WYWx1ZSBGaW5kUGVybXV0YXRpb24gRmluZFBvc3RtYW5Ub3VyIEZpbmRQcm9jZXNzUGFyYW1ldGVycyBGaW5kUm9vdCBGaW5kU2VxdWVuY2VGdW5jdGlvbiBGaW5kU2V0dGluZ3MgRmluZFNob3J0ZXN0UGF0aCBGaW5kU2hvcnRlc3RUb3VyIEZpbmRUaHJlc2hvbGQgRmluZFZlcnRleENvdmVyIEZpbmRWZXJ0ZXhDdXQgRmluZSBGaW5pc2hEeW5hbWljIEZpbml0ZUFiZWxpYW5Hcm91cENvdW50IEZpbml0ZUdyb3VwQ291bnQgRmluaXRlR3JvdXBEYXRhIEZpcnN0IEZpcnN0UGFzc2FnZVRpbWVEaXN0cmlidXRpb24gRmlzY2hlckdyb3VwRmkyMiBGaXNjaGVyR3JvdXBGaTIzIEZpc2NoZXJHcm91cEZpMjRQcmltZSBGaXNoZXJIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvbiBGaXNoZXJSYXRpb1Rlc3QgRmlzaGVyWkRpc3RyaWJ1dGlvbiBGaXQgRml0QWxsIEZpdHRlZE1vZGVsIEZpeGVkUG9pbnQgRml4ZWRQb2ludExpc3QgRmxhc2hTZWxlY3Rpb24gRmxhdCBGbGF0dGVuIEZsYXR0ZW5BdCBGbGF0VG9wV2luZG93IEZsaXBWaWV3IEZsb29yIEZsdXNoUHJpbnRPdXRwdXRQYWNrZXQgRm9sZCBGb2xkTGlzdCBGb250IEZvbnRDb2xvciBGb250RmFtaWx5IEZvbnRGb3JtIEZvbnROYW1lIEZvbnRPcGFjaXR5IEZvbnRQb3N0U2NyaXB0TmFtZSBGb250UHJvcGVydGllcyBGb250UmVlbmNvZGluZyBGb250U2l6ZSBGb250U2xhbnQgRm9udFN1YnN0aXR1dGlvbnMgRm9udFRyYWNraW5nIEZvbnRWYXJpYXRpb25zIEZvbnRXZWlnaHQgRm9yIEZvckFsbCBGb3JtYXQgRm9ybWF0UnVsZXMgRm9ybWF0VHlwZSBGb3JtYXRUeXBlQXV0b0NvbnZlcnQgRm9ybWF0VmFsdWVzIEZvcm1Cb3ggRm9ybUJveE9wdGlvbnMgRm9ydHJhbkZvcm0gRm9yd2FyZCBGb3J3YXJkQmFja3dhcmQgRm91cmllciBGb3VyaWVyQ29lZmZpY2llbnQgRm91cmllckNvc0NvZWZmaWNpZW50IEZvdXJpZXJDb3NTZXJpZXMgRm91cmllckNvc1RyYW5zZm9ybSBGb3VyaWVyRENUIEZvdXJpZXJEQ1RGaWx0ZXIgRm91cmllckRDVE1hdHJpeCBGb3VyaWVyRFNUIEZvdXJpZXJEU1RNYXRyaXggRm91cmllck1hdHJpeCBGb3VyaWVyUGFyYW1ldGVycyBGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gRm91cmllclNlcmllcyBGb3VyaWVyU2luQ29lZmZpY2llbnQgRm91cmllclNpblNlcmllcyBGb3VyaWVyU2luVHJhbnNmb3JtIEZvdXJpZXJUcmFuc2Zvcm0gRm91cmllclRyaWdTZXJpZXMgRnJhY3Rpb25hbEJyb3duaWFuTW90aW9uUHJvY2VzcyBGcmFjdGlvbmFsUGFydCBGcmFjdGlvbkJveCBGcmFjdGlvbkJveE9wdGlvbnMgRnJhY3Rpb25MaW5lIEZyYW1lIEZyYW1lQm94IEZyYW1lQm94T3B0aW9ucyBGcmFtZWQgRnJhbWVJbnNldCBGcmFtZUxhYmVsIEZyYW1lbGVzcyBGcmFtZU1hcmdpbnMgRnJhbWVTdHlsZSBGcmFtZVRpY2tzIEZyYW1lVGlja3NTdHlsZSBGUmF0aW9EaXN0cmlidXRpb24gRnJlY2hldERpc3RyaWJ1dGlvbiBGcmVlUSBGcmVxdWVuY3lTYW1wbGluZ0ZpbHRlcktlcm5lbCBGcmVzbmVsQyBGcmVzbmVsUyBGcmlkYXkgRnJvYmVuaXVzTnVtYmVyIEZyb2Jlbml1c1NvbHZlICcgK1xuICAgICAgJ0Zyb21DaGFyYWN0ZXJDb2RlIEZyb21Db2VmZmljaWVudFJ1bGVzIEZyb21Db250aW51ZWRGcmFjdGlvbiBGcm9tRGF0ZSBGcm9tRGlnaXRzIEZyb21ETVMgRnJvbnQgRnJvbnRFbmREeW5hbWljRXhwcmVzc2lvbiBGcm9udEVuZEV2ZW50QWN0aW9ucyBGcm9udEVuZEV4ZWN1dGUgRnJvbnRFbmRPYmplY3QgRnJvbnRFbmRSZXNvdXJjZSBGcm9udEVuZFJlc291cmNlU3RyaW5nIEZyb250RW5kU3RhY2tTaXplIEZyb250RW5kVG9rZW4gRnJvbnRFbmRUb2tlbkV4ZWN1dGUgRnJvbnRFbmRWYWx1ZUNhY2hlIEZyb250RW5kVmVyc2lvbiBGcm9udEZhY2VDb2xvciBGcm9udEZhY2VPcGFjaXR5IEZ1bGwgRnVsbEF4ZXMgRnVsbERlZmluaXRpb24gRnVsbEZvcm0gRnVsbEdyYXBoaWNzIEZ1bGxPcHRpb25zIEZ1bGxTaW1wbGlmeSBGdW5jdGlvbiBGdW5jdGlvbkV4cGFuZCBGdW5jdGlvbkludGVycG9sYXRpb24gRnVuY3Rpb25TcGFjZSBGdXNzZWxsVmVzZWx5SW1wb3J0YW5jZSAnICtcbiAgICAgICdHYWJvckZpbHRlciBHYWJvck1hdHJpeCBHYWJvcldhdmVsZXQgR2Fpbk1hcmdpbnMgR2FpblBoYXNlTWFyZ2lucyBHYW1tYSBHYW1tYURpc3RyaWJ1dGlvbiBHYW1tYVJlZ3VsYXJpemVkIEdhcFBlbmFsdHkgR2F0aGVyIEdhdGhlckJ5IEdhdWdlRmFjZUVsZW1lbnRGdW5jdGlvbiBHYXVnZUZhY2VTdHlsZSBHYXVnZUZyYW1lRWxlbWVudEZ1bmN0aW9uIEdhdWdlRnJhbWVTaXplIEdhdWdlRnJhbWVTdHlsZSBHYXVnZUxhYmVscyBHYXVnZU1hcmtlcnMgR2F1Z2VTdHlsZSBHYXVzc2lhbkZpbHRlciBHYXVzc2lhbkludGVnZXJzIEdhdXNzaWFuTWF0cml4IEdhdXNzaWFuV2luZG93IEdDRCBHZWdlbmJhdWVyQyBHZW5lcmFsIEdlbmVyYWxpemVkTGluZWFyTW9kZWxGaXQgR2VuZXJhdGVDb25kaXRpb25zIEdlbmVyYXRlZENlbGwgR2VuZXJhdGVkUGFyYW1ldGVycyBHZW5lcmF0aW5nRnVuY3Rpb24gR2VuZXJpYyBHZW5lcmljQ3lsaW5kcmljYWxEZWNvbXBvc2l0aW9uIEdlbm9tZURhdGEgR2Vub21lTG9va3VwIEdlb2Rlc2ljQ2xvc2luZyBHZW9kZXNpY0RpbGF0aW9uIEdlb2Rlc2ljRXJvc2lvbiBHZW9kZXNpY09wZW5pbmcgR2VvRGVzdGluYXRpb24gR2VvZGVzeURhdGEgR2VvRGlyZWN0aW9uIEdlb0Rpc3RhbmNlIEdlb0dyaWRQb3NpdGlvbiBHZW9tZXRyaWNCcm93bmlhbk1vdGlvblByb2Nlc3MgR2VvbWV0cmljRGlzdHJpYnV0aW9uIEdlb21ldHJpY01lYW4gR2VvbWV0cmljTWVhbkZpbHRlciBHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbiBHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbjNEQm94IEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3hPcHRpb25zIEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uQm94IEdlb21ldHJpY1RyYW5zZm9ybWF0aW9uQm94T3B0aW9ucyBHZW9Qb3NpdGlvbiBHZW9Qb3NpdGlvbkVOVSBHZW9Qb3NpdGlvblhZWiBHZW9Qcm9qZWN0aW9uRGF0YSBHZXN0dXJlSGFuZGxlciBHZXN0dXJlSGFuZGxlclRhZyBHZXQgR2V0Qm91bmRpbmdCb3hTaXplUGFja2V0IEdldENvbnRleHQgR2V0RW52aXJvbm1lbnQgR2V0RmlsZU5hbWUgR2V0RnJvbnRFbmRPcHRpb25zRGF0YVBhY2tldCBHZXRMaW5lYnJlYWtJbmZvcm1hdGlvblBhY2tldCBHZXRNZW51c1BhY2tldCBHZXRQYWdlQnJlYWtJbmZvcm1hdGlvblBhY2tldCBHbGFpc2hlciBHbG9iYWxDbHVzdGVyaW5nQ29lZmZpY2llbnQgR2xvYmFsUHJlZmVyZW5jZXMgR2xvYmFsU2Vzc2lvbiBHbG93IEdvbGRlblJhdGlvIEdvbXBlcnR6TWFrZWhhbURpc3RyaWJ1dGlvbiBHb29kbWFuS3J1c2thbEdhbW1hIEdvb2RtYW5LcnVza2FsR2FtbWFUZXN0IEdvdG8gR3JhZCBHcmFkaWVudCBHcmFkaWVudEZpbHRlciBHcmFkaWVudE9yaWVudGF0aW9uRmlsdGVyIEdyYXBoIEdyYXBoQXNzb3J0YXRpdml0eSBHcmFwaENlbnRlciBHcmFwaENvbXBsZW1lbnQgR3JhcGhEYXRhIEdyYXBoRGVuc2l0eSBHcmFwaERpYW1ldGVyIEdyYXBoRGlmZmVyZW5jZSBHcmFwaERpc2pvaW50VW5pb24gJyArXG4gICAgICAnR3JhcGhEaXN0YW5jZSBHcmFwaERpc3RhbmNlTWF0cml4IEdyYXBoRWxlbWVudERhdGEgR3JhcGhFbWJlZGRpbmcgR3JhcGhIaWdobGlnaHQgR3JhcGhIaWdobGlnaHRTdHlsZSBHcmFwaEh1YiBHcmFwaGljcyBHcmFwaGljczNEIEdyYXBoaWNzM0RCb3ggR3JhcGhpY3MzREJveE9wdGlvbnMgR3JhcGhpY3NBcnJheSBHcmFwaGljc0Jhc2VsaW5lIEdyYXBoaWNzQm94IEdyYXBoaWNzQm94T3B0aW9ucyBHcmFwaGljc0NvbG9yIEdyYXBoaWNzQ29sdW1uIEdyYXBoaWNzQ29tcGxleCBHcmFwaGljc0NvbXBsZXgzREJveCBHcmFwaGljc0NvbXBsZXgzREJveE9wdGlvbnMgR3JhcGhpY3NDb21wbGV4Qm94IEdyYXBoaWNzQ29tcGxleEJveE9wdGlvbnMgR3JhcGhpY3NDb250ZW50cyBHcmFwaGljc0RhdGEgR3JhcGhpY3NHcmlkIEdyYXBoaWNzR3JpZEJveCBHcmFwaGljc0dyb3VwIEdyYXBoaWNzR3JvdXAzREJveCBHcmFwaGljc0dyb3VwM0RCb3hPcHRpb25zIEdyYXBoaWNzR3JvdXBCb3ggR3JhcGhpY3NHcm91cEJveE9wdGlvbnMgR3JhcGhpY3NHcm91cGluZyBHcmFwaGljc0hpZ2hsaWdodENvbG9yIEdyYXBoaWNzUm93IEdyYXBoaWNzU3BhY2luZyBHcmFwaGljc1N0eWxlIEdyYXBoSW50ZXJzZWN0aW9uIEdyYXBoTGF5b3V0IEdyYXBoTGlua0VmZmljaWVuY3kgR3JhcGhQZXJpcGhlcnkgR3JhcGhQbG90IEdyYXBoUGxvdDNEIEdyYXBoUG93ZXIgR3JhcGhQcm9wZXJ0eURpc3RyaWJ1dGlvbiBHcmFwaFEgR3JhcGhSYWRpdXMgR3JhcGhSZWNpcHJvY2l0eSBHcmFwaFJvb3QgR3JhcGhTdHlsZSBHcmFwaFVuaW9uIEdyYXkgR3JheUxldmVsIEdyZWF0Q2lyY2xlRGlzdGFuY2UgR3JlYXRlciBHcmVhdGVyRXF1YWwgR3JlYXRlckVxdWFsTGVzcyBHcmVhdGVyRnVsbEVxdWFsIEdyZWF0ZXJHcmVhdGVyIEdyZWF0ZXJMZXNzIEdyZWF0ZXJTbGFudEVxdWFsIEdyZWF0ZXJUaWxkZSBHcmVlbiBHcmlkIEdyaWRCYXNlbGluZSBHcmlkQm94IEdyaWRCb3hBbGlnbm1lbnQgR3JpZEJveEJhY2tncm91bmQgR3JpZEJveERpdmlkZXJzIEdyaWRCb3hGcmFtZSBHcmlkQm94SXRlbVNpemUgR3JpZEJveEl0ZW1TdHlsZSBHcmlkQm94T3B0aW9ucyBHcmlkQm94U3BhY2luZ3MgR3JpZENyZWF0aW9uU2V0dGluZ3MgR3JpZERlZmF1bHRFbGVtZW50IEdyaWRFbGVtZW50U3R5bGVPcHRpb25zIEdyaWRGcmFtZSBHcmlkRnJhbWVNYXJnaW5zIEdyaWRHcmFwaCBHcmlkTGluZXMgR3JpZExpbmVzU3R5bGUgR3JvZWJuZXJCYXNpcyBHcm91cEFjdGlvbkJhc2UgR3JvdXBDZW50cmFsaXplciBHcm91cEVsZW1lbnRGcm9tV29yZCBHcm91cEVsZW1lbnRQb3NpdGlvbiBHcm91cEVsZW1lbnRRIEdyb3VwRWxlbWVudHMgR3JvdXBFbGVtZW50VG9Xb3JkIEdyb3VwR2VuZXJhdG9ycyBHcm91cE11bHRpcGxpY2F0aW9uVGFibGUgR3JvdXBPcmJpdHMgR3JvdXBPcmRlciBHcm91cFBhZ2VCcmVha1dpdGhpbiBHcm91cFNldHdpc2VTdGFiaWxpemVyIEdyb3VwU3RhYmlsaXplciBHcm91cFN0YWJpbGl6ZXJDaGFpbiBHdWRlcm1hbm5pYW4gR3VtYmVsRGlzdHJpYnV0aW9uICcgK1xuICAgICAgJ0hhYXJXYXZlbGV0IEhhZGFtYXJkTWF0cml4IEhhbGZOb3JtYWxEaXN0cmlidXRpb24gSGFtaWx0b25pYW5HcmFwaFEgSGFtbWluZ0Rpc3RhbmNlIEhhbW1pbmdXaW5kb3cgSGFua2VsSDEgSGFua2VsSDIgSGFua2VsTWF0cml4IEhhbm5Qb2lzc29uV2luZG93IEhhbm5XaW5kb3cgSGFyYWRhTm9ydG9uR3JvdXBITiBIYXJhcnlHcmFwaCBIYXJtb25pY01lYW4gSGFybW9uaWNNZWFuRmlsdGVyIEhhcm1vbmljTnVtYmVyIEhhc2ggSGFzaFRhYmxlIEhhdmVyc2luZSBIYXphcmRGdW5jdGlvbiBIZWFkIEhlYWRDb21wb3NlIEhlYWRzIEhlYXZpc2lkZUxhbWJkYSBIZWF2aXNpZGVQaSBIZWF2aXNpZGVUaGV0YSBIZWxkR3JvdXBIZSBIZWxkUGFydCBIZWxwQnJvd3Nlckxvb2t1cCBIZWxwQnJvd3Nlck5vdGVib29rIEhlbHBCcm93c2VyU2V0dGluZ3MgSGVybWl0ZURlY29tcG9zaXRpb24gSGVybWl0ZUggSGVybWl0aWFuTWF0cml4USBIZXNzZW5iZXJnRGVjb21wb3NpdGlvbiBIZXNzaWFuIEhleGFkZWNpbWFsQ2hhcmFjdGVyIEhleGFoZWRyb24gSGV4YWhlZHJvbkJveCBIZXhhaGVkcm9uQm94T3B0aW9ucyBIaWRkZW5TdXJmYWNlIEhpZ2hsaWdodEdyYXBoIEhpZ2hsaWdodEltYWdlIEhpZ2hwYXNzRmlsdGVyIEhpZ21hblNpbXNHcm91cEhTIEhpbGJlcnRGaWx0ZXIgSGlsYmVydE1hdHJpeCBIaXN0b2dyYW0gSGlzdG9ncmFtM0QgSGlzdG9ncmFtRGlzdHJpYnV0aW9uIEhpc3RvZ3JhbUxpc3QgSGlzdG9ncmFtVHJhbnNmb3JtIEhpc3RvZ3JhbVRyYW5zZm9ybUludGVycG9sYXRpb24gSGl0TWlzc1RyYW5zZm9ybSBISVRTQ2VudHJhbGl0eSBIb2RnZUR1YWwgSG9lZmZkaW5nRCBIb2VmZmRpbmdEVGVzdCBIb2xkIEhvbGRBbGwgSG9sZEFsbENvbXBsZXRlIEhvbGRDb21wbGV0ZSBIb2xkRmlyc3QgSG9sZEZvcm0gSG9sZFBhdHRlcm4gSG9sZFJlc3QgSG9saWRheUNhbGVuZGFyIEhvbWVEaXJlY3RvcnkgSG9tZVBhZ2UgSG9yaXpvbnRhbCBIb3Jpem9udGFsRm9ybSBIb3Jpem9udGFsR2F1Z2UgSG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uIEhvcm5lckZvcm0gSG90ZWxsaW5nVFNxdWFyZURpc3RyaWJ1dGlvbiBIb3l0RGlzdHJpYnV0aW9uIEhUTUxTYXZlIEh1ZSBIdW1wRG93bkh1bXAgSHVtcEVxdWFsIEh1cndpdHpMZXJjaFBoaSBIdXJ3aXR6WmV0YSBIeXBlcmJvbGljRGlzdHJpYnV0aW9uIEh5cGVyY3ViZUdyYXBoIEh5cGVyZXhwb25lbnRpYWxEaXN0cmlidXRpb24gSHlwZXJmYWN0b3JpYWwgSHlwZXJnZW9tZXRyaWMwRjEgSHlwZXJnZW9tZXRyaWMwRjFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpYzFGMSBIeXBlcmdlb21ldHJpYzFGMVJlZ3VsYXJpemVkIEh5cGVyZ2VvbWV0cmljMkYxIEh5cGVyZ2VvbWV0cmljMkYxUmVndWxhcml6ZWQgSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gSHlwZXJnZW9tZXRyaWNQRlEgSHlwZXJnZW9tZXRyaWNQRlFSZWd1bGFyaXplZCBIeXBlcmdlb21ldHJpY1UgSHlwZXJsaW5rIEh5cGVybGlua0NyZWF0aW9uU2V0dGluZ3MgSHlwaGVuYXRpb24gSHlwaGVuYXRpb25PcHRpb25zIEh5cG9leHBvbmVudGlhbERpc3RyaWJ1dGlvbiBIeXBvdGhlc2lzVGVzdERhdGEgJyArXG4gICAgICAnSSBJZGVudGl0eSBJZGVudGl0eU1hdHJpeCBJZiBJZ25vcmVDYXNlIEltIEltYWdlIEltYWdlM0QgSW1hZ2UzRFNsaWNlcyBJbWFnZUFjY3VtdWxhdGUgSW1hZ2VBZGQgSW1hZ2VBZGp1c3QgSW1hZ2VBbGlnbiBJbWFnZUFwcGx5IEltYWdlQXNwZWN0UmF0aW8gSW1hZ2VBc3NlbWJsZSBJbWFnZUNhY2hlIEltYWdlQ2FjaGVWYWxpZCBJbWFnZUNhcHR1cmUgSW1hZ2VDaGFubmVscyBJbWFnZUNsaXAgSW1hZ2VDb2xvclNwYWNlIEltYWdlQ29tcG9zZSBJbWFnZUNvbnZvbHZlIEltYWdlQ29vY2N1cnJlbmNlIEltYWdlQ29ybmVycyBJbWFnZUNvcnJlbGF0ZSBJbWFnZUNvcnJlc3BvbmRpbmdQb2ludHMgSW1hZ2VDcm9wIEltYWdlRGF0YSBJbWFnZURhdGFQYWNrZXQgSW1hZ2VEZWNvbnZvbHZlIEltYWdlRGVtb3NhaWMgSW1hZ2VEaWZmZXJlbmNlIEltYWdlRGltZW5zaW9ucyBJbWFnZURpc3RhbmNlIEltYWdlRWZmZWN0IEltYWdlRmVhdHVyZVRyYWNrIEltYWdlRmlsZUFwcGx5IEltYWdlRmlsZUZpbHRlciBJbWFnZUZpbGVTY2FuIEltYWdlRmlsdGVyIEltYWdlRm9yZXN0aW5nQ29tcG9uZW50cyBJbWFnZUZvcndhcmRUcmFuc2Zvcm1hdGlvbiBJbWFnZUhpc3RvZ3JhbSBJbWFnZUtleXBvaW50cyBJbWFnZUxldmVscyBJbWFnZUxpbmVzIEltYWdlTWFyZ2lucyBJbWFnZU1hcmtlcnMgSW1hZ2VNZWFzdXJlbWVudHMgSW1hZ2VNdWx0aXBseSBJbWFnZU9mZnNldCBJbWFnZVBhZCBJbWFnZVBhZGRpbmcgSW1hZ2VQYXJ0aXRpb24gSW1hZ2VQZXJpb2RvZ3JhbSBJbWFnZVBlcnNwZWN0aXZlVHJhbnNmb3JtYXRpb24gSW1hZ2VRIEltYWdlUmFuZ2VDYWNoZSBJbWFnZVJlZmxlY3QgSW1hZ2VSZWdpb24gSW1hZ2VSZXNpemUgSW1hZ2VSZXNvbHV0aW9uIEltYWdlUm90YXRlIEltYWdlUm90YXRlZCBJbWFnZVNjYWxlZCBJbWFnZVNjYW4gSW1hZ2VTaXplIEltYWdlU2l6ZUFjdGlvbiBJbWFnZVNpemVDYWNoZSBJbWFnZVNpemVNdWx0aXBsaWVycyBJbWFnZVNpemVSYXcgSW1hZ2VTdWJ0cmFjdCBJbWFnZVRha2UgSW1hZ2VUcmFuc2Zvcm1hdGlvbiBJbWFnZVRyaW0gSW1hZ2VUeXBlIEltYWdlVmFsdWUgSW1hZ2VWYWx1ZVBvc2l0aW9ucyBJbXBsaWVzIEltcG9ydCBJbXBvcnRBdXRvUmVwbGFjZW1lbnRzIEltcG9ydFN0cmluZyBJbXByb3ZlbWVudEltcG9ydGFuY2UgSW4gSW5jaWRlbmNlR3JhcGggSW5jaWRlbmNlTGlzdCBJbmNpZGVuY2VNYXRyaXggSW5jbHVkZUNvbnN0YW50QmFzaXMgSW5jbHVkZUZpbGVFeHRlbnNpb24gSW5jbHVkZVBvZHMgSW5jbHVkZVNpbmd1bGFyVGVybSBJbmNyZW1lbnQgSW5kZW50IEluZGVudGluZ05ld2xpbmVTcGFjaW5ncyBJbmRlbnRNYXhGcmFjdGlvbiBJbmRlcGVuZGVuY2VUZXN0IEluZGVwZW5kZW50RWRnZVNldFEgSW5kZXBlbmRlbnRVbml0IEluZGVwZW5kZW50VmVydGV4U2V0USBJbmRldGVybWluYXRlIEluZGV4Q3JlYXRpb25PcHRpb25zIEluZGV4ZWQgSW5kZXhHcmFwaCBJbmRleFRhZyBJbmVxdWFsaXR5IEluZXhhY3ROdW1iZXJRIEluZXhhY3ROdW1iZXJzIEluZmluaXR5IEluZml4IEluZm9ybWF0aW9uIEluaGVyaXRlZCBJbmhlcml0U2NvcGUgSW5pdGlhbGl6YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsIEluaXRpYWxpemF0aW9uQ2VsbEV2YWx1YXRpb24gSW5pdGlhbGl6YXRpb25DZWxsV2FybmluZyBJbmxpbmVDb3VudGVyQXNzaWdubWVudHMgSW5saW5lQ291bnRlckluY3JlbWVudHMgSW5saW5lUnVsZXMgSW5uZXIgSW5wYWludCBJbnB1dCBJbnB1dEFsaWFzZXMgSW5wdXRBc3N1bXB0aW9ucyBJbnB1dEF1dG9SZXBsYWNlbWVudHMgSW5wdXRGaWVsZCBJbnB1dEZpZWxkQm94IElucHV0RmllbGRCb3hPcHRpb25zIElucHV0Rm9ybSBJbnB1dEdyb3VwaW5nIElucHV0TmFtZVBhY2tldCBJbnB1dE5vdGVib29rIElucHV0UGFja2V0IElucHV0U2V0dGluZ3MgSW5wdXRTdHJlYW0gSW5wdXRTdHJpbmcgSW5wdXRTdHJpbmdQYWNrZXQgSW5wdXRUb0JveEZvcm1QYWNrZXQgSW5zZXJ0IEluc2VydGlvblBvaW50T2JqZWN0IEluc2VydFJlc3VsdHMgSW5zZXQgSW5zZXQzREJveCBJbnNldDNEQm94T3B0aW9ucyBJbnNldEJveCBJbnNldEJveE9wdGlvbnMgSW5zdGFsbCBJbnN0YWxsU2VydmljZSBJblN0cmluZyBJbnRlZ2VyIEludGVnZXJEaWdpdHMgSW50ZWdlckV4cG9uZW50IEludGVnZXJMZW5ndGggSW50ZWdlclBhcnQgSW50ZWdlclBhcnRpdGlvbnMgSW50ZWdlclEgSW50ZWdlcnMgSW50ZWdlclN0cmluZyBJbnRlZ3JhbCBJbnRlZ3JhdGUgSW50ZXJhY3RpdmUgSW50ZXJhY3RpdmVUcmFkaW5nQ2hhcnQgSW50ZXJsYWNlZCBJbnRlcmxlYXZpbmcgSW50ZXJuYWxseUJhbGFuY2VkRGVjb21wb3NpdGlvbiBJbnRlcnBvbGF0aW5nRnVuY3Rpb24gSW50ZXJwb2xhdGluZ1BvbHlub21pYWwgSW50ZXJwb2xhdGlvbiBJbnRlcnBvbGF0aW9uT3JkZXIgSW50ZXJwb2xhdGlvblBvaW50cyBJbnRlcnBvbGF0aW9uUHJlY2lzaW9uIEludGVycHJldGF0aW9uIEludGVycHJldGF0aW9uQm94IEludGVycHJldGF0aW9uQm94T3B0aW9ucyBJbnRlcnByZXRhdGlvbkZ1bmN0aW9uICcgK1xuICAgICAgJ0ludGVycHJldFRlbXBsYXRlIEludGVycXVhcnRpbGVSYW5nZSBJbnRlcnJ1cHQgSW50ZXJydXB0U2V0dGluZ3MgSW50ZXJzZWN0aW9uIEludGVydmFsIEludGVydmFsSW50ZXJzZWN0aW9uIEludGVydmFsTWVtYmVyUSBJbnRlcnZhbFVuaW9uIEludmVyc2UgSW52ZXJzZUJldGFSZWd1bGFyaXplZCBJbnZlcnNlQ0RGIEludmVyc2VDaGlTcXVhcmVEaXN0cmlidXRpb24gSW52ZXJzZUNvbnRpbnVvdXNXYXZlbGV0VHJhbnNmb3JtIEludmVyc2VEaXN0YW5jZVRyYW5zZm9ybSBJbnZlcnNlRWxsaXB0aWNOb21lUSBJbnZlcnNlRXJmIEludmVyc2VFcmZjIEludmVyc2VGb3VyaWVyIEludmVyc2VGb3VyaWVyQ29zVHJhbnNmb3JtIEludmVyc2VGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0gSW52ZXJzZUZvdXJpZXJTaW5UcmFuc2Zvcm0gSW52ZXJzZUZvdXJpZXJUcmFuc2Zvcm0gSW52ZXJzZUZ1bmN0aW9uIEludmVyc2VGdW5jdGlvbnMgSW52ZXJzZUdhbW1hRGlzdHJpYnV0aW9uIEludmVyc2VHYW1tYVJlZ3VsYXJpemVkIEludmVyc2VHYXVzc2lhbkRpc3RyaWJ1dGlvbiBJbnZlcnNlR3VkZXJtYW5uaWFuIEludmVyc2VIYXZlcnNpbmUgSW52ZXJzZUphY29iaUNEIEludmVyc2VKYWNvYmlDTiBJbnZlcnNlSmFjb2JpQ1MgSW52ZXJzZUphY29iaURDIEludmVyc2VKYWNvYmlETiBJbnZlcnNlSmFjb2JpRFMgSW52ZXJzZUphY29iaU5DIEludmVyc2VKYWNvYmlORCBJbnZlcnNlSmFjb2JpTlMgSW52ZXJzZUphY29iaVNDIEludmVyc2VKYWNvYmlTRCBJbnZlcnNlSmFjb2JpU04gSW52ZXJzZUxhcGxhY2VUcmFuc2Zvcm0gSW52ZXJzZVBlcm11dGF0aW9uIEludmVyc2VSYWRvbiBJbnZlcnNlU2VyaWVzIEludmVyc2VTdXJ2aXZhbEZ1bmN0aW9uIEludmVyc2VXYXZlbGV0VHJhbnNmb3JtIEludmVyc2VXZWllcnN0cmFzc1AgSW52ZXJzZVpUcmFuc2Zvcm0gSW52aXNpYmxlIEludmlzaWJsZUFwcGxpY2F0aW9uIEludmlzaWJsZVRpbWVzIElycmVkdWNpYmxlUG9seW5vbWlhbFEgSXNvbGF0aW5nSW50ZXJ2YWwgSXNvbW9ycGhpY0dyYXBoUSBJc290b3BlRGF0YSBJdGFsaWMgSXRlbSBJdGVtQm94IEl0ZW1Cb3hPcHRpb25zIEl0ZW1TaXplIEl0ZW1TdHlsZSBJdG9Qcm9jZXNzICcgK1xuICAgICAgJ0phY2NhcmREaXNzaW1pbGFyaXR5IEphY29iaUFtcGxpdHVkZSBKYWNvYmlhbiBKYWNvYmlDRCBKYWNvYmlDTiBKYWNvYmlDUyBKYWNvYmlEQyBKYWNvYmlETiBKYWNvYmlEUyBKYWNvYmlOQyBKYWNvYmlORCBKYWNvYmlOUyBKYWNvYmlQIEphY29iaVNDIEphY29iaVNEIEphY29iaVNOIEphY29iaVN5bWJvbCBKYWNvYmlaZXRhIEphbmtvR3JvdXBKMSBKYW5rb0dyb3VwSjIgSmFua29Hcm91cEozIEphbmtvR3JvdXBKNCBKYXJxdWVCZXJhQUxNVGVzdCBKb2huc29uRGlzdHJpYnV0aW9uIEpvaW4gSm9pbmVkIEpvaW5lZEN1cnZlIEpvaW5lZEN1cnZlQm94IEpvaW5Gb3JtIEpvcmRhbkRlY29tcG9zaXRpb24gSm9yZGFuTW9kZWxEZWNvbXBvc2l0aW9uICcgK1xuICAgICAgJ0sgS2FnaUNoYXJ0IEthaXNlckJlc3NlbFdpbmRvdyBLYWlzZXJXaW5kb3cgS2FsbWFuRXN0aW1hdG9yIEthbG1hbkZpbHRlciBLYXJodW5lbkxvZXZlRGVjb21wb3NpdGlvbiBLYXJ5VHJlZSBLYXR6Q2VudHJhbGl0eSBLQ29yZUNvbXBvbmVudHMgS0Rpc3RyaWJ1dGlvbiBLZWx2aW5CZWkgS2VsdmluQmVyIEtlbHZpbktlaSBLZWx2aW5LZXIgS2VuZGFsbFRhdSBLZW5kYWxsVGF1VGVzdCBLZXJuZWxFeGVjdXRlIEtlcm5lbE1peHR1cmVEaXN0cmlidXRpb24gS2VybmVsT2JqZWN0IEtlcm5lbHMgS2V0IEtoaW5jaGluIEtpcmNoaG9mZkdyYXBoIEtpcmNoaG9mZk1hdHJpeCBLbGVpbkludmFyaWFudEogS25pZ2h0VG91ckdyYXBoIEtub3REYXRhIEtub3duVW5pdFEgS29sbW9nb3JvdlNtaXJub3ZUZXN0IEtyb25lY2tlckRlbHRhIEtyb25lY2tlck1vZGVsRGVjb21wb3NpdGlvbiBLcm9uZWNrZXJQcm9kdWN0IEtyb25lY2tlclN5bWJvbCBLdWlwZXJUZXN0IEt1bWFyYXN3YW15RGlzdHJpYnV0aW9uIEt1cnRvc2lzIEt1d2FoYXJhRmlsdGVyICcgK1xuICAgICAgJ0xhYmVsIExhYmVsZWQgTGFiZWxlZFNsaWRlciBMYWJlbGluZ0Z1bmN0aW9uIExhYmVsU3R5bGUgTGFndWVycmVMIExhbWJkYUNvbXBvbmVudHMgTGFtYmVydFcgTGFuY3pvc1dpbmRvdyBMYW5kYXVEaXN0cmlidXRpb24gTGFuZ3VhZ2UgTGFuZ3VhZ2VDYXRlZ29yeSBMYXBsYWNlRGlzdHJpYnV0aW9uIExhcGxhY2VUcmFuc2Zvcm0gTGFwbGFjaWFuIExhcGxhY2lhbkZpbHRlciBMYXBsYWNpYW5HYXVzc2lhbkZpbHRlciBMYXJnZSBMYXJnZXIgTGFzdCBMYXRpdHVkZSBMYXRpdHVkZUxvbmdpdHVkZSBMYXR0aWNlRGF0YSBMYXR0aWNlUmVkdWNlIExhdW5jaCBMYXVuY2hLZXJuZWxzIExheWVyZWRHcmFwaFBsb3QgTGF5ZXJTaXplRnVuY3Rpb24gTGF5b3V0SW5mb3JtYXRpb24gTENNIExlYWZDb3VudCBMZWFwWWVhclEgTGVhc3RTcXVhcmVzIExlYXN0U3F1YXJlc0ZpbHRlcktlcm5lbCBMZWZ0IExlZnRBcnJvdyBMZWZ0QXJyb3dCYXIgTGVmdEFycm93UmlnaHRBcnJvdyBMZWZ0RG93blRlZVZlY3RvciBMZWZ0RG93blZlY3RvciBMZWZ0RG93blZlY3RvckJhciBMZWZ0UmlnaHRBcnJvdyBMZWZ0UmlnaHRWZWN0b3IgTGVmdFRlZSBMZWZ0VGVlQXJyb3cgTGVmdFRlZVZlY3RvciBMZWZ0VHJpYW5nbGUgTGVmdFRyaWFuZ2xlQmFyIExlZnRUcmlhbmdsZUVxdWFsIExlZnRVcERvd25WZWN0b3IgTGVmdFVwVGVlVmVjdG9yIExlZnRVcFZlY3RvciBMZWZ0VXBWZWN0b3JCYXIgTGVmdFZlY3RvciBMZWZ0VmVjdG9yQmFyIExlZ2VuZEFwcGVhcmFuY2UgTGVnZW5kZWQgTGVnZW5kRnVuY3Rpb24gTGVnZW5kTGFiZWwgTGVnZW5kTGF5b3V0IExlZ2VuZE1hcmdpbnMgTGVnZW5kTWFya2VycyBMZWdlbmRNYXJrZXJTaXplIExlZ2VuZHJlUCBMZWdlbmRyZVEgTGVnZW5kcmVUeXBlIExlbmd0aCBMZW5ndGhXaGlsZSBMZXJjaFBoaSBMZXNzIExlc3NFcXVhbCBMZXNzRXF1YWxHcmVhdGVyIExlc3NGdWxsRXF1YWwgTGVzc0dyZWF0ZXIgTGVzc0xlc3MgTGVzc1NsYW50RXF1YWwgTGVzc1RpbGRlIExldHRlckNoYXJhY3RlciBMZXR0ZXJRIExldmVsIExldmVuZVRlc3QgTGV2aUNpdml0YVRlbnNvciBMZXZ5RGlzdHJpYnV0aW9uIExleGljb2dyYXBoaWMgTGlicmFyeUZ1bmN0aW9uIExpYnJhcnlGdW5jdGlvbkVycm9yIExpYnJhcnlGdW5jdGlvbkluZm9ybWF0aW9uIExpYnJhcnlGdW5jdGlvbkxvYWQgTGlicmFyeUZ1bmN0aW9uVW5sb2FkIExpYnJhcnlMb2FkIExpYnJhcnlVbmxvYWQgTGljZW5zZUlEIExpZnRpbmdGaWx0ZXJEYXRhIExpZnRpbmdXYXZlbGV0VHJhbnNmb3JtIExpZ2h0Qmx1ZSBMaWdodEJyb3duIExpZ2h0Q3lhbiBMaWdodGVyIExpZ2h0R3JheSBMaWdodEdyZWVuIExpZ2h0aW5nIExpZ2h0aW5nQW5nbGUgTGlnaHRNYWdlbnRhIExpZ2h0T3JhbmdlIExpZ2h0UGluayBMaWdodFB1cnBsZSBMaWdodFJlZCBMaWdodFNvdXJjZXMgTGlnaHRZZWxsb3cgTGlrZWxpaG9vZCBMaW1pdCBMaW1pdHNQb3NpdGlvbmluZyBMaW1pdHNQb3NpdGlvbmluZ1Rva2VucyBMaW5kbGV5RGlzdHJpYnV0aW9uIExpbmUgTGluZTNEQm94IExpbmVhckZpbHRlciBMaW5lYXJGcmFjdGlvbmFsVHJhbnNmb3JtIExpbmVhck1vZGVsRml0IExpbmVhck9mZnNldEZ1bmN0aW9uIExpbmVhclByb2dyYW1taW5nIExpbmVhclJlY3VycmVuY2UgTGluZWFyU29sdmUgTGluZWFyU29sdmVGdW5jdGlvbiBMaW5lQm94IExpbmVCcmVhayBMaW5lYnJlYWtBZGp1c3RtZW50cyBMaW5lQnJlYWtDaGFydCBMaW5lQnJlYWtXaXRoaW4gTGluZUNvbG9yIExpbmVGb3JtIExpbmVHcmFwaCBMaW5lSW5kZW50IExpbmVJbmRlbnRNYXhGcmFjdGlvbiBMaW5lSW50ZWdyYWxDb252b2x1dGlvblBsb3QgTGluZUludGVncmFsQ29udm9sdXRpb25TY2FsZSBMaW5lTGVnZW5kIExpbmVPcGFjaXR5IExpbmVTcGFjaW5nIExpbmVXcmFwUGFydHMgTGlua0FjdGl2YXRlIExpbmtDbG9zZSBMaW5rQ29ubmVjdCBMaW5rQ29ubmVjdGVkUSBMaW5rQ3JlYXRlIExpbmtFcnJvciBMaW5rRmx1c2ggTGlua0Z1bmN0aW9uIExpbmtIb3N0IExpbmtJbnRlcnJ1cHQgTGlua0xhdW5jaCBMaW5rTW9kZSBMaW5rT2JqZWN0IExpbmtPcGVuIExpbmtPcHRpb25zIExpbmtQYXR0ZXJucyBMaW5rUHJvdG9jb2wgTGlua1JlYWQgTGlua1JlYWRIZWxkIExpbmtSZWFkeVEgTGlua3MgTGlua1dyaXRlIExpbmtXcml0ZUhlbGQgTGlvdXZpbGxlTGFtYmRhIExpc3QgTGlzdGFibGUgTGlzdEFuaW1hdGUgTGlzdENvbnRvdXJQbG90IExpc3RDb250b3VyUGxvdDNEIExpc3RDb252b2x2ZSBMaXN0Q29ycmVsYXRlIExpc3RDdXJ2ZVBhdGhQbG90IExpc3REZWNvbnZvbHZlIExpc3REZW5zaXR5UGxvdCBMaXN0ZW4gTGlzdEZvdXJpZXJTZXF1ZW5jZVRyYW5zZm9ybSBMaXN0SW50ZXJwb2xhdGlvbiBMaXN0TGluZUludGVncmFsQ29udm9sdXRpb25QbG90IExpc3RMaW5lUGxvdCBMaXN0TG9nTGluZWFyUGxvdCBMaXN0TG9nTG9nUGxvdCBMaXN0TG9nUGxvdCBMaXN0UGlja2VyIExpc3RQaWNrZXJCb3ggTGlzdFBpY2tlckJveEJhY2tncm91bmQgTGlzdFBpY2tlckJveE9wdGlvbnMgTGlzdFBsYXkgTGlzdFBsb3QgTGlzdFBsb3QzRCBMaXN0UG9pbnRQbG90M0QgTGlzdFBvbGFyUGxvdCBMaXN0USBMaXN0U3RyZWFtRGVuc2l0eVBsb3QgTGlzdFN0cmVhbVBsb3QgTGlzdFN1cmZhY2VQbG90M0QgTGlzdFZlY3RvckRlbnNpdHlQbG90IExpc3RWZWN0b3JQbG90IExpc3RWZWN0b3JQbG90M0QgTGlzdFpUcmFuc2Zvcm0gTGl0ZXJhbCBMaXRlcmFsU2VhcmNoIExvY2FsQ2x1c3RlcmluZ0NvZWZmaWNpZW50IExvY2FsaXplVmFyaWFibGVzIExvY2F0aW9uRXF1aXZhbGVuY2VUZXN0IExvY2F0aW9uVGVzdCBMb2NhdG9yIExvY2F0b3JBdXRvQ3JlYXRlIExvY2F0b3JCb3ggTG9jYXRvckJveE9wdGlvbnMgTG9jYXRvckNlbnRlcmluZyBMb2NhdG9yUGFuZSBMb2NhdG9yUGFuZUJveCBMb2NhdG9yUGFuZUJveE9wdGlvbnMgJyArXG4gICAgICAnTG9jYXRvclJlZ2lvbiBMb2NrZWQgTG9nIExvZzEwIExvZzIgTG9nQmFybmVzRyBMb2dHYW1tYSBMb2dHYW1tYURpc3RyaWJ1dGlvbiBMb2dpY2FsRXhwYW5kIExvZ0ludGVncmFsIExvZ2lzdGljRGlzdHJpYnV0aW9uIExvZ2l0TW9kZWxGaXQgTG9nTGlrZWxpaG9vZCBMb2dMaW5lYXJQbG90IExvZ0xvZ2lzdGljRGlzdHJpYnV0aW9uIExvZ0xvZ1Bsb3QgTG9nTXVsdGlub3JtYWxEaXN0cmlidXRpb24gTG9nTm9ybWFsRGlzdHJpYnV0aW9uIExvZ1Bsb3QgTG9nUmFua1Rlc3QgTG9nU2VyaWVzRGlzdHJpYnV0aW9uIExvbmdFcXVhbCBMb25nZXN0IExvbmdlc3RBc2NlbmRpbmdTZXF1ZW5jZSBMb25nZXN0Q29tbW9uU2VxdWVuY2UgTG9uZ2VzdENvbW1vblNlcXVlbmNlUG9zaXRpb25zIExvbmdlc3RDb21tb25TdWJzZXF1ZW5jZSBMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2VQb3NpdGlvbnMgTG9uZ2VzdE1hdGNoIExvbmdGb3JtIExvbmdpdHVkZSBMb25nTGVmdEFycm93IExvbmdMZWZ0UmlnaHRBcnJvdyBMb25nUmlnaHRBcnJvdyBMb29wYmFjayBMb29wRnJlZUdyYXBoUSBMb3dlckNhc2VRIExvd2VyTGVmdEFycm93IExvd2VyUmlnaHRBcnJvdyBMb3dlclRyaWFuZ3VsYXJpemUgTG93cGFzc0ZpbHRlciBMUUVzdGltYXRvckdhaW5zIExRR1JlZ3VsYXRvciBMUU91dHB1dFJlZ3VsYXRvckdhaW5zIExRUmVndWxhdG9yR2FpbnMgTFVCYWNrU3Vic3RpdHV0aW9uIEx1Y2FzTCBMdWNjaW9TYW1pQ29tcG9uZW50cyBMVURlY29tcG9zaXRpb24gTHlhcHVub3ZTb2x2ZSBMeW9uc0dyb3VwTHkgJyArXG4gICAgICAnTWFjaGluZUlEIE1hY2hpbmVOYW1lIE1hY2hpbmVOdW1iZXJRIE1hY2hpbmVQcmVjaXNpb24gTWFjaW50b3NoU3lzdGVtUGFnZVNldHVwIE1hZ2VudGEgTWFnbmlmaWNhdGlvbiBNYWduaWZ5IE1haW5Tb2x2ZSBNYWludGFpbkR5bmFtaWNDYWNoZXMgTWFqb3JpdHkgTWFrZUJveGVzIE1ha2VFeHByZXNzaW9uIE1ha2VSdWxlcyBNYW5nb2xkdExhbWJkYSBNYW5oYXR0YW5EaXN0YW5jZSBNYW5pcHVsYXRlIE1hbmlwdWxhdG9yIE1hbm5XaGl0bmV5VGVzdCBNYW50aXNzYUV4cG9uZW50IE1hbnVhbCBNYXAgTWFwQWxsIE1hcEF0IE1hcEluZGV4ZWQgTUFQcm9jZXNzIE1hcFRocmVhZCBNYXJjdW1RIE1hcmRpYUNvbWJpbmVkVGVzdCBNYXJkaWFLdXJ0b3Npc1Rlc3QgTWFyZGlhU2tld25lc3NUZXN0IE1hcmdpbmFsRGlzdHJpYnV0aW9uIE1hcmtvdlByb2Nlc3NQcm9wZXJ0aWVzIE1hc2tpbmcgTWF0Y2hpbmdEaXNzaW1pbGFyaXR5IE1hdGNoTG9jYWxOYW1lUSBNYXRjaExvY2FsTmFtZXMgTWF0Y2hRIE1hdGVyaWFsIE1hdGhlbWF0aWNhTm90YXRpb24gTWF0aGlldUMgTWF0aGlldUNoYXJhY3RlcmlzdGljQSBNYXRoaWV1Q2hhcmFjdGVyaXN0aWNCIE1hdGhpZXVDaGFyYWN0ZXJpc3RpY0V4cG9uZW50IE1hdGhpZXVDUHJpbWUgTWF0aGlldUdyb3VwTTExIE1hdGhpZXVHcm91cE0xMiBNYXRoaWV1R3JvdXBNMjIgTWF0aGlldUdyb3VwTTIzIE1hdGhpZXVHcm91cE0yNCBNYXRoaWV1UyBNYXRoaWV1U1ByaW1lIE1hdGhNTEZvcm0gTWF0aE1MVGV4dCBNYXRyaWNlcyBNYXRyaXhFeHAgTWF0cml4Rm9ybSBNYXRyaXhGdW5jdGlvbiBNYXRyaXhMb2cgTWF0cml4UGxvdCBNYXRyaXhQb3dlciBNYXRyaXhRIE1hdHJpeFJhbmsgTWF4IE1heEJlbmQgTWF4RGV0ZWN0IE1heEV4dHJhQmFuZHdpZHRocyBNYXhFeHRyYUNvbmRpdGlvbnMgTWF4RmVhdHVyZXMgTWF4RmlsdGVyIE1heGltaXplIE1heEl0ZXJhdGlvbnMgTWF4TWVtb3J5VXNlZCBNYXhNaXh0dXJlS2VybmVscyBNYXhQbG90UG9pbnRzIE1heFBvaW50cyBNYXhSZWN1cnNpb24gTWF4U3RhYmxlRGlzdHJpYnV0aW9uIE1heFN0ZXBGcmFjdGlvbiBNYXhTdGVwcyBNYXhTdGVwU2l6ZSBNYXhWYWx1ZSBNYXh3ZWxsRGlzdHJpYnV0aW9uIE1jTGF1Z2hsaW5Hcm91cE1jTCBNZWFuIE1lYW5DbHVzdGVyaW5nQ29lZmZpY2llbnQgTWVhbkRlZ3JlZUNvbm5lY3Rpdml0eSBNZWFuRGV2aWF0aW9uIE1lYW5GaWx0ZXIgTWVhbkdyYXBoRGlzdGFuY2UgTWVhbk5laWdoYm9yRGVncmVlIE1lYW5TaGlmdCBNZWFuU2hpZnRGaWx0ZXIgTWVkaWFuIE1lZGlhbkRldmlhdGlvbiBNZWRpYW5GaWx0ZXIgTWVkaXVtIE1laWplckcgTWVpeG5lckRpc3RyaWJ1dGlvbiBNZW1iZXJRIE1lbW9yeUNvbnN0cmFpbmVkIE1lbW9yeUluVXNlIE1lbnUgTWVudUFwcGVhcmFuY2UgTWVudUNvbW1hbmRLZXkgTWVudUV2YWx1YXRvciBNZW51SXRlbSBNZW51UGFja2V0IE1lbnVTb3J0aW5nVmFsdWUgTWVudVN0eWxlIE1lbnVWaWV3IE1lcmdlRGlmZmVyZW5jZXMgTWVzaCBNZXNoRnVuY3Rpb25zIE1lc2hSYW5nZSBNZXNoU2hhZGluZyBNZXNoU3R5bGUgTWVzc2FnZSBNZXNzYWdlRGlhbG9nIE1lc3NhZ2VMaXN0IE1lc3NhZ2VOYW1lIE1lc3NhZ2VPcHRpb25zIE1lc3NhZ2VQYWNrZXQgTWVzc2FnZXMgTWVzc2FnZXNOb3RlYm9vayBNZXRhQ2hhcmFjdGVycyBNZXRhSW5mb3JtYXRpb24gTWV0aG9kIE1ldGhvZE9wdGlvbnMgTWV4aWNhbkhhdFdhdmVsZXQgTWV5ZXJXYXZlbGV0IE1pbiBNaW5EZXRlY3QgTWluRmlsdGVyIE1pbmltYWxQb2x5bm9taWFsIE1pbmltYWxTdGF0ZVNwYWNlTW9kZWwgTWluaW1pemUgTWlub3JzIE1pblJlY3Vyc2lvbiBNaW5TaXplIE1pblN0YWJsZURpc3RyaWJ1dGlvbiBNaW51cyBNaW51c1BsdXMgTWluVmFsdWUgTWlzc2luZyBNaXNzaW5nRGF0YU1ldGhvZCBNaXR0YWdMZWZmbGVyRSBNaXhlZFJhZGl4IE1peGVkUmFkaXhRdWFudGl0eSBNaXh0dXJlRGlzdHJpYnV0aW9uIE1vZCBNb2RhbCBNb2RlIE1vZHVsYXIgTW9kdWxhckxhbWJkYSBNb2R1bGUgTW9kdWx1cyBNb2ViaXVzTXUgTW9tZW50IE1vbWVudGFyeSBNb21lbnRDb252ZXJ0IE1vbWVudEV2YWx1YXRlIE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiBNb25kYXkgTW9uaXRvciBNb25vbWlhbExpc3QgTW9ub21pYWxPcmRlciBNb25zdGVyR3JvdXBNIE1vcmxldFdhdmVsZXQgTW9ycGhvbG9naWNhbEJpbmFyaXplIE1vcnBob2xvZ2ljYWxCcmFuY2hQb2ludHMgTW9ycGhvbG9naWNhbENvbXBvbmVudHMgTW9ycGhvbG9naWNhbEV1bGVyTnVtYmVyIE1vcnBob2xvZ2ljYWxHcmFwaCBNb3JwaG9sb2dpY2FsUGVyaW1ldGVyIE1vcnBob2xvZ2ljYWxUcmFuc2Zvcm0gTW9zdCBNb3VzZUFubm90YXRpb24gTW91c2VBcHBlYXJhbmNlIE1vdXNlQXBwZWFyYW5jZVRhZyBNb3VzZUJ1dHRvbnMgTW91c2VvdmVyIE1vdXNlUG9pbnRlck5vdGUgTW91c2VQb3NpdGlvbiBNb3ZpbmdBdmVyYWdlIE1vdmluZ01lZGlhbiBNb3lhbERpc3RyaWJ1dGlvbiBNdWx0aWVkZ2VTdHlsZSBNdWx0aWxhdW5jaFdhcm5pbmcgTXVsdGlMZXR0ZXJJdGFsaWNzIE11bHRpTGV0dGVyU3R5bGUgTXVsdGlsaW5lRnVuY3Rpb24gTXVsdGlub21pYWwgTXVsdGlub21pYWxEaXN0cmlidXRpb24gTXVsdGlub3JtYWxEaXN0cmlidXRpb24gTXVsdGlwbGljYXRpdmVPcmRlciBNdWx0aXBsaWNpdHkgTXVsdGlzZWxlY3Rpb24gTXVsdGl2YXJpYXRlSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gTXVsdGl2YXJpYXRlUG9pc3NvbkRpc3RyaWJ1dGlvbiBNdWx0aXZhcmlhdGVURGlzdHJpYnV0aW9uICcgK1xuICAgICAgJ04gTmFrYWdhbWlEaXN0cmlidXRpb24gTmFtZVEgTmFtZXMgTmFtZXNwYWNlQm94IE5hbmQgTkFyZ01heCBOQXJnTWluIE5CZXJub3VsbGlCIE5DYWNoZSBORFNvbHZlIE5EU29sdmVWYWx1ZSBOZWFyZXN0IE5lYXJlc3RGdW5jdGlvbiBOZWVkQ3VycmVudEZyb250RW5kUGFja2FnZVBhY2tldCBOZWVkQ3VycmVudEZyb250RW5kU3ltYm9sc1BhY2tldCBOZWVkbGVtYW5XdW5zY2hTaW1pbGFyaXR5IE5lZWRzIE5lZ2F0aXZlIE5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb24gTmVnYXRpdmVNdWx0aW5vbWlhbERpc3RyaWJ1dGlvbiBOZWlnaGJvcmhvb2RHcmFwaCBOZXN0IE5lc3RlZEdyZWF0ZXJHcmVhdGVyIE5lc3RlZExlc3NMZXNzIE5lc3RlZFNjcmlwdFJ1bGVzIE5lc3RMaXN0IE5lc3RXaGlsZSBOZXN0V2hpbGVMaXN0IE5ldmlsbGVUaGV0YUMgTmV2aWxsZVRoZXRhRCBOZXZpbGxlVGhldGFOIE5ldmlsbGVUaGV0YVMgTmV3UHJpbWl0aXZlU3R5bGUgTkV4cGVjdGF0aW9uIE5leHQgTmV4dFByaW1lIE5Ib2xkQWxsIE5Ib2xkRmlyc3QgTkhvbGRSZXN0IE5pY2hvbHNHcmlkTGluZXMgTmljaG9sc1Bsb3QgTkludGVncmF0ZSBOTWF4aW1pemUgTk1heFZhbHVlIE5NaW5pbWl6ZSBOTWluVmFsdWUgTm9taW5hbFZhcmlhYmxlcyBOb25Bc3NvY2lhdGl2ZSBOb25jZW50cmFsQmV0YURpc3RyaWJ1dGlvbiBOb25jZW50cmFsQ2hpU3F1YXJlRGlzdHJpYnV0aW9uIE5vbmNlbnRyYWxGUmF0aW9EaXN0cmlidXRpb24gTm9uY2VudHJhbFN0dWRlbnRURGlzdHJpYnV0aW9uIE5vbkNvbW11dGF0aXZlTXVsdGlwbHkgTm9uQ29uc3RhbnRzIE5vbmUgTm9ubGluZWFyTW9kZWxGaXQgTm9ubG9jYWxNZWFuc0ZpbHRlciBOb25OZWdhdGl2ZSBOb25Qb3NpdGl2ZSBOb3IgTm9ybHVuZEIgTm9ybSBOb3JtYWwgTm9ybWFsRGlzdHJpYnV0aW9uIE5vcm1hbEdyb3VwaW5nIE5vcm1hbGl6ZSBOb3JtYWxpemVkU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIE5vcm1hbHNGdW5jdGlvbiBOb3JtRnVuY3Rpb24gTm90IE5vdENvbmdydWVudCBOb3RDdXBDYXAgTm90RG91YmxlVmVydGljYWxCYXIgTm90ZWJvb2sgTm90ZWJvb2tBcHBseSBOb3RlYm9va0F1dG9TYXZlIE5vdGVib29rQ2xvc2UgTm90ZWJvb2tDb252ZXJ0U2V0dGluZ3MgTm90ZWJvb2tDcmVhdGUgTm90ZWJvb2tDcmVhdGVSZXR1cm5PYmplY3QgTm90ZWJvb2tEZWZhdWx0IE5vdGVib29rRGVsZXRlIE5vdGVib29rRGlyZWN0b3J5IE5vdGVib29rRHluYW1pY0V4cHJlc3Npb24gTm90ZWJvb2tFdmFsdWF0ZSBOb3RlYm9va0V2ZW50QWN0aW9ucyBOb3RlYm9va0ZpbGVOYW1lIE5vdGVib29rRmluZCBOb3RlYm9va0ZpbmRSZXR1cm5PYmplY3QgTm90ZWJvb2tHZXQgTm90ZWJvb2tHZXRMYXlvdXRJbmZvcm1hdGlvblBhY2tldCBOb3RlYm9va0dldE1pc3NwZWxsaW5nc1BhY2tldCBOb3RlYm9va0luZm9ybWF0aW9uIE5vdGVib29rSW50ZXJmYWNlT2JqZWN0IE5vdGVib29rTG9jYXRlIE5vdGVib29rT2JqZWN0IE5vdGVib29rT3BlbiBOb3RlYm9va09wZW5SZXR1cm5PYmplY3QgTm90ZWJvb2tQYXRoIE5vdGVib29rUHJpbnQgTm90ZWJvb2tQdXQgTm90ZWJvb2tQdXRSZXR1cm5PYmplY3QgTm90ZWJvb2tSZWFkIE5vdGVib29rUmVzZXRHZW5lcmF0ZWRDZWxscyBOb3RlYm9va3MgTm90ZWJvb2tTYXZlIE5vdGVib29rU2F2ZUFzIE5vdGVib29rU2VsZWN0aW9uIE5vdGVib29rU2V0dXBMYXlvdXRJbmZvcm1hdGlvblBhY2tldCBOb3RlYm9va3NNZW51IE5vdGVib29rV3JpdGUgTm90RWxlbWVudCBOb3RFcXVhbFRpbGRlIE5vdEV4aXN0cyBOb3RHcmVhdGVyIE5vdEdyZWF0ZXJFcXVhbCBOb3RHcmVhdGVyRnVsbEVxdWFsIE5vdEdyZWF0ZXJHcmVhdGVyIE5vdEdyZWF0ZXJMZXNzIE5vdEdyZWF0ZXJTbGFudEVxdWFsIE5vdEdyZWF0ZXJUaWxkZSBOb3RIdW1wRG93bkh1bXAgTm90SHVtcEVxdWFsIE5vdExlZnRUcmlhbmdsZSBOb3RMZWZ0VHJpYW5nbGVCYXIgTm90TGVmdFRyaWFuZ2xlRXF1YWwgTm90TGVzcyBOb3RMZXNzRXF1YWwgTm90TGVzc0Z1bGxFcXVhbCBOb3RMZXNzR3JlYXRlciBOb3RMZXNzTGVzcyBOb3RMZXNzU2xhbnRFcXVhbCBOb3RMZXNzVGlsZGUgTm90TmVzdGVkR3JlYXRlckdyZWF0ZXIgTm90TmVzdGVkTGVzc0xlc3MgTm90UHJlY2VkZXMgTm90UHJlY2VkZXNFcXVhbCBOb3RQcmVjZWRlc1NsYW50RXF1YWwgTm90UHJlY2VkZXNUaWxkZSBOb3RSZXZlcnNlRWxlbWVudCBOb3RSaWdodFRyaWFuZ2xlIE5vdFJpZ2h0VHJpYW5nbGVCYXIgTm90UmlnaHRUcmlhbmdsZUVxdWFsIE5vdFNxdWFyZVN1YnNldCBOb3RTcXVhcmVTdWJzZXRFcXVhbCBOb3RTcXVhcmVTdXBlcnNldCBOb3RTcXVhcmVTdXBlcnNldEVxdWFsIE5vdFN1YnNldCBOb3RTdWJzZXRFcXVhbCBOb3RTdWNjZWVkcyBOb3RTdWNjZWVkc0VxdWFsIE5vdFN1Y2NlZWRzU2xhbnRFcXVhbCBOb3RTdWNjZWVkc1RpbGRlIE5vdFN1cGVyc2V0IE5vdFN1cGVyc2V0RXF1YWwgTm90VGlsZGUgTm90VGlsZGVFcXVhbCBOb3RUaWxkZUZ1bGxFcXVhbCBOb3RUaWxkZVRpbGRlIE5vdFZlcnRpY2FsQmFyIE5Qcm9iYWJpbGl0eSBOUHJvZHVjdCBOUHJvZHVjdEZhY3RvcnMgTlJvb3RzIE5Tb2x2ZSBOU3VtIE5TdW1UZXJtcyBOdWxsIE51bGxSZWNvcmRzIE51bGxTcGFjZSBOdWxsV29yZHMgTnVtYmVyIE51bWJlckZpZWxkQ2xhc3NOdW1iZXIgTnVtYmVyRmllbGREaXNjcmltaW5hbnQgTnVtYmVyRmllbGRGdW5kYW1lbnRhbFVuaXRzIE51bWJlckZpZWxkSW50ZWdyYWxCYXNpcyBOdW1iZXJGaWVsZE5vcm1SZXByZXNlbnRhdGl2ZXMgTnVtYmVyRmllbGRSZWd1bGF0b3IgTnVtYmVyRmllbGRSb290c09mVW5pdHkgTnVtYmVyRmllbGRTaWduYXR1cmUgTnVtYmVyRm9ybSBOdW1iZXJGb3JtYXQgTnVtYmVyTWFya3MgTnVtYmVyTXVsdGlwbGllciBOdW1iZXJQYWRkaW5nIE51bWJlclBvaW50IE51bWJlclEgTnVtYmVyU2VwYXJhdG9yICcgK1xuICAgICAgJ051bWJlclNpZ25zIE51bWJlclN0cmluZyBOdW1lcmF0b3IgTnVtZXJpY0Z1bmN0aW9uIE51bWVyaWNRIE51dHRhbGxXaW5kb3cgTlZhbHVlcyBOeXF1aXN0R3JpZExpbmVzIE55cXVpc3RQbG90ICcgK1xuICAgICAgJ08gT2JzZXJ2YWJpbGl0eUdyYW1pYW4gT2JzZXJ2YWJpbGl0eU1hdHJpeCBPYnNlcnZhYmxlRGVjb21wb3NpdGlvbiBPYnNlcnZhYmxlTW9kZWxRIE9kZFEgT2ZmIE9mZnNldCBPTEVEYXRhIE9uIE9OYW5Hcm91cE9OIE9uZUlkZW50aXR5IE9wYWNpdHkgT3BlbiBPcGVuQXBwZW5kIE9wZW5lciBPcGVuZXJCb3ggT3BlbmVyQm94T3B0aW9ucyBPcGVuZXJWaWV3IE9wZW5GdW5jdGlvbkluc3BlY3RvclBhY2tldCBPcGVuaW5nIE9wZW5SZWFkIE9wZW5TcGVjaWFsT3B0aW9ucyBPcGVuVGVtcG9yYXJ5IE9wZW5Xcml0ZSBPcGVyYXRlIE9wZXJhdGluZ1N5c3RlbSBPcHRpbXVtRmxvd0RhdGEgT3B0aW9uYWwgT3B0aW9uSW5zcGVjdG9yU2V0dGluZ3MgT3B0aW9uUSBPcHRpb25zIE9wdGlvbnNQYWNrZXQgT3B0aW9uc1BhdHRlcm4gT3B0aW9uVmFsdWUgT3B0aW9uVmFsdWVCb3ggT3B0aW9uVmFsdWVCb3hPcHRpb25zIE9yIE9yYW5nZSBPcmRlciBPcmRlckRpc3RyaWJ1dGlvbiBPcmRlcmVkUSBPcmRlcmluZyBPcmRlcmxlc3MgT3Juc3RlaW5VaGxlbmJlY2tQcm9jZXNzIE9ydGhvZ29uYWxpemUgT3V0IE91dGVyIE91dHB1dEF1dG9PdmVyd3JpdGUgT3V0cHV0Q29udHJvbGxhYmlsaXR5TWF0cml4IE91dHB1dENvbnRyb2xsYWJsZU1vZGVsUSBPdXRwdXRGb3JtIE91dHB1dEZvcm1EYXRhIE91dHB1dEdyb3VwaW5nIE91dHB1dE1hdGhFZGl0RXhwcmVzc2lvbiBPdXRwdXROYW1lUGFja2V0IE91dHB1dFJlc3BvbnNlIE91dHB1dFNpemVMaW1pdCBPdXRwdXRTdHJlYW0gT3ZlciBPdmVyQmFyIE92ZXJEb3QgT3ZlcmZsb3cgT3ZlckhhdCBPdmVybGFwcyBPdmVybGF5IE92ZXJsYXlCb3ggT3ZlcmxheUJveE9wdGlvbnMgT3ZlcnNjcmlwdCBPdmVyc2NyaXB0Qm94IE92ZXJzY3JpcHRCb3hPcHRpb25zIE92ZXJUaWxkZSBPdmVyVmVjdG9yIE93ZW5UIE93blZhbHVlcyAnICtcbiAgICAgICdQYWNraW5nTWV0aG9kIFBhZGRlZEZvcm0gUGFkZGluZyBQYWRlQXBwcm94aW1hbnQgUGFkTGVmdCBQYWRSaWdodCBQYWdlQnJlYWtBYm92ZSBQYWdlQnJlYWtCZWxvdyBQYWdlQnJlYWtXaXRoaW4gUGFnZUZvb3RlckxpbmVzIFBhZ2VGb290ZXJzIFBhZ2VIZWFkZXJMaW5lcyBQYWdlSGVhZGVycyBQYWdlSGVpZ2h0IFBhZ2VSYW5rQ2VudHJhbGl0eSBQYWdlV2lkdGggUGFpcmVkQmFyQ2hhcnQgUGFpcmVkSGlzdG9ncmFtIFBhaXJlZFNtb290aEhpc3RvZ3JhbSBQYWlyZWRUVGVzdCBQYWlyZWRaVGVzdCBQYWxldHRlTm90ZWJvb2sgUGFsZXR0ZVBhdGggUGFuZSBQYW5lQm94IFBhbmVCb3hPcHRpb25zIFBhbmVsIFBhbmVsQm94IFBhbmVsQm94T3B0aW9ucyBQYW5lbGVkIFBhbmVTZWxlY3RvciBQYW5lU2VsZWN0b3JCb3ggUGFuZVNlbGVjdG9yQm94T3B0aW9ucyBQYXBlcldpZHRoIFBhcmFib2xpY0N5bGluZGVyRCBQYXJhZ3JhcGhJbmRlbnQgUGFyYWdyYXBoU3BhY2luZyBQYXJhbGxlbEFycmF5IFBhcmFsbGVsQ29tYmluZSBQYXJhbGxlbERvIFBhcmFsbGVsRXZhbHVhdGUgUGFyYWxsZWxpemF0aW9uIFBhcmFsbGVsaXplIFBhcmFsbGVsTWFwIFBhcmFsbGVsTmVlZHMgUGFyYWxsZWxQcm9kdWN0IFBhcmFsbGVsU3VibWl0IFBhcmFsbGVsU3VtIFBhcmFsbGVsVGFibGUgUGFyYWxsZWxUcnkgUGFyYW1ldGVyIFBhcmFtZXRlckVzdGltYXRvciBQYXJhbWV0ZXJNaXh0dXJlRGlzdHJpYnV0aW9uIFBhcmFtZXRlclZhcmlhYmxlcyBQYXJhbWV0cmljRnVuY3Rpb24gUGFyYW1ldHJpY05EU29sdmUgUGFyYW1ldHJpY05EU29sdmVWYWx1ZSBQYXJhbWV0cmljUGxvdCBQYXJhbWV0cmljUGxvdDNEIFBhcmVudENvbm5lY3QgUGFyZW50RGlyZWN0b3J5IFBhcmVudEZvcm0gUGFyZW50aGVzaXplIFBhcmVudExpc3QgUGFyZXRvRGlzdHJpYnV0aW9uIFBhcnQgUGFydGlhbENvcnJlbGF0aW9uRnVuY3Rpb24gUGFydGlhbEQgUGFydGljbGVEYXRhIFBhcnRpdGlvbiBQYXJ0aXRpb25zUCBQYXJ0aXRpb25zUSBQYXJ6ZW5XaW5kb3cgUGFzY2FsRGlzdHJpYnV0aW9uIFBhc3NFdmVudHNEb3duIFBhc3NFdmVudHNVcCBQYXN0ZSBQYXN0ZUJveEZvcm1JbmxpbmVDZWxscyBQYXN0ZUJ1dHRvbiBQYXRoIFBhdGhHcmFwaCBQYXRoR3JhcGhRIFBhdHRlcm4gUGF0dGVyblNlcXVlbmNlIFBhdHRlcm5UZXN0IFBhdWxpTWF0cml4IFBhdWxXYXZlbGV0IFBhdXNlIFBhdXNlZFRpbWUgUERGIFBlYXJzb25DaGlTcXVhcmVUZXN0IFBlYXJzb25Db3JyZWxhdGlvblRlc3QgUGVhcnNvbkRpc3RyaWJ1dGlvbiBQZXJmb3JtYW5jZUdvYWwgUGVyaW9kaWNJbnRlcnBvbGF0aW9uIFBlcmlvZG9ncmFtIFBlcmlvZG9ncmFtQXJyYXkgUGVybXV0YXRpb25DeWNsZXMgUGVybXV0YXRpb25DeWNsZXNRIFBlcm11dGF0aW9uR3JvdXAgUGVybXV0YXRpb25MZW5ndGggUGVybXV0YXRpb25MaXN0IFBlcm11dGF0aW9uTGlzdFEgUGVybXV0YXRpb25NYXggUGVybXV0YXRpb25NaW4gUGVybXV0YXRpb25PcmRlciBQZXJtdXRhdGlvblBvd2VyIFBlcm11dGF0aW9uUHJvZHVjdCBQZXJtdXRhdGlvblJlcGxhY2UgUGVybXV0YXRpb25zIFBlcm11dGF0aW9uU3VwcG9ydCBQZXJtdXRlIFBlcm9uYU1hbGlrRmlsdGVyIFBlcnBlbmRpY3VsYXIgUEVSVERpc3RyaWJ1dGlvbiBQZXRlcnNlbkdyYXBoIFBoYXNlTWFyZ2lucyBQaSBQaWNrIFBJRERhdGEgUElERGVyaXZhdGl2ZUZpbHRlciBQSURGZWVkZm9yd2FyZCBQSURUdW5lIFBpZWNld2lzZSBQaWVjZXdpc2VFeHBhbmQgUGllQ2hhcnQgUGllQ2hhcnQzRCBQaWxsYWlUcmFjZSBQaWxsYWlUcmFjZVRlc3QgUGluayBQaXZvdGluZyBQaXhlbENvbnN0cmFpbmVkIFBpeGVsVmFsdWUgUGl4ZWxWYWx1ZVBvc2l0aW9ucyBQbGFjZWQgUGxhY2Vob2xkZXIgUGxhY2Vob2xkZXJSZXBsYWNlIFBsYWluIFBsYW5hckdyYXBoUSBQbGF5IFBsYXlSYW5nZSBQbG90IFBsb3QzRCBQbG90M01hdHJpeCBQbG90RGl2aXNpb24gUGxvdEpvaW5lZCBQbG90TGFiZWwgUGxvdExheW91dCBQbG90TGVnZW5kcyBQbG90TWFya2VycyBQbG90UG9pbnRzIFBsb3RSYW5nZSBQbG90UmFuZ2VDbGlwcGluZyBQbG90UmFuZ2VQYWRkaW5nIFBsb3RSZWdpb24gUGxvdFN0eWxlIFBsdXMgUGx1c01pbnVzIFBvY2hoYW1tZXIgUG9kU3RhdGVzIFBvZFdpZHRoIFBvaW50IFBvaW50M0RCb3ggUG9pbnRCb3ggUG9pbnRGaWd1cmVDaGFydCBQb2ludEZvcm0gUG9pbnRMZWdlbmQgUG9pbnRTaXplIFBvaXNzb25Db25zdWxEaXN0cmlidXRpb24gUG9pc3NvbkRpc3RyaWJ1dGlvbiBQb2lzc29uUHJvY2VzcyBQb2lzc29uV2luZG93IFBvbGFyQXhlcyBQb2xhckF4ZXNPcmlnaW4gUG9sYXJHcmlkTGluZXMgUG9sYXJQbG90IFBvbGFyVGlja3MgUG9sZVplcm9NYXJrZXJzIFBvbHlhQWVwcGxpRGlzdHJpYnV0aW9uIFBvbHlHYW1tYSBQb2x5Z29uIFBvbHlnb24zREJveCBQb2x5Z29uM0RCb3hPcHRpb25zIFBvbHlnb25Cb3ggUG9seWdvbkJveE9wdGlvbnMgUG9seWdvbkhvbGVTY2FsZSBQb2x5Z29uSW50ZXJzZWN0aW9ucyBQb2x5Z29uU2NhbGUgUG9seWhlZHJvbkRhdGEgUG9seUxvZyBQb2x5bm9taWFsRXh0ZW5kZWRHQ0QgUG9seW5vbWlhbEZvcm0gUG9seW5vbWlhbEdDRCBQb2x5bm9taWFsTENNIFBvbHlub21pYWxNb2QgUG9seW5vbWlhbFEgUG9seW5vbWlhbFF1b3RpZW50IFBvbHlub21pYWxRdW90aWVudFJlbWFpbmRlciBQb2x5bm9taWFsUmVkdWNlIFBvbHlub21pYWxSZW1haW5kZXIgUG9seW5vbWlhbHMgUG9wdXBNZW51IFBvcHVwTWVudUJveCBQb3B1cE1lbnVCb3hPcHRpb25zIFBvcHVwVmlldyBQb3B1cFdpbmRvdyBQb3NpdGlvbiBQb3NpdGl2ZSBQb3NpdGl2ZURlZmluaXRlTWF0cml4USBQb3NzaWJsZVplcm9RIFBvc3RmaXggUG9zdFNjcmlwdCBQb3dlciBQb3dlckRpc3RyaWJ1dGlvbiBQb3dlckV4cGFuZCBQb3dlck1vZCBQb3dlck1vZExpc3QgJyArXG4gICAgICAnUG93ZXJTcGVjdHJhbERlbnNpdHkgUG93ZXJzUmVwcmVzZW50YXRpb25zIFBvd2VyU3ltbWV0cmljUG9seW5vbWlhbCBQcmVjZWRlbmNlIFByZWNlZGVuY2VGb3JtIFByZWNlZGVzIFByZWNlZGVzRXF1YWwgUHJlY2VkZXNTbGFudEVxdWFsIFByZWNlZGVzVGlsZGUgUHJlY2lzaW9uIFByZWNpc2lvbkdvYWwgUHJlRGVjcmVtZW50IFByZWRpY3Rpb25Sb290IFByZWVtcHRQcm90ZWN0IFByZWZlcmVuY2VzUGF0aCBQcmVmaXggUHJlSW5jcmVtZW50IFByZXBlbmQgUHJlcGVuZFRvIFByZXNlcnZlSW1hZ2VPcHRpb25zIFByZXZpb3VzIFByaWNlR3JhcGhEaXN0cmlidXRpb24gUHJpbWFyeVBsYWNlaG9sZGVyIFByaW1lIFByaW1lTnUgUHJpbWVPbWVnYSBQcmltZVBpIFByaW1lUG93ZXJRIFByaW1lUSBQcmltZXMgUHJpbWVaZXRhUCBQcmltaXRpdmVSb290IFByaW5jaXBhbENvbXBvbmVudHMgUHJpbmNpcGFsVmFsdWUgUHJpbnQgUHJpbnRBY3Rpb24gUHJpbnRGb3JtIFByaW50aW5nQ29waWVzIFByaW50aW5nT3B0aW9ucyBQcmludGluZ1BhZ2VSYW5nZSBQcmludGluZ1N0YXJ0aW5nUGFnZU51bWJlciBQcmludGluZ1N0eWxlRW52aXJvbm1lbnQgUHJpbnRQcmVjaXNpb24gUHJpbnRUZW1wb3JhcnkgUHJpc20gUHJpc21Cb3ggUHJpc21Cb3hPcHRpb25zIFByaXZhdGVDZWxsT3B0aW9ucyBQcml2YXRlRXZhbHVhdGlvbk9wdGlvbnMgUHJpdmF0ZUZvbnRPcHRpb25zIFByaXZhdGVGcm9udEVuZE9wdGlvbnMgUHJpdmF0ZU5vdGVib29rT3B0aW9ucyBQcml2YXRlUGF0aHMgUHJvYmFiaWxpdHkgUHJvYmFiaWxpdHlEaXN0cmlidXRpb24gUHJvYmFiaWxpdHlQbG90IFByb2JhYmlsaXR5UHIgUHJvYmFiaWxpdHlTY2FsZVBsb3QgUHJvYml0TW9kZWxGaXQgUHJvY2Vzc0VzdGltYXRvciBQcm9jZXNzUGFyYW1ldGVyQXNzdW1wdGlvbnMgUHJvY2Vzc1BhcmFtZXRlclEgUHJvY2Vzc1N0YXRlRG9tYWluIFByb2Nlc3NUaW1lRG9tYWluIFByb2R1Y3QgUHJvZHVjdERpc3RyaWJ1dGlvbiBQcm9kdWN0TG9nIFByb2dyZXNzSW5kaWNhdG9yIFByb2dyZXNzSW5kaWNhdG9yQm94IFByb2dyZXNzSW5kaWNhdG9yQm94T3B0aW9ucyBQcm9qZWN0aW9uIFByb2xvZyBQcm9tcHRGb3JtIFByb3BlcnRpZXMgUHJvcGVydHkgUHJvcGVydHlMaXN0IFByb3BlcnR5VmFsdWUgUHJvcG9ydGlvbiBQcm9wb3J0aW9uYWwgUHJvdGVjdCBQcm90ZWN0ZWQgUHJvdGVpbkRhdGEgUHJ1bmluZyBQc2V1ZG9JbnZlcnNlIFB1cnBsZSBQdXQgUHV0QXBwZW5kIFB5cmFtaWQgUHlyYW1pZEJveCBQeXJhbWlkQm94T3B0aW9ucyAnICtcbiAgICAgICdRQmlub21pYWwgUUZhY3RvcmlhbCBRR2FtbWEgUUh5cGVyZ2VvbWV0cmljUEZRIFFQb2NoaGFtbWVyIFFQb2x5R2FtbWEgUVJEZWNvbXBvc2l0aW9uIFF1YWRyYXRpY0lycmF0aW9uYWxRIFF1YW50aWxlIFF1YW50aWxlUGxvdCBRdWFudGl0eSBRdWFudGl0eUZvcm0gUXVhbnRpdHlNYWduaXR1ZGUgUXVhbnRpdHlRIFF1YW50aXR5VW5pdCBRdWFydGljcyBRdWFydGlsZURldmlhdGlvbiBRdWFydGlsZXMgUXVhcnRpbGVTa2V3bmVzcyBRdWV1ZWluZ05ldHdvcmtQcm9jZXNzIFF1ZXVlaW5nUHJvY2VzcyBRdWV1ZVByb3BlcnRpZXMgUXVpZXQgUXVpdCBRdW90aWVudCBRdW90aWVudFJlbWFpbmRlciAnICtcbiAgICAgICdSYWRpYWxpdHlDZW50cmFsaXR5IFJhZGljYWxCb3ggUmFkaWNhbEJveE9wdGlvbnMgUmFkaW9CdXR0b24gUmFkaW9CdXR0b25CYXIgUmFkaW9CdXR0b25Cb3ggUmFkaW9CdXR0b25Cb3hPcHRpb25zIFJhZG9uIFJhbWFudWphblRhdSBSYW1hbnVqYW5UYXVMIFJhbWFudWphblRhdVRoZXRhIFJhbWFudWphblRhdVogUmFuZG9tIFJhbmRvbUNob2ljZSBSYW5kb21Db21wbGV4IFJhbmRvbUZ1bmN0aW9uIFJhbmRvbUdyYXBoIFJhbmRvbUltYWdlIFJhbmRvbUludGVnZXIgUmFuZG9tUGVybXV0YXRpb24gUmFuZG9tUHJpbWUgUmFuZG9tUmVhbCBSYW5kb21TYW1wbGUgUmFuZG9tU2VlZCBSYW5kb21WYXJpYXRlIFJhbmRvbVdhbGtQcm9jZXNzIFJhbmdlIFJhbmdlRmlsdGVyIFJhbmdlU3BlY2lmaWNhdGlvbiBSYW5rZWRNYXggUmFua2VkTWluIFJhc3RlciBSYXN0ZXIzRCBSYXN0ZXIzREJveCBSYXN0ZXIzREJveE9wdGlvbnMgUmFzdGVyQXJyYXkgUmFzdGVyQm94IFJhc3RlckJveE9wdGlvbnMgUmFzdGVyaXplIFJhc3RlclNpemUgUmF0aW9uYWwgUmF0aW9uYWxGdW5jdGlvbnMgUmF0aW9uYWxpemUgUmF0aW9uYWxzIFJhdGlvcyBSYXcgUmF3QXJyYXkgUmF3Qm94ZXMgUmF3RGF0YSBSYXdNZWRpdW0gUmF5bGVpZ2hEaXN0cmlidXRpb24gUmUgUmVhZCBSZWFkTGlzdCBSZWFkUHJvdGVjdGVkIFJlYWwgUmVhbEJsb2NrRGlhZ29uYWxGb3JtIFJlYWxEaWdpdHMgUmVhbEV4cG9uZW50IFJlYWxzIFJlYXAgUmVjb3JkIFJlY29yZExpc3RzIFJlY29yZFNlcGFyYXRvcnMgUmVjdGFuZ2xlIFJlY3RhbmdsZUJveCBSZWN0YW5nbGVCb3hPcHRpb25zIFJlY3RhbmdsZUNoYXJ0IFJlY3RhbmdsZUNoYXJ0M0QgUmVjdXJyZW5jZUZpbHRlciBSZWN1cnJlbmNlVGFibGUgUmVjdXJyaW5nRGlnaXRzRm9ybSBSZWQgUmVkdWNlIFJlZkJveCBSZWZlcmVuY2VMaW5lU3R5bGUgUmVmZXJlbmNlTWFya2VycyBSZWZlcmVuY2VNYXJrZXJTdHlsZSBSZWZpbmUgUmVmbGVjdGlvbk1hdHJpeCBSZWZsZWN0aW9uVHJhbnNmb3JtIFJlZnJlc2ggUmVmcmVzaFJhdGUgUmVnaW9uQmluYXJpemUgUmVnaW9uRnVuY3Rpb24gUmVnaW9uUGxvdCBSZWdpb25QbG90M0QgUmVndWxhckV4cHJlc3Npb24gUmVndWxhcml6YXRpb24gUmVpbnN0YWxsIFJlbGVhc2UgUmVsZWFzZUhvbGQgUmVsaWFiaWxpdHlEaXN0cmlidXRpb24gUmVsaWVmSW1hZ2UgUmVsaWVmUGxvdCBSZW1vdmUgUmVtb3ZlQWxwaGFDaGFubmVsIFJlbW92ZUFzeW5jaHJvbm91c1Rhc2sgUmVtb3ZlZCBSZW1vdmVJbnB1dFN0cmVhbU1ldGhvZCBSZW1vdmVPdXRwdXRTdHJlYW1NZXRob2QgUmVtb3ZlUHJvcGVydHkgUmVtb3ZlU2NoZWR1bGVkVGFzayBSZW5hbWVEaXJlY3RvcnkgUmVuYW1lRmlsZSBSZW5kZXJBbGwgUmVuZGVyaW5nT3B0aW9ucyBSZW5ld2FsUHJvY2VzcyBSZW5rb0NoYXJ0IFJlcGVhdGVkIFJlcGVhdGVkTnVsbCBSZXBlYXRlZFN0cmluZyBSZXBsYWNlIFJlcGxhY2VBbGwgUmVwbGFjZUhlbGRQYXJ0IFJlcGxhY2VJbWFnZVZhbHVlIFJlcGxhY2VMaXN0IFJlcGxhY2VQYXJ0IFJlcGxhY2VQaXhlbFZhbHVlIFJlcGxhY2VSZXBlYXRlZCBSZXNhbXBsaW5nIFJlc2NhbGUgUmVzY2FsaW5nVHJhbnNmb3JtIFJlc2V0RGlyZWN0b3J5IFJlc2V0TWVudXNQYWNrZXQgUmVzZXRTY2hlZHVsZWRUYXNrIFJlc2lkdWUgUmVzb2x2ZSBSZXN0IFJlc3VsdGFudCBSZXN1bWVQYWNrZXQgUmV0dXJuIFJldHVybkV4cHJlc3Npb25QYWNrZXQgUmV0dXJuSW5wdXRGb3JtUGFja2V0IFJldHVyblBhY2tldCBSZXR1cm5UZXh0UGFja2V0IFJldmVyc2UgUmV2ZXJzZUJpb3J0aG9nb25hbFNwbGluZVdhdmVsZXQgUmV2ZXJzZUVsZW1lbnQgUmV2ZXJzZUVxdWlsaWJyaXVtIFJldmVyc2VHcmFwaCBSZXZlcnNlVXBFcXVpbGlicml1bSBSZXZvbHV0aW9uQXhpcyBSZXZvbHV0aW9uUGxvdDNEIFJHQkNvbG9yIFJpY2NhdGlTb2x2ZSBSaWNlRGlzdHJpYnV0aW9uIFJpZGdlRmlsdGVyIFJpZW1hbm5SIFJpZW1hbm5TaWVnZWxUaGV0YSBSaWVtYW5uU2llZ2VsWiBSaWZmbGUgUmlnaHQgUmlnaHRBcnJvdyBSaWdodEFycm93QmFyIFJpZ2h0QXJyb3dMZWZ0QXJyb3cgUmlnaHRDb3NldFJlcHJlc2VudGF0aXZlIFJpZ2h0RG93blRlZVZlY3RvciBSaWdodERvd25WZWN0b3IgUmlnaHREb3duVmVjdG9yQmFyIFJpZ2h0VGVlIFJpZ2h0VGVlQXJyb3cgUmlnaHRUZWVWZWN0b3IgUmlnaHRUcmlhbmdsZSBSaWdodFRyaWFuZ2xlQmFyIFJpZ2h0VHJpYW5nbGVFcXVhbCBSaWdodFVwRG93blZlY3RvciBSaWdodFVwVGVlVmVjdG9yIFJpZ2h0VXBWZWN0b3IgUmlnaHRVcFZlY3RvckJhciBSaWdodFZlY3RvciBSaWdodFZlY3RvckJhciBSaXNrQWNoaWV2ZW1lbnRJbXBvcnRhbmNlIFJpc2tSZWR1Y3Rpb25JbXBvcnRhbmNlIFJvZ2Vyc1Rhbmltb3RvRGlzc2ltaWxhcml0eSBSb290IFJvb3RBcHByb3hpbWFudCBSb290SW50ZXJ2YWxzIFJvb3RMb2N1c1Bsb3QgUm9vdE1lYW5TcXVhcmUgUm9vdE9mVW5pdHlRIFJvb3RSZWR1Y2UgUm9vdHMgUm9vdFN1bSBSb3RhdGUgUm90YXRlTGFiZWwgUm90YXRlTGVmdCBSb3RhdGVSaWdodCBSb3RhdGlvbkFjdGlvbiBSb3RhdGlvbkJveCBSb3RhdGlvbkJveE9wdGlvbnMgUm90YXRpb25NYXRyaXggUm90YXRpb25UcmFuc2Zvcm0gUm91bmQgUm91bmRJbXBsaWVzIFJvdW5kaW5nUmFkaXVzIFJvdyBSb3dBbGlnbm1lbnRzIFJvd0JhY2tncm91bmRzIFJvd0JveCBSb3dIZWlnaHRzIFJvd0xpbmVzIFJvd01pbkhlaWdodCBSb3dSZWR1Y2UgUm93c0VxdWFsIFJvd1NwYWNpbmdzIFJTb2x2ZSBSdWR2YWxpc0dyb3VwUnUgUnVsZSBSdWxlQ29uZGl0aW9uIFJ1bGVEZWxheWVkIFJ1bGVGb3JtIFJ1bGVyVW5pdHMgUnVuIFJ1blNjaGVkdWxlZFRhc2sgUnVuVGhyb3VnaCBSdW50aW1lQXR0cmlidXRlcyBSdW50aW1lT3B0aW9ucyBSdXNzZWxsUmFvRGlzc2ltaWxhcml0eSAnICtcbiAgICAgICdTYW1lUSBTYW1lVGVzdCBTYW1wbGVEZXB0aCBTYW1wbGVkU291bmRGdW5jdGlvbiBTYW1wbGVkU291bmRMaXN0IFNhbXBsZVJhdGUgU2FtcGxpbmdQZXJpb2QgU0FSSU1BUHJvY2VzcyBTQVJNQVByb2Nlc3MgU2F0aXNmaWFiaWxpdHlDb3VudCBTYXRpc2ZpYWJpbGl0eUluc3RhbmNlcyBTYXRpc2ZpYWJsZVEgU2F0dXJkYXkgU2F2ZSBTYXZlYWJsZSBTYXZlQXV0b0RlbGV0ZSBTYXZlRGVmaW5pdGlvbnMgU2F3dG9vdGhXYXZlIFNjYWxlIFNjYWxlZCBTY2FsZURpdmlzaW9ucyBTY2FsZWRNb3VzZVBvc2l0aW9uIFNjYWxlT3JpZ2luIFNjYWxlUGFkZGluZyBTY2FsZVJhbmdlcyBTY2FsZVJhbmdlU3R5bGUgU2NhbGluZ0Z1bmN0aW9ucyBTY2FsaW5nTWF0cml4IFNjYWxpbmdUcmFuc2Zvcm0gU2NhbiBTY2hlZHVsZWRUYXNrQWN0aXZlUSBTY2hlZHVsZWRUYXNrRGF0YSBTY2hlZHVsZWRUYXNrT2JqZWN0IFNjaGVkdWxlZFRhc2tzIFNjaHVyRGVjb21wb3NpdGlvbiBTY2llbnRpZmljRm9ybSBTY3JlZW5SZWN0YW5nbGUgU2NyZWVuU3R5bGVFbnZpcm9ubWVudCBTY3JpcHRCYXNlbGluZVNoaWZ0cyBTY3JpcHRMZXZlbCBTY3JpcHRNaW5TaXplIFNjcmlwdFJ1bGVzIFNjcmlwdFNpemVNdWx0aXBsaWVycyBTY3JvbGxiYXJzIFNjcm9sbGluZ09wdGlvbnMgU2Nyb2xsUG9zaXRpb24gU2VjIFNlY2ggU2VjaERpc3RyaWJ1dGlvbiBTZWN0aW9uR3JvdXBpbmcgU2VjdG9yQ2hhcnQgU2VjdG9yQ2hhcnQzRCBTZWN0b3JPcmlnaW4gU2VjdG9yU3BhY2luZyBTZWVkUmFuZG9tIFNlbGVjdCBTZWxlY3RhYmxlIFNlbGVjdENvbXBvbmVudHMgU2VsZWN0ZWRDZWxscyBTZWxlY3RlZE5vdGVib29rIFNlbGVjdGlvbiBTZWxlY3Rpb25BbmltYXRlIFNlbGVjdGlvbkNlbGwgU2VsZWN0aW9uQ2VsbENyZWF0ZUNlbGwgU2VsZWN0aW9uQ2VsbERlZmF1bHRTdHlsZSBTZWxlY3Rpb25DZWxsUGFyZW50U3R5bGUgU2VsZWN0aW9uQ3JlYXRlQ2VsbCBTZWxlY3Rpb25EZWJ1Z2dlclRhZyBTZWxlY3Rpb25EdXBsaWNhdGVDZWxsIFNlbGVjdGlvbkV2YWx1YXRlIFNlbGVjdGlvbkV2YWx1YXRlQ3JlYXRlQ2VsbCBTZWxlY3Rpb25Nb3ZlIFNlbGVjdGlvblBsYWNlaG9sZGVyIFNlbGVjdGlvblNldFN0eWxlIFNlbGVjdFdpdGhDb250ZW50cyBTZWxmTG9vcHMgU2VsZkxvb3BTdHlsZSBTZW1pYWxnZWJyYWljQ29tcG9uZW50SW5zdGFuY2VzIFNlbmRNYWlsIFNlcXVlbmNlIFNlcXVlbmNlQWxpZ25tZW50IFNlcXVlbmNlRm9ybSBTZXF1ZW5jZUhvbGQgU2VxdWVuY2VMaW1pdCBTZXJpZXMgU2VyaWVzQ29lZmZpY2llbnQgU2VyaWVzRGF0YSBTZXNzaW9uVGltZSBTZXQgU2V0QWNjdXJhY3kgU2V0QWxwaGFDaGFubmVsIFNldEF0dHJpYnV0ZXMgU2V0YmFja3MgU2V0Qm94Rm9ybU5hbWVzUGFja2V0IFNldERlbGF5ZWQgU2V0RGlyZWN0b3J5IFNldEVudmlyb25tZW50IFNldEV2YWx1YXRpb25Ob3RlYm9vayBTZXRGaWxlRGF0ZSBTZXRGaWxlTG9hZGluZ0NvbnRleHQgU2V0Tm90ZWJvb2tTdGF0dXNMaW5lIFNldE9wdGlvbnMgU2V0T3B0aW9uc1BhY2tldCBTZXRQcmVjaXNpb24gU2V0UHJvcGVydHkgU2V0U2VsZWN0ZWROb3RlYm9vayBTZXRTaGFyZWRGdW5jdGlvbiBTZXRTaGFyZWRWYXJpYWJsZSBTZXRTcGVlY2hQYXJhbWV0ZXJzUGFja2V0IFNldFN0cmVhbVBvc2l0aW9uIFNldFN5c3RlbU9wdGlvbnMgU2V0dGVyIFNldHRlckJhciBTZXR0ZXJCb3ggU2V0dGVyQm94T3B0aW9ucyBTZXR0aW5nIFNldFZhbHVlIFNoYWRpbmcgU2hhbGxvdyBTaGFubm9uV2F2ZWxldCBTaGFwaXJvV2lsa1Rlc3QgU2hhcmUgU2hhcnBlbiBTaGVhcmluZ01hdHJpeCBTaGVhcmluZ1RyYW5zZm9ybSBTaGVuQ2FzdGFuTWF0cml4IFNob3J0IFNob3J0RG93bkFycm93IFNob3J0ZXN0IFNob3J0ZXN0TWF0Y2ggU2hvcnRlc3RQYXRoRnVuY3Rpb24gU2hvcnRMZWZ0QXJyb3cgU2hvcnRSaWdodEFycm93IFNob3J0VXBBcnJvdyBTaG93IFNob3dBdXRvU3R5bGVzIFNob3dDZWxsQnJhY2tldCBTaG93Q2VsbExhYmVsIFNob3dDZWxsVGFncyBTaG93Q2xvc2VkQ2VsbEFyZWEgU2hvd0NvbnRlbnRzIFNob3dDb250cm9scyBTaG93Q3Vyc29yVHJhY2tlciBTaG93R3JvdXBPcGVuQ2xvc2VJY29uIFNob3dHcm91cE9wZW5lciBTaG93SW52aXNpYmxlQ2hhcmFjdGVycyBTaG93UGFnZUJyZWFrcyBTaG93UHJlZGljdGl2ZUludGVyZmFjZSBTaG93U2VsZWN0aW9uIFNob3dTaG9ydEJveEZvcm0gU2hvd1NwZWNpYWxDaGFyYWN0ZXJzIFNob3dTdHJpbmdDaGFyYWN0ZXJzIFNob3dTeW50YXhTdHlsZXMgU2hyaW5raW5nRGVsYXkgU2hyaW5rV3JhcEJvdW5kaW5nQm94IFNpZWdlbFRoZXRhIFNpZWdlbFR1a2V5VGVzdCBTaWduIFNpZ25hdHVyZSBTaWduZWRSYW5rVGVzdCBTaWduaWZpY2FuY2VMZXZlbCBTaWduUGFkZGluZyBTaWduVGVzdCBTaW1pbGFyaXR5UnVsZXMgU2ltcGxlR3JhcGggU2ltcGxlR3JhcGhRIFNpbXBsaWZ5IFNpbiBTaW5jIFNpbmdoTWFkZGFsYURpc3RyaWJ1dGlvbiBTaW5nbGVFdmFsdWF0aW9uIFNpbmdsZUxldHRlckl0YWxpY3MgU2luZ2xlTGV0dGVyU3R5bGUgU2luZ3VsYXJWYWx1ZURlY29tcG9zaXRpb24gU2luZ3VsYXJWYWx1ZUxpc3QgU2luZ3VsYXJWYWx1ZVBsb3QgU2luZ3VsYXJWYWx1ZXMgU2luaCBTaW5oSW50ZWdyYWwgU2luSW50ZWdyYWwgU2l4SlN5bWJvbCBTa2VsZXRvbiBTa2VsZXRvblRyYW5zZm9ybSBTa2VsbGFtRGlzdHJpYnV0aW9uIFNrZXduZXNzIFNrZXdOb3JtYWxEaXN0cmlidXRpb24gU2tpcCBTbGljZURpc3RyaWJ1dGlvbiBTbGlkZXIgU2xpZGVyMkQgU2xpZGVyMkRCb3ggU2xpZGVyMkRCb3hPcHRpb25zIFNsaWRlckJveCBTbGlkZXJCb3hPcHRpb25zIFNsaWRlVmlldyBTbG90IFNsb3RTZXF1ZW5jZSBTbWFsbCBTbWFsbENpcmNsZSBTbWFsbGVyIFNtaXRoRGVsYXlDb21wZW5zYXRvciBTbWl0aFdhdGVybWFuU2ltaWxhcml0eSAnICtcbiAgICAgICdTbW9vdGhEZW5zaXR5SGlzdG9ncmFtIFNtb290aEhpc3RvZ3JhbSBTbW9vdGhIaXN0b2dyYW0zRCBTbW9vdGhLZXJuZWxEaXN0cmlidXRpb24gU29jaWFsTWVkaWFEYXRhIFNvY2tldCBTb2thbFNuZWF0aERpc3NpbWlsYXJpdHkgU29sdmUgU29sdmVBbHdheXMgU29sdmVEZWxheWVkIFNvcnQgU29ydEJ5IFNvdW5kIFNvdW5kQW5kR3JhcGhpY3MgU291bmROb3RlIFNvdW5kVm9sdW1lIFNvdyBTcGFjZSBTcGFjZUZvcm0gU3BhY2VyIFNwYWNpbmdzIFNwYW4gU3BhbkFkanVzdG1lbnRzIFNwYW5DaGFyYWN0ZXJSb3VuZGluZyBTcGFuRnJvbUFib3ZlIFNwYW5Gcm9tQm90aCBTcGFuRnJvbUxlZnQgU3BhbkxpbmVUaGlja25lc3MgU3Bhbk1heFNpemUgU3Bhbk1pblNpemUgU3Bhbm5pbmdDaGFyYWN0ZXJzIFNwYW5TeW1tZXRyaWMgU3BhcnNlQXJyYXkgU3BhdGlhbEdyYXBoRGlzdHJpYnV0aW9uIFNwZWFrIFNwZWFrVGV4dFBhY2tldCBTcGVhcm1hblJhbmtUZXN0IFNwZWFybWFuUmhvIFNwZWN0cm9ncmFtIFNwZWN0cm9ncmFtQXJyYXkgU3BlY3VsYXJpdHkgU3BlbGxpbmdDb3JyZWN0aW9uIFNwZWxsaW5nRGljdGlvbmFyaWVzIFNwZWxsaW5nRGljdGlvbmFyaWVzUGF0aCBTcGVsbGluZ09wdGlvbnMgU3BlbGxpbmdTdWdnZXN0aW9uc1BhY2tldCBTcGhlcmUgU3BoZXJlQm94IFNwaGVyaWNhbEJlc3NlbEogU3BoZXJpY2FsQmVzc2VsWSBTcGhlcmljYWxIYW5rZWxIMSBTcGhlcmljYWxIYW5rZWxIMiBTcGhlcmljYWxIYXJtb25pY1kgU3BoZXJpY2FsUGxvdDNEIFNwaGVyaWNhbFJlZ2lvbiBTcGhlcm9pZGFsRWlnZW52YWx1ZSBTcGhlcm9pZGFsSm9pbmluZ0ZhY3RvciBTcGhlcm9pZGFsUFMgU3BoZXJvaWRhbFBTUHJpbWUgU3BoZXJvaWRhbFFTIFNwaGVyb2lkYWxRU1ByaW1lIFNwaGVyb2lkYWxSYWRpYWxGYWN0b3IgU3BoZXJvaWRhbFMxIFNwaGVyb2lkYWxTMVByaW1lIFNwaGVyb2lkYWxTMiBTcGhlcm9pZGFsUzJQcmltZSBTcGxpY2UgU3BsaWNlZERpc3RyaWJ1dGlvbiBTcGxpbmVDbG9zZWQgU3BsaW5lRGVncmVlIFNwbGluZUtub3RzIFNwbGluZVdlaWdodHMgU3BsaXQgU3BsaXRCeSBTcG9rZW5TdHJpbmcgU3FydCBTcXJ0Qm94IFNxcnRCb3hPcHRpb25zIFNxdWFyZSBTcXVhcmVkRXVjbGlkZWFuRGlzdGFuY2UgU3F1YXJlRnJlZVEgU3F1YXJlSW50ZXJzZWN0aW9uIFNxdWFyZXNSIFNxdWFyZVN1YnNldCBTcXVhcmVTdWJzZXRFcXVhbCBTcXVhcmVTdXBlcnNldCBTcXVhcmVTdXBlcnNldEVxdWFsIFNxdWFyZVVuaW9uIFNxdWFyZVdhdmUgU3RhYmlsaXR5TWFyZ2lucyBTdGFiaWxpdHlNYXJnaW5zU3R5bGUgU3RhYmxlRGlzdHJpYnV0aW9uIFN0YWNrIFN0YWNrQmVnaW4gU3RhY2tDb21wbGV0ZSBTdGFja0luaGliaXQgU3RhbmRhcmREZXZpYXRpb24gU3RhbmRhcmREZXZpYXRpb25GaWx0ZXIgU3RhbmRhcmRGb3JtIFN0YW5kYXJkaXplIFN0YW5kYnlEaXN0cmlidXRpb24gU3RhciBTdGFyR3JhcGggU3RhcnRBc3luY2hyb25vdXNUYXNrIFN0YXJ0aW5nU3RlcFNpemUgU3RhcnRPZkxpbmUgU3RhcnRPZlN0cmluZyBTdGFydFNjaGVkdWxlZFRhc2sgU3RhcnR1cFNvdW5kIFN0YXRlRGltZW5zaW9ucyBTdGF0ZUZlZWRiYWNrR2FpbnMgU3RhdGVPdXRwdXRFc3RpbWF0b3IgU3RhdGVSZXNwb25zZSBTdGF0ZVNwYWNlTW9kZWwgU3RhdGVTcGFjZVJlYWxpemF0aW9uIFN0YXRlU3BhY2VUcmFuc2Zvcm0gU3RhdGlvbmFyeURpc3RyaWJ1dGlvbiBTdGF0aW9uYXJ5V2F2ZWxldFBhY2tldFRyYW5zZm9ybSBTdGF0aW9uYXJ5V2F2ZWxldFRyYW5zZm9ybSBTdGF0dXNBcmVhIFN0YXR1c0NlbnRyYWxpdHkgU3RlcE1vbml0b3IgU3RpZWx0amVzR2FtbWEgU3RpcmxpbmdTMSBTdGlybGluZ1MyIFN0b3BBc3luY2hyb25vdXNUYXNrIFN0b3BTY2hlZHVsZWRUYXNrIFN0cmF0YVZhcmlhYmxlcyBTdHJhdG9ub3ZpY2hQcm9jZXNzIFN0cmVhbUNvbG9yRnVuY3Rpb24gU3RyZWFtQ29sb3JGdW5jdGlvblNjYWxpbmcgU3RyZWFtRGVuc2l0eVBsb3QgU3RyZWFtUGxvdCBTdHJlYW1Qb2ludHMgU3RyZWFtUG9zaXRpb24gU3RyZWFtcyBTdHJlYW1TY2FsZSBTdHJlYW1TdHlsZSBTdHJpbmcgU3RyaW5nQnJlYWsgU3RyaW5nQnl0ZUNvdW50IFN0cmluZ0Nhc2VzIFN0cmluZ0NvdW50IFN0cmluZ0Ryb3AgU3RyaW5nRXhwcmVzc2lvbiBTdHJpbmdGb3JtIFN0cmluZ0Zvcm1hdCBTdHJpbmdGcmVlUSBTdHJpbmdJbnNlcnQgU3RyaW5nSm9pbiBTdHJpbmdMZW5ndGggU3RyaW5nTWF0Y2hRIFN0cmluZ1Bvc2l0aW9uIFN0cmluZ1EgU3RyaW5nUmVwbGFjZSBTdHJpbmdSZXBsYWNlTGlzdCBTdHJpbmdSZXBsYWNlUGFydCBTdHJpbmdSZXZlcnNlIFN0cmluZ1JvdGF0ZUxlZnQgU3RyaW5nUm90YXRlUmlnaHQgU3RyaW5nU2tlbGV0b24gU3RyaW5nU3BsaXQgU3RyaW5nVGFrZSBTdHJpbmdUb1N0cmVhbSBTdHJpbmdUcmltIFN0cmlwQm94ZXMgU3RyaXBPbklucHV0IFN0cmlwV3JhcHBlckJveGVzIFN0cm9rZUZvcm0gU3RydWN0dXJhbEltcG9ydGFuY2UgU3RydWN0dXJlZEFycmF5IFN0cnVjdHVyZWRTZWxlY3Rpb24gU3RydXZlSCBTdHJ1dmVMIFN0dWIgU3R1ZGVudFREaXN0cmlidXRpb24gU3R5bGUgU3R5bGVCb3ggU3R5bGVCb3hBdXRvRGVsZXRlIFN0eWxlQm94T3B0aW9ucyBTdHlsZURhdGEgU3R5bGVEZWZpbml0aW9ucyBTdHlsZUZvcm0gU3R5bGVLZXlNYXBwaW5nIFN0eWxlTWVudUxpc3RpbmcgU3R5bGVOYW1lRGlhbG9nU2V0dGluZ3MgU3R5bGVOYW1lcyBTdHlsZVByaW50IFN0eWxlU2hlZXRQYXRoIFN1YmZhY3RvcmlhbCBTdWJncmFwaCBTdWJNaW51cyBTdWJQbHVzIFN1YnJlc3VsdGFudFBvbHlub21pYWxSZW1haW5kZXJzICcgK1xuICAgICAgJ1N1YnJlc3VsdGFudFBvbHlub21pYWxzIFN1YnJlc3VsdGFudHMgU3Vic2NyaXB0IFN1YnNjcmlwdEJveCBTdWJzY3JpcHRCb3hPcHRpb25zIFN1YnNjcmlwdGVkIFN1YnNldCBTdWJzZXRFcXVhbCBTdWJzZXRzIFN1YlN0YXIgU3Vic3VwZXJzY3JpcHQgU3Vic3VwZXJzY3JpcHRCb3ggU3Vic3VwZXJzY3JpcHRCb3hPcHRpb25zIFN1YnRyYWN0IFN1YnRyYWN0RnJvbSBTdWJWYWx1ZXMgU3VjY2VlZHMgU3VjY2VlZHNFcXVhbCBTdWNjZWVkc1NsYW50RXF1YWwgU3VjY2VlZHNUaWxkZSBTdWNoVGhhdCBTdW0gU3VtQ29udmVyZ2VuY2UgU3VuZGF5IFN1cGVyRGFnZ2VyIFN1cGVyTWludXMgU3VwZXJQbHVzIFN1cGVyc2NyaXB0IFN1cGVyc2NyaXB0Qm94IFN1cGVyc2NyaXB0Qm94T3B0aW9ucyBTdXBlcnNldCBTdXBlcnNldEVxdWFsIFN1cGVyU3RhciBTdXJkIFN1cmRGb3JtIFN1cmZhY2VDb2xvciBTdXJmYWNlR3JhcGhpY3MgU3Vydml2YWxEaXN0cmlidXRpb24gU3Vydml2YWxGdW5jdGlvbiBTdXJ2aXZhbE1vZGVsIFN1cnZpdmFsTW9kZWxGaXQgU3VzcGVuZFBhY2tldCBTdXp1a2lEaXN0cmlidXRpb24gU3V6dWtpR3JvdXBTdXogU3dhdGNoTGVnZW5kIFN3aXRjaCBTeW1ib2wgU3ltYm9sTmFtZSBTeW1sZXRXYXZlbGV0IFN5bW1ldHJpYyBTeW1tZXRyaWNHcm91cCBTeW1tZXRyaWNNYXRyaXhRIFN5bW1ldHJpY1BvbHlub21pYWwgU3ltbWV0cmljUmVkdWN0aW9uIFN5bW1ldHJpemUgU3ltbWV0cml6ZWRBcnJheSBTeW1tZXRyaXplZEFycmF5UnVsZXMgU3ltbWV0cml6ZWREZXBlbmRlbnRDb21wb25lbnRzIFN5bW1ldHJpemVkSW5kZXBlbmRlbnRDb21wb25lbnRzIFN5bW1ldHJpemVkUmVwbGFjZVBhcnQgU3luY2hyb25vdXNJbml0aWFsaXphdGlvbiBTeW5jaHJvbm91c1VwZGF0aW5nIFN5bnRheCBTeW50YXhGb3JtIFN5bnRheEluZm9ybWF0aW9uIFN5bnRheExlbmd0aCBTeW50YXhQYWNrZXQgU3ludGF4USBTeXN0ZW1EaWFsb2dJbnB1dCBTeXN0ZW1FeGNlcHRpb24gU3lzdGVtSGVscFBhdGggU3lzdGVtSW5mb3JtYXRpb24gU3lzdGVtSW5mb3JtYXRpb25EYXRhIFN5c3RlbU9wZW4gU3lzdGVtT3B0aW9ucyBTeXN0ZW1zTW9kZWxEZWxheSBTeXN0ZW1zTW9kZWxEZWxheUFwcHJveGltYXRlIFN5c3RlbXNNb2RlbERlbGV0ZSBTeXN0ZW1zTW9kZWxEaW1lbnNpb25zIFN5c3RlbXNNb2RlbEV4dHJhY3QgU3lzdGVtc01vZGVsRmVlZGJhY2tDb25uZWN0IFN5c3RlbXNNb2RlbExhYmVscyBTeXN0ZW1zTW9kZWxPcmRlciBTeXN0ZW1zTW9kZWxQYXJhbGxlbENvbm5lY3QgU3lzdGVtc01vZGVsU2VyaWVzQ29ubmVjdCBTeXN0ZW1zTW9kZWxTdGF0ZUZlZWRiYWNrQ29ubmVjdCBTeXN0ZW1TdHViICcgK1xuICAgICAgJ1RhYiBUYWJGaWxsaW5nIFRhYmxlIFRhYmxlQWxpZ25tZW50cyBUYWJsZURlcHRoIFRhYmxlRGlyZWN0aW9ucyBUYWJsZUZvcm0gVGFibGVIZWFkaW5ncyBUYWJsZVNwYWNpbmcgVGFibGVWaWV3IFRhYmxlVmlld0JveCBUYWJTcGFjaW5ncyBUYWJWaWV3IFRhYlZpZXdCb3ggVGFiVmlld0JveE9wdGlvbnMgVGFnQm94IFRhZ0JveE5vdGUgVGFnQm94T3B0aW9ucyBUYWdnaW5nUnVsZXMgVGFnU2V0IFRhZ1NldERlbGF5ZWQgVGFnU3R5bGUgVGFnVW5zZXQgVGFrZSBUYWtlV2hpbGUgVGFsbHkgVGFuIFRhbmggVGFyZ2V0RnVuY3Rpb25zIFRhcmdldFVuaXRzIFRhdXRvbG9neVEgVGVsZWdyYXBoUHJvY2VzcyBUZW1wbGF0ZUJveCBUZW1wbGF0ZUJveE9wdGlvbnMgVGVtcGxhdGVTbG90U2VxdWVuY2UgVGVtcG9yYWxEYXRhIFRlbXBvcmFyeSBUZW1wb3JhcnlWYXJpYWJsZSBUZW5zb3JDb250cmFjdCBUZW5zb3JEaW1lbnNpb25zIFRlbnNvckV4cGFuZCBUZW5zb3JQcm9kdWN0IFRlbnNvclEgVGVuc29yUmFuayBUZW5zb3JSZWR1Y2UgVGVuc29yU3ltbWV0cnkgVGVuc29yVHJhbnNwb3NlIFRlbnNvcldlZGdlIFRldHJhaGVkcm9uIFRldHJhaGVkcm9uQm94IFRldHJhaGVkcm9uQm94T3B0aW9ucyBUZVhGb3JtIFRlWFNhdmUgVGV4dCBUZXh0M0RCb3ggVGV4dDNEQm94T3B0aW9ucyBUZXh0QWxpZ25tZW50IFRleHRCYW5kIFRleHRCb3VuZGluZ0JveCBUZXh0Qm94IFRleHRDZWxsIFRleHRDbGlwYm9hcmRUeXBlIFRleHREYXRhIFRleHRGb3JtIFRleHRKdXN0aWZpY2F0aW9uIFRleHRMaW5lIFRleHRQYWNrZXQgVGV4dFBhcmFncmFwaCBUZXh0UmVjb2duaXplIFRleHRSZW5kZXJpbmcgVGV4dFN0eWxlIFRleHR1cmUgVGV4dHVyZUNvb3JkaW5hdGVGdW5jdGlvbiBUZXh0dXJlQ29vcmRpbmF0ZVNjYWxpbmcgVGhlcmVmb3JlIFRoZXJtb21ldGVyR2F1Z2UgVGhpY2sgVGhpY2tuZXNzIFRoaW4gVGhpbm5pbmcgVGhpc0xpbmsgVGhvbXBzb25Hcm91cFRoIFRocmVhZCBUaHJlZUpTeW1ib2wgVGhyZXNob2xkIFRocm91Z2ggVGhyb3cgVGh1bWJuYWlsIFRodXJzZGF5IFRpY2tzIFRpY2tzU3R5bGUgVGlsZGUgVGlsZGVFcXVhbCBUaWxkZUZ1bGxFcXVhbCBUaWxkZVRpbGRlIFRpbWVDb25zdHJhaW5lZCBUaW1lQ29uc3RyYWludCBUaW1lcyBUaW1lc0J5IFRpbWVTZXJpZXNGb3JlY2FzdCBUaW1lU2VyaWVzSW52ZXJ0aWJpbGl0eSBUaW1lVXNlZCBUaW1lVmFsdWUgVGltZVpvbmUgVGltaW5nIFRpbnkgVGl0bGVHcm91cGluZyBUaXRzR3JvdXBUIFRvQm94ZXMgVG9DaGFyYWN0ZXJDb2RlIFRvQ29sb3IgVG9Db250aW51b3VzVGltZU1vZGVsIFRvRGF0ZSBUb0Rpc2NyZXRlVGltZU1vZGVsIFRvZXBsaXR6TWF0cml4IFRvRXhwcmVzc2lvbiBUb0ZpbGVOYW1lIFRvZ2V0aGVyIFRvZ2dsZSBUb2dnbGVGYWxzZSBUb2dnbGVyIFRvZ2dsZXJCYXIgVG9nZ2xlckJveCBUb2dnbGVyQm94T3B0aW9ucyBUb0hlbGRFeHByZXNzaW9uIFRvSW52ZXJ0aWJsZVRpbWVTZXJpZXMgVG9rZW5Xb3JkcyBUb2xlcmFuY2UgVG9Mb3dlckNhc2UgVG9OdW1iZXJGaWVsZCBUb29CaWcgVG9vbHRpcCBUb29sdGlwQm94IFRvb2x0aXBCb3hPcHRpb25zIFRvb2x0aXBEZWxheSBUb29sdGlwU3R5bGUgVG9wIFRvcEhhdFRyYW5zZm9ybSBUb3BvbG9naWNhbFNvcnQgVG9SYWRpY2FscyBUb1J1bGVzIFRvU3RyaW5nIFRvdGFsIFRvdGFsSGVpZ2h0IFRvdGFsVmFyaWF0aW9uRmlsdGVyIFRvdGFsV2lkdGggVG91Y2hzY3JlZW5BdXRvWm9vbSBUb3VjaHNjcmVlbkNvbnRyb2xQbGFjZW1lbnQgVG9VcHBlckNhc2UgVHIgVHJhY2UgVHJhY2VBYm92ZSBUcmFjZUFjdGlvbiBUcmFjZUJhY2t3YXJkIFRyYWNlRGVwdGggVHJhY2VEaWFsb2cgVHJhY2VGb3J3YXJkIFRyYWNlSW50ZXJuYWwgVHJhY2VMZXZlbCBUcmFjZU9mZiBUcmFjZU9uIFRyYWNlT3JpZ2luYWwgVHJhY2VQcmludCBUcmFjZVNjYW4gVHJhY2tlZFN5bWJvbHMgVHJhZGluZ0NoYXJ0IFRyYWRpdGlvbmFsRm9ybSBUcmFkaXRpb25hbEZ1bmN0aW9uTm90YXRpb24gVHJhZGl0aW9uYWxOb3RhdGlvbiBUcmFkaXRpb25hbE9yZGVyIFRyYW5zZmVyRnVuY3Rpb25DYW5jZWwgVHJhbnNmZXJGdW5jdGlvbkV4cGFuZCBUcmFuc2ZlckZ1bmN0aW9uRmFjdG9yIFRyYW5zZmVyRnVuY3Rpb25Nb2RlbCBUcmFuc2ZlckZ1bmN0aW9uUG9sZXMgVHJhbnNmZXJGdW5jdGlvblRyYW5zZm9ybSBUcmFuc2ZlckZ1bmN0aW9uWmVyb3MgVHJhbnNmb3JtYXRpb25GdW5jdGlvbiBUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9ucyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUcmFuc2Zvcm1lZERpc3RyaWJ1dGlvbiBUcmFuc2Zvcm1lZEZpZWxkIFRyYW5zbGF0ZSBUcmFuc2xhdGlvblRyYW5zZm9ybSBUcmFuc3BhcmVudENvbG9yIFRyYW5zcG9zZSBUcmVlRm9ybSBUcmVlR3JhcGggVHJlZUdyYXBoUSBUcmVlUGxvdCBUcmVuZFN0eWxlIFRyaWFuZ2xlV2F2ZSBUcmlhbmd1bGFyRGlzdHJpYnV0aW9uIFRyaWcgVHJpZ0V4cGFuZCBUcmlnRmFjdG9yIFRyaWdGYWN0b3JMaXN0IFRyaWdnZXIgVHJpZ1JlZHVjZSBUcmlnVG9FeHAgVHJpbW1lZE1lYW4gVHJ1ZSBUcnVlUSBUcnVuY2F0ZWREaXN0cmlidXRpb24gVHNhbGxpc1FFeHBvbmVudGlhbERpc3RyaWJ1dGlvbiBUc2FsbGlzUUdhdXNzaWFuRGlzdHJpYnV0aW9uIFRUZXN0IFR1YmUgVHViZUJlemllckN1cnZlQm94IFR1YmVCZXppZXJDdXJ2ZUJveE9wdGlvbnMgVHViZUJveCBUdWJlQlNwbGluZUN1cnZlQm94IFR1YmVCU3BsaW5lQ3VydmVCb3hPcHRpb25zIFR1ZXNkYXkgVHVrZXlMYW1iZGFEaXN0cmlidXRpb24gVHVrZXlXaW5kb3cgVHVwbGVzIFR1cmFuR3JhcGggVHVyaW5nTWFjaGluZSAnICtcbiAgICAgICdUcmFuc3BhcmVudCAnICtcbiAgICAgICdVbmF0ZVEgVW5jb21wcmVzcyBVbmRlZmluZWQgVW5kZXJCYXIgVW5kZXJmbG93IFVuZGVybGluZWQgVW5kZXJvdmVyc2NyaXB0IFVuZGVyb3ZlcnNjcmlwdEJveCBVbmRlcm92ZXJzY3JpcHRCb3hPcHRpb25zIFVuZGVyc2NyaXB0IFVuZGVyc2NyaXB0Qm94IFVuZGVyc2NyaXB0Qm94T3B0aW9ucyBVbmRpcmVjdGVkRWRnZSBVbmRpcmVjdGVkR3JhcGggVW5kaXJlY3RlZEdyYXBoUSBVbmRvY3VtZW50ZWRUZXN0RkVQYXJzZXJQYWNrZXQgVW5kb2N1bWVudGVkVGVzdEdldFNlbGVjdGlvblBhY2tldCBVbmVxdWFsIFVuZXZhbHVhdGVkIFVuaWZvcm1EaXN0cmlidXRpb24gVW5pZm9ybUdyYXBoRGlzdHJpYnV0aW9uIFVuaWZvcm1TdW1EaXN0cmlidXRpb24gVW5pbnN0YWxsIFVuaW9uIFVuaW9uUGx1cyBVbmlxdWUgVW5pdEJveCBVbml0Q29udmVydCBVbml0RGltZW5zaW9ucyBVbml0aXplIFVuaXRSb290VGVzdCBVbml0U2ltcGxpZnkgVW5pdFN0ZXAgVW5pdFRyaWFuZ2xlIFVuaXRWZWN0b3IgVW5wcm90ZWN0IFVuc2FtZVEgVW5zYXZlZFZhcmlhYmxlcyBVbnNldCBVbnNldFNoYXJlZCBVbnRyYWNrZWRWYXJpYWJsZXMgVXAgVXBBcnJvdyBVcEFycm93QmFyIFVwQXJyb3dEb3duQXJyb3cgVXBkYXRlIFVwZGF0ZUR5bmFtaWNPYmplY3RzIFVwZGF0ZUR5bmFtaWNPYmplY3RzU3luY2hyb25vdXMgVXBkYXRlSW50ZXJ2YWwgVXBEb3duQXJyb3cgVXBFcXVpbGlicml1bSBVcHBlckNhc2VRIFVwcGVyTGVmdEFycm93IFVwcGVyUmlnaHRBcnJvdyBVcHBlclRyaWFuZ3VsYXJpemUgVXBzYW1wbGUgVXBTZXQgVXBTZXREZWxheWVkIFVwVGVlIFVwVGVlQXJyb3cgVXBWYWx1ZXMgVVJMIFVSTEZldGNoIFVSTEZldGNoQXN5bmNocm9ub3VzIFVSTFNhdmUgVVJMU2F2ZUFzeW5jaHJvbm91cyBVc2VHcmFwaGljc1JhbmdlIFVzaW5nIFVzaW5nRnJvbnRFbmQgJyArXG4gICAgICAnVjJHZXQgVmFsaWRhdGlvbkxlbmd0aCBWYWx1ZSBWYWx1ZUJveCBWYWx1ZUJveE9wdGlvbnMgVmFsdWVGb3JtIFZhbHVlUSBWYWx1ZXNEYXRhIFZhcmlhYmxlcyBWYXJpYW5jZSBWYXJpYW5jZUVxdWl2YWxlbmNlVGVzdCBWYXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uIFZhcmlhbmNlR2FtbWFEaXN0cmlidXRpb24gVmFyaWFuY2VUZXN0IFZlY3RvckFuZ2xlIFZlY3RvckNvbG9yRnVuY3Rpb24gVmVjdG9yQ29sb3JGdW5jdGlvblNjYWxpbmcgVmVjdG9yRGVuc2l0eVBsb3QgVmVjdG9yR2x5cGhEYXRhIFZlY3RvclBsb3QgVmVjdG9yUGxvdDNEIFZlY3RvclBvaW50cyBWZWN0b3JRIFZlY3RvcnMgVmVjdG9yU2NhbGUgVmVjdG9yU3R5bGUgVmVlIFZlcmJhdGltIFZlcmJvc2UgVmVyYm9zZUNvbnZlcnRUb1Bvc3RTY3JpcHRQYWNrZXQgVmVyaWZ5Q29udmVyZ2VuY2UgVmVyaWZ5U29sdXRpb25zIFZlcmlmeVRlc3RBc3N1bXB0aW9ucyBWZXJzaW9uIFZlcnNpb25OdW1iZXIgVmVydGV4QWRkIFZlcnRleENhcGFjaXR5IFZlcnRleENvbG9ycyBWZXJ0ZXhDb21wb25lbnQgVmVydGV4Q29ubmVjdGl2aXR5IFZlcnRleENvb3JkaW5hdGVSdWxlcyBWZXJ0ZXhDb29yZGluYXRlcyBWZXJ0ZXhDb3JyZWxhdGlvblNpbWlsYXJpdHkgVmVydGV4Q29zaW5lU2ltaWxhcml0eSBWZXJ0ZXhDb3VudCBWZXJ0ZXhDb3ZlclEgVmVydGV4RGF0YUNvb3JkaW5hdGVzIFZlcnRleERlZ3JlZSBWZXJ0ZXhEZWxldGUgVmVydGV4RGljZVNpbWlsYXJpdHkgVmVydGV4RWNjZW50cmljaXR5IFZlcnRleEluQ29tcG9uZW50IFZlcnRleEluRGVncmVlIFZlcnRleEluZGV4IFZlcnRleEphY2NhcmRTaW1pbGFyaXR5IFZlcnRleExhYmVsaW5nIFZlcnRleExhYmVscyBWZXJ0ZXhMYWJlbFN0eWxlIFZlcnRleExpc3QgVmVydGV4Tm9ybWFscyBWZXJ0ZXhPdXRDb21wb25lbnQgVmVydGV4T3V0RGVncmVlIFZlcnRleFEgVmVydGV4UmVuZGVyaW5nRnVuY3Rpb24gVmVydGV4UmVwbGFjZSBWZXJ0ZXhTaGFwZSBWZXJ0ZXhTaGFwZUZ1bmN0aW9uIFZlcnRleFNpemUgVmVydGV4U3R5bGUgVmVydGV4VGV4dHVyZUNvb3JkaW5hdGVzIFZlcnRleFdlaWdodCBWZXJ0aWNhbCBWZXJ0aWNhbEJhciBWZXJ0aWNhbEZvcm0gVmVydGljYWxHYXVnZSBWZXJ0aWNhbFNlcGFyYXRvciBWZXJ0aWNhbFNsaWRlciBWZXJ0aWNhbFRpbGRlIFZpZXdBbmdsZSBWaWV3Q2VudGVyIFZpZXdNYXRyaXggVmlld1BvaW50IFZpZXdQb2ludFNlbGVjdG9yU2V0dGluZ3MgVmlld1BvcnQgVmlld1JhbmdlIFZpZXdWZWN0b3IgVmlld1ZlcnRpY2FsIFZpcnR1YWxHcm91cERhdGEgVmlzaWJsZSBWaXNpYmxlQ2VsbCBWb2lndERpc3RyaWJ1dGlvbiBWb25NaXNlc0Rpc3RyaWJ1dGlvbiAnICtcbiAgICAgICdXYWl0QWxsIFdhaXRBc3luY2hyb25vdXNUYXNrIFdhaXROZXh0IFdhaXRVbnRpbCBXYWtlYnlEaXN0cmlidXRpb24gV2FsbGVuaXVzSHlwZXJnZW9tZXRyaWNEaXN0cmlidXRpb24gV2FyaW5nWXVsZURpc3RyaWJ1dGlvbiBXYXRlcnNoZWRDb21wb25lbnRzIFdhdHNvblVTcXVhcmVUZXN0IFdhdHRzU3Ryb2dhdHpHcmFwaERpc3RyaWJ1dGlvbiBXYXZlbGV0QmVzdEJhc2lzIFdhdmVsZXRGaWx0ZXJDb2VmZmljaWVudHMgV2F2ZWxldEltYWdlUGxvdCBXYXZlbGV0TGlzdFBsb3QgV2F2ZWxldE1hcEluZGV4ZWQgV2F2ZWxldE1hdHJpeFBsb3QgV2F2ZWxldFBoaSBXYXZlbGV0UHNpIFdhdmVsZXRTY2FsZSBXYXZlbGV0U2NhbG9ncmFtIFdhdmVsZXRUaHJlc2hvbGQgV2Vha2x5Q29ubmVjdGVkQ29tcG9uZW50cyBXZWFrbHlDb25uZWN0ZWRHcmFwaFEgV2Vha1N0YXRpb25hcml0eSBXZWF0aGVyRGF0YSBXZWJlckUgV2VkZ2UgV2VkbmVzZGF5IFdlaWJ1bGxEaXN0cmlidXRpb24gV2VpZXJzdHJhc3NIYWxmUGVyaW9kcyBXZWllcnN0cmFzc0ludmFyaWFudHMgV2VpZXJzdHJhc3NQIFdlaWVyc3RyYXNzUFByaW1lIFdlaWVyc3RyYXNzU2lnbWEgV2VpZXJzdHJhc3NaZXRhIFdlaWdodGVkQWRqYWNlbmN5R3JhcGggV2VpZ2h0ZWRBZGphY2VuY3lNYXRyaXggV2VpZ2h0ZWREYXRhIFdlaWdodGVkR3JhcGhRIFdlaWdodHMgV2VsY2hXaW5kb3cgV2hlZWxHcmFwaCBXaGVuRXZlbnQgV2hpY2ggV2hpbGUgV2hpdGUgV2hpdGVzcGFjZSBXaGl0ZXNwYWNlQ2hhcmFjdGVyIFdoaXR0YWtlck0gV2hpdHRha2VyVyBXaWVuZXJGaWx0ZXIgV2llbmVyUHJvY2VzcyBXaWduZXJEIFdpZ25lclNlbWljaXJjbGVEaXN0cmlidXRpb24gV2lsa3NXIFdpbGtzV1Rlc3QgV2luZG93Q2xpY2tTZWxlY3QgV2luZG93RWxlbWVudHMgV2luZG93RmxvYXRpbmcgV2luZG93RnJhbWUgV2luZG93RnJhbWVFbGVtZW50cyBXaW5kb3dNYXJnaW5zIFdpbmRvd01vdmFibGUgV2luZG93T3BhY2l0eSBXaW5kb3dTZWxlY3RlZCBXaW5kb3dTaXplIFdpbmRvd1N0YXR1c0FyZWEgV2luZG93VGl0bGUgV2luZG93VG9vbGJhcnMgV2luZG93V2lkdGggV2l0aCBXb2xmcmFtQWxwaGEgV29sZnJhbUFscGhhRGF0ZSBXb2xmcmFtQWxwaGFRdWFudGl0eSBXb2xmcmFtQWxwaGFSZXN1bHQgV29yZCBXb3JkQm91bmRhcnkgV29yZENoYXJhY3RlciBXb3JkRGF0YSBXb3JkU2VhcmNoIFdvcmRTZXBhcmF0b3JzIFdvcmtpbmdQcmVjaXNpb24gV3JpdGUgV3JpdGVTdHJpbmcgV3JvbnNraWFuICcgK1xuICAgICAgJ1hNTEVsZW1lbnQgWE1MT2JqZWN0IFhub3IgWG9yICcgK1xuICAgICAgJ1llbGxvdyBZdWxlRGlzc2ltaWxhcml0eSAnICtcbiAgICAgICdaZXJuaWtlUiBaZXJvU3ltbWV0cmljIFplcm9UZXN0IFplcm9XaWR0aFRpbWVzIFpldGEgWmV0YVplcm8gWmlwZkRpc3RyaWJ1dGlvbiBaVGVzdCBaVHJhbnNmb3JtICcgK1xuICAgICAgJyRBYm9ydGVkICRBY3RpdmF0aW9uR3JvdXBJRCAkQWN0aXZhdGlvbktleSAkQWN0aXZhdGlvblVzZXJSZWdpc3RlcmVkICRBZGRPbnNEaXJlY3RvcnkgJEFzc2VydEZ1bmN0aW9uICRBc3N1bXB0aW9ucyAkQXN5bmNocm9ub3VzVGFzayAkQmFzZURpcmVjdG9yeSAkQmF0Y2hJbnB1dCAkQmF0Y2hPdXRwdXQgJEJveEZvcm1zICRCeXRlT3JkZXJpbmcgJENhbmNlbGVkICRDaGFyYWN0ZXJFbmNvZGluZyAkQ2hhcmFjdGVyRW5jb2RpbmdzICRDb21tYW5kTGluZSAkQ29tcGlsYXRpb25UYXJnZXQgJENvbmRpdGlvbkhvbGQgJENvbmZpZ3VyZWRLZXJuZWxzICRDb250ZXh0ICRDb250ZXh0UGF0aCAkQ29udHJvbEFjdGl2ZVNldHRpbmcgJENyZWF0aW9uRGF0ZSAkQ3VycmVudExpbmsgJERhdGVTdHJpbmdGb3JtYXQgJERlZmF1bHRGb250ICREZWZhdWx0RnJvbnRFbmQgJERlZmF1bHRJbWFnaW5nRGV2aWNlICREZWZhdWx0UGF0aCAkRGlzcGxheSAkRGlzcGxheUZ1bmN0aW9uICREaXN0cmlidXRlZENvbnRleHRzICREeW5hbWljRXZhbHVhdGlvbiAkRWNobyAkRXBpbG9nICRFeHBvcnRGb3JtYXRzICRGYWlsZWQgJEZpbmFuY2lhbERhdGFTb3VyY2UgJEZvcm1hdFR5cGUgJEZyb250RW5kICRGcm9udEVuZFNlc3Npb24gJEdlb0xvY2F0aW9uICRIaXN0b3J5TGVuZ3RoICRIb21lRGlyZWN0b3J5ICRIVFRQQ29va2llcyAkSWdub3JlRU9GICRJbWFnaW5nRGV2aWNlcyAkSW1wb3J0Rm9ybWF0cyAkSW5pdGlhbERpcmVjdG9yeSAkSW5wdXQgJElucHV0RmlsZU5hbWUgJElucHV0U3RyZWFtTWV0aG9kcyAkSW5zcGVjdG9yICRJbnN0YWxsYXRpb25EYXRlICRJbnN0YWxsYXRpb25EaXJlY3RvcnkgJEludGVyZmFjZUVudmlyb25tZW50ICRJdGVyYXRpb25MaW1pdCAkS2VybmVsQ291bnQgJEtlcm5lbElEICRMYW5ndWFnZSAkTGF1bmNoRGlyZWN0b3J5ICRMaWJyYXJ5UGF0aCAkTGljZW5zZUV4cGlyYXRpb25EYXRlICRMaWNlbnNlSUQgJExpY2Vuc2VQcm9jZXNzZXMgJExpY2Vuc2VTZXJ2ZXIgJExpY2Vuc2VTdWJwcm9jZXNzZXMgJExpY2Vuc2VUeXBlICRMaW5lICRMaW5rZWQgJExpbmtTdXBwb3J0ZWQgJExvYWRlZEZpbGVzICRNYWNoaW5lQWRkcmVzc2VzICRNYWNoaW5lRG9tYWluICRNYWNoaW5lRG9tYWlucyAkTWFjaGluZUVwc2lsb24gJE1hY2hpbmVJRCAkTWFjaGluZU5hbWUgJE1hY2hpbmVQcmVjaXNpb24gJE1hY2hpbmVUeXBlICRNYXhFeHRyYVByZWNpc2lvbiAkTWF4TGljZW5zZVByb2Nlc3NlcyAkTWF4TGljZW5zZVN1YnByb2Nlc3NlcyAkTWF4TWFjaGluZU51bWJlciAkTWF4TnVtYmVyICRNYXhQaWVjZXdpc2VDYXNlcyAkTWF4UHJlY2lzaW9uICRNYXhSb290RGVncmVlICRNZXNzYWdlR3JvdXBzICRNZXNzYWdlTGlzdCAkTWVzc2FnZVByZVByaW50ICRNZXNzYWdlcyAkTWluTWFjaGluZU51bWJlciAkTWluTnVtYmVyICRNaW5vclJlbGVhc2VOdW1iZXIgJE1pblByZWNpc2lvbiAkTW9kdWxlTnVtYmVyICROZXR3b3JrTGljZW5zZSAkTmV3TWVzc2FnZSAkTmV3U3ltYm9sICROb3RlYm9va3MgJE51bWJlck1hcmtzICRPZmYgJE9wZXJhdGluZ1N5c3RlbSAkT3V0cHV0ICRPdXRwdXRGb3JtcyAkT3V0cHV0U2l6ZUxpbWl0ICRPdXRwdXRTdHJlYW1NZXRob2RzICRQYWNrYWdlcyAkUGFyZW50TGluayAkUGFyZW50UHJvY2Vzc0lEICRQYXNzd29yZEZpbGUgJFBhdGNoTGV2ZWxJRCAkUGF0aCAkUGF0aG5hbWVTZXBhcmF0b3IgJFBlcmZvcm1hbmNlR29hbCAkUGlwZVN1cHBvcnRlZCAkUG9zdCAkUHJlICRQcmVmZXJlbmNlc0RpcmVjdG9yeSAkUHJlUHJpbnQgJFByZVJlYWQgJFByaW50Rm9ybXMgJFByaW50TGl0ZXJhbCAkUHJvY2Vzc0lEICRQcm9jZXNzb3JDb3VudCAkUHJvY2Vzc29yVHlwZSAkUHJvZHVjdEluZm9ybWF0aW9uICRQcm9ncmFtTmFtZSAkUmFuZG9tU3RhdGUgJFJlY3Vyc2lvbkxpbWl0ICRSZWxlYXNlTnVtYmVyICRSb290RGlyZWN0b3J5ICRTY2hlZHVsZWRUYXNrICRTY3JpcHRDb21tYW5kTGluZSAkU2Vzc2lvbklEICRTZXRQYXJlbnRMaW5rICRTaGFyZWRGdW5jdGlvbnMgJFNoYXJlZFZhcmlhYmxlcyAkU291bmREaXNwbGF5ICRTb3VuZERpc3BsYXlGdW5jdGlvbiAkU3VwcHJlc3NJbnB1dEZvcm1IZWFkcyAkU3luY2hyb25vdXNFdmFsdWF0aW9uICRTeW50YXhIYW5kbGVyICRTeXN0ZW0gJFN5c3RlbUNoYXJhY3RlckVuY29kaW5nICRTeXN0ZW1JRCAkU3lzdGVtV29yZExlbmd0aCAkVGVtcG9yYXJ5RGlyZWN0b3J5ICRUZW1wb3JhcnlQcmVmaXggJFRleHRTdHlsZSAkVGltZWRPdXQgJFRpbWVVbml0ICRUaW1lWm9uZSAkVG9wRGlyZWN0b3J5ICRUcmFjZU9mZiAkVHJhY2VPbiAkVHJhY2VQYXR0ZXJuICRUcmFjZVBvc3RBY3Rpb24gJFRyYWNlUHJlQWN0aW9uICRVcmdlbnQgJFVzZXJBZGRPbnNEaXJlY3RvcnkgJFVzZXJCYXNlRGlyZWN0b3J5ICRVc2VyRG9jdW1lbnRzRGlyZWN0b3J5ICRVc2VyTmFtZSAkVmVyc2lvbiAkVmVyc2lvbk51bWJlcicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiAvXFwoXFwqLywgZW5kOiAvXFwqXFwpL1xuICAgICAgfSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFx7LywgZW5kOiAvXFx9LyxcbiAgICAgICAgaWxsZWdhbDogLzovXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1PTl9DT05UQUlOUyA9IFtcbiAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCB7YmVnaW46ICdcXCdcXCcnfV1cbiAgICB9XG4gIF07XG4gIHZhciBUUkFOU1BPU0UgPSB7XG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvJ1snXFwuXSovXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdicmVhayBjYXNlIGNhdGNoIGNsYXNzZGVmIGNvbnRpbnVlIGVsc2UgZWxzZWlmIGVuZCBlbnVtZXJhdGVkIGV2ZW50cyBmb3IgZnVuY3Rpb24gJyArXG4gICAgICAgICdnbG9iYWwgaWYgbWV0aG9kcyBvdGhlcndpc2UgcGFyZm9yIHBlcnNpc3RlbnQgcHJvcGVydGllcyByZXR1cm4gc3BtZCBzd2l0Y2ggdHJ5IHdoaWxlJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnc2luIHNpbmQgc2luaCBhc2luIGFzaW5kIGFzaW5oIGNvcyBjb3NkIGNvc2ggYWNvcyBhY29zZCBhY29zaCB0YW4gdGFuZCB0YW5oIGF0YW4gJyArXG4gICAgICAgICdhdGFuZCBhdGFuMiBhdGFuaCBzZWMgc2VjZCBzZWNoIGFzZWMgYXNlY2QgYXNlY2ggY3NjIGNzY2QgY3NjaCBhY3NjIGFjc2NkIGFjc2NoIGNvdCAnICtcbiAgICAgICAgJ2NvdGQgY290aCBhY290IGFjb3RkIGFjb3RoIGh5cG90IGV4cCBleHBtMSBsb2cgbG9nMXAgbG9nMTAgbG9nMiBwb3cyIHJlYWxwb3cgcmVhbGxvZyAnICtcbiAgICAgICAgJ3JlYWxzcXJ0IHNxcnQgbnRocm9vdCBuZXh0cG93MiBhYnMgYW5nbGUgY29tcGxleCBjb25qIGltYWcgcmVhbCB1bndyYXAgaXNyZWFsICcgK1xuICAgICAgICAnY3BseHBhaXIgZml4IGZsb29yIGNlaWwgcm91bmQgbW9kIHJlbSBzaWduIGFpcnkgYmVzc2VsaiBiZXNzZWx5IGJlc3NlbGggYmVzc2VsaSAnICtcbiAgICAgICAgJ2Jlc3NlbGsgYmV0YSBiZXRhaW5jIGJldGFsbiBlbGxpcGogZWxsaXBrZSBlcmYgZXJmYyBlcmZjeCBlcmZpbnYgZXhwaW50IGdhbW1hICcgK1xuICAgICAgICAnZ2FtbWFpbmMgZ2FtbWFsbiBwc2kgbGVnZW5kcmUgY3Jvc3MgZG90IGZhY3RvciBpc3ByaW1lIHByaW1lcyBnY2QgbGNtIHJhdCByYXRzIHBlcm1zICcgK1xuICAgICAgICAnbmNob29zZWsgZmFjdG9yaWFsIGNhcnQyc3BoIGNhcnQycG9sIHBvbDJjYXJ0IHNwaDJjYXJ0IGhzdjJyZ2IgcmdiMmhzdiB6ZXJvcyBvbmVzICcgK1xuICAgICAgICAnZXllIHJlcG1hdCByYW5kIHJhbmRuIGxpbnNwYWNlIGxvZ3NwYWNlIGZyZXFzcGFjZSBtZXNoZ3JpZCBhY2N1bWFycmF5IHNpemUgbGVuZ3RoICcgK1xuICAgICAgICAnbmRpbXMgbnVtZWwgZGlzcCBpc2VtcHR5IGlzZXF1YWwgaXNlcXVhbHdpdGhlcXVhbG5hbnMgY2F0IHJlc2hhcGUgZGlhZyBibGtkaWFnIHRyaWwgJyArXG4gICAgICAgICd0cml1IGZsaXBsciBmbGlwdWQgZmxpcGRpbSByb3Q5MCBmaW5kIHN1YjJpbmQgaW5kMnN1YiBic3hmdW4gbmRncmlkIHBlcm11dGUgaXBlcm11dGUgJyArXG4gICAgICAgICdzaGlmdGRpbSBjaXJjc2hpZnQgc3F1ZWV6ZSBpc3NjYWxhciBpc3ZlY3RvciBhbnMgZXBzIHJlYWxtYXggcmVhbG1pbiBwaSBpIGluZiBuYW4gJyArXG4gICAgICAgICdpc25hbiBpc2luZiBpc2Zpbml0ZSBqIHdoeSBjb21wYW4gZ2FsbGVyeSBoYWRhbWFyZCBoYW5rZWwgaGlsYiBpbnZoaWxiIG1hZ2ljIHBhc2NhbCAnICtcbiAgICAgICAgJ3Jvc3NlciB0b2VwbGl0eiB2YW5kZXIgd2lsa2luc29uJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogJygvL3xcInwjfC9cXFxcKnxcXFxccysvXFxcXHcrKScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAge2JlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKSd9LFxuICAgICAgICAgICAgICB7YmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJ31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvW2EtekEtWl9dW2EtekEtWl8wLTldKidbJ1xcLl0qLyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW46IC9bYS16QS1aX11bYS16QS1aXzAtOV0qLywgcmVsZXZhbmNlOiAwfSxcbiAgICAgICAgICBUUkFOU1BPU0UuY29udGFpbnNbMF1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICAgICAgY29udGFpbnM6IENPTU1PTl9DT05UQUlOUyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxceycsIGVuZDogL30vLFxuICAgICAgICBjb250YWluczogQ09NTU9OX0NPTlRBSU5TLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHN0YXJ0czogVFJBTlNQT1NFXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyB0cmFuc3Bvc2Ugb3BlcmF0b3JzIGF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAgIGJlZ2luOiAvXFwpLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBzdGFydHM6IFRSQU5TUE9TRVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnXlxcXFxzKlxcXFwlXFxcXHtcXFxccyokJywgJ15cXFxccypcXFxcJVxcXFx9XFxcXHMqJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKCdcXFxcJScsICckJylcbiAgICBdLmNvbmNhdChDT01NT05fQ09OVEFJTlMpXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSAnaWYgdGhlbiBlbHNlIGVsc2VpZiBmb3IgdGhydSBkbyB3aGlsZSB1bmxlc3Mgc3RlcCBpbiBhbmQgb3Igbm90JztcbiAgdmFyIExJVEVSQUxTID0gJ3RydWUgZmFsc2UgdW5rbm93biBpbmYgbWluZiBpbmQgdW5kICVlICVpICVwaSAlcGhpICVnYW1tYSc7XG4gIHZhciBCVUlMVElOX0ZVTkNUSU9OUyA9XG4gICAgICAgICcgYWJhc2VwIGFicyBhYnNpbnQgYWJzb2x1dGVfcmVhbF90aW1lIGFjb3MgYWNvc2ggYWNvdCBhY290aCBhY3NjIGFjc2NoIGFjdGl2YXRlJ1xuICAgICAgKyAnIGFkZGNvbCBhZGRfZWRnZSBhZGRfZWRnZXMgYWRkbWF0cmljZXMgYWRkcm93IGFkZF92ZXJ0ZXggYWRkX3ZlcnRpY2VzIGFkamFjZW5jeV9tYXRyaXgnXG4gICAgICArICcgYWRqb2luIGFkam9pbnQgYWYgYWdkIGFpcnkgYWlyeV9haSBhaXJ5X2JpIGFpcnlfZGFpIGFpcnlfZGJpIGFsZ3N5cyBhbGdfdHlwZSdcbiAgICAgICsgJyBhbGlhcyBhbGxyb290cyBhbHBoYWNoYXJwIGFscGhhbnVtZXJpY3AgYW1vcnRpemF0aW9uICVhbmQgYW5udWl0eV9mdidcbiAgICAgICsgJyBhbm51aXR5X3B2IGFudGlkIGFudGlkaWZmIEFudGlEaWZmZXJlbmNlIGFwcGVuZCBhcHBlbmRmaWxlIGFwcGx5IGFwcGx5MSBhcHBseTInXG4gICAgICArICcgYXBwbHliMSBhcHJvcG9zIGFyZ3MgYXJpdF9hbW9ydGl6YXRpb24gYXJpdGhtZXRpYyBhcml0aHN1bSBhcnJheSBhcnJheWFwcGx5J1xuICAgICAgKyAnIGFycmF5aW5mbyBhcnJheW1ha2UgYXJyYXlzZXRhcHBseSBhc2NpaSBhc2VjIGFzZWNoIGFzaW4gYXNpbmggYXNraW50ZWdlcidcbiAgICAgICsgJyBhc2tzaWduIGFzc29jIGFzc29jX2xlZ2VuZHJlX3AgYXNzb2NfbGVnZW5kcmVfcSBhc3N1bWUgYXNzdW1lX2V4dGVybmFsX2J5dGVfb3JkZXInXG4gICAgICArICcgYXN5bXBhIGF0IGF0YW4gYXRhbjIgYXRhbmggYXRlbnNpbXAgYXRvbSBhdHZhbHVlIGF1Z2NvZWZtYXRyaXggYXVnbWVudGVkX2xhZ3JhbmdpYW5fbWV0aG9kJ1xuICAgICAgKyAnIGF2IGF2ZXJhZ2VfZGVncmVlIGJhY2t0cmFjZSBiYXJzIGJhcnNwbG90IGJhcnNwbG90X2Rlc2NyaXB0aW9uIGJhc2U2NCBiYXNlNjRfZGVjb2RlJ1xuICAgICAgKyAnIGJhc2hpbmRpY2VzIGJhdGNoIGJhdGNobG9hZCBiYzIgYmR2YWMgYmVsbG4gYmVuZWZpdF9jb3N0IGJlcm4gYmVybnBvbHkgYmVybnN0ZWluX2FwcHJveCdcbiAgICAgICsgJyBiZXJuc3RlaW5fZXhwYW5kIGJlcm5zdGVpbl9wb2x5IGJlc3NlbCBiZXNzZWxfaSBiZXNzZWxfaiBiZXNzZWxfayBiZXNzZWxfc2ltcGxpZnknXG4gICAgICArICcgYmVzc2VsX3kgYmV0YSBiZXRhX2luY29tcGxldGUgYmV0YV9pbmNvbXBsZXRlX2dlbmVyYWxpemVkIGJldGFfaW5jb21wbGV0ZV9yZWd1bGFyaXplZCdcbiAgICAgICsgJyBiZXpvdXQgYmZhbGxyb290cyBiZmZhYyBiZl9maW5kX3Jvb3QgYmZfZm1pbl9jb2J5bGEgYmZoemV0YSBiZmxvYXQgYmZsb2F0cCdcbiAgICAgICsgJyBiZnBzaSBiZnBzaTAgYmZ6ZXRhIGJpY29ubmVjdGVkX2NvbXBvbmVudHMgYmltZXRyaWMgYmlub21pYWwgYmlwYXJ0aXRpb24nXG4gICAgICArICcgYmxvY2sgYmxvY2ttYXRyaXhwIGJvZGVfZ2FpbiBib2RlX3BoYXNlIGJvdGhjb2VmIGJveCBib3hwbG90IGJveHBsb3RfZGVzY3JpcHRpb24nXG4gICAgICArICcgYnJlYWsgYnVnX3JlcG9ydCBidWlsZF9pbmZvfDEwIGJ1aWxkcSBidWlsZF9zYW1wbGUgYnVybiBjYWJzIGNhbmZvcm0gY2FudGVuJ1xuICAgICAgKyAnIGNhcmRpbmFsaXR5IGNhcmcgY2FydGFuIGNhcnRlc2lhbl9wcm9kdWN0IGNhdGNoIGNhdWNoeV9tYXRyaXggY2JmZmFjIGNkZl9iZXJub3VsbGknXG4gICAgICArICcgY2RmX2JldGEgY2RmX2Jpbm9taWFsIGNkZl9jYXVjaHkgY2RmX2NoaTIgY2RmX2NvbnRpbnVvdXNfdW5pZm9ybSBjZGZfZGlzY3JldGVfdW5pZm9ybSdcbiAgICAgICsgJyBjZGZfZXhwIGNkZl9mIGNkZl9nYW1tYSBjZGZfZ2VuZXJhbF9maW5pdGVfZGlzY3JldGUgY2RmX2dlb21ldHJpYyBjZGZfZ3VtYmVsJ1xuICAgICAgKyAnIGNkZl9oeXBlcmdlb21ldHJpYyBjZGZfbGFwbGFjZSBjZGZfbG9naXN0aWMgY2RmX2xvZ25vcm1hbCBjZGZfbmVnYXRpdmVfYmlub21pYWwnXG4gICAgICArICcgY2RmX25vbmNlbnRyYWxfY2hpMiBjZGZfbm9uY2VudHJhbF9zdHVkZW50X3QgY2RmX25vcm1hbCBjZGZfcGFyZXRvIGNkZl9wb2lzc29uJ1xuICAgICAgKyAnIGNkZl9yYW5rX3N1bSBjZGZfcmF5bGVpZ2ggY2RmX3NpZ25lZF9yYW5rIGNkZl9zdHVkZW50X3QgY2RmX3dlaWJ1bGwgY2Rpc3BsYXknXG4gICAgICArICcgY2VpbGluZyBjZW50cmFsX21vbWVudCBjZXF1YWwgY2VxdWFsaWdub3JlIGNmIGNmZGlzcmVwIGNmZXhwYW5kIGNnZW9kZXNpYydcbiAgICAgICsgJyBjZ3JlYXRlcnAgY2dyZWF0ZXJwaWdub3JlIGNoYW5nZW5hbWUgY2hhbmdldmFyIGNoYW9zZ2FtZSBjaGFyYXQgY2hhcmZ1biBjaGFyZnVuMidcbiAgICAgICsgJyBjaGFybGlzdCBjaGFycCBjaGFycG9seSBjaGRpciBjaGVieXNoZXZfdCBjaGVieXNoZXZfdSBjaGVja2RpdiBjaGVja19vdmVybGFwcydcbiAgICAgICsgJyBjaGluZXNlIGNob2xlc2t5IGNocmlzdG9mIGNocm9tYXRpY19pbmRleCBjaHJvbWF0aWNfbnVtYmVyIGNpbnQgY2lyY3VsYW50X2dyYXBoJ1xuICAgICAgKyAnIGNsZWFyX2VkZ2Vfd2VpZ2h0IGNsZWFyX3J1bGVzIGNsZWFyX3ZlcnRleF9sYWJlbCBjbGVic2NoX2dvcmRhbiBjbGVic2NoX2dyYXBoJ1xuICAgICAgKyAnIGNsZXNzcCBjbGVzc3BpZ25vcmUgY2xvc2UgY2xvc2VmaWxlIGNtZXRyaWMgY29lZmYgY29lZm1hdHJpeCBjb2dyYWQgY29sIGNvbGxhcHNlJ1xuICAgICAgKyAnIGNvbGxlY3R0ZXJtcyBjb2x1bW5vcCBjb2x1bW5zcGFjZSBjb2x1bW5zd2FwIGNvbHVtbnZlY3RvciBjb21iaW5hdGlvbiBjb21iaW5lJ1xuICAgICAgKyAnIGNvbXAycHVpIGNvbXBhcmUgY29tcGZpbGUgY29tcGlsZSBjb21waWxlX2ZpbGUgY29tcGxlbWVudF9ncmFwaCBjb21wbGV0ZV9iaXBhcnRpdGVfZ3JhcGgnXG4gICAgICArICcgY29tcGxldGVfZ3JhcGggY29tcGxleF9udW1iZXJfcCBjb21wb25lbnRzIGNvbXBvc2VfZnVuY3Rpb25zIGNvbmNhbiBjb25jYXQnXG4gICAgICArICcgY29uanVnYXRlIGNvbm1ldGRlcml2IGNvbm5lY3RlZF9jb21wb25lbnRzIGNvbm5lY3RfdmVydGljZXMgY29ucyBjb25zdGFudCdcbiAgICAgICsgJyBjb25zdGFudHAgY29uc3RpdHVlbnQgY29uc3R2YWx1ZSBjb250MnBhcnQgY29udGVudCBjb250aW51b3VzX2ZyZXEgY29udG9ydGlvbidcbiAgICAgICsgJyBjb250b3VyX3Bsb3QgY29udHJhY3QgY29udHJhY3RfZWRnZSBjb250cmFncmFkIGNvbnRyaWJfb2RlIGNvbnZlcnQgY29vcmQnXG4gICAgICArICcgY29weSBjb3B5X2ZpbGUgY29weV9ncmFwaCBjb3B5bGlzdCBjb3B5bWF0cml4IGNvciBjb3MgY29zaCBjb3QgY290aCBjb3YgY292MSdcbiAgICAgICsgJyBjb3ZkaWZmIGNvdmVjdCBjb3ZlcnMgY3JjMjRzdW0gY3JlYXRlX2dyYXBoIGNyZWF0ZV9saXN0IGNzYyBjc2NoIGNzZXR1cCBjc3BsaW5lJ1xuICAgICAgKyAnIGN0YXlsb3IgY3RfY29vcmRzeXMgY3RyYW5zZm9ybSBjdHJhbnNwb3NlIGN1YmVfZ3JhcGggY3Vib2N0YWhlZHJvbl9ncmFwaCdcbiAgICAgICsgJyBjdW5saXNwIGN2IGN5Y2xlX2RpZ3JhcGggY3ljbGVfZ3JhcGggY3lsaW5kcmljYWwgZGF5czM2MCBkYmxpbnQgZGVhY3RpdmF0ZSdcbiAgICAgICsgJyBkZWNsYXJlIGRlY2xhcmVfY29uc3R2YWx1ZSBkZWNsYXJlX2RpbWVuc2lvbnMgZGVjbGFyZV9mdW5kYW1lbnRhbF9kaW1lbnNpb25zJ1xuICAgICAgKyAnIGRlY2xhcmVfZnVuZGFtZW50YWxfdW5pdHMgZGVjbGFyZV9xdHkgZGVjbGFyZV90cmFuc2xhdGVkIGRlY2xhcmVfdW5pdF9jb252ZXJzaW9uJ1xuICAgICAgKyAnIGRlY2xhcmVfdW5pdHMgZGVjbGFyZV93ZWlnaHRzIGRlY3N5bSBkZWZjb24gZGVmaW5lIGRlZmluZV9hbHRfZGlzcGxheSBkZWZpbmVfdmFyaWFibGUnXG4gICAgICArICcgZGVmaW50IGRlZm1hdGNoIGRlZnJ1bGUgZGVmc3RydWN0IGRlZnRheWxvciBkZWdyZWVfc2VxdWVuY2UgZGVsIGRlbGV0ZSBkZWxldGVuJ1xuICAgICAgKyAnIGRlbHRhIGRlbW8gZGVtb2l2cmUgZGVub20gZGVwZW5kcyBkZXJpdmRlZ3JlZSBkZXJpdmxpc3QgZGVzY3JpYmUgZGVzb2x2ZSdcbiAgICAgICsgJyBkZXRlcm1pbmFudCBkZmxvYXQgZGdhdXNzX2EgZGdhdXNzX2IgZGdlZXYgZGdlbW0gZGdlcXJmIGRnZXN2IGRnZXN2ZCBkaWFnJ1xuICAgICAgKyAnIGRpYWdtYXRyaXggZGlhZ19tYXRyaXggZGlhZ21hdHJpeHAgZGlhbWV0ZXIgZGlmZiBkaWdpdGNoYXJwIGRpbWFjc19leHBvcnQnXG4gICAgICArICcgZGltYWNzX2ltcG9ydCBkaW1lbnNpb24gZGltZW5zaW9ubGVzcyBkaW1lbnNpb25zIGRpbWVuc2lvbnNfYXNfbGlzdCBkaXJlY3QnXG4gICAgICArICcgZGlyZWN0b3J5IGRpc2NyZXRlX2ZyZXEgZGlzam9pbiBkaXNqb2ludHAgZGlzb2xhdGUgZGlzcCBkaXNwY29uIGRpc3Bmb3JtJ1xuICAgICAgKyAnIGRpc3BmdW4gZGlzcEpvcmRhbiBkaXNwbGF5IGRpc3BydWxlIGRpc3B0ZXJtcyBkaXN0cmliIGRpdmlkZSBkaXZpc29ycyBkaXZzdW0nXG4gICAgICArICcgZGt1bW1lcl9tIGRrdW1tZXJfdSBkbGFuZ2UgZG9kZWNhaGVkcm9uX2dyYXBoIGRvdHByb2R1Y3QgZG90c2ltcCBkcGFydCdcbiAgICAgICsgJyBkcmF3IGRyYXcyZCBkcmF3M2QgZHJhd2RmIGRyYXdfZmlsZSBkcmF3X2dyYXBoIGRzY2FsYXIgZWNoZWxvbiBlZGdlX2NvbG9yaW5nJ1xuICAgICAgKyAnIGVkZ2VfY29ubmVjdGl2aXR5IGVkZ2VzIGVpZ2Vuc19ieV9qYWNvYmkgZWlnZW52YWx1ZXMgZWlnZW52ZWN0b3JzIGVpZ2h0aCdcbiAgICAgICsgJyBlaW5zdGVpbiBlaXZhbHMgZWl2ZWN0cyBlbGFwc2VkX3JlYWxfdGltZSBlbGFwc2VkX3J1bl90aW1lIGVsZTJjb21wIGVsZTJwb2x5bm9tZSdcbiAgICAgICsgJyBlbGUycHVpIGVsZW0gZWxlbWVudHAgZWxldmF0aW9uX2dyaWQgZWxpbSBlbGltX2FsbGJ1dCBlbGltaW5hdGUgZWxpbWluYXRlX3VzaW5nJ1xuICAgICAgKyAnIGVsbGlwc2UgZWxsaXB0aWNfZSBlbGxpcHRpY19lYyBlbGxpcHRpY19ldSBlbGxpcHRpY19mIGVsbGlwdGljX2tjIGVsbGlwdGljX3BpJ1xuICAgICAgKyAnIGVtYXRyaXggZW1wdHlfZ3JhcGggZW1wdHlwIGVuZGNvbnMgZW50ZXJtYXRyaXggZW50ZXJ0ZW5zb3IgZW50aWVyIGVxdWFsIGVxdWFscCdcbiAgICAgICsgJyBlcXVpdl9jbGFzc2VzIGVyZiBlcmZjIGVyZl9nZW5lcmFsaXplZCBlcmZpIGVycmNhdGNoIGVycm9yIGVycm9ybXNnIGVycm9ycydcbiAgICAgICsgJyBldWxlciBldiBldmFsX3N0cmluZyBldmVucCBldmVyeSBldm9sdXRpb24gZXZvbHV0aW9uMmQgZXZ1bmRpZmYgZXhhbXBsZSBleHAnXG4gICAgICArICcgZXhwYW5kIGV4cGFuZHdydCBleHBhbmR3cnRfZmFjdG9yZWQgZXhwaW50IGV4cGludGVncmFsX2NoaSBleHBpbnRlZ3JhbF9jaSdcbiAgICAgICsgJyBleHBpbnRlZ3JhbF9lIGV4cGludGVncmFsX2UxIGV4cGludGVncmFsX2VpIGV4cGludGVncmFsX2Vfc2ltcGxpZnkgZXhwaW50ZWdyYWxfbGknXG4gICAgICArICcgZXhwaW50ZWdyYWxfc2hpIGV4cGludGVncmFsX3NpIGV4cGxpY2l0IGV4cGxvc2UgZXhwb25lbnRpYWxpemUgZXhwcmVzcyBleHB0J1xuICAgICAgKyAnIGV4c2VjIGV4dGRpZmYgZXh0cmFjdF9saW5lYXJfZXF1YXRpb25zIGV4dHJlbWFsX3N1YnNldCBlemdjZCAlZiBmOTAgZmFjc3VtJ1xuICAgICAgKyAnIGZhY3Rjb21iIGZhY3RvciBmYWN0b3JmYWNzdW0gZmFjdG9yaWFsIGZhY3Rvcm91dCBmYWN0b3JzdW0gZmFjdHMgZmFzdF9jZW50cmFsX2VsZW1lbnRzJ1xuICAgICAgKyAnIGZhc3RfbGluc29sdmUgZmFzdHRpbWVzIGZlYXR1cmVwIGZlcm5mYWxlIGZmdCBmaWIgZmlidG9waGkgZmlmdGggZmlsZW5hbWVfbWVyZ2UnXG4gICAgICArICcgZmlsZV9zZWFyY2ggZmlsZV90eXBlIGZpbGxhcnJheSBmaW5kZGUgZmluZF9yb290IGZpbmRfcm9vdF9hYnMgZmluZF9yb290X2Vycm9yJ1xuICAgICAgKyAnIGZpbmRfcm9vdF9yZWwgZmlyc3QgZml4IGZsYXR0ZW4gZmxlbmd0aCBmbG9hdCBmbG9hdG51bXAgZmxvb3IgZmxvd2VyX3NuYXJrJ1xuICAgICAgKyAnIGZsdXNoIGZsdXNoMWRlcml2IGZsdXNoZCBmbHVzaG5kIGZsdXNoX291dHB1dCBmbWluX2NvYnlsYSBmb3JnZXQgZm9ydHJhbidcbiAgICAgICsgJyBmb3VyY29zIGZvdXJleHBhbmQgZm91cmllciBmb3VyaWVyX2VsaW0gZm91cmludCBmb3VyaW50Y29zIGZvdXJpbnRzaW4gZm91cnNpbXAnXG4gICAgICArICcgZm91cnNpbiBmb3VydGggZnBvc2l0aW9uIGZyYW1lX2JyYWNrZXQgZnJlZW9mIGZyZXNobGluZSBmcmVzbmVsX2MgZnJlc25lbF9zJ1xuICAgICAgKyAnIGZyb21fYWRqYWNlbmN5X21hdHJpeCBmcnVjaHRfZ3JhcGggZnVsbF9saXN0aWZ5IGZ1bGxtYXAgZnVsbG1hcGwgZnVsbHJhdHNpbXAnXG4gICAgICArICcgZnVsbHJhdHN1YnN0IGZ1bGxzZXRpZnkgZnVuY3NvbHZlIGZ1bmRhbWVudGFsX2RpbWVuc2lvbnMgZnVuZGFtZW50YWxfdW5pdHMnXG4gICAgICArICcgZnVuZGVmIGZ1bm1ha2UgZnVucCBmdiBnMCBnMSBnYW1tYSBnYW1tYV9ncmVlayBnYW1tYV9pbmNvbXBsZXRlIGdhbW1hX2luY29tcGxldGVfZ2VuZXJhbGl6ZWQnXG4gICAgICArICcgZ2FtbWFfaW5jb21wbGV0ZV9yZWd1bGFyaXplZCBnYXVzcyBnYXVzc19hIGdhdXNzX2IgZ2F1c3Nwcm9iIGdjZCBnY2RleCBnY2RpdmlkZSdcbiAgICAgICsgJyBnY2ZhYyBnY2ZhY3RvciBnZCBnZW5lcmFsaXplZF9sYW1iZXJ0X3cgZ2VuZmFjdCBnZW5fbGFndWVycmUgZ2VubWF0cml4IGdlbnN5bSdcbiAgICAgICsgJyBnZW9fYW1vcnRpemF0aW9uIGdlb19hbm51aXR5X2Z2IGdlb19hbm51aXR5X3B2IGdlb21hcCBnZW9tZXRyaWMgZ2VvbWV0cmljX21lYW4nXG4gICAgICArICcgZ2Vvc3VtIGdldCBnZXRjdXJyZW50ZGlyZWN0b3J5IGdldF9lZGdlX3dlaWdodCBnZXRlbnYgZ2V0X2x1X2ZhY3RvcnMgZ2V0X291dHB1dF9zdHJlYW1fc3RyaW5nJ1xuICAgICAgKyAnIGdldF9waXhlbCBnZXRfcGxvdF9vcHRpb24gZ2V0X3RleF9lbnZpcm9ubWVudCBnZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQnXG4gICAgICArICcgZ2V0X3ZlcnRleF9sYWJlbCBnZmFjdG9yIGdmYWN0b3JzdW0gZ2dmIGdpcnRoIGdsb2JhbF92YXJpYW5jZXMgZ24gZ251cGxvdF9jbG9zZSdcbiAgICAgICsgJyBnbnVwbG90X3JlcGxvdCBnbnVwbG90X3Jlc2V0IGdudXBsb3RfcmVzdGFydCBnbnVwbG90X3N0YXJ0IGdvIEdvc3BlciBHb3NwZXJTdW0nXG4gICAgICArICcgZ3IyZCBncjNkIGdyYWRlZiBncmFtc2NobWlkdCBncmFwaDZfZGVjb2RlIGdyYXBoNl9lbmNvZGUgZ3JhcGg2X2V4cG9ydCBncmFwaDZfaW1wb3J0J1xuICAgICAgKyAnIGdyYXBoX2NlbnRlciBncmFwaF9jaGFycG9seSBncmFwaF9laWdlbnZhbHVlcyBncmFwaF9mbG93IGdyYXBoX29yZGVyIGdyYXBoX3BlcmlwaGVyeSdcbiAgICAgICsgJyBncmFwaF9wcm9kdWN0IGdyYXBoX3NpemUgZ3JhcGhfdW5pb24gZ3JlYXRfcmhvbWJpY29zaWRvZGVjYWhlZHJvbl9ncmFwaCBncmVhdF9yaG9tYmljdWJvY3RhaGVkcm9uX2dyYXBoJ1xuICAgICAgKyAnIGdyaWRfZ3JhcGggZ3JpbmQgZ3JvYm5lcl9iYXNpcyBncm90emNoX2dyYXBoIGhhbWlsdG9uX2N5Y2xlIGhhbWlsdG9uX3BhdGgnXG4gICAgICArICcgaGFua2VsIGhhbmtlbF8xIGhhbmtlbF8yIGhhcm1vbmljIGhhcm1vbmljX21lYW4gaGF2IGhlYXdvb2RfZ3JhcGggaGVybWl0ZSdcbiAgICAgICsgJyBoZXNzaWFuIGhnZnJlZCBoaWxiZXJ0bWFwIGhpbGJlcnRfbWF0cml4IGhpcG93IGhpc3RvZ3JhbSBoaXN0b2dyYW1fZGVzY3JpcHRpb24nXG4gICAgICArICcgaG9kZ2UgaG9ybmVyIGh5cGVyZ2VvbWV0cmljIGkwIGkxICVpYmVzIGljMSBpYzIgaWNfY29udmVydCBpY2hyMSBpY2hyMiBpY29zYWhlZHJvbl9ncmFwaCdcbiAgICAgICsgJyBpY29zaWRvZGVjYWhlZHJvbl9ncmFwaCBpY3VydmF0dXJlIGlkZW50IGlkZW50Zm9yIGlkZW50aXR5IGlkaWZmIGlkaW0gaWR1bW15J1xuICAgICAgKyAnIGllcW4gJWlmIGlmYWN0b3JzIGlmcmFtZXMgaWZzIGlnY2RleCBpZ2VvZGVzaWNfY29vcmRzIGlsdCBpbWFnZSBpbWFncGFydCdcbiAgICAgICsgJyBpbWV0cmljIGltcGxpY2l0IGltcGxpY2l0X2Rlcml2YXRpdmUgaW1wbGljaXRfcGxvdCBpbmRleGVkX3RlbnNvciBpbmRpY2VzJ1xuICAgICAgKyAnIGluZHVjZWRfc3ViZ3JhcGggaW5mZXJlbmNlcCBpbmZlcmVuY2VfcmVzdWx0IGluZml4IGluZm9fZGlzcGxheSBpbml0X2F0ZW5zb3InXG4gICAgICArICcgaW5pdF9jdGVuc29yIGluX25laWdoYm9ycyBpbm5lcnByb2R1Y3QgaW5wYXJ0IGlucHJvZCBpbnJ0IGludGVnZXJwIGludGVnZXJfcGFydGl0aW9ucydcbiAgICAgICsgJyBpbnRlZ3JhdGUgaW50ZXJzZWN0IGludGVyc2VjdGlvbiBpbnRlcnZhbHAgaW50b3BvaXMgaW50b3N1bSBpbnZhcmlhbnQxIGludmFyaWFudDInXG4gICAgICArICcgaW52ZXJzZV9mZnQgaW52ZXJzZV9qYWNvYmlfY2QgaW52ZXJzZV9qYWNvYmlfY24gaW52ZXJzZV9qYWNvYmlfY3MgaW52ZXJzZV9qYWNvYmlfZGMnXG4gICAgICArICcgaW52ZXJzZV9qYWNvYmlfZG4gaW52ZXJzZV9qYWNvYmlfZHMgaW52ZXJzZV9qYWNvYmlfbmMgaW52ZXJzZV9qYWNvYmlfbmQgaW52ZXJzZV9qYWNvYmlfbnMnXG4gICAgICArICcgaW52ZXJzZV9qYWNvYmlfc2MgaW52ZXJzZV9qYWNvYmlfc2QgaW52ZXJzZV9qYWNvYmlfc24gaW52ZXJ0IGludmVydF9ieV9hZGpvaW50J1xuICAgICAgKyAnIGludmVydF9ieV9sdSBpbnZfbW9kIGlyciBpcyBpc19iaWNvbm5lY3RlZCBpc19iaXBhcnRpdGUgaXNfY29ubmVjdGVkIGlzX2RpZ3JhcGgnXG4gICAgICArICcgaXNfZWRnZV9pbl9ncmFwaCBpc19ncmFwaCBpc19ncmFwaF9vcl9kaWdyYXBoIGlzaG93IGlzX2lzb21vcnBoaWMgaXNvbGF0ZSdcbiAgICAgICsgJyBpc29tb3JwaGlzbSBpc19wbGFuYXIgaXNxcnQgaXNyZWFsX3AgaXNfc2Nvbm5lY3RlZCBpc190cmVlIGlzX3ZlcnRleF9pbl9ncmFwaCdcbiAgICAgICsgJyBpdGVtc19pbmZlcmVuY2UgJWogajAgajEgamFjb2JpIGphY29iaWFuIGphY29iaV9jZCBqYWNvYmlfY24gamFjb2JpX2NzIGphY29iaV9kYydcbiAgICAgICsgJyBqYWNvYmlfZG4gamFjb2JpX2RzIGphY29iaV9uYyBqYWNvYmlfbmQgamFjb2JpX25zIGphY29iaV9wIGphY29iaV9zYyBqYWNvYmlfc2QnXG4gICAgICArICcgamFjb2JpX3NuIEpGIGpuIGpvaW4gam9yZGFuIGp1bGlhIGp1bGlhX3NldCBqdWxpYV9zaW4gJWsga2RlbHMga2RlbHRhIGtpbGwnXG4gICAgICArICcga2lsbGNvbnRleHQga29zdGthIGtyb25fZGVsdGEga3JvbmVja2VyX3Byb2R1Y3Qga3VtbWVyX20ga3VtbWVyX3Uga3VydG9zaXMnXG4gICAgICArICcga3VydG9zaXNfYmVybm91bGxpIGt1cnRvc2lzX2JldGEga3VydG9zaXNfYmlub21pYWwga3VydG9zaXNfY2hpMiBrdXJ0b3Npc19jb250aW51b3VzX3VuaWZvcm0nXG4gICAgICArICcga3VydG9zaXNfZGlzY3JldGVfdW5pZm9ybSBrdXJ0b3Npc19leHAga3VydG9zaXNfZiBrdXJ0b3Npc19nYW1tYSBrdXJ0b3Npc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSdcbiAgICAgICsgJyBrdXJ0b3Npc19nZW9tZXRyaWMga3VydG9zaXNfZ3VtYmVsIGt1cnRvc2lzX2h5cGVyZ2VvbWV0cmljIGt1cnRvc2lzX2xhcGxhY2UnXG4gICAgICArICcga3VydG9zaXNfbG9naXN0aWMga3VydG9zaXNfbG9nbm9ybWFsIGt1cnRvc2lzX25lZ2F0aXZlX2Jpbm9taWFsIGt1cnRvc2lzX25vbmNlbnRyYWxfY2hpMidcbiAgICAgICsgJyBrdXJ0b3Npc19ub25jZW50cmFsX3N0dWRlbnRfdCBrdXJ0b3Npc19ub3JtYWwga3VydG9zaXNfcGFyZXRvIGt1cnRvc2lzX3BvaXNzb24nXG4gICAgICArICcga3VydG9zaXNfcmF5bGVpZ2gga3VydG9zaXNfc3R1ZGVudF90IGt1cnRvc2lzX3dlaWJ1bGwgbGFiZWwgbGFiZWxzIGxhZ3JhbmdlJ1xuICAgICAgKyAnIGxhZ3VlcnJlIGxhbWJkYSBsYW1iZXJ0X3cgbGFwbGFjZSBsYXBsYWNpYW5fbWF0cml4IGxhc3QgbGJmZ3MgbGMya2R0IGxjaGFycCdcbiAgICAgICsgJyBsY19sIGxjbSBsY191IGxkZWZpbnQgbGRpc3AgbGRpc3BsYXkgbGVnZW5kcmVfcCBsZWdlbmRyZV9xIGxlaW5zdGVpbiBsZW5ndGgnXG4gICAgICArICcgbGV0IGxldHJ1bGVzIGxldHNpbXAgbGV2aV9jaXZpdGEgbGZyZWVvZiBsZ3RyZWlsbGlzIGxocyBsaSBsaWVkaWZmIGxpbWl0J1xuICAgICAgKyAnIExpbmRzdGVkdCBsaW5lYXIgbGluZWFyaW50ZXJwb2wgbGluZWFyX3Byb2dyYW0gbGluZWFyX3JlZ3Jlc3Npb24gbGluZV9ncmFwaCdcbiAgICAgICsgJyBsaW5zb2x2ZSBsaXN0YXJyYXkgbGlzdF9jb3JyZWxhdGlvbnMgbGlzdGlmeSBsaXN0X21hdHJpeF9lbnRyaWVzIGxpc3RfbmNfbW9ub21pYWxzJ1xuICAgICAgKyAnIGxpc3RvZnRlbnMgbGlzdG9mdmFycyBsaXN0cCBsbWF4IGxtaW4gbG9hZCBsb2FkZmlsZSBsb2NhbCBsb2NhdGVfbWF0cml4X2VudHJ5J1xuICAgICAgKyAnIGxvZyBsb2djb250cmFjdCBsb2dfZ2FtbWEgbG9wb3cgbG9yZW50el9nYXVnZSBsb3dlcmNhc2VwIGxwYXJ0IGxyYXRzdWJzdCdcbiAgICAgICsgJyBscmVkdWNlIGxyaWVtYW5uIGxzcXVhcmVzX2VzdGltYXRlcyBsc3F1YXJlc19lc3RpbWF0ZXNfYXBwcm94aW1hdGUgbHNxdWFyZXNfZXN0aW1hdGVzX2V4YWN0J1xuICAgICAgKyAnIGxzcXVhcmVzX21zZSBsc3F1YXJlc19yZXNpZHVhbF9tc2UgbHNxdWFyZXNfcmVzaWR1YWxzIGxzdW0gbHRyZWlsbGlzIGx1X2JhY2tzdWInXG4gICAgICArICcgbHVjYXMgbHVfZmFjdG9yICVtIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kMSBtYWtlX2FycmF5IG1ha2Vib3ggbWFrZWZhY3QgbWFrZWdhbW1hJ1xuICAgICAgKyAnIG1ha2VfZ3JhcGggbWFrZV9sZXZlbF9waWN0dXJlIG1ha2VsaXN0IG1ha2VPcmRlcnMgbWFrZV9wb2x5X2NvbnRpbmVudCBtYWtlX3BvbHlfY291bnRyeSdcbiAgICAgICsgJyBtYWtlX3BvbHlnb24gbWFrZV9yYW5kb21fc3RhdGUgbWFrZV9yZ2JfcGljdHVyZSBtYWtlc2V0IG1ha2Vfc3RyaW5nX2lucHV0X3N0cmVhbSdcbiAgICAgICsgJyBtYWtlX3N0cmluZ19vdXRwdXRfc3RyZWFtIG1ha2VfdHJhbnNmb3JtIG1hbmRlbGJyb3QgbWFuZGVsYnJvdF9zZXQgbWFwIG1hcGF0b20nXG4gICAgICArICcgbWFwbGlzdCBtYXRjaGRlY2xhcmUgbWF0Y2hmaXggbWF0X2NvbmQgbWF0X2Z1bGx1bmJsb2NrZXIgbWF0X2Z1bmN0aW9uIG1hdGhtbF9kaXNwbGF5J1xuICAgICAgKyAnIG1hdF9ub3JtIG1hdHJpeCBtYXRyaXhtYXAgbWF0cml4cCBtYXRyaXhfc2l6ZSBtYXR0cmFjZSBtYXRfdHJhY2UgbWF0X3VuYmxvY2tlcidcbiAgICAgICsgJyBtYXggbWF4X2NsaXF1ZSBtYXhfZGVncmVlIG1heF9mbG93IG1heGltaXplX2xwIG1heF9pbmRlcGVuZGVudF9zZXQgbWF4X21hdGNoaW5nJ1xuICAgICAgKyAnIG1heWJlIG1kNXN1bSBtZWFuIG1lYW5fYmVybm91bGxpIG1lYW5fYmV0YSBtZWFuX2Jpbm9taWFsIG1lYW5fY2hpMiBtZWFuX2NvbnRpbnVvdXNfdW5pZm9ybSdcbiAgICAgICsgJyBtZWFuX2RldmlhdGlvbiBtZWFuX2Rpc2NyZXRlX3VuaWZvcm0gbWVhbl9leHAgbWVhbl9mIG1lYW5fZ2FtbWEgbWVhbl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSdcbiAgICAgICsgJyBtZWFuX2dlb21ldHJpYyBtZWFuX2d1bWJlbCBtZWFuX2h5cGVyZ2VvbWV0cmljIG1lYW5fbGFwbGFjZSBtZWFuX2xvZ2lzdGljJ1xuICAgICAgKyAnIG1lYW5fbG9nbm9ybWFsIG1lYW5fbmVnYXRpdmVfYmlub21pYWwgbWVhbl9ub25jZW50cmFsX2NoaTIgbWVhbl9ub25jZW50cmFsX3N0dWRlbnRfdCdcbiAgICAgICsgJyBtZWFuX25vcm1hbCBtZWFuX3BhcmV0byBtZWFuX3BvaXNzb24gbWVhbl9yYXlsZWlnaCBtZWFuX3N0dWRlbnRfdCBtZWFuX3dlaWJ1bGwnXG4gICAgICArICcgbWVkaWFuIG1lZGlhbl9kZXZpYXRpb24gbWVtYmVyIG1lc2ggbWV0cmljZXhwYW5kYWxsIG1nZjFfc2hhMSBtaW4gbWluX2RlZ3JlZSdcbiAgICAgICsgJyBtaW5fZWRnZV9jdXQgbWluZmFjdG9yaWFsIG1pbmltYWxQb2x5IG1pbmltaXplX2xwIG1pbmltdW1fc3Bhbm5pbmdfdHJlZSBtaW5vcidcbiAgICAgICsgJyBtaW5wYWNrX2xzcXVhcmVzIG1pbnBhY2tfc29sdmUgbWluX3ZlcnRleF9jb3ZlciBtaW5fdmVydGV4X2N1dCBta2RpciBtbmV3dG9uJ1xuICAgICAgKyAnIG1vZCBtb2RlX2RlY2xhcmUgbW9kZV9pZGVudGl0eSBNb2RlTWF0cml4IG1vZWJpdXMgbW9uMnNjaHVyIG1vbm8gbW9ub21pYWxfZGltZW5zaW9ucydcbiAgICAgICsgJyBtdWx0aWJlcm5zdGVpbl9wb2x5IG11bHRpX2Rpc3BsYXlfZm9yX3RleGluZm8gbXVsdGlfZWxlbSBtdWx0aW5vbWlhbCBtdWx0aW5vbWlhbF9jb2VmZidcbiAgICAgICsgJyBtdWx0aV9vcmJpdCBtdWx0aXBsb3RfbW9kZSBtdWx0aV9wdWkgbXVsdHN5bSBtdWx0dGhydSBteWNpZWxza2lfZ3JhcGggbmFyeSdcbiAgICAgICsgJyBuYXR1cmFsX3VuaXQgbmNfZGVncmVlIG5jZXhwdCBuY2hhcnBvbHkgbmVnYXRpdmVfcGljdHVyZSBuZWlnaGJvcnMgbmV3IG5ld2NvbnRleHQnXG4gICAgICArICcgbmV3ZGV0IG5ld19ncmFwaCBuZXdsaW5lIG5ld3RvbiBuZXdfdmFyaWFibGUgbmV4dF9wcmltZSBuaWNlZHVtbWllcyBuaWNlaW5kaWNlcydcbiAgICAgICsgJyBuaW50aCBub2ZpeCBub25hcnJheSBub25jZW50cmFsX21vbWVudCBub25tZXRyaWNpdHkgbm9ubmVnaW50ZWdlcnAgbm9uc2NhbGFycCdcbiAgICAgICsgJyBub256ZXJvYW5kZnJlZW9mIG5vdGVxdWFsIG5vdW5pZnkgbnB0ZXRyYWQgbnB2IG5yb290cyBudGVybXMgbnRlcm1zdCdcbiAgICAgICsgJyBudGhyb290IG51bGxpdHkgbnVsbHNwYWNlIG51bSBudW1iZXJlZF9ib3VuZGFyaWVzIG51bWJlcnAgbnVtYmVyX3RvX29jdGV0cydcbiAgICAgICsgJyBudW1fZGlzdGluY3RfcGFydGl0aW9ucyBudW1lcnZhbCBudW1mYWN0b3IgbnVtX3BhcnRpdGlvbnMgbnVzdW0gbnpldGEgbnpldGFpJ1xuICAgICAgKyAnIG56ZXRhciBvY3RldHNfdG9fbnVtYmVyIG9jdGV0c190b19vaWQgb2RkX2dpcnRoIG9kZHAgb2RlMiBvZGVfY2hlY2sgb2RlbGluJ1xuICAgICAgKyAnIG9pZF90b19vY3RldHMgb3Agb3BlbmEgb3BlbmFfYmluYXJ5IG9wZW5yIG9wZW5yX2JpbmFyeSBvcGVudyBvcGVud19iaW5hcnknXG4gICAgICArICcgb3BlcmF0b3JwIG9wc3Vic3Qgb3B0aW1pemUgJW9yIG9yYml0IG9yYml0cyBvcmRlcmdyZWF0IG9yZGVyZ3JlYXRwIG9yZGVybGVzcydcbiAgICAgICsgJyBvcmRlcmxlc3NwIG9ydGhvZ29uYWxfY29tcGxlbWVudCBvcnRob3BvbHlfcmVjdXIgb3J0aG9wb2x5X3dlaWdodCBvdXRlcm1hcCdcbiAgICAgICsgJyBvdXRfbmVpZ2hib3JzIG91dG9mcG9pcyBwYWRlIHBhcmFib2xpY19jeWxpbmRlcl9kIHBhcmFtZXRyaWMgcGFyYW1ldHJpY19zdXJmYWNlJ1xuICAgICAgKyAnIHBhcmcgcGFyR29zcGVyIHBhcnNlX3N0cmluZyBwYXJzZV90aW1lZGF0ZSBwYXJ0IHBhcnQyY29udCBwYXJ0ZnJhYyBwYXJ0aXRpb24nXG4gICAgICArICcgcGFydGl0aW9uX3NldCBwYXJ0cG9sIHBhdGhfZGlncmFwaCBwYXRoX2dyYXBoIHBhdGhuYW1lX2RpcmVjdG9yeSBwYXRobmFtZV9uYW1lJ1xuICAgICAgKyAnIHBhdGhuYW1lX3R5cGUgcGRmX2Jlcm5vdWxsaSBwZGZfYmV0YSBwZGZfYmlub21pYWwgcGRmX2NhdWNoeSBwZGZfY2hpMiBwZGZfY29udGludW91c191bmlmb3JtJ1xuICAgICAgKyAnIHBkZl9kaXNjcmV0ZV91bmlmb3JtIHBkZl9leHAgcGRmX2YgcGRmX2dhbW1hIHBkZl9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSdcbiAgICAgICsgJyBwZGZfZ2VvbWV0cmljIHBkZl9ndW1iZWwgcGRmX2h5cGVyZ2VvbWV0cmljIHBkZl9sYXBsYWNlIHBkZl9sb2dpc3RpYyBwZGZfbG9nbm9ybWFsJ1xuICAgICAgKyAnIHBkZl9uZWdhdGl2ZV9iaW5vbWlhbCBwZGZfbm9uY2VudHJhbF9jaGkyIHBkZl9ub25jZW50cmFsX3N0dWRlbnRfdCBwZGZfbm9ybWFsJ1xuICAgICAgKyAnIHBkZl9wYXJldG8gcGRmX3BvaXNzb24gcGRmX3Jhbmtfc3VtIHBkZl9yYXlsZWlnaCBwZGZfc2lnbmVkX3JhbmsgcGRmX3N0dWRlbnRfdCdcbiAgICAgICsgJyBwZGZfd2VpYnVsbCBwZWFyc29uX3NrZXduZXNzIHBlcm1hbmVudCBwZXJtdXQgcGVybXV0YXRpb24gcGVybXV0YXRpb25zIHBldGVyc2VuX2dyYXBoJ1xuICAgICAgKyAnIHBldHJvdiBwaWNrYXBhcnQgcGljdHVyZV9lcXVhbHAgcGljdHVyZXAgcGllY2hhcnQgcGllY2hhcnRfZGVzY3JpcHRpb24gcGxhbmFyX2VtYmVkZGluZydcbiAgICAgICsgJyBwbGF5YmFjayBwbG9nIHBsb3QyZCBwbG90M2QgcGxvdGRmIHBsb3RlcSBwbHNxdWFyZXMgcG9jaGhhbW1lciBwb2ludHMgcG9pc2RpZmYnXG4gICAgICArICcgcG9pc2V4cHQgcG9pc2ludCBwb2lzbWFwIHBvaXNwbHVzIHBvaXNzaW1wIHBvaXNzdWJzdCBwb2lzdGltZXMgcG9pc3RyaW0gcG9sYXInXG4gICAgICArICcgcG9sYXJmb3JtIHBvbGFydG9yZWN0IHBvbGFyX3RvX3h5IHBvbHlfYWRkIHBvbHlfYnVjaGJlcmdlciBwb2x5X2J1Y2hiZXJnZXJfY3JpdGVyaW9uJ1xuICAgICAgKyAnIHBvbHlfY29sb25faWRlYWwgcG9seV9jb250ZW50IHBvbHlkZWNvbXAgcG9seV9kZXBlbmRzX3AgcG9seV9lbGltaW5hdGlvbl9pZGVhbCdcbiAgICAgICsgJyBwb2x5X2V4YWN0X2RpdmlkZSBwb2x5X2V4cGFuZCBwb2x5X2V4cHQgcG9seV9nY2QgcG9seWdvbiBwb2x5X2dyb2JuZXIgcG9seV9ncm9ibmVyX2VxdWFsJ1xuICAgICAgKyAnIHBvbHlfZ3JvYm5lcl9tZW1iZXIgcG9seV9ncm9ibmVyX3N1YnNldHAgcG9seV9pZGVhbF9pbnRlcnNlY3Rpb24gcG9seV9pZGVhbF9wb2x5c2F0dXJhdGlvbidcbiAgICAgICsgJyBwb2x5X2lkZWFsX3BvbHlzYXR1cmF0aW9uMSBwb2x5X2lkZWFsX3NhdHVyYXRpb24gcG9seV9pZGVhbF9zYXR1cmF0aW9uMSBwb2x5X2xjbSdcbiAgICAgICsgJyBwb2x5X21pbmltaXphdGlvbiBwb2x5bW9kIHBvbHlfbXVsdGlwbHkgcG9seW5vbWUyZWxlIHBvbHlub21pYWxwIHBvbHlfbm9ybWFsX2Zvcm0nXG4gICAgICArICcgcG9seV9ub3JtYWxpemUgcG9seV9ub3JtYWxpemVfbGlzdCBwb2x5X3BvbHlzYXR1cmF0aW9uX2V4dGVuc2lvbiBwb2x5X3ByaW1pdGl2ZV9wYXJ0J1xuICAgICAgKyAnIHBvbHlfcHNldWRvX2RpdmlkZSBwb2x5X3JlZHVjZWRfZ3JvYm5lciBwb2x5X3JlZHVjdGlvbiBwb2x5X3NhdHVyYXRpb25fZXh0ZW5zaW9uJ1xuICAgICAgKyAnIHBvbHlfc19wb2x5bm9taWFsIHBvbHlfc3VidHJhY3QgcG9seXRvY29tcGFuaW9uIHBvcCBwb3N0Zml4IHBvdGVudGlhbCBwb3dlcl9tb2QnXG4gICAgICArICcgcG93ZXJzZXJpZXMgcG93ZXJzZXQgcHJlZml4IHByZXZfcHJpbWUgcHJpbWVwIHByaW1lcyBwcmluY2lwYWxfY29tcG9uZW50cydcbiAgICAgICsgJyBwcmludCBwcmludGYgcHJpbnRmaWxlIHByaW50X2dyYXBoIHByaW50cG9pcyBwcmludHByb3BzIHByb2RyYWMgcHJvZHVjdCBwcm9wZXJ0aWVzJ1xuICAgICAgKyAnIHByb3B2YXJzIHBzaSBwc3Vic3QgcHRyaWFuZ3VsYXJpemUgcHVpIHB1aTJjb21wIHB1aTJlbGUgcHVpMnBvbHlub21lIHB1aV9kaXJlY3QnXG4gICAgICArICcgcHVpcmVkdWMgcHVzaCBwdXQgcHYgcXB1dCBxcmFuZ2UgcXR5IHF1YWRfY29udHJvbCBxdWFkX3FhZyBxdWFkX3FhZ2kgcXVhZF9xYWdwJ1xuICAgICAgKyAnIHF1YWRfcWFncyBxdWFkX3Fhd2MgcXVhZF9xYXdmIHF1YWRfcWF3byBxdWFkX3Fhd3MgcXVhZHJpbGF0ZXJhbCBxdWFudGlsZSdcbiAgICAgICsgJyBxdWFudGlsZV9iZXJub3VsbGkgcXVhbnRpbGVfYmV0YSBxdWFudGlsZV9iaW5vbWlhbCBxdWFudGlsZV9jYXVjaHkgcXVhbnRpbGVfY2hpMidcbiAgICAgICsgJyBxdWFudGlsZV9jb250aW51b3VzX3VuaWZvcm0gcXVhbnRpbGVfZGlzY3JldGVfdW5pZm9ybSBxdWFudGlsZV9leHAgcXVhbnRpbGVfZidcbiAgICAgICsgJyBxdWFudGlsZV9nYW1tYSBxdWFudGlsZV9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBxdWFudGlsZV9nZW9tZXRyaWMgcXVhbnRpbGVfZ3VtYmVsJ1xuICAgICAgKyAnIHF1YW50aWxlX2h5cGVyZ2VvbWV0cmljIHF1YW50aWxlX2xhcGxhY2UgcXVhbnRpbGVfbG9naXN0aWMgcXVhbnRpbGVfbG9nbm9ybWFsJ1xuICAgICAgKyAnIHF1YW50aWxlX25lZ2F0aXZlX2Jpbm9taWFsIHF1YW50aWxlX25vbmNlbnRyYWxfY2hpMiBxdWFudGlsZV9ub25jZW50cmFsX3N0dWRlbnRfdCdcbiAgICAgICsgJyBxdWFudGlsZV9ub3JtYWwgcXVhbnRpbGVfcGFyZXRvIHF1YW50aWxlX3BvaXNzb24gcXVhbnRpbGVfcmF5bGVpZ2ggcXVhbnRpbGVfc3R1ZGVudF90J1xuICAgICAgKyAnIHF1YW50aWxlX3dlaWJ1bGwgcXVhcnRpbGVfc2tld25lc3MgcXVpdCBxdW5pdCBxdW90aWVudCByYWNhaF92IHJhY2FoX3cgcmFkY2FuJ1xuICAgICAgKyAnIHJhZGl1cyByYW5kb20gcmFuZG9tX2Jlcm5vdWxsaSByYW5kb21fYmV0YSByYW5kb21fYmlub21pYWwgcmFuZG9tX2JpcGFydGl0ZV9ncmFwaCdcbiAgICAgICsgJyByYW5kb21fY2F1Y2h5IHJhbmRvbV9jaGkyIHJhbmRvbV9jb250aW51b3VzX3VuaWZvcm0gcmFuZG9tX2RpZ3JhcGggcmFuZG9tX2Rpc2NyZXRlX3VuaWZvcm0nXG4gICAgICArICcgcmFuZG9tX2V4cCByYW5kb21fZiByYW5kb21fZ2FtbWEgcmFuZG9tX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHJhbmRvbV9nZW9tZXRyaWMnXG4gICAgICArICcgcmFuZG9tX2dyYXBoIHJhbmRvbV9ncmFwaDEgcmFuZG9tX2d1bWJlbCByYW5kb21faHlwZXJnZW9tZXRyaWMgcmFuZG9tX2xhcGxhY2UnXG4gICAgICArICcgcmFuZG9tX2xvZ2lzdGljIHJhbmRvbV9sb2dub3JtYWwgcmFuZG9tX25lZ2F0aXZlX2Jpbm9taWFsIHJhbmRvbV9uZXR3b3JrJ1xuICAgICAgKyAnIHJhbmRvbV9ub25jZW50cmFsX2NoaTIgcmFuZG9tX25vbmNlbnRyYWxfc3R1ZGVudF90IHJhbmRvbV9ub3JtYWwgcmFuZG9tX3BhcmV0bydcbiAgICAgICsgJyByYW5kb21fcGVybXV0YXRpb24gcmFuZG9tX3BvaXNzb24gcmFuZG9tX3JheWxlaWdoIHJhbmRvbV9yZWd1bGFyX2dyYXBoIHJhbmRvbV9zdHVkZW50X3QnXG4gICAgICArICcgcmFuZG9tX3RvdXJuYW1lbnQgcmFuZG9tX3RyZWUgcmFuZG9tX3dlaWJ1bGwgcmFuZ2UgcmFuayByYXQgcmF0Y29lZiByYXRkZW5vbSdcbiAgICAgICsgJyByYXRkaWZmIHJhdGRpc3JlcCByYXRleHBhbmQgcmF0aW50ZXJwb2wgcmF0aW9uYWwgcmF0aW9uYWxpemUgcmF0bnVtZXIgcmF0bnVtcCdcbiAgICAgICsgJyByYXRwIHJhdHNpbXAgcmF0c3Vic3QgcmF0dmFycyByYXR3ZWlnaHQgcmVhZCByZWFkX2FycmF5IHJlYWRfYmluYXJ5X2FycmF5J1xuICAgICAgKyAnIHJlYWRfYmluYXJ5X2xpc3QgcmVhZF9iaW5hcnlfbWF0cml4IHJlYWRieXRlIHJlYWRjaGFyIHJlYWRfaGFzaGVkX2FycmF5IHJlYWRsaW5lJ1xuICAgICAgKyAnIHJlYWRfbGlzdCByZWFkX21hdHJpeCByZWFkX25lc3RlZF9saXN0IHJlYWRvbmx5IHJlYWRfeHBtIHJlYWxfaW1hZ3BhcnRfdG9fY29uanVnYXRlJ1xuICAgICAgKyAnIHJlYWxwYXJ0IHJlYWxyb290cyByZWFycmF5IHJlY3RhbmdsZSByZWN0Zm9ybSByZWN0Zm9ybV9sb2dfaWZfY29uc3RhbnQgcmVjdHRvcG9sYXInXG4gICAgICArICcgcmVkaWZmIHJlZHVjZV9jb25zdHMgcmVkdWNlX29yZGVyIHJlZ2lvbiByZWdpb25fYm91bmRhcmllcyByZWdpb25fYm91bmRhcmllc19wbHVzJ1xuICAgICAgKyAnIHJlbSByZW1haW5kZXIgcmVtYXJyYXkgcmVtYm94IHJlbWNvbXBzIHJlbWNvbiByZW1jb29yZCByZW1mdW4gcmVtZnVuY3Rpb24nXG4gICAgICArICcgcmVtbGV0IHJlbW92ZSByZW1vdmVfY29uc3R2YWx1ZSByZW1vdmVfZGltZW5zaW9ucyByZW1vdmVfZWRnZSByZW1vdmVfZnVuZGFtZW50YWxfZGltZW5zaW9ucydcbiAgICAgICsgJyByZW1vdmVfZnVuZGFtZW50YWxfdW5pdHMgcmVtb3ZlX3Bsb3Rfb3B0aW9uIHJlbW92ZV92ZXJ0ZXggcmVtcGFydCByZW1ydWxlJ1xuICAgICAgKyAnIHJlbXN5bSByZW12YWx1ZSByZW5hbWUgcmVuYW1lX2ZpbGUgcmVzZXQgcmVzZXRfZGlzcGxheXMgcmVzaWR1ZSByZXNvbHZhbnRlJ1xuICAgICAgKyAnIHJlc29sdmFudGVfYWx0ZXJuZWUxIHJlc29sdmFudGVfYmlwYXJ0aXRlIHJlc29sdmFudGVfZGllZHJhbGUgcmVzb2x2YW50ZV9rbGVpbidcbiAgICAgICsgJyByZXNvbHZhbnRlX2tsZWluMyByZXNvbHZhbnRlX3Byb2R1aXRfc3ltIHJlc29sdmFudGVfdW5pdGFpcmUgcmVzb2x2YW50ZV92aWVyZXInXG4gICAgICArICcgcmVzdCByZXN1bHRhbnQgcmV0dXJuIHJldmVhbCByZXZlcnNlIHJldmVydCByZXZlcnQyIHJnYjJsZXZlbCByaHMgcmljY2kgcmllbWFubidcbiAgICAgICsgJyByaW52YXJpYW50IHJpc2NoIHJrIHJtZGlyIHJuY29tYmluZSByb21iZXJnIHJvb20gcm9vdHNjb250cmFjdCByb3VuZCByb3cnXG4gICAgICArICcgcm93b3Agcm93c3dhcCBycmVkdWNlIHJ1bl90ZXN0c3VpdGUgJXMgc2F2ZSBzYXZpbmcgc2NhbGFycCBzY2FsZWRfYmVzc2VsX2knXG4gICAgICArICcgc2NhbGVkX2Jlc3NlbF9pMCBzY2FsZWRfYmVzc2VsX2kxIHNjYWxlZmFjdG9ycyBzY2FubWFwIHNjYXR0ZXJwbG90IHNjYXR0ZXJwbG90X2Rlc2NyaXB0aW9uJ1xuICAgICAgKyAnIHNjZW5lIHNjaHVyMmNvbXAgc2NvbmNhdCBzY29weSBzY3NpbXAgc2N1cnZhdHVyZSBzZG93bmNhc2Ugc2VjIHNlY2ggc2Vjb25kJ1xuICAgICAgKyAnIHNlcXVhbCBzZXF1YWxpZ25vcmUgc2V0X2FsdF9kaXNwbGF5IHNldGRpZmZlcmVuY2Ugc2V0X2RyYXdfZGVmYXVsdHMgc2V0X2VkZ2Vfd2VpZ2h0J1xuICAgICAgKyAnIHNldGVsbXggc2V0ZXF1YWxwIHNldGlmeSBzZXRwIHNldF9wYXJ0aXRpb25zIHNldF9wbG90X29wdGlvbiBzZXRfcHJvbXB0IHNldF9yYW5kb21fc3RhdGUnXG4gICAgICArICcgc2V0X3RleF9lbnZpcm9ubWVudCBzZXRfdGV4X2Vudmlyb25tZW50X2RlZmF1bHQgc2V0dW5pdHMgc2V0dXBfYXV0b2xvYWQgc2V0X3VwX2RvdF9zaW1wbGlmaWNhdGlvbnMnXG4gICAgICArICcgc2V0X3ZlcnRleF9sYWJlbCBzZXZlbnRoIHNleHBsb2RlIHNmIHNoYTFzdW0gc2hhMjU2c3VtIHNob3J0ZXN0X3BhdGggc2hvcnRlc3Rfd2VpZ2h0ZWRfcGF0aCdcbiAgICAgICsgJyBzaG93IHNob3djb21wcyBzaG93cmF0dmFycyBzaWVycGluc2tpYWxlIHNpZXJwaW5za2ltYXAgc2lnbiBzaWdudW0gc2ltaWxhcml0eXRyYW5zZm9ybSdcbiAgICAgICsgJyBzaW1wX2luZXF1YWxpdHkgc2ltcGxpZnlfc3VtIHNpbXBsb2RlIHNpbXBtZXRkZXJpdiBzaW10cmFuIHNpbiBzaW5oIHNpbnNlcnQnXG4gICAgICArICcgc2ludmVydGNhc2Ugc2l4dGggc2tld25lc3Mgc2tld25lc3NfYmVybm91bGxpIHNrZXduZXNzX2JldGEgc2tld25lc3NfYmlub21pYWwnXG4gICAgICArICcgc2tld25lc3NfY2hpMiBza2V3bmVzc19jb250aW51b3VzX3VuaWZvcm0gc2tld25lc3NfZGlzY3JldGVfdW5pZm9ybSBza2V3bmVzc19leHAnXG4gICAgICArICcgc2tld25lc3NfZiBza2V3bmVzc19nYW1tYSBza2V3bmVzc19nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBza2V3bmVzc19nZW9tZXRyaWMnXG4gICAgICArICcgc2tld25lc3NfZ3VtYmVsIHNrZXduZXNzX2h5cGVyZ2VvbWV0cmljIHNrZXduZXNzX2xhcGxhY2Ugc2tld25lc3NfbG9naXN0aWMnXG4gICAgICArICcgc2tld25lc3NfbG9nbm9ybWFsIHNrZXduZXNzX25lZ2F0aXZlX2Jpbm9taWFsIHNrZXduZXNzX25vbmNlbnRyYWxfY2hpMiBza2V3bmVzc19ub25jZW50cmFsX3N0dWRlbnRfdCdcbiAgICAgICsgJyBza2V3bmVzc19ub3JtYWwgc2tld25lc3NfcGFyZXRvIHNrZXduZXNzX3BvaXNzb24gc2tld25lc3NfcmF5bGVpZ2ggc2tld25lc3Nfc3R1ZGVudF90J1xuICAgICAgKyAnIHNrZXduZXNzX3dlaWJ1bGwgc2xlbmd0aCBzbWFrZSBzbWFsbF9yaG9tYmljb3NpZG9kZWNhaGVkcm9uX2dyYXBoIHNtYWxsX3Job21iaWN1Ym9jdGFoZWRyb25fZ3JhcGgnXG4gICAgICArICcgc21heCBzbWluIHNtaXNtYXRjaCBzbm93bWFwIHNudWJfY3ViZV9ncmFwaCBzbnViX2RvZGVjYWhlZHJvbl9ncmFwaCBzb2x2ZSdcbiAgICAgICsgJyBzb2x2ZV9yZWMgc29sdmVfcmVjX3JhdCBzb21lIHNvbXJhYyBzb3J0IHNwYXJzZTZfZGVjb2RlIHNwYXJzZTZfZW5jb2RlIHNwYXJzZTZfZXhwb3J0J1xuICAgICAgKyAnIHNwYXJzZTZfaW1wb3J0IHNwZWNpbnQgc3BoZXJpY2FsIHNwaGVyaWNhbF9iZXNzZWxfaiBzcGhlcmljYWxfYmVzc2VsX3kgc3BoZXJpY2FsX2hhbmtlbDEnXG4gICAgICArICcgc3BoZXJpY2FsX2hhbmtlbDIgc3BoZXJpY2FsX2hhcm1vbmljIHNwaGVyaWNhbF90b194eXogc3BsaWNlIHNwbGl0IHNwb3NpdGlvbidcbiAgICAgICsgJyBzcHJpbnQgc3FmciBzcXJ0IHNxcnRkZW5lc3Qgc3JlbW92ZSBzcmVtb3ZlZmlyc3Qgc3JldmVyc2Ugc3NlYXJjaCBzc29ydCBzc3RhdHVzJ1xuICAgICAgKyAnIHNzdWJzdCBzc3Vic3RmaXJzdCBzdGFpcmNhc2Ugc3RhbmRhcmRpemUgc3RhbmRhcmRpemVfaW52ZXJzZV90cmlnIHN0YXJwbG90J1xuICAgICAgKyAnIHN0YXJwbG90X2Rlc2NyaXB0aW9uIHN0YXR1cyBzdGQgc3RkMSBzdGRfYmVybm91bGxpIHN0ZF9iZXRhIHN0ZF9iaW5vbWlhbCdcbiAgICAgICsgJyBzdGRfY2hpMiBzdGRfY29udGludW91c191bmlmb3JtIHN0ZF9kaXNjcmV0ZV91bmlmb3JtIHN0ZF9leHAgc3RkX2Ygc3RkX2dhbW1hJ1xuICAgICAgKyAnIHN0ZF9nZW5lcmFsX2Zpbml0ZV9kaXNjcmV0ZSBzdGRfZ2VvbWV0cmljIHN0ZF9ndW1iZWwgc3RkX2h5cGVyZ2VvbWV0cmljIHN0ZF9sYXBsYWNlJ1xuICAgICAgKyAnIHN0ZF9sb2dpc3RpYyBzdGRfbG9nbm9ybWFsIHN0ZF9uZWdhdGl2ZV9iaW5vbWlhbCBzdGRfbm9uY2VudHJhbF9jaGkyIHN0ZF9ub25jZW50cmFsX3N0dWRlbnRfdCdcbiAgICAgICsgJyBzdGRfbm9ybWFsIHN0ZF9wYXJldG8gc3RkX3BvaXNzb24gc3RkX3JheWxlaWdoIHN0ZF9zdHVkZW50X3Qgc3RkX3dlaWJ1bGwnXG4gICAgICArICcgc3RlbXBsb3Qgc3Rpcmxpbmcgc3RpcmxpbmcxIHN0aXJsaW5nMiBzdHJpbSBzdHJpbWwgc3RyaW1yIHN0cmluZyBzdHJpbmdvdXQnXG4gICAgICArICcgc3RyaW5ncCBzdHJvbmdfY29tcG9uZW50cyBzdHJ1dmVfaCBzdHJ1dmVfbCBzdWJsaXMgc3VibGlzdCBzdWJsaXN0X2luZGljZXMnXG4gICAgICArICcgc3VibWF0cml4IHN1YnNhbXBsZSBzdWJzZXQgc3Vic2V0cCBzdWJzdCBzdWJzdGlucGFydCBzdWJzdF9wYXJhbGxlbCBzdWJzdHBhcnQnXG4gICAgICArICcgc3Vic3RyaW5nIHN1YnZhciBzdWJ2YXJwIHN1bSBzdW1jb250cmFjdCBzdW1tYW5kX3RvX3JlYyBzdXBjYXNlIHN1cGNvbnRleHQnXG4gICAgICArICcgc3ltYm9scCBzeW1tZGlmZmVyZW5jZSBzeW1tZXRyaWNwIHN5c3RlbSB0YWtlX2NoYW5uZWwgdGFrZV9pbmZlcmVuY2UgdGFuJ1xuICAgICAgKyAnIHRhbmggdGF5bG9yIHRheWxvcmluZm8gdGF5bG9ycCB0YXlsb3Jfc2ltcGxpZmllciB0YXl0b3JhdCB0Y2xfb3V0cHV0IHRjb250cmFjdCdcbiAgICAgICsgJyB0ZWxscmF0IHRlbGxzaW1wIHRlbGxzaW1wYWZ0ZXIgdGVudGV4IHRlbnRoIHRlc3RfbWVhbiB0ZXN0X21lYW5zX2RpZmZlcmVuY2UnXG4gICAgICArICcgdGVzdF9ub3JtYWxpdHkgdGVzdF9wcm9wb3J0aW9uIHRlc3RfcHJvcG9ydGlvbnNfZGlmZmVyZW5jZSB0ZXN0X3Jhbmtfc3VtJ1xuICAgICAgKyAnIHRlc3Rfc2lnbiB0ZXN0X3NpZ25lZF9yYW5rIHRlc3RfdmFyaWFuY2UgdGVzdF92YXJpYW5jZV9yYXRpbyB0ZXggdGV4MSB0ZXhfZGlzcGxheSdcbiAgICAgICsgJyB0ZXhwdXQgJXRoIHRoaXJkIHRocm93IHRpbWUgdGltZWRhdGUgdGltZXIgdGltZXJfaW5mbyB0bGRlZmludCB0bGltaXQgdG9kZF9jb3hldGVyJ1xuICAgICAgKyAnIHRvZXBsaXR6IHRva2VucyB0b19saXNwIHRvcG9sb2dpY2FsX3NvcnQgdG9fcG9seSB0b19wb2x5X3NvbHZlIHRvdGFsZGlzcmVwJ1xuICAgICAgKyAnIHRvdGFsZm91cmllciB0b3RpZW50IHRwYXJ0cG9sIHRyYWNlIHRyYWNlbWF0cml4IHRyYWNlX29wdGlvbnMgdHJhbnNmb3JtX3NhbXBsZSdcbiAgICAgICsgJyB0cmFuc2xhdGUgdHJhbnNsYXRlX2ZpbGUgdHJhbnNwb3NlIHRyZWVmYWxlIHRyZWVfcmVkdWNlIHRyZWlsbGlzIHRyZWluYXQnXG4gICAgICArICcgdHJpYW5nbGUgdHJpYW5ndWxhcml6ZSB0cmlnZXhwYW5kIHRyaWdyYXQgdHJpZ3JlZHVjZSB0cmlnc2ltcCB0cnVuYyB0cnVuY2F0ZSdcbiAgICAgICsgJyB0cnVuY2F0ZWRfY3ViZV9ncmFwaCB0cnVuY2F0ZWRfZG9kZWNhaGVkcm9uX2dyYXBoIHRydW5jYXRlZF9pY29zYWhlZHJvbl9ncmFwaCdcbiAgICAgICsgJyB0cnVuY2F0ZWRfdGV0cmFoZWRyb25fZ3JhcGggdHJfd2FybmluZ3NfZ2V0IHR1YmUgdHV0dGVfZ3JhcGggdWVpdmVjdHMgdWZvcmdldCdcbiAgICAgICsgJyB1bHRyYXNwaGVyaWNhbCB1bmRlcmx5aW5nX2dyYXBoIHVuZGlmZiB1bmlvbiB1bmlxdWUgdW5pdGVpZ2VudmVjdG9ycyB1bml0cCdcbiAgICAgICsgJyB1bml0cyB1bml0X3N0ZXAgdW5pdHZlY3RvciB1bm9yZGVyIHVuc3VtIHVudGVsbHJhdCB1bnRpbWVyJ1xuICAgICAgKyAnIHVudHJhY2UgdXBwZXJjYXNlcCB1cmljY2kgdXJpZW1hbm4gdXZlY3QgdmFuZGVybW9uZGVfbWF0cml4IHZhciB2YXIxIHZhcl9iZXJub3VsbGknXG4gICAgICArICcgdmFyX2JldGEgdmFyX2Jpbm9taWFsIHZhcl9jaGkyIHZhcl9jb250aW51b3VzX3VuaWZvcm0gdmFyX2Rpc2NyZXRlX3VuaWZvcm0nXG4gICAgICArICcgdmFyX2V4cCB2YXJfZiB2YXJfZ2FtbWEgdmFyX2dlbmVyYWxfZmluaXRlX2Rpc2NyZXRlIHZhcl9nZW9tZXRyaWMgdmFyX2d1bWJlbCdcbiAgICAgICsgJyB2YXJfaHlwZXJnZW9tZXRyaWMgdmFyX2xhcGxhY2UgdmFyX2xvZ2lzdGljIHZhcl9sb2dub3JtYWwgdmFyX25lZ2F0aXZlX2Jpbm9taWFsJ1xuICAgICAgKyAnIHZhcl9ub25jZW50cmFsX2NoaTIgdmFyX25vbmNlbnRyYWxfc3R1ZGVudF90IHZhcl9ub3JtYWwgdmFyX3BhcmV0byB2YXJfcG9pc3NvbidcbiAgICAgICsgJyB2YXJfcmF5bGVpZ2ggdmFyX3N0dWRlbnRfdCB2YXJfd2VpYnVsbCB2ZWN0b3IgdmVjdG9ycG90ZW50aWFsIHZlY3RvcnNpbXAnXG4gICAgICArICcgdmVyYmlmeSB2ZXJzIHZlcnRleF9jb2xvcmluZyB2ZXJ0ZXhfY29ubmVjdGl2aXR5IHZlcnRleF9kZWdyZWUgdmVydGV4X2Rpc3RhbmNlJ1xuICAgICAgKyAnIHZlcnRleF9lY2NlbnRyaWNpdHkgdmVydGV4X2luX2RlZ3JlZSB2ZXJ0ZXhfb3V0X2RlZ3JlZSB2ZXJ0aWNlcyB2ZXJ0aWNlc190b19jeWNsZSdcbiAgICAgICsgJyB2ZXJ0aWNlc190b19wYXRoICV3IHdleWwgd2hlZWxfZ3JhcGggd2llbmVyX2luZGV4IHdpZ25lcl8zaiB3aWduZXJfNmonXG4gICAgICArICcgd2lnbmVyXzlqIHdpdGhfc3Rkb3V0IHdyaXRlX2JpbmFyeV9kYXRhIHdyaXRlYnl0ZSB3cml0ZV9kYXRhIHdyaXRlZmlsZSB3cm9uc2tpYW4nXG4gICAgICArICcgeHJlZHVjZSB4dGhydSAleSBaZWlsYmVyZ2VyIHplcm9lcXVpdiB6ZXJvZm9yIHplcm9tYXRyaXggemVyb21hdHJpeHAgemV0YSdcbiAgICAgICsgJyB6Z2VldiB6aGVldiB6bGFuZ2Ugem5fYWRkX3RhYmxlIHpuX2Nhcm1pY2hhZWxfbGFtYmRhIHpuX2NoYXJhY3RlcmlzdGljX2ZhY3RvcnMnXG4gICAgICArICcgem5fZGV0ZXJtaW5hbnQgem5fZmFjdG9yX2dlbmVyYXRvcnMgem5faW52ZXJ0X2J5X2x1IHpuX2xvZyB6bl9tdWx0X3RhYmxlJ1xuICAgICAgKyAnIGFic2JveGNoYXIgYWN0aXZlY29udGV4dHMgYWRhcHRfZGVwdGggYWRkaXRpdmUgYWRpbSBhZm9ybSBhbGdlYnJhaWMnXG4gICAgICArICcgYWxnZXBzaWxvbiBhbGdleGFjdCBhbGlhc2VzIGFsbGJ1dCBhbGxfZG90c2ltcF9kZW5vbXMgYWxsb2NhdGlvbiBhbGxzeW0gYWxwaGFiZXRpYydcbiAgICAgICsgJyBhbmltYXRpb24gYW50aXN5bW1ldHJpYyBhcnJheXMgYXNrZXhwIGFzc3VtZV9wb3MgYXNzdW1lX3Bvc19wcmVkIGFzc3VtZXNjYWxhcidcbiAgICAgICsgJyBhc3ltYm9sIGF0b21ncmFkIGF0cmlnMSBheGVzIGF4aXNfM2QgYXhpc19ib3R0b20gYXhpc19sZWZ0IGF4aXNfcmlnaHQgYXhpc190b3AnXG4gICAgICArICcgYXppbXV0aCBiYWNrZ3JvdW5kIGJhY2tncm91bmRfY29sb3IgYmFja3N1YnN0IGJlcmxlZmFjdCBiZXJuc3RlaW5fZXhwbGljaXQnXG4gICAgICArICcgYmVzc2VsZXhwYW5kIGJldGFfYXJnc19zdW1fdG9faW50ZWdlciBiZXRhX2V4cGFuZCBiZnRvcmF0IGJmdHJ1bmMgYmluZHRlc3QnXG4gICAgICArICcgYm9yZGVyIGJvdW5kYXJpZXNfYXJyYXkgYm94IGJveGNoYXIgYnJlYWt1cCAlYyBjYXBwaW5nIGNhdWNoeXN1bSBjYnJhbmdlJ1xuICAgICAgKyAnIGNidGljcyBjZW50ZXIgY2ZsZW5ndGggY2ZyYW1lX2ZsYWcgY25vbm1ldF9mbGFnIGNvbG9yIGNvbG9yX2JhciBjb2xvcl9iYXJfdGljcydcbiAgICAgICsgJyBjb2xvcmJveCBjb2x1bW5zIGNvbW11dGF0aXZlIGNvbXBsZXggY29uZSBjb250ZXh0IGNvbnRleHRzIGNvbnRvdXIgY29udG91cl9sZXZlbHMnXG4gICAgICArICcgY29zbnBpZmxhZyBjdGF5cG92IGN0YXlwdCBjdGF5c3dpdGNoIGN0YXl2YXIgY3RfY29vcmRzIGN0b3JzaW9uX2ZsYWcgY3RyZ3NpbXAnXG4gICAgICArICcgY3ViZSBjdXJyZW50X2xldF9ydWxlX3BhY2thZ2UgY3lsaW5kZXIgZGF0YV9maWxlX25hbWUgZGVidWdtb2RlIGRlY3JlYXNpbmcnXG4gICAgICArICcgZGVmYXVsdF9sZXRfcnVsZV9wYWNrYWdlIGRlbGF5IGRlcGVuZGVuY2llcyBkZXJpdmFiYnJldiBkZXJpdnN1YnN0IGRldG91dCdcbiAgICAgICsgJyBkaWFnbWV0cmljIGRpZmYgZGltIGRpbWVuc2lvbnMgZGlzcGZsYWcgZGlzcGxheTJkfDEwIGRpc3BsYXlfZm9ybWF0X2ludGVybmFsJ1xuICAgICAgKyAnIGRpc3RyaWJ1dGVfb3ZlciBkb2FsbG14b3BzIGRvbWFpbiBkb214ZXhwdCBkb214bXhvcHMgZG9teG5jdGltZXMgZG9udGZhY3RvcidcbiAgICAgICsgJyBkb3NjbXhvcHMgZG9zY214cGx1cyBkb3QwbnNjc2ltcCBkb3Qwc2ltcCBkb3Qxc2ltcCBkb3Rhc3NvYyBkb3Rjb25zdHJ1bGVzJ1xuICAgICAgKyAnIGRvdGRpc3RyaWIgZG90ZXhwdHNpbXAgZG90aWRlbnQgZG90c2NydWxlcyBkcmF3X2dyYXBoX3Byb2dyYW0gZHJhd19yZWFscGFydCdcbiAgICAgICsgJyBlZGdlX2NvbG9yIGVkZ2VfY29sb3JpbmcgZWRnZV9wYXJ0aXRpb24gZWRnZV90eXBlIGVkZ2Vfd2lkdGggJWVkaXNwZmxhZydcbiAgICAgICsgJyBlbGV2YXRpb24gJWVtb2RlIGVuZHBoaSBlbmR0aGV0YSBlbmdpbmVlcmluZ19mb3JtYXRfZmxvYXRzIGVuaGFuY2VkM2QgJWVudW1lcidcbiAgICAgICsgJyBlcHNpbG9uX2xwIGVyZmZsYWcgZXJmX3JlcHJlc2VudGF0aW9uIGVycm9ybXNnIGVycm9yX3NpemUgZXJyb3Jfc3ltcyBlcnJvcl90eXBlJ1xuICAgICAgKyAnICVlX3RvX251bWxvZyBldmFsIGV2ZW4gZXZlbmZ1biBldmZsYWcgZXZmdW4gZXZfcG9pbnQgZXhwYW5kd3J0X2Rlbm9tIGV4cGludGV4cGFuZCdcbiAgICAgICsgJyBleHBpbnRyZXAgZXhwb24gZXhwb3AgZXhwdGRpc3BmbGFnIGV4cHRpc29sYXRlIGV4cHRzdWJzdCBmYWNleHBhbmQgZmFjc3VtX2NvbWJpbmUnXG4gICAgICArICcgZmFjdGxpbSBmYWN0b3JmbGFnIGZhY3RvcmlhbF9leHBhbmQgZmFjdG9yc19vbmx5IGZiIGZlYXR1cmUgZmVhdHVyZXMnXG4gICAgICArICcgZmlsZV9uYW1lIGZpbGVfb3V0cHV0X2FwcGVuZCBmaWxlX3NlYXJjaF9kZW1vIGZpbGVfc2VhcmNoX2xpc3AgZmlsZV9zZWFyY2hfbWF4aW1hfDEwJ1xuICAgICAgKyAnIGZpbGVfc2VhcmNoX3Rlc3RzIGZpbGVfc2VhcmNoX3VzYWdlIGZpbGVfdHlwZV9saXNwIGZpbGVfdHlwZV9tYXhpbWF8MTAgZmlsbF9jb2xvcidcbiAgICAgICsgJyBmaWxsX2RlbnNpdHkgZmlsbGVkX2Z1bmMgZml4ZWRfdmVydGljZXMgZmxpcGZsYWcgZmxvYXQyYmYgZm9udCBmb250X3NpemUnXG4gICAgICArICcgZm9ydGluZGVudCBmb3J0c3BhY2VzIGZwcHJlYyBmcHByaW50cHJlYyBmdW5jdGlvbnMgZ2FtbWFfZXhwYW5kIGdhbW1hbGltJ1xuICAgICAgKyAnIGdkZXQgZ2VuaW5kZXggZ2Vuc3VtbnVtIEdHRkNGTUFYIEdHRklORklOSVRZIGdsb2JhbHNvbHZlIGdudXBsb3RfY29tbWFuZCdcbiAgICAgICsgJyBnbnVwbG90X2N1cnZlX3N0eWxlcyBnbnVwbG90X2N1cnZlX3RpdGxlcyBnbnVwbG90X2RlZmF1bHRfdGVybV9jb21tYW5kIGdudXBsb3RfZHVtYl90ZXJtX2NvbW1hbmQnXG4gICAgICArICcgZ251cGxvdF9maWxlX2FyZ3MgZ251cGxvdF9maWxlX25hbWUgZ251cGxvdF9vdXRfZmlsZSBnbnVwbG90X3BkZl90ZXJtX2NvbW1hbmQnXG4gICAgICArICcgZ251cGxvdF9wbTNkIGdudXBsb3RfcG5nX3Rlcm1fY29tbWFuZCBnbnVwbG90X3Bvc3RhbWJsZSBnbnVwbG90X3ByZWFtYmxlJ1xuICAgICAgKyAnIGdudXBsb3RfcHNfdGVybV9jb21tYW5kIGdudXBsb3Rfc3ZnX3Rlcm1fY29tbWFuZCBnbnVwbG90X3Rlcm0gZ251cGxvdF92aWV3X2FyZ3MnXG4gICAgICArICcgR29zcGVyX2luX1plaWxiZXJnZXIgZ3JhZGVmcyBncmlkIGdyaWQyZCBncmluZCBoYWxmYW5nbGVzIGhlYWRfYW5nbGUgaGVhZF9ib3RoJ1xuICAgICAgKyAnIGhlYWRfbGVuZ3RoIGhlYWRfdHlwZSBoZWlnaHQgaHlwZXJnZW9tZXRyaWNfcmVwcmVzZW50YXRpb24gJWlhcmdzIGliYXNlJ1xuICAgICAgKyAnIGljYzEgaWNjMiBpY291bnRlciBpZHVtbXl4IGllcW5wcmludCBpZmIgaWZjMSBpZmMyIGlmZyBpZmdpIGlmciBpZnJhbWVfYnJhY2tldF9mb3JtJ1xuICAgICAgKyAnIGlmcmkgaWdlb3dlZGdlX2ZsYWcgaWt0MSBpa3QyIGltYWdpbmFyeSBpbmNoYXIgaW5jcmVhc2luZyBpbmZldmFsJ1xuICAgICAgKyAnIGluZmluaXR5IGluZmxhZyBpbmZvbGlzdHMgaW5tIGlubWMxIGlubWMyIGludGFuYWx5c2lzIGludGVnZXIgaW50ZWdlcnZhbHVlZCdcbiAgICAgICsgJyBpbnRlZ3JhdGVfdXNlX3Jvb3Rzb2YgaW50ZWdyYXRpb25fY29uc3RhbnQgaW50ZWdyYXRpb25fY29uc3RhbnRfY291bnRlciBpbnRlcnBvbGF0ZV9jb2xvcidcbiAgICAgICsgJyBpbnRmYWNsaW0gaXBfZ3JpZCBpcF9ncmlkX2luIGlycmF0aW9uYWwgaXNvbGF0ZV93cnRfdGltZXMgaXRlcmF0aW9ucyBpdHInXG4gICAgICArICcganVsaWFfcGFyYW1ldGVyICVrMSAlazIga2VlcGZsb2F0IGtleSBrZXlfcG9zIGtpbnZhcmlhbnQga3QgbGFiZWwgbGFiZWxfYWxpZ25tZW50J1xuICAgICAgKyAnIGxhYmVsX29yaWVudGF0aW9uIGxhYmVscyBsYXNzb2NpYXRpdmUgbGJmZ3NfbmNvcnJlY3Rpb25zIGxiZmdzX25mZXZhbF9tYXgnXG4gICAgICArICcgbGVmdGp1c3QgbGVnZW5kIGxldHJhdCBsZXRfcnVsZV9wYWNrYWdlcyBsZmcgbGcgbGhvc3BpdGFsbGltIGxpbXN1YnN0IGxpbmVhcidcbiAgICAgICsgJyBsaW5lYXJfc29sdmVyIGxpbmVjaGFyIGxpbmVsfDEwIGxpbmVudW0gbGluZV90eXBlIGxpbmV3aWR0aCBsaW5lX3dpZHRoIGxpbnNvbHZlX3BhcmFtcydcbiAgICAgICsgJyBsaW5zb2x2ZXdhcm4gbGlzcGRpc3AgbGlzdGFyaXRoIGxpc3Rjb25zdHZhcnMgbGlzdGR1bW15dmFycyBsbXhjaGFyIGxvYWRfcGF0aG5hbWUnXG4gICAgICArICcgbG9hZHByaW50IGxvZ2FicyBsb2dhcmMgbG9nY2IgbG9nY29uY29lZmZwIGxvZ2V4cGFuZCBsb2duZWdpbnQgbG9nc2ltcCBsb2d4J1xuICAgICAgKyAnIGxvZ3hfc2Vjb25kYXJ5IGxvZ3kgbG9neV9zZWNvbmRhcnkgbG9neiBscmllbSBtMXBicmFuY2ggbWFjcm9leHBhbnNpb24gbWFjcm9zJ1xuICAgICAgKyAnIG1haW52YXIgbWFudWFsX2RlbW8gbWFwZXJyb3IgbWFwcHJpbnQgbWF0cml4X2VsZW1lbnRfYWRkIG1hdHJpeF9lbGVtZW50X211bHQnXG4gICAgICArICcgbWF0cml4X2VsZW1lbnRfdHJhbnNwb3NlIG1heGFwcGx5ZGVwdGggbWF4YXBwbHloZWlnaHQgbWF4aW1hX3RlbXBkaXJ8MTAgbWF4aW1hX3VzZXJkaXJ8MTAnXG4gICAgICArICcgbWF4bmVnZXggTUFYX09SRCBtYXhwb3NleCBtYXhwc2lmcmFjZGVub20gbWF4cHNpZnJhY251bSBtYXhwc2luZWdpbnQgbWF4cHNpcG9zaW50J1xuICAgICAgKyAnIG1heHRheW9yZGVyIG1lc2hfbGluZXNfY29sb3IgbWV0aG9kIG1vZF9iaWdfcHJpbWUgbW9kZV9jaGVja19lcnJvcnAnXG4gICAgICArICcgbW9kZV9jaGVja3AgbW9kZV9jaGVja193YXJucCBtb2RfdGVzdCBtb2RfdGhyZXNob2xkIG1vZHVsYXJfbGluZWFyX3NvbHZlcidcbiAgICAgICsgJyBtb2R1bHVzIG11bHRpcGxpY2F0aXZlIG11bHRpcGxpY2l0aWVzIG15b3B0aW9ucyBuYXJ5IG5lZ2Rpc3RyaWIgbmVnc3VtZGlzcGZsYWcnXG4gICAgICArICcgbmV3bGluZSBuZXd0b25lcHNpbG9uIG5ld3Rvbm1heGl0ZXIgbmV4dGxheWVyZmFjdG9yIG5pY2VpbmRpY2VzcHJlZiBubSBubWMnXG4gICAgICArICcgbm9ldmFsIG5vbGFiZWxzIG5vbmVnYXRpdmVfbHAgbm9uaW50ZWdlciBub25zY2FsYXIgbm91biBub3VuZGlzcCBub3VucyBucCdcbiAgICAgICsgJyBucGkgbnRpY2tzIG50cmlnIG51bWVyIG51bWVyX3BicmFuY2ggb2Jhc2Ugb2RkIG9kZGZ1biBvcGFjaXR5IG9wcHJvcGVydGllcydcbiAgICAgICsgJyBvcHN1YnN0IG9wdGltcHJlZml4IG9wdGlvbnNldCBvcmllbnRhdGlvbiBvcmlnaW4gb3J0aG9wb2x5X3JldHVybnNfaW50ZXJ2YWxzJ1xuICAgICAgKyAnIG91dGF0aXZlIG91dGNoYXIgcGFja2FnZWZpbGUgcGFsZXR0ZSBwYXJ0c3dpdGNoIHBkZl9maWxlIHBmZWZvcm1hdCBwaGlyZXNvbHV0aW9uJ1xuICAgICAgKyAnICVwaWFyZ3MgcGllY2UgcGl2b3RfY291bnRfc3ggcGl2b3RfbWF4X3N4IHBsb3RfZm9ybWF0IHBsb3Rfb3B0aW9ucyBwbG90X3JlYWxwYXJ0J1xuICAgICAgKyAnIHBuZ19maWxlIHBvY2hoYW1tZXJfbWF4X2luZGV4IHBvaW50cyBwb2ludHNpemUgcG9pbnRfc2l6ZSBwb2ludHNfam9pbmVkIHBvaW50X3R5cGUnXG4gICAgICArICcgcG9pc2xpbSBwb2lzc29uIHBvbHlfY29lZmZpY2llbnRfcmluZyBwb2x5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlmYWN0b3IgcG9seV9ncm9ibmVyX2FsZ29yaXRobSdcbiAgICAgICsgJyBwb2x5X2dyb2JuZXJfZGVidWcgcG9seV9tb25vbWlhbF9vcmRlciBwb2x5X3ByaW1hcnlfZWxpbWluYXRpb25fb3JkZXIgcG9seV9yZXR1cm5fdGVybV9saXN0J1xuICAgICAgKyAnIHBvbHlfc2Vjb25kYXJ5X2VsaW1pbmF0aW9uX29yZGVyIHBvbHlfdG9wX3JlZHVjdGlvbl9vbmx5IHBvc2Z1biBwb3NpdGlvbidcbiAgICAgICsgJyBwb3dlcmRpc3AgcHJlZCBwcmVkZXJyb3IgcHJpbWVwX251bWJlcl9vZl90ZXN0cyBwcm9kdWN0X3VzZV9nYW1tYSBwcm9ncmFtJ1xuICAgICAgKyAnIHByb2dyYW1tb2RlIHByb21vdGVfZmxvYXRfdG9fYmlnZmxvYXQgcHJvbXB0IHByb3BvcnRpb25hbF9heGVzIHByb3BzIHBzZXhwYW5kJ1xuICAgICAgKyAnIHBzX2ZpbGUgcmFkZXhwYW5kIHJhZGl1cyByYWRzdWJzdGZsYWcgcmFzc29jaWF0aXZlIHJhdGFsZ2Rlbm9tIHJhdGNocmlzdG9mJ1xuICAgICAgKyAnIHJhdGRlbm9tZGl2aWRlIHJhdGVpbnN0ZWluIHJhdGVwc2lsb24gcmF0ZmFjIHJhdGlvbmFsIHJhdG14IHJhdHByaW50IHJhdHJpZW1hbm4nXG4gICAgICArICcgcmF0c2ltcGV4cG9ucyByYXR2YXJzd2l0Y2ggcmF0d2VpZ2h0cyByYXR3ZXlsIHJhdHd0bHZsIHJlYWwgcmVhbG9ubHkgcmVkcmF3J1xuICAgICAgKyAnIHJlZmNoZWNrIHJlc29sdXRpb24gcmVzdGFydCByZXN1bHRhbnQgcmljIHJpZW0gcm14Y2hhciAlcm51bV9saXN0IHJvbWJlcmdhYnMnXG4gICAgICArICcgcm9tYmVyZ2l0IHJvbWJlcmdtaW4gcm9tYmVyZ3RvbCByb290c2Nvbm1vZGUgcm9vdHNlcHNpbG9uIHJ1bl92aWV3ZXIgc2FtZV94eSdcbiAgICAgICsgJyBzYW1lX3h5eiBzYXZlZGVmIHNhdmVmYWN0b3JzIHNjYWxhciBzY2FsYXJtYXRyaXhwIHNjYWxlIHNjYWxlX2xwIHNldGNoZWNrJ1xuICAgICAgKyAnIHNldGNoZWNrYnJlYWsgc2V0dmFsIHNob3dfZWRnZV9jb2xvciBzaG93X2VkZ2VzIHNob3dfZWRnZV90eXBlIHNob3dfZWRnZV93aWR0aCdcbiAgICAgICsgJyBzaG93X2lkIHNob3dfbGFiZWwgc2hvd3RpbWUgc2hvd192ZXJ0ZXhfY29sb3Igc2hvd192ZXJ0ZXhfc2l6ZSBzaG93X3ZlcnRleF90eXBlJ1xuICAgICAgKyAnIHNob3dfdmVydGljZXMgc2hvd193ZWlnaHQgc2ltcCBzaW1wbGlmaWVkX291dHB1dCBzaW1wbGlmeV9wcm9kdWN0cyBzaW1wcHJvZHVjdCdcbiAgICAgICsgJyBzaW1wc3VtIHNpbm5waWZsYWcgc29sdmVkZWNvbXBvc2VzIHNvbHZlZXhwbGljaXQgc29sdmVmYWN0b3JzIHNvbHZlbnVsbHdhcm4nXG4gICAgICArICcgc29sdmVyYWRjYW4gc29sdmV0cmlnd2FybiBzcGFjZSBzcGFyc2Ugc3BoZXJlIHNwcmluZ19lbWJlZGRpbmdfZGVwdGggc3FydGRpc3BmbGFnJ1xuICAgICAgKyAnIHN0YXJkaXNwIHN0YXJ0cGhpIHN0YXJ0dGhldGEgc3RhdHNfbnVtZXIgc3RyaW5nZGlzcCBzdHJ1Y3R1cmVzIHN0eWxlIHN1Ymxpc19hcHBseV9sYW1iZGEnXG4gICAgICArICcgc3VibnVtc2ltcCBzdW1leHBhbmQgc3Vtc3BsaXRmYWN0IHN1cmZhY2Ugc3VyZmFjZV9oaWRlIHN2Z19maWxlIHN5bW1ldHJpYydcbiAgICAgICsgJyB0YWIgdGF5bG9yZGVwdGggdGF5bG9yX2xvZ2V4cGFuZCB0YXlsb3Jfb3JkZXJfY29lZmZpY2llbnRzIHRheWxvcl90cnVuY2F0ZV9wb2x5bm9taWFscydcbiAgICAgICsgJyB0ZW5zb3JraWxsIHRlcm1pbmFsIHRlc3RzdWl0ZV9maWxlcyB0aGV0YXJlc29sdXRpb24gdGltZXJfZGV2YWx1ZSB0aXRsZSB0bGltc3dpdGNoJ1xuICAgICAgKyAnIHRyIHRyYWNrIHRyYW5zY29tcGlsZSB0cmFuc2Zvcm0gdHJhbnNmb3JtX3h5IHRyYW5zbGF0ZV9mYXN0X2FycmF5cyB0cmFuc3BhcmVudCdcbiAgICAgICsgJyB0cmFuc3J1biB0cl9hcnJheV9hc19yZWYgdHJfYm91bmRfZnVuY3Rpb25fYXBwbHlwIHRyX2ZpbGVfdHR5X21lc3NhZ2VzcCB0cl9mbG9hdF9jYW5fYnJhbmNoX2NvbXBsZXgnXG4gICAgICArICcgdHJfZnVuY3Rpb25fY2FsbF9kZWZhdWx0IHRyaWdleHBhbmRwbHVzIHRyaWdleHBhbmR0aW1lcyB0cmlnaW52ZXJzZXMgdHJpZ3NpZ24nXG4gICAgICArICcgdHJpdmlhbF9zb2x1dGlvbnMgdHJfbnVtZXIgdHJfb3B0aW1pemVfbWF4X2xvb3AgdHJfc2VtaWNvbXBpbGUgdHJfc3RhdGVfdmFycydcbiAgICAgICsgJyB0cl93YXJuX2JhZF9mdW5jdGlvbl9jYWxscyB0cl93YXJuX2ZleHByIHRyX3dhcm5fbWV2YWwgdHJfd2Fybl9tb2RlJ1xuICAgICAgKyAnIHRyX3dhcm5fdW5kZWNsYXJlZCB0cl93YXJuX3VuZGVmaW5lZF92YXJpYWJsZSB0c3RlcCB0dHlvZmYgdHViZV9leHRyZW1lcydcbiAgICAgICsgJyB1ZmcgdWcgJXVuaXRleHBhbmQgdW5pdF92ZWN0b3JzIHVyaWMgdXJpZW0gdXNlX2Zhc3RfYXJyYXlzIHVzZXJfcHJlYW1ibGUnXG4gICAgICArICcgdXNlcnNldHVuaXRzIHZhbHVlcyB2ZWN0X2Nyb3NzIHZlcmJvc2UgdmVydGV4X2NvbG9yIHZlcnRleF9jb2xvcmluZyB2ZXJ0ZXhfcGFydGl0aW9uJ1xuICAgICAgKyAnIHZlcnRleF9zaXplIHZlcnRleF90eXBlIHZpZXcgd2FybmluZ3Mgd2V5bCB3aWR0aCB3aW5kb3duYW1lIHdpbmRvd3RpdGxlIHdpcmVkX3N1cmZhY2UnXG4gICAgICArICcgd2lyZWZyYW1lIHhheGlzIHhheGlzX2NvbG9yIHhheGlzX3NlY29uZGFyeSB4YXhpc190eXBlIHhheGlzX3dpZHRoIHhsYWJlbCdcbiAgICAgICsgJyB4bGFiZWxfc2Vjb25kYXJ5IHhsZW5ndGggeHJhbmdlIHhyYW5nZV9zZWNvbmRhcnkgeHRpY3MgeHRpY3NfYXhpcyB4dGljc19yb3RhdGUnXG4gICAgICArICcgeHRpY3Nfcm90YXRlX3NlY29uZGFyeSB4dGljc19zZWNvbmRhcnkgeHRpY3Nfc2Vjb25kYXJ5X2F4aXMgeHVfZ3JpZCB4X3ZveGVsJ1xuICAgICAgKyAnIHh5X2ZpbGUgeHlwbGFuZSB4eV9zY2FsZSB5YXhpcyB5YXhpc19jb2xvciB5YXhpc19zZWNvbmRhcnkgeWF4aXNfdHlwZSB5YXhpc193aWR0aCdcbiAgICAgICsgJyB5bGFiZWwgeWxhYmVsX3NlY29uZGFyeSB5bGVuZ3RoIHlyYW5nZSB5cmFuZ2Vfc2Vjb25kYXJ5IHl0aWNzIHl0aWNzX2F4aXMnXG4gICAgICArICcgeXRpY3Nfcm90YXRlIHl0aWNzX3JvdGF0ZV9zZWNvbmRhcnkgeXRpY3Nfc2Vjb25kYXJ5IHl0aWNzX3NlY29uZGFyeV9heGlzJ1xuICAgICAgKyAnIHl2X2dyaWQgeV92b3hlbCB5eF9yYXRpbyB6YXhpcyB6YXhpc19jb2xvciB6YXhpc190eXBlIHpheGlzX3dpZHRoIHplcm9hIHplcm9iJ1xuICAgICAgKyAnIHplcm9iZXJuIHpldGElcGkgemxhYmVsIHpsYWJlbF9yb3RhdGUgemxlbmd0aCB6bWluIHpuX3ByaW1yb290X2xpbWl0IHpuX3ByaW1yb290X3ByZXRlc3QnO1xuICB2YXIgU1lNQk9MUyA9ICdfIF9fICV8MCAlJXwwJztcblxuICByZXR1cm4ge1xuICAgIGxleGVtZXM6ICdbQS1aYS16XyVdWzAtOUEtWmEtel8lXSonLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiBLRVlXT1JEUyxcbiAgICAgIGxpdGVyYWw6IExJVEVSQUxTLFxuICAgICAgYnVpbHRfaW46IEJVSUxUSU5fRlVOQ1RJT05TLFxuICAgICAgc3ltYm9sOiBTWU1CT0xTLFxuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgICAgIGJlZ2luOiAnL1xcXFwqJyxcbiAgICAgICAgZW5kOiAnXFxcXCovJyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICB9LFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGZsb2F0IG51bWJlciB3LyBleHBvbmVudFxuICAgICAgICAgICAgLy8gaG1tLCBJIHdvbmRlciBpZiB3ZSBvdWdodCB0byBpbmNsdWRlIG90aGVyIGV4cG9uZW50IG1hcmtlcnM/XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKFxcXFxkK3xcXFxcZCtcXFxcLnxcXFxcLlxcXFxkK3xcXFxcZCtcXFxcLlxcXFxkKylbRWVdWy0rXT9cXFxcZCtcXFxcYicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBiaWdmbG9hdCBudW1iZXJcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXGQrfFxcXFxkK1xcXFwufFxcXFwuXFxcXGQrfFxcXFxkK1xcXFwuXFxcXGQrKVtCYl1bLStdP1xcXFxkK1xcXFxiJyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGZsb2F0IG51bWJlciB3L291dCBleHBvbmVudFxuICAgICAgICAgICAgLy8gRG9lc24ndCBzZWVtIHRvIHJlY29nbml6ZSBmbG9hdHMgd2hpY2ggc3RhcnQgd2l0aCAnLidcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoXFxcXC5cXFxcZCt8XFxcXGQrXFxcXC5cXFxcZCspXFxcXGInLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gaW50ZWdlciBpbiBiYXNlIHVwIHRvIDM2XG4gICAgICAgICAgICAvLyBEb2Vzbid0IHNlZW0gdG8gcmVjb2duaXplIGludGVnZXJzIHdoaWNoIGVuZCB3aXRoICcuJ1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcYihcXFxcZCt8MFswLTlBLVphLXpdKylcXFxcLj9cXFxcYicsXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAvQC9cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczpcbiAgICAgICdpbnQgZmxvYXQgc3RyaW5nIHZlY3RvciBtYXRyaXggaWYgZWxzZSBzd2l0Y2ggY2FzZSBkZWZhdWx0IHdoaWxlIGRvIGZvciBpbiBicmVhayAnICtcbiAgICAgICdjb250aW51ZSBnbG9iYWwgcHJvYyByZXR1cm4gYWJvdXQgYWJzIGFkZEF0dHIgYWRkQXR0cmlidXRlRWRpdG9yTm9kZUhlbHAgYWRkRHluYW1pYyAnICtcbiAgICAgICdhZGROZXdTaGVsZlRhYiBhZGRQUCBhZGRQYW5lbENhdGVnb3J5IGFkZFByZWZpeFRvTmFtZSBhZHZhbmNlVG9OZXh0RHJpdmVuS2V5ICcgK1xuICAgICAgJ2FmZmVjdGVkTmV0IGFmZmVjdHMgYWltQ29uc3RyYWludCBhaXIgYWxpYXMgYWxpYXNBdHRyIGFsaWduIGFsaWduQ3R4IGFsaWduQ3VydmUgJyArXG4gICAgICAnYWxpZ25TdXJmYWNlIGFsbFZpZXdGaXQgYW1iaWVudExpZ2h0IGFuZ2xlIGFuZ2xlQmV0d2VlbiBhbmltQ29uZSBhbmltQ3VydmVFZGl0b3IgJyArXG4gICAgICAnYW5pbURpc3BsYXkgYW5pbVZpZXcgYW5ub3RhdGUgYXBwZW5kU3RyaW5nQXJyYXkgYXBwbGljYXRpb25OYW1lIGFwcGx5QXR0clByZXNldCAnICtcbiAgICAgICdhcHBseVRha2UgYXJjTGVuRGltQ29udGV4dCBhcmNMZW5ndGhEaW1lbnNpb24gYXJjbGVuIGFycmF5TWFwcGVyIGFydDNkUGFpbnRDdHggJyArXG4gICAgICAnYXJ0QXR0ckN0eCBhcnRBdHRyUGFpbnRWZXJ0ZXhDdHggYXJ0QXR0clNraW5QYWludEN0eCBhcnRBdHRyVG9vbCBhcnRCdWlsZFBhaW50TWVudSAnICtcbiAgICAgICdhcnRGbHVpZEF0dHJDdHggYXJ0UHV0dHlDdHggYXJ0U2VsZWN0Q3R4IGFydFNldFBhaW50Q3R4IGFydFVzZXJQYWludEN0eCBhc3NpZ25Db21tYW5kICcgK1xuICAgICAgJ2Fzc2lnbklucHV0RGV2aWNlIGFzc2lnblZpZXdwb3J0RmFjdG9yaWVzIGF0dGFjaEN1cnZlIGF0dGFjaERldmljZUF0dHIgYXR0YWNoU3VyZmFjZSAnICtcbiAgICAgICdhdHRyQ29sb3JTbGlkZXJHcnAgYXR0ckNvbXBhdGliaWxpdHkgYXR0ckNvbnRyb2xHcnAgYXR0ckVudW1PcHRpb25NZW51ICcgK1xuICAgICAgJ2F0dHJFbnVtT3B0aW9uTWVudUdycCBhdHRyRmllbGRHcnAgYXR0ckZpZWxkU2xpZGVyR3JwIGF0dHJOYXZpZ2F0aW9uQ29udHJvbEdycCAnICtcbiAgICAgICdhdHRyUHJlc2V0RWRpdFdpbiBhdHRyaWJ1dGVFeGlzdHMgYXR0cmlidXRlSW5mbyBhdHRyaWJ1dGVNZW51IGF0dHJpYnV0ZVF1ZXJ5ICcgK1xuICAgICAgJ2F1dG9LZXlmcmFtZSBhdXRvUGxhY2UgYmFrZUNsaXAgYmFrZUZsdWlkU2hhZGluZyBiYWtlUGFydGlhbEhpc3RvcnkgYmFrZVJlc3VsdHMgJyArXG4gICAgICAnYmFrZVNpbXVsYXRpb24gYmFzZW5hbWUgYmFzZW5hbWVFeCBiYXRjaFJlbmRlciBiZXNzZWwgYmV2ZWwgYmV2ZWxQbHVzIGJpbk1lbWJlcnNoaXAgJyArXG4gICAgICAnYmluZFNraW4gYmxlbmQyIGJsZW5kU2hhcGUgYmxlbmRTaGFwZUVkaXRvciBibGVuZFNoYXBlUGFuZWwgYmxlbmRUd29BdHRyIGJsaW5kRGF0YVR5cGUgJyArXG4gICAgICAnYm9uZUxhdHRpY2UgYm91bmRhcnkgYm94RG9sbHlDdHggYm94Wm9vbUN0eCBidWZmZXJDdXJ2ZSBidWlsZEJvb2ttYXJrTWVudSAnICtcbiAgICAgICdidWlsZEtleWZyYW1lTWVudSBidXR0b24gYnV0dG9uTWFuaXAgQ0JHIGNhY2hlRmlsZSBjYWNoZUZpbGVDb21iaW5lIGNhY2hlRmlsZU1lcmdlICcgK1xuICAgICAgJ2NhY2hlRmlsZVRyYWNrIGNhbWVyYSBjYW1lcmFWaWV3IGNhbkNyZWF0ZU1hbmlwIGNhbnZhcyBjYXBpdGFsaXplU3RyaW5nIGNhdGNoICcgK1xuICAgICAgJ2NhdGNoUXVpZXQgY2VpbCBjaGFuZ2VTdWJkaXZDb21wb25lbnREaXNwbGF5TGV2ZWwgY2hhbmdlU3ViZGl2UmVnaW9uIGNoYW5uZWxCb3ggJyArXG4gICAgICAnY2hhcmFjdGVyIGNoYXJhY3Rlck1hcCBjaGFyYWN0ZXJPdXRsaW5lRWRpdG9yIGNoYXJhY3Rlcml6ZSBjaGRpciBjaGVja0JveCBjaGVja0JveEdycCAnICtcbiAgICAgICdjaGVja0RlZmF1bHRSZW5kZXJHbG9iYWxzIGNob2ljZSBjaXJjbGUgY2lyY3VsYXJGaWxsZXQgY2xhbXAgY2xlYXIgY2xlYXJDYWNoZSBjbGlwICcgK1xuICAgICAgJ2NsaXBFZGl0b3IgY2xpcEVkaXRvckN1cnJlbnRUaW1lQ3R4IGNsaXBTY2hlZHVsZSBjbGlwU2NoZWR1bGVyT3V0bGluZXIgY2xpcFRyaW1CZWZvcmUgJyArXG4gICAgICAnY2xvc2VDdXJ2ZSBjbG9zZVN1cmZhY2UgY2x1c3RlciBjbWRGaWxlT3V0cHV0IGNtZFNjcm9sbEZpZWxkRXhlY3V0ZXIgJyArXG4gICAgICAnY21kU2Nyb2xsRmllbGRSZXBvcnRlciBjbWRTaGVsbCBjb2Fyc2VuU3ViZGl2U2VsZWN0aW9uTGlzdCBjb2xsaXNpb24gY29sb3IgJyArXG4gICAgICAnY29sb3JBdFBvaW50IGNvbG9yRWRpdG9yIGNvbG9ySW5kZXggY29sb3JJbmRleFNsaWRlckdycCBjb2xvclNsaWRlckJ1dHRvbkdycCAnICtcbiAgICAgICdjb2xvclNsaWRlckdycCBjb2x1bW5MYXlvdXQgY29tbWFuZEVjaG8gY29tbWFuZExpbmUgY29tbWFuZFBvcnQgY29tcGFjdEhhaXJTeXN0ZW0gJyArXG4gICAgICAnY29tcG9uZW50RWRpdG9yIGNvbXBvc2l0aW5nSW50ZXJvcCBjb21wdXRlUG9seXNldFZvbHVtZSBjb25kaXRpb24gY29uZSBjb25maXJtRGlhbG9nICcgK1xuICAgICAgJ2Nvbm5lY3RBdHRyIGNvbm5lY3RDb250cm9sIGNvbm5lY3REeW5hbWljIGNvbm5lY3RKb2ludCBjb25uZWN0aW9uSW5mbyBjb25zdHJhaW4gJyArXG4gICAgICAnY29uc3RyYWluVmFsdWUgY29uc3RydWN0aW9uSGlzdG9yeSBjb250YWluZXIgY29udGFpbnNNdWx0aWJ5dGUgY29udGV4dEluZm8gY29udHJvbCAnICtcbiAgICAgICdjb252ZXJ0RnJvbU9sZExheWVycyBjb252ZXJ0SWZmVG9Qc2QgY29udmVydExpZ2h0bWFwIGNvbnZlcnRTb2xpZFR4IGNvbnZlcnRUZXNzZWxsYXRpb24gJyArXG4gICAgICAnY29udmVydFVuaXQgY29weUFycmF5IGNvcHlGbGV4b3IgY29weUtleSBjb3B5U2tpbldlaWdodHMgY29zIGNwQnV0dG9uIGNwQ2FjaGUgJyArXG4gICAgICAnY3BDbG90aFNldCBjcENvbGxpc2lvbiBjcENvbnN0cmFpbnQgY3BDb252Q2xvdGhUb01lc2ggY3BGb3JjZXMgY3BHZXRTb2x2ZXJBdHRyIGNwUGFuZWwgJyArXG4gICAgICAnY3BQcm9wZXJ0eSBjcFJpZ2lkQ29sbGlzaW9uRmlsdGVyIGNwU2VhbSBjcFNldEVkaXQgY3BTZXRTb2x2ZXJBdHRyIGNwU29sdmVyICcgK1xuICAgICAgJ2NwU29sdmVyVHlwZXMgY3BUb29sIGNwVXBkYXRlQ2xvdGhVVnMgY3JlYXRlRGlzcGxheUxheWVyIGNyZWF0ZURyYXdDdHggY3JlYXRlRWRpdG9yICcgK1xuICAgICAgJ2NyZWF0ZUxheWVyZWRQc2RGaWxlIGNyZWF0ZU1vdGlvbkZpZWxkIGNyZWF0ZU5ld1NoZWxmIGNyZWF0ZU5vZGUgY3JlYXRlUmVuZGVyTGF5ZXIgJyArXG4gICAgICAnY3JlYXRlU3ViZGl2UmVnaW9uIGNyb3NzIGNyb3NzUHJvZHVjdCBjdHhBYm9ydCBjdHhDb21wbGV0aW9uIGN0eEVkaXRNb2RlIGN0eFRyYXZlcnNlICcgK1xuICAgICAgJ2N1cnJlbnRDdHggY3VycmVudFRpbWUgY3VycmVudFRpbWVDdHggY3VycmVudFVuaXQgY3VydmUgY3VydmVBZGRQdEN0eCAnICtcbiAgICAgICdjdXJ2ZUNWQ3R4IGN1cnZlRVBDdHggY3VydmVFZGl0b3JDdHggY3VydmVJbnRlcnNlY3QgY3VydmVNb3ZlRVBDdHggY3VydmVPblN1cmZhY2UgJyArXG4gICAgICAnY3VydmVTa2V0Y2hDdHggY3V0S2V5IGN5Y2xlQ2hlY2sgY3lsaW5kZXIgZGFnUG9zZSBkYXRlIGRlZmF1bHRMaWdodExpc3RDaGVja0JveCAnICtcbiAgICAgICdkZWZhdWx0TmF2aWdhdGlvbiBkZWZpbmVEYXRhU2VydmVyIGRlZmluZVZpcnR1YWxEZXZpY2UgZGVmb3JtZXIgZGVnX3RvX3JhZCBkZWxldGUgJyArXG4gICAgICAnZGVsZXRlQXR0ciBkZWxldGVTaGFkaW5nR3JvdXBzQW5kTWF0ZXJpYWxzIGRlbGV0ZVNoZWxmVGFiIGRlbGV0ZVVJIGRlbGV0ZVVudXNlZEJydXNoZXMgJyArXG4gICAgICAnZGVscmFuZHN0ciBkZXRhY2hDdXJ2ZSBkZXRhY2hEZXZpY2VBdHRyIGRldGFjaFN1cmZhY2UgZGV2aWNlRWRpdG9yIGRldmljZVBhbmVsIGRnSW5mbyAnICtcbiAgICAgICdkZ2RpcnR5IGRnZXZhbCBkZ3RpbWVyIGRpbVdoZW4gZGlyZWN0S2V5Q3R4IGRpcmVjdGlvbmFsTGlnaHQgZGlybWFwIGRpcm5hbWUgZGlzYWJsZSAnICtcbiAgICAgICdkaXNjb25uZWN0QXR0ciBkaXNjb25uZWN0Sm9pbnQgZGlza0NhY2hlIGRpc3BsYWNlbWVudFRvUG9seSBkaXNwbGF5QWZmZWN0ZWQgJyArXG4gICAgICAnZGlzcGxheUNvbG9yIGRpc3BsYXlDdWxsIGRpc3BsYXlMZXZlbE9mRGV0YWlsIGRpc3BsYXlQcmVmIGRpc3BsYXlSR0JDb2xvciAnICtcbiAgICAgICdkaXNwbGF5U21vb3RobmVzcyBkaXNwbGF5U3RhdHMgZGlzcGxheVN0cmluZyBkaXNwbGF5U3VyZmFjZSBkaXN0YW5jZURpbUNvbnRleHQgJyArXG4gICAgICAnZGlzdGFuY2VEaW1lbnNpb24gZG9CbHVyIGRvbGx5IGRvbGx5Q3R4IGRvcGVTaGVldEVkaXRvciBkb3QgZG90UHJvZHVjdCAnICtcbiAgICAgICdkb3VibGVQcm9maWxlQmlyYWlsU3VyZmFjZSBkcmFnIGRyYWdBdHRyQ29udGV4dCBkcmFnZ2VyQ29udGV4dCBkcm9wb2ZmTG9jYXRvciAnICtcbiAgICAgICdkdXBsaWNhdGUgZHVwbGljYXRlQ3VydmUgZHVwbGljYXRlU3VyZmFjZSBkeW5DYWNoZSBkeW5Db250cm9sIGR5bkV4cG9ydCBkeW5FeHByZXNzaW9uICcgK1xuICAgICAgJ2R5bkdsb2JhbHMgZHluUGFpbnRFZGl0b3IgZHluUGFydGljbGVDdHggZHluUHJlZiBkeW5SZWxFZFBhbmVsIGR5blJlbEVkaXRvciAnICtcbiAgICAgICdkeW5hbWljTG9hZCBlZGl0QXR0ckxpbWl0cyBlZGl0RGlzcGxheUxheWVyR2xvYmFscyBlZGl0RGlzcGxheUxheWVyTWVtYmVycyAnICtcbiAgICAgICdlZGl0UmVuZGVyTGF5ZXJBZGp1c3RtZW50IGVkaXRSZW5kZXJMYXllckdsb2JhbHMgZWRpdFJlbmRlckxheWVyTWVtYmVycyBlZGl0b3IgJyArXG4gICAgICAnZWRpdG9yVGVtcGxhdGUgZWZmZWN0b3IgZW1pdCBlbWl0dGVyIGVuYWJsZURldmljZSBlbmNvZGVTdHJpbmcgZW5kU3RyaW5nIGVuZHNXaXRoIGVudiAnICtcbiAgICAgICdlcXVpdmFsZW50IGVxdWl2YWxlbnRUb2wgZXJmIGVycm9yIGV2YWwgZXZhbERlZmVycmVkIGV2YWxFY2hvIGV2ZW50ICcgK1xuICAgICAgJ2V4YWN0V29ybGRCb3VuZGluZ0JveCBleGNsdXNpdmVMaWdodENoZWNrQm94IGV4ZWMgZXhlY3V0ZUZvckVhY2hPYmplY3QgZXhpc3RzIGV4cCAnICtcbiAgICAgICdleHByZXNzaW9uIGV4cHJlc3Npb25FZGl0b3JMaXN0ZW4gZXh0ZW5kQ3VydmUgZXh0ZW5kU3VyZmFjZSBleHRydWRlIGZjaGVjayBmY2xvc2UgZmVvZiAnICtcbiAgICAgICdmZmx1c2ggZmdldGxpbmUgZmdldHdvcmQgZmlsZSBmaWxlQnJvd3NlckRpYWxvZyBmaWxlRGlhbG9nIGZpbGVFeHRlbnNpb24gZmlsZUluZm8gJyArXG4gICAgICAnZmlsZXRlc3QgZmlsbGV0Q3VydmUgZmlsdGVyIGZpbHRlckN1cnZlIGZpbHRlckV4cGFuZCBmaWx0ZXJTdHVkaW9JbXBvcnQgJyArXG4gICAgICAnZmluZEFsbEludGVyc2VjdGlvbnMgZmluZEFuaW1DdXJ2ZXMgZmluZEtleWZyYW1lIGZpbmRNZW51SXRlbSBmaW5kUmVsYXRlZFNraW5DbHVzdGVyICcgK1xuICAgICAgJ2ZpbmRlciBmaXJzdFBhcmVudE9mIGZpdEJzcGxpbmUgZmxleG9yIGZsb2F0RXEgZmxvYXRGaWVsZCBmbG9hdEZpZWxkR3JwIGZsb2F0U2Nyb2xsQmFyICcgK1xuICAgICAgJ2Zsb2F0U2xpZGVyIGZsb2F0U2xpZGVyMiBmbG9hdFNsaWRlckJ1dHRvbkdycCBmbG9hdFNsaWRlckdycCBmbG9vciBmbG93IGZsdWlkQ2FjaGVJbmZvICcgK1xuICAgICAgJ2ZsdWlkRW1pdHRlciBmbHVpZFZveGVsSW5mbyBmbHVzaFVuZG8gZm1vZCBmb250RGlhbG9nIGZvcGVuIGZvcm1MYXlvdXQgZm9ybWF0IGZwcmludCAnICtcbiAgICAgICdmcmFtZUxheW91dCBmcmVhZCBmcmVlRm9ybUZpbGxldCBmcmV3aW5kIGZyb21OYXRpdmVQYXRoIGZ3cml0ZSBnYW1tYSBnYXVzcyAnICtcbiAgICAgICdnZW9tZXRyeUNvbnN0cmFpbnQgZ2V0QXBwbGljYXRpb25WZXJzaW9uQXNGbG9hdCBnZXRBdHRyIGdldENsYXNzaWZpY2F0aW9uICcgK1xuICAgICAgJ2dldERlZmF1bHRCcnVzaCBnZXRGaWxlTGlzdCBnZXRGbHVpZEF0dHIgZ2V0SW5wdXREZXZpY2VSYW5nZSBnZXRNYXlhUGFuZWxUeXBlcyAnICtcbiAgICAgICdnZXRNb2RpZmllcnMgZ2V0UGFuZWwgZ2V0UGFydGljbGVBdHRyIGdldFBsdWdpblJlc291cmNlIGdldGVudiBnZXRwaWQgZ2xSZW5kZXIgJyArXG4gICAgICAnZ2xSZW5kZXJFZGl0b3IgZ2xvYmFsU3RpdGNoIGdtYXRjaCBnb2FsIGdvdG9CaW5kUG9zZSBncmFiQ29sb3IgZ3JhZGllbnRDb250cm9sICcgK1xuICAgICAgJ2dyYWRpZW50Q29udHJvbE5vQXR0ciBncmFwaERvbGx5Q3R4IGdyYXBoU2VsZWN0Q29udGV4dCBncmFwaFRyYWNrQ3R4IGdyYXZpdHkgZ3JpZCAnICtcbiAgICAgICdncmlkTGF5b3V0IGdyb3VwIGdyb3VwT2JqZWN0c0J5TmFtZSBIZkFkZEF0dHJhY3RvclRvQVMgSGZBc3NpZ25BUyBIZkJ1aWxkRXF1YWxNYXAgJyArXG4gICAgICAnSGZCdWlsZEZ1ckZpbGVzIEhmQnVpbGRGdXJJbWFnZXMgSGZDYW5jZWxBRlIgSGZDb25uZWN0QVNUb0hGIEhmQ3JlYXRlQXR0cmFjdG9yICcgK1xuICAgICAgJ0hmRGVsZXRlQVMgSGZFZGl0QVMgSGZQZXJmb3JtQ3JlYXRlQVMgSGZSZW1vdmVBdHRyYWN0b3JGcm9tQVMgSGZTZWxlY3RBdHRhY2hlZCAnICtcbiAgICAgICdIZlNlbGVjdEF0dHJhY3RvcnMgSGZVbkFzc2lnbkFTIGhhcmRlblBvaW50Q3VydmUgaGFyZHdhcmUgaGFyZHdhcmVSZW5kZXJQYW5lbCAnICtcbiAgICAgICdoZWFkc1VwRGlzcGxheSBoZWFkc1VwTWVzc2FnZSBoZWxwIGhlbHBMaW5lIGhlcm1pdGUgaGlkZSBoaWxpdGUgaGl0VGVzdCBob3RCb3ggaG90a2V5ICcgK1xuICAgICAgJ2hvdGtleUNoZWNrIGhzdl90b19yZ2IgaHVkQnV0dG9uIGh1ZFNsaWRlciBodWRTbGlkZXJCdXR0b24gaHdSZWZsZWN0aW9uTWFwIGh3UmVuZGVyICcgK1xuICAgICAgJ2h3UmVuZGVyTG9hZCBoeXBlckdyYXBoIGh5cGVyUGFuZWwgaHlwZXJTaGFkZSBoeXBvdCBpY29uVGV4dEJ1dHRvbiBpY29uVGV4dENoZWNrQm94ICcgK1xuICAgICAgJ2ljb25UZXh0UmFkaW9CdXR0b24gaWNvblRleHRSYWRpb0NvbGxlY3Rpb24gaWNvblRleHRTY3JvbGxMaXN0IGljb25UZXh0U3RhdGljTGFiZWwgJyArXG4gICAgICAnaWtIYW5kbGUgaWtIYW5kbGVDdHggaWtIYW5kbGVEaXNwbGF5U2NhbGUgaWtTb2x2ZXIgaWtTcGxpbmVIYW5kbGVDdHggaWtTeXN0ZW0gJyArXG4gICAgICAnaWtTeXN0ZW1JbmZvIGlrZmtEaXNwbGF5TWV0aG9kIGlsbHVzdHJhdG9yQ3VydmVzIGltYWdlIGltZlBsdWdpbnMgaW5oZXJpdFRyYW5zZm9ybSAnICtcbiAgICAgICdpbnNlcnRKb2ludCBpbnNlcnRKb2ludEN0eCBpbnNlcnRLZXlDdHggaW5zZXJ0S25vdEN1cnZlIGluc2VydEtub3RTdXJmYWNlIGluc3RhbmNlICcgK1xuICAgICAgJ2luc3RhbmNlYWJsZSBpbnN0YW5jZXIgaW50RmllbGQgaW50RmllbGRHcnAgaW50U2Nyb2xsQmFyIGludFNsaWRlciBpbnRTbGlkZXJHcnAgJyArXG4gICAgICAnaW50ZXJUb1VJIGludGVybmFsVmFyIGludGVyc2VjdCBpcHJFbmdpbmUgaXNBbmltQ3VydmUgaXNDb25uZWN0ZWQgaXNEaXJ0eSBpc1BhcmVudE9mICcgK1xuICAgICAgJ2lzU2FtZU9iamVjdCBpc1RydWUgaXNWYWxpZE9iamVjdE5hbWUgaXNWYWxpZFN0cmluZyBpc1ZhbGlkVWlOYW1lIGlzb2xhdGVTZWxlY3QgJyArXG4gICAgICAnaXRlbUZpbHRlciBpdGVtRmlsdGVyQXR0ciBpdGVtRmlsdGVyUmVuZGVyIGl0ZW1GaWx0ZXJUeXBlIGpvaW50IGpvaW50Q2x1c3RlciBqb2ludEN0eCAnICtcbiAgICAgICdqb2ludERpc3BsYXlTY2FsZSBqb2ludExhdHRpY2Uga2V5VGFuZ2VudCBrZXlmcmFtZSBrZXlmcmFtZU91dGxpbmVyICcgK1xuICAgICAgJ2tleWZyYW1lUmVnaW9uQ3VycmVudFRpbWVDdHgga2V5ZnJhbWVSZWdpb25EaXJlY3RLZXlDdHgga2V5ZnJhbWVSZWdpb25Eb2xseUN0eCAnICtcbiAgICAgICdrZXlmcmFtZVJlZ2lvbkluc2VydEtleUN0eCBrZXlmcmFtZVJlZ2lvbk1vdmVLZXlDdHgga2V5ZnJhbWVSZWdpb25TY2FsZUtleUN0eCAnICtcbiAgICAgICdrZXlmcmFtZVJlZ2lvblNlbGVjdEtleUN0eCBrZXlmcmFtZVJlZ2lvblNldEtleUN0eCBrZXlmcmFtZVJlZ2lvblRyYWNrQ3R4ICcgK1xuICAgICAgJ2tleWZyYW1lU3RhdHMgbGFzc29Db250ZXh0IGxhdHRpY2UgbGF0dGljZURlZm9ybUtleUN0eCBsYXVuY2ggbGF1bmNoSW1hZ2VFZGl0b3IgJyArXG4gICAgICAnbGF5ZXJCdXR0b24gbGF5ZXJlZFNoYWRlclBvcnQgbGF5ZXJlZFRleHR1cmVQb3J0IGxheW91dCBsYXlvdXREaWFsb2cgbGlnaHRMaXN0ICcgK1xuICAgICAgJ2xpZ2h0TGlzdEVkaXRvciBsaWdodExpc3RQYW5lbCBsaWdodGxpbmsgbGluZUludGVyc2VjdGlvbiBsaW5lYXJQcmVjaXNpb24gbGluc3RlcCAnICtcbiAgICAgICdsaXN0QW5pbWF0YWJsZSBsaXN0QXR0ciBsaXN0Q2FtZXJhcyBsaXN0Q29ubmVjdGlvbnMgbGlzdERldmljZUF0dGFjaG1lbnRzIGxpc3RIaXN0b3J5ICcgK1xuICAgICAgJ2xpc3RJbnB1dERldmljZUF4ZXMgbGlzdElucHV0RGV2aWNlQnV0dG9ucyBsaXN0SW5wdXREZXZpY2VzIGxpc3RNZW51QW5ub3RhdGlvbiAnICtcbiAgICAgICdsaXN0Tm9kZVR5cGVzIGxpc3RQYW5lbENhdGVnb3JpZXMgbGlzdFJlbGF0aXZlcyBsaXN0U2V0cyBsaXN0VHJhbnNmb3JtcyAnICtcbiAgICAgICdsaXN0VW5zZWxlY3RlZCBsaXN0ZXJFZGl0b3IgbG9hZEZsdWlkIGxvYWROZXdTaGVsZiBsb2FkUGx1Z2luICcgK1xuICAgICAgJ2xvYWRQbHVnaW5MYW5ndWFnZVJlc291cmNlcyBsb2FkUHJlZk9iamVjdHMgbG9jYWxpemVkUGFuZWxMYWJlbCBsb2NrTm9kZSBsb2Z0IGxvZyAnICtcbiAgICAgICdsb25nTmFtZU9mIGxvb2tUaHJ1IGxzIGxzVGhyb3VnaEZpbHRlciBsc1R5cGUgbHNVSSBNYXlhdG9tciBtYWcgbWFrZUlkZW50aXR5IG1ha2VMaXZlICcgK1xuICAgICAgJ21ha2VQYWludGFibGUgbWFrZVJvbGwgbWFrZVNpbmdsZVN1cmZhY2UgbWFrZVR1YmVPbiBtYWtlYm90IG1hbmlwTW92ZUNvbnRleHQgJyArXG4gICAgICAnbWFuaXBNb3ZlTGltaXRzQ3R4IG1hbmlwT3B0aW9ucyBtYW5pcFJvdGF0ZUNvbnRleHQgbWFuaXBSb3RhdGVMaW1pdHNDdHggJyArXG4gICAgICAnbWFuaXBTY2FsZUNvbnRleHQgbWFuaXBTY2FsZUxpbWl0c0N0eCBtYXJrZXIgbWF0Y2ggbWF4IG1lbW9yeSBtZW51IG1lbnVCYXJMYXlvdXQgJyArXG4gICAgICAnbWVudUVkaXRvciBtZW51SXRlbSBtZW51SXRlbVRvU2hlbGYgbWVudVNldCBtZW51U2V0UHJlZiBtZXNzYWdlTGluZSBtaW4gbWluaW1pemVBcHAgJyArXG4gICAgICAnbWlycm9ySm9pbnQgbW9kZWxDdXJyZW50VGltZUN0eCBtb2RlbEVkaXRvciBtb2RlbFBhbmVsIG1vdXNlIG1vdkluIG1vdk91dCBtb3ZlICcgK1xuICAgICAgJ21vdmVJS3RvRksgbW92ZUtleUN0eCBtb3ZlVmVydGV4QWxvbmdEaXJlY3Rpb24gbXVsdGlQcm9maWxlQmlyYWlsU3VyZmFjZSBtdXRlICcgK1xuICAgICAgJ25QYXJ0aWNsZSBuYW1lQ29tbWFuZCBuYW1lRmllbGQgbmFtZXNwYWNlIG5hbWVzcGFjZUluZm8gbmV3UGFuZWxJdGVtcyBuZXd0b24gbm9kZUNhc3QgJyArXG4gICAgICAnbm9kZUljb25CdXR0b24gbm9kZU91dGxpbmVyIG5vZGVQcmVzZXQgbm9kZVR5cGUgbm9pc2Ugbm9uTGluZWFyIG5vcm1hbENvbnN0cmFpbnQgJyArXG4gICAgICAnbm9ybWFsaXplIG51cmJzQm9vbGVhbiBudXJic0NvcHlVVlNldCBudXJic0N1YmUgbnVyYnNFZGl0VVYgbnVyYnNQbGFuZSBudXJic1NlbGVjdCAnICtcbiAgICAgICdudXJic1NxdWFyZSBudXJic1RvUG9seSBudXJic1RvUG9seWdvbnNQcmVmIG51cmJzVG9TdWJkaXYgbnVyYnNUb1N1YmRpdlByZWYgJyArXG4gICAgICAnbnVyYnNVVlNldCBudXJic1ZpZXdEaXJlY3Rpb25WZWN0b3Igb2JqRXhpc3RzIG9iamVjdENlbnRlciBvYmplY3RMYXllciBvYmplY3RUeXBlICcgK1xuICAgICAgJ29iamVjdFR5cGVVSSBvYnNvbGV0ZVByb2Mgb2NlYW5OdXJic1ByZXZpZXdQbGFuZSBvZmZzZXRDdXJ2ZSBvZmZzZXRDdXJ2ZU9uU3VyZmFjZSAnICtcbiAgICAgICdvZmZzZXRTdXJmYWNlIG9wZW5HTEV4dGVuc2lvbiBvcGVuTWF5YVByZWYgb3B0aW9uTWVudSBvcHRpb25NZW51R3JwIG9wdGlvblZhciBvcmJpdCAnICtcbiAgICAgICdvcmJpdEN0eCBvcmllbnRDb25zdHJhaW50IG91dGxpbmVyRWRpdG9yIG91dGxpbmVyUGFuZWwgb3ZlcnJpZGVNb2RpZmllciAnICtcbiAgICAgICdwYWludEVmZmVjdHNEaXNwbGF5IHBhaXJCbGVuZCBwYWxldHRlUG9ydCBwYW5lTGF5b3V0IHBhbmVsIHBhbmVsQ29uZmlndXJhdGlvbiAnICtcbiAgICAgICdwYW5lbEhpc3RvcnkgcGFyYW1EaW1Db250ZXh0IHBhcmFtRGltZW5zaW9uIHBhcmFtTG9jYXRvciBwYXJlbnQgcGFyZW50Q29uc3RyYWludCAnICtcbiAgICAgICdwYXJ0aWNsZSBwYXJ0aWNsZUV4aXN0cyBwYXJ0aWNsZUluc3RhbmNlciBwYXJ0aWNsZVJlbmRlckluZm8gcGFydGl0aW9uIHBhc3RlS2V5ICcgK1xuICAgICAgJ3BhdGhBbmltYXRpb24gcGF1c2UgcGNsb3NlIHBlcmNlbnQgcGVyZm9ybWFuY2VPcHRpb25zIHBmeHN0cm9rZXMgcGlja1dhbGsgcGljdHVyZSAnICtcbiAgICAgICdwaXhlbE1vdmUgcGxhbmFyU3JmIHBsYW5lIHBsYXkgcGxheWJhY2tPcHRpb25zIHBsYXlibGFzdCBwbHVnQXR0ciBwbHVnTm9kZSBwbHVnaW5JbmZvICcgK1xuICAgICAgJ3BsdWdpblJlc291cmNlVXRpbCBwb2ludENvbnN0cmFpbnQgcG9pbnRDdXJ2ZUNvbnN0cmFpbnQgcG9pbnRMaWdodCBwb2ludE1hdHJpeE11bHQgJyArXG4gICAgICAncG9pbnRPbkN1cnZlIHBvaW50T25TdXJmYWNlIHBvaW50UG9zaXRpb24gcG9sZVZlY3RvckNvbnN0cmFpbnQgcG9seUFwcGVuZCAnICtcbiAgICAgICdwb2x5QXBwZW5kRmFjZXRDdHggcG9seUFwcGVuZFZlcnRleCBwb2x5QXV0b1Byb2plY3Rpb24gcG9seUF2ZXJhZ2VOb3JtYWwgJyArXG4gICAgICAncG9seUF2ZXJhZ2VWZXJ0ZXggcG9seUJldmVsIHBvbHlCbGVuZENvbG9yIHBvbHlCbGluZERhdGEgcG9seUJvb2xPcCBwb2x5QnJpZGdlRWRnZSAnICtcbiAgICAgICdwb2x5Q2FjaGVNb25pdG9yIHBvbHlDaGVjayBwb2x5Q2hpcE9mZiBwb2x5Q2xpcGJvYXJkIHBvbHlDbG9zZUJvcmRlciBwb2x5Q29sbGFwc2VFZGdlICcgK1xuICAgICAgJ3BvbHlDb2xsYXBzZUZhY2V0IHBvbHlDb2xvckJsaW5kRGF0YSBwb2x5Q29sb3JEZWwgcG9seUNvbG9yUGVyVmVydGV4IHBvbHlDb2xvclNldCAnICtcbiAgICAgICdwb2x5Q29tcGFyZSBwb2x5Q29uZSBwb2x5Q29weVVWIHBvbHlDcmVhc2UgcG9seUNyZWFzZUN0eCBwb2x5Q3JlYXRlRmFjZXQgJyArXG4gICAgICAncG9seUNyZWF0ZUZhY2V0Q3R4IHBvbHlDdWJlIHBvbHlDdXQgcG9seUN1dEN0eCBwb2x5Q3lsaW5kZXIgcG9seUN5bGluZHJpY2FsUHJvamVjdGlvbiAnICtcbiAgICAgICdwb2x5RGVsRWRnZSBwb2x5RGVsRmFjZXQgcG9seURlbFZlcnRleCBwb2x5RHVwbGljYXRlQW5kQ29ubmVjdCBwb2x5RHVwbGljYXRlRWRnZSAnICtcbiAgICAgICdwb2x5RWRpdFVWIHBvbHlFZGl0VVZTaGVsbCBwb2x5RXZhbHVhdGUgcG9seUV4dHJ1ZGVFZGdlIHBvbHlFeHRydWRlRmFjZXQgJyArXG4gICAgICAncG9seUV4dHJ1ZGVWZXJ0ZXggcG9seUZsaXBFZGdlIHBvbHlGbGlwVVYgcG9seUZvcmNlVVYgcG9seUdlb1NhbXBsZXIgcG9seUhlbGl4ICcgK1xuICAgICAgJ3BvbHlJbmZvIHBvbHlJbnN0YWxsQWN0aW9uIHBvbHlMYXlvdXRVViBwb2x5TGlzdENvbXBvbmVudENvbnZlcnNpb24gcG9seU1hcEN1dCAnICtcbiAgICAgICdwb2x5TWFwRGVsIHBvbHlNYXBTZXcgcG9seU1hcFNld01vdmUgcG9seU1lcmdlRWRnZSBwb2x5TWVyZ2VFZGdlQ3R4IHBvbHlNZXJnZUZhY2V0ICcgK1xuICAgICAgJ3BvbHlNZXJnZUZhY2V0Q3R4IHBvbHlNZXJnZVVWIHBvbHlNZXJnZVZlcnRleCBwb2x5TWlycm9yRmFjZSBwb2x5TW92ZUVkZ2UgJyArXG4gICAgICAncG9seU1vdmVGYWNldCBwb2x5TW92ZUZhY2V0VVYgcG9seU1vdmVVViBwb2x5TW92ZVZlcnRleCBwb2x5Tm9ybWFsIHBvbHlOb3JtYWxQZXJWZXJ0ZXggJyArXG4gICAgICAncG9seU5vcm1hbGl6ZVVWIHBvbHlPcHRVdnMgcG9seU9wdGlvbnMgcG9seU91dHB1dCBwb2x5UGlwZSBwb2x5UGxhbmFyUHJvamVjdGlvbiAnICtcbiAgICAgICdwb2x5UGxhbmUgcG9seVBsYXRvbmljU29saWQgcG9seVBva2UgcG9seVByaW1pdGl2ZSBwb2x5UHJpc20gcG9seVByb2plY3Rpb24gJyArXG4gICAgICAncG9seVB5cmFtaWQgcG9seVF1YWQgcG9seVF1ZXJ5QmxpbmREYXRhIHBvbHlSZWR1Y2UgcG9seVNlbGVjdCBwb2x5U2VsZWN0Q29uc3RyYWludCAnICtcbiAgICAgICdwb2x5U2VsZWN0Q29uc3RyYWludE1vbml0b3IgcG9seVNlbGVjdEN0eCBwb2x5U2VsZWN0RWRpdEN0eCBwb2x5U2VwYXJhdGUgJyArXG4gICAgICAncG9seVNldFRvRmFjZU5vcm1hbCBwb2x5U2V3RWRnZSBwb2x5U2hvcnRlc3RQYXRoQ3R4IHBvbHlTbW9vdGggcG9seVNvZnRFZGdlICcgK1xuICAgICAgJ3BvbHlTcGhlcmUgcG9seVNwaGVyaWNhbFByb2plY3Rpb24gcG9seVNwbGl0IHBvbHlTcGxpdEN0eCBwb2x5U3BsaXRFZGdlIHBvbHlTcGxpdFJpbmcgJyArXG4gICAgICAncG9seVNwbGl0VmVydGV4IHBvbHlTdHJhaWdodGVuVVZCb3JkZXIgcG9seVN1YmRpdmlkZUVkZ2UgcG9seVN1YmRpdmlkZUZhY2V0ICcgK1xuICAgICAgJ3BvbHlUb1N1YmRpdiBwb2x5VG9ydXMgcG9seVRyYW5zZmVyIHBvbHlUcmlhbmd1bGF0ZSBwb2x5VVZTZXQgcG9seVVuaXRlIHBvbHlXZWRnZUZhY2UgJyArXG4gICAgICAncG9wZW4gcG9wdXBNZW51IHBvc2UgcG93IHByZWxvYWRSZWZFZCBwcmludCBwcm9ncmVzc0JhciBwcm9ncmVzc1dpbmRvdyBwcm9qRmlsZVZpZXdlciAnICtcbiAgICAgICdwcm9qZWN0Q3VydmUgcHJvamVjdFRhbmdlbnQgcHJvamVjdGlvbkNvbnRleHQgcHJvamVjdGlvbk1hbmlwIHByb21wdERpYWxvZyBwcm9wTW9kQ3R4ICcgK1xuICAgICAgJ3Byb3BNb3ZlIHBzZENoYW5uZWxPdXRsaW5lciBwc2RFZGl0VGV4dHVyZUZpbGUgcHNkRXhwb3J0IHBzZFRleHR1cmVGaWxlIHB1dGVudiBwd2QgJyArXG4gICAgICAncHl0aG9uIHF1ZXJ5U3ViZGl2IHF1aXQgcmFkX3RvX2RlZyByYWRpYWwgcmFkaW9CdXR0b24gcmFkaW9CdXR0b25HcnAgcmFkaW9Db2xsZWN0aW9uICcgK1xuICAgICAgJ3JhZGlvTWVudUl0ZW1Db2xsZWN0aW9uIHJhbXBDb2xvclBvcnQgcmFuZCByYW5kb21pemVGb2xsaWNsZXMgcmFuZHN0YXRlIHJhbmdlQ29udHJvbCAnICtcbiAgICAgICdyZWFkVGFrZSByZWJ1aWxkQ3VydmUgcmVidWlsZFN1cmZhY2UgcmVjb3JkQXR0ciByZWNvcmREZXZpY2UgcmVkbyByZWZlcmVuY2UgJyArXG4gICAgICAncmVmZXJlbmNlRWRpdCByZWZlcmVuY2VRdWVyeSByZWZpbmVTdWJkaXZTZWxlY3Rpb25MaXN0IHJlZnJlc2ggcmVmcmVzaEFFICcgK1xuICAgICAgJ3JlZ2lzdGVyUGx1Z2luUmVzb3VyY2UgcmVoYXNoIHJlbG9hZEltYWdlIHJlbW92ZUpvaW50IHJlbW92ZU11bHRpSW5zdGFuY2UgJyArXG4gICAgICAncmVtb3ZlUGFuZWxDYXRlZ29yeSByZW5hbWUgcmVuYW1lQXR0ciByZW5hbWVTZWxlY3Rpb25MaXN0IHJlbmFtZVVJIHJlbmRlciAnICtcbiAgICAgICdyZW5kZXJHbG9iYWxzTm9kZSByZW5kZXJJbmZvIHJlbmRlckxheWVyQnV0dG9uIHJlbmRlckxheWVyUGFyZW50ICcgK1xuICAgICAgJ3JlbmRlckxheWVyUG9zdFByb2Nlc3MgcmVuZGVyTGF5ZXJVbnBhcmVudCByZW5kZXJNYW5pcCByZW5kZXJQYXJ0aXRpb24gJyArXG4gICAgICAncmVuZGVyUXVhbGl0eU5vZGUgcmVuZGVyU2V0dGluZ3MgcmVuZGVyVGh1bWJuYWlsVXBkYXRlIHJlbmRlcldpbmRvd0VkaXRvciAnICtcbiAgICAgICdyZW5kZXJXaW5kb3dTZWxlY3RDb250ZXh0IHJlbmRlcmVyIHJlb3JkZXIgcmVvcmRlckRlZm9ybWVycyByZXF1aXJlcyByZXJvb3QgJyArXG4gICAgICAncmVzYW1wbGVGbHVpZCByZXNldEFFIHJlc2V0UGZ4VG9Qb2x5Q2FtZXJhIHJlc2V0VG9vbCByZXNvbHV0aW9uTm9kZSByZXRhcmdldCAnICtcbiAgICAgICdyZXZlcnNlQ3VydmUgcmV2ZXJzZVN1cmZhY2UgcmV2b2x2ZSByZ2JfdG9faHN2IHJpZ2lkQm9keSByaWdpZFNvbHZlciByb2xsIHJvbGxDdHggJyArXG4gICAgICAncm9vdE9mIHJvdCByb3RhdGUgcm90YXRpb25JbnRlcnBvbGF0aW9uIHJvdW5kQ29uc3RhbnRSYWRpdXMgcm93Q29sdW1uTGF5b3V0IHJvd0xheW91dCAnICtcbiAgICAgICdydW5UaW1lQ29tbWFuZCBydW51cCBzYW1wbGVJbWFnZSBzYXZlQWxsU2hlbHZlcyBzYXZlQXR0clByZXNldCBzYXZlRmx1aWQgc2F2ZUltYWdlICcgK1xuICAgICAgJ3NhdmVJbml0aWFsU3RhdGUgc2F2ZU1lbnUgc2F2ZVByZWZPYmplY3RzIHNhdmVQcmVmcyBzYXZlU2hlbGYgc2F2ZVRvb2xTZXR0aW5ncyBzY2FsZSAnICtcbiAgICAgICdzY2FsZUJydXNoQnJpZ2h0bmVzcyBzY2FsZUNvbXBvbmVudHMgc2NhbGVDb25zdHJhaW50IHNjYWxlS2V5IHNjYWxlS2V5Q3R4IHNjZW5lRWRpdG9yICcgK1xuICAgICAgJ3NjZW5lVUlSZXBsYWNlbWVudCBzY21oIHNjcmlwdEN0eCBzY3JpcHRFZGl0b3JJbmZvIHNjcmlwdEpvYiBzY3JpcHROb2RlIHNjcmlwdFRhYmxlICcgK1xuICAgICAgJ3NjcmlwdFRvU2hlbGYgc2NyaXB0ZWRQYW5lbCBzY3JpcHRlZFBhbmVsVHlwZSBzY3JvbGxGaWVsZCBzY3JvbGxMYXlvdXQgc2N1bHB0ICcgK1xuICAgICAgJ3NlYXJjaFBhdGhBcnJheSBzZWVkIHNlbExvYWRTZXR0aW5ncyBzZWxlY3Qgc2VsZWN0Q29udGV4dCBzZWxlY3RDdXJ2ZUNWIHNlbGVjdEtleSAnICtcbiAgICAgICdzZWxlY3RLZXlDdHggc2VsZWN0S2V5ZnJhbWVSZWdpb25DdHggc2VsZWN0TW9kZSBzZWxlY3RQcmVmIHNlbGVjdFByaW9yaXR5IHNlbGVjdFR5cGUgJyArXG4gICAgICAnc2VsZWN0ZWROb2RlcyBzZWxlY3Rpb25Db25uZWN0aW9uIHNlcGFyYXRvciBzZXRBdHRyIHNldEF0dHJFbnVtUmVzb3VyY2UgJyArXG4gICAgICAnc2V0QXR0ck1hcHBpbmcgc2V0QXR0ck5pY2VOYW1lUmVzb3VyY2Ugc2V0Q29uc3RyYWludFJlc3RQb3NpdGlvbiAnICtcbiAgICAgICdzZXREZWZhdWx0U2hhZGluZ0dyb3VwIHNldERyaXZlbktleWZyYW1lIHNldER5bmFtaWMgc2V0RWRpdEN0eCBzZXRFZGl0b3Igc2V0Rmx1aWRBdHRyICcgK1xuICAgICAgJ3NldEZvY3VzIHNldEluZmluaXR5IHNldElucHV0RGV2aWNlTWFwcGluZyBzZXRLZXlDdHggc2V0S2V5UGF0aCBzZXRLZXlmcmFtZSAnICtcbiAgICAgICdzZXRLZXlmcmFtZUJsZW5kc2hhcGVUYXJnZXRXdHMgc2V0TWVudU1vZGUgc2V0Tm9kZU5pY2VOYW1lUmVzb3VyY2Ugc2V0Tm9kZVR5cGVGbGFnICcgK1xuICAgICAgJ3NldFBhcmVudCBzZXRQYXJ0aWNsZUF0dHIgc2V0UGZ4VG9Qb2x5Q2FtZXJhIHNldFBsdWdpblJlc291cmNlIHNldFByb2plY3QgJyArXG4gICAgICAnc2V0U3RhbXBEZW5zaXR5IHNldFN0YXJ0dXBNZXNzYWdlIHNldFN0YXRlIHNldFRvb2xUbyBzZXRVSVRlbXBsYXRlIHNldFhmb3JtTWFuaXAgc2V0cyAnICtcbiAgICAgICdzaGFkaW5nQ29ubmVjdGlvbiBzaGFkaW5nR2VvbWV0cnlSZWxDdHggc2hhZGluZ0xpZ2h0UmVsQ3R4IHNoYWRpbmdOZXR3b3JrQ29tcGFyZSAnICtcbiAgICAgICdzaGFkaW5nTm9kZSBzaGFwZUNvbXBhcmUgc2hlbGZCdXR0b24gc2hlbGZMYXlvdXQgc2hlbGZUYWJMYXlvdXQgc2hlbGxGaWVsZCAnICtcbiAgICAgICdzaG9ydE5hbWVPZiBzaG93SGVscCBzaG93SGlkZGVuIHNob3dNYW5pcEN0eCBzaG93U2VsZWN0aW9uSW5UaXRsZSAnICtcbiAgICAgICdzaG93U2hhZGluZ0dyb3VwQXR0ckVkaXRvciBzaG93V2luZG93IHNpZ24gc2ltcGxpZnkgc2luIHNpbmdsZVByb2ZpbGVCaXJhaWxTdXJmYWNlICcgK1xuICAgICAgJ3NpemUgc2l6ZUJ5dGVzIHNraW5DbHVzdGVyIHNraW5QZXJjZW50IHNtb290aEN1cnZlIHNtb290aFRhbmdlbnRTdXJmYWNlIHNtb290aHN0ZXAgJyArXG4gICAgICAnc25hcDJ0bzIgc25hcEtleSBzbmFwTW9kZSBzbmFwVG9nZXRoZXJDdHggc25hcHNob3Qgc29mdCBzb2Z0TW9kIHNvZnRNb2RDdHggc29ydCBzb3VuZCAnICtcbiAgICAgICdzb3VuZENvbnRyb2wgc291cmNlIHNwYWNlTG9jYXRvciBzcGhlcmUgc3BocmFuZCBzcG90TGlnaHQgc3BvdExpZ2h0UHJldmlld1BvcnQgJyArXG4gICAgICAnc3ByZWFkU2hlZXRFZGl0b3Igc3ByaW5nIHNxcnQgc3F1YXJlU3VyZmFjZSBzcnRDb250ZXh0IHN0YWNrVHJhY2Ugc3RhcnRTdHJpbmcgJyArXG4gICAgICAnc3RhcnRzV2l0aCBzdGl0Y2hBbmRFeHBsb2RlU2hlbGwgc3RpdGNoU3VyZmFjZSBzdGl0Y2hTdXJmYWNlUG9pbnRzIHN0cmNtcCAnICtcbiAgICAgICdzdHJpbmdBcnJheUNhdGVuYXRlIHN0cmluZ0FycmF5Q29udGFpbnMgc3RyaW5nQXJyYXlDb3VudCBzdHJpbmdBcnJheUluc2VydEF0SW5kZXggJyArXG4gICAgICAnc3RyaW5nQXJyYXlJbnRlcnNlY3RvciBzdHJpbmdBcnJheVJlbW92ZSBzdHJpbmdBcnJheVJlbW92ZUF0SW5kZXggJyArXG4gICAgICAnc3RyaW5nQXJyYXlSZW1vdmVEdXBsaWNhdGVzIHN0cmluZ0FycmF5UmVtb3ZlRXhhY3Qgc3RyaW5nQXJyYXlUb1N0cmluZyAnICtcbiAgICAgICdzdHJpbmdUb1N0cmluZ0FycmF5IHN0cmlwIHN0cmlwUHJlZml4RnJvbU5hbWUgc3Ryb2tlIHN1YmRBdXRvUHJvamVjdGlvbiAnICtcbiAgICAgICdzdWJkQ2xlYW5Ub3BvbG9neSBzdWJkQ29sbGFwc2Ugc3ViZER1cGxpY2F0ZUFuZENvbm5lY3Qgc3ViZEVkaXRVViAnICtcbiAgICAgICdzdWJkTGlzdENvbXBvbmVudENvbnZlcnNpb24gc3ViZE1hcEN1dCBzdWJkTWFwU2V3TW92ZSBzdWJkTWF0Y2hUb3BvbG9neSBzdWJkTWlycm9yICcgK1xuICAgICAgJ3N1YmRUb0JsaW5kIHN1YmRUb1BvbHkgc3ViZFRyYW5zZmVyVVZzVG9DYWNoZSBzdWJkaXYgc3ViZGl2Q3JlYXNlICcgK1xuICAgICAgJ3N1YmRpdkRpc3BsYXlTbW9vdGhuZXNzIHN1YnN0aXR1dGUgc3Vic3RpdHV0ZUFsbFN0cmluZyBzdWJzdGl0dXRlR2VvbWV0cnkgc3Vic3RyaW5nICcgK1xuICAgICAgJ3N1cmZhY2Ugc3VyZmFjZVNhbXBsZXIgc3VyZmFjZVNoYWRlckxpc3Qgc3dhdGNoRGlzcGxheVBvcnQgc3dpdGNoVGFibGUgc3ltYm9sQnV0dG9uICcgK1xuICAgICAgJ3N5bWJvbENoZWNrQm94IHN5c0ZpbGUgc3lzdGVtIHRhYkxheW91dCB0YW4gdGFuZ2VudENvbnN0cmFpbnQgdGV4TGF0dGljZURlZm9ybUNvbnRleHQgJyArXG4gICAgICAndGV4TWFuaXBDb250ZXh0IHRleE1vdmVDb250ZXh0IHRleE1vdmVVVlNoZWxsQ29udGV4dCB0ZXhSb3RhdGVDb250ZXh0IHRleFNjYWxlQ29udGV4dCAnICtcbiAgICAgICd0ZXhTZWxlY3RDb250ZXh0IHRleFNlbGVjdFNob3J0ZXN0UGF0aEN0eCB0ZXhTbXVkZ2VVVkNvbnRleHQgdGV4V2luVG9vbEN0eCB0ZXh0ICcgK1xuICAgICAgJ3RleHRDdXJ2ZXMgdGV4dEZpZWxkIHRleHRGaWVsZEJ1dHRvbkdycCB0ZXh0RmllbGRHcnAgdGV4dE1hbmlwIHRleHRTY3JvbGxMaXN0ICcgK1xuICAgICAgJ3RleHRUb1NoZWxmIHRleHR1cmVEaXNwbGFjZVBsYW5lIHRleHR1cmVIYWlyQ29sb3IgdGV4dHVyZVBsYWNlbWVudENvbnRleHQgJyArXG4gICAgICAndGV4dHVyZVdpbmRvdyB0aHJlYWRDb3VudCB0aHJlZVBvaW50QXJjQ3R4IHRpbWVDb250cm9sIHRpbWVQb3J0IHRpbWVyWCB0b05hdGl2ZVBhdGggJyArXG4gICAgICAndG9nZ2xlIHRvZ2dsZUF4aXMgdG9nZ2xlV2luZG93VmlzaWJpbGl0eSB0b2tlbml6ZSB0b2tlbml6ZUxpc3QgdG9sZXJhbmNlIHRvbG93ZXIgJyArXG4gICAgICAndG9vbEJ1dHRvbiB0b29sQ29sbGVjdGlvbiB0b29sRHJvcHBlZCB0b29sSGFzT3B0aW9ucyB0b29sUHJvcGVydHlXaW5kb3cgdG9ydXMgdG91cHBlciAnICtcbiAgICAgICd0cmFjZSB0cmFjayB0cmFja0N0eCB0cmFuc2ZlckF0dHJpYnV0ZXMgdHJhbnNmb3JtQ29tcGFyZSB0cmFuc2Zvcm1MaW1pdHMgdHJhbnNsYXRvciAnICtcbiAgICAgICd0cmltIHRydW5jIHRydW5jYXRlRmx1aWRDYWNoZSB0cnVuY2F0ZUhhaXJDYWNoZSB0dW1ibGUgdHVtYmxlQ3R4IHR1cmJ1bGVuY2UgJyArXG4gICAgICAndHdvUG9pbnRBcmNDdHggdWlSZXMgdWlUZW1wbGF0ZSB1bmFzc2lnbklucHV0RGV2aWNlIHVuZG8gdW5kb0luZm8gdW5ncm91cCB1bmlmb3JtIHVuaXQgJyArXG4gICAgICAndW5sb2FkUGx1Z2luIHVudGFuZ2xlVVYgdW50aXRsZWRGaWxlTmFtZSB1bnRyaW0gdXBBeGlzIHVwZGF0ZUFFIHVzZXJDdHggdXZMaW5rICcgK1xuICAgICAgJ3V2U25hcHNob3QgdmFsaWRhdGVTaGVsZk5hbWUgdmVjdG9yaXplIHZpZXcyZFRvb2xDdHggdmlld0NhbWVyYSB2aWV3Q2xpcFBsYW5lICcgK1xuICAgICAgJ3ZpZXdGaXQgdmlld0hlYWRPbiB2aWV3TG9va0F0IHZpZXdNYW5pcCB2aWV3UGxhY2Ugdmlld1NldCB2aXNvciB2b2x1bWVBeGlzIHZvcnRleCAnICtcbiAgICAgICd3YWl0Q3Vyc29yIHdhcm5pbmcgd2ViQnJvd3NlciB3ZWJCcm93c2VyUHJlZnMgd2hhdElzIHdpbmRvdyB3aW5kb3dQcmVmIHdpcmUgJyArXG4gICAgICAnd2lyZUNvbnRleHQgd29ya3NwYWNlIHdyaW5rbGUgd3JpbmtsZUNvbnRleHQgd3JpdGVUYWtlIHhibUxhbmdQYXRoTGlzdCB4Zm9ybScsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHsgLy8gZWF0cyB2YXJpYWJsZXNcbiAgICAgICAgYmVnaW46ICdbXFxcXCRcXFxcJVxcXFxAXShcXFxcXlxcXFx3XFxcXGJ8I1xcXFx3K3xbXlxcXFxzXFxcXHd7XXx7XFxcXHcrfXxcXFxcdyspJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdtb2R1bGUgdXNlX21vZHVsZSBpbXBvcnRfbW9kdWxlIGluY2x1ZGVfbW9kdWxlIGVuZF9tb2R1bGUgaW5pdGlhbGlzZSAnICtcbiAgICAgICdtdXRhYmxlIGluaXRpYWxpemUgZmluYWxpemUgZmluYWxpc2UgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIHByZWQgJyArXG4gICAgICAnbW9kZSBmdW5jIHR5cGUgaW5zdCBzb2x2ZXIgYW55X3ByZWQgYW55X2Z1bmMgaXMgc2VtaWRldCBkZXQgbm9uZGV0ICcgK1xuICAgICAgJ211bHRpIGVycm9uZW91cyBmYWlsdXJlIGNjX25vbmRldCBjY19tdWx0aSB0eXBlY2xhc3MgaW5zdGFuY2Ugd2hlcmUgJyArXG4gICAgICAncHJhZ21hIHByb21pc2UgZXh0ZXJuYWwgdHJhY2UgYXRvbWljIG9yX2Vsc2UgcmVxdWlyZV9jb21wbGV0ZV9zd2l0Y2ggJyArXG4gICAgICAncmVxdWlyZV9kZXQgcmVxdWlyZV9zZW1pZGV0IHJlcXVpcmVfbXVsdGkgcmVxdWlyZV9ub25kZXQgJyArXG4gICAgICAncmVxdWlyZV9jY19tdWx0aSByZXF1aXJlX2NjX25vbmRldCByZXF1aXJlX2Vycm9uZW91cyByZXF1aXJlX2ZhaWx1cmUnLFxuICAgIG1ldGE6XG4gICAgICAvLyBwcmFnbWFcbiAgICAgICdpbmxpbmUgbm9faW5saW5lIHR5cGVfc3BlYyBzb3VyY2VfZmlsZSBmYWN0X3RhYmxlIG9ic29sZXRlIG1lbW8gJyArXG4gICAgICAnbG9vcF9jaGVjayBtaW5pbWFsX21vZGVsIHRlcm1pbmF0ZXMgZG9lc19ub3RfdGVybWluYXRlICcgK1xuICAgICAgJ2NoZWNrX3Rlcm1pbmF0aW9uIHByb21pc2VfZXF1aXZhbGVudF9jbGF1c2VzICcgK1xuICAgICAgLy8gcHJlcHJvY2Vzc29yXG4gICAgICAnZm9yZWlnbl9wcm9jIGZvcmVpZ25fZGVjbCBmb3JlaWduX2NvZGUgZm9yZWlnbl90eXBlICcgK1xuICAgICAgJ2ZvcmVpZ25faW1wb3J0X21vZHVsZSBmb3JlaWduX2V4cG9ydF9lbnVtIGZvcmVpZ25fZXhwb3J0ICcgK1xuICAgICAgJ2ZvcmVpZ25fZW51bSBtYXlfY2FsbF9tZXJjdXJ5IHdpbGxfbm90X2NhbGxfbWVyY3VyeSB0aHJlYWRfc2FmZSAnICtcbiAgICAgICdub3RfdGhyZWFkX3NhZmUgbWF5YmVfdGhyZWFkX3NhZmUgcHJvbWlzZV9wdXJlIHByb21pc2Vfc2VtaXB1cmUgJyArXG4gICAgICAndGFibGVkX2Zvcl9pbyBsb2NhbCB1bnRyYWlsZWQgdHJhaWxlZCBhdHRhY2hfdG9faW9fc3RhdGUgJyArXG4gICAgICAnY2FuX3Bhc3NfYXNfbWVyY3VyeV90eXBlIHN0YWJsZSB3aWxsX25vdF90aHJvd19leGNlcHRpb24gJyArXG4gICAgICAnbWF5X21vZGlmeV90cmFpbCB3aWxsX25vdF9tb2RpZnlfdHJhaWwgbWF5X2R1cGxpY2F0ZSAnICtcbiAgICAgICdtYXlfbm90X2R1cGxpY2F0ZSBhZmZlY3RzX2xpdmVuZXNzIGRvZXNfbm90X2FmZmVjdF9saXZlbmVzcyAnICtcbiAgICAgICdkb2VzbnRfYWZmZWN0X2xpdmVuZXNzIG5vX3NoYXJpbmcgdW5rbm93bl9zaGFyaW5nIHNoYXJpbmcnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ3NvbWUgYWxsIG5vdCBpZiB0aGVuIGVsc2UgdHJ1ZSBmYWlsIGZhbHNlIHRyeSBjYXRjaCBjYXRjaF9hbnkgJyArXG4gICAgICAnc2VtaWRldF90cnVlIHNlbWlkZXRfZmFsc2Ugc2VtaWRldF9mYWlsIGltcHVyZV90cnVlIGltcHVyZSBzZW1pcHVyZSdcbiAgfTtcblxuICB2YXIgQ09NTUVOVCA9IGhsanMuQ09NTUVOVCgnJScsICckJyk7XG5cbiAgdmFyIE5VTUNPREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogXCIwJy5cXFxcfDBbYm94XVswLTlhLWZBLUZdKlwiXG4gIH07XG5cbiAgdmFyIEFUT00gPSBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7cmVsZXZhbmNlOiAwfSk7XG4gIHZhciBTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge3JlbGV2YW5jZTogMH0pO1xuICB2YXIgU1RSSU5HX0ZNVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdcXFxcXFxcXFthYmZucnR2XVxcXFx8XFxcXFxcXFx4WzAtOWEtZkEtRl0qXFxcXFxcXFxcXFxcfCVbLSsjICouMC05XSpbZGlveFh1Y3NmZUVnR3BdJyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgU1RSSU5HLmNvbnRhaW5zLnB1c2goU1RSSU5HX0ZNVCk7XG5cbiAgdmFyIElNUExJQ0FUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAnPD0+J30sXG4gICAgICB7YmVnaW46ICc8PScsIHJlbGV2YW5jZTogMH0sXG4gICAgICB7YmVnaW46ICc9PicsIHJlbGV2YW5jZTogMH0sXG4gICAgICB7YmVnaW46ICcvXFxcXFxcXFwnfSxcbiAgICAgIHtiZWdpbjogJ1xcXFxcXFxcLyd9XG4gICAgXVxuICB9O1xuXG4gIHZhciBIRUFEX0JPRFlfQ09OSlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46ICc6LVxcXFx8LS0+J30sXG4gICAgICB7YmVnaW46ICc9JywgcmVsZXZhbmNlOiAwfVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnbScsICdtb28nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIElNUExJQ0FUSU9OLFxuICAgICAgSEVBRF9CT0RZX0NPTkpVTkNUSU9OLFxuICAgICAgQ09NTUVOVCxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBOVU1DT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEFUT00sXG4gICAgICBTVFJJTkcsXG4gICAgICB7YmVnaW46IC86LS99IC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgICAvL2xvY2FsIGxhYmVsczogJT9bRkJdP1tBVF0/XFxkezEsMn1cXHcrXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBhbGlhc2VzOiBbJ21pcHMnXSxcbiAgICBsZXhlbWVzOiAnXFxcXC4/JyArIGhsanMuSURFTlRfUkUsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIG1ldGE6XG4gICAgICAgIC8vR05VIHByZXByb2NzXG4gICAgICAgICcuMmJ5dGUgLjRieXRlIC5hbGlnbiAuYXNjaWkgLmFzY2l6IC5iYWxpZ24gLmJ5dGUgLmNvZGUgLmRhdGEgLmVsc2UgLmVuZCAuZW5kaWYgLmVuZG0gLmVuZHIgLmVxdSAuZXJyIC5leGl0bSAuZXh0ZXJuIC5nbG9iYWwgLmh3b3JkIC5pZiAuaWZkZWYgLmlmbmRlZiAuaW5jbHVkZSAuaXJwIC5sb25nIC5tYWNybyAucmVwdCAucmVxIC5zZWN0aW9uIC5zZXQgLnNraXAgLnNwYWNlIC50ZXh0IC53b3JkIC5sdG9yZyAnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICckMCAkMSAkMiAkMyAkNCAkNSAkNiAkNyAkOCAkOSAkMTAgJDExICQxMiAkMTMgJDE0ICQxNSAnICsgLy8gaW50ZWdlciByZWdpc3RlcnNcbiAgICAgICAgJyQxNiAkMTcgJDE4ICQxOSAkMjAgJDIxICQyMiAkMjMgJDI0ICQyNSAkMjYgJDI3ICQyOCAkMjkgJDMwICQzMSAnICsgLy8gaW50ZWdlciByZWdpc3RlcnNcbiAgICAgICAgJ3plcm8gYXQgdjAgdjEgYTAgYTEgYTIgYTMgYTQgYTUgYTYgYTcgJyArIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICAndDAgdDEgdDIgdDMgdDQgdDUgdDYgdDcgdDggdDkgczAgczEgczIgczMgczQgczUgczYgczcgczggJyArIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICAnazAgazEgZ3Agc3AgZnAgcmEgJyArIC8vIGludGVnZXIgcmVnaXN0ZXIgYWxpYXNlc1xuICAgICAgICAnJGYwICRmMSAkZjIgJGYyICRmNCAkZjUgJGY2ICRmNyAkZjggJGY5ICRmMTAgJGYxMSAkZjEyICRmMTMgJGYxNCAkZjE1ICcgKyAvLyBmbG9hdGluZy1wb2ludCByZWdpc3RlcnNcbiAgICAgICAgJyRmMTYgJGYxNyAkZjE4ICRmMTkgJGYyMCAkZjIxICRmMjIgJGYyMyAkZjI0ICRmMjUgJGYyNiAkZjI3ICRmMjggJGYyOSAkZjMwICRmMzEgJyArIC8vIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyc1xuICAgICAgICAnQ29udGV4dCBSYW5kb20gRW50cnlMbzAgRW50cnlMbzEgQ29udGV4dCBQYWdlTWFzayBXaXJlZCBFbnRyeUhpICcgKyAvLyBDb3Byb2Nlc3NvciAwIHJlZ2lzdGVyc1xuICAgICAgICAnSFdSRW5hIEJhZFZBZGRyIENvdW50IENvbXBhcmUgU1IgSW50Q3RsIFNSU0N0bCBTUlNNYXAgQ2F1c2UgRVBDIFBSSWQgJyArIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgICAgICdFQmFzZSBDb25maWcgQ29uZmlnMSBDb25maWcyIENvbmZpZzMgTExBZGRyIERlYnVnIERFUEMgREVTQVZFIENhY2hlRXJyICcgKyAvLyBDb3Byb2Nlc3NvciAwIHJlZ2lzdGVyc1xuICAgICAgICAnRUNDIEVycm9yRVBDIFRhZ0xvIERhdGFMbyBUYWdIaSBEYXRhSGkgV2F0Y2hMbyBXYXRjaEhpIFBlcmZDdGwgUGVyZkNudCAnIC8vIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXJzXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignKyAgICAgLy9tbmVtb25pY3NcbiAgICAgICAgICAgIC8vIDMyLWJpdCBpbnRlZ2VyIGluc3RydWN0aW9uc1xuICAgICAgICAgICAgJ2FkZGk/dT98YW5kaT98YihhbCk/fGJlcWw/fGJnZXooYWwpP2w/fGJndHpsP3xibGV6bD98Ymx0eihhbCk/bD98JyArXG4gICAgICAgICAgICAnYm5lbD98Y2xbb3pdfGRpdnU/fGV4dHxpbnN8aihhbCk/fGphbHIoXFwuaGIpP3xqcihcXC5oYik/fGxidT98bGh1P3wnICtcbiAgICAgICAgICAgICdsbHxsdWl8bHdbbHJdP3xtYWRkdT98bWZoaXxtZmxvfG1vdm58bW92enxtb3ZlfG1zdWJ1P3xtdGhpfG10bG98bXVsfCcgK1xuICAgICAgICAgICAgJ211bHR1P3xub3B8bm9yfG9yaT98cm90cnY/fHNifHNjfHNlW2JoXXxzaHxzbGx2P3xzbHRpP3U/fHNyYXY/fCcgK1xuICAgICAgICAgICAgJ3NybHY/fHN1YnU/fHN3W2xyXT98eG9yaT98d3NiaHwnICtcbiAgICAgICAgICAgIC8vIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9uc1xuICAgICAgICAgICAgJ2Fic1xcLltzZF18YWRkXFwuW3NkXXxhbG52LnBzfGJjMVtmdF1sP3wnICtcbiAgICAgICAgICAgICdjXFwuKHM/Znx1bnx1P2VxfFtvdV1sdHxbb3VdbGV8bmdsZT98c2VxfGxbZXRdfG5nW2V0XSlcXC5bc2RdfCcgK1xuICAgICAgICAgICAgJyhjZWlsfGZsb29yfHJvdW5kfHRydW5jKVxcLltsd11cXC5bc2RdfGNmYzF8Y3Z0XFwuZFxcLltsc3ddfCcgK1xuICAgICAgICAgICAgJ2N2dFxcLmxcXC5bZHN3XXxjdnRcXC5wc1xcLnN8Y3Z0XFwuc1xcLltkbHddfGN2dFxcLnNcXC5wW2x1XXxjdnRcXC53XFwuW2Rsc118JyArXG4gICAgICAgICAgICAnZGl2XFwuW2RzXXxsZHg/YzF8bHV4YzF8bHd4P2MxfG1hZGRcXC5bc2RdfG1mYzF8bW92W2ZudHpdP1xcLltkc118JyArXG4gICAgICAgICAgICAnbXN1YlxcLltzZF18bXRoP2MxfG11bFxcLltkc118bmVnXFwuW2RzXXxubWFkZFxcLltkc118bm1zdWJcXC5bZHNdfCcgK1xuICAgICAgICAgICAgJ3BbbHVdW2x1XVxcLnBzfHJlY2lwXFwuZm10fHI/c3FydFxcLltkc118c2R4P2MxfHN1YlxcLltkc118c3V4YzF8JyArXG4gICAgICAgICAgICAnc3d4P2MxfCcgK1xuICAgICAgICAgICAgLy8gc3lzdGVtIGNvbnRyb2wgaW5zdHJ1Y3Rpb25zXG4gICAgICAgICAgICAnYnJlYWt8Y2FjaGV8ZD9lcmV0fFtkZV1pfGVoYnxtZmMwfG10YzB8cGF1c2V8cHJlZng/fHJkaHdyfCcgK1xuICAgICAgICAgICAgJ3JkcGdwcnxzZGJicHxzc25vcHxzeW5jaT98c3lzY2FsbHx0ZXFpP3x0Z2VpP3U/fHRsYihwfHJ8d1tpcl0pfCcgK1xuICAgICAgICAgICAgJ3RsdGk/dT98dG5laT98d2FpdHx3cnBncHInK1xuICAgICAgICAnKScsXG4gICAgICAgIGVuZDogJ1xcXFxzJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVCgnWzsjXScsICckJyksXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdbXlxcXFxcXFxcXVxcJycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICB7YmVnaW46ICcweFswLTlhLWZdKyd9LCAvL2hleFxuICAgICAgICAgICAge2JlZ2luOiAnXFxcXGItP1xcXFxkKyd9ICAgICAgICAgICAvL2JhcmUgbnVtYmVyXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgIHtiZWdpbjogJ15cXFxccypbYS16X1xcXFwuXFxcXCRdW2EtejAtOV9cXFxcLlxcXFwkXSs6J30sIC8vR05VIE1JUFMgc3ludGF4XG4gICAgICAgICAgICB7YmVnaW46ICdeXFxcXHMqWzAtOV0rOid9LCAvLyBudW1iZXJlZCBsb2NhbCBsYWJlbHNcbiAgICAgICAgICAgIHtiZWdpbjogJ1swLTldK1tiZl0nIH0gIC8vIG51bWJlciBsb2NhbCBsYWJlbCByZWZlcmVuY2UgKGJhY2t3YXJkcywgZm9yd2FyZHMpXG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgaWxsZWdhbDogJ1xcLydcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnZW52aXJvbiB2b2NhYnVsYXJpZXMgbm90YXRpb25zIGNvbnN0cnVjdG9ycyBkZWZpbml0aW9ucyAnICtcbiAgICAgICdyZWdpc3RyYXRpb25zIHRoZW9yZW1zIHNjaGVtZXMgcmVxdWlyZW1lbnRzIGJlZ2luIGVuZCBkZWZpbml0aW9uICcgK1xuICAgICAgJ3JlZ2lzdHJhdGlvbiBjbHVzdGVyIGV4aXN0ZW5jZSBwcmVkIGZ1bmMgZGVmcHJlZCBkZWZmdW5jIHRoZW9yZW0gJyArXG4gICAgICAncHJvb2YgbGV0IHRha2UgYXNzdW1lIHRoZW4gdGh1cyBoZW5jZSBleCBmb3Igc3QgaG9sZHMgY29uc2lkZXIgJyArXG4gICAgICAncmVjb25zaWRlciBzdWNoIHRoYXQgYW5kIGluIHByb3ZpZGVkIG9mIGFzIGZyb20gYmUgYmVpbmcgYnkgbWVhbnMgJyArXG4gICAgICAnZXF1YWxzIGltcGxpZXMgaWZmIHJlZGVmaW5lIGRlZmluZSBub3cgbm90IG9yIGF0dHIgaXMgbW9kZSAnICtcbiAgICAgICdzdXBwb3NlIHBlciBjYXNlcyBzZXQgdGhlc2lzIGNvbnRyYWRpY3Rpb24gc2NoZW1lIHJlc2VydmUgc3RydWN0ICcgK1xuICAgICAgJ2NvcnJlY3RuZXNzIGNvbXBhdGliaWxpdHkgY29oZXJlbmNlIHN5bW1ldHJ5IGFzc3ltZXRyeSAnICtcbiAgICAgICdyZWZsZXhpdml0eSBpcnJlZmxleGl2aXR5IGNvbm5lY3RlZG5lc3MgdW5pcXVlbmVzcyBjb21tdXRhdGl2aXR5ICcgK1xuICAgICAgJ2lkZW1wb3RlbmNlIGludm9sdXRpdmVuZXNzIHByb2plY3Rpdml0eScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnOjonLCAnJCcpXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFBFUkxfS0VZV09SRFMgPSAnZ2V0cHdlbnQgZ2V0c2VydmVudCBxdW90ZW1ldGEgbXNncmN2IHNjYWxhciBraWxsIGRibWNsb3NlIHVuZGVmIGxjICcgK1xuICAgICdtYSBzeXN3cml0ZSB0ciBzZW5kIHVtYXNrIHN5c29wZW4gc2htd3JpdGUgdmVjIHF4IHV0aW1lIGxvY2FsIG9jdCBzZW1jdGwgbG9jYWx0aW1lICcgK1xuICAgICdyZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXEnICtcbiAgICAnZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50ICcgK1xuICAgICdzaHV0ZG93biBkdW1wIGNob21wIGNvbm5lY3QgZ2V0c29ja25hbWUgZGllIHNvY2tldHBhaXIgY2xvc2UgZmxvY2sgZXhpc3RzIGluZGV4IHNobWdldCcgK1xuICAgICdzdWIgZm9yIGVuZHB3ZW50IHJlZG8gbHN0YXQgbXNnY3RsIHNldHBncnAgYWJzIGV4aXQgc2VsZWN0IHByaW50IHJlZiBnZXRob3N0YnlhZGRyICcgK1xuICAgICd1bnNoaWZ0IGZjbnRsIHN5c2NhbGwgZ290byBnZXRuZXRieWFkZHIgam9pbiBnbXRpbWUgc3ltbGluayBzZW1nZXQgc3BsaWNlIHh8MCAnICtcbiAgICAnZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgJyArXG4gICAgJ2VuZGhvc3RlbnQgdGltZXMgY2hvcCBsZW5ndGggZ2V0aG9zdGVudCBnZXRuZXRlbnQgcGFjayBnZXRwcm90b2VudCBnZXRzZXJ2YnluYW1lIHJhbmQgJyArXG4gICAgJ21rZGlyIHBvcyBjaG1vZCB5fDAgc3Vic3RyIGVuZG5ldGVudCBwcmludGYgbmV4dCBvcGVuIG1zZ3NuZCByZWFkZGlyIHVzZSB1bmxpbmsgJyArXG4gICAgJ2dldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyICcgK1xuICAgICd1bnRpZSBybWRpciBwcm90b3R5cGUgdGVsbCBsaXN0ZW4gZm9yayBzaG1yZWFkIHVjZmlyc3Qgc2V0cHJvdG9lbnQgZWxzZSBzeXNzZWVrIGxpbmsgJyArXG4gICAgJ2dldGdyZ2lkIHNobWN0bCB3YWl0cGlkIHVucGFjayBnZXRuZXRieW5hbWUgcmVzZXQgY2hkaXIgZ3JlcCBzcGxpdCByZXF1aXJlIGNhbGxlciAnICtcbiAgICAnbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCAnICtcbiAgICAnc29ydCB1YyBkZWZpbmVkIHNyYW5kIGFjY2VwdCBwYWNrYWdlIHNlZWtkaXIgZ2V0cHJvdG9ieW5hbWUgc2Vtb3Agb3VyIHJlbmFtZSBzZWVrIGlmIHF8MCAnICtcbiAgICAnY2hyb290IHN5c3JlYWQgc2V0cHdlbnQgbm8gY3J5cHQgZ2V0YyBjaG93biBzcXJ0IHdyaXRlIHNldG5ldGVudCBzZXRwcmlvcml0eSBmb3JlYWNoICcgK1xuICAgICd0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpcicgK1xuICAgICdpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlICcgK1xuICAgICdhdGFuMiBnZXRncmVudCBleHAgdGltZSBwdXNoIHNldGdyZW50IGd0IGx0IG9yIG5lIG18MCBicmVhayBnaXZlbiBzYXkgc3RhdGUgd2hlbic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46ICdbJEBdXFxcXHsnLCBlbmQ6ICdcXFxcfScsXG4gICAga2V5d29yZHM6IFBFUkxfS0VZV09SRFNcbiAgfTtcbiAgdmFyIE1FVEhPRCA9IHtcbiAgICBiZWdpbjogJy0+eycsIGVuZDogJ30nXG4gICAgLy8gY29udGFpbnMgZGVmaW5lZCBsYXRlclxuICB9O1xuICB2YXIgVkFSID0ge1xuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cXCRcXGQvfSxcbiAgICAgIHtiZWdpbjogL1tcXCQlQF0oXFxeXFx3XFxifCNcXHcrKDo6XFx3KykqfHtcXHcrfXxcXHcrKDo6XFx3KikqKS99LFxuICAgICAge2JlZ2luOiAvW1xcJCVAXVteXFxzXFx3e10vLCByZWxldmFuY2U6IDB9XG4gICAgXVxuICB9O1xuICB2YXIgU1RSSU5HX0NPTlRBSU5TID0gW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1QsIFZBUl07XG4gIHZhciBQRVJMX0RFRkFVTFRfQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DT01NRU5UKFxuICAgICAgJ15cXFxcPVxcXFx3JyxcbiAgICAgICdcXFxcPWN1dCcsXG4gICAgICB7XG4gICAgICAgIGVuZHNXaXRoUGFyZW50OiB0cnVlXG4gICAgICB9XG4gICAgKSxcbiAgICBNRVRIT0QsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGNvbnRhaW5zOiBTVFJJTkdfQ09OVEFJTlMsXG4gICAgICB2YXJpYW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx7JywgZW5kOiAnXFxcXH0nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFx8JywgZW5kOiAnXFxcXHwnLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxW3F3eHJdP1xcXFxzKlxcXFw8JywgZW5kOiAnXFxcXD4nLFxuICAgICAgICAgIHJlbGV2YW5jZTogNVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdxd1xcXFxzK3EnLCBlbmQ6ICdxJyxcbiAgICAgICAgICByZWxldmFuY2U6IDVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnXCInLCBlbmQ6ICdcIidcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICd7XFxcXHcrfScsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46ICdcXC0/XFxcXHcrXFxcXHMqXFxcXD1cXFxcPicsXG4gICAgICAgICAgY29udGFpbnM6IFtdLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9LFxuICAgIHsgLy8gcmVnZXhwIGNvbnRhaW5lclxuICAgICAgYmVnaW46ICcoXFxcXC9cXFxcL3wnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXFxcYilcXFxccyonLFxuICAgICAga2V5d29yZHM6ICdzcGxpdCByZXR1cm4gcHJpbnQgcmV2ZXJzZSBncmVwJyxcbiAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKHN8dHJ8eSkvKFxcXFxcXFxcLnxbXi9dKSovKFxcXFxcXFxcLnxbXi9dKSovW2Etel0qJyxcbiAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdyZWdleHAnLFxuICAgICAgICAgIGJlZ2luOiAnKG18cXIpPy8nLCBlbmQ6ICcvW2Etel0qJyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgcmVsZXZhbmNlOiAwIC8vIGFsbG93cyBlbXB0eSBcIi8vXCIgd2hpY2ggaXMgYSBjb21tb24gY29tbWVudCBkZWxpbWl0ZXIgaW4gb3RoZXIgbGFuZ3VhZ2VzXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgIGJlZ2luS2V5d29yZHM6ICdzdWInLCBlbmQ6ICcoXFxcXHMqXFxcXCguKj9cXFxcKSk/Wzt7XScsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICByZWxldmFuY2U6IDUsXG4gICAgICBjb250YWluczogW2hsanMuVElUTEVfTU9ERV1cbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnLVxcXFx3XFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICBiZWdpbjogXCJeX19EQVRBX18kXCIsXG4gICAgICBlbmQ6IFwiXl9fRU5EX18kXCIsXG4gICAgICBzdWJMYW5ndWFnZTogJ21vam9saWNpb3VzJyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiBcIl5AQC4qXCIsXG4gICAgICAgICAgICBlbmQ6IFwiJFwiLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcImNvbW1lbnRcIlxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xuICBTVUJTVC5jb250YWlucyA9IFBFUkxfREVGQVVMVF9DT05UQUlOUztcbiAgTUVUSE9ELmNvbnRhaW5zID0gUEVSTF9ERUZBVUxUX0NPTlRBSU5TO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwbCcsICdwbSddLFxuICAgIGxleGVtZXM6IC9bXFx3XFwuXSsvLFxuICAgIGtleXdvcmRzOiBQRVJMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBQRVJMX0RFRkFVTFRfQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15fXyhFTkR8REFUQSlfXyQnXG4gICAgICB9LFxuICAgIC8vIG1vam9saWNpb3VzIGxpbmVcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IFwiXlxcXFxzKiV7MSwyfT17MCwyfVwiLCBlbmQ6ICckJyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdwZXJsJ1xuICAgICAgfSxcbiAgICAvLyBtb2pvbGljaW91cyBibG9ja1xuICAgICAge1xuICAgICAgICBiZWdpbjogXCI8JXsxLDJ9PXswLDJ9XCIsXG4gICAgICAgIGVuZDogXCI9ezAsMX0lPlwiLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3BlcmwnLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1skXVthLWZBLUYwLTldKydcbiAgICAgIH0sXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ3B1YmxpYyBwcml2YXRlIHByb3BlcnR5IGNvbnRpbnVlIGV4aXQgZXh0ZXJuIG5ldyB0cnkgY2F0Y2ggJyArXG4gICAgICAgICdlYWNoaW4gbm90IGFic3RyYWN0IGZpbmFsIHNlbGVjdCBjYXNlIGRlZmF1bHQgY29uc3QgbG9jYWwgZ2xvYmFsIGZpZWxkICcgK1xuICAgICAgICAnZW5kIGlmIHRoZW4gZWxzZSBlbHNlaWYgZW5kaWYgd2hpbGUgd2VuZCByZXBlYXQgdW50aWwgZm9yZXZlciBmb3IgJyArXG4gICAgICAgICd0byBzdGVwIG5leHQgcmV0dXJuIG1vZHVsZSBpbmxpbmUgdGhyb3cgaW1wb3J0JyxcblxuICAgICAgYnVpbHRfaW46ICdEZWJ1Z0xvZyBEZWJ1Z1N0b3AgRXJyb3IgUHJpbnQgQUNvcyBBQ29zciBBU2luIEFTaW5yIEFUYW4gQVRhbjIgQVRhbjJyIEFUYW5yIEFicyBBYnMgQ2VpbCAnICtcbiAgICAgICAgJ0NsYW1wIENsYW1wIENvcyBDb3NyIEV4cCBGbG9vciBMb2cgTWF4IE1heCBNaW4gTWluIFBvdyBTZ24gU2duIFNpbiBTaW5yIFNxcnQgVGFuIFRhbnIgU2VlZCBQSSBIQUxGUEkgVFdPUEknLFxuXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSBudWxsIGFuZCBvciBzaGwgc2hyIG1vZCdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXCovLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNPTU1FTlQoJyNyZW0nLCAnI2VuZCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICBcIidcIixcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uIG1ldGhvZCcsIGVuZDogJ1soPTpdfCQnLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICckJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyBpbXBsZW1lbnRzJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKHNlbGZ8c3VwZXIpXFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdcXFxccyojJywgZW5kOiAnJCcsXG4gICAgICAgIGtleXdvcmRzOiB7J21ldGEta2V5d29yZCc6ICdpZiBlbHNlIGVsc2VpZiBlbmRpZiBlbmQgdGhlbid9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICdeXFxcXHMqc3RyaWN0XFxcXGInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnYWxpYXMnLCBlbmQ6ICc9JyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTlVNQkVSXG4gICAgXVxuICB9XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgIC8vIE1vb25zY3JpcHQga2V5d29yZHNcbiAgICAgICdpZiB0aGVuIG5vdCBmb3IgaW4gd2hpbGUgZG8gcmV0dXJuIGVsc2UgZWxzZWlmIGJyZWFrIGNvbnRpbnVlIHN3aXRjaCBhbmQgb3IgJyArXG4gICAgICAndW5sZXNzIHdoZW4gY2xhc3MgZXh0ZW5kcyBzdXBlciBsb2NhbCBpbXBvcnQgZXhwb3J0IGZyb20gdXNpbmcnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBuaWwnLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ19HIF9WRVJTSU9OIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgJyArXG4gICAgICAnbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgJyArXG4gICAgICAnc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBjb3JvdXRpbmUgZGVidWcgJyArXG4gICAgICAnaW8gbWF0aCBvcyBwYWNrYWdlIHN0cmluZyB0YWJsZSdcbiAgfTtcbiAgdmFyIEpTX0lERU5UX1JFID0gJ1tBLVphLXokX11bMC05QS1aYS16JF9dKic7XG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC8jXFx7LywgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLmluaGVyaXQoaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge3N0YXJ0czoge2VuZDogJyhcXFxccyovKT8nLCByZWxldmFuY2U6IDB9fSksIC8vIGEgbnVtYmVyIHRyaWVzIHRvIGVhdCB0aGUgZm9sbG93aW5nIHNsYXNoIHRvIHByZXZlbnQgdHJlYXRpbmcgaXQgYXMgYSByZWdleHBcbiAgICB7XG4gICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAvJy8sIGVuZDogLycvLFxuICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgU1VCU1RdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICAgIGJlZ2luOiAnQF9fJyArIGhsanMuSURFTlRfUkVcbiAgICB9LFxuICAgIHtcbiAgICAgIGJlZ2luOiAnQCcgKyBobGpzLklERU5UX1JFIC8vIHJlbGV2YW5jZSBib29zdGVyIG9uIHBhciB3aXRoIENvZmZlZVNjcmlwdFxuICAgIH0sXG4gICAge1xuICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnXFxcXFxcXFwnICsgaGxqcy5JREVOVF9SRSAvLyBpbnN0XFxtZXRob2RcbiAgICB9XG4gIF07XG4gIFNVQlNULmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBKU19JREVOVF9SRX0pO1xuICB2YXIgUEFSQU1TX1JFID0gJyhcXFxcKC4qXFxcXCkpP1xcXFxzKlxcXFxCWy09XT4nO1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKFteXFxcXChdJywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgLyogV2UgbmVlZCBhbm90aGVyIGNvbnRhaW5lZCBuYW1lbGVzcyBtb2RlIHRvIG5vdCBoYXZlIGV2ZXJ5IG5lc3RlZFxuICAgIHBhaXIgb2YgcGFyZW5zIHRvIGJlIGNhbGxlZCBcInBhcmFtc1wiICovXG4gICAgY29udGFpbnM6IFt7XG4gICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sXG4gICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICBjb250YWluczogWydzZWxmJ10uY29uY2F0KEVYUFJFU1NJT05TKVxuICAgIH1dXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21vb24nXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogL1xcL1xcKi8sXG4gICAgY29udGFpbnM6IEVYUFJFU1NJT05TLmNvbmNhdChbXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLCAgLy8gZnVuY3Rpb246IC0+ID0+XG4gICAgICAgIGJlZ2luOiAnXlxcXFxzKicgKyBKU19JREVOVF9SRSArICdcXFxccyo9XFxcXHMqJyArIFBBUkFNU19SRSwgZW5kOiAnWy09XT4nLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtUSVRMRSwgUEFSQU1TXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9bXFwoLDo9XVxccyovLCAvLyBhbm9ueW1vdXMgZnVuY3Rpb24gc3RhcnRcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgIGJlZ2luOiBQQVJBTVNfUkUsIGVuZDogJ1stPV0+JyxcbiAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgY29udGFpbnM6IFtQQVJBTVNdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsXG4gICAgICAgIGVuZDogJyQnLFxuICAgICAgICBpbGxlZ2FsOiAvWzo9XCJcXFtcXF1dLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcycsXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bOj1cIlxcW1xcXV0vLFxuICAgICAgICAgICAgY29udGFpbnM6IFtUSVRMRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFRJVExFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ25hbWUnLCAgICAvLyB0YWJsZVxuICAgICAgICBiZWdpbjogSlNfSURFTlRfUkUgKyAnOicsIGVuZDogJzonLFxuICAgICAgICByZXR1cm5CZWdpbjogdHJ1ZSwgcmV0dXJuRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdKVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6XG4gICAgICAgICAgJ2J1aWxkIGNyZWF0ZSBpbmRleCBkZWxldGUgZHJvcCBleHBsYWluIGluZmVyfDEwIGluc2VydCBtZXJnZSBwcmVwYXJlIHNlbGVjdCB1cGRhdGUgdXBzZXJ0fDEwJyxcbiAgICAgICAgZW5kOiAvOy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIC8vIFRha2VuIGZyb20gaHR0cDovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWxcbiAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2FsbCBhbHRlciBhbmFseXplIGFuZCBhbnkgYXJyYXkgYXMgYXNjIGJlZ2luIGJldHdlZW4gYmluYXJ5IGJvb2xlYW4gYnJlYWsgYnVja2V0IGJ1aWxkIGJ5IGNhbGwgJyArXG4gICAgICAgICAgICAnY2FzZSBjYXN0IGNsdXN0ZXIgY29sbGF0ZSBjb2xsZWN0aW9uIGNvbW1pdCBjb25uZWN0IGNvbnRpbnVlIGNvcnJlbGF0ZSBjb3ZlciBjcmVhdGUgZGF0YWJhc2UgJyArXG4gICAgICAgICAgICAnZGF0YXNldCBkYXRhc3RvcmUgZGVjbGFyZSBkZWNyZW1lbnQgZGVsZXRlIGRlcml2ZWQgZGVzYyBkZXNjcmliZSBkaXN0aW5jdCBkbyBkcm9wIGVhY2ggZWxlbWVudCAnICtcbiAgICAgICAgICAgICdlbHNlIGVuZCBldmVyeSBleGNlcHQgZXhjbHVkZSBleGVjdXRlIGV4aXN0cyBleHBsYWluIGZldGNoIGZpcnN0IGZsYXR0ZW4gZm9yIGZvcmNlIGZyb20gJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gZ3JhbnQgZ3JvdXAgZ3NpIGhhdmluZyBpZiBpZ25vcmUgaWxpa2UgaW4gaW5jbHVkZSBpbmNyZW1lbnQgaW5kZXggaW5mZXIgaW5saW5lIGlubmVyICcgK1xuICAgICAgICAgICAgJ2luc2VydCBpbnRlcnNlY3QgaW50byBpcyBqb2luIGtleSBrZXlzIGtleXNwYWNlIGtub3duIGxhc3QgbGVmdCBsZXQgbGV0dGluZyBsaWtlIGxpbWl0IGxzbSBtYXAgJyArXG4gICAgICAgICAgICAnbWFwcGluZyBtYXRjaGVkIG1hdGVyaWFsaXplZCBtZXJnZSBtaW51cyBuYW1lc3BhY2UgbmVzdCBub3QgbnVtYmVyIG9iamVjdCBvZmZzZXQgb24gJyArXG4gICAgICAgICAgICAnb3B0aW9uIG9yIG9yZGVyIG91dGVyIG92ZXIgcGFyc2UgcGFydGl0aW9uIHBhc3N3b3JkIHBhdGggcG9vbCBwcmVwYXJlIHByaW1hcnkgcHJpdmF0ZSBwcml2aWxlZ2UgJyArXG4gICAgICAgICAgICAncHJvY2VkdXJlIHB1YmxpYyByYXcgcmVhbG0gcmVkdWNlIHJlbmFtZSByZXR1cm4gcmV0dXJuaW5nIHJldm9rZSByaWdodCByb2xlIHJvbGxiYWNrIHNhdGlzZmllcyAnICtcbiAgICAgICAgICAgICdzY2hlbWEgc2VsZWN0IHNlbGYgc2VtaSBzZXQgc2hvdyBzb21lIHN0YXJ0IHN0YXRpc3RpY3Mgc3RyaW5nIHN5c3RlbSB0aGVuIHRvIHRyYW5zYWN0aW9uIHRyaWdnZXIgJyArXG4gICAgICAgICAgICAndHJ1bmNhdGUgdW5kZXIgdW5pb24gdW5pcXVlIHVua25vd24gdW5uZXN0IHVuc2V0IHVwZGF0ZSB1cHNlcnQgdXNlIHVzZXIgdXNpbmcgdmFsaWRhdGUgdmFsdWUgJyArXG4gICAgICAgICAgICAndmFsdWVkIHZhbHVlcyB2aWEgdmlldyB3aGVuIHdoZXJlIHdoaWxlIHdpdGggd2l0aGluIHdvcmsgeG9yJyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9saXRlcmFscy5odG1sXG4gICAgICAgICAgbGl0ZXJhbDpcbiAgICAgICAgICAgICd0cnVlIGZhbHNlIG51bGwgbWlzc2luZ3w1JyxcbiAgICAgICAgICAvLyBUYWtlbiBmcm9tIGh0dHA6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMuaHRtbFxuICAgICAgICAgIGJ1aWx0X2luOlxuICAgICAgICAgICAgJ2FycmF5X2FnZyBhcnJheV9hcHBlbmQgYXJyYXlfY29uY2F0IGFycmF5X2NvbnRhaW5zIGFycmF5X2NvdW50IGFycmF5X2Rpc3RpbmN0IGFycmF5X2lmbnVsbCBhcnJheV9sZW5ndGggJyArXG4gICAgICAgICAgICAnYXJyYXlfbWF4IGFycmF5X21pbiBhcnJheV9wb3NpdGlvbiBhcnJheV9wcmVwZW5kIGFycmF5X3B1dCBhcnJheV9yYW5nZSBhcnJheV9yZW1vdmUgYXJyYXlfcmVwZWF0IGFycmF5X3JlcGxhY2UgJyArXG4gICAgICAgICAgICAnYXJyYXlfcmV2ZXJzZSBhcnJheV9zb3J0IGFycmF5X3N1bSBhdmcgY291bnQgbWF4IG1pbiBzdW0gZ3JlYXRlc3QgbGVhc3QgaWZtaXNzaW5nIGlmbWlzc2luZ29ybnVsbCBpZm51bGwgJyArXG4gICAgICAgICAgICAnbWlzc2luZ2lmIG51bGxpZiBpZmluZiBpZm5hbiBpZm5hbm9yaW5mIG5hbmluZiBuZWdpbmZpZiBwb3NpbmZpZiBjbG9ja19taWxsaXMgY2xvY2tfc3RyIGRhdGVfYWRkX21pbGxpcyAnICtcbiAgICAgICAgICAgICdkYXRlX2FkZF9zdHIgZGF0ZV9kaWZmX21pbGxpcyBkYXRlX2RpZmZfc3RyIGRhdGVfcGFydF9taWxsaXMgZGF0ZV9wYXJ0X3N0ciBkYXRlX3RydW5jX21pbGxpcyBkYXRlX3RydW5jX3N0ciAnICtcbiAgICAgICAgICAgICdkdXJhdGlvbl90b19zdHIgbWlsbGlzIHN0cl90b19taWxsaXMgbWlsbGlzX3RvX3N0ciBtaWxsaXNfdG9fdXRjIG1pbGxpc190b196b25lX25hbWUgbm93X21pbGxpcyBub3dfc3RyICcgK1xuICAgICAgICAgICAgJ3N0cl90b19kdXJhdGlvbiBzdHJfdG9fdXRjIHN0cl90b196b25lX25hbWUgZGVjb2RlX2pzb24gZW5jb2RlX2pzb24gZW5jb2RlZF9zaXplIHBvbHlfbGVuZ3RoIGJhc2U2NCBiYXNlNjRfZW5jb2RlICcgK1xuICAgICAgICAgICAgJ2Jhc2U2NF9kZWNvZGUgbWV0YSB1dWlkIGFicyBhY29zIGFzaW4gYXRhbiBhdGFuMiBjZWlsIGNvcyBkZWdyZWVzIGUgZXhwIGxuIGxvZyBmbG9vciBwaSBwb3dlciByYWRpYW5zIHJhbmRvbSAnICtcbiAgICAgICAgICAgICdyb3VuZCBzaWduIHNpbiBzcXJ0IHRhbiB0cnVuYyBvYmplY3RfbGVuZ3RoIG9iamVjdF9uYW1lcyBvYmplY3RfcGFpcnMgb2JqZWN0X2lubmVyX3BhaXJzIG9iamVjdF92YWx1ZXMgJyArXG4gICAgICAgICAgICAnb2JqZWN0X2lubmVyX3ZhbHVlcyBvYmplY3RfYWRkIG9iamVjdF9wdXQgb2JqZWN0X3JlbW92ZSBvYmplY3RfdW53cmFwIHJlZ2V4cF9jb250YWlucyByZWdleHBfbGlrZSByZWdleHBfcG9zaXRpb24gJyArXG4gICAgICAgICAgICAncmVnZXhwX3JlcGxhY2UgY29udGFpbnMgaW5pdGNhcCBsZW5ndGggbG93ZXIgbHRyaW0gcG9zaXRpb24gcmVwZWF0IHJlcGxhY2UgcnRyaW0gc3BsaXQgc3Vic3RyIHRpdGxlIHRyaW0gdXBwZXIgJyArXG4gICAgICAgICAgICAnaXNhcnJheSBpc2F0b20gaXNib29sZWFuIGlzbnVtYmVyIGlzb2JqZWN0IGlzc3RyaW5nIHR5cGUgdG9hcnJheSB0b2F0b20gdG9ib29sZWFuIHRvbnVtYmVyIHRvb2JqZWN0IHRvc3RyaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgICAgICAgICByZWxldmFuY2U6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIFZBUiA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogL1xcJFxcZCsvfSxcbiAgICAgIHtiZWdpbjogL1xcJFxcey8sIGVuZDogL30vfSxcbiAgICAgIHtiZWdpbjogJ1tcXFxcJFxcXFxAXScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkV9XG4gICAgXVxuICB9O1xuICB2YXIgREVGQVVMVCA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnW2Etei9fXSsnLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnb24gb2ZmIHllcyBubyB0cnVlIGZhbHNlIG5vbmUgYmxvY2tlZCBkZWJ1ZyBpbmZvIG5vdGljZSB3YXJuIGVycm9yIGNyaXQgJyArXG4gICAgICAgICdzZWxlY3QgYnJlYWsgbGFzdCBwZXJtYW5lbnQgcmVkaXJlY3Qga3F1ZXVlIHJ0c2lnIGVwb2xsIHBvbGwgL2Rldi9wb2xsJ1xuICAgIH0sXG4gICAgcmVsZXZhbmNlOiAwLFxuICAgIGlsbGVnYWw6ICc9PicsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvLyB0aGlzIHN3YWxsb3dzIGVudGlyZSBVUkxzIHRvIGF2b2lkIGRldGVjdGluZyBudW1iZXJzIHdpdGhpblxuICAgICAge1xuICAgICAgICBiZWdpbjogJyhbYS16XSspOi8nLCBlbmQ6ICdcXFxccycsIGVuZHNXaXRoUGFyZW50OiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1ZBUl1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3JlZ2V4cCcsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBWQVJdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogXCJcXFxcc1xcXFxeXCIsIGVuZDogXCJcXFxcc3x7fDtcIiwgcmV0dXJuRW5kOiB0cnVlfSxcbiAgICAgICAgICAvLyByZWdleHAgbG9jYXRpb25zICh+LCB+KilcbiAgICAgICAgICB7YmVnaW46IFwiflxcXFwqP1xcXFxzK1wiLCBlbmQ6IFwiXFxcXHN8e3w7XCIsIHJldHVybkVuZDogdHJ1ZX0sXG4gICAgICAgICAgLy8gKi5leGFtcGxlLmNvbVxuICAgICAgICAgIHtiZWdpbjogXCJcXFxcKihcXFxcLlthLXpcXFxcLV0rKStcIn0sXG4gICAgICAgICAgLy8gc3ViLmV4YW1wbGUuKlxuICAgICAgICAgIHtiZWdpbjogXCIoW2EtelxcXFwtXStcXFxcLikrXFxcXCpcIn1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIElQXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJcXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9XFxcXC5cXFxcZHsxLDN9KDpcXFxcZHsxLDV9KT9cXFxcYidcbiAgICAgIH0sXG4gICAgICAvLyB1bml0c1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJ1xcXFxiXFxcXGQrW2tLbU1nR2RzaGR3eV0qXFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBWQVJcbiAgICBdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ25naW54Y29uZiddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJ1xcXFxzK3snLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgZW5kOiAneycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnc2VjdGlvbicsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUgKyAnXFxcXHMnLCBlbmQ6ICc7fHsnLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICAgICAgYmVnaW46IGhsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgICAgIHN0YXJ0czogREVGQVVMVFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXSxcbiAgICBpbGxlZ2FsOiAnW15cXFxcc1xcXFx9XSdcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyduaW0nXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZHIgYW5kIGFzIGFzbSBiaW5kIGJsb2NrIGJyZWFrIGNhc2UgY2FzdCBjb25zdCBjb250aW51ZSBjb252ZXJ0ZXIgJyArXG4gICAgICAgICdkaXNjYXJkIGRpc3RpbmN0IGRpdiBkbyBlbGlmIGVsc2UgZW5kIGVudW0gZXhjZXB0IGV4cG9ydCBmaW5hbGx5ICcgK1xuICAgICAgICAnZm9yIGZyb20gZ2VuZXJpYyBpZiBpbXBvcnQgaW4gaW5jbHVkZSBpbnRlcmZhY2UgaXMgaXNub3QgaXRlcmF0b3IgJyArXG4gICAgICAgICdsZXQgbWFjcm8gbWV0aG9kIG1peGluIG1vZCBuaWwgbm90IG5vdGluIG9iamVjdCBvZiBvciBvdXQgcHJvYyBwdHIgJyArXG4gICAgICAgICdyYWlzZSByZWYgcmV0dXJuIHNobCBzaHIgc3RhdGljIHRlbXBsYXRlIHRyeSB0dXBsZSB0eXBlIHVzaW5nIHZhciAnICtcbiAgICAgICAgJ3doZW4gd2hpbGUgd2l0aCB3aXRob3V0IHhvciB5aWVsZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnc2hhcmVkIGd1YXJkZWQgc3RkaW4gc3Rkb3V0IHN0ZGVyciByZXN1bHQgdHJ1ZSBmYWxzZScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2ludCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQgdWludDggdWludDE2IHVpbnQzMiB1aW50NjQgZmxvYXQgJyArXG4gICAgICAgICdmbG9hdDMyIGZsb2F0NjQgYm9vbCBjaGFyIHN0cmluZyBjc3RyaW5nIHBvaW50ZXIgZXhwciBzdG10IHZvaWQgJyArXG4gICAgICAgICdhdXRvIGFueSByYW5nZSBhcnJheSBvcGVuYXJyYXkgdmFyYXJncyBzZXEgc2V0IGNsb25nIGN1bG9uZyBjY2hhciAnICtcbiAgICAgICAgJ2NzY2hhciBjc2hvcnQgY2ludCBjc2l6ZSBjbG9uZ2xvbmcgY2Zsb2F0IGNkb3VibGUgY2xvbmdkb3VibGUgJyArXG4gICAgICAgICdjdWNoYXIgY3VzaG9ydCBjdWludCBjdWxvbmdsb25nIGNzdHJpbmdhcnJheSBzZW1pc3RhdGljJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFsge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgLy8gQWN0dWFsbHkgcHJhZ21hXG4gICAgICAgIGJlZ2luOiAve1xcLi8sXG4gICAgICAgIGVuZDogL1xcLn0vLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LCB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvW2EtekEtWl1cXHcqXCIvLFxuICAgICAgICBlbmQ6IC9cIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbe2JlZ2luOiAvXCJcIi99XVxuICAgICAgfSwge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogLyhbYS16QS1aXVxcdyopP1wiXCJcIi8sXG4gICAgICAgIGVuZDogL1wiXCJcIi9cbiAgICAgIH0sXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46IC9cXGJbQS1aXVxcdytcXGIvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogL1xcYigwW3hYXVswLTlhLWZBLUZdW18wLTlhLWZBLUZdKikoJz9baUl1VV0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYigwb1swLTddW18wLTddKikoJz9baUl1VWZGXSg4fDE2fDMyfDY0KSk/L30sXG4gICAgICAgICAge2JlZ2luOiAvXFxiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LFxuICAgICAgICAgIHtiZWdpbjogL1xcYihcXGRbX1xcZF0qKSgnP1tpSXVVZkZdKDh8MTZ8MzJ8NjQpKT8vfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE5JWF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ3JlYyB3aXRoIGxldCBpbiBpbmhlcml0IGFzc2VydCBpZiBlbHNlIHRoZW4nLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBvciBhbmQgbnVsbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnaW1wb3J0IGFib3J0IGJhc2VOYW1lT2YgZGlyT2YgaXNOdWxsIGJ1aWx0aW5zIG1hcCByZW1vdmVBdHRycyB0aHJvdyAnICtcbiAgICAgICd0b1N0cmluZyBkZXJpdmF0aW9uJ1xuICB9O1xuICB2YXIgQU5USVFVT1RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcJFxcey8sXG4gICAgZW5kOiAvfS8sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEU1xuICB9O1xuICB2YXIgQVRUUlMgPSB7XG4gICAgYmVnaW46IC9bYS16QS1aMC05LV9dKyhcXHMqPSkvLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgIGJlZ2luOiAvXFxTKy9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW0FOVElRVU9URV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogXCInJ1wiLCBlbmQ6IFwiJydcIn0sXG4gICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ31cbiAgICBdXG4gIH07XG4gIHZhciBFWFBSRVNTSU9OUyA9IFtcbiAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICBTVFJJTkcsXG4gICAgQVRUUlNcbiAgXTtcbiAgQU5USVFVT1RFLmNvbnRhaW5zID0gRVhQUkVTU0lPTlM7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogW1wibml4b3NcIl0sXG4gICAga2V5d29yZHM6IE5JWF9LRVlXT1JEUyxcbiAgICBjb250YWluczogRVhQUkVTU0lPTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBDT05TVEFOVFMgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkKEFETUlOVE9PTFN8QVBQREFUQXxDREJVUk5fQVJFQXxDTURMSU5FfENPTU1PTkZJTEVTMzJ8Q09NTU9ORklMRVM2NHxDT01NT05GSUxFU3xDT09LSUVTfERFU0tUT1B8RE9DVU1FTlRTfEVYRURJUnxFWEVGSUxFfEVYRVBBVEh8RkFWT1JJVEVTfEZPTlRTfEhJU1RPUll8SFdORFBBUkVOVHxJTlNURElSfElOVEVSTkVUX0NBQ0hFfExBTkdVQUdFfExPQ0FMQVBQREFUQXxNVVNJQ3xORVRIT09EfE9VVERJUnxQSUNUVVJFU3xQTFVHSU5TRElSfFBSSU5USE9PRHxQUk9GSUxFfFBST0dSQU1GSUxFUzMyfFBST0dSQU1GSUxFUzY0fFBST0dSQU1GSUxFU3xRVUlDS0xBVU5DSHxSRUNFTlR8UkVTT1VSQ0VTX0xPQ0FMSVpFRHxSRVNPVVJDRVN8U0VORFRPfFNNUFJPR1JBTVN8U01TVEFSVFVQfFNUQVJUTUVOVXxTWVNESVJ8VEVNUHxURU1QTEFURVN8VklERU9TfFdJTkRJUikvXG4gIH07XG5cbiAgdmFyIERFRklORVMgPSB7XG4gICAgLy8gJHtkZWZpbmVzfVxuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCt7W1xcd1xcLjotXSt9L1xuICB9O1xuXG4gIHZhciBWQVJJQUJMRVMgPSB7XG4gICAgLy8gJHZhcmlhYmxlc1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogL1xcJCtcXHcrLyxcbiAgICBpbGxlZ2FsOiAvXFwoXFwpe30vXG4gIH07XG5cbiAgdmFyIExBTkdVQUdFUyA9IHtcbiAgICAvLyAkKGxhbmd1YWdlX3N0cmluZ3MpXG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFwkK1xcKFtcXHdcXF5cXC46LV0rXFwpL1xuICB9O1xuXG4gIHZhciBQQVJBTUVURVJTID0ge1xuICAgIC8vIGNvbW1hbmQgcGFyYW1ldGVyc1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICcoQVJDSElWRXxGSUxFX0FUVFJJQlVURV9BUkNISVZFfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SEtDUnxIS0NVfEhLRER8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0RZTl9EQVRBfEhLRVlfTE9DQUxfTUFDSElORXxIS0VZX1BFUkZPUk1BTkNFX0RBVEF8SEtFWV9VU0VSU3xIS0xNfEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SURJR05PUkV8SUROT3xJRE9LfElEUkVUUll8SURZRVN8TUJfQUJPUlRSRVRSWUlHTk9SRXxNQl9ERUZCVVRUT04xfE1CX0RFRkJVVFRPTjJ8TUJfREVGQlVUVE9OM3xNQl9ERUZCVVRUT040fE1CX0lDT05FWENMQU1BVElPTnxNQl9JQ09OSU5GT1JNQVRJT058TUJfSUNPTlFVRVNUSU9OfE1CX0lDT05TVE9QfE1CX09LfE1CX09LQ0FOQ0VMfE1CX1JFVFJZQ0FOQ0VMfE1CX1JJR0hUfE1CX1JUTFJFQURJTkd8TUJfU0VURk9SRUdST1VORHxNQl9UT1BNT1NUfE1CX1VTRVJJQ09OfE1CX1lFU05PfE5PUk1BTHxPRkZMSU5FfFJFQURPTkxZfFNIQ1RYfFNIRUxMX0NPTlRFWFR8U1lTVEVNfFRFTVBPUkFSWSknXG4gIH07XG5cbiAgdmFyIENPTVBJTEVSID0ge1xuICAgIC8vICFjb21waWxlcl9mbGFnc1xuICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgIGJlZ2luOiAvXFwhKGFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVmaW5lfGRlbGZpbGV8ZWNob3xlbHNlfGVuZGlmfGVycm9yfGV4ZWN1dGV8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnN5c3RlbXxpZmRlZnxpZm1hY3JvZGVmfGlmbWFjcm9uZGVmfGlmbmRlZnxpZnxpbmNsdWRlfGluc2VydG1hY3JvfG1hY3JvZW5kfG1hY3JvfG1ha2Vuc2lzfHBhY2toZHJ8c2VhcmNocGFyc2V8c2VhcmNocmVwbGFjZXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpL1xuICB9O1xuXG4gIHZhciBNRVRBQ0hBUlMgPSB7XG4gICAgLy8gJFxcbiwgJFxcciwgJFxcdCwgJCRcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgYmVnaW46IC9cXCQoXFxcXFtucnRdfFxcJCkvXG4gIH07XG5cbiAgdmFyIFBMVUdJTlMgPSB7XG4gICAgLy8gcGx1Zzo6aW5zXG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luOiAvXFx3K1xcOlxcOlxcdysvXG4gIH07XG5cbiAgICB2YXIgU1RSSU5HID0ge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgIE1FVEFDSEFSUyxcbiAgICAgICAgQ09OU1RBTlRTLFxuICAgICAgICBERUZJTkVTLFxuICAgICAgICBWQVJJQUJMRVMsXG4gICAgICAgIExBTkdVQUdFU1xuICAgICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAnQWJvcnQgQWRkQnJhbmRpbmdJbWFnZSBBZGRTaXplIEFsbG93Um9vdERpckluc3RhbGwgQWxsb3dTa2lwRmlsZXMgQXV0b0Nsb3NlV2luZG93IEJHRm9udCBCR0dyYWRpZW50IEJyYW5kaW5nVGV4dCBCcmluZ1RvRnJvbnQgQ2FsbCBDYWxsSW5zdERMTCBDYXB0aW9uIENoYW5nZVVJIENoZWNrQml0bWFwIENsZWFyRXJyb3JzIENvbXBsZXRlZFRleHQgQ29tcG9uZW50VGV4dCBDb3B5RmlsZXMgQ1JDQ2hlY2sgQ3JlYXRlRGlyZWN0b3J5IENyZWF0ZUZvbnQgQ3JlYXRlU2hvcnRDdXQgRGVsZXRlIERlbGV0ZUlOSVNlYyBEZWxldGVJTklTdHIgRGVsZXRlUmVnS2V5IERlbGV0ZVJlZ1ZhbHVlIERldGFpbFByaW50IERldGFpbHNCdXR0b25UZXh0IERpclRleHQgRGlyVmFyIERpclZlcmlmeSBFbmFibGVXaW5kb3cgRW51bVJlZ0tleSBFbnVtUmVnVmFsdWUgRXhjaCBFeGVjIEV4ZWNTaGVsbCBFeGVjV2FpdCBFeHBhbmRFbnZTdHJpbmdzIEZpbGUgRmlsZUJ1ZlNpemUgRmlsZUNsb3NlIEZpbGVFcnJvclRleHQgRmlsZU9wZW4gRmlsZVJlYWQgRmlsZVJlYWRCeXRlIEZpbGVSZWFkVVRGMTZMRSBGaWxlUmVhZFdvcmQgRmlsZVNlZWsgRmlsZVdyaXRlIEZpbGVXcml0ZUJ5dGUgRmlsZVdyaXRlVVRGMTZMRSBGaWxlV3JpdGVXb3JkIEZpbmRDbG9zZSBGaW5kRmlyc3QgRmluZE5leHQgRmluZFdpbmRvdyBGbHVzaElOSSBGdW5jdGlvbkVuZCBHZXRDdXJJbnN0VHlwZSBHZXRDdXJyZW50QWRkcmVzcyBHZXREbGdJdGVtIEdldERMTFZlcnNpb24gR2V0RExMVmVyc2lvbkxvY2FsIEdldEVycm9yTGV2ZWwgR2V0RmlsZVRpbWUgR2V0RmlsZVRpbWVMb2NhbCBHZXRGdWxsUGF0aE5hbWUgR2V0RnVuY3Rpb25BZGRyZXNzIEdldEluc3REaXJFcnJvciBHZXRMYWJlbEFkZHJlc3MgR2V0VGVtcEZpbGVOYW1lIEdvdG8gSGlkZVdpbmRvdyBJY29uIElmQWJvcnQgSWZFcnJvcnMgSWZGaWxlRXhpc3RzIElmUmVib290RmxhZyBJZlNpbGVudCBJbml0UGx1Z2luc0RpciBJbnN0YWxsQnV0dG9uVGV4dCBJbnN0YWxsQ29sb3JzIEluc3RhbGxEaXIgSW5zdGFsbERpclJlZ0tleSBJbnN0UHJvZ3Jlc3NGbGFncyBJbnN0VHlwZSBJbnN0VHlwZUdldFRleHQgSW5zdFR5cGVTZXRUZXh0IEludENtcCBJbnRDbXBVIEludEZtdCBJbnRPcCBJc1dpbmRvdyBMYW5nU3RyaW5nIExpY2Vuc2VCa0NvbG9yIExpY2Vuc2VEYXRhIExpY2Vuc2VGb3JjZVNlbGVjdGlvbiBMaWNlbnNlTGFuZ1N0cmluZyBMaWNlbnNlVGV4dCBMb2FkTGFuZ3VhZ2VGaWxlIExvY2tXaW5kb3cgTG9nU2V0IExvZ1RleHQgTWFuaWZlc3REUElBd2FyZSBNYW5pZmVzdFN1cHBvcnRlZE9TIE1lc3NhZ2VCb3ggTWlzY0J1dHRvblRleHQgTmFtZSBOb3AgT3V0RmlsZSBQYWdlIFBhZ2VDYWxsYmFja3MgUGFnZUV4RW5kIFBvcCBQdXNoIFF1aXQgUmVhZEVudlN0ciBSZWFkSU5JU3RyIFJlYWRSZWdEV09SRCBSZWFkUmVnU3RyIFJlYm9vdCBSZWdETEwgUmVuYW1lIFJlcXVlc3RFeGVjdXRpb25MZXZlbCBSZXNlcnZlRmlsZSBSZXR1cm4gUk1EaXIgU2VhcmNoUGF0aCBTZWN0aW9uRW5kIFNlY3Rpb25HZXRGbGFncyBTZWN0aW9uR2V0SW5zdFR5cGVzIFNlY3Rpb25HZXRTaXplIFNlY3Rpb25HZXRUZXh0IFNlY3Rpb25Hcm91cEVuZCBTZWN0aW9uSW4gU2VjdGlvblNldEZsYWdzIFNlY3Rpb25TZXRJbnN0VHlwZXMgU2VjdGlvblNldFNpemUgU2VjdGlvblNldFRleHQgU2VuZE1lc3NhZ2UgU2V0QXV0b0Nsb3NlIFNldEJyYW5kaW5nSW1hZ2UgU2V0Q29tcHJlc3MgU2V0Q29tcHJlc3NvciBTZXRDb21wcmVzc29yRGljdFNpemUgU2V0Q3RsQ29sb3JzIFNldEN1ckluc3RUeXBlIFNldERhdGFibG9ja09wdGltaXplIFNldERhdGVTYXZlIFNldERldGFpbHNQcmludCBTZXREZXRhaWxzVmlldyBTZXRFcnJvckxldmVsIFNldEVycm9ycyBTZXRGaWxlQXR0cmlidXRlcyBTZXRGb250IFNldE91dFBhdGggU2V0T3ZlcndyaXRlIFNldFJlYm9vdEZsYWcgU2V0UmVnVmlldyBTZXRTaGVsbFZhckNvbnRleHQgU2V0U2lsZW50IFNob3dJbnN0RGV0YWlscyBTaG93VW5pbnN0RGV0YWlscyBTaG93V2luZG93IFNpbGVudEluc3RhbGwgU2lsZW50VW5JbnN0YWxsIFNsZWVwIFNwYWNlVGV4dHMgU3RyQ21wIFN0ckNtcFMgU3RyQ3B5IFN0ckxlbiBTdWJDYXB0aW9uIFVuaWNvZGUgVW5pbnN0YWxsQnV0dG9uVGV4dCBVbmluc3RhbGxDYXB0aW9uIFVuaW5zdGFsbEljb24gVW5pbnN0YWxsU3ViQ2FwdGlvbiBVbmluc3RhbGxUZXh0IFVuaW5zdFBhZ2UgVW5SZWdETEwgVmFyIFZJQWRkVmVyc2lvbktleSBWSUZpbGVWZXJzaW9uIFZJUHJvZHVjdFZlcnNpb24gV2luZG93SWNvbiBXcml0ZUlOSVN0ciBXcml0ZVJlZ0JpbiBXcml0ZVJlZ0RXT1JEIFdyaXRlUmVnRXhwYW5kU3RyIFdyaXRlUmVnU3RyIFdyaXRlVW5pbnN0YWxsZXIgWFBTdHlsZScsXG4gICAgICBsaXRlcmFsOlxuICAgICAgJ2FkbWluIGFsbCBhdXRvIGJvdGggYm90dG9tIGJ6aXAyIGNvbG9yZWQgY29tcG9uZW50cyBjdXJyZW50IGN1c3RvbSBkaXJlY3RvcnkgZmFsc2UgZm9yY2UgaGlkZSBoaWdoZXN0IGlmZGlmZiBpZm5ld2VyIGluc3RmaWxlcyBsYXN0dXNlZCBsZWF2ZSBsZWZ0IGxpY2Vuc2UgbGlzdG9ubHkgbHptYSBuZXZlcnNob3cgbm9uZSBub3JtYWwgbm90c2V0IG9mZiBvbiBvcGVuIHByaW50IHJpZ2h0IHNob3cgc2lsZW50IHNpbGVudGxvZyBzbW9vdGggdGV4dG9ubHkgdG9wIHRydWUgdHJ5IHVuLmNvbXBvbmVudHMgdW4uY3VzdG9tIHVuLmRpcmVjdG9yeSB1bi5pbnN0ZmlsZXMgdW4ubGljZW5zZSB1bmluc3RDb25maXJtIHVzZXIgV2luMTAgV2luNyBXaW44IFdpblZpc3RhIHpsaWInXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICc7JyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ0Z1bmN0aW9uIFBhZ2VFeCBTZWN0aW9uIFNlY3Rpb25Hcm91cCcsIGVuZDogJyQnXG4gICAgICB9LFxuICAgICAgU1RSSU5HLFxuICAgICAgQ09NUElMRVIsXG4gICAgICBERUZJTkVTLFxuICAgICAgVkFSSUFCTEVTLFxuICAgICAgTEFOR1VBR0VTLFxuICAgICAgUEFSQU1FVEVSUyxcbiAgICAgIFBMVUdJTlMsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEFQSV9DTEFTUyA9IHtcbiAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgYmVnaW46ICdcXFxcYihBVnxDQXxDRnxDR3xDSXxDTHxDTXxDTnxDVHxNS3xNUHxNVEt8TVRMfE5TfFNDTnxTS3xVSXxXS3xYQylcXFxcdysnLFxuICB9O1xuICB2YXIgT0JKQ19LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2ludCBmbG9hdCB3aGlsZSBjaGFyIGV4cG9ydCBzaXplb2YgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgZm9yIHVuaW9uICcgK1xuICAgICAgJ3Vuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIGJvb2wgbXV0YWJsZSBpZiBkbyByZXR1cm4gZ290byB2b2lkICcgK1xuICAgICAgJ2VudW0gZWxzZSBicmVhayBleHRlcm4gYXNtIGNhc2Ugc2hvcnQgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgJyArXG4gICAgICAnc2lnbmVkIHR5cGVuYW1lIHRoaXMgc3dpdGNoIGNvbnRpbnVlIHdjaGFyX3QgaW5saW5lIHJlYWRvbmx5IGFzc2lnbiAnICtcbiAgICAgICdyZWFkd3JpdGUgc2VsZiBAc3luY2hyb25pemVkIGlkIHR5cGVvZiAnICtcbiAgICAgICdub25hdG9taWMgc3VwZXIgdW5pY2hhciBJQk91dGxldCBJQkFjdGlvbiBzdHJvbmcgd2VhayBjb3B5ICcgK1xuICAgICAgJ2luIG91dCBpbm91dCBieWNvcHkgYnlyZWYgb25ld2F5IF9fc3Ryb25nIF9fd2VhayBfX2Jsb2NrIF9fYXV0b3JlbGVhc2luZyAnICtcbiAgICAgICdAcHJpdmF0ZSBAcHJvdGVjdGVkIEBwdWJsaWMgQHRyeSBAcHJvcGVydHkgQGVuZCBAdGhyb3cgQGNhdGNoIEBmaW5hbGx5ICcgK1xuICAgICAgJ0BhdXRvcmVsZWFzZXBvb2wgQHN5bnRoZXNpemUgQGR5bmFtaWMgQHNlbGVjdG9yIEBvcHRpb25hbCBAcmVxdWlyZWQgJyArXG4gICAgICAnQGVuY29kZSBAcGFja2FnZSBAaW1wb3J0IEBkZWZzIEBjb21wYXRpYmlsaXR5X2FsaWFzICcgK1xuICAgICAgJ19fYnJpZGdlIF9fYnJpZGdlX3RyYW5zZmVyIF9fYnJpZGdlX3JldGFpbmVkIF9fYnJpZGdlX3JldGFpbiAnICtcbiAgICAgICdfX2NvdmFyaWFudCBfX2NvbnRyYXZhcmlhbnQgX19raW5kb2YgJyArXG4gICAgICAnX05vbm51bGwgX051bGxhYmxlIF9OdWxsX3Vuc3BlY2lmaWVkICcgK1xuICAgICAgJ19fRlVOQ1RJT05fXyBfX1BSRVRUWV9GVU5DVElPTl9fIF9fYXR0cmlidXRlX18gJyArXG4gICAgICAnZ2V0dGVyIHNldHRlciByZXRhaW4gdW5zYWZlX3VucmV0YWluZWQgJyArXG4gICAgICAnbm9ubnVsbCBudWxsYWJsZSBudWxsX3Vuc3BlY2lmaWVkIG51bGxfcmVzZXR0YWJsZSBjbGFzcyBpbnN0YW5jZXR5cGUgJyArXG4gICAgICAnTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUiBOU19VTkFWQUlMQUJMRSBOU19SRVFVSVJFU19TVVBFUiAnICtcbiAgICAgICdOU19SRVRVUk5TX0lOTkVSX1BPSU5URVIgTlNfSU5MSU5FIE5TX0FWQUlMQUJMRSBOU19ERVBSRUNBVEVEICcgK1xuICAgICAgJ05TX0VOVU0gTlNfT1BUSU9OUyBOU19TV0lGVF9VTkFWQUlMQUJMRSAnICtcbiAgICAgICdOU19BU1NVTUVfTk9OTlVMTF9CRUdJTiBOU19BU1NVTUVfTk9OTlVMTF9FTkQgJyArXG4gICAgICAnTlNfUkVGSU5FRF9GT1JfU1dJRlQgTlNfU1dJRlRfTkFNRSBOU19TV0lGVF9OT1RIUk9XICcgK1xuICAgICAgJ05TX0RVUklORyBOU19IQU5ETEVSIE5TX0VOREhBTkRMRVIgTlNfVkFMVUVSRVRVUk4gTlNfVk9JRFJFVFVSTicsXG4gICAgbGl0ZXJhbDpcbiAgICAgICdmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMJyxcbiAgICBidWlsdF9pbjpcbiAgICAgICdCT09MIGRpc3BhdGNoX29uY2VfdCBkaXNwYXRjaF9xdWV1ZV90IGRpc3BhdGNoX3N5bmMgZGlzcGF0Y2hfYXN5bmMgZGlzcGF0Y2hfb25jZSdcbiAgfTtcbiAgdmFyIExFWEVNRVMgPSAvW2EtekEtWkBdW2EtekEtWjAtOV9dKi87XG4gIHZhciBDTEFTU19LRVlXT1JEUyA9ICdAaW50ZXJmYWNlIEBjbGFzcyBAcHJvdG9jb2wgQGltcGxlbWVudGF0aW9uJztcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ21tJywgJ29iamMnLCAnb2JqLWMnXSxcbiAgICBrZXl3b3JkczogT0JKQ19LRVlXT1JEUyxcbiAgICBsZXhlbWVzOiBMRVhFTUVTLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEFQSV9DTEFTUyxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnQFwiJywgZW5kOiAnXCInLFxuICAgICAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdbXlxcXFxcXFxcXVxcJycsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnW15cXFxcXFxcXF1bXlxcJ10nXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJyxcbiAgICAgICAgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgeyBiZWdpbjogJ1xcXCInLCBlbmQ6ICdcXFwiJyB9LFxuICAgICAgICAgICAgICB7IGJlZ2luOiAnPCcsIGVuZDogJz4nIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW46ICcoJyArIENMQVNTX0tFWVdPUkRTLnNwbGl0KCcgJykuam9pbignfCcpICsgJylcXFxcYicsIGVuZDogJyh7fCQpJywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IENMQVNTX0tFWVdPUkRTLCBsZXhlbWVzOiBMRVhFTUVTLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nK2hsanMuVU5ERVJTQ09SRV9JREVOVF9SRSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgLyogbWlzc2luZyBzdXBwb3J0IGZvciBoZXJlZG9jLWxpa2Ugc3RyaW5nIChPQ2FtbCA0LjAuMispICovXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtbCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYW5kIGFzIGFzc2VydCBhc3IgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCAnICtcbiAgICAgICAgJ2V4Y2VwdGlvbiBleHRlcm5hbCBmb3IgZnVuIGZ1bmN0aW9uIGZ1bmN0b3IgaWYgaW4gaW5jbHVkZSAnICtcbiAgICAgICAgJ2luaGVyaXQhIGluaGVyaXQgaW5pdGlhbGl6ZXIgbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCF8MTAgbWV0aG9kICcgK1xuICAgICAgICAnbW9kIG1vZHVsZSBtdXRhYmxlIG5ldyBvYmplY3Qgb2Ygb3BlbiEgb3BlbiBvciBwcml2YXRlIHJlYyBzaWcgc3RydWN0ICcgK1xuICAgICAgICAndGhlbiB0byB0cnkgdHlwZSB2YWwhIHZhbCB2aXJ0dWFsIHdoZW4gd2hpbGUgd2l0aCAnICtcbiAgICAgICAgLyogY2FtbHA0ICovXG4gICAgICAgICdwYXJzZXIgdmFsdWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8qIGJ1aWx0LWluIHR5cGVzICovXG4gICAgICAgICdhcnJheSBib29sIGJ5dGVzIGNoYXIgZXhufDUgZmxvYXQgaW50IGludDMyIGludDY0IGxpc3QgbGF6eV90fDUgbmF0aXZlaW50fDUgc3RyaW5nIHVuaXQgJyArXG4gICAgICAgIC8qIChzb21lKSB0eXBlcyBpbiBQZXJ2YXNpdmVzICovXG4gICAgICAgICdpbl9jaGFubmVsIG91dF9jaGFubmVsIHJlZicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGlsbGVnYWw6IC9cXC9cXC98Pj4vLFxuICAgIGxleGVtZXM6ICdbYS16X11cXFxcdyohPycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXFsoXFxcXHxcXFxcfCk/XFxcXF18XFxcXChcXFxcKScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJ1xcXFwoXFxcXConLFxuICAgICAgICAnXFxcXCpcXFxcKScsXG4gICAgICAgIHtcbiAgICAgICAgICBjb250YWluczogWydzZWxmJ11cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHsgLyogdHlwZSB2YXJpYWJsZSAqL1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpfXSg/IVxcJylbXFxcXHdcXCddKidcbiAgICAgICAgLyogdGhlIGdyYW1tYXIgaXMgYW1iaWd1b3VzIG9uIGhvdyAnYSdiIHNob3VsZCBiZSBpbnRlcnByZXRlZCBidXQgbm90IHRoZSBjb21waWxlciAqL1xuICAgICAgfSxcbiAgICAgIHsgLyogcG9seW1vcnBoaWMgdmFyaWFudCAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdgW0EtWl1bXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICB7IC8qIG1vZHVsZSBvciBjb25zdHJ1Y3RvciAqL1xuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYltBLVpdW1xcXFx3XFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8qIGRvbid0IGNvbG9yIGlkZW50aWZpZXJzLCBidXQgc2FmZWx5IGNhdGNoIGFsbCBpZGVudGlmaWVycyB3aXRoICcqL1xuICAgICAgICBiZWdpbjogJ1thLXpfXVxcXFx3KlxcJ1tcXFxcd1xcJ10qJywgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2NsYXNzTmFtZTogJ3N0cmluZycsIHJlbGV2YW5jZTogMH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOlxuICAgICAgICAgICdcXFxcYigwW3hYXVthLWZBLUYwLTlfXStbTGxuXT98JyArXG4gICAgICAgICAgJzBbb09dWzAtN19dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtiQl1bMDFfXStbTGxuXT98JyArXG4gICAgICAgICAgJ1swLTldWzAtOV9dKihbTGxuXXwoXFxcXC5bMC05X10qKT8oW2VFXVstK10/WzAtOV9dKyk/KT8pJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL1stPV0+LyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblx0dmFyIFNQRUNJQUxfVkFSUyA9IHtcblx0XHRjbGFzc05hbWU6ICdrZXl3b3JkJyxcblx0XHRiZWdpbjogJ1xcXFwkKGZbYXNuXXx0fHZwW3J0ZF18Y2hpbGRyZW4pJ1xuXHR9LFxuXHRMSVRFUkFMUyA9IHtcblx0XHRjbGFzc05hbWU6ICdsaXRlcmFsJyxcblx0XHRiZWdpbjogJ2ZhbHNlfHRydWV8UEl8dW5kZWYnXG5cdH0sXG5cdE5VTUJFUlMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbnVtYmVyJyxcblx0XHRiZWdpbjogJ1xcXFxiXFxcXGQrKFxcXFwuXFxcXGQrKT8oZS0/XFxcXGQrKT8nLCAvL2FkZHMgMWU1LCAxZS0xMFxuXHRcdHJlbGV2YW5jZTogMFxuXHR9LFxuXHRTVFJJTkcgPSBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDogbnVsbH0pLFxuXHRQUkVQUk8gPSB7XG5cdFx0Y2xhc3NOYW1lOiAnbWV0YScsXG5cdFx0a2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2luY2x1ZGUgdXNlJ30sXG5cdFx0YmVnaW46ICdpbmNsdWRlfHVzZSA8Jyxcblx0XHRlbmQ6ICc+J1xuXHR9LFxuXHRQQVJBTVMgPSB7XG5cdFx0Y2xhc3NOYW1lOiAncGFyYW1zJyxcblx0XHRiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuXHRcdGNvbnRhaW5zOiBbJ3NlbGYnLCBOVU1CRVJTLCBTVFJJTkcsIFNQRUNJQUxfVkFSUywgTElURVJBTFNdXG5cdH0sXG5cdE1PRElGSUVSUyA9IHtcblx0XHRiZWdpbjogJ1sqISMlXScsXG5cdFx0cmVsZXZhbmNlOiAwXG5cdH0sXG5cdEZVTkNUSU9OUyA9IHtcblx0XHRjbGFzc05hbWU6ICdmdW5jdGlvbicsXG5cdFx0YmVnaW5LZXl3b3JkczogJ21vZHVsZSBmdW5jdGlvbicsXG5cdFx0ZW5kOiAnXFxcXD18XFxcXHsnLFxuXHRcdGNvbnRhaW5zOiBbUEFSQU1TLCBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERV1cblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGFsaWFzZXM6IFsnc2NhZCddLFxuXHRcdGtleXdvcmRzOiB7XG5cdFx0XHRrZXl3b3JkOiAnZnVuY3Rpb24gbW9kdWxlIGluY2x1ZGUgdXNlIGZvciBpbnRlcnNlY3Rpb25fZm9yIGlmIGVsc2UgXFxcXCUnLFxuXHRcdFx0bGl0ZXJhbDogJ2ZhbHNlIHRydWUgUEkgdW5kZWYnLFxuXHRcdFx0YnVpbHRfaW46ICdjaXJjbGUgc3F1YXJlIHBvbHlnb24gdGV4dCBzcGhlcmUgY3ViZSBjeWxpbmRlciBwb2x5aGVkcm9uIHRyYW5zbGF0ZSByb3RhdGUgc2NhbGUgcmVzaXplIG1pcnJvciBtdWx0bWF0cml4IGNvbG9yIG9mZnNldCBodWxsIG1pbmtvd3NraSB1bmlvbiBkaWZmZXJlbmNlIGludGVyc2VjdGlvbiBhYnMgc2lnbiBzaW4gY29zIHRhbiBhY29zIGFzaW4gYXRhbiBhdGFuMiBmbG9vciByb3VuZCBjZWlsIGxuIGxvZyBwb3cgc3FydCBleHAgcmFuZHMgbWluIG1heCBjb25jYXQgbG9va3VwIHN0ciBjaHIgc2VhcmNoIHZlcnNpb24gdmVyc2lvbl9udW0gbm9ybSBjcm9zcyBwYXJlbnRfbW9kdWxlIGVjaG8gaW1wb3J0IGltcG9ydF9keGYgZHhmX2xpbmVhcl9leHRydWRlIGxpbmVhcl9leHRydWRlIHJvdGF0ZV9leHRydWRlIHN1cmZhY2UgcHJvamVjdGlvbiByZW5kZXIgY2hpbGRyZW4gZHhmX2Nyb3NzIGR4Zl9kaW0gbGV0IGFzc2lnbidcblx0XHR9LFxuXHRcdGNvbnRhaW5zOiBbXG5cdFx0XHRobGpzLkNfTElORV9DT01NRU5UX01PREUsXG5cdFx0XHRobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuXHRcdFx0TlVNQkVSUyxcblx0XHRcdFBSRVBSTyxcblx0XHRcdFNUUklORyxcblx0XHRcdFNQRUNJQUxfVkFSUyxcblx0XHRcdE1PRElGSUVSUyxcblx0XHRcdEZVTkNUSU9OU1xuXHRcdF1cblx0fVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIE9YWUdFTkVfS0VZV09SRFMgPSAnYWJzdHJhY3QgYWRkIGFuZCBhcnJheSBhcyBhc2MgYXNwZWN0IGFzc2VtYmx5IGFzeW5jIGJlZ2luIGJyZWFrIGJsb2NrIGJ5IGNhc2UgY2xhc3MgY29uY2F0IGNvbnN0IGNvcHkgY29uc3RydWN0b3IgY29udGludWUgJytcbiAgICAnY3JlYXRlIGRlZmF1bHQgZGVsZWdhdGUgZGVzYyBkaXN0aW5jdCBkaXYgZG8gZG93bnRvIGR5bmFtaWMgZWFjaCBlbHNlIGVtcHR5IGVuZCBlbnN1cmUgZW51bSBlcXVhbHMgZXZlbnQgZXhjZXB0IGV4aXQgZXh0ZW5zaW9uIGV4dGVybmFsIGZhbHNlICcrXG4gICAgJ2ZpbmFsIGZpbmFsaXplIGZpbmFsaXplciBmaW5hbGx5IGZsYWdzIGZvciBmb3J3YXJkIGZyb20gZnVuY3Rpb24gZnV0dXJlIGdsb2JhbCBncm91cCBoYXMgaWYgaW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBpbXBsaWVzIGluIGluZGV4IGluaGVyaXRlZCAnK1xuICAgICdpbmxpbmUgaW50ZXJmYWNlIGludG8gaW52YXJpYW50cyBpcyBpdGVyYXRvciBqb2luIGxvY2tlZCBsb2NraW5nIGxvb3AgbWF0Y2hpbmcgbWV0aG9kIG1vZCBtb2R1bGUgbmFtZXNwYWNlIG5lc3RlZCBuZXcgbmlsIG5vdCBub3RpZnkgbnVsbGFibGUgb2YgJytcbiAgICAnb2xkIG9uIG9wZXJhdG9yIG9yIG9yZGVyIG91dCBvdmVycmlkZSBwYXJhbGxlbCBwYXJhbXMgcGFydGlhbCBwaW5uZWQgcHJpdmF0ZSBwcm9jZWR1cmUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyBxdWVyeWFibGUgcmFpc2UgcmVhZCByZWFkb25seSAnK1xuICAgICdyZWNvcmQgcmVpbnRyb2R1Y2UgcmVtb3ZlIHJlcGVhdCByZXF1aXJlIHJlc3VsdCByZXZlcnNlIHNlYWxlZCBzZWxlY3Qgc2VsZiBzZXF1ZW5jZSBzZXQgc2hsIHNociBza2lwIHN0YXRpYyBzdGVwIHNvZnQgdGFrZSB0aGVuIHRvIHRydWUgdHJ5IHR1cGxlICcrXG4gICAgJ3R5cGUgdW5pb24gdW5pdCB1bnNhZmUgdW50aWwgdXNlcyB1c2luZyB2YXIgdmlydHVhbCByYWlzZXMgdm9sYXRpbGUgd2hlcmUgd2hpbGUgd2l0aCB3cml0ZSB4b3IgeWllbGQgYXdhaXQgbWFwcGVkIGRlcHJlY2F0ZWQgc3RkY2FsbCBjZGVjbCBwYXNjYWwgJytcbiAgICAncmVnaXN0ZXIgc2FmZWNhbGwgb3ZlcmxvYWQgbGlicmFyeSBwbGF0Zm9ybSByZWZlcmVuY2UgcGFja2VkIHN0cmljdCBwdWJsaXNoZWQgYXV0b3JlbGVhc2Vwb29sIHNlbGVjdG9yIHN0cm9uZyB3ZWFrIHVucmV0YWluZWQnO1xuICB2YXIgQ1VSTFlfQ09NTUVOVCA9ICBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICByZWxldmFuY2U6IDBcbiAgICB9XG4gICk7XG4gIHZhciBQQVJFTl9DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICdcXFxcKFxcXFwqJyxcbiAgICAnXFxcXCpcXFxcKScsXG4gICAge1xuICAgICAgcmVsZXZhbmNlOiAxMFxuICAgIH1cbiAgKTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJyxcbiAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJyd9XVxuICB9O1xuICB2YXIgQ0hBUl9TVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgYmVnaW46ICcoI1xcXFxkKykrJ1xuICB9O1xuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jdGlvbiBjb25zdHJ1Y3RvciBkZXN0cnVjdG9yIHByb2NlZHVyZSBtZXRob2QnLCBlbmQ6ICdbOjtdJyxcbiAgICBrZXl3b3JkczogJ2Z1bmN0aW9uIGNvbnN0cnVjdG9yfDEwIGRlc3RydWN0b3J8MTAgcHJvY2VkdXJlfDEwIG1ldGhvZHwxMCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuVElUTEVfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAga2V5d29yZHM6IE9YWUdFTkVfS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbU1RSSU5HLCBDSEFSX1NUUklOR11cbiAgICAgIH0sXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5UXG4gICAgXVxuICB9O1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgbGV4ZW1lczogL1xcLj9cXHcrLyxcbiAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICBpbGxlZ2FsOiAnKFwifFxcXFwkW0ctWmctel18XFxcXC9cXFxcKnw8L3w9PnwtPiknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDVVJMWV9DT01NRU5ULCBQQVJFTl9DT01NRU5ULCBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luOiAnPVxcXFxiY2xhc3NcXFxcYicsIGVuZDogJ2VuZDsnLFxuICAgICAgICBrZXl3b3JkczogT1hZR0VORV9LRVlXT1JEUyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBTVFJJTkcsIENIQVJfU1RSSU5HLFxuICAgICAgICAgIENVUkxZX0NPTU1FTlQsIFBBUkVOX0NPTU1FTlQsIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBGVU5DVElPTlxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENVUkxZX1NVQkNPTU1FTlQgPSBobGpzLkNPTU1FTlQoXG4gICAgJ3snLFxuICAgICd9JyxcbiAgICB7XG4gICAgICBjb250YWluczogWydzZWxmJ11cbiAgICB9XG4gICk7XG4gIHJldHVybiB7XG4gICAgc3ViTGFuZ3VhZ2U6ICd4bWwnLCByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXFxcXF5yZW17JyxcbiAgICAgICAgJ30nLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAxMCxcbiAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgQ1VSTFlfU1VCQ09NTUVOVFxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXkAoPzpCQVNFfFVTRXxDTEFTU3xPUFRJT05TKSQnLFxuICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd0aXRsZScsXG4gICAgICAgIGJlZ2luOiAnQFtcXFxcd1xcXFwtXStcXFxcW1tcXFxcd147XFxcXC1dKlxcXFxdKD86XFxcXFtbXFxcXHdeO1xcXFwtXSpcXFxcXSk/KD86LiopJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcJFxcXFx7P1tcXFxcd1xcXFwtXFxcXC5cXFxcOl0rXFxcXH0/J1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnXFxcXF5bXFxcXHdcXFxcLVxcXFwuXFxcXDpdKydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXF4jWzAtOWEtZkEtRl0rJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBNQUNSTyA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi9cbiAgfTtcbiAgdmFyIFRBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogLzwoPyFcXC8pLywgZW5kOiAvPi9cbiAgfTtcbiAgdmFyIFFVT1RFX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvXCIvLCBlbmQ6IC9cIi9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGYuY29uZiddLFxuICAgIGxleGVtZXM6IC9bYS16MC05Xzw+LV0rLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAgYnVpbHRfaW46IC8qIGJsb2NrIG1hdGNoIHBhc3MgYXJlIFwiYWN0aW9uc1wiIGluIHBmLmNvbmYoNSksIHRoZSByZXN0IGFyZVxuICAgICAgICAgICAgICAgICAqIGxleGljYWxseSBzaW1pbGFyIHRvcC1sZXZlbCBjb21tYW5kcy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgJ2Jsb2NrIG1hdGNoIHBhc3MgbG9hZCBhbmNob3J8NSBhbnRpc3Bvb2Z8MTAgc2V0IHRhYmxlJyxcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgICdpbiBvdXQgbG9nIHF1aWNrIG9uIHJkb21haW4gaW5ldCBpbmV0NiBwcm90byBmcm9tIHBvcnQgb3MgdG8gcm91dGUnICtcbiAgICAgICAgJ2FsbG93LW9wdHMgZGl2ZXJ0LXBhY2tldCBkaXZlcnQtcmVwbHkgZGl2ZXJ0LXRvIGZsYWdzIGdyb3VwIGljbXAtdHlwZScgK1xuICAgICAgICAnaWNtcDYtdHlwZSBsYWJlbCBvbmNlIHByb2JhYmlsaXR5IHJlY2lldmVkLW9uIHJ0YWJsZSBwcmlvIHF1ZXVlJyArXG4gICAgICAgICd0b3MgdGFnIHRhZ2dlZCB1c2VyIGtlZXAgZnJhZ21lbnQgZm9yIG9zIGRyb3AnICtcbiAgICAgICAgJ2FmLXRvfDEwIGJpbmF0LXRvfDEwIG5hdC10b3wxMCByZHItdG98MTAgYml0bWFzayBsZWFzdC1zdGF0cyByYW5kb20gcm91bmQtcm9iaW4nICtcbiAgICAgICAgJ3NvdXJjZS1oYXNoIHN0YXRpYy1wb3J0JyArXG4gICAgICAgICdkdXAtdG8gcmVwbHktdG8gcm91dGUtdG8nICtcbiAgICAgICAgJ3BhcmVudCBiYW5kd2lkdGggZGVmYXVsdCBtaW4gbWF4IHFsaW1pdCcgK1xuICAgICAgICAnYmxvY2stcG9saWN5IGRlYnVnIGZpbmdlcnByaW50cyBob3N0aWQgbGltaXQgbG9naW50ZXJmYWNlIG9wdGltaXphdGlvbicgK1xuICAgICAgICAncmVhc3NlbWJsZSBydWxlc2V0LW9wdGltaXphdGlvbiBiYXNpYyBub25lIHByb2ZpbGUgc2tpcCBzdGF0ZS1kZWZhdWx0cycgK1xuICAgICAgICAnc3RhdGUtcG9saWN5IHRpbWVvdXQnICtcbiAgICAgICAgJ2NvbnN0IGNvdW50ZXJzIHBlcnNpc3QnICtcbiAgICAgICAgJ25vIG1vZHVsYXRlIHN5bnByb3h5IHN0YXRlfDUgZmxvYXRpbmcgaWYtYm91bmQgbm8tc3luYyBwZmxvd3wxMCBzbG9wcHknICtcbiAgICAgICAgJ3NvdXJjZS10cmFjayBnbG9iYWwgcnVsZSBtYXgtc3JjLW5vZGVzIG1heC1zcmMtc3RhdGVzIG1heC1zcmMtY29ubicgK1xuICAgICAgICAnbWF4LXNyYy1jb25uLXJhdGUgb3ZlcmxvYWQgZmx1c2gnICtcbiAgICAgICAgJ3NjcnVifDUgbWF4LW1zcyBtaW4tdHRsIG5vLWRmfDEwIHJhbmRvbS1pZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnYWxsIGFueSBuby1yb3V0ZSBzZWxmIHVycGYtZmFpbGVkIGVncmVzc3w1IHVua25vd24nXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgTUFDUk8sXG4gICAgICBUQUJMRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBiZWdpbjogJ1xcXFwkK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qJ1xuICB9O1xuICB2YXIgUFJFUFJPQ0VTU09SID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogLzxcXD8ocGhwKT98XFw/Pi9cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCBQUkVQUk9DRVNTT1JdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlwiJywgZW5kOiAnXCInXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ2JcXCcnLCBlbmQ6ICdcXCcnXG4gICAgICB9LFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuQVBPU19TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pXG4gICAgXVxuICB9O1xuICB2YXIgTlVNQkVSID0ge3ZhcmlhbnRzOiBbaGxqcy5CSU5BUllfTlVNQkVSX01PREUsIGhsanMuQ19OVU1CRVJfTU9ERV19O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncGhwMycsICdwaHA0JywgJ3BocDUnLCAncGhwNiddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6XG4gICAgICAnYW5kIGluY2x1ZGVfb25jZSBsaXN0IGFic3RyYWN0IGdsb2JhbCBwcml2YXRlIGVjaG8gaW50ZXJmYWNlIGFzIHN0YXRpYyBlbmRzd2l0Y2ggJyArXG4gICAgICAnYXJyYXkgbnVsbCBpZiBlbmR3aGlsZSBvciBjb25zdCBmb3IgZW5kZm9yZWFjaCBzZWxmIHZhciB3aGlsZSBpc3NldCBwdWJsaWMgJyArXG4gICAgICAncHJvdGVjdGVkIGV4aXQgZm9yZWFjaCB0aHJvdyBlbHNlaWYgaW5jbHVkZSBfX0ZJTEVfXyBlbXB0eSByZXF1aXJlX29uY2UgZG8geG9yICcgK1xuICAgICAgJ3JldHVybiBwYXJlbnQgY2xvbmUgdXNlIF9fQ0xBU1NfXyBfX0xJTkVfXyBlbHNlIGJyZWFrIHByaW50IGV2YWwgbmV3ICcgK1xuICAgICAgJ2NhdGNoIF9fTUVUSE9EX18gY2FzZSBleGNlcHRpb24gZGVmYXVsdCBkaWUgcmVxdWlyZSBfX0ZVTkNUSU9OX18gJyArXG4gICAgICAnZW5kZGVjbGFyZSBmaW5hbCB0cnkgc3dpdGNoIGNvbnRpbnVlIGVuZGZvciBlbmRpZiBkZWNsYXJlIHVuc2V0IHRydWUgZmFsc2UgJyArXG4gICAgICAndHJhaXQgZ290byBpbnN0YW5jZW9mIGluc3RlYWRvZiBfX0RJUl9fIF9fTkFNRVNQQUNFX18gJyArXG4gICAgICAneWllbGQgZmluYWxseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJyQnLCB7Y29udGFpbnM6IFtQUkVQUk9DRVNTT1JdfSksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAvPDw8WydcIl0/XFx3K1snXCJdPyQvLCBlbmQ6IC9eXFx3Kzs/JC8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgIHtiZWdpbjogL1xcJFxcdysvfSxcbiAgICAgICAgICAgICAge2JlZ2luOiAvXFx7XFwkLywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBQUkVQUk9DRVNTT1IsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLCBiZWdpbjogL1xcJHRoaXNcXGIvXG4gICAgICB9LFxuICAgICAgVkFSSUFCTEUsXG4gICAgICB7XG4gICAgICAgIC8vIHN3YWxsb3cgY29tcG9zZWQgaWRlbnRpZmllcnMgdG8gYXZvaWQgcGFyc2luZyB0aGVtIGFzIGtleXdvcmRzXG4gICAgICAgIGJlZ2luOiAvKDo6fC0+KStbYS16QS1aX1xceDdmLVxceGZmXVthLXpBLVowLTlfXFx4N2YtXFx4ZmZdKi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvWzt7XS8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdcXFxcJHxcXFxcW3wlJyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgTlVNQkVSXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UnLCBlbmQ6ICd7JywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogL1s6XFwoXFwkXCJdLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7YmVnaW5LZXl3b3JkczogJ2V4dGVuZHMgaW1wbGVtZW50cyd9LFxuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICduYW1lc3BhY2UnLCBlbmQ6ICc7JyxcbiAgICAgICAgaWxsZWdhbDogL1tcXC4nXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAndXNlJywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJz0+JyAvLyBObyBtYXJrdXAsIGp1c3QgYSByZWxldmFuY2UgYm9vc3RlclxuICAgICAgfSxcbiAgICAgIFNUUklORyxcbiAgICAgIE5VTUJFUlxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2FjdG9yIGFkZHJlc3NvZiBhbmQgYXMgYmUgYnJlYWsgY2xhc3MgY29tcGlsZV9lcnJvciBjb21waWxlX2ludHJpbnNpYycgK1xuICAgICAgJ2NvbnN1bWUgY29udGludWUgZGVsZWdhdGUgZGlnZXN0b2YgZG8gZWxzZSBlbHNlaWYgZW1iZWQgZW5kIGVycm9yJyArXG4gICAgICAnZm9yIGZ1biBpZiBpZmRlZiBpbiBpbnRlcmZhY2UgaXMgaXNudCBsYW1iZGEgbGV0IG1hdGNoIG5ldyBub3Qgb2JqZWN0JyArXG4gICAgICAnb3IgcHJpbWl0aXZlIHJlY292ZXIgcmVwZWF0IHJldHVybiBzdHJ1Y3QgdGhlbiB0cmFpdCB0cnkgdHlwZSB1bnRpbCAnICtcbiAgICAgICd1c2UgdmFyIHdoZXJlIHdoaWxlIHdpdGggeG9yJyxcbiAgICBtZXRhOlxuICAgICAgJ2lzbyB2YWwgdGFnIHRybiBib3ggcmVmJyxcbiAgICBsaXRlcmFsOlxuICAgICAgJ3RoaXMgZmFsc2UgdHJ1ZSdcbiAgfTtcblxuICB2YXIgVFJJUExFX1FVT1RFX1NUUklOR19NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcIlwiXCInLCBlbmQ6ICdcIlwiXCInLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICB2YXIgUVVPVEVfU1RSSU5HX01PREUgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9O1xuXG4gIHZhciBTSU5HTEVfUVVPVEVfQ0hBUl9NT0RFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXCcnLCBlbmQ6ICdcXCcnLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgVFlQRV9OQU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAnXFxcXGJfP1tBLVpdW1xcXFx3XSonLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBQUklNRURfTkFNRSA9IHtcbiAgICBiZWdpbjogaGxqcy5JREVOVF9SRSArICdcXCcnLCByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgQ0xBU1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBhY3RvcicsIGVuZDogJyQnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREVcbiAgICBdXG4gIH1cblxuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgIGJlZ2luS2V5d29yZHM6ICduZXcgZnVuJywgZW5kOiAnPT4nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBUWVBFX05BTUUsXG4gICAgICAgICAgUFJJTUVEX05BTUUsXG4gICAgICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC86LywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbVFlQRV9OQU1FXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERVxuICAgIF1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDTEFTUyxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgVFlQRV9OQU1FLFxuICAgICAgVFJJUExFX1FVT1RFX1NUUklOR19NT0RFLFxuICAgICAgUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBTSU5HTEVfUVVPVEVfQ0hBUl9NT0RFLFxuICAgICAgUFJJTUVEX05BTUUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEJBQ0tUSUNLX0VTQ0FQRSA9IHtcbiAgICBiZWdpbjogJ2BbXFxcXHNcXFxcU10nLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuICB2YXIgVkFSID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvXFwkW1xcd1xcZF1bXFx3XFxkXzpdKi99XG4gICAgXVxuICB9O1xuICB2YXIgTElURVJBTCA9IHtcbiAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICBiZWdpbjogL1xcJChudWxsfHRydWV8ZmFsc2UpXFxiL1xuICB9O1xuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC9cIi8sIGVuZDogL1wiLyB9LFxuICAgICAgeyBiZWdpbjogL0BcIi8sIGVuZDogL15cIkAvIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBCQUNLVElDS19FU0NBUEUsXG4gICAgICBWQVIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgYmVnaW46IC9cXCRbQS16XS8sIGVuZDogL1teQS16XS9cbiAgICAgIH1cbiAgICBdXG4gIH07XG4gIHZhciBBUE9TX1NUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiAvJy8sIGVuZDogLycvIH0sXG4gICAgICB7IGJlZ2luOiAvQCcvLCBlbmQ6IC9eJ0AvIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIFBTX0hFTFBUQUdTID0ge1xuICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIC8qIG5vIHBhcmFtYXRlciBoZWxwIHRhZ3MgKi8gXG4gICAgICB7IGJlZ2luOiAvXFwuKHN5bm9wc2lzfGRlc2NyaXB0aW9ufGV4YW1wbGV8aW5wdXRzfG91dHB1dHN8bm90ZXN8bGlua3xjb21wb25lbnR8cm9sZXxmdW5jdGlvbmFsaXR5KS8gfSxcbiAgICAgIC8qIG9uZSBwYXJhbWV0ZXIgaGVscCB0YWdzICovXG4gICAgICB7IGJlZ2luOiAvXFwuKHBhcmFtZXRlcnxmb3J3YXJkaGVscHRhcmdldG5hbWV8Zm9yd2FyZGhlbHBjYXRlZ29yeXxyZW1vdGVoZWxwcnVuc3BhY2V8ZXh0ZXJuYWxoZWxwKVxccytcXFMrLyB9XG4gICAgXVxuICB9O1xuICB2YXIgUFNfQ09NTUVOVCA9IGhsanMuaW5oZXJpdChcbiAgICBobGpzLkNPTU1FTlQobnVsbCwgbnVsbCksXG4gICAge1xuICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgLyogc2luZ2xlLWxpbmUgY29tbWVudCAqL1xuICAgICAgICB7IGJlZ2luOiAvIy8sIGVuZDogLyQvIH0sXG4gICAgICAgIC8qIG11bHRpLWxpbmUgY29tbWVudCAqL1xuICAgICAgICB7IGJlZ2luOiAvPCMvLCBlbmQ6IC8jPi8gfVxuICAgICAgXSxcbiAgICAgIGNvbnRhaW5zOiBbUFNfSEVMUFRBR1NdXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwcyddLFxuICAgIGxleGVtZXM6IC8tP1tBLXpcXC5cXC1dKy8sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2lmIGVsc2UgZm9yZWFjaCByZXR1cm4gZnVuY3Rpb24gZG8gd2hpbGUgdW50aWwgZWxzZWlmIGJlZ2luIGZvciB0cmFwIGRhdGEgZHluYW1pY3BhcmFtIGVuZCBicmVhayB0aHJvdyBwYXJhbSBjb250aW51ZSBmaW5hbGx5IGluIHN3aXRjaCBleGl0IGZpbHRlciB0cnkgcHJvY2VzcyBjYXRjaCcsXG4gICAgICBidWlsdF9pbjogJ0FkZC1Db21wdXRlciBBZGQtQ29udGVudCBBZGQtSGlzdG9yeSBBZGQtSm9iVHJpZ2dlciBBZGQtTWVtYmVyIEFkZC1QU1NuYXBpbiBBZGQtVHlwZSBDaGVja3BvaW50LUNvbXB1dGVyIENsZWFyLUNvbnRlbnQgQ2xlYXItRXZlbnRMb2cgQ2xlYXItSGlzdG9yeSBDbGVhci1Ib3N0IENsZWFyLUl0ZW0gQ2xlYXItSXRlbVByb3BlcnR5IENsZWFyLVZhcmlhYmxlIENvbXBhcmUtT2JqZWN0IENvbXBsZXRlLVRyYW5zYWN0aW9uIENvbm5lY3QtUFNTZXNzaW9uIENvbm5lY3QtV1NNYW4gQ29udmVydC1QYXRoIENvbnZlcnRGcm9tLUNzdiBDb252ZXJ0RnJvbS1Kc29uIENvbnZlcnRGcm9tLVNlY3VyZVN0cmluZyBDb252ZXJ0RnJvbS1TdHJpbmdEYXRhIENvbnZlcnRUby1Dc3YgQ29udmVydFRvLUh0bWwgQ29udmVydFRvLUpzb24gQ29udmVydFRvLVNlY3VyZVN0cmluZyBDb252ZXJ0VG8tWG1sIENvcHktSXRlbSBDb3B5LUl0ZW1Qcm9wZXJ0eSBEZWJ1Zy1Qcm9jZXNzIERpc2FibGUtQ29tcHV0ZXJSZXN0b3JlIERpc2FibGUtSm9iVHJpZ2dlciBEaXNhYmxlLVBTQnJlYWtwb2ludCBEaXNhYmxlLVBTUmVtb3RpbmcgRGlzYWJsZS1QU1Nlc3Npb25Db25maWd1cmF0aW9uIERpc2FibGUtV1NNYW5DcmVkU1NQIERpc2Nvbm5lY3QtUFNTZXNzaW9uIERpc2Nvbm5lY3QtV1NNYW4gRGlzYWJsZS1TY2hlZHVsZWRKb2IgRW5hYmxlLUNvbXB1dGVyUmVzdG9yZSBFbmFibGUtSm9iVHJpZ2dlciBFbmFibGUtUFNCcmVha3BvaW50IEVuYWJsZS1QU1JlbW90aW5nIEVuYWJsZS1QU1Nlc3Npb25Db25maWd1cmF0aW9uIEVuYWJsZS1TY2hlZHVsZWRKb2IgRW5hYmxlLVdTTWFuQ3JlZFNTUCBFbnRlci1QU1Nlc3Npb24gRXhpdC1QU1Nlc3Npb24gRXhwb3J0LUFsaWFzIEV4cG9ydC1DbGl4bWwgRXhwb3J0LUNvbnNvbGUgRXhwb3J0LUNvdW50ZXIgRXhwb3J0LUNzdiBFeHBvcnQtRm9ybWF0RGF0YSBFeHBvcnQtTW9kdWxlTWVtYmVyIEV4cG9ydC1QU1Nlc3Npb24gRm9yRWFjaC1PYmplY3QgRm9ybWF0LUN1c3RvbSBGb3JtYXQtTGlzdCBGb3JtYXQtVGFibGUgRm9ybWF0LVdpZGUgR2V0LUFjbCBHZXQtQWxpYXMgR2V0LUF1dGhlbnRpY29kZVNpZ25hdHVyZSBHZXQtQ2hpbGRJdGVtIEdldC1Db21tYW5kIEdldC1Db21wdXRlclJlc3RvcmVQb2ludCBHZXQtQ29udGVudCBHZXQtQ29udHJvbFBhbmVsSXRlbSBHZXQtQ291bnRlciBHZXQtQ3JlZGVudGlhbCBHZXQtQ3VsdHVyZSBHZXQtRGF0ZSBHZXQtRXZlbnQgR2V0LUV2ZW50TG9nIEdldC1FdmVudFN1YnNjcmliZXIgR2V0LUV4ZWN1dGlvblBvbGljeSBHZXQtRm9ybWF0RGF0YSBHZXQtSG9zdCBHZXQtSG90Rml4IEdldC1IZWxwIEdldC1IaXN0b3J5IEdldC1Jc2VTbmlwcGV0IEdldC1JdGVtIEdldC1JdGVtUHJvcGVydHkgR2V0LUpvYiBHZXQtSm9iVHJpZ2dlciBHZXQtTG9jYXRpb24gR2V0LU1lbWJlciBHZXQtTW9kdWxlIEdldC1QZnhDZXJ0aWZpY2F0ZSBHZXQtUHJvY2VzcyBHZXQtUFNCcmVha3BvaW50IEdldC1QU0NhbGxTdGFjayBHZXQtUFNEcml2ZSBHZXQtUFNQcm92aWRlciBHZXQtUFNTZXNzaW9uIEdldC1QU1Nlc3Npb25Db25maWd1cmF0aW9uIEdldC1QU1NuYXBpbiBHZXQtUmFuZG9tIEdldC1TY2hlZHVsZWRKb2IgR2V0LVNjaGVkdWxlZEpvYk9wdGlvbiBHZXQtU2VydmljZSBHZXQtVHJhY2VTb3VyY2UgR2V0LVRyYW5zYWN0aW9uIEdldC1UeXBlRGF0YSBHZXQtVUlDdWx0dXJlIEdldC1VbmlxdWUgR2V0LVZhcmlhYmxlIEdldC1WZXJiIEdldC1XaW5FdmVudCBHZXQtV21pT2JqZWN0IEdldC1XU01hbkNyZWRTU1AgR2V0LVdTTWFuSW5zdGFuY2UgR3JvdXAtT2JqZWN0IEltcG9ydC1BbGlhcyBJbXBvcnQtQ2xpeG1sIEltcG9ydC1Db3VudGVyIEltcG9ydC1Dc3YgSW1wb3J0LUlzZVNuaXBwZXQgSW1wb3J0LUxvY2FsaXplZERhdGEgSW1wb3J0LVBTU2Vzc2lvbiBJbXBvcnQtTW9kdWxlIEludm9rZS1Bc1dvcmtmbG93IEludm9rZS1Db21tYW5kIEludm9rZS1FeHByZXNzaW9uIEludm9rZS1IaXN0b3J5IEludm9rZS1JdGVtIEludm9rZS1SZXN0TWV0aG9kIEludm9rZS1XZWJSZXF1ZXN0IEludm9rZS1XbWlNZXRob2QgSW52b2tlLVdTTWFuQWN0aW9uIEpvaW4tUGF0aCBMaW1pdC1FdmVudExvZyBNZWFzdXJlLUNvbW1hbmQgTWVhc3VyZS1PYmplY3QgTW92ZS1JdGVtIE1vdmUtSXRlbVByb3BlcnR5IE5ldy1BbGlhcyBOZXctRXZlbnQgTmV3LUV2ZW50TG9nIE5ldy1Jc2VTbmlwcGV0IE5ldy1JdGVtIE5ldy1JdGVtUHJvcGVydHkgTmV3LUpvYlRyaWdnZXIgTmV3LU9iamVjdCBOZXctTW9kdWxlIE5ldy1Nb2R1bGVNYW5pZmVzdCBOZXctUFNEcml2ZSBOZXctUFNTZXNzaW9uIE5ldy1QU1Nlc3Npb25Db25maWd1cmF0aW9uRmlsZSBOZXctUFNTZXNzaW9uT3B0aW9uIE5ldy1QU1RyYW5zcG9ydE9wdGlvbiBOZXctUFNXb3JrZmxvd0V4ZWN1dGlvbk9wdGlvbiBOZXctUFNXb3JrZmxvd1Nlc3Npb24gTmV3LVNjaGVkdWxlZEpvYk9wdGlvbiBOZXctU2VydmljZSBOZXctVGltZVNwYW4gTmV3LVZhcmlhYmxlIE5ldy1XZWJTZXJ2aWNlUHJveHkgTmV3LVdpbkV2ZW50IE5ldy1XU01hbkluc3RhbmNlIE5ldy1XU01hblNlc3Npb25PcHRpb24gT3V0LURlZmF1bHQgT3V0LUZpbGUgT3V0LUdyaWRWaWV3IE91dC1Ib3N0IE91dC1OdWxsIE91dC1QcmludGVyIE91dC1TdHJpbmcgUG9wLUxvY2F0aW9uIFB1c2gtTG9jYXRpb24gUmVhZC1Ib3N0IFJlY2VpdmUtSm9iIFJlZ2lzdGVyLUVuZ2luZUV2ZW50IFJlZ2lzdGVyLU9iamVjdEV2ZW50IFJlZ2lzdGVyLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb24gUmVnaXN0ZXItU2NoZWR1bGVkSm9iIFJlZ2lzdGVyLVdtaUV2ZW50IFJlbW92ZS1Db21wdXRlciBSZW1vdmUtRXZlbnQgUmVtb3ZlLUV2ZW50TG9nIFJlbW92ZS1JdGVtIFJlbW92ZS1JdGVtUHJvcGVydHkgUmVtb3ZlLUpvYiBSZW1vdmUtSm9iVHJpZ2dlciBSZW1vdmUtTW9kdWxlIFJlbW92ZS1QU0JyZWFrcG9pbnQgUmVtb3ZlLVBTRHJpdmUgUmVtb3ZlLVBTU2Vzc2lvbiBSZW1vdmUtUFNTbmFwaW4gUmVtb3ZlLVR5cGVEYXRhIFJlbW92ZS1WYXJpYWJsZSBSZW1vdmUtV21pT2JqZWN0IFJlbW92ZS1XU01hbkluc3RhbmNlIFJlbmFtZS1Db21wdXRlciBSZW5hbWUtSXRlbSBSZW5hbWUtSXRlbVByb3BlcnR5IFJlc2V0LUNvbXB1dGVyTWFjaGluZVBhc3N3b3JkIFJlc29sdmUtUGF0aCBSZXN0YXJ0LUNvbXB1dGVyIFJlc3RhcnQtU2VydmljZSBSZXN0b3JlLUNvbXB1dGVyIFJlc3VtZS1Kb2IgUmVzdW1lLVNlcnZpY2UgU2F2ZS1IZWxwIFNlbGVjdC1PYmplY3QgU2VsZWN0LVN0cmluZyBTZWxlY3QtWG1sIFNlbmQtTWFpbE1lc3NhZ2UgU2V0LUFjbCBTZXQtQWxpYXMgU2V0LUF1dGhlbnRpY29kZVNpZ25hdHVyZSBTZXQtQ29udGVudCBTZXQtRGF0ZSBTZXQtRXhlY3V0aW9uUG9saWN5IFNldC1JdGVtIFNldC1JdGVtUHJvcGVydHkgU2V0LUpvYlRyaWdnZXIgU2V0LUxvY2F0aW9uIFNldC1QU0JyZWFrcG9pbnQgU2V0LVBTRGVidWcgU2V0LVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb24gU2V0LVNjaGVkdWxlZEpvYiBTZXQtU2NoZWR1bGVkSm9iT3B0aW9uIFNldC1TZXJ2aWNlIFNldC1TdHJpY3RNb2RlIFNldC1UcmFjZVNvdXJjZSBTZXQtVmFyaWFibGUgU2V0LVdtaUluc3RhbmNlIFNldC1XU01hbkluc3RhbmNlIFNldC1XU01hblF1aWNrQ29uZmlnIFNob3ctQ29tbWFuZCBTaG93LUNvbnRyb2xQYW5lbEl0ZW0gU2hvdy1FdmVudExvZyBTb3J0LU9iamVjdCBTcGxpdC1QYXRoIFN0YXJ0LUpvYiBTdGFydC1Qcm9jZXNzIFN0YXJ0LVNlcnZpY2UgU3RhcnQtU2xlZXAgU3RhcnQtVHJhbnNhY3Rpb24gU3RhcnQtVHJhbnNjcmlwdCBTdG9wLUNvbXB1dGVyIFN0b3AtSm9iIFN0b3AtUHJvY2VzcyBTdG9wLVNlcnZpY2UgU3RvcC1UcmFuc2NyaXB0IFN1c3BlbmQtSm9iIFN1c3BlbmQtU2VydmljZSBUZWUtT2JqZWN0IFRlc3QtQ29tcHV0ZXJTZWN1cmVDaGFubmVsIFRlc3QtQ29ubmVjdGlvbiBUZXN0LU1vZHVsZU1hbmlmZXN0IFRlc3QtUGF0aCBUZXN0LVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb25GaWxlIFRyYWNlLUNvbW1hbmQgVW5ibG9jay1GaWxlIFVuZG8tVHJhbnNhY3Rpb24gVW5yZWdpc3Rlci1FdmVudCBVbnJlZ2lzdGVyLVBTU2Vzc2lvbkNvbmZpZ3VyYXRpb24gVW5yZWdpc3Rlci1TY2hlZHVsZWRKb2IgVXBkYXRlLUZvcm1hdERhdGEgVXBkYXRlLUhlbHAgVXBkYXRlLUxpc3QgVXBkYXRlLVR5cGVEYXRhIFVzZS1UcmFuc2FjdGlvbiBXYWl0LUV2ZW50IFdhaXQtSm9iIFdhaXQtUHJvY2VzcyBXaGVyZS1PYmplY3QgV3JpdGUtRGVidWcgV3JpdGUtRXJyb3IgV3JpdGUtRXZlbnRMb2cgV3JpdGUtSG9zdCBXcml0ZS1PdXRwdXQgV3JpdGUtUHJvZ3Jlc3MgV3JpdGUtVmVyYm9zZSBXcml0ZS1XYXJuaW5nIEFkZC1NRFRQZXJzaXN0ZW50RHJpdmUgRGlzYWJsZS1NRFRNb25pdG9yU2VydmljZSBFbmFibGUtTURUTW9uaXRvclNlcnZpY2UgR2V0LU1EVERlcGxveW1lbnRTaGFyZVN0YXRpc3RpY3MgR2V0LU1EVE1vbml0b3JEYXRhIEdldC1NRFRPcGVyYXRpbmdTeXN0ZW1DYXRhbG9nIEdldC1NRFRQZXJzaXN0ZW50RHJpdmUgSW1wb3J0LU1EVEFwcGxpY2F0aW9uIEltcG9ydC1NRFREcml2ZXIgSW1wb3J0LU1EVE9wZXJhdGluZ1N5c3RlbSBJbXBvcnQtTURUUGFja2FnZSBJbXBvcnQtTURUVGFza1NlcXVlbmNlIE5ldy1NRFREYXRhYmFzZSBSZW1vdmUtTURUTW9uaXRvckRhdGEgUmVtb3ZlLU1EVFBlcnNpc3RlbnREcml2ZSBSZXN0b3JlLU1EVFBlcnNpc3RlbnREcml2ZSBTZXQtTURUTW9uaXRvckRhdGEgVGVzdC1NRFREZXBsb3ltZW50U2hhcmUgVGVzdC1NRFRNb25pdG9yRGF0YSBVcGRhdGUtTURURGF0YWJhc2VTY2hlbWEgVXBkYXRlLU1EVERlcGxveW1lbnRTaGFyZSBVcGRhdGUtTURUTGlua2VkRFMgVXBkYXRlLU1EVE1lZGlhIFVwZGF0ZS1NRFRNZWRpYSBBZGQtVmFtdFByb2R1Y3RLZXkgRXhwb3J0LVZhbXREYXRhIEZpbmQtVmFtdE1hbmFnZWRNYWNoaW5lIEdldC1WYW10Q29uZmlybWF0aW9uSWQgR2V0LVZhbXRQcm9kdWN0IEdldC1WYW10UHJvZHVjdEtleSBJbXBvcnQtVmFtdERhdGEgSW5pdGlhbGl6ZS1WYW10RGF0YSBJbnN0YWxsLVZhbXRDb25maXJtYXRpb25JZCBJbnN0YWxsLVZhbXRQcm9kdWN0QWN0aXZhdGlvbiBJbnN0YWxsLVZhbXRQcm9kdWN0S2V5IFVwZGF0ZS1WYW10UHJvZHVjdCcsXG4gICAgICBub21hcmt1cDogJy1uZSAtZXEgLWx0IC1ndCAtZ2UgLWxlIC1ub3QgLWxpa2UgLW5vdGxpa2UgLW1hdGNoIC1ub3RtYXRjaCAtY29udGFpbnMgLW5vdGNvbnRhaW5zIC1pbiAtbm90aW4gLXJlcGxhY2UnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgQkFDS1RJQ0tfRVNDQVBFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIFFVT1RFX1NUUklORyxcbiAgICAgIEFQT1NfU1RSSU5HLFxuICAgICAgTElURVJBTCxcbiAgICAgIFZBUixcbiAgICAgIFBTX0NPTU1FTlRcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAnQnVmZmVyZWRSZWFkZXIgUFZlY3RvciBQRm9udCBQSW1hZ2UgUEdyYXBoaWNzIEhhc2hNYXAgYm9vbGVhbiBieXRlIGNoYXIgY29sb3IgJyArXG4gICAgICAgICdkb3VibGUgZmxvYXQgaW50IGxvbmcgU3RyaW5nIEFycmF5IEZsb2F0RGljdCBGbG9hdExpc3QgSW50RGljdCBJbnRMaXN0IEpTT05BcnJheSBKU09OT2JqZWN0ICcgK1xuICAgICAgICAnT2JqZWN0IFN0cmluZ0RpY3QgU3RyaW5nTGlzdCBUYWJsZSBUYWJsZVJvdyBYTUwgJyArXG4gICAgICAgIC8vIEphdmEga2V5d29yZHNcbiAgICAgICAgJ2ZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgJyArXG4gICAgICAgICdmb3IgdHJ1ZSB3aGlsZSBsb25nIHRocm93IHN0cmljdGZwIGZpbmFsbHkgcHJvdGVjdGVkIGltcG9ydCBuYXRpdmUgZmluYWwgcmV0dXJuIHZvaWQgJyArXG4gICAgICAgICdlbnVtIGVsc2UgYnJlYWsgdHJhbnNpZW50IG5ldyBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgJyArXG4gICAgICAgICdwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByb3RlY3RlZCBwdWJsaWMgcHJpdmF0ZScsXG4gICAgICBsaXRlcmFsOiAnUDJEIFAzRCBIQUxGX1BJIFBJIFFVQVJURVJfUEkgVEFVIFRXT19QSScsXG4gICAgICB0aXRsZTogJ3NldHVwIGRyYXcnLFxuICAgICAgYnVpbHRfaW46ICdkaXNwbGF5SGVpZ2h0IGRpc3BsYXlXaWR0aCBtb3VzZVkgbW91c2VYIG1vdXNlUHJlc3NlZCBwbW91c2VYIHBtb3VzZVkga2V5ICcgK1xuICAgICAgICAna2V5Q29kZSBwaXhlbHMgZm9jdXNlZCBmcmFtZUNvdW50IGZyYW1lUmF0ZSBoZWlnaHQgd2lkdGggJyArXG4gICAgICAgICdzaXplIGNyZWF0ZUdyYXBoaWNzIGJlZ2luRHJhdyBjcmVhdGVTaGFwZSBsb2FkU2hhcGUgUFNoYXBlIGFyYyBlbGxpcHNlIGxpbmUgcG9pbnQgJyArXG4gICAgICAgICdxdWFkIHJlY3QgdHJpYW5nbGUgYmV6aWVyIGJlemllckRldGFpbCBiZXppZXJQb2ludCBiZXppZXJUYW5nZW50IGN1cnZlIGN1cnZlRGV0YWlsIGN1cnZlUG9pbnQgJyArXG4gICAgICAgICdjdXJ2ZVRhbmdlbnQgY3VydmVUaWdodG5lc3Mgc2hhcGUgc2hhcGVNb2RlIGJlZ2luQ29udG91ciBiZWdpblNoYXBlIGJlemllclZlcnRleCBjdXJ2ZVZlcnRleCAnICtcbiAgICAgICAgJ2VuZENvbnRvdXIgZW5kU2hhcGUgcXVhZHJhdGljVmVydGV4IHZlcnRleCBlbGxpcHNlTW9kZSBub1Ntb290aCByZWN0TW9kZSBzbW9vdGggc3Ryb2tlQ2FwICcgK1xuICAgICAgICAnc3Ryb2tlSm9pbiBzdHJva2VXZWlnaHQgbW91c2VDbGlja2VkIG1vdXNlRHJhZ2dlZCBtb3VzZU1vdmVkIG1vdXNlUHJlc3NlZCBtb3VzZVJlbGVhc2VkICcgK1xuICAgICAgICAnbW91c2VXaGVlbCBrZXlQcmVzc2VkIGtleVByZXNzZWRrZXlSZWxlYXNlZCBrZXlUeXBlZCBwcmludCBwcmludGxuIHNhdmUgc2F2ZUZyYW1lIGRheSBob3VyICcgK1xuICAgICAgICAnbWlsbGlzIG1pbnV0ZSBtb250aCBzZWNvbmQgeWVhciBiYWNrZ3JvdW5kIGNsZWFyIGNvbG9yTW9kZSBmaWxsIG5vRmlsbCBub1N0cm9rZSBzdHJva2UgYWxwaGEgJyArXG4gICAgICAgICdibHVlIGJyaWdodG5lc3MgY29sb3IgZ3JlZW4gaHVlIGxlcnBDb2xvciByZWQgc2F0dXJhdGlvbiBtb2RlbFggbW9kZWxZIG1vZGVsWiBzY3JlZW5YIHNjcmVlblkgJyArXG4gICAgICAgICdzY3JlZW5aIGFtYmllbnQgZW1pc3NpdmUgc2hpbmluZXNzIHNwZWN1bGFyIGFkZCBjcmVhdGVJbWFnZSBiZWdpbkNhbWVyYSBjYW1lcmEgZW5kQ2FtZXJhIGZydXN0dW0gJyArXG4gICAgICAgICdvcnRobyBwZXJzcGVjdGl2ZSBwcmludENhbWVyYSBwcmludFByb2plY3Rpb24gY3Vyc29yIGZyYW1lUmF0ZSBub0N1cnNvciBleGl0IGxvb3Agbm9Mb29wIHBvcFN0eWxlICcgK1xuICAgICAgICAncHVzaFN0eWxlIHJlZHJhdyBiaW5hcnkgYm9vbGVhbiBieXRlIGNoYXIgZmxvYXQgaGV4IGludCBzdHIgdW5iaW5hcnkgdW5oZXggam9pbiBtYXRjaCBtYXRjaEFsbCBuZiAnICtcbiAgICAgICAgJ25mYyBuZnAgbmZzIHNwbGl0IHNwbGl0VG9rZW5zIHRyaW0gYXBwZW5kIGFycmF5Q29weSBjb25jYXQgZXhwYW5kIHJldmVyc2Ugc2hvcnRlbiBzb3J0IHNwbGljZSBzdWJzZXQgJyArXG4gICAgICAgICdib3ggc3BoZXJlIHNwaGVyZURldGFpbCBjcmVhdGVJbnB1dCBjcmVhdGVSZWFkZXIgbG9hZEJ5dGVzIGxvYWRKU09OQXJyYXkgbG9hZEpTT05PYmplY3QgbG9hZFN0cmluZ3MgJyArXG4gICAgICAgICdsb2FkVGFibGUgbG9hZFhNTCBvcGVuIHBhcnNlWE1MIHNhdmVUYWJsZSBzZWxlY3RGb2xkZXIgc2VsZWN0SW5wdXQgYmVnaW5SYXcgYmVnaW5SZWNvcmQgY3JlYXRlT3V0cHV0ICcgK1xuICAgICAgICAnY3JlYXRlV3JpdGVyIGVuZFJhdyBlbmRSZWNvcmQgUHJpbnRXcml0ZXJzYXZlQnl0ZXMgc2F2ZUpTT05BcnJheSBzYXZlSlNPTk9iamVjdCBzYXZlU3RyZWFtIHNhdmVTdHJpbmdzICcgK1xuICAgICAgICAnc2F2ZVhNTCBzZWxlY3RPdXRwdXQgcG9wTWF0cml4IHByaW50TWF0cml4IHB1c2hNYXRyaXggcmVzZXRNYXRyaXggcm90YXRlIHJvdGF0ZVggcm90YXRlWSByb3RhdGVaIHNjYWxlICcgK1xuICAgICAgICAnc2hlYXJYIHNoZWFyWSB0cmFuc2xhdGUgYW1iaWVudExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQgbGlnaHRGYWxsb2ZmIGxpZ2h0cyBsaWdodFNwZWN1bGFyIG5vTGlnaHRzIG5vcm1hbCAnICtcbiAgICAgICAgJ3BvaW50TGlnaHQgc3BvdExpZ2h0IGltYWdlIGltYWdlTW9kZSBsb2FkSW1hZ2Ugbm9UaW50IHJlcXVlc3RJbWFnZSB0aW50IHRleHR1cmUgdGV4dHVyZU1vZGUgdGV4dHVyZVdyYXAgJyArXG4gICAgICAgICdibGVuZCBjb3B5IGZpbHRlciBnZXQgbG9hZFBpeGVscyBzZXQgdXBkYXRlUGl4ZWxzIGJsZW5kTW9kZSBsb2FkU2hhZGVyIFBTaGFkZXJyZXNldFNoYWRlciBzaGFkZXIgY3JlYXRlRm9udCAnICtcbiAgICAgICAgJ2xvYWRGb250IHRleHQgdGV4dEZvbnQgdGV4dEFsaWduIHRleHRMZWFkaW5nIHRleHRNb2RlIHRleHRTaXplIHRleHRXaWR0aCB0ZXh0QXNjZW50IHRleHREZXNjZW50IGFicyBjZWlsICcgK1xuICAgICAgICAnY29uc3RyYWluIGRpc3QgZXhwIGZsb29yIGxlcnAgbG9nIG1hZyBtYXAgbWF4IG1pbiBub3JtIHBvdyByb3VuZCBzcSBzcXJ0IGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNvcyBkZWdyZWVzICcgK1xuICAgICAgICAncmFkaWFucyBzaW4gdGFuIG5vaXNlIG5vaXNlRGV0YWlsIG5vaXNlU2VlZCByYW5kb20gcmFuZG9tR2F1c3NpYW4gcmFuZG9tU2VlZCdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbYS16QS1aX11bXFxcXGRhLXpBLVpfXStcXFxcLltcXFxcZGEtekEtWl9dezEsM30nLCBlbmQ6ICc6JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcobmNhbGxzfHRvdHRpbWV8Y3VtdGltZSknLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6ICduY2FsbHMgdG90dGltZXwxMCBjdW10aW1lfDEwIGZpbGVuYW1lJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdmdW5jdGlvbiBjYWxscycsIGVuZDogJyQnLFxuICAgICAgICBjb250YWluczogW2hsanMuQ19OVU1CRVJfTU9ERV0sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCkkJyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuXG4gIHZhciBBVE9NID0ge1xuXG4gICAgYmVnaW46IC9bYS16XVtBLVphLXowLTlfXSovLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBWQVIgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9bQS1aXVthLXpBLVowLTlfXSovfSxcbiAgICAgIHtiZWdpbjogL19bQS1aYS16MC05X10qL30sXG4gICAgXSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUEFSRU5URUQgPSB7XG5cbiAgICBiZWdpbjogL1xcKC8sXG4gICAgZW5kOiAvXFwpLyxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgTElTVCA9IHtcblxuICAgIGJlZ2luOiAvXFxbLyxcbiAgICBlbmQ6IC9cXF0vXG4gIH07XG5cbiAgdmFyIExJTkVfQ09NTUVOVCA9IHtcblxuICAgIGNsYXNzTmFtZTogJ2NvbW1lbnQnLFxuICAgIGJlZ2luOiAvJS8sIGVuZDogLyQvLFxuICAgIGNvbnRhaW5zOiBbaGxqcy5QSFJBU0FMX1dPUkRTX01PREVdXG4gIH07XG5cbiAgdmFyIEJBQ0tUSUNLX1NUUklORyA9IHtcblxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9gLywgZW5kOiAvYC8sXG4gICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gIH07XG5cbiAgdmFyIENIQVJfQ09ERSA9IHtcblxuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsIC8vIDAnYSBldGMuXG4gICAgYmVnaW46IC8wXFwnKFxcXFxcXCd8LikvXG4gIH07XG5cbiAgdmFyIFNQQUNFX0NPREUgPSB7XG5cbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAvMFxcJ1xcXFxzLyAvLyAwJ1xcc1xuICB9O1xuXG4gIHZhciBQUkVEX09QID0geyAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIGJlZ2luOiAvOi0vXG4gIH07XG5cbiAgdmFyIGlubmVyID0gW1xuXG4gICAgQVRPTSxcbiAgICBWQVIsXG4gICAgUEFSRU5URUQsXG4gICAgUFJFRF9PUCxcbiAgICBMSVNULFxuICAgIExJTkVfQ09NTUVOVCxcbiAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgIEJBQ0tUSUNLX1NUUklORyxcbiAgICBDSEFSX0NPREUsXG4gICAgU1BBQ0VfQ09ERSxcbiAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgXTtcblxuICBQQVJFTlRFRC5jb250YWlucyA9IGlubmVyO1xuICBMSVNULmNvbnRhaW5zID0gaW5uZXI7XG5cbiAgcmV0dXJuIHtcbiAgICBjb250YWluczogaW5uZXIuY29uY2F0KFtcbiAgICAgIHtiZWdpbjogL1xcLiQvfSAvLyByZWxldmFuY2UgYm9vc3RlclxuICAgIF0pXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOiAncGFja2FnZSBpbXBvcnQgb3B0aW9uIG9wdGlvbmFsIHJlcXVpcmVkIHJlcGVhdGVkIGdyb3VwJyxcbiAgICAgIGJ1aWx0X2luOiAnZG91YmxlIGZsb2F0IGludDMyIGludDY0IHVpbnQzMiB1aW50NjQgc2ludDMyIHNpbnQ2NCAnICtcbiAgICAgICAgJ2ZpeGVkMzIgZml4ZWQ2NCBzZml4ZWQzMiBzZml4ZWQ2NCBib29sIHN0cmluZyBieXRlcycsXG4gICAgICBsaXRlcmFsOiAndHJ1ZSBmYWxzZSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnbWVzc2FnZSBlbnVtIHNlcnZpY2UnLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAncnBjJyxcbiAgICAgICAgZW5kOiAvOy8sIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGtleXdvcmRzOiAncnBjIHJldHVybnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogL15cXHMqW0EtWl9dKy8sXG4gICAgICAgIGVuZDogL1xccyo9LywgZXhjbHVkZUVuZDogdHJ1ZVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIFBVUFBFVF9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgIC8qIGxhbmd1YWdlIGtleXdvcmRzICovXG4gICAgICAnYW5kIGNhc2UgZGVmYXVsdCBlbHNlIGVsc2lmIGZhbHNlIGlmIGluIGltcG9ydCBlbmhlcml0cyBub2RlIG9yIHRydWUgdW5kZWYgdW5sZXNzIG1haW4gc2V0dGluZ3MgJHN0cmluZyAnLFxuICAgIGxpdGVyYWw6XG4gICAgLyogbWV0YXBhcmFtZXRlcnMgKi9cbiAgICAgICdhbGlhcyBhdWRpdCBiZWZvcmUgbG9nbGV2ZWwgbm9vcCByZXF1aXJlIHN1YnNjcmliZSB0YWcgJyArXG4gICAgLyogbm9ybWFsIGF0dHJpYnV0ZXMgKi9cbiAgICAgICdvd25lciBlbnN1cmUgZ3JvdXAgbW9kZSBuYW1lfDAgY2hhbmdlcyBjb250ZXh0IGZvcmNlIGluY2wgbGVucyBsb2FkX3BhdGggb25seWlmIHByb3ZpZGVyIHJldHVybnMgcm9vdCBzaG93X2RpZmYgdHlwZV9jaGVjayAnICtcbiAgICAgICdlbl9hZGRyZXNzIGlwX2FkZHJlc3MgcmVhbG5hbWUgY29tbWFuZCBlbnZpcm9ubWVudCBob3VyIG1vbnV0ZSBtb250aCBtb250aGRheSBzcGVjaWFsIHRhcmdldCB3ZWVrZGF5ICcrXG4gICAgICAnY3JlYXRlcyBjd2Qgb2dvdXRwdXQgcmVmcmVzaCByZWZyZXNob25seSB0cmllcyB0cnlfc2xlZXAgdW1hc2sgYmFja3VwIGNoZWNrc3VtIGNvbnRlbnQgY3RpbWUgZm9yY2UgaWdub3JlICcgK1xuICAgICAgJ2xpbmtzIG10aW1lIHB1cmdlIHJlY3Vyc2UgcmVjdXJzZWxpbWl0IHJlcGxhY2Ugc2VsaW51eF9pZ25vcmVfZGVmYXVsdHMgc2VscmFuZ2Ugc2Vscm9sZSBzZWx0eXBlIHNlbHVzZXIgc291cmNlICcgK1xuICAgICAgJ3NvdWlyY2VfcGVybWlzc2lvbnMgc291cmNlc2VsZWN0IHZhbGlkYXRlX2NtZCB2YWxpZGF0ZV9yZXBsYWNlbWVudCBhbGxvd2R1cGUgYXR0cmlidXRlX21lbWJlcnNoaXAgYXV0aF9tZW1iZXJzaGlwIGZvcmNlbG9jYWwgZ2lkICcrXG4gICAgICAnaWFfbG9hZF9tb2R1bGUgbWVtYmVycyBzeXN0ZW0gaG9zdF9hbGlhc2VzIGlwIGFsbG93ZWRfdHJ1bmtfdmxhbnMgZGVzY3JpcHRpb24gZGV2aWNlX3VybCBkdXBsZXggZW5jYXBzdWxhdGlvbiBldGhlcmNoYW5uZWwgJyArXG4gICAgICAnbmF0aXZlX3ZsYW4gc3BlZWQgcHJpbmNpcGFscyBhbGxvd19yb290IGF1dGhfY2xhc3MgYXV0aF90eXBlIGF1dGhlbnRpY2F0ZV91c2VyIGtfb2ZfbiBtZWNoYW5pc21zIHJ1bGUgc2Vzc2lvbl9vd25lciBzaGFyZWQgb3B0aW9ucyAnICtcbiAgICAgICdkZXZpY2UgZnN0eXBlIGVuYWJsZSBoYXNyZXN0YXJ0IGRpcmVjdG9yeSBwcmVzZW50IGFic2VudCBsaW5rIGF0Ym9vdCBibG9ja2RldmljZSBkZXZpY2UgZHVtcCBwYXNzIHJlbW91bnRzIHBvbGxlcl90YWcgdXNlICcgK1xuICAgICAgJ21lc3NhZ2Ugd2l0aHBhdGggYWRtaW5maWxlIGFsbG93X3ZpcnR1YWwgYWxsb3djZHJvbSBjYXRlZ29yeSBjb25maWdmaWxlcyBmbGF2b3IgaW5zdGFsbF9vcHRpb25zIGluc3RhbmNlIHBhY2thZ2Vfc2V0dGluZ3MgcGxhdGZvcm0gJyArXG4gICAgICAncmVzcG9uc2VmaWxlIHN0YXR1cyB1bmluc3RhbGxfb3B0aW9ucyB2ZW5kb3IgdW5sZXNzX3N5c3RlbV91c2VyIHVubGVzc191aWQgYmluYXJ5IGNvbnRyb2wgZmxhZ3MgaGFzc3RhdHVzIG1hbmlmZXN0IHBhdHRlcm4gcmVzdGFydCBydW5uaW5nICcgK1xuICAgICAgJ3N0YXJ0IHN0b3AgYWxsb3dkdXBlIGF1dGhzIGV4cGlyeSBnaWQgZ3JvdXBzIGhvbWUgaXRlcmF0aW9ucyBrZXlfbWVtYmVyc2hpcCBrZXlzIG1hbmFnZWhvbWUgbWVtYmVyc2hpcCBwYXNzd29yZCBwYXNzd29yZF9tYXhfYWdlICcgK1xuICAgICAgJ3Bhc3N3b3JkX21pbl9hZ2UgcHJvZmlsZV9tZW1iZXJzaGlwIHByb2ZpbGVzIHByb2plY3QgcHVyZ2Vfc3NoX2tleXMgcm9sZV9tZW1iZXJzaGlwIHJvbGVzIHNhbHQgc2hlbGwgdWlkIGJhc2V1cmwgY29zdCBkZXNjciBlbmFibGVkICcgK1xuICAgICAgJ2VuYWJsZWdyb3VwcyBleGNsdWRlIGZhaWxvdmVybWV0aG9kIGdwZ2NoZWNrIGdwZ2tleSBodHRwX2NhY2hpbmcgaW5jbHVkZSBpbmNsdWRlcGtncyBrZWVwYWxpdmUgbWV0YWRhdGFfZXhwaXJlIG1ldGFsaW5rIG1pcnJvcmxpc3QgJyArXG4gICAgICAncHJpb3JpdHkgcHJvdGVjdCBwcm94eSBwcm94eV9wYXNzd29yZCBwcm94eV91c2VybmFtZSByZXBvX2dwZ2NoZWNrIHMzX2VuYWJsZWQgc2tpcF9pZl91bmF2YWlsYWJsZSBzc2xjYWNlcnQgc3NsY2xpZW50Y2VydCBzc2xjbGllbnRrZXkgJyArXG4gICAgICAnc3NsdmVyaWZ5IG1vdW50ZWQnLFxuICAgIGJ1aWx0X2luOlxuICAgIC8qIGNvcmUgZmFjdHMgKi9cbiAgICAgICdhcmNoaXRlY3R1cmUgYXVnZWFzdmVyc2lvbiBibG9ja2RldmljZXMgYm9hcmRtYW51ZmFjdHVyZXIgYm9hcmRwcm9kdWN0bmFtZSBib2FyZHNlcmlhbG51bWJlciBjZmtleSBkaGNwX3NlcnZlcnMgJyArXG4gICAgICAnZG9tYWluIGVjMl8gZWMyX3VzZXJkYXRhIGZhY3RlcnZlcnNpb24gZmlsZXN5c3RlbXMgbGRvbSBmcWRuIGdpZCBoYXJkd2FyZWlzYSBoYXJkd2FyZW1vZGVsIGhvc3RuYW1lIGlkfDAgaW50ZXJmYWNlcyAnK1xuICAgICAgJ2lwYWRkcmVzcyBpcGFkZHJlc3NfIGlwYWRkcmVzczYgaXBhZGRyZXNzNl8gaXBob3N0bnVtYmVyIGlzX3ZpcnR1YWwga2VybmVsIGtlcm5lbG1hanZlcnNpb24ga2VybmVscmVsZWFzZSBrZXJuZWx2ZXJzaW9uICcgK1xuICAgICAgJ2tlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiBsc2JkaXN0Y29kZW5hbWUgbHNiZGlzdGRlc2NyaXB0aW9uIGxzYmRpc3RpZCBsc2JkaXN0cmVsZWFzZSBsc2JtYWpkaXN0cmVsZWFzZSBsc2JtaW5vcmRpc3RyZWxlYXNlICcgK1xuICAgICAgJ2xzYnJlbGVhc2UgbWFjYWRkcmVzcyBtYWNhZGRyZXNzXyBtYWNvc3hfYnVpbGR2ZXJzaW9uIG1hY29zeF9wcm9kdWN0bmFtZSBtYWNvc3hfcHJvZHVjdHZlcnNpb24gbWFjb3N4X3Byb2R1Y3R2ZXJzb25fbWFqb3IgJyArXG4gICAgICAnbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uX21pbm9yIG1hbnVmYWN0dXJlciBtZW1vcnlmcmVlIG1lbW9yeXNpemUgbmV0bWFzayBtZXRtYXNrXyBuZXR3b3JrXyBvcGVyYXRpbmdzeXN0ZW0gb3BlcmF0aW5nc3lzdGVtbWFqcmVsZWFzZSAnK1xuICAgICAgJ29wZXJhdGluZ3N5c3RlbXJlbGVhc2Ugb3NmYW1pbHkgcGFydGl0aW9ucyBwYXRoIHBoeXNpY2FscHJvY2Vzc29yY291bnQgcHJvY2Vzc29yIHByb2Nlc3NvcmNvdW50IHByb2R1Y3RuYW1lIHBzIHB1cHBldHZlcnNpb24gJytcbiAgICAgICdydWJ5c2l0ZWRpciBydWJ5dmVyc2lvbiBzZWxpbnV4IHNlbGludXhfY29uZmlnX21vZGUgc2VsaW51eF9jb25maWdfcG9saWN5IHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfY3VycmVudF9tb2RlIHNlbGludXhfZW5mb3JjZWQgJytcbiAgICAgICdzZWxpbnV4X3BvbGljeXZlcnNpb24gc2VyaWFsbnVtYmVyIHNwXyBzc2hkc2FrZXkgc3NoZWNkc2FrZXkgc3NocnNha2V5IHN3YXBlbmNyeXB0ZWQgc3dhcGZyZWUgc3dhcHNpemUgdGltZXpvbmUgdHlwZSB1bmlxdWVpZCB1cHRpbWUgJytcbiAgICAgICd1cHRpbWVfZGF5cyB1cHRpbWVfaG91cnMgdXB0aW1lX3NlY29uZHMgdXVpZCB2aXJ0dWFsIHZsYW5zIHhlbmRvbWFpbnMgemZzX3ZlcnNpb24gem9uZW5hZSB6b25lcyB6cG9vbF92ZXJzaW9uJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UID0gaGxqcy5DT01NRU5UKCcjJywgJyQnKTtcblxuICB2YXIgSURFTlRfUkUgPSAnKFtBLVphLXpfXXw6OikoXFxcXHd8OjopKic7XG5cbiAgdmFyIFRJVExFID0gaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBJREVOVF9SRX0pO1xuXG4gIHZhciBWQVJJQUJMRSA9IHtjbGFzc05hbWU6ICd2YXJpYWJsZScsIGJlZ2luOiAnXFxcXCQnICsgSURFTlRfUkV9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwgVkFSSUFCTEVdLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC8nLywgZW5kOiAvJy99LFxuICAgICAge2JlZ2luOiAvXCIvLCBlbmQ6IC9cIi99XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwcCddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5ULFxuICAgICAgVkFSSUFCTEUsXG4gICAgICBTVFJJTkcsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcycsIGVuZDogJ1xcXFx7fDsnLFxuICAgICAgICBpbGxlZ2FsOiAvPS8sXG4gICAgICAgIGNvbnRhaW5zOiBbVElUTEUsIENPTU1FTlRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZGVmaW5lJywgZW5kOiAvXFx7LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzZWN0aW9uJywgYmVnaW46IGhsanMuSURFTlRfUkUsIGVuZHNQYXJlbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFICsgJ1xcXFxzK1xcXFx7JywgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGVuZDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogaGxqcy5JREVOVF9SRVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC9cXHsvLCBlbmQ6IC9cXH0vLFxuICAgICAgICAgICAga2V5d29yZHM6IFBVUFBFVF9LRVlXT1JEUyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIFNUUklORyxcbiAgICAgICAgICAgICAgQ09NTUVOVCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJlZ2luOidbYS16QS1aX10rXFxcXHMqPT4nLFxuICAgICAgICAgICAgICAgIHJldHVybkJlZ2luOiB0cnVlLCBlbmQ6ICc9PicsXG4gICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFZBUklBQkxFXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH1cbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSAvLyBCYXNlIGRlYWZ1bHQgY29sb3JzIGluIFBCIElERTogYmFja2dyb3VuZDogI0ZGRkZERjsgZm9yZWdyb3VuZDogIzAwMDAwMDtcblxuZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RSSU5HUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjMDA4MEZGIChBenVyZSBSYWRpYW5jZSlcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnKH4pP1wiJywgZW5kOiAnXCInLFxuICAgIGlsbGVnYWw6ICdcXFxcbidcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHsgLy8gUEIgSURFIGNvbG9yOiAjOTI0QjcyIChDYW5ub24gUGluaylcbiAgICAvLyAgXCIjXCIgKyBhIGxldHRlciBvciB1bmRlcnNjb3JlICsgbGV0dGVycywgZGlnaXRzIG9yIHVuZGVyc2NvcmVzICsgKG9wdGlvbmFsKSBcIiRcIlxuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46ICcjW2EtekEtWl9dXFxcXHcqXFxcXCQ/J1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydwYicsICdwYmknXSxcbiAgICBrZXl3b3JkczogLy8gUEIgSURFIGNvbG9yOiAjMDA2NjY2IChCbHVlIFN0b25lKSArIEJvbGRcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgbGlzdCB3YXMgdGFrZW4gYW5kIGFkYXB0ZWQgZnJvbSBHdVNoSCdzIFB1cmVCYXNpYyBsYW5ndWFnZSBmaWxlIGZvciBHZVNIaS4uLlxuICAgICAgJ0FuZCBBcyBCcmVhayBDYWxsRGVidWdnZXIgQ2FzZSBDb21waWxlckNhc2UgQ29tcGlsZXJEZWZhdWx0IENvbXBpbGVyRWxzZSBDb21waWxlckVuZElmIENvbXBpbGVyRW5kU2VsZWN0ICcgK1xuICAgICAgJ0NvbXBpbGVyRXJyb3IgQ29tcGlsZXJJZiBDb21waWxlclNlbGVjdCBDb250aW51ZSBEYXRhIERhdGFTZWN0aW9uIEVuZERhdGFTZWN0aW9uIERlYnVnIERlYnVnTGV2ZWwgJyArXG4gICAgICAnRGVmYXVsdCBEZWZpbmUgRGltIERpc2FibGVBU00gRGlzYWJsZURlYnVnZ2VyIERpc2FibGVFeHBsaWNpdCBFbHNlIEVsc2VJZiBFbmFibGVBU00gJyArXG4gICAgICAnRW5hYmxlRGVidWdnZXIgRW5hYmxlRXhwbGljaXQgRW5kIEVuZEVudW1lcmF0aW9uIEVuZElmIEVuZEltcG9ydCBFbmRJbnRlcmZhY2UgRW5kTWFjcm8gRW5kUHJvY2VkdXJlICcgK1xuICAgICAgJ0VuZFNlbGVjdCBFbmRTdHJ1Y3R1cmUgRW5kU3RydWN0dXJlVW5pb24gRW5kV2l0aCBFbnVtZXJhdGlvbiBFeHRlbmRzIEZha2VSZXR1cm4gRm9yIE5leHQgRm9yRWFjaCAnICtcbiAgICAgICdGb3JFdmVyIEdsb2JhbCBHb3N1YiBHb3RvIElmIEltcG9ydCBJbXBvcnRDIEluY2x1ZGVCaW5hcnkgSW5jbHVkZUZpbGUgSW5jbHVkZVBhdGggSW50ZXJmYWNlIE1hY3JvICcgK1xuICAgICAgJ05ld0xpc3QgTm90IE9yIFByb2NlZHVyZVJldHVybiBQcm90ZWN0ZWQgUHJvdG90eXBlICcgK1xuICAgICAgJ1Byb3RvdHlwZUMgUmVhZCBSZURpbSBSZXBlYXQgVW50aWwgUmVzdG9yZSBSZXR1cm4gU2VsZWN0IFNoYXJlZCBTdGF0aWMgU3RlcCBTdHJ1Y3R1cmUgU3RydWN0dXJlVW5pb24gJyArXG4gICAgICAnU3dhcCBUbyBXZW5kIFdoaWxlIFdpdGggWEluY2x1ZGVGaWxlIFhPciAnICtcbiAgICAgICdQcm9jZWR1cmUgUHJvY2VkdXJlQyBQcm9jZWR1cmVDRExMIFByb2NlZHVyZURMTCBEZWNsYXJlIERlY2xhcmVDIERlY2xhcmVDRExMIERlY2xhcmVETEwnLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAvLyBDT01NRU5UUyB8IFBCIElERSBjb2xvcjogIzAwQUFBQSAoUGVyc2lhbiBHcmVlbilcbiAgICAgIGhsanMuQ09NTUVOVCgnOycsICckJywge3JlbGV2YW5jZTogMH0pLFxuXG4gICAgICB7IC8vIFBST0NFRFVSRVMgREVGSU5JVElPTlNcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKFByb2NlZHVyZXxEZWNsYXJlKShDfENETEx8RExMKT9cXFxcYicsXG4gICAgICAgIGVuZDogJ1xcXFwoJyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgeyAvLyBQUk9DRURVUkUgS0VZV09SRFMgfCBQQiBJREUgY29sb3I6ICMwMDY2NjYgKEJsdWUgU3RvbmUpICsgQm9sZFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgICBiZWdpbjogJyhQcm9jZWR1cmV8RGVjbGFyZSkoQ3xDRExMfERMTCk/JyxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgLy8gUFJPQ0VEVVJFIFJFVFVSTiBUWVBFIFNFVFRJTkcgfCBQQiBJREUgY29sb3I6ICMwMDAwMDAgKEJsYWNrKVxuICAgICAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwuXFxcXHcqJ1xuICAgICAgICAgICAgLy8gZW5kOiAnICcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSAvLyBQUk9DRURVUkUgTkFNRSB8IFBCIElERSBjb2xvcjogIzAwNjY2NiAoQmx1ZSBTdG9uZSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIFNUUklOR1MsXG4gICAgICBDT05TVEFOVFNcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdhbmQgZWxpZiBpcyBnbG9iYWwgYXMgaW4gaWYgZnJvbSByYWlzZSBmb3IgZXhjZXB0IGZpbmFsbHkgcHJpbnQgaW1wb3J0IHBhc3MgcmV0dXJuICcgK1xuICAgICAgJ2V4ZWMgZWxzZSBicmVhayBub3Qgd2l0aCBjbGFzcyBhc3NlcnQgeWllbGQgdHJ5IHdoaWxlIGNvbnRpbnVlIGRlbCBvciBkZWYgbGFtYmRhICcgK1xuICAgICAgJ2FzeW5jIGF3YWl0IG5vbmxvY2FsfDEwIE5vbmUgVHJ1ZSBGYWxzZScsXG4gICAgYnVpbHRfaW46XG4gICAgICAnRWxsaXBzaXMgTm90SW1wbGVtZW50ZWQnXG4gIH07XG4gIHZhciBQUk9NUFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsICBiZWdpbjogL14oPj4+fFxcLlxcLlxcLikgL1xuICB9O1xuICB2YXIgU1VCU1QgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3Vic3QnLFxuICAgIGJlZ2luOiAvXFx7LywgZW5kOiAvXFx9LyxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxiKT9yPycnJy8sIGVuZDogLycnJy8sXG4gICAgICAgIGNvbnRhaW5zOiBbUFJPTVBUXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8odXxiKT9yP1wiXCJcIi8sIGVuZDogL1wiXCJcIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbUFJPTVBUXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZiknJycvLCBlbmQ6IC8nJycvLFxuICAgICAgICBjb250YWluczogW1BST01QVCwgU1VCU1RdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogLyhmcnxyZnxmKVwiXCJcIi8sIGVuZDogL1wiXCJcIi8sXG4gICAgICAgIGNvbnRhaW5zOiBbUFJPTVBULCBTVUJTVF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8cnx1ciknLywgZW5kOiAvJy8sXG4gICAgICAgIHJlbGV2YW5jZTogMTBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKHV8cnx1cilcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oYnxiciknLywgZW5kOiAvJy9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKGJ8YnIpXCIvLCBlbmQ6IC9cIi9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvKGZyfHJmfGYpJy8sIGVuZDogLycvLFxuICAgICAgICBjb250YWluczogW1NVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC8oZnJ8cmZ8ZilcIi8sIGVuZDogL1wiLyxcbiAgICAgICAgY29udGFpbnM6IFtTVUJTVF1cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiBobGpzLkJJTkFSWV9OVU1CRVJfUkUgKyAnW2xMakpdPyd9LFxuICAgICAge2JlZ2luOiAnXFxcXGIoMG9bMC03XSspW2xMakpdPyd9LFxuICAgICAge2JlZ2luOiBobGpzLkNfTlVNQkVSX1JFICsgJ1tsTGpKXT8nfVxuICAgIF1cbiAgfTtcbiAgdmFyIFBBUkFNUyA9IHtcbiAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICBjb250YWluczogWydzZWxmJywgUFJPTVBULCBOVU1CRVIsIFNUUklOR11cbiAgfTtcbiAgU1VCU1QuY29udGFpbnMgPSBbU1RSSU5HLCBOVU1CRVIsIFBST01QVF07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydweScsICdneXAnXSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgaWxsZWdhbDogLyg8XFwvfC0+fFxcPyl8PT4vLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBQUk9NUFQsXG4gICAgICBOVU1CRVIsXG4gICAgICBTVFJJTkcsXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdmdW5jdGlvbicsIGJlZ2luS2V5d29yZHM6ICdkZWYnfSxcbiAgICAgICAgICB7Y2xhc3NOYW1lOiAnY2xhc3MnLCBiZWdpbktleXdvcmRzOiAnY2xhc3MnfVxuICAgICAgICBdLFxuICAgICAgICBlbmQ6IC86LyxcbiAgICAgICAgaWxsZWdhbDogL1skez07XFxuLF0vLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIFBBUkFNUyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogLy0+LywgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogJ05vbmUnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eW1xcdCBdKkAvLCBlbmQ6IC8kL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXGIocHJpbnR8ZXhlYylcXCgvIC8vIGRvbuKAmXQgaGlnaGxpZ2h0IGtleXdvcmRzLXR1cm5lZC1mdW5jdGlvbnMgaW4gUHl0aG9uIDNcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUV9LRVlXT1JEUyA9IHtcbiAga2V5d29yZDpcbiAgICAnZG8gd2hpbGUgc2VsZWN0IGRlbGV0ZSBieSB1cGRhdGUgZnJvbScsXG4gIGxpdGVyYWw6XG4gICAgJzBiIDFiJyxcbiAgYnVpbHRfaW46XG4gICAgJ25lZyBub3QgbnVsbCBzdHJpbmcgcmVjaXByb2NhbCBmbG9vciBjZWlsaW5nIHNpZ251bSBtb2QgeGJhciB4bG9nIGFuZCBvciBlYWNoIHNjYW4gb3ZlciBwcmlvciBtbXUgbHNxIGludiBtZDUgbHRpbWUgZ3RpbWUgY291bnQgZmlyc3QgdmFyIGRldiBtZWQgY292IGNvciBhbGwgYW55IHJhbmQgc3VtcyBwcmRzIG1pbnMgbWF4cyBmaWxscyBkZWx0YXMgcmF0aW9zIGF2Z3MgZGlmZmVyIHByZXYgbmV4dCByYW5rIHJldmVyc2UgaWFzYyBpZGVzYyBhc2MgZGVzYyBtc3VtIG1jb3VudCBtYXZnIG1kZXYgeHJhbmsgbW1pbiBtbWF4IHhwcmV2IHJvdGF0ZSBkaXN0aW5jdCBncm91cCB3aGVyZSBmbGlwIHR5cGUga2V5IHRpbCBnZXQgdmFsdWUgYXR0ciBjdXQgc2V0IHVwc2VydCByYXplIHVuaW9uIGludGVyIGV4Y2VwdCBjcm9zcyBzdiB2cyBzdWJsaXN0IGVubGlzdCByZWFkMCByZWFkMSBob3BlbiBoY2xvc2UgaGRlbCBoc3ltIGhjb3VudCBwZWFjaCBzeXN0ZW0gbHRyaW0gcnRyaW0gdHJpbSBsb3dlciB1cHBlciBzc3IgdmlldyB0YWJsZXMgdmlld3MgY29scyB4Y29scyBrZXlzIHhrZXkgeGNvbCB4YXNjIHhkZXNjIGZrZXlzIG1ldGEgbGogYWogYWowIGlqIHBqIGFzb2YgdWogd3cgd2ogd2oxIGZieSB4Z3JvdXAgdW5ncm91cCBlaiBzYXZlIGxvYWQgcnNhdmUgcmxvYWQgc2hvdyBjc3YgcGFyc2UgZXZhbCBtaW4gbWF4IGF2ZyB3YXZnIHdzdW0gc2luIGNvcyB0YW4gc3VtJyxcbiAgdHlwZTpcbiAgICAnYGZsb2F0IGBkb3VibGUgaW50IGB0aW1lc3RhbXAgYHRpbWVzcGFuIGBkYXRldGltZSBgdGltZSBgYm9vbGVhbiBgc3ltYm9sIGBjaGFyIGBieXRlIGBzaG9ydCBgbG9uZyBgcmVhbCBgbW9udGggYGRhdGUgYG1pbnV0ZSBgc2Vjb25kIGBndWlkJ1xuICB9O1xuICByZXR1cm4ge1xuICBhbGlhc2VzOlsnaycsICdrZGInXSxcbiAga2V5d29yZHM6IFFfS0VZV09SRFMsXG4gIGxleGVtZXM6IC8oYD8pW0EtWmEtejAtOV9dK1xcYi8sXG4gIGNvbnRhaW5zOiBbXG4gIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgIGhsanMuQ19OVU1CRVJfTU9ERVxuICAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnaW4gb2Ygb24gaWYgZm9yIHdoaWxlIGZpbmFsbHkgdmFyIG5ldyBmdW5jdGlvbiBkbyByZXR1cm4gdm9pZCBlbHNlIGJyZWFrIGNhdGNoICcgK1xuICAgICAgICAnaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSAnICtcbiAgICAgICAgJ2xldCB5aWVsZCBjb25zdCBleHBvcnQgc3VwZXIgZGVidWdnZXIgYXMgYXN5bmMgYXdhaXQgaW1wb3J0JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgdW5kZWZpbmVkIE5hTiBJbmZpbml0eScsXG4gICAgICBidWlsdF9pbjpcbiAgICAgICAgJ2V2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50ICcgK1xuICAgICAgICAnZW5jb2RlVVJJIGVuY29kZVVSSUNvbXBvbmVudCBlc2NhcGUgdW5lc2NhcGUgT2JqZWN0IEZ1bmN0aW9uIEJvb2xlYW4gRXJyb3IgJyArXG4gICAgICAgICdFdmFsRXJyb3IgSW50ZXJuYWxFcnJvciBSYW5nZUVycm9yIFJlZmVyZW5jZUVycm9yIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IgJyArXG4gICAgICAgICdUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSAnICtcbiAgICAgICAgJ0Zsb2F0NjRBcnJheSBJbnQxNkFycmF5IEludDMyQXJyYXkgSW50OEFycmF5IFVpbnQxNkFycmF5IFVpbnQzMkFycmF5ICcgK1xuICAgICAgICAnVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBBcnJheUJ1ZmZlciBEYXRhVmlldyBKU09OIEludGwgYXJndW1lbnRzIHJlcXVpcmUgJyArXG4gICAgICAgICdtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgJyArXG4gICAgICAgICdCZWhhdmlvciBib29sIGNvbG9yIGNvb3JkaW5hdGUgZGF0ZSBkb3VibGUgZW51bWVyYXRpb24gZm9udCBnZW9jaXJjbGUgZ2VvcmVjdGFuZ2xlICcgK1xuICAgICAgICAnZ2Vvc2hhcGUgaW50IGxpc3QgbWF0cml4NHg0IHBhcmVudCBwb2ludCBxdWF0ZXJuaW9uIHJlYWwgcmVjdCAnICtcbiAgICAgICAgJ3NpemUgc3RyaW5nIHVybCB2YXJpYW50IHZlY3RvcjJkIHZlY3RvcjNkIHZlY3RvcjRkJyArXG4gICAgICAgICdQcm9taXNlJ1xuICAgIH07XG5cbiAgdmFyIFFNTF9JREVOVF9SRSA9ICdbYS16QS1aX11bYS16QS1aMC05XFxcXC5fXSonO1xuXG4gIC8vIElzb2xhdGUgcHJvcGVydHkgc3RhdGVtZW50cy4gRW5kcyBhdCBhIDosID0sIDssICwsIGEgY29tbWVudCBvciBlbmQgb2YgbGluZS5cbiAgLy8gVXNlIHByb3BlcnR5IGNsYXNzLlxuICB2YXIgUFJPUEVSVFkgPSB7XG4gICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgIGJlZ2luOiAnXFxcXGJwcm9wZXJ0eVxcXFxiJyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBlbmQ6ICcoOnw9fDt8LHwvL3wvXFxcXCp8JCknLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgIH1cbiAgfTtcblxuICAvLyBJc29sYXRlIHNpZ25hbCBzdGF0ZW1lbnRzLiBFbmRzIGF0IGEgKSBhIGNvbW1lbnQgb3IgZW5kIG9mIGxpbmUuXG4gIC8vIFVzZSBwcm9wZXJ0eSBjbGFzcy5cbiAgdmFyIFNJR05BTCA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgYmVnaW46ICdcXFxcYnNpZ25hbFxcXFxiJyxcbiAgICAgIHN0YXJ0czoge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBlbmQ6ICcoXFxcXCh8Onw9fDt8LHwvL3wvXFxcXCp8JCknLFxuICAgICAgICByZXR1cm5FbmQ6IHRydWVcbiAgICAgIH1cbiAgfTtcblxuICAvLyBpZDogaXMgc3BlY2lhbCBpbiBRTUwuIFdoZW4gd2Ugc2VlIGlkOiB3ZSB3YW50IHRvIG1hcmsgdGhlIGlkOiBhcyBhdHRyaWJ1dGUgYW5kXG4gIC8vIGVtcGhhc2l6ZSB0aGUgdG9rZW4gZm9sbG93aW5nLlxuICB2YXIgSURfSUQgPSB7XG4gICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgYmVnaW46ICdcXFxcYmlkXFxcXHMqOicsXG4gICAgICBzdGFydHM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgZW5kOiBRTUxfSURFTlRfUkUsXG4gICAgICAgIHJldHVybkVuZDogZmFsc2VcbiAgICAgIH1cbiAgfTtcblxuICAvLyBGaW5kIFFNTCBvYmplY3QgYXR0cmlidXRlLiBBbiBhdHRyaWJ1dGUgaXMgYSBRTUwgaWRlbnRpZmllciBmb2xsb3dlZCBieSA6LlxuICAvLyBVbmZvcnR1bmF0ZWx5IGl0J3MgaGFyZCB0byBrbm93IHdoZXJlIGl0IGVuZHMsIGFzIGl0IG1heSBjb250YWluIHNjYWxhcnMsXG4gIC8vIG9iamVjdHMsIG9iamVjdCBkZWZpbml0aW9ucywgb3IgamF2YXNjcmlwdC4gVGhlIHRydWUgZW5kIGlzIGVpdGhlciB3aGVuIHRoZSBwYXJlbnRcbiAgLy8gZW5kcyBvciB0aGUgbmV4dCBhdHRyaWJ1dGUgaXMgZGV0ZWN0ZWQuXG4gIHZhciBRTUxfQVRUUklCVVRFID0ge1xuICAgIGJlZ2luOiBRTUxfSURFTlRfUkUgKyAnXFxcXHMqOicsXG4gICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46IFFNTF9JREVOVF9SRSxcbiAgICAgICAgZW5kOiAnXFxcXHMqOicsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfVxuICAgIF0sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgLy8gRmluZCBRTUwgb2JqZWN0LiBBIFFNTCBvYmplY3QgaXMgYSBRTUwgaWRlbnRpZmllciBmb2xsb3dlZCBieSB7IGFuZCBlbmRzIGF0IHRoZSBtYXRjaGluZyB9LlxuICAvLyBBbGwgd2UgcmVhbGx5IGNhcmUgYWJvdXQgaXMgZmluZGluZyBJREVOVCBmb2xsb3dlZCBieSB7IGFuZCBqdXN0IG1hcmsgdXAgdGhlIElERU5UIGFuZCBpZ25vcmUgdGhlIHsuXG4gIHZhciBRTUxfT0JKRUNUID0ge1xuICAgIGJlZ2luOiBRTUxfSURFTlRfUkUgKyAnXFxcXHMqeycsIGVuZDogJ3snLFxuICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge2JlZ2luOiBRTUxfSURFTlRfUkV9KVxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncXQnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAvXlxccypbJ1wiXXVzZSAoc3RyaWN0fGFzbSlbJ1wiXS9cbiAgICAgIH0sXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgeyAvLyB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCRcXFxceycsIGVuZDogJ1xcXFx9J1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKDBbYkJdWzAxXSspJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYigwW29PXVswLTddKyknIH0sXG4gICAgICAgICAgeyBiZWdpbjogaGxqcy5DX05VTUJFUl9SRSB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHsgLy8gXCJ2YWx1ZVwiIGNvbnRhaW5lclxuICAgICAgICBiZWdpbjogJygnICsgaGxqcy5SRV9TVEFSVEVSU19SRSArICd8XFxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxcXGIpXFxcXHMqJyxcbiAgICAgICAga2V5d29yZHM6ICdyZXR1cm4gdGhyb3cgY2FzZScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICAgICAgaGxqcy5SRUdFWFBfTU9ERSxcbiAgICAgICAgICB7IC8vIEU0WCAvIEpTWFxuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPlxccypbKTtcXF1dLyxcbiAgICAgICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgICAgIHN1Ykxhbmd1YWdlOiAneG1sJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgU0lHTkFMLFxuICAgICAgUFJPUEVSVFksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgICAgIGV4Y2x1ZGVCZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC9cXFt8JS9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgaGxqcy5JREVOVF9SRSwgcmVsZXZhbmNlOiAwIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBhZnRlciBkb3RzXG4gICAgICB9LFxuICAgICAgSURfSUQsXG4gICAgICBRTUxfQVRUUklCVVRFLFxuICAgICAgUU1MX09CSkVDVFxuICAgIF0sXG4gICAgaWxsZWdhbDogLyMvXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgSURFTlRfUkUgPSAnKFthLXpBLVpdfFxcXFwuW2EtekEtWi5dKVthLXpBLVowLTkuX10qJztcblxuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogSURFTlRfUkUsXG4gICAgICAgIGxleGVtZXM6IElERU5UX1JFLFxuICAgICAgICBrZXl3b3Jkczoge1xuICAgICAgICAgIGtleXdvcmQ6XG4gICAgICAgICAgICAnZnVuY3Rpb24gaWYgaW4gYnJlYWsgbmV4dCByZXBlYXQgZWxzZSBmb3IgcmV0dXJuIHN3aXRjaCB3aGlsZSB0cnkgdHJ5Q2F0Y2ggJyArXG4gICAgICAgICAgICAnc3RvcCB3YXJuaW5nIHJlcXVpcmUgbGlicmFyeSBhdHRhY2ggZGV0YWNoIHNvdXJjZSBzZXRNZXRob2Qgc2V0R2VuZXJpYyAnICtcbiAgICAgICAgICAgICdzZXRHcm91cEdlbmVyaWMgc2V0Q2xhc3MgLi4uJyxcbiAgICAgICAgICBsaXRlcmFsOlxuICAgICAgICAgICAgJ05VTEwgTkEgVFJVRSBGQUxTRSBUIEYgSW5mIE5hTiBOQV9pbnRlZ2VyX3wxMCBOQV9yZWFsX3wxMCBOQV9jaGFyYWN0ZXJffDEwICcgK1xuICAgICAgICAgICAgJ05BX2NvbXBsZXhffDEwJ1xuICAgICAgICB9LFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhleCB2YWx1ZVxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxcXGJcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBleHBsaWNpdCBpbnRlZ2VyXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFxkKyg/OltlRV1bK1xcXFwtXT9cXFxcZCopP0xcXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlciB3aXRoIHRyYWlsaW5nIGRlY2ltYWxcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGQrXFxcXC4oPyFcXFxcZCkoPzppXFxcXGIpP1wiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlclxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcZCsoPzpcXFxcLlxcXFxkKik/KD86W2VFXVsrXFxcXC1dP1xcXFxkKik/aT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlciB3aXRoIGxlYWRpbmcgZGVjaW1hbFxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcLlxcXFxkKyg/OltlRV1bK1xcXFwtXT9cXFxcZCopP2k/XFxcXGJcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIC8vIGVzY2FwZWQgaWRlbnRpZmllclxuICAgICAgICBiZWdpbjogJ2AnLFxuICAgICAgICBlbmQ6ICdgJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXSxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdcIicsIGVuZDogJ1wiJ30sXG4gICAgICAgICAge2JlZ2luOiBcIidcIiwgZW5kOiBcIidcIn1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6XG4gICAgICAnQXJjaGl2ZVJlY29yZCBBcmVhTGlnaHRTb3VyY2UgQXRtb3NwaGVyZSBBdHRyaWJ1dGUgQXR0cmlidXRlQmVnaW4gQXR0cmlidXRlRW5kIEJhc2lzICcgK1xuICAgICAgJ0JlZ2luIEJsb2JieSBCb3VuZCBDbGlwcGluZyBDbGlwcGluZ1BsYW5lIENvbG9yIENvbG9yU2FtcGxlcyBDb25jYXRUcmFuc2Zvcm0gQ29uZSAnICtcbiAgICAgICdDb29yZGluYXRlU3lzdGVtIENvb3JkU3lzVHJhbnNmb3JtIENyb3BXaW5kb3cgQ3VydmVzIEN5bGluZGVyIERlcHRoT2ZGaWVsZCBEZXRhaWwgJyArXG4gICAgICAnRGV0YWlsUmFuZ2UgRGlzayBEaXNwbGFjZW1lbnQgRGlzcGxheSBFbmQgRXJyb3JIYW5kbGVyIEV4cG9zdXJlIEV4dGVyaW9yIEZvcm1hdCAnICtcbiAgICAgICdGcmFtZUFzcGVjdFJhdGlvIEZyYW1lQmVnaW4gRnJhbWVFbmQgR2VuZXJhbFBvbHlnb24gR2VvbWV0cmljQXBwcm94aW1hdGlvbiBHZW9tZXRyeSAnICtcbiAgICAgICdIaWRlciBIeXBlcmJvbG9pZCBJZGVudGl0eSBJbGx1bWluYXRlIEltYWdlciBJbnRlcmlvciBMaWdodFNvdXJjZSAnICtcbiAgICAgICdNYWtlQ3ViZUZhY2VFbnZpcm9ubWVudCBNYWtlTGF0TG9uZ0Vudmlyb25tZW50IE1ha2VTaGFkb3cgTWFrZVRleHR1cmUgTWF0dGUgJyArXG4gICAgICAnTW90aW9uQmVnaW4gTW90aW9uRW5kIE51UGF0Y2ggT2JqZWN0QmVnaW4gT2JqZWN0RW5kIE9iamVjdEluc3RhbmNlIE9wYWNpdHkgT3B0aW9uICcgK1xuICAgICAgJ09yaWVudGF0aW9uIFBhcmFib2xvaWQgUGF0Y2ggUGF0Y2hNZXNoIFBlcnNwZWN0aXZlIFBpeGVsRmlsdGVyIFBpeGVsU2FtcGxlcyAnICtcbiAgICAgICdQaXhlbFZhcmlhbmNlIFBvaW50cyBQb2ludHNHZW5lcmFsUG9seWdvbnMgUG9pbnRzUG9seWdvbnMgUG9seWdvbiBQcm9jZWR1cmFsIFByb2plY3Rpb24gJyArXG4gICAgICAnUXVhbnRpemUgUmVhZEFyY2hpdmUgUmVsYXRpdmVEZXRhaWwgUmV2ZXJzZU9yaWVudGF0aW9uIFJvdGF0ZSBTY2FsZSBTY3JlZW5XaW5kb3cgJyArXG4gICAgICAnU2hhZGluZ0ludGVycG9sYXRpb24gU2hhZGluZ1JhdGUgU2h1dHRlciBTaWRlcyBTa2V3IFNvbGlkQmVnaW4gU29saWRFbmQgU3BoZXJlICcgK1xuICAgICAgJ1N1YmRpdmlzaW9uTWVzaCBTdXJmYWNlIFRleHR1cmVDb29yZGluYXRlcyBUb3J1cyBUcmFuc2Zvcm0gVHJhbnNmb3JtQmVnaW4gVHJhbnNmb3JtRW5kICcgK1xuICAgICAgJ1RyYW5zZm9ybVBvaW50cyBUcmFuc2xhdGUgVHJpbUN1cnZlIFdvcmxkQmVnaW4gV29ybGRFbmQnLFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIElERU5USUZJRVIgPSAnW2EtekEtWi1fXVteXFxcXG57XStcXFxceyc7XG5cbiAgdmFyIFBST1BFUlRZID0ge1xuICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgYmVnaW46IC9bYS16QS1aLV9dKy8sIGVuZDogL1xccyo6LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBzdGFydHM6IHtcbiAgICAgIGVuZDogJzsnLFxuICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgY29udGFpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICAgICAgICBiZWdpbjogL1xcLlthLXpBLVotX10rL1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgYmVnaW46IC9cXChvcHRpb25hbFxcKS9cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnZ3JhcGgnLCAnaW5zdGFuY2VzJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3JkczogJ2ltcG9ydCcsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIC8vIEZhY2V0IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXmZhY2V0ICcgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAga2V5d29yZHM6ICdmYWNldCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgUFJPUEVSVFksXG4gICAgICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnN0YW5jZSBzZWN0aW9uc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ15cXFxccyppbnN0YW5jZSBvZiAnICsgSURFTlRJRklFUixcbiAgICAgICAgZW5kOiAnfScsXG4gICAgICAgIGtleXdvcmRzOiAnbmFtZSBjb3VudCBjaGFubmVscyBpbnN0YW5jZS1kYXRhIGluc3RhbmNlLXN0YXRlIGluc3RhbmNlIG9mJyxcbiAgICAgICAgaWxsZWdhbDogL1xcUy8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIFBST1BFUlRZLFxuICAgICAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gQ29tcG9uZW50IHNlY3Rpb25zXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXicgKyBJREVOVElGSUVSLFxuICAgICAgICBlbmQ6ICd9JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBQUk9QRVJUWSxcbiAgICAgICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIENvbW1lbnRzXG4gICAgICBobGpzLkhBU0hfQ09NTUVOVF9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IC8vIENvbG9ycyBmcm9tIFJvdXRlck9TIHRlcm1pbmFsOlxuLy8gICBncmVlbiAgICAgICAgLSAjMEU5QTAwXG4vLyAgIHRlYWwgICAgICAgICAtICMwQzlBOUFcbi8vICAgcHVycGxlICAgICAgIC0gIzk5MDY5QVxuLy8gICBsaWdodC1icm93biAgLSAjOUE5OTAwXG5cbmZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgU1RBVEVNRU5UUyA9ICdmb3JlYWNoIGRvIHdoaWxlIGZvciBpZiBmcm9tIHRvIHN0ZXAgZWxzZSBvbi1lcnJvciBhbmQgb3Igbm90IGluJztcblxuICAvLyBHbG9iYWwgY29tbWFuZHM6IEV2ZXJ5IGdsb2JhbCBjb21tYW5kIHNob3VsZCBzdGFydCB3aXRoIFwiOlwiIHRva2VuLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIHZhcmlhYmxlLlxuICB2YXIgR0xPQkFMX0NPTU1BTkRTID0gJ2dsb2JhbCBsb2NhbCBiZWVwIGRlbGF5IHB1dCBsZW4gdHlwZW9mIHBpY2sgbG9nIHRpbWUgc2V0IGZpbmQgZW52aXJvbm1lbnQgdGVybWluYWwgZXJyb3IgZXhlY3V0ZSBwYXJzZSByZXNvbHZlIHRvYXJyYXkgdG9ib29sIHRvaWQgdG9pcCB0b2lwNiB0b251bSB0b3N0ciB0b3RpbWUnO1xuXG4gIC8vIENvbW1vbiBjb21tYW5kczogRm9sbG93aW5nIGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIG1vc3Qgc3ViLW1lbnVzOlxuICB2YXIgQ09NTU9OX0NPTU1BTkRTID0gJ2FkZCByZW1vdmUgZW5hYmxlIGRpc2FibGUgc2V0IGdldCBwcmludCBleHBvcnQgZWRpdCBmaW5kIHJ1biBkZWJ1ZyBlcnJvciBpbmZvIHdhcm5pbmcnO1xuXG4gIHZhciBMSVRFUkFMUyA9ICd0cnVlIGZhbHNlIHllcyBubyBub3RoaW5nIG5pbCBudWxsJztcblxuICB2YXIgT0JKRUNUUyA9ICd0cmFmZmljLWZsb3cgdHJhZmZpYy1nZW5lcmF0b3IgZmlyZXdhbGwgc2NoZWR1bGVyIGFhYSBhY2NvdW50aW5nIGFkZHJlc3MtbGlzdCBhZGRyZXNzIGFsaWduIGFyZWEgYmFuZHdpZHRoLXNlcnZlciBiZmQgYmdwIGJyaWRnZSBjbGllbnQgY2xvY2sgY29tbXVuaXR5IGNvbmZpZyBjb25uZWN0aW9uIGNvbnNvbGUgY3VzdG9tZXIgZGVmYXVsdCBkaGNwLWNsaWVudCBkaGNwLXNlcnZlciBkaXNjb3ZlcnkgZG5zIGUtbWFpbCBldGhlcm5ldCBmaWx0ZXIgZmlyZXdhbGwgZmlybXdhcmUgZ3BzIGdyYXBoaW5nIGdyb3VwIGhhcmR3YXJlIGhlYWx0aCBob3RzcG90IGlkZW50aXR5IGlnbXAtcHJveHkgaW5jb21pbmcgaW5zdGFuY2UgaW50ZXJmYWNlIGlwIGlwc2VjIGlwdjYgaXJxIGwydHAtc2VydmVyIGxjZCBsZHAgbG9nZ2luZyBtYWMtc2VydmVyIG1hYy13aW5ib3ggbWFuZ2xlIG1hbnVhbCBtaXJyb3IgbW1lIG1wbHMgbmF0IG5kIG5laWdoYm9yIG5ldHdvcmsgbm90ZSBudHAgb3NwZiBvc3BmLXYzIG92cG4tc2VydmVyIHBhZ2UgcGVlciBwaW0gcGluZyBwb2xpY3kgcG9vbCBwb3J0IHBwcCBwcHBvZS1jbGllbnQgcHB0cC1zZXJ2ZXIgcHJlZml4IHByb2ZpbGUgcHJvcG9zYWwgcHJveHkgcXVldWUgcmFkaXVzIHJlc291cmNlIHJpcCByaXBuZyByb3V0ZSByb3V0aW5nIHNjcmVlbiBzY3JpcHQgc2VjdXJpdHktcHJvZmlsZXMgc2VydmVyIHNlcnZpY2Ugc2VydmljZS1wb3J0IHNldHRpbmdzIHNoYXJlcyBzbWIgc21zIHNuaWZmZXIgc25tcCBzbm9vcGVyIHNvY2tzIHNzdHAtc2VydmVyIHN5c3RlbSB0b29sIHRyYWNraW5nIHR5cGUgdXBncmFkZSB1cG5wIHVzZXItbWFuYWdlciB1c2VycyB1c2VyIHZsYW4gc2VjcmV0IHZycnAgd2F0Y2hkb2cgd2ViLWFjY2VzcyB3aXJlbGVzcyBwcHRwIHBwcG9lIGxhbiB3YW4gbGF5ZXI3LXByb3RvY29sIGxlYXNlIHNpbXBsZSByYXcnO1xuXG4gIC8vIHByaW50IHBhcmFtZXRlcnNcbiAgLy8gU2V2ZXJhbCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUgZm9yIHByaW50IGNvbW1hbmQ6XG4gIC8vIFRvRG86IHZhciBQQVJBTUVURVJTX1BSSU5UID0gJ2FwcGVuZCBhcy12YWx1ZSBicmllZiBkZXRhaWwgY291bnQtb25seSBmaWxlIGZvbGxvdyBmb2xsb3ctb25seSBmcm9tIGludGVydmFsIHRlcnNlIHZhbHVlLWxpc3Qgd2l0aG91dC1wYWdpbmcgd2hlcmUgaW5mbyc7XG4gIC8vIFRvRG86IHZhciBPUEVSQVRPUlMgPSAnJiYgYW5kICEgbm90IHx8IG9yIGluIH4gXiAmIDw8ID4+ICsgLSAqIC8nO1xuICAvLyBUb0RvOiB2YXIgVFlQRVMgPSAnbnVtIG51bWJlciBib29sIGJvb2xlYW4gc3RyIHN0cmluZyBpcCBpcDYtcHJlZml4IGlkIHRpbWUgYXJyYXknO1xuICAvLyBUb0RvOiBUaGUgZm9sbG93aW5nIHRva2VucyBzZXJ2ZSBhcyBkZWxpbWl0ZXJzIGluIHRoZSBncmFtbWFyOiAoKSAgW10gIHt9ICA6ICAgOyAgICQgICAvIFxuXG4gIHZhciBWQVJfUFJFRklYID0gJ2dsb2JhbCBsb2NhbCBzZXQgZm9yIGZvcmVhY2gnO1xuXG4gIHZhciBWQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cXCRbXFx3XFxkI0BdW1xcd1xcZF9dKi99LFxuICAgICAge2JlZ2luOiAvXFwkXFx7KC4qPyl9L31cbiAgICBdXG4gIH07XG4gIFxuICB2YXIgUVVPVEVfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC9cIi8sIGVuZDogL1wiLyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5CQUNLU0xBU0hfRVNDQVBFLFxuICAgICAgVkFSLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFwoLywgZW5kOiAvXFwpLyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9XG4gICAgXVxuICB9O1xuICBcbiAgdmFyIEFQT1NfU1RSSU5HID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46IC8nLywgZW5kOiAvJy9cbiAgfTtcbiAgXG4gIHZhciBJUEFERFIgPSAnKCgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSlcXC4pezN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcXFxiJztcbiAgdmFyIElQQUREUl93QklUTUFTSyA9ICBJUEFERFIrJy8oM1swLTJdfFsxLTJdWzAtOV18XFxcXGQpJztcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncm91dGVyb3MnLCAnbWlrcm90aWsnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGxleGVtZXM6IC86P1tcXHctXSsvLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBsaXRlcmFsOiBMSVRFUkFMUyxcbiAgICAgIGtleXdvcmQ6IFNUQVRFTUVOVFMgKyAnIDonICsgU1RBVEVNRU5UUy5zcGxpdCgnICcpLmpvaW4oJyA6JykgKyAnIDonICsgR0xPQkFMX0NPTU1BTkRTLnNwbGl0KCcgJykuam9pbignIDonKSxcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7IC8vINC90LXQtNC+0L/Rg9GB0YLQuNC80YvQtSDQutC+0L3RgdGC0YDRg9C60YbQuNC4XG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgeyBiZWdpbjogL15ALywgZW5kOiAvJC8sIH0sICAgICAgICAgICAgICAgLy8gZG5zXG4gICAgICAgICAgeyBiZWdpbjogL1xcL1xcKi8sIGVuZDogL1xcKlxcLy8sIH0sICAgICAgICAgIC8vIC0tIGNvbW1lbnRcbiAgICAgICAgICB7IGJlZ2luOiAvJSUvLCBlbmQ6IC8kLywgfSwgICAgICAgICAgICAgICAvLyAtLSBjb21tZW50XG4gICAgICAgICAgeyBiZWdpbjogL14nLywgZW5kOiAvJC8sIH0sICAgICAgICAgICAgICAgLy8gTW9ua2V5IG9uZSBsaW5lIGNvbW1lbnRcbiAgICAgICAgICB7IGJlZ2luOiAvXlxccypcXC9bXFx3LV0rPS8sIGVuZDogLyQvLCB9LCAgICAvLyBqYm9zcy1jbGlcbiAgICAgICAgICB7IGJlZ2luOiAvXFwvXFwvLywgZW5kOiAvJC8sIH0sICAgICAgICAgICAgIC8vIFN0YW4gY29tbWVudFxuICAgICAgICAgIHsgYmVnaW46IC9eXFxbXFw8LywgZW5kOiAvXFw+XFxdJC8sIH0sICAgICAgICAvLyBGIyBjbGFzcyBkZWNsYXJhdGlvbj9cbiAgICAgICAgICB7IGJlZ2luOiAvPFxcLy8sIGVuZDogLz4vLCB9LCAgICAgICAgICAgICAgLy8gSFRNTCB0YWdzXG4gICAgICAgICAgeyBiZWdpbjogL15mYWNldCAvLCBlbmQ6IC9cXH0vLCB9LCAgICAgICAgIC8vIHJvYm9jb25mIC0g0LvRjtGC0YvQuSDQutC+0YHRgtGL0LvRjCApKSlcbiAgICAgICAgICB7IGJlZ2luOiAnXjFcXFxcLlxcXFwuKFxcXFxkKykkJywgZW5kOiAvJC8sIH0sICAvLyB0YXAgIFxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvLi8sXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKCdeIycsICckJyksXG4gICAgICBRVU9URV9TVFJJTkcsXG4gICAgICBBUE9TX1NUUklORyxcbiAgICAgIFZBUixcbiAgICAgIHsgLy8gYXR0cmlidXRlPXZhbHVlXG4gICAgICAgIGJlZ2luOiAvW1xcdy1dK1xcPShbXlxcc1xce1xcfVxcW1xcXVxcKFxcKV0rKS8sIFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ2F0dHJpYnV0ZScsXG4gICAgICAgICAgICBiZWdpbjogL1tePV0rL1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC89LywgXG4gICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogIHRydWUsXG4gICAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICBRVU9URV9TVFJJTkcsXG4gICAgICAgICAgICAgIEFQT1NfU1RSSU5HLFxuICAgICAgICAgICAgICBWQVIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdsaXRlcmFsJyxcbiAgICAgICAgICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBMSVRFUkFMUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpXFxcXGInLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAvKntcbiAgICAgICAgICAgICAgICAvLyBJUHY0IGFkZHJlc3NlcyBhbmQgc3VibmV0c1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSX3dCSVRNQVNLKycoLCcrSVBBRERSX3dCSVRNQVNLKycpKid9LCAvLzE5Mi4xNjguMC4wLzI0LDEuMi4zLjAvMjRcbiAgICAgICAgICAgICAgICAgIHtiZWdpbjogSVBBRERSKyctJytJUEFERFJ9LCAgICAgICAvLyAxOTIuMTY4LjAuMS0xOTIuMTY4LjAuM1xuICAgICAgICAgICAgICAgICAge2JlZ2luOiBJUEFERFIrJygsJytJUEFERFIrJykqJ30sIC8vIDE5Mi4xNjguMC4xLDE5Mi4xNjguMC4zNCwxOTIuMTY4LjI0LjEsMTkyLjE2OC4wLjFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sIC8vICovXG4gICAgICAgICAgICAgIC8qe1xuICAgICAgICAgICAgICAgIC8vIE1BQyBhZGRyZXNzZXMgYW5kIERIQ1AgQ2xpZW50IElEc1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgYmVnaW46IC9cXGIoMTopPyhbMC05QS1GYS1mXXsxLDJ9WzotXSl7NX0oWzAtOUEtRmEtZl0pezEsMn1cXGIvLFxuICAgICAgICAgICAgICB9LCAvLyovXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyDQndC1INGE0L7RgNC80LDRgtC40YDQvtCy0LDRgtGMINC90LUg0LrQu9Cw0YHRgdC40YTQuNGG0LjRgNC+0LLQsNC90L3Ri9C1INC30L3QsNGH0LXQvdC40Y8uINCd0LXQvtCx0YXQvtC00LjQvNC+INC00LvRjyDQuNGB0LrQu9GO0YfQtdC90LjRjyDQv9C+0LTRgdCy0LXRgtC60Lgg0LfQvdCw0YfQtdC90LjQuSDQutCw0LogYnVpbHRfaW4uXG4gICAgICAgICAgICAgICAgLy8gY2xhc3NOYW1lOiAnbnVtYmVyJywgIFxuICAgICAgICAgICAgICAgIGJlZ2luOiAvKFwiW15cIl0qXCJ8W15cXHNcXHtcXH1cXFtcXF1dKykvLFxuICAgICAgICAgICAgICB9LCAvLyovXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSAvLyovXG4gICAgICAgIF1cbiAgICAgIH0sLy8qL1xuICAgICAge1xuICAgICAgICAvLyBIRVggdmFsdWVzXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAvXFwqWzAtOWEtZkEtRl0rLyxcbiAgICAgIH0sIC8vKi9cblxuICAgICAgeyBcbiAgICAgICAgYmVnaW46ICdcXFxcYignICsgQ09NTU9OX0NPTU1BTkRTLnNwbGl0KCcgJykuam9pbignfCcpICsgJykoW1xcXFxzXFxbXFwoXXxcXF0pJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRpbi1uYW1lJywgLy8nZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46IC9cXHcrLyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLCAgXG4gICAgICB9LFxuICAgICAgXG4gICAgICB7IFxuICAgICAgICBjbGFzc05hbWU6ICdidWlsdF9pbicsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnKFxcXFwuXFxcXC4vfC98XFxcXHMpKCgnICsgT0JKRUNUUy5zcGxpdCgnICcpLmpvaW4oJ3wnKSArICcpOz9cXFxccykrJyxyZWxldmFuY2U6IDEwLH0sXG4gICAgICAgICAge2JlZ2luOiAvXFwuXFwuLyx9LFxuICAgICAgICBdLFxuICAgICAgfSwvLyovXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2Zsb2F0IGNvbG9yIHBvaW50IG5vcm1hbCB2ZWN0b3IgbWF0cml4IHdoaWxlIGZvciBpZiBkbyByZXR1cm4gZWxzZSBicmVhayBleHRlcm4gY29udGludWUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdhYnMgYWNvcyBhbWJpZW50IGFyZWEgYXNpbiBhdGFuIGF0bW9zcGhlcmUgYXR0cmlidXRlIGNhbGN1bGF0ZW5vcm1hbCBjZWlsIGNlbGxub2lzZSAnICtcbiAgICAgICAgJ2NsYW1wIGNvbXAgY29uY2F0IGNvcyBkZWdyZWVzIGRlcHRoIERlcml2IGRpZmZ1c2UgZGlzdGFuY2UgRHUgRHYgZW52aXJvbm1lbnQgZXhwICcgK1xuICAgICAgICAnZmFjZWZvcndhcmQgZmlsdGVyc3RlcCBmbG9vciBmb3JtYXQgZnJlc25lbCBpbmNpZGVudCBsZW5ndGggbGlnaHRzb3VyY2UgbG9nIG1hdGNoICcgK1xuICAgICAgICAnbWF4IG1pbiBtb2Qgbm9pc2Ugbm9ybWFsaXplIG50cmFuc2Zvcm0gb3Bwb3NpdGUgb3B0aW9uIHBob25nIHBub2lzZSBwb3cgcHJpbnRmICcgK1xuICAgICAgICAncHRsaW5lZCByYWRpYW5zIHJhbmRvbSByZWZsZWN0IHJlZnJhY3QgcmVuZGVyaW5mbyByb3VuZCBzZXRjb21wIHNldHhjb21wIHNldHljb21wICcgK1xuICAgICAgICAnc2V0emNvbXAgc2hhZG93IHNpZ24gc2luIHNtb290aHN0ZXAgc3BlY3VsYXIgc3BlY3VsYXJicmRmIHNwbGluZSBzcXJ0IHN0ZXAgdGFuICcgK1xuICAgICAgICAndGV4dHVyZSB0ZXh0dXJlaW5mbyB0cmFjZSB0cmFuc2Zvcm0gdnRyYW5zZm9ybSB4Y29tcCB5Y29tcCB6Y29tcCdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICc8LycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLlFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX05VTUJFUl9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjJywgZW5kOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3N1cmZhY2UgZGlzcGxhY2VtZW50IGxpZ2h0IHZvbHVtZSBpbWFnZXInLCBlbmQ6ICdcXFxcKCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdpbGx1bWluYXRlIGlsbHVtaW5hbmNlIGdhdGhlcicsIGVuZDogJ1xcXFwoJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgICBrZXl3b3JkOiAnQklMTF9QRVJJT0QgQklMTF9TVEFSVCBCSUxMX1NUT1AgUlNfRUZGRUNUSVZFX1NUQVJUIFJTX0VGRkVDVElWRV9TVE9QIFJTX0pVUklTX0NPREUgUlNfT1BDT19DT0RFICcgK1xuICAgICAgICAgJ0lOVERBRERBVFRSSUJVVEV8NSBJTlREQUREVk1TR3w1IElOVERCTE9DS09QfDUgSU5UREJMT0NLT1BOQXw1IElOVERDTE9TRXw1IElOVERDT1VOVHw1ICcgK1xuICAgICAgICAgJ0lOVERDT1VOVFNUQVRVU0NPREV8NSBJTlREQ1JFQVRFTUFTS3w1IElOVERDUkVBVEVEQVlNQVNLfDUgSU5URENSRUFURUZBQ1RPUk1BU0t8NSAnICtcbiAgICAgICAgICdJTlREQ1JFQVRFSEFORExFfDUgSU5URENSRUFURU9WRVJSSURFREFZTUFTS3w1IElOVERDUkVBVEVPVkVSUklERU1BU0t8NSAnICtcbiAgICAgICAgICdJTlREQ1JFQVRFU1RBVFVTQ09ERU1BU0t8NSBJTlREQ1JFQVRFVE9VUEVSSU9EfDUgSU5URERFTEVURXw1IElOVERESVBURVNUfDUgSU5UREVYUE9SVHw1ICcgK1xuICAgICAgICAgJ0lOVERHRVRFUlJPUkNPREV8NSBJTlRER0VURVJST1JNRVNTQUdFfDUgSU5URElTRVFVQUx8NSBJTlRESk9JTnw1IElOVERMT0FEfDUgSU5URExPQURBQ1RVQUxDVVR8NSAnICtcbiAgICAgICAgICdJTlRETE9BRERBVEVTfDUgSU5URExPQURISVNUfDUgSU5URExPQURMSVNUfDUgSU5URExPQURMSVNUREFURVN8NSBJTlRETE9BRExJU1RFTkVSR1l8NSAnICtcbiAgICAgICAgICdJTlRETE9BRExJU1RISVNUfDUgSU5URExPQURSRUxBVEVEQ0hBTk5FTHw1IElOVERMT0FEU1B8NSBJTlRETE9BRFNUQUdJTkd8NSBJTlRETE9BRFVPTXw1ICcgK1xuICAgICAgICAgJ0lOVERMT0FEVU9NREFURVN8NSBJTlRETE9BRFVPTUhJU1R8NSBJTlRETE9BRFZFUlNJT058NSBJTlRET1BFTnw1IElOVERSRUFERklSU1R8NSBJTlREUkVBRE5FWFR8NSAnICtcbiAgICAgICAgICdJTlREUkVDQ09VTlR8NSBJTlREUkVMRUFTRXw1IElOVERSRVBMQUNFfDUgSU5URFJPTExBVkd8NSBJTlREUk9MTFBFQUt8NSBJTlREU0NBTEFST1B8NSBJTlREU0NBTEV8NSAnICtcbiAgICAgICAgICdJTlREU0VUQVRUUklCVVRFfDUgSU5URFNFVERTVFBBUlRJQ0lQQU5UfDUgSU5URFNFVFNUUklOR3w1IElOVERTRVRWQUxVRXw1IElOVERTRVRWQUxVRVNUQVRVU3w1ICcgK1xuICAgICAgICAgJ0lOVERTSElGVFNUQVJUVElNRXw1IElOVERTTU9PVEh8NSBJTlREU09SVHw1IElOVERTUElLRVRFU1R8NSBJTlREU1VCU0VUfDUgSU5URFRPVXw1ICcgK1xuICAgICAgICAgJ0lOVERUT1VSRUxFQVNFfDUgSU5URFRPVVZBTFVFfDUgSU5URFVQREFURVNUQVRTfDUgSU5URFZBTFVFfDUgU1RERVYgSU5URERFTEVURUVYfDUgJyArXG4gICAgICAgICAnSU5URExPQURFWEFDVFVBTHw1IElOVERMT0FERVhDVVR8NSBJTlRETE9BREVYREFURVN8NSBJTlRETE9BREVYfDUgSU5URExPQURFWFJFTEFURURDSEFOTkVMfDUgJyArXG4gICAgICAgICAnSU5URFNBVkVFWHw1IE1WTE9BRHw1IE1WTE9BREFDQ1R8NSBNVkxPQURBQ0NUREFURVN8NSBNVkxPQURBQ0NUSElTVHw1IE1WTE9BRERBVEVTfDUgTVZMT0FESElTVHw1ICcgK1xuICAgICAgICAgJ01WTE9BRExJU1R8NSBNVkxPQURMSVNUREFURVN8NSBNVkxPQURMSVNUSElTVHw1IElGIEZPUiBORVhUIERPTkUgU0VMRUNUIEVORCBDQUxMIEFCT1JUIENMRUFSIENIQU5ORUwgRkFDVE9SIExJU1QgTlVNQkVSICcgK1xuICAgICAgICAgJ09WRVJSSURFIFNFVCBXRUVLIERJU1RSSUJVVElPTk5PREUgRUxTRSBXSEVOIFRIRU4gT1RIRVJXSVNFIElFTlVNIENTViBJTkNMVURFIExFQVZFIFJJREVSIFNBVkUgREVMRVRFICcgK1xuICAgICAgICAgJ05PVkFMVUUgU0VDVElPTiBXQVJOIFNBVkVfVVBEQVRFIERFVEVSTUlOQU5UIExBQkVMIFJFUE9SVCBSRVZFTlVFIEVBQ0ggJyArXG4gICAgICAgICAnSU4gRlJPTSBUT1RBTCBDSEFSR0UgQkxPQ0sgQU5EIE9SIENTVl9GSUxFIFJBVEVfQ09ERSBBVVhJTElBUllfREVNQU5EICcgK1xuICAgICAgICAgJ1VJREFDQ09VTlQgUlMgQklMTF9QRVJJT0RfU0VMRUNUIEhPVVJTX1BFUl9NT05USCBJTlREX0VSUk9SX1NUT1AgU0VBU09OX1NDSEVEVUxFX05BTUUgJyArXG4gICAgICAgICAnQUNDT1VOVEZBQ1RPUiBBUlJBWVVQUEVSQk9VTkQgQ0FMTFNUT1JFRFBST0MgR0VUQURPQ09OTkVDVElPTiBHRVRDT05ORUNUIEdFVERBVEFTT1VSQ0UgJyArXG4gICAgICAgICAnR0VUUVVBTElGSUVSIEdFVFVTRVJJRCBIQVNWQUxVRSBMSVNUQ09VTlQgTElTVE9QIExJU1RVUERBVEUgTElTVFZBTFVFIFBST1JBVEVGQUNUT1IgUlNQUk9SQVRFICcgK1xuICAgICAgICAgJ1NFVEJJTlBBVEggU0VUREJNT05JVE9SIFdRX09QRU4gQklMTElOR0hPVVJTIERBVEUgREFURUZST01GTE9BVCBEQVRFVElNRUZST01TVFJJTkcgJyArXG4gICAgICAgICAnREFURVRJTUVUT1NUUklORyBEQVRFVE9GTE9BVCBEQVkgREFZRElGRiBEQVlOQU1FIERCREFURVRJTUUgSE9VUiBNSU5VVEUgTU9OVEggTU9OVEhESUZGICcgK1xuICAgICAgICAgJ01PTlRISE9VUlMgTU9OVEhOQU1FIFJPVU5EREFURSBTQU1FV0VFS0RBWUxBU1RZRUFSIFNFQ09ORCBXRUVLREFZIFdFRUtESUZGIFlFQVIgWUVBUkRBWSAnICtcbiAgICAgICAgICdZRUFSU1RSIENPTVBTVU0gSElTVENPVU5UIEhJU1RNQVggSElTVE1JTiBISVNUTUlOTlogSElTVFZBTFVFIE1BWE5SQU5HRSBNQVhSQU5HRSBNSU5SQU5HRSAnICtcbiAgICAgICAgICdDT01QSUtWQSBDT01QS1ZBIENPTVBLVkFSRlJPTUtRS1cgQ09NUExGIElEQVRUUiBGTEFHIExGMktXIExGMktXSCBNQVhLVyBQT1dFUkZBQ1RPUiAnICtcbiAgICAgICAgICdSRUFESU5HMlVTQUdFIEFWR1NFQVNPTiBNQVhTRUFTT04gTU9OVEhMWU1FUkdFIFNFQVNPTlZBTFVFIFNVTVNFQVNPTiBBQ0NUUkVBRERBVEVTICcgK1xuICAgICAgICAgJ0FDQ1RUQUJMRUxPQUQgQ09ORklHQUREIENPTkZJR0dFVCBDUkVBVEVPQkpFQ1QgQ1JFQVRFUkVQT1JUIEVNQUlMQ0xJRU5UIEVYUEJMS01ETVVTQUdFICcgK1xuICAgICAgICAgJ0VYUE1ETVVTQUdFIEVYUE9SVF9VU0FHRSBGQUNUT1JJTkVGRkVDVCBHRVRVU0VSU1BFQ0lGSUVEU1RPUCBJTkVGRkVDVCBJU0hPTElEQVkgUlVOUkFURSAnICtcbiAgICAgICAgICdTQVZFX1BST0ZJTEUgU0VUUkVQT1JUVElUTEUgVVNFUkVYSVQgV0FURk9SUlVOUkFURSBUTyBUQUJMRSBBQ09TIEFTSU4gQVRBTiBBVEFOMiBCSVRBTkQgQ0VJTCAnICtcbiAgICAgICAgICdDT1MgQ09TRUNBTlQgQ09TSCBDT1RBTkdFTlQgRElWUVVPVCBESVZSRU0gRVhQIEZBQlMgRkxPT1IgRk1PRCBGUkVQTSBGUkVYUE4gTE9HIExPRzEwIE1BWCBNQVhOICcgK1xuICAgICAgICAgJ01JTiBNSU5OWiBNT0RGIFBPVyBST1VORCBST1VORDJWQUxVRSBST1VORElOVCBTRUNBTlQgU0lOIFNJTkggU1FST09UIFRBTiBUQU5IIEZMT0FUMlNUUklORyAnICtcbiAgICAgICAgICdGTE9BVDJTVFJJTkdOQyBJTlNUUiBMRUZUIExFTiBMVFJJTSBNSUQgUklHSFQgUlRSSU0gU1RSSU5HIFNUUklOR05DIFRPTE9XRVIgVE9VUFBFUiBUUklNICcgK1xuICAgICAgICAgJ05VTURBWVMgUkVBRF9EQVRFIFNUQUdJTkcnLFxuICAgICAgIGJ1aWx0X2luOiAnSURFTlRJRklFUiBPUFRJT05TIFhNTF9FTEVNRU5UIFhNTF9PUCBYTUxfRUxFTUVOVF9PRiBET01ET0NDUkVBVEUgRE9NRE9DTE9BREZJTEUgRE9NRE9DTE9BRFhNTCAnICtcbiAgICAgICAgICdET01ET0NTQVZFRklMRSBET01ET0NHRVRST09UIERPTURPQ0FERFBJIERPTU5PREVHRVROQU1FIERPTU5PREVHRVRUWVBFIERPTU5PREVHRVRWQUxVRSBET01OT0RFR0VUQ0hJTERDVCAnICtcbiAgICAgICAgICdET01OT0RFR0VURklSU1RDSElMRCBET01OT0RFR0VUU0lCTElORyBET01OT0RFQ1JFQVRFQ0hJTERFTEVNRU5UIERPTU5PREVTRVRBVFRSSUJVVEUgJyArXG4gICAgICAgICAnRE9NTk9ERUdFVENISUxERUxFTUVOVENUIERPTU5PREVHRVRGSVJTVENISUxERUxFTUVOVCBET01OT0RFR0VUU0lCTElOR0VMRU1FTlQgRE9NTk9ERUdFVEFUVFJJQlVURUNUICcgK1xuICAgICAgICAgJ0RPTU5PREVHRVRBVFRSSUJVVEVJIERPTU5PREVHRVRBVFRSSUJVVEVCWU5BTUUgRE9NTk9ERUdFVEJZTkFNRSdcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnI1xcXFxzK1thLXpBLVpcXFxcIFxcXFwuXSonLCByZWxldmFuY2U6IDB9LCAvLyBsb29rcyBsaWtlICMtY29tbWVudFxuICAgICAgICAgIHtiZWdpbjogJyNbYS16QS1aXFxcXCBcXFxcLl0rJ31cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBOVU1fU1VGRklYID0gJyhbdWldKDh8MTZ8MzJ8NjR8MTI4fHNpemUpfGYoMzJ8NjQpKVxcPyc7XG4gIHZhciBLRVlXT1JEUyA9XG4gICAgJ2FsaWdub2YgYXMgYmUgYm94IGJyZWFrIGNvbnN0IGNvbnRpbnVlIGNyYXRlIGRvIGVsc2UgZW51bSBleHRlcm4gJyArXG4gICAgJ2ZhbHNlIGZuIGZvciBpZiBpbXBsIGluIGxldCBsb29wIG1hdGNoIG1vZCBtdXQgb2Zmc2V0b2Ygb25jZSBwcml2ICcgK1xuICAgICdwcm9jIHB1YiBwdXJlIHJlZiByZXR1cm4gc2VsZiBTZWxmIHNpemVvZiBzdGF0aWMgc3RydWN0IHN1cGVyIHRyYWl0IHRydWUgJyArXG4gICAgJ3R5cGUgdHlwZW9mIHVuc2FmZSB1bnNpemVkIHVzZSB2aXJ0dWFsIHdoaWxlIHdoZXJlIHlpZWxkIG1vdmUgZGVmYXVsdCc7XG4gIHZhciBCVUlMVElOUyA9XG4gICAgLy8gZnVuY3Rpb25zXG4gICAgJ2Ryb3AgJyArXG4gICAgLy8gdHlwZXNcbiAgICAnaTggaTE2IGkzMiBpNjQgaTEyOCBpc2l6ZSAnICtcbiAgICAndTggdTE2IHUzMiB1NjQgdTEyOCB1c2l6ZSAnICtcbiAgICAnZjMyIGY2NCAnICtcbiAgICAnc3RyIGNoYXIgYm9vbCAnICtcbiAgICAnQm94IE9wdGlvbiBSZXN1bHQgU3RyaW5nIFZlYyAnICtcbiAgICAvLyB0cmFpdHNcbiAgICAnQ29weSBTZW5kIFNpemVkIFN5bmMgRHJvcCBGbiBGbk11dCBGbk9uY2UgVG9Pd25lZCBDbG9uZSBEZWJ1ZyAnICtcbiAgICAnUGFydGlhbEVxIFBhcnRpYWxPcmQgRXEgT3JkIEFzUmVmIEFzTXV0IEludG8gRnJvbSBEZWZhdWx0IEl0ZXJhdG9yICcgK1xuICAgICdFeHRlbmQgSW50b0l0ZXJhdG9yIERvdWJsZUVuZGVkSXRlcmF0b3IgRXhhY3RTaXplSXRlcmF0b3IgJyArXG4gICAgJ1NsaWNlQ29uY2F0RXh0IFRvU3RyaW5nICcgK1xuICAgIC8vIG1hY3Jvc1xuICAgICdhc3NlcnQhIGFzc2VydF9lcSEgYml0ZmxhZ3MhIGJ5dGVzISBjZmchIGNvbCEgY29uY2F0ISBjb25jYXRfaWRlbnRzISAnICtcbiAgICAnZGVidWdfYXNzZXJ0ISBkZWJ1Z19hc3NlcnRfZXEhIGVudiEgcGFuaWMhIGZpbGUhIGZvcm1hdCEgZm9ybWF0X2FyZ3MhICcgK1xuICAgICdpbmNsdWRlX2JpbiEgaW5jbHVkZV9zdHIhIGxpbmUhIGxvY2FsX2RhdGFfa2V5ISBtb2R1bGVfcGF0aCEgJyArXG4gICAgJ29wdGlvbl9lbnYhIHByaW50ISBwcmludGxuISBzZWxlY3QhIHN0cmluZ2lmeSEgdHJ5ISB1bmltcGxlbWVudGVkISAnICtcbiAgICAndW5yZWFjaGFibGUhIHZlYyEgd3JpdGUhIHdyaXRlbG4hIG1hY3JvX3J1bGVzISBhc3NlcnRfbmUhIGRlYnVnX2Fzc2VydF9uZSEnO1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncnMnXSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgS0VZV09SRFMsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBTb21lIE5vbmUgT2sgRXJyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVElOU1xuICAgIH0sXG4gICAgbGV4ZW1lczogaGxqcy5JREVOVF9SRSArICchPycsXG4gICAgaWxsZWdhbDogJzwvJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DT01NRU5UKCcvXFxcXConLCAnXFxcXCovJywge2NvbnRhaW5zOiBbJ3NlbGYnXX0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtiZWdpbjogL2I/XCIvLCBpbGxlZ2FsOiBudWxsfSksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgIHsgYmVnaW46IC9yKCMqKVwiKC58XFxuKSo/XCJcXDEoPyEjKS8gfSxcbiAgICAgICAgICAgeyBiZWdpbjogL2I/J1xcXFw/KHhcXHd7Mn18dVxcd3s0fXxVXFx3ezh9fC4pJy8gfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogLydbYS16QS1aX11bYS16QS1aMC05X10qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIwYihbMDFfXSspJyArIE5VTV9TVUZGSVggfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIwbyhbMC03X10rKScgKyBOVU1fU1VGRklYIH0sXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiMHgoW0EtRmEtZjAtOV9dKyknICsgTlVNX1NVRkZJWCB9LFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYihcXFxcZFtcXFxcZF9dKihcXFxcLlswLTlfXSspPyhbZUVdWystXT9bMC05X10rKT8pJyArXG4gICAgICAgICAgICAgICAgICAgTlVNX1NVRkZJWFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmbicsIGVuZDogJyhcXFxcKHw8KScsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46ICcjXFxcXCE/XFxcXFsnLCBlbmQ6ICdcXFxcXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YS1zdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46IC9cIi8sIGVuZDogL1wiL1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAndHlwZScsIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwge2VuZHNQYXJlbnQ6IHRydWV9KVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXFMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICd0cmFpdCBlbnVtIHN0cnVjdCB1bmlvbicsIGVuZDogJ3snLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERSwge2VuZHNQYXJlbnQ6IHRydWV9KVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAnW1xcXFx3XFxcXGRdJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IGhsanMuSURFTlRfUkUgKyAnOjonLFxuICAgICAgICBrZXl3b3Jkczoge2J1aWx0X2luOiBCVUlMVElOU31cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnLT4nXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgQU5OT1RBVElPTiA9IHsgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnQFtBLVphLXpdKycgfTtcblxuICAvLyB1c2VkIGluIHN0cmluZ3MgZm9yIGVzY2FwaW5nL2ludGVycG9sYXRpb24vc3Vic3RpdHV0aW9uXG4gIHZhciBTVUJTVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKyd9LFxuICAgICAge2JlZ2luOiAnXFxcXCR7JywgZW5kOiAnfSd9XG4gICAgXVxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLFxuICAgICAgICBpbGxlZ2FsOiAnXFxcXG4nLFxuICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdbYS16XStcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFxuJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEUsIFNVQlNUXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdbYS16XStcIlwiXCInLCBlbmQ6ICdcIlwiXCInLFxuICAgICAgICBjb250YWluczogW1NVQlNUXSxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfVxuICAgIF1cblxuICB9O1xuXG4gIHZhciBTWU1CT0wgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1xcJ1xcXFx3W1xcXFx3XFxcXGRfXSooPyFcXCcpJ1xuICB9O1xuXG4gIHZhciBUWVBFID0ge1xuICAgIGNsYXNzTmFtZTogJ3R5cGUnLFxuICAgIGJlZ2luOiAnXFxcXGJbQS1aXVtBLVphLXowLTlfXSonLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBOQU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogL1teMC05XFxuXFx0IFwiJygpLC5ge31cXFtcXF06O11bXlxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjtdK3xbXjAtOVxcblxcdCBcIicoKSwuYHt9XFxbXFxdOjs9XS8sXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIENMQVNTID0ge1xuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBiZWdpbktleXdvcmRzOiAnY2xhc3Mgb2JqZWN0IHRyYWl0IHR5cGUnLFxuICAgIGVuZDogL1s6PXtcXFtcXG47XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnZXh0ZW5kcyB3aXRoJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXFsvLFxuICAgICAgICBlbmQ6IC9cXF0vLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtUWVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtUWVBFXVxuICAgICAgfSxcbiAgICAgIE5BTUVcbiAgICBdXG4gIH07XG5cbiAgdmFyIE1FVEhPRCA9IHtcbiAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgYmVnaW5LZXl3b3JkczogJ2RlZicsXG4gICAgZW5kOiAvWzo9e1xcWyhcXG47XS8sXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBjb250YWluczogW05BTUVdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3Jkczoge1xuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbnVsbCcsXG4gICAgICBrZXl3b3JkOiAndHlwZSB5aWVsZCBsYXp5IG92ZXJyaWRlIGRlZiB3aXRoIHZhbCB2YXIgc2VhbGVkIGFic3RyYWN0IHByaXZhdGUgdHJhaXQgb2JqZWN0IGlmIGZvclNvbWUgZm9yIHdoaWxlIHRocm93IGZpbmFsbHkgcHJvdGVjdGVkIGV4dGVuZHMgaW1wb3J0IGZpbmFsIHJldHVybiBlbHNlIGJyZWFrIG5ldyBjYXRjaCBzdXBlciBjbGFzcyBjYXNlIHBhY2thZ2UgZGVmYXVsdCB0cnkgdGhpcyBtYXRjaCBjb250aW51ZSB0aHJvd3MgaW1wbGljaXQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIFNUUklORyxcbiAgICAgIFNZTUJPTCxcbiAgICAgIFRZUEUsXG4gICAgICBNRVRIT0QsXG4gICAgICBDTEFTUyxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIEFOTk9UQVRJT05cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU0NIRU1FX0lERU5UX1JFID0gJ1teXFxcXChcXFxcKVxcXFxbXFxcXF1cXFxce1xcXFx9XCIsXFwnYDsjfFxcXFxcXFxcXFxcXHNdKyc7XG4gIHZhciBTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSA9ICcoXFxcXC18XFxcXCspP1xcXFxkKyhbLi9dXFxcXGQrKT8nO1xuICB2YXIgU0NIRU1FX0NPTVBMRVhfTlVNQkVSX1JFID0gU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUgKyAnWytcXFxcLV0nICsgU0NIRU1FX1NJTVBMRV9OVU1CRVJfUkUgKyAnaSc7XG4gIHZhciBCVUlMVElOUyA9IHtcbiAgICAnYnVpbHRpbi1uYW1lJzpcbiAgICAgICdjYXNlLWxhbWJkYSBjYWxsL2NjIGNsYXNzIGRlZmluZS1jbGFzcyBleGl0LWhhbmRsZXIgZmllbGQgaW1wb3J0ICcgK1xuICAgICAgJ2luaGVyaXQgaW5pdC1maWVsZCBpbnRlcmZhY2UgbGV0Ki12YWx1ZXMgbGV0LXZhbHVlcyBsZXQvZWMgbWl4aW4gJyArXG4gICAgICAnb3B0LWxhbWJkYSBvdmVycmlkZSBwcm90ZWN0IHByb3ZpZGUgcHVibGljIHJlbmFtZSByZXF1aXJlICcgK1xuICAgICAgJ3JlcXVpcmUtZm9yLXN5bnRheCBzeW50YXggc3ludGF4LWNhc2Ugc3ludGF4LWVycm9yIHVuaXQvc2lnIHVubGVzcyAnICtcbiAgICAgICd3aGVuIHdpdGgtc3ludGF4IGFuZCBiZWdpbiBjYWxsLXdpdGgtY3VycmVudC1jb250aW51YXRpb24gJyArXG4gICAgICAnY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlIGNhc2UgY29uZCBkZWZpbmUgJyArXG4gICAgICAnZGVmaW5lLXN5bnRheCBkZWxheSBkbyBkeW5hbWljLXdpbmQgZWxzZSBmb3ItZWFjaCBpZiBsYW1iZGEgbGV0IGxldCogJyArXG4gICAgICAnbGV0LXN5bnRheCBsZXRyZWMgbGV0cmVjLXN5bnRheCBtYXAgb3Igc3ludGF4LXJ1bGVzIFxcJyAqICsgLCAsQCAtIC4uLiAvICcgK1xuICAgICAgJzsgPCA8PSA9ID0+ID4gPj0gYCBhYnMgYWNvcyBhbmdsZSBhcHBlbmQgYXBwbHkgYXNpbiBhc3NvYyBhc3NxIGFzc3YgYXRhbiAnICtcbiAgICAgICdib29sZWFuPyBjYWFyIGNhZHIgY2FsbC13aXRoLWlucHV0LWZpbGUgY2FsbC13aXRoLW91dHB1dC1maWxlICcgK1xuICAgICAgJ2NhbGwtd2l0aC12YWx1ZXMgY2FyIGNkZGRhciBjZGRkZHIgY2RyIGNlaWxpbmcgY2hhci0+aW50ZWdlciAnICtcbiAgICAgICdjaGFyLWFscGhhYmV0aWM/IGNoYXItY2k8PT8gY2hhci1jaTw/IGNoYXItY2k9PyBjaGFyLWNpPj0/IGNoYXItY2k+PyAnICtcbiAgICAgICdjaGFyLWRvd25jYXNlIGNoYXItbG93ZXItY2FzZT8gY2hhci1udW1lcmljPyBjaGFyLXJlYWR5PyBjaGFyLXVwY2FzZSAnICtcbiAgICAgICdjaGFyLXVwcGVyLWNhc2U/IGNoYXItd2hpdGVzcGFjZT8gY2hhcjw9PyBjaGFyPD8gY2hhcj0/IGNoYXI+PT8gY2hhcj4/ICcgK1xuICAgICAgJ2NoYXI/IGNsb3NlLWlucHV0LXBvcnQgY2xvc2Utb3V0cHV0LXBvcnQgY29tcGxleD8gY29ucyBjb3MgJyArXG4gICAgICAnY3VycmVudC1pbnB1dC1wb3J0IGN1cnJlbnQtb3V0cHV0LXBvcnQgZGVub21pbmF0b3IgZGlzcGxheSBlb2Ytb2JqZWN0PyAnICtcbiAgICAgICdlcT8gZXF1YWw/IGVxdj8gZXZhbCBldmVuPyBleGFjdC0+aW5leGFjdCBleGFjdD8gZXhwIGV4cHQgZmxvb3IgJyArXG4gICAgICAnZm9yY2UgZ2NkIGltYWctcGFydCBpbmV4YWN0LT5leGFjdCBpbmV4YWN0PyBpbnB1dC1wb3J0PyBpbnRlZ2VyLT5jaGFyICcgK1xuICAgICAgJ2ludGVnZXI/IGludGVyYWN0aW9uLWVudmlyb25tZW50IGxjbSBsZW5ndGggbGlzdCBsaXN0LT5zdHJpbmcgJyArXG4gICAgICAnbGlzdC0+dmVjdG9yIGxpc3QtcmVmIGxpc3QtdGFpbCBsaXN0PyBsb2FkIGxvZyBtYWduaXR1ZGUgbWFrZS1wb2xhciAnICtcbiAgICAgICdtYWtlLXJlY3Rhbmd1bGFyIG1ha2Utc3RyaW5nIG1ha2UtdmVjdG9yIG1heCBtZW1iZXIgbWVtcSBtZW12IG1pbiAnICtcbiAgICAgICdtb2R1bG8gbmVnYXRpdmU/IG5ld2xpbmUgbm90IG51bGwtZW52aXJvbm1lbnQgbnVsbD8gbnVtYmVyLT5zdHJpbmcgJyArXG4gICAgICAnbnVtYmVyPyBudW1lcmF0b3Igb2RkPyBvcGVuLWlucHV0LWZpbGUgb3Blbi1vdXRwdXQtZmlsZSBvdXRwdXQtcG9ydD8gJyArXG4gICAgICAncGFpcj8gcGVlay1jaGFyIHBvcnQ/IHBvc2l0aXZlPyBwcm9jZWR1cmU/IHF1YXNpcXVvdGUgcXVvdGUgcXVvdGllbnQgJyArXG4gICAgICAncmF0aW9uYWw/IHJhdGlvbmFsaXplIHJlYWQgcmVhZC1jaGFyIHJlYWwtcGFydCByZWFsPyByZW1haW5kZXIgcmV2ZXJzZSAnICtcbiAgICAgICdyb3VuZCBzY2hlbWUtcmVwb3J0LWVudmlyb25tZW50IHNldCEgc2V0LWNhciEgc2V0LWNkciEgc2luIHNxcnQgc3RyaW5nICcgK1xuICAgICAgJ3N0cmluZy0+bGlzdCBzdHJpbmctPm51bWJlciBzdHJpbmctPnN5bWJvbCBzdHJpbmctYXBwZW5kIHN0cmluZy1jaTw9PyAnICtcbiAgICAgICdzdHJpbmctY2k8PyBzdHJpbmctY2k9PyBzdHJpbmctY2k+PT8gc3RyaW5nLWNpPj8gc3RyaW5nLWNvcHkgJyArXG4gICAgICAnc3RyaW5nLWZpbGwhIHN0cmluZy1sZW5ndGggc3RyaW5nLXJlZiBzdHJpbmctc2V0ISBzdHJpbmc8PT8gc3RyaW5nPD8gJyArXG4gICAgICAnc3RyaW5nPT8gc3RyaW5nPj0/IHN0cmluZz4/IHN0cmluZz8gc3Vic3RyaW5nIHN5bWJvbC0+c3RyaW5nIHN5bWJvbD8gJyArXG4gICAgICAndGFuIHRyYW5zY3JpcHQtb2ZmIHRyYW5zY3JpcHQtb24gdHJ1bmNhdGUgdmFsdWVzIHZlY3RvciAnICtcbiAgICAgICd2ZWN0b3ItPmxpc3QgdmVjdG9yLWZpbGwhIHZlY3Rvci1sZW5ndGggdmVjdG9yLXJlZiB2ZWN0b3Itc2V0ISAnICtcbiAgICAgICd3aXRoLWlucHV0LWZyb20tZmlsZSB3aXRoLW91dHB1dC10by1maWxlIHdyaXRlIHdyaXRlLWNoYXIgemVybz8nXG4gIH07XG5cbiAgdmFyIFNIRUJBTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgYmVnaW46ICdeIyEnLFxuICAgIGVuZDogJyQnXG4gIH07XG5cbiAgdmFyIExJVEVSQUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnbGl0ZXJhbCcsXG4gICAgYmVnaW46ICcoI3R8I2Z8I1xcXFxcXFxcJyArIFNDSEVNRV9JREVOVF9SRSArICd8I1xcXFxcXFxcLiknXG4gIH07XG5cbiAgdmFyIE5VTUJFUiA9IHtcbiAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7IGJlZ2luOiBTQ0hFTUVfU0lNUExFX05VTUJFUl9SRSwgcmVsZXZhbmNlOiAwIH0sXG4gICAgICB7IGJlZ2luOiBTQ0hFTUVfQ09NUExFWF9OVU1CRVJfUkUsIHJlbGV2YW5jZTogMCB9LFxuICAgICAgeyBiZWdpbjogJyNiWzAtMV0rKC9bMC0xXSspPycgfSxcbiAgICAgIHsgYmVnaW46ICcjb1swLTddKygvWzAtN10rKT8nIH0sXG4gICAgICB7IGJlZ2luOiAnI3hbMC05YS1mXSsoL1swLTlhLWZdKyk/JyB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBTVFJJTkcgPSBobGpzLlFVT1RFX1NUUklOR19NT0RFO1xuXG4gIHZhciBSRUdVTEFSX0VYUFJFU1NJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAncmVnZXhwJyxcbiAgICBiZWdpbjogJyNbcHJdeFwiJyxcbiAgICBlbmQ6ICdbXlxcXFxcXFxcXVwiJ1xuICB9O1xuXG4gIHZhciBDT01NRU5UX01PREVTID0gW1xuICAgIGhsanMuQ09NTUVOVChcbiAgICAgICc7JyxcbiAgICAgICckJyxcbiAgICAgIHtcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgKSxcbiAgICBobGpzLkNPTU1FTlQoJyNcXFxcfCcsICdcXFxcfCMnKVxuICBdO1xuXG4gIHZhciBJREVOVCA9IHtcbiAgICBiZWdpbjogU0NIRU1FX0lERU5UX1JFLFxuICAgIHJlbGV2YW5jZTogMFxuICB9O1xuXG4gIHZhciBRVU9URURfSURFTlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJ1xcJycgKyBTQ0hFTUVfSURFTlRfUkVcbiAgfTtcblxuICB2YXIgQk9EWSA9IHtcbiAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICByZWxldmFuY2U6IDBcbiAgfTtcblxuICB2YXIgUVVPVEVEX0xJU1QgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IC8nLyB9LFxuICAgICAgeyBiZWdpbjogJ2AnIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKScsXG4gICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnLCBMSVRFUkFMLCBTVFJJTkcsIE5VTUJFUiwgSURFTlQsIFFVT1RFRF9JREVOVF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIE5BTUUgPSB7XG4gICAgY2xhc3NOYW1lOiAnbmFtZScsXG4gICAgYmVnaW46IFNDSEVNRV9JREVOVF9SRSxcbiAgICBsZXhlbWVzOiBTQ0hFTUVfSURFTlRfUkUsXG4gICAga2V5d29yZHM6IEJVSUxUSU5TXG4gIH07XG5cbiAgdmFyIExBTUJEQSA9IHtcbiAgICBiZWdpbjogL2xhbWJkYS8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgTkFNRSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLCBlbmRzUGFyZW50OiB0cnVlLFxuICAgICAgICBjb250YWluczogW0lERU5UXSxcbiAgICAgIH1cbiAgICBdXG4gIH07XG5cbiAgdmFyIExJU1QgPSB7XG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJyB9LFxuICAgICAgeyBiZWdpbjogJ1xcXFxbJywgZW5kOiAnXFxcXF0nIH1cbiAgICBdLFxuICAgIGNvbnRhaW5zOiBbTEFNQkRBLCBOQU1FLCBCT0RZXVxuICB9O1xuXG4gIEJPRFkuY29udGFpbnMgPSBbTElURVJBTCwgTlVNQkVSLCBTVFJJTkcsIElERU5ULCBRVU9URURfSURFTlQsIFFVT1RFRF9MSVNULCBMSVNUXS5jb25jYXQoQ09NTUVOVF9NT0RFUyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbGxlZ2FsOiAvXFxTLyxcbiAgICBjb250YWluczogW1NIRUJBTkcsIE5VTUJFUiwgU1RSSU5HLCBRVU9URURfSURFTlQsIFFVT1RFRF9MSVNULCBMSVNUXS5jb25jYXQoQ09NTUVOVF9NT0RFUylcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIENPTU1PTl9DT05UQUlOUyA9IFtcbiAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAge1xuICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgIGJlZ2luOiAnXFwnfFxcXCInLCBlbmQ6ICdcXCd8XFxcIicsXG4gICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwge2JlZ2luOiAnXFwnXFwnJ31dXG4gICAgfVxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzY2knXSxcbiAgICBsZXhlbWVzOiAvJT9cXHcrLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogJ2Fib3J0IGJyZWFrIGNhc2UgY2xlYXIgY2F0Y2ggY29udGludWUgZG8gZWxzZWlmIGVsc2UgZW5kZnVuY3Rpb24gZW5kIGZvciBmdW5jdGlvbiAnK1xuICAgICAgICAnZ2xvYmFsIGlmIHBhdXNlIHJldHVybiByZXN1bWUgc2VsZWN0IHRyeSB0aGVuIHdoaWxlJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICclZiAlRiAldCAlVCAlcGkgJWVwcyAlaW5mICVuYW4gJWUgJWkgJXogJXMnLFxuICAgICAgYnVpbHRfaW46IC8vIFNjaWxhYiBoYXMgbW9yZSB0aGFuIDIwMDAgZnVuY3Rpb25zLiBKdXN0IGxpc3QgdGhlIG1vc3QgY29tbW9uc1xuICAgICAgICdhYnMgYW5kIGFjb3MgYXNpbiBhdGFuIGNlaWwgY2QgY2hkaXIgY2xlYXJnbG9iYWwgY29zaCBjb3MgY3VtcHJvZCBkZWZmIGRpc3AgZXJyb3IgJytcbiAgICAgICAnZXhlYyBleGVjc3RyIGV4aXN0cyBleHAgZXllIGdldHRleHQgZmxvb3IgZnByaW50ZiBmcmVhZCBmc29sdmUgaW1hZyBpc2RlZiBpc2VtcHR5ICcrXG4gICAgICAgJ2lzaW5maXNuYW4gaXN2ZWN0b3IgbGFzdGVycm9yIGxlbmd0aCBsb2FkIGxpbnNwYWNlIGxpc3QgbGlzdGZpbGVzIGxvZzEwIGxvZzIgbG9nICcrXG4gICAgICAgJ21heCBtaW4gbXNwcmludGYgbWNsb3NlIG1vcGVuIG9uZXMgb3IgcGF0aGNvbnZlcnQgcG9seSBwcmludGYgcHJvZCBwd2QgcmFuZCByZWFsICcrXG4gICAgICAgJ3JvdW5kIHNpbmggc2luIHNpemUgZ3NvcnQgc3ByaW50ZiBzcXJ0IHN0cmNhdCBzdHJjbXBzIHRyaW5nIHN1bSBzeXN0ZW0gdGFuaCB0YW4gJytcbiAgICAgICAndHlwZSB0eXBlbmFtZSB3YXJuaW5nIHplcm9zIG1hdHJpeCdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcoXCJ8I3wvXFxcXCp8XFxcXHMrL1xcXFx3KyknLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ2Z1bmN0aW9uJywgZW5kOiAnJCcsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnW2EtekEtWl9dW2EtekEtWl8wLTldKihcXCcrW1xcXFwuXFwnXSp8W1xcXFwuXFwnXSspJywgZW5kOiAnJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxbJywgZW5kOiAnXFxcXF1cXCcqW1xcXFwuXFwnXSonLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIGNvbnRhaW5zOiBDT01NT05fQ09OVEFJTlNcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJyQnKVxuICAgIF0uY29uY2F0KENPTU1PTl9DT05UQUlOUylcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBJREVOVF9SRSA9ICdbYS16QS1aLV1bYS16QS1aMC05Xy1dKic7XG4gIHZhciBWQVJJQUJMRSA9IHtcbiAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgYmVnaW46ICcoXFxcXCQnICsgSURFTlRfUkUgKyAnKVxcXFxiJ1xuICB9O1xuICB2YXIgSEVYQ09MT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJywgYmVnaW46ICcjWzAtOUEtRmEtZl0rJ1xuICB9O1xuICB2YXIgREVGX0lOVEVSTkFMUyA9IHtcbiAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgIGJlZ2luOiAnW0EtWlxcXFxfXFxcXC5cXFxcLV0rJywgZW5kOiAnOicsXG4gICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnW15cXFxcc10nLFxuICAgIHN0YXJ0czoge1xuICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICBjb250YWluczogW1xuICAgICAgICBIRVhDT0xPUixcbiAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLCBiZWdpbjogJyFpbXBvcnRhbnQnXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBpbGxlZ2FsOiAnWz0vfFxcJ10nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsIGJlZ2luOiAnXFxcXCNbQS1aYS16MC05Xy1dKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc2VsZWN0b3ItY2xhc3MnLCBiZWdpbjogJ1xcXFwuW0EtWmEtejAtOV8tXSsnLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLWF0dHInLCBiZWdpbjogJ1xcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgICAgICBpbGxlZ2FsOiAnJCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3NlbGVjdG9yLXRhZycsIC8vIGJlZ2luOiBJREVOVF9SRSwgZW5kOiAnWyx8XFxcXHNdJ1xuICAgICAgICBiZWdpbjogJ1xcXFxiKGF8YWJicnxhY3JvbnltfGFkZHJlc3N8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiaWd8YmxvY2txdW90ZXxib2R5fGJyfGJ1dHRvbnxjYW52YXN8Y2FwdGlvbnxjaXRlfGNvZGV8Y29sfGNvbGdyb3VwfGNvbW1hbmR8ZGF0YWxpc3R8ZGR8ZGVsfGRldGFpbHN8ZGZufGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHwoaFsxLTZdKXxoZWFkfGhlYWRlcnxoZ3JvdXB8aHJ8aHRtbHxpfGlmcmFtZXxpbWd8aW5wdXR8aW5zfGtiZHxrZXlnZW58bGFiZWx8bGVnZW5kfGxpfGxpbmt8bWFwfG1hcmt8bWV0YXxtZXRlcnxuYXZ8bm9mcmFtZXN8bm9zY3JpcHR8b2JqZWN0fG9sfG9wdGdyb3VwfG9wdGlvbnxvdXRwdXR8cHxwYXJhbXxwcmV8cHJvZ3Jlc3N8cXxycHxydHxydWJ5fHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fHNtYWxsfHNwYW58c3RyaWtlfHN0cm9uZ3xzdHlsZXxzdWJ8c3VwfHRhYmxlfHRib2R5fHRkfHRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dWx8dmFyfHZpZGVvKVxcXFxiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJzoodmlzaXRlZHx2YWxpZHxyb290fHJpZ2h0fHJlcXVpcmVkfHJlYWQtd3JpdGV8cmVhZC1vbmx5fG91dC1yYW5nZXxvcHRpb25hbHxvbmx5LW9mLXR5cGV8b25seS1jaGlsZHxudGgtb2YtdHlwZXxudGgtbGFzdC1vZi10eXBlfG50aC1sYXN0LWNoaWxkfG50aC1jaGlsZHxub3R8bGlua3xsZWZ0fGxhc3Qtb2YtdHlwZXxsYXN0LWNoaWxkfGxhbmd8aW52YWxpZHxpbmRldGVybWluYXRlfGluLXJhbmdlfGhvdmVyfGZvY3VzfGZpcnN0LW9mLXR5cGV8Zmlyc3QtbGluZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtY2hpbGR8Zmlyc3R8ZW5hYmxlZHxlbXB0eXxkaXNhYmxlZHxkZWZhdWx0fGNoZWNrZWR8YmVmb3JlfGFmdGVyfGFjdGl2ZSknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJzo6KGFmdGVyfGJlZm9yZXxjaG9pY2VzfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfHJlcGVhdC1pbmRleHxyZXBlYXQtaXRlbXxzZWxlY3Rpb258dmFsdWUpJ1xuICAgICAgfSxcbiAgICAgIFZBUklBQkxFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdhdHRyaWJ1dGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKHotaW5kZXh8d29yZC13cmFwfHdvcmQtc3BhY2luZ3x3b3JkLWJyZWFrfHdpZHRofHdpZG93c3x3aGl0ZS1zcGFjZXx2aXNpYmlsaXR5fHZlcnRpY2FsLWFsaWdufHVuaWNvZGUtYmlkaXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9ufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybXx0b3B8dGV4dC11bmRlcmxpbmUtcG9zaXRpb258dGV4dC10cmFuc2Zvcm18dGV4dC1zaGFkb3d8dGV4dC1yZW5kZXJpbmd8dGV4dC1vdmVyZmxvd3x0ZXh0LWluZGVudHx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dGV4dC1kZWNvcmF0aW9uLWxpbmV8dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbnx0ZXh0LWFsaWduLWxhc3R8dGV4dC1hbGlnbnx0YWItc2l6ZXx0YWJsZS1sYXlvdXR8cmlnaHR8cmVzaXplfHF1b3Rlc3xwb3NpdGlvbnxwb2ludGVyLWV2ZW50c3xwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3RpdmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1hZnRlcnxwYWRkaW5nLXRvcHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctbGVmdHxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nfG92ZXJmbG93LXl8b3ZlcmZsb3cteHxvdmVyZmxvdy13cmFwfG92ZXJmbG93fG91dGxpbmUtd2lkdGh8b3V0bGluZS1zdHlsZXxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLWNvbG9yfG91dGxpbmV8b3JwaGFuc3xvcmRlcnxvcGFjaXR5fG9iamVjdC1wb3NpdGlvbnxvYmplY3QtZml0fG5vcm1hbHxub25lfG5hdi11cHxuYXYtcmlnaHR8bmF2LWxlZnR8bmF2LWluZGV4fG5hdi1kb3dufG1pbi13aWR0aHxtaW4taGVpZ2h0fG1heC13aWR0aHxtYXgtaGVpZ2h0fG1hc2t8bWFya3N8bWFyZ2luLXRvcHxtYXJnaW4tcmlnaHR8bWFyZ2luLWxlZnR8bWFyZ2luLWJvdHRvbXxtYXJnaW58bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlfGxpbmUtaGVpZ2h0fGxldHRlci1zcGFjaW5nfGxlZnR8anVzdGlmeS1jb250ZW50fGluaXRpYWx8aW5oZXJpdHxpbWUtbW9kZXxpbWFnZS1vcmllbnRhdGlvbnxpbWFnZS1yZXNvbHV0aW9ufGltYWdlLXJlbmRlcmluZ3xpY29ufGh5cGhlbnN8aGVpZ2h0fGZvbnQtd2VpZ2h0fGZvbnQtdmFyaWFudC1saWdhdHVyZXN8Zm9udC12YXJpYW50fGZvbnQtc3R5bGV8Zm9udC1zdHJldGNofGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGV8Zm9udC1rZXJuaW5nfGZvbnQtZmVhdHVyZS1zZXR0aW5nc3xmb250LWZhbWlseXxmb250fGZsb2F0fGZsZXgtd3JhcHxmbGV4LXNocmlua3xmbGV4LWdyb3d8ZmxleC1mbG93fGZsZXgtZGlyZWN0aW9ufGZsZXgtYmFzaXN8ZmxleHxmaWx0ZXJ8ZW1wdHktY2VsbHN8ZGlzcGxheXxkaXJlY3Rpb258Y3Vyc29yfGNvdW50ZXItcmVzZXR8Y291bnRlci1pbmNyZW1lbnR8Y29udGVudHxjb2x1bW4td2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGV8Y29sdW1uLWdhcHxjb2x1bW4tZmlsbHxjb2x1bW4tY291bnR8Y29sdW1uc3xjb2xvcnxjbGlwLXBhdGh8Y2xpcHxjbGVhcnxjYXB0aW9uLXNpZGV8YnJlYWstaW5zaWRlfGJyZWFrLWJlZm9yZXxicmVhay1hZnRlcnxib3gtc2l6aW5nfGJveC1zaGFkb3d8Ym94LWRlY29yYXRpb24tYnJlYWt8Ym90dG9tfGJvcmRlci13aWR0aHxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3B8Ym9yZGVyLXN0eWxlfGJvcmRlci1zcGFjaW5nfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodHxib3JkZXItcmFkaXVzfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0fGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlfGJvcmRlci1jb2xvcnxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tfGJvcmRlcnxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZHxiYWNrZmFjZS12aXNpYmlsaXR5fGF1dG98YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tbmFtZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1maWxsLW1vZGV8YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbnxhbGlnbi1zZWxmfGFsaWduLWl0ZW1zfGFsaWduLWNvbnRlbnQpXFxcXGInLFxuICAgICAgICBpbGxlZ2FsOiAnW15cXFxcc10nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKHdoaXRlc3BhY2V8d2FpdHx3LXJlc2l6ZXx2aXNpYmxlfHZlcnRpY2FsLXRleHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dXBwZXJjYXNlfHVwcGVyLXJvbWFufHVwcGVyLWFscGhhfHVuZGVybGluZXx0cmFuc3BhcmVudHx0b3B8dGhpbnx0aGlja3x0ZXh0fHRleHQtdG9wfHRleHQtYm90dG9tfHRiLXJsfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1mb290ZXItZ3JvdXB8c3ctcmVzaXplfHN1cGVyfHN0cmljdHxzdGF0aWN8c3F1YXJlfHNvbGlkfHNtYWxsLWNhcHN8c2VwYXJhdGV8c2UtcmVzaXplfHNjcm9sbHxzLXJlc2l6ZXxydGx8cm93LXJlc2l6ZXxyaWRnZXxyaWdodHxyZXBlYXR8cmVwZWF0LXl8cmVwZWF0LXh8cmVsYXRpdmV8cHJvZ3Jlc3N8cG9pbnRlcnxvdmVybGluZXxvdXRzaWRlfG91dHNldHxvYmxpcXVlfG5vd3JhcHxub3QtYWxsb3dlZHxub3JtYWx8bm9uZXxudy1yZXNpemV8bm8tcmVwZWF0fG5vLWRyb3B8bmV3c3BhcGVyfG5lLXJlc2l6ZXxuLXJlc2l6ZXxtb3ZlfG1pZGRsZXxtZWRpdW18bHRyfGxyLXRifGxvd2VyY2FzZXxsb3dlci1yb21hbnxsb3dlci1hbHBoYXxsb29zZXxsaXN0LWl0ZW18bGluZXxsaW5lLXRocm91Z2h8bGluZS1lZGdlfGxpZ2h0ZXJ8bGVmdHxrZWVwLWFsbHxqdXN0aWZ5fGl0YWxpY3xpbnRlci13b3JkfGludGVyLWlkZW9ncmFwaHxpbnNpZGV8aW5zZXR8aW5saW5lfGlubGluZS1ibG9ja3xpbmhlcml0fGluYWN0aXZlfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLWFscGhhfGhvcml6b250YWx8aGlkZGVufGhlbHB8aGFuZHxncm9vdmV8Zml4ZWR8ZWxsaXBzaXN8ZS1yZXNpemV8ZG91YmxlfGRvdHRlZHxkaXN0cmlidXRlfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzY3xkaXNhYmxlZHxkZWZhdWx0fGRlY2ltYWx8ZGFzaGVkfGNyb3NzaGFpcnxjb2xsYXBzZXxjb2wtcmVzaXplfGNpcmNsZXxjaGFyfGNlbnRlcnxjYXBpdGFsaXplfGJyZWFrLXdvcmR8YnJlYWstYWxsfGJvdHRvbXxib3RofGJvbGRlcnxib2xkfGJsb2NrfGJpZGktb3ZlcnJpZGV8YmVsb3d8YmFzZWxpbmV8YXV0b3xhbHdheXN8YWxsLXNjcm9sbHxhYnNvbHV0ZXx0YWJsZXx0YWJsZS1jZWxsKVxcXFxiJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc6JywgZW5kOiAnOycsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgSEVYQ09MT1IsXG4gICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIGJlZ2luOiAnIWltcG9ydGFudCdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnQCcsIGVuZDogJ1t7O10nLFxuICAgICAgICBrZXl3b3JkczogJ21peGluIGluY2x1ZGUgZXh0ZW5kIGZvciBpZiBlbHNlIGVhY2ggd2hpbGUgY2hhcnNldCBpbXBvcnQgZGVidWcgbWVkaWEgcGFnZSBjb250ZW50IGZvbnQtZmFjZSBuYW1lc3BhY2Ugd2FybicsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgVkFSSUFCTEUsXG4gICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICBobGpzLkFQT1NfU1RSSU5HX01PREUsXG4gICAgICAgICAgSEVYQ09MT1IsXG4gICAgICAgICAgaGxqcy5DU1NfTlVNQkVSX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcc1tBLVphLXowLTlfLi1dKycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY29uc29sZSddLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ15cXFxcc3swLDN9W1xcXFx3XFxcXGRcXFxcW1xcXFxdKClALV0qWz4lJCNdJyxcbiAgICAgICAgc3RhcnRzOiB7XG4gICAgICAgICAgZW5kOiAnJCcsIHN1Ykxhbmd1YWdlOiAnYmFzaCdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdXG4gIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBzbWFsaV9pbnN0cl9sb3dfcHJpbyA9IFsnYWRkJywgJ2FuZCcsICdjbXAnLCAnY21wZycsICdjbXBsJywgJ2NvbnN0JywgJ2RpdicsICdkb3VibGUnLCAnZmxvYXQnLCAnZ290bycsICdpZicsICdpbnQnLCAnbG9uZycsICdtb3ZlJywgJ211bCcsICduZWcnLCAnbmV3JywgJ25vcCcsICdub3QnLCAnb3InLCAncmVtJywgJ3JldHVybicsICdzaGwnLCAnc2hyJywgJ3NwdXQnLCAnc3ViJywgJ3Rocm93JywgJ3VzaHInLCAneG9yJ107XG4gIHZhciBzbWFsaV9pbnN0cl9oaWdoX3ByaW8gPSBbJ2FnZXQnLCAnYXB1dCcsICdhcnJheScsICdjaGVjaycsICdleGVjdXRlJywgJ2ZpbGwnLCAnZmlsbGVkJywgJ2dvdG8vMTYnLCAnZ290by8zMicsICdpZ2V0JywgJ2luc3RhbmNlJywgJ2ludm9rZScsICdpcHV0JywgJ21vbml0b3InLCAncGFja2VkJywgJ3NnZXQnLCAnc3BhcnNlJ107XG4gIHZhciBzbWFsaV9rZXl3b3JkcyA9IFsndHJhbnNpZW50JywgJ2NvbnN0cnVjdG9yJywgJ2Fic3RyYWN0JywgJ2ZpbmFsJywgJ3N5bnRoZXRpYycsICdwdWJsaWMnLCAncHJpdmF0ZScsICdwcm90ZWN0ZWQnLCAnc3RhdGljJywgJ2JyaWRnZScsICdzeXN0ZW0nXTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3NtYWxpJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnIycsXG4gICAgICAgICckJyxcbiAgICAgICAge1xuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdcXFxccypcXFxcLmVuZFxcXFxzW2EtekEtWjAtOV0qJ30sXG4gICAgICAgICAge2JlZ2luOiAnXlsgXSpcXFxcLlthLXpBLVpdKicsIHJlbGV2YW5jZTogMH0sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXHM6W2EtekEtWl8wLTldKicsIHJlbGV2YW5jZTogMH0sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXHMoJyArIHNtYWxpX2tleXdvcmRzLmpvaW4oJ3wnKSArICcpJ31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50cyA6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzKCcrc21hbGlfaW5zdHJfbG93X3ByaW8uam9pbignfCcpKycpXFxcXHMnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxzKCcrc21hbGlfaW5zdHJfbG93X3ByaW8uam9pbignfCcpKycpKChcXFxcLXwvKVthLXpBLVowLTldKykrXFxcXHMnLFxuICAgICAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxccygnK3NtYWxpX2luc3RyX2hpZ2hfcHJpby5qb2luKCd8JykrJykoKFxcXFwtfC8pW2EtekEtWjAtOV0rKSpcXFxccycsXG4gICAgICAgICAgICByZWxldmFuY2U6IDEwXG4gICAgICAgICAgfSxcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbjogJ0xbXlxcKDs6XFxuXSo7JyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbjogJ1t2cF1bMC05XSsnLFxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBWQVJfSURFTlRfUkUgPSAnW2Etel1bYS16QS1aMC05X10qJztcbiAgdmFyIENIQVIgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFwkLnsxfSdcbiAgfTtcbiAgdmFyIFNZTUJPTCA9IHtcbiAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgIGJlZ2luOiAnIycgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkVcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3N0J10sXG4gICAga2V5d29yZHM6ICdzZWxmIHN1cGVyIG5pbCB0cnVlIGZhbHNlIHRoaXNDb250ZXh0JywgLy8gb25seSA2XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnXCInLCAnXCInKSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJbQS1aXVtBLVphLXowLTlfXSonLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiBWQVJfSURFTlRfUkUgKyAnOicsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFNZTUJPTCxcbiAgICAgIENIQVIsXG4gICAgICB7XG4gICAgICAgIC8vIFRoaXMgbG9va3MgbW9yZSBjb21wbGljYXRlZCB0aGFuIG5lZWRlZCB0byBhdm9pZCBjb21iaW5hdG9yaWFsXG4gICAgICAgIC8vIGV4cGxvc2lvbiB1bmRlciBWOC4gSXQgZWZmZWN0aXZlbHkgbWVhbnMgYHwgdmFyMSB2YXIyIC4uLiB8YCB3aXRoXG4gICAgICAgIC8vIHdoaXRlc3BhY2UgYWRqYWNlbnQgdG8gYHxgIGJlaW5nIG9wdGlvbmFsLlxuICAgICAgICBiZWdpbjogJ1xcXFx8WyBdKicgKyBWQVJfSURFTlRfUkUgKyAnKFsgXSsnICsgVkFSX0lERU5UX1JFICsgJykqWyBdKlxcXFx8JyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogL1xcfC8sXG4gICAgICAgIGlsbGVnYWw6IC9cXFMvLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJyhcXFxcfFsgXSopPycgKyBWQVJfSURFTlRfUkV9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcI1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcbiAgICAgICAgICBDSEFSLFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBTWU1CT0xcbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydtbCddLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAvKiBhY2NvcmRpbmcgdG8gRGVmaW5pdGlvbiBvZiBTdGFuZGFyZCBNTCA5NyAgKi9cbiAgICAgICAgJ2Fic3R5cGUgYW5kIGFuZGFsc28gYXMgY2FzZSBkYXRhdHlwZSBkbyBlbHNlIGVuZCBlcXR5cGUgJyArXG4gICAgICAgICdleGNlcHRpb24gZm4gZnVuIGZ1bmN0b3IgaGFuZGxlIGlmIGluIGluY2x1ZGUgaW5maXggaW5maXhyICcgK1xuICAgICAgICAnbGV0IGxvY2FsIG5vbmZpeCBvZiBvcCBvcGVuIG9yZWxzZSByYWlzZSByZWMgc2hhcmluZyBzaWcgJyArXG4gICAgICAgICdzaWduYXR1cmUgc3RydWN0IHN0cnVjdHVyZSB0aGVuIHR5cGUgdmFsIHdpdGggd2l0aHR5cGUgd2hlcmUgd2hpbGUnLFxuICAgICAgYnVpbHRfaW46XG4gICAgICAgIC8qIGJ1aWx0LWluIHR5cGVzIGFjY29yZGluZyB0byBiYXNpcyBsaWJyYXJ5ICovXG4gICAgICAgICdhcnJheSBib29sIGNoYXIgZXhuIGludCBsaXN0IG9wdGlvbiBvcmRlciByZWFsIHJlZiBzdHJpbmcgc3Vic3RyaW5nIHZlY3RvciB1bml0IHdvcmQnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2UgTk9ORSBTT01FIExFU1MgRVFVQUwgR1JFQVRFUiBuaWwnXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAvXFwvXFwvfD4+LyxcbiAgICBsZXhlbWVzOiAnW2Etel9dXFxcXHcqIT8nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpdGVyYWwnLFxuICAgICAgICBiZWdpbjogL1xcWyhcXHxcXHwpP1xcXXxcXChcXCkvLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdcXFxcKFxcXFwqJyxcbiAgICAgICAgJ1xcXFwqXFxcXCknLFxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbnM6IFsnc2VsZiddXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7IC8qIHR5cGUgdmFyaWFibGUgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46ICdcXCdbQS1aYS16X10oPyFcXCcpW1xcXFx3XFwnXSonXG4gICAgICAgIC8qIHRoZSBncmFtbWFyIGlzIGFtYmlndW91cyBvbiBob3cgJ2EnYiBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYnV0IG5vdCB0aGUgY29tcGlsZXIgKi9cbiAgICAgIH0sXG4gICAgICB7IC8qIHBvbHltb3JwaGljIHZhcmlhbnQgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGJlZ2luOiAnYFtBLVpdW1xcXFx3XFwnXSonXG4gICAgICB9LFxuICAgICAgeyAvKiBtb2R1bGUgb3IgY29uc3RydWN0b3IgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAndHlwZScsXG4gICAgICAgIGJlZ2luOiAnXFxcXGJbQS1aXVtcXFxcd1xcJ10qJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgeyAvKiBkb24ndCBjb2xvciBpZGVudGlmaWVycywgYnV0IHNhZmVseSBjYXRjaCBhbGwgaWRlbnRpZmllcnMgd2l0aCAnKi9cbiAgICAgICAgYmVnaW46ICdbYS16X11cXFxcdypcXCdbXFxcXHdcXCddKidcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7Y2xhc3NOYW1lOiAnc3RyaW5nJywgcmVsZXZhbmNlOiAwfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46XG4gICAgICAgICAgJ1xcXFxiKDBbeFhdW2EtZkEtRjAtOV9dK1tMbG5dP3wnICtcbiAgICAgICAgICAnMFtvT11bMC03X10rW0xsbl0/fCcgK1xuICAgICAgICAgICcwW2JCXVswMV9dK1tMbG5dP3wnICtcbiAgICAgICAgICAnWzAtOV1bMC05X10qKFtMbG5dfChcXFxcLlswLTlfXSopPyhbZUVdWy0rXT9bMC05X10rKT8pPyknLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvWy09XT4vIC8vIHJlbGV2YW5jZSBib29zdGVyXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENQUCA9IGhsanMuZ2V0TGFuZ3VhZ2UoJ2NwcCcpLmV4cG9ydHM7XG5cbiAgLy8gSW4gU1FGLCBhIHZhcmlhYmxlIHN0YXJ0IHdpdGggX1xuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAvXFxiXytbYS16QS1aX11cXHcqL1xuICB9O1xuXG4gIC8vIEluIFNRRiwgYSBmdW5jdGlvbiBzaG91bGQgZml0IG15VGFnX2ZuY19teUZ1bmN0aW9uIHBhdHRlcm5cbiAgLy8gaHR0cHM6Ly9jb21tdW5pdHkuYmlzdHVkaW8uY29tL3dpa2kvRnVuY3Rpb25zX0xpYnJhcnlfKEFybWFfMykjQWRkaW5nX2FfRnVuY3Rpb25cbiAgdmFyIEZVTkNUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ3RpdGxlJyxcbiAgICBiZWdpbjogL1thLXpBLVpdW2EtekEtWjAtOV0rX2ZuY19cXHcqL1xuICB9O1xuXG4gIC8vIEluIFNRRiBzdHJpbmdzLCBxdW90ZXMgbWF0Y2hpbmcgdGhlIHN0YXJ0IGFyZSBlc2NhcGVkIGJ5IGFkZGluZyBhIGNvbnNlY3V0aXZlLlxuICAvLyBFeGFtcGxlIG9mIHNpbmdsZSBlc2NhcGVkIHF1b3RlczogXCIgXCJcIiBcIiBhbmQgICcgJycgJy5cbiAgdmFyIFNUUklOR1MgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICB2YXJpYW50czogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1wiJyxcbiAgICAgICAgZW5kOiAnXCInLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1wiXCInLCByZWxldmFuY2U6IDB9XVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXCcnLFxuICAgICAgICBlbmQ6ICdcXCcnLFxuICAgICAgICBjb250YWluczogW3tiZWdpbjogJ1xcJ1xcJycsIHJlbGV2YW5jZTogMH1dXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzcWYnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnY2FzZSBjYXRjaCBkZWZhdWx0IGRvIGVsc2UgZXhpdCBleGl0V2l0aCBmb3IgZm9yRWFjaCBmcm9tIGlmICcgK1xuICAgICAgICAnc3dpdGNoIHRoZW4gdGhyb3cgdG8gdHJ5IHdhaXRVbnRpbCB3aGlsZSB3aXRoJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYWJzIGFjY1RpbWUgYWNvcyBhY3Rpb24gYWN0aW9uSURzIGFjdGlvbktleXMgYWN0aW9uS2V5c0ltYWdlcyBhY3Rpb25LZXlzTmFtZXMgJyArXG4gICAgICAgICdhY3Rpb25LZXlzTmFtZXNBcnJheSBhY3Rpb25OYW1lIGFjdGlvblBhcmFtcyBhY3RpdmF0ZUFkZG9ucyBhY3RpdmF0ZWRBZGRvbnMgYWN0aXZhdGVLZXkgJyArXG4gICAgICAgICdhZGQzREVOQ29ubmVjdGlvbiBhZGQzREVORXZlbnRIYW5kbGVyIGFkZDNERU5MYXllciBhZGRBY3Rpb24gYWRkQmFja3BhY2sgYWRkQmFja3BhY2tDYXJnbyAnICtcbiAgICAgICAgJ2FkZEJhY2twYWNrQ2FyZ29HbG9iYWwgYWRkQmFja3BhY2tHbG9iYWwgYWRkQ2FtU2hha2UgYWRkQ3VyYXRvckFkZG9ucyBhZGRDdXJhdG9yQ2FtZXJhQXJlYSAnICtcbiAgICAgICAgJ2FkZEN1cmF0b3JFZGl0YWJsZU9iamVjdHMgYWRkQ3VyYXRvckVkaXRpbmdBcmVhIGFkZEN1cmF0b3JQb2ludHMgYWRkRWRpdG9yT2JqZWN0IGFkZEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ2FkZEdvZ2dsZXMgYWRkR3JvdXBJY29uIGFkZEhhbmRndW5JdGVtIGFkZEhlYWRnZWFyIGFkZEl0ZW0gYWRkSXRlbUNhcmdvIGFkZEl0ZW1DYXJnb0dsb2JhbCAnICtcbiAgICAgICAgJ2FkZEl0ZW1Qb29sIGFkZEl0ZW1Ub0JhY2twYWNrIGFkZEl0ZW1Ub1VuaWZvcm0gYWRkSXRlbVRvVmVzdCBhZGRMaXZlU3RhdHMgYWRkTWFnYXppbmUgJyArXG4gICAgICAgICdhZGRNYWdhemluZUFtbW9DYXJnbyBhZGRNYWdhemluZUNhcmdvIGFkZE1hZ2F6aW5lQ2FyZ29HbG9iYWwgYWRkTWFnYXppbmVHbG9iYWwgYWRkTWFnYXppbmVQb29sICcgK1xuICAgICAgICAnYWRkTWFnYXppbmVzIGFkZE1hZ2F6aW5lVHVycmV0IGFkZE1lbnUgYWRkTWVudUl0ZW0gYWRkTWlzc2lvbkV2ZW50SGFuZGxlciBhZGRNUEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ2FkZE11c2ljRXZlbnRIYW5kbGVyIGFkZE93bmVkTWluZSBhZGRQbGF5ZXJTY29yZXMgYWRkUHJpbWFyeVdlYXBvbkl0ZW0gJyArXG4gICAgICAgICdhZGRQdWJsaWNWYXJpYWJsZUV2ZW50SGFuZGxlciBhZGRSYXRpbmcgYWRkUmVzb3VyY2VzIGFkZFNjb3JlIGFkZFNjb3JlU2lkZSBhZGRTZWNvbmRhcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAnYWRkU3dpdGNoYWJsZVVuaXQgYWRkVGVhbU1lbWJlciBhZGRUb1JlbWFpbnNDb2xsZWN0b3IgYWRkVW5pZm9ybSBhZGRWZWhpY2xlIGFkZFZlc3QgYWRkV2F5cG9pbnQgJyArXG4gICAgICAgICdhZGRXZWFwb24gYWRkV2VhcG9uQ2FyZ28gYWRkV2VhcG9uQ2FyZ29HbG9iYWwgYWRkV2VhcG9uR2xvYmFsIGFkZFdlYXBvbkl0ZW0gYWRkV2VhcG9uUG9vbCAnICtcbiAgICAgICAgJ2FkZFdlYXBvblR1cnJldCBhZ2VudCBhZ2VudHMgQUdMVG9BU0wgYWltZWRBdFRhcmdldCBhaW1Qb3MgYWlyRGVuc2l0eVJURCBhaXJwb3J0U2lkZSAnICtcbiAgICAgICAgJ0FJU0ZpbmlzaEhlYWwgYWxpdmUgYWxsM0RFTkVudGl0aWVzIGFsbENvbnRyb2xzIGFsbEN1cmF0b3JzIGFsbEN1dExheWVycyBhbGxEZWFkIGFsbERlYWRNZW4gJyArXG4gICAgICAgICdhbGxEaXNwbGF5cyBhbGxHcm91cHMgYWxsTWFwTWFya2VycyBhbGxNaW5lcyBhbGxNaXNzaW9uT2JqZWN0cyBhbGxvdzNETW9kZSBhbGxvd0NyZXdJbkltbW9iaWxlICcgK1xuICAgICAgICAnYWxsb3dDdXJhdG9yTG9naWNJZ25vcmVBcmVhcyBhbGxvd0RhbWFnZSBhbGxvd0RhbW1hZ2UgYWxsb3dGaWxlT3BlcmF0aW9ucyBhbGxvd0ZsZWVpbmcgYWxsb3dHZXRJbiAnICtcbiAgICAgICAgJ2FsbG93U3ByaW50IGFsbFBsYXllcnMgYWxsU2l0ZXMgYWxsVHVycmV0cyBhbGxVbml0cyBhbGxVbml0c1VBViBhbGxWYXJpYWJsZXMgYW1tbyBhbmQgYW5pbWF0ZSAnICtcbiAgICAgICAgJ2FuaW1hdGVEb29yIGFuaW1hdGVTb3VyY2UgYW5pbWF0aW9uTmFtZXMgYW5pbWF0aW9uUGhhc2UgYW5pbWF0aW9uU291cmNlUGhhc2UgYW5pbWF0aW9uU3RhdGUgJyArXG4gICAgICAgICdhcHBlbmQgYXBwbHkgYXJtb3J5UG9pbnRzIGFycmF5SW50ZXJzZWN0IGFzaW4gQVNMVG9BR0wgQVNMVG9BVEwgYXNzZXJ0IGFzc2lnbkFzQ2FyZ28gJyArXG4gICAgICAgICdhc3NpZ25Bc0NhcmdvSW5kZXggYXNzaWduQXNDb21tYW5kZXIgYXNzaWduQXNEcml2ZXIgYXNzaWduQXNHdW5uZXIgYXNzaWduQXNUdXJyZXQgYXNzaWduQ3VyYXRvciAnICtcbiAgICAgICAgJ2Fzc2lnbmVkQ2FyZ28gYXNzaWduZWRDb21tYW5kZXIgYXNzaWduZWREcml2ZXIgYXNzaWduZWRHdW5uZXIgYXNzaWduZWRJdGVtcyBhc3NpZ25lZFRhcmdldCAnICtcbiAgICAgICAgJ2Fzc2lnbmVkVGVhbSBhc3NpZ25lZFZlaGljbGUgYXNzaWduZWRWZWhpY2xlUm9sZSBhc3NpZ25JdGVtIGFzc2lnblRlYW0gYXNzaWduVG9BaXJwb3J0IGF0YW4gYXRhbjIgJyArXG4gICAgICAgICdhdGcgQVRMVG9BU0wgYXR0YWNoZWRPYmplY3QgYXR0YWNoZWRPYmplY3RzIGF0dGFjaGVkVG8gYXR0YWNoT2JqZWN0IGF0dGFjaFRvIGF0dGFja0VuYWJsZWQgJyArXG4gICAgICAgICdiYWNrcGFjayBiYWNrcGFja0NhcmdvIGJhY2twYWNrQ29udGFpbmVyIGJhY2twYWNrSXRlbXMgYmFja3BhY2tNYWdhemluZXMgYmFja3BhY2tTcGFjZUZvciAnICtcbiAgICAgICAgJ2JlaGF2aW91ciBiZW5jaG1hcmsgYmlub2N1bGFyIGJsdWZvciBib3VuZGluZ0JveCBib3VuZGluZ0JveFJlYWwgYm91bmRpbmdDZW50ZXIgYnJlYWtPdXQgYnJlYWtUbyAnICtcbiAgICAgICAgJ2JyaWVmaW5nTmFtZSBidWlsZGluZ0V4aXQgYnVpbGRpbmdQb3MgYnV0dG9uQWN0aW9uIGJ1dHRvblNldEFjdGlvbiBjYWRldE1vZGUgY2FsbCBjYWxsRXh0ZW5zaW9uICcgK1xuICAgICAgICAnY2FtQ29tbWFuZCBjYW1Db21taXQgY2FtQ29tbWl0UHJlcGFyZWQgY2FtQ29tbWl0dGVkIGNhbUNvbnN0dWN0aW9uU2V0UGFyYW1zIGNhbUNyZWF0ZSBjYW1EZXN0cm95ICcgK1xuICAgICAgICAnY2FtZXJhRWZmZWN0IGNhbWVyYUVmZmVjdEVuYWJsZUhVRCBjYW1lcmFJbnRlcmVzdCBjYW1lcmFPbiBjYW1lcmFWaWV3IGNhbXBhaWduQ29uZmlnRmlsZSAnICtcbiAgICAgICAgJ2NhbVByZWxvYWQgY2FtUHJlbG9hZGVkIGNhbVByZXBhcmVCYW5rIGNhbVByZXBhcmVEaXIgY2FtUHJlcGFyZURpdmUgY2FtUHJlcGFyZUZvY3VzIGNhbVByZXBhcmVGb3YgJyArXG4gICAgICAgICdjYW1QcmVwYXJlRm92UmFuZ2UgY2FtUHJlcGFyZVBvcyBjYW1QcmVwYXJlUmVsUG9zIGNhbVByZXBhcmVUYXJnZXQgY2FtU2V0QmFuayBjYW1TZXREaXIgJyArXG4gICAgICAgICdjYW1TZXREaXZlIGNhbVNldEZvY3VzIGNhbVNldEZvdiBjYW1TZXRGb3ZSYW5nZSBjYW1TZXRQb3MgY2FtU2V0UmVsUG9zIGNhbVNldFRhcmdldCBjYW1UYXJnZXQgJyArXG4gICAgICAgICdjYW1Vc2VOVkcgY2FuQWRkIGNhbkFkZEl0ZW1Ub0JhY2twYWNrIGNhbkFkZEl0ZW1Ub1VuaWZvcm0gY2FuQWRkSXRlbVRvVmVzdCAnICtcbiAgICAgICAgJ2NhbmNlbFNpbXBsZVRhc2tEZXN0aW5hdGlvbiBjYW5GaXJlIGNhbk1vdmUgY2FuU2xpbmdMb2FkIGNhblN0YW5kIGNhblN1c3BlbmQgY2FuVW5sb2FkSW5Db21iYXQgJyArXG4gICAgICAgICdjYW5WZWhpY2xlQ2FyZ28gY2FwdGl2ZSBjYXB0aXZlTnVtIGNiQ2hlY2tlZCBjYlNldENoZWNrZWQgY2VpbCBjaGFubmVsRW5hYmxlZCBjaGVhdHNFbmFibGVkICcgK1xuICAgICAgICAnY2hlY2tBSUZlYXR1cmUgY2hlY2tWaXNpYmlsaXR5IGNpdmlsaWFuIGNsYXNzTmFtZSBjbGVhckFsbEl0ZW1zRnJvbUJhY2twYWNrIGNsZWFyQmFja3BhY2tDYXJnbyAnICtcbiAgICAgICAgJ2NsZWFyQmFja3BhY2tDYXJnb0dsb2JhbCBjbGVhckdyb3VwSWNvbnMgY2xlYXJJdGVtQ2FyZ28gY2xlYXJJdGVtQ2FyZ29HbG9iYWwgY2xlYXJJdGVtUG9vbCAnICtcbiAgICAgICAgJ2NsZWFyTWFnYXppbmVDYXJnbyBjbGVhck1hZ2F6aW5lQ2FyZ29HbG9iYWwgY2xlYXJNYWdhemluZVBvb2wgY2xlYXJPdmVybGF5IGNsZWFyUmFkaW8gJyArXG4gICAgICAgICdjbGVhcldlYXBvbkNhcmdvIGNsZWFyV2VhcG9uQ2FyZ29HbG9iYWwgY2xlYXJXZWFwb25Qb29sIGNsaWVudE93bmVyIGNsb3NlRGlhbG9nIGNsb3NlRGlzcGxheSAnICtcbiAgICAgICAgJ2Nsb3NlT3ZlcmxheSBjb2xsYXBzZU9iamVjdFRyZWUgY29sbGVjdDNERU5IaXN0b3J5IGNvbWJhdE1vZGUgY29tbWFuZEFydGlsbGVyeUZpcmUgY29tbWFuZENoYXQgJyArXG4gICAgICAgICdjb21tYW5kZXIgY29tbWFuZEZpcmUgY29tbWFuZEZvbGxvdyBjb21tYW5kRlNNIGNvbW1hbmRHZXRPdXQgY29tbWFuZGluZ01lbnUgY29tbWFuZE1vdmUgJyArXG4gICAgICAgICdjb21tYW5kUmFkaW8gY29tbWFuZFN0b3AgY29tbWFuZFN1cHByZXNzaXZlRmlyZSBjb21tYW5kVGFyZ2V0IGNvbW1hbmRXYXRjaCBjb21tZW50IGNvbW1pdE92ZXJsYXkgJyArXG4gICAgICAgICdjb21waWxlIGNvbXBpbGVGaW5hbCBjb21wbGV0ZWRGU00gY29tcG9zZVRleHQgY29uZmlnQ2xhc3NlcyBjb25maWdGaWxlIGNvbmZpZ0hpZXJhcmNoeSBjb25maWdOYW1lICcgK1xuICAgICAgICAnY29uZmlnTnVsbCBjb25maWdQcm9wZXJ0aWVzIGNvbmZpZ1NvdXJjZUFkZG9uTGlzdCBjb25maWdTb3VyY2VNb2QgY29uZmlnU291cmNlTW9kTGlzdCAnICtcbiAgICAgICAgJ2Nvbm5lY3RUZXJtaW5hbFRvVUFWIGNvbnRyb2xOdWxsIGNvbnRyb2xzR3JvdXBDdHJsIGNvcHlGcm9tQ2xpcGJvYXJkIGNvcHlUb0NsaXBib2FyZCAnICtcbiAgICAgICAgJ2NvcHlXYXlwb2ludHMgY29zIGNvdW50IGNvdW50RW5lbXkgY291bnRGcmllbmRseSBjb3VudFNpZGUgY291bnRUeXBlIGNvdW50VW5rbm93biAnICtcbiAgICAgICAgJ2NyZWF0ZTNERU5Db21wb3NpdGlvbiBjcmVhdGUzREVORW50aXR5IGNyZWF0ZUFnZW50IGNyZWF0ZUNlbnRlciBjcmVhdGVEaWFsb2cgY3JlYXRlRGlhcnlMaW5rICcgK1xuICAgICAgICAnY3JlYXRlRGlhcnlSZWNvcmQgY3JlYXRlRGlhcnlTdWJqZWN0IGNyZWF0ZURpc3BsYXkgY3JlYXRlR2VhckRpYWxvZyBjcmVhdGVHcm91cCAnICtcbiAgICAgICAgJ2NyZWF0ZUd1YXJkZWRQb2ludCBjcmVhdGVMb2NhdGlvbiBjcmVhdGVNYXJrZXIgY3JlYXRlTWFya2VyTG9jYWwgY3JlYXRlTWVudSBjcmVhdGVNaW5lICcgK1xuICAgICAgICAnY3JlYXRlTWlzc2lvbkRpc3BsYXkgY3JlYXRlTVBDYW1wYWlnbkRpc3BsYXkgY3JlYXRlU2ltcGxlT2JqZWN0IGNyZWF0ZVNpbXBsZVRhc2sgY3JlYXRlU2l0ZSAnICtcbiAgICAgICAgJ2NyZWF0ZVNvdW5kU291cmNlIGNyZWF0ZVRhc2sgY3JlYXRlVGVhbSBjcmVhdGVUcmlnZ2VyIGNyZWF0ZVVuaXQgY3JlYXRlVmVoaWNsZSBjcmVhdGVWZWhpY2xlQ3JldyAnICtcbiAgICAgICAgJ2NyZWF0ZVZlaGljbGVMb2NhbCBjcmV3IGN0cmxBY3RpdmF0ZSBjdHJsQWRkRXZlbnRIYW5kbGVyIGN0cmxBbmdsZSBjdHJsQXV0b1Njcm9sbERlbGF5ICcgK1xuICAgICAgICAnY3RybEF1dG9TY3JvbGxSZXdpbmQgY3RybEF1dG9TY3JvbGxTcGVlZCBjdHJsQ2hlY2tlZCBjdHJsQ2xhc3NOYW1lIGN0cmxDb21taXQgY3RybENvbW1pdHRlZCAnICtcbiAgICAgICAgJ2N0cmxDcmVhdGUgY3RybERlbGV0ZSBjdHJsRW5hYmxlIGN0cmxFbmFibGVkIGN0cmxGYWRlIGN0cmxIVE1MTG9hZGVkIGN0cmxJREMgY3RybElERCAnICtcbiAgICAgICAgJ2N0cmxNYXBBbmltQWRkIGN0cmxNYXBBbmltQ2xlYXIgY3RybE1hcEFuaW1Db21taXQgY3RybE1hcEFuaW1Eb25lIGN0cmxNYXBDdXJzb3IgY3RybE1hcE1vdXNlT3ZlciAnICtcbiAgICAgICAgJ2N0cmxNYXBTY2FsZSBjdHJsTWFwU2NyZWVuVG9Xb3JsZCBjdHJsTWFwV29ybGRUb1NjcmVlbiBjdHJsTW9kZWwgY3RybE1vZGVsRGlyQW5kVXAgY3RybE1vZGVsU2NhbGUgJyArXG4gICAgICAgICdjdHJsUGFyZW50IGN0cmxQYXJlbnRDb250cm9sc0dyb3VwIGN0cmxQb3NpdGlvbiBjdHJsUmVtb3ZlQWxsRXZlbnRIYW5kbGVycyBjdHJsUmVtb3ZlRXZlbnRIYW5kbGVyICcgK1xuICAgICAgICAnY3RybFNjYWxlIGN0cmxTZXRBY3RpdmVDb2xvciBjdHJsU2V0QW5nbGUgY3RybFNldEF1dG9TY3JvbGxEZWxheSBjdHJsU2V0QXV0b1Njcm9sbFJld2luZCAnICtcbiAgICAgICAgJ2N0cmxTZXRBdXRvU2Nyb2xsU3BlZWQgY3RybFNldEJhY2tncm91bmRDb2xvciBjdHJsU2V0Q2hlY2tlZCBjdHJsU2V0RXZlbnRIYW5kbGVyIGN0cmxTZXRGYWRlICcgK1xuICAgICAgICAnY3RybFNldEZvY3VzIGN0cmxTZXRGb250IGN0cmxTZXRGb250SDEgY3RybFNldEZvbnRIMUIgY3RybFNldEZvbnRIMiBjdHJsU2V0Rm9udEgyQiBjdHJsU2V0Rm9udEgzICcgK1xuICAgICAgICAnY3RybFNldEZvbnRIM0IgY3RybFNldEZvbnRINCBjdHJsU2V0Rm9udEg0QiBjdHJsU2V0Rm9udEg1IGN0cmxTZXRGb250SDVCIGN0cmxTZXRGb250SDYgJyArXG4gICAgICAgICdjdHJsU2V0Rm9udEg2QiBjdHJsU2V0Rm9udEhlaWdodCBjdHJsU2V0Rm9udEhlaWdodEgxIGN0cmxTZXRGb250SGVpZ2h0SDIgY3RybFNldEZvbnRIZWlnaHRIMyAnICtcbiAgICAgICAgJ2N0cmxTZXRGb250SGVpZ2h0SDQgY3RybFNldEZvbnRIZWlnaHRINSBjdHJsU2V0Rm9udEhlaWdodEg2IGN0cmxTZXRGb250SGVpZ2h0U2Vjb25kYXJ5ICcgK1xuICAgICAgICAnY3RybFNldEZvbnRQIGN0cmxTZXRGb250UEIgY3RybFNldEZvbnRTZWNvbmRhcnkgY3RybFNldEZvcmVncm91bmRDb2xvciBjdHJsU2V0TW9kZWwgJyArXG4gICAgICAgICdjdHJsU2V0TW9kZWxEaXJBbmRVcCBjdHJsU2V0TW9kZWxTY2FsZSBjdHJsU2V0UG9zaXRpb24gY3RybFNldFNjYWxlIGN0cmxTZXRTdHJ1Y3R1cmVkVGV4dCAnICtcbiAgICAgICAgJ2N0cmxTZXRUZXh0IGN0cmxTZXRUZXh0Q29sb3IgY3RybFNldFRvb2x0aXAgY3RybFNldFRvb2x0aXBDb2xvckJveCBjdHJsU2V0VG9vbHRpcENvbG9yU2hhZGUgJyArXG4gICAgICAgICdjdHJsU2V0VG9vbHRpcENvbG9yVGV4dCBjdHJsU2hvdyBjdHJsU2hvd24gY3RybFRleHQgY3RybFRleHRIZWlnaHQgY3RybFR5cGUgY3RybFZpc2libGUgJyArXG4gICAgICAgICdjdXJhdG9yQWRkb25zIGN1cmF0b3JDYW1lcmEgY3VyYXRvckNhbWVyYUFyZWEgY3VyYXRvckNhbWVyYUFyZWFDZWlsaW5nIGN1cmF0b3JDb2VmICcgK1xuICAgICAgICAnY3VyYXRvckVkaXRhYmxlT2JqZWN0cyBjdXJhdG9yRWRpdGluZ0FyZWEgY3VyYXRvckVkaXRpbmdBcmVhVHlwZSBjdXJhdG9yTW91c2VPdmVyIGN1cmF0b3JQb2ludHMgJyArXG4gICAgICAgICdjdXJhdG9yUmVnaXN0ZXJlZE9iamVjdHMgY3VyYXRvclNlbGVjdGVkIGN1cmF0b3JXYXlwb2ludENvc3QgY3VycmVudDNERU5PcGVyYXRpb24gY3VycmVudENoYW5uZWwgJyArXG4gICAgICAgICdjdXJyZW50Q29tbWFuZCBjdXJyZW50TWFnYXppbmUgY3VycmVudE1hZ2F6aW5lRGV0YWlsIGN1cnJlbnRNYWdhemluZURldGFpbFR1cnJldCAnICtcbiAgICAgICAgJ2N1cnJlbnRNYWdhemluZVR1cnJldCBjdXJyZW50TXV6emxlIGN1cnJlbnROYW1lc3BhY2UgY3VycmVudFRhc2sgY3VycmVudFRhc2tzIGN1cnJlbnRUaHJvd2FibGUgJyArXG4gICAgICAgICdjdXJyZW50VmlzaW9uTW9kZSBjdXJyZW50V2F5cG9pbnQgY3VycmVudFdlYXBvbiBjdXJyZW50V2VhcG9uTW9kZSBjdXJyZW50V2VhcG9uVHVycmV0ICcgK1xuICAgICAgICAnY3VycmVudFplcm9pbmcgY3Vyc29yT2JqZWN0IGN1cnNvclRhcmdldCBjdXN0b21DaGF0IGN1c3RvbVJhZGlvIGN1dEZhZGVPdXQgY3V0T2JqIGN1dFJzYyBjdXRUZXh0ICcgK1xuICAgICAgICAnZGFtYWdlIGRhdGUgZGF0ZVRvTnVtYmVyIGRheXRpbWUgZGVBY3RpdmF0ZUtleSBkZWJyaWVmaW5nVGV4dCBkZWJ1Z0ZTTSBkZWJ1Z0xvZyBkZWcgJyArXG4gICAgICAgICdkZWxldGUzREVORW50aXRpZXMgZGVsZXRlQXQgZGVsZXRlQ2VudGVyIGRlbGV0ZUNvbGxlY3Rpb24gZGVsZXRlRWRpdG9yT2JqZWN0IGRlbGV0ZUdyb3VwICcgK1xuICAgICAgICAnZGVsZXRlSWRlbnRpdHkgZGVsZXRlTG9jYXRpb24gZGVsZXRlTWFya2VyIGRlbGV0ZU1hcmtlckxvY2FsIGRlbGV0ZVJhbmdlIGRlbGV0ZVJlc291cmNlcyAnICtcbiAgICAgICAgJ2RlbGV0ZVNpdGUgZGVsZXRlU3RhdHVzIGRlbGV0ZVRlYW0gZGVsZXRlVmVoaWNsZSBkZWxldGVWZWhpY2xlQ3JldyBkZWxldGVXYXlwb2ludCBkZXRhY2ggJyArXG4gICAgICAgICdkZXRlY3RlZE1pbmVzIGRpYWdfYWN0aXZlTWlzc2lvbkZTTXMgZGlhZ19hY3RpdmVTY3JpcHRzIGRpYWdfYWN0aXZlU1FGU2NyaXB0cyAnICtcbiAgICAgICAgJ2RpYWdfYWN0aXZlU1FTU2NyaXB0cyBkaWFnX2NhcHR1cmVGcmFtZSBkaWFnX2NhcHR1cmVTbG93RnJhbWUgZGlhZ19jb2RlUGVyZm9ybWFuY2UgZGlhZ19kcmF3TW9kZSAnICtcbiAgICAgICAgJ2RpYWdfZW5hYmxlIGRpYWdfZW5hYmxlZCBkaWFnX2ZwcyBkaWFnX2Zwc01pbiBkaWFnX2ZyYW1lTm8gZGlhZ19saXN0IGRpYWdfbG9nIGRpYWdfbG9nU2xvd0ZyYW1lICcgK1xuICAgICAgICAnZGlhZ19tZXJnZUNvbmZpZ0ZpbGUgZGlhZ19yZWNvcmRUdXJyZXRMaW1pdHMgZGlhZ190aWNrVGltZSBkaWFnX3RvZ2dsZSBkaWFsb2cgZGlhcnlTdWJqZWN0RXhpc3RzICcgK1xuICAgICAgICAnZGlkSklQIGRpZEpJUE93bmVyIGRpZmZpY3VsdHkgZGlmZmljdWx0eUVuYWJsZWQgZGlmZmljdWx0eUVuYWJsZWRSVEQgZGlmZmljdWx0eU9wdGlvbiBkaXJlY3Rpb24gJyArXG4gICAgICAgICdkaXJlY3RTYXkgZGlzYWJsZUFJIGRpc2FibGVDb2xsaXNpb25XaXRoIGRpc2FibGVDb252ZXJzYXRpb24gZGlzYWJsZURlYnJpZWZpbmdTdGF0cyAnICtcbiAgICAgICAgJ2Rpc2FibGVOVkdFcXVpcG1lbnQgZGlzYWJsZVJlbW90ZVNlbnNvcnMgZGlzYWJsZVNlcmlhbGl6YXRpb24gZGlzYWJsZVRJRXF1aXBtZW50ICcgK1xuICAgICAgICAnZGlzYWJsZVVBVkNvbm5lY3RhYmlsaXR5IGRpc2FibGVVc2VySW5wdXQgZGlzcGxheUFkZEV2ZW50SGFuZGxlciBkaXNwbGF5Q3RybCBkaXNwbGF5TnVsbCAnICtcbiAgICAgICAgJ2Rpc3BsYXlQYXJlbnQgZGlzcGxheVJlbW92ZUFsbEV2ZW50SGFuZGxlcnMgZGlzcGxheVJlbW92ZUV2ZW50SGFuZGxlciBkaXNwbGF5U2V0RXZlbnRIYW5kbGVyICcgK1xuICAgICAgICAnZGlzc29sdmVUZWFtIGRpc3RhbmNlIGRpc3RhbmNlMkQgZGlzdGFuY2VTcXIgZGlzdHJpYnV0aW9uUmVnaW9uIGRvM0RFTkFjdGlvbiBkb0FydGlsbGVyeUZpcmUgJyArXG4gICAgICAgICdkb0ZpcmUgZG9Gb2xsb3cgZG9GU00gZG9HZXRPdXQgZG9Nb3ZlIGRvb3JQaGFzZSBkb1N0b3AgZG9TdXBwcmVzc2l2ZUZpcmUgZG9UYXJnZXQgZG9XYXRjaCAnICtcbiAgICAgICAgJ2RyYXdBcnJvdyBkcmF3RWxsaXBzZSBkcmF3SWNvbiBkcmF3SWNvbjNEIGRyYXdMaW5lIGRyYXdMaW5lM0QgZHJhd0xpbmsgZHJhd0xvY2F0aW9uIGRyYXdQb2x5Z29uICcgK1xuICAgICAgICAnZHJhd1JlY3RhbmdsZSBkcml2ZXIgZHJvcCBlYXN0IGVjaG8gZWRpdDNERU5NaXNzaW9uQXR0cmlidXRlcyBlZGl0T2JqZWN0IGVkaXRvclNldEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ2VmZmVjdGl2ZUNvbW1hbmRlciBlbXB0eVBvc2l0aW9ucyBlbmFibGVBSSBlbmFibGVBSUZlYXR1cmUgZW5hYmxlQWltUHJlY2lzaW9uIGVuYWJsZUF0dGFjayAnICtcbiAgICAgICAgJ2VuYWJsZUF1ZGlvRmVhdHVyZSBlbmFibGVDYW1TaGFrZSBlbmFibGVDYXVzdGljcyBlbmFibGVDaGFubmVsIGVuYWJsZUNvbGxpc2lvbldpdGggZW5hYmxlQ29waWxvdCAnICtcbiAgICAgICAgJ2VuYWJsZURlYnJpZWZpbmdTdGF0cyBlbmFibGVEaWFnTGVnZW5kIGVuYWJsZUVuZERpYWxvZyBlbmFibGVFbmdpbmVBcnRpbGxlcnkgZW5hYmxlRW52aXJvbm1lbnQgJyArXG4gICAgICAgICdlbmFibGVGYXRpZ3VlIGVuYWJsZUd1bkxpZ2h0cyBlbmFibGVJUkxhc2VycyBlbmFibGVNaW1pY3MgZW5hYmxlUGVyc29uVHVycmV0IGVuYWJsZVJhZGlvICcgK1xuICAgICAgICAnZW5hYmxlUmVsb2FkIGVuYWJsZVJvcGVBdHRhY2ggZW5hYmxlU2F0Tm9ybWFsT25EZXRhaWwgZW5hYmxlU2F2aW5nIGVuYWJsZVNlbnRlbmNlcyAnICtcbiAgICAgICAgJ2VuYWJsZVNpbXVsYXRpb24gZW5hYmxlU2ltdWxhdGlvbkdsb2JhbCBlbmFibGVTdGFtaW5hIGVuYWJsZVRlYW1Td2l0Y2ggZW5hYmxlVUFWQ29ubmVjdGFiaWxpdHkgJyArXG4gICAgICAgICdlbmFibGVVQVZXYXlwb2ludHMgZW5hYmxlVmVoaWNsZUNhcmdvIGVuZExvYWRpbmdTY3JlZW4gZW5kTWlzc2lvbiBlbmdpbmVPbiBlbmdpbmVzSXNPblJURCAnICtcbiAgICAgICAgJ2VuZ2luZXNScG1SVEQgZW5naW5lc1RvcnF1ZVJURCBlbnRpdGllcyBlc3RpbWF0ZWRFbmRTZXJ2ZXJUaW1lIGVzdGltYXRlZFRpbWVMZWZ0ICcgK1xuICAgICAgICAnZXZhbE9iamVjdEFyZ3VtZW50IGV2ZXJ5QmFja3BhY2sgZXZlcnlDb250YWluZXIgZXhlYyBleGVjRWRpdG9yU2NyaXB0IGV4ZWNGU00gZXhlY1ZNIGV4cCAnICtcbiAgICAgICAgJ2V4cGVjdGVkRGVzdGluYXRpb24gZXhwb3J0SklQTWVzc2FnZXMgZXllRGlyZWN0aW9uIGV5ZVBvcyBmYWNlIGZhY3Rpb24gZmFkZU11c2ljIGZhZGVSYWRpbyAnICtcbiAgICAgICAgJ2ZhZGVTb3VuZCBmYWRlU3BlZWNoIGZhaWxNaXNzaW9uIGZpbGxXZWFwb25zRnJvbVBvb2wgZmluZCBmaW5kQ292ZXIgZmluZERpc3BsYXkgZmluZEVkaXRvck9iamVjdCAnICtcbiAgICAgICAgJ2ZpbmRFbXB0eVBvc2l0aW9uIGZpbmRFbXB0eVBvc2l0aW9uUmVhZHkgZmluZE5lYXJlc3RFbmVteSBmaW5pc2hNaXNzaW9uSW5pdCBmaW5pdGUgZmlyZSAnICtcbiAgICAgICAgJ2ZpcmVBdFRhcmdldCBmaXJzdEJhY2twYWNrIGZsYWcgZmxhZ093bmVyIGZsYWdTaWRlIGZsYWdUZXh0dXJlIGZsZWVpbmcgZmxvb3IgZmx5SW5IZWlnaHQgJyArXG4gICAgICAgICdmbHlJbkhlaWdodEFTTCBmb2cgZm9nRm9yZWNhc3QgZm9nUGFyYW1zIGZvcmNlQWRkVW5pZm9ybSBmb3JjZWRNYXAgZm9yY2VFbmQgZm9yY2VNYXAgZm9yY2VSZXNwYXduICcgK1xuICAgICAgICAnZm9yY2VTcGVlZCBmb3JjZVdhbGsgZm9yY2VXZWFwb25GaXJlIGZvcmNlV2VhdGhlckNoYW5nZSBmb3JFYWNoTWVtYmVyIGZvckVhY2hNZW1iZXJBZ2VudCAnICtcbiAgICAgICAgJ2ZvckVhY2hNZW1iZXJUZWFtIGZvcm1hdCBmb3JtYXRpb24gZm9ybWF0aW9uRGlyZWN0aW9uIGZvcm1hdGlvbkxlYWRlciBmb3JtYXRpb25NZW1iZXJzICcgK1xuICAgICAgICAnZm9ybWF0aW9uUG9zaXRpb24gZm9ybWF0aW9uVGFzayBmb3JtYXRUZXh0IGZvcm1MZWFkZXIgZnJlZUxvb2sgZnJvbUVkaXRvciBmdWVsIGZ1bGxDcmV3ICcgK1xuICAgICAgICAnZ2VhcklEQ0FtbW9Db3VudCBnZWFyU2xvdEFtbW9Db3VudCBnZWFyU2xvdERhdGEgZ2V0M0RFTkFjdGlvblN0YXRlIGdldDNERU5BdHRyaWJ1dGUgZ2V0M0RFTkNhbWVyYSAnICtcbiAgICAgICAgJ2dldDNERU5Db25uZWN0aW9ucyBnZXQzREVORW50aXR5IGdldDNERU5FbnRpdHlJRCBnZXQzREVOR3JpZCBnZXQzREVOSWNvbnNWaXNpYmxlICcgK1xuICAgICAgICAnZ2V0M0RFTkxheWVyRW50aXRpZXMgZ2V0M0RFTkxpbmVzVmlzaWJsZSBnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZSBnZXQzREVOTW91c2VPdmVyIGdldDNERU5TZWxlY3RlZCAnICtcbiAgICAgICAgJ2dldEFpbWluZ0NvZWYgZ2V0QWxsSGl0UG9pbnRzRGFtYWdlIGdldEFsbE93bmVkTWluZXMgZ2V0QW1tb0NhcmdvIGdldEFuaW1BaW1QcmVjaXNpb24gJyArXG4gICAgICAgICdnZXRBbmltU3BlZWRDb2VmIGdldEFycmF5IGdldEFydGlsbGVyeUFtbW8gZ2V0QXJ0aWxsZXJ5Q29tcHV0ZXJTZXR0aW5ncyBnZXRBcnRpbGxlcnlFVEEgJyArXG4gICAgICAgICdnZXRBc3NpZ25lZEN1cmF0b3JMb2dpYyBnZXRBc3NpZ25lZEN1cmF0b3JVbml0IGdldEJhY2twYWNrQ2FyZ28gZ2V0QmxlZWRpbmdSZW1haW5pbmcgJyArXG4gICAgICAgICdnZXRCdXJuaW5nVmFsdWUgZ2V0Q2FtZXJhVmlld0RpcmVjdGlvbiBnZXRDYXJnb0luZGV4IGdldENlbnRlck9mTWFzcyBnZXRDbGllbnRTdGF0ZSAnICtcbiAgICAgICAgJ2dldENsaWVudFN0YXRlTnVtYmVyIGdldENvbm5lY3RlZFVBViBnZXRDdXN0b21BaW1pbmdDb2VmIGdldERhbW1hZ2UgZ2V0RGVzY3JpcHRpb24gZ2V0RGlyICcgK1xuICAgICAgICAnZ2V0RGlyVmlzdWFsIGdldERMQ3MgZ2V0RWRpdG9yQ2FtZXJhIGdldEVkaXRvck1vZGUgZ2V0RWRpdG9yT2JqZWN0U2NvcGUgZ2V0RWxldmF0aW9uT2Zmc2V0ICcgK1xuICAgICAgICAnZ2V0RmF0aWd1ZSBnZXRGcmllbmQgZ2V0RlNNVmFyaWFibGUgZ2V0RnVlbENhcmdvIGdldEdyb3VwSWNvbiBnZXRHcm91cEljb25QYXJhbXMgZ2V0R3JvdXBJY29ucyAnICtcbiAgICAgICAgJ2dldEhpZGVGcm9tIGdldEhpdCBnZXRIaXRJbmRleCBnZXRIaXRQb2ludERhbWFnZSBnZXRJdGVtQ2FyZ28gZ2V0TWFnYXppbmVDYXJnbyBnZXRNYXJrZXJDb2xvciAnICtcbiAgICAgICAgJ2dldE1hcmtlclBvcyBnZXRNYXJrZXJTaXplIGdldE1hcmtlclR5cGUgZ2V0TWFzcyBnZXRNaXNzaW9uQ29uZmlnIGdldE1pc3Npb25Db25maWdWYWx1ZSAnICtcbiAgICAgICAgJ2dldE1pc3Npb25ETENzIGdldE1pc3Npb25MYXllckVudGl0aWVzIGdldE1vZGVsSW5mbyBnZXRNb3VzZVBvc2l0aW9uIGdldE51bWJlciBnZXRPYmplY3RBcmd1bWVudCAnICtcbiAgICAgICAgJ2dldE9iamVjdENoaWxkcmVuIGdldE9iamVjdERMQyBnZXRPYmplY3RNYXRlcmlhbHMgZ2V0T2JqZWN0UHJveHkgZ2V0T2JqZWN0VGV4dHVyZXMgZ2V0T2JqZWN0VHlwZSAnICtcbiAgICAgICAgJ2dldE9iamVjdFZpZXdEaXN0YW5jZSBnZXRPeHlnZW5SZW1haW5pbmcgZ2V0UGVyc29uVXNlZERMQ3MgZ2V0UGlsb3RDYW1lcmFEaXJlY3Rpb24gJyArXG4gICAgICAgICdnZXRQaWxvdENhbWVyYVBvc2l0aW9uIGdldFBpbG90Q2FtZXJhUm90YXRpb24gZ2V0UGlsb3RDYW1lcmFUYXJnZXQgZ2V0UGxheWVyQ2hhbm5lbCAnICtcbiAgICAgICAgJ2dldFBsYXllclNjb3JlcyBnZXRQbGF5ZXJVSUQgZ2V0UG9zIGdldFBvc0FTTCBnZXRQb3NBU0xWaXN1YWwgZ2V0UG9zQVNMVyBnZXRQb3NBVEwgJyArXG4gICAgICAgICdnZXRQb3NBVExWaXN1YWwgZ2V0UG9zVmlzdWFsIGdldFBvc1dvcmxkIGdldFJlbERpciBnZXRSZWxQb3MgZ2V0UmVtb3RlU2Vuc29yc0Rpc2FibGVkICcgK1xuICAgICAgICAnZ2V0UmVwYWlyQ2FyZ28gZ2V0UmVzb2x1dGlvbiBnZXRTaGFkb3dEaXN0YW5jZSBnZXRTaG90UGFyZW50cyBnZXRTbGluZ0xvYWQgZ2V0U3BlZWQgZ2V0U3RhbWluYSAnICtcbiAgICAgICAgJ2dldFN0YXRWYWx1ZSBnZXRTdXBwcmVzc2lvbiBnZXRUZXJyYWluSGVpZ2h0QVNMIGdldFRleHQgZ2V0VW5pdExvYWRvdXQgZ2V0VW5pdFRyYWl0IGdldFZhcmlhYmxlICcgK1xuICAgICAgICAnZ2V0VmVoaWNsZUNhcmdvIGdldFdlYXBvbkNhcmdvIGdldFdlYXBvblN3YXkgZ2V0V1BQb3MgZ2xhbmNlQXQgZ2xvYmFsQ2hhdCBnbG9iYWxSYWRpbyBnb2dnbGVzICcgK1xuICAgICAgICAnZ290byBncm91cCBncm91cENoYXQgZ3JvdXBGcm9tTmV0SWQgZ3JvdXBJY29uU2VsZWN0YWJsZSBncm91cEljb25zVmlzaWJsZSBncm91cElkIGdyb3VwT3duZXIgJyArXG4gICAgICAgICdncm91cFJhZGlvIGdyb3VwU2VsZWN0ZWRVbml0cyBncm91cFNlbGVjdFVuaXQgZ3JwTnVsbCBndW5uZXIgZ3VzdHMgaGFsdCBoYW5kZ3VuSXRlbXMgJyArXG4gICAgICAgICdoYW5kZ3VuTWFnYXppbmUgaGFuZGd1bldlYXBvbiBoYW5kc0hpdCBoYXNJbnRlcmZhY2UgaGFzUGlsb3RDYW1lcmEgaGFzV2VhcG9uIGhjQWxsR3JvdXBzICcgK1xuICAgICAgICAnaGNHcm91cFBhcmFtcyBoY0xlYWRlciBoY1JlbW92ZUFsbEdyb3VwcyBoY1JlbW92ZUdyb3VwIGhjU2VsZWN0ZWQgaGNTZWxlY3RHcm91cCBoY1NldEdyb3VwICcgK1xuICAgICAgICAnaGNTaG93QmFyIGhjU2hvd25CYXIgaGVhZGdlYXIgaGlkZUJvZHkgaGlkZU9iamVjdCBoaWRlT2JqZWN0R2xvYmFsIGhpZGVTZWxlY3Rpb24gaGludCBoaW50QyAnICtcbiAgICAgICAgJ2hpbnRDYWRldCBoaW50U2lsZW50IGhtZCBob3N0TWlzc2lvbiBodG1sTG9hZCBIVURNb3ZlbWVudExldmVscyBodW1pZGl0eSBpbWFnZSBpbXBvcnRBbGxHcm91cHMgJyArXG4gICAgICAgICdpbXBvcnRhbmNlIGluIGluQXJlYSBpbkFyZWFBcnJheSBpbmNhcGFjaXRhdGVkU3RhdGUgaW5kZXBlbmRlbnQgaW5mbGFtZSBpbmZsYW1lZCAnICtcbiAgICAgICAgJ2luR2FtZVVJU2V0RXZlbnRIYW5kbGVyIGluaGVyaXRzRnJvbSBpbml0QW1iaWVudExpZmUgaW5Qb2x5Z29uIGlucHV0QWN0aW9uIGluUmFuZ2VPZkFydGlsbGVyeSAnICtcbiAgICAgICAgJ2luc2VydEVkaXRvck9iamVjdCBpbnRlcnNlY3QgaXMzREVOIGlzM0RFTk11bHRpcGxheWVyIGlzQWJsZVRvQnJlYXRoZSBpc0FnZW50IGlzQXJyYXkgJyArXG4gICAgICAgICdpc0F1dG9Ib3Zlck9uIGlzQXV0b25vbW91cyBpc0F1dG90ZXN0IGlzQmxlZWRpbmcgaXNCdXJuaW5nIGlzQ2xhc3MgaXNDb2xsaXNpb25MaWdodE9uICcgK1xuICAgICAgICAnaXNDb3BpbG90RW5hYmxlZCBpc0RlZGljYXRlZCBpc0RMQ0F2YWlsYWJsZSBpc0VuZ2luZU9uIGlzRXF1YWxUbyBpc0VxdWFsVHlwZSBpc0VxdWFsVHlwZUFsbCAnICtcbiAgICAgICAgJ2lzRXF1YWxUeXBlQW55IGlzRXF1YWxUeXBlQXJyYXkgaXNFcXVhbFR5cGVQYXJhbXMgaXNGaWxlUGF0Y2hpbmdFbmFibGVkIGlzRmxhc2hsaWdodE9uICcgK1xuICAgICAgICAnaXNGbGF0RW1wdHkgaXNGb3JjZWRXYWxrIGlzRm9ybWF0aW9uTGVhZGVyIGlzSGlkZGVuIGlzSW5SZW1haW5zQ29sbGVjdG9yICcgK1xuICAgICAgICAnaXNJbnN0cnVjdG9yRmlndXJlRW5hYmxlZCBpc0lSTGFzZXJPbiBpc0tleUFjdGl2ZSBpc0tpbmRPZiBpc0xpZ2h0T24gaXNMb2NhbGl6ZWQgaXNNYW51YWxGaXJlICcgK1xuICAgICAgICAnaXNNYXJrZWRGb3JDb2xsZWN0aW9uIGlzTXVsdGlwbGF5ZXIgaXNNdWx0aXBsYXllclNvbG8gaXNOaWwgaXNOdWxsIGlzTnVtYmVyIGlzT2JqZWN0SGlkZGVuICcgK1xuICAgICAgICAnaXNPYmplY3RSVEQgaXNPblJvYWQgaXNQaXBFbmFibGVkIGlzUGxheWVyIGlzUmVhbFRpbWUgaXNSZW1vdGVFeGVjdXRlZCBpc1JlbW90ZUV4ZWN1dGVkSklQICcgK1xuICAgICAgICAnaXNTZXJ2ZXIgaXNTaG93aW5nM0RJY29ucyBpc1NwcmludEFsbG93ZWQgaXNTdGFtaW5hRW5hYmxlZCBpc1N0ZWFtTWlzc2lvbiAnICtcbiAgICAgICAgJ2lzU3RyZWFtRnJpZW5kbHlVSUVuYWJsZWQgaXNUZXh0IGlzVG91Y2hpbmdHcm91bmQgaXNUdXJuZWRPdXQgaXNUdXRIaW50c0VuYWJsZWQgaXNVQVZDb25uZWN0YWJsZSAnICtcbiAgICAgICAgJ2lzVUFWQ29ubmVjdGVkIGlzVW5pZm9ybUFsbG93ZWQgaXNWZWhpY2xlQ2FyZ28gaXNXYWxraW5nIGlzV2VhcG9uRGVwbG95ZWQgaXNXZWFwb25SZXN0ZWQgJyArXG4gICAgICAgICdpdGVtQ2FyZ28gaXRlbXMgaXRlbXNXaXRoTWFnYXppbmVzIGpvaW4gam9pbkFzIGpvaW5Bc1NpbGVudCBqb2luU2lsZW50IGpvaW5TdHJpbmcga2JBZGREYXRhYmFzZSAnICtcbiAgICAgICAgJ2tiQWRkRGF0YWJhc2VUYXJnZXRzIGtiQWRkVG9waWMga2JIYXNUb3BpYyBrYlJlYWN0IGtiUmVtb3ZlVG9waWMga2JUZWxsIGtiV2FzU2FpZCBrZXlJbWFnZSAnICtcbiAgICAgICAgJ2tleU5hbWUga25vd3NBYm91dCBsYW5kIGxhbmRBdCBsYW5kUmVzdWx0IGxhbmd1YWdlIGxhc2VyVGFyZ2V0IGxiQWRkIGxiQ2xlYXIgbGJDb2xvciBsYkN1clNlbCAnICtcbiAgICAgICAgJ2xiRGF0YSBsYkRlbGV0ZSBsYklzU2VsZWN0ZWQgbGJQaWN0dXJlIGxiU2VsZWN0aW9uIGxiU2V0Q29sb3IgbGJTZXRDdXJTZWwgbGJTZXREYXRhIGxiU2V0UGljdHVyZSAnICtcbiAgICAgICAgJ2xiU2V0UGljdHVyZUNvbG9yIGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWQgbGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCBsYlNldFNlbGVjdENvbG9yICcgK1xuICAgICAgICAnbGJTZXRTZWxlY3RDb2xvclJpZ2h0IGxiU2V0U2VsZWN0ZWQgbGJTZXRUb29sdGlwIGxiU2V0VmFsdWUgbGJTaXplIGxiU29ydCBsYlNvcnRCeVZhbHVlIGxiVGV4dCAnICtcbiAgICAgICAgJ2xiVmFsdWUgbGVhZGVyIGxlYWRlcmJvYXJkRGVJbml0IGxlYWRlcmJvYXJkR2V0Um93cyBsZWFkZXJib2FyZEluaXQgbGVhdmVWZWhpY2xlIGxpYnJhcnlDcmVkaXRzICcgK1xuICAgICAgICAnbGlicmFyeURpc2NsYWltZXJzIGxpZmVTdGF0ZSBsaWdodEF0dGFjaE9iamVjdCBsaWdodERldGFjaE9iamVjdCBsaWdodElzT24gbGlnaHRuaW5ncyBsaW1pdFNwZWVkICcgK1xuICAgICAgICAnbGluZWFyQ29udmVyc2lvbiBsaW5lQnJlYWsgbGluZUludGVyc2VjdHMgbGluZUludGVyc2VjdHNPYmpzIGxpbmVJbnRlcnNlY3RzU3VyZmFjZXMgJyArXG4gICAgICAgICdsaW5lSW50ZXJzZWN0c1dpdGggbGlua0l0ZW0gbGlzdCBsaXN0T2JqZWN0cyBsbiBsbmJBZGRBcnJheSBsbmJBZGRDb2x1bW4gbG5iQWRkUm93IGxuYkNsZWFyICcgK1xuICAgICAgICAnbG5iQ29sb3IgbG5iQ3VyU2VsUm93IGxuYkRhdGEgbG5iRGVsZXRlQ29sdW1uIGxuYkRlbGV0ZVJvdyBsbmJHZXRDb2x1bW5zUG9zaXRpb24gbG5iUGljdHVyZSAnICtcbiAgICAgICAgJ2xuYlNldENvbG9yIGxuYlNldENvbHVtbnNQb3MgbG5iU2V0Q3VyU2VsUm93IGxuYlNldERhdGEgbG5iU2V0UGljdHVyZSBsbmJTZXRUZXh0IGxuYlNldFZhbHVlICcgK1xuICAgICAgICAnbG5iU2l6ZSBsbmJUZXh0IGxuYlZhbHVlIGxvYWQgbG9hZEFicyBsb2FkQmFja3BhY2sgbG9hZEZpbGUgbG9hZEdhbWUgbG9hZElkZW50aXR5IGxvYWRNYWdhemluZSAnICtcbiAgICAgICAgJ2xvYWRPdmVybGF5IGxvYWRTdGF0dXMgbG9hZFVuaWZvcm0gbG9hZFZlc3QgbG9jYWwgbG9jYWxpemUgbG9jYXRpb25OdWxsIGxvY2F0aW9uUG9zaXRpb24gbG9jayAnICtcbiAgICAgICAgJ2xvY2tDYW1lcmFUbyBsb2NrQ2FyZ28gbG9ja0RyaXZlciBsb2NrZWQgbG9ja2VkQ2FyZ28gbG9ja2VkRHJpdmVyIGxvY2tlZFR1cnJldCBsb2NrSWRlbnRpdHkgJyArXG4gICAgICAgICdsb2NrVHVycmV0IGxvY2tXUCBsb2cgbG9nRW50aXRpZXMgbG9nTmV0d29yayBsb2dOZXR3b3JrVGVybWluYXRlIGxvb2tBdCBsb29rQXRQb3MgbWFnYXppbmVDYXJnbyAnICtcbiAgICAgICAgJ21hZ2F6aW5lcyBtYWdhemluZXNBbGxUdXJyZXRzIG1hZ2F6aW5lc0FtbW8gbWFnYXppbmVzQW1tb0NhcmdvIG1hZ2F6aW5lc0FtbW9GdWxsIG1hZ2F6aW5lc0RldGFpbCAnICtcbiAgICAgICAgJ21hZ2F6aW5lc0RldGFpbEJhY2twYWNrIG1hZ2F6aW5lc0RldGFpbFVuaWZvcm0gbWFnYXppbmVzRGV0YWlsVmVzdCBtYWdhemluZXNUdXJyZXQgJyArXG4gICAgICAgICdtYWdhemluZVR1cnJldEFtbW8gbWFwQW5pbUFkZCBtYXBBbmltQ2xlYXIgbWFwQW5pbUNvbW1pdCBtYXBBbmltRG9uZSBtYXBDZW50ZXJPbkNhbWVyYSAnICtcbiAgICAgICAgJ21hcEdyaWRQb3NpdGlvbiBtYXJrQXNGaW5pc2hlZE9uU3RlYW0gbWFya2VyQWxwaGEgbWFya2VyQnJ1c2ggbWFya2VyQ29sb3IgbWFya2VyRGlyIG1hcmtlclBvcyAnICtcbiAgICAgICAgJ21hcmtlclNoYXBlIG1hcmtlclNpemUgbWFya2VyVGV4dCBtYXJrZXJUeXBlIG1heCBtZW1iZXJzIG1lbnVBY3Rpb24gbWVudUFkZCBtZW51Q2hlY2tlZCBtZW51Q2xlYXIgJyArXG4gICAgICAgICdtZW51Q29sbGFwc2UgbWVudURhdGEgbWVudURlbGV0ZSBtZW51RW5hYmxlIG1lbnVFbmFibGVkIG1lbnVFeHBhbmQgbWVudUhvdmVyIG1lbnVQaWN0dXJlICcgK1xuICAgICAgICAnbWVudVNldEFjdGlvbiBtZW51U2V0Q2hlY2sgbWVudVNldERhdGEgbWVudVNldFBpY3R1cmUgbWVudVNldFZhbHVlIG1lbnVTaG9ydGN1dCBtZW51U2hvcnRjdXRUZXh0ICcgK1xuICAgICAgICAnbWVudVNpemUgbWVudVNvcnQgbWVudVRleHQgbWVudVVSTCBtZW51VmFsdWUgbWluIG1pbmVBY3RpdmUgbWluZURldGVjdGVkQnkgbWlzc2lvbkNvbmZpZ0ZpbGUgJyArXG4gICAgICAgICdtaXNzaW9uRGlmZmljdWx0eSBtaXNzaW9uTmFtZSBtaXNzaW9uTmFtZXNwYWNlIG1pc3Npb25TdGFydCBtaXNzaW9uVmVyc2lvbiBtb2QgbW9kZWxUb1dvcmxkICcgK1xuICAgICAgICAnbW9kZWxUb1dvcmxkVmlzdWFsIG1vZFBhcmFtcyBtb29uSW50ZW5zaXR5IG1vb25QaGFzZSBtb3JhbGUgbW92ZSBtb3ZlM0RFTkNhbWVyYSBtb3ZlSW5BbnkgJyArXG4gICAgICAgICdtb3ZlSW5DYXJnbyBtb3ZlSW5Db21tYW5kZXIgbW92ZUluRHJpdmVyIG1vdmVJbkd1bm5lciBtb3ZlSW5UdXJyZXQgbW92ZU9iamVjdFRvRW5kIG1vdmVPdXQgJyArXG4gICAgICAgICdtb3ZlVGltZSBtb3ZlVG8gbW92ZVRvQ29tcGxldGVkIG1vdmVUb0ZhaWxlZCBtdXNpY1ZvbHVtZSBuYW1lIG5hbWVTb3VuZCBuZWFyRW50aXRpZXMgJyArXG4gICAgICAgICduZWFyZXN0QnVpbGRpbmcgbmVhcmVzdExvY2F0aW9uIG5lYXJlc3RMb2NhdGlvbnMgbmVhcmVzdExvY2F0aW9uV2l0aER1YmJpbmcgbmVhcmVzdE9iamVjdCAnICtcbiAgICAgICAgJ25lYXJlc3RPYmplY3RzIG5lYXJlc3RUZXJyYWluT2JqZWN0cyBuZWFyT2JqZWN0cyBuZWFyT2JqZWN0c1JlYWR5IG5lYXJSb2FkcyBuZWFyU3VwcGxpZXMgJyArXG4gICAgICAgICduZWFyVGFyZ2V0cyBuZWVkUmVsb2FkIG5ldElkIG5ldE9iak51bGwgbmV3T3ZlcmxheSBuZXh0TWVudUl0ZW1JbmRleCBuZXh0V2VhdGhlckNoYW5nZSBuTWVudUl0ZW1zICcgK1xuICAgICAgICAnbm90IG51bWJlclRvRGF0ZSBvYmplY3RDdXJhdG9ycyBvYmplY3RGcm9tTmV0SWQgb2JqZWN0UGFyZW50IG9iak51bGwgb2JqU3RhdHVzIG9uQnJpZWZpbmdHcm91cCAnICtcbiAgICAgICAgJ29uQnJpZWZpbmdOb3RlcyBvbkJyaWVmaW5nUGxhbiBvbkJyaWVmaW5nVGVhbVN3aXRjaCBvbkNvbW1hbmRNb2RlQ2hhbmdlZCBvbkRvdWJsZUNsaWNrICcgK1xuICAgICAgICAnb25FYWNoRnJhbWUgb25Hcm91cEljb25DbGljayBvbkdyb3VwSWNvbk92ZXJFbnRlciBvbkdyb3VwSWNvbk92ZXJMZWF2ZSBvbkhDR3JvdXBTZWxlY3Rpb25DaGFuZ2VkICcgK1xuICAgICAgICAnb25NYXBTaW5nbGVDbGljayBvblBsYXllckNvbm5lY3RlZCBvblBsYXllckRpc2Nvbm5lY3RlZCBvblByZWxvYWRGaW5pc2hlZCBvblByZWxvYWRTdGFydGVkICcgK1xuICAgICAgICAnb25TaG93TmV3T2JqZWN0IG9uVGVhbVN3aXRjaCBvcGVuQ3VyYXRvckludGVyZmFjZSBvcGVuRExDUGFnZSBvcGVuTWFwIG9wZW5Zb3V0dWJlVmlkZW8gb3Bmb3Igb3IgJyArXG4gICAgICAgICdvcmRlckdldEluIG92ZXJjYXN0IG92ZXJjYXN0Rm9yZWNhc3Qgb3duZXIgcGFyYW0gcGFyYW1zIHBhcnNlTnVtYmVyIHBhcnNlVGV4dCBwYXJzaW5nTmFtZXNwYWNlICcgK1xuICAgICAgICAncGFydGljbGVzUXVhbGl0eSBwaSBwaWNrV2VhcG9uUG9vbCBwaXRjaCBwaXhlbEdyaWQgcGl4ZWxHcmlkQmFzZSBwaXhlbEdyaWROb1VJU2NhbGUgcGl4ZWxIIHBpeGVsVyAnICtcbiAgICAgICAgJ3BsYXlhYmxlU2xvdHNOdW1iZXIgcGxheWFibGVVbml0cyBwbGF5QWN0aW9uIHBsYXlBY3Rpb25Ob3cgcGxheWVyIHBsYXllclJlc3Bhd25UaW1lIHBsYXllclNpZGUgJyArXG4gICAgICAgICdwbGF5ZXJzTnVtYmVyIHBsYXlHZXN0dXJlIHBsYXlNaXNzaW9uIHBsYXlNb3ZlIHBsYXlNb3ZlTm93IHBsYXlNdXNpYyBwbGF5U2NyaXB0ZWRNaXNzaW9uICcgK1xuICAgICAgICAncGxheVNvdW5kIHBsYXlTb3VuZDNEIHBvc2l0aW9uIHBvc2l0aW9uQ2FtZXJhVG9Xb3JsZCBwb3NTY3JlZW5Ub1dvcmxkIHBvc1dvcmxkVG9TY3JlZW4gJyArXG4gICAgICAgICdwcEVmZmVjdEFkanVzdCBwcEVmZmVjdENvbW1pdCBwcEVmZmVjdENvbW1pdHRlZCBwcEVmZmVjdENyZWF0ZSBwcEVmZmVjdERlc3Ryb3kgcHBFZmZlY3RFbmFibGUgJyArXG4gICAgICAgICdwcEVmZmVjdEVuYWJsZWQgcHBFZmZlY3RGb3JjZUluTlZHIHByZWNpc2lvbiBwcmVsb2FkQ2FtZXJhIHByZWxvYWRPYmplY3QgcHJlbG9hZFNvdW5kICcgK1xuICAgICAgICAncHJlbG9hZFRpdGxlT2JqIHByZWxvYWRUaXRsZVJzYyBwcmVwcm9jZXNzRmlsZSBwcmVwcm9jZXNzRmlsZUxpbmVOdW1iZXJzIHByaW1hcnlXZWFwb24gJyArXG4gICAgICAgICdwcmltYXJ5V2VhcG9uSXRlbXMgcHJpbWFyeVdlYXBvbk1hZ2F6aW5lIHByaW9yaXR5IHByaXZhdGUgcHJvY2Vzc0RpYXJ5TGluayBwcm9kdWN0VmVyc2lvbiAnICtcbiAgICAgICAgJ3Byb2ZpbGVOYW1lIHByb2ZpbGVOYW1lc3BhY2UgcHJvZmlsZU5hbWVTdGVhbSBwcm9ncmVzc0xvYWRpbmdTY3JlZW4gcHJvZ3Jlc3NQb3NpdGlvbiAnICtcbiAgICAgICAgJ3Byb2dyZXNzU2V0UG9zaXRpb24gcHVibGljVmFyaWFibGUgcHVibGljVmFyaWFibGVDbGllbnQgcHVibGljVmFyaWFibGVTZXJ2ZXIgcHVzaEJhY2sgJyArXG4gICAgICAgICdwdXNoQmFja1VuaXF1ZSBwdXRXZWFwb25Qb29sIHF1ZXJ5SXRlbXNQb29sIHF1ZXJ5TWFnYXppbmVQb29sIHF1ZXJ5V2VhcG9uUG9vbCByYWQgcmFkaW9DaGFubmVsQWRkICcgK1xuICAgICAgICAncmFkaW9DaGFubmVsQ3JlYXRlIHJhZGlvQ2hhbm5lbFJlbW92ZSByYWRpb0NoYW5uZWxTZXRDYWxsU2lnbiByYWRpb0NoYW5uZWxTZXRMYWJlbCByYWRpb1ZvbHVtZSAnICtcbiAgICAgICAgJ3JhaW4gcmFpbmJvdyByYW5kb20gcmFuayByYW5rSWQgcmF0aW5nIHJlY3Rhbmd1bGFyIHJlZ2lzdGVyZWRUYXNrcyByZWdpc3RlclRhc2sgcmVsb2FkICcgK1xuICAgICAgICAncmVsb2FkRW5hYmxlZCByZW1vdGVDb250cm9sIHJlbW90ZUV4ZWMgcmVtb3RlRXhlY0NhbGwgcmVtb3ZlM0RFTkNvbm5lY3Rpb24gcmVtb3ZlM0RFTkV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZTNERU5MYXllciByZW1vdmVBY3Rpb24gcmVtb3ZlQWxsM0RFTkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsQWN0aW9ucyByZW1vdmVBbGxBc3NpZ25lZEl0ZW1zICcgK1xuICAgICAgICAncmVtb3ZlQWxsQ29udGFpbmVycyByZW1vdmVBbGxDdXJhdG9yQWRkb25zIHJlbW92ZUFsbEN1cmF0b3JDYW1lcmFBcmVhcyAnICtcbiAgICAgICAgJ3JlbW92ZUFsbEN1cmF0b3JFZGl0aW5nQXJlYXMgcmVtb3ZlQWxsRXZlbnRIYW5kbGVycyByZW1vdmVBbGxIYW5kZ3VuSXRlbXMgcmVtb3ZlQWxsSXRlbXMgJyArXG4gICAgICAgICdyZW1vdmVBbGxJdGVtc1dpdGhNYWdhemluZXMgcmVtb3ZlQWxsTWlzc2lvbkV2ZW50SGFuZGxlcnMgcmVtb3ZlQWxsTVBFdmVudEhhbmRsZXJzICcgK1xuICAgICAgICAncmVtb3ZlQWxsTXVzaWNFdmVudEhhbmRsZXJzIHJlbW92ZUFsbE93bmVkTWluZXMgcmVtb3ZlQWxsUHJpbWFyeVdlYXBvbkl0ZW1zIHJlbW92ZUFsbFdlYXBvbnMgJyArXG4gICAgICAgICdyZW1vdmVCYWNrcGFjayByZW1vdmVCYWNrcGFja0dsb2JhbCByZW1vdmVDdXJhdG9yQWRkb25zIHJlbW92ZUN1cmF0b3JDYW1lcmFBcmVhICcgK1xuICAgICAgICAncmVtb3ZlQ3VyYXRvckVkaXRhYmxlT2JqZWN0cyByZW1vdmVDdXJhdG9yRWRpdGluZ0FyZWEgcmVtb3ZlRHJhd0ljb24gcmVtb3ZlRHJhd0xpbmtzICcgK1xuICAgICAgICAncmVtb3ZlRXZlbnRIYW5kbGVyIHJlbW92ZUZyb21SZW1haW5zQ29sbGVjdG9yIHJlbW92ZUdvZ2dsZXMgcmVtb3ZlR3JvdXBJY29uIHJlbW92ZUhhbmRndW5JdGVtICcgK1xuICAgICAgICAncmVtb3ZlSGVhZGdlYXIgcmVtb3ZlSXRlbSByZW1vdmVJdGVtRnJvbUJhY2twYWNrIHJlbW92ZUl0ZW1Gcm9tVW5pZm9ybSByZW1vdmVJdGVtRnJvbVZlc3QgJyArXG4gICAgICAgICdyZW1vdmVJdGVtcyByZW1vdmVNYWdhemluZSByZW1vdmVNYWdhemluZUdsb2JhbCByZW1vdmVNYWdhemluZXMgcmVtb3ZlTWFnYXppbmVzVHVycmV0ICcgK1xuICAgICAgICAncmVtb3ZlTWFnYXppbmVUdXJyZXQgcmVtb3ZlTWVudUl0ZW0gcmVtb3ZlTWlzc2lvbkV2ZW50SGFuZGxlciByZW1vdmVNUEV2ZW50SGFuZGxlciAnICtcbiAgICAgICAgJ3JlbW92ZU11c2ljRXZlbnRIYW5kbGVyIHJlbW92ZU93bmVkTWluZSByZW1vdmVQcmltYXJ5V2VhcG9uSXRlbSByZW1vdmVTZWNvbmRhcnlXZWFwb25JdGVtICcgK1xuICAgICAgICAncmVtb3ZlU2ltcGxlVGFzayByZW1vdmVTd2l0Y2hhYmxlVW5pdCByZW1vdmVUZWFtTWVtYmVyIHJlbW92ZVVuaWZvcm0gcmVtb3ZlVmVzdCByZW1vdmVXZWFwb24gJyArXG4gICAgICAgICdyZW1vdmVXZWFwb25HbG9iYWwgcmVtb3ZlV2VhcG9uVHVycmV0IHJlcXVpcmVkVmVyc2lvbiByZXNldENhbVNoYWtlIHJlc2V0U3ViZ3JvdXBEaXJlY3Rpb24gJyArXG4gICAgICAgICdyZXNpc3RhbmNlIHJlc2l6ZSByZXNvdXJjZXMgcmVzcGF3blZlaGljbGUgcmVzdGFydEVkaXRvckNhbWVyYSByZXZlYWwgcmV2ZWFsTWluZSByZXZlcnNlICcgK1xuICAgICAgICAncmV2ZXJzZWRNb3VzZVkgcm9hZEF0IHJvYWRzQ29ubmVjdGVkVG8gcm9sZURlc2NyaXB0aW9uIHJvcGVBdHRhY2hlZE9iamVjdHMgcm9wZUF0dGFjaGVkVG8gJyArXG4gICAgICAgICdyb3BlQXR0YWNoRW5hYmxlZCByb3BlQXR0YWNoVG8gcm9wZUNyZWF0ZSByb3BlQ3V0IHJvcGVEZXN0cm95IHJvcGVEZXRhY2ggcm9wZUVuZFBvc2l0aW9uICcgK1xuICAgICAgICAncm9wZUxlbmd0aCByb3BlcyByb3BlVW53aW5kIHJvcGVVbndvdW5kIHJvdG9yc0ZvcmNlc1JURCByb3RvcnNScG1SVEQgcm91bmQgcnVuSW5pdFNjcmlwdCAnICtcbiAgICAgICAgJ3NhZmVab25lSCBzYWZlWm9uZVcgc2FmZVpvbmVXQWJzIHNhZmVab25lWCBzYWZlWm9uZVhBYnMgc2FmZVpvbmVZIHNhdmUzREVOSW52ZW50b3J5IHNhdmVHYW1lICcgK1xuICAgICAgICAnc2F2ZUlkZW50aXR5IHNhdmVKb3lzdGlja3Mgc2F2ZU92ZXJsYXkgc2F2ZVByb2ZpbGVOYW1lc3BhY2Ugc2F2ZVN0YXR1cyBzYXZlVmFyIHNhdmluZ0VuYWJsZWQgc2F5ICcgK1xuICAgICAgICAnc2F5MkQgc2F5M0Qgc2NvcGVOYW1lIHNjb3JlIHNjb3JlU2lkZSBzY3JlZW5zaG90IHNjcmVlblRvV29ybGQgc2NyaXB0RG9uZSBzY3JpcHROYW1lIHNjcmlwdE51bGwgJyArXG4gICAgICAgICdzY3VkU3RhdGUgc2Vjb25kYXJ5V2VhcG9uIHNlY29uZGFyeVdlYXBvbkl0ZW1zIHNlY29uZGFyeVdlYXBvbk1hZ2F6aW5lIHNlbGVjdCBzZWxlY3RCZXN0UGxhY2VzICcgK1xuICAgICAgICAnc2VsZWN0RGlhcnlTdWJqZWN0IHNlbGVjdGVkRWRpdG9yT2JqZWN0cyBzZWxlY3RFZGl0b3JPYmplY3Qgc2VsZWN0aW9uTmFtZXMgc2VsZWN0aW9uUG9zaXRpb24gJyArXG4gICAgICAgICdzZWxlY3RMZWFkZXIgc2VsZWN0TWF4IHNlbGVjdE1pbiBzZWxlY3ROb1BsYXllciBzZWxlY3RQbGF5ZXIgc2VsZWN0UmFuZG9tIHNlbGVjdFdlYXBvbiAnICtcbiAgICAgICAgJ3NlbGVjdFdlYXBvblR1cnJldCBzZW5kQVVNZXNzYWdlIHNlbmRTaW1wbGVDb21tYW5kIHNlbmRUYXNrIHNlbmRUYXNrUmVzdWx0IHNlbmRVRFBNZXNzYWdlICcgK1xuICAgICAgICAnc2VydmVyQ29tbWFuZCBzZXJ2ZXJDb21tYW5kQXZhaWxhYmxlIHNlcnZlckNvbW1hbmRFeGVjdXRhYmxlIHNlcnZlck5hbWUgc2VydmVyVGltZSBzZXQgJyArXG4gICAgICAgICdzZXQzREVOQXR0cmlidXRlIHNldDNERU5BdHRyaWJ1dGVzIHNldDNERU5HcmlkIHNldDNERU5JY29uc1Zpc2libGUgc2V0M0RFTkxheWVyICcgK1xuICAgICAgICAnc2V0M0RFTkxpbmVzVmlzaWJsZSBzZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXMgc2V0M0RFTk1vZGVsc1Zpc2libGUgc2V0M0RFTk9iamVjdFR5cGUgJyArXG4gICAgICAgICdzZXQzREVOU2VsZWN0ZWQgc2V0QWNjVGltZSBzZXRBaXJwb3J0U2lkZSBzZXRBbW1vIHNldEFtbW9DYXJnbyBzZXRBbmltU3BlZWRDb2VmIHNldEFwZXJ0dXJlICcgK1xuICAgICAgICAnc2V0QXBlcnR1cmVOZXcgc2V0QXJtb3J5UG9pbnRzIHNldEF0dHJpYnV0ZXMgc2V0QXV0b25vbW91cyBzZXRCZWhhdmlvdXIgc2V0QmxlZWRpbmdSZW1haW5pbmcgJyArXG4gICAgICAgICdzZXRDYW1lcmFJbnRlcmVzdCBzZXRDYW1TaGFrZURlZlBhcmFtcyBzZXRDYW1TaGFrZVBhcmFtcyBzZXRDYW1Vc2VUaSBzZXRDYXB0aXZlIHNldENlbnRlck9mTWFzcyAnICtcbiAgICAgICAgJ3NldENvbGxpc2lvbkxpZ2h0IHNldENvbWJhdE1vZGUgc2V0Q29tcGFzc09zY2lsbGF0aW9uIHNldEN1cmF0b3JDYW1lcmFBcmVhQ2VpbGluZyBzZXRDdXJhdG9yQ29lZiAnICtcbiAgICAgICAgJ3NldEN1cmF0b3JFZGl0aW5nQXJlYVR5cGUgc2V0Q3VyYXRvcldheXBvaW50Q29zdCBzZXRDdXJyZW50Q2hhbm5lbCBzZXRDdXJyZW50VGFzayAnICtcbiAgICAgICAgJ3NldEN1cnJlbnRXYXlwb2ludCBzZXRDdXN0b21BaW1Db2VmIHNldERhbWFnZSBzZXREYW1tYWdlIHNldERhdGUgc2V0RGVicmllZmluZ1RleHQgJyArXG4gICAgICAgICdzZXREZWZhdWx0Q2FtZXJhIHNldERlc3RpbmF0aW9uIHNldERldGFpbE1hcEJsZW5kUGFycyBzZXREaXIgc2V0RGlyZWN0aW9uIHNldERyYXdJY29uICcgK1xuICAgICAgICAnc2V0RHJvcEludGVydmFsIHNldEVkaXRvck1vZGUgc2V0RWRpdG9yT2JqZWN0U2NvcGUgc2V0RWZmZWN0Q29uZGl0aW9uIHNldEZhY2Ugc2V0RmFjZUFuaW1hdGlvbiAnICtcbiAgICAgICAgJ3NldEZhdGlndWUgc2V0RmxhZ093bmVyIHNldEZsYWdTaWRlIHNldEZsYWdUZXh0dXJlIHNldEZvZyBzZXRGb3JtYXRpb24gc2V0Rm9ybWF0aW9uVGFzayAnICtcbiAgICAgICAgJ3NldEZvcm1EaXIgc2V0RnJpZW5kIHNldEZyb21FZGl0b3Igc2V0RlNNVmFyaWFibGUgc2V0RnVlbCBzZXRGdWVsQ2FyZ28gc2V0R3JvdXBJY29uICcgK1xuICAgICAgICAnc2V0R3JvdXBJY29uUGFyYW1zIHNldEdyb3VwSWNvbnNTZWxlY3RhYmxlIHNldEdyb3VwSWNvbnNWaXNpYmxlIHNldEdyb3VwSWQgc2V0R3JvdXBJZEdsb2JhbCAnICtcbiAgICAgICAgJ3NldEdyb3VwT3duZXIgc2V0R3VzdHMgc2V0SGlkZUJlaGluZCBzZXRIaXQgc2V0SGl0SW5kZXggc2V0SGl0UG9pbnREYW1hZ2Ugc2V0SG9yaXpvblBhcmFsbGF4Q29lZiAnICtcbiAgICAgICAgJ3NldEhVRE1vdmVtZW50TGV2ZWxzIHNldElkZW50aXR5IHNldEltcG9ydGFuY2Ugc2V0TGVhZGVyIHNldExpZ2h0QW1iaWVudCBzZXRMaWdodEF0dGVudWF0aW9uICcgK1xuICAgICAgICAnc2V0TGlnaHRCcmlnaHRuZXNzIHNldExpZ2h0Q29sb3Igc2V0TGlnaHREYXlMaWdodCBzZXRMaWdodEZsYXJlTWF4RGlzdGFuY2Ugc2V0TGlnaHRGbGFyZVNpemUgJyArXG4gICAgICAgICdzZXRMaWdodEludGVuc2l0eSBzZXRMaWdodG5pbmdzIHNldExpZ2h0VXNlRmxhcmUgc2V0TG9jYWxXaW5kUGFyYW1zIHNldE1hZ2F6aW5lVHVycmV0QW1tbyAnICtcbiAgICAgICAgJ3NldE1hcmtlckFscGhhIHNldE1hcmtlckFscGhhTG9jYWwgc2V0TWFya2VyQnJ1c2ggc2V0TWFya2VyQnJ1c2hMb2NhbCBzZXRNYXJrZXJDb2xvciAnICtcbiAgICAgICAgJ3NldE1hcmtlckNvbG9yTG9jYWwgc2V0TWFya2VyRGlyIHNldE1hcmtlckRpckxvY2FsIHNldE1hcmtlclBvcyBzZXRNYXJrZXJQb3NMb2NhbCBzZXRNYXJrZXJTaGFwZSAnICtcbiAgICAgICAgJ3NldE1hcmtlclNoYXBlTG9jYWwgc2V0TWFya2VyU2l6ZSBzZXRNYXJrZXJTaXplTG9jYWwgc2V0TWFya2VyVGV4dCBzZXRNYXJrZXJUZXh0TG9jYWwgJyArXG4gICAgICAgICdzZXRNYXJrZXJUeXBlIHNldE1hcmtlclR5cGVMb2NhbCBzZXRNYXNzIHNldE1pbWljIHNldE1vdXNlUG9zaXRpb24gc2V0TXVzaWNFZmZlY3QgJyArXG4gICAgICAgICdzZXRNdXNpY0V2ZW50SGFuZGxlciBzZXROYW1lIHNldE5hbWVTb3VuZCBzZXRPYmplY3RBcmd1bWVudHMgc2V0T2JqZWN0TWF0ZXJpYWwgJyArXG4gICAgICAgICdzZXRPYmplY3RNYXRlcmlhbEdsb2JhbCBzZXRPYmplY3RQcm94eSBzZXRPYmplY3RUZXh0dXJlIHNldE9iamVjdFRleHR1cmVHbG9iYWwgJyArXG4gICAgICAgICdzZXRPYmplY3RWaWV3RGlzdGFuY2Ugc2V0T3ZlcmNhc3Qgc2V0T3duZXIgc2V0T3h5Z2VuUmVtYWluaW5nIHNldFBhcnRpY2xlQ2lyY2xlIHNldFBhcnRpY2xlQ2xhc3MgJyArXG4gICAgICAgICdzZXRQYXJ0aWNsZUZpcmUgc2V0UGFydGljbGVQYXJhbXMgc2V0UGFydGljbGVSYW5kb20gc2V0UGlsb3RDYW1lcmFEaXJlY3Rpb24gJyArXG4gICAgICAgICdzZXRQaWxvdENhbWVyYVJvdGF0aW9uIHNldFBpbG90Q2FtZXJhVGFyZ2V0IHNldFBpbG90TGlnaHQgc2V0UGlQRWZmZWN0IHNldFBpdGNoIHNldFBsYXlhYmxlICcgK1xuICAgICAgICAnc2V0UGxheWVyUmVzcGF3blRpbWUgc2V0UG9zIHNldFBvc0FTTCBzZXRQb3NBU0wyIHNldFBvc0FTTFcgc2V0UG9zQVRMIHNldFBvc2l0aW9uIHNldFBvc1dvcmxkICcgK1xuICAgICAgICAnc2V0UmFkaW9Nc2cgc2V0UmFpbiBzZXRSYWluYm93IHNldFJhbmRvbUxpcCBzZXRSYW5rIHNldFJlY3Rhbmd1bGFyIHNldFJlcGFpckNhcmdvICcgK1xuICAgICAgICAnc2V0U2hhZG93RGlzdGFuY2Ugc2V0U2hvdFBhcmVudHMgc2V0U2lkZSBzZXRTaW1wbGVUYXNrQWx3YXlzVmlzaWJsZSBzZXRTaW1wbGVUYXNrQ3VzdG9tRGF0YSAnICtcbiAgICAgICAgJ3NldFNpbXBsZVRhc2tEZXNjcmlwdGlvbiBzZXRTaW1wbGVUYXNrRGVzdGluYXRpb24gc2V0U2ltcGxlVGFza1RhcmdldCBzZXRTaW1wbGVUYXNrVHlwZSAnICtcbiAgICAgICAgJ3NldFNpbXVsV2VhdGhlckxheWVycyBzZXRTaXplIHNldFNraWxsIHNldFNsaW5nTG9hZCBzZXRTb3VuZEVmZmVjdCBzZXRTcGVha2VyIHNldFNwZWVjaCAnICtcbiAgICAgICAgJ3NldFNwZWVkTW9kZSBzZXRTdGFtaW5hIHNldFN0YW1pbmFTY2hlbWUgc2V0U3RhdFZhbHVlIHNldFN1cHByZXNzaW9uIHNldFN5c3RlbU9mVW5pdHMgJyArXG4gICAgICAgICdzZXRUYXJnZXRBZ2Ugc2V0VGFza1Jlc3VsdCBzZXRUYXNrU3RhdGUgc2V0VGVycmFpbkdyaWQgc2V0VGV4dCBzZXRUaW1lTXVsdGlwbGllciBzZXRUaXRsZUVmZmVjdCAnICtcbiAgICAgICAgJ3NldFRyaWdnZXJBY3RpdmF0aW9uIHNldFRyaWdnZXJBcmVhIHNldFRyaWdnZXJTdGF0ZW1lbnRzIHNldFRyaWdnZXJUZXh0IHNldFRyaWdnZXJUaW1lb3V0ICcgK1xuICAgICAgICAnc2V0VHJpZ2dlclR5cGUgc2V0VHlwZSBzZXRVbmNvbnNjaW91cyBzZXRVbml0QWJpbGl0eSBzZXRVbml0TG9hZG91dCBzZXRVbml0UG9zIHNldFVuaXRQb3NXZWFrICcgK1xuICAgICAgICAnc2V0VW5pdFJhbmsgc2V0VW5pdFJlY29pbENvZWZmaWNpZW50IHNldFVuaXRUcmFpdCBzZXRVbmxvYWRJbkNvbWJhdCBzZXRVc2VyQWN0aW9uVGV4dCBzZXRWYXJpYWJsZSAnICtcbiAgICAgICAgJ3NldFZlY3RvckRpciBzZXRWZWN0b3JEaXJBbmRVcCBzZXRWZWN0b3JVcCBzZXRWZWhpY2xlQW1tbyBzZXRWZWhpY2xlQW1tb0RlZiBzZXRWZWhpY2xlQXJtb3IgJyArXG4gICAgICAgICdzZXRWZWhpY2xlQ2FyZ28gc2V0VmVoaWNsZUlkIHNldFZlaGljbGVMb2NrIHNldFZlaGljbGVQb3NpdGlvbiBzZXRWZWhpY2xlVGlQYXJzIHNldFZlaGljbGVWYXJOYW1lICcgK1xuICAgICAgICAnc2V0VmVsb2NpdHkgc2V0VmVsb2NpdHlUcmFuc2Zvcm1hdGlvbiBzZXRWaWV3RGlzdGFuY2Ugc2V0VmlzaWJsZUlmVHJlZUNvbGxhcHNlZCBzZXRXYXZlcyAnICtcbiAgICAgICAgJ3NldFdheXBvaW50QmVoYXZpb3VyIHNldFdheXBvaW50Q29tYmF0TW9kZSBzZXRXYXlwb2ludENvbXBsZXRpb25SYWRpdXMgc2V0V2F5cG9pbnREZXNjcmlwdGlvbiAnICtcbiAgICAgICAgJ3NldFdheXBvaW50Rm9yY2VCZWhhdmlvdXIgc2V0V2F5cG9pbnRGb3JtYXRpb24gc2V0V2F5cG9pbnRIb3VzZVBvc2l0aW9uIHNldFdheXBvaW50TG9pdGVyUmFkaXVzICcgK1xuICAgICAgICAnc2V0V2F5cG9pbnRMb2l0ZXJUeXBlIHNldFdheXBvaW50TmFtZSBzZXRXYXlwb2ludFBvc2l0aW9uIHNldFdheXBvaW50U2NyaXB0IHNldFdheXBvaW50U3BlZWQgJyArXG4gICAgICAgICdzZXRXYXlwb2ludFN0YXRlbWVudHMgc2V0V2F5cG9pbnRUaW1lb3V0IHNldFdheXBvaW50VHlwZSBzZXRXYXlwb2ludFZpc2libGUgJyArXG4gICAgICAgICdzZXRXZWFwb25SZWxvYWRpbmdUaW1lIHNldFdpbmQgc2V0V2luZERpciBzZXRXaW5kRm9yY2Ugc2V0V2luZFN0ciBzZXRXUFBvcyBzaG93M0RJY29ucyBzaG93Q2hhdCAnICtcbiAgICAgICAgJ3Nob3dDaW5lbWFCb3JkZXIgc2hvd0NvbW1hbmRpbmdNZW51IHNob3dDb21wYXNzIHNob3dDdXJhdG9yQ29tcGFzcyBzaG93R1BTIHNob3dIVUQgc2hvd0xlZ2VuZCAnICtcbiAgICAgICAgJ3Nob3dNYXAgc2hvd25BcnRpbGxlcnlDb21wdXRlciBzaG93bkNoYXQgc2hvd25Db21wYXNzIHNob3duQ3VyYXRvckNvbXBhc3Mgc2hvd05ld0VkaXRvck9iamVjdCAnICtcbiAgICAgICAgJ3Nob3duR1BTIHNob3duSFVEIHNob3duTWFwIHNob3duUGFkIHNob3duUmFkaW8gc2hvd25TY29yZXRhYmxlIHNob3duVUFWRmVlZCBzaG93bldhcnJhbnQgJyArXG4gICAgICAgICdzaG93bldhdGNoIHNob3dQYWQgc2hvd1JhZGlvIHNob3dTY29yZXRhYmxlIHNob3dTdWJ0aXRsZXMgc2hvd1VBVkZlZWQgc2hvd1dhcnJhbnQgc2hvd1dhdGNoICcgK1xuICAgICAgICAnc2hvd1dheXBvaW50IHNob3dXYXlwb2ludHMgc2lkZSBzaWRlQW1iaWVudExpZmUgc2lkZUNoYXQgc2lkZUVtcHR5IHNpZGVFbmVteSBzaWRlRnJpZW5kbHkgJyArXG4gICAgICAgICdzaWRlTG9naWMgc2lkZVJhZGlvIHNpZGVVbmtub3duIHNpbXBsZVRhc2tzIHNpbXVsYXRpb25FbmFibGVkIHNpbXVsQ2xvdWREZW5zaXR5ICcgK1xuICAgICAgICAnc2ltdWxDbG91ZE9jY2x1c2lvbiBzaW11bEluQ2xvdWRzIHNpbXVsV2VhdGhlclN5bmMgc2luIHNpemUgc2l6ZU9mIHNraWxsIHNraWxsRmluYWwgc2tpcFRpbWUgJyArXG4gICAgICAgICdzbGVlcCBzbGlkZXJQb3NpdGlvbiBzbGlkZXJSYW5nZSBzbGlkZXJTZXRQb3NpdGlvbiBzbGlkZXJTZXRSYW5nZSBzbGlkZXJTZXRTcGVlZCBzbGlkZXJTcGVlZCAnICtcbiAgICAgICAgJ3NsaW5nTG9hZEFzc2lzdGFudFNob3duIHNvbGRpZXJNYWdhemluZXMgc29tZUFtbW8gc29ydCBzb3VuZFZvbHVtZSBzcGF3biBzcGVha2VyIHNwZWVkIHNwZWVkTW9kZSAnICtcbiAgICAgICAgJ3NwbGl0U3RyaW5nIHNxcnQgc3F1YWRQYXJhbXMgc3RhbmNlIHN0YXJ0TG9hZGluZ1NjcmVlbiBzdGVwIHN0b3Agc3RvcEVuZ2luZVJURCBzdG9wcGVkIHN0ciAnICtcbiAgICAgICAgJ3N1bk9yTW9vbiBzdXBwb3J0SW5mbyBzdXBwcmVzc0ZvciBzdXJmYWNlSXNXYXRlciBzdXJmYWNlTm9ybWFsIHN1cmZhY2VUeXBlIHN3aW1JbkRlcHRoICcgK1xuICAgICAgICAnc3dpdGNoYWJsZVVuaXRzIHN3aXRjaEFjdGlvbiBzd2l0Y2hDYW1lcmEgc3dpdGNoR2VzdHVyZSBzd2l0Y2hMaWdodCBzd2l0Y2hNb3ZlICcgK1xuICAgICAgICAnc3luY2hyb25pemVkT2JqZWN0cyBzeW5jaHJvbml6ZWRUcmlnZ2VycyBzeW5jaHJvbml6ZWRXYXlwb2ludHMgc3luY2hyb25pemVPYmplY3RzQWRkICcgK1xuICAgICAgICAnc3luY2hyb25pemVPYmplY3RzUmVtb3ZlIHN5bmNocm9uaXplVHJpZ2dlciBzeW5jaHJvbml6ZVdheXBvaW50IHN5c3RlbUNoYXQgc3lzdGVtT2ZVbml0cyB0YW4gJyArXG4gICAgICAgICd0YXJnZXRLbm93bGVkZ2UgdGFyZ2V0c0FnZ3JlZ2F0ZSB0YXJnZXRzUXVlcnkgdGFza0Fsd2F5c1Zpc2libGUgdGFza0NoaWxkcmVuIHRhc2tDb21wbGV0ZWQgJyArXG4gICAgICAgICd0YXNrQ3VzdG9tRGF0YSB0YXNrRGVzY3JpcHRpb24gdGFza0Rlc3RpbmF0aW9uIHRhc2tIaW50IHRhc2tNYXJrZXJPZmZzZXQgdGFza051bGwgdGFza1BhcmVudCAnICtcbiAgICAgICAgJ3Rhc2tSZXN1bHQgdGFza1N0YXRlIHRhc2tUeXBlIHRlYW1NZW1iZXIgdGVhbU1lbWJlck51bGwgdGVhbU5hbWUgdGVhbXMgdGVhbVN3aXRjaCAnICtcbiAgICAgICAgJ3RlYW1Td2l0Y2hFbmFibGVkIHRlYW1UeXBlIHRlcm1pbmF0ZSB0ZXJyYWluSW50ZXJzZWN0IHRlcnJhaW5JbnRlcnNlY3RBU0wgdGV4dCB0ZXh0TG9nICcgK1xuICAgICAgICAndGV4dExvZ0Zvcm1hdCB0ZyB0aW1lIHRpbWVNdWx0aXBsaWVyIHRpdGxlQ3V0IHRpdGxlRmFkZU91dCB0aXRsZU9iaiB0aXRsZVJzYyB0aXRsZVRleHQgdG9BcnJheSAnICtcbiAgICAgICAgJ3RvRml4ZWQgdG9Mb3dlciB0b1N0cmluZyB0b1VwcGVyIHRyaWdnZXJBY3RpdmF0ZWQgdHJpZ2dlckFjdGl2YXRpb24gdHJpZ2dlckFyZWEgJyArXG4gICAgICAgICd0cmlnZ2VyQXR0YWNoZWRWZWhpY2xlIHRyaWdnZXJBdHRhY2hPYmplY3QgdHJpZ2dlckF0dGFjaFZlaGljbGUgdHJpZ2dlclN0YXRlbWVudHMgdHJpZ2dlclRleHQgJyArXG4gICAgICAgICd0cmlnZ2VyVGltZW91dCB0cmlnZ2VyVGltZW91dEN1cnJlbnQgdHJpZ2dlclR5cGUgdHVycmV0TG9jYWwgdHVycmV0T3duZXIgdHVycmV0VW5pdCB0dkFkZCB0dkNsZWFyICcgK1xuICAgICAgICAndHZDb2xsYXBzZSB0dkNvdW50IHR2Q3VyU2VsIHR2RGF0YSB0dkRlbGV0ZSB0dkV4cGFuZCB0dlBpY3R1cmUgdHZTZXRDdXJTZWwgdHZTZXREYXRhIHR2U2V0UGljdHVyZSAnICtcbiAgICAgICAgJ3R2U2V0UGljdHVyZUNvbG9yIHR2U2V0UGljdHVyZUNvbG9yRGlzYWJsZWQgdHZTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZCB0dlNldFBpY3R1cmVSaWdodCAnICtcbiAgICAgICAgJ3R2U2V0UGljdHVyZVJpZ2h0Q29sb3IgdHZTZXRQaWN0dXJlUmlnaHRDb2xvckRpc2FibGVkIHR2U2V0UGljdHVyZVJpZ2h0Q29sb3JTZWxlY3RlZCB0dlNldFRleHQgJyArXG4gICAgICAgICd0dlNldFRvb2x0aXAgdHZTZXRWYWx1ZSB0dlNvcnQgdHZTb3J0QnlWYWx1ZSB0dlRleHQgdHZUb29sdGlwIHR2VmFsdWUgdHlwZSB0eXBlTmFtZSB0eXBlT2YgJyArXG4gICAgICAgICdVQVZDb250cm9sIHVpTmFtZXNwYWNlIHVpU2xlZXAgdW5hc3NpZ25DdXJhdG9yIHVuYXNzaWduSXRlbSB1bmFzc2lnblRlYW0gdW5hc3NpZ25WZWhpY2xlICcgK1xuICAgICAgICAndW5kZXJ3YXRlciB1bmlmb3JtIHVuaWZvcm1Db250YWluZXIgdW5pZm9ybUl0ZW1zIHVuaWZvcm1NYWdhemluZXMgdW5pdEFkZG9ucyB1bml0QWltUG9zaXRpb24gJyArXG4gICAgICAgICd1bml0QWltUG9zaXRpb25WaXN1YWwgdW5pdEJhY2twYWNrIHVuaXRJc1VBViB1bml0UG9zIHVuaXRSZWFkeSB1bml0UmVjb2lsQ29lZmZpY2llbnQgdW5pdHMgJyArXG4gICAgICAgICd1bml0c0JlbG93SGVpZ2h0IHVubGlua0l0ZW0gdW5sb2NrQWNoaWV2ZW1lbnQgdW5yZWdpc3RlclRhc2sgdXBkYXRlRHJhd0ljb24gdXBkYXRlTWVudUl0ZW0gJyArXG4gICAgICAgICd1cGRhdGVPYmplY3RUcmVlIHVzZUFJU3RlZXJpbmdDb21wb25lbnQgdXNlQXVkaW9UaW1lRm9yTW92ZXMgdmVjdG9yQWRkIHZlY3RvckNvcyAnICtcbiAgICAgICAgJ3ZlY3RvckNyb3NzUHJvZHVjdCB2ZWN0b3JEaWZmIHZlY3RvckRpciB2ZWN0b3JEaXJWaXN1YWwgdmVjdG9yRGlzdGFuY2UgdmVjdG9yRGlzdGFuY2VTcXIgJyArXG4gICAgICAgICd2ZWN0b3JEb3RQcm9kdWN0IHZlY3RvckZyb21UbyB2ZWN0b3JNYWduaXR1ZGUgdmVjdG9yTWFnbml0dWRlU3FyIHZlY3Rvck11bHRpcGx5IHZlY3Rvck5vcm1hbGl6ZWQgJyArXG4gICAgICAgICd2ZWN0b3JVcCB2ZWN0b3JVcFZpc3VhbCB2ZWhpY2xlIHZlaGljbGVDYXJnb0VuYWJsZWQgdmVoaWNsZUNoYXQgdmVoaWNsZVJhZGlvIHZlaGljbGVzICcgK1xuICAgICAgICAndmVoaWNsZVZhck5hbWUgdmVsb2NpdHkgdmVsb2NpdHlNb2RlbFNwYWNlIHZlcmlmeVNpZ25hdHVyZSB2ZXN0IHZlc3RDb250YWluZXIgdmVzdEl0ZW1zICcgK1xuICAgICAgICAndmVzdE1hZ2F6aW5lcyB2aWV3RGlzdGFuY2UgdmlzaWJsZUNvbXBhc3MgdmlzaWJsZUdQUyB2aXNpYmxlTWFwIHZpc2libGVQb3NpdGlvbiAnICtcbiAgICAgICAgJ3Zpc2libGVQb3NpdGlvbkFTTCB2aXNpYmxlU2NvcmV0YWJsZSB2aXNpYmxlV2F0Y2ggd2F2ZXMgd2F5cG9pbnRBdHRhY2hlZE9iamVjdCAnICtcbiAgICAgICAgJ3dheXBvaW50QXR0YWNoZWRWZWhpY2xlIHdheXBvaW50QXR0YWNoT2JqZWN0IHdheXBvaW50QXR0YWNoVmVoaWNsZSB3YXlwb2ludEJlaGF2aW91ciAnICtcbiAgICAgICAgJ3dheXBvaW50Q29tYmF0TW9kZSB3YXlwb2ludENvbXBsZXRpb25SYWRpdXMgd2F5cG9pbnREZXNjcmlwdGlvbiB3YXlwb2ludEZvcmNlQmVoYXZpb3VyICcgK1xuICAgICAgICAnd2F5cG9pbnRGb3JtYXRpb24gd2F5cG9pbnRIb3VzZVBvc2l0aW9uIHdheXBvaW50TG9pdGVyUmFkaXVzIHdheXBvaW50TG9pdGVyVHlwZSB3YXlwb2ludE5hbWUgJyArXG4gICAgICAgICd3YXlwb2ludFBvc2l0aW9uIHdheXBvaW50cyB3YXlwb2ludFNjcmlwdCB3YXlwb2ludHNFbmFibGVkVUFWIHdheXBvaW50U2hvdyB3YXlwb2ludFNwZWVkICcgK1xuICAgICAgICAnd2F5cG9pbnRTdGF0ZW1lbnRzIHdheXBvaW50VGltZW91dCB3YXlwb2ludFRpbWVvdXRDdXJyZW50IHdheXBvaW50VHlwZSB3YXlwb2ludFZpc2libGUgJyArXG4gICAgICAgICd3ZWFwb25BY2Nlc3NvcmllcyB3ZWFwb25BY2Nlc3Nvcmllc0NhcmdvIHdlYXBvbkNhcmdvIHdlYXBvbkRpcmVjdGlvbiB3ZWFwb25JbmVydGlhIHdlYXBvbkxvd2VyZWQgJyArXG4gICAgICAgICd3ZWFwb25zIHdlYXBvbnNJdGVtcyB3ZWFwb25zSXRlbXNDYXJnbyB3ZWFwb25TdGF0ZSB3ZWFwb25zVHVycmV0IHdlaWdodFJURCB3ZXN0IFdGU2lkZVRleHQgd2luZCcsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAndHJ1ZSBmYWxzZSBuaWwnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIEZVTkNUSU9OLFxuICAgICAgU1RSSU5HUyxcbiAgICAgIENQUC5wcmVwcm9jZXNzb3JcbiAgICBdLFxuICAgIGlsbGVnYWw6IC8jL1xuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1FTlRfTU9ERSA9IGhsanMuQ09NTUVOVCgnLS0nLCAnJCcpO1xuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgaWxsZWdhbDogL1s8Pnt9KiNdLyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOlxuICAgICAgICAgICdiZWdpbiBlbmQgc3RhcnQgY29tbWl0IHJvbGxiYWNrIHNhdmVwb2ludCBsb2NrIGFsdGVyIGNyZWF0ZSBkcm9wIHJlbmFtZSBjYWxsICcgK1xuICAgICAgICAgICdkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50ICcgK1xuICAgICAgICAgICdtZXJnZSBkZXNjcmliZSB1c2UgZXhwbGFpbiBoZWxwIGRlY2xhcmUgcHJlcGFyZSBleGVjdXRlIGRlYWxsb2NhdGUgcmVsZWFzZSAnICtcbiAgICAgICAgICAndW5sb2NrIHB1cmdlIHJlc2V0IGNoYW5nZSBzdG9wIGFuYWx5emUgY2FjaGUgZmx1c2ggb3B0aW1pemUgcmVwYWlyIGtpbGwgJyArXG4gICAgICAgICAgJ2luc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50JyxcbiAgICAgICAgZW5kOiAvOy8sIGVuZHNXaXRoUGFyZW50OiB0cnVlLFxuICAgICAgICBsZXhlbWVzOiAvW1xcd1xcLl0rLyxcbiAgICAgICAga2V5d29yZHM6IHtcbiAgICAgICAgICBrZXl3b3JkOlxuICAgICAgICAgICAgJ2Fib3J0IGFicyBhYnNvbHV0ZSBhY2MgYWNjZSBhY2NlcCBhY2NlcHQgYWNjZXNzIGFjY2Vzc2VkIGFjY2Vzc2libGUgYWNjb3VudCBhY29zIGFjdGlvbiBhY3RpdmF0ZSBhZGQgJyArXG4gICAgICAgICAgICAnYWRkdGltZSBhZG1pbiBhZG1pbmlzdGVyIGFkdmFuY2VkIGFkdmlzZSBhZXNfZGVjcnlwdCBhZXNfZW5jcnlwdCBhZnRlciBhZ2VudCBhZ2dyZWdhdGUgYWxpIGFsaWEgYWxpYXMgJyArXG4gICAgICAgICAgICAnYWxsb2NhdGUgYWxsb3cgYWx0ZXIgYWx3YXlzIGFuYWx5emUgYW5jaWxsYXJ5IGFuZCBhbnkgYW55ZGF0YSBhbnlkYXRhc2V0IGFueXNjaGVtYSBhbnl0eXBlIGFwcGx5ICcgK1xuICAgICAgICAgICAgJ2FyY2hpdmUgYXJjaGl2ZWQgYXJjaGl2ZWxvZyBhcmUgYXMgYXNjIGFzY2lpIGFzaW4gYXNzZW1ibHkgYXNzZXJ0aW9uIGFzc29jaWF0ZSBhc3luY2hyb25vdXMgYXQgYXRhbiAnICtcbiAgICAgICAgICAgICdhdG4yIGF0dHIgYXR0cmkgYXR0cmliIGF0dHJpYnUgYXR0cmlidXQgYXR0cmlidXRlIGF0dHJpYnV0ZXMgYXVkaXQgYXV0aGVudGljYXRlZCBhdXRoZW50aWNhdGlvbiBhdXRoaWQgJyArXG4gICAgICAgICAgICAnYXV0aG9ycyBhdXRvIGF1dG9hbGxvY2F0ZSBhdXRvZGJsaW5rIGF1dG9leHRlbmQgYXV0b21hdGljIGF2YWlsYWJpbGl0eSBhdmcgYmFja3VwIGJhZGZpbGUgYmFzaWNmaWxlICcgK1xuICAgICAgICAgICAgJ2JlZm9yZSBiZWdpbiBiZWdpbm5pbmcgYmVuY2htYXJrIGJldHdlZW4gYmZpbGUgYmZpbGVfYmFzZSBiaWcgYmlnZmlsZSBiaW4gYmluYXJ5X2RvdWJsZSBiaW5hcnlfZmxvYXQgJyArXG4gICAgICAgICAgICAnYmlubG9nIGJpdF9hbmQgYml0X2NvdW50IGJpdF9sZW5ndGggYml0X29yIGJpdF94b3IgYml0bWFwIGJsb2JfYmFzZSBibG9jayBibG9ja3NpemUgYm9keSBib3RoIGJvdW5kICcgK1xuICAgICAgICAgICAgJ2J1ZmZlcl9jYWNoZSBidWZmZXJfcG9vbCBidWlsZCBidWxrIGJ5IGJ5dGUgYnl0ZW9yZGVybWFyayBieXRlcyBjYWNoZSBjYWNoaW5nIGNhbGwgY2FsbGluZyBjYW5jZWwgJyArXG4gICAgICAgICAgICAnY2FwYWNpdHkgY2FzY2FkZSBjYXNjYWRlZCBjYXNlIGNhc3QgY2F0YWxvZyBjYXRlZ29yeSBjZWlsIGNlaWxpbmcgY2hhaW4gY2hhbmdlIGNoYW5nZWQgY2hhcl9iYXNlICcgK1xuICAgICAgICAgICAgJ2NoYXJfbGVuZ3RoIGNoYXJhY3Rlcl9sZW5ndGggY2hhcmFjdGVycyBjaGFyYWN0ZXJzZXQgY2hhcmluZGV4IGNoYXJzZXQgY2hhcnNldGZvcm0gY2hhcnNldGlkIGNoZWNrICcgK1xuICAgICAgICAgICAgJ2NoZWNrc3VtIGNoZWNrc3VtX2FnZyBjaGlsZCBjaG9vc2UgY2hyIGNodW5rIGNsYXNzIGNsZWFudXAgY2xlYXIgY2xpZW50IGNsb2IgY2xvYl9iYXNlIGNsb25lIGNsb3NlICcgK1xuICAgICAgICAgICAgJ2NsdXN0ZXJfaWQgY2x1c3Rlcl9wcm9iYWJpbGl0eSBjbHVzdGVyX3NldCBjbHVzdGVyaW5nIGNvYWxlc2NlIGNvZXJjaWJpbGl0eSBjb2wgY29sbGF0ZSBjb2xsYXRpb24gJyArXG4gICAgICAgICAgICAnY29sbGVjdCBjb2x1IGNvbHVtIGNvbHVtbiBjb2x1bW5fdmFsdWUgY29sdW1ucyBjb2x1bW5zX3VwZGF0ZWQgY29tbWVudCBjb21taXQgY29tcGFjdCBjb21wYXRpYmlsaXR5ICcgK1xuICAgICAgICAgICAgJ2NvbXBpbGVkIGNvbXBsZXRlIGNvbXBvc2l0ZV9saW1pdCBjb21wb3VuZCBjb21wcmVzcyBjb21wdXRlIGNvbmNhdCBjb25jYXRfd3MgY29uY3VycmVudCBjb25maXJtIGNvbm4gJyArXG4gICAgICAgICAgICAnY29ubmVjIGNvbm5lY3QgY29ubmVjdF9ieV9pc2N5Y2xlIGNvbm5lY3RfYnlfaXNsZWFmIGNvbm5lY3RfYnlfcm9vdCBjb25uZWN0X3RpbWUgY29ubmVjdGlvbiAnICtcbiAgICAgICAgICAgICdjb25zaWRlciBjb25zaXN0ZW50IGNvbnN0YW50IGNvbnN0cmFpbnQgY29uc3RyYWludHMgY29uc3RydWN0b3IgY29udGFpbmVyIGNvbnRlbnQgY29udGVudHMgY29udGV4dCAnICtcbiAgICAgICAgICAgICdjb250cmlidXRvcnMgY29udHJvbGZpbGUgY29udiBjb252ZXJ0IGNvbnZlcnRfdHogY29yciBjb3JyX2sgY29ycl9zIGNvcnJlc3BvbmRpbmcgY29ycnVwdGlvbiBjb3MgY29zdCAnICtcbiAgICAgICAgICAgICdjb3VudCBjb3VudF9iaWcgY291bnRlZCBjb3Zhcl9wb3AgY292YXJfc2FtcCBjcHVfcGVyX2NhbGwgY3B1X3Blcl9zZXNzaW9uIGNyYzMyIGNyZWF0ZSBjcmVhdGlvbiAnICtcbiAgICAgICAgICAgICdjcml0aWNhbCBjcm9zcyBjdWJlIGN1bWVfZGlzdCBjdXJkYXRlIGN1cnJlbnQgY3VycmVudF9kYXRlIGN1cnJlbnRfdGltZSBjdXJyZW50X3RpbWVzdGFtcCBjdXJyZW50X3VzZXIgJyArXG4gICAgICAgICAgICAnY3Vyc29yIGN1cnRpbWUgY3VzdG9tZGF0dW0gY3ljbGUgZGF0YSBkYXRhYmFzZSBkYXRhYmFzZXMgZGF0YWZpbGUgZGF0YWZpbGVzIGRhdGFsZW5ndGggZGF0ZV9hZGQgJyArXG4gICAgICAgICAgICAnZGF0ZV9jYWNoZSBkYXRlX2Zvcm1hdCBkYXRlX3N1YiBkYXRlYWRkIGRhdGVkaWZmIGRhdGVmcm9tcGFydHMgZGF0ZW5hbWUgZGF0ZXBhcnQgZGF0ZXRpbWUyZnJvbXBhcnRzICcgK1xuICAgICAgICAgICAgJ2RheSBkYXlfdG9fc2Vjb25kIGRheW5hbWUgZGF5b2Ztb250aCBkYXlvZndlZWsgZGF5b2Z5ZWFyIGRheXMgZGJfcm9sZV9jaGFuZ2UgZGJ0aW1lem9uZSBkZGwgZGVhbGxvY2F0ZSAnICtcbiAgICAgICAgICAgICdkZWNsYXJlIGRlY29kZSBkZWNvbXBvc2UgZGVjcmVtZW50IGRlY3J5cHQgZGVkdXBsaWNhdGUgZGVmIGRlZmEgZGVmYXUgZGVmYXVsIGRlZmF1bHQgZGVmYXVsdHMgJyArXG4gICAgICAgICAgICAnZGVmZXJyZWQgZGVmaSBkZWZpbiBkZWZpbmUgZGVncmVlcyBkZWxheWVkIGRlbGVnYXRlIGRlbGV0ZSBkZWxldGVfYWxsIGRlbGltaXRlZCBkZW1hbmQgZGVuc2VfcmFuayAnICtcbiAgICAgICAgICAgICdkZXB0aCBkZXF1ZXVlIGRlc19kZWNyeXB0IGRlc19lbmNyeXB0IGRlc19rZXlfZmlsZSBkZXNjIGRlc2NyIGRlc2NyaSBkZXNjcmliIGRlc2NyaWJlIGRlc2NyaXB0b3IgJyArXG4gICAgICAgICAgICAnZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljcyBkaWZmZXJlbmNlIGRpbWVuc2lvbiBkaXJlY3RfbG9hZCBkaXJlY3RvcnkgZGlzYWJsZSBkaXNhYmxlX2FsbCAnICtcbiAgICAgICAgICAgICdkaXNhbGxvdyBkaXNhc3NvY2lhdGUgZGlzY2FyZGZpbGUgZGlzY29ubmVjdCBkaXNrZ3JvdXAgZGlzdGluY3QgZGlzdGluY3Ryb3cgZGlzdHJpYnV0ZSBkaXN0cmlidXRlZCBkaXYgJyArXG4gICAgICAgICAgICAnZG8gZG9jdW1lbnQgZG9tYWluIGRvdG5ldCBkb3VibGUgZG93bmdyYWRlIGRyb3AgZHVtcGZpbGUgZHVwbGljYXRlIGR1cmF0aW9uIGVhY2ggZWRpdGlvbiBlZGl0aW9uYWJsZSAnICtcbiAgICAgICAgICAgICdlZGl0aW9ucyBlbGVtZW50IGVsbGlwc2lzIGVsc2UgZWxzaWYgZWx0IGVtcHR5IGVuYWJsZSBlbmFibGVfYWxsIGVuY2xvc2VkIGVuY29kZSBlbmNvZGluZyBlbmNyeXB0ICcgK1xuICAgICAgICAgICAgJ2VuZCBlbmQtZXhlYyBlbmRpYW4gZW5mb3JjZWQgZW5naW5lIGVuZ2luZXMgZW5xdWV1ZSBlbnRlcnByaXNlIGVudGl0eWVzY2FwaW5nIGVvbW9udGggZXJyb3IgZXJyb3JzICcgK1xuICAgICAgICAgICAgJ2VzY2FwZWQgZXZhbG5hbWUgZXZhbHVhdGUgZXZlbnQgZXZlbnRkYXRhIGV2ZW50cyBleGNlcHQgZXhjZXB0aW9uIGV4Y2VwdGlvbnMgZXhjaGFuZ2UgZXhjbHVkZSBleGNsdWRpbmcgJyArXG4gICAgICAgICAgICAnZXhlY3UgZXhlY3V0IGV4ZWN1dGUgZXhlbXB0IGV4aXN0cyBleGl0IGV4cCBleHBpcmUgZXhwbGFpbiBleHBvcnQgZXhwb3J0X3NldCBleHRlbmRlZCBleHRlbnQgZXh0ZXJuYWwgJyArXG4gICAgICAgICAgICAnZXh0ZXJuYWxfMSBleHRlcm5hbF8yIGV4dGVybmFsbHkgZXh0cmFjdCBmYWlsZWQgZmFpbGVkX2xvZ2luX2F0dGVtcHRzIGZhaWxvdmVyIGZhaWx1cmUgZmFyIGZhc3QgJyArXG4gICAgICAgICAgICAnZmVhdHVyZV9zZXQgZmVhdHVyZV92YWx1ZSBmZXRjaCBmaWVsZCBmaWVsZHMgZmlsZSBmaWxlX25hbWVfY29udmVydCBmaWxlc3lzdGVtX2xpa2VfbG9nZ2luZyBmaW5hbCAnICtcbiAgICAgICAgICAgICdmaW5pc2ggZmlyc3QgZmlyc3RfdmFsdWUgZml4ZWQgZmxhc2hfY2FjaGUgZmxhc2hiYWNrIGZsb29yIGZsdXNoIGZvbGxvd2luZyBmb2xsb3dzIGZvciBmb3JhbGwgZm9yY2UgJyArXG4gICAgICAgICAgICAnZm9ybSBmb3JtYSBmb3JtYXQgZm91bmQgZm91bmRfcm93cyBmcmVlbGlzdCBmcmVlbGlzdHMgZnJlZXBvb2xzIGZyZXNoIGZyb20gZnJvbV9iYXNlNjQgZnJvbV9kYXlzICcgK1xuICAgICAgICAgICAgJ2Z0cCBmdWxsIGZ1bmN0aW9uIGdlbmVyYWwgZ2VuZXJhdGVkIGdldCBnZXRfZm9ybWF0IGdldF9sb2NrIGdldGRhdGUgZ2V0dXRjZGF0ZSBnbG9iYWwgZ2xvYmFsX25hbWUgJyArXG4gICAgICAgICAgICAnZ2xvYmFsbHkgZ28gZ290byBncmFudCBncmFudHMgZ3JlYXRlc3QgZ3JvdXAgZ3JvdXBfY29uY2F0IGdyb3VwX2lkIGdyb3VwaW5nIGdyb3VwaW5nX2lkIGdyb3VwcyAnICtcbiAgICAgICAgICAgICdndGlkX3N1YnRyYWN0IGd1YXJhbnRlZSBndWFyZCBoYW5kbGVyIGhhc2ggaGFzaGtleXMgaGF2aW5nIGhlYSBoZWFkIGhlYWRpIGhlYWRpbiBoZWFkaW5nIGhlYXAgaGVscCBoZXggJyArXG4gICAgICAgICAgICAnaGllcmFyY2h5IGhpZ2ggaGlnaF9wcmlvcml0eSBob3N0cyBob3VyIGh0dHAgaWQgaWRlbnRfY3VycmVudCBpZGVudF9pbmNyIGlkZW50X3NlZWQgaWRlbnRpZmllZCAnICtcbiAgICAgICAgICAgICdpZGVudGl0eSBpZGxlX3RpbWUgaWYgaWZudWxsIGlnbm9yZSBpaWYgaWxpa2UgaWxtIGltbWVkaWF0ZSBpbXBvcnQgaW4gaW5jbHVkZSBpbmNsdWRpbmcgaW5jcmVtZW50ICcgK1xuICAgICAgICAgICAgJ2luZGV4IGluZGV4ZXMgaW5kZXhpbmcgaW5kZXh0eXBlIGluZGljYXRvciBpbmRpY2VzIGluZXQ2X2F0b24gaW5ldDZfbnRvYSBpbmV0X2F0b24gaW5ldF9udG9hIGluZmlsZSAnICtcbiAgICAgICAgICAgICdpbml0aWFsIGluaXRpYWxpemVkIGluaXRpYWxseSBpbml0cmFucyBpbm1lbW9yeSBpbm5lciBpbm5vZGIgaW5wdXQgaW5zZXJ0IGluc3RhbGwgaW5zdGFuY2UgaW5zdGFudGlhYmxlICcgK1xuICAgICAgICAgICAgJ2luc3RyIGludGVyZmFjZSBpbnRlcmxlYXZlZCBpbnRlcnNlY3QgaW50byBpbnZhbGlkYXRlIGludmlzaWJsZSBpcyBpc19mcmVlX2xvY2sgaXNfaXB2NCBpc19pcHY0X2NvbXBhdCAnICtcbiAgICAgICAgICAgICdpc19ub3QgaXNfbm90X251bGwgaXNfdXNlZF9sb2NrIGlzZGF0ZSBpc251bGwgaXNvbGF0aW9uIGl0ZXJhdGUgamF2YSBqb2luIGpzb24ganNvbl9leGlzdHMgJyArXG4gICAgICAgICAgICAna2VlcCBrZWVwX2R1cGxpY2F0ZXMga2V5IGtleXMga2lsbCBsYW5ndWFnZSBsYXJnZSBsYXN0IGxhc3RfZGF5IGxhc3RfaW5zZXJ0X2lkIGxhc3RfdmFsdWUgbGF4IGxjYXNlICcgK1xuICAgICAgICAgICAgJ2xlYWQgbGVhZGluZyBsZWFzdCBsZWF2ZXMgbGVmdCBsZW4gbGVuZ2h0IGxlbmd0aCBsZXNzIGxldmVsIGxldmVscyBsaWJyYXJ5IGxpa2UgbGlrZTIgbGlrZTQgbGlrZWMgbGltaXQgJyArXG4gICAgICAgICAgICAnbGluZXMgbGluayBsaXN0IGxpc3RhZ2cgbGl0dGxlIGxuIGxvYWQgbG9hZF9maWxlIGxvYiBsb2JzIGxvY2FsIGxvY2FsdGltZSBsb2NhbHRpbWVzdGFtcCBsb2NhdGUgJyArXG4gICAgICAgICAgICAnbG9jYXRvciBsb2NrIGxvY2tlZCBsb2cgbG9nMTAgbG9nMiBsb2dmaWxlIGxvZ2ZpbGVzIGxvZ2dpbmcgbG9naWNhbCBsb2dpY2FsX3JlYWRzX3Blcl9jYWxsICcgK1xuICAgICAgICAgICAgJ2xvZ29mZiBsb2dvbiBsb2dzIGxvbmcgbG9vcCBsb3cgbG93X3ByaW9yaXR5IGxvd2VyIGxwYWQgbHJ0cmltIGx0cmltIG1haW4gbWFrZV9zZXQgbWFrZWRhdGUgbWFrZXRpbWUgJyArXG4gICAgICAgICAgICAnbWFuYWdlZCBtYW5hZ2VtZW50IG1hbnVhbCBtYXAgbWFwcGluZyBtYXNrIG1hc3RlciBtYXN0ZXJfcG9zX3dhaXQgbWF0Y2ggbWF0Y2hlZCBtYXRlcmlhbGl6ZWQgbWF4ICcgK1xuICAgICAgICAgICAgJ21heGV4dGVudHMgbWF4aW1pemUgbWF4aW5zdGFuY2VzIG1heGxlbiBtYXhsb2dmaWxlcyBtYXhsb2doaXN0b3J5IG1heGxvZ21lbWJlcnMgbWF4c2l6ZSBtYXh0cmFucyAnICtcbiAgICAgICAgICAgICdtZDUgbWVhc3VyZXMgbWVkaWFuIG1lZGl1bSBtZW1iZXIgbWVtY29tcHJlc3MgbWVtb3J5IG1lcmdlIG1pY3Jvc2Vjb25kIG1pZCBtaWdyYXRpb24gbWluIG1pbmV4dGVudHMgJyArXG4gICAgICAgICAgICAnbWluaW11bSBtaW5pbmcgbWludXMgbWludXRlIG1pbnZhbHVlIG1pc3NpbmcgbW9kIG1vZGUgbW9kZWwgbW9kaWZpY2F0aW9uIG1vZGlmeSBtb2R1bGUgbW9uaXRvcmluZyBtb250aCAnICtcbiAgICAgICAgICAgICdtb250aHMgbW91bnQgbW92ZSBtb3ZlbWVudCBtdWx0aXNldCBtdXRleCBuYW1lIG5hbWVfY29uc3QgbmFtZXMgbmFuIG5hdGlvbmFsIG5hdGl2ZSBuYXR1cmFsIG5hdiBuY2hhciAnICtcbiAgICAgICAgICAgICduY2xvYiBuZXN0ZWQgbmV2ZXIgbmV3IG5ld2xpbmUgbmV4dCBuZXh0dmFsIG5vIG5vX3dyaXRlX3RvX2JpbmxvZyBub2FyY2hpdmVsb2cgbm9hdWRpdCBub2JhZGZpbGUgJyArXG4gICAgICAgICAgICAnbm9jaGVjayBub2NvbXByZXNzIG5vY29weSBub2N5Y2xlIG5vZGVsYXkgbm9kaXNjYXJkZmlsZSBub2VudGl0eWVzY2FwaW5nIG5vZ3VhcmFudGVlIG5va2VlcCBub2xvZ2ZpbGUgJyArXG4gICAgICAgICAgICAnbm9tYXBwaW5nIG5vbWF4dmFsdWUgbm9taW5pbWl6ZSBub21pbnZhbHVlIG5vbW9uaXRvcmluZyBub25lIG5vbmVkaXRpb25hYmxlIG5vbnNjaGVtYSBub29yZGVyICcgK1xuICAgICAgICAgICAgJ25vcHIgbm9wcm8gbm9wcm9tIG5vcHJvbXAgbm9wcm9tcHQgbm9yZWx5IG5vcmVzZXRsb2dzIG5vcmV2ZXJzZSBub3JtYWwgbm9yb3dkZXBlbmRlbmNpZXMgbm9zY2hlbWFjaGVjayAnICtcbiAgICAgICAgICAgICdub3N3aXRjaCBub3Qgbm90aGluZyBub3RpY2Ugbm90cmltIG5vdmFsaWRhdGUgbm93IG5vd2FpdCBudGhfdmFsdWUgbnVsbGlmIG51bGxzIG51bSBudW1iIG51bWJlICcgK1xuICAgICAgICAgICAgJ252YXJjaGFyIG52YXJjaGFyMiBvYmplY3Qgb2NpY29sbCBvY2lkYXRlIG9jaWRhdGV0aW1lIG9jaWR1cmF0aW9uIG9jaWludGVydmFsIG9jaWxvYmxvY2F0b3Igb2NpbnVtYmVyICcgK1xuICAgICAgICAgICAgJ29jaXJlZiBvY2lyZWZjdXJzb3Igb2Npcm93aWQgb2Npc3RyaW5nIG9jaXR5cGUgb2N0IG9jdGV0X2xlbmd0aCBvZiBvZmYgb2ZmbGluZSBvZmZzZXQgb2lkIG9pZGluZGV4IG9sZCAnICtcbiAgICAgICAgICAgICdvbiBvbmxpbmUgb25seSBvcGFxdWUgb3BlbiBvcGVyYXRpb25zIG9wZXJhdG9yIG9wdGltYWwgb3B0aW1pemUgb3B0aW9uIG9wdGlvbmFsbHkgb3Igb3JhY2xlIG9yYWNsZV9kYXRlICcgK1xuICAgICAgICAgICAgJ29yYWRhdGEgb3JkIG9yZGF1ZGlvIG9yZGRpY29tIG9yZGRvYyBvcmRlciBvcmRpbWFnZSBvcmRpbmFsaXR5IG9yZHZpZGVvIG9yZ2FuaXphdGlvbiBvcmxhbnkgb3JsdmFyeSAnICtcbiAgICAgICAgICAgICdvdXQgb3V0ZXIgb3V0ZmlsZSBvdXRsaW5lIG91dHB1dCBvdmVyIG92ZXJmbG93IG92ZXJyaWRpbmcgcGFja2FnZSBwYWQgcGFyYWxsZWwgcGFyYWxsZWxfZW5hYmxlICcgK1xuICAgICAgICAgICAgJ3BhcmFtZXRlcnMgcGFyZW50IHBhcnNlIHBhcnRpYWwgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzY2FsIHBhc3NpbmcgcGFzc3dvcmQgcGFzc3dvcmRfZ3JhY2VfdGltZSAnICtcbiAgICAgICAgICAgICdwYXNzd29yZF9sb2NrX3RpbWUgcGFzc3dvcmRfcmV1c2VfbWF4IHBhc3N3b3JkX3JldXNlX3RpbWUgcGFzc3dvcmRfdmVyaWZ5X2Z1bmN0aW9uIHBhdGNoIHBhdGggcGF0aW5kZXggJyArXG4gICAgICAgICAgICAncGN0aW5jcmVhc2UgcGN0dGhyZXNob2xkIHBjdHVzZWQgcGN0dmVyc2lvbiBwZXJjZW50IHBlcmNlbnRfcmFuayBwZXJjZW50aWxlX2NvbnQgcGVyY2VudGlsZV9kaXNjICcgK1xuICAgICAgICAgICAgJ3BlcmZvcm1hbmNlIHBlcmlvZCBwZXJpb2RfYWRkIHBlcmlvZF9kaWZmIHBlcm1hbmVudCBwaHlzaWNhbCBwaSBwaXBlIHBpcGVsaW5lZCBwaXZvdCBwbHVnZ2FibGUgcGx1Z2luICcgK1xuICAgICAgICAgICAgJ3BvbGljeSBwb3NpdGlvbiBwb3N0X3RyYW5zYWN0aW9uIHBvdyBwb3dlciBwcmFnbWEgcHJlYnVpbHQgcHJlY2VkZXMgcHJlY2VkaW5nIHByZWNpc2lvbiBwcmVkaWN0aW9uICcgK1xuICAgICAgICAgICAgJ3ByZWRpY3Rpb25fY29zdCBwcmVkaWN0aW9uX2RldGFpbHMgcHJlZGljdGlvbl9wcm9iYWJpbGl0eSBwcmVkaWN0aW9uX3NldCBwcmVwYXJlIHByZXNlbnQgcHJlc2VydmUgJyArXG4gICAgICAgICAgICAncHJpb3IgcHJpb3JpdHkgcHJpdmF0ZSBwcml2YXRlX3NnYSBwcml2aWxlZ2VzIHByb2NlZHVyYWwgcHJvY2VkdXJlIHByb2NlZHVyZV9hbmFseXplIHByb2Nlc3NsaXN0ICcgK1xuICAgICAgICAgICAgJ3Byb2ZpbGVzIHByb2plY3QgcHJvbXB0IHByb3RlY3Rpb24gcHVibGljIHB1Ymxpc2hpbmdzZXJ2ZXJuYW1lIHB1cmdlIHF1YXJ0ZXIgcXVlcnkgcXVpY2sgcXVpZXNjZSBxdW90YSAnICtcbiAgICAgICAgICAgICdxdW90ZW5hbWUgcmFkaWFucyByYWlzZSByYW5kIHJhbmdlIHJhbmsgcmF3IHJlYWQgcmVhZHMgcmVhZHNpemUgcmVidWlsZCByZWNvcmQgcmVjb3JkcyAnICtcbiAgICAgICAgICAgICdyZWNvdmVyIHJlY292ZXJ5IHJlY3Vyc2l2ZSByZWN5Y2xlIHJlZG8gcmVkdWNlZCByZWYgcmVmZXJlbmNlIHJlZmVyZW5jZWQgcmVmZXJlbmNlcyByZWZlcmVuY2luZyByZWZyZXNoICcgK1xuICAgICAgICAgICAgJ3JlZ2V4cF9saWtlIHJlZ2lzdGVyIHJlZ3JfYXZneCByZWdyX2F2Z3kgcmVncl9jb3VudCByZWdyX2ludGVyY2VwdCByZWdyX3IyIHJlZ3Jfc2xvcGUgcmVncl9zeHggcmVncl9zeHkgJyArXG4gICAgICAgICAgICAncmVqZWN0IHJla2V5IHJlbGF0aW9uYWwgcmVsYXRpdmUgcmVsYXlsb2cgcmVsZWFzZSByZWxlYXNlX2xvY2sgcmVsaWVzX29uIHJlbG9jYXRlIHJlbHkgcmVtIHJlbWFpbmRlciByZW5hbWUgJyArXG4gICAgICAgICAgICAncmVwYWlyIHJlcGVhdCByZXBsYWNlIHJlcGxpY2F0ZSByZXBsaWNhdGlvbiByZXF1aXJlZCByZXNldCByZXNldGxvZ3MgcmVzaXplIHJlc291cmNlIHJlc3BlY3QgcmVzdG9yZSAnICtcbiAgICAgICAgICAgICdyZXN0cmljdGVkIHJlc3VsdCByZXN1bHRfY2FjaGUgcmVzdW1hYmxlIHJlc3VtZSByZXRlbnRpb24gcmV0dXJuIHJldHVybmluZyByZXR1cm5zIHJldXNlIHJldmVyc2UgcmV2b2tlICcgK1xuICAgICAgICAgICAgJ3JpZ2h0IHJsaWtlIHJvbGUgcm9sZXMgcm9sbGJhY2sgcm9sbGluZyByb2xsdXAgcm91bmQgcm93IHJvd19jb3VudCByb3dkZXBlbmRlbmNpZXMgcm93aWQgcm93bnVtIHJvd3MgJyArXG4gICAgICAgICAgICAncnRyaW0gcnVsZXMgc2FmZSBzYWx0IHNhbXBsZSBzYXZlIHNhdmVwb2ludCBzYjEgc2IyIHNiNCBzY2FuIHNjaGVtYSBzY2hlbWFjaGVjayBzY24gc2NvcGUgc2Nyb2xsICcgK1xuICAgICAgICAgICAgJ3Nkb19nZW9yYXN0ZXIgc2RvX3RvcG9fZ2VvbWV0cnkgc2VhcmNoIHNlY190b190aW1lIHNlY29uZCBzZWN0aW9uIHNlY3VyZWZpbGUgc2VjdXJpdHkgc2VlZCBzZWdtZW50IHNlbGVjdCAnICtcbiAgICAgICAgICAgICdzZWxmIHNlcXVlbmNlIHNlcXVlbnRpYWwgc2VyaWFsaXphYmxlIHNlcnZlciBzZXJ2ZXJlcnJvciBzZXNzaW9uIHNlc3Npb25fdXNlciBzZXNzaW9uc19wZXJfdXNlciBzZXQgJyArXG4gICAgICAgICAgICAnc2V0cyBzZXR0aW5ncyBzaGEgc2hhMSBzaGEyIHNoYXJlIHNoYXJlZCBzaGFyZWRfcG9vbCBzaG9ydCBzaG93IHNocmluayBzaHV0ZG93biBzaV9hdmVyYWdlY29sb3IgJyArXG4gICAgICAgICAgICAnc2lfY29sb3JoaXN0b2dyYW0gc2lfZmVhdHVyZWxpc3Qgc2lfcG9zaXRpb25hbGNvbG9yIHNpX3N0aWxsaW1hZ2Ugc2lfdGV4dHVyZSBzaWJsaW5ncyBzaWQgc2lnbiBzaW4gJyArXG4gICAgICAgICAgICAnc2l6ZSBzaXplX3Qgc2l6ZXMgc2tpcCBzbGF2ZSBzbGVlcCBzbWFsbGRhdGV0aW1lZnJvbXBhcnRzIHNtYWxsZmlsZSBzbmFwc2hvdCBzb21lIHNvbmFtZSBzb3J0IHNvdW5kZXggJyArXG4gICAgICAgICAgICAnc291cmNlIHNwYWNlIHNwYXJzZSBzcGZpbGUgc3BsaXQgc3FsIHNxbF9iaWdfcmVzdWx0IHNxbF9idWZmZXJfcmVzdWx0IHNxbF9jYWNoZSBzcWxfY2FsY19mb3VuZF9yb3dzICcgK1xuICAgICAgICAgICAgJ3NxbF9zbWFsbF9yZXN1bHQgc3FsX3ZhcmlhbnRfcHJvcGVydHkgc3FsY29kZSBzcWxkYXRhIHNxbGVycm9yIHNxbG5hbWUgc3Fsc3RhdGUgc3FydCBzcXVhcmUgc3RhbmRhbG9uZSAnICtcbiAgICAgICAgICAgICdzdGFuZGJ5IHN0YXJ0IHN0YXJ0aW5nIHN0YXJ0dXAgc3RhdGVtZW50IHN0YXRpYyBzdGF0aXN0aWNzIHN0YXRzX2Jpbm9taWFsX3Rlc3Qgc3RhdHNfY3Jvc3N0YWIgJyArXG4gICAgICAgICAgICAnc3RhdHNfa3NfdGVzdCBzdGF0c19tb2RlIHN0YXRzX213X3Rlc3Qgc3RhdHNfb25lX3dheV9hbm92YSBzdGF0c190X3Rlc3RfIHN0YXRzX3RfdGVzdF9pbmRlcCAnICtcbiAgICAgICAgICAgICdzdGF0c190X3Rlc3Rfb25lIHN0YXRzX3RfdGVzdF9wYWlyZWQgc3RhdHNfd3NyX3Rlc3Qgc3RhdHVzIHN0ZCBzdGRkZXYgc3RkZGV2X3BvcCBzdGRkZXZfc2FtcCBzdGRldiAnICtcbiAgICAgICAgICAgICdzdG9wIHN0b3JhZ2Ugc3RvcmUgc3RvcmVkIHN0ciBzdHJfdG9fZGF0ZSBzdHJhaWdodF9qb2luIHN0cmNtcCBzdHJpY3Qgc3RyaW5nIHN0cnVjdCBzdHVmZiBzdHlsZSBzdWJkYXRlICcgK1xuICAgICAgICAgICAgJ3N1YnBhcnRpdGlvbiBzdWJwYXJ0aXRpb25zIHN1YnN0aXR1dGFibGUgc3Vic3RyIHN1YnN0cmluZyBzdWJ0aW1lIHN1YnRyaW5nX2luZGV4IHN1YnR5cGUgc3VjY2VzcyBzdW0gJyArXG4gICAgICAgICAgICAnc3VzcGVuZCBzd2l0Y2ggc3dpdGNob2Zmc2V0IHN3aXRjaG92ZXIgc3luYyBzeW5jaHJvbm91cyBzeW5vbnltIHN5cyBzeXNfeG1sYWdnIHN5c2FzbSBzeXNhdXggc3lzZGF0ZSAnICtcbiAgICAgICAgICAgICdzeXNkYXRldGltZW9mZnNldCBzeXNkYmEgc3lzb3BlciBzeXN0ZW0gc3lzdGVtX3VzZXIgc3lzdXRjZGF0ZXRpbWUgdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFuIHRkbyAnICtcbiAgICAgICAgICAgICd0ZW1wbGF0ZSB0ZW1wb3JhcnkgdGVybWluYXRlZCB0ZXJ0aWFyeV93ZWlnaHRzIHRlc3QgdGhhbiB0aGVuIHRocmVhZCB0aHJvdWdoIHRpZXIgdGllcyB0aW1lIHRpbWVfZm9ybWF0ICcgK1xuICAgICAgICAgICAgJ3RpbWVfem9uZSB0aW1lZGlmZiB0aW1lZnJvbXBhcnRzIHRpbWVvdXQgdGltZXN0YW1wIHRpbWVzdGFtcGFkZCB0aW1lc3RhbXBkaWZmIHRpbWV6b25lX2FiYnIgJyArXG4gICAgICAgICAgICAndGltZXpvbmVfbWludXRlIHRpbWV6b25lX3JlZ2lvbiB0byB0b19iYXNlNjQgdG9fZGF0ZSB0b19kYXlzIHRvX3NlY29uZHMgdG9kYXRldGltZW9mZnNldCB0cmFjZSB0cmFja2luZyAnICtcbiAgICAgICAgICAgICd0cmFuc2FjdGlvbiB0cmFuc2FjdGlvbmFsIHRyYW5zbGF0ZSB0cmFuc2xhdGlvbiB0cmVhdCB0cmlnZ2VyIHRyaWdnZXJfbmVzdGxldmVsIHRyaWdnZXJzIHRyaW0gdHJ1bmNhdGUgJyArXG4gICAgICAgICAgICAndHJ5X2Nhc3QgdHJ5X2NvbnZlcnQgdHJ5X3BhcnNlIHR5cGUgdWIxIHViMiB1YjQgdWNhc2UgdW5hcmNoaXZlZCB1bmJvdW5kZWQgdW5jb21wcmVzcyAnICtcbiAgICAgICAgICAgICd1bmRlciB1bmRvIHVuaGV4IHVuaWNvZGUgdW5pZm9ybSB1bmluc3RhbGwgdW5pb24gdW5pcXVlIHVuaXhfdGltZXN0YW1wIHVua25vd24gdW5saW1pdGVkIHVubG9jayB1bnBpdm90ICcgK1xuICAgICAgICAgICAgJ3VucmVjb3ZlcmFibGUgdW5zYWZlIHVuc2lnbmVkIHVudGlsIHVudHJ1c3RlZCB1bnVzYWJsZSB1bnVzZWQgdXBkYXRlIHVwZGF0ZWQgdXBncmFkZSB1cHBlZCB1cHBlciB1cHNlcnQgJyArXG4gICAgICAgICAgICAndXJsIHVyb3dpZCB1c2FibGUgdXNhZ2UgdXNlIHVzZV9zdG9yZWRfb3V0bGluZXMgdXNlciB1c2VyX2RhdGEgdXNlcl9yZXNvdXJjZXMgdXNlcnMgdXNpbmcgdXRjX2RhdGUgJyArXG4gICAgICAgICAgICAndXRjX3RpbWVzdGFtcCB1dWlkIHV1aWRfc2hvcnQgdmFsaWRhdGUgdmFsaWRhdGVfcGFzc3dvcmRfc3RyZW5ndGggdmFsaWRhdGlvbiB2YWxpc3QgdmFsdWUgdmFsdWVzIHZhciAnICtcbiAgICAgICAgICAgICd2YXJfc2FtcCB2YXJjaGFyYyB2YXJpIHZhcmlhIHZhcmlhYiB2YXJpYWJsIHZhcmlhYmxlIHZhcmlhYmxlcyB2YXJpYW5jZSB2YXJwIHZhcnJhdyB2YXJyYXdjIHZhcnJheSAnICtcbiAgICAgICAgICAgICd2ZXJpZnkgdmVyc2lvbiB2ZXJzaW9ucyB2aWV3IHZpcnR1YWwgdmlzaWJsZSB2b2lkIHdhaXQgd2FsbGV0IHdhcm5pbmcgd2FybmluZ3Mgd2VlayB3ZWVrZGF5IHdlZWtvZnllYXIgJyArXG4gICAgICAgICAgICAnd2VsbGZvcm1lZCB3aGVuIHdoZW5lIHdoZW5ldiB3aGVuZXZlIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdoaXRlc3BhY2Ugd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyYXBwZWQgJyArXG4gICAgICAgICAgICAneGRiIHhtbCB4bWxhZ2cgeG1sYXR0cmlidXRlcyB4bWxjYXN0IHhtbGNvbGF0dHZhbCB4bWxlbGVtZW50IHhtbGV4aXN0cyB4bWxmb3Jlc3QgeG1saW5kZXggeG1sbmFtZXNwYWNlcyAnICtcbiAgICAgICAgICAgICd4bWxwaSB4bWxxdWVyeSB4bWxyb290IHhtbHNjaGVtYSB4bWxzZXJpYWxpemUgeG1sdGFibGUgeG1sdHlwZSB4b3IgeWVhciB5ZWFyX3RvX21vbnRoIHllYXJzIHllYXJ3ZWVrJyxcbiAgICAgICAgICBsaXRlcmFsOlxuICAgICAgICAgICAgJ3RydWUgZmFsc2UgbnVsbCcsXG4gICAgICAgICAgYnVpbHRfaW46XG4gICAgICAgICAgICAnYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sZWFuIGNoYXIgY2hhcmFjdGVyIGRhdGUgZGVjIGRlY2ltYWwgZmxvYXQgaW50IGludDggaW50ZWdlciBpbnRlcnZhbCBudW1iZXIgJyArXG4gICAgICAgICAgICAnbnVtZXJpYyByZWFsIHJlY29yZCBzZXJpYWwgc2VyaWFsOCBzbWFsbGludCB0ZXh0IHZhcmNoYXIgdmFyeWluZyB2b2lkJ1xuICAgICAgICB9LFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcJycsIGVuZDogJ1xcJycsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRSwge2JlZ2luOiAnXFwnXFwnJ31dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdcIicsIGVuZDogJ1wiJyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFLCB7YmVnaW46ICdcIlwiJ31dXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgYmVnaW46ICdgJywgZW5kOiAnYCcsXG4gICAgICAgICAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIENPTU1FTlRfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIENPTU1FTlRfTU9ERVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBiZWdpbjogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFLFxuICAgICAgICBsZXhlbWVzOiBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICAgIGtleXdvcmRzOiB7XG4gICAgICAgICAgLy8gU3RhbidzIGtleXdvcmRzXG4gICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICdmb3IgaW4gd2hpbGUgcmVwZWF0IHVudGlsIGlmIHRoZW4gZWxzZScsXG4gICAgICAgICAgLy8gU3RhbidzIHByb2JhYmxpdHkgZGlzdHJpYnV0aW9ucyAobGVzcyBiZXRhIGFuZCBnYW1tYSwgYXMgY29tbW9ubHlcbiAgICAgICAgICAvLyB1c2VkIGZvciBwYXJhbWV0ZXIgbmFtZXMpLiBTbyBmYXIsIF9sb2cgYW5kIF9ybmcgdmFyaWFudHMgYXJlIG5vdFxuICAgICAgICAgIC8vIGluY2x1ZGVkXG4gICAgICAgICAgc3ltYm9sOlxuICAgICAgICAgICAgJ2Jlcm5vdWxsaSBiZXJub3VsbGlfbG9naXQgYmlub21pYWwgYmlub21pYWxfbG9naXQgJyAgICAgICAgICAgICAgICtcbiAgICAgICAgICAgICdiZXRhX2Jpbm9taWFsIGh5cGVyZ2VvbWV0cmljIGNhdGVnb3JpY2FsIGNhdGVnb3JpY2FsX2xvZ2l0ICcgICAgICArXG4gICAgICAgICAgICAnb3JkZXJlZF9sb2dpc3RpYyBuZWdfYmlub21pYWwgbmVnX2Jpbm9taWFsXzIgJyAgICAgICAgICAgICAgICAgICAgK1xuICAgICAgICAgICAgJ25lZ19iaW5vbWlhbF8yX2xvZyBwb2lzc29uIHBvaXNzb25fbG9nIG11bHRpbm9taWFsIG5vcm1hbCAnICAgICAgICtcbiAgICAgICAgICAgICdleHBfbW9kX25vcm1hbCBza2V3X25vcm1hbCBzdHVkZW50X3QgY2F1Y2h5IGRvdWJsZV9leHBvbmVudGlhbCAnICArXG4gICAgICAgICAgICAnbG9naXN0aWMgZ3VtYmVsIGxvZ25vcm1hbCBjaGlfc3F1YXJlIGludl9jaGlfc3F1YXJlICcgICAgICAgICAgICAgK1xuICAgICAgICAgICAgJ3NjYWxlZF9pbnZfY2hpX3NxdWFyZSBleHBvbmVudGlhbCBpbnZfZ2FtbWEgd2VpYnVsbCBmcmVjaGV0ICcgICAgICtcbiAgICAgICAgICAgICdyYXlsZWlnaCB3aWVuZXIgcGFyZXRvIHBhcmV0b190eXBlXzIgdm9uX21pc2VzIHVuaWZvcm0gJyAgICAgICAgICArXG4gICAgICAgICAgICAnbXVsdGlfbm9ybWFsIG11bHRpX25vcm1hbF9wcmVjIG11bHRpX25vcm1hbF9jaG9sZXNreSBtdWx0aV9ncCAnICAgK1xuICAgICAgICAgICAgJ211bHRpX2dwX2Nob2xlc2t5IG11bHRpX3N0dWRlbnRfdCBnYXVzc2lhbl9kbG1fb2JzIGRpcmljaGxldCAnICAgICtcbiAgICAgICAgICAgICdsa2pfY29yciBsa2pfY29ycl9jaG9sZXNreSB3aXNoYXJ0IGludl93aXNoYXJ0JyxcbiAgICAgICAgICAvLyBTdGFuJ3MgZGF0YSB0eXBlc1xuICAgICAgICAgICdzZWxlY3Rvci10YWcnOlxuICAgICAgICAgICAgJ2ludCByZWFsIHZlY3RvciBzaW1wbGV4IHVuaXRfdmVjdG9yIG9yZGVyZWQgcG9zaXRpdmVfb3JkZXJlZCAnICAgICtcbiAgICAgICAgICAgICdyb3dfdmVjdG9yIG1hdHJpeCBjaG9sZXNreV9mYWN0b3JfY29yciBjaG9sZXNreV9mYWN0b3JfY292ICcgICAgICArXG4gICAgICAgICAgICAnY29ycl9tYXRyaXggY292X21hdHJpeCcsXG4gICAgICAgICAgLy8gU3RhbidzIG1vZGVsIGJsb2Nrc1xuICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgJ2Z1bmN0aW9ucyBtb2RlbCBkYXRhIHBhcmFtZXRlcnMgcXVhbnRpdGllcyB0cmFuc2Zvcm1lZCAnICAgICAgICAgICtcbiAgICAgICAgICAgICdnZW5lcmF0ZWQnLFxuICAgICAgICAgIGxpdGVyYWw6XG4gICAgICAgICAgICAndHJ1ZSBmYWxzZSdcbiAgICAgICAgfSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAgLy8gVGhlIGJlbG93IGlzIGFsbCB0YWtlbiBmcm9tIHRoZSBSIGxhbmd1YWdlIGRlZmluaXRpb25cbiAgICAgIHtcbiAgICAgICAgLy8gaGV4IHZhbHVlXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIGhleCB2YWx1ZVxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCIwW3hYXVswLTlhLWZBLUZdK1tMaV0/XFxcXGJcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvLyBleHBsaWNpdCBpbnRlZ2VyXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBcIlxcXFxkKyg/OltlRV1bK1xcXFwtXT9cXFxcZCopP0xcXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlciB3aXRoIHRyYWlsaW5nIGRlY2ltYWxcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgYmVnaW46IFwiXFxcXGQrXFxcXC4oPyFcXFxcZCkoPzppXFxcXGIpP1wiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlclxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcZCsoPzpcXFxcLlxcXFxkKik/KD86W2VFXVsrXFxcXC1dP1xcXFxkKik/aT9cXFxcYlwiLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8vIG51bWJlciB3aXRoIGxlYWRpbmcgZGVjaW1hbFxuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogXCJcXFxcLlxcXFxkKyg/OltlRV1bK1xcXFwtXT9cXFxcZCopP2k/XFxcXGJcIixcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ2RvJywgJ2FkbyddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAga2V5d29yZHM6ICdpZiBlbHNlIGluIGZvcmVhY2ggZm9yIGZvcnYgZm9ydmEgZm9ydmFsIGZvcnZhbHUgZm9ydmFsdWUgZm9ydmFsdWVzIGJ5IGJ5cyBieXNvcnQgeGkgcXVpZXRseSBxdWkgY2FwdHVyZSBhYm91dCBhYyBhY183IGFjcHJwbG90IGFjcHJwbG90XzcgYWRqdXN0IGFkbyBhZG9wYXRoIGFkb3VwZGF0ZSBhbHBoYSBhbWVhbnMgYW4gYW5vIGFub3YgYW5vdmEgYW5vdmFfZXN0YXQgYW5vdmFfdGVybXMgYW5vdmFkZWYgYW9yZGVyIGFwIGFwcCBhcHBlIGFwcGVuIGFwcGVuZCBhcmNoIGFyY2hfZHIgYXJjaF9lc3RhdCBhcmNoX3AgYXJjaGxtIGFyZWcgYXJlZ19wIGFyZ3MgYXJpbWEgYXJpbWFfZHIgYXJpbWFfZXN0YXQgYXJpbWFfcCBhcyBhc21wcm9iaXQgYXNtcHJvYml0X2VzdGF0IGFzbXByb2JpdF9sZiBhc21wcm9iaXRfbWZ4X19kbGcgYXNtcHJvYml0X3AgYXNzIGFzc2UgYXNzZXIgYXNzZXJ0IGF2cGxvdCBhdnBsb3RfNyBhdnBsb3RzIGF2cGxvdHNfNyBiY3NrZXcwIGJnb2RmcmV5IGJpbnJlZyBiaXAwX2xmIGJpcGxvdCBiaXBwX2xmIGJpcHJfbGYgYmlwcl9wIGJpcHJvYml0IGJpdGVzdCBiaXRlc3RpIGJpdG93dCBibG9naXQgYm1lbXNpemUgYm9vdCBib290c2FtcCBib290c3RyYXAgYm9vdHN0cmFwXzggYm94Y29fbCBib3hjb19wIGJveGNveCBib3hjb3hfNiBib3hjb3hfcCBicHJvYml0IGJyIGJyZWFrIGJyaWVyIGJybyBicm93IGJyb3dzIGJyb3dzZSBicnIgYnJyc3RhdCBicyBic183IGJzYW1wbF93IGJzYW1wbGUgYnNhbXBsZV83IGJzcXJlZyBic3RhdCBic3RhdF83IGJzdGF0XzggYnN0cmFwIGJzdHJhcF83IGNhIGNhX2VzdGF0IGNhX3AgY2FiaXBsb3QgY2FtYXQgY2Fub24gY2Fub25fOCBjYW5vbl84X3AgY2Fub25fZXN0YXQgY2Fub25fcCBjYXAgY2Fwcm9qZWN0aW9uIGNhcHQgY2FwdHUgY2FwdHVyIGNhcHR1cmUgY2F0IGNjIGNjaGFydCBjY2hhcnRfNyBjY2kgY2QgY2Vuc29ic190YWJsZSBjZW50aWxlIGNmIGNoYXIgY2hkaXIgY2hlY2tkbGdmaWxlcyBjaGVja2VzdGltYXRpb25zYW1wbGUgY2hlY2tobHBmaWxlcyBjaGVja3N1bSBjaGVscCBjaSBjaWkgY2wgY2xhc3MgY2xhc3N1dGlsIGNsZWFyIGNsaSBjbGlzIGNsaXN0IGNsbyBjbG9nIGNsb2dfbGYgY2xvZ19wIGNsb2dpIGNsb2dpX3N3IGNsb2dpdCBjbG9naXRfbGYgY2xvZ2l0X3AgY2xvZ2l0cCBjbG9nbF9zdyBjbG9nbG9nIGNsb25ldmFyIGNsc2xpc3RhcnJheSBjbHVzdGVyIGNsdXN0ZXJfbWVhc3VyZXMgY2x1c3Rlcl9zdG9wIGNsdXN0ZXJfdHJlZSBjbHVzdGVyX3RyZWVfOCBjbHVzdGVybWF0IGNtZGxvZyBjbnIgY25yZSBjbnJlZyBjbnJlZ19wIGNucmVnX3N3IGNuc3JlZyBjb2RlYm9vayBjb2xsYXBzNCBjb2xsYXBzZSBjb2xvcm11bHRfbmIgY29sb3JtdWx0X253IGNvbXBhcmUgY29tcHJlc3MgY29uZiBjb25maSBjb25maXIgY29uZmlybSBjb25yZW4gY29ucyBjb25zdCBjb25zdHIgY29uc3RyYSBjb25zdHJhaSBjb25zdHJhaW4gY29uc3RyYWludCBjb250aW51ZSBjb250cmFjdCBjb3B5IGNvcHlyaWdodCBjb3B5c291cmNlIGNvciBjb3JjIGNvcnIgY29ycjJkYXRhIGNvcnJfYW50aSBjb3JyX2ttbyBjb3JyX3NtYyBjb3JyZSBjb3JyZWwgY29ycmVsYSBjb3JyZWxhdCBjb3JyZWxhdGUgY29ycmdyYW0gY291IGNvdW4gY291bnQgY294IGNveF9wIGNveF9zdyBjb3hiYXNlIGNveGhheiBjb3h2YXIgY3BycGxvdCBjcHJwbG90XzcgY3JjIGNyZXQgY3JldHUgY3JldHVyIGNyZXR1cm4gY3Jvc3MgY3MgY3NjcmlwdCBjc2NyaXB0X2xvZyBjc2kgY3QgY3RfaXMgY3RzZXQgY3RzdF81IGN0c3Rfc3QgY3R0b3N0IGN1bXNwIGN1bXNwXzcgY3VtdWwgY3VzdW0gY3VzdW1fNyBjdXRpbCBkfDAgZGF0YXNpZyBkYXRhc2lnbiBkYXRhc2lnbmEgZGF0YXNpZ25hdCBkYXRhc2lnbmF0dSBkYXRhc2lnbmF0dXIgZGF0YXNpZ25hdHVyZSBkYXRldG9mIGRiIGRiZXRhIGRlIGRlYyBkZWNvIGRlY29kIGRlY29kZSBkZWZmIGRlcyBkZXNjIGRlc2NyIGRlc2NyaSBkZXNjcmliIGRlc2NyaWJlIGRlc3RyaW5nIGRmYmV0YSBkZmdscyBkZnVsbGVyIGRpIGRpX2cgZGlyIGRpcnN0YXRzIGRpcyBkaXNjYXJkIGRpc3AgZGlzcF9yZXMgZGlzcF9zIGRpc3BsIGRpc3BsYSBkaXNwbGF5IGRpc3RpbmN0IGRvIGRvZSBkb2VkIGRvZWRpIGRvZWRpdCBkb3RwbG90IGRvdHBsb3RfNyBkcHJvYml0IGRyYXdub3JtIGRyb3AgZHMgZHNfdXRpbCBkc3RkaXplIGR1cGxpY2F0ZXMgZHVyYmluYSBkd3N0YXQgZHlkeCBlfDAgZWQgZWRpIGVkaXQgZWdlbiBlaXZyZWcgZW1kZWYgZW4gZW5jIGVuY28gZW5jb2QgZW5jb2RlIGVxIGVyYXNlIGVyZWcgZXJlZ19sZiBlcmVnX3AgZXJlZ19zdyBlcmVnaGV0IGVyZWdoZXRfZ2xmIGVyZWdoZXRfZ2xmX3NoIGVyZWdoZXRfZ3AgZXJlZ2hldF9pbGYgZXJlZ2hldF9pbGZfc2ggZXJlZ2hldF9pcCBlcmV0IGVyZXR1IGVyZXR1ciBlcmV0dXJuIGVyciBlcnJvIGVycm9yIGVzdCBlc3RfY2ZleGlzdCBlc3RfY2ZuYW1lIGVzdF9jbGlja2FibGUgZXN0X2V4cGFuZCBlc3RfaG9sZCBlc3RfdGFibGUgZXN0X3VuaG9sZCBlc3RfdW5ob2xkb2sgZXN0YXQgZXN0YXRfZGVmYXVsdCBlc3RhdF9zdW1tIGVzdGF0X3ZjZV9vbmx5IGVzdGkgZXN0aW1hdGVzIGV0b2RvdyBldG9mIGV0b21keSBleCBleGkgZXhpdCBleHBhbmQgZXhwYW5kY2wgZmFjIGZhY3QgZmFjdG8gZmFjdG9yIGZhY3Rvcl9lc3RhdCBmYWN0b3JfcCBmYWN0b3JfcGNhX3JvdGF0ZWQgZmFjdG9yX3JvdGF0ZSBmYWN0b3JtYXQgZmNhc3QgZmNhc3RfY29tcHV0ZSBmY2FzdF9ncmFwaCBmZGFkZXMgZmRhZGVzYyBmZGFkZXNjciBmZGFkZXNjcmkgZmRhZGVzY3JpYiBmZGFkZXNjcmliZSBmZGFzYXYgZmRhc2F2ZSBmZGF1c2UgZmhfc3QgZmlsZSBvcGVuIGZpbGUgcmVhZCBmaWxlIGNsb3NlIGZpbGUgZmlsZWZpbHRlciBmaWxsaW4gZmluZF9obHBfZmlsZSBmaW5kZmlsZSBmaW5kaXQgZmluZGl0XzcgZml0IGZsIGZsaSBmbGlzIGZsaXN0IGZvcjVfMCBmb3JtIGZvcm1hIGZvcm1hdCBmcHJlZGljdCBmcmFjXzE1NCBmcmFjX2FkaiBmcmFjX2NoayBmcmFjX2NveCBmcmFjX2RkcCBmcmFjX2RpcyBmcmFjX2R2IGZyYWNfaW4gZnJhY19tdW4gZnJhY19wcCBmcmFjX3BxIGZyYWNfcHYgZnJhY193Z3QgZnJhY194byBmcmFjZ2VuIGZyYWNwbG90IGZyYWNwbG90XzcgZnJhY3BvbHkgZnJhY3ByZWQgZnJvbl9leCBmcm9uX2huIGZyb25fcCBmcm9uX3RuIGZyb25fdG4yIGZyb250aWVyIGZ0b2RhdGUgZnRvZSBmdG9tZHkgZnRvd2RhdGUgZ3wwIGdhbWhldF9nbGYgZ2FtaGV0X2dwIGdhbWhldF9pbGYgZ2FtaGV0X2lwIGdhbW1hIGdhbW1hX2QyIGdhbW1hX3AgZ2FtbWFfc3cgZ2FtbWFoZXQgZ2RpX2hleGFnb24gZ2RpX3Nwb2tlcyBnZSBnZW4gZ2VuZSBnZW5lciBnZW5lcmEgZ2VuZXJhdCBnZW5lcmF0ZSBnZW5yYW5rIGdlbnN0ZCBnZW52bWVhbiBnZXR0b2tlbiBnbCBnbGFkZGVyIGdsYWRkZXJfNyBnbGltX2wwMSBnbGltX2wwMiBnbGltX2wwMyBnbGltX2wwNCBnbGltX2wwNSBnbGltX2wwNiBnbGltX2wwNyBnbGltX2wwOCBnbGltX2wwOSBnbGltX2wxMCBnbGltX2wxMSBnbGltX2wxMiBnbGltX2xmIGdsaW1fbXUgZ2xpbV9udzEgZ2xpbV9udzIgZ2xpbV9udzMgZ2xpbV9wIGdsaW1fdjEgZ2xpbV92MiBnbGltX3YzIGdsaW1fdjQgZ2xpbV92NSBnbGltX3Y2IGdsaW1fdjcgZ2xtIGdsbV82IGdsbV9wIGdsbV9zdyBnbG1wcmVkIGdsbyBnbG9iIGdsb2JhIGdsb2JhbCBnbG9naXQgZ2xvZ2l0XzggZ2xvZ2l0X3AgZ21lYW5zIGduYnJlX2xmIGduYnJlZyBnbmJyZWdfNSBnbmJyZWdfcCBnb21wX2xmIGdvbXBlX3N3IGdvbXBlcl9wIGdvbXBlcnR6IGdvbXBlcnR6aGV0IGdvbXBoZXRfZ2xmIGdvbXBoZXRfZ2xmX3NoIGdvbXBoZXRfZ3AgZ29tcGhldF9pbGYgZ29tcGhldF9pbGZfc2ggZ29tcGhldF9pcCBncGhkb3QgZ3BocGVuIGdwaHByaW50IGdwcmVmcyBncHJvYmlfcCBncHJvYml0IGdwcm9iaXRfOCBnciBncjcgZ3JfY29weSBncl9jdXJyZW50IGdyX2RiIGdyX2Rlc2NyaWJlIGdyX2RpciBncl9kcmF3IGdyX2RyYXdfcmVwbGF5IGdyX2Ryb3AgZ3JfZWRpdCBncl9lZGl0dmlld29wdHMgZ3JfZXhhbXBsZSBncl9leGFtcGxlMiBncl9leHBvcnQgZ3JfcHJpbnQgZ3JfcXNjaGVtZSBncl9xdWVyeSBncl9yZWFkIGdyX3JlbmFtZSBncl9yZXBsYXkgZ3Jfc2F2ZSBncl9zZXQgZ3Jfc2V0c2NoZW1lIGdyX3RhYmxlIGdyX3VuZG8gZ3JfdXNlIGdyYXBoIGdyYXBoNyBncmViYXIgZ3JlaWdlbiBncmVpZ2VuXzcgZ3JlaWdlbl84IGdybWVhbmJ5IGdybWVhbmJ5XzcgZ3NfZmlsZWluZm8gZ3NfZmlsZXR5cGUgZ3NfZ3JhcGhpbmZvIGdzX3N0YXQgZ3NvcnQgZ3dvb2QgaHwwIGhhZGltdm8gaGFyZWcgaGF1c21hbiBoYXZlciBoZSBoZWNrX2QyIGhlY2ttYV9wIGhlY2ttYW4gaGVja3BfbGYgaGVja3ByX3AgaGVja3Byb2IgaGVsIGhlbHAgaGVyZWcgaGV0cHJfbGYgaGV0cHJfcCBoZXRwcm9iIGhldHRlc3QgaGV4ZHVtcCBoaWxpdGUgaGlzdCBoaXN0XzcgaGlzdG9ncmFtIGhsb2dpdCBobHUgaG1lYW5zIGhvdGVsIGhvdGVsbGluZyBocHJvYml0IGhyZWcgaHNlYXJjaCBpY2Q5IGljZDlfZmYgaWNkOXAgaWlzIGltcHV0ZSBpbXRlc3QgaW5iYXNlIGluY2x1ZGUgaW5mIGluZmkgaW5maWwgaW5maWxlIGluZml4IGlucCBpbnB1IGlucHV0IGlucyBpbnNoZWV0IGluc3AgaW5zcGUgaW5zcGVjIGluc3BlY3QgaW50ZWcgaW50ZW4gaW50cmVnIGludHJlZ183IGludHJlZ19wIGludHJnMl9sbCBpbnRyZ19sbCBpbnRyZ19sbDIgaXBvbGF0ZSBpcXJlZyBpciBpcmYgaXJmX2NyZWF0ZSBpcmZtIGlyaSBpc19zdnkgaXNfc3Z5c3VtIGlzaWQgaXN0ZGl6ZSBpdnByb2JfMV9sZiBpdnByb2JfbGYgaXZwcm9iaXQgaXZwcm9iaXRfcCBpdnJlZyBpdnJlZ19mb290bm90ZSBpdnRvYl8xX2xmIGl2dG9iX2xmIGl2dG9iaXQgaXZ0b2JpdF9wIGphY2trbmlmZSBqYWNrbmlmZSBqa25pZmUgamtuaWZlXzYgamtuaWZlXzggamtzdGF0IGpvaW5ieSBrYWxhcm1hMSBrYXAga2FwXzMga2FwbWVpZXIga2FwcGEga2Fwd2d0IGtkZW5zaXR5IGtkZW5zaXR5Xzcga2VlcCBrc20ga3NtaXJub3Yga3RhdSBrd2FsbGlzIGx8MCBsYSBsYWIgbGFiZSBsYWJlbCBsYWJlbGJvb2sgbGFkZGVyIGxldmVscyBsZXZlbHNvZiBsZXZlcmFnZSBsZml0IGxmaXRfcCBsaSBsaW5jb20gbGluZSBsaW5rdGVzdCBsaXMgbGlzdCBsbG9naGV0X2dsZiBsbG9naGV0X2dsZl9zaCBsbG9naGV0X2dwIGxsb2doZXRfaWxmIGxsb2doZXRfaWxmX3NoIGxsb2doZXRfaXAgbGxvZ2lfc3cgbGxvZ2lzX3AgbGxvZ2lzdCBsbG9naXN0aWMgbGxvZ2lzdGljaGV0IGxub3JtX2xmIGxub3JtX3N3IGxub3JtYV9wIGxub3JtYWwgbG5vcm1hbGhldCBsbm9ybWhldF9nbGYgbG5vcm1oZXRfZ2xmX3NoIGxub3JtaGV0X2dwIGxub3JtaGV0X2lsZiBsbm9ybWhldF9pbGZfc2ggbG5vcm1oZXRfaXAgbG5za2V3MCBsb2FkaW5ncGxvdCBsb2MgbG9jYSBsb2NhbCBsb2cgbG9naSBsb2dpc19sZiBsb2dpc3RpYyBsb2dpc3RpY19wIGxvZ2l0IGxvZ2l0X2VzdGF0IGxvZ2l0X3AgbG9nbG9ncyBsb2dyYW5rIGxvbmV3YXkgbG9va2ZvciBsb29rdXAgbG93ZXNzIGxvd2Vzc183IGxwcmVkaWN0IGxyZWNvbXAgbHJvYyBscm9jXzcgbHJ0ZXN0IGxzIGxzZW5zIGxzZW5zXzcgbHNlbnNfeCBsc3RhdCBsdGFibGUgbHRhYmxlXzcgbHRyaWFuZyBsdiBsdnIycGxvdCBsdnIycGxvdF83IG18MCBtYSBtYWMgbWFjciBtYWNybyBtYWtlY25zIG1hbiBtYW5vdmEgbWFub3ZhX2VzdGF0IG1hbm92YV9wIG1hbm92YXRlc3QgbWFudGVsIG1hcmsgbWFya2luIG1hcmtvdXQgbWFya3NhbXBsZSBtYXQgbWF0X2NhcHAgbWF0X29yZGVyIG1hdF9wdXRfcnIgbWF0X3JhcHAgbWF0YSBtYXRhX2NsZWFyIG1hdGFfZGVzY3JpYmUgbWF0YV9kcm9wIG1hdGFfbWF0ZGVzY3JpYmUgbWF0YV9tYXRzYXZlIG1hdGFfbWF0dXNlIG1hdGFfbWVtb3J5IG1hdGFfbWxpYiBtYXRhX21vc2F2ZSBtYXRhX3JlbmFtZSBtYXRhX3doaWNoIG1hdGFsYWJlbCBtYXRjcHJvYyBtYXRsaXN0IG1hdG5hbWUgbWF0ciBtYXRyaSBtYXRyaXggbWF0cml4X2lucHV0X19kbGcgbWF0c3RyaWsgbWNjIG1jY2kgbWQwXyBtZDFfIG1kMWRlYnVnXyBtZDJfIG1kMmRlYnVnXyBtZHMgbWRzX2VzdGF0IG1kc19wIG1kc2NvbmZpZyBtZHNsb25nIG1kc21hdCBtZHNzaGVwYXJkIG1keXRvZSBtZHl0b2YgbWVfZGVyZCBtZWFuIG1lYW5zIG1lZGlhbiBtZW1vcnkgbWVtc2l6ZSBtZXFwYXJzZSBtZXIgbWVyZyBtZXJnZSBtZnAgbWZ4IG1oZWxwIG1ob2RkcyBtaW5ib3VuZCBtaXhlZF9sbCBtaXhlZF9sbF9yZXBhcm0gbWthc3NlcnQgbWtkaXIgbWttYXQgbWtzcGxpbmUgbWwgbWxfNSBtbF9hZGpzIG1sX2JoaGhzIG1sX2NfZCBtbF9jaGVjayBtbF9jbGVhciBtbF9jbnQgbWxfZGVidWcgbWxfZGVmZCBtbF9lMCBtbF9lMF9iZmdzIG1sX2UwX2N5Y2xlIG1sX2UwX2RmcCBtbF9lMGkgbWxfZTEgbWxfZTFfYmZncyBtbF9lMV9iaGhoIG1sX2UxX2N5Y2xlIG1sX2UxX2RmcCBtbF9lMiBtbF9lMl9jeWNsZSBtbF9lYmZnMCBtbF9lYmZyMCBtbF9lYmZyMSBtbF9lYmgwcSBtbF9lYmhoMCBtbF9lYmhyMCBtbF9lYnIwaSBtbF9lY3IwaSBtbF9lZGZwMCBtbF9lZGZyMCBtbF9lZGZyMSBtbF9lZHIwaSBtbF9lZHMgbWxfZWVyMGkgbWxfZWdyMGkgbWxfZWxmIG1sX2VsZl9iZmdzIG1sX2VsZl9iaGhoIG1sX2VsZl9jeWNsZSBtbF9lbGZfZGZwIG1sX2VsZmkgbWxfZWxmcyBtbF9lbnIwaSBtbF9lbnJyMCBtbF9lcmR1MCBtbF9lcmR1MF9iZmdzIG1sX2VyZHUwX2JoaGggbWxfZXJkdTBfYmhoaHEgbWxfZXJkdTBfY3ljbGUgbWxfZXJkdTBfZGZwIG1sX2VyZHUwX25yYmZncyBtbF9leGRlIG1sX2Zvb3Rub3RlIG1sX2dlcW5yIG1sX2dyYWQwIG1sX2dyYXBoIG1sX2hiaGhoIG1sX2hkMCBtbF9ob2xkIG1sX2luaXQgbWxfaW52IG1sX2xvZyBtbF9tYXggbWxfbWxvdXQgbWxfbWxvdXRfOCBtbF9tb2RlbCBtbF9uYjAgbWxfb3B0IG1sX3AgbWxfcGxvdCBtbF9xdWVyeSBtbF9yZGdyZCBtbF9yZXBvciBtbF9zX2UgbWxfc2NvcmUgbWxfc2VhcmMgbWxfdGVjaG5pcXVlIG1sX3VuaG9sZCBtbGV2YWwgbWxmXyBtbG1hdGJ5c3VtIG1sbWF0c3VtIG1sb2cgbWxvZ2kgbWxvZ2l0IG1sb2dpdF9mb290bm90ZSBtbG9naXRfcCBtbG9wdHMgbWxzdW0gbWx2ZWNzdW0gbW5sMF8gbW9yIG1vcmUgbW92IG1vdmUgbXByb2JpdCBtcHJvYml0X2xmIG1wcm9iaXRfcCBtcmR1MF8gbXJkdTFfIG12ZGVjb2RlIG12ZW5jb2RlIG12cmVnIG12cmVnX2VzdGF0IG58MCBuYnJlZyBuYnJlZ19hbCBuYnJlZ19sZiBuYnJlZ19wIG5icmVnX3N3IG5lc3RyZWcgbmV0IG5ld2V5IG5ld2V5XzcgbmV3ZXlfcCBuZXdzIG5sIG5sXzcgbmxfOSBubF85X3AgbmxfcCBubF9wXzcgbmxjb20gbmxjb21fcCBubGV4cDIgbmxleHAyXzcgbmxleHAyYSBubGV4cDJhXzcgbmxleHAzIG5sZXhwM183IG5sZ29tMyBubGdvbTNfNyBubGdvbTQgbmxnb200Xzcgbmxpbml0IG5sbG9nMyBubGxvZzNfNyBubGxvZzQgbmxsb2c0XzcgbmxvZ19yZCBubG9naXQgbmxvZ2l0X3AgbmxvZ2l0Z2VuIG5sb2dpdHRyZWUgbmxwcmVkIG5vIG5vYnJlYWsgbm9pIG5vaXMgbm9pc2kgbm9pc2lsIG5vaXNpbHkgbm90ZSBub3RlcyBub3Rlc19kbGcgbnB0cmVuZCBudW1sYWJlbCBudW1saXN0IG9kYmMgb2xkX3ZlciBvbG8gb2xvZyBvbG9naSBvbG9naV9zdyBvbG9naXQgb2xvZ2l0X3Agb2xvZ2l0cCBvbiBvbmUgb25ldyBvbmV3YSBvbmV3YXkgb3BfY29sbm0gb3BfY29tcCBvcF9kaWZmIG9wX2ludiBvcF9zdHIgb3ByIG9wcm8gb3Byb2Igb3Byb2Jfc3cgb3Byb2JpIG9wcm9iaV9wIG9wcm9iaXQgb3Byb2JpdHAgb3B0c19leGNsdXNpdmUgb3JkZXIgb3J0aG9nIG9ydGhwb2x5IG91IG91dCBvdXRmIG91dGZpIG91dGZpbCBvdXRmaWxlIG91dHMgb3V0c2ggb3V0c2hlIG91dHNoZWUgb3V0c2hlZXQgb3Z0ZXN0IHBhYyBwYWNfNyBwYWxldHRlIHBhcnNlIHBhcnNlX2Rpc3NpbSBwYXVzZSBwY2EgcGNhXzggcGNhX2Rpc3BsYXkgcGNhX2VzdGF0IHBjYV9wIHBjYV9yb3RhdGUgcGNhbWF0IHBjaGFydCBwY2hhcnRfNyBwY2hpIHBjaGlfNyBwY29yciBwY3RpbGUgcGVudGl1bSBwZXJncmFtIHBlcmdyYW1fNyBwZXJtdXRlIHBlcm11dGVfOCBwZXJzb25hbCBwZXRvX3N0IHBrY29sbGFwc2UgcGtjcm9zcyBwa2VxdWl2IHBrZXhhbWluZSBwa2V4YW1pbmVfNyBwa3NoYXBlIHBrc3VtbSBwa3N1bW1fNyBwbCBwbG8gcGxvdCBwbHVnaW4gcG5vcm0gcG5vcm1fNyBwb2lzZ29mIHBvaXNzX2xmIHBvaXNzX3N3IHBvaXNzb19wIHBvaXNzb24gcG9pc3Nvbl9lc3RhdCBwb3N0IHBvc3RjbG9zZSBwb3N0ZmlsZSBwb3N0dXRpbCBwcGVycm9uIHByIHByYWlzIHByYWlzX2UgcHJhaXNfZTIgcHJhaXNfcCBwcmVkaWN0IHByZWRpY3RubCBwcmVzZXJ2ZSBwcmludCBwcm8gcHJvYiBwcm9iaSBwcm9iaXQgcHJvYml0X2VzdGF0IHByb2JpdF9wIHByb2NfdGltZSBwcm9jb3ZlcmxheSBwcm9jcnVzdGVzIHByb2NydXN0ZXNfZXN0YXQgcHJvY3J1c3Rlc19wIHByb2ZpbGVyIHByb2cgcHJvZ3IgcHJvZ3JhIHByb2dyYW0gcHJvcCBwcm9wb3J0aW9uIHBydGVzdCBwcnRlc3RpIHB3Y29yciBwd2QgcVxcXFxzIHFieSBxYnlzIHFjaGkgcWNoaV83IHFsYWRkZXIgcWxhZGRlcl83IHFub3JtIHFub3JtXzcgcXFwbG90IHFxcGxvdF83IHFyZWcgcXJlZ19jIHFyZWdfcCBxcmVnX3N3IHF1IHF1YWRjaGsgcXVhbnRpbGUgcXVhbnRpbGVfNyBxdWUgcXVlciBxdWVyeSByYW5nZSByYW5rc3VtIHJhdGlvIHJjaGFydCByY2hhcnRfNyByY29mIHJlY2FzdCByZWNsaW5rIHJlY29kZSByZWcgcmVnMyByZWczX3AgcmVnZHcgcmVnciByZWdyZSByZWdyZV9wMiByZWdyZXMgcmVncmVzX3AgcmVncmVzcyByZWdyZXNzX2VzdGF0IHJlZ3Jpdl9wIHJlbWFwIHJlbiByZW5hIHJlbmFtIHJlbmFtZSByZW5wZml4IHJlcGVhdCByZXBsYWNlIHJlcG9ydCByZXNoYXBlIHJlc3RvcmUgcmV0IHJldHUgcmV0dXIgcmV0dXJuIHJtIHJtZGlyIHJvYnZhciByb2Njb21wIHJvY2NvbXBfNyByb2Njb21wXzggcm9jZl9sZiByb2NmaXQgcm9jZml0Xzggcm9jZ29sZCByb2NwbG90IHJvY3Bsb3RfNyByb2N0YWIgcm9jdGFiXzcgcm9sbGluZyByb2xvZ2l0IHJvbG9naXRfcCByb3Qgcm90YSByb3RhdCByb3RhdGUgcm90YXRlbWF0IHJyZWcgcnJlZ19wIHJ1IHJ1biBydW50ZXN0IHJ2ZnBsb3QgcnZmcGxvdF83IHJ2cHBsb3QgcnZwcGxvdF83IHNhIHNhZmVzdW0gc2FtcGxlIHNhbXBzaSBzYXYgc2F2ZSBzYXZlZHJlc3VsdHMgc2F2ZW9sZCBzYyBzY2Egc2NhbCBzY2FsYSBzY2FsYXIgc2NhdHRlciBzY21fbWluZSBzY28gc2NvYl9sZiBzY29iX3Agc2NvYmlfc3cgc2NvYml0IHNjb3Igc2NvcmUgc2NvcmVwbG90IHNjb3JlcGxvdF9oZWxwIHNjcmVlIHNjcmVlcGxvdCBzY3JlZXBsb3RfaGVscCBzZHRlc3Qgc2R0ZXN0aSBzZSBzZWFyY2ggc2VwYXJhdGUgc2VwZXJhdGUgc2VycmJhciBzZXJyYmFyXzcgc2Vyc2V0IHNldCBzZXRfZGVmYXVsdHMgc2ZyYW5jaWEgc2ggc2hlIHNoZWwgc2hlbGwgc2hld2hhcnQgc2hld2hhcnRfNyBzaWduZXN0aW1hdGlvbnNhbXBsZSBzaWducmFuayBzaWdudGVzdCBzaW11bCBzaW11bF83IHNpbXVsYXRlIHNpbXVsYXRlXzggc2t0ZXN0IHNsZWVwIHNsb2dpdCBzbG9naXRfZDIgc2xvZ2l0X3Agc21vb3RoIHNuYXBzcGFuIHNvIHNvciBzb3J0IHNwZWFybWFuIHNwaWtlcGxvdCBzcGlrZXBsb3RfNyBzcGlrZXBsdCBzcGxpbmVfeCBzcGxpdCBzcXJlZyBzcXJlZ19wIHNyZXQgc3JldHUgc3JldHVyIHNyZXR1cm4gc3NjIHN0IHN0X2N0IHN0X2hjIHN0X2hjZCBzdF9oY2Rfc2ggc3RfaXMgc3RfaXNzeXMgc3Rfbm90ZSBzdF9wcm9tbyBzdF9zZXQgc3Rfc2hvdyBzdF9zbXBsIHN0X3N1YmlkIHN0YWNrIHN0YXRzYnkgc3RhdHNieV84IHN0YmFzZSBzdGNpIHN0Y2lfNyBzdGNveCBzdGNveF9lc3RhdCBzdGNveF9mciBzdGNveF9mcl9sbCBzdGNveF9wIHN0Y294X3N3IHN0Y294a20gc3Rjb3hrbV83IHN0Y3N0YXQgc3RjdXJ2IHN0Y3VydmUgc3RjdXJ2ZV83IHN0ZGVzIHN0ZW0gc3RlcHdpc2Ugc3RlcmVnIHN0ZmlsbCBzdGdlbiBzdGlyIHN0am9pbiBzdG1jIHN0bWggc3RwaHBsb3Qgc3RwaHBsb3RfNyBzdHBodGVzdCBzdHBodGVzdF83IHN0cHRpbWUgc3RyYXRlIHN0cmF0ZV83IHN0cmVnIHN0cmVnX3N3IHN0cmVzZXQgc3RzIHN0c183IHN0c2V0IHN0c3BsaXQgc3RzdW0gc3R0b2NjIHN0dG9jdCBzdHZhcnkgc3R3ZWliIHN1IHN1ZXN0IHN1ZXN0Xzggc3VtIHN1bW0gc3VtbWEgc3VtbWFyIHN1bW1hcmkgc3VtbWFyaXogc3VtbWFyaXplIHN1bmZsb3dlciBzdXJlZyBzdXJ2Y3VydiBzdXJ2c3VtIHN2YXIgc3Zhcl9wIHN2bWF0IHN2eSBzdnlfZGlzcCBzdnlfZHJlZyBzdnlfZXN0IHN2eV9lc3RfNyBzdnlfZXN0YXQgc3Z5X2dldCBzdnlfZ25icmVnX3Agc3Z5X2hlYWQgc3Z5X2hlYWRlciBzdnlfaGVja21hbl9wIHN2eV9oZWNrcHJvYl9wIHN2eV9pbnRyZWdfcCBzdnlfaXZyZWdfcCBzdnlfbG9naXN0aWNfcCBzdnlfbG9naXRfcCBzdnlfbWxvZ2l0X3Agc3Z5X25icmVnX3Agc3Z5X29sb2dpdF9wIHN2eV9vcHJvYml0X3Agc3Z5X3BvaXNzb25fcCBzdnlfcHJvYml0X3Agc3Z5X3JlZ3Jlc3NfcCBzdnlfc3ViIHN2eV9zdWJfNyBzdnlfeCBzdnlfeF83IHN2eV94X3Agc3Z5ZGVzIHN2eWRlc184IHN2eWdlbiBzdnlnbmJyZWcgc3Z5aGVja21hbiBzdnloZWNrcHJvYiBzdnlpbnRyZWcgc3Z5aW50cmVnXzcgc3Z5aW50cmcgc3Z5aXZyZWcgc3Z5bGMgc3Z5bG9nX3Agc3Z5bG9naXQgc3Z5bWFya291dCBzdnltYXJrb3V0Xzggc3Z5bWVhbiBzdnltbG9nIHN2eW1sb2dpdCBzdnluYnJlZyBzdnlvbG9nIHN2eW9sb2dpdCBzdnlvcHJvYiBzdnlvcHJvYml0IHN2eW9wdHMgc3Z5cG9pcyBzdnlwb2lzXzcgc3Z5cG9pc3NvbiBzdnlwcm9iaXQgc3Z5cHJvYnQgc3Z5cHJvcCBzdnlwcm9wXzcgc3Z5cmF0aW8gc3Z5cmVnIHN2eXJlZ19wIHN2eXJlZ3Jlc3Mgc3Z5c2V0IHN2eXNldF83IHN2eXNldF84IHN2eXRhYiBzdnl0YWJfNyBzdnl0ZXN0IHN2eXRvdGFsIHN3IHN3Xzggc3djbnJlZyBzd2NveCBzd2VyZWcgc3dpbGsgc3dsb2dpcyBzd2xvZ2l0IHN3b2xvZ2l0IHN3b3ByYnQgc3dwb2lzIHN3cHJvYml0IHN3cXJlZyBzd3RvYml0IHN3d2VpYiBzeW1tZXRyeSBzeW1taSBzeW1wbG90IHN5bXBsb3RfNyBzeW50YXggc3lzZGVzY3JpYmUgc3lzZGlyIHN5c3VzZSBzenJvZXRlciB0YSB0YWIgdGFiMSB0YWIyIHRhYl9vciB0YWJkIHRhYmRpIHRhYmRpcyB0YWJkaXNwIHRhYmkgdGFibGUgdGFib2RkcyB0YWJvZGRzXzcgdGFic3RhdCB0YWJ1IHRhYnVsIHRhYnVsYSB0YWJ1bGF0IHRhYnVsYXRlIHRlIHRlbXBmaWxlIHRlbXBuYW1lIHRlbXB2YXIgdGVzIHRlc3QgdGVzdG5sIHRlc3RwYXJtIHRlc3RzdGQgdGV0cmFjaG9yaWMgdGltZV9pdCB0aW1lciB0aXMgdG9iIHRvYmkgdG9iaXQgdG9iaXRfcCB0b2JpdF9zdyB0b2tlbiB0b2tlbmkgdG9rZW5peiB0b2tlbml6ZSB0b3N0cmluZyB0b3RhbCB0cmFuc2xhdGUgdHJhbnNsYXRvciB0cmFuc21hcCB0cmVhdF9sbCB0cmVhdHJfcCB0cmVhdHJlZyB0cmltIHRybmJfY29ucyB0cm5iX21lYW4gdHJwb2lzc19kMiB0cnVuY19sbCB0cnVuY3JfcCB0cnVuY3JlZyB0c2FwcGVuZCB0c2V0IHRzZmlsbCB0c2xpbmUgdHNsaW5lX2V4IHRzcmVwb3J0IHRzcmV2YXIgdHNybGluZSB0c3NldCB0c3Ntb290aCB0c3VuYWIgdHRlc3QgdHRlc3RpIHR1dF9jaGsgdHV0X3dhaXQgdHV0b3JpYWwgdHcgdHdhcmVfc3QgdHdvIHR3b3dheSB0d293YXlfX2ZwZml0X3NlcnNldCB0d293YXlfX2Z1bmN0aW9uX2dlbiB0d293YXlfX2hpc3RvZ3JhbV9nZW4gdHdvd2F5X19pcG9pbnRfc2Vyc2V0IHR3b3dheV9faXBvaW50c19zZXJzZXQgdHdvd2F5X19rZGVuc2l0eV9nZW4gdHdvd2F5X19sZml0X3NlcnNldCB0d293YXlfX25vcm1nZW5fZ2VuIHR3b3dheV9fcGNpX3NlcnNldCB0d293YXlfX3FmaXRfc2Vyc2V0IHR3b3dheV9fc2NhdHRlcmlfc2Vyc2V0IHR3b3dheV9fc3VuZmxvd2VyX2dlbiB0d293YXlfa3NtX3NlcnNldCB0eSB0eXAgdHlwZSB0eXBlb2YgdXwwIHVuYWIgdW5hYmJyZXYgdW5hYmNtZCB1cGRhdGUgdXMgdXNlIHVzZWxhYmVsIHZhciB2YXJfbWtjb21wYW5pb24gdmFyX3AgdmFyYmFzaWMgdmFyZmNhc3QgdmFyZ3JhbmdlciB2YXJpcmYgdmFyaXJmX2FkZCB2YXJpcmZfY2dyYXBoIHZhcmlyZl9jcmVhdGUgdmFyaXJmX2N0YWJsZSB2YXJpcmZfZGVzY3JpYmUgdmFyaXJmX2RpciB2YXJpcmZfZHJvcCB2YXJpcmZfZXJhc2UgdmFyaXJmX2dyYXBoIHZhcmlyZl9vZ3JhcGggdmFyaXJmX3JlbmFtZSB2YXJpcmZfc2V0IHZhcmlyZl90YWJsZSB2YXJsaXN0IHZhcmxtYXIgdmFybm9ybSB2YXJzb2MgdmFyc3RhYmxlIHZhcnN0YWJsZV93IHZhcnN0YWJsZV93MiB2YXJ3bGUgdmNlIHZlYyB2ZWNfZmV2ZCB2ZWNfbWtwaGkgdmVjX3AgdmVjX3BfdyB2ZWNpcmZfY3JlYXRlIHZlY2xtYXIgdmVjbG1hcl93IHZlY25vcm0gdmVjbm9ybV93IHZlY3JhbmsgdmVjc3RhYmxlIHZlcmluc3QgdmVycyB2ZXJzaSB2ZXJzaW8gdmVyc2lvbiB2aWV3IHZpZXdzb3VyY2UgdmlmIHZ3bHMgd2RhdGV0b2Ygd2ViZGVzY3JpYmUgd2Vic2VlayB3ZWJ1c2Ugd2VpYjFfbGYgd2VpYjJfbGYgd2VpYl9sZiB3ZWliX2xmMCB3ZWliaGV0X2dsZiB3ZWliaGV0X2dsZl9zaCB3ZWliaGV0X2dsZmEgd2VpYmhldF9nbGZhX3NoIHdlaWJoZXRfZ3Agd2VpYmhldF9pbGYgd2VpYmhldF9pbGZfc2ggd2VpYmhldF9pbGZhIHdlaWJoZXRfaWxmYV9zaCB3ZWliaGV0X2lwIHdlaWJ1X3N3IHdlaWJ1bF9wIHdlaWJ1bGwgd2VpYnVsbF9jIHdlaWJ1bGxfcyB3ZWlidWxsaGV0IHdoIHdoZWxwIHdoaSB3aGljaCB3aGlsIHdoaWxlIHdpbGNfc3Qgd2lsY294b24gd2luIHdpbmQgd2luZG8gd2luZG93IHdpbmV4ZWMgd250ZXN0YiB3bnRlc3RiXzcgd250ZXN0cSB4Y2hhcnQgeGNoYXJ0XzcgeGNvcnIgeGNvcnJfNyB4aSB4aV82IHhtbHNhdiB4bWxzYXZlIHhtbHVzZSB4cG9zZSB4c2ggeHNoZSB4c2hlbCB4c2hlbGwgeHRfaWlzIHh0X3RpcyB4dGFiX3AgeHRhYm9uZCB4dGJpbl9wIHh0Y2xvZyB4dGNsb2dsb2cgeHRjbG9nbG9nXzggeHRjbG9nbG9nX2QyIHh0Y2xvZ2xvZ19wYV9wIHh0Y2xvZ2xvZ19yZV9wIHh0Y250X3AgeHRjb3JyIHh0ZGF0YSB4dGRlcyB4dGZyb250X3AgeHRmcm9udGllciB4dGdlZSB4dGdlZV9lbGluayB4dGdlZV9lc3RhdCB4dGdlZV9tYWtlaXZhciB4dGdlZV9wIHh0Z2VlX3BsaW5rIHh0Z2xzIHh0Z2xzX3AgeHRoYXVzIHh0aGF1c21hbiB4dGh0X3AgeHRodGF5bG9yIHh0aWxlIHh0aW50X3AgeHRpbnRyZWcgeHRpbnRyZWdfOCB4dGludHJlZ19kMiB4dGludHJlZ19wIHh0aXZwXzEgeHRpdnBfMiB4dGl2cmVnIHh0bGluZSB4dGxpbmVfZXggeHRsb2dpdCB4dGxvZ2l0XzggeHRsb2dpdF9kMiB4dGxvZ2l0X2ZlX3AgeHRsb2dpdF9wYV9wIHh0bG9naXRfcmVfcCB4dG1peGVkIHh0bWl4ZWRfZXN0YXQgeHRtaXhlZF9wIHh0bmJfZmUgeHRuYl9sZiB4dG5icmVnIHh0bmJyZWdfcGFfcCB4dG5icmVnX3JlZmVfcCB4dHBjc2UgeHRwY3NlX3AgeHRwb2lzIHh0cG9pc3NvbiB4dHBvaXNzb25fZDIgeHRwb2lzc29uX3BhX3AgeHRwb2lzc29uX3JlZmVfcCB4dHByZWQgeHRwcm9iaXQgeHRwcm9iaXRfOCB4dHByb2JpdF9kMiB4dHByb2JpdF9yZV9wIHh0cHNfZmUgeHRwc19sZiB4dHBzX3JlbiB4dHBzX3Jlbl84IHh0cmFyX3AgeHRyYyB4dHJjX3AgeHRyY2hoIHh0cmVmZV9wIHh0cmVnIHh0cmVnX2JlIHh0cmVnX2ZlIHh0cmVnX21sIHh0cmVnX3BhX3AgeHRyZWdfcmUgeHRyZWdhciB4dHJlcmVfcCB4dHNldCB4dHNmX2xsIHh0c2ZfbGx0aSB4dHN1bSB4dHRhYiB4dHRlc3QwIHh0dG9iaXQgeHR0b2JpdF84IHh0dG9iaXRfcCB4dHRyYW5zIHl4IHl4dmlld19fYmFybGlrZV9kcmF3IHl4dmlld19hcmVhX2RyYXcgeXh2aWV3X2Jhcl9kcmF3IHl4dmlld19kb3RfZHJhdyB5eHZpZXdfZHJvcGxpbmVfZHJhdyB5eHZpZXdfZnVuY3Rpb25fZHJhdyB5eHZpZXdfaWFycm93X2RyYXcgeXh2aWV3X2lsYWJlbHNfZHJhdyB5eHZpZXdfbm9ybWFsX2RyYXcgeXh2aWV3X3BjYXJyb3dfZHJhdyB5eHZpZXdfcGNiYXJyb3dfZHJhdyB5eHZpZXdfcGNjYXBzeW1fZHJhdyB5eHZpZXdfcGNzY2F0dGVyX2RyYXcgeXh2aWV3X3Bjc3Bpa2VfZHJhdyB5eHZpZXdfcmFyZWFfZHJhdyB5eHZpZXdfcmJhcl9kcmF3IHl4dmlld19yYmFybV9kcmF3IHl4dmlld19yY2FwX2RyYXcgeXh2aWV3X3JjYXBzeW1fZHJhdyB5eHZpZXdfcmNvbm5lY3RlZF9kcmF3IHl4dmlld19ybGluZV9kcmF3IHl4dmlld19yc2NhdHRlcl9kcmF3IHl4dmlld19yc3Bpa2VfZHJhdyB5eHZpZXdfc3Bpa2VfZHJhdyB5eHZpZXdfc3VuZmxvd2VyX2RyYXcgemFwX3MgemluYiB6aW5iX2xsZiB6aW5iX3BsZiB6aXAgemlwX2xsZiB6aXBfcCB6aXBfcGxmIHp0X2N0XzUgenRfaGNfNSB6dF9oY2RfNSB6dF9pc181IHp0X2lzc181IHp0X3Nob181IHp0X3NtcF81IHp0YmFzZV81IHp0Y294XzUgenRkZXNfNSB6dGVyZWdfNSB6dGZpbGxfNSB6dGdlbl81IHp0aXJfNSB6dGpvaW5fNSB6dG5iIHp0bmJfcCB6dHAgenRwX3AgenRzXzUgenRzZXRfNSB6dHNwbGlfNSB6dHN1bV81IHp0dG9jdF81IHp0dmFyeV81IHp0d2VpYl81JyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgYmVnaW46IC9gW2EtekEtWjAtOV9dKycvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvXFwkXFx7P1thLXpBLVowLTlfXStcXH0/L1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46ICdgXCJbXlxcclxcbl0qP1wiXFwnJ30sXG4gICAgICAgICAge2JlZ2luOiAnXCJbXlxcclxcblwiXSpcIid9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXGIoYWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGF0YW5ofGNlaWx8Y2xvZ2xvZ3xjb21ifGNvc3xkaWdhbW1hfGV4cHxmbG9vcnxpbnZjbG9nbG9nfGludmxvZ2l0fGxufGxuZmFjdHxsbmZhY3RvcmlhbHxsbmdhbW1hfGxvZ3xsb2cxMHxtYXh8bWlufG1vZHxyZWxkaWZ8cm91bmR8c2lnbnxzaW58c3FydHxzdW18dGFufHRhbmh8dHJpZ2FtbWF8dHJ1bmN8YmV0YWRlbnxCaW5vbWlhbHxiaW5vcm18Ymlub3JtYWx8Y2hpMnxjaGkydGFpbHxkZ2FtbWFwZGF8ZGdhbW1hcGRhZGF8ZGdhbW1hcGRhZHh8ZGdhbW1hcGR4fGRnYW1tYXBkeGR4fEZ8RmRlbnxGdGFpbHxnYW1tYWRlbnxnYW1tYXB8aWJldGF8aW52Ymlub21pYWx8aW52Y2hpMnxpbnZjaGkydGFpbHxpbnZGfGludkZ0YWlsfGludmdhbW1hcHxpbnZpYmV0YXxpbnZuY2hpMnxpbnZuRnRhaWx8aW52bmliZXRhfGludm5vcm18aW52bm9ybWFsfGludnR0YWlsfG5iZXRhZGVufG5jaGkyfG5GZGVufG5GdGFpbHxuaWJldGF8bm9ybXxub3JtYWx8bm9ybWFsZGVufG5vcm1kfG5wbmNoaTJ8dGRlbnx0dGFpbHx1bmlmb3JtfGFiYnJldnxjaGFyfGluZGV4fGluZGV4bm90fGxlbmd0aHxsb3dlcnxsdHJpbXxtYXRjaHxwbHVyYWx8cHJvcGVyfHJlYWx8cmVnZXhtfHJlZ2V4cnxyZWdleHN8cmV2ZXJzZXxydHJpbXxzdHJpbmd8c3RybGVufHN0cmxvd2VyfHN0cmx0cmltfHN0cm1hdGNofHN0cm9mcmVhbHxzdHJwb3N8c3RycHJvcGVyfHN0cnJldmVyc2V8c3RycnRyaW18c3RydHJpbXxzdHJ1cHBlcnxzdWJpbnN0cnxzdWJpbndvcmR8c3Vic3RyfHRyaW18dXBwZXJ8d29yZHx3b3JkY291bnR8X2NhbGxlcnxhdXRvY29kZXxieXRlb3JkZXJ8Y2hvcHxjbGlwfGNvbmR8ZXxlcHNkb3VibGV8ZXBzZmxvYXR8Z3JvdXB8aW5saXN0fGlucmFuZ2V8aXJlY29kZXxtYXRyaXh8bWF4Ynl0ZXxtYXhkb3VibGV8bWF4ZmxvYXR8bWF4aW50fG1heGxvbmd8bWl8bWluYnl0ZXxtaW5kb3VibGV8bWluZmxvYXR8bWluaW50fG1pbmxvbmd8bWlzc2luZ3xyfHJlY29kZXxyZXBsYXl8cmV0dXJufHN8c2NhbGFyfGR8ZGF0ZXxkYXl8ZG93fGRveXxoYWxmeWVhcnxtZHl8bW9udGh8cXVhcnRlcnx3ZWVrfHllYXJ8ZHxkYWlseXxkb2ZkfGRvZmh8ZG9mbXxkb2ZxfGRvZnd8ZG9meXxofGhhbGZ5ZWFybHl8aG9mZHxtfG1vZmR8bW9udGhseXxxfHFvZmR8cXVhcnRlcmx5fHRpbnx0d2l0aGlufHd8d2Vla2x5fHdvZmR8eXx5ZWFybHl8eWh8eW18eW9mZHx5cXx5d3xjaG9sZXNreXxjb2xudW1ifGNvbHNvZnxjb3JyfGRldHxkaWFnfGRpYWcwY250fGVsfGdldHxoYWRhbWFyZHxJfGludnxpbnZzeW18aXNzeW18aXNzeW1tZXRyaWN8SnxtYXRtaXNzaW5nfG1hdHVuaWZvcm18bXJlbGRpZnxudWxsbWF0fHJvd251bWJ8cm93c29mfHN3ZWVwfHN5bWludnx0cmFjZXx2ZWN8dmVjZGlhZykoPz1cXFxcKHwkKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIGhsanMuQ09NTUVOVCgnXlsgXFx0XSpcXFxcKi4qJCcsIGZhbHNlKSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgU1RFUDIxX0lERU5UX1JFID0gJ1tBLVpfXVtBLVowLTlfLl0qJztcbiAgdmFyIFNURVAyMV9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOiAnSEVBREVSIEVORFNFQyBEQVRBJ1xuICB9O1xuICB2YXIgU1RFUDIxX1NUQVJUID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnSVNPLTEwMzAzLTIxOycsXG4gICAgcmVsZXZhbmNlOiAxMFxuICB9O1xuICB2YXIgU1RFUDIxX0NMT1NFID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnRU5ELUlTTy0xMDMwMy0yMTsnLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsncDIxJywgJ3N0ZXAnLCAnc3RwJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSwgLy8gU1RFUCAyMSBpcyBjYXNlIGluc2Vuc2l0aXZlIGluIHRoZW9yeSwgaW4gcHJhY3RpY2UgYWxsIG5vbi1jb21tZW50cyBhcmUgY2FwaXRhbGl6ZWQuXG4gICAgbGV4ZW1lczogU1RFUDIxX0lERU5UX1JFLFxuICAgIGtleXdvcmRzOiBTVEVQMjFfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFNURVAyMV9TVEFSVCxcbiAgICAgIFNURVAyMV9DTE9TRSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoJy9cXFxcKlxcXFwqIScsICdcXFxcKi8nKSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2lsbGVnYWw6IG51bGx9KSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46IFwiJ1wiLCBlbmQ6IFwiJ1wiXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnIycsIGVuZDogJ1xcXFxkKycsXG4gICAgICAgICAgICBpbGxlZ2FsOiAnXFxcXFcnXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcblxuICB2YXIgVkFSSUFCTEUgPSB7XG4gICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgIGJlZ2luOiAnXFxcXCQnICsgaGxqcy5JREVOVF9SRVxuICB9O1xuXG4gIHZhciBIRVhfQ09MT1IgPSB7XG4gICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICBiZWdpbjogJyMoW2EtZkEtRjAtOV17Nn18W2EtZkEtRjAtOV17M30pJ1xuICB9O1xuXG4gIHZhciBBVF9LRVlXT1JEUyA9IFtcbiAgICAnY2hhcnNldCcsXG4gICAgJ2NzcycsXG4gICAgJ2RlYnVnJyxcbiAgICAnZXh0ZW5kJyxcbiAgICAnZm9udC1mYWNlJyxcbiAgICAnZm9yJyxcbiAgICAnaW1wb3J0JyxcbiAgICAnaW5jbHVkZScsXG4gICAgJ21lZGlhJyxcbiAgICAnbWl4aW4nLFxuICAgICdwYWdlJyxcbiAgICAnd2FybicsXG4gICAgJ3doaWxlJ1xuICBdO1xuXG4gIHZhciBQU0VVRE9fU0VMRUNUT1JTID0gW1xuICAgICdhZnRlcicsXG4gICAgJ2JlZm9yZScsXG4gICAgJ2ZpcnN0LWxldHRlcicsXG4gICAgJ2ZpcnN0LWxpbmUnLFxuICAgICdhY3RpdmUnLFxuICAgICdmaXJzdC1jaGlsZCcsXG4gICAgJ2ZvY3VzJyxcbiAgICAnaG92ZXInLFxuICAgICdsYW5nJyxcbiAgICAnbGluaycsXG4gICAgJ3Zpc2l0ZWQnXG4gIF07XG5cbiAgdmFyIFRBR1MgPSBbXG4gICAgJ2EnLFxuICAgICdhYmJyJyxcbiAgICAnYWRkcmVzcycsXG4gICAgJ2FydGljbGUnLFxuICAgICdhc2lkZScsXG4gICAgJ2F1ZGlvJyxcbiAgICAnYicsXG4gICAgJ2Jsb2NrcXVvdGUnLFxuICAgICdib2R5JyxcbiAgICAnYnV0dG9uJyxcbiAgICAnY2FudmFzJyxcbiAgICAnY2FwdGlvbicsXG4gICAgJ2NpdGUnLFxuICAgICdjb2RlJyxcbiAgICAnZGQnLFxuICAgICdkZWwnLFxuICAgICdkZXRhaWxzJyxcbiAgICAnZGZuJyxcbiAgICAnZGl2JyxcbiAgICAnZGwnLFxuICAgICdkdCcsXG4gICAgJ2VtJyxcbiAgICAnZmllbGRzZXQnLFxuICAgICdmaWdjYXB0aW9uJyxcbiAgICAnZmlndXJlJyxcbiAgICAnZm9vdGVyJyxcbiAgICAnZm9ybScsXG4gICAgJ2gxJyxcbiAgICAnaDInLFxuICAgICdoMycsXG4gICAgJ2g0JyxcbiAgICAnaDUnLFxuICAgICdoNicsXG4gICAgJ2hlYWRlcicsXG4gICAgJ2hncm91cCcsXG4gICAgJ2h0bWwnLFxuICAgICdpJyxcbiAgICAnaWZyYW1lJyxcbiAgICAnaW1nJyxcbiAgICAnaW5wdXQnLFxuICAgICdpbnMnLFxuICAgICdrYmQnLFxuICAgICdsYWJlbCcsXG4gICAgJ2xlZ2VuZCcsXG4gICAgJ2xpJyxcbiAgICAnbWFyaycsXG4gICAgJ21lbnUnLFxuICAgICduYXYnLFxuICAgICdvYmplY3QnLFxuICAgICdvbCcsXG4gICAgJ3AnLFxuICAgICdxJyxcbiAgICAncXVvdGUnLFxuICAgICdzYW1wJyxcbiAgICAnc2VjdGlvbicsXG4gICAgJ3NwYW4nLFxuICAgICdzdHJvbmcnLFxuICAgICdzdW1tYXJ5JyxcbiAgICAnc3VwJyxcbiAgICAndGFibGUnLFxuICAgICd0Ym9keScsXG4gICAgJ3RkJyxcbiAgICAndGV4dGFyZWEnLFxuICAgICd0Zm9vdCcsXG4gICAgJ3RoJyxcbiAgICAndGhlYWQnLFxuICAgICd0aW1lJyxcbiAgICAndHInLFxuICAgICd1bCcsXG4gICAgJ3ZhcicsXG4gICAgJ3ZpZGVvJ1xuICBdO1xuXG4gIHZhciBUQUdfRU5EID0gJ1tcXFxcLlxcXFxzXFxcXG5cXFxcW1xcXFw6LF0nO1xuXG4gIHZhciBBVFRSSUJVVEVTID0gW1xuICAgICdhbGlnbi1jb250ZW50JyxcbiAgICAnYWxpZ24taXRlbXMnLFxuICAgICdhbGlnbi1zZWxmJyxcbiAgICAnYW5pbWF0aW9uJyxcbiAgICAnYW5pbWF0aW9uLWRlbGF5JyxcbiAgICAnYW5pbWF0aW9uLWRpcmVjdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1kdXJhdGlvbicsXG4gICAgJ2FuaW1hdGlvbi1maWxsLW1vZGUnLFxuICAgICdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JyxcbiAgICAnYW5pbWF0aW9uLW5hbWUnLFxuICAgICdhbmltYXRpb24tcGxheS1zdGF0ZScsXG4gICAgJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLFxuICAgICdhdXRvJyxcbiAgICAnYmFja2ZhY2UtdmlzaWJpbGl0eScsXG4gICAgJ2JhY2tncm91bmQnLFxuICAgICdiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnLFxuICAgICdiYWNrZ3JvdW5kLWNsaXAnLFxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAnYmFja2dyb3VuZC1pbWFnZScsXG4gICAgJ2JhY2tncm91bmQtb3JpZ2luJyxcbiAgICAnYmFja2dyb3VuZC1wb3NpdGlvbicsXG4gICAgJ2JhY2tncm91bmQtcmVwZWF0JyxcbiAgICAnYmFja2dyb3VuZC1zaXplJyxcbiAgICAnYm9yZGVyJyxcbiAgICAnYm9yZGVyLWJvdHRvbScsXG4gICAgJ2JvcmRlci1ib3R0b20tY29sb3InLFxuICAgICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItYm90dG9tLXN0eWxlJyxcbiAgICAnYm9yZGVyLWJvdHRvbS13aWR0aCcsXG4gICAgJ2JvcmRlci1jb2xsYXBzZScsXG4gICAgJ2JvcmRlci1jb2xvcicsXG4gICAgJ2JvcmRlci1pbWFnZScsXG4gICAgJ2JvcmRlci1pbWFnZS1vdXRzZXQnLFxuICAgICdib3JkZXItaW1hZ2UtcmVwZWF0JyxcbiAgICAnYm9yZGVyLWltYWdlLXNsaWNlJyxcbiAgICAnYm9yZGVyLWltYWdlLXNvdXJjZScsXG4gICAgJ2JvcmRlci1pbWFnZS13aWR0aCcsXG4gICAgJ2JvcmRlci1sZWZ0JyxcbiAgICAnYm9yZGVyLWxlZnQtY29sb3InLFxuICAgICdib3JkZXItbGVmdC1zdHlsZScsXG4gICAgJ2JvcmRlci1sZWZ0LXdpZHRoJyxcbiAgICAnYm9yZGVyLXJhZGl1cycsXG4gICAgJ2JvcmRlci1yaWdodCcsXG4gICAgJ2JvcmRlci1yaWdodC1jb2xvcicsXG4gICAgJ2JvcmRlci1yaWdodC1zdHlsZScsXG4gICAgJ2JvcmRlci1yaWdodC13aWR0aCcsXG4gICAgJ2JvcmRlci1zcGFjaW5nJyxcbiAgICAnYm9yZGVyLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcCcsXG4gICAgJ2JvcmRlci10b3AtY29sb3InLFxuICAgICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJyxcbiAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnLFxuICAgICdib3JkZXItdG9wLXN0eWxlJyxcbiAgICAnYm9yZGVyLXRvcC13aWR0aCcsXG4gICAgJ2JvcmRlci13aWR0aCcsXG4gICAgJ2JvdHRvbScsXG4gICAgJ2JveC1kZWNvcmF0aW9uLWJyZWFrJyxcbiAgICAnYm94LXNoYWRvdycsXG4gICAgJ2JveC1zaXppbmcnLFxuICAgICdicmVhay1hZnRlcicsXG4gICAgJ2JyZWFrLWJlZm9yZScsXG4gICAgJ2JyZWFrLWluc2lkZScsXG4gICAgJ2NhcHRpb24tc2lkZScsXG4gICAgJ2NsZWFyJyxcbiAgICAnY2xpcCcsXG4gICAgJ2NsaXAtcGF0aCcsXG4gICAgJ2NvbG9yJyxcbiAgICAnY29sdW1uLWNvdW50JyxcbiAgICAnY29sdW1uLWZpbGwnLFxuICAgICdjb2x1bW4tZ2FwJyxcbiAgICAnY29sdW1uLXJ1bGUnLFxuICAgICdjb2x1bW4tcnVsZS1jb2xvcicsXG4gICAgJ2NvbHVtbi1ydWxlLXN0eWxlJyxcbiAgICAnY29sdW1uLXJ1bGUtd2lkdGgnLFxuICAgICdjb2x1bW4tc3BhbicsXG4gICAgJ2NvbHVtbi13aWR0aCcsXG4gICAgJ2NvbHVtbnMnLFxuICAgICdjb250ZW50JyxcbiAgICAnY291bnRlci1pbmNyZW1lbnQnLFxuICAgICdjb3VudGVyLXJlc2V0JyxcbiAgICAnY3Vyc29yJyxcbiAgICAnZGlyZWN0aW9uJyxcbiAgICAnZGlzcGxheScsXG4gICAgJ2VtcHR5LWNlbGxzJyxcbiAgICAnZmlsdGVyJyxcbiAgICAnZmxleCcsXG4gICAgJ2ZsZXgtYmFzaXMnLFxuICAgICdmbGV4LWRpcmVjdGlvbicsXG4gICAgJ2ZsZXgtZmxvdycsXG4gICAgJ2ZsZXgtZ3JvdycsXG4gICAgJ2ZsZXgtc2hyaW5rJyxcbiAgICAnZmxleC13cmFwJyxcbiAgICAnZmxvYXQnLFxuICAgICdmb250JyxcbiAgICAnZm9udC1mYW1pbHknLFxuICAgICdmb250LWZlYXR1cmUtc2V0dGluZ3MnLFxuICAgICdmb250LWtlcm5pbmcnLFxuICAgICdmb250LWxhbmd1YWdlLW92ZXJyaWRlJyxcbiAgICAnZm9udC1zaXplJyxcbiAgICAnZm9udC1zaXplLWFkanVzdCcsXG4gICAgJ2ZvbnQtc3RyZXRjaCcsXG4gICAgJ2ZvbnQtc3R5bGUnLFxuICAgICdmb250LXZhcmlhbnQnLFxuICAgICdmb250LXZhcmlhbnQtbGlnYXR1cmVzJyxcbiAgICAnZm9udC13ZWlnaHQnLFxuICAgICdoZWlnaHQnLFxuICAgICdoeXBoZW5zJyxcbiAgICAnaWNvbicsXG4gICAgJ2ltYWdlLW9yaWVudGF0aW9uJyxcbiAgICAnaW1hZ2UtcmVuZGVyaW5nJyxcbiAgICAnaW1hZ2UtcmVzb2x1dGlvbicsXG4gICAgJ2ltZS1tb2RlJyxcbiAgICAnaW5oZXJpdCcsXG4gICAgJ2luaXRpYWwnLFxuICAgICdqdXN0aWZ5LWNvbnRlbnQnLFxuICAgICdsZWZ0JyxcbiAgICAnbGV0dGVyLXNwYWNpbmcnLFxuICAgICdsaW5lLWhlaWdodCcsXG4gICAgJ2xpc3Qtc3R5bGUnLFxuICAgICdsaXN0LXN0eWxlLWltYWdlJyxcbiAgICAnbGlzdC1zdHlsZS1wb3NpdGlvbicsXG4gICAgJ2xpc3Qtc3R5bGUtdHlwZScsXG4gICAgJ21hcmdpbicsXG4gICAgJ21hcmdpbi1ib3R0b20nLFxuICAgICdtYXJnaW4tbGVmdCcsXG4gICAgJ21hcmdpbi1yaWdodCcsXG4gICAgJ21hcmdpbi10b3AnLFxuICAgICdtYXJrcycsXG4gICAgJ21hc2snLFxuICAgICdtYXgtaGVpZ2h0JyxcbiAgICAnbWF4LXdpZHRoJyxcbiAgICAnbWluLWhlaWdodCcsXG4gICAgJ21pbi13aWR0aCcsXG4gICAgJ25hdi1kb3duJyxcbiAgICAnbmF2LWluZGV4JyxcbiAgICAnbmF2LWxlZnQnLFxuICAgICduYXYtcmlnaHQnLFxuICAgICduYXYtdXAnLFxuICAgICdub25lJyxcbiAgICAnbm9ybWFsJyxcbiAgICAnb2JqZWN0LWZpdCcsXG4gICAgJ29iamVjdC1wb3NpdGlvbicsXG4gICAgJ29wYWNpdHknLFxuICAgICdvcmRlcicsXG4gICAgJ29ycGhhbnMnLFxuICAgICdvdXRsaW5lJyxcbiAgICAnb3V0bGluZS1jb2xvcicsXG4gICAgJ291dGxpbmUtb2Zmc2V0JyxcbiAgICAnb3V0bGluZS1zdHlsZScsXG4gICAgJ291dGxpbmUtd2lkdGgnLFxuICAgICdvdmVyZmxvdycsXG4gICAgJ292ZXJmbG93LXdyYXAnLFxuICAgICdvdmVyZmxvdy14JyxcbiAgICAnb3ZlcmZsb3cteScsXG4gICAgJ3BhZGRpbmcnLFxuICAgICdwYWRkaW5nLWJvdHRvbScsXG4gICAgJ3BhZGRpbmctbGVmdCcsXG4gICAgJ3BhZGRpbmctcmlnaHQnLFxuICAgICdwYWRkaW5nLXRvcCcsXG4gICAgJ3BhZ2UtYnJlYWstYWZ0ZXInLFxuICAgICdwYWdlLWJyZWFrLWJlZm9yZScsXG4gICAgJ3BhZ2UtYnJlYWstaW5zaWRlJyxcbiAgICAncGVyc3BlY3RpdmUnLFxuICAgICdwZXJzcGVjdGl2ZS1vcmlnaW4nLFxuICAgICdwb2ludGVyLWV2ZW50cycsXG4gICAgJ3Bvc2l0aW9uJyxcbiAgICAncXVvdGVzJyxcbiAgICAncmVzaXplJyxcbiAgICAncmlnaHQnLFxuICAgICd0YWItc2l6ZScsXG4gICAgJ3RhYmxlLWxheW91dCcsXG4gICAgJ3RleHQtYWxpZ24nLFxuICAgICd0ZXh0LWFsaWduLWxhc3QnLFxuICAgICd0ZXh0LWRlY29yYXRpb24nLFxuICAgICd0ZXh0LWRlY29yYXRpb24tY29sb3InLFxuICAgICd0ZXh0LWRlY29yYXRpb24tbGluZScsXG4gICAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZScsXG4gICAgJ3RleHQtaW5kZW50JyxcbiAgICAndGV4dC1vdmVyZmxvdycsXG4gICAgJ3RleHQtcmVuZGVyaW5nJyxcbiAgICAndGV4dC1zaGFkb3cnLFxuICAgICd0ZXh0LXRyYW5zZm9ybScsXG4gICAgJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJyxcbiAgICAndG9wJyxcbiAgICAndHJhbnNmb3JtJyxcbiAgICAndHJhbnNmb3JtLW9yaWdpbicsXG4gICAgJ3RyYW5zZm9ybS1zdHlsZScsXG4gICAgJ3RyYW5zaXRpb24nLFxuICAgICd0cmFuc2l0aW9uLWRlbGF5JyxcbiAgICAndHJhbnNpdGlvbi1kdXJhdGlvbicsXG4gICAgJ3RyYW5zaXRpb24tcHJvcGVydHknLFxuICAgICd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsXG4gICAgJ3VuaWNvZGUtYmlkaScsXG4gICAgJ3ZlcnRpY2FsLWFsaWduJyxcbiAgICAndmlzaWJpbGl0eScsXG4gICAgJ3doaXRlLXNwYWNlJyxcbiAgICAnd2lkb3dzJyxcbiAgICAnd2lkdGgnLFxuICAgICd3b3JkLWJyZWFrJyxcbiAgICAnd29yZC1zcGFjaW5nJyxcbiAgICAnd29yZC13cmFwJyxcbiAgICAnei1pbmRleCdcbiAgXTtcblxuICAvLyBpbGxlZ2Fsc1xuICB2YXIgSUxMRUdBTCA9IFtcbiAgICAnXFxcXD8nLFxuICAgICcoXFxcXGJSZXR1cm5cXFxcYiknLCAvLyBtb25rZXlcbiAgICAnKFxcXFxiRW5kXFxcXGIpJywgLy8gbW9ua2V5XG4gICAgJyhcXFxcYmVuZFxcXFxiKScsIC8vIHZic2NyaXB0XG4gICAgJyhcXFxcYmRlZlxcXFxiKScsIC8vIGdyYWRsZVxuICAgICc7JywgLy8gYSB3aG9sZSBsb3Qgb2YgbGFuZ3VhZ2VzXG4gICAgJyNcXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFwqXFxcXHMnLCAvLyBtYXJrZG93blxuICAgICc9PT1cXFxccycsIC8vIG1hcmtkb3duXG4gICAgJ1xcXFx8JyxcbiAgICAnJScsIC8vIHByb2xvZ1xuICBdO1xuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWydzdHlsJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogZmFsc2UsXG4gICAga2V5d29yZHM6ICdpZiBlbHNlIGZvciBpbicsXG4gICAgaWxsZWdhbDogJygnICsgSUxMRUdBTC5qb2luKCd8JykgKyAnKScsXG4gICAgY29udGFpbnM6IFtcblxuICAgICAgLy8gc3RyaW5nc1xuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQVBPU19TVFJJTkdfTU9ERSxcblxuICAgICAgLy8gY29tbWVudHNcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG5cbiAgICAgIC8vIGhleCBjb2xvcnNcbiAgICAgIEhFWF9DT0xPUixcblxuICAgICAgLy8gY2xhc3MgdGFnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC5bYS16QS1aXVthLXpBLVowLTlfLV0qJyArIFRBR19FTkQsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci1jbGFzcycsIGJlZ2luOiAnXFxcXC5bYS16QS1aXVthLXpBLVowLTlfLV0qJ31cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gaWQgdGFnXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXCNbYS16QS1aXVthLXpBLVowLTlfLV0qJyArIFRBR19FTkQsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci1pZCcsIGJlZ2luOiAnXFxcXCNbYS16QS1aXVthLXpBLVowLTlfLV0qJ31cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gdGFnc1xuICAgICAge1xuICAgICAgICBiZWdpbjogJ1xcXFxiKCcgKyBUQUdTLmpvaW4oJ3wnKSArICcpJyArIFRBR19FTkQsXG4gICAgICAgIHJldHVybkJlZ2luOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIHtjbGFzc05hbWU6ICdzZWxlY3Rvci10YWcnLCBiZWdpbjogJ1xcXFxiW2EtekEtWl1bYS16QS1aMC05Xy1dKid9XG4gICAgICAgIF1cbiAgICAgIH0sXG5cbiAgICAgIC8vIHBzdWVkbyBzZWxlY3RvcnNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICcmPzo/OlxcXFxiKCcgKyBQU0VVRE9fU0VMRUNUT1JTLmpvaW4oJ3wnKSArICcpJyArIFRBR19FTkRcbiAgICAgIH0sXG5cbiAgICAgIC8vIEAga2V5d29yZHNcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXEAoJyArIEFUX0tFWVdPUkRTLmpvaW4oJ3wnKSArICcpXFxcXGInXG4gICAgICB9LFxuXG4gICAgICAvLyB2YXJpYWJsZXNcbiAgICAgIFZBUklBQkxFLFxuXG4gICAgICAvLyBkaW1lbnNpb25cbiAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuXG4gICAgICAvLyBudW1iZXJcbiAgICAgIGhsanMuTlVNQkVSX01PREUsXG5cbiAgICAgIC8vIGZ1bmN0aW9uc1xuICAgICAgLy8gIC0gb25seSBmcm9tIGJlZ2lubmluZyBvZiBsaW5lICsgd2hpdGVzcGFjZVxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnXlthLXpBLVpdW2EtekEtWjAtOV9cXC1dKlxcXFwoLipcXFxcKScsXG4gICAgICAgIGlsbGVnYWw6ICdbXFxcXG5dJyxcbiAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2NsYXNzTmFtZTogJ3RpdGxlJywgYmVnaW46ICdcXFxcYlthLXpBLVpdW2EtekEtWjAtOV9cXC1dKid9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sXG4gICAgICAgICAgICBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgSEVYX0NPTE9SLFxuICAgICAgICAgICAgICBWQVJJQUJMRSxcbiAgICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNTU19OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcblxuICAgICAgLy8gYXR0cmlidXRlc1xuICAgICAgLy8gIC0gb25seSBmcm9tIGJlZ2lubmluZyBvZiBsaW5lICsgd2hpdGVzcGFjZVxuICAgICAgLy8gIC0gbXVzdCBoYXZlIHdoaXRlc3BhY2UgYWZ0ZXIgaXRcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnYXR0cmlidXRlJyxcbiAgICAgICAgYmVnaW46ICdcXFxcYignICsgQVRUUklCVVRFUy5yZXZlcnNlKCkuam9pbignfCcpICsgJylcXFxcYicsXG4gICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgIC8vIHZhbHVlIGNvbnRhaW5lclxuICAgICAgICAgIGVuZDogLzt8JC8sXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIEhFWF9DT0xPUixcbiAgICAgICAgICAgIFZBUklBQkxFLFxuICAgICAgICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ1NTX05VTUJFUl9NT0RFLFxuICAgICAgICAgICAgaGxqcy5OVU1CRVJfTU9ERSxcbiAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICBdLFxuICAgICAgICAgIGlsbGVnYWw6IC9cXC4vLFxuICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIERFVEFJTFMgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1xcXFxbXFxuKG11bHRpcGFydCk/JywgZW5kOiAnXFxcXF1cXG4nXG4gIH07XG4gIHZhciBUSU1FID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICdcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfShcXFxccyspXFxcXGR7Mn06XFxcXGR7Mn06XFxcXGR7Mn1cXC5cXFxcZCtaJ1xuICB9O1xuICB2YXIgUFJPR1JFU1NWQUxVRSA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnKFxcXFwrfC0pXFxcXGQrJ1xuICB9O1xuICB2YXIgS0VZV09SRFMgPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ14odGVzdHx0ZXN0aW5nfHN1Y2Nlc3N8c3VjY2Vzc2Z1bHxmYWlsdXJlfGVycm9yfHNraXB8eGZhaWx8dXhzdWNjZXNzKSg6PylcXFxccysodGVzdCk/JyB9LFxuICAgICAgeyBiZWdpbjogJ15wcm9ncmVzcyg6PykoXFxcXHMrKT8ocG9wfHB1c2gpPycgfSxcbiAgICAgIHsgYmVnaW46ICdedGFnczonIH0sXG4gICAgICB7IGJlZ2luOiAnXnRpbWU6JyB9XG4gICAgXSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBERVRBSUxTLFxuICAgICAgVElNRSxcbiAgICAgIFBST0dSRVNTVkFMVUUsXG4gICAgICBLRVlXT1JEU1xuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTV0lGVF9LRVlXT1JEUyA9IHtcbiAgICAgIGtleXdvcmQ6ICdfX0NPTFVNTl9fIF9fRklMRV9fIF9fRlVOQ1RJT05fXyBfX0xJTkVfXyBhcyBhcyEgYXM/IGFzc29jaWF0aXZpdHkgJyArXG4gICAgICAgICdicmVhayBjYXNlIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGNvbnZlbmllbmNlIGRlZmF1bHQgZGVmZXIgZGVpbml0IGRpZFNldCBkbyAnICtcbiAgICAgICAgJ2R5bmFtaWMgZHluYW1pY1R5cGUgZWxzZSBlbnVtIGV4dGVuc2lvbiBmYWxsdGhyb3VnaCBmYWxzZSBmaWxlcHJpdmF0ZSBmaW5hbCBmb3IgZnVuYyAnICtcbiAgICAgICAgJ2dldCBndWFyZCBpZiBpbXBvcnQgaW4gaW5kaXJlY3QgaW5maXggaW5pdCBpbm91dCBpbnRlcm5hbCBpcyBsYXp5IGxlZnQgbGV0ICcgK1xuICAgICAgICAnbXV0YXRpbmcgbmlsIG5vbmUgbm9ubXV0YXRpbmcgb3BlbiBvcGVyYXRvciBvcHRpb25hbCBvdmVycmlkZSBwb3N0Zml4IHByZWNlZGVuY2UgJyArXG4gICAgICAgICdwcmVmaXggcHJpdmF0ZSBwcm90b2NvbCBQcm90b2NvbCBwdWJsaWMgcmVwZWF0IHJlcXVpcmVkIHJldGhyb3dzIHJldHVybiAnICtcbiAgICAgICAgJ3JpZ2h0IHNlbGYgU2VsZiBzZXQgc3RhdGljIHN0cnVjdCBzdWJzY3JpcHQgc3VwZXIgc3dpdGNoIHRocm93IHRocm93cyB0cnVlICcgK1xuICAgICAgICAndHJ5IHRyeSEgdHJ5PyBUeXBlIHR5cGVhbGlhcyB1bm93bmVkIHZhciB3ZWFrIHdoZXJlIHdoaWxlIHdpbGxTZXQnLFxuICAgICAgbGl0ZXJhbDogJ3RydWUgZmFsc2UgbmlsJyxcbiAgICAgIGJ1aWx0X2luOiAnYWJzIGFkdmFuY2UgYWxpZ25vZiBhbGlnbm9mVmFsdWUgYW55R2VuZXJhdG9yIGFzc2VydCBhc3NlcnRpb25GYWlsdXJlICcgK1xuICAgICAgICAnYnJpZGdlRnJvbU9iamVjdGl2ZUMgYnJpZGdlRnJvbU9iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGJyaWRnZVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2JyaWRnZVRvT2JqZWN0aXZlQ1VuY29uZGl0aW9uYWwgYyBjb250YWlucyBjb3VudCBjb3VudEVsZW1lbnRzIGNvdW50TGVhZGluZ1plcm9zICcgK1xuICAgICAgICAnZGVidWdQcmludCBkZWJ1Z1ByaW50bG4gZGlzdGFuY2UgZHJvcEZpcnN0IGRyb3BMYXN0IGR1bXAgZW5jb2RlQml0c0FzV29yZHMgJyArXG4gICAgICAgICdlbnVtZXJhdGUgZXF1YWwgZmF0YWxFcnJvciBmaWx0ZXIgZmluZCBnZXRCcmlkZ2VkT2JqZWN0aXZlQ1R5cGUgZ2V0VmFMaXN0ICcgK1xuICAgICAgICAnaW5kaWNlcyBpbnNlcnRpb25Tb3J0IGlzQnJpZGdlZFRvT2JqZWN0aXZlQyBpc0JyaWRnZWRWZXJiYXRpbVRvT2JqZWN0aXZlQyAnICtcbiAgICAgICAgJ2lzVW5pcXVlbHlSZWZlcmVuY2VkIGlzVW5pcXVlbHlSZWZlcmVuY2VkTm9uT2JqQyBqb2luIGxhenkgbGV4aWNvZ3JhcGhpY2FsQ29tcGFyZSAnICtcbiAgICAgICAgJ21hcCBtYXggbWF4RWxlbWVudCBtaW4gbWluRWxlbWVudCBudW1lcmljQ2FzdCBvdmVybGFwcyBwYXJ0aXRpb24gcG9zaXggJyArXG4gICAgICAgICdwcmVjb25kaXRpb24gcHJlY29uZGl0aW9uRmFpbHVyZSBwcmludCBwcmludGxuIHF1aWNrU29ydCByZWFkTGluZSByZWR1Y2UgcmVmbGVjdCAnICtcbiAgICAgICAgJ3JlaW50ZXJwcmV0Q2FzdCByZXZlcnNlIHJvdW5kVXBUb0FsaWdubWVudCBzaXplb2Ygc2l6ZW9mVmFsdWUgc29ydCBzcGxpdCAnICtcbiAgICAgICAgJ3N0YXJ0c1dpdGggc3RyaWRlIHN0cmlkZW9mIHN0cmlkZW9mVmFsdWUgc3dhcCB0b1N0cmluZyB0cmFuc2NvZGUgJyArXG4gICAgICAgICd1bmRlcmVzdGltYXRlQ291bnQgdW5zYWZlQWRkcmVzc09mIHVuc2FmZUJpdENhc3QgdW5zYWZlRG93bmNhc3QgdW5zYWZlVW53cmFwICcgK1xuICAgICAgICAndW5zYWZlUmVmbGVjdCB3aXRoRXh0ZW5kZWRMaWZldGltZSB3aXRoT2JqZWN0QXRQbHVzWmVybyB3aXRoVW5zYWZlUG9pbnRlciAnICtcbiAgICAgICAgJ3dpdGhVbnNhZmVQb2ludGVyVG9PYmplY3Qgd2l0aFVuc2FmZU11dGFibGVQb2ludGVyIHdpdGhVbnNhZmVNdXRhYmxlUG9pbnRlcnMgJyArXG4gICAgICAgICd3aXRoVW5zYWZlUG9pbnRlciB3aXRoVW5zYWZlUG9pbnRlcnMgd2l0aFZhTGlzdCB6aXAnXG4gICAgfTtcblxuICB2YXIgVFlQRSA9IHtcbiAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICBiZWdpbjogJ1xcXFxiW0EtWl1bXFxcXHdcXHUwMEMwLVxcdTAyQjhcXCddKicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBCTE9DS19DT01NRU5UID0gaGxqcy5DT01NRU5UKFxuICAgICcvXFxcXConLFxuICAgICdcXFxcKi8nLFxuICAgIHtcbiAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgIH1cbiAgKTtcbiAgdmFyIFNVQlNUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N1YnN0JyxcbiAgICBiZWdpbjogL1xcXFxcXCgvLCBlbmQ6ICdcXFxcKScsXG4gICAga2V5d29yZHM6IFNXSUZUX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXSAvLyBhc3NpZ25lZCBsYXRlclxuICB9O1xuICB2YXIgTlVNQkVSUyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICBiZWdpbjogJ1xcXFxiKFtcXFxcZF9dKyhcXFxcLltcXFxcZGVFX10rKT98MHhbYS1mQS1GMC05X10rKFxcXFwuW2EtZkEtRjAtOXBfXSspP3wwYlswMV9dK3wwb1swLTdfXSspXFxcXGInLFxuICAgICAgcmVsZXZhbmNlOiAwXG4gIH07XG4gIHZhciBRVU9URV9TVFJJTkdfTU9ERSA9IGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7XG4gICAgY29udGFpbnM6IFtTVUJTVCwgaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICB9KTtcbiAgU1VCU1QuY29udGFpbnMgPSBbTlVNQkVSU107XG5cbiAgcmV0dXJuIHtcbiAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgQkxPQ0tfQ09NTUVOVCxcbiAgICAgIFRZUEUsXG4gICAgICBOVU1CRVJTLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdmdW5jJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge1xuICAgICAgICAgICAgYmVnaW46IC9bQS1aYS16JF9dWzAtOUEtWmEteiRfXSovXG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46IC88LywgZW5kOiAvPi9cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogL1xcKC8sIGVuZDogL1xcKS8sIGVuZHNQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgIE5VTUJFUlMsXG4gICAgICAgICAgICAgIFFVT1RFX1NUUklOR19NT0RFLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICB7YmVnaW46ICc6J30gLy8gcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpbGxlZ2FsOiAvW1wiJ10vXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbGxlZ2FsOiAvXFxbfCUvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdzdHJ1Y3QgcHJvdG9jb2wgY2xhc3MgZXh0ZW5zaW9uIGVudW0nLFxuICAgICAgICBrZXl3b3JkczogU1dJRlRfS0VZV09SRFMsXG4gICAgICAgIGVuZDogJ1xcXFx7JyxcbiAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7YmVnaW46IC9bQS1aYS16JF9dW1xcdTAwQzAtXFx1MDJCODAtOUEtWmEteiRfXSovfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsIC8vIEBhdHRyaWJ1dGVzXG4gICAgICAgIGJlZ2luOiAnKEB3YXJuX3VudXNlZF9yZXN1bHR8QGV4cG9ydGVkfEBsYXp5fEBub2VzY2FwZXwnICtcbiAgICAgICAgICAgICAgICAgICdATlNDb3B5aW5nfEBOU01hbmFnZWR8QG9iamN8QGNvbnZlbnRpb258QHJlcXVpcmVkfCcgK1xuICAgICAgICAgICAgICAgICAgJ0Bub3JldHVybnxASUJBY3Rpb258QElCRGVzaWduYWJsZXxASUJJbnNwZWN0YWJsZXxASUJPdXRsZXR8JyArXG4gICAgICAgICAgICAgICAgICAnQGluZml4fEBwcmVmaXh8QHBvc3RmaXh8QGF1dG9jbG9zdXJlfEB0ZXN0YWJsZXxAYXZhaWxhYmxlfCcgK1xuICAgICAgICAgICAgICAgICAgJ0Bub25vYmpjfEBOU0FwcGxpY2F0aW9uTWFpbnxAVUlBcHBsaWNhdGlvbk1haW4pJ1xuXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW1wb3J0JywgZW5kOiAvJC8sXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLCBCTE9DS19DT01NRU5UXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG5cbiAgdmFyIENPTU1FTlQgPSB7XG4gICAgY2xhc3NOYW1lOiAnY29tbWVudCcsXG4gICAgYmVnaW46IC9cXCRub29wXFwoLyxcbiAgICBlbmQ6IC9cXCkvLFxuICAgIGNvbnRhaW5zOiBbe1xuICAgICAgYmVnaW46IC9cXCgvLFxuICAgICAgZW5kOiAvXFwpLyxcbiAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnLCB7XG4gICAgICAgIGJlZ2luOiAvXFxcXC4vXG4gICAgICB9XVxuICAgIH1dLFxuICAgIHJlbGV2YW5jZTogMTBcbiAgfTtcblxuICB2YXIgRlVOQ1RJT04gPSB7XG4gICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgYmVnaW46IC9cXCQoPyFub29wKVthLXpBLVpdW19hLXpBLVowLTldKi8sXG4gICAgZW5kOiAvXFwoLyxcbiAgICBleGNsdWRlRW5kOiB0cnVlXG4gIH07XG5cbiAgdmFyIFZBUklBQkxFID0ge1xuICAgIGNsYXNzTmFtZTogJ3ZhcmlhYmxlJyxcbiAgICBiZWdpbjogLyVbX2EtekEtWjAtOTpdKi8sXG4gICAgZW5kOiAnJSdcbiAgfTtcblxuICB2YXIgRVNDQVBFX1NFUVVFTkNFID0ge1xuICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgYmVnaW46IC9cXFxcLi9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICBDT01NRU5ULFxuICAgICAgRlVOQ1RJT04sXG4gICAgICBWQVJJQUJMRSxcbiAgICAgIEVTQ0FQRV9TRVFVRU5DRVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBMSVRFUkFMUyA9ICd0cnVlIGZhbHNlIHllcyBubyBudWxsJztcblxuICB2YXIga2V5UHJlZml4ID0gJ15bIFxcXFwtXSonO1xuICB2YXIga2V5TmFtZSA9ICAnW2EtekEtWl9dW1xcXFx3XFxcXC1dKic7XG4gIHZhciBLRVkgPSB7XG4gICAgY2xhc3NOYW1lOiAnYXR0cicsXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHsgYmVnaW46IGtleVByZWZpeCArIGtleU5hbWUgKyBcIjpcIn0sXG4gICAgICB7IGJlZ2luOiBrZXlQcmVmaXggKyAnXCInICsga2V5TmFtZSArICdcIicgKyBcIjpcIn0sXG4gICAgICB7IGJlZ2luOiBrZXlQcmVmaXggKyBcIidcIiArIGtleU5hbWUgKyBcIidcIiArIFwiOlwifVxuICAgIF1cbiAgfTtcblxuICB2YXIgVEVNUExBVEVfVkFSSUFCTEVTID0ge1xuICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXZhcmlhYmxlJyxcbiAgICB2YXJpYW50czogW1xuICAgICAgeyBiZWdpbjogJ1xce1xceycsIGVuZDogJ1xcfVxcfScgfSwgLy8gamluamEgdGVtcGxhdGVzIEFuc2libGVcbiAgICAgIHsgYmVnaW46ICclXFx7JywgZW5kOiAnXFx9JyB9IC8vIFJ1YnkgaTE4blxuICAgIF1cbiAgfTtcbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICB2YXJpYW50czogW1xuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvfSxcbiAgICAgIHtiZWdpbjogL1wiLywgZW5kOiAvXCIvfSxcbiAgICAgIHtiZWdpbjogL1xcUysvfVxuICAgIF0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgIFRFTVBMQVRFX1ZBUklBQkxFU1xuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNhc2VfaW5zZW5zaXRpdmU6IHRydWUsXG4gICAgYWxpYXNlczogWyd5bWwnLCAnWUFNTCcsICd5YW1sJ10sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIEtFWSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXi0tLVxccyokJyxcbiAgICAgICAgcmVsZXZhbmNlOiAxMFxuICAgICAgfSxcbiAgICAgIHsgLy8gbXVsdGkgbGluZSBzdHJpbmdcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdbXFxcXHw+XSAqJCcsXG4gICAgICAgIHJldHVybkVuZDogdHJ1ZSxcbiAgICAgICAgY29udGFpbnM6IFNUUklORy5jb250YWlucyxcbiAgICAgICAgLy8gdmVyeSBzaW1wbGUgdGVybWluYXRpb246IG5leHQgaGFzaCBrZXlcbiAgICAgICAgZW5kOiBLRVkudmFyaWFudHNbMF0uYmVnaW5cbiAgICAgIH0sXG4gICAgICB7IC8vIFJ1YnkvUmFpbHMgZXJiXG4gICAgICAgIGJlZ2luOiAnPCVbJT0tXT8nLCBlbmQ6ICdbJS1dPyU+JyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICdydWJ5JyxcbiAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIGRhdGEgdHlwZVxuICAgICAgICBjbGFzc05hbWU6ICd0eXBlJyxcbiAgICAgICAgYmVnaW46ICchIScgKyBobGpzLlVOREVSU0NPUkVfSURFTlRfUkUsXG4gICAgICB9LFxuICAgICAgeyAvLyBmcmFnbWVudCBpZCAmcmVmXG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyYnICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnLFxuICAgICAgfSxcbiAgICAgIHsgLy8gZnJhZ21lbnQgcmVmZXJlbmNlICpyZWZcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXFxcXConICsgaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFICsgJyQnXG4gICAgICB9LFxuICAgICAgeyAvLyBhcnJheSBsaXN0aW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ2J1bGxldCcsXG4gICAgICAgIGJlZ2luOiAnXiAqLScsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6IExJVEVSQUxTLFxuICAgICAgICBrZXl3b3Jkczoge2xpdGVyYWw6IExJVEVSQUxTfVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIFNUUklOR1xuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5IQVNIX0NPTU1FTlRfTU9ERSxcbiAgICAgIC8vIHZlcnNpb24gb2YgZm9ybWF0IGFuZCB0b3RhbCBhbW91bnQgb2YgdGVzdGNhc2VzXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdeVEFQIHZlcnNpb24gKFxcXFxkKykkJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdeMVxcXFwuXFxcXC4oXFxcXGQrKSQnIH1cbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICAvLyBZQU1MIGJsb2NrXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnKFxccyspPy0tLSQnLCBlbmQ6ICdcXFxcLlxcXFwuXFxcXC4kJyxcbiAgICAgICAgc3ViTGFuZ3VhZ2U6ICd5YW1sJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuXHQgIC8vIHRlc3RjYXNlIG51bWJlclxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICBiZWdpbjogJyAoXFxcXGQrKSAnXG4gICAgICB9LFxuXHQgIC8vIHRlc3RjYXNlIHN0YXR1cyBhbmQgZGVzY3JpcHRpb25cbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7IGJlZ2luOiAnXm9rJyB9LFxuICAgICAgICAgIHsgYmVnaW46ICdebm90IG9rJyB9XG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd0ayddLFxuICAgIGtleXdvcmRzOiAnYWZ0ZXIgYXBwZW5kIGFwcGx5IGFycmF5IGF1dG9fZXhlY29rIGF1dG9faW1wb3J0IGF1dG9fbG9hZCBhdXRvX21raW5kZXggJyArXG4gICAgICAnYXV0b19ta2luZGV4X29sZCBhdXRvX3F1YWxpZnkgYXV0b19yZXNldCBiZ2Vycm9yIGJpbmFyeSBicmVhayBjYXRjaCBjZCBjaGFuIGNsb2NrICcgK1xuICAgICAgJ2Nsb3NlIGNvbmNhdCBjb250aW51ZSBkZGUgZGljdCBlbmNvZGluZyBlb2YgZXJyb3IgZXZhbCBleGVjIGV4aXQgZXhwciBmYmxvY2tlZCAnICtcbiAgICAgICdmY29uZmlndXJlIGZjb3B5IGZpbGUgZmlsZWV2ZW50IGZpbGVuYW1lIGZsdXNoIGZvciBmb3JlYWNoIGZvcm1hdCBnZXRzIGdsb2IgZ2xvYmFsICcgK1xuICAgICAgJ2hpc3RvcnkgaHR0cCBpZiBpbmNyIGluZm8gaW50ZXJwIGpvaW4gbGFwcGVuZHwxMCBsYXNzaWdufDEwIGxpbmRleHwxMCBsaW5zZXJ0fDEwIGxpc3QgJyArXG4gICAgICAnbGxlbmd0aHwxMCBsb2FkIGxyYW5nZXwxMCBscmVwZWF0fDEwIGxyZXBsYWNlfDEwIGxyZXZlcnNlfDEwIGxzZWFyY2h8MTAgbHNldHwxMCBsc29ydHwxMCAnK1xuICAgICAgJ21hdGhmdW5jIG1hdGhvcCBtZW1vcnkgbXNnY2F0IG5hbWVzcGFjZSBvcGVuIHBhY2thZ2UgcGFycmF5IHBpZCBwa2c6OmNyZWF0ZSBwa2dfbWtJbmRleCAnK1xuICAgICAgJ3BsYXRmb3JtIHBsYXRmb3JtOjpzaGVsbCBwcm9jIHB1dHMgcHdkIHJlYWQgcmVmY2hhbiByZWdleHAgcmVnaXN0cnkgcmVnc3VifDEwIHJlbmFtZSAnK1xuICAgICAgJ3JldHVybiBzYWZlIHNjYW4gc2VlayBzZXQgc29ja2V0IHNvdXJjZSBzcGxpdCBzdHJpbmcgc3Vic3Qgc3dpdGNoIHRjbF9lbmRPZldvcmQgJytcbiAgICAgICd0Y2xfZmluZExpYnJhcnkgdGNsX3N0YXJ0T2ZOZXh0V29yZCB0Y2xfc3RhcnRPZlByZXZpb3VzV29yZCB0Y2xfd29yZEJyZWFrQWZ0ZXIgJytcbiAgICAgICd0Y2xfd29yZEJyZWFrQmVmb3JlIHRjbHRlc3QgdGNsdmFycyB0ZWxsIHRpbWUgdG0gdHJhY2UgdW5rbm93biB1bmxvYWQgdW5zZXQgdXBkYXRlICcrXG4gICAgICAndXBsZXZlbCB1cHZhciB2YXJpYWJsZSB2d2FpdCB3aGlsZScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVCgnO1sgXFxcXHRdKiMnLCAnJCcpLFxuICAgICAgaGxqcy5DT01NRU5UKCdeWyBcXFxcdF0qIycsICckJyksXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdwcm9jJyxcbiAgICAgICAgZW5kOiAnW1xcXFx7XScsXG4gICAgICAgIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgYmVnaW46ICdbIFxcXFx0XFxcXG5cXFxccl0rKDo6KT9bYS16QS1aX10oKDo6KT9bYS16QS1aMC05X10pKicsXG4gICAgICAgICAgICBlbmQ6ICdbIFxcXFx0XFxcXG5cXFxccl0nLFxuICAgICAgICAgICAgZW5kc1dpdGhQYXJlbnQ6IHRydWUsXG4gICAgICAgICAgICBleGNsdWRlRW5kOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCQoXFxcXHspPyg6Oik/W2EtekEtWl9dKCg6Oik/W2EtekEtWjAtOV9dKSpcXFxcKChbYS16QS1aMC05X10pKlxcXFwpJyxcbiAgICAgICAgICAgIGVuZDogJ1teYS16QS1aMC05X1xcXFx9XFxcXCRdJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmVnaW46ICdcXFxcJChcXFxceyk/KDo6KT9bYS16QS1aX10oKDo6KT9bYS16QS1aMC05X10pKicsXG4gICAgICAgICAgICBlbmQ6ICcoXFxcXCkpP1teYS16QS1aMC05X1xcXFx9XFxcXCRdJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLkFQT1NfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSksXG4gICAgICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXVxuICAgICAgfVxuICAgIF1cbiAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIENPTU1BTkQgPSB7XG4gICAgY2xhc3NOYW1lOiAndGFnJyxcbiAgICBiZWdpbjogL1xcXFwvLFxuICAgIHJlbGV2YW5jZTogMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICB7YmVnaW46IC9bYS16QS1a0LAt0Y/QkC3Rj10rWypdPy99LFxuICAgICAgICAgIHtiZWdpbjogL1teYS16QS1a0LAt0Y/QkC3RjzAtOV0vfVxuICAgICAgICBdLFxuICAgICAgICBzdGFydHM6IHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJywgLy8gYmVjYXVzZSBpdCBsb29rcyBsaWtlIGF0dHJpYnV0ZXMgaW4gSFRNTCB0YWdzXG4gICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFxbLywgZW5kOiAvXFxdL30sXG4gICAgICAgICAgICAgICAge2JlZ2luOiAvXFx7LywgZW5kOiAvXFx9L31cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVnaW46IC9cXHMqPVxccyovLCBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgcmVsZXZhbmNlOiAwLFxuICAgICAgICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICBiZWdpbjogLy0/XFxkKlxcLj9cXGQrKHB0fHBjfG1tfGNtfGlufGRkfGNjfGV4fGVtKT8vXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY29udGFpbnM6IFtcbiAgICAgIENPTU1BTkQsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2Zvcm11bGEnLFxuICAgICAgICBjb250YWluczogW0NPTU1BTkRdLFxuICAgICAgICByZWxldmFuY2U6IDAsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAvXFwkXFwkLywgZW5kOiAvXFwkXFwkL30sXG4gICAgICAgICAge2JlZ2luOiAvXFwkLywgZW5kOiAvXFwkL31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJyUnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVF9JTl9UWVBFUyA9ICdib29sIGJ5dGUgaTE2IGkzMiBpNjQgZG91YmxlIHN0cmluZyBiaW5hcnknO1xuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnbmFtZXNwYWNlIGNvbnN0IHR5cGVkZWYgc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24gdm9pZCBvbmV3YXkgc2V0IGxpc3QgbWFwIHJlcXVpcmVkIG9wdGlvbmFsJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICBCVUlMVF9JTl9UWVBFUyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnc3RydWN0IGVudW0gc2VydmljZSBleGNlcHRpb24nLCBlbmQ6IC9cXHsvLFxuICAgICAgICBpbGxlZ2FsOiAvXFxuLyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLmluaGVyaXQoaGxqcy5USVRMRV9NT0RFLCB7XG4gICAgICAgICAgICBzdGFydHM6IHtlbmRzV2l0aFBhcmVudDogdHJ1ZSwgZXhjbHVkZUVuZDogdHJ1ZX0gLy8gaGFjazogZWF0aW5nIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IHRpdGxlXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdcXFxcYihzZXR8bGlzdHxtYXApXFxcXHMqPCcsIGVuZDogJz4nLFxuICAgICAgICBrZXl3b3JkczogQlVJTFRfSU5fVFlQRVMsXG4gICAgICAgIGNvbnRhaW5zOiBbJ3NlbGYnXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBUUElEID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdbMS05XVswLTldKicsIC8qIG5vIGxlYWRpbmcgemVyb3MgKi9cbiAgICByZWxldmFuY2U6IDBcbiAgfTtcbiAgdmFyIFRQTEFCRUwgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3ltYm9sJyxcbiAgICBiZWdpbjogJzpbXlxcXFxdXSsnXG4gIH07XG4gIHZhciBUUERBVEEgPSB7XG4gICAgY2xhc3NOYW1lOiAnYnVpbHRfaW4nLFxuICAgIGJlZ2luOiAnKEFSfFB8UEFZTE9BRHxQUnxSfFNSfFJTUnxMQkx8VlJ8VUFMTXxNRVNTQUdFfFVUT09MfFVGUkFNRXxUSU1FUnxcXFxuICAgIFRJTUVSX09WRVJGTE9XfEpPSU5UX01BWF9TUEVFRHxSRVNVTUVfUFJPR3xESUFHX1JFQylcXFxcWycsIGVuZDogJ1xcXFxdJyxcbiAgICBjb250YWluczogW1xuICAgICAgJ3NlbGYnLFxuICAgICAgVFBJRCxcbiAgICAgIFRQTEFCRUxcbiAgICBdXG4gIH07XG4gIHZhciBUUElPID0ge1xuICAgIGNsYXNzTmFtZTogJ2J1aWx0X2luJyxcbiAgICBiZWdpbjogJyhBSXxBT3xESXxET3xGfFJJfFJPfFVJfFVPfEdJfEdPfFNJfFNPKVxcXFxbJywgZW5kOiAnXFxcXF0nLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICAnc2VsZicsXG4gICAgICBUUElELFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwgLyogZm9yIHBvcyBzZWN0aW9uIGF0IGJvdHRvbSAqL1xuICAgICAgVFBMQUJFTFxuICAgIF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnQUJPUlQgQUNDIEFESlVTVCBBTkQgQVBfTEQgQlJFQUsgQ0FMTCBDTlQgQ09MIENPTkRJVElPTiBDT05GSUcgREEgREIgJyArXG4gICAgICAgICdESVYgREVURUNUIEVMU0UgRU5EIEVOREZPUiBFUlJfTlVNIEVSUk9SX1BST0cgRklORSBGT1IgR1AgR1VBUkQgSU5DICcgK1xuICAgICAgICAnSUYgSk1QIExJTkVBUl9NQVhfU1BFRUQgTE9DSyBNT0QgTU9OSVRPUiBPRkZTRVQgT2Zmc2V0IE9SIE9WRVJSSURFICcgK1xuICAgICAgICAnUEFVU0UgUFJFRyBQVEggUlRfTEQgUlVOIFNFTEVDVCBTS0lQIFNraXAgVEEgVEIgVE8gVE9PTF9PRkZTRVQgJyArXG4gICAgICAgICdUb29sX09mZnNldCBVRiBVVCBVRlJBTUVfTlVNIFVUT09MX05VTSBVTkxPQ0sgV0FJVCBYIFkgWiBXIFAgUiBTVFJMRU4gJyArXG4gICAgICAgICdTVUJTVFIgRklORFNUUiBWT0ZGU0VUIFBST0cgQVRUUiBNTiBQT1MnLFxuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ09OIE9GRiBtYXhfc3BlZWQgTFBPUyBKUE9TIEVOQUJMRSBESVNBQkxFIFNUQVJUIFNUT1AgUkVTRVQnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAgVFBEQVRBLFxuICAgICAgVFBJTyxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnLyhQUk9HfEFUVFJ8TU58UE9TfEVORClcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRoaXMgaXMgZm9yIGNhc2VzIGxpa2UgLENBTEwgKi9cbiAgICAgICAgY2xhc3NOYW1lOiAna2V5d29yZCcsXG4gICAgICAgIGJlZ2luOiAnKENBTEx8UlVOfFBPSU5UX0xPR0lDfExCTClcXFxcYidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC8qIHRoaXMgaXMgZm9yIGNhc2VzIGxpa2UgQ05UMTAwIHdoZXJlIHRoZSBkZWZhdWx0IGxleGVtZXMgZG8gbm90XG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBrZXl3b3JkIGFuZCB0aGUgbnVtYmVyICovXG4gICAgICAgIGNsYXNzTmFtZTogJ2tleXdvcmQnLFxuICAgICAgICBiZWdpbjogJ1xcXFxiKEFDQ3xDTlR8U2tpcHxPZmZzZXR8UFNQRHxSVF9MRHxBUF9MRHxUb29sX09mZnNldCknXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAvKiB0byBjYXRjaCBudW1iZXJzIHRoYXQgZG8gbm90IGhhdmUgYSB3b3JkIGJvdW5kYXJ5IG9uIHRoZSBsZWZ0ICovXG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiAnXFxcXGQrKHNlY3xtc2VjfG1tL3NlY3xjbS9taW58aW5jaC9taW58ZGVnL3NlY3xtbXxpbnxjbSk/XFxcXGInLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJy8vJywgJ1s7JF0nKSxcbiAgICAgIGhsanMuQ09NTUVOVCgnIScsICdbOyRdJyksXG4gICAgICBobGpzLkNPTU1FTlQoJy0tZWc6JywgJyQnKSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJ1xuICAgICAgfSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogJ1xcXFwkW0EtWmEtejAtOV9dKydcbiAgICAgIH1cbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICB2YXIgUEFSQU1TID0ge1xuICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgYmVnaW46ICdcXFxcKCcsIGVuZDogJ1xcXFwpJ1xuICB9O1xuXG4gIHZhciBGVU5DVElPTl9OQU1FUyA9ICdhdHRyaWJ1dGUgYmxvY2sgY29uc3RhbnQgY3ljbGUgZGF0ZSBkdW1wIGluY2x1ZGUgJyArXG4gICAgICAgICAgICAgICAgICAnbWF4IG1pbiBwYXJlbnQgcmFuZG9tIHJhbmdlIHNvdXJjZSB0ZW1wbGF0ZV9mcm9tX3N0cmluZyc7XG5cbiAgdmFyIEZVTkNUSU9OUyA9IHtcbiAgICBiZWdpbktleXdvcmRzOiBGVU5DVElPTl9OQU1FUyxcbiAgICBrZXl3b3Jkczoge25hbWU6IEZVTkNUSU9OX05BTUVTfSxcbiAgICByZWxldmFuY2U6IDAsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIFBBUkFNU1xuICAgIF1cbiAgfTtcblxuICB2YXIgRklMVEVSID0ge1xuICAgIGJlZ2luOiAvXFx8W0EtWmEtel9dKzo/LyxcbiAgICBrZXl3b3JkczpcbiAgICAgICdhYnMgYmF0Y2ggY2FwaXRhbGl6ZSBjb252ZXJ0X2VuY29kaW5nIGRhdGUgZGF0ZV9tb2RpZnkgZGVmYXVsdCAnICtcbiAgICAgICdlc2NhcGUgZmlyc3QgZm9ybWF0IGpvaW4ganNvbl9lbmNvZGUga2V5cyBsYXN0IGxlbmd0aCBsb3dlciAnICtcbiAgICAgICdtZXJnZSBubDJiciBudW1iZXJfZm9ybWF0IHJhdyByZXBsYWNlIHJldmVyc2Ugcm91bmQgc2xpY2Ugc29ydCBzcGxpdCAnICtcbiAgICAgICdzdHJpcHRhZ3MgdGl0bGUgdHJpbSB1cHBlciB1cmxfZW5jb2RlJyxcbiAgICBjb250YWluczogW1xuICAgICAgRlVOQ1RJT05TXG4gICAgXVxuICB9O1xuXG4gIHZhciBUQUdTID0gJ2F1dG9lc2NhcGUgYmxvY2sgZG8gZW1iZWQgZXh0ZW5kcyBmaWx0ZXIgZmx1c2ggZm9yICcgK1xuICAgICdpZiBpbXBvcnQgaW5jbHVkZSBtYWNybyBzYW5kYm94IHNldCBzcGFjZWxlc3MgdXNlIHZlcmJhdGltJztcblxuICBUQUdTID0gVEFHUyArICcgJyArIFRBR1Muc3BsaXQoJyAnKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICdlbmQnICsgdH0pLmpvaW4oJyAnKTtcblxuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsnY3JhZnRjbXMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5DT01NRU5UKC9cXHsjLywgLyN9LyksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3RlbXBsYXRlLXRhZycsXG4gICAgICAgIGJlZ2luOiAvXFx7JS8sIGVuZDogLyV9LyxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICduYW1lJyxcbiAgICAgICAgICAgIGJlZ2luOiAvXFx3Ky8sXG4gICAgICAgICAgICBrZXl3b3JkczogVEFHUyxcbiAgICAgICAgICAgIHN0YXJ0czoge1xuICAgICAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtGSUxURVIsIEZVTkNUSU9OU10sXG4gICAgICAgICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAndGVtcGxhdGUtdmFyaWFibGUnLFxuICAgICAgICBiZWdpbjogL1xce1xcey8sIGVuZDogL319LyxcbiAgICAgICAgY29udGFpbnM6IFsnc2VsZicsIEZJTFRFUiwgRlVOQ1RJT05TXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBLRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2luIGlmIGZvciB3aGlsZSBmaW5hbGx5IHZhciBuZXcgZnVuY3Rpb24gZG8gcmV0dXJuIHZvaWQgZWxzZSBicmVhayBjYXRjaCAnICtcbiAgICAgICdpbnN0YW5jZW9mIHdpdGggdGhyb3cgY2FzZSBkZWZhdWx0IHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSB0eXBlb2YgZGVsZXRlICcgK1xuICAgICAgJ2xldCB5aWVsZCBjb25zdCBjbGFzcyBwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgZ2V0IHNldCBzdXBlciAnICtcbiAgICAgICdzdGF0aWMgaW1wbGVtZW50cyBlbnVtIGV4cG9ydCBpbXBvcnQgZGVjbGFyZSB0eXBlIG5hbWVzcGFjZSBhYnN0cmFjdCAnICtcbiAgICAgICdhcyBmcm9tIGV4dGVuZHMgYXN5bmMgYXdhaXQnLFxuICAgIGxpdGVyYWw6XG4gICAgICAndHJ1ZSBmYWxzZSBudWxsIHVuZGVmaW5lZCBOYU4gSW5maW5pdHknLFxuICAgIGJ1aWx0X2luOlxuICAgICAgJ2V2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50ICcgK1xuICAgICAgJ2VuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yICcgK1xuICAgICAgJ0V2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciAnICtcbiAgICAgICdUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSAnICtcbiAgICAgICdGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSAnICtcbiAgICAgICdVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSAnICtcbiAgICAgICdtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgYW55IG51bWJlciBib29sZWFuIHN0cmluZyB2b2lkIFByb21pc2UnXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3RzJ10sXG4gICAga2V5d29yZHM6IEtFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogL15cXHMqWydcIl11c2Ugc3RyaWN0WydcIl0vXG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHsgLy8gdGVtcGxhdGUgc3RyaW5nXG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnYCcsIGVuZDogJ2AnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQkFDS1NMQVNIX0VTQ0FQRSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwkXFxcXHsnLCBlbmQ6ICdcXFxcfSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBobGpzLkNfTElORV9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdudW1iZXInLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYigwW2JCXVswMV0rKScgfSxcbiAgICAgICAgICB7IGJlZ2luOiAnXFxcXGIoMFtvT11bMC03XSspJyB9LFxuICAgICAgICAgIHsgYmVnaW46IGhsanMuQ19OVU1CRVJfUkUgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7IC8vIFwidmFsdWVcIiBjb250YWluZXJcbiAgICAgICAgYmVnaW46ICcoJyArIGhsanMuUkVfU1RBUlRFUlNfUkUgKyAnfFxcXFxiKGNhc2V8cmV0dXJufHRocm93KVxcXFxiKVxcXFxzKicsXG4gICAgICAgIGtleXdvcmRzOiAncmV0dXJuIHRocm93IGNhc2UnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgIGhsanMuUkVHRVhQX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgYmVnaW46ICcoXFxcXCguKj9cXFxcKXwnICsgaGxqcy5JREVOVF9SRSArICcpXFxcXHMqPT4nLCByZXR1cm5CZWdpbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuZDogJ1xcXFxzKj0+JyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGJlZ2luOiBobGpzLklERU5UX1JFXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbjogL1xcKFxccypcXCkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgICAgICAgICBleGNsdWRlQmVnaW46IHRydWUsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAnc2VsZicsXG4gICAgICAgICAgICAgICAgICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICAgICAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREVcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdmdW5jdGlvbicsXG4gICAgICAgIGJlZ2luOiAnZnVuY3Rpb24nLCBlbmQ6IC9bXFx7O10vLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBrZXl3b3JkczogS0VZV09SRFMsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgIGhsanMuaW5oZXJpdChobGpzLlRJVExFX01PREUsIHtiZWdpbjogL1tBLVphLXokX11bMC05QS1aYS16JF9dKi99KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bXCInXFwoXS9cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGlsbGVnYWw6IC8lLyxcbiAgICAgICAgcmVsZXZhbmNlOiAwIC8vICgpID0+IHt9IGlzIG1vcmUgdHlwaWNhbCBpbiBUeXBlU2NyaXB0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnY29uc3RydWN0b3InLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgICdzZWxmJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdwYXJhbXMnLFxuICAgICAgICAgICAgYmVnaW46IC9cXCgvLCBlbmQ6IC9cXCkvLFxuICAgICAgICAgICAgZXhjbHVkZUJlZ2luOiB0cnVlLFxuICAgICAgICAgICAgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiBLRVlXT1JEUyxcbiAgICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgICAgICAgICAgaGxqcy5DX0JMT0NLX0NPTU1FTlRfTU9ERVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGlsbGVnYWw6IC9bXCInXFwoXS9cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7IC8vIHByZXZlbnQgcmVmZXJlbmNlcyBsaWtlIG1vZHVsZS5pZCBmcm9tIGJlaW5nIGhpZ2xpZ2h0ZWQgYXMgbW9kdWxlIGRlZmluaXRpb25zXG4gICAgICAgIGJlZ2luOiAvbW9kdWxlXFwuLyxcbiAgICAgICAga2V5d29yZHM6IHtidWlsdF9pbjogJ21vZHVsZSd9LFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdtb2R1bGUnLCBlbmQ6IC9cXHsvLCBleGNsdWRlRW5kOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnaW50ZXJmYWNlJywgZW5kOiAvXFx7LywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6ICdpbnRlcmZhY2UgZXh0ZW5kcydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAvXFwkWyguXS8gLy8gcmVsZXZhbmNlIGJvb3N0ZXIgZm9yIGEgcGF0dGVybiBjb21tb24gdG8gSlMgbGliczogYCQoc29tZXRoaW5nKWAgYW5kIGAkLnNvbWV0aGluZ2BcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnXFxcXC4nICsgaGxqcy5JREVOVF9SRSwgcmVsZXZhbmNlOiAwIC8vIGhhY2s6IHByZXZlbnRzIGRldGVjdGlvbiBvZiBrZXl3b3JkcyBhZnRlciBkb3RzXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJywgYmVnaW46ICdAW0EtWmEtel0rJ1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8vIFZhbHVlIHR5cGVzXG4gICAgICAgICdjaGFyIHVjaGFyIHVuaWNoYXIgaW50IHVpbnQgbG9uZyB1bG9uZyBzaG9ydCB1c2hvcnQgaW50OCBpbnQxNiBpbnQzMiBpbnQ2NCB1aW50OCAnICtcbiAgICAgICAgJ3VpbnQxNiB1aW50MzIgdWludDY0IGZsb2F0IGRvdWJsZSBib29sIHN0cnVjdCBlbnVtIHN0cmluZyB2b2lkICcgK1xuICAgICAgICAvLyBSZWZlcmVuY2UgdHlwZXNcbiAgICAgICAgJ3dlYWsgdW5vd25lZCBvd25lZCAnICtcbiAgICAgICAgLy8gTW9kaWZpZXJzXG4gICAgICAgICdhc3luYyBzaWduYWwgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBvdmVycmlkZSB2aXJ0dWFsIGRlbGVnYXRlICcgK1xuICAgICAgICAvLyBDb250cm9sIFN0cnVjdHVyZXNcbiAgICAgICAgJ2lmIHdoaWxlIGRvIGZvciBmb3JlYWNoIGVsc2Ugc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCByZXR1cm4gdHJ5IGNhdGNoICcgK1xuICAgICAgICAvLyBWaXNpYmlsaXR5XG4gICAgICAgICdwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgaW50ZXJuYWwgJyArXG4gICAgICAgIC8vIE90aGVyXG4gICAgICAgICd1c2luZyBuZXcgdGhpcyBnZXQgc2V0IGNvbnN0IHN0ZG91dCBzdGRpbiBzdGRlcnIgdmFyJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnREJ1cyBHTGliIENDb2RlIEdlZSBPYmplY3QgR3RrIFBvc2l4JyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICdmYWxzZSB0cnVlIG51bGwnXG4gICAgfSxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdjbGFzcycsXG4gICAgICAgIGJlZ2luS2V5d29yZHM6ICdjbGFzcyBpbnRlcmZhY2UgbmFtZXNwYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6ICdbXiw6XFxcXG5cXFxcc1xcXFwuXScsXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgaGxqcy5VTkRFUlNDT1JFX1RJVExFX01PREVcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnXCJcIlwiJywgZW5kOiAnXCJcIlwiJyxcbiAgICAgICAgcmVsZXZhbmNlOiA1XG4gICAgICB9LFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIGhsanMuQ19OVU1CRVJfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbWV0YScsXG4gICAgICAgIGJlZ2luOiAnXiMnLCBlbmQ6ICckJyxcbiAgICAgICAgcmVsZXZhbmNlOiAyXG4gICAgICB9XG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgcmV0dXJuIHtcbiAgICBhbGlhc2VzOiBbJ3ZiJ10sXG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2FkZGhhbmRsZXIgYWRkcmVzc29mIGFsaWFzIGFuZCBhbmRhbHNvIGFnZ3JlZ2F0ZSBhbnNpIGFzIGFzc2VtYmx5IGF1dG8gYmluYXJ5IGJ5IGJ5cmVmIGJ5dmFsICcgKyAvKiBhLWIgKi9cbiAgICAgICAgJ2NhbGwgY2FzZSBjYXRjaCBjbGFzcyBjb21wYXJlIGNvbnN0IGNvbnRpbnVlIGN1c3RvbSBkZWNsYXJlIGRlZmF1bHQgZGVsZWdhdGUgZGltIGRpc3RpbmN0IGRvICcgKyAvKiBjLWQgKi9cbiAgICAgICAgJ2VhY2ggZXF1YWxzIGVsc2UgZWxzZWlmIGVuZCBlbnVtIGVyYXNlIGVycm9yIGV2ZW50IGV4aXQgZXhwbGljaXQgZmluYWxseSBmb3IgZnJpZW5kIGZyb20gZnVuY3Rpb24gJyArIC8qIGUtZiAqL1xuICAgICAgICAnZ2V0IGdsb2JhbCBnb3RvIGdyb3VwIGhhbmRsZXMgaWYgaW1wbGVtZW50cyBpbXBvcnRzIGluIGluaGVyaXRzIGludGVyZmFjZSBpbnRvIGlzIGlzZmFsc2UgaXNub3QgaXN0cnVlICcgKyAvKiBnLWkgKi9cbiAgICAgICAgJ2pvaW4ga2V5IGxldCBsaWIgbGlrZSBsb29wIG1lIG1pZCBtb2QgbW9kdWxlIG11c3Rpbmhlcml0IG11c3RvdmVycmlkZSBteWJhc2UgbXljbGFzcyAnICsgLyogai1tICovXG4gICAgICAgICduYW1lc3BhY2UgbmFycm93aW5nIG5ldyBuZXh0IG5vdCBub3Rpbmhlcml0YWJsZSBub3RvdmVycmlkYWJsZSAnICsgLyogbiAqL1xuICAgICAgICAnb2Ygb2ZmIG9uIG9wZXJhdG9yIG9wdGlvbiBvcHRpb25hbCBvciBvcmRlciBvcmVsc2Ugb3ZlcmxvYWRzIG92ZXJyaWRhYmxlIG92ZXJyaWRlcyAnICsgLyogbyAqL1xuICAgICAgICAncGFyYW1hcnJheSBwYXJ0aWFsIHByZXNlcnZlIHByaXZhdGUgcHJvcGVydHkgcHJvdGVjdGVkIHB1YmxpYyAnICsgLyogcCAqL1xuICAgICAgICAncmFpc2VldmVudCByZWFkb25seSByZWRpbSByZW0gcmVtb3ZlaGFuZGxlciByZXN1bWUgcmV0dXJuICcgKyAvKiByICovXG4gICAgICAgICdzZWxlY3Qgc2V0IHNoYWRvd3Mgc2hhcmVkIHNraXAgc3RhdGljIHN0ZXAgc3RvcCBzdHJ1Y3R1cmUgc3RyaWN0IHN1YiBzeW5jbG9jayAnICsgLyogcyAqL1xuICAgICAgICAndGFrZSB0ZXh0IHRoZW4gdGhyb3cgdG8gdHJ5IHVuaWNvZGUgdW50aWwgdXNpbmcgd2hlbiB3aGVyZSB3aGlsZSB3aWRlbmluZyB3aXRoIHdpdGhldmVudHMgd3JpdGVvbmx5IHhvcicsIC8qIHQteCAqL1xuICAgICAgYnVpbHRfaW46XG4gICAgICAgICdib29sZWFuIGJ5dGUgY2Jvb2wgY2J5dGUgY2NoYXIgY2RhdGUgY2RlYyBjZGJsIGNoYXIgY2ludCBjbG5nIGNvYmogY3NieXRlIGNzaG9ydCBjc25nIGNzdHIgY3R5cGUgJyArICAvKiBiLWMgKi9cbiAgICAgICAgJ2RhdGUgZGVjaW1hbCBkaXJlY3RjYXN0IGRvdWJsZSBnZXR0eXBlIGdldHhtbG5hbWVzcGFjZSBpaWYgaW50ZWdlciBsb25nIG9iamVjdCAnICsgLyogZC1vICovXG4gICAgICAgICdzYnl0ZSBzaG9ydCBzaW5nbGUgc3RyaW5nIHRyeWNhc3QgdHlwZW9mIHVpbnRlZ2VyIHVsb25nIHVzaG9ydCcsIC8qIHMtdSAqL1xuICAgICAgbGl0ZXJhbDpcbiAgICAgICAgJ3RydWUgZmFsc2Ugbm90aGluZydcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcvL3x7fH18ZW5kaWZ8Z29zdWJ8dmFyaWFudHx3ZW5kJywgLyogcmVzZXJ2ZWQgZGVwcmVjYXRlZCBrZXl3b3JkcyAqL1xuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5RVU9URV9TVFJJTkdfTU9ERSwge2NvbnRhaW5zOiBbe2JlZ2luOiAnXCJcIid9XX0pLFxuICAgICAgaGxqcy5DT01NRU5UKFxuICAgICAgICAnXFwnJyxcbiAgICAgICAgJyQnLFxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuQmVnaW46IHRydWUsXG4gICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICdcXCdcXCdcXCd8PCEtLXwtLT4nLFxuICAgICAgICAgICAgICBjb250YWluczogW2hsanMuUEhSQVNBTF9XT1JEU19NT0RFXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZG9jdGFnJyxcbiAgICAgICAgICAgICAgYmVnaW46ICc8Lz8nLCBlbmQ6ICc+JyxcbiAgICAgICAgICAgICAgY29udGFpbnM6IFtobGpzLlBIUkFTQUxfV09SRFNfTU9ERV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJyMnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2lmIGVsc2UgZWxzZWlmIGVuZCByZWdpb24gZXh0ZXJuYWxzb3VyY2UnfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd2YnMnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnY2FsbCBjbGFzcyBjb25zdCBkaW0gZG8gbG9vcCBlcmFzZSBleGVjdXRlIGV4ZWN1dGVnbG9iYWwgZXhpdCBmb3IgZWFjaCBuZXh0IGZ1bmN0aW9uICcgK1xuICAgICAgICAnaWYgdGhlbiBlbHNlIG9uIGVycm9yIG9wdGlvbiBleHBsaWNpdCBuZXcgcHJpdmF0ZSBwcm9wZXJ0eSBsZXQgZ2V0IHB1YmxpYyByYW5kb21pemUgJyArXG4gICAgICAgICdyZWRpbSByZW0gc2VsZWN0IGNhc2Ugc2V0IHN0b3Agc3ViIHdoaWxlIHdlbmQgd2l0aCBlbmQgdG8gZWxzZWlmIGlzIG9yIHhvciBhbmQgbm90ICcgK1xuICAgICAgICAnY2xhc3NfaW5pdGlhbGl6ZSBjbGFzc190ZXJtaW5hdGUgZGVmYXVsdCBwcmVzZXJ2ZSBpbiBtZSBieXZhbCBieXJlZiBzdGVwIHJlc3VtZSBnb3RvJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnbGNhc2UgbW9udGggdmFydHlwZSBpbnN0cnJldiB1Ym91bmQgc2V0bG9jYWxlIGdldG9iamVjdCByZ2IgZ2V0cmVmIHN0cmluZyAnICtcbiAgICAgICAgJ3dlZWtkYXluYW1lIHJuZCBkYXRlYWRkIG1vbnRobmFtZSBub3cgZGF5IG1pbnV0ZSBpc2FycmF5IGNib29sIHJvdW5kIGZvcm1hdGN1cnJlbmN5ICcgK1xuICAgICAgICAnY29udmVyc2lvbnMgY3NuZyB0aW1ldmFsdWUgc2Vjb25kIHllYXIgc3BhY2UgYWJzIGNsbmcgdGltZXNlcmlhbCBmaXhzIGxlbiBhc2MgJyArXG4gICAgICAgICdpc2VtcHR5IG1hdGhzIGRhdGVzZXJpYWwgYXRuIHRpbWVyIGlzb2JqZWN0IGZpbHRlciB3ZWVrZGF5IGRhdGV2YWx1ZSBjY3VyIGlzZGF0ZSAnICtcbiAgICAgICAgJ2luc3RyIGRhdGVkaWZmIGZvcm1hdGRhdGV0aW1lIHJlcGxhY2UgaXNudWxsIHJpZ2h0IHNnbiBhcnJheSBzbnVtZXJpYyBsb2cgY2RibCBoZXggJyArXG4gICAgICAgICdjaHIgbGJvdW5kIG1zZ2JveCB1Y2FzZSBnZXRsb2NhbGUgY29zIGNkYXRlIGNieXRlIHJ0cmltIGpvaW4gaG91ciBvY3QgdHlwZW5hbWUgdHJpbSAnICtcbiAgICAgICAgJ3N0cmNvbXAgaW50IGNyZWF0ZW9iamVjdCBsb2FkcGljdHVyZSB0YW4gZm9ybWF0bnVtYmVyIG1pZCBzY3JpcHRlbmdpbmVidWlsZHZlcnNpb24gJyArXG4gICAgICAgICdzY3JpcHRlbmdpbmUgc3BsaXQgc2NyaXB0ZW5naW5lbWlub3J2ZXJzaW9uIGNpbnQgc2luIGRhdGVwYXJ0IGx0cmltIHNxciAnICtcbiAgICAgICAgJ3NjcmlwdGVuZ2luZW1ham9ydmVyc2lvbiB0aW1lIGRlcml2ZWQgZXZhbCBkYXRlIGZvcm1hdHBlcmNlbnQgZXhwIGlucHV0Ym94IGxlZnQgYXNjdyAnICtcbiAgICAgICAgJ2NocncgcmVnZXhwIHNlcnZlciByZXNwb25zZSByZXF1ZXN0IGNzdHIgZXJyJyxcbiAgICAgIGxpdGVyYWw6XG4gICAgICAgICd0cnVlIGZhbHNlIG51bGwgbm90aGluZyBlbXB0eSdcbiAgICB9LFxuICAgIGlsbGVnYWw6ICcvLycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuaW5oZXJpdChobGpzLlFVT1RFX1NUUklOR19NT0RFLCB7Y29udGFpbnM6IFt7YmVnaW46ICdcIlwiJ31dfSksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgIC8nLyxcbiAgICAgICAgLyQvLFxuICAgICAgICB7XG4gICAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNfTlVNQkVSX01PREVcbiAgICBdXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaGxqcykge1xuICByZXR1cm4ge1xuICAgIHN1Ykxhbmd1YWdlOiAneG1sJyxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBiZWdpbjogJzwlJywgZW5kOiAnJT4nLFxuICAgICAgICBzdWJMYW5ndWFnZTogJ3Zic2NyaXB0J1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVl9LRVlXT1JEUyA9IHtcbiAgICBrZXl3b3JkOlxuICAgICAgJ2FjY2VwdF9vbiBhbGlhcyBhbHdheXMgYWx3YXlzX2NvbWIgYWx3YXlzX2ZmIGFsd2F5c19sYXRjaCBhbmQgYXNzZXJ0IGFzc2lnbiAnICtcbiAgICAgICdhc3N1bWUgYXV0b21hdGljIGJlZm9yZSBiZWdpbiBiaW5kIGJpbnMgYmluc29mIGJpdCBicmVhayBidWZ8MCBidWZpZjAgYnVmaWYxICcgK1xuICAgICAgJ2J5dGUgY2FzZSBjYXNleCBjYXNleiBjZWxsIGNoYW5kbGUgY2hlY2tlciBjbGFzcyBjbG9ja2luZyBjbW9zIGNvbmZpZyBjb25zdCAnICtcbiAgICAgICdjb25zdHJhaW50IGNvbnRleHQgY29udGludWUgY292ZXIgY292ZXJncm91cCBjb3ZlcnBvaW50IGNyb3NzIGRlYXNzaWduIGRlZmF1bHQgJyArXG4gICAgICAnZGVmcGFyYW0gZGVzaWduIGRpc2FibGUgZGlzdCBkbyBlZGdlIGVsc2UgZW5kIGVuZGNhc2UgZW5kY2hlY2tlciBlbmRjbGFzcyAnICtcbiAgICAgICdlbmRjbG9ja2luZyBlbmRjb25maWcgZW5kZnVuY3Rpb24gZW5kZ2VuZXJhdGUgZW5kZ3JvdXAgZW5kaW50ZXJmYWNlIGVuZG1vZHVsZSAnICtcbiAgICAgICdlbmRwYWNrYWdlIGVuZHByaW1pdGl2ZSBlbmRwcm9ncmFtIGVuZHByb3BlcnR5IGVuZHNwZWNpZnkgZW5kc2VxdWVuY2UgZW5kdGFibGUgJyArXG4gICAgICAnZW5kdGFzayBlbnVtIGV2ZW50IGV2ZW50dWFsbHkgZXhwZWN0IGV4cG9ydCBleHRlbmRzIGV4dGVybiBmaW5hbCBmaXJzdF9tYXRjaCBmb3IgJyArXG4gICAgICAnZm9yY2UgZm9yZWFjaCBmb3JldmVyIGZvcmsgZm9ya2pvaW4gZnVuY3Rpb24gZ2VuZXJhdGV8NSBnZW52YXIgZ2xvYmFsIGhpZ2h6MCBoaWdoejEgJyArXG4gICAgICAnaWYgaWZmIGlmbm9uZSBpZ25vcmVfYmlucyBpbGxlZ2FsX2JpbnMgaW1wbGVtZW50cyBpbXBsaWVzIGltcG9ydCBpbmNkaXIgaW5jbHVkZSAnICtcbiAgICAgICdpbml0aWFsIGlub3V0IGlucHV0IGluc2lkZSBpbnN0YW5jZSBpbnQgaW50ZWdlciBpbnRlcmNvbm5lY3QgaW50ZXJmYWNlIGludGVyc2VjdCAnICtcbiAgICAgICdqb2luIGpvaW5fYW55IGpvaW5fbm9uZSBsYXJnZSBsZXQgbGlibGlzdCBsaWJyYXJ5IGxvY2FsIGxvY2FscGFyYW0gbG9naWMgbG9uZ2ludCAnICtcbiAgICAgICdtYWNyb21vZHVsZSBtYXRjaGVzIG1lZGl1bSBtb2Rwb3J0IG1vZHVsZSBuYW5kIG5lZ2VkZ2UgbmV0dHlwZSBuZXcgbmV4dHRpbWUgbm1vcyAnICtcbiAgICAgICdub3Igbm9zaG93Y2FuY2VsbGVkIG5vdCBub3RpZjAgbm90aWYxIG9yIG91dHB1dCBwYWNrYWdlIHBhY2tlZCBwYXJhbWV0ZXIgcG1vcyAnICtcbiAgICAgICdwb3NlZGdlIHByaW1pdGl2ZSBwcmlvcml0eSBwcm9ncmFtIHByb3BlcnR5IHByb3RlY3RlZCBwdWxsMCBwdWxsMSBwdWxsZG93biBwdWxsdXAgJyArXG4gICAgICAncHVsc2VzdHlsZV9vbmRldGVjdCBwdWxzZXN0eWxlX29uZXZlbnQgcHVyZSByYW5kIHJhbmRjIHJhbmRjYXNlIHJhbmRzZXF1ZW5jZSByY21vcyAnICtcbiAgICAgICdyZWFsIHJlYWx0aW1lIHJlZiByZWcgcmVqZWN0X29uIHJlbGVhc2UgcmVwZWF0IHJlc3RyaWN0IHJldHVybiBybm1vcyBycG1vcyBydHJhbiAnICtcbiAgICAgICdydHJhbmlmMCBydHJhbmlmMSBzX2Fsd2F5cyBzX2V2ZW50dWFsbHkgc19uZXh0dGltZSBzX3VudGlsIHNfdW50aWxfd2l0aCBzY2FsYXJlZCAnICtcbiAgICAgICdzZXF1ZW5jZSBzaG9ydGludCBzaG9ydHJlYWwgc2hvd2NhbmNlbGxlZCBzaWduZWQgc21hbGwgc29mdCBzb2x2ZSBzcGVjaWZ5IHNwZWNwYXJhbSAnICtcbiAgICAgICdzdGF0aWMgc3RyaW5nIHN0cm9uZyBzdHJvbmcwIHN0cm9uZzEgc3RydWN0IHN1cGVyIHN1cHBseTAgc3VwcGx5MSBzeW5jX2FjY2VwdF9vbiAnICtcbiAgICAgICdzeW5jX3JlamVjdF9vbiB0YWJsZSB0YWdnZWQgdGFzayB0aGlzIHRocm91Z2hvdXQgdGltZSB0aW1lcHJlY2lzaW9uIHRpbWV1bml0IHRyYW4gJyArXG4gICAgICAndHJhbmlmMCB0cmFuaWYxIHRyaSB0cmkwIHRyaTEgdHJpYW5kIHRyaW9yIHRyaXJlZyB0eXBlIHR5cGVkZWYgdW5pb24gdW5pcXVlIHVuaXF1ZTAgJyArXG4gICAgICAndW5zaWduZWQgdW50aWwgdW50aWxfd2l0aCB1bnR5cGVkIHVzZSB1d2lyZSB2YXIgdmVjdG9yZWQgdmlydHVhbCB2b2lkIHdhaXQgd2FpdF9vcmRlciAnICtcbiAgICAgICd3YW5kIHdlYWsgd2VhazAgd2VhazEgd2hpbGUgd2lsZGNhcmQgd2lyZSB3aXRoIHdpdGhpbiB3b3IgeG5vciB4b3InLFxuICAgIGxpdGVyYWw6XG4gICAgICAnbnVsbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnJGZpbmlzaCAkc3RvcCAkZXhpdCAkZmF0YWwgJGVycm9yICR3YXJuaW5nICRpbmZvICRyZWFsdGltZSAkdGltZSAkcHJpbnR0aW1lc2NhbGUgJyArXG4gICAgICAnJGJpdHN0b3JlYWwgJGJpdHN0b3Nob3J0cmVhbCAkaXRvciAkc2lnbmVkICRjYXN0ICRiaXRzICRzdGltZSAkdGltZWZvcm1hdCAnICtcbiAgICAgICckcmVhbHRvYml0cyAkc2hvcnRyZWFsdG9iaXRzICRydG9pICR1bnNpZ25lZCAkYXNzZXJ0b24gJGFzc2VydGtpbGwgJGFzc2VydHBhc3NvbiAnICtcbiAgICAgICckYXNzZXJ0ZmFpbG9uICRhc3NlcnRub252YWN1b3Vzb24gJGFzc2VydG9mZiAkYXNzZXJ0Y29udHJvbCAkYXNzZXJ0cGFzc29mZiAnICtcbiAgICAgICckYXNzZXJ0ZmFpbG9mZiAkYXNzZXJ0dmFjdW91c29mZiAkaXN1bmJvdW5kZWQgJHNhbXBsZWQgJGZlbGwgJGNoYW5nZWQgJHBhc3RfZ2NsayAnICtcbiAgICAgICckZmVsbF9nY2xrICRjaGFuZ2VkX2djbGsgJHJpc2luZ19nY2xrICRzdGVhZHlfZ2NsayAkY292ZXJhZ2VfY29udHJvbCAnICtcbiAgICAgICckY292ZXJhZ2VfZ2V0ICRjb3ZlcmFnZV9zYXZlICRzZXRfY292ZXJhZ2VfZGJfbmFtZSAkcm9zZSAkc3RhYmxlICRwYXN0ICcgK1xuICAgICAgJyRyb3NlX2djbGsgJHN0YWJsZV9nY2xrICRmdXR1cmVfZ2NsayAkZmFsbGluZ19nY2xrICRjaGFuZ2luZ19nY2xrICRkaXNwbGF5ICcgK1xuICAgICAgJyRjb3ZlcmFnZV9nZXRfbWF4ICRjb3ZlcmFnZV9tZXJnZSAkZ2V0X2NvdmVyYWdlICRsb2FkX2NvdmVyYWdlX2RiICR0eXBlbmFtZSAnICtcbiAgICAgICckdW5wYWNrZWRfZGltZW5zaW9ucyAkbGVmdCAkbG93ICRpbmNyZW1lbnQgJGNsb2cyICRsbiAkbG9nMTAgJGV4cCAkc3FydCAkcG93ICcgK1xuICAgICAgJyRmbG9vciAkY2VpbCAkc2luICRjb3MgJHRhbiAkY291bnRiaXRzICRvbmVob3QgJGlzdW5rbm93biAkZmF0YWwgJHdhcm5pbmcgJyArXG4gICAgICAnJGRpbWVuc2lvbnMgJHJpZ2h0ICRoaWdoICRzaXplICRhc2luICRhY29zICRhdGFuICRhdGFuMiAkaHlwb3QgJHNpbmggJGNvc2ggJyArXG4gICAgICAnJHRhbmggJGFzaW5oICRhY29zaCAkYXRhbmggJGNvdW50b25lcyAkb25laG90MCAkZXJyb3IgJGluZm8gJHJhbmRvbSAnICtcbiAgICAgICckZGlzdF9jaGlfc3F1YXJlICRkaXN0X2VybGFuZyAkZGlzdF9leHBvbmVudGlhbCAkZGlzdF9ub3JtYWwgJGRpc3RfcG9pc3NvbiAnICtcbiAgICAgICckZGlzdF90ICRkaXN0X3VuaWZvcm0gJHFfaW5pdGlhbGl6ZSAkcV9yZW1vdmUgJHFfZXhhbSAkYXN5bmMkYW5kJGFycmF5ICcgK1xuICAgICAgJyRhc3luYyRuYW5kJGFycmF5ICRhc3luYyRvciRhcnJheSAkYXN5bmMkbm9yJGFycmF5ICRzeW5jJGFuZCRhcnJheSAnICtcbiAgICAgICckc3luYyRuYW5kJGFycmF5ICRzeW5jJG9yJGFycmF5ICRzeW5jJG5vciRhcnJheSAkcV9hZGQgJHFfZnVsbCAkcHNwcmludGYgJyArXG4gICAgICAnJGFzeW5jJGFuZCRwbGFuZSAkYXN5bmMkbmFuZCRwbGFuZSAkYXN5bmMkb3IkcGxhbmUgJGFzeW5jJG5vciRwbGFuZSAnICtcbiAgICAgICckc3luYyRhbmQkcGxhbmUgJHN5bmMkbmFuZCRwbGFuZSAkc3luYyRvciRwbGFuZSAkc3luYyRub3IkcGxhbmUgJHN5c3RlbSAnICtcbiAgICAgICckZGlzcGxheSAkZGlzcGxheWIgJGRpc3BsYXloICRkaXNwbGF5byAkc3Ryb2JlICRzdHJvYmViICRzdHJvYmVoICRzdHJvYmVvICcgK1xuICAgICAgJyR3cml0ZSAkcmVhZG1lbWIgJHJlYWRtZW1oICR3cml0ZW1lbWggJHZhbHVlJHBsdXNhcmdzICcgK1xuICAgICAgJyRkdW1wdmFycyAkZHVtcG9uICRkdW1wbGltaXQgJGR1bXBwb3J0cyAkZHVtcHBvcnRzb24gJGR1bXBwb3J0c2xpbWl0ICcgK1xuICAgICAgJyR3cml0ZWIgJHdyaXRlaCAkd3JpdGVvICRtb25pdG9yICRtb25pdG9yYiAkbW9uaXRvcmggJG1vbml0b3JvICR3cml0ZW1lbWIgJyArXG4gICAgICAnJGR1bXBmaWxlICRkdW1wb2ZmICRkdW1wYWxsICRkdW1wZmx1c2ggJGR1bXBwb3J0c29mZiAkZHVtcHBvcnRzYWxsICcgK1xuICAgICAgJyRkdW1wcG9ydHNmbHVzaCAkZmNsb3NlICRmZGlzcGxheSAkZmRpc3BsYXliICRmZGlzcGxheWggJGZkaXNwbGF5byAnICtcbiAgICAgICckZnN0cm9iZSAkZnN0cm9iZWIgJGZzdHJvYmVoICRmc3Ryb2JlbyAkc3dyaXRlICRzd3JpdGViICRzd3JpdGVoICcgK1xuICAgICAgJyRzd3JpdGVvICRmc2NhbmYgJGZyZWFkICRmc2VlayAkZmZsdXNoICRmZW9mICRmb3BlbiAkZndyaXRlICRmd3JpdGViICcgK1xuICAgICAgJyRmd3JpdGVoICRmd3JpdGVvICRmbW9uaXRvciAkZm1vbml0b3JiICRmbW9uaXRvcmggJGZtb25pdG9ybyAkc2Zvcm1hdCAnICtcbiAgICAgICckc2Zvcm1hdGYgJGZnZXRjICR1bmdldGMgJGZnZXRzICRzc2NhbmYgJHJld2luZCAkZnRlbGwgJGZlcnJvcidcbiAgICB9O1xuICByZXR1cm4ge1xuICAgIGFsaWFzZXM6IFsndicsICdzdicsICdzdmgnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiBmYWxzZSxcbiAgICBrZXl3b3JkczogU1ZfS0VZV09SRFMsIGxleGVtZXM6IC9bXFx3XFwkXSsvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgICAgaGxqcy5RVU9URV9TVFJJTkdfTU9ERSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdLFxuICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgIHtiZWdpbjogJ1xcXFxiKChcXFxcZCtcXCcoYnxofG98ZHxCfEh8T3xEKSlbMC05eHpYWmEtZkEtRl9dKyknfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxcQigoXFwnKGJ8aHxvfGR8QnxIfE98RCkpWzAtOXh6WFphLWZBLUZfXSspJ30sXG4gICAgICAgICAge2JlZ2luOiAnXFxcXGIoWzAtOV9dKSsnLCByZWxldmFuY2U6IDB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICAvKiBwYXJhbWV0ZXJzIHRvIGluc3RhbmNlcyAqL1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAge2JlZ2luOiAnI1xcXFwoKD8hcGFyYW1ldGVyKS4rXFxcXCknfSxcbiAgICAgICAgICB7YmVnaW46ICdcXFxcLlxcXFx3KycsIHJlbGV2YW5jZTogMH0sXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgICAgICBiZWdpbjogJ2AnLCBlbmQ6ICckJyxcbiAgICAgICAga2V5d29yZHM6IHsnbWV0YS1rZXl3b3JkJzogJ2RlZmluZSBfX0ZJTEVfXyAnICtcbiAgICAgICAgICAnX19MSU5FX18gYmVnaW5fa2V5d29yZHMgY2VsbGRlZmluZSBkZWZhdWx0X25ldHR5cGUgZGVmaW5lICcgK1xuICAgICAgICAgICdlbHNlIGVsc2lmIGVuZF9rZXl3b3JkcyBlbmRjZWxsZGVmaW5lIGVuZGlmIGlmZGVmIGlmbmRlZiAnICtcbiAgICAgICAgICAnaW5jbHVkZSBsaW5lIG5vdW5jb25uZWN0ZWRfZHJpdmUgcHJhZ21hIHJlc2V0YWxsIHRpbWVzY2FsZSAnICtcbiAgICAgICAgICAndW5jb25uZWN0ZWRfZHJpdmUgdW5kZWYgdW5kZWZpbmVhbGwnfSxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9XG4gICAgXVxuICB9OyAvLyByZXR1cm5cbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgVkhETCBudW1lcmljIGxpdGVyYWxzLlxuXG4gIC8vIERlY2ltYWwgbGl0ZXJhbDpcbiAgdmFyIElOVEVHRVJfUkUgPSAnXFxcXGQoX3xcXFxcZCkqJztcbiAgdmFyIEVYUE9ORU5UX1JFID0gJ1tlRV1bLStdPycgKyBJTlRFR0VSX1JFO1xuICB2YXIgREVDSU1BTF9MSVRFUkFMX1JFID0gSU5URUdFUl9SRSArICcoXFxcXC4nICsgSU5URUdFUl9SRSArICcpPycgKyAnKCcgKyBFWFBPTkVOVF9SRSArICcpPyc7XG4gIC8vIEJhc2VkIGxpdGVyYWw6XG4gIHZhciBCQVNFRF9JTlRFR0VSX1JFID0gJ1xcXFx3Kyc7XG4gIHZhciBCQVNFRF9MSVRFUkFMX1JFID0gSU5URUdFUl9SRSArICcjJyArIEJBU0VEX0lOVEVHRVJfUkUgKyAnKFxcXFwuJyArIEJBU0VEX0lOVEVHRVJfUkUgKyAnKT8nICsgJyMnICsgJygnICsgRVhQT05FTlRfUkUgKyAnKT8nO1xuXG4gIHZhciBOVU1CRVJfUkUgPSAnXFxcXGIoJyArIEJBU0VEX0xJVEVSQUxfUkUgKyAnfCcgKyBERUNJTUFMX0xJVEVSQUxfUkUgKyAnKSc7XG5cbiAgcmV0dXJuIHtcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOiB7XG4gICAgICBrZXl3b3JkOlxuICAgICAgICAnYWJzIGFjY2VzcyBhZnRlciBhbGlhcyBhbGwgYW5kIGFyY2hpdGVjdHVyZSBhcnJheSBhc3NlcnQgYXNzdW1lIGFzc3VtZV9ndWFyYW50ZWUgYXR0cmlidXRlICcgK1xuICAgICAgICAnYmVnaW4gYmxvY2sgYm9keSBidWZmZXIgYnVzIGNhc2UgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gY29uc3RhbnQgY29udGV4dCBjb3ZlciBkaXNjb25uZWN0ICcgK1xuICAgICAgICAnZG93bnRvIGRlZmF1bHQgZWxzZSBlbHNpZiBlbmQgZW50aXR5IGV4aXQgZmFpcm5lc3MgZmlsZSBmb3IgZm9yY2UgZnVuY3Rpb24gZ2VuZXJhdGUgJyArXG4gICAgICAgICdnZW5lcmljIGdyb3VwIGd1YXJkZWQgaWYgaW1wdXJlIGluIGluZXJ0aWFsIGlub3V0IGlzIGxhYmVsIGxpYnJhcnkgbGlua2FnZSBsaXRlcmFsICcgK1xuICAgICAgICAnbG9vcCBtYXAgbW9kIG5hbmQgbmV3IG5leHQgbm9yIG5vdCBudWxsIG9mIG9uIG9wZW4gb3Igb3RoZXJzIG91dCBwYWNrYWdlIHBvcnQgJyArXG4gICAgICAgICdwb3N0cG9uZWQgcHJvY2VkdXJlIHByb2Nlc3MgcHJvcGVydHkgcHJvdGVjdGVkIHB1cmUgcmFuZ2UgcmVjb3JkIHJlZ2lzdGVyIHJlamVjdCAnICtcbiAgICAgICAgJ3JlbGVhc2UgcmVtIHJlcG9ydCByZXN0cmljdCByZXN0cmljdF9ndWFyYW50ZWUgcmV0dXJuIHJvbCByb3Igc2VsZWN0IHNlcXVlbmNlICcgK1xuICAgICAgICAnc2V2ZXJpdHkgc2hhcmVkIHNpZ25hbCBzbGEgc2xsIHNyYSBzcmwgc3Ryb25nIHN1YnR5cGUgdGhlbiB0byB0cmFuc3BvcnQgdHlwZSAnICtcbiAgICAgICAgJ3VuYWZmZWN0ZWQgdW5pdHMgdW50aWwgdXNlIHZhcmlhYmxlIHZtb2RlIHZwcm9wIHZ1bml0IHdhaXQgd2hlbiB3aGlsZSB3aXRoIHhub3IgeG9yJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAnYm9vbGVhbiBiaXQgY2hhcmFjdGVyICcgK1xuICAgICAgICAnaW50ZWdlciB0aW1lIGRlbGF5X2xlbmd0aCBuYXR1cmFsIHBvc2l0aXZlICcgK1xuICAgICAgICAnc3RyaW5nIGJpdF92ZWN0b3IgZmlsZV9vcGVuX2tpbmQgZmlsZV9vcGVuX3N0YXR1cyAnICtcbiAgICAgICAgJ3N0ZF9sb2dpYyBzdGRfbG9naWNfdmVjdG9yIHVuc2lnbmVkIHNpZ25lZCBib29sZWFuX3ZlY3RvciBpbnRlZ2VyX3ZlY3RvciAnICtcbiAgICAgICAgJ3N0ZF91bG9naWMgc3RkX3Vsb2dpY192ZWN0b3IgdW5yZXNvbHZlZF91bnNpZ25lZCB1X3Vuc2lnbmVkIHVucmVzb2x2ZWRfc2lnbmVkIHVfc2lnbmVkJyArXG4gICAgICAgICdyZWFsX3ZlY3RvciB0aW1lX3ZlY3RvcicsXG4gICAgICBsaXRlcmFsOlxuICAgICAgICAnZmFsc2UgdHJ1ZSBub3RlIHdhcm5pbmcgZXJyb3IgZmFpbHVyZSAnICsgIC8vIHNldmVyaXR5X2xldmVsXG4gICAgICAgICdsaW5lIHRleHQgc2lkZSB3aWR0aCcgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dGlvXG4gICAgfSxcbiAgICBpbGxlZ2FsOiAneycsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsICAgICAgLy8gVkhETC0yMDA4IGJsb2NrIGNvbW1lbnRpbmcuXG4gICAgICBobGpzLkNPTU1FTlQoJy0tJywgJyQnKSxcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgICAgIGJlZ2luOiBOVU1CRVJfUkUsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICAgICAgYmVnaW46ICdcXCcoVXxYfDB8MXxafFd8THxIfC0pXFwnJyxcbiAgICAgICAgY29udGFpbnM6IFtobGpzLkJBQ0tTTEFTSF9FU0NBUEVdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzeW1ib2wnLFxuICAgICAgICBiZWdpbjogJ1xcJ1tBLVphLXpdKF8/W0EtWmEtejAtOV0pKicsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgbGV4ZW1lczogL1shI0BcXHddKy8sXG4gICAga2V5d29yZHM6IHtcbiAgICAgIGtleXdvcmQ6XG4gICAgICAgIC8vIGV4cHJlc3MgdmVyc2lvbiBleGNlcHQ6ICEgJiAqIDwgPSA+ICEhICMgQCBAQFxuICAgICAgICAnTnwwIFB8MCBYfDAgYXwwIGFiIGFiYyBhYm8gYWwgYW0gYW58MCBhciBhcmdhIGFyZ2QgYXJnZSBhcmdkbyBhcmdnIGFyZ2wgYXJndSBhcyBhdSBhdWcgYXVuIGJ8MCBiTiBiYSBiYWQgYmQgYmUgYmVsIGJmIGJsIGJtIGJuIGJvIGJwIGJyIGJyZWEgYnJlYWthIGJyZWFrZCBicmVha2wgYnJvIGJ1ZmRvIGJ1ZmZlcnMgYnVuIGJ3IGN8MCBjTiBjTmYgY2EgY2FiYyBjYWRkYiBjYWQgY2FkZGYgY2FsIGNhdCBjYiBjYyBjY2wgY2QgY2UgY2V4IGNmIGNmaXIgY2dldGIgY2dldGUgY2cgY2hhbmdlcyBjaGQgY2hlIGNoZWNrdCBjbCBjbGEgY2xvIGNtIGNtYXBjIGNtZSBjbiBjbmV3IGNuZiBjbm8gY25vcmVhIGNub3JlbWUgY28gY29sIGNvbG8gY29tIGNvbWMgY29tcCBjb24gY29uZiBjb3BlICcrXG4gICAgICAgICdjcCBjcGYgY3EgY3IgY3MgY3N0IGN1IGN1bmEgY3VubWUgY3cgZGVsbSBkZWIgZGVidWdnIGRlbGMgZGVsZiBkaWYgZGlmZmcgZGlmZm8gZGlmZnAgZGlmZnB1IGRpZmZzIGRpZmZ0aGlzIGRpZyBkaSBkbCBkZWxsIGRqIGRsaSBkbyBkb2F1dG9hIGRwIGRyIGRzIGRzcCBlfDAgZWEgZWMgZWNob2UgZWNob2ggZWNob20gZWNob24gZWwgZWxzZWkgZW0gZW4gZW5kZm8gZW5kZiBlbmR0IGVuZHcgZW5lIGV4IGV4ZSBleGkgZXh1IGZ8MCBmaWxlcyBmaWxldCBmaW4gZmluYSBmaW5pIGZpciBmaXggZm8gZm9sZGMgZm9sZGQgZm9sZGRvYyBmb2xkbyBmb3IgZnUgZ28gZ3IgZ3JlcGEgZ3UgZ3YgaGEgaGVscGYgaGVscGcgaGVscHQgaGkgaGlkIGhpcyBpYSBpYWJjIGlmIGlqIGlsIGltIGltYXBjICcrXG4gICAgICAgICdpbWUgaW5vIGlub3JlYSBpbm9yZW1lIGludCBpcyBpc3AgaXUgaXVuYSBpdW5tZSBqfDAganUga3wwIGtlZXBhIGtlZSBrZWVwaiBsTiBsTmYgbHwwIGxhZCBsYWRkYiBsYWRkZiBsYSBsYW4gbGF0IGxiIGxjIGxjaCBsY2wgbGNzIGxlIGxlZnRhIGxldCBsZXggbGYgbGZpciBsZ2V0YiBsZ2V0ZSBsZyBsZ3IgbGdyZXBhIGxoIGxsIGxsYSBsbGkgbG1hayBsbSBsbWFwYyBsbmUgbG5ldyBsbmYgbG4gbG9hZGsgbG8gbG9jIGxvY2t2IGxvbCBsb3BlIGxwIGxwZiBsciBscyBsdCBsdSBsdWEgbHVhZCBsdWFmIGx2IGx2aW1ncmVwYSBsdyBtfDAgbWEgbWFrIG1hcCBtYXBjIG1hcmtzIG1hdCBtZSBtZW51dCBtZXMgbWsgbWtzIG1rc3AgbWt2IG1rdmllIG1vZCBteiBtemYgbmJjIG5iIG5icyBuZXcgbm0gbm1hcGMgbm1lIG5uIG5ub3JlbWUgbm9hIG5vIG5vaCBub3JlYSBub3JlbWUgbm9ybSBudSBudW4gbnVubWUgb2wgb3wwIG9tIG9tYXBjIG9tZSBvbiBvbm8gb25vcmVtZSBvcHQgb3Ugb3VubWUgb3cgcHwwICcrXG4gICAgICAgICdwcm9mZCBwcm9mIHBybyBwcm9tcHRyIHBjIHBlZCBwZSBwZXJsZCBwbyBwb3B1IHBwIHByZSBwcmV2IHBzIHB0IHB0TiBwdGYgcHRqIHB0bCBwdG4gcHRwIHB0ciBwdHMgcHUgcHcgcHkzIHB5dGhvbjMgcHkzZCBweTNmIHB5IHB5ZCBweWYgcXVpdGEgcWEgcmVjIHJlZCByZWRpIHJlZHIgcmVkcmF3cyByZWcgcmVzIHJldCByZXR1IHJldyByaSByaWdodGIgcnViIHJ1YnlkIHJ1YnlmIHJ1bmQgcnUgcnYgc04gc2FuIHNhIHNhbCBzYXYgc2Igc2JOIHNiYSBzYmYgc2JsIHNibSBzYm4gc2JwIHNiciBzY3JpcCBzY3JpcHRlIHNjcyBzZSBzZXRmIHNldGcgc2V0bCBzZiBzZmlyIHNoIHNpbSBzaWcgc2lsIHNsIHNsYSBzbSBzbWFwIHNtYXBjIHNtZSBzbiBzbmkgc25vIHNub3Igc25vcmVtZSBzb3IgJytcbiAgICAgICAgJ3NvIHNwZWxsZCBzcGUgc3BlbGxpIHNwZWxsciBzcGVsbHUgc3BlbGx3IHNwIHNwciBzcmUgc3Qgc3RhIHN0YXJ0ZyBzdGFydHIgc3RhciBzdG9waSBzdGogc3RzIHN1biBzdW5tIHN1bm1lIHN1cyBzdiBzdyBzeSBzeW50aSBzeW5jIHROIHRhYk4gdGFiYyB0YWJkbyB0YWJlIHRhYmYgdGFiZmlyIHRhYmwgdGFibSB0YWJuZXcgJytcbiAgICAgICAgJ3RhYm4gdGFibyB0YWJwIHRhYnIgdGFicyB0YWIgdGEgdGFncyB0YyB0Y2xkIHRjbGYgdGUgdGYgdGggdGogdGwgdG0gdG4gdG8gdHAgdHIgdHJ5IHRzIHR1IHV8MCB1bmRvaiB1bmRvbCB1bmEgdW5oIHVubCB1bmxvIHVubSB1bm1lIHVucyB1cCB2ZSB2ZXJiIHZlcnQgdmltIHZpbWdyZXBhIHZpIHZpdSB2aWUgdm0gdm1hcGMgdm1lIHZuZSB2biB2bm9yZW1lIHZzIHZ1IHZ1bm1lIHdpbmRvIHd8MCB3TiB3YSB3aCB3aSB3aW5jIHdpbnAgd24gd3Agd3Egd3FhIHdzIHd1IHd2IHh8MCB4YSB4bWFwYyB4bSB4bWUgeG4geG5vcmVtZSB4dSB4dW5tZSB5fDAgenwwIH4gJytcbiAgICAgICAgLy8gZnVsbCB2ZXJzaW9uXG4gICAgICAgICdOZXh0IFByaW50IGFwcGVuZCBhYmJyZXZpYXRlIGFiY2xlYXIgYWJvdmVsZWZ0IGFsbCBhbWVudSBhbm9yZW1lbnUgYXJncyBhcmdhZGQgYXJnZGVsZXRlIGFyZ2VkaXQgYXJnZ2xvYmFsIGFyZ2xvY2FsIGFyZ3VtZW50IGFzY2lpIGF1dG9jbWQgYXVncm91cCBhdW5tZW51IGJ1ZmZlciBiTmV4dCBiYWxsIGJhZGQgYmRlbGV0ZSBiZWhhdmUgYmVsb3dyaWdodCBiZmlyc3QgYmxhc3QgYm1vZGlmaWVkIGJuZXh0IGJvdHJpZ2h0IGJwcmV2aW91cyBicmV3aW5kIGJyZWFrIGJyZWFrYWRkIGJyZWFrZGVsIGJyZWFrbGlzdCBicm93c2UgYnVubG9hZCAnK1xuICAgICAgICAnYndpcGVvdXQgY2hhbmdlIGNOZXh0IGNOZmlsZSBjYWJicmV2IGNhYmNsZWFyIGNhZGRidWZmZXIgY2FkZGV4cHIgY2FkZGZpbGUgY2FsbCBjYXRjaCBjYnVmZmVyIGNjbG9zZSBjZW50ZXIgY2V4cHIgY2ZpbGUgY2ZpcnN0IGNnZXRidWZmZXIgY2dldGV4cHIgY2dldGZpbGUgY2hkaXIgY2hlY2twYXRoIGNoZWNrdGltZSBjbGlzdCBjbGFzdCBjbG9zZSBjbWFwIGNtYXBjbGVhciBjbWVudSBjbmV4dCBjbmV3ZXIgY25maWxlIGNub3JlbWFwIGNub3JlYWJicmV2IGNub3JlbWVudSBjb3B5IGNvbGRlciBjb2xvcnNjaGVtZSBjb21tYW5kIGNvbWNsZWFyIGNvbXBpbGVyIGNvbnRpbnVlIGNvbmZpcm0gY29wZW4gY3ByZXZpb3VzIGNwZmlsZSBjcXVpdCBjcmV3aW5kIGNzY29wZSBjc3RhZyBjdW5tYXAgJytcbiAgICAgICAgJ2N1bmFiYnJldiBjdW5tZW51IGN3aW5kb3cgZGVsZXRlIGRlbG1hcmtzIGRlYnVnIGRlYnVnZ3JlZWR5IGRlbGNvbW1hbmQgZGVsZnVuY3Rpb24gZGlmZnVwZGF0ZSBkaWZmZ2V0IGRpZmZvZmYgZGlmZnBhdGNoIGRpZmZwdXQgZGlmZnNwbGl0IGRpZ3JhcGhzIGRpc3BsYXkgZGVsZXRlbCBkanVtcCBkbGlzdCBkb2F1dG9jbWQgZG9hdXRvYWxsIGRlbGV0ZXAgZHJvcCBkc2VhcmNoIGRzcGxpdCBlZGl0IGVhcmxpZXIgZWNobyBlY2hvZXJyIGVjaG9obCBlY2hvbXNnIGVsc2UgZWxzZWlmIGVtZW51IGVuZGlmIGVuZGZvciAnK1xuICAgICAgICAnZW5kZnVuY3Rpb24gZW5kdHJ5IGVuZHdoaWxlIGVuZXcgZXhlY3V0ZSBleGl0IGV4dXNhZ2UgZmlsZSBmaWxldHlwZSBmaW5kIGZpbmFsbHkgZmluaXNoIGZpcnN0IGZpeGRlbCBmb2xkIGZvbGRjbG9zZSBmb2xkZG9vcGVuIGZvbGRkb2Nsb3NlZCBmb2xkb3BlbiBmdW5jdGlvbiBnbG9iYWwgZ290byBncmVwIGdyZXBhZGQgZ3VpIGd2aW0gaGFyZGNvcHkgaGVscCBoZWxwZmluZCBoZWxwZ3JlcCBoZWxwdGFncyBoaWdobGlnaHQgaGlkZSBoaXN0b3J5IGluc2VydCBpYWJicmV2IGlhYmNsZWFyIGlqdW1wIGlsaXN0IGltYXAgJytcbiAgICAgICAgJ2ltYXBjbGVhciBpbWVudSBpbm9yZW1hcCBpbm9yZWFiYnJldiBpbm9yZW1lbnUgaW50cm8gaXNlYXJjaCBpc3BsaXQgaXVubWFwIGl1bmFiYnJldiBpdW5tZW51IGpvaW4ganVtcHMga2VlcGFsdCBrZWVwbWFya3Mga2VlcGp1bXBzIGxOZXh0IGxOZmlsZSBsaXN0IGxhZGRleHByIGxhZGRidWZmZXIgbGFkZGZpbGUgbGFzdCBsYW5ndWFnZSBsYXRlciBsYnVmZmVyIGxjZCBsY2hkaXIgbGNsb3NlIGxjc2NvcGUgbGVmdCBsZWZ0YWJvdmUgbGV4cHIgbGZpbGUgbGZpcnN0IGxnZXRidWZmZXIgbGdldGV4cHIgbGdldGZpbGUgbGdyZXAgbGdyZXBhZGQgbGhlbHBncmVwIGxsYXN0IGxsaXN0IGxtYWtlIGxtYXAgbG1hcGNsZWFyIGxuZXh0IGxuZXdlciBsbmZpbGUgbG5vcmVtYXAgbG9hZGtleW1hcCBsb2FkdmlldyAnK1xuICAgICAgICAnbG9ja21hcmtzIGxvY2t2YXIgbG9sZGVyIGxvcGVuIGxwcmV2aW91cyBscGZpbGUgbHJld2luZCBsdGFnIGx1bm1hcCBsdWFkbyBsdWFmaWxlIGx2aW1ncmVwIGx2aW1ncmVwYWRkIGx3aW5kb3cgbW92ZSBtYXJrIG1ha2UgbWFwY2xlYXIgbWF0Y2ggbWVudSBtZW51dHJhbnNsYXRlIG1lc3NhZ2VzIG1rZXhyYyBta3Nlc3Npb24gbWtzcGVsbCBta3ZpbXJjIG1rdmlldyBtb2RlIG16c2NoZW1lIG16ZmlsZSBuYmNsb3NlIG5ia2V5IG5ic2FydCBuZXh0IG5tYXAgbm1hcGNsZWFyIG5tZW51IG5ub3JlbWFwICcrXG4gICAgICAgICdubm9yZW1lbnUgbm9hdXRvY21kIG5vcmVtYXAgbm9obHNlYXJjaCBub3JlYWJicmV2IG5vcmVtZW51IG5vcm1hbCBudW1iZXIgbnVubWFwIG51bm1lbnUgb2xkZmlsZXMgb3BlbiBvbWFwIG9tYXBjbGVhciBvbWVudSBvbmx5IG9ub3JlbWFwIG9ub3JlbWVudSBvcHRpb25zIG91bm1hcCBvdW5tZW51IG93bnN5bnRheCBwcmludCBwcm9mZGVsIHByb2ZpbGUgcHJvbXB0ZmluZCBwcm9tcHRyZXBsIHBjbG9zZSBwZWRpdCBwZXJsIHBlcmxkbyBwb3AgcG9wdXAgcHBvcCBwcmVzZXJ2ZSBwcmV2aW91cyBwc2VhcmNoIHB0YWcgcHROZXh0ICcrXG4gICAgICAgICdwdGZpcnN0IHB0anVtcCBwdGxhc3QgcHRuZXh0IHB0cHJldmlvdXMgcHRyZXdpbmQgcHRzZWxlY3QgcHV0IHB3ZCBweTNkbyBweTNmaWxlIHB5dGhvbiBweWRvIHB5ZmlsZSBxdWl0IHF1aXRhbGwgcWFsbCByZWFkIHJlY292ZXIgcmVkbyByZWRpciByZWRyYXcgcmVkcmF3c3RhdHVzIHJlZ2lzdGVycyByZXNpemUgcmV0YWIgcmV0dXJuIHJld2luZCByaWdodCByaWdodGJlbG93IHJ1YnkgcnVieWRvIHJ1YnlmaWxlIHJ1bmRvIHJ1bnRpbWUgcnZpbWluZm8gc3Vic3RpdHV0ZSBzTmV4dCBzYW5kYm94IHNhcmd1bWVudCBzYWxsIHNhdmVhcyBzYnVmZmVyIHNiTmV4dCBzYmFsbCBzYmZpcnN0IHNibGFzdCBzYm1vZGlmaWVkIHNibmV4dCBzYnByZXZpb3VzIHNicmV3aW5kIHNjcmlwdG5hbWVzIHNjcmlwdGVuY29kaW5nICcrXG4gICAgICAgICdzY3Njb3BlIHNldCBzZXRmaWxldHlwZSBzZXRnbG9iYWwgc2V0bG9jYWwgc2ZpbmQgc2ZpcnN0IHNoZWxsIHNpbWFsdCBzaWduIHNpbGVudCBzbGVlcCBzbGFzdCBzbWFnaWMgc21hcGNsZWFyIHNtZW51IHNuZXh0IHNuaWZmIHNub21hZ2ljIHNub3JlbWFwIHNub3JlbWVudSBzb3J0IHNvdXJjZSBzcGVsbGR1bXAgc3BlbGxnb29kIHNwZWxsaW5mbyBzcGVsbHJlcGFsbCBzcGVsbHVuZG8gc3BlbGx3cm9uZyBzcGxpdCBzcHJldmlvdXMgc3Jld2luZCBzdG9wIHN0YWcgc3RhcnRncmVwbGFjZSBzdGFydHJlcGxhY2UgJytcbiAgICAgICAgJ3N0YXJ0aW5zZXJ0IHN0b3BpbnNlcnQgc3RqdW1wIHN0c2VsZWN0IHN1bmhpZGUgc3VubWFwIHN1bm1lbnUgc3VzcGVuZCBzdmlldyBzd2FwbmFtZSBzeW50YXggc3ludGltZSBzeW5jYmluZCB0TmV4dCB0YWJOZXh0IHRhYmNsb3NlIHRhYmVkaXQgdGFiZmluZCB0YWJmaXJzdCB0YWJsYXN0IHRhYm1vdmUgdGFibmV4dCB0YWJvbmx5IHRhYnByZXZpb3VzIHRhYnJld2luZCB0YWcgdGNsIHRjbGRvIHRjbGZpbGUgdGVhcm9mZiB0Zmlyc3QgdGhyb3cgdGp1bXAgdGxhc3QgdG1lbnUgdG5leHQgdG9wbGVmdCB0cHJldmlvdXMgJysndHJld2luZCB0c2VsZWN0IHR1bm1lbnUgdW5kbyB1bmRvam9pbiB1bmRvbGlzdCB1bmFiYnJldmlhdGUgdW5oaWRlIHVubGV0IHVubG9ja3ZhciB1bm1hcCB1bm1lbnUgdW5zaWxlbnQgdXBkYXRlIHZnbG9iYWwgdmVyc2lvbiB2ZXJib3NlIHZlcnRpY2FsIHZpbWdyZXAgdmltZ3JlcGFkZCB2aXN1YWwgdml1c2FnZSB2aWV3IHZtYXAgdm1hcGNsZWFyIHZtZW51IHZuZXcgJytcbiAgICAgICAgJ3Zub3JlbWFwIHZub3JlbWVudSB2c3BsaXQgdnVubWFwIHZ1bm1lbnUgd3JpdGUgd05leHQgd2FsbCB3aGlsZSB3aW5zaXplIHdpbmNtZCB3aW5wb3Mgd25leHQgd3ByZXZpb3VzIHdxYWxsIHdzdmVyYiB3dW5kbyB3dmltaW5mbyB4aXQgeGFsbCB4bWFwY2xlYXIgeG1hcCB4bWVudSB4bm9yZW1hcCB4bm9yZW1lbnUgeHVubWFwIHh1bm1lbnUgeWFuaycsXG4gICAgICBidWlsdF9pbjogLy9idWlsdCBpbiBmdW5jXG4gICAgICAgICdzeW5JRHRyYW5zIGF0YW4yIHJhbmdlIG1hdGNoYXJnIGRpZF9maWxldHlwZSBhc2luIGZlZWRrZXlzIHhvciBhcmd2ICcgK1xuICAgICAgICAnY29tcGxldGVfY2hlY2sgYWRkIGdldHdpbnBvc3ggZ2V0cWZsaXN0IGdldHdpbnBvc3kgc2NyZWVuY29sICcgK1xuICAgICAgICAnY2xlYXJtYXRjaGVzIGVtcHR5IGV4dGVuZCBnZXRjbWRwb3MgbXpldmFsIGdhcmJhZ2Vjb2xsZWN0IHNldHJlZyAnICtcbiAgICAgICAgJ2NlaWwgc3FydCBkaWZmX2hsSUQgaW5wdXRzZWNyZXQgZ2V0IGdldGZwZXJtIGdldHBpZCBmaWxld3JpdGFibGUgJyArXG4gICAgICAgICdzaGlmdHdpZHRoIG1heCBzaW5oIGlzZGlyZWN0b3J5IHN5bklEIHN5c3RlbSBpbnB1dHJlc3RvcmUgd2lubGluZSAnICtcbiAgICAgICAgJ2F0YW4gdmlzdWFsbW9kZSBpbnB1dGxpc3QgdGFicGFnZXdpbm5yIHJvdW5kIGdldHJlZ3R5cGUgbWFwY2hlY2sgJyArXG4gICAgICAgICdoYXNtYXB0byBoaXN0ZGVsIGFyZ2lkeCBmaW5kZmlsZSBzaGEyNTYgZXhpc3RzIHRvdXBwZXIgZ2V0Y21kbGluZSAnICtcbiAgICAgICAgJ3RhZ2xpc3Qgc3RyaW5nIGdldG1hdGNoZXMgYnVmbnIgc3RyZnRpbWUgd2lud2lkdGggYnVmZXhpc3RzICcgK1xuICAgICAgICAnc3RydHJhbnMgdGFicGFnZWJ1Zmxpc3Qgc2V0Y21kcG9zIHJlbW90ZV9yZWFkIHByaW50ZiBzZXRsb2NsaXN0ICcgK1xuICAgICAgICAnZ2V0cG9zIGdldGxpbmUgYnVmd2lubnIgZmxvYXQybnIgbGVuIGdldGNtZHR5cGUgZGlmZl9maWxsZXIgbHVhZXZhbCAnICtcbiAgICAgICAgJ3Jlc29sdmUgbGliY2FsbG5yIGZvbGRjbG9zZWRlbmQgcmV2ZXJzZSBmaWx0ZXIgaGFzX2tleSBidWZuYW1lICcgK1xuICAgICAgICAnc3RyMmZsb2F0IHN0cmxlbiBzZXRsaW5lIGdldGNoYXJtb2Qgc2V0YnVmdmFyIGluZGV4IHNlYXJjaHBvcyAnICtcbiAgICAgICAgJ3NoZWxsZXNjYXBlIHVuZG9maWxlIGZvbGRjbG9zZWQgc2V0cWZsaXN0IGJ1Zmxpc3RlZCBzdHJjaGFycyBzdHIybnIgJyArXG4gICAgICAgICd2aXJ0Y29sIGZsb29yIHJlbW92ZSB1bmRvdHJlZSByZW1vdGVfZXhwciB3aW5oZWlnaHQgZ2V0dGFid2ludmFyICcgK1xuICAgICAgICAncmVsdGltZSBjdXJzb3IgdGFicGFnZW5yIGZpbmRkaXIgbG9jYWx0aW1lIGFjb3MgZ2V0bG9jbGlzdCBzZWFyY2ggJyArXG4gICAgICAgICd0YW5oIG1hdGNoZW5kIHJlbmFtZSBnZXR0YWJ2YXIgc3RyZGlzcGxheXdpZHRoIHR5cGUgYWJzIHB5M2V2YWwgJyArXG4gICAgICAgICdzZXR3aW52YXIgdG9sb3dlciB3aWxkbWVudW1vZGUgbG9nMTAgc3BlbGxzdWdnZXN0IGJ1ZmxvYWRlZCAnICtcbiAgICAgICAgJ3N5bmNvbmNlYWxlZCBuZXh0bm9uYmxhbmsgc2VydmVyMmNsaWVudCBjb21wbGV0ZSBzZXR0YWJ3aW52YXIgJyArXG4gICAgICAgICdleGVjdXRhYmxlIGlucHV0IHdpbmNvbCBzZXRtYXRjaGVzIGdldGZ0eXBlIGhsSUQgaW5wdXRzYXZlICcgK1xuICAgICAgICAnc2VhcmNocGFpciBvciBzY3JlZW5yb3cgbGluZSBzZXR0YWJ2YXIgaGlzdGFkZCBkZWVwY29weSBzdHJwYXJ0ICcgK1xuICAgICAgICAncmVtb3RlX3BlZWsgYW5kIGV2YWwgZ2V0ZnRpbWUgc3VibWF0Y2ggc2NyZWVuY2hhciB3aW5zYXZldmlldyAnICtcbiAgICAgICAgJ21hdGNoYWRkIG1rZGlyIHNjcmVlbmF0dHIgZ2V0Zm9udG5hbWUgbGliY2FsbCByZWx0aW1lc3RyIGdldGZzaXplICcgK1xuICAgICAgICAnd2lubnIgaW52ZXJ0IHBvdyBnZXRidWZsaW5lIGJ5dGUybGluZSBzb3VuZGZvbGQgcmVwZWF0IGZuYW1lZXNjYXBlICcgK1xuICAgICAgICAndGFnZmlsZXMgc2luIHN0cndpZHRoIHNwZWxsYmFkd29yZCB0cnVuYyBtYXBhcmcgbG9nIGxpc3BpbmRlbnQgJyArXG4gICAgICAgICdob3N0bmFtZSBzZXRwb3MgZ2xvYnBhdGggcmVtb3RlX2ZvcmVncm91bmQgZ2V0Y2hhciBzeW5JRGF0dHIgJyArXG4gICAgICAgICdmbmFtZW1vZGlmeSBjc2NvcGVfY29ubmVjdGlvbiBzdHJpZHggd2luYnVmbnIgaW5kZW50IG1pbiAnICtcbiAgICAgICAgJ2NvbXBsZXRlX2FkZCBucjJjaGFyIHNlYXJjaHBhaXJwb3MgaW5wdXRkaWFsb2cgdmFsdWVzIG1hdGNobGlzdCAnICtcbiAgICAgICAgJ2l0ZW1zIGhsZXhpc3RzIHN0cnJpZHggYnJvd3NlZGlyIGV4cGFuZCBmbW9kIHBhdGhzaG9ydGVuIGxpbmUyYnl0ZSAnICtcbiAgICAgICAgJ2FyZ2MgY291bnQgZ2V0d2ludmFyIGdsb2IgZm9sZHRleHRyZXN1bHQgZ2V0cmVnIGZvcmVncm91bmQgY29zaCAnICtcbiAgICAgICAgJ21hdGNoZGVsZXRlIGhhcyBjaGFyMm5yIHNpbXBsaWZ5IGhpc3RnZXQgc2VhcmNoZGVjbCBpY29udiAnICtcbiAgICAgICAgJ3dpbnJlc3RjbWQgcHVtdmlzaWJsZSB3cml0ZWZpbGUgZm9sZGxldmVsIGhhc2xvY2FsZGlyIGtleXMgY29zICcgK1xuICAgICAgICAnbWF0Y2hzdHIgZm9sZHRleHQgaGlzdG5yIHRhbiB0ZW1wbmFtZSBnZXRjd2QgYnl0ZWlkeCBnZXRidWZ2YXIgJyArXG4gICAgICAgICdpc2xvY2tlZCBlc2NhcGUgZXZlbnRoYW5kbGVyIHJlbW90ZV9zZW5kIHNlcnZlcmxpc3Qgd2lucmVzdHZpZXcgJyArXG4gICAgICAgICdzeW5zdGFjayBweWV2YWwgcHJldm5vbmJsYW5rIHJlYWRmaWxlIGNpbmRlbnQgZmlsZXJlYWRhYmxlIGNoYW5nZW5yICcgK1xuICAgICAgICAnZXhwJ1xuICAgIH0sXG4gICAgaWxsZWdhbDogLzsvLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgICBobGpzLk5VTUJFUl9NT0RFLFxuICAgICAgaGxqcy5BUE9TX1NUUklOR19NT0RFLFxuXG4gICAgICAvKlxuICAgICAgQSBkb3VibGUgcXVvdGUgY2FuIHN0YXJ0IGVpdGhlciBhIHN0cmluZyBvciBhIGxpbmUgY29tbWVudC4gU3RyaW5ncyBhcmVcbiAgICAgIGVuZGVkIGJlZm9yZSB0aGUgZW5kIG9mIGEgbGluZSBieSBhbm90aGVyIGRvdWJsZSBxdW90ZSBhbmQgY2FuIGNvbnRhaW5cbiAgICAgIGVzY2FwZWQgZG91YmxlLXF1b3RlcyBhbmQgcG9zdC1lc2NhcGVkIGxpbmUgYnJlYWtzLlxuXG4gICAgICBBbHNvLCBhbnkgZG91YmxlIHF1b3RlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIGlzIGEgY29tbWVudCBidXQgd2VcbiAgICAgIGRvbid0IGhhbmRsZSB0aGF0IHByb3Blcmx5IGF0IHRoZSBtb21lbnQ6IGFueSBkb3VibGUgcXVvdGUgaW5zaWRlIHdpbGxcbiAgICAgIHR1cm4gdGhlbSBpbnRvIGEgc3RyaW5nLiBIYW5kbGluZyBpdCBwcm9wZXJseSB3aWxsIHJlcXVpcmUgYSBzbWFydGVyXG4gICAgICBwYXJzZXIuXG4gICAgICAqL1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgICAgICBiZWdpbjogL1wiKFxcXFxcInxcXG5cXFxcfFteXCJcXG5dKSpcIi9cbiAgICAgIH0sXG4gICAgICBobGpzLkNPTU1FTlQoJ1wiJywgJyQnKSxcblxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICd2YXJpYWJsZScsXG4gICAgICAgIGJlZ2luOiAvW2J3dGdsc2F2XTpbXFx3XFxkX10qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24gZnVuY3Rpb24hJywgZW5kOiAnJCcsXG4gICAgICAgIHJlbGV2YW5jZTogMCxcbiAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICBobGpzLlRJVExFX01PREUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiAncGFyYW1zJyxcbiAgICAgICAgICAgIGJlZ2luOiAnXFxcXCgnLCBlbmQ6ICdcXFxcKSdcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIGJlZ2luOiAvPFtcXHctXSs+L1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHJldHVybiB7XG4gICAgY2FzZV9pbnNlbnNpdGl2ZTogdHJ1ZSxcbiAgICBsZXhlbWVzOiAnWy4lXT8nICsgaGxqcy5JREVOVF9SRSxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDpcbiAgICAgICAgJ2xvY2sgcmVwIHJlcGUgcmVweiByZXBuZSByZXBueiB4YXF1aXJlIHhyZWxlYXNlIGJuZCBub2JuZCAnICtcbiAgICAgICAgJ2FhYSBhYWQgYWFtIGFhcyBhZGMgYWRkIGFuZCBhcnBsIGJiMF9yZXNldCBiYjFfcmVzZXQgYm91bmQgYnNmIGJzciBic3dhcCBidCBidGMgYnRyIGJ0cyBjYWxsIGNidyBjZHEgY2RxZSBjbGMgY2xkIGNsaSBjbHRzIGNtYyBjbXAgY21wc2IgY21wc2QgY21wc3EgY21wc3cgY21weGNoZyBjbXB4Y2hnNDg2IGNtcHhjaGc4YiBjbXB4Y2hnMTZiIGNwdWlkIGNwdV9yZWFkIGNwdV93cml0ZSBjcW8gY3dkIGN3ZGUgZGFhIGRhcyBkZWMgZGl2IGRtaW50IGVtbXMgZW50ZXIgZXF1IGYyeG0xIGZhYnMgZmFkZCBmYWRkcCBmYmxkIGZic3RwIGZjaHMgZmNsZXggZmNtb3ZiIGZjbW92YmUgZmNtb3ZlIGZjbW92bmIgZmNtb3ZuYmUgZmNtb3ZuZSBmY21vdm51IGZjbW92dSBmY29tIGZjb21pIGZjb21pcCBmY29tcCBmY29tcHAgZmNvcyBmZGVjc3RwIGZkaXNpIGZkaXYgZmRpdnAgZmRpdnIgZmRpdnJwIGZlbW1zIGZlbmkgZmZyZWUgZmZyZWVwIGZpYWRkIGZpY29tIGZpY29tcCBmaWRpdiBmaWRpdnIgZmlsZCBmaW11bCBmaW5jc3RwIGZpbml0IGZpc3QgZmlzdHAgZmlzdHRwIGZpc3ViIGZpc3ViciBmbGQgZmxkMSBmbGRjdyBmbGRlbnYgZmxkbDJlIGZsZGwydCBmbGRsZzIgZmxkbG4yIGZsZHBpIGZsZHogZm11bCBmbXVscCBmbmNsZXggZm5kaXNpIGZuZW5pIGZuaW5pdCBmbm9wIGZuc2F2ZSBmbnN0Y3cgZm5zdGVudiBmbnN0c3cgZnBhdGFuIGZwcmVtIGZwcmVtMSBmcHRhbiBmcm5kaW50IGZyc3RvciBmc2F2ZSBmc2NhbGUgZnNldHBtIGZzaW4gZnNpbmNvcyBmc3FydCBmc3QgZnN0Y3cgZnN0ZW52IGZzdHAgZnN0c3cgZnN1YiBmc3VicCBmc3ViciBmc3VicnAgZnRzdCBmdWNvbSBmdWNvbWkgZnVjb21pcCBmdWNvbXAgZnVjb21wcCBmeGFtIGZ4Y2ggZnh0cmFjdCBmeWwyeCBmeWwyeHAxIGhsdCBpYnRzIGljZWJwIGlkaXYgaW11bCBpbiBpbmMgaW5jYmluIGluc2IgaW5zZCBpbnN3IGludCBpbnQwMSBpbnQxIGludDAzIGludDMgaW50byBpbnZkIGludnBjaWQgaW52bHBnIGludmxwZ2EgaXJldCBpcmV0ZCBpcmV0cSBpcmV0dyBqY3h6IGplY3h6IGpyY3h6IGptcCBqbXBlIGxhaGYgbGFyIGxkcyBsZWEgbGVhdmUgbGVzIGxmZW5jZSBsZnMgbGdkdCBsZ3MgbGlkdCBsbGR0IGxtc3cgbG9hZGFsbCBsb2FkYWxsMjg2IGxvZHNiIGxvZHNkIGxvZHNxIGxvZHN3IGxvb3AgbG9vcGUgbG9vcG5lIGxvb3BueiBsb29weiBsc2wgbHNzIGx0ciBtZmVuY2UgbW9uaXRvciBtb3YgbW92ZCBtb3ZxIG1vdnNiIG1vdnNkIG1vdnNxIG1vdnN3IG1vdnN4IG1vdnN4ZCBtb3Z6eCBtdWwgbXdhaXQgbmVnIG5vcCBub3Qgb3Igb3V0IG91dHNiIG91dHNkIG91dHN3IHBhY2tzc2R3IHBhY2tzc3diIHBhY2t1c3diIHBhZGRiIHBhZGRkIHBhZGRzYiBwYWRkc2l3IHBhZGRzdyBwYWRkdXNiIHBhZGR1c3cgcGFkZHcgcGFuZCBwYW5kbiBwYXVzZSBwYXZlYiBwYXZndXNiIHBjbXBlcWIgcGNtcGVxZCBwY21wZXF3IHBjbXBndGIgcGNtcGd0ZCBwY21wZ3R3IHBkaXN0aWIgcGYyaWQgcGZhY2MgcGZhZGQgcGZjbXBlcSBwZmNtcGdlIHBmY21wZ3QgcGZtYXggcGZtaW4gcGZtdWwgcGZyY3AgcGZyY3BpdDEgcGZyY3BpdDIgcGZyc3FpdDEgcGZyc3FydCBwZnN1YiBwZnN1YnIgcGkyZmQgcG1hY2hyaXcgcG1hZGR3ZCBwbWFndyBwbXVsaHJpdyBwbXVsaHJ3YSBwbXVsaHJ3YyBwbXVsaHcgcG11bGx3IHBtdmdlemIgcG12bHpiIHBtdm56YiBwbXZ6YiBwb3AgcG9wYSBwb3BhZCBwb3BhdyBwb3BmIHBvcGZkIHBvcGZxIHBvcGZ3IHBvciBwcmVmZXRjaCBwcmVmZXRjaHcgcHNsbGQgcHNsbHEgcHNsbHcgcHNyYWQgcHNyYXcgcHNybGQgcHNybHEgcHNybHcgcHN1YmIgcHN1YmQgcHN1YnNiIHBzdWJzaXcgcHN1YnN3IHBzdWJ1c2IgcHN1YnVzdyBwc3VidyBwdW5wY2toYncgcHVucGNraGRxIHB1bnBja2h3ZCBwdW5wY2tsYncgcHVucGNrbGRxIHB1bnBja2x3ZCBwdXNoIHB1c2hhIHB1c2hhZCBwdXNoYXcgcHVzaGYgcHVzaGZkIHB1c2hmcSBwdXNoZncgcHhvciByY2wgcmNyIHJkc2hyIHJkbXNyIHJkcG1jIHJkdHNjIHJkdHNjcCByZXQgcmV0ZiByZXRuIHJvbCByb3IgcmRtIHJzZGMgcnNsZHQgcnNtIHJzdHMgc2FoZiBzYWwgc2FsYyBzYXIgc2JiIHNjYXNiIHNjYXNkIHNjYXNxIHNjYXN3IHNmZW5jZSBzZ2R0IHNobCBzaGxkIHNociBzaHJkIHNpZHQgc2xkdCBza2luaXQgc21pIHNtaW50IHNtaW50b2xkIHNtc3cgc3RjIHN0ZCBzdGkgc3Rvc2Igc3Rvc2Qgc3Rvc3Egc3Rvc3cgc3RyIHN1YiBzdmRjIHN2bGR0IHN2dHMgc3dhcGdzIHN5c2NhbGwgc3lzZW50ZXIgc3lzZXhpdCBzeXNyZXQgdGVzdCB1ZDAgdWQxIHVkMmIgdWQyIHVkMmEgdW1vdiB2ZXJyIHZlcncgZndhaXQgd2JpbnZkIHdyc2hyIHdybXNyIHhhZGQgeGJ0cyB4Y2hnIHhsYXRiIHhsYXQgeG9yIGNtb3ZlIGNtb3Z6IGNtb3ZuZSBjbW92bnogY21vdmEgY21vdm5iZSBjbW92YWUgY21vdm5iIGNtb3ZiIGNtb3ZuYWUgY21vdmJlIGNtb3ZuYSBjbW92ZyBjbW92bmxlIGNtb3ZnZSBjbW92bmwgY21vdmwgY21vdm5nZSBjbW92bGUgY21vdm5nIGNtb3ZjIGNtb3ZuYyBjbW92byBjbW92bm8gY21vdnMgY21vdm5zIGNtb3ZwIGNtb3ZwZSBjbW92bnAgY21vdnBvIGplIGp6IGpuZSBqbnogamEgam5iZSBqYWUgam5iIGpiIGpuYWUgamJlIGpuYSBqZyBqbmxlIGpnZSBqbmwgamwgam5nZSBqbGUgam5nIGpjIGpuYyBqbyBqbm8ganMgam5zIGpwbyBqbnAganBlIGpwIHNldGUgc2V0eiBzZXRuZSBzZXRueiBzZXRhIHNldG5iZSBzZXRhZSBzZXRuYiBzZXRuYyBzZXRiIHNldG5hZSBzZXRjc2V0IHNldGJlIHNldG5hIHNldGcgc2V0bmxlIHNldGdlIHNldG5sIHNldGwgc2V0bmdlIHNldGxlIHNldG5nIHNldHMgc2V0bnMgc2V0byBzZXRubyBzZXRwZSBzZXRwIHNldHBvIHNldG5wIGFkZHBzIGFkZHNzIGFuZG5wcyBhbmRwcyBjbXBlcXBzIGNtcGVxc3MgY21wbGVwcyBjbXBsZXNzIGNtcGx0cHMgY21wbHRzcyBjbXBuZXFwcyBjbXBuZXFzcyBjbXBubGVwcyBjbXBubGVzcyBjbXBubHRwcyBjbXBubHRzcyBjbXBvcmRwcyBjbXBvcmRzcyBjbXB1bm9yZHBzIGNtcHVub3Jkc3MgY21wcHMgY21wc3MgY29taXNzIGN2dHBpMnBzIGN2dHBzMnBpIGN2dHNpMnNzIGN2dHNzMnNpIGN2dHRwczJwaSBjdnR0c3Myc2kgZGl2cHMgZGl2c3MgbGRteGNzciBtYXhwcyBtYXhzcyBtaW5wcyBtaW5zcyBtb3ZhcHMgbW92aHBzIG1vdmxocHMgbW92bHBzIG1vdmhscHMgbW92bXNrcHMgbW92bnRwcyBtb3ZzcyBtb3Z1cHMgbXVscHMgbXVsc3Mgb3JwcyByY3BwcyByY3BzcyByc3FydHBzIHJzcXJ0c3Mgc2h1ZnBzIHNxcnRwcyBzcXJ0c3Mgc3RteGNzciBzdWJwcyBzdWJzcyB1Y29taXNzIHVucGNraHBzIHVucGNrbHBzIHhvcnBzIGZ4cnN0b3IgZnhyc3RvcjY0IGZ4c2F2ZSBmeHNhdmU2NCB4Z2V0YnYgeHNldGJ2IHhzYXZlIHhzYXZlNjQgeHNhdmVvcHQgeHNhdmVvcHQ2NCB4cnN0b3IgeHJzdG9yNjQgcHJlZmV0Y2hudGEgcHJlZmV0Y2h0MCBwcmVmZXRjaHQxIHByZWZldGNodDIgbWFza21vdnEgbW92bnRxIHBhdmdiIHBhdmd3IHBleHRydyBwaW5zcncgcG1heHN3IHBtYXh1YiBwbWluc3cgcG1pbnViIHBtb3Ztc2tiIHBtdWxodXcgcHNhZGJ3IHBzaHVmdyBwZjJpdyBwZm5hY2MgcGZwbmFjYyBwaTJmdyBwc3dhcGQgbWFza21vdmRxdSBjbGZsdXNoIG1vdm50ZHEgbW92bnRpIG1vdm50cGQgbW92ZHFhIG1vdmRxdSBtb3ZkcTJxIG1vdnEyZHEgcGFkZHEgcG11bHVkcSBwc2h1ZmQgcHNodWZodyBwc2h1Zmx3IHBzbGxkcSBwc3JsZHEgcHN1YnEgcHVucGNraHFkcSBwdW5wY2tscWRxIGFkZHBkIGFkZHNkIGFuZG5wZCBhbmRwZCBjbXBlcXBkIGNtcGVxc2QgY21wbGVwZCBjbXBsZXNkIGNtcGx0cGQgY21wbHRzZCBjbXBuZXFwZCBjbXBuZXFzZCBjbXBubGVwZCBjbXBubGVzZCBjbXBubHRwZCBjbXBubHRzZCBjbXBvcmRwZCBjbXBvcmRzZCBjbXB1bm9yZHBkIGNtcHVub3Jkc2QgY21wcGQgY29taXNkIGN2dGRxMnBkIGN2dGRxMnBzIGN2dHBkMmRxIGN2dHBkMnBpIGN2dHBkMnBzIGN2dHBpMnBkIGN2dHBzMmRxIGN2dHBzMnBkIGN2dHNkMnNpIGN2dHNkMnNzIGN2dHNpMnNkIGN2dHNzMnNkIGN2dHRwZDJwaSBjdnR0cGQyZHEgY3Z0dHBzMmRxIGN2dHRzZDJzaSBkaXZwZCBkaXZzZCBtYXhwZCBtYXhzZCBtaW5wZCBtaW5zZCBtb3ZhcGQgbW92aHBkIG1vdmxwZCBtb3Ztc2twZCBtb3Z1cGQgbXVscGQgbXVsc2Qgb3JwZCBzaHVmcGQgc3FydHBkIHNxcnRzZCBzdWJwZCBzdWJzZCB1Y29taXNkIHVucGNraHBkIHVucGNrbHBkIHhvcnBkIGFkZHN1YnBkIGFkZHN1YnBzIGhhZGRwZCBoYWRkcHMgaHN1YnBkIGhzdWJwcyBsZGRxdSBtb3ZkZHVwIG1vdnNoZHVwIG1vdnNsZHVwIGNsZ2kgc3RnaSB2bWNhbGwgdm1jbGVhciB2bWZ1bmMgdm1sYXVuY2ggdm1sb2FkIHZtbWNhbGwgdm1wdHJsZCB2bXB0cnN0IHZtcmVhZCB2bXJlc3VtZSB2bXJ1biB2bXNhdmUgdm13cml0ZSB2bXhvZmYgdm14b24gaW52ZXB0IGludnZwaWQgcGFic2IgcGFic3cgcGFic2QgcGFsaWduciBwaGFkZHcgcGhhZGRkIHBoYWRkc3cgcGhzdWJ3IHBoc3ViZCBwaHN1YnN3IHBtYWRkdWJzdyBwbXVsaHJzdyBwc2h1ZmIgcHNpZ25iIHBzaWdudyBwc2lnbmQgZXh0cnEgaW5zZXJ0cSBtb3ZudHNkIG1vdm50c3MgbHpjbnQgYmxlbmRwZCBibGVuZHBzIGJsZW5kdnBkIGJsZW5kdnBzIGRwcGQgZHBwcyBleHRyYWN0cHMgaW5zZXJ0cHMgbW92bnRkcWEgbXBzYWRidyBwYWNrdXNkdyBwYmxlbmR2YiBwYmxlbmR3IHBjbXBlcXEgcGV4dHJiIHBleHRyZCBwZXh0cnEgcGhtaW5wb3N1dyBwaW5zcmIgcGluc3JkIHBpbnNycSBwbWF4c2IgcG1heHNkIHBtYXh1ZCBwbWF4dXcgcG1pbnNiIHBtaW5zZCBwbWludWQgcG1pbnV3IHBtb3ZzeGJ3IHBtb3ZzeGJkIHBtb3ZzeGJxIHBtb3ZzeHdkIHBtb3ZzeHdxIHBtb3ZzeGRxIHBtb3Z6eGJ3IHBtb3Z6eGJkIHBtb3Z6eGJxIHBtb3Z6eHdkIHBtb3Z6eHdxIHBtb3Z6eGRxIHBtdWxkcSBwbXVsbGQgcHRlc3Qgcm91bmRwZCByb3VuZHBzIHJvdW5kc2Qgcm91bmRzcyBjcmMzMiBwY21wZXN0cmkgcGNtcGVzdHJtIHBjbXBpc3RyaSBwY21waXN0cm0gcGNtcGd0cSBwb3BjbnQgZ2V0c2VjIHBmcmNwdiBwZnJzcXJ0diBtb3ZiZSBhZXNlbmMgYWVzZW5jbGFzdCBhZXNkZWMgYWVzZGVjbGFzdCBhZXNpbWMgYWVza2V5Z2VuYXNzaXN0IHZhZXNlbmMgdmFlc2VuY2xhc3QgdmFlc2RlYyB2YWVzZGVjbGFzdCB2YWVzaW1jIHZhZXNrZXlnZW5hc3Npc3QgdmFkZHBkIHZhZGRwcyB2YWRkc2QgdmFkZHNzIHZhZGRzdWJwZCB2YWRkc3VicHMgdmFuZHBkIHZhbmRwcyB2YW5kbnBkIHZhbmRucHMgdmJsZW5kcGQgdmJsZW5kcHMgdmJsZW5kdnBkIHZibGVuZHZwcyB2YnJvYWRjYXN0c3MgdmJyb2FkY2FzdHNkIHZicm9hZGNhc3RmMTI4IHZjbXBlcV9vc3BkIHZjbXBlcXBkIHZjbXBsdF9vc3BkIHZjbXBsdHBkIHZjbXBsZV9vc3BkIHZjbXBsZXBkIHZjbXB1bm9yZF9xcGQgdmNtcHVub3JkcGQgdmNtcG5lcV91cXBkIHZjbXBuZXFwZCB2Y21wbmx0X3VzcGQgdmNtcG5sdHBkIHZjbXBubGVfdXNwZCB2Y21wbmxlcGQgdmNtcG9yZF9xcGQgdmNtcG9yZHBkIHZjbXBlcV91cXBkIHZjbXBuZ2VfdXNwZCB2Y21wbmdlcGQgdmNtcG5ndF91c3BkIHZjbXBuZ3RwZCB2Y21wZmFsc2Vfb3FwZCB2Y21wZmFsc2VwZCB2Y21wbmVxX29xcGQgdmNtcGdlX29zcGQgdmNtcGdlcGQgdmNtcGd0X29zcGQgdmNtcGd0cGQgdmNtcHRydWVfdXFwZCB2Y21wdHJ1ZXBkIHZjbXBsdF9vcXBkIHZjbXBsZV9vcXBkIHZjbXB1bm9yZF9zcGQgdmNtcG5lcV91c3BkIHZjbXBubHRfdXFwZCB2Y21wbmxlX3VxcGQgdmNtcG9yZF9zcGQgdmNtcGVxX3VzcGQgdmNtcG5nZV91cXBkIHZjbXBuZ3RfdXFwZCB2Y21wZmFsc2Vfb3NwZCB2Y21wbmVxX29zcGQgdmNtcGdlX29xcGQgdmNtcGd0X29xcGQgdmNtcHRydWVfdXNwZCB2Y21wcGQgdmNtcGVxX29zcHMgdmNtcGVxcHMgdmNtcGx0X29zcHMgdmNtcGx0cHMgdmNtcGxlX29zcHMgdmNtcGxlcHMgdmNtcHVub3JkX3FwcyB2Y21wdW5vcmRwcyB2Y21wbmVxX3VxcHMgdmNtcG5lcXBzIHZjbXBubHRfdXNwcyB2Y21wbmx0cHMgdmNtcG5sZV91c3BzIHZjbXBubGVwcyB2Y21wb3JkX3FwcyB2Y21wb3JkcHMgdmNtcGVxX3VxcHMgdmNtcG5nZV91c3BzIHZjbXBuZ2VwcyB2Y21wbmd0X3VzcHMgdmNtcG5ndHBzIHZjbXBmYWxzZV9vcXBzIHZjbXBmYWxzZXBzIHZjbXBuZXFfb3FwcyB2Y21wZ2Vfb3NwcyB2Y21wZ2VwcyB2Y21wZ3Rfb3NwcyB2Y21wZ3RwcyB2Y21wdHJ1ZV91cXBzIHZjbXB0cnVlcHMgdmNtcGx0X29xcHMgdmNtcGxlX29xcHMgdmNtcHVub3JkX3NwcyB2Y21wbmVxX3VzcHMgdmNtcG5sdF91cXBzIHZjbXBubGVfdXFwcyB2Y21wb3JkX3NwcyB2Y21wZXFfdXNwcyB2Y21wbmdlX3VxcHMgdmNtcG5ndF91cXBzIHZjbXBmYWxzZV9vc3BzIHZjbXBuZXFfb3NwcyB2Y21wZ2Vfb3FwcyB2Y21wZ3Rfb3FwcyB2Y21wdHJ1ZV91c3BzIHZjbXBwcyB2Y21wZXFfb3NzZCB2Y21wZXFzZCB2Y21wbHRfb3NzZCB2Y21wbHRzZCB2Y21wbGVfb3NzZCB2Y21wbGVzZCB2Y21wdW5vcmRfcXNkIHZjbXB1bm9yZHNkIHZjbXBuZXFfdXFzZCB2Y21wbmVxc2QgdmNtcG5sdF91c3NkIHZjbXBubHRzZCB2Y21wbmxlX3Vzc2QgdmNtcG5sZXNkIHZjbXBvcmRfcXNkIHZjbXBvcmRzZCB2Y21wZXFfdXFzZCB2Y21wbmdlX3Vzc2QgdmNtcG5nZXNkIHZjbXBuZ3RfdXNzZCB2Y21wbmd0c2QgdmNtcGZhbHNlX29xc2QgdmNtcGZhbHNlc2QgdmNtcG5lcV9vcXNkIHZjbXBnZV9vc3NkIHZjbXBnZXNkIHZjbXBndF9vc3NkIHZjbXBndHNkIHZjbXB0cnVlX3Vxc2QgdmNtcHRydWVzZCB2Y21wbHRfb3FzZCB2Y21wbGVfb3FzZCB2Y21wdW5vcmRfc3NkIHZjbXBuZXFfdXNzZCB2Y21wbmx0X3Vxc2QgdmNtcG5sZV91cXNkIHZjbXBvcmRfc3NkIHZjbXBlcV91c3NkIHZjbXBuZ2VfdXFzZCB2Y21wbmd0X3Vxc2QgdmNtcGZhbHNlX29zc2QgdmNtcG5lcV9vc3NkIHZjbXBnZV9vcXNkIHZjbXBndF9vcXNkIHZjbXB0cnVlX3Vzc2QgdmNtcHNkIHZjbXBlcV9vc3NzIHZjbXBlcXNzIHZjbXBsdF9vc3NzIHZjbXBsdHNzIHZjbXBsZV9vc3NzIHZjbXBsZXNzIHZjbXB1bm9yZF9xc3MgdmNtcHVub3Jkc3MgdmNtcG5lcV91cXNzIHZjbXBuZXFzcyB2Y21wbmx0X3Vzc3MgdmNtcG5sdHNzIHZjbXBubGVfdXNzcyB2Y21wbmxlc3MgdmNtcG9yZF9xc3MgdmNtcG9yZHNzIHZjbXBlcV91cXNzIHZjbXBuZ2VfdXNzcyB2Y21wbmdlc3MgdmNtcG5ndF91c3NzIHZjbXBuZ3RzcyB2Y21wZmFsc2Vfb3FzcyB2Y21wZmFsc2VzcyB2Y21wbmVxX29xc3MgdmNtcGdlX29zc3MgdmNtcGdlc3MgdmNtcGd0X29zc3MgdmNtcGd0c3MgdmNtcHRydWVfdXFzcyB2Y21wdHJ1ZXNzIHZjbXBsdF9vcXNzIHZjbXBsZV9vcXNzIHZjbXB1bm9yZF9zc3MgdmNtcG5lcV91c3NzIHZjbXBubHRfdXFzcyB2Y21wbmxlX3Vxc3MgdmNtcG9yZF9zc3MgdmNtcGVxX3Vzc3MgdmNtcG5nZV91cXNzIHZjbXBuZ3RfdXFzcyB2Y21wZmFsc2Vfb3NzcyB2Y21wbmVxX29zc3MgdmNtcGdlX29xc3MgdmNtcGd0X29xc3MgdmNtcHRydWVfdXNzcyB2Y21wc3MgdmNvbWlzZCB2Y29taXNzIHZjdnRkcTJwZCB2Y3Z0ZHEycHMgdmN2dHBkMmRxIHZjdnRwZDJwcyB2Y3Z0cHMyZHEgdmN2dHBzMnBkIHZjdnRzZDJzaSB2Y3Z0c2Qyc3MgdmN2dHNpMnNkIHZjdnRzaTJzcyB2Y3Z0c3Myc2QgdmN2dHNzMnNpIHZjdnR0cGQyZHEgdmN2dHRwczJkcSB2Y3Z0dHNkMnNpIHZjdnR0c3Myc2kgdmRpdnBkIHZkaXZwcyB2ZGl2c2QgdmRpdnNzIHZkcHBkIHZkcHBzIHZleHRyYWN0ZjEyOCB2ZXh0cmFjdHBzIHZoYWRkcGQgdmhhZGRwcyB2aHN1YnBkIHZoc3VicHMgdmluc2VydGYxMjggdmluc2VydHBzIHZsZGRxdSB2bGRxcXUgdmxkbXhjc3Igdm1hc2ttb3ZkcXUgdm1hc2ttb3ZwcyB2bWFza21vdnBkIHZtYXhwZCB2bWF4cHMgdm1heHNkIHZtYXhzcyB2bWlucGQgdm1pbnBzIHZtaW5zZCB2bWluc3Mgdm1vdmFwZCB2bW92YXBzIHZtb3ZkIHZtb3ZxIHZtb3ZkZHVwIHZtb3ZkcWEgdm1vdnFxYSB2bW92ZHF1IHZtb3ZxcXUgdm1vdmhscHMgdm1vdmhwZCB2bW92aHBzIHZtb3ZsaHBzIHZtb3ZscGQgdm1vdmxwcyB2bW92bXNrcGQgdm1vdm1za3BzIHZtb3ZudGRxIHZtb3ZudHFxIHZtb3ZudGRxYSB2bW92bnRwZCB2bW92bnRwcyB2bW92c2Qgdm1vdnNoZHVwIHZtb3ZzbGR1cCB2bW92c3Mgdm1vdnVwZCB2bW92dXBzIHZtcHNhZGJ3IHZtdWxwZCB2bXVscHMgdm11bHNkIHZtdWxzcyB2b3JwZCB2b3JwcyB2cGFic2IgdnBhYnN3IHZwYWJzZCB2cGFja3Nzd2IgdnBhY2tzc2R3IHZwYWNrdXN3YiB2cGFja3VzZHcgdnBhZGRiIHZwYWRkdyB2cGFkZGQgdnBhZGRxIHZwYWRkc2IgdnBhZGRzdyB2cGFkZHVzYiB2cGFkZHVzdyB2cGFsaWduciB2cGFuZCB2cGFuZG4gdnBhdmdiIHZwYXZndyB2cGJsZW5kdmIgdnBibGVuZHcgdnBjbXBlc3RyaSB2cGNtcGVzdHJtIHZwY21waXN0cmkgdnBjbXBpc3RybSB2cGNtcGVxYiB2cGNtcGVxdyB2cGNtcGVxZCB2cGNtcGVxcSB2cGNtcGd0YiB2cGNtcGd0dyB2cGNtcGd0ZCB2cGNtcGd0cSB2cGVybWlscGQgdnBlcm1pbHBzIHZwZXJtMmYxMjggdnBleHRyYiB2cGV4dHJ3IHZwZXh0cmQgdnBleHRycSB2cGhhZGR3IHZwaGFkZGQgdnBoYWRkc3cgdnBobWlucG9zdXcgdnBoc3VidyB2cGhzdWJkIHZwaHN1YnN3IHZwaW5zcmIgdnBpbnNydyB2cGluc3JkIHZwaW5zcnEgdnBtYWRkd2QgdnBtYWRkdWJzdyB2cG1heHNiIHZwbWF4c3cgdnBtYXhzZCB2cG1heHViIHZwbWF4dXcgdnBtYXh1ZCB2cG1pbnNiIHZwbWluc3cgdnBtaW5zZCB2cG1pbnViIHZwbWludXcgdnBtaW51ZCB2cG1vdm1za2IgdnBtb3ZzeGJ3IHZwbW92c3hiZCB2cG1vdnN4YnEgdnBtb3ZzeHdkIHZwbW92c3h3cSB2cG1vdnN4ZHEgdnBtb3Z6eGJ3IHZwbW92enhiZCB2cG1vdnp4YnEgdnBtb3Z6eHdkIHZwbW92enh3cSB2cG1vdnp4ZHEgdnBtdWxodXcgdnBtdWxocnN3IHZwbXVsaHcgdnBtdWxsdyB2cG11bGxkIHZwbXVsdWRxIHZwbXVsZHEgdnBvciB2cHNhZGJ3IHZwc2h1ZmIgdnBzaHVmZCB2cHNodWZodyB2cHNodWZsdyB2cHNpZ25iIHZwc2lnbncgdnBzaWduZCB2cHNsbGRxIHZwc3JsZHEgdnBzbGx3IHZwc2xsZCB2cHNsbHEgdnBzcmF3IHZwc3JhZCB2cHNybHcgdnBzcmxkIHZwc3JscSB2cHRlc3QgdnBzdWJiIHZwc3VidyB2cHN1YmQgdnBzdWJxIHZwc3Vic2IgdnBzdWJzdyB2cHN1YnVzYiB2cHN1YnVzdyB2cHVucGNraGJ3IHZwdW5wY2tod2QgdnB1bnBja2hkcSB2cHVucGNraHFkcSB2cHVucGNrbGJ3IHZwdW5wY2tsd2QgdnB1bnBja2xkcSB2cHVucGNrbHFkcSB2cHhvciB2cmNwcHMgdnJjcHNzIHZyc3FydHBzIHZyc3FydHNzIHZyb3VuZHBkIHZyb3VuZHBzIHZyb3VuZHNkIHZyb3VuZHNzIHZzaHVmcGQgdnNodWZwcyB2c3FydHBkIHZzcXJ0cHMgdnNxcnRzZCB2c3FydHNzIHZzdG14Y3NyIHZzdWJwZCB2c3VicHMgdnN1YnNkIHZzdWJzcyB2dGVzdHBzIHZ0ZXN0cGQgdnVjb21pc2QgdnVjb21pc3MgdnVucGNraHBkIHZ1bnBja2hwcyB2dW5wY2tscGQgdnVucGNrbHBzIHZ4b3JwZCB2eG9ycHMgdnplcm9hbGwgdnplcm91cHBlciBwY2xtdWxscWxxZHEgcGNsbXVsaHFscWRxIHBjbG11bGxxaHFkcSBwY2xtdWxocWhxZHEgcGNsbXVscWRxIHZwY2xtdWxscWxxZHEgdnBjbG11bGhxbHFkcSB2cGNsbXVsbHFocWRxIHZwY2xtdWxocWhxZHEgdnBjbG11bHFkcSB2Zm1hZGQxMzJwcyB2Zm1hZGQxMzJwZCB2Zm1hZGQzMTJwcyB2Zm1hZGQzMTJwZCB2Zm1hZGQyMTNwcyB2Zm1hZGQyMTNwZCB2Zm1hZGQxMjNwcyB2Zm1hZGQxMjNwZCB2Zm1hZGQyMzFwcyB2Zm1hZGQyMzFwZCB2Zm1hZGQzMjFwcyB2Zm1hZGQzMjFwZCB2Zm1hZGRzdWIxMzJwcyB2Zm1hZGRzdWIxMzJwZCB2Zm1hZGRzdWIzMTJwcyB2Zm1hZGRzdWIzMTJwZCB2Zm1hZGRzdWIyMTNwcyB2Zm1hZGRzdWIyMTNwZCB2Zm1hZGRzdWIxMjNwcyB2Zm1hZGRzdWIxMjNwZCB2Zm1hZGRzdWIyMzFwcyB2Zm1hZGRzdWIyMzFwZCB2Zm1hZGRzdWIzMjFwcyB2Zm1hZGRzdWIzMjFwZCB2Zm1zdWIxMzJwcyB2Zm1zdWIxMzJwZCB2Zm1zdWIzMTJwcyB2Zm1zdWIzMTJwZCB2Zm1zdWIyMTNwcyB2Zm1zdWIyMTNwZCB2Zm1zdWIxMjNwcyB2Zm1zdWIxMjNwZCB2Zm1zdWIyMzFwcyB2Zm1zdWIyMzFwZCB2Zm1zdWIzMjFwcyB2Zm1zdWIzMjFwZCB2Zm1zdWJhZGQxMzJwcyB2Zm1zdWJhZGQxMzJwZCB2Zm1zdWJhZGQzMTJwcyB2Zm1zdWJhZGQzMTJwZCB2Zm1zdWJhZGQyMTNwcyB2Zm1zdWJhZGQyMTNwZCB2Zm1zdWJhZGQxMjNwcyB2Zm1zdWJhZGQxMjNwZCB2Zm1zdWJhZGQyMzFwcyB2Zm1zdWJhZGQyMzFwZCB2Zm1zdWJhZGQzMjFwcyB2Zm1zdWJhZGQzMjFwZCB2Zm5tYWRkMTMycHMgdmZubWFkZDEzMnBkIHZmbm1hZGQzMTJwcyB2Zm5tYWRkMzEycGQgdmZubWFkZDIxM3BzIHZmbm1hZGQyMTNwZCB2Zm5tYWRkMTIzcHMgdmZubWFkZDEyM3BkIHZmbm1hZGQyMzFwcyB2Zm5tYWRkMjMxcGQgdmZubWFkZDMyMXBzIHZmbm1hZGQzMjFwZCB2Zm5tc3ViMTMycHMgdmZubXN1YjEzMnBkIHZmbm1zdWIzMTJwcyB2Zm5tc3ViMzEycGQgdmZubXN1YjIxM3BzIHZmbm1zdWIyMTNwZCB2Zm5tc3ViMTIzcHMgdmZubXN1YjEyM3BkIHZmbm1zdWIyMzFwcyB2Zm5tc3ViMjMxcGQgdmZubXN1YjMyMXBzIHZmbm1zdWIzMjFwZCB2Zm1hZGQxMzJzcyB2Zm1hZGQxMzJzZCB2Zm1hZGQzMTJzcyB2Zm1hZGQzMTJzZCB2Zm1hZGQyMTNzcyB2Zm1hZGQyMTNzZCB2Zm1hZGQxMjNzcyB2Zm1hZGQxMjNzZCB2Zm1hZGQyMzFzcyB2Zm1hZGQyMzFzZCB2Zm1hZGQzMjFzcyB2Zm1hZGQzMjFzZCB2Zm1zdWIxMzJzcyB2Zm1zdWIxMzJzZCB2Zm1zdWIzMTJzcyB2Zm1zdWIzMTJzZCB2Zm1zdWIyMTNzcyB2Zm1zdWIyMTNzZCB2Zm1zdWIxMjNzcyB2Zm1zdWIxMjNzZCB2Zm1zdWIyMzFzcyB2Zm1zdWIyMzFzZCB2Zm1zdWIzMjFzcyB2Zm1zdWIzMjFzZCB2Zm5tYWRkMTMyc3MgdmZubWFkZDEzMnNkIHZmbm1hZGQzMTJzcyB2Zm5tYWRkMzEyc2QgdmZubWFkZDIxM3NzIHZmbm1hZGQyMTNzZCB2Zm5tYWRkMTIzc3MgdmZubWFkZDEyM3NkIHZmbm1hZGQyMzFzcyB2Zm5tYWRkMjMxc2QgdmZubWFkZDMyMXNzIHZmbm1hZGQzMjFzZCB2Zm5tc3ViMTMyc3MgdmZubXN1YjEzMnNkIHZmbm1zdWIzMTJzcyB2Zm5tc3ViMzEyc2QgdmZubXN1YjIxM3NzIHZmbm1zdWIyMTNzZCB2Zm5tc3ViMTIzc3MgdmZubXN1YjEyM3NkIHZmbm1zdWIyMzFzcyB2Zm5tc3ViMjMxc2QgdmZubXN1YjMyMXNzIHZmbm1zdWIzMjFzZCByZGZzYmFzZSByZGdzYmFzZSByZHJhbmQgd3Jmc2Jhc2Ugd3Jnc2Jhc2UgdmN2dHBoMnBzIHZjdnRwczJwaCBhZGN4IGFkb3ggcmRzZWVkIGNsYWMgc3RhYyB4c3RvcmUgeGNyeXB0ZWNiIHhjcnlwdGNiYyB4Y3J5cHRjdHIgeGNyeXB0Y2ZiIHhjcnlwdG9mYiBtb250bXVsIHhzaGExIHhzaGEyNTYgbGx3cGNiIHNsd3BjYiBsd3B2YWwgbHdwaW5zIHZmbWFkZHBkIHZmbWFkZHBzIHZmbWFkZHNkIHZmbWFkZHNzIHZmbWFkZHN1YnBkIHZmbWFkZHN1YnBzIHZmbXN1YmFkZHBkIHZmbXN1YmFkZHBzIHZmbXN1YnBkIHZmbXN1YnBzIHZmbXN1YnNkIHZmbXN1YnNzIHZmbm1hZGRwZCB2Zm5tYWRkcHMgdmZubWFkZHNkIHZmbm1hZGRzcyB2Zm5tc3VicGQgdmZubXN1YnBzIHZmbm1zdWJzZCB2Zm5tc3Vic3MgdmZyY3pwZCB2ZnJjenBzIHZmcmN6c2QgdmZyY3pzcyB2cGNtb3YgdnBjb21iIHZwY29tZCB2cGNvbXEgdnBjb211YiB2cGNvbXVkIHZwY29tdXEgdnBjb211dyB2cGNvbXcgdnBoYWRkYmQgdnBoYWRkYnEgdnBoYWRkYncgdnBoYWRkZHEgdnBoYWRkdWJkIHZwaGFkZHVicSB2cGhhZGR1YncgdnBoYWRkdWRxIHZwaGFkZHV3ZCB2cGhhZGR1d3EgdnBoYWRkd2QgdnBoYWRkd3EgdnBoc3ViYncgdnBoc3ViZHEgdnBoc3Vid2QgdnBtYWNzZGQgdnBtYWNzZHFoIHZwbWFjc2RxbCB2cG1hY3NzZGQgdnBtYWNzc2RxaCB2cG1hY3NzZHFsIHZwbWFjc3N3ZCB2cG1hY3Nzd3cgdnBtYWNzd2QgdnBtYWNzd3cgdnBtYWRjc3N3ZCB2cG1hZGNzd2QgdnBwZXJtIHZwcm90YiB2cHJvdGQgdnByb3RxIHZwcm90dyB2cHNoYWIgdnBzaGFkIHZwc2hhcSB2cHNoYXcgdnBzaGxiIHZwc2hsZCB2cHNobHEgdnBzaGx3IHZicm9hZGNhc3RpMTI4IHZwYmxlbmRkIHZwYnJvYWRjYXN0YiB2cGJyb2FkY2FzdHcgdnBicm9hZGNhc3RkIHZwYnJvYWRjYXN0cSB2cGVybWQgdnBlcm1wZCB2cGVybXBzIHZwZXJtcSB2cGVybTJpMTI4IHZleHRyYWN0aTEyOCB2aW5zZXJ0aTEyOCB2cG1hc2ttb3ZkIHZwbWFza21vdnEgdnBzbGx2ZCB2cHNsbHZxIHZwc3JhdmQgdnBzcmx2ZCB2cHNybHZxIHZnYXRoZXJkcGQgdmdhdGhlcnFwZCB2Z2F0aGVyZHBzIHZnYXRoZXJxcHMgdnBnYXRoZXJkZCB2cGdhdGhlcnFkIHZwZ2F0aGVyZHEgdnBnYXRoZXJxcSB4YWJvcnQgeGJlZ2luIHhlbmQgeHRlc3QgYW5kbiBiZXh0ciBibGNpIGJsY2ljIGJsc2kgYmxzaWMgYmxjZmlsbCBibHNmaWxsIGJsY21zayBibHNtc2sgYmxzciBibGNzIGJ6aGkgbXVseCBwZGVwIHBleHQgcm9yeCBzYXJ4IHNobHggc2hyeCB0emNudCB0em1zayB0MW1za2MgdmFsaWduZCB2YWxpZ25xIHZibGVuZG1wZCB2YmxlbmRtcHMgdmJyb2FkY2FzdGYzMng0IHZicm9hZGNhc3RmNjR4NCB2YnJvYWRjYXN0aTMyeDQgdmJyb2FkY2FzdGk2NHg0IHZjb21wcmVzc3BkIHZjb21wcmVzc3BzIHZjdnRwZDJ1ZHEgdmN2dHBzMnVkcSB2Y3Z0c2QydXNpIHZjdnRzczJ1c2kgdmN2dHRwZDJ1ZHEgdmN2dHRwczJ1ZHEgdmN2dHRzZDJ1c2kgdmN2dHRzczJ1c2kgdmN2dHVkcTJwZCB2Y3Z0dWRxMnBzIHZjdnR1c2kyc2QgdmN2dHVzaTJzcyB2ZXhwYW5kcGQgdmV4cGFuZHBzIHZleHRyYWN0ZjMyeDQgdmV4dHJhY3RmNjR4NCB2ZXh0cmFjdGkzMng0IHZleHRyYWN0aTY0eDQgdmZpeHVwaW1tcGQgdmZpeHVwaW1tcHMgdmZpeHVwaW1tc2QgdmZpeHVwaW1tc3MgdmdldGV4cHBkIHZnZXRleHBwcyB2Z2V0ZXhwc2QgdmdldGV4cHNzIHZnZXRtYW50cGQgdmdldG1hbnRwcyB2Z2V0bWFudHNkIHZnZXRtYW50c3Mgdmluc2VydGYzMng0IHZpbnNlcnRmNjR4NCB2aW5zZXJ0aTMyeDQgdmluc2VydGk2NHg0IHZtb3ZkcWEzMiB2bW92ZHFhNjQgdm1vdmRxdTMyIHZtb3ZkcXU2NCB2cGFic3EgdnBhbmRkIHZwYW5kbmQgdnBhbmRucSB2cGFuZHEgdnBibGVuZG1kIHZwYmxlbmRtcSB2cGNtcGx0ZCB2cGNtcGxlZCB2cGNtcG5lcWQgdnBjbXBubHRkIHZwY21wbmxlZCB2cGNtcGQgdnBjbXBsdHEgdnBjbXBsZXEgdnBjbXBuZXFxIHZwY21wbmx0cSB2cGNtcG5sZXEgdnBjbXBxIHZwY21wZXF1ZCB2cGNtcGx0dWQgdnBjbXBsZXVkIHZwY21wbmVxdWQgdnBjbXBubHR1ZCB2cGNtcG5sZXVkIHZwY21wdWQgdnBjbXBlcXVxIHZwY21wbHR1cSB2cGNtcGxldXEgdnBjbXBuZXF1cSB2cGNtcG5sdHVxIHZwY21wbmxldXEgdnBjbXB1cSB2cGNvbXByZXNzZCB2cGNvbXByZXNzcSB2cGVybWkyZCB2cGVybWkycGQgdnBlcm1pMnBzIHZwZXJtaTJxIHZwZXJtdDJkIHZwZXJtdDJwZCB2cGVybXQycHMgdnBlcm10MnEgdnBleHBhbmRkIHZwZXhwYW5kcSB2cG1heHNxIHZwbWF4dXEgdnBtaW5zcSB2cG1pbnVxIHZwbW92ZGIgdnBtb3ZkdyB2cG1vdnFiIHZwbW92cWQgdnBtb3ZxdyB2cG1vdnNkYiB2cG1vdnNkdyB2cG1vdnNxYiB2cG1vdnNxZCB2cG1vdnNxdyB2cG1vdnVzZGIgdnBtb3Z1c2R3IHZwbW92dXNxYiB2cG1vdnVzcWQgdnBtb3Z1c3F3IHZwb3JkIHZwb3JxIHZwcm9sZCB2cHJvbHEgdnByb2x2ZCB2cHJvbHZxIHZwcm9yZCB2cHJvcnEgdnByb3J2ZCB2cHJvcnZxIHZwc2NhdHRlcmRkIHZwc2NhdHRlcmRxIHZwc2NhdHRlcnFkIHZwc2NhdHRlcnFxIHZwc3JhcSB2cHNyYXZxIHZwdGVybmxvZ2QgdnB0ZXJubG9ncSB2cHRlc3RtZCB2cHRlc3RtcSB2cHRlc3RubWQgdnB0ZXN0bm1xIHZweG9yZCB2cHhvcnEgdnJjcDE0cGQgdnJjcDE0cHMgdnJjcDE0c2QgdnJjcDE0c3MgdnJuZHNjYWxlcGQgdnJuZHNjYWxlcHMgdnJuZHNjYWxlc2QgdnJuZHNjYWxlc3MgdnJzcXJ0MTRwZCB2cnNxcnQxNHBzIHZyc3FydDE0c2QgdnJzcXJ0MTRzcyB2c2NhbGVmcGQgdnNjYWxlZnBzIHZzY2FsZWZzZCB2c2NhbGVmc3MgdnNjYXR0ZXJkcGQgdnNjYXR0ZXJkcHMgdnNjYXR0ZXJxcGQgdnNjYXR0ZXJxcHMgdnNodWZmMzJ4NCB2c2h1ZmY2NHgyIHZzaHVmaTMyeDQgdnNodWZpNjR4MiBrYW5kbncga2FuZHcga21vdncga25vdHcga29ydGVzdHcga29ydyBrc2hpZnRsdyBrc2hpZnRydyBrdW5wY2tidyBreG5vcncga3hvcncgdnBicm9hZGNhc3RtYjJxIHZwYnJvYWRjYXN0bXcyZCB2cGNvbmZsaWN0ZCB2cGNvbmZsaWN0cSB2cGx6Y250ZCB2cGx6Y250cSB2ZXhwMnBkIHZleHAycHMgdnJjcDI4cGQgdnJjcDI4cHMgdnJjcDI4c2QgdnJjcDI4c3MgdnJzcXJ0MjhwZCB2cnNxcnQyOHBzIHZyc3FydDI4c2QgdnJzcXJ0MjhzcyB2Z2F0aGVycGYwZHBkIHZnYXRoZXJwZjBkcHMgdmdhdGhlcnBmMHFwZCB2Z2F0aGVycGYwcXBzIHZnYXRoZXJwZjFkcGQgdmdhdGhlcnBmMWRwcyB2Z2F0aGVycGYxcXBkIHZnYXRoZXJwZjFxcHMgdnNjYXR0ZXJwZjBkcGQgdnNjYXR0ZXJwZjBkcHMgdnNjYXR0ZXJwZjBxcGQgdnNjYXR0ZXJwZjBxcHMgdnNjYXR0ZXJwZjFkcGQgdnNjYXR0ZXJwZjFkcHMgdnNjYXR0ZXJwZjFxcGQgdnNjYXR0ZXJwZjFxcHMgcHJlZmV0Y2h3dDEgYm5kbWsgYm5kY2wgYm5kY3UgYm5kY24gYm5kbW92IGJuZGxkeCBibmRzdHggc2hhMXJuZHM0IHNoYTFuZXh0ZSBzaGExbXNnMSBzaGExbXNnMiBzaGEyNTZybmRzMiBzaGEyNTZtc2cxIHNoYTI1Nm1zZzIgaGludF9ub3AwIGhpbnRfbm9wMSBoaW50X25vcDIgaGludF9ub3AzIGhpbnRfbm9wNCBoaW50X25vcDUgaGludF9ub3A2IGhpbnRfbm9wNyBoaW50X25vcDggaGludF9ub3A5IGhpbnRfbm9wMTAgaGludF9ub3AxMSBoaW50X25vcDEyIGhpbnRfbm9wMTMgaGludF9ub3AxNCBoaW50X25vcDE1IGhpbnRfbm9wMTYgaGludF9ub3AxNyBoaW50X25vcDE4IGhpbnRfbm9wMTkgaGludF9ub3AyMCBoaW50X25vcDIxIGhpbnRfbm9wMjIgaGludF9ub3AyMyBoaW50X25vcDI0IGhpbnRfbm9wMjUgaGludF9ub3AyNiBoaW50X25vcDI3IGhpbnRfbm9wMjggaGludF9ub3AyOSBoaW50X25vcDMwIGhpbnRfbm9wMzEgaGludF9ub3AzMiBoaW50X25vcDMzIGhpbnRfbm9wMzQgaGludF9ub3AzNSBoaW50X25vcDM2IGhpbnRfbm9wMzcgaGludF9ub3AzOCBoaW50X25vcDM5IGhpbnRfbm9wNDAgaGludF9ub3A0MSBoaW50X25vcDQyIGhpbnRfbm9wNDMgaGludF9ub3A0NCBoaW50X25vcDQ1IGhpbnRfbm9wNDYgaGludF9ub3A0NyBoaW50X25vcDQ4IGhpbnRfbm9wNDkgaGludF9ub3A1MCBoaW50X25vcDUxIGhpbnRfbm9wNTIgaGludF9ub3A1MyBoaW50X25vcDU0IGhpbnRfbm9wNTUgaGludF9ub3A1NiBoaW50X25vcDU3IGhpbnRfbm9wNTggaGludF9ub3A1OSBoaW50X25vcDYwIGhpbnRfbm9wNjEgaGludF9ub3A2MiBoaW50X25vcDYzJyxcbiAgICAgIGJ1aWx0X2luOlxuICAgICAgICAvLyBJbnN0cnVjdGlvbiBwb2ludGVyXG4gICAgICAgICdpcCBlaXAgcmlwICcgK1xuICAgICAgICAvLyA4LWJpdCByZWdpc3RlcnNcbiAgICAgICAgJ2FsIGFoIGJsIGJoIGNsIGNoIGRsIGRoIHNpbCBkaWwgYnBsIHNwbCByOGIgcjliIHIxMGIgcjExYiByMTJiIHIxM2IgcjE0YiByMTViICcgK1xuICAgICAgICAvLyAxNi1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdheCBieCBjeCBkeCBzaSBkaSBicCBzcCByOHcgcjl3IHIxMHcgcjExdyByMTJ3IHIxM3cgcjE0dyByMTV3ICcgK1xuICAgICAgICAvLyAzMi1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdlYXggZWJ4IGVjeCBlZHggZXNpIGVkaSBlYnAgZXNwIGVpcCByOGQgcjlkIHIxMGQgcjExZCByMTJkIHIxM2QgcjE0ZCByMTVkICcgK1xuICAgICAgICAvLyA2NC1iaXQgcmVnaXN0ZXJzXG4gICAgICAgICdyYXggcmJ4IHJjeCByZHggcnNpIHJkaSByYnAgcnNwIHI4IHI5IHIxMCByMTEgcjEyIHIxMyByMTQgcjE1ICcgK1xuICAgICAgICAvLyBTZWdtZW50IHJlZ2lzdGVyc1xuICAgICAgICAnY3MgZHMgZXMgZnMgZ3Mgc3MgJyArXG4gICAgICAgIC8vIEZsb2F0aW5nIHBvaW50IHN0YWNrIHJlZ2lzdGVyc1xuICAgICAgICAnc3Qgc3QwIHN0MSBzdDIgc3QzIHN0NCBzdDUgc3Q2IHN0NyAnICtcbiAgICAgICAgLy8gTU1YIFJlZ2lzdGVyc1xuICAgICAgICAnbW0wIG1tMSBtbTIgbW0zIG1tNCBtbTUgbW02IG1tNyAnICtcbiAgICAgICAgLy8gU1NFIHJlZ2lzdGVyc1xuICAgICAgICAneG1tMCAgeG1tMSAgeG1tMiAgeG1tMyAgeG1tNCAgeG1tNSAgeG1tNiAgeG1tNyAgeG1tOCAgeG1tOSB4bW0xMCAgeG1tMTEgeG1tMTIgeG1tMTMgeG1tMTQgeG1tMTUgJyArXG4gICAgICAgICd4bW0xNiB4bW0xNyB4bW0xOCB4bW0xOSB4bW0yMCB4bW0yMSB4bW0yMiB4bW0yMyB4bW0yNCB4bW0yNSB4bW0yNiB4bW0yNyB4bW0yOCB4bW0yOSB4bW0zMCB4bW0zMSAnICtcbiAgICAgICAgLy8gQVZYIHJlZ2lzdGVyc1xuICAgICAgICAneW1tMCAgeW1tMSAgeW1tMiAgeW1tMyAgeW1tNCAgeW1tNSAgeW1tNiAgeW1tNyAgeW1tOCAgeW1tOSB5bW0xMCAgeW1tMTEgeW1tMTIgeW1tMTMgeW1tMTQgeW1tMTUgJyArXG4gICAgICAgICd5bW0xNiB5bW0xNyB5bW0xOCB5bW0xOSB5bW0yMCB5bW0yMSB5bW0yMiB5bW0yMyB5bW0yNCB5bW0yNSB5bW0yNiB5bW0yNyB5bW0yOCB5bW0yOSB5bW0zMCB5bW0zMSAnICtcbiAgICAgICAgLy8gQVZYLTUxMkYgcmVnaXN0ZXJzXG4gICAgICAgICd6bW0wICB6bW0xICB6bW0yICB6bW0zICB6bW00ICB6bW01ICB6bW02ICB6bW03ICB6bW04ICB6bW05IHptbTEwICB6bW0xMSB6bW0xMiB6bW0xMyB6bW0xNCB6bW0xNSAnICtcbiAgICAgICAgJ3ptbTE2IHptbTE3IHptbTE4IHptbTE5IHptbTIwIHptbTIxIHptbTIyIHptbTIzIHptbTI0IHptbTI1IHptbTI2IHptbTI3IHptbTI4IHptbTI5IHptbTMwIHptbTMxICcgK1xuICAgICAgICAvLyBBVlgtNTEyRiBtYXNrIHJlZ2lzdGVyc1xuICAgICAgICAnazAgazEgazIgazMgazQgazUgazYgazcgJyArXG4gICAgICAgIC8vIEJvdW5kIChNUFgpIHJlZ2lzdGVyXG4gICAgICAgICdibmQwIGJuZDEgYm5kMiBibmQzICcgK1xuICAgICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVyXG4gICAgICAgICdjcjAgY3IxIGNyMiBjcjMgY3I0IGNyOCBkcjAgZHIxIGRyMiBkcjMgZHI4IHRyMyB0cjQgdHI1IHRyNiB0cjcgJyArXG4gICAgICAgIC8vIE5BU00gYWx0cmVnIHBhY2thZ2VcbiAgICAgICAgJ3IwIHIxIHIyIHIzIHI0IHI1IHI2IHI3IHIwYiByMWIgcjJiIHIzYiByNGIgcjViIHI2YiByN2IgJyArXG4gICAgICAgICdyMHcgcjF3IHIydyByM3cgcjR3IHI1dyByNncgcjd3IHIwZCByMWQgcjJkIHIzZCByNGQgcjVkIHI2ZCByN2QgJyArXG4gICAgICAgICdyMGggcjFoIHIyaCByM2ggJyArXG4gICAgICAgICdyMGwgcjFsIHIybCByM2wgcjRsIHI1bCByNmwgcjdsIHI4bCByOWwgcjEwbCByMTFsIHIxMmwgcjEzbCByMTRsIHIxNWwgJyArXG5cbiAgICAgICAgJ2RiIGR3IGRkIGRxIGR0IGRkcSBkbyBkeSBkeiAnICtcbiAgICAgICAgJ3Jlc2IgcmVzdyByZXNkIHJlc3EgcmVzdCByZXNkcSByZXNvIHJlc3kgcmVzeiAnICtcbiAgICAgICAgJ2luY2JpbiBlcXUgdGltZXMgJyArXG4gICAgICAgICdieXRlIHdvcmQgZHdvcmQgcXdvcmQgbm9zcGxpdCByZWwgYWJzIHNlZyB3cnQgc3RyaWN0IG5lYXIgZmFyIGEzMiBwdHInLFxuXG4gICAgICBtZXRhOlxuICAgICAgICAnJWRlZmluZSAleGRlZmluZSAlKyAldW5kZWYgJWRlZnN0ciAlZGVmdG9rICVhc3NpZ24gJXN0cmNhdCAlc3RybGVuICVzdWJzdHIgJXJvdGF0ZSAlZWxpZiAlZWxzZSAlZW5kaWYgJyArXG4gICAgICAgICclaWYgJWlmbWFjcm8gJWlmY3R4ICVpZmlkbiAlaWZpZG5pICVpZmlkICVpZm51bSAlaWZzdHIgJWlmdG9rZW4gJWlmZW1wdHkgJWlmZW52ICVlcnJvciAld2FybmluZyAlZmF0YWwgJXJlcCAnICtcbiAgICAgICAgJyVlbmRyZXAgJWluY2x1ZGUgJXB1c2ggJXBvcCAlcmVwbCAlcGF0aHNlYXJjaCAlZGVwZW5kICV1c2UgJWFyZyAlc3RhY2tzaXplICVsb2NhbCAlbGluZSAlY29tbWVudCAlZW5kY29tbWVudCAnICtcbiAgICAgICAgJy5ub2xpc3QgJyArXG4gICAgICAgICdfX0ZJTEVfXyBfX0xJTkVfXyBfX1NFQ1RfXyAgX19CSVRTX18gX19PVVRQVVRfRk9STUFUX18gX19EQVRFX18gX19USU1FX18gX19EQVRFX05VTV9fIF9fVElNRV9OVU1fXyAnICtcbiAgICAgICAgJ19fVVRDX0RBVEVfXyBfX1VUQ19USU1FX18gX19VVENfREFURV9OVU1fXyBfX1VUQ19USU1FX05VTV9fICBfX1BBU1NfXyBzdHJ1YyBlbmRzdHJ1YyBpc3RydWMgYXQgaWVuZCAnICtcbiAgICAgICAgJ2FsaWduIGFsaWduYiBzZWN0YWxpZ24gZGF6IG5vZGF6IHVwIGRvd24gemVybyBkZWZhdWx0IG9wdGlvbiBhc3N1bWUgcHVibGljICcgK1xuXG4gICAgICAgICdiaXRzIHVzZTE2IHVzZTMyIHVzZTY0IGRlZmF1bHQgc2VjdGlvbiBzZWdtZW50IGFic29sdXRlIGV4dGVybiBnbG9iYWwgY29tbW9uIGNwdSBmbG9hdCAnICtcbiAgICAgICAgJ19fdXRmMTZfXyBfX3V0ZjE2bGVfXyBfX3V0ZjE2YmVfXyBfX3V0ZjMyX18gX191dGYzMmxlX18gX191dGYzMmJlX18gJyArXG4gICAgICAgICdfX2Zsb2F0OF9fIF9fZmxvYXQxNl9fIF9fZmxvYXQzMl9fIF9fZmxvYXQ2NF9fIF9fZmxvYXQ4MG1fXyBfX2Zsb2F0ODBlX18gX19mbG9hdDEyOGxfXyBfX2Zsb2F0MTI4aF9fICcgK1xuICAgICAgICAnX19JbmZpbml0eV9fIF9fUU5hTl9fIF9fU05hTl9fIEluZiBOYU4gUU5hTiBTTmFOIGZsb2F0OCBmbG9hdDE2IGZsb2F0MzIgZmxvYXQ2NCBmbG9hdDgwbSBmbG9hdDgwZSAnICtcbiAgICAgICAgJ2Zsb2F0MTI4bCBmbG9hdDEyOGggX19GTE9BVF9EQVpfXyBfX0ZMT0FUX1JPVU5EX18gX19GTE9BVF9fJ1xuICAgIH0sXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ09NTUVOVChcbiAgICAgICAgJzsnLFxuICAgICAgICAnJCcsXG4gICAgICAgIHtcbiAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbnVtYmVyJyxcbiAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAvLyBGbG9hdCBudW1iZXIgYW5kIHg4NyBCQ0RcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiZWdpbjogJ1xcXFxiKD86KFswLTldWzAtOV9dKik/XFxcXC5bMC05X10qKD86W2VFXVsrLV0/WzAtOV9dKyk/fCcgK1xuICAgICAgICAgICAgICAgICAgICcoMFtYeF0pP1swLTldWzAtOV9dKlxcXFwuP1swLTlfXSooPzpbcFBdKD86WystXT9bMC05X10rKT8pPylcXFxcYicsXG4gICAgICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgLy8gSGV4IG51bWJlciBpbiAkXG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFwkWzAtOV1bMC05QS1GYS1mXSonLCByZWxldmFuY2U6IDAgfSxcblxuICAgICAgICAgIC8vIE51bWJlciBpbiBILEQsVCxRLE8sQixZIHN1ZmZpeFxuICAgICAgICAgIHsgYmVnaW46ICdcXFxcYig/OlswLTlBLUZhLWZdWzAtOUEtRmEtZl9dKltIaF18WzAtOV1bMC05X10qW0RkVHRdP3xbMC03XVswLTdfXSpbUXFPb118WzAtMV1bMC0xX10qW0JiWXldKVxcXFxiJyB9LFxuXG4gICAgICAgICAgLy8gTnVtYmVyIGluIFgsRCxULFEsTyxCLFkgcHJlZml4XG4gICAgICAgICAgeyBiZWdpbjogJ1xcXFxiKD86MFtYeF1bMC05QS1GYS1mX10rfDBbRGRUdF1bMC05X10rfDBbUXFPb11bMC03X10rfDBbQmJZeV1bMC0xX10rKVxcXFxiJ31cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIC8vIERvdWJsZSBxdW90ZSBzdHJpbmdcbiAgICAgIGhsanMuUVVPVEVfU1RSSU5HX01PREUsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gU2luZ2xlLXF1b3RlZCBzdHJpbmdcbiAgICAgICAgICB7IGJlZ2luOiAnXFwnJywgZW5kOiAnW15cXFxcXFxcXF1cXCcnIH0sXG4gICAgICAgICAgLy8gQmFja3F1b3RlZCBzdHJpbmdcbiAgICAgICAgICB7IGJlZ2luOiAnYCcsIGVuZDogJ1teXFxcXFxcXFxdYCcgfVxuICAgICAgICBdLFxuICAgICAgICByZWxldmFuY2U6IDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N5bWJvbCcsXG4gICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgLy8gR2xvYmFsIGxhYmVsIGFuZCBsb2NhbCBsYWJlbFxuICAgICAgICAgIHsgYmVnaW46ICdeXFxcXHMqW0EtWmEtei5fP11bQS1aYS16MC05XyQjQH4uP10qKDp8XFxcXHMrbGFiZWwpJyB9LFxuICAgICAgICAgIC8vIE1hY3JvLWxvY2FsIGxhYmVsXG4gICAgICAgICAgeyBiZWdpbjogJ15cXFxccyolJVtBLVphLXowLTlfJCNAfi4/XSo6JyB9XG4gICAgICAgIF0sXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIE1hY3JvIHBhcmFtZXRlclxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgIGJlZ2luOiAnJVswLTldKycsXG4gICAgICAgIHJlbGV2YW5jZTogMFxuICAgICAgfSxcbiAgICAgIC8vIE1hY3JvIHBhcmFtZXRlclxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdzdWJzdCcsXG4gICAgICAgIGJlZ2luOiAnJSFcXFMrJyxcbiAgICAgICAgcmVsZXZhbmNlOiAwXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdtZXRhJyxcbiAgICAgICAgYmVnaW46IC9eXFxzKlxcLltcXHdfLV0rL1xuICAgICAgfVxuICAgIF1cbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBCVUlMVElOX01PRFVMRVMgPVxuICAgICdPYmplY3RMb2FkZXIgQW5pbWF0ZSBNb3ZpZUNyZWRpdHMgU2xpZGVzIEZpbHRlcnMgU2hhZGluZyBNYXRlcmlhbHMgTGVuc0ZsYXJlIE1hcHBpbmcgVkxDQXVkaW9WaWRlbyAnICtcbiAgICAnU3RlcmVvRGVjb2RlciBQb2ludENsb3VkIE5ldHdvcmtBY2Nlc3MgUmVtb3RlQ29udHJvbCBSZWdFeHAgQ2hyb21hS2V5IFNub3dmYWxsIE5vZGVKUyBTcGVlY2ggQ2hhcnRzJztcblxuICB2YXIgWExfS0VZV09SRFMgPSB7XG4gICAga2V5d29yZDpcbiAgICAgICdpZiB0aGVuIGVsc2UgZG8gd2hpbGUgdW50aWwgZm9yIGxvb3AgaW1wb3J0IHdpdGggaXMgYXMgd2hlcmUgd2hlbiBieSBkYXRhIGNvbnN0YW50ICcgK1xuICAgICAgJ2ludGVnZXIgcmVhbCB0ZXh0IG5hbWUgYm9vbGVhbiBzeW1ib2wgaW5maXggcHJlZml4IHBvc3RmaXggYmxvY2sgdHJlZScsXG4gICAgbGl0ZXJhbDpcbiAgICAgICd0cnVlIGZhbHNlIG5pbCcsXG4gICAgYnVpbHRfaW46XG4gICAgICAnaW4gbW9kIHJlbSBhbmQgb3IgeG9yIG5vdCBhYnMgc2lnbiBmbG9vciBjZWlsIHNxcnQgc2luIGNvcyB0YW4gYXNpbiAnICtcbiAgICAgICdhY29zIGF0YW4gZXhwIGV4cG0xIGxvZyBsb2cyIGxvZzEwIGxvZzFwIHBpIGF0IHRleHRfbGVuZ3RoIHRleHRfcmFuZ2UgJyArXG4gICAgICAndGV4dF9maW5kIHRleHRfcmVwbGFjZSBjb250YWlucyBwYWdlIHNsaWRlIGJhc2ljX3NsaWRlIHRpdGxlX3NsaWRlICcgK1xuICAgICAgJ3RpdGxlIHN1YnRpdGxlIGZhZGVfaW4gZmFkZV9vdXQgZmFkZV9hdCBjbGVhcl9jb2xvciBjb2xvciBsaW5lX2NvbG9yICcgK1xuICAgICAgJ2xpbmVfd2lkdGggdGV4dHVyZV93cmFwIHRleHR1cmVfdHJhbnNmb3JtIHRleHR1cmUgc2NhbGVfP3ggc2NhbGVfP3kgJyArXG4gICAgICAnc2NhbGVfP3o/IHRyYW5zbGF0ZV8/eCB0cmFuc2xhdGVfP3kgdHJhbnNsYXRlXz96PyByb3RhdGVfP3ggcm90YXRlXz95ICcgK1xuICAgICAgJ3JvdGF0ZV8/ej8gcmVjdGFuZ2xlIGNpcmNsZSBlbGxpcHNlIHNwaGVyZSBwYXRoIGxpbmVfdG8gbW92ZV90byAnICtcbiAgICAgICdxdWFkX3RvIGN1cnZlX3RvIHRoZW1lIGJhY2tncm91bmQgY29udGVudHMgbG9jYWxseSB0aW1lIG1vdXNlXz94ICcgK1xuICAgICAgJ21vdXNlXz95IG1vdXNlX2J1dHRvbnMgJyArXG4gICAgICBCVUlMVElOX01PRFVMRVNcbiAgfTtcblxuICB2YXIgRE9VQkxFX1FVT1RFX1RFWFQgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBiZWdpbjogJ1wiJywgZW5kOiAnXCInLCBpbGxlZ2FsOiAnXFxcXG4nXG4gIH07XG4gIHZhciBTSU5HTEVfUVVPVEVfVEVYVCA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIGJlZ2luOiAnXFwnJywgZW5kOiAnXFwnJywgaWxsZWdhbDogJ1xcXFxuJ1xuICB9O1xuICB2YXIgTE9OR19URVhUID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgYmVnaW46ICc8PCcsIGVuZDogJz4+J1xuICB9O1xuICB2YXIgQkFTRURfTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICdbMC05XSsjWzAtOUEtWl9dKyhcXFxcLlswLTktQS1aX10rKT8jPyhbRWVdWystXT9bMC05XSspPydcbiAgfTtcbiAgdmFyIElNUE9SVCA9IHtcbiAgICBiZWdpbktleXdvcmRzOiAnaW1wb3J0JywgZW5kOiAnJCcsXG4gICAga2V5d29yZHM6IFhMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbRE9VQkxFX1FVT1RFX1RFWFRdXG4gIH07XG4gIHZhciBGVU5DVElPTl9ERUZJTklUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ2Z1bmN0aW9uJyxcbiAgICBiZWdpbjogL1thLXpdW15cXG5dKi0+LywgcmV0dXJuQmVnaW46IHRydWUsIGVuZDogLy0+LyxcbiAgICBjb250YWluczogW1xuICAgICAgaGxqcy5pbmhlcml0KGhsanMuVElUTEVfTU9ERSwge3N0YXJ0czoge1xuICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAga2V5d29yZHM6IFhMX0tFWVdPUkRTXG4gICAgICB9fSlcbiAgICBdXG4gIH07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd0YW8nXSxcbiAgICBsZXhlbWVzOiAvW2EtekEtWl1bYS16QS1aMC05Xz9dKi8sXG4gICAga2V5d29yZHM6IFhMX0tFWVdPUkRTLFxuICAgIGNvbnRhaW5zOiBbXG4gICAgaGxqcy5DX0xJTkVfQ09NTUVOVF9NT0RFLFxuICAgIGhsanMuQ19CTE9DS19DT01NRU5UX01PREUsXG4gICAgRE9VQkxFX1FVT1RFX1RFWFQsXG4gICAgU0lOR0xFX1FVT1RFX1RFWFQsXG4gICAgTE9OR19URVhULFxuICAgIEZVTkNUSU9OX0RFRklOSVRJT04sXG4gICAgSU1QT1JULFxuICAgIEJBU0VEX05VTUJFUixcbiAgICBobGpzLk5VTUJFUl9NT0RFXG4gICAgXVxuICB9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGhsanMpIHtcbiAgdmFyIEtFWVdPUkRTID0gJ2ZvciBsZXQgaWYgd2hpbGUgdGhlbiBlbHNlIHJldHVybiB3aGVyZSBncm91cCBieSB4cXVlcnkgZW5jb2RpbmcgdmVyc2lvbicgK1xuICAgICdtb2R1bGUgbmFtZXNwYWNlIGJvdW5kYXJ5LXNwYWNlIHByZXNlcnZlIHN0cmlwIGRlZmF1bHQgY29sbGF0aW9uIGJhc2UtdXJpIG9yZGVyaW5nJyArXG4gICAgJ2NvcHktbmFtZXNwYWNlcyBvcmRlciBkZWNsYXJlIGltcG9ydCBzY2hlbWEgbmFtZXNwYWNlIGZ1bmN0aW9uIG9wdGlvbiBpbiBhbGxvd2luZyBlbXB0eScgK1xuICAgICdhdCB0dW1ibGluZyB3aW5kb3cgc2xpZGluZyB3aW5kb3cgc3RhcnQgd2hlbiBvbmx5IGVuZCB3aGVuIHByZXZpb3VzIG5leHQgc3RhYmxlIGFzY2VuZGluZycgK1xuICAgICdkZXNjZW5kaW5nIGVtcHR5IGdyZWF0ZXN0IGxlYXN0IHNvbWUgZXZlcnkgc2F0aXNmaWVzIHN3aXRjaCBjYXNlIHR5cGVzd2l0Y2ggdHJ5IGNhdGNoIGFuZCcgK1xuICAgICdvciB0byB1bmlvbiBpbnRlcnNlY3QgaW5zdGFuY2Ugb2YgdHJlYXQgYXMgY2FzdGFibGUgY2FzdCBtYXAgYXJyYXkgZGVsZXRlIGluc2VydCBpbnRvJyArXG4gICAgJ3JlcGxhY2UgdmFsdWUgcmVuYW1lIGNvcHkgbW9kaWZ5IHVwZGF0ZSc7XG4gIHZhciBMSVRFUkFMID0gJ2ZhbHNlIHRydWUgeHM6c3RyaW5nIHhzOmludGVnZXIgZWxlbWVudCBpdGVtIHhzOmRhdGUgeHM6ZGF0ZXRpbWUgeHM6ZmxvYXQgeHM6ZG91YmxlIHhzOmRlY2ltYWwgUU5hbWUgeHM6YW55VVJJIHhzOmxvbmcgeHM6aW50IHhzOnNob3J0IHhzOmJ5dGUgYXR0cmlidXRlJztcbiAgdmFyIFZBUiA9IHtcbiAgICBiZWdpbjogL1xcJFthLXpBLVowLTlcXC1dKy9cbiAgfTtcblxuICB2YXIgTlVNQkVSID0ge1xuICAgIGNsYXNzTmFtZTogJ251bWJlcicsXG4gICAgYmVnaW46ICcoXFxcXGIwWzAtN19dKyl8KFxcXFxiMHhbMC05YS1mQS1GX10rKXwoXFxcXGJbMS05XVswLTlfXSooXFxcXC5bMC05X10rKT8pfFswX11cXFxcYicsXG4gICAgcmVsZXZhbmNlOiAwXG4gIH07XG5cbiAgdmFyIFNUUklORyA9IHtcbiAgICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICAgIHZhcmlhbnRzOiBbXG4gICAgICB7YmVnaW46IC9cIi8sIGVuZDogL1wiLywgY29udGFpbnM6IFt7YmVnaW46IC9cIlwiLywgcmVsZXZhbmNlOiAwfV19LFxuICAgICAge2JlZ2luOiAvJy8sIGVuZDogLycvLCBjb250YWluczogW3tiZWdpbjogLycnLywgcmVsZXZhbmNlOiAwfV19XG4gICAgXVxuICB9O1xuXG4gIHZhciBBTk5PVEFUSU9OID0ge1xuICAgIGNsYXNzTmFtZTogJ21ldGEnLFxuICAgIGJlZ2luOiAnJVxcXFx3KydcbiAgfTtcblxuICB2YXIgQ09NTUVOVCA9IHtcbiAgICBjbGFzc05hbWU6ICdjb21tZW50JyxcbiAgICBiZWdpbjogJ1xcXFwoOicsIGVuZDogJzpcXFxcKScsXG4gICAgcmVsZXZhbmNlOiAxMCxcbiAgICBjb250YWluczogW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdkb2N0YWcnLCBiZWdpbjogJ0BcXFxcdysnXG4gICAgICB9XG4gICAgXVxuICB9O1xuXG4gIHZhciBNRVRIT0QgPSB7XG4gICAgYmVnaW46ICd7JywgZW5kOiAnfSdcbiAgfTtcblxuICB2YXIgQ09OVEFJTlMgPSBbXG4gICAgVkFSLFxuICAgIFNUUklORyxcbiAgICBOVU1CRVIsXG4gICAgQ09NTUVOVCxcbiAgICBBTk5PVEFUSU9OLFxuICAgIE1FVEhPRFxuICBdO1xuICBNRVRIT0QuY29udGFpbnMgPSBDT05UQUlOUztcblxuXG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd4cGF0aCcsICd4cSddLFxuICAgIGNhc2VfaW5zZW5zaXRpdmU6IGZhbHNlLFxuICAgIGxleGVtZXM6IC9bYS16QS1aXFwkXVthLXpBLVowLTlfOlxcLV0qLyxcbiAgICBpbGxlZ2FsOiAvKHByb2MpfChhYnN0cmFjdCl8KGV4dGVuZHMpfCh1bnRpbCl8KCMpLyxcbiAgICBrZXl3b3Jkczoge1xuICAgICAga2V5d29yZDogS0VZV09SRFMsXG4gICAgICBsaXRlcmFsOiBMSVRFUkFMXG4gICAgfSxcbiAgICBjb250YWluczogQ09OVEFJTlNcbiAgfTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihobGpzKSB7XG4gIHZhciBTVFJJTkcgPSB7XG4gICAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgICBjb250YWluczogW2hsanMuQkFDS1NMQVNIX0VTQ0FQRV0sXG4gICAgdmFyaWFudHM6IFtcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICdiXCInLCBlbmQ6ICdcIidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJlZ2luOiAnYlxcJycsIGVuZDogJ1xcJydcbiAgICAgIH0sXG4gICAgICBobGpzLmluaGVyaXQoaGxqcy5BUE9TX1NUUklOR19NT0RFLCB7aWxsZWdhbDogbnVsbH0pLFxuICAgICAgaGxqcy5pbmhlcml0KGhsanMuUVVPVEVfU1RSSU5HX01PREUsIHtpbGxlZ2FsOiBudWxsfSlcbiAgICBdXG4gIH07XG4gIHZhciBOVU1CRVIgPSB7dmFyaWFudHM6IFtobGpzLkJJTkFSWV9OVU1CRVJfTU9ERSwgaGxqcy5DX05VTUJFUl9NT0RFXX07XG4gIHJldHVybiB7XG4gICAgYWxpYXNlczogWyd6ZXAnXSxcbiAgICBjYXNlX2luc2Vuc2l0aXZlOiB0cnVlLFxuICAgIGtleXdvcmRzOlxuICAgICAgJ2FuZCBpbmNsdWRlX29uY2UgbGlzdCBhYnN0cmFjdCBnbG9iYWwgcHJpdmF0ZSBlY2hvIGludGVyZmFjZSBhcyBzdGF0aWMgZW5kc3dpdGNoICcgK1xuICAgICAgJ2FycmF5IG51bGwgaWYgZW5kd2hpbGUgb3IgY29uc3QgZm9yIGVuZGZvcmVhY2ggc2VsZiB2YXIgbGV0IHdoaWxlIGlzc2V0IHB1YmxpYyAnICtcbiAgICAgICdwcm90ZWN0ZWQgZXhpdCBmb3JlYWNoIHRocm93IGVsc2VpZiBpbmNsdWRlIF9fRklMRV9fIGVtcHR5IHJlcXVpcmVfb25jZSBkbyB4b3IgJyArXG4gICAgICAncmV0dXJuIHBhcmVudCBjbG9uZSB1c2UgX19DTEFTU19fIF9fTElORV9fIGVsc2UgYnJlYWsgcHJpbnQgZXZhbCBuZXcgJyArXG4gICAgICAnY2F0Y2ggX19NRVRIT0RfXyBjYXNlIGV4Y2VwdGlvbiBkZWZhdWx0IGRpZSByZXF1aXJlIF9fRlVOQ1RJT05fXyAnICtcbiAgICAgICdlbmRkZWNsYXJlIGZpbmFsIHRyeSBzd2l0Y2ggY29udGludWUgZW5kZm9yIGVuZGlmIGRlY2xhcmUgdW5zZXQgdHJ1ZSBmYWxzZSAnICtcbiAgICAgICd0cmFpdCBnb3RvIGluc3RhbmNlb2YgaW5zdGVhZG9mIF9fRElSX18gX19OQU1FU1BBQ0VfXyAnICtcbiAgICAgICd5aWVsZCBmaW5hbGx5IGludCB1aW50IGxvbmcgdWxvbmcgY2hhciB1Y2hhciBkb3VibGUgZmxvYXQgYm9vbCBib29sZWFuIHN0cmluZycgK1xuICAgICAgJ2xpa2VseSB1bmxpa2VseScsXG4gICAgY29udGFpbnM6IFtcbiAgICAgIGhsanMuQ19MSU5FX0NPTU1FTlRfTU9ERSxcbiAgICAgIGhsanMuSEFTSF9DT01NRU5UX01PREUsXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICcvXFxcXConLFxuICAgICAgICAnXFxcXCovJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2RvY3RhZycsXG4gICAgICAgICAgICAgIGJlZ2luOiAnQFtBLVphLXpdKydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBobGpzLkNPTU1FTlQoXG4gICAgICAgICdfX2hhbHRfY29tcGlsZXIuKz87JyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRzV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBrZXl3b3JkczogJ19faGFsdF9jb21waWxlcicsXG4gICAgICAgICAgbGV4ZW1lczogaGxqcy5VTkRFUlNDT1JFX0lERU5UX1JFXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgICAgIGJlZ2luOiAnPDw8W1xcJ1wiXT9cXFxcdytbXFwnXCJdPyQnLCBlbmQ6ICdeXFxcXHcrOycsXG4gICAgICAgIGNvbnRhaW5zOiBbaGxqcy5CQUNLU0xBU0hfRVNDQVBFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLy8gc3dhbGxvdyBjb21wb3NlZCBpZGVudGlmaWVycyB0byBhdm9pZCBwYXJzaW5nIHRoZW0gYXMga2V5d29yZHNcbiAgICAgICAgYmVnaW46IC8oOjp8LT4pK1thLXpBLVpfXFx4N2YtXFx4ZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHhmZl0qL1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnZnVuY3Rpb24nLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnZnVuY3Rpb24nLCBlbmQ6IC9bO3tdLywgZXhjbHVkZUVuZDogdHJ1ZSxcbiAgICAgICAgaWxsZWdhbDogJ1xcXFwkfFxcXFxbfCUnLFxuICAgICAgICBjb250YWluczogW1xuICAgICAgICAgIGhsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhcmFtcycsXG4gICAgICAgICAgICBiZWdpbjogJ1xcXFwoJywgZW5kOiAnXFxcXCknLFxuICAgICAgICAgICAgY29udGFpbnM6IFtcbiAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICBobGpzLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFxuICAgICAgICAgICAgICBTVFJJTkcsXG4gICAgICAgICAgICAgIE5VTUJFUlxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgICAgICBiZWdpbktleXdvcmRzOiAnY2xhc3MgaW50ZXJmYWNlJywgZW5kOiAneycsIGV4Y2x1ZGVFbmQ6IHRydWUsXG4gICAgICAgIGlsbGVnYWw6IC9bOlxcKFxcJFwiXS8sXG4gICAgICAgIGNvbnRhaW5zOiBbXG4gICAgICAgICAge2JlZ2luS2V5d29yZHM6ICdleHRlbmRzIGltcGxlbWVudHMnfSxcbiAgICAgICAgICBobGpzLlVOREVSU0NPUkVfVElUTEVfTU9ERVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiZWdpbktleXdvcmRzOiAnbmFtZXNwYWNlJywgZW5kOiAnOycsXG4gICAgICAgIGlsbGVnYWw6IC9bXFwuJ10vLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW5LZXl3b3JkczogJ3VzZScsIGVuZDogJzsnLFxuICAgICAgICBjb250YWluczogW2hsanMuVU5ERVJTQ09SRV9USVRMRV9NT0RFXVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmVnaW46ICc9PicgLy8gTm8gbWFya3VwLCBqdXN0IGEgcmVsZXZhbmNlIGJvb3N0ZXJcbiAgICAgIH0sXG4gICAgICBTVFJJTkcsXG4gICAgICBOVU1CRVJcbiAgICBdXG4gIH07XG59OyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index 994f6b5..18f1b77 100644 --- a/dist/index.html +++ b/dist/index.html @@ -18,10 +18,30 @@ margin: 0 auto; } - +
    -
    +
    - + + + + + + \ No newline at end of file diff --git a/example/index.html b/example/index.html index 084aac6..6eac731 100644 --- a/example/index.html +++ b/example/index.html @@ -18,16 +18,17 @@ margin: 0 auto; } - +
    - + \ No newline at end of file diff --git a/package.json b/package.json index 20dc7d0..459b3eb 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,12 @@ { "name": "cool-md-editor", - "version": "1.2.1", + "version": "1.3.0", "description": "a markedown editor width webpack & codemirror & marked & highlight", - "main": "dist/coolMdEditor.js", - "unpkg": "dist/coolMdEditor.js", + "main": "dist/cMDEditor.js", + "unpkg": "dist/cMDEditor.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "devServer": "webpack-dev-server --open --progress --colors", - "dev": "webpack --mode=development", + "dev": "webpack-dev-server --open --progress --colors", "build": "webpack --mode=production" }, "keywords": [], @@ -20,6 +19,12 @@ "url": "https://github.com/Jesonhu/cool-md-editor/issues" }, "license": "MIT", + "dependencies": { + "codemirror": "^5.40.0", + "highlight.js": "^9.12.0", + "lodash-es": "^4.17.15", + "marked": "^0.5.0" + }, "devDependencies": { "autoprefixer": "^9.1.3", "babel-core": "^6.26.0", @@ -30,21 +35,17 @@ "css-loader": "^1.0.0", "cssnano": "^4.1.0", "html-webpack-plugin": "^3.2.0", + "less": "^3.11.1", + "less-loader": "^5.0.0", "mini-css-extract-plugin": "^0.4.2", - "node-sass": "^4.9.3", "optimize-css-assets-webpack-plugin": "^5.0.1", "postcss-loader": "^3.0.0", - "sass-loader": "^7.1.0", - "scss": "^0.2.4", - "scss-loader": "0.0.1", "style-loader": "^0.23.0", "webpack": "^4.17.1", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.14" }, - "dependencies": { - "codemirror": "^5.40.0", - "highlight.js": "^9.12.0", - "marked": "^0.5.0" - } + "browserslist": [ + "last 2 versions" + ] } diff --git a/src/editor/config.js b/src/editor/config.js index 995e7d8..a7688a3 100644 --- a/src/editor/config.js +++ b/src/editor/config.js @@ -1,5 +1,6 @@ import lang from './lang/en'; +/** ========== 编辑器默认配置格式 ========== */ const config = { baseUrl: 'https://www.github.com', /** 阿里图标连接 */ @@ -32,6 +33,17 @@ const config = { } }, language: lang + }, + shortcuts: { + isOpen: false, + }, + + // ===== qiniu ===== + qiniu: { + tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/blog/get_token', + region: 'z1', + config: {}, + putExtra: {} } } diff --git a/src/editor/createElement.js b/src/editor/createElement.js index 90f65c7..95e6c03 100644 --- a/src/editor/createElement.js +++ b/src/editor/createElement.js @@ -3,6 +3,8 @@ const { shortcuts, fixShortcut } = TOOLS; const domRender = { init(options) { + // console.log('domRender options: %o', options); + // console.log('domRender this: %o', this); this.initData(options); return new Promise((resolve, reject) => { this.renderTools(options) @@ -27,9 +29,12 @@ const domRender = { // await this.renderPriview(parent); // await this.renderStatus(parent); }, + initData(options) { - this.lang = options.lang; + this.$editor = {}; + this.$editor.options = options; }, + // 创建 Edit Tools start ========================= renderTools(options) { const el = options.el; @@ -43,6 +48,7 @@ const domRender = { resolve(); }); }, + /** * 创建工具条 `编辑工具图标`. */ @@ -162,8 +168,26 @@ const domRender = { currPlatShortcutsItem = ''; } - return ``; + const itemTitle = this.getToolItemTitleText(config.name); + + // 开启了快捷键提示. + if (this.$editor.options.fixShortcut && this.$editor.options.fixShortcut.isOpen) { + return ``; + } else { + return ``; + } }, + + /** + * 获取菜单按钮的 title 文字. + * 根据编辑器的语言返回对应的内容. + */ + getToolItemTitleText(itemName) { + const useLangItem = this.$editor.options.lang.toolbarItem; + const key = itemName.toLowerCase(); + return useLangItem[key]; + }, + // 创建 Edit Tools end ========================= // 创建 Edit 编辑容器 start ========================= @@ -212,7 +236,7 @@ const domRender = { }, createStatusPosition(options) { const toggleThemeHtmlStr = this.createStatusToggleTheme(); - const language = this.lang; + const language = this.$editor.options.lang; const { line, columns } = language.statusBar; let htmlStr = `
    ${line} ,${columns} 一 ${line}${toggleThemeHtmlStr}
    `; @@ -224,7 +248,7 @@ const domRender = { return htmlStr; }, createStatusLens() { - const language = this.lang; + const language = this.$editor.options.lang; const { length } = language.statusBar; let htmlStr = `
    ${length}
    `; diff --git a/src/editor/lang/en.js b/src/editor/lang/en.js index c9112b6..8bd5073 100644 --- a/src/editor/lang/en.js +++ b/src/editor/lang/en.js @@ -7,6 +7,24 @@ // =================================== export default { + toolbarItem: { + 'bold': 'Bold', + 'italic': 'Italic', + 'heading': 'Heading', + 'quote': 'Quote', + 'code': 'Code', + 'unordered-list': 'Generic List', + 'ordered-list': 'Number List', + 'link': 'Insert Link', + 'image': 'Insert Image', + 'undo': 'Undo', + 'redo': 'Redo', + 'about': 'About Editor', + 'edit': 'Toggle Edit', + 'compare': 'Toggle Compare', + 'preview': 'Toggle Preview', + 'fullscreen': 'Toggle Fullscreen' + }, statusBar: { line: 'line', columns: 'columns', diff --git a/src/editor/lang/zh.js b/src/editor/lang/zh.js index 54b1e49..911fc6f 100644 --- a/src/editor/lang/zh.js +++ b/src/editor/lang/zh.js @@ -7,6 +7,24 @@ // =================================== export default { + toolbarItem: { + 'bold': '加粗', + 'italic': '斜体', + 'heading': '标题', + 'quote': '引用', + 'code': '代码块', + 'unordered-list': '无序列表', + 'ordered-list': '有序列表', + 'link': '插入链接', + 'image': '插入图片', + 'undo': '撤消', + 'redo': '重做', + 'about': '关于编辑器', + 'edit': '编辑模式', + 'compare': '常规模式', + 'preview': '预览模式', + 'fullscreen': '切换全屏' + }, statusBar: { line: '行', columns: '列', diff --git a/src/editor/qiniu-sdk-upload.js b/src/editor/qiniu-sdk-upload.js new file mode 100644 index 0000000..3fe22d9 --- /dev/null +++ b/src/editor/qiniu-sdk-upload.js @@ -0,0 +1,205 @@ +import request from '../util/http'; + +const BASE_API_URL = 'http://127.0.0.1:3001/api/qiniu'; +const apiUrl = { + getToken: BASE_API_URL + '/get_token' +} + +/** + * 七牛 SDK 方式上传 + * (前端直接上传到七牛云服务器方式) + */ +class QiniuUplaod { + constructor(options = {}) { + this.initData(options); + } + + initData(options) { + this.qiniuOptions = Object.assign({ + token: '', + baseUrl: '', + config: { + useCdnDomain: true, + disableStatisticsReport: false, + retryCount: 6, + region: qiniu.region.z1 + }, + putExtra: { + fname: "", + params: {}, + mimeType: null + } + }, options); + + const self = this; + this.fetchGetToken() + .then(res => { + const resData = res; + const { status, data } = resData; + if (status) { + self.qiniuOptions.token = data.token; + self.qiniuOptions.baseUrl = data.domain; + } + }) + .catch(err => { + console.log(err); + }) + } + + fetchGetToken() { + const url = this.qiniuOptions.tokenApiUrl || apiUrl.getToken; + return new Promise((resolve, reject) => { + request.ajax({ + url: url, + success: function(res) { + resolve(res); + }, + error: function(err) { + reject(err); + } + }); + }) + } + + /** + * 获取存储区域的地址 + * + * @see https://developer.qiniu.com/kodo/manual/1671/region-endpoint + */ + getRegionUrl(mark) { + const clientMap = { + /** 华东 */ + 'z0': '//upload.qiniup.com', + /** 华北 */ + 'z1': '//upload-z1.qiniup.com', + /** 华南 */ + 'z2': '//upload-z2.qiniup.com', + /** 北美 */ + 'na0': '//upload-na0.qiniup.com', + /** 东南亚 */ + 'as0': '//upload-as0.qiniup.com' + } + return clientMap[mark] || ''; + } + + /** + * + * @see doc: https://developer.qiniu.com/kodo/sdk/1283/javascript + */ + uploadWithSDK(file, key) { + const token = this.qiniuOptions.token; + const putExtra = this.qiniuOptions.putExtra; + const config = this.qiniuOptions.config; + + putExtra.params["x:name"] = key; + // putExtra.params["x:name"] = key.split(".")[0]; + + // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作 + var error = function(err) { + }; + + var complete = function(res) { + if (res.key && res.key.match(/\.(jpg|jpeg|png|gif)$/)) { + consoel.log('===== complete ===== res: %o', res); + } + }; + + var next = function(response) {} + + var subObject = { + next: next, + error: error, + complete: complete + }; + let subscription; + let observable; + // 调用sdk上传接口获得相应的observable,控制上传和暂停 + observable = qiniu.upload(file, key, token, putExtra, config); + + // 上传 + subscription = observable.subscribe(subObject); + // 暂停上传 + // subscription.unsubscribe(); + } + + /** + * base64格式的图片上传. + * + * @see https://developer.qiniu.com/kodo/kb/1326/how-to-upload-photos-to-seven-niuyun-base64-code + */ + putb64(base64) { + const pic = this.base64encode(base64); + const token = this.qiniuOptions.token; + const fileSize = this.getBase64Size(base64); + const regionUrl = this.getRegionUrl(this.qiniuOptions.region); + const url = `${regionUrl}/putb64/${fileSize}`; + const self = this; + + return new Promise((resolve, reject) => { + request.ajax({ + url: url, + type: 'POST', + data: pic, + headers: { + 'Content-Type': 'application/octet-stream', + 'Authorization': `UpToken ${token}` + }, + success: function(res) { + console.log('domain', self.qiniuOptions); + resolve({ domain: self.qiniuOptions.baseUrl, hash: res.hash }); + }, + error: function(err) { + reject(err); + } + }); + }); + } + + /** + * 获取 base64 图片的大小. + * + * @see https://blog.csdn.net/chenyejunjun/article/details/54924355 + */ + getBase64Size(base64url) { + //获取base64图片大小,返回MB数字 + var str = base64url.replace('data:image/png;base64,', ''); + var equalIndex = str.indexOf('='); + if(str.indexOf('=')>0) { + str=str.substring(0, equalIndex); + } + // 原来的字符流大小,单位为字节 + var strLength=str.length; + // 计算后得到的文件流大小,单位为字节 + var fileLength=parseInt(strLength-(strLength/8)*2); + + return fileLength; + + // 由字节转换为MB + // var size = ""; + // size = (fileLength/(1024 * 1024)).toFixed(2); + // var sizeStr = size + ""; //转成字符串 + // var index = sizeStr.indexOf("."); //获取小数点处的索引 + // var dou = sizeStr.substr(index + 1 ,2) //获取小数点后两位的值 + // if(dou == "00"){ //判断后两位是否为00,如果是则删除00 + // return sizeStr.substring(0, index) + sizeStr.substr(index + 3, 2) + // } + // return parseInt(size); + } + + /** + * URL安全的Base64编码 + */ + base64encode(base64url) { + const str1 = base64url.replace('data:image/png;base64,', '') + return str1; + + // const str1 = base64url.replace('data:image/png;base64,', '') + // const str2 = str1.replace(/\+/g, '-') + // return str2.replace(/\//g, '_'); + + // *把头部的data:image/png;base64,去掉。(注意:base64后面的逗号也去掉)*/ + // return base64url.replace('data:image/png;base64,', ''); + } +} + +export default QiniuUplaod; \ No newline at end of file diff --git a/src/editor/toolbarHandle.js b/src/editor/toolbarHandle.js index c20bba7..9ba70a3 100644 --- a/src/editor/toolbarHandle.js +++ b/src/editor/toolbarHandle.js @@ -3,13 +3,16 @@ import CONFIG from './config'; import CM from './codemirror'; const { isMac, toggleClass, addClass, removeClass } = UTIL; -const { baseUrl, gitGubUrl } = CONFIG; +const { gitGubUrl } = CONFIG; const { getState } = CM; let EDITOR = null; + /** - * 工具栏功能 + * ======================================== + * 工具栏图标功能处理函数 + * ======================================== */ /** @@ -130,7 +133,7 @@ const toggleItalic = (e) => { cm.focus(); } -// 标题相关 start ========================= +// ========== 标题相关 ========== /** * Action for toggle Heading. * `标题` 图标处理功能 @@ -176,19 +179,14 @@ const toggleHeading = (e) => { * Action for toggling heading size: normal -> h1 -> h2 -> h3 -> h4 -> h5 -> h6 -> normal * `小标题` 处理功能 */ -const toggleHeadingSmaller = (e) => { - -} +const toggleHeadingSmaller = (e) => {} /** * Action for toggling heading size: normal -> h6 -> h5 -> h4 -> h3 -> h2 -> h1 -> normal * `大标题` 处理功能 */ -const toggleHeadingBigger = (e) => { - -} +const toggleHeadingBigger = (e) => {} -// 标题相关 end ========================= /** * Action for toggle Blockquote. @@ -308,8 +306,7 @@ const toggleOrderedList = (e) => { } /** - * Action for drawImage. - * `图片` 处理功能. + * 插入图片. */ const drawImage = (e) => { e = e || windowl.event; @@ -326,14 +323,13 @@ const drawImage = (e) => { const stat = getState(cm); let url = ''; - // url = prompt('请输入图片地址', ''); - // if (!url) return false; + url = prompt('请输入图片地址', ''); + if (!url) return false; _replaceSelection(cm, stat.image, insertTexts, url); } /** - * Action for drawLink. - * `链接` 处理功能. + * 插入链接. */ const drawLink = (e) => { e = e || windowl.event; @@ -355,39 +351,6 @@ const drawLink = (e) => { _replaceSelection(cm, stat.link, insertTexts, url); } -/** - * 图片和地址插入内容处理. - */ -function _replaceSelection(cm, active, startEnd, url) { - var text; - var start = startEnd[0]; - var end = startEnd[1]; - var startPoint = cm.getCursor("start"); - var endPoint = cm.getCursor("end"); - // if(url) { - // end = end.replace("#url#", url); - // } - end = end.replace("#url#", url); - if(active) { - text = cm.getLine(startPoint.line); - start = text.slice(0, startPoint.ch); - end = text.slice(startPoint.ch); - cm.replaceRange(start + end, { - line: startPoint.line, - ch: 0 - }); - } else { - text = cm.getSelection(); - cm.replaceSelection(start + text + end); - - startPoint.ch += start.length; - if(startPoint !== endPoint) { - endPoint.ch += start.length; - } - } - cm.setSelection(startPoint, endPoint); - cm.focus(); -} /** * Action for Back. @@ -472,7 +435,7 @@ const openCompare = (e) => { if (!EDITOR) EDITOR = editor; const isShowAll = EDITOR.$status['isShowAll']; - // 当前只显示编辑效果 + // 已经激活再次点击不进行处理. if (isShowAll) return; EDITOR.$status['isShowAll'] = true; @@ -533,7 +496,7 @@ const openPreview = (e) => { * 全屏按钮点击处理回调. */ const openFullScreen = (e) => { - commoFnHanlde(e); + commonAction(e); const editorEl = EDITOR._options.el; @@ -547,13 +510,47 @@ const aboutEditor = () => { window.open(gitGubUrl); } +/** + * 图片和地址插入内容处理. + */ +function _replaceSelection(cm, active, startEnd, url) { + var text; + var start = startEnd[0]; + var end = startEnd[1]; + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + // if(url) { + // end = end.replace("#url#", url); + // } + end = end.replace("#url#", url); + if(active) { + text = cm.getLine(startPoint.line); + start = text.slice(0, startPoint.ch); + end = text.slice(startPoint.ch); + cm.replaceRange(start + end, { + line: startPoint.line, + ch: 0 + }); + } else { + text = cm.getSelection(); + cm.replaceSelection(start + text + end); + + startPoint.ch += start.length; + if(startPoint !== endPoint) { + endPoint.ch += start.length; + } + } + cm.setSelection(startPoint, endPoint); + cm.focus(); +} + /** * Tools 图标点击回调处理函数中相同的处理部分. * * @param {Object} e 触发图标对应回调的事件对象. * @return {Object} editor 编辑器实例对象. */ -function commoFnHanlde (e) { +function commonAction (e) { e = e || window.event; const self = e.currentTarget; const editor = self.$editor; @@ -565,7 +562,21 @@ function commoFnHanlde (e) { return editor; } -// 按钮定义 + +/** + * ======================================== + * 工具按钮定义集合. + * + * `item.name` 按钮名 + * `item.action` 处理函数 + * `item.className` 图标名 + * `item.title` hover 标题 + * `item.default` 默认定义的 + * `item.index` 放置的顺序,越小越靠前 + * `item.isEditTools` 是否为内容编辑图标。 + * 工具栏图标分两大类: 1. 内容编辑工具图标,2. 预览及布局设置工具图标 + * ======================================== + */ const toolbarBuiltInButtons = { 'bold': { name: 'bold', @@ -686,7 +697,7 @@ const toolbarBuiltInButtons = { }, 'compare': { name: 'compare', - className: 'icon-columns', + className: 'icon-columns' + ' active', action: openCompare, title: 'Toggle Compare', default: true, @@ -714,7 +725,11 @@ const toolbarBuiltInButtons = { } -/** 格式 */ +/** + * ======================================== + * Markdown 格式模板. + * ======================================== + */ const insertTexts = { link: ["[", "](#url#)"], image: ["![](", "#url#)"], @@ -722,20 +737,32 @@ const insertTexts = { horizontalRule: ["", "\n\n-----\n\n"] } -/** 远程的文字. */ +/** + * ======================================== + * 远程默认的文字. + * ======================================== + */ const promptTexts = { link: "URL for the link:", image: "URL of the image:" } -/** Markdown 缩写 */ +/** + * ======================================== + * Markdown 块级格式模板. + * ======================================== + */ const blockStyles = { "bold": "**", "code": "```", "italic": "*" } -/** 快捷键 */ +/** + * ======================================== + * 快捷键按键说明文字. + * ======================================== + */ const shortcuts = { "bold": "Cmd-B", "italic": "Cmd-I", @@ -757,7 +784,7 @@ const shortcuts = { } /** - * 快捷键针对不同系统做兼容处理. + * win 和 Mac 快捷键兼容处理功能函数 * @param {objet} name * @desc win: Ctrl; mac: Cmd */ @@ -771,7 +798,6 @@ const fixShortcut = (name) => { } export default { - // 工具条图标、类名、回调函数等. toolbarBuiltInButtons, insertTexts, @@ -780,10 +806,7 @@ export default { blockStyles, - // 快捷键 shortcuts, - // Ctrl(Win OS) 还是 Cmd(Mac OS) - fixShortcut, - + fixShortcut } \ No newline at end of file diff --git a/src/index.html b/src/index.html index 16471a0..9e490eb 100644 --- a/src/index.html +++ b/src/index.html @@ -18,10 +18,30 @@ margin: 0 auto; } - +
    -
    +
    + + + + + \ No newline at end of file diff --git a/src/index.js b/src/index.js index 1df3737..b424dd2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,21 +1,34 @@ - +// 封装 import domRender from './editor/createElement'; import CONFIG from './editor/config'; +import codemirorTools from './editor/codemirror'; +const { getState } = codemirorTools; + +import { debounce } from 'lodash-es'; +const INPUT_EVENT_DEBOUNCE_WAIT = 300; // 工具图标功能 -import './style/index.scss'; +import './style/index.less'; import $tools from './editor/toolbarHandle'; /** 工具集合对象. */ import UTIL from './util/Util'; -// codemirror ========================= +// ==================== 编辑器语言 ==================== +import langEn from './editor/lang/en'; +import langZh from './editor/lang/zh'; + +const langMap = { + 'en': langEn, + 'zh': langZh +} + +// ==================== codemirror ==================== import Codemirror from 'codemirror'; import 'codemirror/mode/markdown/markdown'; import 'codemirror/mode/gfm/gfm'; import 'codemirror/mode/javascript/javascript'; - import 'codemirror/addon/mode/overlay'; import 'codemirror/addon/edit/closetag'; import 'codemirror/addon/edit/continuelist'; @@ -30,21 +43,16 @@ import 'codemirror/addon/fold/comment-fold'; import 'codemirror/addon/fold/indent-fold'; import 'codemirror/addon/fold/brace-fold'; import 'codemirror/addon/fold/markdown-fold'; - - import 'codemirror/lib/codemirror.css'; // import 'codemirror/theme/base16-light.css' import 'codemirror/addon/fold/foldgutter.css'; -// codemirror ========================= -// marked ========================= +// ==================== marked ==================== import marked from 'marked'; -// marked ========================= -// highlight.js ========================= +// ==================== highlight.js ==================== import hljs from 'highlight.js'; import 'highlight.js/styles/monokai-sublime.css'; -// highlight.js ========================= // @see [config-see])[https://github.com/hackmdio/codimd/blob/master/public/js/lib/editor/index.js] @@ -80,16 +88,16 @@ const codemirror = { } } +// ==================== 七牛上传 ==================== +import QiniuUplaod from './editor/qiniu-sdk-upload'; +let qiniuUpload = null; -class CoolMDEditor { - constructor(options = {}) { - options.editor = this; +class CMdEditor { + constructor(options = {}) { + options.editor = this; this.init(options); - - // Auto render - // this.render(); } /** @@ -98,16 +106,19 @@ class CoolMDEditor { init(options) { this.initData(options) .then(() => { - this.initView(options); + this.initView(this._options); }); } + // 设置 config set options(option) { // 同值对象值覆盖 } + get options() { return this._options; } + /** * 初始化编辑器数据. */ @@ -190,9 +201,11 @@ class CoolMDEditor { return new Promise((resolve, reject) => { this.initOption(options); this.initEditorStatus(); + this.initQiniu(this._options.qiniu); resolve(); }); } + /** * 初始编辑器化视图显示. */ @@ -205,6 +218,7 @@ class CoolMDEditor { self.initCodeMirrorData(); self.initMarkdownData(); self.initDefaultContent(); + self.lifecycleMounted(); }); } @@ -215,12 +229,48 @@ class CoolMDEditor { this.initStatusEvent(); this.initToolsEvent(); } + initOption(options) { - this._options = options; + // Todo: 参数拷贝和覆盖功能需要优化. + const defaultOptions = { + // ========== 快捷键 ========== + shortcuts: { + isOpen: true, + }, + // ========== 语言 ========== + lang: 'zh', + // ========== 七牛 ========== + qiniu: { + tokenApiUrl: 'http://127.0.0.1:3001/api/qiniu/test/get_token', + region: 'z1', + config: {}, + putExtra: {} + } + } + // Object.assign(defaultOptions, options); + // this._options = defaultOptions; + this._options = UTIL.extend({}, defaultOptions, options); this._options.$tools = $tools; - this._options.lang= CONFIG.editor.language; + const _options = this._options; + console.log(this._options); + + // 默认语言处理. + if (typeof _options.lang === 'string') { + const langKey = _options.lang; + this._options.lang = langMap[langKey] || CONFIG.editor.language; + } else { + // 自己配置语言. + this._options.lang = Object.assign({}, CONFIG.editor.language, options.lang); + } } - // 创建编辑器元素 start ==================================== + + // ==================== 编辑器生命周期 ==================== + /** 编辑器所有都准备好了 */ + lifecycleMounted() { + this.addEditContainerPaseImg(); + } + + // ==================== 创建编辑器元素 ==================== /** * 编辑器 `图标css链接` 元素创建. */ @@ -243,6 +293,7 @@ class CoolMDEditor { const result = oLink ? true : false; return result; } + /** * 创建编辑器 `显示容器`. */ @@ -253,9 +304,9 @@ class CoolMDEditor { }); }); } - // 创建编辑器元素 end ==================================== + - // 编辑器 `Tools` 相关 start ==================================== + // ==================== 编辑器 `Tools` 相关 ==================== /** * 图标添加点击事件监听. */ @@ -268,6 +319,11 @@ class CoolMDEditor { if (toolsArr.length > 0) { toolsArr.forEach(item => { + // clasName 有多个类名时取第一个. + if (item['className'].indexOf(' ') > 0) { + item['className'] = item['className'].split(' ')[0]; + } + const className = '.' + item['className']; const callBack = item['action']; const isFunction = UTIL.isFunction(callBack); @@ -275,6 +331,8 @@ class CoolMDEditor { if (className !== '' && isFunction) { const toolEl = editorEl.querySelector('.editor-tools').querySelector(className); if (toolEl) { + // 默认显示 compare 布局 + self.$status toolEl.$editor = self; // @see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener toolEl.addEventListener('click', callBack, false); @@ -283,15 +341,15 @@ class CoolMDEditor { }); } } - // 编辑器 `Tools` 相关 end ==================================== - // 编辑器 `CodeMirror` 相关 start ==================================== + // ==================== 编辑器 `CodeMirror` 相关 ==================== /** * 创建 Codemirror 容器. */ createCodeMirrorElement(el, config) { return Codemirror.fromTextArea(el, config); } + initCodeMirrorData() { const options = this._options; let mode; @@ -361,38 +419,44 @@ class CoolMDEditor { // this.$codemirror = Codemirror.fromTextArea(textAreaElement, cmDiyConfig); this.$codemirror = this.createCodeMirrorElement(textAreaElement, cmDiyConfig); - // 没有使用箭头函数,通过这种方式获取 `编辑器对象` + // codemirror 添加访问编辑器快捷方式 this.$codemirror.$editor = this; this.initCodeMirrorEvent(); } + initCodeMirrorEvent() { this.add_CM_change_eventHandle(); this.add_CM_cursorActivity_eventHandle(); this.addScrollSync(); } + /** * `CodeMirror` 内容变化事件监听. */ add_CM_change_eventHandle() { - this.$codemirror.on('changes', this.onCodeMirrorChange); + this.$codemirror.on('changes', debounce(this.onCodeMirrorChange, INPUT_EVENT_DEBOUNCE_WAIT)); } + onCodeMirrorChange(cm) { // 编辑器实例. const editor = cm.$editor; editor.commonCodeMirrorEventHandle(cm); } + /** * `CodeMirror` 光标移动事件监听. */ add_CM_cursorActivity_eventHandle() { this.$codemirror.on('cursorActivity', this.onCodeMirrorCursorActivity); } + onCodeMirrorCursorActivity(cm) { // 编辑器实例. const editor = cm.$editor; editor.commonCodeMirrorEventHandle(cm); } + /** * `CodeMirror` 事件回调中都需要处理的内容. * @@ -404,9 +468,9 @@ class CoolMDEditor { editor.setHtmlValue(content); editor.updateStatusBar(editor); } - // 编辑器 `CodeMirror` 相关 end ==================================== + - // 编辑器 `markdown` 相关 start ==================================== + // ==================== 编辑器 `markdown` 相关 ==================== initMarkdownData(text) { if (marked) { const markedOptions = { @@ -426,8 +490,10 @@ class CoolMDEditor { this.$marked.setOptions(markedOptions); } } + initMarkdownEvent() { } + /** * Markdown 内容显示设置. */ @@ -439,6 +505,7 @@ class CoolMDEditor { this.commonCodeMirrorEventHandle(cm); } } + /** * 获取 `CodeMirror` 的值. */ @@ -446,6 +513,7 @@ class CoolMDEditor { const cm = this.$codemirror; return cm.getValue(); } + /** * 设置 `CodeMirror` 的值. */ @@ -454,11 +522,10 @@ class CoolMDEditor { const htmlElement = this._options.el.querySelector('.editor-preview').querySelector('.preview-bd'); htmlElement.innerHTML = htmlStr; } - // 编辑器 `markdown` 相关 end ==================================== - // 编辑器 `preview` 容器相关 start ==================================== - // 编辑器 `preview` 容器相关 end ==================================== + // ==================== 编辑器 `preview` 容器相关 ==================== + // ==================== 编辑器 `滚动条` ==================== /** * 滚动内容同步. */ @@ -495,7 +562,7 @@ class CoolMDEditor { }); } - // 编辑器 `status` 容器相关 end ==================================== + // ==================== 编辑器 `status` 相关 ==================== updateStatusBar() { const cm = this.$codemirror; @@ -503,6 +570,7 @@ class CoolMDEditor { this.renderEditorContentPosition(); this.renderEditContentLength(conLen); } + /** * 显示输入内容总长度. * @@ -516,6 +584,7 @@ class CoolMDEditor { lenElement.innerHTML = `${length} ${len}`; } + /** * 显示当前光标所在的 `行数`、`列数`. `总列数`、`总长度`. */ @@ -534,24 +603,26 @@ class CoolMDEditor { const statusBarEl = editorEl.querySelector('.editor-status').querySelector('.editor-status-positon').querySelector('span'); statusBarEl.innerHTML = `${line} ${currLine},${columns} ${currCol} 一 ${lineCount} ${line}`; } - // 编辑器 `status` 容器相关 end ==================================== - - // 编辑器初始状态设置 start ==================================== + initEditorStatus(options) { // 主题设置. this.$status = {}; this.$status['isThemeLight'] = true; this.$status['isFullscreen'] = false; + /** 默认显示编辑布局 */ + this.$status['isShowAll'] = true; + this.$status['isOnlyPreview'] = false; + this.$status['isOnlyEdit'] = false; } - // 编辑器初始状态设置 end ==================================== - // 编辑器事件处理 start ==================================== + // ==================== 编辑器事件处理 ==================== /** * 状态条,换皮肤. */ initStatusEvent() { this.initEventToggleTheme(); } + /** * 换肤功能添加. */ @@ -577,10 +648,94 @@ class CoolMDEditor { }); } } + initEventToggleFullscreen(options) { } - // 编辑器事件处理 end ==================================== + // ==================== 编辑器扩展功能 ==================== + // 粘贴图片,并上传至七牛云 + // ======================================================= + initQiniu(options = {}) { + qiniuUpload = new QiniuUplaod(options) + } + + /** 编辑器内容,粘贴图片处理功能 */ + addEditContainerPaseImg() { + const oEl = this._options.el.querySelector('.editor-md'); + const cm = this.$codemirror; + + oEl.addEventListener('paste', function(event) { + if (event.clipboardData || event.originalEvent) { + var clipboardData = (event.clipboardData || event.originalEvent.clipboardData); + if(clipboardData.items){ + var blob; + for (var i = 0; i < clipboardData.items.length; i++) { + if (clipboardData.items[i].type.indexOf("image") !== -1) { + blob = clipboardData.items[i].getAsFile(); + } + } + // 只处理粘贴的类型为图片. + if (!blob) return; + + var render = new FileReader(); + render.onload = function (evt) { + handleImageUpload(evt.target); + } + render.readAsDataURL(blob); + } + + } + }); + + /** 图片上传处理 */ + const handleImageUpload = (target) => { + // 编辑器中插入内容 + const insertTexts = ["![](", "#url#)"]; + const stat = getState(cm); + // base64编码 + const imgUrl = target.result; + // console.log('粘贴图片处理', target); + qiniuUpload.putb64(imgUrl) + .then(res => { + const url = res.domain + '/' + res.hash; + _replaceSelection(cm, stat.image, insertTexts, url); + }) + .catch(err => { + console.log(err); + }); + } + + const _replaceSelection = (cm, active, startEnd, url) => { + var text; + var start = startEnd[0]; + var end = startEnd[1]; + var startPoint = cm.getCursor("start"); + var endPoint = cm.getCursor("end"); + // if(url) { + // end = end.replace("#url#", url); + // } + end = end.replace("#url#", url); + if(active) { + text = cm.getLine(startPoint.line); + start = text.slice(0, startPoint.ch); + end = text.slice(startPoint.ch); + cm.replaceRange(start + end, { + line: startPoint.line, + ch: 0 + }); + } else { + text = cm.getSelection(); + cm.replaceSelection(start + text + end); + + startPoint.ch += start.length; + if(startPoint !== endPoint) { + endPoint.ch += start.length; + } + } + cm.setSelection(startPoint, endPoint); + cm.focus(); + } + } /** * Render editor to the given element. * @param {Element} el @@ -622,18 +777,17 @@ class CoolMDEditor { } } -// export default CoolMDEditor; -// 模块导出 +// ==================== umd 模块导出 ==================== if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) { // AMD. Register as an anonymous module. define(function() { - return CoolMDEditor; + return CMdEditor; }); } else if (typeof module !== 'undefined' && module.exports) { - module.exports = CoolMDEditor; + module.exports = CMdEditor; } else { - window.CoolMDEditor = CoolMDEditor; + window.CMdEditor = CMdEditor; } diff --git a/src/style/editor/element/md.scss b/src/style/editor/element/md.less similarity index 81% rename from src/style/editor/element/md.scss rename to src/style/editor/element/md.less index 7dff09a..b152be2 100644 --- a/src/style/editor/element/md.scss +++ b/src/style/editor/element/md.less @@ -7,8 +7,8 @@ //======================================== // theme -@import '../theme/base16-dark.scss'; -@import '../theme/base16-light.scss'; +@import '../theme/base16-dark.less'; +@import '../theme/base16-light.less'; // 公共样式 .cool-md-editor-wrap { @@ -30,13 +30,13 @@ // `圣光主题` .editor-theme-light { .editor-md { - background-color:$themeLight; + background-color:@themeLight; } } // `暗黑主题` .editor-theme-dark { .editor-md { - background-color:$themeLight; + background-color:@themeLight; } } \ No newline at end of file diff --git a/src/style/editor/element/preview.scss b/src/style/editor/element/preview.less similarity index 100% rename from src/style/editor/element/preview.scss rename to src/style/editor/element/preview.less diff --git a/src/style/editor/element/status.scss b/src/style/editor/element/status.less similarity index 95% rename from src/style/editor/element/status.scss rename to src/style/editor/element/status.less index 40e6298..c97c3cf 100644 --- a/src/style/editor/element/status.scss +++ b/src/style/editor/element/status.less @@ -45,7 +45,7 @@ // `圣光主题` .editor-theme-light { .editor-status { - background-color:$themeLight; + background-color:@themeLight; .editor-status-positon { .icon-theme { @@ -59,7 +59,7 @@ // `暗黑主题` .editor-theme-dark { .editor-status { - background-color:$themeDark; + background-color:@themeDark; color:#fff; .editor-status-positon { diff --git a/src/style/editor/element/tools.scss b/src/style/editor/element/tools.less similarity index 80% rename from src/style/editor/element/tools.scss rename to src/style/editor/element/tools.less index 9425931..d378e9c 100644 --- a/src/style/editor/element/tools.scss +++ b/src/style/editor/element/tools.less @@ -61,26 +61,26 @@ // `圣光主题` .editor-theme-light { .editor-tools { - background-color:$themeLight; + background-color:@themeLight; /* 编辑器图标样式 start */ .editor-tools-main > *, .editor-tools-handle > * { - color: darken($themeLight, 70); + color: darken(@themeLight, 70); &.active { - border-color: darken($themeLight, 70); + border-color: darken(@themeLight, 70); } } .editor-tools-main { span[data-name="undo"], span[data-name="redo"] { - color: lighten($themeLight, 10); + color: lighten(@themeLight, 10); &.canActive { - color: darken($themeLight, 70); + color: darken(@themeLight, 70); } } .editor-tools-division { - color: darken($themeLight, 30); + color: darken(@themeLight, 30); } } /* 编辑器图标样式 end */ @@ -90,26 +90,26 @@ // `暗黑主题` .editor-theme-dark { .editor-tools { - background-color:$themeDark; + background-color:@themeDark; /* 编辑器图标样式 start */ .editor-tools-main > *, .editor-tools-handle > * { - color: lighten($themeDark, 70); + color: lighten(@themeDark, 70); &.active { - border-color: lighten($themeDark, 70); + border-color: lighten(@themeDark, 70); } } .editor-tools-main { span[data-name="undo"], span[data-name="redo"] { - color: lighten($themeDark, 10); + color: lighten(@themeDark, 10); &.canActive { - color: lighten($themeDark, 70); + color: lighten(@themeDark, 70); } } .editor-tools-division { - color: lighten($themeDark, 30); + color: lighten(@themeDark, 30); } } /* 编辑器图标样式 end */ diff --git a/src/style/editor/index.scss b/src/style/editor/index.less similarity index 81% rename from src/style/editor/index.scss rename to src/style/editor/index.less index 20c0e45..a8273f3 100644 --- a/src/style/editor/index.scss +++ b/src/style/editor/index.less @@ -1,8 +1,8 @@ // element -@import './element/tools.scss'; -@import './element/md.scss'; -@import './element/preview.scss'; -@import './element/status.scss'; +@import './element/tools.less'; +@import './element/md.less'; +@import './element/preview.less'; +@import './element/status.less'; .cool-md-editor-wrap { display:flex; @@ -67,13 +67,13 @@ /* 主题 start */ // `圣光` 主题 &.editor-theme-light { - border-left-color:$themeLight; - border-right-color:$themeLight; + border-left-color:@themeLight; + border-right-color:@themeLight; } // `暗黑` 主题 &.editor-theme-dark { - border-left-color:$themeDark; - border-right-color:$themeDark; + border-left-color:@themeDark; + border-right-color:@themeDark; } /* 主题 end */ } \ No newline at end of file diff --git a/src/style/editor/theme/base16-dark.scss b/src/style/editor/theme/base16-dark.less similarity index 84% rename from src/style/editor/theme/base16-dark.scss rename to src/style/editor/theme/base16-dark.less index 0006589..79c0186 100644 --- a/src/style/editor/theme/base16-dark.scss +++ b/src/style/editor/theme/base16-dark.less @@ -45,4 +45,36 @@ .cm-s-base16-dark .CodeMirror-activeline-background { background: #202020; } .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } +} + +// 样式二次修改 +.editor-theme-dark { + + .hljs-name { + color: navy; + font-weight: 400; + } + + .hljs-literal, + .hljs-number, + .hljs-attr, + .hljs-template-variable, + .hljs-built_in, + .hljs-variable { + color: teal; + } + + .hljs-tag { + color:#222; + } + + .hljs-doctag, + .hljs-string { + color: #d14; + } + + .hljs-attribute, + .hljs-symbol { + color: #da8910; + } } \ No newline at end of file diff --git a/src/style/editor/theme/base16-light.scss b/src/style/editor/theme/base16-light.less similarity index 84% rename from src/style/editor/theme/base16-light.scss rename to src/style/editor/theme/base16-light.less index 9107077..5bf7308 100644 --- a/src/style/editor/theme/base16-light.scss +++ b/src/style/editor/theme/base16-light.less @@ -45,4 +45,36 @@ .cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; } .cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } +} + +// 样式二次修改 +.editor-theme-light { + + .hljs-name { + color: navy; + font-weight: 400; + } + + .hljs-literal, + .hljs-number, + .hljs-attr, + .hljs-template-variable, + .hljs-built_in, + .hljs-variable { + color: teal; + } + + .hljs-tag { + color:#222; + } + + .hljs-doctag, + .hljs-string { + color: #d14; + } + + .hljs-attribute, + .hljs-symbol { + color: #da8910; + } } \ No newline at end of file diff --git a/src/style/icons.scss b/src/style/icons.less similarity index 100% rename from src/style/icons.scss rename to src/style/icons.less diff --git a/src/style/index.less b/src/style/index.less new file mode 100644 index 0000000..d72a716 --- /dev/null +++ b/src/style/index.less @@ -0,0 +1,6 @@ +@import './variable.less'; +@import './reboot.less'; +@import './scroll-bar.less'; +@import './editor/index.less'; +@import './marked.less'; +@import './icons.less'; \ No newline at end of file diff --git a/src/style/index.scss b/src/style/index.scss deleted file mode 100644 index 9fe7141..0000000 --- a/src/style/index.scss +++ /dev/null @@ -1,6 +0,0 @@ -@import './variable.scss'; -@import './reboot.scss'; -@import './scroll-bar.scss'; -@import './editor/index.scss'; -@import './marked.scss'; -@import './icons.scss'; \ No newline at end of file diff --git a/src/style/marked.scss b/src/style/marked.less similarity index 100% rename from src/style/marked.scss rename to src/style/marked.less diff --git a/src/style/reboot.scss b/src/style/reboot.less similarity index 99% rename from src/style/reboot.scss rename to src/style/reboot.less index bc5b2fd..320179a 100644 --- a/src/style/reboot.scss +++ b/src/style/reboot.less @@ -369,7 +369,7 @@ a, a:link, a:hover, a:active, -a:visited, { +a:visited { text-decoration: none; } /* End */ diff --git a/src/style/scroll-bar.scss b/src/style/scroll-bar.less similarity index 100% rename from src/style/scroll-bar.scss rename to src/style/scroll-bar.less diff --git a/src/style/variable.scss b/src/style/variable.less similarity index 75% rename from src/style/variable.scss rename to src/style/variable.less index 45f2187..f23aeeb 100644 --- a/src/style/variable.scss +++ b/src/style/variable.less @@ -6,6 +6,6 @@ // @email jesonhu_web@163.com //======================================== -$themeDark: #333; -$themeLight: #d2d2d2; -$themColor: $themeLight; \ No newline at end of file +@themeDark: #333; +@themeLight: #d2d2d2; +@themColor: @themeLight; \ No newline at end of file diff --git a/src/util/Util.js b/src/util/Util.js index 0d0c0db..7be24fa 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -2,11 +2,13 @@ const Util = { /** * Merge the properties of one object into another. * 将一个对象的属性合并到另一个对象上. + * Object.assign({}, {person: {name: 1, age: 16}}, {person: {name:1}}) + * 使用 Object.assign 需要处理多层数据前台的问题,这里就自行封装了. */ _mergeProperties(target, source) { for (let property in source) { if (source.hasOwnProperty(property)) { - if (souce[property] instanceof Array) { + if (source[property] instanceof Array) { const value = target[property] instanceof Array ? target[property] : []; target[property] = source[property].concat(value); } else if ( @@ -14,7 +16,7 @@ const Util = { typeof source[property] === 'object' && source[property].constructor === Object ) { - target[property] = this._mergeProperties(target[property] || {}, souce[property]); + target[property] = this._mergeProperties(target[property] || {}, source[property]); } else { target[property] = source[property]; } diff --git a/src/util/http.js b/src/util/http.js new file mode 100644 index 0000000..6fd49e7 --- /dev/null +++ b/src/util/http.js @@ -0,0 +1,142 @@ +const http = { + /** + * js封装ajax请求 + * >>使用new XMLHttpRequest 创建请求对象,所以不考虑低端IE浏览器(IE6及以下不支持XMLHttpRequest) + * >>使用es6语法,如果需要在正式环境使用,则可以用babel转换为es5语法 https://babeljs.cn/docs/setup/#installation + * @param settings 请求参数模仿jQuery ajax + * 调用该方法,data参数需要和请求头Content-Type对应 + * Content-Type data 描述 + * application/x-www-form-urlencoded 'name=哈哈&age=12'或{name:'哈哈',age:12} 查询字符串,用&分割 + * application/json name=哈哈&age=12' json字符串 + * multipart/form-data new FormData() FormData对象,当为FormData类型,不要手动设置Content-Type + * 注意:请求参数如果包含日期类型.是否能请求成功需要后台接口配合 + * + * @see 代码最初来源: https://www.jianshu.com/p/918c63045bc3/ + */ + ajax: (settings = {}) => { + // 初始化请求参数 + let _s = Object.assign({ + url: '', // string + type: 'GET', // string 'GET' 'POST' 'DELETE' + dataType: 'json', // string 期望的返回数据类型:'json' 'text' 'document' ... + async: true, // boolean true:异步请求 false:同步请求 required + data: null, // any 请求参数,data需要和请求头Content-Type对应 + headers: {}, // object 请求头 + timeout: 1000, // string 超时时间:0表示不设置超时 + beforeSend: (xhr) => { + }, + success: (result, status, xhr) => { + }, + error: (xhr, status, error) => { + }, + complete: (xhr, status) => { + } + }, settings); + + // 参数验证 + if (!_s.url || !_s.type || !_s.dataType || !_s.async) { + alert('参数有误'); + return; + } + + // 创建XMLHttpRequest请求对象 + let xhr = new XMLHttpRequest(); + // 请求开始回调函数 + xhr.addEventListener('loadstart', e => { + _s.beforeSend(xhr); + }); + + // 请求成功回调函数 + xhr.addEventListener('load', e => { + const status = xhr.status; + if ((status >= 200 && status < 300) || status === 304) { + let result; + if (xhr.responseType === 'text') { + result = xhr.responseText; + } else if (xhr.responseType === 'document') { + result = xhr.responseXML; + } else { + result = xhr.response; + } + // 注意:状态码200表示请求发送/接受成功,不表示业务处理成功 + _s.success(result, status, xhr); + } else { + _s.error(xhr, status, e); + } + }); + // 请求结束 + xhr.addEventListener('loadend', e => { + _s.complete(xhr, xhr.status); + }); + // 请求出错 + xhr.addEventListener('error', e => { + _s.error(xhr, xhr.status, e); + }); + // 请求超时 + xhr.addEventListener('timeout', e => { + _s.error(xhr, 408, e); + }); + let useUrlParam = false; + let sType = _s.type.toUpperCase(); + // 如果是"简单"请求,则把data参数组装在url上 + if (sType === 'GET' || sType === 'DELETE') { + useUrlParam = true; + _s.url += http.getUrlParam(_s.url, _s.data); + } + // 初始化请求 + xhr.open(_s.type, _s.url, _s.async); + // 设置期望的返回数据类型 + xhr.responseType = _s.dataType; + // 设置请求头 + for (const key of Object.keys(_s.headers)) { + xhr.setRequestHeader(key, _s.headers[key]); + } + // 设置超时时间 + if (_s.async && _s.timeout) { + xhr.timeout = _s.timeout; + } + // 发送请求.如果是简单请求,请求参数应为null.否则,请求参数类型需要和请求头Content-Type对应 + xhr.send(useUrlParam ? null : http.getQueryData(_s.data)); + }, + + /** 把参数data转为url查询参数 */ + getUrlParam: (url, data) => { + if (!data) { + return ''; + } + let paramsStr = data instanceof Object ? http.getQueryString(data) : data; + return (url.indexOf('?') !== -1) ? paramsStr : '?' + paramsStr; + }, + + /** 获取ajax请求参数 */ + getQueryData: (data) => { + if (!data) { + return null; + } + if (typeof data === 'string') { + return data; + } + if (data instanceof FormData) { + return data; + } + return http.getQueryString(data); + }, + + /** 把对象转为查询字符串 */ + getQueryString: (data) => { + let paramsArr = []; + if (data instanceof Object) { + Object.keys(data).forEach(key => { + let val = data[key]; + // todo 参数Date类型需要根据后台api酌情处理 + if (val instanceof Date) { + // val = dateFormat(val, 'yyyy-MM-dd hh:mm:ss'); + } + paramsArr.push(encodeURIComponent(key) + '=' + encodeURIComponent(val)); + }); + } + return paramsArr.join('&'); + } +} + +export default http; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 39651a9..8b60d70 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,47 +9,46 @@ const path = require('path'); * https://github.com/webpack-contrib/mini-css-extract-plugin * */ -// 把less css scss文件分离:要使用mini-css-extract-plugin插件 +// 把less css scss less 文件分离:要使用mini-css-extract-plugin插件 const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const HtmlWebPackPlugin = require("html-webpack-plugin"); const OptimizeCss = require('optimize-css-assets-webpack-plugin'); -const CleanWebpackPlugin = require('clean-webpack-plugin');; - +const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = { mode: 'development', - - entry: './src/index.js', - + entry: path.resolve(__dirname, 'src/index.js'), output: { - library: 'CoolMDEditor', + library: 'CMdEditor', libraryTarget: 'umd', - filename: 'coolMdEditor.js', - path: path.resolve(__dirname, 'dist') - - // 关键在此项配置,需要配置为 "this", 默认为 "window"--至少在这里并没有什么用 - // globalObject: "this" + filename: 'cMdEditor.js', + path: path.resolve(__dirname, 'dist') }, devtool: 'inline-source-map', devServer: { - contentBase: './dist' + contentBase: path.join(__dirname, "dist"), + compress: true, + port: 9000 }, plugins: [ + // 删除 dist 中旧文件 new CleanWebpackPlugin(['dist']), + // 生成 .html 文件 new HtmlWebPackPlugin({ template: "./src/index.html", filename: "./index.html" }), + // 压缩生成后的 .css new OptimizeCss({ cssProcessor: require('cssnano') }), new MiniCssExtractPlugin({ path: path.resolve(__dirname, 'dist'), // filename: "[name].[chunkhash:8].css", - filename: "coolMdEditor.css", + filename: "cMdEditor.css", chunkFilename: "[id].css" }) ], @@ -69,9 +68,6 @@ module.exports = { { loader: MiniCssExtractPlugin.loader, options: { - // you can specify a publicPath here - // by default it use publicPath in webpackOptions.output - publicPath: 'dist' } }, // 如果使用 `MiniCssExtractPlugin.loader` 这里就不要使用了 @@ -90,23 +86,19 @@ module.exports = { options: { ident: 'postcss', plugins: [ - // Notice: 这里要添加`{browsers:['last 2 versions']}` - // 不添加不会添加前缀 - require('autoprefixer')({browsers:['last 2 versions']}) + // Notice: css 添加浏览器前缀 + require('autoprefixer')() ] } } ] }, { - test: /\.scss$/, + test: /\.less$/, use: [ { loader: MiniCssExtractPlugin.loader, options: { - // you can specify a publicPath here - // by default it use publicPath in webpackOptions.output - publicPath: 'dist' } }, // "style-loader", @@ -120,7 +112,7 @@ module.exports = { ] } }, - 'sass-loader' + 'less-loader' ] } ]