/********************************************************* {COPYRIGHT-TOP} ***
* Licensed Materials - Property of IBM
* 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63
*
* (C) Copyright IBM Corporation 2017
*
* All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
********************************************************** {COPYRIGHT-END} **/
.apim .apiEditor,
.apim .policyEditor {
  top: 120px;
}
.apim .productEditor .contentArea,
.apim .apiEditor .contentArea {
  top: 28px;
}
.apim .detailsEditor .productSettingsExpander,
.apim .detailsEditor .productSettingsTitle,
.apim .detailsEditor .productSettingsApproval,
.apim .detailsEditor .productSettingsRateLimit,
.apim .detailsEditor .productSettingsDelete {
  display: inline-block;
  vertical-align: top;
}
.apim .detailsEditor .productSettingsRateLimit {
  width: 100%;
}
.apim .detailsEditor .productSettingsExpander {
  width: 32px;
}
.apim .detailsEditor .planApiDetails {
  padding-right: 20px;
}
.apim .detailsEditor .productPlanEditor {
  -moz-box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
  -webkit-box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
  border-radius: 3px;
  -webkit-box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
  box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
}
.apim .detailsEditor .productPlanEditor .rateLimitTitle {
  display: none;
}
.apim .detailsEditor .productPlanEditor .apiOperation .rateLimitTitle {
  display: inline-block;
}
.apim .detailsEditor .productPlanEditor .apiOperation .productAPIExpanderColumn {
  width: 44px;
}
.apim .detailsEditor .productAPIActionsColumn {
  display: inline-block;
  padding-right: 46px;
  width: 25px;
}
.apim .detailsEditor .productAPITitleColumn {
  display: inline-block;
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  line-height: 32px;
}
.apim .detailsEditor .productAPIExpanderColumn {
  display: inline-block;
  width: 22px;
}
.apim apim-burst-limit {
  min-width: 500px;
}
.apim apim-burst-limit .rateLimitInterval {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.6;
  -ms-flex: 0.6;
  flex: 0.6;
}
.apim apim-rate-limit {
  min-width: 500px;
}
.apim apim-rate-limit .rateLimitInterval {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
}
.apim apim-rate-limit .rateLimitHardLimit {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
  line-height: 44px;
  margin-left: 5px;
}
.apim .apiOperation apim-rate-limit,
.apim .apiOperation .rateLimitHardLimit {
  line-height: 24px;
}
.apim .productNameColumn {
  float: left;
}
.apim .card .productNameColumn {
  max-width: 70%;
  padding-left: 18px;
}
.apim .productView {
  padding: 0 20px;
}
.apim .productView .rateLimit {
  width: 40%;
}
.apim .productPlanEditor md-checkbox {
  margin-bottom: 0;
}
.apim .apiOperation {
  border-bottom: 0;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  padding: 5px 0;
}
.apim .apiOperation .operationName {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.6;
  -ms-flex: 0.6;
  flex: 0.6;
  white-space: nowrap;
}
.apim .apiOperation .rateLimit {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
}
.apim .productPlans .operationName:before {
  padding-left: 15px;
  padding-right: 5px;
}
.apim li:last-child apim-product-plan-api-editor .productApi {
  border-bottom: 1px solid #e5e5e5;
}
.apim .operationName {
  width: 50%;
}
.apim .showRateLimit .operationName {
  display: inline-block;
  overflow: hidden;
  -o-text-overflow: ellipsis;
  text-overflow: ellipsis;
  vertical-align: middle;
  white-space: nowrap;
  width: 200px;
}
.apim .showRateLimit .productAPIRateLimitColumn {
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  -o-box-flex: 2;
  box-flex: 2;
  -webkit-flex: 2;
  -ms-flex: 2;
  flex: 2;
}
.apim .productEditPane {
  background-color: #fff;
  padding: 20px;
}
.apim .productEditPane select {
  width: 100%;
}
.apim .productEditPane label {
  color: #bebebe;
  display: block;
  font-size: small;
  font-weight: 500;
  margin-bottom: 0;
  margin-top: 10px;
}
.apim .productEditPane .rateLimitHard {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
}
.apim .productEditPane .productApi .headline {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.apim h3 label {
  font-size: 24px;
  font-weight: 500;
  line-height: 1.1;
}
.apim .productTitle {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
  padding-right: 5px;
}
.apim .productTitle input {
  font-size: large;
}
.apim .apisHeader {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.apim .apisSection .apiTitleColumn {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.3;
  -ms-flex: 0.3;
  flex: 0.3;
}
.apim .apisSection .apiVersionColumn {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.15;
  -ms-flex: 0.15;
  flex: 0.15;
}
.apim .apisSection .apiOperationsColumn {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.15;
  -ms-flex: 0.15;
  flex: 0.15;
}
.apim .apisSection .apiRateLimitColumn {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.4;
  -ms-flex: 0.4;
  flex: 0.4;
}
.apim .deployedApi.running .deployedIndicator {
  background-color: #8dc935;
  border: 0;
  width: 10px;
  height: 10px;
}
.apim .deployedApi.stopped .deployedIndicator {
  background-color: #dcdcdc;
  border: 0;
  width: 10px;
  height: 10px;
}
.apim .deployedApi.suspended .deployedIndicator {
  border: 3px solid #dcdcdc;
  width: 10px;
  height: 10px;
}
.apim apim-burst-limit,
.apim apim-rate-limit {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.apim apim-burst-limit .rateLimitRequests,
.apim apim-rate-limit .rateLimitRequests,
.apim apim-burst-limit .rateLimitCount,
.apim apim-rate-limit .rateLimitCount {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.2;
  -ms-flex: 0.2;
  flex: 0.2;
}
.apim .detailsEditor .rateLimitRequests,
.apim .detailsEditor .rateLimitCount,
.apim .detailsEditor .rateLimitInterval {
  display: inline-block;
  margin: 0 5px 0 0;
}
.apim .productLastModifiedColumn,
.apim .productActionsColumn {
  float: right;
  margin-right: 18px;
}
.apim .productContactEmail,
.apim .productContactURL,
.apim .productLicenseLink {
  display: block;
}
.apim .productApi,
.apim .productPlan {
  border-top: 1px solid #e5e5e5;
}
.apim .productApi .headline,
.apim .productPlan .headline {
  padding: 5px 0;
}
.apim .productPlans .productApi.apiNotIncluded .operationName:before,
.apim .productPlans .apiOperation.operationNotIncluded .operationName:before,
.apim .productPlans .productApi.apiNotIncluded .headline:before {
  color: #bebebe;
  content: ' \2717';
}
.apim .productPlans .operationName:before,
.apim .productPlans .productApi .headline:before {
  color: #008000;
  content: ' \2713';
}
.apim .productApi.apiNotIncluded,
.apim .productApi.apiNotIncluded a {
  color: #bebebe;
}
.apim li:first-child apim-product-api-editor .productApi,
.apim li:first-child .productPlan {
  border-top: 0;
}
.apim .operationName,
.apim .rateLimit {
  display: inline-block;
}
.apim .productHeadline {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.apim .productEditPane .rateLimit,
.apim .productEditPane .productSubVis {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.apim .productHeadline,
.apim .productEditPane .productSubVis {
  -webkit-box-align: end;
  -moz-box-align: end;
  -o-box-align: end;
  -ms-flex-align: end;
  -webkit-align-items: flex-end;
  align-items: flex-end;
}
.apim .productEditPane .visibility,
.apim .productEditPane .subscribability {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.5;
  -ms-flex: 0.5;
  flex: 0.5;
}
.apim .productEditPane .rateLimitCalls,
.apim .productEditPane .rateLimitInterval {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.3;
  -ms-flex: 0.3;
  flex: 0.3;
}
.apim .productName,
.apim .productVersion {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 0.3;
  -ms-flex: 0.3;
  flex: 0.3;
  padding-left: 10px;
  padding-right: 5px;
}
.apim .deployedPlan .deployedIndicator,
.apim .deployedProduct .deployedIndicator,
.apim .environment .deployedIndicator,
.apim .environmentDropdown .deployedIndicator {
  background-color: #f0f0f0;
  border: 0;
  border-radius: 50%;
  width: 10px;
  height: 10px;
}
.apim .deployedPlan.published .deployedIndicator,
.apim .deployedPlan.running .deployedIndicator,
.apim .deployedProduct.published .deployedIndicator,
.apim .deployedProduct.running .deployedIndicator,
.apim .environment.published .deployedIndicator,
.apim .environment.running .deployedIndicator,
.apim .environmentDropdown.published .deployedIndicator {
  background-color: #8dc935;
  border: 0;
  width: 10px;
  height: 10px;
}
.apim .deployedPlan.deprecated .deployedIndicator,
.apim .deployedProduct.deprecated .deployedIndicator,
.apim .environment.deprecated .deployedIndicator,
.apim .environment.stopped .deployedIndicator,
.apim .environmentDropdown.deprecated .deployedIndicator {
  background-color: inherit;
  border: 3px solid #8dc935;
  width: 10px;
  height: 10px;
}
.apim .deployedPlan.deployed .deployedIndicator,
.apim .deployedPlan.staged .deployedIndicator,
.apim .deployedProduct.deployed .deployedIndicator,
.apim .deployedProduct.staged .deployedIndicator,
.apim .environment.deployed .deployedIndicator,
.apim .environment.staged .deployedIndicator,
.apim .environmentDropdown.deployed .deployedIndicator,
.apim .environmentDropdown.staged .deployedIndicator {
  background-color: #8dc935;
  border: 1px solid #8dc935;
  width: 10px;
  height: 10px;
}
.apim .deployedPlan.retired .deployedIndicator,
.apim .deployedProduct.retired .deployedIndicator,
.apim .environment.retired .deployedIndicator,
.apim .environmentDropdown.retired .deployedIndicator {
  background-color: inherit;
  border: 3px solid #dcdcdc;
  width: 10px;
  height: 10px;
}
.apim .deployedPlan.archived .deployedIndicator,
.apim .deployedProduct.archived .deployedIndicator,
.apim .environment.archived .deployedIndicator,
.apim .environmentDropdown.archived .deployedIndicator {
  background-color: inherit;
  border: 3px solid #f0f0f0;
  width: 10px;
  height: 10px;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaW0vY3NzL3Byb2R1Y3RzLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvZmxleC5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL2JvcmRlci1yYWRpdXMuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi92ZW5kb3Iuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9zaXplLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvc3R5bHVzL2xpYi9mdW5jdGlvbnMvaW5kZXguc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9vdmVyZmxvdy5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL2JvcmRlci5zdHlsIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBV0U7QUFDQTtFQUNFLEtBQUssTUFBTDs7QUFFRjtBQUNBO0VBQ0UsS0FBSyxLQUFMOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUNGQSxTQUFTLGFBQVQ7RURJRSxnQkFBZ0IsSUFBaEI7O0FBRUY7RUFDRSxPQUFPLEtBQVA7O0FBRUY7RUFDRSxPQUFPLEtBQVA7O0FBRUY7RUFDRSxlQUFlLEtBQWY7O0FBRUY7RUFDRSxpQkFBaUIsNEJBQWpCO0VBQ0Esb0JBQW9CLDRCQUFwQjtFRWFKLGVBQWMsSUFBZDtFQ1RnQixvQkFBRyw0QkFBSDtFQVJILFlBQUcsNEJBQUg7O0FIUVQ7RUNyQkYsU0FBUyxLQUFUOztBRHlCSTtFQ3pCSixTQUFTLGFBQVQ7O0FENEJJO0VBQ0UsT0FBTyxLQUFQOztBQUVOO0VDL0JBLFNBQVMsYUFBVDtFRGlDRSxlQUFlLEtBQWY7RUFDQSxPQUFPLEtBQVA7O0FBRUY7RUNwQ0EsU0FBUyxhQUFUO0VFcUJjLGtCQUFHLEVBQUg7RUFBQSxlQUFHLEVBQUg7RUFBQSxhQUFHLEVBQUg7RUFSSCxVQUFHLEVBQUg7RUFRRyxjQUFHLEVBQUg7RUFBQSxVQUFHLEVBQUg7RUFSSCxN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QTtBQUNBO0VBQ0Usa0JBQWtCLFFBQWxCO0VPNVVBLFFBQVEsa0JBQVI7RUhjQSxPQUFpQixLQUFqQjtFQUNBLFFBQWtCLEtBQWxCIiwiZmlsZSI6ImFwaW0vY3NzL3Byb2R1Y3RzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioge0NPUFlSSUdIVC1UT1B9ICoqKlxuKiBMaWNlbnNlZCBNYXRlcmlhbHMgLSBQcm9wZXJ0eSBvZiBJQk1cbiogNTcyNS1aMjIsIDU3MjUtWjYzLCA1NzI1LVUzMywgNTcyNS1aNjNcbipcbiogKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAxN1xuKlxuKiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlXG4qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB7Q09QWVJJR0hULUVORH0gKiovXG4uYXBpbVxuICAuYXBpRWRpdG9yXG4gIC5wb2xpY3lFZGl0b3JcbiAgICB0b3A6IDEyMHB4XG5cbiAgLnByb2R1Y3RFZGl0b3IgLmNvbnRlbnRBcmVhXG4gIC5hcGlFZGl0b3IgLmNvbnRlbnRBcmVhXG4gICAgdG9wOiAyOHB4XG5cbiAgLmRldGFpbHNFZGl0b3JcbiAgICAucHJvZHVjdFNldHRpbmdzRXhwYW5kZXJcbiAgICAucHJvZHVjdFNldHRpbmdzVGl0bGVcbiAgICAucHJvZHVjdFNldHRpbmdzQXBwcm92YWxcbiAgICAucHJvZHVjdFNldHRpbmdzUmF0ZUxpbWl0XG4gICAgLnByb2R1Y3RTZXR0aW5nc0RlbGV0ZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wXG5cbiAgICAucHJvZHVjdFNldHRpbmdzUmF0ZUxpbWl0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gICAgLnByb2R1Y3RTZXR0aW5nc0V4cGFuZGVyXG4gICAgICB3aWR0aDogMzJweFxuXG4gICAgLnBsYW5BcGlEZXRhaWxzXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4XG5cbiAgICAucHJvZHVjdFBsYW5FZGl0b3JcbiAgICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAuMSlcbiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAuMSlcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweFxuICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAuMSlcblxuICAgICAgLnJhdGVMaW1pdFRpdGxlXG4gICAgICAgIGRpc3BsYXk6IG5vbmVcblxuICAgICAgLmFwaU9wZXJhdGlvblxuICAgICAgICAucmF0ZUxpbWl0VGl0bGVcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcblxuICAgICAgICAucHJvZHVjdEFQSUV4cGFuZGVyQ29sdW1uXG4gICAgICAgICAgd2lkdGg6IDQ0cHhcblxuICAgIC5wcm9kdWN0QVBJQWN0aW9uc0NvbHVtblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nLXJpZ2h0OiA0NnB4XG4gICAgICB3aWR0aDogMjVweFxuXG4gICAgLnByb2R1Y3RBUElUaXRsZUNvbHVtblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBmbGV4OiAxXG4gICAgICBsaW5lLWhlaWdodDogMzJweFxuXG4gICAgLnByb2R1Y3RBUElFeHBhbmRlckNvbHVtblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMjJweFxuXG4gIGFwaW0tYnVyc3QtbGltaXRcbiAgICBtaW4td2lkdGg6IDUwMHB4XG5cbiAgICAucmF0ZUxpbWl0SW50ZXJ2YWxcbiAgICAgIGZsZXg6IC42XG5cbiAgYXBpbS1yYXRlLWxpbWl0XG4gICAgbWluLXdpZHRoOiA1MDBweFxuXG4gICAgLnJhdGVMaW1pdEludGVydmFsXG4gICAgICBmbGV4OiAuNFxuXG4gICAgLnJhdGVMaW1pdEhhcmRMaW1pdFxuICAgICAgZmxleDogLjRcbiAgICAgIGxpbmUtaGVpZ2h0OiA0NHB4XG4gICAgICBtYXJnaW4tbGVmdDogNXB4XG5cbiAgLmFwaU9wZXJhdGlvblxuICAgIGFwaW0tcmF0ZS1saW1pdFxuICAgIC5yYXRlTGltaXRIYXJkTGltaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4XG5cbiAgLnByb2R1Y3ROYW1lQ29sdW1uXG4gICAgZmxvYXQ6IGxlZnRcblxuICAuY2FyZCAucHJvZHVjdE5hbWVDb2x1bW5cbiAgICBtYXgtd2lkdGg6IDcwJVxuICAgIHBhZGRpbmctbGVmdDogMThweFxuXG4gIC5wcm9kdWN0Vmlld1xuICAgIHBhZGRpbmc6IDAgMjBweFxuXG4gICAgLnJhdGVMaW1pdFxuICAgICAgd2lkdGg6IDQwJVxuXG4gIC5wcm9kdWN0UGxhbkVkaXRvciBtZC1jaGVja2JveFxuICAgIG1hcmdpbi1ib3R0b206IDBcblxuICAuYXBpT3BlcmF0aW9uXG4gICAgYm9yZGVyLWJvdHRvbTogMFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwYWRkaW5nOiA1cHggMFxuXG4gICAgLm9wZXJhdGlvbk5hbWVcbiAgICAgIGZsZXg6IC42XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICAucmF0ZUxpbWl0XG4gICAgICBmbGV4OiAuNFxuXG4gIC5wcm9kdWN0UGxhbnMgLm9wZXJhdGlvbk5hbWU6YmVmb3JlXG4gICAgcGFkZGluZy1sZWZ0OiAxNXB4XG4gICAgcGFkZGluZy1yaWdodDogNXB4XG5cbiAgbGk6bGFzdC1jaGlsZCBhcGltLXByb2R1Y3QtcGxhbi1hcGktZWRpdG9yIC5wcm9kdWN0QXBpXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFNUU1RTVcblxuICAub3BlcmF0aW9uTmFtZVxuICAgIHdpZHRoOiA1MCVcblxuICAuc2hvd1JhdGVMaW1pdFxuICAgIC5vcGVyYXRpb25OYW1lXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICB3aWR0aDogMjAwcHhcblxuICAgIC5wcm9kdWN0QVBJUmF0ZUxpbWl0Q29sdW1uXG4gICAgICBmbGV4OiAyXG5cbiAgLnByb2R1Y3RFZGl0UGFuZVxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlXG4gICAgcGFkZGluZzogMjBweFxuXG4gICAgc2VsZWN0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gICAgbGFiZWxcbiAgICAgIGNvbG9yOiAjQkVCRUJFXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgZm9udC1zaXplOiBzbWFsbFxuICAgICAgZm9udC13ZWlnaHQ6IDUwMFxuICAgICAgbWFyZ2luLWJvdHRvbTogMFxuICAgICAgbWFyZ2luLXRvcDogMTBweFxuXG4gICAgLnJhdGVMaW1pdEhhcmRcbiAgICAgIGZsZXg6IC40XG5cbiAgICAucHJvZHVjdEFwaSAuaGVhZGxpbmVcbiAgICAgIGRpc3BsYXk6IGZsZXhcblxuICBoMyBsYWJlbCAvLyBAc3R5bGludCBpZ25vcmUgY29sb25zXG4gICAgZm9udC1zaXplOiAyNHB4XG4gICAgZm9udC13ZWlnaHQ6IDUwMFxuICAgIGxpbmUtaGVpZ2h0OiAxLjFcblxuICAucHJvZHVjdFRpdGxlXG4gICAgZmxleDogLjRcbiAgICBwYWRkaW5nLXJpZ2h0OiA1cHhcblxuICAgIGlucHV0XG4gICAgICBmb250LXNpemU6IGxhcmdlXG5cbiAgLmFwaXNIZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG5cbiAgLmFwaXNTZWN0aW9uXG4gICAgLmFwaVRpdGxlQ29sdW1uXG4gICAgICBmbGV4OiAuM1xuXG4gICAgLmFwaVZlcnNpb25Db2x1bW5cbiAgICAgIGZsZXg6IC4xNVxuXG4gICAgLmFwaU9wZXJhdGlvbnNDb2x1bW5cbiAgICAgIGZsZXg6IC4xNVxuXG4gICAgLmFwaVJhdGVMaW1pdENvbHVtblxuICAgICAgZmxleDogLjRcblxuICAuZGVwbG95ZWRBcGlcbiAgICAmLnJ1bm5pbmcgLmRlcGxveWVkSW5kaWNhdG9yXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQxLCAyMDEsIDUzKVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBzaXplOiAxMHB4XG5cbiAgICAmLnN0b3BwZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjIwLCAyMjAsIDIyMClcbiAgICAgIGJvcmRlcjogMFxuICAgICAgc2l6ZTogMTBweFxuXG4gICAgJi5zdXNwZW5kZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gICAgICBib3JkZXI6IDNweCBzb2xpZCByZ2IoMjIwLCAyMjAsIDIyMClcbiAgICAgIHNpemU6IDEwcHhcblxuICBhcGltLWJ1cnN0LWxpbWl0XG4gIGFwaW0tcmF0ZS1saW1pdFxuICAgIGRpc3BsYXk6IGZsZXhcblxuICAgIC5yYXRlTGltaXRSZXF1ZXN0c1xuICAgIC5yYXRlTGltaXRDb3VudFxuICAgICAgZmxleDogLjJcblxuICAuZGV0YWlsc0VkaXRvclxuICAgIC5yYXRlTGltaXRSZXF1ZXN0c1xuICAgIC5yYXRlTGltaXRDb3VudFxuICAgIC5yYXRlTGltaXRJbnRlcnZhbFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBtYXJnaW46IDAgNXB4IDAgMFxuXG4gIC5wcm9kdWN0TGFzdE1vZGlmaWVkQ29sdW1uXG4gIC5wcm9kdWN0QWN0aW9uc0NvbHVtblxuICAgIGZsb2F0OiByaWdodFxuICAgIG1hcmdpbi1yaWdodDogMThweFxuXG4gIC5wcm9kdWN0Q29udGFjdEVtYWlsXG4gIC5wcm9kdWN0Q29udGFjdFVSTFxuICAucHJvZHVjdExpY2Vuc2VMaW5rXG4gICAgZGlzcGxheTogYmxvY2tcblxuICAucHJvZHVjdEFwaVxuICAucHJvZHVjdFBsYW5cbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0U1RTVFNVxuXG4gICAgLmhlYWRsaW5lXG4gICAgICBwYWRkaW5nOiA1cHggMFxuXG4gIC5wcm9kdWN0UGxhbnNcbiAgICAucHJvZHVjdEFwaS5hcGlOb3RJbmNsdWRlZCAub3BlcmF0aW9uTmFtZTpiZWZvcmVcbiAgICAuYXBpT3BlcmF0aW9uLm9wZXJhdGlvbk5vdEluY2x1ZGVkIC5vcGVyYXRpb25OYW1lOmJlZm9yZVxuICAgIC5wcm9kdWN0QXBpLmFwaU5vdEluY2x1ZGVkIC5oZWFkbGluZTpiZWZvcmVcbiAgICAgIGNvbG9yOiAjQkVCRUJFXG4gICAgICBjb250ZW50OiAnIFxcMjcxNydcblxuICAgIC5vcGVyYXRpb25OYW1lOmJlZm9yZVxuICAgIC5wcm9kdWN0QXBpIC5oZWFkbGluZTpiZWZvcmVcbiAgICAgIGNvbG9yOiBncmVlblxuICAgICAgY29udGVudDogJyBcXDI3MTMnXG5cbiAgLnByb2R1Y3RBcGkuYXBpTm90SW5jbHVkZWRcbiAgICAmXG4gICAgYVxuICAgICAgY29sb3I6ICNCRUJFQkVcblxuICBsaTpmaXJzdC1jaGlsZFxuICAgIGFwaW0tcHJvZHVjdC1hcGktZWRpdG9yIC5wcm9kdWN0QXBpXG4gICAgLnByb2R1Y3RQbGFuXG4gICAgICBib3JkZXItdG9wOiAwXG5cbiAgLm9wZXJhdGlvbk5hbWVcbiAgLnJhdGVMaW1pdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuXG4gIC5wcm9kdWN0SGVhZGxpbmVcbiAgICBkaXNwbGF5OiBmbGV4XG5cbiAgLnByb2R1Y3RFZGl0UGFuZVxuICAgIC5yYXRlTGltaXRcbiAgICAucHJvZHVjdFN1YlZpc1xuICAgICAgZGlzcGxheTogZmxleFxuXG4gIC5wcm9kdWN0SGVhZGxpbmVcbiAgLnByb2R1Y3RFZGl0UGFuZSAucHJvZHVjdFN1YlZpc1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZFxuXG4gIC5wcm9kdWN0RWRpdFBhbmVcbiAgICAudmlzaWJpbGl0eVxuICAgIC5zdWJzY3JpYmFiaWxpdHlcbiAgICAgIGZsZXg6IC41XG5cbiAgICAucmF0ZUxpbWl0Q2FsbHNcbiAgICAucmF0ZUxpbWl0SW50ZXJ2YWxcbiAgICAgIGZsZXg6IC4zXG5cbiAgLnByb2R1Y3ROYW1lXG4gIC5wcm9kdWN0VmVyc2lvblxuICAgIGZsZXg6IC4zXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4XG4gICAgcGFkZGluZy1yaWdodDogNXB4XG5cbiAgLmRlcGxveWVkUGxhbiAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmRlcGxveWVkUHJvZHVjdCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50IC5kZXBsb3llZEluZGljYXRvclxuICAuZW52aXJvbm1lbnREcm9wZG93biAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQwLCAyNDAsIDI0MClcbiAgICBib3JkZXI6IDBcbiAgICBib3JkZXItcmFkaXVzOiA1MCVcbiAgICBzaXplOiAxMHB4XG5cbiAgLmRlcGxveWVkUGxhbi5wdWJsaXNoZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5kZXBsb3llZFBsYW4ucnVubmluZyAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmRlcGxveWVkUHJvZHVjdC5wdWJsaXNoZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5kZXBsb3llZFByb2R1Y3QucnVubmluZyAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50LnB1Ymxpc2hlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50LnJ1bm5pbmcgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5lbnZpcm9ubWVudERyb3Bkb3duLnB1Ymxpc2hlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQxLCAyMDEsIDUzKVxuICAgIGJvcmRlcjogMFxuICAgIHNpemU6IDEwcHhcblxuICAuZGVwbG95ZWRQbGFuLmRlcHJlY2F0ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5kZXBsb3llZFByb2R1Y3QuZGVwcmVjYXRlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50LmRlcHJlY2F0ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5lbnZpcm9ubWVudC5zdG9wcGVkIC5kZXBsb3llZEluZGljYXRvclxuICAuZW52aXJvbm1lbnREcm9wZG93bi5kZXByZWNhdGVkIC5kZXBsb3llZEluZGljYXRvclxuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXRcbiAgICBib3JkZXI6IDNweCBzb2xpZCByZ2IoMTQxLCAyMDEsIDUzKVxuICAgIHNpemU6IDEwcHhcblxuICAuZGVwbG95ZWRQbGFuLmRlcGxveWVkIC5kZXBsb3llZEluZGljYXRvclxuICAuZGVwbG95ZWRQbGFuLnN0YWdlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmRlcGxveWVkUHJvZHVjdC5kZXBsb3llZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmRlcGxveWVkUHJvZHVjdC5zdGFnZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5lbnZpcm9ubWVudC5kZXBsb3llZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50LnN0YWdlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50RHJvcGRvd24uZGVwbG95ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5lbnZpcm9ubWVudERyb3Bkb3duLnN0YWdlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTQxLCAyMDEsIDUzKVxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNDEsIDIwMSwgNTMpXG4gICAgc2l6ZTogMTBweFxuXG4gIC5kZXBsb3llZFBsYW4ucmV0aXJlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmRlcGxveWVkUHJvZHVjdC5yZXRpcmVkIC5kZXBsb3llZEluZGljYXRvclxuICAuZW52aXJvbm1lbnQucmV0aXJlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50RHJvcGRvd24ucmV0aXJlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0XG4gICAgYm9yZGVyOiAzcHggc29saWQgcmdiKDIyMCwgMjIwLCAyMjApXG4gICAgc2l6ZTogMTBweFxuXG4gIC5kZXBsb3llZFBsYW4uYXJjaGl2ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5kZXBsb3llZFByb2R1Y3QuYXJjaGl2ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gIC5lbnZpcm9ubWVudC5hcmNoaXZlZCAuZGVwbG95ZWRJbmRpY2F0b3JcbiAgLmVudmlyb25tZW50RHJvcGRvd24uYXJjaGl2ZWQgLmRlcGxveWVkSW5kaWNhdG9yXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdFxuICAgIGJvcmRlcjogM3B4IHNvbGlkIHJnYigyNDAsIDI0MCwgMjQwKVxuICAgIHNpemU6IDEwcHhcbiIsIi8qXG4gKiBWZW5kb3IgXCJkaXNwbGF5OiBmbGV4XCIgc3VwcG9ydCB3aXRoIGZhbGxiYWNrIHRvIG9ic29sZXRlIHZlcnNpb25zLlxuICovXG5cbmZsZXgtdmVyc2lvbiA/PSBib3ggZmxleFxuXG4vL1xuLy8gMS4gRGlzcGxheSB2YWx1ZXNcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG5kaXNwbGF5KHR5cGUsIGFyZ3MuLi4pXG4gIGlmIGZsZXggPT0gdHlwZSB8fCBpbmxpbmUtZmxleCA9PSB0eXBlXG4gICAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgICAgaWYgZmxleCA9PSB0eXBlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94IGFyZ3NcbiAgICAgICAgZGlzcGxheTogdmVuZG9yLXZhbHVlKGJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgICAgZWxzZVxuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoaW5saW5lLWJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpIC8vIG92ZXJ3cml0ZXMgb2xkIHdlYmtpdFxuICBlbHNlXG4gICAgZGlzcGxheTogYXJndW1lbnRzXG5cbi8qXG4gKiBOZXcgc3ludGF4IGZvciBicm93c2VycyBsaWtlIEdvb2dsZSBDaHJvbWUuXG4gKiBQbHVzIGEgdHJhbnNsYXRpb24gdG8gdGhlIG9sZCBzeW50YXgsIGlmIHBvc3NpYmxlLlxuICovXG5cblxuLy9cbi8vIDUuIE9yZGVyaW5nIGFuZCBPcmllbnRhdGlvblxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI29yZGVyaW5nLWFuZC1vcmllbnRhdGlvblxuLy9cbi1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBpZiByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCByZXZlcnNlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gICAgaWYgcm93ID09IGRpcmVjdGlvbiB8fCByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LW9yaWVudCcsIGhvcml6b250YWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBjb2x1bW4gPT0gZGlyZWN0aW9uIHx8IGNvbHVtbi1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgdmVydGljYWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbi1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICAvLyBXQVJOOiB3cmFwLXJldmVyc2UgZG9lcyBub3QgaGF2ZSBhIGJveCBlcXVpdmFsZW50LiBUaGlzIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBtYW5uZXJzXG4gICAgLy8gICAgb24gYm94IHZzLiBmbGV4IHZhbHVlcy5cbiAgICBpZiAnd3JhcCcgPT0gdmFsdWUgfHwgd3JhcC1yZXZlcnNlID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIG11bHRpcGxlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuICAgIGVsc2UgaWYgbm93cmFwID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIHNpbmdsZSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuZmxleC1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC13cmFwKHZhbHVlKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKHZhbHVlKVxuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXdyYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC1mbG93KClcbiAgLy8gb2Jzb2xldGVcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1sxXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMF0pXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAoYXJndW1lbnRzWzFdKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1mbG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxub3JkZXIoKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtb3JkaW5hbC1ncm91cCcsIGFyZ3VtZW50cywgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IG1zKVxuICAgIHZlbmRvcignb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuXG4vL1xuLy8gNy4gRmxleGliaWxpdHlcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4aWJpbGl0eVxuLy9cbmZsZXgtZ3Jvdyhncm93dGgpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgZ3Jvd3RoKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1ncm93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtYmFzaXMoKVxuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1iYXNpcycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4LXNocmluaygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXNocmluaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4KGdyb3d0aClcblxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgc2hyaW5rID0gMVxuXG4gICAgaWYgbm9uZSA9PSBncm93dGggfHwgaW5pdGlhbCA9PSBncm93dGhcbiAgICAgIC8vIFdlbGwga25vd24gdmFsdWVzXG4gICAgICBzaHJpbmsgPSAwIGlmIG5vbmUgPT0gZ3Jvd3RoXG4gICAgICBncm93dGggPSAwXG4gICAgZWxzZSBpZiBpcy13aWR0aChncm93dGgpID09IHRydWVcbiAgICAgIC8vIEJhc2lzIGlzIGRlZmluZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlclxuICAgICAgZ3Jvd3RoID0gYXJndW1lbnRzWzFdIHx8IDBcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1syXSBpZiAzIDw9IGxlbmd0aChhcmd1bWVudHMpXG4gICAgZWxzZSBpZiBhcmd1bWVudHNbMV0gJiYgaXMtd2lkdGgoYXJndW1lbnRzWzFdKSA9PSBmYWxzZVxuICAgICAgLy8gR3Jvd3RoIGlzIGZpcnN0IGFuZCBzaHJpbmsgaXMgc2Vjb25kXG4gICAgICBzaHJpbmsgPSBhcmd1bWVudHNbMV1cblxuICAgIC8vIFNpbmNlIHdlIGNhbid0IG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ3Jvd2luZyBhbmQgc2hyaW5raW5nIGluIHRoZSBib3ggbW9kZWwsIHRha2VcbiAgICAvLyB0aGUgb25lIHRoYXQgcHJvdmlkZXMgdGhlIG1vc3QgZmxleGliaWxpdHkuXG4gICAgdmVuZG9yKCdib3gtZmxleCcsIG1heChncm93dGgsIHNocmluayksIGlnbm9yZTogbXMpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxuLy8gY29udmVydHMgdGhlIGp1c3RpZmljYXRpb24gYWxpZ25tZW50XG4tY29udmVydC1qdXN0aWZ5KGFsaWduKVxuICBpZiBmbGV4LXN0YXJ0ID09IGFsaWduXG4gICAgcmV0dXJuIHN0YXJ0XG4gIGVsc2UgaWYgZmxleC1lbmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZW5kXG4gIGVsc2UgaWYgc3BhY2UtYXJvdW5kID09IGFsaWduXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGVcbiAgZWxzZSBpZiBzcGFjZS1iZXR3ZWVuID09IGFsaWduXG4gICAgcmV0dXJuIGp1c3RpZnlcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG4vL1xuLy8gOC4gQWxpZ25tZW50XG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jYWxpZ25tZW50XG4vL1xuanVzdGlmeS1jb250ZW50KGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignanVzdGlmeS1jb250ZW50JywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tY29udGVudChhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3IgYWRqdXN0bWVudCBoZXJlXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWxpbmUtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vLyBjb252ZXJ0cyBhbGlnbm1lbnQgZnJvbSAnZmxleCcgdG8gbm9ybWFsIHZhbHVlXG4tY29udmVydC1hbGlnbm1lbnQoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG5hbGlnbi1pdGVtcyhhbGlnbilcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWl0ZW1zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmFsaWduLXNlbGYoYWxpZ24pXG4gIC8vIFdBUk46IE9ic29sZXRlIHNwZWMgZG9lcyBub3QgYWxsb3cgZm9yIG92ZXJyaWRpbmcgYWxpZ25tZW50IG9uIGluZGl2aWR1YWwgaXRlbXMuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdhbGlnbi1zZWxmJywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB2ZW5kb3IoJ2ZsZXgtaXRlbS1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuIiwiLypcbiAqIEhlbHBlciBmb3IgYm9yZGVyLXJhZGl1cygpLlxuICovXG5cbi1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgaWYgbGVuZ3RoKHBvcykgPT0gM1xuICAgIC8vIGJvcmRlci1yYWRpdXM6IDx0b3AgfCBib3R0b20+IDxsZWZ0IHwgcmlnaHQ+IDxuPlxuICAgIHkgPSBwb3NbMF1cbiAgICB4ID0gcG9zWzFdXG4gICAgLy8gV2UgZG9uJ3QgdXNlIHZlbmRvciBmb3IgYm9kZXItcmFkaXVzIGFueW1vcmVcbiAgICAvLyB2ZW5kb3IoJ2JvcmRlci1yYWRpdXMtJXMlcycgJSBwb3MsIHBvc1syXSwgb25seTogd2Via2l0IG9mZmljaWFsKVxuICAgIHsnYm9yZGVyLSVzLSVzLXJhZGl1cycgJSBwb3N9OiBwb3NbMl0gaW1wb3J0YW5jZVxuICBlbHNlIGlmIHBvc1swXSBpbiAodG9wIGJvdHRvbSlcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8dG9wIHwgYm90dG9tPiA8bj5cbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3NbMF0gbGVmdCBwb3NbMV0sIGltcG9ydGFuY2UpXG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zWzBdIHJpZ2h0IHBvc1sxXSwgaW1wb3J0YW5jZSlcbiAgZWxzZSBpZiBwb3NbMF0gaW4gKGxlZnQgcmlnaHQpXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPGxlZnQgfCByaWdodD4gPG4+XG4gICAgdW5zaGlmdChwb3MsIHRvcCk7XG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICAgIHBvc1swXSA9IGJvdHRvbVxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcblxuLypcbiAqIGJvcmRlci1yYWRpdXMgc3VwcG9ydGluZyBhdWdtZW50ZWQgYmVoYXZpb3IuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgYm9yZGVyLXJhZGl1czogMnB4IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIDVweCBib3R0b20gMTBweFxuICogICAgYm9yZGVyLXJhZGl1czogbGVmdCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgMTBweCBib3R0b20gcmlnaHQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCAxMHB4LCBib3R0b20gcmlnaHQgNXB4XG4gKlxuICovXG5cbmJvcmRlci1yYWRpdXMoKVxuICBwb3MgPSAoKVxuICBhdWdtZW50ZWQgPSBmYWxzZVxuICBpbXBvcnRhbmNlID0gYXJndW1lbnRzW2xlbmd0aChhcmd1bWVudHMpIC0gMV0gPT0gIWltcG9ydGFudCA/ICFpbXBvcnRhbnQgOiB1bnF1b3RlKCcnKVxuXG4gIGZvciBhcmdzIGluIGFyZ3VtZW50c1xuICAgIGZvciBhcmcgaW4gYXJnc1xuICAgICAgaWYgYXJnIGlzIGEgJ2lkZW50J1xuICAgICAgICBhcHBlbmQocG9zLCBhcmcpXG4gICAgICAgIGF1Z21lbnRlZCA9IHRydWVcbiAgICAgIGVsc2VcbiAgICAgICAgYXBwZW5kKHBvcywgYXJnKVxuICAgICAgICBpZiBhdWdtZW50ZWRcbiAgICAgICAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gICAgICAgICAgcG9zID0gKClcbiAgYm9yZGVyLXJhZGl1cyBwb3MgdW5sZXNzIGF1Z21lbnRlZFxuIiwidXNlKCcuLi9ub2Rlcy92ZW5kb3ItaGVscGVycy5qcycpXG5AaW1wb3J0ICdjb25maWcnXG5cbi8qXG4gKiBBbGlhcyBcIm5vd3JhcFwiIGFzIFwibm8td3JhcFwiLlxuICovXG5cbm5vLXdyYXAgPSB1bnF1b3RlKCdub3dyYXAnKVxuXG4vKlxuICogSGVscGVyIHRvIGZpbmQgb3V0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB3aWR0aFxuICovXG5cbmlzLXdpZHRoKHZhbClcbiAgaWYgYXV0byA9PSB2YWxcbiAgICByZXR1cm4gdHJ1ZVxuICBlbHNlIGlmIHZhbCAmJiAndW5pdCcgPT0gdHlwZSh2YWwpXG4gICAgLy8gU3R5bHVzIGRvZXMgbm90IHNob3J0IGNpcmN1aXQgc28gd2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMgYSBkaXN0aW5jdFxuICAgIC8vIG9wZXJhdGlvbiB0byBwcmV2ZW50IGVycm9yc1xuICAgIHJldHVybiAnJyAhPSB1bml0KHZhbClcbiAgcmV0dXJuIGZhbHNlXG5cbi8qXG4gKiBWZW5kb3Igc3VwcG9ydCBmb3IgdGhlIGdpdmVuIHByb3AgLyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyB0aGVcbiAqIG9ubHkgcHJlZml4ZXMgdG8gdXRpbGl6ZSwgb3IgdGhvc2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblxudmVuZG9yKHByb3AsIGFyZ3MsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsLCB2ZW5kb3ItcHJvcGVydHkgPSB0cnVlKVxuICBuZWVkX25vcm1hbGl6ZSA9ICF2ZW5kb3ItcHJvcGVydHkgb3IgcHJvcCBpbiAoJ3RyYW5zaXRpb24nICd0cmFuc2l0aW9uLXByb3BlcnR5JyAnYm9yZGVyLWltYWdlJyAnYm9yZGVyLWltYWdlLXNsaWNlJylcbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKVxuICAgICAgaWYgb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpKVxuICAgICAgICBlbHNlXG4gICAgICAgICAge3Byb3B9OiBhcmdzXG4gICAgICBlbHNlXG4gICAgICAgIG5ld3Byb3AgPSBwcm9wXG4gICAgICAgIG5ld3Byb3AgPSAnLScgKyBwcmVmaXggKyAnLScgKyBwcm9wIGlmIHZlbmRvci1wcm9wZXJ0eVxuXG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge25ld3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpLHByZWZpeClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtuZXdwcm9wfTogYXJnc1xuLypcbiAqIFZlbmRvcml6ZSB0aGUgZ2l2ZW4gdmFsdWUuXG4gKi9cblxudmVuZG9yLXZhbHVlKGFyZywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwpXG4gIHByb3AgPSBjdXJyZW50LXByb3BlcnR5WzBdXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSkgb3Igb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICBhZGQtcHJvcGVydHkocHJvcCwgJy0lcy0lcycgJSAocHJlZml4IGFyZykpXG4gIGFyZ1xuXG4vKlxuICogVmVuZG9yIFwiYm94LXNoYWRvd1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXNoYWRvdygpXG4gIHZlbmRvcignYm94LXNoYWRvdycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidXNlci1zZWxlY3RcIiBzdXBwb3J0LlxuICovXG5cbnVzZXItc2VsZWN0KClcbiAgdmVuZG9yKCd1c2VyLXNlbGVjdCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWNvdW50KClcbiAgdmVuZG9yKCdjb2x1bW4tY291bnQnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZ2FwXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZ2FwKClcbiAgdmVuZG9yKCdjb2x1bW4tZ2FwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLWNvbG9yXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1jb2xvcigpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtY29sb3InLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtd2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXN0eWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1zdHlsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4td2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tc3BhblwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXNwYW4oKVxuICB2ZW5kb3IoJ2NvbHVtbi1zcGFuJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZmlsbFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWZpbGwoKVxuICB2ZW5kb3IoJ2NvbHVtbi1maWxsJywgYXJndW1lbnRzLCBvbmx5OiBtb3opXG5cbi8qXG4gKiBMZWdhY3kgc3ludGF4IHN1cHBvcnQgZm9yIGJhY2tncm91bmQtY2xpcCBhbmQgYmFja2dyb3VuZC1vcmlnaW5cbiAqL1xuXG5sZWdhY3ktYmctdmFsdWVzKHByb3BlcnR5LCBhcmdzKVxuICBsZWdhY3lfYXJncyA9ICgpXG4gIGltcG9ydGFuY2UgPSB1bnF1b3RlKCcnKVxuICBmb3Igc3ViYXJncyBpbiBhcmdzXG4gICAgZm9yIGFyZyBpbiBzdWJhcmdzXG4gICAgICBpZiBhcmcgaW4gKGJvcmRlci1ib3ggcGFkZGluZy1ib3ggY29udGVudC1ib3gpXG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2JvcmRlcicpICBpZiBhcmcgPT0gYm9yZGVyLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdwYWRkaW5nJykgaWYgYXJnID09IHBhZGRpbmctYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2NvbnRlbnQnKSBpZiBhcmcgPT0gY29udGVudC1ib3hcbiAgICAgIGlmIGFyZyAhPSAnIWltcG9ydGFudCdcbiAgICAgICAgcHVzaChsZWdhY3lfYXJncyxhcmcpXG4gICAgICBlbHNlXG4gICAgICAgIGltcG9ydGFuY2UgPSAhaW1wb3J0YW50XG4gIHZlbmRvcihwcm9wZXJ0eSwgdW5xdW90ZShqb2luKCcsICcsbGVnYWN5X2FyZ3MpKSBpbXBvcnRhbmNlLCBvbmx5OiBtb3ogd2Via2l0KVxuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1jbGlwXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLWNsaXAoKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gdGV4dFxuICAgIHZlbmRvcignYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG4gIGVsc2VcbiAgICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMpXG4gICAgYmFja2dyb3VuZC1jbGlwOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLW9yaWdpbigpXG4gIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtb3JpZ2luJywgYXJndW1lbnRzKVxuICBiYWNrZ3JvdW5kLW9yaWdpbjogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtc2l6ZSgpXG4gIHZlbmRvcignYmFja2dyb3VuZC1zaXplJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8qXG4gKiBTaXplIHV0aWxpdHkuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBzaXplOiA8d2lkdGg+IDxoZWlnaHQ+IHwgPHdpZHRoICYgaGVpZ2h0PlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBzaXplOiAxMDAlIDMwcHhcbiAqICAgICAgIHlpZWxkczpcbiAqICAgICAgICAgd2lkdGg6IDEwMCVcbiAqICAgICAgICAgaGVpZ2h0OiAzMHB4XG4gKlxuICogICAgIHNpemU6IDVweFxuICogICAgICAgeWllbGRzOlxuICogICAgICAgICB3aWR0aDogNXB4XG4gKiAgICAgICAgIGhlaWdodDogNXB4XG4gKlxuICovXG5cbnNpemUoKVxuICBpZiBsZW5ndGgoYXJndW1lbnRzKSA9PSAxXG4gICAgd2lkdGg6IGFyZ3VtZW50c1swXVxuICAgIGhlaWdodDogYXJndW1lbnRzWzBdXG4gIGVsc2VcbiAgICB3aWR0aDogYXJndW1lbnRzWzBdXG4gICAgaGVpZ2h0OiBhcmd1bWVudHNbMV1cbiIsImNhbGxlZC1mcm9tID0gKClcblxudmVuZG9ycyA9IG1veiB3ZWJraXQgbyBtcyBvZmZpY2lhbFxuXG4vLyBzdHJpbmdpZnkgdGhlIGdpdmVuIGFyZ1xuXG4tc3RyaW5nKGFyZylcbiAgdHlwZShhcmcpICsgJyAnICsgYXJnXG5cbi8vIHJlcXVpcmUgYSBjb2xvclxuXG5yZXF1aXJlLWNvbG9yKGNvbG9yKVxuICB1bmxlc3MgY29sb3IgaXMgYSAnY29sb3InXG4gICAgZXJyb3IoJ1JHQiBvciBIU0wgdmFsdWUgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKGNvbG9yKSlcblxuLy8gcmVxdWlyZSBhIHVuaXRcblxucmVxdWlyZS11bml0KG4pXG4gIHVubGVzcyBuIGlzIGEgJ3VuaXQnXG4gICAgZXJyb3IoJ3VuaXQgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKG4pKVxuXG4vLyByZXF1aXJlIGEgc3RyaW5nXG5cbnJlcXVpcmUtc3RyaW5nKHN0cilcbiAgdW5sZXNzIHN0ciBpcyBhICdzdHJpbmcnIG9yIHN0ciBpcyBhICdpZGVudCdcbiAgICBlcnJvcignc3RyaW5nIGV4cGVjdGVkLCBnb3QgYSAnICsgLXN0cmluZyhzdHIpKVxuXG4vLyBNYXRoIGZ1bmN0aW9uc1xuXG5hYnMobikgeyBtYXRoKG4sICdhYnMnKSB9XG5taW4oYSwgYikgeyBhIDwgYiA/IGEgOiBiIH1cbm1heChhLCBiKSB7IGEgPiBiID8gYSA6IGIgfVxuXG4vLyBUcmlnb25vbWV0cmljc1xuUEkgPSAtbWF0aC1wcm9wKCdQSScpXG5cbnJhZGlhbnMtdG8tZGVncmVlcyhhbmdsZSlcbiAgYW5nbGUgKiAoMTgwIC8gUEkpXG5cbmRlZ3JlZXMtdG8tcmFkaWFucyhhbmdsZSlcbiAgYW5nbGUgKiAoUEkgLyAxODApXG5cbnNpbihuKVxuICBuID0gdW5pdChuKSA9PSAnZGVnJyA/IGRlZ3JlZXMtdG8tcmFkaWFucyh1bml0KG4sICcnKSkgOiB1bml0KG4sICcnKVxuICByb3VuZChtYXRoKG4sICdzaW4nKSwgOSlcblxuY29zKG4pXG4gIG4gPSB1bml0KG4pID09ICdkZWcnID8gZGVncmVlcy10by1yYWRpYW5zKHVuaXQobiwgJycpKSA6IHVuaXQobiwgJycpXG4gIHJvdW5kKG1hdGgobiwgJ2NvcycpLCA5KVxuXG4vLyBSb3VuZGluZyBNYXRoIGZ1bmN0aW9uc1xuXG5jZWlsKG4sIHByZWNpc2lvbiA9IDApXG4gIG11bHRpcGxpZXIgPSAxMCAqKiBwcmVjaXNpb25cbiAgbWF0aChuICogbXVsdGlwbGllciwgJ2NlaWwnKSAvIG11bHRpcGxpZXJcblxuZmxvb3IobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAnZmxvb3InKSAvIG11bHRpcGxpZXJcblxucm91bmQobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAncm91bmQnKSAvIG11bHRpcGxpZXJcblxuLy8gcmV0dXJuIHRoZSBzdW0gb2YgdGhlIGdpdmVuIG51bWJlcnNcblxuc3VtKG51bXMpXG4gIHN1bSA9IDBcbiAgc3VtICs9IG4gZm9yIG4gaW4gbnVtc1xuXG4vLyByZXR1cm4gdGhlIGF2ZXJhZ2Ugb2YgdGhlIGdpdmVuIG51bWJlcnNcblxuYXZnKG51bXMpXG4gIHN1bShudW1zKSAvIGxlbmd0aChudW1zKVxuXG4vLyByZXR1cm4gYSB1bml0bGVzcyBudW1iZXIsIG9yIHBhc3MgdGhyb3VnaFxuXG5yZW1vdmUtdW5pdChuKVxuICBpZiB0eXBlb2YobikgaXMgXCJ1bml0XCJcbiAgICB1bml0KG4sIFwiXCIpXG4gIGVsc2VcbiAgICBuXG5cbi8vIGNvbnZlcnQgYSBwZXJjZW50IHRvIGEgZGVjaW1hbCwgb3IgcGFzcyB0aHJvdWdoXG5cbnBlcmNlbnQtdG8tZGVjaW1hbChuKVxuICBpZiB1bml0KG4pIGlzIFwiJVwiXG4gICAgcmVtb3ZlLXVuaXQobikgLyAxMDBcbiAgZWxzZVxuICAgIG5cblxuLy8gY2hlY2sgaWYgbiBpcyBhbiBvZGQgbnVtYmVyXG5cbm9kZChuKVxuICAxID09IG4gJSAyXG5cbi8vIGNoZWNrIGlmIG4gaXMgYW4gZXZlbiBudW1iZXJcblxuZXZlbihuKVxuICAwID09IG4gJSAyXG5cbi8vIGNoZWNrIGlmIGNvbG9yIGlzIGxpZ2h0XG5cbmxpZ2h0KGNvbG9yKVxuICBsaWdodG5lc3MoY29sb3IpID49IDUwJVxuXG4vLyBjaGVjayBpZiBjb2xvciBpcyBkYXJrXG5cbmRhcmsoY29sb3IpXG4gIGxpZ2h0bmVzcyhjb2xvcikgPCA1MCVcblxuLy8gZGVzYXR1cmF0ZSBjb2xvciBieSBhbW91bnRcblxuZGVzYXR1cmF0ZShjb2xvciwgYW1vdW50KVxuICBhZGp1c3QoY29sb3IsICdzYXR1cmF0aW9uJywgLSBhbW91bnQpXG5cbi8vIHNhdHVyYXRlIGNvbG9yIGJ5IGFtb3VudFxuXG5zYXR1cmF0ZShjb2xvciA9ICcnLCBhbW91bnQgPSAxMDAlKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBhZGp1c3QoY29sb3IsICdzYXR1cmF0aW9uJywgYW1vdW50KVxuICBlbHNlXG4gICAgdW5xdW90ZSggXCJzYXR1cmF0ZShcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBkYXJrZW4gYnkgdGhlIGdpdmVuIGFtb3VudFxuXG5kYXJrZW4oY29sb3IsIGFtb3VudClcbiAgYWRqdXN0KGNvbG9yLCAnbGlnaHRuZXNzJywgLSBhbW91bnQpXG5cbi8vIGxpZ2h0ZW4gYnkgdGhlIGdpdmVuIGFtb3VudFxuXG5saWdodGVuKGNvbG9yLCBhbW91bnQpXG4gIGFkanVzdChjb2xvciwgJ2xpZ2h0bmVzcycsIGFtb3VudClcblxuLy8gZGVjcmVhc2Ugb3BhY2l0eSBieSBhbW91bnRcblxuZmFkZS1vdXQoY29sb3IsIGFtb3VudClcbiAgY29sb3IgLSByZ2JhKGJsYWNrLCBwZXJjZW50LXRvLWRlY2ltYWwoYW1vdW50KSlcblxuLy8gaW5jcmVhc2Ugb3BhY2l0eSBieSBhbW91bnRcblxuZmFkZS1pbihjb2xvciwgYW1vdW50KVxuICBjb2xvciArIHJnYmEoYmxhY2ssIHBlcmNlbnQtdG8tZGVjaW1hbChhbW91bnQpKVxuXG4vLyBzcGluIGh1ZSBieSBhIGdpdmVuIGFtb3VudFxuXG5zcGluKGNvbG9yLCBhbW91bnQpXG4gIGNvbG9yICsgdW5pdChhbW91bnQsIGRlZylcblxuLy8gbWl4IHR3byBjb2xvcnMgYnkgYSBnaXZlbiBhbW91bnRcblxubWl4KGNvbG9yMSwgY29sb3IyLCB3ZWlnaHQgPSA1MCUpXG4gIHVubGVzcyB3ZWlnaHQgaW4gMC4uMTAwXG4gICAgZXJyb3IoXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAlIGFuZCAxMDAlXCIpXG5cbiAgaWYgbGVuZ3RoKGNvbG9yMSkgPT0gMlxuICAgIHdlaWdodCA9IGNvbG9yMVswXVxuICAgIGNvbG9yMSA9IGNvbG9yMVsxXVxuXG4gIGVsc2UgaWYgbGVuZ3RoKGNvbG9yMikgPT0gMlxuICAgIHdlaWdodCA9IDEwMCAtIGNvbG9yMlswXVxuICAgIGNvbG9yMiA9IGNvbG9yMlsxXVxuXG4gIHJlcXVpcmUtY29sb3IoY29sb3IxKVxuICByZXF1aXJlLWNvbG9yKGNvbG9yMilcblxuICBwID0gdW5pdCh3ZWlnaHQgLyAxMDAsICcnKVxuICB3ID0gcCAqIDIgLSAxXG5cbiAgYSA9IGFscGhhKGNvbG9yMSkgLSBhbHBoYShjb2xvcjIpXG5cbiAgdzEgPSAoKCh3ICogYSA9PSAtMSkgPyB3IDogKHcgKyBhKSAvICgxICsgdyAqIGEpKSArIDEpIC8gMlxuICB3MiA9IDEgLSB3MVxuXG4gIGNoYW5uZWxzID0gKHJlZChjb2xvcjEpIHJlZChjb2xvcjIpKSAoZ3JlZW4oY29sb3IxKSBncmVlbihjb2xvcjIpKSAoYmx1ZShjb2xvcjEpIGJsdWUoY29sb3IyKSlcbiAgcmdiID0gKClcblxuICBmb3IgcGFpciBpbiBjaGFubmVsc1xuICAgIHB1c2gocmdiLCBmbG9vcihwYWlyWzBdICogdzEgKyBwYWlyWzFdICogdzIpKVxuXG4gIGExID0gYWxwaGEoY29sb3IxKSAqIHBcbiAgYTIgPSBhbHBoYShjb2xvcjIpICogKDEgLSBwKVxuICBhbHBoYSA9IGExICsgYTJcblxuICByZ2JhKHJnYlswXSwgcmdiWzFdLCByZ2JbMl0sIGFscGhhKVxuXG4vLyBpbnZlcnQgY29sb3JzLCBsZWF2ZSBhbHBoYSBpbnRhY3RcblxuaW52ZXJ0KGNvbG9yID0gJycpXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIHJnYmEoI2ZmZiAtIGNvbG9yLCBhbHBoYShjb2xvcikpXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcImludmVydChcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBnaXZlIGNvbXBsZW1lbnQgb2YgdGhlIGdpdmVuIGNvbG9yXG5cbmNvbXBsZW1lbnQoIGNvbG9yIClcbiAgc3BpbiggY29sb3IsIDE4MCApXG5cbi8vIGdpdmUgZ3JheXNjYWxlIG9mIHRoZSBnaXZlbiBjb2xvclxuXG5ncmF5c2NhbGUoIGNvbG9yID0gJycgKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBkZXNhdHVyYXRlKCBjb2xvciwgMTAwJSApXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcImdyYXlzY2FsZShcIiArIGNvbG9yICsgXCIpXCIgKVxuXG4vLyBtaXggdGhlIGdpdmVuIGNvbG9yIHdpdGggd2hpdGVcblxudGludCggY29sb3IsIHBlcmNlbnQgKVxuICBtaXgoIHdoaXRlLCBjb2xvciwgcGVyY2VudCApXG5cbi8vIG1peCB0aGUgZ2l2ZW4gY29sb3Igd2l0aCBibGFja1xuXG5zaGFkZSggY29sb3IsIHBlcmNlbnQgKVxuICBtaXgoIGJsYWNrLCBjb2xvciwgcGVyY2VudCApXG5cbi8vIHJldHVybiB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgZ2l2ZW4gZXhwclxuXG5sYXN0KGV4cHIpXG4gIGV4cHJbbGVuZ3RoKGV4cHIpIC0gMV1cblxuLy8gcmV0dXJuIGtleXMgaW4gdGhlIGdpdmVuIHBhaXJzIG9yIG9iamVjdFxuXG5rZXlzKHBhaXJzKVxuICByZXQgPSAoKVxuICBpZiB0eXBlKHBhaXJzKSA9PSAnb2JqZWN0J1xuICAgIGZvciBrZXkgaW4gcGFpcnNcbiAgICAgIHB1c2gocmV0LCBrZXkpXG4gIGVsc2VcbiAgICBmb3IgcGFpciBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHBhaXJbMF0pO1xuICByZXRcblxuLy8gcmV0dXJuIHZhbHVlcyBpbiB0aGUgZ2l2ZW4gcGFpcnMgb3Igb2JqZWN0XG5cbnZhbHVlcyhwYWlycylcbiAgcmV0ID0gKClcbiAgaWYgdHlwZShwYWlycykgPT0gJ29iamVjdCdcbiAgICBmb3Iga2V5LCB2YWwgaW4gcGFpcnNcbiAgICAgIHB1c2gocmV0LCB2YWwpXG4gIGVsc2VcbiAgICBmb3IgcGFpciBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHBhaXJbMV0pO1xuICByZXRcblxuLy8gam9pbiB2YWx1ZXMgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyXG5cbmpvaW4oZGVsaW0sIHZhbHMuLi4pXG4gIGJ1ZiA9ICcnXG4gIHZhbHMgPSB2YWxzWzBdIGlmIGxlbmd0aCh2YWxzKSA9PSAxXG4gIGZvciB2YWwsIGkgaW4gdmFsc1xuICAgIGJ1ZiArPSBpID8gZGVsaW0gKyB2YWwgOiB2YWxcblxuLy8gYWRkIGEgQ1NTIHJ1bGUgdG8gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuLy8gLSBUaGlzIGRlZmluaXRpb24gYWxsb3dzIGFkZC1wcm9wZXJ0eSB0byBiZSB1c2VkIGFzIGEgbWl4aW5cbi8vIC0gSXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBpbnRlcnBvbGF0aW9uIGJ1dCBhbGxvd3MgdXNlcnNcbi8vICAgdG8gb3B0IGZvciBhIGZ1bmN0aW9uYWwgc3R5bGVcblxuYWRkLXByb3BlcnR5LWZ1bmN0aW9uID0gYWRkLXByb3BlcnR5XG5hZGQtcHJvcGVydHkobmFtZSwgZXhwcilcbiAgaWYgbWl4aW5cbiAgICB7bmFtZX0gZXhwclxuICBlbHNlXG4gICAgYWRkLXByb3BlcnR5LWZ1bmN0aW9uKG5hbWUsIGV4cHIpXG5cbnByZWZpeC1jbGFzc2VzKHByZWZpeClcbiAgLXByZWZpeC1jbGFzc2VzKHByZWZpeCwgYmxvY2spXG5cbi8vIENhY2hpbmcgbWl4aW4sIHVzZSBpbnNpZGUgeW91ciBmdW5jdGlvbnMgdG8gZW5hYmxlIGNhY2hpbmcgYnkgZXh0ZW5kaW5nLlxuXG4kc3R5bHVzX21peGluX2NhY2hlID0ge31cbmNhY2hlKClcbiAgJGtleSA9IChjdXJyZW50LW1lZGlhKCkgb3IgJ25vLW1lZGlhJykgKyAnX18nICsgY2FsbGVkLWZyb21bMF0gKyAnX18nICsgYXJndW1lbnRzXG4gIGlmICRrZXkgaW4gJHN0eWx1c19taXhpbl9jYWNoZVxuICAgIEBleHRlbmQge1wiJGNhY2hlX3BsYWNlaG9sZGVyX2Zvcl9cIiArICRzdHlsdXNfbWl4aW5fY2FjaGVbJGtleV19XG4gIGVsc2UgaWYgJ2NhY2hlJyBpbiBjYWxsZWQtZnJvbVxuICAgIHtibG9ja31cbiAgZWxzZVxuICAgICRpZCA9IGxlbmd0aCgkc3R5bHVzX21peGluX2NhY2hlKVxuXG4gICAgJixcbiAgICAvJGNhY2hlX3BsYWNlaG9sZGVyX2Zvcl97JGlkfVxuICAgICAgJHN0eWx1c19taXhpbl9jYWNoZVska2V5XSA9ICRpZFxuICAgICAge2Jsb2NrfVxuXG4vLyBQZXJjZW50YWdlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBudW1iZXIsIGUuZy4gXCIuNDVcIiwgaW50byBhIHBlcmNlbnRhZ2UsIGUuZy4gXCI0NSVcIlxuXG5wZXJjZW50YWdlKG51bSlcbiAgcmV0dXJuIHVuaXQobnVtICogMTAwLCAnJScpXG5cbi8vIFJldHVybnMgdGhlIHBvc2l0aW9uIG9mIGEgYHZhbHVlYCB3aXRoaW4gYSBgbGlzdGBcblxuaW5kZXgobGlzdCwgdmFsdWUpXG4gIGZvciB2YWwsIGkgaW4gbGlzdFxuICAgIHJldHVybiBpIGlmIHZhbCA9PSB2YWx1ZVxuIiwiLypcbiAqIE92ZXJmbG93IHV0aWxpdHkuIE1hcHMgdG8gcmVndWxhciBvdmVyZmxvdywgYW5kIGFkZHMgYW4gZWxsaXBzaXMgdmFsdWUuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBvdmVyZmxvdzogPHR5cGU+XG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIG92ZXJmbG93OiBhdXRvXG4gKiAgICAgb3ZlcmZsb3c6IGhpZGRlblxuICogICAgIG92ZXJmbG93OiBlbGxpcHNpc1xuICpcbiAqL1xuXG5vdmVyZmxvdygpXG4gIGlmIGFyZ3VtZW50c1swXSA9PSBlbGxpcHNpc1xuICAgIGVsbGlwc2lzKClcbiAgZWxzZVxuICAgIG92ZXJmbG93OiBhcmd1bWVudHNcbiIsIi8qXG4gKiBib3JkZXI6IDxjb2xvcj5cbiAqIGJvcmRlcjogLi4uXG4gKi9cblxuYm9yZGVyKGNvbG9yLCBhcmdzLi4uKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvciBhcmdzXG4gIGVsc2VcbiAgICBib3JkZXI6IGFyZ3VtZW50c1xuIl19 */
