/*!******************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/app.css ***!
  \******************************************************************************************************************************************************/
.app-container {
  height: 100%;
}

.card-body > form > div,
.positions {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding-top: 20px;
}
.positions {
  padding-top: 0;
}

.question-actions {

}

.question-configuration .col-form-label {
  text-align: right;
}

.question-actions > * {
  visibility: hidden;
}
.question-actions.show-actions > * {
  /*visibility: visible;*/
}
.position-container .question-actions > * {
  visibility: visible;
}

.question-actions > *:hover,
.question-actions > *:hover i {
  color: #b22918;
  cursor: pointer;
}

.position-display .position {
  overflow: hidden;
  padding: 4px 0px 0px 0px;
}

.position-display .position-label {
  float: left;
  width: 20%;
  margin-right: 1%;
  color: #777;
  margin-bottom: 4px;
}

.position-display .positon-label-wide {
  width: 100%;
}

.position-display .position-result {
  float: left;
  width: 79%;
  margin-bottom: 4px;
}

.position-display .position-result ul {
  padding-left: 0px;
  margin-bottom: 0;
}

.position-result ul li {
  list-style-position: inside;
}

.position-display .position .positions {
  clear: both;
  border-left: 1px solid #ddd;
}

.position-display .position .positions .position {
  padding-left: 10px;
}

.position-display-small .position-label {
  width: 39%;
}

.position-display-small .position-result {
  width: 60%;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/grids/CellComponents/ActionsCellComponent.vue?vue&type=style&index=0&id=079d0cb5&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

.cell-actions {
    display: flex;
    gap: 1.5rem;
    height: 100%;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/editor/Position.vue?vue&type=style&index=0&id=3d2a40ad&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

[data-v-3d2a40ad] .question-actions {
  width: 110px; /* Increased from 90px to fit eye icon */
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/editor/editor.vue?vue&type=style&index=0&id=f53cd45e&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

[data-v-f53cd45e] .question-actions {
    width: 108px;
}
[data-v-f53cd45e] .gray-container {
    background-color: rgba(0, 0, 0, 0.05);
}
[data-v-f53cd45e] .extended {
    padding: 1rem;
    margin: 0 -1rem;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/editor/MaterialListPosition.vue?vue&type=style&index=0&id=005bfc9c&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

[data-v-005bfc9c] .question-actions {
    width: 90px;
}
[data-v-005bfc9c] .gray-container {
    background-color: rgba(0, 0, 0, 0.05);
}
[data-v-005bfc9c] .extended {
    padding: 1rem;
    margin: -9px -1rem;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/.pnpm/css-loader@6.11.0_webpack@5.103.0/node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/.pnpm/vue-loader@17.4.2_@vue+compiler-sfc@3.5.24_vue@3.5.24_webpack@5.103.0/node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/editor/MaterialList.vue?vue&type=style&index=0&id=b2229c2e&scoped=true&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/

[data-v-b2229c2e] .question-actions {
    width: 90px;
}
[data-v-b2229c2e] .gray-container {
    background-color: rgba(0, 0, 0, 0.05);
}
[data-v-b2229c2e] .extended {
    padding: 1rem;
    margin: -9px -1rem;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi41MjJhOTVlMS5jc3MiLCJtYXBwaW5ncyI6Ijs7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7O0VBRUUsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixTQUFTO0VBQ1QsaUJBQWlCO0FBQ25CO0FBQ0E7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOztBQUVBOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCO0FBQ0E7RUFDRSx1QkFBdUI7QUFDekI7QUFDQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTs7RUFFRSxjQUFjO0VBQ2QsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQix3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsVUFBVTtFQUNWLGdCQUFnQjtFQUNoQixXQUFXO0VBQ1gsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsV0FBVztBQUNiOztBQUVBO0VBQ0UsV0FBVztFQUNYLFVBQVU7RUFDVixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsV0FBVztFQUNYLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLFVBQVU7QUFDWjs7QUFFQTtFQUNFLFVBQVU7QUFDWjs7Ozs7O0FDbkVFO0lBQ0UsYUFBYTtJQUNiLFdBQVc7SUFDWCxZQUFZO0FBQ2Q7Ozs7OztBQzZTRjtFQUNFLFlBQVksRUFBRSx3Q0FBd0M7QUFDeEQ7Ozs7OztBQ2pKRTtJQUNFLFlBQVk7QUFDZDtBQUNBO0lBQ0UscUNBQXFDO0FBQ3ZDO0FBQ0E7SUFDRSxhQUFhO0lBQ2IsZUFBZTtBQUNqQjs7Ozs7O0FDNUtBO0lBQ0UsV0FBVztBQUNiO0FBQ0E7SUFDRSxxQ0FBcUM7QUFDdkM7QUFDQTtJQUNFLGFBQWE7SUFDYixrQkFBa0I7QUFDcEI7Ozs7OztBQ3dCQTtJQUNFLFdBQVc7QUFDYjtBQUNBO0lBQ0UscUNBQXFDO0FBQ3ZDO0FBQ0E7SUFDRSxhQUFhO0lBQ2Isa0JBQWtCO0FBQ3BCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vdmFsdGVtYS8uL2Fzc2V0cy9zdHlsZXMvYXBwLmNzcyIsIndlYnBhY2s6Ly92YWx0ZW1hLy4vYXNzZXRzL2dyaWRzL0NlbGxDb21wb25lbnRzL0FjdGlvbnNDZWxsQ29tcG9uZW50LnZ1ZSIsIndlYnBhY2s6Ly92YWx0ZW1hLy4vYXNzZXRzL2VkaXRvci9Qb3NpdGlvbi52dWUiLCJ3ZWJwYWNrOi8vdmFsdGVtYS8uL2Fzc2V0cy9lZGl0b3IvZWRpdG9yLnZ1ZSIsIndlYnBhY2s6Ly92YWx0ZW1hLy4vYXNzZXRzL2VkaXRvci9NYXRlcmlhbExpc3RQb3NpdGlvbi52dWUiLCJ3ZWJwYWNrOi8vdmFsdGVtYS8uL2Fzc2V0cy9lZGl0b3IvTWF0ZXJpYWxMaXN0LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IHVybCgnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXByby9jc3MvYWxsLmNzcycpO1xuXG4uYXBwLWNvbnRhaW5lciB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmNhcmQtYm9keSA+IGZvcm0gPiBkaXYsXG4ucG9zaXRpb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAyMHB4O1xuICBwYWRkaW5nLXRvcDogMjBweDtcbn1cbi5wb3NpdGlvbnMge1xuICBwYWRkaW5nLXRvcDogMDtcbn1cblxuLnF1ZXN0aW9uLWFjdGlvbnMge1xuXG59XG5cbi5xdWVzdGlvbi1jb25maWd1cmF0aW9uIC5jb2wtZm9ybS1sYWJlbCB7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4ucXVlc3Rpb24tYWN0aW9ucyA+ICoge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4ucXVlc3Rpb24tYWN0aW9ucy5zaG93LWFjdGlvbnMgPiAqIHtcbiAgLyp2aXNpYmlsaXR5OiB2aXNpYmxlOyovXG59XG4ucG9zaXRpb24tY29udGFpbmVyIC5xdWVzdGlvbi1hY3Rpb25zID4gKiB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG5cbi5xdWVzdGlvbi1hY3Rpb25zID4gKjpob3Zlcixcbi5xdWVzdGlvbi1hY3Rpb25zID4gKjpob3ZlciBpIHtcbiAgY29sb3I6ICNiMjI5MTg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnBvc2l0aW9uLWRpc3BsYXkgLnBvc2l0aW9uIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogNHB4IDBweCAwcHggMHB4O1xufVxuXG4ucG9zaXRpb24tZGlzcGxheSAucG9zaXRpb24tbGFiZWwge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDIwJTtcbiAgbWFyZ2luLXJpZ2h0OiAxJTtcbiAgY29sb3I6ICM3Nzc7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLnBvc2l0aW9uLWRpc3BsYXkgLnBvc2l0b24tbGFiZWwtd2lkZSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ucG9zaXRpb24tZGlzcGxheSAucG9zaXRpb24tcmVzdWx0IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiA3OSU7XG4gIG1hcmdpbi1ib3R0b206IDRweDtcbn1cblxuLnBvc2l0aW9uLWRpc3BsYXkgLnBvc2l0aW9uLXJlc3VsdCB1bCB7XG4gIHBhZGRpbmctbGVmdDogMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ucG9zaXRpb24tcmVzdWx0IHVsIGxpIHtcbiAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xufVxuXG4ucG9zaXRpb24tZGlzcGxheSAucG9zaXRpb24gLnBvc2l0aW9ucyB7XG4gIGNsZWFyOiBib3RoO1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5wb3NpdGlvbi1kaXNwbGF5IC5wb3NpdGlvbiAucG9zaXRpb25zIC5wb3NpdGlvbiB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbn1cblxuLnBvc2l0aW9uLWRpc3BsYXktc21hbGwgLnBvc2l0aW9uLWxhYmVsIHtcbiAgd2lkdGg6IDM5JTtcbn1cblxuLnBvc2l0aW9uLWRpc3BsYXktc21hbGwgLnBvc2l0aW9uLXJlc3VsdCB7XG4gIHdpZHRoOiA2MCU7XG59XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJjZWxsLWFjdGlvbnNcIj5cbiAgICA8dGVtcGxhdGUgdi1mb3I9XCJhY3Rpb24gaW4gYWN0aW9uc1wiPlxuICAgICAgPGFcbiAgICAgICAgdi1pZj1cImFjdGlvbi51cmlcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgOmhyZWY9XCJhY3Rpb24udXJpXCJcbiAgICAgICAgOnRhcmdldD1cImFjdGlvbi5uZXdUYWIgPyAnX2JsYW5rJyA6ICdfc2VsZidcIj5cbiAgICAgICAgPGkgOmNsYXNzPVwiYWN0aW9uLmNsYXNzXCIgdi1pZj1cImFjdGlvbi5jbGFzc1wiPjwvaT5cbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJhY3Rpb24ubGFiZWxcIj57e2FjdGlvbi5sYWJlbH19PC90ZW1wbGF0ZT5cbiAgICAgIDwvYT5cbiAgICAgIDxhIHYtZWxzZVxuICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cImhhbmRsZUNsaWNrKGFjdGlvbilcIj5cbiAgICAgICAgPGkgOmNsYXNzPVwiYWN0aW9uLmNsYXNzXCIgdi1pZj1cImFjdGlvbi5jbGFzc1wiPjwvaT5cbiAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJhY3Rpb24ubGFiZWxcIj57e2FjdGlvbi5sYWJlbH19PC90ZW1wbGF0ZT5cbiAgICAgIDwvYT5cbiAgICA8L3RlbXBsYXRlPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG48c3R5bGU+XG4gIC5jZWxsLWFjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAxLjVyZW07XG4gICAgaGVpZ2h0OiAxMDAlO1xuICB9XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiBcImNlbGxcIixcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25zOiBbXVxuICAgIH07XG4gIH0sXG4gIGJlZm9yZU1vdW50KCkge1xuICAgIGlmICh0aGlzLnBhcmFtcy5kYXRhKSB7XG4gICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnBhcmFtcy5jb2xEZWYuYWN0aW9ucyh0aGlzLnBhcmFtcy5kYXRhLCB0aGlzLiR1c2VyU3RvcmUudXNlci52YWx1ZSk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uKGFjdGlvbikge1xuICAgICAgaWYgKGFjdGlvblsnQGNsaWNrJ10pIHtcbiAgICAgICAgYWN0aW9uWydAY2xpY2snXSh0aGlzLnBhcmFtcyk7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9uWydtZXRob2QnXSAmJiBhY3Rpb25bJ21ldGhvZCddID09ICdkZWxldGUnKSB7XG4gICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgdGl0bGU6IFwiU2luZCBTaWUgc2ljaGVyP1wiLFxuICAgICAgICAgIHRleHQ6IFwiU2luZCBzaWUgc2ljaGVyLCBkYXNzIFNpZSBcXFwiXCIgKyB0aGlzLnBhcmFtcy5kYXRhW2FjdGlvblsnbmFtZUNvbHVtbiddXSArIFwiXFxcIiBsw7ZzY2hlbiBtw7ZjaHRlbj9cIixcbiAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIixcbiAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkphLCBsw7ZzY2hlbiFcIixcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICcjZTMzYzUxJyxcbiAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIk5laW4sIGFiYnJlY2hlbi5cIixcbiAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZVxuICAgICAgICB9KS50aGVuKChyZXN1bHQpID0+ICB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0NvbmZpcm1lZCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5wYXJhbXMpO1xuICAgICAgICAgICAgYXhpb3MuZGVsZXRlKHRoaXMucGFyYW1zLmRhdGFbJ0BpZCddKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgndG9hc3Q6Y3JlYXRlJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMucGFyYW1zLmRhdGFbYWN0aW9uWyduYW1lQ29sdW1uJ11dLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogXCJcXFwiXCIgKyB0aGlzLnBhcmFtcy5kYXRhW2FjdGlvblsnbmFtZUNvbHVtbiddXSArIFwiXFxcIiB3dXJkZSBnZWzDtnNjaHRcIixcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy5hcGkucmVmcmVzaFNlcnZlclNpZGUoeyByb3V0ZTogdW5kZWZpbmVkLCBwdXJnZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbk1vdW50ZWQsIHdhdGNoLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZUZuIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJ1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICcuL0Zvcm1GaWVsZC52dWUnO1xuaW1wb3J0IFF1ZXN0aW9uQ29uZmlnIGZyb20gXCIuL1F1ZXN0aW9uQ29uZmlnLnZ1ZVwiO1xuaW1wb3J0IHsgdXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZSdcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgRXZlbnRCdXMgZnJvbSAnLi4vZXZlbnRidXMnO1xuaW1wb3J0IFNlY3Rpb25IZWFkZXJDb250cm9sIGZyb20gXCIuL0NvbnRyb2xzL1NlY3Rpb25IZWFkZXJDb250cm9sLnZ1ZVwiO1xuaW1wb3J0IEFkZE5ld0ZpZWxkIGZyb20gXCIuL0FkZE5ld0ZpZWxkLnZ1ZVwiO1xuaW1wb3J0IENsaXBib2FyZCBmcm9tIFwiLi4vY2xpcGJvYXJkXCI7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2FkZE5ldycsICdkZWxldGVQb3NpdGlvbicsICdwYXN0ZUFmdGVyJ10pO1xuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyhbJ3Bvc2l0aW9uJywgJ2RyYWdIYW5kbGVDbGFzcycsICdyb290Q29udGFpbmVyJywgJ3Jvb3RDb250YWluZXJUeXBlJywgJ3JlYWRPbmx5JywgJ3Nob3dQYXN0ZScsICdtYXRlcmlhbENvbnRleHQnXSk7XG5jb25zdCBjb250YWluZXIgPSByZWYocHJvcHMucG9zaXRpb24uY29udGFpbmVyKTtcbmNvbnN0IHBvc2l0aW9ucyA9IHJlZihwcm9wcy5wb3NpdGlvbik7XG5jb25zdCBzaG93Q29uZmlnID0gcmVmKCFwcm9wcy5wb3NpdGlvbi5pZCk7XG5jb25zdCBkcmFnSGFuZGxlQ2xhc3MgPSByZWYocHJvcHMuZHJhZ0hhbmRsZUNsYXNzKTtcbmNvbnN0IGFjY29yZGlvbkV4cGFuZGVkID0gcmVmKGZhbHNlKTtcblxuLy8gT25seSByZWdpc3RlciBhcyBhIGdyb3VwIGlmIGl0J3MgYSBjb2xsYXBzaWJsZSBjb21wb25lbnRcbmNvbnN0IGlzQWNjb3JkaW9uR3JvdXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gIHJldHVybiBwcm9wcy5wb3NpdGlvbj8ucXVlc3Rpb24/LnR5cGUgPT09ICdRdWVzdGlvbkdyb3VwJyB8fFxuICAgICAgICAgcHJvcHMucG9zaXRpb24/LnF1ZXN0aW9uPy50eXBlID09PSAnTWF0ZXJpYWxDb250cm9sJyB8fFxuICAgICAgICAgcHJvcHMucG9zaXRpb24/LnF1ZXN0aW9uPy50eXBlID09PSAnUXVlc3Rpb25Hcm91cENvbnRyb2wnO1xufSk7XG5cbmZ1bmN0aW9uIHRvZ2dsZUFjY29yZGlvbigpIHtcbiAgYWNjb3JkaW9uRXhwYW5kZWQudmFsdWUgPSAhYWNjb3JkaW9uRXhwYW5kZWQudmFsdWU7XG4gIC8vIEVtaXQgc3RhdGUgY2hhbmdlIHRvIHRoZSBldmVudCBidXMgZm9yIFNpZGViYXJFeHBhbmRDb2xsYXBzZSB0byB0cmFja1xuICBpZiAoaXNBY2NvcmRpb25Hcm91cC52YWx1ZSkge1xuICAgIEV2ZW50QnVzLiRlbWl0KCdncm91cFN0YXRlJywgeyBpZDogcHJvcHMucG9zaXRpb24uaWQsIGV4cGFuZGVkOiBhY2NvcmRpb25FeHBhbmRlZC52YWx1ZSB9KTtcbiAgfVxufVxuXG4vLyBMaXN0ZW4gZm9yIGV4cGFuZC9jb2xsYXBzZSBhbGwgY29tbWFuZFxuRXZlbnRCdXMuJG9uKCd0b2dnbGUtc2lkZWJhci1maWVsZHMnLCAodmFsdWUsIHJlY3Vyc2l2ZSA9IGZhbHNlKSA9PiB7XG4gIGFjY29yZGlvbkV4cGFuZGVkLnZhbHVlID0gdmFsdWU7XG5cbiAgLy8gUmUtZW1pdCBvdXIgbmV3IHN0YXRlIHNvIFNpZGViYXJFeHBhbmRDb2xsYXBzZSBrbm93cyBhYm91dCBpdFxuICBpZiAoaXNBY2NvcmRpb25Hcm91cC52YWx1ZSkge1xuICAgIEV2ZW50QnVzLiRlbWl0KCdncm91cFN0YXRlJywgeyBpZDogcHJvcHMucG9zaXRpb24uaWQsIGV4cGFuZGVkOiBhY2NvcmRpb25FeHBhbmRlZC52YWx1ZSB9KTtcbiAgfVxufSk7XG5cbi8vIEhhbmRsZSB0b2dnbGUtYWxsLW5lc3RlZC1maWVsZHMgZXZlbnQgZm9yIGRlZXBseSBuZXN0ZWQgaGllcmFyY2h5XG4vLyBUaGlzIGV2ZW50IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IEFMTCBwb3NpdGlvbiBjb21wb25lbnRzLCByZWdhcmRsZXNzIG9mIGhpZXJhcmNoeVxuRXZlbnRCdXMuJG9uKCd0b2dnbGUtYWxsLW5lc3RlZC1maWVsZHMnLCAodmFsdWUpID0+IHtcbiAgLy8gU2V0IHRoZSBhY2NvcmRpb24gc3RhdGUgZm9yIHRoaXMgcG9zaXRpb25cbiAgYWNjb3JkaW9uRXhwYW5kZWQudmFsdWUgPSB2YWx1ZTtcblxuICAvLyBVcGRhdGUgdGhlIHN0YXRlIHRyYWNraW5nIGlmIHRoaXMgaXMgYW4gYWNjb3JkaW9uIGdyb3VwXG4gIGlmIChpc0FjY29yZGlvbkdyb3VwLnZhbHVlKSB7XG4gICAgRXZlbnRCdXMuJGVtaXQoJ2dyb3VwU3RhdGUnLCB7IGlkOiBwcm9wcy5wb3NpdGlvbi5pZCwgZXhwYW5kZWQ6IGFjY29yZGlvbkV4cGFuZGVkLnZhbHVlIH0pO1xuICB9XG59KTtcblxuLy8gTGlzdGVuIGZvciByZXF1ZXN0IHRvIHJlcG9ydCBvdXIgY3VycmVudCBzdGF0ZVxuRXZlbnRCdXMuJG9uKCdyZXBvcnQtZ3JvdXAtc3RhdGVzJywgKCkgPT4ge1xuICBpZiAoaXNBY2NvcmRpb25Hcm91cC52YWx1ZSkge1xuICAgIC8vIFJlZ2lzdGVyIHRoaXMgZ3JvdXAgd2l0aCBTaWRlYmFyRXhwYW5kQ29sbGFwc2VcbiAgICBFdmVudEJ1cy4kZW1pdCgncmVnaXN0ZXJHcm91cCcsIHsgaWQ6IHByb3BzLnBvc2l0aW9uLmlkLCBleHBhbmRlZDogYWNjb3JkaW9uRXhwYW5kZWQudmFsdWUgfSk7XG4gICAgLy8gQWxzbyByZXBvcnQgY3VycmVudCBzdGF0ZVxuICAgIEV2ZW50QnVzLiRlbWl0KCdncm91cFN0YXRlJywgeyBpZDogcHJvcHMucG9zaXRpb24uaWQsIGV4cGFuZGVkOiBhY2NvcmRpb25FeHBhbmRlZC52YWx1ZSB9KTtcbiAgfVxufSk7XG5cbi8vIFJlZ2lzdGVyIHRoaXMgY29tcG9uZW50IG9uIG1vdW50IGlmIGl0J3MgYSBncm91cFxub25Nb3VudGVkKCgpID0+IHtcbiAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGdsb2JhbCBleHBhbmQgc3RhdGUgd2Ugc2hvdWxkIGFwcGx5IChmb3IgbmV3bHkgbW91bnRlZCBjb21wb25lbnRzKVxuICBjb25zdCBnbG9iYWxTdGF0ZSA9IEV2ZW50QnVzLmdldEdsb2JhbEV4cGFuZFN0YXRlKCk7XG4gIGlmIChnbG9iYWxTdGF0ZSAhPT0gbnVsbCAmJiBpc0FjY29yZGlvbkdyb3VwLnZhbHVlKSB7XG4gICAgLy8gQXBwbHkgdGhlIGdsb2JhbCBzdGF0ZSB0byB0aGlzIG5ld2x5IG1vdW50ZWQgY29tcG9uZW50XG4gICAgYWNjb3JkaW9uRXhwYW5kZWQudmFsdWUgPSBnbG9iYWxTdGF0ZTtcbiAgfVxuXG4gIGlmIChpc0FjY29yZGlvbkdyb3VwLnZhbHVlKSB7XG4gICAgRXZlbnRCdXMuJGVtaXQoJ3JlZ2lzdGVyR3JvdXAnLCB7IGlkOiBwcm9wcy5wb3NpdGlvbi5pZCwgZXhwYW5kZWQ6IGFjY29yZGlvbkV4cGFuZGVkLnZhbHVlIH0pO1xuICAgIC8vIEFsc28gcmVwb3J0IGluaXRpYWwgc3RhdGVcbiAgICBFdmVudEJ1cy4kZW1pdCgnZ3JvdXBTdGF0ZScsIHsgaWQ6IHByb3BzLnBvc2l0aW9uLmlkLCBleHBhbmRlZDogYWNjb3JkaW9uRXhwYW5kZWQudmFsdWUgfSk7XG4gIH1cbn0pO1xuY29uc3Qgc2hvd0FjdGlvbnMgPSByZWYoZmFsc2UpO1xuY29uc3QgY2xpcGJvYXJkID0gcmVmKENsaXBib2FyZCk7XG5cbmNvbnN0IHBlcnNpc3RDaGFuZ2VzID0gKG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4ge1xuICBpZiAocHJvcHMucmVhZE9ubHkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHBheWxvYWQgPSBzdHJ1Y3R1cmVkQ2xvbmUobmV3VmFsdWUpO1xuICBpZiAocGF5bG9hZC5xdWVzdGlvbi5yZWZlcmVuY2UgJiYgcGF5bG9hZC5xdWVzdGlvbi5yZWZlcmVuY2VbJ0BpZCddKSB7XG4gICAgcGF5bG9hZC5xdWVzdGlvbi5yZWZlcmVuY2UgPSBwYXlsb2FkLnF1ZXN0aW9uLnJlZmVyZW5jZVsnQGlkJ107XG4gIH1cbiAgaWYgKHBheWxvYWQucXVlc3Rpb24ucmVmZXJlbmNlICYmIHBheWxvYWQucXVlc3Rpb24ucmVmZXJlbmNlWydpZCddKSB7XG4gICAgcGF5bG9hZC5xdWVzdGlvbi5yZWZlcmVuY2UgPSAnL2FwaS9yZWZlcmVuY2VzLycgKyBwYXlsb2FkLnF1ZXN0aW9uLnJlZmVyZW5jZVsnaWQnXTtcbiAgfVxuICBpZiAocGF5bG9hZC5xdWVzdGlvbi5tYXRlcmlhbCAmJiBwYXlsb2FkLnF1ZXN0aW9uLm1hdGVyaWFsWydpZCddKSB7XG4gICAgIHBheWxvYWQucXVlc3Rpb24ubWF0ZXJpYWwgPSAnL2FwaS9tYXRlcmlhbHMvJyArIHBheWxvYWQucXVlc3Rpb24ubWF0ZXJpYWxbJ2lkJ107XG4gIH0gZWxzZSB7XG4gICAgLy8gcHJldmVudCBcIkdob3N0XCIgTWF0ZXJpYWxzLCBtYXRlcmlhbCB3aXRob3V0IElEIG9yIHZhbGlkIHBvc2l0aW9ucyBpcyBhIGdob3N0XG4gICAgZGVsZXRlIHBheWxvYWQucXVlc3Rpb24ubWF0ZXJpYWw7XG4gIH1cblxuICBpZiAocGF5bG9hZC5xdWVzdGlvbi5yZWZlcmVuY2VPcHRpb24gJiYgdHlwZW9mIHBheWxvYWQucXVlc3Rpb24ucmVmZXJlbmNlT3B0aW9uID09PSAnbnVtYmVyJykge1xuICAgIHBheWxvYWQucXVlc3Rpb24ucmVmZXJlbmNlT3B0aW9uID0gJy9hcGkvcmVmZXJlbmNlX29wdGlvbnMvJyArIHBheWxvYWQucXVlc3Rpb24ucmVmZXJlbmNlT3B0aW9uO1xuICB9XG5cbiAgcGF5bG9hZC5yb290Q29udGFpbmVyID0gcHJvcHMucm9vdENvbnRhaW5lcjtcbiAgZGVsZXRlIChwYXlsb2FkLnF1ZXN0aW9uLmF1dGhvcik7XG4gIGRlbGV0ZSAocGF5bG9hZC5xdWVzdGlvbi5wb3NpdGlvbnMpO1xuICBheGlvcy5wdXQoJy9hcGkvcG9zaXRpb25zLycgKyBwYXlsb2FkLmlkLCBwYXlsb2FkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICB9KTtcbn07XG5jb25zdCBwZXJzaXN0Q2hhbmdlc0RlYm91bmNlZCA9IHVzZURlYm91bmNlRm4ocGVyc2lzdENoYW5nZXMsIDEwMDApXG5cbndhdGNoKHByb3BzLnBvc2l0aW9uLCBwZXJzaXN0Q2hhbmdlc0RlYm91bmNlZCk7XG5cbmxldCBhY3Rpb25zTW92ZUxlYXZlRGVsYXkgPSBudWxsO1xuXG5mdW5jdGlvbiBtb3VzZU92ZXJBY3Rpb25zKCkge1xuICBpZiAoYWN0aW9uc01vdmVMZWF2ZURlbGF5KSB7XG4gICAgY2xlYXJUaW1lb3V0KGFjdGlvbnNNb3ZlTGVhdmVEZWxheSk7XG4gIH1cbiAgc2hvd0FjdGlvbnMudmFsdWUgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBtb3VzZUxlYXZlQWN0aW9ucygpIHtcbiAgaWYgKGFjdGlvbnNNb3ZlTGVhdmVEZWxheSkge1xuICAgIGNsZWFyVGltZW91dChhY3Rpb25zTW92ZUxlYXZlRGVsYXkpO1xuICB9XG4gIGFjdGlvbnNNb3ZlTGVhdmVEZWxheSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHNob3dBY3Rpb25zLnZhbHVlID0gZmFsc2U7XG4gIH0sIDEwMCk7XG59XG5cbmZ1bmN0aW9uIGFkZE5ldyh0eXBlKSB7XG4gIGlmIChwcm9wcy5yZWFkT25seSA9PSB0cnVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVtaXQoJ2FkZE5ldycsIHR5cGUsIHByb3BzLnBvc2l0aW9uLnBvc2l0aW9uKTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlUG9zaXRpb24oKSB7XG4gIGlmIChwcm9wcy5yZWFkT25seSA9PSB0cnVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIENsaXBib2FyZC5yZW1vdmUocHJvcHMucG9zaXRpb24pO1xuICBlbWl0KCdkZWxldGVQb3NpdGlvbicsIHByb3BzLnBvc2l0aW9uKTtcbn1cblxuZnVuY3Rpb24gcGFzdGVBZnRlcihwb3NpdGlvbikge1xuICBpZiAocHJvcHMucmVhZE9ubHkgPT0gdHJ1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBlbWl0KCdwYXN0ZUFmdGVyJywgcHJvcHMucG9zaXRpb24pO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVNYXRlcmlhbExpc3RWaXNpYmlsaXR5KCkge1xuICBpZiAocHJvcHMucmVhZE9ubHkgPT0gdHJ1ZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjb25maWcgPSBwcm9wcy5wb3NpdGlvbi5xdWVzdGlvbi5jb25maWd1cmF0aW9uIHx8IHt9O1xuICBjb25zdCBuZXdDb25maWcgPSB7IC4uLmNvbmZpZywgc2hvd0luTWF0ZXJpYWxMaXN0OiAhY29uZmlnLnNob3dJbk1hdGVyaWFsTGlzdCB9O1xuICBwcm9wcy5wb3NpdGlvbi5xdWVzdGlvbi5jb25maWd1cmF0aW9uID0gbmV3Q29uZmlnO1xufVxuXG5jb25zdCBpc1Zpc2libGVJbk1hdGVyaWFsTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgaWYgKCFwcm9wcy5wb3NpdGlvbj8ucXVlc3Rpb24/LmNvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgY29uZmlnID0gcHJvcHMucG9zaXRpb24ucXVlc3Rpb24uY29uZmlndXJhdGlvbjtcbiAgcmV0dXJuIGNvbmZpZy5zaG93SW5NYXRlcmlhbExpc3QgPT09IHRydWU7XG59KTtcblxuY29uc3QgaXNNYXRlcmlhbENvbnRyb2wgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5wb3NpdGlvbj8ucXVlc3Rpb24/LnR5cGUgPT09ICdNYXRlcmlhbENvbnRyb2wnKTtcblxuLy8gQ2hlY2sgaWYgdGhpcyBwb3NpdGlvbiBiZWxvbmdzIHRvIGEgbWF0ZXJpYWwgKGVpdGhlciBlZGl0aW5nIGEgbWF0ZXJpYWwgb3IgYW4gZW1iZWRkZWQgbWF0ZXJpYWwgaW5zdGFuY2UpXG5jb25zdCBtYXRlcmlhbENvbnRleHRBY3RpdmUgPSBjb21wdXRlZCgoKSA9PiB7XG4gIGlmIChwcm9wcy5tYXRlcmlhbENvbnRleHQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAocHJvcHMucm9vdENvbnRhaW5lclR5cGUgPT09ICdtYXRlcmlhbCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBjb250YWluZXIgPSBwcm9wcy5wb3NpdGlvbj8uY29udGFpbmVyO1xuICBjb25zdCBjb250YWluZXJJZCA9IHR5cGVvZiBjb250YWluZXIgPT09ICdzdHJpbmcnID8gY29udGFpbmVyIDogKGNvbnRhaW5lciAmJiBjb250YWluZXJbJ0BpZCddKSA/IGNvbnRhaW5lclsnQGlkJ10gOiAnJztcbiAgaWYgKHR5cGVvZiBjb250YWluZXJJZCA9PT0gJ3N0cmluZycgJiYgY29udGFpbmVySWQuaW5jbHVkZXMoJy9hcGkvbWF0ZXJpYWxzLycpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5cbi8vIEV4cG9zZSBjb250ZXh0IHRvIGNoaWxkIGNvbXBvbmVudHMgdGhhdCByZW5kZXIgbmVzdGVkIHBvc2l0aW9ucyAobWF0ZXJpYWwvcXVlc3Rpb24gZ3JvdXBzKVxuY29uc3QgY2hpbGRNYXRlcmlhbENvbnRleHRCaW5kaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xuICBjb25zdCB0eXBlID0gcHJvcHMucG9zaXRpb24/LnF1ZXN0aW9uPy50eXBlO1xuICBpZiAoWydNYXRlcmlhbENvbnRyb2wnLCAnUXVlc3Rpb25Hcm91cENvbnRyb2wnLCAnUXVlc3Rpb25Hcm91cCddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgcmV0dXJuIHsgbWF0ZXJpYWxDb250ZXh0OiBtYXRlcmlhbENvbnRleHRBY3RpdmUudmFsdWUgfHwgaXNNYXRlcmlhbENvbnRyb2wudmFsdWUgfTtcbiAgfVxuICBpZiAoaXNNYXRlcmlhbENvbnRyb2wudmFsdWUpIHtcbiAgICByZXR1cm4geyBtYXRlcmlhbENvbnRleHQ6IHRydWUgfTtcbiAgfVxuICByZXR1cm4ge307XG59KTtcblxuLy8gU2hvdyB0aGUgZXllIHRvZ2dsZSB3aGVuZXZlciB3ZSBhcmUgaW5zaWRlIGEgbWF0ZXJpYWwgY29udGV4dFxuY29uc3QgaXNNYXRlcmlhbEZpZWxkID0gY29tcHV0ZWQoKCkgPT4ge1xuICByZXR1cm4gbWF0ZXJpYWxDb250ZXh0QWN0aXZlLnZhbHVlO1xufSk7XG5cbmxldCBzaG93QWRkQWZ0ZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gIGxldCBwb3NpdGlvbiA9IHBvc2l0aW9uc1twb3NpdGlvbnMubGVuZ3RoIC0gMV07XG4gIGlmICghcG9zaXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IHF1ZXN0aW9uID0gcG9zaXRpb24ucXVlc3Rpb247XG4gIHJldHVybiBxdWVzdGlvbi50eXBlID09ICdNYXRlcmlhbENvbnRyb2wnIHx8IHF1ZXN0aW9uLnR5cGUgPT0gJ1F1ZXN0aW9uR3JvdXBDb250cm9sJztcbn0pXG5cbmRlZmluZUV4cG9zZSh7XG4gIGlkOiBwcm9wcy5wb3NpdGlvbi5pZCA/IHByb3BzLnBvc2l0aW9uLmlkIDogbnVsbCxcbiAgc2hvd0NvbmZpZzogc2hvd0NvbmZpZyA/IHNob3dDb25maWcgOiBudWxsLFxuICBwZXJzaXN0Q2hhbmdlczogdHlwZW9mKHBlcnNpc3RDaGFuZ2VzKSAhPSAndW5kZWZpbmVkJyA/IHBlcnNpc3RDaGFuZ2VzIDogbnVsbFxufSk7XG48L3NjcmlwdD5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInBvc2l0aW9uIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLWItNSBkLWZsZXggZmxleC1yb3cgZ2FwLTUgZmxleC13cmFwXCIgdi1pZj1cInBvc2l0aW9uLnF1ZXN0aW9uXCI+XG4gICAgICA8dGVtcGxhdGUgdi1pZj1cInBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT0gJ1F1ZXN0aW9uR3JvdXAnIHx8IHBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT0gJ01hdGVyaWFsQ29udHJvbCcgfHwgcG9zaXRpb24ucXVlc3Rpb24udHlwZSA9PSAnUXVlc3Rpb25Hcm91cENvbnRyb2wnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZmlsbCBleHRlbmRlZCBncmF5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBnYXAtNSBhbGlnbi1pdGVtcy1jZW50ZXJcIiA6c3R5bGU9XCJhY2NvcmRpb25FeHBhbmRlZCA/ICdtYXJnaW4tYm90dG9tOiAxMHB4JyA6ICcnXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmlcIiA6Y2xhc3M9XCJhY2NvcmRpb25FeHBhbmRlZCA/ICdiaS1jYXJldC1kb3duLWZpbGwnIDogJ2JpLWNhcmV0LXJpZ2h0LWZpbGwnXCIgQGNsaWNrPVwidG9nZ2xlQWNjb3JkaW9uXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+PC9pPlxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciBmbGV4LWdyb3ctMVwiIEBjbGljaz1cInRvZ2dsZUFjY29yZGlvblwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxuICAgICAgICAgICAgICAgIHt7cG9zaXRpb24ucXVlc3Rpb24ubmFtZX19XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwieydxdWVzdGlvbi1hY3Rpb25zIGQtZmxleCBmbGV4LXJvdyBnYXAtMSBhbGlnbi1pdGVtcy1jZW50ZXInOiB0cnVlLCAnc2hvdy1hY3Rpb25zJzogc2hvd0FjdGlvbnN9XCJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogLTJweDtcIlxuICAgICAgICAgICAgICAgICAgICB2LWlmPVwicmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlbmNpbCBmcy0yXCIgQGNsaWNrPVwic2hvd0NvbmZpZyA9ICFzaG93Q29uZmlnXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIHYtaWY9XCJpc01hdGVyaWFsRmllbGRcIlxuICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cImlzVmlzaWJsZUluTWF0ZXJpYWxMaXN0ID8gJ2ZhLXNvbGlkIGZhLWV5ZSBmcy0yJyA6ICdmYS1zb2xpZCBmYS1leWUtc2xhc2ggZnMtMidcIlxuICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInRvZ2dsZU1hdGVyaWFsTGlzdFZpc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSW4gTWF0ZXJpYWxsaXN0ZSBhbnplaWdlblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWNsaXBib2FyZCBmcy0yXCJcbiAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7J2ZhLXNvbGlkJzogY2xpcGJvYXJkLmhhcyhwb3NpdGlvbiksICdmYS1yZWd1bGFyJzogIWNsaXBib2FyZC5oYXMocG9zaXRpb24pfVwiXG4gICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiY2xpcGJvYXJkLnRvZ2dsZShwb3NpdGlvbilcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS10cmFzaCBmcy0yXCIgQGNsaWNrPVwiZGVsZXRlUG9zaXRpb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgOmNsYXNzPVwiJ2JpIGJpLWFycm93cy1tb3ZlIGZzLTIgJyArIGRyYWdIYW5kbGVDbGFzcyBcIj48L2k+XG4gICAgICAgICAgICAgICAgPGFkZC1uZXctZmllbGQgQGFkZC1uZXc9XCJhZGROZXdcIi8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiYWNjb3JkaW9uRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgPHF1ZXN0aW9uLWNvbmZpZyB2LWlmPVwic2hvd0NvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbDpzaG93LWNvbmZpZz1cInNob3dDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw6cXVlc3Rpb249XCJwb3NpdGlvbi5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlbGV0ZS1wb3NpdGlvbj1cImRlbGV0ZVBvc2l0aW9uXCIgLz5cblxuICAgICAgICAgICAgICA8Y29tcG9uZW50IHYtYmluZDppcz1cInBvc2l0aW9uLnF1ZXN0aW9uLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJwb3NpdGlvbi5xdWVzdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgOnJlYWQtb25seT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICA6cG9zaXRpb249XCJwb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgOnF1ZXN0aW9uPVwicG9zaXRpb24ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHYtYmluZD1cImNoaWxkTWF0ZXJpYWxDb250ZXh0QmluZGluZ1wiIC8+XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWNvbnRyb2xzIGZsZXgtZmlsbFwiPlxuICAgICAgICAgICAgPHNlY3Rpb24taGVhZGVyLWNvbnRyb2wgdi1pZj1cInBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT0gJ1NlY3Rpb25IZWFkZXJDb250cm9sJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnF1ZXN0aW9uPVwicG9zaXRpb24ucXVlc3Rpb25cIiAvPlxuICAgICAgICAgICAgPGZvcm0tZmllbGQgdi1lbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOmxhYmVsPVwicG9zaXRpb24ucXVlc3Rpb24ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInBvc2l0aW9uLnF1ZXN0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpjb250cm9sPVwicG9zaXRpb24ucXVlc3Rpb24udHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6cXVlc3Rpb249XCJwb3NpdGlvbi5xdWVzdGlvblwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IDpjbGFzcz1cInsncXVlc3Rpb24tYWN0aW9ucyBkLWZsZXggZmxleC1yb3cgZ2FwLTEgYWxpZ24taXRlbXMtY2VudGVyJzogdHJ1ZSwgJ3Nob3ctYWN0aW9ucyc6IHNob3dBY3Rpb25zfVwiXG4gICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogLTJweDtcIlxuICAgICAgICAgICAgICAgdi1pZj1cInJlYWRPbmx5ID09IGZhbHNlXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXBlbmNpbCBmcy0yXCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgQGNsaWNrPVwic2hvd0NvbmZpZyA9ICFzaG93Q29uZmlnXCI+PC9pPlxuICAgICAgICAgICAgPGkgdi1pZj1cImlzTWF0ZXJpYWxGaWVsZFwiXG4gICAgICAgICAgICAgICA6Y2xhc3M9XCJpc1Zpc2libGVJbk1hdGVyaWFsTGlzdCA/ICdmYS1zb2xpZCBmYS1leWUgZnMtMicgOiAnZmEtc29saWQgZmEtZXllLXNsYXNoIGZzLTInXCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgQGNsaWNrPVwidG9nZ2xlTWF0ZXJpYWxMaXN0VmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICB0aXRsZT1cIkluIE1hdGVyaWFsbGlzdGUgYW56ZWlnZW5cIj48L2k+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLWNsaXBib2FyZCBmcy0yXCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgOmNsYXNzPVwieydmYS1zb2xpZCc6IGNsaXBib2FyZC5oYXMocG9zaXRpb24pLCAnZmEtcmVndWxhcic6ICFjbGlwYm9hcmQuaGFzKHBvc2l0aW9uKX1cIlxuICAgICAgICAgICAgICAgQGNsaWNrPVwiY2xpcGJvYXJkLnRvZ2dsZShwb3NpdGlvbilcIj48L2k+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZzLTJcIlxuICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVQb3NpdGlvblwiPjwvaT5cbiAgICAgICAgICAgIDxpIDpjbGFzcz1cIidiaSBiaS1hcnJvd3MtbW92ZSBmcy0yICcgKyBkcmFnSGFuZGxlQ2xhc3MgXCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiA+PC9pPlxuICAgICAgICAgICAgPGFkZC1uZXctZmllbGQgQGFkZC1uZXc9XCJhZGROZXdcIi8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8cXVlc3Rpb24tY29uZmlnIHYtaWY9XCJzaG93Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw6c2hvdy1jb25maWc9XCJzaG93Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw6cXVlc3Rpb249XCJwb3NpdGlvbi5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBAZGVsZXRlLXBvc2l0aW9uPVwiZGVsZXRlUG9zaXRpb25cIiAvPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMVwiXG4gICAgICAgICB2LWlmPVwiYWNjb3JkaW9uRXhwYW5kZWQgJiYgcmVhZE9ubHkgPT0gZmFsc2VcbiAgICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgIChDbGlwYm9hcmQuc2VsZWN0ZWQgJiYgc2hvd1Bhc3RlKVxuICAgICAgICAgICAgICAgIHx8IChwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09ICdRdWVzdGlvbkdyb3VwJyB8fCBwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09ICdNYXRlcmlhbENvbnRyb2wnIHx8IHBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT0gJ1F1ZXN0aW9uR3JvdXBDb250cm9sJylcbiAgICAgICAgICAgICAgKVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXBhc3RlIGZzLTJcIlxuICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICB2LWlmPVwiQ2xpcGJvYXJkLnNlbGVjdGVkICYmIHNob3dQYXN0ZVwiXG4gICAgICAgICBAY2xpY2s9XCJwYXN0ZUFmdGVyKHBvc2l0aW9uKVwiPjwvaT5cbiAgICAgIDxhZGQtbmV3LWZpZWxkIEBhZGQtbmV3PVwiYWRkTmV3XCJcbiAgICAgICAgdi1pZj1cIihwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09ICdRdWVzdGlvbkdyb3VwJyB8fCBwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09ICdNYXRlcmlhbENvbnRyb2wnIHx8IHBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT0gJ1F1ZXN0aW9uR3JvdXBDb250cm9sJylcIi8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbjpkZWVwKC5xdWVzdGlvbi1hY3Rpb25zKSB7XG4gIHdpZHRoOiAxMTBweDsgLyogSW5jcmVhc2VkIGZyb20gOTBweCB0byBmaXQgZXllIGljb24gKi9cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbk1vdW50ZWQsIHdhdGNoLCBuZXh0VGljaywgdG9SYXcsIHRyaWdnZXJSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICcuL0Zvcm1GaWVsZC52dWUnO1xuaW1wb3J0IFBvc2l0aW9uIGZyb20gJy4vUG9zaXRpb24udnVlJztcbmltcG9ydCB7IHVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUnXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEFkZE5ld0ZpZWxkIGZyb20gXCIuL0FkZE5ld0ZpZWxkLnZ1ZVwiO1xuaW1wb3J0IHt1c2VEZWJvdW5jZUZufSBmcm9tIFwiQHZ1ZXVzZS9jb3JlXCI7XG5pbXBvcnQgU2VsZWN0UmVwb3J0VGVtcGxhdGVHcmlkIGZyb20gXCIuLi9ncmlkcy9TZWxlY3RSZXBvcnRUZW1wbGF0ZUdyaWQudnVlXCI7XG5pbXBvcnQgQ2xpcGJvYXJkIGZyb20gXCIuLi9jbGlwYm9hcmRcIjtcbmltcG9ydCBFdmVudEJ1cyBmcm9tICcuLi9ldmVudGJ1cydcblxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyhbJ2RhdGEnLCAndHlwZScsICd1cmknLCAncmVhZG9ubHknXSk7XG5cbmNvbnN0IHJlYWRPbmx5ID0gcHJvcHMucmVhZG9ubHkgPyB0cnVlIDogZmFsc2U7XG5sZXQgZGF0YSA9IEpTT04ucGFyc2UocHJvcHMuZGF0YSk7XG5jb25zdCBlbnRpdHkgPSByZWYoZGF0YSk7XG5jb25zdCBjb250YWluZXIgPSByZWYoKTtcbmNvbnN0IHBvc2l0aW9ucyA9IHJlZihkYXRhLnBvc2l0aW9ucyk7XG5jb25zdCBwb3NpdGlvblJlZiA9IHJlZihbXSk7XG5cbkV2ZW50QnVzLiRlbWl0KCdzaG93LXNpZGViYXInKTtcblxuZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25zKCkge1xuICBwb3NpdGlvbnMudmFsdWUuZm9yRWFjaCgocG9zaXRpb24sIGluZGV4KSA9PiB7XG4gICAgcG9zaXRpb24ucG9zaXRpb24gPSBpbmRleDtcbiAgfSk7XG59XG5jb25zdCBwZXJzaXN0Q2hhbmdlcyA9IHVzZURlYm91bmNlRm4oKG9sZFZhbHVlLCBuZXdWYWx1ZSkgPT4ge1xuICBpZiAocHJvcHMucmVhZE9ubHkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IHBheWxvYWQgPSBzdHJ1Y3R1cmVkQ2xvbmUobmV3VmFsdWUpO1xuXG4gIGRlbGV0ZSBwYXlsb2FkLmF1dGhvcjtcbiAgZGVsZXRlIHBheWxvYWQucG9zaXRpb25zO1xuICBpZiAocGF5bG9hZC5jYXRlZ29yeSkge1xuICAgIHBheWxvYWQuY2F0ZWdvcnkgPSAnL2FwaS9jYXRlZ29yaWVzLycgKyBwYXlsb2FkLmNhdGVnb3J5LmlkO1xuICB9XG4gIGlmIChwYXlsb2FkLm1hbnVmYWN0dXJlcikge1xuICAgIHBheWxvYWQubWFudWZhY3R1cmVyID0gJy9hcGkvbWFudWZhY3R1cmVycy8nICsgcGF5bG9hZC5tYW51ZmFjdHVyZXIuaWQ7XG4gIH1cbiAgaWYgKHBheWxvYWQuZHVwbGljYXRlT2YpIHtcbiAgICBwYXlsb2FkLmR1cGxpY2F0ZU9mID0gJy9hcGkvbWF0ZXJpYWxzLycgKyBwYXlsb2FkLmR1cGxpY2F0ZU9mLmlkO1xuICB9XG4gIGF4aW9zLnB1dChwcm9wcy51cmksIHBheWxvYWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIH0pO1xufSwgMTAwMCk7XG53YXRjaChlbnRpdHkudmFsdWUsIHBlcnNpc3RDaGFuZ2VzKTtcblxud2F0Y2gocG9zaXRpb25zLCB1cGRhdGVQb3NpdGlvbnMpO1xuXG5mdW5jdGlvbiBoYW5kbGVEcmFnQ2hhbmdlcyhldnQpIHtcbiAgbGV0IHNvdXJjZUNvbXBvbmVudCA9IGV2dC5mcm9tLl9fdnVlUGFyZW50Q29tcG9uZW50O1xuICBsZXQgaXRlbSA9IHNvdXJjZUNvbXBvbmVudC5leHBvc2VkLnBvc2l0aW9ucy52YWx1ZS5zcGxpY2UoZXZ0Lm9sZEluZGV4LCAxKTtcbiAgaXRlbVswXS5jb250YWluZXIgPSBwcm9wcy51cmk7XG4gIHBvc2l0aW9ucy52YWx1ZS5zcGxpY2UoZXZ0Lm5ld0luZGV4LCAwLCBpdGVtWzBdKTtcbiAgdXBkYXRlUG9zaXRpb25zKCk7XG4gIGV2dC5pdGVtLl9fdnVlUGFyZW50Q29tcG9uZW50LmV4cG9zZWQucGVyc2lzdENoYW5nZXMoaXRlbVswXSwgaXRlbVswXSk7XG59XG5cbmNvbnN0IHtvcHRpb259ID0gdXNlU29ydGFibGUoY29udGFpbmVyLCBwb3NpdGlvbnMsIHtcbiAgZ3JvdXA6ICdwb3NpdGlvbnMnLFxuICBoYW5kbGU6ICcuZHJhZy1oYW5kbGUtJyArIGRhdGEuaWQsXG4gIC8vIGhhbmRsZTogJy5iaS1hcnJvd3MtbW92ZScsXG4gIGFuaW1hdGlvbjogMTUwLFxuICAvLyBFbGVtZW50IGlzIGRyb3BwZWQgaW50byB0aGUgbGlzdCBmcm9tIGFub3RoZXIgbGlzdFxuICBvbkFkZDogZnVuY3Rpb24gKGV2dCkge1xuICAgIGhhbmRsZURyYWdDaGFuZ2VzKGV2dCk7XG4gIH0sXG4gIG9uVXBkYXRlOiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgaGFuZGxlRHJhZ0NoYW5nZXMoZXZ0KTtcbiAgfSxcbiAgb25SZW1vdmU6IGZ1bmN0aW9uIChldnQpIHtcbiAgICB1cGRhdGVQb3NpdGlvbnMoKTtcbiAgfVxufSlcblxuZnVuY3Rpb24gYWRkTmV3KHR5cGUsIHBvc2l0aW9uKSB7XG4gIGlmICghcG9zaXRpb24pIHtcbiAgICBwb3NpdGlvbiA9IDA7XG4gIH1cbiAgbGV0IG5ld1Bvc2l0aW9uID0ge1xuICAgIGNvbnRhaW5lcjogJy9hcGkvJyArIHByb3BzLnR5cGUgKyAncy8nICsgZGF0YS5pZCxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgcXVlc3Rpb246IHtcbiAgICAgIG5hbWU6ICdOZXVlcyBGZWxkJyxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBjb25maWd1cmF0aW9uOiB7fSxcbiAgICAgIHBvc2l0aW9uczogW11cbiAgICB9XG4gIH07XG4gIHBvc2l0aW9ucy52YWx1ZS5zcGxpY2UocG9zaXRpb24gKyAxLCAwLCBuZXdQb3NpdGlvbik7XG4gIGxldCBpbmRleCA9IHBvc2l0aW9ucy52YWx1ZS5pbmRleE9mKG5ld1Bvc2l0aW9uKTtcbiAgYXhpb3MucG9zdCgnL2FwaS9wb3NpdGlvbnMnLCBuZXdQb3NpdGlvbikudGhlbihhc3luYyBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICBwb3NpdGlvbnMudmFsdWVbaW5kZXhdWydpZCddID0gcmVzcG9uc2UuZGF0YVsnaWQnXTtcbiAgICBwb3NpdGlvbnMudmFsdWVbaW5kZXhdWydxdWVzdGlvbiddWydpZCddID0gcmVzcG9uc2UuZGF0YVsncXVlc3Rpb24nXVsnaWQnXTtcblxuICAgIGF3YWl0IG5leHRUaWNrKClcblxuICAgIHBvc2l0aW9uUmVmLnZhbHVlLmZvckVhY2goKHBvc2l0aW9uKSA9PiB7XG4gICAgICBpZiAocG9zaXRpb24uaWQgPT0gcmVzcG9uc2UuZGF0YVsnaWQnXSkge1xuICAgICAgICBwb3NpdGlvbi5zaG93Q29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIHBvc2l0aW9uUmVmLnZhbHVlW3Bvc2l0aW9uLnBvc2l0aW9uKzFdLnNob3dDb25maWcgPSB0cnVlO1xuXG4gICAgdXBkYXRlUG9zaXRpb25zKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXN0ZUFmdGVyKHBvc2l0aW9uKSB7XG4gIGF4aW9zLnBvc3QoJy9hcGkvcG9zaXRpb25zL3Bhc3RlJyxcbiAgICAgIHtcbiAgICAgICAgcHJldmlvdXNQb3NpdGlvbjogcG9zaXRpb24uaWQsXG4gICAgICAgIHNlbGVjdGVkOiBDbGlwYm9hcmQuc2VsZWN0ZWQuaWQsXG4gICAgICAgIHRhcmdldDogJ2FmdGVyJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgXCJoZWFkZXJzXCI6IHtcbiAgICAgICAgICBcIkFjY2VwdFwiOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApLnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBwb3NpdGlvbnMudmFsdWUuc3BsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSwgMCwgcmVzcG9uc2UuZGF0YSk7XG4gICAgICBhd2FpdCBuZXh0VGljaygpXG4gICAgICB1cGRhdGVQb3NpdGlvbnMoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhc3RlKHBvc2l0aW9uKSB7XG4gIGNvbnNvbGUubG9nKGVudGl0eSk7XG4gIGF4aW9zLnBvc3QoJy9hcGkvcG9zaXRpb25zL3Bhc3RlJyxcbiAgICB7XG4gICAgICBjb250YWluZXJJZDogZW50aXR5LnZhbHVlLmlkLFxuICAgICAgc2VsZWN0ZWQ6IENsaXBib2FyZC5zZWxlY3RlZC5pZCxcbiAgICAgIHRhcmdldDogJ2luc2lkZS1lbmQnXG4gICAgfSxcbiAgICB7XG4gICAgICBcImhlYWRlcnNcIjoge1xuICAgICAgICBcIkFjY2VwdFwiOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgfVxuICAgIH1cbiAgKS50aGVuKGFzeW5jIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHBvc2l0aW9ucy52YWx1ZS5wdXNoKHJlc3BvbnNlLmRhdGEpO1xuICAgIGF3YWl0IG5leHRUaWNrKClcbiAgICB1cGRhdGVQb3NpdGlvbnMoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZVBvc2l0aW9uKHBvc2l0aW9uKSB7XG4gIFN3YWwuZmlyZSh7XG4gICAgdGl0bGU6IFwiU2luZCBTaWUgc2ljaGVyP1wiLFxuICAgIHRleHQ6IFwiU2luZCBzaWUgc2ljaGVyLCBkYXNzIFNpZSBcXFwiXCIgKyBwb3NpdGlvbi5xdWVzdGlvbi5uYW1lICsgXCJcXFwiIGzDtnNjaGVuIG3DtmNodGVuP1wiLFxuICAgIGljb246IFwid2FybmluZ1wiLFxuICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxuICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkphLCBsw7ZzY2hlbiFcIixcbiAgICBjYW5jZWxCdXR0b25UZXh0OiBcIk5laW4sIGFiYnJlY2hlbi5cIixcbiAgICBjdXN0b21DbGFzczoge1xuICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcbiAgICAgIGNhbmNlbEJ1dHRvbjogJ2J0biBidG4tb3V0bGluZSBidG4tb3V0bGluZS1wcmltYXJ5J1xuICAgIH0sXG4gICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWVcbiAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgcG9zaXRpb25zLnZhbHVlLnNwbGljZShwb3NpdGlvbnMudmFsdWUuaW5kZXhPZihwb3NpdGlvbiksIDEpO1xuICAgICAgYXhpb3MuZGVsZXRlKCcvYXBpL3Bvc2l0aW9ucy8nICsgcG9zaXRpb24uaWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZGVmaW5lRXhwb3NlKHtcbiAgY29tcG9uZW50TmFtZTogJ0VkaXRvcicsXG4gIHBvc2l0aW9uczogcG9zaXRpb25zLFxuICBlbnRpdHk6IGVudGl0eS52YWx1ZSxcbn0pO1xuPC9zY3JpcHQ+XG48c3R5bGUgc2NvcGVkPlxuICA6ZGVlcCgucXVlc3Rpb24tYWN0aW9ucykge1xuICAgIHdpZHRoOiAxMDhweDtcbiAgfVxuICA6ZGVlcCguZ3JheS1jb250YWluZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICB9XG4gIDpkZWVwKC5leHRlbmRlZCkge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgbWFyZ2luOiAwIC0xcmVtO1xuICB9XG48L3N0eWxlPlxuPHRlbXBsYXRlPlxuICA8Zm9ybT5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbiBtLWItNSBkLWZsZXggZmxleC1yb3cgZ2FwLTUgZmxleC13cmFwXCIgdi1pZj1cInR5cGUgPT0gJ3JlcG9ydCcgfHwgdHlwZSA9PSAnbWF0ZXJpYWwnIHx8IGVudGl0eS50ZW1wbGF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tY29udHJvbHMgZmxleC1maWxsXCI+XG4gICAgICAgICAgPGZvcm0tZmllbGQgbGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJlbnRpdHkubmFtZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsncXVlc3Rpb24tYWN0aW9ucyBkLWZsZXggZmxleC1yb3cgZ2FwLTEgYWxpZ24taXRlbXMtY2VudGVyJzogdHJ1ZX1cIiB2LWlmPVwicmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgICA8YWRkLW5ldy1maWVsZCBAYWRkLW5ldz1cImFkZE5ld1wiLz5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTJcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwgZnMtMlwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZzLTJcIj48L2k+XG4gICAgICAgICAgPCEtLSAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNvcHkgZnMtMlwiPjwvaT4tLT5cbiAgICAgICAgICA8IS0tICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiIHYtaWY9XCIhc2hvd0FjdGlvbnNcIj48L2k+LS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24gbS1iLTUgZC1mbGV4IGZsZXgtcm93IGdhcC01IGZsZXgtd3JhcFwiIHYtaWY9XCJ0eXBlID09ICdyZXBvcnQnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1jb250cm9scyBmbGV4LWZpbGxcIj5cbiAgICAgICAgICA8Zm9ybS1maWVsZCBsYWJlbD1cIlN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImVudGl0eS5zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgIDpyZWFkLW9ubHk9XCJyZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbD1cIlN0YXR1c0NvbnRyb2xcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7J3F1ZXN0aW9uLWFjdGlvbnMgZC1mbGV4IGZsZXgtcm93IGdhcC0xIGFsaWduLWl0ZW1zLWNlbnRlcic6IHRydWV9XCIgdi1pZj1cInJlYWRPbmx5ID09IGZhbHNlXCI+XG4gICAgICAgICAgPGFkZC1uZXctZmllbGQgQGFkZC1uZXc9XCJhZGROZXdcIi8+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1hcnJvd3MtbW92ZSBmcy0yXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktcGVuY2lsIGZzLTJcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS10cmFzaCBmcy0yXCI+PC9pPlxuICAgICAgICAgIDwhLS0gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1jb3B5IGZzLTJcIj48L2k+LS0+XG4gICAgICAgICAgPCEtLSAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRocmVlLWRvdHMtdmVydGljYWxcIiB2LWlmPVwiIXNob3dBY3Rpb25zXCI+PC9pPi0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uIG0tYi01IGQtZmxleCBmbGV4LXJvdyBnYXAtNSBmbGV4LXdyYXBcIiB2LWlmPVwidHlwZSA9PSAnbWF0ZXJpYWwnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1jb250cm9scyBmbGV4LWZpbGxcIj5cbiAgICAgICAgPGZvcm0tZmllbGQgbGFiZWw9XCJIZXJzdGVsbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImVudGl0eS5tYW51ZmFjdHVyZXJcIlxuICAgICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICA6ZW50aXR5PVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbD1cIk1hbnVmYWN0dXJlclNlbGVjdENvbnRyb2xcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsncXVlc3Rpb24tYWN0aW9ucyBkLWZsZXggZmxleC1yb3cgZ2FwLTEgYWxpZ24taXRlbXMtY2VudGVyJzogdHJ1ZX1cIiB2LWlmPVwicmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgICA8YWRkLW5ldy1maWVsZCBAYWRkLW5ldz1cInR5cGVvZihhZGROZXcpICE9ICd1bmRlZmluZWQnID8gYWRkTmV3IDogbnVsbFwiLz5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTJcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwgZnMtMlwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZzLTJcIj48L2k+XG4gICAgICAgICAgPCEtLSAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNvcHkgZnMtMlwiPjwvaT4tLT5cbiAgICAgICAgICA8IS0tICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiIHYtaWY9XCIhc2hvd0FjdGlvbnNcIj48L2k+LS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24gbS1iLTUgZC1mbGV4IGZsZXgtcm93IGdhcC01IGZsZXgtd3JhcFwiIHYtaWY9XCJ0eXBlID09ICdtYXRlcmlhbCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWNvbnRyb2xzIGZsZXgtZmlsbFwiPlxuICAgICAgICAgIDxmb3JtLWZpZWxkIGxhYmVsPVwiS2F0ZWdvcmllXCJcbiAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiZW50aXR5LmNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgIDplbnRpdHk9XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9XCJDYXRlZ29yeVNlbGVjdENvbnRyb2xcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsncXVlc3Rpb24tYWN0aW9ucyBkLWZsZXggZmxleC1yb3cgZ2FwLTEgYWxpZ24taXRlbXMtY2VudGVyJzogdHJ1ZX1cIiB2LWlmPVwicmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgICA8YWRkLW5ldy1maWVsZCBAYWRkLW5ldz1cInR5cGVvZihhZGROZXcpICE9ICd1bmRlZmluZWQnID8gYWRkTmV3IDogbnVsbFwiLz5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTJcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwgZnMtMlwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZzLTJcIj48L2k+XG4gICAgICAgICAgPCEtLSAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNvcHkgZnMtMlwiPjwvaT4tLT5cbiAgICAgICAgICA8IS0tICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiIHYtaWY9XCIhc2hvd0FjdGlvbnNcIj48L2k+LS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24gbS1iLTUgZC1mbGV4IGZsZXgtcm93IGdhcC01IGZsZXgtd3JhcFwiIHYtaWY9XCJ0eXBlID09ICdtYXRlcmlhbCdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWNvbnRyb2xzIGZsZXgtZmlsbFwiPlxuICAgICAgICAgIDxmb3JtLWZpZWxkIGxhYmVsPVwiRHVwbGlrYXQgdm9uXCJcbiAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiZW50aXR5LmR1cGxpY2F0ZU9mXCJcbiAgICAgICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICAgIDplbnRpdHk9XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9XCJNYXRlcmlhbER1cGxpY2F0ZVNlbGVjdENvbnRyb2xcIi8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsncXVlc3Rpb24tYWN0aW9ucyBkLWZsZXggZmxleC1yb3cgZ2FwLTEgYWxpZ24taXRlbXMtY2VudGVyJzogdHJ1ZX1cIiB2LWlmPVwicmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgICA8YWRkLW5ldy1maWVsZCBAYWRkLW5ldz1cInR5cGVvZihhZGROZXcpICE9ICd1bmRlZmluZWQnID8gYWRkTmV3IDogbnVsbFwiLz5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWFycm93cy1tb3ZlIGZzLTJcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwgZnMtMlwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZzLTJcIj48L2k+XG4gICAgICAgICAgPCEtLSAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLWNvcHkgZnMtMlwiPjwvaT4tLT5cbiAgICAgICAgICA8IS0tICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiIHYtaWY9XCIhc2hvd0FjdGlvbnNcIj48L2k+LS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbnMgcG9zaXRpb24tY29udGFpbmVyXCIgcmVmPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwb3NpdGlvbiB2LWZvcj1cInBvc2l0aW9uIGluIHBvc2l0aW9uc1wiXG4gICAgICAgICAgICAgICAgICA6cG9zaXRpb249XCJwb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICA6cm9vdC1jb250YWluZXI9XCJ1cmlcIlxuICAgICAgICAgICAgICAgICAgOmtleT1cInBvc2l0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgIDpkcmFnLWhhbmRsZS1jbGFzcz1cIidkcmFnLWhhbmRsZS0nICsgZGF0YS5pZFwiXG4gICAgICAgICAgICAgICAgICA6cmVhZC1vbmx5PVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgOnNob3ctcGFzdGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIEBhZGQtbmV3PVwiYWRkTmV3XCJcbiAgICAgICAgICAgICAgICAgIEBwYXN0ZS1hZnRlcj1cInBhc3RlQWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGRlbGV0ZS1wb3NpdGlvbj1cImRlbGV0ZVBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInBvc2l0aW9uUmVmXCIvPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0xXCIgdi1pZj1cInBvc2l0aW9ucy5sZW5ndGggPT09IDAgJiYgcmVhZE9ubHkgPT0gZmFsc2VcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXBhc3RlIGZzLTJcIlxuICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgdi1pZj1cIkNsaXBib2FyZC5zZWxlY3RlZFwiXG4gICAgICAgICAgIEBjbGljaz1cInBhc3RlKHBvc2l0aW9uKVwiPjwvaT5cbiAgICAgICAgPGFkZC1uZXctZmllbGQgQGFkZC1uZXc9XCJhZGROZXdcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuXG4gIDxzZWxlY3QtcmVwb3J0LXRlbXBsYXRlLWdyaWQgOmVudGl0eT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnR5cGU9XCJ0eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwicG9zaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cXVlcnlQYXJhbWV0ZXI9XCJ7J3RlbXBsYXRlJzogMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzaG93LWZpbHRlcj1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c2hvdy1leHBvcnQ9XCJmYWxzZVwiPjwvc2VsZWN0LXJlcG9ydC10ZW1wbGF0ZS1ncmlkPlxuPC90ZW1wbGF0ZT5cbiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoWydwb3NpdGlvbicsICdtYXRlcmlhbCddKTtcblxuY29uc3QgaXNWaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICBjb25zdCBxdWVzdGlvbk5hbWUgPSBwcm9wcy5wb3NpdGlvbj8ucXVlc3Rpb24/Lm5hbWU7XG5cbiAgLy8gQ2hlY2sgbWFzdGVyIHZpc2liaWxpdHkgY29uZmlnIChwb3B1bGF0ZWQgZnJvbSBiYWNrZW5kIGZvciBjbG9uZWQgbWF0ZXJpYWxzKVxuICBjb25zdCBtYXN0ZXJDb25maWcgPSBwcm9wcy5tYXRlcmlhbD8ubWFzdGVyVmlzaWJpbGl0eUNvbmZpZztcbiAgaWYgKG1hc3RlckNvbmZpZyAmJiBPYmplY3Qua2V5cyhtYXN0ZXJDb25maWcpLmxlbmd0aCA+IDApIHtcbiAgICAvLyBNYXN0ZXIgY29uZmlnIGNvbnRhaW5zIHF1ZXN0aW9uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHZpc2libGVcbiAgICByZXR1cm4gbWFzdGVyQ29uZmlnW3F1ZXN0aW9uTmFtZV0gPT09IHRydWU7XG4gIH1cblxuICAvLyBGYWxsYmFjayB0byBjaGVja2luZyB0aGUgY2xvbmUncyBvd24gY29uZmlndXJhdGlvblxuICByZXR1cm4gcHJvcHMucG9zaXRpb24/LnF1ZXN0aW9uPy5jb25maWd1cmF0aW9uPy5zaG93SW5NYXRlcmlhbExpc3QgPT09IHRydWU7XG59KTtcbjwvc2NyaXB0PlxuPHN0eWxlIHNjb3BlZD5cbiAgOmRlZXAoLnF1ZXN0aW9uLWFjdGlvbnMpIHtcbiAgICB3aWR0aDogOTBweDtcbiAgfVxuICA6ZGVlcCguZ3JheS1jb250YWluZXIpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICB9XG4gIDpkZWVwKC5leHRlbmRlZCkge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgbWFyZ2luOiAtOXB4IC0xcmVtO1xuICB9XG48L3N0eWxlPlxuPHRlbXBsYXRlPlxuICA8ZGl2IHYtaWY9XCJpc1Zpc2libGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1sYWJlbFwiPnt7cG9zaXRpb24ucXVlc3Rpb24ubmFtZX19PC9kaXY+XG4gICAgICA8ZGl2IHYtaWY9XCJwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09PSAnQ2hlY2tib3hDb250cm9sJ1wiXG4gICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVzdWx0XCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgdi1mb3I9XCIodmFsdWUsIGluZGV4KSBpbiBwb3NpdGlvbi5xdWVzdGlvbi52YWx1ZVwiIDprZXk9XCJpbmRleFwiPnt7IHZhbHVlIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRlbXBsYXRlIHYtZWxzZS1pZj1cInBvc2l0aW9uLnF1ZXN0aW9uLnR5cGUgPT09ICdNYXRlcmlhbENvbnRyb2wnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZXN1bHRcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWxhYmVsXCI+QmV6ZWljaG51bmc8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZXN1bHRcIj57e3Bvc2l0aW9uLnF1ZXN0aW9uLm1hdGVyaWFsLm5hbWV9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWxhYmVsXCI+SGVyc3RlbGxlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlc3VsdFwiPnt7cG9zaXRpb24ucXVlc3Rpb24ubWF0ZXJpYWwubWFudWZhY3R1cmVyLm5hbWV9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXRlcmlhbC1saXN0LXBvc2l0aW9uIHYtZm9yPVwiY2hpbGRQb3NpdGlvbiBpbiBwb3NpdGlvbi5xdWVzdGlvbi5tYXRlcmlhbC5wb3NpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpwb3NpdGlvbj1cImNoaWxkUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptYXRlcmlhbD1cInBvc2l0aW9uLnF1ZXN0aW9uLm1hdGVyaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiY2hpbGRQb3NpdGlvbi5pZFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDx0ZW1wbGF0ZSB2LWVsc2UtaWY9XCJwb3NpdGlvbi5xdWVzdGlvbi50eXBlID09PSAnUXVlc3Rpb25Hcm91cENvbnRyb2wnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZXN1bHRcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uc1wiPlxuICAgICAgICAgIDxtYXRlcmlhbC1saXN0LXBvc2l0aW9uIHYtZm9yPVwiY2hpbGRQb3NpdGlvbiBpbiBwb3NpdGlvbi5xdWVzdGlvbi5wb3NpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpwb3NpdGlvbj1cImNoaWxkUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDptYXRlcmlhbD1cIm1hdGVyaWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiY2hpbGRQb3NpdGlvbi5pZFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDxkaXYgdi1lbHNlXG4gICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVzdWx0XCI+XG4gICAgICAgICAge3twb3NpdGlvbi5xdWVzdGlvbi52YWx1ZX19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuIiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgb25Nb3VudGVkLCB3YXRjaCwgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuaW1wb3J0IEZvcm1GaWVsZCBmcm9tICcuL0Zvcm1GaWVsZC52dWUnO1xuaW1wb3J0IFBvc2l0aW9uIGZyb20gJy4vUG9zaXRpb24udnVlJztcbmltcG9ydCB7IHVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUnXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEFkZE5ld0ZpZWxkIGZyb20gXCIuL0FkZE5ld0ZpZWxkLnZ1ZVwiO1xuaW1wb3J0IE1hdGVyaWFsTGlzdFBvc2l0aW9uIGZyb20gXCIuL01hdGVyaWFsTGlzdFBvc2l0aW9uLnZ1ZVwiO1xuXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKFsnZGF0YSddKTtcblxubGV0IGRhdGEgPSBKU09OLnBhcnNlKHByb3BzLmRhdGEpO1xuXG5sZXQgcm93cyA9IFtdO1xuT2JqZWN0LmtleXMoZGF0YS5tYXRlcmlhbFBvc2l0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIHJvd3MucHVzaChkYXRhLm1hdGVyaWFsUG9zaXRpb25zW2tleV0pO1xufSk7XG5cbmNvbnN0IGNvbnRhaW5lciA9IHJlZigpO1xuY29uc3QgcG9zaXRpb25zID0gcmVmKHJvd3MpO1xuY29uc3QgcG9zaXRpb25SZWYgPSByZWYoW10pO1xuXG5mdW5jdGlvbiB1cGRhdGVQb3NpdGlvbnMoKSB7XG4gIHBvc2l0aW9ucy52YWx1ZS5mb3JFYWNoKChwb3NpdGlvbiwgaW5kZXgpID0+IHtcbiAgICBpbmRleCA9IGluZGV4ICsgMTtcbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gIT0gaW5kZXggJiYgcG9zaXRpb24uaWQpIHtcbiAgICAgIGF4aW9zLnBhdGNoKCcvYXBpL21hdGVyaWFsX2xpc3RfcG9zaXRpb25zLycgKyBwb3NpdGlvbi5pZCwge1xuICAgICAgICBwb3NpdGlvbjogaW5kZXhcbiAgICAgIH0sIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIHBhdGNoOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL21lcmdlLXBhdGNoK2pzb24nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge30pO1xuICAgIH1cbiAgICBwb3NpdGlvbi5wb3NpdGlvbiA9IGluZGV4O1xuICB9KTtcbn1cblxud2F0Y2gocG9zaXRpb25zLCB1cGRhdGVQb3NpdGlvbnMpO1xuXG5jb25zdCB7IG9wdGlvbiB9ID0gdXNlU29ydGFibGUoY29udGFpbmVyLCBwb3NpdGlvbnMsIHtcbiAgZ3JvdXA6ICdtYXRlcmlhbFBvc2l0aW9ucycsXG4gIGhhbmRsZTogJy5kcmFnLWhhbmRsZScsXG4gIGFuaW1hdGlvbjogMTUwLFxufSk7XG5cbmRlZmluZUV4cG9zZSh7XG4gIHBvc2l0aW9uczogcG9zaXRpb25zLnZhbHVlLFxufSk7XG48L3NjcmlwdD5cbjxzdHlsZSBzY29wZWQ+XG4gIDpkZWVwKC5xdWVzdGlvbi1hY3Rpb25zKSB7XG4gICAgd2lkdGg6IDkwcHg7XG4gIH1cbiAgOmRlZXAoLmdyYXktY29udGFpbmVyKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgfVxuICA6ZGVlcCguZXh0ZW5kZWQpIHtcbiAgICBwYWRkaW5nOiAxcmVtO1xuICAgIG1hcmdpbjogLTlweCAtMXJlbTtcbiAgfVxuPC9zdHlsZT5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdGVyaWFsLWxpc3RcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZCB0YWJsZS1zdHJpcGVkIG1hdGVyaWFsLWxpc3RcIj5cbiAgICAgIDx0Ym9keSByZWY9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHRyIHYtZm9yPVwicG9zaXRpb24gaW4gcG9zaXRpb25zXCJcbiAgICAgICAgICAgIDpwb3NpdGlvbj1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgIDprZXk9XCJwb3NpdGlvbi5pZFwiXG4gICAgICAgICAgICA6ZHJhZy1oYW5kbGUtY2xhc3M9XCInZHJhZy1oYW5kbGUtJyArIGRhdGEuaWRcIlxuICAgICAgICAgICAgcmVmPVwicG9zaXRpb25SZWZcIj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLW51bWJlclwiPnt7cG9zaXRpb24ucG9zaXRpb259fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwicG9zaXRpb24ubWF0ZXJpYWxcIj57e3Bvc2l0aW9uLm1hdGVyaWFsLm5hbWV9fTwvdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tZGlzcGxheSBwb3NpdGlvbi1kaXNwbGF5LXNtYWxsXCI+XG4gICAgICAgICAgICAgIDxtYXRlcmlhbC1saXN0LXBvc2l0aW9uIHYtZm9yPVwibWF0ZXJpYWxMaXN0UG9zaXRpb24gaW4gcG9zaXRpb24ubWF0ZXJpYWwucG9zaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnBvc2l0aW9uPVwibWF0ZXJpYWxMaXN0UG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bWF0ZXJpYWw9XCJwb3NpdGlvbi5tYXRlcmlhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtYXRlcmlhbExpc3RQb3NpdGlvbi5pZFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImNvbHVtbi1tYW51ZmFjdHVyZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJwb3NpdGlvbi5tYXRlcmlhbC5tYW51ZmFjdHVyZXJcIj5cbiAgICAgICAgICAgICAge3twb3NpdGlvbi5tYXRlcmlhbC5tYW51ZmFjdHVyZXIubmFtZX19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8aSA6Y2xhc3M9XCInYmkgYmktYXJyb3dzLW1vdmUgZnMtMiBkcmFnLWhhbmRsZSdcIiByb2xlPVwiYnV0dG9uXCI+PC9pPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=*/