valtech-components 4.0.962 → 4.0.964

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 (173) hide show
  1. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +3 -3
  2. package/esm2022/lib/components/atoms/box/box.component.mjs +3 -3
  3. package/esm2022/lib/components/atoms/button/button.component.mjs +3 -3
  4. package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +3 -3
  5. package/esm2022/lib/components/atoms/display/display.component.mjs +3 -3
  6. package/esm2022/lib/components/atoms/divider/divider.component.mjs +3 -3
  7. package/esm2022/lib/components/atoms/href/href.component.mjs +3 -3
  8. package/esm2022/lib/components/atoms/icon/icon.component.mjs +3 -3
  9. package/esm2022/lib/components/atoms/image/image.component.mjs +3 -3
  10. package/esm2022/lib/components/atoms/notice/notice.component.mjs +3 -3
  11. package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +3 -3
  12. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +3 -3
  13. package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +3 -3
  14. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +2 -2
  15. package/esm2022/lib/components/atoms/text/text.component.mjs +3 -3
  16. package/esm2022/lib/components/atoms/title/title.component.mjs +3 -3
  17. package/esm2022/lib/components/atoms/user-avatar/user-avatar.component.mjs +3 -3
  18. package/esm2022/lib/components/molecules/action-card/action-card.component.mjs +3 -3
  19. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +3 -3
  20. package/esm2022/lib/components/molecules/animal-card/animal-card.component.mjs +3 -3
  21. package/esm2022/lib/components/molecules/article-card/article-card.component.mjs +3 -3
  22. package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +3 -3
  23. package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +3 -3
  24. package/esm2022/lib/components/molecules/card/card.component.mjs +3 -3
  25. package/esm2022/lib/components/molecules/chat-composer/chat-composer.component.mjs +3 -3
  26. package/esm2022/lib/components/molecules/chat-input/chat-input.component.mjs +3 -3
  27. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +3 -3
  28. package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +3 -3
  29. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +3 -3
  30. package/esm2022/lib/components/molecules/comment/comment.component.mjs +4 -4
  31. package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +3 -3
  32. package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +3 -3
  33. package/esm2022/lib/components/molecules/conversation-list-item/conversation-list-item.component.mjs +3 -3
  34. package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +3 -3
  35. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +5 -5
  36. package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +7 -7
  37. package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +3 -3
  38. package/esm2022/lib/components/molecules/docs-breadcrumb/docs-breadcrumb.component.mjs +3 -3
  39. package/esm2022/lib/components/molecules/docs-code-example/docs-code-example.component.mjs +3 -3
  40. package/esm2022/lib/components/molecules/docs-nav-links/docs-nav-links.component.mjs +3 -3
  41. package/esm2022/lib/components/molecules/docs-search/docs-search.component.mjs +3 -3
  42. package/esm2022/lib/components/molecules/docs-section/docs-section.component.mjs +3 -3
  43. package/esm2022/lib/components/molecules/empty-state/empty-state.component.mjs +5 -5
  44. package/esm2022/lib/components/molecules/entity-card/entity-card.component.mjs +3 -3
  45. package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +3 -3
  46. package/esm2022/lib/components/molecules/feedback-form/feedback-form.component.mjs +3 -3
  47. package/esm2022/lib/components/molecules/field-options-editor/field-options-editor.component.mjs +5 -5
  48. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +3 -3
  49. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +3 -3
  50. package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +4 -4
  51. package/esm2022/lib/components/molecules/hint/hint.component.mjs +3 -3
  52. package/esm2022/lib/components/molecules/image-crop/image-crop.component.mjs +3 -3
  53. package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +3 -3
  54. package/esm2022/lib/components/molecules/link/link.component.mjs +3 -3
  55. package/esm2022/lib/components/molecules/linked-providers/linked-providers.component.mjs +5 -5
  56. package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +3 -3
  57. package/esm2022/lib/components/molecules/media-object/media-object.component.mjs +3 -3
  58. package/esm2022/lib/components/molecules/message-bubble/message-bubble.component.mjs +3 -3
  59. package/esm2022/lib/components/molecules/metadata-list/metadata-list.component.mjs +3 -3
  60. package/esm2022/lib/components/molecules/metric-card/metric-card.component.mjs +3 -3
  61. package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +3 -3
  62. package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +3 -3
  63. package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +3 -3
  64. package/esm2022/lib/components/molecules/operation-reference/operation-reference.component.mjs +3 -3
  65. package/esm2022/lib/components/molecules/option-cards/option-cards.component.mjs +5 -5
  66. package/esm2022/lib/components/molecules/page-links/page-links.component.mjs +3 -3
  67. package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +3 -3
  68. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +3 -3
  69. package/esm2022/lib/components/molecules/permission-selector/permission-selector.component.mjs +5 -5
  70. package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +3 -3
  71. package/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
  72. package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +3 -3
  73. package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +3 -3
  74. package/esm2022/lib/components/molecules/profile-card/profile-card.component.mjs +3 -3
  75. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +5 -5
  76. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +3 -3
  77. package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +3 -3
  78. package/esm2022/lib/components/molecules/rating/rating.component.mjs +3 -3
  79. package/esm2022/lib/components/molecules/reaction-bar/reaction-bar.component.mjs +3 -3
  80. package/esm2022/lib/components/molecules/request-form/request-form.component.mjs +3 -3
  81. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +3 -3
  82. package/esm2022/lib/components/molecules/section-header/section-header.component.mjs +3 -3
  83. package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +3 -3
  84. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +3 -3
  85. package/esm2022/lib/components/molecules/select-search/select-search-picker-modal.component.mjs +3 -3
  86. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +3 -3
  87. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +4 -4
  88. package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +3 -3
  89. package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +3 -3
  90. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +3 -3
  91. package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +3 -3
  92. package/esm2022/lib/components/molecules/ticket-card/ticket-card.component.mjs +3 -3
  93. package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +3 -3
  94. package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +3 -3
  95. package/esm2022/lib/components/molecules/typing-indicator/typing-indicator.component.mjs +3 -3
  96. package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +3 -3
  97. package/esm2022/lib/components/molecules/usage-meters/usage-meters.component.mjs +3 -3
  98. package/esm2022/lib/components/molecules/username-input/username-input.component.mjs +3 -3
  99. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +3 -3
  100. package/esm2022/lib/components/organisms/access-request-view/access-request-view.component.mjs +5 -5
  101. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +7 -7
  102. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +3 -3
  103. package/esm2022/lib/components/organisms/article/article.component.mjs +3 -3
  104. package/esm2022/lib/components/organisms/attachment-uploader/attachment-uploader.component.mjs +3 -3
  105. package/esm2022/lib/components/organisms/auth-cta/auth-cta.component.mjs +3 -3
  106. package/esm2022/lib/components/organisms/banner/banner.component.mjs +3 -3
  107. package/esm2022/lib/components/organisms/bottom-nav/bottom-nav.component.mjs +3 -3
  108. package/esm2022/lib/components/organisms/chat-window/chat-window.component.mjs +3 -3
  109. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +5 -5
  110. package/esm2022/lib/components/organisms/confirmation-dialog-v2/confirmation-dialog-v2.component.mjs +3 -3
  111. package/esm2022/lib/components/organisms/cookie-banner/cookie-banner.component.mjs +3 -3
  112. package/esm2022/lib/components/organisms/cookie-settings/cookie-settings.component.mjs +5 -5
  113. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +3 -3
  114. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +3 -3
  115. package/esm2022/lib/components/organisms/docs-sidebar/docs-sidebar.component.mjs +3 -3
  116. package/esm2022/lib/components/organisms/docs-toc/docs-toc.component.mjs +3 -3
  117. package/esm2022/lib/components/organisms/faq/faq.component.mjs +3 -3
  118. package/esm2022/lib/components/organisms/field-list/field-list.component.mjs +5 -5
  119. package/esm2022/lib/components/organisms/folder-tabs/folder-tabs.component.mjs +3 -3
  120. package/esm2022/lib/components/organisms/form/form.component.mjs +5 -5
  121. package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +3 -3
  122. package/esm2022/lib/components/organisms/group-members/group-members.component.mjs +3 -3
  123. package/esm2022/lib/components/organisms/header/header.component.mjs +3 -3
  124. package/esm2022/lib/components/organisms/infinite-list/infinite-list.component.mjs +7 -7
  125. package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +3 -3
  126. package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +11 -11
  127. package/esm2022/lib/components/organisms/login/login.component.mjs +3 -3
  128. package/esm2022/lib/components/organisms/login-attempt-modal/login-attempt-modal.component.mjs +6 -6
  129. package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +5 -5
  130. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +5 -5
  131. package/esm2022/lib/components/organisms/menu/menu.component.mjs +3 -3
  132. package/esm2022/lib/components/organisms/mfa-modal/mfa-modal.component.mjs +3 -3
  133. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +3 -3
  134. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +3 -3
  135. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +3 -3
  136. package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +3 -3
  137. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +7 -7
  138. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +5 -5
  139. package/esm2022/lib/components/organisms/option-sheet/option-sheet.component.mjs +3 -3
  140. package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +3 -3
  141. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +5 -5
  142. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +11 -11
  143. package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.component.mjs +3 -3
  144. package/esm2022/lib/components/organisms/request-review-panel/request-review-panel.component.mjs +7 -7
  145. package/esm2022/lib/components/organisms/role-manager/role-manager.component.mjs +7 -7
  146. package/esm2022/lib/components/organisms/rotating-text/rotating-text.component.mjs +3 -3
  147. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +5 -5
  148. package/esm2022/lib/components/organisms/session-list-modal/session-list-modal.component.mjs +3 -3
  149. package/esm2022/lib/components/organisms/share-profile-modal/share-profile-modal.component.mjs +3 -3
  150. package/esm2022/lib/components/organisms/thread-panel/thread-panel.component.mjs +3 -3
  151. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
  152. package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +5 -5
  153. package/esm2022/lib/components/organisms/verify-view/verify-view.component.mjs +3 -3
  154. package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +3 -3
  155. package/esm2022/lib/components/templates/docs-layout/docs-layout.component.mjs +3 -3
  156. package/esm2022/lib/components/templates/docs-page/docs-page.component.mjs +3 -3
  157. package/esm2022/lib/components/templates/maintenance-page/maintenance-page.component.mjs +3 -3
  158. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +3 -3
  159. package/esm2022/lib/components/templates/simple/simple.component.mjs +3 -3
  160. package/esm2022/lib/services/confirmation-dialog/types.mjs +2 -2
  161. package/esm2022/lib/services/content/transformer.mjs +3 -3
  162. package/esm2022/lib/services/markdown-article/beautify-legal-article.mjs +2 -2
  163. package/esm2022/lib/services/markdown-article/markdown-article-parser.mjs +2 -2
  164. package/esm2022/lib/services/modal/types.mjs +2 -2
  165. package/esm2022/lib/version.mjs +2 -2
  166. package/fesm2022/valtech-components.mjs +406 -406
  167. package/fesm2022/valtech-components.mjs.map +1 -1
  168. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  169. package/lib/version.d.ts +1 -1
  170. package/package.json +1 -1
  171. package/src/lib/components/styles/_docs-page.scss +1 -1
  172. package/src/lib/components/styles/overrides.scss +4 -4
  173. package/src/lib/components/styles/variables.scss +7 -7
@@ -470,7 +470,7 @@ export class NotificationPreferencesViewComponent {
470
470
  <val-text
471
471
  [props]="{
472
472
  size: 'small',
473
- color: 'medium',
473
+ color: 'dark',
474
474
  bold: false,
475
475
  content: tt('iosInstallHint'),
476
476
  }"
@@ -502,7 +502,7 @@ export class NotificationPreferencesViewComponent {
502
502
  <val-text
503
503
  [props]="{
504
504
  size: 'small',
505
- color: 'medium',
505
+ color: 'dark',
506
506
  bold: false,
507
507
  content: tt('simpleDescription'),
508
508
  }"
@@ -563,7 +563,7 @@ export class NotificationPreferencesViewComponent {
563
563
  }
564
564
  </div>
565
565
  </val-container>
566
- `, isInline: true, styles: [".page{padding:16px 0}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
566
+ `, isInline: true, styles: [".page{padding:16px 0}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-dark, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-dark, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-dark, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ToggleInputComponent, selector: "val-toggle-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ContainerComponent, selector: "val-container", inputs: ["props"] }] }); }
567
567
  }
568
568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationPreferencesViewComponent, decorators: [{
569
569
  type: Component,
@@ -604,7 +604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
604
604
  <val-text
605
605
  [props]="{
606
606
  size: 'small',
607
- color: 'medium',
607
+ color: 'dark',
608
608
  bold: false,
609
609
  content: tt('iosInstallHint'),
610
610
  }"
@@ -636,7 +636,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
636
636
  <val-text
637
637
  [props]="{
638
638
  size: 'small',
639
- color: 'medium',
639
+ color: 'dark',
640
640
  bold: false,
641
641
  content: tt('simpleDescription'),
642
642
  }"
@@ -697,8 +697,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
697
697
  }
698
698
  </div>
699
699
  </val-container>
700
- `, styles: [".page{padding:16px 0}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-medium, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-medium, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-medium, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-medium, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"] }]
700
+ `, styles: [".page{padding:16px 0}.page-header{margin-bottom:8px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-body{margin-top:16px;display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.notif-row{display:grid;grid-template-columns:44px 1fr auto;gap:16px;align-items:center}.notif-row__icon{width:44px;height:44px;border-radius:50%;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:center;justify-content:center}.notif-row__icon ion-icon{font-size:22px;color:var(--ion-color-dark, #1a1a1a)}.notif-row__body{display:flex;flex-direction:column;gap:4px;min-width:0}.notif-row__busy{font-size:12px;color:var(--ion-color-dark, #92949c);font-style:italic;margin-top:4px}.notif-row__control{flex-shrink:0}.alert{display:flex;gap:10px;align-items:flex-start;margin-top:12px;padding:12px 14px;border-radius:10px;font-size:13px;line-height:1.45;background:var(--ion-color-light, rgba(0, 0, 0, .04));color:var(--ion-color-dark, #1a1a1a)}.alert ion-icon{font-size:18px;flex-shrink:0;margin-top:1px}.alert--warning ion-icon{color:var(--ion-color-warning-shade, #c79e08)}.alert--danger ion-icon{color:var(--ion-color-danger-shade, #cf3c4f)}.alert--info ion-icon{color:var(--ion-color-dark, #6b6b6b)}.install-steps{margin:0;padding-left:20px;font-size:13px;line-height:1.6;color:var(--ion-color-dark, #1a1a1a)}.install-steps li+li{margin-top:4px}.details-toggle{display:flex;align-items:center;gap:6px;background:none;border:0;padding:0;font-size:13px;color:var(--ion-color-dark, #6b6b6b);cursor:pointer}.details-toggle ion-icon{font-size:14px}.details{margin:12px 0 0;display:flex;flex-direction:column;gap:6px}.details__row{display:grid;grid-template-columns:140px 1fr;gap:12px;font-size:12px;align-items:baseline}.details__row dt{margin:0;color:var(--ion-color-dark, #6b6b6b);text-transform:uppercase;letter-spacing:.4px;font-weight:500}.details__row dd{margin:0;color:var(--ion-color-dark, #1a1a1a);font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px;word-break:break-all}.details__token{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.details__copy{flex-shrink:0;border:none;background:transparent;padding:0;color:var(--ion-color-primary, #0054e9);font-family:inherit;font-size:11px;font-weight:600;text-transform:none;letter-spacing:normal;cursor:pointer}.details__copy:hover{text-decoration:underline}\n"] }]
701
701
  }], ctorParameters: () => [], propDecorators: { config: [{
702
702
  type: Input
703
703
  }] } });
704
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVB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QUFvQiwwRkFDcEIsZUFBZSwwR0FDZixnQkFBZ0IsMkVBQ2hCLGNBQWMseUVBQ2QsYUFBYSx3RUFDYixrQkFBa0I7OzRGQWtTVCxvQ0FBb0M7a0JBNVNoRCxTQUFTOytCQUNFLG1DQUFtQyxjQUNqQyxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isa0JBQWtCO3FCQUNuQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBIVDt3REF3TFEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYWxlcnRDaXJjbGVPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25VcE91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc09mZk91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICByZWZyZXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9jb250YWluZXIvY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90b2dnbGUtaW5wdXQvdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuaW1wb3J0IHsgRW5hYmxlUHVzaFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9tZXNzYWdpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOT1RJRklDQVRJT05fUFJFRkVSRU5DRVNfVklFV19JMThOIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5pMThuJztcblxuYWRkSWNvbnMoe1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLk5vdGlmaWNhdGlvbnMnO1xuXG4vKipcbiAqIEVzdGFkb3MgZGUgbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzIHB1c2g6XG4gKiAgLSBgaWRsZWA6ICAgICAgICAgIHRvZ2dsZSBvZmYsIHNpbiBvcGVyYWNpw7NuIGVuIGN1cnNvLCBzaW4gZXJyb3Jlc1xuICogIC0gYGVuYWJsaW5nYDogICAgICBzZWN1ZW5jaWEgZGUgYWN0aXZhY2nDs24gZW4gY3Vyc28gKHRvZ2dsZSBzcGlubmVyKVxuICogIC0gYGVuYWJsZWRgOiAgICAgICB0b2RvIE9LIChtYXN0ZXI9dHJ1ZSArIHBlcm1pc3Npb249Z3JhbnRlZCArIHRva2VuIHJlZ2lzdHJhZG8pXG4gKiAgLSBgZGlzYWJsaW5nYDogICAgIGRlc2FjdGl2YWNpw7NuIGVuIGN1cnNvXG4gKiAgLSBgZXJyb3JgOiAgICAgICAgIMO6bHRpbW8gaW50ZW50byBmYWxsw7Mg4oaSIG1lbnNhamUgKyBib3TDs24gXCJSZWludGVudGFyXCJcbiAqICAtIGBibG9ja2VkYDogICAgICAgbmF2ZWdhZG9yIGRlbmVnw7MgcGVybWlzb3Mg4oaSIG1lbnNhamUgKyBjw7NtbyBhcnJlZ2xhclxuICogIC0gYHVuc3VwcG9ydGVkYDogICBuYXZlZ2Fkb3Igbm8gc29wb3J0YSBGQ00g4oaSIG1lbnNhamVcbiAqICAtIGBuZWVkcy1pbnN0YWxsYDogaU9TIHNpbiBzdGFuZGFsb25lIOKGkiBpbnN0cnVjY2lvbmVzIGRlIGluc3RhbGFjacOzbiBQV0FcbiAqL1xudHlwZSBVaVN0YXRlID0gJ2lkbGUnIHwgJ2VuYWJsaW5nJyB8ICdlbmFibGVkJyB8ICdkaXNhYmxpbmcnIHwgJ2Vycm9yJyB8ICdibG9ja2VkJyB8ICd1bnN1cHBvcnRlZCcgfCAnbmVlZHMtaW5zdGFsbCc7XG5cbi8qKlxuICogYHZhbC1ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlld2Ag4oCUICoqcHJlZmVyZW5jaWFzIGRlIG5vdGlmaWNhY2lvbmVzIHB1c2gqKlxuICogKEZDTSkgZnVsbC1mZWF0dXJlIGF1dG9jb250ZW5pZGEgKG9yZ2FuaXNtKS4gUHJvbW92aWRhIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbFxuICogcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqIFNlcGFyYWRhIGRlIGB2YWwtbm90aWZpY2F0aW9ucy12aWV3YCAoZWwgaW5ib3ggLyBmZWVkKS4gQXF1w60gZWwgdXNlciAqKmFjdGl2YSBvXG4gKiBkZXNhY3RpdmEqKiBsYXMgbm90aWZpY2FjaW9uZXMgcHVzaCBlbiBlc3RlIGRpc3Bvc2l0aXZvLlxuICpcbiAqIFVYIHNpbXBsaWZpY2FkbzogVU4gc29sbyB0b2dnbGUgcXVlIGVqZWN1dGEgdG9kYSBsYSBzZWN1ZW5jaWEgKHBlZGlyIHBlcm1pc28g4oaSXG4gKiBTVyByZWFkeSDihpIgZ2V0VG9rZW4g4oaSIHJlZ2lzdHJhciBlbiBiYWNrZW5kIOKGkiBzZXQgbWFzdGVyIHByZWYpIHbDrWFcbiAqIGBNZXNzYWdpbmdTZXJ2aWNlLmVuYWJsZSgpYC4gRWwgcmVnaXN0cm8gZGVsIGRldmljZSBlbiBlbCBiYWNrZW5kIHZhIGNvbW9cbiAqIGNhbGxiYWNrIChsYSBsaWIgbm8gZGVwZW5kZSBkZSBgQXV0aFNlcnZpY2VgIHBhcmEgZXZpdGFyIGNpY2xvcykuIE1lbnNhamVzXG4gKiBjb250ZXh0dWFsZXMgeSBib3TDs24gXCJSZWludGVudGFyXCIgYXBhcmVjZW4gc29sbyBjdWFuZG8gYXBsaWNhbi5cbiAqXG4gKiBOTyByZW5kZXJpemEgaW9uLWNvbnRlbnQg4oCUIHZpdmUgZGVudHJvIGRlIHZhbC1wYWdlLXdyYXBwZXIuIGBBY3RpdmF0ZWRSb3V0ZWAgc2VcbiAqIGlueWVjdGEgYHsgb3B0aW9uYWw6IHRydWUgfWAg4oaSIGZ1bmNpb25hIHNpbiByb3V0ZXIgKGVtYmViaWRhIC8gU3Rvcnlib29rKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkljb24sXG4gICAgVG9nZ2xlSW5wdXRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHZhbC1jb250YWluZXIgW3Byb3BzXT1cInsgc2l6ZTogJ21kJywgcGFkZGluZzogJ25vbmUnIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJykge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbFRpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpb3NJbnN0YWxsSGludCcpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8b2wgY2xhc3M9XCJpbnN0YWxsLXN0ZXBzXCI+XG4gICAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDEnKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDInKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDMnKSB9fTwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPnt7IHR0KCdpb3NJbnN0YWxsU3RlcDQnKSB9fTwvbGk+XG4gICAgICAgICAgICAgIDwvb2w+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93X19pY29uXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibm90aWZpY2F0aW9ucy1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fYm9keVwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc2ltcGxlVGl0bGUnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdzaW1wbGVEZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICBAaWYgKGJ1c3lMYWJlbCgpOyBhcyBsYWJlbCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm90aWYtcm93X19idXN5XCI+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19fY29udHJvbFwiPlxuICAgICAgICAgICAgICA8dmFsLXRvZ2dsZS1pbnB1dCBbcHJvcHNdPVwidG9nZ2xlUHJvcHMoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIEBpZiAoY29udGV4dE1lc3NhZ2UoKTsgYXMgbXNnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRcIiBbY2xhc3NdPVwiJ2FsZXJ0LS0nICsgYWxlcnRWYXJpYW50KClcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImFsZXJ0SWNvbigpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbXNnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChzdGF0ZSgpID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblJldHJ5KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dEZXRhaWxzICYmIHN0YXRlKCkgIT09ICduZWVkcy1pbnN0YWxsJyAmJiBzdGF0ZSgpICE9PSAndW5zdXBwb3J0ZWQnKSB7XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlscy10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZURldGFpbHMoKVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBzaG93RGV0YWlscygpID8gdHQoJ2RldGFpbHNIaWRlJykgOiB0dCgnZGV0YWlsc1Nob3cnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInNob3dEZXRhaWxzKCkgPyAnY2hldnJvbi11cC1vdXRsaW5lJyA6ICdjaGV2cm9uLWRvd24tb3V0bGluZSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICBAaWYgKHNob3dEZXRhaWxzKCkpIHtcbiAgICAgICAgICAgICAgPGRsIGNsYXNzPVwiZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxkdD57eyB0dCgnZGV0YWlsc1Rva2VuJykgfX08L2R0PlxuICAgICAgICAgICAgICAgICAgPGRkIGNsYXNzPVwiZGV0YWlsc19fdG9rZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdG9rZW5QcmV2aWV3KCkgPz8gdHQoJ2RldGFpbHNOb25lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY3VycmVudFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZGV0YWlsc19fY29weVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY29weVRva2VuKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHR0KCdkZXRhaWxzQ29weScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkaWFnbm9zdGljc1Blcm1pc3Npb24nKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgICA8ZGQ+e3sgcGVybWlzc2lvbigpIH19PC9kZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RpYWdub3N0aWNzU3VwcG9ydGVkJykgfX08L2R0PlxuICAgICAgICAgICAgICAgICAgPGRkPnt7IGlzU3VwcG9ydGVkKCkgPyAn4pyTJyA6ICfinJcnIH19PC9kZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvdmFsLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogQW5jaG8geSBjcmVjaW1pZW50byBjb24gZWwgcmFpbCBjb2xhcHNhZG8gbG9zIGRhIHZhbC1jb250YWluZXIgKHNpemVcbiAgICAgICAgICdtZCcpLCBubyBDU1MgbG9jYWw6IHZlciBjb250YWluZXIuY29tcG9uZW50LnNjc3MuICovXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWJvZHkge1xuICAgICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuXG4gICAgICAubm90aWYtcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0NHB4IDFmciBhdXRvO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19pY29uIHtcbiAgICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICAgIGhlaWdodDogNDRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2ljb24gaW9uLWljb24ge1xuICAgICAgICBmb250LXNpemU6IDIycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2J1c3kge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19jb250cm9sIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5hbGVydCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS40NTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydCBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0td2FybmluZyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZy1zaGFkZSwgI2M3OWUwOCk7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLWRhbmdlciBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlLCAjY2YzYzRmKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0taW5mbyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjNmI2YjZiKTtcbiAgICAgIH1cblxuICAgICAgLmluc3RhbGwtc3RlcHMge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS42O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMxYTFhMWEpO1xuICAgICAgfVxuICAgICAgLmluc3RhbGwtc3RlcHMgbGkgKyBsaSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgIH1cblxuICAgICAgLmRldGFpbHMtdG9nZ2xlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzLXRvZ2dsZSBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzIHtcbiAgICAgICAgbWFyZ2luOiAxMnB4IDAgMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxNDBweCAxZnI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICB9XG4gICAgICAuZGV0YWlsc19fcm93IGR0IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzZiNmI2Yik7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cgZGQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3Rva2VuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX2NvcHkge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMDA1NGU5KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19jb3B5OmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gIHByaXZhdGUgcGFnZVJlZnJlc2ggPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgcHJlZnMgPSBpbmplY3QoUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgLy8gYEFjdGl2YXRlZFJvdXRlYCBvcGNpb25hbCDihpIgbGEgdmlzdGEgZnVuY2lvbmEgZW1iZWJpZGEgLyBlbiBTdG9yeWJvb2sgc2luXG4gIC8vIHJvdXRlciAoc29sbyBsbyB1c2EgcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnIGNvbW8gZmFsbGJhY2spLlxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZ2AgKHBvYmxhZG8gcG9yXG4gICAqIGBwcm92aWRlVmFsdGVjaE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUm91dGVzYCkuIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvblxuICAgKiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnLCAnb25QdXNoRW5hYmxlZCcgfCAnb25QdXNoRGlzYWJsZWQnPj4gJlxuICAgICAgUGljazxOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcsICdvblB1c2hFbmFibGVkJyB8ICdvblB1c2hEaXNhYmxlZCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZyddID8/XG4gICAgICB7fSkgYXMgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0RldGFpbHM6IG1lcmdlZC5zaG93RGV0YWlscyA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBvblB1c2hFbmFibGVkOiBtZXJnZWQub25QdXNoRW5hYmxlZCxcbiAgICAgIG9uUHVzaERpc2FibGVkOiBtZXJnZWQub25QdXNoRGlzYWJsZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIC8qKiBPcGVyYWNpw7NuIGVuIGN1cnNvIChnb2JpZXJuYSBzcGlubmVyIGRlbCB0b2dnbGUgKyBsYWJlbCBcIkFjdGl2YW5kb+KAplwiKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYnVzeSA9IHNpZ25hbDxudWxsIHwgJ2VuYWJsaW5nJyB8ICdkaXNhYmxpbmcnPihudWxsKTtcbiAgLyoqIFRydWUgc2kgZWwgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDigJQgZ29iaWVybmEgZXN0YWRvIGBlcnJvcmAgKyByZXRyeSBidXR0b24uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSByZS1vYnRpZW5lIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kIChubyBhZmVjdGEgbGEgVUkpLiAqL1xuICBwcml2YXRlIF9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAvKiogVG9nZ2xlIGRlbCBleHBhbmQgZGUgZGV0YWxsZXMgdMOpY25pY29zLiAqL1xuICByZWFkb25seSBzaG93RGV0YWlscyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbiA9IHNpZ25hbDxOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGU+KCdkZWZhdWx0Jyk7XG4gIHJlYWRvbmx5IGlzU3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFRva2VuID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBuZWVkc0lPU0luc3RhbGwgPSBzaWduYWwodGhpcy5kZXRlY3ROZWVkc0lPU0luc3RhbGwoKSk7XG5cbiAgLyoqIEZvcm1Db250cm9sIGRlbCB0b2dnbGUgKHN5bmMtZWFkbyBjb24gYGlzRW5hYmxlZGAgdmlhIGVmZmVjdCkuICovXG4gIHJlYWRvbmx5IHRvZ2dsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqIEhhbmRsZXIgZGVsIGxpc3RlbmVyIGBmb2N1c2Ag4oCUIHJlZmVyZW5jaWEgZ3VhcmRhZGEgcGFyYSBwb2RlciByZW1vdmVybG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb25XaW5kb3dGb2N1cyA9ICgpID0+IHRoaXMuc2NoZWR1bGVCcm93c2VyUmVmcmVzaCgpO1xuICAvKiogVGltZXIgZGVsIGRlYm91bmNlIGRlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSBmb2N1c0RlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBWZW50YW5hIGRlIGRlYm91bmNlIChtcykgcGFyYSBlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBGT0NVU19ERUJPVU5DRV9NUyA9IDUwMDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRXN0YWRvIGRlcml2YWRvXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZWZlY3Rpdm8gZGVsIHRvZ2dsZTogXCJlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvXCIuXG4gICAqXG4gICAqIFNlIGRlcml2YSBTT0xPIGRlIGxhIGRlY2lzacOzbiBkZWwgdXN1YXJpbyAoYG1hc3RlcmApIHkgZGVsIHBlcm1pc28gZGVsIFNPXG4gICAqIChgcGVybWlzc2lvbmApLiBFbCB0b2tlbiBGQ00gTk8gZm9ybWEgcGFydGUgZGVsIGVzdGFkbyBkZSBVSTogdml2ZSBlblxuICAgKiBtZW1vcmlhLCBzZSBwaWVyZGUgZW4gY2FkYSByZWNhcmdhL3N1c3BlbnNpw7NuIGRlIGxhIFBXQSB5IHByb2R1Y2lyw61hIGZsaWNrZXIuXG4gICAqIFNpIGZhbHRhIHRva2VuIGNvbiBgbWFzdGVyICYmIGdyYW50ZWRgLCBlcyB1biBkZXRhbGxlIHJlcGFyYWJsZSBlblxuICAgKiBiYWNrZ3JvdW5kICh2ZXIgYHJlcGFpclRva2VuSWZOZWVkZWRgKSwgbm8gdW4gY2FtYmlvIGRlbCB0b2dnbGUuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSAmJiB0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ2dyYW50ZWQnKTtcblxuICByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkPFVpU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5uZWVkc0lPU0luc3RhbGwoKSkgcmV0dXJuICduZWVkcy1pbnN0YWxsJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcgfHwgIXRoaXMuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgLy8gaU9TIHN0YW5kYWxvbmUgYcO6biBwdWVkZSBkYXIgaXNTdXBwb3J0ZWQgZmFsc2UgdGVtcHJhbm8gYW50ZXMgZGUgaW5pdCDigJRcbiAgICAgIC8vIHNvbG8gYmxvcXVlYW1vcyBzaSBlbCBicm93c2VyIGV4cGzDrWNpdGFtZW50ZSBubyBzb3BvcnRhIEFQSXMuXG4gICAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICBjb25zdCBidXN5ID0gdGhpcy5fYnVzeSgpO1xuICAgIGlmIChidXN5ID09PSAnZW5hYmxpbmcnKSByZXR1cm4gJ2VuYWJsaW5nJztcbiAgICBpZiAoYnVzeSA9PT0gJ2Rpc2FibGluZycpIHJldHVybiAnZGlzYWJsaW5nJztcbiAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuICdlbmFibGVkJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICdkZW5pZWQnKSByZXR1cm4gJ2Jsb2NrZWQnO1xuICAgIGlmICh0aGlzLl9sYXN0RmFpbGVkKCkpIHJldHVybiAnZXJyb3InO1xuICAgIHJldHVybiAnaWRsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJ1c3lMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZW5hYmxpbmcnKSByZXR1cm4gdGhpcy50dCgnZW5hYmxpbmcnKTtcbiAgICBpZiAocyA9PT0gJ2Rpc2FibGluZycpIHJldHVybiB0aGlzLnR0KCdkaXNhYmxpbmcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKCkpIHtcbiAgICAgIGNhc2UgJ3Vuc3VwcG9ydGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ3Blcm1pc3Npb25VbnN1cHBvcnRlZCcpO1xuICAgICAgY2FzZSAnYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdwZXJtaXNzaW9uRGVuaWVkSW5mbycpO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgnZXJyb3JHZW5lcmljJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0VmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZXJyb3InIHx8IHMgPT09ICdibG9ja2VkJykgcmV0dXJuICd3YXJuaW5nJztcbiAgICBpZiAocyA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICdkYW5nZXInO1xuICAgIHJldHVybiAnaW5mbyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0SWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ2Nsb3NlLWNpcmNsZS1vdXRsaW5lJztcbiAgICByZXR1cm4gJ2FsZXJ0LWNpcmNsZS1vdXRsaW5lJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG9nZ2xlUHJvcHMgPSBjb21wdXRlZDxUb2dnbGVJbnB1dE1ldGFkYXRhPigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMudG9nZ2xlQ29udHJvbCxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOlxuICAgICAgdGhpcy5fYnVzeSgpICE9PSBudWxsIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICd1bnN1cHBvcnRlZCcgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ25lZWRzLWluc3RhbGwnIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICdibG9ja2VkJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyZXRyeUN0YScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBpY29uOiB7IG5hbWU6ICdyZWZyZXNoLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgc3RhdGU6IHRoaXMuX2J1c3koKSAhPT0gbnVsbCA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0b2tlblByZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKCF0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7dC5zbGljZSgwLCAyMil94oCmJHt0LnNsaWNlKC02KX1gO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgTk9USUZJQ0FUSU9OX1BSRUZFUkVOQ0VTX1ZJRVdfSTE4Tik7XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG5cbiAgICB2b2lkIHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuXG4gICAgLy8gUmUtYXBsaWNhciBoZWFkZXIgZW4gY2FtYmlvIGRlIGlkaW9tYS5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIFN5bmMgRm9ybUNvbnRyb2wg4oaQ4oaSIGVzdGFkbyBlZmVjdGl2by4gQ3VhbmRvIGVsIGVzdGFkbyBjYW1iaWEgKGNhbWJpbyBkZVxuICAgIC8vIHBlcm1pc3Npb24gcG9yIGVsIGJyb3dzZXIsIG8gc25hcHNob3QgRmlyZXN0b3JlIGRlIGBtYXN0ZXJgKSwgZWwgdG9nZ2xlIHNlXG4gICAgLy8gcmUtYWxpbmVhIGNvbiBsYSByZWFsaWRhZC5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVEU6IHNlIGlnbm9yYW4gbG9zIGNhbWJpb3MgbWllbnRyYXMgaGF5IHVuYSBvcGVyYWNpw7NuIGVuIGN1cnNvXG4gICAgLy8gKGBfYnVzeSgpICE9PSBudWxsYCkuIER1cmFudGUgYG9uRW5hYmxlYC9gb25EaXNhYmxlYCBsYXMgc2XDsWFsZXMgZnVlbnRlIHNlXG4gICAgLy8gYWN0dWFsaXphbiBlbiBtb21lbnRvcyBkaXN0aW50b3MgeSBwcm9kdWNpcsOtYW4gZXN0YWRvcyBpbnRlcm1lZGlvcyDihpJcbiAgICAvLyBmbGlja2VyIHZpc2libGUuIEVsIHRvZ2dsZSBzZSByZS1hbGluZWEgVU5BIHNvbGEgdmV6IGVuIGVsIGBmaW5hbGx5YC5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVmZiA9IHRoaXMuaXNFbmFibGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlQ29udHJvbC52YWx1ZSAhPT0gZWZmKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVDb250cm9sLnNldFZhbHVlKGVmZiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEludGVyY2VwdGFyIGNsaWNrIGRlbCB1c2VyOiBlbCB0b2dnbGUgeWEgY2FtYmnDsyB2aXN1YWxtZW50ZSwgZWplY3V0YXJcbiAgICAvLyBsYSBhY2Npw7NuIGNvcnJlc3BvbmRpZW50ZS5cbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgIGlmICh2ICYmICF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkVuYWJsZSgpO1xuICAgICAgfSBlbHNlIGlmICghdiAmJiB0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERldGVjdGFyIHJlZ3Jlc28gYSBsYSBwZXN0YcOxYSDigJQgZWwgdXNlciBwdWRvIGhhYmVyIGNhbWJpYWRvIHBlcm1pc29zXG4gICAgLy8gZGVzZGUgbGEgY29uZmlnIGRlbCBicm93c2VyLiBFbCByZWZyZXNoIHZhIGNvbiBkZWJvdW5jZSBwYXJhIG5vXG4gICAgLy8gZGlzcGFyYXJzZSBlbiByw6FmYWdhcyAoZW4gUFdBIG1vYmlsZSBgZm9jdXNgIHNhbHRhIGNvbiBjYWRhIGNhbWJpbyBkZVxuICAgIC8vIGFwcCAvIGFwYXJpY2nDs24gZGVsIHRlY2xhZG8pLiBFbCBsaXN0ZW5lciBzZSByZW11ZXZlIGVuIG5nT25EZXN0cm95LlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhci4gQXVucXVlIGVzdGEgdmlzdGEgbm8gbXVlc3RyYSB1bmFcbiAgICogbGlzdGEgcmVtb3RhLCBzw60gcmVmbGVqYSBlc3RhZG8gbXV0YWJsZSBkZWwgYnJvd3NlciAocGVybWlzbywgdG9rZW4sXG4gICAqIHNvcG9ydGUgRkNNKSBxdWUgcHVlZGUgY2FtYmlhciBmdWVyYSBkZSBsYSBhcHAg4oCUIGVsIHJlZnJlc2ggcmUtZXZhbMO6YSB0b2RvLlxuICAgKlxuICAgKiBTZSB1c2EgYG5nT25Jbml0YC9gbmdPbkRlc3Ryb3lgIChOTyBgaW9uVmlld1dpbGxFbnRlcmApIHBvcnF1ZVxuICAgKiBgdmFsLXBhZ2Utd3JhcHBlcmAgdXNhIGA8cm91dGVyLW91dGxldD5gIHBsYW5vIOKAlCBsb3MgaG9va3MgYGlvblZpZXcqYCBzb2xvXG4gICAqIGRpc3BhcmFuIGRlbnRybyBkZSBgPGlvbi1yb3V0ZXItb3V0bGV0PmAuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVJlZnJlc2gudW5yZWdpc3RlcigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWZyZXNjYSBlbCBlc3RhZG8gZGVsIGJyb3dzZXIgY29uIGRlYm91bmNlIOKAlCBldml0YSByw6FmYWdhcyBkZSBgZm9jdXNgLiAqL1xuICBwcml2YXRlIHNjaGVkdWxlQnJvd3NlclJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgdm9pZCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICB9LCB0aGlzLkZPQ1VTX0RFQk9VTkNFX01TKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24uXG4gICAqXG4gICAqIFRvZGEgbGEgbWVjw6FuaWNhIChwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gY29uIHJldHJ5IOKGkiB3YXRjaGRvZyBkZVxuICAgKiBhdXRvLXJlbG9hZCkgdml2ZSBlbiBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAgZGUgbGEgbGliLiBFbCBwYXNvIGRlXG4gICAqIHJlZ2lzdHJvIGRlbCBkZXZpY2UgZW4gZWwgYmFja2VuZCBzZSBwYXNhIGNvbW8gY2FsbGJhY2sgKGByZWdpc3RlckRldmljZWApXG4gICAqIHBvcnF1ZSBsYSBsaWIgbm8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW4gY3JlYXIgdW4gY2ljbG8uXG4gICAqXG4gICAqIGBlbmFibGUoKWAgbm8gaGFjZSB0aHJvdzogcmVzdWVsdmUgY29uIHVuIGBFbmFibGVQdXNoUmVzdWx0YCBkZXNjcmlwdGl2by5cbiAgICovXG4gIGFzeW5jIG9uRW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdlbmFibGluZycpO1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IEVuYWJsZVB1c2hSZXN1bHQgPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5lbmFibGUoe1xuICAgICAgICByZWdpc3RlckRldmljZTogdG9rZW4gPT4gdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgIC8vIFBlcnNpc3RpciBmbGFnIG1hc3RlciBzaSBhw7puIG5vIGVzdGFiYSBhY3Rpdm8uXG4gICAgICAgIGlmICghdGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByZWZzLnNldE5vdGlmaWNhdGlvbnNNYXN0ZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlbmFibGVTdWNjZXNzJyksXG4gICAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25QdXNoRW5hYmxlZD8uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICd0aW1lb3V0JyAmJiByZXN1bHQucmVsb2FkZWQpIHtcbiAgICAgICAgLy8gTGEgbGliIGRpc3BhcsOzIGVsIGF1dG8tcmVsb2FkIOKAlCBsYSBww6FnaW5hIGVzdMOhIHBvciByZWNhcmdhcnNlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZW5pZWQgLyB1bnN1cHBvcnRlZCAvIGVycm9yIC8gdGltZW91dCBzaW4gcmVsb2FkIOKGkiBmYWxsbyByZWN1cGVyYWJsZS5cbiAgICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gYGVuYWJsZSgpYCBubyBoYWNlIHRocm93LCBwZXJvIGVsIGNhbGxiYWNrIGRlIHJlZ2lzdHJvIHPDrSBwdWVkZS5cbiAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gw5puaWNvIHJlZnJlc2ggZmluYWw6IHJlLWFsaW5lYSBlbCB0b2dnbGUgVU5BIHNvbGEgdmV6IGNvbiBlbCBlc3RhZG8gcmVhbC5cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgICAgdGhpcy5fYnVzeS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdkaXNhYmxpbmcnKTtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRoLmRpc2FibGVOb3RpZmljYXRpb25zKCk7XG4gICAgICBpZiAodGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVmcy5zZXROb3RpZmljYXRpb25zTWFzdGVyKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Rpc2FibGVTdWNjZXNzJyksXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vblB1c2hEaXNhYmxlZD8uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgICB0aGlzLl9idXN5LnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVpbnRlbnRhciBsYSBzZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24sIHNpbiBpbXBvcnRhciBlbCBlc3RhZG8gYWN0dWFsLiAqL1xuICBhc3luYyBvblJldHJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLm9uRW5hYmxlKCk7XG4gIH1cblxuICB0b2dnbGVEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RldGFpbHMudXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgYXN5bmMgY29weVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRva2VuKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudHQoJ2RldGFpbHNDb3BpZWQnKSwgY29sb3I6ICdkYXJrJyB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENsaXBib2FyZCBBUEkgbm8gZGlzcG9uaWJsZS9kZW5lZ2FkYSDigJQgZmFsbGJhY2sgc2lsZW5jaW9zbywgc2luIHRvYXN0IGRlIGVycm9yLlxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YWRvc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hCcm93c2VyU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1N1cHBvcnRlZC5zZXQoYXdhaXQgdGhpcy5tZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSk7XG4gICAgdGhpcy5wZXJtaXNzaW9uLnNldCh0aGlzLmF1dGguZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCkpO1xuICAgIHRoaXMuY3VycmVudFRva2VuLnNldCh0aGlzLm1lc3NhZ2luZy5jdXJyZW50VG9rZW4gPz8gbnVsbCk7XG4gICAgdm9pZCB0aGlzLnJlcGFpclRva2VuSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBhcmEgZWwgdG9rZW4gRkNNIGVuIGJhY2tncm91bmQuXG4gICAqXG4gICAqIFNpIGVsIHVzdWFyaW8gdGllbmUgcHVzaCBhY3Rpdm8gKGBtYXN0ZXIgJiYgZ3JhbnRlZGApIHBlcm8gbm8gaGF5IHRva2VuIGVuXG4gICAqIG1lbW9yaWEg4oCUIGNhc28gdMOtcGljbyB0cmFzIHVuIGNvbGQgc3RhcnQgZGUgbGEgUFdBIOKAlCByZS1vYnRlbmVtb3MgZWwgdG9rZW5cbiAgICogeSByZS1yZWdpc3RyYW1vcyBlbCBkZXZpY2Ugc2luIHRvY2FyIGVsIHRvZ2dsZSBuaSBtb3N0cmFyIHVuIGVycm9yXG4gICAqIGFsYXJtaXN0YS4gRWwgdG9rZW4gZXMgdW4gZGV0YWxsZSBkZSBpbXBsZW1lbnRhY2nDs24gcmVwYXJhYmxlLCBubyBwYXJ0ZSBkZWxcbiAgICogZXN0YWRvIGRlIFVJICh2ZXIgYGlzRW5hYmxlZGApLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXBhaXJUb2tlbklmTmVlZGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICBpZiAodGhpcy5fcmVwYWlyaW5nVG9rZW4pIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4oKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fcmVwYWlyaW5nVG9rZW4gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2V0KHRva2VuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJlcGFyYWNpw7NuIGJlc3QtZWZmb3J0OiBubyBkZWdyYWRhbW9zIGVsIHRvZ2dsZSBuaSBtb3N0cmFtb3MgZXJyb3IuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlcGFpcmluZ1Rva2VuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGlPUyBicm93c2VyIHNpbiBlc3RhciBpbnN0YWxhZG8gY29tbyBQV0Eg4oCUIHB1c2ggd2ViIG5vIGRpc3BvbmlibGUuXG4gICAqIEFwbGljYSBhIFNhZmFyaSB5IGEgRWRnZS9DaHJvbWUvRmlyZWZveCBlbiBpT1MgKHRvZG9zIFdlYktpdCBwb3IgbWFuZGF0byBBcHBsZSkuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdE5lZWRzSU9TSW5zdGFsbCgpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuICAgIGNvbnN0IGlzSU9TID0gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodWEpO1xuICAgIGlmICghaXNJT1MpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc1N0YW5kYWxvbmUgPVxuICAgICAgd2luZG93Lm1hdGNoTWVkaWE/LignKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzIHx8XG4gICAgICAobmF2aWdhdG9yIGFzIHVua25vd24gYXMgeyBzdGFuZGFsb25lPzogYm9vbGVhbiB9KS5zdGFuZGFsb25lID09PSB0cnVlO1xuICAgIHJldHVybiAhaXNTdGFuZGFsb25lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
704
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXByZWZlcmVuY2VzLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUUzRixPQUFPLEVB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QUFvQiwwRkFDcEIsZUFBZSwwR0FDZixnQkFBZ0IsMkVBQ2hCLGNBQWMseUVBQ2QsYUFBYSx3RUFDYixrQkFBa0I7OzRGQWtTVCxvQ0FBb0M7a0JBNVNoRCxTQUFTOytCQUNFLG1DQUFtQyxjQUNqQyxJQUFJLFdBQ1A7d0JBQ1AsT0FBTzt3QkFDUCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGFBQWE7d0JBQ2Isa0JBQWtCO3FCQUNuQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBIVDt3REF3TFEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElvbkljb24gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHtcbiAgYWxlcnRDaXJjbGVPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25VcE91dGxpbmUsXG4gIGNsb3NlQ2lyY2xlT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc09mZk91dGxpbmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICByZWZyZXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9jb250YWluZXIvY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90b2dnbGUtaW5wdXQvdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuaW1wb3J0IHsgRW5hYmxlUHVzaFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9tZXNzYWdpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlUmVmcmVzaFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOT1RJRklDQVRJT05fUFJFRkVSRU5DRVNfVklFV19JMThOIH0gZnJvbSAnLi9ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlldy5pMThuJztcblxuYWRkSWNvbnMoe1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgY2hldnJvblVwT3V0bGluZSxcbiAgY2xvc2VDaXJjbGVPdXRsaW5lLFxuICBub3RpZmljYXRpb25zT2ZmT3V0bGluZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxufSk7XG5cbmNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gJ1NldHRpbmdzLk5vdGlmaWNhdGlvbnMnO1xuXG4vKipcbiAqIEVzdGFkb3MgZGUgbGEgdmlzdGEgZGUgcHJlZmVyZW5jaWFzIHB1c2g6XG4gKiAgLSBgaWRsZWA6ICAgICAgICAgIHRvZ2dsZSBvZmYsIHNpbiBvcGVyYWNpw7NuIGVuIGN1cnNvLCBzaW4gZXJyb3Jlc1xuICogIC0gYGVuYWJsaW5nYDogICAgICBzZWN1ZW5jaWEgZGUgYWN0aXZhY2nDs24gZW4gY3Vyc28gKHRvZ2dsZSBzcGlubmVyKVxuICogIC0gYGVuYWJsZWRgOiAgICAgICB0b2RvIE9LIChtYXN0ZXI9dHJ1ZSArIHBlcm1pc3Npb249Z3JhbnRlZCArIHRva2VuIHJlZ2lzdHJhZG8pXG4gKiAgLSBgZGlzYWJsaW5nYDogICAgIGRlc2FjdGl2YWNpw7NuIGVuIGN1cnNvXG4gKiAgLSBgZXJyb3JgOiAgICAgICAgIMO6bHRpbW8gaW50ZW50byBmYWxsw7Mg4oaSIG1lbnNhamUgKyBib3TDs24gXCJSZWludGVudGFyXCJcbiAqICAtIGBibG9ja2VkYDogICAgICAgbmF2ZWdhZG9yIGRlbmVnw7MgcGVybWlzb3Mg4oaSIG1lbnNhamUgKyBjw7NtbyBhcnJlZ2xhclxuICogIC0gYHVuc3VwcG9ydGVkYDogICBuYXZlZ2Fkb3Igbm8gc29wb3J0YSBGQ00g4oaSIG1lbnNhamVcbiAqICAtIGBuZWVkcy1pbnN0YWxsYDogaU9TIHNpbiBzdGFuZGFsb25lIOKGkiBpbnN0cnVjY2lvbmVzIGRlIGluc3RhbGFjacOzbiBQV0FcbiAqL1xudHlwZSBVaVN0YXRlID0gJ2lkbGUnIHwgJ2VuYWJsaW5nJyB8ICdlbmFibGVkJyB8ICdkaXNhYmxpbmcnIHwgJ2Vycm9yJyB8ICdibG9ja2VkJyB8ICd1bnN1cHBvcnRlZCcgfCAnbmVlZHMtaW5zdGFsbCc7XG5cbi8qKlxuICogYHZhbC1ub3RpZmljYXRpb24tcHJlZmVyZW5jZXMtdmlld2Ag4oCUICoqcHJlZmVyZW5jaWFzIGRlIG5vdGlmaWNhY2lvbmVzIHB1c2gqKlxuICogKEZDTSkgZnVsbC1mZWF0dXJlIGF1dG9jb250ZW5pZGEgKG9yZ2FuaXNtKS4gUHJvbW92aWRhIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbFxuICogcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqIFNlcGFyYWRhIGRlIGB2YWwtbm90aWZpY2F0aW9ucy12aWV3YCAoZWwgaW5ib3ggLyBmZWVkKS4gQXF1w60gZWwgdXNlciAqKmFjdGl2YSBvXG4gKiBkZXNhY3RpdmEqKiBsYXMgbm90aWZpY2FjaW9uZXMgcHVzaCBlbiBlc3RlIGRpc3Bvc2l0aXZvLlxuICpcbiAqIFVYIHNpbXBsaWZpY2FkbzogVU4gc29sbyB0b2dnbGUgcXVlIGVqZWN1dGEgdG9kYSBsYSBzZWN1ZW5jaWEgKHBlZGlyIHBlcm1pc28g4oaSXG4gKiBTVyByZWFkeSDihpIgZ2V0VG9rZW4g4oaSIHJlZ2lzdHJhciBlbiBiYWNrZW5kIOKGkiBzZXQgbWFzdGVyIHByZWYpIHbDrWFcbiAqIGBNZXNzYWdpbmdTZXJ2aWNlLmVuYWJsZSgpYC4gRWwgcmVnaXN0cm8gZGVsIGRldmljZSBlbiBlbCBiYWNrZW5kIHZhIGNvbW9cbiAqIGNhbGxiYWNrIChsYSBsaWIgbm8gZGVwZW5kZSBkZSBgQXV0aFNlcnZpY2VgIHBhcmEgZXZpdGFyIGNpY2xvcykuIE1lbnNhamVzXG4gKiBjb250ZXh0dWFsZXMgeSBib3TDs24gXCJSZWludGVudGFyXCIgYXBhcmVjZW4gc29sbyBjdWFuZG8gYXBsaWNhbi5cbiAqXG4gKiBOTyByZW5kZXJpemEgaW9uLWNvbnRlbnQg4oCUIHZpdmUgZGVudHJvIGRlIHZhbC1wYWdlLXdyYXBwZXIuIGBBY3RpdmF0ZWRSb3V0ZWAgc2VcbiAqIGlueWVjdGEgYHsgb3B0aW9uYWw6IHRydWUgfWAg4oaSIGZ1bmNpb25hIHNpbiByb3V0ZXIgKGVtYmViaWRhIC8gU3Rvcnlib29rKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLW5vdGlmaWNhdGlvbi1wcmVmZXJlbmNlcy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkljb24sXG4gICAgVG9nZ2xlSW5wdXRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBDb250YWluZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHZhbC1jb250YWluZXIgW3Byb3BzXT1cInsgc2l6ZTogJ21kJywgcGFkZGluZzogJ25vbmUnIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICduZWVkcy1pbnN0YWxsJykge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbFRpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW9zSW5zdGFsbEhpbnQnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPG9sIGNsYXNzPVwiaW5zdGFsbC1zdGVwc1wiPlxuICAgICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAxJykgfX08L2xpPlxuICAgICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAyJykgfX08L2xpPlxuICAgICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXAzJykgfX08L2xpPlxuICAgICAgICAgICAgICAgIDxsaT57eyB0dCgnaW9zSW5zdGFsbFN0ZXA0JykgfX08L2xpPlxuICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmLXJvd19faWNvblwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIm5vdGlmaWNhdGlvbnMtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZi1yb3dfX2JvZHlcIj5cbiAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZVRpdGxlJyksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3NpbXBsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIEBpZiAoYnVzeUxhYmVsKCk7IGFzIGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZi1yb3dfX2J1c3lcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWYtcm93X19jb250cm9sXCI+XG4gICAgICAgICAgICAgIDx2YWwtdG9nZ2xlLWlucHV0IFtwcm9wc109XCJ0b2dnbGVQcm9wcygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChjb250ZXh0TWVzc2FnZSgpOyBhcyBtc2cpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydFwiIFtjbGFzc109XCInYWxlcnQtLScgKyBhbGVydFZhcmlhbnQoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiYWxlcnRJY29uKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBtc2cgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHN0YXRlKCkgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwicmV0cnlCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uUmV0cnkoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RldGFpbHMgJiYgc3RhdGUoKSAhPT0gJ25lZWRzLWluc3RhbGwnICYmIHN0YXRlKCkgIT09ICd1bnN1cHBvcnRlZCcpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXRhaWxzLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRGV0YWlscygpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHNob3dEZXRhaWxzKCkgPyB0dCgnZGV0YWlsc0hpZGUnKSA6IHR0KCdkZXRhaWxzU2hvdycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwic2hvd0RldGFpbHMoKSA/ICdjaGV2cm9uLXVwLW91dGxpbmUnIDogJ2NoZXZyb24tZG93bi1vdXRsaW5lJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoc2hvd0RldGFpbHMoKSkge1xuICAgICAgICAgICAgICA8ZGwgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHNfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgPGR0Pnt7IHR0KCdkZXRhaWxzVG9rZW4nKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgICA8ZGQgY2xhc3M9XCJkZXRhaWxzX190b2tlblwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB0b2tlblByZXZpZXcoKSA/PyB0dCgnZGV0YWlsc05vbmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjdXJyZW50VG9rZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXRhaWxzX19jb3B5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjb3B5VG9rZW4oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdHQoJ2RldGFpbHNDb3B5JykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsc19fcm93XCI+XG4gICAgICAgICAgICAgICAgICA8ZHQ+e3sgdHQoJ2RpYWdub3N0aWNzUGVybWlzc2lvbicpIH19PC9kdD5cbiAgICAgICAgICAgICAgICAgIDxkZD57eyBwZXJtaXNzaW9uKCkgfX08L2RkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxkdD57eyB0dCgnZGlhZ25vc3RpY3NTdXBwb3J0ZWQnKSB9fTwvZHQ+XG4gICAgICAgICAgICAgICAgICA8ZGQ+e3sgaXNTdXBwb3J0ZWQoKSA/ICfinJMnIDogJ+KclycgfX08L2RkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC92YWwtY29udGFpbmVyPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAvKiBBbmNobyB5IGNyZWNpbWllbnRvIGNvbiBlbCByYWlsIGNvbGFwc2FkbyBsb3MgZGEgdmFsLWNvbnRhaW5lciAoc2l6ZVxuICAgICAgICAgJ21kJyksIG5vIENTUyBsb2NhbDogdmVyIGNvbnRhaW5lci5jb21wb25lbnQuc2Nzcy4gKi9cbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24tYm9keSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucyB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICB9XG5cbiAgICAgIC5ub3RpZi1yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDQ0cHggMWZyIGF1dG87XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2ljb24ge1xuICAgICAgICB3aWR0aDogNDRweDtcbiAgICAgICAgaGVpZ2h0OiA0NHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19faWNvbiBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5ub3RpZi1yb3dfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLm5vdGlmLXJvd19fYnVzeSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjOTI5NDljKTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG4gICAgICAubm90aWYtcm93X19jb250cm9sIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5hbGVydCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS40NTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydCBpb24taWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDFweDtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0td2FybmluZyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZy1zaGFkZSwgI2M3OWUwOCk7XG4gICAgICB9XG4gICAgICAuYWxlcnQtLWRhbmdlciBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLXNoYWRlLCAjY2YzYzRmKTtcbiAgICAgIH1cbiAgICAgIC5hbGVydC0taW5mbyBpb24taWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzZiNmI2Yik7XG4gICAgICB9XG5cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMWExYTFhKTtcbiAgICAgIH1cbiAgICAgIC5pbnN0YWxsLXN0ZXBzIGxpICsgbGkge1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICB9XG5cbiAgICAgIC5kZXRhaWxzLXRvZ2dsZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjNmI2YjZiKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLmRldGFpbHMtdG9nZ2xlIGlvbi1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgfVxuICAgICAgLmRldGFpbHMge1xuICAgICAgICBtYXJnaW46IDEycHggMCAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDE0MHB4IDFmcjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cgZHQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzZiNmI2Yik7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19yb3cgZGQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzFhMWExYSk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX3Rva2VuIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLmRldGFpbHNfX2NvcHkge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjMDA1NGU5KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5kZXRhaWxzX19jb3B5OmhvdmVyIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBtZXNzYWdpbmcgPSBpbmplY3QoTWVzc2FnaW5nU2VydmljZSk7XG4gIHByaXZhdGUgcGFnZVJlZnJlc2ggPSBpbmplY3QoUGFnZVJlZnJlc2hTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgcHJlZnMgPSBpbmplY3QoUHJlZmVyZW5jZXNTZXJ2aWNlKTtcbiAgLy8gYEFjdGl2YXRlZFJvdXRlYCBvcGNpb25hbCDihpIgbGEgdmlzdGEgZnVuY2lvbmEgZW1iZWJpZGEgLyBlbiBTdG9yeWJvb2sgc2luXG4gIC8vIHJvdXRlciAoc29sbyBsbyB1c2EgcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnIGNvbW8gZmFsbGJhY2spLlxuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZ2AgKHBvYmxhZG8gcG9yXG4gICAqIGBwcm92aWRlVmFsdGVjaE5vdGlmaWNhdGlvblByZWZlcmVuY2VzUm91dGVzYCkuIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvblxuICAgKiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IE5vdGlmaWNhdGlvblByZWZlcmVuY2VzVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPE9taXQ8Tm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnLCAnb25QdXNoRW5hYmxlZCcgfCAnb25QdXNoRGlzYWJsZWQnPj4gJlxuICAgICAgUGljazxOb3RpZmljYXRpb25QcmVmZXJlbmNlc1ZpZXdDb25maWcsICdvblB1c2hFbmFibGVkJyB8ICdvblB1c2hEaXNhYmxlZCc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydub3RpZmljYXRpb25QcmVmZXJlbmNlc0NvbmZpZyddID8/XG4gICAgICB7fSkgYXMgTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogTm90aWZpY2F0aW9uUHJlZmVyZW5jZXNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd0RldGFpbHM6IG1lcmdlZC5zaG93RGV0YWlscyA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICBvblB1c2hFbmFibGVkOiBtZXJnZWQub25QdXNoRW5hYmxlZCxcbiAgICAgIG9uUHVzaERpc2FibGVkOiBtZXJnZWQub25QdXNoRGlzYWJsZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIC8qKiBPcGVyYWNpw7NuIGVuIGN1cnNvIChnb2JpZXJuYSBzcGlubmVyIGRlbCB0b2dnbGUgKyBsYWJlbCBcIkFjdGl2YW5kb+KAplwiKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYnVzeSA9IHNpZ25hbDxudWxsIHwgJ2VuYWJsaW5nJyB8ICdkaXNhYmxpbmcnPihudWxsKTtcbiAgLyoqIFRydWUgc2kgZWwgw7psdGltbyBpbnRlbnRvIGZhbGzDsyDigJQgZ29iaWVybmEgZXN0YWRvIGBlcnJvcmAgKyByZXRyeSBidXR0b24uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhc3RGYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSByZS1vYnRpZW5lIGVsIHRva2VuIEZDTSBlbiBiYWNrZ3JvdW5kIChubyBhZmVjdGEgbGEgVUkpLiAqL1xuICBwcml2YXRlIF9yZXBhaXJpbmdUb2tlbiA9IGZhbHNlO1xuICAvKiogVG9nZ2xlIGRlbCBleHBhbmQgZGUgZGV0YWxsZXMgdMOpY25pY29zLiAqL1xuICByZWFkb25seSBzaG93RGV0YWlscyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbiA9IHNpZ25hbDxOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGU+KCdkZWZhdWx0Jyk7XG4gIHJlYWRvbmx5IGlzU3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFRva2VuID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBuZWVkc0lPU0luc3RhbGwgPSBzaWduYWwodGhpcy5kZXRlY3ROZWVkc0lPU0luc3RhbGwoKSk7XG5cbiAgLyoqIEZvcm1Db250cm9sIGRlbCB0b2dnbGUgKHN5bmMtZWFkbyBjb24gYGlzRW5hYmxlZGAgdmlhIGVmZmVjdCkuICovXG4gIHJlYWRvbmx5IHRvZ2dsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBub25OdWxsYWJsZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqIEhhbmRsZXIgZGVsIGxpc3RlbmVyIGBmb2N1c2Ag4oCUIHJlZmVyZW5jaWEgZ3VhcmRhZGEgcGFyYSBwb2RlciByZW1vdmVybG8uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb25XaW5kb3dGb2N1cyA9ICgpID0+IHRoaXMuc2NoZWR1bGVCcm93c2VyUmVmcmVzaCgpO1xuICAvKiogVGltZXIgZGVsIGRlYm91bmNlIGRlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSBmb2N1c0RlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBWZW50YW5hIGRlIGRlYm91bmNlIChtcykgcGFyYSBlbCByZWZyZXNoIGRpc3BhcmFkbyBwb3IgYGZvY3VzYC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBGT0NVU19ERUJPVU5DRV9NUyA9IDUwMDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gRXN0YWRvIGRlcml2YWRvXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZWZlY3Rpdm8gZGVsIHRvZ2dsZTogXCJlbCB1c3VhcmlvIHRpZW5lIHB1c2ggYWN0aXZvXCIuXG4gICAqXG4gICAqIFNlIGRlcml2YSBTT0xPIGRlIGxhIGRlY2lzacOzbiBkZWwgdXN1YXJpbyAoYG1hc3RlcmApIHkgZGVsIHBlcm1pc28gZGVsIFNPXG4gICAqIChgcGVybWlzc2lvbmApLiBFbCB0b2tlbiBGQ00gTk8gZm9ybWEgcGFydGUgZGVsIGVzdGFkbyBkZSBVSTogdml2ZSBlblxuICAgKiBtZW1vcmlhLCBzZSBwaWVyZGUgZW4gY2FkYSByZWNhcmdhL3N1c3BlbnNpw7NuIGRlIGxhIFBXQSB5IHByb2R1Y2lyw61hIGZsaWNrZXIuXG4gICAqIFNpIGZhbHRhIHRva2VuIGNvbiBgbWFzdGVyICYmIGdyYW50ZWRgLCBlcyB1biBkZXRhbGxlIHJlcGFyYWJsZSBlblxuICAgKiBiYWNrZ3JvdW5kICh2ZXIgYHJlcGFpclRva2VuSWZOZWVkZWRgKSwgbm8gdW4gY2FtYmlvIGRlbCB0b2dnbGUuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLm5vdGlmaWNhdGlvbnNNYXN0ZXIoKSAmJiB0aGlzLnBlcm1pc3Npb24oKSA9PT0gJ2dyYW50ZWQnKTtcblxuICByZWFkb25seSBzdGF0ZSA9IGNvbXB1dGVkPFVpU3RhdGU+KCgpID0+IHtcbiAgICBpZiAodGhpcy5uZWVkc0lPU0luc3RhbGwoKSkgcmV0dXJuICduZWVkcy1pbnN0YWxsJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcgfHwgIXRoaXMuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgLy8gaU9TIHN0YW5kYWxvbmUgYcO6biBwdWVkZSBkYXIgaXNTdXBwb3J0ZWQgZmFsc2UgdGVtcHJhbm8gYW50ZXMgZGUgaW5pdCDigJRcbiAgICAgIC8vIHNvbG8gYmxvcXVlYW1vcyBzaSBlbCBicm93c2VyIGV4cGzDrWNpdGFtZW50ZSBubyBzb3BvcnRhIEFQSXMuXG4gICAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICd1bnN1cHBvcnRlZCcpIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICBjb25zdCBidXN5ID0gdGhpcy5fYnVzeSgpO1xuICAgIGlmIChidXN5ID09PSAnZW5hYmxpbmcnKSByZXR1cm4gJ2VuYWJsaW5nJztcbiAgICBpZiAoYnVzeSA9PT0gJ2Rpc2FibGluZycpIHJldHVybiAnZGlzYWJsaW5nJztcbiAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuICdlbmFibGVkJztcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uKCkgPT09ICdkZW5pZWQnKSByZXR1cm4gJ2Jsb2NrZWQnO1xuICAgIGlmICh0aGlzLl9sYXN0RmFpbGVkKCkpIHJldHVybiAnZXJyb3InO1xuICAgIHJldHVybiAnaWRsZSc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJ1c3lMYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZW5hYmxpbmcnKSByZXR1cm4gdGhpcy50dCgnZW5hYmxpbmcnKTtcbiAgICBpZiAocyA9PT0gJ2Rpc2FibGluZycpIHJldHVybiB0aGlzLnR0KCdkaXNhYmxpbmcnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGV4dE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLnN0YXRlKCkpIHtcbiAgICAgIGNhc2UgJ3Vuc3VwcG9ydGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHQoJ3Blcm1pc3Npb25VbnN1cHBvcnRlZCcpO1xuICAgICAgY2FzZSAnYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnR0KCdwZXJtaXNzaW9uRGVuaWVkSW5mbycpO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gdGhpcy50dCgnZXJyb3JHZW5lcmljJyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0VmFyaWFudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAnZXJyb3InIHx8IHMgPT09ICdibG9ja2VkJykgcmV0dXJuICd3YXJuaW5nJztcbiAgICBpZiAocyA9PT0gJ3Vuc3VwcG9ydGVkJykgcmV0dXJuICdkYW5nZXInO1xuICAgIHJldHVybiAnaW5mbyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsZXJ0SWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzID0gdGhpcy5zdGF0ZSgpO1xuICAgIGlmIChzID09PSAndW5zdXBwb3J0ZWQnKSByZXR1cm4gJ2Nsb3NlLWNpcmNsZS1vdXRsaW5lJztcbiAgICByZXR1cm4gJ2FsZXJ0LWNpcmNsZS1vdXRsaW5lJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG9nZ2xlUHJvcHMgPSBjb21wdXRlZDxUb2dnbGVJbnB1dE1ldGFkYXRhPigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMudG9nZ2xlQ29udHJvbCxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOlxuICAgICAgdGhpcy5fYnVzeSgpICE9PSBudWxsIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICd1bnN1cHBvcnRlZCcgfHxcbiAgICAgIHRoaXMuc3RhdGUoKSA9PT0gJ25lZWRzLWluc3RhbGwnIHx8XG4gICAgICB0aGlzLnN0YXRlKCkgPT09ICdibG9ja2VkJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyZXRyeUN0YScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBpY29uOiB7IG5hbWU6ICdyZWZyZXNoLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgc3RhdGU6IHRoaXMuX2J1c3koKSAhPT0gbnVsbCA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0b2tlblByZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuKCk7XG4gICAgaWYgKCF0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gYCR7dC5zbGljZSgwLCAyMil94oCmJHt0LnNsaWNlKC02KX1gO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTGlmZWN5Y2xlXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgTk9USUZJQ0FUSU9OX1BSRUZFUkVOQ0VTX1ZJRVdfSTE4Tik7XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG5cbiAgICB2b2lkIHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuXG4gICAgLy8gUmUtYXBsaWNhciBoZWFkZXIgZW4gY2FtYmlvIGRlIGlkaW9tYS5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIFN5bmMgRm9ybUNvbnRyb2wg4oaQ4oaSIGVzdGFkbyBlZmVjdGl2by4gQ3VhbmRvIGVsIGVzdGFkbyBjYW1iaWEgKGNhbWJpbyBkZVxuICAgIC8vIHBlcm1pc3Npb24gcG9yIGVsIGJyb3dzZXIsIG8gc25hcHNob3QgRmlyZXN0b3JlIGRlIGBtYXN0ZXJgKSwgZWwgdG9nZ2xlIHNlXG4gICAgLy8gcmUtYWxpbmVhIGNvbiBsYSByZWFsaWRhZC5cbiAgICAvL1xuICAgIC8vIElNUE9SVEFOVEU6IHNlIGlnbm9yYW4gbG9zIGNhbWJpb3MgbWllbnRyYXMgaGF5IHVuYSBvcGVyYWNpw7NuIGVuIGN1cnNvXG4gICAgLy8gKGBfYnVzeSgpICE9PSBudWxsYCkuIER1cmFudGUgYG9uRW5hYmxlYC9gb25EaXNhYmxlYCBsYXMgc2XDsWFsZXMgZnVlbnRlIHNlXG4gICAgLy8gYWN0dWFsaXphbiBlbiBtb21lbnRvcyBkaXN0aW50b3MgeSBwcm9kdWNpcsOtYW4gZXN0YWRvcyBpbnRlcm1lZGlvcyDihpJcbiAgICAvLyBmbGlja2VyIHZpc2libGUuIEVsIHRvZ2dsZSBzZSByZS1hbGluZWEgVU5BIHNvbGEgdmV6IGVuIGVsIGBmaW5hbGx5YC5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVmZiA9IHRoaXMuaXNFbmFibGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlQ29udHJvbC52YWx1ZSAhPT0gZWZmKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVDb250cm9sLnNldFZhbHVlKGVmZiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIC8vIEludGVyY2VwdGFyIGNsaWNrIGRlbCB1c2VyOiBlbCB0b2dnbGUgeWEgY2FtYmnDsyB2aXN1YWxtZW50ZSwgZWplY3V0YXJcbiAgICAvLyBsYSBhY2Npw7NuIGNvcnJlc3BvbmRpZW50ZS5cbiAgICB0aGlzLnRvZ2dsZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICAgIGlmICh2ICYmICF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkVuYWJsZSgpO1xuICAgICAgfSBlbHNlIGlmICghdiAmJiB0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHZvaWQgdGhpcy5vbkRpc2FibGUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERldGVjdGFyIHJlZ3Jlc28gYSBsYSBwZXN0YcOxYSDigJQgZWwgdXNlciBwdWRvIGhhYmVyIGNhbWJpYWRvIHBlcm1pc29zXG4gICAgLy8gZGVzZGUgbGEgY29uZmlnIGRlbCBicm93c2VyLiBFbCByZWZyZXNoIHZhIGNvbiBkZWJvdW5jZSBwYXJhIG5vXG4gICAgLy8gZGlzcGFyYXJzZSBlbiByw6FmYWdhcyAoZW4gUFdBIG1vYmlsZSBgZm9jdXNgIHNhbHRhIGNvbiBjYWRhIGNhbWJpbyBkZVxuICAgIC8vIGFwcCAvIGFwYXJpY2nDs24gZGVsIHRlY2xhZG8pLiBFbCBsaXN0ZW5lciBzZSByZW11ZXZlIGVuIG5nT25EZXN0cm95LlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgZWwgcHVsbC10by1yZWZyZXNoIGVzdMOhbmRhci4gQXVucXVlIGVzdGEgdmlzdGEgbm8gbXVlc3RyYSB1bmFcbiAgICogbGlzdGEgcmVtb3RhLCBzw60gcmVmbGVqYSBlc3RhZG8gbXV0YWJsZSBkZWwgYnJvd3NlciAocGVybWlzbywgdG9rZW4sXG4gICAqIHNvcG9ydGUgRkNNKSBxdWUgcHVlZGUgY2FtYmlhciBmdWVyYSBkZSBsYSBhcHAg4oCUIGVsIHJlZnJlc2ggcmUtZXZhbMO6YSB0b2RvLlxuICAgKlxuICAgKiBTZSB1c2EgYG5nT25Jbml0YC9gbmdPbkRlc3Ryb3lgIChOTyBgaW9uVmlld1dpbGxFbnRlcmApIHBvcnF1ZVxuICAgKiBgdmFsLXBhZ2Utd3JhcHBlcmAgdXNhIGA8cm91dGVyLW91dGxldD5gIHBsYW5vIOKAlCBsb3MgaG9va3MgYGlvblZpZXcqYCBzb2xvXG4gICAqIGRpc3BhcmFuIGRlbnRybyBkZSBgPGlvbi1yb3V0ZXItb3V0bGV0PmAuXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VSZWZyZXNoLnJlZ2lzdGVyKCgpID0+IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVJlZnJlc2gudW5yZWdpc3RlcigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldpbmRvd0ZvY3VzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWZyZXNjYSBlbCBlc3RhZG8gZGVsIGJyb3dzZXIgY29uIGRlYm91bmNlIOKAlCBldml0YSByw6FmYWdhcyBkZSBgZm9jdXNgLiAqL1xuICBwcml2YXRlIHNjaGVkdWxlQnJvd3NlclJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNEZWJvdW5jZVRpbWVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0RlYm91bmNlVGltZXIpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0RlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgdm9pZCB0aGlzLnJlZnJlc2hCcm93c2VyU3RhdGUoKTtcbiAgICB9LCB0aGlzLkZPQ1VTX0RFQk9VTkNFX01TKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBBY3Rpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBTZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24uXG4gICAqXG4gICAqIFRvZGEgbGEgbWVjw6FuaWNhIChwZXJtaXNzaW9uIOKGkiBTVyByZWFkeSDihpIgZ2V0VG9rZW4gY29uIHJldHJ5IOKGkiB3YXRjaGRvZyBkZVxuICAgKiBhdXRvLXJlbG9hZCkgdml2ZSBlbiBgTWVzc2FnaW5nU2VydmljZS5lbmFibGUoKWAgZGUgbGEgbGliLiBFbCBwYXNvIGRlXG4gICAqIHJlZ2lzdHJvIGRlbCBkZXZpY2UgZW4gZWwgYmFja2VuZCBzZSBwYXNhIGNvbW8gY2FsbGJhY2sgKGByZWdpc3RlckRldmljZWApXG4gICAqIHBvcnF1ZSBsYSBsaWIgbm8gcHVlZGUgZGVwZW5kZXIgZGUgYEF1dGhTZXJ2aWNlYCBzaW4gY3JlYXIgdW4gY2ljbG8uXG4gICAqXG4gICAqIGBlbmFibGUoKWAgbm8gaGFjZSB0aHJvdzogcmVzdWVsdmUgY29uIHVuIGBFbmFibGVQdXNoUmVzdWx0YCBkZXNjcmlwdGl2by5cbiAgICovXG4gIGFzeW5jIG9uRW5hYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdlbmFibGluZycpO1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IEVuYWJsZVB1c2hSZXN1bHQgPSBhd2FpdCB0aGlzLm1lc3NhZ2luZy5lbmFibGUoe1xuICAgICAgICByZWdpc3RlckRldmljZTogdG9rZW4gPT4gdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKS50aGVuKHIgPT4gci5yZWdpc3RlcmVkKSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2VuYWJsZWQnKSB7XG4gICAgICAgIC8vIFBlcnNpc3RpciBmbGFnIG1hc3RlciBzaSBhw7puIG5vIGVzdGFiYSBhY3Rpdm8uXG4gICAgICAgIGlmICghdGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByZWZzLnNldE5vdGlmaWNhdGlvbnNNYXN0ZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdlbmFibGVTdWNjZXNzJyksXG4gICAgICAgICAgZHVyYXRpb246IDIwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25QdXNoRW5hYmxlZD8uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICd0aW1lb3V0JyAmJiByZXN1bHQucmVsb2FkZWQpIHtcbiAgICAgICAgLy8gTGEgbGliIGRpc3BhcsOzIGVsIGF1dG8tcmVsb2FkIOKAlCBsYSBww6FnaW5hIGVzdMOhIHBvciByZWNhcmdhcnNlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZW5pZWQgLyB1bnN1cHBvcnRlZCAvIGVycm9yIC8gdGltZW91dCBzaW4gcmVsb2FkIOKGkiBmYWxsbyByZWN1cGVyYWJsZS5cbiAgICAgICAgdGhpcy5fbGFzdEZhaWxlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gYGVuYWJsZSgpYCBubyBoYWNlIHRocm93LCBwZXJvIGVsIGNhbGxiYWNrIGRlIHJlZ2lzdHJvIHPDrSBwdWVkZS5cbiAgICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnZXJyb3JHZW5lcmljJyksXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gw5puaWNvIHJlZnJlc2ggZmluYWw6IHJlLWFsaW5lYSBlbCB0b2dnbGUgVU5BIHNvbGEgdmV6IGNvbiBlbCBlc3RhZG8gcmVhbC5cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEJyb3dzZXJTdGF0ZSgpO1xuICAgICAgdGhpcy5fYnVzeS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25EaXNhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2J1c3kuc2V0KCdkaXNhYmxpbmcnKTtcbiAgICB0aGlzLl9sYXN0RmFpbGVkLnNldChmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hdXRoLmRpc2FibGVOb3RpZmljYXRpb25zKCk7XG4gICAgICBpZiAodGhpcy5wcmVmcy5ub3RpZmljYXRpb25zTWFzdGVyKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVmcy5zZXROb3RpZmljYXRpb25zTWFzdGVyKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2Rpc2FibGVTdWNjZXNzJyksXG4gICAgICAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBwb3NpdGlvbjogJ3RvcCcsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vblB1c2hEaXNhYmxlZD8uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9sYXN0RmFpbGVkLnNldCh0cnVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQnJvd3NlclN0YXRlKCk7XG4gICAgICB0aGlzLl9idXN5LnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVpbnRlbnRhciBsYSBzZWN1ZW5jaWEgY29tcGxldGEgZGUgYWN0aXZhY2nDs24sIHNpbiBpbXBvcnRhciBlbCBlc3RhZG8gYWN0dWFsLiAqL1xuICBhc3luYyBvblJldHJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2xhc3RGYWlsZWQuc2V0KGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLm9uRW5hYmxlKCk7XG4gIH1cblxuICB0b2dnbGVEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RldGFpbHMudXBkYXRlKHYgPT4gIXYpO1xuICB9XG5cbiAgYXN5bmMgY29weVRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRva2VuKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudHQoJ2RldGFpbHNDb3BpZWQnKSwgY29sb3I6ICdkYXJrJyB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENsaXBib2FyZCBBUEkgbm8gZGlzcG9uaWJsZS9kZW5lZ2FkYSDigJQgZmFsbGJhY2sgc2lsZW5jaW9zbywgc2luIHRvYXN0IGRlIGVycm9yLlxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YWRvc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hCcm93c2VyU3RhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1N1cHBvcnRlZC5zZXQoYXdhaXQgdGhpcy5tZXNzYWdpbmcuaXNTdXBwb3J0ZWQoKSk7XG4gICAgdGhpcy5wZXJtaXNzaW9uLnNldCh0aGlzLmF1dGguZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCkpO1xuICAgIHRoaXMuY3VycmVudFRva2VuLnNldCh0aGlzLm1lc3NhZ2luZy5jdXJyZW50VG9rZW4gPz8gbnVsbCk7XG4gICAgdm9pZCB0aGlzLnJlcGFpclRva2VuSWZOZWVkZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBhcmEgZWwgdG9rZW4gRkNNIGVuIGJhY2tncm91bmQuXG4gICAqXG4gICAqIFNpIGVsIHVzdWFyaW8gdGllbmUgcHVzaCBhY3Rpdm8gKGBtYXN0ZXIgJiYgZ3JhbnRlZGApIHBlcm8gbm8gaGF5IHRva2VuIGVuXG4gICAqIG1lbW9yaWEg4oCUIGNhc28gdMOtcGljbyB0cmFzIHVuIGNvbGQgc3RhcnQgZGUgbGEgUFdBIOKAlCByZS1vYnRlbmVtb3MgZWwgdG9rZW5cbiAgICogeSByZS1yZWdpc3RyYW1vcyBlbCBkZXZpY2Ugc2luIHRvY2FyIGVsIHRvZ2dsZSBuaSBtb3N0cmFyIHVuIGVycm9yXG4gICAqIGFsYXJtaXN0YS4gRWwgdG9rZW4gZXMgdW4gZGV0YWxsZSBkZSBpbXBsZW1lbnRhY2nDs24gcmVwYXJhYmxlLCBubyBwYXJ0ZSBkZWxcbiAgICogZXN0YWRvIGRlIFVJICh2ZXIgYGlzRW5hYmxlZGApLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXBhaXJUb2tlbklmTmVlZGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9idXN5KCkgIT09IG51bGwpIHJldHVybjtcbiAgICBpZiAodGhpcy5fcmVwYWlyaW5nVG9rZW4pIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4oKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5fcmVwYWlyaW5nVG9rZW4gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nLmdldFRva2VuKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2V0KHRva2VuKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKHRva2VuKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFJlcGFyYWNpw7NuIGJlc3QtZWZmb3J0OiBubyBkZWdyYWRhbW9zIGVsIHRvZ2dsZSBuaSBtb3N0cmFtb3MgZXJyb3IuXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlcGFpcmluZ1Rva2VuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGlPUyBicm93c2VyIHNpbiBlc3RhciBpbnN0YWxhZG8gY29tbyBQV0Eg4oCUIHB1c2ggd2ViIG5vIGRpc3BvbmlibGUuXG4gICAqIEFwbGljYSBhIFNhZmFyaSB5IGEgRWRnZS9DaHJvbWUvRmlyZWZveCBlbiBpT1MgKHRvZG9zIFdlYktpdCBwb3IgbWFuZGF0byBBcHBsZSkuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdE5lZWRzSU9TSW5zdGFsbCgpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuICAgIGNvbnN0IGlzSU9TID0gL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodWEpO1xuICAgIGlmICghaXNJT1MpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBpc1N0YW5kYWxvbmUgPVxuICAgICAgd2luZG93Lm1hdGNoTWVkaWE/LignKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzIHx8XG4gICAgICAobmF2aWdhdG9yIGFzIHVua25vd24gYXMgeyBzdGFuZGFsb25lPzogYm9vbGVhbiB9KS5zdGFuZGFsb25lID09PSB0cnVlO1xuICAgIHJldHVybiAhaXNTdGFuZGFsb25lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19