/* @import "./normalize.css";
@import "./bootstrap.css";
@import "./app.css"; */
html,body{height:100%;}
.table{border: 1px solid #dddee1;border-collapse: collapse;}
.table thead{background-color: #f8f8f9;border-bottom: 1px solid #e9eaec;}
.table thead th{text-align: left;padding: 8px 0 8px 5px;}
.table tbody tr td{text-align: left;padding: 5px 5px 5px 5px;}
.fontBlack{color:#333;cursor: pointer;}
.fontBlue{color:#1890ff;cursor: pointer;}
.fontPink{color:#eb2f96;cursor: pointer;}
.fontGreen{color:#19be6b;cursor: pointer;}
.fontRed{color:#f5222d;cursor: pointer;}
.fontOrange{color:#fa8c16;cursor: pointer;}
.buttons>span{margin-right:5px;}
.ivu-poptip-confirm .ivu-poptip-body .ivu-icon{left:16px;}
.ivu-form .ivu-form-item-label,.ivu-radio-wrapper,.ivu-input,.ivu-form-item-content,.ivu-poptip-popper,.ivu-select-item,.ivu-select-single .ivu-select-selection .ivu-select-placeholder,.ivu-select-single .ivu-select-selection .ivu-select-selected-value,.ivu-btn-small{font-size:12px !important;}
#main{height:100%;}
.ivu-card-body{height:100%;}
.layout{
    height:100%;
    display: flex;
    flex-direction: row;
}
.layout-header-bar{
    background: #fff;
    box-shadow: 0 1px 1px rgba(0,0,0,.1);
}
.layout-logo-left{
    width: 90%;
    height: 30px;
    background: #5b6270;
    border-radius: 3px;
    margin: 15px auto;
}
.menu-icon{
    transition: all .3s;
}
.rotate-icon{
    transform: rotate(-90deg);
}
.menu-item span{
    display: inline-block;
    /* overflow: hidden; */
    width: 60%;
    /* text-overflow: ellipsis; */
    white-space: nowrap;
    vertical-align: bottom;
    transition: width .2s ease .2s;
}
.menu-item i{
    transform: translateX(0px);
    transition: font-size .2s ease, transform .2s ease;
    vertical-align: middle;
    font-size: 16px;
}
.collapsed-menu span{
    width: 0px;
    display: none;
    transition: width .2s ease;
}
.collapsed-menu i{
    transform: translateX(5px);
    transition: font-size .2s ease .2s, transform .2s ease .2s;
    vertical-align: middle;
    font-size: 22px;
}
.collapsed-menu .ivu-menu-submenu{height: 50px;}
/* .collapsed-menu .ivu-menu-item{display: none} */
.collapsed-menu .ivu-menu-submenu-title-icon{display: none}
.logo-con {
  padding: 8px;
  text-align: center;
}
.logo-con img {
  height: 60px;
  width: auto;
}
.ivu-layout-header {
  width: 100%;
  position: absolute;
  top: 0;
  z-index: 2;
  padding: 0;
}
.navicon-con {
  margin: 0 6px;
  display: inline-block;
}
.ivu-menu-vertical .ivu-menu-item{
    padding:0;
}
.ivu-menu-vertical .ivu-menu-item a{
    display: block;
    padding:14px 24px;
}
.main-header {
    height: 60px;
    background: #fff;
    box-shadow: 0 2px 1px 1px hsla(0,0%,39%,.1);
    position: relative;
    z-index: 11;
}
.user-dropdown-menu-con {
    position: fixed;
    right: 0;
    top: 0;
    width: 150px;
}
.user-dropdown-innercon {
    height: 100%;
    padding-right: 14px;
}
.ivu-dropdown {
    display: inline-block;
}
.ivu-dropdown-rel {
    position: relative;
}
.user-dropdown-menu-con .main-user-name {
    display: inline-block;
    width: 80px;
    word-break: keep-all;
    white-space: nowrap;
    vertical-align: middle;
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: right;
}

body {
    margin: 0 0px;
}
a {
    text-decoration: none;
    color: inherit;
}
a:hover {
    color: inherit;
}
a:visited {
    color: inherit;
}
a:link {
    color: inherit;
}
.ivu-select-item{
    padding:7px 5px;
}


.slide-verify[data-v-9d34ce3e] {
    position: relative;
}

/* 图片加载样式 */
.slider-verify-loading[data-v-9d34ce3e] {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
    background: rgba(255, 255, 255, 0.9);
    z-index: 999;
    animation: loading-data-v-9d34ce3e 1.5s infinite;
}
@keyframes loading-data-v-9d34ce3e {
0% {
        opacity: .7;
}
100% {
        opacity: 9;
}
}
.slide-verify-block[data-v-9d34ce3e] {
    position: absolute;
    left: 0;
    top: 0
}
.slide-verify-refresh-icon[data-v-9d34ce3e] {
    position: absolute;
    right: 0;
    top: 0;
    width: 34px;
    height: 34px;
    cursor: pointer;
    background: url(../img/icon_light.3d52436a.png) 0 -437px;
    background-size: 34px 471px
}
.slide-verify-slider[data-v-9d34ce3e] {
    position: relative;
    text-align: center;
    width: 100%;
    height: 40px;
    line-height: 40px;
    margin-top: 15px;
    background: #f7f9fa;
    color: #45494c;
    border: 1px solid #e4e7eb
}
.slide-verify-slider-mask[data-v-9d34ce3e] {
    position: absolute;
    left: 0;
    top: 0;
    height: 40px;
    border: 0 solid #1991FA;
    background: #D1E9FE
}
.slide-verify-slider-mask-item[data-v-9d34ce3e] {
    position: absolute;
    top: 0;
    left: 0;
    width: 40px;
    height: 40px;
    background: #fff;
    box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
    cursor: pointer;
    transition: background .2s linear
}
.slide-verify-slider-mask-item[data-v-9d34ce3e]:hover {
    background: #1991FA
}
.slide-verify-slider-mask-item:hover .slide-verify-slider-mask-item-icon[data-v-9d34ce3e] {
    background-position: 0 -13px
}
.slide-verify-slider-mask-item-icon[data-v-9d34ce3e] {
    position: absolute;
    top: 15px;
    left: 13px;
    width: 14px;
    height: 12px;
    background: url(../img/icon_light.3d52436a.png) 0 -26px;
    background-size: 34px 471px
}
.container-active .slide-verify-slider-mask-item[data-v-9d34ce3e] {
    height: 38px;
    top: -1px;
    border: 1px solid #1991FA;
}
.container-active .slide-verify-slider-mask[data-v-9d34ce3e] {
    height: 38px;
    border-width: 1px;
}
.container-success .slide-verify-slider-mask-item[data-v-9d34ce3e] {
    height: 38px;
    top: -1px;
    border: 1px solid #52CCBA;
    background-color: #52CCBA !important;
}
.container-success .slide-verify-slider-mask[data-v-9d34ce3e] {
    height: 38px;
    border: 1px solid #52CCBA;
    background-color: #D2F4EF;
}
.container-success .slide-verify-slider-mask-item-icon[data-v-9d34ce3e] {
    background-position: 0 0 !important;
}
.container-fail .slide-verify-slider-mask-item[data-v-9d34ce3e] {
    height: 38px;
    top: -1px;
    border: 1px solid #f57a7a;
    background-color: #f57a7a !important;
}
.container-fail .slide-verify-slider-mask[data-v-9d34ce3e] {
    height: 38px;
    border: 1px solid #f57a7a;
    background-color: #fce1e1;
}
.container-fail .slide-verify-slider-mask-item-icon[data-v-9d34ce3e] {
    top: 14px;
    background-position: 0 -82px !important;
}
.container-active .slide-verify-slider-text[data-v-9d34ce3e],
.container-success .slide-verify-slider-text[data-v-9d34ce3e],
.container-fail .slide-verify-slider-text[data-v-9d34ce3e] {
    display: none;
}


#publicSliderVerify {
    font-family: 'Avenir', Helvetica, Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    color: #2c3e50;
}
.btn {
    margin-top: 20px;
    outline: 0;
    border: none;
    padding: 8px 15px;
    border-radius: 5px;
    color: #fff;
    background-color: #1890ff;
    cursor: pointer;
}
.btn:active {
    box-shadow: 1px 5px 0 rgba(0, 0, 0, 0.1) inset;
}
.login[data-v-a49090ce] {
    width: 100%;
    height: 100%;
    padding: 0;
    /* background-image: url(https://file.iviewui.com/iview-admin/login_bg.jpg); */
    background-image: url(https://download.snec.org.cn/SNEC/article/2025/03/13//login_bg-95115908.jpg);
    background-size: cover;
    background-position: center;
    position: relative;
}
.login-con[data-v-a49090ce] {
    position: absolute;
    right: 160px;
    top: 50%;
    transform: translateY(-60%);
    width: 300px;
}
.login-con .form-con[data-v-a49090ce] {
    padding: 10px 0 0;
}
.login-con .login-tip[data-v-a49090ce] {
    font-size: 10px;
    text-align: center;
    color: #c3c3c3;
}
@media (max-width: 767px){
.login-con[data-v-a49090ce]{
        top:50%;
        left:50%;
        transform: translate(-50%,-50%);
}
}

html,
body,
#main1,
#main1>div {
    height: 100%;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXQvY3NzL2dsb2JhbC5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvbWFpbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvbWFpbi52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZpZXdzL3B1YmxpY1NsaWRlclZlcmlmeS9jb21wb25lbnRzL3NyYy92aWV3cy9wdWJsaWNTbGlkZXJWZXJpZnkvY29tcG9uZW50cy9zbGlkZXJWZXJpZnkudnVlIiwid2VicGFjazovLy8uL3NyYy92aWV3cy9wdWJsaWNTbGlkZXJWZXJpZnkvc3JjL3ZpZXdzL3B1YmxpY1NsaWRlclZlcmlmeS9wdWJsaWNTbGlkZXJWZXJpZnkudnVlIiwid2VicGFjazovLy8uL3NyYy92aWV3cy9sb2dpbi9sb2dpbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZpZXdzL2xvZ2luL3NyYy92aWV3cy9sb2dpbi9sb2dpbi52dWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O3VCQUV1QjtBQUN2QixVQUFVLFlBQVksQ0FBQztBQUN2QixPQUFPLDBCQUEwQiwwQkFBMEIsQ0FBQztBQUM1RCxhQUFhLDBCQUEwQixpQ0FBaUMsQ0FBQztBQUN6RSxnQkFBZ0IsaUJBQWlCLHVCQUF1QixDQUFDO0FBQ3pELG1CQUFtQixpQkFBaUIseUJBQXlCLENBQUM7QUFDOUQsV0FBVyxXQUFXLGdCQUFnQixDQUFDO0FBQ3ZDLFVBQVUsY0FBYyxnQkFBZ0IsQ0FBQztBQUN6QyxVQUFVLGNBQWMsZ0JBQWdCLENBQUM7QUFDekMsV0FBVyxjQUFjLGdCQUFnQixDQUFDO0FBQzFDLFNBQVMsY0FBYyxnQkFBZ0IsQ0FBQztBQUN4QyxZQUFZLGNBQWMsZ0JBQWdCLENBQUM7QUFDM0MsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQywrQ0FBK0MsVUFBVSxDQUFDO0FBQzFELDRRQUE0USwwQkFBMEIsQztBQ2hCdFMsTUFBTSxZQUFZLENBQUM7QUFDbkIsZUFBZSxZQUFZLENBQUM7QUFDNUI7SUFDSSxZQUFZO0lBQ1osY0FBYztJQUNkLG9CQUFvQjtDQUN2QjtBQUNEO0lBQ0ksaUJBQWlCO0lBQ2pCLHFDQUFxQztDQUN4QztBQUNEO0lBQ0ksV0FBVztJQUNYLGFBQWE7SUFDYixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtDQUNyQjtBQUNEO0lBQ0ksb0JBQW9CO0NBQ3ZCO0FBQ0Q7SUFDSSwwQkFBMEI7Q0FDN0I7QUFDRDtJQUNJLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsV0FBVztJQUNYLDhCQUE4QjtJQUM5QixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLCtCQUErQjtDQUNsQztBQUNEO0lBQ0ksMkJBQTJCO0lBQzNCLG1EQUFtRDtJQUNuRCx1QkFBdUI7SUFDdkIsZ0JBQWdCO0NBQ25CO0FBQ0Q7SUFDSSxXQUFXO0lBQ1gsY0FBYztJQUNkLDJCQUEyQjtDQUM5QjtBQUNEO0lBQ0ksMkJBQTJCO0lBQzNCLDJEQUEyRDtJQUMzRCx1QkFBdUI7SUFDdkIsZ0JBQWdCO0NBQ25CO0FBQ0Qsa0NBQWtDLGFBQWEsQ0FBQztBQUNoRCxtREFBbUQ7QUFDbkQsNkNBQTZDLGFBQWEsQ0FBQztBQUMzRDtFQUNFLGFBQWE7RUFDYixtQkFBbUI7Q0FDcEI7QUFDRDtFQUNFLGFBQWE7RUFDYixZQUFZO0NBQ2I7QUFDRDtFQUNFLFlBQVk7RUFDWixtQkFBbUI7RUFDbkIsT0FBTztFQUNQLFdBQVc7RUFDWCxXQUFXO0NBQ1o7QUFDRDtFQUNFLGNBQWM7RUFDZCxzQkFBc0I7Q0FDdkI7QUFDRDtJQUNJLFVBQVU7Q0FDYjtBQUNEO0lBQ0ksZUFBZTtJQUNmLGtCQUFrQjtDQUNyQjtBQUNEO0lBQ0ksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQiw0Q0FBNEM7SUFDNUMsbUJBQW1CO0lBQ25CLFlBQVk7Q0FDZjtBQUNEO0lBQ0ksZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxPQUFPO0lBQ1AsYUFBYTtDQUNoQjtBQUNEO0lBQ0ksYUFBYTtJQUNiLG9CQUFvQjtDQUN2QjtBQUNEO0lBQ0ksc0JBQXNCO0NBQ3pCO0FBQ0Q7SUFDSSxtQkFBbUI7Q0FDdEI7QUFDRDtJQUNJLHNCQUFzQjtJQUN0QixZQUFZO0lBQ1oscUJBQXFCO0lBQ3JCLG9CQUFvQjtJQUNwQix1QkFBdUI7SUFDdkIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixrQkFBa0I7OztBQ0p0QjtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUNBO0lBQ0E7Q0FDQTs7O0FDMldBO0lBQ0E7Q0FDQTs7QUFFQTtBQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7QUFDQTtRQUNBO0NBQ0E7QUFFQTtRQUNBO0NBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0NBQ0E7QUFFQTs7O0lBR0E7Q0FDQTs7O0FDcGdCQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7O0FDMUlBO0lBQ0ksWUFBWTtJQUNaLGFBQWE7SUFDYixXQUFXO0lBQ1gsK0VBQStFO0lBQy9FLG1HQUFtRztJQUNuRyx1QkFBdUI7SUFDdkIsNEJBQTRCO0lBQzVCLG1CQUFtQjtDQUN0QjtBQUNEO0lBQ0ksbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixTQUFTO0lBQ1QsNEJBQTRCO0lBQzVCLGFBQWE7Q0FDaEI7QUFDRDtJQUNJLGtCQUFrQjtDQUNyQjtBQUNEO0lBQ0ksZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQixlQUFlO0NBQ2xCO0FBQ0Q7QUFDQTtRQUNRLFFBQVE7UUFDUixTQUFTO1FBQ1QsZ0NBQWdDO0NBQ3ZDOzs7QUM0QkQ7Ozs7SUFJQTtDQUNBIiwiZmlsZSI6ImNzcy9sb2dpbi5lZDI2ZGNiNC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAaW1wb3J0IFwiLi9ub3JtYWxpemUuY3NzXCI7XG5AaW1wb3J0IFwiLi9ib290c3RyYXAuY3NzXCI7XG5AaW1wb3J0IFwiLi9hcHAuY3NzXCI7ICovXG5odG1sLGJvZHl7aGVpZ2h0OjEwMCU7fVxuLnRhYmxle2JvcmRlcjogMXB4IHNvbGlkICNkZGRlZTE7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTt9XG4udGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmOTtib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U5ZWFlYzt9XG4udGFibGUgdGhlYWQgdGh7dGV4dC1hbGlnbjogbGVmdDtwYWRkaW5nOiA4cHggMCA4cHggNXB4O31cbi50YWJsZSB0Ym9keSB0ciB0ZHt0ZXh0LWFsaWduOiBsZWZ0O3BhZGRpbmc6IDVweCA1cHggNXB4IDVweDt9XG4uZm9udEJsYWNre2NvbG9yOiMzMzM7Y3Vyc29yOiBwb2ludGVyO31cbi5mb250Qmx1ZXtjb2xvcjojMTg5MGZmO2N1cnNvcjogcG9pbnRlcjt9XG4uZm9udFBpbmt7Y29sb3I6I2ViMmY5NjtjdXJzb3I6IHBvaW50ZXI7fVxuLmZvbnRHcmVlbntjb2xvcjojMTliZTZiO2N1cnNvcjogcG9pbnRlcjt9XG4uZm9udFJlZHtjb2xvcjojZjUyMjJkO2N1cnNvcjogcG9pbnRlcjt9XG4uZm9udE9yYW5nZXtjb2xvcjojZmE4YzE2O2N1cnNvcjogcG9pbnRlcjt9XG4uYnV0dG9ucz5zcGFue21hcmdpbi1yaWdodDo1cHg7fVxuLml2dS1wb3B0aXAtY29uZmlybSAuaXZ1LXBvcHRpcC1ib2R5IC5pdnUtaWNvbntsZWZ0OjE2cHg7fVxuLml2dS1mb3JtIC5pdnUtZm9ybS1pdGVtLWxhYmVsLC5pdnUtcmFkaW8td3JhcHBlciwuaXZ1LWlucHV0LC5pdnUtZm9ybS1pdGVtLWNvbnRlbnQsLml2dS1wb3B0aXAtcG9wcGVyLC5pdnUtc2VsZWN0LWl0ZW0sLml2dS1zZWxlY3Qtc2luZ2xlIC5pdnUtc2VsZWN0LXNlbGVjdGlvbiAuaXZ1LXNlbGVjdC1wbGFjZWhvbGRlciwuaXZ1LXNlbGVjdC1zaW5nbGUgLml2dS1zZWxlY3Qtc2VsZWN0aW9uIC5pdnUtc2VsZWN0LXNlbGVjdGVkLXZhbHVlLC5pdnUtYnRuLXNtYWxse2ZvbnQtc2l6ZToxMnB4ICFpbXBvcnRhbnQ7fSIsIiNtYWlue2hlaWdodDoxMDAlO31cbi5pdnUtY2FyZC1ib2R5e2hlaWdodDoxMDAlO31cbi5sYXlvdXR7XG4gICAgaGVpZ2h0OjEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuLmxheW91dC1oZWFkZXItYmFye1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwwLDAsLjEpO1xufVxuLmxheW91dC1sb2dvLWxlZnR7XG4gICAgd2lkdGg6IDkwJTtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgYmFja2dyb3VuZDogIzViNjI3MDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgbWFyZ2luOiAxNXB4IGF1dG87XG59XG4ubWVudS1pY29ue1xuICAgIHRyYW5zaXRpb246IGFsbCAuM3M7XG59XG4ucm90YXRlLWljb257XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTtcbn1cbi5tZW51LWl0ZW0gc3BhbntcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgLyogb3ZlcmZsb3c6IGhpZGRlbjsgKi9cbiAgICB3aWR0aDogNjAlO1xuICAgIC8qIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyAqL1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgZWFzZSAuMnM7XG59XG4ubWVudS1pdGVtIGl7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIC4ycyBlYXNlLCB0cmFuc2Zvcm0gLjJzIGVhc2U7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG59XG4uY29sbGFwc2VkLW1lbnUgc3BhbntcbiAgICB3aWR0aDogMHB4O1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogd2lkdGggLjJzIGVhc2U7XG59XG4uY29sbGFwc2VkLW1lbnUgaXtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNXB4KTtcbiAgICB0cmFuc2l0aW9uOiBmb250LXNpemUgLjJzIGVhc2UgLjJzLCB0cmFuc2Zvcm0gLjJzIGVhc2UgLjJzO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAyMnB4O1xufVxuLmNvbGxhcHNlZC1tZW51IC5pdnUtbWVudS1zdWJtZW51e2hlaWdodDogNTBweDt9XG4vKiAuY29sbGFwc2VkLW1lbnUgLml2dS1tZW51LWl0ZW17ZGlzcGxheTogbm9uZX0gKi9cbi5jb2xsYXBzZWQtbWVudSAuaXZ1LW1lbnUtc3VibWVudS10aXRsZS1pY29ue2Rpc3BsYXk6IG5vbmV9XG4ubG9nby1jb24ge1xuICBwYWRkaW5nOiA4cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5sb2dvLWNvbiBpbWcge1xuICBoZWlnaHQ6IDYwcHg7XG4gIHdpZHRoOiBhdXRvO1xufVxuLml2dS1sYXlvdXQtaGVhZGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAyO1xuICBwYWRkaW5nOiAwO1xufVxuLm5hdmljb24tY29uIHtcbiAgbWFyZ2luOiAwIDZweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLml2dS1tZW51LXZlcnRpY2FsIC5pdnUtbWVudS1pdGVte1xuICAgIHBhZGRpbmc6MDtcbn1cbi5pdnUtbWVudS12ZXJ0aWNhbCAuaXZ1LW1lbnUtaXRlbSBhe1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6MTRweCAyNHB4O1xufVxuLm1haW4taGVhZGVyIHtcbiAgICBoZWlnaHQ6IDYwcHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxcHggMXB4IGhzbGEoMCwwJSwzOSUsLjEpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxMTtcbn1cbi51c2VyLWRyb3Bkb3duLW1lbnUtY29uIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbn1cbi51c2VyLWRyb3Bkb3duLWlubmVyY29uIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy1yaWdodDogMTRweDtcbn1cbi5pdnUtZHJvcGRvd24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5pdnUtZHJvcGRvd24tcmVsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4udXNlci1kcm9wZG93bi1tZW51LWNvbiAubWFpbi11c2VyLW5hbWUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogODBweDtcbiAgICB3b3JkLWJyZWFrOiBrZWVwLWFsbDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn0iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dFwiPlxuICAgICAgICA8U2lkZXIgcmVmPVwic2lkZTFcIiBoaWRlLXRyaWdnZXIgY29sbGFwc2libGUgOmNvbGxhcHNlZC13aWR0aD1cIjc4XCIgdi1tb2RlbD1cImlzQ29sbGFwc2VkXCIgc3R5bGU9XCJvdmVyZmxvdy15OmF1dG87XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb25cIj5cbiAgICAgICAgICAgICAgICA8aW1nIHYtc2hvdz1cIiFpc0NvbGxhcHNlZFwiIDpzcmM9XCJsb2dvX1NZU1RFTVwiIGtleT1cIm1heC1sb2dvXCIgLz5cbiAgICAgICAgICAgICAgICA8aW1nIHYtc2hvdz1cImlzQ29sbGFwc2VkXCIgOnNyYz1cImxvZ29fU1lTVEVNX3NtXCIga2V5PVwibWluLWxvZ29cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8TWVudSA6YWN0aXZlLW5hbWU9XCJhY3RpdmVOYW1lXCIgdGhlbWU9XCJkYXJrXCIgd2lkdGg9XCJhdXRvXCIgOmNsYXNzPVwibWVudWl0ZW1DbGFzc2VzXCJcbiAgICAgICAgICAgICAgICBAb24tc2VsZWN0PSdjaGFuZ2VIcmVmJz5cbiAgICAgICAgICAgICAgICA8TWVudUl0ZW0gdi1mb3I9XCIoaXRlbSxpbmRleCkgaW4gbWVudUxpc3RcIiB2LWlmPVwiaXRlbS5TaG93XCIgOm5hbWU9XCJpdGVtLlB1cnZpZXdOYW1lXCIgOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwiaXRlbS5IcmVmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiB0eXBlPVwiaW9zLWhvbWVcIj48L0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyR0KGl0ZW0uUHVydmlld05hbWUpfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICAgPC9NZW51PlxuICAgICAgICA8L1NpZGVyPlxuICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cbiAgICAgICAgICAgIDxIZWFkZXJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGN1cnJlbnRCYWNrQ29sb3IsIGJveFNoYWRvdzogJzAgMnB4IDNweCAycHggcmdiYSgwLDAsMCwuMSknIH1cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdmljb24tY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gOnN0eWxlPVwieyB0cmFuc2Zvcm06ICdyb3RhdGVaKCcgKyAodGhpcy5pc0NvbGxhcHNlZCA/ICctOTAnIDogJzAnKSArICdkZWcpJyB9XCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLm5hdGl2ZT1cImNvbGxhcHNlZFNpZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiB0eXBlPVwibmF2aWNvblwiIHNpemU9XCIzMlwiPjwvSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIOi3s+i9rOWFtuS7luezu+e7nyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbjogMCAyNXB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJHQoXCLot7Povazlhbbku5bns7vnu59cIikgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0IHYtbW9kZWw9XCJjdXJyZW50U3lzSHJlZlwiIHN0eWxlPVwid2lkdGg6MTgwcHhcIiBAb24tY2hhbmdlPSdjaGFuZ2VTeXNHcm91cCc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uIHYtZm9yPVwiaXRlbSBpbiBzeXNHcm91cExpc3RcIiB2LWlmPVwiaXRlbS5zaG93Q2hhbmVsXCIgOnZhbHVlPVwiaXRlbS52YWx1ZVwiIDprZXk9XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpdGVtLnN5c0hyZWZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJpdGVtLnN5c0hyZWZcIiB0YXJnZXQ9XCJfYmxhbmtcIj57eyBpdGVtLmxhYmVsIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT57eyBpdGVtLmxhYmVsIH19PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIOW3tOilv+a1i+ivleS4muWKoeWRmO+8jOWPquiDvemihOiniFBW5be06KW/IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFuZ3VhZ2VcIj7or63oqIAvTGFuZ3VhZ2U6PGEgOnN0eWxlPVwieyBjb2xvcjogJGkxOG4ubG9jYWxlID09ICdlbi1VUycgPyAnYmxhY2snIDogJ29yYW5nZScgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJjaGFuZ2VMYW5ndWFnZUhyZWYoJ3poLUNOJylcIj7kuK3mloc8L2E+ICZuYnNwOyZuYnNwOzxhXG4gICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IGNvbG9yOiAkaTE4bi5sb2NhbGUgPT0gJ3poLUNOJyA/ICdibGFjaycgOiAnb3JhbmdlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImNoYW5nZUxhbmd1YWdlSHJlZignZW4tVVMnKVwiPkVOR0xJU0g8L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWRyb3Bkb3duLW1lbnUtY29uXCIgc3R5bGU9XCJ3aWR0aDphdXRvO1wiPlxuICAgICAgICAgICAgICAgICAgICA8Um93IHR5cGU9XCJmbGV4XCIganVzdGlmeT1cImVuZFwiIGFsaWduPVwibWlkZGxlXCIgY2xhc3M9XCJ1c2VyLWRyb3Bkb3duLWlubmVyY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInNob3dTd2l0Y2hTeXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRoaXMuJGkxOG4ubG9jYWxlID09PSAnemgtQ04nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O1wiPuWIh+aNouezu+e7n++8mjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3Qgdi1tb2RlbD1cInN5c3RlbV9tb2RlbFwiIHNpemU9XCJzbWFsbFwiIHN0eWxlPVwid2lkdGg6OTVweDtmb250LXNpemU6MTJweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG9uLWNoYW5nZT1cImNoYW5nZVN5c3RlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBXZWJTZXRMaXN0XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb24gOnZhbHVlPVwiaXRlbS53ZWJzaXRlXCIgOmtleT1cImluZGV4XCIgdi1pZj1cIiFpdGVtLmhpZGVcIj57e2l0ZW0ubGlzdE5hbWVDbiB9fTwvT3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cInRoaXMuJGkxOG4ubG9jYWxlID09PSAnZW4tVVMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O1wiPlN3aXRjaCBzeXN0ZW1zOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3Qgdi1tb2RlbD1cInN5c3RlbV9tb2RlbFwiIHNpemU9XCJzbWFsbFwiIHN0eWxlPVwid2lkdGg6OTVweDtmb250LXNpemU6MTJweDt3aWR0aDogMTMwcHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBvbi1jaGFuZ2U9XCJjaGFuZ2VTeXN0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gV2ViU2V0TGlzdFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uIDp2YWx1ZT1cIml0ZW0ud2Vic2l0ZVwiIDprZXk9XCJpbmRleFwiIHYtaWY9XCIhaXRlbS5oaWRlXCI+e3tpdGVtLmxpc3ROYW1lRW4gfX08L09wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZWxzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAxLjJweDtcIj57eyAkdCgn5b2T5YmN57O757ufKFBW5be06KW/KScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biB0cmFuc2ZlciB0cmlnZ2VyPVwiY2xpY2tcIiBAb24tY2xpY2s9XCJoYW5kbGVDbGlja1VzZXJEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluLXVzZXItbmFtZVwiIHN0eWxlPVwid2lkdGg6YXV0bzttYXJnaW4tbGVmdDoyMHB4O1wiPnt7IFVzZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiB0eXBlPVwiYXJyb3ctZG93bi1iXCI+PC9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51IHNsb3Q9XCJsaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPERyb3Bkb3duSXRlbSBuYW1lPVwib3duU3BhY2VcIiBkaXZpZGVkPuS4quS6uuS4reW/gzwvRHJvcGRvd25JdGVtPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJzaG93U3dpdGNoU3lzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25JdGVtIG5hbWU9XCJjbXNNYW5hZ2VcIiBkaXZpZGVkPkNNU+ezu+e7n+e9keermeeuoeeQhjwvRHJvcGRvd25JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25JdGVtIG5hbWU9XCJsb2dpbm91dFwiPnt7ICR0KCfpgIDlh7rnmbvlvZUnKSB9fTwvRHJvcGRvd25JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxBdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3NzMS5iZHN0YXRpYy5jb20vNzBjRnZYU2hfUTFZbnhHa3BvV0sxSEY2aGh5L2l0L3U9MzQ0ODQ4NDI1MywzNjg1ODM2MTcwJmZtPTI3JmdwPTAuanBnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6ICM2MTlmZTc7bWFyZ2luLWxlZnQ6IDEwcHg7XCI+PC9BdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgIDwvUm93PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8Q29udGVudCA6c3R5bGU9XCJ7IGhlaWdodDogJzEwMCUnLCBwYWRkaW5nOiAnNjRweCAxNnB4IDE2cHgnLCBvdmVyZmxvd1k6ICdhdXRvJyB9XCI+XG4gICAgICAgICAgICAgICAgPEJyZWFkY3J1bWIgOnN0eWxlPVwieyBtYXJnaW46ICcxNnB4IDAnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPEJyZWFkY3J1bWJJdGVtPnt7ICR0KGJyZWFkQ3J1bWJJdGVtKSB9fTwvQnJlYWRjcnVtYkl0ZW0+XG4gICAgICAgICAgICAgICAgPC9CcmVhZGNydW1iPlxuICAgICAgICAgICAgICAgIDxDYXJkIHN0eWxlPVwiaGVpZ2h0OiA5MCU7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7b3ZlcmZsb3cteTphdXRvO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cIm1haW5cIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICAgIDwvQ29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuPHN0eWxlIGxhbmc9XCJjc3NcIj5cbmJvZHkge1xuICAgIG1hcmdpbjogMCAwcHg7XG59XG5cbmEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYTpob3ZlciB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmE6dmlzaXRlZCB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmE6bGluayB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG4uaXZ1LXNlbGVjdC1pdGVte1xuICAgIHBhZGRpbmc6N3B4IDVweDtcbn1cblxuQGltcG9ydCBcIi4uLy4uLy4uL2Fzc2V0L2Nzcy9nbG9iYWwuY3NzXCI7XG5AaW1wb3J0IFwiLi9tYWluLmNzc1wiO1xuPC9zdHlsZT5cbjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFVzZXJOYW1lOiAnJyxcbiAgICAgICAgICAgIGlzQ29sbGFwc2VkOiBmYWxzZSxcbiAgICAgICAgICAgIGFjdGl2ZU5hbWU6JycsXG4gICAgICAgICAgICBicmVhZENydW1iSXRlbTogJycsXG4gICAgICAgICAgICBjdXJyZW50U3lzSHJlZjogJycsXG4gICAgICAgICAgICB1cmxOYW1lOiAnJyxcbiAgICAgICAgICAgIHN5c0dyb3VwTGlzdDogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIuWxleS8mueuoeeQhuezu+e7n++8iOaWsO+8iVwiLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hhbmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzeXNIcmVmOiB0aGlzLlJVTl9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyAnaHR0cDovLzQ3LjU2LjI0Ni4yMTQ6MzIyMC8nIDogJ2h0dHA6Ly9hZG1pbnBhbmVsLnNuZWMub3JnLmNuLydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIumCruS7tuezu+e7n++8iOaWsO+8iVwiLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hhbmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzeXNIcmVmOiB0aGlzLlJVTl9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyAnaHR0cDovLzQ3LjU2LjI0Ni4yMTQ6MzIxMy8nIDogJ2h0dHA6Ly9lbWFpbHBhbmVsLnNuZWMub3JnLmNuLydcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIueUqOaIt+inkuiJsuadg+mZkOeuoeeQhuezu+e7n++8iOaWsO+8iVwiLFxuICAgICAgICAgICAgICAgICAgICBzaG93Q2hhbmVsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzeXNIcmVmOiB0aGlzLlJVTl9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyAnaHR0cDovLzQ3LjU2LjI0Ni4yMTQ6MzIwNS8nIDogJ2h0dHA6Ly9yb2xlcGFuZWwuc25lYy5vcmcuY24vJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwi5bel5L2c566h55CG5bmz5Y+wXCIsXG4gICAgICAgICAgICAgICAgICAgIHNob3dDaGFuZWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c0hyZWY6ICdodHRwOi8vd29ya21hbmFnZS5zbmVjLm9yZy5jbi8nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN5c3RlbUxpc3Q6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1BWMjAyMicsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRW46ICdQVigyMDIyKScsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAzLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1BW6Jm55qGlJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ1BWKEhPTkdRSUFPKScsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0VT5rWm5LicJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ0VTKFBVRE9ORyknLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdIRkPmtabkuJwnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnSEZDKFBVRE9ORyknLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogNixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdORVYnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnTkVWJyxcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiA3LFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0hGQ0RM5aSn6L+eJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ0hGQ0RMKERhbGlhbiknLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogOCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdIRUEnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnSEVBJyxcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEyLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05FSUFBUCcsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRW46ICdORUlBQVAnLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0se1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQVBWSUEnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnQVBWSUEnLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogOSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdGT0xMT1dNRScsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRW46ICdGT0xMT1dNRScsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdHR2V0JyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ0dHZXQnLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMTEsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnUFblt7Topb8nLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnUFYoQlJBWklMKScsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgfSx7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICflsI/nqIvluo8nLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbEVuOiAnTWluaSBQcm9ncmFtJyxcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDE1LFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ+Wwj+eoi+W6j3B2JyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ01pbmkgUHJvZ3JhbSBwdicsXG4gICAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiA0LFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0VTOCcsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsRW46ICdFUzgnLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogNSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdIRkM2JyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbjogJ0hGQzYnLFxuICAgICAgICAgICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3lzdGVtX21vZGVsOiAncHYnLFxuICAgICAgICAgICAgY3VycmVudEJhY2tDb2xvcjoncGFsZXZpb2xldHJlZCcsXG4gICAgICAgICAgICBzaG93TWVudTE6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd01lbnVKUDogZmFsc2UsXG4gICAgICAgICAgICBSb2xlQ29kZTogJycsXG4gICAgICAgICAgICBzaG93TWVudUluZGV4OiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dNZW51Q3RtYTogZmFsc2UsXG4gICAgICAgICAgICBzaG93TWVudUFydExhYjogZmFsc2UsXG4gICAgICAgICAgICBzaG93TWVudUFydExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd01lbnVTdGF0aWNMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dNZW51RGxMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dNZW51RnJkU2hpcDogZmFsc2UsXG4gICAgICAgICAgICBzaG93TWVudUhtQmFubmVyOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dNZW51Q29FeGg6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd01lbnVCcmlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd01lbnVKcFBhZ2VBcnRzOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dNZW51SnBBcnRMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dUb3BCb3Q6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd1N3aXRjaFN5czogdHJ1ZSxcbiAgICAgICAgICAgIG1lbnVMaXN0OltdLFxuICAgICAgICAgICAgV2ViU2V0TGlzdDpbXSxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgcm90YXRlSWNvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgJ21lbnUtaWNvbicsXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA/ICdyb3RhdGUtaWNvbicgOiAnJ1xuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVudWl0ZW1DbGFzc2VzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnbWVudS1pdGVtJyxcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkID8gJ2NvbGxhcHNlZC1tZW51JyA6ICcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIC8vIOWIh+aNouivreiogFxuICAgICAgICBjaGFuZ2VMYW5ndWFnZUhyZWYoc3RyKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUxhbmd1YWdlKHN0cik7XG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlU3lzR3JvdXAodmFsdWUpIHtcblxuICAgICAgICB9LFxuICAgICAgICAvLyDliIfmjaLns7vnu59cbiAgICAgICAgY2hhbmdlU3lzdGVtKHZhbHVlKSB7XG4gICAgICAgICAgICAvLyDlsIZzeXN0ZW1fbW9kZWzlrZjliLBzZXNzaW9uc3RvcmFnZemHjFxuICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3N5c3RlbV9tb2RlbCcsIHZhbHVlKTtcbiAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdsb2dvX1NZU1RFTScsICcvaW1hZ2VzL3NuZWNfbG9nby5zdmcnKTtcbiAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdsb2dvX1NZU1RFTV9zbScsICcvaW1hZ2VzL3NuZWNfbG9nb19zbS5zdmcnKTtcblxuICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCB2YWx1ZSk7XG4gICAgICAgICAgICAgaWYodmFsdWU9PSdpbmRvJyl7XG4gICAgICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ1NORUNfRU5WJywnSU5ETycpO1xuICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsJycpO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuV2ViU2V0TGlzdC5mb3JFYWNoKGl0ZW09PntcbiAgICAgICAgICAgICAgICBpZihpdGVtLndlYnNpdGUgPT0gdmFsdWUpe1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRCYWNrQ29sb3IgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjdXJyZW50QmFja0NvbG9yJywgaXRlbS5saXN0QmFja0NvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vIGlmICh2YWx1ZSA9PSAwKSB7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2dycGMnLCAnR3JwY0NNUycpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdTTkVDJyk7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgPT0gMSkge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfSUVTSCcpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdJRVNIJyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3dlYnNpdGVEQicsICdlcycpO1xuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSAyKSB7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2dycGMnLCAnR3JwY0NNU19IRkMnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnSEZDJyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3dlYnNpdGVEQicsICdoZmMnKTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgPT0gMykge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfUFYxNicpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdQVjE3Jyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3dlYnNpdGVEQicsICdwdjE2Jyk7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlID09IDQpIHtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZ3JwYycsICdHcnBjQ01TX0lFU0g4Jyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ1NORUNfRU5WJywgJ0VTOCcpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnZXM4Jyk7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlID09IDUpIHtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZ3JwYycsICdHcnBjQ01TX0hGQzYnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnSEZDNicpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnaGZjNicpO1xuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSA2KSB7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2dycGMnLCAnR3JwY0NNU19ORVYnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnTkVWJyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3dlYnNpdGVEQicsICduZXYnKTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgPT0gNykge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfSEZDREwnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnSEZDREwnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd2Vic2l0ZURCJywgJ2hmY2RsJyk7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlID09IDgpIHtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZ3JwYycsICdHcnBjQ01TX0hFQScpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdIRUEnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd2Vic2l0ZURCJywgJ2hlYScpO1xuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSA5KSB7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2dycGMnLCAnR3JwY0NNU19GT0xMT1dNRScpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdGT0xMT1dNRScpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnZm9sbG93bWUnKTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgPT0gMTApIHtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZ3JwYycsICdHcnBjQ01TX0dHRVQnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnR0dFVCcpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnZ2dldCcpO1xuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSAxMSkge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfSU5ETycpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdJTkRPJyk7ICAgIFxuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnaW5kbycpOyAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSAxMikge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfTkVJQUFQJyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ1NORUNfRU5WJywgJ05FSUFBUCcpOyAgICBcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnd2Vic2l0ZURCJywgJ25laWFhcCcpOyAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSAxMykge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfQVBWSUEnKTtcbiAgICAgICAgICAgIC8vICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnQVBWSUEnKTsgIFxuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnYXB2aWEnKTsgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSA9PSAxNCkge1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdncnBjJywgJ0dycGNDTVNfU01BTExfUFJPR1JBTScpO1xuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICflsI/nqIvluo8nKTsgXG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3dlYnNpdGVEQicsICdzcGVzaGZjJyk7ICAgXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlID09IDE1KSB7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2dycGMnLCAnR3JwY0NNU19TTUFMTF9QUk9HUkFNJyk7XG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ1NORUNfRU5WJywgJ+Wwj+eoi+W6j3B2Jyk7IFxuICAgICAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd3ZWJzaXRlREInLCAnc3BwdicpOyAgIFxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIGNvbGxhcHNlZFNpZGVyKCkge1xuICAgICAgICAgICAgdGhpcy4kcmVmcy5zaWRlMS50b2dnbGVDb2xsYXBzZSgpO1xuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2VIcmVmKG5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG5hbWUpXG4gICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlTmFtZScsIG5hbWUpOy8v5q+P5qyh5YiH5o2i5bem5L6n6I+c5Y2V5qCP5ZCO5bCGYWN0aXZlTmFtZeeahOWAvOWtmOWcqHNlc3Npb25TdG9yYWdl6YeMXG4gICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYnJlYWRDcnVtYkl0ZW0nLCBldmVudC50YXJnZXQuaW5uZXJUZXh0KTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlQ2xpY2tVc2VyRHJvcGRvd24obmFtZSkge1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdvd25TcGFjZScpIHtcbiAgICAgICAgICAgICAgICAvLyB1dGlsLm9wZW5OZXdQYWdlKHRoaXMsICdvd25zcGFjZV9pbmRleCcpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICAvLyAgICAgbmFtZTogJ293bnNwYWNlX2luZGV4J1xuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnY21zTWFuYWdlJykge1xuICAgICAgICAgICAgICAgIC8vIOi3s+i9rOWIsOezu+e7n+e9keermeeuoeeQhumhtemdolxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9DTVNtYW5hZ2UnO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdicmVhZENydW1iSXRlbScsIGV2ZW50LnRhcmdldC5pbm5lclRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbG9naW5vdXQnKSB7XG4gICAgICAgICAgICAgICAgLy8g6YCA5Ye655m75b2VXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2xvZ2luJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy5Vc2VyTmFtZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdVc2VyTmFtZScpO1xuICAgICAgICBjb25zdCBhY3RpdmVfbmFtZSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVOYW1lJykgfHwgJyc7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdhY3RpdmVfbmFtZSoqKioqKionLCBhY3RpdmVfbmFtZSlcbiAgICAgICAgbGV0IGJyZWRfY3J1bWJfaXRlbSA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLlJvbGVDb2RlID09PSAnSkFQQU5FU0UnKSB7XG4gICAgICAgICAgICBicmVkX2NydW1iX2l0ZW0gPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYnJlYWRDcnVtYkl0ZW0nKSB8fCAn5pel5pys6Kqe57+76Kiz44Gu5YaF5a655qyEJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWRfY3J1bWJfaXRlbSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdicmVhZENydW1iSXRlbScpIHx8ICfkuLvoj5zljZUnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVOYW1lID0gYWN0aXZlX25hbWU7XG4gICAgICAgIHRoaXMuYnJlYWRDcnVtYkl0ZW0gPSBicmVkX2NydW1iX2l0ZW07XG5cbiAgICB9LFxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIGlmICghd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3N5c3RlbV9tb2RlbCcpKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnc3lzdGVtX21vZGVsJywgJ3B2MTYnKTtcbiAgICAgICAgfVxuICAgICAgICBWdWUuc2V0KHRoaXMsICdzeXN0ZW1fbW9kZWwnLCB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc3lzdGVtX21vZGVsJykgfHwgJ3B2MTYnKTtcbiAgICAgICAgVnVlLnNldCh0aGlzLCAnY3VycmVudEJhY2tDb2xvcicsIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50QmFja0NvbG9yJykgfHwgJ3BhbGV2aW9sZXRyZWQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKDMzMzMsdGhpcy5zeXN0ZW1fbW9kZWwpO1xuXG4gICAgICAgIC8vIGlmICghd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ1NORUNfRU5WJykpIHtcbiAgICAgICAgLy8gICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdTTkVDX0VOVicsICdQVjE3Jyk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyDku45zZXNzaW9uU3RvcmFnZemHjOiOt+WPlue9keermeWIl+ihqOaVsOaNrlxuICAgICAgICBsZXQgd2VibGlzdCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdXZWJTZXRMaXN0Jyk7XG4gICAgICAgIGlmKHdlYmxpc3Qpe1xuICAgICAgICAgICAgdGhpcy5XZWJTZXRMaXN0ID0gSlNPTi5wYXJzZSh3ZWJsaXN0KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDIyMix0aGlzLldlYlNldExpc3QpO1xuICAgICAgICB9XG4gICAgICAgIFxuXG4gICAgICAgIHZhciBSb2xlQ29kZUxpc3QgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnUm9sZUNvZGVMaXN0Jyk7XG4gICAgICAgIFJvbGVDb2RlTGlzdCA9IFJvbGVDb2RlTGlzdC5zcGxpdCgnLCcpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnUm9sZUNvZGVMaXN0JyxSb2xlQ29kZUxpc3QpO1xuICAgICAgICBSb2xlQ29kZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnQScgfHwgaXRlbSA9PT0gXCJJVEhHXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dNZW51MSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDlt7Topb/mtYvor5XkuJrliqHlkZjvvIzlj6rog73pooTop4hQVuW3tOilv1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICdZWScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTd2l0Y2hTeXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnc3lzdGVtX21vZGVsJywgJ2luZG8nKTtcbiAgICAgICAgICAgICAgICAvLyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZ3JwYycsICdHcnBjQ01TX0lORE8nKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnU05FQ19FTlYnLCAnSU5ETycpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdsb2dvX1NZU1RFTScsICcvaW1hZ2VzL3NuZWNfbG9nby5zdmcnKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnbG9nb19TWVNURU1fc20nLCAnL2ltYWdlcy9zbmVjX2xvZ29fc20uc3ZnJyk7XG4gICAgICAgICAgICAgICAgVnVlLnNldCh0aGlzLCAnc3lzdGVtX21vZGVsJywgJ2luZG8nKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY3VycmVudEJhY2tDb2xvcicsICdyZ2IoMjU1LCAyMTEsIDE1NSknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtID09PSAnSkFQQU5FU0UnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5Sb2xlQ29kZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5zaG93U3dpdGNoU3lzJywgdGhpcy5zaG93U3dpdGNoU3lzKVxuXG4gICAgICAgIHZhciBQdXJ2aWV3Q29kZXMgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnUHVydmlld0NvZGVzJyk7XG4gICAgICAgIFB1cnZpZXdDb2RlcyA9IEpTT04ucGFyc2UoUHVydmlld0NvZGVzKTtcbiAgICAgICAgLy8gbGV0IHN5c01vZGVsID0gdGhpcy5zeXN0ZW1fbW9kZWw7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdzeXNNb2RlbCcsIHN5c01vZGVsKTtcbiAgICAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmKGl0ZW0uU291cmNlQ29kZSA9PSB0aGlzLnN5c3RlbV9tb2RlbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgdGhpcy5tZW51TGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIC8vIGlmIChzeXNNb2RlbCA9PT0gMCkge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdQVicpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcblxuICAgICAgICAvLyB9IGVsc2UgaWYgKHN5c01vZGVsID09PSAxKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0ID0gW107XG4gICAgICAgIC8vICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZihpdGVtLlNvdXJjZUNvZGUgPT0gJ0VT5rWm5LicJyl7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubWVudUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubWVudUxpc3QpO1xuICAgICAgICAvLyAgICAgLy8g5a+55paw5pWw57uE5oyJU29ydOi/m+ihjOS7juWkp+WIsOWwj+aOkuW6j1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGEuU29ydCAtIGIuU29ydDtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKHN5c01vZGVsID09PSAyKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0ID0gW107XG4gICAgICAgIC8vICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZihpdGVtLlNvdXJjZUNvZGUgPT0gJ0hGQ+a1puS4nCcpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChzeXNNb2RlbCA9PT0gMykge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdQVua1puS4nCcpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChzeXNNb2RlbCA9PT0gNCkge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdFU+a1puS4nDInKXtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vICAgICAvLyDlr7nmlrDmlbDnu4TmjIlTb3J06L+b6KGM5LuO5aSn5Yiw5bCP5o6S5bqPXG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoc3lzTW9kZWwgPT09IDUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3QgPSBbXTtcbiAgICAgICAgLy8gICAgIFB1cnZpZXdDb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmKGl0ZW0uU291cmNlQ29kZSA9PSAnSEZD5rWm5LicMicpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChzeXNNb2RlbCA9PT0gNikge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdORVYnKXtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vICAgICAvLyDlr7nmlrDmlbDnu4TmjIlTb3J06L+b6KGM5LuO5aSn5Yiw5bCP5o6S5bqPXG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoc3lzTW9kZWwgPT09IDcpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3QgPSBbXTtcbiAgICAgICAgLy8gICAgIFB1cnZpZXdDb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmKGl0ZW0uU291cmNlQ29kZSA9PSAnSEZDREwnKXtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vICAgICAvLyDlr7nmlrDmlbDnu4TmjIlTb3J06L+b6KGM5LuO5aSn5Yiw5bCP5o6S5bqPXG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoc3lzTW9kZWwgPT09IDgpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3QgPSBbXTtcbiAgICAgICAgLy8gICAgIFB1cnZpZXdDb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmKGl0ZW0uU291cmNlQ29kZSA9PSAnSEVBJyl7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubWVudUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubWVudUxpc3QpO1xuICAgICAgICAvLyAgICAgLy8g5a+55paw5pWw57uE5oyJU29ydOi/m+ihjOS7juWkp+WIsOWwj+aOkuW6j1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGEuU29ydCAtIGIuU29ydDtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKHN5c01vZGVsID09PSA5KSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0ID0gW107XG4gICAgICAgIC8vICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZihpdGVtLlNvdXJjZUNvZGUgPT0gJ0ZPTExPV01FJyl7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubWVudUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubWVudUxpc3QpO1xuICAgICAgICAvLyAgICAgLy8g5a+55paw5pWw57uE5oyJU29ydOi/m+ihjOS7juWkp+WIsOWwj+aOkuW6j1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGEuU29ydCAtIGIuU29ydDtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKHN5c01vZGVsID09PSAxMCkge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdHR0VUJyl7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubWVudUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubWVudUxpc3QpO1xuICAgICAgICAvLyAgICAgLy8g5a+55paw5pWw57uE5oyJU29ydOi/m+ihjOS7juWkp+WIsOWwj+aOkuW6j1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGEuU29ydCAtIGIuU29ydDtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9IGVsc2UgaWYgKHN5c01vZGVsID09PSAxMSkge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICdQVlMnKXtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vICAgICAvLyDlr7nmlrDmlbDnu4TmjIlTb3J06L+b6KGM5LuO5aSn5Yiw5bCP5o6S5bqPXG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoc3lzTW9kZWwgPT09IDEyKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0ID0gW107XG4gICAgICAgIC8vICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZihpdGVtLlNvdXJjZUNvZGUgPT0gJ05FSUFBUCcpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIGlmIChzeXNNb2RlbCA9PT0gMTMpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3QgPSBbXTtcbiAgICAgICAgLy8gICAgIFB1cnZpZXdDb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmKGl0ZW0uU291cmNlQ29kZSA9PSAnQVBWSUEnKXtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tZW51TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tZW51TGlzdCk7XG4gICAgICAgIC8vICAgICAvLyDlr7nmlrDmlbDnu4TmjIlTb3J06L+b6KGM5LuO5aSn5Yiw5bCP5o6S5bqPXG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gYS5Tb3J0IC0gYi5Tb3J0O1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoc3lzTW9kZWwgPT09IDE0KSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1lbnVMaXN0ID0gW107XG4gICAgICAgIC8vICAgICBQdXJ2aWV3Q29kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgLy8gICAgICAgICBpZihpdGVtLlNvdXJjZUNvZGUgPT0gJ+Wwj+eoi+W6jycpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfWVsc2UgaWYgKHN5c01vZGVsID09PSAxNSkge1xuICAgICAgICAvLyAgICAgdGhpcy5tZW51TGlzdCA9IFtdO1xuICAgICAgICAvLyAgICAgUHVydmlld0NvZGVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYoaXRlbS5Tb3VyY2VDb2RlID09ICflsI/nqIvluo9wdicpe1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1lbnVMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVMaXN0KTtcbiAgICAgICAgLy8gICAgIC8vIOWvueaWsOaVsOe7hOaMiVNvcnTov5vooYzku47lpKfliLDlsI/mjpLluo9cbiAgICAgICAgLy8gICAgIHRoaXMubWVudUxpc3Quc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBhLlNvcnQgLSBiLlNvcnQ7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuICAiLCI8dGVtcGxhdGU+XG4gICAgPGRpdj5cbiAgICAgICAgPGRpdiB2LWlmPSchY3VycmVudEltZyc+XG4gICAgICAgICAgICA8dGVtcGxhdGU+e3sgJHQoJ+WbvueJh+WKoOi9veS4re+8jOivt+eojeWAmS4uLicpIH19PC90ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZS12ZXJpZnlcIiA6c3R5bGU9XCJ7IHdpZHRoOiB3ICsgJ3B4JyB9XCIgaWQ9XCJzbGlkZVZlcmlmeVwiIG9uc2VsZWN0c3RhcnQ9XCJyZXR1cm4gZmFsc2U7XCI+XG4gICAgICAgICAgICA8IS0tIOWbvueJh+WKoOi9vemBruiUvee9qSAtLT5cbiAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwieyAnc2xpZGVyLXZlcmlmeS1sb2FkaW5nJzogbG9hZEJsb2NrIH1cIj48L2Rpdj5cbiAgICAgICAgICAgIDxjYW52YXMgOndpZHRoPVwid1wiIDpoZWlnaHQ9XCJoXCIgcmVmPVwiY2FudmFzXCI+PC9jYW52YXM+XG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJzaG93XCIgQGNsaWNrPVwicmVmcmVzaFNsaWRlclwiIGNsYXNzPVwic2xpZGUtdmVyaWZ5LXJlZnJlc2gtaWNvblwiPjwvZGl2PlxuICAgICAgICAgICAgPGNhbnZhcyA6d2lkdGg9XCJ3XCIgOmhlaWdodD1cImhcIiByZWY9XCJibG9ja1wiIGNsYXNzPVwic2xpZGUtdmVyaWZ5LWJsb2NrXCI+PC9jYW52YXM+XG4gICAgICAgICAgICA8IS0tIGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGlkZS12ZXJpZnktc2xpZGVyXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7ICdjb250YWluZXItYWN0aXZlJzogY29udGFpbmVyQWN0aXZlLCAnY29udGFpbmVyLXN1Y2Nlc3MnOiBjb250YWluZXJTdWNjZXNzLCAnY29udGFpbmVyLWZhaWwnOiBjb250YWluZXJGYWlsIH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrXCIgOnN0eWxlPVwieyB3aWR0aDogc2xpZGVyTWFza1dpZHRoIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBzbGlkZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgQG1vdXNlZG93bj1cInNsaWRlckRvd25cIiBAdG91Y2hzdGFydD1cInRvdWNoU3RhcnRFdmVudFwiIEB0b3VjaG1vdmU9XCJ0b3VjaE1vdmVFdmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAdG91Y2hlbmQ9XCJ0b3VjaEVuZEV2ZW50XCIgY2xhc3M9XCJzbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbVwiIDpzdHlsZT1cInsgbGVmdDogc2xpZGVyTGVmdCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrLWl0ZW0taWNvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlLXZlcmlmeS1zbGlkZXItdGV4dFwiPnt7IHNsaWRlclRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuY29uc3QgdHJhbnMgPSByZXF1aXJlKCcuL3NsaWRlclZlcmlmeS5qc29uJylcblxuYXhpb3MuZGVmYXVsdHMuaGVhZGVycy5wb3N0WydDb250ZW50LVR5cGUnXSA9XG4gICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7XG5WdWUucHJvdG90eXBlLiRheGlvcyA9IGF4aW9zO1xuXG5jb25zdCBQSSA9IE1hdGguUEk7XG5cbmZ1bmN0aW9uIHN1bSh4LCB5KSB7XG4gICAgcmV0dXJuIHggKyB5XG59XG5cbmZ1bmN0aW9uIHNxdWFyZSh4KSB7XG4gICAgcmV0dXJuIHggKiB4XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1NsaWRlVmVyaWZ5JyxcbiAgICBwcm9wczoge1xuICAgICAgICAvLyBibG9jayBsZW5ndGhcbiAgICAgICAgbDoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgZGVmYXVsdDogNDIsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIGJsb2NrIHJhZGl1c1xuICAgICAgICByOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gY2FudmFzIHdpZHRoXG4gICAgICAgIHc6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIGRlZmF1bHQ6IDMxMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gY2FudmFzIGhlaWdodFxuICAgICAgICBoOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiAxNTUsXG4gICAgICAgIH0sXG4gICAgICAgIHNsaWRlclRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgICB9LFxuICAgICAgICBhY2N1cmFjeToge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgZGVmYXVsdDogNSwgLy8g6Iul5Li6IC0xIOWImeS4jei/m+ihjOacuuWZqOWIpOaWrVxuICAgICAgICB9LFxuICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaW1nczoge1xuICAgICAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250YWluZXJBY3RpdmU6IGZhbHNlLCAvLyBjb250YWluZXIgYWN0aXZlIGNsYXNzXG4gICAgICAgICAgICBjb250YWluZXJTdWNjZXNzOiBmYWxzZSwgLy8gY29udGFpbmVyIHN1Y2Nlc3MgY2xhc3NcbiAgICAgICAgICAgIGNvbnRhaW5lckZhaWw6IGZhbHNlLCAvLyBjb250YWluZXIgZmFpbCBjbGFzc1xuICAgICAgICAgICAgY2FudmFzQ3R4OiBudWxsLFxuICAgICAgICAgICAgYmxvY2tDdHg6IG51bGwsXG4gICAgICAgICAgICBibG9jazogbnVsbCxcbiAgICAgICAgICAgIGJsb2NrX3g6IHVuZGVmaW5lZCwgLy8gY29udGFpbmVyIHJhbmRvbSBwb3NpdGlvblxuICAgICAgICAgICAgYmxvY2tfeTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgTDogdGhpcy5sICsgdGhpcy5yICogMiArIDMsIC8vIGJsb2NrIHJlYWwgbGVuZ2h0XG4gICAgICAgICAgICBpbWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yaWdpblg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9yaWdpblk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGlzTW91c2VEb3duOiBmYWxzZSxcbiAgICAgICAgICAgIHRyYWlsOiBbXSxcbiAgICAgICAgICAgIHNsaWRlckxlZnQ6IDAsIC8vIGJsb2NrIHJpZ2h0IG9mZnNldFxuICAgICAgICAgICAgc2xpZGVyTWFza1dpZHRoOiAwLCAvLyBtYXNrIHdpZHRoLFxuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsIC8vIEJ1ZyBGaXhlcyDkv67lpI3kuobpqozor4HmiJDlip/lkI7ov5jog73mu5HliqhcbiAgICAgICAgICAgIGxvYWRCbG9jazogdHJ1ZSwgLy8gRmVhdHVyZXMg5Zu+54mH5Yqg6L295o+Q56S677yM6Ziy5q2i5Zu+54mH5rKh5Yqg6L295a6M5bCx5byA5aeL6aqM6K+BXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICBzbGlkZXJJbWdzOiBbXSxcbiAgICAgICAgICAgIGN1cnJlbnRJbWc6ICcnLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIC8vIOiuvue9ruWumuaXtuWZqOebkea1i+aOpeWPo+ivt+axguWbvueJh+WujOaIkOaXtuWGjeW8gOWni+WIneWni+WMluaLluWKqOeUu+mdolxuICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgICAgIGxldCBpbnR2ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coMSlcbiAgICAgICAgICAgIGlmICh0aGF0LmN1cnJlbnRJbWcpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygyKVxuICAgICAgICAgICAgICAgIHRoYXQuaW5pdCgpO1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50dik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDYwMCk7XG5cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaW5pdCgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERvbSgpXG4gICAgICAgICAgICB0aGlzLmluaXRJbWcoKVxuICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdERvbSgpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2sgPSB0aGlzLiRyZWZzLmJsb2NrO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNDdHggPSB0aGlzLiRyZWZzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXG4gICAgICAgICAgICB0aGlzLmJsb2NrQ3R4ID0gdGhpcy5ibG9jay5nZXRDb250ZXh0KCcyZCcpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRJbWcoKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmNyZWF0ZUltZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgICAgICAgICAvLyDlm77niYfliqDovb3lrozlhbPpl63pga7olL3nvalcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3QmxvY2soKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0N0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB0aGlzLncsIHRoaXMuaClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja0N0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB0aGlzLncsIHRoaXMuaClcbiAgICAgICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrX3g6IHgsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja195OiB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcixcbiAgICAgICAgICAgICAgICAgICAgICAgIExcbiAgICAgICAgICAgICAgICAgICAgfSA9IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgbGV0IF95ID0geSAtIHIgKiAyIC0gMVxuICAgICAgICAgICAgICAgICAgICBsZXQgSW1hZ2VEYXRhID0gdGhpcy5ibG9ja0N0eC5nZXRJbWFnZURhdGEoeCwgX3ksIEwsIEwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrLndpZHRoID0gTDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja0N0eC5wdXRJbWFnZURhdGEoSW1hZ2VEYXRhLCAwLCBfeSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWc7XG4gICAgICAgIH0sXG4gICAgICAgIGRyYXdCbG9jaygpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfeCA9IHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSh0aGlzLkwgKyAxMCwgdGhpcy53IC0gKHRoaXMuTCArIDEwKSlcbiAgICAgICAgICAgIHRoaXMuYmxvY2tfeSA9IHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgxMCArIHRoaXMuciAqIDIsIHRoaXMuaCAtICh0aGlzLkwgKyAxMCkpXG4gICAgICAgICAgICB0aGlzLmRyYXcodGhpcy5jYW52YXNDdHgsIHRoaXMuYmxvY2tfeCwgdGhpcy5ibG9ja195LCAnZmlsbCcpXG4gICAgICAgICAgICB0aGlzLmRyYXcodGhpcy5ibG9ja0N0eCwgdGhpcy5ibG9ja194LCB0aGlzLmJsb2NrX3ksICdjbGlwJylcbiAgICAgICAgfSxcbiAgICAgICAgZHJhdyhjdHgsIHgsIHksIG9wZXJhdGlvbikge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICBsLFxuICAgICAgICAgICAgICAgIHJcbiAgICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpXG4gICAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpXG4gICAgICAgICAgICBjdHguYXJjKHggKyBsIC8gMiwgeSAtIHIgKyAyLCByLCAwLjcyICogUEksIDIuMjYgKiBQSSlcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCArIGwsIHkpXG4gICAgICAgICAgICBjdHguYXJjKHggKyBsICsgciAtIDIsIHkgKyBsIC8gMiwgciwgMS4yMSAqIFBJLCAyLjc4ICogUEkpXG4gICAgICAgICAgICBjdHgubGluZVRvKHggKyBsLCB5ICsgbClcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSArIGwpXG4gICAgICAgICAgICBjdHguYXJjKHggKyByIC0gMiwgeSArIGwgLyAyLCByICsgMC40LCAyLjc2ICogUEksIDEuMjQgKiBQSSwgdHJ1ZSlcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSlcbiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAyXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSdcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknXG4gICAgICAgICAgICBjdHguc3Ryb2tlKClcbiAgICAgICAgICAgIGN0eFtvcGVyYXRpb25dKClcbiAgICAgICAgICAgIC8vIEJ1ZyBGaXhlcyDkv67lpI3kuobngavni5DlkoxpZeaYvuekuumXrumimFxuICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwiZGVzdGluYXRpb24tb3ZlclwiXG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlSW1nKG9ubG9hZCkge1xuXG4gICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9IFwiQW5vbnltb3VzXCI7XG4gICAgICAgICAgICBpbWcub25sb2FkID0gb25sb2FkO1xuICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltZykge1xuICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gdGhpcy5jdXJyZW50SW1nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltZykge1xuICAgICAgICAgICAgICAgIGltZy5zcmMgPSB0aGlzLmN1cnJlbnRJbWc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGltZztcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOmaj+acuueUn+aIkGltZyBzcmNcbiAgICAgICAgZ2V0UmFuZG9tSW1nKCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIHJlcXVpcmUoJy4uL2Fzc2V0cy9pbWcuanBnJylcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhYWEgJyx0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKSk7XG4gICAgICAgICAgICAvLyBjb25zdCBsZW4gPSB0aGlzLmltZ3MubGVuZ3RoO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGxlbiA+IDAgP1xuICAgICAgICAgICAgLy8gICB0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildIDpcbiAgICAgICAgICAgIC8vICAgJ2h0dHBzOi8vcGljc3VtLnBob3Rvcy8zMDAvMTUwLz9pbWFnZT0nICsgdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIDEwODQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuc2xpZGVySW1ncycsIHRoaXMuc2xpZGVySW1ncyk7XG4gICAgICAgICAgICBpZiAodGhpcy5zbGlkZXJJbWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJJbWdzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoXG4gICAgICAgIENoZWNrSW1nRXhpc3RzQXN5bmMoKSB7XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmltZ3MubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGltZ3VybCA9ICdodHRwczovL3BpY3N1bS5waG90b3MvMzAwLzE1MC8/aW1hZ2U9JyArIHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCAxMDg0KTtcbiAgICAgICAgICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEltZ09iaiA9IG5ldyBJbWFnZSgpOyAvL+WIpOaWreWbvueJh+aYr+WQpuWtmOWcqFxuICAgICAgICAgICAgICAgICAgICBJbWdPYmouc3JjID0gaW1ndXJsO1xuICAgICAgICAgICAgICAgICAgICBJbWdPYmoub25sb2FkID0gZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHN0ciA9ICflm77niYfliqDovb3lrozmiJAnXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGltZ3VybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW1nT2JqLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhhdC5pbWdzW3RoYXQuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoYXQuaW1nc1t0aGF0LmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgQ2hlY2tJbWdFeGlzdHMoKSB7XG4gICAgICAgICAgICAvLyB2YXIgSW1nT2JqID0gbmV3IEltYWdlKCk7IC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoICBcbiAgICAgICAgICAgIC8vIEltZ09iai5zcmMgPSBpbWd1cmw7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSW1nT2JqJyxJbWdPYmopOyAgXG4gICAgICAgICAgICAvLyAvL+WtmOWcqOWbvueJhyDosIPlh7rmnaXlvJXnlKhcbiAgICAgICAgICAgIC8vIGlmIChJbWdPYmouZmlsZVNpemUgPiAwIHx8IChJbWdPYmoud2lkdGggPiAwICYmIEltZ09iai5oZWlnaHQgPiAwKSkgeyAgXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5jdXJyZW50SW1nID0gaW1ndXJsO1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCd0aGlzLmN1cnJlbnRJbWcyMicsdGhpcy5jdXJyZW50SW1nKTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7IFxuICAgICAgICAgICAgLy8gICAgIC8vIOW9k+WJjeWbvueJh+S4jeWtmOWcqO+8jOiwg+eUqOacrOWcsOWbvueJhyDmr4/mrKHpmo/mnLrosIPlh7rkuIDlvKDlm77niYfmlL7liLDmlrDmlbDnu4Tph4wgXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5jdXJyZW50SW1nID0gdGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgIC8vIH0gICBcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuaW1ncy5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAvLyDlvZPliY3lm77niYfkuI3lrZjlnKjvvIzosIPnlKjmnKzlnLDlm77niYcg5q+P5qyh6ZqP5py66LCD5Ye65LiA5byg5Zu+54mH5pS+5Yiw5paw5pWw57uE6YeMIFxuICAgICAgICAgICAgdGhhdC5jdXJyZW50SW1nID0gdGhhdC5pbWdzW3RoYXQuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgIC8vIHRoYXQuQ2hlY2tJbWdFeGlzdHNBc3luYygpLnRoZW4oKHJlcyk9PntcbiAgICAgICAgICAgIC8vICAgICAvLyBjb25zb2xlLmxvZygnMTI1JyxyZXMpXG4gICAgICAgICAgICAvLyAgICAgdGhhdC5jdXJyZW50SW1nID0gcmVzO1xuICAgICAgICAgICAgLy8gfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgIC8vICAgICAvLyDlvZPliY3lm77niYfkuI3lrZjlnKjvvIzosIPnlKjmnKzlnLDlm77niYcg5q+P5qyh6ZqP5py66LCD5Ye65LiA5byg5Zu+54mH5pS+5Yiw5paw5pWw57uE6YeMIFxuICAgICAgICAgICAgLy8gICAgIHRoYXQuY3VycmVudEltZyA9IHRoYXQuaW1nc1t0aGF0LmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV07XG4gICAgICAgICAgICAvLyB9KTsgICBcblxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIOiOt+WPluesrOS4ieaWueW6k+WbvueJh++8jOWmguaenOS4jeWtmOWcqO+8jOWImeiwg+eUqOacrOWcsOWbvueJh1xuICAgICAgICBnZXRJbWdGcm9tUGljcygpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVySW1ncyA9IFtdOy8v6buY6K6k572u56m6XG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmltZ3MubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHBpY3NyYyA9ICdodHRwczovL3BpY3N1bS5waG90b3MvMzAwLzE1MC8/aW1hZ2U9JyArIHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCAxMDg0KTtcblxuICAgICAgICAgICAgLy8g6L+Z6YeM6ZyA6KaB6K+35rGC5Zu+54mH5Zyw5Z2A77yM5Yik5pat5Zu+54mH5piv5ZCm5a2Y5Zyo5ZCO5YaN5Yaz5a6a6LCD5LiN6LCD56ys5LiJ5pa55Zu+5bqT55qE5Zu+54mH5Ye65p2l5pi+56S6XG4gICAgICAgICAgICByZXR1cm4gYXhpb3Moe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFwieC1jc3JmLXRva2VuXCI6Q29va2llcy5nZXQoJ2NzcmZUb2tlbicpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB1cmw6IHBpY3NyYyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICAgICAgfSkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzJyxyZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyDlm77niYflrZjlnKjvvIzosIPlh7rmnaXlvJXnlKhcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXJJbWdzLnB1c2gocGljc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc2xpZGVySW1ncycsdGhpcy5zbGlkZXJJbWdzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW1nID0gcGljc3JjO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5jdXJyZW50SW1nMTEnLCB0aGlzLmN1cnJlbnRJbWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjeWbvueJh+S4jeWtmOWcqO+8jOiwg+eUqOacrOWcsOWbvueJhyDmr4/mrKHpmo/mnLrosIPlh7rkuIDlvKDlm77niYfmlL7liLDmlrDmlbDnu4Tph4xcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXJJbWdzLnB1c2godGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnNsaWRlckltZ3MnLHRoaXMuc2xpZGVySW1ncyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWcgPSB0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICAgICAgICAgIC8vIOW9k+WJjeWbvueJh+S4jeWtmOWcqO+8jOiwg+eUqOacrOWcsOWbvueJhyDmr4/mrKHpmo/mnLrosIPlh7rkuIDlvKDlm77niYfmlL7liLDmlrDmlbDnu4Tph4xcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNsaWRlckltZ3MucHVzaCh0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5zbGlkZXJJbWdzJyx0aGlzLnNsaWRlckltZ3MpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEltZyA9IHRoaXMuaW1nc1t0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRSYW5kb21OdW1iZXJCeVJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyYW5kb20gJyxNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0KSArIHN0YXJ0KTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAoZW5kIC0gc3RhcnQpKSArIHN0YXJ0XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hTbGlkZXIoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdyZWZyZXNoJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNsaWRlckRvd24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Y2Nlc3MpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblkgPSBldmVudC5jbGllbnRZO1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICsgbmV3IERhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG91Y2hTdGFydEV2ZW50KGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Y2Nlc3MpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVg7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblkgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICsgbmV3IERhdGUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTW91c2VEb3duKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgbW92ZVggPSBlLmNsaWVudFggLSB0aGlzLm9yaWdpblg7XG4gICAgICAgICAgICAgICAgY29uc3QgbW92ZVkgPSBlLmNsaWVudFkgLSB0aGlzLm9yaWdpblk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVYIDwgMCB8fCBtb3ZlWCArIDM4ID49IHRoaXMudykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVyTGVmdCA9IG1vdmVYICsgJ3B4JztcbiAgICAgICAgICAgICAgICBsZXQgYmxvY2tMZWZ0ID0gKHRoaXMudyAtIDQwIC0gMjApIC8gKHRoaXMudyAtIDQwKSAqIG1vdmVYO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2suc3R5bGUubGVmdCA9IGJsb2NrTGVmdCArICdweCc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IHRydWU7IC8vIGFkZCBhY3RpdmVcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlck1hc2tXaWR0aCA9IG1vdmVYICsgJ3B4JztcbiAgICAgICAgICAgICAgICB0aGlzLnRyYWlsLnB1c2gobW92ZVkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFggPT09IHRoaXMub3JpZ2luWCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyQWN0aXZlID0gZmFsc2U7IC8vIHJlbW92ZSBhY3RpdmVcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICsgbmV3IERhdGUoKSAtIHRoaXMudGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICBzcGxpY2VkLFxuICAgICAgICAgICAgICAgICAgICBUdXJpbmdUZXN0XG4gICAgICAgICAgICAgICAgfSA9IHRoaXMudmVyaWZ5KCk7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGljZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjdXJhY3kgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3N1Y2Nlc3MnLCB0aGlzLnRpbWVzdGFtcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFR1cmluZ1Rlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2NcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyU3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc3VjY2VzcycsIHRoaXMudGltZXN0YW1wKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJGYWlsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2FnYWluJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2ZhaWwnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIHRvdWNoTW92ZUV2ZW50KGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc01vdXNlRG93bikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbW92ZVggPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYIC0gdGhpcy5vcmlnaW5YO1xuICAgICAgICAgICAgY29uc3QgbW92ZVkgPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VZIC0gdGhpcy5vcmlnaW5ZO1xuICAgICAgICAgICAgaWYgKG1vdmVYIDwgMCB8fCBtb3ZlWCArIDM4ID49IHRoaXMudykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJMZWZ0ID0gbW92ZVggKyAncHgnO1xuICAgICAgICAgICAgbGV0IGJsb2NrTGVmdCA9ICh0aGlzLncgLSA0MCAtIDIwKSAvICh0aGlzLncgLSA0MCkgKiBtb3ZlWDtcbiAgICAgICAgICAgIHRoaXMuYmxvY2suc3R5bGUubGVmdCA9IGJsb2NrTGVmdCArICdweCc7XG5cbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyTWFza1dpZHRoID0gbW92ZVggKyAncHgnO1xuICAgICAgICAgICAgdGhpcy50cmFpbC5wdXNoKG1vdmVZKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG91Y2hFbmRFdmVudChlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCA9PT0gdGhpcy5vcmlnaW5YKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSArIG5ldyBEYXRlKCkgLSB0aGlzLnRpbWVzdGFtcDtcblxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHNwbGljZWQsXG4gICAgICAgICAgICAgICAgVHVyaW5nVGVzdFxuICAgICAgICAgICAgfSA9IHRoaXMudmVyaWZ5KCk7XG4gICAgICAgICAgICBpZiAoc3BsaWNlZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjY3VyYWN5ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdzdWNjZXNzJywgdGhpcy50aW1lc3RhbXApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChUdXJpbmdUZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN1Y2NcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJTdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc3VjY2VzcycsIHRoaXMudGltZXN0YW1wKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2FnYWluJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnZmFpbCcpXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgICAgICAgICAgIH0sIDEwMDApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZlcmlmeSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMudHJhaWwgLy8gZHJhZyB5IG1vdmUgZGlzdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2UgPSBhcnIucmVkdWNlKHN1bSkgLyBhcnIubGVuZ3RoIC8vIGF2ZXJhZ2VcbiAgICAgICAgICAgIGNvbnN0IGRldmlhdGlvbnMgPSBhcnIubWFwKHggPT4geCAtIGF2ZXJhZ2UpIC8vIGRldmlhdGlvbiBhcnJheVxuICAgICAgICAgICAgY29uc3Qgc3RkZGV2ID0gTWF0aC5zcXJ0KGRldmlhdGlvbnMubWFwKHNxdWFyZSkucmVkdWNlKHN1bSkgLyBhcnIubGVuZ3RoKSAvLyBzdGFuZGFyZCBkZXZpYXRpb25cbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBwYXJzZUludCh0aGlzLmJsb2NrLnN0eWxlLmxlZnQpXG4gICAgICAgICAgICBjb25zdCBhY2N1cmFjeSA9IHRoaXMuYWNjdXJhY3kgPD0gMSA/IDEgOiB0aGlzLmFjY3VyYWN5ID4gMTAgPyAxMCA6IHRoaXMuYWNjdXJhY3k7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNwbGljZWQ6IE1hdGguYWJzKGxlZnQgLSB0aGlzLmJsb2NrX3gpIDw9IGFjY3VyYWN5LFxuICAgICAgICAgICAgICAgIFR1cmluZ1Rlc3Q6IGF2ZXJhZ2UgIT09IHN0ZGRldiwgLy8gZXF1YWwgPT4gbm90IHBlcnNvbiBvcGVyYXRlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzZXQoKSB7XG4gICAgICAgICAgICAvLyDmr4/mrKHph43nva7ml7bph43mlrDojrflj5blm77niYdcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEltZyA9ICcnO1xuICAgICAgICAgICAgLy8gdGhpcy5nZXRJbWdGcm9tUGljcygpO1xuICAgICAgICAgICAgLy/liKTmlq3lm77niYfmmK/lkKblrZjlnKhcbiAgICAgICAgICAgIHRoaXMuQ2hlY2tJbWdFeGlzdHMoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckZhaWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyTGVmdCA9IDA7XG4gICAgICAgICAgICB0aGlzLmJsb2NrLnN0eWxlLmxlZnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJNYXNrV2lkdGggPSAwO1xuICAgICAgICAgICAgLy8gY2FudmFzXG4gICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICAgIHcsXG4gICAgICAgICAgICAgICAgaFxuICAgICAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNhbnZhc0N0eC5jbGVhclJlY3QoMCwgMCwgdywgaClcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpXG4gICAgICAgICAgICB0aGlzLmJsb2NrLndpZHRoID0gd1xuXG4gICAgICAgICAgICAvLyAvLyBnZW5lcmF0ZSBpbWdcbiAgICAgICAgICAgIC8vIHRoaXMuaW1nLnNyYyA9IHRoaXMuZ2V0UmFuZG9tSW1nKCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5pbWcuc3JjICcsdGhpcy5pbWcuc3JjKTtcbiAgICAgICAgICAgIC8vIOiuvue9ruWumuaXtuWZqOebkea1i+aOpeWPo+ivt+axguWbvueJh+WujOaIkOaXtuWGjeW8gOWni+WIneWni+WMluaLluWKqOeUu+mdolxuICAgICAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgbGV0IGludHYgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coMSlcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5jdXJyZW50SW1nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKDIpXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuaW1nLnNyYyA9IHRoYXQuY3VycmVudEltZztcbiAgICAgICAgICAgICAgICAgICAgdGhhdC4kZW1pdCgnZnVsZmlsbGVkJylcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnR2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA2MDApO1xuXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBjcmVhdGVkKCkge1xuICAgICAgICB0aGlzLiRpMThuLm1lcmdlTG9jYWxlTWVzc2FnZShcImVuXCIsIHRyYW5zLmVuKTtcbiAgICAgICAgdGhpcy4kaTE4bi5tZXJnZUxvY2FsZU1lc3NhZ2UoXCJ6aFwiLCB0cmFucy56aCk7XG4gICAgICAgIC8vIC8vIOiOt+WPluesrOS4ieaWueW6k+WbvueJh++8jOWmguaenOS4jeWtmOWcqO+8jOWImeiwg+eUqOacrOWcsOWbvueJh1xuICAgICAgICAvLyB0aGlzLmdldEltZ0Zyb21QaWNzKCk7XG4gICAgICAgIC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoXG4gICAgICAgIHRoaXMuQ2hlY2tJbWdFeGlzdHMoKTtcbiAgICB9XG59XG48L3NjcmlwdD5cbjxzdHlsZSBzY29wZWQ+XG4uc2xpZGUtdmVyaWZ5IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi8qIOWbvueJh+WKoOi9veagt+W8jyAqL1xuLnNsaWRlci12ZXJpZnktbG9hZGluZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgei1pbmRleDogOTk5O1xuICAgIGFuaW1hdGlvbjogbG9hZGluZyAxLjVzIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGxvYWRpbmcge1xuICAgIDAlIHtcbiAgICAgICAgb3BhY2l0eTogLjc7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICAgIG9wYWNpdHk6IDk7XG4gICAgfVxufVxuXG4uc2xpZGUtdmVyaWZ5LWJsb2NrIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDBcbn1cblxuLnNsaWRlLXZlcmlmeS1yZWZyZXNoLWljb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgd2lkdGg6IDM0cHg7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvaWNvbl9saWdodC5wbmdcIikgMCAtNDM3cHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAzNHB4IDQ3MXB4XG59XG5cbi5zbGlkZS12ZXJpZnktc2xpZGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNDBweDtcbiAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgIGJhY2tncm91bmQ6ICNmN2Y5ZmE7XG4gICAgY29sb3I6ICM0NTQ5NGM7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTdlYlxufVxuXG4uc2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlcjogMCBzb2xpZCAjMTk5MUZBO1xuICAgIGJhY2tncm91bmQ6ICNEMUU5RkVcbn1cblxuLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzIGxpbmVhclxufVxuXG4uc2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrLWl0ZW06aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICMxOTkxRkFcbn1cblxuLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtOmhvdmVyIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xM3B4XG59XG5cbi5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxNXB4O1xuICAgIGxlZnQ6IDEzcHg7XG4gICAgd2lkdGg6IDE0cHg7XG4gICAgaGVpZ2h0OiAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9pY29uX2xpZ2h0LnBuZ1wiKSAwIC0yNnB4O1xuICAgIGJhY2tncm91bmQtc2l6ZTogMzRweCA0NzFweFxufVxuXG4uY29udGFpbmVyLWFjdGl2ZSAuc2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrLWl0ZW0ge1xuICAgIGhlaWdodDogMzhweDtcbiAgICB0b3A6IC0xcHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIzE5OTFGQTtcbn1cblxuLmNvbnRhaW5lci1hY3RpdmUgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzayB7XG4gICAgaGVpZ2h0OiAzOHB4O1xuICAgIGJvcmRlci13aWR0aDogMXB4O1xufVxuXG4uY29udGFpbmVyLXN1Y2Nlc3MgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtIHtcbiAgICBoZWlnaHQ6IDM4cHg7XG4gICAgdG9wOiAtMXB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM1MkNDQkE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzUyQ0NCQSAhaW1wb3J0YW50O1xufVxuXG4uY29udGFpbmVyLXN1Y2Nlc3MgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzayB7XG4gICAgaGVpZ2h0OiAzOHB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM1MkNDQkE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0QyRjRFRjtcbn1cblxuLmNvbnRhaW5lci1zdWNjZXNzIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAgIWltcG9ydGFudDtcbn1cblxuLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbSB7XG4gICAgaGVpZ2h0OiAzOHB4O1xuICAgIHRvcDogLTFweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZjU3YTdhO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmNTdhN2EgIWltcG9ydGFudDtcbn1cblxuLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2sge1xuICAgIGhlaWdodDogMzhweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZjU3YTdhO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmY2UxZTE7XG59XG5cbi5jb250YWluZXItZmFpbCAuc2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrLWl0ZW0taWNvbiB7XG4gICAgdG9wOiAxNHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTgycHggIWltcG9ydGFudDtcbn1cblxuLmNvbnRhaW5lci1hY3RpdmUgLnNsaWRlLXZlcmlmeS1zbGlkZXItdGV4dCxcbi5jb250YWluZXItc3VjY2VzcyAuc2xpZGUtdmVyaWZ5LXNsaWRlci10ZXh0LFxuLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLXRleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPCEtLSDmi5bliqjnu4Tku7boh6rlrprkuYnlsIHoo4UgIGJ5OueOi+eHleWNlyAtLT5cbjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwicHVibGljU2xpZGVyVmVyaWZ5XCI+XG4gICAgICAgIDxTbGlkZVZlcmlmeSBjbGFzcz1cInNsaWRlVmVyXCIgcmVmPVwic2xpZGVibG9ja1wiIDp3PScyNjUnIDppbWdzPVwiaW1nc1wiIDpzbGlkZXItdGV4dD0nc2xpZGVyVGV4dCcgOmFjY3VyYWN5PVwiYWNjdXJhY3lcIlxuICAgICAgICAgICAgQHN1Y2Nlc3M9XCJvblN1Y2Nlc3NcIiBAYWdhaW49XCJvbkFnYWluXCIgQGZ1bGZpbGxlZD1cIm9uRnVsZmlsbGVkXCIgQGZhaWw9XCJvbkZhaWxcIiBAcmVmcmVzaD1cIm9uUmVmcmVzaFwiPlxuICAgICAgICA8L1NsaWRlVmVyaWZ5PlxuICAgIDwhLS0gPGRpdj57e21zZ319PC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIEBjbGljaz1cImhhbmRsZUNsaWNrXCI+5Zyo54i257uE5Lu25Y+v5Lul54K55oiR5Yi35paw5ZOmPC9idXR0b24+IC0tPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBTbGlkZVZlcmlmeSBmcm9tICcuL2NvbXBvbmVudHMvc2xpZGVyVmVyaWZ5LnZ1ZSc7XG5pbXBvcnQgaW1nMCBmcm9tICcuL2Fzc2V0cy9pbWcuanBnJztcbmltcG9ydCBpbWcxIGZyb20gJy4vYXNzZXRzL2ltZzEuanBnJztcbmltcG9ydCBpbWcyIGZyb20gJy4vYXNzZXRzL2ltZzIuanBnJztcbmltcG9ydCBpbWczIGZyb20gJy4vYXNzZXRzL2ltZzMuanBnJztcbmltcG9ydCBpbWc0IGZyb20gJy4vYXNzZXRzL2ltZzQuanBnJztcbmltcG9ydCBpbWc1IGZyb20gJy4vYXNzZXRzL2ltZzUuanBnJztcbmltcG9ydCBpbWc2IGZyb20gJy4vYXNzZXRzL2ltZzYuanBnJztcbmltcG9ydCBpbWc3IGZyb20gJy4vYXNzZXRzL2ltZzcuanBnJztcbmltcG9ydCBpbWc4IGZyb20gJy4vYXNzZXRzL2ltZzguanBnJztcbmltcG9ydCBpbWc5IGZyb20gJy4vYXNzZXRzL2ltZzkuanBnJztcbmNvbnN0IHRyYW5zID0gcmVxdWlyZSgnLi9wdWJsaWNTbGlkZXJWZXJpZnkuanNvbicpXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogJ1B1YmxpY1NsaWRlclZlcmlmeScsXG4gICAgY29tcG9uZW50czogeyBTbGlkZVZlcmlmeSB9LFxuICAgIHByb3BzOiBbJ3NsaWRlclRleHQnXSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXNnOiAnJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuJHQoJ+WQkeWPs+a7keWKqC0+JyksXG4gICAgICAgICAgICBpbWdzOiBbXG4gICAgICAgICAgICAgICAgaW1nMCxcbiAgICAgICAgICAgICAgICBpbWcxLFxuICAgICAgICAgICAgICAgIGltZzIsXG4gICAgICAgICAgICAgICAgaW1nMyxcbiAgICAgICAgICAgICAgICBpbWc0LFxuICAgICAgICAgICAgICAgIGltZzUsXG4gICAgICAgICAgICAgICAgaW1nNixcbiAgICAgICAgICAgICAgICBpbWc3LFxuICAgICAgICAgICAgICAgIGltZzgsXG4gICAgICAgICAgICAgICAgaW1nOSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhY2N1cmFjeTogMiwgLy8g57K+56Gu5bqm5bCP77yM5Y+v5YWB6K6455qE6K+v5beu6IyD5Zu05bCP77yb5Li6MeaXtu+8jOWImeihqOekuua7keWdl+imgeS4juWHueanveWujOWFqOmHjeWPoO+8jOaJjeiDvemqjOivgeaIkOWKn+OAgum7mOiupOWAvOS4ujVcbiAgICAgICAgICAgIC8vIHNsaWRlckltZ3M6W10sXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIC8vIHNsaWRlclRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMubG9jYWxlID09IFwiemgtY25cIikge1xuICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKDQ2KVxuICAgICAgICAvLyAgICAgICAgIHJldHVybiAn5ZCR5Y+z5ruR5Yqo77yM5a6M5oiQ5ou85Zu+JztcbiAgICAgICAgLy8gICAgIH1lbHNlIGlmICh0aGlzLmxvY2FsZSA9PSBcImVuLXVzXCIpe1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiAnU2xpZGUgdG8gdGhlIHJpZ2h0IHRvIGNvbXBsZXRlIHRoZSBwdXp6bGUnO1xuICAgICAgICAvLyAgICAgfWVsc2UgaWYgKHRoaXMubG9jYWxlID09IFwiamFwYW5lc2VcIil7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuICflj7Pjgavjgrnjg6njgqTjg4njgZfjgabjgIHjg5Hjgrrjg6vjgpLlrozmiJDjgZfjgb7jgZknO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBvblN1Y2Nlc3ModGltZXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfpqozor4HpgJrov4cnKTtcbiAgICAgICAgICAgIC8vIHRoaXMubXNnID0gYGxvZ2luIHN1Y2Nlc3MsIOiAl+aXtiR7KHRpbWVzIC8gMTAwMCkudG9GaXhlZCgxKX1zYDtcbiAgICAgICAgICAgIGxldCBzbGlkZXJPayA9IHRydWU7XG4gICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2VzcycsIHNsaWRlck9rKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+mqjOivgeS4jemAmui/hycpO1xuICAgICAgICAgICAgLy8gdGhpcy5tc2cgPSAnJ1xuICAgICAgICAgICAgbGV0IHNsaWRlck9rID0gZmFsc2U7XG4gICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2VzcycsIHNsaWRlck9rKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZWZyZXNoKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ+eCueWHu+S6huWIt+aWsOWwj+WbvuaghycpO1xuICAgICAgICAgICAgLy8gdGhpcy5tc2cgPSAnJ1xuICAgICAgICAgICAgbGV0IHNsaWRlck9rID0gZmFsc2U7XG4gICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2VzcycsIHNsaWRlck9rKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GdWxmaWxsZWQoKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygn5Yi35paw5oiQ5Yqf5ZWm77yBJyk7XG4gICAgICAgICAgICAvLyBsZXQgc2xpZGVyT2sgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIC8vIOmAmuefpeeItue7hOS7tuabtOaWsOeKtuaAgVxuICAgICAgICAgICAgLy8gdGhpcy4kZW1pdCgncmVzZXRTbGlkZXJTdWNjZXNzJyxzbGlkZXJPayk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQWdhaW4oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygn5qOA5rWL5Yiw6Z2e5Lq65Li65pON5L2c55qE5ZOm77yBJyk7XG4gICAgICAgICAgICB0aGlzLm1zZyA9ICd0cnkgYWdhaW4nO1xuICAgICAgICAgICAgbGV0IHNsaWRlck9rID0gZmFsc2U7XG4gICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2VzcycsIHNsaWRlck9rKTtcbiAgICAgICAgICAgIC8vIOWIt+aWsFxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljaygpO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVDbGljaygpIHtcbiAgICAgICAgICAgIHRoaXMuJHJlZnMuc2xpZGVibG9jay5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5tc2cgPSAnJ1xuICAgICAgICAgICAgbGV0IHNsaWRlck9rID0gZmFsc2U7XG4gICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2VzcycsIHNsaWRlck9rKTtcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIC8vIGNvbnN0IG9TY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgLy8gb1NjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgIC8vIG9TY3JpcHQuc3JjID0gJy9qcy9zbGlkZS12ZXJpZnkuanMnO1xuICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG9TY3JpcHQpO1xuICAgIH0sXG4gICAgY3JlYXRlZCgpIHtcbiAgICAgICAgdGhpcy4kaTE4bi5tZXJnZUxvY2FsZU1lc3NhZ2UoXCJlblwiLCB0cmFucy5lbik7XG4gICAgICAgIHRoaXMuJGkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKFwiemhcIiwgdHJhbnMuemgpO1xuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4jcHVibGljU2xpZGVyVmVyaWZ5IHtcbiAgICBmb250LWZhbWlseTogJ0F2ZW5pcicsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgICBjb2xvcjogIzJjM2U1MDtcbn1cblxuLmJ0biB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiA4cHggMTVweDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzE4OTBmZjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5idG46YWN0aXZlIHtcbiAgICBib3gtc2hhZG93OiAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpIGluc2V0O1xufTwvc3R5bGU+XG4iLCIubG9naW5bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgLyogYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vZmlsZS5pdmlld3VpLmNvbS9pdmlldy1hZG1pbi9sb2dpbl9iZy5qcGcpOyAqL1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2Rvd25sb2FkLnNuZWMub3JnLmNuL1NORUMvYXJ0aWNsZS8yMDI1LzAzLzEzLy9sb2dpbl9iZy05NTExNTkwOC5qcGcpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5sb2dpbi1jb25bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNjBweDtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTYwJSk7XG4gICAgd2lkdGg6IDMwMHB4O1xufVxuLmxvZ2luLWNvbiAuZm9ybS1jb25bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgcGFkZGluZzogMTBweCAwIDA7XG59XG4ubG9naW4tY29uIC5sb2dpbi10aXBbZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogI2MzYzNjMztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7XG4ubG9naW4tY29uW2RhdGEtdi1hNDkwOTBjZV17XG4gICAgICAgIHRvcDo1MCU7XG4gICAgICAgIGxlZnQ6NTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpO1xufVxufSIsIjx0ZW1wbGF0ZT5cbiAgICA8Tm9MYXlvdXQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpblwiIEBrZXlkb3duLmVudGVyPVwiY2hlY2tWZXJpZmljYXRpb25Db2RlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tY29uXCI+XG4gICAgICAgICAgICAgICAgPENhcmQgOmJvcmRlcmVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc2xvdD1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiB0eXBlPVwibG9nLWluXCI+PC9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJHQoXCLmrKLov47nmbvlvZXnvZHnq5nlkI7lj7DnrqHnkIbns7vnu59cIikgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzowIDAgMCAyMHB4O2ZvbnQtc2l6ZTogMTJweDtcIj7or63oqIAvTGFuZ3VhZ2U6PGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IGNvbG9yOiAkaTE4bi5sb2NhbGUgPT09ICdlbi1VUycgPyAnYmxhY2snIDogJ29yYW5nZScgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiY2hhbmdlTGFuZ3VhZ2UoJ3poLUNOJylcIj7kuK3mloc8L2E+ICZuYnNwOyZuYnNwOzxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwieyBjb2xvcjogJGkxOG4ubG9jYWxlID09PSAnemgtQ04nID8gJ2JsYWNrJyA6ICdvcmFuZ2UnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cImNoYW5nZUxhbmd1YWdlKCdlbi1VUycpXCI+RU5HTElTSDwvYT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybSByZWY9XCJsb2dpbkZvcm1cIiA6bW9kZWw9XCJmb3JtXCIgOnJ1bGVzPVwicnVsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybUl0ZW0gcHJvcD1cInVzZXJOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dCB2LW1vZGVsPVwiZm9ybS51c2VyTmFtZVwiIHBsYWNlaG9sZGVyPVwiJHQoJ+ivt+i+k+WFpeeUqOaIt+WQjScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNsb3Q9XCJwcmVwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiA6c2l6ZT1cIjE2XCIgdHlwZT1cInBlcnNvblwiPjwvSWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0lucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1JdGVtIHByb3A9XCJwYXNzd29yZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdi1tb2RlbD1cImZvcm0ucGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIiR0KCfor7fovpPlhaXlr4bnoIEnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzbG90PVwicHJlcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gOnNpemU9XCIxNFwiIHR5cGU9XCJsb2NrZWRcIj48L0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm1JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtSXRlbSBwcm9wPVwidmVyaWZpY2F0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQdWJsaWNTbGlkZXJWZXJpZnkgcmVmPVwicHVibGljU2xpZGVyVmVyaWZ5XCIgOnNsaWRlci10ZXh0PVwiJHQoJ+WQkeWPs+a7keWKqO+8jOWujOaIkOaLvOWbvicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVzZXRTbGlkZXJTdWNjZXNzPSdyZXNldFNsaWRlclN1Y2Nlc3MnPjwvUHVibGljU2xpZGVyVmVyaWZ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiZm9ybV9zcGFuXCI+6aqM6K+B56CBOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXQgdi1tb2RlbD1cImZvcm0udmVyaWZpY2F0aW9uXCIgcGxhY2Vob2xkZXI9XCLor7fovpPlhaXpqozor4HnoIFcIiBzdHlsZT1cIndpZHRoOjQ1JTtcIj48L0lucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjE1cHg7bWFyZ2luLWxlZnQ6NDRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyA6c3JjPSdcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxcIit2ZXJpZmljYXRpb25JbWcnLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW4tbGVmdDogMTBweDt2ZXJ0aWNhbC1hbGlnbjogdG9wO21hcmdpbi10b3A6IDRweDtcIiBAY2xpY2s9XCJnZXRWZXJpZmljYXRpb25cIj7mjaLkuIDlvKA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gc3R5bGU9XCJib3JkZXItcmFkaXVzOiA0cHg7Ym9yZGVyOiBub25lO2NvbG9yOiAjZmZmO2JhY2tncm91bmQ6ICNmOTA7cGFkZGluZzogMCAxMHB4O2ZvbnQtc2l6ZTogMTRweDttYXJnaW4tbGVmdDogNXB4O1wiPuiOt+WPlumqjOivgeeggTwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm1JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBAY2xpY2s9XCJjaGVja1ZlcmlmaWNhdGlvbkNvZGVcIiB0eXBlPVwicHJpbWFyeVwiIGxvbmc+e3sgJHQoJ+eZu+W9lScpIH19PC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibG9naW4tdGlwXCI+e3sgJHQoJ+i+k+WFpeeUqOaIt+WQjeWSjOWvhueggScpIH19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9Ob0xheW91dD5cbjwvdGVtcGxhdGU+XG48c3R5bGUgc2NvcGVkIHNyYz0nLi9sb2dpbi5jc3MnPlxuLyogQGltcG9ydCBcImxvZ2luLmNzc1wiOyAqL1xuPC9zdHlsZT5cbjxzdHlsZT5cbmh0bWwsXG5ib2R5LFxuI21haW4xLFxuI21haW4xPmRpdiB7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuPC9zdHlsZT5cbjxzY3JpcHQgdHlwZT1cInRleHQvYmFiZWxcIj5cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuXG5jb25zdCB0cmFucyA9IHJlcXVpcmUoXCIuL2xvZ2luLmpzb25cIik7XG5pbXBvcnQgUHVibGljU2xpZGVyVmVyaWZ5IGZyb20gJy4uL3B1YmxpY1NsaWRlclZlcmlmeS9wdWJsaWNTbGlkZXJWZXJpZnkudnVlJztcblxuYXhpb3MuZGVmYXVsdHMuaGVhZGVycy5wb3N0WydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuVnVlLnByb3RvdHlwZS4kYXhpb3MgPSBheGlvcztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIGNvbXBvbmVudHM6IHsgUHVibGljU2xpZGVyVmVyaWZ5IH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm06IHtcbiAgICAgICAgICAgICAgICB1c2VyTmFtZTogJ3Rlc3QnLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAnY2NWb3FIJyxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb246ICcnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVsZXM6IHtcbiAgICAgICAgICAgICAgICB1c2VyTmFtZTogW1xuICAgICAgICAgICAgICAgICAgICB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiB0aGlzLiR0KCfotKblj7fkuI3og73kuLrnqbonKSwgdHJpZ2dlcjogJ2JsdXInIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6IHRoaXMuJHQoJ+WvhueggeS4jeiDveS4uuepuicpLCB0cmlnZ2VyOiAnYmx1cicgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJpZmljYXRpb25JbWc6ICcnLFxuICAgICAgICAgICAgdmVyaWZpY2F0aW9uQW5zd2VyOiAnJyxcbiAgICAgICAgICAgIHNsaWRlclN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgc2xpZGVySW1nczogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHJlc2V0U2xpZGVyU3VjY2VzcyhzbGlkZXJPaykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJTdWNjZXNzID0gc2xpZGVyT2s7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5zbGlkZXJTdWNjZXNzJywgdGhpcy5zbGlkZXJTdWNjZXNzKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy9FUzXljp/nlJ/ljrvph43lip7ms5VcbiAgICAgICAgRXM1ZHVwbGljYXRlKGFyciwgdHlwZSkge1xuICAgICAgICAgICAgdmFyIG5ld0FyciA9IFtdO1xuICAgICAgICAgICAgdmFyIHRBcnIgPSBbXTtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRBcnJbYXJyW2ldW3R5cGVdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXJyLnB1c2goYXJyW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRBcnJbYXJyW2ldW3R5cGVdXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0FycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8g6I635Y+W6aqM6K+B56CB77yI5Zu+54mH5qC85byP77yJXG4gICAgICAgIGdldFZlcmlmaWNhdGlvbigpIHtcbiAgICAgICAgICAgIC8v6I635Y+W5a6J5YWo5a+G6ZKlY3NyZlRva2VuXG4gICAgICAgICAgICBjb25zdCBjc3JmdG9rZW4gPSBDb29raWVzLmdldCgnY3NyZlRva2VuJyk7XG4gICAgICAgICAgICBheGlvcyh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5WRVJJRklDQVRJT05fQ09ERSArIFwiYXBpL2NhcHRjaGFcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwieC1jc3JmLXRva2VuXCI6IGNzcmZ0b2tlblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRWZXJpZmljYXRpb24nLCByZXMpXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcmlmaWNhdGlvbkltZyA9IHJlcy5kYXRhLmltYWdlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcmlmaWNhdGlvbkFuc3dlciA9IHJlcy5kYXRhLmFuc3dlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgICAgICAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIOagoemqjOmqjOivgeeggVxuICAgICAgICBjaGVja1ZlcmlmaWNhdGlvbkNvZGUoKSB7XG4gICAgICAgICAgICAvL+iOt+WPluWuieWFqOWvhumSpWNzcmZUb2tlblxuICAgICAgICAgICAgLy8gY29uc3QgY3NyZnRva2VuID0gQ29va2llcy5nZXQoJ2NzcmZUb2tlbicpO1xuICAgICAgICAgICAgLy8gYXhpb3Moe1xuICAgICAgICAgICAgLy8gICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICAgICAgICAvLyAgICAgdXJsOiB0aGlzLlZFUklGSUNBVElPTl9DT0RFK1wiYXBpL2NhcHRjaGEvdmVyaWZ5XCIsXG4gICAgICAgICAgICAvLyAgICAgaGVhZGVyczp7XG4gICAgICAgICAgICAvLyAgICAgICAgIFwieC1jc3JmLXRva2VuXCI6Y3NyZnRva2VuXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIEFuc3dlcjp0aGlzLmZvcm0udmVyaWZpY2F0aW9uLFxuICAgICAgICAgICAgLy8gICAgICAgICBDYXB0Y2hhOnRoaXMudmVyaWZpY2F0aW9uQW5zd2VyLFxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdjaGVja1ZlcmlmaWNhdGlvbkNvZGUnLHJlcylcbiAgICAgICAgICAgIC8vICAgICBpZihyZXMuZGF0YS5jb2RlICE9IDEwMCl7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuJE1lc3NhZ2Uud2FybmluZyhyZXMuZGF0YS5tZXNzYWdlKTsgICBcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRWZXJpZmljYXRpb24oKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gICAgIH1lbHNlIGlmKHJlcy5kYXRhLmNvZGUgPT09IDEwMCl7XG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIOmqjOivgeihqOWNlVxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdCgpO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5zbGlkZXJTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5wdWJsaWNTbGlkZXJWZXJpZnkuaGFuZGxlQ2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgICAgICAvLyDniLbnu4Tku7bnm7TmjqXlj6/ku6XosIPnlKjliLfmlrDmlrnms5VcbiAgICAgICAgICAgIHRoaXMuJHJlZnMuc2xpZGVibG9jay5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21JbWcoKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8g6ZqP5py655Sf5oiQaW1nIHNyYyDlm77lupPmnInlm77niYfnlKjlm77lupPnmoTvvIzmsqHmnInnlKjmnKzlnLDnmoQgICAtLS0tLeaaguaXtuS4jeeUqFxuICAgICAgICBnZXRSYW5kb21JbWcoKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gcmVxdWlyZSgnLi4vYXNzZXRzL2ltZy5qcGcnKVxuICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sb2NhbEltZ3MubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJJbWdzID0gW107XG5cbiAgICAgICAgICAgIGxldCBwaWNzcmMgPSAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC8xNTAvP2ltYWdlPScgKyB0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgMTA4NCk7XG4gICAgICAgICAgICAvLyDov5nph4zpnIDopoHor7fmsYLlm77niYflnLDlnYDvvIzliKTmlq3lm77niYfmmK/lkKblrZjlnKjlkI7lho3lhrPlrprosIPkuI3osIPnrKzkuInmlrnlm77lupPnmoTlm77niYflh7rmnaXmmL7npLpcbiAgICAgICAgICAgIGF4aW9zKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBcIngtY3NyZi10b2tlblwiOkNvb2tpZXMuZ2V0KCdjc3JmVG9rZW4nKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiBwaWNzcmMsXG4gICAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3JlcycscmVzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g5Zu+54mH5a2Y5Zyo77yM6LCD5Ye65p2l5byV55SoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySW1ncy5wdXNoKHBpY3NyYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVySW1ncy5wdXNoKHRoaXMubG9jYWxJbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvL3RoaXMuQ2F0Y2hFcnIoZXJyKTtcbiAgICAgICAgICAgICAgICAvLyDlvZPliY3lm77niYfkuI3lrZjlnKjvvIzosIPnlKjmnKzlnLDlm77niYdcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlckltZ3MucHVzaCh0aGlzLmxvY2FsSW1nc1t0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBpZihwaWNzcmMpe1xuICAgICAgICAgICAgLy8gICB0aGlzLnNsaWRlckltZ3MucHVzaChwaWNzcmMpO1xuICAgICAgICAgICAgLy8gfWVsc2V7XG4gICAgICAgICAgICAvLyAgIHRoaXMuc2xpZGVySW1ncy5wdXNoKHRoaXMubG9jYWxJbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7IFxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuc2xpZGVySW1ncycsIHRoaXMuc2xpZGVySW1ncyk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJhbmRvbU51bWJlckJ5UmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChlbmQgLSBzdGFydCkpICsgc3RhcnRcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlU3VibWl0KCkge1xuICAgICAgICAgICAgLy/ojrflj5blronlhajlr4bpkqVjc3JmdG9rZW5cbiAgICAgICAgICAgIGNvbnN0IGNzcmZ0b2tlbiA9IENvb2tpZXMuZ2V0KCdjc3JmVG9rZW4nKTtcbiAgICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpc1xuICAgICAgICAgICAgLy/mj5DkuqRwb3N06K+35rGCXG4gICAgICAgICAgICB0aGlzLiRheGlvcyh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAvLyAneC1jc3JmLXRva2VuJzpjc3JmdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5IT1NUX0RFRkFVTFQgKyAnR3JwY1JvbGVTZXJ2aWNlLlJvbGVTZXJ2aWNlVG9HcnBjL0xvZ2luVG9Vc2VyJyxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIFVzZXJOYW1lOiB0aGlzLmZvcm0udXNlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFVzZXJQYXNzd29yZDogdGhpcy5mb3JtLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuaXNMb2dpbikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3NyZl90b2tlbiA9IHJlcy5oZWFkZXJzWyd4LXRva2VuLXJlZnJlc2gnXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY3NyZl90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIENvb2tpZXMuc2V0KCdjc3JmX3Rva2VuJywgY3NyZl90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIENvb2tpZXMuc2V0KCdVc2VyTmFtZScsIHRoaXMuZm9ybS51c2VyTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdhY3RpdmVOYW1lJyk7IC8v5q+P5qyh55m76ZmG5ZCO5riF56m6c2Vzc2lvblN0b3JhZ2Xph4znmoRhY3RpdmVOYW1l5YC8XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdicmVhZENydW1iSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gcmVzLmRhdGEubGlzdGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIC8vIOiOt+WPlue9keermeWIl+ihqOaVsOaNriDlsIbliJfooajmlbDmja7lrZjliLBzZXNzaW9uU3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVdlYlNldExpc3QoYXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChyZXMuZGF0YS5tc2cpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnB1YmxpY1NsaWRlclZlcmlmeS5oYW5kbGVDbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldFZlcmlmaWNhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygzMzMzLGVycilcbiAgICAgICAgICAgICAgICBhbGVydCh0aGlzLiR0KCfnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZXvvIEnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5wdWJsaWNTbGlkZXJWZXJpZnkuaGFuZGxlQ2xpY2soKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvbG9naW4nO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICAvLyDojrflj5bnvZHnq5nliJfooajmlbDmja5cbiAgICAgICAgdXBkYXRlV2ViU2V0TGlzdChhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcmZfdG9rZW4gPSBDb29raWVzLmdldChcImNzcmZfdG9rZW5cIik7XG4gICAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXNcbiAgICAgICAgICAgIC8v5o+Q5LqkcG9zdOivt+axgiAg6I635Y+W572R56uZ5YiX6KGo5pWw5o2uXG4gICAgICAgICAgICBheGlvcyh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgXCJ4LWF1dGgtdG9rZW5cIjogY3NyZl90b2tlbixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvcGxhaW5cIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVybDogdGhpcy5IT1NUX0RFRkFVTFQgKyBcIkdycGNDTVNfTkVXLkNNU1RvR3JwY1dlYlNldC9nZXRBbGxXZWJMaXN0SW5mb0xpc3RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOWwhue9keermeWIl+ihqOWtmOWIsHNlc3Npb25TdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdXZWJTZXRMaXN0JywgSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEubGlzdGRhdGEpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgUHVydmlld0NvZGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGxldCBSb2xlQ29kZUxpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJvbGVDb2RlTGlzdC5wdXNoKGFycltpXS5Sb2xlLlJvbGVDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFB1cnZpZXdDb2RlcyA9IFB1cnZpZXdDb2Rlcy5jb25jYXQoYXJyW2ldLnB1cnZpZXdfbGlzdGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXS5Sb2xlLlJvbGVDb2RlID09PSAnWVknKSBfdGhpcy5jaGFuZ2VMYW5ndWFnZSgnZW4tVVMnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFB1cnZpZXdDb2RlcyA9IHRoaXMuRXM1ZHVwbGljYXRlKFB1cnZpZXdDb2RlcywgJ1B1cnZpZXdQSycpO1xuICAgICAgICAgICAgICAgICAgICAvLyDlsIbnmbvpmYbnmoTnlKjmiLflkI3lrZjliLBzZXNzaW9uc3RvcmFnZemHjFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnVXNlck5hbWUnLCB0aGlzLmZvcm0udXNlck5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnUHVydmlld0NvZGVzJywgSlNPTi5zdHJpbmdpZnkoUHVydmlld0NvZGVzKSk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdSb2xlQ29kZUxpc3QnLCBSb2xlQ29kZUxpc3QudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1B1cnZpZXdDb2RlcycsIFB1cnZpZXdDb2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIFJvbGVDb2RlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT09ICdKQVBBTkVTRScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvamFwYW5lc2VQYWdlQXJ0aWNsZXMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBSb2xlQ29kZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvaW5kZXgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JlZnJlc2gnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aGlzLiR0KCfnvZHnq5nlkI7lj7DnrqHnkIbns7vnu58nKTtcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdTTkVDX0VOVicpO1xuICAgICBcbiAgICB9LFxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIC8vIOiOt+WPlumqjOivgeegge+8iOWbvueJh+agvOW8j++8iVxuICAgICAgICAvL3RoaXMuZ2V0VmVyaWZpY2F0aW9uKCk7XG4gICAgICAgIHRoaXMuJGkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKFwiZW5cIiwgdHJhbnMuZW4pO1xuICAgICAgICB0aGlzLiRpMThuLm1lcmdlTG9jYWxlTWVzc2FnZShcInpoXCIsIHRyYW5zLnpoKTtcbiAgICAgICAgdGhpcy5ydWxlcy51c2VyTmFtZVswXS5tZXNzYWdlID0gdGhpcy4kdCgn6LSm5Y+35LiN6IO95Li656m6Jyk7XG4gICAgICAgIHRoaXMucnVsZXMucGFzc3dvcmRbMF0ubWVzc2FnZSA9IHRoaXMuJHQoJ+WvhueggeS4jeiDveS4uuepuicpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLkhPU1RfREVGQVVMVCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiVjMtdG9wYm90dCDmlrDmoYbmnrYgYnkgd3luXCIpXG4gICAgfVxufTtcbjwvc2NyaXB0PiJdLCJzb3VyY2VSb290IjoiIn0=*/