.container:after {
  content: "";
  display: table;
  clear: both; }

.row:before, .row-reverse:before, .row:after, .row-reverse:after {
  content: "";
  display: table; }

.row:after, .row-reverse:after {
  clear: both; }

.row, .row-reverse {
  zoom: 1; }

.gr-1on5, .gr-0, .gr-1, .gr-2, .gr-3, .gr-4, .gr-5, .gr-6, .gr-7, .gr-8, .gr-9, .gr-10, .gr-11, .gr-12 {
  display: inline-block;
  min-height: 1px;
  float: left;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  vertical-align: top;
  padding-right: 10px;
  padding-left: 10px; }

.gr-adapt {
  display: table-cell;
  width: 1px;
  white-space: nowrap !important;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  font-size: 1rem;
  padding-right: 10px;
  padding-left: 10px; }

.gr-grow {
  display: table-cell;
  width: 99999px;
  white-space: nowrap;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  font-size: 1rem;
  padding-right: 10px;
  padding-left: 10px; }

.push-1on5, .push-0, .push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12 {
  position: relative; }

.pull-1on5, .pull-0, .pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12 {
  position: relative; }

.nowrap {
  white-space: nowrap; }
  .nowrap > * {
    white-space: normal; }

.wrap {
  white-space: normal; }

.gr-centered {
  display: block !important;
  float: none !important;
  margin-left: auto !important;
  margin-right: auto !important;
  clear: both !important; }

@media screen and (max-width: 1400px) {
  .container\@desktop:after {
    content: "";
    display: table;
    clear: both; } }

@media screen and (max-width: 1400px) {
  .row\@desktop:before, .row-reverse\@desktop:before, .row\@desktop:after, .row-reverse\@desktop:after {
    content: "";
    display: table; }
  .row\@desktop:after, .row-reverse\@desktop:after {
    clear: both; }
  .row\@desktop, .row-reverse\@desktop {
    zoom: 1; } }

@media screen and (max-width: 1400px) {
  .gr-1on5\@desktop, .gr-0\@desktop, .gr-1\@desktop, .gr-2\@desktop, .gr-3\@desktop, .gr-4\@desktop, .gr-5\@desktop, .gr-6\@desktop, .gr-7\@desktop, .gr-8\@desktop, .gr-9\@desktop, .gr-10\@desktop, .gr-11\@desktop, .gr-12\@desktop {
    display: inline-block;
    min-height: 1px;
    float: left;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    vertical-align: top;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 1400px) {
  .gr-adapt\@desktop {
    display: table-cell;
    width: 1px;
    white-space: nowrap !important;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    font-size: 1rem;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 1400px) {
  .gr-grow\@desktop {
    display: table-cell;
    width: 99999px;
    white-space: nowrap;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    font-size: 1rem;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 1400px) {
  .push-1on5\@desktop, .push-0\@desktop, .push-1\@desktop, .push-2\@desktop, .push-3\@desktop, .push-4\@desktop, .push-5\@desktop, .push-6\@desktop, .push-7\@desktop, .push-8\@desktop, .push-9\@desktop, .push-10\@desktop, .push-11\@desktop, .push-12\@desktop {
    position: relative; } }

@media screen and (max-width: 1400px) {
  .pull-1on5\@desktop, .pull-0\@desktop, .pull-1\@desktop, .pull-2\@desktop, .pull-3\@desktop, .pull-4\@desktop, .pull-5\@desktop, .pull-6\@desktop, .pull-7\@desktop, .pull-8\@desktop, .pull-9\@desktop, .pull-10\@desktop, .pull-11\@desktop, .pull-12\@desktop {
    position: relative; } }

@media screen and (max-width: 1400px) {
  .nowrap\@desktop {
    white-space: nowrap; }
    .nowrap\@desktop > * {
      white-space: normal; } }

@media screen and (max-width: 1400px) {
  .wrap\@desktop {
    white-space: normal; } }

@media screen and (max-width: 1400px) {
  .gr-centered\@desktop {
    display: block !important;
    float: none !important;
    margin-left: auto !important;
    margin-right: auto !important;
    clear: both !important; } }

@media screen and (max-width: 767px) {
  .container\@tablet:after {
    content: "";
    display: table;
    clear: both; } }

@media screen and (max-width: 767px) {
  .row\@tablet:before, .row-reverse\@tablet:before, .row\@tablet:after, .row-reverse\@tablet:after {
    content: "";
    display: table; }
  .row\@tablet:after, .row-reverse\@tablet:after {
    clear: both; }
  .row\@tablet, .row-reverse\@tablet {
    zoom: 1; } }

@media screen and (max-width: 767px) {
  .gr-1on5\@tablet, .gr-0\@tablet, .gr-1\@tablet, .gr-2\@tablet, .gr-3\@tablet, .gr-4\@tablet, .gr-5\@tablet, .gr-6\@tablet, .gr-7\@tablet, .gr-8\@tablet, .gr-9\@tablet, .gr-10\@tablet, .gr-11\@tablet, .gr-12\@tablet {
    display: inline-block;
    min-height: 1px;
    float: left;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    vertical-align: top;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 767px) {
  .gr-adapt\@tablet {
    display: table-cell;
    width: 1px;
    white-space: nowrap !important;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    font-size: 1rem;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 767px) {
  .gr-grow\@tablet {
    display: table-cell;
    width: 99999px;
    white-space: nowrap;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    font-size: 1rem;
    padding-right: 10px;
    padding-left: 10px; } }

@media screen and (max-width: 767px) {
  .push-1on5\@tablet, .push-0\@tablet, .push-1\@tablet, .push-2\@tablet, .push-3\@tablet, .push-4\@tablet, .push-5\@tablet, .push-6\@tablet, .push-7\@tablet, .push-8\@tablet, .push-9\@tablet, .push-10\@tablet, .push-11\@tablet, .push-12\@tablet {
    position: relative; } }

@media screen and (max-width: 767px) {
  .pull-1on5\@tablet, .pull-0\@tablet, .pull-1\@tablet, .pull-2\@tablet, .pull-3\@tablet, .pull-4\@tablet, .pull-5\@tablet, .pull-6\@tablet, .pull-7\@tablet, .pull-8\@tablet, .pull-9\@tablet, .pull-10\@tablet, .pull-11\@tablet, .pull-12\@tablet {
    position: relative; } }

@media screen and (max-width: 767px) {
  .nowrap\@tablet {
    white-space: nowrap; }
    .nowrap\@tablet > * {
      white-space: normal; } }

@media screen and (max-width: 767px) {
  .wrap\@tablet {
    white-space: normal; } }

@media screen and (max-width: 767px) {
  .gr-centered\@tablet {
    display: block !important;
    float: none !important;
    margin-left: auto !important;
    margin-right: auto !important;
    clear: both !important; } }

@media screen and (max-width: 400px) {
  @-ms-viewport {
    width: device-width; } }

#gridle-settings {
  content: '{ "version" : "2.0.44", "states" : { "default":{ "name" : "default", "min-width" : null, "max-width" : null, "query" : null, "classes" : true, "context" : "12", "column-width" : null, "gutter-width" : "20px", "gutter-height" : "0", "gutter-top" : "0", "gutter-right" : "10px", "gutter-bottom" : "0", "gutter-left" : "10px", "direction" : "ltr", "dir-attribute" : false, "name-multiplicator" : "1", "states-classes" : false, "classes-prefix" : null, "_" : true }, "desktop":{ "name" : "desktop", "min-width" : null, "max-width" : "1400px", "query" : "screen and (max-width: 1400px)", "classes" : true, "context" : "12", "column-width" : null, "gutter-width" : "30px", "gutter-height" : "0", "gutter-top" : "0", "gutter-right" : "15px", "gutter-bottom" : "0", "gutter-left" : "15px", "direction" : "ltr", "dir-attribute" : false, "name-multiplicator" : "1", "states-classes" : false, "classes-prefix" : null, "_" : true }, "tablet":{ "name" : "tablet", "min-width" : null, "max-width" : "767px", "query" : "screen and (max-width: 767px)", "classes" : true, "context" : "12", "column-width" : null, "gutter-width" : "10px", "gutter-height" : "0", "gutter-top" : "0", "gutter-right" : "5px", "gutter-bottom" : "0", "gutter-left" : "5px", "direction" : "ltr", "dir-attribute" : false, "name-multiplicator" : "1", "states-classes" : false, "classes-prefix" : null, "_" : true }} }'; }

.gr-1on5 {
  width: 20%; }

.push-1on5 {
  left: 20%; }

.pull-1on5 {
  right: 20%; }

.prefix-1on5 {
  margin-left: 20%; }

.suffix-1on5 {
  margin-right: 20%; }

.gr-0 {
  width: 0%; }

.push-0 {
  left: 0%; }

.pull-0 {
  right: 0%; }

.prefix-0 {
  margin-left: 0%; }

.suffix-0 {
  margin-right: 0%; }

.gr-1 {
  width: 8.33333%; }

.push-1 {
  left: 8.33333%; }

.pull-1 {
  right: 8.33333%; }

.prefix-1 {
  margin-left: 8.33333%; }

.suffix-1 {
  margin-right: 8.33333%; }

.gr-2 {
  width: 16.66667%; }

.push-2 {
  left: 16.66667%; }

.pull-2 {
  right: 16.66667%; }

.prefix-2 {
  margin-left: 16.66667%; }

.suffix-2 {
  margin-right: 16.66667%; }

.gr-3 {
  width: 25%; }

.push-3 {
  left: 25%; }

.pull-3 {
  right: 25%; }

.prefix-3 {
  margin-left: 25%; }

.suffix-3 {
  margin-right: 25%; }

.gr-4 {
  width: 33.33333%; }

.push-4 {
  left: 33.33333%; }

.pull-4 {
  right: 33.33333%; }

.prefix-4 {
  margin-left: 33.33333%; }

.suffix-4 {
  margin-right: 33.33333%; }

.gr-5 {
  width: 41.66667%; }

.push-5 {
  left: 41.66667%; }

.pull-5 {
  right: 41.66667%; }

.prefix-5 {
  margin-left: 41.66667%; }

.suffix-5 {
  margin-right: 41.66667%; }

.gr-6 {
  width: 50%; }

.push-6 {
  left: 50%; }

.pull-6 {
  right: 50%; }

.prefix-6 {
  margin-left: 50%; }

.suffix-6 {
  margin-right: 50%; }

.gr-7 {
  width: 58.33333%; }

.push-7 {
  left: 58.33333%; }

.pull-7 {
  right: 58.33333%; }

.prefix-7 {
  margin-left: 58.33333%; }

.suffix-7 {
  margin-right: 58.33333%; }

.gr-8 {
  width: 66.66667%; }

.push-8 {
  left: 66.66667%; }

.pull-8 {
  right: 66.66667%; }

.prefix-8 {
  margin-left: 66.66667%; }

.suffix-8 {
  margin-right: 66.66667%; }

.gr-9 {
  width: 75%; }

.push-9 {
  left: 75%; }

.pull-9 {
  right: 75%; }

.prefix-9 {
  margin-left: 75%; }

.suffix-9 {
  margin-right: 75%; }

.gr-10 {
  width: 83.33333%; }

.push-10 {
  left: 83.33333%; }

.pull-10 {
  right: 83.33333%; }

.prefix-10 {
  margin-left: 83.33333%; }

.suffix-10 {
  margin-right: 83.33333%; }

.gr-11 {
  width: 91.66667%; }

.push-11 {
  left: 91.66667%; }

.pull-11 {
  right: 91.66667%; }

.prefix-11 {
  margin-left: 91.66667%; }

.suffix-11 {
  margin-right: 91.66667%; }

.gr-12 {
  width: 100%; }

.push-12 {
  left: 100%; }

.pull-12 {
  right: 100%; }

.prefix-12 {
  margin-left: 100%; }

.suffix-12 {
  margin-right: 100%; }

.float-left {
  float: left; }

.float-right {
  float: right; }

.clear {
  clear: both; }

.clear-left {
  clear: left; }

.clear-right {
  clear: right; }

.no-gutter {
  padding-top: 0;
  padding-right: 0;
  padding-bottom: 0;
  padding-left: 0; }

.no-gutter-left {
  padding-left: 0; }

.no-gutter-right {
  padding-right: 0; }

.no-gutter-top {
  padding-top: 0; }

.no-gutter-bottom {
  padding-bottom: 0; }

.gutter {
  padding-right: 10px;
  padding-left: 10px; }

.gutter-left {
  padding-left: 10px; }

.gutter-right {
  padding-right: 10px; }

.auto-height {
  height: inherit; }

.row {
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin-left: -10px;
  margin-right: -10px; }
  [class*="no-gutter"] > .row {
    margin-left: 0 !important;
    margin-right: 0 !important; }

.row-reverse {
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin-left: -10px;
  margin-right: -10px; }
  [class*="no-gutter"] > .row-reverse {
    margin-left: 0 !important;
    margin-right: 0 !important; }

.row-full {
  width: 100vw;
  margin-left: 50% !important;
  margin-right: 0 !important;
  -webkit-transform: translateX(-50%);
  -moz-transition: translateX(-50%);
  -ms-transform: translateX(-50%);
  -o-transform: translateX(-50%);
  transform: translateX(-50%); }

.col {
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin-left: -10px;
  margin-right: -10px; }

.col-reverse {
  padding-left: 0 !important;
  padding-right: 0 !important;
  margin-left: -10px;
  margin-right: -10px; }

.gr-table {
  display: table-cell;
  float: none;
  vertical-align: top; }

.row-align-left {
  font-size: 0;
  clear: both;
  text-align: left; }
  .row-align-left > * {
    float: none !important;
    vertical-align: bottom;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-left > * {
    margin-right: -0.5px; } }

.row-align-center {
  font-size: 0;
  clear: both;
  text-align: center; }
  .row-align-center > * {
    float: none !important;
    vertical-align: bottom;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-center > * {
    margin-right: -0.5px; } }
  .row-align-center > * {
    text-align: left; }

.row-align-right {
  font-size: 0;
  clear: both;
  text-align: right; }
  .row-align-right > * {
    float: none !important;
    vertical-align: bottom;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-right > * {
    margin-right: -0.5px; } }
  .row-align-right > * {
    text-align: left; }

.row-align-middle {
  font-size: 0;
  clear: both;
  vertical-align: middle; }
  .row-align-middle > * {
    float: none !important;
    vertical-align: middle;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-middle > * {
    margin-right: -0.5px; } }

.row-align-top {
  font-size: 0;
  clear: both;
  vertical-align: top; }
  .row-align-top > * {
    float: none !important;
    vertical-align: top;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-top > * {
    margin-right: -0.5px; } }

.row-align-bottom {
  font-size: 0;
  clear: both;
  vertical-align: bottom; }
  .row-align-bottom > * {
    float: none !important;
    vertical-align: bottom;
    font-size: 1rem; }

@-moz-document url-prefix() {
  .row-align-bottom > * {
    margin-right: -0.5px; } }

.hide {
  display: none; }

.not-visible {
  visibility: hidden; }

.show {
  display: block; }

.show-inline {
  display: inline-block; }

.visible {
  visibility: visible; }

.clear-each-2 > [class*="gr-"]:nth-of-type(2n+1) {
  clear: left; }

.clear-each-3 > [class*="gr-"]:nth-of-type(3n+1) {
  clear: left; }

.clear-each-12 > [class*="gr-"]:nth-of-type(12n+1) {
  clear: both; }

.row-debug {
  position: relative;
  z-index: 99999;
  overflow: hidden; }
  .row-debug:before {
    pointer-events: none;
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 99999px;
    background: linear-gradient(to right, transparent 50%, rgba(0, 0, 0, 0.02) 50%);
    background-size: 16.66667% 100%;
    z-index: 99999; }

body {
  direction: ltr; }

@media screen and (max-width: 1400px) {
  .gr-1on5\@desktop {
    width: 20%; }
  .push-1on5\@desktop {
    left: 20%; }
  .pull-1on5\@desktop {
    right: 20%; }
  .prefix-1on5\@desktop {
    margin-left: 20%; }
  .suffix-1on5\@desktop {
    margin-right: 20%; }
  .gr-0\@desktop {
    width: 0%; }
  .push-0\@desktop {
    left: 0%; }
  .pull-0\@desktop {
    right: 0%; }
  .prefix-0\@desktop {
    margin-left: 0%; }
  .suffix-0\@desktop {
    margin-right: 0%; }
  .gr-1\@desktop {
    width: 8.33333%; }
  .push-1\@desktop {
    left: 8.33333%; }
  .pull-1\@desktop {
    right: 8.33333%; }
  .prefix-1\@desktop {
    margin-left: 8.33333%; }
  .suffix-1\@desktop {
    margin-right: 8.33333%; }
  .gr-2\@desktop {
    width: 16.66667%; }
  .push-2\@desktop {
    left: 16.66667%; }
  .pull-2\@desktop {
    right: 16.66667%; }
  .prefix-2\@desktop {
    margin-left: 16.66667%; }
  .suffix-2\@desktop {
    margin-right: 16.66667%; }
  .gr-3\@desktop {
    width: 25%; }
  .push-3\@desktop {
    left: 25%; }
  .pull-3\@desktop {
    right: 25%; }
  .prefix-3\@desktop {
    margin-left: 25%; }
  .suffix-3\@desktop {
    margin-right: 25%; }
  .gr-4\@desktop {
    width: 33.33333%; }
  .push-4\@desktop {
    left: 33.33333%; }
  .pull-4\@desktop {
    right: 33.33333%; }
  .prefix-4\@desktop {
    margin-left: 33.33333%; }
  .suffix-4\@desktop {
    margin-right: 33.33333%; }
  .gr-5\@desktop {
    width: 41.66667%; }
  .push-5\@desktop {
    left: 41.66667%; }
  .pull-5\@desktop {
    right: 41.66667%; }
  .prefix-5\@desktop {
    margin-left: 41.66667%; }
  .suffix-5\@desktop {
    margin-right: 41.66667%; }
  .gr-6\@desktop {
    width: 50%; }
  .push-6\@desktop {
    left: 50%; }
  .pull-6\@desktop {
    right: 50%; }
  .prefix-6\@desktop {
    margin-left: 50%; }
  .suffix-6\@desktop {
    margin-right: 50%; }
  .gr-7\@desktop {
    width: 58.33333%; }
  .push-7\@desktop {
    left: 58.33333%; }
  .pull-7\@desktop {
    right: 58.33333%; }
  .prefix-7\@desktop {
    margin-left: 58.33333%; }
  .suffix-7\@desktop {
    margin-right: 58.33333%; }
  .gr-8\@desktop {
    width: 66.66667%; }
  .push-8\@desktop {
    left: 66.66667%; }
  .pull-8\@desktop {
    right: 66.66667%; }
  .prefix-8\@desktop {
    margin-left: 66.66667%; }
  .suffix-8\@desktop {
    margin-right: 66.66667%; }
  .gr-9\@desktop {
    width: 75%; }
  .push-9\@desktop {
    left: 75%; }
  .pull-9\@desktop {
    right: 75%; }
  .prefix-9\@desktop {
    margin-left: 75%; }
  .suffix-9\@desktop {
    margin-right: 75%; }
  .gr-10\@desktop {
    width: 83.33333%; }
  .push-10\@desktop {
    left: 83.33333%; }
  .pull-10\@desktop {
    right: 83.33333%; }
  .prefix-10\@desktop {
    margin-left: 83.33333%; }
  .suffix-10\@desktop {
    margin-right: 83.33333%; }
  .gr-11\@desktop {
    width: 91.66667%; }
  .push-11\@desktop {
    left: 91.66667%; }
  .pull-11\@desktop {
    right: 91.66667%; }
  .prefix-11\@desktop {
    margin-left: 91.66667%; }
  .suffix-11\@desktop {
    margin-right: 91.66667%; }
  .gr-12\@desktop {
    width: 100%; }
  .push-12\@desktop {
    left: 100%; }
  .pull-12\@desktop {
    right: 100%; }
  .prefix-12\@desktop {
    margin-left: 100%; }
  .suffix-12\@desktop {
    margin-right: 100%; }
  .float-left\@desktop {
    float: left; }
  .float-right\@desktop {
    float: right; }
  .clear\@desktop {
    clear: both; }
  .clear-left\@desktop {
    clear: left; }
  .clear-right\@desktop {
    clear: right; }
  .no-gutter\@desktop {
    padding-top: 0;
    padding-right: 0;
    padding-bottom: 0;
    padding-left: 0; }
  .no-gutter-left\@desktop {
    padding-left: 0; }
  .no-gutter-right\@desktop {
    padding-right: 0; }
  .no-gutter-top\@desktop {
    padding-top: 0; }
  .no-gutter-bottom\@desktop {
    padding-bottom: 0; }
  .gutter\@desktop {
    padding-right: 15px;
    padding-left: 15px; }
  .gutter-left\@desktop {
    padding-left: 15px; }
  .gutter-right\@desktop {
    padding-right: 15px; }
  .auto-height\@desktop {
    height: inherit; }
  .row\@desktop {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -15px;
    margin-right: -15px; }
    [class*="no-gutter"] > .row\@desktop {
      margin-left: 0 !important;
      margin-right: 0 !important; }
  .row-reverse\@desktop {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -15px;
    margin-right: -15px; }
    [class*="no-gutter"] > .row-reverse\@desktop {
      margin-left: 0 !important;
      margin-right: 0 !important; }
  .row-full\@desktop {
    width: 100vw;
    margin-left: 50% !important;
    margin-right: 0 !important;
    -webkit-transform: translateX(-50%);
    -moz-transition: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%); }
  .col\@desktop {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -15px;
    margin-right: -15px; }
  .col-reverse\@desktop {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -15px;
    margin-right: -15px; }
  .gr-table\@desktop {
    display: table-cell;
    float: none;
    vertical-align: top; }
  .row-align-left\@desktop {
    font-size: 0;
    clear: both;
    text-align: left; }
    .row-align-left\@desktop > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-left\@desktop > * {
      margin-right: -0.5px; } }
  .row-align-center\@desktop {
    font-size: 0;
    clear: both;
    text-align: center; }
    .row-align-center\@desktop > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-center\@desktop > * {
      margin-right: -0.5px; } }
    .row-align-center\@desktop > * {
      text-align: left; }
  .row-align-right\@desktop {
    font-size: 0;
    clear: both;
    text-align: right; }
    .row-align-right\@desktop > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-right\@desktop > * {
      margin-right: -0.5px; } }
    .row-align-right\@desktop > * {
      text-align: left; }
  .row-align-middle\@desktop {
    font-size: 0;
    clear: both;
    vertical-align: middle; }
    .row-align-middle\@desktop > * {
      float: none !important;
      vertical-align: middle;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-middle\@desktop > * {
      margin-right: -0.5px; } }
  .row-align-top\@desktop {
    font-size: 0;
    clear: both;
    vertical-align: top; }
    .row-align-top\@desktop > * {
      float: none !important;
      vertical-align: top;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-top\@desktop > * {
      margin-right: -0.5px; } }
  .row-align-bottom\@desktop {
    font-size: 0;
    clear: both;
    vertical-align: bottom; }
    .row-align-bottom\@desktop > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-bottom\@desktop > * {
      margin-right: -0.5px; } }
  .hide\@desktop {
    display: none; }
  .not-visible\@desktop {
    visibility: hidden; }
  .show\@desktop {
    display: block; }
  .show-inline\@desktop {
    display: inline-block; }
  .visible\@desktop {
    visibility: visible; }
  .clear-each-2\@desktop > [class*="gr-"]:nth-of-type(2n+1) {
    clear: left; }
  .clear-each-3\@desktop > [class*="gr-"]:nth-of-type(3n+1) {
    clear: left; }
  .clear-each-12\@desktop > [class*="gr-"]:nth-of-type(12n+1) {
    clear: both; }
  .row-debug\@desktop {
    position: relative;
    z-index: 99999;
    overflow: hidden; }
    .row-debug\@desktop:before {
      pointer-events: none;
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 99999px;
      background: linear-gradient(to right, transparent 50%, rgba(0, 0, 0, 0.02) 50%);
      background-size: 16.66667% 100%;
      z-index: 99999; }
  body {
    direction: ltr; } }

@media screen and (max-width: 767px) {
  .gr-1on5\@tablet {
    width: 20%; }
  .push-1on5\@tablet {
    left: 20%; }
  .pull-1on5\@tablet {
    right: 20%; }
  .prefix-1on5\@tablet {
    margin-left: 20%; }
  .suffix-1on5\@tablet {
    margin-right: 20%; }
  .gr-0\@tablet {
    width: 0%; }
  .push-0\@tablet {
    left: 0%; }
  .pull-0\@tablet {
    right: 0%; }
  .prefix-0\@tablet {
    margin-left: 0%; }
  .suffix-0\@tablet {
    margin-right: 0%; }
  .gr-1\@tablet {
    width: 8.33333%; }
  .push-1\@tablet {
    left: 8.33333%; }
  .pull-1\@tablet {
    right: 8.33333%; }
  .prefix-1\@tablet {
    margin-left: 8.33333%; }
  .suffix-1\@tablet {
    margin-right: 8.33333%; }
  .gr-2\@tablet {
    width: 16.66667%; }
  .push-2\@tablet {
    left: 16.66667%; }
  .pull-2\@tablet {
    right: 16.66667%; }
  .prefix-2\@tablet {
    margin-left: 16.66667%; }
  .suffix-2\@tablet {
    margin-right: 16.66667%; }
  .gr-3\@tablet {
    width: 25%; }
  .push-3\@tablet {
    left: 25%; }
  .pull-3\@tablet {
    right: 25%; }
  .prefix-3\@tablet {
    margin-left: 25%; }
  .suffix-3\@tablet {
    margin-right: 25%; }
  .gr-4\@tablet {
    width: 33.33333%; }
  .push-4\@tablet {
    left: 33.33333%; }
  .pull-4\@tablet {
    right: 33.33333%; }
  .prefix-4\@tablet {
    margin-left: 33.33333%; }
  .suffix-4\@tablet {
    margin-right: 33.33333%; }
  .gr-5\@tablet {
    width: 41.66667%; }
  .push-5\@tablet {
    left: 41.66667%; }
  .pull-5\@tablet {
    right: 41.66667%; }
  .prefix-5\@tablet {
    margin-left: 41.66667%; }
  .suffix-5\@tablet {
    margin-right: 41.66667%; }
  .gr-6\@tablet {
    width: 50%; }
  .push-6\@tablet {
    left: 50%; }
  .pull-6\@tablet {
    right: 50%; }
  .prefix-6\@tablet {
    margin-left: 50%; }
  .suffix-6\@tablet {
    margin-right: 50%; }
  .gr-7\@tablet {
    width: 58.33333%; }
  .push-7\@tablet {
    left: 58.33333%; }
  .pull-7\@tablet {
    right: 58.33333%; }
  .prefix-7\@tablet {
    margin-left: 58.33333%; }
  .suffix-7\@tablet {
    margin-right: 58.33333%; }
  .gr-8\@tablet {
    width: 66.66667%; }
  .push-8\@tablet {
    left: 66.66667%; }
  .pull-8\@tablet {
    right: 66.66667%; }
  .prefix-8\@tablet {
    margin-left: 66.66667%; }
  .suffix-8\@tablet {
    margin-right: 66.66667%; }
  .gr-9\@tablet {
    width: 75%; }
  .push-9\@tablet {
    left: 75%; }
  .pull-9\@tablet {
    right: 75%; }
  .prefix-9\@tablet {
    margin-left: 75%; }
  .suffix-9\@tablet {
    margin-right: 75%; }
  .gr-10\@tablet {
    width: 83.33333%; }
  .push-10\@tablet {
    left: 83.33333%; }
  .pull-10\@tablet {
    right: 83.33333%; }
  .prefix-10\@tablet {
    margin-left: 83.33333%; }
  .suffix-10\@tablet {
    margin-right: 83.33333%; }
  .gr-11\@tablet {
    width: 91.66667%; }
  .push-11\@tablet {
    left: 91.66667%; }
  .pull-11\@tablet {
    right: 91.66667%; }
  .prefix-11\@tablet {
    margin-left: 91.66667%; }
  .suffix-11\@tablet {
    margin-right: 91.66667%; }
  .gr-12\@tablet {
    width: 100%; }
  .push-12\@tablet {
    left: 100%; }
  .pull-12\@tablet {
    right: 100%; }
  .prefix-12\@tablet {
    margin-left: 100%; }
  .suffix-12\@tablet {
    margin-right: 100%; }
  .float-left\@tablet {
    float: left; }
  .float-right\@tablet {
    float: right; }
  .clear\@tablet {
    clear: both; }
  .clear-left\@tablet {
    clear: left; }
  .clear-right\@tablet {
    clear: right; }
  .no-gutter\@tablet {
    padding-top: 0;
    padding-right: 0;
    padding-bottom: 0;
    padding-left: 0; }
  .no-gutter-left\@tablet {
    padding-left: 0; }
  .no-gutter-right\@tablet {
    padding-right: 0; }
  .no-gutter-top\@tablet {
    padding-top: 0; }
  .no-gutter-bottom\@tablet {
    padding-bottom: 0; }
  .gutter\@tablet {
    padding-right: 5px;
    padding-left: 5px; }
  .gutter-left\@tablet {
    padding-left: 5px; }
  .gutter-right\@tablet {
    padding-right: 5px; }
  .auto-height\@tablet {
    height: inherit; }
  .row\@tablet {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -5px;
    margin-right: -5px; }
    [class*="no-gutter"] > .row\@tablet {
      margin-left: 0 !important;
      margin-right: 0 !important; }
  .row-reverse\@tablet {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -5px;
    margin-right: -5px; }
    [class*="no-gutter"] > .row-reverse\@tablet {
      margin-left: 0 !important;
      margin-right: 0 !important; }
  .row-full\@tablet {
    width: 100vw;
    margin-left: 50% !important;
    margin-right: 0 !important;
    -webkit-transform: translateX(-50%);
    -moz-transition: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%); }
  .col\@tablet {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -5px;
    margin-right: -5px; }
  .col-reverse\@tablet {
    padding-left: 0 !important;
    padding-right: 0 !important;
    margin-left: -5px;
    margin-right: -5px; }
  .gr-table\@tablet {
    display: table-cell;
    float: none;
    vertical-align: top; }
  .row-align-left\@tablet {
    font-size: 0;
    clear: both;
    text-align: left; }
    .row-align-left\@tablet > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-left\@tablet > * {
      margin-right: -0.5px; } }
  .row-align-center\@tablet {
    font-size: 0;
    clear: both;
    text-align: center; }
    .row-align-center\@tablet > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-center\@tablet > * {
      margin-right: -0.5px; } }
    .row-align-center\@tablet > * {
      text-align: left; }
  .row-align-right\@tablet {
    font-size: 0;
    clear: both;
    text-align: right; }
    .row-align-right\@tablet > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-right\@tablet > * {
      margin-right: -0.5px; } }
    .row-align-right\@tablet > * {
      text-align: left; }
  .row-align-middle\@tablet {
    font-size: 0;
    clear: both;
    vertical-align: middle; }
    .row-align-middle\@tablet > * {
      float: none !important;
      vertical-align: middle;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-middle\@tablet > * {
      margin-right: -0.5px; } }
  .row-align-top\@tablet {
    font-size: 0;
    clear: both;
    vertical-align: top; }
    .row-align-top\@tablet > * {
      float: none !important;
      vertical-align: top;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-top\@tablet > * {
      margin-right: -0.5px; } }
  .row-align-bottom\@tablet {
    font-size: 0;
    clear: both;
    vertical-align: bottom; }
    .row-align-bottom\@tablet > * {
      float: none !important;
      vertical-align: bottom;
      font-size: 1rem; }
  @-moz-document url-prefix() {
    .row-align-bottom\@tablet > * {
      margin-right: -0.5px; } }
  .hide\@tablet {
    display: none; }
  .not-visible\@tablet {
    visibility: hidden; }
  .show\@tablet {
    display: block; }
  .show-inline\@tablet {
    display: inline-block; }
  .visible\@tablet {
    visibility: visible; }
  .clear-each-2\@tablet > [class*="gr-"]:nth-of-type(2n+1) {
    clear: left; }
  .clear-each-3\@tablet > [class*="gr-"]:nth-of-type(3n+1) {
    clear: left; }
  .clear-each-12\@tablet > [class*="gr-"]:nth-of-type(12n+1) {
    clear: both; }
  .row-debug\@tablet {
    position: relative;
    z-index: 99999;
    overflow: hidden; }
    .row-debug\@tablet:before {
      pointer-events: none;
      content: '';
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 99999px;
      background: linear-gradient(to right, transparent 50%, rgba(0, 0, 0, 0.02) 50%);
      background-size: 16.66667% 100%;
      z-index: 99999; }
  body {
    direction: ltr; } }

@media screen and (max-width: 1400px) {
  .gr-1on5, .gr-0, .gr-1, .gr-2, .gr-3, .gr-4, .gr-5, .gr-6, .gr-7, .gr-8, .gr-9, .gr-10, .gr-11, .gr-12, .gr-1on5\@desktop, .gr-0\@desktop, .gr-1\@desktop, .gr-2\@desktop, .gr-3\@desktop, .gr-4\@desktop, .gr-5\@desktop, .gr-6\@desktop, .gr-7\@desktop, .gr-8\@desktop, .gr-9\@desktop, .gr-10\@desktop, .gr-11\@desktop, .gr-12\@desktop, .gr-1on5\@tablet, .gr-0\@tablet, .gr-1\@tablet, .gr-2\@tablet, .gr-3\@tablet, .gr-4\@tablet, .gr-5\@tablet, .gr-6\@tablet, .gr-7\@tablet, .gr-8\@tablet, .gr-9\@tablet, .gr-10\@tablet, .gr-11\@tablet, .gr-12\@tablet {
    padding-right: 15px;
    padding-left: 15px; }
  .gr-grow, .gr-grow\@desktop, .gr-grow\@tablet {
    padding-right: 15px;
    padding-left: 15px; }
  .gr-adapt, .gr-adapt\@desktop, .gr-adapt\@tablet {
    padding-right: 15px;
    padding-left: 15px; } }

@media screen and (max-width: 767px) {
  .gr-1on5, .gr-0, .gr-1, .gr-2, .gr-3, .gr-4, .gr-5, .gr-6, .gr-7, .gr-8, .gr-9, .gr-10, .gr-11, .gr-12, .gr-1on5\@desktop, .gr-0\@desktop, .gr-1\@desktop, .gr-2\@desktop, .gr-3\@desktop, .gr-4\@desktop, .gr-5\@desktop, .gr-6\@desktop, .gr-7\@desktop, .gr-8\@desktop, .gr-9\@desktop, .gr-10\@desktop, .gr-11\@desktop, .gr-12\@desktop, .gr-1on5\@tablet, .gr-0\@tablet, .gr-1\@tablet, .gr-2\@tablet, .gr-3\@tablet, .gr-4\@tablet, .gr-5\@tablet, .gr-6\@tablet, .gr-7\@tablet, .gr-8\@tablet, .gr-9\@tablet, .gr-10\@tablet, .gr-11\@tablet, .gr-12\@tablet {
    padding-right: 5px;
    padding-left: 5px; }
  .gr-grow, .gr-grow\@desktop, .gr-grow\@tablet {
    padding-right: 5px;
    padding-left: 5px; }
  .gr-adapt, .gr-adapt\@desktop, .gr-adapt\@tablet {
    padding-right: 5px;
    padding-left: 5px; } }

[class*="gr"] > [class*="row"],
[class*="gr"] > [class*="col"] {
  margin-left: -10px;
  margin-right: -10px; }

@media screen and (max-width: 1400px) {
  [class*="gr"] > [class*="row"],
  [class*="gr"] > [class*="col"] {
    margin-left: -15px;
    margin-right: -15px; } }

@media screen and (max-width: 767px) {
  [class*="gr"] > [class*="row"],
  [class*="gr"] > [class*="col"] {
    margin-left: -5px;
    margin-right: -5px; } }

.no-margin-test-top {
  margin-top: 0; }

.no-margin-test-right {
  margin-right: 0; }

.no-margin-test-bottom {
  margin-bottom: 0; }

.no-margin-test-left {
  margin-left: 0; }

.no-margin-test {
  margin: 0; }

.no-margin-ok-top {
  margin-top: 0; }

.no-margin-ok-right {
  margin-right: 0; }

.no-margin-ok-bottom {
  margin-bottom: 0; }

.no-margin-ok-left {
  margin-left: 0; }

.no-margin-ok {
  margin: 0; }

.no-margin-good-top {
  margin-top: 0; }

.no-margin-good-right {
  margin-right: 0; }

.no-margin-good-bottom {
  margin-bottom: 0; }

.no-margin-good-left {
  margin-left: 0; }

.no-margin-good {
  margin: 0; }

@media screen and (max-width: 1400px) {
  .no-margin-test-top\@desktop {
    margin-top: 0; }
  .no-margin-test-right\@desktop {
    margin-right: 0; }
  .no-margin-test-bottom\@desktop {
    margin-bottom: 0; }
  .no-margin-test-left\@desktop {
    margin-left: 0; }
  .no-margin-test\@desktop {
    margin: 0; }
  .no-margin-ok-top\@desktop {
    margin-top: 0; }
  .no-margin-ok-right\@desktop {
    margin-right: 0; }
  .no-margin-ok-bottom\@desktop {
    margin-bottom: 0; }
  .no-margin-ok-left\@desktop {
    margin-left: 0; }
  .no-margin-ok\@desktop {
    margin: 0; }
  .no-margin-good-top\@desktop {
    margin-top: 0; }
  .no-margin-good-right\@desktop {
    margin-right: 0; }
  .no-margin-good-bottom\@desktop {
    margin-bottom: 0; }
  .no-margin-good-left\@desktop {
    margin-left: 0; }
  .no-margin-good\@desktop {
    margin: 0; } }

@media screen and (max-width: 767px) {
  .no-margin-test-top\@tablet {
    margin-top: 0; }
  .no-margin-test-right\@tablet {
    margin-right: 0; }
  .no-margin-test-bottom\@tablet {
    margin-bottom: 0; }
  .no-margin-test-left\@tablet {
    margin-left: 0; }
  .no-margin-test\@tablet {
    margin: 0; }
  .no-margin-ok-top\@tablet {
    margin-top: 0; }
  .no-margin-ok-right\@tablet {
    margin-right: 0; }
  .no-margin-ok-bottom\@tablet {
    margin-bottom: 0; }
  .no-margin-ok-left\@tablet {
    margin-left: 0; }
  .no-margin-ok\@tablet {
    margin: 0; }
  .no-margin-good-top\@tablet {
    margin-top: 0; }
  .no-margin-good-right\@tablet {
    margin-right: 0; }
  .no-margin-good-bottom\@tablet {
    margin-bottom: 0; }
  .no-margin-good-left\@tablet {
    margin-left: 0; }
  .no-margin-good\@tablet {
    margin: 0; } }

.test {
  background: red;
  height: 100px; }

/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5jc3MiLCJzb3VyY2VzIjpbIm1haW4uc2NzcyIsIi4uLy4uL3Nhc3MvZ3JpZGxlL19ncmlkbGUuc2NzcyIsIi4uLy4uL3Nhc3MvZ3JpZGxlL19pbml0LnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fZmxleGJveC5zY3NzIiwiLi4vLi4vc2Fzcy9ncmlkbGUvX3NldHRpbmdzLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fZnVuY3Rpb25zLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fc2V0dGluZ3MtbWl4aW5zLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fbWl4aW5zLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fYXBpLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fZ2VuZXJhdGUtbWl4aW5zLnNjc3MiLCIuLi8uLi9zYXNzL2dyaWRsZS9fZGVmYXVsdC1zdGF0ZXMuc2NzcyIsIi4uLy4uL3Nhc3MvZ3JpZGxlL19kcml2ZXItZGVmYXVsdC5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCIuLi8uLi9zYXNzL2dyaWRsZS9ncmlkbGVcIjsvLyBJbXBvcnQgZ3JpZGxlXG5cblxuLy8gc2V0dXAgdGhlIGdyaWQgKHJlcXVpcmVkKVxuQGluY2x1ZGUgZ3JpZGxlX3NldHVwKChcblx0Y29udGV4dCA6IDEyLFxuXHRndXR0ZXItd2lkdGggOiAyMHB4LFxuXHQvLyBndXR0ZXItbGVmdCA6IDIwcHgsXG5cdC8vIGRpcmVjdGlvbiA6IHJ0bCxcblx0Ly8gZGlyLWF0dHJpYnV0ZSA6IHRydWUsXG5cdHN0YXRlcy1jbGFzc2VzIDogZmFsc2UsXG5cdC8vIGNsYXNzZXMtcHJlZml4IDogJ2dyLSdcbikpO1xuXG4vLyByZWdpc3RlciBzcGVjaWFsIGNvbHVtbnNcbkBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9jb2x1bW4oXCIxb241XCIsIDEsIDUpO1xuXG5cbi8vIGNsZWFyIGVhY2ggY2xhc3Nlc1xuQGluY2x1ZGUgZ3JpZGxlX3JlZ2lzdGVyX2NsZWFyX2VhY2goMiwgbGVmdCk7XG5AaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfY2xlYXJfZWFjaCgzLCBsZWZ0KTtcbkBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9jbGVhcl9lYWNoKDEyLCBib3RoKTtcblxuXG4vLyByZWdpc3RlciBzdGF0ZXNcbkBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZSggZGVza3RvcCwgKFxuICAgIG1heC13aWR0aCA6IDE0MDBweCxcbiAgICBndXR0ZXItd2lkdGggOiAzMHB4XG4pKTtcbkBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZSggdGFibGV0LCAoXG4gICAgbWF4LXdpZHRoIDogNzY3cHgsXG4gICAgZ3V0dGVyLXdpZHRoIDogMTBweFxuKSk7XG5cblxuXG4vLyBJbml0IEdyaWRsZVxuQGluY2x1ZGUgZ3JpZGxlX2dlbmVyYXRlX2NsYXNzZXMgKCk7XG5cblxuXG5AaW5jbHVkZSBncmlkbGVfZ2VuZXJhdGVfY3VzdG9tX2NsYXNzKCgnbm8tbWFyZ2luJywgJy0nLCAnJWhlbGxvJywgJy0nLCAnJXNpZGUnLCAnQCcsICclc3RhdGUnKSwgYWxsLCAodGVzdCBvayBnb29kKSl7XG4gICAgJHNpZGUgOiBtYXAtZ2V0KCRncmlkbGUtc2NvcGUsIHNpZGUpO1xuXHRAZGVidWcoJGdyaWRsZS1zY29wZSk7XG5cbiAgICBAaWYoJHNpZGUgPT0gbnVsbCl7XG4gICAgICAgIG1hcmdpbiA6IDA7XG4gICAgfUBlbHNle1xuICAgICAgICBtYXJnaW4tI3skc2lkZX0gOiAwO1xuICAgIH1cbn1cblxuLnRlc3R7XG4gICAgYmFja2dyb3VuZCA6IHJlZDtcbiAgICBoZWlnaHQgOiAxMDBweDtcbn1cbiIsIi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEdyaWRsZSAoLnNjc3MpXG4vLyBHcmlkbGUgaXMgYW4gb25lIGFuZCB1bmlxdWUgZ3JpZCBzeXN0ZW0gZmlsZSB0aGF0IGFsbG93cyB5b3UgdG8gZ2VuZXJhdGUgYWxtb3N0IGFsbFxuLy8gZ3JpZCB5b3UndmUgZXZlciBkcmVhbXQgYWJvdXQuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENvcHlyaWdodCAoYykgMjAxNCBPbGl2aWVyIEJvc3NlbFxuXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSxcbi8vIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zXG4vLyBvZiB0aGUgU29mdHdhcmUuXG5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRFxuLy8gVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTFxuLy8gVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRlxuLy8gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Ncbi8vIElOIFRIRSBTT0ZUV0FSRS5cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG5cblxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfCBEcml2ZXJcbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJF9ncmlkbGUtZHJpdmVyIDogZGVmYXVsdDtcblxuXG5cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwgRGVmYXVsdCBpbml0XG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBpbXBvcnQgJ2luaXQnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IERyaXZlciBkZWZhdWx0XG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBpbXBvcnQgJ2RyaXZlci1kZWZhdWx0JztcbiIsIi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBjcmVhdGVkIFx0MjUuMDMuMTNcbi8vIEB1cGRhdGVkIFx0MjMuMTIuMTVcbi8vIEBhdXRob3IgXHRcdE9saXZpZXIgQm9zc2VsIDxvbGl2aWVyLmJvc3NlbEBnbWFpbC5jb20+XG4vLyBAdmVyc2lvbiBcdDIuMC40NFxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IFZlcnNpb25cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJF9ncmlkbGUtdmVyc2lvbiA6IFwiMi4wLjQ0XCI7XG5cblxuXG5cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwgVmFyaWFibGVzXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRncmlkbGUtZGVidWcgOiB0cnVlO1xuJF9ncmlkbGUtbmFtZXMtdG9rZW5zIDogKFxuXHRjb2x1bW5cdFx0XHRcdFx0XHRcdFx0OiB0cnVlLCAvLyB3aWxsIGJlIHRoZSBjb2x1bW5zIG5hbWVzXG5cdGNvbHVtbi1jb3VudCBcdFx0XHRcdFx0XHQ6IHRydWUsIC8vIHdpbGwgcmVwcmVzZW50IHRoZSBjb2x1bW4gaW5kZXggKDEsMiwzLC4uLilcblx0YWxpZ24gXHRcdFx0XHRcdFx0XHRcdDogbGVmdCBjZW50ZXIgcmlnaHQgdG9wIG1pZGRsZSBib3R0b20gYXJvdW5kIGJldHdlZW4sXG5cdGZsb2F0IFx0XHRcdFx0XHRcdFx0XHQ6IGxlZnQgcmlnaHQgYm90aCxcblx0Y291bnQgXHRcdFx0XHRcdFx0XHRcdDogdHJ1ZSwgLy8gd2lsbCByZXByZXNlbnQgYSBjZXJ0YWluIGNvdW50XG5cdHNpZGUgXHRcdFx0XHRcdFx0XHRcdDogdG9wIHJpZ2h0IGJvdHRvbSBsZWZ0IG51bGwsXG5cdHJldmVyc2UgXHRcdFx0XHRcdFx0XHQ6ICcnIHJldmVyc2UsXG5cdHN0YXRlIFx0XHRcdFx0XHRcdFx0XHQ6IHRydWUgLy8gaXMgYSB2YWxpZCBwYXR0ZXJuXG4pO1xuJF9ncmlkbGUtbmFtZXMtc2VwYXJhdG9ycyA6ICgnLScsJy0tJywnXycsJ19fJywnQCcpO1x0Ly8gYWxsIHRoZSBhbGxvd2VkIHNlcGFyYXRvcnNcbiRfZ3JpZGxlX2lzX2luX2dlbmVyYXRlX3BoYXNlIDogZmFsc2U7IFx0XHRcdC8vIGtlZXAgdHJhY2sgaWYgd2UgYXJlIGluIGdlbmVyYXRlIHBoYXNlIG9yIG5vdCBhbnltb3JlXG4kX2dyaWRsZV9pbml0ZWQgOiBmYWxzZTtcdFx0XHRcdFx0XHQvLyBrZWVwIHRyYWNrIGlmIGdyaWRsZSBoYXMgYmVlbiBpbml0ZWQgKHNpbGVudCBjbGFzc2VzLCBldGMuLikgb3Igbm90XG4kX2dyaWRsZV9zZXR0aW5ncyA6ICgpOyBcdFx0XHRcdFx0XHQvLyB0aGUgZGVmYXVsdCBzZXR0aW5nc1xuJF9ncmlkbGVfc3RhdGVzIDogKCk7XHRcdFx0XHRcdFx0XHQvLyB0aGUgdmFyaWFibGUgbWFwIGZvciBlYWNoIHN0YXRlc1xuJF9ncmlkbGVfY2xlYXJfY2xhc3NlcyA6ICgpOyBcdFx0XHRcdFx0Ly8gc3RvcmUgZWFjaCBhdXRvbWF0aWMgY2xlYXIgY291bnRcbiRfZ3JpZGxlX2NvbHVtbnMgOiAoKTsgXHRcdFx0XHRcdFx0XHQvLyBzdG9yZSB0aGUgcmVnaXN0ZXJlZCBzcGVjaWFsIGNvbHVtbnNcbiRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMgOiAoKTsgXHRcdFx0XHQvLyBzYXZlIHRoZSBydWxlcyB0aGF0IHdpbGwgZXh0ZW5kIHRoZSBkZWZhdWx0IGdyaWRsZSBvbmNlc1xuJF9ncmlkbGVfYXBwbHlfY3NzX2ZvciA6ICgpOyBcdFx0XHRcdFx0Ly8gc2F2ZSB0aGUgcnVsZXMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgZm9yIGVhY2ggc3RhdGVzIG9uIGEgc3BlY2lmaWVkIGdyaWRsZSBtaXhpbiB0eXBlXG5cbiRfZ3JpZGxlX2N1cnJlbnRfc3RhdGUgOiAoKTtcdFx0XHRcdFx0Ly8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZVxuJF9ncmlkbGVfY3VycmVudF9zdGF0ZU5hbWUgOiBkZWZhdWx0OyBcdFx0XHQvLyBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIG5hbWVcbiRfZ3JpZGxlX3ByZXZpb3VzX3N0YXRlIDogKCk7IFx0XHRcdFx0XHQvLyBzYXZlIHRoZSBwcmV2aW91cyBzdGF0ZVxuJF9ncmlkbGVfcHJldmlvdXNfc3RhdGVOYW1lIDogZGVmYXVsdDsgXHRcdFx0Ly8gc2F2ZSB0aGUgcHJldmlvdXMgc3RhdGUgbmFtZVxuXG4kX2NvbnRlbnRfYXJnX3N0YXRlIDogbnVsbDsgXHRcdFx0XHRcdC8vIHRoaXMgdmFyaWFibGUgaXMgdXNlZCB0byBwYXNzIHN0YXRlIHRocm91Z2ggZ2xvYmFsIHZhcmlhYmxlIGludG8gYW4gQGNvbnRlbnRcblxuJGdyaWRsZS12ZW5kb3ItcHJlZml4IDogdHJ1ZTsgXHRcdFx0XHRcdC8vIHNldCBpZiBuZWVkIHRvIGFkZCB2ZW5kb3IgcHJlZml4ZXMgd2hlbiBuZWVkZWRcblxuJGdyaWRsZS1zY29wZSA6ICgpOyBcdFx0XHRcdFx0ICAgICAgICAvLyBWYXJpYWJsZSBzY29wZSB1c2VkIGluIG1peGluIGxpa2UgYGdyaWRsZV9nZW5lcmF0ZV9jdXN0b21fY2xhc3NgXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IFZlbmRvcnNcbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQGltcG9ydCAnZmxleGJveCc7XG5cblxuXG5cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwgU2V0dGluZ3Ncbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQGltcG9ydCAnc2V0dGluZ3MnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IEZ1bmN0aW9uc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AaW1wb3J0ICdmdW5jdGlvbnMnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IFNldHRpbmdzIG1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AaW1wb3J0ICdzZXR0aW5ncy1taXhpbnMnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IE1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AaW1wb3J0ICdtaXhpbnMnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IEFwaVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AaW1wb3J0ICdhcGknO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IEdlbmVyYXRlIG1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5AaW1wb3J0ICdnZW5lcmF0ZS1taXhpbnMnO1xuXG5cblxuXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IERlZmF1bHQgc3RhdGVzXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBpbXBvcnQgJ2RlZmF1bHQtc3RhdGVzJztcbiIsIi8vIEZsZXhib3ggTWl4aW5zXG4vLyBodHRwOi8vcGhpbGlwd2FsdG9uLmdpdGh1Yi5pby9zb2x2ZWQtYnktZmxleGJveC9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXB3YWx0b24vc29sdmVkLWJ5LWZsZXhib3hcbi8vIFxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEJyaWFuIEZyYW5jb1xuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xuLy8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG4vLyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG4vLyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuLy8gQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcbi8vIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG4vLyBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbi8vXG4vLyBUaGlzIGlzIGEgc2V0IG9mIG1peGlucyBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gbWVzcyBhcm91bmQgd2l0aCBmbGV4Ym94XG4vLyB1c2luZyB0aGUgbmF0aXZlIHN1cHBvcnQgb2YgY3VycmVudCBicm93c2Vycy4gRm9yIGZ1bGwgc3VwcG9ydCB0YWJsZVxuLy8gY2hlY2s6IGh0dHA6Ly9jYW5pdXNlLmNvbS9mbGV4Ym94XG4vL1xuLy8gQmFzaWNhbGx5IHRoaXMgd2lsbCB1c2U6XG4vL1xuLy8gKiBGYWxsYmFjaywgb2xkIHN5bnRheCAoSUUxMCwgbW9iaWxlIHdlYmtpdCBicm93c2VycyAtIG5vIHdyYXBwaW5nKVxuLy8gKiBGaW5hbCBzdGFuZGFyZHMgc3ludGF4IChGRiwgU2FmYXJpLCBDaHJvbWUsIElFMTEsIE9wZXJhKVxuLy9cbi8vIFRoaXMgd2FzIGluc3BpcmVkIGJ5OlxuLy8gXG4vLyAqIGh0dHA6Ly9kZXYub3BlcmEuY29tL2FydGljbGVzL3ZpZXcvYWR2YW5jZWQtY3Jvc3MtYnJvd3Nlci1mbGV4Ym94L1xuLy8gXG4vLyBXaXRoIGhlbHAgZnJvbTpcbi8vIFxuLy8gKiBodHRwOi8vdzMub3JnL3RyL2NzczMtZmxleGJveC9cbi8vICogaHR0cDovL3RoZS1lY2hvcGxleC5uZXQvZmxleHlib3hlcy9cbi8vICogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNzcyMDY5KHY9dnMuODUpLmFzcHhcbi8vICogaHR0cDovL2Nzcy10cmlja3MuY29tL3VzaW5nLWZsZXhib3gvXG4vLyAqIGh0dHA6Ly9kZXYub3BlcmEuY29tL2FydGljbGVzL3ZpZXcvYWR2YW5jZWQtY3Jvc3MtYnJvd3Nlci1mbGV4Ym94L1xuLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi11cy9kb2NzL3dlYi9ndWlkZS9jc3MvZmxleGlibGVfYm94ZXNcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEZsZXhib3ggQ29udGFpbmVyc1xuLy9cbi8vIFRoZSAnZmxleCcgdmFsdWUgY2F1c2VzIGFuIGVsZW1lbnQgdG8gZ2VuZXJhdGUgYSBibG9jay1sZXZlbCBmbGV4XG4vLyBjb250YWluZXIgYm94LlxuLy9cbi8vIFRoZSAnaW5saW5lLWZsZXgnIHZhbHVlIGNhdXNlcyBhbiBlbGVtZW50IHRvIGdlbmVyYXRlIGEgaW5saW5lLWxldmVsXG4vLyBmbGV4IGNvbnRhaW5lciBib3guIFxuLy9cbi8vIGRpc3BsYXk6IGZsZXggfCBpbmxpbmUtZmxleFxuLy9cbi8vIGh0dHA6Ly93My5vcmcvdHIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG4vLyAoUGxhY2Vob2xkZXIgc2VsZWN0b3JzIGZvciBlYWNoIHR5cGUsIGZvciB0aG9zZSB3aG8gcmF0aGVyIEBleHRlbmQpXG5cbkBtaXhpbiBmbGV4Ym94IHtcblx0QGlmICRncmlkbGUtdmVuZG9yLXByZWZpeCB7XG5cdFx0ZGlzcGxheTogLXdlYmtpdC1ib3g7XG5cdFx0ZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuXHRcdGRpc3BsYXk6IC1tb3otZmxleDtcblx0XHRkaXNwbGF5OiAtbXMtZmxleGJveDtcblx0fVxuXHRkaXNwbGF5OiBmbGV4O1xufVxuXG4lZmxleGJveCB7IEBpbmNsdWRlIGZsZXhib3g7IH1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBtaXhpbiBpbmxpbmUtZmxleCB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWJveDtcblx0XHRkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4O1xuXHRcdGRpc3BsYXk6IC1tb3otaW5saW5lLWZsZXg7XG5cdFx0ZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuXHR9XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xufVxuXG4laW5saW5lLWZsZXggeyBAaW5jbHVkZSBpbmxpbmUtZmxleDsgfVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRmxleGJveCBEaXJlY3Rpb25cbi8vXG4vLyBUaGUgJ2ZsZXgtZGlyZWN0aW9uJyBwcm9wZXJ0eSBzcGVjaWZpZXMgaG93IGZsZXggaXRlbXMgYXJlIHBsYWNlZCBpblxuLy8gdGhlIGZsZXggY29udGFpbmVyLCBieSBzZXR0aW5nIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsZXggY29udGFpbmVyJ3Ncbi8vIG1haW4gYXhpcy4gVGhpcyBkZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gdGhhdCBmbGV4IGl0ZW1zIGFyZSBsYWlkIG91dCBpbi4gXG4vL1xuLy8gVmFsdWVzOiByb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlXG4vLyBEZWZhdWx0OiByb3dcbi8vXG4vLyBodHRwOi8vdzMub3JnL3RyL2NzczMtZmxleGJveC8jZmxleC1kaXJlY3Rpb24tcHJvcGVydHlcblxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCR2YWx1ZTogcm93KSB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdEBpZiAkdmFsdWUgPT0gcm93LXJldmVyc2Uge1xuXHRcdFx0LXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuXHRcdFx0LXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuXHRcdH0gQGVsc2UgaWYgJHZhbHVlID09IGNvbHVtbiB7XG5cdFx0XHQtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcblx0XHRcdC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG5cdFx0fSBAZWxzZSBpZiAkdmFsdWUgPT0gY29sdW1uLXJldmVyc2Uge1xuXHRcdFx0LXdlYmtpdC1ib3gtZGlyZWN0aW9uOiByZXZlcnNlO1xuXHRcdFx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcblx0XHR9IEBlbHNlIHtcblx0XHRcdC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuXHRcdFx0LXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuXHRcdH1cblx0XHQtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiAkdmFsdWU7XG5cdFx0LW1vei1mbGV4LWRpcmVjdGlvbjogJHZhbHVlO1xuXHRcdC1tcy1mbGV4LWRpcmVjdGlvbjogJHZhbHVlO1xuXHR9XG5cdGZsZXgtZGlyZWN0aW9uOiAkdmFsdWU7XG59XG5cdC8vIFNob3J0ZXIgdmVyc2lvbjpcblx0QG1peGluIGZsZXgtZGlyKCRhcmdzLi4uKSB7IEBpbmNsdWRlIGZsZXgtZGlyZWN0aW9uKCRhcmdzLi4uKTsgfVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRmxleGJveCBXcmFwXG4vL1xuLy8gVGhlICdmbGV4LXdyYXAnIHByb3BlcnR5IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGZsZXggY29udGFpbmVyIGlzIHNpbmdsZS1saW5lXG4vLyBvciBtdWx0aS1saW5lLCBhbmQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgY3Jvc3MtYXhpcywgd2hpY2ggZGV0ZXJtaW5lc1xuLy8gdGhlIGRpcmVjdGlvbiBuZXcgbGluZXMgYXJlIHN0YWNrZWQgaW4uIFxuLy9cbi8vIFZhbHVlczogbm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZVxuLy8gRGVmYXVsdDogbm93cmFwXG4vL1xuLy8gaHR0cDovL3czLm9yZy90ci9jc3MzLWZsZXhib3gvI2ZsZXgtd3JhcC1wcm9wZXJ0eVxuXG5AbWl4aW4gZmxleC13cmFwKCR2YWx1ZTogbm93cmFwKSB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdC8vIE5vIFdlYmtpdCBCb3ggZmFsbGJhY2suXG5cdFx0LXdlYmtpdC1mbGV4LXdyYXA6ICR2YWx1ZTtcblx0XHQtbW96LWZsZXgtd3JhcDogJHZhbHVlO1xuXHRcdEBpZiAkdmFsdWUgPT0gbm93cmFwIHtcblx0XHRcdC1tcy1mbGV4LXdyYXA6IG5vbmU7XG5cdFx0fSBAZWxzZSB7IFxuXHRcdFx0LW1zLWZsZXgtd3JhcDogJHZhbHVlOyBcblx0XHR9XG5cdH1cblx0ZmxleC13cmFwOiAkdmFsdWU7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBGbGV4Ym94IEZsb3cgKHNob3J0aGFuZClcbi8vXG4vLyBUaGUgJ2ZsZXgtZmxvdycgcHJvcGVydHkgaXMgYSBzaG9ydGhhbmQgZm9yIHNldHRpbmcgdGhlICdmbGV4LWRpcmVjdGlvbidcbi8vIGFuZCAnZmxleC13cmFwJyBwcm9wZXJ0aWVzLCB3aGljaCB0b2dldGhlciBkZWZpbmUgdGhlIGZsZXggY29udGFpbmVyJ3Ncbi8vIG1haW4gYW5kIGNyb3NzIGF4ZXMuXG4vL1xuLy8gVmFsdWVzOiA8ZmxleC1kaXJlY3Rpb24+IHwgPGZsZXgtd3JhcD4gXG4vLyBEZWZhdWx0OiByb3cgbm93cmFwXG4vL1xuLy8gaHR0cDovL3czLm9yZy90ci9jc3MzLWZsZXhib3gvI2ZsZXgtZmxvdy1wcm9wZXJ0eVxuXG5AbWl4aW4gZmxleC1mbG93KCR2YWx1ZXM6IChyb3cgbm93cmFwKSkge1xuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHQvLyBObyBXZWJraXQgQm94IGZhbGxiYWNrLlxuXHRcdC13ZWJraXQtZmxleC1mbG93OiAkdmFsdWVzO1xuXHRcdC1tb3otZmxleC1mbG93OiAkdmFsdWVzO1xuXHRcdC1tcy1mbGV4LWZsb3c6ICR2YWx1ZXM7XG5cdH1cblx0ZmxleC1mbG93OiAkdmFsdWVzO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRmxleGJveCBPcmRlclxuLy9cbi8vIFRoZSAnb3JkZXInIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBvcmRlciBpbiB3aGljaCBmbGV4IGl0ZW1zIGFwcGVhciB3aXRoaW5cbi8vIHRoZWlyIGZsZXggY29udGFpbmVyLCBieSBhc3NpZ25pbmcgdGhlbSB0byBvcmRpbmFsIGdyb3Vwcy5cbi8vXG4vLyBEZWZhdWx0OiAwXG4vL1xuLy8gaHR0cDovL3czLm9yZy90ci9jc3MzLWZsZXhib3gvI29yZGVyLXByb3BlcnR5XG5cbkBtaXhpbiBvcmRlcigkaW50OiAwKSB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6ICRpbnQgKyAxO1xuXHRcdC13ZWJraXQtb3JkZXI6ICRpbnQ7XG5cdFx0LW1vei1vcmRlcjogJGludDtcblx0XHQtbXMtZmxleC1vcmRlcjogJGludDtcblx0fVxuXHRvcmRlcjogJGludDtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEZsZXhib3ggR3Jvd1xuLy9cbi8vIFRoZSAnZmxleC1ncm93JyBwcm9wZXJ0eSBzZXRzIHRoZSBmbGV4IGdyb3cgZmFjdG9yLiBOZWdhdGl2ZSBudW1iZXJzXG4vLyBhcmUgaW52YWxpZC5cbi8vXG4vLyBEZWZhdWx0OiAwXG4vL1xuLy8gaHR0cDovL3czLm9yZy90ci9jc3MzLWZsZXhib3gvI2ZsZXgtZ3Jvdy1wcm9wZXJ0eVxuXG5AbWl4aW4gZmxleC1ncm93KCRpbnQ6IDApIHtcblx0QGlmICRncmlkbGUtdmVuZG9yLXByZWZpeCB7XG5cdFx0LXdlYmtpdC1ib3gtZmxleDogJGludDtcblx0XHQtd2Via2l0LWZsZXgtZ3JvdzogJGludDtcblx0XHQtbW96LWZsZXgtZ3JvdzogJGludDtcblx0XHQtbXMtZmxleC1wb3NpdGl2ZTogJGludDtcblx0fVxuXHRmbGV4LWdyb3c6ICRpbnQ7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBGbGV4Ym94IFNocmlua1xuLy9cbi8vIFRoZSAnZmxleC1zaHJpbmsnIHByb3BlcnR5IHNldHMgdGhlIGZsZXggc2hyaW5rIGZhY3Rvci4gTmVnYXRpdmUgbnVtYmVyc1xuLy8gYXJlIGludmFsaWQuXG4vL1xuLy8gRGVmYXVsdDogMVxuLy9cbi8vIGh0dHA6Ly93My5vcmcvdHIvY3NzMy1mbGV4Ym94LyNmbGV4LXNocmluay1wcm9wZXJ0eVxuXG5AbWl4aW4gZmxleC1zaHJpbmsoJGludDogMSkge1xuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHQtd2Via2l0LWZsZXgtc2hyaW5rOiAkaW50O1xuXHRcdC1tb3otZmxleC1zaHJpbms6ICRpbnQ7XG5cdFx0LW1zLWZsZXgtbmVnYXRpdmU6ICRpbnQ7XG5cdH1cblx0ZmxleC1zaHJpbms6ICRpbnQ7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBGbGV4Ym94IEJhc2lzXG4vL1xuLy8gVGhlICdmbGV4LWJhc2lzJyBwcm9wZXJ0eSBzZXRzIHRoZSBmbGV4IGJhc2lzLiBOZWdhdGl2ZSBsZW5ndGhzIGFyZSBpbnZhbGlkLiBcbi8vXG4vLyBWYWx1ZXM6IExpa2UgXCJ3aWR0aFwiIFxuLy8gRGVmYXVsdDogYXV0b1xuLy9cbi8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jZmxleC1iYXNpcy1wcm9wZXJ0eVxuXG5AbWl4aW4gZmxleC1iYXNpcygkdmFsdWU6IGF1dG8pIHtcblx0QGlmICRncmlkbGUtdmVuZG9yLXByZWZpeCB7XG5cdFx0LXdlYmtpdC1mbGV4LWJhc2lzOiAkdmFsdWU7XG5cdFx0LW1vei1mbGV4LWJhc2lzOiAkdmFsdWU7XG5cdFx0LW1zLWZsZXgtcHJlZmVycmVkLXNpemU6ICR2YWx1ZTtcblx0fVxuXHRmbGV4LWJhc2lzOiAkdmFsdWU7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBGbGV4Ym94IFwiRmxleFwiIChzaG9ydGhhbmQpXG4vL1xuLy8gVGhlICdmbGV4JyBwcm9wZXJ0eSBzcGVjaWZpZXMgdGhlIGNvbXBvbmVudHMgb2YgYSBmbGV4aWJsZSBsZW5ndGg6IHRoZVxuLy8gZmxleCBncm93IGZhY3RvciBhbmQgZmxleCBzaHJpbmsgZmFjdG9yLCBhbmQgdGhlIGZsZXggYmFzaXMuIFdoZW4gYW5cbi8vIGVsZW1lbnQgaXMgYSBmbGV4IGl0ZW0sICdmbGV4JyBpcyBjb25zdWx0ZWQgaW5zdGVhZCBvZiB0aGUgbWFpbiBzaXplXG4vLyBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgdGhlIG1haW4gc2l6ZSBvZiB0aGUgZWxlbWVudC4gSWYgYW4gZWxlbWVudCBpc1xuLy8gbm90IGEgZmxleCBpdGVtLCAnZmxleCcgaGFzIG5vIGVmZmVjdC5cbi8vXG4vLyBWYWx1ZXM6IG5vbmUgfCA8ZmxleC1ncm93PiA8ZmxleC1zaHJpbms+IHx8IDxmbGV4LWJhc2lzPlxuLy8gRGVmYXVsdDogU2VlIGluZGl2aWR1YWwgcHJvcGVydGllcyAoMSAxIDApLlxuLy9cbi8vIGh0dHA6Ly93My5vcmcvdHIvY3NzMy1mbGV4Ym94LyNmbGV4LXByb3BlcnR5XG5cbkBtaXhpbiBmbGV4KCRmZzogMSwgJGZzOiBudWxsLCAkZmI6IG51bGwpIHtcbiAgICBcblx0Ly8gU2V0IGEgdmFyaWFibGUgdG8gYmUgdXNlZCBieSBib3gtZmxleCBwcm9wZXJ0aWVzXG5cdCRmZy1ib3hmbGV4OiAkZmc7XG5cblx0Ly8gQm94LUZsZXggb25seSBzdXBwb3J0cyBhIGZsZXgtZ3JvdyB2YWx1ZSBzbyBsZXQncyBncmFiIHRoZVxuXHQvLyBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGFuZCBqdXN0IHJldHVybiB0aGF0LlxuXHRAaWYgdHlwZS1vZigkZmcpID09ICdsaXN0JyB7XG5cdFx0JGZnLWJveGZsZXg6IG50aCgkZmcsIDEpO1xuXHR9XG5cblx0QGlmICRncmlkbGUtdmVuZG9yLXByZWZpeCB7XG5cdFx0LXdlYmtpdC1ib3gtZmxleDogJGZnLWJveGZsZXg7XG5cdFx0LXdlYmtpdC1mbGV4OiAkZmcgJGZzICRmYjtcblx0XHQtbW96LWJveC1mbGV4OiAkZmctYm94ZmxleDtcblx0XHQtbW96LWZsZXg6ICRmZyAkZnMgJGZiO1xuXHRcdC1tcy1mbGV4OiAkZmcgJGZzICRmYjtcblx0fVxuXHRmbGV4OiAkZmcgJGZzICRmYjtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEZsZXhib3ggSnVzdGlmeSBDb250ZW50XG4vL1xuLy8gVGhlICdqdXN0aWZ5LWNvbnRlbnQnIHByb3BlcnR5IGFsaWducyBmbGV4IGl0ZW1zIGFsb25nIHRoZSBtYWluIGF4aXNcbi8vIG9mIHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIGZsZXggY29udGFpbmVyLiBUaGlzIGlzIGRvbmUgYWZ0ZXIgYW55IGZsZXhpYmxlXG4vLyBsZW5ndGhzIGFuZCBhbnkgYXV0byBtYXJnaW5zIGhhdmUgYmVlbiByZXNvbHZlZC4gVHlwaWNhbGx5IGl0IGhlbHBzIGRpc3RyaWJ1dGVcbi8vIGV4dHJhIGZyZWUgc3BhY2UgbGVmdG92ZXIgd2hlbiBlaXRoZXIgYWxsIHRoZSBmbGV4IGl0ZW1zIG9uIGEgbGluZSBhcmVcbi8vIGluZmxleGlibGUsIG9yIGFyZSBmbGV4aWJsZSBidXQgaGF2ZSByZWFjaGVkIHRoZWlyIG1heGltdW0gc2l6ZS4gSXQgYWxzb1xuLy8gZXhlcnRzIHNvbWUgY29udHJvbCBvdmVyIHRoZSBhbGlnbm1lbnQgb2YgaXRlbXMgd2hlbiB0aGV5IG92ZXJmbG93IHRoZSBsaW5lLlxuLy9cbi8vIE5vdGU6ICdzcGFjZS0qJyB2YWx1ZXMgbm90IHN1cHBvcnRlZCBpbiBvbGRlciBzeW50YXhlcy5cbi8vXG4vLyBWYWx1ZXM6IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmRcbi8vIERlZmF1bHQ6IGZsZXgtc3RhcnRcbi8vXG4vLyBodHRwOi8vdzMub3JnL3RyL2NzczMtZmxleGJveC8janVzdGlmeS1jb250ZW50LXByb3BlcnR5XG5cbkBtaXhpbiBqdXN0aWZ5LWNvbnRlbnQoJHZhbHVlOiBmbGV4LXN0YXJ0KSB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdEBpZiAkdmFsdWUgPT0gZmxleC1zdGFydCB7XG5cdFx0XHQtd2Via2l0LWJveC1wYWNrOiBzdGFydDtcblx0XHRcdC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuXHRcdH0gQGVsc2UgaWYgJHZhbHVlID09IGZsZXgtZW5kIHtcblx0XHRcdC13ZWJraXQtYm94LXBhY2s6IGVuZDtcblx0XHRcdC1tcy1mbGV4LXBhY2s6IGVuZDtcblx0XHR9IEBlbHNlIGlmICR2YWx1ZSA9PSBzcGFjZS1iZXR3ZWVuIHtcblx0XHRcdC13ZWJraXQtYm94LXBhY2s6IGp1c3RpZnk7XG5cdFx0XHQtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xuXHRcdH0gQGVsc2UgaWYgJHZhbHVlID09IHNwYWNlLWFyb3VuZCB7XG5cdFx0XHQtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlO1x0XHRcblx0XHR9IEBlbHNlIHtcblx0XHRcdC13ZWJraXQtYm94LXBhY2s6ICR2YWx1ZTtcblx0XHRcdC1tcy1mbGV4LXBhY2s6ICR2YWx1ZTtcblx0XHR9XG5cdFx0LXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6ICR2YWx1ZTtcblx0XHQtbW96LWp1c3RpZnktY29udGVudDogJHZhbHVlO1xuXHR9XG5cdGp1c3RpZnktY29udGVudDogJHZhbHVlO1xufVxuXHQvLyBTaG9ydGVyIHZlcnNpb246XG5cdEBtaXhpbiBmbGV4LWp1c3QoJGFyZ3MuLi4pIHsgQGluY2x1ZGUganVzdGlmeS1jb250ZW50KCRhcmdzLi4uKTsgfVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRmxleGJveCBBbGlnbiBJdGVtc1xuLy9cbi8vIEZsZXggaXRlbXMgY2FuIGJlIGFsaWduZWQgaW4gdGhlIGNyb3NzIGF4aXMgb2YgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGVcbi8vIGZsZXggY29udGFpbmVyLCBzaW1pbGFyIHRvICdqdXN0aWZ5LWNvbnRlbnQnIGJ1dCBpbiB0aGUgcGVycGVuZGljdWxhclxuLy8gZGlyZWN0aW9uLiAnYWxpZ24taXRlbXMnIHNldHMgdGhlIGRlZmF1bHQgYWxpZ25tZW50IGZvciBhbGwgb2YgdGhlIGZsZXhcbi8vIGNvbnRhaW5lcidzIGl0ZW1zLCBpbmNsdWRpbmcgYW5vbnltb3VzIGZsZXggaXRlbXMuICdhbGlnbi1zZWxmJyBhbGxvd3Ncbi8vIHRoaXMgZGVmYXVsdCBhbGlnbm1lbnQgdG8gYmUgb3ZlcnJpZGRlbiBmb3IgaW5kaXZpZHVhbCBmbGV4IGl0ZW1zLiAoRm9yXG4vLyBhbm9ueW1vdXMgZmxleCBpdGVtcywgJ2FsaWduLXNlbGYnIGFsd2F5cyBtYXRjaGVzIHRoZSB2YWx1ZSBvZiAnYWxpZ24taXRlbXMnXG4vLyBvbiB0aGVpciBhc3NvY2lhdGVkIGZsZXggY29udGFpbmVyLikgXG4vL1xuLy8gVmFsdWVzOiBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2hcbi8vIERlZmF1bHQ6IHN0cmV0Y2hcbi8vXG4vLyBodHRwOi8vdzMub3JnL3RyL2NzczMtZmxleGJveC8jYWxpZ24taXRlbXMtcHJvcGVydHlcblxuQG1peGluIGFsaWduLWl0ZW1zKCR2YWx1ZTogc3RyZXRjaCkge1xuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHRAaWYgJHZhbHVlID09IGZsZXgtc3RhcnQge1xuXHRcdFx0LXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuXHRcdFx0LW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuXHRcdH0gQGVsc2UgaWYgJHZhbHVlID09IGZsZXgtZW5kIHtcblx0XHRcdC13ZWJraXQtYm94LWFsaWduOiBlbmQ7XG5cdFx0XHQtbXMtZmxleC1hbGlnbjogZW5kO1xuXHRcdH0gQGVsc2Uge1xuXHRcdFx0LXdlYmtpdC1ib3gtYWxpZ246ICR2YWx1ZTtcblx0XHRcdC1tcy1mbGV4LWFsaWduOiAkdmFsdWU7XG5cdFx0fVxuXHRcdC13ZWJraXQtYWxpZ24taXRlbXM6ICR2YWx1ZTtcblx0XHQtbW96LWFsaWduLWl0ZW1zOiAkdmFsdWU7XG5cdH1cblx0YWxpZ24taXRlbXM6ICR2YWx1ZTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEZsZXhib3ggQWxpZ24gU2VsZlxuLy9cbi8vIFZhbHVlczogYXV0byB8IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaFxuLy8gRGVmYXVsdDogYXV0b1xuXG5AbWl4aW4gYWxpZ24tc2VsZigkdmFsdWU6IGF1dG8pIHtcblx0QGlmICRncmlkbGUtdmVuZG9yLXByZWZpeCB7XG5cdFx0Ly8gTm8gV2Via2l0IEJveCBGYWxsYmFjay5cblx0XHQtd2Via2l0LWFsaWduLXNlbGY6ICR2YWx1ZTtcblx0XHQtbW96LWFsaWduLXNlbGY6ICR2YWx1ZTtcblx0XHRAaWYgJHZhbHVlID09IGZsZXgtc3RhcnQge1xuXHRcdFx0LW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQ7XG5cdFx0fSBAZWxzZSBpZiAkdmFsdWUgPT0gZmxleC1lbmQge1xuXHRcdFx0LW1zLWZsZXgtaXRlbS1hbGlnbjogZW5kO1xuXHRcdH0gQGVsc2Uge1xuXHRcdFx0LW1zLWZsZXgtaXRlbS1hbGlnbjogJHZhbHVlO1xuXHRcdH1cblx0fVxuXHRhbGlnbi1zZWxmOiAkdmFsdWU7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBGbGV4Ym94IEFsaWduIENvbnRlbnRcbi8vXG4vLyBUaGUgJ2FsaWduLWNvbnRlbnQnIHByb3BlcnR5IGFsaWducyBhIGZsZXggY29udGFpbmVyJ3MgbGluZXMgd2l0aGluIHRoZVxuLy8gZmxleCBjb250YWluZXIgd2hlbiB0aGVyZSBpcyBleHRyYSBzcGFjZSBpbiB0aGUgY3Jvc3MtYXhpcywgc2ltaWxhciB0b1xuLy8gaG93ICdqdXN0aWZ5LWNvbnRlbnQnIGFsaWducyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGhpbiB0aGUgbWFpbi1heGlzLiBOb3RlLFxuLy8gdGhpcyBwcm9wZXJ0eSBoYXMgbm8gZWZmZWN0IHdoZW4gdGhlIGZsZXhib3ggaGFzIG9ubHkgYSBzaW5nbGUgbGluZS5cbi8vXG4vLyBWYWx1ZXM6IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmQgfCBzdHJldGNoXG4vLyBEZWZhdWx0OiBzdHJldGNoXG4vL1xuLy8gaHR0cDovL3czLm9yZy90ci9jc3MzLWZsZXhib3gvI2FsaWduLWNvbnRlbnQtcHJvcGVydHlcblxuQG1peGluIGFsaWduLWNvbnRlbnQoJHZhbHVlOiBzdHJldGNoKSB7XG5cdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdC8vIE5vIFdlYmtpdCBCb3ggRmFsbGJhY2suXG5cdFx0LXdlYmtpdC1hbGlnbi1jb250ZW50OiAkdmFsdWU7XG5cdFx0LW1vei1hbGlnbi1jb250ZW50OiAkdmFsdWU7XG5cdFx0QGlmICR2YWx1ZSA9PSBmbGV4LXN0YXJ0IHtcblx0XHRcdC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7XG5cdFx0fSBAZWxzZSBpZiAkdmFsdWUgPT0gZmxleC1lbmQge1xuXHRcdFx0LW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQtbXMtZmxleC1saW5lLXBhY2s6ICR2YWx1ZTtcblx0XHR9XG5cdH1cblx0YWxpZ24tY29udGVudDogJHZhbHVlO1xufSIsIi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwgU2V0dGluZ3Ncbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuJGdyaWRsZS1nZW5lcmF0ZS1qc29uLXNldHRpbmdzIFx0XHRcdDogdHJ1ZSAhZGVmYXVsdDtcbiRncmlkbGUtZGVmYXVsdC1zdGF0ZXMgXHRcdFx0XHRcdDogZmFsc2UgIWRlZmF1bHQ7IC8vIHJlZ2lzdGVyIG9yIG5vdCB0aGUgc3RhdGVzIHR2LCBwcmludCwgcmV0aW5hLCBldGMuLi5cbiRfZ3JpZGxlLXBhY2thZ2VzIDogKFxuXHRjb250YWluZXIgXHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnY29udGFpbmVyJywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHQgY29udGFpbmVyXG5cdCksXG5cdHJvdyBcdFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ3JvdycsJy0nLCclcmV2ZXJzZScsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IHJvd1xuXHQpLFxuXHRyb3ctYWxpZ24gXHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgncm93JywnLScsJ2FsaWduJywnLScsJyVhbGlnbicsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IHJvdy1hbGlnblxuXHQpLFxuXHRyb3ctZnVsbCBcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZSBcdFx0XHRcdFx0XHRcdDogKCdyb3cnLCctJywnZnVsbCcsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IHJvdy1mdWxsXG5cdCksXG5cdHJvdy1kZWJ1Z1x0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ3JvdycsJy0nLCdkZWJ1ZycsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWJ1ZyByb3ctZGVidWdcblx0KSxcblx0bm93cmFwIFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ25vd3JhcCcsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IG5vd3JhcFxuXHQpLFxuXHR3cmFwIFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ3dyYXAnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogZGVmYXVsdCB3cmFwXG5cdCksXG5cdGNvbCBcdFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ2NvbCcsJy0nLCclcmV2ZXJzZScsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IGNvbFxuXHQpLFxuXHRncmlkIFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnZ3InLCctJywnJWNvbHVtbicsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IGdyaWRcblx0KSxcblx0Z3JpZC10YWJsZSBcdFx0XHRcdFx0XHRcdDogKCBcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnZ3InLCctJywndGFibGUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogZGVmYXVsdCBncmlkLXRhYmxlXG5cdCksXG5cdGdyaWQtYWRhcHQgXHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnZ3InLCctJywnYWRhcHQnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogZGVmYXVsdCBncmlkLWFkYXB0XG5cdCksXG5cdGdyaWQtZ3JvdyBcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZSBcdFx0XHRcdFx0XHRcdDogKCdncicsJy0nLCdncm93JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHQgZ3JpZC1ncm93XG5cdCksXG5cdGdyaWQtY2VudGVyZWQgXHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ2dyJywnLScsJ2NlbnRlcmVkJywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGRlZmF1bHQgZ3JpZC1jZW50ZXJlZFxuXHQpLFxuXHRwdXNoIFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgncHVzaCcsJy0nLCclY29sdW1uJywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2VcdFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IHB1c2hcblx0KSxcblx0cHVsbCBcdFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ3B1bGwnLCctJywnJWNvbHVtbicsJ0AnLCclc3RhdGUnKSxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBkZWZhdWx0IHB1bGxcblx0KSxcblx0cHJlZml4IFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgncHJlZml4JywnLScsJyVjb2x1bW4nLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogZGVmYXVsdCBwcmVmaXhcblx0KSxcblx0c3VmZml4IFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnc3VmZml4JywnLScsJyVjb2x1bW4nLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogZGVmYXVsdCBzdWZmaXhcblx0KSxcblx0aGlkZSBcdFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ2hpZGUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogaGVscGVycyBoaWRlXG5cdCksXG5cdHNob3cgXHRcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZSBcdFx0XHRcdFx0XHRcdDogKCdzaG93JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGhlbHBlcnMgc2hvd1xuXHQpLFxuXHRzaG93LWlubGluZSBcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnc2hvdycsJy0nLCdpbmxpbmUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogaGVscGVycyBzaG93LWlubGluZVxuXHQpLFxuXHRub3QtdmlzaWJsZSBcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnbm90JywnLScsJ3Zpc2libGUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogaGVscGVycyBub3QtdmlzaWJsZVxuXHQpLFxuXHR2aXNpYmxlIFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ3Zpc2libGUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogaGVscGVycyB2aXNpYmxlXG5cdCksXG5cdGZsb2F0IFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnZmxvYXQnLCctJywnJWZsb2F0JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2VcdFx0XHRcdFx0XHRcdFx0OiBoZWxwZXJzIGZsb2F0XG5cdCksXG5cdGNsZWFyIFx0XHRcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnY2xlYXInLCctJywnJWZsb2F0JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGhlbHBlcnMgY2xlYXJcblx0KSxcblx0Y2xlYXItZWFjaCBcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZVx0XHRcdFx0XHRcdFx0OiAoJ2NsZWFyJywnLScsJ2VhY2gnLCctJywnJWNvdW50JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGhlbHBlcnMgY2xlYXItZWFjaFxuXHQpLFxuXHRndXR0ZXIgXHRcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZSBcdFx0XHRcdFx0XHRcdDogKCdndXR0ZXInLCctJywnJXNpZGUnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZSBcdFx0XHRcdFx0XHRcdDogaGVscGVycyBndXR0ZXJcblx0KSxcblx0bm8tZ3V0dGVyIFx0XHRcdFx0XHRcdFx0OiAoXG5cdFx0Y2xhc3NuYW1lIFx0XHRcdFx0XHRcdFx0OiAoJ25vJywnLScsJ2d1dHRlcicsJy0nLCclc2lkZScsJ0AnLCclc3RhdGUnKSxcblx0XHRnZW5lcmljLXNlbGVjdG9yIFx0XHRcdFx0XHQ6ICdbY2xhc3MqPVwibm8tZ3V0dGVyXCJdJyxcblx0XHRwYWNrYWdlIFx0XHRcdFx0XHRcdFx0OiBoZWxwZXJzIG5vLWd1dHRlclxuXHQpLFxuXHRhdXRvLWhlaWdodCBcdFx0XHRcdFx0XHQ6IChcblx0XHRjbGFzc25hbWUgXHRcdFx0XHRcdFx0XHQ6ICgnYXV0bycsJy0nLCdoZWlnaHQnLCdAJywnJXN0YXRlJyksXG5cdFx0cGFja2FnZVx0XHRcdFx0XHRcdFx0XHQ6IGhlbHBlcnMgYXV0by1oZWlnaHRcblx0KSxcblx0b3JkZXIgXHRcdFx0XHRcdFx0XHRcdDogKFxuXHRcdGNsYXNzbmFtZSBcdFx0XHRcdFx0XHRcdDogKCdvcmRlcicsJy0nLCclY29sdW1uLWNvdW50JywnQCcsJyVzdGF0ZScpLFxuXHRcdHBhY2thZ2UgXHRcdFx0XHRcdFx0XHQ6IGhlbHBlcnMgb3JkZXJcblx0KVxuKTsiLCIvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IEZ1bmN0aW9uc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1xuLy8gU3RyIHJlcGxhY2Vcbi8vXG4vLyBAcGFyYW0ge3N0cmluZ30gICRzdHJpbmcgICAgU3RyaW5nIHRoYXQgeW91IHdhbnQgdG8gcmVwbGFjZVxuLy8gQHBhcmFtIHtzdHJpbmd9ICAkc3Vic3RyICAgIFN0cmluZyB0aGF0IGlzIHRvIGJlIHJlcGxhY2VkIGJ5IGAkbmV3c3Vic3RyYFxuLy8gQHBhcmFtIHtzdHJpbmd9ICAkbmV3c3Vic3RyIFN0cmluZyB0aGF0IHJlcGxhY2VzIGAkc3Vic3RyYFxuLy8gQHBhcmFtIHtudW1iZXIqfSAkYWxsICAgICAgIEZsYWcgZm9yIHJlcGxhY2VpbmcgYWxsICgxKykgb3Igbm90ICgwKVxuLy8gQHJldHVybiB7c3RyaW5nfVxuLy9cbkBmdW5jdGlvbiBzdHItcmVwbGFjZSgkc3RyaW5nLCAkc3Vic3RyLCAkbmV3c3Vic3RyLCAkYWxsOiAwKSB7XG5cdCRwb3NpdGlvbi1mb3VuZDogc3RyLWluZGV4KCRzdHJpbmcsICRzdWJzdHIpO1xuXHQkcHJvY2Vzc2VkOiAoKTtcblxuXHRAd2hpbGUgKCRwb3NpdGlvbi1mb3VuZCBhbmQgJHBvc2l0aW9uLWZvdW5kID4gMCkge1xuXHRcdCRsZW5ndGgtc3Vic3RyOiBzdHItbGVuZ3RoKCRzdWJzdHIpO1xuXHRcdCRwcm9jZXNzZWQ6IGFwcGVuZCgkcHJvY2Vzc2VkLCBzdHItc2xpY2UoJHN0cmluZywgMCwgJHBvc2l0aW9uLWZvdW5kIC0gMSkpO1xuXHRcdCRwcm9jZXNzZWQ6IGFwcGVuZCgkcHJvY2Vzc2VkLCAkbmV3c3Vic3RyKTtcblx0XHQkc3RyaW5nOiBzdHItc2xpY2UoJHN0cmluZywgJHBvc2l0aW9uLWZvdW5kICsgJGxlbmd0aC1zdWJzdHIpO1xuXG5cdFx0JHBvc2l0aW9uLWZvdW5kOiAwO1xuXG5cdFx0QGlmICgkYWxsID4gMCkge1xuXHRcdFx0JHBvc2l0aW9uLWZvdW5kOiBzdHItaW5kZXgoJHN0cmluZywgJHN1YnN0cik7XG5cdFx0fVxuXHR9XG5cblx0JHByb2Nlc3NlZDogYXBwZW5kKCRwcm9jZXNzZWQsICRzdHJpbmcpO1xuXHQkc3RyaW5nOiBcIlwiO1xuXG5cdEBlYWNoICRzIGluICRwcm9jZXNzZWQge1xuXHRcdCRzdHJpbmc6ICN7JHN0cmluZ30jeyRzfTtcblx0fVxuXG5cdEByZXR1cm4gJHN0cmluZztcbn1cblxuLy9cbi8vIE1hcCBzZXRcbi8vXG4vLyBAcGFyYW0gXHRNYXAgXHQkbWFwIFx0XHRUaGUgbWFwIHRvIHVzZVxuLy8gQHBhcmFtIFx0U3RyaW5nIFx0JGtleSBcdFx0VGhlIGtleSB0byB1cGRhdGVcbi8vIEBwYXJhbSBcdE1peGVkIFx0JHZhbHVlIFx0XHRUaGUgbmV3IHZhbHVlXG4vLyBAcmV0dXJuIFx0TWFwIFx0XHRcdFRoZSBuZXcgbWFwXG4vL1xuQGZ1bmN0aW9uIG1hcC1zZXQoJG1hcCwgJGtleSwgJHZhbHVlKSB7XG5cdCRuZXc6ICgka2V5OiAkdmFsdWUpO1xuXHRAcmV0dXJuIG1hcC1tZXJnZSgkbWFwLCAkbmV3KTtcbn1cblxuLy9cbi8vIFJlbW92ZSBpdGVtIGZyb20gbGlzdFxuLy9cbkBmdW5jdGlvbiByZW1vdmUtbnRoKCRsaXN0LCAkaW5kZXgpIHtcbiAgJHJlc3VsdDogbnVsbDtcblxuICBAaWYgdHlwZS1vZigkaW5kZXgpICE9IG51bWJlciB7XG5cdEB3YXJuIFwiJGluZGV4OiAje3F1b3RlKCRpbmRleCl9IGlzIG5vdCBhIG51bWJlciBmb3IgYHJlbW92ZS1udGhgLlwiO1xuICB9XG5cbiAgQGVsc2UgaWYgJGluZGV4ID09IDAge1xuXHRAd2FybiBcIkxpc3QgaW5kZXggMCBtdXN0IGJlIGEgbm9uLXplcm8gaW50ZWdlciBmb3IgYHJlbW92ZS1udGhgLlwiO1xuICB9XG5cbiAgQGVsc2UgaWYgYWJzKCRpbmRleCkgPiBsZW5ndGgoJGxpc3QpIHtcblx0QHdhcm4gXCJMaXN0IGluZGV4IGlzICN7JGluZGV4fSBidXQgbGlzdCBpcyBvbmx5ICN7bGVuZ3RoKCRsaXN0KX0gaXRlbSBsb25nIGZvciBgcmVtb3ZlLW50aGAuXCI7XG4gIH1cblxuICBAZWxzZSB7XG5cdCRyZXN1bHQ6ICgpO1xuXHQkaW5kZXg6IGlmKCRpbmRleCA8IDAsIGxlbmd0aCgkbGlzdCkgKyAkaW5kZXggKyAxLCAkaW5kZXgpO1xuXG5cdEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRsaXN0KSB7XG5cdCAgQGlmICRpICE9ICRpbmRleCB7XG5cdFx0JHJlc3VsdDogYXBwZW5kKCRyZXN1bHQsIG50aCgkbGlzdCwgJGkpKTtcblx0ICB9XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy9cbi8vIExpc3Qgc2hpZnRcbi8vXG4vLyBAcGFyYW0gXHRMaXN0IFx0JGxpc3QgXHRcdFRoZSBsaXN0IHRvIHVzZVxuLy8gQHJldHVybiBcdExpc3QgXHRcdFx0XHRUaGUgcHJvY2Vzc2VkIGxpc3Rcbi8vXG5AZnVuY3Rpb24gbGlzdC1zaGlmdCgkbGlzdCkge1xuXHRAcmV0dXJuIHJlbW92ZS1udGgoJGxpc3QsMSk7XG59XG5cbi8vXG4vLyBMaXN0IHBvcFxuLy9cbi8vIEBwYXJhbSBcdExpc3QgXHQkbGlzdCBcdFx0VGhlIGxpc3QgdG8gdXNlXG4vLyBAcmV0dXJuIFx0TGlzdCBcdFx0XHRcdFRoZSBwcm9jZXNzZWQgbGlzdFxuLy9cbkBmdW5jdGlvbiBsaXN0LXBvcCgkbGlzdCkge1xuXHRAcmV0dXJuIHJlbW92ZS1udGgoJGxpc3QsbGVuZ3RoKCRsaXN0KSk7XG59XG5cbi8vXG4vLyBJbiBtYXBcbi8vIERldGVybWluZSBpZiBzb21ldGhpbmcgaXMgaW4gdGhlIHByb3ZpZGVkIG1hcFxuLy9cbi8vIEBwYXJhbSBcdE1hcCBcdCRtYXAgXHRcdFRoZSBtYXAgdG8gdXNlXG4vLyBAcGFyYW0gXHRNaXhlZCBcdCRuZWVkbGVcdFx0V2hhdCB0byBzZWFyY2hcbi8vIEByZXR1cm4gXHRCb29sZWFuXHRcdFx0XHRUcnVlfGZhbHNlXG4vL1xuQGZ1bmN0aW9uIGluLW1hcCgkbWFwLCAkbmVlZGxlKSB7XG5cdEBlYWNoICR2IGluICRtYXAge1xuXHRcdEBpZiAkdiA9PSAkbmVlZGxlIHtcblx0XHRcdEByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0QHJldHVybiBmYWxzZTtcbn1cblxuXG4vL1xuLy8gR2V0IHN0YXRlcyBjb3VudFxuLy9cbi8vIEByZXR1cm4gXHRpbnQgXHRUaGUgbnVtYmVyIG9mIHN0YXRlcyBkZWZpbmVkXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9zdGF0ZXNfY291bnQoKSB7XG5cdEByZXR1cm4gbGVuZ3RoKCRfZ3JpZGxlX3N0YXRlcyk7XG59XG5cblxuLy9cbi8vIEdldCB0aGUgY3VycmVudCBzdGF0ZVxuLy9cbkBmdW5jdGlvbiBncmlkbGVfY3VycmVudF9zdGF0ZSgpIHtcblx0QHJldHVybiAkX2dyaWRsZV9jdXJyZW50X3N0YXRlO1xufVxuXG5cbi8vXG4vLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgbmFtZVxuLy9cbkBmdW5jdGlvbiBncmlkbGVfY3VycmVudF9zdGF0ZV9uYW1lKCkge1xuXHRAcmV0dXJuICRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lO1xufVxuXG5cbi8vXG4vLyBHZXQgdGhlIGNvbHVtbiB3aWR0aCBpbiBwZXJjZW50IGZvciB0aGUgZ2xvYmFsIG9yIGEgc3BlY2lmaWMgY29udGV4dFxuLy9cbi8vIEBwYXJhbSBcdGludCBcdFx0JGNvbHVtbnMgXHRcdFx0XHRcdFRoZSBudW1iZXIgb2YgY29sdW1ucyB0byBjYWxjdWxhdGVcbi8vIEBwYXJhbSBcdGludCBcdFx0JGNvbnRleHQgOiAkZ3JpZGxlLWNvbHVtbnMtY291bnQgXHQgXHRUaGUgY29udGV4dCB0byB1c2Vcbi8vIEByZXR1cm4gXHRwZXJjZW50YWdlIFx0XHRcdFx0XHRcdFx0VGhlIHdpZHRoIGluIHBlcmNlbnRcbi8vXG5AZnVuY3Rpb24gZ3JpZGxlX2NvbHVtbl93aWR0aChcblx0JGNvbHVtbnMgOiAxLFxuXHQkc3RhdGVNYXAtb3Itc3RhdGVOYW1lIDogY3VycmVudFxuKSB7XG5cdCRjb250ZXh0IDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoY29udGV4dCwgJHN0YXRlTWFwLW9yLXN0YXRlTmFtZSk7XG5cdEByZXR1cm4gcGVyY2VudGFnZSgxIC8gJGNvbnRleHQgKiAkY29sdW1ucyk7XG59XG5cblxuLy9cbi8vICBHZXQgYSBzdGF0ZSBtYXBcbi8vXG4vLyBAcGFyYW0gXHRzdHJpbmcgXHRcdCRuYW1lIFx0XHRUaGUgbmFtZSBvZiB0aGUgc3RhdGUgdG8gZ2V0XG4vLyBAcmV0dXJuIFx0bWFwIFx0XHRcdFx0QSBzdGF0ZSBtYXAgb2JqZWN0XG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9nZXRfc3RhdGUoXG5cdCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUgOiBjdXJyZW50XG4pIHtcblxuXHQvLyBjaGVjayBpZiBuZWVkIHRvIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZVxuXHRAaWYgJHN0YXRlTWFwLW9yLXN0YXRlTmFtZSA9PSBjdXJyZW50IHtcblx0XHRAcmV0dXJuIGdyaWRsZV9jdXJyZW50X3N0YXRlKCk7XG5cdH1cblxuXHQvLyBjaGVjayBpZiBoYXMgYSBzdGF0ZSBuYW1lZCBsaWtlIHRoaXNcblx0QGlmICh0eXBlLW9mKCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUpID09IHN0cmluZ1xuXHRcdGFuZCAgbWFwLWhhcy1rZXkoJF9ncmlkbGVfc3RhdGVzLCB1bnF1b3RlKFwiI3skc3RhdGVNYXAtb3Itc3RhdGVOYW1lfVwiKSkpXG5cdHtcblx0XHRAcmV0dXJuIG1hcC1nZXQoJF9ncmlkbGVfc3RhdGVzLCB1bnF1b3RlKFwiI3skc3RhdGVNYXAtb3Itc3RhdGVOYW1lfVwiKSk7XG5cdH1cblxuXHQvLyBjaGVjayBpZiBpdCdzIGEgcmVnaXN0ZXJlZCBzdGF0ZSBhcyBtYXAgcGFzc2VkXG5cdEBpZiB0eXBlLW9mKCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUpID09IG1hcFxuXHRcdGFuZCBtYXAtZ2V0KCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUsIG5hbWUpIHtcblx0XHQkbmFtZSA6IG1hcC1nZXQoJHN0YXRlTWFwLW9yLXN0YXRlTmFtZSwgbmFtZSk7XG5cdFx0QGlmIGdyaWRsZV9oYXNfc3RhdGUoJG5hbWUpIHtcblx0XHRcdEByZXR1cm4gJHN0YXRlTWFwLW9yLXN0YXRlTmFtZTtcblx0XHR9XG5cdH1cblxuXHQvLyBhIG1hcCBpcyBwYXNzZWQsIHNvIGl0J3MgYSBzdGF0ZSBoaW1zZWxmXG5cdEBpZiAkc3RhdGVNYXAtb3Itc3RhdGVOYW1lXG5cdFx0YW5kIHR5cGUtb2YoJHN0YXRlTWFwLW9yLXN0YXRlTmFtZSkgPT0gbWFwXG5cdHtcblx0XHQvLyBwcmVwYXJlIHN0YXRlXG5cdFx0JHN0YXRlTWFwLW9yLXN0YXRlTmFtZSA6IF9ncmlkbGVfcHJlcGFyZV9zdGF0ZV9zZXR0aW5ncygkc3RhdGVNYXAtb3Itc3RhdGVOYW1lKTtcblx0XHQvLyBjcmVhdGUgYSBuZXcgc3RhdGUgYnkgbWVyZ2luZyBnaXZlbiBvbmUgd2l0aCBkZWZhdWx0IG9uZVxuXHRcdCRzdGF0ZSA6IG1hcC1tZXJnZSgkX2dyaWRsZS1zZXR0aW5ncywgJHN0YXRlTWFwLW9yLXN0YXRlTmFtZSk7XG5cdFx0Ly8gc2V0IHRoZSBuYW1lIHdpdGggcmFuZG9tIG5hbWVcblx0XHQkc3RhdGUgOiBtYXAtc2V0KCRzdGF0ZSwgbmFtZSwgdW5pcXVlLWlkKCkpO1xuXHRcdC8vIHJldHVybiB0aGUgY3VzdG9tIHN0YXRlXG5cdFx0QHJldHVybiAkc3RhdGU7XG5cdH1cblxuXHQvLyByZXR1cm4gdGhlIGRlZmF1bHQgb25lIGlmIGV4aXN0XG5cdEBpZiBtYXAtaGFzLWtleSgkX2dyaWRsZV9zdGF0ZXMsIGRlZmF1bHQpXG5cdHtcblx0XHRAcmV0dXJuIG1hcC1nZXQoJF9ncmlkbGVfc3RhdGVzLCBkZWZhdWx0KTtcblx0fVxuXG5cdC8vIG5vdGhpbmcgZmluZGVkLCByZXR1cm4gdGhlIGRlZmF1bHQgc3RhdGVcblx0QHJldHVybiAkX2dyaWRsZS1zZXR0aW5ncztcbn1cblxuXG4vL1xuLy8gQ2hlY2sgaWYgYSBzdGF0ZSBleGlzdCA6XG4vL1xuLy8gQHBhcmFtIFx0c3RyaW5nIFx0XHQkbmFtZSBcdFx0VGhlIG5hbWUgb2YgdGhlIHN0YXRlIHRvIGNoZWNrXG4vLyBAcmV0dXJuIFx0Qm9vbGVhbiBcdFx0XHR0cnVlIGlzIGV4aXN0XG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9oYXNfc3RhdGUoXG5cdCRzdGF0ZU5hbWVcbikge1xuXHRAaWYgJHN0YXRlTmFtZSA9PSBjdXJyZW50IHtcblx0XHRAcmV0dXJuIHRydWU7XG5cdH1cblx0QGlmIG1hcC1oYXMta2V5KCRfZ3JpZGxlX3N0YXRlcywgdW5xdW90ZShcIiN7JHN0YXRlTmFtZX1cIikpIHtcblx0XHRAcmV0dXJuIHRydWU7XG5cdH0gQGVsc2Uge1xuXHRcdEByZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxuXG4vL1xuLy8gR2V0IGEgdmFyaWFibGVcbi8vXG4vLyBAcGFyYW0gXHRTdHJpbmcgXHRcdCR2YXJOYW1lIFx0XHRcdFx0XHRUaGUgdmFyaWFibGUgbmFtZVxuLy8gQHBhcmFtICBcdFN0cmluZyBcdFx0JHN0YXRlTWFwLW9yLXN0YXRlTmFtZSBcdCBcdFRoZSBzdGF0ZSBuYW1lIG9yIGEgbWFwIHN0YXRlIHZhbHVlXG4vLyBAcmV0dXJuIFx0TWl4ZWQgXHRcdFx0XHRcdFx0XHRcdFx0VGhlIGZpbmRlZCB2YWx1ZVxuLy9cbkBmdW5jdGlvbiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihcblx0JHZhck5hbWUsXG5cdCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUgOiBjdXJyZW50XG4pIHtcblx0Ly8gaWYgaXMgYSBzdGF0ZSA6XG5cdCRzdGF0ZSA6IG51bGw7XG5cblx0Ly8gZ2V0IHRoZSBzdGF0ZSAoaWYgbm8gc3RhdGUgZmluZCwgcmV0dXJuIHRoZSBjdXJyZW50IG9uZSkgOlxuXHQkc3RhdGUgOiBncmlkbGVfZ2V0X3N0YXRlKCRzdGF0ZU1hcC1vci1zdGF0ZU5hbWUpO1xuXG5cdC8vIGNoZWNrIGlmIGhhcyBrZXlcblx0QGlmIG1hcC1oYXMta2V5KCRzdGF0ZSwgdW5xdW90ZShcIiN7JHZhck5hbWV9XCIpKSB7XG5cdFx0QHJldHVybiBtYXAtZ2V0KCRzdGF0ZSwgdW5xdW90ZShcIiN7JHZhck5hbWV9XCIpKTtcblx0fVxuXG5cdC8vIG5vdGhpbmcgZmluZGVkIDpcblx0QHJldHVybiBudWxsO1xufVxuXG5cbi8vXG4vLyBTZXQgYSB2YXJpYWJsZSBpbiBhIHN0YXRlXG4vLyBAcGFyYW0gXHRNaXhlZCAkc3RhdGVOYW1lLW9yLXN0YXRlSW5kZXggXHRUaGUgc3RhdGUgbmFtZSBvZiBzdGF0ZSBpbmRleFxuLy8gQHBhcmFtICBcdFN0cmluZyAkdmFyICAgICAgICAgICAgICAgICAgICBcdFx0VmFyaWFibGUgbmFtZSB0byBhc3NpZ25cbi8vIEBwYXJhbSAgXHRNaXhlZCAkbmV3VmFsdWUgICAgICAgICAgXHRcdFRoZSBuZXcgdmFsdWUgdG8gYXNzaWduXG4vLyBAcmV0dXJuIFx0TGlzdCAgICAgICAgICAgICAgICAgICAgICAgICBcdFx0XHRUaGUgc3RhdGVzIGxpc3QgKGZ1bGwpXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9zZXRfc3RhdGVfdmFyKFxuXHQkdmFyLFxuXHQkbmV3VmFsdWUsXG5cdCRzdGF0ZU5hbWUgOiBkZWZhdWx0XG4pIHtcblx0Ly8gZ2V0IHRoZSBzdGF0ZSA6XG5cdCRzdGF0ZSA6IGdyaWRsZV9nZXRfc3RhdGUoJHN0YXRlTmFtZSk7XG5cblx0Ly8gY2hlY2sgaWcgc3RhdGUgYW5kIGlmIGhhcyB0aGUgdmFyaWFibGUgOlxuXHRAaWYgJHN0YXRlXG5cdFx0ICBhbmQgbWFwLWhhcy1rZXkoJHN0YXRlLHVucXVvdGUoXCIjeyR2YXJ9XCIpKVxuXHR7XG5cdFx0Ly8gc2V0IG5ldyB2YWx1ZSBpbiBzdGF0ZSA6XG5cdFx0JHN0YXRlIDogbWFwLXNldCgkc3RhdGUsIHVucXVvdGUoXCIjeyR2YXJ9XCIpLCAkbmV3VmFsdWUpO1xuXG5cdFx0Ly8gc2V0IHN0YXRlcyA6XG5cdFx0JF9ncmlkbGVfc3RhdGVzIDogbWFwLXNldCgkX2dyaWRsZV9zdGF0ZXMsIHVucXVvdGUoXCIjeyRzdGF0ZU5hbWV9XCIpLCAkc3RhdGUpO1xuXG5cdFx0Ly8gcmV0dXJuIG5ldyBzdGF0ZSA6XG5cdFx0QHJldHVybiAkc3RhdGU7XG5cdH1cblxuXHQvLyBub3RoaW5nIGdldHRlZCA6XG5cdEByZXR1cm4gbnVsbDtcbn1cblxuXG4vL1xuLy8gZ2V0IHRoZSByZWdpc3RlcmVkIGdyaWRsZSBzdGF0ZXNcbi8vXG5AZnVuY3Rpb24gZ3JpZGxlX2dldF9zdGF0ZXMoKSB7XG5cdEByZXR1cm4gJF9ncmlkbGVfc3RhdGVzO1xufVxuXG5cbi8vXG4vLyBHZXQgdGhlIHN0YXRlcyBuYW1lc1xuLy9cbkBmdW5jdGlvbiBncmlkbGVfZ2V0X3N0YXRlc19uYW1lcygpIHtcblx0JGxpc3QgOiAoKTtcblx0QGVhY2ggJHN0YXRlTmFtZSwgJHN0YXRlIGluICRfZ3JpZGxlX3N0YXRlcyB7XG5cdFx0JGxpc3QgOiBhcHBlbmQoJGxpc3QsICRzdGF0ZU5hbWUpO1xuXHR9XG5cdEByZXR1cm4gJGxpc3Q7XG59XG5AZnVuY3Rpb24gZ3JpZGxlX3N0YXRlc19uYW1lcygpIHtcblx0QHJldHVybiBncmlkbGVfZ2V0X3N0YXRlc19uYW1lcygpO1xufVxuXG5cbi8vXG4vLyBHZXQgdGhlIGFwcGx5IGNzcyBmb3IgbWFwIGZvciBhIGNlcnRhaW4gY2xhc3MgYW5kIHN0YXRlXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9nZXRfYXBwbHlfY3NzX2Zvcl9tYXAoXG5cdCRmb3IsXG5cdCRzdGF0ZU5hbWUgOiBkZWZhdWx0XG4pIHtcblx0Ly8gY2hlY2sgaWYgaGFzIHNvbWUgZXh0ZW5kIGZvciB0aGlzIHN0YXRlXG5cdCRtYXAgOiBtYXAtZ2V0KCRfZ3JpZGxlX2FwcGx5X2Nzc19mb3IsICRzdGF0ZU5hbWUpO1xuXHRAaWYgJG1hcCA9PSBudWxsIHsgQHJldHVybiBudWxsOyB9XG5cblx0Ly8gY2hlY2sgaWYgaGFzIHNvbWUgZXh0ZW5kIGZvciB0aGUgcmVxdWVzdGVkIGZvclxuXHQkZXh0ZW5kIDogbWFwLWdldCgkbWFwLCAkZm9yKTtcblxuXHQvLyByZXR1cm4gdGhlIHJlc3VsdGluZyBleHRlbmQgbWFwXG5cdEByZXR1cm4gJGV4dGVuZDtcbn1cblxuXG4vL1xuLy8gR2V0IHRoZSBleHRlbmQgbWFwIGZvciBhIGNlcnRhaW4gY2xhc3MgYW5kIHN0YXRlXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9nZXRfZXh0ZW5kX2NsYXNzX21hcChcblx0JGZvcixcblx0JHN0YXRlTmFtZSA6IGRlZmF1bHRcbikge1xuXHQvLyBjaGVjayBpZiBoYXMgc29tZSBleHRlbmQgZm9yIHRoaXMgc3RhdGVcblx0JG1hcCA6IG1hcC1nZXQoJF9ncmlkbGVfZXh0ZW5kX2Jhc2VfY2xhc3NlcywgJHN0YXRlTmFtZSk7XG5cdEBpZiAkbWFwID09IG51bGwgeyBAcmV0dXJuIG51bGw7IH1cblxuXHQvLyBjaGVjayBpZiBoYXMgc29tZSBleHRlbmQgZm9yIHRoZSByZXF1ZXN0ZWQgZm9yXG5cdCRleHRlbmQgOiBtYXAtZ2V0KCRtYXAsICRmb3IpO1xuXG5cdC8vIHJldHVybiB0aGUgcmVzdWx0aW5nIGV4dGVuZCBtYXBcblx0QHJldHVybiAkZXh0ZW5kO1xufVxuXG5cbi8vXG4vLyBHZW5lcmF0ZSBhIGNvbHVtblxuLy9cbi8vIEBwYXJhbSBcdFN0cmluZyBcdFx0JG5hbWUgXHRcdFx0XHRUaGUgY29sdW1uIG5hbWUgKG9mdGVuIGNvdW50KVxuLy8gQHBhcmFtIFx0aW50IFx0XHQkY29sdW1ucyBcdFx0XHRUaGUgY29sdW1uIGNvdW50IHRoYXQgdGhlIGNvbHVtbiB3aWxsIHRha2Vcbi8vIEBwYXJhbSBcdGludCBcdFx0JGNvbnRleHQgXHRcdFx0VGhlIGNvbnRleHQgb24gd2hpY2ggdGhlIHdpZHRoIHdpbGwgYmUgY2FsY3VsZWRcbi8vIEBwYXJhbSBcdEJvb2xlYW4gXHQkZ2VuZXJhdGVDbGFzc2VzIFx0U2V0IGlmIHRoZSBjb2x1bW4gaGFzIHRvIGJlIGdlbmVyYXRlZCBpbiBjc3Ncbi8vXG5AZnVuY3Rpb24gX2dyaWRsZV9jcmVhdGVfY29sdW1uKFxuXHQkbmFtZSxcblx0JGNvbHVtbnMsXG5cdCRjb250ZXh0LFxuXHQkbmFtZS1tdWx0aXBsaWNhdG9yIDogMSAvLyB1c2VkIHRvIGV4dGVuZCB0aGUgc3RhdGUgb24gY3VzdG9tIHJlZ2lzdGVyZWQgY29sdW1uc1xuKSB7XG5cdEByZXR1cm4gKFxuXHRcdG5hbWUgOiAkbmFtZSxcblx0XHRjb2x1bW5zIDogJGNvbHVtbnMsXG5cdFx0Y29udGV4dCA6ICRjb250ZXh0LFxuXHRcdG5hbWUtbXVsdGlwbGljYXRvciA6ICRuYW1lLW11bHRpcGxpY2F0b3Jcblx0KTtcbn1cblxuXG4vLyBnZXQgY29sdW1ucyBuYW1lcyBpbiBhIGxpc3RcbkBmdW5jdGlvbiBncmlkbGVfZ2V0X2NvbHVtbnMoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHQvLyBnZXQgdmFyaWFibGVzXG5cdCRjb250ZXh0IDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoY29udGV4dCwgJHN0YXRlKTtcblx0JG5hbWUtbXVsdGlwbGljYXRvciA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKG5hbWUtbXVsdGlwbGljYXRvciwgJHN0YXRlKTtcblxuXHQvLyBnZXQgc3BlY2lhbHMgY29sdW1uc1xuXHQkY29sdW1uc01hcCA6IG1hcC1tZXJnZSgoKSwgJF9ncmlkbGVfY29sdW1ucyk7XG5cblx0Ly8gbG9vcCB0aHJvdWdoIGNvbnRleHRcblx0QGZvciAkaSBmcm9tIDAgdGhyb3VnaCAkY29udGV4dCB7XG5cblx0XHQvLyBuYW1lXG5cdFx0JGNvbHVtbk5hbWUgOiBcIiN7JGkqJG5hbWUtbXVsdGlwbGljYXRvcn1cIjtcblx0XHQkY29sdW1uV2lkdGggOiAkaSAqICRuYW1lLW11bHRpcGxpY2F0b3I7XG5cblx0XHQvLyAvLyBjcmVhdGUgYSBjb2x1bW5cblx0XHQkY29sIDogX2dyaWRsZV9jcmVhdGVfY29sdW1uKCRjb2x1bW5OYW1lLCAkY29sdW1uV2lkdGgsICRjb250ZXh0LCAkbmFtZS1tdWx0aXBsaWNhdG9yKTtcblxuXHRcdC8vIC8vIGFkZCBjb2x1bW4gaW4gY29sdW1ucyBtYXBcblx0XHQkY29sdW1uc01hcCA6IG1hcC1zZXQoJGNvbHVtbnNNYXAsICRjb2x1bW5OYW1lLCAgJGNvbCk7XG5cdH1cblxuXHQvLyByZXR1cm4gY29sdW1uc1xuXHRAcmV0dXJuICRjb2x1bW5zTWFwO1xufVxuXG5cbi8vXG4vLyBDaGVjayBpZiBoYXMgY29sdW1uXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9oYXNfY29sdW1uKFxuXHQkbmFtZVxuKSB7XG5cdCRjb2x1bW4gOiBtYXAtZ2V0KCRfZ3JpZGxlX2NvbHVtbnMsJG5hbWUpO1xuXHRAaWYgJGNvbHVtbiB7XG5cdFx0QHJldHVybiB0cnVlO1xuXHR9IEBlbHNlIHtcblx0XHRAcmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cblxuQGZ1bmN0aW9uIF9ncmlkbGVfcHJlcGFyZV9zdGF0ZV9zZXR0aW5ncyhcblx0JHNldHRpbmdzXG4pIHtcblx0Ly8gbWFuYWdlIGd1dHRlcnNcblx0JGd1dHRlci10b3AgOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLXRvcCk7XG5cdCRndXR0ZXItYm90dG9tIDogbWFwLWdldCgkc2V0dGluZ3MsIGd1dHRlci1ib3R0b20pO1xuXHQkZ3V0dGVyLWxlZnQgOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLWxlZnQpO1xuXHQkZ3V0dGVyLXJpZ2h0IDogbWFwLWdldCgkc2V0dGluZ3MsIGd1dHRlci1yaWdodCk7XG5cdCRndXR0ZXItd2lkdGggOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLXdpZHRoKTtcblx0JGd1dHRlci1oZWlnaHQgOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLWhlaWdodCk7XG5cdEBpZiAkZ3V0dGVyLXJpZ2h0IGFuZCAkZ3V0dGVyLWxlZnQge1xuXHRcdC8vIGNhbGN1bGF0ZSB0aGUgZ3V0dGVyLXdpZHRoXG5cdFx0JHNldHRpbmdzIDogbWFwLXNldCgkc2V0dGluZ3MsIGd1dHRlci13aWR0aCwgJGd1dHRlci1sZWZ0ICsgJGd1dHRlci1yaWdodCk7XG5cdH0gQGVsc2UgaWYgJGd1dHRlci13aWR0aCB7XG5cdFx0Ly8gY2FsY3VsYXRlIHRoZSBndXR0ZXItbGVmdCBhbmQgcmlnaHRcblx0XHQkc2V0dGluZ3MgOiBtYXAtc2V0KCRzZXR0aW5ncywgZ3V0dGVyLWxlZnQsICRndXR0ZXItd2lkdGggKiAuNSk7XG5cdFx0JHNldHRpbmdzIDogbWFwLXNldCgkc2V0dGluZ3MsIGd1dHRlci1yaWdodCwgJGd1dHRlci13aWR0aCAqIC41KTtcblx0fVxuXHRAaWYgJGd1dHRlci10b3AgYW5kICRndXR0ZXItYm90dG9tIHtcblx0XHQvLyBjYWxjdWxhdGUgdGhlIGd1dHRlci1oZWlnaHRcblx0XHQkc2V0dGluZ3MgOiBtYXAtc2V0KCRzZXR0aW5ncywgZ3V0dGVyLWhlaWdodCwgJGd1dHRlci1ib3R0b20gKyAkZ3V0dGVyLXRvcCk7XG5cdH0gQGVsc2UgaWYgJGd1dHRlci1oZWlnaHQge1xuXHRcdC8vIGNhbGN1bGF0ZSB0aGUgZ3V0dGVyLWJvdHRvbSBhbmQgdG9wXG5cdFx0JHNldHRpbmdzIDogbWFwLXNldCgkc2V0dGluZ3MsIGd1dHRlci1ib3R0b20sICRndXR0ZXItaGVpZ2h0ICogLjUpO1xuXHRcdCRzZXR0aW5ncyA6IG1hcC1zZXQoJHNldHRpbmdzLCBndXR0ZXItdG9wLCAkZ3V0dGVyLWhlaWdodCAqIC41KTtcblx0fVxuXG5cdC8vIHJldHVybiBwcmVwYXJlZCBzZXR0aW5nc1xuXHRAcmV0dXJuICRzZXR0aW5ncztcbn1cblxuXG4vL1xuLy8gRXh0ZW5kIGEgc3RhdGVcbi8vXG5AZnVuY3Rpb24gX2dyaWRsZV9pbmhlcml0X3N0YXRlKFxuXHQkc3RhdGUsXG5cdCRleHRlbmQtc3RhdGVcbikge1xuXHQkZXh0ZW5kLXN0YXRlLW5hbWUgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLCAkZXh0ZW5kLXN0YXRlKTtcblx0JHN0YXRlLW5hbWUgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLCAkc3RhdGUpO1xuXHQkaGFzLXN0YXRlIDogZ3JpZGxlX2hhc19zdGF0ZSgkc3RhdGUtbmFtZSk7XG5cdCRoYXMtZXh0ZW5kLXN0YXRlIDogZ3JpZGxlX2hhc19zdGF0ZSgkZXh0ZW5kLXN0YXRlLW5hbWUpO1xuXHRAaWYgJGhhcy1zdGF0ZSBhbmQgJGhhcy1leHRlbmQtc3RhdGUge1xuXHRcdC8vIHdlIGRvIG5vdGhpbmcgaWYgdGhpcyBpcyBuZXN0ZWQgZXhpc3Rpbmcgc3RhdGVzXG5cdFx0QHJldHVybiAkc3RhdGU7XG5cdH0gQGVsc2UgaWYgJGhhcy1leHRlbmQtc3RhdGUge1xuXHRcdC8vIGlmIHRoZSBiYXNlIHN0YXRlIGlzIGEgcmVnaXN0ZXJlZCBvbmVcblx0XHQvLyBrZWVwIHRoZSBleHRlbmQgc3RhdGUgYW5kIGV4dGVuZCBpdCB3aXRoIHRoZSB3YW50ZWQgc3RhdGVcblx0XHRAcmV0dXJuIG1hcC1tZXJnZSgkZXh0ZW5kLXN0YXRlLCAkc3RhdGUpO1xuXHR9IEBlbHNlIHtcblx0XHQvLyBvdGhlcndpc2UsIHRoZSBiYXNlIHN0YXRlIGlzIGEgY3VzdG9tIG9uZSBzbyB3ZSBrZWVwXG5cdFx0Ly8gaXQgYW5kIGV4dGVuZCB0aGUgd2FudGVkIHN0YXRlIHdpdGggaXRcblx0XHQkbmV3LXN0YXRlIDogbWFwLXJlbW92ZSgkZXh0ZW5kLXN0YXRlLCBuYW1lKTsgLy8gcmVtb3ZlIHRoZSBuYW1lIGlzIGltcG9ydGFudCBoZXJlIVxuXHRcdEByZXR1cm4gbWFwLW1lcmdlKCRzdGF0ZSwgJG5ldy1zdGF0ZSk7XG5cdH1cbn1cblxuXG4vL1xuLy8gR2V0IHRoZSBwYWRkaW5nIHZhbHVlXG4vL1xuQGZ1bmN0aW9uIF9ncmlkbGVfZm9yZ2VfZ3V0dGVyc19tYXAoXG5cdCRzaWRlLW9yLXNpemUsXG5cdCRzdGF0ZSA6IGN1cnJlbnRcbikge1xuXHQkbWFwIDogKCk7XG5cdC8vIGNoZWNrIGlmIGlzIG51bWJlciBwYXNzZWRcblx0QGlmIHR5cGUtb2YoJHNpZGUtb3Itc2l6ZSkgPT0gbWFwIHtcblx0XHRAZWFjaCAkc2lkZSBpbiAodG9wIHJpZ2h0IGJvdHRvbSBsZWZ0KSB7XG5cdFx0XHRAaWYgbWFwLWdldCgkc2lkZS1vci1zaXplLCAkc2lkZSkge1xuXHRcdFx0XHQkbWFwIDogbWFwLXNldCgkbWFwLCAkc2lkZSwgbWFwLWdldCgkc2lkZS1vci1zaXplLCAkc2lkZSkpO1xuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdCRtYXAgOiBtYXAtc2V0KCRtYXAsICRzaWRlLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gQGVsc2UgaWYgdHlwZS1vZigkc2lkZS1vci1zaXplKSA9PSBudW1iZXIge1xuXHRcdCRtYXAgOiAoXG5cdFx0XHR0b3AgOiAwLFxuXHRcdFx0cmlnaHQgOiAkc2lkZS1vci1zaXplICogLjUsXG5cdFx0XHRib3R0b20gOiAwLFxuXHRcdFx0bGVmdCA6ICRzaWRlLW9yLXNpemUgKiAuNVxuXHRcdCk7XG5cdH0gQGVsc2UgaWYgdHlwZS1vZigkc2lkZS1vci1zaXplKSA9PSBsaXN0IG9yIHR5cGUtb2YoJHNpZGUtb3Itc2l6ZSkgPT0gc3RyaW5nIHtcblxuXHRcdC8vIGNoZWNrIGlmIGlzIGEgZnVsbCBudW1iZXIgbGlzdFxuXHRcdCRsaXN0LW51bWJlciA6IHRydWU7XG5cdFx0QGVhY2ggJHMgaW4gJHNpZGUtb3Itc2l6ZSB7XG5cdFx0XHRAaWYgdHlwZS1vZigkcykgIT0gbnVtYmVyIHtcblx0XHRcdFx0JGxpc3QtbnVtYmVyIDogZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0QGlmICRsaXN0LW51bWJlciB7XG5cblx0XHRcdEBpZiBsZW5ndGgoJHNpZGUtb3Itc2l6ZSkgPT0gMiB7XG5cdFx0XHRcdCR2YWwxIDogbnRoKCRzaWRlLW9yLXNpemUsMSkgKiAuNTtcblx0XHRcdFx0JHZhbDIgOiBudGgoJHNpZGUtb3Itc2l6ZSwyKSAqIC41O1xuXHRcdFx0XHQkbWFwIDogKFxuXHRcdFx0XHRcdHRvcCA6ICR2YWwxLFxuXHRcdFx0XHRcdHJpZ2h0IDogJHZhbDIsXG5cdFx0XHRcdFx0Ym90dG9tIDogJHZhbDEsXG5cdFx0XHRcdFx0bGVmdCA6ICR2YWwyXG5cdFx0XHRcdClcblx0XHRcdH0gQGVsc2UgaWYgbGVuZ3RoKCRzaWRlLW9yLXNpemUpID09IDQge1xuXHRcdFx0XHQkbWFwIDogKFxuXHRcdFx0XHRcdHRvcCA6IG50aCgkc2lkZS1vci1zaXplLDEpLFxuXHRcdFx0XHRcdHJpZ2h0IDogbnRoKCRzaWRlLW9yLXNpemUsMiksXG5cdFx0XHRcdFx0Ym90dG9tIDogbnRoKCRzaWRlLW9yLXNpemUsMyksXG5cdFx0XHRcdFx0bGVmdCA6IG50aCgkc2lkZS1vci1zaXplLDQpXG5cdFx0XHRcdClcblx0XHRcdH1cblxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0Ly8gZm9yZ2UgdGhlIG1hcCB3aXRoIHJlZ2lzdGVyZWQgdmFsdWVzXG5cdFx0XHRAZWFjaCAkc2lkZSBpbiAodG9wIHJpZ2h0IGJvdHRvbSBsZWZ0KSB7XG5cdFx0XHRcdEBpZiBpbmRleCgkc2lkZS1vci1zaXplLCAkc2lkZSkge1xuXHRcdFx0XHRcdCRtYXAgOiBtYXAtc2V0KCRtYXAsICRzaWRlLCBncmlkbGVfZ2V0X3N0YXRlX3ZhcihcImd1dHRlci0jeyRzaWRlfVwiLCAkc3RhdGUpKTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0JG1hcCA6IG1hcC1zZXQoJG1hcCwgJHNpZGUsIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBAZGVidWcoXCJnZXQgZ3V0dGVycyBmcm9tIHJlZ2lzdGVyZWQgI3tpbnNwZWN0KCRtYXApfVwiKTtcblx0XHR9XG5cdH0gQGVsc2Uge1xuXHRcdC8vIHVuYWJsZSB0byBnZW5lcmF0ZSBhIGd1dHRlciBtYXBcblx0XHRAcmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gcmV0dXJuIHRoZSBwYWRkaW5nIG1hcFxuXHRAcmV0dXJuICRtYXA7XG59XG5cblxuLy9cbi8vIEdldCB0aGUgYXR0cmlidXRlIHNlbGVjdG9yXG4vL1xuQGZ1bmN0aW9uIGdyaWRsZV9zZWxlY3Rvcihcblx0JGZvcixcblx0JHN0YXRlcyA6IG51bGwsXG5cdCR2YWx1ZXMgOiBudWxsXG4pIHtcblx0JHNlbCA6ICgpO1xuXG5cdEBpZiBsZW5ndGgoJGZvcikgPiAxIHtcblx0XHRAZWFjaCAkZiBpbiAkZm9yIHtcblx0XHRcdCRzZWwgOiBhcHBlbmQoJHNlbCwgZ3JpZGxlX3NlbGVjdG9yKCRmLCAkc3RhdGVzLCAkdmFsdWVzKSwgY29tbWEpO1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cblx0XHQvLyBnZXQgYWxsIHN0YXRlcyBpZiBub3Qgc3BlY2lmaWVkXG5cdFx0QGlmICRzdGF0ZXMgPT0gbnVsbCB7XG5cdFx0XHQkc3RhdGVzIDogZ3JpZGxlX2dldF9zdGF0ZXNfbmFtZXMoKTtcblx0XHR9XG5cblx0XHQvLyBnZXQgdGhlIHBhdHRlcm5cblx0XHQkcGF0dGVybiA6IG1hcC1nZXQoJF9ncmlkbGUtcGFja2FnZXMsICRmb3IpO1xuXHRcdCRwYXR0ZXJuIDogbWFwLWdldCgkcGF0dGVybiwgY2xhc3NuYW1lKTtcblxuXHRcdEBlYWNoICRzdGF0ZU5hbWUgaW4gJHN0YXRlcyB7XG5cdFx0XHRAaWYgJHZhbHVlcyAhPSBudWxsIHtcblx0XHRcdFx0JHNlbCA6IGFwcGVuZCgkc2VsLCBfZ3JpZGxlX2NsYXNzbmFtZSgkZm9yLCAkc3RhdGVOYW1lLCAkdmFsdWVzKSwgY29tbWEpO1xuXHRcdFx0fSBAZWxzZSBpZiBpbmRleCgkcGF0dGVybiwgJyVjb2x1bW4nKSB7XG5cdFx0XHRcdEBlYWNoICRjb2x1bW5OYW1lLCAkY29sdW1uIGluIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKGNvbHVtbikge1xuXHRcdFx0XHRcdCRzZWwgOiBhcHBlbmQoJHNlbCwgX2dyaWRsZV9jbGFzc25hbWUoJGZvciwgJHN0YXRlTmFtZSwgJGNvbHVtbk5hbWUpLCBjb21tYSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgaW5kZXgoJHBhdHRlcm4sICclY29sdW1uLWNvdW50Jykge1xuXHRcdFx0XHRAZm9yICRpIGZyb20gMCB0aHJvdWdoIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKGNvbHVtbi1jb3VudCkge1xuXHRcdFx0XHRcdCRzZWwgOiBhcHBlbmQoJHNlbCwgX2dyaWRsZV9jbGFzc25hbWUoJGZvciwgJHN0YXRlTmFtZSwgJGkpLCBjb21tYSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0QGlmICRmb3IgPT0gZmxleC1vcmRlciB7XG5cdFx0XHRcdFx0JHNlbCA6IGFwcGVuZCgkc2VsLCBfZ3JpZGxlX2NsYXNzbmFtZSgkZm9yLCAkc3RhdGVOYW1lLCBmaXJzdCksIGNvbW1hKTtcblx0XHRcdFx0XHQkc2VsIDogYXBwZW5kKCRzZWwsIF9ncmlkbGVfY2xhc3NuYW1lKCRmb3IsICRzdGF0ZU5hbWUsIGxhc3QpLCBjb21tYSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgaW5kZXgoJHBhdHRlcm4sICclYWxpZ24nKSB7XG5cdFx0XHRcdEBlYWNoICRhIGluIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKGFsaWduKSB7XG5cdFx0XHRcdFx0JHNlbCA6IGFwcGVuZCgkc2VsLCBfZ3JpZGxlX2NsYXNzbmFtZSgkZm9yLCAkc3RhdGVOYW1lLCAkYSksIGNvbW1hKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSBpZiBpbmRleCgkcGF0dGVybiwgJyVjb3VudCcpIGFuZCAkZm9yID09IGNsZWFyLWVhY2gge1xuXHRcdFx0XHRAZWFjaCAkaWR4LCAkY2xlYXJFYWNoIGluIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKGNvdW50KSB7XG5cdFx0XHRcdFx0JGNvdW50IDogbWFwLWdldCgkY2xlYXJFYWNoLCBjbGVhckVhY2gpO1xuXHRcdFx0XHRcdCRzZWwgOiBhcHBlbmQoJHNlbCwgX2dyaWRsZV9jbGFzc25hbWUoJGZvciwgJHN0YXRlTmFtZSwgJGNvdW50KSwgY29tbWEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmIGluZGV4KCRwYXR0ZXJuLCAnJXNpZGUnKSB7XG5cdFx0XHRcdEBlYWNoICRzaWRlIGluIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKHNpZGUpIHtcblx0XHRcdFx0XHQkc2VsIDogYXBwZW5kKCRzZWwsIF9ncmlkbGVfY2xhc3NuYW1lKCRmb3IsICRzdGF0ZU5hbWUsICRzaWRlKSwgY29tbWEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmIGluZGV4KCRwYXR0ZXJuLCAnJWZsb2F0Jykge1xuXHRcdFx0XHRAZWFjaCAkZmxvYXQgaW4gX2dyaWRsZV9nZXRfcGF0dGVybl92YWx1ZXMoZmxvYXQpIHtcblx0XHRcdFx0XHQkc2VsIDogYXBwZW5kKCRzZWwsIF9ncmlkbGVfY2xhc3NuYW1lKCRmb3IsICRzdGF0ZU5hbWUsICRmbG9hdCksIGNvbW1hKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSBpZiBpbmRleCgkcGF0dGVybiwgJyVyZXZlcnNlJykge1xuXHRcdFx0XHRAZWFjaCAkcmV2ZXJzZSBpbiBfZ3JpZGxlX2dldF9wYXR0ZXJuX3ZhbHVlcyhyZXZlcnNlKSB7XG5cdFx0XHRcdFx0JHNlbCA6IGFwcGVuZCgkc2VsLCBfZ3JpZGxlX2NsYXNzbmFtZSgkZm9yLCAkc3RhdGVOYW1lLCAkcmV2ZXJzZSksIGNvbW1hKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdCRzZWwgOiBhcHBlbmQoJHNlbCwgX2dyaWRsZV9jbGFzc25hbWUoJGZvciwgJHN0YXRlTmFtZSksIGNvbW1hKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0QHJldHVybiAkc2VsO1xufVxuXG5cbi8vXG4vLyBHZW5lcmF0ZSBjbGFzc25hbWVcbi8vXG4vLyBAcGFyYW0gXHRMaXN0IFx0XHQkcGF0dGVybiBcdFRoZSBwYXR0ZXJuIHRvIHVzZSB0byBnZW5lcmF0ZSBjbGFzc25hbWVcbi8vIEBwYXJhbSBcdFN0cmluZyBcdFx0JHN0YXRlIFx0XHRUaGUgc3RhdGVcbi8vIEBwYXJhbSBcdGludCBcdFx0JGNvdW50IFx0XHRUaGUgY29sdW1uIGNvdW50XG4vL1xuQGZ1bmN0aW9uIF9ncmlkbGVfY2xhc3NuYW1lKFxuXHQkZm9yLFxuXHQkc3RhdGUgOiBudWxsLFxuXHQkdmFsdWUgOiBudWxsXG4pIHtcblxuXHQvLyBnZXQgdGhlIHBhdHRlcm5cblx0JHBhdHRlcm4gOiAkZm9yO1xuXHRAaWYgdHlwZS1vZigkZm9yKSA9PSBzdHJpbmcge1xuXHRcdCRwYXR0ZXJuIDogbWFwLWdldCgkX2dyaWRsZS1wYWNrYWdlcywgJGZvcik7XG5cdFx0JHBhdHRlcm4gOiBtYXAtZ2V0KCRwYXR0ZXJuLCBjbGFzc25hbWUpO1xuXHR9XG5cblx0Ly8gZGVsZXRlIGRlZmF1bHQgOlxuXHRAaWYgdW5xdW90ZShcIiN7JHN0YXRlfVwiKSA9PSBkZWZhdWx0IHtcblx0XHQkc3RhdGUgOiBudWxsO1xuXHR9XG5cblx0Ly8gY29uc3RydWN0IGNsYXNzIG5hbWUgOlxuXHQkcmVtb3ZlU2VwYXJhdG9yIDogZmFsc2U7XG5cdEBmb3IgJGkgZnJvbSBsZW5ndGgoJHBhdHRlcm4pIHRocm91Z2ggMSB7XG5cdFx0JHZhciA6IG50aCgkcGF0dGVybiwgJGkpO1xuXG5cdFx0QGlmICR2YXIgPT0gJ0AnIHtcblx0XHRcdCRwYXR0ZXJuIDogc2V0LW50aCgkcGF0dGVybiwgJGksICdcXFxcQCcpO1xuXHRcdH1cblxuXHRcdEBpZiBpbmRleCgkX2dyaWRsZV9uYW1lcy1zZXBhcmF0b3JzLCAkdmFyKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBuZWVkIHRvIHJlbW92ZSBzZXBhcmF0b3Jcblx0XHRcdEBpZiAkcmVtb3ZlU2VwYXJhdG9yIHtcblx0XHRcdFx0JHBhdHRlcm4gOiBzZXQtbnRoKCRwYXR0ZXJuLCAkaSwgbnVsbCk7XG5cdFx0XHR9XG5cdFx0XHQkcmVtb3ZlU2VwYXJhdG9yIDogZmFsc2U7XG5cdFx0fSBAZWxzZSBpZiAkdmFyID09IFwiJXN0YXRlXCIge1xuXHRcdFx0QGlmICRzdGF0ZSA9PSBudWxsIHtcblx0XHRcdFx0JHBhdHRlcm4gOiBzZXQtbnRoKCRwYXR0ZXJuLCAkaSwgbnVsbCk7XG5cdFx0XHRcdCRyZW1vdmVTZXBhcmF0b3IgOiB0cnVlO1xuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdCRwYXR0ZXJuIDogc2V0LW50aCgkcGF0dGVybiwgJGksICRzdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSBAZWxzZSBpZiAkdmFyIGFuZCBzdHItaW5kZXgoJHZhciwgJyUnKSA9PSAxIHtcblx0XHRcdCR0b2tlbiA6IHN0ci1zbGljZSgkdmFyLCAyKTtcblx0XHRcdC8vIGNoZWNrIHRoYXQgdGhlIHZhbHVlIGlzIHBhcnQgb2YgdGhlIHRva2VuXG5cdFx0XHQkdG9rZW5zIDogbWFwLWdldCgkX2dyaWRsZS1uYW1lcy10b2tlbnMsICR0b2tlbik7XG5cdFx0XHRAaWYgJHRva2VucyB7XG5cdFx0XHRcdCRwYXR0ZXJuIDogc2V0LW50aCgkcGF0dGVybiwgJGksICR2YWx1ZSk7XG5cdFx0XHRcdEBpZiAkdmFsdWUgPT0gbnVsbCB7XG5cdFx0XHRcdFx0JHJlbW92ZVNlcGFyYXRvciA6IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IEBlbHNlIGlmICR2YXIgPT0gbnVsbCB7XG5cdFx0XHQkcmVtb3ZlU2VwYXJhdG9yIDogdHJ1ZTtcblx0XHR9XG5cblx0fVxuXG5cdC8vIGNsZWFuIHNlbGVjdG9yXG5cdCRsaXN0OiAoKTtcblx0QGVhY2ggJHZhciBpbiAkcGF0dGVybiB7XG5cdFx0QGlmICR2YXIge1xuXHRcdFx0JGxpc3Q6IGFwcGVuZCgkbGlzdCwgJHZhcik7XG5cdFx0fVxuXHR9XG5cdCRwYXR0ZXJuIDogJGxpc3Q7XG5cblx0Ly8gYnVpbGQgc2VsZWN0b3Jcblx0JHNlbCA6IFwiXCI7XG5cdCRwcmVmaXggOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihjbGFzc2VzLXByZWZpeCwgJHN0YXRlKTtcblx0QGVhY2ggJHBhcnQgaW4gJHBhdHRlcm4ge1xuXHRcdEBpZiAkcGFydCB7XG5cdFx0XHQkc2VsIDogXCIjeyRzZWx9I3skcGFydH1cIjtcblx0XHR9XG5cdH1cblx0QGlmICRwcmVmaXggYW5kIHN0ci1zbGljZSgkc2VsLDEsc3RyX2xlbmd0aCgkcHJlZml4KSkgIT0gJHByZWZpeCB7XG5cdFx0JHNlbCA6IFwiLiN7JHByZWZpeH0jeyRzZWx9XCI7XG5cdH0gQGVsc2Uge1xuXHRcdCRzZWwgOiBcIi4jeyRzZWx9XCI7XG5cdH1cblxuXHQvLyByZXR1cm4gZ2VuZXJhdGVkIGNsYXNzIDpcblx0QHJldHVybiB1bnF1b3RlKCRzZWwpO1xufVxuXG5cbi8vXG4vLyBVbm1hdGNoZWQgcGF0dGVybnNcbi8vXG4vLyBAcGFyYW0gXHRMaXN0IFx0XHQkcGF0dGVybiBcdFRoZSBwYXR0ZXJuIHRvIHVzZSB0byBnZW5lcmF0ZSBjbGFzc25hbWVcbi8vIEByZXR1cm4gIE1hcCAgICAgICAgICAgICAgICAgICAgIE1hcCBvZiB1bm1hdGNoZWQgcGF0dGVybiBpbmRleDpwYXR0ZXJuXG4vL1xuQGZ1bmN0aW9uIF9ncmlkbGVfdW5tYXRjaGVkX3BhdHRlcm5zKFxuXHQkcGF0dGVyblxuKSB7XG5cdCR1bm1hdGNoZWQgOiAoKTtcblxuXHQvLyBMb29wIGVhY2ggcGFydGVyblxuXHRAZm9yICRpIGZyb20gbGVuZ3RoKCRwYXR0ZXJuKSB0aHJvdWdoIDEge1xuXHRcdCR2YXIgOiBudGgoJHBhdHRlcm4sICRpKTtcblx0XHRAaWYgJHZhciBhbmQgc3RyLWluZGV4KCR2YXIsICclJykgPT0gMSB7XG5cdFx0XHQkdG9rZW4gOiBzdHItc2xpY2UoJHZhciwgMik7XG5cdFx0XHQvLyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSB0b2tlblxuXHRcdFx0JHRva2VucyA6IG1hcC1nZXQoJF9ncmlkbGUtbmFtZXMtdG9rZW5zLCAkdG9rZW4pO1xuXHRcdFx0QGlmICR0b2tlbnMgPT0gbnVsbCB7XG5cdFx0XHRcdCR1bm1hdGNoZWQgOiBtYXAtc2V0KCR1bm1hdGNoZWQsICRpLCAkdmFyKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcmV0dXJuICR1bm1hdGNoZWQ7XG59XG5cblxuLy9cbi8vIG1hdGNoZWQgcGF0dGVybnNcbi8vXG4vLyBAcGFyYW0gXHRMaXN0IFx0XHQkcGF0dGVybiBcdFRoZSBwYXR0ZXJuIHRvIHVzZSB0byBnZW5lcmF0ZSBjbGFzc25hbWVcbi8vIEByZXR1cm4gIE1hcCAgICAgICAgICAgICAgICAgICAgIE1hcCBvZiBtYXRjaGVkIHBhdHRlcm4gaW5kZXg6cGF0dGVyblxuLy9cbkBmdW5jdGlvbiBfZ3JpZGxlX21hdGNoZWRfcGF0dGVybnMoXG5cdCRwYXR0ZXJuXG4pIHtcblx0JG1hdGNoZWQgOiAoKTtcblxuXHQvLyBMb29wIGVhY2ggcGFydGVyblxuXHRAZm9yICRpIGZyb20gbGVuZ3RoKCRwYXR0ZXJuKSB0aHJvdWdoIDEge1xuXHRcdCR2YXIgOiBudGgoJHBhdHRlcm4sICRpKTtcblx0XHRAaWYgJHZhciBhbmQgc3RyLWluZGV4KCR2YXIsICclJykgPT0gMSB7XG5cdFx0XHQkdG9rZW4gOiBzdHItc2xpY2UoJHZhciwgMik7XG5cdFx0XHQvLyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSB0b2tlblxuXHRcdFx0JHRva2VucyA6IG1hcC1nZXQoJF9ncmlkbGUtbmFtZXMtdG9rZW5zLCAkdG9rZW4pO1xuXHRcdFx0QGlmICR0b2tlbnMgIT0gbnVsbCB7XG5cdFx0XHRcdCRtYXRjaGVkIDogbWFwLXNldCgkbWF0Y2hlZCwgJGksICR2YXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEByZXR1cm4gJG1hdGNoZWQ7XG59XG5cblxuLy9cbi8vIEdldCBkeW5hbWljIHBhdHRlcm4gdmFsdWVzXG4vL1xuLy8gQHBhcmFtIFx0U3RyaW5nIFx0XHQkZm9yIFx0XHRcdE5hbWUgb2YgdGhlIHRva2VuXG4vLyBAcmV0dXJuIFx0TWl4ZWQgXHRcdFx0XHRcdCAgICBWYWx1ZXMgb2YgdGhlIHRva2VuXG4vL1xuQGZ1bmN0aW9uIF9ncmlkbGVfZ2V0X3BhdHRlcm5fdmFsdWVzKFxuXHQkZm9yXG4pe1xuXHRAaWYgJGZvciA9PSBjb2x1bW4ge1xuXHRcdEByZXR1cm4gZ3JpZGxlX2dldF9jb2x1bW5zKCk7XG5cdH1cblxuXHRAaWYgJGZvciA9PSBjb2x1bW4tY291bnQge1xuXHRcdEByZXR1cm4gbGVuZ3RoKGdyaWRsZV9nZXRfY29sdW1ucygpKTtcblx0fVxuXG5cdEBpZiAkZm9yID09IGNvdW50IHtcblx0XHRAcmV0dXJuICRfZ3JpZGxlX2NsZWFyX2NsYXNzZXM7XG5cdH1cblxuXHRAcmV0dXJuIG1hcC1nZXQoJF9ncmlkbGUtbmFtZXMtdG9rZW5zLCAkZm9yKTtcbn1cblxuXG4vL1xuLy8gR2V0IHRoZSBjdXJyZW50IGRyaXZlclxuLy9cbkBmdW5jdGlvbiBncmlkbGVfZ2V0X2RyaXZlcigpIHtcblx0QHJldHVybiAkX2dyaWRsZS1kcml2ZXI7XG59XG5cblxuLy9cbi8vIElzIGRyaXZlclxuLy9cbkBmdW5jdGlvbiBncmlkbGVfaXNfZHJpdmVyKCRkcml2ZXIpIHtcblx0QGVhY2ggJGQgaW4gJGRyaXZlciB7XG5cdFx0QGlmICRkID09IGdyaWRsZV9nZXRfZHJpdmVyKCkge1xuXHRcdFx0QHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRAcmV0dXJuIGZhbHNlO1xufVxuXG5cbi8vXG4vLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGdlbmVyYXRlIHRoZSBjbGFzcyBvciBub3Rcbi8vXG4vLyBAcGFyYW0gXHRMaXN0IFx0XHQkZm9yIFx0XHRcdE5hbWUgb2YgdGhlIGNsYXNzIG1hcFxuLy8gQHBhcmFtIFx0TGlzdCBcdFx0JHdoYXQgXHRcdFx0VGhlIG1hcCB0aGF0IHNldCB3aGljaCBjbGFzcyBtYXAgdG8gaW5jbHVkZSBhbmQgZXhjbHVkZVxuLy8gQHJldHVybiBcdEJvb2xlYW4gXHRcdFx0XHRcdHRydWUgaWYgbmVlZCB0byBnZW5lcmF0ZSwgZmFsc2UgaWYgbm90XG4vL1xuQGZ1bmN0aW9uIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShcblx0JHBhY2thZ2UsXG5cdCR3aGF0XG4pIHtcblx0Ly8gY2hlY2sgdGhhdCB0aGUgd2FudGVkIHBhY2thZ2UgZXhpc3QgaW4gc3lzdGVtXG5cdEBpZiBtYXAtZ2V0KCRfZ3JpZGxlLXBhY2thZ2VzLCAkcGFja2FnZSkge1xuXHRcdCRwYWNrYWdlIDogbWFwLWdldCgkX2dyaWRsZS1wYWNrYWdlcywgJHBhY2thZ2UpO1xuXHRcdCRwYWNrYWdlIDogbWFwLWdldCgkcGFja2FnZSwgcGFja2FnZSk7XG5cdH0gQGVsc2Uge1xuXHRcdEByZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBpZiB3ZSBoYXZlIGEgd2hhdCBwYXJhbSwgbmVlZCB0byBjaGVjayBpZiB0aGUgcGFja2FnZSBpcyBuZWVkZWRcblx0QGlmICR3aGF0IGFuZCAkd2hhdCAhPSBhbGwge1xuXG5cdFx0Ly8gY2hlY2sgaWYgd2UgaGF2ZSBvbmx5IHNvbWUgLSBpbiB0aGUgc3RhdGVzIGxpc3Rcblx0XHQvLyBtZWFuIHRoYXQgd2Ugd2FudCB0byBvbmx5IHJlbW92ZSB0aGVzZSBzcGVjaWZpZWQgc3RhdGVzXG5cdFx0Ly8gZnJvbSB0aGUgYWxsIHN0YXRlcyBsaXN0XG5cdFx0JG9ubHlSZW1vdmUgOiB0cnVlO1xuXHRcdEBlYWNoICR3IGluICR3aGF0IHtcblx0XHRcdEBpZiBzdHItc2xpY2UoJHcsMSwxKSAhPSAnLScge1xuXHRcdFx0XHQkb25seVJlbW92ZSA6IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdEBpZiAkb25seVJlbW92ZSB7XG5cdFx0XHRAZWFjaCAkbmFtZSBpbiAkcGFja2FnZSB7XG5cdFx0XHRcdEBpZiBpbmRleCgkd2hhdCwgdW5xdW90ZShcIi0jeyRuYW1lfVwiKSkge1xuXHRcdFx0XHRcdEByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdEByZXR1cm4gdHJ1ZTtcblx0XHR9IEBlbHNlIHtcblx0XHRcdEBlYWNoICRuYW1lIGluICRwYWNrYWdlIHtcblx0XHRcdFx0QGlmIGluZGV4KCR3aGF0LCB1bnF1b3RlKFwiI3skbmFtZX1cIikpIHtcblx0XHRcdFx0XHRAcmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdEByZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdC8vIHdlIGRvbid0IGhhdmUgYSB3aGF0IHBhcmFtIHNvIHRoZSBwYWNrYWdlIGlzXG5cdEByZXR1cm4gdHJ1ZTtcbn1cblxuXG4vL1xuLy8gR2V0IGdlbmVyaWMgc2VsZWN0b3IgZm9yIGEgY2xhc3Ncbi8vXG5AZnVuY3Rpb24gX2dyaWRsZV9nZXRfZ2VuZXJpY19zZWxlY3Rvcihcblx0JHBhY2thZ2Vcbikge1xuXHQkcCA6IG1hcC1nZXQoJF9ncmlkbGUtcGFja2FnZXMsICRwYWNrYWdlKTtcblx0JHNlbCA6IG1hcC1nZXQoJHAsIGdlbmVyaWMtc2VsZWN0b3IpO1xuXHRAaWYgJHNlbCB7XG5cdFx0QHJldHVybiB1bnF1b3RlKCRzZWwpO1xuXHR9XG5cdCRzZWwgOiBtYXAtZ2V0KCRwLCBjbGFzc25hbWUpO1xuXHQkZ2VuZXJpYyA6IFwiXCI7XG5cdCRlbmQgOiBmYWxzZTtcblx0JGkgOiAxO1xuXHRAZWFjaCAkcGFydCBpbiAkc2VsIHtcblx0XHRAaWYgbm90ICRlbmQge1xuXHRcdFx0Ly8gaWYgd2UgaGF2ZSBhIHNlcGFyYXRvciwgY2hlY2sgdGhlIG5leHQgdmFsdWUgdG8gc2VlIGlmIGl0J3MgYSB2YXJpYWJsZVxuXHRcdFx0QGlmIGluZGV4KCRfZ3JpZGxlLW5hbWVzLXNlcGFyYXRvcnMsICRwYXJ0KSBhbmQgJGkgPCBsZW5ndGgoJHNlbCkge1xuXHRcdFx0XHRAaWYgbnRoKCRzZWwsJGkgKyAxKSAhPSAnJXN0YXRlJyB7XG5cdFx0XHRcdFx0JGdlbmVyaWMgOiAjeyRnZW5lcmljfSN7JHBhcnR9O1xuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHQkZW5kIDogdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdEBpZiBzdHItc2xpY2UoJHBhcnQsMSwxKSAhPSAnJScge1xuXHRcdFx0XHRcdCRnZW5lcmljIDogI3skZ2VuZXJpY30jeyRwYXJ0fTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0JGVuZCA6IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0JGkgOiAkaSArIDE7XG5cdH1cblx0QHJldHVybiB1bnF1b3RlKCdbY2xhc3MqPVwiI3skZ2VuZXJpY31cIl0nKTtcbn1cblxuXG4vL1xuLy8gUGFyc2UgZ3JpZGxlIG1peGluIGxpc3Rcbi8vXG5AZnVuY3Rpb24gX2dyaWRsZV9wYXJzZV9ncmlkbGVfbWl4aW5fbGlzdChcblx0JGxpc3Rcbikge1xuXHQvLyBtYXBcblx0JG1hcCA6ICgpO1xuXG5cdC8vIGNvbnRleHRcblx0JGNvbnRleHQgOiBudWxsO1xuXHQkb2YgOiBpbmRleCgkbGlzdCwgb2YpO1xuXHRAaWYgJG9mIHtcblx0XHQkY29udGV4dCA6IG50aCgkbGlzdCwgKCRvZiArIDEpKTtcblx0XHQkbGlzdCA6IHJlbW92ZS1udGgoJGxpc3QsJG9mKTtcblx0XHQkbGlzdCA6IHJlbW92ZS1udGgoJGxpc3QsJG9mKTtcblx0fSBAZWxzZSB7XG5cdFx0JGN0eCA6IGluZGV4KCRsaXN0LCBjb250ZXh0KTtcblx0XHRAaWYgJGN0eCB7XG5cdFx0XHQkY29udGV4dCA6IG50aCgkbGlzdCwgKCRjdHggKyAxKSk7XG5cdFx0XHQkbGlzdCA6IHJlbW92ZS1udGgoJGxpc3QsJGN0eCk7XG5cdFx0XHQkbGlzdCA6IHJlbW92ZS1udGgoJGxpc3QsJGN0eCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZ3JpZFxuXHQkZ3IgOiBudGgoJGxpc3QsIDEpO1xuXHRAaWYgdHlwZS1vZigkZ3IpID09IG51bWJlciBvciAkZ3IgPT0gYWRhcHQgb3IgJGdyID09IGdyb3cgb3IgZ3JpZGxlX2hhc19jb2x1bW4oJGdyKSB7XG5cdFx0JG1hcCA6IG1hcC1zZXQoJG1hcCwgZ3JpZCwgJGdyICRjb250ZXh0KTtcblx0XHQkbGlzdCA6IHJlbW92ZS1udGgoJGxpc3QsMSk7XG5cdH1cblxuXHQvLyBwcmVmaXhcblx0JHByZWZpeCA6IG51bGw7XG5cdCRhdCA6IGluZGV4KCRsaXN0LCBhdCk7XG5cdEBpZiAkYXQge1xuXHRcdCRtYXAgOiBtYXAtc2V0KCRtYXAsIHByZWZpeCwgbnRoKCRsaXN0LCgkYXQgKyAxKSkgJGNvbnRleHQpO1xuXHRcdCRsaXN0IDogcmVtb3ZlLW50aCgkbGlzdCwkYXQpO1xuXHRcdCRsaXN0IDogcmVtb3ZlLW50aCgkbGlzdCwkYXQpO1xuXHR9XG5cblx0Ly8gbG9vcCBvbiBlYWNoIHBhcmFtZXRlcnNcblx0JHByb3BfdmFsdWVzIDogKCk7XG5cdCRwcm9wX25hbWUgOiBudWxsO1xuXHQkbGlzdCA6IGFwcGVuZCgkbGlzdCwgX2dyaWRsZS1sYXN0KTtcblx0QGVhY2ggJHBhcmFtIGluICRsaXN0IHtcblxuXHRcdEBpZiAkcGFyYW0gIT0gd2l0aCBhbmQgJHBhcmFtICE9ICdhbmQnIHtcblx0XHRcdEBpZiBtYXAtZ2V0KCRfZ3JpZGxlLXBhY2thZ2VzLCAkcGFyYW0pIG9yICRwYXJhbSA9PSBfZ3JpZGxlLWxhc3Qge1xuXHRcdFx0XHRAaWYgJHByb3BfbmFtZSB7XG5cdFx0XHRcdFx0JHZhbHVlcyA6IHRydWU7XG5cdFx0XHRcdFx0QGlmIGxlbmd0aCgkcHJvcF92YWx1ZXMpID4gMCB7XG5cdFx0XHRcdFx0XHQkdmFsdWVzIDogJHByb3BfdmFsdWVzO1xuXHRcdFx0XHRcdFx0QGlmIGxlbmd0aCgkcHJvcF92YWx1ZXMpID09IDEge1xuXHRcdFx0XHRcdFx0XHQkdmFsdWVzIDogbnRoKCRwcm9wX3ZhbHVlcywxKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCRwcm9wX3ZhbHVlcyA6ICgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQkbWFwIDogbWFwLXNldCgkbWFwLCAkcHJvcF9uYW1lLCAkdmFsdWVzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkcHJvcF9uYW1lIDogJHBhcmFtO1xuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdCRwcm9wX3ZhbHVlcyA6IGFwcGVuZCgkcHJvcF92YWx1ZXMsICRwYXJhbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmV0dXJuIHRoZSBtYXBcblx0QHJldHVybiAkbWFwO1xufVxuXG5cbi8vXG4vLyBHZXQgc2V0IG1hcCBmcm9tIHN0cmluZ1xuLy9cbkBmdW5jdGlvbiBfZ3JpZGxlX2dldF9ncmlkbGVfc2V0X21hcF9mcm9tX2xpc3QoXG5cdCRsaXN0XG4pIHtcblx0Ly8gbG9vcCBvbiBlYWNoIGxpc3QgZWxlbWVudCB0byBzcGxpdCBpbnRvIHN0YXRlcyBsaXN0c1xuXHQkc3RhdGUgOiBjdXJyZW50O1xuXHQkbWFwIDogKCk7XG5cdEBlYWNoICRwcm9wIGluICRsaXN0IHtcblx0XHRAaWYgbWFwLWdldCgkbWFwLCAkc3RhdGUpID09IG51bGwge1xuXHRcdFx0JG1hcCA6IG1hcC1zZXQoJG1hcCwgJHN0YXRlLCAoKSk7XG5cdFx0fVxuXHRcdEBpZiB0eXBlLW9mKCRwcm9wKSA9PSBzdHJpbmcgYW5kIGdyaWRsZV9oYXNfc3RhdGUoJHByb3ApIHtcblx0XHRcdCRzdGF0ZSA6ICRwcm9wO1xuXHRcdH0gQGVsc2Uge1xuXHRcdFx0JGxzIDogbWFwLWdldCgkbWFwLCAkc3RhdGUpO1xuXHRcdFx0JGxzIDogYXBwZW5kKCRscywgJHByb3ApO1xuXHRcdFx0JG1hcCA6IG1hcC1zZXQoJG1hcCwgJHN0YXRlLCAkbHMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGxvb3Agb24gZWFjaCBzdGF0ZXNcblx0QGVhY2ggJHN0YXRlTmFtZSwgJHByb3BzIGluICRtYXAge1xuXHRcdCRwcm9wc19tYXAgOiBfZ3JpZGxlX3BhcnNlX2dyaWRsZV9taXhpbl9saXN0KCRwcm9wcyk7XG5cdFx0QGlmIHR5cGUtb2YoJHByb3BzX21hcCkgPT0gbWFwIHtcblx0XHRcdCRtYXAgOiBtYXAtc2V0KCRtYXAsICRzdGF0ZU5hbWUsICRwcm9wc19tYXApO1xuXHRcdH0gQGVsc2Uge1xuXHRcdFx0JG1hcCA6IG1hcC1zZXQoJG1hcCwgJHN0YXRlTmFtZSwgbnVsbCk7XG5cdFx0fVxuXHR9XG5cdEByZXR1cm4gJG1hcDtcbn1cblxuXG4vL1xuLy8gR2V0IHRoZSBtZWRpYSBxdWVyeSBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlLCBvciB3aWR0aCwgZXRjLi4uXG4vL1xuLy8gQHBhcmFtIFx0TWl4ZWQgXHRcdCRzdGF0ZS1vci1taW4td2lkdGggXHRcdFRoZSBzdGF0ZSBuYW1lIG9mIHRoZSBtaW4gd2lkdGhcbi8vIEBwYXJhbSBcdE1peGVkIFx0XHQkbWF4LXdpZHRoIFx0XHRcdFRoZSBtYXggd2lkdGggaWYgZmlyc3QgcGFyYW0gaXMgYSBtaW4gd2lkdGhcbi8vIEByZXR1cm4gXHRTdHJpbmcgXHRcdFx0XHRcdFx0VGhlIG1lZGlhIHF1ZXJ5IHN0cmluZyB3aXRob3V0IHRoZSBAbWVkaWFcbi8vXG5AZnVuY3Rpb24gZ3JpZGxlX2dldF9tZWRpYV9xdWVyeShcblx0JHN0YXRlLW9yLXNldHRpbmdzIDogY3VycmVudFxuKSB7XG5cdC8vIGNoZWNrIGlmIGlzIGEgc3RyaW5nIDpcblx0JHN0YXRlIDogbnVsbDtcblx0QGlmIHR5cGUtb2YoJHN0YXRlLW9yLXNldHRpbmdzKSA9PSBzdHJpbmdcblx0e1xuXHRcdCRzdGF0ZSA6IGdyaWRsZV9nZXRfc3RhdGUoJHN0YXRlLW9yLXNldHRpbmdzKTtcblx0fVxuXHRAZWxzZSBpZiAkc3RhdGUtb3Itc2V0dGluZ3MgPT0gbnVsbFxuXHR7XG5cdFx0JHN0YXRlIDogJF9ncmlkbGUtc2V0dGluZ3M7XG5cdH1cblx0QGVsc2Vcblx0e1xuXHRcdCRzdGF0ZSA6IG1hcC1tZXJnZSgkX2dyaWRsZS1zZXR0aW5ncywgJHN0YXRlLW9yLXNldHRpbmdzKTtcblx0fVxuXG5cdC8vIGlmIGl0J3Mgc29tZSBzZXR0aW5ncyBvciBhIHN0YXRlIDpcblx0QGlmICRzdGF0ZSB7XG5cblx0XHQvLyBnZXQgdmFycyA6XG5cdFx0JG5hbWUgOiBtYXAtZ2V0KCRzdGF0ZSwgbmFtZSk7XG5cdFx0JG1pbi13aWR0aCA6IG1hcC1nZXQoJHN0YXRlLCBtaW4td2lkdGgpO1xuXHRcdCRtYXgtd2lkdGggOiBtYXAtZ2V0KCRzdGF0ZSwgbWF4LXdpZHRoKTtcblx0XHQkcXVlcnkgOiBtYXAtZ2V0KCRzdGF0ZSwgcXVlcnkpO1xuXG5cdFx0Ly8gZGlyZWN0IHF1ZXJ5IDpcblx0XHRAaWYgJHF1ZXJ5XG5cdFx0e1xuXHRcdFx0QHJldHVybiAkcXVlcnk7XG5cdFx0fVxuXHRcdEBlbHNlIGlmICRtaW4td2lkdGggYW5kICRtYXgtd2lkdGhcblx0XHR7XG5cdFx0XHRAcmV0dXJuIFwic2NyZWVuIGFuZCAobWluLXdpZHRoOiAjeyRtaW4td2lkdGh9KSBhbmQgKG1heC13aWR0aDogI3skbWF4LXdpZHRofSlcIjtcblx0XHR9XG5cdFx0QGVsc2UgaWYgJG1pbi13aWR0aFxuXHRcdHtcblx0XHRcdEByZXR1cm4gXCJzY3JlZW4gYW5kIChtaW4td2lkdGg6ICN7JG1pbi13aWR0aH0pXCI7XG5cdFx0fVxuXHRcdEBlbHNlIGlmICRtYXgtd2lkdGhcblx0XHR7XG5cdFx0XHRAcmV0dXJuIFwic2NyZWVuIGFuZCAobWF4LXdpZHRoOiAjeyRtYXgtd2lkdGh9KVwiO1xuXHRcdH1cblx0XHRAZWxzZVxuXHRcdHtcblx0XHRcdEByZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0fVxuXHRAZWxzZVxuXHR7XG5cdFx0QHJldHVybiBudWxsO1xuXHR9XG59XG4iLCIvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IFNldHRpbmdzIG1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1xuLy8gU2V0dXBcbi8vXG5AbWl4aW4gZ3JpZGxlX3NldHVwKFxuXHQkc2V0dGluZ3MgOiAoKVxuKSB7XG5cdC8vIHByZXBhcmUgc3RhdGVcblx0JHNldHRpbmdzIDogX2dyaWRsZV9wcmVwYXJlX3N0YXRlX3NldHRpbmdzKCRzZXR0aW5ncyk7XG5cblx0Ly8gZXh0ZW5kIGRlZmF1bHQgc2V0dGluZ3Ncblx0JF9ncmlkbGUtc2V0dGluZ3MgOiBtYXAtbWVyZ2UoKFxuXHRcdG5hbWUgOiBkZWZhdWx0LFxuXHRcdG1pbi13aWR0aCA6IG51bGwsXG5cdFx0bWF4LXdpZHRoIDogbnVsbCxcblx0XHRxdWVyeSA6IG51bGwsXG5cdFx0Y2xhc3NlcyA6IHRydWUsXG5cdFx0Y29udGV4dCA6IDEyLFxuXHRcdGNvbHVtbi13aWR0aCA6IG51bGwsXG5cdFx0Z3V0dGVyLXdpZHRoIDogMjBweCxcblx0XHRndXR0ZXItaGVpZ2h0IDogMCxcblx0XHRndXR0ZXItdG9wIDogMCxcblx0XHRndXR0ZXItcmlnaHQgOiAxMHB4LFxuXHRcdGd1dHRlci1ib3R0b20gOiAwLFxuXHRcdGd1dHRlci1sZWZ0IDogMTBweCxcblx0XHRkaXJlY3Rpb24gOiBsdHIsXG5cdFx0ZGlyLWF0dHJpYnV0ZSA6IGZhbHNlLFxuXHRcdG5hbWUtbXVsdGlwbGljYXRvciA6IDEsXG5cdFx0c3RhdGVzLWNsYXNzZXMgOiBmYWxzZSxcblx0XHRjbGFzc2VzLXByZWZpeCA6IG51bGxcblx0KSwgJHNldHRpbmdzKSAhZ2xvYmFsO1xuXG5cdC8vIHJlZ2lzdGVyIGRlZmF1bHQgc3RhdGUgOlxuXHRAaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfc3RhdGUoZGVmYXVsdCwgJF9ncmlkbGUtc2V0dGluZ3MpO1xuXG5cdC8vIHNldCBjdXJyZW50IHN0YXRlIHRvIGRlZmF1bHRcblx0JF9ncmlkbGVfY3VycmVudF9zdGF0ZSA6ICRfZ3JpZGxlLXNldHRpbmdzICFnbG9iYWw7XG5cdCRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lIDogZGVmYXVsdCAhZ2xvYmFsO1xuXG59XG5cbi8vXG4vLyBSZWdpc3RlciBhIHN0YXRlXG4vL1xuQG1peGluIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZShcblx0JG5hbWUsXG5cdCRzZXR0aW5ncyA6ICgpXG4pIHtcblx0Ly8gcHJlcGFyZSBzdGF0ZVxuXHQkc2V0dGluZ3MgOiBfZ3JpZGxlX3ByZXBhcmVfc3RhdGVfc2V0dGluZ3MoJHNldHRpbmdzKTtcblxuXHQvLyBzZXR0aW5ncyA6XG5cdCRzZXR0aW5ncyA6IG1hcC1tZXJnZSgkX2dyaWRsZS1zZXR0aW5ncywgJHNldHRpbmdzKTtcblxuXHQvLyBzZXQgbmFtZSA6XG5cdCRzZXR0aW5ncyA6IG1hcC1zZXQoJHNldHRpbmdzLCBuYW1lLCAkbmFtZSk7XG5cblx0Ly8gZ3V0dGVyIHNpemVzIDpcblx0JGd1dHRlci10b3AgOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLXRvcCk7XG5cdCRndXR0ZXItcmlnaHQgOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLXJpZ2h0KTtcblx0JGd1dHRlci1ib3R0b20gOiBtYXAtZ2V0KCRzZXR0aW5ncywgZ3V0dGVyLWJvdHRvbSk7XG5cdCRndXR0ZXItbGVmdCA6IG1hcC1nZXQoJHNldHRpbmdzLCBndXR0ZXItbGVmdCk7XG5cblx0Ly8gYWRkIHN0YXRlIGluIG1hcHMgOlxuXHQkX2dyaWRsZV9zdGF0ZXMgOiBtYXAtc2V0KCRfZ3JpZGxlX3N0YXRlcywgJG5hbWUsICRzZXR0aW5ncykgIWdsb2JhbDtcblxuXHQvLyBhZGQgcnVsZXMgaWYgZ3V0dGVyIGlzIGRpZmZlcmVudFxuXHRAaWYgJGd1dHRlci10b3AgIT0gbWFwLWdldCgkX2dyaWRsZS1zZXR0aW5ncywgZ3V0dGVyLXRvcClcblx0XHRvciAkZ3V0dGVyLXJpZ2h0ICE9IG1hcC1nZXQoJF9ncmlkbGUtc2V0dGluZ3MsIGd1dHRlci1yaWdodClcblx0XHRvciAkZ3V0dGVyLWJvdHRvbSAhPSBtYXAtZ2V0KCRfZ3JpZGxlLXNldHRpbmdzLCBndXR0ZXItYm90dG9tKVxuXHRcdG9yICRndXR0ZXItbGVmdCAhPSBtYXAtZ2V0KCRfZ3JpZGxlLXNldHRpbmdzLCBndXR0ZXItbGVmdCkge1xuXHRcdCRndXR0ZXJzIDogX2dyaWRsZV9mb3JnZV9ndXR0ZXJzX21hcCh0b3AgcmlnaHQgYm90dG9tIGxlZnQsICRuYW1lKTtcblx0XHRAaW5jbHVkZSBncmlkbGVfYXBwbHlfY3NzX2ZvcihncmlkIGdyaWQtZ3JvdyBncmlkLWFkYXB0LCAoXG5cdFx0XHRncmlkbGVfZ3V0dGVyIDogdG9wIHJpZ2h0IGJvdHRvbSBsZWZ0XG5cdFx0KSwgJG5hbWUpO1xuXHR9XG5cblx0Ly8gYWRkIHJ1bGVzIGlmIGRpcmVjdGlvbiBpcyBkaWZmZXJlbnRcblx0JGRpcmVjdGlvbiA6IG1hcC1nZXQoJHNldHRpbmdzLCBkaXJlY3Rpb24pO1xuXHRAaWYgJGRpcmVjdGlvbiAhPSBtYXAtZ2V0KCRfZ3JpZGxlLXNldHRpbmdzLCBkaXJlY3Rpb24pIHtcblx0XHQkZmxvYXQgOiBsZWZ0O1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IHJ0bCB7XG5cdFx0XHQkZmxvYXQgOiByaWdodDtcblx0XHR9XG5cdFx0QGluY2x1ZGUgZ3JpZGxlX2FwcGx5X2Nzc19mb3IoZ3JpZCwgKFxuXHRcdFx0ZGlyZWN0aW9uIDogJGRpcmVjdGlvbixcblx0XHRcdGZsb2F0IDogJGZsb2F0XG5cdFx0KSwgJG5hbWUpO1xuXHR9XG59XG5cblxuLy9cbi8vICBSZWdpc3RlciBhIGNsZWFyIGVhY2ggY2xhc3Ncbi8vXG5AbWl4aW4gZ3JpZGxlX3JlZ2lzdGVyX2NsZWFyX2VhY2goXG5cdCRjb3VudCxcblx0JGNsZWFyV2hhdFxuKSB7XG5cdC8vIGNyZWF0ZSB0aGUgY2xlYXIgbWFwIDpcblx0JGNsYXNzTWFwIDogKFxuXHRcdGNsZWFyRWFjaCA6ICRjb3VudCxcblx0XHRjbGVhcldoYXQgOiAkY2xlYXJXaGF0XG5cdCk7XG5cblx0Ly8gYXBwZW5kIHRvIG1hcCA6XG5cdCRfZ3JpZGxlX2NsZWFyX2NsYXNzZXMgOiBtYXAtc2V0KCRfZ3JpZGxlX2NsZWFyX2NsYXNzZXMsICRjb3VudCwgJGNsYXNzTWFwKSAhZ2xvYmFsO1xufVxuXG5cbi8vXG4vLyBSZWdpc3RlciBhIHNwZWNpYWwgY2xhc3Ncbi8vXG5AbWl4aW4gZ3JpZGxlX3JlZ2lzdGVyX2NvbHVtbihcblx0JG5hbWUsXG5cdCRjb2x1bW5zLFxuXHQkY29udGV4dFxuKSB7XG5cdC8vIGNyZWF0ZSBhIGNvbHVtbiA6XG5cdCRjb2wgOiBfZ3JpZGxlX2NyZWF0ZV9jb2x1bW4oJG5hbWUsICRjb2x1bW5zLCAkY29udGV4dCk7XG5cblx0Ly8gYWRkIGNvbHVtbiBpbiBtYXBzIDpcblx0JF9ncmlkbGVfY29sdW1ucyA6IG1hcC1zZXQoJF9ncmlkbGVfY29sdW1ucywgJG5hbWUsICRjb2wpICFnbG9iYWw7XG59XG5cblxuLy9cbi8vIFNldCBhIGNsYXNzbWFwXG4vL1xuQG1peGluIGdyaWRsZV9zZXRfY2xhc3NuYW1lX21hcChcblx0JGZvcixcblx0JHBhdHRlcm5cbikge1xuXHQvLyBnZXQgdGhlIG1hcFxuXHQkbWFwIDogbWFwLWdldCgkX2dyaWRsZS1wYWNrYWdlcywgJGZvcik7XG5cdC8vIHNldCB0aGUgbmV3IGNsYXNzbmFtZVxuXHQkbWFwIDogbWFwLXNldCgkbWFwLCBjbGFzc25hbWUsICRwYXR0ZXJuKTtcblx0Ly8gc2V0IHRoZSBjbGFzc21hcFxuXHQkX2dyaWRsZS1wYWNrYWdlcyA6IG1hcC1zZXQoJF9ncmlkbGUtcGFja2FnZXMsICRmb3IsICRtYXApICFnbG9iYWw7XG59XG5cblxuLy9cbi8vIFNldCBhIGdlbmVyaWMgc2VsZWN0b3Jcbi8vXG5AbWl4aW4gZ3JpZGxlX3NldF9nZW5lcmljX3NlbGVjdG9yKFxuXHQkZm9yLFxuXHQkc2VsZWN0b3Jcbikge1xuXHQvLyBnZXQgdGhlIG1hcFxuXHQkbWFwIDogbWFwLWdldCgkX2dyaWRsZS1wYWNrYWdlcywgJGZvcik7XG5cdC8vIHNldCB0aGUgbmV3IGNsYXNzbmFtZVxuXHQkbWFwIDogbWFwLXNldCgkbWFwLCBnZW5lcmljLXNlbGVjdG9yLCAkc2VsZWN0b3IpO1xuXHQvLyBzZXQgdGhlIGNsYXNzbWFwXG5cdCRfZ3JpZGxlLXBhY2thZ2VzIDogbWFwLXNldCgkX2dyaWRsZS1wYWNrYWdlcywgJGZvciwgJG1hcCkgIWdsb2JhbDtcbn1cblxuXG4vL1xuLy8gRXh0ZW5kIGEgZ3JpZGxlIGNsYXNzXG4vL1xuLy8gbWFwIGZvcm1hdCA6XG4vLyAoXG4vLyBcdGdyaWQgOiAoXG4vLyBcdFx0bW9iaWxlIDogKFxuLy8gXHRcdFx0cGFkZGluZyA6IDEwcHgsXG4vLyBcdFx0XHRmbG9hdCA6IGxlZnRcbi8vIFx0XHQpLFxuLy8gXHRcdHRhYmxldCA6IChcbi8vIFx0XHRcdHBhZGRpbmcgOiAxMHB4XG4vLyBcdFx0KVxuLy8gXHQpLFxuLy8gXHRmbGV4LWdyaWQgOiAoXG4vLyBcdFx0bW9iaWxlIDogKFxuLy8gXHRcdFx0cGFkZGluZyA6IDEwcHhcbi8vIFx0XHQpXG4vLyBcdClcbi8vIClcbi8vXG4vLyBAbWl4aW4gZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzKFxuLy8gXHQkZm9yLFxuLy8gXHQkZXh0ZW5kLFxuLy8gXHQkc3RhdGVzTmFtZXMgOiBudWxsXG4vLyApIHtcbi8vIFx0Ly8gaWYgJHN0YXRlcyBpcyBhbGxcbi8vIFx0QGlmICRzdGF0ZXNOYW1lcyA9PSBudWxsIHtcbi8vIFx0XHQkc3RhdGVzTmFtZXMgOiBncmlkbGVfZ2V0X3N0YXRlc19uYW1lcygpO1xuLy8gXHR9XG5cbi8vIFx0Ly8gYWxsb3cgbXVsdGlwbGUgXCIkZm9yXCJcbi8vIFx0QGVhY2ggJGYgaW4gJGZvciB7XG5cbi8vIFx0XHQvLyBnZXQgdGhlIG1hcCBmb3IgdGhlIHBhc3NlZCBtaXhpbiBcImNhdGVnb3J5XCJcbi8vIFx0XHQkZm9yTWFwIDogbWFwLWdldCgkX2dyaWRsZV9leHRlbmRfYmFzZV9jbGFzc2VzLCAkZik7XG5cbi8vIFx0XHQvLyBjcmVhdGUgdGhlIG1hcCBpZiBub3QgZXhpc3Rcbi8vIFx0XHRAaWYgJGZvck1hcCA9PSBudWxsIHsgJGZvck1hcCA6ICgpOyB9XG5cbi8vIFx0XHQvLyBsb29wIG9uIGVhY2ggc3RhdGVzIHRvIHJlZ2lzdGVyIGFuIGV4dGVuZCBtYXBcbi8vIFx0XHRAZWFjaCAkc3RhdGVOYW1lIGluICRzdGF0ZXNOYW1lcyB7XG5cbi8vIFx0XHRcdC8vIGNoZWNrIGlmIGhhcyBhIG1hcCBmb3IgdGhlIHN0YXRlXG4vLyBcdFx0XHQkZm9yU3RhdGVNYXAgOiBtYXAtZ2V0KCRmb3JNYXAsICRzdGF0ZU5hbWUpO1xuLy8gXHRcdFx0QGlmICRmb3JTdGF0ZU1hcCA9PSBudWxsIHtcbi8vIFx0XHRcdFx0JGZvclN0YXRlTWFwIDogKCk7XG4vLyBcdFx0XHR9XG5cbi8vIFx0XHRcdC8vIG1lcmdlIG1hcFxuLy8gXHRcdFx0JGZvclN0YXRlTWFwIDogbWFwLW1lcmdlKCRmb3JTdGF0ZU1hcCwgJGV4dGVuZCk7XG5cbi8vIFx0XHRcdC8vIHNldCB0aGUgbmV3IHN0YXRlIG1hcCBpbnRvIGZvck1hcFxuLy8gXHRcdFx0JGZvck1hcCA6IG1hcC1zZXQoJGZvck1hcCwgJHN0YXRlTmFtZSwgJGZvclN0YXRlTWFwKTtcblxuLy8gXHRcdFx0Ly8gc2V0IHRoZSBtYXAgaW4gdGhlIGdyaWRsZSBnbG9iYWwgdmFyaWFibGVcbi8vIFx0XHRcdCRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMgOiBtYXAtc2V0KCRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMsICRmLCAkZm9yTWFwKSAhZ2xvYmFsO1xuXG4vLyBcdFx0fVxuXG4vLyBcdH1cbi8vIH1cbkBtaXhpbiBncmlkbGVfZXh0ZW5kX2Jhc2VfY2xhc3MoXG5cdCRmb3IsXG5cdCRleHRlbmQsXG5cdCRzdGF0ZXNOYW1lcyA6IG51bGxcbikge1xuXHQvLyBpZiAkc3RhdGVzIGlzIGFsbFxuXHRAaWYgJHN0YXRlc05hbWVzID09IG51bGwge1xuXHRcdCRzdGF0ZXNOYW1lcyA6IGdyaWRsZV9nZXRfc3RhdGVzX25hbWVzKCk7XG5cdH1cblxuXHQvLyBhbGxvdyBtdWx0aXBsZSBcIiRmb3JcIlxuXHRAZWFjaCAkc3RhdGVOYW1lIGluICRzdGF0ZXNOYW1lcyB7XG5cblx0XHQvLyBnZXQgdGhlIG1hcCBmb3IgdGhlIHBhc3NlZCBtaXhpbiBcImNhdGVnb3J5XCJcblx0XHQkc3RhdGVNYXAgOiBtYXAtZ2V0KCRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMsICRzdGF0ZU5hbWUpO1xuXG5cdFx0Ly8gY3JlYXRlIHRoZSBtYXAgaWYgbm90IGV4aXN0XG5cdFx0QGlmICRzdGF0ZU1hcCA9PSBudWxsIHsgJHN0YXRlTWFwIDogKCk7IH1cblxuXHRcdC8vIGxvb3Agb24gZWFjaCBzdGF0ZXMgdG8gcmVnaXN0ZXIgYW4gZXh0ZW5kIG1hcFxuXHRcdEBlYWNoICRmIGluICRmb3Ige1xuXG5cdFx0XHQvLyBjaGVjayBpZiBoYXMgYSBtYXAgZm9yIHRoZSBzdGF0ZVxuXHRcdFx0JGZvclN0YXRlTWFwIDogbWFwLWdldCgkc3RhdGVNYXAsICRmKTtcblx0XHRcdEBpZiAkZm9yU3RhdGVNYXAgPT0gbnVsbCB7XG5cdFx0XHRcdCRmb3JTdGF0ZU1hcCA6ICgpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBtZXJnZSBtYXBcblx0XHRcdCRmb3JTdGF0ZU1hcCA6IG1hcC1tZXJnZSgkZm9yU3RhdGVNYXAsICRleHRlbmQpO1xuXG5cdFx0XHQvLyBzZXQgdGhlIG5ldyBzdGF0ZSBtYXAgaW50byBmb3JNYXBcblx0XHRcdCRzdGF0ZU1hcCA6IG1hcC1zZXQoJHN0YXRlTWFwLCAkZiwgJGZvclN0YXRlTWFwKTtcblxuXHRcdFx0Ly8gc2V0IHRoZSBtYXAgaW4gdGhlIGdyaWRsZSBnbG9iYWwgdmFyaWFibGVcblx0XHRcdCRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMgOiBtYXAtc2V0KCRfZ3JpZGxlX2V4dGVuZF9iYXNlX2NsYXNzZXMsICRzdGF0ZU5hbWUsICRzdGF0ZU1hcCkgIWdsb2JhbDtcblx0XHR9XG5cdH1cbn1cblxuLy9cbi8vIEFwcGx5IGNzcyBmb3Jcbi8vXG4vLyBtYXAgZm9ybWF0IDpcbi8vIChcbi8vIFx0KFxuLy8gXHRcdGdyaWQgOiAoXG4vLyBcdFx0XHRtb2JpbGUgOiAoXG4vLyBcdFx0XHRcdHBhZGRpbmcgOiAwLFxuLy8gXHRcdFx0XHRtYXJnaW4gOiAwXG4vLyBcdFx0XHQpLFxuLy8gXHRcdFx0dGFibGV0IDogKFxuLy8gXHRcdFx0XHRwYWRkaW5nIDogMFxuLy8gXHRcdFx0KVxuLy8gXHRcdClcbi8vIFx0KSxcbi8vIFx0KFxuLy8gXHRcdGV0Yy4uLlxuLy8gXHQpXG4vLyApXG4vLyBAbWl4aW4gZ3JpZGxlX2FwcGx5X2Nzc19mb3IoXG4vLyBcdCRmb3IsXG4vLyBcdCRleHRlbmQsXG4vLyBcdCRzdGF0ZXNOYW1lcyA6IG51bGxcbi8vICkge1xuXG4vLyBcdC8vIGlmIHN0YXRlc05hbWVzIGlzIG51bGwsIG1lYW4gdGhhdCBpdCdzIGFsbCB0aGUgc3RhdGVzXG4vLyBcdEBpZiAkc3RhdGVzTmFtZXMgPT0gbnVsbCB7XG4vLyBcdFx0JHN0YXRlc05hbWVzIDogZ3JpZGxlX2dldF9zdGF0ZXNfbmFtZXMoKTtcbi8vIFx0fVxuXG4vLyBcdC8vIGFsbG93IG11bHRpcGxlIFwiJGZvclwiXG4vLyBcdEBlYWNoICRmIGluICRmb3Ige1xuXG4vLyBcdFx0Ly8gZ2V0IHRoZSBtYXAgZm9yIHRoZSBwYXNzZWQgbWl4aW4gXCJjYXRlZ29yeVwiXG4vLyBcdFx0JHN0YXRlTWFwIDogKCk7XG5cbi8vIFx0XHQvLyBsb29wIG9uIGVhY2ggc3RhdGVzIHRvIHJlZ2lzdGVyIGFuIGV4dGVuZCBtYXBcbi8vIFx0XHRAZWFjaCAkc3RhdGVOYW1lIGluICRzdGF0ZXNOYW1lcyB7XG4vLyBcdFx0XHQvLyBhZGQgdGhlIGNzc1xuLy8gXHRcdFx0JHN0YXRlTWFwIDogbWFwLXNldCgkc3RhdGVNYXAsICRzdGF0ZU5hbWUsICRleHRlbmQpO1xuLy8gXHRcdH1cblxuLy8gXHRcdC8vIHNldCBpbiBtYXBcbi8vIFx0XHQkZm9yTWFwIDogbWFwLXNldCgoKSwgJGYsICRzdGF0ZU1hcCk7XG5cbi8vIFx0XHQvLyBzZXQgdGhlIG1hcCBpbiB0aGUgZ3JpZGxlIGdsb2JhbCB2YXJpYWJsZVxuLy8gXHRcdCRfZ3JpZGxlX2FwcGx5X2Nzc19mb3IgOiBhcHBlbmQoJF9ncmlkbGVfYXBwbHlfY3NzX2ZvciwgJGZvck1hcCkgIWdsb2JhbDtcblxuLy8gXHR9XG4vLyB9XG5AbWl4aW4gZ3JpZGxlX2FwcGx5X2Nzc19mb3IoXG5cdCRmb3IsXG5cdCRleHRlbmQsXG5cdCRzdGF0ZXNOYW1lcyA6IG51bGxcbikge1xuXG5cdC8vIGlmIHN0YXRlc05hbWVzIGlzIG51bGwsIG1lYW4gdGhhdCBpdCdzIGFsbCB0aGUgc3RhdGVzXG5cdEBpZiAkc3RhdGVzTmFtZXMgPT0gbnVsbCB7XG5cdFx0JHN0YXRlc05hbWVzIDogZ3JpZGxlX2dldF9zdGF0ZXNfbmFtZXMoKTtcblx0fVxuXG5cdC8vIGFsbG93IG11bHRpcGxlIFwiJGZvclwiXG5cdEBlYWNoICRzdGF0ZU5hbWUgaW4gJHN0YXRlc05hbWVzIHtcblxuXHRcdC8vIGdldCB0aGUgbWFwIGZvciB0aGUgcGFzc2VkIG1peGluIFwiY2F0ZWdvcnlcIlxuXHRcdCRmb3JNYXAgOiAoKTtcblxuXHRcdC8vIGxvb3Agb24gZWFjaCBzdGF0ZXMgdG8gcmVnaXN0ZXIgYW4gZXh0ZW5kIG1hcFxuXHRcdEBlYWNoICRmIGluICRmb3Ige1xuXHRcdFx0Ly8gYWRkIHRoZSBjc3Ncblx0XHRcdCRmb3JNYXAgOiBtYXAtc2V0KCRmb3JNYXAsICRmLCAkZXh0ZW5kKTtcblx0XHRcdC8vICRzdGF0ZU1hcCA6IG1hcC1zZXQoJHN0YXRlTWFwLCAkc3RhdGVOYW1lLCAkZXh0ZW5kKTtcblx0XHR9XG5cblx0XHQvLyBzZXQgaW4gbWFwXG5cdFx0JHN0YXRlc01hcCA6IG1hcC1zZXQoKCksICRzdGF0ZU5hbWUsICRmb3JNYXApO1xuXG5cdFx0Ly8gc2V0IHRoZSBtYXAgaW4gdGhlIGdyaWRsZSBnbG9iYWwgdmFyaWFibGVcblx0XHQkX2dyaWRsZV9hcHBseV9jc3NfZm9yIDogYXBwZW5kKCRfZ3JpZGxlX2FwcGx5X2Nzc19mb3IsICRzdGF0ZXNNYXApICFnbG9iYWw7XG5cdH1cbn1cblxuXG4vL1xuLy8gUmVnaXN0ZXIgZGVmYXVsdCBzdGF0ZXNcbi8vXG5AbWl4aW4gZ3JpZGxlX3JlZ2lzdGVyX2RlZmF1bHRfc3RhdGVzKCkge1xuXHRAaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfc3RhdGUobW9iaWxlLCAoXG5cdFx0bWF4LXdpZHRoIDogNDgwcHhcblx0KSk7XG5cdEBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZSh0YWJsZXQsIChcblx0XHRtaW4td2lkdGggOiA0ODFweCxcblx0XHRtYXgtd2lkdGggOiAxMDI0cHhcblx0KSk7XG59XG5cblxuLy9cbi8vIFJlZ2lzdGVyIGRlZmF1bHQgbW9iaWxlIGZpcnN0IHN0YXRlcyA6XG4vL1xuQG1peGluIGdyaWRsZV9yZWdpc3Rlcl9kZWZhdWx0X21vYmlsZV9maXJzdF9zdGF0ZXMoKSB7XG5cdEBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZSh4cywgKFxuXHRcdG1heC13aWR0aCA6IDc1MHB4XG5cdCkpO1xuXHRAaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfc3RhdGUoc20sIChcblx0XHRtaW4td2lkdGggOiA3NTBweFxuXHQpKTtcblx0QGluY2x1ZGUgZ3JpZGxlX3JlZ2lzdGVyX3N0YXRlKG1kLCAoXG5cdFx0bWluLXdpZHRoIDogOTcwcHhcblx0KSk7XG5cdEBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZShsZywgKFxuXHRcdG1pbi13aWR0aCA6IDExNzBweFxuXHQpKTtcbn0iLCIvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IE1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vXG4vLyBJbml0XG4vLyBjYWxsZWQgYnkgX2dyaWRsZV9jYWxsIG1peGluIG11bHRpcGxlIHRpbWVzXG4vL1xuQG1peGluIGdyaWRsZV9pbml0KCkge1xuXHRAaWYgJF9ncmlkbGVfaW5pdGVkID09IGZhbHNlIHtcblx0XHQkX2dyaWRsZV9pbml0ZWQgOiB0cnVlICFnbG9iYWw7XG5cdFx0QGVhY2ggJHN0YXRlTmFtZSwgJHN0YXRlIGluICRfZ3JpZGxlX3N0YXRlcyB7XG5cdFx0XHQkY2xhc3NlcyA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNsYXNzZXMsICRzdGF0ZSk7XG5cdFx0XHRAaWYgJGNsYXNzZXMge1xuXHRcdFx0XHRAYXQtcm9vdCAod2l0aG91dDphbGwpIHtcblx0XHRcdFx0XHQkcSA6IGdyaWRsZV9nZXRfbWVkaWFfcXVlcnkoJHN0YXRlKTtcblx0XHRcdFx0XHRAaWYgJHEge1xuXHRcdFx0XHRcdFx0QG1lZGlhICN7JHF9IHtcblx0XHRcdFx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9pbml0X2NvbW1vbl9zaWxlbnRfY2xhc3Nlcygkc3RhdGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9pbml0X2NvbW1vbl9zaWxlbnRfY2xhc3Nlcygkc3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBJbml0IHNpbGVudCBjbGFzc2VzXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3NpbGVudF9jbGFzc19uYW1lKFxuXHQkZm9yLFxuXHQkc3RhdGVOYW1lIDogZGVmYXVsdFxuKSB7XG5cdEBpZiBtaXhpbi1leGlzdHMoJ19ncmlkbGVfY29tbW9uXyN7JGZvcn0nKSB7XG5cdFx0JSN7JHN0YXRlTmFtZX0tI3skZm9yfSB7XG5cdFx0XHQvLyBpbmplY3QgY29udGVudFxuXHRcdFx0QGNvbnRlbnQ7XG5cdFx0fVxuXHRcdEBhdC1yb290ICh3aXRob3V0OiBtZWRpYSkge1xuXHRcdFx0JWF0LXJvb3QtI3skc3RhdGVOYW1lfS0jeyRmb3J9IHtcblx0XHRcdFx0Ly8gaW5qZWN0IGNvbnRlbnRcblx0XHRcdFx0QGNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5AbWl4aW4gX2dyaWRsZV9pbml0X2NvbW1vbl9zaWxlbnRfY2xhc3Nlcyhcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG5cdC8vIGdldCBzdGF0ZSBuYW1lXG5cdCRzdGF0ZU5hbWUgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLCAkc3RhdGUpO1xuXG5cdC8vIGRlZmluZSBwYWNrYWdlcyB0byBpbml0XG5cdC8vIHRoZSBvcmRlciBjYW4gbWF0dGVyIGhlcmVcblx0JHBhY2thZ2VzIDogKFxuXHRcdGNvbnRhaW5lcixcblx0XHRncmlkLW9yZGVyLFxuXHRcdHJvdyxcblx0XHRyb3ctZnVsbCxcblx0XHRjb2wsXG5cdFx0Z3JpZCxcblx0XHRncmlkLXRhYmxlLFxuXHRcdGdyaWQtYWRhcHQsXG5cdFx0Z3JpZC1ncm93LFxuXHRcdHB1c2gsXG5cdFx0cHVsbCxcblx0XHRwcmVmaXgsXG5cdFx0c3VmZml4LFxuXHRcdG5vd3JhcCxcblx0XHR3cmFwLFxuXHRcdGNsZWFyLWVhY2gsXG5cdFx0Z3JpZC1jZW50ZXJlZCxcblx0XHRyb3ctYWxpZ24sXG5cdFx0aGlkZSxcblx0XHRub3QtdmlzaWJsZSxcblx0XHRzaG93LFxuXHRcdHNob3ctaW5saW5lLFxuXHRcdHZpc2libGUsXG5cdFx0ZmxvYXQsXG5cdFx0Y2xlYXIsXG5cdFx0bm8tZ3V0dGVyLFxuXHRcdGd1dHRlcixcblx0XHRyb3ctZGVidWdcblx0KTtcblxuXHQvLyBsb29wIG9uIGVhY2ggcGFja2FnZXMgdG8gaW5pdCB0aGVpciBjb21tb24gc2lsaWVudCBjbGFzc2VzXG5cdEBlYWNoICRwYWNrYWdlIGluICRwYWNrYWdlcyB7XG5cdFx0Ly8gaW5jbHVkZSBjb21tb25cblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9zaWxlbnRfY2xhc3NfbmFtZSgkcGFja2FnZSwgJHN0YXRlTmFtZSkge1xuXHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9pbmNsdWRlX2NvbW1vbigkcGFja2FnZSwgJHN0YXRlTmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbkBtaXhpbiBfZ3JpZGxlX2luY2x1ZGVfY29tbW9uKFxuXHQkcGFja2FnZSxcblx0JHN0YXRlIDogY3VycmVudFxuKSB7XG5cblx0Ly8gZ2V0IHN0YXRlIG5hbWVcblx0JHN0YXRlIDogZ3JpZGxlX2dldF9zdGF0ZSgkc3RhdGUpO1xuXHRcblx0Ly8gY29udGFpbmVyXG5cdEBpZiAkcGFja2FnZSA9PSBjb250YWluZXIge1xuXG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fY29udGFpbmVyKCRzdGF0ZSk7XG5cdH1cblxuXHQvLyBvcmRlclxuXHRAaWYgJHBhY2thZ2UgPT0gZ3JpZC1vcmRlciB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fZ3JpZF9vcmRlcigkc3RhdGUpO1xuXHR9XG5cblx0Ly8gcm93XG5cdEBpZiAkcGFja2FnZSA9PSByb3cge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX3Jvdygkc3RhdGUpO1xuXHR9XG5cblx0Ly8gcm93LWZ1bGxcblx0QGlmICRwYWNrYWdlID09IHJvdy1mdWxsIHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9yb3dfZnVsbCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gY29sXG5cdEBpZiAkcGFja2FnZSA9PSBjb2wge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX2NvbCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZ3JpZFxuXHRAaWYgJHBhY2thZ2UgPT0gZ3JpZCB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fZ3JpZCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZ3JpZC10YWJsZVxuXHRAaWYgJHBhY2thZ2UgPT0gZ3JpZC10YWJsZSB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fZ3JpZF90YWJsZSgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZ3JpZC1hZGFwdFxuXHRAaWYgJHBhY2thZ2UgPT0gZ3JpZC1hZGFwdCB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fZ3JpZF9hZGFwdCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZ3JpZC1ncm93XG5cdEBpZiAkcGFja2FnZSA9PSBncmlkLWdyb3cge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX2dyaWRfZ3Jvdygkc3RhdGUpO1xuXHR9XG5cblx0Ly8gcHVzaFxuXHRAaWYgJHBhY2thZ2UgPT0gcHVzaHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9wdXNoKCRzdGF0ZSk7XG5cdH1cblxuXHQvLyBwdWxsXG5cdEBpZiAkcGFja2FnZSA9PSBwdWxse1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX3B1bGwoJHN0YXRlKTtcblx0fVxuXG5cdC8vIHByZWZpeFxuXHRAaWYgJHBhY2thZ2UgPT0gcHJlZml4e1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX3ByZWZpeCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gc3VmZml4XG5cdEBpZiAkcGFja2FnZSA9PSBzdWZmaXgge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX3N1ZmZpeCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gbm93cmFwXG5cdEBpZiAkcGFja2FnZSA9PSBub3dyYXAge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX25vd3JhcCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gd3JhcFxuXHRAaWYgJHBhY2thZ2UgPT0gd3JhcCB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fd3JhcCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gY2xlYXItZWFjaFxuXHRAaWYgJHBhY2thZ2UgPT0gY2xlYXItZWFjaCB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fY2xlYXJfZWFjaCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gY2VudGVyZWRcblx0QGlmICRwYWNrYWdlID09IGdyaWQtY2VudGVyZWQge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX2dyaWRfY2VudGVyZWQoJHN0YXRlKTtcblx0fVxuXG5cdC8vIHJvdy1hbGlnblxuXHRAaWYgJHBhY2thZ2UgPT0gcm93LWFsaWduIHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9yb3dfYWxpZ24oJHN0YXRlKTtcblx0fVxuXG5cdC8vIGhpZGVcblx0QGlmICRwYWNrYWdlID09IGhpZGUge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX2hpZGUoJHN0YXRlKTtcblx0fVxuXG5cdC8vIG5vdC12aXNpYmxlXG5cdEBpZiAkcGFja2FnZSA9PSBub3QtdmlzaWJsZSB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fbm90X3Zpc2libGUoJHN0YXRlKTtcblx0fVxuXG5cdC8vIHNob3dcblx0QGlmICRwYWNrYWdlID09IHNob3d7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fc2hvdygkc3RhdGUpO1xuXHR9XG5cblx0Ly8gc2hvdy1pbmxpbmVcblx0QGlmICRwYWNrYWdlID09IHNob3ctaW5saW5lIHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9zaG93X2lubGluZSgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gdmlzaWJsZVxuXHRAaWYgJHBhY2thZ2UgPT0gdmlzaWJsZSB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9jb21tb25fdmlzaWJsZSgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZmxvYXRcblx0QGlmICRwYWNrYWdlID09IGZsb2F0IHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9mbG9hdCgkc3RhdGUpO1xuXHR9XG5cblx0Ly8gY2xlYXJcblx0QGlmICRwYWNrYWdlID09IGNsZWFyIHtcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX2NvbW1vbl9jbGVhcigkc3RhdGUpO1xuXHR9XG5cblx0Ly8gbm8tZ3V0dGVyXG5cdEBpZiAkcGFja2FnZSA9PSBuby1ndXR0ZXIge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX25vX2d1dHRlcigkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZ3V0dGVyXG5cdEBpZiAkcGFja2FnZSA9PSBndXR0ZXIge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX2d1dHRlcigkc3RhdGUpO1xuXHR9XG5cblx0Ly8gcm93IGRlYnVnXG5cdEBpZiAkcGFja2FnZSA9PSByb3ctZGVidWcge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY29tbW9uX3Jvd19kZWJ1Zygkc3RhdGUpO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIGNvbW1vbiBjbGFzcyBieSB0aGUgcmVnaXN0ZXJlZCBjc3Ncblx0QGluY2x1ZGUgX2dyaWRsZV9leHRlbmRfY29tbW9uX2NsYXNzKCRwYWNrYWdlLCAkc3RhdGUpO1xufVxuXG5cbi8vXG4vLyBXcmFwIGdyaWRsZSBtaXhpbiBjb250ZW50IHRvIGluaXQgaWYgbmVlZGVkIGFuZCB0aGVuIGlmIG5lZWRlZFxuLy9cdFx0XHRcbkBtaXhpbiBfZ3JpZGxlX2NhbGwoXG5cdCRmb3IgOiBudWxsXG4pIHtcblx0Ly8gaW5pdCBpZiBuZWVkZWRcblx0QGluY2x1ZGUgZ3JpZGxlX2luaXQoKTtcblxuXHQvLyBwdXQgY29udGVudFxuXHRAY29udGVudDtcblxuXHQvLyBleHRlbmQgYW5kIGFwcGx5IGNzcyBmb3IgZGlmZmVyZW50IHN0YXRlc1xuXHRAaWYgJGZvciB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9leHRlbmQoJGZvcik7XG5cdFx0QGlmIF9ncmlkbGVfaXNfaW5fZ2VuZXJhdGVfcGhhc2UoKSA9PSBmYWxzZSB7XG5cdFx0XHRAaW5jbHVkZSBfZ3JpZGxlX2FwcGx5X2Nzc19mb3IoJGZvcik7XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIEV4dGVuZFxuLy8gQHN0YXRlQ29udGV4dFxuLy8gQGNhbGxlZEJ5IFx0XHRfZ3JpZGxlX2NhbGxcbi8vXG5AbWl4aW4gX2dyaWRsZV9leHRlbmQoXG5cdCRwYWNrYWdlXG4pIHtcblx0Ly8gY2hlY2sgaWYgd2UgbmVlZCB0aGUgc3RhdGUgY2xhc3Nlc1xuXHQkc3RhdGVzLWNsYXNzZXMgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihzdGF0ZXMtY2xhc3Nlcyk7XG5cdCRzdGF0ZU5hbWUgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lKTtcblxuXHQvLyBpZiBpcyBhbiBleGlzdGluZyBncmlkbGUgc3RhdGVcblx0QGlmIGdyaWRsZV9oYXNfc3RhdGUoJHN0YXRlTmFtZSkge1xuXHRcdC8vIGV4dGVuZCB0aGUgXCJhdC1yb290XCIgdmVyc2lvbiBmb3IgdGhlIC5zdGF0ZS17c3RhdGVOYW1lfSBjbGFzc2VzXG5cdFx0QGlmICRzdGF0ZXMtY2xhc3NlcyBhbmQgc3RyLWluZGV4KHVucXVvdGUoXCIjeyZ9XCIpLCB1bnF1b3RlKCcuc3RhdGUtI3skX2dyaWRsZV9jdXJyZW50X3N0YXRlTmFtZX0nKSkge1xuXHRcdFx0Ly8gQGF0LXJvb3QgKHdpdGhvdXQ6IG1lZGlhKSB7IC8vIHNlZW1zIG5vdCBuZWVkZWQgaGVyZSwgY2F1c2UgaXNzdWVzIHdpdGggbGlic2Fzc1xuXHRcdFx0XHQvLyBAZGVidWcoXCIlYXQtcm9vdC0jeyRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lfS0jeyRwYWNrYWdlfVwiKTtcblx0XHRcdFx0QGV4dGVuZCAlYXQtcm9vdC0jeyRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lfS0jeyRwYWNrYWdlfSAhb3B0aW9uYWw7XG5cdFx0XHQvLyB9XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQvLyBleHRlbmQgdXNpbmcgdGhlIGN1cnJlbnQgc3RhdGUgbmFtZSBzZXQgaW4gZWFjaCBncmlkbGVfc3RhdGUgY2FsbFxuXHRcdFx0Ly8gQGRlYnVnKFwiJSN7JF9ncmlkbGVfY3VycmVudF9zdGF0ZU5hbWV9LSN7JHBhY2thZ2V9XCIpO1xuXHRcdFx0QGV4dGVuZCAlI3skX2dyaWRsZV9jdXJyZW50X3N0YXRlTmFtZX0tI3skcGFja2FnZX0gIW9wdGlvbmFsO1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cdFx0Ly8gaXQncyBub3QgYW4gZXhpc3Rpbmcgc3RhdGUgc28gd2UgY2Fubm90IGV4dGVuZC5cblx0XHQvLyB3ZSBuZWVkIHRvIGluY2x1ZGUgaW5zdGVhZFxuXHRcdEBpbmNsdWRlIF9ncmlkbGVfaW5jbHVkZV9jb21tb24oJHBhY2thZ2UsICRzdGF0ZU5hbWUpO1xuXHR9XG59XG5cblxuLy9cbi8vIEFwcGx5IHRoZSByZWdpc3RlcmVkIGNzcyBmb3IgYSBjZXJ0YWluIHR5cGUgKGdyaWQsIHB1c2gsIGV0Yy4uLilcbi8vIGluIGVhY2ggc3RhdGVzXG4vL1xuJF9ncmlkbGVfYXBwbGllZF9mb3IgOiAoKTtcbkBtaXhpbiBfZ3JpZGxlX2FwcGx5X2Nzc19mb3IoXG5cdCRfZm9yXG4pIHtcblx0JHNlbGVjdG9yIDogXCIjeyZ9LSN7JF9mb3J9XCI7IC8vIGdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgdGhhdCB3aWxsIGJlIHN0YWNrZWQgaW4gYSBtYXAgdG8gZ2VuZXJhdGUgb25seSAxIHRpbWUgXG5cdEBpZiBtYXAtZ2V0KCRfZ3JpZGxlX2FwcGxpZWRfZm9yLCAkc2VsZWN0b3IpID09IG51bGwge1xuXHRcdCRfZ3JpZGxlX2FwcGxpZWRfZm9yIDogbWFwLXNldCgkX2dyaWRsZV9hcHBsaWVkX2ZvciwgJHNlbGVjdG9yLCB0cnVlKSAhZ2xvYmFsO1xuXHRcdCRmb3JzLXBhdHRlcm5zIDogJF9ncmlkbGUtcGFja2FnZXM7XG5cdFx0QGVhY2ggJG1hcCBpbiAkX2dyaWRsZV9hcHBseV9jc3NfZm9yIHtcblx0XHRcdEBlYWNoICRzdGF0ZU5hbWUsICRmb3JzIGluICRtYXAge1xuXHRcdFx0XHQkcnVsZXMgOiBtYXAtZ2V0KCRmb3JzLCAkX2Zvcik7XG5cdFx0XHRcdEBpZiAkcnVsZXMgYW5kIG1hcC1nZXQoJGZvcnMtcGF0dGVybnMsICRfZm9yKSB7XG5cdFx0XHRcdFx0QGF0LXJvb3QgKHdpdGhvdXQgOiBtZWRpYSkge1xuXHRcdFx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9zdGF0ZSgkc3RhdGVOYW1lLCB0cnVlLCBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfdXNlX3N0YXRlKCRzdGF0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBfZ3JpZGxlX21hcF8yX2NzcygkcnVsZXMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIEdyaWRsZSBzdGF0ZVxuLy9cbi8vIEBwYXJhbSBcdHN0cmluZ3xtYXB8bGlzdCBcdCRzdGF0ZXMgXHRcdEEgbGlzdCBvZiBzdGF0ZXMsIGEgc3RhdGUgbmFtZSBvciBhIHN0YXRlIG1hcFxuLy8gQHBhcmFtIFx0Ym9vbGVhbiBcdFx0XHQkaGFzLXBhcmVudCBcdE1vc3RseSBhbHdheXMgdHJ1ZSwgbWVhbiB0aGF0IHRoZSBtaXhpbiBpcyB1c2VkIGluIGEgY3NzIHNlbGVjdG9yIGFuZCBub3QgaW4gY3NzIHJvb3QgbGV2ZWxcbi8vXG5AbWl4aW4gX2dyaWRsZV9zdGF0ZShcblx0JHN0YXRlIDogZGVmYXVsdCxcblx0JGhhcy1wYXJlbnQgOiB0cnVlLFxuXHQkdHJhY2stY3VycmVudC1zdGF0ZSA6IHRydWVcbikge1xuXG5cdC8vIHZhcmlhYmxlcyA6XG5cdCRzdGF0ZSA6IGdyaWRsZV9nZXRfc3RhdGUoJHN0YXRlKTtcblx0JHN0YXRlcy1jbGFzc2VzIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoc3RhdGVzLWNsYXNzZXMsICRzdGF0ZSk7XG5cdCRzdGF0ZU5hbWUgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLCAkc3RhdGUpO1xuXG5cdC8vIG1hbmFnZSBwcmV2aW91cyBzdGF0ZVxuXHQkcHJldmlvdXNfc3RhdGUgOiBudWxsO1xuXHQkcHJldmlvdXNfc3RhdGVOYW1lIDogbnVsbDtcblxuXHQvLyBjaGVjayBpZiBuZWVkIHRvIHRhY2sgdGhlIGN1cnJlbnQgc3RhdGVcblx0QGlmICR0cmFjay1jdXJyZW50LXN0YXRlIHtcblx0XHRAaWYgJF9ncmlkbGVfY3VycmVudF9zdGF0ZSB7XG5cdFx0XHQkcHJldmlvdXNfc3RhdGUgOiAkX2dyaWRsZV9jdXJyZW50X3N0YXRlO1xuXHRcdFx0JHByZXZpb3VzX3N0YXRlTmFtZSA6ICRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lO1xuXHRcdH1cblx0XHQvLyBpZiB3ZSBoYXZlIGEgcHJldmlvdXMgc3RhdGUgdGhhdCBpcyBub3QgdGhlIGRlZmF1bHQgb25lLCB3ZVxuXHRcdC8vIG1ha2UgdGhlIGluaGVyaXRlbmNlIHByb2Nlc3MuXG5cdFx0Ly8gaWYgYm90aCBzdGF0ZXMgYXJlIHJlZ2lzdGVyZWQgb25lcyA6IGp1c3QgdGFrZSB0aGUgd2FudGVkIHN0YXRlXG5cdFx0Ly8gaWYgb25seSBwcmV2aW91c19zdGF0ZSBpcyBhIHJlZ2lzdGVyZWQgb25lIDogZXh0ZW5kIHByZXZpb3VzX3N0YXRlIHdpdGggdGhlIHdhbnRlZCBvbmVcblx0XHQvLyBpZiBub25lIG9mIHRoZW0gYXJlIHJlc2l0ZXJlZCA6IGV4dGVuZCB0aGUgd2FudGVkIHdpdGggdGhlIHByZXZpb3VzIG9uZVxuXHRcdEBpZiAkcHJldmlvdXNfc3RhdGUge1xuXHRcdFx0JF9ncmlkbGVfY3VycmVudF9zdGF0ZSA6IF9ncmlkbGVfaW5oZXJpdF9zdGF0ZSgkc3RhdGUsICRwcmV2aW91c19zdGF0ZSkgIWdsb2JhbDtcblx0XHR9IEBlbHNlIHtcblx0XHRcdCRfZ3JpZGxlX2N1cnJlbnRfc3RhdGUgOiAkc3RhdGUgIWdsb2JhbDtcdFxuXHRcdH1cblx0XHQkX2dyaWRsZV9jdXJyZW50X3N0YXRlTmFtZSA6ICRzdGF0ZU5hbWUgIWdsb2JhbDtcblx0fVxuXG5cdC8vIGNoZWNrIGlmIGlzIGEgc3RhdGUgOlxuXHRAaWYgKCRzdGF0ZXMtY2xhc3Nlcylcblx0XHRhbmQgJHN0YXRlTmFtZSB7XG5cdFx0Ly8gaHRtbCBjbGFzcyA6XG5cdFx0QGF0LXJvb3QgKHdpdGhvdXQ6IG1lZGlhKSB7XG5cdFx0XHRAaWYgJGhhcy1wYXJlbnQge1xuXHRcdFx0XHQuc3RhdGUtI3skc3RhdGVOYW1lfSAmIHsgXG5cdFx0XHRcdFx0QGNvbnRlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQuc3RhdGUtI3skc3RhdGVOYW1lfSB7XG5cdFx0XHRcdFx0QGNvbnRlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBnZXQgdGhlIG1lZGlhIHF1ZXJ5IDpcblx0JHEgOiBncmlkbGVfZ2V0X21lZGlhX3F1ZXJ5KCRzdGF0ZSk7XG5cblx0Ly8gbWFrZSB0aGUgbWVkaWEgcXVlcnkgaWYgYSBxdWVyeSBleGlzdCA6XG5cdEBpZiAkcSB7XG5cdFx0QG1lZGlhICN7JHF9IHtcblx0XHRcdEBjb250ZW50O1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cblxuXHQvLyByZXNldCBjdXJyZW50IHN0YXRlIHRvIGRlZmF1bHRcblx0QGlmICR0cmFjay1jdXJyZW50LXN0YXRlIGFuZCAkcHJldmlvdXNfc3RhdGUgYW5kICRwcmV2aW91c19zdGF0ZU5hbWUge1xuXHRcdCRfZ3JpZGxlX2N1cnJlbnRfc3RhdGUgOiAkcHJldmlvdXNfc3RhdGUgIWdsb2JhbDtcblx0XHQkX2dyaWRsZV9jdXJyZW50X3N0YXRlTmFtZSA6ICRwcmV2aW91c19zdGF0ZU5hbWUgIWdsb2JhbDtcblx0fVxufVxuXG5cbi8vXG4vLyBUcmFuc2Zvcm0gbWFwIHRvIGNzc1xuLy9cbkBtaXhpbiBfZ3JpZGxlX21hcF8yX2Nzcyhcblx0JG1hcFxuKSB7XG5cdEBlYWNoICRrZXksICR2YWx1ZSBpbiAkbWFwIHtcblx0XHRAaWYgdHlwZS1vZigkdmFsdWUpID09IG1hcCB7XG5cdFx0XHQmI3ska2V5fSB7XG5cdFx0XHRcdEBlYWNoICRrLCAkdiBpbiAkdmFsdWUge1xuXHRcdFx0XHRcdEBpZiAkayAhPSBudWxsIGFuZCBzdHItaW5kZXgoJGssIGdyaWRsZSkgYW5kIG1peGluLWV4aXN0cygkaykge1xuXHRcdFx0XHRcdFx0JHNldC1uYW1lIDogc3RyLXJlcGxhY2UoJGssIFwiZ3JpZGxlX1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdCRzZXQtbmFtZSA6IHN0ci1yZXBsYWNlKCRzZXQtbmFtZSwgXCJfXCIsIFwiLVwiLCAxKTtcblx0XHRcdFx0XHRcdEBpbmNsdWRlIF9ncmlkbGVfc2V0KChcblx0XHRcdFx0XHRcdFx0JHNldC1uYW1lIDogJHZcblx0XHRcdFx0XHRcdCkpO1xuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0I3ska306I3skdn07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHRAaWYgJGtleSAhPSBudWxsIGFuZCBzdHItaW5kZXgoJGtleSwgZ3JpZGxlKSBhbmQgbWl4aW4tZXhpc3RzKCRrZXkpIHtcblx0XHRcdFx0JHNldC1uYW1lIDogc3RyLXJlcGxhY2UoXCIjeyRrZXl9XCIsIFwiZ3JpZGxlX1wiLCBcIlwiKTtcblx0XHRcdFx0JHNldC1uYW1lIDogc3RyLXJlcGxhY2UoXCIjeyRzZXQtbmFtZX1cIiwgXCJfXCIsIFwiLVwiLCAxKTtcblx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9zZXQoKFxuXHRcdFx0XHRcdCRzZXQtbmFtZSA6ICR2YWx1ZVxuXHRcdFx0XHQpKTtcblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQjeyRrZXl9OiN7JHZhbHVlfTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLy9cbi8vIEV4dGVuZCBjb21tb24gY2xhc3Ncbi8vXG5AbWl4aW4gX2dyaWRsZV9leHRlbmRfY29tbW9uX2NsYXNzKFxuXHQkd2hhdCxcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG5cdC8vIGV4dGVuZFxuXHQkc3RhdGVOYW1lIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIobmFtZSwgJHN0YXRlKTtcblx0JGV4dGVuZCA6IGdyaWRsZV9nZXRfZXh0ZW5kX2NsYXNzX21hcCgkd2hhdCwgJHN0YXRlTmFtZSk7XG5cdEBpZiAkZXh0ZW5kICE9IG51bGwge1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfbWFwXzJfY3NzKCRleHRlbmQpO1xuXHR9XG59IiwiLy9cbi8vIExheW91dCBoZWxwZXJcbi8vXG5AbWl4aW4gZ3JpZGxlX2xheW91dChcblx0JGxheW91dCxcblx0JGNvbnRleHQgOiBudWxsXG4pIHtcblx0QGluY2x1ZGUgZ3JpZGxlX3N0YXRlKCRjb250ZXh0KSB7XG5cdFx0QGluY2x1ZGUgZ3JpZGxlX3JvdygpO1xuXHRcdEBlYWNoICRzZWwsICRsIGluICRsYXlvdXQge1xuXHRcdFx0PiAjeyRzZWx9IHtcblx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlKCRsKTtcdFxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vL1xuLy8gR3JpZGxlIHN0YXRlXG4vL1xuLy8gQHBhcmFtIFx0c3RyaW5nfG1hcHxsaXN0IFx0JHN0YXRlcyBcdFx0QSBsaXN0IG9mIHN0YXRlcywgYSBzdGF0ZSBuYW1lIG9yIGEgc3RhdGUgbWFwXG4vLyBAcGFyYW0gXHRib29sZWFuIFx0XHRcdCRoYXMtcGFyZW50IFx0TW9zdGx5IGFsd2F5cyB0cnVlLCBtZWFuIHRoYXQgdGhlIG1peGluIGlzIHVzZWQgaW4gYSBjc3Mgc2VsZWN0b3IgYW5kIG5vdCBpbiBjc3Mgcm9vdCBsZXZlbFxuLy9cbkBtaXhpbiBncmlkbGVfc3RhdGUoXG5cdCRzdGF0ZXMsXG5cdCRoYXMtcGFyZW50IDogdHJ1ZVxuKSB7XG5cblx0Ly8gY2hlY2sgaWYgaXMgYSBtaW4tbWF4IHdpdGRoIHF1ZXJ5IChjb21wYXRpYmlsaXR5IGxheWVyKVxuXHRAaWYgdHlwZS1vZigkc3RhdGVzKSA9PSBudW1iZXIgYW5kIHR5cGUtb2YoJGhhcy1wYXJlbnQpID09IG51bWJlciB7XG5cblx0XHQvLyBnZXQgYSBuZXcgc3RhdGUgZnJvbSBzZXR0aW5ncyBwYXNzZWRcblx0XHQkc3RhdGUgOiBncmlkbGVfZ2V0X3N0YXRlKChcblx0XHRcdG1pbi13aWR0aCA6ICRzdGF0ZXMsXG5cdFx0XHRtYXgtd2lkdGggOiAkaGFzLXBhcmVudFxuXHRcdCkpO1xuXG5cdFx0Ly8gbWFrZSBhIHF1ZXJ5XG5cdFx0QGluY2x1ZGUgZ3JpZGxlX3N0YXRlKCRzdGF0ZSkge1xuXHRcdFx0QGNvbnRlbnQ7XG5cdFx0fVxuXG5cdH0gQGVsc2VpZiB0eXBlLW9mKCRzdGF0ZXMpID09IGxpc3Rcblx0XHRvciB0eXBlLW9mKCRzdGF0ZXMpID09IHN0cmluZyB7XG5cblx0XHQvLyBsb29wIG9uIGVhY2ggc3RhdGVzIDpcblx0XHRAZWFjaCAkc3RhdGUgaW4gJHN0YXRlc1xuXHRcdHtcblx0XHRcdC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBzdGF0ZSBvYmplY3Rcblx0XHRcdCRzdGF0ZSA6IGdyaWRsZV9nZXRfc3RhdGUoJHN0YXRlKTtcblxuXHRcdFx0Ly8gbWFrZSBncmlkbGUgc3RhdGVcblx0XHRcdEBpbmNsdWRlIF9ncmlkbGVfc3RhdGUoJHN0YXRlLCAkaGFzLXBhcmVudCwgdHJ1ZSkge1xuXHRcdFx0XHRAY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0fSBAZWxzZWlmIHR5cGUtb2YoJHN0YXRlcykgPT0gbWFwIHtcblxuXHRcdC8vIGdldCBhIHN0YXRlIGZyb20gdGhlIHBhc3NlZCBvbmVcblx0XHQkc3RhdGUgOiBncmlkbGVfZ2V0X3N0YXRlKCRzdGF0ZXMpO1xuXG5cdFx0Ly8gbWFrZSBncmlkbGUgc3RhdGVcblx0XHRAaW5jbHVkZSBfZ3JpZGxlX3N0YXRlKCRzdGF0ZSwgJGhhcy1wYXJlbnQsIHRydWUpIHtcblx0XHRcdEBjb250ZW50O1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuXG4vL1xuLy8gRWxlbWVudCBxdWVyaWVzXG4vL1xuQG1peGluIGdyaWRsZV9lcShcblx0JHZhcixcblx0JGhlaWdodCA6IGZhbHNlXG4pIHtcblx0JG9wIDogXCJtaW4td2lkdGhcIjtcblx0QGlmICRoZWlnaHQge1xuXHRcdEBpZiAkdmFyIDwgMCB7XG5cdFx0XHQkb3AgOiBcIm1heC1oZWlnaHRcIjtcblx0XHRcdCR2YXIgOiAkdmFyICogLTE7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQkb3AgOiBcIm1pbi1oZWlnaHRcIjtcblx0XHR9XG5cdH0gQGVsc2Uge1xuXHRcdEBpZiAkdmFyIDwgMCB7XG5cdFx0XHQkb3AgOiBcIm1heC13aWR0aFwiO1xuXHRcdFx0JHZhciA6ICR2YXIgKiAtMTtcblx0XHR9XG5cdH1cblx0XG5cdCZbI3skb3B9fj1cIiN7JHZhcn1cIl0ge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cblxuLy9cbi8vIEdyaWRsZSB1c2Ugc3RhdGVcbi8vIFRoaXMgbWl4aW4gd2lsbCBvbmx5IHNldCB0aGUgY3VycmVudCBzdGF0ZSB0byB1c2UgYW5kIE5PVCBwcmludCBvdXQgYW55IG1lZGlhIHF1ZXJ5XG4vL1xuQG1peGluIGdyaWRsZV91c2Vfc3RhdGUoXG5cdCRzdGF0ZVxuKSB7XG5cdC8vIGdldCB0aGUgc3RhdGVcblx0JHN0YXRlIDogZ3JpZGxlX2dldF9zdGF0ZSgkc3RhdGUpO1xuXHQkc3RhdGVOYW1lIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIobmFtZSwgJHN0YXRlKTtcblxuXHQvLyBzYXZlIHRoZSBjdXJyZW50IHN0YXRlXG5cdCRzYXZlZFN0YXRlIDogJF9ncmlkbGVfY3VycmVudF9zdGF0ZTtcblx0JHNhdmVkU3RhdGVOYW1lIDogJF9ncmlkbGVfY3VycmVudF9zdGF0ZU5hbWU7XG5cblx0Ly8gc2V0IHRoZSBjdXJyZW50IHN0YXRlXG5cdCRfZ3JpZGxlX2N1cnJlbnRfc3RhdGUgOiAkc3RhdGUgIWdsb2JhbDtcblx0JF9ncmlkbGVfY3VycmVudF9zdGF0ZU5hbWUgOiAkc3RhdGVOYW1lICFnbG9iYWw7XG5cblx0Ly8gZ2VuZXJhdGUgY29udGVudFxuXHRAY29udGVudDtcblxuXHQvLyByZXNldCB0aGUgc3RhdGVcblx0JF9ncmlkbGVfY3VycmVudF9zdGF0ZSA6ICRzYXZlZFN0YXRlICFnbG9iYWw7XG5cdCRfZ3JpZGxlX2N1cnJlbnRfc3RhdGVOYW1lIDogJHNhdmVkU3RhdGVOYW1lICFnbG9iYWw7XG59XG5cblxuLy9cbi8vIEdyaWRsZSBzZWxlY3RvclxuLy9cbkBtaXhpbiBncmlkbGVfc2VsZWN0b3IoXG5cdCRmb3IsXG5cdCRzdGF0ZXMgOiBudWxsXG4pIHtcblx0I3tncmlkbGVfc2VsZWN0b3IoJGZvciwgJHN0YXRlcyl9IHtcblx0XHRAY29udGVudDtcblx0fVxufVxuXG5cbi8vXG4vLyBHcmlkbGUgaGVscGVyXG4vL1xuQG1peGluIGdyaWRsZSgkbGF5b3V0KSB7XG5cdCRtYXAgOiBfZ3JpZGxlX2dldF9ncmlkbGVfc2V0X21hcF9mcm9tX2xpc3QoJGxheW91dCk7XG5cdEBpZiB0eXBlLW9mKCRtYXApID09IG1hcCB7XG5cdFx0QGluY2x1ZGUgZ3JpZGxlX3NldCgkbWFwKTtcblx0fVxufVxuXG5cbi8vXG4vLyBIZWxwZXIgdG8gYXBwbHkgbXVsdGlwbGUgY29uZmlnIGZvciBhIGNlcnRhaW4gc3RhdGUgd2l0aCBvbmUgbWl4aW5cbi8vXG5AbWl4aW4gZ3JpZGxlX3NldChcblx0JHNldHRpbmdzLFxuXHQkc3RhdGUgOiBjdXJyZW50XG4pIHtcblx0Ly8gaW5pdCBpZiBuZWVkZWRcblx0QGluY2x1ZGUgZ3JpZGxlX2luaXQoKTtcblx0Ly8gd3JhcCBpbiBtZWRpYSBxdWVyeVxuXHRAaW5jbHVkZSBncmlkbGVfc3RhdGUoJHN0YXRlKSB7XG5cdFx0QGluY2x1ZGUgX2dyaWRsZV9zZXQoJHNldHRpbmdzKTtcblx0fVxufVxuQG1peGluIF9ncmlkbGVfc2V0KFxuXHQkc2V0dGluZ3Ncbikge1xuXHQvLyBsb29wIG9uIGVhY2ggc2V0dGluZ3Ncblx0QGVhY2ggJHNldHRpbmdOYW1lLCAkc2V0dGluZ1ZhbHVlIGluICRzZXR0aW5nc1xuXHR7XG5cdFx0JHNuIDogdW5xdW90ZShcIiN7JHNldHRpbmdOYW1lfVwiKTtcblx0XHQkc3YgOiAkc2V0dGluZ1ZhbHVlO1xuXG5cdFx0Ly8gY2hlY2sgaWYgc2V0dGluZyBuYW1lIGlzIGEgc3RhdGUgOlxuXHRcdEBpZiBncmlkbGVfaGFzX3N0YXRlKCRzbikge1xuXHRcdFx0Ly8gcHJvY2VzcyB0aGUgc3RhdGVcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9zZXQoJHN2LCAkc24pO1xuXHRcdH0gQGVsc2Uge1xuXHRcdFx0QGlmICRzbiA9PSBjb250YWluZXIge1xuXHRcdFx0XHRAaWYgJHN2ID09IHRydWUge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jb250YWluZXIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gZ3JpZCB7XG5cdFx0XHRcdEBpZiBsZW5ndGgoJHN2KSA9PSAyIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3JpZChudGgoJHN2LDEpLCBudGgoJHN2LDIpKTtcblx0XHRcdFx0fSBAZWxzZSBpZiB0eXBlLW9mKCRzdikgPT0gbGlzdCBhbmQgbGVuZ3RoKCRzdikgPT0gMSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2dyaWQobnRoKCRzdiwxKSk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkKCRzdik7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IGdyaWQtZ3JvdyB7XG5cdFx0XHRcdEBpZiAkc3YgPT0gdHJ1ZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2dyaWRfZ3JvdygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBncmlkLWFkYXB0IHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3JpZF9hZGFwdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBncmlkLXRhYmxlIHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3JpZF90YWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBwdXNoIHtcblx0XHRcdFx0QGlmIGxlbmd0aCgkc3YpID09IDIge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9wdXNoKG50aCgkc3YsMSksIG50aCgkc3YsMikpO1xuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfcHVzaCgkc3YpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBwdWxsIHtcblx0XHRcdFx0QGlmIGxlbmd0aCgkc3YpID09IDIge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9wdWxsKG50aCgkc3YsMSksIG50aCgkc3YsMikpO1xuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfcHVsbCgkc3YpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBwcmVmaXgge1xuXHRcdFx0XHRAaWYgbGVuZ3RoKCRzdikgPT0gMiB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3ByZWZpeChudGgoJHN2LDEpLCBudGgoJHN2LDIpKTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3ByZWZpeCgkc3YpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBzdWZmaXgge1xuXHRcdFx0XHRAaWYgbGVuZ3RoKCRzdikgPT0gMiB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3N1ZmZpeChudGgoJHN2LDEpLCBudGgoJHN2LDIpKTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3N1ZmZpeCgkc3YpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBjbGVhci1lYWNoIHtcblx0XHRcdFx0QGlmIGxlbmd0aCgkc3YpID09IDIge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jbGVhcl9lYWNoKG50aCgkc3YsMSksIG50aCgkc3YsMikpO1xuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfY2xlYXJfZWFjaCgkc3YpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBncmlkLWNlbnRlcmVkIGFuZCAkc3YgPT0gdHJ1ZSB7XG5cdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkX2NlbnRlcmVkKCk7XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSByb3cgYW5kICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3JvdygpO1xuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gcm93LWZ1bGwgYW5kICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19mdWxsKCk7XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBjb2wgYW5kICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2NvbCgpO1xuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gcm93LWFsaWduIHtcblx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19hbGlnbigkc3YpO1xuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gbm93cmFwIHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfbm93cmFwKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV93cmFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IHdyYXAge1xuXHRcdFx0XHRAaWYgJHN2ID09IHRydWUge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV93cmFwKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub3dyYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gb3JkZXIge1xuXHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfb3JkZXIoJHN2KTtcblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IGhpZGUge1xuXHRcdFx0XHRAaWYgJHN2ID09IHRydWUge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9oaWRlKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9zaG93KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IHNob3cge1xuXHRcdFx0XHRAaWYgJHN2ID09IHRydWUge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9zaG93KCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IHZpc2libGUge1xuXHRcdFx0XHRAaWYgJHN2ID09IHRydWUge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV92aXNpYmxlKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub3RfdmlzaWJsZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IEBlbHNlIGlmICRzbiA9PSBub3QtdmlzaWJsZSB7XG5cdFx0XHRcdEBpZiAkc3YgPT0gdHJ1ZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX25vdF92aXNpYmxlKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV92aXNpYmxlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IHNob3ctaW5saW5lIHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfc2hvd19pbmxpbmUoKTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2hpZGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSBpZiAkc24gPT0gZmxvYXQge1xuXHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZmxvYXQoJHN2KTtcblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IGNsZWFyIHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfY2xlYXIoKTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2NsZWFyKCRzdik7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IG5vLWd1dHRlciB7XG5cdFx0XHRcdEBpZiAkc3YgPT0gdHJ1ZSB7XG5cdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX25vX2d1dHRlcigpO1xuXHRcdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfbm9fZ3V0dGVyKCRzdik7XG5cdFx0XHRcdH1cblx0XHRcdH0gQGVsc2UgaWYgJHNuID09IGd1dHRlciBvciAkc24gPT0gZ3V0dGVyLXdpZHRoIHtcblx0XHRcdFx0QGlmICRzdiA9PSB0cnVlIHtcblx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3V0dGVyKCk7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ndXR0ZXIoJHN2KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGRvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuXG4vL1xuLy8gUHVzaFxuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9wdXNoKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcblx0Ly8gY3NzXG5cdHBvc2l0aW9uOnJlbGF0aXZlO1xuXHQvLyBoYW5kbGUgZGlyZWN0aW9uIGF0dHJpYnV0ZVxuXHRAaWYgZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyLWF0dHJpYnV0ZSwgJHN0YXRlKSB7XG5cdFx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0XHRcdGxlZnQ6IGF1dG87XG5cdFx0fVxuXHRcdFtkaXI9XCJsdHJcIl0gJiB7XG5cdFx0XHRyaWdodDogYXV0bztcblx0XHR9XG5cdH1cbn1cbkBtaXhpbiBncmlkbGVfcHVzaChcblx0JGNvbHVtbnMsXG5cdCRjb250ZXh0IDogbnVsbFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChwdXNoKSB7XG5cdFx0Ly8gdmFyaWFibGVzIDpcblx0XHRAaWYgdHlwZS1vZigkY29udGV4dCkgIT0gbnVtYmVyIHtcblx0XHRcdCRjb250ZXh0IDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoY29udGV4dCk7XG5cdFx0fVxuXHRcdCRkaXJlY3Rpb24gOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihkaXJlY3Rpb24pO1xuXHRcdCRuYW1lLW11bHRpcGxpY2F0b3IgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLW11bHRpcGxpY2F0b3IpO1xuXHRcdCRjb2x1bW4td2lkdGggOiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihjb2x1bW4td2lkdGgpO1xuXG5cdFx0Ly8gdmFycyA6XG5cdFx0JHdpZHRoIDogMDtcblx0XHRAaWYgJGNvbHVtbi13aWR0aCB7XG5cdFx0XHQkd2lkdGggOiAkY29sdW1uLXdpZHRoICogKCRjb2x1bW5zIC8gJG5hbWUtbXVsdGlwbGljYXRvcik7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQkd2lkdGggOiBwZXJjZW50YWdlKDEgLyAkY29udGV4dCkgKiAoJGNvbHVtbnMgLyAkbmFtZS1tdWx0aXBsaWNhdG9yKTtcblx0XHR9XG5cdFx0Ly8gQGlmICRkaXJlY3Rpb24gPT0gcnRsIHsgJHdpZHRoIDogJHdpZHRoKi0xOyB9XG5cdFx0Ly8gbGVmdDokd2lkdGg7XG5cdFx0Ly8gQGlmICRkaXJlY3Rpb24gPT0gbHRyIHtcblx0XHQvLyBcdFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0Ly8gXHRcdGxlZnQ6ICR3aWR0aCAqIC0xO1xuXHRcdC8vIFx0fVxuXHRcdC8vIH1cblxuXHRcdC8vIHNldCB2YWx1ZSA6XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gcnRsIHsgcmlnaHQ6JHdpZHRoOyB9XG5cdFx0QGVsc2UgeyBsZWZ0OiR3aWR0aDsgfVxuXHRcdC8vIGhhbmRsZSBkaXJlY3Rpb24gYXR0cmlidXRlXG5cdFx0QGlmIGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpci1hdHRyaWJ1dGUpIHtcblx0XHRcdFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0XHRcdHJpZ2h0OiAkd2lkdGg7IFxuXHRcdFx0fVxuXHRcdFx0W2Rpcj1cImx0clwiXSAmIHtcblx0XHRcdFx0bGVmdDogJHdpZHRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBQdWxsXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3B1bGwoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHQvLyBjc3Ncblx0cG9zaXRpb246cmVsYXRpdmU7XG5cdC8vIGhhbmRsZSBkaXJlY3Rpb24gYXR0cmlidXRlXG5cdEBpZiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihkaXItYXR0cmlidXRlLCAkc3RhdGUpIHtcblx0XHRbZGlyPVwicnRsXCJdICYge1xuXHRcdFx0cmlnaHQ6IGF1dG87XG5cdFx0fVxuXHRcdFtkaXI9XCJsdHJcIl0gJiB7XG5cdFx0XHRsZWZ0OiBhdXRvO1xuXHRcdH1cblx0fVxufVxuQG1peGluIGdyaWRsZV9wdWxsKFxuXHQkY29sdW1ucyxcblx0JGNvbnRleHQgOiBudWxsXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKHB1bGwpIHtcblx0XHQvLyB2YXJpYWJsZXMgOlxuXHRcdEBpZiB0eXBlLW9mKCRjb250ZXh0KSAhPSBudW1iZXIge1xuXHRcdFx0JGNvbnRleHQgOiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihjb250ZXh0KTtcblx0XHR9XG5cdFx0JGRpcmVjdGlvbiA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpcmVjdGlvbik7XG5cdFx0JG5hbWUtbXVsdGlwbGljYXRvciA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKG5hbWUtbXVsdGlwbGljYXRvcik7XG5cdFx0JGNvbHVtbi13aWR0aCA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNvbHVtbi13aWR0aCk7XG5cblx0XHQvLyB2YXJzIDpcblx0XHQkd2lkdGggOiAwO1xuXHRcdEBpZiAkY29sdW1uLXdpZHRoIHtcblx0XHRcdCR3aWR0aCA6ICRjb2x1bW4td2lkdGggKiAoJGNvbHVtbnMgLyAkbmFtZS1tdWx0aXBsaWNhdG9yKTtcblx0XHR9IEBlbHNlIHtcblx0XHRcdCR3aWR0aCA6IHBlcmNlbnRhZ2UoMSAvICRjb250ZXh0KSAqICgkY29sdW1ucyAvICRuYW1lLW11bHRpcGxpY2F0b3IpO1xuXHRcdH1cblx0XHQvLyBAaWYgJGRpcmVjdGlvbiA9PSBydGwgeyAkd2lkdGggOiAkd2lkdGgqLTE7IH1cblx0XHQvLyByaWdodDokd2lkdGg7XG5cdFx0Ly8gQGlmICRkaXJlY3Rpb24gPT0gbHRyIHtcblx0XHQvLyBcdFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0Ly8gXHRcdGxlZnQ6ICR3aWR0aCAqIC0xO1xuXHRcdC8vIFx0fVxuXHRcdC8vIH1cblxuXHRcdC8vIHNldCB2YWx1ZSA6XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gcnRsIHsgbGVmdDokd2lkdGg7IH1cblx0XHRAZWxzZSB7IHJpZ2h0OiR3aWR0aDsgfVxuXHRcdC8vIGhhbmRsZSBkaXJlY3Rpb24gYXR0cmlidXRlXG5cdFx0QGlmIGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpci1hdHRyaWJ1dGUpIHtcblx0XHRcdFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0XHRcdGxlZnQ6ICR3aWR0aDsgXG5cdFx0XHR9XG5cdFx0XHRbZGlyPVwibHRyXCJdICYge1xuXHRcdFx0XHRyaWdodDogJHdpZHRoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBQcmVmaXhcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fcHJlZml4KFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcblx0Ly8gaGFuZGxlIGRpcmVjdGlvbiBhdHRyaWJ1dGVcblx0QGlmIGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpci1hdHRyaWJ1dGUsICRzdGF0ZSkge1xuXHRcdFtkaXI9XCJydGxcIl0gJiB7XG5cdFx0XHRtYXJnaW4tbGVmdDogYXV0bztcblx0XHR9XG5cdFx0W2Rpcj1cImx0clwiXSAmIHtcblx0XHRcdG1hcmdpbi1yaWdodDogYXV0bztcblx0XHR9XG5cdH1cbn1cbkBtaXhpbiBncmlkbGVfcHJlZml4KFxuXHQkY29sdW1ucyxcblx0JGNvbnRleHQgOiBudWxsXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKHByZWZpeCkge1xuXHRcdC8vIHZhcnMgOlxuXHRcdEBpZiB0eXBlLW9mKCRjb250ZXh0KSAhPSBudW1iZXIge1xuXHRcdFx0JGNvbnRleHQgOiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihjb250ZXh0KTtcblx0XHR9XG5cdFx0JGRpcmVjdGlvbiA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpcmVjdGlvbik7XG5cdFx0JG5hbWUtbXVsdGlwbGljYXRvciA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKG5hbWUtbXVsdGlwbGljYXRvcik7XG5cdFx0JGNvbHVtbi13aWR0aCA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNvbHVtbi13aWR0aCk7XG5cblx0XHQvLyB2YXJzIDpcblx0XHQkd2lkdGggOiAwO1xuXHRcdEBpZiAkY29sdW1uLXdpZHRoIHtcblx0XHRcdCR3aWR0aCA6ICRjb2x1bW4td2lkdGggKiAoJGNvbHVtbnMgLyAkbmFtZS1tdWx0aXBsaWNhdG9yKTtcblx0XHR9IEBlbHNlIHtcblx0XHRcdCR3aWR0aCA6IHBlcmNlbnRhZ2UoMSAvICRjb250ZXh0KSAqICgkY29sdW1ucyAvICRuYW1lLW11bHRpcGxpY2F0b3IpO1xuXHRcdH1cblxuXHRcdC8vIHNldCB2YWx1ZSA6XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gcnRsIHsgbWFyZ2luLXJpZ2h0OiR3aWR0aDsgfVxuXHRcdEBlbHNlIHsgbWFyZ2luLWxlZnQ6JHdpZHRoOyB9XG5cdFx0Ly8gaGFuZGxlIGRpcmVjdGlvbiBhdHRyaWJ1dGVcblx0XHRAaWYgZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyLWF0dHJpYnV0ZSkge1xuXHRcdFx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAkd2lkdGg7IFxuXHRcdFx0fVxuXHRcdFx0W2Rpcj1cImx0clwiXSAmIHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6ICR3aWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuXG4vL1xuLy8gU3VmZml4XG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3N1ZmZpeChcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG5cdEBpZiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihkaXItYXR0cmlidXRlLCAkc3RhdGUpIHtcblx0XHRbZGlyPVwicnRsXCJdICYge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiBhdXRvO1xuXHRcdH1cblx0XHRbZGlyPVwibHRyXCJdICYge1xuXHRcdFx0bWFyZ2luLWxlZnQ6IGF1dG87XG5cdFx0fVxuXHR9XG59XG5AbWl4aW4gZ3JpZGxlX3N1ZmZpeChcblx0JGNvbHVtbnMsXG5cdCRjb250ZXh0IDogbnVsbFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChzdWZmaXgpIHtcblx0XHQvLyB2YXJzIDpcblx0XHRAaWYgdHlwZS1vZigkY29udGV4dCkgIT0gbnVtYmVyIHtcblx0XHRcdCRjb250ZXh0IDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoY29udGV4dCk7XG5cdFx0fVxuXHRcdCRkaXJlY3Rpb24gOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihkaXJlY3Rpb24pO1xuXHRcdCRuYW1lLW11bHRpcGxpY2F0b3IgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLW11bHRpcGxpY2F0b3IpO1xuXHRcdCRjb2x1bW4td2lkdGggOiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihjb2x1bW4td2lkdGgpO1xuXG5cdFx0Ly8gdmFycyA6XG5cdFx0JHdpZHRoIDogMDtcblx0XHRAaWYgJGNvbHVtbi13aWR0aCB7XG5cdFx0XHQkd2lkdGggOiAkY29sdW1uLXdpZHRoICogKCRjb2x1bW5zIC8gJG5hbWUtbXVsdGlwbGljYXRvcik7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQkd2lkdGggOiBwZXJjZW50YWdlKDEgLyAkY29udGV4dCkgKiAoJGNvbHVtbnMgLyAkbmFtZS1tdWx0aXBsaWNhdG9yKTtcblx0XHR9XG5cblx0XHQvLyBzZXQgdmFsdWUgOlxuXHRcdEBpZiAkZGlyZWN0aW9uID09IHJ0bCB7IG1hcmdpbi1sZWZ0OiR3aWR0aDsgfVxuXHRcdEBlbHNlIHsgbWFyZ2luLXJpZ2h0OiR3aWR0aDsgfVxuXG5cdFx0Ly8gaGFuZGxlIGRpcmVjdGlvbiBhdHRyaWJ1dGVcblx0XHRAaWYgZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyLWF0dHJpYnV0ZSkge1xuXHRcdFx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6ICR3aWR0aDsgXG5cdFx0XHR9XG5cdFx0XHRbZGlyPVwibHRyXCJdICYge1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6ICR3aWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuXG4vL1xuLy8gUm93IGRlYnVnXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3Jvd19kZWJ1Zyhcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG59XG5AbWl4aW4gZ3JpZGxlX3Jvd19kZWJ1Zyhcblx0JHN0YXRlcyA6IG51bGxcbikge1xuXHRAaW5jbHVkZSBfZ3JpZGxlX2NhbGwocm93LWRlYnVnKSB7XG5cdFx0Ly8gdmFyaWFibGVzIDpcblx0XHQkY29udGV4dCA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNvbnRleHQpO1xuXG5cdFx0cG9zaXRpb246cmVsYXRpdmU7XG5cdFx0ei1pbmRleDo5OTk5OTtcblx0XHRvdmVyZmxvdzpoaWRkZW47XG5cblx0XHQmOmJlZm9yZSB7XG5cdFx0XHRwb2ludGVyLWV2ZW50czogbm9uZTtcblx0XHRcdGNvbnRlbnQ6Jyc7XG5cdFx0XHRwb3NpdGlvbjphYnNvbHV0ZTtcblx0XHRcdHRvcDowOyBsZWZ0OjA7XG5cdFx0XHR3aWR0aDoxMDAlOyBoZWlnaHQ6OTk5OTlweDtcblx0XHRcdC8vIHZhcnMgOlxuXHRcdFx0JHdpZHRoIDogcGVyY2VudGFnZSgxIC8gJGNvbnRleHQpO1xuXHRcdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsMCwwLDApIDUwJSAsIHJnYmEoMCwwLDAsLjAyKSA1MCUpOyAvLyBTdGFuZGFyZCBzeW50YXhcblx0XHRcdGJhY2tncm91bmQtc2l6ZTooJHdpZHRoKjIpIDEwMCU7XG5cdFx0XHR6LWluZGV4Ojk5OTk5O1xuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBEZWJ1Z1xuLy9cbkBtaXhpbiBncmlkbGVfZGVidWcoXG5cdCR3aGF0LFxuXHQkb3V0cHV0IDogc2hlbGxcbikge1xuXHRAaWYgJGdyaWRsZS1kZWJ1ZyB7XG5cdFx0QGlmICRvdXRwdXQgPT0gc2hlbGwge1xuXHRcdFx0QGRlYnVnKGluc3BlY3QoJHdoYXQpKTtcblx0XHR9IEBlbHNlIHtcblx0XHRcdEBpZiB0eXBlLW9mKCR3aGF0KSA9PSBtYXAge1xuXHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfZGVidWdfbWFwKCR3aGF0KTtcblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRAXyB7XG5cdFx0XHRcdFx0I3t0eXBlLW9mKCR3aGF0KX0gOiBpbnNwZWN0KCR3aGF0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBEZWJ1ZyBhIG1hcFxuLy9cbkBtaXhpbiBncmlkbGVfZGVidWdfbWFwKCRtYXAsICRuYW1lIDogJycpIHtcblx0QGF0LXJvb3Qge1xuXHRcdEBfICN7JG5hbWV9IHtcblx0XHRcdEBlYWNoICRrZXksICR2YWx1ZSBpbiAkbWFwIHtcblx0XHRcdFx0QGlmIHR5cGUtb2YoJHZhbHVlKSA9PSBtYXAge1xuXHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9kZWJ1Z19tYXAoJHZhbHVlLCAka2V5KTtcblx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0I3ska2V5fTogaW5zcGVjdCgkdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIENvbnRhaW5lclxuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9jb250YWluZXIoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHQmOmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG5cdFxufVxuQG1peGluIGdyaWRsZV9jb250YWluZXIoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKGNvbnRhaW5lcikge1xuXHR9XG59XG5cblxuLy9cbi8vIENlbnRlcmVkXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2dyaWRfY2VudGVyZWQoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHRkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7XG5cdGZsb2F0Om5vbmUgIWltcG9ydGFudDtcblx0bWFyZ2luLWxlZnQ6YXV0byAhaW1wb3J0YW50O1xuXHRtYXJnaW4tcmlnaHQ6YXV0byAhaW1wb3J0YW50O1xuXHRjbGVhcjpib3RoICFpbXBvcnRhbnQ7XG59XG5AbWl4aW4gZ3JpZGxlX2dyaWRfY2VudGVyZWQoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKGdyaWQtY2VudGVyZWQpIHtcblx0fVxufVxuXG5cbi8vXG4vLyBIaWRlXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2hpZGUoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xufVxuQG1peGluIGdyaWRsZV9oaWRlKFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChoaWRlKSB7XG5cdFx0ZGlzcGxheTpub25lO1xuXHR9XG59XG5cblxuLy9cbi8vIE5vdCB2aXNpYmxlIG9uXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX25vdF92aXNpYmxlKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cbkBtaXhpbiBncmlkbGVfbm90X3Zpc2libGUoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKG5vdC12aXNpYmxlKSB7XG5cdFx0dmlzaWJpbGl0eTpoaWRkZW47XG5cdH1cbn1cblxuXG4vL1xuLy8gU2hvdyBvblxuLy9cbi8vIEBwYXJhbSBcdFN0cmluZyBcdCRtZWRpYSBcdFdoYXQgdG8gaGlkZSAob25lIG9mIHRoZSAzIHN0YXRlIGNsYXNzZXMgbmFtZSlcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fc2hvdyhcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG59XG5AbWl4aW4gZ3JpZGxlX3Nob3coXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKHNob3cpIHtcblx0XHRkaXNwbGF5OmJsb2NrO1xuXHR9XG59XG5cblxuLy9cbi8vIFNob3cgaW5saW5lXG4vL1xuLy8gQHBhcmFtIFx0U3RyaW5nIFx0XHQkc3RhdGUgXHRcdFRoZSBzdGF0ZSBuYW1lXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3Nob3dfaW5saW5lKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cbkBtaXhpbiBncmlkbGVfc2hvd19pbmxpbmUoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKHNob3ctaW5saW5lKSB7XG5cdFx0ZGlzcGxheTppbmxpbmUtYmxvY2s7XG5cdH1cbn1cblxuXG4vL1xuLy8gVmlzaWJsZSBvbiA6XG4vLyBAcGFyYW0gXHRTdHJpbmcgXHQkbWVkaWEgXHRPbiB3aGF0IHN0YXRlXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3Zpc2libGUoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xufVxuQG1peGluIGdyaWRsZV92aXNpYmxlKFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbCh2aXNpYmxlKSB7XG5cdFx0dmlzaWJpbGl0eTp2aXNpYmxlO1xuXHR9XG59XG5cblxuLy9cbi8vIEZsb2F0IDpcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fZmxvYXQoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xufVxuQG1peGluIGdyaWRsZV9mbG9hdChcblx0JGZsb2F0LWRpcmVjdGlvbiA6IGxlZnRcbikge1xuXHRAaW5jbHVkZSBfZ3JpZGxlX2NhbGwoZmxvYXQpIHtcblx0XHRmbG9hdDojeyRmbG9hdC1kaXJlY3Rpb259O1xuXHR9XG59XG5cblxuLy9cbi8vIEdyaWRsZSBjbGVhciA6XG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2NsZWFyKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cbkBtaXhpbiBncmlkbGVfY2xlYXIoXG5cdCRjbGVhci1kaXJlY3Rpb24gOiBib3RoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKGNsZWFyKSB7XG5cdFx0Y2xlYXI6I3skY2xlYXItZGlyZWN0aW9ufTtcblx0fVxufVxuXG5cbi8vXG4vLyBHcmlkbGUgbm8gZ3V0dGVyIDpcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fbm9fZ3V0dGVyKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cbkBtaXhpbiBncmlkbGVfbm9fZ3V0dGVyKFxuXHQkc2lkZSA6IHRvcCByaWdodCBib3R0b20gbGVmdFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChuby1ndXR0ZXIpIHtcblx0XHRAZWFjaCAkcyBpbiAkc2lkZSB7XG5cdFx0XHRwYWRkaW5nLSN7JHN9IDogMDtcblx0XHR9XG5cdH1cbn1cblxuXG4vL1xuLy8gR3JpZGxlIGd1dHRlciA6XG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2d1dHRlcihcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG59XG5AbWl4aW4gZ3JpZGxlX2d1dHRlcihcblx0JHNpZGUtb3Itc2l6ZSA6IHRvcCByaWdodCBib3R0b20gbGVmdFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChndXR0ZXIpIHtcblx0XHRcblx0XHQvLyBnZXQgYSBndXR0ZXIgbWFwXG5cdFx0JGd1dHRlcnMgOiBfZ3JpZGxlX2ZvcmdlX2d1dHRlcnNfbWFwKCRzaWRlLW9yLXNpemUpO1xuXG5cdFx0Ly8gY2hlY2sgdGhhdCB3ZSBoYXZlIGEgZ3V0dGVyIG1hcFxuXHRcdEBlYWNoICRzaWRlLCAkdmFsdWUgaW4gJGd1dHRlcnMge1xuXHRcdFx0QGlmICR2YWx1ZSBhbmQgJHZhbHVlID4gMCB7XG5cdFx0XHRcdHBhZGRpbmctI3skc2lkZX0gOiAkdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cbn0iLCIvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IEdlbmVyYXRlIG1peGluc1xuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vXG4vLyBHZW5lcmF0ZSBhIGN1c3RvbSBjbGFzcyBmb3IgYWxsIHRoZSBzdGF0ZXNcbi8vXG4vLyBAcGFyYW0gXHRsaXN0IFx0JHBhdHRlcm4gXHRcdFRoZSBuYW1lIHBhdHRlcm4gb2YgdGhlIGNsYXNzXG4vLyBAcGFyYW0gXHRsaXN0IFx0JHN0YXRlc05hbWVzIFx0XHRUaGUgc3RhdGVzIG5hbWVzIHRvIGdlbmVyYXRlXG4vL1xuQG1peGluIGdyaWRsZV9nZW5lcmF0ZV9jdXN0b21fY2xhc3MoXG5cdCRwYXR0ZXJuLFxuXHQkc3RhdGVzTmFtZXMgOiBudWxsLFxuXHQkcmVwbGFjZW1lbnRzLi4uXG4pIHtcblx0Ly8gbWFuYWdlIHN0YXRlcyB0byBnZW5lcmF0ZSA6XG5cdCRzdGF0ZXMgOiAoKTtcblx0QGlmICRzdGF0ZXNOYW1lcyA9PSBudWxsIG9yICRzdGF0ZXNOYW1lcyA9PSBhbGwge1xuXHRcdC8vIGxvb3Agb24gZWFjaCBzdGF0ZXMgdG8gZ2VuZXJhdGUgbmFtZXMgbGlzdCA6XG5cdFx0QGVhY2ggJHN0YXRlTmFtZSwgJHN0YXRlIGluICRfZ3JpZGxlX3N0YXRlcyB7XG5cdFx0XHQkc3RhdGVzIDogYXBwZW5kKCRzdGF0ZXMsICRzdGF0ZU5hbWUpO1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cdFx0JHN0YXRlcyA6ICRzdGF0ZXNOYW1lcztcblx0fVxuXG5cdC8vIEdldCBhbGwgcGF0dGVyblxuXHQkdW5tYXRjaGVkX3BhdHRlcm5zIDogIF9ncmlkbGVfdW5tYXRjaGVkX3BhdHRlcm5zKCRwYXR0ZXJuKTtcblx0JG1hdGNoZWRfcGF0dGVybnMgOiAgX2dyaWRsZV9tYXRjaGVkX3BhdHRlcm5zKCRwYXR0ZXJuKTtcblxuICAgIC8vIEFkanVzdCB0aGUgcmVwbGFjZW1lbnQgbGlzdCBsZW5ndGggdG8gYmUgdGhlIHNhbWUgYXMgdW5tYXRjaGVkX3BhdHRlcm5zXG4gICAgQHdoaWxlIGxlbmd0aCggJHVubWF0Y2hlZF9wYXR0ZXJucyApICE9IGxlbmd0aCggJHJlcGxhY2VtZW50cyApIHtcbiAgICAgICAgQGlmIGxlbmd0aCggJHVubWF0Y2hlZF9wYXR0ZXJucyApIDwgbGVuZ3RoKCAkcmVwbGFjZW1lbnRzICkge1xuICAgICAgICAgICAgJHJlcGxhY2VtZW50cyA6IGxpc3QtcG9wKCRyZXBsYWNlbWVudHMpO1xuICAgICAgICB9QGVsc2V7XG4gICAgICAgICAgICAkcmVwbGFjZW1lbnRzIDogYXBwZW5kKCRyZXBsYWNlbWVudHMsIChudWxsKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3IgZWFjaCB2YWxpZCBwYXR0ZXJuLCBnZXQgcmVwbGFjZW1lbnQgbGlzdFxuICAgIEBlYWNoICRpbmRleCwgJHBhdHRlcm4gaW4gJG1hdGNoZWRfcGF0dGVybnMge1xuICAgICAgICBAaWYgJHBhdHRlcm4gPT0gXCIlc3RhdGVcIiB7XG4gICAgICAgICAgICAkbWF0Y2hlZF9wYXR0ZXJucyA6IG1hcC1yZW1vdmUoJG1hdGNoZWRfcGF0dGVybnMsICRpbmRleCk7XG4gICAgICAgIH1AZWxzZXtcbiAgICAgICAgICAgICRyZXBsYWNlbWVudHMgOiBhcHBlbmQoJHJlcGxhY2VtZW50cywgX2dyaWRsZV9nZXRfcGF0dGVybl92YWx1ZXMoc3RyLXNsaWNlKCRwYXR0ZXJuLCAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJGZvdW5kX3BhdHRlcm5zIDogbWFwLW1lcmdlKCR1bm1hdGNoZWRfcGF0dGVybnMsICRtYXRjaGVkX3BhdHRlcm5zKTtcblxuXHQvLyBsb29wIG9uIGVhY2ggc3RhdGVzIDpcblx0QGVhY2ggJHN0YXRlTmFtZSBpbiAkc3RhdGVzXG5cdHtcblx0XHQvLyBtYW5hZ2Ugc3RhdGVuYW1lIDpcblx0XHRAaWYgdHlwZS1vZigkc3RhdGVOYW1lKSAhPSBzdHJpbmcge1xuXHRcdFx0JHN0YXRlTmFtZSA6IG1hcC1nZXQoJHN0YXRlTmFtZSwgbmFtZSk7XG5cdFx0fVxuXG5cdFx0Ly8gY2xhc3NlcyA6XG5cdFx0JGNsYXNzZXMgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihjbGFzc2VzLCAkc3RhdGVOYW1lKTtcblxuXHRcdC8vIGdlbnJhdGUgdGhlIGNsYXNzbmFtZSA6XG5cdFx0QGlmICRjbGFzc2VzXG5cdFx0e1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3N0YXRlKCRzdGF0ZU5hbWUsIGZhbHNlKSB7XG5cdFx0XHRcdCRsZW5ndGhfYTpsZW5ndGgoJGZvdW5kX3BhdHRlcm5zKTtcblx0XHRcdFx0JGxlbmd0aF9iOmxlbmd0aCgkcmVwbGFjZW1lbnRzKTtcblx0XHRcdFx0QGlmICRsZW5ndGhfYSA+IDAgYW5kICRsZW5ndGhfYSA8PSAkbGVuZ3RoX2Ige1xuXHRcdFx0XHRcdCRsaXN0X2luZGV4ZXMgOiAoKTtcblx0XHRcdFx0XHRAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGhfYSB7XG5cdFx0XHRcdFx0XHQkbGlzdF9pbmRleGVzIDogYXBwZW5kKCRsaXN0X2luZGV4ZXMsIDEpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdEB3aGlsZSBudGgoJGxpc3RfaW5kZXhlcywgMSkgPD0gbGVuZ3RoKCBudGgoJHJlcGxhY2VtZW50cywgMSkgKXtcblx0XHRcdFx0XHRcdCRncmlkbGUtc2NvcGUgOiAoKSAhZ2xvYmFsO1xuXHRcdFx0XHRcdFx0JHJlcGxhY2VtZW50X3BhdHRlcm4gOiAkcGF0dGVybjtcblx0XHRcdFx0XHRcdCRyZXBsYWNlZF9jb3VudCA6IDA7XG5cblx0XHRcdFx0XHRcdC8vIFdvcmsgdGhlIHJlcGxhY2VtZW50XG5cdFx0XHRcdFx0XHRAZWFjaCAkaW5kZXgsICRmbGFnIGluICRmb3VuZF9wYXR0ZXJucyB7XG5cdFx0XHRcdFx0XHRcdCRyZXBsYWNlZF9jb3VudCA6ICRyZXBsYWNlZF9jb3VudCArIDE7XG5cblx0XHRcdFx0XHRcdFx0JGN1cnJlbnRfcmVwbGFjZW1lbnQgOiBudGgoICRyZXBsYWNlbWVudHMsICRyZXBsYWNlZF9jb3VudCApO1xuXHRcdFx0XHRcdFx0XHQkY3VycmVudF9pbmRleCA6IG50aCgkbGlzdF9pbmRleGVzLCAkcmVwbGFjZWRfY291bnQpO1xuXG5cdFx0XHRcdFx0XHRcdCRyZXBsYWNlbWVudF9wYXR0ZXJuIDogc2V0LW50aCggJHJlcGxhY2VtZW50X3BhdHRlcm4sICRpbmRleCwgbnRoKCAkY3VycmVudF9yZXBsYWNlbWVudCwgJGN1cnJlbnRfaW5kZXggKSApO1xuXG5cdFx0XHRcdFx0XHRcdCR2YXJfbmFtZSA6IHN0ci1zbGljZSgkZmxhZywgMik7XG5cblx0XHRcdFx0XHRcdFx0JGdyaWRsZS1zY29wZSA6IG1hcC1zZXQoICRncmlkbGUtc2NvcGUsICR2YXJfbmFtZSwgbnRoKCAkY3VycmVudF9yZXBsYWNlbWVudCwgJGN1cnJlbnRfaW5kZXggKSApICFnbG9iYWw7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoJHJlcGxhY2VtZW50X3BhdHRlcm4sICRzdGF0ZU5hbWUpfSB7XG5cdFx0XHRcdFx0XHRcdEBjb250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQkZ3JpZGxlLXNjb3BlIDogKCkgIWdsb2JhbDtcblxuXHRcdFx0XHRcdFx0Ly8gQWRkIDEgdG8gaW5kZXhlc1xuXHRcdFx0XHRcdFx0JGJyZWFrIDogZmFsc2U7XG5cdFx0XHRcdFx0XHQkY3VycmVudF9pdGVyYXRpb25faW5kZXggOiBsZW5ndGgoICRsaXN0X2luZGV4ZXMgKTsgLy8gVGhlIGxhc3QgaW5kZXhcblx0XHRcdFx0XHRcdEB3aGlsZSAkYnJlYWsgPT0gZmFsc2Uge1xuXHRcdFx0XHRcdFx0XHQkbGlzdF9pbmRleGVzIDogc2V0LW50aCggJGxpc3RfaW5kZXhlcywgJGN1cnJlbnRfaXRlcmF0aW9uX2luZGV4LCBudGgoICRsaXN0X2luZGV4ZXMsICRjdXJyZW50X2l0ZXJhdGlvbl9pbmRleCApICsgMSApO1xuXG5cdFx0XHRcdFx0XHRcdEBpZiBudGgoICRsaXN0X2luZGV4ZXMsICRjdXJyZW50X2l0ZXJhdGlvbl9pbmRleCApID4gbGVuZ3RoKCBudGgoICRyZXBsYWNlbWVudHMsICRjdXJyZW50X2l0ZXJhdGlvbl9pbmRleCApIClcblx0XHRcdFx0XHRcdFx0XHRhbmQgJGN1cnJlbnRfaXRlcmF0aW9uX2luZGV4ICE9IDEge1xuXHRcdFx0XHRcdFx0XHRcdCRsaXN0X2luZGV4ZXMgOiBzZXQtbnRoKCAkbGlzdF9pbmRleGVzLCAkY3VycmVudF9pdGVyYXRpb25faW5kZXgsIDEpO1xuXG5cdFx0XHRcdFx0XHRcdFx0JGN1cnJlbnRfaXRlcmF0aW9uX2luZGV4IDogJGN1cnJlbnRfaXRlcmF0aW9uX2luZGV4IC0gMTtcblx0XHRcdFx0XHRcdFx0fUBlbHNle1xuXHRcdFx0XHRcdFx0XHRcdCRicmVhayA6IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1AZWxzZXtcblx0XHRcdFx0XHQje19ncmlkbGVfY2xhc3NuYW1lKCRwYXR0ZXJuLCAkc3RhdGVOYW1lKX0ge1xuXHRcdFx0XHRcdFx0QGNvbnRlbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIEdlbmVyYXRlIGFsbCBoZWxwZXJzIGNsYXNzZXNcbi8vXG5AbWl4aW4gX2dyaWRsZV9nZW5lcmF0ZV9oZWxwZXJfY2xhc3NlcyAoXG5cdCRzdGF0ZSA6IG51bGwsXG5cdCRwYWNrYWdlIDogbnVsbFxuKSB7XG5cdC8vIGhlbHBlcnMgOlxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKGZsb2F0LCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoZmxvYXQsICRzdGF0ZSwgbGVmdCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9mbG9hdChsZWZ0KTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShmbG9hdCwgJHN0YXRlLCByaWdodCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9mbG9hdChyaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShjbGVhciwgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGNsZWFyLCAkc3RhdGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfY2xlYXIoYm90aCk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoY2xlYXIsICRzdGF0ZSwgbGVmdCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jbGVhcihsZWZ0KTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShjbGVhciwgJHN0YXRlLCByaWdodCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jbGVhcihyaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShuby1ndXR0ZXIsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShuby1ndXR0ZXIsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub19ndXR0ZXIoKTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShuby1ndXR0ZXIsICRzdGF0ZSwgbGVmdCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub19ndXR0ZXIobGVmdCk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUobm8tZ3V0dGVyLCAkc3RhdGUsIHJpZ2h0KX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX25vX2d1dHRlcihyaWdodCk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUobm8tZ3V0dGVyLCAkc3RhdGUsIHRvcCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub19ndXR0ZXIodG9wKTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShuby1ndXR0ZXIsICRzdGF0ZSwgYm90dG9tKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX25vX2d1dHRlcihib3R0b20pO1xuXHRcdH1cblx0fVxuXG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoZ3V0dGVyLCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoZ3V0dGVyLCAkc3RhdGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3V0dGVyKHRvcCByaWdodCBib3R0b20gbGVmdCk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoZ3V0dGVyLCAkc3RhdGUsIGxlZnQpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3V0dGVyKGxlZnQpO1xuXHRcdH1cblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGd1dHRlciwgJHN0YXRlLCByaWdodCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ndXR0ZXIocmlnaHQpO1xuXHRcdH1cblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGd1dHRlciwgJHN0YXRlLCB0b3ApfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3V0dGVyKHRvcCk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoZ3V0dGVyLCAkc3RhdGUsIGJvdHRvbSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ndXR0ZXIoYm90dG9tKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKGF1dG8taGVpZ2h0LCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoYXV0by1oZWlnaHQsICRzdGF0ZSl9IHtcblx0XHRcdGhlaWdodDppbmhlcml0O1xuXHRcdH1cblx0fVxuXG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoZ3JpZC1jZW50ZXJlZCwgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGdyaWQtY2VudGVyZWQsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkX2NlbnRlcmVkKCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShjb250YWluZXIsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShjb250YWluZXIsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jb250YWluZXIoKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKHJvdywgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdywgJHN0YXRlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3JvdyhmYWxzZSk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUocm93LCAkc3RhdGUsIHJldmVyc2UpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfcm93KHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUocm93LWZ1bGwsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShyb3ctZnVsbCwgJHN0YXRlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19mdWxsKCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShjb2wsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShjb2wsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jb2woZmFsc2UpO1xuXHRcdH1cblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGNvbCwgJHN0YXRlLCByZXZlcnNlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2NvbCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKGdyaWQtdGFibGUsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShncmlkLXRhYmxlLCAkc3RhdGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfZ3JpZF90YWJsZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoZ3JpZC1hZGFwdCwgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGdyaWQtYWRhcHQsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkX2FkYXB0KCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShncmlkLWdyb3csICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShncmlkLWdyb3csICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkX2dyb3coKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKHJvdy1hbGlnbiwgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdy1hbGlnbiwgJHN0YXRlLCBsZWZ0KX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19hbGlnbihsZWZ0KTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShyb3ctYWxpZ24sICRzdGF0ZSwgY2VudGVyKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19hbGlnbihjZW50ZXIpO1xuXHRcdH1cblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdy1hbGlnbiwgJHN0YXRlLCByaWdodCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9yb3dfYWxpZ24ocmlnaHQpO1xuXHRcdH1cblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdy1hbGlnbiwgJHN0YXRlLCBtaWRkbGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfcm93X2FsaWduKG1pZGRsZSk7XG5cdFx0fVxuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUocm93LWFsaWduLCAkc3RhdGUsIHRvcCl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9yb3dfYWxpZ24odG9wKTtcblx0XHR9XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShyb3ctYWxpZ24sICRzdGF0ZSwgYm90dG9tKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19hbGlnbihib3R0b20pO1xuXHRcdH1cblx0XHRAaWYgZ3JpZGxlX2lzX2RyaXZlcihmbGV4KSB7XG5cdFx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdy1hbGlnbiwgJHN0YXRlLCBhcm91bmQpfSB7XG5cdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9yb3dfYWxpZ24oYXJvdW5kKTtcblx0XHRcdH1cblx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUocm93LWFsaWduLCAkc3RhdGUsIGJldHdlZW4pfSB7XG5cdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9yb3dfYWxpZ24oYmV0d2Vlbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly9cblx0Ly8gV3JhcHBpbmdcblx0Ly9cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShub3dyYXAsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShub3dyYXAsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub3dyYXAoKTtcblx0XHR9XG5cdH1cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZSh3cmFwLCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUod3JhcCwgJHN0YXRlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3dyYXAoKTtcblx0XHR9XG5cdH1cblxuXHQvL1xuXHQvLyBWaXNpYmxlLCBoaWRlLCBldGMuLi5cblx0Ly9cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShoaWRlLCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoaGlkZSwgJHN0YXRlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX2hpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKG5vdC12aXNpYmxlLCAkcGFja2FnZSkge1xuXHRcdCN7X2dyaWRsZV9jbGFzc25hbWUobm90LXZpc2libGUsICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ub3RfdmlzaWJsZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoc2hvdywgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHNob3csICRzdGF0ZSl9IHtcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9zaG93KCk7XG5cdFx0fVxuXHR9XG5cblx0QGlmIF9ncmlkbGVfbmVlZF90b19nZW5lcmF0ZShzaG93LWlubGluZSwgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHNob3ctaW5saW5lLCAkc3RhdGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfc2hvd19pbmxpbmUoKTtcblx0XHR9XG5cdH1cblxuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKHZpc2libGUsICRwYWNrYWdlKSB7XG5cdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZSh2aXNpYmxlLCAkc3RhdGUpfSB7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfdmlzaWJsZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8vXG5cdC8vIENsZWFyIGVhY2ggY2xhc3MgOlxuXHQvL1xuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKGNsZWFyLWVhY2gsICRwYWNrYWdlKSB7XG5cdFx0QGVhY2ggJGNsZWFyTmFtZSwgJGNsZWFyTWFwIGluICRfZ3JpZGxlX2NsZWFyX2NsYXNzZXMge1xuXHRcdFx0Ly8gZ2V0IGNvdW50IDpcblx0XHRcdCRjbGVhckNvdW50IDogbWFwLWdldCgkY2xlYXJNYXAsIGNsZWFyRWFjaCk7XG5cdFx0XHQvLyB3aGF0IHRvIGNsZWFyIDpcblx0XHRcdCRjbGVhcldoYXQgOiBtYXAtZ2V0KCRjbGVhck1hcCwgY2xlYXJXaGF0KTtcblx0XHRcdC8vIGdlbmVyYXRlIHRoZSBjbGFzcyA6XG5cdFx0XHQje19ncmlkbGVfY2xhc3NuYW1lKGNsZWFyLWVhY2gsICRzdGF0ZSwgJGNsZWFyQ291bnQpfSB7XG5cdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9jbGVhcl9lYWNoKCRjbGVhckNvdW50LCAkY2xlYXJXaGF0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvL1xuXHQvLyBkZWJ1Z1xuXHQvL1xuXHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKHJvdy1kZWJ1ZywgJHBhY2thZ2UpIHtcblx0XHQje19ncmlkbGVfY2xhc3NuYW1lKHJvdy1kZWJ1ZywgJHN0YXRlKX0ge1xuXHRcdFx0QGluY2x1ZGUgZ3JpZGxlX3Jvd19kZWJ1ZygpO1xuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBHZW5lcmF0ZSBqc29uIHNldHRpbmdzXG4vL1xuQG1peGluIGdyaWRsZV9nZW5lcmF0ZV9qc29uX3NldHRpbmdzKCkge1xuXG5cdC8vIHNldHRpbmdzIGNvbnRlbnQgOlxuXHQkZ3JpZGxlLXNldHRpbmdzLXN0YXRlcyA6IFwie1wiO1xuXG5cdC8vIGdlbmVyYXRlIGFsbCBjbGFzc2VzIGZvciBkaWZmZXJlbnRzIG1lZGlhIHF1ZXJpZXMgOlxuXHQkc3RhdGVzQ291bnQgOiBsZW5ndGgoJF9ncmlkbGVfc3RhdGVzKTtcblx0JGkgOiAwO1xuXHRAZWFjaCAkc3RhdGVOYW1lLCAkc3RhdGUgaW4gJF9ncmlkbGVfc3RhdGVzIHtcblxuXHRcdCRuYW1lIDogJHN0YXRlTmFtZTtcblxuXHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSBcXFwiI3skbmFtZX1cXFwiOntcIjtcblxuXHRcdEBlYWNoICR2YXJOYW1lLCAkdmFyIGluICRzdGF0ZSB7XG5cblx0XHRcdCR2YWx1ZSA6IG51bGw7XG5cdFx0XHRAaWYgJHZhck5hbWUgPT0gXCJxdWVyeVwiIHtcblx0XHRcdFx0JHZhbHVlIDogZ3JpZGxlX2dldF9tZWRpYV9xdWVyeSgkc3RhdGVOYW1lKTtcblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQkdmFsdWUgOiBtYXAtZ2V0KCRzdGF0ZSwkdmFyTmFtZSk7XG5cdFx0XHR9XG5cblx0XHRcdEBpZiAkdmFsdWUgPT0gbnVsbCB7XG5cdFx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSBcXFwiI3skdmFyTmFtZX1cXFwiIDogbnVsbCxcIjtcblx0XHRcdH0gQGVsc2VpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gYm9vbCB7XG5cdFx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSBcXFwiI3skdmFyTmFtZX1cXFwiIDogI3skdmFsdWV9LFwiO1xuXHRcdFx0fSBAZWxzZWlmIHR5cGUtb2YoJHZhbHVlKSA9PSBtYXAge1xuXHRcdFx0XHQkZ3JpZGxlLXNldHRpbmdzLXN0YXRlcyA6IFwiI3skZ3JpZGxlLXNldHRpbmdzLXN0YXRlc30gXFxcIiN7JHZhck5hbWV9XFxcIiA6IHtcIjtcblx0XHRcdFx0QGVhY2ggJHZuLCAkdnYgaW4gJHZhbHVlIHtcblx0XHRcdFx0XHQkZ3JpZGxlLXNldHRpbmdzLXN0YXRlcyA6IFwiI3skZ3JpZGxlLXNldHRpbmdzLXN0YXRlc30gXFxcIiN7JHZufVxcXCIgOiBcXFwiI3skdnZ9XFxcIixcIlxuXHRcdFx0XHR9XG5cdFx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSBcXFwiX1xcXCIgOiB0cnVlXCI7XG5cdFx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSB9LFwiO1xuXHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSBcXFwiI3skdmFyTmFtZX1cXFwiIDogXFxcIiN7JHZhbHVlfVxcXCIsXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0JGdyaWRsZS1zZXR0aW5ncy1zdGF0ZXMgOiBcIiN7JGdyaWRsZS1zZXR0aW5ncy1zdGF0ZXN9IFxcXCJfXFxcIiA6IHRydWVcIjtcblxuXHRcdEBpZiAkaSA+PSAkc3RhdGVzQ291bnQgLSAxIHtcblx0XHRcdCRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzIDogXCIjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfSB9XCI7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQkZ3JpZGxlLXNldHRpbmdzLXN0YXRlcyA6IFwiI3skZ3JpZGxlLXNldHRpbmdzLXN0YXRlc30gfSxcIjtcblx0XHR9XG5cblx0XHQvLyB1cGRhdGUgaSA6XG5cdFx0JGkgOiAkaSArIDE7XG5cblx0fVxuXG5cdCAvLyBnZW5lcmF0ZSBzZXR0aW5ncyBqc29uIDpcblx0JGdyaWRsZS1zZXR0aW5ncy1zdGF0ZXMgOiBcIiN7JGdyaWRsZS1zZXR0aW5ncy1zdGF0ZXN9fVwiO1xuXHQkZ3JpZGxlLXNldHRpbmdzIDogXCJ7XCI7XG5cdCRncmlkbGUtc2V0dGluZ3MgOiBcIiN7JGdyaWRsZS1zZXR0aW5nc30gXFxcInZlcnNpb25cXFwiIDogXFxcIiN7JF9ncmlkbGUtdmVyc2lvbn1cXFwiXCI7XG5cblx0Ly8gc3RhdGVzIDpcblx0JGdyaWRsZS1zZXR0aW5ncyA6IFwiI3skZ3JpZGxlLXNldHRpbmdzfSwgXFxcInN0YXRlc1xcXCIgOiAjeyRncmlkbGUtc2V0dGluZ3Mtc3RhdGVzfVwiO1xuXG5cdC8vIHNldHRpbmdzIDpcblx0JGdyaWRsZS1zZXR0aW5ncyA6IFwiI3skZ3JpZGxlLXNldHRpbmdzfSB9XCI7XG5cdCNncmlkbGUtc2V0dGluZ3Mge1xuXHRcdGNvbnRlbnQgOiAkZ3JpZGxlLXNldHRpbmdzO1xuXHR9XG59XG5cblxuLy9cbi8vIEdlbmVyYXRlIGNsYXNzZXNcbi8vXG5AbWl4aW4gZ3JpZGxlX2dlbmVyYXRlX2NsYXNzZXMoXG5cdCRzdGF0ZXMgOiBhbGwsXG5cdCRwYWNrYWdlIDogYWxsLFxuXHQkc2NvcGUgOiBudWxsXG4pIHtcblxuXHQvLyBpbml0IGdyaWRsZVxuXHRAaW5jbHVkZSBncmlkbGVfaW5pdCgpO1xuXG5cdC8vIGNoZWNrIGlmIGEgc2NvcGUgZXhpc3Rcblx0QGlmICRzY29wZSB7XG5cdFx0Ly8gd3JhcHAgZ3JpZCBpbnRvIHNjb3BlXG5cdFx0LiN7JHNjb3BlfSB7XG5cdFx0XHRAaW5jbHVkZSBfZ3JpZGxlX2dlbmVyYXRlX2NsYXNzZXMoJHN0YXRlcywgJHBhY2thZ2UsIHRydWUpO1xuXHRcdH1cblx0fSBAZWxzZSB7XG5cdFx0Ly8gZ2VuZXJhdGUgY2xhc3Nlc1xuXHRcdEBpbmNsdWRlIF9ncmlkbGVfZ2VuZXJhdGVfY2xhc3Nlcygkc3RhdGVzLCAkcGFja2FnZSwgZmFsc2UpO1xuXHR9XG59XG4kX2dyaWRsZV9nZW5lcmF0ZU9ubHlPbmNlIDogdHJ1ZTsgLy8ga2VlcCB0cmFjayBvZiBnZW5lcmF0ZSBvbmNlIGNsYXNzZXNcbkBtaXhpbiBfZ3JpZGxlX2dlbmVyYXRlX2NsYXNzZXMoXG5cdCRzdGF0ZXMgOiBhbGwsXG5cdCRwYWNrYWdlIDogYWxsLFxuXHQkaGFzLXBhcmVudCA6IGZhbHNlXG4pIHtcblxuXHQvLyBzZXQgdGhhdCB3ZSBhcmUgaW4gZ2VuZXJhdGUgcGhhc2UgKHRoYXQgY2FuIGJlIHVzZWQgYW55d2hlcmUpXG5cdCRfZ3JpZGxlX2lzX2luX2dlbmVyYXRlX3BoYXNlIDogdHJ1ZSAhZ2xvYmFsO1xuXG5cdC8vIGdldCBhbGwgdGhlIHJlZ2lzdGVyZWQgc3RhdGVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXJcblx0Ly8gdG8gZGV0ZXJtaW5lIHdoaWNoIHN0YXRlcyB0byBnZW5lcmF0ZVxuXHQkZ2VuZXJhdGUtc3RhdGVzIDogZ3JpZGxlX2dldF9zdGF0ZXNfbmFtZXMoKTtcblxuXHQvLyBpZiB3ZSBoYXZlIHByb3ZpZGVkIHNvbWUgc3RhdGVzIHRvIGdlbmVyYXRlXG5cdEBpZiAkc3RhdGVzICE9IG51bGwgYW5kICRzdGF0ZXMgIT0gYWxsIHtcblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIG9ubHkgc29tZSAtIGluIHRoZSBzdGF0ZXMgbGlzdFxuXHRcdC8vIG1lYW4gdGhhdCB3ZSB3YW50IHRvIG9ubHkgcmVtb3ZlIHRoZXNlIHNwZWNpZmllZCBzdGF0ZXNcblx0XHQvLyBmcm9tIHRoZSBhbGwgc3RhdGVzIGxpc3Rcblx0XHQkb25seVJlbW92ZSA6IHRydWU7XG5cdFx0QGVhY2ggJHN0YXRlTmFtZSBpbiAkc3RhdGVzIHtcblx0XHRcdEBpZiBzdHItc2xpY2UoJHN0YXRlTmFtZSwxLDEpICE9ICctJyB7XG5cdFx0XHRcdCRvbmx5UmVtb3ZlIDogZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGlmIHdlIHdhbnQgdG8gb25seSByZW1vdmUgc29tZSBzdGF0ZXNcblx0XHRAaWYgJG9ubHlSZW1vdmUge1xuXHRcdFx0Ly8gbG9vcCBvbiBhbGwgdGhlIHN0YXRlcyB0byByZW1vdmVcblx0XHRcdEBlYWNoICRzdGF0ZU5hbWUgaW4gJHN0YXRlcyB7XG5cdFx0XHRcdCRzbiA6IHN0ci1zbGljZSgkc3RhdGVOYW1lLDIpO1xuXHRcdFx0XHQkaWR4IDogaW5kZXgoJGdlbmVyYXRlLXN0YXRlcywgJHNuKTtcblx0XHRcdFx0QGlmICRpZHggIT0gbnVsbCB7XG5cdFx0XHRcdFx0JGdlbmVyYXRlLXN0YXRlcyA6IHJlbW92ZS1udGgoJGdlbmVyYXRlLXN0YXRlcywkaWR4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0JGdlbmVyYXRlLXN0YXRlcyA6ICRzdGF0ZXM7XG5cdFx0fVxuXHR9XG5cblxuXHQvLyBnZW5lcmF0ZSB0aGVzZSBjbGFzc2VzIG9ubHkgb25jZVxuXHRAaWYgJF9ncmlkbGVfZ2VuZXJhdGVPbmx5T25jZVxuXHR7XG5cblx0XHQvLyB1cGRhdGUgc3RhdHVzXG5cdFx0JF9ncmlkbGVfZ2VuZXJhdGVPbmx5T25jZSA6IGZhbHNlO1xuXG5cdFx0Ly8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyB8IFdpbmRvd3MgOCBmaXhcblx0XHQvLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0Ly8gV2luZG93cyA4IGZpeCBmb3Igc25hcCBtb2RlXG5cdFx0QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDAwcHgpIHtcblx0XHRcdEAtbXMtdmlld3BvcnQgeyB3aWR0aDogZGV2aWNlLXdpZHRoOyB9XG5cdFx0fVxuXG5cdFx0Ly8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0XHQvLyB8IEpTT04gU2V0dGluZ3Ncblx0XHQvLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cdFx0Ly8gZ2VuZXJhdGUganNvbiBzZXR0aW5nc1xuXHRcdEBpZiAkZ3JpZGxlLWdlbmVyYXRlLWpzb24tc2V0dGluZ3Ncblx0XHR7XG5cdFx0XHRAaW5jbHVkZSBncmlkbGVfZ2VuZXJhdGVfanNvbl9zZXR0aW5ncygpO1xuXHRcdH1cblxuXHR9XG5cblx0Ly8gbG9vcCBvbiBlYWNoIHN0YXRlcyB0byBnZW5lcmF0ZSBhbGwgdGhlIGNsYXNzZXNcblx0QGVhY2ggJHN0YXRlTmFtZSBpbiAkZ2VuZXJhdGUtc3RhdGVzIHtcblxuXHRcdC8vIGdldCB0aGUgYWN0dWFsIHN0YXRlXG5cdFx0JHN0YXRlIDogZ3JpZGxlX2dldF9zdGF0ZSgkc3RhdGVOYW1lKTtcblx0XHQkY2xhc3NlcyA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNsYXNzZXMsICRzdGF0ZSk7XG5cblx0XHQvLyBzdG9wIGhlcmUgaWYgbm8gY2xhc3NlcyB3YW50ZWRcblx0XHRAaWYgJGNsYXNzZXMge1xuXG5cdFx0XHQvLyBkZWJ1Z1xuXHRcdFx0Ly8gQGRlYnVnKFwiR2VuZXJhdGUgY2xhc3NlcyBmb3Igc3RhdGUgI3skc3RhdGVOYW1lfVwiKTtcblxuXHRcdFx0Ly8gc2NvcGUgYWxsIHRoZSBjbGFzc2VzIGluIGEgbWVkaWEgcXVlcnlcblx0XHRcdEBpbmNsdWRlIGdyaWRsZV9zdGF0ZSgkc3RhdGUsIGZhbHNlKSB7XG5cblx0XHRcdFx0Ly8gZ2VuZXJhdGUgYWxsIGNsYXNzZXMgZm9yIGNvbHVtbnNcblx0XHRcdFx0JGkgOiAwO1xuXHRcdFx0XHRAZWFjaCAkY29sdW1uTmFtZSwgJGNvbHVtbiBpbiBncmlkbGVfZ2V0X2NvbHVtbnMoJHN0YXRlKSB7XG5cblx0XHRcdFx0XHQvLyB2YXJpYWJsZXNcblx0XHRcdFx0XHQkY29sdW1uc0NvdW50IDogbWFwLWdldCgkY29sdW1uLCBjb2x1bW5zKTtcblx0XHRcdFx0XHQkY29sdW1uc0NvbnRleHQgOiBtYXAtZ2V0KCRjb2x1bW4sIGNvbnRleHQpO1xuXHRcdFx0XHRcdCRjb2x1bW5zTmFtZU11bHRpcGxpY2F0b3IgOiBtYXAtZ2V0KCRjb2x1bW4sIG5hbWUtbXVsdGlwbGljYXRvcik7XG5cblx0XHRcdFx0XHQvLyBleHRlbmQgY29udGV4dCBpbiBzdGF0ZSAoZm9yIGNvbHVtbnMpXG5cdFx0XHRcdFx0JGV4dGVuZGVkU3RhdGUgOiBtYXAtbWVyZ2UoJHN0YXRlLCAoXG5cdFx0XHRcdFx0XHRjb250ZXh0IDogJGNvbHVtbnNDb250ZXh0LFxuXHRcdFx0XHRcdFx0bmFtZS1tdWx0aXBsaWNhdG9yIDogJGNvbHVtbnNOYW1lTXVsdGlwbGljYXRvciAvLyBpbmplY3QgdGhlIG5hbWUgbXVsdGlwbGljYXRvciBoZXJlIGdldHRlZCBmcm9tIGNvbHVtbiB0byBoYW5kbGUgY3VzdG9tIHJlZ2lzdGVyZWQgY29sdW1uc1xuXHRcdFx0XHRcdCkpO1xuXG5cdFx0XHRcdFx0Ly8gY2xhc3Nlc1xuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoZ3JpZCwgJHBhY2thZ2UpIHtcblx0XHRcdFx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUoZ3JpZCwgJHN0YXRlTmFtZSwgJGNvbHVtbk5hbWUpfSB7XG5cdFx0XHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkKCRjb2x1bW5zQ291bnQsICRjb2x1bW5zQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUocHVzaCwgJHBhY2thZ2UpIHtcblx0XHRcdFx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUocHVzaCwgJHN0YXRlTmFtZSwgJGNvbHVtbk5hbWUpfSB7XG5cdFx0XHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9wdXNoKCRjb2x1bW5zQ291bnQsICRjb2x1bW5zQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUocHVsbCwgJHBhY2thZ2UpIHtcblx0XHRcdFx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUocHVsbCwgJHN0YXRlTmFtZSwgJGNvbHVtbk5hbWUpfSB7XG5cdFx0XHRcdFx0XHRcdEBpbmNsdWRlIGdyaWRsZV9wdWxsKCRjb2x1bW5zQ291bnQsICRjb2x1bW5zQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUocHJlZml4LCAkcGFja2FnZSkge1xuXHRcdFx0XHRcdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShwcmVmaXgsICRzdGF0ZU5hbWUsICRjb2x1bW5OYW1lKX0ge1xuXHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfcHJlZml4KCRjb2x1bW5zQ291bnQsICRjb2x1bW5zQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoc3VmZml4LCAkcGFja2FnZSkge1xuXHRcdFx0XHRcdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShzdWZmaXgsICRzdGF0ZU5hbWUsICRjb2x1bW5OYW1lKX0ge1xuXHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfc3VmZml4KCRjb2x1bW5zQ291bnQsICRjb2x1bW5zQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUob3JkZXIsICRwYWNrYWdlKSB7XG5cdFx0XHRcdFx0XHQje19ncmlkbGVfY2xhc3NuYW1lKG9yZGVyLCAkc3RhdGVOYW1lLCBmaXJzdCl9IHtcblx0XHRcdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX29yZGVyKC0xKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCN7X2dyaWRsZV9jbGFzc25hbWUob3JkZXIsICRzdGF0ZU5hbWUsICRpKX0ge1xuXHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfb3JkZXIoJGkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0I3tfZ3JpZGxlX2NsYXNzbmFtZShvcmRlciwgJHN0YXRlTmFtZSwgbGFzdCl9IHtcblx0XHRcdFx0XHRcdFx0QGluY2x1ZGUgZ3JpZGxlX29yZGVyKDk5OTkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB1cCAkaVxuXHRcdFx0XHRcdCRpIDogJGkgKyAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbWVkaWEgcXVlcmllcyBoZWxwZXJzIGNsYXNzZXNcblx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9nZW5lcmF0ZV9oZWxwZXJfY2xhc3Nlcygkc3RhdGVOYW1lLCAkcGFja2FnZSk7XG5cblx0XHRcdFx0Ly8gaGFuZGxlIGRpcmVjdGlvbiBvbiBib2R5XG5cdFx0XHRcdGJvZHkge1xuXHRcdFx0XHRcdGRpcmVjdGlvbjogZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyZWN0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGFwcGx5IGNzcyBmb3Igc3RhdGVzIG9mIGVhY2ggZWxlbWVudHNcblx0QGVhY2ggJG1hcCBpbiAkX2dyaWRsZV9hcHBseV9jc3NfZm9yIHtcblx0XHRAZWFjaCAkc3RhdGVOYW1lLCAkZm9ycyBpbiAkbWFwIHtcblx0XHRcdEBpbmNsdWRlIF9ncmlkbGVfc3RhdGUoJHN0YXRlTmFtZSwgZmFsc2UpIHtcblx0XHRcdFx0QGVhY2ggJGYsICRydWxlcyBpbiAkZm9ycyB7XG5cdFx0XHRcdFx0QGlmIG1hcC1nZXQoJGZvcnMsICRmKSB7XG5cdFx0XHRcdFx0XHRAaWYgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKCRmLCAkcGFja2FnZSkge1xuXHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfc2VsZWN0b3IoJGYsIG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRAaW5jbHVkZSBfZ3JpZGxlX21hcF8yX2NzcygkcnVsZXMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gbWFrZSBuZXN0ZWQgZ3JpZHMgd29ya2luZyBhdXRvbWF0aWNhbGx5XG5cdEBpZiBfZ3JpZGxlX25lZWRfdG9fZ2VuZXJhdGUoY29sLCAkcGFja2FnZSkgb3IgX2dyaWRsZV9uZWVkX3RvX2dlbmVyYXRlKHJvdywgJHBhY2thZ2UpIHtcblx0XHRAZWFjaCAkc3RhdGVOYW1lLCAkc3RhdGUgaW4gZ3JpZGxlX2dldF9zdGF0ZXMoKSB7XG5cdFx0XHQkY2xhc3NlcyA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGNsYXNzZXMsICRzdGF0ZSk7XG5cdFx0XHRAaWYgJGNsYXNzZXMge1xuXHRcdFx0XHQkZ3V0dGVyLWxlZnQgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihndXR0ZXItbGVmdCwgJHN0YXRlKTtcblx0XHRcdFx0JGd1dHRlci1yaWdodCA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGd1dHRlci1yaWdodCwgJHN0YXRlKTtcblx0XHRcdFx0QGluY2x1ZGUgX2dyaWRsZV9zdGF0ZSgkc3RhdGVOYW1lLCBmYWxzZSkge1xuXHRcdFx0XHRcdFtjbGFzcyo9XCIje3N0ci1zbGljZShfZ3JpZGxlX2NsYXNzbmFtZShncmlkKSwyKX1cIl0gPiBbY2xhc3MqPVwiI3tzdHItc2xpY2UoX2dyaWRsZV9jbGFzc25hbWUocm93KSwyKX1cIl0sXG5cdFx0XHRcdFx0W2NsYXNzKj1cIiN7c3RyLXNsaWNlKF9ncmlkbGVfY2xhc3NuYW1lKGdyaWQpLDIpfVwiXSA+IFtjbGFzcyo9XCIje3N0ci1zbGljZShfZ3JpZGxlX2NsYXNzbmFtZShjb2wpLDIpfVwiXSB7XG5cdFx0XHRcdFx0XHRtYXJnaW4tbGVmdDogLSN7JGd1dHRlci1sZWZ0fTtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLSN7JGd1dHRlci1yaWdodH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzZXQgdGhlIHZhcmlhYmxlIHRoYXQgdHJhY2sgaWYgd2UgYXJlIGluIGdlbmVyYXRlIHBoYXNlIG9yIG5vdFxuXHQkX2dyaWRsZV9pc19pbl9nZW5lcmF0ZV9waGFzZSA6IGZhbHNlICFnbG9iYWw7XG59XG4iLCIvLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8IERlZmF1bHQgc3RhdGVzXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBpZiAkZ3JpZGxlLWRlZmF1bHQtc3RhdGVzIHtcblx0Ly8gcmV0aW5hXG5cdEBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZShcInJldGluYVwiLCAoXG5cdFx0cXVlcnkgOiBcIigtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSksIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpXCIsXG5cdFx0Y2xhc3NlcyA6IGZhbHNlXG5cdCkgKTtcblxuXHQvLyB0dlxuXHRAaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfc3RhdGUoXCJ0dlwiLCAoXG5cdFx0cXVlcnkgOiBcIm9ubHkgdHZcIixcblx0XHRjbGFzc2VzIDogZmFsc2Vcblx0KSApO1xuXG5cdC8vIHByaW50XG5cdEBpbmNsdWRlIGdyaWRsZV9yZWdpc3Rlcl9zdGF0ZShcInByaW50XCIsIChcblx0XHRxdWVyeSA6IFwib25seSBwcmludFwiLFxuXHRcdGNsYXNzZXMgOiBmYWxzZVxuXHQpICk7XG5cblx0Ly8gcG9ydHJhaXRcblx0QGluY2x1ZGUgZ3JpZGxlX3JlZ2lzdGVyX3N0YXRlKFwicG9ydHJhaXRcIiwgKFxuXHRcdHF1ZXJ5IDogXCJvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcIixcblx0XHRjbGFzc2VzIDogZmFsc2Vcblx0KSApO1xuXG5cdC8vIGxhbmRzY2FwZVxuXHRAaW5jbHVkZSBncmlkbGVfcmVnaXN0ZXJfc3RhdGUoXCJsYW5kc2NhcGVcIiwgKFxuXHRcdHF1ZXJ5IDogXCJvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXCIsXG5cdFx0Y2xhc3NlcyA6IGZhbHNlXG5cdCkgKTtcbn0iLCIvL1xuLy8gUm93XG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3Jvdyhcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG5cdC8vIEZvciBtb2Rlcm4gYnJvd3NlclxuXHQmOmJlZm9yZSxcblx0JjphZnRlciB7XG5cdFx0Y29udGVudDpcIlwiO1xuXHRcdGRpc3BsYXk6dGFibGU7XG5cdH1cblx0JjphZnRlciB7XG5cdFx0Y2xlYXI6Ym90aDtcblx0fVxuXHQvLyBGb3IgSUUgNi83ICh0cmlnZ2VyIGhhc0xheW91dFxuXHQmIHtcblx0ICAgem9vbToxO1xuXHR9XG59XG5AbWl4aW4gZ3JpZGxlX3Jvdyhcblx0JHJldmVyc2UgOiBmYWxzZVxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChyb3cpIHtcblx0XHRwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG5cdFx0bWFyZ2luLWxlZnQ6IC0je2dyaWRsZV9nZXRfc3RhdGVfdmFyKGd1dHRlci1sZWZ0KX07XG5cdFx0bWFyZ2luLXJpZ2h0OiAtI3tncmlkbGVfZ2V0X3N0YXRlX3ZhcihndXR0ZXItcmlnaHQpfTtcblx0XHQvLyBmb250LXNpemU6MDsgLy8gdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBpbmxpbmUtYmxvY2sgbWFyZ2luc1xuXHRcblx0XHQje19ncmlkbGVfZ2V0X2dlbmVyaWNfc2VsZWN0b3Iobm8tZ3V0dGVyKX0gPiAmIHtcblx0XHRcdG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQvLyBkbyB0aGlzIG9ubHkgd2hlbiBub3QgaW4gZ2VuZXJhdGUgcGhhc2Vcblx0XHQvLyBtZWFuIHRoYXQgd2UgdXNlIHRoZSBtaXhpbiBkaXJlY3RseVxuXHRcdEBpZiBfZ3JpZGxlX2lzX2luX2dlbmVyYXRlX3BoYXNlKCkgPT0gZmFsc2Uge1xuXHRcdFx0QGVhY2ggJHN0YXRlTmFtZSwgJHN0YXRlIGluIGdyaWRsZV9nZXRfc3RhdGVzKCkge1xuXHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfc3RhdGUoJHN0YXRlKSB7XHRcblx0XHRcdFx0XHQmICN7c3RyLXJlcGxhY2UodW5xdW90ZShcIiN7Jn1cIiksXCIuc3RhdGUtI3tncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLCAkc3RhdGUpfVwiLFwiXCIpfSB7XG5cdFx0XHRcdFx0XHRtYXJnaW4tbGVmdDogLSN7Z3JpZGxlX2dldF9zdGF0ZV92YXIoZ3V0dGVyLWxlZnQsICRzdGF0ZSl9O1xuXHRcdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAtI3tncmlkbGVfZ2V0X3N0YXRlX3ZhcihndXR0ZXItcmlnaHQsICRzdGF0ZSl9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBDb2xcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fY29sKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cbkBtaXhpbiBncmlkbGVfY29sKFxuXHQkcmV2ZXJzZSA6IGZhbHNlXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKGNvbCkge1xuXHRcdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRcdHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDtcblx0XHRtYXJnaW4tbGVmdDogLSN7Z3JpZGxlX2dldF9zdGF0ZV92YXIoZ3V0dGVyLWxlZnQpfTtcblx0XHRtYXJnaW4tcmlnaHQ6IC0je2dyaWRsZV9nZXRfc3RhdGVfdmFyKGd1dHRlci1yaWdodCl9O1xuXHRcdC8vIGZvbnQtc2l6ZTowOyAvLyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGlubGluZS1ibG9jayBtYXJnaW5zXG5cblx0XHQvLyBkbyB0aGlzIG9ubHkgd2hlbiBub3QgaW4gZ2VuZXJhdGUgcGhhc2Vcblx0XHQvLyBtZWFuIHRoYXQgd2UgdXNlIHRoZSBtaXhpbiBkaXJlY3RseVxuXHRcdEBpZiBfZ3JpZGxlX2lzX2luX2dlbmVyYXRlX3BoYXNlKCkgPT0gZmFsc2Uge1xuXHRcdFx0QGVhY2ggJHN0YXRlTmFtZSwgJHN0YXRlIGluIGdyaWRsZV9nZXRfc3RhdGVzKCkge1xuXHRcdFx0XHRAaW5jbHVkZSBncmlkbGVfc3RhdGUoJHN0YXRlKSB7XHRcblx0XHRcdFx0XHQmICN7c3RyLXJlcGxhY2UoI3smfSxcIi5zdGF0ZS0je2dyaWRsZV9nZXRfc3RhdGVfdmFyKG5hbWUsICRzdGF0ZSl9XCIsXCJcIil9IHtcblx0XHRcdFx0XHRcdG1hcmdpbi1sZWZ0OiAtI3tncmlkbGVfZ2V0X3N0YXRlX3ZhcihndXR0ZXItbGVmdCwgJHN0YXRlKX07XG5cdFx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IC0je2dyaWRsZV9nZXRfc3RhdGVfdmFyKGd1dHRlci1yaWdodCwgJHN0YXRlKX07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIE5vd3JhcFxuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9ub3dyYXAoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG5cdD4gKiB7XG5cdFx0d2hpdGUtc3BhY2U6IG5vcm1hbDtcblx0fVxufVxuQG1peGluIGdyaWRsZV9ub3dyYXAoKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChub3dyYXApIHtcblx0fVxufVxuXG5cbi8vXG4vLyBXcmFwXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX3dyYXAoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHR3aGl0ZS1zcGFjZTpub3JtYWw7XG59XG5AbWl4aW4gZ3JpZGxlX3dyYXAoKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbCh3cmFwKSB7XG5cdH1cbn1cblxuXG4vL1xuLy8gR3JpZFxuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9ncmlkKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcblx0Ly8gdmFyc1xuXHQkZGlyZWN0aW9uIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyZWN0aW9uLCAkc3RhdGUpO1xuXHRcblx0Ly8gY3NzXG5cdGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuXHRtaW4taGVpZ2h0OjFweDtcblx0QGlmICRkaXJlY3Rpb24gPT0gcnRsIHtcblx0XHRmbG9hdDpyaWdodDtcblx0fSBAZWxzZSB7XG5cdFx0ZmxvYXQ6bGVmdDtcblx0fVxuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cdC8vIGZvbnQtc2l6ZToxcmVtOyAvLyByZXNldCB0aGUgZm9udCBzaXplXG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdEBpbmNsdWRlIGdyaWRsZV9ndXR0ZXIoKTtcblxuXHQvLyBoYW5kbGUgZGlyZWN0aW9uIGF0dHJpYnV0ZVxuXHRAaWYgZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyLWF0dHJpYnV0ZSwgJHN0YXRlKSB7XG5cdFx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblx0XHR9XG5cdFx0W2Rpcj1cImx0clwiXSAmIHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdH1cblx0fVxuXHRcbn1cbkBtaXhpbiBncmlkbGVfZ3JpZChcblx0JGNvbHVtbnMsXG5cdCRjb250ZXh0IDogbnVsbFxuKSB7XG5cdEBpZiAkY29sdW1ucyA9PSBncm93IHtcblx0XHRAaW5jbHVkZSBncmlkbGVfZ3JpZF9ncm93KCk7XG5cdH0gQGVsc2UgaWYgJGNvbHVtbnMgPT0gYWRhcHQge1xuXHRcdEBpbmNsdWRlIGdyaWRsZV9ncmlkX2FkYXB0KCk7XG5cdH0gQGVsc2Uge1xuXHRcdFxuXHRcdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChncmlkKSB7XG5cblx0XHRcdC8vIHZhcnNcblx0XHRcdCRuYW1lIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIobmFtZSk7XG5cdFx0XHRAaWYgdHlwZS1vZigkY29udGV4dCkgIT0gbnVtYmVyIHtcblx0XHRcdFx0JGNvbnRleHQgOiBncmlkbGVfZ2V0X3N0YXRlX3Zhcihjb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdCRuYW1lLW11bHRpcGxpY2F0b3IgOiBncmlkbGVfZ2V0X3N0YXRlX3ZhcihuYW1lLW11bHRpcGxpY2F0b3IpO1xuXHRcdFx0JGd1dHRlci1sZWZ0IDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoZ3V0dGVyLWxlZnQpO1xuXHRcdFx0JGd1dHRlci1yaWdodCA6IGdyaWRsZV9nZXRfc3RhdGVfdmFyKGd1dHRlci1yaWdodCk7XG5cdFx0XHQkY29sdW1uLXdpZHRoIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoY29sdW1uLXdpZHRoKTtcblxuXHRcdFx0Ly8gbWFuYWdlIGNvbHVtbnNcblx0XHRcdEBpZiB0eXBlLW9mKCRjb2x1bW5zKSAhPSBudW1iZXIgYW5kIGdyaWRsZV9oYXNfY29sdW1uKCRjb2x1bW5zKSB7XG5cdFx0XHRcdC8vIHRoZSBjb2x1bW5zIGlzIGEgc2F2ZWQgb25lLCBnZXQgdGhlIGNvbnRleHQgYW5kIGNvbHVtbiB2YWx1ZVxuXHRcdFx0XHQkY29sdW1uIDogbWFwLWdldCgkX2dyaWRsZV9jb2x1bW5zLCAkY29sdW1ucyk7XG5cdFx0XHRcdCRjb250ZXh0IDogbWFwLWdldCgkY29sdW1uLCBjb250ZXh0KTtcblx0XHRcdFx0JGNvbHVtbnMgOiBtYXAtZ2V0KCRjb2x1bW4sIGNvbHVtbnMpO1xuXHRcdFx0fSBAZWxzZSBpZiB0eXBlLW9mKCRjb2x1bW5zKSA9PSBudW1iZXIge1xuXHRcdFx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIGEgcmF0aW9cblx0XHRcdFx0QGlmICRjb2x1bW5zIDwgMSB7XG5cdFx0XHRcdFx0JGNvbHVtbnMgOiAkY29udGV4dCAvIDEwMCAqICgkY29sdW1ucyAqIDEwMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JGNvbHVtbnMgOiAkY29sdW1ucyAvICRuYW1lLW11bHRpcGxpY2F0b3I7XG5cdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0QGVycm9yIFwidGhlIGNvbHVtbiAjeyRjb2x1bW5zfSBkb2VzIG5vdCBleGlzdC4uLlwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3aWR0aCA6XG5cdFx0XHQkd2lkdGggOiAwO1xuXHRcdFx0QGlmICRjb2x1bW4td2lkdGgge1xuXHRcdFx0XHQkd2lkdGggOiAkY29sdW1uLXdpZHRoICogJGNvbHVtbnM7XG5cdFx0XHR9IEBlbHNlIHtcblx0XHRcdFx0JHdpZHRoIDogcGVyY2VudGFnZSgxIC8gJGNvbnRleHQgKiAkY29sdW1ucyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCB2YWx1ZSA6XG5cdFx0XHR3aWR0aDokd2lkdGg7XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIEdyaWQgdGFibGVcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fZ3JpZF90YWJsZShcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG59XG5AbWl4aW4gZ3JpZGxlX2dyaWRfdGFibGUoXG4pIHtcblx0QGluY2x1ZGUgX2dyaWRsZV9jYWxsKGdyaWQtdGFibGUpIHtcblx0XHRkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXHRcdGZsb2F0OiBub25lO1xuXHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdH1cbn1cblxuXG4vL1xuLy8gUm93IGZ1bGxcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fcm93X2Z1bGwoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xufVxuQG1peGluIGdyaWRsZV9yb3dfZnVsbChcbikge1xuXHRAaW5jbHVkZSBfZ3JpZGxlX2NhbGwocm93LWZ1bGwpIHtcblx0XHQkZGlyZWN0aW9uIDogZ3JpZGxlX2dldF9zdGF0ZV92YXIoZGlyZWN0aW9uKTtcblx0XHR3aWR0aDogMTAwdnc7XG5cdFx0QGlmICRkaXJlY3Rpb24gPT0gbHRyIHtcblx0XHRcdG1hcmdpbi1sZWZ0OjUwJSAhaW1wb3J0YW50O1xuXHRcdFx0bWFyZ2luLXJpZ2h0OjAgIWltcG9ydGFudDtcblx0XHRcdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblx0XHRcdFx0LW1vei10cmFuc2l0aW9uOiB0cmFuc2xhdGVYKC01MCUpO1xuXHRcdFx0XHQtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXHRcdFx0XHQtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdFx0XHR9XG5cdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6NTAlICFpbXBvcnRhbnQ7XG5cdFx0XHRtYXJnaW4tbGVmdDowICFpbXBvcnRhbnQ7XG5cdFx0XHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHRcdFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTtcblx0XHRcdFx0LW1vei10cmFuc2l0aW9uOiB0cmFuc2xhdGVYKDUwJSk7XG5cdFx0XHRcdC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTtcblx0XHRcdFx0LW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwJSk7XG5cdFx0XHR9XG5cdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTtcblx0XHR9XG5cdFx0QGlmIGdyaWRsZV9nZXRfc3RhdGVfdmFyKGRpci1hdHRyaWJ1dGUpIHtcblx0XHRcdFtkaXI9XCJsdHJcIl0gJiB7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OjUwJSAhaW1wb3J0YW50O1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6MCAhaW1wb3J0YW50O1xuXHRcdFx0XHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHRcdFx0XHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblx0XHRcdFx0XHQtbW96LXRyYW5zaXRpb246IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdFx0XHRcdFx0LW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblx0XHRcdFx0XHQtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXHRcdFx0fVxuXHRcdFx0W2Rpcj1cInJ0bFwiXSAmIHtcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OjUwJSAhaW1wb3J0YW50O1xuXHRcdFx0XHRtYXJnaW4tbGVmdDowICFpbXBvcnRhbnQ7XG5cdFx0XHRcdEBpZiAkZ3JpZGxlLXZlbmRvci1wcmVmaXgge1xuXHRcdFx0XHRcdC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwJSk7XG5cdFx0XHRcdFx0LW1vei10cmFuc2l0aW9uOiB0cmFuc2xhdGVYKDUwJSk7XG5cdFx0XHRcdFx0LW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpO1xuXHRcdFx0XHRcdC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5cbi8vXG4vLyBncmlkIGFkYXB0XG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2dyaWRfYWRhcHQoXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHRkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXHR3aWR0aDoxcHg7XG5cdHdoaXRlLXNwYWNlOm5vd3JhcCAhaW1wb3J0YW50O1xuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdGZvbnQtc2l6ZTogMXJlbTtcblx0QGluY2x1ZGUgZ3JpZGxlX2d1dHRlcigpO1xufVxuQG1peGluIGdyaWRsZV9ncmlkX2FkYXB0KFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChncmlkLWFkYXB0KSB7XG5cdH1cbn1cblxuXG4vL1xuLy8gR3Jvd1xuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9ncmlkX2dyb3coXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xuXHRkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXHR3aWR0aDo5OTk5OXB4O1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRAaWYgJGdyaWRsZS12ZW5kb3ItcHJlZml4IHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdGZvbnQtc2l6ZTogMXJlbTtcblx0QGluY2x1ZGUgZ3JpZGxlX2d1dHRlcigpO1xuXHRcbn1cbkBtaXhpbiBncmlkbGVfZ3JpZF9ncm93KFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChncmlkLWdyb3cpIHtcblx0fVxufVxuXG5cbi8vXG4vLyBPcmRlclxuLy9cbkBtaXhpbiBfZ3JpZGxlX2NvbW1vbl9vcmRlcihcblx0JHN0YXRlIDogZGVmYXVsdFxuKSB7XG59XG5AbWl4aW4gZ3JpZGxlX29yZGVyKFxuXHQkcG9zaXRpb25cbikge1xuXHRAaW5jbHVkZSBfZ3JpZGxlX2NhbGwob3JkZXIpIHtcblx0fVxufVxuXG5cbi8vXG4vLyBDbGVhciBlYWNoXG4vL1xuQG1peGluIF9ncmlkbGVfY29tbW9uX2NsZWFyX2VhY2goXG5cdCRzdGF0ZSA6IGRlZmF1bHRcbikge1xufVxuQG1peGluIGdyaWRsZV9jbGVhcl9lYWNoKFxuXHQkY2xlYXJFYWNoLFxuXHQkY2xlYXJXaGF0IDogYm90aFxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChjbGVhci1lYWNoKSB7XG5cdFx0JGdyaWQgOiBtYXAtZ2V0KCRfZ3JpZGxlLXBhY2thZ2VzLCBncmlkKTtcblx0XHQkc2VsIDogbWFwLWdldCgkZ3JpZCwgZ2VuZXJpYy1zZWxlY3Rvcik7XG5cdFx0QGlmIG5vdCAkc2VsIHtcblx0XHRcdCRzZWwgOiBfZ3JpZGxlX2dldF9nZW5lcmljX3NlbGVjdG9yKGdyaWQpO1xuXHRcdH1cblxuXHRcdD4gI3skc2VsfTpudGgtb2YtdHlwZSgjeyRjbGVhckVhY2h9bisxKSB7XG5cdFx0XHRjbGVhciA6ICRjbGVhcldoYXQ7XG5cdFx0fVxuXHR9XG59XG5cblxuLy9cbi8vIEFsaWduIDpcbi8vXG5AbWl4aW4gX2dyaWRsZV9jb21tb25fcm93X2FsaWduKFxuXHQkc3RhdGUgOiBkZWZhdWx0XG4pIHtcbn1cblxuQG1peGluIGdyaWRsZV9yb3dfYWxpZ24oXG5cdCRhbGlnbiA6IG1pZGRsZVxuKSB7XG5cdEBpbmNsdWRlIF9ncmlkbGVfY2FsbChyb3ctYWxpZ24pIHtcblx0XHQvLyBuZWVkIHRvIGNoYW5nZSB0aGUgd2F5IGdyaWRzIGl0ZW1zIGFyZSBsYXllZCBvdXRcblx0XHRAaWYgaW4tbWFwKCRhbGlnbiwgdG9wKSBvZiBpbi1tYXAoJGFsaWduLCBtaWRkbGUpIG9yIGluLW1hcCgkYWxpZ24sIGJvdHRvbSkge1xuXHRcdFx0Zm9udC1zaXplOjA7XG5cdFx0XHRjbGVhcjpib3RoO1xuXG5cdFx0XHQ+ICoge1xuXHRcdFx0XHRmbG9hdDpub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdEBpZiBpbi1tYXAoJGFsaWduLCB0b3ApIHtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjp0b3A7XG5cdFx0XHRcdH0gQGVsc2VpZiBpbi1tYXAoJGFsaWduLCBtaWRkbGUpIHtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7XG5cdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOmJvdHRvbTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb250LXNpemU6MXJlbTtcblx0XHRcdFx0QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpIHtcblx0XHRcdFx0XHQmIHtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogLTAuNXB4OyAvLyBmaXggZmlyZWZveCB3ZWlyZCBpc3N1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gXG5cblx0XHRAZWFjaCAkYSBpbiAkYWxpZ24ge1xuXHRcdFx0QGlmICRhID09IGxlZnQge1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdFx0fSBAZWxzZSBpZiAkYSA9PSBjZW50ZXIge1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHR9IEBlbHNlIGlmICRhID09IHJpZ2h0IHtcblx0XHRcdFx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFx0XHR9IEBlbHNlIGlmICRhID09IHRvcCB7XG5cdFx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHR9IEBlbHNlIGlmICRhID09IG1pZGRsZSB7XG5cdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHR9IEBlbHNlIGlmICRhID09IGJvdHRvbSB7XG5cdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBib3R0b207XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0QGlmIGluLW1hcCgkYWxpZ24sIGNlbnRlcikgb3IgaW4tbWFwKCRhbGlnbiwgcmlnaHQpIHtcblx0XHRcdC8vIHJlc3RvcmUgdGV4dCBhbGlnbiBvZiB0aGUgZ3JpZCBpdGVtc1xuXHRcdFx0PiAqIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0iXSwibWFwcGluZ3MiOiJBUzhNRSxVQUFVLEFEcWFWLE1BQU0sQ0FBQztFQUNQLE9BQU8sRUFBRSxFQUFHO0VBQ1osT0FBTyxFQUFFLEtBQU07RUFDZixLQUFLLEVBQUUsSUFBSyxHQUNaOztBQ25hQSxJQUFJLEFFN01KLE9BQU8sRUZnTlAsWUFBWSxBRWhOWixPQUFPLEVGNk1QLElBQUksQUU1TUosTUFBTSxFRitNTixZQUFZLEFFL01aLE1BQU0sQ0FBQztFQUNQLE9BQU8sRUFBQyxFQUFHO0VBQ1gsT0FBTyxFQUFDLEtBQU0sR0FDZDs7QUZ5TUEsSUFBSSxBRXhNSixNQUFNLEVGMk1OLFlBQVksQUUzTVosTUFBTSxDQUFDO0VBQ1AsS0FBSyxFQUFDLElBQUssR0FDWDs7QUZzTUEsSUFBSSxFQUdKLFlBQVksQ0V2TVg7RUFDQyxJQUFJLEVBQUMsQ0FBRSxHQUNUOztBRnNoQkksUUFBUSxFQUFSLEtBQUssRUFBTCxLQUFLLEVBQUwsS0FBSyxFQUFMLEtBQUssRUFBTCxLQUFLLEVBQUwsS0FBSyxFQUFMLEtBQUssRUFBTCxLQUFLLEVBQUwsS0FBSyxFQUFMLEtBQUssRUFBTCxNQUFNLEVBQU4sTUFBTSxFQUFOLE1BQU0sQ0YvZlY7RUlxRkQsT0FBTyxFQUFDLFlBQWE7RUFDckIsVUFBVSxFQUFDLEdBQUk7RUFJZCxLQUFLLEVBQUMsSUFBSztFQUdYLGtCQUFrQixFQUFFLFVBQVc7RUFDL0IsZUFBZSxFQUFFLFVBQVc7RUFHN0IsVUFBVSxFQUFFLFVBQVc7RUFDdkIsY0FBYyxFQUFFLEdBQUk7RUg2cEJqQixhQUFnQixFSHZXMkIsSUFBYTtFR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0VwWnhEOztBRXNNRCxTQUFTLENGek1UO0VJeVBELE9BQU8sRUFBRSxVQUFXO0VBQ3BCLEtBQUssRUFBQyxHQUFJO0VBQ1YsV0FBVyxFQUFDLGlCQUFrQjtFQUU3QixrQkFBa0IsRUFBRSxVQUFXO0VBQy9CLGVBQWUsRUFBRSxVQUFXO0VBRTdCLFVBQVUsRUFBRSxVQUFXO0VBQ3ZCLFNBQVMsRUFBRSxJQUFLO0VIOGZiLGFBQWdCLEVIdlcyQixJQUFhO0VHdVd4RCxZQUFnQixFSHhXMEIsSUFBYSxHRXBaeEQ7O0FFNE1ELFFBQVEsQ0YvTVI7RUlpUkQsT0FBTyxFQUFFLFVBQVc7RUFDcEIsS0FBSyxFQUFDLE9BQVE7RUFDZCxXQUFXLEVBQUUsTUFBTztFQUVuQixrQkFBa0IsRUFBRSxVQUFXO0VBQy9CLGVBQWUsRUFBRSxVQUFXO0VBRTdCLFVBQVUsRUFBRSxVQUFXO0VBQ3ZCLFNBQVMsRUFBRSxJQUFLO0VIc2ViLGFBQWdCLEVIdlcyQixJQUFhO0VHdVd4RCxZQUFnQixFSHhXMEIsSUFBYSxHRXBaeEQ7O0FFaWdCRyxVQUFVLEVBQVYsT0FBTyxFQUFQLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLFFBQVEsRUFBUixRQUFRLEVBQVIsUUFBUSxDRnBnQlo7RUMwUkQsUUFBUSxFQUFDLFFBQVMsR0R2UmhCOztBRXNnQkcsVUFBVSxFQUFWLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLE9BQU8sRUFBUCxPQUFPLEVBQVAsT0FBTyxFQUFQLE9BQU8sRUFBUCxRQUFRLEVBQVIsUUFBUSxFQUFSLFFBQVEsQ0Z6Z0JaO0VDd1ZELFFBQVEsRUFBQyxRQUFTLEdEclZoQjs7QUVrUEQsT0FBTyxDRnJQUDtFSWlERCxXQUFXLEVBQUUsTUFBTyxHSjlDbEI7RUVrUEQsT0FBTyxHRWxNTixDQUFDLENBQUM7SUFDSCxXQUFXLEVBQUUsTUFBTyxHQUNwQjs7QUZxTUEsS0FBSyxDRjFQTDtFSW1FRCxXQUFXLEVBQUMsTUFBTyxHSmhFakI7O0FFNEpELFlBQVksQ0YvSlo7RUM4bEJELE9BQU8sRUFBQyxnQkFBaUI7RUFDekIsS0FBSyxFQUFDLGVBQWdCO0VBQ3RCLFdBQVcsRUFBQyxlQUFnQjtFQUM1QixZQUFZLEVBQUMsZUFBZ0I7RUFDN0IsS0FBSyxFQUFDLGVBQWdCLEdEL2xCcEI7O0FBeEJHLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07RUUwTGpDLG1CQUFtQixBRHFhbkIsTUFBTSxDQUFDO0lBQ1AsT0FBTyxFQUFFLEVBQUc7SUFDWixPQUFPLEVBQUUsS0FBTTtJQUNmLEtBQUssRUFBRSxJQUFLLEdBQ1o7O0FEbm1CSSxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNO0VFZ01qQyxhQUFhLEFFN01iLE9BQU8sRUZnTlAscUJBQXFCLEFFaE5yQixPQUFPLEVGNk1QLGFBQWEsQUU1TWIsTUFBTSxFRitNTixxQkFBcUIsQUUvTXJCLE1BQU0sQ0FBQztJQUNQLE9BQU8sRUFBQyxFQUFHO0lBQ1gsT0FBTyxFQUFDLEtBQU0sR0FDZDtFRnlNQSxhQUFhLEFFeE1iLE1BQU0sRUYyTU4scUJBQXFCLEFFM01yQixNQUFNLENBQUM7SUFDUCxLQUFLLEVBQUMsSUFBSyxHQUNYO0VGc01BLGFBQWEsRUFHYixxQkFBcUIsQ0V2TXBCO0lBQ0MsSUFBSSxFQUFDLENBQUUsR0FDVDs7QUpFSSxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNO0VFb2hCN0IsaUJBQWlCLEVBQWpCLGNBQWMsRUFBZCxjQUFjLEVBQWQsY0FBYyxFQUFkLGNBQWMsRUFBZCxjQUFjLEVBQWQsY0FBYyxFQUFkLGNBQWMsRUFBZCxjQUFjLEVBQWQsY0FBYyxFQUFkLGNBQWMsRUFBZCxlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsQ0YvZm5CO0lJcUZELE9BQU8sRUFBQyxZQUFhO0lBQ3JCLFVBQVUsRUFBQyxHQUFJO0lBSWQsS0FBSyxFQUFDLElBQUs7SUFHWCxrQkFBa0IsRUFBRSxVQUFXO0lBQy9CLGVBQWUsRUFBRSxVQUFXO0lBRzdCLFVBQVUsRUFBRSxVQUFXO0lBQ3ZCLGNBQWMsRUFBRSxHQUFJO0lINnBCakIsYUFBZ0IsRUh2VzJCLElBQWE7SUd1V3hELFlBQWdCLEVIeFcwQixJQUFhLEdFcFp4RDs7QUF4QkcsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFRThOakMsa0JBQWtCLENGek1sQjtJSXlQRCxPQUFPLEVBQUUsVUFBVztJQUNwQixLQUFLLEVBQUMsR0FBSTtJQUNWLFdBQVcsRUFBQyxpQkFBa0I7SUFFN0Isa0JBQWtCLEVBQUUsVUFBVztJQUMvQixlQUFlLEVBQUUsVUFBVztJQUU3QixVQUFVLEVBQUUsVUFBVztJQUN2QixTQUFTLEVBQUUsSUFBSztJSDhmYixhQUFnQixFSHZXMkIsSUFBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0VwWnhEOztBQXhCRyxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNO0VFb09qQyxpQkFBaUIsQ0YvTWpCO0lJaVJELE9BQU8sRUFBRSxVQUFXO0lBQ3BCLEtBQUssRUFBQyxPQUFRO0lBQ2QsV0FBVyxFQUFFLE1BQU87SUFFbkIsa0JBQWtCLEVBQUUsVUFBVztJQUMvQixlQUFlLEVBQUUsVUFBVztJQUU3QixVQUFVLEVBQUUsVUFBVztJQUN2QixTQUFTLEVBQUUsSUFBSztJSHNlYixhQUFnQixFSHZXMkIsSUFBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0VwWnhEOztBQXhCRyxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNO0VFeWhCN0IsbUJBQW1CLEVBQW5CLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixpQkFBaUIsRUFBakIsaUJBQWlCLEVBQWpCLGlCQUFpQixDRnBnQnJCO0lDMFJELFFBQVEsRUFBQyxRQUFTLEdEdlJoQjs7QUF4QkcsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFRThoQjdCLG1CQUFtQixFQUFuQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsRUFBaEIsaUJBQWlCLEVBQWpCLGlCQUFpQixFQUFqQixpQkFBaUIsQ0Z6Z0JyQjtJQ3dWRCxRQUFRLEVBQUMsUUFBUyxHRHJWaEI7O0FBeEJHLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07RUUwUWpDLGdCQUFnQixDRnJQaEI7SUlpREQsV0FBVyxFQUFFLE1BQU8sR0o5Q2xCO0lFa1BELGdCQUFnQixHRWxNZixDQUFDLENBQUM7TUFDSCxXQUFXLEVBQUUsTUFBTyxHQUNwQjs7QUoxRUksTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFRStRakMsY0FBYyxDRjFQZDtJSW1FRCxXQUFXLEVBQUMsTUFBTyxHSmhFakI7O0FBeEJHLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07RUVvTGpDLHFCQUFxQixDRi9KckI7SUM4bEJELE9BQU8sRUFBQyxnQkFBaUI7SUFDekIsS0FBSyxFQUFDLGVBQWdCO0lBQ3RCLFdBQVcsRUFBQyxlQUFnQjtJQUM1QixZQUFZLEVBQUMsZUFBZ0I7SUFDN0IsS0FBSyxFQUFDLGVBQWdCLEdEL2xCcEI7O0FBeEJHLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RUUwTGhDLGtCQUFrQixBRHFhbEIsTUFBTSxDQUFDO0lBQ1AsT0FBTyxFQUFFLEVBQUc7SUFDWixPQUFPLEVBQUUsS0FBTTtJQUNmLEtBQUssRUFBRSxJQUFLLEdBQ1o7O0FEbm1CSSxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFZ01oQyxZQUFZLEFFN01aLE9BQU8sRUZnTlAsb0JBQW9CLEFFaE5wQixPQUFPLEVGNk1QLFlBQVksQUU1TVosTUFBTSxFRitNTixvQkFBb0IsQUUvTXBCLE1BQU0sQ0FBQztJQUNQLE9BQU8sRUFBQyxFQUFHO0lBQ1gsT0FBTyxFQUFDLEtBQU0sR0FDZDtFRnlNQSxZQUFZLEFFeE1aLE1BQU0sRUYyTU4sb0JBQW9CLEFFM01wQixNQUFNLENBQUM7SUFDUCxLQUFLLEVBQUMsSUFBSyxHQUNYO0VGc01BLFlBQVksRUFHWixvQkFBb0IsQ0V2TW5CO0lBQ0MsSUFBSSxFQUFDLENBQUUsR0FDVDs7QUpFSSxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFb2hCNUIsZ0JBQWdCLEVBQWhCLGFBQWEsRUFBYixhQUFhLEVBQWIsYUFBYSxFQUFiLGFBQWEsRUFBYixhQUFhLEVBQWIsYUFBYSxFQUFiLGFBQWEsRUFBYixhQUFhLEVBQWIsYUFBYSxFQUFiLGFBQWEsRUFBYixjQUFjLEVBQWQsY0FBYyxFQUFkLGNBQWMsQ0YvZmxCO0lJcUZELE9BQU8sRUFBQyxZQUFhO0lBQ3JCLFVBQVUsRUFBQyxHQUFJO0lBSWQsS0FBSyxFQUFDLElBQUs7SUFHWCxrQkFBa0IsRUFBRSxVQUFXO0lBQy9CLGVBQWUsRUFBRSxVQUFXO0lBRzdCLFVBQVUsRUFBRSxVQUFXO0lBQ3ZCLGNBQWMsRUFBRSxHQUFJO0lINnBCakIsYUFBZ0IsRUh2VzJCLElBQWE7SUd1V3hELFlBQWdCLEVIeFcwQixJQUFhLEdFcFp4RDs7QUF4QkcsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSztFRThOaEMsaUJBQWlCLENGek1qQjtJSXlQRCxPQUFPLEVBQUUsVUFBVztJQUNwQixLQUFLLEVBQUMsR0FBSTtJQUNWLFdBQVcsRUFBQyxpQkFBa0I7SUFFN0Isa0JBQWtCLEVBQUUsVUFBVztJQUMvQixlQUFlLEVBQUUsVUFBVztJQUU3QixVQUFVLEVBQUUsVUFBVztJQUN2QixTQUFTLEVBQUUsSUFBSztJSDhmYixhQUFnQixFSHZXMkIsSUFBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0VwWnhEOztBQXhCRyxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFb09oQyxnQkFBZ0IsQ0YvTWhCO0lJaVJELE9BQU8sRUFBRSxVQUFXO0lBQ3BCLEtBQUssRUFBQyxPQUFRO0lBQ2QsV0FBVyxFQUFFLE1BQU87SUFFbkIsa0JBQWtCLEVBQUUsVUFBVztJQUMvQixlQUFlLEVBQUUsVUFBVztJQUU3QixVQUFVLEVBQUUsVUFBVztJQUN2QixTQUFTLEVBQUUsSUFBSztJSHNlYixhQUFnQixFSHZXMkIsSUFBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0VwWnhEOztBQXhCRyxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFeWhCNUIsa0JBQWtCLEVBQWxCLGVBQWUsRUFBZixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixnQkFBZ0IsRUFBaEIsZ0JBQWdCLEVBQWhCLGdCQUFnQixDRnBnQnBCO0lDMFJELFFBQVEsRUFBQyxRQUFTLEdEdlJoQjs7QUF4QkcsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSztFRThoQjVCLGtCQUFrQixFQUFsQixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixlQUFlLEVBQWYsZUFBZSxFQUFmLGVBQWUsRUFBZixlQUFlLEVBQWYsZ0JBQWdCLEVBQWhCLGdCQUFnQixFQUFoQixnQkFBZ0IsQ0Z6Z0JwQjtJQ3dWRCxRQUFRLEVBQUMsUUFBUyxHRHJWaEI7O0FBeEJHLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RUUwUWhDLGVBQWUsQ0ZyUGY7SUlpREQsV0FBVyxFQUFFLE1BQU8sR0o5Q2xCO0lFa1BELGVBQWUsR0VsTWQsQ0FBQyxDQUFDO01BQ0gsV0FBVyxFQUFFLE1BQU8sR0FDcEI7O0FKMUVJLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RUUrUWhDLGFBQWEsQ0YxUGI7SUltRUQsV0FBVyxFQUFDLE1BQU8sR0poRWpCOztBQXhCRyxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFb0xoQyxvQkFBb0IsQ0YvSnBCO0lDOGxCRCxPQUFPLEVBQUMsZ0JBQWlCO0lBQ3pCLEtBQUssRUFBQyxlQUFnQjtJQUN0QixXQUFXLEVBQUMsZUFBZ0I7SUFDNUIsWUFBWSxFQUFDLGVBQWdCO0lBQzdCLEtBQUssRUFBQyxlQUFnQixHRC9sQnBCOztBRTJjRCxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VBQzNCLGFBQWE7SUFBRyxLQUFLLEVBQUUsWUFBYTs7QUFuRnRDLGdCQUFnQixDQUFDO0VBQ2hCLE9BQU8sRUFGVyxnMkNBQXVCLEdBR3pDOztBQWlJSSxRQUFRLENBQVI7RUVoV0gsS0FBSyxFQUpLLEdBQVUsR0ZzV2hCOztBQUdELFVBQVUsQ0FBVjtFRGpNSSxJQUFJLEVBWkYsR0FBVSxHQytNZjs7QUFHRCxVQUFVLENBQVY7RUR4SUksS0FBSyxFQVpILEdBQVUsR0NzSmY7O0FBR0QsWUFBWSxDQUFaO0VEeEZJLFdBQVcsRUFMVCxHQUFVLEdDK0ZmOztBQUdELFlBQVksQ0FBWjtFRHpDSSxZQUFZLEVBTFYsR0FBVSxHQ2dEZjs7QUF0QkQsS0FBSyxDQUFMO0VFaFdILEtBQUssRUFKSyxFQUFVLEdGc1doQjs7QUFHRCxPQUFPLENBQVA7RURqTUksSUFBSSxFQVpGLEVBQVUsR0MrTWY7O0FBR0QsT0FBTyxDQUFQO0VEeElJLEtBQUssRUFaSCxFQUFVLEdDc0pmOztBQUdELFNBQVMsQ0FBVDtFRHhGSSxXQUFXLEVBTFQsRUFBVSxHQytGZjs7QUFHRCxTQUFTLENBQVQ7RUR6Q0ksWUFBWSxFQUxWLEVBQVUsR0NnRGY7O0FBdEJELEtBQUssQ0FBTDtFRWhXSCxLQUFLLEVBSkssUUFBVSxHRnNXaEI7O0FBR0QsT0FBTyxDQUFQO0VEak1JLElBQUksRUFaRixRQUFVLEdDK01mOztBQUdELE9BQU8sQ0FBUDtFRHhJSSxLQUFLLEVBWkgsUUFBVSxHQ3NKZjs7QUFHRCxTQUFTLENBQVQ7RUR4RkksV0FBVyxFQUxULFFBQVUsR0MrRmY7O0FBR0QsU0FBUyxDQUFUO0VEekNJLFlBQVksRUFMVixRQUFVLEdDZ0RmOztBQXRCRCxLQUFLLENBQUw7RUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCOztBQUdELE9BQU8sQ0FBUDtFRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjs7QUFHRCxPQUFPLENBQVA7RUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7O0FBR0QsU0FBUyxDQUFUO0VEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmOztBQUdELFNBQVMsQ0FBVDtFRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjs7QUF0QkQsS0FBSyxDQUFMO0VFaFdILEtBQUssRUFKSyxHQUFVLEdGc1doQjs7QUFHRCxPQUFPLENBQVA7RURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7O0FBR0QsT0FBTyxDQUFQO0VEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmOztBQUdELFNBQVMsQ0FBVDtFRHhGSSxXQUFXLEVBTFQsR0FBVSxHQytGZjs7QUFHRCxTQUFTLENBQVQ7RUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7O0FBdEJELEtBQUssQ0FBTDtFRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7O0FBR0QsT0FBTyxDQUFQO0VEak1JLElBQUksRUFaRixTQUFVLEdDK01mOztBQUdELE9BQU8sQ0FBUDtFRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjs7QUFHRCxTQUFTLENBQVQ7RUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7O0FBR0QsU0FBUyxDQUFUO0VEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmOztBQXRCRCxLQUFLLENBQUw7RUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCOztBQUdELE9BQU8sQ0FBUDtFRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjs7QUFHRCxPQUFPLENBQVA7RUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7O0FBR0QsU0FBUyxDQUFUO0VEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmOztBQUdELFNBQVMsQ0FBVDtFRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjs7QUF0QkQsS0FBSyxDQUFMO0VFaFdILEtBQUssRUFKSyxHQUFVLEdGc1doQjs7QUFHRCxPQUFPLENBQVA7RURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7O0FBR0QsT0FBTyxDQUFQO0VEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmOztBQUdELFNBQVMsQ0FBVDtFRHhGSSxXQUFXLEVBTFQsR0FBVSxHQytGZjs7QUFHRCxTQUFTLENBQVQ7RUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7O0FBdEJELEtBQUssQ0FBTDtFRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7O0FBR0QsT0FBTyxDQUFQO0VEak1JLElBQUksRUFaRixTQUFVLEdDK01mOztBQUdELE9BQU8sQ0FBUDtFRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjs7QUFHRCxTQUFTLENBQVQ7RUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7O0FBR0QsU0FBUyxDQUFUO0VEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmOztBQXRCRCxLQUFLLENBQUw7RUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCOztBQUdELE9BQU8sQ0FBUDtFRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjs7QUFHRCxPQUFPLENBQVA7RUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7O0FBR0QsU0FBUyxDQUFUO0VEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmOztBQUdELFNBQVMsQ0FBVDtFRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjs7QUF0QkQsS0FBSyxDQUFMO0VFaFdILEtBQUssRUFKSyxHQUFVLEdGc1doQjs7QUFHRCxPQUFPLENBQVA7RURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7O0FBR0QsT0FBTyxDQUFQO0VEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmOztBQUdELFNBQVMsQ0FBVDtFRHhGSSxXQUFXLEVBTFQsR0FBVSxHQytGZjs7QUFHRCxTQUFTLENBQVQ7RUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7O0FBdEJELE1BQU0sQ0FBTjtFRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7O0FBR0QsUUFBUSxDQUFSO0VEak1JLElBQUksRUFaRixTQUFVLEdDK01mOztBQUdELFFBQVEsQ0FBUjtFRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjs7QUFHRCxVQUFVLENBQVY7RUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7O0FBR0QsVUFBVSxDQUFWO0VEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmOztBQXRCRCxNQUFNLENBQU47RUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCOztBQUdELFFBQVEsQ0FBUjtFRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjs7QUFHRCxRQUFRLENBQVI7RUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7O0FBR0QsVUFBVSxDQUFWO0VEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmOztBQUdELFVBQVUsQ0FBVjtFRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjs7QUF0QkQsTUFBTSxDQUFOO0VFaFdILEtBQUssRUFKSyxJQUFVLEdGc1doQjs7QUFHRCxRQUFRLENBQVI7RURqTUksSUFBSSxFQVpGLElBQVUsR0MrTWY7O0FBR0QsUUFBUSxDQUFSO0VEeElJLEtBQUssRUFaSCxJQUFVLEdDc0pmOztBQUdELFVBQVUsQ0FBVjtFRHhGSSxXQUFXLEVBTFQsSUFBVSxHQytGZjs7QUFHRCxVQUFVLENBQVY7RUR6Q0ksWUFBWSxFQUxWLElBQVUsR0NnRGY7O0FBcmJMLFdBQVcsQ0FBWDtFRHNtQkEsS0FBSyxFQUFBLElBQUMsR0NwbUJMOztBQUNELFlBQVksQ0FBWjtFRG1tQkEsS0FBSyxFQUFBLEtBQUMsR0NqbUJMOztBQUlELE1BQU0sQ0FBTjtFRDZtQkEsS0FBSyxFQUFBLElBQUMsR0MzbUJMOztBQUNELFdBQVcsQ0FBWDtFRDBtQkEsS0FBSyxFQUFBLElBQUMsR0N4bUJMOztBQUNELFlBQVksQ0FBWjtFRHVtQkEsS0FBSyxFQUFBLEtBQUMsR0NybUJMOztBQUlELFVBQVUsQ0FBVjtFRGtuQkMsV0FBYSxFQUFXLENBQUU7RUFBMUIsYUFBYSxFQUFXLENBQUU7RUFBMUIsY0FBYSxFQUFXLENBQUU7RUFBMUIsWUFBYSxFQUFXLENBQUUsR0NobkIxQjs7QUFDRCxlQUFlLENBQWY7RUQrbUJDLFlBQWEsRUFBVyxDQUFFLEdDN21CMUI7O0FBQ0QsZ0JBQWdCLENBQWhCO0VENG1CQyxhQUFhLEVBQVcsQ0FBRSxHQzFtQjFCOztBQUNELGNBQWMsQ0FBZDtFRHltQkMsV0FBYSxFQUFXLENBQUUsR0N2bUIxQjs7QUFDRCxpQkFBaUIsQ0FBakI7RURzbUJDLGNBQWEsRUFBVyxDQUFFLEdDcG1CMUI7O0FBSUQsT0FBTyxDQUFQO0VEd25CRSxhQUFnQixFSHZXMkIsSUFBYTtFR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0k5UXhEOztBQUNELFlBQVksQ0FBWjtFRHFuQkUsWUFBZ0IsRUh4VzBCLElBQWEsR0kzUXhEOztBQUNELGFBQWEsQ0FBYjtFRGtuQkUsYUFBZ0IsRUh2VzJCLElBQWEsR0l6UXpEOztBQVVELFlBQVksQ0FBWjtFQUNDLE1BQU0sRUFBQyxPQUFRLEdBQ2Y7O0FBZ0JELElBQUksQ0FBSjtFRTVMQSxZQUFZLEVBQUUsWUFBYTtFQUMzQixhQUFhLEVBQUUsWUFBYTtFQUM1QixXQUFXLEVBQUUsS0FBcUM7RUFDbEQsWUFBWSxFQUFFLEtBQXNDLEdGMkxuRDtHRXhMRCxBQUFBLEtBQUMsRUFBTyxXQUFXLEFBQWxCLElGc0xELElBQUksQ0V0TEo7SUFDQyxXQUFXLEVBQUUsWUFBYTtJQUMxQixZQUFZLEVBQUUsWUFBYSxHQUMzQjs7QUZzTEQsWUFBWSxDQUFaO0VFL0xBLFlBQVksRUFBRSxZQUFhO0VBQzNCLGFBQWEsRUFBRSxZQUFhO0VBQzVCLFdBQVcsRUFBRSxLQUFxQztFQUNsRCxZQUFZLEVBQUUsS0FBc0MsR0Y4TG5EO0dFM0xELEFBQUEsS0FBQyxFQUFPLFdBQVcsQUFBbEIsSUZ5TEQsWUFBWSxDRXpMWjtJQUNDLFdBQVcsRUFBRSxZQUFhO0lBQzFCLFlBQVksRUFBRSxZQUFhLEdBQzNCOztBRjRMRCxTQUFTLENBQVQ7RUVhQSxLQUFLLEVBQUUsS0FBTTtFQUVaLFdBQVcsRUFBQyxjQUFlO0VBQzNCLFlBQVksRUFBQyxZQUFhO0VBRXpCLGlCQUFpQixFQUFFLGdCQUFVO0VBQzdCLGVBQWUsRUFBRSxnQkFBVTtFQUMzQixhQUFhLEVBQUUsZ0JBQVU7RUFDekIsWUFBWSxFQUFFLGdCQUFVO0VBRXpCLFNBQVMsRUFBRSxnQkFBVSxHRnJCckI7O0FBSUQsSUFBSSxDQUFKO0VFcktBLFlBQVksRUFBRSxZQUFhO0VBQzNCLGFBQWEsRUFBRSxZQUFhO0VBQzVCLFdBQVcsRUFBRSxLQUFxQztFQUNsRCxZQUFZLEVBQUUsS0FBc0MsR0ZvS25EOztBQUNELFlBQVksQ0FBWjtFRXhLQSxZQUFZLEVBQUUsWUFBYTtFQUMzQixhQUFhLEVBQUUsWUFBYTtFQUM1QixXQUFXLEVBQUUsS0FBcUM7RUFDbEQsWUFBWSxFQUFFLEtBQXNDLEdGdUtuRDs7QUFJRCxTQUFTLENBQVQ7RUVwQkEsT0FBTyxFQUFFLFVBQVc7RUFDcEIsS0FBSyxFQUFFLElBQUs7RUFDWixjQUFjLEVBQUUsR0FBSSxHRm9CbkI7O0FBZ0JELGVBQWUsQ0FBZjtFRXFJQyxTQUFTLEVBQUMsQ0FBRTtFQUNaLEtBQUssRUFBQyxJQUFLO0VBc0JWLFVBQVUsRUFBRSxJQUFLLEdGMUpsQjtFQUZELGVBQWUsR0V3SVosQ0FBQyxDQUFDO0lBQ0gsS0FBSyxFQUFDLGVBQWdCO0lBTXJCLGNBQWMsRUFBQyxNQUFPO0lBRXZCLFNBQVMsRUFBQyxJQUFLLEdBTWY7O0FBTEEsY0FBYyxDQUFDLFVBQVc7RUZsSjVCLGVBQWUsR0V3SVosQ0FBQyxDQVdDO0lBQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7O0FGbEpKLGlCQUFpQixDQUFqQjtFRWtJQyxTQUFTLEVBQUMsQ0FBRTtFQUNaLEtBQUssRUFBQyxJQUFLO0VBd0JWLFVBQVUsRUFBRSxNQUFPLEdGekpwQjtFQUZELGlCQUFpQixHRXFJZCxDQUFDLENBQUM7SUFDSCxLQUFLLEVBQUMsZUFBZ0I7SUFNckIsY0FBYyxFQUFDLE1BQU87SUFFdkIsU0FBUyxFQUFDLElBQUssR0FNZjs7QUFMQSxjQUFjLENBQUMsVUFBVztFRi9JNUIsaUJBQWlCLEdFcUlkLENBQUMsQ0FXQztJQUNELFlBQVksRUFBRSxNQUFPLEdBQ3JCO0VGbEpKLGlCQUFpQixHRXlLZCxDQUFDLENBQUM7SUFDSCxVQUFVLEVBQUUsSUFBSyxHQUNqQjs7QUZ4S0YsZ0JBQWdCLENBQWhCO0VFK0hDLFNBQVMsRUFBQyxDQUFFO0VBQ1osS0FBSyxFQUFDLElBQUs7RUEwQlYsVUFBVSxFQUFFLEtBQU0sR0Z4Sm5CO0VBRkQsZ0JBQWdCLEdFa0liLENBQUMsQ0FBQztJQUNILEtBQUssRUFBQyxlQUFnQjtJQU1yQixjQUFjLEVBQUMsTUFBTztJQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mOztBQUxBLGNBQWMsQ0FBQyxVQUFXO0VGNUk1QixnQkFBZ0IsR0VrSWIsQ0FBQyxDQVdDO0lBQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7RUYvSUosZ0JBQWdCLEdFc0tiLENBQUMsQ0FBQztJQUNILFVBQVUsRUFBRSxJQUFLLEdBQ2pCOztBRnJLRixpQkFBaUIsQ0FBakI7RUU0SEMsU0FBUyxFQUFDLENBQUU7RUFDWixLQUFLLEVBQUMsSUFBSztFQThCVixjQUFjLEVBQUUsTUFBTyxHRnpKeEI7RUFGRCxpQkFBaUIsR0UrSGQsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxFQUFDLGVBQWdCO0lBSXJCLGNBQWMsRUFBQyxNQUFPO0lBSXZCLFNBQVMsRUFBQyxJQUFLLEdBTWY7O0FBTEEsY0FBYyxDQUFDLFVBQVc7RUZ6STVCLGlCQUFpQixHRStIZCxDQUFDLENBV0M7SUFDRCxZQUFZLEVBQUUsTUFBTyxHQUNyQjs7QUZ6SUosY0FBYyxDQUFkO0VFeUhDLFNBQVMsRUFBQyxDQUFFO0VBQ1osS0FBSyxFQUFDLElBQUs7RUE0QlYsY0FBYyxFQUFFLEdBQUksR0ZwSnJCO0VBRkQsY0FBYyxHRTRIWCxDQUFDLENBQUM7SUFDSCxLQUFLLEVBQUMsZUFBZ0I7SUFFckIsY0FBYyxFQUFDLEdBQUk7SUFNcEIsU0FBUyxFQUFDLElBQUssR0FNZjs7QUFMQSxjQUFjLENBQUMsVUFBVztFRnRJNUIsY0FBYyxHRTRIWCxDQUFDLENBV0M7SUFDRCxZQUFZLEVBQUUsTUFBTyxHQUNyQjs7QUZ0SUosaUJBQWlCLENBQWpCO0VFc0hDLFNBQVMsRUFBQyxDQUFFO0VBQ1osS0FBSyxFQUFDLElBQUs7RUFnQ1YsY0FBYyxFQUFFLE1BQU8sR0ZySnhCO0VBRkQsaUJBQWlCLEdFeUhkLENBQUMsQ0FBQztJQUNILEtBQUssRUFBQyxlQUFnQjtJQU1yQixjQUFjLEVBQUMsTUFBTztJQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mOztBQUxBLGNBQWMsQ0FBQyxVQUFXO0VGbkk1QixpQkFBaUIsR0V5SGQsQ0FBQyxDQVdDO0lBQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7O0FGdkdKLEtBQUssQ0FBTDtFRGtYQSxPQUFPLEVBQUMsSUFBSyxHQ2hYWjs7QUFJRCxZQUFZLENBQVo7RUQyWEEsVUFBVSxFQUFDLE1BQU8sR0N6WGpCOztBQUlELEtBQUssQ0FBTDtFRHNZQSxPQUFPLEVBQUMsS0FBTSxHQ3BZYjs7QUFJRCxZQUFZLENBQVo7RURpWkEsT0FBTyxFQUFDLFlBQWEsR0MvWXBCOztBQUlELFFBQVEsQ0FBUjtFRDJaQSxVQUFVLEVBQUMsT0FBUSxHQ3pabEI7O0FBYUEsYUFBYSxJRTJCWixBQUFBLEtBQUMsRUFBTyxLQUFLLEFBQVosQ0FBYSxZQUFhLENBQUEsSUFBSSxFQUFqQztFQUNDLEtBQUssRVg1VitCLElBQUksR1c2VnhDOztBRjdCQSxhQUFhLElFMkJaLEFBQUEsS0FBQyxFQUFPLEtBQUssQUFBWixDQUFhLFlBQWEsQ0FBQSxJQUFJLEVBQWpDO0VBQ0MsS0FBSyxFWDNWK0IsSUFBSSxHVzRWeEM7O0FGN0JBLGNBQWMsSUUyQmIsQUFBQSxLQUFDLEVBQU8sS0FBSyxBQUFaLENBQWEsWUFBYSxDQUFBLEtBQUssRUFBbEM7RUFDQyxLQUFLLEVYMVZnQyxJQUFJLEdXMlZ6Qzs7QUZuQkQsVUFBVSxDQUFWO0VEbU5BLFFBQVEsRUFBQyxRQUFTO0VBQ2xCLE9BQU8sRUFBQyxLQUFNO0VBQ2QsUUFBUSxFQUFDLE1BQU8sR0NuTmY7RUFGRCxVQUFVLEFEdU5ULE9BQU8sQ0FBQztJQUNSLGNBQWMsRUFBRSxJQUFLO0lBQ3JCLE9BQU8sRUFBQyxFQUFHO0lBQ1gsUUFBUSxFQUFDLFFBQVM7SUFDbEIsR0FBRyxFQUFDLENBQUU7SUFBRSxJQUFJLEVBQUMsQ0FBRTtJQUNmLEtBQUssRUFBQyxJQUFLO0lBQUUsTUFBTSxFQUFDLE9BQVE7SUFHNUIsVUFBVSxFQUFFLG1FQUFlO0lBQzNCLGVBQWUsRUFBRSxTQUFNLENBQUksSUFBSTtJQUMvQixPQUFPLEVBQUMsS0FBTSxHQUNkOztBQ29CQyxJQUFJLENBQUM7RUFDSixTQUFTLEVIdGpCQSxHQUFHLEdHdWpCWjs7QUZuTUgsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFRXNKekIsaUJBQWlCLENBQWpCO0lFaFdILEtBQUssRUFKSyxHQUFVLEdGc1doQjtFQUdELG1CQUFtQixDQUFuQjtJRGpNSSxJQUFJLEVBWkYsR0FBVSxHQytNZjtFQUdELG1CQUFtQixDQUFuQjtJRHhJSSxLQUFLLEVBWkgsR0FBVSxHQ3NKZjtFQUdELHFCQUFxQixDQUFyQjtJRHhGSSxXQUFXLEVBTFQsR0FBVSxHQytGZjtFQUdELHFCQUFxQixDQUFyQjtJRHpDSSxZQUFZLEVBTFYsR0FBVSxHQ2dEZjtFQXRCRCxjQUFjLENBQWQ7SUVoV0gsS0FBSyxFQUpLLEVBQVUsR0ZzV2hCO0VBR0QsZ0JBQWdCLENBQWhCO0lEak1JLElBQUksRUFaRixFQUFVLEdDK01mO0VBR0QsZ0JBQWdCLENBQWhCO0lEeElJLEtBQUssRUFaSCxFQUFVLEdDc0pmO0VBR0Qsa0JBQWtCLENBQWxCO0lEeEZJLFdBQVcsRUFMVCxFQUFVLEdDK0ZmO0VBR0Qsa0JBQWtCLENBQWxCO0lEekNJLFlBQVksRUFMVixFQUFVLEdDZ0RmO0VBdEJELGNBQWMsQ0FBZDtJRWhXSCxLQUFLLEVBSkssUUFBVSxHRnNXaEI7RUFHRCxnQkFBZ0IsQ0FBaEI7SURqTUksSUFBSSxFQVpGLFFBQVUsR0MrTWY7RUFHRCxnQkFBZ0IsQ0FBaEI7SUR4SUksS0FBSyxFQVpILFFBQVUsR0NzSmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR4RkksV0FBVyxFQUxULFFBQVUsR0MrRmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR6Q0ksWUFBWSxFQUxWLFFBQVUsR0NnRGY7RUF0QkQsY0FBYyxDQUFkO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGdCQUFnQixDQUFoQjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGdCQUFnQixDQUFoQjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGtCQUFrQixDQUFsQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGtCQUFrQixDQUFsQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxjQUFjLENBQWQ7SUVoV0gsS0FBSyxFQUpLLEdBQVUsR0ZzV2hCO0VBR0QsZ0JBQWdCLENBQWhCO0lEak1JLElBQUksRUFaRixHQUFVLEdDK01mO0VBR0QsZ0JBQWdCLENBQWhCO0lEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmO0VBR0Qsa0JBQWtCLENBQWxCO0lEeEZJLFdBQVcsRUFMVCxHQUFVLEdDK0ZmO0VBR0Qsa0JBQWtCLENBQWxCO0lEekNJLFlBQVksRUFMVixHQUFVLEdDZ0RmO0VBdEJELGNBQWMsQ0FBZDtJRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7RUFHRCxnQkFBZ0IsQ0FBaEI7SURqTUksSUFBSSxFQVpGLFNBQVUsR0MrTWY7RUFHRCxnQkFBZ0IsQ0FBaEI7SUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR6Q0ksWUFBWSxFQUxWLFNBQVUsR0NnRGY7RUF0QkQsY0FBYyxDQUFkO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGdCQUFnQixDQUFoQjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGdCQUFnQixDQUFoQjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGtCQUFrQixDQUFsQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGtCQUFrQixDQUFsQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxjQUFjLENBQWQ7SUVoV0gsS0FBSyxFQUpLLEdBQVUsR0ZzV2hCO0VBR0QsZ0JBQWdCLENBQWhCO0lEak1JLElBQUksRUFaRixHQUFVLEdDK01mO0VBR0QsZ0JBQWdCLENBQWhCO0lEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmO0VBR0Qsa0JBQWtCLENBQWxCO0lEeEZJLFdBQVcsRUFMVCxHQUFVLEdDK0ZmO0VBR0Qsa0JBQWtCLENBQWxCO0lEekNJLFlBQVksRUFMVixHQUFVLEdDZ0RmO0VBdEJELGNBQWMsQ0FBZDtJRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7RUFHRCxnQkFBZ0IsQ0FBaEI7SURqTUksSUFBSSxFQVpGLFNBQVUsR0MrTWY7RUFHRCxnQkFBZ0IsQ0FBaEI7SUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR6Q0ksWUFBWSxFQUxWLFNBQVUsR0NnRGY7RUF0QkQsY0FBYyxDQUFkO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGdCQUFnQixDQUFoQjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGdCQUFnQixDQUFoQjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGtCQUFrQixDQUFsQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGtCQUFrQixDQUFsQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxjQUFjLENBQWQ7SUVoV0gsS0FBSyxFQUpLLEdBQVUsR0ZzV2hCO0VBR0QsZ0JBQWdCLENBQWhCO0lEak1JLElBQUksRUFaRixHQUFVLEdDK01mO0VBR0QsZ0JBQWdCLENBQWhCO0lEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmO0VBR0Qsa0JBQWtCLENBQWxCO0lEeEZJLFdBQVcsRUFMVCxHQUFVLEdDK0ZmO0VBR0Qsa0JBQWtCLENBQWxCO0lEekNJLFlBQVksRUFMVixHQUFVLEdDZ0RmO0VBdEJELGVBQWUsQ0FBZjtJRWhXSCxLQUFLLEVBSkssU0FBVSxHRnNXaEI7RUFHRCxpQkFBaUIsQ0FBakI7SURqTUksSUFBSSxFQVpGLFNBQVUsR0MrTWY7RUFHRCxpQkFBaUIsQ0FBakI7SUR4SUksS0FBSyxFQVpILFNBQVUsR0NzSmY7RUFHRCxtQkFBbUIsQ0FBbkI7SUR4RkksV0FBVyxFQUxULFNBQVUsR0MrRmY7RUFHRCxtQkFBbUIsQ0FBbkI7SUR6Q0ksWUFBWSxFQUxWLFNBQVUsR0NnRGY7RUF0QkQsZUFBZSxDQUFmO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGlCQUFpQixDQUFqQjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGlCQUFpQixDQUFqQjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELG1CQUFtQixDQUFuQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELG1CQUFtQixDQUFuQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxlQUFlLENBQWY7SUVoV0gsS0FBSyxFQUpLLElBQVUsR0ZzV2hCO0VBR0QsaUJBQWlCLENBQWpCO0lEak1JLElBQUksRUFaRixJQUFVLEdDK01mO0VBR0QsaUJBQWlCLENBQWpCO0lEeElJLEtBQUssRUFaSCxJQUFVLEdDc0pmO0VBR0QsbUJBQW1CLENBQW5CO0lEeEZJLFdBQVcsRUFMVCxJQUFVLEdDK0ZmO0VBR0QsbUJBQW1CLENBQW5CO0lEekNJLFlBQVksRUFMVixJQUFVLEdDZ0RmO0VBcmJMLG9CQUFvQixDQUFwQjtJRHNtQkEsS0FBSyxFQUFBLElBQUMsR0NwbUJMO0VBQ0QscUJBQXFCLENBQXJCO0lEbW1CQSxLQUFLLEVBQUEsS0FBQyxHQ2ptQkw7RUFJRCxlQUFlLENBQWY7SUQ2bUJBLEtBQUssRUFBQSxJQUFDLEdDM21CTDtFQUNELG9CQUFvQixDQUFwQjtJRDBtQkEsS0FBSyxFQUFBLElBQUMsR0N4bUJMO0VBQ0QscUJBQXFCLENBQXJCO0lEdW1CQSxLQUFLLEVBQUEsS0FBQyxHQ3JtQkw7RUFJRCxtQkFBbUIsQ0FBbkI7SURrbkJDLFdBQWEsRUFBVyxDQUFFO0lBQTFCLGFBQWEsRUFBVyxDQUFFO0lBQTFCLGNBQWEsRUFBVyxDQUFFO0lBQTFCLFlBQWEsRUFBVyxDQUFFLEdDaG5CMUI7RUFDRCx3QkFBd0IsQ0FBeEI7SUQrbUJDLFlBQWEsRUFBVyxDQUFFLEdDN21CMUI7RUFDRCx5QkFBeUIsQ0FBekI7SUQ0bUJDLGFBQWEsRUFBVyxDQUFFLEdDMW1CMUI7RUFDRCx1QkFBdUIsQ0FBdkI7SUR5bUJDLFdBQWEsRUFBVyxDQUFFLEdDdm1CMUI7RUFDRCwwQkFBMEIsQ0FBMUI7SURzbUJDLGNBQWEsRUFBVyxDQUFFLEdDcG1CMUI7RUFJRCxnQkFBZ0IsQ0FBaEI7SUR3bkJFLGFBQWdCLEVIdlcyQixJQUFhO0lHdVd4RCxZQUFnQixFSHhXMEIsSUFBYSxHSTlReEQ7RUFDRCxxQkFBcUIsQ0FBckI7SURxbkJFLFlBQWdCLEVIeFcwQixJQUFhLEdJM1F4RDtFQUNELHNCQUFzQixDQUF0QjtJRGtuQkUsYUFBZ0IsRUh2VzJCLElBQWEsR0l6UXpEO0VBVUQscUJBQXFCLENBQXJCO0lBQ0MsTUFBTSxFQUFDLE9BQVEsR0FDZjtFQWdCRCxhQUFhLENBQWI7SUU1TEEsWUFBWSxFQUFFLFlBQWE7SUFDM0IsYUFBYSxFQUFFLFlBQWE7SUFDNUIsV0FBVyxFQUFFLEtBQXFDO0lBQ2xELFlBQVksRUFBRSxLQUFzQyxHRjJMbkQ7S0V4TEQsQUFBQSxLQUFDLEVBQU8sV0FBVyxBQUFsQixJRnNMRCxhQUFhLENFdExiO01BQ0MsV0FBVyxFQUFFLFlBQWE7TUFDMUIsWUFBWSxFQUFFLFlBQWEsR0FDM0I7RUZzTEQscUJBQXFCLENBQXJCO0lFL0xBLFlBQVksRUFBRSxZQUFhO0lBQzNCLGFBQWEsRUFBRSxZQUFhO0lBQzVCLFdBQVcsRUFBRSxLQUFxQztJQUNsRCxZQUFZLEVBQUUsS0FBc0MsR0Y4TG5EO0tFM0xELEFBQUEsS0FBQyxFQUFPLFdBQVcsQUFBbEIsSUZ5TEQscUJBQXFCLENFekxyQjtNQUNDLFdBQVcsRUFBRSxZQUFhO01BQzFCLFlBQVksRUFBRSxZQUFhLEdBQzNCO0VGNExELGtCQUFrQixDQUFsQjtJRWFBLEtBQUssRUFBRSxLQUFNO0lBRVosV0FBVyxFQUFDLGNBQWU7SUFDM0IsWUFBWSxFQUFDLFlBQWE7SUFFekIsaUJBQWlCLEVBQUUsZ0JBQVU7SUFDN0IsZUFBZSxFQUFFLGdCQUFVO0lBQzNCLGFBQWEsRUFBRSxnQkFBVTtJQUN6QixZQUFZLEVBQUUsZ0JBQVU7SUFFekIsU0FBUyxFQUFFLGdCQUFVLEdGckJyQjtFQUlELGFBQWEsQ0FBYjtJRXJLQSxZQUFZLEVBQUUsWUFBYTtJQUMzQixhQUFhLEVBQUUsWUFBYTtJQUM1QixXQUFXLEVBQUUsS0FBcUM7SUFDbEQsWUFBWSxFQUFFLEtBQXNDLEdGb0tuRDtFQUNELHFCQUFxQixDQUFyQjtJRXhLQSxZQUFZLEVBQUUsWUFBYTtJQUMzQixhQUFhLEVBQUUsWUFBYTtJQUM1QixXQUFXLEVBQUUsS0FBcUM7SUFDbEQsWUFBWSxFQUFFLEtBQXNDLEdGdUtuRDtFQUlELGtCQUFrQixDQUFsQjtJRXBCQSxPQUFPLEVBQUUsVUFBVztJQUNwQixLQUFLLEVBQUUsSUFBSztJQUNaLGNBQWMsRUFBRSxHQUFJLEdGb0JuQjtFQWdCRCx3QkFBd0IsQ0FBeEI7SUVxSUMsU0FBUyxFQUFDLENBQUU7SUFDWixLQUFLLEVBQUMsSUFBSztJQXNCVixVQUFVLEVBQUUsSUFBSyxHRjFKbEI7SUFGRCx3QkFBd0IsR0V3SXJCLENBQUMsQ0FBQztNQUNILEtBQUssRUFBQyxlQUFnQjtNQU1yQixjQUFjLEVBQUMsTUFBTztNQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mO0VBTEEsY0FBYyxDQUFDLFVBQVc7SUZsSjVCLHdCQUF3QixHRXdJckIsQ0FBQyxDQVdDO01BQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7RUZsSkosMEJBQTBCLENBQTFCO0lFa0lDLFNBQVMsRUFBQyxDQUFFO0lBQ1osS0FBSyxFQUFDLElBQUs7SUF3QlYsVUFBVSxFQUFFLE1BQU8sR0Z6SnBCO0lBRkQsMEJBQTBCLEdFcUl2QixDQUFDLENBQUM7TUFDSCxLQUFLLEVBQUMsZUFBZ0I7TUFNckIsY0FBYyxFQUFDLE1BQU87TUFFdkIsU0FBUyxFQUFDLElBQUssR0FNZjtFQUxBLGNBQWMsQ0FBQyxVQUFXO0lGL0k1QiwwQkFBMEIsR0VxSXZCLENBQUMsQ0FXQztNQUNELFlBQVksRUFBRSxNQUFPLEdBQ3JCO0lGbEpKLDBCQUEwQixHRXlLdkIsQ0FBQyxDQUFDO01BQ0gsVUFBVSxFQUFFLElBQUssR0FDakI7RUZ4S0YseUJBQXlCLENBQXpCO0lFK0hDLFNBQVMsRUFBQyxDQUFFO0lBQ1osS0FBSyxFQUFDLElBQUs7SUEwQlYsVUFBVSxFQUFFLEtBQU0sR0Z4Sm5CO0lBRkQseUJBQXlCLEdFa0l0QixDQUFDLENBQUM7TUFDSCxLQUFLLEVBQUMsZUFBZ0I7TUFNckIsY0FBYyxFQUFDLE1BQU87TUFFdkIsU0FBUyxFQUFDLElBQUssR0FNZjtFQUxBLGNBQWMsQ0FBQyxVQUFXO0lGNUk1Qix5QkFBeUIsR0VrSXRCLENBQUMsQ0FXQztNQUNELFlBQVksRUFBRSxNQUFPLEdBQ3JCO0lGL0lKLHlCQUF5QixHRXNLdEIsQ0FBQyxDQUFDO01BQ0gsVUFBVSxFQUFFLElBQUssR0FDakI7RUZyS0YsMEJBQTBCLENBQTFCO0lFNEhDLFNBQVMsRUFBQyxDQUFFO0lBQ1osS0FBSyxFQUFDLElBQUs7SUE4QlYsY0FBYyxFQUFFLE1BQU8sR0Z6SnhCO0lBRkQsMEJBQTBCLEdFK0h2QixDQUFDLENBQUM7TUFDSCxLQUFLLEVBQUMsZUFBZ0I7TUFJckIsY0FBYyxFQUFDLE1BQU87TUFJdkIsU0FBUyxFQUFDLElBQUssR0FNZjtFQUxBLGNBQWMsQ0FBQyxVQUFXO0lGekk1QiwwQkFBMEIsR0UrSHZCLENBQUMsQ0FXQztNQUNELFlBQVksRUFBRSxNQUFPLEdBQ3JCO0VGeklKLHVCQUF1QixDQUF2QjtJRXlIQyxTQUFTLEVBQUMsQ0FBRTtJQUNaLEtBQUssRUFBQyxJQUFLO0lBNEJWLGNBQWMsRUFBRSxHQUFJLEdGcEpyQjtJQUZELHVCQUF1QixHRTRIcEIsQ0FBQyxDQUFDO01BQ0gsS0FBSyxFQUFDLGVBQWdCO01BRXJCLGNBQWMsRUFBQyxHQUFJO01BTXBCLFNBQVMsRUFBQyxJQUFLLEdBTWY7RUFMQSxjQUFjLENBQUMsVUFBVztJRnRJNUIsdUJBQXVCLEdFNEhwQixDQUFDLENBV0M7TUFDRCxZQUFZLEVBQUUsTUFBTyxHQUNyQjtFRnRJSiwwQkFBMEIsQ0FBMUI7SUVzSEMsU0FBUyxFQUFDLENBQUU7SUFDWixLQUFLLEVBQUMsSUFBSztJQWdDVixjQUFjLEVBQUUsTUFBTyxHRnJKeEI7SUFGRCwwQkFBMEIsR0V5SHZCLENBQUMsQ0FBQztNQUNILEtBQUssRUFBQyxlQUFnQjtNQU1yQixjQUFjLEVBQUMsTUFBTztNQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mO0VBTEEsY0FBYyxDQUFDLFVBQVc7SUZuSTVCLDBCQUEwQixHRXlIdkIsQ0FBQyxDQVdDO01BQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7RUZ2R0osY0FBYyxDQUFkO0lEa1hBLE9BQU8sRUFBQyxJQUFLLEdDaFhaO0VBSUQscUJBQXFCLENBQXJCO0lEMlhBLFVBQVUsRUFBQyxNQUFPLEdDelhqQjtFQUlELGNBQWMsQ0FBZDtJRHNZQSxPQUFPLEVBQUMsS0FBTSxHQ3BZYjtFQUlELHFCQUFxQixDQUFyQjtJRGlaQSxPQUFPLEVBQUMsWUFBYSxHQy9ZcEI7RUFJRCxpQkFBaUIsQ0FBakI7SUQyWkEsVUFBVSxFQUFDLE9BQVEsR0N6WmxCO0VBYUEsc0JBQXNCLElFMkJyQixBQUFBLEtBQUMsRUFBTyxLQUFLLEFBQVosQ0FBYSxZQUFhLENBQUEsSUFBSSxFQUFqQztJQUNDLEtBQUssRVg1VitCLElBQUksR1c2VnhDO0VGN0JBLHNCQUFzQixJRTJCckIsQUFBQSxLQUFDLEVBQU8sS0FBSyxBQUFaLENBQWEsWUFBYSxDQUFBLElBQUksRUFBakM7SUFDQyxLQUFLLEVYM1YrQixJQUFJLEdXNFZ4QztFRjdCQSx1QkFBdUIsSUUyQnRCLEFBQUEsS0FBQyxFQUFPLEtBQUssQUFBWixDQUFhLFlBQWEsQ0FBQSxLQUFLLEVBQWxDO0lBQ0MsS0FBSyxFWDFWZ0MsSUFBSSxHVzJWekM7RUZuQkQsbUJBQW1CLENBQW5CO0lEbU5BLFFBQVEsRUFBQyxRQUFTO0lBQ2xCLE9BQU8sRUFBQyxLQUFNO0lBQ2QsUUFBUSxFQUFDLE1BQU8sR0NuTmY7SUFGRCxtQkFBbUIsQUR1TmxCLE9BQU8sQ0FBQztNQUNSLGNBQWMsRUFBRSxJQUFLO01BQ3JCLE9BQU8sRUFBQyxFQUFHO01BQ1gsUUFBUSxFQUFDLFFBQVM7TUFDbEIsR0FBRyxFQUFDLENBQUU7TUFBRSxJQUFJLEVBQUMsQ0FBRTtNQUNmLEtBQUssRUFBQyxJQUFLO01BQUUsTUFBTSxFQUFDLE9BQVE7TUFHNUIsVUFBVSxFQUFFLG1FQUFlO01BQzNCLGVBQWUsRUFBRSxTQUFNLENBQUksSUFBSTtNQUMvQixPQUFPLEVBQUMsS0FBTSxHQUNkO0VDb0JDLElBQUksQ0FBQztJQUNKLFNBQVMsRUh0akJBLEdBQUcsR0d1akJaOztBRm5NSCxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFc0p4QixnQkFBZ0IsQ0FBaEI7SUVoV0gsS0FBSyxFQUpLLEdBQVUsR0ZzV2hCO0VBR0Qsa0JBQWtCLENBQWxCO0lEak1JLElBQUksRUFaRixHQUFVLEdDK01mO0VBR0Qsa0JBQWtCLENBQWxCO0lEeElJLEtBQUssRUFaSCxHQUFVLEdDc0pmO0VBR0Qsb0JBQW9CLENBQXBCO0lEeEZJLFdBQVcsRUFMVCxHQUFVLEdDK0ZmO0VBR0Qsb0JBQW9CLENBQXBCO0lEekNJLFlBQVksRUFMVixHQUFVLEdDZ0RmO0VBdEJELGFBQWEsQ0FBYjtJRWhXSCxLQUFLLEVBSkssRUFBVSxHRnNXaEI7RUFHRCxlQUFlLENBQWY7SURqTUksSUFBSSxFQVpGLEVBQVUsR0MrTWY7RUFHRCxlQUFlLENBQWY7SUR4SUksS0FBSyxFQVpILEVBQVUsR0NzSmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR4RkksV0FBVyxFQUxULEVBQVUsR0MrRmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR6Q0ksWUFBWSxFQUxWLEVBQVUsR0NnRGY7RUF0QkQsYUFBYSxDQUFiO0lFaFdILEtBQUssRUFKSyxRQUFVLEdGc1doQjtFQUdELGVBQWUsQ0FBZjtJRGpNSSxJQUFJLEVBWkYsUUFBVSxHQytNZjtFQUdELGVBQWUsQ0FBZjtJRHhJSSxLQUFLLEVBWkgsUUFBVSxHQ3NKZjtFQUdELGlCQUFpQixDQUFqQjtJRHhGSSxXQUFXLEVBTFQsUUFBVSxHQytGZjtFQUdELGlCQUFpQixDQUFqQjtJRHpDSSxZQUFZLEVBTFYsUUFBVSxHQ2dEZjtFQXRCRCxhQUFhLENBQWI7SUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCO0VBR0QsZUFBZSxDQUFmO0lEak1JLElBQUksRUFaRixTQUFVLEdDK01mO0VBR0QsZUFBZSxDQUFmO0lEeElJLEtBQUssRUFaSCxTQUFVLEdDc0pmO0VBR0QsaUJBQWlCLENBQWpCO0lEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmO0VBR0QsaUJBQWlCLENBQWpCO0lEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmO0VBdEJELGFBQWEsQ0FBYjtJRWhXSCxLQUFLLEVBSkssR0FBVSxHRnNXaEI7RUFHRCxlQUFlLENBQWY7SURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7RUFHRCxlQUFlLENBQWY7SUR4SUksS0FBSyxFQVpILEdBQVUsR0NzSmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR4RkksV0FBVyxFQUxULEdBQVUsR0MrRmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7RUF0QkQsYUFBYSxDQUFiO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGVBQWUsQ0FBZjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGVBQWUsQ0FBZjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGlCQUFpQixDQUFqQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGlCQUFpQixDQUFqQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxhQUFhLENBQWI7SUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCO0VBR0QsZUFBZSxDQUFmO0lEak1JLElBQUksRUFaRixTQUFVLEdDK01mO0VBR0QsZUFBZSxDQUFmO0lEeElJLEtBQUssRUFaSCxTQUFVLEdDc0pmO0VBR0QsaUJBQWlCLENBQWpCO0lEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmO0VBR0QsaUJBQWlCLENBQWpCO0lEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmO0VBdEJELGFBQWEsQ0FBYjtJRWhXSCxLQUFLLEVBSkssR0FBVSxHRnNXaEI7RUFHRCxlQUFlLENBQWY7SURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7RUFHRCxlQUFlLENBQWY7SUR4SUksS0FBSyxFQVpILEdBQVUsR0NzSmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR4RkksV0FBVyxFQUxULEdBQVUsR0MrRmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7RUF0QkQsYUFBYSxDQUFiO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGVBQWUsQ0FBZjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGVBQWUsQ0FBZjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGlCQUFpQixDQUFqQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGlCQUFpQixDQUFqQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxhQUFhLENBQWI7SUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCO0VBR0QsZUFBZSxDQUFmO0lEak1JLElBQUksRUFaRixTQUFVLEdDK01mO0VBR0QsZUFBZSxDQUFmO0lEeElJLEtBQUssRUFaSCxTQUFVLEdDc0pmO0VBR0QsaUJBQWlCLENBQWpCO0lEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmO0VBR0QsaUJBQWlCLENBQWpCO0lEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmO0VBdEJELGFBQWEsQ0FBYjtJRWhXSCxLQUFLLEVBSkssR0FBVSxHRnNXaEI7RUFHRCxlQUFlLENBQWY7SURqTUksSUFBSSxFQVpGLEdBQVUsR0MrTWY7RUFHRCxlQUFlLENBQWY7SUR4SUksS0FBSyxFQVpILEdBQVUsR0NzSmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR4RkksV0FBVyxFQUxULEdBQVUsR0MrRmY7RUFHRCxpQkFBaUIsQ0FBakI7SUR6Q0ksWUFBWSxFQUxWLEdBQVUsR0NnRGY7RUF0QkQsY0FBYyxDQUFkO0lFaFdILEtBQUssRUFKSyxTQUFVLEdGc1doQjtFQUdELGdCQUFnQixDQUFoQjtJRGpNSSxJQUFJLEVBWkYsU0FBVSxHQytNZjtFQUdELGdCQUFnQixDQUFoQjtJRHhJSSxLQUFLLEVBWkgsU0FBVSxHQ3NKZjtFQUdELGtCQUFrQixDQUFsQjtJRHhGSSxXQUFXLEVBTFQsU0FBVSxHQytGZjtFQUdELGtCQUFrQixDQUFsQjtJRHpDSSxZQUFZLEVBTFYsU0FBVSxHQ2dEZjtFQXRCRCxjQUFjLENBQWQ7SUVoV0gsS0FBSyxFQUpLLFNBQVUsR0ZzV2hCO0VBR0QsZ0JBQWdCLENBQWhCO0lEak1JLElBQUksRUFaRixTQUFVLEdDK01mO0VBR0QsZ0JBQWdCLENBQWhCO0lEeElJLEtBQUssRUFaSCxTQUFVLEdDc0pmO0VBR0Qsa0JBQWtCLENBQWxCO0lEeEZJLFdBQVcsRUFMVCxTQUFVLEdDK0ZmO0VBR0Qsa0JBQWtCLENBQWxCO0lEekNJLFlBQVksRUFMVixTQUFVLEdDZ0RmO0VBdEJELGNBQWMsQ0FBZDtJRWhXSCxLQUFLLEVBSkssSUFBVSxHRnNXaEI7RUFHRCxnQkFBZ0IsQ0FBaEI7SURqTUksSUFBSSxFQVpGLElBQVUsR0MrTWY7RUFHRCxnQkFBZ0IsQ0FBaEI7SUR4SUksS0FBSyxFQVpILElBQVUsR0NzSmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR4RkksV0FBVyxFQUxULElBQVUsR0MrRmY7RUFHRCxrQkFBa0IsQ0FBbEI7SUR6Q0ksWUFBWSxFQUxWLElBQVUsR0NnRGY7RUFyYkwsbUJBQW1CLENBQW5CO0lEc21CQSxLQUFLLEVBQUEsSUFBQyxHQ3BtQkw7RUFDRCxvQkFBb0IsQ0FBcEI7SURtbUJBLEtBQUssRUFBQSxLQUFDLEdDam1CTDtFQUlELGNBQWMsQ0FBZDtJRDZtQkEsS0FBSyxFQUFBLElBQUMsR0MzbUJMO0VBQ0QsbUJBQW1CLENBQW5CO0lEMG1CQSxLQUFLLEVBQUEsSUFBQyxHQ3htQkw7RUFDRCxvQkFBb0IsQ0FBcEI7SUR1bUJBLEtBQUssRUFBQSxLQUFDLEdDcm1CTDtFQUlELGtCQUFrQixDQUFsQjtJRGtuQkMsV0FBYSxFQUFXLENBQUU7SUFBMUIsYUFBYSxFQUFXLENBQUU7SUFBMUIsY0FBYSxFQUFXLENBQUU7SUFBMUIsWUFBYSxFQUFXLENBQUUsR0NobkIxQjtFQUNELHVCQUF1QixDQUF2QjtJRCttQkMsWUFBYSxFQUFXLENBQUUsR0M3bUIxQjtFQUNELHdCQUF3QixDQUF4QjtJRDRtQkMsYUFBYSxFQUFXLENBQUUsR0MxbUIxQjtFQUNELHNCQUFzQixDQUF0QjtJRHltQkMsV0FBYSxFQUFXLENBQUUsR0N2bUIxQjtFQUNELHlCQUF5QixDQUF6QjtJRHNtQkMsY0FBYSxFQUFXLENBQUUsR0NwbUIxQjtFQUlELGVBQWUsQ0FBZjtJRHduQkUsYUFBZ0IsRUh2VzJCLEdBQWE7SUd1V3hELFlBQWdCLEVIeFcwQixHQUFhLEdJOVF4RDtFQUNELG9CQUFvQixDQUFwQjtJRHFuQkUsWUFBZ0IsRUh4VzBCLEdBQWEsR0kzUXhEO0VBQ0QscUJBQXFCLENBQXJCO0lEa25CRSxhQUFnQixFSHZXMkIsR0FBYSxHSXpRekQ7RUFVRCxvQkFBb0IsQ0FBcEI7SUFDQyxNQUFNLEVBQUMsT0FBUSxHQUNmO0VBZ0JELFlBQVksQ0FBWjtJRTVMQSxZQUFZLEVBQUUsWUFBYTtJQUMzQixhQUFhLEVBQUUsWUFBYTtJQUM1QixXQUFXLEVBQUUsSUFBcUM7SUFDbEQsWUFBWSxFQUFFLElBQXNDLEdGMkxuRDtLRXhMRCxBQUFBLEtBQUMsRUFBTyxXQUFXLEFBQWxCLElGc0xELFlBQVksQ0V0TFo7TUFDQyxXQUFXLEVBQUUsWUFBYTtNQUMxQixZQUFZLEVBQUUsWUFBYSxHQUMzQjtFRnNMRCxvQkFBb0IsQ0FBcEI7SUUvTEEsWUFBWSxFQUFFLFlBQWE7SUFDM0IsYUFBYSxFQUFFLFlBQWE7SUFDNUIsV0FBVyxFQUFFLElBQXFDO0lBQ2xELFlBQVksRUFBRSxJQUFzQyxHRjhMbkQ7S0UzTEQsQUFBQSxLQUFDLEVBQU8sV0FBVyxBQUFsQixJRnlMRCxvQkFBb0IsQ0V6THBCO01BQ0MsV0FBVyxFQUFFLFlBQWE7TUFDMUIsWUFBWSxFQUFFLFlBQWEsR0FDM0I7RUY0TEQsaUJBQWlCLENBQWpCO0lFYUEsS0FBSyxFQUFFLEtBQU07SUFFWixXQUFXLEVBQUMsY0FBZTtJQUMzQixZQUFZLEVBQUMsWUFBYTtJQUV6QixpQkFBaUIsRUFBRSxnQkFBVTtJQUM3QixlQUFlLEVBQUUsZ0JBQVU7SUFDM0IsYUFBYSxFQUFFLGdCQUFVO0lBQ3pCLFlBQVksRUFBRSxnQkFBVTtJQUV6QixTQUFTLEVBQUUsZ0JBQVUsR0ZyQnJCO0VBSUQsWUFBWSxDQUFaO0lFcktBLFlBQVksRUFBRSxZQUFhO0lBQzNCLGFBQWEsRUFBRSxZQUFhO0lBQzVCLFdBQVcsRUFBRSxJQUFxQztJQUNsRCxZQUFZLEVBQUUsSUFBc0MsR0ZvS25EO0VBQ0Qsb0JBQW9CLENBQXBCO0lFeEtBLFlBQVksRUFBRSxZQUFhO0lBQzNCLGFBQWEsRUFBRSxZQUFhO0lBQzVCLFdBQVcsRUFBRSxJQUFxQztJQUNsRCxZQUFZLEVBQUUsSUFBc0MsR0Z1S25EO0VBSUQsaUJBQWlCLENBQWpCO0lFcEJBLE9BQU8sRUFBRSxVQUFXO0lBQ3BCLEtBQUssRUFBRSxJQUFLO0lBQ1osY0FBYyxFQUFFLEdBQUksR0ZvQm5CO0VBZ0JELHVCQUF1QixDQUF2QjtJRXFJQyxTQUFTLEVBQUMsQ0FBRTtJQUNaLEtBQUssRUFBQyxJQUFLO0lBc0JWLFVBQVUsRUFBRSxJQUFLLEdGMUpsQjtJQUZELHVCQUF1QixHRXdJcEIsQ0FBQyxDQUFDO01BQ0gsS0FBSyxFQUFDLGVBQWdCO01BTXJCLGNBQWMsRUFBQyxNQUFPO01BRXZCLFNBQVMsRUFBQyxJQUFLLEdBTWY7RUFMQSxjQUFjLENBQUMsVUFBVztJRmxKNUIsdUJBQXVCLEdFd0lwQixDQUFDLENBV0M7TUFDRCxZQUFZLEVBQUUsTUFBTyxHQUNyQjtFRmxKSix5QkFBeUIsQ0FBekI7SUVrSUMsU0FBUyxFQUFDLENBQUU7SUFDWixLQUFLLEVBQUMsSUFBSztJQXdCVixVQUFVLEVBQUUsTUFBTyxHRnpKcEI7SUFGRCx5QkFBeUIsR0VxSXRCLENBQUMsQ0FBQztNQUNILEtBQUssRUFBQyxlQUFnQjtNQU1yQixjQUFjLEVBQUMsTUFBTztNQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mO0VBTEEsY0FBYyxDQUFDLFVBQVc7SUYvSTVCLHlCQUF5QixHRXFJdEIsQ0FBQyxDQVdDO01BQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7SUZsSkoseUJBQXlCLEdFeUt0QixDQUFDLENBQUM7TUFDSCxVQUFVLEVBQUUsSUFBSyxHQUNqQjtFRnhLRix3QkFBd0IsQ0FBeEI7SUUrSEMsU0FBUyxFQUFDLENBQUU7SUFDWixLQUFLLEVBQUMsSUFBSztJQTBCVixVQUFVLEVBQUUsS0FBTSxHRnhKbkI7SUFGRCx3QkFBd0IsR0VrSXJCLENBQUMsQ0FBQztNQUNILEtBQUssRUFBQyxlQUFnQjtNQU1yQixjQUFjLEVBQUMsTUFBTztNQUV2QixTQUFTLEVBQUMsSUFBSyxHQU1mO0VBTEEsY0FBYyxDQUFDLFVBQVc7SUY1STVCLHdCQUF3QixHRWtJckIsQ0FBQyxDQVdDO01BQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7SUYvSUosd0JBQXdCLEdFc0tyQixDQUFDLENBQUM7TUFDSCxVQUFVLEVBQUUsSUFBSyxHQUNqQjtFRnJLRix5QkFBeUIsQ0FBekI7SUU0SEMsU0FBUyxFQUFDLENBQUU7SUFDWixLQUFLLEVBQUMsSUFBSztJQThCVixjQUFjLEVBQUUsTUFBTyxHRnpKeEI7SUFGRCx5QkFBeUIsR0UrSHRCLENBQUMsQ0FBQztNQUNILEtBQUssRUFBQyxlQUFnQjtNQUlyQixjQUFjLEVBQUMsTUFBTztNQUl2QixTQUFTLEVBQUMsSUFBSyxHQU1mO0VBTEEsY0FBYyxDQUFDLFVBQVc7SUZ6STVCLHlCQUF5QixHRStIdEIsQ0FBQyxDQVdDO01BQ0QsWUFBWSxFQUFFLE1BQU8sR0FDckI7RUZ6SUosc0JBQXNCLENBQXRCO0lFeUhDLFNBQVMsRUFBQyxDQUFFO0lBQ1osS0FBSyxFQUFDLElBQUs7SUE0QlYsY0FBYyxFQUFFLEdBQUksR0ZwSnJCO0lBRkQsc0JBQXNCLEdFNEhuQixDQUFDLENBQUM7TUFDSCxLQUFLLEVBQUMsZUFBZ0I7TUFFckIsY0FBYyxFQUFDLEdBQUk7TUFNcEIsU0FBUyxFQUFDLElBQUssR0FNZjtFQUxBLGNBQWMsQ0FBQyxVQUFXO0lGdEk1QixzQkFBc0IsR0U0SG5CLENBQUMsQ0FXQztNQUNELFlBQVksRUFBRSxNQUFPLEdBQ3JCO0VGdElKLHlCQUF5QixDQUF6QjtJRXNIQyxTQUFTLEVBQUMsQ0FBRTtJQUNaLEtBQUssRUFBQyxJQUFLO0lBZ0NWLGNBQWMsRUFBRSxNQUFPLEdGckp4QjtJQUZELHlCQUF5QixHRXlIdEIsQ0FBQyxDQUFDO01BQ0gsS0FBSyxFQUFDLGVBQWdCO01BTXJCLGNBQWMsRUFBQyxNQUFPO01BRXZCLFNBQVMsRUFBQyxJQUFLLEdBTWY7RUFMQSxjQUFjLENBQUMsVUFBVztJRm5JNUIseUJBQXlCLEdFeUh0QixDQUFDLENBV0M7TUFDRCxZQUFZLEVBQUUsTUFBTyxHQUNyQjtFRnZHSixhQUFhLENBQWI7SURrWEEsT0FBTyxFQUFDLElBQUssR0NoWFo7RUFJRCxvQkFBb0IsQ0FBcEI7SUQyWEEsVUFBVSxFQUFDLE1BQU8sR0N6WGpCO0VBSUQsYUFBYSxDQUFiO0lEc1lBLE9BQU8sRUFBQyxLQUFNLEdDcFliO0VBSUQsb0JBQW9CLENBQXBCO0lEaVpBLE9BQU8sRUFBQyxZQUFhLEdDL1lwQjtFQUlELGdCQUFnQixDQUFoQjtJRDJaQSxVQUFVLEVBQUMsT0FBUSxHQ3pabEI7RUFhQSxxQkFBcUIsSUUyQnBCLEFBQUEsS0FBQyxFQUFPLEtBQUssQUFBWixDQUFhLFlBQWEsQ0FBQSxJQUFJLEVBQWpDO0lBQ0MsS0FBSyxFWDVWK0IsSUFBSSxHVzZWeEM7RUY3QkEscUJBQXFCLElFMkJwQixBQUFBLEtBQUMsRUFBTyxLQUFLLEFBQVosQ0FBYSxZQUFhLENBQUEsSUFBSSxFQUFqQztJQUNDLEtBQUssRVgzVitCLElBQUksR1c0VnhDO0VGN0JBLHNCQUFzQixJRTJCckIsQUFBQSxLQUFDLEVBQU8sS0FBSyxBQUFaLENBQWEsWUFBYSxDQUFBLEtBQUssRUFBbEM7SUFDQyxLQUFLLEVYMVZnQyxJQUFJLEdXMlZ6QztFRm5CRCxrQkFBa0IsQ0FBbEI7SURtTkEsUUFBUSxFQUFDLFFBQVM7SUFDbEIsT0FBTyxFQUFDLEtBQU07SUFDZCxRQUFRLEVBQUMsTUFBTyxHQ25OZjtJQUZELGtCQUFrQixBRHVOakIsT0FBTyxDQUFDO01BQ1IsY0FBYyxFQUFFLElBQUs7TUFDckIsT0FBTyxFQUFDLEVBQUc7TUFDWCxRQUFRLEVBQUMsUUFBUztNQUNsQixHQUFHLEVBQUMsQ0FBRTtNQUFFLElBQUksRUFBQyxDQUFFO01BQ2YsS0FBSyxFQUFDLElBQUs7TUFBRSxNQUFNLEVBQUMsT0FBUTtNQUc1QixVQUFVLEVBQUUsbUVBQWU7TUFDM0IsZUFBZSxFQUFFLFNBQU0sQ0FBSSxJQUFJO01BQy9CLE9BQU8sRUFBQyxLQUFNLEdBQ2Q7RUNvQkMsSUFBSSxDQUFDO0lBQ0osU0FBUyxFSHRqQkEsR0FBRyxHR3VqQlo7O0FGbk1ILE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLE1BQU07RUMzUTlCLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBcGlCO0lBaXFCRyxhQUFnQixFSHZXMkIsSUFBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLElBQWEsR0d2VHpEO0VBRkQsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUE3QztJQWlxQkcsYUFBZ0IsRUh2VzJCLElBQWE7SUd1V3hELFlBQWdCLEVIeFcwQixJQUFhLEdHdlR6RDtFQUZELFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBaEQ7SUFpcUJHLGFBQWdCLEVIdlcyQixJQUFhO0lHdVd4RCxZQUFnQixFSHhXMEIsSUFBYSxHR3ZUekQ7O0FEeVFBLE1BQU0sQ0FBTixNQUFNLE1BQU0sU0FBUyxFQUFFLEtBQUs7RUMzUTdCLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBcGlCO0lBaXFCRyxhQUFnQixFSHZXMkIsR0FBYTtJR3VXeEQsWUFBZ0IsRUh4VzBCLEdBQWEsR0d2VHpEO0VBRkQsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUE3QztJQWlxQkcsYUFBZ0IsRUh2VzJCLEdBQWE7SUd1V3hELFlBQWdCLEVIeFcwQixHQUFhLEdHdlR6RDtFQUZELFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBaEQ7SUFpcUJHLGFBQWdCLEVIdlcyQixHQUFhO0lHdVd4RCxZQUFnQixFSHhXMEIsR0FBYSxHR3ZUekQ7O0NDMGVHLEFBQUEsS0FBQyxFQUFPLElBQUksQUFBWCxLQUFlLEFBQUEsS0FBQyxFQUFPLEtBQUssQUFBWjtDQUNqQixBQUFBLEtBQUMsRUFBTyxJQUFJLEFBQVgsS0FBZSxBQUFBLEtBQUMsRUFBTyxLQUFLLEFBQVosRUFEakI7RUFDQyxXQUFXLEVBQUUsS0FBZ0I7RUFDN0IsWUFBWSxFQUFFLEtBQWlCLEdBQy9COztBRnBPSixNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNO0dFaU8xQixBQUFBLEtBQUMsRUFBTyxJQUFJLEFBQVgsS0FBZSxBQUFBLEtBQUMsRUFBTyxLQUFLLEFBQVo7R0FDakIsQUFBQSxLQUFDLEVBQU8sSUFBSSxBQUFYLEtBQWUsQUFBQSxLQUFDLEVBQU8sS0FBSyxBQUFaLEVBRGpCO0lBQ0MsV0FBVyxFQUFFLEtBQWdCO0lBQzdCLFlBQVksRUFBRSxLQUFpQixHQUMvQjs7QUZwT0osTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsS0FBSztHRWlPekIsQUFBQSxLQUFDLEVBQU8sSUFBSSxBQUFYLEtBQWUsQUFBQSxLQUFDLEVBQU8sS0FBSyxBQUFaO0dBQ2pCLEFBQUEsS0FBQyxFQUFPLElBQUksQUFBWCxLQUFlLEFBQUEsS0FBQyxFQUFPLEtBQUssQUFBWixFQURqQjtJQUNDLFdBQVcsRUFBRSxJQUFnQjtJQUM3QixZQUFZLEVBQUUsSUFBaUIsR0FDL0I7O0FBdmhCQSxtQkFBbUIsQ0FBbkI7RVQvQ0UsVUFBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELHFCQUFxQixDQUFyQjtFVC9DRSxZQUFlLEVBQVUsQ0FBRSxHU2lENUI7O0FBRkQsc0JBQXNCLENBQXRCO0VUL0NFLGFBQWUsRUFBVSxDQUFFLEdTaUQ1Qjs7QUFGRCxvQkFBb0IsQ0FBcEI7RVQvQ0UsV0FBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELGVBQWUsQ0FBZjtFVGpERSxNQUFNLEVBQUcsQ0FBRSxHU21EWjs7QUFGRCxpQkFBaUIsQ0FBakI7RVQvQ0UsVUFBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELG1CQUFtQixDQUFuQjtFVC9DRSxZQUFlLEVBQVUsQ0FBRSxHU2lENUI7O0FBRkQsb0JBQW9CLENBQXBCO0VUL0NFLGFBQWUsRUFBVSxDQUFFLEdTaUQ1Qjs7QUFGRCxrQkFBa0IsQ0FBbEI7RVQvQ0UsV0FBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELGFBQWEsQ0FBYjtFVGpERSxNQUFNLEVBQUcsQ0FBRSxHU21EWjs7QUFGRCxtQkFBbUIsQ0FBbkI7RVQvQ0UsVUFBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELHFCQUFxQixDQUFyQjtFVC9DRSxZQUFlLEVBQVUsQ0FBRSxHU2lENUI7O0FBRkQsc0JBQXNCLENBQXRCO0VUL0NFLGFBQWUsRUFBVSxDQUFFLEdTaUQ1Qjs7QUFGRCxvQkFBb0IsQ0FBcEI7RVQvQ0UsV0FBZSxFQUFVLENBQUUsR1NpRDVCOztBQUZELGVBQWUsQ0FBZjtFVGpERSxNQUFNLEVBQUcsQ0FBRSxHU21EWjs7QUZpVEwsTUFBTSxDQUFOLE1BQU0sTUFBTSxTQUFTLEVBQUUsTUFBTTtFRW5UekIsNEJBQTRCLENBQTVCO0lUL0NFLFVBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELDhCQUE4QixDQUE5QjtJVC9DRSxZQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCwrQkFBK0IsQ0FBL0I7SVQvQ0UsYUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsNkJBQTZCLENBQTdCO0lUL0NFLFdBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELHdCQUF3QixDQUF4QjtJVGpERSxNQUFNLEVBQUcsQ0FBRSxHU21EWjtFQUZELDBCQUEwQixDQUExQjtJVC9DRSxVQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCw0QkFBNEIsQ0FBNUI7SVQvQ0UsWUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsNkJBQTZCLENBQTdCO0lUL0NFLGFBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELDJCQUEyQixDQUEzQjtJVC9DRSxXQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCxzQkFBc0IsQ0FBdEI7SVRqREUsTUFBTSxFQUFHLENBQUUsR1NtRFo7RUFGRCw0QkFBNEIsQ0FBNUI7SVQvQ0UsVUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsOEJBQThCLENBQTlCO0lUL0NFLFlBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELCtCQUErQixDQUEvQjtJVC9DRSxhQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCw2QkFBNkIsQ0FBN0I7SVQvQ0UsV0FBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsd0JBQXdCLENBQXhCO0lUakRFLE1BQU0sRUFBRyxDQUFFLEdTbURaOztBRmlUTCxNQUFNLENBQU4sTUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0VFblR4QiwyQkFBMkIsQ0FBM0I7SVQvQ0UsVUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsNkJBQTZCLENBQTdCO0lUL0NFLFlBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELDhCQUE4QixDQUE5QjtJVC9DRSxhQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCw0QkFBNEIsQ0FBNUI7SVQvQ0UsV0FBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsdUJBQXVCLENBQXZCO0lUakRFLE1BQU0sRUFBRyxDQUFFLEdTbURaO0VBRkQseUJBQXlCLENBQXpCO0lUL0NFLFVBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELDJCQUEyQixDQUEzQjtJVC9DRSxZQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCw0QkFBNEIsQ0FBNUI7SVQvQ0UsYUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsMEJBQTBCLENBQTFCO0lUL0NFLFdBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELHFCQUFxQixDQUFyQjtJVGpERSxNQUFNLEVBQUcsQ0FBRSxHU21EWjtFQUZELDJCQUEyQixDQUEzQjtJVC9DRSxVQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCw2QkFBNkIsQ0FBN0I7SVQvQ0UsWUFBZSxFQUFVLENBQUUsR1NpRDVCO0VBRkQsOEJBQThCLENBQTlCO0lUL0NFLGFBQWUsRUFBVSxDQUFFLEdTaUQ1QjtFQUZELDRCQUE0QixDQUE1QjtJVC9DRSxXQUFlLEVBQVUsQ0FBRSxHU2lENUI7RUFGRCx1QkFBdUIsQ0FBdkI7SVRqREUsTUFBTSxFQUFHLENBQUUsR1NtRFo7O0FUN0NQLEtBQUssQ0FBQTtFQUNELFVBQVUsRUFBRyxHQUFJO0VBQ2pCLE1BQU0sRUFBRyxLQUFNLEdBQ2xCIiwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */
