tango-app-ui-store-builder 1.0.47 → 1.0.49

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 (54) hide show
  1. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
  2. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
  3. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
  4. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
  5. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
  6. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
  7. package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
  8. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
  10. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
  11. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
  12. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
  13. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
  14. package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
  16. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
  17. package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
  18. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
  19. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
  20. package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
  21. package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
  22. package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
  23. package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
  24. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
  25. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
  26. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
  27. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
  28. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
  29. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
  30. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
  31. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  32. package/esm2022/lib/services/store-builder.service.mjs +4 -1
  33. package/esm2022/lib/tango-store-builder.module.mjs +8 -2
  34. package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
  35. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  36. package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
  37. package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
  38. package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
  39. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
  40. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
  41. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
  42. package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
  43. package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
  44. package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
  45. package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
  46. package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
  47. package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
  48. package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
  49. package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
  50. package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
  51. package/lib/interfaces/fixture-library.interface.d.ts +1 -1
  52. package/lib/services/store-builder.service.d.ts +1 -0
  53. package/lib/tango-store-builder.module.d.ts +26 -24
  54. package/package.json +1 -1
@@ -304,11 +304,11 @@ export class VerificationFeedbackComponent {
304
304
  this.destroy$.complete();
305
305
  }
306
306
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VerificationFeedbackComponent, deps: [{ token: i1.GlobalStateService }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
307
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VerificationFeedbackComponent, selector: "lib-verification-feedback", inputs: { floorData: "floorData", totalFixtures: "totalFixtures", feedbackDetails: "feedbackDetails", cdn: "cdn", showAction: "showAction" }, outputs: { changeFixture: "changeFixture", action: "action" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"verification-feedback\">\r\n\r\n <div *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"feedbackDetails?.taskInfoToggle\">\r\n <div ngbAccordionHeader class=\"accordion-button task-info-header\">\r\n <div ngbAccordionToggle class=\"w-100\">\r\n <h2>Fixture verification assigned</h2>\r\n <p>{{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{feedbackDetails?.fixtureFeedback?.taskData?.createdByName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mma, dd MMM yyyy'}}\r\n </p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4> {{feedbackDetails?.fixtureFeedback?.taskData?.userName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.submitTime_string}}\r\n </p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n\r\n @if (feedbackDetails?.globalComments?.length) {\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of feedbackDetails?.globalComments;let i= index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.createdAt|date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n <h5>{{c?.comment}}</h5>\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <h3 class=\"m-0\">{{planoFixture?.header?.label}}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase}}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{currentFixtureIndex}}/{{totalFixtures.length}}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n\r\n @if( this.aiFixture?.fixtureId){\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n @if (showAction) {\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n @if (!isApproved && showAction) {\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditFeedback()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickKeepPlano()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Keep plano\r\n </button>\r\n }\r\n </div>\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\">Existing template </h4>\r\n <svg [ngbTooltip]=\"planoFixture?.fixtureName\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_496_31664)\">\r\n <path\r\n d=\"M10.0013 13.3337V10.0003M10.0013 6.66699H10.0096M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_496_31664\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'keepPlano' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithPlano' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\"></fixture>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (!isApproved && showAction) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn redo-btn\" (click)=\"onClickRedo()\" [class.disabled]=\"isAIQuickEdit\">\r\n Redo\r\n </button>\r\n\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditAIFeedback()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickAcceptAI()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Accept store response\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n\r\n\r\n <h4>Store response </h4>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'acceptAi' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithAi'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'redo' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n }@else {\r\n <svg *ngIf=\"showAction && !isAIQuickEdit\" class=\"ms-auto cursor-pointer\"\r\n (click)=\"toggleAIQuickEdit()\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9 15.0002H15.75M12.375 2.62517C12.6734 2.3268 13.078 2.15918 13.5 2.15918C13.7089 2.15918 13.9158 2.20033 14.1088 2.28029C14.3019 2.36024 14.4773 2.47743 14.625 2.62517C14.7727 2.77291 14.8899 2.9483 14.9699 3.14132C15.0498 3.33435 15.091 3.54124 15.091 3.75017C15.091 3.9591 15.0498 4.16599 14.9699 4.35902C14.8899 4.55204 14.7727 4.72743 14.625 4.87517L5.25 14.2502L2.25 15.0002L3 12.0002L12.375 2.62517Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n <editable-fixture [fixture]=\"aiFixture\" [editMode]=\"isAIQuickEdit\"\r\n (onCancel)=\"onCancelAIQuickEdit()\" (onDone)=\"onSaveAIQuickEdit($event)\"\r\n (editTab)=\"onEditAIFeedback($event)\"></editable-fixture>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"p-2\" [ngClass]=\"{'col-4':showAction,'col':!showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':showAction && !isApproved ? '50px' : '12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image </h4>\r\n </div>\r\n </div>\r\n @if(cdn && aiFixture?.fixtureImage){\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview(cdn + aiFixture?.fixtureImage)\">\r\n <img [src]=\"cdn + aiFixture?.fixtureImage\" alt=\"Store response image\">\r\n </div>\r\n }@else {\r\n <div class=\"text-center my-7\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-comparison\" *ngIf=\"feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig.length\">\r\n <h5 class=\"mb-1\">Visual Merchandise Images from AI output:</h5>\r\n\r\n <div class=\"row g-0\">\r\n\r\n @for (vm of feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig; track $index) {\r\n <div class=\"p-2\" [ngClass]=\"{'col-6':showAction, 'col-12':!showAction}\">\r\n <div class=\"vm-container\" (click)=\"onClickImagePreview(cdn+vm?.vmImage)\">\r\n <div class=\"vm-img\">\r\n <img [src]=\"cdn+vm?.vmImage\" alt=\"VM Image\">\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 vm-details \">\r\n <h5>{{vm?.vmType}}</h5>\r\n <h5>{{vm?.vmName}}</h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\" />\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No AI response found for this fixture.</div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if (feedbackDetails?.fixtureFeedback?.answers?.[0]?.comments.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\"\r\n *ngFor=\"let c of feedbackDetails?.fixtureFeedback?.answers[0]?.comments;let i= index\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n\r\n @if(c?.responsetype === 'comment'){\r\n <h5>{{c?.comment}}</h5>\r\n }@else if(c?.responsetype === 'agree'){\r\n\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithPlano'\">\r\n Marked as \"Keep Plano with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'acceptAi'\">\r\n Marked as \"Accept AI\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithAi'\">\r\n Marked as \"Accept AI with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }@else if(c?.responsetype === 'disagree'){\r\n <h5>\r\n Marked as \"Redo\"\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback #vm-comparison .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:zoom-out}#verification-feedback #vm-comparison .full-img{max-width:98vw;max-height:98vh;border-radius:10px;object-fit:contain}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i2.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i2.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i2.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i2.NgbAccordionToggle, selector: "[ngbAccordionToggle]" }, { kind: "directive", type: i2.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i2.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i4.FixtureComponent, selector: "fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs"] }, { kind: "component", type: i5.EditableFixtureComponent, selector: "editable-fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs", "editMode"], outputs: ["onCancel", "onDone", "editTab"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
307
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VerificationFeedbackComponent, selector: "lib-verification-feedback", inputs: { floorData: "floorData", totalFixtures: "totalFixtures", feedbackDetails: "feedbackDetails", cdn: "cdn", showAction: "showAction" }, outputs: { changeFixture: "changeFixture", action: "action" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"verification-feedback\">\r\n\r\n <div *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"feedbackDetails?.taskInfoToggle\">\r\n <div ngbAccordionHeader class=\"accordion-button task-info-header\">\r\n <div ngbAccordionToggle class=\"w-100\">\r\n <h2>Fixture verification assigned</h2>\r\n <p>{{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{feedbackDetails?.fixtureFeedback?.taskData?.createdByName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mma, dd MMM yyyy'}}\r\n </p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4> {{feedbackDetails?.fixtureFeedback?.taskData?.userName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.submitTime_string}}\r\n </p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n\r\n @if (feedbackDetails?.globalComments?.length) {\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of feedbackDetails?.globalComments;let i= index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.createdAt|date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n <h5>{{c?.comment}}</h5>\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <h3 class=\"m-0\">{{planoFixture?.header?.label}}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase}}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture.fixtureCapacity ?? '0' }}\r\n </span>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n Visual Merch Capacity: {{ planoFixture.vmConfig.length ?? '0' }}\r\n </span>\r\n\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{currentFixtureIndex}}/{{totalFixtures.length}}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n\r\n @if( this.aiFixture?.fixtureId){\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n @if (showAction) {\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n @if (!isApproved && showAction) {\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditFeedback()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickKeepPlano()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Keep plano\r\n </button>\r\n }\r\n </div>\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\">Existing template </h4>\r\n <svg [ngbTooltip]=\"planoFixture?.fixtureName\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_496_31664)\">\r\n <path\r\n d=\"M10.0013 13.3337V10.0003M10.0013 6.66699H10.0096M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_496_31664\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'keepPlano' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithPlano' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\"></fixture>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (!isApproved && showAction) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn redo-btn\" (click)=\"onClickRedo()\" [class.disabled]=\"isAIQuickEdit\">\r\n Redo\r\n </button>\r\n\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditAIFeedback()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickAcceptAI()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Accept store response\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n\r\n\r\n <h4>Store response </h4>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'acceptAi' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithAi'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'redo' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n }@else {\r\n <svg *ngIf=\"showAction && !isAIQuickEdit\" class=\"ms-auto cursor-pointer\"\r\n (click)=\"toggleAIQuickEdit()\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9 15.0002H15.75M12.375 2.62517C12.6734 2.3268 13.078 2.15918 13.5 2.15918C13.7089 2.15918 13.9158 2.20033 14.1088 2.28029C14.3019 2.36024 14.4773 2.47743 14.625 2.62517C14.7727 2.77291 14.8899 2.9483 14.9699 3.14132C15.0498 3.33435 15.091 3.54124 15.091 3.75017C15.091 3.9591 15.0498 4.16599 14.9699 4.35902C14.8899 4.55204 14.7727 4.72743 14.625 4.87517L5.25 14.2502L2.25 15.0002L3 12.0002L12.375 2.62517Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n <editable-fixture [fixture]=\"aiFixture\" [editMode]=\"isAIQuickEdit\"\r\n (onCancel)=\"onCancelAIQuickEdit()\" (onDone)=\"onSaveAIQuickEdit($event)\"\r\n (editTab)=\"onEditAIFeedback($event)\"></editable-fixture>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"p-2\" [ngClass]=\"{'col-4':showAction,'col':!showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':showAction && !isApproved ? '50px' : '12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image </h4>\r\n </div>\r\n </div>\r\n @if(cdn && aiFixture?.fixtureImage){\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview(cdn + aiFixture?.fixtureImage)\">\r\n <img [src]=\"cdn + aiFixture?.fixtureImage\" alt=\"Store response image\">\r\n </div>\r\n }@else {\r\n <div class=\"text-center my-7\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-comparison\" *ngIf=\"feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig.length\">\r\n <h5 class=\"mb-1\">Visual Merchandise Images from AI output:</h5>\r\n\r\n <div class=\"row g-0\">\r\n\r\n @for (vm of feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig; track $index) {\r\n <div class=\"p-2\" [ngClass]=\"{'col-6':showAction, 'col-12':!showAction}\">\r\n <div class=\"vm-container\" (click)=\"onClickImagePreview(cdn+vm?.vmImage)\">\r\n <div class=\"vm-img\">\r\n <img [src]=\"cdn+vm?.vmImage\" alt=\"VM Image\">\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 vm-details \">\r\n <h5>{{vm?.vmType}}</h5>\r\n <h5>{{vm?.vmName}}</h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\" />\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No AI response found for this fixture.</div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if (feedbackDetails?.fixtureFeedback?.answers?.[0]?.comments.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\"\r\n *ngFor=\"let c of feedbackDetails?.fixtureFeedback?.answers[0]?.comments;let i= index\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n\r\n @if(c?.responsetype === 'comment'){\r\n <h5>{{c?.comment}}</h5>\r\n }@else if(c?.responsetype === 'agree'){\r\n\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithPlano'\">\r\n Marked as \"Keep Plano with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'acceptAi'\">\r\n Marked as \"Accept AI\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithAi'\">\r\n Marked as \"Accept AI with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }@else if(c?.responsetype === 'disagree'){\r\n <h5>\r\n Marked as \"Redo\"\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback #vm-comparison .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:zoom-out}#verification-feedback #vm-comparison .full-img{max-width:98vw;max-height:98vh;border-radius:10px;object-fit:contain}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i2.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i2.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i2.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i2.NgbAccordionToggle, selector: "[ngbAccordionToggle]" }, { kind: "directive", type: i2.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i2.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i4.FixtureComponent, selector: "fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs"] }, { kind: "component", type: i5.EditableFixtureComponent, selector: "editable-fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs", "editMode"], outputs: ["onCancel", "onDone", "editTab"] }, { kind: "pipe", type: i3.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
308
308
  }
309
309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VerificationFeedbackComponent, decorators: [{
310
310
  type: Component,
311
- args: [{ selector: "lib-verification-feedback", template: "<section id=\"verification-feedback\">\r\n\r\n <div *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"feedbackDetails?.taskInfoToggle\">\r\n <div ngbAccordionHeader class=\"accordion-button task-info-header\">\r\n <div ngbAccordionToggle class=\"w-100\">\r\n <h2>Fixture verification assigned</h2>\r\n <p>{{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{feedbackDetails?.fixtureFeedback?.taskData?.createdByName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mma, dd MMM yyyy'}}\r\n </p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4> {{feedbackDetails?.fixtureFeedback?.taskData?.userName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.submitTime_string}}\r\n </p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n\r\n @if (feedbackDetails?.globalComments?.length) {\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of feedbackDetails?.globalComments;let i= index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.createdAt|date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n <h5>{{c?.comment}}</h5>\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <h3 class=\"m-0\">{{planoFixture?.header?.label}}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase}}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{currentFixtureIndex}}/{{totalFixtures.length}}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n\r\n @if( this.aiFixture?.fixtureId){\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n @if (showAction) {\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n @if (!isApproved && showAction) {\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditFeedback()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickKeepPlano()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Keep plano\r\n </button>\r\n }\r\n </div>\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\">Existing template </h4>\r\n <svg [ngbTooltip]=\"planoFixture?.fixtureName\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_496_31664)\">\r\n <path\r\n d=\"M10.0013 13.3337V10.0003M10.0013 6.66699H10.0096M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_496_31664\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'keepPlano' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithPlano' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\"></fixture>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (!isApproved && showAction) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn redo-btn\" (click)=\"onClickRedo()\" [class.disabled]=\"isAIQuickEdit\">\r\n Redo\r\n </button>\r\n\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditAIFeedback()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickAcceptAI()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Accept store response\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n\r\n\r\n <h4>Store response </h4>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'acceptAi' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithAi'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'redo' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n }@else {\r\n <svg *ngIf=\"showAction && !isAIQuickEdit\" class=\"ms-auto cursor-pointer\"\r\n (click)=\"toggleAIQuickEdit()\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9 15.0002H15.75M12.375 2.62517C12.6734 2.3268 13.078 2.15918 13.5 2.15918C13.7089 2.15918 13.9158 2.20033 14.1088 2.28029C14.3019 2.36024 14.4773 2.47743 14.625 2.62517C14.7727 2.77291 14.8899 2.9483 14.9699 3.14132C15.0498 3.33435 15.091 3.54124 15.091 3.75017C15.091 3.9591 15.0498 4.16599 14.9699 4.35902C14.8899 4.55204 14.7727 4.72743 14.625 4.87517L5.25 14.2502L2.25 15.0002L3 12.0002L12.375 2.62517Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n <editable-fixture [fixture]=\"aiFixture\" [editMode]=\"isAIQuickEdit\"\r\n (onCancel)=\"onCancelAIQuickEdit()\" (onDone)=\"onSaveAIQuickEdit($event)\"\r\n (editTab)=\"onEditAIFeedback($event)\"></editable-fixture>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"p-2\" [ngClass]=\"{'col-4':showAction,'col':!showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':showAction && !isApproved ? '50px' : '12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image </h4>\r\n </div>\r\n </div>\r\n @if(cdn && aiFixture?.fixtureImage){\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview(cdn + aiFixture?.fixtureImage)\">\r\n <img [src]=\"cdn + aiFixture?.fixtureImage\" alt=\"Store response image\">\r\n </div>\r\n }@else {\r\n <div class=\"text-center my-7\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-comparison\" *ngIf=\"feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig.length\">\r\n <h5 class=\"mb-1\">Visual Merchandise Images from AI output:</h5>\r\n\r\n <div class=\"row g-0\">\r\n\r\n @for (vm of feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig; track $index) {\r\n <div class=\"p-2\" [ngClass]=\"{'col-6':showAction, 'col-12':!showAction}\">\r\n <div class=\"vm-container\" (click)=\"onClickImagePreview(cdn+vm?.vmImage)\">\r\n <div class=\"vm-img\">\r\n <img [src]=\"cdn+vm?.vmImage\" alt=\"VM Image\">\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 vm-details \">\r\n <h5>{{vm?.vmType}}</h5>\r\n <h5>{{vm?.vmName}}</h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\" />\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No AI response found for this fixture.</div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if (feedbackDetails?.fixtureFeedback?.answers?.[0]?.comments.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\"\r\n *ngFor=\"let c of feedbackDetails?.fixtureFeedback?.answers[0]?.comments;let i= index\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n\r\n @if(c?.responsetype === 'comment'){\r\n <h5>{{c?.comment}}</h5>\r\n }@else if(c?.responsetype === 'agree'){\r\n\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithPlano'\">\r\n Marked as \"Keep Plano with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'acceptAi'\">\r\n Marked as \"Accept AI\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithAi'\">\r\n Marked as \"Accept AI with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }@else if(c?.responsetype === 'disagree'){\r\n <h5>\r\n Marked as \"Redo\"\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback #vm-comparison .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:zoom-out}#verification-feedback #vm-comparison .full-img{max-width:98vw;max-height:98vh;border-radius:10px;object-fit:contain}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}\n"] }]
311
+ args: [{ selector: "lib-verification-feedback", template: "<section id=\"verification-feedback\">\r\n\r\n <div *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\" [collapsed]=\"feedbackDetails?.taskInfoToggle\">\r\n <div ngbAccordionHeader class=\"accordion-button task-info-header\">\r\n <div ngbAccordionToggle class=\"w-100\">\r\n <h2>Fixture verification assigned</h2>\r\n <p>{{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{feedbackDetails?.fixtureFeedback?.taskData?.createdByName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.createdAt | date: 'hh:mma, dd MMM yyyy'}}\r\n </p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4> {{feedbackDetails?.fixtureFeedback?.taskData?.userName}}</h4>\r\n <p>\r\n {{feedbackDetails?.fixtureFeedback?.taskData?.submitTime_string}}\r\n </p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n\r\n @if (feedbackDetails?.globalComments?.length) {\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of feedbackDetails?.globalComments;let i= index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.createdAt|date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n <h5>{{c?.comment}}</h5>\r\n </div>\r\n </div>\r\n }\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"feedbackDetails?.fixtureFeedback?.taskData\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n\r\n <h3 class=\"m-0\">{{planoFixture?.header?.label}}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase}}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture.fixtureCapacity ?? '0' }}\r\n </span>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n Visual Merch Capacity: {{ planoFixture.vmConfig.length ?? '0' }}\r\n </span>\r\n\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{currentFixtureIndex}}/{{totalFixtures.length}}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </div>\r\n\r\n @if( this.aiFixture?.fixtureId){\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n @if (showAction) {\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n @if (!isApproved && showAction) {\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditFeedback()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickKeepPlano()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Keep plano\r\n </button>\r\n }\r\n </div>\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <h4 class=\"m-0\">Existing template </h4>\r\n <svg [ngbTooltip]=\"planoFixture?.fixtureName\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_496_31664)\">\r\n <path\r\n d=\"M10.0013 13.3337V10.0003M10.0013 6.66699H10.0096M18.3346 10.0003C18.3346 14.6027 14.6037 18.3337 10.0013 18.3337C5.39893 18.3337 1.66797 14.6027 1.66797 10.0003C1.66797 5.39795 5.39893 1.66699 10.0013 1.66699C14.6037 1.66699 18.3346 5.39795 18.3346 10.0003Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_496_31664\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </div>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'keepPlano' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithPlano' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n }\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\"></fixture>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (!isApproved && showAction) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn redo-btn\" (click)=\"onClickRedo()\" [class.disabled]=\"isAIQuickEdit\">\r\n Redo\r\n </button>\r\n\r\n <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onEditAIFeedback()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g clip-path=\"url(#clip0_228_12536)\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_228_12536\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn primary-btn\" type=\"button\" (click)=\"onClickAcceptAI()\"\r\n [disabled]=\"isAIQuickEdit\">\r\n Accept store response\r\n </button>\r\n </div>\r\n }\r\n\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n\r\n\r\n <h4>Store response </h4>\r\n\r\n @if (isApproved) {\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'acceptAi' || feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'editWithAi'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"feedbackDetails?.fixtureFeedback?.answers[0]?.userAction === 'redo' \"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n }@else {\r\n <svg *ngIf=\"showAction && !isAIQuickEdit\" class=\"ms-auto cursor-pointer\"\r\n (click)=\"toggleAIQuickEdit()\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9 15.0002H15.75M12.375 2.62517C12.6734 2.3268 13.078 2.15918 13.5 2.15918C13.7089 2.15918 13.9158 2.20033 14.1088 2.28029C14.3019 2.36024 14.4773 2.47743 14.625 2.62517C14.7727 2.77291 14.8899 2.9483 14.9699 3.14132C15.0498 3.33435 15.091 3.54124 15.091 3.75017C15.091 3.9591 15.0498 4.16599 14.9699 4.35902C14.8899 4.55204 14.7727 4.72743 14.625 4.87517L5.25 14.2502L2.25 15.0002L3 12.0002L12.375 2.62517Z\"\r\n stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n <editable-fixture [fixture]=\"aiFixture\" [editMode]=\"isAIQuickEdit\"\r\n (onCancel)=\"onCancelAIQuickEdit()\" (onDone)=\"onSaveAIQuickEdit($event)\"\r\n (editTab)=\"onEditAIFeedback($event)\"></editable-fixture>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"p-2\" [ngClass]=\"{'col-4':showAction,'col':!showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':showAction && !isApproved ? '50px' : '12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image </h4>\r\n </div>\r\n </div>\r\n @if(cdn && aiFixture?.fixtureImage){\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview(cdn + aiFixture?.fixtureImage)\">\r\n <img [src]=\"cdn + aiFixture?.fixtureImage\" alt=\"Store response image\">\r\n </div>\r\n }@else {\r\n <div class=\"text-center my-7\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"vm-comparison\" *ngIf=\"feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig.length\">\r\n <h5 class=\"mb-1\">Visual Merchandise Images from AI output:</h5>\r\n\r\n <div class=\"row g-0\">\r\n\r\n @for (vm of feedbackDetails?.fixtureFeedback?.fixtureAIData?.vmConfig; track $index) {\r\n <div class=\"p-2\" [ngClass]=\"{'col-6':showAction, 'col-12':!showAction}\">\r\n <div class=\"vm-container\" (click)=\"onClickImagePreview(cdn+vm?.vmImage)\">\r\n <div class=\"vm-img\">\r\n <img [src]=\"cdn+vm?.vmImage\" alt=\"VM Image\">\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 vm-details \">\r\n <h5>{{vm?.vmType}}</h5>\r\n <h5>{{vm?.vmName}}</h5>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\" />\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No AI response found for this fixture.</div>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if (feedbackDetails?.fixtureFeedback?.answers?.[0]?.comments.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\"\r\n *ngFor=\"let c of feedbackDetails?.fixtureFeedback?.answers[0]?.comments;let i= index\">\r\n <!-- User avatar -->\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{c?.userName}}</h4>\r\n <p>{{c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy'}}</p>\r\n </div>\r\n\r\n @if(c?.responsetype === 'comment'){\r\n <h5>{{c?.comment}}</h5>\r\n }@else if(c?.responsetype === 'agree'){\r\n\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithPlano'\">\r\n Marked as \"Keep Plano with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'acceptAi'\">\r\n Marked as \"Accept AI\".\r\n </h5>\r\n <h5 *ngIf=\"feedbackDetails?.fixtureFeedback?.answers?.[0]?.userAction === 'editWithAi'\">\r\n Marked as \"Accept AI with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }@else if(c?.responsetype === 'disagree'){\r\n <h5>\r\n Marked as \"Redo\"\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{c.comment}}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback #vm-comparison .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:zoom-out}#verification-feedback #vm-comparison .full-img{max-width:98vw;max-height:98vh;border-radius:10px;object-fit:contain}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}\n"] }]
312
312
  }], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i2.NgbModal }], propDecorators: { floorData: [{
313
313
  type: Input
314
314
  }], totalFixtures: [{
@@ -324,4 +324,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
324
324
  }], action: [{
325
325
  type: Output
326
326
  }] } });
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7QUFTcEcsTUFBTSxPQUFPLDZCQUE2QjtJQXVDcEI7SUFBZ0M7SUFwQzNDLFNBQVMsQ0FBTTtJQUNmLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFDMUIsZUFBZSxDQUFNO0lBRXJCLEdBQUcsQ0FBUztJQUNaLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDcEMseUNBQXlDO0lBRS9CLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFHdEMsQ0FBQztJQUVLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTNDLG9CQUFvQixDQUdsQjtJQUVGLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFOUIsbUJBQW1CLENBQVM7SUFFNUIsWUFBWSxDQUFNO0lBQ2xCLFNBQVMsQ0FBTTtJQUVmLHVCQUF1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O1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0E3V1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsbVNDckIxQyxnaGdDQXlaVTs7NEZEcFlHLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSwyQkFBMkI7OEdBTzVCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL2FjdGlvbi1jb25maXJtLXBvcHVwL2FjdGlvbi1jb25maXJtLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBWbUxpYnJhcnlMaXN0IH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXZlcmlmaWNhdGlvbi1mZWVkYmFja1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi92ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFZlcmlmaWNhdGlvbkZlZWRiYWNrQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XHJcbntcclxuICBASW5wdXQoKSBmbG9vckRhdGE6IGFueTtcclxuICBASW5wdXQoKSB0b3RhbEZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZlZWRiYWNrRGV0YWlsczogYW55O1xyXG5cclxuICBASW5wdXQoKSBjZG46IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93QWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBASW5wdXQoKSB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlRml4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEZpeHR1cmU6IHN0cmluZztcclxuICAgIGFjdGlvbjogXCJuZXh0XCIgfCBcInByZXZpb3VzXCI7XHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBzZWxlY3RlZEZlZWRiYWNrRGF0YToge1xyXG4gICAgY3VycmVudEZpeHR1cmU6IGFueTtcclxuICAgIGFpRmVlZGJhY2tGaXh0dXJlOiBhbnk7XHJcbiAgfTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGN1cnJlbnRGaXh0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgcGxhbm9GaXh0dXJlOiBhbnk7XHJcbiAgYWlGaXh0dXJlOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGltZ0NETjogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJmZWVkYmFja0RldGFpbHNcIl0/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm9uQ2FuY2VsQUlRdWlja0VkaXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50Rml4dHVyZUluZGV4ID1cclxuICAgICAgICB0aGlzLnRvdGFsRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVJZFxyXG4gICAgICAgICkgKyAxO1xyXG5cclxuICAgICAgdGhpcy5wbGFub0ZpeHR1cmUgPSBzdHJ1Y3R1cmVkQ2xvbmUoXHJcbiAgICAgICAgdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uRml4dHVyZURhdGFcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWlGaXh0dXJlID0gdGhpcy5wcm9jZXNzQUlGaXh0dXJlRGF0YSgpO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVZNbGlzdFdpdGhBaURhdGEoKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0FwcHJvdmVkKSB7XHJcbiAgICAgICAgdGhpcy5jb21wYXJlRml4dHVyZSh0aGlzLmFpRml4dHVyZSwgdGhpcy5wbGFub0ZpeHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzQUlGaXh0dXJlRGF0YSgpIHtcclxuICAgIGxldCBhaURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoe1xyXG4gICAgICAuLi50aGlzLnBsYW5vRml4dHVyZSxcclxuICAgICAgLi4udGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUFJRGF0YSxcclxuICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5wbGFub0ZpeHR1cmU/LmhlYWRlcixcclxuICAgICAgICAuLi50aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlQUlEYXRhPy5oZWFkZXIsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBhaURhdGE/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChzOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHMuc2hlbGZUeXBlID09IFwidHJheVwiICYmXHJcbiAgICAgICAgIXM/Lm9yaWdpbmFsUHJvZHVjdENvdW50ICYmXHJcbiAgICAgICAgIWFpRGF0YT8udXBkYXRlZEJ5XHJcbiAgICAgICkge1xyXG4gICAgICAgIHMub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzLnByb2R1Y3RQZXJTaGVsZjtcclxuICAgICAgICBzLnByb2R1Y3RQZXJTaGVsZiA9IE1hdGguZmxvb3Iocy5wcm9kdWN0UGVyU2hlbGYgLyBzLnRyYXlSb3dzKTtcclxuXHJcbiAgICAgICAgLy8gcy50cmF5Um93cyA9IHMudHJheVJvd3MgPT0gMCA/IDEgOiBzLnRyYXlSb3dzO1xyXG4gICAgICAgIC8vIHMucHJvZHVjdFBlclNoZWxmIDw9IDIxID8gMyA6IDc7XHJcblxyXG4gICAgICAgIC8vIHMub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzLnByb2R1Y3RQZXJTaGVsZjtcclxuICAgICAgICAvLyBzLnByb2R1Y3RQZXJTaGVsZiA9IE1hdGguZmxvb3IoXHJcbiAgICAgICAgLy8gICBzLnByb2R1Y3RQZXJTaGVsZiAvIChzLnByb2R1Y3RQZXJTaGVsZiA8PSAyMSA/IDMgOiA3KVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzaGVsZlpvbmUgPSB0aGlzLnBsYW5vRml4dHVyZT8uc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAoc2hlbHZlOiBhbnkpID0+IHMuc2hlbGZOdW1iZXIgPT0gc2hlbHZlLnNoZWxmTnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoc2hlbGZab25lKSB7XHJcbiAgICAgICAgYWlEYXRhLnNoZWxmQ29uZmlnW2luZGV4XSA9IHsgLi4uc2hlbGZab25lLCAuLi5zIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcy56b25lID0gXCJCb3R0b21cIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYWlEYXRhO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZUZpeHR1cmUoYWlGaXh0dXJlOiBhbnksIGN1cnJlbnRGaXh0dXJlOiBhbnkpIHtcclxuICAgIGlmICghYWlGaXh0dXJlIHx8ICFjdXJyZW50Rml4dHVyZSkgcmV0dXJuO1xyXG4gICAgLyogPT09PT09PT09PT09PT09PT0gSEVBREVSID09PT09PT09PT09PT09PT09ICovXHJcbiAgICBjb25zdCBhaUhlYWRlciA9IChhaUZpeHR1cmUuaGVhZGVyPy5sYWJlbCA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGN1ckhlYWRlciA9IChjdXJyZW50Rml4dHVyZS5oZWFkZXI/LmxhYmVsID8/IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGFpRml4dHVyZS5oZWFkZXIuaXNEaWZmZXJlbnQgPSBhaUhlYWRlciAhPT0gY3VySGVhZGVyO1xyXG5cclxuICAgIC8qID09PT09PT09PT09PT09PT09IFNIRUxWRVMgPT09PT09PT09PT09PT09PT0gKi9cclxuICAgIGNvbnN0IGN1cnJlbnRTaGVsZk1hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KFxyXG4gICAgICAoY3VycmVudEZpeHR1cmUuc2hlbGZDb25maWcgPz8gW10pLm1hcCgoczogYW55KSA9PiBbcy5zaGVsZk51bWJlciwgc10pXHJcbiAgICApO1xyXG5cclxuICAgIChhaUZpeHR1cmUuc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKGFpU2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICBhaVNoZWxmLmlzRGlmZmVyZW50ID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBjdXJTaGVsZiA9IGN1cnJlbnRTaGVsZk1hcC5nZXQoYWlTaGVsZi5zaGVsZk51bWJlcik7XHJcbiAgICAgIGlmICghY3VyU2hlbGYpIHtcclxuICAgICAgICBhaVNoZWxmLmlzRGlmZmVyZW50ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBhaVNoZWxmLnNoZWxmVHlwZSAhPT0gY3VyU2hlbGYuc2hlbGZUeXBlIHx8XHJcbiAgICAgICAgYWlTaGVsZi5wcm9kdWN0UGVyU2hlbGYgIT09IGN1clNoZWxmLnByb2R1Y3RQZXJTaGVsZiB8fFxyXG4gICAgICAgIGFpU2hlbGYudHJheVJvd3MgIT09IGN1clNoZWxmLnRyYXlSb3dzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGFpU2hlbGYuaXNEaWZmZXJlbnQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiA9PT09PT09PT09PT09PT09PSBWTXMgPT09PT09PT09PT09PT09PT0gKi9cclxuICAgIGNvbnN0IHZtS2V5ID0gKHY6IGFueSkgPT5cclxuICAgICAgYCR7di52bVR5cGV9fCR7di52bU5hbWV9fCR7di5zdGFydFlQb3NpdGlvbn18JHt2LmVuZFlQb3NpdGlvbn1gXHJcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRWTVNldCA9IG5ldyBTZXQoKGN1cnJlbnRGaXh0dXJlLnZtQ29uZmlnID8/IFtdKS5tYXAodm1LZXkpKTtcclxuXHJcbiAgICAoYWlGaXh0dXJlLnZtQ29uZmlnID8/IFtdKS5mb3JFYWNoKChhaVZNOiBhbnkpID0+IHtcclxuICAgICAgYWlWTS5pc0RpZmZlcmVudCA9ICFjdXJyZW50Vk1TZXQuaGFzKHZtS2V5KGFpVk0pKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlVk1saXN0V2l0aEFpRGF0YSgpIHtcclxuICAvLyAgIHRoaXMuYWlGaXh0dXJlPy52bUNvbmZpZz8uZm9yRWFjaCgoYWlWbTogYW55KSA9PiB7XHJcbiAgLy8gICAgIC8vIGNvbnNvbGUubG9nKFwiQEAgfiBhaVZtOlwiLCBhaVZtKTtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHZtSW5MaXN0ID0gdGhpcy52bUxpc3QuZmluZChcclxuICAvLyAgICAgICAodm0pID0+IHZtLm5hbWUgPT09IGFpVm0/LnZtTmFtZSAmJiB2bS50eXBlID09PSBhaVZtPy52bVR5cGVcclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIGlmICh2bUluTGlzdCkge1xyXG4gIC8vICAgICAgIC8vIHZtSW5MaXN0LmlkID0gYWlWbS52bU5hbWU7XHJcbiAgLy8gICAgICAgaWYgKGFpVm0/LnZtSW1hZ2UpIHtcclxuICAvLyAgICAgICAgIHZtSW5MaXN0LmltZ1VybCA9IGAke3RoaXMuaW1nQ0ROfSR7YWlWbS52bUltYWdlfWA7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMudm1MaXN0LnB1c2goe1xyXG4gIC8vICAgICAgICAgaWQ6IGFpVm0udm1OYW1lLFxyXG4gIC8vICAgICAgICAgbmFtZTogYWlWbS52bU5hbWUsXHJcbiAgLy8gICAgICAgICBkaXNwbGF5TmFtZTogYWlWbS52bU5hbWUgKyAoYWlWbT8udm1UeXBlID8gYCgke2FpVm0udm1UeXBlfSlgIDogXCJcIiksXHJcbiAgLy8gICAgICAgICB3aWR0aDogMTAwLFxyXG4gIC8vICAgICAgICAgaGVpZ2h0OiAxMDAsXHJcbiAgLy8gICAgICAgICB0eXBlOiBhaVZtLnZtVHlwZSxcclxuICAvLyAgICAgICAgIC4uLihhaVZtLnZtSW1hZ2UgPyB7IGltZ1VybDogYCR7dGhpcy5pbWdDRE59JHthaVZtLnZtSW1hZ2V9YCB9IDoge30pLFxyXG4gIC8vICAgICAgIH0gYXMgYW55KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgaXNBcHByb3ZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hcHByb3ZhbFN0YXR1cyA9PT0gXCJhcHByb3ZlZFwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VGaXh0dXJlKGNoYW5nZTogXCJuZXh0XCIgfCBcInByZXZpb3VzXCIpIHtcclxuICAgIHRoaXMuY2hhbmdlRml4dHVyZS5lbWl0KHtcclxuICAgICAgY3VycmVudEZpeHR1cmU6IHRoaXMuZmVlZGJhY2tEZXRhaWxzLmZpeHR1cmVGZWVkYmFjay5maXh0dXJlSWQsXHJcbiAgICAgIGFjdGlvbjogY2hhbmdlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2FuY2VsQUlRdWlja0VkaXQoKTtcclxuICAgIC8vIHRoaXMub25DYW5jZWxQbGFub1F1aWNrRWRpdCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja0tlZXBQbGFubygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImtlZXBQbGFub1wiKTtcclxuICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJrZWVwUGxhbm9cIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICAgIHJlbWFya3M6IHJlc3VsdD8ucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gb25DbGlja0tlZXBQbGFubyBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBY2NlcHRBSSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdEFJXCIpO1xyXG4gICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09IFwibm90T2tcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgYWN0aW9uOiBcImFjY2VwdEFpXCIsXHJcbiAgICAgICAgdHlwZTogXCJhZ3JlZVwiLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhOiB0aGlzLmFpRml4dHVyZSxcclxuICAgICAgICBmZWVkYmFjazogdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQ/LnJlbWFyayxcclxuICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uQ2xpY2tBY2NlcHRBSSBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tSZWRvKCkge1xyXG4gICAgaWYgKHRoaXMuaXNBSVF1aWNrRWRpdCkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcInJlZG9cIik7XHJcbiAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gXCJub3RPa1wiKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgICBhY3Rpb246IFwicmVkb1wiLFxyXG4gICAgICAgIHR5cGU6IFwiZGlzYWdyZWVcIixcclxuICAgICAgICBmaXh0dXJlRGF0YTogbnVsbCxcclxuICAgICAgICBmZWVkYmFjazogdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcms6IHJlc3VsdCxcclxuICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uQ2xpY2tSZWRvIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRBSUZlZWRiYWNrKGRhdGFUb0VkaXQ/OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICBhY3Rpb246IFwiZWRpdFdpdGhBaVwiLFxyXG4gICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgIGZpeHR1cmVEYXRhOiBkYXRhVG9FZGl0Py5maXh0dXJlRGF0YSA/PyB0aGlzLmFpRml4dHVyZSxcclxuICAgICAgZmVlZGJhY2s6IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2ssXHJcbiAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICB0YWI6IGRhdGFUb0VkaXQ/LnRhYixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0RmVlZGJhY2soKSB7XHJcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgYWN0aW9uOiBcImVkaXRXaXRoUGxhbm9cIixcclxuICAgICAgdHlwZTogXCJhZ3JlZVwiLFxyXG4gICAgICBmaXh0dXJlRGF0YTogdGhpcy5wbGFub0ZpeHR1cmUsXHJcbiAgICAgIGZlZWRiYWNrOiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQUlRdWlja0VkaXQoKSB7XHJcbiAgICB0aGlzLmlzQUlRdWlja0VkaXQgPSAhdGhpcy5pc0FJUXVpY2tFZGl0O1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWxBSVF1aWNrRWRpdCgpIHtcclxuICAgIHRoaXMuaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TYXZlQUlRdWlja0VkaXQobmV3QWlEYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdEFJXCIpO1xyXG4gICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09IFwibm90T2tcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5haUZpeHR1cmUgPSBzdHJ1Y3R1cmVkQ2xvbmUobmV3QWlEYXRhKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJhY2NlcHRBaVwiLFxyXG4gICAgICAgIHR5cGU6IFwiYWdyZWVcIixcclxuICAgICAgICBmaXh0dXJlRGF0YTogdGhpcy5haUZpeHR1cmUsXHJcbiAgICAgICAgZmVlZGJhY2s6IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2ssXHJcbiAgICAgICAgcmVtYXJrczogcmVzdWx0Py5yZW1hcmssXHJcbiAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uU2F2ZUFJUXVpY2tFZGl0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtQWN0aW9uKFxyXG4gICAgdHlwZTogXCJyZWRvXCIgfCBcImFjY2VwdEFJXCIgfCBcImtlZXBQbGFub1wiXHJcbiAgKTogUHJvbWlzZTx7IGFjdGlvbjogc3RyaW5nOyByZW1hcms6IHN0cmluZyB8IG51bGwgfSB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPHtcclxuICAgICAgICBhY3Rpb246IHN0cmluZztcclxuICAgICAgICByZW1hcms6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIH0+KChyZXN1bHQpID0+IHJlc3VsdCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tJbWFnZVByZXZpZXcoaW1nVXJsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUZvclByZXZpZXcgPSBpbWdVcmw7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltYWdlUHJldmlldygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUZvclByZXZpZXcgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaXh0dXJlUXVpY2tEZXRhaWwge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBlZGl0YWJsZTogYm9vbGVhbjtcclxuICBpc0RpZmZlcmVudD86IGJvb2xlYW47XHJcblxyXG4gIG1ldGE/OiB7XHJcbiAgICB0eXBlOiBcImZpeHR1cmVcIiB8IFwic2hlbGZcIiB8IFwidHJheVwiO1xyXG4gICAgc2hlbGZOdW1iZXI/OiBudW1iZXI7XHJcbiAgfTtcclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cInZlcmlmaWNhdGlvbi1mZWVkYmFja1wiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGFcIiBpZD1cInRhc2staW5mb1wiIG5nYkFjY29yZGlvbiAjYWNjb3JkaW9uPVwibmdiQWNjb3JkaW9uXCI+XHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtPVwiZGV0YWlsc1wiIFtjb2xsYXBzZWRdPVwiZmVlZGJhY2tEZXRhaWxzPy50YXNrSW5mb1RvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1idXR0b24gdGFzay1pbmZvLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Ub2dnbGUgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMj5GaXh0dXJlIHZlcmlmaWNhdGlvbiBhc3NpZ25lZDwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3tmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGE/LmNyZWF0ZWRBdCB8IGRhdGU6ICdoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjIuNjY3MyAyMy41VjIxLjgzMzNDMjIuNjY3MyAyMC45NDkzIDIyLjMxNjEgMjAuMTAxNCAyMS42OTEgMTkuNDc2M0MyMS4wNjU5IDE4Ljg1MTIgMjAuMjE4IDE4LjUgMTkuMzM0IDE4LjVIMTIuNjY3M0MxMS43ODMzIDE4LjUgMTAuOTM1NCAxOC44NTEyIDEwLjMxMDMgMTkuNDc2M0M5LjY4NTE3IDIwLjEwMTQgOS4zMzM5OCAyMC45NDkzIDkuMzMzOTggMjEuODMzM1YyMy41TTE5LjMzNCAxMS44MzMzQzE5LjMzNCAxMy42NzQzIDE3Ljg0MTYgMTUuMTY2NyAxNi4wMDA3IDE1LjE2NjdDMTQuMTU5NyAxNS4xNjY3IDEyLjY2NzMgMTMuNjc0MyAxMi42NjczIDExLjgzMzNDMTIuNjY3MyA5Ljk5MjM4IDE0LjE1OTcgOC41IDE2LjAwMDcgOC41QzE3Ljg0MTYgOC41IDE5LjMzNCA5Ljk5MjM4IDE5LjMzNCAxMS44MzMzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3tmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGE/LmNyZWF0ZWRCeU5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LnRhc2tEYXRhPy5jcmVhdGVkQXQgfCBkYXRlOiAnaGg6bW1hLCBkZCBNTU0geXl5eSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+QXNzaWduZXI8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2VyIGF2YXRhciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PiB7e2ZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy50YXNrRGF0YT8udXNlck5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LnRhc2tEYXRhPy5zdWJtaXRUaW1lX3N0cmluZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5Bc3NpZ25lZTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmZWVkYmFja0RldGFpbHM/Lmdsb2JhbENvbW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTJcIj5Db21tZW50czwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCIgKm5nRm9yPVwibGV0IGMgb2YgZmVlZGJhY2tEZXRhaWxzPy5nbG9iYWxDb21tZW50cztsZXQgaT0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjIuNjY3MyAyMy41VjIxLjgzMzNDMjIuNjY3MyAyMC45NDkzIDIyLjMxNjEgMjAuMTAxNCAyMS42OTEgMTkuNDc2M0MyMS4wNjU5IDE4Ljg1MTIgMjAuMjE4IDE4LjUgMTkuMzM0IDE4LjVIMTIuNjY3M0MxMS43ODMzIDE4LjUgMTAuOTM1NCAxOC44NTEyIDEwLjMxMDMgMTkuNDc2M0M5LjY4NTE3IDIwLjEwMTQgOS4zMzM5OCAyMC45NDkzIDkuMzMzOTggMjEuODMzM1YyMy41TTE5LjMzNCAxMS44MzMzQzE5LjMzNCAxMy42NzQzIDE3Ljg0MTYgMTUuMTY2NyAxNi4wMDA3IDE1LjE2NjdDMTQuMTU5NyAxNS4xNjY3IDEyLjY2NzMgMTMuNjc0MyAxMi42NjczIDExLjgzMzNDMTIuNjY3MyA5Ljk5MjM4IDE0LjE1OTcgOC41IDE2LjAwMDcgOC41QzE3Ljg0MTYgOC41IDE5LjMzNCA5Ljk5MjM4IDE5LjMzNCAxMS44MzMzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND57e2M/LnVzZXJOYW1lfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57e2M/LmNyZWF0ZWRBdHxkYXRlOidoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT57e2M/LmNvbW1lbnR9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHIgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGFcIj5cclxuXHJcbiAgICA8ZGl2IGlkPVwiZmVlZGJhY2staGFuZGxlclwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtNiBteS02IHB4LTMgZml4dHVyZS1uYXZpZ2F0ZVwiPlxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJzaG93QWN0aW9uXCIgKGNsaWNrKT1cIm9uQ2hhbmdlRml4dHVyZSgncHJldmlvdXMnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgNkw5IDEyTDE1IDE4XCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgIDxoMyBjbGFzcz1cIm0tMFwiPnt7cGxhbm9GaXh0dXJlPy5oZWFkZXI/LmxhYmVsfX08L2gzPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgdmlld0JveD1cIjAgMCA1IDVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjVcIiBjeT1cIjIuNVwiIHI9XCIyLjVcIiBmaWxsPVwiI0VBRUNGMFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwbGFub0ZpeHR1cmU/LmZpeHR1cmVDYXRlZ29yeVwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcGxhbm9GaXh0dXJlLmZpeHR1cmVDYXRlZ29yeSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGxhbm9GaXh0dXJlPy5maXh0dXJlV2lkdGg/LnZhbHVlXCIgY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZSBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBwbGFub0ZpeHR1cmUuZml4dHVyZVdpZHRoLnZhbHVlIH19IHt7IHBsYW5vRml4dHVyZS5maXh0dXJlV2lkdGg/LnVuaXQgPz8gJ2Z0JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8aDMgKm5nSWY9XCJzaG93QWN0aW9uXCIgY2xhc3M9XCJtLTAgbXMtYXV0b1wiPlxyXG4gICAgICAgICAgICB7e2N1cnJlbnRGaXh0dXJlSW5kZXh9fS97e3RvdGFsRml4dHVyZXMubGVuZ3RofX1cclxuICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwic2hvd0FjdGlvblwiIChjbGljayk9XCJvbkNoYW5nZUZpeHR1cmUoJ25leHQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxOEwxNSAxMkw5IDZcIiBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiggdGhpcy5haUZpeHR1cmU/LmZpeHR1cmVJZCl7XHJcbiAgICAgICAgPGRpdiBpZD1cImZpeHR1cmUtY29tcGFyaXNvblwiIGNsYXNzPVwicm93IGctMCBteS0zXCI+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0FjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFpc0FwcHJvdmVkICYmIHNob3dBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHF1aWNrLWJ0biBtcy1hdXRvXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkVkaXRGZWVkYmFjaygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjI4XzEyNTM2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4xNjYwMiAzLjMzMzJIMy4zMzI2OEMyLjg5MDY1IDMuMzMzMiAyLjQ2NjczIDMuNTA4NzkgMi4xNTQxNyAzLjgyMTM1QzEuODQxNjEgNC4xMzM5MSAxLjY2NjAyIDQuNTU3ODQgMS42NjYwMiA0Ljk5OTg2VjE2LjY2NjVDMS42NjYwMiAxNy4xMDg2IDEuODQxNjEgMTcuNTMyNSAyLjE1NDE3IDE3Ljg0NUMyLjQ2NjczIDE4LjE1NzYgMi44OTA2NSAxOC4zMzMyIDMuMzMyNjggMTguMzMzMkgxNC45OTkzQzE1LjQ0MTQgMTguMzMzMiAxNS44NjUzIDE4LjE1NzYgMTYuMTc3OSAxNy44NDVDMTYuNDkwNCAxNy41MzI1IDE2LjY2NiAxNy4xMDg2IDE2LjY2NiAxNi42NjY1VjEwLjgzMzJNMTUuNDE2IDIuMDgzMkMxNS43NDc1IDEuNzUxNjggMTYuMTk3MiAxLjU2NTQzIDE2LjY2NiAxLjU2NTQzQzE3LjEzNDkgMS41NjU0MyAxNy41ODQ1IDEuNzUxNjggMTcuOTE2IDIuMDgzMkMxOC4yNDc1IDIuNDE0NzIgMTguNDMzOCAyLjg2NDM2IDE4LjQzMzggMy4zMzMyQzE4LjQzMzggMy44MDIwNCAxOC4yNDc1IDQuMjUxNjggMTcuOTE2IDQuNTgzMkw5Ljk5OTM1IDEyLjQ5OTlMNi42NjYwMiAxMy4zMzMyTDcuNDk5MzUgOS45OTk4NkwxNS40MTYgMi4wODMyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIyOF8xMjUzNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHByaW1hcnktYnRuXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNsaWNrS2VlcFBsYW5vKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNBSVF1aWNrRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZWVwIHBsYW5vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgIG15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi43MjUgNS44MDAwOEwxMCAxMC4wMDg0TDE3LjI3NSA1LjgwMDA4TTEwIDE4LjQwMDFWMTAuMDAwMU0xNy41IDEzLjMzMzRWNi42NjY3NUMxNy40OTk3IDYuMzc0NDggMTcuNDIyNSA2LjA4NzQyIDE3LjI3NjMgNS44MzQzOEMxNy4xMyA1LjU4MTM0IDE2LjkxOTggNS4zNzEyMiAxNi42NjY3IDUuMjI1MDhMMTAuODMzMyAxLjg5MTc1QzEwLjU4IDEuNzQ1NDcgMTAuMjkyNiAxLjY2ODQ2IDEwIDEuNjY4NDZDOS43MDc0NCAxLjY2ODQ2IDkuNDIwMDMgMS43NDU0NyA5LjE2NjY3IDEuODkxNzVMMy4zMzMzMyA1LjIyNTA4QzMuMDgwMjIgNS4zNzEyMiAyLjg2OTk4IDUuNTgxMzQgMi43MjM3MiA1LjgzNDM4QzIuNTc3NDUgNi4wODc0MiAyLjUwMDMgNi4zNzQ0OCAyLjUgNi42NjY3NVYxMy4zMzM0QzIuNTAwMyAxMy42MjU3IDIuNTc3NDUgMTMuOTEyNyAyLjcyMzcyIDE0LjE2NThDMi44Njk5OCAxNC40MTg4IDMuMDgwMjIgMTQuNjI4OSAzLjMzMzMzIDE0Ljc3NTFMOS4xNjY2NyAxOC4xMDg0QzkuNDIwMDMgMTguMjU0NyA5LjcwNzQ0IDE4LjMzMTcgMTAgMTguMzMxN0MxMC4yOTI2IDE4LjMzMTcgMTAuNTggMTguMjU0NyAxMC44MzMzIDE4LjEwODRMMTYuNjY2NyAxNC43NzUxQzE2LjkxOTggMTQuNjI4OSAxNy4xMyAxNC40MTg4IDE3LjI3NjMgMTQuMTY1OEMxNy40MjI1IDEzLjkxMjcgMTcuNDk5NyAxMy42MjU3IDE3LjUgMTMuMzMzNFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibS0wXCI+RXhpc3RpbmcgdGVtcGxhdGUgPC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdiVG9vbHRpcF09XCJwbGFub0ZpeHR1cmU/LmZpeHR1cmVOYW1lXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk2XzMxNjY0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMDAxMyAxMy4zMzM3VjEwLjAwMDNNMTAuMDAxMyA2LjY2Njk5SDEwLjAwOTZNMTguMzM0NiAxMC4wMDAzQzE4LjMzNDYgMTQuNjAyNyAxNC42MDM3IDE4LjMzMzcgMTAuMDAxMyAxOC4zMzM3QzUuMzk4OTMgMTguMzMzNyAxLjY2Nzk3IDE0LjYwMjcgMS42Njc5NyAxMC4wMDAzQzEuNjY3OTcgNS4zOTc5NSA1LjM5ODkzIDEuNjY2OTkgMTAuMDAxMyAxLjY2Njk5QzE0LjYwMzcgMS42NjY5OSAxOC4zMzQ2IDUuMzk3OTUgMTguMzM0NiAxMC4wMDAzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ5Nl8zMTY2NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0FwcHJvdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vyc1swXT8udXNlckFjdGlvbiA9PT0gJ2tlZXBQbGFubycgfHwgZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnNbMF0/LnVzZXJBY3Rpb24gPT09ICdlZGl0V2l0aFBsYW5vJyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy1hdXRvXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4yNDY0IDYuMTU4MzlMOC4yNzk2OSAxMS45MTY3TDYuNjk2MzUgMTAuMjI1MUM2LjQwNDY5IDkuOTUwMDUgNS45NDYzNSA5LjkzMzM5IDUuNjEzMDIgMTAuMTY2N0M1LjI4ODAyIDEwLjQwODQgNS4xOTYzNSAxMC44MzM0IDUuMzk2MzUgMTEuMTc1MUw3LjI3MTM1IDE0LjIyNTFDNy40NTQ2OSAxNC41MDg0IDcuNzcxMzUgMTQuNjgzNCA4LjEyOTY5IDE0LjY4MzRDOC40NzEzNSAxNC42ODM0IDguNzk2MzUgMTQuNTA4NCA4Ljk3OTY5IDE0LjIyNTFDOS4yNzk2OSAxMy44MzM0IDE1LjAwNDcgNy4wMDgzOSAxNS4wMDQ3IDcuMDA4MzlDMTUuNzU0NyA2LjI0MTcyIDE0Ljg0NjQgNS41NjY3MiAxNC4yNDY0IDYuMTUwMDVMMTQuMjQ2NCA2LjE1ODM5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmaXh0dXJlIFtmaXh0dXJlXT1cInBsYW5vRml4dHVyZVwiPjwvZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFpc0FwcHJvdmVkICYmIHNob3dBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biByZWRvLWJ0blwiIChjbGljayk9XCJvbkNsaWNrUmVkbygpXCIgW2NsYXNzLmRpc2FibGVkXT1cImlzQUlRdWlja0VkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHF1aWNrLWJ0biBtcy1hdXRvXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkVkaXRBSUZlZWRiYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNBSVF1aWNrRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIyOF8xMjUzNilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMTY2MDIgMy4zMzMySDMuMzMyNjhDMi44OTA2NSAzLjMzMzIgMi40NjY3MyAzLjUwODc5IDIuMTU0MTcgMy44MjEzNUMxLjg0MTYxIDQuMTMzOTEgMS42NjYwMiA0LjU1Nzg0IDEuNjY2MDIgNC45OTk4NlYxNi42NjY1QzEuNjY2MDIgMTcuMTA4NiAxLjg0MTYxIDE3LjUzMjUgMi4xNTQxNyAxNy44NDVDMi40NjY3MyAxOC4xNTc2IDIuODkwNjUgMTguMzMzMiAzLjMzMjY4IDE4LjMzMzJIMTQuOTk5M0MxNS40NDE0IDE4LjMzMzIgMTUuODY1MyAxOC4xNTc2IDE2LjE3NzkgMTcuODQ1QzE2LjQ5MDQgMTcuNTMyNSAxNi42NjYgMTcuMTA4NiAxNi42NjYgMTYuNjY2NVYxMC44MzMyTTE1LjQxNiAyLjA4MzJDMTUuNzQ3NSAxLjc1MTY4IDE2LjE5NzIgMS41NjU0MyAxNi42NjYgMS41NjU0M0MxNy4xMzQ5IDEuNTY1NDMgMTcuNTg0NSAxLjc1MTY4IDE3LjkxNiAyLjA4MzJDMTguMjQ3NSAyLjQxNDcyIDE4LjQzMzggMi44NjQzNiAxOC40MzM4IDMuMzMzMkMxOC40MzM4IDMuODAyMDQgMTguMjQ3NSA0LjI1MTY4IDE3LjkxNiA0LjU4MzJMOS45OTkzNSAxMi40OTk5TDYuNjY2MDIgMTMuMzMzMkw3LjQ5OTM1IDkuOTk5ODZMMTUuNDE2IDIuMDgzMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMjhfMTI1MzZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBwcmltYXJ5LWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0FjY2VwdEFJKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNBSVF1aWNrRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQgc3RvcmUgcmVzcG9uc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgIG15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUuNjUwNCAxNC42MTkxSDQuMzQ4NjNWMTAuNzM3M0M0LjIzODI2IDEwLjc0NTUgNC4xMjY0NCAxMC43NSA0LjAxMzY3IDEwLjc1QzMuOTcxMzcgMTAuNzUgMy45Mjk0MyAxMC43NDYzIDMuODg3NyAxMC43NDUxVjE1LjgwMzdDMy44ODc4OCAxNi40NDcgNC40MjIyMiAxNi45ODgzIDUuMDk4NjMgMTYuOTg4M0gxNC45MDA0QzE1LjU3NjggMTYuOTg4MyAxNi4xMTAyIDE2LjQ0NyAxNi4xMTA0IDE1LjgwMzdWMTAuNzQ1MUMxNi4wNzA4IDEwLjc0NjIgMTYuMDMxMSAxMC43NSAxNS45OTEyIDEwLjc1QzE1Ljg3NjggMTAuNzUgMTUuNzYyOSAxMC43NDQ5IDE1LjY1MDQgMTAuNzM2M1YxNC42MTkxWk0xNS40NjM5IDMuMDExNzJINC41MzQxOEM0LjQ4NzIzIDMuMDExODcgNC40NDk3MyAzLjAzNzc2IDQuNDM0NTcgMy4wNjE1MlYzLjA2MjVMMi42Nzg3MSA1LjgwMzcxTDIuNjYwMTYgNS44MzMwMUMyLjA0NzY4IDYuODI3ODYgMi42NDMyNSA4LjExNzM5IDMuNzM0MzggOC4yNjM2N0MzLjgzMTc0IDguMjc1NjEgMy45MjIyNCA4LjI4MjIyIDQuMDEwNzQgOC4yODIyM0M0LjU4ODg5IDguMjgyMjMgNS4wOTk3OCA4LjAzNDE5IDUuNDU2MDUgNy42NDc0Nkw2LjAwOTc3IDcuMDQ2ODhMNi41NjE1MiA3LjY0OTQxQzYuOTEzNDEgOC4wMzM3MSA3LjQyMzAxIDguMjgyMTUgOC4wMDQ4OCA4LjI4MjIzQzguNTg0MzMgOC4yODIyMyA5LjA5NzU5IDguMDMzNDkgOS40NDkyMiA3LjY0OTQxTDEwLjAwMiA3LjA0NDkyTDEwLjU1NTcgNy42NDk0MUMxMC45MDczIDguMDMzNDkgMTEuNDIwNiA4LjI4MjIzIDEyIDguMjgyMjNDMTIuNTc5MiA4LjI4MjEgMTMuMDkxOCA4LjAzMzM3IDEzLjQ0MzQgNy42NDk0MUwxMy45OTcxIDcuMDQ0OTJMMTQuNTQ5OCA3LjY0OTQxQzE0LjkwMTQgOC4wMzM0OSAxNS40MTQ3IDguMjgyMjMgMTUuOTk0MSA4LjI4MjIzQzE2LjA3OTEgOC4yODIyMiAxNi4xNzE2IDguMjc1MzMgMTYuMjY3NiA4LjI2MzY3QzE3LjM2MzUgOC4xMTUwNCAxNy45NjIzIDYuODAwOCAxNy4zMjMyIDUuODAzNzFMMTUuNTY0NSAzLjA2MjVMMTUuNTYzNSAzLjA2MTUyQzE1LjU0ODMgMy4wMzc2OSAxNS41MTEgMy4wMTE3MiAxNS40NjM5IDMuMDExNzJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlN0b3JlIHJlc3BvbnNlIDwvaDQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNBcHByb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnNbMF0/LnVzZXJBY3Rpb24gPT09ICdhY2NlcHRBaScgfHwgZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnNbMF0/LnVzZXJBY3Rpb24gPT09ICdlZGl0V2l0aEFpJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLWF1dG9cIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjguNzQyMjhlLTA3XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCIxMFwiIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjI0NjQgNi4xNTgzOUw4LjI3OTY5IDExLjkxNjdMNi42OTYzNSAxMC4yMjUxQzYuNDA0NjkgOS45NTAwNSA1Ljk0NjM1IDkuOTMzMzkgNS42MTMwMiAxMC4xNjY3QzUuMjg4MDIgMTAuNDA4NCA1LjE5NjM1IDEwLjgzMzQgNS4zOTYzNSAxMS4xNzUxTDcuMjcxMzUgMTQuMjI1MUM3LjQ1NDY5IDE0LjUwODQgNy43NzEzNSAxNC42ODM0IDguMTI5NjkgMTQuNjgzNEM4LjQ3MTM1IDE0LjY4MzQgOC43OTYzNSAxNC41MDg0IDguOTc5NjkgMTQuMjI1MUM5LjI3OTY5IDEzLjgzMzQgMTUuMDA0NyA3LjAwODM5IDE1LjAwNDcgNy4wMDgzOUMxNS43NTQ3IDYuMjQxNzIgMTQuODQ2NCA1LjU2NjcyIDE0LjI0NjQgNi4xNTAwNUwxNC4yNDY0IDYuMTU4MzlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzWzBdPy51c2VyQWN0aW9uID09PSAncmVkbycgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4yNTA2NSAxNS44MzM1QzYuOTAzNDMgMTUuODMzNSA1Ljc0NzA0IDE1LjM5NiA0Ljc4MTQ4IDE0LjUyMUMzLjgxNTkzIDEzLjY0NiAzLjMzMzQzIDEyLjU1NTcgMy4zMzM5OCAxMS4yNTAyQzMuMzMzOTggOS45NDQ2MSAzLjgxNjc2IDguODU0MzMgNC43ODIzMiA3Ljk3OTMzQzUuNzQ3ODcgNy4xMDQzMyA2LjkwMzk4IDYuNjY2ODMgOC4yNTA2NSA2LjY2NjgzSDEzLjUwMDdMMTEuMzM0IDQuNTAwMTZMMTIuNTAwNyAzLjMzMzVMMTYuNjY3MyA3LjUwMDE2TDEyLjUwMDcgMTEuNjY2OEwxMS4zMzQgMTAuNTAwMkwxMy41MDA3IDguMzMzNUg4LjI1MDY1QzcuMzc1NjUgOC4zMzM1IDYuNjE1MSA4LjYxMTI3IDUuOTY4OTggOS4xNjY4M0M1LjMyMjg3IDkuNzIyMzggNS4wMDAxIDEwLjQxNjggNS4wMDA2NSAxMS4yNTAyQzUuMDAwNjUgMTIuMDgzNSA1LjMyMzcxIDEyLjc3NzkgNS45Njk4MiAxMy4zMzM1QzYuNjE1OTMgMTMuODg5MSA3LjM3NjIxIDE0LjE2NjggOC4yNTA2NSAxNC4xNjY4SDE0LjE2NzNWMTUuODMzNUg4LjI1MDY1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInNob3dBY3Rpb24gJiYgIWlzQUlRdWlja0VkaXRcIiBjbGFzcz1cIm1zLWF1dG8gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFJUXVpY2tFZGl0KClcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMTUuMDAwMkgxNS43NU0xMi4zNzUgMi42MjUxN0MxMi42NzM0IDIuMzI2OCAxMy4wNzggMi4xNTkxOCAxMy41IDIuMTU5MThDMTMuNzA4OSAyLjE1OTE4IDEzLjkxNTggMi4yMDAzMyAxNC4xMDg4IDIuMjgwMjlDMTQuMzAxOSAyLjM2MDI0IDE0LjQ3NzMgMi40Nzc0MyAxNC42MjUgMi42MjUxN0MxNC43NzI3IDIuNzcyOTEgMTQuODg5OSAyLjk0ODMgMTQuOTY5OSAzLjE0MTMyQzE1LjA0OTggMy4zMzQzNSAxNS4wOTEgMy41NDEyNCAxNS4wOTEgMy43NTAxN0MxNS4wOTEgMy45NTkxIDE1LjA0OTggNC4xNjU5OSAxNC45Njk5IDQuMzU5MDJDMTQuODg5OSA0LjU1MjA0IDE0Ljc3MjcgNC43Mjc0MyAxNC42MjUgNC44NzUxN0w1LjI1IDE0LjI1MDJMMi4yNSAxNS4wMDAyTDMgMTIuMDAwMkwxMi4zNzUgMi42MjUxN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGVkaXRhYmxlLWZpeHR1cmUgW2ZpeHR1cmVdPVwiYWlGaXh0dXJlXCIgW2VkaXRNb2RlXT1cImlzQUlRdWlja0VkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsQUlRdWlja0VkaXQoKVwiIChvbkRvbmUpPVwib25TYXZlQUlRdWlja0VkaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdFRhYik9XCJvbkVkaXRBSUZlZWRiYWNrKCRldmVudClcIj48L2VkaXRhYmxlLWZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIFtuZ0NsYXNzXT1cInsnY29sLTQnOnNob3dBY3Rpb24sJ2NvbCc6IXNob3dBY3Rpb259XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzpzaG93QWN0aW9uICYmICFpc0FwcHJvdmVkID8gJzUwcHgnIDogJzEycHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiAgbXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlN0b3JlIEltYWdlIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihjZG4gJiYgYWlGaXh0dXJlPy5maXh0dXJlSW1hZ2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS1pbWFnZVwiIChjbGljayk9XCJvbkNsaWNrSW1hZ2VQcmV2aWV3KGNkbiArIGFpRml4dHVyZT8uZml4dHVyZUltYWdlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNkbiArIGFpRml4dHVyZT8uZml4dHVyZUltYWdlXCIgYWx0PVwiU3RvcmUgcmVzcG9uc2UgaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG15LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxODZcIiBoZWlnaHQ9XCI4NFwiIHZpZXdCb3g9XCIwIDAgMTg2IDg0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzMC4yNTYgMTUuMzI4NEMxNDAuMDkyIDE1LjMyODQgMTQ4LjA2NSAyMy4zMDIgMTQ4LjA2NSAzMy4xMzc5QzE0OC4wNjUgMzcuMjE3NiAxNTAuODI2IDQxLjg2ODQgMTU0LjkwNiA0MS44Njg0SDE2Ny45NzJDMTc3LjgwNyA0MS44Njg3IDE4NS43ODEgNDkuODQyMiAxODUuNzgxIDU5LjY3OEMxODUuNzgxIDY5LjUxNDEgMTc3LjgwNyA3Ny40ODg1IDE2Ny45NzEgNzcuNDg4NUg4MS4zNjYyQzY5LjcxODYgNzcuNDg4MyA1OC42MzQ5IDY4LjQwODQgNDYuOTg3MyA2OC40MDg0SDUuOTM2NTJDMi42NTc4MiA2OC40MDg0IDAgNjUuNzUwNiAwIDYyLjQ3MTlDMC4wMDAxMjc4MjMgNTkuMTkzMyAyLjY1NzkgNTYuNTM1NCA1LjkzNjUyIDU2LjUzNTRINjEuODcyOEM2My4wMDY5IDU2LjUzNTQgNjMuOTY2OSA1NS42OTI5IDY0LjI4OTcgNTQuNjA1NkM2NC43OTk0IDUyLjg4OTIgNjMuNjI2NyA1MC45NDg1IDYxLjgzNjEgNTAuOTQ4NUg0My42NTE0QzMzLjgxNTMgNTAuOTQ4NSAyNS44NDE4IDQyLjk3NCAyNS44NDE4IDMzLjEzNzlDMjUuODQyIDIzLjMwMiAzMy44MTU0IDE1LjMyODQgNDMuNjUxNCAxNS4zMjg0SDEzMC4yNTZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTI2LjY2NCAyNy4zMzVWNDguNjVMMTIwLjk1OSA0My43NUMxMTguMjI5IDQxLjQwNSAxMTMuODE5IDQxLjQwNSAxMTEuMDg5IDQzLjc1TDk2LjUyOTEgNTYuMjQ1QzkzLjc5OTEgNTguNTkgODkuMzg5MSA1OC41OSA4Ni42NTkxIDU2LjI0NUw4NS40NjkxIDU1LjI2NUM4Mi45ODQxIDUzLjA5NSA3OS4wMjkxIDUyLjg4NSA3Ni4yMjkxIDU0Ljc3NUw1OS4wMDkxIDY2LjMyNUw1OC42MjQxIDY2LjYwNUM1Ny4zMjkxIDYzLjgwNSA1Ni42NjQxIDYwLjQ4IDU2LjY2NDEgNTYuNjY1VjI3LjMzNUM1Ni42NjQxIDE0LjU5NSA2NC4yNTkxIDcgNzYuOTk5MSA3SDEwNi4zMjlDMTE5LjA2OSA3IDEyNi42NjQgMTQuNTk1IDEyNi42NjQgMjcuMzM1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkJDQUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTgxLjE2NCAzNi4zMjk5Qzg1Ljc2NDUgMzYuMzI5OSA4OS40OTQgMzIuNjAwNSA4OS40OTQgMjcuOTk5OUM4OS40OTQgMjMuMzk5NCA4NS43NjQ1IDE5LjY2OTkgODEuMTY0IDE5LjY2OTlDNzYuNTYzNSAxOS42Njk5IDcyLjgzNCAyMy4zOTk0IDcyLjgzNCAyNy45OTk5QzcyLjgzNCAzMi42MDA1IDc2LjU2MzUgMzYuMzI5OSA4MS4xNjQgMzYuMzI5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMjYuNjY1IDQ4LjY1VjU2LjY2NUMxMjYuNjY1IDY5LjQwNSAxMTkuMDcgNzcgMTA2LjMzIDc3SDc3QzY4LjA3NSA3NyA2MS42MzUgNzMuMjU1IDU4LjYyNSA2Ni42MDVMNTkuMDEgNjYuMzI1TDc2LjIzIDU0Ljc3NUM3OS4wMyA1Mi44ODUgODIuOTg1IDUzLjA5NSA4NS40NyA1NS4yNjVMODYuNjYgNTYuMjQ1Qzg5LjM5IDU4LjU5IDkzLjggNTguNTkgOTYuNTMgNTYuMjQ1TDExMS4wOSA0My43NUMxMTMuODIgNDEuNDA1IDExOC4yMyA0MS40MDUgMTIwLjk2IDQzLjc1TDEyNi42NjUgNDguNjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMzguMDY0XCIgY3k9XCIyOC4zMTI4XCIgcj1cIjQuNDAwNDJcIiBmaWxsPVwiIzZCQ0FGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjQ3LjgyNTZcIiBjeT1cIjM5LjI0MDlcIiByPVwiMi40NTI1NVwiIGZpbGw9XCIjNkJDQUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBjeD1cIjEzOS4xODNcIiBjeT1cIjYxLjAwNzJcIiByeD1cIjQuMjkxOTdcIiByeT1cIjQuNTk4NTRcIiBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGlkPVwidm0tY29tcGFyaXNvblwiICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVBSURhdGE/LnZtQ29uZmlnLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0xXCI+VmlzdWFsIE1lcmNoYW5kaXNlIEltYWdlcyBmcm9tIEFJIG91dHB1dDo8L2g1PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICBAZm9yICh2bSBvZiBmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUFJRGF0YT8udm1Db25maWc7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiBbbmdDbGFzc109XCJ7J2NvbC02JzpzaG93QWN0aW9uLCAnY29sLTEyJzohc2hvd0FjdGlvbn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZtLWNvbnRhaW5lclwiIChjbGljayk9XCJvbkNsaWNrSW1hZ2VQcmV2aWV3KGNkbit2bT8udm1JbWFnZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2bS1pbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY2RuK3ZtPy52bUltYWdlXCIgYWx0PVwiVk0gSW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiB2bS1kZXRhaWxzIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT57e3ZtPy52bVR5cGV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1Pnt7dm0/LnZtTmFtZX19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXByZXZpZXdcIiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3XCIgKGNsaWNrKT1cImNsb3NlSW1hZ2VQcmV2aWV3KClcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzZWxlY3RlZEltYWdlRm9yUHJldmlld1wiIGNsYXNzPVwiZnVsbC1pbWdcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1AZWxzZSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1Ljk1MDIgNDguMTk5N0MzNS42NDg5IDQ4LjIzMTUgMzUuMzQyMiA0OC4yNTA1IDM1LjAzMTIgNDguMjUwNUMzNC44NjE3IDQ4LjI1MDUgMzQuNjk0NCA0OC4yNDM2IDM0LjUyOTMgNDguMjMzOVY1OC42MDY5QzM0LjUyOTMgNjAuMDM0OSAzNS43MTIzIDYxLjIyNiAzNy4yMDAyIDYxLjIyNjFINTYuODA0N0M1OC4yOTI3IDYxLjIyNjEgNTkuNDc1NiA2MC4wMzUgNTkuNDc1NiA1OC42MDY5VjQ4LjIzNDlDNTkuMzEzNyA0OC4yNDQxIDU5LjE0OTggNDguMjUwNSA1OC45ODU0IDQ4LjI1MDVDNTguNjcxNCA0OC4yNTA1IDU4LjM2MDggNDguMjMyNSA1OC4wNTQ3IDQ4LjE5OTdWNTUuOTg3OEgzNS45NTAyVjQ4LjE5OTdaTTU3LjkzMTYgMzIuNzczOUgzNi4wNzMyQzM1Ljg5NTkgMzIuNzczOSAzNS43NDA2IDMyLjg2NjcgMzUuNjYzMSAzMi45ODc4TDM1LjY2MTEgMzIuOTg5N0wzMi4xNTE0IDM4LjQ3MzFMMzIuMDU2NiAzOC42MjA2QzMwLjgzMTEgNDAuNzQwNCAzMi4wOTU3IDQzLjQ2NzQgMzQuNDQ3MyA0My43NzY5QzM0LjY0ODIgNDMuODAxMyAzNC44Mzc5IDQzLjgxNTkgMzUuMDI1NCA0My44MTU5QzM2LjI1NTUgNDMuODE1OSAzNy4zNDM0IDQzLjI4NzIgMzguMTAwNiA0Mi40NjUzTDM5LjAyMjUgNDEuNDY0NEwzOS45NDE0IDQyLjQ2ODNDNDAuNjkwMyA0My4yODYzIDQxLjc3NyA0My44MTU5IDQzLjAxNDYgNDMuODE1OUM0NC4yNDY3IDQzLjgxNTggNDUuMzM4NiA0My4yODU2IDQ2LjA4NjkgNDIuNDY4M0w0Ny4wMDg4IDQxLjQ2MTRMNDcuOTMwNyA0Mi40NjgzQzQ4LjY3OSA0My4yODU3IDQ5Ljc3MDcgNDMuODE1OSA1MS4wMDI5IDQzLjgxNTlDNTIuMjM1MSA0My44MTU5IDUzLjMyNjggNDMuMjg1NyA1NC4wNzUyIDQyLjQ2ODNMNTQuOTk3MSA0MS40NjE0TDU1LjkxODkgNDIuNDY4M0M1Ni42NjczIDQzLjI4NTcgNTcuNzYgNDMuODE1OSA1OC45OTIyIDQzLjgxNTlDNTkuMTczNiA0My44MTU5IDU5LjM2ODcgNDMuODAyMSA1OS41Njg0IDQzLjc3NzhINTkuNTY3NEM2MS45NjExIDQzLjQ1NzMgNjMuMjI5MyA0MC42MDc4IDYxLjg2MTMgMzguNDczMUw2MS44NjA0IDM4LjQ3NDFMNTguMzQzOCAzMi45OTA3TDU4LjM0MjggMzIuOTg3OEM1OC4yNjUzIDMyLjg2NjUgNTguMTA5MiAzMi43NzM5IDU3LjkzMTYgMzIuNzczOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGgzIG10LTJcIj5ObyByZXNwb25zZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5ObyBBSSByZXNwb25zZSBmb3VuZCBmb3IgdGhpcyBmaXh0dXJlLjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcblxyXG4gICAgQGlmIChmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5jb21tZW50cy5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2IGlkPVwiZml4dHVyZS1jb21tZW50c1wiPlxyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0yXCI+Q29tbWVudHM8L2g1PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYyBvZiBmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vyc1swXT8uY29tbWVudHM7bGV0IGk9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFVzZXIgYXZhdGFyIC0tPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pnt7Yz8udXNlck5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7Yz8udGltZVN0YW1wIHwgZGF0ZTonaGg6bW06c3MgYSAtIGRkIE1NTSB5eXl5J319PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICBAaWYoYz8ucmVzcG9uc2V0eXBlID09PSAnY29tbWVudCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDU+e3tjPy5jb21tZW50fX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZSBpZihjPy5yZXNwb25zZXR5cGUgPT09ICdhZ3JlZScpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2tlZXBQbGFubydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIktlZXAgUGxhbm9cIi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2VkaXRXaXRoUGxhbm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJLZWVwIFBsYW5vIHdpdGggTW9kaWZpY2F0aW9uXCIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPT09ICdhY2NlcHRBaSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIkFjY2VwdCBBSVwiLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy51c2VyQWN0aW9uID09PSAnZWRpdFdpdGhBaSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIkFjY2VwdCBBSSB3aXRoIE1vZGlmaWNhdGlvblwiLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJjPy5jb21tZW50XCI+Tm90ZToge3tjLmNvbW1lbnR9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgfUBlbHNlIGlmKGM/LnJlc3BvbnNldHlwZSA9PT0gJ2Rpc2FncmVlJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIlJlZG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJjPy5jb21tZW50XCI+Tm90ZToge3tjLmNvbW1lbnR9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG48L3NlY3Rpb24+Il19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7QUFTcEcsTUFBTSxPQUFPLDZCQUE2QjtJQXVDcEI7SUFBZ0M7SUFwQzNDLFNBQVMsQ0FBTTtJQUNmLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFDMUIsZUFBZSxDQUFNO0lBRXJCLEdBQUcsQ0FBUztJQUNaLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDcEMseUNBQXlDO0lBRS9CLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFHdEMsQ0FBQztJQUVLLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTNDLG9CQUFvQixDQUdsQjtJQUVGLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFOUIsbUJBQW1CLENBQVM7SUFFNUIsWUFBWSxDQUFNO0lBQ2xCLFNBQVMsQ0FBTTtJQUVmLHVCQUF1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O1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0E3V1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsbVNDckIxQyx5NmdDQWlhVTs7NEZENVlHLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSwyQkFBMkI7OEdBTzVCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL2FjdGlvbi1jb25maXJtLXBvcHVwL2FjdGlvbi1jb25maXJtLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBWbUxpYnJhcnlMaXN0IH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXZlcmlmaWNhdGlvbi1mZWVkYmFja1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi92ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFZlcmlmaWNhdGlvbkZlZWRiYWNrQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XHJcbntcclxuICBASW5wdXQoKSBmbG9vckRhdGE6IGFueTtcclxuICBASW5wdXQoKSB0b3RhbEZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZlZWRiYWNrRGV0YWlsczogYW55O1xyXG5cclxuICBASW5wdXQoKSBjZG46IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93QWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBASW5wdXQoKSB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlRml4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEZpeHR1cmU6IHN0cmluZztcclxuICAgIGFjdGlvbjogXCJuZXh0XCIgfCBcInByZXZpb3VzXCI7XHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBzZWxlY3RlZEZlZWRiYWNrRGF0YToge1xyXG4gICAgY3VycmVudEZpeHR1cmU6IGFueTtcclxuICAgIGFpRmVlZGJhY2tGaXh0dXJlOiBhbnk7XHJcbiAgfTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGN1cnJlbnRGaXh0dXJlSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgcGxhbm9GaXh0dXJlOiBhbnk7XHJcbiAgYWlGaXh0dXJlOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGltZ0NETjogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLCBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJmZWVkYmFja0RldGFpbHNcIl0/LmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm9uQ2FuY2VsQUlRdWlja0VkaXQoKTtcclxuICAgICAgdGhpcy5jdXJyZW50Rml4dHVyZUluZGV4ID1cclxuICAgICAgICB0aGlzLnRvdGFsRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVJZFxyXG4gICAgICAgICkgKyAxO1xyXG5cclxuICAgICAgdGhpcy5wbGFub0ZpeHR1cmUgPSBzdHJ1Y3R1cmVkQ2xvbmUoXHJcbiAgICAgICAgdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uRml4dHVyZURhdGFcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWlGaXh0dXJlID0gdGhpcy5wcm9jZXNzQUlGaXh0dXJlRGF0YSgpO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVZNbGlzdFdpdGhBaURhdGEoKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0FwcHJvdmVkKSB7XHJcbiAgICAgICAgdGhpcy5jb21wYXJlRml4dHVyZSh0aGlzLmFpRml4dHVyZSwgdGhpcy5wbGFub0ZpeHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzQUlGaXh0dXJlRGF0YSgpIHtcclxuICAgIGxldCBhaURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoe1xyXG4gICAgICAuLi50aGlzLnBsYW5vRml4dHVyZSxcclxuICAgICAgLi4udGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUFJRGF0YSxcclxuICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5wbGFub0ZpeHR1cmU/LmhlYWRlcixcclxuICAgICAgICAuLi50aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlQUlEYXRhPy5oZWFkZXIsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBhaURhdGE/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChzOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHMuc2hlbGZUeXBlID09IFwidHJheVwiICYmXHJcbiAgICAgICAgIXM/Lm9yaWdpbmFsUHJvZHVjdENvdW50ICYmXHJcbiAgICAgICAgIWFpRGF0YT8udXBkYXRlZEJ5XHJcbiAgICAgICkge1xyXG4gICAgICAgIHMub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzLnByb2R1Y3RQZXJTaGVsZjtcclxuICAgICAgICBzLnByb2R1Y3RQZXJTaGVsZiA9IE1hdGguZmxvb3Iocy5wcm9kdWN0UGVyU2hlbGYgLyBzLnRyYXlSb3dzKTtcclxuXHJcbiAgICAgICAgLy8gcy50cmF5Um93cyA9IHMudHJheVJvd3MgPT0gMCA/IDEgOiBzLnRyYXlSb3dzO1xyXG4gICAgICAgIC8vIHMucHJvZHVjdFBlclNoZWxmIDw9IDIxID8gMyA6IDc7XHJcblxyXG4gICAgICAgIC8vIHMub3JpZ2luYWxQcm9kdWN0Q291bnQgPSBzLnByb2R1Y3RQZXJTaGVsZjtcclxuICAgICAgICAvLyBzLnByb2R1Y3RQZXJTaGVsZiA9IE1hdGguZmxvb3IoXHJcbiAgICAgICAgLy8gICBzLnByb2R1Y3RQZXJTaGVsZiAvIChzLnByb2R1Y3RQZXJTaGVsZiA8PSAyMSA/IDMgOiA3KVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBzaGVsZlpvbmUgPSB0aGlzLnBsYW5vRml4dHVyZT8uc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAoc2hlbHZlOiBhbnkpID0+IHMuc2hlbGZOdW1iZXIgPT0gc2hlbHZlLnNoZWxmTnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoc2hlbGZab25lKSB7XHJcbiAgICAgICAgYWlEYXRhLnNoZWxmQ29uZmlnW2luZGV4XSA9IHsgLi4uc2hlbGZab25lLCAuLi5zIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcy56b25lID0gXCJCb3R0b21cIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYWlEYXRhO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZUZpeHR1cmUoYWlGaXh0dXJlOiBhbnksIGN1cnJlbnRGaXh0dXJlOiBhbnkpIHtcclxuICAgIGlmICghYWlGaXh0dXJlIHx8ICFjdXJyZW50Rml4dHVyZSkgcmV0dXJuO1xyXG4gICAgLyogPT09PT09PT09PT09PT09PT0gSEVBREVSID09PT09PT09PT09PT09PT09ICovXHJcbiAgICBjb25zdCBhaUhlYWRlciA9IChhaUZpeHR1cmUuaGVhZGVyPy5sYWJlbCA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGN1ckhlYWRlciA9IChjdXJyZW50Rml4dHVyZS5oZWFkZXI/LmxhYmVsID8/IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGFpRml4dHVyZS5oZWFkZXIuaXNEaWZmZXJlbnQgPSBhaUhlYWRlciAhPT0gY3VySGVhZGVyO1xyXG5cclxuICAgIC8qID09PT09PT09PT09PT09PT09IFNIRUxWRVMgPT09PT09PT09PT09PT09PT0gKi9cclxuICAgIGNvbnN0IGN1cnJlbnRTaGVsZk1hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KFxyXG4gICAgICAoY3VycmVudEZpeHR1cmUuc2hlbGZDb25maWcgPz8gW10pLm1hcCgoczogYW55KSA9PiBbcy5zaGVsZk51bWJlciwgc10pXHJcbiAgICApO1xyXG5cclxuICAgIChhaUZpeHR1cmUuc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKGFpU2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICBhaVNoZWxmLmlzRGlmZmVyZW50ID0gZmFsc2U7XHJcblxyXG4gICAgICBjb25zdCBjdXJTaGVsZiA9IGN1cnJlbnRTaGVsZk1hcC5nZXQoYWlTaGVsZi5zaGVsZk51bWJlcik7XHJcbiAgICAgIGlmICghY3VyU2hlbGYpIHtcclxuICAgICAgICBhaVNoZWxmLmlzRGlmZmVyZW50ID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBhaVNoZWxmLnNoZWxmVHlwZSAhPT0gY3VyU2hlbGYuc2hlbGZUeXBlIHx8XHJcbiAgICAgICAgYWlTaGVsZi5wcm9kdWN0UGVyU2hlbGYgIT09IGN1clNoZWxmLnByb2R1Y3RQZXJTaGVsZiB8fFxyXG4gICAgICAgIGFpU2hlbGYudHJheVJvd3MgIT09IGN1clNoZWxmLnRyYXlSb3dzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGFpU2hlbGYuaXNEaWZmZXJlbnQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiA9PT09PT09PT09PT09PT09PSBWTXMgPT09PT09PT09PT09PT09PT0gKi9cclxuICAgIGNvbnN0IHZtS2V5ID0gKHY6IGFueSkgPT5cclxuICAgICAgYCR7di52bVR5cGV9fCR7di52bU5hbWV9fCR7di5zdGFydFlQb3NpdGlvbn18JHt2LmVuZFlQb3NpdGlvbn1gXHJcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRWTVNldCA9IG5ldyBTZXQoKGN1cnJlbnRGaXh0dXJlLnZtQ29uZmlnID8/IFtdKS5tYXAodm1LZXkpKTtcclxuXHJcbiAgICAoYWlGaXh0dXJlLnZtQ29uZmlnID8/IFtdKS5mb3JFYWNoKChhaVZNOiBhbnkpID0+IHtcclxuICAgICAgYWlWTS5pc0RpZmZlcmVudCA9ICFjdXJyZW50Vk1TZXQuaGFzKHZtS2V5KGFpVk0pKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlVk1saXN0V2l0aEFpRGF0YSgpIHtcclxuICAvLyAgIHRoaXMuYWlGaXh0dXJlPy52bUNvbmZpZz8uZm9yRWFjaCgoYWlWbTogYW55KSA9PiB7XHJcbiAgLy8gICAgIC8vIGNvbnNvbGUubG9nKFwiQEAgfiBhaVZtOlwiLCBhaVZtKTtcclxuXHJcbiAgLy8gICAgIGNvbnN0IHZtSW5MaXN0ID0gdGhpcy52bUxpc3QuZmluZChcclxuICAvLyAgICAgICAodm0pID0+IHZtLm5hbWUgPT09IGFpVm0/LnZtTmFtZSAmJiB2bS50eXBlID09PSBhaVZtPy52bVR5cGVcclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIGlmICh2bUluTGlzdCkge1xyXG4gIC8vICAgICAgIC8vIHZtSW5MaXN0LmlkID0gYWlWbS52bU5hbWU7XHJcbiAgLy8gICAgICAgaWYgKGFpVm0/LnZtSW1hZ2UpIHtcclxuICAvLyAgICAgICAgIHZtSW5MaXN0LmltZ1VybCA9IGAke3RoaXMuaW1nQ0ROfSR7YWlWbS52bUltYWdlfWA7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMudm1MaXN0LnB1c2goe1xyXG4gIC8vICAgICAgICAgaWQ6IGFpVm0udm1OYW1lLFxyXG4gIC8vICAgICAgICAgbmFtZTogYWlWbS52bU5hbWUsXHJcbiAgLy8gICAgICAgICBkaXNwbGF5TmFtZTogYWlWbS52bU5hbWUgKyAoYWlWbT8udm1UeXBlID8gYCgke2FpVm0udm1UeXBlfSlgIDogXCJcIiksXHJcbiAgLy8gICAgICAgICB3aWR0aDogMTAwLFxyXG4gIC8vICAgICAgICAgaGVpZ2h0OiAxMDAsXHJcbiAgLy8gICAgICAgICB0eXBlOiBhaVZtLnZtVHlwZSxcclxuICAvLyAgICAgICAgIC4uLihhaVZtLnZtSW1hZ2UgPyB7IGltZ1VybDogYCR7dGhpcy5pbWdDRE59JHthaVZtLnZtSW1hZ2V9YCB9IDoge30pLFxyXG4gIC8vICAgICAgIH0gYXMgYW55KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICBnZXQgaXNBcHByb3ZlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hcHByb3ZhbFN0YXR1cyA9PT0gXCJhcHByb3ZlZFwiO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VGaXh0dXJlKGNoYW5nZTogXCJuZXh0XCIgfCBcInByZXZpb3VzXCIpIHtcclxuICAgIHRoaXMuY2hhbmdlRml4dHVyZS5lbWl0KHtcclxuICAgICAgY3VycmVudEZpeHR1cmU6IHRoaXMuZmVlZGJhY2tEZXRhaWxzLmZpeHR1cmVGZWVkYmFjay5maXh0dXJlSWQsXHJcbiAgICAgIGFjdGlvbjogY2hhbmdlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2FuY2VsQUlRdWlja0VkaXQoKTtcclxuICAgIC8vIHRoaXMub25DYW5jZWxQbGFub1F1aWNrRWRpdCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja0tlZXBQbGFubygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImtlZXBQbGFub1wiKTtcclxuICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJrZWVwUGxhbm9cIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICAgIHJlbWFya3M6IHJlc3VsdD8ucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gb25DbGlja0tlZXBQbGFubyBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBY2NlcHRBSSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdEFJXCIpO1xyXG4gICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09IFwibm90T2tcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgYWN0aW9uOiBcImFjY2VwdEFpXCIsXHJcbiAgICAgICAgdHlwZTogXCJhZ3JlZVwiLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhOiB0aGlzLmFpRml4dHVyZSxcclxuICAgICAgICBmZWVkYmFjazogdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQ/LnJlbWFyayxcclxuICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uQ2xpY2tBY2NlcHRBSSBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tSZWRvKCkge1xyXG4gICAgaWYgKHRoaXMuaXNBSVF1aWNrRWRpdCkgcmV0dXJuO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcInJlZG9cIik7XHJcbiAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gXCJub3RPa1wiKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgICBhY3Rpb246IFwicmVkb1wiLFxyXG4gICAgICAgIHR5cGU6IFwiZGlzYWdyZWVcIixcclxuICAgICAgICBmaXh0dXJlRGF0YTogbnVsbCxcclxuICAgICAgICBmZWVkYmFjazogdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcms6IHJlc3VsdCxcclxuICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uQ2xpY2tSZWRvIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRBSUZlZWRiYWNrKGRhdGFUb0VkaXQ/OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICBhY3Rpb246IFwiZWRpdFdpdGhBaVwiLFxyXG4gICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgIGZpeHR1cmVEYXRhOiBkYXRhVG9FZGl0Py5maXh0dXJlRGF0YSA/PyB0aGlzLmFpRml4dHVyZSxcclxuICAgICAgZmVlZGJhY2s6IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2ssXHJcbiAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICB0YWI6IGRhdGFUb0VkaXQ/LnRhYixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0RmVlZGJhY2soKSB7XHJcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHtcclxuICAgICAgYWN0aW9uOiBcImVkaXRXaXRoUGxhbm9cIixcclxuICAgICAgdHlwZTogXCJhZ3JlZVwiLFxyXG4gICAgICBmaXh0dXJlRGF0YTogdGhpcy5wbGFub0ZpeHR1cmUsXHJcbiAgICAgIGZlZWRiYWNrOiB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQUlRdWlja0VkaXQoKSB7XHJcbiAgICB0aGlzLmlzQUlRdWlja0VkaXQgPSAhdGhpcy5pc0FJUXVpY2tFZGl0O1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWxBSVF1aWNrRWRpdCgpIHtcclxuICAgIHRoaXMuaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TYXZlQUlRdWlja0VkaXQobmV3QWlEYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdEFJXCIpO1xyXG4gICAgICBpZiAocmVzdWx0Py5hY3Rpb24gPT09IFwibm90T2tcIikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5haUZpeHR1cmUgPSBzdHJ1Y3R1cmVkQ2xvbmUobmV3QWlEYXRhKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJhY2NlcHRBaVwiLFxyXG4gICAgICAgIHR5cGU6IFwiYWdyZWVcIixcclxuICAgICAgICBmaXh0dXJlRGF0YTogdGhpcy5haUZpeHR1cmUsXHJcbiAgICAgICAgZmVlZGJhY2s6IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2ssXHJcbiAgICAgICAgcmVtYXJrczogcmVzdWx0Py5yZW1hcmssXHJcbiAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNBSVF1aWNrRWRpdCA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IG9uU2F2ZUFJUXVpY2tFZGl0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtQWN0aW9uKFxyXG4gICAgdHlwZTogXCJyZWRvXCIgfCBcImFjY2VwdEFJXCIgfCBcImtlZXBQbGFub1wiXHJcbiAgKTogUHJvbWlzZTx7IGFjdGlvbjogc3RyaW5nOyByZW1hcms6IHN0cmluZyB8IG51bGwgfSB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPHtcclxuICAgICAgICBhY3Rpb246IHN0cmluZztcclxuICAgICAgICByZW1hcms6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIH0+KChyZXN1bHQpID0+IHJlc3VsdCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tJbWFnZVByZXZpZXcoaW1nVXJsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUZvclByZXZpZXcgPSBpbWdVcmw7XHJcbiAgfVxyXG5cclxuICBjbG9zZUltYWdlUHJldmlldygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUZvclByZXZpZXcgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBGaXh0dXJlUXVpY2tEZXRhaWwge1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBlZGl0YWJsZTogYm9vbGVhbjtcclxuICBpc0RpZmZlcmVudD86IGJvb2xlYW47XHJcblxyXG4gIG1ldGE/OiB7XHJcbiAgICB0eXBlOiBcImZpeHR1cmVcIiB8IFwic2hlbGZcIiB8IFwidHJheVwiO1xyXG4gICAgc2hlbGZOdW1iZXI/OiBudW1iZXI7XHJcbiAgfTtcclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cInZlcmlmaWNhdGlvbi1mZWVkYmFja1wiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGFcIiBpZD1cInRhc2staW5mb1wiIG5nYkFjY29yZGlvbiAjYWNjb3JkaW9uPVwibmdiQWNjb3JkaW9uXCI+XHJcbiAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtPVwiZGV0YWlsc1wiIFtjb2xsYXBzZWRdPVwiZmVlZGJhY2tEZXRhaWxzPy50YXNrSW5mb1RvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1idXR0b24gdGFzay1pbmZvLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Ub2dnbGUgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMj5GaXh0dXJlIHZlcmlmaWNhdGlvbiBhc3NpZ25lZDwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+e3tmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGE/LmNyZWF0ZWRBdCB8IGRhdGU6ICdoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjIuNjY3MyAyMy41VjIxLjgzMzNDMjIuNjY3MyAyMC45NDkzIDIyLjMxNjEgMjAuMTAxNCAyMS42OTEgMTkuNDc2M0MyMS4wNjU5IDE4Ljg1MTIgMjAuMjE4IDE4LjUgMTkuMzM0IDE4LjVIMTIuNjY3M0MxMS43ODMzIDE4LjUgMTAuOTM1NCAxOC44NTEyIDEwLjMxMDMgMTkuNDc2M0M5LjY4NTE3IDIwLjEwMTQgOS4zMzM5OCAyMC45NDkzIDkuMzMzOTggMjEuODMzM1YyMy41TTE5LjMzNCAxMS44MzMzQzE5LjMzNCAxMy42NzQzIDE3Ljg0MTYgMTUuMTY2NyAxNi4wMDA3IDE1LjE2NjdDMTQuMTU5NyAxNS4xNjY3IDEyLjY2NzMgMTMuNjc0MyAxMi42NjczIDExLjgzMzNDMTIuNjY3MyA5Ljk5MjM4IDE0LjE1OTcgOC41IDE2LjAwMDcgOC41QzE3Ljg0MTYgOC41IDE5LjMzNCA5Ljk5MjM4IDE5LjMzNCAxMS44MzMzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3tmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGE/LmNyZWF0ZWRCeU5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LnRhc2tEYXRhPy5jcmVhdGVkQXQgfCBkYXRlOiAnaGg6bW1hLCBkZCBNTU0geXl5eSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+QXNzaWduZXI8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2VyIGF2YXRhciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PiB7e2ZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy50YXNrRGF0YT8udXNlck5hbWV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LnRhc2tEYXRhPy5zdWJtaXRUaW1lX3N0cmluZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5Bc3NpZ25lZTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChmZWVkYmFja0RldGFpbHM/Lmdsb2JhbENvbW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTJcIj5Db21tZW50czwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCIgKm5nRm9yPVwibGV0IGMgb2YgZmVlZGJhY2tEZXRhaWxzPy5nbG9iYWxDb21tZW50cztsZXQgaT0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjIuNjY3MyAyMy41VjIxLjgzMzNDMjIuNjY3MyAyMC45NDkzIDIyLjMxNjEgMjAuMTAxNCAyMS42OTEgMTkuNDc2M0MyMS4wNjU5IDE4Ljg1MTIgMjAuMjE4IDE4LjUgMTkuMzM0IDE4LjVIMTIuNjY3M0MxMS43ODMzIDE4LjUgMTAuOTM1NCAxOC44NTEyIDEwLjMxMDMgMTkuNDc2M0M5LjY4NTE3IDIwLjEwMTQgOS4zMzM5OCAyMC45NDkzIDkuMzMzOTggMjEuODMzM1YyMy41TTE5LjMzNCAxMS44MzMzQzE5LjMzNCAxMy42NzQzIDE3Ljg0MTYgMTUuMTY2NyAxNi4wMDA3IDE1LjE2NjdDMTQuMTU5NyAxNS4xNjY3IDEyLjY2NzMgMTMuNjc0MyAxMi42NjczIDExLjgzMzNDMTIuNjY3MyA5Ljk5MjM4IDE0LjE1OTcgOC41IDE2LjAwMDcgOC41QzE3Ljg0MTYgOC41IDE5LjMzNCA5Ljk5MjM4IDE5LjMzNCAxMS44MzMzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND57e2M/LnVzZXJOYW1lfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57e2M/LmNyZWF0ZWRBdHxkYXRlOidoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT57e2M/LmNvbW1lbnR9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8aHIgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8udGFza0RhdGFcIj5cclxuXHJcbiAgICA8ZGl2IGlkPVwiZmVlZGJhY2staGFuZGxlclwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtNiBteS02IHB4LTMgZml4dHVyZS1uYXZpZ2F0ZVwiPlxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJzaG93QWN0aW9uXCIgKGNsaWNrKT1cIm9uQ2hhbmdlRml4dHVyZSgncHJldmlvdXMnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgNkw5IDEyTDE1IDE4XCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgIDxoMyBjbGFzcz1cIm0tMFwiPnt7cGxhbm9GaXh0dXJlPy5oZWFkZXI/LmxhYmVsfX08L2gzPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgdmlld0JveD1cIjAgMCA1IDVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjVcIiBjeT1cIjIuNVwiIHI9XCIyLjVcIiBmaWxsPVwiI0VBRUNGMFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwbGFub0ZpeHR1cmU/LmZpeHR1cmVDYXRlZ29yeVwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcGxhbm9GaXh0dXJlLmZpeHR1cmVDYXRlZ29yeSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGxhbm9GaXh0dXJlPy5maXh0dXJlV2lkdGg/LnZhbHVlXCIgY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZSBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBwbGFub0ZpeHR1cmUuZml4dHVyZVdpZHRoLnZhbHVlIH19IHt7IHBsYW5vRml4dHVyZS5maXh0dXJlV2lkdGg/LnVuaXQgPz8gJ2Z0JyB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5vRml4dHVyZT8uZml4dHVyZVdpZHRoPy52YWx1ZVwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAgRml4dHVyZSBDYXBhY2l0eToge3sgcGxhbm9GaXh0dXJlLmZpeHR1cmVDYXBhY2l0eSA/PyAnMCcgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwbGFub0ZpeHR1cmU/LmZpeHR1cmVXaWR0aD8udmFsdWVcIiBjbGFzcz1cImJhZGdlIGluYWN0aXZlIG1lLTFcIj5cclxuICAgICAgICAgICAgICAgIFZpc3VhbCBNZXJjaCBDYXBhY2l0eToge3sgcGxhbm9GaXh0dXJlLnZtQ29uZmlnLmxlbmd0aCA/PyAnMCcgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGgzICpuZ0lmPVwic2hvd0FjdGlvblwiIGNsYXNzPVwibS0wIG1zLWF1dG9cIj5cclxuICAgICAgICAgICAge3tjdXJyZW50Rml4dHVyZUluZGV4fX0ve3t0b3RhbEZpeHR1cmVzLmxlbmd0aH19XHJcbiAgICAgICAgPC9oMz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInNob3dBY3Rpb25cIiAoY2xpY2spPVwib25DaGFuZ2VGaXh0dXJlKCduZXh0JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYoIHRoaXMuYWlGaXh0dXJlPy5maXh0dXJlSWQpe1xyXG4gICAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWNvbXBhcmlzb25cIiBjbGFzcz1cInJvdyBnLTAgbXktM1wiPlxyXG4gICAgICAgICAgICBAaWYgKHNob3dBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNBcHByb3ZlZCAmJiBzaG93QWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBxdWljay1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FZGl0RmVlZGJhY2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIyOF8xMjUzNilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMTY2MDIgMy4zMzMySDMuMzMyNjhDMi44OTA2NSAzLjMzMzIgMi40NjY3MyAzLjUwODc5IDIuMTU0MTcgMy44MjEzNUMxLjg0MTYxIDQuMTMzOTEgMS42NjYwMiA0LjU1Nzg0IDEuNjY2MDIgNC45OTk4NlYxNi42NjY1QzEuNjY2MDIgMTcuMTA4NiAxLjg0MTYxIDE3LjUzMjUgMi4xNTQxNyAxNy44NDVDMi40NjY3MyAxOC4xNTc2IDIuODkwNjUgMTguMzMzMiAzLjMzMjY4IDE4LjMzMzJIMTQuOTk5M0MxNS40NDE0IDE4LjMzMzIgMTUuODY1MyAxOC4xNTc2IDE2LjE3NzkgMTcuODQ1QzE2LjQ5MDQgMTcuNTMyNSAxNi42NjYgMTcuMTA4NiAxNi42NjYgMTYuNjY2NVYxMC44MzMyTTE1LjQxNiAyLjA4MzJDMTUuNzQ3NSAxLjc1MTY4IDE2LjE5NzIgMS41NjU0MyAxNi42NjYgMS41NjU0M0MxNy4xMzQ5IDEuNTY1NDMgMTcuNTg0NSAxLjc1MTY4IDE3LjkxNiAyLjA4MzJDMTguMjQ3NSAyLjQxNDcyIDE4LjQzMzggMi44NjQzNiAxOC40MzM4IDMuMzMzMkMxOC40MzM4IDMuODAyMDQgMTguMjQ3NSA0LjI1MTY4IDE3LjkxNiA0LjU4MzJMOS45OTkzNSAxMi40OTk5TDYuNjY2MDIgMTMuMzMzMkw3LjQ5OTM1IDkuOTk5ODZMMTUuNDE2IDIuMDgzMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMjhfMTI1MzZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBwcmltYXJ5LWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0tlZXBQbGFubygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQUlRdWlja0VkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2VlcCBwbGFub1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yICBteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNzI1IDUuODAwMDhMMTAgMTAuMDA4NEwxNy4yNzUgNS44MDAwOE0xMCAxOC40MDAxVjEwLjAwMDFNMTcuNSAxMy4zMzM0VjYuNjY2NzVDMTcuNDk5NyA2LjM3NDQ4IDE3LjQyMjUgNi4wODc0MiAxNy4yNzYzIDUuODM0MzhDMTcuMTMgNS41ODEzNCAxNi45MTk4IDUuMzcxMjIgMTYuNjY2NyA1LjIyNTA4TDEwLjgzMzMgMS44OTE3NUMxMC41OCAxLjc0NTQ3IDEwLjI5MjYgMS42Njg0NiAxMCAxLjY2ODQ2QzkuNzA3NDQgMS42Njg0NiA5LjQyMDAzIDEuNzQ1NDcgOS4xNjY2NyAxLjg5MTc1TDMuMzMzMzMgNS4yMjUwOEMzLjA4MDIyIDUuMzcxMjIgMi44Njk5OCA1LjU4MTM0IDIuNzIzNzIgNS44MzQzOEMyLjU3NzQ1IDYuMDg3NDIgMi41MDAzIDYuMzc0NDggMi41IDYuNjY2NzVWMTMuMzMzNEMyLjUwMDMgMTMuNjI1NyAyLjU3NzQ1IDEzLjkxMjcgMi43MjM3MiAxNC4xNjU4QzIuODY5OTggMTQuNDE4OCAzLjA4MDIyIDE0LjYyODkgMy4zMzMzMyAxNC43NzUxTDkuMTY2NjcgMTguMTA4NEM5LjQyMDAzIDE4LjI1NDcgOS43MDc0NCAxOC4zMzE3IDEwIDE4LjMzMTdDMTAuMjkyNiAxOC4zMzE3IDEwLjU4IDE4LjI1NDcgMTAuODMzMyAxOC4xMDg0TDE2LjY2NjcgMTQuNzc1MUMxNi45MTk4IDE0LjYyODkgMTcuMTMgMTQuNDE4OCAxNy4yNzYzIDE0LjE2NThDMTcuNDIyNSAxMy45MTI3IDE3LjQ5OTcgMTMuNjI1NyAxNy41IDEzLjMzMzRaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm0tMFwiPkV4aXN0aW5nIHRlbXBsYXRlIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nYlRvb2x0aXBdPVwicGxhbm9GaXh0dXJlPy5maXh0dXJlTmFtZVwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5Nl8zMTY2NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjAwMTMgMTMuMzMzN1YxMC4wMDAzTTEwLjAwMTMgNi42NjY5OUgxMC4wMDk2TTE4LjMzNDYgMTAuMDAwM0MxOC4zMzQ2IDE0LjYwMjcgMTQuNjAzNyAxOC4zMzM3IDEwLjAwMTMgMTguMzMzN0M1LjM5ODkzIDE4LjMzMzcgMS42Njc5NyAxNC42MDI3IDEuNjY3OTcgMTAuMDAwM0MxLjY2Nzk3IDUuMzk3OTUgNS4zOTg5MyAxLjY2Njk5IDEwLjAwMTMgMS42NjY5OUMxNC42MDM3IDEuNjY2OTkgMTguMzM0NiA1LjM5Nzk1IDE4LjMzNDYgMTAuMDAwM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTZfMzE2NjRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNBcHByb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnNbMF0/LnVzZXJBY3Rpb24gPT09ICdrZWVwUGxhbm8nIHx8IGZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzWzBdPy51c2VyQWN0aW9uID09PSAnZWRpdFdpdGhQbGFubycgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiOC43NDIyOGUtMDdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiByeD1cIjEwXCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMjQ2NCA2LjE1ODM5TDguMjc5NjkgMTEuOTE2N0w2LjY5NjM1IDEwLjIyNTFDNi40MDQ2OSA5Ljk1MDA1IDUuOTQ2MzUgOS45MzMzOSA1LjYxMzAyIDEwLjE2NjdDNS4yODgwMiAxMC40MDg0IDUuMTk2MzUgMTAuODMzNCA1LjM5NjM1IDExLjE3NTFMNy4yNzEzNSAxNC4yMjUxQzcuNDU0NjkgMTQuNTA4NCA3Ljc3MTM1IDE0LjY4MzQgOC4xMjk2OSAxNC42ODM0QzguNDcxMzUgMTQuNjgzNCA4Ljc5NjM1IDE0LjUwODQgOC45Nzk2OSAxNC4yMjUxQzkuMjc5NjkgMTMuODMzNCAxNS4wMDQ3IDcuMDA4MzkgMTUuMDA0NyA3LjAwODM5QzE1Ljc1NDcgNi4yNDE3MiAxNC44NDY0IDUuNTY2NzIgMTQuMjQ2NCA2LjE1MDA1TDE0LjI0NjQgNi4xNTgzOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Zml4dHVyZSBbZml4dHVyZV09XCJwbGFub0ZpeHR1cmVcIj48L2ZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNBcHByb3ZlZCAmJiBzaG93QWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gcmVkby1idG5cIiAoY2xpY2spPVwib25DbGlja1JlZG8oKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FJUXVpY2tFZGl0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBxdWljay1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FZGl0QUlGZWVkYmFjaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQUlRdWlja0VkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMjhfMTI1MzYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjE2NjAyIDMuMzMzMkgzLjMzMjY4QzIuODkwNjUgMy4zMzMyIDIuNDY2NzMgMy41MDg3OSAyLjE1NDE3IDMuODIxMzVDMS44NDE2MSA0LjEzMzkxIDEuNjY2MDIgNC41NTc4NCAxLjY2NjAyIDQuOTk5ODZWMTYuNjY2NUMxLjY2NjAyIDE3LjEwODYgMS44NDE2MSAxNy41MzI1IDIuMTU0MTcgMTcuODQ1QzIuNDY2NzMgMTguMTU3NiAyLjg5MDY1IDE4LjMzMzIgMy4zMzI2OCAxOC4zMzMySDE0Ljk5OTNDMTUuNDQxNCAxOC4zMzMyIDE1Ljg2NTMgMTguMTU3NiAxNi4xNzc5IDE3Ljg0NUMxNi40OTA0IDE3LjUzMjUgMTYuNjY2IDE3LjEwODYgMTYuNjY2IDE2LjY2NjVWMTAuODMzMk0xNS40MTYgMi4wODMyQzE1Ljc0NzUgMS43NTE2OCAxNi4xOTcyIDEuNTY1NDMgMTYuNjY2IDEuNTY1NDNDMTcuMTM0OSAxLjU2NTQzIDE3LjU4NDUgMS43NTE2OCAxNy45MTYgMi4wODMyQzE4LjI0NzUgMi40MTQ3MiAxOC40MzM4IDIuODY0MzYgMTguNDMzOCAzLjMzMzJDMTguNDMzOCAzLjgwMjA0IDE4LjI0NzUgNC4yNTE2OCAxNy45MTYgNC41ODMyTDkuOTk5MzUgMTIuNDk5OUw2LjY2NjAyIDEzLjMzMzJMNy40OTkzNSA5Ljk5OTg2TDE1LjQxNiAyLjA4MzJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjI4XzEyNTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gcHJpbWFyeS1idG5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2tBY2NlcHRBSSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQUlRdWlja0VkaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0IHN0b3JlIHJlc3BvbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yICBteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1LjY1MDQgMTQuNjE5MUg0LjM0ODYzVjEwLjczNzNDNC4yMzgyNiAxMC43NDU1IDQuMTI2NDQgMTAuNzUgNC4wMTM2NyAxMC43NUMzLjk3MTM3IDEwLjc1IDMuOTI5NDMgMTAuNzQ2MyAzLjg4NzcgMTAuNzQ1MVYxNS44MDM3QzMuODg3ODggMTYuNDQ3IDQuNDIyMjIgMTYuOTg4MyA1LjA5ODYzIDE2Ljk4ODNIMTQuOTAwNEMxNS41NzY4IDE2Ljk4ODMgMTYuMTEwMiAxNi40NDcgMTYuMTEwNCAxNS44MDM3VjEwLjc0NTFDMTYuMDcwOCAxMC43NDYyIDE2LjAzMTEgMTAuNzUgMTUuOTkxMiAxMC43NUMxNS44NzY4IDEwLjc1IDE1Ljc2MjkgMTAuNzQ0OSAxNS42NTA0IDEwLjczNjNWMTQuNjE5MVpNMTUuNDYzOSAzLjAxMTcySDQuNTM0MThDNC40ODcyMyAzLjAxMTg3IDQuNDQ5NzMgMy4wMzc3NiA0LjQzNDU3IDMuMDYxNTJWMy4wNjI1TDIuNjc4NzEgNS44MDM3MUwyLjY2MDE2IDUuODMzMDFDMi4wNDc2OCA2LjgyNzg2IDIuNjQzMjUgOC4xMTczOSAzLjczNDM4IDguMjYzNjdDMy44MzE3NCA4LjI3NTYxIDMuOTIyMjQgOC4yODIyMiA0LjAxMDc0IDguMjgyMjNDNC41ODg4OSA4LjI4MjIzIDUuMDk5NzggOC4wMzQxOSA1LjQ1NjA1IDcuNjQ3NDZMNi4wMDk3NyA3LjA0Njg4TDYuNTYxNTIgNy42NDk0MUM2LjkxMzQxIDguMDMzNzEgNy40MjMwMSA4LjI4MjE1IDguMDA0ODggOC4yODIyM0M4LjU4NDMzIDguMjgyMjMgOS4wOTc1OSA4LjAzMzQ5IDkuNDQ5MjIgNy42NDk0MUwxMC4wMDIgNy4wNDQ5MkwxMC41NTU3IDcuNjQ5NDFDMTAuOTA3MyA4LjAzMzQ5IDExLjQyMDYgOC4yODIyMyAxMiA4LjI4MjIzQzEyLjU3OTIgOC4yODIxIDEzLjA5MTggOC4wMzMzNyAxMy40NDM0IDcuNjQ5NDFMMTMuOTk3MSA3LjA0NDkyTDE0LjU0OTggNy42NDk0MUMxNC45MDE0IDguMDMzNDkgMTUuNDE0NyA4LjI4MjIzIDE1Ljk5NDEgOC4yODIyM0MxNi4wNzkxIDguMjgyMjIgMTYuMTcxNiA4LjI3NTMzIDE2LjI2NzYgOC4yNjM2N0MxNy4zNjM1IDguMTE1MDQgMTcuOTYyMyA2LjgwMDggMTcuMzIzMiA1LjgwMzcxTDE1LjU2NDUgMy4wNjI1TDE1LjU2MzUgMy4wNjE1MkMxNS41NDgzIDMuMDM3NjkgMTUuNTExIDMuMDExNzIgMTUuNDYzOSAzLjAxMTcyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5TdG9yZSByZXNwb25zZSA8L2g0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzQXBwcm92ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzWzBdPy51c2VyQWN0aW9uID09PSAnYWNjZXB0QWknIHx8IGZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzWzBdPy51c2VyQWN0aW9uID09PSAnZWRpdFdpdGhBaSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy1hdXRvXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4yNDY0IDYuMTU4MzlMOC4yNzk2OSAxMS45MTY3TDYuNjk2MzUgMTAuMjI1MUM2LjQwNDY5IDkuOTUwMDUgNS45NDYzNSA5LjkzMzM5IDUuNjEzMDIgMTAuMTY2N0M1LjI4ODAyIDEwLjQwODQgNS4xOTYzNSAxMC44MzM0IDUuMzk2MzUgMTEuMTc1MUw3LjI3MTM1IDE0LjIyNTFDNy40NTQ2OSAxNC41MDg0IDcuNzcxMzUgMTQuNjgzNCA4LjEyOTY5IDE0LjY4MzRDOC40NzEzNSAxNC42ODM0IDguNzk2MzUgMTQuNTA4NCA4Ljk3OTY5IDE0LjIyNTFDOS4yNzk2OSAxMy44MzM0IDE1LjAwNDcgNy4wMDgzOSAxNS4wMDQ3IDcuMDA4MzlDMTUuNzU0NyA2LjI0MTcyIDE0Ljg0NjQgNS41NjY3MiAxNC4yNDY0IDYuMTUwMDVMMTQuMjQ2NCA2LjE1ODM5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vyc1swXT8udXNlckFjdGlvbiA9PT0gJ3JlZG8nIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLWF1dG9cIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjUwNjUgMTUuODMzNUM2LjkwMzQzIDE1LjgzMzUgNS43NDcwNCAxNS4zOTYgNC43ODE0OCAxNC41MjFDMy44MTU5MyAxMy42NDYgMy4zMzM0MyAxMi41NTU3IDMuMzMzOTggMTEuMjUwMkMzLjMzMzk4IDkuOTQ0NjEgMy44MTY3NiA4Ljg1NDMzIDQuNzgyMzIgNy45NzkzM0M1Ljc0Nzg3IDcuMTA0MzMgNi45MDM5OCA2LjY2NjgzIDguMjUwNjUgNi42NjY4M0gxMy41MDA3TDExLjMzNCA0LjUwMDE2TDEyLjUwMDcgMy4zMzM1TDE2LjY2NzMgNy41MDAxNkwxMi41MDA3IDExLjY2NjhMMTEuMzM0IDEwLjUwMDJMMTMuNTAwNyA4LjMzMzVIOC4yNTA2NUM3LjM3NTY1IDguMzMzNSA2LjYxNTEgOC42MTEyNyA1Ljk2ODk4IDkuMTY2ODNDNS4zMjI4NyA5LjcyMjM4IDUuMDAwMSAxMC40MTY4IDUuMDAwNjUgMTEuMjUwMkM1LjAwMDY1IDEyLjA4MzUgNS4zMjM3MSAxMi43Nzc5IDUuOTY5ODIgMTMuMzMzNUM2LjYxNTkzIDEzLjg4OTEgNy4zNzYyMSAxNC4xNjY4IDguMjUwNjUgMTQuMTY2OEgxNC4xNjczVjE1LjgzMzVIOC4yNTA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJibGFja1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzaG93QWN0aW9uICYmICFpc0FJUXVpY2tFZGl0XCIgY2xhc3M9XCJtcy1hdXRvIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBSVF1aWNrRWRpdCgpXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDE1LjAwMDJIMTUuNzVNMTIuMzc1IDIuNjI1MTdDMTIuNjczNCAyLjMyNjggMTMuMDc4IDIuMTU5MTggMTMuNSAyLjE1OTE4QzEzLjcwODkgMi4xNTkxOCAxMy45MTU4IDIuMjAwMzMgMTQuMTA4OCAyLjI4MDI5QzE0LjMwMTkgMi4zNjAyNCAxNC40NzczIDIuNDc3NDMgMTQuNjI1IDIuNjI1MTdDMTQuNzcyNyAyLjc3MjkxIDE0Ljg4OTkgMi45NDgzIDE0Ljk2OTkgMy4xNDEzMkMxNS4wNDk4IDMuMzM0MzUgMTUuMDkxIDMuNTQxMjQgMTUuMDkxIDMuNzUwMTdDMTUuMDkxIDMuOTU5MSAxNS4wNDk4IDQuMTY1OTkgMTQuOTY5OSA0LjM1OTAyQzE0Ljg4OTkgNC41NTIwNCAxNC43NzI3IDQuNzI3NDMgMTQuNjI1IDQuODc1MTdMNS4yNSAxNC4yNTAyTDIuMjUgMTUuMDAwMkwzIDEyLjAwMDJMMTIuMzc1IDIuNjI1MTdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxlZGl0YWJsZS1maXh0dXJlIFtmaXh0dXJlXT1cImFpRml4dHVyZVwiIFtlZGl0TW9kZV09XCJpc0FJUXVpY2tFZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNhbmNlbCk9XCJvbkNhbmNlbEFJUXVpY2tFZGl0KClcIiAob25Eb25lKT1cIm9uU2F2ZUFJUXVpY2tFZGl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRUYWIpPVwib25FZGl0QUlGZWVkYmFjaygkZXZlbnQpXCI+PC9lZGl0YWJsZS1maXh0dXJlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiBbbmdDbGFzc109XCJ7J2NvbC00JzpzaG93QWN0aW9uLCdjb2wnOiFzaG93QWN0aW9ufVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6c2hvd0FjdGlvbiAmJiAhaXNBcHByb3ZlZCA/ICc1MHB4JyA6ICcxMnB4J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgIG15LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5TdG9yZSBJbWFnZSA8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYoY2RuICYmIGFpRml4dHVyZT8uZml4dHVyZUltYWdlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtaW1hZ2VcIiAoY2xpY2spPVwib25DbGlja0ltYWdlUHJldmlldyhjZG4gKyBhaUZpeHR1cmU/LmZpeHR1cmVJbWFnZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJjZG4gKyBhaUZpeHR1cmU/LmZpeHR1cmVJbWFnZVwiIGFsdD1cIlN0b3JlIHJlc3BvbnNlIGltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTg2XCIgaGVpZ2h0PVwiODRcIiB2aWV3Qm94PVwiMCAwIDE4NiA4NFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMzAuMjU2IDE1LjMyODRDMTQwLjA5MiAxNS4zMjg0IDE0OC4wNjUgMjMuMzAyIDE0OC4wNjUgMzMuMTM3OUMxNDguMDY1IDM3LjIxNzYgMTUwLjgyNiA0MS44Njg0IDE1NC45MDYgNDEuODY4NEgxNjcuOTcyQzE3Ny44MDcgNDEuODY4NyAxODUuNzgxIDQ5Ljg0MjIgMTg1Ljc4MSA1OS42NzhDMTg1Ljc4MSA2OS41MTQxIDE3Ny44MDcgNzcuNDg4NSAxNjcuOTcxIDc3LjQ4ODVIODEuMzY2MkM2OS43MTg2IDc3LjQ4ODMgNTguNjM0OSA2OC40MDg0IDQ2Ljk4NzMgNjguNDA4NEg1LjkzNjUyQzIuNjU3ODIgNjguNDA4NCAwIDY1Ljc1MDYgMCA2Mi40NzE5QzAuMDAwMTI3ODIzIDU5LjE5MzMgMi42NTc5IDU2LjUzNTQgNS45MzY1MiA1Ni41MzU0SDYxLjg3MjhDNjMuMDA2OSA1Ni41MzU0IDYzLjk2NjkgNTUuNjkyOSA2NC4yODk3IDU0LjYwNTZDNjQuNzk5NCA1Mi44ODkyIDYzLjYyNjcgNTAuOTQ4NSA2MS44MzYxIDUwLjk0ODVINDMuNjUxNEMzMy44MTUzIDUwLjk0ODUgMjUuODQxOCA0Mi45NzQgMjUuODQxOCAzMy4xMzc5QzI1Ljg0MiAyMy4zMDIgMzMuODE1NCAxNS4zMjg0IDQzLjY1MTQgMTUuMzI4NEgxMzAuMjU2WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRUFFQ0YwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyNi42NjQgMjcuMzM1VjQ4LjY1TDEyMC45NTkgNDMuNzVDMTE4LjIyOSA0MS40MDUgMTEzLjgxOSA0MS40MDUgMTExLjA4OSA0My43NUw5Ni41MjkxIDU2LjI0NUM5My43OTkxIDU4LjU5IDg5LjM4OTEgNTguNTkgODYuNjU5MSA1Ni4yNDVMODUuNDY5MSA1NS4yNjVDODIuOTg0MSA1My4wOTUgNzkuMDI5MSA1Mi44ODUgNzYuMjI5MSA1NC43NzVMNTkuMDA5MSA2Ni4zMjVMNTguNjI0MSA2Ni42MDVDNTcuMzI5MSA2My44MDUgNTYuNjY0MSA2MC40OCA1Ni42NjQxIDU2LjY2NVYyNy4zMzVDNTYuNjY0MSAxNC41OTUgNjQuMjU5MSA3IDc2Ljk5OTEgN0gxMDYuMzI5QzExOS4wNjkgNyAxMjYuNjY0IDE0LjU5NSAxMjYuNjY0IDI3LjMzNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZCQ0FGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04MS4xNjQgMzYuMzI5OUM4NS43NjQ1IDM2LjMyOTkgODkuNDk0IDMyLjYwMDUgODkuNDk0IDI3Ljk5OTlDODkuNDk0IDIzLjM5OTQgODUuNzY0NSAxOS42Njk5IDgxLjE2NCAxOS42Njk5Qzc2LjU2MzUgMTkuNjY5OSA3Mi44MzQgMjMuMzk5NCA3Mi44MzQgMjcuOTk5OUM3Mi44MzQgMzIuNjAwNSA3Ni41NjM1IDM2LjMyOTkgODEuMTY0IDM2LjMyOTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTI2LjY2NSA0OC42NVY1Ni42NjVDMTI2LjY2NSA2OS40MDUgMTE5LjA3IDc3IDEwNi4zMyA3N0g3N0M2OC4wNzUgNzcgNjEuNjM1IDczLjI1NSA1OC42MjUgNjYuNjA1TDU5LjAxIDY2LjMyNUw3Ni4yMyA1NC43NzVDNzkuMDMgNTIuODg1IDgyLjk4NSA1My4wOTUgODUuNDcgNTUuMjY1TDg2LjY2IDU2LjI0NUM4OS4zOSA1OC41OSA5My44IDU4LjU5IDk2LjUzIDU2LjI0NUwxMTEuMDkgNDMuNzVDMTEzLjgyIDQxLjQwNSAxMTguMjMgNDEuNDA1IDEyMC45NiA0My43NUwxMjYuNjY1IDQ4LjY1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTM4LjA2NFwiIGN5PVwiMjguMzEyOFwiIHI9XCI0LjQwMDQyXCIgZmlsbD1cIiM2QkNBRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI0Ny44MjU2XCIgY3k9XCIzOS4yNDA5XCIgcj1cIjIuNDUyNTVcIiBmaWxsPVwiIzZCQ0FGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9XCIxMzkuMTgzXCIgY3k9XCI2MS4wMDcyXCIgcng9XCI0LjI5MTk3XCIgcnk9XCI0LjU5ODU0XCIgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBpZD1cInZtLWNvbXBhcmlzb25cIiAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlQUlEYXRhPy52bUNvbmZpZy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMVwiPlZpc3VhbCBNZXJjaGFuZGlzZSBJbWFnZXMgZnJvbSBBSSBvdXRwdXQ6PC9oNT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgQGZvciAodm0gb2YgZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVBSURhdGE/LnZtQ29uZmlnOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yXCIgW25nQ2xhc3NdPVwieydjb2wtNic6c2hvd0FjdGlvbiwgJ2NvbC0xMic6IXNob3dBY3Rpb259XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2bS1jb250YWluZXJcIiAoY2xpY2spPVwib25DbGlja0ltYWdlUHJldmlldyhjZG4rdm0/LnZtSW1hZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0taW1nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNkbit2bT8udm1JbWFnZVwiIGFsdD1cIlZNIEltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgdm0tZGV0YWlscyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+e3t2bT8udm1UeXBlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT57e3ZtPy52bU5hbWV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1wcmV2aWV3XCIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRm9yUHJldmlld1wiIChjbGljayk9XCJjbG9zZUltYWdlUHJldmlldygpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic2VsZWN0ZWRJbWFnZUZvclByZXZpZXdcIiBjbGFzcz1cImZ1bGwtaW1nXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9QGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI5NFwiIGhlaWdodD1cIjk0XCIgdmlld0JveD1cIjAgMCA5NCA5NFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiMTMuMzMzM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS45NTAyIDQ4LjE5OTdDMzUuNjQ4OSA0OC4yMzE1IDM1LjM0MjIgNDguMjUwNSAzNS4wMzEyIDQ4LjI1MDVDMzQuODYxNyA0OC4yNTA1IDM0LjY5NDQgNDguMjQzNiAzNC41MjkzIDQ4LjIzMzlWNTguNjA2OUMzNC41MjkzIDYwLjAzNDkgMzUuNzEyMyA2MS4yMjYgMzcuMjAwMiA2MS4yMjYxSDU2LjgwNDdDNTguMjkyNyA2MS4yMjYxIDU5LjQ3NTYgNjAuMDM1IDU5LjQ3NTYgNTguNjA2OVY0OC4yMzQ5QzU5LjMxMzcgNDguMjQ0MSA1OS4xNDk4IDQ4LjI1MDUgNTguOTg1NCA0OC4yNTA1QzU4LjY3MTQgNDguMjUwNSA1OC4zNjA4IDQ4LjIzMjUgNTguMDU0NyA0OC4xOTk3VjU1Ljk4NzhIMzUuOTUwMlY0OC4xOTk3Wk01Ny45MzE2IDMyLjc3MzlIMzYuMDczMkMzNS44OTU5IDMyLjc3MzkgMzUuNzQwNiAzMi44NjY3IDM1LjY2MzEgMzIuOTg3OEwzNS42NjExIDMyLjk4OTdMMzIuMTUxNCAzOC40NzMxTDMyLjA1NjYgMzguNjIwNkMzMC44MzExIDQwLjc0MDQgMzIuMDk1NyA0My40Njc0IDM0LjQ0NzMgNDMuNzc2OUMzNC42NDgyIDQzLjgwMTMgMzQuODM3OSA0My44MTU5IDM1LjAyNTQgNDMuODE1OUMzNi4yNTU1IDQzLjgxNTkgMzcuMzQzNCA0My4yODcyIDM4LjEwMDYgNDIuNDY1M0wzOS4wMjI1IDQxLjQ2NDRMMzkuOTQxNCA0Mi40NjgzQzQwLjY5MDMgNDMuMjg2MyA0MS43NzcgNDMuODE1OSA0My4wMTQ2IDQzLjgxNTlDNDQuMjQ2NyA0My44MTU4IDQ1LjMzODYgNDMuMjg1NiA0Ni4wODY5IDQyLjQ2ODNMNDcuMDA4OCA0MS40NjE0TDQ3LjkzMDcgNDIuNDY4M0M0OC42NzkgNDMuMjg1NyA0OS43NzA3IDQzLjgxNTkgNTEuMDAyOSA0My44MTU5QzUyLjIzNTEgNDMuODE1OSA1My4zMjY4IDQzLjI4NTcgNTQuMDc1MiA0Mi40NjgzTDU0Ljk5NzEgNDEuNDYxNEw1NS45MTg5IDQyLjQ2ODNDNTYuNjY3MyA0My4yODU3IDU3Ljc2IDQzLjgxNTkgNTguOTkyMiA0My44MTU5QzU5LjE3MzYgNDMuODE1OSA1OS4zNjg3IDQzLjgwMjEgNTkuNTY4NCA0My43Nzc4SDU5LjU2NzRDNjEuOTYxMSA0My40NTczIDYzLjIyOTMgNDAuNjA3OCA2MS44NjEzIDM4LjQ3MzFMNjEuODYwNCAzOC40NzQxTDU4LjM0MzggMzIuOTkwN0w1OC4zNDI4IDMyLjk4NzhDNTguMjY1MyAzMi44NjY1IDU4LjEwOTIgMzIuNzczOSA1Ny45MzE2IDMyLjc3MzlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjIuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBoMyBtdC0yXCI+Tm8gcmVzcG9uc2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+Tm8gQUkgcmVzcG9uc2UgZm91bmQgZm9yIHRoaXMgZml4dHVyZS48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBpZiAoZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8uY29tbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgPGRpdiBpZD1cImZpeHR1cmUtY29tbWVudHNcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPkNvbW1lbnRzPC9oNT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGMgb2YgZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnNbMF0/LmNvbW1lbnRzO2xldCBpPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBVc2VyIGF2YXRhciAtLT5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0VBRjhGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yMi42NjczIDIzLjVWMjEuODMzM0MyMi42NjczIDIwLjk0OTMgMjIuMzE2MSAyMC4xMDE0IDIxLjY5MSAxOS40NzYzQzIxLjA2NTkgMTguODUxMiAyMC4yMTggMTguNSAxOS4zMzQgMTguNUgxMi42NjczQzExLjc4MzMgMTguNSAxMC45MzU0IDE4Ljg1MTIgMTAuMzEwMyAxOS40NzYzQzkuNjg1MTcgMjAuMTAxNCA5LjMzMzk4IDIwLjk0OTMgOS4zMzM5OCAyMS44MzMzVjIzLjVNMTkuMzM0IDExLjgzMzNDMTkuMzM0IDEzLjY3NDMgMTcuODQxNiAxNS4xNjY3IDE2LjAwMDcgMTUuMTY2N0MxNC4xNTk3IDE1LjE2NjcgMTIuNjY3MyAxMy42NzQzIDEyLjY2NzMgMTEuODMzM0MxMi42NjczIDkuOTkyMzggMTQuMTU5NyA4LjUgMTYuMDAwNyA4LjVDMTcuODQxNiA4LjUgMTkuMzM0IDkuOTkyMzggMTkuMzM0IDExLjgzMzNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSBmbGV4LWNvbHVtblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND57e2M/LnVzZXJOYW1lfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57e2M/LnRpbWVTdGFtcCB8IGRhdGU6J2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eSd9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgQGlmKGM/LnJlc3BvbnNldHlwZSA9PT0gJ2NvbW1lbnQnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1Pnt7Yz8uY29tbWVudH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2UgaWYoYz8ucmVzcG9uc2V0eXBlID09PSAnYWdyZWUnKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPT09ICdrZWVwUGxhbm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJLZWVwIFBsYW5vXCIuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSAqbmdJZj1cImZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPT09ICdlZGl0V2l0aFBsYW5vJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2VkIGFzIFwiS2VlcCBQbGFubyB3aXRoIE1vZGlmaWNhdGlvblwiLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJmZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy51c2VyQWN0aW9uID09PSAnYWNjZXB0QWknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJBY2NlcHQgQUlcIi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2VkaXRXaXRoQWknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJBY2NlcHQgQUkgd2l0aCBNb2RpZmljYXRpb25cIi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiYz8uY29tbWVudFwiPk5vdGU6IHt7Yy5jb21tZW50fX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIH1AZWxzZSBpZihjPy5yZXNwb25zZXR5cGUgPT09ICdkaXNhZ3JlZScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJSZWRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiYz8uY29tbWVudFwiPk5vdGU6IHt7Yy5jb21tZW50fX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH1cclxuPC9zZWN0aW9uPiJdfQ==