html,body{height:100%;font-size: 12px;}
.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;}
.fontRedBold{color:#f5222d;font-weight: bold;}
.buttons>span{margin-right:5px;}
.ivu-select-disabled .ivu-select-selection{color:#aaa}
.ivu-input[disabled], fieldset[disabled] .ivu-input{color:#aaa}
.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;
    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: left;
}
.logo-con img {
  height: 60px;
  width: auto;
}
.ivu-layout-header {
    width: 100%;
    position: fixed;
    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;
}
.menuTree{
    color: white;
}
.menuTree .menuTreeUl{
    width:100%;position: relative;
}
.menuTree li {
    list-style: none;


    white-space: nowrap;
    outline: 0;
    margin: 8px 0;
}
.menuTree .cursor{
    cursor: pointer;
}
.menuTree li .children li {
    margin: 2px 0;
    font-size:14px
}
.menuTree .first:hover,.menuTree .first.seled{
    background:#2d8cf0;
}
.menuTree .three:hover{
    /* color: #f29600; */
    background:#2d8cf0;
}
.menuTree .three.seled{
    /* font-weight: 600;
    font-size: 14px; */
    /* color: #2d8cf0; */
    background:#2d8cf0;
}
.menuTree .first .ivu-tree-arrow{
line-height: 35px;
}
.menuTree .two:hover,.two:hover .ivu-tree-arrow,.menuTree .two.seled,.two.seled .ivu-tree-arrow{
   /* color:#f29600; */
   font-weight: 600;
   font-size: 14px;
}
.menuTree .two .ivu-tree-arrow{
line-height: 30px;
}
.menuTree .two{
background: #515a6e;
}
.menuTree .three{
    background: #363e4f;
}
.menuTree .firstLi{
    font-size:14px;border-bottom:1px solid #aaaaaa;
    margin: 0;
}
.menuTree .firstTxt{
padding-left:5px;display:inline-block;height: 35px;line-height: 35px;
}
.menuTree .twoTxt{
padding-left:25px;display:inline-block;height: 30px;line-height: 30px;
}
.menuTree .threeTxt{
padding-left:0;list-style-type:square;;display:inline-block;
/* height: 30px; */
line-height: 30px;
}
.menuTree .dot{
margin-left:40px;display:inline-block;
/* height: 30px; */
line-height: 30px;
}
.menuTree .ivu-tree-arrow {
    position: absolute;
    right: 8px;
    color: #fff;
    width: 100%;
    text-align: right;
}
@media screen and (max-width: 480px){
.user-dropdown-menu-con {
        width: 70px;
}
.ivu-layout-content{
        padding-top:64px!important;
}
}

body {
  margin: 0 0px;
}
.ivu-layout-sider {
  background: #495060;
}
a {
  text-decoration: none;
  color: inherit;
}
a:hover {
  color: inherit;
}
a:visited {
  color: inherit;
}
a:link {
  color: inherit;
}
.ivu-select-dropdown {
  width: auto;
}
.language {
  padding: 0 20px;
}
.ivu-menu-submenu-title {
  padding: 8px 24px !important;
}
.ivu-menu-vertical .ivu-menu-item a {
  padding: 6px !important;
}
.ivu-tree {
  padding: 0 5px;
}
.ivu-tree a {
  color: #fff;
}
.ivu-tree .ivu-tree-arrow {
  position: absolute;
  right: 8px;
  color: #fff;
  width: 100%;
  text-align: right;
}
.ivu-tree-arrow-open i {
  transform: rotate(90deg);
}
.ivu-icon-arrow-right-b:before {
  content: "\F116";
  font-size: 16px;
}
.selected {
  background: #d5e8fc;
  /* padding: 0 4px; */
  border-radius: 3px;
  color: #333 !important;
  /* transition: all .2s ease-in-out;
    font-size: 16px; */
  white-space: nowrap;
}
#leftDrawer {
  display: none;
}
#leftSlider {
  display: block;
}
.showDrawer {
  display: none;
}
.showJumpList {
  display: inline-block;
  margin-left: 25px;
}
#leftDrawerSmallscreen {
  display: none;
}
@media (max-width: 768px) {
#leftDrawerSmallscreen {
    display: block;
}
#leftDrawer {
    display: block;
}
#leftSlider,
  .navicon-con {
    display: none;
}
.language {
    position: absolute;
    top: 0;
    left: 120px;
    padding: 0;
}
.showDrawer {
    display: block;
    margin: 18px 0 0 18px;
}
.showJumpList {
    display: none;
}
.ivu-tree a,
  .ivu-tree .ivu-tree-arrow {
    color: #333;
}
.ivu-dropdown-rel > a {
    width: 80px;
    display: inline-block;
}
.ivu-dropdown-rel > a > span {
    width: auto !important;
}
}


.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://download.snec.org.cn/SNEC/article/2025/03/13//login_bg-95115908.jpg);
    /* background-image: url(https://file.iviewui.com/admin-dist/img/login-bg.0899ffa6.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXQvY3NzL2dsb2JhbC5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvbWFpbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvc3JjL2NvbXBvbmVudC9sYXlvdXQvc3RhbmRhcmQvbWFpbi52dWUiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZpZXdzL3B1YmxpY1NsaWRlclZlcmlmeS9jb21wb25lbnRzL3NyYy92aWV3cy9wdWJsaWNTbGlkZXJWZXJpZnkvY29tcG9uZW50cy9zbGlkZXJWZXJpZnkudnVlIiwid2VicGFjazovLy8uL3NyYy92aWV3cy9wdWJsaWNTbGlkZXJWZXJpZnkvc3JjL3ZpZXdzL3B1YmxpY1NsaWRlclZlcmlmeS9wdWJsaWNTbGlkZXJWZXJpZnkudnVlIiwid2VicGFjazovLy8uL3NyYy92aWV3cy9sb2dpbi9sb2dpbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ZpZXdzL2xvZ2luL3NyYy92aWV3cy9sb2dpbi9sb2dpbi52dWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxZQUFZLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sMEJBQTBCLDBCQUEwQixDQUFDO0FBQzVELGFBQWEsMEJBQTBCLGlDQUFpQyxDQUFDO0FBQ3pFLGdCQUFnQixpQkFBaUIsdUJBQXVCLENBQUM7QUFDekQsbUJBQW1CLGlCQUFpQix5QkFBeUIsQ0FBQztBQUM5RCxXQUFXLFdBQVcsZ0JBQWdCLENBQUM7QUFDdkMsVUFBVSxjQUFjLGdCQUFnQixDQUFDO0FBQ3pDLFVBQVUsY0FBYyxnQkFBZ0IsQ0FBQztBQUN6QyxXQUFXLGNBQWMsZ0JBQWdCLENBQUM7QUFDMUMsU0FBUyxjQUFjLGdCQUFnQixDQUFDO0FBQ3hDLFlBQVksY0FBYyxnQkFBZ0IsQ0FBQztBQUMzQyxhQUFhLGNBQWMsa0JBQWtCLENBQUM7QUFDOUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQywyQ0FBMkMsVUFBVSxDQUFDO0FBQ3RELG9EQUFvRCxVQUFVLENBQUM7QUFDL0QsK0NBQStDLFVBQVUsQ0FBQztBQUMxRCw0UUFBNFEsMEJBQTBCLEM7QUNoQnRTLE1BQU0sWUFBWSxDQUFDO0FBQ25CLGVBQWUsWUFBWSxDQUFDO0FBQzVCO0lBQ0ksWUFBWTtJQUNaLGNBQWM7SUFDZCxvQkFBb0I7Q0FDdkI7QUFDRDtJQUNJLGlCQUFpQjtJQUNqQixxQ0FBcUM7Q0FDeEM7QUFDRDtJQUNJLFdBQVc7SUFDWCxhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQixrQkFBa0I7Q0FDckI7QUFDRDtJQUNJLG9CQUFvQjtDQUN2QjtBQUNEO0lBQ0ksMEJBQTBCO0NBQzdCO0FBQ0Q7SUFDSSxzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLFdBQVc7SUFDWCx3QkFBd0I7SUFDeEIsb0JBQW9CO0lBQ3BCLHVCQUF1QjtJQUN2QiwrQkFBK0I7Q0FDbEM7QUFDRDtJQUNJLDJCQUEyQjtJQUMzQixtREFBbUQ7SUFDbkQsdUJBQXVCO0lBQ3ZCLGdCQUFnQjtDQUNuQjtBQUNEO0lBQ0ksV0FBVztJQUNYLDJCQUEyQjtDQUM5QjtBQUNEO0lBQ0ksMkJBQTJCO0lBQzNCLDJEQUEyRDtJQUMzRCx1QkFBdUI7SUFDdkIsZ0JBQWdCO0NBQ25CO0FBQ0Qsa0NBQWtDLGFBQWEsQ0FBQztBQUNoRCxtREFBbUQ7QUFDbkQsNkNBQTZDLGFBQWEsQ0FBQztBQUMzRDtFQUNFLGFBQWE7RUFDYixpQkFBaUI7Q0FDbEI7QUFDRDtFQUNFLGFBQWE7RUFDYixZQUFZO0NBQ2I7QUFDRDtJQUNJLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsT0FBTztJQUNQLFdBQVc7SUFDWCxXQUFXO0NBQ2Q7QUFDRDtFQUNFLGNBQWM7RUFDZCxzQkFBc0I7Q0FDdkI7QUFDRDtJQUNJLFVBQVU7Q0FDYjtBQUNEO0lBQ0ksZUFBZTtJQUNmLGtCQUFrQjtDQUNyQjtBQUNEO0lBQ0ksYUFBYTtJQUNiLGlCQUFpQjtJQUNqQiw0Q0FBNEM7SUFDNUMsbUJBQW1CO0lBQ25CLFlBQVk7Q0FDZjtBQUNEO0lBQ0ksZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxPQUFPO0lBQ1AsYUFBYTtDQUNoQjtBQUNEO0lBQ0ksYUFBYTtJQUNiLG9CQUFvQjtDQUN2QjtBQUNEOzs7OztJQUtJO0FBQ0o7SUFDSSxzQkFBc0I7SUFDdEIsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsa0JBQWtCO0NBQ3JCO0FBQ0Q7SUFDSSxhQUFhO0NBQ2hCO0FBQ0Q7SUFDSSxXQUFXLG1CQUFtQjtDQUNqQztBQUNEO0lBQ0ksaUJBQWlCOzs7SUFHakIsb0JBQW9CO0lBQ3BCLFdBQVc7SUFDWCxjQUFjO0NBQ2pCO0FBQ0Q7SUFDSSxnQkFBZ0I7Q0FDbkI7QUFDRDtJQUNJLGNBQWM7SUFDZCxjQUFjO0NBQ2pCO0FBQ0Q7SUFDSSxtQkFBbUI7Q0FDdEI7QUFDRDtJQUNJLHFCQUFxQjtJQUNyQixtQkFBbUI7Q0FDdEI7QUFDRDtJQUNJO3VCQUNtQjtJQUNuQixxQkFBcUI7SUFDckIsbUJBQW1CO0NBQ3RCO0FBQ0Q7QUFDQSxrQkFBa0I7Q0FDakI7QUFDRDtHQUNHLG9CQUFvQjtHQUNwQixpQkFBaUI7R0FDakIsZ0JBQWdCO0NBQ2xCO0FBQ0Q7QUFDQSxrQkFBa0I7Q0FDakI7QUFDRDtBQUNBLG9CQUFvQjtDQUNuQjtBQUNEO0lBQ0ksb0JBQW9CO0NBQ3ZCO0FBQ0Q7SUFDSSxlQUFlLGdDQUFnQztJQUMvQyxVQUFVO0NBQ2I7QUFDRDtBQUNBLGlCQUFpQixxQkFBcUIsYUFBYSxrQkFBa0I7Q0FDcEU7QUFDRDtBQUNBLGtCQUFrQixxQkFBcUIsYUFBYSxrQkFBa0I7Q0FDckU7QUFDRDtBQUNBLGVBQWUsdUJBQXVCLENBQUMscUJBQXFCO0FBQzVELG1CQUFtQjtBQUNuQixrQkFBa0I7Q0FDakI7QUFDRDtBQUNBLGlCQUFpQixxQkFBcUI7QUFDdEMsbUJBQW1CO0FBQ25CLGtCQUFrQjtDQUNqQjtBQUNEO0lBQ0ksbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxZQUFZO0lBQ1osWUFBWTtJQUNaLGtCQUFrQjtDQUNyQjtBQUNEO0FBQ0E7UUFDUSxZQUFZO0NBQ25CO0FBQ0Q7UUFDUSwyQkFBMkI7Q0FDbEM7OztBQ3hGRDtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUlBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7dUJBQ0E7RUFDQTtDQUNBO0FBRUE7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtBQUNBO0lBQ0E7Q0FDQTtBQUNBO0lBQ0E7Q0FDQTtBQUNBOztJQUVBO0NBQ0E7QUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUNBO0lBQ0E7Q0FDQTtBQUNBOztJQUVBO0NBQ0E7QUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUNBO0lBQ0E7Q0FDQTtDQUNBOzs7QUN3UUE7SUFDQTtDQUNBOztBQUVBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtBQUNBO1FBQ0E7Q0FDQTtBQUNBO1FBQ0E7Q0FDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtDQUNBO0FBRUE7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBOzs7SUFHQTtDQUNBOzs7QUN0Z0JBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBOztBQ3JJQTtJQUNJLFlBQVk7SUFDWixhQUFhO0lBQ2IsV0FBVztJQUNYLG1HQUFtRztJQUNuRywyRkFBMkY7SUFDM0YsdUJBQXVCO0lBQ3ZCLDRCQUE0QjtJQUM1QixtQkFBbUI7Q0FDdEI7QUFDRDtJQUNJLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsU0FBUztJQUNULDRCQUE0QjtJQUM1QixhQUFhO0NBQ2hCO0FBQ0Q7SUFDSSxrQkFBa0I7Q0FDckI7QUFDRDtJQUNJLGdCQUFnQjtJQUNoQixtQkFBbUI7SUFDbkIsZUFBZTtDQUNsQjtBQUNEO0FBQ0E7UUFDUSxRQUFRO1FBQ1IsU0FBUztRQUNULGdDQUFnQztDQUN2Qzs7O0FDbUJEOzs7O0VBSUE7Q0FDQSIsImZpbGUiOiJjc3MvbG9naW4uY2U0NTA1ODAuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiaHRtbCxib2R5e2hlaWdodDoxMDAlO2ZvbnQtc2l6ZTogMTJweDt9XG4udGFibGV7Ym9yZGVyOiAxcHggc29saWQgI2RkZGVlMTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO31cbi50YWJsZSB0aGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY5O2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTllYWVjO31cbi50YWJsZSB0aGVhZCB0aHt0ZXh0LWFsaWduOiBsZWZ0O3BhZGRpbmc6IDhweCAwIDhweCA1cHg7fVxuLnRhYmxlIHRib2R5IHRyIHRke3RleHQtYWxpZ246IGxlZnQ7cGFkZGluZzogNXB4IDVweCA1cHggNXB4O31cbi5mb250QmxhY2t7Y29sb3I6IzMzMztjdXJzb3I6IHBvaW50ZXI7fVxuLmZvbnRCbHVle2NvbG9yOiMxODkwZmY7Y3Vyc29yOiBwb2ludGVyO31cbi5mb250UGlua3tjb2xvcjojZWIyZjk2O2N1cnNvcjogcG9pbnRlcjt9XG4uZm9udEdyZWVue2NvbG9yOiMxOWJlNmI7Y3Vyc29yOiBwb2ludGVyO31cbi5mb250UmVke2NvbG9yOiNmNTIyMmQ7Y3Vyc29yOiBwb2ludGVyO31cbi5mb250T3Jhbmdle2NvbG9yOiNmYThjMTY7Y3Vyc29yOiBwb2ludGVyO31cbi5mb250UmVkQm9sZHtjb2xvcjojZjUyMjJkO2ZvbnQtd2VpZ2h0OiBib2xkO31cbi5idXR0b25zPnNwYW57bWFyZ2luLXJpZ2h0OjVweDt9XG4uaXZ1LXNlbGVjdC1kaXNhYmxlZCAuaXZ1LXNlbGVjdC1zZWxlY3Rpb257Y29sb3I6I2FhYX1cbi5pdnUtaW5wdXRbZGlzYWJsZWRdLCBmaWVsZHNldFtkaXNhYmxlZF0gLml2dS1pbnB1dHtjb2xvcjojYWFhfVxuLml2dS1wb3B0aXAtY29uZmlybSAuaXZ1LXBvcHRpcC1ib2R5IC5pdnUtaWNvbntsZWZ0OjE2cHg7fVxuLml2dS1mb3JtIC5pdnUtZm9ybS1pdGVtLWxhYmVsLC5pdnUtcmFkaW8td3JhcHBlciwuaXZ1LWlucHV0LC5pdnUtZm9ybS1pdGVtLWNvbnRlbnQsLml2dS1wb3B0aXAtcG9wcGVyLC5pdnUtc2VsZWN0LWl0ZW0sLml2dS1zZWxlY3Qtc2luZ2xlIC5pdnUtc2VsZWN0LXNlbGVjdGlvbiAuaXZ1LXNlbGVjdC1wbGFjZWhvbGRlciwuaXZ1LXNlbGVjdC1zaW5nbGUgLml2dS1zZWxlY3Qtc2VsZWN0aW9uIC5pdnUtc2VsZWN0LXNlbGVjdGVkLXZhbHVlLC5pdnUtYnRuLXNtYWxse2ZvbnQtc2l6ZToxMnB4ICFpbXBvcnRhbnQ7fSIsIiNtYWlue2hlaWdodDoxMDAlO31cbi5pdnUtY2FyZC1ib2R5e2hlaWdodDoxMDAlO31cbi5sYXlvdXR7XG4gICAgaGVpZ2h0OjEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuLmxheW91dC1oZWFkZXItYmFye1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG4gICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwwLDAsLjEpO1xufVxuLmxheW91dC1sb2dvLWxlZnR7XG4gICAgd2lkdGg6IDkwJTtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgYmFja2dyb3VuZDogIzViNjI3MDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgbWFyZ2luOiAxNXB4IGF1dG87XG59XG4ubWVudS1pY29ue1xuICAgIHRyYW5zaXRpb246IGFsbCAuM3M7XG59XG4ucm90YXRlLWljb257XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTtcbn1cbi5tZW51LWl0ZW0gc3BhbntcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgLyogb3ZlcmZsb3c6IGhpZGRlbjsgKi9cbiAgICB3aWR0aDogNjAlO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgZWFzZSAuMnM7XG59XG4ubWVudS1pdGVtIGl7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDBweCk7XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIC4ycyBlYXNlLCB0cmFuc2Zvcm0gLjJzIGVhc2U7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBmb250LXNpemU6IDE2cHg7XG59XG4uY29sbGFwc2VkLW1lbnUgc3BhbntcbiAgICB3aWR0aDogMHB4O1xuICAgIHRyYW5zaXRpb246IHdpZHRoIC4ycyBlYXNlO1xufVxuLmNvbGxhcHNlZC1tZW51IGl7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDVweCk7XG4gICAgdHJhbnNpdGlvbjogZm9udC1zaXplIC4ycyBlYXNlIC4ycywgdHJhbnNmb3JtIC4ycyBlYXNlIC4ycztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMjJweDtcbn1cbi5jb2xsYXBzZWQtbWVudSAuaXZ1LW1lbnUtc3VibWVudXtoZWlnaHQ6IDUwcHg7fVxuLyogLmNvbGxhcHNlZC1tZW51IC5pdnUtbWVudS1pdGVte2Rpc3BsYXk6IG5vbmV9ICovXG4uY29sbGFwc2VkLW1lbnUgLml2dS1tZW51LXN1Ym1lbnUtdGl0bGUtaWNvbntkaXNwbGF5OiBub25lfVxuLmxvZ28tY29uIHtcbiAgcGFkZGluZzogOHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuLmxvZ28tY29uIGltZyB7XG4gIGhlaWdodDogNjBweDtcbiAgd2lkdGg6IGF1dG87XG59XG4uaXZ1LWxheW91dC1oZWFkZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMjtcbiAgICBwYWRkaW5nOiAwO1xufVxuLm5hdmljb24tY29uIHtcbiAgbWFyZ2luOiAwIDZweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLml2dS1tZW51LXZlcnRpY2FsIC5pdnUtbWVudS1pdGVte1xuICAgIHBhZGRpbmc6MDtcbn1cbi5pdnUtbWVudS12ZXJ0aWNhbCAuaXZ1LW1lbnUtaXRlbSBhe1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6MTRweCAyNHB4O1xufVxuLm1haW4taGVhZGVyIHtcbiAgICBoZWlnaHQ6IDYwcHg7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxcHggMXB4IGhzbGEoMCwwJSwzOSUsLjEpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxMTtcbn1cbi51c2VyLWRyb3Bkb3duLW1lbnUtY29uIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbn1cbi51c2VyLWRyb3Bkb3duLWlubmVyY29uIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZy1yaWdodDogMTRweDtcbn1cbi8qIC5pdnUtZHJvcGRvd24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5pdnUtZHJvcGRvd24tcmVsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59ICovXG4udXNlci1kcm9wZG93bi1tZW51LWNvbiAubWFpbi11c2VyLW5hbWUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogODBweDtcbiAgICB3b3JkLWJyZWFrOiBrZWVwLWFsbDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5tZW51VHJlZXtcbiAgICBjb2xvcjogd2hpdGU7XG59XG4ubWVudVRyZWUgLm1lbnVUcmVlVWx7XG4gICAgd2lkdGg6MTAwJTtwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4ubWVudVRyZWUgbGkge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG5cblxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgb3V0bGluZTogMDtcbiAgICBtYXJnaW46IDhweCAwO1xufVxuLm1lbnVUcmVlIC5jdXJzb3J7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuLm1lbnVUcmVlIGxpIC5jaGlsZHJlbiBsaSB7XG4gICAgbWFyZ2luOiAycHggMDtcbiAgICBmb250LXNpemU6MTRweFxufVxuLm1lbnVUcmVlIC5maXJzdDpob3ZlciwubWVudVRyZWUgLmZpcnN0LnNlbGVke1xuICAgIGJhY2tncm91bmQ6IzJkOGNmMDtcbn1cbi5tZW51VHJlZSAudGhyZWU6aG92ZXJ7XG4gICAgLyogY29sb3I6ICNmMjk2MDA7ICovXG4gICAgYmFja2dyb3VuZDojMmQ4Y2YwO1xufVxuLm1lbnVUcmVlIC50aHJlZS5zZWxlZHtcbiAgICAvKiBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMTRweDsgKi9cbiAgICAvKiBjb2xvcjogIzJkOGNmMDsgKi9cbiAgICBiYWNrZ3JvdW5kOiMyZDhjZjA7XG59XG4ubWVudVRyZWUgLmZpcnN0IC5pdnUtdHJlZS1hcnJvd3tcbmxpbmUtaGVpZ2h0OiAzNXB4O1xufVxuLm1lbnVUcmVlIC50d286aG92ZXIsLnR3bzpob3ZlciAuaXZ1LXRyZWUtYXJyb3csLm1lbnVUcmVlIC50d28uc2VsZWQsLnR3by5zZWxlZCAuaXZ1LXRyZWUtYXJyb3d7XG4gICAvKiBjb2xvcjojZjI5NjAwOyAqL1xuICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgIGZvbnQtc2l6ZTogMTRweDtcbn1cbi5tZW51VHJlZSAudHdvIC5pdnUtdHJlZS1hcnJvd3tcbmxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuLm1lbnVUcmVlIC50d297XG5iYWNrZ3JvdW5kOiAjNTE1YTZlO1xufVxuLm1lbnVUcmVlIC50aHJlZXtcbiAgICBiYWNrZ3JvdW5kOiAjMzYzZTRmO1xufVxuLm1lbnVUcmVlIC5maXJzdExpe1xuICAgIGZvbnQtc2l6ZToxNHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhYWFhYWE7XG4gICAgbWFyZ2luOiAwO1xufVxuLm1lbnVUcmVlIC5maXJzdFR4dHtcbnBhZGRpbmctbGVmdDo1cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OiAzNXB4O2xpbmUtaGVpZ2h0OiAzNXB4O1xufVxuLm1lbnVUcmVlIC50d29UeHR7XG5wYWRkaW5nLWxlZnQ6MjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7XG59XG4ubWVudVRyZWUgLnRocmVlVHh0e1xucGFkZGluZy1sZWZ0OjA7bGlzdC1zdHlsZS10eXBlOnNxdWFyZTs7ZGlzcGxheTppbmxpbmUtYmxvY2s7XG4vKiBoZWlnaHQ6IDMwcHg7ICovXG5saW5lLWhlaWdodDogMzBweDtcbn1cbi5tZW51VHJlZSAuZG90e1xubWFyZ2luLWxlZnQ6NDBweDtkaXNwbGF5OmlubGluZS1ibG9jaztcbi8qIGhlaWdodDogMzBweDsgKi9cbmxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuLm1lbnVUcmVlIC5pdnUtdHJlZS1hcnJvdyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA4cHg7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7XG4udXNlci1kcm9wZG93bi1tZW51LWNvbiB7XG4gICAgICAgIHdpZHRoOiA3MHB4O1xufVxuLml2dS1sYXlvdXQtY29udGVudHtcbiAgICAgICAgcGFkZGluZy10b3A6NjRweCFpbXBvcnRhbnQ7XG59XG59IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwibGF5b3V0XCI+XG4gICAgPGRpdiBpZD1cImxlZnRTbGlkZXJcIj5cbiAgICAgIDxTaWRlciByZWY9XCJzaWRlMVwiIGhpZGUtdHJpZ2dlciBjb2xsYXBzaWJsZSA6Y29sbGFwc2VkLXdpZHRoPVwiMFwiIHYtbW9kZWw9XCJpc0NvbGxhcHNlZFwiIDpzdHlsZT1cInsnb3ZlcmZsb3dZJzohaXNDb2xsYXBzZWQgPyAnYXV0byc6J3Zpc2libGUnLCdoZWlnaHQnOicxMDAlJ31cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29uXCI+XG4gICAgICAgICAgPGltZyB2LXNob3c9XCIhaXNDb2xsYXBzZWRcIiA6c3JjPVwibG9nb19TWVNURU1cIiBrZXk9XCJtYXgtbG9nb1wiIC8+XG4gICAgICAgICAgPGltZyB2LXNob3c9XCJpc0NvbGxhcHNlZFwiIDpzcmM9XCJsb2dvX1NZU1RFTV9zbVwiIGtleT1cIm1pbi1sb2dvXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtZW51VHJlZVwiPlxuICAgICAgICAgIDx1bCBjbGFzcz1cIm1lbnVUcmVlVWxcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImZpcnN0TGlcIiB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBkYXRhNVwiIDprZXk9XCJpbmRleFwiIHYtaWY9XCJkYXRhNSAmJiBkYXRhNS5sZW5ndGg+MFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlyc3QgXCIgOmNsYXNzPVwieydpdnUtdHJlZS1hcnJvdy1vcGVuJzppdGVtLmV4cGFuZCwnc2VsZWQnOml0ZW0uZXhwYW5kfVwiIEBjbGljaz1cInRhcE1lbnUoaXRlbS5QdXJ2aWV3Q29kZSwxLGl0ZW0uUGFyZW50Q29kZSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlyc3RUeHRcIj57eyR0KGl0ZW0uUHVydmlld05hbWUpfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXZ1LXRyZWUtYXJyb3dcIj48aSBjbGFzcz1cIml2dS1pY29uIGl2dS1pY29uLWlvcy1hcnJvdy1mb3J3YXJkXCI+PC9pPiA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNoaWxkcmVuXCIgdi1mb3I9XCIoaXRlbTEsaW5kZXgxKSBpbiBpdGVtLmNoaWxkcmVuXCIgOmtleT1cImluZGV4MVwiIHYtaWY9XCJpdGVtLmV4cGFuZCAmJiBpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPjBcIj5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHdvIFwiIDpjbGFzcz1cInsnaXZ1LXRyZWUtYXJyb3ctb3Blbic6aXRlbTEuZXhwYW5kICYmICFpdGVtMS5IcmVmLCdzZWxlZCc6aXRlbTEuZXhwYW5kfVwiIEBjbGljaz1cInRhcE1lbnUoaXRlbTEsMixpdGVtMS5QYXJlbnRDb2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHdvVHh0XCI+e3skdChpdGVtMS5QdXJ2aWV3TmFtZSl9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXZ1LXRyZWUtYXJyb3dcIj48aSBjbGFzcz1cIml2dS1pY29uIGl2dS1pY29uLWlvcy1hcnJvdy1mb3J3YXJkXCI+PC9pPiA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHVsIHYtZm9yPVwiKGl0ZW0yLGluZGV4MikgaW4gaXRlbTEuY2hpbGRyZW5cIiA6a2V5PVwiaW5kZXgyXCIgdi1pZj1cIiFpdGVtMS5IcmVmICYmIGl0ZW0xLmV4cGFuZCAmJiBpdGVtMS5jaGlsZHJlbiAmJiBpdGVtMS5jaGlsZHJlbi5sZW5ndGg+MFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvciB0aHJlZSBcIiA6Y2xhc3M9XCJ7J3NlbGVkJzppdGVtMi5leHBhbmR9XCIgQGNsaWNrPVwiaVNyYyhpdGVtMixpdGVtLlB1cnZpZXdDb2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRocmVlVHh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7JHQoaXRlbTIuUHVydmlld05hbWUpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L1NpZGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJsZWZ0RHJhd2VyXCI+XG4gICAgICA8RHJhd2VyIHYtbW9kZWw9XCJ2YWx1ZTJcIiA6aWQ9XCJ2YWx1ZTI/J2xlZnREcmF3ZXJTbWFsbHNjcmVlbic6JydcIiA6dGl0bGU9XCIkdCgn5bGV5Lya566h55CG57O757ufJylcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgOmNsb3NhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgPCEtLSDlt6bovrnoj5zljZXmoI/mlLnmiJDmoJHlvaLmlbDmja7nu5PmnoQgLS3njovnh5XljZcgLS0+XG4gICAgICAgIDxUcmVlIDpkYXRhPVwiZGF0YTVcIiA6cmVuZGVyPVwicmVuZGVyQ29udGVudFwiIEBvbi10b2dnbGUtZXhwYW5kPSd0b2dnbGVFeHBhbmQnPjwvVHJlZT5cbiAgICAgIDwvRHJhd2VyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO1wiPlxuICAgICAgPEhlYWRlciA6c3R5bGU9XCJ7YmFja2dyb3VuZDogJyNmZmYnLCBib3hTaGFkb3c6ICcwIDJweCAzcHggMnB4IHJnYmEoMCwwLDAsLjEpJ31cIj5cbiAgICAgICAgPCEtLSA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7XCI+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2aWNvbi1jb25cIj5cbiAgICAgICAgICA8QnV0dG9uIDpzdHlsZT1cInt0cmFuc2Zvcm06ICdyb3RhdGVaKCcgKyAodGhpcy5pc0NvbGxhcHNlZCA/ICctOTAnIDogJzAnKSArICdkZWcpJ31cIiB0eXBlPVwidGV4dFwiIEBjbGljay5uYXRpdmU9XCJjb2xsYXBzZWRTaWRlclwiPlxuICAgICAgICAgICAgPEljb24gdHlwZT1cIm1kLW1lbnVcIiBzaXplPVwiMzJcIj48L0ljb24+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxCdXR0b24gQGNsaWNrPVwidmFsdWUyID0gdHJ1ZVwiIGNsYXNzPVwic2hvd0RyYXdlclwiPnt7JHQoXCLmmL7npLroj5zljZXmoI9cIil9fTwvQnV0dG9uPlxuXG4gICAgICAgIDwhLS0g6Lez6L2s5YW25LuW57O757ufIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hvd0p1bXBMaXN0XCIgdi1pZj1cIiFpc0J1aWxkU2VydmljZVwiPlxuICAgICAgICAgIDxsYWJlbD57eyR0KFwi6Lez6L2s5YW25LuW57O757ufXCIpfX3vvJo8L2xhYmVsPlxuICAgICAgICAgIDxTZWxlY3Qgdi1tb2RlbD1cImN1cnJlbnRTeXNIcmVmXCIgc3R5bGU9XCJ3aWR0aDoxODBweFwiIDpwbGFjZWhvbGRlcj1cIiR0KCfor7fpgInmi6knKVwiIEBvbi1jaGFuZ2U9J2NoYW5nZVN5c0dyb3VwJz5cbiAgICAgICAgICAgIDxPcHRpb24gdi1mb3I9XCJpdGVtIGluIHN5c0dyb3VwTGlzdFwiIHYtaWY9XCJpdGVtLnNob3dDaGFuZWxcIiA6dmFsdWU9XCJpdGVtLnZhbHVlXCIgOmtleT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJpdGVtLnN5c0hyZWZcIj5cbiAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIml0ZW0uc3lzSHJlZlwiIHRhcmdldD1cIl9ibGFua1wiPnt7IGl0ZW0ubGFiZWwgfX08L2E+XG4gICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+e3sgaXRlbS5sYWJlbCB9fTwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgICA8L1NlbGVjdD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYW5ndWFnZVwiPuivreiogC9MYW5ndWFnZTo8YSA6c3R5bGU9XCJ7Y29sb3I6JGkxOG4ubG9jYWxlPT0nZW4tVVMnPydibGFjayc6J29yYW5nZSd9XCIgQGNsaWNrPVwiY2hhbmdlTGFuZ3VhZ2VIcmVmKCd6aC1DTicpXCI+5Lit5paHPC9hPiAmbmJzcDsmbmJzcDs8YSA6c3R5bGU9XCJ7Y29sb3I6JGkxOG4ubG9jYWxlPT0nemgtQ04nPydibGFjayc6J29yYW5nZSd9XCIgQGNsaWNrPVwiY2hhbmdlTGFuZ3VhZ2VIcmVmKCdlbi1VUycpXCI+RU5HTElTSDwvYT48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWRyb3Bkb3duLW1lbnUtY29uXCI+XG4gICAgICAgICAgPFJvdyB0eXBlPVwiZmxleFwiIGp1c3RpZnk9XCJlbmRcIiBhbGlnbj1cIm1pZGRsZVwiIGNsYXNzPVwidXNlci1kcm9wZG93bi1pbm5lcmNvblwiPlxuICAgICAgICAgICAgPERyb3Bkb3duIHRyYW5zZmVyIHRyaWdnZXI9XCJjbGlja1wiIEBvbi1jbGljaz1cImhhbmRsZUNsaWNrVXNlckRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdXNlci1uYW1lXCI+e3tVc2VyTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxJY29uIHR5cGU9XCJtZC1hcnJvdy1kcm9wZG93blwiPjwvSWNvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8RHJvcGRvd25NZW51IHNsb3Q9XCJsaXN0XCI+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duSXRlbSB2LWlmPVwiIWlzQnVpbGRTZXJ2aWNlXCIgbmFtZT1cIm93blNwYWNlXCI+e3skdChcIuS4quS6uuS/oeaBr1wiKX19PC9Ecm9wZG93bkl0ZW0+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duSXRlbSB2LWlmPVwiIWlzQnVpbGRTZXJ2aWNlXCIgbmFtZT1cIm1vZGlmeVB3ZFwiPnt7JHQoXCLkv67mlLnlr4bnoIFcIil9fTwvRHJvcGRvd25JdGVtPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bkl0ZW0gbmFtZT1cImxvZ2lub3V0XCI+e3skdChcIumAgOWHuueZu+W9lVwiKX19PC9Ecm9wZG93bkl0ZW0+XG4gICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICAgICAgIDwhLS0gPEF2YXRhciB2LWlmPVwiIW9uUGhvbmVcIiBzcmM9XCJodHRwczovL3NzMS5iZHN0YXRpYy5jb20vNzBjRnZYU2hfUTFZbnhHa3BvV0sxSEY2aGh5L2l0L3U9MzQ0ODQ4NDI1MywzNjg1ODM2MTcwJmZtPTI3JmdwPTAuanBnXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjNjE5ZmU3O21hcmdpbi1sZWZ0OiAxMHB4O1wiPjwvQXZhdGFyPiAtLT5cbiAgICAgICAgICA8L1Jvdz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgPC9IZWFkZXI+XG4gICAgICA8Q29udGVudCA6c3R5bGU9XCJ7aGVpZ2h0OicxMDAlJyxwYWRkaW5nOiAnNjRweCAxNnB4IDE2cHgnLG92ZXJmbG93WTonYXV0bycsbWFyZ2luVG9wOicxMHB4J31cIj5cbiAgICAgICAgPCEtLSA8QnJlYWRjcnVtYiBzdHlsZT1cImhlaWdodDoxMCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtcIj5cbiAgICAgICAgICA8QnJlYWRjcnVtYkl0ZW0+e3ticmVhZENydW1iSXRlbX19PC9CcmVhZGNydW1iSXRlbT5cbiAgICAgICAgPC9CcmVhZGNydW1iPiAtLT5cbiAgICAgICAgPENhcmQgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cbiAgICAgICAgICAgIDwhLS0g5Li76KaB5YaF5a655Yy65pS55oiQaWZyYW1l5Yqg6L295pa55byP77yM6YG/5YWN5q+P5qyh5Yqg6L296aG16Z2i6YO96KaB6YeN5paw5Yqg6L296I+c5Y2V5qGG5p6255qEbGF5b3V0IC0t546L54eV5Y2XICAtLT5cbiAgICAgICAgICAgIDxpZnJhbWUgaWQ9XCJwdWJsaWNCbG9ja1BhZ2VJZnJhbWVcIiA6c3JjPSdpZnJhbWVTcmMnIHN0eWxlPVwid2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtcIiBmcmFtZWJvcmRlcj1cIjBcIj48L2lmcmFtZT5cbiAgICAgICAgICAgIDwhLS0gPHNsb3QgbmFtZT1cIm1haW5cIj48L3Nsb3Q+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICA8L0NvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJjc3NcIj5cbmJvZHkge1xuICBtYXJnaW46IDAgMHB4O1xufVxuLml2dS1sYXlvdXQtc2lkZXIge1xuICBiYWNrZ3JvdW5kOiAjNDk1MDYwO1xufVxuYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmE6aG92ZXIge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYTp2aXNpdGVkIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmE6bGluayB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4uaXZ1LXNlbGVjdC1kcm9wZG93biB7XG4gIHdpZHRoOiBhdXRvO1xufVxuLmxhbmd1YWdlIHtcbiAgcGFkZGluZzogMCAyMHB4O1xufVxuQGltcG9ydCBcIi4uLy4uLy4uL2Fzc2V0L2Nzcy9nbG9iYWwuY3NzXCI7XG5AaW1wb3J0IFwiLi9tYWluLmNzc1wiO1xuXG4uaXZ1LW1lbnUtc3VibWVudS10aXRsZSB7XG4gIHBhZGRpbmc6IDhweCAyNHB4ICFpbXBvcnRhbnQ7XG59XG4uaXZ1LW1lbnUtdmVydGljYWwgLml2dS1tZW51LWl0ZW0gYSB7XG4gIHBhZGRpbmc6IDZweCAhaW1wb3J0YW50O1xufVxuXG4uaXZ1LXRyZWUge1xuICBwYWRkaW5nOiAwIDVweDtcbn1cbi5pdnUtdHJlZSBhIHtcbiAgY29sb3I6ICNmZmY7XG59XG4uaXZ1LXRyZWUgLml2dS10cmVlLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuLml2dS10cmVlLWFycm93LW9wZW4gaSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbn1cbi5pdnUtaWNvbi1hcnJvdy1yaWdodC1iOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxGMTE2XCI7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5zZWxlY3RlZCB7XG4gIGJhY2tncm91bmQ6ICNkNWU4ZmM7XG4gIC8qIHBhZGRpbmc6IDAgNHB4OyAqL1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjMzMzICFpbXBvcnRhbnQ7XG4gIC8qIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZS1pbi1vdXQ7XG4gICAgZm9udC1zaXplOiAxNnB4OyAqL1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4jbGVmdERyYXdlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4jbGVmdFNsaWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLnNob3dEcmF3ZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLnNob3dKdW1wTGlzdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDI1cHg7XG59XG4jbGVmdERyYXdlclNtYWxsc2NyZWVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAjbGVmdERyYXdlclNtYWxsc2NyZWVuIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuICAjbGVmdERyYXdlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbiAgI2xlZnRTbGlkZXIsXG4gIC5uYXZpY29uLWNvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAubGFuZ3VhZ2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMTIwcHg7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAuc2hvd0RyYXdlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAxOHB4IDAgMCAxOHB4O1xuICB9XG4gIC5zaG93SnVtcExpc3Qge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLml2dS10cmVlIGEsXG4gIC5pdnUtdHJlZSAuaXZ1LXRyZWUtYXJyb3cge1xuICAgIGNvbG9yOiAjMzMzO1xuICB9XG4gIC5pdnUtZHJvcGRvd24tcmVsID4gYSB7XG4gICAgd2lkdGg6IDgwcHg7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB9XG4gIC5pdnUtZHJvcGRvd24tcmVsID4gYSA+IHNwYW4ge1xuICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIH1cbn1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmF4aW9zLmRlZmF1bHRzLmhlYWRlcnMucG9zdFtcIkNvbnRlbnQtVHlwZVwiXSA9XG4gIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5WdWUucHJvdG90eXBlLiRheGlvcyA9IGF4aW9zO1xuXG4vLyBjb25zdCBNb2RlbCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9tb2Nrcy9zaHJpbmthYmxlTWVudS9tZW51TGlzdFwiKTtcbi8vIGNvbnN0IG1lbnVMaXN0ID0gTW9kZWwuZ2V0TWVudUxpc3QoKTtcbmltcG9ydCBDb29raWVzIGZyb20gXCJqcy1jb29raWVcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0J1aWxkU2VydmljZTogZmFsc2UsXG4gICAgICB0YWJsZUFycjogXCJcIixcbiAgICAgIFVzZXJOYW1lOiBcIlwiLFxuICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgdmFsdWUyOiBmYWxzZSxcbiAgICAgIG9uUGhvbmU6IGZhbHNlLFxuICAgICAgYnVpbGRidXNzaW5lc3M6IGZhbHNlLFxuICAgICAgY3VycmVudFN5c0hyZWY6IFwiXCIsXG4gICAgICBzeXNHcm91cExpc3Q6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICAgIGxhYmVsOiBcIue9keermeWQjuWPsOeuoeeQhuezu+e7n++8iOaWsO+8iVwiLFxuICAgICAgICAgIHNob3dDaGFuZWw6IHRydWUsXG4gICAgICAgICAgc3lzSHJlZjpcbiAgICAgICAgICAgIHRoaXMuUlVOX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiIHx8IHRoaXMuUlVOX0VOViA9PVwiYWxpdGVzdFwiXG4gICAgICAgICAgICAgID8gXCJodHRwOi8vNDcuNTYuMjQ2LjIxNDozMjA2L1wiXG4gICAgICAgICAgICAgIDogXCJodHRwOi8vY21zcGFuZWwuc25lYy5vcmcuY24vXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBsYWJlbDogXCLpgq7ku7bns7vnu5/vvIjmlrDvvIlcIixcbiAgICAgICAgICBzaG93Q2hhbmVsOiB0cnVlLFxuICAgICAgICAgIHN5c0hyZWY6XG4gICAgICAgICAgICB0aGlzLlJVTl9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiAgfHwgdGhpcy5SVU5fRU5WID09XCJhbGl0ZXN0XCJcbiAgICAgICAgICAgICAgPyBcImh0dHA6Ly80Ny41Ni4yNDYuMjE0OjMyMTMvXCJcbiAgICAgICAgICAgICAgOiBcImh0dHA6Ly9lbWFpbHBhbmVsLnNuZWMub3JnLmNuL1wiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgICAgbGFiZWw6IFwi55So5oi36KeS6Imy5p2D6ZmQ566h55CG57O757uf77yI5paw77yJXCIsXG4gICAgICAgICAgc2hvd0NoYW5lbDogdHJ1ZSxcbiAgICAgICAgICBzeXNIcmVmOlxuICAgICAgICAgICAgdGhpcy5SVU5fRU5WID09PSBcImRldmVsb3BtZW50XCIgIHx8IHRoaXMuUlVOX0VOViA9PVwiYWxpdGVzdFwiXG4gICAgICAgICAgICAgID8gXCJodHRwOi8vZGV2LXJvbGVwYW5lbC5zbmVjLm9yZy5jbi9cIiAvL1wiaHR0cDovLzQ3LjU2LjI0Ni4yMTQ6MzIwNS9cIlxuICAgICAgICAgICAgICA6IFwiaHR0cDovL3JvbGVwYW5lbC5zbmVjLm9yZy5jbi9cIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiA0LFxuICAgICAgICAgIGxhYmVsOiBcIui1i+iDveS4reW/g+ezu+e7n1wiLFxuICAgICAgICAgIHNob3dDaGFuZWw6IHRydWUsXG4gICAgICAgICAgc3lzSHJlZjogXCJodHRwczovL2FkbWluZ2dldHBhbmVsLnNuZWMub3JnLmNuL1wiLFxuICAgICAgICB9LFxuICAgICAgXSxcblxuICAgICAgSXNDRVM6IGZhbHNlLFxuICAgICAgSXNDSEZDOiBmYWxzZSxcbiAgICAgIElzRUhGQzogZmFsc2UsXG4gICAgICBJc0VFUzogZmFsc2UsXG4gICAgICBJc0NTTkVDOiBmYWxzZSxcbiAgICAgIElzRVNORUM6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWROb2RlOiBcIlwiLFxuICAgICAgZGF0YTU6IFtdLFxuICAgICAgY3R4U2Vzc2lvblVzZXJJbmZvOiB7fSxcbiAgICAgIGlmcmFtZVNyYzogXCIvaG9tZUluZGV4XCIsIC8v6buY6K6k6Lez5Yiw6aaW6aG1XG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICByb3RhdGVJY29uKCkge1xuICAgICAgcmV0dXJuIFtcIm1lbnUtaWNvblwiLCB0aGlzLmlzQ29sbGFwc2VkID8gXCJyb3RhdGUtaWNvblwiIDogXCJcIl07XG4gICAgfSxcbiAgICBtZW51aXRlbUNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gW1wibWVudS1pdGVtXCIsIHRoaXMuaXNDb2xsYXBzZWQgPyBcImNvbGxhcHNlZC1tZW51XCIgOiBcIlwiXTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2hhbmdlTGFuZ3VhZ2VIcmVmKHN0cikge1xuICAgICAgdGhpcy5jaGFuZ2VMYW5ndWFnZShzdHIpO1xuICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSxcbiAgICByZXR1cm5IcmVmKEhyZWYpIHtcbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy9leGhpYml0aW9uLycpID09IDApIHtcblxuICAgICAgICBIcmVmID0gSHJlZi5yZXBsYWNlKCcvZXhoaWJpdGlvbi8nLCAnLycpO1xuXG4gICAgICB9XG4gICAgICBpZiAoSHJlZi5pbmRleE9mKCcvY29uZmVyZW5jZS8nKSA9PSAwKSB7XG4gICAgICAgIEhyZWYgPSBIcmVmLnJlcGxhY2UoJy9jb25mZXJlbmNlLycsICcvJyk7XG5cbiAgICAgIH1cbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy91cGxvYWQvJykgPT0gMCkge1xuICAgICAgICBIcmVmID0gSHJlZi5yZXBsYWNlKCcvdXBsb2FkLycsICcvJyk7XG5cbiAgICAgIH1cbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy9tZW1iZXIvJykgPT0gMCkge1xuICAgICAgICBIcmVmID0gSHJlZi5yZXBsYWNlKCcvbWVtYmVyLycsICcvJyk7XG5cbiAgICAgIH1cbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy9maW5hbmNlLycpID09IDApIHtcbiAgICAgICAgSHJlZiA9IEhyZWYucmVwbGFjZSgnL2ZpbmFuY2UvJywgJy8nKTtcblxuICAgICAgfVxuXG4gICAgICBpZiAoSHJlZi5pbmRleE9mKCcvcGF5bWVudC8nKSA9PSAwKSB7XG4gICAgICAgIEhyZWYgPSBIcmVmLnJlcGxhY2UoJy9wYXltZW50LycsICcvJyk7XG5cbiAgICAgIH1cbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy9pbnZpdGUvJykgPT0gMCkge1xuICAgICAgICBIcmVmID0gSHJlZi5yZXBsYWNlKCcvaW52aXRlLycsICcvJyk7XG5cbiAgICAgIH1cbiAgICAgIGlmIChIcmVmLmluZGV4T2YoJy9leGhpYml0aW9uT3BlcmF0aW9uLycpID09IDApIHtcbiAgICAgICAgSHJlZiA9IEhyZWYucmVwbGFjZSgnL2V4aGliaXRpb25PcGVyYXRpb24vJywgJy8nKTtcblxuICAgICAgfVxuICAgICAgcmV0dXJuIEhyZWY7XG4gICAgfSxcbiAgICBpU3JjKHRoaXNEYXRhLCByb290Q29kZSkge1xuICAgICAgbGV0IHMgPSBDb29raWVzLmdldCgndXNlclBrJywgeyBzaWduZWQ6IGZhbHNlIH0pIHx8ICcnO1xuICAgICAgLy8gY29uc29sZS5sb2coJ0Nvb2tpZXMnLHMpO1xuICAgICAgaWYgKCFzKSB7XG4gICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIFwiL1wiKTtcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBcIi9sb2dpblwiO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coXCLngrnlh7vkuobvvJpcIiArIHRoaXNEYXRhLkhyZWYsIHRoaXNEYXRhLlB1cnZpZXdDb2RlKTtcbiAgICAgIC8vIHRoaXMuaWZyYW1lU3JjPXRoaXNEYXRhLkhyZWY7XG5cblxuICAgICAgdGhpc0RhdGEuSHJlZiA9IHRoaXMucmV0dXJuSHJlZih0aGlzRGF0YS5IcmVmKTtcbiAgICAgIGNvbnNvbGUubG9nKCcxMTExMTEtLScsIHRoaXNEYXRhLkhyZWYpO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwdWJsaWNCbG9ja1BhZ2VJZnJhbWVcIikuc3JjID0gdGhpc0RhdGEuSHJlZjtcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIFwiL3B1YmxpY0Jsb2NrUGFnZVwiKTtcbiAgICAgIHRoaXMuZGF0YTUuZm9yRWFjaCgodGVtMSkgPT4ge1xuICAgICAgICB0ZW0xLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0xKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0xLkhyZWYpIHtcbiAgICAgICAgICAgIGl0ZW0xLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVtMS5jaGlsZHJlbi5mb3JFYWNoKChpdGVtMikgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0yLlB1cnZpZXdDb2RlID09IHRoaXNEYXRhLlB1cnZpZXdDb2RlKSB7XG4gICAgICAgICAgICAgIGl0ZW0yLmV4cGFuZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpdGVtMi5leHBhbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmlmcmFtZVNyYycsdGhpcy5pZnJhbWVTcmMpO1xuICAgIH0sXG4gICAgdGFwTWVudShjb2RlLCBsZXZlbCwgcGFyZWNvZGUpIHtcbiAgICAgIGlmIChsZXZlbCA9PSAxKSB7XG4gICAgICAgIGxldCB0ZW0xID0gdGhpcy5kYXRhNS5maW5kKCh0KSA9PiB0LlB1cnZpZXdDb2RlID09IGNvZGUpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInRhcE1lbnVcIiwgdGVtMSk7XG4gICAgICAgIHRlbTEuZXhwYW5kID0gIXRlbTEuZXhwYW5kO1xuICAgICAgfVxuICAgICAgaWYgKGxldmVsID09IDIpIHtcbiAgICAgICAgbGV0IHRlbTIgPSBcIlwiO1xuICAgICAgICBpZiAoY29kZS5IcmVmKSB7XG4gICAgICAgICAgY29kZS5IcmVmID0gdGhpcy5yZXR1cm5IcmVmKGNvZGUuSHJlZik7XG4gICAgICAgICAgdGhpcy5kYXRhNS5mb3JFYWNoKCh0ZW0yKSA9PiB7XG4gICAgICAgICAgICB0ZW0yLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uUHVydmlld0NvZGUgPT0gY29kZS5QdXJ2aWV3Q29kZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75LqG77yaXCIgKyBjb2RlLkhyZWYsIGNvZGUuUHVydmlld0NvZGUpO1xuXG4gICAgICAgICAgICAgICAgaXRlbS5leHBhbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVibGljQmxvY2tQYWdlSWZyYW1lXCIpLnNyYyA9XG4gICAgICAgICAgICAgICAgICBjb2RlLkhyZWY7XG4gICAgICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgXCIvcHVibGljQmxvY2tQYWdlXCIpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uSHJlZiAmJiBpdGVtLkhyZWYgIT0gY29kZS5IcmVmKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5leHBhbmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0yKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbTIuZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIC8vICBpZihpdGVtLlB1cnZpZXdDb2RlPT1jb2RlLlB1cnZpZXdDb2RlKXtcbiAgICAgICAgICAgICAgLy8gICBpdGVtLmV4cGFuZD0haXRlbS5leHBhbmQ7XG4gICAgICAgICAgICAgIC8vICB9XG5cbiAgICAgICAgICAgICAgLy8gaXRlbS5leHBhbmQ9PXRydWU/YWZsYWcrKzphZmxhZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRlbTIgPSB0aGlzLmRhdGE1LmZpbmQoKHQpID0+IHQuUHVydmlld0NvZGUgPT0gcGFyZWNvZGUpO1xuICAgICAgICAgIHRlbTIuY2hpbGRyZW4uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uUHVydmlld0NvZGUgPT0gY29kZS5QdXJ2aWV3Q29kZSkge1xuICAgICAgICAgICAgICBpdGVtLmV4cGFuZCA9ICFpdGVtLmV4cGFuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaXRlbS5leHBhbmQ9PXRydWU/YWZsYWcrKzphZmxhZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBsZXQgYWZsYWc9MDtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YXBNZW51MlwiLCB0ZW0yKTtcblxuICAgICAgICAvLyBhZmxhZz4wP3RlbTIuZXhwYW5kPXRydWU6dGVtMi5leHBhbmQ9ZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyDojrflj5bkv53ljZXoj5zljZXmmK/lkKbmnInkv53ljZXmlbDph4/vvIzml6Dkv53ljZXmlbDph4/kuI3mmL7npLpcbiAgICBnZXRQb2xpY2VNWFNvdXJjZShwYWdlQ29kZSwgTUFYREFUQSkge1xuXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgY29sbGFwc2VkU2lkZXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLnNpZGUxLnRvZ2dsZUNvbGxhcHNlKCk7XG4gICAgfSxcblxuICAgIGNoYW5nZVN5c0dyb3VwKHZhbHVlKSB7IH0sXG5cbiAgICBoYW5kbGVDbGlja1VzZXJEcm9wZG93bihuYW1lKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJvd25TcGFjZVwiKSB7XG4gICAgICAgIC8vIC0t546L54eV5Y2XXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVibGljQmxvY2tQYWdlSWZyYW1lXCIpLnNyYyA9IFwiL293blNwYWNlXCI7XG4gICAgICAgIC8vIOWwhui3s+i9rOmTvuaOpeWtmOWcqGNvb2tpZXPph4ws6YG/5YWN5Yi35paw5rWP6KeI5Zmo5pe277yMaWZyYW1l6YO95Lya5Y+Y5oiQ6buY6K6k6aG16Z2iaG9tZUluZGV477yM6ICM5LiN5piv5b2T5YmN6aG16Z2iXG4gICAgICAgIENvb2tpZXMuc2V0KFwiaWZyYW1lU3JjXCIsIFwiL293blNwYWNlXCIpO1xuICAgICAgICAvLyB1dGlsLm9wZW5OZXdQYWdlKHRoYXQsICdvd25zcGFjZV9pbmRleCcpO1xuICAgICAgICAvLyB0aGF0LiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIC8vICAgICBuYW1lOiAnb3duc3BhY2VfaW5kZXgnXG4gICAgICAgIC8vIH0pO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSBcImxvZ2lub3V0XCIpIHtcbiAgICAgICAgLy8gLy8g5YWI5riF6Zmk57yT5a2YXG4gICAgICAgIENvb2tpZXMucmVtb3ZlKFwiY3NyZl90b2tlblwiKTtcbiAgICAgICAgQ29va2llcy5yZW1vdmUoXCJVc2VyTmFtZVwiKTtcbiAgICAgICAgQ29va2llcy5yZW1vdmUoXCJNYXhDXCIpO1xuICAgICAgICBDb29raWVzLnJlbW92ZShcIk1heEVcIik7XG4gICAgICAgIENvb2tpZXMucmVtb3ZlKFwiaWZyYW1lU3JjXCIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygndG9wLmxvY2F0aW9uJyx0b3AubG9jYXRpb24pO1xuICAgICAgICAvLyDpgIDlh7rnmbvlvZVcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBcIi9sb2dpblwiO1xuICAgICAgICAvLyB3aW5kb3cudG9wLmxvY2F0aW9uLnJlbG9hZChcIi9sb2dpblwiKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJtb2RpZnlQd2RcIikge1xuICAgICAgICAvLyDkv67mlLnlr4bnoIEgLS3njovnh5XljZdcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwdWJsaWNCbG9ja1BhZ2VJZnJhbWVcIikuc3JjID0gXCIvbW9kaWZ5UHdkXCI7XG4gICAgICAgIC8vIOWwhui3s+i9rOmTvuaOpeWtmOWcqGNvb2tpZXPph4ws6YG/5YWN5Yi35paw5rWP6KeI5Zmo5pe277yMaWZyYW1l6YO95Lya5Y+Y5oiQ6buY6K6k6aG16Z2iaG9tZUluZGV477yM6ICM5LiN5piv5b2T5YmN6aG16Z2iXG4gICAgICAgIENvb2tpZXMuc2V0KFwiaWZyYW1lU3JjXCIsIFwiL21vZGlmeVB3ZFwiKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6YCS5b2SIOWFiOaKiueItuS6suiKgueCueWPluWHuuadpe+8jOaUvui/m+S4gOS4quaVsOe7hGRhdGFBcnJheSAgIC0t546L54eV5Y2XXG4gICAgZGF0YTJ0cmVlKGRhdGFzKSB7XG4gICAgICBsZXQgZGF0YUFycmF5ID0gW107XG4gICAgICBkYXRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IFBhcmVudENvZGUgPSBkYXRhLlBhcmVudENvZGU7XG4gICAgICAgIGlmIChQYXJlbnRDb2RlID09IFwiRVhIQ0ZTWVNcIikge1xuICAgICAgICAgIGxldCBvYmpUZW1wID0gZGF0YTtcbiAgICAgICAgICAvLyBvYmpUZW1wLmV4cGFuZCA9IGZhbHNlO1xuXG4gICAgICAgICAgZGF0YUFycmF5LnB1c2gob2JqVGVtcCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTJ0cmVlREcoZGF0YXMsIGRhdGFBcnJheSk7XG4gICAgfSxcbiAgICAvLyBkYXRhQXJyYXkg54i26IqC54K557uE5oiQ55qE5pWw57uEICBkYXRhc+S4uuaJgOacieaVsOaNriAgLS3njovnh5XljZdcbiAgICBkYXRhMnRyZWVERyhkYXRhcywgZGF0YUFycmF5LCBVUkxwYXJhbSA9ICcnKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGFBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgZGF0YUFycmF5T2JqID0gZGF0YUFycmF5W2pdO1xuICAgICAgICBsZXQgVXBhcmFtID0gVVJMcGFyYW07XG4gICAgICAgIGxldCBjaGlsZHJlbkFycmF5ID0gW107XG4gICAgICAgIGxldCBQdXJ2aWV3Q29kZSA9IGRhdGFBcnJheU9iai5QdXJ2aWV3Q29kZTtcbiAgICAgICAgLy8g5aKe5YqgdXJs5Y+C5pWw5Lyg6YCSXG4gICAgICAgIGlmICghVXBhcmFtKSB7XG4gICAgICAgICAgaWYgKGRhdGFBcnJheU9iai5QYXJhbWV0ZXIpIHtcbiAgICAgICAgICAgIFVwYXJhbSA9IGRhdGFBcnJheU9iai5QYXJhbWV0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBkYXRhID0gZGF0YXNbaV07XG4gICAgICAgICAgbGV0IFBhcmVudENvZGUgPSBkYXRhLlBhcmVudENvZGU7XG4gICAgICAgICAgaWYgKFBhcmVudENvZGUgPT0gUHVydmlld0NvZGUpIHtcbiAgICAgICAgICAgIC8v5Yik5pat5piv5ZCm5Li65YS/5a2Q6IqC54K5XG5cbiAgICAgICAgICAgIGxldCBvYmpUZW1wID0gZGF0YTtcbiAgICAgICAgICAgIG9ialRlbXAuZXhwYW5kID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIW9ialRlbXAuUGFyYW1ldGVyICYmIG9ialRlbXAuSHJlZikge1xuICAgICAgICAgICAgICBsZXQgdHVwID0gdGhpcy5xdWVyeVVSTHBhcmFtc1JlZ0VzNihvYmpUZW1wLkhyZWYpO1xuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhvYmpUZW1wLkhyZWYsdHVwKVxuICAgICAgICAgICAgICBsZXQgc3RycGFyYSA9IFwiXCI7XG4gICAgICAgICAgICAgIGxldCBqc29uT2JqID0gdGhpcy5KU09OaXQoVXBhcmFtKTtcbiAgICAgICAgICAgICAgaWYgKGpzb25PYmopIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4ganNvbk9iaikge1xuXG4gICAgICAgICAgICAgICAgICBzdHJwYXJhID0gc3RycGFyYSArIGtleSArICc9JyArIGpzb25PYmpba2V5XSArIFwiJlwiO1xuICAgICAgICAgICAgICAgICAgLy8ga2V5QXJ5LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgIC8vIHZhbHVlQXJ5LnB1c2goanNvbk9ialtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHR1cCkgPT0gXCJ7fVwiKSB7XG4gICAgICAgICAgICAgICAgICBvYmpUZW1wLkhyZWYgPSBvYmpUZW1wLkhyZWYgKyBcIj9cIiArIHN0cnBhcmEuc3Vic3RyaW5nKDAsIHN0cnBhcmEubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG9ialRlbXAuSHJlZiA9IG9ialRlbXAuSHJlZiArIFwiJlwiICsgc3RycGFyYS5zdWJzdHJpbmcoMCwgc3RycGFyYS5sZW5ndGggLSAxKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgLy8gb2JqVGVtcC5VUkxwYXJhbT1VUkxwYXJhbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoaWxkcmVuQXJyYXkucHVzaChvYmpUZW1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGF0YUFycmF5T2JqLmNoaWxkcmVuID0gY2hpbGRyZW5BcnJheTtcbiAgICAgICAgaWYgKGNoaWxkcmVuQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8v5pyJ5YS/5a2Q6IqC54K55YiZ6YCS5b2SXG4gICAgICAgICAgdGhpcy5kYXRhMnRyZWVERyhkYXRhcywgY2hpbGRyZW5BcnJheSwgVXBhcmFtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBVcGFyYW0gPSBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YUFycmF5O1xuICAgIH0sXG4gICAgSlNPTml0KHN0cikge1xuICAgICAgaWYgKHR5cGVvZiBzdHIgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvYmogPT0gXCJvYmplY3RcIiAmJiBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9y77yaXCIgKyBzdHIgKyBcIiEhIVwiICsgZSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkl0IGlzIG5vdCBhIHN0cmluZyFcIik7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgfSxcbiAgICBxdWVyeVVSTHBhcmFtc1JlZ0VzNih1cmwpIHtcbiAgICAgIGxldCBvYmogPSB7fVxuICAgICAgbGV0IHJlZyA9IC8oW14/PSZdKyk9KFtePz0mXSspL2dcbiAgICAgIHVybC5yZXBsYWNlKHJlZywgKC4uLmFyZykgPT4ge1xuICAgICAgICBvYmpbYXJnWzFdXSA9IGFyZ1syXVxuICAgICAgfSlcbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuICAgIC8vIOa4suafk+iPnOWNleWIl+ihqCAgLS3njovnh5XljZdcbiAgICByZW5kZXJDb250ZW50KGgsIHsgcm9vdCwgbm9kZSwgZGF0YSB9KSB7XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjkwJVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBoKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAvLyDorr7nva7pgInkuK3lvZPliY3oioLngrnml7bnmoTmoLflvI/lkozkuovku7ZcbiAgICAgICAgICAgICAgaChcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBocmVmOlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEuSHJlZiA9PT0gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiL3B1YmxpY0Jsb2NrUGFnZT9pZnJhbWVTcmM9XCIgKyBkYXRhLkhyZWYsXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldDonX2JsYW5rJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAvLyBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS5QdXJ2aWV3TmFtZS5pbmRleE9mKFwi5LiT5Yy6XCIpICE9IC0xID8gXCIxNXB4XCIgOiBcIjEzcHhcIixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiBcIm5vd3JhcFwiLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcInRvcFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9PSBub2RlLm5vZGUuUHVydmlld0NvZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNoaWxkcmVuLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgID8gXCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8v6Zi75q2iYeagh+etvueahOm7mOiupGhyZWbot7Povazkuovku7ZcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiiq+eCueWHu+S6hlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IGRhdGEuUHVydmlld0NvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwdWJsaWNCbG9ja1BhZ2VJZnJhbWVcIikuc3JjID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuSHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAvLyDorr7nva7mlrDnqpflj6PmiZPlvIDpk77mjqXlho3mrKHngrnlh7vlt6bovrnoj5zljZXmtY/op4jlmajlnLDlnYDlj4LmlbDkuI3mlLnlj5jnmoTpl67pophcbiAgICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBcIlwiLCBcIi9wdWJsaWNCbG9ja1BhZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgLy8g5bCG6Lez6L2s6ZO+5o6l5a2Y5ZyoY29va2llc+mHjCzpgb/lhY3liLfmlrDmtY/op4jlmajml7bvvIxpZnJhbWXpg73kvJrlj5jmiJDpu5jorqTpobXpnaJob21lSW5kZXjvvIzogIzkuI3mmK/lvZPliY3pobXpnaJcbiAgICAgICAgICAgICAgICAgICAgICBDb29raWVzLnNldChcImlmcmFtZVNyY1wiLCBkYXRhLkhyZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat5piv5ZCm5piv5omL5py656uv77yM5aaC5p6c5omL5py656uv5YiZ54K55Ye76I+c5Y2V5ZCO6Ieq5Yqo5YWz6Zet6I+c5Y2V5qCP5oq95bGJIC0t546L54eV5Y2XXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlMiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbZGF0YS5QdXJ2aWV3TmFtZV1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIGgoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgIGZsb2F0OiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQ6IFwiMzJweFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKSxcbiAgICAgICAgXVxuICAgICAgKTtcbiAgICB9LFxuICAgIC8vIOaOp+WItuWxleW8gOaUtue8qSAgLS3njovnh5XljZdcbiAgICB0b2dnbGVFeHBhbmQoZGF0YSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ+W9k+WJjeiKgueCuScsZGF0YSk7XG4gICAgfSxcblxuXG4gICAgLy8g6I635Y+WdXJs5Lyg6YCS55qE5Y+C5pWwIOivpeaWueazleeUqOS6juWkhOeQhueUqOaIt+WPs+mUrueCueWHu+iPnOWNleWQjeensOWcqOaWsOeql+WPo+aJk+W8gOmhtemdouaXtuWPquWKoOi9veWNlemhte+8jOiAjOS4jeaYr+aVtOS4quahhuaetueahOmXrumimCAtLeeOi+eHleWNl1xuICAgIGdldFJlcXVlc3QoKSB7XG4gICAgICBsZXQgdXJsID0gZGVjb2RlVVJJKGxvY2F0aW9uLnNlYXJjaCk7IC8v6I635Y+WdXJs5LitXCI/XCLnrKblkI7nmoTlrZfkuLIg6Kej56CBVVRGLTgs6Kej5Yaz5Lit5paH5Lmx56CBXG4gICAgICAvLyBjb25zb2xlLmxvZyh1cmwpXG4gICAgICBsZXQgdGhlUmVxdWVzdCA9IHt9O1xuXG4gICAgICBpZiAodXJsLmluZGV4T2YoXCI/XCIpICE9IC0xKSB7XG4gICAgICAgIGxldCBzdHIgPSB1cmwuc3Vic3RyaW5nKHVybC5pbmRleE9mKFwiP1wiKSArIDEpO1xuICAgICAgICAvLyB2YXIgc3RyID0gc3RyLnN1YnN0cigxKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyKTtcbiAgICAgICAgbGV0IHN0cnMgPSBzdHIuc3BsaXQoXCImXCIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJzKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdGhlUmVxdWVzdFtzdHJzW2ldLnNwbGl0KFwiPVwiKVswXV0gPSB1bmVzY2FwZShzdHJzW2ldLnNwbGl0KFwiPVwiKVsxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKHRoZVJlcXVlc3QpO1xuICAgICAgaWYgKHRoZVJlcXVlc3QuaWZyYW1lU3JjKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVibGljQmxvY2tQYWdlSWZyYW1lXCIpLnNyYyA9XG4gICAgICAgICAgdGhlUmVxdWVzdC5pZnJhbWVTcmM7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gdGhlUmVxdWVzdDtcbiAgICB9LFxuXG4gICAgLy8g6I635Y+WY3R4LnNlc3Npb24udXNlckluZm8gLS3njovnh5XljZdcbiAgICBnZXRDdHhTZXNzaW9uVXNlckluZm8oKSB7XG4gICAgICB0aGlzLmN0eFNlc3Npb25Vc2VySW5mbyA9IEpTT04ucGFyc2UodGhpcy4kcm9vdC51c2VySW5mbyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcInRoaXMuY3R4U2Vzc2lvblVzZXJJbmZvXCIsIHRoaXMuY3R4U2Vzc2lvblVzZXJJbmZvKTtcbiAgICAgIGxldCBhcnIgPSBbXG4gICAgICAgIFwiU1VQUExJRVJTUEVDSUFMQlVJTERcIixcbiAgICAgICAgXCJTVVBQTElFUk1BSk9SQlVJTERcIixcbiAgICAgICAgXCJTVVBQTElFUk1BSk9SVFJBTlNcIixcbiAgICAgIF07IC8vIOaQreW7uuWVhuinkuiJsmNvZGUgO+aQreW7uueuoeeQhi3pmYjoi4/ntKBcdEJVSUxESEfmraTmnYPpmZDkuI3lj5fmjqfliLZcbiAgICAgIGlmICh0aGlzLmN0eFNlc3Npb25Vc2VySW5mbyAmJiB0aGlzLmN0eFNlc3Npb25Vc2VySW5mby5Sb2xlQ29kZUxpc3QpIHtcbiAgICAgICAgbGV0IHJvbGxpc3RBcnIgPSB0aGlzLmN0eFNlc3Npb25Vc2VySW5mby5Sb2xlQ29kZUxpc3Quc3BsaXQoXCIsXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJvbGxpc3RBcnJcIiwgcm9sbGlzdEFycilcbiAgICAgICAgaWYgKCFyb2xsaXN0QXJyLmZpbmQoKHQpID0+IHQgPT0gXCJCVUlMREhHXCIpKSB7XG4gICAgICAgICAgcm9sbGlzdEFyci5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFhYWFhYVwiKTtcbiAgICAgICAgICAgIGlmIChhcnIuZmluZCgodCkgPT4gdCA9PSBpdGVtKSkge1xuICAgICAgICAgICAgICB0aGlzLm9uUGhvbmUgPSB0cnVlOyAvLyDlgJ/nlKjlvIDlhbNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnVXNlckRlcHQnLCB0aGlzLmN0eFNlc3Npb25Vc2VySW5mbylcbiAgICAgICAgaWYgKHRoaXMuY3R4U2Vzc2lvblVzZXJJbmZvLlVzZXJEZXB0ID09IFwiQlVJTERcIlxuICAgICAgICAgICYmICEodGhpcy5jdHhTZXNzaW9uVXNlckluZm8uUm9sZUNvZGVMaXN0LmluZGV4T2YoJ0JVSUxESEcnKSA+IC0xKVxuICAgICAgICAgICYmICEodGhpcy5jdHhTZXNzaW9uVXNlckluZm8uUm9sZUNvZGVMaXN0LmluZGV4T2YoJ0JVSUxEU0VSVklDRVMnKSA+IC0xKVxuICAgICAgICAgICYmICEodGhpcy5jdHhTZXNzaW9uVXNlckluZm8uUm9sZUNvZGVMaXN0LmluZGV4T2YoJ0hPVEVMTUFOR0VSTUVOVCcpID4gLTEpXG4gICAgICAgICAgJiYgISh0aGlzLmN0eFNlc3Npb25Vc2VySW5mby5Sb2xlQ29kZUxpc3QuaW5kZXhPZignRklSU1RFWEFNSU5FJykgPiAtMSlcbiAgICAgICAgICAmJiAhKHRoaXMuY3R4U2Vzc2lvblVzZXJJbmZvLlJvbGVDb2RlTGlzdC5pbmRleE9mKCdFWEhBU1NJU1RBTlQnKSA+IC0xKSAgICAgICAgIFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmlzQnVpbGRTZXJ2aWNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyDlrofmlbDmjqfliLZcbiAgICAgICAgaWYodGhpcy5jdHhTZXNzaW9uVXNlckluZm8uUm9sZUNvZGVMaXN0LmluZGV4T2YoJ1lTSlFSJykgPiAtMSl7XG4gICAgICAgICAgdGhpcy5pc0J1aWxkU2VydmljZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2lzQnVpbGRTZXJ2aWNlJywgdGhpcy5pc0J1aWxkU2VydmljZSlcbiAgICAgIH1cbiAgICAgIC8vIOWwhnJvbGVjb2RlbGlzdOWtmOWIsGNvb2tpZXPph4xcbiAgICAgIC8vIENvb2tpZXMuc2V0KCdSb2xlQ29kZUxpc3QnLHRoaXMuY3R4U2Vzc2lvblVzZXJJbmZvLlJvbGVDb2RlTGlzdC50b1N0cmluZygpKTtcbiAgICAgIC8vIOiOt+WPluiPnOWNleadg+mZkOWIl+ihqOaVsOaNrlxuICAgICAgdGhpcy5nZXRQdXJ2aWV3RGljKCk7XG5cbiAgICB9LFxuXG4gICAgLy8g6I635Y+W6I+c5Y2V5p2D6ZmQ5YiX6KGo5pWw5o2uIC0t546L54eV5Y2XXG4gICAgZ2V0UHVydmlld0RpYygpIHtcbiAgICAgIGNvbnN0IGNzcmZfdG9rZW4gPSBDb29raWVzLmdldChcImNzcmZfdG9rZW5cIik7XG4gICAgICAvL+aPkOS6pHBvc3Tor7fmsYIgIOiOt+WPluaJgOacieeahOWll+mkkOWIl+ihqFxuICAgICAgYXhpb3Moe1xuICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJ4LWF1dGgtdG9rZW5cIjogY3NyZl90b2tlbixcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvcGxhaW5cIixcbiAgICAgICAgfSxcbiAgICAgICAgdXJsOlxuICAgICAgICAgIC8vdGhpcy5IT1NUX0RFRkFVTFQgKyBcIkdycGNSb2xlU2VydmljZS5Sb2xlU2VydmljZVRvR3JwYy9HZXRQdXJ2aWV3RGljXCIsXG4gICAgICAgICB0aGlzLkhPU1RfREVGQVVMVCArIFwiR3JwY1JvbGVTZXJ2aWNlTmV3LlJvbGVTZXJ2aWNlVG9HcnBjL0dldFB1cnZpZXdEaWNcIixcbiAgICAgICAgZGF0YToge30sIC8vIGRhdGE6e31cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgICAgbGV0IGRhdGFzID0gcmVzLmRhdGEubGlzdGRhdGE7XG4gICAgICAgICAgICBsZXQgUHVydmlld0NvZGVzID0gdGhpcy5jdHhTZXNzaW9uVXNlckluZm8uUHVydmlld0NvZGVzLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgIGxldCBuZXdEYXRhID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIGRhdGFzW2ldLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IFB1cnZpZXdDb2Rlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChQdXJ2aWV3Q29kZXNbal0gPT09IGRhdGFzW2ldLlB1cnZpZXdDb2RlKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgc2hvd2ZsYWcgPSB0aGlzLmdldFBvbGljZU1YU291cmNlKFxuICAgICAgICAgICAgICAgICAgICBQdXJ2aWV3Q29kZXNbal0sXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UodGhpcy4kcm9vdC51c2VySW5mbykuVXNlclBvbGljeUxpc3RcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImdldFBvbGljZU1YU291cmNlXCIsIFB1cnZpZXdDb2Rlc1tqXSwgc2hvd2ZsYWcsSlNPTi5wYXJzZSh0aGlzLiRyb290LnVzZXJJbmZvKS5Vc2VyUG9saWN5TGlzdCk7XG4gICAgICAgICAgICAgICAgICBpZiAoc2hvd2ZsYWcgPT0gdHJ1ZSAmJiBkYXRhc1tpXS5TaG93KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzW2ldLmV4cGFuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBuZXdEYXRhLnB1c2goZGF0YXNbaV0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FhJyxuZXdEYXRhKTtcbiAgICAgICAgICAgIGlmIChuZXdEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbmV3RGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uSHJlZiA9IHRoaXMucmV0dXJuSHJlZihpdGVtLkhyZWYpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAvL+iwg+eUqGRhdGEydHJlZeWHveaVsCDmiopqc29u5pWw57uE6L2s5oiQ5qCR5Z6L5pWw5o2u57uT5p6EXG4gICAgICAgICAgICAgIGxldCB0cmVlRGF0YXMgPSB0aGlzLmRhdGEydHJlZShuZXdEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhNSA9IHRyZWVEYXRhcztcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coNTU1LCB0aGlzLmRhdGE1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICB9KTtcbiAgICB9LFxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIC8vIOS4jeiDveeUn+aViO+8jOa1j+iniOWZqOeahOWIt+aWsOaYr+WFqOWxgOWIt+aWsO+8jOaOp+WItuWxgOmDqOWIt+aWsOS4jeeUn+aViCDvvIzov5nkuKrpl67popjot5/ogIHns7vnu5/kuIDmoLcgIC0t546L54eV5Y2XXG4gICAgLy8g55uR5ZCs6aG16Z2i5Yi35paw5LqL5Lu2ICDlpoLmnpzpobXpnaLop6blj5HliLfmlrDvvIzliJlpZnJhbWVTcmPnmoTlnLDlnYDlupTor6Xkv53nlZnkuYvliY3nmoTlnLDlnYDvvIzogIzkuI3mmK/lm57liLAvaG9tZUluZGV4IC0t546L54eV5Y2XXG4gICAgLy8gd2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCfop6blj5HliLfmlrAnKTtcbiAgICAvLyAgICAvL+WIpOaWrWNvb2tpZemHjOacieWAvOWGjei/m+ihjGlmcmFtZemhtemdouWIt+aWsO+8jOmBv+WFjS9sb2dpbui3s+i9rOeahOaXtuWAmeS5n+aJp+ihjOWIt+aWsOmAu+i+kVxuICAgIC8vICAgaWYoQ29va2llcy5nZXQoJ2lmcmFtZVNyYycpKXtcbiAgICAvLyAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3B1YmxpY0Jsb2NrUGFnZUlmcmFtZScpLnNyYz0gQ29va2llcy5nZXQoJ2lmcmFtZVNyYycpO1xuICAgIC8vICAgfVxuICAgIC8vIH07XG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IHdpbmRvd193aWR0aCA9XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcbiAgICBjb25zb2xlLmxvZyhcIndpbmRvd193aWR0aFwiLCB3aW5kb3dfd2lkdGgpO1xuICAgIGlmICh3aW5kb3dfd2lkdGggPCAxMDI0KSB7XG4gICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMub25QaG9uZSA9IHRydWU7XG4gICAgfVxuICAgIC8vIE9iamVjdC5hc3NpZ24odGhpcy4kZGF0YSwgdGhpcy4kb3B0aW9ucy5kYXRhKCkpO1xuICAgIGNvbnNvbGUubG9nKFwiUlVOX0VOVlwiLCB0aGlzLlJVTl9FTlYsIHRoaXMpO1xuICAgIHRoaXMuVXNlck5hbWUgPSBDb29raWVzLmdldChcIlVzZXJOYW1lXCIpO1xuICAgIFxuICAgIC8vIGNvbnNvbGUubG9nKCdtZW51TGlzdCcsIHRoaXMubWVudUxpc3QpO1xuICAgIC8vIC8vIOiOt+WPlmN0eC5zZXNzaW9uLnVzZXJJbmZvIC0t546L54eV5Y2XXG4gICAgdGhpcy5nZXRDdHhTZXNzaW9uVXNlckluZm8oKTtcbiAgICB0aGlzLnN5c0dyb3VwTGlzdFswXS5sYWJlbCA9IHRoaXMuJHQoXCLnvZHnq5nlkI7lj7DnrqHnkIbns7vnu59cIik7XG4gICAgdGhpcy5zeXNHcm91cExpc3RbMV0ubGFiZWwgPSB0aGlzLiR0KFwi6YKu5Lu257O757ufXCIpO1xuICAgIHRoaXMuc3lzR3JvdXBMaXN0WzJdLmxhYmVsID0gdGhpcy4kdChcIueUqOaIt+inkuiJsuadg+mZkOeuoeeQhuezu+e7n1wiKTtcbiAgIFxuXG4gIH0sXG59O1xuPC9zY3JpcHQ+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgdi1pZj0nIWN1cnJlbnRJbWcnPlxuICAgICAgICAgICAgPHRlbXBsYXRlPuWbvueJh+WKoOi9veS4re+8jOivt+eojeWAmS4uLjwvdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2xpZGUtdmVyaWZ5XCIgOnN0eWxlPVwie3dpZHRoOiB3ICsgJ3B4J31cIiBpZD1cInNsaWRlVmVyaWZ5XCIgb25zZWxlY3RzdGFydD1cInJldHVybiBmYWxzZTtcIj5cbiAgICAgICAgICAgIDwhLS0g5Zu+54mH5Yqg6L296YGu6JS9572pIC0tPlxuICAgICAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7J3NsaWRlci12ZXJpZnktbG9hZGluZyc6IGxvYWRCbG9ja31cIj48L2Rpdj5cbiAgICAgICAgICAgIDxjYW52YXMgOndpZHRoPVwid1wiIDpoZWlnaHQ9XCJoXCIgcmVmPVwiY2FudmFzXCIgPjwvY2FudmFzPlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwic2hvd1wiIEBjbGljaz1cInJlZnJlc2hTbGlkZXJcIiBjbGFzcz1cInNsaWRlLXZlcmlmeS1yZWZyZXNoLWljb25cIj48L2Rpdj5cbiAgICAgICAgICAgIDxjYW52YXMgOndpZHRoPVwid1wiIDpoZWlnaHQ9XCJoXCIgcmVmPVwiYmxvY2tcIiAgY2xhc3M9XCJzbGlkZS12ZXJpZnktYmxvY2tcIj48L2NhbnZhcz5cbiAgICAgICAgICAgIDwhLS0gY29udGFpbmVyIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsaWRlLXZlcmlmeS1zbGlkZXJcIiA6Y2xhc3M9XCJ7J2NvbnRhaW5lci1hY3RpdmUnOiBjb250YWluZXJBY3RpdmUsICdjb250YWluZXItc3VjY2Vzcyc6IGNvbnRhaW5lclN1Y2Nlc3MsICdjb250YWluZXItZmFpbCc6IGNvbnRhaW5lckZhaWx9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsaWRlLXZlcmlmeS1zbGlkZXItbWFza1wiIDpzdHlsZT1cInt3aWR0aDogc2xpZGVyTWFza1dpZHRofVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIHNsaWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBAbW91c2Vkb3duPVwic2xpZGVyRG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAdG91Y2hzdGFydD1cInRvdWNoU3RhcnRFdmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAdG91Y2htb3ZlPVwidG91Y2hNb3ZlRXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgQHRvdWNoZW5kPVwidG91Y2hFbmRFdmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cIntsZWZ0OiBzbGlkZXJMZWZ0fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtLWljb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGlkZS12ZXJpZnktc2xpZGVyLXRleHRcIj57e3NsaWRlclRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuICAgIGltcG9ydCBWdWUgZnJvbSAndnVlJztcbiAgICBpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuICAgIGltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5cbiAgICBheGlvcy5kZWZhdWx0cy5oZWFkZXJzLnBvc3RbJ0NvbnRlbnQtVHlwZSddID1cbiAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJztcbiAgICBWdWUucHJvdG90eXBlLiRheGlvcyA9IGF4aW9zO1xuXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xuXG4gICAgZnVuY3Rpb24gc3VtKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIHggKyB5XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3F1YXJlKHgpIHtcbiAgICAgICAgcmV0dXJuIHggKiB4XG4gICAgfVxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgbmFtZTogJ1NsaWRlVmVyaWZ5JyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIC8vIGJsb2NrIGxlbmd0aFxuICAgICAgICAgICAgbDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiA0MixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBibG9jayByYWRpdXNcbiAgICAgICAgICAgIHI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMTAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gY2FudmFzIHdpZHRoXG4gICAgICAgICAgICB3OiB7XG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDMxMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBjYW52YXMgaGVpZ2h0XG4gICAgICAgICAgICBoOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDE1NSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbGlkZXJUZXh0OntcbiAgICAgICAgICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhY2N1cmFjeToge1xuICAgICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IDUsIC8vIOiLpeS4uiAtMSDliJnkuI3ov5vooYzmnLrlmajliKTmlq1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW1nczoge1xuICAgICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJBY3RpdmU6IGZhbHNlLCAvLyBjb250YWluZXIgYWN0aXZlIGNsYXNzXG4gICAgICAgICAgICAgICAgY29udGFpbmVyU3VjY2VzczogZmFsc2UsIC8vIGNvbnRhaW5lciBzdWNjZXNzIGNsYXNzXG4gICAgICAgICAgICAgICAgY29udGFpbmVyRmFpbDogZmFsc2UsIC8vIGNvbnRhaW5lciBmYWlsIGNsYXNzXG4gICAgICAgICAgICAgICAgY2FudmFzQ3R4OiBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrQ3R4OiBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrOiBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrX3g6IHVuZGVmaW5lZCwgLy8gY29udGFpbmVyIHJhbmRvbSBwb3NpdGlvblxuICAgICAgICAgICAgICAgIGJsb2NrX3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBMOiB0aGlzLmwgKyB0aGlzLnIgKiAyICsgMywgLy8gYmxvY2sgcmVhbCBsZW5naHRcbiAgICAgICAgICAgICAgICBpbWc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGlzTW91c2VEb3duOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0cmFpbDogW10sXG4gICAgICAgICAgICAgICAgc2xpZGVyTGVmdDogMCwgLy8gYmxvY2sgcmlnaHQgb2Zmc2V0XG4gICAgICAgICAgICAgICAgc2xpZGVyTWFza1dpZHRoOiAwLCAvLyBtYXNrIHdpZHRoLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLCAvLyBCdWcgRml4ZXMg5L+u5aSN5LqG6aqM6K+B5oiQ5Yqf5ZCO6L+Y6IO95ruR5YqoXG4gICAgICAgICAgICAgICAgbG9hZEJsb2NrOiB0cnVlLCAvLyBGZWF0dXJlcyDlm77niYfliqDovb3mj5DnpLrvvIzpmLLmraLlm77niYfmsqHliqDovb3lrozlsLHlvIDlp4vpqozor4FcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2xpZGVySW1nczpbXSxcbiAgICAgICAgICAgICAgICBjdXJyZW50SW1nOicnLFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgbW91bnRlZCgpIHtcbiAgICAgICAgICAgIC8vIOiuvue9ruWumuaXtuWZqOebkea1i+aOpeWPo+ivt+axguWbvueJh+WujOaIkOaXtuWGjeW8gOWni+WIneWni+WMluaLluWKqOeUu+mdolxuICAgICAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgbGV0IGludHYgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKDEpXG4gICAgICAgICAgICAgICAgaWYodGhhdC5jdXJyZW50SW1nKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coMilcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5pbml0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50dik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSw2MDApO1xuICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIGluaXQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RG9tKClcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRJbWcoKVxuICAgICAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdERvbSgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrID0gdGhpcy4kcmVmcy5ibG9jaztcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0N0eCA9IHRoaXMuJHJlZnMuY2FudmFzLmdldENvbnRleHQoJzJkJylcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrQ3R4ID0gdGhpcy5ibG9jay5nZXRDb250ZXh0KCcyZCcpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdEltZygpIHsgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IHRoaXMuY3JlYXRlSW1nKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaW1nKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWbvueJh+WKoOi9veWujOWFs+mXremBruiUvee9qVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd0Jsb2NrKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIHRoaXMudywgdGhpcy5oKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9ja0N0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB0aGlzLncsIHRoaXMuaClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tfeDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja195OiB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTFxuICAgICAgICAgICAgICAgICAgICAgICAgfSA9IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfeSA9IHkgLSByICogMiAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBJbWFnZURhdGEgPSB0aGlzLmJsb2NrQ3R4LmdldEltYWdlRGF0YSh4LCBfeSwgTCwgTCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrLndpZHRoID0gTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tDdHgucHV0SW1hZ2VEYXRhKEltYWdlRGF0YSwgMCwgX3kpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWcgPSBpbWc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhd0Jsb2NrKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tfeCA9IHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSh0aGlzLkwgKyAxMCwgdGhpcy53IC0gKHRoaXMuTCArIDEwKSlcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrX3kgPSB0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMTAgKyB0aGlzLnIgKiAyLCB0aGlzLmggLSAodGhpcy5MICsgMTApKVxuICAgICAgICAgICAgICAgIHRoaXMuZHJhdyh0aGlzLmNhbnZhc0N0eCwgdGhpcy5ibG9ja194LCB0aGlzLmJsb2NrX3ksICdmaWxsJylcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcodGhpcy5ibG9ja0N0eCwgdGhpcy5ibG9ja194LCB0aGlzLmJsb2NrX3ksICdjbGlwJylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcmF3KGN0eCwgeCwgeSwgb3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgICAgbCxcbiAgICAgICAgICAgICAgICAgICAgclxuICAgICAgICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKVxuICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSlcbiAgICAgICAgICAgICAgICBjdHguYXJjKHggKyBsIC8gMiwgeSAtIHIgKyAyLCByLCAwLjcyICogUEksIDIuMjYgKiBQSSlcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyBsLCB5KVxuICAgICAgICAgICAgICAgIGN0eC5hcmMoeCArIGwgKyByIC0gMiwgeSArIGwgLyAyLCByLCAxLjIxICogUEksIDIuNzggKiBQSSlcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHggKyBsLCB5ICsgbClcbiAgICAgICAgICAgICAgICBjdHgubGluZVRvKHgsIHkgKyBsKVxuICAgICAgICAgICAgICAgIGN0eC5hcmMoeCArIHIgLSAyLCB5ICsgbCAvIDIsIHIgKyAwLjQsIDIuNzYgKiBQSSwgMS4yNCAqIFBJLCB0cnVlKVxuICAgICAgICAgICAgICAgIGN0eC5saW5lVG8oeCwgeSlcbiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMlxuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJ1xuICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknXG4gICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpXG4gICAgICAgICAgICAgICAgY3R4W29wZXJhdGlvbl0oKVxuICAgICAgICAgICAgICAgIC8vIEJ1ZyBGaXhlcyDkv67lpI3kuobngavni5DlkoxpZeaYvuekuumXrumimFxuICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcImRlc3RpbmF0aW9uLW92ZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY3JlYXRlSW1nKG9ubG9hZCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gXCJBbm9ueW1vdXNcIjtcbiAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IG9ubG9hZDtcbiAgICAgICAgICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRJbWcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSB0aGlzLmN1cnJlbnRJbWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRJbWcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHRoaXMuY3VycmVudEltZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDpmo/mnLrnlJ/miJBpbWcgc3JjXG4gICAgICAgICAgICBnZXRSYW5kb21JbWcoKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHJlcXVpcmUoJy4uL2Fzc2V0cy9pbWcuanBnJylcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWFhICcsdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbikpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGxlbiA9IHRoaXMuaW1ncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGxlbiA+IDAgP1xuICAgICAgICAgICAgICAgIC8vICAgdGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSA6XG4gICAgICAgICAgICAgICAgLy8gICAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC8xNTAvP2ltYWdlPScgKyB0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgMTA4NCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuc2xpZGVySW1ncycsdGhpcy5zbGlkZXJJbWdzKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNsaWRlckltZ3MubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJJbWdzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoXG4gICAgICAgICAgICBDaGVja0ltZ0V4aXN0c0FzeW5jKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuaW1ncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdmFyIGltZ3VybCA9ICdodHRwczovL3BpY3N1bS5waG90b3MvMzAwLzE1MC8/aW1hZ2U9JyArIHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCAxMDg0KTtcbiAgICAgICAgICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgSW1nT2JqID0gbmV3IEltYWdlKCk7IC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoXG4gICAgICAgICAgICAgICAgICAgICAgICBJbWdPYmouc3JjID0gaW1ndXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW1nT2JqLm9ubG9hZCA9IGZ1bmN0aW9uKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBzdHIgPSAn5Zu+54mH5Yqg6L295a6M5oiQJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1ndXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEltZ09iai5vbmVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGF0LmltZ3NbdGhhdC5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoYXQuaW1nc1t0aGF0LmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgQ2hlY2tJbWdFeGlzdHMoKXtcbiAgICAgICAgICAgICAgICAvLyB2YXIgSW1nT2JqID0gbmV3IEltYWdlKCk7IC8v5Yik5pat5Zu+54mH5piv5ZCm5a2Y5ZyoICBcbiAgICAgICAgICAgICAgICAvLyBJbWdPYmouc3JjID0gaW1ndXJsO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJbWdPYmonLEltZ09iaik7ICBcbiAgICAgICAgICAgICAgICAvLyAvL+WtmOWcqOWbvueJhyDosIPlh7rmnaXlvJXnlKhcbiAgICAgICAgICAgICAgICAvLyBpZiAoSW1nT2JqLmZpbGVTaXplID4gMCB8fCAoSW1nT2JqLndpZHRoID4gMCAmJiBJbWdPYmouaGVpZ2h0ID4gMCkpIHsgIFxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRJbWcgPSBpbWd1cmw7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCd0aGlzLmN1cnJlbnRJbWcyMicsdGhpcy5jdXJyZW50SW1nKTtcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2UgeyBcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHIOavj+asoemaj+acuuiwg+WHuuS4gOW8oOWbvueJh+aUvuWIsOaWsOaVsOe7hOmHjCBcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5jdXJyZW50SW1nID0gdGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgICAgICAvLyB9ICAgXG4gICAgICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5pbWdzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHIOavj+asoemaj+acuuiwg+WHuuS4gOW8oOWbvueJh+aUvuWIsOaWsOaVsOe7hOmHjCBcbiAgICAgICAgICAgICAgICB0aGF0LmN1cnJlbnRJbWcgPSB0aGF0LmltZ3NbdGhhdC5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildO1xuICAgICAgICAgICAgICAgIC8vIHRoYXQuQ2hlY2tJbWdFeGlzdHNBc3luYygpLnRoZW4oKHJlcyk9PntcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gY29uc29sZS5sb2coJzEyNScscmVzKVxuICAgICAgICAgICAgICAgIC8vICAgICB0aGF0LmN1cnJlbnRJbWcgPSByZXM7XG4gICAgICAgICAgICAgICAgLy8gfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHIOavj+asoemaj+acuuiwg+WHuuS4gOW8oOWbvueJh+aUvuWIsOaWsOaVsOe7hOmHjCBcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhhdC5jdXJyZW50SW1nID0gdGhhdC5pbWdzW3RoYXQuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgICAgICAvLyB9KTsgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIOiOt+WPluesrOS4ieaWueW6k+WbvueJh++8jOWmguaenOS4jeWtmOWcqO+8jOWImeiwg+eUqOacrOWcsOWbvueJh1xuICAgICAgICAgICAgZ2V0SW1nRnJvbVBpY3MoKXtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNsaWRlckltZ3MgPSBbXTsvL+m7mOiupOe9ruepulxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuaW1ncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGV0IHBpY3NyYyA9ICdodHRwczovL3BpY3N1bS5waG90b3MvMzAwLzE1MC8/aW1hZ2U9JyArIHRoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCAxMDg0KTtcblxuICAgICAgICAgICAgICAgIC8vIOi/memHjOmcgOimgeivt+axguWbvueJh+WcsOWdgO+8jOWIpOaWreWbvueJh+aYr+WQpuWtmOWcqOWQjuWGjeWGs+Wumuiwg+S4jeiwg+esrOS4ieaWueWbvuW6k+eahOWbvueJh+WHuuadpeaYvuekulxuICAgICAgICAgICAgICAgIHJldHVybiBheGlvcyh7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJ4LWNzcmYtdG9rZW5cIjpDb29raWVzLmdldCgnY3NyZlRva2VuJylcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOnBpY3NyYyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3JlcycscmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWbvueJh+WtmOWcqO+8jOiwg+WHuuadpeW8leeUqFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXJJbWdzLnB1c2gocGljc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnNsaWRlckltZ3MnLHRoaXMuc2xpZGVySW1ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWcgPSBwaWNzcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5jdXJyZW50SW1nMTEnLHRoaXMuY3VycmVudEltZyk7XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHIOavj+asoemaj+acuuiwg+WHuuS4gOW8oOWbvueJh+aUvuWIsOaWsOaVsOe7hOmHjFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXJJbWdzLnB1c2godGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5zbGlkZXJJbWdzJyx0aGlzLnNsaWRlckltZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHRoaXMuaW1nc1t0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWcgPSB0aGlzLmltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3lm77niYfkuI3lrZjlnKjvvIzosIPnlKjmnKzlnLDlm77niYcg5q+P5qyh6ZqP5py66LCD5Ye65LiA5byg5Zu+54mH5pS+5Yiw5paw5pWw57uE6YeMXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVySW1ncy5wdXNoKHRoaXMuaW1nc1t0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV0pO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5zbGlkZXJJbWdzJyx0aGlzLnNsaWRlckltZ3MpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gdGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW1nID0gdGhpcy5pbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGdldFJhbmRvbU51bWJlckJ5UmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyYW5kb20gJyxNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0KSArIHN0YXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0KSkgKyBzdGFydFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2hTbGlkZXIoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3JlZnJlc2gnKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbGlkZXJEb3duKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VjY2VzcykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5ZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICsgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3VjaFN0YXJ0RXZlbnQoZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Y2Nlc3MpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpblggPSBlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYO1xuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luWSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc01vdXNlRG93biA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSArIG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW92ZVggPSBlLmNsaWVudFggLSB0aGlzLm9yaWdpblg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdmVZID0gZS5jbGllbnRZIC0gdGhpcy5vcmlnaW5ZO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW92ZVggPCAwIHx8IG1vdmVYICsgMzggPj0gdGhpcy53KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVyTGVmdCA9IG1vdmVYICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrTGVmdCA9ICh0aGlzLncgLSA0MCAtIDIwKSAvICh0aGlzLncgLSA0MCkgKiBtb3ZlWDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ibG9jay5zdHlsZS5sZWZ0ID0gYmxvY2tMZWZ0ICsgJ3B4JztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IHRydWU7IC8vIGFkZCBhY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJNYXNrV2lkdGggPSBtb3ZlWCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhaWwucHVzaChtb3ZlWSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc01vdXNlRG93bikgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRYID09PSB0aGlzLm9yaWdpblgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJBY3RpdmUgPSBmYWxzZTsgLy8gcmVtb3ZlIGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9ICsgbmV3IERhdGUoKSAtIHRoaXMudGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwbGljZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBUdXJpbmdUZXN0XG4gICAgICAgICAgICAgICAgICAgIH0gPSB0aGlzLnZlcmlmeSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaWNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5hY2N1cmFjeSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc3VjY2VzcycsIHRoaXMudGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoVHVyaW5nVGVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc3VjY2VzcycsIHRoaXMudGltZXN0YW1wKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckZhaWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2FnYWluJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdmYWlsJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG91Y2hNb3ZlRXZlbnQoZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc01vdXNlRG93bikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdmVYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5wYWdlWCAtIHRoaXMub3JpZ2luWDtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3ZlWSA9IGUuY2hhbmdlZFRvdWNoZXNbMF0ucGFnZVkgLSB0aGlzLm9yaWdpblk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdmVYIDwgMCB8fCBtb3ZlWCArIDM4ID49IHRoaXMudykgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVyTGVmdCA9IG1vdmVYICsgJ3B4JztcbiAgICAgICAgICAgICAgICBsZXQgYmxvY2tMZWZ0ID0gKHRoaXMudyAtIDQwIC0gMjApIC8gKHRoaXMudyAtIDQwKSAqIG1vdmVYO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2suc3R5bGUubGVmdCA9IGJsb2NrTGVmdCArICdweCc7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXJNYXNrV2lkdGggPSBtb3ZlWCArICdweCc7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFpbC5wdXNoKG1vdmVZKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3VjaEVuZEV2ZW50KGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNNb3VzZURvd24pIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuaXNNb3VzZURvd24gPSBmYWxzZVxuICAgICAgICAgICAgICAgIGlmIChlLmNoYW5nZWRUb3VjaGVzWzBdLnBhZ2VYID09PSB0aGlzLm9yaWdpblgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gKyBuZXcgRGF0ZSgpIC0gdGhpcy50aW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgIHNwbGljZWQsXG4gICAgICAgICAgICAgICAgICAgIFR1cmluZ1Rlc3RcbiAgICAgICAgICAgICAgICB9ID0gdGhpcy52ZXJpZnkoKTtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaWNlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmFjY3VyYWN5ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJTdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdzdWNjZXNzJywgdGhpcy50aW1lc3RhbXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChUdXJpbmdUZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWNjXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lclN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3N1Y2Nlc3MnLCB0aGlzLnRpbWVzdGFtcClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdhZ2FpbicpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckZhaWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdmYWlsJylcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KClcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyaWZ5KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IHRoaXMudHJhaWwgLy8gZHJhZyB5IG1vdmUgZGlzdGFuY2VcbiAgICAgICAgICAgICAgICBjb25zdCBhdmVyYWdlID0gYXJyLnJlZHVjZShzdW0pIC8gYXJyLmxlbmd0aCAvLyBhdmVyYWdlXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2aWF0aW9ucyA9IGFyci5tYXAoeCA9PiB4IC0gYXZlcmFnZSkgLy8gZGV2aWF0aW9uIGFycmF5XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RkZGV2ID0gTWF0aC5zcXJ0KGRldmlhdGlvbnMubWFwKHNxdWFyZSkucmVkdWNlKHN1bSkgLyBhcnIubGVuZ3RoKSAvLyBzdGFuZGFyZCBkZXZpYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0ID0gcGFyc2VJbnQodGhpcy5ibG9jay5zdHlsZS5sZWZ0KVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjY3VyYWN5ID0gdGhpcy5hY2N1cmFjeSA8PSAxID8gMSA6IHRoaXMuYWNjdXJhY3kgPiAxMCA/IDEwIDogdGhpcy5hY2N1cmFjeTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzcGxpY2VkOiBNYXRoLmFicyhsZWZ0IC0gdGhpcy5ibG9ja194KSA8PSBhY2N1cmFjeSxcbiAgICAgICAgICAgICAgICAgICAgVHVyaW5nVGVzdDogYXZlcmFnZSAhPT0gc3RkZGV2LCAvLyBlcXVhbCA9PiBub3QgcGVyc29uIG9wZXJhdGVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXNldCgpIHtcbiAgICAgICAgICAgICAgICAvLyDmr4/mrKHph43nva7ml7bph43mlrDojrflj5blm77niYdcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJbWcgPSAnJztcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEltZ0Zyb21QaWNzKCk7XG4gICAgICAgICAgICAgICAgLy/liKTmlq3lm77niYfmmK/lkKblrZjlnKhcbiAgICAgICAgICAgICAgICB0aGlzLkNoZWNrSW1nRXhpc3RzKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyU3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRmFpbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVyTGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5ibG9jay5zdHlsZS5sZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlck1hc2tXaWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgLy8gY2FudmFzXG4gICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgICAgdyxcbiAgICAgICAgICAgICAgICAgICAgaFxuICAgICAgICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQ3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKVxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tDdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9jay53aWR0aCA9IHdcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIC8vIGdlbmVyYXRlIGltZ1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuaW1nLnNyYyA9IHRoaXMuZ2V0UmFuZG9tSW1nKCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuaW1nLnNyYyAnLHRoaXMuaW1nLnNyYyk7XG4gICAgICAgICAgICAgICAgLy8g6K6+572u5a6a5pe25Zmo55uR5rWL5o6l5Y+j6K+35rGC5Zu+54mH5a6M5oiQ5pe25YaN5byA5aeL5Yid5aeL5YyW5ouW5Yqo55S76Z2iXG4gICAgICAgICAgICAgICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGxldCBpbnR2ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coMSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhhdC5jdXJyZW50SW1nKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKDIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LmltZy5zcmMgPSB0aGF0LmN1cnJlbnRJbWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRlbWl0KCdmdWxmaWxsZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnR2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sNjAwKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZWQoKXtcbiAgICAgICAgICAgIC8vIC8vIOiOt+WPluesrOS4ieaWueW6k+WbvueJh++8jOWmguaenOS4jeWtmOWcqO+8jOWImeiwg+eUqOacrOWcsOWbvueJh1xuICAgICAgICAgICAgLy8gdGhpcy5nZXRJbWdGcm9tUGljcygpO1xuICAgICAgICAgICAgLy/liKTmlq3lm77niYfmmK/lkKblrZjlnKhcbiAgICAgICAgICAgIHRoaXMuQ2hlY2tJbWdFeGlzdHMoKTtcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuPHN0eWxlIHNjb3BlZD5cbiAgICAuc2xpZGUtdmVyaWZ5IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC8qIOWbvueJh+WKoOi9veagt+W8jyAqL1xuICAgIC5zbGlkZXItdmVyaWZ5LWxvYWRpbmd7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIHotaW5kZXg6IDk5OTtcbiAgICAgICAgYW5pbWF0aW9uOiBsb2FkaW5nIDEuNXMgaW5maW5pdGU7XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBsb2FkaW5nIHtcbiAgICAgICAgMCV7XG4gICAgICAgICAgICBvcGFjaXR5OiAuNztcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2xpZGUtdmVyaWZ5LWJsb2NrIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDBcbiAgICB9XG5cbiAgICAuc2xpZGUtdmVyaWZ5LXJlZnJlc2gtaWNvbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgd2lkdGg6IDM0cHg7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi9hc3NldHMvaWNvbl9saWdodC5wbmdcIikgMCAtNDM3cHg7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMzRweCA0NzFweFxuICAgIH1cblxuICAgIC5zbGlkZS12ZXJpZnktc2xpZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjdmOWZhO1xuICAgICAgICBjb2xvcjogIzQ1NDk0YztcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2U0ZTdlYlxuICAgIH1cblxuICAgIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2sge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBib3JkZXI6IDAgc29saWQgIzE5OTFGQTtcbiAgICAgICAgYmFja2dyb3VuZDogI0QxRTlGRVxuICAgIH1cblxuICAgIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB3aWR0aDogNDBweDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycyBsaW5lYXJcbiAgICB9XG5cbiAgICAuc2xpZGUtdmVyaWZ5LXNsaWRlci1tYXNrLWl0ZW06aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTk5MUZBXG4gICAgfVxuXG4gICAgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtOmhvdmVyIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTNweFxuICAgIH1cblxuICAgIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDE1cHg7XG4gICAgICAgIGxlZnQ6IDEzcHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICBoZWlnaHQ6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHVybChcIi4uL2Fzc2V0cy9pY29uX2xpZ2h0LnBuZ1wiKSAwIC0yNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDM0cHggNDcxcHhcbiAgICB9XG4gICAgLmNvbnRhaW5lci1hY3RpdmUgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzay1pdGVtIHtcbiAgICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgICAgICB0b3A6IC0xcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxOTkxRkE7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1hY3RpdmUgLnNsaWRlLXZlcmlmeS1zbGlkZXItbWFzayB7XG4gICAgICAgIGhlaWdodDogMzhweDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1zdWNjZXNzIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbSB7XG4gICAgICAgIGhlaWdodDogMzhweDtcbiAgICAgICAgdG9wOiAtMXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNTJDQ0JBO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTJDQ0JBICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1zdWNjZXNzIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2sge1xuICAgICAgICBoZWlnaHQ6IDM4cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM1MkNDQkE7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNEMkY0RUY7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1zdWNjZXNzIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbSB7XG4gICAgICAgIGhlaWdodDogMzhweDtcbiAgICAgICAgdG9wOiAtMXB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZjU3YTdhO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjU3YTdhICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2sge1xuICAgICAgICBoZWlnaHQ6IDM4cHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNmNTdhN2E7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmY2UxZTE7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1mYWlsIC5zbGlkZS12ZXJpZnktc2xpZGVyLW1hc2staXRlbS1pY29uIHtcbiAgICAgICAgdG9wOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MnB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmNvbnRhaW5lci1hY3RpdmUgLnNsaWRlLXZlcmlmeS1zbGlkZXItdGV4dCxcbiAgICAuY29udGFpbmVyLXN1Y2Nlc3MgLnNsaWRlLXZlcmlmeS1zbGlkZXItdGV4dCxcbiAgICAuY29udGFpbmVyLWZhaWwgLnNsaWRlLXZlcmlmeS1zbGlkZXItdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuPC9zdHlsZT5cbiIsIjwhLS0g5ouW5Yqo57uE5Lu26Ieq5a6a5LmJ5bCB6KOFICBieTrnjovnh5XljZcgLS0+XG48dGVtcGxhdGU+XG4gIDxkaXYgaWQ9XCJwdWJsaWNTbGlkZXJWZXJpZnlcIj5cbiAgICAgIDxTbGlkZVZlcmlmeSBjbGFzcz1cInNsaWRlVmVyXCIgcmVmPVwic2xpZGVibG9ja1wiIDp3PScyNjUnIDppbWdzPVwiaW1nc1wiIDpzbGlkZXItdGV4dD0nc2xpZGVyVGV4dCcgOmFjY3VyYWN5PVwiYWNjdXJhY3lcIiBAc3VjY2Vzcz1cIm9uU3VjY2Vzc1wiIEBhZ2Fpbj1cIm9uQWdhaW5cIiBAZnVsZmlsbGVkPVwib25GdWxmaWxsZWRcIiBAZmFpbD1cIm9uRmFpbFwiIEByZWZyZXNoPVwib25SZWZyZXNoXCI+PC9TbGlkZVZlcmlmeT5cbiAgICAgIDwhLS0gPGRpdj57e21zZ319PC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuXCIgQGNsaWNrPVwiaGFuZGxlQ2xpY2tcIj7lnKjniLbnu4Tku7blj6/ku6XngrnmiJHliLfmlrDlk6Y8L2J1dHRvbj4gLS0+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgU2xpZGVWZXJpZnkgZnJvbSAnLi9jb21wb25lbnRzL3NsaWRlclZlcmlmeS52dWUnO1xuICAgIGltcG9ydCBpbWcwIGZyb20gJy4vYXNzZXRzL2ltZy5qcGcnO1xuICAgIGltcG9ydCBpbWcxIGZyb20gJy4vYXNzZXRzL2ltZzEuanBnJztcbiAgICBpbXBvcnQgaW1nMiBmcm9tICcuL2Fzc2V0cy9pbWcyLmpwZyc7XG4gICAgaW1wb3J0IGltZzMgZnJvbSAnLi9hc3NldHMvaW1nMy5qcGcnO1xuICAgIGltcG9ydCBpbWc0IGZyb20gJy4vYXNzZXRzL2ltZzQuanBnJztcbiAgICBpbXBvcnQgaW1nNSBmcm9tICcuL2Fzc2V0cy9pbWc1LmpwZyc7XG4gICAgaW1wb3J0IGltZzYgZnJvbSAnLi9hc3NldHMvaW1nNi5qcGcnO1xuICAgIGltcG9ydCBpbWc3IGZyb20gJy4vYXNzZXRzL2ltZzcuanBnJztcbiAgICBpbXBvcnQgaW1nOCBmcm9tICcuL2Fzc2V0cy9pbWc4LmpwZyc7XG4gICAgaW1wb3J0IGltZzkgZnJvbSAnLi9hc3NldHMvaW1nOS5qcGcnO1xuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgbmFtZTogJ1B1YmxpY1NsaWRlclZlcmlmeScsXG4gICAgICAgIGNvbXBvbmVudHM6e1NsaWRlVmVyaWZ5fSxcbiAgICAgICAgcHJvcHM6WydzbGlkZXJUZXh0J10sXG4gICAgICAgIGRhdGEoKXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbXNnOiAnJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAn5ZCR5Y+z5ruR5YqoLT4nLFxuICAgICAgICAgICAgICAgIGltZ3M6IFtcbiAgICAgICAgICAgICAgICAgIGltZzAsXG4gICAgICAgICAgICAgICAgICBpbWcxLFxuICAgICAgICAgICAgICAgICAgaW1nMixcbiAgICAgICAgICAgICAgICAgIGltZzMsXG4gICAgICAgICAgICAgICAgICBpbWc0LFxuICAgICAgICAgICAgICAgICAgaW1nNSxcbiAgICAgICAgICAgICAgICAgIGltZzYsXG4gICAgICAgICAgICAgICAgICBpbWc3LFxuICAgICAgICAgICAgICAgICAgaW1nOCxcbiAgICAgICAgICAgICAgICAgIGltZzksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBhY2N1cmFjeTogMiwgLy8g57K+56Gu5bqm5bCP77yM5Y+v5YWB6K6455qE6K+v5beu6IyD5Zu05bCP77yb5Li6MeaXtu+8jOWImeihqOekuua7keWdl+imgeS4juWHueanveWujOWFqOmHjeWPoO+8jOaJjeiDvemqjOivgeaIkOWKn+OAgum7mOiupOWAvOS4ujVcbiAgICAgICAgICAgICAgICAvLyBzbGlkZXJJbWdzOltdLFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wdXRlZDp7XG4gICAgICAgICAgICAvLyBzbGlkZXJUZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vICAgICBpZiAodGhpcy5sb2NhbGUgPT0gXCJ6aC1jblwiKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKDQ2KVxuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gJ+WQkeWPs+a7keWKqO+8jOWujOaIkOaLvOWbvic7XG4gICAgICAgICAgICAvLyAgICAgfWVsc2UgaWYgKHRoaXMubG9jYWxlID09IFwiZW4tdXNcIil7XG4gICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiAnU2xpZGUgdG8gdGhlIHJpZ2h0IHRvIGNvbXBsZXRlIHRoZSBwdXp6bGUnO1xuICAgICAgICAgICAgLy8gICAgIH1lbHNlIGlmICh0aGlzLmxvY2FsZSA9PSBcImphcGFuZXNlXCIpe1xuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gJ+WPs+OBq+OCueODqeOCpOODieOBl+OBpuOAgeODkeOCuuODq+OCkuWujOaIkOOBl+OBvuOBmSc7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgb25TdWNjZXNzKHRpbWVzKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6aqM6K+B6YCa6L+HJyk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5tc2cgPSBgbG9naW4gc3VjY2Vzcywg6ICX5pe2JHsodGltZXMgLyAxMDAwKS50b0ZpeGVkKDEpfXNgO1xuICAgICAgICAgICAgICAgIGxldCBzbGlkZXJPayA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8g6YCa55+l54i257uE5Lu25pu05paw54q25oCBXG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgncmVzZXRTbGlkZXJTdWNjZXNzJyxzbGlkZXJPayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25GYWlsKCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+mqjOivgeS4jemAmui/hycpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMubXNnID0gJydcbiAgICAgICAgICAgICAgICBsZXQgc2xpZGVyT2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdyZXNldFNsaWRlclN1Y2Nlc3MnLHNsaWRlck9rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblJlZnJlc2goKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn54K55Ye75LqG5Yi35paw5bCP5Zu+5qCHJyk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5tc2cgPSAnJ1xuICAgICAgICAgICAgICAgIGxldCBzbGlkZXJPayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIOmAmuefpeeItue7hOS7tuabtOaWsOeKtuaAgVxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2Vzcycsc2xpZGVyT2spO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRnVsZmlsbGVkKCkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCfliLfmlrDmiJDlip/llabvvIEnKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgc2xpZGVyT2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyAvLyDpgJrnn6XniLbnu4Tku7bmm7TmlrDnirbmgIFcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiRlbWl0KCdyZXNldFNsaWRlclN1Y2Nlc3MnLHNsaWRlck9rKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkFnYWluKCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmo4DmtYvliLDpnZ7kurrkuLrmk43kvZznmoTlk6bvvIEnKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZyA9ICd0cnkgYWdhaW4nO1xuICAgICAgICAgICAgICAgIGxldCBzbGlkZXJPayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIOmAmuefpeeItue7hOS7tuabtOaWsOeKtuaAgVxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2V0U2xpZGVyU3VjY2Vzcycsc2xpZGVyT2spO1xuICAgICAgICAgICAgICAgIC8vIOWIt+aWsFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGVDbGljaygpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnNsaWRlYmxvY2sucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZyA9ICcnXG4gICAgICAgICAgICAgICAgbGV0IHNsaWRlck9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8g6YCa55+l54i257uE5Lu25pu05paw54q25oCBXG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgncmVzZXRTbGlkZXJTdWNjZXNzJyxzbGlkZXJPayk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtb3VudGVkKCl7XG4gICAgICAgICAgICAvLyBjb25zdCBvU2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICAvLyBvU2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgIC8vIG9TY3JpcHQuc3JjID0gJy9qcy9zbGlkZS12ZXJpZnkuanMnO1xuICAgICAgICAgICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvU2NyaXB0KTtcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZCgpe1xuICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuICAgICNwdWJsaWNTbGlkZXJWZXJpZnkge1xuICAgICAgICBmb250LWZhbWlseTogJ0F2ZW5pcicsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICBjb2xvcjogIzJjM2U1MDtcbiAgICB9XG4gICAgLmJ0biB7XG4gICAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICAgICAgb3V0bGluZTogMDtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIHBhZGRpbmc6IDhweCAxNXB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTg5MGZmO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAuYnRuOmFjdGl2ZSB7XG4gICAgICBib3gtc2hhZG93OiAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpIGluc2V0O1xuICAgIH1cbjwvc3R5bGU+XG4iLCIubG9naW5bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vZG93bmxvYWQuc25lYy5vcmcuY24vU05FQy9hcnRpY2xlLzIwMjUvMDMvMTMvL2xvZ2luX2JnLTk1MTE1OTA4LmpwZyk7XG4gICAgLyogYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vZmlsZS5pdmlld3VpLmNvbS9hZG1pbi1kaXN0L2ltZy9sb2dpbi1iZy4wODk5ZmZhNi5qcGcpOyAqL1xuICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5sb2dpbi1jb25bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAxNjBweDtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTYwJSk7XG4gICAgd2lkdGg6IDMwMHB4O1xufVxuLmxvZ2luLWNvbiAuZm9ybS1jb25bZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgcGFkZGluZzogMTBweCAwIDA7XG59XG4ubG9naW4tY29uIC5sb2dpbi10aXBbZGF0YS12LWE0OTA5MGNlXSB7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogI2MzYzNjMztcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7XG4ubG9naW4tY29uW2RhdGEtdi1hNDkwOTBjZV17XG4gICAgICAgIHRvcDo1MCU7XG4gICAgICAgIGxlZnQ6NTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpO1xufVxufSIsIjx0ZW1wbGF0ZT5cbiAgPE5vTGF5b3V0PlxuICAgIDxkaXYgY2xhc3M9XCJsb2dpblwiIEBrZXlkb3duLmVudGVyPVwiY2hlY2tWZXJpZmljYXRpb25Db2RlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9naW4tY29uXCI+XG4gICAgICAgIDxDYXJkIDpib3JkZXJlZD1cImZhbHNlXCI+XG4gICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDE0cHggMTZweDtcIj5cbiAgICAgICAgICAgIDxJY29uIHR5cGU9XCJsb2ctaW5cIj48L0ljb24+XG4gICAgICAgICAgICB7eyR0KFwi5qyi6L+O55m75b2V5bGV5Lya566h55CG57O757ufXCIpfX1cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOjAgMCAwIDIwcHg7Zm9udC1zaXplOiAxMnB4O1wiPuivreiogC9MYW5ndWFnZTo8YSA6c3R5bGU9XCJ7Y29sb3I6JGkxOG4ubG9jYWxlPT0nZW4tVVMnPydibGFjayc6J29yYW5nZSd9XCIgQGNsaWNrPVwiY2hhbmdlTGFuZ3VhZ2UoJ3poLUNOJylcIj7kuK3mloc8L2E+ICZuYnNwOyZuYnNwOzxhIDpzdHlsZT1cIntjb2xvcjokaTE4bi5sb2NhbGU9PSd6aC1DTic/J2JsYWNrJzonb3JhbmdlJ31cIiBAY2xpY2s9XCJjaGFuZ2VMYW5ndWFnZSgnZW4tVVMnKVwiPkVOR0xJU0g8L2E+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29uXCI+XG4gICAgICAgICAgIFxuICAgICAgICAgICAgPEZvcm0gcmVmPVwibG9naW5Gb3JtXCIgOm1vZGVsPVwiZm9ybVwiIDpydWxlcz1cInJ1bGVzXCI+XG4gICAgICAgICAgICAgIDxGb3JtSXRlbSBwcm9wPVwidXNlck5hbWVcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI0cHg7XCI+XG4gICAgICAgICAgICAgICAgPElucHV0IHYtbW9kZWw9XCJmb3JtLnVzZXJOYW1lXCIgOnBsYWNlaG9sZGVyPVwiJHQoJ+ivt+i+k+WFpeeUqOaIt+WQjScpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gc2xvdD1cInByZXBlbmRcIj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIDpzaXplPVwiMTZcIiB0eXBlPVwiaW9zLXBlcnNvblwiPjwvSWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9JbnB1dD5cbiAgICAgICAgICAgICAgPC9Gb3JtSXRlbT5cbiAgICAgICAgICAgICAgPEZvcm1JdGVtIHByb3A9XCJwYXNzd29yZFwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMjRweDtcIj5cbiAgICAgICAgICAgICAgICA8SW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgdi1tb2RlbD1cImZvcm0ucGFzc3dvcmRcIiA6cGxhY2Vob2xkZXI9XCIkdCgn6K+36L6T5YWl5a+G56CBJylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBzbG90PVwicHJlcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gOnNpemU9XCIxNFwiIHR5cGU9XCJpb3MtbG9ja1wiPjwvSWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9JbnB1dD5cbiAgICAgICAgICAgICAgPC9Gb3JtSXRlbT5cbiAgICAgICAgICAgICAgPEZvcm1JdGVtIHByb3A9XCJ2ZXJpZmljYXRpb25cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI0cHg7XCI+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPFB1YmxpY1NsaWRlclZlcmlmeSByZWY9XCJwdWJsaWNTbGlkZXJWZXJpZnlcIiA6c2xpZGVyLXRleHQ9XCIkdCgn5ZCR5Y+z5ruR5Yqo77yM5a6M5oiQ5ou85Zu+JylcIiBAcmVzZXRTbGlkZXJTdWNjZXNzPSdyZXNldFNsaWRlclN1Y2Nlc3MnPjwvUHVibGljU2xpZGVyVmVyaWZ5PlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvRm9ybUl0ZW0+XG4gICAgICAgICAgICAgIDxGb3JtSXRlbSBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDI0cHg7XCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBAY2xpY2s9XCJjaGVja1ZlcmlmaWNhdGlvbkNvZGVcIiB0eXBlPVwicHJpbWFyeVwiIGxvbmc+e3skdCgn55m75b2VJyl9fTwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L0Zvcm1JdGVtPlxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJsb2dpbi10aXBcIj57eyR0KCfovpPlhaXnlKjmiLflkI3lkozlr4bnoIEnKX19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9Ob0xheW91dD5cbjwvdGVtcGxhdGU+XG48c3R5bGUgc2NvcGVkIHNyYz0nLi9sb2dpbi5jc3MnPlxuLyogQGltcG9ydCBcImxvZ2luLmNzc1wiOyAqL1xuXG48L3N0eWxlPlxuPHN0eWxlPlxuaHRtbCxcbmJvZHksXG4jbWFpbjEsXG4jbWFpbjEgPiBkaXYge1xuICBoZWlnaHQ6IDEwMCU7XG59XG48L3N0eWxlPlxuPHNjcmlwdCB0eXBlPVwidGV4dC9iYWJlbFwiPlxuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5jb25zdCB0cmFucyA9IHJlcXVpcmUoXCIuL2xvZ2luLmpzb25cIik7XG5pbXBvcnQgUHVibGljU2xpZGVyVmVyaWZ5IGZyb20gJy4uL3B1YmxpY1NsaWRlclZlcmlmeS9wdWJsaWNTbGlkZXJWZXJpZnkudnVlJztcblxuYXhpb3MuZGVmYXVsdHMuaGVhZGVycy5wb3N0WydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuVnVlLnByb3RvdHlwZS4kYXhpb3MgPSBheGlvcztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFB1YmxpY1NsaWRlclZlcmlmeSB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtOiB7XG4gICAgICAgIHVzZXJOYW1lOiAndGVzdCcsXG4gICAgICAgIHBhc3N3b3JkOiAnY2NWb3FIJyxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiAnJyxcbiAgICAgICBcbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICB1c2VyTmFtZTogW1xuICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6IHRoaXMuJHQoJ+i0puWPt+S4jeiDveS4uuepuicpLCB0cmlnZ2VyOiAnYmx1cicgfVxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogW1xuICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6IHRoaXMuJHQoJ+WvhueggeS4jeiDveS4uuepuicpLCB0cmlnZ2VyOiAnYmx1cicgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgdmVyaWZpY2F0aW9uSW1nOiAnJyxcbiAgICAgIHZlcmlmaWNhdGlvbkFuc3dlcjogJycsXG4gICAgICBzbGlkZXJTdWNjZXNzOiBmYWxzZSxcbiAgICAgIHNsaWRlckltZ3M6IFtdLFxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFNsaWRlclN1Y2Nlc3Moc2xpZGVyT2spIHtcbiAgICAgIHRoaXMuc2xpZGVyU3VjY2VzcyA9IHNsaWRlck9rO1xuICAgICAgY29uc29sZS5sb2coJ3RoaXMuc2xpZGVyU3VjY2VzcycsIHRoaXMuc2xpZGVyU3VjY2Vzcyk7XG4gICAgfSxcbiAgICAvL0VTNeWOn+eUn+WOu+mHjeWKnuazlVxuICAgIEVzNWR1cGxpY2F0ZShhcnIsIHR5cGUpIHtcbiAgICAgIHZhciBuZXdBcnIgPSBbXTtcbiAgICAgIHZhciB0QXJyID0gW107XG4gICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdEFyclthcnJbaV1bdHlwZV1dKSB7XG4gICAgICAgICAgICBuZXdBcnIucHVzaChhcnJbaV0pO1xuICAgICAgICAgICAgdEFyclthcnJbaV1bdHlwZV1dID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0FycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIOiOt+WPlumqjOivgeegge+8iOWbvueJh+agvOW8j++8iVxuICAgIGdldFZlcmlmaWNhdGlvbigpIHtcbiAgICAgIC8v6I635Y+W5a6J5YWo5a+G6ZKlY3NyZlRva2VuXG4gICAgICBjb25zdCBjc3JmdG9rZW4gPSBDb29raWVzLmdldCgnY3NyZlRva2VuJyk7XG4gICAgICBheGlvcyh7XG4gICAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgICAgdXJsOiB0aGlzLlZFUklGSUNBVElPTl9DT0RFICsgXCJhcGkvY2FwdGNoYVwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJ4LWNzcmYtdG9rZW5cIjogdGhpcy5jc3JmdG9rZW5cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YToge31cbiAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0VmVyaWZpY2F0aW9uJywgcmVzKVxuICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy52ZXJpZmljYXRpb25JbWcgPSByZXMuZGF0YS5pbWFnZTtcbiAgICAgICAgICB0aGlzLnZlcmlmaWNhdGlvbkFuc3dlciA9IHJlcy5kYXRhLmFuc3dlcjtcbiAgICAgICAgfVxuXG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICAgICAgdGhpcy5DYXRjaEVycihlcnIpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICAvLyDmoKHpqozpqozor4HnoIFcbiAgICBjaGVja1ZlcmlmaWNhdGlvbkNvZGUoKSB7XG4gICAgICBpZiAodGhpcy5zbGlkZXJTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRyZWZzLnB1YmxpY1NsaWRlclZlcmlmeS5oYW5kbGVDbGljaygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2soKSB7XG4gICAgICAvLyDniLbnu4Tku7bnm7TmjqXlj6/ku6XosIPnlKjliLfmlrDmlrnms5VcbiAgICAgIHRoaXMuJHJlZnMuc2xpZGVibG9jay5yZXNldCgpO1xuICAgICAgdGhpcy5nZXRSYW5kb21JbWcoKTtcbiAgICB9LFxuICAgIC8vIOmaj+acuueUn+aIkGltZyBzcmMg5Zu+5bqT5pyJ5Zu+54mH55So5Zu+5bqT55qE77yM5rKh5pyJ55So5pys5Zyw55qEICAgLS0tLS3mmoLml7bkuI3nlKhcbiAgICBnZXRSYW5kb21JbWcoKSB7XG4gICAgICAvLyByZXR1cm4gcmVxdWlyZSgnLi4vYXNzZXRzL2ltZy5qcGcnKVxuICAgICAgY29uc3QgbGVuID0gdGhpcy5sb2NhbEltZ3MubGVuZ3RoO1xuICAgICAgdGhpcy5zbGlkZXJJbWdzID0gW107XG5cbiAgICAgIGxldCBwaWNzcmMgPSAnaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC8xNTAvP2ltYWdlPScgKyB0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgMTA4NCk7XG4gICAgICAvLyDov5nph4zpnIDopoHor7fmsYLlm77niYflnLDlnYDvvIzliKTmlq3lm77niYfmmK/lkKblrZjlnKjlkI7lho3lhrPlrprosIPkuI3osIPnrKzkuInmlrnlm77lupPnmoTlm77niYflh7rmnaXmmL7npLpcbiAgICAgIGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgLy8gXCJ4LWNzcmYtdG9rZW5cIjpDb29raWVzLmdldCgnY3NyZlRva2VuJylcbiAgICAgICAgfSxcbiAgICAgICAgdXJsOiBwaWNzcmMsXG4gICAgICAgIGRhdGE6IHt9XG4gICAgICB9KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXMnLHJlcyk7XG4gICAgICAgICAgLy8g5Zu+54mH5a2Y5Zyo77yM6LCD5Ye65p2l5byV55SoXG4gICAgICAgICAgdGhpcy5zbGlkZXJJbWdzLnB1c2gocGljc3JjKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDlvZPliY3lm77niYfkuI3lrZjlnKjvvIzosIPnlKjmnKzlnLDlm77niYdcbiAgICAgICAgICB0aGlzLnNsaWRlckltZ3MucHVzaCh0aGlzLmxvY2FsSW1nc1t0aGlzLmdldFJhbmRvbU51bWJlckJ5UmFuZ2UoMCwgbGVuKV0pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAvL3RoaXMuQ2F0Y2hFcnIoZXJyKTtcbiAgICAgICAgLy8g5b2T5YmN5Zu+54mH5LiN5a2Y5Zyo77yM6LCD55So5pys5Zyw5Zu+54mHXG4gICAgICAgIHRoaXMuc2xpZGVySW1ncy5wdXNoKHRoaXMubG9jYWxJbWdzW3RoaXMuZ2V0UmFuZG9tTnVtYmVyQnlSYW5nZSgwLCBsZW4pXSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmKHBpY3NyYyl7XG4gICAgICAvLyAgIHRoaXMuc2xpZGVySW1ncy5wdXNoKHBpY3NyYyk7XG4gICAgICAvLyB9ZWxzZXtcbiAgICAgIC8vICAgdGhpcy5zbGlkZXJJbWdzLnB1c2godGhpcy5sb2NhbEltZ3NbdGhpcy5nZXRSYW5kb21OdW1iZXJCeVJhbmdlKDAsIGxlbildKTsgXG4gICAgICAvLyB9XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5zbGlkZXJJbWdzJywgdGhpcy5zbGlkZXJJbWdzKTtcbiAgICB9LFxuICAgIGdldFJhbmRvbU51bWJlckJ5UmFuZ2Uoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIChlbmQgLSBzdGFydCkpICsgc3RhcnRcbiAgICB9LFxuICAgIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICAgIC8v6I635Y+W5a6J5YWo5a+G6ZKlY3NyZnRva2VuXG4gICAgICBjb25zdCBjc3JmdG9rZW4gPSBDb29raWVzLmdldCgnY3NyZlRva2VuJyk7XG4gICAgICAvL+aPkOS6pHBvc3Tor7fmsYJcbiAgICAgIHRoaXMuJGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1jc3JmLXRva2VuJzogY3NyZnRva2VuLFxuICAgICAgICAgIC8vICdDb250ZW50LVR5cGUnOid0ZXh0L3BsYWluJyxcbiAgICAgICAgICAvLyAnQ29udGVudC1UeXBlJzonYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0sXG4gICAgICAgIC8vdXJsOnRoaXMuSE9TVF9ERUZBVUxUKydHcnBjUm9sZVNlcnZpY2UuUm9sZVNlcnZpY2VUb0dycGMvTG9naW5Ub1VzZXInLFxuICAgICAgICB1cmw6ICcvbG9naW5Ub1VzZXInLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgVXNlck5hbWU6IHRoaXMuZm9ybS51c2VyTmFtZSxcbiAgICAgICAgICBVc2VyUGFzc3dvcmQ6IHRoaXMuZm9ybS5wYXNzd29yZFxuICAgICAgICB9XG4gICAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgICAgIC8vICByZXR1cm47XG4gICAgICAgIGlmIChyZXMuZGF0YS5pc0xvZ2luKSB7XG4gICAgICAgICAgLy8g5YWI5riF6Zmk57yT5a2YXG4gICAgICAgICAgQ29va2llcy5yZW1vdmUoJ2NzcmZfdG9rZW4nKTtcbiAgICAgICAgICBDb29raWVzLnJlbW92ZSgnVXNlck5hbWUnKTtcbiAgICAgICAgICAvLyBDb29raWVzLnJlbW92ZSgnTWF4QycpO1xuICAgICAgICAgIC8vIENvb2tpZXMucmVtb3ZlKCdNYXhFJyk7XG5cbiAgICAgICAgICBjb25zdCBhcnIgPSByZXMuZGF0YS5saXN0ZGF0YTtcbiAgICAgICAgICAvLyDlsIbnmbvpmYbnmoTnlKjmiLflkI3lrZjliLBzZXNzaW9uc3RvcmFnZemHjFxuICAgICAgICAgIC8vIGlmKHJlcy5kYXRhLnVzZXJFeEhhbGwpe1xuICAgICAgICAgIC8vICAgICBDb29raWVzLnNldCgndXNlckV4SGFsbCcsIHJlcy5kYXRhLnVzZXJFeEhhbGwpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBDb29raWVzLnNldCgnVXNlck5hbWUnLCB0aGlzLmZvcm0udXNlck5hbWUpO1xuICAgICAgICAgIC8vIHVzZXJQa+WtmOWcqGNvb2tpZemHjOS9nOS4uuWUr+S4gOe8luWPt1xuICAgICAgICAgIENvb2tpZXMuc2V0KCd1c2VyUGsnLCByZXMuZGF0YS51c2VyUGspO1xuICAgICAgICAgIC8vIENvb2tpZXMuc2V0KCdNYXhDJyxyZXMuZGF0YS51c2VyTWF4Rm9ydW0pO1xuICAgICAgICAgIC8vIENvb2tpZXMuc2V0KCdNYXhFJyxyZXMuZGF0YS51c2VyTWF4RXhoaWJpdG9yKTtcbiAgICAgICAgICBsZXQgY3NyZl90b2tlbiA9IHJlcy5oZWFkZXJzWyd4LXRva2VuLXJlZnJlc2gnXTtcbiAgICAgICAgICBDb29raWVzLnNldCgnY3NyZl90b2tlbicsIGNzcmZfdG9rZW4pO1xuXG4gICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2hvbWVJbmRleCc7XG4gICAgICAgICAgLy8g55m75b2V5oiQ5Yqf5ZCO6Lez6L2s5Yiw5YWs5YWx6aG177yM5YWI5Yqg6L296I+c5Y2V5qGG5p62bGF5b3V0XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL3B1YmxpY0Jsb2NrUGFnZSc7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbGVydChyZXMuZGF0YS5tc2cpO1xuICAgICAgICAgIHRoaXMuJHJlZnMucHVibGljU2xpZGVyVmVyaWZ5LmhhbmRsZUNsaWNrKCk7XG4gICAgICAgICAgLy8gdGhpcy5nZXRWZXJpZmljYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICBhbGVydCh0aGlzLiR0KCfnmbvlvZXlt7Lov4fmnJ/vvIzor7fph43mlrDnmbvlvZXvvIEnKSk7XG4gICAgICAgIHRoaXMuJHJlZnMucHVibGljU2xpZGVyVmVyaWZ5LmhhbmRsZUNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9sb2dpbic7XG4gICAgICB9KTtcblxuICAgIH0sXG5cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMuJHQoJ+WxleS8mueuoeeQhuezu+e7nycpO1xuICB9LFxuICBjcmVhdGVkKCkgeyAgIFxuICAgIC8vIHRoaXMuJGkxOG4ubG9jYWxlID0gXCJlbi1VU1wiO1xuICAgIHRoaXMuJGkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKFwiZW5cIiwgdHJhbnMuZW4pO1xuICAgIHRoaXMuJGkxOG4ubWVyZ2VMb2NhbGVNZXNzYWdlKFwiemhcIiwgdHJhbnMuemgpO1xuICAgIHRoaXMucnVsZXMudXNlck5hbWVbMF0ubWVzc2FnZT10aGlzLiR0KCfotKblj7fkuI3og73kuLrnqbonKTtcbiAgICB0aGlzLnJ1bGVzLnBhc3N3b3JkWzBdLm1lc3NhZ2U9dGhpcy4kdCgn5a+G56CB5LiN6IO95Li656m6Jyk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ3ZlcnNpb24gMycpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuUlVOX0VOVix0aGlzLiRpMThuLmxvY2FsZSk7XG4gICBcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0cmFucyk7XG4gICAgLy8gLy8g6I635Y+W6aqM6K+B56CB77yI5Zu+54mH5qC85byP77yJXG4gICAgLy90aGlzLmdldFZlcmlmaWNhdGlvbigpO1xuICB9XG59O1xuPC9zY3JpcHQ+Il0sInNvdXJjZVJvb3QiOiIifQ==*/