@openziti/ziti-console-lib 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +118 -0
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/global.scss +147 -3
  7. package/assets/styles/icons.css +13 -0
  8. package/esm2022/lib/features/card-list/card-list.component.mjs +12 -11
  9. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
  10. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +13 -3
  11. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +1 -1
  12. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +13 -3
  13. package/esm2022/lib/features/login/login-dialog.component.mjs +123 -0
  14. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
  15. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +4 -4
  16. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +3 -15
  17. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +404 -0
  18. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +96 -0
  19. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +222 -0
  20. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +55 -0
  21. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -3
  22. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +3 -15
  23. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +3 -3
  24. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +3 -15
  25. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
  26. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -15
  27. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +24 -3
  28. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +15 -3
  29. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
  30. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +3 -15
  31. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +24 -4
  32. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +3 -15
  33. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +24 -4
  34. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  35. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +3 -15
  36. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +6 -6
  37. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
  38. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -15
  39. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
  40. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -15
  41. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +3 -3
  42. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
  43. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
  44. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +1 -4
  45. package/esm2022/lib/models/certificate-authority.mjs +16 -0
  46. package/esm2022/lib/models/jwt-signer.mjs +2 -1
  47. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +3 -3
  48. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +120 -0
  49. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +240 -0
  50. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -1
  51. package/esm2022/lib/services/login-service.class.mjs +5 -1
  52. package/esm2022/lib/services/node-data.service.mjs +8 -13
  53. package/esm2022/lib/services/validation.service.mjs +3 -12
  54. package/esm2022/lib/services/ziti-controller-data.service.mjs +23 -5
  55. package/esm2022/lib/services/ziti-data.service.mjs +27 -2
  56. package/esm2022/lib/shared/list-page-service.class.mjs +9 -4
  57. package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
  58. package/esm2022/public-api.mjs +7 -1
  59. package/fesm2022/openziti-ziti-console-lib.mjs +1493 -303
  60. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  61. package/lib/features/card-list/card-list.component.d.ts +3 -2
  62. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  63. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +3 -1
  64. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
  65. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +3 -1
  66. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
  67. package/lib/features/login/login-dialog.component.d.ts +29 -0
  68. package/lib/features/login/login-dialog.component.d.ts.map +1 -0
  69. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -1
  70. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  71. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -1
  72. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +81 -0
  73. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -0
  74. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +37 -0
  75. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +1 -0
  76. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +63 -0
  77. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -0
  78. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +28 -0
  79. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +1 -0
  80. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
  81. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  82. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -1
  83. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +1 -1
  84. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  85. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -1
  86. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -1
  87. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  88. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  89. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +5 -1
  90. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
  91. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +5 -1
  92. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -1
  93. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -1
  94. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  95. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -1
  96. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +4 -1
  97. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  98. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -1
  99. package/lib/features/projectable-forms/projectable-form.class.d.ts +5 -1
  100. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  101. package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
  102. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  103. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  104. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +3 -2
  105. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  106. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -1
  107. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  108. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  109. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -1
  110. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  111. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  112. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -1
  113. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  114. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
  115. package/lib/models/certificate-authority.d.ts +14 -0
  116. package/lib/models/certificate-authority.d.ts.map +1 -0
  117. package/lib/models/jwt-signer.d.ts +1 -0
  118. package/lib/models/jwt-signer.d.ts.map +1 -1
  119. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +30 -0
  120. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +1 -0
  121. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +35 -0
  122. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -0
  123. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  124. package/lib/services/login-service.class.d.ts +6 -2
  125. package/lib/services/login-service.class.d.ts.map +1 -1
  126. package/lib/services/node-data.service.d.ts +1 -0
  127. package/lib/services/node-data.service.d.ts.map +1 -1
  128. package/lib/services/validation.service.d.ts.map +1 -1
  129. package/lib/services/ziti-controller-data.service.d.ts +2 -2
  130. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  131. package/lib/services/ziti-data.service.d.ts +6 -2
  132. package/lib/services/ziti-data.service.d.ts.map +1 -1
  133. package/lib/shared/list-page-service.class.d.ts +1 -0
  134. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  135. package/lib/ziti-console-lib.module.d.ts +22 -18
  136. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  137. package/package.json +1 -1
  138. package/public-api.d.ts +6 -0
  139. package/public-api.d.ts.map +1 -1
@@ -42,7 +42,7 @@ import * as i17 from "../../../services/settings.service";
42
42
  import * as i18 from "../../../services/ziti-data.service";
43
43
  class IdentityFormComponent extends ProjectableForm {
44
44
  constructor(settingsService, svc, identitiesService, zitiService, growlerService, extService, router, route, location) {
45
- super(growlerService, extService, zitiService, router, route, location);
45
+ super(growlerService, extService, zitiService, router, route, location, settingsService);
46
46
  this.settingsService = settingsService;
47
47
  this.svc = svc;
48
48
  this.identitiesService = identitiesService;
@@ -330,7 +330,7 @@ class IdentityFormComponent extends ProjectableForm {
330
330
  provide: MatDialogRef,
331
331
  useValue: {}
332
332
  }
333
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken || hasAuthenticator\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy.icon-copy.url-copy{background-color:var(--navigation)}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i8.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: i9.PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: i10.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i11.FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: i12.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: i13.TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: i14.QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: i15.CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: i16.SafePipe, name: "safe" }] }); }
333
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Identity: ' : 'Create New Identity'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"identity-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Identity Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this identity\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select or create Identity attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 99999999'\"\n [helpText]=\"'Attributes are tags applied to an resource. Apply the same tag to other Identities to form a group of Identities.'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"formData.roleAttributes\"\n [availableRoleAttributes]=\"identityRoleAttributes\"\n [placeholder]=\"'Add attributes to group Identities'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Auth Policy'\"\n [label]=\"'OPTIONAL'\"\n [helpText]=\"'Authentication Policies restrict the authentication methods available to identities.'\"\n >\n <select\n [(ngModel)]=\"formData.authPolicyId\"\n id=\"authPolicyId\"\n class=\"form-field-dropdown\"\n >\n <option value=\"\">Select an Authentication Policy</option>\n <option\n *ngFor=\"let policy of authPolicies\"\n [value]=\"policy.id\"\n >\n {{ policy.name }}\n </option>\n </select>\n <div class=\"form-field-label-container\" style=\"gap: var(--paddingMedium)\">\n <div class=\"form-field-header\">\n <div class=\"form-field-title-container\">\n <span class=\"form-field-title\">External ID</span>\n </div>\n <span class=\"form-field-label\">OPTIONAL</span>\n </div>\n <input class=\"form-field-input\" placeholder=\"Optional External ID\" [(ngModel)]=\"formData.externalId\"/>\n </div>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Enrollment Type'\"\n [title2]=\"enrollmentTypeTitle\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <select\n id=\"EnrollmentType\"\n class=\"form-field-dropdown\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentType\"\n (change)=\"updateEnrollment()\"\n >\n <option value=\"ott\">One Time Token</option>\n <option value=\"CA\">Certificate Authority</option>\n <option value=\"updb\">UPDB</option>\n <option value=\"none\">None</option>\n </select>\n <select\n id=\"CertAuthorities\"\n class=\"form-field-dropdown\"\n *ngIf=\"enrollmentType === 'CA'\"\n [ngClass]=\"{disabled: isEditing}\"\n [(ngModel)]=\"enrollmentCA\"\n [ngClass]=\"{error: errors.enrollmentCA}\"\n (change)=\"updateEnrollment()\"\n >\n <option *ngFor=\"let ca of cas\" [value]=\"ca.id\">{{ca.name}}</option>\n </select>\n <input\n *ngIf=\"enrollmentType === 'updb' && !isEditing\"\n [ngClass]=\"{disabled: isEditing, error: errors.enrollmentUPDB}\"\n [(ngModel)]=\"enrollmentUPDB\"\n (keyup)=\"updateEnrollment()\"\n class=\"form-field-input\"\n id=\"UPDBName\"\n type=\"text\"\n maxlength=\"500\"\n placeholder=\"Enter a name\"\n >\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Admin'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced is-admin-container\"\n >\n <div class=\"config-item\">\n <div class=\"config-container toggle-container\">\n <div class=\"config-container-label\">IS ADMIN</div>\n <div\n (click)=\"toggleIsAdmin()\"\n [ngClass]=\"{ on: formData.isAdmin }\"\n class=\"toggle\"\n >\n <span [hidden]=\"!formData.isAdmin\" class=\"on-label\">YES</span>\n <span [hidden]=\"formData.isAdmin\" class=\"off-label\">NO</span>\n <div class=\"switch\"></div>\n </div>\n </div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Hosting Cost'\"\n [title2]=\"'Precedence'\"\n [layout]=\"'row'\"\n class=\"form-field-advanced\"\n >\n <input class=\"form-field-input\" [(ngModel)]=\"formData.defaultHostingCost\" type=\"number\"/>\n <select\n [(ngModel)]=\"formData.defaultHostingPrecedence\"\n id=\"hostingPrecedence\"\n class=\"form-field-dropdown\"\n >\n <option value=\"default\">Default</option>\n <option value=\"required\">Required</option>\n <option value=\"failed\">Failed</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-container *ngFor=\"let tagElement of tagElements\"\n [title]=\"tagElement.label\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <div [innerHTML]=\"tagElement.content | safe\"></div>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'App Data'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n >\n <lib-json-view [(data)]=\"formData.appData\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n *ngIf=\"hasEnrolmentToken || hasAuthenticator\"\n [showHeader]=\"false\"\n >\n <lib-qr-code\n [identity]=\"formData\"\n [jwt]=\"jwt\"\n [expiration]=\"enrollmentExpiration\"\n [authenticators]=\"formData.authenticators\"\n [type]=\"'identity'\"\n [canExpand]=\"true\"\n (doRefresh)=\"refreshIdentity()\"\n ></lib-qr-code>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Services'\"\n [count]=\"associatedServices.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"true\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"associatedServiceNames\"\n ></lib-preview-list>\n <div class=\"svc-test-result\" [ngClass]=\"{'test-result-open': testResultOpen}\">\n <div class=\"close icon-close\" (click)=\"closeTestResult()\"></div>\n <div class=\"result-container\" [innerHTML]=\"testResult\" ></div>\n </div>\n </lib-form-field-container>\n <lib-form-field-container\n *ngIf=\"formData.id\"\n [title]=\"'Associated Service Policies'\"\n [count]=\"associatedServicePolicies.length\"\n [helpText]=\"'Preview list of all service policies that this Identity is associated with.'\"\n >\n <lib-preview-list\n (itemSelected)=\"serviceSelected($event)\"\n [clickable]=\"false\"\n [isLoading]=\"servicePoliciesLoading\"\n [allNames]=\"associatedServicePolicyNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [label]=\"''\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\" readonly/>\n <div class=\"url-copy icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [".identity-form-container{display:flex;flex-direction:column;height:100%;width:100%;align-items:center;gap:.9375rem}.disabled{opacity:.5;pointer-events:none}::ng-deep .admin-toggle{width:100%;width:35%;display:flex}::ng-deep .admin-toggle .form-field-line{display:none}::ng-deep .admin-toggle .toggle{width:100%}::ng-deep .is-admin-container .form-field-title-container.title-container-2{width:35%!important}.svc-test-result{position:absolute;transition:var(--transition);height:0;width:100%;background-color:var(--background);bottom:0;font-weight:600;padding-left:.625rem;padding-right:.625rem;border-color:var(--inputBorder);border-style:solid;border-width:var(--inputBorderWidth);border-bottom-right-radius:var(--inputBorderRadius);border-bottom-left-radius:var(--inputBorderRadius);border-top-style:none}.svc-test-result.test-result-open{height:-moz-fit-content;height:fit-content;box-shadow:0 -.125rem .6875rem 0 var(--boxShadow);padding-bottom:.9375rem;padding-top:.9375rem}.svc-test-result .close.icon-close{top:.625rem;right:.625rem;font-size:1.125rem;height:1.125rem;width:1.125rem;line-height:1.125rem}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-label{color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .form-field-line{border-color:var(--primaryColor)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle{border-color:var(--primaryColor);border-style:solid;border-width:var(--inputBorderWidth)}::ng-deep .admin-toggle .form-field-toggle-container:focus .toggle .switch{top:.0625rem}::ng-deep .copy.icon-copy.url-copy{background-color:var(--navigation)}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i8.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: i9.PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: i10.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i11.FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: i12.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: i13.TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: i14.QrCodeComponent, selector: "lib-qr-code", inputs: ["jwt", "token", "expiration", "identity", "type", "authenticators", "qrOnly", "canExpand"], outputs: ["doRefresh"] }, { kind: "component", type: i15.CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }, { kind: "pipe", type: i16.SafePipe, name: "safe" }] }); }
334
334
  }
335
335
  export { IdentityFormComponent };
336
336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityFormComponent, decorators: [{
@@ -357,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
357
357
  }], close: [{
358
358
  type: Output
359
359
  }] } });
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvaWRlbnRpdHkvaWRlbnRpdHktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvaWRlbnRpdHkvaWRlbnRpdHktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0NBQW9DLENBQUM7QUFFckYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RixPQUFPLEVBQUMsMEJBQTBCLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXRELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHbEQsTUFXYSxxQkFBc0IsU0FBUSxlQUFlO0lBNkJ4RCxZQUNxQyxlQUFnQyxFQUMxRCxHQUF3QixFQUN4QixpQkFBd0MsRUFDWCxX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LHFCQUFxQjtrQkFYakMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLFlBQVk7NEJBQ3JCLFFBQVEsRUFBRSxFQUFFO3lCQUNiO3FCQUNGOzswQkFnQ0ksTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUd2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBRXhCLE1BQU07MkJBQUMsMEJBQTBCO3FIQWxDN0IsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBBZnRlclZpZXdJbml0LFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Byb2plY3RhYmxlRm9ybX0gZnJvbSBcIi4uL3Byb2plY3RhYmxlLWZvcm0uY2xhc3NcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuXG5pbXBvcnQge2lzRW1wdHksIGlzTmlsLCBmb3JPd24sIGNsb25lRGVlcCwgc2V0LCB1bnNldH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtJREVOVElUWV9FWFRFTlNJT05fU0VSVklDRSwgSWRlbnRpdHlGb3JtU2VydmljZX0gZnJvbSAnLi9pZGVudGl0eS1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7SWRlbnRpdGllc1BhZ2VTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vcGFnZXMvaWRlbnRpdGllcy9pZGVudGl0aWVzLXBhZ2Uuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0lkZW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2lkZW50aXR5XCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1pZGVudGl0eS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lkZW50aXR5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pZGVudGl0eS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdERpYWxvZ1JlZixcbiAgICAgIHVzZVZhbHVlOiB7fVxuICAgIH1cbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlGb3JtQ29tcG9uZW50IGV4dGVuZHMgUHJvamVjdGFibGVGb3JtIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBmb3JtRGF0YTogYW55ID0ge307XG4gIEBJbnB1dCgpIGlkZW50aXR5Um9sZUF0dHJpYnV0ZXM6IGFueVtdID0gW107XG4gIEBPdXRwdXQoKSBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBvdmVycmlkZSBlbnRpdHlUeXBlID0gJ2lkZW50aXRpZXMnO1xuICBvdmVycmlkZSBlbnRpdHlDbGFzcyA9IElkZW50aXR5O1xuXG4gIGlzRWRpdGluZyA9IGZhbHNlO1xuICBlbnJvbGxtZW50RXhwaXJhdGlvbjogYW55O1xuICBqd3Q6IGFueTtcbiAgYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llczogYW55ID0gW107XG4gIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXM6IGFueSA9IFtdO1xuICBhc3NvY2lhdGVkU2VydmljZXM6IGFueSA9IFtdO1xuICBhc3NvY2lhdGVkU2VydmljZU5hbWVzOiBhbnkgPSBbXTtcbiAgc2VydmljZXNMb2FkaW5nID0gZmFsc2U7XG4gIHNlcnZpY2VQb2xpY2llc0xvYWRpbmcgPSBmYWxzZTtcbiAgYXV0aFBvbGljaWVzOiBhbnkgPSBbXTtcblxuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBlbnJvbGxtZW50VHlwZSA9ICdvdHQnO1xuICBlbnJvbGxtZW50Q0E7XG4gIGVucm9sbG1lbnRVUERCID0gJyc7XG4gIHNldHRpbmdzOiBhbnkgPSB7fTtcbiAgdGVzdFJlc3VsdDogc3RyaW5nID0gJyc7XG4gIHRlc3RSZXN1bHRPcGVuID0gZmFsc2U7XG5cbiAgY2FzID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgIHB1YmxpYyBzdmM6IElkZW50aXR5Rm9ybVNlcnZpY2UsXG4gICAgICBwdWJsaWMgaWRlbnRpdGllc1NlcnZpY2U6IElkZW50aXRpZXNQYWdlU2VydmljZSxcbiAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIG92ZXJyaWRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICBASW5qZWN0KElERU5USVRZX0VYVEVOU0lPTl9TRVJWSUNFKSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIGxvY2F0aW9uOiBMb2NhdGlvblxuICApIHtcbiAgICBzdXBlcihncm93bGVyU2VydmljZSwgZXh0U2VydmljZSwgeml0aVNlcnZpY2UsIHJvdXRlciwgcm91dGUsIGxvY2F0aW9uKTtcbiAgICB0aGlzLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgdGhpcy5zZXR0aW5ncyA9IHJlc3VsdHM7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5uYW1lRmllbGRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5yZXNldFRhZ3MoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmlzRWRpdGluZyA9ICFpc0VtcHR5KHRoaXMuZm9ybURhdGEuaWQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZW50aXR5VXBkYXRlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtRGF0YS5pZCkge1xuICAgICAgdGhpcy5mb3JtRGF0YS5iYWRnZXMgPSBbXTtcbiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmhhc0FwaVNlc3Npb24gfHwgdGhpcy5mb3JtRGF0YS5oYXNFZGdlUm91dGVyQ29ubmVjdGlvbikge1xuICAgICAgICB0aGlzLmZvcm1EYXRhLmJhZGdlcy5wdXNoKHtsYWJlbDogJ09ubGluZScsIGNsYXNzOiAnb25saW5lJywgY2lyY2xlOiAndHJ1ZSd9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEuYmFkZ2VzLnB1c2goe2xhYmVsOiAnT2ZmbGluZScsIGNsYXNzOiAnb2ZmbGluZScsIGNpcmNsZTogJ2ZhbHNlJ30pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW5yb2xsbWVudD8ub3R0KSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEuYmFkZ2VzLnB1c2goe2xhYmVsOiAnVW5yZWdpc3RlcmVkJywgY2xhc3M6ICd1bnJlZyd9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuand0ID0gdGhpcy5pZGVudGl0aWVzU2VydmljZS5nZXRKV1QodGhpcy5mb3JtRGF0YSk7XG4gICAgICB0aGlzLmVucm9sbG1lbnRFeHBpcmF0aW9uID0gdGhpcy5pZGVudGl0aWVzU2VydmljZS5nZXRFbnJvbGxtZW50RXhwaXJhdGlvbih0aGlzLmZvcm1EYXRhKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RW5yb2xsbWVudFR5cGUoKTtcbiAgICB0aGlzLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKTtcbiAgICB0aGlzLmdldEFzc29jaWF0ZWRTZXJ2aWNlcygpO1xuICAgIHRoaXMuZ2V0QXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcygpO1xuICAgIHRoaXMuZ2V0QXV0aFBvbGljaWVzKCk7XG4gICAgdGhpcy5nZXRDZXJ0aWZpY2F0ZUF1dGhvcml0aWVzKCk7XG4gICAgdGhpcy5sb2FkVGFncygpO1xuICAgIHVuc2V0KHRoaXMuZm9ybURhdGEsICdfbGlua3MnKTtcbiAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuZXh0U2VydmljZS51cGRhdGVGb3JtRGF0YSh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIHJlZnJlc2hJZGVudGl0eSgpIHtcbiAgICB0aGlzLnN2Yy5yZWZyZXNoSWRlbnRpdHkodGhpcy5mb3JtRGF0YS5pZCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgIHRoaXMuZW5yb2xsbWVudEV4cGlyYXRpb24gPSB0aGlzLmlkZW50aXRpZXNTZXJ2aWNlLmdldEVucm9sbG1lbnRFeHBpcmF0aW9uKHRoaXMuZm9ybURhdGEpO1xuICAgICAgdGhpcy5qd3QgPSB0aGlzLmlkZW50aXRpZXNTZXJ2aWNlLmdldEpXVCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgIHRoaXMuZXh0U2VydmljZS51cGRhdGVGb3JtRGF0YSh0aGlzLmZvcm1EYXRhKTtcbiAgICB9KVxuICB9XG5cbiAgaW5pdEVucm9sbG1lbnRUeXBlKCkge1xuICAgIGlmICh0aGlzLmZvcm1EYXRhPy5lbnJvbGxtZW50Py5vdHQpIHtcbiAgICAgIHRoaXMuZW5yb2xsbWVudFR5cGUgPSAnb3R0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURhdGE/LmVucm9sbG1lbnQ/LnVwZGIpIHtcbiAgICAgIHRoaXMuZW5yb2xsbWVudFR5cGUgPSAndXBkYic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EYXRhPy5lbnJvbGxtZW50Py5vdHRjYSkge1xuICAgICAgdGhpcy5lbnJvbGxtZW50VHlwZSA9ICdDQSc7XG4gICAgfSBlbHNlIGlmIChpc0VtcHR5KHRoaXMuZm9ybURhdGE/LmVucm9sbG1lbnQpKSB7XG4gICAgICB0aGlzLmVucm9sbG1lbnRUeXBlID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKSB7XG4gICAgICB0aGlzLmdldFJvbGVBdHRyaWJ1dGVzKCdpZGVudGl0eS1yb2xlLWF0dHJpYnV0ZXMnKS50aGVuKChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5pZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VzKCkge1xuICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnaWRlbnRpdGllcycsIHRoaXMuZm9ybURhdGEuaWQsICdzZXJ2aWNlcycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZXMubWFwKChzdmMpID0+IHtcbiAgICAgICAgcmV0dXJuIHN2Yy5uYW1lO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBc3NvY2lhdGVkU2VydmljZVBvbGljaWVzKCkge1xuICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnaWRlbnRpdGllcycsIHRoaXMuZm9ybURhdGEuaWQsICdzZXJ2aWNlLXBvbGljaWVzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLm1hcCgocG9saWN5KSA9PiB7XG4gICAgICAgIHJldHVybiBwb2xpY3kubmFtZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VydGlmaWNhdGVBdXRob3JpdGllcygpIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBmaWx0ZXI6IFwiXCIsXG4gICAgICBub1NlYXJjaDogdHJ1ZSxcbiAgICAgIG9yZGVyOiBcImFzY1wiLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaE9uOiBcIm5hbWVcIixcbiAgICAgIHNvcnQ6IFwibmFtZVwiLFxuICAgICAgdG90YWw6IDEwMFxuICAgIH1cbiAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY2FzJywgcGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY2FzID0gWy4uLnJlc3VsdC5kYXRhXTtcbiAgICAgIGlmICh0aGlzLmNhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZW5yb2xsbWVudENBID0gdGhpcy5jYXNbMF0uaWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRBdXRoUG9saWNpZXMoKSB7XG4gICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICBvcmRlcjogXCJhc2NcIixcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICBzb3J0OiBcIm5hbWVcIixcbiAgICAgIHRvdGFsOiAxMDBcbiAgICB9XG4gICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2F1dGgtcG9saWNpZXMnLCBwYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hdXRoUG9saWNpZXMgPSBbLi4ucmVzdWx0LmRhdGFdO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhhc0F1dGhlbnRpY2F0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdGllc1NlcnZpY2UuaGFzQXV0aGVudGljYXRvcih0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIGdldCBoYXNFbnJvbG1lbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0aWVzU2VydmljZS5oYXNFbnJvbG1lbnRUb2tlbih0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIGdldCBqd3RFeHBpcmVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhlYWRlckFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3NhdmUnOlxuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgIHRoaXMuY2xvc2VGb3JtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIHRoaXMucmVzZXRUYWdzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUVucm9sbG1lbnQoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVucm9sbG1lbnRUeXBlKSB7XG4gICAgICBjYXNlICdvdHQnOlxuICAgICAgICB0aGlzLmZvcm1EYXRhLmVucm9sbG1lbnQgPSB7b3R0OiB0cnVlfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NBJzpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge290dGNhOiB0aGlzLmVucm9sbG1lbnRDQX07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYic6XG4gICAgICAgIHRoaXMuZm9ybURhdGEuZW5yb2xsbWVudCA9IHt1cGRiOiB0aGlzLmVucm9sbG1lbnRVUERCfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge307XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge290dDogdHJ1ZX1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2F2ZShldmVudD8pIHtcbiAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSB0aGlzLmZvcm1EYXRhLm5hbWUudHJpbSgpO1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFnVmFscyA9IHRoaXMuZ2V0VGFnVmFsdWVzKCk7XG4gICAgaWYgKCFpc0VtcHR5KHRhZ1ZhbHMpKSB7XG4gICAgICBmb3JPd24odGFnVmFscywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YS50YWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zdmMuc2F2ZSh0aGlzLmZvcm1EYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluaXREYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmVucm9sbG1lbnRUeXBlID09PSAnQ0EnICYmIChpc0VtcHR5KHRoaXMuZW5yb2xsbWVudENBKSB8fCBpc05pbCh0aGlzLmVucm9sbG1lbnRDQSkpKSB7XG4gICAgICB0aGlzLmVycm9yc1snZW5yb2xsbWVudENBJ10gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbnJvbGxtZW50VHlwZSA9PT0gJ3VwZGInICYmIChpc0VtcHR5KHRoaXMuZW5yb2xsbWVudFVQREIpIHx8IGlzTmlsKHRoaXMuZW5yb2xsbWVudFVQREIpKSkge1xuICAgICAgdGhpcy5lcnJvcnNbJ2Vucm9sbG1lbnRVUERCJ10gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmVycm9ycyk7XG4gIH1cblxuICBnZXQgZW5yb2xsbWVudFR5cGVUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnJvbGxtZW50VHlwZSA9PT0gJ0NBJyA/ICdDRVJUSUZJQ0FURSBBVVRIT1JJVFknIDogKHRoaXMuZW5yb2xsbWVudFR5cGUgPT09ICd1cGRiJyAmJiAhdGhpcy5pc0VkaXRpbmcpID8gJ1VQREIgVVNFUk5BTUUnIDogdW5kZWZpbmVkO1xuICB9XG4gIGdldCBhcGlDYWxsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyAnL2VkZ2UvbWFuYWdlbWVudC92MS9pZGVudGl0aWVzJyArICh0aGlzLmZvcm1EYXRhLmlkID8gYC8ke3RoaXMuZm9ybURhdGEuaWR9YCA6ICcnKTtcbiAgfVxuXG4gIGdldCBhcGlEYXRhKCkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybURhdGE/Lm5hbWUgfHwgJycsXG4gICAgICB0eXBlOiB0aGlzLmZvcm1EYXRhPy50eXBlPy5uYW1lIHx8IHRoaXMuZm9ybURhdGE/LnR5cGUgfHwgJycsXG4gICAgICBhcHBEYXRhOiB0aGlzLmZvcm1EYXRhPy5hcHBEYXRhIHx8ICcnLFxuICAgICAgaXNBZG1pbjogdGhpcy5mb3JtRGF0YT8uaXNBZG1pbiB8fCAnJyxcbiAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCAnJyxcbiAgICAgIGF1dGhQb2xpY3lJZDogdGhpcy5mb3JtRGF0YT8uYXV0aFBvbGljeUlkIHx8ICcnLFxuICAgICAgZXh0ZXJuYWxJZDogdGhpcy5mb3JtRGF0YT8uZXh0ZXJuYWxJZCB8fCAnJyxcbiAgICAgIGRlZmF1bHRIb3N0aW5nQ29zdDogdGhpcy5mb3JtRGF0YT8uZGVmYXVsdEhvc3RpbmdDb3N0IHx8ICcwJyxcbiAgICAgIGRlZmF1bHRIb3N0aW5nUHJlY2VkZW5jZTogdGhpcy5mb3JtRGF0YT8uZGVmYXVsdEhvc3RpbmdQcmVjZWRlbmNlIHx8ICdkZWZhdWx0SG9zdGluZ1ByZWNlZGVuY2UnLFxuICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFnc1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmlzRWRpdGluZykge1xuICAgICAgZGF0YS5lbnJvbGxtZW50ID0gdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50IHx8IHtvdHQ6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIF9hcGlEYXRhID0ge307XG4gIHNldCBhcGlEYXRhKGRhdGEpIHtcbiAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgfVxuXG4gIHNlcnZpY2VTZWxlY3RlZChzZXJ2aWNlTmFtZSkge1xuICAgIGxldCBzZXJ2aWNlOiBhbnkgPSB7fTtcbiAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5mb3JFYWNoKChzdmMpID0+IHtcbiAgICAgIGlmKHN2Yy5uYW1lID09PSBzZXJ2aWNlTmFtZSkge1xuICAgICAgICBzZXJ2aWNlID0gc3ZjO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3ZjLnRlc3RTZXJ2aWNlKHRoaXMuZm9ybURhdGEuaWQsIHNlcnZpY2UuaWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy50ZXN0UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy50ZXN0UmVzdWx0T3BlbiA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJc0FkbWluKCkge1xuICAgIHRoaXMuZm9ybURhdGEuaXNBZG1pbiA9ICF0aGlzLmZvcm1EYXRhLmlzQWRtaW47XG4gIH1cblxuICBnZXQgaWRlbnRpdHlUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGluZyA/IHRoaXMuZm9ybURhdGEudHlwZS5uYW1lIDogdGhpcy5mb3JtRGF0YS50eXBlO1xuICB9XG5cbiAgc2V0IGlkZW50aXR5VHlwZSh0eXBlKSB7XG4gICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XG4gICAgICBzZXQodGhpcy5mb3JtRGF0YSwgJ3R5cGUubmFtZScsIHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQodGhpcy5mb3JtRGF0YSwgJ3R5cGUnLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVRlc3RSZXN1bHQoKSB7XG4gICAgdGhpcy50ZXN0UmVzdWx0T3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXJcIlxuICAgICAoa2V5dXAuZW50ZXIpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgKGtleXVwLmVzY2FwZSk9XCJjbG9zZU1vZGFsKGZhbHNlKVwiXG4+XG4gICAgPGxpYi1mb3JtLWhlYWRlclxuICAgICAgICAgICAgW2RhdGFdPVwiZm9ybURhdGFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImZvcm1EYXRhLmlkID8gJ0VkaXQgSWRlbnRpdHk6ICcgOiAnQ3JlYXRlIE5ldyBJZGVudGl0eSdcIlxuICAgICAgICAgICAgW21vcmVBY3Rpb25zXT1cIm1vcmVBY3Rpb25zXCJcbiAgICAgICAgICAgIChhY3Rpb25SZXF1ZXN0ZWQpPVwiaGVhZGVyQWN0aW9uUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAgICAgWyhmb3JtVmlldyldPVwiZm9ybVZpZXdcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWRlbnRpdHktZm9ybS1jb250YWluZXIgcHJvamVjdGFibGUtZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0tbWFpbi1jb2x1bW4gZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cImZvcm1WaWV3ID09PSAnc2ltcGxlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIHRocmVlLWZpZnRoc1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidJZGVudGl0eSBOYW1lJ1wiIFtsYWJlbF09XCInUkVRVUlSRUQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB0aGlzIGlkZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzWyduYW1lJ119XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybURhdGEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICNuYW1lRmllbGRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IG9yIGNyZWF0ZSBJZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ09QVElPTkFMJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiA5OTk5OTk5OSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidBdHRyaWJ1dGVzIGFyZSB0YWdzIGFwcGxpZWQgdG8gYW4gcmVzb3VyY2UuIEFwcGx5IHRoZSBzYW1lIHRhZyB0byBvdGhlciBJZGVudGl0aWVzIHRvIGZvcm0gYSBncm91cCBvZiBJZGVudGl0aWVzLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImZvcm1EYXRhLnJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBZGQgYXR0cmlidXRlcyB0byBncm91cCBJZGVudGl0aWVzJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBdXRoIFBvbGljeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidBdXRoZW50aWNhdGlvbiBQb2xpY2llcyByZXN0cmljdCB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBhdmFpbGFibGUgdG8gaWRlbnRpdGllcy4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLmF1dGhQb2xpY3lJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhdXRoUG9saWN5SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgYW4gQXV0aGVudGljYXRpb24gUG9saWN5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBvbGljeSBvZiBhdXRoUG9saWNpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3kuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBvbGljeS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWxhYmVsLWNvbnRhaW5lclwiIHN0eWxlPVwiZ2FwOiB2YXIoLS1wYWRkaW5nTWVkaXVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPkV4dGVybmFsIElEPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbFwiPk9QVElPTkFMPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJPcHRpb25hbCBFeHRlcm5hbCBJRFwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuZXh0ZXJuYWxJZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLXRvZ2dsZSBbKHRvZ2dsZU9uKV09XCJzaG93TW9yZVwiICh0b2dnbGVPbkNoYW5nZSk9XCJzaG93TW9yZUNoYW5nZWQoJGV2ZW50KVwiIHN0eWxlPVwibWFyZ2luOiAwcHggMTBweFwiPjwvbGliLWZvcm0tZmllbGQtdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCIhc2hvd01vcmVcIiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRW5yb2xsbWVudCBUeXBlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGUyXT1cImVucm9sbG1lbnRUeXBlVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJFbnJvbGxtZW50VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IGlzRWRpdGluZ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsbWVudFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3R0XCI+T25lIFRpbWUgVG9rZW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ0FcIj5DZXJ0aWZpY2F0ZSBBdXRob3JpdHk8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidXBkYlwiPlVQREI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiPk5vbmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiQ2VydEF1dGhvcml0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5yb2xsbWVudFR5cGUgPT09ICdDQSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogaXNFZGl0aW5nfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxtZW50Q0FcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmVucm9sbG1lbnRDQX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjYSBvZiBjYXNcIiBbdmFsdWVdPVwiY2EuaWRcIj57e2NhLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVucm9sbG1lbnRUeXBlID09PSAndXBkYicgJiYgIWlzRWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0VkaXRpbmcsIGVycm9yOiBlcnJvcnMuZW5yb2xsbWVudFVQREJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbG1lbnRVUERCXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiVVBEQk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FkbWluJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWFkdmFuY2VkIGlzLWFkbWluLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctY29udGFpbmVyIHRvZ2dsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1jb250YWluZXItbGFiZWxcIj5JUyBBRE1JTjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUlzQWRtaW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogZm9ybURhdGEuaXNBZG1pbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIWZvcm1EYXRhLmlzQWRtaW5cIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJmb3JtRGF0YS5pc0FkbWluXCIgY2xhc3M9XCJvZmYtbGFiZWxcIj5OTzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0hvc3RpbmcgQ29zdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZTJdPVwiJ1ByZWNlZGVuY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIidyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5kZWZhdWx0SG9zdGluZ0Nvc3RcIiB0eXBlPVwibnVtYmVyXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybURhdGEuZGVmYXVsdEhvc3RpbmdQcmVjZWRlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImhvc3RpbmdQcmVjZWRlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZXF1aXJlZFwiPlJlcXVpcmVkPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZhaWxlZFwiPkZhaWxlZDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWdFbGVtZW50IG9mIHRhZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidGFnRWxlbWVudC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJ0YWdFbGVtZW50LmNvbnRlbnQgfCBzYWZlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDdXN0b20gVGFncydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jdXN0b20tdGFncyBbKHRhZ3MpXT1cImZvcm1EYXRhLnRhZ3NcIj48L2xpYi1jdXN0b20tdGFncz5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FwcCBEYXRhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItanNvbi12aWV3IFsoZGF0YSldPVwiZm9ybURhdGEuYXBwRGF0YVwiPjwvbGliLWpzb24tdmlldz5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0d28tZmlmdGhzXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNFbnJvbG1lbnRUb2tlbiB8fCBoYXNBdXRoZW50aWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXItY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aXR5XT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtqd3RdPVwiand0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtleHBpcmF0aW9uXT1cImVucm9sbG1lbnRFeHBpcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRoZW50aWNhdG9yc109XCJmb3JtRGF0YS5hdXRoZW50aWNhdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInaWRlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5FeHBhbmRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9SZWZyZXNoKT1cInJlZnJlc2hJZGVudGl0eSgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXFyLWNvZGU+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRGF0YS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Fzc29jaWF0ZWQgU2VydmljZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJhc3NvY2lhdGVkU2VydmljZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInaGlkZS1vdmVyZmxvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidQcmV2aWV3IGxpc3Qgb2YgYWxsIHNlcnZpY2VzIHRoYXQgdGhpcyBJZGVudGl0eSBpcyBhc3NvY2lhdGVkIHdpdGguJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXByZXZpZXctbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJzZXJ2aWNlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJzZXJ2aWNlc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5hbWVzXT1cImFzc29jaWF0ZWRTZXJ2aWNlTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZjLXRlc3QtcmVzdWx0XCIgW25nQ2xhc3NdPVwieyd0ZXN0LXJlc3VsdC1vcGVuJzogdGVzdFJlc3VsdE9wZW59XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UgaWNvbi1jbG9zZVwiIChjbGljayk9XCJjbG9zZVRlc3RSZXN1bHQoKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1jb250YWluZXJcIiBbaW5uZXJIVE1MXT1cInRlc3RSZXN1bHRcIiA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybURhdGEuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBc3NvY2lhdGVkIFNlcnZpY2UgUG9saWNpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJhc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1ByZXZpZXcgbGlzdCBvZiBhbGwgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoaXMgSWRlbnRpdHkgaXMgYXNzb2NpYXRlZCB3aXRoLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wcmV2aWV3LWxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwic2VydmljZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNMb2FkaW5nXT1cInNlcnZpY2VQb2xpY2llc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5hbWVzXT1cImFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQVBJIENhbGxzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgW3ZhbHVlXT1cImFwaUNhbGxVUkxcIiByZWFkb25seS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXJsLWNvcHkgaWNvbi1jb3B5IGNvcHlcIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGFwaUNhbGxVUkwpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bGliLWpzb24tdmlldyAqbmdJZj1cImZvcm1EYXRhXCIgWyhkYXRhKV09XCJhcGlEYXRhXCIgW3JlYWRPbmx5XT1cInRydWVcIiBbc2hvd0NvcHldPVwidHJ1ZVwiPjwvbGliLWpzb24tdmlldz5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCIgKm5nSWY9XCJmb3JtVmlldyA9PT0gJ3JhdydcIj5cbiAgICAgICAgICAgIDxsaWItanNvbi12aWV3ICpuZ0lmPVwiZm9ybURhdGFcIiBbKGRhdGEpXT1cImZvcm1EYXRhXCI+PC9saWItanNvbi12aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGxpYi1sb2FkaW5nLWluZGljYXRvciAqbmdJZj1cImlzTG9hZGluZ1wiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+Il19
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvaWRlbnRpdHkvaWRlbnRpdHktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvaWRlbnRpdHkvaWRlbnRpdHktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0NBQW9DLENBQUM7QUFFckYsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxpQkFBaUIsRUFBa0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUV2RixPQUFPLEVBQUMsMEJBQTBCLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFDeEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSXRELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHbEQsTUFXYSxxQkFBc0IsU0FBUSxlQUFlO0lBNkJ4RCxZQUNpRCxlQUFnQyxFQUN0RSxHQUF3QixFQUN4QixpQkFBd0MsRUFDWCxX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QXFCOzRGQUFyQixxQkFBcUI7a0JBWGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGFBR2xCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixRQUFRLEVBQUUsRUFBRTt5QkFDYjtxQkFDRjs7MEJBZ0NJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFHdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLDBCQUEwQjtxSEFsQzdCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQcm9qZWN0YWJsZUZvcm19IGZyb20gXCIuLi9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcblxuaW1wb3J0IHtpc0VtcHR5LCBpc05pbCwgZm9yT3duLCBjbG9uZURlZXAsIHNldCwgdW5zZXR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7SURFTlRJVFlfRVhURU5TSU9OX1NFUlZJQ0UsIElkZW50aXR5Rm9ybVNlcnZpY2V9IGZyb20gJy4vaWRlbnRpdHktZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7TWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0lkZW50aXRpZXNQYWdlU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3BhZ2VzL2lkZW50aXRpZXMvaWRlbnRpdGllcy1wYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtJZGVudGl0eX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9pZGVudGl0eVwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaWRlbnRpdHktZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pZGVudGl0eS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaWRlbnRpdHktZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXREaWFsb2dSZWYsXG4gICAgICB1c2VWYWx1ZToge31cbiAgICB9XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Rm9ybUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZm9ybURhdGE6IGFueSA9IHt9O1xuICBASW5wdXQoKSBpZGVudGl0eVJvbGVBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdO1xuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgb3ZlcnJpZGUgZW50aXR5VHlwZSA9ICdpZGVudGl0aWVzJztcbiAgb3ZlcnJpZGUgZW50aXR5Q2xhc3MgPSBJZGVudGl0eTtcblxuICBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgZW5yb2xsbWVudEV4cGlyYXRpb246IGFueTtcbiAgand0OiBhbnk7XG4gIGFzc29jaWF0ZWRTZXJ2aWNlUG9saWNpZXM6IGFueSA9IFtdO1xuICBhc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzOiBhbnkgPSBbXTtcbiAgYXNzb2NpYXRlZFNlcnZpY2VzOiBhbnkgPSBbXTtcbiAgYXNzb2NpYXRlZFNlcnZpY2VOYW1lczogYW55ID0gW107XG4gIHNlcnZpY2VzTG9hZGluZyA9IGZhbHNlO1xuICBzZXJ2aWNlUG9saWNpZXNMb2FkaW5nID0gZmFsc2U7XG4gIGF1dGhQb2xpY2llczogYW55ID0gW107XG5cbiAgZm9ybVZpZXcgPSAnc2ltcGxlJztcbiAgZW5yb2xsbWVudFR5cGUgPSAnb3R0JztcbiAgZW5yb2xsbWVudENBO1xuICBlbnJvbGxtZW50VVBEQiA9ICcnO1xuICBzZXR0aW5nczogYW55ID0ge307XG4gIHRlc3RSZXN1bHQ6IHN0cmluZyA9ICcnO1xuICB0ZXN0UmVzdWx0T3BlbiA9IGZhbHNlO1xuXG4gIGNhcyA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwcm90ZWN0ZWQgb3ZlcnJpZGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICBwdWJsaWMgc3ZjOiBJZGVudGl0eUZvcm1TZXJ2aWNlLFxuICAgICAgcHVibGljIGlkZW50aXRpZXNTZXJ2aWNlOiBJZGVudGl0aWVzUGFnZVNlcnZpY2UsXG4gICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgQEluamVjdChJREVOVElUWV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICBsb2NhdGlvbjogTG9jYXRpb25cbiAgKSB7XG4gICAgc3VwZXIoZ3Jvd2xlclNlcnZpY2UsIGV4dFNlcnZpY2UsIHppdGlTZXJ2aWNlLCByb3V0ZXIsIHJvdXRlLCBsb2NhdGlvbiwgc2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgdGhpcy5zZXR0aW5ncyA9IHJlc3VsdHM7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5uYW1lRmllbGRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5yZXNldFRhZ3MoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmlzRWRpdGluZyA9ICFpc0VtcHR5KHRoaXMuZm9ybURhdGEuaWQpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZW50aXR5VXBkYXRlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtRGF0YS5pZCkge1xuICAgICAgdGhpcy5mb3JtRGF0YS5iYWRnZXMgPSBbXTtcbiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmhhc0FwaVNlc3Npb24gfHwgdGhpcy5mb3JtRGF0YS5oYXNFZGdlUm91dGVyQ29ubmVjdGlvbikge1xuICAgICAgICB0aGlzLmZvcm1EYXRhLmJhZGdlcy5wdXNoKHtsYWJlbDogJ09ubGluZScsIGNsYXNzOiAnb25saW5lJywgY2lyY2xlOiAndHJ1ZSd9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEuYmFkZ2VzLnB1c2goe2xhYmVsOiAnT2ZmbGluZScsIGNsYXNzOiAnb2ZmbGluZScsIGNpcmNsZTogJ2ZhbHNlJ30pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW5yb2xsbWVudD8ub3R0KSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGEuYmFkZ2VzLnB1c2goe2xhYmVsOiAnVW5yZWdpc3RlcmVkJywgY2xhc3M6ICd1bnJlZyd9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuand0ID0gdGhpcy5pZGVudGl0aWVzU2VydmljZS5nZXRKV1QodGhpcy5mb3JtRGF0YSk7XG4gICAgICB0aGlzLmVucm9sbG1lbnRFeHBpcmF0aW9uID0gdGhpcy5pZGVudGl0aWVzU2VydmljZS5nZXRFbnJvbGxtZW50RXhwaXJhdGlvbih0aGlzLmZvcm1EYXRhKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RW5yb2xsbWVudFR5cGUoKTtcbiAgICB0aGlzLmdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKTtcbiAgICB0aGlzLmdldEFzc29jaWF0ZWRTZXJ2aWNlcygpO1xuICAgIHRoaXMuZ2V0QXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcygpO1xuICAgIHRoaXMuZ2V0QXV0aFBvbGljaWVzKCk7XG4gICAgdGhpcy5nZXRDZXJ0aWZpY2F0ZUF1dGhvcml0aWVzKCk7XG4gICAgdGhpcy5sb2FkVGFncygpO1xuICAgIHVuc2V0KHRoaXMuZm9ybURhdGEsICdfbGlua3MnKTtcbiAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuZXh0U2VydmljZS51cGRhdGVGb3JtRGF0YSh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIHJlZnJlc2hJZGVudGl0eSgpIHtcbiAgICB0aGlzLnN2Yy5yZWZyZXNoSWRlbnRpdHkodGhpcy5mb3JtRGF0YS5pZCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgIHRoaXMuZW5yb2xsbWVudEV4cGlyYXRpb24gPSB0aGlzLmlkZW50aXRpZXNTZXJ2aWNlLmdldEVucm9sbG1lbnRFeHBpcmF0aW9uKHRoaXMuZm9ybURhdGEpO1xuICAgICAgdGhpcy5qd3QgPSB0aGlzLmlkZW50aXRpZXNTZXJ2aWNlLmdldEpXVCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgIHRoaXMuZXh0U2VydmljZS51cGRhdGVGb3JtRGF0YSh0aGlzLmZvcm1EYXRhKTtcbiAgICB9KVxuICB9XG5cbiAgaW5pdEVucm9sbG1lbnRUeXBlKCkge1xuICAgIGlmICh0aGlzLmZvcm1EYXRhPy5lbnJvbGxtZW50Py5vdHQpIHtcbiAgICAgIHRoaXMuZW5yb2xsbWVudFR5cGUgPSAnb3R0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybURhdGE/LmVucm9sbG1lbnQ/LnVwZGIpIHtcbiAgICAgIHRoaXMuZW5yb2xsbWVudFR5cGUgPSAndXBkYic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1EYXRhPy5lbnJvbGxtZW50Py5vdHRjYSkge1xuICAgICAgdGhpcy5lbnJvbGxtZW50VHlwZSA9ICdDQSc7XG4gICAgfSBlbHNlIGlmIChpc0VtcHR5KHRoaXMuZm9ybURhdGE/LmVucm9sbG1lbnQpKSB7XG4gICAgICB0aGlzLmVucm9sbG1lbnRUeXBlID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGdldElkZW50aXR5Um9sZUF0dHJpYnV0ZXMoKSB7XG4gICAgICB0aGlzLmdldFJvbGVBdHRyaWJ1dGVzKCdpZGVudGl0eS1yb2xlLWF0dHJpYnV0ZXMnKS50aGVuKChhdHRyaWJ1dGVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5pZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VzKCkge1xuICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnaWRlbnRpdGllcycsIHRoaXMuZm9ybURhdGEuaWQsICdzZXJ2aWNlcycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZXMubWFwKChzdmMpID0+IHtcbiAgICAgICAgcmV0dXJuIHN2Yy5uYW1lO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBc3NvY2lhdGVkU2VydmljZVBvbGljaWVzKCkge1xuICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSgnaWRlbnRpdGllcycsIHRoaXMuZm9ybURhdGEuaWQsICdzZXJ2aWNlLXBvbGljaWVzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VQb2xpY2llcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljeU5hbWVzID0gdGhpcy5hc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLm1hcCgocG9saWN5KSA9PiB7XG4gICAgICAgIHJldHVybiBwb2xpY3kubmFtZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VydGlmaWNhdGVBdXRob3JpdGllcygpIHtcbiAgICBjb25zdCBwYWdpbmcgPSB7XG4gICAgICBmaWx0ZXI6IFwiXCIsXG4gICAgICBub1NlYXJjaDogdHJ1ZSxcbiAgICAgIG9yZGVyOiBcImFzY1wiLFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaE9uOiBcIm5hbWVcIixcbiAgICAgIHNvcnQ6IFwibmFtZVwiLFxuICAgICAgdG90YWw6IDEwMFxuICAgIH1cbiAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnY2FzJywgcGFnaW5nLCBbXSkudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY2FzID0gWy4uLnJlc3VsdC5kYXRhXTtcbiAgICAgIGlmICh0aGlzLmNhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZW5yb2xsbWVudENBID0gdGhpcy5jYXNbMF0uaWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRBdXRoUG9saWNpZXMoKSB7XG4gICAgY29uc3QgcGFnaW5nID0ge1xuICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICBvcmRlcjogXCJhc2NcIixcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICBzb3J0OiBcIm5hbWVcIixcbiAgICAgIHRvdGFsOiAxMDBcbiAgICB9XG4gICAgdGhpcy56aXRpU2VydmljZS5nZXQoJ2F1dGgtcG9saWNpZXMnLCBwYWdpbmcsIFtdKS50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hdXRoUG9saWNpZXMgPSBbLi4ucmVzdWx0LmRhdGFdO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhhc0F1dGhlbnRpY2F0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdGllc1NlcnZpY2UuaGFzQXV0aGVudGljYXRvcih0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIGdldCBoYXNFbnJvbG1lbnRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5pZGVudGl0aWVzU2VydmljZS5oYXNFbnJvbG1lbnRUb2tlbih0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIGdldCBqd3RFeHBpcmVkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhlYWRlckFjdGlvblJlcXVlc3RlZChhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3NhdmUnOlxuICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgIHRoaXMuY2xvc2VGb3JtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIHRoaXMucmVzZXRUYWdzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUVucm9sbG1lbnQoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVucm9sbG1lbnRUeXBlKSB7XG4gICAgICBjYXNlICdvdHQnOlxuICAgICAgICB0aGlzLmZvcm1EYXRhLmVucm9sbG1lbnQgPSB7b3R0OiB0cnVlfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0NBJzpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge290dGNhOiB0aGlzLmVucm9sbG1lbnRDQX07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXBkYic6XG4gICAgICAgIHRoaXMuZm9ybURhdGEuZW5yb2xsbWVudCA9IHt1cGRiOiB0aGlzLmVucm9sbG1lbnRVUERCfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge307XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50ID0ge290dDogdHJ1ZX1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2F2ZShldmVudD8pIHtcbiAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSB0aGlzLmZvcm1EYXRhLm5hbWUudHJpbSgpO1xuICAgIGlmKCF0aGlzLnZhbGlkYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFnVmFscyA9IHRoaXMuZ2V0VGFnVmFsdWVzKCk7XG4gICAgaWYgKCFpc0VtcHR5KHRhZ1ZhbHMpKSB7XG4gICAgICBmb3JPd24odGFnVmFscywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YS50YWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zdmMuc2F2ZSh0aGlzLmZvcm1EYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHRydWUsIHRydWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluaXREYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgaWYgKGlzRW1wdHkodGhpcy5mb3JtRGF0YS5uYW1lKSkge1xuICAgICAgdGhpcy5lcnJvcnNbJ25hbWUnXSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmVucm9sbG1lbnRUeXBlID09PSAnQ0EnICYmIChpc0VtcHR5KHRoaXMuZW5yb2xsbWVudENBKSB8fCBpc05pbCh0aGlzLmVucm9sbG1lbnRDQSkpKSB7XG4gICAgICB0aGlzLmVycm9yc1snZW5yb2xsbWVudENBJ10gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5lbnJvbGxtZW50VHlwZSA9PT0gJ3VwZGInICYmIChpc0VtcHR5KHRoaXMuZW5yb2xsbWVudFVQREIpIHx8IGlzTmlsKHRoaXMuZW5yb2xsbWVudFVQREIpKSkge1xuICAgICAgdGhpcy5lcnJvcnNbJ2Vucm9sbG1lbnRVUERCJ10gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLmVycm9ycyk7XG4gIH1cblxuICBnZXQgZW5yb2xsbWVudFR5cGVUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnJvbGxtZW50VHlwZSA9PT0gJ0NBJyA/ICdDRVJUSUZJQ0FURSBBVVRIT1JJVFknIDogKHRoaXMuZW5yb2xsbWVudFR5cGUgPT09ICd1cGRiJyAmJiAhdGhpcy5pc0VkaXRpbmcpID8gJ1VQREIgVVNFUk5BTUUnIDogdW5kZWZpbmVkO1xuICB9XG4gIGdldCBhcGlDYWxsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyAnL2VkZ2UvbWFuYWdlbWVudC92MS9pZGVudGl0aWVzJyArICh0aGlzLmZvcm1EYXRhLmlkID8gYC8ke3RoaXMuZm9ybURhdGEuaWR9YCA6ICcnKTtcbiAgfVxuXG4gIGdldCBhcGlEYXRhKCkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybURhdGE/Lm5hbWUgfHwgJycsXG4gICAgICB0eXBlOiB0aGlzLmZvcm1EYXRhPy50eXBlPy5uYW1lIHx8IHRoaXMuZm9ybURhdGE/LnR5cGUgfHwgJycsXG4gICAgICBhcHBEYXRhOiB0aGlzLmZvcm1EYXRhPy5hcHBEYXRhIHx8ICcnLFxuICAgICAgaXNBZG1pbjogdGhpcy5mb3JtRGF0YT8uaXNBZG1pbiB8fCAnJyxcbiAgICAgIHJvbGVBdHRyaWJ1dGVzOiB0aGlzLmZvcm1EYXRhPy5yb2xlQXR0cmlidXRlcyB8fCAnJyxcbiAgICAgIGF1dGhQb2xpY3lJZDogdGhpcy5mb3JtRGF0YT8uYXV0aFBvbGljeUlkIHx8ICcnLFxuICAgICAgZXh0ZXJuYWxJZDogdGhpcy5mb3JtRGF0YT8uZXh0ZXJuYWxJZCB8fCAnJyxcbiAgICAgIGRlZmF1bHRIb3N0aW5nQ29zdDogdGhpcy5mb3JtRGF0YT8uZGVmYXVsdEhvc3RpbmdDb3N0IHx8ICcwJyxcbiAgICAgIGRlZmF1bHRIb3N0aW5nUHJlY2VkZW5jZTogdGhpcy5mb3JtRGF0YT8uZGVmYXVsdEhvc3RpbmdQcmVjZWRlbmNlIHx8ICdkZWZhdWx0SG9zdGluZ1ByZWNlZGVuY2UnLFxuICAgICAgdGFnczogdGhpcy5mb3JtRGF0YT8udGFnc1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmlzRWRpdGluZykge1xuICAgICAgZGF0YS5lbnJvbGxtZW50ID0gdGhpcy5mb3JtRGF0YS5lbnJvbGxtZW50IHx8IHtvdHQ6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIF9hcGlEYXRhID0ge307XG4gIHNldCBhcGlEYXRhKGRhdGEpIHtcbiAgICB0aGlzLl9hcGlEYXRhID0gZGF0YTtcbiAgfVxuXG4gIHNlcnZpY2VTZWxlY3RlZChzZXJ2aWNlTmFtZSkge1xuICAgIGxldCBzZXJ2aWNlOiBhbnkgPSB7fTtcbiAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5mb3JFYWNoKChzdmMpID0+IHtcbiAgICAgIGlmKHN2Yy5uYW1lID09PSBzZXJ2aWNlTmFtZSkge1xuICAgICAgICBzZXJ2aWNlID0gc3ZjO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3ZjLnRlc3RTZXJ2aWNlKHRoaXMuZm9ybURhdGEuaWQsIHNlcnZpY2UuaWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy50ZXN0UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgdGhpcy50ZXN0UmVzdWx0T3BlbiA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJc0FkbWluKCkge1xuICAgIHRoaXMuZm9ybURhdGEuaXNBZG1pbiA9ICF0aGlzLmZvcm1EYXRhLmlzQWRtaW47XG4gIH1cblxuICBnZXQgaWRlbnRpdHlUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGluZyA/IHRoaXMuZm9ybURhdGEudHlwZS5uYW1lIDogdGhpcy5mb3JtRGF0YS50eXBlO1xuICB9XG5cbiAgc2V0IGlkZW50aXR5VHlwZSh0eXBlKSB7XG4gICAgaWYgKHRoaXMuaXNFZGl0aW5nKSB7XG4gICAgICBzZXQodGhpcy5mb3JtRGF0YSwgJ3R5cGUubmFtZScsIHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQodGhpcy5mb3JtRGF0YSwgJ3R5cGUnLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVRlc3RSZXN1bHQoKSB7XG4gICAgdGhpcy50ZXN0UmVzdWx0T3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwcm9qZWN0YWJsZS1mb3JtLXdyYXBwZXJcIlxuICAgICAoa2V5dXAuZW50ZXIpPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgKGtleXVwLmVzY2FwZSk9XCJjbG9zZU1vZGFsKGZhbHNlKVwiXG4+XG4gICAgPGxpYi1mb3JtLWhlYWRlclxuICAgICAgICAgICAgW2RhdGFdPVwiZm9ybURhdGFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImZvcm1EYXRhLmlkID8gJ0VkaXQgSWRlbnRpdHk6ICcgOiAnQ3JlYXRlIE5ldyBJZGVudGl0eSdcIlxuICAgICAgICAgICAgW21vcmVBY3Rpb25zXT1cIm1vcmVBY3Rpb25zXCJcbiAgICAgICAgICAgIChhY3Rpb25SZXF1ZXN0ZWQpPVwiaGVhZGVyQWN0aW9uUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAgICAgWyhmb3JtVmlldyldPVwiZm9ybVZpZXdcIlxuICAgID48L2xpYi1mb3JtLWhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWRlbnRpdHktZm9ybS1jb250YWluZXIgcHJvamVjdGFibGUtZm9ybS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0tbWFpbi1jb2x1bW4gZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cImZvcm1WaWV3ID09PSAnc2ltcGxlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIHRocmVlLWZpZnRoc1wiPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXIgW3RpdGxlXT1cIidJZGVudGl0eSBOYW1lJ1wiIFtsYWJlbF09XCInUkVRVUlSRUQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB0aGlzIGlkZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzWyduYW1lJ119XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybURhdGEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICNuYW1lRmllbGRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IG9yIGNyZWF0ZSBJZGVudGl0eSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ09QVElPTkFMJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudFN0eWxlXT1cIid6LWluZGV4OiA5OTk5OTk5OSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidBdHRyaWJ1dGVzIGFyZSB0YWdzIGFwcGxpZWQgdG8gYW4gcmVzb3VyY2UuIEFwcGx5IHRoZSBzYW1lIHRhZyB0byBvdGhlciBJZGVudGl0aWVzIHRvIGZvcm0gYSBncm91cCBvZiBJZGVudGl0aWVzLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cImZvcm1EYXRhLnJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwiaWRlbnRpdHlSb2xlQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBZGQgYXR0cmlidXRlcyB0byBncm91cCBJZGVudGl0aWVzJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi10YWctc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBdXRoIFBvbGljeSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidBdXRoZW50aWNhdGlvbiBQb2xpY2llcyByZXN0cmljdCB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBhdmFpbGFibGUgdG8gaWRlbnRpdGllcy4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLmF1dGhQb2xpY3lJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhdXRoUG9saWN5SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgYW4gQXV0aGVudGljYXRpb24gUG9saWN5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBvbGljeSBvZiBhdXRoUG9saWNpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3kuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBvbGljeS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkLWxhYmVsLWNvbnRhaW5lclwiIHN0eWxlPVwiZ2FwOiB2YXIoLS1wYWRkaW5nTWVkaXVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC10aXRsZVwiPkV4dGVybmFsIElEPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1maWVsZC1sYWJlbFwiPk9QVElPTkFMPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJPcHRpb25hbCBFeHRlcm5hbCBJRFwiIFsobmdNb2RlbCldPVwiZm9ybURhdGEuZXh0ZXJuYWxJZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLXRvZ2dsZSBbKHRvZ2dsZU9uKV09XCJzaG93TW9yZVwiICh0b2dnbGVPbkNoYW5nZSk9XCJzaG93TW9yZUNoYW5nZWQoJGV2ZW50KVwiIHN0eWxlPVwibWFyZ2luOiAwcHggMTBweFwiPjwvbGliLWZvcm0tZmllbGQtdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCIhc2hvd01vcmVcIiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRW5yb2xsbWVudCBUeXBlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGUyXT1cImVucm9sbG1lbnRUeXBlVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJFbnJvbGxtZW50VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZGlzYWJsZWQ6IGlzRWRpdGluZ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5yb2xsbWVudFR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3R0XCI+T25lIFRpbWUgVG9rZW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ0FcIj5DZXJ0aWZpY2F0ZSBBdXRob3JpdHk8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidXBkYlwiPlVQREI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiPk5vbmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiQ2VydEF1dGhvcml0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5yb2xsbWVudFR5cGUgPT09ICdDQSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntkaXNhYmxlZDogaXNFZGl0aW5nfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbnJvbGxtZW50Q0FcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntlcnJvcjogZXJyb3JzLmVucm9sbG1lbnRDQX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjYSBvZiBjYXNcIiBbdmFsdWVdPVwiY2EuaWRcIj57e2NhLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVucm9sbG1lbnRUeXBlID09PSAndXBkYicgJiYgIWlzRWRpdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2Rpc2FibGVkOiBpc0VkaXRpbmcsIGVycm9yOiBlcnJvcnMuZW5yb2xsbWVudFVQREJ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVucm9sbG1lbnRVUERCXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwidXBkYXRlRW5yb2xsbWVudCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiVVBEQk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgYSBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FkbWluJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xheW91dF09XCIncm93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWFkdmFuY2VkIGlzLWFkbWluLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctY29udGFpbmVyIHRvZ2dsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZy1jb250YWluZXItbGFiZWxcIj5JUyBBRE1JTjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUlzQWRtaW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBvbjogZm9ybURhdGEuaXNBZG1pbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIWZvcm1EYXRhLmlzQWRtaW5cIiBjbGFzcz1cIm9uLWxhYmVsXCI+WUVTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJmb3JtRGF0YS5pc0FkbWluXCIgY2xhc3M9XCJvZmYtbGFiZWxcIj5OTzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2hcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0hvc3RpbmcgQ29zdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZTJdPVwiJ1ByZWNlZGVuY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIidyb3cnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5kZWZhdWx0SG9zdGluZ0Nvc3RcIiB0eXBlPVwibnVtYmVyXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9ybURhdGEuZGVmYXVsdEhvc3RpbmdQcmVjZWRlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImhvc3RpbmdQcmVjZWRlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkZWZhdWx0XCI+RGVmYXVsdDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZXF1aXJlZFwiPlJlcXVpcmVkPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZhaWxlZFwiPkZhaWxlZDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWdFbGVtZW50IG9mIHRhZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwidGFnRWxlbWVudC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJ0YWdFbGVtZW50LmNvbnRlbnQgfCBzYWZlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDdXN0b20gVGFncydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtYWR2YW5jZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jdXN0b20tdGFncyBbKHRhZ3MpXT1cImZvcm1EYXRhLnRhZ3NcIj48L2xpYi1jdXN0b20tdGFncz5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FwcCBEYXRhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItanNvbi12aWV3IFsoZGF0YSldPVwiZm9ybURhdGEuYXBwRGF0YVwiPjwvbGliLWpzb24tdmlldz5cbiAgICAgICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLWNvbHVtbiB0d28tZmlmdGhzXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNFbnJvbG1lbnRUb2tlbiB8fCBoYXNBdXRoZW50aWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItcXItY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkZW50aXR5XT1cImZvcm1EYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtqd3RdPVwiand0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtleHBpcmF0aW9uXT1cImVucm9sbG1lbnRFeHBpcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRoZW50aWNhdG9yc109XCJmb3JtRGF0YS5hdXRoZW50aWNhdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInaWRlbnRpdHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5FeHBhbmRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9SZWZyZXNoKT1cInJlZnJlc2hJZGVudGl0eSgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXFyLWNvZGU+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtRGF0YS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Fzc29jaWF0ZWQgU2VydmljZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJhc3NvY2lhdGVkU2VydmljZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInaGlkZS1vdmVyZmxvdydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidQcmV2aWV3IGxpc3Qgb2YgYWxsIHNlcnZpY2VzIHRoYXQgdGhpcyBJZGVudGl0eSBpcyBhc3NvY2lhdGVkIHdpdGguJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXByZXZpZXctbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJzZXJ2aWNlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJzZXJ2aWNlc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5hbWVzXT1cImFzc29jaWF0ZWRTZXJ2aWNlTmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ZjLXRlc3QtcmVzdWx0XCIgW25nQ2xhc3NdPVwieyd0ZXN0LXJlc3VsdC1vcGVuJzogdGVzdFJlc3VsdE9wZW59XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UgaWNvbi1jbG9zZVwiIChjbGljayk9XCJjbG9zZVRlc3RSZXN1bHQoKVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1jb250YWluZXJcIiBbaW5uZXJIVE1MXT1cInRlc3RSZXN1bHRcIiA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybURhdGEuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBc3NvY2lhdGVkIFNlcnZpY2UgUG9saWNpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJhc3NvY2lhdGVkU2VydmljZVBvbGljaWVzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1ByZXZpZXcgbGlzdCBvZiBhbGwgc2VydmljZSBwb2xpY2llcyB0aGF0IHRoaXMgSWRlbnRpdHkgaXMgYXNzb2NpYXRlZCB3aXRoLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wcmV2aWV3LWxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwic2VydmljZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNMb2FkaW5nXT1cInNlcnZpY2VQb2xpY2llc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbE5hbWVzXT1cImFzc29jaWF0ZWRTZXJ2aWNlUG9saWN5TmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQVBJIENhbGxzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCIgW3ZhbHVlXT1cImFwaUNhbGxVUkxcIiByZWFkb25seS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXJsLWNvcHkgaWNvbi1jb3B5IGNvcHlcIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGFwaUNhbGxVUkwpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bGliLWpzb24tdmlldyAqbmdJZj1cImZvcm1EYXRhXCIgWyhkYXRhKV09XCJhcGlEYXRhXCIgW3JlYWRPbmx5XT1cInRydWVcIiBbc2hvd0NvcHldPVwidHJ1ZVwiPjwvbGliLWpzb24tdmlldz5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCIgKm5nSWY9XCJmb3JtVmlldyA9PT0gJ3JhdydcIj5cbiAgICAgICAgICAgIDxsaWItanNvbi12aWV3ICpuZ0lmPVwiZm9ybURhdGFcIiBbKGRhdGEpXT1cImZvcm1EYXRhXCI+PC9saWItanNvbi12aWV3PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGxpYi1sb2FkaW5nLWluZGljYXRvciAqbmdJZj1cImlzTG9hZGluZ1wiIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCI+PC9saWItbG9hZGluZy1pbmRpY2F0b3I+Il19
@@ -38,20 +38,8 @@ class IdentityFormService {
38
38
  const growlerData = new GrowlerModel('success', 'Success', `Identity ${isUpdate ? 'Updated' : 'Created'}`, `Successfully ${isUpdate ? 'updated' : 'created'} Identity: ${formData.name}`);
39
39
  this.growlerService.show(growlerData);
40
40
  }).catch((resp) => {
41
- let errorMessage;
42
- if (resp?.error?.error?.cause?.message) {
43
- errorMessage = resp?.error?.error?.cause?.message;
44
- }
45
- else if (resp?.error?.error?.cause?.reason) {
46
- errorMessage = resp?.error?.error?.cause?.reason;
47
- }
48
- else if (resp?.error?.message) {
49
- errorMessage = resp?.error?.message;
50
- }
51
- else {
52
- errorMessage = 'An unknown error occurred';
53
- }
54
- const growlerData = new GrowlerModel('error', 'Error', `Error Creating Identity`, errorMessage);
41
+ const errorMessage = this.zitiService.getErrorMessage(resp);
42
+ const growlerData = new GrowlerModel('error', 'Error', `Error ${isUpdate ? 'Updating' : 'Creating'} Identity`, errorMessage);
55
43
  this.growlerService.show(growlerData);
56
44
  throw resp;
57
45
  });
@@ -141,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
141
129
  type: Inject,
142
130
  args: [ZITI_DATA_SERVICE]
143
131
  }] }, { type: i1.GrowlerService }]; } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL2lkZW50aXR5L2lkZW50aXR5LWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUdqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBRXZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDOzs7OztBQUdyRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FBTSw0QkFBNEIsQ0FBQyxDQUFDO0FBR2hHLE1BR2EsbUJBQW1CO0lBRTVCLFlBQ3FDLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELGNBQThCO1FBRkwsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLElBQUksQ0FBQyxRQUFRO1FBQ1QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUNoQyxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUM5QyxnQkFBZ0IsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsY0FBYyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQ2hGLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNkLElBQUksWUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDcEMsWUFBWSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUMxQyxZQUFZLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQzthQUNwRDtpQkFBSyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUM1QixZQUFZLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0gsWUFBWSxHQUFHLDJCQUEyQixDQUFDO2FBQzlDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQ2hDLE9BQU8sRUFDUCxPQUFPLEVBQ1AseUJBQXlCLEVBQ3pCLFlBQVksQ0FDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsTUFBTSxJQUFJLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsUUFBTyxJQUFJLEVBQUU7Z0JBQ1QsS0FBSyxNQUFNO29CQUNQLElBQUcsUUFBUSxFQUFFO3dCQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUN2Qzt5QkFBTTt3QkFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNwQztvQkFDRCxNQUFNO2dCQUNWLEtBQUssWUFBWTtvQkFDYixJQUFHLFFBQVEsRUFBRTt3QkFDVCxLQUFLLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO3FCQUNsQzt5QkFBTTt3QkFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNwQztvQkFDRCxNQUFNO2dCQUNWO29CQUNJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBVSxFQUFFLFNBQVM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsZUFBZSxVQUFVLGtCQUFrQixTQUFTLEVBQUUsQ0FBQztRQUNuRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFFLENBQUMsSUFBSSxFQUFFLGFBQWE7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1lBQzlHLElBQUksSUFBSSxFQUFFLG1CQUFtQixHQUFDLENBQUM7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQ3BILElBQUksSUFBSSxFQUFFLGtCQUFrQixHQUFDLENBQUM7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1lBQ2xILElBQUksSUFBSSxFQUFFLG1CQUFtQixHQUFDLENBQUMsSUFBRSxJQUFJLEVBQUUsa0JBQWtCLEdBQUMsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLElBQUksRUFBRSxXQUFXLEdBQUMsQ0FBQztvQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLHdIQUF3SCxDQUFDLENBQUM7cUJBQzFKLElBQUksSUFBSSxFQUFFLFdBQVcsR0FBQyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0lBQXNJLENBQUMsQ0FBQzthQUNyTDtZQUNELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxFQUFFLGFBQWE7b0JBQUUsTUFBTSxHQUFHLGFBQWEsQ0FBQzs7b0JBQzNDLE1BQU0sR0FBRyxRQUFRLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0gsSUFBSSxJQUFJLEVBQUUsYUFBYTtvQkFBRSxNQUFNLEdBQUcsUUFBUSxDQUFDO2FBQzlDO1lBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtnQkFDakIsS0FBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLE1BQU0sSUFBSSxPQUFPLEdBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvQjthQUNKOztnQkFBTSxNQUFNLElBQUksd0NBQXdDLENBQUM7WUFDMUQsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZSxDQUFDLEVBQUU7UUFDZCxNQUFNLEdBQUcsR0FBUSxlQUFlLEVBQUUsRUFBRSxDQUFBO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0FuR1EsbUJBQW1CLGtCQUdoQixnQkFBZ0IsYUFDaEIsaUJBQWlCO21IQUpwQixtQkFBbUIsY0FGaEIsTUFBTTs7U0FFVCxtQkFBbUI7NEZBQW5CLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmltcG9ydCB7aXNFbXB0eSwgdW5zZXQsIGtleXN9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7SWRlbnRpdHl9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvaWRlbnRpdHlcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuXG5cbmV4cG9ydCBjb25zdCBJREVOVElUWV9FWFRFTlNJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnk+KCdJREVOVElUWV9FWFRFTlNJT05fU0VSVklDRScpO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlGb3JtU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2VcbiAgICApIHt9XG4gXG4gICAgc2F2ZShmb3JtRGF0YSkge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRJZGVudGl0eURhdGFNb2RlbChmb3JtRGF0YSwgaXNVcGRhdGUpO1xuICAgICAgICBjb25zdCBzdmMgPSBpc1VwZGF0ZSA/IHRoaXMueml0aVNlcnZpY2UucGF0Y2guYmluZCh0aGlzLnppdGlTZXJ2aWNlKSA6IHRoaXMueml0aVNlcnZpY2UucG9zdC5iaW5kKHRoaXMueml0aVNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gc3ZjKCdpZGVudGl0aWVzJywgZGF0YSwgZm9ybURhdGEuaWQpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgYElkZW50aXR5ICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IElkZW50aXR5OiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICB9KS5jYXRjaCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChyZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgfWVsc2UgaWYgKHJlc3A/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIElkZW50aXR5YCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0SWRlbnRpdHlEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBJZGVudGl0eSgpO1xuICAgICAgICBjb25zdCBtb2RlbFByb3BlcnRpZXMgPSBrZXlzKHNhdmVNb2RlbCk7XG4gICAgICAgIG1vZGVsUHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2gocHJvcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgICAgICBpZihpc1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF0uaWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdlbnJvbGxtZW50JzpcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0KHNhdmVNb2RlbCwgJ2Vucm9sbG1lbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNhdmVNb2RlbDtcbiAgICB9XG5cbiAgICB0ZXN0U2VydmljZShpZGVudGl0eUlkLCBzZXJ2aWNlSWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYC9pZGVudGl0aWVzLyR7aWRlbnRpdHlJZH0vcG9saWN5LWFkdmljZS8ke3NlcnZpY2VJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5jYWxsKHVybCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgICAgICB2YXIgaW5mbyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgaWYgKCFpbmZvPy5pc0RpYWxBbGxvd2VkJiYhaW5mbz8uaXNCaW5kQWxsb3dlZCkgZXJyb3JzLnB1c2goXCJObyBhY2Nlc3MgdG8gc2VydmljZS4gQWRqdXN0IHNlcnZpY2UgcG9saWNpZXMuXCIpO1xuICAgICAgICAgICAgaWYgKGluZm8/LmlkZW50aXR5Um91dGVyQ291bnQ8MSkgZXJyb3JzLnB1c2goXCJJZGVudGl0eSBoYXMgbm8gZWRnZSByb3V0ZXJzIGFzc2lnbmVkLiBBZGp1c3QgZWRnZSByb3V0ZXIgcG9saWNpZXMuXCIpO1xuICAgICAgICAgICAgaWYgKGluZm8/LnNlcnZpY2VSb3V0ZXJDb3VudDwxKSBlcnJvcnMucHVzaChcIlNlcnZpY2UgaGFzIG5vIGVkZ2Ugcm91dGVycyBhc3NpZ25lZC4gQWRqdXN0IGVkZ2Ugcm91dGVyIHBvbGljaWVzLlwiKTtcbiAgICAgICAgICAgIGlmIChpbmZvPy5pZGVudGl0eVJvdXRlckNvdW50PjAmJmluZm8/LnNlcnZpY2VSb3V0ZXJDb3VudD4wKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZm8/LmNvbW1vbkNvdW50PDEpIGVycm9ycy5wdXNoKFwiSWRlbnRpdHkgYW5kIHNlcnZpY2VzIGhhdmUgbm8gZWRnZSByb3V0ZXJzIGluIGNvbW1vbi4gQWRqdXN0IGVkZ2Ugcm91dGVyIHBvbGljaWVzIGFuZC9vciBzZXJ2aWNlIGVkZ2Ugcm91dGVyIHBvbGljaWVzLlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmZvPy5vbmxpbmVDb3VudDwxKSBlcnJvcnMucHVzaChcIkNvbW1vbiBlZGdlIHJvdXRlcnMgYXJlIGFsbCBvZmYtbGluZS4gQnJpbmcgcm91dGVycyBiYWNrIG9uLWxpbmUgb3IgYWRqdXN0IGVkZ2Ugcm91dGVyIHBvbGljaWVzIGFuZC9vciBzZXJ2aWNlIGVkZ2Ugcm91dGVyIHBvbGljaWVzLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdGF0dXMgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKGluZm8/LmlzRGlhbEFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5mbz8uaXNCaW5kQWxsb3dlZCkgc3RhdHVzID0gXCIoRGlhbCxCaW5kKVwiO1xuICAgICAgICAgICAgICAgIGVsc2Ugc3RhdHVzID0gXCIoRGlhbClcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZm8/LmlzQmluZEFsbG93ZWQpIHN0YXR1cyA9IFwiKEJpbmQpXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKz0gXCI8YnIvPlwiK2Vycm9yc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Ugc3RhdHVzICs9IFwiPGJyLz5FdmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHlcIjtcbiAgICAgICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZnJlc2hJZGVudGl0eShpZCkge1xuICAgICAgICBjb25zdCB1cmw6IGFueSA9IGAvaWRlbnRpdGllcy8ke2lkfWBcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuY2FsbCh1cmwpO1xuICAgIH1cbn1cbiJdfQ==
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL2lkZW50aXR5L2lkZW50aXR5LWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUdqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBRXZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDOzs7OztBQUdyRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGNBQWMsQ0FBTSw0QkFBNEIsQ0FBQyxDQUFDO0FBR2hHLE1BR2EsbUJBQW1CO0lBRTVCLFlBQ3FDLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELGNBQThCO1FBRkwsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLElBQUksQ0FBQyxRQUFRO1FBQ1QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxD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TUFBTSxJQUFJLHdDQUF3QyxDQUFDO1lBQzFELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQVEsZUFBZSxFQUFFLEVBQUUsQ0FBQTtRQUNwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7K0dBMUZRLG1CQUFtQixrQkFHaEIsZ0JBQWdCLGFBQ2hCLGlCQUFpQjttSEFKcEIsbUJBQW1CLGNBRmhCLE1BQU07O1NBRVQsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJUSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3QsIEluamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQge2lzRW1wdHksIHVuc2V0LCBrZXlzfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0lkZW50aXR5fSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2lkZW50aXR5XCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcblxuXG5leHBvcnQgY29uc3QgSURFTlRJVFlfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignSURFTlRJVFlfRVhURU5TSU9OX1NFUlZJQ0UnKTtcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Rm9ybVNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlXG4gICAgKSB7fVxuIFxuICAgIHNhdmUoZm9ybURhdGEpIHtcbiAgICAgICAgY29uc3QgaXNVcGRhdGUgPSAhaXNFbXB0eShmb3JtRGF0YS5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZ2V0SWRlbnRpdHlEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKTtcbiAgICAgICAgY29uc3Qgc3ZjID0gaXNVcGRhdGUgPyB0aGlzLnppdGlTZXJ2aWNlLnBhdGNoLmJpbmQodGhpcy56aXRpU2VydmljZSkgOiB0aGlzLnppdGlTZXJ2aWNlLnBvc3QuYmluZCh0aGlzLnppdGlTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHN2YygnaWRlbnRpdGllcycsIGRhdGEsIGZvcm1EYXRhLmlkKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGBJZGVudGl0eSAke2lzVXBkYXRlID8gJ1VwZGF0ZWQnIDogJ0NyZWF0ZWQnfWAsXG4gICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBJZGVudGl0eTogJHtmb3JtRGF0YS5uYW1lfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHJlc3ApO1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBJZGVudGl0eWAsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB0aHJvdyByZXNwO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldElkZW50aXR5RGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgSWRlbnRpdHkoKTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0ga2V5cyhzYXZlTW9kZWwpO1xuICAgICAgICBtb2RlbFByb3BlcnRpZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoKHByb3ApIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdLmlkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZW5yb2xsbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bnNldChzYXZlTW9kZWwsICdlbnJvbGxtZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYXZlTW9kZWw7XG4gICAgfVxuXG4gICAgdGVzdFNlcnZpY2UoaWRlbnRpdHlJZCwgc2VydmljZUlkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAvaWRlbnRpdGllcy8ke2lkZW50aXR5SWR9L3BvbGljeS1hZHZpY2UvJHtzZXJ2aWNlSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuY2FsbCh1cmwpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgICAgICAgdmFyIGluZm8gPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIGlmICghaW5mbz8uaXNEaWFsQWxsb3dlZCYmIWluZm8/LmlzQmluZEFsbG93ZWQpIGVycm9ycy5wdXNoKFwiTm8gYWNjZXNzIHRvIHNlcnZpY2UuIEFkanVzdCBzZXJ2aWNlIHBvbGljaWVzLlwiKTtcbiAgICAgICAgICAgIGlmIChpbmZvPy5pZGVudGl0eVJvdXRlckNvdW50PDEpIGVycm9ycy5wdXNoKFwiSWRlbnRpdHkgaGFzIG5vIGVkZ2Ugcm91dGVycyBhc3NpZ25lZC4gQWRqdXN0IGVkZ2Ugcm91dGVyIHBvbGljaWVzLlwiKTtcbiAgICAgICAgICAgIGlmIChpbmZvPy5zZXJ2aWNlUm91dGVyQ291bnQ8MSkgZXJyb3JzLnB1c2goXCJTZXJ2aWNlIGhhcyBubyBlZGdlIHJvdXRlcnMgYXNzaWduZWQuIEFkanVzdCBlZGdlIHJvdXRlciBwb2xpY2llcy5cIik7XG4gICAgICAgICAgICBpZiAoaW5mbz8uaWRlbnRpdHlSb3V0ZXJDb3VudD4wJiZpbmZvPy5zZXJ2aWNlUm91dGVyQ291bnQ+MCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmZvPy5jb21tb25Db3VudDwxKSBlcnJvcnMucHVzaChcIklkZW50aXR5IGFuZCBzZXJ2aWNlcyBoYXZlIG5vIGVkZ2Ugcm91dGVycyBpbiBjb21tb24uIEFkanVzdCBlZGdlIHJvdXRlciBwb2xpY2llcyBhbmQvb3Igc2VydmljZSBlZGdlIHJvdXRlciBwb2xpY2llcy5cIik7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5mbz8ub25saW5lQ291bnQ8MSkgZXJyb3JzLnB1c2goXCJDb21tb24gZWRnZSByb3V0ZXJzIGFyZSBhbGwgb2ZmLWxpbmUuIEJyaW5nIHJvdXRlcnMgYmFjayBvbi1saW5lIG9yIGFkanVzdCBlZGdlIHJvdXRlciBwb2xpY2llcyBhbmQvb3Igc2VydmljZSBlZGdlIHJvdXRlciBwb2xpY2llcy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3RhdHVzID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChpbmZvPy5pc0RpYWxBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZm8/LmlzQmluZEFsbG93ZWQpIHN0YXR1cyA9IFwiKERpYWwsQmluZClcIjtcbiAgICAgICAgICAgICAgICBlbHNlIHN0YXR1cyA9IFwiKERpYWwpXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpbmZvPy5pc0JpbmRBbGxvd2VkKSBzdGF0dXMgPSBcIihCaW5kKVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGg+MCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzICs9IFwiPGJyLz5cIitlcnJvcnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHN0YXR1cyArPSBcIjxici8+RXZlcnl0aGluZyBpcyBjb25maWd1cmVkIHByb3Blcmx5XCI7XG4gICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWZyZXNoSWRlbnRpdHkoaWQpIHtcbiAgICAgICAgY29uc3QgdXJsOiBhbnkgPSBgL2lkZW50aXRpZXMvJHtpZH1gXG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmNhbGwodXJsKTtcbiAgICB9XG59XG4iXX0=